diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..02b0658f3d --- /dev/null +++ b/.editorconfig @@ -0,0 +1,29 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + + +[*] +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +indent_style = space +indent_size = 2 + +[*.py] +indent_size = 4 +max_line_length = 88 + +[*.txt] +indent_style = tab +indent_size = 4 +max_line_length = 79 + +[*.{diff}] +trim_trailing_whitespace = false + +[Makefile] +indent_style = tab diff --git a/.github/ISSUE_TEMPLATE/NCO_bug_report.yml b/.github/ISSUE_TEMPLATE/NCO_bug_report.yml new file mode 100644 index 0000000000..cc53205807 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/NCO_bug_report.yml @@ -0,0 +1,66 @@ +name: NCO Bug report +description: Report something that is incorrect or broken +labels: ["nco-bug", "triage"] +assignees: + - aerorahul + +body: + - type: markdown + attributes: + value: | + Your bug may already be reported! + Please search on the [Issue tracker](https://github.com/NOAA-EMC/global-workflow/issues) before creating one. + + - type: textarea + id: current_behavior + attributes: + label: What is wrong? + description: Give a brief description of what is incorrect or broken. + placeholder: | + Short log snippets that illustrate the problem can be included here. + + For any longer logs, please create a GitHub gist (https://gist.github.com/) and link it here. + validations: + required: true + + - type: textarea + id: expected_behavior + attributes: + label: What should have happened? + placeholder: Describe what you expected to happen. + validations: + required: true + + - type: textarea + id: reproduction_steps + attributes: + label: Steps to reproduce + description: Please give explicit instructions to reproduce the error + placeholder: | + 1. + 2. + 3. + validations: + required: true + + - type: input + id: bugzilla + attributes: + label: Bugzilla issue + description: What is the corresponding NCO bugzilla issue number? + placeholder: "#..." + + - type: textarea + id: description + attributes: + label: Additional information + description: Provide context or any additional information about the bug. + validations: + required: true + + - type: textarea + id: proposed_implementation + attributes: + label: Do you have a proposed solution? + description: If you already have an idea on how to fix this, please provide it here. + placeholder: Optional diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000000..ade36811cc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,75 @@ +name: Bug report +description: Report something that is incorrect or broken +labels: ["bug", "triage"] + +body: + - type: markdown + attributes: + value: | + Your bug may already be reported! + Please search on the [Issue tracker](https://github.com/NOAA-EMC/global-workflow/issues) before creating one. + + - type: textarea + id: current_behavior + attributes: + label: What is wrong? + description: Give a brief description of what is incorrect or broken. + placeholder: | + Short log snippets that illustrate the problem can be included here. + + For any longer logs, please create a GitHub gist (https://gist.github.com/) and link it here. + validations: + required: true + + - type: textarea + id: expected_behavior + attributes: + label: What should have happened? + placeholder: Describe what you expected to happen. + validations: + required: true + + - type: dropdown + id: hpc + attributes: + label: What machines are impacted? + description: You may select multiple machines. + multiple: true + options: + - All or N/A + - WCOSS2 + - Hera + - Orion + - Jet + - Cloud + validations: + required: true + + - type: textarea + id: reproduction_steps + attributes: + label: Steps to reproduce + description: Please give explicit instructions to reproduce the error + placeholder: | + 1. + 2. + 3. + validations: + required: true + + - type: textarea + id: description + attributes: + label: Additional information + description: Provide context or any additional information about the bug. + validations: + required: true + + - type: textarea + id: propsed_implementation + attributes: + label: Do you have a proposed solution? + description: If you already have an idea on how to fix this, please provide it here. + placeholder: Optional + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000000..3ba13e0cec --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 0000000000..3aed58c520 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,55 @@ +name: Feature request +description: Request new capability +labels: ["feature", "triage"] + +body: + - type: markdown + attributes: + value: | + If your issue falls into one of the follow categories, please go back and use the appropriate template: + - Something is wrong or broken + - It is a request from NCO + - It is initiating a production update + - Files need to be updated or added to fix + + + Please search on the [Issue tracker](https://github.com/NOAA-EMC/global-workflow/issues) to make sure the feature has not already been requested to avoid duplicates. + + - type: textarea + id: description + attributes: + label: What new functionality do you need? + placeholder: Provide a consise description of the problem to be addressed by this feature request. Please be clear what parts of the problem are considered to be in-scope and out-of-scope + validations: + required: true + + - type: textarea + id: requirements + attributes: + label: What are the requirements for the new functionality? + validations: + required: true + + - type: textarea + id: criteria + attributes: + label: Acceptance Criteria + placeholder: What does it mean for this issue to be complete? + validations: + required: true + + - type: textarea + id: suggested_solution + attributes: + label: Suggest a solution (optional) + placeholder: | + Propose how this issue can be resolved. + + Things to address include: + * Details of the technical implementation + * Tradeoffs made in design decisions + * Caveats and considerations for the future + + If there are multiple solutions, please present each one separately. Save comparisons for the very end.)" + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/fix_file.yml b/.github/ISSUE_TEMPLATE/fix_file.yml new file mode 100644 index 0000000000..3f5b69cd1d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/fix_file.yml @@ -0,0 +1,97 @@ +name: Fix File Update +description: Request fix files be added or updated +labels: ["Fix Files", "triage"] +assignees: + - KateFriedman-NOAA + - WalterKolczynski-NOAA + +body: + - type: dropdown + attributes: + label: Target fix directory + options: + - NEW + - aer + - am + - chem + - cice + - cpl + - datm + - gdas/crtm + - gdas/fv3jedi + - gdas/gsibec + - gldas + - glwu + - gsi + - lut + - mom6 + - orog + - raw + - reg2grb2 + - sfc_climo + - ugwd + - verif + - wave + multiple: true + validations: + required: true + + - type: checkboxes + attributes: + label: Type of change + options: + - label: Update existing files + - label: Remove files + - label: Add new files to existing directory + - label: Add new fix directory + validations: + required: true + + - type: dropdown + attributes: + label: Any workflow changes needed? + description: | + Any change other than adding files to an existing directory will require at least a new fix version. + options: + - No change needed + - Fix version only + - Fix version + additional changes + validations: + required: true + + - type: textarea + attributes: + label: Related issues + description: Please link any related issues in other repositories + placeholder: NOAA-EMC/repo#1234 + validations: + required: false + + - type: input + attributes: + label: Pickup location + description: | + Please provide a path to the data on either Hera or WCOSS. + + If this requires a version update, please provide the *entire* directory, including unchanged files from current fix. + placeholder: '/path/to/new/fix' + validations: + required: true + + - type: input + attributes: + label: Size + description: How much bigger/smaller is the new set from the existing set (in MB)? + placeholder: '0' + validations: + required: true + + - type: markdown + attributes: + value: | + # Tasks + - [ ] Discuss needs with global-workflow developer assigned to request. + - [ ] Add/update/remove fix file(s) in fix sets on supported platforms (global-workflow assignee task). + - [ ] Update "Fix File Management" spreadsheet (https://docs.google.com/spreadsheets/d/1BeIvcz6TO3If4YCqkUK-oz_kGS9q2wTjwLS-BBemSEY/edit?usp=sharing). + - [ ] Make related workflow/component updates. + diff --git a/.github/ISSUE_TEMPLATE/production_update.yml b/.github/ISSUE_TEMPLATE/production_update.yml new file mode 100644 index 0000000000..ac9ada505a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/production_update.yml @@ -0,0 +1,50 @@ +name: Production Update +description: Begin the process of an operational production update +labels: ["production update", "triage"] +assignees: + - WalterKolczynski-NOAA + - KateFriedman-NOAA + +body: + - type: textarea + id: description + attributes: + label: Description + description: Provide a concise description of the production update. + placeholder: Include related issues in component repositories. + validations: + required: true + + - type: input + id: target + attributes: + label: Target version + description: What is the target GFS version? + placeholder: Use v#.#.# format + validations: + required: true + + - type: textarea + id: changes + attributes: + label: Expected workflow changes + description: What are the anticipated changes coming into the workflow? + placeholder: Include version variables, checkout tags, config/parm, etc. + validations: + required: true + + - type: markdown + attributes: + value: | + ** Tasks ** + - [ ] Create release branch + - [ ] Make workflow changes for upgrade in release branch (add additional checklist items as needed) + - [ ] Create release notes + - [ ] Cut hand-off tag for CDF + - [ ] Submit CDF to NCO + - [ ] Implementation into operations complete + - [ ] Merge release branch into operational branch + - [ ] Cut version tag from operational branch + - [ ] Release new version tag + - [ ] Announce to users + - [ ] Update Read-The-Docs operations status version in develop diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000000..dbebfe8f6e --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,53 @@ + + + +# Description + + + +# Type of change + +- Bug fix (fixes something broken) +- New feature (adds functionality) +- Maintenance (code refactor, clean-up, new CI test, etc.) + +# Change characteristics +- Is this a breaking change (a change in existing functionality)? YES/NO +- Does this change require a documentation update? YES/NO + +# How has this been tested? + + +# Checklist +- [ ] Any dependent changes have been merged and published +- [ ] My code follows the style guidelines of this project +- [ ] I have performed a self-review of my own code +- [ ] I have commented my code, particularly in hard-to-understand areas +- [ ] My changes generate no new warnings +- [ ] New and existing tests pass with my changes +- [ ] I have made corresponding changes to the documentation if necessary diff --git a/.github/scripts/build_docs.sh b/.github/scripts/build_docs.sh new file mode 100755 index 0000000000..7fb6701da2 --- /dev/null +++ b/.github/scripts/build_docs.sh @@ -0,0 +1,31 @@ +#! /bin/bash + +set -eux + +# path to docs directory relative to top level of repository +# $GITHUB_WORKSPACE is set if the actions/checkout@v3 action is run first + +cwd=$(pwd) +DOCS_DIR="${GITHUB_WORKSPACE}/docs" + +# run Make to build the documentation and return to previous directory +cd "${DOCS_DIR}" +make clean html +cd "${cwd}" + +# copy HTML output into directory to create an artifact +mkdir -p artifact/documentation +cp -R "${DOCS_DIR}/build/html/." artifact/documentation + +# check if the warnings.log file is empty +# Copy it into the artifact and documeentation directories +# so it will be available in the artifacts +warning_file="${DOCS_DIR}/build/warnings.log" +if [[ -s ${warning_file} ]]; then + cp -r "${DOCS_DIR}/build/warnings.log" artifact/doc_warnings.log + cp artifact/doc_warnings.log artifact/documentation + echo "Warnings were encountered while building documentation." + echo "========== Begin warnings ==========" + cat artifact/doc_warnings.log + echo "=========== End warnings ===========" +fi diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml new file mode 100644 index 0000000000..20e4a97f9c --- /dev/null +++ b/.github/workflows/docs.yaml @@ -0,0 +1,72 @@ +name: Build and Deploy Documentation +on: + push: + branches: + - develop + - feature/* + - main/* + - bugfix/* + - release/* + paths: + - docs/** + pull_request_target: + types: [issues, opened, reopened, synchronize] + paths: + - docs/** + +jobs: + + documentation: + + permissions: + pull-requests: 'write' + + runs-on: ubuntu-latest + name: Build and deploy documentation + + steps: + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: "3.9" + + - name: Install (upgrade) python dependencies + run: | + pip install --upgrade pip sphinx sphinx-gallery sphinx_rtd_theme sphinxcontrib-bibtex + + - name: Checkout + uses: actions/checkout@v3 + + - name: Build documentation + run: | + ./.github/scripts/build_docs.sh + + - name: Upload documentation (on success) + uses: actions/upload-artifact@v3 + if: always() + with: + name: documentation + path: artifact/documentation + + - name: Upload warnings (on failure) + uses: actions/upload-artifact@v3 + if: failure() + with: + name: documentation_warnings.log + path: artifact/doc_warnings.log + if-no-files-found: ignore + + - name: Comment ReadDocs + uses: actions/github-script@v6 + with: + script: | + const message = ` + Link to ReadTheDocs sample build for this PR can be found at: + https://global-workflow--${{ github.event.pull_request.number }}.org.readthedocs.build/en/${{ github.event.pull_request.number }} + ` + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: message + }) diff --git a/.github/workflows/globalworkflow-ci.yaml b/.github/workflows/globalworkflow-ci.yaml new file mode 100644 index 0000000000..1474c79a48 --- /dev/null +++ b/.github/workflows/globalworkflow-ci.yaml @@ -0,0 +1,86 @@ +name: gw-ci-orion + +on: [workflow_dispatch] + +# TEST_DIR contains 2 directories; +# 1. HOMEgfs: clone of the global-workflow +# 2. RUNTESTS: A directory containing EXPDIR and COMROT for experiments +# e.g. $> tree ./TEST_DIR +# ./TEST_DIR +# ├── HOMEgfs +# └── RUNTESTS +# ├── COMROT +# │   └── ${pslot} +# └── EXPDIR +# └── ${pslot} +env: + TEST_DIR: ${{ github.workspace }}/${{ github.run_id }} + MACHINE_ID: orion + +jobs: + checkout-build-link: + runs-on: [self-hosted, orion-ready] + timeout-minutes: 600 + + steps: + - name: Checkout global-workflow + uses: actions/checkout@v3 + with: + path: ${{ github.run_id }}/HOMEgfs # This path needs to be relative + + - name: Checkout components + run: | + cd ${{ env.TEST_DIR }}/HOMEgfs/sorc + ./checkout.sh -c -g # Options e.g. -u can be added late + + - name: Build components + run: | + cd ${{ env.TEST_DIR }}/HOMEgfs/sorc + ./build_all.sh + + - name: Link artifacts + run: | + cd ${{ env.TEST_DIR }}/HOMEgfs/sorc + ./link_workflow.sh + + create-experiments: + needs: checkout-build-link + runs-on: [self-hosted, orion-ready] + strategy: + matrix: + case: ["C48_S2S", "C96_atm3DVar"] + + steps: + - name: Create Experiments ${{ matrix.case }} + env: + HOMEgfs_PR: ${{ env.TEST_DIR }}/HOMEgfs + RUNTESTS: ${{ env.TEST_DIR }}/RUNTESTS + pslot: ${{ matrix.case }}.${{ github.run_id }} + run: | + cd ${{ env.TEST_DIR }}/HOMEgfs + source workflow/gw_setup.sh + source ci/platforms/orion.sh + ./ci/scripts/create_experiment.py --yaml ci/cases/${{ matrix.case }}.yaml --dir ${{ env.HOMEgfs_PR }} + + run-experiments: + needs: create-experiments + runs-on: [self-hosted, orion-ready] + strategy: + max-parallel: 2 + matrix: + case: ["C48_S2S", "C96_atm3DVar"] + steps: + - name: Run Experiment ${{ matrix.case }} + run: | + cd ${{ env.TEST_DIR }}/HOMEgfs + ./ci/scripts/run-check_ci.sh ${{ env.TEST_DIR }} ${{ matrix.case }}.${{ github.run_id }} + + clean-up: + needs: run-experiments + runs-on: [self-hosted, orion-ready] + steps: + - name: Clean-up + run: | + cd ${{ github.workspace }} + rm -rf ${{ github.run_id }} + diff --git a/.github/workflows/hera.yaml b/.github/workflows/hera.yaml new file mode 100644 index 0000000000..800d87e55a --- /dev/null +++ b/.github/workflows/hera.yaml @@ -0,0 +1,81 @@ +name: Hera + +on: + pull_request_target: + branches: + - develop + types: [closed] + +jobs: + + getlabels: + runs-on: ubuntu-latest + outputs: + labels: ${{ steps.id.outputs.labels }} + steps: + - name: Get Label Steps + id: id + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + OWNER: ${{ github.repository_owner }} + REPO_NAME: ${{ github.event.repository.name }} + PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }} + run: | + LABELS1="$(gh api repos/$OWNER/$REPO_NAME/pulls/$PULL_REQUEST_NUMBER --jq '.labels.[].name')" + LABELS=$(echo "$LABELS1" | tr '\n' ' ') + echo "labels=$LABELS" >> $GITHUB_OUTPUT + + passed: + if: contains( needs.getlabels.outputs.labels, 'CI-Hera-Passed') && github.event.pull_request.merged + runs-on: ubuntu-latest + needs: + - getlabels + + steps: + - name: Passed + uses: schneegans/dynamic-badges-action@v1.6.0 + with: + forceUpdate: true + auth: ${{ secrets.CLI_DYNAMIC_BADGES }} + gistID: e35aa2904a54deae6bbb1fdc2d960c71 + filename: hera.json + label: hera + message: passing + color: green + + failed: + if: contains( needs.getlabels.outputs.labels, 'CI-Hera-Failed') && github.event.pull_request.merged + runs-on: ubuntu-latest + needs: + - getlabels + + steps: + - name: Failed + uses: schneegans/dynamic-badges-action@v1.6.0 + with: + forceUpdate: true + auth: ${{ secrets.CLI_DYNAMIC_BADGES }} + gistID: e35aa2904a54deae6bbb1fdc2d960c71 + filename: hera.json + label: hera + message: failing + color: red + + + pending: + if: "!contains( needs.getlabels.outputs.labels, 'CI-Hera-Passed') && !contains( needs.getlabels.outputs.labels, 'CI-Hera-Failed')" + runs-on: ubuntu-latest + needs: + - getlabels + + steps: + - name: Pending + uses: schneegans/dynamic-badges-action@v1.6.0 + with: + forceUpdate: true + auth: ${{ secrets.CLI_DYNAMIC_BADGES }} + gistID: e35aa2904a54deae6bbb1fdc2d960c71 + filename: hera.json + label: hera + message: pending + color: orange diff --git a/.github/workflows/linters.yaml b/.github/workflows/linters.yaml new file mode 100644 index 0000000000..488b6a1407 --- /dev/null +++ b/.github/workflows/linters.yaml @@ -0,0 +1,64 @@ +# +name: shellnorms +on: + pull_request: + +permissions: + contents: read + +defaults: + run: + shell: bash -o pipefail {0} + +jobs: + lint-shell: + runs-on: ubuntu-latest + + permissions: + security-events: write + + steps: + - name: Checkout code + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - id: ShellCheck + name: Lint shell scripts + uses: redhat-plumbers-in-action/differential-shellcheck@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + + - if: ${{ always() }} + name: Upload artifact with ShellCheck defects in SARIF format + uses: actions/upload-artifact@v3 + with: + name: Differential ShellCheck SARIF + path: ${{ steps.ShellCheck.outputs.sarif }} + + # lint-python: + # runs-on: ubuntu-latest + + # permissions: + # security-events: write + + # steps: + # - name: Checkout code + # uses: actions/checkout@v3 + + # - id: VCS_Diff_Lint + # name: Lint python scripts + # uses: fedora-copr/vcs-diff-lint-action@v1 + + # - if: ${{ always() }} + # name: Upload artifact with detected defects in SARIF format + # uses: actions/upload-artifact@v3 + # with: + # name: VCS Diff Lint SARIF + # path: ${{ steps.VCS_Diff_Lint.outputs.sarif }} + + # - if: ${{ failure() }} + # name: Upload SARIF to GitHub using github/codeql-action/upload-sarif + # uses: github/codeql-action/upload-sarif@v2 + # with: + # sarif_file: ${{ steps.VCS_Diff_Lint.outputs.sarif }} diff --git a/.github/workflows/orion.yaml b/.github/workflows/orion.yaml new file mode 100644 index 0000000000..2d17b3db63 --- /dev/null +++ b/.github/workflows/orion.yaml @@ -0,0 +1,81 @@ +name: Orion + +on: + pull_request_target: + branches: + - develop + types: [closed] + +jobs: + + getlabels: + runs-on: ubuntu-latest + outputs: + labels: ${{ steps.id.outputs.labels }} + steps: + - name: Get Label Steps + id: id + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + OWNER: ${{ github.repository_owner }} + REPO_NAME: ${{ github.event.repository.name }} + PULL_REQUEST_NUMBER: ${{ github.event.pull_request.number }} + run: | + LABELS1="$(gh api repos/$OWNER/$REPO_NAME/pulls/$PULL_REQUEST_NUMBER --jq '.labels.[].name')" + LABELS=$(echo "$LABELS1" | tr '\n' ' ') + echo "labels=$LABELS" >> $GITHUB_OUTPUT + + passed: + if: contains( needs.getlabels.outputs.labels, 'CI-Orion-Passed') && github.event.pull_request.merged + runs-on: ubuntu-latest + needs: + - getlabels + + steps: + - name: Passed + uses: schneegans/dynamic-badges-action@v1.6.0 + with: + forceUpdate: true + auth: ${{ secrets.CLI_DYNAMIC_BADGES }} + gistID: e35aa2904a54deae6bbb1fdc2d960c71 + filename: orion.json + label: orion + message: passing + color: green + + failed: + if: contains( needs.getlabels.outputs.labels, 'CI-Orion-Failed') && github.event.pull_request.merged + runs-on: ubuntu-latest + needs: + - getlabels + + steps: + - name: Failed + uses: schneegans/dynamic-badges-action@v1.6.0 + with: + forceUpdate: true + auth: ${{ secrets.CLI_DYNAMIC_BADGES }} + gistID: e35aa2904a54deae6bbb1fdc2d960c71 + filename: orion.json + label: orion + message: failing + color: red + + + pending: + if: "!contains( needs.getlabels.outputs.labels, 'CI-Orion-Passed') && !contains( needs.getlabels.outputs.labels, 'CI-Orion-Failed')" + runs-on: ubuntu-latest + needs: + - getlabels + + steps: + - name: Pending + uses: schneegans/dynamic-badges-action@v1.6.0 + with: + forceUpdate: true + auth: ${{ secrets.CLI_DYNAMIC_BADGES }} + gistID: e35aa2904a54deae6bbb1fdc2d960c71 + filename: orion.json + label: orion + message: pending + color: orange diff --git a/.github/workflows/pynorms.yaml b/.github/workflows/pynorms.yaml new file mode 100644 index 0000000000..6ea99b59ed --- /dev/null +++ b/.github/workflows/pynorms.yaml @@ -0,0 +1,24 @@ +name: pynorms +on: [push, pull_request] + +jobs: + check_norms: + runs-on: ubuntu-latest + name: Check Python coding norms with pycodestyle + + steps: + + - name: Install dependencies + run: | + pip install --upgrade pip + pip install pycodestyle + + - name: Checkout + uses: actions/checkout@v3 + with: + path: global-workflow + + - name: Run pycodestyle + run: | + cd $GITHUB_WORKSPACE/global-workflow + pycodestyle -v --config ./.pycodestyle ./ diff --git a/.gitignore b/.gitignore index d9a042c6ca..f94c17ba35 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,156 @@ # Ignore all compiled files +#-------------------------- +__pycache__ *.pyc -*.o +*.[aox] *.mod +*.sw[a-p] +._* +.DS_Store +#nohup.out - some users do not want this to be a part of .gitignore. TODO: review against best practices +.idea/ +.vscode/ +nohup.out -# Ignore exec folder +# Ignore editor generated backup files +#------------------------------------- +*~ +# Ignore folders +#------------------- exec/ +build*/ +install*/ -# Ignore sorc folders from externals -sorc/logs/ -sorc/fv3gfs.fd/ -sorc/gfs_post.fd/ -sorc/gsi.fd/ -sorc/ufs_utils.fd/ -sorc/gfs_wafs.fd/ -sorc/verif-global.fd/ +# Ignore fix directory symlinks +#------------------------------ +fix/0readme +fix/aer +fix/am +fix/chem +fix/cice +fix/cpl +fix/datm +fix/gldas +fix/gsi +fix/lut +fix/mom6 +fix/orog +fix/reg2grb2 +fix/sfc_climo +fix/ugwd +fix/verif +fix/wave +fix/wafs + +# Ignore parm file symlinks +#-------------------------- +parm/config/config.base +parm/gldas +parm/monitor +parm/post/AEROSOL_LUTS.dat +parm/post/nam_micro_lookup.dat +parm/post/optics_luts_DUST.dat +parm/post/gtg.config.gfs +parm/post/gtg_imprintings.txt +parm/post/optics_luts_SALT.dat +parm/post/optics_luts_SOOT.dat +parm/post/optics_luts_SUSO.dat +parm/post/optics_luts_WASO.dat +parm/post/params_grib2_tbl_new +parm/post/post_tag_gfs128 +parm/post/post_tag_gfs65 +parm/post/postcntrl_gefs.xml +parm/post/postcntrl_gefs_aerosol.xml +parm/post/postcntrl_gefs_anl.xml +parm/post/postcntrl_gefs_chem.xml +parm/post/postcntrl_gefs_f00.xml +parm/post/postcntrl_gfs.xml +parm/post/postcntrl_gfs_anl.xml +parm/post/postcntrl_gfs_f00.xml +parm/post/postcntrl_gfs_f00_two.xml +parm/post/postcntrl_gfs_flux.xml +parm/post/postcntrl_gfs_flux_f00.xml +parm/post/postcntrl_gfs_goes.xml +parm/post/postcntrl_gfs_goes.xml-new +parm/post/postcntrl_gfs_two.xml +parm/post/postcntrl_gfs_wafs.xml +parm/post/postcntrl_gfs_wafs_anl.xml +parm/post/postxconfig-NT-GEFS-ANL.txt +parm/post/postxconfig-NT-GEFS-F00.txt +parm/post/postxconfig-NT-GEFS.txt +parm/post/postxconfig-NT-GFS-ANL.txt +parm/post/postxconfig-NT-GFS-F00-TWO.txt +parm/post/postxconfig-NT-GFS-F00.txt +parm/post/postxconfig-NT-GFS-FLUX-F00.txt +parm/post/postxconfig-NT-GFS-FLUX.txt +parm/post/postxconfig-NT-GFS-GOES.txt +parm/post/postxconfig-NT-GFS-TWO.txt +parm/post/postxconfig-NT-GFS-WAFS-ANL.txt +parm/post/postxconfig-NT-GFS-WAFS.txt +parm/post/postxconfig-NT-GFS.txt +parm/post/postxconfig-NT-gefs-aerosol.txt +parm/post/postxconfig-NT-gefs-chem.txt +parm/ufs/noahmptable.tbl +parm/wafs + +# Ignore sorc and logs folders from externals +#-------------------------------------------- +sorc/*log +sorc/logs +sorc/*.cd +sorc/*.fd + +# Ignore scripts from externals +#------------------------------ +# jobs symlinks +jobs/JGFS_ATMOS_WAFS +jobs/JGFS_ATMOS_WAFS_BLENDING +jobs/JGFS_ATMOS_WAFS_BLENDING_0P25 +jobs/JGFS_ATMOS_WAFS_GCIP +jobs/JGFS_ATMOS_WAFS_GRIB2 +jobs/JGFS_ATMOS_WAFS_GRIB2_0P25 +# scripts symlinks +scripts/exemcsfc_global_sfc_prep.sh +scripts/exgfs_atmos_wafs_blending.sh +scripts/exgfs_atmos_wafs_blending_0p25.sh +scripts/exgfs_atmos_wafs_gcip.sh +scripts/exgfs_atmos_wafs_grib.sh +scripts/exgfs_atmos_wafs_grib2.sh +scripts/exgfs_atmos_wafs_grib2_0p25.sh +# ush symlinks +ush/chgres_cube.sh +ush/emcsfc_ice_blend.sh +ush/emcsfc_snow.sh +ush/fix_precip.sh +ush/fv3gfs_driver_grid.sh +ush/fv3gfs_filter_topo.sh +ush/fv3gfs_make_grid.sh +ush/fv3gfs_make_orog.sh +ush/global_chgres.sh +ush/global_chgres_driver.sh +ush/global_cycle.sh +ush/global_cycle_driver.sh +ush/jediinc2fv3.py +ush/mkwfsgbl.sh +ush/ufsda +ush/wafs_blending.sh +ush/wafs_grib2.regrid.sh +ush/wafs_intdsk.sh +ush/finddate.sh +ush/make_NTC_file.pl +ush/make_ntc_bull.pl +ush/make_tif.sh +ush/month_name.sh +ush/imsfv3_scf2ioda.py +ush/atparse.bash +ush/run_bufr2ioda.py + +# version files +versions/build.ver +versions/run.ver + +# wxflow checkout and symlinks +sorc/wxflow +ush/python/wxflow +workflow/wxflow +ci/scripts/wxflow diff --git a/.pycodestyle b/.pycodestyle new file mode 100644 index 0000000000..5907458f78 --- /dev/null +++ b/.pycodestyle @@ -0,0 +1,6 @@ +[pycodestyle] +count = False +ignore = E402,W504 +max-line-length = 160 +statistics = True +exclude = .git,.github,.vscode,venv,*.fd,*.cd,docs/source/conf.py diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 0000000000..87acd09370 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,23 @@ +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the version of Python and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.11" + +# Build documentation in the docs/ directory with Sphinx +sphinx: + configuration: docs/source/conf.py + +# Optional but recommended, declare the Python requirements required +# to build your documentation +# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html +python: + install: + - requirements: docs/requirements.txt diff --git a/.shellcheckrc b/.shellcheckrc new file mode 100644 index 0000000000..6d540ba17f --- /dev/null +++ b/.shellcheckrc @@ -0,0 +1,16 @@ +# Global settings for Shellcheck (https://github.com/koalaman/shellcheck) +enable=all + +external-sources=false + +# Disable variable referenced but not assigned +disable=SC2154 + +# Disable following non-constant source +disable=SC1090 + +# Disable non-existent binary +disable=SC1091 + +# Disable -p -m only applies to deepest directory +disable=SC2174 diff --git a/Externals.cfg b/Externals.cfg index 0402ab35c1..eba775275a 100644 --- a/Externals.cfg +++ b/Externals.cfg @@ -1,51 +1,65 @@ # External sub-modules of global-workflow -[FV3GFS] -tag = GFS.v16.0.10 -local_path = sorc/fv3gfs.fd -repo_url = https://github.com/ufs-community/ufs-weather-model.git -protocol = git -required = True - -[GSI] -hash = 56652c2f -local_path = sorc/gsi.fd -repo_url = https://github.com/NOAA-EMC/GSI.git +[wxflow] +tag = 528f5ab +local_path = sorc/wxflow +repo_url = https://github.com/NOAA-EMC/wxflow.git protocol = git required = True -[GLDAS] -tag = gldas_gfsv16_release.v1.5.0 -local_path = sorc/gldas.fd -repo_url = https://github.com/NOAA-EMC/GLDAS.git +[UFS] +tag = 3ba8dff +local_path = sorc/ufs_model.fd +repo_url = https://github.com/ufs-community/ufs-weather-model.git protocol = git required = True -[EMC_post] -tag = upp_gfsv16_release.v1.0.13 -local_path = sorc/gfs_post.fd -repo_url = https://github.com/NOAA-EMC/EMC_post.git +[gfs-utils] +hash = a283262 +local_path = sorc/gfs_utils.fd +repo_url = https://github.com/NOAA-EMC/gfs-utils protocol = git required = True -[UFS_UTILS] -branch = release/ops-gfsv16 +[UFS-Utils] +hash = 72a0471 local_path = sorc/ufs_utils.fd -repo_url = https://github.com/NOAA-EMC/UFS_UTILS.git +repo_url = https://github.com/ufs-community/UFS_UTILS.git protocol = git required = True [EMC_verif-global] -tag = verif_global_v1.10.1 +tag = c267780 local_path = sorc/verif-global.fd repo_url = https://github.com/NOAA-EMC/EMC_verif-global.git protocol = git required = True -[EMC_gfs_wafs] -tag = gfs_wafs.v6.0.4 -local_path = sorc/gfs_wafs.fd -repo_url = https://github.com/NOAA-EMC/EMC_gfs_wafs.git +[GSI-EnKF] +hash = ca19008 +local_path = sorc/gsi_enkf.fd +repo_url = https://github.com/NOAA-EMC/GSI.git +protocol = git +required = False + +[GSI-Utils] +hash = 322cc7b +local_path = sorc/gsi_utils.fd +repo_url = https://github.com/NOAA-EMC/GSI-utils.git +protocol = git +required = False + +[GSI-Monitor] +hash = 45783e3 +local_path = sorc/gsi_monitor.fd +repo_url = https://github.com/NOAA-EMC/GSI-monitor.git +protocol = git +required = False + +[GDASApp] +hash = f44a6d5 +local_path = sorc/gdas.cd +repo_url = https://github.com/NOAA-EMC/GDASApp.git protocol = git required = False diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000000..0927556b54 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,157 @@ +### GNU LESSER GENERAL PUBLIC LICENSE + +Version 3, 29 June 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +This version of the GNU Lesser General Public License incorporates the +terms and conditions of version 3 of the GNU General Public License, +supplemented by the additional permissions listed below. + +#### 0. Additional Definitions. + +As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the +GNU General Public License. + +"The Library" refers to a covered work governed by this License, other +than an Application or a Combined Work as defined below. + +An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + +A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + +The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + +The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + +#### 1. Exception to Section 3 of the GNU GPL. + +You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + +#### 2. Conveying Modified Versions. + +If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + +- a) under this License, provided that you make a good faith effort + to ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or +- b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + +#### 3. Object Code Incorporating Material from Library Header Files. + +The object code form of an Application may incorporate material from a +header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + +- a) Give prominent notice with each copy of the object code that + the Library is used in it and that the Library and its use are + covered by this License. +- b) Accompany the object code with a copy of the GNU GPL and this + license document. + +#### 4. Combined Works. + +You may convey a Combined Work under terms of your choice that, taken +together, effectively do not restrict modification of the portions of +the Library contained in the Combined Work and reverse engineering for +debugging such modifications, if you also do each of the following: + +- a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. +- b) Accompany the Combined Work with a copy of the GNU GPL and this + license document. +- c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. +- d) Do one of the following: + - 0) Convey the Minimal Corresponding Source under the terms of + this License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + - 1) Use a suitable shared library mechanism for linking with + the Library. A suitable mechanism is one that (a) uses at run + time a copy of the Library already present on the user's + computer system, and (b) will operate properly with a modified + version of the Library that is interface-compatible with the + Linked Version. +- e) Provide Installation Information, but only if you would + otherwise be required to provide such information under section 6 + of the GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the Application + with a modified version of the Linked Version. (If you use option + 4d0, the Installation Information must accompany the Minimal + Corresponding Source and Corresponding Application Code. If you + use option 4d1, you must provide the Installation Information in + the manner specified by section 6 of the GNU GPL for conveying + Corresponding Source.) + +#### 5. Combined Libraries. + +You may place library facilities that are a work based on the Library +side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + +- a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities, conveyed under the terms of this License. +- b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + +#### 6. Revised Versions of the GNU Lesser General Public License. + +The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +as you received it specifies that a certain numbered version of the +GNU Lesser General Public License "or any later version" applies to +it, you have the option of following the terms and conditions either +of that published version or of any later version published by the +Free Software Foundation. If the Library as you received it does not +specify a version number of the GNU Lesser General Public License, you +may choose any version of the GNU Lesser General Public License ever +published by the Free Software Foundation. + +If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/README.md b/README.md index 1d8231e6d1..289e74933b 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,43 @@ -# global-workflow -Global Superstructure/Workflow currently supporting the Finite-Volume on a Cubed-Sphere Global Forecast System (FV3GFS) - -The global-workflow depends on the following prerequisities to be available on the system: +[![Read The Docs Status](https://readthedocs.org/projects/global-workflow/badge/?badge=latest)](http://global-workflow.readthedocs.io/) +[![shellnorms](https://github.com/NOAA-EMC/global-workflow/actions/workflows/linters.yaml/badge.svg)](https://github.com/NOAA-EMC/global-workflow/actions/workflows/linters.yaml) +[![pynorms](https://github.com/NOAA-EMC/global-workflow/actions/workflows/pynorms.yaml/badge.svg)](https://github.com/NOAA-EMC/global-workflow/actions/workflows/pynorms.yaml) -* workload management platform / scheduler - LSF or SLURM -* workflow manager - ROCOTO (https://github.com/christopherwharrop/rocoto) -* modules - NCEPLIBS (various), esmf v8.0.0bs48, hdf5, intel/ips v18, impi v18, wgrib2, netcdf v4.7.0, hpss, gempak (see module files under /modulefiles for additional details) +![Custom badge](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/emcbot/e35aa2904a54deae6bbb1fdc2d960c71/raw/hera.json) +![Custom badge](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/emcbot/e35aa2904a54deae6bbb1fdc2d960c71/raw/orion.json) -The global-workflow current supports the following machines: +# global-workflow +Global Workflow currently supporting the Global Forecast System (GFS) with the [UFS-weather-model](https://github.com/ufs-community/ufs-weather-model) and [GSI](https://github.com/NOAA-EMC/GSI)-based Data Assimilation System. -* WCOSS-Dell -* WCOSS-Cray -* Hera +The `global-workflow` depends on the following prerequisities to be available on the system: -## Build global-workflow: +* Workflow Engine - [Rocoto](https://github.com/christopherwharrop/rocoto) and [ecFlow](https://github.com/ecmwf/ecflow) (for NWS Operations) +* Compiler - Intel Compiler Suite +* Software - NCEPLIBS (various), ESMF, HDF5, NetCDF, and a host of other softwares (see module files under /modulefiles for additional details) -### 1. Check out components +The `global-workflow` current supports the following tier-1 machines: -While in /sorc folder: -``` -$ sh checkout.sh -``` +* NOAA RDHPCS - Hera +* MSU HPC - Orion +* MSU HPC - Hercules +* NOAA's operational HPC - WCOSS2 -### 2. Build components +Additionally, the following tier-2 machine is supported: +* SSEC at Univ. of Wisconsin - S4 (Note that S2S+ experiments are not fully supported) -While in /sorc folder: -``` -$ sh build_all.sh -``` +Documentation (in progress) is available [here](https://global-workflow.readthedocs.io/en/latest/). -### 3. Link components +# Disclaimer -While in /sorc folder: -``` -$ sh link_fv3gfs.sh emc $MACHINE -``` +The United States Department of Commerce (DOC) GitHub project code is provided +on an "as is" basis and the user assumes responsibility for its use. DOC has +relinquished control of the information and no longer has responsibility to +protect the integrity, confidentiality, or availability of the information. Any +claims against the Department of Commerce stemming from the use of its GitHub +project will be governed by all applicable Federal law. Any reference to +specific commercial products, processes, or services by service mark, +trademark, manufacturer, or otherwise, does not constitute or imply their +endorsement, recommendation or favoring by the Department of Commerce. The +Department of Commerce seal and logo, or the seal and logo of a DOC bureau, +shall not be used in any manner to imply endorsement of any commercial product +or activity by DOC or the United States Government. -...where $MACHINE is "dell", "cray", or "hera". diff --git a/ci/cases/pr/C48_ATM.yaml b/ci/cases/pr/C48_ATM.yaml new file mode 100644 index 0000000000..fc0b729af6 --- /dev/null +++ b/ci/cases/pr/C48_ATM.yaml @@ -0,0 +1,13 @@ +experiment: + system: gfs + mode: forecast-only + +arguments: + pslot: {{ 'pslot' | getenv }} + app: ATM + resdet: 48 + comrot: {{ 'RUNTESTS' | getenv }}/COMROT + expdir: {{ 'RUNTESTS' | getenv }}/EXPDIR + idate: 2021032312 + edate: 2021032312 + yaml: {{ HOMEgfs }}/ci/platforms/gfs_defaults_ci.yaml diff --git a/ci/cases/pr/C48_S2SW.yaml b/ci/cases/pr/C48_S2SW.yaml new file mode 100644 index 0000000000..f4b50ead22 --- /dev/null +++ b/ci/cases/pr/C48_S2SW.yaml @@ -0,0 +1,13 @@ +experiment: + system: gfs + mode: forecast-only + +arguments: + pslot: {{ 'pslot' | getenv }} + app: S2SW + resdet: 48 + comrot: {{ 'RUNTESTS' | getenv }}/COMROT + expdir: {{ 'RUNTESTS' | getenv }}/EXPDIR + idate: 2021032312 + edate: 2021032312 + yaml: {{ HOMEgfs }}/ci/platforms/gfs_defaults_ci.yaml diff --git a/ci/cases/pr/C48_S2SWA_gefs.yaml b/ci/cases/pr/C48_S2SWA_gefs.yaml new file mode 100644 index 0000000000..5eb99d9c1e --- /dev/null +++ b/ci/cases/pr/C48_S2SWA_gefs.yaml @@ -0,0 +1,17 @@ +experiment: + system: gefs + mode: forecast-only + +arguments: + pslot: {{ 'pslot' | getenv }} + app: S2SWA + resdet: 48 + resens: 48 + nens: 2 + gfs_cyc: 1 + start: cold + comrot: {{ 'RUNTESTS' | getenv }}/COMROT + expdir: {{ 'RUNTESTS' | getenv }}/EXPDIR + idate: 2021032312 + edate: 2021032312 + yaml: {{ HOMEgfs }}/ci/platforms/gefs_ci_defaults.yaml diff --git a/ci/cases/pr/C96C48_hybatmDA.yaml b/ci/cases/pr/C96C48_hybatmDA.yaml new file mode 100644 index 0000000000..c3aa6e8892 --- /dev/null +++ b/ci/cases/pr/C96C48_hybatmDA.yaml @@ -0,0 +1,18 @@ +experiment: + system: gfs + mode: cycled + +arguments: + pslot: {{ 'pslot' | getenv }} + app: ATM + resdet: 96 + resens: 48 + comrot: {{ 'RUNTESTS' | getenv }}/COMROT + expdir: {{ 'RUNTESTS' | getenv }}/EXPDIR + icsdir: {{ 'ICSDIR_ROOT' | getenv }}/C96C48 + idate: 2021122018 + edate: 2021122106 + nens: 2 + gfs_cyc: 1 + start: cold + yaml: {{ HOMEgfs }}/ci/platforms/gfs_defaults_ci.yaml diff --git a/ci/cases/pr/C96_atm3DVar.yaml b/ci/cases/pr/C96_atm3DVar.yaml new file mode 100644 index 0000000000..5215cb0d90 --- /dev/null +++ b/ci/cases/pr/C96_atm3DVar.yaml @@ -0,0 +1,17 @@ +experiment: + system: gfs + mode: cycled + +arguments: + pslot: {{ 'pslot' | getenv }} + app: ATM + resdet: 96 + comrot: {{ 'RUNTESTS' | getenv }}/COMROT + expdir: {{ 'RUNTESTS' | getenv }}/EXPDIR + icsdir: ${ICSDIR_ROOT}/C96C48 + idate: 2021122018 + edate: 2021122106 + nens: 0 + gfs_cyc: 1 + start: cold + yaml: {{ HOMEgfs }}/ci/platforms/gfs_defaults_ci.yaml diff --git a/ci/cases/weekly/C384C192_hybatmda.yaml b/ci/cases/weekly/C384C192_hybatmda.yaml new file mode 100644 index 0000000000..4c14018e2d --- /dev/null +++ b/ci/cases/weekly/C384C192_hybatmda.yaml @@ -0,0 +1,18 @@ +experiment: + system: gfs + mode: cycled + +arguments: + pslot: {{ 'pslot' | getenv }} + app: ATM + resdet: 384 + resens: 192 + comrot: {{ 'RUNTESTS' | getenv }}/COMROT + expdir: {{ 'RUNTESTS' | getenv }}/EXPDIR + icsdir: {{ 'ICSDIR_ROOT' | getenv }}/C384C192 + idate: 2023040118 + edate: 2023040200 + nens: 2 + gfs_cyc: 1 + start: cold + yaml: {{ HOMEgfs }}/ci/platforms/gfs_defaults_ci.yaml diff --git a/ci/cases/weekly/C384_S2SWA.yaml b/ci/cases/weekly/C384_S2SWA.yaml new file mode 100644 index 0000000000..6c624f5698 --- /dev/null +++ b/ci/cases/weekly/C384_S2SWA.yaml @@ -0,0 +1,13 @@ +experiment: + system: gfs + mode: forecast-only + +arguments: + pslot: {{ 'pslot' | getenv }} + app: S2SWA + resdet: 384 + comrot: {{ 'RUNTESTS' | getenv }}/COMROT + expdir: {{ 'RUNTESTS' | getenv }}/EXPDIR + idate: 2016070100 + edate: 2016070100 + yaml: {{ HOMEgfs }}/ci/platforms/gfs_defaults_ci.yaml diff --git a/ci/cases/weekly/C384_atm3DVar.yaml b/ci/cases/weekly/C384_atm3DVar.yaml new file mode 100644 index 0000000000..e7986ef097 --- /dev/null +++ b/ci/cases/weekly/C384_atm3DVar.yaml @@ -0,0 +1,18 @@ +experiment: + system: gfs + mode: cycled + +arguments: + pslot: {{ 'pslot' | getenv }} + app: ATM + resdet: 384 + resens: 192 + comrot: {{ 'RUNTESTS' | getenv }}/COMROT + expdir: {{ 'RUNTESTS' | getenv }}/EXPDIR + icsdir: {{ 'ICSDIR_ROOT' | getenv }}/C384C192 + idate: 2023040118 + edate: 2023040200 + nens: 0 + gfs_cyc: 1 + start: cold + yaml: {{ HOMEgfs }}/ci/platforms/gfs_defaults_ci.yaml diff --git a/ci/platforms/config.hera b/ci/platforms/config.hera new file mode 100644 index 0000000000..76a6a08670 --- /dev/null +++ b/ci/platforms/config.hera @@ -0,0 +1,8 @@ +#!/usr/bin/bash + +export GFS_CI_ROOT=/scratch1/NCEPDEV/global/Terry.McGuinness/GFS_CI_ROOT +export ICSDIR_ROOT=/scratch1/NCEPDEV/global/glopara/data/ICSDIR +export STMP="/scratch1/NCEPDEV/stmp2/${USER}" +export SLURM_ACCOUNT=nems +export max_concurrent_cases=5 +export max_concurrent_pr=4 diff --git a/ci/platforms/config.orion b/ci/platforms/config.orion new file mode 100644 index 0000000000..3e87ef97a1 --- /dev/null +++ b/ci/platforms/config.orion @@ -0,0 +1,8 @@ +#!/usr/bin/bash + +export GFS_CI_ROOT=/work2/noaa/stmp/GFS_CI_ROOT +export ICSDIR_ROOT=/work/noaa/global/glopara/data/ICSDIR +export STMP="/work2/noaa/stmp/${USER}" +export SLURM_ACCOUNT=nems +export max_concurrent_cases=5 +export max_concurrent_pr=4 diff --git a/ci/platforms/gefs_ci_defaults.yaml b/ci/platforms/gefs_ci_defaults.yaml new file mode 100644 index 0000000000..2aa30d6be4 --- /dev/null +++ b/ci/platforms/gefs_ci_defaults.yaml @@ -0,0 +1,4 @@ +defaults: + !INC {{ HOMEgfs }}/parm/config/gefs/yaml/defaults.yaml +base: + ACCOUNT: ${SLURM_ACCOUNT} diff --git a/ci/platforms/gfs_defaults_ci.yaml b/ci/platforms/gfs_defaults_ci.yaml new file mode 100644 index 0000000000..5e57e617ec --- /dev/null +++ b/ci/platforms/gfs_defaults_ci.yaml @@ -0,0 +1,4 @@ +defaults: + !INC {{ HOMEgfs }}/parm/config/gfs/yaml/defaults.yaml +base: + ACCOUNT: ${SLURM_ACCOUNT} diff --git a/ci/scripts/check_ci.sh b/ci/scripts/check_ci.sh new file mode 100755 index 0000000000..164d423c67 --- /dev/null +++ b/ci/scripts/check_ci.sh @@ -0,0 +1,162 @@ +#!/bin/bash +set -eux +##################################################################################### +# +# Script description: BASH script for checking for cases in a given PR and +# running rocotostat on each to determine if the experiment has +# succeeded or faild. This script is intended +# to run from within a cron job in the CI Managers account +##################################################################################### + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." >/dev/null 2>&1 && pwd )" +scriptname=$(basename "${BASH_SOURCE[0]}") +echo "Begin ${scriptname} at $(date -u)" || true +export PS4='+ $(basename ${BASH_SOURCE})[${LINENO}]' + +GH=${HOME}/bin/gh +REPO_URL="https://github.com/NOAA-EMC/global-workflow.git" + +######################################################################### +# Set up runtime environment varibles for accounts on supproted machines +######################################################################### + +source "${ROOT_DIR}/ush/detect_machine.sh" +case ${MACHINE_ID} in + hera | orion) + echo "Running Automated Testing on ${MACHINE_ID}" + source "${ROOT_DIR}/ci/platforms/config.${MACHINE_ID}" + ;; + *) + echo "Unsupported platform. Exiting with error." + exit 1 + ;; +esac +set +x +source "${ROOT_DIR}/ush/module-setup.sh" +source "${ROOT_DIR}/ci/scripts/utils/ci_utils.sh" +module use "${ROOT_DIR}/modulefiles" +module load "module_gwsetup.${MACHINE_ID}" +module list +set -x +rocotostat=$(command -v rocotostat) +if [[ -z ${rocotostat+x} ]]; then + echo "rocotostat not found on system" + exit 1 +else + echo "rocotostat being used from ${rocotostat}" +fi +rocotocheck=$(command -v rocotocheck) +if [[ -z ${rocotocheck+x} ]]; then + echo "rocotocheck not found on system" + exit 1 +else + echo "rocotocheck being used from ${rocotocheck}" +fi + +pr_list_dbfile="${GFS_CI_ROOT}/open_pr_list.db" + +pr_list="" +if [[ -f "${pr_list_dbfile}" ]]; then + pr_list=$("${ROOT_DIR}/ci/scripts/pr_list_database.py" --dbfile "${pr_list_dbfile}" --display | grep -v Failed | grep Running | awk '{print $1}') || true +fi +if [[ -z "${pr_list+x}" ]]; then + echo "no PRs open and ready to run cases on .. exiting" + exit 0 +fi + +############################################################# +# Loop throu all PRs in PR List and look for expirments in +# the RUNTESTS dir and for each one run runcotorun on them +############################################################# + +for pr in ${pr_list}; do + id=$("${GH}" pr view "${pr}" --repo "${REPO_URL}" --json id --jq '.id') + output_ci="${GFS_CI_ROOT}/PR/${pr}/output_runtime_${id}" + output_ci_single="${GFS_CI_ROOT}/PR/${pr}/output_runtime_single.log" + echo "Processing Pull Request #${pr} and looking for cases" + pr_dir="${GFS_CI_ROOT}/PR/${pr}" + + # If there is no RUNTESTS dir for this PR then cases have not been made yet + if [[ ! -d "${pr_dir}/RUNTESTS" ]]; then + continue + fi + + #Check for PR success when ${pr_dir}/RUNTESTS/EXPDIR is void of subfolders + # since all successfull ones where previously removed + # shellcheck disable=SC2312 + if [[ -z $(ls -A "${pr_dir}/RUNTESTS/EXPDIR") ]] ; then + "${GH}" pr edit --repo "${REPO_URL}" "${pr}" --remove-label "CI-${MACHINE_ID^}-Running" --add-label "CI-${MACHINE_ID^}-Passed" + sed -i "1 i\`\`\`" "${output_ci}" + sed -i "1 i\All CI Test Cases Passed on ${MACHINE_ID^}:" "${output_ci}" + "${GH}" pr comment "${pr}" --repo "${REPO_URL}" --body-file "${output_ci}" + "${ROOT_DIR}/ci/scripts/pr_list_database.py" --remove_pr "${pr}" --dbfile "${pr_list_dbfile}" + # Check to see if this PR that was opened by the weekly tests and if so close it if it passed on all platforms + weekly_labels=$(${GH} pr view "${pr}" --repo "${REPO_URL}" --json headRefName,labels,author --jq 'select(.author.login | contains("emcbot")) | select(.headRefName | contains("weekly_ci")) | .labels[].name ') || true + if [[ -n "${weekly_labels}" ]]; then + num_platforms=$(find "${ROOT_DIR}/ci/platforms" -type f -name "config.*" | wc -l) + passed=0 + for platforms in "${ROOT_DIR}"/ci/platforms/config.*; do + machine=$(basename "${platforms}" | cut -d. -f2) + if [[ "${weekly_labels}" == *"CI-${machine^}-Passed"* ]]; then + ((passed=passed+1)) + fi + done + if [[ "${passed}" == "${num_platforms}" ]]; then + "${GH}" pr close --repo "${REPO_URL}" "${pr}" + fi + fi + # Completely remove the PR and its cloned repo on sucess + # of all cases on this platform + rm -Rf "${pr_dir}" + continue + fi + + for pslot_dir in "${pr_dir}/RUNTESTS/EXPDIR/"*; do + pslot=$(basename "${pslot_dir}") || true + if [[ -z "${pslot+x}" ]]; then + echo "No experiments found in ${pslot_dir} .. exiting" + exit 0 + fi + xml="${pslot_dir}/${pslot}.xml" + db="${pslot_dir}/${pslot}.db" + if [[ ! -f "${db}" ]]; then + continue + fi + rocoto_stat_output=$("${rocotostat}" -w "${xml}" -d "${db}" -s | grep -v CYCLE) || true + num_cycles=$(echo "${rocoto_stat_output}" | wc -l) || true + num_done=$(echo "${rocoto_stat_output}" | grep -c Done) || true + # num_succeeded=$("${rocotostat}" -w "${xml}" -d "${db}" -a | grep -c SUCCEEDED) || true + echo "${pslot} Total Cycles: ${num_cycles} number done: ${num_done}" || true + num_failed=$("${rocotostat}" -w "${xml}" -d "${db}" -a | grep -c -E 'FAIL|DEAD') || true + if [[ ${num_failed} -ne 0 ]]; then + "${GH}" pr edit --repo "${REPO_URL}" "${pr}" --remove-label "CI-${MACHINE_ID^}-Running" --add-label "CI-${MACHINE_ID^}-Failed" + error_logs=$("${rocotostat}" -d "${db}" -w "${xml}" | grep -E 'FAIL|DEAD' | awk '{print "-c", $1, "-t", $2}' | xargs "${rocotocheck}" -d "${db}" -w "${xml}" | grep join | awk '{print $2}') || true + { + echo "Experiment ${pslot} *** FAILED *** on ${MACHINE_ID^}" + echo "Experiment ${pslot} with ${num_failed} tasks failed at $(date +'%D %r')" || true + echo "Error logs:" + echo "${error_logs}" + } >> "${output_ci}" + sed -i "1 i\`\`\`" "${output_ci}" + "${GH}" pr comment "${pr}" --repo "${REPO_URL}" --body-file "${output_ci}" + "${ROOT_DIR}/ci/scripts/pr_list_database.py" --remove_pr "${pr}" --dbfile "${pr_list_dbfile}" + for kill_cases in "${pr_dir}/RUNTESTS/"*; do + pslot=$(basename "${kill_cases}") + cancel_slurm_jobs "${pslot}" + done + break + fi + if [[ "${num_done}" -eq "${num_cycles}" ]]; then + #Remove Experment cases that completed successfully + rm -Rf "${pslot_dir}" + rm -Rf "${pr_dir}/RUNTESTS/COMROT/${pslot}" + rm -f "${output_ci_single}" + # echo "\`\`\`" > "${output_ci_single}" + DATE=$(date +'%D %r') + echo "Experiment ${pslot} **SUCCESS** on ${MACHINE_ID^} at ${DATE}" >> "${output_ci_single}" + echo "Experiment ${pslot} *** SUCCESS *** at ${DATE}" >> "${output_ci}" + "${GH}" pr comment "${pr}" --repo "${REPO_URL}" --body-file "${output_ci_single}" + + fi + done +done diff --git a/ci/scripts/clone-build_ci.sh b/ci/scripts/clone-build_ci.sh new file mode 100755 index 0000000000..4af44507e9 --- /dev/null +++ b/ci/scripts/clone-build_ci.sh @@ -0,0 +1,125 @@ +#!/bin/bash +set -eux + +##################################################################### +# Usage and arguments for specfifying cloned directgory +##################################################################### +usage() { + set +x + echo + echo "Usage: $0 -p -d -o -h" + echo + echo " -p PR number to clone and build" + echo " -d Full path of of where to clone and build PR" + echo " -o Full path to output message file detailing results of CI tests" + echo " -h display this message and quit" + echo + exit 1 +} + +################################################################ +while getopts "p:d:o:h" opt; do + case ${opt} in + p) + PR=${OPTARG} + ;; + d) + repodir=${OPTARG} + ;; + o) + outfile=${OPTARG} + ;; + h|\?|:) + usage + ;; + *) + echo "Unrecognized option" + usage + ;; + esac +done + +cd "${repodir}" || exit 1 +if [[ -d global-workflow ]]; then + rm -Rf global-workflow +fi + +git clone "${REPO_URL}" +cd global-workflow || exit 1 + +# checkout pull request +"${GH}" pr checkout "${PR}" --repo "${REPO_URL}" +HOMEgfs="${PWD}" +source "${HOMEgfs}/ush/detect_machine.sh" + +#################################################################### +# start output file +{ + echo "Automated global-workflow Testing Results:" + echo '```' + echo "Machine: ${MACHINE_ID^}" + echo "Start: $(date) on $(hostname)" || true + echo "---------------------------------------------------" +} >> "${outfile}" +###################################################################### + +# get commit hash +commit=$(git log --pretty=format:'%h' -n 1) +echo "${commit}" > "../commit" + +# run checkout script +cd sorc || exit 1 +set +e +./checkout.sh -c -g -u >> log.checkout 2>&1 +checkout_status=$? +DATE=$(date +'%D %r') +if [[ ${checkout_status} != 0 ]]; then + { + echo "Checkout: *** FAILED ***" + echo "Checkout: Failed at ${DATE}" + echo "Checkout: see output at ${PWD}/log.checkout" + } >> "${outfile}" + exit "${checkout_status}" +else + { + echo "Checkout: Completed at ${DATE}" + } >> "${outfile}" +fi + +# build full cycle +source "${HOMEgfs}/ush/module-setup.sh" +export BUILD_JOBS=8 +rm -rf log.build +./build_all.sh >> log.build 2>&1 +build_status=$? + +DATE=$(date +'%D %r') +if [[ ${build_status} != 0 ]]; then + { + echo "Build: *** FAILED ***" + echo "Build: Failed at ${DATE}" + cat "${PWD}/log.build" + } >> "${outfile}" + exit "${build_status}" +else + { + echo "Build: Completed at ${DATE}" + } >> "${outfile}" +fi + +LINK_LOGFILE_PATH=link_workflow.log +rm -f "${LINK_LOGFILE_PATH}" +./link_workflow.sh >> "${LINK_LOGFILE_PATH}" 2>&1 +link_status=$? +if [[ ${link_status} != 0 ]]; then + DATE=$(date +'%D %r') + { + echo "Link: *** FAILED ***" + echo "Link: Failed at ${DATE}" + cat "${LINK_LOGFILE_PATH}" + } >> "${outfile}" + exit "${link_status}" +fi + +echo "check/build/link test completed" +exit "${build_status}" diff --git a/ci/scripts/driver.sh b/ci/scripts/driver.sh new file mode 100755 index 0000000000..a0edb4b4c3 --- /dev/null +++ b/ci/scripts/driver.sh @@ -0,0 +1,252 @@ +#!/bin/bash +set -eux + +##################################################################################### +# +# Script description: Top level driver script for checking PR +# ready for CI regression testing +# +# Abstract: +# +# This script uses GitHub CLI to check for Pull Requests with CI-Ready-${machine} tags on the +# development branch for the global-workflow repo. It then stages tests directories per +# PR number and calls clone-build_ci.sh to perform a clone and full build from the PR. +# It then is ready to run a suite of regression tests with various configurations +####################################################################################### + +################################################################# +# TODO using static build for GitHub CLI until fixed in HPC-Stack +################################################################# +export GH=${HOME}/bin/gh +export REPO_URL=${REPO_URL:-"https://github.com/NOAA-EMC/global-workflow.git"} + +################################################################ +# Setup the reletive paths to scripts and PS4 for better logging +################################################################ +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." >/dev/null 2>&1 && pwd )" +scriptname=$(basename "${BASH_SOURCE[0]}") +echo "Begin ${scriptname} at $(date +'%D %r')" || true +export PS4='+ $(basename ${BASH_SOURCE})[${LINENO}]' + +######################################################################### +# Set up runtime environment varibles for accounts on supproted machines +######################################################################### + +source "${ROOT_DIR}/ush/detect_machine.sh" +case ${MACHINE_ID} in + hera | orion) + echo "Running Automated Testing on ${MACHINE_ID}" + source "${ROOT_DIR}/ci/platforms/config.${MACHINE_ID}" + ;; + *) + echo "Unsupported platform. Exiting with error." + exit 1 + ;; +esac + +###################################################### +# setup runtime env for correct python install and git +###################################################### +set +x +source "${ROOT_DIR}/ci/scripts/utils/ci_utils.sh" +source "${ROOT_DIR}/ush/module-setup.sh" +module use "${ROOT_DIR}/modulefiles" +module load "module_gwsetup.${MACHINE_ID}" +set -x + +############################################################ +# query repo and get list of open PRs with tags {machine}-CI +############################################################ + +pr_list_dbfile="${GFS_CI_ROOT}/open_pr_list.db" + +if [[ ! -f "${pr_list_dbfile}" ]]; then + "${ROOT_DIR}/ci/scripts/pr_list_database.py" --create --dbfile "${pr_list_dbfile}" +fi + +pr_list=$(${GH} pr list --repo "${REPO_URL}" --label "CI-${MACHINE_ID^}-Ready" --state "open" | awk '{print $1}') || true + +for pr in ${pr_list}; do + pr_dir="${GFS_CI_ROOT}/PR/${pr}" + db_list=$("${ROOT_DIR}/ci/scripts/pr_list_database.py" --add_pr "${pr}" --dbfile "${pr_list_dbfile}") + output_ci_single="${GFS_CI_ROOT}/PR/${pr}/output_single.log" + ############################################################# + # Check if a Ready labeled PR has changed back from once set + # and in that case completely kill the previose driver.sh cron + # job and all its decedands as well as removing all previous + # jobs in scheduler and associated files in the PR + ############################################################# + if [[ "${db_list}" == *"already is in list"* ]]; then + # Get the the PID and HOST of the driver.sh cron job + # that is stored int he CI database for this PR + driver_ID=$("${ROOT_DIR}/ci/scripts/pr_list_database.py" --dbfile "${pr_list_dbfile}" --display "${pr}" | awk '{print $4}') || true + driver_PID=$(echo "${driver_ID}" | cut -d":" -f1) || true + driver_HOST=$(echo "${driver_ID}" | cut -d":" -f2) || true + host_name=$(hostname -s) + rm -f "${output_ci_single}" + { + echo "CI Update on ${MACHINE_ID^} at $(date +'%D %r')" || true + echo "=================================================" + echo "PR:${pr} Reset to ${MACHINE_ID^}-Ready by user and is now restarting CI tests" || true + } >> "${output_ci_single}" + if [[ "${driver_PID}" -ne 0 ]]; then + echo "Driver PID: ${driver_PID} no longer running this build having it killed" + if [[ "${driver_HOST}" == "${host_name}" ]]; then + # shellcheck disable=SC2312 + pstree -A -p "${driver_PID}" | grep -Pow "(?<=\()[0-9]+(?=\))" | xargs kill + else + # shellcheck disable=SC2312 + ssh "${driver_HOST}" 'pstree -A -p "${driver_PID}" | grep -Eow "[0-9]+" | xargs kill' + fi + { + echo "Driver PID: Requested termination of ${driver_PID} and children on ${driver_HOST}" + echo "Driver PID: has restarted as $$ on ${host_name}" + } >> "${output_ci_single}" + fi + + experiments=$(find "${pr_dir}/RUNTESTS/EXPDIR" -mindepth 1 -maxdepth 1 -type d) || true + if [[ -z "${experiments}" ]]; then + echo "No current experiments to cancel in PR: ${pr} on ${MACHINE_ID^}" >> "${output_ci_single}" + else + for case in ${experiments}; do + case_name=$(basename "${case}") + cancel_slurm_jobs "${case_name}" + { + echo "Canceled all jobs for experiment ${case_name} in PR:${pr} on ${MACHINE_ID^}" + } >> "${output_ci_single}" + done + fi + sed -i "1 i\`\`\`" "${output_ci_single}" + "${GH}" pr comment "${pr}" --repo "${REPO_URL}" --body-file "${output_ci_single}" + "${ROOT_DIR}/ci/scripts/pr_list_database.py" --remove_pr "${pr}" --dbfile "${pr_list_dbfile}" + "${ROOT_DIR}/ci/scripts/pr_list_database.py" --add_pr "${pr}" --dbfile "${pr_list_dbfile}" + fi +done + +pr_list="" +if [[ -f "${pr_list_dbfile}" ]]; then + pr_list=$("${ROOT_DIR}/ci/scripts/pr_list_database.py" --display --dbfile "${pr_list_dbfile}" | grep -v Failed | grep Open | grep Ready | awk '{print $1}') || true +fi +if [[ -z "${pr_list+x}" ]]; then + echo "no PRs open and ready for checkout/build .. exiting" + exit 0 +fi + + +############################################################# +# Loop throu all open PRs +# Clone, checkout, build, creat set of cases, for each +############################################################# + +for pr in ${pr_list}; do + # Skip pr's that are currently Building for when overlapping driver scripts are being called from within cron + pr_building=$("${ROOT_DIR}/ci/scripts/pr_list_database.py" --display "${pr}" --dbfile "${pr_list_dbfile}" | grep Building) || true + if [[ -z "${pr_building+x}" ]]; then + continue + fi + id=$("${GH}" pr view "${pr}" --repo "${REPO_URL}" --json id --jq '.id') + pr_dir="${GFS_CI_ROOT}/PR/${pr}" + output_ci="${pr_dir}/output_ci_${id}" + output_ci_single="${GFS_CI_ROOT}/PR/${pr}/output_single.log" + driver_build_PID=$$ + driver_build_HOST=$(hostname -s) + "${GH}" pr edit --repo "${REPO_URL}" "${pr}" --remove-label "CI-${MACHINE_ID^}-Ready" --add-label "CI-${MACHINE_ID^}-Building" + "${ROOT_DIR}/ci/scripts/pr_list_database.py" --dbfile "${pr_list_dbfile}" --update_pr "${pr}" Open Building "${driver_build_PID}:${driver_build_HOST}" + rm -Rf "${pr_dir}" + mkdir -p "${pr_dir}" + { + echo "CI Update on ${MACHINE_ID^} at $(date +'%D %r')" || true + echo "============================================" + echo "Cloning and Building global-workflow PR: ${pr}" + echo "with PID: ${driver_build_PID} on host: ${driver_build_HOST}" + echo "" + } >> "${output_ci_single}" + sed -i "1 i\`\`\`" "${output_ci_single}" + "${GH}" pr comment "${pr}" --repo "${REPO_URL}" --body-file "${output_ci_single}" + set +e + "${ROOT_DIR}/ci/scripts/clone-build_ci.sh" -p "${pr}" -d "${pr_dir}" -o "${output_ci}" + ci_status=$? + ################################################################## + # Checking for special case when Ready label was updated + # but a race condtion caused the clone-build_ci.sh to start + # and this instance fails before it was killed. In th case we + # we need to exit this instance of the driver script + ################################################################# + if [[ ${ci_status} -ne 0 ]]; then + build_PID_check=$("${ROOT_DIR}/ci/scripts/pr_list_database.py" --display "{pr}" --dbfile "${pr_list_dbfile}" | awk '{print $4}' | cut -d":" -f1) || true + if [[ "${build_PID_check}" -ne "$$" ]]; then + echo "Driver build PID: ${build_PID_check} no longer running this build ... exiting" + exit 0 + fi + fi + set -e + if [[ ${ci_status} -eq 0 ]]; then + "${ROOT_DIR}/ci/scripts/pr_list_database.py" --dbfile "${pr_list_dbfile}" --update_pr "${pr}" Open Built "0:0" + #setup space to put an experiment + # export RUNTESTS for yaml case files to pickup + export RUNTESTS="${pr_dir}/RUNTESTS" + rm -Rf "${pr_dir:?}/RUNTESTS/"* + + ############################################################# + # loop over every yaml file in the PR's ci/cases + # and create an run directory for each one for this PR loop + ############################################################# + HOMEgfs="${pr_dir}/global-workflow" + cd "${HOMEgfs}" + pr_sha=$(git rev-parse --short HEAD) + + for yaml_config in "${HOMEgfs}/ci/cases/pr/"*.yaml; do + case=$(basename "${yaml_config}" .yaml) || true + # export pslot for yaml case files to pickup + export pslot="${case}_${pr_sha}" + rm -Rf "${STMP}/RUNDIRS/${pslot}" + set +e + export LOGFILE_PATH="${HOMEgfs}/ci/scripts/create_experiment.log" + rm -f "${LOGFILE_PATH}" + "${HOMEgfs}/workflow/create_experiment.py" --yaml "${HOMEgfs}/ci/cases/pr/${case}.yaml" > "${LOGFILE_PATH}" 2>&1 + ci_status=$? + set -e + if [[ ${ci_status} -eq 0 ]]; then + last_line=$(tail -1 "${LOGFILE_PATH}") + if [[ "${last_line}" == *"Skipping creation"* ]]; then + action="Skipped" + else + action="Completed" + fi + { + echo "Case setup: ${action} for experiment ${pslot}" || true + } >> "${output_ci}" + else + { + echo "*** Failed *** to create experiment: ${pslot} on ${MACHINE_ID^}" + echo "" + cat "${LOGFILE_PATH}" + } >> "${output_ci}" + "${GH}" pr edit "${pr}" --repo "${REPO_URL}" --remove-label "CI-${MACHINE_ID^}-Building" --add-label "CI-${MACHINE_ID^}-Failed" + "${ROOT_DIR}/ci/scripts/pr_list_database.py" --remove_pr "${pr}" --dbfile "${pr_list_dbfile}" + "${GH}" pr comment "${pr}" --repo "${REPO_URL}" --body-file "${output_ci}" + exit 1 + fi + done + + "${GH}" pr edit --repo "${REPO_URL}" "${pr}" --remove-label "CI-${MACHINE_ID^}-Building" --add-label "CI-${MACHINE_ID^}-Running" + "${ROOT_DIR}/ci/scripts/pr_list_database.py" --dbfile "${pr_list_dbfile}" --update_pr "${pr}" Open Running "0:0" + "${GH}" pr comment "${pr}" --repo "${REPO_URL}" --body-file "${output_ci}" + + else + { + echo "Failed on cloning and building global-workflowi PR: ${pr}" + echo "CI on ${MACHINE_ID^} failed to build on $(date) for repo ${REPO_URL}" || true + } >> "${output_ci}" + "${GH}" pr edit "${pr}" --repo "${REPO_URL}" --remove-label "CI-${MACHINE_ID^}-Building" --add-label "CI-${MACHINE_ID^}-Failed" + "${ROOT_DIR}/ci/scripts/pr_list_database.py" --remove_pr "${pr}" --dbfile "${pr_list_dbfile}" + "${GH}" pr comment "${pr}" --repo "${REPO_URL}" --body-file "${output_ci}" + fi + +done # looping over each open and labeled PR + +########################################## +# scrub working directory for older files +########################################## +# +#find "${GFS_CI_ROOT}/PR/*" -maxdepth 1 -mtime +3 -exec rm -rf {} \; diff --git a/ci/scripts/driver_weekly.sh b/ci/scripts/driver_weekly.sh new file mode 100755 index 0000000000..a52e5b1caa --- /dev/null +++ b/ci/scripts/driver_weekly.sh @@ -0,0 +1,118 @@ +#!/bin/bash +set -eux + +############################################################################################## +# +# Script description: Top level driver script for running +# weekly CI regression tests +# +# Abstract: +# +# This script runs the high resolution cases found in ${HOMEgfs}/ci/cases/weekly +# from the develop branch for the global-workflow repo that are intended to run on a weekly basis +# from a cron job. When run it will clone and build a new branch from the EMC's global-workflow and +# and create a pr using GitHub CLI by moving and replacing the yaml case files in +# ${HOMEgfs}/ci/cases/weekly to {HOMEgfs}/ci/cases/pr. Then the requisite labels are added +# so that the current BASH CI framework can then run these cases. Since this script +# creates a PR with the CI-Ready labels, the BASH CI framework will automatically run these cases +# from that point so it is only required to run this script once from a single machine. +############################################################################################## + +################################################################# +# TODO using static build for GitHub CLI until fixed in HPC-Stack +################################################################# +export GH=${HOME}/bin/gh +export REPO_URL="ssh://git@ssh.github.com:443/NOAA-EMC/global-workflow.git" + +################################################################ +# Setup the relative paths to scripts and PS4 for better logging +################################################################ +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." >/dev/null 2>&1 && pwd )" +scriptname=$(basename "${BASH_SOURCE[0]}") +echo "Begin ${scriptname} at $(date -u)" || true +export PS4='+ $(basename ${BASH_SOURCE[0]})[${LINENO}]' + +######################################################################### +# Set up runtime environment variables for accounts on supported machines +######################################################################### + +source "${ROOT_DIR}/ush/detect_machine.sh" +case ${MACHINE_ID} in + hera | orion) + echo "Running Automated Testing on ${MACHINE_ID}" + source "${ROOT_DIR}/ci/platforms/config.${MACHINE_ID}" + ;; + *) + echo "Unsupported platform. Exiting with error." + exit 1 + ;; +esac + +###################################################### +# setup runtime env for correct python install and git +###################################################### +set +x +source "${ROOT_DIR}/ush/module-setup.sh" +module use "${ROOT_DIR}/modulefiles" +module load "module_gwsetup.${MACHINE_ID}" +set -x + +######################################################### +# Create a new branch from develop and move yaml files +######################################################### +branch="weekly_ci_$(date +%Y%m%d)" +develop_dir="${GFS_CI_ROOT}/develop_weekly" +echo "Creating new branch ${branch} from develop on ${MACHINE_ID} in ${develop_dir}" +rm -Rf "${develop_dir}" +mkdir -p "${develop_dir}" +cd "${develop_dir}" || exit 1 +git clone "${REPO_URL}" +cd global-workflow || exit 1 +git checkout -b "${branch}" + +###################################################### +# move yaml files from ci/cases/weekly to ci/cases/pr +# and push new branch for PR weekly CI tests to GitHub +REPO_OWNER="emcbot" +REPO_NAME="global-workflow" +REMOTE_NAME="${REPO_OWNER}" + +rm -Rf ci/cases/pr +mv ci/cases/weekly ci/cases/pr +git add ci/cases +git commit -m "Moved weekly cases files into pr for high resolution testing" + +git remote add "${REMOTE_NAME}" "git@github.com:${REPO_OWNER}/${REPO_NAME}.git" + +set +e +# Delete the branch if it exists +git ls-remote --exit-code "${REMOTE_NAME}" "${branch}" +ci_status=$? +if [[ "${ci_status}" == '0' ]]; then + git push "${REMOTE_NAME}" --delete "${branch}" +fi +set -e + +git push --set-upstream "${REMOTE_NAME}" "${branch}" + +#################################################################### +# Create Pull Request using GitHub CLI and add labels for CI testing +#################################################################### + +HEAD_BRANCH="${REPO_OWNER}:${branch}" +BASE_BRANCH="develop" +PULL_REQUEST_TITLE="[DO NOT MERGE] Weekly CI Tests $(date +'%A %b %d, %Y')" +PULL_REQUEST_BODY="${PULL_REQUEST_TITLE}" +PULL_REQUEST_LABELS=("CI/CD" "CI-Orion-Ready" "CI-Hera-Ready") + +"${GH}" repo set-default "NOAA-EMC/global-workflow" +"${GH}" pr create --title "${PULL_REQUEST_TITLE}" --body "${PULL_REQUEST_BODY}" --base "${BASE_BRANCH}" --head "${HEAD_BRANCH}" +"${GH}" pr ready --undo + +# Add labels to the pull request +for label in "${PULL_REQUEST_LABELS[@]}" +do + "${GH}" pr edit --add-label "${label}" +done +cd "${GFS_CI_ROOT}" +rm -Rf "${develop_dir}" diff --git a/ci/scripts/pr_list_database.py b/ci/scripts/pr_list_database.py new file mode 100755 index 0000000000..224aabd361 --- /dev/null +++ b/ci/scripts/pr_list_database.py @@ -0,0 +1,215 @@ +#!/usr/bin/env python3 + +import sys +import os +from pathlib import Path +from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter, REMAINDER, ZERO_OR_MORE +import sqlite3 + + +def full_path(string): + """ + Gets the absolute path of the given file and confirms the directory exists + + Parameters + ---------- + string : str + Path to a file + + Returns + -------- + str + Absolute path of input path + + Raises + ------- + NotADirectoryError + If the target directory for the file does not exist. + + """ + + if os.path.isfile(string) or os.path.isdir(os.path.dirname(string)): + return os.path.abspath(string) + else: + raise NotADirectoryError(string) + + +def sql_connection(filename: os.path) -> sqlite3.Connection: + """ + Returns an Sqlite3 Cursor object from a given path to a sqlite3 database file + + Parameters + ---------- + filename : Path + Full path to a sqlite3 database file + + Returns + ------- + sqlite3.Connection + Sqlite3 Connection object for updating table + + """ + try: + return sqlite3.connect(filename) + except sqlite3.Error: + print(sqlite3.Error) + sys.exit(-1) + + +def sql_table(obj: sqlite3.Cursor) -> None: + """ + Creates the initial sqlite3 table for PR states and status + + Parameters + ---------- + obj : sqlite3.Cursor + Cursor object for Sqlite3 + + """ + + obj.execute("CREATE TABLE processing(pr integer PRIMARY KEY, state text, status text, reset_id integer, cases text)") + + +def sql_insert(obj: sqlite3.Cursor, entities: list) -> None: + """ + Inserts a new row in sqlite3 table with PR, state, and status + + Parameters + ---------- + obj : sqlite3.Cursor + Cursor object for Sqlite3 + entities : list + A list of four string values that go into sqlite table (pr, state, status, reset_id, cases) + pr: pull request number + state: The new value for the state (Open, Closed) + status: The new value for the status (Ready, Running, Failed) + reset_id: The value for number of times reset_id to Ready + cases: String containing case selection information + + """ + + obj.execute('INSERT INTO processing(pr, state, status, reset_id, cases) VALUES(?, ?, ?, ?, ?)', entities) + + +def sql_update(obj: sqlite3.Cursor, pr: str, updates: dict) -> None: + """Updates table for a given pr with new values for state and status + + Parameters + ---------- + obj : sqlite.sql_connection + sqlite3 Cursor Object + pr : str + The given pr number to update in the table + updates : dict + Dictionary of values to update for a given PR to include by postion + state, The new value for the state (Open, Closed) + status, The new value for the status (Ready, Running, Failed) + reset_id, The value for number of times reset_id to Ready + cases, Information regarding which cases are used (i.e. self PR) + + """ + + update_list = ['state', 'status', 'reset_id', 'cases'] + rows = sql_fetch(obj) + for value in updates: + update = update_list.pop(0) + obj.execute(f'UPDATE processing SET "{update}" = "{value}" WHERE pr = {pr}') + + +def sql_fetch(obj: sqlite3.Cursor) -> list: + """ Gets list of all rows in table + + Parameters + ---------- + obj : sqlite.sql_connection + sqlite3 Cursor Object + + """ + + obj.execute('SELECT * FROM processing') + return obj.fetchall() + + +def sql_remove(obj: sqlite3.Cursor, pr: str) -> None: + """ Removes the row from table with given pr number + + Parameters + ---------- + obj : sqlite.sql_connection + sqlite3 Connection Object + pr : str + pr number acting as key for removing the row with in it + + """ + + obj.execute(f'DELETE FROM processing WHERE pr = {pr}').rowcount + + +def input_args(): + + description = """Arguments for creating and updating db file for pr states + """ + + parser = ArgumentParser(description=description, + formatter_class=ArgumentDefaultsHelpFormatter) + + parser.add_argument('--dbfile', help='SQLite3 database file with PR list', type=full_path) + parser.add_argument('--create', help='create sqlite file for pr list status', action='store_true', required=False) + parser.add_argument('--add_pr', nargs=1, metavar='PR', help='add new pr to list (defults to: Open,Ready)', required=False) + parser.add_argument('--remove_pr', nargs=1, metavar='PR', help='removes pr from list', required=False) + parser.add_argument('--update_pr', nargs=REMAINDER, metavar=('pr', 'state', 'status', 'reset_id', 'cases'), + help='updates state and status of a given pr', required=False) + parser.add_argument('--display', nargs='*', help='output pr table', required=False) + + args = parser.parse_args() + return args + + +if __name__ == '__main__': + + args = input_args() + + if not args.create: + if not os.path.isfile(args.dbfile): + print(f'Error: {args.dbfile} does not exsist') + sys.exit(-1) + + con = sql_connection(args.dbfile) + obj = con.cursor() + + if args.create: + sql_table(obj) + + if args.add_pr: + rows = sql_fetch(obj) + for row in rows: + if str(row[0]) == str(args.add_pr[0]): + print(f"pr {row[0]} already is in list: nothing added") + sys.exit(0) + + entities = (args.add_pr[0], 'Open', 'Ready', 0, 'ci_repo') + sql_insert(obj, entities) + + if args.update_pr: + if len(args.update_pr) < 2: + print(f"update_pr must have at least one vaule to update") + sys.exit(0) + pr = args.update_pr[0] + + sql_update(obj, pr, args.update_pr[1:]) + + if args.remove_pr: + sql_remove(obj, args.remove_pr[0]) + + if args.display is not None: + rows = sql_fetch(obj) + if len(args.display) == 1: + for row in rows: + if int(args.display[0]) == int(row[0]): + print(' '.join(map(str, row))) + else: + for row in rows: + print(' '.join(map(str, row))) + + con.commit() + con.close() diff --git a/ci/scripts/run-check_ci.sh b/ci/scripts/run-check_ci.sh new file mode 100755 index 0000000000..a5c5369ef7 --- /dev/null +++ b/ci/scripts/run-check_ci.sh @@ -0,0 +1,107 @@ +#!/bin/bash + +set -eu + +##################################################################################### +# Script description: script to check the status of an experiment as reported +# by Rocoto +##################################################################################### + +TEST_DIR=${1:-${TEST_DIR:-?}} # Location of the root of the testing directory +pslot=${2:-${pslot:-?}} # Name of the experiment being tested by this script + +# TEST_DIR contains 2 directories; +# 1. HOMEgfs: clone of the global-workflow +# 2. RUNTESTS: A directory containing EXPDIR and COMROT for experiments +# # e.g. $> tree ./TEST_DIR +# ./TEST_DIR +# ├── HOMEgfs +# └── RUNTESTS +# ├── COMROT +# │   └── ${pslot} +# └── EXPDIR +# └── ${pslot} +HOMEgfs="${TEST_DIR}/HOMEgfs" +RUNTESTS="${TEST_DIR}/RUNTESTS" + +# Source modules and setup logging +echo "Source modules." +source "${HOMEgfs}/workflow/gw_setup.sh" + +# cd into the experiment directory +echo "cd ${RUNTESTS}/EXPDIR/${pslot}" +cd "${RUNTESTS}/EXPDIR/${pslot}" || (echo "FATAL ERROR: Unable to cd into '${RUNTESTS}/EXPDIR/${pslot}', ABORT!"; exit 1) + +# Name of the Rocoto XML and database files +xml="${pslot}.xml" +db="${pslot}.db" + +# Ensure the XML is present for the experiment +if [[ ! -f "${xml}" ]]; then + echo "FATAL ERROR: XML file ${xml} not found in '${pslot}', experiment ${pslot} failed, ABORT!" + exit 1 +fi + +# Launch experiment +echo "Launch experiment with Rocoto." +rocotorun -v "${ROCOTO_VERBOSE:-0}" -w "${xml}" -d "${db}" +sleep 30 +if [[ ! -f "${db}" ]]; then + echo "FATAL ERROR: Rocoto database file ${db} not found, experiment ${pslot} failed, ABORT!" + exit 2 +fi + +# Experiment launched +rc=99 +while true; do + + echo "Run rocotorun." + rocotorun -v "${ROCOTO_VERBOSE:-0}" -w "${xml}" -d "${db}" + + # Wait before running rocotostat + sleep 30 + + # Get job statistics + echo "Gather Rocoto statistics" + rocotostat_output=$(rocotostat -w "${xml}" -d "${db}" -s | grep -v CYCLE) || true + num_cycles=$(echo "${rocotostat_output}" | wc -l) || true + num_done=$(echo "${rocotostat_output}" | grep -c Done) || true + num_succeeded=$(rocotostat -w "${xml}" -d "${db}" -a | grep -c SUCCEEDED) || true + num_failed=$(rocotostat -w "${xml}" -d "${db}" -a | grep -c -E 'FAIL|DEAD') || true + + echo "${pslot} Total Cycles: ${num_cycles} number done: ${num_done}" + + if [[ ${num_failed} -ne 0 ]]; then + { + echo "Experiment ${pslot} Terminated with ${num_failed} tasks failed at $(date)" || true + echo "Experiment ${pslot} Terminated: *FAILED*" + } >> "${RUNTESTS}/ci.log" + + error_logs=$(rocotostat -d "${db}" -w "${xml}" | grep -E 'FAIL|DEAD' | awk '{print "-c", $1, "-t", $2}' | xargs rocotocheck -d "${db}" -w "${xml}" | grep join | awk '{print $2}') || true + { + echo "Error logs:" + echo "${error_logs}" + } >> "${RUNTESTS}/ci.log" + sed -i "s/\`\`\`//2g" "${RUNTESTS}/ci.log" + sacct --format=jobid,jobname%35,WorkDir%100,stat | grep "${pslot}" | grep "${pr}\/RUNTESTS" | awk '{print $1}' | xargs scancel || true + rc=1 + break + fi + + if [[ "${num_done}" -eq "${num_cycles}" ]]; then + { + echo "Experiment ${pslot} Completed at $(date)" || true + echo "with ${num_succeeded} successfully completed jobs" || true + echo "Experiment ${pslot} Completed: *SUCCESS*" + } >> "${RUNTESTS}/ci.log" + sed -i "s/\`\`\`//2g" "${RUNTESTS}/ci.log" + rc=0 + break + fi + + # Wait before running rocotorun again + sleep 300 + +done + +exit "${rc}" diff --git a/ci/scripts/run_ci.sh b/ci/scripts/run_ci.sh new file mode 100755 index 0000000000..cdaafb337f --- /dev/null +++ b/ci/scripts/run_ci.sh @@ -0,0 +1,87 @@ +#!/bin/bash +set -eux + +##################################################################################### +# +# Script description: BASH script for checking for cases in a given PR and +# simply running rocotorun on each. This script is intended +# to run from within a cron job in the CI Managers account +# Abstract TODO +##################################################################################### + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." >/dev/null 2>&1 && pwd )" +scriptname=$(basename "${BASH_SOURCE[0]}") +echo "Begin ${scriptname} at $(date -u)" || true +export PS4='+ $(basename ${BASH_SOURCE})[${LINENO}]' + +######################################################################### +# Set up runtime environment varibles for accounts on supproted machines +######################################################################### + +source "${ROOT_DIR}/ush/detect_machine.sh" +case ${MACHINE_ID} in + hera | orion) + echo "Running Automated Testing on ${MACHINE_ID}" + source "${ROOT_DIR}/ci/platforms/config.${MACHINE_ID}" + ;; + *) + echo "Unsupported platform. Exiting with error." + exit 1 + ;; +esac +set +x +source "${ROOT_DIR}/ush/module-setup.sh" +module use "${ROOT_DIR}/modulefiles" +module load "module_gwsetup.${MACHINE_ID}" +module list +set -eux +rocotorun=$(command -v rocotorun) +if [[ -z ${rocotorun} ]]; then + echo "rocotorun not found on system" + exit 1 +else + echo "rocotorun being used from ${rocotorun}" +fi + +pr_list_dbfile="${GFS_CI_ROOT}/open_pr_list.db" + +pr_list="" +if [[ -f "${pr_list_dbfile}" ]]; then + pr_list=$("${ROOT_DIR}/ci/scripts/pr_list_database.py" --display --dbfile "${pr_list_dbfile}" | grep -v Failed | grep Open | grep Running | awk '{print $1}' | head -"${max_concurrent_pr}") || true +fi +if [[ -z "${pr_list}" ]]; then + echo "no open and built PRs that are ready for the cases to advance with rocotorun .. exiting" + exit 0 +fi + +############################################################# +# Loop throu all PRs in PR List and look for expirments in +# the RUNTESTS dir and for each one run runcotorun on them +# only up to $max_concurrent_cases will advance at a time +############################################################# + +for pr in ${pr_list}; do + echo "Processing Pull Request #${pr} and looking for cases" + pr_dir="${GFS_CI_ROOT}/PR/${pr}" + # If the directory RUNTESTS is not present then + # setupexpt.py has no been run yet for this PR + if [[ ! -d "${pr_dir}/RUNTESTS" ]]; then + continue + fi + num_cases=0 + for pslot_dir in "${pr_dir}/RUNTESTS/EXPDIR/"*; do + if [[ ! -d "${pslot_dir}" ]]; then + continue + fi + ((num_cases=num_cases+1)) + # No more than two cases are going forward at a time for each PR + if [[ "${num_cases}" -gt "${max_concurrent_cases}" ]]; then + continue + fi + pslot=$(basename "${pslot_dir}") + xml="${pslot_dir}/${pslot}.xml" + db="${pslot_dir}/${pslot}.db" + echo "Running: ${rocotorun} -v 10 -w ${xml} -d ${db}" + "${rocotorun}" -v 10 -w "${xml}" -d "${db}" + done +done diff --git a/ci/scripts/utils/ci_utils.sh b/ci/scripts/utils/ci_utils.sh new file mode 100755 index 0000000000..737a3e5a86 --- /dev/null +++ b/ci/scripts/utils/ci_utils.sh @@ -0,0 +1,24 @@ +#!/bin/env bash + +function cancel_slurm_jobs() { + + # Usage: cancel_slurm_jobs + # Example: cancel_slurm_jobs "C48_ATM_3c4e7f74" + # + # Cancel all Slurm jobs that have the given substring in their name + # So like in the example all jobs with "C48_ATM_3c4e7f74" + # in their name will be canceled + + local substring=$1 + local job_ids + job_ids=$(squeue -u "${USER}" -h -o "%i") + + for job_id in ${job_ids}; do + job_name=$(sacct -j "${job_id}" --format=JobName%100 | head -3 | tail -1 | sed -r 's/\s+//g') || true + if [[ "${job_name}" =~ ${substring} ]]; then + echo "Canceling Slurm Job ${job_name} with: scancel ${job_id}" + scancel "${job_id}" + continue + fi + done +} diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000000..72173f32a7 --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,25 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +# Sphinx doesn't know to clean out the debris from sphinx-gallery +clean: + rm -rf $(BUILDDIR)/* + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + [ -d $(BUILDDIR) ] || mkdir -p $(BUILDDIR) + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -w "$(BUILDDIR)/warnings.log" diff --git a/docs/Release_Notes.gfs.v15.1.0.txt b/docs/Release_Notes.gfs.v15.1.0.txt deleted file mode 100644 index 5b0f17a65c..0000000000 --- a/docs/Release_Notes.gfs.v15.1.0.txt +++ /dev/null @@ -1,360 +0,0 @@ -GFS RELEASE NOTES (GFS.v15.1.0) -- April 1, 2019 - - -PRELUDE - *NOAA/NWS selected the Geophysical Fluid Dynamics Laboratory (GFDL) finite­ volume cubed-sphere (FV3) - dynamical core as the Weather Service Next Generation Global Prediction System (NGGPS). The current - operational GFS, which has a spectral dynamical core, will be replaced by the proposed GFS with FV3 - dynamical core and improved physics parameterizations in June, 2019. Significant changes have - been made to both the science and infrastructure of the GFS system. - - *GFS.v15 maintains a horizontal resolution of 13 km, and has 64 levels in the vertical extending - up to 0.2 hPa. It uses the same physics package as the current operational GFS except for the - replacement of Zhao-Carr microphysics with the more advanced GFDL microphysics, improved ozone physics - and water vapor physics etc. There are also updates to data assimilation techniques, observational - data usage, post-processing and downstream product generation. For more details please refer to the - Science Change Notice https://drive.google.com/open?id=1OaYWNsQSTcDPIjL6EMt4iH1Rm5rSkc0aeP_jcqzDg0s - - *The current operational GFS.v14 was built upon a vertical directory structure. It contains - three independent packages. The latest versions used in operations are gdas.v14.1.0, gfs.v14.1.2, - and global_shared.v14.1.7. - - *GFS.v15 has been reorganized to use a flat directory structure. The three packages in GFS.v14 have - been merged together to form a single package. Therefore, there is no direct comparison and one-to-one - correspondence between GFS.v14 and GFS.v15. - - *This release note describes the overall changes made to the entire system. - More details about changes in science and structure of the data assimilation system are documented in - .gfs.v15.1.0/sorc/gsi.fd/doc/Release_Notes.fv3gfs_da.v15.txt. - Details about downstream product generation is documented in Release_Notes.gfs_downstream.v15.1.0.txt. - - -IMPLEMENTATION INSTRUCTIONS - - * NOAA Vlab GIT is used to manage GFS.v15 code. The SPA(s) handling the GFS.v15 implementation need to have - permission to clone Vlab gerrit repositories. So far Wojciech Cencek has been given access to all GFS.v15 - related git repositories. Please contact Fanglin.Yang@noaa.gov if there is any VLAB access issue and/or - the individual code managers listed under item #6) below. Please follow the following steps to install - the package on WCOSS DELL - - 1) cd $NWROOTp3 - 2) mkdir gfs.v15.1.0 - 3) cd gfs.v15.1.0 - 4) git clone --recursive gerrit:global-workflow . - 5) git checkout q2fy19_nco - 6) cd sorc - 7) ./checkout.sh - This script extracts the following GFS components from gerrit - MODEL -- tag nemsfv3gfs_beta_v1.0.18 Jun.Wang@noaa.gov - GSI -- tag fv3da.v1.0.42 Russ.Treadon@noaa.gov - UPP -- tag ncep_post_gtg.v1.0.6c Wen.Meng@noaa.gov - WAFS -- tag gfs_wafs.v5.0.8 Yali.Mao@noaa.gov - - - 8) ./build_all.sh - *This script compiles all GFS components. Runtime output from the build for each package is written - to log files in directory logs. To build an individual program, for instance, gsi, use build_gsi.sh. - - 9) ./link_fv3gfs.sh nco dell - - * Note: 1) ecflow suite definition and scripts are saved in gfs.v15.1.0/ecflow/ecf - 2) ncep_post_gtg.v1.0.6c contains restricted GTG (Graphic Turbulence Guidance) code provided by - NCAR. Please do not post the GTG code in any public domain. - - - - -JOB CHANGES - - * EMC has worked with NCO to consolidate and unify the JJOBS used in GFS production and experimental runs. - For a few tasks, JGLOBAL_* is now used to replace JGDAS_* and JGFS_* to run for both gfs and gdas steps. - Please refer to https://docs.google.com/spreadsheets/d/1rhKnGV1uf73p8eAIEb6Or6uUU9UGvKBqw3bl_TxTcHw/edit#gid=0 - for a complete list of JJOBS that have been merged, replaced or removed. - - * JGDAS_ANALYSIS_HIGH and JGFS_ANALYSIS --> merged into JGLOBAL_ANALYSIS - * JGFS_FORECAST_HIGH and JGDAS_FORECAST_HIGH --> merged into JGLOBAL_FORECAST - * JGFS_TROPCY_QC_RELOC and JGDAS_TROPCY_QC_RELOC --> merged into JGLOBAL_TROPCY_QC_RELOC - * JGFS_EMCSFC_SFC_PREP and JGDAS_EMCSFC_SFC_PREP --> merged into JGLOBAL_EMCSFC_SFC_PREP - * JGFS_POST_MANAGER and JGFS_PRDGEN_MANAGER --> merged into JGLOBAL_POST_MANAGER - * JGFS_NCEPPOST and JGDAS_NCEPPOST --> merged into JGLOBAL_NCEPPOST - * JGFS_PGRB2 --> merged into JGLOBAL_NCEPPOST - - * JGFS_AWIPS_1P0DEG and JGFS_AWIPS_20KM --> merged into JGFS_AWIPS_20KM_1P0DEG - * JGFS_GEMPAK_NCDC and JGFS_GEMPAK_UPAPGIF --> merged into JGFS_GEMPAK_NCDC_UPAPGIF - * JGFS_NPOESS_PGRB2_0P5DEG and JGFS_PGRB2_SPEC_POST --> merged into JGFS_PGRB2_SPEC_NPOESS - * JGDAS_BULLS and JGDAS_MKNAVYBULLS --> merged into JGDAS_BULLS_NAVY - - * JGDAS_ENKF_SELECT_OBS --> renamed JGLOBAL_ENKF_SELECT_OBS - * JGDAS_ENKF_INNOVATE_OBS --> renamed JGLOBAL_ENKF_INNOVATE_OBS - * JGDAS_ENKF_UPDATE --> renamed JGLOBAL_ENKF_UPDATE - * JGDAS_ENKF_INFLATE_RECENTER --> renamed JGDAS_ENKF_RECENTER - - * JGFS_FORECAST_LOW --> removed - * JCPC_GET_GFS_6HR --> removed - - -SCRIPT CHANGES - - * Many scripts have been renamed to reflect the new model and DA system and directory structure. - A few new scripts have been added. Below is a mapping between a few current operational GFS - scripts and their GFS.v15 counterparts - - exglobal_fcst_nems.sh.ecf --> exglobal_fcst_nemsfv3gfs.sh - exglobal_analysis.sh.ecf --> exglobal_analysis_fv3gfs.sh.ecf - exglobal_enkf_innovate_obs.sh.ecf --> exglobal_innovate_obs_fv3gfs.sh.ecf - exglobal_enkf_update.sh.ecf --> exglobal_enkf_update_fv3gfs.sh.ecf - exglobal_enkf_inflate_recenter.sh.ecf --> exglobal_enkf_recenter_fv3gfs.sh.ecf - exglobal_enkf_fcst_nems.sh.ecf --> exglobal_enkf_fcst_fv3gfs.sh.ecf - exglobal_enkf_post.sh.ecf --> exglobal_enkf_post_fv3gfs.sh.ecf - exglobal_enkf_innovate_obs_fv3gfs.sh.ecf --> new script - exgdas_bulletines.sh.ecf and exmknavyb.sh.ecf ---> exgdasl_bulls_navy3gfs.sh.ecf - exgfs_grib_awips_1p0deg.sh.ecf and exgfs_grib_awips_20km.sh.ecf ---> exgfs_awips_20km_1p0deg.sh.ecf - exgempak_gfs_gif_ncdc.sh.ecf and exgempak_gif_ncdc.sh.ecf ---> exgempak_gfs_gif_ncdc_skew_t.sh.ecf - exglobal_npoess_halfdeg_gfs_g2.sh.ecf and exglobal_grib2_special.sh.ecf ---> exglobal_grib2_special_npoess.sh.ecf - - - * Note the four scripts beginning with run_gfsmos_master are only used for running MDL MOS - along with EMC gfs parallel experiments. - - - -PARM/CONFIG CHANGES - - All JJOBS except for those used by downstream product generation source config files under - ./gfs.v15.1.0/parm/config to set up job-specific parameters. config.base is sourced by all - JJOBS to set parameters that are common to either all JJOBS or are shared by more than one JJOBS. - config.anal is shared by a few analysis steps. - - Below are the parm (config) files used by each GFS.v15 DA job - * JGLOBAL_FORECAST - config.base, config.fcst - * JGLOBAL_NCEPPOST - config.base, config.post - * JGLOBAL_POST_MANAGER - config.base, config.post - * JGLOBAL_TROPCY_QC_RELOC - config.base, config.prep - * JGLOBAL_ANALYSIS - config.base, config.anal - * JGLOBAL_ENKF_SELECT_OBS - config.base, config.anal, config.eobs - * JGLOBAL_ENKF_INNOVATE_OBS - config.base, config.anal, config.eobs - * JGLOBAL_ENKF_UPDATE - config.base, config.anal, config.eupd - * JGDAS_ENKF_RECENTER - config.base, config.ecen - * JGDAS_ENKF_FCST - config.base, config.fcst, config.efcs - * JGDAS_ENKF_POST - config.base, config.epos - - - -FIX CHANGES - - * All fixed fields used by the system are placed under gfs.v15.1.0/fix, and further categorized - based on the type of applications. During the NCO implementation process, fix_am, fix_fv3, - fix_orog, fix_verif, and fix_fv3_gmted2010 are copied from EMC's local archives. fix_gsi and - wafs are copied from two external repositories. - The entire package takes 123GB disk space to install. This ./fix directory alone takes 113GB. - - fix_am -- NEMS GSM fields from GFS.v14 and earlier version. Some of them are still used for GFS.v15. - fix_fv3 -- new fields, defining FV3 model structure for different resolutions, based on TOPO30 terrain - fix_fv3_gmted2010 - -- new fields, defining FV3 model structure for different resolutions, based on gmted2010 terrain - fix_orog -- sources of terrain data - fix_gsi -- used by data assimilation steps - fix_verif -- bused by VSDB and MET verifications - gdas -- used by DA monitoring programs - product -- used by downstream product generation programs - wafs -- used by WAFS program - - -PRODUCT CHANGES - - * please refer to https://docs.google.com/spreadsheets/d/1KjiV2tDu55IDMxb-HFT-TL-DimVEQxGgWfpRmfl6PCw/edit#gid=1608491678 - for changes of file names and variables of UPP post-processed products . - * Please refer to the PNS https://docs.google.com/document/d/112GG7yBDMPmEcrNi1R2ISsoLcivj5WPivSnf9Id_lHw/edit for a detailed description of all changes made to post and downstream products and data delivery to the public. - - -RESOURCE INFORMATION - - * Frequency of run - * 6 hourly cycle (00, 06, 12, 18Z) - no change from current operations - - * Commonly used libraries, compiler, and modules are defined in gfs.v15.1.0/modulefiles. For nemsfv3gfs, gsi, upp, wafs - they maintain their own module files under gfs.v15.1.0/sorc/(fv3gfs gsi gfs_post global_wafs).fd/modulefiles - - * Data retention time under $COMROOThps for GFS.v15 should be the same as GFS.v14. GFS.v15 is no longer pushing or - extracting data from $GESROOThps. - - * Disk space: The current operational GFS.v14 takes about 4.1 TB online COM disk space per cycle, while GFS.v15 will - require 10.7TB per cycle. - - - * Computational resources and run times: Please refer to - https://docs.google.com/spreadsheets/d/1Y0MJ9NQ8EC1imQSJsNIMcSa4KkNURpmcGUYHe0t8wfk/edit#gid=48801932 - for the detail of node usage,threading, and runtime for all jobs. Information about the major steps are listed below. - - - * JGLOBAL_FORECAST (GFS) - * 116 nodes, 1624 tasks, ptile=12, 2 threads/task - * Runtime: 120 minutes - - * JGLOBAL_FORECAST (GDAS) - * 28 nodes, 392 tasks, ptile=12, 2 threads/task - * Runtime: 11.7 minutes - - * JGLOBAL_ANALYSIS (GFS) - * 240 nodes, 480 tasks, ptile=2, 14 threads/task - * Runtime: 26.8 minutes - - * JGLOBAL_ANALYSIS (GDAS) - * 240 nodes, 480 tasks, ptile=2, 14 threads/task - * Runtime: 30.7 minutes - - * JGLOBAL_ENKF_SELECT_OBS - * 10 nodes, 140 tasks, ptile=14, 2 threads/task - * Runtime: 3.4 minutes - - * JGLOBAL_ENKF_INNOVATE_OBS - * 10 nodes, 140 tasks, ptile=14, 2 threads/task - * Concurrently run 10 realizations of JGLOBAL_ENKF_INNOVATE_OBS. Each job processes - 8 EnKF members. Total node usage for 10 jobs x 10 nodes each = 100 nodes. - * Runtime: 15.0 minutes - - * JGLOBAL_ENKF_UPDATE - * 90 nodes, 360 tasks, ptile=4, 7 threads/task - * Runtime: 6.5 minutes - - * JGLOBAL_EMCSFC_SFC_PREP - * Serial process, 2GB memory - * Runtime: 60 seconds - - * JGDAS_ENKF_RECENTER - * 20 nodes, 80 tasks, ptile=4, 7 threads/task - * Runtime: 4.4 minutes - - - * JGDAS_ENKF_FCST - * 14 nodes, 168 tasks, ptile=12, 2 threads/task - * Concurrently run 20 realizations of JGDAS_ENKF_FCST. Each job processes 4 EnKF - members. Total node usage for 20 jobs x 14 nodes each = 280 nodes - * 20 EnKF forecast groups for GFS.v15 is an increase from the 10 EnKF forecast groups - currently run in operations. - * Runtime: 19.8 minutes - - * JGDAS_ENKF_POST - * 20 nodes, 80 nodes, ptile=4, 7 threads/task - * Concurrently run 7 realizations of JGDAS_ENKF_POST. 7 forecasts processed, one - per job. Total node usage for 7 jobs x 20 nodes each = 140 nodes. - * 7 EnKF post groups is an increase from the single EnKF post job currently run in operations - * Runtime: 4.9 minutes - - -PRE-IMPLEMENTATION TESTING REQUIREMENTS - - * Which production jobs should be tested as part of this implementation? - * all components of this package need to be tested. EMC is running a real-time parallel using the same system. We will work with the SPA to provide initial conditions from this parallel to run the NCO parallel during the implementation process. We will compare results from EMC and NCO parallels to ensure they reproduce each other. - - - * Does this change require a 30-day evaluation? - * Yes, the entire GFS.v15 package requires a 30-day evaluation - - - * Suggested evaluators - * Please contact fanglin.yang@noaa.gov and russ.treadon@noaa.gov for evaluation. - - -DISSEMINATION INFORMATION - - * Where should this output be sent? - * same as current operations. - - - * Who are the users? - * same as current operations - - - * Which output files should be transferred from PROD WCOSS to DEV WCOSS? - * Same as current operation. As there are certain changes in product names and types, - EMC will provide support for NCO dataflow team to finalize the list. - - * Directory changes - * Add cycle to gfs and gdas paths. GFS.v15 paths are $COMROOTp3/gfs/prod/gfs.$PDY/$cyc - and $COMROOTp3/gfs/prod/gdas.$PDY/$cyc. - * Add "gdas" to top level EnKF directory --> $COMROOTp3/gfs/prod/enkf.gdas.$PDY. - * Place EnKF member files in memXXX directories inside $COMROOTp3/gfs/prod/enkf.gdas.$PDY/$cyc - - - * File changes. - *3-digital forecast hours are applied to all forecast output and post-process products. - - *For file name conventions of post-processed products please refer to - https://docs.google.com/spreadsheets/d/1KjiV2tDu55IDMxb-HFT-TL-DimVEQxGgWfpRmfl6PCw/edit#gid=1608491678 - - *Changes related to forecast and data assimilation cycles are listed below. - - In $COMROOTp3/gfs/prod/gfs.$PDY/$cyc - Unchanged: gfs.tHHz.atmanl.nemsio gfs.tHHz.sfcanl.nemsio - gfs.tHHz.atmfhhh.nemsio gfs.tHHz.sfcfhhh.nemsio gfs.tHHz.logfhhh.nemsio - gfs.tHHz.atmges.nemsio gfs.tHHz.atmgm3.nemsio gfs.tHHz.atmgp3.nemsio - Removed : gfs.tHHz.flxfhhh.nemsio gfs.tHHz.nstfhhh.nemsio gfs.t00z.nstanl.nemsio gfs.tHHz.dtfanl.bin4 - gfs.tHHz.atmgm1.nemsio gfs.tHHz.atmgm2.nemsio - gfs.tHHz.atmgp1.nemsio gfs.tHHz.atmgp2.nemsio - Added: gfs.tHHz.atminc.nc gfs.tHHz.dtfanl.nc - . /RESTART (a directory contains 6 tiled files for warm restart) - - - In $COMROOTp3/gfs/prod/gdas.$PDY/$cyc - Unchanged: gdas.tHHz.atmanl.nemsio gdas.tHHz.sfcanl.nemsio - gdas.tHHz.atmfhhh.nemsio gdas.tHHz.sfcfhhh.nemsio gdas.tHHz.logfhhh.nemsio - gdas.tHHz.atmges.nemsio gdas.tHHz.atmgm3.nemsio gdas.tHHz.atmgp3.nemsio - Removed : gdas.tHHz.flxfhhh.nemsio gdas.tHHz.nstfhhh.nemsio gdas.t00z.nstanl.nemsio - gdas.tHHz.dtfanl.bin4 - gdas.tHHz.atmgm1.nemsio gdas.tHHz.atmgm2.nemsio - gdas.tHHz.atmgp1.nemsio gdas.tHHz.atmgp2.nemsio - gdas.tHHz.sfcgcy and gdas.tHHz.sfcts - Added: gdas.tHHz.atminc.nc gdas.tHHz.dtfanl.nc - gdas.tHHz.atmanl.ensres.nemsio - ./RESTART (a directory contains 39 files on tiled surface for warm restart) - - - In $COMROOTp3/gfs/prod/enkf.gdas.$PDY/$cyc - Move: member EnKF files into ./memXXX subdirectories - Rename: gdas.tHHz.fcsstat.grp* --> efcs.grp* - gdas.tHHz.omgstat.grp* --> eomg.grp* - Remove - “memXXX" from EnKF member filenames since member files are now in memXXX directories - gdas.tHHz.flxfhhh.memxxx.nemsio - gdas.tHHz.nstfhhh.memxxx.nemsio - gdas.tHHz.gcyanl.memxxx.nemsio - gdas.tHHz.nstanl.memxxx.nemsio - gdas.tHHz.sfcanl.memxxx.nemsio - gdas.tHHz.biascr_int.ensmean - Add - gdas.tHHz.[abias.air, abias, abias_int, abias_pc].ensmean - gdas.tHHz.abias.ensmean - Inside each member memXXX, where XXX=001 to 080, add - gdas.tHHz.abias gdas.tHHz.abias_air gdas.tHHz.abias_int gdas.tHHz.abias_pc - gdas.t00z.atminc.nc - gdas.tHHz.logfXXX.nemsio - ./RESTART (a directory contains 39 files on model tiles for warm restart) - - -HPSS ARCHIVE - - HPSS archive: please refer to https://docs.google.com/spreadsheets/d/14YdtuC_bL-6eybLA-rvKVvW1eLD_f6NFWzxnatYyCMo/edit#gid=0 - for current operational GFS.v14 archives and the proposed archives for GFS.v15. - Note that we are proposing to restructure GFS HPSS archive and use new tarball names to - follow GFS.v15 restart file style and to better serve the needs of different users. - Updated archive scripts for operation are saved on Venus at - /gpfs/dell2/emc/modeling/noscrub/Fanglin.Yang/git/fv3gfs/hpsslist/runhistory.v2.2.44 - - -JOB DEPENDENCIES & FLOW DIAGRAM - * No change in dependencies with respect to current operations. NCO’s GDAS and GFS flow charts - were copied and slightly modified - GFS https://docs.google.com/drawings/d/1bbhKCtkvB7MhyvMR5hdqIw9AnT2kDQ08hJV8GqK3KSc/edit - GDAS https://docs.google.com/drawings/d/1PANAubjIWF3usl1mVanr0eWLNPfiIcTbc9vumezHEVs/edit - - - -=========== -Prepared by -Fanglin.Yang@noaa -Russ.Treadon@noaa.gov -Boi.Vuong@noaa.gov -Wen.Meng@noaa.gov - - diff --git a/docs/Release_Notes.gfs.v15.2.0.txt b/docs/Release_Notes.gfs.v15.2.0.txt deleted file mode 100644 index 4f3cbcddd9..0000000000 --- a/docs/Release_Notes.gfs.v15.2.0.txt +++ /dev/null @@ -1,261 +0,0 @@ -GFS v15.2.0 RELEASE NOTES - - -PRELUDE (taken from GFS v15.2.0 SCN) - - GFS version 15.1 was implemented into operation at the 12Z cycle on June 12, 2019. It was the first - GFS implementation with the finite­ volume cubed-sphere (FV3) dynamical core as the Weather Service’s - Next Generation Global Prediction System (NGGPS). - - GFS version 15.2 is a minor upgrade. The major change to the system is to ingest new and replacement - satellite observations for data assimilation. It also contains a few other minor upgrades and bug fixes. - - 1) Assimilate new satellite observations - * GOES-17 AMVs - * GOES-17 has already replaced GOES-15 as the operational GOES-West satellite. Distribution of - GOES-15 products is expected to cease around December 2019 and active assimilation of GOES-17 - AMVs is required to prevent a gap in data coverage. - * Metop-C AMSU and MHS - * Metop-C is now the primary satellite in the 9:30 AM orbit. Assimilation of these data provide - additional impact as well as adding robustness to the system. - * KOMPSAT-5 (GPS-RO) - * Provides additional robustness to the system. - * Addition changes are made to VIIRS AMV ingest code to allow continued use after an expected change - to the BUFR format. - - 2) Assimilate buoyb sea-surface temperature (SST) data - TAC2BUFR changes in the buoy network resulted in a reduction of available SST measurements from buoys - to 10% or less of expected levels. Obsproc and GSI changes were required to restore data counts to - previous levels. - - 3) New product: Graphical Turbulence Guidance (GTG) - Global Turbulence product generated using NCAR GTG algorithm will start being disseminated on NOMADS. - The product will be available 3 hourly from F06 to F36 and horizontal resolution will be a quarter - degree. gfs.t{CC}Z.gtg.0p25.grb2f{HHH} - - 4) Update the Unified Post Processor(UPP) to address a mask issue of several land surface fields over - water bodies in grib2 products. - - This update will make GFS.v15.2 p-grid products to be more consistent with GFS.v14 products, and - remove spurious soil moisture along coastlines. These land surface fields include Soil Moisture, - Soil Temperature, Liquid Volumetric Soil Moisture, WEASD, Snow Depth, Water Runoff, GFLUX Ground - Heat Flux, WILT Wilting Point, and FLDCP Field Capacity. - - Affected product files are: - gfs.t{CC}Z.pgrb2.0p25.F{HHH} - gfs.t{CC}Z.pgrb2b.0p25.g{HHH} - gfs.t{CC}Z.pgrb2.0p50.F{HHH} - gfs.t{CC}Z.pgrb2b.0p50.g{HHH} - gfs.t{CC}Z.pgrb2.1p00.F{HHH} - gfs.t{CC}Z.pgrb2b.1p00.g{HHH} - gfs.t{CC}Z.sfluxgrbf{HHH}.grib2 - Where CC is cycle for 00, 06, 12, 18 UTC, and HHH is forecast hour. - - 5) The vessel icing program uses OISST as input. OISST will not be ported from WCOSS Phase 1 to Phase 3 - after Phase 1 is decommissioned in 2020. A decision was made to move the vessel icing program - within the Unified Post Processor(UPP) and use GFS forecast skin temperature as input. Current vessel - icing product in operation (sice.tCCz.siceg) has a 1-deg resolution and is disseminated to the public at - - ftp://ftp.ncep.noaa.gov/pub/data/nccf/com/omb/prod/sice.yyyymmdd/ - - New vessel icing product will be included as a variable (ICEG) in GFS p-grid products gfs.tCCz.pgrb2.xpxx.fxxx - and gfs.tCCz.pgrb2b.xpxx.fxxx at 0.25, 0.5, and 1.0-deg resolutions, and be disseminated to the public at - - ftp://ftp.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.yyyymmdd/ - - 6) Added three stations to station time series bufr soundings: - - 006011 62.02N 6.76W TOR 00 Thorshvan, Denmark 54 Usr Rqst 4-19 - 999913 15.51S 128.15E WYN 00 Wyndham aerodrome Australia 4 Usr Rqst 1-19 - 999914 57.48N 7.36W EGPL 00 Benbecula, Scotland, UK 6 Usr Rqst 1-19 - - The affected output files are: - gfs_yyyymmddhh.sfc - gfs_yyyymmddhh.snd - gfs.tCCz.bufrsnd.tar.gz - - Three additional files for the stations: - bufr.006011.yyyymmddhh - bufr.999913.yyyymmddhh - bufr.999914.yyyymmddhh - - 7) Reduction of water temperature biases in small lakes. - For small lakes adequate observations do not always exit to support the analysis of lake surface - temperature, often leading to significant departures from both the climatology and real-time observation. - Two changes were introduced to ensure that lake temperatures do not deviate from the climatology when - observations are not available. The first change is to replace a surface mask file at 0.5-degree - resolution with the one on the T1534 Gaussian grid (~13km) to prevent unrealistic SST climatology - from being used for updating the background of the near sea-surface temperature analysis over small - water bodies, such as those in the Great Salt Lake. The second change is to reduce the relaxation - time scale of the SST to climatology in GDAS forecast step from 90 days to 10 days. - - 8) Changes to NOAAPORT/SBN - Product Removals - * GADS FAX product which contains tropical surface analysis in TIF format with G4 compression. - - - -IMPLEMENTATION INSTRUCTIONS - - * NOAA Vlab GIT is used to manage GFS.v15.2 code. The SPA(s) handling the GFS.v15.2 implementation need to have - permission to clone Vlab gerrit repositories. So far Wojciech Cencek has been given access to all GFS.v15.2 - related git repositories. Please contact Kate.Friedman@noaa.gov or Hang.Lei@noaa.gov if there is any VLAB - access issue and/or the individual code managers listed under item #6) below. Please follow the following - steps to install the package on WCOSS DELL - - 1) cd $NWROOTp3 - 2) mkdir gfs.v15.2.0 - 3) cd gfs.v15.2.0 - 4) git clone --recursive gerrit:global-workflow . - 5) git checkout feature/dev-v15.2 - 6) cd sorc - 7) ./checkout.sh - This script extracts the following GFS components from gerrit - MODEL -- tag nemsfv3_gfsv15.2.1 Jun.Wang@noaa.gov - GSI -- tag fv3da_gfs.v15.2.0 Russ.Treadon@noaa.gov - UPP -- tag ncep_post_gtg.v1.1.4 Wen.Meng@noaa.gov - WAFS -- tag gfs_wafs.v5.0.9 Yali.Mao@noaa.gov - - - 8) ./build_all.sh - *This script compiles all GFS components. Runtime output from the build for each package is written - to log files in directory logs. To build an individual program, for instance, gsi, use build_gsi.sh. - - 9) ./link_fv3gfs.sh nco dell - - * Note: 1) ecflow suite definition and scripts are saved in gfs.v15.2.0/ecflow/ecf - 2) ncep_post_gtg.v1.1.4 contains restricted GTG (Graphic Turbulence Guidance) code provided by - NCAR. Please do not post the GTG code in any public domain. - - - - -JOB CHANGES - - * See docs/Release_Notes.gfs_downstream.v15.2.0.txt - - -SORC CHANGES - - * sorc/ - * checkout.sh - update to check out the following tags - * NEMSfv3gfs nemsfv3_gfsv15.2.1 - * ProdGSI fv3da_gfsv15.2.0 - * EMC_post_gtg ncep_post_gtg.v1.1.4 - * EMC_gfs_wafs gfs_wafs.v5.0.9 - * sorc/global_chgres.fd/ - * sfcsub.F - bug fix. set logical variable (lmask) to be false for a land surface variable - * sorc/global_cycle.fd/ - * sfcsub.F - bug fix. set logical variable (lmask) to be false for a land surface variable - - -SCRIPT CHANGES - - * scripts/ - * run_gfsmos_master.sh.cray - remove reference to COMROOTp1 - * run_gfsmos_master.sh.dell - remove reference to COMROOTp1 - * additional script changes documented in docs/Release_Notes.gfs_downstream.v15.2.0.txt - - -PARM/CONFIG CHANGES - - * parm/ - * Two files are modified to set a - * parm/config/config.base.emc.dyn - set 10 day relaxaion time scale to SST climatology in GDAS forecast - * parm/config/config.base.nco.static - set 10 day relaxaion time scale to SST climatology in GDAS forecast - - * Two files were modified for adding three bufr stations: - * parm/product/bufr_stalist.meteo.gfs - * parm/product/bufr_stalist.meteo.gfs3 - - -FIX CHANGES - - * Files in fix/fix_gsi altered by GFS DA v15.2. See GFS DA v15.2 release notes - (sorc/gsi.fd/doc/Release_Notes.gfs_da.v15.2.0.txt) for details - - -PRODUCT CHANGES - - * see SCN - - -RESOURCE INFORMATION - - * Frequency of run - * No change from GFS v15.1 - - * Commonly used libraries, compiler, and modules are defined in gfs.v15.2.0/modulefiles. For nemsfv3gfs, gsi, upp, wafs - they maintain their own module files under gfs.v15.2.0/sorc/(fv3gfs gsi gfs_post global_wafs).fd/modulefiles - * GSI updated to use bufr/11.3.0 - - * Data retention time under $COMROOTp3 for GFS.v15.2 should be the same as GFS.v15.1. - - * Disk space: - * About 4 Gb more per gdas cycle due to additional observation data in gdas and enkf diagnostic files - - * Computational resources and run times: - * Due to processing additional observation data the runtime for the following jobs increases with - respect to GFS v15.1 as noted below - * gfs_analysis : about 30 seconds longer (27.4 minutes for GFS v15.1 -vs- 27.9 minutes for GFS v15.2) - * gdas_enkf_select_obs : about 1 minute longer (3.7 for GFS v15.1 -vs- 4.7 for GFS v15.2) - * gdas_enkf_innovate_obs_grp*: about 30 seconds longer (14.8 for GFS v15.1 -vs - 15.3 for GFS v15.2) - * gdas_enkf_update : about 20 seconds longer (6.4 for GFS v15.1 -vs- 6.7 for GFS v15.2) - - - -PRE-IMPLEMENTATION TESTING REQUIREMENTS - - * Which production jobs should be tested as part of this implementation? - * The entire GFS v15.2 package needs to be installed and tested. EMC can run the same date - and compare NCO and EMC output to confirm the EMC and NCO tests reproduce each other - - * Does this change require a 30-day evaluation? - * No. - - - * Suggested evaluators - * Please contact the following EMC staff for the indicated components - Fanglin.Yang@noaa.gov - MODEL - Russ.Treadon@noaa.gov - DA - Wen.Meng@noaa.gov - UPP - Yali.Mao@noaa.gov - WAFS - Boi.Vuong@noaa.gov - downstream products - - -DISSEMINATION INFORMATION - - * Where should this output be sent? - * No change from GFS v15.1 - - * Who are the users? - * No change from GFS v15.1 - - * Which output files should be transferred from PROD WCOSS to DEV WCOSS? - * No change from GFS v15.1 - - * Directory changes - * No change from GFS v15.1 - - * File changes. - * See SCN - - -HPSS ARCHIVE - - No change from GFS v15.1 - - - -JOB DEPENDENCIES & FLOW DIAGRAM - * No change from GFS v15.1 - - -=========== -Prepared by -Fanglin.Yang@noaa -Russ.Treadon@noaa.gov -Boi.Vuong@noaa.gov -Wen.Meng@noaa.gov - - diff --git a/docs/Release_Notes.gfs.v15.2.2.txt b/docs/Release_Notes.gfs.v15.2.2.txt deleted file mode 100644 index c1978fcf23..0000000000 --- a/docs/Release_Notes.gfs.v15.2.2.txt +++ /dev/null @@ -1,269 +0,0 @@ -GFS v15.2.2 - updated by SPA on 11/13/2019 - -Fixed missing gempak pathes in GFS_GEMPAK_NCDC_UPAPGIF job that caused the black/white background switch in the Fax chart. - -Change: -jobs/JGFS_GEMPAK_NCDC_UPAPGIF - - -GFS v15.2.0 RELEASE NOTES - - -PRELUDE (taken from GFS v15.2.0 SCN) - - GFS version 15.1 was implemented into operation at the 12Z cycle on June 12, 2019. It was the first - GFS implementation with the finite­ volume cubed-sphere (FV3) dynamical core as the Weather Service’s - Next Generation Global Prediction System (NGGPS). - - GFS version 15.2 is a minor upgrade. The major change to the system is to ingest new and replacement - satellite observations for data assimilation. It also contains a few other minor upgrades and bug fixes. - - 1) Assimilate new satellite observations - * GOES-17 AMVs - * GOES-17 has already replaced GOES-15 as the operational GOES-West satellite. Distribution of - GOES-15 products is expected to cease around December 2019 and active assimilation of GOES-17 - AMVs is required to prevent a gap in data coverage. - * Metop-C AMSU and MHS - * Metop-C is now the primary satellite in the 9:30 AM orbit. Assimilation of these data provide - additional impact as well as adding robustness to the system. - * KOMPSAT-5 (GPS-RO) - * Provides additional robustness to the system. - * Addition changes are made to VIIRS AMV ingest code to allow continued use after an expected change - to the BUFR format. - - 2) Assimilate buoyb sea-surface temperature (SST) data - TAC2BUFR changes in the buoy network resulted in a reduction of available SST measurements from buoys - to 10% or less of expected levels. Obsproc and GSI changes were required to restore data counts to - previous levels. - - 3) New product: Graphical Turbulence Guidance (GTG) - Global Turbulence product generated using NCAR GTG algorithm will start being disseminated on NOMADS. - The product will be available 3 hourly from F06 to F36 and horizontal resolution will be a quarter - degree. gfs.t{CC}Z.gtg.0p25.grb2f{HHH} - - 4) Update the Unified Post Processor(UPP) to address a mask issue of several land surface fields over - water bodies in grib2 products. - - This update will make GFS.v15.2 p-grid products to be more consistent with GFS.v14 products, and - remove spurious soil moisture along coastlines. These land surface fields include Soil Moisture, - Soil Temperature, Liquid Volumetric Soil Moisture, WEASD, Snow Depth, Water Runoff, GFLUX Ground - Heat Flux, WILT Wilting Point, and FLDCP Field Capacity. - - Affected product files are: - gfs.t{CC}Z.pgrb2.0p25.F{HHH} - gfs.t{CC}Z.pgrb2b.0p25.g{HHH} - gfs.t{CC}Z.pgrb2.0p50.F{HHH} - gfs.t{CC}Z.pgrb2b.0p50.g{HHH} - gfs.t{CC}Z.pgrb2.1p00.F{HHH} - gfs.t{CC}Z.pgrb2b.1p00.g{HHH} - gfs.t{CC}Z.sfluxgrbf{HHH}.grib2 - Where CC is cycle for 00, 06, 12, 18 UTC, and HHH is forecast hour. - - 5) The vessel icing program uses OISST as input. OISST will not be ported from WCOSS Phase 1 to Phase 3 - after Phase 1 is decommissioned in 2020. A decision was made to move the vessel icing program - within the Unified Post Processor(UPP) and use GFS forecast skin temperature as input. Current vessel - icing product in operation (sice.tCCz.siceg) has a 1-deg resolution and is disseminated to the public at - - ftp://ftp.ncep.noaa.gov/pub/data/nccf/com/omb/prod/sice.yyyymmdd/ - - New vessel icing product will be included as a variable (ICEG) in GFS p-grid products gfs.tCCz.pgrb2.xpxx.fxxx - and gfs.tCCz.pgrb2b.xpxx.fxxx at 0.25, 0.5, and 1.0-deg resolutions, and be disseminated to the public at - - ftp://ftp.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.yyyymmdd/ - - 6) Added three stations to station time series bufr soundings: - - 006011 62.02N 6.76W TOR 00 Thorshvan, Denmark 54 Usr Rqst 4-19 - 999913 15.51S 128.15E WYN 00 Wyndham aerodrome Australia 4 Usr Rqst 1-19 - 999914 57.48N 7.36W EGPL 00 Benbecula, Scotland, UK 6 Usr Rqst 1-19 - - The affected output files are: - gfs_yyyymmddhh.sfc - gfs_yyyymmddhh.snd - gfs.tCCz.bufrsnd.tar.gz - - Three additional files for the stations: - bufr.006011.yyyymmddhh - bufr.999913.yyyymmddhh - bufr.999914.yyyymmddhh - - 7) Reduction of water temperature biases in small lakes. - For small lakes adequate observations do not always exit to support the analysis of lake surface - temperature, often leading to significant departures from both the climatology and real-time observation. - Two changes were introduced to ensure that lake temperatures do not deviate from the climatology when - observations are not available. The first change is to replace a surface mask file at 0.5-degree - resolution with the one on the T1534 Gaussian grid (~13km) to prevent unrealistic SST climatology - from being used for updating the background of the near sea-surface temperature analysis over small - water bodies, such as those in the Great Salt Lake. The second change is to reduce the relaxation - time scale of the SST to climatology in GDAS forecast step from 90 days to 10 days. - - 8) Changes to NOAAPORT/SBN - Product Removals - * GADS FAX product which contains tropical surface analysis in TIF format with G4 compression. - - - -IMPLEMENTATION INSTRUCTIONS - - * NOAA Vlab GIT is used to manage GFS.v15.2 code. The SPA(s) handling the GFS.v15.2 implementation need to have - permission to clone Vlab gerrit repositories. So far Wojciech Cencek has been given access to all GFS.v15.2 - related git repositories. Please contact Kate.Friedman@noaa.gov or Hang.Lei@noaa.gov if there is any VLAB - access issue and/or the individual code managers listed under item #6) below. Please follow the following - steps to install the package on WCOSS DELL - - 1) cd $NWROOTp3 - 2) mkdir gfs.v15.2.0 - 3) cd gfs.v15.2.0 - 4) git clone --recursive gerrit:global-workflow . - 5) git checkout feature/dev-v15.2 - 6) cd sorc - 7) ./checkout.sh - This script extracts the following GFS components from gerrit - MODEL -- tag nemsfv3_gfsv15.2.1 Jun.Wang@noaa.gov - GSI -- tag fv3da_gfs.v15.2.0 Russ.Treadon@noaa.gov - UPP -- tag ncep_post_gtg.v1.1.4 Wen.Meng@noaa.gov - WAFS -- tag gfs_wafs.v5.0.9 Yali.Mao@noaa.gov - - - 8) ./build_all.sh - *This script compiles all GFS components. Runtime output from the build for each package is written - to log files in directory logs. To build an individual program, for instance, gsi, use build_gsi.sh. - - 9) ./link_fv3gfs.sh nco dell - - * Note: 1) ecflow suite definition and scripts are saved in gfs.v15.2.0/ecflow/ecf - 2) ncep_post_gtg.v1.1.4 contains restricted GTG (Graphic Turbulence Guidance) code provided by - NCAR. Please do not post the GTG code in any public domain. - - - - -JOB CHANGES - - * See docs/Release_Notes.gfs_downstream.v15.2.0.txt - - -SORC CHANGES - - * sorc/ - * checkout.sh - update to check out the following tags - * NEMSfv3gfs nemsfv3_gfsv15.2.1 - * ProdGSI fv3da_gfsv15.2.0 - * EMC_post_gtg ncep_post_gtg.v1.1.4 - * EMC_gfs_wafs gfs_wafs.v5.0.9 - * sorc/global_chgres.fd/ - * sfcsub.F - bug fix. set logical variable (lmask) to be false for a land surface variable - * sorc/global_cycle.fd/ - * sfcsub.F - bug fix. set logical variable (lmask) to be false for a land surface variable - - -SCRIPT CHANGES - - * scripts/ - * run_gfsmos_master.sh.cray - remove reference to COMROOTp1 - * run_gfsmos_master.sh.dell - remove reference to COMROOTp1 - * additional script changes documented in docs/Release_Notes.gfs_downstream.v15.2.0.txt - - -PARM/CONFIG CHANGES - - * parm/ - * Two files are modified to set a - * parm/config/config.base.emc.dyn - set 10 day relaxaion time scale to SST climatology in GDAS forecast - * parm/config/config.base.nco.static - set 10 day relaxaion time scale to SST climatology in GDAS forecast - - * Two files were modified for adding three bufr stations: - * parm/product/bufr_stalist.meteo.gfs - * parm/product/bufr_stalist.meteo.gfs3 - - -FIX CHANGES - - * Files in fix/fix_gsi altered by GFS DA v15.2. See GFS DA v15.2 release notes - (sorc/gsi.fd/doc/Release_Notes.gfs_da.v15.2.0.txt) for details - - -PRODUCT CHANGES - - * see SCN - - -RESOURCE INFORMATION - - * Frequency of run - * No change from GFS v15.1 - - * Commonly used libraries, compiler, and modules are defined in gfs.v15.2.0/modulefiles. For nemsfv3gfs, gsi, upp, wafs - they maintain their own module files under gfs.v15.2.0/sorc/(fv3gfs gsi gfs_post global_wafs).fd/modulefiles - * GSI updated to use bufr/11.3.0 - - * Data retention time under $COMROOTp3 for GFS.v15.2 should be the same as GFS.v15.1. - - * Disk space: - * About 4 Gb more per gdas cycle due to additional observation data in gdas and enkf diagnostic files - - * Computational resources and run times: - * Due to processing additional observation data the runtime for the following jobs increases with - respect to GFS v15.1 as noted below - * gfs_analysis : about 30 seconds longer (27.4 minutes for GFS v15.1 -vs- 27.9 minutes for GFS v15.2) - * gdas_enkf_select_obs : about 1 minute longer (3.7 for GFS v15.1 -vs- 4.7 for GFS v15.2) - * gdas_enkf_innovate_obs_grp*: about 30 seconds longer (14.8 for GFS v15.1 -vs - 15.3 for GFS v15.2) - * gdas_enkf_update : about 20 seconds longer (6.4 for GFS v15.1 -vs- 6.7 for GFS v15.2) - - - -PRE-IMPLEMENTATION TESTING REQUIREMENTS - - * Which production jobs should be tested as part of this implementation? - * The entire GFS v15.2 package needs to be installed and tested. EMC can run the same date - and compare NCO and EMC output to confirm the EMC and NCO tests reproduce each other - - * Does this change require a 30-day evaluation? - * No. - - - * Suggested evaluators - * Please contact the following EMC staff for the indicated components - Fanglin.Yang@noaa.gov - MODEL - Russ.Treadon@noaa.gov - DA - Wen.Meng@noaa.gov - UPP - Yali.Mao@noaa.gov - WAFS - Boi.Vuong@noaa.gov - downstream products - - -DISSEMINATION INFORMATION - - * Where should this output be sent? - * No change from GFS v15.1 - - * Who are the users? - * No change from GFS v15.1 - - * Which output files should be transferred from PROD WCOSS to DEV WCOSS? - * No change from GFS v15.1 - - * Directory changes - * No change from GFS v15.1 - - * File changes. - * See SCN - - -HPSS ARCHIVE - - No change from GFS v15.1 - - - -JOB DEPENDENCIES & FLOW DIAGRAM - * No change from GFS v15.1 - - -=========== -Prepared by -Fanglin.Yang@noaa -Russ.Treadon@noaa.gov -Boi.Vuong@noaa.gov -Wen.Meng@noaa.gov - - diff --git a/docs/Release_Notes.gfs_downstream.v16.0.0.txt b/docs/Release_Notes.gfs_downstream.v16.0.0.txt deleted file mode 100644 index 397eaa7897..0000000000 --- a/docs/Release_Notes.gfs_downstream.v16.0.0.txt +++ /dev/null @@ -1,115 +0,0 @@ -RELEASE NOTES: GFS.v16.0.0 downstream products - released March 31, 2020 (tentative date) - -CODE CHANGES - No code change - -AWIPS CHANGES - Removed field "5WAVH" in All parm crads for AWIPS 20km and 1.0 deg (UPP planed to remove in GFS v16.0) - -GEMPAK CHANGES - Removed simulated GOES 12/13 in GEMPAK and PGRB2 - Added simulated GOES 16/17 in GEMPAK and PGRB2 in LAT/LON 0.25 deg - -JOB CHANGES - - Removed JGDAS_BULLS_NAVY - to be retired in GFS V16.0 - - Removed JGDAS_TROPC - Rteired in GFS v15.2.0 - - The remain GFS downstream jobs are following: - - JGDAS_GEMPAK - - JGDAS_GEMPAK_META_NCDC - - JGFS_AWIPS_G2 - - JGFS_FBWIND - - JGFS_GEMPAK - - JGFS_GEMPAK_META - - JGFS_PGRB2_SPEC_GEMPAK - - JGFS_AWIPS_20KM_1P0DEG - - JGFS_GEMPAK_NCDC_UPAPGIF - - JGFS_PGRB2_SPEC_NPOESS - -SCRIPTS CHANGES - The following script have been removed from GFS v16.0.0 - - exgfs_grib_awips_g2.sh.ecf (retired in June 12, 2019) - - exgdas_bulls_navy.sh.ecf (Plan to retire in GFSS v16.0.0) GDAS and NAVY bulletins - - Removed WINTEMV bulltin in script exgfs_fbwind.sh (WINTEMV bulletin plan to retire in GFS v16.0.0) - -PARM/wmo - - Removed parm in grid 160,161,213,254,225 -----> Retired in GFS v15.2.7 - --DRIVER - All Job cards have same setting for testing on DELL with real-time GFS v15.2 data. - ( An example: JGFS_GEMPAK ) - # LSBATCH: User input - #BSUB -J gfs_gempak_00 - #BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_gempak_00.o%J - #BSUB -q debug - #BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output - #BSUB -W 00:30 - #BSUB -P GFS-DEV - #BSUB -n 24 # 24 tasks - #BSUB -R span[ptile=12] # 12 task per node - #BSUB -R affinity[core(1):distribute=balance] # using 12 cores on node and bind to 1 - # core per task and distribute across sockets - - #################################### - ## Load the GRIB Utilities modules - #################################### - module load EnvVars/1.0.2 - module load ips/18.0.1.163 - module load CFP/2.0.1 - module load impi/18.0.1 - module load lsf/10.1 - module load prod_util/1.1.4 - module load prod_envir/1.0.3 - module load grib_util/1.1.0 - ########################################### - # Now set up GEMPAK/NTRANS environment - ########################################### - module load gempak/7.3.1 - module list - -FV3 GFS DRIVER: - All drivers are used to test GFS downtream jobs in gfs.v16.0.0/driver/product/run_*_dell.sh_xx where is xx is cycle - -The followig jobs, scripts, parm have been modified to meet NCO - EE2 implementation standards. -JOB CHANGES (no changes) - JGDAS_GEMPAK - JGDAS_GEMPAK_META_NCDC - JGFS_AWIPS_20KM_1P0DEG - JGFS_AWIPS_G2 - JGFS_FBWIND - JGFS_GEMPAK - JGFS_GEMPAK_META - JGFS_GEMPAK_NCDC_UPAPGIF - JGFS_PGRB2_SPEC_GEMPAK - JGFS_PGRB2_SPEC_NPOESS - -SCRIPTS CHANGES - exgdas_nawips.sh - exgempak_gdas_gif_ncdc.sh - exgempak_gfs_gif_ncdc_skew_t.sh - exgfs_awips_20km_1p0deg.sh - exgfs_fbwind.sh - exgfs_gempak_meta.sh - exgfs_grib_awips_g2.sh - exgfs_grib_awips.sh - exgfs_nawips.sh - exglobal_grib2_special_npoess.sh - exgoes_nawips.sh -removed dependencies for gempak on phase 1 - exnawips.sh -removed dependencies for gempak on phase 1 - -PARM CHANGES - Removed 5WAVH in parm cards for AWIPS products in GFS v16.0.0 - (NCEP POST stopped producing 5WAVH (plan to retire) in GFS v16.0.0 - -USH CHANGES - No changes - -GEMPAK CHANGES - - Added nagrib.tbl file in gempak's FIX directory - -ECFLOW CHANGES - -Removed GFS FAX, GFS FAX WAFS and GDAS_TROPC in ecflow suite definition and scripts - -=========== -Prepared by -Boi.Vuong@noaa.gov diff --git a/docs/archive/README_bufr b/docs/archive/README_bufr index 4967d63e10..17067531cc 100644 --- a/docs/archive/README_bufr +++ b/docs/archive/README_bufr @@ -1,11 +1,11 @@ changes for 2017GFS upgrades Bufr soundings Bufr sounding subversion log: SURGE-slogin1 > svn status -M jobs/JGFS_POSTSND +M jobs/JGFS_ATMOS_POSTSND A parm/bufr_gfs_class1.tbl A parm/bufr_stalist.meteo.gfs D parm/bufr_stalist.meteo.gfs3.update -M scripts/exgfs_postsnd.sh +M scripts/exgfs_atmos_postsnd.sh M sorc/build_gfs_bufrsnd.sh M sorc/gfs_bufr.fd/buff.f M sorc/gfs_bufr.fd/gfsbufr.f @@ -16,7 +16,7 @@ M ush/gfs_bufr.sh M ush/gfs_sndp.sh ------------------------------------------------------------- -M jobs/JGFS_POSTSND +M jobs/JGFS_ATMOS_POSTSND change aprun parameters to speed up the wall time. ------------------------------------------------------------- A parm/bufr_gfs_class1.tbl @@ -29,7 +29,7 @@ D parm/bufr_stalist.meteo.gfs3.update parm/bufr_stalist.meteo.gfs3.update is deleted for it is no longer needed. The two files names have been changed by removing "3" in the file names. ------------------------------------------------------------- -M scripts/exgfs_postsnd.sh +M scripts/exgfs_atmos_postsnd.sh M sorc/gfs_bufr.fd/buff.f M sorc/gfs_bufr.fd/gfsbufr.f M sorc/gfs_bufr.fd/meteorg.f diff --git a/docs/doxygen/compile b/docs/doxygen/compile index e5f95b673a..1273edab98 100755 --- a/docs/doxygen/compile +++ b/docs/doxygen/compile @@ -1,20 +1,22 @@ -#!/bin/ksh -x +#!/bin/bash -machine=${1:-${machine:-"WCOSS_C"}} +set -ex + +machine=${1:-${machine:-"HERA"}} machine=$(echo $machine | tr '[a-z]' '[A-Z]') if [ $machine = "HERA" ]; then doxygen=/usr/bin/doxygen -elif [ $machine = "WCOSS_C" ]; then - doxygen=/gpfs/hps3/emc/hwrf/noscrub/soft/doxygen-1.8.10/bin/doxygen -elif [ $machine = "WCOSS" ]; then - doxygen=/hwrf/noscrub/soft/doxygen-1.8.10/bin/doxygen +elif [ $machine = "ORION" ]; then + doxygen=/bin/doxygen elif [ $machine = "JET" ]; then doxygen=/contrib/doxygen/1.8.10/bin/doxygen else - echo "machine $machine is unrecognized, ABORT!" - echo "try system doxygen" - doxygen=`which doxygen` + echo "machine $machine is unrecognized!" + echo "trying system doxygen" + doxygen=$(which doxygen) + rc=$? + [[ $rc -ne 0 ]] && (echo "doxygen not found, ABORT!"; exit 1) fi $doxygen diff --git a/docs/doxygen/mainpage.h b/docs/doxygen/mainpage.h index ac26cd861c..40e8e6f946 100644 --- a/docs/doxygen/mainpage.h +++ b/docs/doxygen/mainpage.h @@ -21,7 +21,7 @@ This is a very much a work in progress and any issues should be reported back an To setup an experiment, a python script \c setup_expt.py (located in \c fv3gfs/ush) can be used: $> setup_expt.py -h - usage: setup_expt.py [-h] [--machine {HERA,WCOSS_C}] --pslot PSLOT + usage: setup_expt.py [-h] --pslot PSLOT [--configdir CONFIGDIR] [--idate IDATE] [--icsdir ICSDIR] [--resdet RESDET] [--resens RESENS] [--comrot COMROT] [--expdir EXPDIR] [--nens NENS] [--cdump CDUMP] @@ -32,8 +32,6 @@ To setup an experiment, a python script \c setup_expt.py (located in \ optional arguments: -h, --help show this help message and exit - --machine machine name - (default: WCOSS_C) --pslot parallel experiment name [REQUIRED] (default: None) --configdir full path to directory containing the config files @@ -58,8 +56,8 @@ To setup an experiment, a python script \c setup_expt.py (located in \ The above script creates directories \c EXPDIR and \c COMROT. It will make links for initial conditions from a location provided via the \c --icsdir argument for a chosen resolution for the control \c --resdet and the ensemble \c --resens. Experiment name is controlled by the input argument \c --pslot. The script will ask user input in case any of the directories already exist. It will copy experiment configuration files into the \c EXPDIR from \c CONFIGDIR. Sample initial conditions for a few resolutions are available at:
-Theia: /scratch4/NCEPDEV/da/noscrub/Rahul.Mahajan/ICS
-WCOSS Cray: /gpfs/hps/emc/da/noscrub/Rahul.Mahajan/ICS +Hera: TODO: /path/here/for/initial/conditions
+Orion: TODO: /path/here/for/initial/conditions
Next step is for the user to go through the individual config files (atleast \c config.base) and customize the experiment configuration based on user needs. A stock configuration will be provided at a later stage, but it is imperative that the user understand the steps involved in the system. diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 0000000000..6247f7e231 --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/note_fixfield.txt b/docs/note_fixfield.txt index 292947353c..a7a4001561 100644 --- a/docs/note_fixfield.txt +++ b/docs/note_fixfield.txt @@ -2,9 +2,10 @@ For EMC, the fix fields for running the model are not included in git repository. They are saved locally on all platforms -Venus/Mars: /gpfs/dell2/emc/modeling/noscrub/emc.glopara/git/fv3gfs/fix -Surge/Luna: /gpfs/hps3/emc/global/noscrub/emc.glopara/git/fv3gfs/fix -Hera: /scratch1/NCEPDEV/global/glopara/fix +Hera: /scratch1/NCEPDEV/global/glopara/fix +Orion/Hercules: /work/noaa/global/glopara/fix +Jet: /mnt/lfs4/HFIP/hfv3gfs/glopara/git/fv3gfs/fix +S4: /data/prod/glopara/fix ------------------------------------------------------------------------------ 09/28/2018 diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 0000000000..39372ec99d --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,5 @@ +sphinx +sphinx_rtd_theme +sphinxcontrib-bibtex +sphinx-autobuild +sphinx-copybutton diff --git a/docs/source/_static/GFS_v16_flowchart.png b/docs/source/_static/GFS_v16_flowchart.png new file mode 100644 index 0000000000..963c915768 Binary files /dev/null and b/docs/source/_static/GFS_v16_flowchart.png differ diff --git a/docs/source/_static/custom.css b/docs/source/_static/custom.css new file mode 100644 index 0000000000..85a59fca39 --- /dev/null +++ b/docs/source/_static/custom.css @@ -0,0 +1,19 @@ +@import "default.css"; + +div.admonition-todo { +border-top: 2px solid red; +border-bottom: 2px solid red; +border-left: 2px solid red; +border-right: 2px solid red; +background-color: #ff6347 +} + +p.admonition-title { + display: offline; +} + +/*p.first.admonition-title { +background-color: #aa6347; +width: 100%; +} +*/ diff --git a/docs/source/_static/fv3_rocoto_view.png b/docs/source/_static/fv3_rocoto_view.png new file mode 100644 index 0000000000..02265122fe Binary files /dev/null and b/docs/source/_static/fv3_rocoto_view.png differ diff --git a/docs/source/_static/noaacsp_cluster_1.png b/docs/source/_static/noaacsp_cluster_1.png new file mode 100644 index 0000000000..3fdc0e68b8 Binary files /dev/null and b/docs/source/_static/noaacsp_cluster_1.png differ diff --git a/docs/source/_static/noaacsp_cluster_2.png b/docs/source/_static/noaacsp_cluster_2.png new file mode 100644 index 0000000000..0fc3b2896d Binary files /dev/null and b/docs/source/_static/noaacsp_cluster_2.png differ diff --git a/docs/source/_static/noaacsp_cluster_3.png b/docs/source/_static/noaacsp_cluster_3.png new file mode 100644 index 0000000000..bf3991b7ff Binary files /dev/null and b/docs/source/_static/noaacsp_cluster_3.png differ diff --git a/docs/source/_static/noaacsp_cluster_4.png b/docs/source/_static/noaacsp_cluster_4.png new file mode 100644 index 0000000000..9294d40bbe Binary files /dev/null and b/docs/source/_static/noaacsp_cluster_4.png differ diff --git a/docs/source/_static/noaacsp_cluster_5.png b/docs/source/_static/noaacsp_cluster_5.png new file mode 100644 index 0000000000..9fd7a96e40 Binary files /dev/null and b/docs/source/_static/noaacsp_cluster_5.png differ diff --git a/docs/source/_static/noaacsp_cluster_6.png b/docs/source/_static/noaacsp_cluster_6.png new file mode 100644 index 0000000000..79287bc1e7 Binary files /dev/null and b/docs/source/_static/noaacsp_cluster_6.png differ diff --git a/docs/source/_static/noaacsp_instance_1.png b/docs/source/_static/noaacsp_instance_1.png new file mode 100644 index 0000000000..0e06fe345b Binary files /dev/null and b/docs/source/_static/noaacsp_instance_1.png differ diff --git a/docs/source/_static/noaacsp_instance_2.png b/docs/source/_static/noaacsp_instance_2.png new file mode 100644 index 0000000000..7c74d32853 Binary files /dev/null and b/docs/source/_static/noaacsp_instance_2.png differ diff --git a/docs/source/_static/noaacsp_instance_3.png b/docs/source/_static/noaacsp_instance_3.png new file mode 100644 index 0000000000..f1031fb576 Binary files /dev/null and b/docs/source/_static/noaacsp_instance_3.png differ diff --git a/docs/source/_static/noaacsp_instance_4.png b/docs/source/_static/noaacsp_instance_4.png new file mode 100644 index 0000000000..f4aedb27d1 Binary files /dev/null and b/docs/source/_static/noaacsp_instance_4.png differ diff --git a/docs/source/_static/noaacsp_login.png b/docs/source/_static/noaacsp_login.png new file mode 100644 index 0000000000..fd2ea73144 Binary files /dev/null and b/docs/source/_static/noaacsp_login.png differ diff --git a/docs/source/_static/noaacsp_using_1.png b/docs/source/_static/noaacsp_using_1.png new file mode 100644 index 0000000000..68550db050 Binary files /dev/null and b/docs/source/_static/noaacsp_using_1.png differ diff --git a/docs/source/_static/noaacsp_using_2.png b/docs/source/_static/noaacsp_using_2.png new file mode 100644 index 0000000000..4d1899f8f5 Binary files /dev/null and b/docs/source/_static/noaacsp_using_2.png differ diff --git a/docs/source/_static/theme_overrides.css b/docs/source/_static/theme_overrides.css new file mode 100644 index 0000000000..9713e89ab2 --- /dev/null +++ b/docs/source/_static/theme_overrides.css @@ -0,0 +1,9 @@ +/* !important prevents the common CSS stylesheets from overriding this CSS since on RTD they are loaded after this stylesheet */ + +.wy-nav-content { + max-width: 100% !important; +} + +.wy-table-responsive table td { + white-space: normal !important; +} diff --git a/docs/source/clone.rst b/docs/source/clone.rst new file mode 100644 index 0000000000..c098a34f7e --- /dev/null +++ b/docs/source/clone.rst @@ -0,0 +1,160 @@ +=============================== +Clone and build Global Workflow +=============================== + +^^^^^^^^^^^^^^^^^^ +Quick Instructions +^^^^^^^^^^^^^^^^^^ + +Quick clone/build/link instructions (more detailed instructions below). + +.. note:: + Here we are making the assumption that you are using the workflow to run an experiment and so are working from the authoritative repository. If you are using a development branch then follow the instructions in :doc:`development.rst`. Once you do that you can follow the instructions here with the only difference being the repository/fork you are cloning from. + +Clone the `global-workflow` and `cd` into the `sorc` directory: + +:: + + git clone https://github.com/NOAA-EMC/global-workflow + cd global-workflow/sorc + +For forecast-only (coupled or uncoupled) checkout the components: + +:: + + ./checkout.sh + +For cycled (w/ data assimilation) use the `-g` option during checkout: + +:: + + ./checkout.sh -g + +For coupled cycling (include new UFSDA) use the `-gu` options during checkout: + +[Currently only available on Hera, Orion, and Hercules] + +:: + + ./checkout.sh -gu + + +Build workflow components and link workflow artifacts such as executables, etc. + +:: + + ./build_all.sh + ./link_workflow.sh + + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Clone workflow and component repositories +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +******** +Workflow +******** + +There are several ways to clone repositories from GitHub. Below we describe how to clone the global-workflow using the `https` method. + +:: + + git clone https://github.com/NOAA-EMC/global-workflow + +Check what you just cloned (by default you will have only the `develop` branch): + +:: + + cd global-workflow + git branch + * develop + +You now have a cloned copy of the global-workflow git repository. To checkout a branch or tag in your clone: + +:: + + git checkout BRANCH_NAME + +.. note:: + Branch must already exist. If it does not you need to make a new branch using the ``-b`` flag: + +:: + + git checkout -b BRANCH_NAME + +The ``checkout`` command will checkout BRANCH_NAME and switch your clone to that branch. Example: + +:: + + git checkout my_branch + git branch + * my_branch + develop + +********** +Components +********** + +Once you have cloned the workflow repository it's time to checkout/clone its components. The components will be checked out under the ``/sorc`` folder via a script called checkout.sh. Run the script with no arguments for forecast-only: + +:: + + cd sorc + ./checkout.sh + +Or with the ``-g`` switch to include data assimilation (GSI) for cycling: + +:: + + cd sorc + ./checkout.sh -g + +Or also with the ``-u`` swtich to include coupled DA (via UFSDA): +[Currently only available on Hera, Orion, and Hercules] + +:: + + cd sorc + ./checkout.sh -gu + +Each component cloned via checkout.sh will have a log (``/sorc/logs/checkout-COMPONENT.log``). Check the screen output and logs for clone errors. + +^^^^^^^^^^^^^^^^ +Build components +^^^^^^^^^^^^^^^^ + +Under the ``/sorc`` folder is a script to build all components called ``build_all.sh``. After running checkout.sh run this script to build all components codes: + +:: + + ./build_all.sh [-a UFS_app][-c build_config][-h][-v] + -a UFS_app: + Build a specific UFS app instead of the default + -c build_config: + Selectively build based on the provided config instead of the default config + -h: + Print usage message and exit + -v: + Run all scripts in verbose mode + +A partial build option is also available via two methods: + + a) modify gfs_build.cfg config file to disable/enable particular builds and then rerun build_all.sh + + b) run individual build scripts also available in ``/sorc`` folder for each component or group of codes + +^^^^^^^^^^^^^^^ +Link components +^^^^^^^^^^^^^^^ + +At runtime the global-workflow needs all pieces in place within the main superstructure. To establish this a link script is run to create symlinks from the top level folders down to component files checked out in ``/sorc`` folders. + +After running the checkout and build scripts run the link script: + +:: + + ./link_workflow.sh [-o] + +Where: + ``-o``: Run in operations (NCO) mode. This creates copies instead of using symlinks and is generally only used by NCO during installation into production. + diff --git a/docs/source/components.rst b/docs/source/components.rst new file mode 100644 index 0000000000..4d2619e44e --- /dev/null +++ b/docs/source/components.rst @@ -0,0 +1,104 @@ +########################### +Global Workflow Components +########################### + +The global-workflow is a combination of several components working together to prepare, analyze, produce, and post-process forecast data. + +The major components of the system are: + +* Workflow +* Pre-processing +* Analysis +* Forecast +* Post-processing +* Verification + +The Global Workflow repository contains the workflow and script layers. After running the checkout script, the code and additional offline scripts for the analysis, forecast, and post-processing components will be present. Any non-workflow component is known as a sub-module. All of the sub-modules of the system reside in their respective repositories on GitHub. The global-workflow sub-modules are obtained by running the checkout script found under the /sorc folder. + +====================== +Component repositories +====================== + +Components checked out via sorc/checkout.sh: + +* **GFS UTILS** (https://github.com/ufs-community/gfs_utils): Utility codes needed by Global Workflow to run the GFS configuration +* **UFS-Weather-Model** (https://github.com/ufs-community/ufs-weather-model): This is the core model used by the Global-Workflow to provide forecasts. The UFS-weather-model repository is an umbrella repository consisting of cooupled component earth systeme that are all checked out when we check out the code at the top level of the repoitory +* **GSI** (https://github.com/NOAA-EMC/GSI): This is the core code base for atmospheric Data Assimilation +* **GSI UTILS** (https://github.com/NOAA-EMC/GSI-Utils): Utility codes needed by GSI to create analysis +* **GSI Monitor** (https://github.com/NOAA-EMC/GSI-Monitor): These tools monitor the GSI package's data assimilation, detecting and reporting missing data sources, low observation counts, and high penalty values +* **GDAS** (https://github.com/NOAA-EMC/GDASApp): Jedi based Data Assimilation system. This system is currently being developed for marine Data Assimilation and in time will replace GSI for atmospheric data assimilation as well +* **UFS UTILS** (https://github.com/ufs-community/UFS_UTILS): Utility codes needed for UFS-weather-model +* **Verif global** (https://github.com/NOAA-EMC/EMC_verif-global): Verification package to evaluate GFS parallels. It uses MET and METplus. At this moment the verification package is limited to providing atmospheric metrics only + +.. note:: + When running the system in forecast-only mode the Data Assimilation components are not needed and are hence not checked out. + +===================== +External dependencies +===================== + +^^^^^^^^^ +Libraries +^^^^^^^^^ + +All the libraries that are needed to run the end to end Global Workflow are built using a package manager. Currently these are served via HPC-STACK but will soon be available via SPACK-STACK. These libraries are already available on supported NOAA HPC platforms + +Find information on official installations of HPC-STACK here: + +https://github.com/NOAA-EMC/hpc-stack/wiki/Official-Installations + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Observation data (OBSPROC/prep) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +**** +Data +**** + +Observation data, also known as dump data, is prepared in production and then archived in a global dump archive (GDA) for use by users when running cycled experiments. The GDA (identified as ``$DMPDIR`` in the workflow) is available on supported platforms and the workflow system knows where to find the data. + +* Hera: /scratch1/NCEPDEV/global/glopara/dump +* Orion/Hercules: /work/noaa/rstprod/dump +* Jet: /mnt/lfs4/HFIP/hfv3gfs/glopara/dump +* WCOSS2: /lfs/h2/emc/global/noscrub/emc.global/dump +* S4: /data/prod/glopara/dump + +----------------------------- +Global Dump Archive Structure +----------------------------- + +The global dump archive (GDA) mimics the structure of its production source: ``DMPDIR/CDUMP.PDY/[CC/atmos/]FILES`` + +The ``CDUMP`` is either gdas, gfs, or rtofs. All three contain production output for each day (``PDY``). The gdas and gfs folders are further broken into cycle (``CC``) and component (``atmos``). + +The GDA also contains special versions of some datasets and experimental data that is being evaluated ahead of implementation into production. The following subfolder suffixes exist: + ++--------+------------------------------------------------------------------------------------------------------+ +| SUFFIX | WHAT | ++========+======================================================================================================+ +| nr | Non-restricted versions of restricted files in production. Produced in production. Restriced data is | +| | fully stripped from files. These files remain as is. | ++--------+------------------------------------------------------------------------------------------------------+ +| ur | Un-restricted versions of restricted files in production. Produced and archived on a 48hrs delay. | +| | Some restricted datasets are unrestricted. Data amounts: restricted > un-restricted > non-restricted | ++--------+------------------------------------------------------------------------------------------------------+ +| x | Experimental global datasets being evaluated for production. Dates and types vary depending on | +| | upcoming global upgrades. | ++--------+------------------------------------------------------------------------------------------------------+ +| y | Similar to "x" but only used when there is a duplicate experimental file in the x subfolder with the | +| | same name. These files will be different from both the production versions (if that exists already) | +| | and the x versions. This suffix is rarely used. | ++--------+------------------------------------------------------------------------------------------------------+ +| p | Pre-production copy of full dump dataset, as produced by NCO during final 30-day parallel ahead of | +| | implementation. Not always archived. | ++--------+------------------------------------------------------------------------------------------------------+ + +*************** +Data processing +*************** + +Upstream of the global-workflow is the collection, quality control, and packaging of observed weather. The handling of that data is done by the OBSPROC group codes and scripts. The global-workflow uses two packages from OBSPROC to run its prep step to prepare observation (dump) data for use by the analysis system: + +1. https://github.com/NOAA-EMC/obsproc +2. https://github.com/NOAA-EMC/prepobs + +Package versions and locations on supported platforms are set in the global-workflow system configs, modulefiles, and version files. diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 0000000000..89526d9f69 --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,121 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys +sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = 'Global-workflow' +copyright = '2023, Kate Friedman, Walter Kolczynski, Rahul Mahajan, Lin Gan, Arun Chawla' +author = 'Kate Friedman, Walter Kolczynski, Rahul Mahajan, Lin Gan, Arun Chawla' + +# The full version, including alpha/beta/rc tags +release = '0.1' + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.doctest', + 'sphinx.ext.intersphinx', + 'sphinx.ext.todo', + 'sphinx.ext.coverage', + 'sphinx.ext.mathjax', + 'sphinx.ext.ifconfig', + 'sphinx.ext.viewcode', + 'sphinx.ext.githubpages', + 'sphinx.ext.napoleon', + 'sphinxcontrib.bibtex' +] + +bibtex_bibfiles = ['references.bib'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' +html_theme_path = ["_themes", ] + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +# html_theme_options = {} +html_theme_options = {"body_max_width": "none", + "footer_icons": [ + {"name": "GitHub", + "url": "https://github.com/NOAA-EMC/global-workflow", + "html": """ + + + + """, + "class": ""}] + } + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] +html_context = {} + + +def setup(app): + app.add_css_file('custom.css') # may also be an URL + app.add_css_file('theme_overrides.css') # may also be an URL + + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +# html_sidebars = {} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = 'Global-Workflow' diff --git a/docs/source/configure.rst b/docs/source/configure.rst new file mode 100644 index 0000000000..12c2f75a48 --- /dev/null +++ b/docs/source/configure.rst @@ -0,0 +1,61 @@ +============= +Configure Run +============= + +The global-workflow configs contain switches that change how the system runs. Many defaults are set initially. Users wishing to run with different settings should adjust their $EXPDIR configs and then rerun the ``setup_xml.py`` script since some configuration settings/switches change the workflow/xml ("Adjusts XML" column value is "YES"). + ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| Switch | What | Default | Adjusts XML | More Details | ++================+==================================+===============+=============+===================================================+ +| APP | Model application | ATM | YES | See case block in config.base for options | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| DOIAU | Enable 4DIAU for control | YES | NO | Turned off for cold-start first half cycle | +| | with 3 increments | | | | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| DOHYBVAR | Run EnKF | YES | YES | Don't recommend turning off | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| DONST | Run NSST | YES | NO | If YES, turns on NSST in anal/fcst steps, and | +| | | | | turn off rtgsst | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| DO_AWIPS | Run jobs to produce AWIPS | NO | YES | downstream processing, ops only | +| | products | | | | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| DO_BUFRSND | Run job to produce BUFR | NO | YES | downstream processing | +| | sounding products | | | | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| DO_GEMPAK | Run job to produce GEMPAK | NO | YES | downstream processing, ops only | +| | products | | | | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| DO_FIT2OBS | Run FIT2OBS job | YES | YES | Whether to run the FIT2OBS job | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| DO_TRACKER | Run tracker job | YES | YES | Whether to run the tracker job | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| DO_GENESIS | Run genesis job | YES | YES | Whether to run the genesis job | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| DO_GENESIS_FSU | Run FSU genesis job | YES | YES | Whether to run the FSU genesis job | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| DO_VERFOZN | Run GSI monitor ozone job | YES | YES | Whether to run the GSI monitor ozone job | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| DO_VERFRAD | Run GSI monitor radiance job | YES | YES | Whether to run the GSI monitor radiance job | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| DO_VMINMON | Run GSI monitor minimization job | YES | YES | Whether to run the GSI monitor minimization job | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| DO_METP | Run METplus jobs | YES | YES | One cycle spinup | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| EXP_WARM_START | Is experiment starting warm | .false. | NO | Impacts IAU settings for initial cycle. Can also | +| | (.true.) or cold (.false)? | | | be set when running ``setup_expt.py`` script with | +| | | | | the ``--start`` flag (e.g. ``--start warm``) | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| HPSSARCH | Archive to HPPS | NO | Possibly | Whether to save output to tarballs on HPPS | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| LOCALARCH | Archive to a local directory | NO | Possibly | Instead of archiving data to HPSS, archive to a | +| | | | | local directory, specified by ATARDIR. If | +| | | | | LOCALARCH=YES, then HPSSARCH must =NO. Changing | +| | | | | HPSSARCH from YES to NO will adjust the XML. | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| QUILTING | Use I/O quilting | .true. | NO | If .true. choose OUTPUT_GRID as cubed_sphere_grid | +| | | | | in netcdf or gaussian_grid | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ +| WRITE_DOPOST | Run inline post | .true. | NO | If .true. produces master post output in forecast | +| | | | | job | ++----------------+----------------------------------+---------------+-------------+---------------------------------------------------+ diff --git a/docs/source/custom.css b/docs/source/custom.css new file mode 100644 index 0000000000..be64c1472e --- /dev/null +++ b/docs/source/custom.css @@ -0,0 +1,9 @@ +/* custom.css */ + +.red-text { + color: red; +} + +.blue-text { + color: blue; +} diff --git a/docs/source/development.rst b/docs/source/development.rst new file mode 100644 index 0000000000..e95516bcca --- /dev/null +++ b/docs/source/development.rst @@ -0,0 +1,198 @@ +################################### +Contributing to the Global Workflow +################################### + +This section is devoted to developers who wish to contribute to the Global Workflow repository. + +.. _managers: + +============= +Code managers +============= + + * Kate Friedman - @KateFriedman-NOAA / kate.friedman@noaa.gov + * Walter Kolczynski - @WalterKolczynski-NOAA / walter.kolczynski@noaa.gov + +.. _development: + +======================== +Where to do development? +======================== + + * In authoritative (main) repository: + + - Work for upcoming implementation (who: members of global-workflow-developers team) + - Major new features or port work (who: generally code managers and/or members of global-workflow-developers team) + + * In a fork: + + - Everything and everyone else + - How do I fork this repository? See the following GitHub documentation on forking repos: https://help.github.com/en/github/getting-started-with-github/fork-a-repo + +.. _protected: + +================== +Protected branches +================== + +The following global-workflow branches are protected by the code management team: + +* develop (HEAD) +* dev/gfs.v16 (kept aligned with current production, as well as ingests bug fixes and updates between release branches) + +These protected branches require the following to accept changes: + + 1. a pull request with at least 1 reviewer sign-off + 2. a code manager to perform the commit + +Other authoritative repository branches may also be protected at the request of members of the global-workflow-developers team. + +.. _howto: + +============================================= +How to get changes into develop (HEAD) branch +============================================= + +The following steps should be followed in order to make changes to the develop branch of global-workflow. Communication with the code managers throughout the process is encouraged. + + #. Issue - Open issue to document changes. Reference this issue in commits to your branches (e.g. ``git commit -m "Issue #23 - blah changes for what-not code"``) Click `here `__ to open a new global-workflow issue. + #. GitFlow - Follow `GitFlow `_ procedures for development (branch names, forking vs branching, etc.). Read more `here `__ about GitFlow at EMC. + #. To fork or not to fork? - If not working within authoritative repository create a fork of the authoritative repository. Read more `here `__ about forking in GitHub. + #. Branch - Create branch in either authoritative repository or fork of authoritative repository. See the `Where to do development? `_ section for how to determine where. Follow GitFlow conventions when creating branch. + #. Development - Perform and test changes in branch. Document work in issue and mention issue number in commit messages to link your work to the issue. See `Commit Messages `_ section below. Depending on changes the code manager may request or perform additional pre-commit tests. + #. Pull request - When ready to merge changes back to develop branch, the lead developer should initiate a pull request (PR) of your branch (either fork or not) into the develop branch. Read `here `__ about pull requests in GitHub. Provide some information about the PR in the proper field, add at least one reviewer to the PR and assign the PR to a code manager. + #. Complete - When review and testing is complete the code manager will complete the pull request and subsequent merge/commit. + #. Cleanup - When complete the lead developer should delete the branch and close the issue. "Closing keywords" can be used in the PR to automatically close associated issues. + +.. _development-tools: + +================= +Development Tools +================= + +See the ``/test`` folder in global-workflow for available development and testing tools. + +---------------- +Comparison Tools +---------------- + +There are several scripts to compare output between two experiments (e.g. control and test). See scripts under ``/test`` folder and read `README` there for information on how to use them. + +.. _code-standards: + +============== +Code standards +============== + +All scripts should be in either bash or python 3. + +We have adopted the `Google style guide `_ for shell scripts and `PEP-8 `_ for python. Python code should additionally have docstrings following `numpy style `_. + +All new code after 2022 Sep 1 will be required to meet these standards. We will slowly be updating existing scripts to comply with the standards. We are also in the process of adding GitHub actions to automatically lint code submitted for PRs. + +.. _commit-standards: + +====================== +Pull request standards +====================== + +Pull requests should follow the pre-filled template provided when you open the PR. PR titles and descriptions become the commit message when the PR is squashed and merged, so we ask that they follow best practices for commit messages: + + * Limit the subject line (PR title) to 50 characters + * Capitalize the subject line + * Do not end the subject line with a period + * Use the `imperative mood `_ in the subject line + * Use the body to explain what and why vs. how + * The final line of the commit message should include tags to relevant issues (e.g. ``Refs: #217, #300``) + +This list is a modified version of the one provided at https://chris.beams.io/posts/git-commit/ with a couple removed that are not relevant to GitHub PRs. That source also provides the motivation for making sure we have good commit messages. + +Here is the example commit message from the article linked above; it includes descriptions of what would be in each part of the commit message for guidance: + +:: + + Summarize changes in around 50 characters or less + + More detailed explanatory text, if necessary. Wrap it to about 72 + characters or so. In some contexts, the first line is treated as the + subject of the commit and the rest of the text as the body. The + blank line separating the summary from the body is critical (unless + you omit the body entirely); various tools like `log`, `shortlog` + and `rebase` can get confused if you run the two together. + + Explain the problem that this commit is solving. Focus on why you + are making this change as opposed to how (the code explains that). + Are there side effects or other unintuitive consequences of this + change? Here's the place to explain them. + + Further paragraphs come after blank lines. + + - Bullet points are okay, too + + - Typically a hyphen or asterisk is used for the bullet, preceded + by a single space, with blank lines in between, but conventions + vary here + + If you use an issue tracker, put references to them at the bottom, + like this: + + Resolves: #123 + See also: #456, #789 + +A detailed commit message is very useful for documenting changes. + +.. _sync: + +================================================== +How to sync fork with the authoritative repository +================================================== + +As development in the main authoritative repository moves forward you will need to sync your fork branches to stay up-to-date. Below is an example of how to sync your fork copy of a branch with the authoritative repository copy. The branch name for the example will be "feature/new_thing". Click `here `__ for documentation on syncing forks. + +1. Clone your fork and checkout branch that needs syncing: + +:: + + git clone https://github.com/JoeSchmo-NOAA/global-workflow.git ./fork + cd fork + git checkout feature/my_new_thing + +2. Add upstream info to your clone so it knows where to merge from. The term "upstream" refers to the authoritative repository from which the fork was created. + +:: + + git remote add upstream https://github.com/NOAA-EMC/global-workflow.git + +3. Fetch upstream information into clone: + +:: + + git fetch upstream + +Later on you can update your fork remote information by doing the following command: + +:: + + git remote update + +4. Merge upstream ``feature/other_new_thing`` into your branch: + +:: + + git merge upstream/feature/other_new_thing + +5. Resolve any conflicts and perform any needed "add"s or "commit"s for conflict resolution. + +6. Push the merged copy back up to your fork (origin): + +:: + + git push origin feature/my_new_thing + +Done! + +Moving forward you'll want to perform the "remote update" command regularly to update the metadata for the remote/upstream repository in your fork (e.g. pull in metadata for branches made in auth repo after you forked it). + +:: + + git remote update diff --git a/docs/source/errors_faq.rst b/docs/source/errors_faq.rst new file mode 100644 index 0000000000..2660a01e60 --- /dev/null +++ b/docs/source/errors_faq.rst @@ -0,0 +1,45 @@ +========================== +Common Errors Known Issues +========================== + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Error: "ImportError" message when running setup script +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Example:: + + $ ./setup_xml.py /path/to/your/experiment/directory + /usr/bin/env: python3: No such file or directory + +**Cause:** Missing python module in your environment + +**Solution:** Load a python module ("module load python") and retry setup script. + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Error: curses default colors when running viewer +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Example:: + + $ ./rocoto_viewer.py -d blah.db -w blah.xml + Traceback (most recent call last): + File "./rocoto_viewer.py", line 2376, in + curses.wrapper(main) + File "/contrib/anaconda/anaconda2/4.4.0/lib/python2.7/curses/wrapper.py", line 43, in wrapper + return func(stdscr, *args, **kwds) + File "./rocoto_viewer.py", line 1202, in main + curses.use_default_colors() + _curses.error: use_default_colors() returned ERR + +**Cause:** wrong TERM setting for curses + +**Solution:** set TERM to "xterm" (bash: export TERM=xterm ; csh/tcsh: setenv TERM xterm) + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Issue: Directory name change for EnKF folder in COMROT +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +**Issue:** The EnKF COMROT folders were renamed during the GFS v15 development process to remove the period between "enkf" and "gdas": enkf.gdas.$PDY → enkfgdas.$PDY + +**Fix:** Older tarballs on HPSS will have the older directory name with the period between 'enkf' and 'gdas'. Make sure to rename folder to 'enkfgdas.$PDY' after obtaining. Only an issue for the initial cycle. + diff --git a/docs/source/hpc.rst b/docs/source/hpc.rst new file mode 100644 index 0000000000..3ce6a889d9 --- /dev/null +++ b/docs/source/hpc.rst @@ -0,0 +1,131 @@ +##################### +HPC Settings and Help +##################### + +Running the GFS configurations (or almost any global workflow configuration except the coarsest) is a resource intensive exercise. This page discusses recommended HPC environmental settings and contact information in case you need assistance from a particular HPC helpdesk. While most of the documentation is based on supported NOAA platforms, the learnings here can hopefully apply to other platforms. + +================================ +Experiment troubleshooting help +================================ + +Users may email Kate Friedman (kate.friedman@noaa.gov) questions or requests for troubleshooting assistance with their global-workflow experiments/parallels on supported platforms. For troubleshooting, please provide a brief description of the issue(s) and include relevant error messages and/or paths to logs for failed jobs. + +Any issues related to HPC/machine problems, and which are unrelated to the workflow itself, should go to the appropriate HPC helpdesk. + +============= +HPC helpdesks +============= + +* WCOSS2: hpc.wcoss2-help@noaa.gov +* Hera: rdhpcs.hera.help@noaa.gov +* Orion: rdhpcs.orion.help@noaa.gov +* Hercules: rdhpcs.hercules.help@noaa.gov +* HPSS: rdhpcs.hpss.help@noaa.gov +* Gaea: oar.gfdl.help@noaa.gov +* S4: david.huber@noaa.gov +* Jet: rdhpcs.jet.help@noaa.gov +* Cloud: rdhpcs.cloud.help@noaa.gov + +====================== +Restricted data access +====================== + +The GFS system ingests dump data files that contain global observation data. A number of these dump files contain restricted data which means those files come with an extra level of permissions called restricted or ‘rstprod’. Users who wish to run cycled GFS experiments, which both utilizes restricted observation data and produces output containing restricted data, will need to gain rstprod group access. + +NOTE: Only non-restricted data is available on S4. + +To request rstprod access, do either a and/or b below: + +a) If you need restricted data access on WCOSS2, read details about restricted data and fill out form here: + +https://www.nco.ncep.noaa.gov/sib/restricted_data/restricted_data_sib/ + +b) If you need restricted data access on RDHPCS systems: go to the AIM system, click on "Request new access to a project", select the rstprod project, provide justification for needed access, and submit the request: + +https://aim.rdhpcs.noaa.gov/ + +==================================== +Optimizing the global workflow on S4 +==================================== + +The S4 cluster is relatively small and so optimizations are recommended to improve cycled runtimes. Please contact David Huber (david.huber@noaa.gov) if you are planning on running a cycled experiment on this system to obtain optimized configuration files. + +============ +Git settings +============ + +^^^^^^ +Merges +^^^^^^ + +Use the following command to have merge commits include the one-line description of all the commits being merged (up to 200). You only need to do this once on each machine; it will be saved to your git settings:: + + git config --global merge.log 200 + +Use the ``--no-ff`` option to make sure there is always a merge commit when a fast-forward only is available. Exception: If the merge contains only a single commit, it can be applied as a fast-forward. + +For any merge with multiple commits, a short synopsis of the merge should appear between the title and the list of commit titles added by merge.log. + +^^^^^^^ +Version +^^^^^^^ + +It is advised to use Git v2+ when available. At the time of writing this documentation the default Git clients on the different machines were as noted in the table below. It is recommended that you check the default modules before loading recommended ones: + ++---------+----------+---------------------------------------+ +| Machine | Default | Recommended | ++---------+----------+---------------------------------------+ +| Hera | v2.18.0 | default | ++---------+----------+---------------------------------------+ +| Hercules | v2.31.1 | default | ++---------+----------+---------------------------------------+ +| Orion | v1.8.3.1 | **module load git/2.28.0** | ++---------+----------+---------------------------------------+ +| Jet | v2.18.0 | default | ++---------+----------+---------------------------------------+ +| WCOSS2 | v2.26.2 | default or **module load git/2.29.0** | ++---------+----------+---------------------------------------+ +| S4 | v1.8.3.1 | **module load git/2.30.0** | ++---------+----------+---------------------------------------+ +| AWS PW | v1.8.3.1 | default ++---------+----------+---------------------------------------+ + +^^^^^^^^^^^^^ +Output format +^^^^^^^^^^^^^ + +For proper display of Git command output (e.g. git branch and git diff) type the following once per machine: + +:: + + git config --global core.pager 'less -FRX' + +For the manage_externals utility functioning:: + + Error: fatal: ssh variant 'simple' does not support setting port + Fix: git config --global ssh.variant ssh + +======================================== +Stacksize on R&Ds (Hera, Orion, Hercules, Jet, S4) +======================================== + +Some GFS components, like the UPP, need an unlimited stacksize. Add the following setting into your appropriate .*rc file to support these components: + +csh:: + + limit stacksize unlimited + +sh/bash/ksh:: + + ulimit -s unlimited + +========================================= +Forecast hangs due to issue with ssh-keys +========================================= + +Did you generate your ssh-keys with a passphrase? If so, remake them without one. To test this try ssh-ing to a different login node; you should be able to without being prompted for your passphrase. + +Is your public key in the authorized_keys file? If not, add it:: + + cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys + diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 0000000000..1b8dc5e952 --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,40 @@ + +############### +Global Workflow +############### + +**Global-workflow** is the end-to-end workflow designed to run global configurations of medium range weather forecasting for the UFS weather model. It supports both development and operational implementations. In its current format it supports the Global Forecast System (GFS) and the Global Ensemble Forecast System (GEFS) configurations + +====== +Status +====== + +* State of develop (HEAD) branch: GFSv17+ development +* State of operations (dev/gfs.v16 branch): GFS v16.3.11 `tag: [gfs.v16.3.11] `_ + +============= +Code managers +============= + +* Kate Friedman - @KateFriedman-NOAA / kate.friedman@noaa.gov +* Walter Kolczynski - @WalterKolczynski-NOAA / walter.kolczynski@noaa.gov + +============= +Announcements +============= + +General updates: NOAA employees and affiliates can join the gfs-announce distribution list to get updates on the GFS and global-workflow. Contact Kate Friedman (kate.friedman@noaa.gov) and Walter Kolczynski (walter.kolczynski@noaa.gov) to get added to the list or removed from it. + +GitHub updates: Users should adjust their "Watch" settings for this repo so they receive notifications as they'd like to. Find the "Watch" or "Unwatch" button towards the top right of the `authoritative global-workflow repository page `_ and click it to adjust how you watch the repo. + +.. toctree:: + :numbered: + :maxdepth: 3 + + development.rst + components.rst + jobs.rst + hpc.rst + output.rst + run.rst + noaa_csp.rst diff --git a/docs/source/init.rst b/docs/source/init.rst new file mode 100644 index 0000000000..f9562a3a7d --- /dev/null +++ b/docs/source/init.rst @@ -0,0 +1,606 @@ +================== +Initial Conditions +================== + +There are two types of initial conditions for the global-workflow: + +#. Warm start: these ICs are taken directly from either the GFS in production or an experiment "warmed" up (at least one cycle in). +#. Cold start: any ICs converted to a new resolution or grid (e.g. C768 -> C384). These ICs are often prepared by chgres_cube (change resolution utility). + +Most users will initiate their experiments with cold start ICs unless running high resolution (C768 deterministic with C384 EnKF) for a date with warm starts available. It is `not recommended` to run high resolution unless required or as part of final testing. + +Atmosphere Resolutions: + +* C48 = 2 degree ≈ 200km +* C96 = 1 degree ≈ 100km +* C192 = 1/2 degree ≈ 50km +* C384 = 1/4 degree ≈ 25km +* C768 = 1/8 degree ≈ 13km +* C1152 ≈ 9km +* C3072 ≈ 3km + +Supported atmosphere resolutions in global-workflow: C48, C96, C192, C384, C768 + +Ocean Resolutions: + +* mx500 = 5 degree +* mx100 = 1 degree +* mx050 = 1/2 degree +* mx025 = 1/4 degree + +Supported ocean resolutions in global-workflow: mx500, mx100 + +^^^^^^^^^^^^^^^^^^^^^^^^^ +Staged Initial Conditions +^^^^^^^^^^^^^^^^^^^^^^^^^ + +* :ref:`Cycled ATM-only` +* :ref:`Cycled ATM w/ Coupled (S2S) model` +* :ref:`Prototype` + +.. _staged_ics_cycled_atmonly: + +*************** +Cycled ATM-only +*************** + +Cold-start atmosphere-only cycled C96 deterministic C48 enkf (80 members) ICs are available in the following locations on supported platforms: + +:: + + Hera: /scratch1/NCEPDEV/global/glopara/data/ICSDIR/C96C48 + Orion/Hercules: /work/noaa/global/glopara/data/ICSDIR/C96C48 + WCOSS2: /lfs/h2/emc/global/noscrub/emc.global/data/ICSDIR/C96C48 + +Start date = 2021122018 + +:: + + -bash-4.2$ tree /scratch1/NCEPDEV/global/glopara/data/ICSDIR/C96C48/ + |-- enkfgdas.20211220 + | `-- 18 + | |-- mem### (where ### = 001 -> 080) + | | `-- atmos + | | `-- INPUT + | | |-- gfs_ctrl.nc + | | |-- gfs_data.tile1.nc + | | |-- gfs_data.tile2.nc + | | |-- gfs_data.tile3.nc + | | |-- gfs_data.tile4.nc + | | |-- gfs_data.tile5.nc + | | |-- gfs_data.tile6.nc + | | |-- sfc_data.tile1.nc + | | |-- sfc_data.tile2.nc + | | |-- sfc_data.tile3.nc + | | |-- sfc_data.tile4.nc + | | |-- sfc_data.tile5.nc + | | `-- sfc_data.tile6.nc + `-- gdas.20211220 + `-- 18 + `-- atmos + |-- INPUT + | |-- gfs_ctrl.nc + | |-- gfs_data.tile1.nc + | |-- gfs_data.tile2.nc + | |-- gfs_data.tile3.nc + | |-- gfs_data.tile4.nc + | |-- gfs_data.tile5.nc + | |-- gfs_data.tile6.nc + | |-- sfc_data.tile1.nc + | |-- sfc_data.tile2.nc + | |-- sfc_data.tile3.nc + | |-- sfc_data.tile4.nc + | |-- sfc_data.tile5.nc + | `-- sfc_data.tile6.nc + |-- gdas.t18z.abias + |-- gdas.t18z.abias_air + |-- gdas.t18z.abias_pc + `-- gdas.t18z.radstat + +.. _staged_ics_cycled_coupled: + +********************************* +Cycled ATM w/ Coupled (S2S) model +********************************* + +Warm-start cycled w/ coupled (S2S) model C48 atmosphere C48 enkf (80 members) 5 degree ocean/ice ICs are available in the following locations on supported platforms: + +:: + + Hera: /scratch1/NCEPDEV/global/glopara/data/ICSDIR/C48C48mx500 + Orion/Hercules: /work/noaa/global/glopara/data/ICSDIR/C48C48mx500 + WCOSS2: /lfs/h2/emc/global/noscrub/emc.global/data/ICSDIR/C48C48mx500 + Jet: /lfs4/HFIP/hfv3gfs/glopara/data/ICSDIR/C48C48mx500 + +Start date = 2021032312 + +.. note:: + The EnKF member ICs are dummy duplicates of the deterministic at the moment. + +:: + + -bash-4.2$ tree /scratch1/NCEPDEV/global/glopara/data/ICSDIR/C48C48mx500 + ├── enkfgdas.20210323 + │   ├── 06 + │   │   ├── mem001 + │   │   │   └── model_data -> ../../../gdas.20210323/06/model_data + │   │   ├── mem002 + │   │   │   └── model_data -> ../../../gdas.20210323/06/model_data + │   │   ├── mem003 + │   │   │   └── model_data -> ../../../gdas.20210323/06/model_data + ... + │   │   └── mem080 + │   │   └── model_data -> ../../../gdas.20210323/06/model_data + │   └── 12 + │   ├── mem001 + │   │   └── analysis + │   │   └── ocean + │   │   └── gdas.t12z.ocninc.nc -> ../../../../../gdas.20210323/12/analysis/ocean/gdas.t12z.ocninc.nc + │   ├── mem002 + │   │   └── analysis + │   │   └── ocean + │   │   └── gdas.t12z.ocninc.nc -> ../../../../../gdas.20210323/12/analysis/ocean/gdas.t12z.ocninc.nc + │   ├── mem003 + │   │   └── analysis + │   │   └── ocean + │   │   └── gdas.t12z.ocninc.nc -> ../../../../../gdas.20210323/12/analysis/ocean/gdas.t12z.ocninc.nc + ... + │   └── mem080 + │   └── analysis + │   └── ocean + │   └── gdas.t12z.ocninc.nc -> ../../../../../gdas.20210323/12/analysis/ocean/gdas.t12z.ocninc.nc + └── gdas.20210323 + ├── 06 + │   └── model_data + │   ├── atmos + │   │   └── restart + │   │   ├── 20210323.120000.ca_data.tile1.nc + │   │   ├── 20210323.120000.ca_data.tile2.nc + │   │   ├── 20210323.120000.ca_data.tile3.nc + │   │   ├── 20210323.120000.ca_data.tile4.nc + │   │   ├── 20210323.120000.ca_data.tile5.nc + │   │   ├── 20210323.120000.ca_data.tile6.nc + │   │   ├── 20210323.120000.coupler.res + │   │   ├── 20210323.120000.fv_core.res.nc + │   │   ├── 20210323.120000.fv_core.res.tile1.nc + │   │   ├── 20210323.120000.fv_core.res.tile2.nc + │   │   ├── 20210323.120000.fv_core.res.tile3.nc + │   │   ├── 20210323.120000.fv_core.res.tile4.nc + │   │   ├── 20210323.120000.fv_core.res.tile5.nc + │   │   ├── 20210323.120000.fv_core.res.tile6.nc + │   │   ├── 20210323.120000.fv_srf_wnd.res.tile1.nc + │   │   ├── 20210323.120000.fv_srf_wnd.res.tile2.nc + │   │   ├── 20210323.120000.fv_srf_wnd.res.tile3.nc + │   │   ├── 20210323.120000.fv_srf_wnd.res.tile4.nc + │   │   ├── 20210323.120000.fv_srf_wnd.res.tile5.nc + │   │   ├── 20210323.120000.fv_srf_wnd.res.tile6.nc + │   │   ├── 20210323.120000.fv_tracer.res.tile1.nc + │   │   ├── 20210323.120000.fv_tracer.res.tile2.nc + │   │   ├── 20210323.120000.fv_tracer.res.tile3.nc + │   │   ├── 20210323.120000.fv_tracer.res.tile4.nc + │   │   ├── 20210323.120000.fv_tracer.res.tile5.nc + │   │   ├── 20210323.120000.fv_tracer.res.tile6.nc + │   │   ├── 20210323.120000.phy_data.tile1.nc + │   │   ├── 20210323.120000.phy_data.tile2.nc + │   │   ├── 20210323.120000.phy_data.tile3.nc + │   │   ├── 20210323.120000.phy_data.tile4.nc + │   │   ├── 20210323.120000.phy_data.tile5.nc + │   │   ├── 20210323.120000.phy_data.tile6.nc + │   │   ├── 20210323.120000.sfc_data.tile1.nc + │   │   ├── 20210323.120000.sfc_data.tile2.nc + │   │   ├── 20210323.120000.sfc_data.tile3.nc + │   │   ├── 20210323.120000.sfc_data.tile4.nc + │   │   ├── 20210323.120000.sfc_data.tile5.nc + │   │   └── 20210323.120000.sfc_data.tile6.nc + │   ├── ice + │   │   └── restart + │   │   └── 20210323.120000.cice_model.res.nc + │   ├── med + │   │   └── restart + │   │   └── 20210323.120000.ufs.cpld.cpl.r.nc + │   └── ocean + │   └── restart + │   └── 20210323.120000.MOM.res.nc + └── 12 + └── analysis + ├── atmos + │   ├── gdas.t12z.abias + │   ├── gdas.t12z.abias_air + │   ├── gdas.t12z.abias_int + │   ├── gdas.t12z.abias_pc + │   └── gdas.t12z.radstat + └── ocean + └── gdas.t12z.ocninc.nc + +.. _staged_ics_prototype: + +********* +Prototype +********* + +Forecast-only P8 prototype initial conditions are made available to users on supported platforms in the following locations: + +:: + + WCOSS2: /lfs/h2/emc/global/noscrub/emc.global/IC/COUPLED + HERA: /scratch1/NCEPDEV/climate/role.ufscpara/IC + ORION/Hercules: /work/noaa/global/glopara/data/ICSDIR/prototype_ICs + JET: /mnt/lfs4/HFIP/hfv3gfs/glopara/data/ICSDIR/prototype_ICs + S4: /data/prod/glopara/coupled_ICs + +These locations are known within the workflow via paths set in ``parm/config/config.coupled_ic``. + +^^^^^^^^^^^^^^^^^^^^^^^^^^ +Prepare Initial Conditions +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. _automated-generation: + +******************** +Automated Generation +******************** + +.. _cycled: + +----------- +Cycled mode +----------- + +Not yet supported. See :ref:`Manual Generation` section below for how to create your ICs yourself (outside of workflow). + +.. _forecastonly-coupled: + +--------------------- +Forecast-only coupled +--------------------- +Coupled initial conditions are currently only generated offline and copied prior to the forecast run. Prototype initial conditions will automatically be used when setting up an experiment as an S2SW app, there is no need to do anything additional. Copies of initial conditions from the prototype runs are currently maintained on Hera, Orion/Hercules, Jet, and WCOSS2. The locations used are determined by ``parm/config/config.coupled_ic``. If you need prototype ICs on another machine, please contact Walter (Walter.Kolczynski@noaa.gov). + +.. _forecastonly-atmonly: + +----------------------------- +Forecast-only mode (atm-only) +----------------------------- + +The table below lists the needed initial condition files from past GFS versions to be used by the UFS_UTILS gdas_init utility. The utility will pull these files for you. See the next section (Manual Generation) for how to run the UFS_UTILS gdas_init utility and create initial conditions for your experiment. + +Note for table: yyyy=year; mm=month; dd=day; hh=cycle + +Operations/production output location on HPSS: /NCEPPROD/hpssprod/runhistory/rh ``yyyy``/``yyyymm``/``yyyymmdd``/ + ++----------------+---------------------------------+-----------------------------------------------------------------------------+--------------------------------+ +| Source | Files | Tarball name | Where in ROTDIR | ++----------------+---------------------------------+-----------------------------------------------------------------------------+--------------------------------+ +| v12 ops | gfs.t. ``hh`` z.sanl | com_gfs_prod_gfs. ``yyyymmddhh`` .anl.tar | gfs. ``yyyymmdd`` /``hh`` | +| | | | | +| | gfs.t. ``hh`` z.sfcanl | | | ++----------------+---------------------------------+-----------------------------------------------------------------------------+--------------------------------+ +| v13 ops | gfs.t. ``hh`` z.sanl | com2_gfs_prod_gfs. ``yyyymmddhh`` .anl.tar | gfs. ``yyyymmdd`` /``hh`` | +| | | | | +| | gfs.t. ``hh`` z.sfcanl | | | ++----------------+---------------------------------+-----------------------------------------------------------------------------+--------------------------------+ +| v14 ops | gfs.t. ``hh`` z.atmanl.nemsio | gpfs_hps_nco_ops_com_gfs_prod_gfs. ``yyyymmddhh`` .anl.tar | gfs. ``yyyymmdd`` /``hh`` | +| | | | | +| | gfs.t. ``hh`` z.sfcanl.nemsio | | | ++----------------+---------------------------------+-----------------------------------------------------------------------------+--------------------------------+ +| v15 ops | gfs.t. ``hh`` z.atmanl.nemsio | gpfs_dell1_nco_ops_com_gfs_prod_gfs. ``yyyymmdd`` _ ``hh`` .gfs_nemsioa.tar | gfs. ``yyyymmdd`` /``hh`` | +| | | | | +| pre-2020022600 | gfs.t. ``hh`` z.sfcanl.nemsio | | | ++----------------+---------------------------------+-----------------------------------------------------------------------------+--------------------------------+ +| v15 ops | gfs.t. ``hh`` z.atmanl.nemsio | com_gfs_prod_gfs. ``yyyymmdd`` _ ``hh`` .gfs_nemsioa.tar | gfs. ``yyyymmdd`` /``hh`` | +| | | | | +| | gfs.t. ``hh`` z.sfcanl.nemsio | | | ++----------------+---------------------------------+-----------------------------------------------------------------------------+--------------------------------+ +| v16 retro | gfs.t. ``hh`` z.atmanl.nc | gfs_netcdfa.tar* | gfs. ``yyyymmdd`` /``hh``/atmos| +| | | | | +| | gfs.t. ``hh`` z.sfcanl.nc | | | ++----------------+---------------------------------+-----------------------------------------------------------------------------+--------------------------------+ +| v16.0[1] ops | gfs.t. ``hh`` z.atmanl.nc | com_gfs_prod_gfs. ``yyyymmdd`` _ ``hh`` .gfs_nca.tar | gfs. ``yyyymmdd`` /``hh``/atmos| +| | | | | +| | gfs.t. ``hh`` z.sfcanl.nc | | | ++----------------+---------------------------------+-----------------------------------------------------------------------------+--------------------------------+ +| v16.2[3]+ ops | gfs.t. ``hh`` z.atmanl.nc | com_gfs_ ``gfs_ver`` _gfs. ``yyyymmdd`` _ ``hh`` .gfs_nca.tar | gfs. ``yyyymmdd`` /``hh``/atmos| +| | | | | +| | gfs.t. ``hh`` z.sfcanl.nc | | | ++----------------+---------------------------------+-----------------------------------------------------------------------------+--------------------------------+ + +For HPSS path, see retrospective table in :ref:`pre-production parallel section ` below + +.. _manual-generation: + +***************** +Manual Generation +***************** + +.. note:: + Initial conditions cannot be generated on S4. These must be generated on another supported platform then pushed to S4. If you do not have access to a supported system or need assistance, please contact David Huber (david.huber@noaa.gov). + +.. _coldstarts: + +The following information is for users needing to generate cold-start initial conditions for a cycled experiment that will run at a different resolution or layer amount than the operational GFS (C768C384L127). + +The ``chgres_cube`` code is available from the `UFS_UTILS repository `_ on GitHub and can be used to convert GFS ICs to a different resolution or number of layers. Users may clone the develop/HEAD branch or the same version used by global-workflow develop (found in ``sorc/checkout.sh``). The ``chgres_cube`` code/scripts currently support the following GFS inputs: + +* pre-GFSv14 +* GFSv14 +* GFSv15 +* GFSv16 + +Users can use the copy of UFS_UTILS that is already cloned and built within their global-workflow clone or clone/build it separately: + +Within a built/linked global-workflow clone: + +:: + + cd sorc/ufs_utils.fd/util/gdas_init + +Clone and build separately: + +1. Clone UFS_UTILS: + +:: + + git clone --recursive https://github.com/NOAA-EMC/UFS_UTILS.git + +Then switch to a different tag or use the default branch (develop). + +2. Build UFS_UTILS: + +:: + + sh build_all.sh + cd fix + sh link_fixdirs.sh emc $MACHINE + +where ``$MACHINE`` is ``wcoss2``, ``hera``, or ``jet``. + +.. note:: + UFS-UTILS builds on Orion/Hercules but due to the lack of HPSS access on Orion/Hercules the ``gdas_init`` utility is not supported there. + +3. Configure your conversion: + +:: + + cd util/gdas_init + vi config + +Read the doc block at the top of the config and adjust the variables to meet you needs (e.g. ``yy, mm, dd, hh`` for ``SDATE``). + +Most users will want to adjust the following ``config`` settings for the current system design: + +#. EXTRACT_DATA=YES (to pull original ICs to convert off HPSS) +#. RUN_CHGRES=YES (to run chgres_cube on the original ICs pulled off HPSS) +#. LEVS=128 (for the L127 GFS) + +4. Submit conversion script: + +:: + + ./driver.$MACHINE.sh + +where ``$MACHINE`` is currently ``wcoss2``, ``hera`` or ``jet``. Additional options will be available as support for other machines expands. + +.. note:: + UFS-UTILS builds on Orion/Hercules but due to lack of HPSS access there is no ``gdas_init`` driver for Orion/Hercules nor support to pull initial conditions from HPSS for the ``gdas_init`` utility. + +Several small jobs will be submitted: + + - 1 jobs to pull inputs off HPSS + - 1 or 2 jobs to run ``chgres_cube`` (1 for deterministic/hires and 1 for each EnKF ensemble member) + +The chgres jobs will have a dependency on the data-pull jobs and will wait to run until all data-pull jobs have completed. + +5. Check output: + +In the config you will have defined an output folder called ``$OUTDIR``. The converted output will be found there, including the needed abias and radstat initial condition files (if CDUMP=gdas). The files will be in the needed directory structure for the global-workflow system, therefore a user can move the contents of their ``$OUTDIR`` directly into their ``$ROTDIR/$COMROT``. + +Please report bugs to George Gayno (george.gayno@noaa.gov) and Kate Friedman (kate.friedman@noaa.gov). + +.. _warmstarts-prod: + +***************************** +Warm starts (from production) +***************************** + +Output and warm start initial conditions from the operational GFS (FV3GFS) are saved on HPSS. Users can pull these warm start initial conditions from tape for their use in running operational resolution experiments. + +See production output in the following location on HPSS: + +``/NCEPPROD/hpssprod/runhistory/rhYYYY/YYYYMM/YYYYMMDD`` + +Example location for January 2nd 2023: + +``/NCEPPROD/hpssprod/runhistory/rh2023/202301/20230102`` + +Example listing for January 2nd 2023 00z (2023010200) production tarballs: + +:: + + -bash-4.2$ hpsstar dir /NCEPPROD/hpssprod/runhistory/rh2023/202301/20230102 | grep gfs | grep _00. | grep -v idx + [connecting to hpsscore1.fairmont.rdhpcs.noaa.gov/1217] + -rw-r----- 1 nwprod rstprod 34824086016 Jan 4 03:31 com_gfs_v16.3_enkfgdas.20230102_00.enkfgdas.tar + -rw-r--r-- 1 nwprod prod 219779890688 Jan 4 04:04 com_gfs_v16.3_enkfgdas.20230102_00.enkfgdas_restart_grp1.tar + -rw-r--r-- 1 nwprod prod 219779921408 Jan 4 04:13 com_gfs_v16.3_enkfgdas.20230102_00.enkfgdas_restart_grp2.tar + -rw-r--r-- 1 nwprod prod 219775624192 Jan 4 04:23 com_gfs_v16.3_enkfgdas.20230102_00.enkfgdas_restart_grp3.tar + -rw-r--r-- 1 nwprod prod 219779726848 Jan 4 04:33 com_gfs_v16.3_enkfgdas.20230102_00.enkfgdas_restart_grp4.tar + -rw-r--r-- 1 nwprod prod 219777990656 Jan 4 04:42 com_gfs_v16.3_enkfgdas.20230102_00.enkfgdas_restart_grp5.tar + -rw-r--r-- 1 nwprod prod 219780963328 Jan 4 04:52 com_gfs_v16.3_enkfgdas.20230102_00.enkfgdas_restart_grp6.tar + -rw-r--r-- 1 nwprod prod 219775471104 Jan 4 05:02 com_gfs_v16.3_enkfgdas.20230102_00.enkfgdas_restart_grp7.tar + -rw-r--r-- 1 nwprod prod 219779499008 Jan 4 05:11 com_gfs_v16.3_enkfgdas.20230102_00.enkfgdas_restart_grp8.tar + -rw-r----- 1 nwprod rstprod 2287770624 Jan 4 02:07 com_gfs_v16.3_gdas.20230102_00.gdas.tar + -rw-r--r-- 1 nwprod prod 1026611200 Jan 4 02:07 com_gfs_v16.3_gdas.20230102_00.gdas_flux.tar + -rw-r--r-- 1 nwprod prod 91233038336 Jan 4 02:16 com_gfs_v16.3_gdas.20230102_00.gdas_nc.tar + -rw-r--r-- 1 nwprod prod 10865070592 Jan 4 02:08 com_gfs_v16.3_gdas.20230102_00.gdas_pgrb2.tar + -rw-r----- 1 nwprod rstprod 69913956352 Jan 4 02:11 com_gfs_v16.3_gdas.20230102_00.gdas_restart.tar + -rw-r--r-- 1 nwprod prod 18200814080 Jan 4 02:17 com_gfs_v16.3_gdas.20230102_00.gdaswave_keep.tar + -rw-r--r-- 1 nwprod prod 5493360128 Jan 4 02:18 com_gfs_v16.3_gfs.20230102_00.gfs.tar + -rw-r--r-- 1 nwprod prod 62501531648 Jan 4 02:21 com_gfs_v16.3_gfs.20230102_00.gfs_flux.tar + -rw-r--r-- 1 nwprod prod 121786191360 Jan 4 02:41 com_gfs_v16.3_gfs.20230102_00.gfs_nca.tar + -rw-r--r-- 1 nwprod prod 130729495040 Jan 4 02:48 com_gfs_v16.3_gfs.20230102_00.gfs_ncb.tar + -rw-r--r-- 1 nwprod prod 138344908800 Jan 4 02:29 com_gfs_v16.3_gfs.20230102_00.gfs_pgrb2.tar + -rw-r--r-- 1 nwprod prod 59804635136 Jan 4 02:32 com_gfs_v16.3_gfs.20230102_00.gfs_pgrb2b.tar + -rw-r--r-- 1 nwprod prod 25095460864 Jan 4 02:34 com_gfs_v16.3_gfs.20230102_00.gfs_restart.tar + -rw-r--r-- 1 nwprod prod 21573020160 Jan 4 02:49 com_gfs_v16.3_gfs.20230102_00.gfswave_output.tar + -rw-r--r-- 1 nwprod prod 32850422784 Jan 4 02:51 com_gfs_v16.3_gfs.20230102_00.gfswave_raw.tar + -rw-r----- 1 nwprod rstprod 7419548160 Jan 4 05:15 com_obsproc_v1.1_gfs.20230102_00.obsproc_gfs.tar + +The warm starts and other output from production are at C768 deterministic and C384 EnKF. The warm start files must be converted to your desired resolution(s) using ``chgres_cube`` if you wish to run a different resolution. If you are running a C768C384L127 experiment you can use them as is. + +------------------------------------------------------------------------------------------ +What files should you pull for starting a new experiment with warm starts from production? +------------------------------------------------------------------------------------------ + +That depends on what mode you want to run -- forecast-only or cycled. Whichever mode, navigate to the top of your ``COMROT`` and pull the entirety of the tarball(s) listed below for your mode. The files within the tarball are already in the ``$CDUMP.$PDY/$CYC/$ATMOS`` folder format expected by the system. + +For forecast-only there are two tarballs to pull + +1. File #1 (for starting cycle SDATE): + +:: + + /NCEPPROD/hpssprod/runhistory/rhYYYY/YYYYMM/YYYYMMDD/com_gfs_vGFSVER_gfs.YYYYMMDD_CC.gfs_restart.tar + +...where ``GFSVER`` is the version of the GFS (e.g. "16.3"). + +2. File #2 (for prior cycle GDATE=SDATE-06): + +:: + + /NCEPPROD/hpssprod/runhistory/rhYYYY/YYYYMM/YYYYMMDD/com_gfs_vGFSVER_gdas.YYYYMMDD_CC.gdas_restart.tar + +...where ``GFSVER`` is the version of the GFS (e.g. "16.3"). + +For cycled mode there 18 tarballs to pull (9 for SDATE and 9 for GDATE (SDATE-06)): + +:: + + HPSS path: /NCEPPROD/hpssprod/runhistory/rhYYYY/YYYYMM/YYYYMMDD/ + +Tarballs per cycle: + +:: + + com_gfs_vGFSVER_gdas.YYYYMMDD_CC.gdas_restart.tar + com_gfs_vGFSVER_enkfgdas.YYYYMMDD_CC.enkfgdas_restart_grp1.tar + com_gfs_vGFSVER_enkfgdas.YYYYMMDD_CC.enkfgdas_restart_grp2.tar + com_gfs_vGFSVER_enkfgdas.YYYYMMDD_CC.enkfgdas_restart_grp3.tar + com_gfs_vGFSVER_enkfgdas.YYYYMMDD_CC.enkfgdas_restart_grp4.tar + com_gfs_vGFSVER_enkfgdas.YYYYMMDD_CC.enkfgdas_restart_grp5.tar + com_gfs_vGFSVER_enkfgdas.YYYYMMDD_CC.enkfgdas_restart_grp6.tar + com_gfs_vGFSVER_enkfgdas.YYYYMMDD_CC.enkfgdas_restart_grp7.tar + com_gfs_vGFSVER_enkfgdas.YYYYMMDD_CC.enkfgdas_restart_grp8.tar + +Go to the top of your ``COMROT/ROTDIR`` and pull the contents of all tarballs there. The tarballs already contain the needed directory structure. + +.. _warmstarts-preprod-parallels: + +******************************************* +Warm starts (from pre-production parallels) +******************************************* + +Recent pre-implementation parallel series was for GFS v16 (implemented March 2021). For the prior v15 (Q2FY19) see an additional table below. + +* **What resolution are warm-starts available for?** Warm-start ICs are saved at the resolution the model was run at (C768/C384) and can only be used to run at the same resolution combination. If you need to run a different resolution you will need to make your own cold-start ICs. See cold start section above. +* **What dates have warm-start files saved?** Unfortunately the frequency changed enough during the runs that it’s not easy to provide a definitive list easily. +* **What files?** All warm-starts are saved in separate tarballs which include “restart” in the name. You need to pull the entirety of each tarball, all files included in the restart tarballs are needed. +* **Where are these tarballs?** See below for the location on HPSS for each v16 pre-implementation parallel. +* **What tarballs do I need to grab for my experiment?** Tarballs from two cycles are required. The tarballs are listed below, where $CDATE is your starting cycle and $GDATE is one cycle prior. + + - Forecast-only + + ../$CDATE/gfs_restarta.tar + + ../$GDATE/gdas_restartb.tar + - Cycled w/EnKF + + ../$CDATE/gdas_restarta.tar + + ../$CDATE/enkfgdas_restarta_grp##.tar (where ## is 01 through 08) (note, older tarballs may include a period between enkf and gdas: "enkf.gdas") + + ../$GDATE/gdas_restartb.tar + + ../$GDATE/enkfgdas_restartb_grp##.tar (where ## is 01 through 08) (note, older tarballs may include a period between enkf and gdas: "enkf.gdas") + +* **Where do I put the warm-start initial conditions?** Extraction should occur right inside your COMROT. You may need to rename the enkf folder (enkf.gdas.$PDY -> enkfgdas.$PDY). + +Due to a recent change in the dycore, you may also need an additional offline step to fix the checksum of the NetCDF files for warm start. See the :ref:`Fix netcdf checksum section `. + +.. _retrospective: + +-------------------------------------------------------------- +GFSv16 (March 2021) Pre-Implementation Parallel HPSS Locations +-------------------------------------------------------------- + ++-----------------------------+---------------+--------------------------------------------------+ +| Time Period | Parallel Name | Archive Location on HPSS | +| | | PREFIX=/NCEPDEV/emc-global/5year/emc.glopara | ++-----------------------------+---------------+--------------------------------------------------+ +| 2019050106 ~ 2019060100 | v16retro0e | $PREFIX/WCOSS_D/gfsv16/v16retro0e/``yyyymmddhh`` | ++-----------------------------+---------------+--------------------------------------------------+ +| 2019060106 ~ 2019083118 | v16retro1e | $PREFIX/WCOSS_D/gfsv16/v16retro1e/``yyyymmddhh`` | ++-----------------------------+---------------+--------------------------------------------------+ +| 2019090100 ~ 2019110918 | v16retro2e | $PREFIX/WCOSS_D/gfsv16/v16retro2e/``yyyymmddhh`` | ++-----------------------------+---------------+--------------------------------------------------+ +| 2019111000 ~ 2020122200 | v16rt2 | $PREFIX/WCOSS_D/gfsv16/v16rt2/``yyyymmddhh`` | ++-----------------------------+---------------+--------------------------------------------------+ +| 2020122206 ~ implementation | v16rt2n | $PREFIX/WCOSS_D/gfsv16/v16rt2n/``yyyymmddhh`` | ++-----------------------------+---------------+--------------------------------------------------+ + +---------------------------------------------------------- +GFSv15 (Q2FY19) Pre-Implementation Parallel HPSS Locations +---------------------------------------------------------- + ++---------------------+-----------------+-----------------------------------------------------------+ +| Time Period | Parallel Name | Archive Location on HPSS | +| | | PREFIX=/NCEPDEV/emc-global/5year | ++---------------------+-----------------+-----------------------------------------------------------+ +| 20180525 - 20190612 | prfv3rt1 | $PREFIX/emc.glopara/WCOSS_C/Q2FY19/prfv3rt1 | ++---------------------+-----------------+-----------------------------------------------------------+ +| 20171125 - 20170831 | fv3q2fy19retro1 | $PREFIX/Fanglin.Yang/WCOSS_DELL_P3/Q2FY19/fv3q2fy19retro1 | ++---------------------+-----------------+-----------------------------------------------------------+ +| 20170525 - 20170625 | fv3q2fy19retro2 | $PREFIX/emc.glopara/WCOSS_C/Q2FY19/fv3q2fy19retro2 | ++---------------------+-----------------+-----------------------------------------------------------+ +| 20170802 - 20171130 | fv3q2fy19retro2 | $PREFIX/Fanglin.Yang/WCOSS_DELL_P3/Q2FY19/fv3q2fy19retro2 | ++---------------------+-----------------+-----------------------------------------------------------+ +| 20161125 - 20170531 | fv3q2fy19retro3 | $PREFIX/Fanglin.Yang/WCOSS_DELL_P3/Q2FY19/fv3q2fy19retro3 | ++---------------------+-----------------+-----------------------------------------------------------+ +| 20160817 - 20161130 | fv3q2fy19retro4 | $PREFIX/emc.glopara/WCOSS_DELL_P3/Q2FY19/fv3q2fy19retro4 | ++---------------------+-----------------+-----------------------------------------------------------+ +| 20160522 - 20160825 | fv3q2fy19retro4 | $PREFIX/emc.glopara/WCOSS_C/Q2FY19/fv3q2fy19retro4 | ++---------------------+-----------------+-----------------------------------------------------------+ +| 20151125 - 20160531 | fv3q2fy19retro5 | $PREFIX/emc.glopara/WCOSS_DELL_P3/Q2FY19/fv3q2fy19retro5 | ++---------------------+-----------------+-----------------------------------------------------------+ +| 20150503 - 20151130 | fv3q2fy19retro6 | $PREFIX/emc.glopara/WCOSS_DELL_P3/Q2FY19/fv3q2fy19retro6 | ++---------------------+-----------------+-----------------------------------------------------------+ + +.. _gfsv17-warmstarts: + +*************************************** +Using pre-GFSv17 warm starts for GFSv17 +*************************************** + +If a user wishes to run a high-res (C768C384L127) GFSv17 experiment with warm starts from the operational GFSv16 (or older) warm starts, they must process the initial condition files before using. See details below in the :ref:`Fix netcdf checksum section `. + +.. _gfsv17-checksum: + +------------------------- +Fix NetCDF checksum issue +------------------------- + +Due to a recent change in UFS, the setting to bypass the data verification no longer works, so you may also need an additional offline step to delete the checksum of the NetCDF files for warm start: + +On RDHPCS: + +:: + + module load nco/4.9.3 + +On WCOSS2: + +:: + + module load intel/19.1.3.304 + module load netcdf/4.7.4 + module load udunits/2.2.28 + module load gsl/2.7 + module load nco/4.7.9 + +And then on all platforms: + +:: + + cd $COMROT + for f in $(find ./ -name *tile*.nc); do echo $f; ncatted -a checksum,,d,, $f; done diff --git a/docs/source/jobs.rst b/docs/source/jobs.rst new file mode 100644 index 0000000000..0e3700bf20 --- /dev/null +++ b/docs/source/jobs.rst @@ -0,0 +1,85 @@ +################# +GFS Configuration +################# + +.. figure:: _static/GFS_v16_flowchart.png + + Schematic flow chart for GFS v16 in operations + +The sequence of jobs that are run for an end-to-end (analysis+forecast+post processing+verification) GFS configuration using the Global Workflow is shown above. The system utilizes a collection of scripts that perform the tasks for each step. + +For any cycle the system consists of two suites -- the "gdas" suite which provides the initial guess fields, and the "gfs" suite which creates the initial conditions and forecast of the system. As with the operational system, the gdas runs for each cycle (00, 06, 12, and 18 UTC), however, to save time and space in experiments, the gfs (right side of the diagram) is initially setup to run for only the 00 UTC cycle (See the "run GFS this cycle?" portion of the diagram). The option to run the GFS for all four cycles is available (see the ``gfs_cyc`` variable in configuration file). + +An experimental run is different from operations in the following ways: + +* Workflow manager: operations utilizes `ecFlow `__, while development currently utilizes `ROCOTO `__. Note, experiments can also be run using ecFlow on platforms with ecFlow servers established. + +* Dump step is not run as it has already been completed during the real-time production runs and dump data is available in the global dump archive on supported machines. + +* Addition steps in experimental mode: + + - archive (arch) + + - cleanup (cleanup) + +Downstream jobs (e.g. awips, gempak, etc.) are not included in the diagram. Those jobs are not normally run in developmental tests. + +============================= +Jobs in the GFS Configuration +============================= ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| JOB NAME | PURPOSE | ++===================+=======================================================================================================================+ +| anal | Runs the analysis. 1) Runs the atmospheric analysis (global_gsi) to produce analysis increments; 2) Update surface | +| | guess file via global_cycle to create surface analysis on tiles. | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| analcalc | Adds the analysis increments to previous cycle’s forecasts to produce atmospheric analysis files. Produces surface | +| | analysis file on Gaussian grid. | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| analdiag | Creates netCDF diagnostic files containing observation values, innovation (O-F), error, quality control, as well as | +| | other analysis-related quantities (cnvstat, radstat, ozstat files). | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| arch | Archives select files from the deterministic model and cleans up older data. | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| earcN/eamn | Archival script for EnKF: 1) Write select EnKF output to HPSS; 2) Copy select files to online archive; 3) Clean up | +| | EnKF temporary run directories; 4) Remove "old" EnKF files from rotating directory. | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| ecenN/ecmn | Recenter ensemble members around hi-res deterministic analysis. GFS v16 recenters ensemble member analysis. | +| | increments. | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| echgres | Runs chgres on full-resolution forecast for EnKF recentering (ecen). | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| ediag | Same as analdiag but for ensemble members. | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| efcsN/efmn | Run 9 hour forecast for each ensemble member. There are 80 ensemble members. Each efcs job sequentially processes 8 | +| | ensemble members, so there are 10 efcs jobs in total. | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| eobs | Data selection for EnKF update (eupd). | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| eposN/epmn | Generate ensemble mean atmospheric and surface forecast files. The ensemble spread is also computed for atmospheric | +| | forecast files. | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| esfc | Generate ensemble surface analyses on tiles. | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| eupd | Perform EnKF update (i.e., generate ensemble member analyses). | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| fcst | Runs the forecast (with or without one-way waves). | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| metpN | Runs MET/METplus verification via EMC_verif-global. | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| prep | Runs the data preprocessing prior to the analysis (storm relocation if needed and generation of prepbufr file). | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| postN | Runs the post processor. | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| waveinit | Runs wave initialization step. | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| waveprep | Runs wave prep step. | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| wavepostsbs | Runs wave post-processing side-by-side. | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| wavepostbndpnt | Runs wave post-processing for boundary points. | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| wavepostbndpntbll | Runs wave post-processing for boundary points bulletins. | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ +| wavepostpnt | Runs wave post-processing for points. | ++-------------------+-----------------------------------------------------------------------------------------------------------------------+ diff --git a/docs/source/monitor_rocoto.rst b/docs/source/monitor_rocoto.rst new file mode 100644 index 0000000000..1b8b2a3836 --- /dev/null +++ b/docs/source/monitor_rocoto.rst @@ -0,0 +1,136 @@ +================== +Monitor ROCOTO Run +================== + +Click `here `__ to view full rocoto documentation on GitHub + + +^^^^^^^^^^^^^^^^^^ +Using command line +^^^^^^^^^^^^^^^^^^ + +You can use Rocoto commands with arguments to check the status of your experiment. + +Start or continue a run: + +:: + + rocotorun -d /path/to/workflow/database/file -w /path/to/workflow/xml/file + +Check the status of the workflow: + +:: + + rocotostat -d /path/to/workflow/database/file -w /path/to/workflow/xml/file [-c YYYYMMDDCCmm,[YYYYMMDDCCmm,...]] [-t taskname,[taskname,...]] [-s] [-T] + +.. note:: + YYYYMMDDCCmm = YearMonthDayCycleMinute ...where mm/Minute is ’00’ for all cycles currently. + +Check the status of a job: + +:: + + rocotocheck -d /path/to/workflow/database/file -w /path/to/workflow/xml/file -c YYYYMMDDCCmm -t taskname + +Force a task to run (ignores dependencies - USE CAREFULLY!): + +:: + + rocotoboot -d /path/to/workflow/database/file -w /path/to/workflow/xml/file -c YYYYMMDDCCmm -t taskname + +Rerun task(s): + +:: + + rocotorewind -d /path/to/workflow/database/file -w /path/to/workflow/xml/file -c YYYYMMDDCCmm -t taskname + + (If job is currently queued or running rocoto will kill the job. Run rocotorun afterwards to fire off rewound task.) + +Set a task to complete (overwrites current state): + +:: + + rocotocomplete -d /path/to/workflow/database/file -w /path/to/workflow/xml/file -c YYYYMMDDCCmm -t taskname + +(Will not kill queued or running job, only update status.) + +Several dates and task names may be specified in the same command by adding more -c and -t options. However, lists are not allowed. + +^^^^^^^^^^^^^^^^^ +Use ROCOTO viewer +^^^^^^^^^^^^^^^^^ + +An alternative approach is to use a GUI that was designed to assist with monitoring global workflow experiments that use ROCOTO. It can be found under the ``workflow`` folder in global-workflow. + +***** +Usage +***** + +:: + + ./rocoto_viewer.py -d /path/to/workflow/database/file -w /path/to/workflow/xml/file + +.. note:: + Note 1: Terminal/window must be wide enough to display all experiment information columns, viewer will complain if not. + + Note 2: The viewer requires the full path to the database and xml files if you are not in your EXPDIR when you invoke it. + + Note 3: Only ``TERM=xterm`` is supported. You may wish to create a shell function to switch automatically if you are in a different terminal: + + Bash example: + + :: + + function rv { + oldterm=${TERM}; + export TERM='xterm'; + ${PATH_TO_VIEWER}/rocoto_viewer.py $@; + export TERM=${oldterm}; + } + +********************* +What the viewer shows +********************* + + .. figure:: _static/fv3_rocoto_view.png + + Sample output from Rocoto viewer + +The figure above shows a sample output from a Rocoto viewer for a running experiment. Where: + + * First column: cycle (YYYYMMDDCCmm, YYYY=year, MM=month, DD=day, CC=cycle hour, mm=minute) + * Second column: task name (a "<" symbol indicates a group/meta-task, click "x" when meta-task is selected to expand/collapse) + * Third column: job ID from scheduler + * Fourth column: job state (QUEUED, RUNNING, SUCCEEDED, FAILED, or DEAD) + * Fifth column: exit code (0 if all ended well) + * Sixth column: number of tries/attempts to run job (0 when not yet run or just rewound, 1 when run once successfully, 2+ for multiple tries up to max try value where job is considered DEAD) + * Seventh column: job duration in seconds + +************************** +How to navigate the viewer +************************** + +The rocoto viewer accepts both mouse and keyboard inputs. Click “h” for help menu and more options. + +Available viewer commands:: + + c = get information on selected job + r = rewind (rerun) selected job, group, or cycle + R = run rocotorun + b = boot (forcibly run) selected job or group + -> = right arrow key, advance viewer forward to next cycle + <- = left arrow key, advance viewer backward to previous cycle + Q = quit/exit viewer + +Advanced features: + + * Select multiple tasks at once + + - Click “Enter” on a task to select it, click on other tasks or use the up/down arrows to move to other tasks and click “Enter” to select them as well. + - When you next choose “r” for rewinding the pop-up window will now ask if you are sure you want to rewind all those selected tasks. + + * Rewind entire group or cycle + + - Group - While group/metatask is collapsed (<) click “r” to rewind whole group/metatask. + - Cycle - Use up arrow to move selector up past the first task until the entire left column is highlighted. Click “r” and the entire cycle will be rewound. + diff --git a/docs/source/noaa_csp.rst b/docs/source/noaa_csp.rst new file mode 100644 index 0000000000..66317efe92 --- /dev/null +++ b/docs/source/noaa_csp.rst @@ -0,0 +1,200 @@ +.. role:: red-text + +######################################## +Configuring NOAA Cloud Service Providers +######################################## + +The NOAA Cloud Service Providers (CSP) support the forecast-only +configurations for the global workflow. Once a suitable CSP instance +and cluster is defined/created, the global workflow may be executed as +on the other platforms discussed in the previous sections. In order +successfully execute the global-workflow, a suitable CSP cluster must +be created. Currently the global-workflow supports the following +instance and storage types as a function of CSP and forecast +resolution. + +.. list-table:: + :widths: auto + :header-rows: 1 + :align: center + + * - **Cloud Service Provider** + - **Global Workflow Resolution** + - **Global Workflow Application** + - **Instance Type** + - **Partition** + - **File System** + * - Amazon Web Services Parallel Works + - C48 + - ``ATM`` + - ``c5.9xlarge (36 vCPUs, 72 GB Memory, amd64)`` + - ``compute`` + - ``/lustre`` + +Instructions regarding configuring the respective CSP instance and +cluster follows. + +********************* +Login to the NOAA CSP +********************* + +Log in to the `NOAA CSP `_ and into +the resources configuration. The user should arrive at the following +screen. + +Note that the ``Username or email`` query is case-sensitive. The user +will then be prompted for their respective RSA token key using the +same application use for the other RDHPCS machines (i.e., Hera, Jet, +etc.,). + +.. image:: _static/noaacsp_login.png + +******************************* +Configure the NOAA CSP Instance +******************************* + +Once logged into the NOAA CSP, navigate to the :red-text:`RESOURCES` section +and click the ``+ Add Resource`` button in the upper-right corner as +illustrated below. + +.. image:: _static/noaacsp_instance_1.png + +Next, the mandatory attributes for the respective instance must be +defined as shown in the illustration below. + +.. image:: _static/noaacsp_instance_2.png + +The annotated attributes and their respective descriptions are as +follows. + +1. A unique name for the instance. Best practices suggest one that is + clear, concise, and relevant to the application. +2. A short description of the instance, i.e., ``This instance supports + this task.`` +3. Tag(s) describing and identifying the respective instance. These + allow for improved bookkeeping, especially when a user has multiple + or concurrent instance types. + +Next, the cluster is defined as shown in the following illustration. + +.. image:: _static/noaacsp_instance_3.png + +The NOAA Parallel Works initiative currently provides 2 CSPs for the +global-workflow; **AWS** (Amazon Web Services) and **Azure** +(Microsoft Azure). Existing clusters may also be modified. However +this is neither recommended or supported. + +Finally, when satisfied with the CSP instance configure, click ``Add +Resource`` as illustrated below. + +.. image:: _static/noaacsp_instance_4.png + +****************************** +Configure the NOAA CSP Cluster +****************************** + +Navigate to the tab and locate the CSP instance configured in the +previous section and click on the link, `globalworkflowdemo` for this +example. + +.. image:: _static/noaacsp_cluster_1.png + +The respective CSP cluster maybe then be configured. The mandatory +configuration attributes are as follows. + +- Availability zone; +- Disk size and storage type(s); +- Available compute and resource partitions. + +The following image describes the general settings for the respective +cluster. These attributes are specific to the user and the respective +user's group allocation. The right-most panel provides a breakdown of +the costs related to the requested compute and storage +resources. While there is a space to place an SSH key here, RDHPCS +recommends adding any SSH keys under the respective user's +``Account➡Authentication instead``. This will allow you to connect +from another machine instead of using the Parallel Works web terminal. + +.. image:: _static/noaacsp_cluster_2.png + +The following image describes the controller settings for a cluster +created for a C48 atmosphere forecast-only configuration. Here the +user must define the instance type (see the table above), the number +of image disks and the image disk sizes. + +.. image:: _static/noaacsp_cluster_3.png + +Next the partitions for the cluster may be defined. A partition +configuration for the aforementioned C48 atmosphere forecast-only +application is illustrated in the figure below. Note that the instance +type beneath ``Controller Settings`` and ``Partitions`` must be +identical. Other configurations are not supported by the +global-workflow team. Once the partitions are configured, click the +``+ Add Partition`` button in the upper-right corner. + +.. image:: _static/noaacsp_cluster_4.png + +For the storage do be allocated for the global-workflow application it +is suggested that the ``Mount Point`` be ``/lustre``. Once the storage +has been configured, click the ``+ Add Attached Storage`` button in +the upper-right corner. This is illustrated in the following image. + +.. image:: _static/noaacsp_cluster_5.png + +Finally, the following illustrates a JSON version of the cluster +configuration created from the steps above. When opening issues +related to the NOAA CSP global-workflow applications please include +the JSON content. + +.. image:: _static/noaacsp_cluster_6.png + +************************** +Using the NOAA CSP Cluster +************************** + +To activate the cluster, click the button circled in +:red-text:red. The cluster status is denoted by the color-coded button +on the right. The amount of time required to start the cluster is +variable and not immediate and may take several minutes for the +cluster to become. + +.. image:: _static/noaacsp_using_1.png + +For instances where a NOAA CSP cluster does not initialize, useful +output can be found beneath the ``Logs`` section beneath the +``Provision`` tab as illustrated below. Once again, when opening +issues related to the NOAA CSP cluster initialization please include +this information. + +.. image:: _static/noaacsp_using_2.png + +*************************** +Running the Global Workflow +*************************** + +The global-workflow configuration currently requires that all initial +conditions, observations, and fixed-files, are staged in the +appropriate paths prior to running the global-workflow. As suggested +above, it is strongly recommended the the user configure their +respective experiments to use the ``/lustre`` file system for the +``EXPDIR`` and ``ROTDIR`` contents. The ``/contrib`` file system is +suitable for compiling and linking the workflow components required of +the global-workflow. + +The software stack supporting the ``develop`` branch of the +global-workflow is provided for the user and is located beneath +``/contrib/emc_static/spack-stack``. The modules required for the +global-workflow execution may be loaded as follows. + +.. code-block:: bash + + user@host:$ module unuse /opt/cray/craype/default/modulefiles + user@host:$ module unuse /opt/cray/modulefiles + user@host:$ module use /contrib/emc_static/spack-stack/miniconda/modulefiles/miniconda + user@host:$ module load py39_4.12.0 + user@host:$ module load rocoto/1.3.3 + +The execution of the global-workflow should now follow the same steps +as those for the RDHPCS on-premise hosts. + + diff --git a/docs/source/output.rst b/docs/source/output.rst new file mode 100644 index 0000000000..5ccbbb0fc1 --- /dev/null +++ b/docs/source/output.rst @@ -0,0 +1,20 @@ +############### +Plotting Output +############### + +=============== +Analysis output +=============== + +The `GSI Monitor `_ repository contains a monitoring package called **RadMon**. This package reads the information on the radiances contained in the radstat files, such as quality control flags and departure statistics, and produces a webpage with many plots such as time series of data counts for a particular instrument. You can also directly compare two different experiments with this tool. If there are quantities that you are interested in but the RadMon package is not plotting them for you, you can use the existing RadMon code as a guide for how to read them and plot them yourself. The radstat files contain a wealth of information. + +The RadMon package can be found under the ``src/Radiance_Monitor`` folder within the `GSI Monitor`_. If checked out under global-workflow you will find it under ``gsi_monitor.fd/src/Radiance_Monitor``. + +If you have questions or issues getting the package to work for you please contact the developer of RadMon: Ed Safford (edward.safford@noaa.gov). + +=============== +Forecast output +=============== + +This section will be updated when we have some basic plotting utilities using EMCPY + diff --git a/docs/source/run.rst b/docs/source/run.rst new file mode 100644 index 0000000000..0d38b8d6a4 --- /dev/null +++ b/docs/source/run.rst @@ -0,0 +1,16 @@ +################### +Run Global Workflow +################### + +Here we will show how you can run an experiment using the Global Workflow. The Global workflow is regularly evolving and the underlying UFS-weather-model that it drives can run many different configurations. So this part of the document will be regularly updated. The workflow as it is configured today can be run as forecast only or cycled (forecast+Data Assimilation). Since cycled mode requires a number of Data Assimilation supporting repositories to be checked out, the instructions for the two modes from initial checkout stage will be slightly different. + +.. toctree:: + + clone.rst + init.rst + setup.rst + configure.rst + start.rst + monitor_rocoto.rst + view.rst + errors_faq.rst diff --git a/docs/source/setup.rst b/docs/source/setup.rst new file mode 100644 index 0000000000..be04aa5d96 --- /dev/null +++ b/docs/source/setup.rst @@ -0,0 +1,253 @@ +================ +Experiment Setup +================ + + Global workflow uses a set of scripts to help configure and set up the drivers (also referred to as Workflow Manager) that run the end-to-end system. While currently we use a `ROCOTO `__ based system and that is documented here, an `ecFlow `__ based systm is also under development and will be introduced to the Global Workflow when it is mature. To run the setup scripts, you need to have rocoto and a python3 environment with several specific libraries. The easiest way to guarantee this is to source the following script, which will load the necessary modules for your machine: + + :: + + # Note: this will wipe your existing lmod environment + source workflow/gw_setup.sh + + +^^^^^^^^^^^^^^^^^^^^^^^^ +Forecast-only experiment +^^^^^^^^^^^^^^^^^^^^^^^^ + +Scripts that will be used: + + * ``workflow/setup_expt.py`` + * ``workflow/setup_xml.py`` + +*************************************** +Step 1: Run experiment generator script +*************************************** + +The following command examples include variables for reference but users should not use environmental variables but explicit values to submit the commands. Exporting variables like EXPDIR to your environment causes an error when the python scripts run. Please explicitly include the argument inputs when running both setup scripts: + +:: + + cd workflow + ./setup_expt.py gfs forecast-only --idate $IDATE --edate $EDATE [--app $APP] [--start $START] [--gfs_cyc $GFS_CYC] [--resdet $RESDET] + [--pslot $PSLOT] [--configdir $CONFIGDIR] [--comrot $COMROT] [--expdir $EXPDIR] + +where: + + * ``gfs`` is the first positional argument that instructs the setup script to produce a GFS experiment directory + * ``forecast-only`` is the second positional argument that instructs the setup script to produce an experiment directory for forecast only experiments. + * ``$APP`` is the target application, one of: + + - ATM: atmosphere-only [default] + - ATMA: atm-aerosols + - ATMW: atm-wave (currently non-functional) + - S2S: atm-ocean-ice + - S2SA: atm-ocean-ice-aerosols + - S2SW: atm-ocean-ice-wave + - S2SWA: atm-ocean-ice-wave-aerosols + + * ``$START`` is the start type (warm or cold [default]) + * ``$IDATE`` is the initial start date of your run (first cycle CDATE, YYYYMMDDCC) + * ``$EDATE`` is the ending date of your run (YYYYMMDDCC) and is the last cycle that will complete + * ``$PSLOT`` is the name of your experiment [default: test] + * ``$CONFIGDIR`` is the path to the ``/config`` folder under the copy of the system you're using [default: $TOP_OF_CLONE/parm/config/] + * ``$RESDET`` is the FV3 resolution (i.e. 768 for C768) [default: 384] + * ``$GFS_CYC`` is the forecast frequency (0 = none, 1 = 00z only [default], 2 = 00z & 12z, 4 = all cycles) + * ``$COMROT`` is the path to your experiment output directory. DO NOT include PSLOT folder at end of path, it’ll be built for you. [default: $HOME (but do not use default due to limited space in home directories normally, provide a path to a larger scratch space)] + * ``$EXPDIR`` is the path to your experiment directory where your configs will be placed and where you will find your workflow monitoring files (i.e. rocoto database and xml file). DO NOT include PSLOT folder at end of path, it will be built for you. [default: $HOME] + +Examples: + +Atm-only: + +:: + + cd workflow + ./setup_expt.py gfs forecast-only --pslot test --idate 2020010100 --edate 2020010118 --resdet 384 --gfs_cyc 4 --comrot /some_large_disk_area/Joe.Schmo/comrot --expdir /some_safe_disk_area/Joe.Schmo/expdir + +Coupled: + +:: + + cd workflow + ./setup_expt.py gfs forecast-only --app S2SW --pslot coupled_test --idate 2013040100 --edate 2013040100 --resdet 384 --comrot /some_large_disk_area/Joe.Schmo/comrot --expdir /some_safe_disk_area/Joe.Schmo/expdir + +Coupled with aerosols: + +:: + + cd workflow + ./setup_expt.py gfs forecast-only --app S2SWA --pslot coupled_test --idate 2013040100 --edate 2013040100 --resdet 384 --comrot /some_large_disk_area/Joe.Schmo/comrot --expdir /some_safe_disk_area/Joe.Schmo/expdir + +**************************************** +Step 2: Set user and experiment settings +**************************************** + +Go to your EXPDIR and check/change the following variables within your config.base now before running the next script: + + * ACCOUNT + * HOMEDIR + * STMP + * PTMP + * ARCDIR (location on disk for online archive used by verification system) + * HPSSARCH (YES turns on archival) + * HPSS_PROJECT (project on HPSS if archiving) + * ATARDIR (location on HPSS if archiving) + +Some of those variables will be found within a machine-specific if-block so make sure to change the correct ones for the machine you'll be running on. + +Now is also the time to change any other variables/settings you wish to change in config.base or other configs. `Do that now.` Once done making changes to the configs in your EXPDIR go back to your clone to run the second setup script. See :doc:configure.rst for more information on configuring your run. + +************************************* +Step 3: Run workflow generator script +************************************* + +This step sets up the files needed by the Workflow Manager/Driver. At this moment only ROCOTO configurations are generated: + +:: + + ./setup_xml.py $EXPDIR/$PSLOT + +Example: + +:: + + ./setup_xml.py /some_safe_disk_area/Joe.Schmo/expdir/test + +Additional options for setting up Rocoto are available with `setup_xml.py -h` that allow users to change the number of failed tries, number of concurrent cycles and tasks as well as Rocoto's verbosity levels. + +**************************************** +Step 4: Confirm files from setup scripts +**************************************** + +You will now have a rocoto xml file in your EXPDIR ($PSLOT.xml) and a crontab file generated for your use. Rocoto uses CRON as the scheduler. If you do not have a crontab file you may not have had the rocoto module loaded. To fix this load a rocoto module and then rerun setup_xml.py script again. Follow directions for setting up the rocoto cron on the platform the experiment is going to run on. + +^^^^^^^^^^^^^^^^^ +Cycled experiment +^^^^^^^^^^^^^^^^^ + +Scripts that will be used: + + * ``workflow/setup_expt.py`` + * ``workflow/setup_xml.py`` + +*************************************** +Step 1) Run experiment generator script +*************************************** + +The following command examples include variables for reference but users should not use environmental variables but explicit values to submit the commands. Exporting variables like EXPDIR to your environment causes an error when the python scripts run. Please explicitly include the argument inputs when running both setup scripts: + +:: + + cd workflow + ./setup_expt.py gfs cycled --idate $IDATE --edate $EDATE [--app $APP] [--start $START] [--gfs_cyc $GFS_CYC] + [--resdet $RESDET] [--resens $RESENS] [--nens $NENS] [--cdump $CDUMP] + [--pslot $PSLOT] [--configdir $CONFIGDIR] [--comrot $COMROT] [--expdir $EXPDIR] [--icsdir $ICSDIR] + +where: + + * ``gfs`` is the first positional argument that instructs the setup script to produce a GFS experiment directory + * ``cycled`` is the second positional argument that instructs the setup script to produce an experiment directory for cycled experiments. + * ``$APP`` is the target application, one of: + + - ATM: atmosphere-only [default] + - ATMA: atm-aerosols + - ATMW: atm-wave (currently non-functional) + - S2S: atm-ocean-ice + - S2SA: atm-ocean-ice-aerosols + - S2SW: atm-ocean-ice-wave + - S2SWA: atm-ocean-ice-wave-aerosols + + * ``$IDATE`` is the initial start date of your run (first cycle CDATE, YYYYMMDDCC) + * ``$EDATE`` is the ending date of your run (YYYYMMDDCC) and is the last cycle that will complete + * ``$START`` is the start type (warm or cold [default]) + * ``$GFS_CYC`` is the forecast frequency (0 = none, 1 = 00z only [default], 2 = 00z & 12z, 4 = all cycles) + * ``$RESDET`` is the FV3 resolution of the deterministic forecast [default: 384] + * ``$RESENS`` is the FV3 resolution of the ensemble (EnKF) forecast [default: 192] + * ``$NENS`` is the number of ensemble members [default: 20] + * ``$CDUMP`` is the starting phase [default: gdas] + * ``$PSLOT`` is the name of your experiment [default: test] + * ``$CONFIGDIR`` is the path to the config folder under the copy of the system you're using [default: $TOP_OF_CLONE/parm/config/] + * ``$COMROT`` is the path to your experiment output directory. DO NOT include PSLOT folder at end of path, it’ll be built for you. [default: $HOME] + * ``$EXPDIR`` is the path to your experiment directory where your configs will be placed and where you will find your workflow monitoring files (i.e. rocoto database and xml file). DO NOT include PSLOT folder at end of path, it will be built for you. [default: $HOME] + * ``$ICSDIR`` is the path to the ICs for your run if generated separately. [default: None] + +.. [#] More Coupled configurations in cycled mode are currently under development and not yet available + +Example: + +:: + + cd workflow + ./setup_expt.py gfs cycled --pslot test --configdir /home/Joe.Schmo/git/global-workflow/parm/config --idate 2020010100 --edate 2020010118 --comrot /some_large_disk_area/Joe.Schmo/comrot --expdir /some_safe_disk_area/Joe.Schmo/expdir --resdet 384 --resens 192 --nens 80 --gfs_cyc 4 + +Example ``setup_expt.py`` on Orion: + +:: + + Orion-login-3$ ./setup_expt.py gfs cycled --pslot test --idate 2022010118 --edate 2022010200 --resdet 192 --resens 96 --nens 80 --comrot /work/noaa/stmp/jschmo/comrot --expdir /work/noaa/global/jschmo/expdir + EDITED: /work/noaa/global/jschmo/expdir/test/config.base as per user input. + EDITED: /work/noaa/global/jschmo/expdir/test/config.aeroanl as per user input. + EDITED: /work/noaa/global/jschmo/expdir/test/config.ocnanal as per user input. + +The message about the config.base.default is telling you that you are free to delete it if you wish but it’s not necessary to remove. Your resulting config.base was generated from config.base.default and the default one is there for your information. + +What happens if I run ``setup_expt.py`` again for an experiment that already exists? + +:: + + Orion-login-3$ ./setup_expt.py gfs cycled --pslot test --idate 2022010118 --edate 2022010200 --resdet 192 --resens 96 --nens 80 --comrot /work/noaa/stmp/jschmo/comrot --expdir /work/noaa/global/jschmo/expdir + + directory already exists in /work/noaa/stmp/jschmo/comrot/test + + Do you wish to over-write [y/N]: y + + directory already exists in /work/noaa/global/jschmo/expdir/test + + Do you wish to over-write [y/N]: y + EDITED: /work/noaa/global/jschmo/expdir/test/config.base as per user input. + EDITED: /work/noaa/global/jschmo/expdir/test/config.aeroanl as per user input. + EDITED: /work/noaa/global/jschmo/expdir/test/config.ocnanal as per user input. + +Your ``COMROT`` and ``EXPDIR`` will be deleted and remade. Be careful with this! + +**************************************** +Step 2: Set user and experiment settings +**************************************** + +Go to your EXPDIR and check/change the following variables within your config.base now before running the next script: + + * ACCOUNT + * HOMEDIR + * STMP + * PTMP + * ARCDIR (location on disk for online archive used by verification system) + * HPSSARCH (YES turns on archival) + * HPSS_PROJECT (project on HPSS if archiving) + * ATARDIR (location on HPSS if archiving) + +Some of those variables will be found within a machine-specific if-block so make sure to change the correct ones for the machine you'll be running on. + +Now is also the time to change any other variables/settings you wish to change in config.base or other configs. `Do that now.` Once done making changes to the configs in your EXPDIR go back to your clone to run the second setup script. See :doc: configure.rst for more information on configuring your run. + + +************************************* +Step 3: Run workflow generator script +************************************* + +This step sets up the files needed by the Workflow Manager/Driver. At this moment only ROCOTO configurations are generated: + +:: + + ./setup_xml.py $EXPDIR/$PSLOT + +Example: + +:: + + ./setup_xml.py /some_safe_disk_area/Joe.Schmo/expdir/test + +**************************************** +Step 4: Confirm files from setup scripts +**************************************** + +You will now have a rocoto xml file in your EXPDIR ($PSLOT.xml) and a crontab file generated for your use. Rocoto uses CRON as the scheduler. If you do not have a crontab file you may not have had the rocoto module loaded. To fix this load a rocoto module and then rerun ``setup_xml.py`` script again. Follow directions for setting up the rocoto cron on the platform the experiment is going to run on. diff --git a/docs/source/start.rst b/docs/source/start.rst new file mode 100644 index 0000000000..7dc093e8a4 --- /dev/null +++ b/docs/source/start.rst @@ -0,0 +1,48 @@ +============== +Start your run +============== + +Make sure a rocoto module is loaded: ``module load rocoto`` + +If needed check for available rocoto modules on machine: ``module avail rocoto`` or ``module spider rocoto`` + +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Start your run from within your EXPDIR +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +:: + + rocotorun -d $PSLOT.db -w $PSLOT.xml + +The first jobs of your run should now be queued or already running (depending on machine traffic). How exciting! + +You'll now have a "logs" folder in both your COMROT and EXPDIR. The EXPDIR log folder contains workflow log files (e.g. rocoto command results) and the COMROT log folder will contain logs for each job (previously known as dayfiles). + +^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Set up your experiment cron +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. note:: + Orion and Hercules currently only support cron on Orion-login-1 and Hercules-login-1, respectively. Cron support for other login nodes is coming in the future. + +:: + + crontab -e + +or + +:: + + crontab $PSLOT.crontab + +.. warning:: + + The ``crontab $PSLOT.crontab`` command will overwrite existing crontab file on your login node. If running multiple crons recommend editing crontab file with ``crontab -e`` command. + +Check your crontab settings:: + + crontab -l + +Crontab uses following format:: + + */5 * * * * /path/to/rocotorun -w /path/to/workflow/definition/file -d /path/to/workflow/database/file diff --git a/docs/source/view.rst b/docs/source/view.rst new file mode 100644 index 0000000000..3093755e9a --- /dev/null +++ b/docs/source/view.rst @@ -0,0 +1,46 @@ +====================== +View Experiment output +====================== + +The output from your run will be found in the ``COMROT/ROTDIR`` you established. This is also where you placed your initial conditions. Within your ``COMROT`` you will have the following directory structure (based on the type of experiment you run): + +^^^^^^^^^^^^^ +Forecast-only +^^^^^^^^^^^^^ + +:: + + gfs.YYYYMMDD/CC/atmos <- contains deterministic long forecast gfs inputs/outputs (atmosphere) + gfs.YYYYMMDD/CC/wave <- contains deterministic long forecast gfs inputs/outputs (wave) + logs/ <- logs for each cycle in the run + vrfyarch/ <- contains files related to verification and archival + +^^^^^^ +Cycled +^^^^^^ + +:: + + enkfgdas.YYYYMMDD/CC/mem###/atmos <- contains EnKF inputs/outputs for each cycle and each member + gdas.YYYYMMDD/CC/atmos <- contains deterministic gdas inputs/outputs (atmosphere) + gdas.YYYYMMDD/CC/wave <- contains deterministic gdas inputs/outputs (wave) + gfs.YYYYMMDD/CC/atmos <- contains deterministic long forecast gfs inputs/outputs (atmosphere) + gfs.YYYYMMDD/CC/wave <- contains deterministic long forecast gfs inputs/outputs (wave) + logs/ <- logs for each cycle in the run + vrfyarch/ <- contains files related to verification and archival + +Here is an example ``COMROT`` for a cycled run as it may look several cycles in (note the archival steps remove older cycle folders as the run progresses): + +:: + + -bash-4.2$ ll /scratch1/NCEPDEV/stmp4/Joe.Schmo/comrot/testcyc192 + total 88 + drwxr-sr-x 4 Joe.Schmo stmp 4096 Oct 22 04:50 enkfgdas.20190529 + drwxr-sr-x 4 Joe.Schmo stmp 4096 Oct 22 07:20 enkfgdas.20190530 + drwxr-sr-x 6 Joe.Schmo stmp 4096 Oct 22 03:15 gdas.20190529 + drwxr-sr-x 4 Joe.Schmo stmp 4096 Oct 22 07:15 gdas.20190530 + drwxr-sr-x 6 Joe.Schmo stmp 4096 Oct 22 03:15 gfs.20190529 + drwxr-sr-x 4 Joe.Schmo stmp 4096 Oct 22 07:15 gfs.20190530 + drwxr-sr-x 120 Joe.Schmo stmp 12288 Oct 22 07:15 logs + drwxr-sr-x 13 Joe.Schmo stmp 4096 Oct 22 07:07 vrfyarch + diff --git a/docs/source/wave.rst b/docs/source/wave.rst new file mode 100644 index 0000000000..7b4f7471b8 --- /dev/null +++ b/docs/source/wave.rst @@ -0,0 +1,138 @@ +============== +Wave Component +============== + +The wave model, WAVEWATCH III, is one component of the forecast model. This documentation is a work in progress +and currently contains information about how to add a new grid to the workflow. + +^^^^^^^^^^^^^^^^^^^^^^ +Adding a new wave Grid +^^^^^^^^^^^^^^^^^^^^^^ + +******************** +Naming the Wave Grid +******************** + +The naming convention of the wave grid within the workflow is expected to follow a convention of region underscore resolution. +Here are several regional naming conventions: + ++-----------+-----------------------+ +| Acronym | Description | ++===========+=======================+ +| glo | Global domain | ++-----------+-----------------------+ +| ak | Alaska | ++-----------+-----------------------+ +| ao or aoc | Arctic Ocean | ++-----------+-----------------------+ +| at | Atlantic | ++-----------+-----------------------+ +| ep | East Pacific | ++-----------+-----------------------+ +| gnh | Global Northern Ocean | ++-----------+-----------------------+ +| gsh | Global Southern Ocean | ++-----------+-----------------------+ +| so | Southern Ocean | ++-----------+-----------------------+ +| wc | West Coast | ++-----------+-----------------------+ + + +Here are examples of resolution names: + ++---------+----------------------+ +| Acronym | Description | ++=========+======================+ +| 15m | 15 min | ++---------+----------------------+ +| 15mxt | 15 min extended grid | ++---------+----------------------+ +| 025 | 0.25 degrees | ++---------+----------------------+ +| 9km | 9 km | ++---------+----------------------+ + +This new grid name will now be referred to as ${WAVEGRID} for the following documentation. + +**************** +Adding Fix Files +**************** + +The following is a table of fix files to be added with a new grid. + ++-------------------------------------+----------------------------------------+--------------------------------------------------+ +| Name of File | File Description | Notes/Requriements | ++=====================================+========================================+==================================================+ +| ww3_grid.inp_${WAVEGRID} | Grid Input File | Required for all new grids | ++-------------------------------------+----------------------------------------+--------------------------------------------------+ +| mesh.${WAVEGRID}.nc | Mesh grid file used in forecast | This is required if this is a computational grid | ++-------------------------------------+----------------------------------------+--------------------------------------------------+ +| ww3_gint.WHTGRIDINT.bin.${WAVEGRID} | Weight file for ww3_gint interpolation | Required if output is interpolated to this grid | ++-------------------------------------+----------------------------------------+--------------------------------------------------+ + + +While the creation of these files are generally considered out of scope of this document here are some additional information: + +* The ww3_grid.inp_${WAVEGRID} for structured grids can be created with https://github.com/noaA-EMC/gridgen +* The ww3_grid.inp_${WAVEGRID} file must be a single file for the workflow +* Instructions for creating mesh.${WAVEGRID}.nc can be found at https://ufs-weather-model.readthedocs.io/en/latest/InputsOutputs.html#ww3 +* The ww3_gint.WHTGRIDINT.bin.${WAVEGRID} can be created by running the ww3_gint routine as desired and then saved. + +Once the new fix files have been created, :ref:`open an issue to have the master fix file directory updated`. This is a separate step than the process to update the workflow below. + +******************************** +Updating Config and Script Files +******************************** + +You will need to update the following files: + +* parm/config/*/config.ufs +* parm/config/*/config.wave +* scripts/exgfs_wave_post_gridded_sbs.sh + +You will need to add the following files: + +* parm/wave/ww3_grib2.${WAVEGRID}.inp.tmpl +* parm/wave/${WAVEGRID}_interp.inp.tmpl + +For config.ufs: + +If this is a computational grid, you will need to update this file. If this is a new output file you can skip this update. +There are two sections to update: +1. Add the new grid as a possible ww3 resolution at the top of the file +2. In the WW3 specific settings section, add a case for the new grid and define ntasks_ww3 (number of tasks for WW3) and +if the grid requires a different value of nthreads_ww3 (number of threads) add that to the grid specific case as well. + +For config.wave: + +If this is a computational grid, add a section for the newly added grid in the possible cases for waveGRD, adding the appropriate +non-default values for this specific grid. If this is a new output grid, then update all of the waveGRD cases for waveinterpGRD as +needed. Please note that if you change the default wave grid, that initial conditions must be staged for this IC for all ICs used +in global-workflow testing. Ideally ICs for the grids being used for testing will be provided even if its not the default grid. + + + +For scripts/exgfs_wave_post_gridded_sbs.sh and the inp.tmpl files: + +There are two case settings for either interpolated grid output or grib output for a computational grid that should be updated to +add to the possible cases for this new grid as appropriate. If it's a new interpolated grid, you will also need to add a +parm/wave/${WAVEGRID}_interp.inp.tmpl file. See WW3/model/inp/ww3_gint.inp for information about this file. If it's a new +computational grid or just an output grid you will need a new parm/wave/ww3_grib2.${WAVEGRID}.inp.tmpl file. See the file +WW3/model/inp/ww3_grib.inp for more infomration about this input file. The other existing templated input files can be used +as guides to create these new files. + +***************************** +Updates for New Product Grids +***************************** + +If this is a new file for AWIPS Products, additional updates are likely required. + +************** +New Staged ICs +************** + +Depending on the desired use of the new grid, or if the default grid is changed, staged initial conditions for use in +workflow testing will also be needed. + +For example, C384 S2SW need an IC for 20130101 00z and low resolution tests need an IC for 20210323 12z. diff --git a/driver/gdas/para_config.gdas_analysis_high b/driver/gdas/para_config.gdas_analysis_high deleted file mode 100644 index 053c201541..0000000000 --- a/driver/gdas/para_config.gdas_analysis_high +++ /dev/null @@ -1,33 +0,0 @@ -# Set variables -export NWROOT=$NWTEST -export COM_IN=/gpfs/hps/ptmp/emc.glopara/com2/gfs/para -export COM_OUT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/test -export SENDDBN=YES -export SAVEGES=YES -export SENDCOM=YES -export GETGES_NWG=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export gesenvir=para -export GETGES_COM=/gpfs/hps/ptmp/emc.glopara/com2 -export GESROOT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export KEEPDATA=NO - - -# Set paths -export HOMEgsm=$NWTEST/global_shared.${global_shared_ver} - - -# Set fix files -if [ $CDATE -ge 2017030800 -a $CDATE -lt 2017031312 ] ; then - SATINFO=/gpfs/hps/emc/global/noscrub/emc.glopara/para_gfs/prnemsrn/global_satinfo.txt -fi - - -# Set scripts -GETGESSH=$HOMEgsm/ush/getges.sh - - -# Set executables - - -# Dev para jobs -export ERRSCRIPT='eval [[ $err = 0 ]]' diff --git a/driver/gdas/para_config.gdas_enkf_fcst b/driver/gdas/para_config.gdas_enkf_fcst deleted file mode 100755 index 34d6551cb9..0000000000 --- a/driver/gdas/para_config.gdas_enkf_fcst +++ /dev/null @@ -1,66 +0,0 @@ -# Set variables -export NWROOT=$NWTEST -export COM_IN=/gpfs/hps/ptmp/emc.glopara/com2/gfs/para -export COM_OUT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/test -export SENDDBN=YES -export SAVEGES=NO -export GETGES_NWG=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export gesenvir=para -export GETGES_COM=/gpfs/hps/ptmp/emc.glopara/com2 -export GESROOT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export KEEPDATA=NO - - -# Set paths -export HOMEgdas=$NWTEST/gdas.${gdas_ver} -export HOMEgsm=$NWTEST/global_shared.${global_shared_ver} - - -# Set fix files - - -# Set scripts - - -# Set executables - - -# Dev para jobs -export ERRSCRIPT='eval [[ $err = 0 ]]' - - -# Set beginning and ending ensemble member on EnKF group. -if [[ $ENSGRP -eq 1 ]]; then - export ENSBEG=1 - export ENSEND=8 -elif [[ $ENSGRP -eq 2 ]]; then - export ENSBEG=9 - export ENSEND=16 -elif [[ $ENSGRP -eq 3 ]]; then - export ENSBEG=17 - export ENSEND=24 -elif [[ $ENSGRP -eq 4 ]]; then - export ENSBEG=25 - export ENSEND=32 -elif [[ $ENSGRP -eq 5 ]]; then - export ENSBEG=33 - export ENSEND=40 -elif [[ $ENSGRP -eq 6 ]]; then - export ENSBEG=41 - export ENSEND=48 -elif [[ $ENSGRP -eq 7 ]]; then - export ENSBEG=49 - export ENSEND=56 -elif [[ $ENSGRP -eq 8 ]]; then - export ENSBEG=57 - export ENSEND=64 -elif [[ $ENSGRP -eq 9 ]]; then - export ENSBEG=65 - export ENSEND=72 -elif [[ $ENSGRP -eq 10 ]]; then - export ENSBEG=73 - export ENSEND=80 -else - echo "***ERROR*** INVALID ENSGRP=$ENSGRP" - exit -fi diff --git a/driver/gdas/para_config.gdas_enkf_inflate_recenter b/driver/gdas/para_config.gdas_enkf_inflate_recenter deleted file mode 100755 index fab9c4a333..0000000000 --- a/driver/gdas/para_config.gdas_enkf_inflate_recenter +++ /dev/null @@ -1,28 +0,0 @@ -# Set variables -export NWROOT=$NWTEST -export COM_IN=/gpfs/hps/ptmp/emc.glopara/com2/gfs/para -export COM_OUT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/test -export SENDDBN=YES -export SAVEGES=NO -export SENDCOM=YES -export GETGES_NWG=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export gesenvir=para -export GETGES_COM=/gpfs/hps/ptmp/emc.glopara/com2 -export GESROOT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export KEEPDATA=NO - - -# Set paths - - -# Set fix files - - -# Set scripts - - -# Set executables - - -# Dev para jobs -export ERRSCRIPT='eval [[ $err = 0 ]]' diff --git a/driver/gdas/para_config.gdas_enkf_innovate_obs b/driver/gdas/para_config.gdas_enkf_innovate_obs deleted file mode 100755 index a2827e1dfb..0000000000 --- a/driver/gdas/para_config.gdas_enkf_innovate_obs +++ /dev/null @@ -1,100 +0,0 @@ -# Set variables -export NWROOT=$NWTEST -export COM_IN=/gpfs/hps/ptmp/emc.glopara/com2/gfs/para -export COM_OUT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/test -export SENDDBN=YES -export SAVEGES=NO -export SENDCOM=NO -export GETGES_NWG=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export gesenvir=para -export GETGES_COM=/gpfs/hps/ptmp/emc.glopara/com2 -export GESROOT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export KEEPDATA=NO - - -# Set paths -export HOMEgsm=$NWTEST/global_shared.${global_shared_ver} - - -# Set fix files -if [ $CDATE -ge 2017030800 -a $CDATE -lt 2017031312 ] ; then - SATINFO=/gpfs/hps/emc/global/noscrub/emc.glopara/para_gfs/prnemsrn/global_satinfo.txt -fi - - -# Set scripts -GETGESSH=$HOMEgsm/ush/getges.sh - - -# Set executables - - -# Dev para jobs -export ERRSCRIPT='eval [[ $err = 0 ]]' - - -# Set beginning and ending ensemble member on EnKF group. -if [[ $ENSGRP -eq 1 ]]; then - export ENSBEG=1 - export ENSEND=4 -elif [[ $ENSGRP -eq 2 ]]; then - export ENSBEG=5 - export ENSEND=8 -elif [[ $ENSGRP -eq 3 ]]; then - export ENSBEG=9 - export ENSEND=12 -elif [[ $ENSGRP -eq 4 ]]; then - export ENSBEG=13 - export ENSEND=16 -elif [[ $ENSGRP -eq 5 ]]; then - export ENSBEG=17 - export ENSEND=20 -elif [[ $ENSGRP -eq 6 ]]; then - export ENSBEG=21 - export ENSEND=24 -elif [[ $ENSGRP -eq 7 ]]; then - export ENSBEG=25 - export ENSEND=28 -elif [[ $ENSGRP -eq 8 ]]; then - export ENSBEG=29 - export ENSEND=32 -elif [[ $ENSGRP -eq 9 ]]; then - export ENSBEG=33 - export ENSEND=36 -elif [[ $ENSGRP -eq 10 ]]; then - export ENSBEG=37 - export ENSEND=40 -elif [[ $ENSGRP -eq 11 ]]; then - export ENSBEG=41 - export ENSEND=44 -elif [[ $ENSGRP -eq 12 ]]; then - export ENSBEG=45 - export ENSEND=48 -elif [[ $ENSGRP -eq 13 ]]; then - export ENSBEG=49 - export ENSEND=52 -elif [[ $ENSGRP -eq 14 ]]; then - export ENSBEG=53 - export ENSEND=56 -elif [[ $ENSGRP -eq 15 ]]; then - export ENSBEG=57 - export ENSEND=60 -elif [[ $ENSGRP -eq 16 ]]; then - export ENSBEG=61 - export ENSEND=64 -elif [[ $ENSGRP -eq 17 ]]; then - export ENSBEG=65 - export ENSEND=68 -elif [[ $ENSGRP -eq 18 ]]; then - export ENSBEG=69 - export ENSEND=72 -elif [[ $ENSGRP -eq 19 ]]; then - export ENSBEG=73 - export ENSEND=76 -elif [[ $ENSGRP -eq 20 ]]; then - export ENSBEG=77 - export ENSEND=80 -else - echo "***ERROR*** INVALID ENSGRP=$ENSGRP" - exit -fi diff --git a/driver/gdas/para_config.gdas_enkf_post b/driver/gdas/para_config.gdas_enkf_post deleted file mode 100755 index 58d68cc3e1..0000000000 --- a/driver/gdas/para_config.gdas_enkf_post +++ /dev/null @@ -1,29 +0,0 @@ -# Set variables -export NWROOT=$NWTEST -export COM_IN=/gpfs/hps/ptmp/emc.glopara/com2/gfs/para -export COM_OUT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/test -export SENDDBN=YES -export SAVEGES=NO -export SENDCOM=YES -export GETGES_NWG=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export gesenvir=para -export GETGES_COM=/gpfs/hps/ptmp/emc.glopara/com2 -export GESROOT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export KEEPDATA=NO - - -# Set paths -export HOMEgsm=$NWTEST/global_shared.${global_shared_ver} - - -# Set fix files - - -# Set scripts - - -# Set executables - - -# Dev para jobs -export ERRSCRIPT='eval [[ $err = 0 ]]' diff --git a/driver/gdas/para_config.gdas_enkf_select_obs b/driver/gdas/para_config.gdas_enkf_select_obs deleted file mode 100755 index 04121afe92..0000000000 --- a/driver/gdas/para_config.gdas_enkf_select_obs +++ /dev/null @@ -1,33 +0,0 @@ -# Set variables -export NWROOT=$NWTEST -export COM_IN=/gpfs/hps/ptmp/emc.glopara/com2/gfs/para -export COM_OUT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/test -export SENDDBN=YES -export SAVEGES=NO -export SENDCOM=NO -export GETGES_NWG=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export gesenvir=para -export GETGES_COM=/gpfs/hps/ptmp/emc.glopara/com2 -export GESROOT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export KEEPDATA=NO - - -# Set paths -export HOMEgsm=$NWTEST/global_shared.${global_shared_ver} - - -# Set fix files -if [ $CDATE -ge 2017030800 -a $CDATE -lt 2017031312 ] ; then - SATINFO=/gpfs/hps/emc/global/noscrub/emc.glopara/para_gfs/prnemsrn/global_satinfo.txt -fi - - -# Set scripts -GETGESSH=$HOMEgsm/ush/getges.sh - - -# Set executables - - -# Dev para jobs -export ERRSCRIPT='eval [[ $err = 0 ]]' diff --git a/driver/gdas/para_config.gdas_enkf_update b/driver/gdas/para_config.gdas_enkf_update deleted file mode 100755 index 03b5385f8d..0000000000 --- a/driver/gdas/para_config.gdas_enkf_update +++ /dev/null @@ -1,33 +0,0 @@ -# Set variables -export NWROOT=$NWTEST -export COM_IN=/gpfs/hps/ptmp/emc.glopara/com2/gfs/para -export COM_OUT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/test -export SENDDBN=YES -export SAVEGES=NO -export SENDCOM=YES -export GETGES_NWG=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export gesenvir=para -export GETGES_COM=/gpfs/hps/ptmp/emc.glopara/com2 -export GESROOT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export KEEPDATA=NO - - -# Set paths -export HOMEgsm=$NWTEST/global_shared.${global_shared_ver} - - -# Set fix files -if [ $CDATE -ge 2017030800 -a $CDATE -lt 2017031312 ] ; then - SATINFO=/gpfs/hps/emc/global/noscrub/emc.glopara/para_gfs/prnemsrn/global_satinfo.txt -fi - - -# Set scripts -export GETGESSH=$HOMEgsm/ush/getges.sh - - -# Set executables - - -# Dev para jobs -export ERRSCRIPT='eval [[ $err = 0 ]]' diff --git a/driver/gdas/para_config.gdas_forecast_high b/driver/gdas/para_config.gdas_forecast_high deleted file mode 100755 index 4a25ae632a..0000000000 --- a/driver/gdas/para_config.gdas_forecast_high +++ /dev/null @@ -1,32 +0,0 @@ -# Set variables -export NWROOT=$NWTEST -export COM_IN=/gpfs/hps/ptmp/emc.glopara/com2/gfs/para -export COM_OUT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/test -export SENDDBN=YES -export SAVEGES=NO -export GETGES_NWG=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export gesenvir=para -export GETGES_COM=/gpfs/hps/ptmp/emc.glopara/com2 -export GESROOT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export gespath=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export KEEPDATA=NO - - -# Set paths -export HOMEgdas=$NWTEST/gdas.${gdas_ver} -export HOMEgsm=$NWTEST/global_shared.${global_shared_ver} - - -# Set fix files - - -# Set scripts - - -# Set executables - - -# Dev para jobs -export ERRSCRIPT='eval [[ $err = 0 ]]' - - diff --git a/driver/gdas/para_config.gdas_gldas b/driver/gdas/para_config.gdas_gldas deleted file mode 100755 index a766601e22..0000000000 --- a/driver/gdas/para_config.gdas_gldas +++ /dev/null @@ -1,63 +0,0 @@ -################################################################## -# This parameter file set up the environment variables used in -# the J-Job scripts to run the gldas land analsis system -################################################################## -# module load for untility in run_all of lsf directory - -export GDATE=${PDY:-20191025} -export cyc=${cyc:-00} -export model=${model:-noah} -export QUEUE=debug -export PROJECT_CODE=NLDAS-T2O - -#export workdir=/gpfs/dell2/emc/modeling/noscrub/$LOGNAME/global-workflow -export workdir=${workdir:-$HOMEgfs} - -export gldas_ver=${gldas_ver:-v2.3.0} -export HOMEgldas=${HOMEgldas:-$workdir/sorc/gldas.fd} -export FIXgldas=${FIXgldas:-$HOMEgldas/fix} -export PARMgldas=${PARMgldas:-$HOMEgldas/parm} -export EXECgldas=${EXECgldas:-$HOMEgldas/exec} -export USHgldas=${USHgldas:-$HOMEgldas/ush} - -#export FIXgldas=/gpfs/dell2/emc/modeling/noscrub/emc.glopara/git/fv3gfs/fix/fix_gldas -#export topodir=/gpfs/dell2/emc/modeling/noscrub/emc.glopara/git/fv3gfs/fix/fix_fv3_gmted2010/C768/ -export FIXgldas=${FIXgldas:-$workdir/fix/fix_gldas} -export topodir=${topodir:-$workdir/fix/fix_fv3_gmted2010/C768} - - -export COM_IN=${COM_IN:-$workdir/com/gldas.${gldas_ver}} -export COM_OUT=${COM_OUT:-$COM_IN} - -# set up com and decom directory used -# GFS OPS -if [ ${model} == 'noah' ]; then -export COMROOT=/gpfs/dell1/nco/ops/com -export DCOMROOT=/gpfs/dell1/nco/ops/dcom -fi - -##GFS Retrospective test -#if [ ${model} == 'noah' ]; then -#export COMROOT=/gpfs/dell2/emc/retros/noscrub/Youlong.Xia/com -#export DCOMROOT=/gpfs/dell2/emc/retros/noscrub/Youlong.Xia/com -#fi - -# gfsv16 systhesis test -if [ ${model} == 'noahmp' ]; then -export COMROOT=/gpfs/dell2/emc/retros/noscrub/Youlong.Xia/com -export DCOMROOT=/gpfs/dell2/emc/retros/noscrub/Youlong.Xia/com -fi - -export COMINgdas=${COMINgdas:-${COMROOT}/gfs/prod} -export DCOMIN=${DCOM_IN:-${DCOMROOT}/prod} - - -#export DATA_IN=/gpfs/dell2/ptmp/$LOGNAME/tmpnwprd -#export jlogfile=$DATA_IN/jlogfile -export DATA=/gpfs/dell2/ptmp/$LOGNAME/tmpnwprd -export jlogfile=$DATA/jlogfile - -export SENDCOM=${SENDCOM:-YES} -export SENDECF=${SENDECF:-NO} -export SENDDBN=${SENDDBN:-NO} - diff --git a/driver/gdas/run_JGDAS_NCEPPOST.sh b/driver/gdas/run_JGDAS_NCEPPOST.sh deleted file mode 100755 index ecacffc177..0000000000 --- a/driver/gdas/run_JGDAS_NCEPPOST.sh +++ /dev/null @@ -1,110 +0,0 @@ -#!/bin/sh - -#BSUB -o out_gdas_nemsio_p25_para_mpiio.%J -#BSUB -e err_gdas_nemsio_p25_para_mpiio.%J -#BSUB -J NEMSPOST -#BSUB -extsched 'CRAYLINUX[]' -R '1*{select[craylinux && !vnode]} + 96*{select[craylinux && vnode]span[ptile=24] cu[type=cabinet]}' -#BSUB -W 00:40 -#BSUB -q dev -#BSUB -P GFS-T2O -#BSUB -M 1000 -#BSUB -cwd /gpfs/hps/emc/global/noscrub/Hui-Ya.Chuang/nems_sample_output_T1534 - -set -x - -# specify user's own post working directory for testing -export svndir=/gpfs/hps/emc/global/noscrub/Hui-Ya.Chuang/post_trunk -export MP_LABELIO=yes -export OMP_NUM_THREADS=1 -export KMP_AFFINITY=disabled -export OMP_STACKSIZE=2048M -export MP_LABELIO=yes -export MP_STDOUTMODE=ordered - -############################################ -# Loading module -############################################ -. $MODULESHOME/init/ksh -module load PrgEnv-intel ESMF-intel-haswell/3_1_0rp5 cfp-intel-sandybridge iobuf craype-hugepages2M craype-haswell -#module load cfp-intel-sandybridge/1.1.0 -module use /gpfs/hps/nco/ops/nwprod/modulefiles -module load prod_envir/1.1.0 -module load prod_util/1.0.4 -module load grib_util/1.0.3 - -# specify PDY (the cycle start yyyymmdd) and cycle -export PDY=20170212 -export cyc=00 -export cycle=t${cyc}z - - -# specify the directory environment for executable, it's either para or prod -export envir=prod - -# set up running dir - -export user=`whoami` -export DATA=/gpfs/hps/ptmp/${user}/gdas.${PDY}${cyc}_nemsio_mpiio -mkdir -p $DATA -cd $DATA -rm -f ${DATA}/* - -#################################### -# Specify RUN Name and model -#################################### -export NET=gfs -#export RUN=gdas - -#################################### -# Determine Job Output Name on System -#################################### -#export pgmout="OUTPUT.${pid}" -#export pgmerr=errfile - -#################################### -# SENDSMS - Flag Events on SMS -# SENDCOM - Copy Files From TMPDIR to $COMOUT -# SENDDBN - Issue DBNet Client Calls -# RERUN - Rerun posts from beginning (default no) -# VERBOSE - Specify Verbose Output in global_postgp.sh -#################################### -export SAVEGES=NO -export SENDSMS=NO -export SENDCOM=YES -export SENDDBN=NO -export RERUN=NO -export VERBOSE=YES - -export HOMEglobal=${svndir} -export HOMEgfs=${svndir} -export HOMEgdas=${svndir} - -############################################## -# Define COM directories -############################################## -export COMIN=/gpfs/hps/emc/global/noscrub/Hui-Ya.Chuang/para_look_alike/gdas.${PDY} -# specify my own COMOUT dir to mimic operations -export COMOUT=$DATA -mkdir -p $COMOUT - -date - -#export OUTTYP=4 -# need to set FIXglobal to global share superstructure if testing post in non -# super structure environement -export FIXglobal=/gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/q3fy17_final/global_shared.v14.1.0/fix -export APRUN="aprun -j 1 -n24 -N8 -d1 -cc depth" -export nemsioget=/gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/q3fy17_final/global_shared.v14.1.0/exec/nemsio_get - -export KEEPDATA=YES -#export POSTGRB2TBL=$HOMEglobal/parm/params_grib2_tbl_new -$HOMEgfs/jobs/JGDAS_NCEPPOST - -############################################################# - -date - -echo $? - - - diff --git a/driver/gdas/test_emcsfc.sh b/driver/gdas/test_emcsfc.sh deleted file mode 100755 index 5a89e75202..0000000000 --- a/driver/gdas/test_emcsfc.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/sh - -#-------------------------------------------------------------- -# Run the JGDAS_EMCSFC_SFC_PREP j-job on wcoss cray -# -# Invoke as follows: -# 'cat $script | bsub' -#-------------------------------------------------------------- - -#BSUB -oo emcsfc.log -#BSUB -eo emcsfc.log -#BSUB -q dev_shared -#BSUB -R rusage[mem=2000] -#BSUB -J emcsfc -#BSUB -P GFS-T2O -#BSUB -cwd . -#BSUB -W 0:03 - -set -x - -export cyc="00" -export job=emcsfc_sfc_prep_${cyc} -export KEEPDATA="YES" -export SENDECF="NO" -export SENDCOM="YES" -export RUN_ENVIR="nco" - -export DATA="/gpfs/hps/stmp/$LOGNAME/tmpnwprd/${job}" -export jlogfile="/gpfs/hps/stmp/$LOGNAME/jlogfile" - -module load prod_envir/1.1.0 - -export envir="prod" -export COMROOT="/gpfs/hps/stmp/${LOGNAME}"${COMROOT} - -export NWROOT="/gpfs/hps/emc/global/noscrub/George.Gayno/q3fy17_final" -export global_shared_ver="v14.1.0" - -module load grib_util/1.0.3 -module load prod_util/1.0.5 - -export jobid="LLgdas_emcsfc_sfc_prep" -export gdas_ver="v14.1.0" -$NWROOT/gdas.${gdas_ver}/jobs/JGDAS_EMCSFC_SFC_PREP - -exit 0 diff --git a/driver/gdas/test_exgdas_tropc.sh b/driver/gdas/test_exgdas_tropc.sh deleted file mode 100755 index 351c29c81b..0000000000 --- a/driver/gdas/test_exgdas_tropc.sh +++ /dev/null @@ -1,126 +0,0 @@ -#BSUB -J JGDAS_TROPC_TEST_06 -#BSUB -o /ptmpp2/Qingfu.Liu/com2/jgdas_tropc_06.o%J -#BSUB -e /ptmpp2/Qingfu.Liu/com2/jgdas_tropc_06.o%J -#BSUB -L /bin/sh -#BSUB -q debug -#BSUB -W 00:30 -#BSUB -cwd /ptmpp2/Qingfu.Liu/com2 -#BSUB -P GFS-T2O -##BSUB -R rusage[mem=5000] -##BSUB -R affinity[core] -#BSUB -n 1 -#BSUB -R span[ptile=1] -#BSUB -R affinity[cpu(32):distribute=balance] -#BSUB -a poe -#BSUB -x - -#%include -#%include -. /usrx/local/Modules/default/init/ksh -module use /nwprod2/modulefiles -module load grib_util/v1.0.1 -module load prod_util/v1.0.1 -module load ibmpe ics lsf -#module load grib_util/v1.0.1 -module use /nwpara2/modulefiles -module load util_shared/v1.0.3 - -set -x - -export OMP_NUM_THREADS=32 - - export MP_LABELIO=yes - export MP_MPILIB=mpich2 - export MP_EUILIB=us - export MP_TASK_AFFINITY=cpu:32 - export MP_USE_BULK_XFER=yes - export MP_STDOUTMODE=unordered - export MPICH_ALLTOALL_THROTTLE=0 - export MP_COREFILE_FORMAT=core.txt - export OMP_STACKSIZE=3G - export MP_COMPILER=intel - -#export envir=dev2 -export envir=prod -export cyc=06 -export job=jgdas_tropc_${cyc} -export RUN_ENVIR=test -#export NWROOT=/nwprod2 -export NWROOT=/global/save/Qingfu.Liu - -#export DATAROOT=/tmpnwprd_p2 -export DATAROOT=/ptmpp2/Qingfu.Liu - -#export COMROOT=/com2 -export COMROOT=/ptmpp2/Qingfu.Liu/com2 -export COMDATEROOT=/com2 -export DATA_DUMPJB=/ptmpp2/Qingfu.Liu/com2/111 - -#export DCOMROOT=/dcom - -export COMROOTp1=/com -export KEEPDATA=YES -export CLEAN=NO -export cycle=t00z - -#which setpdy.sh -setpdy.sh -. PDY - -#export PDY=20160216 - -export COMIN=/com/gfs/prod/gdas.${PDY} - -#export utilscript=/nwprod2/util/ush -#export utilexec=/nwprod2/util/exec -#export utilities=/nwprod2/util/ush -#export HOMEutil=/nwprod2/util -#export HOMEgfs=/nwprod2/util -#export HOMEgraph=/nwprod2/util - -export utilscript=$NWROOT/util/ush -export utilexec=$NWROOT/util/exec -export utilities=$NWROOT/util/ush -export HOMEutil=$NWROOT/util -#export HOMEgfs=$NWROOT/util -export HOMEgraph=$NWROOT/util - -# versions file for tracker $tracker.ver -VERSION_FILE=${NWROOT}/versions/tropcy_qc_reloc.ver -if [ -f $VERSION_FILE ]; then - . $VERSION_FILE -else - ecflow_client --abort - exit -fi - -#export shared_global_home=$NWROOT/shared_nco_20160129 -export HOMEgfs=$NWROOT/gfs.v13.0.0 -#export HOMEgdas=$NWROOT/gdas.v13.0.0 -export HOMEgdas=$NWROOT/gdas_nco_20160129 - -# CALL executable job script here -#export HOMERELO=${HOMEgdas} -#export HOMESYND=${HOMERELO} -#export envir_getges=prod -$HOMEgdas/jobs/JGDAS_TROPC - -if [ $? -ne 0 ]; then -# ecflow_client --abort - exit -fi - -#%include -#%manual -###################################################################### -#PURPOSE: Executes the job that creates GFS TC track forecasts -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -#%end diff --git a/driver/gdas/test_gdas_analysis_high.sh b/driver/gdas/test_gdas_analysis_high.sh deleted file mode 100755 index 43405355e0..0000000000 --- a/driver/gdas/test_gdas_analysis_high.sh +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/sh --login - -#BSUB -L /bin/sh -#BSUB -P GFS-T2O -#BSUB -o gdas_analysis_high.o%J -#BSUB -e gdas_analysis_high.o%J -#BSUB -J gdas_analysis_high -#BSUB -q devonprod -#BSUB -M 3072 -#BSUB -extsched 'CRAYLINUX[]' -#BSUB -W 01:00 -#BSUB -cwd /gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work/gdas.v14.1.0/driver - -set -x - -export NODES=240 -export ntasks=480 -export ptile=2 -export threads=12 - -export CDATE=2017030806 - - -############################################################# -# Specify whether the run is production or development -############################################################# -export RUN_ENVIR=para -export PDY=`echo $CDATE | cut -c1-8` -export cyc=`echo $CDATE | cut -c9-10` -export job=gdas_analysis_high_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} -export envir=para -export DATAROOT=/gpfs/hps/stmp/$LOGNAME/test - - -############################################################# -# Specify versions -############################################################# -export gdas_ver=v14.1.0 -export global_shared_ver=v14.1.0 -export crtm_ver=2.2.4 -export prod_envir_ver=1.1.0 -export grib_util_ver=1.0.3 -export prod_util_ver=1.0.6 -export util_shared_ver=1.0.3 - - -############################################################# -# Load modules -############################################################# -. $MODULESHOME/init/sh -module load crtm-intel/${crtm_ver} -module load prod_envir/$prod_envir_ver -module load grib_util/$grib_util_ver -module load prod_util/$prod_util_ver -module load util_shared/$util_shared_ver -module load cfp-intel-sandybridge - -module list - - -############################################################# -# WCOSS_C environment settings -############################################################# -export KMP_AFFINITY=disabled -export OMP_STACKSIZE=2G -export OMP_NUM_THREADS=$threads -export FORT_BUFFERED=true - -export OMP_NUM_THREADS_CY=24 -export NTHREADS=$OMP_NUM_THREADS_CY -export NTHREADS_GSI=$threads -export NTHSTACK=1024000000 - - -############################################################# -# Set user specific variables -############################################################# -export NWTEST=/gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work -export PARA_CONFIG=$NWTEST/gdas.${gdas_ver}/driver/para_config.gdas_analysis_high -export JOBGLOBAL=$NWTEST/gdas.${gdas_ver}/jobs - - -############################################################# -# Execute job -############################################################# -$JOBGLOBAL/JGDAS_ANALYSIS_HIGH - -exit diff --git a/driver/gdas/test_gdas_enkf_fcst.sh b/driver/gdas/test_gdas_enkf_fcst.sh deleted file mode 100755 index c33f610b67..0000000000 --- a/driver/gdas/test_gdas_enkf_fcst.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/sh --login - -#BSUB -L /bin/sh -#BSUB -P GFS-T2O -#BSUB -o gdas_enkf_fcst.o%J -#BSUB -e gdas_enkf_fcst.o%J -#BSUB -J gdas_enkf_fcst -#BSUB -q devonprod -#BSUB -M 3072 -#BSUB -extsched 'CRAYLINUX[]' -#BSUB -W 01:00 -#BSUB -cwd /gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work/gdas.v14.1.0/driver - -set -x - -# 20 nodes = 18 compute nodes + 2 i/o nodes -# set WRT_GROUP=2 for 2 i/o nodes (see ../parm/gdas_enkf_fcst.parm) -# set WRTPE_PER_GROUP=4 to match ptile -export NODES=20 -export ntasks=80 -export ptile=4 -export threads=6 - -export CDATE=2017011900 -export ENSGRP=1 - -export grp=$ENSGRP -if [[ $grp -lt 10 ]]; then - export grp=0$grp -fi - - -############################################################# -# Specify whether the run is production or development -############################################################# -export RUN_ENVIR=para -export PDY=`echo $CDATE | cut -c1-8` -export cyc=`echo $CDATE | cut -c9-10` -export job=gdas_enkf_fcst_grp${grp}_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} -export envir=para -export DATAROOT=/gpfs/hps/stmp/$LOGNAME/test - - -############################################################# -# Specify versions -############################################################# -export gdas_ver=v14.1.0 -export global_shared_ver=v14.1.0 -export grib_util_ver=1.0.3 -export prod_util_ver=1.0.6 - - -############################################################# -# Load modules -############################################################# -. $MODULESHOME/init/sh -module load grib_util/$grib_util_ver -module load prod_util/$prod_util_ver -module load craype-hugepages4M - -module list - - -############################################################# -# WCOSS_C environment settings -############################################################# -export KMP_AFFINITY=disabled -export OMP_STACKSIZE=2G -export OMP_NUM_THREADS=$threads -export FORT_BUFFERED=true -export NTHREADS_EFCS=$threads - - -############################################################# -# Set user specific variables -############################################################# -export NWTEST=/gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work -export PARA_CONFIG=$NWTEST/gdas.${gdas_ver}/driver/para_config.gdas_enkf_fcst -export JOBGLOBAL=$NWTEST/gdas.${gdas_ver}/jobs - - -############################################################# -# Execute job -############################################################# -$JOBGLOBAL/JGDAS_ENKF_FCST - -exit diff --git a/driver/gdas/test_gdas_enkf_inflate_recenter.sh b/driver/gdas/test_gdas_enkf_inflate_recenter.sh deleted file mode 100755 index afff1ff9a2..0000000000 --- a/driver/gdas/test_gdas_enkf_inflate_recenter.sh +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/sh --login - -#BSUB -L /bin/sh -#BSUB -P GFS-T2O -#BSUB -o gdas_enkf_inflate_recenter.o%J -#BSUB -e gdas_enkf_inflate_recenter.o%J -#BSUB -J gdas_enkf_inflate_recenter -#BSUB -q devonprod -#BSUB -M 3072 -#BSUB -extsched 'CRAYLINUX[]' -#BSUB -W 01:00 -#BSUB -cwd /gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work/gdas.v14.1.0/driver - -set -x -ulimit -s unlimited -ulimit -a - -export NODES=14 -export ntasks=80 -export ptile=6 -export threads=1 - -export CDATE=2017011900 - - -############################################################# -# Specify whether the run is production or development -############################################################# -export RUN_ENVIR=para -export PDY=`echo $CDATE | cut -c1-8` -export cyc=`echo $CDATE | cut -c9-10` -export job=gdas_enkf_inflate_recenter_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} -export envir=para -export DATAROOT=/gpfs/hps/stmp/$LOGNAME/test - - -############################################################# -# Specify versions -############################################################# -export gdas_ver=v14.1.0 -export global_shared_ver=v14.1.0 -export grib_util_ver=1.0.3 -export prod_util_ver=1.0.6 - - -############################################################# -# Load modules -############################################################# -. $MODULESHOME/init/sh -module load grib_util/$grib_util_ver -module load prod_util/$prod_util_ver -module load craype-hugepages2M - -module list - - -############################################################# -# WCOSS_C environment settings -############################################################# -export KMP_AFFINITY=disabled -export OMP_STACKSIZE=2G -export OMP_NUM_THREADS=$threads -export FORT_BUFFERED=true - -export NTHREADS_ENKF=$threads - - -############################################################# -# Set user specific variables -############################################################# -export NWTEST=/gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work -export PARA_CONFIG=$NWTEST/gdas.${gdas_ver}/driver/para_config.gdas_enkf_inflate_recenter -export JOBGLOBAL=$NWTEST/gdas.${gdas_ver}/jobs - - -############################################################# -# Execute job -############################################################# -$JOBGLOBAL/JGDAS_ENKF_INFLATE_RECENTER - -exit diff --git a/driver/gdas/test_gdas_enkf_innovate_obs.sh b/driver/gdas/test_gdas_enkf_innovate_obs.sh deleted file mode 100755 index 3fe4df49cf..0000000000 --- a/driver/gdas/test_gdas_enkf_innovate_obs.sh +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/sh --login - -#BSUB -L /bin/sh -#BSUB -P GFS-T2O -#BSUB -o gdas_enkf_innovate_obs.o%J -#BSUB -e gdas_enkf_innovate_obs.o%J -#BSUB -J gdas_enkf_innovate_obs -#BSUB -q devonprod -#BSUB -M 3072 -#BSUB -extsched 'CRAYLINUX[]' -#BSUB -W 01:00 -#BSUB -cwd /gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work/gdas.v14.1.0/driver - -set -x - -export NODES=12 -export ntasks=144 -export ptile=12 -export threads=2 - -export CDATE=2017030806 -export ENSGRP=1 - -export grp=$ENSGRP -if [[ $grp -lt 20 ]]; then - export grp=0$grp -fi - - -############################################################# -# Specify whether the run is production or development -############################################################# -export RUN_ENVIR=para -export PDY=`echo $CDATE | cut -c1-8` -export cyc=`echo $CDATE | cut -c9-10` -export job=gdas_enkf_innovate_obs_grp${grp}_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} -export envir=para -export DATAROOT=/gpfs/hps/stmp/$LOGNAME/test - - -############################################################# -# Specify versions -############################################################# -export gdas_ver=v14.1.0 -export global_shared_ver=v14.1.0 -export crtm_ver=2.2.4 -export prod_envir_ver=1.1.0 -export grib_util_ver=1.0.3 -export prod_util_ver=1.0.6 -export util_shared_ver=1.0.3 - - -############################################################# -# Load modules -############################################################# -. $MODULESHOME/init/sh -module load crtm-intel/${crtm_ver} -module load prod_envir/$prod_envir_ver -module load grib_util/$grib_util_ver -module load prod_util/$prod_util_ver -module load util_shared/$util_shared_ver -module load cfp-intel-sandybridge - -module list - - -############################################################# -# WCOSS_C environment settings -############################################################# -export KMP_AFFINITY=disabled -export OMP_STACKSIZE=2G -export OMP_NUM_THREADS=$threads -export FORT_BUFFERED=true - -export OMP_NUM_THREADS_CY=24 -export NTHREADS=$OMP_NUM_THREADS_CY -export NTHREADS_GSI=$threads -export NTHSTACK=1024000000 - - -############################################################# -# Set user specific variables -############################################################# -export NWTEST=/gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work -export PARA_CONFIG=$NWTEST/gdas.${gdas_ver}/driver/para_config.gdas_enkf_innovate_obs -export JOBGLOBAL=$NWTEST/gdas.${gdas_ver}/jobs - - -############################################################# -# Execute job -############################################################# -$JOBGLOBAL/JGDAS_ENKF_INNOVATE_OBS - -exit diff --git a/driver/gdas/test_gdas_enkf_post.sh b/driver/gdas/test_gdas_enkf_post.sh deleted file mode 100755 index 87bfa63603..0000000000 --- a/driver/gdas/test_gdas_enkf_post.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/sh --login - -#BSUB -L /bin/sh -#BSUB -P GFS-T2O -#BSUB -o gdas_enkf_post.o%J -#BSUB -e gdas_enkf_post.o%J -#BSUB -J gdas_enkf_post -#BSUB -q devonprod -#BSUB -M 3072 -#BSUB -extsched 'CRAYLINUX[]' -#BSUB -W 01:00 -#BSUB -cwd /gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work/gdas.v14.1.0/driver - -set -x - -export NODES=80 -export ntasks=80 -export ptile=1 -export threads=24 - -export CDATE=2017011900 - -############################################################# -# Specify whether the run is production or development -############################################################# -export RUN_ENVIR=para -export PDY=`echo $CDATE | cut -c1-8` -export cyc=`echo $CDATE | cut -c9-10` -export job=gdas_enkf_post_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} -export envir=para -export DATAROOT=/gpfs/hps/stmp/$LOGNAME/test - - -############################################################# -# Specify versions -############################################################# -export gdas_ver=v14.1.0 -export global_shared_ver=v14.1.0 -export grib_util_ver=1.0.3 -export prod_util_ver=1.0.6 - - -############################################################# -# Load modules -############################################################# -. $MODULESHOME/init/sh -module load grib_util/$grib_util_ver -module load prod_util/$prod_util_ver -module load craype-hugepages4M - -module list - - -############################################################# -# WCOSS_C environment settings -############################################################# -export KMP_AFFINITY=disabled -export OMP_STACKSIZE=2G -export OMP_NUM_THREADS=$threads -export NTHREADS_EPOS=$threads -export FORT_BUFFERED=true - - -############################################################# -# Set user specific variables -############################################################# -export NWTEST=/gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work -export PARA_CONFIG=$NWTEST/gdas.${gdas_ver}/driver/para_config.gdas_enkf_post -export JOBGLOBAL=$NWTEST/gdas.${gdas_ver}/jobs - - -############################################################# -# Execute job -############################################################# -$JOBGLOBAL/JGDAS_ENKF_POST - -exit diff --git a/driver/gdas/test_gdas_enkf_select_obs.sh b/driver/gdas/test_gdas_enkf_select_obs.sh deleted file mode 100755 index bef6518207..0000000000 --- a/driver/gdas/test_gdas_enkf_select_obs.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/sh --login - -#BSUB -L /bin/sh -#BSUB -P GFS-T2O -#BSUB -o gdas_enkf_select_obs.o%J -#BSUB -e gdas_enkf_select_obs.o%J -#BSUB -J gdas_enkf_select_obs -#BSUB -q devonprod -#BSUB -M 3072 -#BSUB -extsched 'CRAYLINUX[]' -#BSUB -W 01:00 -#BSUB -cwd /gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work/gdas.v14.1.0/driver - -set -x - -export NODES=12 -export ntasks=144 -export ptile=12 -export threads=2 - -export CDATE=2017030806 - -############################################################# -# Specify whether the run is production or development -############################################################# -export RUN_ENVIR=para -export PDY=`echo $CDATE | cut -c1-8` -export cyc=`echo $CDATE | cut -c9-10` -export job=gdas_enkf_select_obs_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} -export envir=para -export DATAROOT=/gpfs/hps/stmp/$LOGNAME/test - - -############################################################# -# Specify versions -############################################################# -export gdas_ver=v14.1.0 -export global_shared_ver=v14.1.0 -export crtm_ver=2.2.4 -export prod_envir_ver=1.1.0 -export grib_util_ver=1.0.3 -export prod_util_ver=1.0.6 -export util_shared_ver=1.0.3 - - -############################################################# -# Load modules -############################################################# -. $MODULESHOME/init/sh -module load crtm-intel/${crtm_ver} -module load prod_envir/$prod_envir_ver -module load grib_util/$grib_util_ver -module load prod_util/$prod_util_ver -module load util_shared/$util_shared_ver -module load cfp-intel-sandybridge - -module list - - -############################################################# -# WCOSS_C environment settings -############################################################# -export KMP_AFFINITY=disabled -export OMP_STACKSIZE=2G -export OMP_NUM_THREADS=$threads -export FORT_BUFFERED=true - -export OMP_NUM_THREADS_CY=24 -export NTHREADS=$OMP_NUM_THREADS_CY -export NTHREADS_GSI=$threads -export NTHSTACK=1024000000 - - -############################################################# -# Set user specific variables -############################################################# -export NWTEST=/gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work -export PARA_CONFIG=$NWTEST/gdas.${gdas_ver}/driver/para_config.gdas_enkf_select_obs -export JOBGLOBAL=$NWTEST/gdas.${gdas_ver}/jobs - - -############################################################# -# Execute job -############################################################# -$JOBGLOBAL/JGDAS_ENKF_SELECT_OBS - -exit diff --git a/driver/gdas/test_gdas_enkf_update.sh b/driver/gdas/test_gdas_enkf_update.sh deleted file mode 100755 index fc4b5d23f7..0000000000 --- a/driver/gdas/test_gdas_enkf_update.sh +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/sh --login - -#BSUB -L /bin/sh -#BSUB -P GFS-T2O -#BSUB -o gdas_enkf_update.o%J -#BSUB -e gdas_enkf_update.o%J -#BSUB -J gdas_enkf_update -#BSUB -q devonprod -#BSUB -M 3072 -#BSUB -extsched 'CRAYLINUX[]' -#BSUB -W 01:00 -#BSUB -cwd /gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work/gdas.v14.1.0/driver - -set -x - -export NODES=40 -export ntasks=240 -export ptile=6 -export threads=4 - -export CDATE=2017030806 - - -############################################################# -# Specify whether the run is production or development -############################################################# -export RUN_ENVIR=para -export PDY=`echo $CDATE | cut -c1-8` -export cyc=`echo $CDATE | cut -c9-10` -export job=gdas_enkf_update_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} -export envir=para -export DATAROOT=/gpfs/hps/stmp/$LOGNAME/test - - -############################################################# -# Specify versions -############################################################# -export gdas_ver=v14.1.0 -export global_shared_ver=v14.1.0 -export grib_util_ver=1.0.3 -export prod_util_ver=1.0.6 -export util_shared_ver=1.0.3 - - -############################################################# -# Load modules -############################################################# -. $MODULESHOME/init/sh -module load grib_util/$grib_util_ver -module load prod_util/$prod_util_ver -module load util_shared/$util_shared_ver -module load cfp-intel-sandybridge - -module list - - -############################################################# -# WCOSS_C environment settings -############################################################# -export KMP_AFFINITY=disabled -export OMP_STACKSIZE=2G -export OMP_NUM_THREADS=$threads -export FORT_BUFFERED=true - -export NTHREADS_ENKF=$nthreads - - -############################################################# -# Set user specific variables -############################################################# -export NWTEST=/gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work -export PARA_CONFIG=$NWTEST/gdas.${gdas_ver}/driver/para_config.gdas_enkf_update -export JOBGLOBAL=$NWTEST/gdas.${gdas_ver}/jobs - - -############################################################# -# Execute job -############################################################# -$JOBGLOBAL/JGDAS_ENKF_UPDATE - -exit diff --git a/driver/gdas/test_gdas_forecast_high.sh b/driver/gdas/test_gdas_forecast_high.sh deleted file mode 100755 index 4e82979967..0000000000 --- a/driver/gdas/test_gdas_forecast_high.sh +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/sh --login - -#BSUB -L /bin/sh -#BSUB -P GFS-T2O -#BSUB -o gdas_forecast_high.o%J -#BSUB -e gdas_forecast_high.o%J -#BSUB -J gdas_forecast_high -#BSUB -q devonprod -#BSUB -M 768 -#BSUB -extsched 'CRAYLINUX[]' -#BSUB -W 01:00 -#BSUB -cwd /gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work/gdas.v14.1.0/driver - -set -x - -# 55 nodes = 49 compute nodes + 6 i/o nodes -# set WRT_GROUP=6 for 6 i/o nodes (see ../parm/gdas_forecast_high.parm) -# set WRTPE_PER_GROUP=4 to match ptile -export NODES=55 -export ntasks=220 -export ptile=4 -export threads=2 - -export CDATE=2017012506 - -############################################################# -# Specify whether the run is production or development -############################################################# -export RUN_ENVIR=para -export PDY=`echo $CDATE | cut -c1-8` -export cyc=`echo $CDATE | cut -c9-10` -export job=gdas_forecast_high_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} -export envir=para -export DATAROOT=/gpfs/hps/stmp/$LOGNAME/test - - -############################################################# -# Specify versions -############################################################# -export gdas_ver=v14.1.0 -export global_shared_ver=v14.1.0 -export gfs_ver=v14.1.0 -export grib_util_ver=1.0.3 -export prod_util_ver=1.0.5 - - -############################################################# -# Load modules -############################################################# -. $MODULESHOME/init/sh -module load grib_util/$grib_util_ver -module load prod_util/$prod_util_ver -module load craype-hugepages16M - -module list - - -############################################################# -# WCOSS_C environment settings -############################################################# -export KMP_AFFINITY=disabled -export OMP_STACKSIZE=1024m -export OMP_NUM_THREADS=$threads -export NTHREADS=$threads - - -############################################################# -# Set user specific variables -############################################################# -export NWTEST=/gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work -export PARA_CONFIG=$NWTEST/gdas.${gdas_ver}/driver/para_config.gdas_forecast_high -export JOBGLOBAL=$NWTEST/gdas.${gdas_ver}/jobs - - -############################################################# -# Execute job -############################################################# -$JOBGLOBAL/JGDAS_FORECAST_HIGH - -exit - diff --git a/driver/gdas/test_gdas_gldas.sh b/driver/gdas/test_gdas_gldas.sh deleted file mode 100755 index ec84dd88f8..0000000000 --- a/driver/gdas/test_gdas_gldas.sh +++ /dev/null @@ -1,127 +0,0 @@ -#!/bin/sh - -#BSUB -o /gpfs/dell2/ptmp/Youlong.Xia/gdas_gldas.o%J -#BSUB -e /gpfs/dell2/ptmp/Youlong.Xia/gdas_gldas.o%J -#BSUB -P NLDAS-T2O -#BSUB -J jgdas_gldas_12 -#BSUB -W 01:00 -#BSUB -q dev -#BSUB -n 112 # number of tasks -#BSUB -R span[ptile=28] # tasks per node -#BSUB -R affinity[core(1):distribute=balance] -#BSUB -M 3072 -#BSUB -extsched 'CRAYLINUX[]' - -set -x - -date - -export NODES=4 -export ntasks=112 -export ptile=28 -export threads=1 - -export launcher="mpirun -n" -export npe_gaussian=6 -export npe_gldas=112 -export APRUN_GAUSSIAN="$launcher $npe_gaussian" -export APRUN_GLDAS="$launcher $npe_gldas" - -export CDATE=${CDATE:-2019110700} - -############################################################# -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=`echo $CDATE | cut -c1-8` - -export PDY1=`expr $PDY - 1` - -export cyc=`echo $CDATE | cut -c9-10` -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load theUtilities module -##################################### -module purge -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_envir/1.0.2 -module load prod_util/1.1.4 -module load grib_util/1.1.0 -module load NetCDF/4.5.0 -########################################### -# Now set up environment -########################################### -module list - -############################################ -# GDAS META PRODUCT GENERATION -############################################ -# set envir=prod or para to test with data in prod or para -# export envir=prod - export envir=para - -export RUN=${RUN:-gdas} - -export SENDCOM=YES -export KEEPDATA=YES -export job=gdas_gldas_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## - export HOMEgw=/gpfs/dell2/emc/modeling/noscrub/$LOGNAME/global-workflow -if [ $envir = "prod" ] ; then -# This setting is for testing with GDAS (production) - export HOMEgldas=/nwprod/gldas.${gldas_ver} - export COMIN=/gpfs/dell1/nco/ops/com/gfs/prod/${RUN}.${PDY} ### NCO PROD - export COMROOT=/gpfs/dell1/nco/ops/com - export DCOMROOT=/gpfs/dell1/nco/ops/dcom -elif [ $envir = "para" ] ; then -# This setting is for testing with GDAS (production) - export HOMEgldas=${HOMEgldas:-$HOMEgfs/sorc/gldas.fd} - export COMIN=/gpfs/dell1/nco/ops/com/gfs/prod/${RUN}.${PDY} ### NCO PROD - export COMROOT=/gpfs/dell1/nco/ops/com - export DCOMROOT=/gpfs/dell1/nco/ops/dcom -else -# export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/prfv3rt1/${RUN}.${PDY}/${cyc}/nawips ### EMC PARA Realtime -# export COMINgdas=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/prfv3rt1/${RUN} ### EMC PARA Realtime - export workdir=${workdir:-$HOMEgfs} - export HOMEgldas=$workdir/sorc/gldas.fd - export COMROOT=$workdir/com - export DCOMROOT=$workdir/dcom - export COMINgdas=$COMROOT - export DCOMIN=$DCOMROOT - export COMIN=$workdir/comin - export COMOUT=$workdir/comout -fi - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTncdc $COMOUTukmet $COMOUTecmwf -fi - -# Set user specific variables -############################################################# -#export NWTEST=/gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work -export PARA_CONFIG=$HOMEgw/driver/gdas/para_config.gdas_gldas -#export JOBGLOBAL=$NWTEST/gdas.${gdas_ver}/jobs -export JOBGLOBAL=$HOMEgldas/jobs - -############################################################# -# Execute job -############################################################# -echo $JOBGLOBAL/JGDAS_GLDAS -$JOBGLOBAL/JGDAS_GLDAS - -exit - diff --git a/driver/gdas/test_jgdas_tropc_cray.sh b/driver/gdas/test_jgdas_tropc_cray.sh deleted file mode 100755 index c24b17a903..0000000000 --- a/driver/gdas/test_jgdas_tropc_cray.sh +++ /dev/null @@ -1,133 +0,0 @@ -#!/bin/bash -#BSUB -J JGDAS_TROPC -#BSUB -W 0:30 -####BSUB -extsched 'CRAYLINUX[]' -R '1*{order[slots] select[craylinux && !vnode]} + 24*{select[craylinux && vnode]span[ptile=24] cu[type=cabinet]}' -BSUB -extsched 'CRAYLINUX[]' -#BSUB -o /gpfs/hps/emc/global/noscrub/Qingfu.Liu/gdas.v14.1.0/driver/test_jgdas_tropc.o%J -#BSUB -e /gpfs/hps/emc/global/noscrub/Qingfu.Liu/gdas.v14.1.0/driver/test_jgdas_tropc.o%J -#BSUB -q "dev" -#BSUB -P "GFS-T2O" -#BSUB -M 500 - -module use /gpfs/hps/nco/ops/nwprod/modulefiles -module load prod_util -module unload grib_util -module load grib_util/1.0.3 -module load util_shared/1.0.3 -##module load crtm-intel/2.2.3 -module load PrgEnv-intel craype cray-mpich ESMF-intel-haswell/3_1_0rp5 -module load NCL-gnu-sandybridge/6.3.0 -module load gcc -module list - -set -x - -export OMP_NUM_THREADS=12 - - export MP_LABELIO=yes - export MP_MPILIB=mpich2 - export MP_EUILIB=us - export MP_TASK_AFFINITY=cpu:24 - export MP_USE_BULK_XFER=yes - export MP_STDOUTMODE=unordered - export MPICH_ALLTOALL_THROTTLE=0 - export MP_COREFILE_FORMAT=core.txt - export OMP_STACKSIZE=3G - export MP_COMPILER=intel - -export envir=para -#export envir=prod -export cyc=06 -export job=jgdas_tropc_${cyc} -export RUN_ENVIR=test -#export NWROOT=/nwprod2 -#export NWROOT=/global/save/Qingfu.Liu -export NWROOT=/gpfs/hps/emc/global/noscrub/Qingfu.Liu - -export DATAROOT=/gpfs/hps/ptmp/Qingfu.Liu/com -#export DATAROOT=/gpfs/hps/emc/global/noscrub/Qingfu.Liu -#export COMROOT=/com2 -export COMROOT=/gpfs/hps/ptmp/Qingfu.Liu/com -#export COMROOT=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com -export COMDATEROOT=/gpfs/hps/ptmp/Qingfu.Liu/com -#export COMDATEROOT=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com -#export COMDATEROOT=/gpfs/tp2/nco/ops/com -export DATA_DUMPJB=/gpfs/hps/ptmp/Qingfu.Liu/com/111 - -#export DCOMROOT=/dcom -export DCOMROOT=/gpfs/tp1/nco/ops/dcom - -#export COMROOTp1=/gpfs/gp1/nco/ops/com -export COMROOTp1=/gpfs/hps/ptmp/Qingfu.Liu/com -#export COMROOTp1=/gpfs/tp2/nco/ops/com -export KEEPDATA=YES -export CLEAN=NO -export cycle=t${cyc}z -export LOUD=on -export BACK=on - -##which setpdy.sh -##setpdy.sh -##. PDY - -#export PDY=20150723 -#export PDY=20140814 -export PDY=20170108 - -#export COMIN=/gpfs/tp2/nco/ops/com/gfs/prod/gdas.${PDY} -export COMIN=/gpfs/hps/ptmp/Qingfu.Liu/com/gfs/para/gdas.${PDY} -#export COMIN=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com/gfs/para/gdas.${PDY} - -#export NWPROOT=/gpfs/tp1/nco/ops/nwprod/util -#export utilscript=$NWPROOT/util/ush -#export utilexec=$NWPROOT/util/exec -#export utilities=$NWPROOT/util/ush -#export HOMEutil=$NWPROOT/util -#export HOMEgraph=$NWPROOT/util - -# versions file for tracker $tracker.ver -VERSION_FILE=${NWROOT}/versions/tropcy_qc_reloc.ver -if [ -f $VERSION_FILE ]; then - . $VERSION_FILE -else - ecflow_client --abort - exit -fi - -#export DUMP=/gpfs/hps/nco/ops/nwprod/hwrf_dump.v3.2.1/ush/dumpjb -#export HOMEobsproc_dump=/gpfs/hps/nco/ops/nwprod/hwrf_dump.v3.2.1 -export DUMP=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/obsproc_dump.tkt-351.crayport/ush/dumpjb -export HOMEobsproc_dump=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/obsproc_dump.tkt-351.crayport -#export FIXobsproc_bufr_dumplist=/gpfs/hps/nco/ops/nwprod/obsproc_bufr_dumplist.v1.2.0/fix -export FIXobsproc_bufr_dumplist=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/gdas.v14.1.0/driver/fix -export HOMEobsproc_shared_bufr_dumplist=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/gdas.v14.1.0/driver -#export HOMEobroc_bufr_dumplist=/gpfs/hps/nco/ops/nwprod/obsproc_bufr_dumplist.v1.2.0 - -export HOMEgfs=$NWROOT/gfs.v14.1.0 -export HOMEgdas=$NWROOT/gdas.v14.1.0 - -# CALL executable job script here -#export HOMERELO=${HOMEgdas} -#export HOMESYND=${HOMERELO} -#export envir_getges=prod -$HOMEgdas/jobs/JGDAS_TROPC - -if [ $? -ne 0 ]; then -# ecflow_client --abort - exit -fi - -#%include -#%manual -###################################################################### -#PURPOSE: Executes the job that creates GFS TC track forecasts -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -#%end diff --git a/driver/gdas/test_jgdas_tropcy_qc_reloc.ecf b/driver/gdas/test_jgdas_tropcy_qc_reloc.ecf deleted file mode 100755 index 015a429e9a..0000000000 --- a/driver/gdas/test_jgdas_tropcy_qc_reloc.ecf +++ /dev/null @@ -1,126 +0,0 @@ -#BSUB -J Relocation_TEST_06 -#BSUB -o /ptmpp2/Qingfu.Liu/com2/gdas_tropcy_qc_reloc_06.o%J -#BSUB -e /ptmpp2/Qingfu.Liu/com2/gdas_tropcy_qc_reloc_06.o%J -#BSUB -L /bin/sh -#BSUB -q debug -#BSUB -W 00:30 -#BSUB -cwd /ptmpp2/Qingfu.Liu/com2 -#BSUB -P GFS-T2O -##BSUB -R rusage[mem=5000] -##BSUB -R affinity[core] -#BSUB -n 7 -#BSUB -R span[ptile=1] -#BSUB -R affinity[cpu(32):distribute=balance] -#BSUB -a poe -#BSUB -x - -#%include -#%include -. /usrx/local/Modules/default/init/ksh -module use /nwprod2/modulefiles -module load grib_util/v1.0.1 -module load prod_util/v1.0.1 -module load ibmpe ics lsf - -set -x - -export OMP_NUM_THREADS=32 - - export MP_LABELIO=yes - export MP_MPILIB=mpich2 - export MP_EUILIB=us - export MP_TASK_AFFINITY=cpu:32 - export MP_USE_BULK_XFER=yes - export MP_STDOUTMODE=unordered - export MPICH_ALLTOALL_THROTTLE=0 - export MP_COREFILE_FORMAT=core.txt - export OMP_STACKSIZE=3G - export MP_COMPILER=intel - -export envir=dev2 -export cyc=06 -export job=gdas_tropcy_qc_reloc_${cyc} -export RUN_ENVIR=test -#export NWROOT=/nwprod2 -export NWROOT=/global/save/Qingfu.Liu - -#export DATAROOT=/tmpnwprd_p2 -export DATAROOT=/ptmpp2/Qingfu.Liu - -#export COMROOT=/com2 -export COMROOT=/ptmpp2/Qingfu.Liu/com2 -export COMDATEROOT=/com2 - -#export DCOMROOT=/dcom - -export COMROOTp1=/com -export KEEPDATA=YES -export CLEAN=NO -export cycle=t00z - -#which setpdy.sh -setpdy.sh -. PDY - -export COMINgfs=/com/gfs/prod/gfs.${PDY} -export COMINgdas=/com/gfs/prod/gdas.${PDY} - -# versions file for tracker $tracker.ver -VERSION_FILE=${NWROOT}/versions/tropcy_qc_reloc.ver -if [ -f $VERSION_FILE ]; then - . $VERSION_FILE -else - ecflow_client --abort - exit -fi - -export shared_global_home=$NWROOT/shared_nco_20160129 -export gfs_global_home=$NWROOT/gfs_nco_20160129 -export gdas_global_home=$NWROOT/gdas_nco_20160129 - -export files_override=F - -# CALL executable job script here -export HOMERELO=$shared_global_home -#export HOMERELO=${NWROOT}/tropcy_qc_reloc.${tropcy_qc_reloc_ver}_r62774_phase2 -export HOMESYND=${HOMERELO} -#export envir_getges=prod -$gdas_global_home/jobs/JGDAS_TROPCY_QC_RELOC - -if [ $? -ne 0 ]; then -# ecflow_client --abort - exit -fi - -#%include -#%manual -###################################################################### -#PURPOSE: Executes the job JGDAS_TROPCY_QC_RELOC -###################################################################### -############################################################# -# Function been tested: TCvital quality control and archive, hurricane relocation -# -# Calling sequence: JGFS_TROPCY_QC_RELOC, extropcy_qc_reloc.sh, -# # syndat_qctropcy.sh, tropcy_relocate.sh,syndat_getjtbul.sh, -# # tropcy_relocate_extrkr.sh,parse-storm-type.pl -# -# Initial condition: provide hours (cyc=?) -# -# Usage: bsub < test_jgdas_tropcy_qc_reloc -# -# Data_In: COMINgfs=/com/gfs/prod/gfs.${PDY} -# COMINgdas=/com/gfs/prod/gdas.${PDY} -# -# Data_Out: /ptmpp2/Qingfu.Liu/com2/gfs/dev2/gdas.${PDY} -# -# Result verification: compare with the operational results -# (results might be slightly different due to 3hourly/hourly tracker) -############################################################## -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -#%end diff --git a/driver/gdas/test_jgdas_tropcy_qc_reloc_cray.sh b/driver/gdas/test_jgdas_tropcy_qc_reloc_cray.sh deleted file mode 100755 index 607ed0cae4..0000000000 --- a/driver/gdas/test_jgdas_tropcy_qc_reloc_cray.sh +++ /dev/null @@ -1,154 +0,0 @@ -#!/bin/bash -#BSUB -J t1534 -#BSUB -W 0:30 -#BSUB -extsched 'CRAYLINUX[]' -R '1*{order[slots] select[craylinux && !vnode]} + 168*{select[craylinux && vnode]span[ptile=24] cu[type=cabinet]}' -#BSUB -o /gpfs/hps/emc/global/noscrub/Qingfu.Liu/gdas.v14.1.0/driver/gdas_tropcy_qc_reloc_06.o%J -#BSUB -e /gpfs/hps/emc/global/noscrub/Qingfu.Liu/gdas.v14.1.0/driver/gdas_tropcy_qc_reloc_06.o%J -###BSUB -o t574.stdout.%J -###BSUB -e t574.stderr.%J -#BSUB -q "dev" -#BSUB -P "GFS-T2O" -#BSUB -M 200 -###BSUB -M "60" - - -module use /gpfs/hps/nco/ops/nwprod/modulefiles -module load prod_util -module load prod_envir/1.1.0 -module unload grib_util -module load grib_util/1.0.3 -##module load crtm-intel/2.2.3 -module load PrgEnv-intel craype cray-mpich ESMF-intel-haswell/3_1_0rp5 -module list - -#export MKL_CBWR=AVX -#ulimit -s unlimited -#ulimit -a - -set -x - -export OMP_NUM_THREADS=24 - - export MP_LABELIO=yes - export MP_MPILIB=mpich2 - export MP_EUILIB=us - export MP_TASK_AFFINITY=cpu:24 - export MP_USE_BULK_XFER=yes - export MP_STDOUTMODE=unordered - export MPICH_ALLTOALL_THROTTLE=0 - export MP_COREFILE_FORMAT=core.txt - export OMP_STACKSIZE=3G - export MP_COMPILER=intel - -export envir=para -export cyc=06 -export job=gdas_tropcy_qc_reloc_${cyc} -export RUN_ENVIR=test -#export NWROOT=/nwprod2 -#export NWROOT=/global/save/Qingfu.Liu -export NWROOT=/gpfs/hps/emc/global/noscrub/Qingfu.Liu - -#export DATAROOT=/tmpnwprd_p2 -#export DATAROOT=/ptmpp2/Qingfu.Liu -export DATAROOT=/gpfs/hps/ptmp/Qingfu.Liu - -#export COMROOT=/com2 -#export COMROOT=/ptmpp2/Qingfu.Liu/com2 -#export COMROOT=/gpfs/hps/ptmp/Qingfu.Liu/com -#export COMDATEROOT=/com -export COMROOT=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com -export COMDATEROOT=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com - -#export DCOMROOT=/dcom - -#export COMROOTp1=/gpfs/gp1/nco/ops/com -#export COMROOTp1=/gpfs/tp1/nco/ops/com -export COMROOTp1=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com -export KEEPDATA=YES -export CLEAN=NO -export cycle=t${cyc}z - -#which setpdy.sh -#setpdy.sh -#. PDY - -export PDY=20140814 -##export PDY=20150723 - -#export COMINgfs=/com/gfs/prod/gfs.${PDY} -#export COMINgdas=/com/gfs/prod/gdas.${PDY} -#export COMINgfs=/gpfs/tp1/nco/ops/com/gfs/prod/gfs.${PDY} -#export COMINgdas=/gpfs/tp1/nco/ops/com/gfs/prod/gdas.${PDY} -export COMINgfs=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com/gfs/$envir/gfs.${PDY} -export COMINgdas=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com/gfs/$envir/gdas.${PDY} -export ARCHSYND=${COMINsyn:-$(compath.py gfs/prod/syndat)} -export HOMENHC=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/guidance/storm-data/ncep -#export GETGES_COM=/gpfs/tp1/nco/ops/com -export GETGES_COM=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com -export GESROOT=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com - -# versions file for tracker $tracker.ver -VERSION_FILE=${NWROOT}/versions/tropcy_qc_reloc.ver -if [ -f $VERSION_FILE ]; then - . $VERSION_FILE -else - ecflow_client --abort - exit -fi - -export shared_global_home=$NWROOT/global_shared.v14.1.0 -export gfs_global_home=$NWROOT/gfs.v14.1.0 -export gdas_global_home=$NWROOT/gdas.v14.1.0 - -export files_override=F -export PROCESS_TROPCY=NO -export copy_back=NO -export SENDCOM=NO -export APRNRELOC="time aprun -b -j1 -n7 -N1 -d24 -cc depth " -export APRNGETTX="time aprun -q -j1 -n1 -N1 -d1 -cc depth" -#export APRNRELOC="time aprun -b -j0 -n7 -N1 -d32 -cc depth" - -# CALL executable job script here -export HOMERELO=$shared_global_home -#export HOMERELO=${NWROOT}/tropcy_qc_reloc.${tropcy_qc_reloc_ver}_r62774_phase2 -export HOMESYND=${HOMERELO} -#export envir_getges=prod -$gdas_global_home/jobs/JGDAS_TROPCY_QC_RELOC - -if [ $? -ne 0 ]; then -# ecflow_client --abort - exit -fi - -#%include -#%manual -###################################################################### -#PURPOSE: Executes the job JGDAS_TROPCY_QC_RELOC -###################################################################### -############################################################# -# Function been tested: TCvital quality control and archive, hurricane relocation -# -# Calling sequence: JGFS_TROPCY_QC_RELOC, extropcy_qc_reloc.sh, -# # syndat_qctropcy.sh, tropcy_relocate.sh,syndat_getjtbul.sh, -# # tropcy_relocate_extrkr.sh,parse-storm-type.pl -# -# Initial condition: provide hours (cyc=?) -# -# Usage: bsub < test_jgdas_tropcy_qc_reloc -# -# Data_In: COMINgfs=/com/gfs/prod/gfs.${PDY} -# COMINgdas=/com/gfs/prod/gdas.${PDY} -# -# Data_Out: /ptmpp2/Qingfu.Liu/com2/gfs/dev2/gdas.${PDY} -# -# Result verification: compare with the operational results -# (results might be slightly different due to 3hourly/hourly tracker) -############################################################## -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -#%end diff --git a/driver/gdas/test_jgdas_verfozn.sh b/driver/gdas/test_jgdas_verfozn.sh deleted file mode 100755 index e6f5d703d5..0000000000 --- a/driver/gdas/test_jgdas_verfozn.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/bin/ksh - -#BSUB -o gdas_verfozn.o%J -#BSUB -e gdas_verfozn.o%J -#BSUB -J gdas_verfozn -#BSUB -q dev_shared -#BSUB -n 1 -#BSUB -R affinity[core] -#BSUB -M 100 -#BSUB -W 00:05 -#BSUB -a poe -#BSUB -P GFS-T2O - -##------------------------------------------------------------ -## This is the test driver script for the wcoss/ibm systems -## to run the JGDAS_VERFOZN job. -##------------------------------------------------------------ - -set -x - -export PDATE=${PDATE:-2018020806} -export NET=${NET:-gfs} -export RUN=${RUN:-gdas} - - -export PDY=`echo $PDATE | cut -c1-8` -export cyc=`echo $PDATE | cut -c9-10` -export job=gdas_verfozn.${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} -export envir=${envir:-test} - -me=`hostname | cut -c1` -export DATAROOT=${DATAROOT:-/gpfs/${me}d2/emc/da/noscrub/${LOGNAME}/test_data} -export COMROOT=${COMROOT:-/ptmpp1/${LOGNAME}/com} -export OZN_WORK_DIR=${OZN_WORK_DIR:-/stmpp1/${LOGNAME}/oznmon.${pid}} - -#------------------------------------------------------------ -# Specify versions -# -export gfs_ver=v15.0.0 - - -#------------------------------------------------------------ -# Load modules -# -. /usrx/local/Modules/3.2.9/init/ksh -module use /nwprod2/modulefiles -module load prod_util -module load util_shared - - -module list - - -#------------------------------------------------------------ -# WCOSS environment settings -# -export POE=YES - - -#------------------------------------------------------------ -# Set user specific variables -# -export OZNMON_SUFFIX=${OZNMON_SUFFIX:-testozn} -export NWTEST=${NWTEST:-/gpfs/${me}d2/emc/da/noscrub/${LOGNAME}/gfs.${gfs_ver}} - -export HOMEgfs_ozn=${HOMEgfs_ozn:-${NWTEST}} -export SCRgfs_ozn=${SCRgfs_ozn:-${HOMEgfs_ozn}/scripts} -JOBgfs_ozn=${JOBgfs_ozn:-${HOMEgfs_ozn}/jobs} - -export HOMEoznmon=${HOMEoznmon:-${NWTEST}} -export COM_IN=${COM_IN:-$DATAROOT} -export OZN_TANKDIR=${OZN_TANKDIR:-${COMROOT}/${OZNMON_SUFFIX}} - -#------------------------------------------------------------ -# Execute job -# -${JOBgfs_ozn}/JGDAS_VERFOZN - -exit - diff --git a/driver/gdas/test_jgdas_verfozn_cray.sh b/driver/gdas/test_jgdas_verfozn_cray.sh deleted file mode 100755 index 883afce25e..0000000000 --- a/driver/gdas/test_jgdas_verfozn_cray.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/ksh - -#BSUB -o gdas_verfozn.o%J -#BSUB -e gdas_verfozn.o%J -#BSUB -J gdas_verfozn -#BSUB -q dev -#BSUB -M 80 -#BSUB -W 00:05 -#BSUB -P GFS-T2O -#BSUB -R "select[mem>80] rusage[mem=80]" - -##------------------------------------------------------------ -## This is the test driver script for the cray systems -## to run the JGDAS_VERFOZN job. -##------------------------------------------------------------ - -set -x - -export PDATE=${PDATE:-2018020812} -export NET=${NET:-gfs} -export RUN=${RUN:-gdas} - - -export PDY=`echo $PDATE | cut -c1-8` -export cyc=`echo $PDATE | cut -c9-10` -export job=gdas_verfozn.${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} -export envir=${envir:-test} - -me=`hostname | cut -c1` -export DATAROOT=${DATAROOT:-/gpfs/hps3/emc/da/noscrub/${LOGNAME}/test_data} -export COMROOT=${COMROOT:-/gpfs/hps2/ptmp/${LOGNAME}/com} -export OZN_WORK_DIR=${OZN_WORK_DIR:-/gpfs/hps2/stmp/${LOGNAME}/oznmon.${pid}} - -#------------------------------------------------------------ -# Specify versions -# -export gfs_ver=v15.0.0 - - -#------------------------------------------------------------ -# Load modules -# -. $MODULESHOME/init/ksh - -module load prod_util -module load util_shared - -module list - - -#------------------------------------------------------------ -# WCOSS environment settings -# -export POE=YES - - -#------------------------------------------------------------ -# Set user specific variables -# -export OZNMON_SUFFIX=${OZNMON_SUFFIX:-testozn} -export NWTEST=${NWTEST:-/gpfs/hps3/emc/da/noscrub/${LOGNAME}/gfs.${gfs_ver}} - -export HOMEgfs_ozn=${HOMEgfs_ozn:-${NWTEST}} -export SCRgfs_ozn=${SCRgfs_ozn:-${HOMEgfs_ozn}/scripts} -JOBgfs_ozn=${JOBgfs_ozn:-${HOMEgfs_ozn}/jobs} - -export HOMEoznmon=${HOMEoznmon:-${NWTEST}} -export COM_IN=${COM_IN:-$DATAROOT} -export OZN_TANKDIR=${OZN_TANKDIR:-${COMROOT}/${OZNMON_SUFFIX}} - -#------------------------------------------------------------ -# Execute job -# -${JOBgfs_ozn}/JGDAS_VERFOZN - -exit - diff --git a/driver/gdas/test_jgdas_verfrad.sh b/driver/gdas/test_jgdas_verfrad.sh deleted file mode 100755 index 555cc2f43d..0000000000 --- a/driver/gdas/test_jgdas_verfrad.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/bin/ksh - -#BSUB -o gdas_verfrad.o%J -#BSUB -e gdas_verfrad.o%J -#BSUB -J gdas_verfrad -#BSUB -q dev_shared -#BSUB -n 1 -#BSUB -R affinity[core] -#BSUB -M 100 -#BSUB -W 00:20 -#BSUB -a poe -#BSUB -P GFS-T2O - -set -x - -export PDATE=${PDATE:-2018022112} - -############################################################# -# Specify whether the run is production or development -############################################################# -export PDY=`echo $PDATE | cut -c1-8` -export cyc=`echo $PDATE | cut -c9-10` -export job=gdas_verfrad.${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} -export envir=para -me=`hostname | cut -c1` -export DATAROOT=${DATAROOT:-/gpfs/${me}d2/emc/da/noscrub/${LOGNAME}/test_data} -export COMROOT=${COMROOT:-/ptmpp1/$LOGNAME/com} - - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v15.0.0 - - -############################################################# -# Load modules -############################################################# -. /usrx/local/Modules/3.2.9/init/ksh -module use /nwprod2/modulefiles -module load prod_util -module load util_shared - - -module list - - -############################################################# -# WCOSS environment settings -############################################################# -export POE=YES - - -############################################################# -# Set user specific variables -############################################################# -export RADMON_SUFFIX=${RADMON_SUFFIX:-testrad} -export NWTEST=${NWTEST:-/gpfs/${me}d2/emc/da/noscrub/Edward.Safford/gfs.${gfs_ver}} -export HOMEgfs=${HOMEgfs:-${NWTEST}} -export JOBGLOBAL=${JOBGLOBAL:-${HOMEgfs}/jobs} -export HOMEradmon=${HOMEradmon:-${NWTEST}} -export COM_IN=${COM_IN:-${DATAROOT}} -export TANKverf=${TANKverf:-${COMROOT}/${RADMON_SUFFIX}} - - -############################################################# -# Execute job -############################################################# -$JOBGLOBAL/JGDAS_VERFRAD - -exit - diff --git a/driver/gdas/test_jgdas_verfrad_cray.sh b/driver/gdas/test_jgdas_verfrad_cray.sh deleted file mode 100755 index b40812cc1b..0000000000 --- a/driver/gdas/test_jgdas_verfrad_cray.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/ksh - -#BSUB -o gdas_verfrad.o%J -#BSUB -e gdas_verfrad.o%J -#BSUB -J gdas_verfrad -#BSUB -q dev -#BSUB -M 100 -#BSUB -W 00:20 -#BSUB -P GFS-T2O -#BSUB -R "select[mem>100] rusage[mem=100]" - -set -x - -export PDATE=${PDATE:-2016100106} - -############################################################# -# Specify whether the run is production or development -############################################################# -export PDY=`echo $PDATE | cut -c1-8` -export cyc=`echo $PDATE | cut -c9-10` -export job=gdas_verfrad.${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} -export envir=para - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v15.0.0 -#export global_shared_ver=v14.1.0 -#export gdas_radmon_ver=v2.0.0 -#export radmon_shared_ver=v2.0.4 - - -############################################################# -# Load modules -############################################################# -. $MODULESHOME/init/ksh - -module load prod_util - -module list - - -############################################################# -# WCOSS environment settings -############################################################# -export POE=YES - - -############################################################# -# Set user specific variables -############################################################# -export DATAROOT=${DATAROOT:-/gpfs/hps3/emc/da/noscrub/$LOGNAME/test_data} -export COMROOT=${COMROOT:-/gpfs/hps2/ptmp/$LOGNAME/com} -export RADMON_SUFFIX=${RADMON_SUFFIX:-testrad} -export NWTEST=${NWTEST:-/gpfs/hps3/emc/da/noscrub/${LOGNAME}/gfs.${gfs_ver}} -export HOMEgfs=${HOMEgfs:-${NWTEST}} -export JOBGLOBAL=${JOBGLOBAL:-${HOMEgfs}/jobs} -export HOMEradmon=${HOMEradmon:-${NWTEST}} -export COM_IN=${COM_IN:-${DATAROOT}} -export TANKverf=${TANKverf:-${COMROOT}/${RADMON_SUFFIX}} - - -############################################################# -# Execute job -############################################################# -$JOBGLOBAL/JGDAS_VERFRAD - -exit - diff --git a/driver/gdas/test_jgdas_vminmon.sh b/driver/gdas/test_jgdas_vminmon.sh deleted file mode 100755 index ef3903c879..0000000000 --- a/driver/gdas/test_jgdas_vminmon.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/bin/ksh - -#BSUB -o gdas_vminmon.o%J -#BSUB -e gdas_vminmon.o%J -#BSUB -J gdas_vminmon -#BSUB -q dev_shared -#BSUB -n 1 -#BSUB -R affinity[core] -#BSUB -M 80 -#BSUB -W 00:05 -#BSUB -a poe -#BSUB -P GFS-T2O - -set -x - -export PDATE=${PDATE:-2016030706} - -############################################################# -# Specify whether the run is production or development -############################################################# -export PDY=`echo $PDATE | cut -c1-8` -export cyc=`echo $PDATE | cut -c9-10` -me=`hostname | cut -c1` - -export job=gdas_vminmon.${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} -export envir=para -export DATAROOT=/gpfs/${me}d2/emc/da/noscrub/Edward.Safford/test_data -export COMROOT=/ptmpp1/$LOGNAME/com - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v15.0.0 - - -############################################################# -# Load modules -############################################################# -. /usrx/local/Modules/3.2.9/init/ksh -module use /nwprod2/modulefiles -module load grib_util -module load prod_util - -module list - - -############################################################# -# WCOSS environment settings -############################################################# -export POE=YES - - -############################################################# -# Set user specific variables -############################################################# -export MINMON_SUFFIX=${MINMON_SUFFIX:-testminmon} -export NWTEST=${NWTEST:-/gpfs/${me}d2/emc/da/noscrub/Edward.Safford} -export HOMEgfs=${HOMEgfs:-${NWTEST}/gfs.${gfs_ver}} -export JOBGLOBAL=${JOBGLOBAL:-${HOMEgfs}/jobs} - -export COM_IN=${COM_IN:-${DATAROOT}} -export M_TANKverf=${M_TANKverf:-${COMROOT}/${MINMON_SUFFIX}} - - -############################################################# -# Execute job -############################################################# -$JOBGLOBAL/JGDAS_VMINMON - -exit - diff --git a/driver/gdas/test_jgdas_vminmon_cray.sh b/driver/gdas/test_jgdas_vminmon_cray.sh deleted file mode 100755 index e51a04a819..0000000000 --- a/driver/gdas/test_jgdas_vminmon_cray.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/ksh - -#BSUB -o gdas_vminmon.o%J -#BSUB -e gdas_vminmon.o%J -#BSUB -J gdas_vminmon -#BSUB -q dev -#BSUB -M 80 -#BSUB -W 00:05 -#BSUB -P GFS-T2O -#BSUB -R "select[mem>80] rusage[mem=80]" - -set -x - -export PDATE=${PDATE:-2016030700} - -############################################################# -# Specify whether the run is production or development -############################################################# -export PDY=`echo $PDATE | cut -c1-8` -export cyc=`echo $PDATE | cut -c9-10` -export job=gdas_vminmon.${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} -export envir=para -export DATAROOT=${DATAROOT:-/gpfs/hps3/emc/da/noscrub/$LOGNAME/test_data} -export COMROOT=${COMROOT:-/gpfs/hps2/ptmp/$LOGNAME/com} - - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v15.0.0 - - -############################################################# -# Load modules -############################################################# -. $MODULESHOME/init/ksh - -module load prod_util -module load pm5 - -module list - - -############################################################# -# WCOSS environment settings -############################################################# -export POE=YES - - -############################################################# -# Set user specific variables -############################################################# -export MINMON_SUFFIX=${MINMON_SUFFIX:-testminmon} -export NWTEST=${NWTEST:-/gpfs/hps3/emc/da/noscrub/${LOGNAME}} -export HOMEgfs=${HOMEgfs:-${NWTEST}/gfs.${gfs_ver}} -export JOBGLOBAL=${JOBGLOBAL:-${HOMEgfs}/jobs} -export COM_IN=${COM_IN:-${DATAROOT}} -export M_TANKverf=${M_TANKverf:-${COMROOT}/${MINMON_SUFFIX}} - - -############################################################# -# Execute job -############################################################# -$JOBGLOBAL/JGDAS_VMINMON - -exit - diff --git a/driver/gfs/para_config.gfs_analysis b/driver/gfs/para_config.gfs_analysis deleted file mode 100755 index e910b5a1f7..0000000000 --- a/driver/gfs/para_config.gfs_analysis +++ /dev/null @@ -1,31 +0,0 @@ -# Set variables -export NWROOT=$NWTEST -export COM_IN=/gpfs/hps/ptmp/emc.glopara/com2/gfs/para -export COM_OUT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/test -export SENDDBN=YES -export SAVEGES=YES -export SENDCOM=YES -export gesenvir=para -export GESROOT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/test -export KEEPDATA=NO - - -# Set paths -export HOMEgsm=$NWTEST/global_shared.${global_shared_ver} - - -# Set fix files -if [ $CDATE -ge 2017030800 -a $CDATE -lt 2017031312 ] ; then - SATINFO=/gpfs/hps/emc/global/noscrub/emc.glopara/para_gfs/prnemsrn/global_satinfo.txt -fi - - -# Set scripts -GETGESSH=$HOMEgsm/ush/getges.sh - - -# Set executables - - -# Dev para jobs -export ERRSCRIPT='eval [[ $err = 0 ]]' diff --git a/driver/gfs/para_config.gfs_forecast_high b/driver/gfs/para_config.gfs_forecast_high deleted file mode 100755 index c1454c4110..0000000000 --- a/driver/gfs/para_config.gfs_forecast_high +++ /dev/null @@ -1,32 +0,0 @@ -# Set variables -export NWROOT=$NWTEST -export COM_IN=/gpfs/hps/ptmp/emc.glopara/com2/gfs/para -export COM_OUT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/test -export SENDDBN=YES -export SAVEGES=NO -export GETGES_NWG=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export gesenvir=para -export GETGES_COM=/gpfs/hps/ptmp/emc.glopara/com2 -export GESROOT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export gespath=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export KEEPDATA=NO - - -# Set paths -export HOMEgfs=$NWTEST/gfs.${gfs_ver} -export HOMEgsm=$NWTEST/global_shared.${global_shared_ver} - - -# Set fix files - - -# Set scripts - - -# Set executables - - -# Dev para jobs -export ERRSCRIPT='eval [[ $err = 0 ]]' - - diff --git a/driver/gfs/para_config.gfs_forecast_low b/driver/gfs/para_config.gfs_forecast_low deleted file mode 100755 index c1454c4110..0000000000 --- a/driver/gfs/para_config.gfs_forecast_low +++ /dev/null @@ -1,32 +0,0 @@ -# Set variables -export NWROOT=$NWTEST -export COM_IN=/gpfs/hps/ptmp/emc.glopara/com2/gfs/para -export COM_OUT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/test -export SENDDBN=YES -export SAVEGES=NO -export GETGES_NWG=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export gesenvir=para -export GETGES_COM=/gpfs/hps/ptmp/emc.glopara/com2 -export GESROOT=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export gespath=/gpfs/hps/ptmp/emc.glopara/com2/gfs/nwges2 -export KEEPDATA=NO - - -# Set paths -export HOMEgfs=$NWTEST/gfs.${gfs_ver} -export HOMEgsm=$NWTEST/global_shared.${global_shared_ver} - - -# Set fix files - - -# Set scripts - - -# Set executables - - -# Dev para jobs -export ERRSCRIPT='eval [[ $err = 0 ]]' - - diff --git a/driver/gfs/test_emcsfc.sh b/driver/gfs/test_emcsfc.sh deleted file mode 100755 index 477b1ddbc7..0000000000 --- a/driver/gfs/test_emcsfc.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/sh - -#-------------------------------------------------------------- -# Run the JGFS_EMCSFC_SFC_PREP j-job on wcoss cray -# -# Invoke as follows: -# 'cat $script | bsub' -#-------------------------------------------------------------- - -#BSUB -oo emcsfc.log -#BSUB -eo emcsfc.log -#BSUB -q dev_shared -#BSUB -R rusage[mem=2000] -#BSUB -J emcsfc -#BSUB -P GFS-T2O -#BSUB -cwd . -#BSUB -W 0:03 - -set -x - -export cyc="00" -export job=emcsfc_sfc_prep_${cyc} -export KEEPDATA="YES" -export SENDECF="NO" -export SENDCOM="YES" -export RUN_ENVIR="nco" - -export DATA="/gpfs/hps/stmp/$LOGNAME/tmpnwprd/${job}" -export jlogfile="/gpfs/hps/stmp/$LOGNAME/jlogfile" - -module load prod_envir/1.1.0 - -export envir="prod" -export COMROOT="/gpfs/hps/stmp/${LOGNAME}"${COMROOT} - -export NWROOT="/gpfs/hps/emc/global/noscrub/George.Gayno/q3fy17_final" -export global_shared_ver="v14.1.0" - -module load grib_util/1.0.3 -module load prod_util/1.0.5 - -export jobid="LLgfs_emcsfc_sfc_prep" -export gfs_ver="v14.1.0" -$NWROOT/gfs.${gfs_ver}/jobs/JGFS_EMCSFC_SFC_PREP - -exit 0 diff --git a/driver/gfs/test_gfs_analysis.sh b/driver/gfs/test_gfs_analysis.sh deleted file mode 100755 index f7a8693ea3..0000000000 --- a/driver/gfs/test_gfs_analysis.sh +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/sh --login - -#BSUB -L /bin/sh -#BSUB -P GFS-T2O -#BSUB -o gfs_analysis.o%J -#BSUB -e gfs_analysis.o%J -#BSUB -J gfs_analysis -#BSUB -q devonprod -#BSUB -M 3072 -#BSUB -extsched 'CRAYLINUX[]' -#BSUB -W 01:00 -#BSUB -cwd /gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/q3fy17_final/gfs.v14.1.0/driver - -set -x - -export NODES=240 -export ntasks=480 -export ptile=2 -export threads=12 - -export CDATE=2017040700 - - -############################################################# -# Specify whether the run is production or development -############################################################# -export RUN_ENVIR=para -export PDY=`echo $CDATE | cut -c1-8` -export cyc=`echo $CDATE | cut -c9-10` -export job=gfs_analysis_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} -export envir=para -export DATAROOT=/gpfs/hps/stmp/$LOGNAME/test - - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v14.1.0 -export global_shared_ver=v14.1.0 -export crtm_ver=2.2.4 -export prod_envir_ver=1.1.0 -export grib_util_ver=1.0.3 -export prod_util_ver=1.0.8 -export util_shared_ver=1.0.3 - - -############################################################# -# Load modules -############################################################# -. $MODULESHOME/init/sh -module load crtm-intel/${crtm_ver} -module load prod_envir/$prod_envir_ver -module load grib_util/$grib_util_ver -module load prod_util/$prod_util_ver -module load util_shared/$util_shared_ver -module load cfp-intel-sandybridge - -module list - - -############################################################# -# WCOSS_C environment settings -############################################################# -export KMP_AFFINITY=disabled -export OMP_STACKSIZE=2G -export OMP_NUM_THREADS=$threads -export FORT_BUFFERED=true - -export OMP_NUM_THREADS_CY=24 -export NTHREADS=$OMP_NUM_THREADS_CY -export NTHREADS_GSI=$threads -export NTHSTACK=1024000000 - - -############################################################# -# Set user specific variables -############################################################# -export NWTEST=/gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/q3fy17_final -export PARA_CONFIG=$NWTEST/gfs.${gfs_ver}/driver/para_config.gfs_analysis -export JOBGLOBAL=$NWTEST/gfs.${gfs_ver}/jobs - - -############################################################# -# Execute job -############################################################# -$JOBGLOBAL/JGFS_ANALYSIS - -exit diff --git a/driver/gfs/test_gfs_forecast_high.sh b/driver/gfs/test_gfs_forecast_high.sh deleted file mode 100755 index 843648d2f9..0000000000 --- a/driver/gfs/test_gfs_forecast_high.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/bin/sh --login - -#BSUB -L /bin/sh -#BSUB -P GFS-T2O -#BSUB -o gfs_forecast_high.o%J -#BSUB -e gfs_forecast_high.o%J -#BSUB -J gfs_forecast_high -#BSUB -q devonprod -#BSUB -M 768 -#BSUB -extsched 'CRAYLINUX[]' -#BSUB -W 02:00 -#BSUB -cwd /gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work/gfs.v14.1.0/driver - -set -x - -# 65 nodes = 59 compute nodes + 6 i/o nodes -# set WRT_GROUP=6 for 6 i/o nodes (see ../parm/gfs_forecast_high.parm) -# set WRTPE_PER_GROUP=4 to match ptile -export NODES=65 -export ntasks=260 -export ptile=4 -export threads=6 - -export CDATE=2017012506 - -############################################################# -# Specify whether the run is production or development -############################################################# -export RUN_ENVIR=para -export PDY=`echo $CDATE | cut -c1-8` -export cyc=`echo $CDATE | cut -c9-10` -export job=gfs_forecast_high_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} -export envir=para -export DATAROOT=/gpfs/hps/stmp/$LOGNAME/test - - -############################################################# -# Specify versions -############################################################# -export global_shared_ver=v14.1.0 -export gfs_ver=v14.1.0 -export grib_util_ver=1.0.3 -export prod_util_ver=1.0.5 - - -############################################################# -# Load modules -############################################################# -. $MODULESHOME/init/sh -module load grib_util/$grib_util_ver -module load prod_util/$prod_util_ver -module load craype-hugepages16M - -module list - - -############################################################# -# WCOSS_C environment settings -############################################################# -export KMP_AFFINITY=disabled -export OMP_STACKSIZE=1024m -export OMP_NUM_THREADS=$threads -export NTHREADS=$threads - - -############################################################# -# Set user specific variables -############################################################# -export NWTEST=/gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work -export PARA_CONFIG=$NWTEST/gfs.${gfs_ver}/driver/para_config.gfs_forecast_high -export JOBGLOBAL=$NWTEST/gfs.${gfs_ver}/jobs - - -############################################################# -# Execute job -############################################################# -$JOBGLOBAL/JGFS_FORECAST_HIGH - -exit - diff --git a/driver/gfs/test_gfs_forecast_low.sh b/driver/gfs/test_gfs_forecast_low.sh deleted file mode 100755 index 219b9814f9..0000000000 --- a/driver/gfs/test_gfs_forecast_low.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/bin/sh --login - -#BSUB -L /bin/sh -#BSUB -P GFS-T2O -#BSUB -o gfs_forecast_low.o%J -#BSUB -e gfs_forecast_low.o%J -#BSUB -J gfs_forecast_low -#BSUB -q devonprod -#BSUB -M 768 -#BSUB -extsched 'CRAYLINUX[]' -#BSUB -W 01:00 -#BSUB -cwd /gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work/gfs.v14.1.0/driver - -set -x - -# 20 nodes = 18 compute nodes + 2 i/o nodes -# set WRT_GROUP=2 for 2 i/o nodes (see ../parm/gfs_forecast_low.parm) -# set WRTPE_PER_GROUP=4 to match ptile -export NODES=20 -export ntasks=80 -export ptile=4 -export threads=6 - -export CDATE=2017012506 - -############################################################# -# Specify whether the run is production or development -############################################################# -export RUN_ENVIR=para -export PDY=`echo $CDATE | cut -c1-8` -export cyc=`echo $CDATE | cut -c9-10` -export job=gfs_forecast_low_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} -export envir=para -export DATAROOT=/gpfs/hps/stmp/$LOGNAME/test - - -############################################################# -# Specify versions -############################################################# -export global_shared_ver=v14.1.0 -export gfs_ver=v14.1.0 -export grib_util_ver=1.0.3 -export prod_util_ver=1.0.5 - - -############################################################# -# Load modules -############################################################# -. $MODULESHOME/init/sh -module load grib_util/$grib_util_ver -module load prod_util/$prod_util_ver -module load craype-hugepages16M - -module list - - -############################################################# -# WCOSS_C environment settings -############################################################# -export KMP_AFFINITY=disabled -export OMP_STACKSIZE=1024m -export OMP_NUM_THREADS=$threads -export NTHREADS=$threads - - -############################################################# -# Set user specific variables -############################################################# -export NWTEST=/gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work -export PARA_CONFIG=$NWTEST/gfs.${gfs_ver}/driver/para_config.gfs_forecast_low -export JOBGLOBAL=$NWTEST/gfs.${gfs_ver}/jobs - - -############################################################# -# Execute job -############################################################# -$JOBGLOBAL/JGFS_FORECAST_LOW - -exit - diff --git a/driver/gfs/test_jgfs_cyclone_tracker.ecf b/driver/gfs/test_jgfs_cyclone_tracker.ecf deleted file mode 100755 index 8bd3e93ec0..0000000000 --- a/driver/gfs/test_jgfs_cyclone_tracker.ecf +++ /dev/null @@ -1,121 +0,0 @@ -#BSUB -J GFS_tracker_TEST_06 -#BSUB -o /ptmpp2/Qingfu.Liu/com2/gfs_cyclone_traker_06.o%J -#BSUB -e /ptmpp2/Qingfu.Liu/com2/gfs_cyclone_traker_06.o%J -#BSUB -L /bin/sh -#BSUB -q debug -#BSUB -W 00:30 -#BSUB -cwd /ptmpp2/Qingfu.Liu/com2 -#BSUB -P GFS-T2O -##BSUB -R rusage[mem=5000] -##BSUB -R affinity[core] -#BSUB -n 1 -#BSUB -R span[ptile=1] -#BSUB -R affinity[cpu(32):distribute=balance] -#BSUB -a poe -#BSUB -x - -#%include -#%include -. /usrx/local/Modules/default/init/ksh -module use /nwprod2/modulefiles -module load grib_util/v1.0.1 -module load prod_util/v1.0.1 -module load ibmpe ics lsf - -set -x - -export OMP_NUM_THREADS=32 - - export MP_LABELIO=yes - export MP_MPILIB=mpich2 - export MP_EUILIB=us - export MP_TASK_AFFINITY=cpu:32 - export MP_USE_BULK_XFER=yes - export MP_STDOUTMODE=unordered - export MPICH_ALLTOALL_THROTTLE=0 - export MP_COREFILE_FORMAT=core.txt - export OMP_STACKSIZE=3G - export MP_COMPILER=intel - -export envir=dev2 -export cyc=06 -export job=gfs_cyclone_tracker_${cyc} -export RUN_ENVIR=test -#export NWROOT=/nwprod2 -export NWROOT=/global/save/Qingfu.Liu - -#export DATAROOT=/tmpnwprd_p2 -export DATAROOT=/ptmpp2/Qingfu.Liu - -#export COMROOT=/com2 -export COMROOT=/ptmpp2/Qingfu.Liu/com2 -export COMDATEROOT=/com2 - -export shared_global_home=$NWROOT/shared_nco_20160129 -export gfs_global_home=$NWROOT/gfs_nco_20160129 -export gdas_global_home=$NWROOT/gdas_nco_20160129 -#export DCOMROOT=/dcom - -export COMROOTp1=/com -export KEEPDATA=YES -export CLEAN=NO -export cycle=t00z - -#which setpdy.sh -setpdy.sh -. PDY - -export COMINgfs=/com/gfs/prod/gfs.${PDY} -export COMINgdas=/com/gfs/prod/gdas.${PDY} - -# versions file for tracker $tracker.ver -VERSION_FILE=${NWROOT}/versions/tropcy_qc_reloc.ver -if [ -f $VERSION_FILE ]; then - . $VERSION_FILE -else - ecflow_client --abort - exit -fi - -# CALL executable job script here -#export HOMERELO=${NWROOT}/tropcy_qc_reloc.${tropcy_qc_reloc_ver}_r62774_phase2 -export HOMERELO=$shared_global_home -export HOMESYND=${HOMERELO} -#export envir_getges=prod -$gfs_global_home/jobs/JGFS_CYCLONE_TRACKER - -if [ $? -ne 0 ]; then -# ecflow_client --abort - exit -fi - -#%include -#%manual -######################################################################## -###################################################################### -#PURPOSE: Executes the job JGFS_CYCLONE_TRACKER -###################################################################### -############################################################### -## Function been tested: creates GFS TC forecast track -## -## Calling sequence: JGFS_CYCLONE_TRACKER, global_extrkr.sh -## -## Initial condition: provide hours (cyc=?) -## -## Usage: bsub < test_jgfs_cyclone_tracker -## -## Data_In: COMINgfs=/com/gfs/prod/gfs.${PDY} -## COMINgdas=/com/gfs/prod/gdas.${PDY} -## -## Data_Out: /ptmpp2/Qingfu.Liu/com2/gfs/dev2/gfs.$PDY -## -## Result verification: compare with the operational results -################################################################ -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -#%end diff --git a/driver/gfs/test_jgfs_cyclone_tracker_cray.sh b/driver/gfs/test_jgfs_cyclone_tracker_cray.sh deleted file mode 100755 index 929ffa5f2b..0000000000 --- a/driver/gfs/test_jgfs_cyclone_tracker_cray.sh +++ /dev/null @@ -1,167 +0,0 @@ -#!/bin/bash -#BSUB -J t1534 -#BSUB -W 0:30 -#BSUB -extsched 'CRAYLINUX[]' -R '1*{order[slots] select[craylinux && !vnode]} + 24*{select[craylinux && vnode]span[ptile=24] cu[type=cabinet]}' -#BSUB -o /gpfs/hps/emc/global/noscrub/Qingfu.Liu/gfs.v14.1.0/driver/test_jgfs_cyclone_tracker_06.o%J -#BSUB -e /gpfs/hps/emc/global/noscrub/Qingfu.Liu/gfs.v14.1.0/driver/test_jgfs_cyclone_tracker_06.o%J -###BSUB -o t574.stdout.%J -###BSUB -e t574.stderr.%J -#BSUB -q "dev" -#BSUB -P "GFS-T2O" -#BSUB -M 200 -###BSUB -M "60" - - -module use /gpfs/hps/nco/ops/nwprod/modulefiles -module load prod_util -module load prod_envir/1.1.0 -module unload grib_util -module load grib_util/1.0.3 -##module load crtm-intel/2.2.3 -module load PrgEnv-intel craype cray-mpich ESMF-intel-haswell/3_1_0rp5 -module list - -#export MKL_CBWR=AVX -#ulimit -s unlimited -#ulimit -a - -set -x - -export OMP_NUM_THREADS=24 - - export MP_LABELIO=yes - export MP_MPILIB=mpich2 - export MP_EUILIB=us - export MP_TASK_AFFINITY=cpu:24 - export MP_USE_BULK_XFER=yes - export MP_STDOUTMODE=unordered - export MPICH_ALLTOALL_THROTTLE=0 - export MP_COREFILE_FORMAT=core.txt - export OMP_STACKSIZE=3G - export MP_COMPILER=intel - -#export envir=prod -export envir=para -export cyc=06 -export job=test_jgfs_cyclone_tracker_${cyc} -export RUN_ENVIR=test -#export NWROOT=/nwprod2 -#export NWROOT=/global/save/Qingfu.Liu -export NWROOT=/gpfs/hps/emc/global/noscrub/Qingfu.Liu - -#export DATAROOT=/tmpnwprd_p2 -#export DATAROOT=/ptmpp2/Qingfu.Liu -export DATAROOT=/gpfs/hps/ptmp/Qingfu.Liu - -#export COMROOT=/com2 -#export COMROOT=/ptmpp2/Qingfu.Liu/com2 -#export COMROOT=/gpfs/hps/ptmp/Qingfu.Liu/com -#export COMROOT=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com -#export COMDATEROOT=/com -#export COMROOT=/gpfs/hps/ptmp/emc.glopara/com2 -#export COMDATEROOT=/com2 -export COMROOT=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com -export COMDATEROOT=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com - -#export DCOMROOT=/dcom - -#export COMROOTp1=/gpfs/gp1/nco/ops/com -#export COMROOTp1=/gpfs/tp2/nco/ops/com -#export COMROOTp1=/gpfs/gp2/nco/ops/com -export COMROOTp1=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com -export KEEPDATA=YES -export CLEAN=NO -export cycle=t${cyc}z - -#which setpdy.sh -#setpdy.sh -#. PDY - -export archsyndir=${COMINsyn:-$(compath.py gfs/prod/syndat)} -export WGRIB2=/gpfs/hps/nco/ops/nwprod/grib_util.v1.0.3/exec/wgrib2 -export GRB2INDEX=/gpfs/hps/nco/ops/nwprod/grib_util.v1.0.3/exec/grb2index -export GRBINDEX2=/gpfs/hps/nco/ops/nwprod/grib_util.v1.0.3/exec/grb2index - -#export PDY=20150723 -export PDY=20140814 - -#export COMINgfs=/com/gfs/prod/gfs.${PDY} -#export COMINgdas=/com/gfs/prod/gdas.${PDY} -#export COMINgfs=/gpfs/gp2/nco/ops/com/gfs/prod/gfs.${PDY} -#export COMINgdas=/gpfs/gp2/nco/ops/com/gfs/prod/gdas.${PDY} -export COMINgfs=$COMROOT/gfs/$envir/gfs.${PDY} -export COMINgdas=$COMROOT/gfs/$envir/gdas.${PDY} -export ARCHSYND=${COMINsyn:-$(compath.py gfs/prod/syndat)} -export HOMENHC=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/guidance/storm-data/ncep -#export GETGES_COM=/gpfs/gp2/nco/ops/com -#export GESROOT=/gpfs/gp2/nco/ops/com -#export GESROOT=/gpfs/hps/ptmp/Qingfu.Liu/com -#export GETGES_COM=/gpfs/hps/ptmp/Qingfu.Liu/com -export GESROOT=$COMROOT -export GETGES_COM=$COMROOT - -# versions file for tracker $tracker.ver -VERSION_FILE=${NWROOT}/versions/tropcy_qc_reloc.ver -if [ -f $VERSION_FILE ]; then - . $VERSION_FILE -else - ecflow_client --abort - exit -fi - -export shared_global_home=$NWROOT/global_shared.v14.1.0 -export gfs_global_home=$NWROOT/gfs.v14.1.0 -export gdas_global_home=$NWROOT/gdas.v14.1.0 - -export files_override=F -export PROCESS_TROPCY=NO -export copy_back=NO -export SENDCOM=NO -export APRNRELOC="time aprun -b -j1 -n7 -N1 -d24 -cc depth " -export APRNGETTX="time aprun -q -j1 -n1 -N1 -d1 -cc depth" -#export APRNRELOC="time aprun -b -j0 -n7 -N1 -d32 -cc depth" - -# CALL executable job script here -export HOMERELO=$shared_global_home -#export HOMERELO=${NWROOT}/tropcy_qc_reloc.${tropcy_qc_reloc_ver}_r62774_phase2 -export HOMESYND=${HOMERELO} -#export envir_getges=prod -$gfs_global_home/jobs/JGFS_CYCLONE_TRACKER_test - -if [ $? -ne 0 ]; then -# ecflow_client --abort - exit -fi - -#%include -#%manual -###################################################################### -#PURPOSE: Executes the job JGDAS_TROPCY_QC_RELOC -###################################################################### -############################################################# -# Function been tested: TCvital quality control and archive, hurricane relocation -# -# Calling sequence: JGFS_TROPCY_QC_RELOC, extropcy_qc_reloc.sh, -# # syndat_qctropcy.sh, tropcy_relocate.sh,syndat_getjtbul.sh, -# # tropcy_relocate_extrkr.sh,parse-storm-type.pl -# -# Initial condition: provide hours (cyc=?) -# -# Usage: bsub < test_jgfs_tropcy_qc_reloc -# -# Data_In: COMINgfs=/com/gfs/prod/gfs.${PDY} -# COMINgdas=/com/gfs/prod/gdas.${PDY} -# -# Data_Out: /ptmpp2/Qingfu.Liu/com2/gfs/dev2/gfs.${PDY} -# -# Result verification: compare with the operational results -# (results might be slightly different due to 3hourly/hourly tracker) -############################################################## -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -#%end diff --git a/driver/gfs/test_jgfs_tropcy_qc_reloc.ecf b/driver/gfs/test_jgfs_tropcy_qc_reloc.ecf deleted file mode 100755 index 3c0378074d..0000000000 --- a/driver/gfs/test_jgfs_tropcy_qc_reloc.ecf +++ /dev/null @@ -1,124 +0,0 @@ -#BSUB -J Relocation_TEST_06 -#BSUB -o /ptmpp2/Qingfu.Liu/com2/gfs_tropcy_qc_reloc_06.o%J -#BSUB -e /ptmpp2/Qingfu.Liu/com2/gfs_tropcy_qc_reloc_06.o%J -#BSUB -L /bin/sh -#BSUB -q debug -#BSUB -W 00:30 -#BSUB -cwd /ptmpp2/Qingfu.Liu/com2 -#BSUB -P GFS-T2O -##BSUB -R rusage[mem=5000] -##BSUB -R affinity[core] -#BSUB -n 7 -#BSUB -R span[ptile=1] -#BSUB -R affinity[cpu(32):distribute=balance] -#BSUB -a poe -#BSUB -x - -#%include -#%include -. /usrx/local/Modules/default/init/ksh -module use /nwprod2/modulefiles -module load grib_util/v1.0.1 -module load prod_util/v1.0.1 -module load ibmpe ics lsf - -set -x - -export OMP_NUM_THREADS=32 - - export MP_LABELIO=yes - export MP_MPILIB=mpich2 - export MP_EUILIB=us - export MP_TASK_AFFINITY=cpu:32 - export MP_USE_BULK_XFER=yes - export MP_STDOUTMODE=unordered - export MPICH_ALLTOALL_THROTTLE=0 - export MP_COREFILE_FORMAT=core.txt - export OMP_STACKSIZE=3G - export MP_COMPILER=intel - -export envir=dev2 -export cyc=06 -export job=gfs_tropcy_qc_reloc_${cyc} -export RUN_ENVIR=test -#export NWROOT=/nwprod2 -export NWROOT=/global/save/Qingfu.Liu - -#export DATAROOT=/tmpnwprd_p2 -export DATAROOT=/ptmpp2/Qingfu.Liu - -#export COMROOT=/com2 -export COMROOT=/ptmpp2/Qingfu.Liu/com2 -export COMDATEROOT=/com2 - -#export DCOMROOT=/dcom - -export shared_global_home=$NWROOT/shared_nco_20160129 -export gfs_global_home=$NWROOT/gfs_nco_20160129 -export gdas_global_home=$NWROOT/gdas_nco_20160129 - -export COMROOTp1=/com -export KEEPDATA=YES -export CLEAN=NO -export cycle=t00z - -#which setpdy.sh -setpdy.sh -. PDY - -export COMINgfs=/com/gfs/prod/gfs.${PDY} -export COMINgdas=/com/gfs/prod/gdas.${PDY} - -# versions file for tracker $tracker.ver -VERSION_FILE=${NWROOT}/versions/tropcy_qc_reloc.ver -if [ -f $VERSION_FILE ]; then - . $VERSION_FILE -else - ecflow_client --abort - exit -fi - -# CALL executable job script here -export HOMERELO=$shared_global_home -#export HOMERELO=${NWROOT}/tropcy_qc_reloc.${tropcy_qc_reloc_ver}_r62774_phase2 -export HOMESYND=${HOMERELO} -#export envir_getges=prod -$gfs_global_home/jobs/JGFS_TROPCY_QC_RELOC - -if [ $? -ne 0 ]; then -# ecflow_client --abort - exit -fi - -#%include -#%manual -###################################################################### -##PURPOSE: Executes the job JGFS_TROPCY_QC_RELOC -####################################################################### -############################################################## -# Function been tested: TCvital quality control and archive, hurricane relocation -# -# Calling sequence: JGFS_TROPCY_QC_RELOC, extropcy_qc_reloc.sh, -# syndat_qctropcy.sh, tropcy_relocate.sh,syndat_getjtbul.sh, -# tropcy_relocate_extrkr.sh,parse-storm-type.pl -# -# Initial condition: provide hours (cyc=?) -# -# Usage: bsub < test_jgfs_tropcy_qc_reloc -# -# Data_In: COMINgfs=/com/gfs/prod/gfs.${PDY} -# COMINgdas=/com/gfs/prod/gdas.${PDY} -# -# Data_Out: /ptmpp2/Qingfu.Liu/com2/gfs/dev2/gfs.${PDY} -# -# Result verification: compare with the operational results -# (results might be slightly different due to 3hourly/hourly tracker) -############################################################### -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -#%end diff --git a/driver/gfs/test_jgfs_tropcy_qc_reloc_cray.sh b/driver/gfs/test_jgfs_tropcy_qc_reloc_cray.sh deleted file mode 100755 index 288db8b4eb..0000000000 --- a/driver/gfs/test_jgfs_tropcy_qc_reloc_cray.sh +++ /dev/null @@ -1,155 +0,0 @@ -#!/bin/bash -#BSUB -J t1534 -#BSUB -W 0:30 -#BSUB -extsched 'CRAYLINUX[]' -R '1*{order[slots] select[craylinux && !vnode]} + 168*{select[craylinux && vnode]span[ptile=24] cu[type=cabinet]}' -#BSUB -o /gpfs/hps/emc/global/noscrub/Qingfu.Liu/gfs.v14.1.0/driver/gfs_tropcy_qc_reloc_06.o%J -#BSUB -e /gpfs/hps/emc/global/noscrub/Qingfu.Liu/gfs.v14.1.0/driver/gfs_tropcy_qc_reloc_06.o%J -###BSUB -o t574.stdout.%J -###BSUB -e t574.stderr.%J -#BSUB -q "dev" -#BSUB -P "GFS-T2O" -#BSUB -M 200 -###BSUB -M "60" - - -module use /gpfs/hps/nco/ops/nwprod/modulefiles -module load prod_util -module load prod_envir/1.1.0 -module unload grib_util -module load grib_util/1.0.3 -##module load crtm-intel/2.2.3 -module load PrgEnv-intel craype cray-mpich ESMF-intel-haswell/3_1_0rp5 -module list - -#export MKL_CBWR=AVX -#ulimit -s unlimited -#ulimit -a - -set -x - -export OMP_NUM_THREADS=24 - - export MP_LABELIO=yes - export MP_MPILIB=mpich2 - export MP_EUILIB=us - export MP_TASK_AFFINITY=cpu:24 - export MP_USE_BULK_XFER=yes - export MP_STDOUTMODE=unordered - export MPICH_ALLTOALL_THROTTLE=0 - export MP_COREFILE_FORMAT=core.txt - export OMP_STACKSIZE=3G - export MP_COMPILER=intel - -export envir=para -export cyc=06 -export job=gfs_tropcy_qc_reloc_${cyc} -export RUN_ENVIR=test -#export NWROOT=/nwprod2 -#export NWROOT=/global/save/Qingfu.Liu -export NWROOT=/gpfs/hps/emc/global/noscrub/Qingfu.Liu - -#export DATAROOT=/tmpnwprd_p2 -#export DATAROOT=/ptmpp2/Qingfu.Liu -export DATAROOT=/gpfs/hps/ptmp/Qingfu.Liu - -#export COMROOT=/com2 -#export COMROOT=/ptmpp2/Qingfu.Liu/com2 -#export COMROOT=/gpfs/hps/ptmp/Qingfu.Liu/com -#export COMDATEROOT=/com -export COMROOT=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com -export COMDATEROOT=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com - -#export DCOMROOT=/dcom - -#export COMROOTp1=/gpfs/gp1/nco/ops/com -#export COMROOTp1=/gpfs/tp1/nco/ops/com -export COMROOTp1=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com -export KEEPDATA=YES -export CLEAN=NO -export cycle=t${cyc}z - -#which setpdy.sh -#setpdy.sh -#. PDY - -export PDY=20140814 -##export PDY=20150723 - -#export COMINgfs=/com/gfs/prod/gfs.${PDY} -#export COMINgdas=/com/gfs/prod/gdas.${PDY} -#export COMINgfs=/gpfs/tp1/nco/ops/com/gfs/prod/gfs.${PDY} -#export COMINgdas=/gpfs/tp1/nco/ops/com/gfs/prod/gdas.${PDY} -export COMINgfs=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com/gfs/$envir/gfs.${PDY} -export COMINgdas=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com/gfs/$envir/gdas.${PDY} -export ARCHSYND=${COMINsyn:-$(compath.py gfs/prod/syndat)} -export HOMENHC=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/guidance/storm-data/ncep -#export GETGES_COM=/gpfs/tp1/nco/ops/com -export GETGES_COM=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com -export GESROOT=/gpfs/hps/emc/global/noscrub/Qingfu.Liu/com - -# versions file for tracker $tracker.ver -VERSION_FILE=${NWROOT}/versions/tropcy_qc_reloc.ver -if [ -f $VERSION_FILE ]; then - . $VERSION_FILE -else - ecflow_client --abort - exit -fi - -export shared_global_home=$NWROOT/global_shared.v14.1.0 -export gfs_global_home=$NWROOT/gfs.v14.1.0 -export gdas_global_home=$NWROOT/gdas.v14.1.0 - -export files_override=F -export PROCESS_TROPCY=NO -export copy_back=NO -export SENDCOM=NO -export APRNRELOC="time aprun -b -j1 -n7 -N1 -d24 -cc depth " -export APRNGETTX="time aprun -q -j1 -n1 -N1 -d1 -cc depth" -#export APRNRELOC="time aprun -b -j0 -n7 -N1 -d32 -cc depth" - -# CALL executable job script here -export HOMERELO=$shared_global_home -#export HOMERELO=${NWROOT}/tropcy_qc_reloc.${tropcy_qc_reloc_ver}_r62774_phase2 -export HOMESYND=${HOMERELO} -#export envir_getges=prod -$gfs_global_home/jobs/JGFS_TROPCY_QC_RELOC - - -if [ $? -ne 0 ]; then -# ecflow_client --abort - exit -fi - -#%include -#%manual -###################################################################### -#PURPOSE: Executes the job JGFS_TROPCY_QC_RELOC -###################################################################### -############################################################# -# Function been tested: TCvital quality control and archive, hurricane relocation -# -# Calling sequence: JGFS_TROPCY_QC_RELOC, extropcy_qc_reloc.sh, -# # syndat_qctropcy.sh, tropcy_relocate.sh,syndat_getjtbul.sh, -# # tropcy_relocate_extrkr.sh,parse-storm-type.pl -# -# Initial condition: provide hours (cyc=?) -# -# Usage: bsub < test_jgfs_tropcy_qc_reloc -# -# Data_In: COMINgfs=/com/gfs/prod/gfs.${PDY} -# COMINgdas=/com/gfs/prod/gdas.${PDY} -# -# Data_Out: /ptmpp2/Qingfu.Liu/com2/gfs/dev2/gfs.${PDY} -# -# Result verification: compare with the operational results -# (results might be slightly different due to 3hourly/hourly tracker) -############################################################## -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -#%end diff --git a/driver/gfs/test_jgfs_vminmon.sh b/driver/gfs/test_jgfs_vminmon.sh deleted file mode 100755 index 63a51c0eca..0000000000 --- a/driver/gfs/test_jgfs_vminmon.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/ksh - -#BSUB -o gfs_vminmon.o%J -#BSUB -e gfs_vminmon.o%J -#BSUB -J gfs_vminmon -#BSUB -q dev_shared -#BSUB -n 1 -#BSUB -R affinity[core] -#BSUB -M 80 -#BSUB -W 00:05 -#BSUB -a poe -#BSUB -P GFS-T2O - -set -x - -export NET='gfs' -export RUN='gfs' -export PDATE=${PDATE:-2016030206} - -export PDY=`echo $PDATE | cut -c1-8` -export cyc=`echo $PDATE | cut -c9-10` -export job=gfs_vminmon.${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} -export envir=para -export Z=${Z:-gz} -me=`hostname | cut -c1` -export DATAROOT=${DATAROOT:-/gpfs/${me}d2/emc/da/noscrub/Edward.Safford/test_data} -export COMROOT=${COMROOT:-/ptmpp1/$LOGNAME/com} - - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v15.0.0 - - -############################################################# -# Load modules -############################################################# -. /usrx/local/Modules/3.2.9/init/ksh -module use /nwprod2/modulefiles -#module load grib_util -module load prod_util -#module load util_shared - -module list - - -############################################################# -# WCOSS environment settings -############################################################# -export POE=YES - - -############################################################# -# Set user specific variables -############################################################# -export MINMON_SUFFIX=testminmon -export NWTEST=${NWTEST:-/gpfs/${me}d2/emc/da/noscrub/Edward.Safford} -export HOMEgfs=${HOMEgfs:-${NWTEST}/gfs.${gfs_ver}} -export JOBGLOBAL=${JOBGLOBAL:-${HOMEgfs}/jobs} -#export HOMEminmon=${HOMEminmon:-${NWTEST}/global_shared.${global_shared_ver}} - -export COM_IN=${COM_IN:-${DATAROOT}} -export M_TANKverf=${M_TANKverf:-${COMROOT}/${MINMON_SUFFIX}} - -jlogdir=${jlogdir:-/ptmpp1/${LOGNAME}/jlogs} -if [[ ! -d ${jlogdir} ]]; then - mkdir -p ${jlogdir} -fi - -export jlogfile=${jlogfile:-${jlogdir}/${MINMON_SUFFIX}.${NET}.${RUN}.jlogfile} -if [[ -e ${jlogfile} ]]; then - rm -f ${jlogfile} -fi - -############################################################# -# Execute job -############################################################# -$JOBGLOBAL/JGFS_VMINMON - -exit - diff --git a/driver/gfs/test_jgfs_vminmon_cray.sh b/driver/gfs/test_jgfs_vminmon_cray.sh deleted file mode 100755 index 67b52497ab..0000000000 --- a/driver/gfs/test_jgfs_vminmon_cray.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/bin/ksh - -#BSUB -o gfs_vminmon.o%J -#BSUB -e gfs_vminmon.o%J -#BSUB -J gfs_vminmon -#BSUB -q dev -#BSUB -M 80 -#BSUB -W 00:05 -#BSUB -P GFS-T2O -#BSUB -R "select[mem>80] rusage[mem=80]" - -set -x - -export PDATE=${PDATE:-2016030800} - -############################################################# -# Specify whether the run is production or development -############################################################# -export PDY=`echo $PDATE | cut -c1-8` -export cyc=`echo $PDATE | cut -c9-10` -export job=gfs_vminmon.${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} -export envir=para -export DATAROOT=${DATAROOT:-/gpfs/hps3/emc/da/noscrub/$LOGNAME/test_data} -export COMROOT=${COMROOT:-/gpfs/hps2/ptmp/$LOGNAME/com} - - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v15.0.0 - - -############################################################# -# Load modules -############################################################# -. $MODULESHOME/init/ksh - -module load prod_util -module load pm5 - -module list - - -############################################################# -# WCOSS environment settings -############################################################# -export POE=YES - - -############################################################# -# Set user specific variables -############################################################# -export MINMON_SUFFIX=${MINMON_SUFFIX:-testminmon} -export NWTEST=${NWTEST:-/gpfs/hps3/emc/da/noscrub/${LOGNAME}} -export HOMEgfs=${HOMEgfs:-${NWTEST}/gfs.${gfs_ver}} -export JOBGLOBAL=${JOBGLOBAL:-${HOMEgfs}/jobs} -export COM_IN=${COM_IN:-${DATAROOT}} -export M_TANKverf=${M_TANKverf:-${COMROOT}/${MINMON_SUFFIX}} - -############################################################# -# Execute job -############################################################# -$JOBGLOBAL/JGFS_VMINMON - -exit - diff --git a/driver/product/change_gfs_downstream_date.sh b/driver/product/change_gfs_downstream_date.sh deleted file mode 100755 index 229ccdd845..0000000000 --- a/driver/product/change_gfs_downstream_date.sh +++ /dev/null @@ -1,46 +0,0 @@ -set -x - -# export cyc=12 -# export cyc=18 -export fhr=012 -export dir=` pwd ` -export PDY=`date -u +%Y%m%d` -export PDY1=`expr $PDY - 1` - -export olddate=20200106 -export newdate=20200712 - -export gdas=/gpfs/dell1/nco/ops/com/gfs/prod/gdas.${PDY}/${cyc} -export gdasgp=/gpfs/dell1/nco/ops/com/gfs/prod/gdas.${PDY}/${cyc}/gempak -export gdasmeta=/gpfs/dell1/nco/ops/com/gfs/prod/gdas.${PDY}/${cyc}/gempak/meta - -export gdastest=/gpfs/dell2/ptmp/Boi.Vuong/com/gfs/prod/gdas.${PDY}/${cyc} -export gdastestgp=/gpfs/dell2/ptmp/Boi.Vuong/com/gfs/prod/gdas.${PDY}/${cyc}/gempak -export gdastestmeta=/gpfs/dell2/ptmp/Boi.Vuong/com/gfs/prod/gdas.${PDY}/${cyc}/gempak/meta - -for cyc in 00 06 12 18 -# for cyc in 00 -do -sed -i "s/${olddate}/${newdate}/g" run_JGDAS_GEMPAK_dell.sh_${cyc} -sed -i "s/${olddate}/${newdate}/g" run_JGDAS_GEMPAK_META_NCDC_dell.sh_${cyc} -sed -i "s/${olddate}/${newdate}/g" run_JGFS_GEMPAK_dell.sh_${cyc} -sed -i "s/${olddate}/${newdate}/g" run_JGFS_AWIPS_20KM_1P0DEG_dell.sh_${cyc} -sed -i "s/${olddate}/${newdate}/g" run_JGFS_AWIPS_G2_dell.sh_${cyc} -sed -i "s/${olddate}/${newdate}/g" run_JGFS_FBWIND_dell.sh_${cyc} -sed -i "s/${olddate}/${newdate}/g" run_JGFS_GEMPAK_META_dell.sh_${cyc} -sed -i "s/${olddate}/${newdate}/g" run_JGFS_GEMPAK_NCDC_UPAPGIF_dell.sh_${cyc} -sed -i "s/${olddate}/${newdate}/g" run_JGFS_PGRB2_SPEC_NPOESS_dell.sh_${cyc} -sed -i "s/${olddate}/${newdate}/g" run_JGFS_PGRB2_SPEC_GEMPAK_dell.sh_${cyc} - -sed -i s/envir=prod/envir=para/g run_JGDAS_GEMPAK_dell.sh_${cyc} -sed -i s/envir=prod/envir=para/g run_JGDAS_GEMPAK_META_NCDC_dell.sh_${cyc} -sed -i s/envir=prod/envir=para/g run_JGFS_GEMPAK_dell.sh_${cyc} -sed -i s/envir=prod/envir=para/g run_JGFS_AWIPS_20KM_1P0DEG_dell.sh_${cyc} -sed -i s/envir=prod/envir=para/g run_JGFS_AWIPS_G2_dell.sh_${cyc} -sed -i s/envir=prod/envir=para/g run_JGFS_FBWIND_dell.sh_${cyc} -sed -i s/envir=prod/envir=para/g run_JGFS_GEMPAK_META_dell.sh_${cyc} -sed -i s/envir=prod/envir=para/g run_JGFS_GEMPAK_NCDC_UPAPGIF_dell.sh_${cyc} -sed -i s/envir=prod/envir=para/g run_JGFS_PGRB2_SPEC_NPOESS_dell.sh_${cyc} -sed -i s/envir=prod/envir=para/g run_JGFS_PGRB2_SPEC_GEMPAK_dell.sh_${cyc} - -done diff --git a/driver/product/change_gfs_downstream_envir.sh b/driver/product/change_gfs_downstream_envir.sh deleted file mode 100755 index 6006797b60..0000000000 --- a/driver/product/change_gfs_downstream_envir.sh +++ /dev/null @@ -1,35 +0,0 @@ -set -x - -# export cyc=12 -# export cyc=18 -export fhr=012 -export dir=` pwd ` -export PDY=`date -u +%Y%m%d` -export PDY1=`expr $PDY - 1` - -export olddate=20200106 -export newdate=20200712 - -export gdas=/gpfs/dell1/nco/ops/com/gfs/prod/gdas.${PDY}/${cyc} -export gdasgp=/gpfs/dell1/nco/ops/com/gfs/prod/gdas.${PDY}/${cyc}/gempak -export gdasmeta=/gpfs/dell1/nco/ops/com/gfs/prod/gdas.${PDY}/${cyc}/gempak/meta - -export gdastest=/gpfs/dell2/ptmp/Boi.Vuong/com/gfs/prod/gdas.${PDY}/${cyc} -export gdastestgp=/gpfs/dell2/ptmp/Boi.Vuong/com/gfs/prod/gdas.${PDY}/${cyc}/gempak -export gdastestmeta=/gpfs/dell2/ptmp/Boi.Vuong/com/gfs/prod/gdas.${PDY}/${cyc}/gempak/meta - -# for cyc in 00 06 12 18 -for cyc in 00 -do - vi run_JGDAS_GEMPAK_dell.sh_${cyc} - vi run_JGDAS_GEMPAK_META_NCDC_dell.sh_${cyc} - vi run_JGFS_GEMPAK_dell.sh_${cyc} - vi run_JGFS_AWIPS_20KM_1P0DEG_dell.sh_${cyc} - vi run_JGFS_AWIPS_G2_dell.sh_${cyc} - vi run_JGFS_FBWIND_dell.sh_${cyc} - vi run_JGFS_GEMPAK_META_dell.sh_${cyc} - vi run_JGFS_GEMPAK_NCDC_UPAPGIF_dell.sh_${cyc} - vi run_JGFS_PGRB2_SPEC_NPOESS_dell.sh_${cyc} - vi run_JGFS_PGRB2_SPEC_GEMPAK_dell.sh_${cyc} - -done diff --git a/driver/product/compile_gfsv160.sh b/driver/product/compile_gfsv160.sh deleted file mode 100755 index 0c80153378..0000000000 --- a/driver/product/compile_gfsv160.sh +++ /dev/null @@ -1,17 +0,0 @@ - - -set -x - -export version=v16.0.0 - -cd /gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git/gfs.$version/sorc - -build_gfs_fbwndgfs.sh -build_gfs_util.sh - -cp /gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git/trim_rh.sh /gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git/gfs.$version/ush - -cd /gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git/gfs.$version/util/sorc -compile_gfs_util_wcoss.sh - - diff --git a/driver/product/compile_gfsv160_hera.sh b/driver/product/compile_gfsv160_hera.sh deleted file mode 100755 index 2d555e9977..0000000000 --- a/driver/product/compile_gfsv160_hera.sh +++ /dev/null @@ -1,15 +0,0 @@ - - -set -x - -export version=v16.0.0 - -cd /scratch2/NCEPDEV/stmp3/Boi.Vuong/gfs.v16.0.0/sorc - -./build_gfs_fbwndgfs.sh -./build_gfs_util.sh - -cp /scratch2/NCEPDEV/stmp3/Boi.Vuong/trim_rh.sh /scratch2/NCEPDEV/stmp3/Boi.Vuong/gfs.$version/ush - -cd /scratch2/NCEPDEV/stmp3/Boi.Vuong/gfs.$version/util/sorc -sh compile_gfs_util_wcoss.sh diff --git a/driver/product/rmo_clean_gfs_output b/driver/product/rmo_clean_gfs_output deleted file mode 100755 index 2eecf595b8..0000000000 --- a/driver/product/rmo_clean_gfs_output +++ /dev/null @@ -1,23 +0,0 @@ - -set -x - -cd /gpfs/dell2/ptmp/Boi.Vuong/output -ls -l -sleep 3 -cd /gpfs/dell2/ptmp/Boi.Vuong -ls -l -sleep 3 - -rm -rf /gpfs/dell2/ptmp/Boi.Vuong/output -rm -rf /gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p /gpfs/dell2/ptmp/Boi.Vuong -mkdir -m 775 -p /gpfs/dell2/ptmp/Boi.Vuong/output -mkdir -m 775 -p /gpfs/dell2/ptmp/Boi.Vuong/com - -chmod -R 775 /gpfs/dell2/ptmp/Boi.Vuong/output /gpfs/dell2/ptmp/Boi.Vuong/com - -cd /gpfs/dell2/ptmp/Boi.Vuong/output -ls -exit - diff --git a/driver/product/run_JGDAS_GEMPAK_META_NCDC_dell.sh_00 b/driver/product/run_JGDAS_GEMPAK_META_NCDC_dell.sh_00 deleted file mode 100755 index 22a3052977..0000000000 --- a/driver/product/run_JGDAS_GEMPAK_META_NCDC_dell.sh_00 +++ /dev/null @@ -1,129 +0,0 @@ -#!/bin/sh - -#BSUB -J jgdas_gempak_meta_ncdc_00 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gdas_gempak_meta_ncdc_00.o%J -#BSUB -q debug -#BSUB -n 2 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=00 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################ -# GDAS GEMPAK META PRODUCT GENERATION -############################################ -# set envir=para or para to test with data in prod or para - export envir=para -# export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gdas_gempak_meta_ncdc_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gdas} -export model=${model:-gdas} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/gempak} -export COMINgdas=${COMINgdas:-$(compath.py ${NET}/${envir}/${RUN})} - -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos/gempak ### EMC PARA Realtime - export COMINgdas=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN} ### EMC PARA Realtime - -fi -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos/gempak/meta - -export COMINukmet=${COMINukmet:-$(compath.py nawips/prod/ukmet)} -export COMINecmwf=${COMINecmwf:-$(compath.py ecmwf/prod/ecmwf)} - -export COMOUTncdc=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos/gempak/meta - -export COMOUTukmet=${COMOUT} -export COMOUTecmwf=${COMOUT} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTncdc $COMOUTukmet $COMOUTecmwf -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGDAS_GEMPAK_META_NCDC diff --git a/driver/product/run_JGDAS_GEMPAK_META_NCDC_dell.sh_06 b/driver/product/run_JGDAS_GEMPAK_META_NCDC_dell.sh_06 deleted file mode 100755 index 3a84fb338b..0000000000 --- a/driver/product/run_JGDAS_GEMPAK_META_NCDC_dell.sh_06 +++ /dev/null @@ -1,129 +0,0 @@ -#!/bin/sh - -#BSUB -J jgdas_gempak_meta_ncdc_06 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gdas_gempak_meta_ncdc_06.o%J -#BSUB -q debug -#BSUB -n 2 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=06 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################ -# GDAS GEMPAK META PRODUCT GENERATION -############################################ -# set envir=para or para to test with data in prod or para -# export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gdas_gempak_meta_ncdc_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gdas} -export model=${model:-gdas} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/gempak} -export COMINgdas=${COMINgdas:-$(compath.py ${NET}/${envir}/${RUN})} - -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos/gempak ### EMC PARA Realtime - export COMINgdas=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN} ### EMC PARA Realtime - -fi -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos/gempak/meta - -export COMINukmet=${COMINukmet:-$(compath.py nawips/prod/ukmet)} -export COMINecmwf=${COMINecmwf:-$(compath.py ecmwf/prod/ecmwf)} - -export COMOUTncdc=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos/gempak/meta - -export COMOUTukmet=${COMOUT} -export COMOUTecmwf=${COMOUT} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTncdc $COMOUTukmet $COMOUTecmwf -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGDAS_GEMPAK_META_NCDC diff --git a/driver/product/run_JGDAS_GEMPAK_META_NCDC_dell.sh_12 b/driver/product/run_JGDAS_GEMPAK_META_NCDC_dell.sh_12 deleted file mode 100755 index b19b9749c9..0000000000 --- a/driver/product/run_JGDAS_GEMPAK_META_NCDC_dell.sh_12 +++ /dev/null @@ -1,132 +0,0 @@ -#!/bin/sh - -#BSUB -J jgdas_gempak_meta_ncdc_12 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gdas_gempak_meta_ncdc_12.o%J -#BSUB -q debug -#BSUB -n 2 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=12 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################ -# GDAS GEMPAK META PRODUCT GENERATION -############################################ -# set envir=para or para to test with data in prod or para -# export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gdas_gempak_meta_ncdc_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gdas} -export model=${model:-gdas} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/gempak} -export COMINgdas=${COMINgdas:-$(compath.py ${NET}/${envir}/${RUN})} - -else - -# export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos/gempak ### EMC PARA Realtime -# export COMINgdas=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN} ### EMC PARA Realtime - export COMIN=/gpfs/dell2/ptmp/Boi.Vuong/com/gfs/para/gdas.20200712/12/atmos/gempak ### Boi PARA Realtime - export COMINgdas=/gpfs/dell2/ptmp/Boi.Vuong/com/gfs/para/gdas ### Boi PARA Realtime - -fi -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos/gempak/meta - -export COMINukmet=${COMINukmet:-$(compath.py nawips/prod/ukmet)} -export COMINecmwf=${COMINecmwf:-$(compath.py ecmwf/prod/ecmwf)} - -export COMOUTncdc=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos/gempak/meta - -export COMOUTukmet=${COMOUT} -export COMOUTecmwf=${COMOUT} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTncdc $COMOUTukmet $COMOUTecmwf -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGDAS_GEMPAK_META_NCDC diff --git a/driver/product/run_JGDAS_GEMPAK_META_NCDC_dell.sh_18 b/driver/product/run_JGDAS_GEMPAK_META_NCDC_dell.sh_18 deleted file mode 100755 index 683f68e6fa..0000000000 --- a/driver/product/run_JGDAS_GEMPAK_META_NCDC_dell.sh_18 +++ /dev/null @@ -1,130 +0,0 @@ -#!/bin/sh - -#BSUB -J jgdas_gempak_meta_ncdc_18 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gdas_gempak_meta_ncdc_18.o%J -#BSUB -q debug -#BSUB -n 2 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=18 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################ -# GDAS GEMPAK META PRODUCT GENERATION -############################################ -# set envir=para or para to test with data in prod or para -# export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gdas_gempak_meta_ncdc_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gdas} -export model=${model:-gdas} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/gempak} -export COMINgdas=${COMINgdas:-$(compath.py ${NET}/${envir}/${RUN})} - -else - - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos/gempak ### EMC PARA Realtime - export COMINgdas=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN} ### EMC PARA Realtime - -fi -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos/gempak/meta - -export COMINukmet=${COMINukmet:-$(compath.py nawips/prod/ukmet)} -export COMINecmwf=${COMINecmwf:-$(compath.py ecmwf/prod/ecmwf)} - -export COMOUTncdc=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos/gempak/meta - -export COMOUTukmet=${COMOUT} -export COMOUTecmwf=${COMOUT} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTncdc $COMOUTukmet $COMOUTecmwf -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGDAS_GEMPAK_META_NCDC diff --git a/driver/product/run_JGDAS_GEMPAK_dell.sh_00 b/driver/product/run_JGDAS_GEMPAK_dell.sh_00 deleted file mode 100755 index c17d3cebbc..0000000000 --- a/driver/product/run_JGDAS_GEMPAK_dell.sh_00 +++ /dev/null @@ -1,118 +0,0 @@ -#!/bin/sh - -#BSUB -J gdas_gempak_00 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gdas_gempak_00.o%J -#BSUB -q debug -#BSUB -n 2 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=00 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################ -# GDAS GEMPAK PRODUCT GENERATION -############################################ -# set envir=para or para to test with data in prod or para - export envir=para -# export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gdas_gempak_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gdas} -export model=${model:-gdas} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos/gempak - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGDAS_GEMPAK diff --git a/driver/product/run_JGDAS_GEMPAK_dell.sh_06 b/driver/product/run_JGDAS_GEMPAK_dell.sh_06 deleted file mode 100755 index 847336e6d7..0000000000 --- a/driver/product/run_JGDAS_GEMPAK_dell.sh_06 +++ /dev/null @@ -1,119 +0,0 @@ -#!/bin/sh - -#BSUB -J gdas_gempak_06 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gdas_gempak_06.o%J -#BSUB -q debug -#BSUB -n 2 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=06 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################ -# GDAS GEMPAK PRODUCT GENERATION -############################################ -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gdas_gempak_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gdas} -export model=${model:-gdas} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime - -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos/gempak - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGDAS_GEMPAK diff --git a/driver/product/run_JGDAS_GEMPAK_dell.sh_12 b/driver/product/run_JGDAS_GEMPAK_dell.sh_12 deleted file mode 100755 index 60feb294c1..0000000000 --- a/driver/product/run_JGDAS_GEMPAK_dell.sh_12 +++ /dev/null @@ -1,118 +0,0 @@ -#!/bin/sh - -#BSUB -J gdas_gempak_12 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gdas_gempak_12.o%J -#BSUB -q debug -#BSUB -n 2 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=12 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################ -# GDAS GEMPAK PRODUCT GENERATION -############################################ -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gdas_gempak_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gdas} -export model=${model:-gdas} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos/gempak - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGDAS_GEMPAK diff --git a/driver/product/run_JGDAS_GEMPAK_dell.sh_18 b/driver/product/run_JGDAS_GEMPAK_dell.sh_18 deleted file mode 100755 index 6079986586..0000000000 --- a/driver/product/run_JGDAS_GEMPAK_dell.sh_18 +++ /dev/null @@ -1,119 +0,0 @@ -#!/bin/sh - -#BSUB -J gdas_gempak_18 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gdas_gempak_18.o%J -#BSUB -q debug -#BSUB -n 2 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=18 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################ -# GDAS GEMPAK PRODUCT GENERATION -############################################ -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gdas_gempak_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gdas} -export model=${model:-gdas} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime - -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos/gempak - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGDAS_GEMPAK diff --git a/driver/product/run_JGFS_AWIPS_20KM_1P0DEG_dell.sh_00 b/driver/product/run_JGFS_AWIPS_20KM_1P0DEG_dell.sh_00 deleted file mode 100755 index 57a42fa416..0000000000 --- a/driver/product/run_JGFS_AWIPS_20KM_1P0DEG_dell.sh_00 +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/sh - -#BSUB -J jgfs_awips_f012_20km_1p00_00 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_awips_f012_20km_1p00_00.o%J -#BSUB -q debug -#BSUB -n 1 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=00 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -##################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -module list - -################################################ -# GFS_AWIPS_20KM_1P00 AWIPS PRODUCT GENERATION -################################################ - -export fcsthrs=012 - -############################################ -# user defined -############################################ -# set envir=para or para to test with data in prod or para -# export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_awips_f${fcsthrs}_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export USHgfs=${USHgfs:-$HOMEgfs/ush} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgfs=${FIXgfs:-$HOMEgfs/fix} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime - -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -export MPIRUN_AWIPSCFP="mpirun -n 4 cfp " - -######################################################### -# obtain unique process id (pid) and make temp directory -######################################################### -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG diff --git a/driver/product/run_JGFS_AWIPS_20KM_1P0DEG_dell.sh_06 b/driver/product/run_JGFS_AWIPS_20KM_1P0DEG_dell.sh_06 deleted file mode 100755 index 686ab66dbf..0000000000 --- a/driver/product/run_JGFS_AWIPS_20KM_1P0DEG_dell.sh_06 +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/sh - -#BSUB -J jgfs_awips_f012_20km_1p00_06 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_awips_f012_20km_1p00_06.o%J -#BSUB -q debug -#BSUB -n 1 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=06 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -##################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -module list - -################################################ -# GFS_AWIPS_20KM_1P00 AWIPS PRODUCT GENERATION -################################################ - -export fcsthrs=012 - -############################################ -# user defined -############################################ -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_awips_f${fcsthrs}_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export USHgfs=${USHgfs:-$HOMEgfs/ush} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgfs=${FIXgfs:-$HOMEgfs/fix} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime - -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -export MPIRUN_AWIPSCFP="mpirun -n 4 cfp " - -######################################################### -# obtain unique process id (pid) and make temp directory -######################################################### -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG diff --git a/driver/product/run_JGFS_AWIPS_20KM_1P0DEG_dell.sh_12 b/driver/product/run_JGFS_AWIPS_20KM_1P0DEG_dell.sh_12 deleted file mode 100755 index 74291e29a7..0000000000 --- a/driver/product/run_JGFS_AWIPS_20KM_1P0DEG_dell.sh_12 +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/sh - -#BSUB -J jgfs_awips_f012_20km_1p00_12 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_awips_f012_20km_1p00_12.o%J -#BSUB -q debug -#BSUB -n 1 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=12 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -##################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -module list - -################################################ -# GFS_AWIPS_20KM_1P00 AWIPS PRODUCT GENERATION -################################################ - -export fcsthrs=012 - -############################################ -# user defined -############################################ -# set envir=para or para to test with data in prod or para - export envir=para -# export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_awips_f${fcsthrs}_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export USHgfs=${USHgfs:-$HOMEgfs/ush} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgfs=${FIXgfs:-$HOMEgfs/fix} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime - -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -export MPIRUN_AWIPSCFP="mpirun -n 4 cfp " - -######################################################### -# obtain unique process id (pid) and make temp directory -######################################################### -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG diff --git a/driver/product/run_JGFS_AWIPS_20KM_1P0DEG_dell.sh_18 b/driver/product/run_JGFS_AWIPS_20KM_1P0DEG_dell.sh_18 deleted file mode 100755 index 8b5f55a379..0000000000 --- a/driver/product/run_JGFS_AWIPS_20KM_1P0DEG_dell.sh_18 +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/sh - -#BSUB -J jgfs_awips_f012_20km_1p00_18 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_awips_f012_20km_1p00_18.o%J -#BSUB -q debug -#BSUB -n 1 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=18 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -##################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -module list - -################################################ -# GFS_AWIPS_20KM_1P00 AWIPS PRODUCT GENERATION -################################################ - -export fcsthrs=012 - -############################################ -# user defined -############################################ -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_awips_f${fcsthrs}_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export USHgfs=${USHgfs:-$HOMEgfs/ush} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgfs=${FIXgfs:-$HOMEgfs/fix} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime - -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -export MPIRUN_AWIPSCFP="mpirun -n 4 cfp " - -######################################################### -# obtain unique process id (pid) and make temp directory -######################################################### -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG diff --git a/driver/product/run_JGFS_AWIPS_G2_dell.sh_00 b/driver/product/run_JGFS_AWIPS_G2_dell.sh_00 deleted file mode 100755 index ed5abce218..0000000000 --- a/driver/product/run_JGFS_AWIPS_G2_dell.sh_00 +++ /dev/null @@ -1,121 +0,0 @@ -#!/bin/sh - -#BSUB -J jgfs_awips_f12_00 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_awips_f12_00.o%J -#BSUB -q debug -#BSUB -n 4 # number of tasks -#BSUB -R span[ptile=2] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=00 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -##################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -module list - -######################################## -# GFS_AWIPS_G2 AWIPS PRODUCT GENERATION -######################################## - -export fcsthrs=012 - -############################################ -# User Define COM, COMOUTwmo, COMIN directories -############################################ -# set envir=para or para to test with data in prod or para - export envir=para -export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_awips_f${fcsthrs}_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export USHgfs=${USHgfs:-$HOMEgfs/ush} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgfs=${FIXgfs:-$HOMEgfs/fix} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime - -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -######################################################### -# obtain unique process id (pid) and make temp directory -######################################################### -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_AWIPS_G2 diff --git a/driver/product/run_JGFS_AWIPS_G2_dell.sh_06 b/driver/product/run_JGFS_AWIPS_G2_dell.sh_06 deleted file mode 100755 index 8dd50da89f..0000000000 --- a/driver/product/run_JGFS_AWIPS_G2_dell.sh_06 +++ /dev/null @@ -1,121 +0,0 @@ -#!/bin/sh - -#BSUB -J jgfs_awips_f12_06 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_awips_f12_06.o%J -#BSUB -q debug -#BSUB -n 4 # number of tasks -#BSUB -R span[ptile=2] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=06 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -##################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -module list - -######################################## -# GFS_AWIPS_G2 AWIPS PRODUCT GENERATION -######################################## - -export fcsthrs=012 - -############################################ -# User Define COM, COMOUTwmo, COMIN directories -############################################ -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_awips_f${fcsthrs}_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export USHgfs=${USHgfs:-$HOMEgfs/ush} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgfs=${FIXgfs:-$HOMEgfs/fix} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime - -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -######################################################### -# obtain unique process id (pid) and make temp directory -######################################################### -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_AWIPS_G2 diff --git a/driver/product/run_JGFS_AWIPS_G2_dell.sh_12 b/driver/product/run_JGFS_AWIPS_G2_dell.sh_12 deleted file mode 100755 index 86936c121a..0000000000 --- a/driver/product/run_JGFS_AWIPS_G2_dell.sh_12 +++ /dev/null @@ -1,121 +0,0 @@ -#!/bin/sh - -#BSUB -J jgfs_awips_f12_12 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_awips_f12_12.o%J -#BSUB -q debug -#BSUB -n 4 # number of tasks -#BSUB -R span[ptile=2] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=12 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -##################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -module list - -######################################## -# GFS_AWIPS_G2 AWIPS PRODUCT GENERATION -######################################## - -export fcsthrs=012 - -############################################ -# User Define COM, COMOUTwmo, COMIN directories -############################################ -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_awips_f${fcsthrs}_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export USHgfs=${USHgfs:-$HOMEgfs/ush} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgfs=${FIXgfs:-$HOMEgfs/fix} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime - -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -######################################################### -# obtain unique process id (pid) and make temp directory -######################################################### -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_AWIPS_G2 diff --git a/driver/product/run_JGFS_AWIPS_G2_dell.sh_18 b/driver/product/run_JGFS_AWIPS_G2_dell.sh_18 deleted file mode 100755 index 95cd46d306..0000000000 --- a/driver/product/run_JGFS_AWIPS_G2_dell.sh_18 +++ /dev/null @@ -1,121 +0,0 @@ -#!/bin/sh - -#BSUB -J jgfs_awips_f12_18 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_awips_f12_18.o%J -#BSUB -q debug -#BSUB -n 4 # number of tasks -#BSUB -R span[ptile=2] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=18 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -##################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -module list - -######################################## -# GFS_AWIPS_G2 AWIPS PRODUCT GENERATION -######################################## - -export fcsthrs=012 - -############################################ -# User Define COM, COMOUTwmo, COMIN directories -############################################ -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_awips_f${fcsthrs}_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export USHgfs=${USHgfs:-$HOMEgfs/ush} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgfs=${FIXgfs:-$HOMEgfs/fix} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime - -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -######################################################### -# obtain unique process id (pid) and make temp directory -######################################################### -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_AWIPS_G2 diff --git a/driver/product/run_JGFS_FBWIND_dell.sh_00 b/driver/product/run_JGFS_FBWIND_dell.sh_00 deleted file mode 100755 index ea1c655ca3..0000000000 --- a/driver/product/run_JGFS_FBWIND_dell.sh_00 +++ /dev/null @@ -1,113 +0,0 @@ -#!/bin/sh - -#BSUB -J gfs_fbwind_00 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_fbwind_00.o%J -#BSUB -q debug -#BSUB -n 1 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=00 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -##################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -module list - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -# set envir=para or para to test with data in prod or para - export envir=para -export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_fbwind_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export USHgfs=${USHgfs:-$HOMEgfs/ush} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export FIXgfs=${FIXgfs:-$HOMEgfs/fix} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime - -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -######################################################### -# obtain unique process id (pid) and make temp directory -######################################################### -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_FBWIND diff --git a/driver/product/run_JGFS_FBWIND_dell.sh_06 b/driver/product/run_JGFS_FBWIND_dell.sh_06 deleted file mode 100755 index 0697172eac..0000000000 --- a/driver/product/run_JGFS_FBWIND_dell.sh_06 +++ /dev/null @@ -1,113 +0,0 @@ -#!/bin/sh - -#BSUB -J gfs_fbwind_06 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_fbwind_06.o%J -#BSUB -q debug -#BSUB -n 1 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=06 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -##################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -module list - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_fbwind_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export USHgfs=${USHgfs:-$HOMEgfs/ush} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export FIXgfs=${FIXgfs:-$HOMEgfs/fix} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime - -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -######################################################### -# obtain unique process id (pid) and make temp directory -######################################################### -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_FBWIND diff --git a/driver/product/run_JGFS_FBWIND_dell.sh_12 b/driver/product/run_JGFS_FBWIND_dell.sh_12 deleted file mode 100755 index 3c0ef2aea5..0000000000 --- a/driver/product/run_JGFS_FBWIND_dell.sh_12 +++ /dev/null @@ -1,113 +0,0 @@ -#!/bin/sh - -#BSUB -J gfs_fbwind_12 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_fbwind_12.o%J -#BSUB -q debug -#BSUB -n 1 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=12 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -##################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -module list - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -# set envir=para or para to test with data in prod or para - export envir=para -# export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_fbwind_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export USHgfs=${USHgfs:-$HOMEgfs/ush} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export FIXgfs=${FIXgfs:-$HOMEgfs/fix} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime - -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -######################################################### -# obtain unique process id (pid) and make temp directory -######################################################### -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_FBWIND diff --git a/driver/product/run_JGFS_FBWIND_dell.sh_18 b/driver/product/run_JGFS_FBWIND_dell.sh_18 deleted file mode 100755 index 9779c94841..0000000000 --- a/driver/product/run_JGFS_FBWIND_dell.sh_18 +++ /dev/null @@ -1,113 +0,0 @@ -#!/bin/sh - -#BSUB -J gfs_fbwind_18 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_fbwind_18.o%J -#BSUB -q debug -#BSUB -n 1 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=18 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -##################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -module list - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_fbwind_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export USHgfs=${USHgfs:-$HOMEgfs/ush} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export FIXgfs=${FIXgfs:-$HOMEgfs/fix} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime - -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -######################################################### -# obtain unique process id (pid) and make temp directory -######################################################### -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_FBWIND diff --git a/driver/product/run_JGFS_GEMPAK_META_dell.sh_00 b/driver/product/run_JGFS_GEMPAK_META_dell.sh_00 deleted file mode 100755 index fbe710e4a8..0000000000 --- a/driver/product/run_JGFS_GEMPAK_META_dell.sh_00 +++ /dev/null @@ -1,131 +0,0 @@ -#!/bin/sh - -#BSUB -J gfs_gempak_meta_00 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_gempak_meta_00.o%J -#BSUB -q debug -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -n 28 # 28 tasks -#BSUB -R span[ptile=14] # 14 task per node -#BSUB -R affinity[core(1):distribute=balance] # using 14 cores on node and bind to 1 - # core per task and distribute across sockets - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200114 - -export PDY1=`expr $PDY - 1` - -export cyc=00 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_gempak_meta_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################# -#set the fcst hrs for all the cycles -############################################# -export fhbeg=00 -export fhend=384 -export fhinc=12 - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p -m 775 $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/gempak} - export COMINgempak=${COMINgempak:-${COMROOT}/${NET}/${envir}} -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos/gempak ### EMC PARA Realtime - export COMINgempak=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para ### EMC PARA Realtime - -fi -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos/gempak/meta - -export COMINukmet=${COMINukmet:-$(compath.py nawips/prod/ukmet)} -export COMINecmwf=${COMINecmwf:-$(compath.py ecmwf/prod/ecmwf)} -export COMINnam=${COMINnam:-$(compath.py nam/prod/nam)} - -if [ ! -f $COMOUT ] ; then - mkdir -p -m 775 $COMOUT -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_GEMPAK_META diff --git a/driver/product/run_JGFS_GEMPAK_META_dell.sh_06 b/driver/product/run_JGFS_GEMPAK_META_dell.sh_06 deleted file mode 100755 index 85b2ca0d70..0000000000 --- a/driver/product/run_JGFS_GEMPAK_META_dell.sh_06 +++ /dev/null @@ -1,131 +0,0 @@ -#!/bin/sh - -#BSUB -J gfs_gempak_meta_06 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_gempak_meta_06.o%J -#BSUB -q debug -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -n 28 # 28 tasks -#BSUB -R span[ptile=14] # 14 task per node -#BSUB -R affinity[core(1):distribute=balance] # using 14 cores on node and bind to 1 - # core per task and distribute across sockets - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=06 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_gempak_meta_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################# -#set the fcst hrs for all the cycles -############################################# -export fhbeg=00 -export fhend=384 -export fhinc=12 - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p -m 775 $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/gempak} - export COMINgempak=${COMINgempak:-${COMROOT}/${NET}/${envir}} -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos/gempak ### EMC PARA Realtime - export COMINgempak=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para ### EMC PARA Realtime - -fi -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos/gempak/meta - -export COMINukmet=${COMINukmet:-$(compath.py nawips/prod/ukmet)} -export COMINecmwf=${COMINecmwf:-$(compath.py ecmwf/prod/ecmwf)} -export COMINnam=${COMINnam:-$(compath.py nam/prod/nam)} - -if [ ! -f $COMOUT ] ; then - mkdir -p -m 775 $COMOUT -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_GEMPAK_META diff --git a/driver/product/run_JGFS_GEMPAK_META_dell.sh_12 b/driver/product/run_JGFS_GEMPAK_META_dell.sh_12 deleted file mode 100755 index 194d8e4208..0000000000 --- a/driver/product/run_JGFS_GEMPAK_META_dell.sh_12 +++ /dev/null @@ -1,133 +0,0 @@ -#!/bin/sh - -#BSUB -J gfs_gempak_meta_12 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_gempak_meta_12.o%J -#BSUB -q debug -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -n 28 # 28 tasks -#BSUB -R span[ptile=14] # 14 task per node -#BSUB -R affinity[core(1):distribute=balance] # using 14 cores on node and bind to 1 - # core per task and distribute across sockets - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=12 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_gempak_meta_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################# -#set the fcst hrs for all the cycles -############################################# -export fhbeg=00 -export fhend=384 -export fhinc=12 - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p -m 775 $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/gempak} - export COMINgempak=${COMINgempak:-${COMROOT}/${NET}/${envir}} -else -# export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos/gempak ### EMC PARA Realtime -# export COMINgempak=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para ### EMC PARA Realtime - export COMIN=/gpfs/dell2/ptmp/Boi.Vuong/com/gfs/para/gfs.20200712/12/atmos/gempak - export COMINgempak=/gpfs/dell2/ptmp/Boi.Vuong/com/gfs/para - -fi -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos/gempak/meta - -export COMINukmet=${COMINukmet:-$(compath.py nawips/prod/ukmet)} -export COMINecmwf=${COMINecmwf:-$(compath.py ecmwf/prod/ecmwf)} -export COMINnam=${COMINnam:-$(compath.py nam/prod/nam)} - -if [ ! -f $COMOUT ] ; then - mkdir -p -m 775 $COMOUT -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_GEMPAK_META diff --git a/driver/product/run_JGFS_GEMPAK_META_dell.sh_18 b/driver/product/run_JGFS_GEMPAK_META_dell.sh_18 deleted file mode 100755 index 1d2d7f8605..0000000000 --- a/driver/product/run_JGFS_GEMPAK_META_dell.sh_18 +++ /dev/null @@ -1,131 +0,0 @@ -#!/bin/sh - -#BSUB -J gfs_gempak_meta_18 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_gempak_meta_18.o%J -#BSUB -q debug -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -n 28 # 28 tasks -#BSUB -R span[ptile=14] # 14 task per node -#BSUB -R affinity[core(1):distribute=balance] # using 14 cores on node and bind to 1 - # core per task and distribute across sockets - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=18 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_gempak_meta_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################# -#set the fcst hrs for all the cycles -############################################# -export fhbeg=00 -export fhend=384 -export fhinc=12 - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p -m 775 $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/gempak} - export COMINgempak=${COMINgempak:-${COMROOT}/${NET}/${envir}} -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos/gempak ### EMC PARA Realtime - export COMINgempak=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para ### EMC PARA Realtime - -fi -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos/gempak/meta - -export COMINukmet=${COMINukmet:-$(compath.py nawips/prod/ukmet)} -export COMINecmwf=${COMINecmwf:-$(compath.py ecmwf/prod/ecmwf)} -export COMINnam=${COMINnam:-$(compath.py nam/prod/nam)} - -if [ ! -f $COMOUT ] ; then - mkdir -p -m 775 $COMOUT -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_GEMPAK_META diff --git a/driver/product/run_JGFS_GEMPAK_NCDC_UPAPGIF_dell.sh_00 b/driver/product/run_JGFS_GEMPAK_NCDC_UPAPGIF_dell.sh_00 deleted file mode 100755 index 4db2ae3e79..0000000000 --- a/driver/product/run_JGFS_GEMPAK_NCDC_UPAPGIF_dell.sh_00 +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/sh - -#BSUB -J jgfs_gempak_upapgif_00 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_gempak_upapgif_00.o%J -#BSUB -q debug -#BSUB -n 1 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200114 - -export PDY1=`expr $PDY - 1` - -export cyc=00 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## - -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_gempak_upapgif_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} -export MODEL=GFS - -############################################## -# Define COM directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/gempak} - export COMINgfs=${COMINgfs:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos/gempak ### EMC PARA Realtime - export COMINgfs=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime - -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_GEMPAK_NCDC_UPAPGIF diff --git a/driver/product/run_JGFS_GEMPAK_NCDC_UPAPGIF_dell.sh_06 b/driver/product/run_JGFS_GEMPAK_NCDC_UPAPGIF_dell.sh_06 deleted file mode 100755 index f2c8a628a5..0000000000 --- a/driver/product/run_JGFS_GEMPAK_NCDC_UPAPGIF_dell.sh_06 +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/sh - -#BSUB -J jgfs_gempak_upapgif_06 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_gempak_upapgif_06.o%J -#BSUB -q debug -#BSUB -n 1 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=06 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## - -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_gempak_upapgif_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} -export MODEL=GFS - -############################################## -# Define COM directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/gempak} - export COMINgfs=${COMINgfs:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos/gempak ### EMC PARA Realtime - export COMINgfs=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime - -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_GEMPAK_NCDC_UPAPGIF diff --git a/driver/product/run_JGFS_GEMPAK_NCDC_UPAPGIF_dell.sh_12 b/driver/product/run_JGFS_GEMPAK_NCDC_UPAPGIF_dell.sh_12 deleted file mode 100755 index a5dc8ac0d6..0000000000 --- a/driver/product/run_JGFS_GEMPAK_NCDC_UPAPGIF_dell.sh_12 +++ /dev/null @@ -1,125 +0,0 @@ -#!/bin/sh - -#BSUB -J jgfs_gempak_upapgif_12 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_gempak_upapgif_12.o%J -#BSUB -q debug -#BSUB -n 1 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=12 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## - -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_gempak_upapgif_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} -export MODEL=GFS - -############################################## -# Define COM directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/gempak} - export COMINgfs=${COMINgfs:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} -else -# export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos/gempak ### EMC PARA Realtime -# export COMINgfs=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime - - export COMIN=/gpfs/dell2/ptmp/Boi.Vuong/com/gfs/para/gfs.20200712/12/atmos/gempak *** Boi PARA realtime - export COMINgfs=/gpfs/dell2/ptmp/Boi.Vuong/com/gfs/para/gfs.20200712/12/atmos *** Boi PARA realtime -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_GEMPAK_NCDC_UPAPGIF diff --git a/driver/product/run_JGFS_GEMPAK_NCDC_UPAPGIF_dell.sh_18 b/driver/product/run_JGFS_GEMPAK_NCDC_UPAPGIF_dell.sh_18 deleted file mode 100755 index d43f250f5b..0000000000 --- a/driver/product/run_JGFS_GEMPAK_NCDC_UPAPGIF_dell.sh_18 +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/sh - -#BSUB -J jgfs_gempak_upapgif_18 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_gempak_upapgif_18.o%J -#BSUB -q debug -#BSUB -n 1 # number of tasks -#BSUB -R span[ptile=1] # 1 task per node -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -R affinity[core(1):distribute=balance] - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=18 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################## -# Define COM, COMOUTwmo, COMIN directories -############################################## - -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_gempak_upapgif_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} -export MODEL=GFS - -############################################## -# Define COM directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/gempak} - export COMINgfs=${COMINgfs:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} -else - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos/gempak ### EMC PARA Realtime - export COMINgfs=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/${RUN}.${PDY}/${cyc}/atmos ### EMC PARA Realtime - -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_GEMPAK_NCDC_UPAPGIF diff --git a/driver/product/run_JGFS_GEMPAK_dell.sh_00 b/driver/product/run_JGFS_GEMPAK_dell.sh_00 deleted file mode 100755 index 34a66c4f0e..0000000000 --- a/driver/product/run_JGFS_GEMPAK_dell.sh_00 +++ /dev/null @@ -1,119 +0,0 @@ -#!/bin/sh - -#BSUB -J gfs_gempak_00 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_gempak_00.o%J -#BSUB -q debug -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -n 24 # 24 tasks -#BSUB -R span[ptile=12] # 12 task per node -#BSUB -R affinity[core(1):distribute=balance] # using 12 cores on node and bind to 1 core per task and distribute across sockets - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=00 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################ -# Define COM, COMOUTwmo, COMIN directories -############################################ -# set envir=para or para to test with data in prod or para - export envir=para -export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_gempak_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else -# export COMIN=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git/${RUN}.${PDY}/${cyc} ### Boi PARA -# export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/prfv3rt3b/gfs.${PDY}/${cyc} ### EMC PARA Realtime - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2/gfs.20200712/00 -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/gempak - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_GEMPAK diff --git a/driver/product/run_JGFS_GEMPAK_dell.sh_06 b/driver/product/run_JGFS_GEMPAK_dell.sh_06 deleted file mode 100755 index e96647b4ae..0000000000 --- a/driver/product/run_JGFS_GEMPAK_dell.sh_06 +++ /dev/null @@ -1,119 +0,0 @@ -#!/bin/sh - -#BSUB -J gfs_gempak_06 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_gempak_06.o%J -#BSUB -q debug -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -n 24 # 24 tasks -#BSUB -R span[ptile=12] # 12 task per node -#BSUB -R affinity[core(1):distribute=balance] # using 12 cores on node and bind to 1 core per task and distribute across sockets - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=06 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################ -# Define COM, COMOUTwmo, COMIN directories -############################################ -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_gempak_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else -# export COMIN=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git/${RUN}.${PDY}/${cyc} ### Boi PARA - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/gfs.${PDY}/${cyc}/atmos ### EMC PARA Realtime - export ILPOST=3 -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos/gempak - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_GEMPAK diff --git a/driver/product/run_JGFS_GEMPAK_dell.sh_12 b/driver/product/run_JGFS_GEMPAK_dell.sh_12 deleted file mode 100755 index 80b510d321..0000000000 --- a/driver/product/run_JGFS_GEMPAK_dell.sh_12 +++ /dev/null @@ -1,119 +0,0 @@ -#!/bin/sh - -#BSUB -J gfs_gempak_12 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_gempak_12.o%J -#BSUB -q debug -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -n 24 # 24 tasks -#BSUB -R span[ptile=12] # 12 task per node -#BSUB -R affinity[core(1):distribute=balance] # using 12 cores on node and bind to 1 core per task and distribute across sockets - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=12 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################ -# Define COM, COMOUTwmo, COMIN directories -############################################ -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_gempak_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else -# export COMIN=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git/${RUN}.${PDY}/${cyc} ### Boi PARA - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/gfs.${PDY}/${cyc}/atmos ### EMC PARA Realtime - export ILPOST=3 -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos/gempak - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_GEMPAK diff --git a/driver/product/run_JGFS_GEMPAK_dell.sh_18 b/driver/product/run_JGFS_GEMPAK_dell.sh_18 deleted file mode 100755 index 56b8f12498..0000000000 --- a/driver/product/run_JGFS_GEMPAK_dell.sh_18 +++ /dev/null @@ -1,119 +0,0 @@ -#!/bin/sh - -#BSUB -J gfs_gempak_18 -#BSUB -o /gpfs/dell2/ptmp/Boi.Vuong/output/gfs_gempak_18.o%J -#BSUB -q debug -#BSUB -cwd /gpfs/dell2/ptmp/Boi.Vuong/output -#BSUB -W 00:30 -#BSUB -P GFS-DEV -#BSUB -n 24 # 24 tasks -#BSUB -R span[ptile=12] # 12 task per node -#BSUB -R affinity[core(1):distribute=balance] # using 12 cores on node and bind to 1 core per task and distribute across sockets - -export KMP_AFFINITY=disabled - -export PDY=`date -u +%Y%m%d` -export PDY=20200712 - -export PDY1=`expr $PDY - 1` - -export cyc=18 -export cycle=t${cyc}z - -set -xa -export PS4='$SECONDS + ' -date - -#################################### -## Load the GRIB Utilities module -#################################### -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load CFP/2.0.1 -module load impi/18.0.1 -module load lsf/10.1 -module load prod_util/1.1.4 -module load prod_envir/1.0.3 -module load grib_util/1.1.0 -########################################### -# Now set up GEMPAK/NTRANS environment -########################################### -module load gempak/7.3.1 -module list - -############################################ -# Define COM, COMOUTwmo, COMIN directories -############################################ -# set envir=para or para to test with data in prod or para - export envir=para - export envir=para - -export SENDCOM=YES -export KEEPDATA=YES -export job=gfs_gempak_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -# Set FAKE DBNET for testing -export SENDDBN=YES -export DBNROOT=/gpfs/hps/nco/ops/nwprod/prod_util.v1.0.24/fakedbn - -export DATAROOT=/gpfs/dell2/ptmp/Boi.Vuong/output -export NWROOT=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git -export COMROOT2=/gpfs/dell2/ptmp/Boi.Vuong/com - -mkdir -m 775 -p ${COMROOT2} ${COMROOT2}/logs ${COMROOT2}/logs/jlogfiles -export jlogfile=${COMROOT2}/logs/jlogfiles/jlogfile.${jobid} - -############################################################# -# Specify versions -############################################################# -export gfs_ver=v16.0.0 - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid}} -mkdir -p $DATA -cd $DATA - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} - -############################################## -# Define COM directories -############################################## -if [ $envir = "prod" ] ; then -# This setting is for testing with GFS (production) - export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}} ### NCO PROD -else -# export COMIN=/gpfs/dell2/emc/modeling/noscrub/Boi.Vuong/git/${RUN}.${PDY}/${cyc} ### Boi PARA - export COMIN=/gpfs/dell3/ptmp/emc.glopara/ROTDIRS/v16rt2c/gfs/para/gfs.${PDY}/${cyc}/atmos ### EMC PARA Realtime - export ILPOST=3 -fi - -export COMOUT=${COMROOT2}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/atmos/gempak - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT -fi - -############################################# -# run the GFS job -############################################# -sh $HOMEgfs/jobs/JGFS_GEMPAK diff --git a/driver/product/run_JGFS_NCEPPOST b/driver/product/run_JGFS_NCEPPOST deleted file mode 100755 index 88698d36df..0000000000 --- a/driver/product/run_JGFS_NCEPPOST +++ /dev/null @@ -1,136 +0,0 @@ -#!/bin/sh - -#BSUB -o gfs_post.o%J -#BSUB -e gfs_post.o%J -#BSUB -J gfs_post -#BSUB -extsched 'CRAYLINUX[]' -#BSUB -W 02:00 -#BSUB -q devhigh -#BSUB -P GFS-T2O -#BSUB -M 1000 -#BSUB -cwd /gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work/gfs.v14.1.0/driver - -set -x - -export NODES=3 -export ntasks=24 -export ptile=8 -export threads=1 - -# specify user's own post working directory for testing -export svndir=/gpfs/hps/emc/global/noscrub/emc.glopara/svn/gfs/work -export MP_LABELIO=yes - -export OMP_NUM_THREADS=$threads - - -############################################ -# Loading module -############################################ -. $MODULESHOME/init/ksh -module load PrgEnv-intel ESMF-intel-haswell/3_1_0rp5 cfp-intel-sandybridge iobuf craype-hugepages2M craype-haswell -#module load cfp-intel-sandybridge/1.1.0 -module use /gpfs/hps/nco/ops/nwprod/modulefiles -module load prod_envir/1.1.0 -module load prod_util/1.0.4 -module load grib_util/1.0.3 -##module load crtm-intel/2.2.4 -module list - -export hwrf_ver=v10.0.6 - -# specify PDY (the cycle start yyyymmdd) and cycle -export CDATE=2017052500 -export PDY=`echo $CDATE | cut -c1-8` -export cyc=`echo $CDATE | cut -c9-10` -export cycle=t${cyc}z - - -# specify the directory environment for executable, it's either para or prod -export envir=prod - -# set up running dir - -export job=gfs_post_${cyc} -export pid=${pid:-$$} -export jobid=${job}.${pid} - -export DATA=/gpfs/hps/stmp/$LOGNAME/test/$jobid -mkdir -p $DATA -cd $DATA -rm -f ${DATA}/* - -#################################### -# Specify RUN Name and model -#################################### -export NET=gfs -export RUN=gfs - -#################################### -# Determine Job Output Name on System -#################################### -#export pgmout="OUTPUT.${pid}" -#export pgmerr=errfile - -#################################### -# SENDSMS - Flag Events on SMS -# SENDCOM - Copy Files From TMPDIR to $COMOUT -# SENDDBN - Issue DBNet Client Calls -# RERUN - Rerun posts from beginning (default no) -# VERBOSE - Specify Verbose Output in global_postgp.sh -#################################### -export SAVEGES=NO -export SENDSMS=NO -export SENDCOM=YES -export SENDDBN=NO -export RERUN=NO -export VERBOSE=YES - -export HOMEglobal=${svndir}/global_shared.v14.1.0 -export HOMEgfs=${svndir}/gfs.v14.1.0 -############################################## -# Define COM directories -############################################## -##export COMIN=$COMROOThps/gfs/para/gfs.${PDY} -export COMIN=/gpfs/hps/ptmp/emc.glopara/com2/gfs/para/gfs.${PDY} -export COMOUT=/gpfs/hps/ptmp/$LOGNAME/com2/gfs/test/gfs.$PDY -mkdir -p $COMOUT - -############################################## -# Define GES directories -############################################## -gespath=$GESROOThps -export GESdir=$gespath/${RUN}.${PDY} - -#################################### -# Specify Forecast Hour Range -#################################### - -export allfhr="anl 00 01 06 12 60 120 180 240 252 384" -for post_times in $allfhr -do -export post_times - -date - -#export OUTTYP=4 -# need to set FIXglobal to global share superstructure if testing post in non -# super structure environement -export FIXglobal=$svndir/global_shared.v14.1.0/fix -export APRUN="aprun -j 1 -n${ntasks} -N${ptile} -d${threads} -cc depth" -export nemsioget=$svndir/global_shared.v14.1.0/exec/nemsio_get - -export KEEPDATA=YES -export REMOVE_DATA=NO -#export POSTGRB2TBL=$HOMEglobal/parm/params_grib2_tbl_new -$HOMEgfs/jobs/JGFS_NCEPPOST - -############################################################# - -date - -echo $? - -done - - diff --git a/driver/product/run_JGFS_NCEPPOST.sh b/driver/product/run_JGFS_NCEPPOST.sh deleted file mode 100755 index 88285cbf8d..0000000000 --- a/driver/product/run_JGFS_NCEPPOST.sh +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/sh - -#BSUB -a poe -#BSUB -P GFS-T2O -#BSUB -eo gfspost1.dayfile.%J -#BSUB -oo gfspost1.dayfile.%J -#BSUB -J gfspost1 -#BSUB -network type=sn_all:mode=US -#BSUB -q "debug2" -#BSUB -n 24 -#BSUB -R span[ptile=8] -#BSUB -R affinity[core(3)] -#BSUB -x -#BSUB -W 00:15 - -############################################################# -# Function been tested: GFS master pgb file for a giving hour. -# -# Calling sequence: run_JGFS_NCEPPOST.sh -> JGFS_NCEPPOST -> exgfs_nceppost.sh -> global_nceppost.sh -> ncep_post -# -# Initial condition: CDATE=2016020900 (where /global/noscrub/emc.glopara/com/gfs/para/gfs.${PDY}${cyc} has data -# post_times="12" (Which hour of the master grib2 file to generate) -# GRIBVERSION=${GRIBVERSION:-'grib2'} (Grib2 data for the master pgb) -# -# -# Usage: bsub= 0241 and :TIME < 0841 + event 1 jtwc_bull_email + endfamily + family prep + task jgfs_atmos_emcsfc_sfc_prep + trigger /prod/primary/00/obsproc/v1.0/gfs/atmos/dump/jobsproc_gfs_atmos_dump:release_sfcprep + endfamily + endfamily + family analysis + task jgfs_atmos_analysis + trigger /prod/primary/00/obsproc/v1.0/gfs/atmos/prep/jobsproc_gfs_atmos_prep == complete and ../obsproc/prep/jgfs_atmos_emcsfc_sfc_prep == complete + event 1 release_fcst + task jgfs_atmos_analysis_calc + trigger ./jgfs_atmos_analysis == complete + endfamily + family post + task jgfs_atmos_post_manager + trigger ../analysis/jgfs_atmos_analysis == complete + event 1 release_postanl + event 2 release_post000 + event 3 release_post001 + event 4 release_post002 + event 5 release_post003 + event 6 release_post004 + event 7 release_post005 + event 8 release_post006 + event 9 release_post007 + event 10 release_post008 + event 11 release_post009 + event 12 release_post010 + event 13 release_post011 + event 14 release_post012 + event 15 release_post013 + event 16 release_post014 + event 17 release_post015 + event 18 release_post016 + event 19 release_post017 + event 20 release_post018 + event 21 release_post019 + event 22 release_post020 + event 23 release_post021 + event 24 release_post022 + event 25 release_post023 + event 26 release_post024 + event 27 release_post025 + event 28 release_post026 + event 29 release_post027 + event 30 release_post028 + event 31 release_post029 + event 32 release_post030 + event 33 release_post031 + event 34 release_post032 + event 35 release_post033 + event 36 release_post034 + event 37 release_post035 + event 38 release_post036 + event 39 release_post037 + event 40 release_post038 + event 41 release_post039 + event 42 release_post040 + event 43 release_post041 + event 44 release_post042 + event 45 release_post043 + event 46 release_post044 + event 47 release_post045 + event 48 release_post046 + event 49 release_post047 + event 50 release_post048 + event 51 release_post049 + event 52 release_post050 + event 53 release_post051 + event 54 release_post052 + event 55 release_post053 + event 56 release_post054 + event 57 release_post055 + event 58 release_post056 + event 59 release_post057 + event 60 release_post058 + event 61 release_post059 + event 62 release_post060 + event 63 release_post061 + event 64 release_post062 + event 65 release_post063 + event 66 release_post064 + event 67 release_post065 + event 68 release_post066 + event 69 release_post067 + event 70 release_post068 + event 71 release_post069 + event 72 release_post070 + event 73 release_post071 + event 74 release_post072 + event 75 release_post073 + event 76 release_post074 + event 77 release_post075 + event 78 release_post076 + event 79 release_post077 + event 80 release_post078 + event 81 release_post079 + event 82 release_post080 + event 83 release_post081 + event 84 release_post082 + event 85 release_post083 + event 86 release_post084 + event 87 release_post085 + event 88 release_post086 + event 89 release_post087 + event 90 release_post088 + event 91 release_post089 + event 92 release_post090 + event 93 release_post091 + event 94 release_post092 + event 95 release_post093 + event 96 release_post094 + event 97 release_post095 + event 98 release_post096 + event 99 release_post097 + event 100 release_post098 + event 101 release_post099 + event 102 release_post100 + event 103 release_post101 + event 104 release_post102 + event 105 release_post103 + event 106 release_post104 + event 107 release_post105 + event 108 release_post106 + event 109 release_post107 + event 110 release_post108 + event 111 release_post109 + event 112 release_post110 + event 113 release_post111 + event 114 release_post112 + event 115 release_post113 + event 116 release_post114 + event 117 release_post115 + event 118 release_post116 + event 119 release_post117 + event 120 release_post118 + event 121 release_post119 + event 122 release_post120 + event 123 release_post123 + event 124 release_post126 + event 125 release_post129 + event 126 release_post132 + event 127 release_post135 + event 128 release_post138 + event 129 release_post141 + event 130 release_post144 + event 131 release_post147 + event 132 release_post150 + event 133 release_post153 + event 134 release_post156 + event 135 release_post159 + event 136 release_post162 + event 137 release_post165 + event 138 release_post168 + event 139 release_post171 + event 140 release_post174 + event 141 release_post177 + event 142 release_post180 + event 143 release_post183 + event 144 release_post186 + event 145 release_post189 + event 146 release_post192 + event 147 release_post195 + event 148 release_post198 + event 149 release_post201 + event 150 release_post204 + event 151 release_post207 + event 152 release_post210 + event 153 release_post213 + event 154 release_post216 + event 155 release_post219 + event 156 release_post222 + event 157 release_post225 + event 158 release_post228 + event 159 release_post231 + event 160 release_post234 + event 161 release_post237 + event 162 release_post240 + event 163 release_post243 + event 164 release_post246 + event 165 release_post249 + event 166 release_post252 + event 167 release_post255 + event 168 release_post258 + event 169 release_post261 + event 170 release_post264 + event 171 release_post267 + event 172 release_post270 + event 173 release_post273 + event 174 release_post276 + event 175 release_post279 + event 176 release_post282 + event 177 release_post285 + event 178 release_post288 + event 179 release_post291 + event 180 release_post294 + event 181 release_post297 + event 182 release_post300 + event 183 release_post303 + event 184 release_post306 + event 185 release_post309 + event 186 release_post312 + event 187 release_post315 + event 188 release_post318 + event 189 release_post321 + event 190 release_post324 + event 191 release_post327 + event 192 release_post330 + event 193 release_post333 + event 194 release_post336 + event 195 release_post339 + event 196 release_post342 + event 197 release_post345 + event 198 release_post348 + event 199 release_post351 + event 200 release_post354 + event 201 release_post357 + event 202 release_post360 + event 203 release_post363 + event 204 release_post366 + event 205 release_post369 + event 206 release_post372 + event 207 release_post375 + event 208 release_post378 + event 209 release_post381 + event 210 release_post384 + task jgfs_atmos_post_anl + trigger ./jgfs_atmos_post_manager:release_postanl + edit FHRGRP '000' + edit FHRLST 'anl' + edit HR 'anl' + edit FHR 'anl' + task jgfs_atmos_post_f000 + trigger ./jgfs_atmos_post_manager:release_post000 + edit FHRGRP '001' + edit FHRLST 'f000' + edit FHR 'f000' + edit HR '000' + task jgfs_atmos_post_f001 + trigger ./jgfs_atmos_post_manager:release_post001 + edit FHRGRP '002' + edit FHRLST 'f001' + edit FHR 'f001' + edit HR '001' + task jgfs_atmos_post_f002 + trigger ./jgfs_atmos_post_manager:release_post002 + edit FHRGRP '003' + edit FHRLST 'f002' + edit FHR 'f002' + edit HR '002' + task jgfs_atmos_post_f003 + trigger ./jgfs_atmos_post_manager:release_post003 + edit FHRGRP '004' + edit FHRLST 'f003' + edit FHR 'f003' + edit HR '003' + task jgfs_atmos_post_f004 + trigger ./jgfs_atmos_post_manager:release_post004 + edit FHRGRP '005' + edit FHRLST 'f004' + edit FHR 'f004' + edit HR '004' + task jgfs_atmos_post_f005 + trigger ./jgfs_atmos_post_manager:release_post005 + edit FHRGRP '006' + edit FHRLST 'f005' + edit FHR 'f005' + edit HR '005' + task jgfs_atmos_post_f006 + trigger ./jgfs_atmos_post_manager:release_post006 + edit FHRGRP '007' + edit FHRLST 'f006' + edit FHR 'f006' + edit HR '006' + task jgfs_atmos_post_f007 + trigger ./jgfs_atmos_post_manager:release_post007 + edit FHRGRP '008' + edit FHRLST 'f007' + edit FHR 'f007' + edit HR '007' + task jgfs_atmos_post_f008 + trigger ./jgfs_atmos_post_manager:release_post008 + edit FHRGRP '009' + edit FHRLST 'f008' + edit FHR 'f008' + edit HR '008' + task jgfs_atmos_post_f009 + trigger ./jgfs_atmos_post_manager:release_post009 + edit FHRGRP '010' + edit FHRLST 'f009' + edit FHR 'f009' + edit HR '009' + task jgfs_atmos_post_f010 + trigger ./jgfs_atmos_post_manager:release_post010 + edit FHRGRP '011' + edit FHRLST 'f010' + edit FHR 'f010' + edit HR '010' + task jgfs_atmos_post_f011 + trigger ./jgfs_atmos_post_manager:release_post011 + edit FHRGRP '012' + edit FHRLST 'f011' + edit FHR 'f011' + edit HR '011' + task jgfs_atmos_post_f012 + trigger ./jgfs_atmos_post_manager:release_post012 + edit FHRGRP '013' + edit FHRLST 'f012' + edit FHR 'f012' + edit HR '012' + task jgfs_atmos_post_f013 + trigger ./jgfs_atmos_post_manager:release_post013 + edit FHRGRP '014' + edit FHRLST 'f013' + edit FHR 'f013' + edit HR '013' + task jgfs_atmos_post_f014 + trigger ./jgfs_atmos_post_manager:release_post014 + edit FHRGRP '015' + edit FHRLST 'f014' + edit FHR 'f014' + edit HR '014' + task jgfs_atmos_post_f015 + trigger ./jgfs_atmos_post_manager:release_post015 + edit FHRGRP '016' + edit FHRLST 'f015' + edit FHR 'f015' + edit HR '015' + task jgfs_atmos_post_f016 + trigger ./jgfs_atmos_post_manager:release_post016 + edit FHRGRP '017' + edit FHRLST 'f016' + edit FHR 'f016' + edit HR '016' + task jgfs_atmos_post_f017 + trigger ./jgfs_atmos_post_manager:release_post017 + edit FHRGRP '018' + edit FHRLST 'f017' + edit FHR 'f017' + edit HR '017' + task jgfs_atmos_post_f018 + trigger ./jgfs_atmos_post_manager:release_post018 + edit FHRGRP '019' + edit FHRLST 'f018' + edit FHR 'f018' + edit HR '018' + task jgfs_atmos_post_f019 + trigger ./jgfs_atmos_post_manager:release_post019 + edit FHRGRP '020' + edit FHRLST 'f019' + edit FHR 'f019' + edit HR '019' + task jgfs_atmos_post_f020 + trigger ./jgfs_atmos_post_manager:release_post020 + edit FHRGRP '021' + edit FHRLST 'f020' + edit FHR 'f020' + edit HR '020' + task jgfs_atmos_post_f021 + trigger ./jgfs_atmos_post_manager:release_post021 + edit FHRGRP '022' + edit FHRLST 'f021' + edit FHR 'f021' + edit HR '021' + task jgfs_atmos_post_f022 + trigger ./jgfs_atmos_post_manager:release_post022 + edit FHRGRP '023' + edit FHRLST 'f022' + edit FHR 'f022' + edit HR '022' + task jgfs_atmos_post_f023 + trigger ./jgfs_atmos_post_manager:release_post023 + edit FHRGRP '024' + edit FHRLST 'f023' + edit FHR 'f023' + edit HR '023' + task jgfs_atmos_post_f024 + trigger ./jgfs_atmos_post_manager:release_post024 + edit FHRGRP '025' + edit FHRLST 'f024' + edit FHR 'f024' + edit HR '024' + task jgfs_atmos_post_f025 + trigger ./jgfs_atmos_post_manager:release_post025 + edit FHRGRP '026' + edit FHRLST 'f025' + edit FHR 'f025' + edit HR '025' + task jgfs_atmos_post_f026 + trigger ./jgfs_atmos_post_manager:release_post026 + edit FHRGRP '027' + edit FHRLST 'f026' + edit FHR 'f026' + edit HR '026' + task jgfs_atmos_post_f027 + trigger ./jgfs_atmos_post_manager:release_post027 + edit FHRGRP '028' + edit FHRLST 'f027' + edit FHR 'f027' + edit HR '027' + task jgfs_atmos_post_f028 + trigger ./jgfs_atmos_post_manager:release_post028 + edit FHRGRP '029' + edit FHRLST 'f028' + edit FHR 'f028' + edit HR '028' + task jgfs_atmos_post_f029 + trigger ./jgfs_atmos_post_manager:release_post029 + edit FHRGRP '030' + edit FHRLST 'f029' + edit FHR 'f029' + edit HR '029' + task jgfs_atmos_post_f030 + trigger ./jgfs_atmos_post_manager:release_post030 + edit FHRGRP '031' + edit FHRLST 'f030' + edit FHR 'f030' + edit HR '030' + task jgfs_atmos_post_f031 + trigger ./jgfs_atmos_post_manager:release_post031 + edit FHRGRP '032' + edit FHRLST 'f031' + edit FHR 'f031' + edit HR '031' + task jgfs_atmos_post_f032 + trigger ./jgfs_atmos_post_manager:release_post032 + edit FHRGRP '033' + edit FHRLST 'f032' + edit FHR 'f032' + edit HR '032' + task jgfs_atmos_post_f033 + trigger ./jgfs_atmos_post_manager:release_post033 + edit FHRGRP '034' + edit FHRLST 'f033' + edit FHR 'f033' + edit HR '033' + task jgfs_atmos_post_f034 + trigger ./jgfs_atmos_post_manager:release_post034 + edit FHRGRP '035' + edit FHRLST 'f034' + edit FHR 'f034' + edit HR '034' + task jgfs_atmos_post_f035 + trigger ./jgfs_atmos_post_manager:release_post035 + edit FHRGRP '036' + edit FHRLST 'f035' + edit FHR 'f035' + edit HR '035' + task jgfs_atmos_post_f036 + trigger ./jgfs_atmos_post_manager:release_post036 + edit FHRGRP '037' + edit FHRLST 'f036' + edit FHR 'f036' + edit HR '036' + task jgfs_atmos_post_f037 + trigger ./jgfs_atmos_post_manager:release_post037 + edit FHRGRP '038' + edit FHRLST 'f037' + edit FHR 'f037' + edit HR '037' + task jgfs_atmos_post_f038 + trigger ./jgfs_atmos_post_manager:release_post038 + edit FHRGRP '039' + edit FHRLST 'f038' + edit FHR 'f038' + edit HR '038' + task jgfs_atmos_post_f039 + trigger ./jgfs_atmos_post_manager:release_post039 + edit FHRGRP '040' + edit FHRLST 'f039' + edit FHR 'f039' + edit HR '039' + task jgfs_atmos_post_f040 + trigger ./jgfs_atmos_post_manager:release_post040 + edit FHRGRP '041' + edit FHRLST 'f040' + edit FHR 'f040' + edit HR '040' + task jgfs_atmos_post_f041 + trigger ./jgfs_atmos_post_manager:release_post041 + edit FHRGRP '042' + edit FHRLST 'f041' + edit FHR 'f041' + edit HR '041' + task jgfs_atmos_post_f042 + trigger ./jgfs_atmos_post_manager:release_post042 + edit FHRGRP '043' + edit FHRLST 'f042' + edit FHR 'f042' + edit HR '042' + task jgfs_atmos_post_f043 + trigger ./jgfs_atmos_post_manager:release_post043 + edit FHRGRP '044' + edit FHRLST 'f043' + edit FHR 'f043' + edit HR '043' + task jgfs_atmos_post_f044 + trigger ./jgfs_atmos_post_manager:release_post044 + edit FHRGRP '045' + edit FHRLST 'f044' + edit FHR 'f044' + edit HR '044' + task jgfs_atmos_post_f045 + trigger ./jgfs_atmos_post_manager:release_post045 + edit FHRGRP '046' + edit FHRLST 'f045' + edit FHR 'f045' + edit HR '045' + task jgfs_atmos_post_f046 + trigger ./jgfs_atmos_post_manager:release_post046 + edit FHRGRP '047' + edit FHRLST 'f046' + edit FHR 'f046' + edit HR '046' + task jgfs_atmos_post_f047 + trigger ./jgfs_atmos_post_manager:release_post047 + edit FHRGRP '048' + edit FHRLST 'f047' + edit FHR 'f047' + edit HR '047' + task jgfs_atmos_post_f048 + trigger ./jgfs_atmos_post_manager:release_post048 + edit FHRGRP '049' + edit FHRLST 'f048' + edit FHR 'f048' + edit HR '048' + task jgfs_atmos_post_f049 + trigger ./jgfs_atmos_post_manager:release_post049 + edit FHRGRP '050' + edit FHRLST 'f049' + edit FHR 'f049' + edit HR '049' + task jgfs_atmos_post_f050 + trigger ./jgfs_atmos_post_manager:release_post050 + edit FHRGRP '051' + edit FHRLST 'f050' + edit FHR 'f050' + edit HR '050' + task jgfs_atmos_post_f051 + trigger ./jgfs_atmos_post_manager:release_post051 + edit FHRGRP '052' + edit FHRLST 'f051' + edit FHR 'f051' + edit HR '051' + task jgfs_atmos_post_f052 + trigger ./jgfs_atmos_post_manager:release_post052 + edit FHRGRP '053' + edit FHRLST 'f052' + edit FHR 'f052' + edit HR '052' + task jgfs_atmos_post_f053 + trigger ./jgfs_atmos_post_manager:release_post053 + edit FHRGRP '054' + edit FHRLST 'f053' + edit FHR 'f053' + edit HR '053' + task jgfs_atmos_post_f054 + trigger ./jgfs_atmos_post_manager:release_post054 + edit FHRGRP '055' + edit FHRLST 'f054' + edit FHR 'f054' + edit HR '054' + task jgfs_atmos_post_f055 + trigger ./jgfs_atmos_post_manager:release_post055 + edit FHRGRP '056' + edit FHRLST 'f055' + edit FHR 'f055' + edit HR '055' + task jgfs_atmos_post_f056 + trigger ./jgfs_atmos_post_manager:release_post056 + edit FHRGRP '057' + edit FHRLST 'f056' + edit FHR 'f056' + edit HR '056' + task jgfs_atmos_post_f057 + trigger ./jgfs_atmos_post_manager:release_post057 + edit FHRGRP '058' + edit FHRLST 'f057' + edit FHR 'f057' + edit HR '057' + task jgfs_atmos_post_f058 + trigger ./jgfs_atmos_post_manager:release_post058 + edit FHRGRP '059' + edit FHRLST 'f058' + edit FHR 'f058' + edit HR '058' + task jgfs_atmos_post_f059 + trigger ./jgfs_atmos_post_manager:release_post059 + edit FHRGRP '060' + edit FHRLST 'f059' + edit FHR 'f059' + edit HR '059' + task jgfs_atmos_post_f060 + trigger ./jgfs_atmos_post_manager:release_post060 + edit FHRGRP '061' + edit FHRLST 'f060' + edit FHR 'f060' + edit HR '060' + task jgfs_atmos_post_f061 + trigger ./jgfs_atmos_post_manager:release_post061 + edit FHRGRP '062' + edit FHRLST 'f061' + edit FHR 'f061' + edit HR '061' + task jgfs_atmos_post_f062 + trigger ./jgfs_atmos_post_manager:release_post062 + edit FHRGRP '063' + edit FHRLST 'f062' + edit FHR 'f062' + edit HR '062' + task jgfs_atmos_post_f063 + trigger ./jgfs_atmos_post_manager:release_post063 + edit FHRGRP '064' + edit FHRLST 'f063' + edit FHR 'f063' + edit HR '063' + task jgfs_atmos_post_f064 + trigger ./jgfs_atmos_post_manager:release_post064 + edit FHRGRP '065' + edit FHRLST 'f064' + edit FHR 'f064' + edit HR '064' + task jgfs_atmos_post_f065 + trigger ./jgfs_atmos_post_manager:release_post065 + edit FHRGRP '066' + edit FHRLST 'f065' + edit FHR 'f065' + edit HR '065' + task jgfs_atmos_post_f066 + trigger ./jgfs_atmos_post_manager:release_post066 + edit FHRGRP '067' + edit FHRLST 'f066' + edit FHR 'f066' + edit HR '066' + task jgfs_atmos_post_f067 + trigger ./jgfs_atmos_post_manager:release_post067 + edit FHRGRP '068' + edit FHRLST 'f067' + edit FHR 'f067' + edit HR '067' + task jgfs_atmos_post_f068 + trigger ./jgfs_atmos_post_manager:release_post068 + edit FHRGRP '069' + edit FHRLST 'f068' + edit FHR 'f068' + edit HR '068' + task jgfs_atmos_post_f069 + trigger ./jgfs_atmos_post_manager:release_post069 + edit FHRGRP '070' + edit FHRLST 'f069' + edit FHR 'f069' + edit HR '069' + task jgfs_atmos_post_f070 + trigger ./jgfs_atmos_post_manager:release_post070 + edit FHRGRP '071' + edit FHRLST 'f070' + edit FHR 'f070' + edit HR '070' + task jgfs_atmos_post_f071 + trigger ./jgfs_atmos_post_manager:release_post071 + edit FHRGRP '072' + edit FHRLST 'f071' + edit FHR 'f071' + edit HR '071' + task jgfs_atmos_post_f072 + trigger ./jgfs_atmos_post_manager:release_post072 + edit FHRGRP '073' + edit FHRLST 'f072' + edit FHR 'f072' + edit HR '072' + task jgfs_atmos_post_f073 + trigger ./jgfs_atmos_post_manager:release_post073 + edit FHRGRP '074' + edit FHRLST 'f073' + edit FHR 'f073' + edit HR '073' + task jgfs_atmos_post_f074 + trigger ./jgfs_atmos_post_manager:release_post074 + edit FHRGRP '075' + edit FHRLST 'f074' + edit FHR 'f074' + edit HR '074' + task jgfs_atmos_post_f075 + trigger ./jgfs_atmos_post_manager:release_post075 + edit FHRGRP '076' + edit FHRLST 'f075' + edit FHR 'f075' + edit HR '075' + task jgfs_atmos_post_f076 + trigger ./jgfs_atmos_post_manager:release_post076 + edit FHRGRP '077' + edit FHRLST 'f076' + edit FHR 'f076' + edit HR '076' + task jgfs_atmos_post_f077 + trigger ./jgfs_atmos_post_manager:release_post077 + edit FHRGRP '078' + edit FHRLST 'f077' + edit FHR 'f077' + edit HR '077' + task jgfs_atmos_post_f078 + trigger ./jgfs_atmos_post_manager:release_post078 + edit FHRGRP '079' + edit FHRLST 'f078' + edit FHR 'f078' + edit HR '078' + task jgfs_atmos_post_f079 + trigger ./jgfs_atmos_post_manager:release_post079 + edit FHRGRP '080' + edit FHRLST 'f079' + edit FHR 'f079' + edit HR '079' + task jgfs_atmos_post_f080 + trigger ./jgfs_atmos_post_manager:release_post080 + edit FHRGRP '081' + edit FHRLST 'f080' + edit FHR 'f080' + edit HR '080' + task jgfs_atmos_post_f081 + trigger ./jgfs_atmos_post_manager:release_post081 + edit FHRGRP '082' + edit FHRLST 'f081' + edit FHR 'f081' + edit HR '081' + task jgfs_atmos_post_f082 + trigger ./jgfs_atmos_post_manager:release_post082 + edit FHRGRP '083' + edit FHRLST 'f082' + edit FHR 'f082' + edit HR '082' + task jgfs_atmos_post_f083 + trigger ./jgfs_atmos_post_manager:release_post083 + edit FHRGRP '084' + edit FHRLST 'f083' + edit FHR 'f083' + edit HR '083' + task jgfs_atmos_post_f084 + trigger ./jgfs_atmos_post_manager:release_post084 + edit FHRGRP '085' + edit FHRLST 'f084' + edit FHR 'f084' + edit HR '084' + task jgfs_atmos_post_f085 + trigger ./jgfs_atmos_post_manager:release_post085 + edit FHRGRP '086' + edit FHRLST 'f085' + edit FHR 'f085' + edit HR '085' + task jgfs_atmos_post_f086 + trigger ./jgfs_atmos_post_manager:release_post086 + edit FHRGRP '087' + edit FHRLST 'f086' + edit FHR 'f086' + edit HR '086' + task jgfs_atmos_post_f087 + trigger ./jgfs_atmos_post_manager:release_post087 + edit FHRGRP '088' + edit FHRLST 'f087' + edit FHR 'f087' + edit HR '087' + task jgfs_atmos_post_f088 + trigger ./jgfs_atmos_post_manager:release_post088 + edit FHRGRP '089' + edit FHRLST 'f088' + edit FHR 'f088' + edit HR '088' + task jgfs_atmos_post_f089 + trigger ./jgfs_atmos_post_manager:release_post089 + edit FHRGRP '090' + edit FHRLST 'f089' + edit FHR 'f089' + edit HR '089' + task jgfs_atmos_post_f090 + trigger ./jgfs_atmos_post_manager:release_post090 + edit FHRGRP '091' + edit FHRLST 'f090' + edit FHR 'f090' + edit HR '090' + task jgfs_atmos_post_f091 + trigger ./jgfs_atmos_post_manager:release_post091 + edit FHRGRP '092' + edit FHRLST 'f091' + edit FHR 'f091' + edit HR '091' + task jgfs_atmos_post_f092 + trigger ./jgfs_atmos_post_manager:release_post092 + edit FHRGRP '093' + edit FHRLST 'f092' + edit FHR 'f092' + edit HR '092' + task jgfs_atmos_post_f093 + trigger ./jgfs_atmos_post_manager:release_post093 + edit FHRGRP '094' + edit FHRLST 'f093' + edit FHR 'f093' + edit HR '093' + task jgfs_atmos_post_f094 + trigger ./jgfs_atmos_post_manager:release_post094 + edit FHRGRP '095' + edit FHRLST 'f094' + edit FHR 'f094' + edit HR '094' + task jgfs_atmos_post_f095 + trigger ./jgfs_atmos_post_manager:release_post095 + edit FHRGRP '096' + edit FHRLST 'f095' + edit FHR 'f095' + edit HR '095' + task jgfs_atmos_post_f096 + trigger ./jgfs_atmos_post_manager:release_post096 + edit FHRGRP '097' + edit FHRLST 'f096' + edit FHR 'f096' + edit HR '096' + task jgfs_atmos_post_f097 + trigger ./jgfs_atmos_post_manager:release_post097 + edit FHRGRP '098' + edit FHRLST 'f097' + edit FHR 'f097' + edit HR '097' + task jgfs_atmos_post_f098 + trigger ./jgfs_atmos_post_manager:release_post098 + edit FHRGRP '099' + edit FHRLST 'f098' + edit FHR 'f098' + edit HR '098' + task jgfs_atmos_post_f099 + trigger ./jgfs_atmos_post_manager:release_post099 + edit FHRGRP '100' + edit FHRLST 'f099' + edit FHR 'f099' + edit HR '099' + task jgfs_atmos_post_f100 + trigger ./jgfs_atmos_post_manager:release_post100 + edit FHRGRP '101' + edit FHRLST 'f100' + edit FHR 'f100' + edit HR '100' + task jgfs_atmos_post_f101 + trigger ./jgfs_atmos_post_manager:release_post101 + edit FHRGRP '102' + edit FHRLST 'f101' + edit FHR 'f101' + edit HR '101' + task jgfs_atmos_post_f102 + trigger ./jgfs_atmos_post_manager:release_post102 + edit FHRGRP '103' + edit FHRLST 'f102' + edit FHR 'f102' + edit HR '102' + task jgfs_atmos_post_f103 + trigger ./jgfs_atmos_post_manager:release_post103 + edit FHRGRP '104' + edit FHRLST 'f103' + edit FHR 'f103' + edit HR '103' + task jgfs_atmos_post_f104 + trigger ./jgfs_atmos_post_manager:release_post104 + edit FHRGRP '105' + edit FHRLST 'f104' + edit FHR 'f104' + edit HR '104' + task jgfs_atmos_post_f105 + trigger ./jgfs_atmos_post_manager:release_post105 + edit FHRGRP '106' + edit FHRLST 'f105' + edit FHR 'f105' + edit HR '105' + task jgfs_atmos_post_f106 + trigger ./jgfs_atmos_post_manager:release_post106 + edit FHRGRP '107' + edit FHRLST 'f106' + edit FHR 'f106' + edit HR '106' + task jgfs_atmos_post_f107 + trigger ./jgfs_atmos_post_manager:release_post107 + edit FHRGRP '108' + edit FHRLST 'f107' + edit FHR 'f107' + edit HR '107' + task jgfs_atmos_post_f108 + trigger ./jgfs_atmos_post_manager:release_post108 + edit FHRGRP '109' + edit FHRLST 'f108' + edit FHR 'f108' + edit HR '108' + task jgfs_atmos_post_f109 + trigger ./jgfs_atmos_post_manager:release_post109 + edit FHRGRP '110' + edit FHRLST 'f109' + edit FHR 'f109' + edit HR '109' + task jgfs_atmos_post_f110 + trigger ./jgfs_atmos_post_manager:release_post110 + edit FHRGRP '111' + edit FHRLST 'f110' + edit FHR 'f110' + edit HR '110' + task jgfs_atmos_post_f111 + trigger ./jgfs_atmos_post_manager:release_post111 + edit FHRGRP '112' + edit FHRLST 'f111' + edit FHR 'f111' + edit HR '111' + task jgfs_atmos_post_f112 + trigger ./jgfs_atmos_post_manager:release_post112 + edit FHRGRP '113' + edit FHRLST 'f112' + edit FHR 'f112' + edit HR '112' + task jgfs_atmos_post_f113 + trigger ./jgfs_atmos_post_manager:release_post113 + edit FHRGRP '114' + edit FHRLST 'f113' + edit FHR 'f113' + edit HR '113' + task jgfs_atmos_post_f114 + trigger ./jgfs_atmos_post_manager:release_post114 + edit FHRGRP '115' + edit FHRLST 'f114' + edit FHR 'f114' + edit HR '114' + task jgfs_atmos_post_f115 + trigger ./jgfs_atmos_post_manager:release_post115 + edit FHRGRP '116' + edit FHRLST 'f115' + edit FHR 'f115' + edit HR '115' + task jgfs_atmos_post_f116 + trigger ./jgfs_atmos_post_manager:release_post116 + edit FHRGRP '117' + edit FHRLST 'f116' + edit FHR 'f116' + edit HR '116' + task jgfs_atmos_post_f117 + trigger ./jgfs_atmos_post_manager:release_post117 + edit FHRGRP '118' + edit FHRLST 'f117' + edit FHR 'f117' + edit HR '117' + task jgfs_atmos_post_f118 + trigger ./jgfs_atmos_post_manager:release_post118 + edit FHRGRP '119' + edit FHRLST 'f118' + edit FHR 'f118' + edit HR '118' + task jgfs_atmos_post_f119 + trigger ./jgfs_atmos_post_manager:release_post119 + edit FHRGRP '120' + edit FHRLST 'f119' + edit FHR 'f119' + edit HR '119' + task jgfs_atmos_post_f120 + trigger ./jgfs_atmos_post_manager:release_post120 + edit FHRGRP '121' + edit FHRLST 'f120' + edit FHR 'f120' + edit HR '120' + task jgfs_atmos_post_f123 + trigger ./jgfs_atmos_post_manager:release_post123 + edit FHRGRP '122' + edit FHRLST 'f123' + edit FHR 'f123' + edit HR '123' + task jgfs_atmos_post_f126 + trigger ./jgfs_atmos_post_manager:release_post126 + edit FHRGRP '123' + edit FHRLST 'f126' + edit FHR 'f126' + edit HR '126' + task jgfs_atmos_post_f129 + trigger ./jgfs_atmos_post_manager:release_post129 + edit FHRGRP '124' + edit FHRLST 'f129' + edit FHR 'f129' + edit HR '129' + task jgfs_atmos_post_f132 + trigger ./jgfs_atmos_post_manager:release_post132 + edit FHRGRP '125' + edit FHRLST 'f132' + edit FHR 'f132' + edit HR '132' + task jgfs_atmos_post_f135 + trigger ./jgfs_atmos_post_manager:release_post135 + edit FHRGRP '126' + edit FHRLST 'f135' + edit FHR 'f135' + edit HR '135' + task jgfs_atmos_post_f138 + trigger ./jgfs_atmos_post_manager:release_post138 + edit FHRGRP '127' + edit FHRLST 'f138' + edit FHR 'f138' + edit HR '138' + task jgfs_atmos_post_f141 + trigger ./jgfs_atmos_post_manager:release_post141 + edit FHRGRP '128' + edit FHRLST 'f141' + edit FHR 'f141' + edit HR '141' + task jgfs_atmos_post_f144 + trigger ./jgfs_atmos_post_manager:release_post144 + edit FHRGRP '129' + edit FHRLST 'f144' + edit FHR 'f144' + edit HR '144' + task jgfs_atmos_post_f147 + trigger ./jgfs_atmos_post_manager:release_post147 + edit FHRGRP '130' + edit FHRLST 'f147' + edit FHR 'f147' + edit HR '147' + task jgfs_atmos_post_f150 + trigger ./jgfs_atmos_post_manager:release_post150 + edit FHRGRP '131' + edit FHRLST 'f150' + edit FHR 'f150' + edit HR '150' + task jgfs_atmos_post_f153 + trigger ./jgfs_atmos_post_manager:release_post153 + edit FHRGRP '132' + edit FHRLST 'f153' + edit FHR 'f153' + edit HR '153' + task jgfs_atmos_post_f156 + trigger ./jgfs_atmos_post_manager:release_post156 + edit FHRGRP '133' + edit FHRLST 'f156' + edit FHR 'f156' + edit HR '156' + task jgfs_atmos_post_f159 + trigger ./jgfs_atmos_post_manager:release_post159 + edit FHRGRP '134' + edit FHRLST 'f159' + edit FHR 'f159' + edit HR '159' + task jgfs_atmos_post_f162 + trigger ./jgfs_atmos_post_manager:release_post162 + edit FHRGRP '135' + edit FHRLST 'f162' + edit FHR 'f162' + edit HR '162' + task jgfs_atmos_post_f165 + trigger ./jgfs_atmos_post_manager:release_post165 + edit FHRGRP '136' + edit FHRLST 'f165' + edit FHR 'f165' + edit HR '165' + task jgfs_atmos_post_f168 + trigger ./jgfs_atmos_post_manager:release_post168 + edit FHRGRP '137' + edit FHRLST 'f168' + edit FHR 'f168' + edit HR '168' + task jgfs_atmos_post_f171 + trigger ./jgfs_atmos_post_manager:release_post171 + edit FHRGRP '138' + edit FHRLST 'f171' + edit FHR 'f171' + edit HR '171' + task jgfs_atmos_post_f174 + trigger ./jgfs_atmos_post_manager:release_post174 + edit FHRGRP '139' + edit FHRLST 'f174' + edit FHR 'f174' + edit HR '174' + task jgfs_atmos_post_f177 + trigger ./jgfs_atmos_post_manager:release_post177 + edit FHRGRP '140' + edit FHRLST 'f177' + edit FHR 'f177' + edit HR '177' + task jgfs_atmos_post_f180 + trigger ./jgfs_atmos_post_manager:release_post180 + edit FHRGRP '141' + edit FHRLST 'f180' + edit FHR 'f180' + edit HR '180' + task jgfs_atmos_post_f183 + trigger ./jgfs_atmos_post_manager:release_post183 + edit FHRGRP '142' + edit FHRLST 'f183' + edit FHR 'f183' + edit HR '183' + task jgfs_atmos_post_f186 + trigger ./jgfs_atmos_post_manager:release_post186 + edit FHRGRP '143' + edit FHRLST 'f186' + edit FHR 'f186' + edit HR '186' + task jgfs_atmos_post_f189 + trigger ./jgfs_atmos_post_manager:release_post189 + edit FHRGRP '144' + edit FHRLST 'f189' + edit FHR 'f189' + edit HR '189' + task jgfs_atmos_post_f192 + trigger ./jgfs_atmos_post_manager:release_post192 + edit FHRGRP '145' + edit FHRLST 'f192' + edit FHR 'f192' + edit HR '192' + task jgfs_atmos_post_f195 + trigger ./jgfs_atmos_post_manager:release_post195 + edit FHRGRP '146' + edit FHRLST 'f195' + edit FHR 'f195' + edit HR '195' + task jgfs_atmos_post_f198 + trigger ./jgfs_atmos_post_manager:release_post198 + edit FHRGRP '147' + edit FHRLST 'f198' + edit FHR 'f198' + edit HR '198' + task jgfs_atmos_post_f201 + trigger ./jgfs_atmos_post_manager:release_post201 + edit FHRGRP '148' + edit FHRLST 'f201' + edit FHR 'f201' + edit HR '201' + task jgfs_atmos_post_f204 + trigger ./jgfs_atmos_post_manager:release_post204 + edit FHRGRP '149' + edit FHRLST 'f204' + edit FHR 'f204' + edit HR '204' + task jgfs_atmos_post_f207 + trigger ./jgfs_atmos_post_manager:release_post207 + edit FHRGRP '150' + edit FHRLST 'f207' + edit FHR 'f207' + edit HR '207' + task jgfs_atmos_post_f210 + trigger ./jgfs_atmos_post_manager:release_post210 + edit FHRGRP '151' + edit FHRLST 'f210' + edit FHR 'f210' + edit HR '210' + task jgfs_atmos_post_f213 + trigger ./jgfs_atmos_post_manager:release_post213 + edit FHRGRP '152' + edit FHRLST 'f213' + edit FHR 'f213' + edit HR '213' + task jgfs_atmos_post_f216 + trigger ./jgfs_atmos_post_manager:release_post216 + edit FHRGRP '153' + edit FHRLST 'f216' + edit FHR 'f216' + edit HR '216' + task jgfs_atmos_post_f219 + trigger ./jgfs_atmos_post_manager:release_post219 + edit FHRGRP '154' + edit FHRLST 'f219' + edit FHR 'f219' + edit HR '219' + task jgfs_atmos_post_f222 + trigger ./jgfs_atmos_post_manager:release_post222 + edit FHRGRP '155' + edit FHRLST 'f222' + edit FHR 'f222' + edit HR '222' + task jgfs_atmos_post_f225 + trigger ./jgfs_atmos_post_manager:release_post225 + edit FHRGRP '156' + edit FHRLST 'f225' + edit FHR 'f225' + edit HR '225' + task jgfs_atmos_post_f228 + trigger ./jgfs_atmos_post_manager:release_post228 + edit FHRGRP '157' + edit FHRLST 'f228' + edit FHR 'f228' + edit HR '228' + task jgfs_atmos_post_f231 + trigger ./jgfs_atmos_post_manager:release_post231 + edit FHRGRP '158' + edit FHRLST 'f231' + edit FHR 'f231' + edit HR '231' + task jgfs_atmos_post_f234 + trigger ./jgfs_atmos_post_manager:release_post234 + edit FHRGRP '159' + edit FHRLST 'f234' + edit FHR 'f234' + edit HR '234' + task jgfs_atmos_post_f237 + trigger ./jgfs_atmos_post_manager:release_post237 + edit FHRGRP '160' + edit FHRLST 'f237' + edit FHR 'f237' + edit HR '237' + task jgfs_atmos_post_f240 + trigger ./jgfs_atmos_post_manager:release_post240 + edit FHRGRP '161' + edit FHRLST 'f240' + edit FHR 'f240' + edit HR '240' + task jgfs_atmos_post_f243 + trigger ./jgfs_atmos_post_manager:release_post243 + edit FHRGRP '162' + edit FHRLST 'f243' + edit FHR 'f243' + edit HR '243' + task jgfs_atmos_post_f246 + trigger ./jgfs_atmos_post_manager:release_post246 + edit FHRGRP '163' + edit FHRLST 'f246' + edit FHR 'f246' + edit HR '246' + task jgfs_atmos_post_f249 + trigger ./jgfs_atmos_post_manager:release_post249 + edit FHRGRP '164' + edit FHRLST 'f249' + edit FHR 'f249' + edit HR '249' + task jgfs_atmos_post_f252 + trigger ./jgfs_atmos_post_manager:release_post252 + edit FHRGRP '165' + edit FHRLST 'f252' + edit FHR 'f252' + edit HR '252' + task jgfs_atmos_post_f255 + trigger ./jgfs_atmos_post_manager:release_post255 + edit FHRGRP '166' + edit FHRLST 'f255' + edit FHR 'f255' + edit HR '255' + task jgfs_atmos_post_f258 + trigger ./jgfs_atmos_post_manager:release_post258 + edit FHRGRP '167' + edit FHRLST 'f258' + edit FHR 'f258' + edit HR '258' + task jgfs_atmos_post_f261 + trigger ./jgfs_atmos_post_manager:release_post261 + edit FHRGRP '168' + edit FHRLST 'f261' + edit FHR 'f261' + edit HR '261' + task jgfs_atmos_post_f264 + trigger ./jgfs_atmos_post_manager:release_post264 + edit FHRGRP '169' + edit FHRLST 'f264' + edit FHR 'f264' + edit HR '264' + task jgfs_atmos_post_f267 + trigger ./jgfs_atmos_post_manager:release_post267 + edit FHRGRP '170' + edit FHRLST 'f267' + edit FHR 'f267' + edit HR '267' + task jgfs_atmos_post_f270 + trigger ./jgfs_atmos_post_manager:release_post270 + edit FHRGRP '171' + edit FHRLST 'f270' + edit FHR 'f270' + edit HR '270' + task jgfs_atmos_post_f273 + trigger ./jgfs_atmos_post_manager:release_post273 + edit FHRGRP '172' + edit FHRLST 'f273' + edit FHR 'f273' + edit HR '273' + task jgfs_atmos_post_f276 + trigger ./jgfs_atmos_post_manager:release_post276 + edit FHRGRP '173' + edit FHRLST 'f276' + edit FHR 'f276' + edit HR '276' + task jgfs_atmos_post_f279 + trigger ./jgfs_atmos_post_manager:release_post279 + edit FHRGRP '174' + edit FHRLST 'f279' + edit FHR 'f279' + edit HR '279' + task jgfs_atmos_post_f282 + trigger ./jgfs_atmos_post_manager:release_post282 + edit FHRGRP '175' + edit FHRLST 'f282' + edit FHR 'f282' + edit HR '282' + task jgfs_atmos_post_f285 + trigger ./jgfs_atmos_post_manager:release_post285 + edit FHRGRP '176' + edit FHRLST 'f285' + edit FHR 'f285' + edit HR '285' + task jgfs_atmos_post_f288 + trigger ./jgfs_atmos_post_manager:release_post288 + edit FHRGRP '177' + edit FHRLST 'f288' + edit FHR 'f288' + edit HR '288' + task jgfs_atmos_post_f291 + trigger ./jgfs_atmos_post_manager:release_post291 + edit FHRGRP '178' + edit FHRLST 'f291' + edit FHR 'f291' + edit HR '291' + task jgfs_atmos_post_f294 + trigger ./jgfs_atmos_post_manager:release_post294 + edit FHRGRP '179' + edit FHRLST 'f294' + edit FHR 'f294' + edit HR '294' + task jgfs_atmos_post_f297 + trigger ./jgfs_atmos_post_manager:release_post297 + edit FHRGRP '180' + edit FHRLST 'f297' + edit FHR 'f297' + edit HR '297' + task jgfs_atmos_post_f300 + trigger ./jgfs_atmos_post_manager:release_post300 + edit FHRGRP '181' + edit FHRLST 'f300' + edit FHR 'f300' + edit HR '300' + task jgfs_atmos_post_f303 + trigger ./jgfs_atmos_post_manager:release_post303 + edit FHRGRP '182' + edit FHRLST 'f303' + edit FHR 'f303' + edit HR '303' + task jgfs_atmos_post_f306 + trigger ./jgfs_atmos_post_manager:release_post306 + edit FHRGRP '183' + edit FHRLST 'f306' + edit FHR 'f306' + edit HR '306' + task jgfs_atmos_post_f309 + trigger ./jgfs_atmos_post_manager:release_post309 + edit FHRGRP '184' + edit FHRLST 'f309' + edit FHR 'f309' + edit HR '309' + task jgfs_atmos_post_f312 + trigger ./jgfs_atmos_post_manager:release_post312 + edit FHRGRP '185' + edit FHRLST 'f312' + edit FHR 'f312' + edit HR '312' + task jgfs_atmos_post_f315 + trigger ./jgfs_atmos_post_manager:release_post315 + edit FHRGRP '186' + edit FHRLST 'f315' + edit FHR 'f315' + edit HR '315' + task jgfs_atmos_post_f318 + trigger ./jgfs_atmos_post_manager:release_post318 + edit FHRGRP '187' + edit FHRLST 'f318' + edit FHR 'f318' + edit HR '318' + task jgfs_atmos_post_f321 + trigger ./jgfs_atmos_post_manager:release_post321 + edit FHRGRP '188' + edit FHRLST 'f321' + edit FHR 'f321' + edit HR '321' + task jgfs_atmos_post_f324 + trigger ./jgfs_atmos_post_manager:release_post324 + edit FHRGRP '189' + edit FHRLST 'f324' + edit FHR 'f324' + edit HR '324' + task jgfs_atmos_post_f327 + trigger ./jgfs_atmos_post_manager:release_post327 + edit FHRGRP '190' + edit FHRLST 'f327' + edit FHR 'f327' + edit HR '327' + task jgfs_atmos_post_f330 + trigger ./jgfs_atmos_post_manager:release_post330 + edit FHRGRP '191' + edit FHRLST 'f330' + edit FHR 'f330' + edit HR '330' + task jgfs_atmos_post_f333 + trigger ./jgfs_atmos_post_manager:release_post333 + edit FHRGRP '192' + edit FHRLST 'f333' + edit FHR 'f333' + edit HR '333' + task jgfs_atmos_post_f336 + trigger ./jgfs_atmos_post_manager:release_post336 + edit FHRGRP '193' + edit FHRLST 'f336' + edit FHR 'f336' + edit HR '336' + task jgfs_atmos_post_f339 + trigger ./jgfs_atmos_post_manager:release_post339 + edit FHRGRP '194' + edit FHRLST 'f339' + edit FHR 'f339' + edit HR '339' + task jgfs_atmos_post_f342 + trigger ./jgfs_atmos_post_manager:release_post342 + edit FHRGRP '195' + edit FHRLST 'f342' + edit FHR 'f342' + edit HR '342' + task jgfs_atmos_post_f345 + trigger ./jgfs_atmos_post_manager:release_post345 + edit FHRGRP '196' + edit FHRLST 'f345' + edit FHR 'f345' + edit HR '345' + task jgfs_atmos_post_f348 + trigger ./jgfs_atmos_post_manager:release_post348 + edit FHRGRP '197' + edit FHRLST 'f348' + edit FHR 'f348' + edit HR '348' + task jgfs_atmos_post_f351 + trigger ./jgfs_atmos_post_manager:release_post351 + edit FHRGRP '198' + edit FHRLST 'f351' + edit FHR 'f351' + edit HR '351' + task jgfs_atmos_post_f354 + trigger ./jgfs_atmos_post_manager:release_post354 + edit FHRGRP '199' + edit FHRLST 'f354' + edit FHR 'f354' + edit HR '354' + task jgfs_atmos_post_f357 + trigger ./jgfs_atmos_post_manager:release_post357 + edit FHRGRP '200' + edit FHRLST 'f357' + edit FHR 'f357' + edit HR '357' + task jgfs_atmos_post_f360 + trigger ./jgfs_atmos_post_manager:release_post360 + edit FHRGRP '201' + edit FHRLST 'f360' + edit FHR 'f360' + edit HR '360' + task jgfs_atmos_post_f363 + trigger ./jgfs_atmos_post_manager:release_post363 + edit FHRGRP '202' + edit FHRLST 'f363' + edit FHR 'f363' + edit HR '363' + task jgfs_atmos_post_f366 + trigger ./jgfs_atmos_post_manager:release_post366 + edit FHRGRP '203' + edit FHRLST 'f366' + edit FHR 'f366' + edit HR '366' + task jgfs_atmos_post_f369 + trigger ./jgfs_atmos_post_manager:release_post369 + edit FHRGRP '204' + edit FHRLST 'f369' + edit FHR 'f369' + edit HR '369' + task jgfs_atmos_post_f372 + trigger ./jgfs_atmos_post_manager:release_post372 + edit FHRGRP '205' + edit FHRLST 'f372' + edit FHR 'f372' + edit HR '372' + task jgfs_atmos_post_f375 + trigger ./jgfs_atmos_post_manager:release_post375 + edit FHRGRP '206' + edit FHRLST 'f375' + edit FHR 'f375' + edit HR '375' + task jgfs_atmos_post_f378 + trigger ./jgfs_atmos_post_manager:release_post378 + edit FHRGRP '207' + edit FHRLST 'f378' + edit FHR 'f378' + edit HR '378' + task jgfs_atmos_post_f381 + trigger ./jgfs_atmos_post_manager:release_post381 + edit FHRGRP '208' + edit FHRLST 'f381' + edit FHR 'f381' + edit HR '381' + task jgfs_atmos_post_f384 + trigger ./jgfs_atmos_post_manager:release_post384 + edit FHRGRP '209' + edit FHRLST 'f384' + edit FHR 'f384' + edit HR '384' + endfamily + family post_processing + family bufr_sounding + task jgfs_atmos_postsnd + trigger ../../post/jgfs_atmos_post_manager:release_post000 + endfamily + family bulletins + task jgfs_atmos_fbwind + trigger ../../post/jgfs_atmos_post_f006 == complete and ../../post/jgfs_atmos_post_f012 == complete and ../../post/jgfs_atmos_post_f024 == complete + endfamily + family awips_20km_1p0 + task jgfs_atmos_awips_f000 + trigger ../../post/jgfs_atmos_post_f000 == complete + edit FHRGRP '000' + edit FHRLST 'f000' + edit FCSTHR '000' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f003 + trigger ../../post/jgfs_atmos_post_f003 == complete + edit FHRGRP '003' + edit FHRLST 'f003' + edit FCSTHR '003' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f006 + trigger ../../post/jgfs_atmos_post_f006 == complete + edit FHRGRP '006' + edit FHRLST 'f006' + edit FCSTHR '006' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f009 + trigger ../../post/jgfs_atmos_post_f009 == complete + edit FHRGRP '009' + edit FHRLST 'f009' + edit FCSTHR '009' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f012 + trigger ../../post/jgfs_atmos_post_f012 == complete + edit FHRGRP '012' + edit FHRLST 'f012' + edit FCSTHR '012' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f015 + trigger ../../post/jgfs_atmos_post_f015 == complete + edit FHRGRP '015' + edit FHRLST 'f015' + edit FCSTHR '015' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f018 + trigger ../../post/jgfs_atmos_post_f018 == complete + edit FHRGRP '018' + edit FHRLST 'f018' + edit FCSTHR '018' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f021 + trigger ../../post/jgfs_atmos_post_f021 == complete + edit FHRGRP '021' + edit FHRLST 'f021' + edit FCSTHR '021' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f024 + trigger ../../post/jgfs_atmos_post_f024 == complete + edit FHRGRP '024' + edit FHRLST 'f024' + edit FCSTHR '024' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f027 + trigger ../../post/jgfs_atmos_post_f027 == complete + edit FHRGRP '027' + edit FHRLST 'f027' + edit FCSTHR '027' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f030 + trigger ../../post/jgfs_atmos_post_f030 == complete + edit FHRGRP '030' + edit FHRLST 'f030' + edit FCSTHR '030' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f033 + trigger ../../post/jgfs_atmos_post_f033 == complete + edit FHRGRP '033' + edit FHRLST 'f033' + edit FCSTHR '033' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f036 + trigger ../../post/jgfs_atmos_post_f036 == complete + edit FHRGRP '036' + edit FHRLST 'f036' + edit FCSTHR '036' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f039 + trigger ../../post/jgfs_atmos_post_f039 == complete + edit FHRGRP '039' + edit FHRLST 'f039' + edit FCSTHR '039' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f042 + trigger ../../post/jgfs_atmos_post_f042 == complete + edit FHRGRP '042' + edit FHRLST 'f042' + edit FCSTHR '042' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f045 + trigger ../../post/jgfs_atmos_post_f045 == complete + edit FHRGRP '045' + edit FHRLST 'f045' + edit FCSTHR '045' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f048 + trigger ../../post/jgfs_atmos_post_f048 == complete + edit FHRGRP '048' + edit FHRLST 'f048' + edit FCSTHR '048' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f051 + trigger ../../post/jgfs_atmos_post_f051 == complete + edit FHRGRP '051' + edit FHRLST 'f051' + edit FCSTHR '051' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f054 + trigger ../../post/jgfs_atmos_post_f054 == complete + edit FHRGRP '054' + edit FHRLST 'f054' + edit FCSTHR '054' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f057 + trigger ../../post/jgfs_atmos_post_f057 == complete + edit FHRGRP '057' + edit FHRLST 'f057' + edit FCSTHR '057' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f060 + trigger ../../post/jgfs_atmos_post_f060 == complete + edit FHRGRP '060' + edit FHRLST 'f060' + edit FCSTHR '060' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f063 + trigger ../../post/jgfs_atmos_post_f063 == complete + edit FHRGRP '063' + edit FHRLST 'f063' + edit FCSTHR '063' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f066 + trigger ../../post/jgfs_atmos_post_f066 == complete + edit FHRGRP '066' + edit FHRLST 'f066' + edit FCSTHR '066' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f069 + trigger ../../post/jgfs_atmos_post_f069 == complete + edit FHRGRP '069' + edit FHRLST 'f069' + edit FCSTHR '069' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f072 + trigger ../../post/jgfs_atmos_post_f072 == complete + edit FHRGRP '072' + edit FHRLST 'f072' + edit FCSTHR '072' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f075 + trigger ../../post/jgfs_atmos_post_f075 == complete + edit FHRGRP '075' + edit FHRLST 'f075' + edit FCSTHR '075' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f078 + trigger ../../post/jgfs_atmos_post_f078 == complete + edit FHRGRP '078' + edit FHRLST 'f078' + edit FCSTHR '078' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f081 + trigger ../../post/jgfs_atmos_post_f081 == complete + edit FHRGRP '081' + edit FHRLST 'f081' + edit FCSTHR '081' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f084 + trigger ../../post/jgfs_atmos_post_f084 == complete + edit FHRGRP '084' + edit FHRLST 'f084' + edit FCSTHR '084' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f090 + trigger ../../post/jgfs_atmos_post_f090 == complete + edit FHRGRP '090' + edit FHRLST 'f090' + edit FCSTHR '090' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f096 + trigger ../../post/jgfs_atmos_post_f096 == complete + edit FHRGRP '096' + edit FHRLST 'f096' + edit FCSTHR '096' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f102 + trigger ../../post/jgfs_atmos_post_f102 == complete + edit FHRGRP '102' + edit FHRLST 'f102' + edit FCSTHR '102' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f108 + trigger ../../post/jgfs_atmos_post_f108 == complete + edit FHRGRP '108' + edit FHRLST 'f108' + edit FCSTHR '108' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f114 + trigger ../../post/jgfs_atmos_post_f114 == complete + edit FHRGRP '114' + edit FHRLST 'f114' + edit FCSTHR '114' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f120 + trigger ../../post/jgfs_atmos_post_f120 == complete + edit FHRGRP '120' + edit FHRLST 'f120' + edit FCSTHR '120' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f126 + trigger ../../post/jgfs_atmos_post_f126 == complete + edit FHRGRP '126' + edit FHRLST 'f126' + edit FCSTHR '126' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f132 + trigger ../../post/jgfs_atmos_post_f132 == complete + edit FHRGRP '132' + edit FHRLST 'f132' + edit FCSTHR '132' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f138 + trigger ../../post/jgfs_atmos_post_f138 == complete + edit FHRGRP '138' + edit FHRLST 'f138' + edit FCSTHR '138' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f144 + trigger ../../post/jgfs_atmos_post_f144 == complete + edit FHRGRP '144' + edit FHRLST 'f144' + edit FCSTHR '144' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f150 + trigger ../../post/jgfs_atmos_post_f150 == complete + edit FHRGRP '150' + edit FHRLST 'f150' + edit FCSTHR '150' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f156 + trigger ../../post/jgfs_atmos_post_f156 == complete + edit FHRGRP '156' + edit FHRLST 'f156' + edit FCSTHR '156' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f162 + trigger ../../post/jgfs_atmos_post_f162 == complete + edit FHRGRP '162' + edit FHRLST 'f162' + edit FCSTHR '162' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f168 + trigger ../../post/jgfs_atmos_post_f168 == complete + edit FHRGRP '168' + edit FHRLST 'f168' + edit FCSTHR '168' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f174 + trigger ../../post/jgfs_atmos_post_f174 == complete + edit FHRGRP '174' + edit FHRLST 'f174' + edit FCSTHR '174' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f180 + trigger ../../post/jgfs_atmos_post_f180 == complete + edit FHRGRP '180' + edit FHRLST 'f180' + edit FCSTHR '180' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f186 + trigger ../../post/jgfs_atmos_post_f186 == complete + edit FHRGRP '186' + edit FHRLST 'f186' + edit FCSTHR '186' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f192 + trigger ../../post/jgfs_atmos_post_f192 == complete + edit FHRGRP '192' + edit FHRLST 'f192' + edit FCSTHR '192' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f198 + trigger ../../post/jgfs_atmos_post_f198 == complete + edit FHRGRP '198' + edit FHRLST 'f198' + edit FCSTHR '198' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f204 + trigger ../../post/jgfs_atmos_post_f204 == complete + edit FHRGRP '204' + edit FHRLST 'f204' + edit FCSTHR '204' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f210 + trigger ../../post/jgfs_atmos_post_f210 == complete + edit FHRGRP '210' + edit FHRLST 'f210' + edit FCSTHR '210' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f216 + trigger ../../post/jgfs_atmos_post_f216 == complete + edit FHRGRP '216' + edit FHRLST 'f216' + edit FCSTHR '216' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f222 + trigger ../../post/jgfs_atmos_post_f222 == complete + edit FHRGRP '222' + edit FHRLST 'f222' + edit FCSTHR '222' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f228 + trigger ../../post/jgfs_atmos_post_f228 == complete + edit FHRGRP '228' + edit FHRLST 'f228' + edit FCSTHR '228' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f234 + trigger ../../post/jgfs_atmos_post_f234 == complete + edit FHRGRP '234' + edit FHRLST 'f234' + edit FCSTHR '234' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f240 + trigger ../../post/jgfs_atmos_post_f240 == complete + edit FHRGRP '240' + edit FHRLST 'f240' + edit FCSTHR '240' + edit TRDRUN 'YES' + endfamily + family awips_g2 + task jgfs_atmos_awips_g2_f000 + trigger ../../post/jgfs_atmos_post_f000 == complete + edit FHRGRP '000' + edit FHRLST 'f000' + edit FCSTHR '000' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f006 + trigger ../../post/jgfs_atmos_post_f006 == complete + edit FHRGRP '006' + edit FHRLST 'f006' + edit FCSTHR '006' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f012 + trigger ../../post/jgfs_atmos_post_f012 == complete + edit FHRGRP '012' + edit FHRLST 'f012' + edit FCSTHR '012' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f018 + trigger ../../post/jgfs_atmos_post_f018 == complete + edit FHRGRP '018' + edit FHRLST 'f018' + edit FCSTHR '018' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f024 + trigger ../../post/jgfs_atmos_post_f024 == complete + edit FHRGRP '024' + edit FHRLST 'f024' + edit FCSTHR '024' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f030 + trigger ../../post/jgfs_atmos_post_f030 == complete + edit FHRGRP '030' + edit FHRLST 'f030' + edit FCSTHR '030' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f036 + trigger ../../post/jgfs_atmos_post_f036 == complete + edit FHRGRP '036' + edit FHRLST 'f036' + edit FCSTHR '036' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f042 + trigger ../../post/jgfs_atmos_post_f042 == complete + edit FHRGRP '042' + edit FHRLST 'f042' + edit FCSTHR '042' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f048 + trigger ../../post/jgfs_atmos_post_f048 == complete + edit FHRGRP '048' + edit FHRLST 'f048' + edit FCSTHR '048' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f054 + trigger ../../post/jgfs_atmos_post_f054 == complete + edit FHRGRP '054' + edit FHRLST 'f054' + edit FCSTHR '054' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f060 + trigger ../../post/jgfs_atmos_post_f060 == complete + edit FHRGRP '060' + edit FHRLST 'f060' + edit FCSTHR '060' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f066 + trigger ../../post/jgfs_atmos_post_f066 == complete + edit FHRGRP '066' + edit FHRLST 'f066' + edit FCSTHR '066' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f072 + trigger ../../post/jgfs_atmos_post_f072 == complete + edit FHRGRP '072' + edit FHRLST 'f072' + edit FCSTHR '072' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f078 + trigger ../../post/jgfs_atmos_post_f078 == complete + edit FHRGRP '078' + edit FHRLST 'f078' + edit FCSTHR '078' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f084 + trigger ../../post/jgfs_atmos_post_f084 == complete + edit FHRGRP '084' + edit FHRLST 'f084' + edit FCSTHR '084' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f090 + trigger ../../post/jgfs_atmos_post_f090 == complete + edit FHRGRP '090' + edit FHRLST 'f090' + edit FCSTHR '090' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f096 + trigger ../../post/jgfs_atmos_post_f096 == complete + edit FHRGRP '096' + edit FHRLST 'f096' + edit FCSTHR '096' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f102 + trigger ../../post/jgfs_atmos_post_f102 == complete + edit FHRGRP '102' + edit FHRLST 'f102' + edit FCSTHR '102' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f108 + trigger ../../post/jgfs_atmos_post_f108 == complete + edit FHRGRP '108' + edit FHRLST 'f108' + edit FCSTHR '108' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f114 + trigger ../../post/jgfs_atmos_post_f114 == complete + edit FHRGRP '114' + edit FHRLST 'f114' + edit FCSTHR '114' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f120 + trigger ../../post/jgfs_atmos_post_f120 == complete + edit FHRGRP '120' + edit FHRLST 'f120' + edit FCSTHR '120' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f126 + trigger ../../post/jgfs_atmos_post_f126 == complete + edit FHRGRP '126' + edit FHRLST 'f126' + edit FCSTHR '126' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f132 + trigger ../../post/jgfs_atmos_post_f132 == complete + edit FHRGRP '132' + edit FHRLST 'f132' + edit FCSTHR '132' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f138 + trigger ../../post/jgfs_atmos_post_f138 == complete + edit FHRGRP '138' + edit FHRLST 'f138' + edit FCSTHR '138' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f144 + trigger ../../post/jgfs_atmos_post_f144 == complete + edit FHRGRP '144' + edit FHRLST 'f144' + edit FCSTHR '144' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f150 + trigger ../../post/jgfs_atmos_post_f150 == complete + edit FHRGRP '150' + edit FHRLST 'f150' + edit FCSTHR '150' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f156 + trigger ../../post/jgfs_atmos_post_f156 == complete + edit FHRGRP '156' + edit FHRLST 'f156' + edit FCSTHR '156' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f162 + trigger ../../post/jgfs_atmos_post_f162 == complete + edit FHRGRP '162' + edit FHRLST 'f162' + edit FCSTHR '162' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f168 + trigger ../../post/jgfs_atmos_post_f168 == complete + edit FHRGRP '168' + edit FHRLST 'f168' + edit FCSTHR '168' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f174 + trigger ../../post/jgfs_atmos_post_f174 == complete + edit FHRGRP '174' + edit FHRLST 'f174' + edit FCSTHR '174' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f180 + trigger ../../post/jgfs_atmos_post_f180 == complete + edit FHRGRP '180' + edit FHRLST 'f180' + edit FCSTHR '180' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f186 + trigger ../../post/jgfs_atmos_post_f186 == complete + edit FHRGRP '186' + edit FHRLST 'f186' + edit FCSTHR '186' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f192 + trigger ../../post/jgfs_atmos_post_f192 == complete + edit FHRGRP '192' + edit FHRLST 'f192' + edit FCSTHR '192' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f198 + trigger ../../post/jgfs_atmos_post_f198 == complete + edit FHRGRP '198' + edit FHRLST 'f198' + edit FCSTHR '198' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f204 + trigger ../../post/jgfs_atmos_post_f204 == complete + edit FHRGRP '204' + edit FHRLST 'f204' + edit FCSTHR '204' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f210 + trigger ../../post/jgfs_atmos_post_f210 == complete + edit FHRGRP '210' + edit FHRLST 'f210' + edit FCSTHR '210' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f216 + trigger ../../post/jgfs_atmos_post_f216 == complete + edit FHRGRP '216' + edit FHRLST 'f216' + edit FCSTHR '216' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f222 + trigger ../../post/jgfs_atmos_post_f222 == complete + edit FHRGRP '222' + edit FHRLST 'f222' + edit FCSTHR '222' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f228 + trigger ../../post/jgfs_atmos_post_f228 == complete + edit FHRGRP '228' + edit FHRLST 'f228' + edit FCSTHR '228' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f234 + trigger ../../post/jgfs_atmos_post_f234 == complete + edit FHRGRP '234' + edit FHRLST 'f234' + edit FCSTHR '234' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f240 + trigger ../../post/jgfs_atmos_post_f240 == complete + edit FHRGRP '240' + edit FHRLST 'f240' + edit FCSTHR '240' + edit TRDRUN 'YES' + endfamily + endfamily + family gempak + task jgfs_atmos_gempak + trigger ../../atmos/analysis/jgfs_atmos_analysis == complete + task jgfs_atmos_gempak_meta + trigger ../../atmos/analysis/jgfs_atmos_analysis == complete + task jgfs_atmos_gempak_ncdc_upapgif + trigger ./jgfs_atmos_gempak == active or ./jgfs_atmos_gempak == complete + task jgfs_atmos_npoess_pgrb2_0p5deg + trigger ../post/jgfs_atmos_post_anl eq active or ../post/jgfs_atmos_post_anl == complete + task jgfs_atmos_pgrb2_spec_gempak + trigger ./jgfs_atmos_npoess_pgrb2_0p5deg == complete + endfamily + family verf + task jgfs_atmos_vminmon + trigger ../analysis/jgfs_atmos_analysis == complete + endfamily + endfamily + family wave + family init + task jgfs_wave_init + trigger /prod/primary/00/obsproc/v1.0/gfs/atmos/prep/jobsproc_gfs_atmos_prep == complete + endfamily + family prep + task jgfs_wave_prep + trigger ../init/jgfs_wave_init == complete + endfamily + family post + task jgfs_wave_postsbs + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post000 + task jgfs_wave_postpnt + trigger ../../jgfs_forecast == complete + task jgfs_wave_post_bndpnt + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post180 + task jgfs_wave_post_bndpntbll + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post180 + task jgfs_wave_prdgen_gridded + trigger ./jgfs_wave_postsbs == active or ./jgfs_wave_postsbs == complete + task jgfs_wave_prdgen_bulls + trigger ./jgfs_wave_postpnt == complete and ./jgfs_wave_postsbs == complete + endfamily + family gempak + task jgfs_wave_gempak + trigger ../post/jgfs_wave_postsbs == active or ../post/jgfs_wave_postsbs == complete + endfamily + endfamily + task jgfs_forecast + trigger ./atmos/analysis/jgfs_atmos_analysis:release_fcst and ./wave/prep/jgfs_wave_prep == complete + endfamily + family gdas + edit RUN 'gdas' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/gdas' + family atmos + family obsproc + family dump + task jgdas_atmos_tropcy_qc_reloc + trigger :TIME >= 0545 and :TIME < 1145 + endfamily + family prep + task jgdas_atmos_emcsfc_sfc_prep + trigger /prod/primary/00/obsproc/v1.0/gdas/atmos/dump/jobsproc_gdas_atmos_dump:release_sfcprep + endfamily + endfamily + family analysis + task jgdas_atmos_analysis + trigger /prod/primary/00/obsproc/v1.0/gdas/atmos/prep/jobsproc_gdas_atmos_prep == complete and ../obsproc/prep/jgdas_atmos_emcsfc_sfc_prep == complete + event 1 release_fcst + task jgdas_atmos_analysis_calc + trigger ./jgdas_atmos_analysis == complete + task jgdas_atmos_analysis_diag + trigger ./jgdas_atmos_analysis == complete + endfamily + family post + task jgdas_atmos_post_manager + trigger ../../jgdas_forecast == active + event 1 release_postanl + event 2 release_post000 + event 3 release_post001 + event 4 release_post002 + event 5 release_post003 + event 6 release_post004 + event 7 release_post005 + event 8 release_post006 + event 9 release_post007 + event 10 release_post008 + event 11 release_post009 + task jgdas_atmos_post_anl + trigger ./jgdas_atmos_post_manager:release_postanl + edit FHRGRP '000' + edit FHRLST 'anl' + edit HR 'anl' + edit FHR 'anl' + task jgdas_atmos_post_f000 + trigger ./jgdas_atmos_post_manager:release_post000 + edit FHR 'f000' + edit HR '000' + edit FHRGRP '001' + edit FHRLST 'f000' + task jgdas_atmos_post_f001 + trigger ./jgdas_atmos_post_manager:release_post001 + edit FHR 'f001' + edit HR '001' + edit FHRGRP '002' + edit FHRLST 'f001' + task jgdas_atmos_post_f002 + trigger ./jgdas_atmos_post_manager:release_post002 + edit FHR 'f002' + edit HR '002' + edit FHRGRP '003' + edit FHRLST 'f002' + task jgdas_atmos_post_f003 + trigger ./jgdas_atmos_post_manager:release_post003 + edit FHR 'f003' + edit HR '003' + edit FHRGRP '004' + edit FHRLST 'f003' + task jgdas_atmos_post_f004 + trigger ./jgdas_atmos_post_manager:release_post004 + edit FHR 'f004' + edit HR '004' + edit FHRGRP '005' + edit FHRLST 'f004' + task jgdas_atmos_post_f005 + trigger ./jgdas_atmos_post_manager:release_post005 + edit FHR 'f005' + edit HR '005' + edit FHRGRP '006' + edit FHRLST 'f005' + task jgdas_atmos_post_f006 + trigger ./jgdas_atmos_post_manager:release_post006 + edit FHR 'f006' + edit HR '006' + edit FHRGRP '007' + edit FHRLST 'f006' + task jgdas_atmos_post_f007 + trigger ./jgdas_atmos_post_manager:release_post007 + edit FHR 'f007' + edit HR '007' + edit FHRGRP '008' + edit FHRLST 'f007' + task jgdas_atmos_post_f008 + trigger ./jgdas_atmos_post_manager:release_post008 + edit FHR 'f008' + edit HR '008' + edit FHRGRP '009' + edit FHRLST 'f008' + task jgdas_atmos_post_f009 + trigger ./jgdas_atmos_post_manager:release_post009 + edit FHR 'f009' + edit HR '009' + edit FHRGRP '010' + edit FHRLST 'f009' + endfamily + family post_processing + task jgdas_atmos_chgres_forenkf + trigger ../../jgdas_forecast == complete and ../../../enkfgdas/forecast == complete + endfamily + family gempak + task jgdas_atmos_gempak + trigger ../../jgdas_forecast == complete + task jgdas_atmos_gempak_meta_ncdc + trigger ./jgdas_atmos_gempak == complete + endfamily + family verf + task jgdas_atmos_vminmon + trigger ../analysis/jgdas_atmos_analysis == complete + task jgdas_atmos_verfrad + trigger ../analysis/jgdas_atmos_analysis_diag == complete + task jgdas_atmos_verfozn + trigger ../analysis/jgdas_atmos_analysis_diag == complete + endfamily + endfamily + family wave + family init + task jgdas_wave_init + trigger /prod/primary/00/obsproc/v1.0/gdas/atmos/prep/jobsproc_gdas_atmos_prep == complete + endfamily + family prep + task jgdas_wave_prep + trigger ../init/jgdas_wave_init == complete + endfamily + family post + task jgdas_wave_postsbs + trigger ../../atmos/post/jgdas_atmos_post_manager:release_post000 + task jgdas_wave_postpnt + trigger ../../jgdas_forecast == complete + endfamily + endfamily + task jgdas_forecast + trigger ./atmos/analysis/jgdas_atmos_analysis:release_fcst and ./wave/prep/jgdas_wave_prep == complete + endfamily + family enkfgdas + edit RUN 'gdas' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas' + family analysis + family create + task jenkfgdas_select_obs + trigger /prod/primary/00/obsproc/v1.0/gdas/atmos/prep/jobsproc_gdas_atmos_prep == complete and /prod/primary/18/gfs/v16.2/enkfgdas/post == complete + task jenkfgdas_diag + trigger ./jenkfgdas_select_obs == complete + task jenkfgdas_update + trigger ./jenkfgdas_diag == complete + endfamily + family recenter + family ecen + trigger ../create/jenkfgdas_update == complete and ../../../gdas/atmos/analysis/jgdas_atmos_analysis_calc == complete and /prod/primary/18/gfs/v16.2/gdas/atmos/post_processing/jgdas_atmos_chgres_forenkf == complete + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas/analysis/recenter/ecen' + family grp1 + edit FHRGRP '003' + task jenkfgdas_ecen + endfamily + family grp2 + edit FHRGRP '006' + task jenkfgdas_ecen + endfamily + family grp3 + edit FHRGRP '009' + task jenkfgdas_ecen + endfamily + endfamily + task jenkfgdas_sfc + trigger ../create/jenkfgdas_update == complete and ../../../gdas/atmos/analysis/jgdas_atmos_analysis_calc == complete + endfamily + endfamily + family forecast + trigger ./analysis/recenter/ecen == complete and ./analysis/recenter/jenkfgdas_sfc == complete + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas/forecast' + family grp1 + edit ENSGRP '01' + task jenkfgdas_fcst + endfamily + family grp2 + edit ENSGRP '02' + task jenkfgdas_fcst + endfamily + family grp3 + edit ENSGRP '03' + task jenkfgdas_fcst + endfamily + family grp4 + edit ENSGRP '04' + task jenkfgdas_fcst + endfamily + family grp5 + edit ENSGRP '05' + task jenkfgdas_fcst + endfamily + family grp6 + edit ENSGRP '06' + task jenkfgdas_fcst + endfamily + family grp7 + edit ENSGRP '07' + task jenkfgdas_fcst + endfamily + family grp8 + edit ENSGRP '08' + task jenkfgdas_fcst + endfamily + family grp9 + edit ENSGRP '09' + task jenkfgdas_fcst + endfamily + family grp10 + edit ENSGRP '10' + task jenkfgdas_fcst + endfamily + family grp11 + edit ENSGRP '11' + task jenkfgdas_fcst + endfamily + family grp12 + edit ENSGRP '12' + task jenkfgdas_fcst + endfamily + family grp13 + edit ENSGRP '13' + task jenkfgdas_fcst + endfamily + family grp14 + edit ENSGRP '14' + task jenkfgdas_fcst + endfamily + family grp15 + edit ENSGRP '15' + task jenkfgdas_fcst + endfamily + family grp16 + edit ENSGRP '16' + task jenkfgdas_fcst + endfamily + family grp17 + edit ENSGRP '17' + task jenkfgdas_fcst + endfamily + family grp18 + edit ENSGRP '18' + task jenkfgdas_fcst + endfamily + family grp19 + edit ENSGRP '19' + task jenkfgdas_fcst + endfamily + family grp20 + edit ENSGRP '20' + task jenkfgdas_fcst + endfamily + family grp21 + edit ENSGRP '21' + task jenkfgdas_fcst + endfamily + family grp22 + edit ENSGRP '22' + task jenkfgdas_fcst + endfamily + family grp23 + edit ENSGRP '23' + task jenkfgdas_fcst + endfamily + family grp24 + edit ENSGRP '24' + task jenkfgdas_fcst + endfamily + family grp25 + edit ENSGRP '25' + task jenkfgdas_fcst + endfamily + family grp26 + edit ENSGRP '26' + task jenkfgdas_fcst + endfamily + family grp27 + edit ENSGRP '27' + task jenkfgdas_fcst + endfamily + family grp28 + edit ENSGRP '28' + task jenkfgdas_fcst + endfamily + family grp29 + edit ENSGRP '29' + task jenkfgdas_fcst + endfamily + family grp30 + edit ENSGRP '30' + task jenkfgdas_fcst + endfamily + family grp31 + edit ENSGRP '31' + task jenkfgdas_fcst + endfamily + family grp32 + edit ENSGRP '32' + task jenkfgdas_fcst + endfamily + family grp33 + edit ENSGRP '33' + task jenkfgdas_fcst + endfamily + family grp34 + edit ENSGRP '34' + task jenkfgdas_fcst + endfamily + family grp35 + edit ENSGRP '35' + task jenkfgdas_fcst + endfamily + family grp36 + edit ENSGRP '36' + task jenkfgdas_fcst + endfamily + family grp37 + edit ENSGRP '37' + task jenkfgdas_fcst + endfamily + family grp38 + edit ENSGRP '38' + task jenkfgdas_fcst + endfamily + family grp39 + edit ENSGRP '39' + task jenkfgdas_fcst + endfamily + family grp40 + edit ENSGRP '40' + task jenkfgdas_fcst + endfamily + endfamily + family post + trigger ./forecast == complete + task jenkfgdas_post_f003 + edit FHMIN_EPOS '003' + edit FHMAX_EPOS '003' + edit FHOUT_EPOS '003' + task jenkfgdas_post_f004 + edit FHMIN_EPOS '004' + edit FHMAX_EPOS '004' + edit FHOUT_EPOS '004' + task jenkfgdas_post_f005 + edit FHMIN_EPOS '005' + edit FHMAX_EPOS '005' + edit FHOUT_EPOS '005' + task jenkfgdas_post_f006 + edit FHMIN_EPOS '006' + edit FHMAX_EPOS '006' + edit FHOUT_EPOS '006' + task jenkfgdas_post_f007 + edit FHMIN_EPOS '007' + edit FHMAX_EPOS '007' + edit FHOUT_EPOS '007' + task jenkfgdas_post_f008 + edit FHMIN_EPOS '008' + edit FHMAX_EPOS '008' + edit FHOUT_EPOS '008' + task jenkfgdas_post_f009 + edit FHMIN_EPOS '009' + edit FHMAX_EPOS '009' + edit FHOUT_EPOS '009' + endfamily + endfamily + endfamily + diff --git a/ecf/defs/gfs_06.def b/ecf/defs/gfs_06.def new file mode 100644 index 0000000000..4772e29267 --- /dev/null +++ b/ecf/defs/gfs_06.def @@ -0,0 +1,2508 @@ + family v16.2 + family gfs + edit RUN 'gfs' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/gfs' + family atmos + family obsproc + family dump + task jgfs_atmos_tropcy_qc_reloc + trigger :TIME >= 0841 and :TIME < 1441 + event 1 jtwc_bull_email + endfamily + family prep + task jgfs_atmos_emcsfc_sfc_prep + trigger /prod/primary/06/obsproc/v1.0/gfs/atmos/dump/jobsproc_gfs_atmos_dump:release_sfcprep + endfamily + endfamily + family analysis + task jgfs_atmos_analysis + trigger /prod/primary/06/obsproc/v1.0/gfs/atmos/prep/jobsproc_gfs_atmos_prep == complete and ../obsproc/prep/jgfs_atmos_emcsfc_sfc_prep == complete + event 1 release_fcst + task jgfs_atmos_analysis_calc + trigger ./jgfs_atmos_analysis == complete + endfamily + family post + task jgfs_atmos_post_manager + trigger ../analysis/jgfs_atmos_analysis == complete + event 1 release_postanl + event 2 release_post000 + event 3 release_post001 + event 4 release_post002 + event 5 release_post003 + event 6 release_post004 + event 7 release_post005 + event 8 release_post006 + event 9 release_post007 + event 10 release_post008 + event 11 release_post009 + event 12 release_post010 + event 13 release_post011 + event 14 release_post012 + event 15 release_post013 + event 16 release_post014 + event 17 release_post015 + event 18 release_post016 + event 19 release_post017 + event 20 release_post018 + event 21 release_post019 + event 22 release_post020 + event 23 release_post021 + event 24 release_post022 + event 25 release_post023 + event 26 release_post024 + event 27 release_post025 + event 28 release_post026 + event 29 release_post027 + event 30 release_post028 + event 31 release_post029 + event 32 release_post030 + event 33 release_post031 + event 34 release_post032 + event 35 release_post033 + event 36 release_post034 + event 37 release_post035 + event 38 release_post036 + event 39 release_post037 + event 40 release_post038 + event 41 release_post039 + event 42 release_post040 + event 43 release_post041 + event 44 release_post042 + event 45 release_post043 + event 46 release_post044 + event 47 release_post045 + event 48 release_post046 + event 49 release_post047 + event 50 release_post048 + event 51 release_post049 + event 52 release_post050 + event 53 release_post051 + event 54 release_post052 + event 55 release_post053 + event 56 release_post054 + event 57 release_post055 + event 58 release_post056 + event 59 release_post057 + event 60 release_post058 + event 61 release_post059 + event 62 release_post060 + event 63 release_post061 + event 64 release_post062 + event 65 release_post063 + event 66 release_post064 + event 67 release_post065 + event 68 release_post066 + event 69 release_post067 + event 70 release_post068 + event 71 release_post069 + event 72 release_post070 + event 73 release_post071 + event 74 release_post072 + event 75 release_post073 + event 76 release_post074 + event 77 release_post075 + event 78 release_post076 + event 79 release_post077 + event 80 release_post078 + event 81 release_post079 + event 82 release_post080 + event 83 release_post081 + event 84 release_post082 + event 85 release_post083 + event 86 release_post084 + event 87 release_post085 + event 88 release_post086 + event 89 release_post087 + event 90 release_post088 + event 91 release_post089 + event 92 release_post090 + event 93 release_post091 + event 94 release_post092 + event 95 release_post093 + event 96 release_post094 + event 97 release_post095 + event 98 release_post096 + event 99 release_post097 + event 100 release_post098 + event 101 release_post099 + event 102 release_post100 + event 103 release_post101 + event 104 release_post102 + event 105 release_post103 + event 106 release_post104 + event 107 release_post105 + event 108 release_post106 + event 109 release_post107 + event 110 release_post108 + event 111 release_post109 + event 112 release_post110 + event 113 release_post111 + event 114 release_post112 + event 115 release_post113 + event 116 release_post114 + event 117 release_post115 + event 118 release_post116 + event 119 release_post117 + event 120 release_post118 + event 121 release_post119 + event 122 release_post120 + event 123 release_post123 + event 124 release_post126 + event 125 release_post129 + event 126 release_post132 + event 127 release_post135 + event 128 release_post138 + event 129 release_post141 + event 130 release_post144 + event 131 release_post147 + event 132 release_post150 + event 133 release_post153 + event 134 release_post156 + event 135 release_post159 + event 136 release_post162 + event 137 release_post165 + event 138 release_post168 + event 139 release_post171 + event 140 release_post174 + event 141 release_post177 + event 142 release_post180 + event 143 release_post183 + event 144 release_post186 + event 145 release_post189 + event 146 release_post192 + event 147 release_post195 + event 148 release_post198 + event 149 release_post201 + event 150 release_post204 + event 151 release_post207 + event 152 release_post210 + event 153 release_post213 + event 154 release_post216 + event 155 release_post219 + event 156 release_post222 + event 157 release_post225 + event 158 release_post228 + event 159 release_post231 + event 160 release_post234 + event 161 release_post237 + event 162 release_post240 + event 163 release_post243 + event 164 release_post246 + event 165 release_post249 + event 166 release_post252 + event 167 release_post255 + event 168 release_post258 + event 169 release_post261 + event 170 release_post264 + event 171 release_post267 + event 172 release_post270 + event 173 release_post273 + event 174 release_post276 + event 175 release_post279 + event 176 release_post282 + event 177 release_post285 + event 178 release_post288 + event 179 release_post291 + event 180 release_post294 + event 181 release_post297 + event 182 release_post300 + event 183 release_post303 + event 184 release_post306 + event 185 release_post309 + event 186 release_post312 + event 187 release_post315 + event 188 release_post318 + event 189 release_post321 + event 190 release_post324 + event 191 release_post327 + event 192 release_post330 + event 193 release_post333 + event 194 release_post336 + event 195 release_post339 + event 196 release_post342 + event 197 release_post345 + event 198 release_post348 + event 199 release_post351 + event 200 release_post354 + event 201 release_post357 + event 202 release_post360 + event 203 release_post363 + event 204 release_post366 + event 205 release_post369 + event 206 release_post372 + event 207 release_post375 + event 208 release_post378 + event 209 release_post381 + event 210 release_post384 + task jgfs_atmos_post_anl + trigger ./jgfs_atmos_post_manager:release_postanl + edit FHRGRP '000' + edit FHRLST 'anl' + edit HR 'anl' + edit FHR 'anl' + task jgfs_atmos_post_f000 + trigger ./jgfs_atmos_post_manager:release_post000 + edit FHRGRP '001' + edit FHRLST 'f000' + edit FHR 'f000' + edit HR '000' + task jgfs_atmos_post_f001 + trigger ./jgfs_atmos_post_manager:release_post001 + edit FHRGRP '002' + edit FHRLST 'f001' + edit FHR 'f001' + edit HR '001' + task jgfs_atmos_post_f002 + trigger ./jgfs_atmos_post_manager:release_post002 + edit FHRGRP '003' + edit FHRLST 'f002' + edit FHR 'f002' + edit HR '002' + task jgfs_atmos_post_f003 + trigger ./jgfs_atmos_post_manager:release_post003 + edit FHRGRP '004' + edit FHRLST 'f003' + edit FHR 'f003' + edit HR '003' + task jgfs_atmos_post_f004 + trigger ./jgfs_atmos_post_manager:release_post004 + edit FHRGRP '005' + edit FHRLST 'f004' + edit FHR 'f004' + edit HR '004' + task jgfs_atmos_post_f005 + trigger ./jgfs_atmos_post_manager:release_post005 + edit FHRGRP '006' + edit FHRLST 'f005' + edit FHR 'f005' + edit HR '005' + task jgfs_atmos_post_f006 + trigger ./jgfs_atmos_post_manager:release_post006 + edit FHRGRP '007' + edit FHRLST 'f006' + edit FHR 'f006' + edit HR '006' + task jgfs_atmos_post_f007 + trigger ./jgfs_atmos_post_manager:release_post007 + edit FHRGRP '008' + edit FHRLST 'f007' + edit FHR 'f007' + edit HR '007' + task jgfs_atmos_post_f008 + trigger ./jgfs_atmos_post_manager:release_post008 + edit FHRGRP '009' + edit FHRLST 'f008' + edit FHR 'f008' + edit HR '008' + task jgfs_atmos_post_f009 + trigger ./jgfs_atmos_post_manager:release_post009 + edit FHRGRP '010' + edit FHRLST 'f009' + edit FHR 'f009' + edit HR '009' + task jgfs_atmos_post_f010 + trigger ./jgfs_atmos_post_manager:release_post010 + edit FHRGRP '011' + edit FHRLST 'f010' + edit FHR 'f010' + edit HR '010' + task jgfs_atmos_post_f011 + trigger ./jgfs_atmos_post_manager:release_post011 + edit FHRGRP '012' + edit FHRLST 'f011' + edit FHR 'f011' + edit HR '011' + task jgfs_atmos_post_f012 + trigger ./jgfs_atmos_post_manager:release_post012 + edit FHRGRP '013' + edit FHRLST 'f012' + edit FHR 'f012' + edit HR '012' + task jgfs_atmos_post_f013 + trigger ./jgfs_atmos_post_manager:release_post013 + edit FHRGRP '014' + edit FHRLST 'f013' + edit FHR 'f013' + edit HR '013' + task jgfs_atmos_post_f014 + trigger ./jgfs_atmos_post_manager:release_post014 + edit FHRGRP '015' + edit FHRLST 'f014' + edit FHR 'f014' + edit HR '014' + task jgfs_atmos_post_f015 + trigger ./jgfs_atmos_post_manager:release_post015 + edit FHRGRP '016' + edit FHRLST 'f015' + edit FHR 'f015' + edit HR '015' + task jgfs_atmos_post_f016 + trigger ./jgfs_atmos_post_manager:release_post016 + edit FHRGRP '017' + edit FHRLST 'f016' + edit FHR 'f016' + edit HR '016' + task jgfs_atmos_post_f017 + trigger ./jgfs_atmos_post_manager:release_post017 + edit FHRGRP '018' + edit FHRLST 'f017' + edit FHR 'f017' + edit HR '017' + task jgfs_atmos_post_f018 + trigger ./jgfs_atmos_post_manager:release_post018 + edit FHRGRP '019' + edit FHRLST 'f018' + edit FHR 'f018' + edit HR '018' + task jgfs_atmos_post_f019 + trigger ./jgfs_atmos_post_manager:release_post019 + edit FHRGRP '020' + edit FHRLST 'f019' + edit FHR 'f019' + edit HR '019' + task jgfs_atmos_post_f020 + trigger ./jgfs_atmos_post_manager:release_post020 + edit FHRGRP '021' + edit FHRLST 'f020' + edit FHR 'f020' + edit HR '020' + task jgfs_atmos_post_f021 + trigger ./jgfs_atmos_post_manager:release_post021 + edit FHRGRP '022' + edit FHRLST 'f021' + edit FHR 'f021' + edit HR '021' + task jgfs_atmos_post_f022 + trigger ./jgfs_atmos_post_manager:release_post022 + edit FHRGRP '023' + edit FHRLST 'f022' + edit FHR 'f022' + edit HR '022' + task jgfs_atmos_post_f023 + trigger ./jgfs_atmos_post_manager:release_post023 + edit FHRGRP '024' + edit FHRLST 'f023' + edit FHR 'f023' + edit HR '023' + task jgfs_atmos_post_f024 + trigger ./jgfs_atmos_post_manager:release_post024 + edit FHRGRP '025' + edit FHRLST 'f024' + edit FHR 'f024' + edit HR '024' + task jgfs_atmos_post_f025 + trigger ./jgfs_atmos_post_manager:release_post025 + edit FHRGRP '026' + edit FHRLST 'f025' + edit FHR 'f025' + edit HR '025' + task jgfs_atmos_post_f026 + trigger ./jgfs_atmos_post_manager:release_post026 + edit FHRGRP '027' + edit FHRLST 'f026' + edit FHR 'f026' + edit HR '026' + task jgfs_atmos_post_f027 + trigger ./jgfs_atmos_post_manager:release_post027 + edit FHRGRP '028' + edit FHRLST 'f027' + edit FHR 'f027' + edit HR '027' + task jgfs_atmos_post_f028 + trigger ./jgfs_atmos_post_manager:release_post028 + edit FHRGRP '029' + edit FHRLST 'f028' + edit FHR 'f028' + edit HR '028' + task jgfs_atmos_post_f029 + trigger ./jgfs_atmos_post_manager:release_post029 + edit FHRGRP '030' + edit FHRLST 'f029' + edit FHR 'f029' + edit HR '029' + task jgfs_atmos_post_f030 + trigger ./jgfs_atmos_post_manager:release_post030 + edit FHRGRP '031' + edit FHRLST 'f030' + edit FHR 'f030' + edit HR '030' + task jgfs_atmos_post_f031 + trigger ./jgfs_atmos_post_manager:release_post031 + edit FHRGRP '032' + edit FHRLST 'f031' + edit FHR 'f031' + edit HR '031' + task jgfs_atmos_post_f032 + trigger ./jgfs_atmos_post_manager:release_post032 + edit FHRGRP '033' + edit FHRLST 'f032' + edit FHR 'f032' + edit HR '032' + task jgfs_atmos_post_f033 + trigger ./jgfs_atmos_post_manager:release_post033 + edit FHRGRP '034' + edit FHRLST 'f033' + edit FHR 'f033' + edit HR '033' + task jgfs_atmos_post_f034 + trigger ./jgfs_atmos_post_manager:release_post034 + edit FHRGRP '035' + edit FHRLST 'f034' + edit FHR 'f034' + edit HR '034' + task jgfs_atmos_post_f035 + trigger ./jgfs_atmos_post_manager:release_post035 + edit FHRGRP '036' + edit FHRLST 'f035' + edit FHR 'f035' + edit HR '035' + task jgfs_atmos_post_f036 + trigger ./jgfs_atmos_post_manager:release_post036 + edit FHRGRP '037' + edit FHRLST 'f036' + edit FHR 'f036' + edit HR '036' + task jgfs_atmos_post_f037 + trigger ./jgfs_atmos_post_manager:release_post037 + edit FHRGRP '038' + edit FHRLST 'f037' + edit FHR 'f037' + edit HR '037' + task jgfs_atmos_post_f038 + trigger ./jgfs_atmos_post_manager:release_post038 + edit FHRGRP '039' + edit FHRLST 'f038' + edit FHR 'f038' + edit HR '038' + task jgfs_atmos_post_f039 + trigger ./jgfs_atmos_post_manager:release_post039 + edit FHRGRP '040' + edit FHRLST 'f039' + edit FHR 'f039' + edit HR '039' + task jgfs_atmos_post_f040 + trigger ./jgfs_atmos_post_manager:release_post040 + edit FHRGRP '041' + edit FHRLST 'f040' + edit FHR 'f040' + edit HR '040' + task jgfs_atmos_post_f041 + trigger ./jgfs_atmos_post_manager:release_post041 + edit FHRGRP '042' + edit FHRLST 'f041' + edit FHR 'f041' + edit HR '041' + task jgfs_atmos_post_f042 + trigger ./jgfs_atmos_post_manager:release_post042 + edit FHRGRP '043' + edit FHRLST 'f042' + edit FHR 'f042' + edit HR '042' + task jgfs_atmos_post_f043 + trigger ./jgfs_atmos_post_manager:release_post043 + edit FHRGRP '044' + edit FHRLST 'f043' + edit FHR 'f043' + edit HR '043' + task jgfs_atmos_post_f044 + trigger ./jgfs_atmos_post_manager:release_post044 + edit FHRGRP '045' + edit FHRLST 'f044' + edit FHR 'f044' + edit HR '044' + task jgfs_atmos_post_f045 + trigger ./jgfs_atmos_post_manager:release_post045 + edit FHRGRP '046' + edit FHRLST 'f045' + edit FHR 'f045' + edit HR '045' + task jgfs_atmos_post_f046 + trigger ./jgfs_atmos_post_manager:release_post046 + edit FHRGRP '047' + edit FHRLST 'f046' + edit FHR 'f046' + edit HR '046' + task jgfs_atmos_post_f047 + trigger ./jgfs_atmos_post_manager:release_post047 + edit FHRGRP '048' + edit FHRLST 'f047' + edit FHR 'f047' + edit HR '047' + task jgfs_atmos_post_f048 + trigger ./jgfs_atmos_post_manager:release_post048 + edit FHRGRP '049' + edit FHRLST 'f048' + edit FHR 'f048' + edit HR '048' + task jgfs_atmos_post_f049 + trigger ./jgfs_atmos_post_manager:release_post049 + edit FHRGRP '050' + edit FHRLST 'f049' + edit FHR 'f049' + edit HR '049' + task jgfs_atmos_post_f050 + trigger ./jgfs_atmos_post_manager:release_post050 + edit FHRGRP '051' + edit FHRLST 'f050' + edit FHR 'f050' + edit HR '050' + task jgfs_atmos_post_f051 + trigger ./jgfs_atmos_post_manager:release_post051 + edit FHRGRP '052' + edit FHRLST 'f051' + edit FHR 'f051' + edit HR '051' + task jgfs_atmos_post_f052 + trigger ./jgfs_atmos_post_manager:release_post052 + edit FHRGRP '053' + edit FHRLST 'f052' + edit FHR 'f052' + edit HR '052' + task jgfs_atmos_post_f053 + trigger ./jgfs_atmos_post_manager:release_post053 + edit FHRGRP '054' + edit FHRLST 'f053' + edit FHR 'f053' + edit HR '053' + task jgfs_atmos_post_f054 + trigger ./jgfs_atmos_post_manager:release_post054 + edit FHRGRP '055' + edit FHRLST 'f054' + edit FHR 'f054' + edit HR '054' + task jgfs_atmos_post_f055 + trigger ./jgfs_atmos_post_manager:release_post055 + edit FHRGRP '056' + edit FHRLST 'f055' + edit FHR 'f055' + edit HR '055' + task jgfs_atmos_post_f056 + trigger ./jgfs_atmos_post_manager:release_post056 + edit FHRGRP '057' + edit FHRLST 'f056' + edit FHR 'f056' + edit HR '056' + task jgfs_atmos_post_f057 + trigger ./jgfs_atmos_post_manager:release_post057 + edit FHRGRP '058' + edit FHRLST 'f057' + edit FHR 'f057' + edit HR '057' + task jgfs_atmos_post_f058 + trigger ./jgfs_atmos_post_manager:release_post058 + edit FHRGRP '059' + edit FHRLST 'f058' + edit FHR 'f058' + edit HR '058' + task jgfs_atmos_post_f059 + trigger ./jgfs_atmos_post_manager:release_post059 + edit FHRGRP '060' + edit FHRLST 'f059' + edit FHR 'f059' + edit HR '059' + task jgfs_atmos_post_f060 + trigger ./jgfs_atmos_post_manager:release_post060 + edit FHRGRP '061' + edit FHRLST 'f060' + edit FHR 'f060' + edit HR '060' + task jgfs_atmos_post_f061 + trigger ./jgfs_atmos_post_manager:release_post061 + edit FHRGRP '062' + edit FHRLST 'f061' + edit FHR 'f061' + edit HR '061' + task jgfs_atmos_post_f062 + trigger ./jgfs_atmos_post_manager:release_post062 + edit FHRGRP '063' + edit FHRLST 'f062' + edit FHR 'f062' + edit HR '062' + task jgfs_atmos_post_f063 + trigger ./jgfs_atmos_post_manager:release_post063 + edit FHRGRP '064' + edit FHRLST 'f063' + edit FHR 'f063' + edit HR '063' + task jgfs_atmos_post_f064 + trigger ./jgfs_atmos_post_manager:release_post064 + edit FHRGRP '065' + edit FHRLST 'f064' + edit FHR 'f064' + edit HR '064' + task jgfs_atmos_post_f065 + trigger ./jgfs_atmos_post_manager:release_post065 + edit FHRGRP '066' + edit FHRLST 'f065' + edit FHR 'f065' + edit HR '065' + task jgfs_atmos_post_f066 + trigger ./jgfs_atmos_post_manager:release_post066 + edit FHRGRP '067' + edit FHRLST 'f066' + edit FHR 'f066' + edit HR '066' + task jgfs_atmos_post_f067 + trigger ./jgfs_atmos_post_manager:release_post067 + edit FHRGRP '068' + edit FHRLST 'f067' + edit FHR 'f067' + edit HR '067' + task jgfs_atmos_post_f068 + trigger ./jgfs_atmos_post_manager:release_post068 + edit FHRGRP '069' + edit FHRLST 'f068' + edit FHR 'f068' + edit HR '068' + task jgfs_atmos_post_f069 + trigger ./jgfs_atmos_post_manager:release_post069 + edit FHRGRP '070' + edit FHRLST 'f069' + edit FHR 'f069' + edit HR '069' + task jgfs_atmos_post_f070 + trigger ./jgfs_atmos_post_manager:release_post070 + edit FHRGRP '071' + edit FHRLST 'f070' + edit FHR 'f070' + edit HR '070' + task jgfs_atmos_post_f071 + trigger ./jgfs_atmos_post_manager:release_post071 + edit FHRGRP '072' + edit FHRLST 'f071' + edit FHR 'f071' + edit HR '071' + task jgfs_atmos_post_f072 + trigger ./jgfs_atmos_post_manager:release_post072 + edit FHRGRP '073' + edit FHRLST 'f072' + edit FHR 'f072' + edit HR '072' + task jgfs_atmos_post_f073 + trigger ./jgfs_atmos_post_manager:release_post073 + edit FHRGRP '074' + edit FHRLST 'f073' + edit FHR 'f073' + edit HR '073' + task jgfs_atmos_post_f074 + trigger ./jgfs_atmos_post_manager:release_post074 + edit FHRGRP '075' + edit FHRLST 'f074' + edit FHR 'f074' + edit HR '074' + task jgfs_atmos_post_f075 + trigger ./jgfs_atmos_post_manager:release_post075 + edit FHRGRP '076' + edit FHRLST 'f075' + edit FHR 'f075' + edit HR '075' + task jgfs_atmos_post_f076 + trigger ./jgfs_atmos_post_manager:release_post076 + edit FHRGRP '077' + edit FHRLST 'f076' + edit FHR 'f076' + edit HR '076' + task jgfs_atmos_post_f077 + trigger ./jgfs_atmos_post_manager:release_post077 + edit FHRGRP '078' + edit FHRLST 'f077' + edit FHR 'f077' + edit HR '077' + task jgfs_atmos_post_f078 + trigger ./jgfs_atmos_post_manager:release_post078 + edit FHRGRP '079' + edit FHRLST 'f078' + edit FHR 'f078' + edit HR '078' + task jgfs_atmos_post_f079 + trigger ./jgfs_atmos_post_manager:release_post079 + edit FHRGRP '080' + edit FHRLST 'f079' + edit FHR 'f079' + edit HR '079' + task jgfs_atmos_post_f080 + trigger ./jgfs_atmos_post_manager:release_post080 + edit FHRGRP '081' + edit FHRLST 'f080' + edit FHR 'f080' + edit HR '080' + task jgfs_atmos_post_f081 + trigger ./jgfs_atmos_post_manager:release_post081 + edit FHRGRP '082' + edit FHRLST 'f081' + edit FHR 'f081' + edit HR '081' + task jgfs_atmos_post_f082 + trigger ./jgfs_atmos_post_manager:release_post082 + edit FHRGRP '083' + edit FHRLST 'f082' + edit FHR 'f082' + edit HR '082' + task jgfs_atmos_post_f083 + trigger ./jgfs_atmos_post_manager:release_post083 + edit FHRGRP '084' + edit FHRLST 'f083' + edit FHR 'f083' + edit HR '083' + task jgfs_atmos_post_f084 + trigger ./jgfs_atmos_post_manager:release_post084 + edit FHRGRP '085' + edit FHRLST 'f084' + edit FHR 'f084' + edit HR '084' + task jgfs_atmos_post_f085 + trigger ./jgfs_atmos_post_manager:release_post085 + edit FHRGRP '086' + edit FHRLST 'f085' + edit FHR 'f085' + edit HR '085' + task jgfs_atmos_post_f086 + trigger ./jgfs_atmos_post_manager:release_post086 + edit FHRGRP '087' + edit FHRLST 'f086' + edit FHR 'f086' + edit HR '086' + task jgfs_atmos_post_f087 + trigger ./jgfs_atmos_post_manager:release_post087 + edit FHRGRP '088' + edit FHRLST 'f087' + edit FHR 'f087' + edit HR '087' + task jgfs_atmos_post_f088 + trigger ./jgfs_atmos_post_manager:release_post088 + edit FHRGRP '089' + edit FHRLST 'f088' + edit FHR 'f088' + edit HR '088' + task jgfs_atmos_post_f089 + trigger ./jgfs_atmos_post_manager:release_post089 + edit FHRGRP '090' + edit FHRLST 'f089' + edit FHR 'f089' + edit HR '089' + task jgfs_atmos_post_f090 + trigger ./jgfs_atmos_post_manager:release_post090 + edit FHRGRP '091' + edit FHRLST 'f090' + edit FHR 'f090' + edit HR '090' + task jgfs_atmos_post_f091 + trigger ./jgfs_atmos_post_manager:release_post091 + edit FHRGRP '092' + edit FHRLST 'f091' + edit FHR 'f091' + edit HR '091' + task jgfs_atmos_post_f092 + trigger ./jgfs_atmos_post_manager:release_post092 + edit FHRGRP '093' + edit FHRLST 'f092' + edit FHR 'f092' + edit HR '092' + task jgfs_atmos_post_f093 + trigger ./jgfs_atmos_post_manager:release_post093 + edit FHRGRP '094' + edit FHRLST 'f093' + edit FHR 'f093' + edit HR '093' + task jgfs_atmos_post_f094 + trigger ./jgfs_atmos_post_manager:release_post094 + edit FHRGRP '095' + edit FHRLST 'f094' + edit FHR 'f094' + edit HR '094' + task jgfs_atmos_post_f095 + trigger ./jgfs_atmos_post_manager:release_post095 + edit FHRGRP '096' + edit FHRLST 'f095' + edit FHR 'f095' + edit HR '095' + task jgfs_atmos_post_f096 + trigger ./jgfs_atmos_post_manager:release_post096 + edit FHRGRP '097' + edit FHRLST 'f096' + edit FHR 'f096' + edit HR '096' + task jgfs_atmos_post_f097 + trigger ./jgfs_atmos_post_manager:release_post097 + edit FHRGRP '098' + edit FHRLST 'f097' + edit FHR 'f097' + edit HR '097' + task jgfs_atmos_post_f098 + trigger ./jgfs_atmos_post_manager:release_post098 + edit FHRGRP '099' + edit FHRLST 'f098' + edit FHR 'f098' + edit HR '098' + task jgfs_atmos_post_f099 + trigger ./jgfs_atmos_post_manager:release_post099 + edit FHRGRP '100' + edit FHRLST 'f099' + edit FHR 'f099' + edit HR '099' + task jgfs_atmos_post_f100 + trigger ./jgfs_atmos_post_manager:release_post100 + edit FHRGRP '101' + edit FHRLST 'f100' + edit FHR 'f100' + edit HR '100' + task jgfs_atmos_post_f101 + trigger ./jgfs_atmos_post_manager:release_post101 + edit FHRGRP '102' + edit FHRLST 'f101' + edit FHR 'f101' + edit HR '101' + task jgfs_atmos_post_f102 + trigger ./jgfs_atmos_post_manager:release_post102 + edit FHRGRP '103' + edit FHRLST 'f102' + edit FHR 'f102' + edit HR '102' + task jgfs_atmos_post_f103 + trigger ./jgfs_atmos_post_manager:release_post103 + edit FHRGRP '104' + edit FHRLST 'f103' + edit FHR 'f103' + edit HR '103' + task jgfs_atmos_post_f104 + trigger ./jgfs_atmos_post_manager:release_post104 + edit FHRGRP '105' + edit FHRLST 'f104' + edit FHR 'f104' + edit HR '104' + task jgfs_atmos_post_f105 + trigger ./jgfs_atmos_post_manager:release_post105 + edit FHRGRP '106' + edit FHRLST 'f105' + edit FHR 'f105' + edit HR '105' + task jgfs_atmos_post_f106 + trigger ./jgfs_atmos_post_manager:release_post106 + edit FHRGRP '107' + edit FHRLST 'f106' + edit FHR 'f106' + edit HR '106' + task jgfs_atmos_post_f107 + trigger ./jgfs_atmos_post_manager:release_post107 + edit FHRGRP '108' + edit FHRLST 'f107' + edit FHR 'f107' + edit HR '107' + task jgfs_atmos_post_f108 + trigger ./jgfs_atmos_post_manager:release_post108 + edit FHRGRP '109' + edit FHRLST 'f108' + edit FHR 'f108' + edit HR '108' + task jgfs_atmos_post_f109 + trigger ./jgfs_atmos_post_manager:release_post109 + edit FHRGRP '110' + edit FHRLST 'f109' + edit FHR 'f109' + edit HR '109' + task jgfs_atmos_post_f110 + trigger ./jgfs_atmos_post_manager:release_post110 + edit FHRGRP '111' + edit FHRLST 'f110' + edit FHR 'f110' + edit HR '110' + task jgfs_atmos_post_f111 + trigger ./jgfs_atmos_post_manager:release_post111 + edit FHRGRP '112' + edit FHRLST 'f111' + edit FHR 'f111' + edit HR '111' + task jgfs_atmos_post_f112 + trigger ./jgfs_atmos_post_manager:release_post112 + edit FHRGRP '113' + edit FHRLST 'f112' + edit FHR 'f112' + edit HR '112' + task jgfs_atmos_post_f113 + trigger ./jgfs_atmos_post_manager:release_post113 + edit FHRGRP '114' + edit FHRLST 'f113' + edit FHR 'f113' + edit HR '113' + task jgfs_atmos_post_f114 + trigger ./jgfs_atmos_post_manager:release_post114 + edit FHRGRP '115' + edit FHRLST 'f114' + edit FHR 'f114' + edit HR '114' + task jgfs_atmos_post_f115 + trigger ./jgfs_atmos_post_manager:release_post115 + edit FHRGRP '116' + edit FHRLST 'f115' + edit FHR 'f115' + edit HR '115' + task jgfs_atmos_post_f116 + trigger ./jgfs_atmos_post_manager:release_post116 + edit FHRGRP '117' + edit FHRLST 'f116' + edit FHR 'f116' + edit HR '116' + task jgfs_atmos_post_f117 + trigger ./jgfs_atmos_post_manager:release_post117 + edit FHRGRP '118' + edit FHRLST 'f117' + edit FHR 'f117' + edit HR '117' + task jgfs_atmos_post_f118 + trigger ./jgfs_atmos_post_manager:release_post118 + edit FHRGRP '119' + edit FHRLST 'f118' + edit FHR 'f118' + edit HR '118' + task jgfs_atmos_post_f119 + trigger ./jgfs_atmos_post_manager:release_post119 + edit FHRGRP '120' + edit FHRLST 'f119' + edit FHR 'f119' + edit HR '119' + task jgfs_atmos_post_f120 + trigger ./jgfs_atmos_post_manager:release_post120 + edit FHRGRP '121' + edit FHRLST 'f120' + edit FHR 'f120' + edit HR '120' + task jgfs_atmos_post_f123 + trigger ./jgfs_atmos_post_manager:release_post123 + edit FHRGRP '122' + edit FHRLST 'f123' + edit FHR 'f123' + edit HR '123' + task jgfs_atmos_post_f126 + trigger ./jgfs_atmos_post_manager:release_post126 + edit FHRGRP '123' + edit FHRLST 'f126' + edit FHR 'f126' + edit HR '126' + task jgfs_atmos_post_f129 + trigger ./jgfs_atmos_post_manager:release_post129 + edit FHRGRP '124' + edit FHRLST 'f129' + edit FHR 'f129' + edit HR '129' + task jgfs_atmos_post_f132 + trigger ./jgfs_atmos_post_manager:release_post132 + edit FHRGRP '125' + edit FHRLST 'f132' + edit FHR 'f132' + edit HR '132' + task jgfs_atmos_post_f135 + trigger ./jgfs_atmos_post_manager:release_post135 + edit FHRGRP '126' + edit FHRLST 'f135' + edit FHR 'f135' + edit HR '135' + task jgfs_atmos_post_f138 + trigger ./jgfs_atmos_post_manager:release_post138 + edit FHRGRP '127' + edit FHRLST 'f138' + edit FHR 'f138' + edit HR '138' + task jgfs_atmos_post_f141 + trigger ./jgfs_atmos_post_manager:release_post141 + edit FHRGRP '128' + edit FHRLST 'f141' + edit FHR 'f141' + edit HR '141' + task jgfs_atmos_post_f144 + trigger ./jgfs_atmos_post_manager:release_post144 + edit FHRGRP '129' + edit FHRLST 'f144' + edit FHR 'f144' + edit HR '144' + task jgfs_atmos_post_f147 + trigger ./jgfs_atmos_post_manager:release_post147 + edit FHRGRP '130' + edit FHRLST 'f147' + edit FHR 'f147' + edit HR '147' + task jgfs_atmos_post_f150 + trigger ./jgfs_atmos_post_manager:release_post150 + edit FHRGRP '131' + edit FHRLST 'f150' + edit FHR 'f150' + edit HR '150' + task jgfs_atmos_post_f153 + trigger ./jgfs_atmos_post_manager:release_post153 + edit FHRGRP '132' + edit FHRLST 'f153' + edit FHR 'f153' + edit HR '153' + task jgfs_atmos_post_f156 + trigger ./jgfs_atmos_post_manager:release_post156 + edit FHRGRP '133' + edit FHRLST 'f156' + edit FHR 'f156' + edit HR '156' + task jgfs_atmos_post_f159 + trigger ./jgfs_atmos_post_manager:release_post159 + edit FHRGRP '134' + edit FHRLST 'f159' + edit FHR 'f159' + edit HR '159' + task jgfs_atmos_post_f162 + trigger ./jgfs_atmos_post_manager:release_post162 + edit FHRGRP '135' + edit FHRLST 'f162' + edit FHR 'f162' + edit HR '162' + task jgfs_atmos_post_f165 + trigger ./jgfs_atmos_post_manager:release_post165 + edit FHRGRP '136' + edit FHRLST 'f165' + edit FHR 'f165' + edit HR '165' + task jgfs_atmos_post_f168 + trigger ./jgfs_atmos_post_manager:release_post168 + edit FHRGRP '137' + edit FHRLST 'f168' + edit FHR 'f168' + edit HR '168' + task jgfs_atmos_post_f171 + trigger ./jgfs_atmos_post_manager:release_post171 + edit FHRGRP '138' + edit FHRLST 'f171' + edit FHR 'f171' + edit HR '171' + task jgfs_atmos_post_f174 + trigger ./jgfs_atmos_post_manager:release_post174 + edit FHRGRP '139' + edit FHRLST 'f174' + edit FHR 'f174' + edit HR '174' + task jgfs_atmos_post_f177 + trigger ./jgfs_atmos_post_manager:release_post177 + edit FHRGRP '140' + edit FHRLST 'f177' + edit FHR 'f177' + edit HR '177' + task jgfs_atmos_post_f180 + trigger ./jgfs_atmos_post_manager:release_post180 + edit FHRGRP '141' + edit FHRLST 'f180' + edit FHR 'f180' + edit HR '180' + task jgfs_atmos_post_f183 + trigger ./jgfs_atmos_post_manager:release_post183 + edit FHRGRP '142' + edit FHRLST 'f183' + edit FHR 'f183' + edit HR '183' + task jgfs_atmos_post_f186 + trigger ./jgfs_atmos_post_manager:release_post186 + edit FHRGRP '143' + edit FHRLST 'f186' + edit FHR 'f186' + edit HR '186' + task jgfs_atmos_post_f189 + trigger ./jgfs_atmos_post_manager:release_post189 + edit FHRGRP '144' + edit FHRLST 'f189' + edit FHR 'f189' + edit HR '189' + task jgfs_atmos_post_f192 + trigger ./jgfs_atmos_post_manager:release_post192 + edit FHRGRP '145' + edit FHRLST 'f192' + edit FHR 'f192' + edit HR '192' + task jgfs_atmos_post_f195 + trigger ./jgfs_atmos_post_manager:release_post195 + edit FHRGRP '146' + edit FHRLST 'f195' + edit FHR 'f195' + edit HR '195' + task jgfs_atmos_post_f198 + trigger ./jgfs_atmos_post_manager:release_post198 + edit FHRGRP '147' + edit FHRLST 'f198' + edit FHR 'f198' + edit HR '198' + task jgfs_atmos_post_f201 + trigger ./jgfs_atmos_post_manager:release_post201 + edit FHRGRP '148' + edit FHRLST 'f201' + edit FHR 'f201' + edit HR '201' + task jgfs_atmos_post_f204 + trigger ./jgfs_atmos_post_manager:release_post204 + edit FHRGRP '149' + edit FHRLST 'f204' + edit FHR 'f204' + edit HR '204' + task jgfs_atmos_post_f207 + trigger ./jgfs_atmos_post_manager:release_post207 + edit FHRGRP '150' + edit FHRLST 'f207' + edit FHR 'f207' + edit HR '207' + task jgfs_atmos_post_f210 + trigger ./jgfs_atmos_post_manager:release_post210 + edit FHRGRP '151' + edit FHRLST 'f210' + edit FHR 'f210' + edit HR '210' + task jgfs_atmos_post_f213 + trigger ./jgfs_atmos_post_manager:release_post213 + edit FHRGRP '152' + edit FHRLST 'f213' + edit FHR 'f213' + edit HR '213' + task jgfs_atmos_post_f216 + trigger ./jgfs_atmos_post_manager:release_post216 + edit FHRGRP '153' + edit FHRLST 'f216' + edit FHR 'f216' + edit HR '216' + task jgfs_atmos_post_f219 + trigger ./jgfs_atmos_post_manager:release_post219 + edit FHRGRP '154' + edit FHRLST 'f219' + edit FHR 'f219' + edit HR '219' + task jgfs_atmos_post_f222 + trigger ./jgfs_atmos_post_manager:release_post222 + edit FHRGRP '155' + edit FHRLST 'f222' + edit FHR 'f222' + edit HR '222' + task jgfs_atmos_post_f225 + trigger ./jgfs_atmos_post_manager:release_post225 + edit FHRGRP '156' + edit FHRLST 'f225' + edit FHR 'f225' + edit HR '225' + task jgfs_atmos_post_f228 + trigger ./jgfs_atmos_post_manager:release_post228 + edit FHRGRP '157' + edit FHRLST 'f228' + edit FHR 'f228' + edit HR '228' + task jgfs_atmos_post_f231 + trigger ./jgfs_atmos_post_manager:release_post231 + edit FHRGRP '158' + edit FHRLST 'f231' + edit FHR 'f231' + edit HR '231' + task jgfs_atmos_post_f234 + trigger ./jgfs_atmos_post_manager:release_post234 + edit FHRGRP '159' + edit FHRLST 'f234' + edit FHR 'f234' + edit HR '234' + task jgfs_atmos_post_f237 + trigger ./jgfs_atmos_post_manager:release_post237 + edit FHRGRP '160' + edit FHRLST 'f237' + edit FHR 'f237' + edit HR '237' + task jgfs_atmos_post_f240 + trigger ./jgfs_atmos_post_manager:release_post240 + edit FHRGRP '161' + edit FHRLST 'f240' + edit FHR 'f240' + edit HR '240' + task jgfs_atmos_post_f243 + trigger ./jgfs_atmos_post_manager:release_post243 + edit FHRGRP '162' + edit FHRLST 'f243' + edit FHR 'f243' + edit HR '243' + task jgfs_atmos_post_f246 + trigger ./jgfs_atmos_post_manager:release_post246 + edit FHRGRP '163' + edit FHRLST 'f246' + edit FHR 'f246' + edit HR '246' + task jgfs_atmos_post_f249 + trigger ./jgfs_atmos_post_manager:release_post249 + edit FHRGRP '164' + edit FHRLST 'f249' + edit FHR 'f249' + edit HR '249' + task jgfs_atmos_post_f252 + trigger ./jgfs_atmos_post_manager:release_post252 + edit FHRGRP '165' + edit FHRLST 'f252' + edit FHR 'f252' + edit HR '252' + task jgfs_atmos_post_f255 + trigger ./jgfs_atmos_post_manager:release_post255 + edit FHRGRP '166' + edit FHRLST 'f255' + edit FHR 'f255' + edit HR '255' + task jgfs_atmos_post_f258 + trigger ./jgfs_atmos_post_manager:release_post258 + edit FHRGRP '167' + edit FHRLST 'f258' + edit FHR 'f258' + edit HR '258' + task jgfs_atmos_post_f261 + trigger ./jgfs_atmos_post_manager:release_post261 + edit FHRGRP '168' + edit FHRLST 'f261' + edit FHR 'f261' + edit HR '261' + task jgfs_atmos_post_f264 + trigger ./jgfs_atmos_post_manager:release_post264 + edit FHRGRP '169' + edit FHRLST 'f264' + edit FHR 'f264' + edit HR '264' + task jgfs_atmos_post_f267 + trigger ./jgfs_atmos_post_manager:release_post267 + edit FHRGRP '170' + edit FHRLST 'f267' + edit FHR 'f267' + edit HR '267' + task jgfs_atmos_post_f270 + trigger ./jgfs_atmos_post_manager:release_post270 + edit FHRGRP '171' + edit FHRLST 'f270' + edit FHR 'f270' + edit HR '270' + task jgfs_atmos_post_f273 + trigger ./jgfs_atmos_post_manager:release_post273 + edit FHRGRP '172' + edit FHRLST 'f273' + edit FHR 'f273' + edit HR '273' + task jgfs_atmos_post_f276 + trigger ./jgfs_atmos_post_manager:release_post276 + edit FHRGRP '173' + edit FHRLST 'f276' + edit FHR 'f276' + edit HR '276' + task jgfs_atmos_post_f279 + trigger ./jgfs_atmos_post_manager:release_post279 + edit FHRGRP '174' + edit FHRLST 'f279' + edit FHR 'f279' + edit HR '279' + task jgfs_atmos_post_f282 + trigger ./jgfs_atmos_post_manager:release_post282 + edit FHRGRP '175' + edit FHRLST 'f282' + edit FHR 'f282' + edit HR '282' + task jgfs_atmos_post_f285 + trigger ./jgfs_atmos_post_manager:release_post285 + edit FHRGRP '176' + edit FHRLST 'f285' + edit FHR 'f285' + edit HR '285' + task jgfs_atmos_post_f288 + trigger ./jgfs_atmos_post_manager:release_post288 + edit FHRGRP '177' + edit FHRLST 'f288' + edit FHR 'f288' + edit HR '288' + task jgfs_atmos_post_f291 + trigger ./jgfs_atmos_post_manager:release_post291 + edit FHRGRP '178' + edit FHRLST 'f291' + edit FHR 'f291' + edit HR '291' + task jgfs_atmos_post_f294 + trigger ./jgfs_atmos_post_manager:release_post294 + edit FHRGRP '179' + edit FHRLST 'f294' + edit FHR 'f294' + edit HR '294' + task jgfs_atmos_post_f297 + trigger ./jgfs_atmos_post_manager:release_post297 + edit FHRGRP '180' + edit FHRLST 'f297' + edit FHR 'f297' + edit HR '297' + task jgfs_atmos_post_f300 + trigger ./jgfs_atmos_post_manager:release_post300 + edit FHRGRP '181' + edit FHRLST 'f300' + edit FHR 'f300' + edit HR '300' + task jgfs_atmos_post_f303 + trigger ./jgfs_atmos_post_manager:release_post303 + edit FHRGRP '182' + edit FHRLST 'f303' + edit FHR 'f303' + edit HR '303' + task jgfs_atmos_post_f306 + trigger ./jgfs_atmos_post_manager:release_post306 + edit FHRGRP '183' + edit FHRLST 'f306' + edit FHR 'f306' + edit HR '306' + task jgfs_atmos_post_f309 + trigger ./jgfs_atmos_post_manager:release_post309 + edit FHRGRP '184' + edit FHRLST 'f309' + edit FHR 'f309' + edit HR '309' + task jgfs_atmos_post_f312 + trigger ./jgfs_atmos_post_manager:release_post312 + edit FHRGRP '185' + edit FHRLST 'f312' + edit FHR 'f312' + edit HR '312' + task jgfs_atmos_post_f315 + trigger ./jgfs_atmos_post_manager:release_post315 + edit FHRGRP '186' + edit FHRLST 'f315' + edit FHR 'f315' + edit HR '315' + task jgfs_atmos_post_f318 + trigger ./jgfs_atmos_post_manager:release_post318 + edit FHRGRP '187' + edit FHRLST 'f318' + edit FHR 'f318' + edit HR '318' + task jgfs_atmos_post_f321 + trigger ./jgfs_atmos_post_manager:release_post321 + edit FHRGRP '188' + edit FHRLST 'f321' + edit FHR 'f321' + edit HR '321' + task jgfs_atmos_post_f324 + trigger ./jgfs_atmos_post_manager:release_post324 + edit FHRGRP '189' + edit FHRLST 'f324' + edit FHR 'f324' + edit HR '324' + task jgfs_atmos_post_f327 + trigger ./jgfs_atmos_post_manager:release_post327 + edit FHRGRP '190' + edit FHRLST 'f327' + edit FHR 'f327' + edit HR '327' + task jgfs_atmos_post_f330 + trigger ./jgfs_atmos_post_manager:release_post330 + edit FHRGRP '191' + edit FHRLST 'f330' + edit FHR 'f330' + edit HR '330' + task jgfs_atmos_post_f333 + trigger ./jgfs_atmos_post_manager:release_post333 + edit FHRGRP '192' + edit FHRLST 'f333' + edit FHR 'f333' + edit HR '333' + task jgfs_atmos_post_f336 + trigger ./jgfs_atmos_post_manager:release_post336 + edit FHRGRP '193' + edit FHRLST 'f336' + edit FHR 'f336' + edit HR '336' + task jgfs_atmos_post_f339 + trigger ./jgfs_atmos_post_manager:release_post339 + edit FHRGRP '194' + edit FHRLST 'f339' + edit FHR 'f339' + edit HR '339' + task jgfs_atmos_post_f342 + trigger ./jgfs_atmos_post_manager:release_post342 + edit FHRGRP '195' + edit FHRLST 'f342' + edit FHR 'f342' + edit HR '342' + task jgfs_atmos_post_f345 + trigger ./jgfs_atmos_post_manager:release_post345 + edit FHRGRP '196' + edit FHRLST 'f345' + edit FHR 'f345' + edit HR '345' + task jgfs_atmos_post_f348 + trigger ./jgfs_atmos_post_manager:release_post348 + edit FHRGRP '197' + edit FHRLST 'f348' + edit FHR 'f348' + edit HR '348' + task jgfs_atmos_post_f351 + trigger ./jgfs_atmos_post_manager:release_post351 + edit FHRGRP '198' + edit FHRLST 'f351' + edit FHR 'f351' + edit HR '351' + task jgfs_atmos_post_f354 + trigger ./jgfs_atmos_post_manager:release_post354 + edit FHRGRP '199' + edit FHRLST 'f354' + edit FHR 'f354' + edit HR '354' + task jgfs_atmos_post_f357 + trigger ./jgfs_atmos_post_manager:release_post357 + edit FHRGRP '200' + edit FHRLST 'f357' + edit FHR 'f357' + edit HR '357' + task jgfs_atmos_post_f360 + trigger ./jgfs_atmos_post_manager:release_post360 + edit FHRGRP '201' + edit FHRLST 'f360' + edit FHR 'f360' + edit HR '360' + task jgfs_atmos_post_f363 + trigger ./jgfs_atmos_post_manager:release_post363 + edit FHRGRP '202' + edit FHRLST 'f363' + edit FHR 'f363' + edit HR '363' + task jgfs_atmos_post_f366 + trigger ./jgfs_atmos_post_manager:release_post366 + edit FHRGRP '203' + edit FHRLST 'f366' + edit FHR 'f366' + edit HR '366' + task jgfs_atmos_post_f369 + trigger ./jgfs_atmos_post_manager:release_post369 + edit FHRGRP '204' + edit FHRLST 'f369' + edit FHR 'f369' + edit HR '369' + task jgfs_atmos_post_f372 + trigger ./jgfs_atmos_post_manager:release_post372 + edit FHRGRP '205' + edit FHRLST 'f372' + edit FHR 'f372' + edit HR '372' + task jgfs_atmos_post_f375 + trigger ./jgfs_atmos_post_manager:release_post375 + edit FHRGRP '206' + edit FHRLST 'f375' + edit FHR 'f375' + edit HR '375' + task jgfs_atmos_post_f378 + trigger ./jgfs_atmos_post_manager:release_post378 + edit FHRGRP '207' + edit FHRLST 'f378' + edit FHR 'f378' + edit HR '378' + task jgfs_atmos_post_f381 + trigger ./jgfs_atmos_post_manager:release_post381 + edit FHRGRP '208' + edit FHRLST 'f381' + edit FHR 'f381' + edit HR '381' + task jgfs_atmos_post_f384 + trigger ./jgfs_atmos_post_manager:release_post384 + edit FHRGRP '209' + edit FHRLST 'f384' + edit FHR 'f384' + edit HR '384' + endfamily + family post_processing + family bufr_sounding + task jgfs_atmos_postsnd + trigger ../../post/jgfs_atmos_post_manager:release_post000 + endfamily + family bulletins + task jgfs_atmos_fbwind + trigger ../../post/jgfs_atmos_post_f006 == complete and ../../post/jgfs_atmos_post_f012 == complete and ../../post/jgfs_atmos_post_f024 == complete + endfamily + family awips_20km_1p0 + task jgfs_atmos_awips_f000 + trigger ../../post/jgfs_atmos_post_f000 == complete + edit FHRGRP '000' + edit FHRLST 'f000' + edit FCSTHR '000' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f003 + trigger ../../post/jgfs_atmos_post_f003 == complete + edit FHRGRP '003' + edit FHRLST 'f003' + edit FCSTHR '003' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f006 + trigger ../../post/jgfs_atmos_post_f006 == complete + edit FHRGRP '006' + edit FHRLST 'f006' + edit FCSTHR '006' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f009 + trigger ../../post/jgfs_atmos_post_f009 == complete + edit FHRGRP '009' + edit FHRLST 'f009' + edit FCSTHR '009' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f012 + trigger ../../post/jgfs_atmos_post_f012 == complete + edit FHRGRP '012' + edit FHRLST 'f012' + edit FCSTHR '012' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f015 + trigger ../../post/jgfs_atmos_post_f015 == complete + edit FHRGRP '015' + edit FHRLST 'f015' + edit FCSTHR '015' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f018 + trigger ../../post/jgfs_atmos_post_f018 == complete + edit FHRGRP '018' + edit FHRLST 'f018' + edit FCSTHR '018' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f021 + trigger ../../post/jgfs_atmos_post_f021 == complete + edit FHRGRP '021' + edit FHRLST 'f021' + edit FCSTHR '021' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f024 + trigger ../../post/jgfs_atmos_post_f024 == complete + edit FHRGRP '024' + edit FHRLST 'f024' + edit FCSTHR '024' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f027 + trigger ../../post/jgfs_atmos_post_f027 == complete + edit FHRGRP '027' + edit FHRLST 'f027' + edit FCSTHR '027' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f030 + trigger ../../post/jgfs_atmos_post_f030 == complete + edit FHRGRP '030' + edit FHRLST 'f030' + edit FCSTHR '030' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f033 + trigger ../../post/jgfs_atmos_post_f033 == complete + edit FHRGRP '033' + edit FHRLST 'f033' + edit FCSTHR '033' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f036 + trigger ../../post/jgfs_atmos_post_f036 == complete + edit FHRGRP '036' + edit FHRLST 'f036' + edit FCSTHR '036' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f039 + trigger ../../post/jgfs_atmos_post_f039 == complete + edit FHRGRP '039' + edit FHRLST 'f039' + edit FCSTHR '039' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f042 + trigger ../../post/jgfs_atmos_post_f042 == complete + edit FHRGRP '042' + edit FHRLST 'f042' + edit FCSTHR '042' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f045 + trigger ../../post/jgfs_atmos_post_f045 == complete + edit FHRGRP '045' + edit FHRLST 'f045' + edit FCSTHR '045' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f048 + trigger ../../post/jgfs_atmos_post_f048 == complete + edit FHRGRP '048' + edit FHRLST 'f048' + edit FCSTHR '048' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f051 + trigger ../../post/jgfs_atmos_post_f051 == complete + edit FHRGRP '051' + edit FHRLST 'f051' + edit FCSTHR '051' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f054 + trigger ../../post/jgfs_atmos_post_f054 == complete + edit FHRGRP '054' + edit FHRLST 'f054' + edit FCSTHR '054' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f057 + trigger ../../post/jgfs_atmos_post_f057 == complete + edit FHRGRP '057' + edit FHRLST 'f057' + edit FCSTHR '057' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f060 + trigger ../../post/jgfs_atmos_post_f060 == complete + edit FHRGRP '060' + edit FHRLST 'f060' + edit FCSTHR '060' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f063 + trigger ../../post/jgfs_atmos_post_f063 == complete + edit FHRGRP '063' + edit FHRLST 'f063' + edit FCSTHR '063' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f066 + trigger ../../post/jgfs_atmos_post_f066 == complete + edit FHRGRP '066' + edit FHRLST 'f066' + edit FCSTHR '066' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f069 + trigger ../../post/jgfs_atmos_post_f069 == complete + edit FHRGRP '069' + edit FHRLST 'f069' + edit FCSTHR '069' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f072 + trigger ../../post/jgfs_atmos_post_f072 == complete + edit FHRGRP '072' + edit FHRLST 'f072' + edit FCSTHR '072' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f075 + trigger ../../post/jgfs_atmos_post_f075 == complete + edit FHRGRP '075' + edit FHRLST 'f075' + edit FCSTHR '075' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f078 + trigger ../../post/jgfs_atmos_post_f078 == complete + edit FHRGRP '078' + edit FHRLST 'f078' + edit FCSTHR '078' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f081 + trigger ../../post/jgfs_atmos_post_f081 == complete + edit FHRGRP '081' + edit FHRLST 'f081' + edit FCSTHR '081' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f084 + trigger ../../post/jgfs_atmos_post_f084 == complete + edit FHRGRP '084' + edit FHRLST 'f084' + edit FCSTHR '084' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f090 + trigger ../../post/jgfs_atmos_post_f090 == complete + edit FHRGRP '090' + edit FHRLST 'f090' + edit FCSTHR '090' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f096 + trigger ../../post/jgfs_atmos_post_f096 == complete + edit FHRGRP '096' + edit FHRLST 'f096' + edit FCSTHR '096' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f102 + trigger ../../post/jgfs_atmos_post_f102 == complete + edit FHRGRP '102' + edit FHRLST 'f102' + edit FCSTHR '102' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f108 + trigger ../../post/jgfs_atmos_post_f108 == complete + edit FHRGRP '108' + edit FHRLST 'f108' + edit FCSTHR '108' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f114 + trigger ../../post/jgfs_atmos_post_f114 == complete + edit FHRGRP '114' + edit FHRLST 'f114' + edit FCSTHR '114' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f120 + trigger ../../post/jgfs_atmos_post_f120 == complete + edit FHRGRP '120' + edit FHRLST 'f120' + edit FCSTHR '120' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f126 + trigger ../../post/jgfs_atmos_post_f126 == complete + edit FHRGRP '126' + edit FHRLST 'f126' + edit FCSTHR '126' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f132 + trigger ../../post/jgfs_atmos_post_f132 == complete + edit FHRGRP '132' + edit FHRLST 'f132' + edit FCSTHR '132' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f138 + trigger ../../post/jgfs_atmos_post_f138 == complete + edit FHRGRP '138' + edit FHRLST 'f138' + edit FCSTHR '138' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f144 + trigger ../../post/jgfs_atmos_post_f144 == complete + edit FHRGRP '144' + edit FHRLST 'f144' + edit FCSTHR '144' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f150 + trigger ../../post/jgfs_atmos_post_f150 == complete + edit FHRGRP '150' + edit FHRLST 'f150' + edit FCSTHR '150' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f156 + trigger ../../post/jgfs_atmos_post_f156 == complete + edit FHRGRP '156' + edit FHRLST 'f156' + edit FCSTHR '156' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f162 + trigger ../../post/jgfs_atmos_post_f162 == complete + edit FHRGRP '162' + edit FHRLST 'f162' + edit FCSTHR '162' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f168 + trigger ../../post/jgfs_atmos_post_f168 == complete + edit FHRGRP '168' + edit FHRLST 'f168' + edit FCSTHR '168' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f174 + trigger ../../post/jgfs_atmos_post_f174 == complete + edit FHRGRP '174' + edit FHRLST 'f174' + edit FCSTHR '174' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f180 + trigger ../../post/jgfs_atmos_post_f180 == complete + edit FHRGRP '180' + edit FHRLST 'f180' + edit FCSTHR '180' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f186 + trigger ../../post/jgfs_atmos_post_f186 == complete + edit FHRGRP '186' + edit FHRLST 'f186' + edit FCSTHR '186' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f192 + trigger ../../post/jgfs_atmos_post_f192 == complete + edit FHRGRP '192' + edit FHRLST 'f192' + edit FCSTHR '192' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f198 + trigger ../../post/jgfs_atmos_post_f198 == complete + edit FHRGRP '198' + edit FHRLST 'f198' + edit FCSTHR '198' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f204 + trigger ../../post/jgfs_atmos_post_f204 == complete + edit FHRGRP '204' + edit FHRLST 'f204' + edit FCSTHR '204' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f210 + trigger ../../post/jgfs_atmos_post_f210 == complete + edit FHRGRP '210' + edit FHRLST 'f210' + edit FCSTHR '210' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f216 + trigger ../../post/jgfs_atmos_post_f216 == complete + edit FHRGRP '216' + edit FHRLST 'f216' + edit FCSTHR '216' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f222 + trigger ../../post/jgfs_atmos_post_f222 == complete + edit FHRGRP '222' + edit FHRLST 'f222' + edit FCSTHR '222' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f228 + trigger ../../post/jgfs_atmos_post_f228 == complete + edit FHRGRP '228' + edit FHRLST 'f228' + edit FCSTHR '228' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f234 + trigger ../../post/jgfs_atmos_post_f234 == complete + edit FHRGRP '234' + edit FHRLST 'f234' + edit FCSTHR '234' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f240 + trigger ../../post/jgfs_atmos_post_f240 == complete + edit FHRGRP '240' + edit FHRLST 'f240' + edit FCSTHR '240' + edit TRDRUN 'YES' + endfamily + family awips_g2 + task jgfs_atmos_awips_g2_f000 + trigger ../../post/jgfs_atmos_post_f000 == complete + edit FHRGRP '000' + edit FHRLST 'f000' + edit FCSTHR '000' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f006 + trigger ../../post/jgfs_atmos_post_f006 == complete + edit FHRGRP '006' + edit FHRLST 'f006' + edit FCSTHR '006' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f012 + trigger ../../post/jgfs_atmos_post_f012 == complete + edit FHRGRP '012' + edit FHRLST 'f012' + edit FCSTHR '012' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f018 + trigger ../../post/jgfs_atmos_post_f018 == complete + edit FHRGRP '018' + edit FHRLST 'f018' + edit FCSTHR '018' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f024 + trigger ../../post/jgfs_atmos_post_f024 == complete + edit FHRGRP '024' + edit FHRLST 'f024' + edit FCSTHR '024' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f030 + trigger ../../post/jgfs_atmos_post_f030 == complete + edit FHRGRP '030' + edit FHRLST 'f030' + edit FCSTHR '030' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f036 + trigger ../../post/jgfs_atmos_post_f036 == complete + edit FHRGRP '036' + edit FHRLST 'f036' + edit FCSTHR '036' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f042 + trigger ../../post/jgfs_atmos_post_f042 == complete + edit FHRGRP '042' + edit FHRLST 'f042' + edit FCSTHR '042' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f048 + trigger ../../post/jgfs_atmos_post_f048 == complete + edit FHRGRP '048' + edit FHRLST 'f048' + edit FCSTHR '048' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f054 + trigger ../../post/jgfs_atmos_post_f054 == complete + edit FHRGRP '054' + edit FHRLST 'f054' + edit FCSTHR '054' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f060 + trigger ../../post/jgfs_atmos_post_f060 == complete + edit FHRGRP '060' + edit FHRLST 'f060' + edit FCSTHR '060' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f066 + trigger ../../post/jgfs_atmos_post_f066 == complete + edit FHRGRP '066' + edit FHRLST 'f066' + edit FCSTHR '066' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f072 + trigger ../../post/jgfs_atmos_post_f072 == complete + edit FHRGRP '072' + edit FHRLST 'f072' + edit FCSTHR '072' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f078 + trigger ../../post/jgfs_atmos_post_f078 == complete + edit FHRGRP '078' + edit FHRLST 'f078' + edit FCSTHR '078' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f084 + trigger ../../post/jgfs_atmos_post_f084 == complete + edit FHRGRP '084' + edit FHRLST 'f084' + edit FCSTHR '084' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f090 + trigger ../../post/jgfs_atmos_post_f090 == complete + edit FHRGRP '090' + edit FHRLST 'f090' + edit FCSTHR '090' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f096 + trigger ../../post/jgfs_atmos_post_f096 == complete + edit FHRGRP '096' + edit FHRLST 'f096' + edit FCSTHR '096' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f102 + trigger ../../post/jgfs_atmos_post_f102 == complete + edit FHRGRP '102' + edit FHRLST 'f102' + edit FCSTHR '102' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f108 + trigger ../../post/jgfs_atmos_post_f108 == complete + edit FHRGRP '108' + edit FHRLST 'f108' + edit FCSTHR '108' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f114 + trigger ../../post/jgfs_atmos_post_f114 == complete + edit FHRGRP '114' + edit FHRLST 'f114' + edit FCSTHR '114' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f120 + trigger ../../post/jgfs_atmos_post_f120 == complete + edit FHRGRP '120' + edit FHRLST 'f120' + edit FCSTHR '120' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f126 + trigger ../../post/jgfs_atmos_post_f126 == complete + edit FHRGRP '126' + edit FHRLST 'f126' + edit FCSTHR '126' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f132 + trigger ../../post/jgfs_atmos_post_f132 == complete + edit FHRGRP '132' + edit FHRLST 'f132' + edit FCSTHR '132' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f138 + trigger ../../post/jgfs_atmos_post_f138 == complete + edit FHRGRP '138' + edit FHRLST 'f138' + edit FCSTHR '138' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f144 + trigger ../../post/jgfs_atmos_post_f144 == complete + edit FHRGRP '144' + edit FHRLST 'f144' + edit FCSTHR '144' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f150 + trigger ../../post/jgfs_atmos_post_f150 == complete + edit FHRGRP '150' + edit FHRLST 'f150' + edit FCSTHR '150' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f156 + trigger ../../post/jgfs_atmos_post_f156 == complete + edit FHRGRP '156' + edit FHRLST 'f156' + edit FCSTHR '156' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f162 + trigger ../../post/jgfs_atmos_post_f162 == complete + edit FHRGRP '162' + edit FHRLST 'f162' + edit FCSTHR '162' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f168 + trigger ../../post/jgfs_atmos_post_f168 == complete + edit FHRGRP '168' + edit FHRLST 'f168' + edit FCSTHR '168' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f174 + trigger ../../post/jgfs_atmos_post_f174 == complete + edit FHRGRP '174' + edit FHRLST 'f174' + edit FCSTHR '174' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f180 + trigger ../../post/jgfs_atmos_post_f180 == complete + edit FHRGRP '180' + edit FHRLST 'f180' + edit FCSTHR '180' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f186 + trigger ../../post/jgfs_atmos_post_f186 == complete + edit FHRGRP '186' + edit FHRLST 'f186' + edit FCSTHR '186' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f192 + trigger ../../post/jgfs_atmos_post_f192 == complete + edit FHRGRP '192' + edit FHRLST 'f192' + edit FCSTHR '192' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f198 + trigger ../../post/jgfs_atmos_post_f198 == complete + edit FHRGRP '198' + edit FHRLST 'f198' + edit FCSTHR '198' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f204 + trigger ../../post/jgfs_atmos_post_f204 == complete + edit FHRGRP '204' + edit FHRLST 'f204' + edit FCSTHR '204' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f210 + trigger ../../post/jgfs_atmos_post_f210 == complete + edit FHRGRP '210' + edit FHRLST 'f210' + edit FCSTHR '210' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f216 + trigger ../../post/jgfs_atmos_post_f216 == complete + edit FHRGRP '216' + edit FHRLST 'f216' + edit FCSTHR '216' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f222 + trigger ../../post/jgfs_atmos_post_f222 == complete + edit FHRGRP '222' + edit FHRLST 'f222' + edit FCSTHR '222' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f228 + trigger ../../post/jgfs_atmos_post_f228 == complete + edit FHRGRP '228' + edit FHRLST 'f228' + edit FCSTHR '228' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f234 + trigger ../../post/jgfs_atmos_post_f234 == complete + edit FHRGRP '234' + edit FHRLST 'f234' + edit FCSTHR '234' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f240 + trigger ../../post/jgfs_atmos_post_f240 == complete + edit FHRGRP '240' + edit FHRLST 'f240' + edit FCSTHR '240' + edit TRDRUN 'YES' + endfamily + endfamily + family gempak + task jgfs_atmos_gempak + trigger ../../atmos/analysis/jgfs_atmos_analysis == complete + task jgfs_atmos_gempak_meta + trigger ../../atmos/analysis/jgfs_atmos_analysis == complete + task jgfs_atmos_gempak_ncdc_upapgif + trigger ./jgfs_atmos_gempak == active or ./jgfs_atmos_gempak == complete + task jgfs_atmos_npoess_pgrb2_0p5deg + trigger ../post/jgfs_atmos_post_anl eq active or ../post/jgfs_atmos_post_anl == complete + task jgfs_atmos_pgrb2_spec_gempak + trigger ./jgfs_atmos_npoess_pgrb2_0p5deg == complete + endfamily + family verf + task jgfs_atmos_vminmon + trigger ../analysis/jgfs_atmos_analysis == complete + endfamily + endfamily + family wave + family init + task jgfs_wave_init + trigger /prod/primary/06/obsproc/v1.0/gfs/atmos/prep/jobsproc_gfs_atmos_prep == complete + endfamily + family prep + task jgfs_wave_prep + trigger ../init/jgfs_wave_init == complete + endfamily + family post + task jgfs_wave_postsbs + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post000 + task jgfs_wave_postpnt + trigger ../../jgfs_forecast == complete + task jgfs_wave_post_bndpnt + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post180 + task jgfs_wave_post_bndpntbll + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post180 + task jgfs_wave_prdgen_gridded + trigger ./jgfs_wave_postsbs == active or ./jgfs_wave_postsbs == complete + task jgfs_wave_prdgen_bulls + trigger ./jgfs_wave_postpnt == complete and ./jgfs_wave_postsbs == complete + endfamily + family gempak + task jgfs_wave_gempak + trigger ../post/jgfs_wave_postsbs == active or ../post/jgfs_wave_postsbs == complete + endfamily + endfamily + task jgfs_forecast + trigger ./atmos/analysis/jgfs_atmos_analysis:release_fcst and ./wave/prep/jgfs_wave_prep == complete + endfamily + family gdas + edit RUN 'gdas' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/gdas' + family atmos + family obsproc + family dump + task jgdas_atmos_tropcy_qc_reloc + trigger :TIME >= 1145 and :TIME < 1745 + endfamily + family prep + task jgdas_atmos_emcsfc_sfc_prep + trigger /prod/primary/06/obsproc/v1.0/gdas/atmos/dump/jobsproc_gdas_atmos_dump:release_sfcprep + endfamily + endfamily + family analysis + task jgdas_atmos_analysis + trigger /prod/primary/06/obsproc/v1.0/gdas/atmos/prep/jobsproc_gdas_atmos_prep == complete and ../obsproc/prep/jgdas_atmos_emcsfc_sfc_prep == complete + event 1 release_fcst + task jgdas_atmos_analysis_calc + trigger ./jgdas_atmos_analysis == complete + task jgdas_atmos_analysis_diag + trigger ./jgdas_atmos_analysis == complete + endfamily + family post + task jgdas_atmos_post_manager + trigger ../../jgdas_forecast == active + event 1 release_postanl + event 2 release_post000 + event 3 release_post001 + event 4 release_post002 + event 5 release_post003 + event 6 release_post004 + event 7 release_post005 + event 8 release_post006 + event 9 release_post007 + event 10 release_post008 + event 11 release_post009 + task jgdas_atmos_post_anl + trigger ./jgdas_atmos_post_manager:release_postanl + edit FHRGRP '000' + edit FHRLST 'anl' + edit HR 'anl' + edit FHR 'anl' + task jgdas_atmos_post_f000 + trigger ./jgdas_atmos_post_manager:release_post000 + edit FHR 'f000' + edit HR '000' + edit FHRGRP '001' + edit FHRLST 'f000' + task jgdas_atmos_post_f001 + trigger ./jgdas_atmos_post_manager:release_post001 + edit FHR 'f001' + edit HR '001' + edit FHRGRP '002' + edit FHRLST 'f001' + task jgdas_atmos_post_f002 + trigger ./jgdas_atmos_post_manager:release_post002 + edit FHR 'f002' + edit HR '002' + edit FHRGRP '003' + edit FHRLST 'f002' + task jgdas_atmos_post_f003 + trigger ./jgdas_atmos_post_manager:release_post003 + edit FHR 'f003' + edit HR '003' + edit FHRGRP '004' + edit FHRLST 'f003' + task jgdas_atmos_post_f004 + trigger ./jgdas_atmos_post_manager:release_post004 + edit FHR 'f004' + edit HR '004' + edit FHRGRP '005' + edit FHRLST 'f004' + task jgdas_atmos_post_f005 + trigger ./jgdas_atmos_post_manager:release_post005 + edit FHR 'f005' + edit HR '005' + edit FHRGRP '006' + edit FHRLST 'f005' + task jgdas_atmos_post_f006 + trigger ./jgdas_atmos_post_manager:release_post006 + edit FHR 'f006' + edit HR '006' + edit FHRGRP '007' + edit FHRLST 'f006' + task jgdas_atmos_post_f007 + trigger ./jgdas_atmos_post_manager:release_post007 + edit FHR 'f007' + edit HR '007' + edit FHRGRP '008' + edit FHRLST 'f007' + task jgdas_atmos_post_f008 + trigger ./jgdas_atmos_post_manager:release_post008 + edit FHR 'f008' + edit HR '008' + edit FHRGRP '009' + edit FHRLST 'f008' + task jgdas_atmos_post_f009 + trigger ./jgdas_atmos_post_manager:release_post009 + edit FHR 'f009' + edit HR '009' + edit FHRGRP '010' + edit FHRLST 'f009' + endfamily + family post_processing + task jgdas_atmos_chgres_forenkf + trigger ../../jgdas_forecast == complete and ../../../enkfgdas/forecast == complete + endfamily + family gempak + task jgdas_atmos_gempak + trigger ../../jgdas_forecast == complete + task jgdas_atmos_gempak_meta_ncdc + trigger ./jgdas_atmos_gempak == complete + endfamily + family verf + task jgdas_atmos_vminmon + trigger ../analysis/jgdas_atmos_analysis == complete + task jgdas_atmos_verfrad + trigger ../analysis/jgdas_atmos_analysis_diag == complete + task jgdas_atmos_verfozn + trigger ../analysis/jgdas_atmos_analysis_diag == complete + endfamily + endfamily + family wave + family init + task jgdas_wave_init + trigger /prod/primary/06/obsproc/v1.0/gdas/atmos/prep/jobsproc_gdas_atmos_prep == complete + endfamily + family prep + task jgdas_wave_prep + trigger ../init/jgdas_wave_init == complete + endfamily + family post + task jgdas_wave_postsbs + trigger ../../atmos/post/jgdas_atmos_post_manager:release_post000 + task jgdas_wave_postpnt + trigger ../../jgdas_forecast == complete + endfamily + endfamily + task jgdas_forecast + trigger ./atmos/analysis/jgdas_atmos_analysis:release_fcst and ./wave/prep/jgdas_wave_prep == complete + endfamily + family enkfgdas + edit RUN 'gdas' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas' + family analysis + family create + task jenkfgdas_select_obs + trigger /prod/primary/06/obsproc/v1.0/gdas/atmos/prep/jobsproc_gdas_atmos_prep == complete and /prod/primary/00/gfs/v16.2/enkfgdas/post == complete + task jenkfgdas_diag + trigger ./jenkfgdas_select_obs == complete + task jenkfgdas_update + trigger ./jenkfgdas_diag == complete + endfamily + family recenter + family ecen + trigger ../create/jenkfgdas_update == complete and ../../../gdas/atmos/analysis/jgdas_atmos_analysis_calc == complete and /prod/primary/00/gfs/v16.2/gdas/atmos/post_processing/jgdas_atmos_chgres_forenkf == complete + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas/analysis/recenter/ecen' + family grp1 + edit FHRGRP '003' + task jenkfgdas_ecen + endfamily + family grp2 + edit FHRGRP '006' + task jenkfgdas_ecen + endfamily + family grp3 + edit FHRGRP '009' + task jenkfgdas_ecen + endfamily + endfamily + task jenkfgdas_sfc + trigger ../create/jenkfgdas_update == complete and ../../../gdas/atmos/analysis/jgdas_atmos_analysis_calc == complete + endfamily + endfamily + family forecast + trigger ./analysis/recenter/ecen == complete and ./analysis/recenter/jenkfgdas_sfc == complete + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas/forecast' + family grp1 + edit ENSGRP '01' + task jenkfgdas_fcst + endfamily + family grp2 + edit ENSGRP '02' + task jenkfgdas_fcst + endfamily + family grp3 + edit ENSGRP '03' + task jenkfgdas_fcst + endfamily + family grp4 + edit ENSGRP '04' + task jenkfgdas_fcst + endfamily + family grp5 + edit ENSGRP '05' + task jenkfgdas_fcst + endfamily + family grp6 + edit ENSGRP '06' + task jenkfgdas_fcst + endfamily + family grp7 + edit ENSGRP '07' + task jenkfgdas_fcst + endfamily + family grp8 + edit ENSGRP '08' + task jenkfgdas_fcst + endfamily + family grp9 + edit ENSGRP '09' + task jenkfgdas_fcst + endfamily + family grp10 + edit ENSGRP '10' + task jenkfgdas_fcst + endfamily + family grp11 + edit ENSGRP '11' + task jenkfgdas_fcst + endfamily + family grp12 + edit ENSGRP '12' + task jenkfgdas_fcst + endfamily + family grp13 + edit ENSGRP '13' + task jenkfgdas_fcst + endfamily + family grp14 + edit ENSGRP '14' + task jenkfgdas_fcst + endfamily + family grp15 + edit ENSGRP '15' + task jenkfgdas_fcst + endfamily + family grp16 + edit ENSGRP '16' + task jenkfgdas_fcst + endfamily + family grp17 + edit ENSGRP '17' + task jenkfgdas_fcst + endfamily + family grp18 + edit ENSGRP '18' + task jenkfgdas_fcst + endfamily + family grp19 + edit ENSGRP '19' + task jenkfgdas_fcst + endfamily + family grp20 + edit ENSGRP '20' + task jenkfgdas_fcst + endfamily + family grp21 + edit ENSGRP '21' + task jenkfgdas_fcst + endfamily + family grp22 + edit ENSGRP '22' + task jenkfgdas_fcst + endfamily + family grp23 + edit ENSGRP '23' + task jenkfgdas_fcst + endfamily + family grp24 + edit ENSGRP '24' + task jenkfgdas_fcst + endfamily + family grp25 + edit ENSGRP '25' + task jenkfgdas_fcst + endfamily + family grp26 + edit ENSGRP '26' + task jenkfgdas_fcst + endfamily + family grp27 + edit ENSGRP '27' + task jenkfgdas_fcst + endfamily + family grp28 + edit ENSGRP '28' + task jenkfgdas_fcst + endfamily + family grp29 + edit ENSGRP '29' + task jenkfgdas_fcst + endfamily + family grp30 + edit ENSGRP '30' + task jenkfgdas_fcst + endfamily + family grp31 + edit ENSGRP '31' + task jenkfgdas_fcst + endfamily + family grp32 + edit ENSGRP '32' + task jenkfgdas_fcst + endfamily + family grp33 + edit ENSGRP '33' + task jenkfgdas_fcst + endfamily + family grp34 + edit ENSGRP '34' + task jenkfgdas_fcst + endfamily + family grp35 + edit ENSGRP '35' + task jenkfgdas_fcst + endfamily + family grp36 + edit ENSGRP '36' + task jenkfgdas_fcst + endfamily + family grp37 + edit ENSGRP '37' + task jenkfgdas_fcst + endfamily + family grp38 + edit ENSGRP '38' + task jenkfgdas_fcst + endfamily + family grp39 + edit ENSGRP '39' + task jenkfgdas_fcst + endfamily + family grp40 + edit ENSGRP '40' + task jenkfgdas_fcst + endfamily + endfamily + family post + trigger ./forecast == complete + task jenkfgdas_post_f003 + edit FHMIN_EPOS '003' + edit FHMAX_EPOS '003' + edit FHOUT_EPOS '003' + task jenkfgdas_post_f004 + edit FHMIN_EPOS '004' + edit FHMAX_EPOS '004' + edit FHOUT_EPOS '004' + task jenkfgdas_post_f005 + edit FHMIN_EPOS '005' + edit FHMAX_EPOS '005' + edit FHOUT_EPOS '005' + task jenkfgdas_post_f006 + edit FHMIN_EPOS '006' + edit FHMAX_EPOS '006' + edit FHOUT_EPOS '006' + task jenkfgdas_post_f007 + edit FHMIN_EPOS '007' + edit FHMAX_EPOS '007' + edit FHOUT_EPOS '007' + task jenkfgdas_post_f008 + edit FHMIN_EPOS '008' + edit FHMAX_EPOS '008' + edit FHOUT_EPOS '008' + task jenkfgdas_post_f009 + edit FHMIN_EPOS '009' + edit FHMAX_EPOS '009' + edit FHOUT_EPOS '009' + endfamily + endfamily + endfamily + diff --git a/ecf/defs/gfs_12.def b/ecf/defs/gfs_12.def new file mode 100644 index 0000000000..a242a10de2 --- /dev/null +++ b/ecf/defs/gfs_12.def @@ -0,0 +1,2509 @@ + family v16.2 + family gfs + edit RUN 'gfs' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/gfs' + family atmos + family obsproc + family dump + task jgfs_atmos_tropcy_qc_reloc + trigger :TIME >= 1441 and :TIME < 2041 + event 1 jtwc_bull_email + endfamily + family prep + task jgfs_atmos_emcsfc_sfc_prep + trigger /prod/primary/12/obsproc/v1.0/gfs/atmos/dump/jobsproc_gfs_atmos_dump:release_sfcprep + endfamily + endfamily + family analysis + task jgfs_atmos_analysis + trigger /prod/primary/12/obsproc/v1.0/gfs/atmos/prep/jobsproc_gfs_atmos_prep == complete and ../obsproc/prep/jgfs_atmos_emcsfc_sfc_prep == complete + event 1 release_fcst + task jgfs_atmos_analysis_calc + trigger ./jgfs_atmos_analysis == complete + endfamily + family post + task jgfs_atmos_post_manager + trigger ../analysis/jgfs_atmos_analysis == complete + event 1 release_postanl + event 2 release_post000 + event 3 release_post001 + event 4 release_post002 + event 5 release_post003 + event 6 release_post004 + event 7 release_post005 + event 8 release_post006 + event 9 release_post007 + event 10 release_post008 + event 11 release_post009 + event 12 release_post010 + event 13 release_post011 + event 14 release_post012 + event 15 release_post013 + event 16 release_post014 + event 17 release_post015 + event 18 release_post016 + event 19 release_post017 + event 20 release_post018 + event 21 release_post019 + event 22 release_post020 + event 23 release_post021 + event 24 release_post022 + event 25 release_post023 + event 26 release_post024 + event 27 release_post025 + event 28 release_post026 + event 29 release_post027 + event 30 release_post028 + event 31 release_post029 + event 32 release_post030 + event 33 release_post031 + event 34 release_post032 + event 35 release_post033 + event 36 release_post034 + event 37 release_post035 + event 38 release_post036 + event 39 release_post037 + event 40 release_post038 + event 41 release_post039 + event 42 release_post040 + event 43 release_post041 + event 44 release_post042 + event 45 release_post043 + event 46 release_post044 + event 47 release_post045 + event 48 release_post046 + event 49 release_post047 + event 50 release_post048 + event 51 release_post049 + event 52 release_post050 + event 53 release_post051 + event 54 release_post052 + event 55 release_post053 + event 56 release_post054 + event 57 release_post055 + event 58 release_post056 + event 59 release_post057 + event 60 release_post058 + event 61 release_post059 + event 62 release_post060 + event 63 release_post061 + event 64 release_post062 + event 65 release_post063 + event 66 release_post064 + event 67 release_post065 + event 68 release_post066 + event 69 release_post067 + event 70 release_post068 + event 71 release_post069 + event 72 release_post070 + event 73 release_post071 + event 74 release_post072 + event 75 release_post073 + event 76 release_post074 + event 77 release_post075 + event 78 release_post076 + event 79 release_post077 + event 80 release_post078 + event 81 release_post079 + event 82 release_post080 + event 83 release_post081 + event 84 release_post082 + event 85 release_post083 + event 86 release_post084 + event 87 release_post085 + event 88 release_post086 + event 89 release_post087 + event 90 release_post088 + event 91 release_post089 + event 92 release_post090 + event 93 release_post091 + event 94 release_post092 + event 95 release_post093 + event 96 release_post094 + event 97 release_post095 + event 98 release_post096 + event 99 release_post097 + event 100 release_post098 + event 101 release_post099 + event 102 release_post100 + event 103 release_post101 + event 104 release_post102 + event 105 release_post103 + event 106 release_post104 + event 107 release_post105 + event 108 release_post106 + event 109 release_post107 + event 110 release_post108 + event 111 release_post109 + event 112 release_post110 + event 113 release_post111 + event 114 release_post112 + event 115 release_post113 + event 116 release_post114 + event 117 release_post115 + event 118 release_post116 + event 119 release_post117 + event 120 release_post118 + event 121 release_post119 + event 122 release_post120 + event 123 release_post123 + event 124 release_post126 + event 125 release_post129 + event 126 release_post132 + event 127 release_post135 + event 128 release_post138 + event 129 release_post141 + event 130 release_post144 + event 131 release_post147 + event 132 release_post150 + event 133 release_post153 + event 134 release_post156 + event 135 release_post159 + event 136 release_post162 + event 137 release_post165 + event 138 release_post168 + event 139 release_post171 + event 140 release_post174 + event 141 release_post177 + event 142 release_post180 + event 143 release_post183 + event 144 release_post186 + event 145 release_post189 + event 146 release_post192 + event 147 release_post195 + event 148 release_post198 + event 149 release_post201 + event 150 release_post204 + event 151 release_post207 + event 152 release_post210 + event 153 release_post213 + event 154 release_post216 + event 155 release_post219 + event 156 release_post222 + event 157 release_post225 + event 158 release_post228 + event 159 release_post231 + event 160 release_post234 + event 161 release_post237 + event 162 release_post240 + event 163 release_post243 + event 164 release_post246 + event 165 release_post249 + event 166 release_post252 + event 167 release_post255 + event 168 release_post258 + event 169 release_post261 + event 170 release_post264 + event 171 release_post267 + event 172 release_post270 + event 173 release_post273 + event 174 release_post276 + event 175 release_post279 + event 176 release_post282 + event 177 release_post285 + event 178 release_post288 + event 179 release_post291 + event 180 release_post294 + event 181 release_post297 + event 182 release_post300 + event 183 release_post303 + event 184 release_post306 + event 185 release_post309 + event 186 release_post312 + event 187 release_post315 + event 188 release_post318 + event 189 release_post321 + event 190 release_post324 + event 191 release_post327 + event 192 release_post330 + event 193 release_post333 + event 194 release_post336 + event 195 release_post339 + event 196 release_post342 + event 197 release_post345 + event 198 release_post348 + event 199 release_post351 + event 200 release_post354 + event 201 release_post357 + event 202 release_post360 + event 203 release_post363 + event 204 release_post366 + event 205 release_post369 + event 206 release_post372 + event 207 release_post375 + event 208 release_post378 + event 209 release_post381 + event 210 release_post384 + task jgfs_atmos_post_anl + trigger ./jgfs_atmos_post_manager:release_postanl + edit FHRGRP '000' + edit FHRLST 'anl' + edit HR 'anl' + edit FHR 'anl' + task jgfs_atmos_post_f000 + trigger ./jgfs_atmos_post_manager:release_post000 + edit FHRGRP '001' + edit FHRLST 'f000' + edit FHR 'f000' + edit HR '000' + task jgfs_atmos_post_f001 + trigger ./jgfs_atmos_post_manager:release_post001 + edit FHRGRP '002' + edit FHRLST 'f001' + edit FHR 'f001' + edit HR '001' + task jgfs_atmos_post_f002 + trigger ./jgfs_atmos_post_manager:release_post002 + edit FHRGRP '003' + edit FHRLST 'f002' + edit FHR 'f002' + edit HR '002' + task jgfs_atmos_post_f003 + trigger ./jgfs_atmos_post_manager:release_post003 + edit FHRGRP '004' + edit FHRLST 'f003' + edit FHR 'f003' + edit HR '003' + task jgfs_atmos_post_f004 + trigger ./jgfs_atmos_post_manager:release_post004 + edit FHRGRP '005' + edit FHRLST 'f004' + edit FHR 'f004' + edit HR '004' + task jgfs_atmos_post_f005 + trigger ./jgfs_atmos_post_manager:release_post005 + edit FHRGRP '006' + edit FHRLST 'f005' + edit FHR 'f005' + edit HR '005' + task jgfs_atmos_post_f006 + trigger ./jgfs_atmos_post_manager:release_post006 + edit FHRGRP '007' + edit FHRLST 'f006' + edit FHR 'f006' + edit HR '006' + task jgfs_atmos_post_f007 + trigger ./jgfs_atmos_post_manager:release_post007 + edit FHRGRP '008' + edit FHRLST 'f007' + edit FHR 'f007' + edit HR '007' + task jgfs_atmos_post_f008 + trigger ./jgfs_atmos_post_manager:release_post008 + edit FHRGRP '009' + edit FHRLST 'f008' + edit FHR 'f008' + edit HR '008' + task jgfs_atmos_post_f009 + trigger ./jgfs_atmos_post_manager:release_post009 + edit FHRGRP '010' + edit FHRLST 'f009' + edit FHR 'f009' + edit HR '009' + task jgfs_atmos_post_f010 + trigger ./jgfs_atmos_post_manager:release_post010 + edit FHRGRP '011' + edit FHRLST 'f010' + edit FHR 'f010' + edit HR '010' + task jgfs_atmos_post_f011 + trigger ./jgfs_atmos_post_manager:release_post011 + edit FHRGRP '012' + edit FHRLST 'f011' + edit FHR 'f011' + edit HR '011' + task jgfs_atmos_post_f012 + trigger ./jgfs_atmos_post_manager:release_post012 + edit FHRGRP '013' + edit FHRLST 'f012' + edit FHR 'f012' + edit HR '012' + task jgfs_atmos_post_f013 + trigger ./jgfs_atmos_post_manager:release_post013 + edit FHRGRP '014' + edit FHRLST 'f013' + edit FHR 'f013' + edit HR '013' + task jgfs_atmos_post_f014 + trigger ./jgfs_atmos_post_manager:release_post014 + edit FHRGRP '015' + edit FHRLST 'f014' + edit FHR 'f014' + edit HR '014' + task jgfs_atmos_post_f015 + trigger ./jgfs_atmos_post_manager:release_post015 + edit FHRGRP '016' + edit FHRLST 'f015' + edit FHR 'f015' + edit HR '015' + task jgfs_atmos_post_f016 + trigger ./jgfs_atmos_post_manager:release_post016 + edit FHRGRP '017' + edit FHRLST 'f016' + edit FHR 'f016' + edit HR '016' + task jgfs_atmos_post_f017 + trigger ./jgfs_atmos_post_manager:release_post017 + edit FHRGRP '018' + edit FHRLST 'f017' + edit FHR 'f017' + edit HR '017' + task jgfs_atmos_post_f018 + trigger ./jgfs_atmos_post_manager:release_post018 + edit FHRGRP '019' + edit FHRLST 'f018' + edit FHR 'f018' + edit HR '018' + task jgfs_atmos_post_f019 + trigger ./jgfs_atmos_post_manager:release_post019 + edit FHRGRP '020' + edit FHRLST 'f019' + edit FHR 'f019' + edit HR '019' + task jgfs_atmos_post_f020 + trigger ./jgfs_atmos_post_manager:release_post020 + edit FHRGRP '021' + edit FHRLST 'f020' + edit FHR 'f020' + edit HR '020' + task jgfs_atmos_post_f021 + trigger ./jgfs_atmos_post_manager:release_post021 + edit FHRGRP '022' + edit FHRLST 'f021' + edit FHR 'f021' + edit HR '021' + task jgfs_atmos_post_f022 + trigger ./jgfs_atmos_post_manager:release_post022 + edit FHRGRP '023' + edit FHRLST 'f022' + edit FHR 'f022' + edit HR '022' + task jgfs_atmos_post_f023 + trigger ./jgfs_atmos_post_manager:release_post023 + edit FHRGRP '024' + edit FHRLST 'f023' + edit FHR 'f023' + edit HR '023' + task jgfs_atmos_post_f024 + trigger ./jgfs_atmos_post_manager:release_post024 + edit FHRGRP '025' + edit FHRLST 'f024' + edit FHR 'f024' + edit HR '024' + task jgfs_atmos_post_f025 + trigger ./jgfs_atmos_post_manager:release_post025 + edit FHRGRP '026' + edit FHRLST 'f025' + edit FHR 'f025' + edit HR '025' + task jgfs_atmos_post_f026 + trigger ./jgfs_atmos_post_manager:release_post026 + edit FHRGRP '027' + edit FHRLST 'f026' + edit FHR 'f026' + edit HR '026' + task jgfs_atmos_post_f027 + trigger ./jgfs_atmos_post_manager:release_post027 + edit FHRGRP '028' + edit FHRLST 'f027' + edit FHR 'f027' + edit HR '027' + task jgfs_atmos_post_f028 + trigger ./jgfs_atmos_post_manager:release_post028 + edit FHRGRP '029' + edit FHRLST 'f028' + edit FHR 'f028' + edit HR '028' + task jgfs_atmos_post_f029 + trigger ./jgfs_atmos_post_manager:release_post029 + edit FHRGRP '030' + edit FHRLST 'f029' + edit FHR 'f029' + edit HR '029' + task jgfs_atmos_post_f030 + trigger ./jgfs_atmos_post_manager:release_post030 + edit FHRGRP '031' + edit FHRLST 'f030' + edit FHR 'f030' + edit HR '030' + task jgfs_atmos_post_f031 + trigger ./jgfs_atmos_post_manager:release_post031 + edit FHRGRP '032' + edit FHRLST 'f031' + edit FHR 'f031' + edit HR '031' + task jgfs_atmos_post_f032 + trigger ./jgfs_atmos_post_manager:release_post032 + edit FHRGRP '033' + edit FHRLST 'f032' + edit FHR 'f032' + edit HR '032' + task jgfs_atmos_post_f033 + trigger ./jgfs_atmos_post_manager:release_post033 + edit FHRGRP '034' + edit FHRLST 'f033' + edit FHR 'f033' + edit HR '033' + task jgfs_atmos_post_f034 + trigger ./jgfs_atmos_post_manager:release_post034 + edit FHRGRP '035' + edit FHRLST 'f034' + edit FHR 'f034' + edit HR '034' + task jgfs_atmos_post_f035 + trigger ./jgfs_atmos_post_manager:release_post035 + edit FHRGRP '036' + edit FHRLST 'f035' + edit FHR 'f035' + edit HR '035' + task jgfs_atmos_post_f036 + trigger ./jgfs_atmos_post_manager:release_post036 + edit FHRGRP '037' + edit FHRLST 'f036' + edit FHR 'f036' + edit HR '036' + task jgfs_atmos_post_f037 + trigger ./jgfs_atmos_post_manager:release_post037 + edit FHRGRP '038' + edit FHRLST 'f037' + edit FHR 'f037' + edit HR '037' + task jgfs_atmos_post_f038 + trigger ./jgfs_atmos_post_manager:release_post038 + edit FHRGRP '039' + edit FHRLST 'f038' + edit FHR 'f038' + edit HR '038' + task jgfs_atmos_post_f039 + trigger ./jgfs_atmos_post_manager:release_post039 + edit FHRGRP '040' + edit FHRLST 'f039' + edit FHR 'f039' + edit HR '039' + task jgfs_atmos_post_f040 + trigger ./jgfs_atmos_post_manager:release_post040 + edit FHRGRP '041' + edit FHRLST 'f040' + edit FHR 'f040' + edit HR '040' + task jgfs_atmos_post_f041 + trigger ./jgfs_atmos_post_manager:release_post041 + edit FHRGRP '042' + edit FHRLST 'f041' + edit FHR 'f041' + edit HR '041' + task jgfs_atmos_post_f042 + trigger ./jgfs_atmos_post_manager:release_post042 + edit FHRGRP '043' + edit FHRLST 'f042' + edit FHR 'f042' + edit HR '042' + task jgfs_atmos_post_f043 + trigger ./jgfs_atmos_post_manager:release_post043 + edit FHRGRP '044' + edit FHRLST 'f043' + edit FHR 'f043' + edit HR '043' + task jgfs_atmos_post_f044 + trigger ./jgfs_atmos_post_manager:release_post044 + edit FHRGRP '045' + edit FHRLST 'f044' + edit FHR 'f044' + edit HR '044' + task jgfs_atmos_post_f045 + trigger ./jgfs_atmos_post_manager:release_post045 + edit FHRGRP '046' + edit FHRLST 'f045' + edit FHR 'f045' + edit HR '045' + task jgfs_atmos_post_f046 + trigger ./jgfs_atmos_post_manager:release_post046 + edit FHRGRP '047' + edit FHRLST 'f046' + edit FHR 'f046' + edit HR '046' + task jgfs_atmos_post_f047 + trigger ./jgfs_atmos_post_manager:release_post047 + edit FHRGRP '048' + edit FHRLST 'f047' + edit FHR 'f047' + edit HR '047' + task jgfs_atmos_post_f048 + trigger ./jgfs_atmos_post_manager:release_post048 + edit FHRGRP '049' + edit FHRLST 'f048' + edit FHR 'f048' + edit HR '048' + task jgfs_atmos_post_f049 + trigger ./jgfs_atmos_post_manager:release_post049 + edit FHRGRP '050' + edit FHRLST 'f049' + edit FHR 'f049' + edit HR '049' + task jgfs_atmos_post_f050 + trigger ./jgfs_atmos_post_manager:release_post050 + edit FHRGRP '051' + edit FHRLST 'f050' + edit FHR 'f050' + edit HR '050' + task jgfs_atmos_post_f051 + trigger ./jgfs_atmos_post_manager:release_post051 + edit FHRGRP '052' + edit FHRLST 'f051' + edit FHR 'f051' + edit HR '051' + task jgfs_atmos_post_f052 + trigger ./jgfs_atmos_post_manager:release_post052 + edit FHRGRP '053' + edit FHRLST 'f052' + edit FHR 'f052' + edit HR '052' + task jgfs_atmos_post_f053 + trigger ./jgfs_atmos_post_manager:release_post053 + edit FHRGRP '054' + edit FHRLST 'f053' + edit FHR 'f053' + edit HR '053' + task jgfs_atmos_post_f054 + trigger ./jgfs_atmos_post_manager:release_post054 + edit FHRGRP '055' + edit FHRLST 'f054' + edit FHR 'f054' + edit HR '054' + task jgfs_atmos_post_f055 + trigger ./jgfs_atmos_post_manager:release_post055 + edit FHRGRP '056' + edit FHRLST 'f055' + edit FHR 'f055' + edit HR '055' + task jgfs_atmos_post_f056 + trigger ./jgfs_atmos_post_manager:release_post056 + edit FHRGRP '057' + edit FHRLST 'f056' + edit FHR 'f056' + edit HR '056' + task jgfs_atmos_post_f057 + trigger ./jgfs_atmos_post_manager:release_post057 + edit FHRGRP '058' + edit FHRLST 'f057' + edit FHR 'f057' + edit HR '057' + task jgfs_atmos_post_f058 + trigger ./jgfs_atmos_post_manager:release_post058 + edit FHRGRP '059' + edit FHRLST 'f058' + edit FHR 'f058' + edit HR '058' + task jgfs_atmos_post_f059 + trigger ./jgfs_atmos_post_manager:release_post059 + edit FHRGRP '060' + edit FHRLST 'f059' + edit FHR 'f059' + edit HR '059' + task jgfs_atmos_post_f060 + trigger ./jgfs_atmos_post_manager:release_post060 + edit FHRGRP '061' + edit FHRLST 'f060' + edit FHR 'f060' + edit HR '060' + task jgfs_atmos_post_f061 + trigger ./jgfs_atmos_post_manager:release_post061 + edit FHRGRP '062' + edit FHRLST 'f061' + edit FHR 'f061' + edit HR '061' + task jgfs_atmos_post_f062 + trigger ./jgfs_atmos_post_manager:release_post062 + edit FHRGRP '063' + edit FHRLST 'f062' + edit FHR 'f062' + edit HR '062' + task jgfs_atmos_post_f063 + trigger ./jgfs_atmos_post_manager:release_post063 + edit FHRGRP '064' + edit FHRLST 'f063' + edit FHR 'f063' + edit HR '063' + task jgfs_atmos_post_f064 + trigger ./jgfs_atmos_post_manager:release_post064 + edit FHRGRP '065' + edit FHRLST 'f064' + edit FHR 'f064' + edit HR '064' + task jgfs_atmos_post_f065 + trigger ./jgfs_atmos_post_manager:release_post065 + edit FHRGRP '066' + edit FHRLST 'f065' + edit FHR 'f065' + edit HR '065' + task jgfs_atmos_post_f066 + trigger ./jgfs_atmos_post_manager:release_post066 + edit FHRGRP '067' + edit FHRLST 'f066' + edit FHR 'f066' + edit HR '066' + task jgfs_atmos_post_f067 + trigger ./jgfs_atmos_post_manager:release_post067 + edit FHRGRP '068' + edit FHRLST 'f067' + edit FHR 'f067' + edit HR '067' + task jgfs_atmos_post_f068 + trigger ./jgfs_atmos_post_manager:release_post068 + edit FHRGRP '069' + edit FHRLST 'f068' + edit FHR 'f068' + edit HR '068' + task jgfs_atmos_post_f069 + trigger ./jgfs_atmos_post_manager:release_post069 + edit FHRGRP '070' + edit FHRLST 'f069' + edit FHR 'f069' + edit HR '069' + task jgfs_atmos_post_f070 + trigger ./jgfs_atmos_post_manager:release_post070 + edit FHRGRP '071' + edit FHRLST 'f070' + edit FHR 'f070' + edit HR '070' + task jgfs_atmos_post_f071 + trigger ./jgfs_atmos_post_manager:release_post071 + edit FHRGRP '072' + edit FHRLST 'f071' + edit FHR 'f071' + edit HR '071' + task jgfs_atmos_post_f072 + trigger ./jgfs_atmos_post_manager:release_post072 + edit FHRGRP '073' + edit FHRLST 'f072' + edit FHR 'f072' + edit HR '072' + task jgfs_atmos_post_f073 + trigger ./jgfs_atmos_post_manager:release_post073 + edit FHRGRP '074' + edit FHRLST 'f073' + edit FHR 'f073' + edit HR '073' + task jgfs_atmos_post_f074 + trigger ./jgfs_atmos_post_manager:release_post074 + edit FHRGRP '075' + edit FHRLST 'f074' + edit FHR 'f074' + edit HR '074' + task jgfs_atmos_post_f075 + trigger ./jgfs_atmos_post_manager:release_post075 + edit FHRGRP '076' + edit FHRLST 'f075' + edit FHR 'f075' + edit HR '075' + task jgfs_atmos_post_f076 + trigger ./jgfs_atmos_post_manager:release_post076 + edit FHRGRP '077' + edit FHRLST 'f076' + edit FHR 'f076' + edit HR '076' + task jgfs_atmos_post_f077 + trigger ./jgfs_atmos_post_manager:release_post077 + edit FHRGRP '078' + edit FHRLST 'f077' + edit FHR 'f077' + edit HR '077' + task jgfs_atmos_post_f078 + trigger ./jgfs_atmos_post_manager:release_post078 + edit FHRGRP '079' + edit FHRLST 'f078' + edit FHR 'f078' + edit HR '078' + task jgfs_atmos_post_f079 + trigger ./jgfs_atmos_post_manager:release_post079 + edit FHRGRP '080' + edit FHRLST 'f079' + edit FHR 'f079' + edit HR '079' + task jgfs_atmos_post_f080 + trigger ./jgfs_atmos_post_manager:release_post080 + edit FHRGRP '081' + edit FHRLST 'f080' + edit FHR 'f080' + edit HR '080' + task jgfs_atmos_post_f081 + trigger ./jgfs_atmos_post_manager:release_post081 + edit FHRGRP '082' + edit FHRLST 'f081' + edit FHR 'f081' + edit HR '081' + task jgfs_atmos_post_f082 + trigger ./jgfs_atmos_post_manager:release_post082 + edit FHRGRP '083' + edit FHRLST 'f082' + edit FHR 'f082' + edit HR '082' + task jgfs_atmos_post_f083 + trigger ./jgfs_atmos_post_manager:release_post083 + edit FHRGRP '084' + edit FHRLST 'f083' + edit FHR 'f083' + edit HR '083' + task jgfs_atmos_post_f084 + trigger ./jgfs_atmos_post_manager:release_post084 + edit FHRGRP '085' + edit FHRLST 'f084' + edit FHR 'f084' + edit HR '084' + task jgfs_atmos_post_f085 + trigger ./jgfs_atmos_post_manager:release_post085 + edit FHRGRP '086' + edit FHRLST 'f085' + edit FHR 'f085' + edit HR '085' + task jgfs_atmos_post_f086 + trigger ./jgfs_atmos_post_manager:release_post086 + edit FHRGRP '087' + edit FHRLST 'f086' + edit FHR 'f086' + edit HR '086' + task jgfs_atmos_post_f087 + trigger ./jgfs_atmos_post_manager:release_post087 + edit FHRGRP '088' + edit FHRLST 'f087' + edit FHR 'f087' + edit HR '087' + task jgfs_atmos_post_f088 + trigger ./jgfs_atmos_post_manager:release_post088 + edit FHRGRP '089' + edit FHRLST 'f088' + edit FHR 'f088' + edit HR '088' + task jgfs_atmos_post_f089 + trigger ./jgfs_atmos_post_manager:release_post089 + edit FHRGRP '090' + edit FHRLST 'f089' + edit FHR 'f089' + edit HR '089' + task jgfs_atmos_post_f090 + trigger ./jgfs_atmos_post_manager:release_post090 + edit FHRGRP '091' + edit FHRLST 'f090' + edit FHR 'f090' + edit HR '090' + task jgfs_atmos_post_f091 + trigger ./jgfs_atmos_post_manager:release_post091 + edit FHRGRP '092' + edit FHRLST 'f091' + edit FHR 'f091' + edit HR '091' + task jgfs_atmos_post_f092 + trigger ./jgfs_atmos_post_manager:release_post092 + edit FHRGRP '093' + edit FHRLST 'f092' + edit FHR 'f092' + edit HR '092' + task jgfs_atmos_post_f093 + trigger ./jgfs_atmos_post_manager:release_post093 + edit FHRGRP '094' + edit FHRLST 'f093' + edit FHR 'f093' + edit HR '093' + task jgfs_atmos_post_f094 + trigger ./jgfs_atmos_post_manager:release_post094 + edit FHRGRP '095' + edit FHRLST 'f094' + edit FHR 'f094' + edit HR '094' + task jgfs_atmos_post_f095 + trigger ./jgfs_atmos_post_manager:release_post095 + edit FHRGRP '096' + edit FHRLST 'f095' + edit FHR 'f095' + edit HR '095' + task jgfs_atmos_post_f096 + trigger ./jgfs_atmos_post_manager:release_post096 + edit FHRGRP '097' + edit FHRLST 'f096' + edit FHR 'f096' + edit HR '096' + task jgfs_atmos_post_f097 + trigger ./jgfs_atmos_post_manager:release_post097 + edit FHRGRP '098' + edit FHRLST 'f097' + edit FHR 'f097' + edit HR '097' + task jgfs_atmos_post_f098 + trigger ./jgfs_atmos_post_manager:release_post098 + edit FHRGRP '099' + edit FHRLST 'f098' + edit FHR 'f098' + edit HR '098' + task jgfs_atmos_post_f099 + trigger ./jgfs_atmos_post_manager:release_post099 + edit FHRGRP '100' + edit FHRLST 'f099' + edit FHR 'f099' + edit HR '099' + task jgfs_atmos_post_f100 + trigger ./jgfs_atmos_post_manager:release_post100 + edit FHRGRP '101' + edit FHRLST 'f100' + edit FHR 'f100' + edit HR '100' + task jgfs_atmos_post_f101 + trigger ./jgfs_atmos_post_manager:release_post101 + edit FHRGRP '102' + edit FHRLST 'f101' + edit FHR 'f101' + edit HR '101' + task jgfs_atmos_post_f102 + trigger ./jgfs_atmos_post_manager:release_post102 + edit FHRGRP '103' + edit FHRLST 'f102' + edit FHR 'f102' + edit HR '102' + task jgfs_atmos_post_f103 + trigger ./jgfs_atmos_post_manager:release_post103 + edit FHRGRP '104' + edit FHRLST 'f103' + edit FHR 'f103' + edit HR '103' + task jgfs_atmos_post_f104 + trigger ./jgfs_atmos_post_manager:release_post104 + edit FHRGRP '105' + edit FHRLST 'f104' + edit FHR 'f104' + edit HR '104' + task jgfs_atmos_post_f105 + trigger ./jgfs_atmos_post_manager:release_post105 + edit FHRGRP '106' + edit FHRLST 'f105' + edit FHR 'f105' + edit HR '105' + task jgfs_atmos_post_f106 + trigger ./jgfs_atmos_post_manager:release_post106 + edit FHRGRP '107' + edit FHRLST 'f106' + edit FHR 'f106' + edit HR '106' + task jgfs_atmos_post_f107 + trigger ./jgfs_atmos_post_manager:release_post107 + edit FHRGRP '108' + edit FHRLST 'f107' + edit FHR 'f107' + edit HR '107' + task jgfs_atmos_post_f108 + trigger ./jgfs_atmos_post_manager:release_post108 + edit FHRGRP '109' + edit FHRLST 'f108' + edit FHR 'f108' + edit HR '108' + task jgfs_atmos_post_f109 + trigger ./jgfs_atmos_post_manager:release_post109 + edit FHRGRP '110' + edit FHRLST 'f109' + edit FHR 'f109' + edit HR '109' + task jgfs_atmos_post_f110 + trigger ./jgfs_atmos_post_manager:release_post110 + edit FHRGRP '111' + edit FHRLST 'f110' + edit FHR 'f110' + edit HR '110' + task jgfs_atmos_post_f111 + trigger ./jgfs_atmos_post_manager:release_post111 + edit FHRGRP '112' + edit FHRLST 'f111' + edit FHR 'f111' + edit HR '111' + task jgfs_atmos_post_f112 + trigger ./jgfs_atmos_post_manager:release_post112 + edit FHRGRP '113' + edit FHRLST 'f112' + edit FHR 'f112' + edit HR '112' + task jgfs_atmos_post_f113 + trigger ./jgfs_atmos_post_manager:release_post113 + edit FHRGRP '114' + edit FHRLST 'f113' + edit FHR 'f113' + edit HR '113' + task jgfs_atmos_post_f114 + trigger ./jgfs_atmos_post_manager:release_post114 + edit FHRGRP '115' + edit FHRLST 'f114' + edit FHR 'f114' + edit HR '114' + task jgfs_atmos_post_f115 + trigger ./jgfs_atmos_post_manager:release_post115 + edit FHRGRP '116' + edit FHRLST 'f115' + edit FHR 'f115' + edit HR '115' + task jgfs_atmos_post_f116 + trigger ./jgfs_atmos_post_manager:release_post116 + edit FHRGRP '117' + edit FHRLST 'f116' + edit FHR 'f116' + edit HR '116' + task jgfs_atmos_post_f117 + trigger ./jgfs_atmos_post_manager:release_post117 + edit FHRGRP '118' + edit FHRLST 'f117' + edit FHR 'f117' + edit HR '117' + task jgfs_atmos_post_f118 + trigger ./jgfs_atmos_post_manager:release_post118 + edit FHRGRP '119' + edit FHRLST 'f118' + edit FHR 'f118' + edit HR '118' + task jgfs_atmos_post_f119 + trigger ./jgfs_atmos_post_manager:release_post119 + edit FHRGRP '120' + edit FHRLST 'f119' + edit FHR 'f119' + edit HR '119' + task jgfs_atmos_post_f120 + trigger ./jgfs_atmos_post_manager:release_post120 + edit FHRGRP '121' + edit FHRLST 'f120' + edit FHR 'f120' + edit HR '120' + task jgfs_atmos_post_f123 + trigger ./jgfs_atmos_post_manager:release_post123 + edit FHRGRP '122' + edit FHRLST 'f123' + edit FHR 'f123' + edit HR '123' + task jgfs_atmos_post_f126 + trigger ./jgfs_atmos_post_manager:release_post126 + edit FHRGRP '123' + edit FHRLST 'f126' + edit FHR 'f126' + edit HR '126' + task jgfs_atmos_post_f129 + trigger ./jgfs_atmos_post_manager:release_post129 + edit FHRGRP '124' + edit FHRLST 'f129' + edit FHR 'f129' + edit HR '129' + task jgfs_atmos_post_f132 + trigger ./jgfs_atmos_post_manager:release_post132 + edit FHRGRP '125' + edit FHRLST 'f132' + edit FHR 'f132' + edit HR '132' + task jgfs_atmos_post_f135 + trigger ./jgfs_atmos_post_manager:release_post135 + edit FHRGRP '126' + edit FHRLST 'f135' + edit FHR 'f135' + edit HR '135' + task jgfs_atmos_post_f138 + trigger ./jgfs_atmos_post_manager:release_post138 + edit FHRGRP '127' + edit FHRLST 'f138' + edit FHR 'f138' + edit HR '138' + task jgfs_atmos_post_f141 + trigger ./jgfs_atmos_post_manager:release_post141 + edit FHRGRP '128' + edit FHRLST 'f141' + edit FHR 'f141' + edit HR '141' + task jgfs_atmos_post_f144 + trigger ./jgfs_atmos_post_manager:release_post144 + edit FHRGRP '129' + edit FHRLST 'f144' + edit FHR 'f144' + edit HR '144' + task jgfs_atmos_post_f147 + trigger ./jgfs_atmos_post_manager:release_post147 + edit FHRGRP '130' + edit FHRLST 'f147' + edit FHR 'f147' + edit HR '147' + task jgfs_atmos_post_f150 + trigger ./jgfs_atmos_post_manager:release_post150 + edit FHRGRP '131' + edit FHRLST 'f150' + edit FHR 'f150' + edit HR '150' + task jgfs_atmos_post_f153 + trigger ./jgfs_atmos_post_manager:release_post153 + edit FHRGRP '132' + edit FHRLST 'f153' + edit FHR 'f153' + edit HR '153' + task jgfs_atmos_post_f156 + trigger ./jgfs_atmos_post_manager:release_post156 + edit FHRGRP '133' + edit FHRLST 'f156' + edit FHR 'f156' + edit HR '156' + task jgfs_atmos_post_f159 + trigger ./jgfs_atmos_post_manager:release_post159 + edit FHRGRP '134' + edit FHRLST 'f159' + edit FHR 'f159' + edit HR '159' + task jgfs_atmos_post_f162 + trigger ./jgfs_atmos_post_manager:release_post162 + edit FHRGRP '135' + edit FHRLST 'f162' + edit FHR 'f162' + edit HR '162' + task jgfs_atmos_post_f165 + trigger ./jgfs_atmos_post_manager:release_post165 + edit FHRGRP '136' + edit FHRLST 'f165' + edit FHR 'f165' + edit HR '165' + task jgfs_atmos_post_f168 + trigger ./jgfs_atmos_post_manager:release_post168 + edit FHRGRP '137' + edit FHRLST 'f168' + edit FHR 'f168' + edit HR '168' + task jgfs_atmos_post_f171 + trigger ./jgfs_atmos_post_manager:release_post171 + edit FHRGRP '138' + edit FHRLST 'f171' + edit FHR 'f171' + edit HR '171' + task jgfs_atmos_post_f174 + trigger ./jgfs_atmos_post_manager:release_post174 + edit FHRGRP '139' + edit FHRLST 'f174' + edit FHR 'f174' + edit HR '174' + task jgfs_atmos_post_f177 + trigger ./jgfs_atmos_post_manager:release_post177 + edit FHRGRP '140' + edit FHRLST 'f177' + edit FHR 'f177' + edit HR '177' + task jgfs_atmos_post_f180 + trigger ./jgfs_atmos_post_manager:release_post180 + edit FHRGRP '141' + edit FHRLST 'f180' + edit FHR 'f180' + edit HR '180' + task jgfs_atmos_post_f183 + trigger ./jgfs_atmos_post_manager:release_post183 + edit FHRGRP '142' + edit FHRLST 'f183' + edit FHR 'f183' + edit HR '183' + task jgfs_atmos_post_f186 + trigger ./jgfs_atmos_post_manager:release_post186 + edit FHRGRP '143' + edit FHRLST 'f186' + edit FHR 'f186' + edit HR '186' + task jgfs_atmos_post_f189 + trigger ./jgfs_atmos_post_manager:release_post189 + edit FHRGRP '144' + edit FHRLST 'f189' + edit FHR 'f189' + edit HR '189' + task jgfs_atmos_post_f192 + trigger ./jgfs_atmos_post_manager:release_post192 + edit FHRGRP '145' + edit FHRLST 'f192' + edit FHR 'f192' + edit HR '192' + task jgfs_atmos_post_f195 + trigger ./jgfs_atmos_post_manager:release_post195 + edit FHRGRP '146' + edit FHRLST 'f195' + edit FHR 'f195' + edit HR '195' + task jgfs_atmos_post_f198 + trigger ./jgfs_atmos_post_manager:release_post198 + edit FHRGRP '147' + edit FHRLST 'f198' + edit FHR 'f198' + edit HR '198' + task jgfs_atmos_post_f201 + trigger ./jgfs_atmos_post_manager:release_post201 + edit FHRGRP '148' + edit FHRLST 'f201' + edit FHR 'f201' + edit HR '201' + task jgfs_atmos_post_f204 + trigger ./jgfs_atmos_post_manager:release_post204 + edit FHRGRP '149' + edit FHRLST 'f204' + edit FHR 'f204' + edit HR '204' + task jgfs_atmos_post_f207 + trigger ./jgfs_atmos_post_manager:release_post207 + edit FHRGRP '150' + edit FHRLST 'f207' + edit FHR 'f207' + edit HR '207' + task jgfs_atmos_post_f210 + trigger ./jgfs_atmos_post_manager:release_post210 + edit FHRGRP '151' + edit FHRLST 'f210' + edit FHR 'f210' + edit HR '210' + task jgfs_atmos_post_f213 + trigger ./jgfs_atmos_post_manager:release_post213 + edit FHRGRP '152' + edit FHRLST 'f213' + edit FHR 'f213' + edit HR '213' + task jgfs_atmos_post_f216 + trigger ./jgfs_atmos_post_manager:release_post216 + edit FHRGRP '153' + edit FHRLST 'f216' + edit FHR 'f216' + edit HR '216' + task jgfs_atmos_post_f219 + trigger ./jgfs_atmos_post_manager:release_post219 + edit FHRGRP '154' + edit FHRLST 'f219' + edit FHR 'f219' + edit HR '219' + task jgfs_atmos_post_f222 + trigger ./jgfs_atmos_post_manager:release_post222 + edit FHRGRP '155' + edit FHRLST 'f222' + edit FHR 'f222' + edit HR '222' + task jgfs_atmos_post_f225 + trigger ./jgfs_atmos_post_manager:release_post225 + edit FHRGRP '156' + edit FHRLST 'f225' + edit FHR 'f225' + edit HR '225' + task jgfs_atmos_post_f228 + trigger ./jgfs_atmos_post_manager:release_post228 + edit FHRGRP '157' + edit FHRLST 'f228' + edit FHR 'f228' + edit HR '228' + task jgfs_atmos_post_f231 + trigger ./jgfs_atmos_post_manager:release_post231 + edit FHRGRP '158' + edit FHRLST 'f231' + edit FHR 'f231' + edit HR '231' + task jgfs_atmos_post_f234 + trigger ./jgfs_atmos_post_manager:release_post234 + edit FHRGRP '159' + edit FHRLST 'f234' + edit FHR 'f234' + edit HR '234' + task jgfs_atmos_post_f237 + trigger ./jgfs_atmos_post_manager:release_post237 + edit FHRGRP '160' + edit FHRLST 'f237' + edit FHR 'f237' + edit HR '237' + task jgfs_atmos_post_f240 + trigger ./jgfs_atmos_post_manager:release_post240 + edit FHRGRP '161' + edit FHRLST 'f240' + edit FHR 'f240' + edit HR '240' + task jgfs_atmos_post_f243 + trigger ./jgfs_atmos_post_manager:release_post243 + edit FHRGRP '162' + edit FHRLST 'f243' + edit FHR 'f243' + edit HR '243' + task jgfs_atmos_post_f246 + trigger ./jgfs_atmos_post_manager:release_post246 + edit FHRGRP '163' + edit FHRLST 'f246' + edit FHR 'f246' + edit HR '246' + task jgfs_atmos_post_f249 + trigger ./jgfs_atmos_post_manager:release_post249 + edit FHRGRP '164' + edit FHRLST 'f249' + edit FHR 'f249' + edit HR '249' + task jgfs_atmos_post_f252 + trigger ./jgfs_atmos_post_manager:release_post252 + edit FHRGRP '165' + edit FHRLST 'f252' + edit FHR 'f252' + edit HR '252' + task jgfs_atmos_post_f255 + trigger ./jgfs_atmos_post_manager:release_post255 + edit FHRGRP '166' + edit FHRLST 'f255' + edit FHR 'f255' + edit HR '255' + task jgfs_atmos_post_f258 + trigger ./jgfs_atmos_post_manager:release_post258 + edit FHRGRP '167' + edit FHRLST 'f258' + edit FHR 'f258' + edit HR '258' + task jgfs_atmos_post_f261 + trigger ./jgfs_atmos_post_manager:release_post261 + edit FHRGRP '168' + edit FHRLST 'f261' + edit FHR 'f261' + edit HR '261' + task jgfs_atmos_post_f264 + trigger ./jgfs_atmos_post_manager:release_post264 + edit FHRGRP '169' + edit FHRLST 'f264' + edit FHR 'f264' + edit HR '264' + task jgfs_atmos_post_f267 + trigger ./jgfs_atmos_post_manager:release_post267 + edit FHRGRP '170' + edit FHRLST 'f267' + edit FHR 'f267' + edit HR '267' + task jgfs_atmos_post_f270 + trigger ./jgfs_atmos_post_manager:release_post270 + edit FHRGRP '171' + edit FHRLST 'f270' + edit FHR 'f270' + edit HR '270' + task jgfs_atmos_post_f273 + trigger ./jgfs_atmos_post_manager:release_post273 + edit FHRGRP '172' + edit FHRLST 'f273' + edit FHR 'f273' + edit HR '273' + task jgfs_atmos_post_f276 + trigger ./jgfs_atmos_post_manager:release_post276 + edit FHRGRP '173' + edit FHRLST 'f276' + edit FHR 'f276' + edit HR '276' + task jgfs_atmos_post_f279 + trigger ./jgfs_atmos_post_manager:release_post279 + edit FHRGRP '174' + edit FHRLST 'f279' + edit FHR 'f279' + edit HR '279' + task jgfs_atmos_post_f282 + trigger ./jgfs_atmos_post_manager:release_post282 + edit FHRGRP '175' + edit FHRLST 'f282' + edit FHR 'f282' + edit HR '282' + task jgfs_atmos_post_f285 + trigger ./jgfs_atmos_post_manager:release_post285 + edit FHRGRP '176' + edit FHRLST 'f285' + edit FHR 'f285' + edit HR '285' + task jgfs_atmos_post_f288 + trigger ./jgfs_atmos_post_manager:release_post288 + edit FHRGRP '177' + edit FHRLST 'f288' + edit FHR 'f288' + edit HR '288' + task jgfs_atmos_post_f291 + trigger ./jgfs_atmos_post_manager:release_post291 + edit FHRGRP '178' + edit FHRLST 'f291' + edit FHR 'f291' + edit HR '291' + task jgfs_atmos_post_f294 + trigger ./jgfs_atmos_post_manager:release_post294 + edit FHRGRP '179' + edit FHRLST 'f294' + edit FHR 'f294' + edit HR '294' + task jgfs_atmos_post_f297 + trigger ./jgfs_atmos_post_manager:release_post297 + edit FHRGRP '180' + edit FHRLST 'f297' + edit FHR 'f297' + edit HR '297' + task jgfs_atmos_post_f300 + trigger ./jgfs_atmos_post_manager:release_post300 + edit FHRGRP '181' + edit FHRLST 'f300' + edit FHR 'f300' + edit HR '300' + task jgfs_atmos_post_f303 + trigger ./jgfs_atmos_post_manager:release_post303 + edit FHRGRP '182' + edit FHRLST 'f303' + edit FHR 'f303' + edit HR '303' + task jgfs_atmos_post_f306 + trigger ./jgfs_atmos_post_manager:release_post306 + edit FHRGRP '183' + edit FHRLST 'f306' + edit FHR 'f306' + edit HR '306' + task jgfs_atmos_post_f309 + trigger ./jgfs_atmos_post_manager:release_post309 + edit FHRGRP '184' + edit FHRLST 'f309' + edit FHR 'f309' + edit HR '309' + task jgfs_atmos_post_f312 + trigger ./jgfs_atmos_post_manager:release_post312 + edit FHRGRP '185' + edit FHRLST 'f312' + edit FHR 'f312' + edit HR '312' + task jgfs_atmos_post_f315 + trigger ./jgfs_atmos_post_manager:release_post315 + edit FHRGRP '186' + edit FHRLST 'f315' + edit FHR 'f315' + edit HR '315' + task jgfs_atmos_post_f318 + trigger ./jgfs_atmos_post_manager:release_post318 + edit FHRGRP '187' + edit FHRLST 'f318' + edit FHR 'f318' + edit HR '318' + task jgfs_atmos_post_f321 + trigger ./jgfs_atmos_post_manager:release_post321 + edit FHRGRP '188' + edit FHRLST 'f321' + edit FHR 'f321' + edit HR '321' + task jgfs_atmos_post_f324 + trigger ./jgfs_atmos_post_manager:release_post324 + edit FHRGRP '189' + edit FHRLST 'f324' + edit FHR 'f324' + edit HR '324' + task jgfs_atmos_post_f327 + trigger ./jgfs_atmos_post_manager:release_post327 + edit FHRGRP '190' + edit FHRLST 'f327' + edit FHR 'f327' + edit HR '327' + task jgfs_atmos_post_f330 + trigger ./jgfs_atmos_post_manager:release_post330 + edit FHRGRP '191' + edit FHRLST 'f330' + edit FHR 'f330' + edit HR '330' + task jgfs_atmos_post_f333 + trigger ./jgfs_atmos_post_manager:release_post333 + edit FHRGRP '192' + edit FHRLST 'f333' + edit FHR 'f333' + edit HR '333' + task jgfs_atmos_post_f336 + trigger ./jgfs_atmos_post_manager:release_post336 + edit FHRGRP '193' + edit FHRLST 'f336' + edit FHR 'f336' + edit HR '336' + task jgfs_atmos_post_f339 + trigger ./jgfs_atmos_post_manager:release_post339 + edit FHRGRP '194' + edit FHRLST 'f339' + edit FHR 'f339' + edit HR '339' + task jgfs_atmos_post_f342 + trigger ./jgfs_atmos_post_manager:release_post342 + edit FHRGRP '195' + edit FHRLST 'f342' + edit FHR 'f342' + edit HR '342' + task jgfs_atmos_post_f345 + trigger ./jgfs_atmos_post_manager:release_post345 + edit FHRGRP '196' + edit FHRLST 'f345' + edit FHR 'f345' + edit HR '345' + task jgfs_atmos_post_f348 + trigger ./jgfs_atmos_post_manager:release_post348 + edit FHRGRP '197' + edit FHRLST 'f348' + edit FHR 'f348' + edit HR '348' + task jgfs_atmos_post_f351 + trigger ./jgfs_atmos_post_manager:release_post351 + edit FHRGRP '198' + edit FHRLST 'f351' + edit FHR 'f351' + edit HR '351' + task jgfs_atmos_post_f354 + trigger ./jgfs_atmos_post_manager:release_post354 + edit FHRGRP '199' + edit FHRLST 'f354' + edit FHR 'f354' + edit HR '354' + task jgfs_atmos_post_f357 + trigger ./jgfs_atmos_post_manager:release_post357 + edit FHRGRP '200' + edit FHRLST 'f357' + edit FHR 'f357' + edit HR '357' + task jgfs_atmos_post_f360 + trigger ./jgfs_atmos_post_manager:release_post360 + edit FHRGRP '201' + edit FHRLST 'f360' + edit FHR 'f360' + edit HR '360' + task jgfs_atmos_post_f363 + trigger ./jgfs_atmos_post_manager:release_post363 + edit FHRGRP '202' + edit FHRLST 'f363' + edit FHR 'f363' + edit HR '363' + task jgfs_atmos_post_f366 + trigger ./jgfs_atmos_post_manager:release_post366 + edit FHRGRP '203' + edit FHRLST 'f366' + edit FHR 'f366' + edit HR '366' + task jgfs_atmos_post_f369 + trigger ./jgfs_atmos_post_manager:release_post369 + edit FHRGRP '204' + edit FHRLST 'f369' + edit FHR 'f369' + edit HR '369' + task jgfs_atmos_post_f372 + trigger ./jgfs_atmos_post_manager:release_post372 + edit FHRGRP '205' + edit FHRLST 'f372' + edit FHR 'f372' + edit HR '372' + task jgfs_atmos_post_f375 + trigger ./jgfs_atmos_post_manager:release_post375 + edit FHRGRP '206' + edit FHRLST 'f375' + edit FHR 'f375' + edit HR '375' + task jgfs_atmos_post_f378 + trigger ./jgfs_atmos_post_manager:release_post378 + edit FHRGRP '207' + edit FHRLST 'f378' + edit FHR 'f378' + edit HR '378' + task jgfs_atmos_post_f381 + trigger ./jgfs_atmos_post_manager:release_post381 + edit FHRGRP '208' + edit FHRLST 'f381' + edit FHR 'f381' + edit HR '381' + task jgfs_atmos_post_f384 + trigger ./jgfs_atmos_post_manager:release_post384 + edit FHRGRP '209' + edit FHRLST 'f384' + edit FHR 'f384' + edit HR '384' + endfamily + family post_processing + family bufr_sounding + task jgfs_atmos_postsnd + trigger ../../post/jgfs_atmos_post_manager:release_post000 + endfamily + family bulletins + task jgfs_atmos_fbwind + trigger ../../post/jgfs_atmos_post_f006 == complete and ../../post/jgfs_atmos_post_f012 == complete and ../../post/jgfs_atmos_post_f024 == complete + endfamily + family awips_20km_1p0 + task jgfs_atmos_awips_f000 + trigger ../../post/jgfs_atmos_post_f000 == complete + edit FHRGRP '000' + edit FHRLST 'f000' + edit FCSTHR '000' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f003 + trigger ../../post/jgfs_atmos_post_f003 == complete + edit FHRGRP '003' + edit FHRLST 'f003' + edit FCSTHR '003' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f006 + trigger ../../post/jgfs_atmos_post_f006 == complete + edit FHRGRP '006' + edit FHRLST 'f006' + edit FCSTHR '006' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f009 + trigger ../../post/jgfs_atmos_post_f009 == complete + edit FHRGRP '009' + edit FHRLST 'f009' + edit FCSTHR '009' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f012 + trigger ../../post/jgfs_atmos_post_f012 == complete + edit FHRGRP '012' + edit FHRLST 'f012' + edit FCSTHR '012' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f015 + trigger ../../post/jgfs_atmos_post_f015 == complete + edit FHRGRP '015' + edit FHRLST 'f015' + edit FCSTHR '015' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f018 + trigger ../../post/jgfs_atmos_post_f018 == complete + edit FHRGRP '018' + edit FHRLST 'f018' + edit FCSTHR '018' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f021 + trigger ../../post/jgfs_atmos_post_f021 == complete + edit FHRGRP '021' + edit FHRLST 'f021' + edit FCSTHR '021' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f024 + trigger ../../post/jgfs_atmos_post_f024 == complete + edit FHRGRP '024' + edit FHRLST 'f024' + edit FCSTHR '024' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f027 + trigger ../../post/jgfs_atmos_post_f027 == complete + edit FHRGRP '027' + edit FHRLST 'f027' + edit FCSTHR '027' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f030 + trigger ../../post/jgfs_atmos_post_f030 == complete + edit FHRGRP '030' + edit FHRLST 'f030' + edit FCSTHR '030' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f033 + trigger ../../post/jgfs_atmos_post_f033 == complete + edit FHRGRP '033' + edit FHRLST 'f033' + edit FCSTHR '033' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f036 + trigger ../../post/jgfs_atmos_post_f036 == complete + edit FHRGRP '036' + edit FHRLST 'f036' + edit FCSTHR '036' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f039 + trigger ../../post/jgfs_atmos_post_f039 == complete + edit FHRGRP '039' + edit FHRLST 'f039' + edit FCSTHR '039' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f042 + trigger ../../post/jgfs_atmos_post_f042 == complete + edit FHRGRP '042' + edit FHRLST 'f042' + edit FCSTHR '042' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f045 + trigger ../../post/jgfs_atmos_post_f045 == complete + edit FHRGRP '045' + edit FHRLST 'f045' + edit FCSTHR '045' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f048 + trigger ../../post/jgfs_atmos_post_f048 == complete + edit FHRGRP '048' + edit FHRLST 'f048' + edit FCSTHR '048' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f051 + trigger ../../post/jgfs_atmos_post_f051 == complete + edit FHRGRP '051' + edit FHRLST 'f051' + edit FCSTHR '051' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f054 + trigger ../../post/jgfs_atmos_post_f054 == complete + edit FHRGRP '054' + edit FHRLST 'f054' + edit FCSTHR '054' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f057 + trigger ../../post/jgfs_atmos_post_f057 == complete + edit FHRGRP '057' + edit FHRLST 'f057' + edit FCSTHR '057' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f060 + trigger ../../post/jgfs_atmos_post_f060 == complete + edit FHRGRP '060' + edit FHRLST 'f060' + edit FCSTHR '060' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f063 + trigger ../../post/jgfs_atmos_post_f063 == complete + edit FHRGRP '063' + edit FHRLST 'f063' + edit FCSTHR '063' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f066 + trigger ../../post/jgfs_atmos_post_f066 == complete + edit FHRGRP '066' + edit FHRLST 'f066' + edit FCSTHR '066' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f069 + trigger ../../post/jgfs_atmos_post_f069 == complete + edit FHRGRP '069' + edit FHRLST 'f069' + edit FCSTHR '069' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f072 + trigger ../../post/jgfs_atmos_post_f072 == complete + edit FHRGRP '072' + edit FHRLST 'f072' + edit FCSTHR '072' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f075 + trigger ../../post/jgfs_atmos_post_f075 == complete + edit FHRGRP '075' + edit FHRLST 'f075' + edit FCSTHR '075' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f078 + trigger ../../post/jgfs_atmos_post_f078 == complete + edit FHRGRP '078' + edit FHRLST 'f078' + edit FCSTHR '078' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f081 + trigger ../../post/jgfs_atmos_post_f081 == complete + edit FHRGRP '081' + edit FHRLST 'f081' + edit FCSTHR '081' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f084 + trigger ../../post/jgfs_atmos_post_f084 == complete + edit FHRGRP '084' + edit FHRLST 'f084' + edit FCSTHR '084' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f090 + trigger ../../post/jgfs_atmos_post_f090 == complete + edit FHRGRP '090' + edit FHRLST 'f090' + edit FCSTHR '090' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f096 + trigger ../../post/jgfs_atmos_post_f096 == complete + edit FHRGRP '096' + edit FHRLST 'f096' + edit FCSTHR '096' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f102 + trigger ../../post/jgfs_atmos_post_f102 == complete + edit FHRGRP '102' + edit FHRLST 'f102' + edit FCSTHR '102' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f108 + trigger ../../post/jgfs_atmos_post_f108 == complete + edit FHRGRP '108' + edit FHRLST 'f108' + edit FCSTHR '108' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f114 + trigger ../../post/jgfs_atmos_post_f114 == complete + edit FHRGRP '114' + edit FHRLST 'f114' + edit FCSTHR '114' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f120 + trigger ../../post/jgfs_atmos_post_f120 == complete + edit FHRGRP '120' + edit FHRLST 'f120' + edit FCSTHR '120' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f126 + trigger ../../post/jgfs_atmos_post_f126 == complete + edit FHRGRP '126' + edit FHRLST 'f126' + edit FCSTHR '126' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f132 + trigger ../../post/jgfs_atmos_post_f132 == complete + edit FHRGRP '132' + edit FHRLST 'f132' + edit FCSTHR '132' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f138 + trigger ../../post/jgfs_atmos_post_f138 == complete + edit FHRGRP '138' + edit FHRLST 'f138' + edit FCSTHR '138' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f144 + trigger ../../post/jgfs_atmos_post_f144 == complete + edit FHRGRP '144' + edit FHRLST 'f144' + edit FCSTHR '144' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f150 + trigger ../../post/jgfs_atmos_post_f150 == complete + edit FHRGRP '150' + edit FHRLST 'f150' + edit FCSTHR '150' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f156 + trigger ../../post/jgfs_atmos_post_f156 == complete + edit FHRGRP '156' + edit FHRLST 'f156' + edit FCSTHR '156' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f162 + trigger ../../post/jgfs_atmos_post_f162 == complete + edit FHRGRP '162' + edit FHRLST 'f162' + edit FCSTHR '162' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f168 + trigger ../../post/jgfs_atmos_post_f168 == complete + edit FHRGRP '168' + edit FHRLST 'f168' + edit FCSTHR '168' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f174 + trigger ../../post/jgfs_atmos_post_f174 == complete + edit FHRGRP '174' + edit FHRLST 'f174' + edit FCSTHR '174' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f180 + trigger ../../post/jgfs_atmos_post_f180 == complete + edit FHRGRP '180' + edit FHRLST 'f180' + edit FCSTHR '180' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f186 + trigger ../../post/jgfs_atmos_post_f186 == complete + edit FHRGRP '186' + edit FHRLST 'f186' + edit FCSTHR '186' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f192 + trigger ../../post/jgfs_atmos_post_f192 == complete + edit FHRGRP '192' + edit FHRLST 'f192' + edit FCSTHR '192' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f198 + trigger ../../post/jgfs_atmos_post_f198 == complete + edit FHRGRP '198' + edit FHRLST 'f198' + edit FCSTHR '198' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f204 + trigger ../../post/jgfs_atmos_post_f204 == complete + edit FHRGRP '204' + edit FHRLST 'f204' + edit FCSTHR '204' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f210 + trigger ../../post/jgfs_atmos_post_f210 == complete + edit FHRGRP '210' + edit FHRLST 'f210' + edit FCSTHR '210' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f216 + trigger ../../post/jgfs_atmos_post_f216 == complete + edit FHRGRP '216' + edit FHRLST 'f216' + edit FCSTHR '216' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f222 + trigger ../../post/jgfs_atmos_post_f222 == complete + edit FHRGRP '222' + edit FHRLST 'f222' + edit FCSTHR '222' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f228 + trigger ../../post/jgfs_atmos_post_f228 == complete + edit FHRGRP '228' + edit FHRLST 'f228' + edit FCSTHR '228' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f234 + trigger ../../post/jgfs_atmos_post_f234 == complete + edit FHRGRP '234' + edit FHRLST 'f234' + edit FCSTHR '234' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f240 + trigger ../../post/jgfs_atmos_post_f240 == complete + edit FHRGRP '240' + edit FHRLST 'f240' + edit FCSTHR '240' + edit TRDRUN 'YES' + endfamily + family awips_g2 + task jgfs_atmos_awips_g2_f000 + trigger ../../post/jgfs_atmos_post_f000 == complete + edit FHRGRP '000' + edit FHRLST 'f000' + edit FCSTHR '000' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f006 + trigger ../../post/jgfs_atmos_post_f006 == complete + edit FHRGRP '006' + edit FHRLST 'f006' + edit FCSTHR '006' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f012 + trigger ../../post/jgfs_atmos_post_f012 == complete + edit FHRGRP '012' + edit FHRLST 'f012' + edit FCSTHR '012' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f018 + trigger ../../post/jgfs_atmos_post_f018 == complete + edit FHRGRP '018' + edit FHRLST 'f018' + edit FCSTHR '018' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f024 + trigger ../../post/jgfs_atmos_post_f024 == complete + edit FHRGRP '024' + edit FHRLST 'f024' + edit FCSTHR '024' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f030 + trigger ../../post/jgfs_atmos_post_f030 == complete + edit FHRGRP '030' + edit FHRLST 'f030' + edit FCSTHR '030' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f036 + trigger ../../post/jgfs_atmos_post_f036 == complete + edit FHRGRP '036' + edit FHRLST 'f036' + edit FCSTHR '036' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f042 + trigger ../../post/jgfs_atmos_post_f042 == complete + edit FHRGRP '042' + edit FHRLST 'f042' + edit FCSTHR '042' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f048 + trigger ../../post/jgfs_atmos_post_f048 == complete + edit FHRGRP '048' + edit FHRLST 'f048' + edit FCSTHR '048' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f054 + trigger ../../post/jgfs_atmos_post_f054 == complete + edit FHRGRP '054' + edit FHRLST 'f054' + edit FCSTHR '054' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f060 + trigger ../../post/jgfs_atmos_post_f060 == complete + edit FHRGRP '060' + edit FHRLST 'f060' + edit FCSTHR '060' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f066 + trigger ../../post/jgfs_atmos_post_f066 == complete + edit FHRGRP '066' + edit FHRLST 'f066' + edit FCSTHR '066' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f072 + trigger ../../post/jgfs_atmos_post_f072 == complete + edit FHRGRP '072' + edit FHRLST 'f072' + edit FCSTHR '072' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f078 + trigger ../../post/jgfs_atmos_post_f078 == complete + edit FHRGRP '078' + edit FHRLST 'f078' + edit FCSTHR '078' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f084 + trigger ../../post/jgfs_atmos_post_f084 == complete + edit FHRGRP '084' + edit FHRLST 'f084' + edit FCSTHR '084' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f090 + trigger ../../post/jgfs_atmos_post_f090 == complete + edit FHRGRP '090' + edit FHRLST 'f090' + edit FCSTHR '090' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f096 + trigger ../../post/jgfs_atmos_post_f096 == complete + edit FHRGRP '096' + edit FHRLST 'f096' + edit FCSTHR '096' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f102 + trigger ../../post/jgfs_atmos_post_f102 == complete + edit FHRGRP '102' + edit FHRLST 'f102' + edit FCSTHR '102' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f108 + trigger ../../post/jgfs_atmos_post_f108 == complete + edit FHRGRP '108' + edit FHRLST 'f108' + edit FCSTHR '108' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f114 + trigger ../../post/jgfs_atmos_post_f114 == complete + edit FHRGRP '114' + edit FHRLST 'f114' + edit FCSTHR '114' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f120 + trigger ../../post/jgfs_atmos_post_f120 == complete + edit FHRGRP '120' + edit FHRLST 'f120' + edit FCSTHR '120' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f126 + trigger ../../post/jgfs_atmos_post_f126 == complete + edit FHRGRP '126' + edit FHRLST 'f126' + edit FCSTHR '126' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f132 + trigger ../../post/jgfs_atmos_post_f132 == complete + edit FHRGRP '132' + edit FHRLST 'f132' + edit FCSTHR '132' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f138 + trigger ../../post/jgfs_atmos_post_f138 == complete + edit FHRGRP '138' + edit FHRLST 'f138' + edit FCSTHR '138' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f144 + trigger ../../post/jgfs_atmos_post_f144 == complete + edit FHRGRP '144' + edit FHRLST 'f144' + edit FCSTHR '144' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f150 + trigger ../../post/jgfs_atmos_post_f150 == complete + edit FHRGRP '150' + edit FHRLST 'f150' + edit FCSTHR '150' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f156 + trigger ../../post/jgfs_atmos_post_f156 == complete + edit FHRGRP '156' + edit FHRLST 'f156' + edit FCSTHR '156' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f162 + trigger ../../post/jgfs_atmos_post_f162 == complete + edit FHRGRP '162' + edit FHRLST 'f162' + edit FCSTHR '162' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f168 + trigger ../../post/jgfs_atmos_post_f168 == complete + edit FHRGRP '168' + edit FHRLST 'f168' + edit FCSTHR '168' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f174 + trigger ../../post/jgfs_atmos_post_f174 == complete + edit FHRGRP '174' + edit FHRLST 'f174' + edit FCSTHR '174' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f180 + trigger ../../post/jgfs_atmos_post_f180 == complete + edit FHRGRP '180' + edit FHRLST 'f180' + edit FCSTHR '180' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f186 + trigger ../../post/jgfs_atmos_post_f186 == complete + edit FHRGRP '186' + edit FHRLST 'f186' + edit FCSTHR '186' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f192 + trigger ../../post/jgfs_atmos_post_f192 == complete + edit FHRGRP '192' + edit FHRLST 'f192' + edit FCSTHR '192' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f198 + trigger ../../post/jgfs_atmos_post_f198 == complete + edit FHRGRP '198' + edit FHRLST 'f198' + edit FCSTHR '198' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f204 + trigger ../../post/jgfs_atmos_post_f204 == complete + edit FHRGRP '204' + edit FHRLST 'f204' + edit FCSTHR '204' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f210 + trigger ../../post/jgfs_atmos_post_f210 == complete + edit FHRGRP '210' + edit FHRLST 'f210' + edit FCSTHR '210' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f216 + trigger ../../post/jgfs_atmos_post_f216 == complete + edit FHRGRP '216' + edit FHRLST 'f216' + edit FCSTHR '216' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f222 + trigger ../../post/jgfs_atmos_post_f222 == complete + edit FHRGRP '222' + edit FHRLST 'f222' + edit FCSTHR '222' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f228 + trigger ../../post/jgfs_atmos_post_f228 == complete + edit FHRGRP '228' + edit FHRLST 'f228' + edit FCSTHR '228' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f234 + trigger ../../post/jgfs_atmos_post_f234 == complete + edit FHRGRP '234' + edit FHRLST 'f234' + edit FCSTHR '234' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f240 + trigger ../../post/jgfs_atmos_post_f240 == complete + edit FHRGRP '240' + edit FHRLST 'f240' + edit FCSTHR '240' + edit TRDRUN 'YES' + endfamily + endfamily + family gempak + task jgfs_atmos_gempak + trigger ../../atmos/analysis/jgfs_atmos_analysis == complete + task jgfs_atmos_gempak_meta + trigger ../../atmos/analysis/jgfs_atmos_analysis == complete + task jgfs_atmos_gempak_ncdc_upapgif + trigger ./jgfs_atmos_gempak == active or ./jgfs_atmos_gempak == complete + task jgfs_atmos_npoess_pgrb2_0p5deg + trigger ../post/jgfs_atmos_post_anl eq active or ../post/jgfs_atmos_post_anl == complete + task jgfs_atmos_pgrb2_spec_gempak + trigger ./jgfs_atmos_npoess_pgrb2_0p5deg == complete + endfamily + family verf + task jgfs_atmos_vminmon + trigger ../analysis/jgfs_atmos_analysis == complete + endfamily + endfamily + family wave + family init + task jgfs_wave_init + trigger /prod/primary/12/obsproc/v1.0/gfs/atmos/prep/jobsproc_gfs_atmos_prep == complete + endfamily + family prep + task jgfs_wave_prep + trigger ../init/jgfs_wave_init == complete + endfamily + family post + task jgfs_wave_postsbs + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post000 + task jgfs_wave_postpnt + trigger ../../jgfs_forecast == complete + task jgfs_wave_post_bndpnt + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post180 + task jgfs_wave_post_bndpntbll + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post180 + task jgfs_wave_prdgen_gridded + trigger ./jgfs_wave_postsbs == active or ./jgfs_wave_postsbs == complete + task jgfs_wave_prdgen_bulls + trigger ./jgfs_wave_postpnt == complete and ./jgfs_wave_postsbs == complete + endfamily + family gempak + task jgfs_wave_gempak + trigger ../post/jgfs_wave_postsbs == active or ../post/jgfs_wave_postsbs == complete + endfamily + endfamily + task jgfs_forecast + trigger ./atmos/analysis/jgfs_atmos_analysis:release_fcst and ./wave/prep/jgfs_wave_prep == complete + edit KEEPDATA 'YES' + endfamily + family gdas + edit RUN 'gdas' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/gdas' + family atmos + family obsproc + family dump + task jgdas_atmos_tropcy_qc_reloc + trigger :TIME >= 1745 and :TIME < 2345 + endfamily + family prep + task jgdas_atmos_emcsfc_sfc_prep + trigger /prod/primary/12/obsproc/v1.0/gdas/atmos/dump/jobsproc_gdas_atmos_dump:release_sfcprep + endfamily + endfamily + family analysis + task jgdas_atmos_analysis + trigger /prod/primary/12/obsproc/v1.0/gdas/atmos/prep/jobsproc_gdas_atmos_prep == complete and ../obsproc/prep/jgdas_atmos_emcsfc_sfc_prep == complete + event 1 release_fcst + task jgdas_atmos_analysis_calc + trigger ./jgdas_atmos_analysis == complete + task jgdas_atmos_analysis_diag + trigger ./jgdas_atmos_analysis == complete + endfamily + family post + task jgdas_atmos_post_manager + trigger ../../jgdas_forecast == active + event 1 release_postanl + event 2 release_post000 + event 3 release_post001 + event 4 release_post002 + event 5 release_post003 + event 6 release_post004 + event 7 release_post005 + event 8 release_post006 + event 9 release_post007 + event 10 release_post008 + event 11 release_post009 + task jgdas_atmos_post_anl + trigger ./jgdas_atmos_post_manager:release_postanl + edit FHRGRP '000' + edit FHRLST 'anl' + edit HR 'anl' + edit FHR 'anl' + task jgdas_atmos_post_f000 + trigger ./jgdas_atmos_post_manager:release_post000 + edit FHR 'f000' + edit HR '000' + edit FHRGRP '001' + edit FHRLST 'f000' + task jgdas_atmos_post_f001 + trigger ./jgdas_atmos_post_manager:release_post001 + edit FHR 'f001' + edit HR '001' + edit FHRGRP '002' + edit FHRLST 'f001' + task jgdas_atmos_post_f002 + trigger ./jgdas_atmos_post_manager:release_post002 + edit FHR 'f002' + edit HR '002' + edit FHRGRP '003' + edit FHRLST 'f002' + task jgdas_atmos_post_f003 + trigger ./jgdas_atmos_post_manager:release_post003 + edit FHR 'f003' + edit HR '003' + edit FHRGRP '004' + edit FHRLST 'f003' + task jgdas_atmos_post_f004 + trigger ./jgdas_atmos_post_manager:release_post004 + edit FHR 'f004' + edit HR '004' + edit FHRGRP '005' + edit FHRLST 'f004' + task jgdas_atmos_post_f005 + trigger ./jgdas_atmos_post_manager:release_post005 + edit FHR 'f005' + edit HR '005' + edit FHRGRP '006' + edit FHRLST 'f005' + task jgdas_atmos_post_f006 + trigger ./jgdas_atmos_post_manager:release_post006 + edit FHR 'f006' + edit HR '006' + edit FHRGRP '007' + edit FHRLST 'f006' + task jgdas_atmos_post_f007 + trigger ./jgdas_atmos_post_manager:release_post007 + edit FHR 'f007' + edit HR '007' + edit FHRGRP '008' + edit FHRLST 'f007' + task jgdas_atmos_post_f008 + trigger ./jgdas_atmos_post_manager:release_post008 + edit FHR 'f008' + edit HR '008' + edit FHRGRP '009' + edit FHRLST 'f008' + task jgdas_atmos_post_f009 + trigger ./jgdas_atmos_post_manager:release_post009 + edit FHR 'f009' + edit HR '009' + edit FHRGRP '010' + edit FHRLST 'f009' + endfamily + family post_processing + task jgdas_atmos_chgres_forenkf + trigger ../../jgdas_forecast == complete and ../../../enkfgdas/forecast == complete + endfamily + family gempak + task jgdas_atmos_gempak + trigger ../../jgdas_forecast == complete + task jgdas_atmos_gempak_meta_ncdc + trigger ./jgdas_atmos_gempak == complete + endfamily + family verf + task jgdas_atmos_vminmon + trigger ../analysis/jgdas_atmos_analysis == complete + task jgdas_atmos_verfrad + trigger ../analysis/jgdas_atmos_analysis_diag == complete + task jgdas_atmos_verfozn + trigger ../analysis/jgdas_atmos_analysis_diag == complete + endfamily + endfamily + family wave + family init + task jgdas_wave_init + trigger /prod/primary/12/obsproc/v1.0/gdas/atmos/prep/jobsproc_gdas_atmos_prep == complete + endfamily + family prep + task jgdas_wave_prep + trigger ../init/jgdas_wave_init == complete + endfamily + family post + task jgdas_wave_postsbs + trigger ../../atmos/post/jgdas_atmos_post_manager:release_post000 + task jgdas_wave_postpnt + trigger ../../jgdas_forecast == complete + endfamily + endfamily + task jgdas_forecast + trigger ./atmos/analysis/jgdas_atmos_analysis:release_fcst and ./wave/prep/jgdas_wave_prep == complete + endfamily + family enkfgdas + edit RUN 'gdas' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas' + family analysis + family create + task jenkfgdas_select_obs + trigger /prod/primary/12/obsproc/v1.0/gdas/atmos/prep/jobsproc_gdas_atmos_prep == complete and /prod/primary/06/gfs/v16.2/enkfgdas/post == complete + task jenkfgdas_diag + trigger ./jenkfgdas_select_obs == complete + task jenkfgdas_update + trigger ./jenkfgdas_diag == complete + endfamily + family recenter + family ecen + trigger ../create/jenkfgdas_update == complete and ../../../gdas/atmos/analysis/jgdas_atmos_analysis_calc == complete and /prod/primary/06/gfs/v16.2/gdas/atmos/post_processing/jgdas_atmos_chgres_forenkf == complete + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas/analysis/recenter/ecen' + family grp1 + edit FHRGRP '003' + task jenkfgdas_ecen + endfamily + family grp2 + edit FHRGRP '006' + task jenkfgdas_ecen + endfamily + family grp3 + edit FHRGRP '009' + task jenkfgdas_ecen + endfamily + endfamily + task jenkfgdas_sfc + trigger ../create/jenkfgdas_update == complete and ../../../gdas/atmos/analysis/jgdas_atmos_analysis_calc == complete + endfamily + endfamily + family forecast + trigger ./analysis/recenter/ecen == complete and ./analysis/recenter/jenkfgdas_sfc == complete + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas/forecast' + family grp1 + edit ENSGRP '01' + task jenkfgdas_fcst + endfamily + family grp2 + edit ENSGRP '02' + task jenkfgdas_fcst + endfamily + family grp3 + edit ENSGRP '03' + task jenkfgdas_fcst + endfamily + family grp4 + edit ENSGRP '04' + task jenkfgdas_fcst + endfamily + family grp5 + edit ENSGRP '05' + task jenkfgdas_fcst + endfamily + family grp6 + edit ENSGRP '06' + task jenkfgdas_fcst + endfamily + family grp7 + edit ENSGRP '07' + task jenkfgdas_fcst + endfamily + family grp8 + edit ENSGRP '08' + task jenkfgdas_fcst + endfamily + family grp9 + edit ENSGRP '09' + task jenkfgdas_fcst + endfamily + family grp10 + edit ENSGRP '10' + task jenkfgdas_fcst + endfamily + family grp11 + edit ENSGRP '11' + task jenkfgdas_fcst + endfamily + family grp12 + edit ENSGRP '12' + task jenkfgdas_fcst + endfamily + family grp13 + edit ENSGRP '13' + task jenkfgdas_fcst + endfamily + family grp14 + edit ENSGRP '14' + task jenkfgdas_fcst + endfamily + family grp15 + edit ENSGRP '15' + task jenkfgdas_fcst + endfamily + family grp16 + edit ENSGRP '16' + task jenkfgdas_fcst + endfamily + family grp17 + edit ENSGRP '17' + task jenkfgdas_fcst + endfamily + family grp18 + edit ENSGRP '18' + task jenkfgdas_fcst + endfamily + family grp19 + edit ENSGRP '19' + task jenkfgdas_fcst + endfamily + family grp20 + edit ENSGRP '20' + task jenkfgdas_fcst + endfamily + family grp21 + edit ENSGRP '21' + task jenkfgdas_fcst + endfamily + family grp22 + edit ENSGRP '22' + task jenkfgdas_fcst + endfamily + family grp23 + edit ENSGRP '23' + task jenkfgdas_fcst + endfamily + family grp24 + edit ENSGRP '24' + task jenkfgdas_fcst + endfamily + family grp25 + edit ENSGRP '25' + task jenkfgdas_fcst + endfamily + family grp26 + edit ENSGRP '26' + task jenkfgdas_fcst + endfamily + family grp27 + edit ENSGRP '27' + task jenkfgdas_fcst + endfamily + family grp28 + edit ENSGRP '28' + task jenkfgdas_fcst + endfamily + family grp29 + edit ENSGRP '29' + task jenkfgdas_fcst + endfamily + family grp30 + edit ENSGRP '30' + task jenkfgdas_fcst + endfamily + family grp31 + edit ENSGRP '31' + task jenkfgdas_fcst + endfamily + family grp32 + edit ENSGRP '32' + task jenkfgdas_fcst + endfamily + family grp33 + edit ENSGRP '33' + task jenkfgdas_fcst + endfamily + family grp34 + edit ENSGRP '34' + task jenkfgdas_fcst + endfamily + family grp35 + edit ENSGRP '35' + task jenkfgdas_fcst + endfamily + family grp36 + edit ENSGRP '36' + task jenkfgdas_fcst + endfamily + family grp37 + edit ENSGRP '37' + task jenkfgdas_fcst + endfamily + family grp38 + edit ENSGRP '38' + task jenkfgdas_fcst + endfamily + family grp39 + edit ENSGRP '39' + task jenkfgdas_fcst + endfamily + family grp40 + edit ENSGRP '40' + task jenkfgdas_fcst + endfamily + endfamily + family post + trigger ./forecast == complete + task jenkfgdas_post_f003 + edit FHMIN_EPOS '003' + edit FHMAX_EPOS '003' + edit FHOUT_EPOS '003' + task jenkfgdas_post_f004 + edit FHMIN_EPOS '004' + edit FHMAX_EPOS '004' + edit FHOUT_EPOS '004' + task jenkfgdas_post_f005 + edit FHMIN_EPOS '005' + edit FHMAX_EPOS '005' + edit FHOUT_EPOS '005' + task jenkfgdas_post_f006 + edit FHMIN_EPOS '006' + edit FHMAX_EPOS '006' + edit FHOUT_EPOS '006' + task jenkfgdas_post_f007 + edit FHMIN_EPOS '007' + edit FHMAX_EPOS '007' + edit FHOUT_EPOS '007' + task jenkfgdas_post_f008 + edit FHMIN_EPOS '008' + edit FHMAX_EPOS '008' + edit FHOUT_EPOS '008' + task jenkfgdas_post_f009 + edit FHMIN_EPOS '009' + edit FHMAX_EPOS '009' + edit FHOUT_EPOS '009' + endfamily + endfamily + endfamily + diff --git a/ecf/defs/gfs_18.def b/ecf/defs/gfs_18.def new file mode 100644 index 0000000000..1fdeb69e39 --- /dev/null +++ b/ecf/defs/gfs_18.def @@ -0,0 +1,2508 @@ + family v16.2 + family gfs + edit RUN 'gfs' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/gfs' + family atmos + family obsproc + family dump + task jgfs_atmos_tropcy_qc_reloc + trigger :TIME >= 2041 or :TIME < 0241 + event 1 jtwc_bull_email + endfamily + family prep + task jgfs_atmos_emcsfc_sfc_prep + trigger /prod/primary/18/obsproc/v1.0/gfs/atmos/dump/jobsproc_gfs_atmos_dump:release_sfcprep + endfamily + endfamily + family analysis + task jgfs_atmos_analysis + trigger /prod/primary/18/obsproc/v1.0/gfs/atmos/prep/jobsproc_gfs_atmos_prep == complete and ../obsproc/prep/jgfs_atmos_emcsfc_sfc_prep == complete + event 1 release_fcst + task jgfs_atmos_analysis_calc + trigger ./jgfs_atmos_analysis == complete + endfamily + family post + task jgfs_atmos_post_manager + trigger ../analysis/jgfs_atmos_analysis == complete + event 1 release_postanl + event 2 release_post000 + event 3 release_post001 + event 4 release_post002 + event 5 release_post003 + event 6 release_post004 + event 7 release_post005 + event 8 release_post006 + event 9 release_post007 + event 10 release_post008 + event 11 release_post009 + event 12 release_post010 + event 13 release_post011 + event 14 release_post012 + event 15 release_post013 + event 16 release_post014 + event 17 release_post015 + event 18 release_post016 + event 19 release_post017 + event 20 release_post018 + event 21 release_post019 + event 22 release_post020 + event 23 release_post021 + event 24 release_post022 + event 25 release_post023 + event 26 release_post024 + event 27 release_post025 + event 28 release_post026 + event 29 release_post027 + event 30 release_post028 + event 31 release_post029 + event 32 release_post030 + event 33 release_post031 + event 34 release_post032 + event 35 release_post033 + event 36 release_post034 + event 37 release_post035 + event 38 release_post036 + event 39 release_post037 + event 40 release_post038 + event 41 release_post039 + event 42 release_post040 + event 43 release_post041 + event 44 release_post042 + event 45 release_post043 + event 46 release_post044 + event 47 release_post045 + event 48 release_post046 + event 49 release_post047 + event 50 release_post048 + event 51 release_post049 + event 52 release_post050 + event 53 release_post051 + event 54 release_post052 + event 55 release_post053 + event 56 release_post054 + event 57 release_post055 + event 58 release_post056 + event 59 release_post057 + event 60 release_post058 + event 61 release_post059 + event 62 release_post060 + event 63 release_post061 + event 64 release_post062 + event 65 release_post063 + event 66 release_post064 + event 67 release_post065 + event 68 release_post066 + event 69 release_post067 + event 70 release_post068 + event 71 release_post069 + event 72 release_post070 + event 73 release_post071 + event 74 release_post072 + event 75 release_post073 + event 76 release_post074 + event 77 release_post075 + event 78 release_post076 + event 79 release_post077 + event 80 release_post078 + event 81 release_post079 + event 82 release_post080 + event 83 release_post081 + event 84 release_post082 + event 85 release_post083 + event 86 release_post084 + event 87 release_post085 + event 88 release_post086 + event 89 release_post087 + event 90 release_post088 + event 91 release_post089 + event 92 release_post090 + event 93 release_post091 + event 94 release_post092 + event 95 release_post093 + event 96 release_post094 + event 97 release_post095 + event 98 release_post096 + event 99 release_post097 + event 100 release_post098 + event 101 release_post099 + event 102 release_post100 + event 103 release_post101 + event 104 release_post102 + event 105 release_post103 + event 106 release_post104 + event 107 release_post105 + event 108 release_post106 + event 109 release_post107 + event 110 release_post108 + event 111 release_post109 + event 112 release_post110 + event 113 release_post111 + event 114 release_post112 + event 115 release_post113 + event 116 release_post114 + event 117 release_post115 + event 118 release_post116 + event 119 release_post117 + event 120 release_post118 + event 121 release_post119 + event 122 release_post120 + event 123 release_post123 + event 124 release_post126 + event 125 release_post129 + event 126 release_post132 + event 127 release_post135 + event 128 release_post138 + event 129 release_post141 + event 130 release_post144 + event 131 release_post147 + event 132 release_post150 + event 133 release_post153 + event 134 release_post156 + event 135 release_post159 + event 136 release_post162 + event 137 release_post165 + event 138 release_post168 + event 139 release_post171 + event 140 release_post174 + event 141 release_post177 + event 142 release_post180 + event 143 release_post183 + event 144 release_post186 + event 145 release_post189 + event 146 release_post192 + event 147 release_post195 + event 148 release_post198 + event 149 release_post201 + event 150 release_post204 + event 151 release_post207 + event 152 release_post210 + event 153 release_post213 + event 154 release_post216 + event 155 release_post219 + event 156 release_post222 + event 157 release_post225 + event 158 release_post228 + event 159 release_post231 + event 160 release_post234 + event 161 release_post237 + event 162 release_post240 + event 163 release_post243 + event 164 release_post246 + event 165 release_post249 + event 166 release_post252 + event 167 release_post255 + event 168 release_post258 + event 169 release_post261 + event 170 release_post264 + event 171 release_post267 + event 172 release_post270 + event 173 release_post273 + event 174 release_post276 + event 175 release_post279 + event 176 release_post282 + event 177 release_post285 + event 178 release_post288 + event 179 release_post291 + event 180 release_post294 + event 181 release_post297 + event 182 release_post300 + event 183 release_post303 + event 184 release_post306 + event 185 release_post309 + event 186 release_post312 + event 187 release_post315 + event 188 release_post318 + event 189 release_post321 + event 190 release_post324 + event 191 release_post327 + event 192 release_post330 + event 193 release_post333 + event 194 release_post336 + event 195 release_post339 + event 196 release_post342 + event 197 release_post345 + event 198 release_post348 + event 199 release_post351 + event 200 release_post354 + event 201 release_post357 + event 202 release_post360 + event 203 release_post363 + event 204 release_post366 + event 205 release_post369 + event 206 release_post372 + event 207 release_post375 + event 208 release_post378 + event 209 release_post381 + event 210 release_post384 + task jgfs_atmos_post_anl + trigger ./jgfs_atmos_post_manager:release_postanl + edit FHRGRP '000' + edit FHRLST 'anl' + edit HR 'anl' + edit FHR 'anl' + task jgfs_atmos_post_f000 + trigger ./jgfs_atmos_post_manager:release_post000 + edit FHRGRP '001' + edit FHRLST 'f000' + edit FHR 'f000' + edit HR '000' + task jgfs_atmos_post_f001 + trigger ./jgfs_atmos_post_manager:release_post001 + edit FHRGRP '002' + edit FHRLST 'f001' + edit FHR 'f001' + edit HR '001' + task jgfs_atmos_post_f002 + trigger ./jgfs_atmos_post_manager:release_post002 + edit FHRGRP '003' + edit FHRLST 'f002' + edit FHR 'f002' + edit HR '002' + task jgfs_atmos_post_f003 + trigger ./jgfs_atmos_post_manager:release_post003 + edit FHRGRP '004' + edit FHRLST 'f003' + edit FHR 'f003' + edit HR '003' + task jgfs_atmos_post_f004 + trigger ./jgfs_atmos_post_manager:release_post004 + edit FHRGRP '005' + edit FHRLST 'f004' + edit FHR 'f004' + edit HR '004' + task jgfs_atmos_post_f005 + trigger ./jgfs_atmos_post_manager:release_post005 + edit FHRGRP '006' + edit FHRLST 'f005' + edit FHR 'f005' + edit HR '005' + task jgfs_atmos_post_f006 + trigger ./jgfs_atmos_post_manager:release_post006 + edit FHRGRP '007' + edit FHRLST 'f006' + edit FHR 'f006' + edit HR '006' + task jgfs_atmos_post_f007 + trigger ./jgfs_atmos_post_manager:release_post007 + edit FHRGRP '008' + edit FHRLST 'f007' + edit FHR 'f007' + edit HR '007' + task jgfs_atmos_post_f008 + trigger ./jgfs_atmos_post_manager:release_post008 + edit FHRGRP '009' + edit FHRLST 'f008' + edit FHR 'f008' + edit HR '008' + task jgfs_atmos_post_f009 + trigger ./jgfs_atmos_post_manager:release_post009 + edit FHRGRP '010' + edit FHRLST 'f009' + edit FHR 'f009' + edit HR '009' + task jgfs_atmos_post_f010 + trigger ./jgfs_atmos_post_manager:release_post010 + edit FHRGRP '011' + edit FHRLST 'f010' + edit FHR 'f010' + edit HR '010' + task jgfs_atmos_post_f011 + trigger ./jgfs_atmos_post_manager:release_post011 + edit FHRGRP '012' + edit FHRLST 'f011' + edit FHR 'f011' + edit HR '011' + task jgfs_atmos_post_f012 + trigger ./jgfs_atmos_post_manager:release_post012 + edit FHRGRP '013' + edit FHRLST 'f012' + edit FHR 'f012' + edit HR '012' + task jgfs_atmos_post_f013 + trigger ./jgfs_atmos_post_manager:release_post013 + edit FHRGRP '014' + edit FHRLST 'f013' + edit FHR 'f013' + edit HR '013' + task jgfs_atmos_post_f014 + trigger ./jgfs_atmos_post_manager:release_post014 + edit FHRGRP '015' + edit FHRLST 'f014' + edit FHR 'f014' + edit HR '014' + task jgfs_atmos_post_f015 + trigger ./jgfs_atmos_post_manager:release_post015 + edit FHRGRP '016' + edit FHRLST 'f015' + edit FHR 'f015' + edit HR '015' + task jgfs_atmos_post_f016 + trigger ./jgfs_atmos_post_manager:release_post016 + edit FHRGRP '017' + edit FHRLST 'f016' + edit FHR 'f016' + edit HR '016' + task jgfs_atmos_post_f017 + trigger ./jgfs_atmos_post_manager:release_post017 + edit FHRGRP '018' + edit FHRLST 'f017' + edit FHR 'f017' + edit HR '017' + task jgfs_atmos_post_f018 + trigger ./jgfs_atmos_post_manager:release_post018 + edit FHRGRP '019' + edit FHRLST 'f018' + edit FHR 'f018' + edit HR '018' + task jgfs_atmos_post_f019 + trigger ./jgfs_atmos_post_manager:release_post019 + edit FHRGRP '020' + edit FHRLST 'f019' + edit FHR 'f019' + edit HR '019' + task jgfs_atmos_post_f020 + trigger ./jgfs_atmos_post_manager:release_post020 + edit FHRGRP '021' + edit FHRLST 'f020' + edit FHR 'f020' + edit HR '020' + task jgfs_atmos_post_f021 + trigger ./jgfs_atmos_post_manager:release_post021 + edit FHRGRP '022' + edit FHRLST 'f021' + edit FHR 'f021' + edit HR '021' + task jgfs_atmos_post_f022 + trigger ./jgfs_atmos_post_manager:release_post022 + edit FHRGRP '023' + edit FHRLST 'f022' + edit FHR 'f022' + edit HR '022' + task jgfs_atmos_post_f023 + trigger ./jgfs_atmos_post_manager:release_post023 + edit FHRGRP '024' + edit FHRLST 'f023' + edit FHR 'f023' + edit HR '023' + task jgfs_atmos_post_f024 + trigger ./jgfs_atmos_post_manager:release_post024 + edit FHRGRP '025' + edit FHRLST 'f024' + edit FHR 'f024' + edit HR '024' + task jgfs_atmos_post_f025 + trigger ./jgfs_atmos_post_manager:release_post025 + edit FHRGRP '026' + edit FHRLST 'f025' + edit FHR 'f025' + edit HR '025' + task jgfs_atmos_post_f026 + trigger ./jgfs_atmos_post_manager:release_post026 + edit FHRGRP '027' + edit FHRLST 'f026' + edit FHR 'f026' + edit HR '026' + task jgfs_atmos_post_f027 + trigger ./jgfs_atmos_post_manager:release_post027 + edit FHRGRP '028' + edit FHRLST 'f027' + edit FHR 'f027' + edit HR '027' + task jgfs_atmos_post_f028 + trigger ./jgfs_atmos_post_manager:release_post028 + edit FHRGRP '029' + edit FHRLST 'f028' + edit FHR 'f028' + edit HR '028' + task jgfs_atmos_post_f029 + trigger ./jgfs_atmos_post_manager:release_post029 + edit FHRGRP '030' + edit FHRLST 'f029' + edit FHR 'f029' + edit HR '029' + task jgfs_atmos_post_f030 + trigger ./jgfs_atmos_post_manager:release_post030 + edit FHRGRP '031' + edit FHRLST 'f030' + edit FHR 'f030' + edit HR '030' + task jgfs_atmos_post_f031 + trigger ./jgfs_atmos_post_manager:release_post031 + edit FHRGRP '032' + edit FHRLST 'f031' + edit FHR 'f031' + edit HR '031' + task jgfs_atmos_post_f032 + trigger ./jgfs_atmos_post_manager:release_post032 + edit FHRGRP '033' + edit FHRLST 'f032' + edit FHR 'f032' + edit HR '032' + task jgfs_atmos_post_f033 + trigger ./jgfs_atmos_post_manager:release_post033 + edit FHRGRP '034' + edit FHRLST 'f033' + edit FHR 'f033' + edit HR '033' + task jgfs_atmos_post_f034 + trigger ./jgfs_atmos_post_manager:release_post034 + edit FHRGRP '035' + edit FHRLST 'f034' + edit FHR 'f034' + edit HR '034' + task jgfs_atmos_post_f035 + trigger ./jgfs_atmos_post_manager:release_post035 + edit FHRGRP '036' + edit FHRLST 'f035' + edit FHR 'f035' + edit HR '035' + task jgfs_atmos_post_f036 + trigger ./jgfs_atmos_post_manager:release_post036 + edit FHRGRP '037' + edit FHRLST 'f036' + edit FHR 'f036' + edit HR '036' + task jgfs_atmos_post_f037 + trigger ./jgfs_atmos_post_manager:release_post037 + edit FHRGRP '038' + edit FHRLST 'f037' + edit FHR 'f037' + edit HR '037' + task jgfs_atmos_post_f038 + trigger ./jgfs_atmos_post_manager:release_post038 + edit FHRGRP '039' + edit FHRLST 'f038' + edit FHR 'f038' + edit HR '038' + task jgfs_atmos_post_f039 + trigger ./jgfs_atmos_post_manager:release_post039 + edit FHRGRP '040' + edit FHRLST 'f039' + edit FHR 'f039' + edit HR '039' + task jgfs_atmos_post_f040 + trigger ./jgfs_atmos_post_manager:release_post040 + edit FHRGRP '041' + edit FHRLST 'f040' + edit FHR 'f040' + edit HR '040' + task jgfs_atmos_post_f041 + trigger ./jgfs_atmos_post_manager:release_post041 + edit FHRGRP '042' + edit FHRLST 'f041' + edit FHR 'f041' + edit HR '041' + task jgfs_atmos_post_f042 + trigger ./jgfs_atmos_post_manager:release_post042 + edit FHRGRP '043' + edit FHRLST 'f042' + edit FHR 'f042' + edit HR '042' + task jgfs_atmos_post_f043 + trigger ./jgfs_atmos_post_manager:release_post043 + edit FHRGRP '044' + edit FHRLST 'f043' + edit FHR 'f043' + edit HR '043' + task jgfs_atmos_post_f044 + trigger ./jgfs_atmos_post_manager:release_post044 + edit FHRGRP '045' + edit FHRLST 'f044' + edit FHR 'f044' + edit HR '044' + task jgfs_atmos_post_f045 + trigger ./jgfs_atmos_post_manager:release_post045 + edit FHRGRP '046' + edit FHRLST 'f045' + edit FHR 'f045' + edit HR '045' + task jgfs_atmos_post_f046 + trigger ./jgfs_atmos_post_manager:release_post046 + edit FHRGRP '047' + edit FHRLST 'f046' + edit FHR 'f046' + edit HR '046' + task jgfs_atmos_post_f047 + trigger ./jgfs_atmos_post_manager:release_post047 + edit FHRGRP '048' + edit FHRLST 'f047' + edit FHR 'f047' + edit HR '047' + task jgfs_atmos_post_f048 + trigger ./jgfs_atmos_post_manager:release_post048 + edit FHRGRP '049' + edit FHRLST 'f048' + edit FHR 'f048' + edit HR '048' + task jgfs_atmos_post_f049 + trigger ./jgfs_atmos_post_manager:release_post049 + edit FHRGRP '050' + edit FHRLST 'f049' + edit FHR 'f049' + edit HR '049' + task jgfs_atmos_post_f050 + trigger ./jgfs_atmos_post_manager:release_post050 + edit FHRGRP '051' + edit FHRLST 'f050' + edit FHR 'f050' + edit HR '050' + task jgfs_atmos_post_f051 + trigger ./jgfs_atmos_post_manager:release_post051 + edit FHRGRP '052' + edit FHRLST 'f051' + edit FHR 'f051' + edit HR '051' + task jgfs_atmos_post_f052 + trigger ./jgfs_atmos_post_manager:release_post052 + edit FHRGRP '053' + edit FHRLST 'f052' + edit FHR 'f052' + edit HR '052' + task jgfs_atmos_post_f053 + trigger ./jgfs_atmos_post_manager:release_post053 + edit FHRGRP '054' + edit FHRLST 'f053' + edit FHR 'f053' + edit HR '053' + task jgfs_atmos_post_f054 + trigger ./jgfs_atmos_post_manager:release_post054 + edit FHRGRP '055' + edit FHRLST 'f054' + edit FHR 'f054' + edit HR '054' + task jgfs_atmos_post_f055 + trigger ./jgfs_atmos_post_manager:release_post055 + edit FHRGRP '056' + edit FHRLST 'f055' + edit FHR 'f055' + edit HR '055' + task jgfs_atmos_post_f056 + trigger ./jgfs_atmos_post_manager:release_post056 + edit FHRGRP '057' + edit FHRLST 'f056' + edit FHR 'f056' + edit HR '056' + task jgfs_atmos_post_f057 + trigger ./jgfs_atmos_post_manager:release_post057 + edit FHRGRP '058' + edit FHRLST 'f057' + edit FHR 'f057' + edit HR '057' + task jgfs_atmos_post_f058 + trigger ./jgfs_atmos_post_manager:release_post058 + edit FHRGRP '059' + edit FHRLST 'f058' + edit FHR 'f058' + edit HR '058' + task jgfs_atmos_post_f059 + trigger ./jgfs_atmos_post_manager:release_post059 + edit FHRGRP '060' + edit FHRLST 'f059' + edit FHR 'f059' + edit HR '059' + task jgfs_atmos_post_f060 + trigger ./jgfs_atmos_post_manager:release_post060 + edit FHRGRP '061' + edit FHRLST 'f060' + edit FHR 'f060' + edit HR '060' + task jgfs_atmos_post_f061 + trigger ./jgfs_atmos_post_manager:release_post061 + edit FHRGRP '062' + edit FHRLST 'f061' + edit FHR 'f061' + edit HR '061' + task jgfs_atmos_post_f062 + trigger ./jgfs_atmos_post_manager:release_post062 + edit FHRGRP '063' + edit FHRLST 'f062' + edit FHR 'f062' + edit HR '062' + task jgfs_atmos_post_f063 + trigger ./jgfs_atmos_post_manager:release_post063 + edit FHRGRP '064' + edit FHRLST 'f063' + edit FHR 'f063' + edit HR '063' + task jgfs_atmos_post_f064 + trigger ./jgfs_atmos_post_manager:release_post064 + edit FHRGRP '065' + edit FHRLST 'f064' + edit FHR 'f064' + edit HR '064' + task jgfs_atmos_post_f065 + trigger ./jgfs_atmos_post_manager:release_post065 + edit FHRGRP '066' + edit FHRLST 'f065' + edit FHR 'f065' + edit HR '065' + task jgfs_atmos_post_f066 + trigger ./jgfs_atmos_post_manager:release_post066 + edit FHRGRP '067' + edit FHRLST 'f066' + edit FHR 'f066' + edit HR '066' + task jgfs_atmos_post_f067 + trigger ./jgfs_atmos_post_manager:release_post067 + edit FHRGRP '068' + edit FHRLST 'f067' + edit FHR 'f067' + edit HR '067' + task jgfs_atmos_post_f068 + trigger ./jgfs_atmos_post_manager:release_post068 + edit FHRGRP '069' + edit FHRLST 'f068' + edit FHR 'f068' + edit HR '068' + task jgfs_atmos_post_f069 + trigger ./jgfs_atmos_post_manager:release_post069 + edit FHRGRP '070' + edit FHRLST 'f069' + edit FHR 'f069' + edit HR '069' + task jgfs_atmos_post_f070 + trigger ./jgfs_atmos_post_manager:release_post070 + edit FHRGRP '071' + edit FHRLST 'f070' + edit FHR 'f070' + edit HR '070' + task jgfs_atmos_post_f071 + trigger ./jgfs_atmos_post_manager:release_post071 + edit FHRGRP '072' + edit FHRLST 'f071' + edit FHR 'f071' + edit HR '071' + task jgfs_atmos_post_f072 + trigger ./jgfs_atmos_post_manager:release_post072 + edit FHRGRP '073' + edit FHRLST 'f072' + edit FHR 'f072' + edit HR '072' + task jgfs_atmos_post_f073 + trigger ./jgfs_atmos_post_manager:release_post073 + edit FHRGRP '074' + edit FHRLST 'f073' + edit FHR 'f073' + edit HR '073' + task jgfs_atmos_post_f074 + trigger ./jgfs_atmos_post_manager:release_post074 + edit FHRGRP '075' + edit FHRLST 'f074' + edit FHR 'f074' + edit HR '074' + task jgfs_atmos_post_f075 + trigger ./jgfs_atmos_post_manager:release_post075 + edit FHRGRP '076' + edit FHRLST 'f075' + edit FHR 'f075' + edit HR '075' + task jgfs_atmos_post_f076 + trigger ./jgfs_atmos_post_manager:release_post076 + edit FHRGRP '077' + edit FHRLST 'f076' + edit FHR 'f076' + edit HR '076' + task jgfs_atmos_post_f077 + trigger ./jgfs_atmos_post_manager:release_post077 + edit FHRGRP '078' + edit FHRLST 'f077' + edit FHR 'f077' + edit HR '077' + task jgfs_atmos_post_f078 + trigger ./jgfs_atmos_post_manager:release_post078 + edit FHRGRP '079' + edit FHRLST 'f078' + edit FHR 'f078' + edit HR '078' + task jgfs_atmos_post_f079 + trigger ./jgfs_atmos_post_manager:release_post079 + edit FHRGRP '080' + edit FHRLST 'f079' + edit FHR 'f079' + edit HR '079' + task jgfs_atmos_post_f080 + trigger ./jgfs_atmos_post_manager:release_post080 + edit FHRGRP '081' + edit FHRLST 'f080' + edit FHR 'f080' + edit HR '080' + task jgfs_atmos_post_f081 + trigger ./jgfs_atmos_post_manager:release_post081 + edit FHRGRP '082' + edit FHRLST 'f081' + edit FHR 'f081' + edit HR '081' + task jgfs_atmos_post_f082 + trigger ./jgfs_atmos_post_manager:release_post082 + edit FHRGRP '083' + edit FHRLST 'f082' + edit FHR 'f082' + edit HR '082' + task jgfs_atmos_post_f083 + trigger ./jgfs_atmos_post_manager:release_post083 + edit FHRGRP '084' + edit FHRLST 'f083' + edit FHR 'f083' + edit HR '083' + task jgfs_atmos_post_f084 + trigger ./jgfs_atmos_post_manager:release_post084 + edit FHRGRP '085' + edit FHRLST 'f084' + edit FHR 'f084' + edit HR '084' + task jgfs_atmos_post_f085 + trigger ./jgfs_atmos_post_manager:release_post085 + edit FHRGRP '086' + edit FHRLST 'f085' + edit FHR 'f085' + edit HR '085' + task jgfs_atmos_post_f086 + trigger ./jgfs_atmos_post_manager:release_post086 + edit FHRGRP '087' + edit FHRLST 'f086' + edit FHR 'f086' + edit HR '086' + task jgfs_atmos_post_f087 + trigger ./jgfs_atmos_post_manager:release_post087 + edit FHRGRP '088' + edit FHRLST 'f087' + edit FHR 'f087' + edit HR '087' + task jgfs_atmos_post_f088 + trigger ./jgfs_atmos_post_manager:release_post088 + edit FHRGRP '089' + edit FHRLST 'f088' + edit FHR 'f088' + edit HR '088' + task jgfs_atmos_post_f089 + trigger ./jgfs_atmos_post_manager:release_post089 + edit FHRGRP '090' + edit FHRLST 'f089' + edit FHR 'f089' + edit HR '089' + task jgfs_atmos_post_f090 + trigger ./jgfs_atmos_post_manager:release_post090 + edit FHRGRP '091' + edit FHRLST 'f090' + edit FHR 'f090' + edit HR '090' + task jgfs_atmos_post_f091 + trigger ./jgfs_atmos_post_manager:release_post091 + edit FHRGRP '092' + edit FHRLST 'f091' + edit FHR 'f091' + edit HR '091' + task jgfs_atmos_post_f092 + trigger ./jgfs_atmos_post_manager:release_post092 + edit FHRGRP '093' + edit FHRLST 'f092' + edit FHR 'f092' + edit HR '092' + task jgfs_atmos_post_f093 + trigger ./jgfs_atmos_post_manager:release_post093 + edit FHRGRP '094' + edit FHRLST 'f093' + edit FHR 'f093' + edit HR '093' + task jgfs_atmos_post_f094 + trigger ./jgfs_atmos_post_manager:release_post094 + edit FHRGRP '095' + edit FHRLST 'f094' + edit FHR 'f094' + edit HR '094' + task jgfs_atmos_post_f095 + trigger ./jgfs_atmos_post_manager:release_post095 + edit FHRGRP '096' + edit FHRLST 'f095' + edit FHR 'f095' + edit HR '095' + task jgfs_atmos_post_f096 + trigger ./jgfs_atmos_post_manager:release_post096 + edit FHRGRP '097' + edit FHRLST 'f096' + edit FHR 'f096' + edit HR '096' + task jgfs_atmos_post_f097 + trigger ./jgfs_atmos_post_manager:release_post097 + edit FHRGRP '098' + edit FHRLST 'f097' + edit FHR 'f097' + edit HR '097' + task jgfs_atmos_post_f098 + trigger ./jgfs_atmos_post_manager:release_post098 + edit FHRGRP '099' + edit FHRLST 'f098' + edit FHR 'f098' + edit HR '098' + task jgfs_atmos_post_f099 + trigger ./jgfs_atmos_post_manager:release_post099 + edit FHRGRP '100' + edit FHRLST 'f099' + edit FHR 'f099' + edit HR '099' + task jgfs_atmos_post_f100 + trigger ./jgfs_atmos_post_manager:release_post100 + edit FHRGRP '101' + edit FHRLST 'f100' + edit FHR 'f100' + edit HR '100' + task jgfs_atmos_post_f101 + trigger ./jgfs_atmos_post_manager:release_post101 + edit FHRGRP '102' + edit FHRLST 'f101' + edit FHR 'f101' + edit HR '101' + task jgfs_atmos_post_f102 + trigger ./jgfs_atmos_post_manager:release_post102 + edit FHRGRP '103' + edit FHRLST 'f102' + edit FHR 'f102' + edit HR '102' + task jgfs_atmos_post_f103 + trigger ./jgfs_atmos_post_manager:release_post103 + edit FHRGRP '104' + edit FHRLST 'f103' + edit FHR 'f103' + edit HR '103' + task jgfs_atmos_post_f104 + trigger ./jgfs_atmos_post_manager:release_post104 + edit FHRGRP '105' + edit FHRLST 'f104' + edit FHR 'f104' + edit HR '104' + task jgfs_atmos_post_f105 + trigger ./jgfs_atmos_post_manager:release_post105 + edit FHRGRP '106' + edit FHRLST 'f105' + edit FHR 'f105' + edit HR '105' + task jgfs_atmos_post_f106 + trigger ./jgfs_atmos_post_manager:release_post106 + edit FHRGRP '107' + edit FHRLST 'f106' + edit FHR 'f106' + edit HR '106' + task jgfs_atmos_post_f107 + trigger ./jgfs_atmos_post_manager:release_post107 + edit FHRGRP '108' + edit FHRLST 'f107' + edit FHR 'f107' + edit HR '107' + task jgfs_atmos_post_f108 + trigger ./jgfs_atmos_post_manager:release_post108 + edit FHRGRP '109' + edit FHRLST 'f108' + edit FHR 'f108' + edit HR '108' + task jgfs_atmos_post_f109 + trigger ./jgfs_atmos_post_manager:release_post109 + edit FHRGRP '110' + edit FHRLST 'f109' + edit FHR 'f109' + edit HR '109' + task jgfs_atmos_post_f110 + trigger ./jgfs_atmos_post_manager:release_post110 + edit FHRGRP '111' + edit FHRLST 'f110' + edit FHR 'f110' + edit HR '110' + task jgfs_atmos_post_f111 + trigger ./jgfs_atmos_post_manager:release_post111 + edit FHRGRP '112' + edit FHRLST 'f111' + edit FHR 'f111' + edit HR '111' + task jgfs_atmos_post_f112 + trigger ./jgfs_atmos_post_manager:release_post112 + edit FHRGRP '113' + edit FHRLST 'f112' + edit FHR 'f112' + edit HR '112' + task jgfs_atmos_post_f113 + trigger ./jgfs_atmos_post_manager:release_post113 + edit FHRGRP '114' + edit FHRLST 'f113' + edit FHR 'f113' + edit HR '113' + task jgfs_atmos_post_f114 + trigger ./jgfs_atmos_post_manager:release_post114 + edit FHRGRP '115' + edit FHRLST 'f114' + edit FHR 'f114' + edit HR '114' + task jgfs_atmos_post_f115 + trigger ./jgfs_atmos_post_manager:release_post115 + edit FHRGRP '116' + edit FHRLST 'f115' + edit FHR 'f115' + edit HR '115' + task jgfs_atmos_post_f116 + trigger ./jgfs_atmos_post_manager:release_post116 + edit FHRGRP '117' + edit FHRLST 'f116' + edit FHR 'f116' + edit HR '116' + task jgfs_atmos_post_f117 + trigger ./jgfs_atmos_post_manager:release_post117 + edit FHRGRP '118' + edit FHRLST 'f117' + edit FHR 'f117' + edit HR '117' + task jgfs_atmos_post_f118 + trigger ./jgfs_atmos_post_manager:release_post118 + edit FHRGRP '119' + edit FHRLST 'f118' + edit FHR 'f118' + edit HR '118' + task jgfs_atmos_post_f119 + trigger ./jgfs_atmos_post_manager:release_post119 + edit FHRGRP '120' + edit FHRLST 'f119' + edit FHR 'f119' + edit HR '119' + task jgfs_atmos_post_f120 + trigger ./jgfs_atmos_post_manager:release_post120 + edit FHRGRP '121' + edit FHRLST 'f120' + edit FHR 'f120' + edit HR '120' + task jgfs_atmos_post_f123 + trigger ./jgfs_atmos_post_manager:release_post123 + edit FHRGRP '122' + edit FHRLST 'f123' + edit FHR 'f123' + edit HR '123' + task jgfs_atmos_post_f126 + trigger ./jgfs_atmos_post_manager:release_post126 + edit FHRGRP '123' + edit FHRLST 'f126' + edit FHR 'f126' + edit HR '126' + task jgfs_atmos_post_f129 + trigger ./jgfs_atmos_post_manager:release_post129 + edit FHRGRP '124' + edit FHRLST 'f129' + edit FHR 'f129' + edit HR '129' + task jgfs_atmos_post_f132 + trigger ./jgfs_atmos_post_manager:release_post132 + edit FHRGRP '125' + edit FHRLST 'f132' + edit FHR 'f132' + edit HR '132' + task jgfs_atmos_post_f135 + trigger ./jgfs_atmos_post_manager:release_post135 + edit FHRGRP '126' + edit FHRLST 'f135' + edit FHR 'f135' + edit HR '135' + task jgfs_atmos_post_f138 + trigger ./jgfs_atmos_post_manager:release_post138 + edit FHRGRP '127' + edit FHRLST 'f138' + edit FHR 'f138' + edit HR '138' + task jgfs_atmos_post_f141 + trigger ./jgfs_atmos_post_manager:release_post141 + edit FHRGRP '128' + edit FHRLST 'f141' + edit FHR 'f141' + edit HR '141' + task jgfs_atmos_post_f144 + trigger ./jgfs_atmos_post_manager:release_post144 + edit FHRGRP '129' + edit FHRLST 'f144' + edit FHR 'f144' + edit HR '144' + task jgfs_atmos_post_f147 + trigger ./jgfs_atmos_post_manager:release_post147 + edit FHRGRP '130' + edit FHRLST 'f147' + edit FHR 'f147' + edit HR '147' + task jgfs_atmos_post_f150 + trigger ./jgfs_atmos_post_manager:release_post150 + edit FHRGRP '131' + edit FHRLST 'f150' + edit FHR 'f150' + edit HR '150' + task jgfs_atmos_post_f153 + trigger ./jgfs_atmos_post_manager:release_post153 + edit FHRGRP '132' + edit FHRLST 'f153' + edit FHR 'f153' + edit HR '153' + task jgfs_atmos_post_f156 + trigger ./jgfs_atmos_post_manager:release_post156 + edit FHRGRP '133' + edit FHRLST 'f156' + edit FHR 'f156' + edit HR '156' + task jgfs_atmos_post_f159 + trigger ./jgfs_atmos_post_manager:release_post159 + edit FHRGRP '134' + edit FHRLST 'f159' + edit FHR 'f159' + edit HR '159' + task jgfs_atmos_post_f162 + trigger ./jgfs_atmos_post_manager:release_post162 + edit FHRGRP '135' + edit FHRLST 'f162' + edit FHR 'f162' + edit HR '162' + task jgfs_atmos_post_f165 + trigger ./jgfs_atmos_post_manager:release_post165 + edit FHRGRP '136' + edit FHRLST 'f165' + edit FHR 'f165' + edit HR '165' + task jgfs_atmos_post_f168 + trigger ./jgfs_atmos_post_manager:release_post168 + edit FHRGRP '137' + edit FHRLST 'f168' + edit FHR 'f168' + edit HR '168' + task jgfs_atmos_post_f171 + trigger ./jgfs_atmos_post_manager:release_post171 + edit FHRGRP '138' + edit FHRLST 'f171' + edit FHR 'f171' + edit HR '171' + task jgfs_atmos_post_f174 + trigger ./jgfs_atmos_post_manager:release_post174 + edit FHRGRP '139' + edit FHRLST 'f174' + edit FHR 'f174' + edit HR '174' + task jgfs_atmos_post_f177 + trigger ./jgfs_atmos_post_manager:release_post177 + edit FHRGRP '140' + edit FHRLST 'f177' + edit FHR 'f177' + edit HR '177' + task jgfs_atmos_post_f180 + trigger ./jgfs_atmos_post_manager:release_post180 + edit FHRGRP '141' + edit FHRLST 'f180' + edit FHR 'f180' + edit HR '180' + task jgfs_atmos_post_f183 + trigger ./jgfs_atmos_post_manager:release_post183 + edit FHRGRP '142' + edit FHRLST 'f183' + edit FHR 'f183' + edit HR '183' + task jgfs_atmos_post_f186 + trigger ./jgfs_atmos_post_manager:release_post186 + edit FHRGRP '143' + edit FHRLST 'f186' + edit FHR 'f186' + edit HR '186' + task jgfs_atmos_post_f189 + trigger ./jgfs_atmos_post_manager:release_post189 + edit FHRGRP '144' + edit FHRLST 'f189' + edit FHR 'f189' + edit HR '189' + task jgfs_atmos_post_f192 + trigger ./jgfs_atmos_post_manager:release_post192 + edit FHRGRP '145' + edit FHRLST 'f192' + edit FHR 'f192' + edit HR '192' + task jgfs_atmos_post_f195 + trigger ./jgfs_atmos_post_manager:release_post195 + edit FHRGRP '146' + edit FHRLST 'f195' + edit FHR 'f195' + edit HR '195' + task jgfs_atmos_post_f198 + trigger ./jgfs_atmos_post_manager:release_post198 + edit FHRGRP '147' + edit FHRLST 'f198' + edit FHR 'f198' + edit HR '198' + task jgfs_atmos_post_f201 + trigger ./jgfs_atmos_post_manager:release_post201 + edit FHRGRP '148' + edit FHRLST 'f201' + edit FHR 'f201' + edit HR '201' + task jgfs_atmos_post_f204 + trigger ./jgfs_atmos_post_manager:release_post204 + edit FHRGRP '149' + edit FHRLST 'f204' + edit FHR 'f204' + edit HR '204' + task jgfs_atmos_post_f207 + trigger ./jgfs_atmos_post_manager:release_post207 + edit FHRGRP '150' + edit FHRLST 'f207' + edit FHR 'f207' + edit HR '207' + task jgfs_atmos_post_f210 + trigger ./jgfs_atmos_post_manager:release_post210 + edit FHRGRP '151' + edit FHRLST 'f210' + edit FHR 'f210' + edit HR '210' + task jgfs_atmos_post_f213 + trigger ./jgfs_atmos_post_manager:release_post213 + edit FHRGRP '152' + edit FHRLST 'f213' + edit FHR 'f213' + edit HR '213' + task jgfs_atmos_post_f216 + trigger ./jgfs_atmos_post_manager:release_post216 + edit FHRGRP '153' + edit FHRLST 'f216' + edit FHR 'f216' + edit HR '216' + task jgfs_atmos_post_f219 + trigger ./jgfs_atmos_post_manager:release_post219 + edit FHRGRP '154' + edit FHRLST 'f219' + edit FHR 'f219' + edit HR '219' + task jgfs_atmos_post_f222 + trigger ./jgfs_atmos_post_manager:release_post222 + edit FHRGRP '155' + edit FHRLST 'f222' + edit FHR 'f222' + edit HR '222' + task jgfs_atmos_post_f225 + trigger ./jgfs_atmos_post_manager:release_post225 + edit FHRGRP '156' + edit FHRLST 'f225' + edit FHR 'f225' + edit HR '225' + task jgfs_atmos_post_f228 + trigger ./jgfs_atmos_post_manager:release_post228 + edit FHRGRP '157' + edit FHRLST 'f228' + edit FHR 'f228' + edit HR '228' + task jgfs_atmos_post_f231 + trigger ./jgfs_atmos_post_manager:release_post231 + edit FHRGRP '158' + edit FHRLST 'f231' + edit FHR 'f231' + edit HR '231' + task jgfs_atmos_post_f234 + trigger ./jgfs_atmos_post_manager:release_post234 + edit FHRGRP '159' + edit FHRLST 'f234' + edit FHR 'f234' + edit HR '234' + task jgfs_atmos_post_f237 + trigger ./jgfs_atmos_post_manager:release_post237 + edit FHRGRP '160' + edit FHRLST 'f237' + edit FHR 'f237' + edit HR '237' + task jgfs_atmos_post_f240 + trigger ./jgfs_atmos_post_manager:release_post240 + edit FHRGRP '161' + edit FHRLST 'f240' + edit FHR 'f240' + edit HR '240' + task jgfs_atmos_post_f243 + trigger ./jgfs_atmos_post_manager:release_post243 + edit FHRGRP '162' + edit FHRLST 'f243' + edit FHR 'f243' + edit HR '243' + task jgfs_atmos_post_f246 + trigger ./jgfs_atmos_post_manager:release_post246 + edit FHRGRP '163' + edit FHRLST 'f246' + edit FHR 'f246' + edit HR '246' + task jgfs_atmos_post_f249 + trigger ./jgfs_atmos_post_manager:release_post249 + edit FHRGRP '164' + edit FHRLST 'f249' + edit FHR 'f249' + edit HR '249' + task jgfs_atmos_post_f252 + trigger ./jgfs_atmos_post_manager:release_post252 + edit FHRGRP '165' + edit FHRLST 'f252' + edit FHR 'f252' + edit HR '252' + task jgfs_atmos_post_f255 + trigger ./jgfs_atmos_post_manager:release_post255 + edit FHRGRP '166' + edit FHRLST 'f255' + edit FHR 'f255' + edit HR '255' + task jgfs_atmos_post_f258 + trigger ./jgfs_atmos_post_manager:release_post258 + edit FHRGRP '167' + edit FHRLST 'f258' + edit FHR 'f258' + edit HR '258' + task jgfs_atmos_post_f261 + trigger ./jgfs_atmos_post_manager:release_post261 + edit FHRGRP '168' + edit FHRLST 'f261' + edit FHR 'f261' + edit HR '261' + task jgfs_atmos_post_f264 + trigger ./jgfs_atmos_post_manager:release_post264 + edit FHRGRP '169' + edit FHRLST 'f264' + edit FHR 'f264' + edit HR '264' + task jgfs_atmos_post_f267 + trigger ./jgfs_atmos_post_manager:release_post267 + edit FHRGRP '170' + edit FHRLST 'f267' + edit FHR 'f267' + edit HR '267' + task jgfs_atmos_post_f270 + trigger ./jgfs_atmos_post_manager:release_post270 + edit FHRGRP '171' + edit FHRLST 'f270' + edit FHR 'f270' + edit HR '270' + task jgfs_atmos_post_f273 + trigger ./jgfs_atmos_post_manager:release_post273 + edit FHRGRP '172' + edit FHRLST 'f273' + edit FHR 'f273' + edit HR '273' + task jgfs_atmos_post_f276 + trigger ./jgfs_atmos_post_manager:release_post276 + edit FHRGRP '173' + edit FHRLST 'f276' + edit FHR 'f276' + edit HR '276' + task jgfs_atmos_post_f279 + trigger ./jgfs_atmos_post_manager:release_post279 + edit FHRGRP '174' + edit FHRLST 'f279' + edit FHR 'f279' + edit HR '279' + task jgfs_atmos_post_f282 + trigger ./jgfs_atmos_post_manager:release_post282 + edit FHRGRP '175' + edit FHRLST 'f282' + edit FHR 'f282' + edit HR '282' + task jgfs_atmos_post_f285 + trigger ./jgfs_atmos_post_manager:release_post285 + edit FHRGRP '176' + edit FHRLST 'f285' + edit FHR 'f285' + edit HR '285' + task jgfs_atmos_post_f288 + trigger ./jgfs_atmos_post_manager:release_post288 + edit FHRGRP '177' + edit FHRLST 'f288' + edit FHR 'f288' + edit HR '288' + task jgfs_atmos_post_f291 + trigger ./jgfs_atmos_post_manager:release_post291 + edit FHRGRP '178' + edit FHRLST 'f291' + edit FHR 'f291' + edit HR '291' + task jgfs_atmos_post_f294 + trigger ./jgfs_atmos_post_manager:release_post294 + edit FHRGRP '179' + edit FHRLST 'f294' + edit FHR 'f294' + edit HR '294' + task jgfs_atmos_post_f297 + trigger ./jgfs_atmos_post_manager:release_post297 + edit FHRGRP '180' + edit FHRLST 'f297' + edit FHR 'f297' + edit HR '297' + task jgfs_atmos_post_f300 + trigger ./jgfs_atmos_post_manager:release_post300 + edit FHRGRP '181' + edit FHRLST 'f300' + edit FHR 'f300' + edit HR '300' + task jgfs_atmos_post_f303 + trigger ./jgfs_atmos_post_manager:release_post303 + edit FHRGRP '182' + edit FHRLST 'f303' + edit FHR 'f303' + edit HR '303' + task jgfs_atmos_post_f306 + trigger ./jgfs_atmos_post_manager:release_post306 + edit FHRGRP '183' + edit FHRLST 'f306' + edit FHR 'f306' + edit HR '306' + task jgfs_atmos_post_f309 + trigger ./jgfs_atmos_post_manager:release_post309 + edit FHRGRP '184' + edit FHRLST 'f309' + edit FHR 'f309' + edit HR '309' + task jgfs_atmos_post_f312 + trigger ./jgfs_atmos_post_manager:release_post312 + edit FHRGRP '185' + edit FHRLST 'f312' + edit FHR 'f312' + edit HR '312' + task jgfs_atmos_post_f315 + trigger ./jgfs_atmos_post_manager:release_post315 + edit FHRGRP '186' + edit FHRLST 'f315' + edit FHR 'f315' + edit HR '315' + task jgfs_atmos_post_f318 + trigger ./jgfs_atmos_post_manager:release_post318 + edit FHRGRP '187' + edit FHRLST 'f318' + edit FHR 'f318' + edit HR '318' + task jgfs_atmos_post_f321 + trigger ./jgfs_atmos_post_manager:release_post321 + edit FHRGRP '188' + edit FHRLST 'f321' + edit FHR 'f321' + edit HR '321' + task jgfs_atmos_post_f324 + trigger ./jgfs_atmos_post_manager:release_post324 + edit FHRGRP '189' + edit FHRLST 'f324' + edit FHR 'f324' + edit HR '324' + task jgfs_atmos_post_f327 + trigger ./jgfs_atmos_post_manager:release_post327 + edit FHRGRP '190' + edit FHRLST 'f327' + edit FHR 'f327' + edit HR '327' + task jgfs_atmos_post_f330 + trigger ./jgfs_atmos_post_manager:release_post330 + edit FHRGRP '191' + edit FHRLST 'f330' + edit FHR 'f330' + edit HR '330' + task jgfs_atmos_post_f333 + trigger ./jgfs_atmos_post_manager:release_post333 + edit FHRGRP '192' + edit FHRLST 'f333' + edit FHR 'f333' + edit HR '333' + task jgfs_atmos_post_f336 + trigger ./jgfs_atmos_post_manager:release_post336 + edit FHRGRP '193' + edit FHRLST 'f336' + edit FHR 'f336' + edit HR '336' + task jgfs_atmos_post_f339 + trigger ./jgfs_atmos_post_manager:release_post339 + edit FHRGRP '194' + edit FHRLST 'f339' + edit FHR 'f339' + edit HR '339' + task jgfs_atmos_post_f342 + trigger ./jgfs_atmos_post_manager:release_post342 + edit FHRGRP '195' + edit FHRLST 'f342' + edit FHR 'f342' + edit HR '342' + task jgfs_atmos_post_f345 + trigger ./jgfs_atmos_post_manager:release_post345 + edit FHRGRP '196' + edit FHRLST 'f345' + edit FHR 'f345' + edit HR '345' + task jgfs_atmos_post_f348 + trigger ./jgfs_atmos_post_manager:release_post348 + edit FHRGRP '197' + edit FHRLST 'f348' + edit FHR 'f348' + edit HR '348' + task jgfs_atmos_post_f351 + trigger ./jgfs_atmos_post_manager:release_post351 + edit FHRGRP '198' + edit FHRLST 'f351' + edit FHR 'f351' + edit HR '351' + task jgfs_atmos_post_f354 + trigger ./jgfs_atmos_post_manager:release_post354 + edit FHRGRP '199' + edit FHRLST 'f354' + edit FHR 'f354' + edit HR '354' + task jgfs_atmos_post_f357 + trigger ./jgfs_atmos_post_manager:release_post357 + edit FHRGRP '200' + edit FHRLST 'f357' + edit FHR 'f357' + edit HR '357' + task jgfs_atmos_post_f360 + trigger ./jgfs_atmos_post_manager:release_post360 + edit FHRGRP '201' + edit FHRLST 'f360' + edit FHR 'f360' + edit HR '360' + task jgfs_atmos_post_f363 + trigger ./jgfs_atmos_post_manager:release_post363 + edit FHRGRP '202' + edit FHRLST 'f363' + edit FHR 'f363' + edit HR '363' + task jgfs_atmos_post_f366 + trigger ./jgfs_atmos_post_manager:release_post366 + edit FHRGRP '203' + edit FHRLST 'f366' + edit FHR 'f366' + edit HR '366' + task jgfs_atmos_post_f369 + trigger ./jgfs_atmos_post_manager:release_post369 + edit FHRGRP '204' + edit FHRLST 'f369' + edit FHR 'f369' + edit HR '369' + task jgfs_atmos_post_f372 + trigger ./jgfs_atmos_post_manager:release_post372 + edit FHRGRP '205' + edit FHRLST 'f372' + edit FHR 'f372' + edit HR '372' + task jgfs_atmos_post_f375 + trigger ./jgfs_atmos_post_manager:release_post375 + edit FHRGRP '206' + edit FHRLST 'f375' + edit FHR 'f375' + edit HR '375' + task jgfs_atmos_post_f378 + trigger ./jgfs_atmos_post_manager:release_post378 + edit FHRGRP '207' + edit FHRLST 'f378' + edit FHR 'f378' + edit HR '378' + task jgfs_atmos_post_f381 + trigger ./jgfs_atmos_post_manager:release_post381 + edit FHRGRP '208' + edit FHRLST 'f381' + edit FHR 'f381' + edit HR '381' + task jgfs_atmos_post_f384 + trigger ./jgfs_atmos_post_manager:release_post384 + edit FHRGRP '209' + edit FHRLST 'f384' + edit FHR 'f384' + edit HR '384' + endfamily + family post_processing + family bufr_sounding + task jgfs_atmos_postsnd + trigger ../../post/jgfs_atmos_post_manager:release_post000 + endfamily + family bulletins + task jgfs_atmos_fbwind + trigger ../../post/jgfs_atmos_post_f006 == complete and ../../post/jgfs_atmos_post_f012 == complete and ../../post/jgfs_atmos_post_f024 == complete + endfamily + family awips_20km_1p0 + task jgfs_atmos_awips_f000 + trigger ../../post/jgfs_atmos_post_f000 == complete + edit FHRGRP '000' + edit FHRLST 'f000' + edit FCSTHR '000' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f003 + trigger ../../post/jgfs_atmos_post_f003 == complete + edit FHRGRP '003' + edit FHRLST 'f003' + edit FCSTHR '003' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f006 + trigger ../../post/jgfs_atmos_post_f006 == complete + edit FHRGRP '006' + edit FHRLST 'f006' + edit FCSTHR '006' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f009 + trigger ../../post/jgfs_atmos_post_f009 == complete + edit FHRGRP '009' + edit FHRLST 'f009' + edit FCSTHR '009' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f012 + trigger ../../post/jgfs_atmos_post_f012 == complete + edit FHRGRP '012' + edit FHRLST 'f012' + edit FCSTHR '012' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f015 + trigger ../../post/jgfs_atmos_post_f015 == complete + edit FHRGRP '015' + edit FHRLST 'f015' + edit FCSTHR '015' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f018 + trigger ../../post/jgfs_atmos_post_f018 == complete + edit FHRGRP '018' + edit FHRLST 'f018' + edit FCSTHR '018' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f021 + trigger ../../post/jgfs_atmos_post_f021 == complete + edit FHRGRP '021' + edit FHRLST 'f021' + edit FCSTHR '021' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f024 + trigger ../../post/jgfs_atmos_post_f024 == complete + edit FHRGRP '024' + edit FHRLST 'f024' + edit FCSTHR '024' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f027 + trigger ../../post/jgfs_atmos_post_f027 == complete + edit FHRGRP '027' + edit FHRLST 'f027' + edit FCSTHR '027' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f030 + trigger ../../post/jgfs_atmos_post_f030 == complete + edit FHRGRP '030' + edit FHRLST 'f030' + edit FCSTHR '030' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f033 + trigger ../../post/jgfs_atmos_post_f033 == complete + edit FHRGRP '033' + edit FHRLST 'f033' + edit FCSTHR '033' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f036 + trigger ../../post/jgfs_atmos_post_f036 == complete + edit FHRGRP '036' + edit FHRLST 'f036' + edit FCSTHR '036' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f039 + trigger ../../post/jgfs_atmos_post_f039 == complete + edit FHRGRP '039' + edit FHRLST 'f039' + edit FCSTHR '039' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f042 + trigger ../../post/jgfs_atmos_post_f042 == complete + edit FHRGRP '042' + edit FHRLST 'f042' + edit FCSTHR '042' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f045 + trigger ../../post/jgfs_atmos_post_f045 == complete + edit FHRGRP '045' + edit FHRLST 'f045' + edit FCSTHR '045' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f048 + trigger ../../post/jgfs_atmos_post_f048 == complete + edit FHRGRP '048' + edit FHRLST 'f048' + edit FCSTHR '048' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f051 + trigger ../../post/jgfs_atmos_post_f051 == complete + edit FHRGRP '051' + edit FHRLST 'f051' + edit FCSTHR '051' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f054 + trigger ../../post/jgfs_atmos_post_f054 == complete + edit FHRGRP '054' + edit FHRLST 'f054' + edit FCSTHR '054' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f057 + trigger ../../post/jgfs_atmos_post_f057 == complete + edit FHRGRP '057' + edit FHRLST 'f057' + edit FCSTHR '057' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f060 + trigger ../../post/jgfs_atmos_post_f060 == complete + edit FHRGRP '060' + edit FHRLST 'f060' + edit FCSTHR '060' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f063 + trigger ../../post/jgfs_atmos_post_f063 == complete + edit FHRGRP '063' + edit FHRLST 'f063' + edit FCSTHR '063' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f066 + trigger ../../post/jgfs_atmos_post_f066 == complete + edit FHRGRP '066' + edit FHRLST 'f066' + edit FCSTHR '066' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f069 + trigger ../../post/jgfs_atmos_post_f069 == complete + edit FHRGRP '069' + edit FHRLST 'f069' + edit FCSTHR '069' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f072 + trigger ../../post/jgfs_atmos_post_f072 == complete + edit FHRGRP '072' + edit FHRLST 'f072' + edit FCSTHR '072' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f075 + trigger ../../post/jgfs_atmos_post_f075 == complete + edit FHRGRP '075' + edit FHRLST 'f075' + edit FCSTHR '075' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f078 + trigger ../../post/jgfs_atmos_post_f078 == complete + edit FHRGRP '078' + edit FHRLST 'f078' + edit FCSTHR '078' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f081 + trigger ../../post/jgfs_atmos_post_f081 == complete + edit FHRGRP '081' + edit FHRLST 'f081' + edit FCSTHR '081' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f084 + trigger ../../post/jgfs_atmos_post_f084 == complete + edit FHRGRP '084' + edit FHRLST 'f084' + edit FCSTHR '084' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f090 + trigger ../../post/jgfs_atmos_post_f090 == complete + edit FHRGRP '090' + edit FHRLST 'f090' + edit FCSTHR '090' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f096 + trigger ../../post/jgfs_atmos_post_f096 == complete + edit FHRGRP '096' + edit FHRLST 'f096' + edit FCSTHR '096' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f102 + trigger ../../post/jgfs_atmos_post_f102 == complete + edit FHRGRP '102' + edit FHRLST 'f102' + edit FCSTHR '102' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f108 + trigger ../../post/jgfs_atmos_post_f108 == complete + edit FHRGRP '108' + edit FHRLST 'f108' + edit FCSTHR '108' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f114 + trigger ../../post/jgfs_atmos_post_f114 == complete + edit FHRGRP '114' + edit FHRLST 'f114' + edit FCSTHR '114' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f120 + trigger ../../post/jgfs_atmos_post_f120 == complete + edit FHRGRP '120' + edit FHRLST 'f120' + edit FCSTHR '120' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f126 + trigger ../../post/jgfs_atmos_post_f126 == complete + edit FHRGRP '126' + edit FHRLST 'f126' + edit FCSTHR '126' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f132 + trigger ../../post/jgfs_atmos_post_f132 == complete + edit FHRGRP '132' + edit FHRLST 'f132' + edit FCSTHR '132' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f138 + trigger ../../post/jgfs_atmos_post_f138 == complete + edit FHRGRP '138' + edit FHRLST 'f138' + edit FCSTHR '138' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f144 + trigger ../../post/jgfs_atmos_post_f144 == complete + edit FHRGRP '144' + edit FHRLST 'f144' + edit FCSTHR '144' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f150 + trigger ../../post/jgfs_atmos_post_f150 == complete + edit FHRGRP '150' + edit FHRLST 'f150' + edit FCSTHR '150' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f156 + trigger ../../post/jgfs_atmos_post_f156 == complete + edit FHRGRP '156' + edit FHRLST 'f156' + edit FCSTHR '156' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f162 + trigger ../../post/jgfs_atmos_post_f162 == complete + edit FHRGRP '162' + edit FHRLST 'f162' + edit FCSTHR '162' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f168 + trigger ../../post/jgfs_atmos_post_f168 == complete + edit FHRGRP '168' + edit FHRLST 'f168' + edit FCSTHR '168' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f174 + trigger ../../post/jgfs_atmos_post_f174 == complete + edit FHRGRP '174' + edit FHRLST 'f174' + edit FCSTHR '174' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f180 + trigger ../../post/jgfs_atmos_post_f180 == complete + edit FHRGRP '180' + edit FHRLST 'f180' + edit FCSTHR '180' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f186 + trigger ../../post/jgfs_atmos_post_f186 == complete + edit FHRGRP '186' + edit FHRLST 'f186' + edit FCSTHR '186' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f192 + trigger ../../post/jgfs_atmos_post_f192 == complete + edit FHRGRP '192' + edit FHRLST 'f192' + edit FCSTHR '192' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f198 + trigger ../../post/jgfs_atmos_post_f198 == complete + edit FHRGRP '198' + edit FHRLST 'f198' + edit FCSTHR '198' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f204 + trigger ../../post/jgfs_atmos_post_f204 == complete + edit FHRGRP '204' + edit FHRLST 'f204' + edit FCSTHR '204' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f210 + trigger ../../post/jgfs_atmos_post_f210 == complete + edit FHRGRP '210' + edit FHRLST 'f210' + edit FCSTHR '210' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f216 + trigger ../../post/jgfs_atmos_post_f216 == complete + edit FHRGRP '216' + edit FHRLST 'f216' + edit FCSTHR '216' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f222 + trigger ../../post/jgfs_atmos_post_f222 == complete + edit FHRGRP '222' + edit FHRLST 'f222' + edit FCSTHR '222' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f228 + trigger ../../post/jgfs_atmos_post_f228 == complete + edit FHRGRP '228' + edit FHRLST 'f228' + edit FCSTHR '228' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f234 + trigger ../../post/jgfs_atmos_post_f234 == complete + edit FHRGRP '234' + edit FHRLST 'f234' + edit FCSTHR '234' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f240 + trigger ../../post/jgfs_atmos_post_f240 == complete + edit FHRGRP '240' + edit FHRLST 'f240' + edit FCSTHR '240' + edit TRDRUN 'YES' + endfamily + family awips_g2 + task jgfs_atmos_awips_g2_f000 + trigger ../../post/jgfs_atmos_post_f000 == complete + edit FHRGRP '000' + edit FHRLST 'f000' + edit FCSTHR '000' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f006 + trigger ../../post/jgfs_atmos_post_f006 == complete + edit FHRGRP '006' + edit FHRLST 'f006' + edit FCSTHR '006' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f012 + trigger ../../post/jgfs_atmos_post_f012 == complete + edit FHRGRP '012' + edit FHRLST 'f012' + edit FCSTHR '012' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f018 + trigger ../../post/jgfs_atmos_post_f018 == complete + edit FHRGRP '018' + edit FHRLST 'f018' + edit FCSTHR '018' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f024 + trigger ../../post/jgfs_atmos_post_f024 == complete + edit FHRGRP '024' + edit FHRLST 'f024' + edit FCSTHR '024' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f030 + trigger ../../post/jgfs_atmos_post_f030 == complete + edit FHRGRP '030' + edit FHRLST 'f030' + edit FCSTHR '030' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f036 + trigger ../../post/jgfs_atmos_post_f036 == complete + edit FHRGRP '036' + edit FHRLST 'f036' + edit FCSTHR '036' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f042 + trigger ../../post/jgfs_atmos_post_f042 == complete + edit FHRGRP '042' + edit FHRLST 'f042' + edit FCSTHR '042' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f048 + trigger ../../post/jgfs_atmos_post_f048 == complete + edit FHRGRP '048' + edit FHRLST 'f048' + edit FCSTHR '048' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f054 + trigger ../../post/jgfs_atmos_post_f054 == complete + edit FHRGRP '054' + edit FHRLST 'f054' + edit FCSTHR '054' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f060 + trigger ../../post/jgfs_atmos_post_f060 == complete + edit FHRGRP '060' + edit FHRLST 'f060' + edit FCSTHR '060' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f066 + trigger ../../post/jgfs_atmos_post_f066 == complete + edit FHRGRP '066' + edit FHRLST 'f066' + edit FCSTHR '066' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f072 + trigger ../../post/jgfs_atmos_post_f072 == complete + edit FHRGRP '072' + edit FHRLST 'f072' + edit FCSTHR '072' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f078 + trigger ../../post/jgfs_atmos_post_f078 == complete + edit FHRGRP '078' + edit FHRLST 'f078' + edit FCSTHR '078' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f084 + trigger ../../post/jgfs_atmos_post_f084 == complete + edit FHRGRP '084' + edit FHRLST 'f084' + edit FCSTHR '084' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f090 + trigger ../../post/jgfs_atmos_post_f090 == complete + edit FHRGRP '090' + edit FHRLST 'f090' + edit FCSTHR '090' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f096 + trigger ../../post/jgfs_atmos_post_f096 == complete + edit FHRGRP '096' + edit FHRLST 'f096' + edit FCSTHR '096' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f102 + trigger ../../post/jgfs_atmos_post_f102 == complete + edit FHRGRP '102' + edit FHRLST 'f102' + edit FCSTHR '102' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f108 + trigger ../../post/jgfs_atmos_post_f108 == complete + edit FHRGRP '108' + edit FHRLST 'f108' + edit FCSTHR '108' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f114 + trigger ../../post/jgfs_atmos_post_f114 == complete + edit FHRGRP '114' + edit FHRLST 'f114' + edit FCSTHR '114' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f120 + trigger ../../post/jgfs_atmos_post_f120 == complete + edit FHRGRP '120' + edit FHRLST 'f120' + edit FCSTHR '120' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f126 + trigger ../../post/jgfs_atmos_post_f126 == complete + edit FHRGRP '126' + edit FHRLST 'f126' + edit FCSTHR '126' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f132 + trigger ../../post/jgfs_atmos_post_f132 == complete + edit FHRGRP '132' + edit FHRLST 'f132' + edit FCSTHR '132' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f138 + trigger ../../post/jgfs_atmos_post_f138 == complete + edit FHRGRP '138' + edit FHRLST 'f138' + edit FCSTHR '138' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f144 + trigger ../../post/jgfs_atmos_post_f144 == complete + edit FHRGRP '144' + edit FHRLST 'f144' + edit FCSTHR '144' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f150 + trigger ../../post/jgfs_atmos_post_f150 == complete + edit FHRGRP '150' + edit FHRLST 'f150' + edit FCSTHR '150' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f156 + trigger ../../post/jgfs_atmos_post_f156 == complete + edit FHRGRP '156' + edit FHRLST 'f156' + edit FCSTHR '156' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f162 + trigger ../../post/jgfs_atmos_post_f162 == complete + edit FHRGRP '162' + edit FHRLST 'f162' + edit FCSTHR '162' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f168 + trigger ../../post/jgfs_atmos_post_f168 == complete + edit FHRGRP '168' + edit FHRLST 'f168' + edit FCSTHR '168' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f174 + trigger ../../post/jgfs_atmos_post_f174 == complete + edit FHRGRP '174' + edit FHRLST 'f174' + edit FCSTHR '174' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f180 + trigger ../../post/jgfs_atmos_post_f180 == complete + edit FHRGRP '180' + edit FHRLST 'f180' + edit FCSTHR '180' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f186 + trigger ../../post/jgfs_atmos_post_f186 == complete + edit FHRGRP '186' + edit FHRLST 'f186' + edit FCSTHR '186' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f192 + trigger ../../post/jgfs_atmos_post_f192 == complete + edit FHRGRP '192' + edit FHRLST 'f192' + edit FCSTHR '192' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f198 + trigger ../../post/jgfs_atmos_post_f198 == complete + edit FHRGRP '198' + edit FHRLST 'f198' + edit FCSTHR '198' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f204 + trigger ../../post/jgfs_atmos_post_f204 == complete + edit FHRGRP '204' + edit FHRLST 'f204' + edit FCSTHR '204' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f210 + trigger ../../post/jgfs_atmos_post_f210 == complete + edit FHRGRP '210' + edit FHRLST 'f210' + edit FCSTHR '210' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f216 + trigger ../../post/jgfs_atmos_post_f216 == complete + edit FHRGRP '216' + edit FHRLST 'f216' + edit FCSTHR '216' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f222 + trigger ../../post/jgfs_atmos_post_f222 == complete + edit FHRGRP '222' + edit FHRLST 'f222' + edit FCSTHR '222' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f228 + trigger ../../post/jgfs_atmos_post_f228 == complete + edit FHRGRP '228' + edit FHRLST 'f228' + edit FCSTHR '228' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f234 + trigger ../../post/jgfs_atmos_post_f234 == complete + edit FHRGRP '234' + edit FHRLST 'f234' + edit FCSTHR '234' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f240 + trigger ../../post/jgfs_atmos_post_f240 == complete + edit FHRGRP '240' + edit FHRLST 'f240' + edit FCSTHR '240' + edit TRDRUN 'YES' + endfamily + endfamily + family gempak + task jgfs_atmos_gempak + trigger ../../atmos/analysis/jgfs_atmos_analysis == complete + task jgfs_atmos_gempak_meta + trigger ../../atmos/analysis/jgfs_atmos_analysis == complete + task jgfs_atmos_gempak_ncdc_upapgif + trigger ./jgfs_atmos_gempak == active or ./jgfs_atmos_gempak == complete + task jgfs_atmos_npoess_pgrb2_0p5deg + trigger ../post/jgfs_atmos_post_anl eq active or ../post/jgfs_atmos_post_anl == complete + task jgfs_atmos_pgrb2_spec_gempak + trigger ./jgfs_atmos_npoess_pgrb2_0p5deg == complete + endfamily + family verf + task jgfs_atmos_vminmon + trigger ../analysis/jgfs_atmos_analysis == complete + endfamily + endfamily + family wave + family init + task jgfs_wave_init + trigger /prod/primary/18/obsproc/v1.0/gfs/atmos/prep/jobsproc_gfs_atmos_prep == complete + endfamily + family prep + task jgfs_wave_prep + trigger ../init/jgfs_wave_init == complete + endfamily + family post + task jgfs_wave_postsbs + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post000 + task jgfs_wave_postpnt + trigger ../../jgfs_forecast == complete + task jgfs_wave_post_bndpnt + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post180 + task jgfs_wave_post_bndpntbll + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post180 + task jgfs_wave_prdgen_gridded + trigger ./jgfs_wave_postsbs == active or ./jgfs_wave_postsbs == complete + task jgfs_wave_prdgen_bulls + trigger ./jgfs_wave_postpnt == complete and ./jgfs_wave_postsbs == complete + endfamily + family gempak + task jgfs_wave_gempak + trigger ../post/jgfs_wave_postsbs == active or ../post/jgfs_wave_postsbs == complete + endfamily + endfamily + task jgfs_forecast + trigger ./atmos/analysis/jgfs_atmos_analysis:release_fcst and ./wave/prep/jgfs_wave_prep == complete + endfamily + family gdas + edit RUN 'gdas' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/gdas' + family atmos + family obsproc + family dump + task jgdas_atmos_tropcy_qc_reloc + trigger :TIME >= 2345 or :TIME < 0545 + endfamily + family prep + task jgdas_atmos_emcsfc_sfc_prep + trigger /prod/primary/18/obsproc/v1.0/gdas/atmos/dump/jobsproc_gdas_atmos_dump:release_sfcprep + endfamily + endfamily + family analysis + task jgdas_atmos_analysis + trigger /prod/primary/18/obsproc/v1.0/gdas/atmos/prep/jobsproc_gdas_atmos_prep == complete and ../obsproc/prep/jgdas_atmos_emcsfc_sfc_prep == complete + event 1 release_fcst + task jgdas_atmos_analysis_calc + trigger ./jgdas_atmos_analysis == complete + task jgdas_atmos_analysis_diag + trigger ./jgdas_atmos_analysis == complete + endfamily + family post + task jgdas_atmos_post_manager + trigger ../../jgdas_forecast == active + event 1 release_postanl + event 2 release_post000 + event 3 release_post001 + event 4 release_post002 + event 5 release_post003 + event 6 release_post004 + event 7 release_post005 + event 8 release_post006 + event 9 release_post007 + event 10 release_post008 + event 11 release_post009 + task jgdas_atmos_post_anl + trigger ./jgdas_atmos_post_manager:release_postanl + edit FHRGRP '000' + edit FHRLST 'anl' + edit HR 'anl' + edit FHR 'anl' + task jgdas_atmos_post_f000 + trigger ./jgdas_atmos_post_manager:release_post000 + edit FHR 'f000' + edit HR '000' + edit FHRGRP '001' + edit FHRLST 'f000' + task jgdas_atmos_post_f001 + trigger ./jgdas_atmos_post_manager:release_post001 + edit FHR 'f001' + edit HR '001' + edit FHRGRP '002' + edit FHRLST 'f001' + task jgdas_atmos_post_f002 + trigger ./jgdas_atmos_post_manager:release_post002 + edit FHR 'f002' + edit HR '002' + edit FHRGRP '003' + edit FHRLST 'f002' + task jgdas_atmos_post_f003 + trigger ./jgdas_atmos_post_manager:release_post003 + edit FHR 'f003' + edit HR '003' + edit FHRGRP '004' + edit FHRLST 'f003' + task jgdas_atmos_post_f004 + trigger ./jgdas_atmos_post_manager:release_post004 + edit FHR 'f004' + edit HR '004' + edit FHRGRP '005' + edit FHRLST 'f004' + task jgdas_atmos_post_f005 + trigger ./jgdas_atmos_post_manager:release_post005 + edit FHR 'f005' + edit HR '005' + edit FHRGRP '006' + edit FHRLST 'f005' + task jgdas_atmos_post_f006 + trigger ./jgdas_atmos_post_manager:release_post006 + edit FHR 'f006' + edit HR '006' + edit FHRGRP '007' + edit FHRLST 'f006' + task jgdas_atmos_post_f007 + trigger ./jgdas_atmos_post_manager:release_post007 + edit FHR 'f007' + edit HR '007' + edit FHRGRP '008' + edit FHRLST 'f007' + task jgdas_atmos_post_f008 + trigger ./jgdas_atmos_post_manager:release_post008 + edit FHR 'f008' + edit HR '008' + edit FHRGRP '009' + edit FHRLST 'f008' + task jgdas_atmos_post_f009 + trigger ./jgdas_atmos_post_manager:release_post009 + edit FHR 'f009' + edit HR '009' + edit FHRGRP '010' + edit FHRLST 'f009' + endfamily + family post_processing + task jgdas_atmos_chgres_forenkf + trigger ../../jgdas_forecast == complete and ../../../enkfgdas/forecast == complete + endfamily + family gempak + task jgdas_atmos_gempak + trigger ../../jgdas_forecast == complete + task jgdas_atmos_gempak_meta_ncdc + trigger ./jgdas_atmos_gempak == complete + endfamily + family verf + task jgdas_atmos_vminmon + trigger ../analysis/jgdas_atmos_analysis == complete + task jgdas_atmos_verfrad + trigger ../analysis/jgdas_atmos_analysis_diag == complete + task jgdas_atmos_verfozn + trigger ../analysis/jgdas_atmos_analysis_diag == complete + endfamily + endfamily + family wave + family init + task jgdas_wave_init + trigger /prod/primary/18/obsproc/v1.0/gdas/atmos/prep/jobsproc_gdas_atmos_prep == complete + endfamily + family prep + task jgdas_wave_prep + trigger ../init/jgdas_wave_init == complete + endfamily + family post + task jgdas_wave_postsbs + trigger ../../atmos/post/jgdas_atmos_post_manager:release_post000 + task jgdas_wave_postpnt + trigger ../../jgdas_forecast == complete + endfamily + endfamily + task jgdas_forecast + trigger ./atmos/analysis/jgdas_atmos_analysis:release_fcst and ./wave/prep/jgdas_wave_prep == complete + endfamily + family enkfgdas + edit RUN 'gdas' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas' + family analysis + family create + task jenkfgdas_select_obs + trigger /prod/primary/18/obsproc/v1.0/gdas/atmos/prep/jobsproc_gdas_atmos_prep == complete and /prod/primary/12/gfs/v16.2/enkfgdas/post == complete + task jenkfgdas_diag + trigger ./jenkfgdas_select_obs == complete + task jenkfgdas_update + trigger ./jenkfgdas_diag == complete + endfamily + family recenter + family ecen + trigger ../create/jenkfgdas_update == complete and ../../../gdas/atmos/analysis/jgdas_atmos_analysis_calc == complete and /prod/primary/12/gfs/v16.2/gdas/atmos/post_processing/jgdas_atmos_chgres_forenkf == complete + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas/analysis/recenter/ecen' + family grp1 + edit FHRGRP '003' + task jenkfgdas_ecen + endfamily + family grp2 + edit FHRGRP '006' + task jenkfgdas_ecen + endfamily + family grp3 + edit FHRGRP '009' + task jenkfgdas_ecen + endfamily + endfamily + task jenkfgdas_sfc + trigger ../create/jenkfgdas_update == complete and ../../../gdas/atmos/analysis/jgdas_atmos_analysis_calc == complete + endfamily + endfamily + family forecast + trigger ./analysis/recenter/ecen == complete and ./analysis/recenter/jenkfgdas_sfc == complete + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas/forecast' + family grp1 + edit ENSGRP '01' + task jenkfgdas_fcst + endfamily + family grp2 + edit ENSGRP '02' + task jenkfgdas_fcst + endfamily + family grp3 + edit ENSGRP '03' + task jenkfgdas_fcst + endfamily + family grp4 + edit ENSGRP '04' + task jenkfgdas_fcst + endfamily + family grp5 + edit ENSGRP '05' + task jenkfgdas_fcst + endfamily + family grp6 + edit ENSGRP '06' + task jenkfgdas_fcst + endfamily + family grp7 + edit ENSGRP '07' + task jenkfgdas_fcst + endfamily + family grp8 + edit ENSGRP '08' + task jenkfgdas_fcst + endfamily + family grp9 + edit ENSGRP '09' + task jenkfgdas_fcst + endfamily + family grp10 + edit ENSGRP '10' + task jenkfgdas_fcst + endfamily + family grp11 + edit ENSGRP '11' + task jenkfgdas_fcst + endfamily + family grp12 + edit ENSGRP '12' + task jenkfgdas_fcst + endfamily + family grp13 + edit ENSGRP '13' + task jenkfgdas_fcst + endfamily + family grp14 + edit ENSGRP '14' + task jenkfgdas_fcst + endfamily + family grp15 + edit ENSGRP '15' + task jenkfgdas_fcst + endfamily + family grp16 + edit ENSGRP '16' + task jenkfgdas_fcst + endfamily + family grp17 + edit ENSGRP '17' + task jenkfgdas_fcst + endfamily + family grp18 + edit ENSGRP '18' + task jenkfgdas_fcst + endfamily + family grp19 + edit ENSGRP '19' + task jenkfgdas_fcst + endfamily + family grp20 + edit ENSGRP '20' + task jenkfgdas_fcst + endfamily + family grp21 + edit ENSGRP '21' + task jenkfgdas_fcst + endfamily + family grp22 + edit ENSGRP '22' + task jenkfgdas_fcst + endfamily + family grp23 + edit ENSGRP '23' + task jenkfgdas_fcst + endfamily + family grp24 + edit ENSGRP '24' + task jenkfgdas_fcst + endfamily + family grp25 + edit ENSGRP '25' + task jenkfgdas_fcst + endfamily + family grp26 + edit ENSGRP '26' + task jenkfgdas_fcst + endfamily + family grp27 + edit ENSGRP '27' + task jenkfgdas_fcst + endfamily + family grp28 + edit ENSGRP '28' + task jenkfgdas_fcst + endfamily + family grp29 + edit ENSGRP '29' + task jenkfgdas_fcst + endfamily + family grp30 + edit ENSGRP '30' + task jenkfgdas_fcst + endfamily + family grp31 + edit ENSGRP '31' + task jenkfgdas_fcst + endfamily + family grp32 + edit ENSGRP '32' + task jenkfgdas_fcst + endfamily + family grp33 + edit ENSGRP '33' + task jenkfgdas_fcst + endfamily + family grp34 + edit ENSGRP '34' + task jenkfgdas_fcst + endfamily + family grp35 + edit ENSGRP '35' + task jenkfgdas_fcst + endfamily + family grp36 + edit ENSGRP '36' + task jenkfgdas_fcst + endfamily + family grp37 + edit ENSGRP '37' + task jenkfgdas_fcst + endfamily + family grp38 + edit ENSGRP '38' + task jenkfgdas_fcst + endfamily + family grp39 + edit ENSGRP '39' + task jenkfgdas_fcst + endfamily + family grp40 + edit ENSGRP '40' + task jenkfgdas_fcst + endfamily + endfamily + family post + trigger ./forecast == complete + task jenkfgdas_post_f003 + edit FHMIN_EPOS '003' + edit FHMAX_EPOS '003' + edit FHOUT_EPOS '003' + task jenkfgdas_post_f004 + edit FHMIN_EPOS '004' + edit FHMAX_EPOS '004' + edit FHOUT_EPOS '004' + task jenkfgdas_post_f005 + edit FHMIN_EPOS '005' + edit FHMAX_EPOS '005' + edit FHOUT_EPOS '005' + task jenkfgdas_post_f006 + edit FHMIN_EPOS '006' + edit FHMAX_EPOS '006' + edit FHOUT_EPOS '006' + task jenkfgdas_post_f007 + edit FHMIN_EPOS '007' + edit FHMAX_EPOS '007' + edit FHOUT_EPOS '007' + task jenkfgdas_post_f008 + edit FHMIN_EPOS '008' + edit FHMAX_EPOS '008' + edit FHOUT_EPOS '008' + task jenkfgdas_post_f009 + edit FHMIN_EPOS '009' + edit FHMAX_EPOS '009' + edit FHOUT_EPOS '009' + endfamily + endfamily + endfamily + diff --git a/ecf/defs/prod00.def b/ecf/defs/prod00.def new file mode 100644 index 0000000000..2a8338c7bd --- /dev/null +++ b/ecf/defs/prod00.def @@ -0,0 +1,2549 @@ +extern /prod18/gdas/jgdas_forecast +extern /prod18/gdas/atmos/post +extern /prod18/enkfgdas/post +extern /prod18/gdas/atmos/post_processing/jgdas_atmos_chgres_forenkf + +suite prod00 + repeat day 1 + edit ECF_TRIES '1' + edit CYC '00' + edit ENVIR 'prod' + edit PROJ 'GFS' + edit PROJENVIR 'DEV' + edit QUEUE 'dev' + edit QUEUESHARED 'dev_shared' + edit QUEUESERV 'dev_transfer' + edit ECF_INCLUDE '/lfs/h2/emc/global/noscrub/Lin.Gan/git/feature-ops-wcoss2/ecf/include' + edit MACHINE_SITE 'development' + + family gfs + edit CYC '00' + edit PACKAGEHOME '/lfs/h2/emc/global/noscrub/Lin.Gan/git/feature-ops-wcoss2' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/gfs' + edit PROJ 'GFS' + edit PROJENVIR 'DEV' + edit NET 'gfs' + edit RUN 'gfs' + edit COM '/lfs/h2/emc/ptmp/Lin.Gan/ecfops/com' + edit QUEUE 'dev' + edit QUEUESHARED 'dev_shared' + edit QUEUESERV 'dev_transfer' + family atmos + family obsproc + family dump + task jgfs_atmos_tropcy_qc_reloc + event 1 jtwc_bull_email + time 02:41 + endfamily + family prep + task jgfs_atmos_emcsfc_sfc_prep + trigger ../dump/jgfs_atmos_dump:release_sfcprep + endfamily + endfamily + family analysis + task jgfs_atmos_analysis + trigger ../obsproc/prep/jgfs_atmos_prep == complete and ../obsproc/prep/jgfs_atmos_emcsfc_sfc_prep == complete + event 1 release_fcst + task jgfs_atmos_analysis_calc + trigger ./jgfs_atmos_analysis == complete + endfamily + family post + task jgfs_atmos_post_manager + trigger ../analysis/jgfs_atmos_analysis == complete + event 1 release_postanl + event 2 release_post000 + event 3 release_post001 + event 4 release_post002 + event 5 release_post003 + event 6 release_post004 + event 7 release_post005 + event 8 release_post006 + event 9 release_post007 + event 10 release_post008 + event 11 release_post009 + event 12 release_post010 + event 13 release_post011 + event 14 release_post012 + event 15 release_post013 + event 16 release_post014 + event 17 release_post015 + event 18 release_post016 + event 19 release_post017 + event 20 release_post018 + event 21 release_post019 + event 22 release_post020 + event 23 release_post021 + event 24 release_post022 + event 25 release_post023 + event 26 release_post024 + event 27 release_post025 + event 28 release_post026 + event 29 release_post027 + event 30 release_post028 + event 31 release_post029 + event 32 release_post030 + event 33 release_post031 + event 34 release_post032 + event 35 release_post033 + event 36 release_post034 + event 37 release_post035 + event 38 release_post036 + event 39 release_post037 + event 40 release_post038 + event 41 release_post039 + event 42 release_post040 + event 43 release_post041 + event 44 release_post042 + event 45 release_post043 + event 46 release_post044 + event 47 release_post045 + event 48 release_post046 + event 49 release_post047 + event 50 release_post048 + event 51 release_post049 + event 52 release_post050 + event 53 release_post051 + event 54 release_post052 + event 55 release_post053 + event 56 release_post054 + event 57 release_post055 + event 58 release_post056 + event 59 release_post057 + event 60 release_post058 + event 61 release_post059 + event 62 release_post060 + event 63 release_post061 + event 64 release_post062 + event 65 release_post063 + event 66 release_post064 + event 67 release_post065 + event 68 release_post066 + event 69 release_post067 + event 70 release_post068 + event 71 release_post069 + event 72 release_post070 + event 73 release_post071 + event 74 release_post072 + event 75 release_post073 + event 76 release_post074 + event 77 release_post075 + event 78 release_post076 + event 79 release_post077 + event 80 release_post078 + event 81 release_post079 + event 82 release_post080 + event 83 release_post081 + event 84 release_post082 + event 85 release_post083 + event 86 release_post084 + event 87 release_post085 + event 88 release_post086 + event 89 release_post087 + event 90 release_post088 + event 91 release_post089 + event 92 release_post090 + event 93 release_post091 + event 94 release_post092 + event 95 release_post093 + event 96 release_post094 + event 97 release_post095 + event 98 release_post096 + event 99 release_post097 + event 100 release_post098 + event 101 release_post099 + event 102 release_post100 + event 103 release_post101 + event 104 release_post102 + event 105 release_post103 + event 106 release_post104 + event 107 release_post105 + event 108 release_post106 + event 109 release_post107 + event 110 release_post108 + event 111 release_post109 + event 112 release_post110 + event 113 release_post111 + event 114 release_post112 + event 115 release_post113 + event 116 release_post114 + event 117 release_post115 + event 118 release_post116 + event 119 release_post117 + event 120 release_post118 + event 121 release_post119 + event 122 release_post120 + event 123 release_post123 + event 124 release_post126 + event 125 release_post129 + event 126 release_post132 + event 127 release_post135 + event 128 release_post138 + event 129 release_post141 + event 130 release_post144 + event 131 release_post147 + event 132 release_post150 + event 133 release_post153 + event 134 release_post156 + event 135 release_post159 + event 136 release_post162 + event 137 release_post165 + event 138 release_post168 + event 139 release_post171 + event 140 release_post174 + event 141 release_post177 + event 142 release_post180 + event 143 release_post183 + event 144 release_post186 + event 145 release_post189 + event 146 release_post192 + event 147 release_post195 + event 148 release_post198 + event 149 release_post201 + event 150 release_post204 + event 151 release_post207 + event 152 release_post210 + event 153 release_post213 + event 154 release_post216 + event 155 release_post219 + event 156 release_post222 + event 157 release_post225 + event 158 release_post228 + event 159 release_post231 + event 160 release_post234 + event 161 release_post237 + event 162 release_post240 + event 163 release_post243 + event 164 release_post246 + event 165 release_post249 + event 166 release_post252 + event 167 release_post255 + event 168 release_post258 + event 169 release_post261 + event 170 release_post264 + event 171 release_post267 + event 172 release_post270 + event 173 release_post273 + event 174 release_post276 + event 175 release_post279 + event 176 release_post282 + event 177 release_post285 + event 178 release_post288 + event 179 release_post291 + event 180 release_post294 + event 181 release_post297 + event 182 release_post300 + event 183 release_post303 + event 184 release_post306 + event 185 release_post309 + event 186 release_post312 + event 187 release_post315 + event 188 release_post318 + event 189 release_post321 + event 190 release_post324 + event 191 release_post327 + event 192 release_post330 + event 193 release_post333 + event 194 release_post336 + event 195 release_post339 + event 196 release_post342 + event 197 release_post345 + event 198 release_post348 + event 199 release_post351 + event 200 release_post354 + event 201 release_post357 + event 202 release_post360 + event 203 release_post363 + event 204 release_post366 + event 205 release_post369 + event 206 release_post372 + event 207 release_post375 + event 208 release_post378 + event 209 release_post381 + event 210 release_post384 + task jgfs_atmos_post_anl + trigger ./jgfs_atmos_post_manager:release_postanl + edit FHRGRP '000' + edit FHRLST 'anl' + edit HR 'anl' + edit FHR 'anl' + task jgfs_atmos_post_f000 + trigger ./jgfs_atmos_post_manager:release_post000 + edit FHRGRP '001' + edit FHRLST 'f000' + edit FHR 'f000' + edit HR '000' + task jgfs_atmos_post_f001 + trigger ./jgfs_atmos_post_manager:release_post001 + edit FHRGRP '002' + edit FHRLST 'f001' + edit FHR 'f001' + edit HR '001' + task jgfs_atmos_post_f002 + trigger ./jgfs_atmos_post_manager:release_post002 + edit FHRGRP '003' + edit FHRLST 'f002' + edit FHR 'f002' + edit HR '002' + task jgfs_atmos_post_f003 + trigger ./jgfs_atmos_post_manager:release_post003 + edit FHRGRP '004' + edit FHRLST 'f003' + edit FHR 'f003' + edit HR '003' + task jgfs_atmos_post_f004 + trigger ./jgfs_atmos_post_manager:release_post004 + edit FHRGRP '005' + edit FHRLST 'f004' + edit FHR 'f004' + edit HR '004' + task jgfs_atmos_post_f005 + trigger ./jgfs_atmos_post_manager:release_post005 + edit FHRGRP '006' + edit FHRLST 'f005' + edit FHR 'f005' + edit HR '005' + task jgfs_atmos_post_f006 + trigger ./jgfs_atmos_post_manager:release_post006 + edit FHRGRP '007' + edit FHRLST 'f006' + edit FHR 'f006' + edit HR '006' + task jgfs_atmos_post_f007 + trigger ./jgfs_atmos_post_manager:release_post007 + edit FHRGRP '008' + edit FHRLST 'f007' + edit FHR 'f007' + edit HR '007' + task jgfs_atmos_post_f008 + trigger ./jgfs_atmos_post_manager:release_post008 + edit FHRGRP '009' + edit FHRLST 'f008' + edit FHR 'f008' + edit HR '008' + task jgfs_atmos_post_f009 + trigger ./jgfs_atmos_post_manager:release_post009 + edit FHRGRP '010' + edit FHRLST 'f009' + edit FHR 'f009' + edit HR '009' + task jgfs_atmos_post_f010 + trigger ./jgfs_atmos_post_manager:release_post010 + edit FHRGRP '011' + edit FHRLST 'f010' + edit FHR 'f010' + edit HR '010' + task jgfs_atmos_post_f011 + trigger ./jgfs_atmos_post_manager:release_post011 + edit FHRGRP '012' + edit FHRLST 'f011' + edit FHR 'f011' + edit HR '011' + task jgfs_atmos_post_f012 + trigger ./jgfs_atmos_post_manager:release_post012 + edit FHRGRP '013' + edit FHRLST 'f012' + edit FHR 'f012' + edit HR '012' + task jgfs_atmos_post_f013 + trigger ./jgfs_atmos_post_manager:release_post013 + edit FHRGRP '014' + edit FHRLST 'f013' + edit FHR 'f013' + edit HR '013' + task jgfs_atmos_post_f014 + trigger ./jgfs_atmos_post_manager:release_post014 + edit FHRGRP '015' + edit FHRLST 'f014' + edit FHR 'f014' + edit HR '014' + task jgfs_atmos_post_f015 + trigger ./jgfs_atmos_post_manager:release_post015 + edit FHRGRP '016' + edit FHRLST 'f015' + edit FHR 'f015' + edit HR '015' + task jgfs_atmos_post_f016 + trigger ./jgfs_atmos_post_manager:release_post016 + edit FHRGRP '017' + edit FHRLST 'f016' + edit FHR 'f016' + edit HR '016' + task jgfs_atmos_post_f017 + trigger ./jgfs_atmos_post_manager:release_post017 + edit FHRGRP '018' + edit FHRLST 'f017' + edit FHR 'f017' + edit HR '017' + task jgfs_atmos_post_f018 + trigger ./jgfs_atmos_post_manager:release_post018 + edit FHRGRP '019' + edit FHRLST 'f018' + edit FHR 'f018' + edit HR '018' + task jgfs_atmos_post_f019 + trigger ./jgfs_atmos_post_manager:release_post019 + edit FHRGRP '020' + edit FHRLST 'f019' + edit FHR 'f019' + edit HR '019' + task jgfs_atmos_post_f020 + trigger ./jgfs_atmos_post_manager:release_post020 + edit FHRGRP '021' + edit FHRLST 'f020' + edit FHR 'f020' + edit HR '020' + task jgfs_atmos_post_f021 + trigger ./jgfs_atmos_post_manager:release_post021 + edit FHRGRP '022' + edit FHRLST 'f021' + edit FHR 'f021' + edit HR '021' + task jgfs_atmos_post_f022 + trigger ./jgfs_atmos_post_manager:release_post022 + edit FHRGRP '023' + edit FHRLST 'f022' + edit FHR 'f022' + edit HR '022' + task jgfs_atmos_post_f023 + trigger ./jgfs_atmos_post_manager:release_post023 + edit FHRGRP '024' + edit FHRLST 'f023' + edit FHR 'f023' + edit HR '023' + task jgfs_atmos_post_f024 + trigger ./jgfs_atmos_post_manager:release_post024 + edit FHRGRP '025' + edit FHRLST 'f024' + edit FHR 'f024' + edit HR '024' + task jgfs_atmos_post_f025 + trigger ./jgfs_atmos_post_manager:release_post025 + edit FHRGRP '026' + edit FHRLST 'f025' + edit FHR 'f025' + edit HR '025' + task jgfs_atmos_post_f026 + trigger ./jgfs_atmos_post_manager:release_post026 + edit FHRGRP '027' + edit FHRLST 'f026' + edit FHR 'f026' + edit HR '026' + task jgfs_atmos_post_f027 + trigger ./jgfs_atmos_post_manager:release_post027 + edit FHRGRP '028' + edit FHRLST 'f027' + edit FHR 'f027' + edit HR '027' + task jgfs_atmos_post_f028 + trigger ./jgfs_atmos_post_manager:release_post028 + edit FHRGRP '029' + edit FHRLST 'f028' + edit FHR 'f028' + edit HR '028' + task jgfs_atmos_post_f029 + trigger ./jgfs_atmos_post_manager:release_post029 + edit FHRGRP '030' + edit FHRLST 'f029' + edit FHR 'f029' + edit HR '029' + task jgfs_atmos_post_f030 + trigger ./jgfs_atmos_post_manager:release_post030 + edit FHRGRP '031' + edit FHRLST 'f030' + edit FHR 'f030' + edit HR '030' + task jgfs_atmos_post_f031 + trigger ./jgfs_atmos_post_manager:release_post031 + edit FHRGRP '032' + edit FHRLST 'f031' + edit FHR 'f031' + edit HR '031' + task jgfs_atmos_post_f032 + trigger ./jgfs_atmos_post_manager:release_post032 + edit FHRGRP '033' + edit FHRLST 'f032' + edit FHR 'f032' + edit HR '032' + task jgfs_atmos_post_f033 + trigger ./jgfs_atmos_post_manager:release_post033 + edit FHRGRP '034' + edit FHRLST 'f033' + edit FHR 'f033' + edit HR '033' + task jgfs_atmos_post_f034 + trigger ./jgfs_atmos_post_manager:release_post034 + edit FHRGRP '035' + edit FHRLST 'f034' + edit FHR 'f034' + edit HR '034' + task jgfs_atmos_post_f035 + trigger ./jgfs_atmos_post_manager:release_post035 + edit FHRGRP '036' + edit FHRLST 'f035' + edit FHR 'f035' + edit HR '035' + task jgfs_atmos_post_f036 + trigger ./jgfs_atmos_post_manager:release_post036 + edit FHRGRP '037' + edit FHRLST 'f036' + edit FHR 'f036' + edit HR '036' + task jgfs_atmos_post_f037 + trigger ./jgfs_atmos_post_manager:release_post037 + edit FHRGRP '038' + edit FHRLST 'f037' + edit FHR 'f037' + edit HR '037' + task jgfs_atmos_post_f038 + trigger ./jgfs_atmos_post_manager:release_post038 + edit FHRGRP '039' + edit FHRLST 'f038' + edit FHR 'f038' + edit HR '038' + task jgfs_atmos_post_f039 + trigger ./jgfs_atmos_post_manager:release_post039 + edit FHRGRP '040' + edit FHRLST 'f039' + edit FHR 'f039' + edit HR '039' + task jgfs_atmos_post_f040 + trigger ./jgfs_atmos_post_manager:release_post040 + edit FHRGRP '041' + edit FHRLST 'f040' + edit FHR 'f040' + edit HR '040' + task jgfs_atmos_post_f041 + trigger ./jgfs_atmos_post_manager:release_post041 + edit FHRGRP '042' + edit FHRLST 'f041' + edit FHR 'f041' + edit HR '041' + task jgfs_atmos_post_f042 + trigger ./jgfs_atmos_post_manager:release_post042 + edit FHRGRP '043' + edit FHRLST 'f042' + edit FHR 'f042' + edit HR '042' + task jgfs_atmos_post_f043 + trigger ./jgfs_atmos_post_manager:release_post043 + edit FHRGRP '044' + edit FHRLST 'f043' + edit FHR 'f043' + edit HR '043' + task jgfs_atmos_post_f044 + trigger ./jgfs_atmos_post_manager:release_post044 + edit FHRGRP '045' + edit FHRLST 'f044' + edit FHR 'f044' + edit HR '044' + task jgfs_atmos_post_f045 + trigger ./jgfs_atmos_post_manager:release_post045 + edit FHRGRP '046' + edit FHRLST 'f045' + edit FHR 'f045' + edit HR '045' + task jgfs_atmos_post_f046 + trigger ./jgfs_atmos_post_manager:release_post046 + edit FHRGRP '047' + edit FHRLST 'f046' + edit FHR 'f046' + edit HR '046' + task jgfs_atmos_post_f047 + trigger ./jgfs_atmos_post_manager:release_post047 + edit FHRGRP '048' + edit FHRLST 'f047' + edit FHR 'f047' + edit HR '047' + task jgfs_atmos_post_f048 + trigger ./jgfs_atmos_post_manager:release_post048 + edit FHRGRP '049' + edit FHRLST 'f048' + edit FHR 'f048' + edit HR '048' + task jgfs_atmos_post_f049 + trigger ./jgfs_atmos_post_manager:release_post049 + edit FHRGRP '050' + edit FHRLST 'f049' + edit FHR 'f049' + edit HR '049' + task jgfs_atmos_post_f050 + trigger ./jgfs_atmos_post_manager:release_post050 + edit FHRGRP '051' + edit FHRLST 'f050' + edit FHR 'f050' + edit HR '050' + task jgfs_atmos_post_f051 + trigger ./jgfs_atmos_post_manager:release_post051 + edit FHRGRP '052' + edit FHRLST 'f051' + edit FHR 'f051' + edit HR '051' + task jgfs_atmos_post_f052 + trigger ./jgfs_atmos_post_manager:release_post052 + edit FHRGRP '053' + edit FHRLST 'f052' + edit FHR 'f052' + edit HR '052' + task jgfs_atmos_post_f053 + trigger ./jgfs_atmos_post_manager:release_post053 + edit FHRGRP '054' + edit FHRLST 'f053' + edit FHR 'f053' + edit HR '053' + task jgfs_atmos_post_f054 + trigger ./jgfs_atmos_post_manager:release_post054 + edit FHRGRP '055' + edit FHRLST 'f054' + edit FHR 'f054' + edit HR '054' + task jgfs_atmos_post_f055 + trigger ./jgfs_atmos_post_manager:release_post055 + edit FHRGRP '056' + edit FHRLST 'f055' + edit FHR 'f055' + edit HR '055' + task jgfs_atmos_post_f056 + trigger ./jgfs_atmos_post_manager:release_post056 + edit FHRGRP '057' + edit FHRLST 'f056' + edit FHR 'f056' + edit HR '056' + task jgfs_atmos_post_f057 + trigger ./jgfs_atmos_post_manager:release_post057 + edit FHRGRP '058' + edit FHRLST 'f057' + edit FHR 'f057' + edit HR '057' + task jgfs_atmos_post_f058 + trigger ./jgfs_atmos_post_manager:release_post058 + edit FHRGRP '059' + edit FHRLST 'f058' + edit FHR 'f058' + edit HR '058' + task jgfs_atmos_post_f059 + trigger ./jgfs_atmos_post_manager:release_post059 + edit FHRGRP '060' + edit FHRLST 'f059' + edit FHR 'f059' + edit HR '059' + task jgfs_atmos_post_f060 + trigger ./jgfs_atmos_post_manager:release_post060 + edit FHRGRP '061' + edit FHRLST 'f060' + edit FHR 'f060' + edit HR '060' + task jgfs_atmos_post_f061 + trigger ./jgfs_atmos_post_manager:release_post061 + edit FHRGRP '062' + edit FHRLST 'f061' + edit FHR 'f061' + edit HR '061' + task jgfs_atmos_post_f062 + trigger ./jgfs_atmos_post_manager:release_post062 + edit FHRGRP '063' + edit FHRLST 'f062' + edit FHR 'f062' + edit HR '062' + task jgfs_atmos_post_f063 + trigger ./jgfs_atmos_post_manager:release_post063 + edit FHRGRP '064' + edit FHRLST 'f063' + edit FHR 'f063' + edit HR '063' + task jgfs_atmos_post_f064 + trigger ./jgfs_atmos_post_manager:release_post064 + edit FHRGRP '065' + edit FHRLST 'f064' + edit FHR 'f064' + edit HR '064' + task jgfs_atmos_post_f065 + trigger ./jgfs_atmos_post_manager:release_post065 + edit FHRGRP '066' + edit FHRLST 'f065' + edit FHR 'f065' + edit HR '065' + task jgfs_atmos_post_f066 + trigger ./jgfs_atmos_post_manager:release_post066 + edit FHRGRP '067' + edit FHRLST 'f066' + edit FHR 'f066' + edit HR '066' + task jgfs_atmos_post_f067 + trigger ./jgfs_atmos_post_manager:release_post067 + edit FHRGRP '068' + edit FHRLST 'f067' + edit FHR 'f067' + edit HR '067' + task jgfs_atmos_post_f068 + trigger ./jgfs_atmos_post_manager:release_post068 + edit FHRGRP '069' + edit FHRLST 'f068' + edit FHR 'f068' + edit HR '068' + task jgfs_atmos_post_f069 + trigger ./jgfs_atmos_post_manager:release_post069 + edit FHRGRP '070' + edit FHRLST 'f069' + edit FHR 'f069' + edit HR '069' + task jgfs_atmos_post_f070 + trigger ./jgfs_atmos_post_manager:release_post070 + edit FHRGRP '071' + edit FHRLST 'f070' + edit FHR 'f070' + edit HR '070' + task jgfs_atmos_post_f071 + trigger ./jgfs_atmos_post_manager:release_post071 + edit FHRGRP '072' + edit FHRLST 'f071' + edit FHR 'f071' + edit HR '071' + task jgfs_atmos_post_f072 + trigger ./jgfs_atmos_post_manager:release_post072 + edit FHRGRP '073' + edit FHRLST 'f072' + edit FHR 'f072' + edit HR '072' + task jgfs_atmos_post_f073 + trigger ./jgfs_atmos_post_manager:release_post073 + edit FHRGRP '074' + edit FHRLST 'f073' + edit FHR 'f073' + edit HR '073' + task jgfs_atmos_post_f074 + trigger ./jgfs_atmos_post_manager:release_post074 + edit FHRGRP '075' + edit FHRLST 'f074' + edit FHR 'f074' + edit HR '074' + task jgfs_atmos_post_f075 + trigger ./jgfs_atmos_post_manager:release_post075 + edit FHRGRP '076' + edit FHRLST 'f075' + edit FHR 'f075' + edit HR '075' + task jgfs_atmos_post_f076 + trigger ./jgfs_atmos_post_manager:release_post076 + edit FHRGRP '077' + edit FHRLST 'f076' + edit FHR 'f076' + edit HR '076' + task jgfs_atmos_post_f077 + trigger ./jgfs_atmos_post_manager:release_post077 + edit FHRGRP '078' + edit FHRLST 'f077' + edit FHR 'f077' + edit HR '077' + task jgfs_atmos_post_f078 + trigger ./jgfs_atmos_post_manager:release_post078 + edit FHRGRP '079' + edit FHRLST 'f078' + edit FHR 'f078' + edit HR '078' + task jgfs_atmos_post_f079 + trigger ./jgfs_atmos_post_manager:release_post079 + edit FHRGRP '080' + edit FHRLST 'f079' + edit FHR 'f079' + edit HR '079' + task jgfs_atmos_post_f080 + trigger ./jgfs_atmos_post_manager:release_post080 + edit FHRGRP '081' + edit FHRLST 'f080' + edit FHR 'f080' + edit HR '080' + task jgfs_atmos_post_f081 + trigger ./jgfs_atmos_post_manager:release_post081 + edit FHRGRP '082' + edit FHRLST 'f081' + edit FHR 'f081' + edit HR '081' + task jgfs_atmos_post_f082 + trigger ./jgfs_atmos_post_manager:release_post082 + edit FHRGRP '083' + edit FHRLST 'f082' + edit FHR 'f082' + edit HR '082' + task jgfs_atmos_post_f083 + trigger ./jgfs_atmos_post_manager:release_post083 + edit FHRGRP '084' + edit FHRLST 'f083' + edit FHR 'f083' + edit HR '083' + task jgfs_atmos_post_f084 + trigger ./jgfs_atmos_post_manager:release_post084 + edit FHRGRP '085' + edit FHRLST 'f084' + edit FHR 'f084' + edit HR '084' + task jgfs_atmos_post_f085 + trigger ./jgfs_atmos_post_manager:release_post085 + edit FHRGRP '086' + edit FHRLST 'f085' + edit FHR 'f085' + edit HR '085' + task jgfs_atmos_post_f086 + trigger ./jgfs_atmos_post_manager:release_post086 + edit FHRGRP '087' + edit FHRLST 'f086' + edit FHR 'f086' + edit HR '086' + task jgfs_atmos_post_f087 + trigger ./jgfs_atmos_post_manager:release_post087 + edit FHRGRP '088' + edit FHRLST 'f087' + edit FHR 'f087' + edit HR '087' + task jgfs_atmos_post_f088 + trigger ./jgfs_atmos_post_manager:release_post088 + edit FHRGRP '089' + edit FHRLST 'f088' + edit FHR 'f088' + edit HR '088' + task jgfs_atmos_post_f089 + trigger ./jgfs_atmos_post_manager:release_post089 + edit FHRGRP '090' + edit FHRLST 'f089' + edit FHR 'f089' + edit HR '089' + task jgfs_atmos_post_f090 + trigger ./jgfs_atmos_post_manager:release_post090 + edit FHRGRP '091' + edit FHRLST 'f090' + edit FHR 'f090' + edit HR '090' + task jgfs_atmos_post_f091 + trigger ./jgfs_atmos_post_manager:release_post091 + edit FHRGRP '092' + edit FHRLST 'f091' + edit FHR 'f091' + edit HR '091' + task jgfs_atmos_post_f092 + trigger ./jgfs_atmos_post_manager:release_post092 + edit FHRGRP '093' + edit FHRLST 'f092' + edit FHR 'f092' + edit HR '092' + task jgfs_atmos_post_f093 + trigger ./jgfs_atmos_post_manager:release_post093 + edit FHRGRP '094' + edit FHRLST 'f093' + edit FHR 'f093' + edit HR '093' + task jgfs_atmos_post_f094 + trigger ./jgfs_atmos_post_manager:release_post094 + edit FHRGRP '095' + edit FHRLST 'f094' + edit FHR 'f094' + edit HR '094' + task jgfs_atmos_post_f095 + trigger ./jgfs_atmos_post_manager:release_post095 + edit FHRGRP '096' + edit FHRLST 'f095' + edit FHR 'f095' + edit HR '095' + task jgfs_atmos_post_f096 + trigger ./jgfs_atmos_post_manager:release_post096 + edit FHRGRP '097' + edit FHRLST 'f096' + edit FHR 'f096' + edit HR '096' + task jgfs_atmos_post_f097 + trigger ./jgfs_atmos_post_manager:release_post097 + edit FHRGRP '098' + edit FHRLST 'f097' + edit FHR 'f097' + edit HR '097' + task jgfs_atmos_post_f098 + trigger ./jgfs_atmos_post_manager:release_post098 + edit FHRGRP '099' + edit FHRLST 'f098' + edit FHR 'f098' + edit HR '098' + task jgfs_atmos_post_f099 + trigger ./jgfs_atmos_post_manager:release_post099 + edit FHRGRP '100' + edit FHRLST 'f099' + edit FHR 'f099' + edit HR '099' + task jgfs_atmos_post_f100 + trigger ./jgfs_atmos_post_manager:release_post100 + edit FHRGRP '101' + edit FHRLST 'f100' + edit FHR 'f100' + edit HR '100' + task jgfs_atmos_post_f101 + trigger ./jgfs_atmos_post_manager:release_post101 + edit FHRGRP '102' + edit FHRLST 'f101' + edit FHR 'f101' + edit HR '101' + task jgfs_atmos_post_f102 + trigger ./jgfs_atmos_post_manager:release_post102 + edit FHRGRP '103' + edit FHRLST 'f102' + edit FHR 'f102' + edit HR '102' + task jgfs_atmos_post_f103 + trigger ./jgfs_atmos_post_manager:release_post103 + edit FHRGRP '104' + edit FHRLST 'f103' + edit FHR 'f103' + edit HR '103' + task jgfs_atmos_post_f104 + trigger ./jgfs_atmos_post_manager:release_post104 + edit FHRGRP '105' + edit FHRLST 'f104' + edit FHR 'f104' + edit HR '104' + task jgfs_atmos_post_f105 + trigger ./jgfs_atmos_post_manager:release_post105 + edit FHRGRP '106' + edit FHRLST 'f105' + edit FHR 'f105' + edit HR '105' + task jgfs_atmos_post_f106 + trigger ./jgfs_atmos_post_manager:release_post106 + edit FHRGRP '107' + edit FHRLST 'f106' + edit FHR 'f106' + edit HR '106' + task jgfs_atmos_post_f107 + trigger ./jgfs_atmos_post_manager:release_post107 + edit FHRGRP '108' + edit FHRLST 'f107' + edit FHR 'f107' + edit HR '107' + task jgfs_atmos_post_f108 + trigger ./jgfs_atmos_post_manager:release_post108 + edit FHRGRP '109' + edit FHRLST 'f108' + edit FHR 'f108' + edit HR '108' + task jgfs_atmos_post_f109 + trigger ./jgfs_atmos_post_manager:release_post109 + edit FHRGRP '110' + edit FHRLST 'f109' + edit FHR 'f109' + edit HR '109' + task jgfs_atmos_post_f110 + trigger ./jgfs_atmos_post_manager:release_post110 + edit FHRGRP '111' + edit FHRLST 'f110' + edit FHR 'f110' + edit HR '110' + task jgfs_atmos_post_f111 + trigger ./jgfs_atmos_post_manager:release_post111 + edit FHRGRP '112' + edit FHRLST 'f111' + edit FHR 'f111' + edit HR '111' + task jgfs_atmos_post_f112 + trigger ./jgfs_atmos_post_manager:release_post112 + edit FHRGRP '113' + edit FHRLST 'f112' + edit FHR 'f112' + edit HR '112' + task jgfs_atmos_post_f113 + trigger ./jgfs_atmos_post_manager:release_post113 + edit FHRGRP '114' + edit FHRLST 'f113' + edit FHR 'f113' + edit HR '113' + task jgfs_atmos_post_f114 + trigger ./jgfs_atmos_post_manager:release_post114 + edit FHRGRP '115' + edit FHRLST 'f114' + edit FHR 'f114' + edit HR '114' + task jgfs_atmos_post_f115 + trigger ./jgfs_atmos_post_manager:release_post115 + edit FHRGRP '116' + edit FHRLST 'f115' + edit FHR 'f115' + edit HR '115' + task jgfs_atmos_post_f116 + trigger ./jgfs_atmos_post_manager:release_post116 + edit FHRGRP '117' + edit FHRLST 'f116' + edit FHR 'f116' + edit HR '116' + task jgfs_atmos_post_f117 + trigger ./jgfs_atmos_post_manager:release_post117 + edit FHRGRP '118' + edit FHRLST 'f117' + edit FHR 'f117' + edit HR '117' + task jgfs_atmos_post_f118 + trigger ./jgfs_atmos_post_manager:release_post118 + edit FHRGRP '119' + edit FHRLST 'f118' + edit FHR 'f118' + edit HR '118' + task jgfs_atmos_post_f119 + trigger ./jgfs_atmos_post_manager:release_post119 + edit FHRGRP '120' + edit FHRLST 'f119' + edit FHR 'f119' + edit HR '119' + task jgfs_atmos_post_f120 + trigger ./jgfs_atmos_post_manager:release_post120 + edit FHRGRP '121' + edit FHRLST 'f120' + edit FHR 'f120' + edit HR '120' + task jgfs_atmos_post_f123 + trigger ./jgfs_atmos_post_manager:release_post123 + edit FHRGRP '122' + edit FHRLST 'f123' + edit FHR 'f123' + edit HR '123' + task jgfs_atmos_post_f126 + trigger ./jgfs_atmos_post_manager:release_post126 + edit FHRGRP '123' + edit FHRLST 'f126' + edit FHR 'f126' + edit HR '126' + task jgfs_atmos_post_f129 + trigger ./jgfs_atmos_post_manager:release_post129 + edit FHRGRP '124' + edit FHRLST 'f129' + edit FHR 'f129' + edit HR '129' + task jgfs_atmos_post_f132 + trigger ./jgfs_atmos_post_manager:release_post132 + edit FHRGRP '125' + edit FHRLST 'f132' + edit FHR 'f132' + edit HR '132' + task jgfs_atmos_post_f135 + trigger ./jgfs_atmos_post_manager:release_post135 + edit FHRGRP '126' + edit FHRLST 'f135' + edit FHR 'f135' + edit HR '135' + task jgfs_atmos_post_f138 + trigger ./jgfs_atmos_post_manager:release_post138 + edit FHRGRP '127' + edit FHRLST 'f138' + edit FHR 'f138' + edit HR '138' + task jgfs_atmos_post_f141 + trigger ./jgfs_atmos_post_manager:release_post141 + edit FHRGRP '128' + edit FHRLST 'f141' + edit FHR 'f141' + edit HR '141' + task jgfs_atmos_post_f144 + trigger ./jgfs_atmos_post_manager:release_post144 + edit FHRGRP '129' + edit FHRLST 'f144' + edit FHR 'f144' + edit HR '144' + task jgfs_atmos_post_f147 + trigger ./jgfs_atmos_post_manager:release_post147 + edit FHRGRP '130' + edit FHRLST 'f147' + edit FHR 'f147' + edit HR '147' + task jgfs_atmos_post_f150 + trigger ./jgfs_atmos_post_manager:release_post150 + edit FHRGRP '131' + edit FHRLST 'f150' + edit FHR 'f150' + edit HR '150' + task jgfs_atmos_post_f153 + trigger ./jgfs_atmos_post_manager:release_post153 + edit FHRGRP '132' + edit FHRLST 'f153' + edit FHR 'f153' + edit HR '153' + task jgfs_atmos_post_f156 + trigger ./jgfs_atmos_post_manager:release_post156 + edit FHRGRP '133' + edit FHRLST 'f156' + edit FHR 'f156' + edit HR '156' + task jgfs_atmos_post_f159 + trigger ./jgfs_atmos_post_manager:release_post159 + edit FHRGRP '134' + edit FHRLST 'f159' + edit FHR 'f159' + edit HR '159' + task jgfs_atmos_post_f162 + trigger ./jgfs_atmos_post_manager:release_post162 + edit FHRGRP '135' + edit FHRLST 'f162' + edit FHR 'f162' + edit HR '162' + task jgfs_atmos_post_f165 + trigger ./jgfs_atmos_post_manager:release_post165 + edit FHRGRP '136' + edit FHRLST 'f165' + edit FHR 'f165' + edit HR '165' + task jgfs_atmos_post_f168 + trigger ./jgfs_atmos_post_manager:release_post168 + edit FHRGRP '137' + edit FHRLST 'f168' + edit FHR 'f168' + edit HR '168' + task jgfs_atmos_post_f171 + trigger ./jgfs_atmos_post_manager:release_post171 + edit FHRGRP '138' + edit FHRLST 'f171' + edit FHR 'f171' + edit HR '171' + task jgfs_atmos_post_f174 + trigger ./jgfs_atmos_post_manager:release_post174 + edit FHRGRP '139' + edit FHRLST 'f174' + edit FHR 'f174' + edit HR '174' + task jgfs_atmos_post_f177 + trigger ./jgfs_atmos_post_manager:release_post177 + edit FHRGRP '140' + edit FHRLST 'f177' + edit FHR 'f177' + edit HR '177' + task jgfs_atmos_post_f180 + trigger ./jgfs_atmos_post_manager:release_post180 + edit FHRGRP '141' + edit FHRLST 'f180' + edit FHR 'f180' + edit HR '180' + task jgfs_atmos_post_f183 + trigger ./jgfs_atmos_post_manager:release_post183 + edit FHRGRP '142' + edit FHRLST 'f183' + edit FHR 'f183' + edit HR '183' + task jgfs_atmos_post_f186 + trigger ./jgfs_atmos_post_manager:release_post186 + edit FHRGRP '143' + edit FHRLST 'f186' + edit FHR 'f186' + edit HR '186' + task jgfs_atmos_post_f189 + trigger ./jgfs_atmos_post_manager:release_post189 + edit FHRGRP '144' + edit FHRLST 'f189' + edit FHR 'f189' + edit HR '189' + task jgfs_atmos_post_f192 + trigger ./jgfs_atmos_post_manager:release_post192 + edit FHRGRP '145' + edit FHRLST 'f192' + edit FHR 'f192' + edit HR '192' + task jgfs_atmos_post_f195 + trigger ./jgfs_atmos_post_manager:release_post195 + edit FHRGRP '146' + edit FHRLST 'f195' + edit FHR 'f195' + edit HR '195' + task jgfs_atmos_post_f198 + trigger ./jgfs_atmos_post_manager:release_post198 + edit FHRGRP '147' + edit FHRLST 'f198' + edit FHR 'f198' + edit HR '198' + task jgfs_atmos_post_f201 + trigger ./jgfs_atmos_post_manager:release_post201 + edit FHRGRP '148' + edit FHRLST 'f201' + edit FHR 'f201' + edit HR '201' + task jgfs_atmos_post_f204 + trigger ./jgfs_atmos_post_manager:release_post204 + edit FHRGRP '149' + edit FHRLST 'f204' + edit FHR 'f204' + edit HR '204' + task jgfs_atmos_post_f207 + trigger ./jgfs_atmos_post_manager:release_post207 + edit FHRGRP '150' + edit FHRLST 'f207' + edit FHR 'f207' + edit HR '207' + task jgfs_atmos_post_f210 + trigger ./jgfs_atmos_post_manager:release_post210 + edit FHRGRP '151' + edit FHRLST 'f210' + edit FHR 'f210' + edit HR '210' + task jgfs_atmos_post_f213 + trigger ./jgfs_atmos_post_manager:release_post213 + edit FHRGRP '152' + edit FHRLST 'f213' + edit FHR 'f213' + edit HR '213' + task jgfs_atmos_post_f216 + trigger ./jgfs_atmos_post_manager:release_post216 + edit FHRGRP '153' + edit FHRLST 'f216' + edit FHR 'f216' + edit HR '216' + task jgfs_atmos_post_f219 + trigger ./jgfs_atmos_post_manager:release_post219 + edit FHRGRP '154' + edit FHRLST 'f219' + edit FHR 'f219' + edit HR '219' + task jgfs_atmos_post_f222 + trigger ./jgfs_atmos_post_manager:release_post222 + edit FHRGRP '155' + edit FHRLST 'f222' + edit FHR 'f222' + edit HR '222' + task jgfs_atmos_post_f225 + trigger ./jgfs_atmos_post_manager:release_post225 + edit FHRGRP '156' + edit FHRLST 'f225' + edit FHR 'f225' + edit HR '225' + task jgfs_atmos_post_f228 + trigger ./jgfs_atmos_post_manager:release_post228 + edit FHRGRP '157' + edit FHRLST 'f228' + edit FHR 'f228' + edit HR '228' + task jgfs_atmos_post_f231 + trigger ./jgfs_atmos_post_manager:release_post231 + edit FHRGRP '158' + edit FHRLST 'f231' + edit FHR 'f231' + edit HR '231' + task jgfs_atmos_post_f234 + trigger ./jgfs_atmos_post_manager:release_post234 + edit FHRGRP '159' + edit FHRLST 'f234' + edit FHR 'f234' + edit HR '234' + task jgfs_atmos_post_f237 + trigger ./jgfs_atmos_post_manager:release_post237 + edit FHRGRP '160' + edit FHRLST 'f237' + edit FHR 'f237' + edit HR '237' + task jgfs_atmos_post_f240 + trigger ./jgfs_atmos_post_manager:release_post240 + edit FHRGRP '161' + edit FHRLST 'f240' + edit FHR 'f240' + edit HR '240' + task jgfs_atmos_post_f243 + trigger ./jgfs_atmos_post_manager:release_post243 + edit FHRGRP '162' + edit FHRLST 'f243' + edit FHR 'f243' + edit HR '243' + task jgfs_atmos_post_f246 + trigger ./jgfs_atmos_post_manager:release_post246 + edit FHRGRP '163' + edit FHRLST 'f246' + edit FHR 'f246' + edit HR '246' + task jgfs_atmos_post_f249 + trigger ./jgfs_atmos_post_manager:release_post249 + edit FHRGRP '164' + edit FHRLST 'f249' + edit FHR 'f249' + edit HR '249' + task jgfs_atmos_post_f252 + trigger ./jgfs_atmos_post_manager:release_post252 + edit FHRGRP '165' + edit FHRLST 'f252' + edit FHR 'f252' + edit HR '252' + task jgfs_atmos_post_f255 + trigger ./jgfs_atmos_post_manager:release_post255 + edit FHRGRP '166' + edit FHRLST 'f255' + edit FHR 'f255' + edit HR '255' + task jgfs_atmos_post_f258 + trigger ./jgfs_atmos_post_manager:release_post258 + edit FHRGRP '167' + edit FHRLST 'f258' + edit FHR 'f258' + edit HR '258' + task jgfs_atmos_post_f261 + trigger ./jgfs_atmos_post_manager:release_post261 + edit FHRGRP '168' + edit FHRLST 'f261' + edit FHR 'f261' + edit HR '261' + task jgfs_atmos_post_f264 + trigger ./jgfs_atmos_post_manager:release_post264 + edit FHRGRP '169' + edit FHRLST 'f264' + edit FHR 'f264' + edit HR '264' + task jgfs_atmos_post_f267 + trigger ./jgfs_atmos_post_manager:release_post267 + edit FHRGRP '170' + edit FHRLST 'f267' + edit FHR 'f267' + edit HR '267' + task jgfs_atmos_post_f270 + trigger ./jgfs_atmos_post_manager:release_post270 + edit FHRGRP '171' + edit FHRLST 'f270' + edit FHR 'f270' + edit HR '270' + task jgfs_atmos_post_f273 + trigger ./jgfs_atmos_post_manager:release_post273 + edit FHRGRP '172' + edit FHRLST 'f273' + edit FHR 'f273' + edit HR '273' + task jgfs_atmos_post_f276 + trigger ./jgfs_atmos_post_manager:release_post276 + edit FHRGRP '173' + edit FHRLST 'f276' + edit FHR 'f276' + edit HR '276' + task jgfs_atmos_post_f279 + trigger ./jgfs_atmos_post_manager:release_post279 + edit FHRGRP '174' + edit FHRLST 'f279' + edit FHR 'f279' + edit HR '279' + task jgfs_atmos_post_f282 + trigger ./jgfs_atmos_post_manager:release_post282 + edit FHRGRP '175' + edit FHRLST 'f282' + edit FHR 'f282' + edit HR '282' + task jgfs_atmos_post_f285 + trigger ./jgfs_atmos_post_manager:release_post285 + edit FHRGRP '176' + edit FHRLST 'f285' + edit FHR 'f285' + edit HR '285' + task jgfs_atmos_post_f288 + trigger ./jgfs_atmos_post_manager:release_post288 + edit FHRGRP '177' + edit FHRLST 'f288' + edit FHR 'f288' + edit HR '288' + task jgfs_atmos_post_f291 + trigger ./jgfs_atmos_post_manager:release_post291 + edit FHRGRP '178' + edit FHRLST 'f291' + edit FHR 'f291' + edit HR '291' + task jgfs_atmos_post_f294 + trigger ./jgfs_atmos_post_manager:release_post294 + edit FHRGRP '179' + edit FHRLST 'f294' + edit FHR 'f294' + edit HR '294' + task jgfs_atmos_post_f297 + trigger ./jgfs_atmos_post_manager:release_post297 + edit FHRGRP '180' + edit FHRLST 'f297' + edit FHR 'f297' + edit HR '297' + task jgfs_atmos_post_f300 + trigger ./jgfs_atmos_post_manager:release_post300 + edit FHRGRP '181' + edit FHRLST 'f300' + edit FHR 'f300' + edit HR '300' + task jgfs_atmos_post_f303 + trigger ./jgfs_atmos_post_manager:release_post303 + edit FHRGRP '182' + edit FHRLST 'f303' + edit FHR 'f303' + edit HR '303' + task jgfs_atmos_post_f306 + trigger ./jgfs_atmos_post_manager:release_post306 + edit FHRGRP '183' + edit FHRLST 'f306' + edit FHR 'f306' + edit HR '306' + task jgfs_atmos_post_f309 + trigger ./jgfs_atmos_post_manager:release_post309 + edit FHRGRP '184' + edit FHRLST 'f309' + edit FHR 'f309' + edit HR '309' + task jgfs_atmos_post_f312 + trigger ./jgfs_atmos_post_manager:release_post312 + edit FHRGRP '185' + edit FHRLST 'f312' + edit FHR 'f312' + edit HR '312' + task jgfs_atmos_post_f315 + trigger ./jgfs_atmos_post_manager:release_post315 + edit FHRGRP '186' + edit FHRLST 'f315' + edit FHR 'f315' + edit HR '315' + task jgfs_atmos_post_f318 + trigger ./jgfs_atmos_post_manager:release_post318 + edit FHRGRP '187' + edit FHRLST 'f318' + edit FHR 'f318' + edit HR '318' + task jgfs_atmos_post_f321 + trigger ./jgfs_atmos_post_manager:release_post321 + edit FHRGRP '188' + edit FHRLST 'f321' + edit FHR 'f321' + edit HR '321' + task jgfs_atmos_post_f324 + trigger ./jgfs_atmos_post_manager:release_post324 + edit FHRGRP '189' + edit FHRLST 'f324' + edit FHR 'f324' + edit HR '324' + task jgfs_atmos_post_f327 + trigger ./jgfs_atmos_post_manager:release_post327 + edit FHRGRP '190' + edit FHRLST 'f327' + edit FHR 'f327' + edit HR '327' + task jgfs_atmos_post_f330 + trigger ./jgfs_atmos_post_manager:release_post330 + edit FHRGRP '191' + edit FHRLST 'f330' + edit FHR 'f330' + edit HR '330' + task jgfs_atmos_post_f333 + trigger ./jgfs_atmos_post_manager:release_post333 + edit FHRGRP '192' + edit FHRLST 'f333' + edit FHR 'f333' + edit HR '333' + task jgfs_atmos_post_f336 + trigger ./jgfs_atmos_post_manager:release_post336 + edit FHRGRP '193' + edit FHRLST 'f336' + edit FHR 'f336' + edit HR '336' + task jgfs_atmos_post_f339 + trigger ./jgfs_atmos_post_manager:release_post339 + edit FHRGRP '194' + edit FHRLST 'f339' + edit FHR 'f339' + edit HR '339' + task jgfs_atmos_post_f342 + trigger ./jgfs_atmos_post_manager:release_post342 + edit FHRGRP '195' + edit FHRLST 'f342' + edit FHR 'f342' + edit HR '342' + task jgfs_atmos_post_f345 + trigger ./jgfs_atmos_post_manager:release_post345 + edit FHRGRP '196' + edit FHRLST 'f345' + edit FHR 'f345' + edit HR '345' + task jgfs_atmos_post_f348 + trigger ./jgfs_atmos_post_manager:release_post348 + edit FHRGRP '197' + edit FHRLST 'f348' + edit FHR 'f348' + edit HR '348' + task jgfs_atmos_post_f351 + trigger ./jgfs_atmos_post_manager:release_post351 + edit FHRGRP '198' + edit FHRLST 'f351' + edit FHR 'f351' + edit HR '351' + task jgfs_atmos_post_f354 + trigger ./jgfs_atmos_post_manager:release_post354 + edit FHRGRP '199' + edit FHRLST 'f354' + edit FHR 'f354' + edit HR '354' + task jgfs_atmos_post_f357 + trigger ./jgfs_atmos_post_manager:release_post357 + edit FHRGRP '200' + edit FHRLST 'f357' + edit FHR 'f357' + edit HR '357' + task jgfs_atmos_post_f360 + trigger ./jgfs_atmos_post_manager:release_post360 + edit FHRGRP '201' + edit FHRLST 'f360' + edit FHR 'f360' + edit HR '360' + task jgfs_atmos_post_f363 + trigger ./jgfs_atmos_post_manager:release_post363 + edit FHRGRP '202' + edit FHRLST 'f363' + edit FHR 'f363' + edit HR '363' + task jgfs_atmos_post_f366 + trigger ./jgfs_atmos_post_manager:release_post366 + edit FHRGRP '203' + edit FHRLST 'f366' + edit FHR 'f366' + edit HR '366' + task jgfs_atmos_post_f369 + trigger ./jgfs_atmos_post_manager:release_post369 + edit FHRGRP '204' + edit FHRLST 'f369' + edit FHR 'f369' + edit HR '369' + task jgfs_atmos_post_f372 + trigger ./jgfs_atmos_post_manager:release_post372 + edit FHRGRP '205' + edit FHRLST 'f372' + edit FHR 'f372' + edit HR '372' + task jgfs_atmos_post_f375 + trigger ./jgfs_atmos_post_manager:release_post375 + edit FHRGRP '206' + edit FHRLST 'f375' + edit FHR 'f375' + edit HR '375' + task jgfs_atmos_post_f378 + trigger ./jgfs_atmos_post_manager:release_post378 + edit FHRGRP '207' + edit FHRLST 'f378' + edit FHR 'f378' + edit HR '378' + task jgfs_atmos_post_f381 + trigger ./jgfs_atmos_post_manager:release_post381 + edit FHRGRP '208' + edit FHRLST 'f381' + edit FHR 'f381' + edit HR '381' + task jgfs_atmos_post_f384 + trigger ./jgfs_atmos_post_manager:release_post384 + edit FHRGRP '209' + edit FHRLST 'f384' + edit FHR 'f384' + edit HR '384' + endfamily + family post_processing + family bufr_sounding + task jgfs_atmos_postsnd + trigger ../../post/jgfs_atmos_post_manager:release_post000 + endfamily + family bulletins + task jgfs_atmos_fbwind + trigger ../../post/jgfs_atmos_post_f006 == complete and ../../post/jgfs_atmos_post_f012 == complete and ../../post/jgfs_atmos_post_f024 == complete + endfamily + family awips_20km_1p0 + task jgfs_atmos_awips_f000 + trigger ../../post/jgfs_atmos_post_f000 == complete + edit FHRGRP '000' + edit FHRLST 'f000' + edit FCSTHR '000' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f003 + trigger ../../post/jgfs_atmos_post_f003 == complete + edit FHRGRP '003' + edit FHRLST 'f003' + edit FCSTHR '003' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f006 + trigger ../../post/jgfs_atmos_post_f006 == complete + edit FHRGRP '006' + edit FHRLST 'f006' + edit FCSTHR '006' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f009 + trigger ../../post/jgfs_atmos_post_f009 == complete + edit FHRGRP '009' + edit FHRLST 'f009' + edit FCSTHR '009' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f012 + trigger ../../post/jgfs_atmos_post_f012 == complete + edit FHRGRP '012' + edit FHRLST 'f012' + edit FCSTHR '012' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f015 + trigger ../../post/jgfs_atmos_post_f015 == complete + edit FHRGRP '015' + edit FHRLST 'f015' + edit FCSTHR '015' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f018 + trigger ../../post/jgfs_atmos_post_f018 == complete + edit FHRGRP '018' + edit FHRLST 'f018' + edit FCSTHR '018' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f021 + trigger ../../post/jgfs_atmos_post_f021 == complete + edit FHRGRP '021' + edit FHRLST 'f021' + edit FCSTHR '021' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f024 + trigger ../../post/jgfs_atmos_post_f024 == complete + edit FHRGRP '024' + edit FHRLST 'f024' + edit FCSTHR '024' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f027 + trigger ../../post/jgfs_atmos_post_f027 == complete + edit FHRGRP '027' + edit FHRLST 'f027' + edit FCSTHR '027' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f030 + trigger ../../post/jgfs_atmos_post_f030 == complete + edit FHRGRP '030' + edit FHRLST 'f030' + edit FCSTHR '030' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f033 + trigger ../../post/jgfs_atmos_post_f033 == complete + edit FHRGRP '033' + edit FHRLST 'f033' + edit FCSTHR '033' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f036 + trigger ../../post/jgfs_atmos_post_f036 == complete + edit FHRGRP '036' + edit FHRLST 'f036' + edit FCSTHR '036' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f039 + trigger ../../post/jgfs_atmos_post_f039 == complete + edit FHRGRP '039' + edit FHRLST 'f039' + edit FCSTHR '039' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f042 + trigger ../../post/jgfs_atmos_post_f042 == complete + edit FHRGRP '042' + edit FHRLST 'f042' + edit FCSTHR '042' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f045 + trigger ../../post/jgfs_atmos_post_f045 == complete + edit FHRGRP '045' + edit FHRLST 'f045' + edit FCSTHR '045' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f048 + trigger ../../post/jgfs_atmos_post_f048 == complete + edit FHRGRP '048' + edit FHRLST 'f048' + edit FCSTHR '048' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f051 + trigger ../../post/jgfs_atmos_post_f051 == complete + edit FHRGRP '051' + edit FHRLST 'f051' + edit FCSTHR '051' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f054 + trigger ../../post/jgfs_atmos_post_f054 == complete + edit FHRGRP '054' + edit FHRLST 'f054' + edit FCSTHR '054' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f057 + trigger ../../post/jgfs_atmos_post_f057 == complete + edit FHRGRP '057' + edit FHRLST 'f057' + edit FCSTHR '057' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f060 + trigger ../../post/jgfs_atmos_post_f060 == complete + edit FHRGRP '060' + edit FHRLST 'f060' + edit FCSTHR '060' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f063 + trigger ../../post/jgfs_atmos_post_f063 == complete + edit FHRGRP '063' + edit FHRLST 'f063' + edit FCSTHR '063' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f066 + trigger ../../post/jgfs_atmos_post_f066 == complete + edit FHRGRP '066' + edit FHRLST 'f066' + edit FCSTHR '066' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f069 + trigger ../../post/jgfs_atmos_post_f069 == complete + edit FHRGRP '069' + edit FHRLST 'f069' + edit FCSTHR '069' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f072 + trigger ../../post/jgfs_atmos_post_f072 == complete + edit FHRGRP '072' + edit FHRLST 'f072' + edit FCSTHR '072' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f075 + trigger ../../post/jgfs_atmos_post_f075 == complete + edit FHRGRP '075' + edit FHRLST 'f075' + edit FCSTHR '075' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f078 + trigger ../../post/jgfs_atmos_post_f078 == complete + edit FHRGRP '078' + edit FHRLST 'f078' + edit FCSTHR '078' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f081 + trigger ../../post/jgfs_atmos_post_f081 == complete + edit FHRGRP '081' + edit FHRLST 'f081' + edit FCSTHR '081' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f084 + trigger ../../post/jgfs_atmos_post_f084 == complete + edit FHRGRP '084' + edit FHRLST 'f084' + edit FCSTHR '084' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f090 + trigger ../../post/jgfs_atmos_post_f090 == complete + edit FHRGRP '090' + edit FHRLST 'f090' + edit FCSTHR '090' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f096 + trigger ../../post/jgfs_atmos_post_f096 == complete + edit FHRGRP '096' + edit FHRLST 'f096' + edit FCSTHR '096' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f102 + trigger ../../post/jgfs_atmos_post_f102 == complete + edit FHRGRP '102' + edit FHRLST 'f102' + edit FCSTHR '102' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f108 + trigger ../../post/jgfs_atmos_post_f108 == complete + edit FHRGRP '108' + edit FHRLST 'f108' + edit FCSTHR '108' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f114 + trigger ../../post/jgfs_atmos_post_f114 == complete + edit FHRGRP '114' + edit FHRLST 'f114' + edit FCSTHR '114' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f120 + trigger ../../post/jgfs_atmos_post_f120 == complete + edit FHRGRP '120' + edit FHRLST 'f120' + edit FCSTHR '120' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f126 + trigger ../../post/jgfs_atmos_post_f126 == complete + edit FHRGRP '126' + edit FHRLST 'f126' + edit FCSTHR '126' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f132 + trigger ../../post/jgfs_atmos_post_f132 == complete + edit FHRGRP '132' + edit FHRLST 'f132' + edit FCSTHR '132' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f138 + trigger ../../post/jgfs_atmos_post_f138 == complete + edit FHRGRP '138' + edit FHRLST 'f138' + edit FCSTHR '138' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f144 + trigger ../../post/jgfs_atmos_post_f144 == complete + edit FHRGRP '144' + edit FHRLST 'f144' + edit FCSTHR '144' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f150 + trigger ../../post/jgfs_atmos_post_f150 == complete + edit FHRGRP '150' + edit FHRLST 'f150' + edit FCSTHR '150' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f156 + trigger ../../post/jgfs_atmos_post_f156 == complete + edit FHRGRP '156' + edit FHRLST 'f156' + edit FCSTHR '156' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f162 + trigger ../../post/jgfs_atmos_post_f162 == complete + edit FHRGRP '162' + edit FHRLST 'f162' + edit FCSTHR '162' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f168 + trigger ../../post/jgfs_atmos_post_f168 == complete + edit FHRGRP '168' + edit FHRLST 'f168' + edit FCSTHR '168' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f174 + trigger ../../post/jgfs_atmos_post_f174 == complete + edit FHRGRP '174' + edit FHRLST 'f174' + edit FCSTHR '174' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f180 + trigger ../../post/jgfs_atmos_post_f180 == complete + edit FHRGRP '180' + edit FHRLST 'f180' + edit FCSTHR '180' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f186 + trigger ../../post/jgfs_atmos_post_f186 == complete + edit FHRGRP '186' + edit FHRLST 'f186' + edit FCSTHR '186' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f192 + trigger ../../post/jgfs_atmos_post_f192 == complete + edit FHRGRP '192' + edit FHRLST 'f192' + edit FCSTHR '192' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f198 + trigger ../../post/jgfs_atmos_post_f198 == complete + edit FHRGRP '198' + edit FHRLST 'f198' + edit FCSTHR '198' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f204 + trigger ../../post/jgfs_atmos_post_f204 == complete + edit FHRGRP '204' + edit FHRLST 'f204' + edit FCSTHR '204' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f210 + trigger ../../post/jgfs_atmos_post_f210 == complete + edit FHRGRP '210' + edit FHRLST 'f210' + edit FCSTHR '210' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f216 + trigger ../../post/jgfs_atmos_post_f216 == complete + edit FHRGRP '216' + edit FHRLST 'f216' + edit FCSTHR '216' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f222 + trigger ../../post/jgfs_atmos_post_f222 == complete + edit FHRGRP '222' + edit FHRLST 'f222' + edit FCSTHR '222' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f228 + trigger ../../post/jgfs_atmos_post_f228 == complete + edit FHRGRP '228' + edit FHRLST 'f228' + edit FCSTHR '228' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f234 + trigger ../../post/jgfs_atmos_post_f234 == complete + edit FHRGRP '234' + edit FHRLST 'f234' + edit FCSTHR '234' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f240 + trigger ../../post/jgfs_atmos_post_f240 == complete + edit FHRGRP '240' + edit FHRLST 'f240' + edit FCSTHR '240' + edit TRDRUN 'YES' + endfamily + family awips_g2 + task jgfs_atmos_awips_g2_f000 + trigger ../../post/jgfs_atmos_post_f000 == complete + edit FHRGRP '000' + edit FHRLST 'f000' + edit FCSTHR '000' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f006 + trigger ../../post/jgfs_atmos_post_f006 == complete + edit FHRGRP '006' + edit FHRLST 'f006' + edit FCSTHR '006' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f012 + trigger ../../post/jgfs_atmos_post_f012 == complete + edit FHRGRP '012' + edit FHRLST 'f012' + edit FCSTHR '012' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f018 + trigger ../../post/jgfs_atmos_post_f018 == complete + edit FHRGRP '018' + edit FHRLST 'f018' + edit FCSTHR '018' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f024 + trigger ../../post/jgfs_atmos_post_f024 == complete + edit FHRGRP '024' + edit FHRLST 'f024' + edit FCSTHR '024' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f030 + trigger ../../post/jgfs_atmos_post_f030 == complete + edit FHRGRP '030' + edit FHRLST 'f030' + edit FCSTHR '030' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f036 + trigger ../../post/jgfs_atmos_post_f036 == complete + edit FHRGRP '036' + edit FHRLST 'f036' + edit FCSTHR '036' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f042 + trigger ../../post/jgfs_atmos_post_f042 == complete + edit FHRGRP '042' + edit FHRLST 'f042' + edit FCSTHR '042' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f048 + trigger ../../post/jgfs_atmos_post_f048 == complete + edit FHRGRP '048' + edit FHRLST 'f048' + edit FCSTHR '048' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f054 + trigger ../../post/jgfs_atmos_post_f054 == complete + edit FHRGRP '054' + edit FHRLST 'f054' + edit FCSTHR '054' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f060 + trigger ../../post/jgfs_atmos_post_f060 == complete + edit FHRGRP '060' + edit FHRLST 'f060' + edit FCSTHR '060' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f066 + trigger ../../post/jgfs_atmos_post_f066 == complete + edit FHRGRP '066' + edit FHRLST 'f066' + edit FCSTHR '066' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f072 + trigger ../../post/jgfs_atmos_post_f072 == complete + edit FHRGRP '072' + edit FHRLST 'f072' + edit FCSTHR '072' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f078 + trigger ../../post/jgfs_atmos_post_f078 == complete + edit FHRGRP '078' + edit FHRLST 'f078' + edit FCSTHR '078' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f084 + trigger ../../post/jgfs_atmos_post_f084 == complete + edit FHRGRP '084' + edit FHRLST 'f084' + edit FCSTHR '084' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f090 + trigger ../../post/jgfs_atmos_post_f090 == complete + edit FHRGRP '090' + edit FHRLST 'f090' + edit FCSTHR '090' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f096 + trigger ../../post/jgfs_atmos_post_f096 == complete + edit FHRGRP '096' + edit FHRLST 'f096' + edit FCSTHR '096' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f102 + trigger ../../post/jgfs_atmos_post_f102 == complete + edit FHRGRP '102' + edit FHRLST 'f102' + edit FCSTHR '102' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f108 + trigger ../../post/jgfs_atmos_post_f108 == complete + edit FHRGRP '108' + edit FHRLST 'f108' + edit FCSTHR '108' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f114 + trigger ../../post/jgfs_atmos_post_f114 == complete + edit FHRGRP '114' + edit FHRLST 'f114' + edit FCSTHR '114' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f120 + trigger ../../post/jgfs_atmos_post_f120 == complete + edit FHRGRP '120' + edit FHRLST 'f120' + edit FCSTHR '120' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f126 + trigger ../../post/jgfs_atmos_post_f126 == complete + edit FHRGRP '126' + edit FHRLST 'f126' + edit FCSTHR '126' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f132 + trigger ../../post/jgfs_atmos_post_f132 == complete + edit FHRGRP '132' + edit FHRLST 'f132' + edit FCSTHR '132' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f138 + trigger ../../post/jgfs_atmos_post_f138 == complete + edit FHRGRP '138' + edit FHRLST 'f138' + edit FCSTHR '138' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f144 + trigger ../../post/jgfs_atmos_post_f144 == complete + edit FHRGRP '144' + edit FHRLST 'f144' + edit FCSTHR '144' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f150 + trigger ../../post/jgfs_atmos_post_f150 == complete + edit FHRGRP '150' + edit FHRLST 'f150' + edit FCSTHR '150' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f156 + trigger ../../post/jgfs_atmos_post_f156 == complete + edit FHRGRP '156' + edit FHRLST 'f156' + edit FCSTHR '156' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f162 + trigger ../../post/jgfs_atmos_post_f162 == complete + edit FHRGRP '162' + edit FHRLST 'f162' + edit FCSTHR '162' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f168 + trigger ../../post/jgfs_atmos_post_f168 == complete + edit FHRGRP '168' + edit FHRLST 'f168' + edit FCSTHR '168' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f174 + trigger ../../post/jgfs_atmos_post_f174 == complete + edit FHRGRP '174' + edit FHRLST 'f174' + edit FCSTHR '174' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f180 + trigger ../../post/jgfs_atmos_post_f180 == complete + edit FHRGRP '180' + edit FHRLST 'f180' + edit FCSTHR '180' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f186 + trigger ../../post/jgfs_atmos_post_f186 == complete + edit FHRGRP '186' + edit FHRLST 'f186' + edit FCSTHR '186' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f192 + trigger ../../post/jgfs_atmos_post_f192 == complete + edit FHRGRP '192' + edit FHRLST 'f192' + edit FCSTHR '192' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f198 + trigger ../../post/jgfs_atmos_post_f198 == complete + edit FHRGRP '198' + edit FHRLST 'f198' + edit FCSTHR '198' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f204 + trigger ../../post/jgfs_atmos_post_f204 == complete + edit FHRGRP '204' + edit FHRLST 'f204' + edit FCSTHR '204' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f210 + trigger ../../post/jgfs_atmos_post_f210 == complete + edit FHRGRP '210' + edit FHRLST 'f210' + edit FCSTHR '210' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f216 + trigger ../../post/jgfs_atmos_post_f216 == complete + edit FHRGRP '216' + edit FHRLST 'f216' + edit FCSTHR '216' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f222 + trigger ../../post/jgfs_atmos_post_f222 == complete + edit FHRGRP '222' + edit FHRLST 'f222' + edit FCSTHR '222' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f228 + trigger ../../post/jgfs_atmos_post_f228 == complete + edit FHRGRP '228' + edit FHRLST 'f228' + edit FCSTHR '228' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f234 + trigger ../../post/jgfs_atmos_post_f234 == complete + edit FHRGRP '234' + edit FHRLST 'f234' + edit FCSTHR '234' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f240 + trigger ../../post/jgfs_atmos_post_f240 == complete + edit FHRGRP '240' + edit FHRLST 'f240' + edit FCSTHR '240' + edit TRDRUN 'YES' + endfamily + endfamily + family gempak + task jgfs_atmos_gempak + trigger ../../atmos/analysis/jgfs_atmos_analysis == complete + task jgfs_atmos_gempak_meta + trigger ../../atmos/analysis/jgfs_atmos_analysis == complete + task jgfs_atmos_gempak_ncdc_upapgif + trigger ./jgfs_atmos_gempak == active or ./jgfs_atmos_gempak == complete + task jgfs_atmos_npoess_pgrb2_0p5deg + trigger ../post/jgfs_atmos_post_manager:release_post180 + task jgfs_atmos_pgrb2_spec_gempak + trigger ./jgfs_atmos_npoess_pgrb2_0p5deg == complete + endfamily + family verf + task jgfs_atmos_vminmon + trigger ../analysis/jgfs_atmos_analysis == complete + endfamily + endfamily + family wave + family init + task jgfs_wave_init + trigger ../../atmos/obsproc/prep/jgfs_atmos_prep == complete + endfamily + family prep + task jgfs_wave_prep + trigger ../init/jgfs_wave_init == complete + endfamily + family post + task jgfs_wave_postsbs + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post000 + task jgfs_wave_postpnt + trigger ../../jgfs_forecast == complete + task jgfs_wave_post_bndpnt + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post180 + task jgfs_wave_prdgen_gridded + trigger ./jgfs_wave_postsbs == active or ./jgfs_wave_postsbs == complete + task jgfs_wave_prdgen_bulls + trigger ./jgfs_wave_postpnt == complete and ./jgfs_wave_postsbs == complete + endfamily + family gempak + task jgfs_wave_gempak + trigger ../post/jgfs_wave_postsbs == active or ../post/jgfs_wave_postsbs == complete + endfamily + endfamily + task jgfs_forecast + trigger ./atmos/analysis/jgfs_atmos_analysis:release_fcst and ./wave/prep/jgfs_wave_prep == complete + endfamily + family gdas + edit CYC '00' + edit PACKAGEHOME '/lfs/h2/emc/global/noscrub/Lin.Gan/git/feature-ops-wcoss2' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/gdas' + edit PROJ 'GFS' + edit PROJENVIR 'DEV' + edit NET 'gfs' + edit RUN 'gdas' + edit COM '/lfs/h2/emc/ptmp/Lin.Gan/ecfops/com' + edit QUEUE 'dev' + edit QUEUESHARED 'dev_shared' + edit QUEUESERV 'dev_transfer' + family atmos + family obsproc + family dump + task jgdas_atmos_tropcy_qc_reloc + time 05:45 + endfamily + family prep + task jgdas_atmos_emcsfc_sfc_prep + trigger ../dump/jgdas_atmos_dump:release_sfcprep + endfamily + endfamily + family analysis + task jgdas_atmos_analysis + trigger ../obsproc/prep/jgdas_atmos_prep == complete and ../obsproc/prep/jgdas_atmos_emcsfc_sfc_prep == complete + event 1 release_fcst + task jgdas_atmos_analysis_calc + trigger ./jgdas_atmos_analysis == complete + task jgdas_atmos_analysis_diag + trigger ./jgdas_atmos_analysis == complete + endfamily + family post + task jgdas_atmos_post_manager + trigger ../../jgdas_forecast == active + event 1 release_postanl + event 2 release_post000 + event 3 release_post001 + event 4 release_post002 + event 5 release_post003 + event 6 release_post004 + event 7 release_post005 + event 8 release_post006 + event 9 release_post007 + event 10 release_post008 + event 11 release_post009 + task jgdas_atmos_post_anl + trigger ./jgdas_atmos_post_manager:release_postanl + edit FHRGRP '000' + edit FHRLST 'anl' + edit HR 'anl' + edit FHR 'anl' + task jgdas_atmos_post_f000 + trigger ./jgdas_atmos_post_manager:release_post000 + edit FHR 'f000' + edit HR '000' + edit FHRGRP '001' + edit FHRLST 'f000' + task jgdas_atmos_post_f001 + trigger ./jgdas_atmos_post_manager:release_post001 + edit FHR 'f001' + edit HR '001' + edit FHRGRP '002' + edit FHRLST 'f001' + task jgdas_atmos_post_f002 + trigger ./jgdas_atmos_post_manager:release_post002 + edit FHR 'f002' + edit HR '002' + edit FHRGRP '003' + edit FHRLST 'f002' + task jgdas_atmos_post_f003 + trigger ./jgdas_atmos_post_manager:release_post003 + edit FHR 'f003' + edit HR '003' + edit FHRGRP '004' + edit FHRLST 'f003' + task jgdas_atmos_post_f004 + trigger ./jgdas_atmos_post_manager:release_post004 + edit FHR 'f004' + edit HR '004' + edit FHRGRP '005' + edit FHRLST 'f004' + task jgdas_atmos_post_f005 + trigger ./jgdas_atmos_post_manager:release_post005 + edit FHR 'f005' + edit HR '005' + edit FHRGRP '006' + edit FHRLST 'f005' + task jgdas_atmos_post_f006 + trigger ./jgdas_atmos_post_manager:release_post006 + edit FHR 'f006' + edit HR '006' + edit FHRGRP '007' + edit FHRLST 'f006' + task jgdas_atmos_post_f007 + trigger ./jgdas_atmos_post_manager:release_post007 + edit FHR 'f007' + edit HR '007' + edit FHRGRP '008' + edit FHRLST 'f007' + task jgdas_atmos_post_f008 + trigger ./jgdas_atmos_post_manager:release_post008 + edit FHR 'f008' + edit HR '008' + edit FHRGRP '009' + edit FHRLST 'f008' + task jgdas_atmos_post_f009 + trigger ./jgdas_atmos_post_manager:release_post009 + edit FHR 'f009' + edit HR '009' + edit FHRGRP '010' + edit FHRLST 'f009' + endfamily + family post_processing + task jgdas_atmos_chgres_forenkf + trigger ../../jgdas_forecast == complete and ../../../enkfgdas/forecast == complete + endfamily + family gempak + task jgdas_atmos_gempak + trigger ../../jgdas_forecast == complete + task jgdas_atmos_gempak_meta_ncdc + trigger ./jgdas_atmos_gempak == complete + endfamily + family verf + task jgdas_atmos_vminmon + trigger ../analysis/jgdas_atmos_analysis == complete + task jgdas_atmos_verfrad + trigger ../analysis/jgdas_atmos_analysis_diag == complete + task jgdas_atmos_verfozn + trigger ../analysis/jgdas_atmos_analysis_diag == complete + endfamily + endfamily + family wave + family init + task jgdas_wave_init + trigger ../../atmos/obsproc/prep/jgdas_atmos_prep == complete + endfamily + family prep + task jgdas_wave_prep + trigger ../init/jgdas_wave_init == complete + endfamily + family post + task jgdas_wave_postsbs + trigger ../../atmos/post/jgdas_atmos_post_manager:release_post000 + task jgdas_wave_postpnt + trigger ../../jgdas_forecast == complete + endfamily + endfamily + task jgdas_forecast + trigger ./atmos/analysis/jgdas_atmos_analysis:release_fcst and ./wave/prep/jgdas_wave_prep == complete + endfamily + family enkfgdas + edit CYC '00' + edit PACKAGEHOME '/lfs/h2/emc/global/noscrub/Lin.Gan/git/feature-ops-wcoss2' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas' + edit PROJ 'GFS' + edit PROJENVIR 'DEV' + edit NET 'gfs' + edit RUN 'gdas' + edit COM '/lfs/h2/emc/ptmp/Lin.Gan/ecfops/com' + edit QUEUE 'dev' + edit QUEUESHARED 'dev_shared' + edit QUEUESERV 'dev_transfer' + family analysis + family create + task jenkfgdas_select_obs + trigger ../../../gdas/atmos/obsproc/prep/jgdas_atmos_prep == complete and /prod18/enkfgdas/post == complete + task jenkfgdas_diag + trigger ./jenkfgdas_select_obs == complete + task jenkfgdas_update + trigger ./jenkfgdas_diag == complete + endfamily + family recenter + family ecen + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas/analysis/recenter/ecen' + trigger ../create/jenkfgdas_update == complete and ../../../gdas/atmos/analysis/jgdas_atmos_analysis_calc == complete and /prod18/gdas/atmos/post_processing/jgdas_atmos_chgres_forenkf == complete + family grp1 + edit FHRGRP '003' + task jenkfgdas_ecen + endfamily + family grp2 + edit FHRGRP '006' + task jenkfgdas_ecen + endfamily + family grp3 + edit FHRGRP '009' + task jenkfgdas_ecen + endfamily + endfamily + task jenkfgdas_sfc + trigger ../create/jenkfgdas_update == complete and ../../../gdas/atmos/analysis/jgdas_atmos_analysis_calc == complete + endfamily + endfamily + family forecast + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas/forecast' + trigger ./analysis/recenter/ecen == complete and ./analysis/recenter/jenkfgdas_sfc == complete + family grp1 + edit ENSGRP '01' + task jenkfgdas_fcst + endfamily + family grp2 + edit ENSGRP '02' + task jenkfgdas_fcst + endfamily + family grp3 + edit ENSGRP '03' + task jenkfgdas_fcst + endfamily + family grp4 + edit ENSGRP '04' + task jenkfgdas_fcst + endfamily + family grp5 + edit ENSGRP '05' + task jenkfgdas_fcst + endfamily + family grp6 + edit ENSGRP '06' + task jenkfgdas_fcst + endfamily + family grp7 + edit ENSGRP '07' + task jenkfgdas_fcst + endfamily + family grp8 + edit ENSGRP '08' + task jenkfgdas_fcst + endfamily + family grp9 + edit ENSGRP '09' + task jenkfgdas_fcst + endfamily + family grp10 + edit ENSGRP '10' + task jenkfgdas_fcst + endfamily + family grp11 + edit ENSGRP '11' + task jenkfgdas_fcst + endfamily + family grp12 + edit ENSGRP '12' + task jenkfgdas_fcst + endfamily + family grp13 + edit ENSGRP '13' + task jenkfgdas_fcst + endfamily + family grp14 + edit ENSGRP '14' + task jenkfgdas_fcst + endfamily + family grp15 + edit ENSGRP '15' + task jenkfgdas_fcst + endfamily + family grp16 + edit ENSGRP '16' + task jenkfgdas_fcst + endfamily + family grp17 + edit ENSGRP '17' + task jenkfgdas_fcst + endfamily + family grp18 + edit ENSGRP '18' + task jenkfgdas_fcst + endfamily + family grp19 + edit ENSGRP '19' + task jenkfgdas_fcst + endfamily + family grp20 + edit ENSGRP '20' + task jenkfgdas_fcst + endfamily + family grp21 + edit ENSGRP '21' + task jenkfgdas_fcst + endfamily + family grp22 + edit ENSGRP '22' + task jenkfgdas_fcst + endfamily + family grp23 + edit ENSGRP '23' + task jenkfgdas_fcst + endfamily + family grp24 + edit ENSGRP '24' + task jenkfgdas_fcst + endfamily + family grp25 + edit ENSGRP '25' + task jenkfgdas_fcst + endfamily + family grp26 + edit ENSGRP '26' + task jenkfgdas_fcst + endfamily + family grp27 + edit ENSGRP '27' + task jenkfgdas_fcst + endfamily + family grp28 + edit ENSGRP '28' + task jenkfgdas_fcst + endfamily + family grp29 + edit ENSGRP '29' + task jenkfgdas_fcst + endfamily + family grp30 + edit ENSGRP '30' + task jenkfgdas_fcst + endfamily + family grp31 + edit ENSGRP '31' + task jenkfgdas_fcst + endfamily + family grp32 + edit ENSGRP '32' + task jenkfgdas_fcst + endfamily + family grp33 + edit ENSGRP '33' + task jenkfgdas_fcst + endfamily + family grp34 + edit ENSGRP '34' + task jenkfgdas_fcst + endfamily + family grp35 + edit ENSGRP '35' + task jenkfgdas_fcst + endfamily + family grp36 + edit ENSGRP '36' + task jenkfgdas_fcst + endfamily + family grp37 + edit ENSGRP '37' + task jenkfgdas_fcst + endfamily + family grp38 + edit ENSGRP '38' + task jenkfgdas_fcst + endfamily + family grp39 + edit ENSGRP '39' + task jenkfgdas_fcst + endfamily + family grp40 + edit ENSGRP '40' + task jenkfgdas_fcst + endfamily + endfamily + family post + trigger ./forecast == complete + task jenkfgdas_post_f003 + edit FHMIN_EPOS '003' + edit FHMAX_EPOS '003' + edit FHOUT_EPOS '003' + task jenkfgdas_post_f004 + edit FHMIN_EPOS '004' + edit FHMAX_EPOS '004' + edit FHOUT_EPOS '004' + task jenkfgdas_post_f005 + edit FHMIN_EPOS '005' + edit FHMAX_EPOS '005' + edit FHOUT_EPOS '005' + task jenkfgdas_post_f006 + edit FHMIN_EPOS '006' + edit FHMAX_EPOS '006' + edit FHOUT_EPOS '006' + task jenkfgdas_post_f007 + edit FHMIN_EPOS '007' + edit FHMAX_EPOS '007' + edit FHOUT_EPOS '007' + task jenkfgdas_post_f008 + edit FHMIN_EPOS '008' + edit FHMAX_EPOS '008' + edit FHOUT_EPOS '008' + task jenkfgdas_post_f009 + edit FHMIN_EPOS '009' + edit FHMAX_EPOS '009' + edit FHOUT_EPOS '009' + endfamily #### epos + endfamily #### enkf +endsuite diff --git a/ecf/defs/prod06.def b/ecf/defs/prod06.def new file mode 100644 index 0000000000..60e5d94faa --- /dev/null +++ b/ecf/defs/prod06.def @@ -0,0 +1,2552 @@ +extern /prod00/gdas/jgdas_forecast +extern /prod00/gdas/atmos/post +extern /prod00/enkfgdas/post +extern /prod00/gdas/atmos/post_processing/jgdas_atmos_chgres_forenkf + +suite prod06 + repeat day 1 + edit ECF_TRIES '1' + edit CYC '06' + edit ENVIR 'prod' + edit PROJ 'GFS' + edit PROJENVIR 'DEV' + edit QUEUE 'dev' + edit QUEUESHARED 'dev_shared' + edit QUEUESERV 'dev_transfer' + edit ECF_INCLUDE '/lfs/h2/emc/global/noscrub/Lin.Gan/git/feature-ops-wcoss2/ecf/include' + edit MACHINE_SITE 'development' + + family gfs + edit CYC '06' + edit PACKAGEHOME '/lfs/h2/emc/global/noscrub/Lin.Gan/git/feature-ops-wcoss2' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/gfs' + edit PROJ 'GFS' + edit PROJENVIR 'DEV' + edit NET 'gfs' + edit RUN 'gfs' + edit COM '/lfs/h2/emc/ptmp/Lin.Gan/ecfops/com' + edit QUEUE 'dev' + edit QUEUESHARED 'dev_shared' + edit QUEUESERV 'dev_transfer' + family atmos + family obsproc + family dump + task jgfs_atmos_tropcy_qc_reloc + event 1 jtwc_bull_email + time 02:41 + endfamily + family prep + task jgfs_atmos_emcsfc_sfc_prep + trigger ../dump/jgfs_atmos_dump:release_sfcprep + endfamily + endfamily + family analysis + task jgfs_atmos_analysis + trigger ../obsproc/prep/jgfs_atmos_prep == complete and ../obsproc/prep/jgfs_atmos_emcsfc_sfc_prep == complete + event 1 release_fcst + task jgfs_atmos_analysis_calc + trigger ./jgfs_atmos_analysis == complete + endfamily + family post + task jgfs_atmos_post_manager + trigger ../analysis/jgfs_atmos_analysis == complete + event 1 release_postanl + event 2 release_post000 + event 3 release_post001 + event 4 release_post002 + event 5 release_post003 + event 6 release_post004 + event 7 release_post005 + event 8 release_post006 + event 9 release_post007 + event 10 release_post008 + event 11 release_post009 + event 12 release_post010 + event 13 release_post011 + event 14 release_post012 + event 15 release_post013 + event 16 release_post014 + event 17 release_post015 + event 18 release_post016 + event 19 release_post017 + event 20 release_post018 + event 21 release_post019 + event 22 release_post020 + event 23 release_post021 + event 24 release_post022 + event 25 release_post023 + event 26 release_post024 + event 27 release_post025 + event 28 release_post026 + event 29 release_post027 + event 30 release_post028 + event 31 release_post029 + event 32 release_post030 + event 33 release_post031 + event 34 release_post032 + event 35 release_post033 + event 36 release_post034 + event 37 release_post035 + event 38 release_post036 + event 39 release_post037 + event 40 release_post038 + event 41 release_post039 + event 42 release_post040 + event 43 release_post041 + event 44 release_post042 + event 45 release_post043 + event 46 release_post044 + event 47 release_post045 + event 48 release_post046 + event 49 release_post047 + event 50 release_post048 + event 51 release_post049 + event 52 release_post050 + event 53 release_post051 + event 54 release_post052 + event 55 release_post053 + event 56 release_post054 + event 57 release_post055 + event 58 release_post056 + event 59 release_post057 + event 60 release_post058 + event 61 release_post059 + event 62 release_post060 + event 63 release_post061 + event 64 release_post062 + event 65 release_post063 + event 66 release_post064 + event 67 release_post065 + event 68 release_post066 + event 69 release_post067 + event 70 release_post068 + event 71 release_post069 + event 72 release_post070 + event 73 release_post071 + event 74 release_post072 + event 75 release_post073 + event 76 release_post074 + event 77 release_post075 + event 78 release_post076 + event 79 release_post077 + event 80 release_post078 + event 81 release_post079 + event 82 release_post080 + event 83 release_post081 + event 84 release_post082 + event 85 release_post083 + event 86 release_post084 + event 87 release_post085 + event 88 release_post086 + event 89 release_post087 + event 90 release_post088 + event 91 release_post089 + event 92 release_post090 + event 93 release_post091 + event 94 release_post092 + event 95 release_post093 + event 96 release_post094 + event 97 release_post095 + event 98 release_post096 + event 99 release_post097 + event 100 release_post098 + event 101 release_post099 + event 102 release_post100 + event 103 release_post101 + event 104 release_post102 + event 105 release_post103 + event 106 release_post104 + event 107 release_post105 + event 108 release_post106 + event 109 release_post107 + event 110 release_post108 + event 111 release_post109 + event 112 release_post110 + event 113 release_post111 + event 114 release_post112 + event 115 release_post113 + event 116 release_post114 + event 117 release_post115 + event 118 release_post116 + event 119 release_post117 + event 120 release_post118 + event 121 release_post119 + event 122 release_post120 + event 123 release_post123 + event 124 release_post126 + event 125 release_post129 + event 126 release_post132 + event 127 release_post135 + event 128 release_post138 + event 129 release_post141 + event 130 release_post144 + event 131 release_post147 + event 132 release_post150 + event 133 release_post153 + event 134 release_post156 + event 135 release_post159 + event 136 release_post162 + event 137 release_post165 + event 138 release_post168 + event 139 release_post171 + event 140 release_post174 + event 141 release_post177 + event 142 release_post180 + event 143 release_post183 + event 144 release_post186 + event 145 release_post189 + event 146 release_post192 + event 147 release_post195 + event 148 release_post198 + event 149 release_post201 + event 150 release_post204 + event 151 release_post207 + event 152 release_post210 + event 153 release_post213 + event 154 release_post216 + event 155 release_post219 + event 156 release_post222 + event 157 release_post225 + event 158 release_post228 + event 159 release_post231 + event 160 release_post234 + event 161 release_post237 + event 162 release_post240 + event 163 release_post243 + event 164 release_post246 + event 165 release_post249 + event 166 release_post252 + event 167 release_post255 + event 168 release_post258 + event 169 release_post261 + event 170 release_post264 + event 171 release_post267 + event 172 release_post270 + event 173 release_post273 + event 174 release_post276 + event 175 release_post279 + event 176 release_post282 + event 177 release_post285 + event 178 release_post288 + event 179 release_post291 + event 180 release_post294 + event 181 release_post297 + event 182 release_post300 + event 183 release_post303 + event 184 release_post306 + event 185 release_post309 + event 186 release_post312 + event 187 release_post315 + event 188 release_post318 + event 189 release_post321 + event 190 release_post324 + event 191 release_post327 + event 192 release_post330 + event 193 release_post333 + event 194 release_post336 + event 195 release_post339 + event 196 release_post342 + event 197 release_post345 + event 198 release_post348 + event 199 release_post351 + event 200 release_post354 + event 201 release_post357 + event 202 release_post360 + event 203 release_post363 + event 204 release_post366 + event 205 release_post369 + event 206 release_post372 + event 207 release_post375 + event 208 release_post378 + event 209 release_post381 + event 210 release_post384 + task jgfs_atmos_post_anl + trigger ./jgfs_atmos_post_manager:release_postanl + edit FHRGRP '000' + edit FHRLST 'anl' + edit HR 'anl' + edit FHR 'anl' + task jgfs_atmos_post_f000 + trigger ./jgfs_atmos_post_manager:release_post000 + edit FHRGRP '001' + edit FHRLST 'f000' + edit FHR 'f000' + edit HR '000' + task jgfs_atmos_post_f001 + trigger ./jgfs_atmos_post_manager:release_post001 + edit FHRGRP '002' + edit FHRLST 'f001' + edit FHR 'f001' + edit HR '001' + task jgfs_atmos_post_f002 + trigger ./jgfs_atmos_post_manager:release_post002 + edit FHRGRP '003' + edit FHRLST 'f002' + edit FHR 'f002' + edit HR '002' + task jgfs_atmos_post_f003 + trigger ./jgfs_atmos_post_manager:release_post003 + edit FHRGRP '004' + edit FHRLST 'f003' + edit FHR 'f003' + edit HR '003' + task jgfs_atmos_post_f004 + trigger ./jgfs_atmos_post_manager:release_post004 + edit FHRGRP '005' + edit FHRLST 'f004' + edit FHR 'f004' + edit HR '004' + task jgfs_atmos_post_f005 + trigger ./jgfs_atmos_post_manager:release_post005 + edit FHRGRP '006' + edit FHRLST 'f005' + edit FHR 'f005' + edit HR '005' + task jgfs_atmos_post_f006 + trigger ./jgfs_atmos_post_manager:release_post006 + edit FHRGRP '007' + edit FHRLST 'f006' + edit FHR 'f006' + edit HR '006' + task jgfs_atmos_post_f007 + trigger ./jgfs_atmos_post_manager:release_post007 + edit FHRGRP '008' + edit FHRLST 'f007' + edit FHR 'f007' + edit HR '007' + task jgfs_atmos_post_f008 + trigger ./jgfs_atmos_post_manager:release_post008 + edit FHRGRP '009' + edit FHRLST 'f008' + edit FHR 'f008' + edit HR '008' + task jgfs_atmos_post_f009 + trigger ./jgfs_atmos_post_manager:release_post009 + edit FHRGRP '010' + edit FHRLST 'f009' + edit FHR 'f009' + edit HR '009' + task jgfs_atmos_post_f010 + trigger ./jgfs_atmos_post_manager:release_post010 + edit FHRGRP '011' + edit FHRLST 'f010' + edit FHR 'f010' + edit HR '010' + task jgfs_atmos_post_f011 + trigger ./jgfs_atmos_post_manager:release_post011 + edit FHRGRP '012' + edit FHRLST 'f011' + edit FHR 'f011' + edit HR '011' + task jgfs_atmos_post_f012 + trigger ./jgfs_atmos_post_manager:release_post012 + edit FHRGRP '013' + edit FHRLST 'f012' + edit FHR 'f012' + edit HR '012' + task jgfs_atmos_post_f013 + trigger ./jgfs_atmos_post_manager:release_post013 + edit FHRGRP '014' + edit FHRLST 'f013' + edit FHR 'f013' + edit HR '013' + task jgfs_atmos_post_f014 + trigger ./jgfs_atmos_post_manager:release_post014 + edit FHRGRP '015' + edit FHRLST 'f014' + edit FHR 'f014' + edit HR '014' + task jgfs_atmos_post_f015 + trigger ./jgfs_atmos_post_manager:release_post015 + edit FHRGRP '016' + edit FHRLST 'f015' + edit FHR 'f015' + edit HR '015' + task jgfs_atmos_post_f016 + trigger ./jgfs_atmos_post_manager:release_post016 + edit FHRGRP '017' + edit FHRLST 'f016' + edit FHR 'f016' + edit HR '016' + task jgfs_atmos_post_f017 + trigger ./jgfs_atmos_post_manager:release_post017 + edit FHRGRP '018' + edit FHRLST 'f017' + edit FHR 'f017' + edit HR '017' + task jgfs_atmos_post_f018 + trigger ./jgfs_atmos_post_manager:release_post018 + edit FHRGRP '019' + edit FHRLST 'f018' + edit FHR 'f018' + edit HR '018' + task jgfs_atmos_post_f019 + trigger ./jgfs_atmos_post_manager:release_post019 + edit FHRGRP '020' + edit FHRLST 'f019' + edit FHR 'f019' + edit HR '019' + task jgfs_atmos_post_f020 + trigger ./jgfs_atmos_post_manager:release_post020 + edit FHRGRP '021' + edit FHRLST 'f020' + edit FHR 'f020' + edit HR '020' + task jgfs_atmos_post_f021 + trigger ./jgfs_atmos_post_manager:release_post021 + edit FHRGRP '022' + edit FHRLST 'f021' + edit FHR 'f021' + edit HR '021' + task jgfs_atmos_post_f022 + trigger ./jgfs_atmos_post_manager:release_post022 + edit FHRGRP '023' + edit FHRLST 'f022' + edit FHR 'f022' + edit HR '022' + task jgfs_atmos_post_f023 + trigger ./jgfs_atmos_post_manager:release_post023 + edit FHRGRP '024' + edit FHRLST 'f023' + edit FHR 'f023' + edit HR '023' + task jgfs_atmos_post_f024 + trigger ./jgfs_atmos_post_manager:release_post024 + edit FHRGRP '025' + edit FHRLST 'f024' + edit FHR 'f024' + edit HR '024' + task jgfs_atmos_post_f025 + trigger ./jgfs_atmos_post_manager:release_post025 + edit FHRGRP '026' + edit FHRLST 'f025' + edit FHR 'f025' + edit HR '025' + task jgfs_atmos_post_f026 + trigger ./jgfs_atmos_post_manager:release_post026 + edit FHRGRP '027' + edit FHRLST 'f026' + edit FHR 'f026' + edit HR '026' + task jgfs_atmos_post_f027 + trigger ./jgfs_atmos_post_manager:release_post027 + edit FHRGRP '028' + edit FHRLST 'f027' + edit FHR 'f027' + edit HR '027' + task jgfs_atmos_post_f028 + trigger ./jgfs_atmos_post_manager:release_post028 + edit FHRGRP '029' + edit FHRLST 'f028' + edit FHR 'f028' + edit HR '028' + task jgfs_atmos_post_f029 + trigger ./jgfs_atmos_post_manager:release_post029 + edit FHRGRP '030' + edit FHRLST 'f029' + edit FHR 'f029' + edit HR '029' + task jgfs_atmos_post_f030 + trigger ./jgfs_atmos_post_manager:release_post030 + edit FHRGRP '031' + edit FHRLST 'f030' + edit FHR 'f030' + edit HR '030' + task jgfs_atmos_post_f031 + trigger ./jgfs_atmos_post_manager:release_post031 + edit FHRGRP '032' + edit FHRLST 'f031' + edit FHR 'f031' + edit HR '031' + task jgfs_atmos_post_f032 + trigger ./jgfs_atmos_post_manager:release_post032 + edit FHRGRP '033' + edit FHRLST 'f032' + edit FHR 'f032' + edit HR '032' + task jgfs_atmos_post_f033 + trigger ./jgfs_atmos_post_manager:release_post033 + edit FHRGRP '034' + edit FHRLST 'f033' + edit FHR 'f033' + edit HR '033' + task jgfs_atmos_post_f034 + trigger ./jgfs_atmos_post_manager:release_post034 + edit FHRGRP '035' + edit FHRLST 'f034' + edit FHR 'f034' + edit HR '034' + task jgfs_atmos_post_f035 + trigger ./jgfs_atmos_post_manager:release_post035 + edit FHRGRP '036' + edit FHRLST 'f035' + edit FHR 'f035' + edit HR '035' + task jgfs_atmos_post_f036 + trigger ./jgfs_atmos_post_manager:release_post036 + edit FHRGRP '037' + edit FHRLST 'f036' + edit FHR 'f036' + edit HR '036' + task jgfs_atmos_post_f037 + trigger ./jgfs_atmos_post_manager:release_post037 + edit FHRGRP '038' + edit FHRLST 'f037' + edit FHR 'f037' + edit HR '037' + task jgfs_atmos_post_f038 + trigger ./jgfs_atmos_post_manager:release_post038 + edit FHRGRP '039' + edit FHRLST 'f038' + edit FHR 'f038' + edit HR '038' + task jgfs_atmos_post_f039 + trigger ./jgfs_atmos_post_manager:release_post039 + edit FHRGRP '040' + edit FHRLST 'f039' + edit FHR 'f039' + edit HR '039' + task jgfs_atmos_post_f040 + trigger ./jgfs_atmos_post_manager:release_post040 + edit FHRGRP '041' + edit FHRLST 'f040' + edit FHR 'f040' + edit HR '040' + task jgfs_atmos_post_f041 + trigger ./jgfs_atmos_post_manager:release_post041 + edit FHRGRP '042' + edit FHRLST 'f041' + edit FHR 'f041' + edit HR '041' + task jgfs_atmos_post_f042 + trigger ./jgfs_atmos_post_manager:release_post042 + edit FHRGRP '043' + edit FHRLST 'f042' + edit FHR 'f042' + edit HR '042' + task jgfs_atmos_post_f043 + trigger ./jgfs_atmos_post_manager:release_post043 + edit FHRGRP '044' + edit FHRLST 'f043' + edit FHR 'f043' + edit HR '043' + task jgfs_atmos_post_f044 + trigger ./jgfs_atmos_post_manager:release_post044 + edit FHRGRP '045' + edit FHRLST 'f044' + edit FHR 'f044' + edit HR '044' + task jgfs_atmos_post_f045 + trigger ./jgfs_atmos_post_manager:release_post045 + edit FHRGRP '046' + edit FHRLST 'f045' + edit FHR 'f045' + edit HR '045' + task jgfs_atmos_post_f046 + trigger ./jgfs_atmos_post_manager:release_post046 + edit FHRGRP '047' + edit FHRLST 'f046' + edit FHR 'f046' + edit HR '046' + task jgfs_atmos_post_f047 + trigger ./jgfs_atmos_post_manager:release_post047 + edit FHRGRP '048' + edit FHRLST 'f047' + edit FHR 'f047' + edit HR '047' + task jgfs_atmos_post_f048 + trigger ./jgfs_atmos_post_manager:release_post048 + edit FHRGRP '049' + edit FHRLST 'f048' + edit FHR 'f048' + edit HR '048' + task jgfs_atmos_post_f049 + trigger ./jgfs_atmos_post_manager:release_post049 + edit FHRGRP '050' + edit FHRLST 'f049' + edit FHR 'f049' + edit HR '049' + task jgfs_atmos_post_f050 + trigger ./jgfs_atmos_post_manager:release_post050 + edit FHRGRP '051' + edit FHRLST 'f050' + edit FHR 'f050' + edit HR '050' + task jgfs_atmos_post_f051 + trigger ./jgfs_atmos_post_manager:release_post051 + edit FHRGRP '052' + edit FHRLST 'f051' + edit FHR 'f051' + edit HR '051' + task jgfs_atmos_post_f052 + trigger ./jgfs_atmos_post_manager:release_post052 + edit FHRGRP '053' + edit FHRLST 'f052' + edit FHR 'f052' + edit HR '052' + task jgfs_atmos_post_f053 + trigger ./jgfs_atmos_post_manager:release_post053 + edit FHRGRP '054' + edit FHRLST 'f053' + edit FHR 'f053' + edit HR '053' + task jgfs_atmos_post_f054 + trigger ./jgfs_atmos_post_manager:release_post054 + edit FHRGRP '055' + edit FHRLST 'f054' + edit FHR 'f054' + edit HR '054' + task jgfs_atmos_post_f055 + trigger ./jgfs_atmos_post_manager:release_post055 + edit FHRGRP '056' + edit FHRLST 'f055' + edit FHR 'f055' + edit HR '055' + task jgfs_atmos_post_f056 + trigger ./jgfs_atmos_post_manager:release_post056 + edit FHRGRP '057' + edit FHRLST 'f056' + edit FHR 'f056' + edit HR '056' + task jgfs_atmos_post_f057 + trigger ./jgfs_atmos_post_manager:release_post057 + edit FHRGRP '058' + edit FHRLST 'f057' + edit FHR 'f057' + edit HR '057' + task jgfs_atmos_post_f058 + trigger ./jgfs_atmos_post_manager:release_post058 + edit FHRGRP '059' + edit FHRLST 'f058' + edit FHR 'f058' + edit HR '058' + task jgfs_atmos_post_f059 + trigger ./jgfs_atmos_post_manager:release_post059 + edit FHRGRP '060' + edit FHRLST 'f059' + edit FHR 'f059' + edit HR '059' + task jgfs_atmos_post_f060 + trigger ./jgfs_atmos_post_manager:release_post060 + edit FHRGRP '061' + edit FHRLST 'f060' + edit FHR 'f060' + edit HR '060' + task jgfs_atmos_post_f061 + trigger ./jgfs_atmos_post_manager:release_post061 + edit FHRGRP '062' + edit FHRLST 'f061' + edit FHR 'f061' + edit HR '061' + task jgfs_atmos_post_f062 + trigger ./jgfs_atmos_post_manager:release_post062 + edit FHRGRP '063' + edit FHRLST 'f062' + edit FHR 'f062' + edit HR '062' + task jgfs_atmos_post_f063 + trigger ./jgfs_atmos_post_manager:release_post063 + edit FHRGRP '064' + edit FHRLST 'f063' + edit FHR 'f063' + edit HR '063' + task jgfs_atmos_post_f064 + trigger ./jgfs_atmos_post_manager:release_post064 + edit FHRGRP '065' + edit FHRLST 'f064' + edit FHR 'f064' + edit HR '064' + task jgfs_atmos_post_f065 + trigger ./jgfs_atmos_post_manager:release_post065 + edit FHRGRP '066' + edit FHRLST 'f065' + edit FHR 'f065' + edit HR '065' + task jgfs_atmos_post_f066 + trigger ./jgfs_atmos_post_manager:release_post066 + edit FHRGRP '067' + edit FHRLST 'f066' + edit FHR 'f066' + edit HR '066' + task jgfs_atmos_post_f067 + trigger ./jgfs_atmos_post_manager:release_post067 + edit FHRGRP '068' + edit FHRLST 'f067' + edit FHR 'f067' + edit HR '067' + task jgfs_atmos_post_f068 + trigger ./jgfs_atmos_post_manager:release_post068 + edit FHRGRP '069' + edit FHRLST 'f068' + edit FHR 'f068' + edit HR '068' + task jgfs_atmos_post_f069 + trigger ./jgfs_atmos_post_manager:release_post069 + edit FHRGRP '070' + edit FHRLST 'f069' + edit FHR 'f069' + edit HR '069' + task jgfs_atmos_post_f070 + trigger ./jgfs_atmos_post_manager:release_post070 + edit FHRGRP '071' + edit FHRLST 'f070' + edit FHR 'f070' + edit HR '070' + task jgfs_atmos_post_f071 + trigger ./jgfs_atmos_post_manager:release_post071 + edit FHRGRP '072' + edit FHRLST 'f071' + edit FHR 'f071' + edit HR '071' + task jgfs_atmos_post_f072 + trigger ./jgfs_atmos_post_manager:release_post072 + edit FHRGRP '073' + edit FHRLST 'f072' + edit FHR 'f072' + edit HR '072' + task jgfs_atmos_post_f073 + trigger ./jgfs_atmos_post_manager:release_post073 + edit FHRGRP '074' + edit FHRLST 'f073' + edit FHR 'f073' + edit HR '073' + task jgfs_atmos_post_f074 + trigger ./jgfs_atmos_post_manager:release_post074 + edit FHRGRP '075' + edit FHRLST 'f074' + edit FHR 'f074' + edit HR '074' + task jgfs_atmos_post_f075 + trigger ./jgfs_atmos_post_manager:release_post075 + edit FHRGRP '076' + edit FHRLST 'f075' + edit FHR 'f075' + edit HR '075' + task jgfs_atmos_post_f076 + trigger ./jgfs_atmos_post_manager:release_post076 + edit FHRGRP '077' + edit FHRLST 'f076' + edit FHR 'f076' + edit HR '076' + task jgfs_atmos_post_f077 + trigger ./jgfs_atmos_post_manager:release_post077 + edit FHRGRP '078' + edit FHRLST 'f077' + edit FHR 'f077' + edit HR '077' + task jgfs_atmos_post_f078 + trigger ./jgfs_atmos_post_manager:release_post078 + edit FHRGRP '079' + edit FHRLST 'f078' + edit FHR 'f078' + edit HR '078' + task jgfs_atmos_post_f079 + trigger ./jgfs_atmos_post_manager:release_post079 + edit FHRGRP '080' + edit FHRLST 'f079' + edit FHR 'f079' + edit HR '079' + task jgfs_atmos_post_f080 + trigger ./jgfs_atmos_post_manager:release_post080 + edit FHRGRP '081' + edit FHRLST 'f080' + edit FHR 'f080' + edit HR '080' + task jgfs_atmos_post_f081 + trigger ./jgfs_atmos_post_manager:release_post081 + edit FHRGRP '082' + edit FHRLST 'f081' + edit FHR 'f081' + edit HR '081' + task jgfs_atmos_post_f082 + trigger ./jgfs_atmos_post_manager:release_post082 + edit FHRGRP '083' + edit FHRLST 'f082' + edit FHR 'f082' + edit HR '082' + task jgfs_atmos_post_f083 + trigger ./jgfs_atmos_post_manager:release_post083 + edit FHRGRP '084' + edit FHRLST 'f083' + edit FHR 'f083' + edit HR '083' + task jgfs_atmos_post_f084 + trigger ./jgfs_atmos_post_manager:release_post084 + edit FHRGRP '085' + edit FHRLST 'f084' + edit FHR 'f084' + edit HR '084' + task jgfs_atmos_post_f085 + trigger ./jgfs_atmos_post_manager:release_post085 + edit FHRGRP '086' + edit FHRLST 'f085' + edit FHR 'f085' + edit HR '085' + task jgfs_atmos_post_f086 + trigger ./jgfs_atmos_post_manager:release_post086 + edit FHRGRP '087' + edit FHRLST 'f086' + edit FHR 'f086' + edit HR '086' + task jgfs_atmos_post_f087 + trigger ./jgfs_atmos_post_manager:release_post087 + edit FHRGRP '088' + edit FHRLST 'f087' + edit FHR 'f087' + edit HR '087' + task jgfs_atmos_post_f088 + trigger ./jgfs_atmos_post_manager:release_post088 + edit FHRGRP '089' + edit FHRLST 'f088' + edit FHR 'f088' + edit HR '088' + task jgfs_atmos_post_f089 + trigger ./jgfs_atmos_post_manager:release_post089 + edit FHRGRP '090' + edit FHRLST 'f089' + edit FHR 'f089' + edit HR '089' + task jgfs_atmos_post_f090 + trigger ./jgfs_atmos_post_manager:release_post090 + edit FHRGRP '091' + edit FHRLST 'f090' + edit FHR 'f090' + edit HR '090' + task jgfs_atmos_post_f091 + trigger ./jgfs_atmos_post_manager:release_post091 + edit FHRGRP '092' + edit FHRLST 'f091' + edit FHR 'f091' + edit HR '091' + task jgfs_atmos_post_f092 + trigger ./jgfs_atmos_post_manager:release_post092 + edit FHRGRP '093' + edit FHRLST 'f092' + edit FHR 'f092' + edit HR '092' + task jgfs_atmos_post_f093 + trigger ./jgfs_atmos_post_manager:release_post093 + edit FHRGRP '094' + edit FHRLST 'f093' + edit FHR 'f093' + edit HR '093' + task jgfs_atmos_post_f094 + trigger ./jgfs_atmos_post_manager:release_post094 + edit FHRGRP '095' + edit FHRLST 'f094' + edit FHR 'f094' + edit HR '094' + task jgfs_atmos_post_f095 + trigger ./jgfs_atmos_post_manager:release_post095 + edit FHRGRP '096' + edit FHRLST 'f095' + edit FHR 'f095' + edit HR '095' + task jgfs_atmos_post_f096 + trigger ./jgfs_atmos_post_manager:release_post096 + edit FHRGRP '097' + edit FHRLST 'f096' + edit FHR 'f096' + edit HR '096' + task jgfs_atmos_post_f097 + trigger ./jgfs_atmos_post_manager:release_post097 + edit FHRGRP '098' + edit FHRLST 'f097' + edit FHR 'f097' + edit HR '097' + task jgfs_atmos_post_f098 + trigger ./jgfs_atmos_post_manager:release_post098 + edit FHRGRP '099' + edit FHRLST 'f098' + edit FHR 'f098' + edit HR '098' + task jgfs_atmos_post_f099 + trigger ./jgfs_atmos_post_manager:release_post099 + edit FHRGRP '100' + edit FHRLST 'f099' + edit FHR 'f099' + edit HR '099' + task jgfs_atmos_post_f100 + trigger ./jgfs_atmos_post_manager:release_post100 + edit FHRGRP '101' + edit FHRLST 'f100' + edit FHR 'f100' + edit HR '100' + task jgfs_atmos_post_f101 + trigger ./jgfs_atmos_post_manager:release_post101 + edit FHRGRP '102' + edit FHRLST 'f101' + edit FHR 'f101' + edit HR '101' + task jgfs_atmos_post_f102 + trigger ./jgfs_atmos_post_manager:release_post102 + edit FHRGRP '103' + edit FHRLST 'f102' + edit FHR 'f102' + edit HR '102' + task jgfs_atmos_post_f103 + trigger ./jgfs_atmos_post_manager:release_post103 + edit FHRGRP '104' + edit FHRLST 'f103' + edit FHR 'f103' + edit HR '103' + task jgfs_atmos_post_f104 + trigger ./jgfs_atmos_post_manager:release_post104 + edit FHRGRP '105' + edit FHRLST 'f104' + edit FHR 'f104' + edit HR '104' + task jgfs_atmos_post_f105 + trigger ./jgfs_atmos_post_manager:release_post105 + edit FHRGRP '106' + edit FHRLST 'f105' + edit FHR 'f105' + edit HR '105' + task jgfs_atmos_post_f106 + trigger ./jgfs_atmos_post_manager:release_post106 + edit FHRGRP '107' + edit FHRLST 'f106' + edit FHR 'f106' + edit HR '106' + task jgfs_atmos_post_f107 + trigger ./jgfs_atmos_post_manager:release_post107 + edit FHRGRP '108' + edit FHRLST 'f107' + edit FHR 'f107' + edit HR '107' + task jgfs_atmos_post_f108 + trigger ./jgfs_atmos_post_manager:release_post108 + edit FHRGRP '109' + edit FHRLST 'f108' + edit FHR 'f108' + edit HR '108' + task jgfs_atmos_post_f109 + trigger ./jgfs_atmos_post_manager:release_post109 + edit FHRGRP '110' + edit FHRLST 'f109' + edit FHR 'f109' + edit HR '109' + task jgfs_atmos_post_f110 + trigger ./jgfs_atmos_post_manager:release_post110 + edit FHRGRP '111' + edit FHRLST 'f110' + edit FHR 'f110' + edit HR '110' + task jgfs_atmos_post_f111 + trigger ./jgfs_atmos_post_manager:release_post111 + edit FHRGRP '112' + edit FHRLST 'f111' + edit FHR 'f111' + edit HR '111' + task jgfs_atmos_post_f112 + trigger ./jgfs_atmos_post_manager:release_post112 + edit FHRGRP '113' + edit FHRLST 'f112' + edit FHR 'f112' + edit HR '112' + task jgfs_atmos_post_f113 + trigger ./jgfs_atmos_post_manager:release_post113 + edit FHRGRP '114' + edit FHRLST 'f113' + edit FHR 'f113' + edit HR '113' + task jgfs_atmos_post_f114 + trigger ./jgfs_atmos_post_manager:release_post114 + edit FHRGRP '115' + edit FHRLST 'f114' + edit FHR 'f114' + edit HR '114' + task jgfs_atmos_post_f115 + trigger ./jgfs_atmos_post_manager:release_post115 + edit FHRGRP '116' + edit FHRLST 'f115' + edit FHR 'f115' + edit HR '115' + task jgfs_atmos_post_f116 + trigger ./jgfs_atmos_post_manager:release_post116 + edit FHRGRP '117' + edit FHRLST 'f116' + edit FHR 'f116' + edit HR '116' + task jgfs_atmos_post_f117 + trigger ./jgfs_atmos_post_manager:release_post117 + edit FHRGRP '118' + edit FHRLST 'f117' + edit FHR 'f117' + edit HR '117' + task jgfs_atmos_post_f118 + trigger ./jgfs_atmos_post_manager:release_post118 + edit FHRGRP '119' + edit FHRLST 'f118' + edit FHR 'f118' + edit HR '118' + task jgfs_atmos_post_f119 + trigger ./jgfs_atmos_post_manager:release_post119 + edit FHRGRP '120' + edit FHRLST 'f119' + edit FHR 'f119' + edit HR '119' + task jgfs_atmos_post_f120 + trigger ./jgfs_atmos_post_manager:release_post120 + edit FHRGRP '121' + edit FHRLST 'f120' + edit FHR 'f120' + edit HR '120' + task jgfs_atmos_post_f123 + trigger ./jgfs_atmos_post_manager:release_post123 + edit FHRGRP '122' + edit FHRLST 'f123' + edit FHR 'f123' + edit HR '123' + task jgfs_atmos_post_f126 + trigger ./jgfs_atmos_post_manager:release_post126 + edit FHRGRP '123' + edit FHRLST 'f126' + edit FHR 'f126' + edit HR '126' + task jgfs_atmos_post_f129 + trigger ./jgfs_atmos_post_manager:release_post129 + edit FHRGRP '124' + edit FHRLST 'f129' + edit FHR 'f129' + edit HR '129' + task jgfs_atmos_post_f132 + trigger ./jgfs_atmos_post_manager:release_post132 + edit FHRGRP '125' + edit FHRLST 'f132' + edit FHR 'f132' + edit HR '132' + task jgfs_atmos_post_f135 + trigger ./jgfs_atmos_post_manager:release_post135 + edit FHRGRP '126' + edit FHRLST 'f135' + edit FHR 'f135' + edit HR '135' + task jgfs_atmos_post_f138 + trigger ./jgfs_atmos_post_manager:release_post138 + edit FHRGRP '127' + edit FHRLST 'f138' + edit FHR 'f138' + edit HR '138' + task jgfs_atmos_post_f141 + trigger ./jgfs_atmos_post_manager:release_post141 + edit FHRGRP '128' + edit FHRLST 'f141' + edit FHR 'f141' + edit HR '141' + task jgfs_atmos_post_f144 + trigger ./jgfs_atmos_post_manager:release_post144 + edit FHRGRP '129' + edit FHRLST 'f144' + edit FHR 'f144' + edit HR '144' + task jgfs_atmos_post_f147 + trigger ./jgfs_atmos_post_manager:release_post147 + edit FHRGRP '130' + edit FHRLST 'f147' + edit FHR 'f147' + edit HR '147' + task jgfs_atmos_post_f150 + trigger ./jgfs_atmos_post_manager:release_post150 + edit FHRGRP '131' + edit FHRLST 'f150' + edit FHR 'f150' + edit HR '150' + task jgfs_atmos_post_f153 + trigger ./jgfs_atmos_post_manager:release_post153 + edit FHRGRP '132' + edit FHRLST 'f153' + edit FHR 'f153' + edit HR '153' + task jgfs_atmos_post_f156 + trigger ./jgfs_atmos_post_manager:release_post156 + edit FHRGRP '133' + edit FHRLST 'f156' + edit FHR 'f156' + edit HR '156' + task jgfs_atmos_post_f159 + trigger ./jgfs_atmos_post_manager:release_post159 + edit FHRGRP '134' + edit FHRLST 'f159' + edit FHR 'f159' + edit HR '159' + task jgfs_atmos_post_f162 + trigger ./jgfs_atmos_post_manager:release_post162 + edit FHRGRP '135' + edit FHRLST 'f162' + edit FHR 'f162' + edit HR '162' + task jgfs_atmos_post_f165 + trigger ./jgfs_atmos_post_manager:release_post165 + edit FHRGRP '136' + edit FHRLST 'f165' + edit FHR 'f165' + edit HR '165' + task jgfs_atmos_post_f168 + trigger ./jgfs_atmos_post_manager:release_post168 + edit FHRGRP '137' + edit FHRLST 'f168' + edit FHR 'f168' + edit HR '168' + task jgfs_atmos_post_f171 + trigger ./jgfs_atmos_post_manager:release_post171 + edit FHRGRP '138' + edit FHRLST 'f171' + edit FHR 'f171' + edit HR '171' + task jgfs_atmos_post_f174 + trigger ./jgfs_atmos_post_manager:release_post174 + edit FHRGRP '139' + edit FHRLST 'f174' + edit FHR 'f174' + edit HR '174' + task jgfs_atmos_post_f177 + trigger ./jgfs_atmos_post_manager:release_post177 + edit FHRGRP '140' + edit FHRLST 'f177' + edit FHR 'f177' + edit HR '177' + task jgfs_atmos_post_f180 + trigger ./jgfs_atmos_post_manager:release_post180 + edit FHRGRP '141' + edit FHRLST 'f180' + edit FHR 'f180' + edit HR '180' + task jgfs_atmos_post_f183 + trigger ./jgfs_atmos_post_manager:release_post183 + edit FHRGRP '142' + edit FHRLST 'f183' + edit FHR 'f183' + edit HR '183' + task jgfs_atmos_post_f186 + trigger ./jgfs_atmos_post_manager:release_post186 + edit FHRGRP '143' + edit FHRLST 'f186' + edit FHR 'f186' + edit HR '186' + task jgfs_atmos_post_f189 + trigger ./jgfs_atmos_post_manager:release_post189 + edit FHRGRP '144' + edit FHRLST 'f189' + edit FHR 'f189' + edit HR '189' + task jgfs_atmos_post_f192 + trigger ./jgfs_atmos_post_manager:release_post192 + edit FHRGRP '145' + edit FHRLST 'f192' + edit FHR 'f192' + edit HR '192' + task jgfs_atmos_post_f195 + trigger ./jgfs_atmos_post_manager:release_post195 + edit FHRGRP '146' + edit FHRLST 'f195' + edit FHR 'f195' + edit HR '195' + task jgfs_atmos_post_f198 + trigger ./jgfs_atmos_post_manager:release_post198 + edit FHRGRP '147' + edit FHRLST 'f198' + edit FHR 'f198' + edit HR '198' + task jgfs_atmos_post_f201 + trigger ./jgfs_atmos_post_manager:release_post201 + edit FHRGRP '148' + edit FHRLST 'f201' + edit FHR 'f201' + edit HR '201' + task jgfs_atmos_post_f204 + trigger ./jgfs_atmos_post_manager:release_post204 + edit FHRGRP '149' + edit FHRLST 'f204' + edit FHR 'f204' + edit HR '204' + task jgfs_atmos_post_f207 + trigger ./jgfs_atmos_post_manager:release_post207 + edit FHRGRP '150' + edit FHRLST 'f207' + edit FHR 'f207' + edit HR '207' + task jgfs_atmos_post_f210 + trigger ./jgfs_atmos_post_manager:release_post210 + edit FHRGRP '151' + edit FHRLST 'f210' + edit FHR 'f210' + edit HR '210' + task jgfs_atmos_post_f213 + trigger ./jgfs_atmos_post_manager:release_post213 + edit FHRGRP '152' + edit FHRLST 'f213' + edit FHR 'f213' + edit HR '213' + task jgfs_atmos_post_f216 + trigger ./jgfs_atmos_post_manager:release_post216 + edit FHRGRP '153' + edit FHRLST 'f216' + edit FHR 'f216' + edit HR '216' + task jgfs_atmos_post_f219 + trigger ./jgfs_atmos_post_manager:release_post219 + edit FHRGRP '154' + edit FHRLST 'f219' + edit FHR 'f219' + edit HR '219' + task jgfs_atmos_post_f222 + trigger ./jgfs_atmos_post_manager:release_post222 + edit FHRGRP '155' + edit FHRLST 'f222' + edit FHR 'f222' + edit HR '222' + task jgfs_atmos_post_f225 + trigger ./jgfs_atmos_post_manager:release_post225 + edit FHRGRP '156' + edit FHRLST 'f225' + edit FHR 'f225' + edit HR '225' + task jgfs_atmos_post_f228 + trigger ./jgfs_atmos_post_manager:release_post228 + edit FHRGRP '157' + edit FHRLST 'f228' + edit FHR 'f228' + edit HR '228' + task jgfs_atmos_post_f231 + trigger ./jgfs_atmos_post_manager:release_post231 + edit FHRGRP '158' + edit FHRLST 'f231' + edit FHR 'f231' + edit HR '231' + task jgfs_atmos_post_f234 + trigger ./jgfs_atmos_post_manager:release_post234 + edit FHRGRP '159' + edit FHRLST 'f234' + edit FHR 'f234' + edit HR '234' + task jgfs_atmos_post_f237 + trigger ./jgfs_atmos_post_manager:release_post237 + edit FHRGRP '160' + edit FHRLST 'f237' + edit FHR 'f237' + edit HR '237' + task jgfs_atmos_post_f240 + trigger ./jgfs_atmos_post_manager:release_post240 + edit FHRGRP '161' + edit FHRLST 'f240' + edit FHR 'f240' + edit HR '240' + task jgfs_atmos_post_f243 + trigger ./jgfs_atmos_post_manager:release_post243 + edit FHRGRP '162' + edit FHRLST 'f243' + edit FHR 'f243' + edit HR '243' + task jgfs_atmos_post_f246 + trigger ./jgfs_atmos_post_manager:release_post246 + edit FHRGRP '163' + edit FHRLST 'f246' + edit FHR 'f246' + edit HR '246' + task jgfs_atmos_post_f249 + trigger ./jgfs_atmos_post_manager:release_post249 + edit FHRGRP '164' + edit FHRLST 'f249' + edit FHR 'f249' + edit HR '249' + task jgfs_atmos_post_f252 + trigger ./jgfs_atmos_post_manager:release_post252 + edit FHRGRP '165' + edit FHRLST 'f252' + edit FHR 'f252' + edit HR '252' + task jgfs_atmos_post_f255 + trigger ./jgfs_atmos_post_manager:release_post255 + edit FHRGRP '166' + edit FHRLST 'f255' + edit FHR 'f255' + edit HR '255' + task jgfs_atmos_post_f258 + trigger ./jgfs_atmos_post_manager:release_post258 + edit FHRGRP '167' + edit FHRLST 'f258' + edit FHR 'f258' + edit HR '258' + task jgfs_atmos_post_f261 + trigger ./jgfs_atmos_post_manager:release_post261 + edit FHRGRP '168' + edit FHRLST 'f261' + edit FHR 'f261' + edit HR '261' + task jgfs_atmos_post_f264 + trigger ./jgfs_atmos_post_manager:release_post264 + edit FHRGRP '169' + edit FHRLST 'f264' + edit FHR 'f264' + edit HR '264' + task jgfs_atmos_post_f267 + trigger ./jgfs_atmos_post_manager:release_post267 + edit FHRGRP '170' + edit FHRLST 'f267' + edit FHR 'f267' + edit HR '267' + task jgfs_atmos_post_f270 + trigger ./jgfs_atmos_post_manager:release_post270 + edit FHRGRP '171' + edit FHRLST 'f270' + edit FHR 'f270' + edit HR '270' + task jgfs_atmos_post_f273 + trigger ./jgfs_atmos_post_manager:release_post273 + edit FHRGRP '172' + edit FHRLST 'f273' + edit FHR 'f273' + edit HR '273' + task jgfs_atmos_post_f276 + trigger ./jgfs_atmos_post_manager:release_post276 + edit FHRGRP '173' + edit FHRLST 'f276' + edit FHR 'f276' + edit HR '276' + task jgfs_atmos_post_f279 + trigger ./jgfs_atmos_post_manager:release_post279 + edit FHRGRP '174' + edit FHRLST 'f279' + edit FHR 'f279' + edit HR '279' + task jgfs_atmos_post_f282 + trigger ./jgfs_atmos_post_manager:release_post282 + edit FHRGRP '175' + edit FHRLST 'f282' + edit FHR 'f282' + edit HR '282' + task jgfs_atmos_post_f285 + trigger ./jgfs_atmos_post_manager:release_post285 + edit FHRGRP '176' + edit FHRLST 'f285' + edit FHR 'f285' + edit HR '285' + task jgfs_atmos_post_f288 + trigger ./jgfs_atmos_post_manager:release_post288 + edit FHRGRP '177' + edit FHRLST 'f288' + edit FHR 'f288' + edit HR '288' + task jgfs_atmos_post_f291 + trigger ./jgfs_atmos_post_manager:release_post291 + edit FHRGRP '178' + edit FHRLST 'f291' + edit FHR 'f291' + edit HR '291' + task jgfs_atmos_post_f294 + trigger ./jgfs_atmos_post_manager:release_post294 + edit FHRGRP '179' + edit FHRLST 'f294' + edit FHR 'f294' + edit HR '294' + task jgfs_atmos_post_f297 + trigger ./jgfs_atmos_post_manager:release_post297 + edit FHRGRP '180' + edit FHRLST 'f297' + edit FHR 'f297' + edit HR '297' + task jgfs_atmos_post_f300 + trigger ./jgfs_atmos_post_manager:release_post300 + edit FHRGRP '181' + edit FHRLST 'f300' + edit FHR 'f300' + edit HR '300' + task jgfs_atmos_post_f303 + trigger ./jgfs_atmos_post_manager:release_post303 + edit FHRGRP '182' + edit FHRLST 'f303' + edit FHR 'f303' + edit HR '303' + task jgfs_atmos_post_f306 + trigger ./jgfs_atmos_post_manager:release_post306 + edit FHRGRP '183' + edit FHRLST 'f306' + edit FHR 'f306' + edit HR '306' + task jgfs_atmos_post_f309 + trigger ./jgfs_atmos_post_manager:release_post309 + edit FHRGRP '184' + edit FHRLST 'f309' + edit FHR 'f309' + edit HR '309' + task jgfs_atmos_post_f312 + trigger ./jgfs_atmos_post_manager:release_post312 + edit FHRGRP '185' + edit FHRLST 'f312' + edit FHR 'f312' + edit HR '312' + task jgfs_atmos_post_f315 + trigger ./jgfs_atmos_post_manager:release_post315 + edit FHRGRP '186' + edit FHRLST 'f315' + edit FHR 'f315' + edit HR '315' + task jgfs_atmos_post_f318 + trigger ./jgfs_atmos_post_manager:release_post318 + edit FHRGRP '187' + edit FHRLST 'f318' + edit FHR 'f318' + edit HR '318' + task jgfs_atmos_post_f321 + trigger ./jgfs_atmos_post_manager:release_post321 + edit FHRGRP '188' + edit FHRLST 'f321' + edit FHR 'f321' + edit HR '321' + task jgfs_atmos_post_f324 + trigger ./jgfs_atmos_post_manager:release_post324 + edit FHRGRP '189' + edit FHRLST 'f324' + edit FHR 'f324' + edit HR '324' + task jgfs_atmos_post_f327 + trigger ./jgfs_atmos_post_manager:release_post327 + edit FHRGRP '190' + edit FHRLST 'f327' + edit FHR 'f327' + edit HR '327' + task jgfs_atmos_post_f330 + trigger ./jgfs_atmos_post_manager:release_post330 + edit FHRGRP '191' + edit FHRLST 'f330' + edit FHR 'f330' + edit HR '330' + task jgfs_atmos_post_f333 + trigger ./jgfs_atmos_post_manager:release_post333 + edit FHRGRP '192' + edit FHRLST 'f333' + edit FHR 'f333' + edit HR '333' + task jgfs_atmos_post_f336 + trigger ./jgfs_atmos_post_manager:release_post336 + edit FHRGRP '193' + edit FHRLST 'f336' + edit FHR 'f336' + edit HR '336' + task jgfs_atmos_post_f339 + trigger ./jgfs_atmos_post_manager:release_post339 + edit FHRGRP '194' + edit FHRLST 'f339' + edit FHR 'f339' + edit HR '339' + task jgfs_atmos_post_f342 + trigger ./jgfs_atmos_post_manager:release_post342 + edit FHRGRP '195' + edit FHRLST 'f342' + edit FHR 'f342' + edit HR '342' + task jgfs_atmos_post_f345 + trigger ./jgfs_atmos_post_manager:release_post345 + edit FHRGRP '196' + edit FHRLST 'f345' + edit FHR 'f345' + edit HR '345' + task jgfs_atmos_post_f348 + trigger ./jgfs_atmos_post_manager:release_post348 + edit FHRGRP '197' + edit FHRLST 'f348' + edit FHR 'f348' + edit HR '348' + task jgfs_atmos_post_f351 + trigger ./jgfs_atmos_post_manager:release_post351 + edit FHRGRP '198' + edit FHRLST 'f351' + edit FHR 'f351' + edit HR '351' + task jgfs_atmos_post_f354 + trigger ./jgfs_atmos_post_manager:release_post354 + edit FHRGRP '199' + edit FHRLST 'f354' + edit FHR 'f354' + edit HR '354' + task jgfs_atmos_post_f357 + trigger ./jgfs_atmos_post_manager:release_post357 + edit FHRGRP '200' + edit FHRLST 'f357' + edit FHR 'f357' + edit HR '357' + task jgfs_atmos_post_f360 + trigger ./jgfs_atmos_post_manager:release_post360 + edit FHRGRP '201' + edit FHRLST 'f360' + edit FHR 'f360' + edit HR '360' + task jgfs_atmos_post_f363 + trigger ./jgfs_atmos_post_manager:release_post363 + edit FHRGRP '202' + edit FHRLST 'f363' + edit FHR 'f363' + edit HR '363' + task jgfs_atmos_post_f366 + trigger ./jgfs_atmos_post_manager:release_post366 + edit FHRGRP '203' + edit FHRLST 'f366' + edit FHR 'f366' + edit HR '366' + task jgfs_atmos_post_f369 + trigger ./jgfs_atmos_post_manager:release_post369 + edit FHRGRP '204' + edit FHRLST 'f369' + edit FHR 'f369' + edit HR '369' + task jgfs_atmos_post_f372 + trigger ./jgfs_atmos_post_manager:release_post372 + edit FHRGRP '205' + edit FHRLST 'f372' + edit FHR 'f372' + edit HR '372' + task jgfs_atmos_post_f375 + trigger ./jgfs_atmos_post_manager:release_post375 + edit FHRGRP '206' + edit FHRLST 'f375' + edit FHR 'f375' + edit HR '375' + task jgfs_atmos_post_f378 + trigger ./jgfs_atmos_post_manager:release_post378 + edit FHRGRP '207' + edit FHRLST 'f378' + edit FHR 'f378' + edit HR '378' + task jgfs_atmos_post_f381 + trigger ./jgfs_atmos_post_manager:release_post381 + edit FHRGRP '208' + edit FHRLST 'f381' + edit FHR 'f381' + edit HR '381' + task jgfs_atmos_post_f384 + trigger ./jgfs_atmos_post_manager:release_post384 + edit FHRGRP '209' + edit FHRLST 'f384' + edit FHR 'f384' + edit HR '384' + endfamily + family post_processing + family bufr_sounding + task jgfs_atmos_postsnd + trigger ../../post/jgfs_atmos_post_manager:release_post000 + endfamily + family bulletins + task jgfs_atmos_fbwind + trigger ../../post/jgfs_atmos_post_f006 == complete and ../../post/jgfs_atmos_post_f012 == complete and ../../post/jgfs_atmos_post_f024 == complete + endfamily + family awips_20km_1p0 + task jgfs_atmos_awips_f000 + trigger ../../post/jgfs_atmos_post_f000 == complete + edit FHRGRP '000' + edit FHRLST 'f000' + edit FCSTHR '000' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f003 + trigger ../../post/jgfs_atmos_post_f003 == complete + edit FHRGRP '003' + edit FHRLST 'f003' + edit FCSTHR '003' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f006 + trigger ../../post/jgfs_atmos_post_f006 == complete + edit FHRGRP '006' + edit FHRLST 'f006' + edit FCSTHR '006' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f009 + trigger ../../post/jgfs_atmos_post_f009 == complete + edit FHRGRP '009' + edit FHRLST 'f009' + edit FCSTHR '009' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f012 + trigger ../../post/jgfs_atmos_post_f012 == complete + edit FHRGRP '012' + edit FHRLST 'f012' + edit FCSTHR '012' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f015 + trigger ../../post/jgfs_atmos_post_f015 == complete + edit FHRGRP '015' + edit FHRLST 'f015' + edit FCSTHR '015' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f018 + trigger ../../post/jgfs_atmos_post_f018 == complete + edit FHRGRP '018' + edit FHRLST 'f018' + edit FCSTHR '018' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f021 + trigger ../../post/jgfs_atmos_post_f021 == complete + edit FHRGRP '021' + edit FHRLST 'f021' + edit FCSTHR '021' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f024 + trigger ../../post/jgfs_atmos_post_f024 == complete + edit FHRGRP '024' + edit FHRLST 'f024' + edit FCSTHR '024' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f027 + trigger ../../post/jgfs_atmos_post_f027 == complete + edit FHRGRP '027' + edit FHRLST 'f027' + edit FCSTHR '027' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f030 + trigger ../../post/jgfs_atmos_post_f030 == complete + edit FHRGRP '030' + edit FHRLST 'f030' + edit FCSTHR '030' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f033 + trigger ../../post/jgfs_atmos_post_f033 == complete + edit FHRGRP '033' + edit FHRLST 'f033' + edit FCSTHR '033' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f036 + trigger ../../post/jgfs_atmos_post_f036 == complete + edit FHRGRP '036' + edit FHRLST 'f036' + edit FCSTHR '036' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f039 + trigger ../../post/jgfs_atmos_post_f039 == complete + edit FHRGRP '039' + edit FHRLST 'f039' + edit FCSTHR '039' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f042 + trigger ../../post/jgfs_atmos_post_f042 == complete + edit FHRGRP '042' + edit FHRLST 'f042' + edit FCSTHR '042' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f045 + trigger ../../post/jgfs_atmos_post_f045 == complete + edit FHRGRP '045' + edit FHRLST 'f045' + edit FCSTHR '045' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f048 + trigger ../../post/jgfs_atmos_post_f048 == complete + edit FHRGRP '048' + edit FHRLST 'f048' + edit FCSTHR '048' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f051 + trigger ../../post/jgfs_atmos_post_f051 == complete + edit FHRGRP '051' + edit FHRLST 'f051' + edit FCSTHR '051' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f054 + trigger ../../post/jgfs_atmos_post_f054 == complete + edit FHRGRP '054' + edit FHRLST 'f054' + edit FCSTHR '054' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f057 + trigger ../../post/jgfs_atmos_post_f057 == complete + edit FHRGRP '057' + edit FHRLST 'f057' + edit FCSTHR '057' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f060 + trigger ../../post/jgfs_atmos_post_f060 == complete + edit FHRGRP '060' + edit FHRLST 'f060' + edit FCSTHR '060' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f063 + trigger ../../post/jgfs_atmos_post_f063 == complete + edit FHRGRP '063' + edit FHRLST 'f063' + edit FCSTHR '063' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f066 + trigger ../../post/jgfs_atmos_post_f066 == complete + edit FHRGRP '066' + edit FHRLST 'f066' + edit FCSTHR '066' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f069 + trigger ../../post/jgfs_atmos_post_f069 == complete + edit FHRGRP '069' + edit FHRLST 'f069' + edit FCSTHR '069' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f072 + trigger ../../post/jgfs_atmos_post_f072 == complete + edit FHRGRP '072' + edit FHRLST 'f072' + edit FCSTHR '072' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f075 + trigger ../../post/jgfs_atmos_post_f075 == complete + edit FHRGRP '075' + edit FHRLST 'f075' + edit FCSTHR '075' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f078 + trigger ../../post/jgfs_atmos_post_f078 == complete + edit FHRGRP '078' + edit FHRLST 'f078' + edit FCSTHR '078' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f081 + trigger ../../post/jgfs_atmos_post_f081 == complete + edit FHRGRP '081' + edit FHRLST 'f081' + edit FCSTHR '081' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f084 + trigger ../../post/jgfs_atmos_post_f084 == complete + edit FHRGRP '084' + edit FHRLST 'f084' + edit FCSTHR '084' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f090 + trigger ../../post/jgfs_atmos_post_f090 == complete + edit FHRGRP '090' + edit FHRLST 'f090' + edit FCSTHR '090' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f096 + trigger ../../post/jgfs_atmos_post_f096 == complete + edit FHRGRP '096' + edit FHRLST 'f096' + edit FCSTHR '096' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f102 + trigger ../../post/jgfs_atmos_post_f102 == complete + edit FHRGRP '102' + edit FHRLST 'f102' + edit FCSTHR '102' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f108 + trigger ../../post/jgfs_atmos_post_f108 == complete + edit FHRGRP '108' + edit FHRLST 'f108' + edit FCSTHR '108' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f114 + trigger ../../post/jgfs_atmos_post_f114 == complete + edit FHRGRP '114' + edit FHRLST 'f114' + edit FCSTHR '114' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f120 + trigger ../../post/jgfs_atmos_post_f120 == complete + edit FHRGRP '120' + edit FHRLST 'f120' + edit FCSTHR '120' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f126 + trigger ../../post/jgfs_atmos_post_f126 == complete + edit FHRGRP '126' + edit FHRLST 'f126' + edit FCSTHR '126' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f132 + trigger ../../post/jgfs_atmos_post_f132 == complete + edit FHRGRP '132' + edit FHRLST 'f132' + edit FCSTHR '132' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f138 + trigger ../../post/jgfs_atmos_post_f138 == complete + edit FHRGRP '138' + edit FHRLST 'f138' + edit FCSTHR '138' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f144 + trigger ../../post/jgfs_atmos_post_f144 == complete + edit FHRGRP '144' + edit FHRLST 'f144' + edit FCSTHR '144' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f150 + trigger ../../post/jgfs_atmos_post_f150 == complete + edit FHRGRP '150' + edit FHRLST 'f150' + edit FCSTHR '150' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f156 + trigger ../../post/jgfs_atmos_post_f156 == complete + edit FHRGRP '156' + edit FHRLST 'f156' + edit FCSTHR '156' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f162 + trigger ../../post/jgfs_atmos_post_f162 == complete + edit FHRGRP '162' + edit FHRLST 'f162' + edit FCSTHR '162' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f168 + trigger ../../post/jgfs_atmos_post_f168 == complete + edit FHRGRP '168' + edit FHRLST 'f168' + edit FCSTHR '168' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f174 + trigger ../../post/jgfs_atmos_post_f174 == complete + edit FHRGRP '174' + edit FHRLST 'f174' + edit FCSTHR '174' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f180 + trigger ../../post/jgfs_atmos_post_f180 == complete + edit FHRGRP '180' + edit FHRLST 'f180' + edit FCSTHR '180' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f186 + trigger ../../post/jgfs_atmos_post_f186 == complete + edit FHRGRP '186' + edit FHRLST 'f186' + edit FCSTHR '186' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f192 + trigger ../../post/jgfs_atmos_post_f192 == complete + edit FHRGRP '192' + edit FHRLST 'f192' + edit FCSTHR '192' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f198 + trigger ../../post/jgfs_atmos_post_f198 == complete + edit FHRGRP '198' + edit FHRLST 'f198' + edit FCSTHR '198' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f204 + trigger ../../post/jgfs_atmos_post_f204 == complete + edit FHRGRP '204' + edit FHRLST 'f204' + edit FCSTHR '204' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f210 + trigger ../../post/jgfs_atmos_post_f210 == complete + edit FHRGRP '210' + edit FHRLST 'f210' + edit FCSTHR '210' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f216 + trigger ../../post/jgfs_atmos_post_f216 == complete + edit FHRGRP '216' + edit FHRLST 'f216' + edit FCSTHR '216' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f222 + trigger ../../post/jgfs_atmos_post_f222 == complete + edit FHRGRP '222' + edit FHRLST 'f222' + edit FCSTHR '222' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f228 + trigger ../../post/jgfs_atmos_post_f228 == complete + edit FHRGRP '228' + edit FHRLST 'f228' + edit FCSTHR '228' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f234 + trigger ../../post/jgfs_atmos_post_f234 == complete + edit FHRGRP '234' + edit FHRLST 'f234' + edit FCSTHR '234' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f240 + trigger ../../post/jgfs_atmos_post_f240 == complete + edit FHRGRP '240' + edit FHRLST 'f240' + edit FCSTHR '240' + edit TRDRUN 'YES' + endfamily + family awips_g2 + task jgfs_atmos_awips_g2_f000 + trigger ../../post/jgfs_atmos_post_f000 == complete + edit FHRGRP '000' + edit FHRLST 'f000' + edit FCSTHR '000' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f006 + trigger ../../post/jgfs_atmos_post_f006 == complete + edit FHRGRP '006' + edit FHRLST 'f006' + edit FCSTHR '006' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f012 + trigger ../../post/jgfs_atmos_post_f012 == complete + edit FHRGRP '012' + edit FHRLST 'f012' + edit FCSTHR '012' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f018 + trigger ../../post/jgfs_atmos_post_f018 == complete + edit FHRGRP '018' + edit FHRLST 'f018' + edit FCSTHR '018' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f024 + trigger ../../post/jgfs_atmos_post_f024 == complete + edit FHRGRP '024' + edit FHRLST 'f024' + edit FCSTHR '024' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f030 + trigger ../../post/jgfs_atmos_post_f030 == complete + edit FHRGRP '030' + edit FHRLST 'f030' + edit FCSTHR '030' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f036 + trigger ../../post/jgfs_atmos_post_f036 == complete + edit FHRGRP '036' + edit FHRLST 'f036' + edit FCSTHR '036' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f042 + trigger ../../post/jgfs_atmos_post_f042 == complete + edit FHRGRP '042' + edit FHRLST 'f042' + edit FCSTHR '042' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f048 + trigger ../../post/jgfs_atmos_post_f048 == complete + edit FHRGRP '048' + edit FHRLST 'f048' + edit FCSTHR '048' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f054 + trigger ../../post/jgfs_atmos_post_f054 == complete + edit FHRGRP '054' + edit FHRLST 'f054' + edit FCSTHR '054' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f060 + trigger ../../post/jgfs_atmos_post_f060 == complete + edit FHRGRP '060' + edit FHRLST 'f060' + edit FCSTHR '060' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f066 + trigger ../../post/jgfs_atmos_post_f066 == complete + edit FHRGRP '066' + edit FHRLST 'f066' + edit FCSTHR '066' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f072 + trigger ../../post/jgfs_atmos_post_f072 == complete + edit FHRGRP '072' + edit FHRLST 'f072' + edit FCSTHR '072' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f078 + trigger ../../post/jgfs_atmos_post_f078 == complete + edit FHRGRP '078' + edit FHRLST 'f078' + edit FCSTHR '078' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f084 + trigger ../../post/jgfs_atmos_post_f084 == complete + edit FHRGRP '084' + edit FHRLST 'f084' + edit FCSTHR '084' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f090 + trigger ../../post/jgfs_atmos_post_f090 == complete + edit FHRGRP '090' + edit FHRLST 'f090' + edit FCSTHR '090' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f096 + trigger ../../post/jgfs_atmos_post_f096 == complete + edit FHRGRP '096' + edit FHRLST 'f096' + edit FCSTHR '096' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f102 + trigger ../../post/jgfs_atmos_post_f102 == complete + edit FHRGRP '102' + edit FHRLST 'f102' + edit FCSTHR '102' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f108 + trigger ../../post/jgfs_atmos_post_f108 == complete + edit FHRGRP '108' + edit FHRLST 'f108' + edit FCSTHR '108' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f114 + trigger ../../post/jgfs_atmos_post_f114 == complete + edit FHRGRP '114' + edit FHRLST 'f114' + edit FCSTHR '114' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f120 + trigger ../../post/jgfs_atmos_post_f120 == complete + edit FHRGRP '120' + edit FHRLST 'f120' + edit FCSTHR '120' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f126 + trigger ../../post/jgfs_atmos_post_f126 == complete + edit FHRGRP '126' + edit FHRLST 'f126' + edit FCSTHR '126' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f132 + trigger ../../post/jgfs_atmos_post_f132 == complete + edit FHRGRP '132' + edit FHRLST 'f132' + edit FCSTHR '132' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f138 + trigger ../../post/jgfs_atmos_post_f138 == complete + edit FHRGRP '138' + edit FHRLST 'f138' + edit FCSTHR '138' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f144 + trigger ../../post/jgfs_atmos_post_f144 == complete + edit FHRGRP '144' + edit FHRLST 'f144' + edit FCSTHR '144' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f150 + trigger ../../post/jgfs_atmos_post_f150 == complete + edit FHRGRP '150' + edit FHRLST 'f150' + edit FCSTHR '150' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f156 + trigger ../../post/jgfs_atmos_post_f156 == complete + edit FHRGRP '156' + edit FHRLST 'f156' + edit FCSTHR '156' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f162 + trigger ../../post/jgfs_atmos_post_f162 == complete + edit FHRGRP '162' + edit FHRLST 'f162' + edit FCSTHR '162' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f168 + trigger ../../post/jgfs_atmos_post_f168 == complete + edit FHRGRP '168' + edit FHRLST 'f168' + edit FCSTHR '168' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f174 + trigger ../../post/jgfs_atmos_post_f174 == complete + edit FHRGRP '174' + edit FHRLST 'f174' + edit FCSTHR '174' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f180 + trigger ../../post/jgfs_atmos_post_f180 == complete + edit FHRGRP '180' + edit FHRLST 'f180' + edit FCSTHR '180' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f186 + trigger ../../post/jgfs_atmos_post_f186 == complete + edit FHRGRP '186' + edit FHRLST 'f186' + edit FCSTHR '186' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f192 + trigger ../../post/jgfs_atmos_post_f192 == complete + edit FHRGRP '192' + edit FHRLST 'f192' + edit FCSTHR '192' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f198 + trigger ../../post/jgfs_atmos_post_f198 == complete + edit FHRGRP '198' + edit FHRLST 'f198' + edit FCSTHR '198' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f204 + trigger ../../post/jgfs_atmos_post_f204 == complete + edit FHRGRP '204' + edit FHRLST 'f204' + edit FCSTHR '204' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f210 + trigger ../../post/jgfs_atmos_post_f210 == complete + edit FHRGRP '210' + edit FHRLST 'f210' + edit FCSTHR '210' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f216 + trigger ../../post/jgfs_atmos_post_f216 == complete + edit FHRGRP '216' + edit FHRLST 'f216' + edit FCSTHR '216' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f222 + trigger ../../post/jgfs_atmos_post_f222 == complete + edit FHRGRP '222' + edit FHRLST 'f222' + edit FCSTHR '222' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f228 + trigger ../../post/jgfs_atmos_post_f228 == complete + edit FHRGRP '228' + edit FHRLST 'f228' + edit FCSTHR '228' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f234 + trigger ../../post/jgfs_atmos_post_f234 == complete + edit FHRGRP '234' + edit FHRLST 'f234' + edit FCSTHR '234' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f240 + trigger ../../post/jgfs_atmos_post_f240 == complete + edit FHRGRP '240' + edit FHRLST 'f240' + edit FCSTHR '240' + edit TRDRUN 'YES' + endfamily + endfamily + family gempak + task jgfs_atmos_gempak + trigger ../../atmos/analysis/jgfs_atmos_analysis == complete + task jgfs_atmos_gempak_meta + trigger ../../atmos/analysis/jgfs_atmos_analysis == complete + task jgfs_atmos_gempak_ncdc_upapgif + trigger ./jgfs_atmos_gempak == active or ./jgfs_atmos_gempak == complete + task jgfs_atmos_npoess_pgrb2_0p5deg + trigger ../post/jgfs_atmos_post_manager:release_post180 + task jgfs_atmos_pgrb2_spec_gempak + trigger ./jgfs_atmos_npoess_pgrb2_0p5deg == complete + endfamily + family verf + task jgfs_atmos_vminmon + trigger ../analysis/jgfs_atmos_analysis == complete + endfamily + endfamily + family wave + family init + task jgfs_wave_init + trigger ../../atmos/obsproc/prep/jgfs_atmos_prep == complete + endfamily + family prep + task jgfs_wave_prep + trigger ../init/jgfs_wave_init == complete + endfamily + family post + task jgfs_wave_postsbs + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post000 + task jgfs_wave_postpnt + trigger ../../jgfs_forecast == complete + task jgfs_wave_post_bndpnt + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post180 + task jgfs_wave_prdgen_gridded + trigger ./jgfs_wave_postsbs == active or ./jgfs_wave_postsbs == complete + task jgfs_wave_prdgen_bulls + trigger ./jgfs_wave_postpnt == complete and ./jgfs_wave_postsbs == complete + endfamily + family gempak + task jgfs_wave_gempak + trigger ../post/jgfs_wave_postsbs == active or ../post/jgfs_wave_postsbs == complete + endfamily + endfamily + task jgfs_forecast + trigger ./atmos/analysis/jgfs_atmos_analysis:release_fcst and ./wave/prep/jgfs_wave_prep == complete + endfamily + family gdas + edit CYC '06' + edit PACKAGEHOME '/lfs/h2/emc/global/noscrub/Lin.Gan/git/feature-ops-wcoss2' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/gdas' + edit PROJ 'GFS' + edit PROJENVIR 'DEV' + edit NET 'gfs' + edit RUN 'gdas' + edit COM '/lfs/h2/emc/ptmp/Lin.Gan/ecfops/com' + edit QUEUE 'dev' + edit QUEUESHARED 'dev_shared' + edit QUEUESERV 'dev_transfer' + family atmos + family obsproc + family dump + task jgdas_atmos_tropcy_qc_reloc + time 05:45 + task jgdas_atmos_dump + event 1 release_sfcprep + time 05:50 + endfamily + family prep + task jgdas_atmos_emcsfc_sfc_prep + trigger ../dump/jgdas_atmos_dump:release_sfcprep + endfamily + endfamily + family analysis + task jgdas_atmos_analysis + trigger ../obsproc/prep/jgdas_atmos_prep == complete and ../obsproc/prep/jgdas_atmos_emcsfc_sfc_prep == complete + event 1 release_fcst + task jgdas_atmos_analysis_calc + trigger ./jgdas_atmos_analysis == complete + task jgdas_atmos_analysis_diag + trigger ./jgdas_atmos_analysis == complete + endfamily + family post + task jgdas_atmos_post_manager + trigger ../../jgdas_forecast == active + event 1 release_postanl + event 2 release_post000 + event 3 release_post001 + event 4 release_post002 + event 5 release_post003 + event 6 release_post004 + event 7 release_post005 + event 8 release_post006 + event 9 release_post007 + event 10 release_post008 + event 11 release_post009 + task jgdas_atmos_post_anl + trigger ./jgdas_atmos_post_manager:release_postanl + edit FHRGRP '000' + edit FHRLST 'anl' + edit HR 'anl' + edit FHR 'anl' + task jgdas_atmos_post_f000 + trigger ./jgdas_atmos_post_manager:release_post000 + edit FHR 'f000' + edit HR '000' + edit FHRGRP '001' + edit FHRLST 'f000' + task jgdas_atmos_post_f001 + trigger ./jgdas_atmos_post_manager:release_post001 + edit FHR 'f001' + edit HR '001' + edit FHRGRP '002' + edit FHRLST 'f001' + task jgdas_atmos_post_f002 + trigger ./jgdas_atmos_post_manager:release_post002 + edit FHR 'f002' + edit HR '002' + edit FHRGRP '003' + edit FHRLST 'f002' + task jgdas_atmos_post_f003 + trigger ./jgdas_atmos_post_manager:release_post003 + edit FHR 'f003' + edit HR '003' + edit FHRGRP '004' + edit FHRLST 'f003' + task jgdas_atmos_post_f004 + trigger ./jgdas_atmos_post_manager:release_post004 + edit FHR 'f004' + edit HR '004' + edit FHRGRP '005' + edit FHRLST 'f004' + task jgdas_atmos_post_f005 + trigger ./jgdas_atmos_post_manager:release_post005 + edit FHR 'f005' + edit HR '005' + edit FHRGRP '006' + edit FHRLST 'f005' + task jgdas_atmos_post_f006 + trigger ./jgdas_atmos_post_manager:release_post006 + edit FHR 'f006' + edit HR '006' + edit FHRGRP '007' + edit FHRLST 'f006' + task jgdas_atmos_post_f007 + trigger ./jgdas_atmos_post_manager:release_post007 + edit FHR 'f007' + edit HR '007' + edit FHRGRP '008' + edit FHRLST 'f007' + task jgdas_atmos_post_f008 + trigger ./jgdas_atmos_post_manager:release_post008 + edit FHR 'f008' + edit HR '008' + edit FHRGRP '009' + edit FHRLST 'f008' + task jgdas_atmos_post_f009 + trigger ./jgdas_atmos_post_manager:release_post009 + edit FHR 'f009' + edit HR '009' + edit FHRGRP '010' + edit FHRLST 'f009' + endfamily + family post_processing + task jgdas_atmos_chgres_forenkf + trigger ../../jgdas_forecast == complete and ../../../enkfgdas/forecast == complete + endfamily + family gempak + task jgdas_atmos_gempak + trigger ../../jgdas_forecast == complete + task jgdas_atmos_gempak_meta_ncdc + trigger ./jgdas_atmos_gempak == complete + endfamily + family verf + task jgdas_atmos_vminmon + trigger ../analysis/jgdas_atmos_analysis == complete + task jgdas_atmos_verfrad + trigger ../analysis/jgdas_atmos_analysis_diag == complete + task jgdas_atmos_verfozn + trigger ../analysis/jgdas_atmos_analysis_diag == complete + endfamily + endfamily + family wave + family init + task jgdas_wave_init + trigger ../../atmos/obsproc/prep/jgdas_atmos_prep == complete + endfamily + family prep + task jgdas_wave_prep + trigger ../init/jgdas_wave_init == complete + endfamily + family post + task jgdas_wave_postsbs + trigger ../../atmos/post/jgdas_atmos_post_manager:release_post000 + task jgdas_wave_postpnt + trigger ../../jgdas_forecast == complete + endfamily + endfamily + task jgdas_forecast + trigger ./atmos/analysis/jgdas_atmos_analysis:release_fcst and ./wave/prep/jgdas_wave_prep == complete + endfamily + family enkfgdas + edit CYC '06' + edit PACKAGEHOME '/lfs/h2/emc/global/noscrub/Lin.Gan/git/feature-ops-wcoss2' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas' + edit PROJ 'GFS' + edit PROJENVIR 'DEV' + edit NET 'gfs' + edit RUN 'gdas' + edit COM '/lfs/h2/emc/ptmp/Lin.Gan/ecfops/com' + edit QUEUE 'dev' + edit QUEUESHARED 'dev_shared' + edit QUEUESERV 'dev_transfer' + family analysis + family create + task jenkfgdas_select_obs + trigger ../../../gdas/atmos/obsproc/prep/jgdas_atmos_prep == complete and /prod00/enkfgdas/post == complete + task jenkfgdas_diag + trigger ./jenkfgdas_select_obs == complete + task jenkfgdas_update + trigger ./jenkfgdas_diag == complete + endfamily + family recenter + family ecen + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas/analysis/recenter/ecen' + trigger ../create/jenkfgdas_update == complete and ../../../gdas/atmos/analysis/jgdas_atmos_analysis_calc == complete and /prod00/gdas/atmos/post_processing/jgdas_atmos_chgres_forenkf == complete + family grp1 + edit FHRGRP '003' + task jenkfgdas_ecen + endfamily + family grp2 + edit FHRGRP '006' + task jenkfgdas_ecen + endfamily + family grp3 + edit FHRGRP '009' + task jenkfgdas_ecen + endfamily + endfamily + task jenkfgdas_sfc + trigger ../create/jenkfgdas_update == complete and ../../../gdas/atmos/analysis/jgdas_atmos_analysis_calc == complete + endfamily + endfamily + family forecast + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas/forecast' + trigger ./analysis/recenter/ecen == complete and ./analysis/recenter/jenkfgdas_sfc == complete + family grp1 + edit ENSGRP '01' + task jenkfgdas_fcst + endfamily + family grp2 + edit ENSGRP '02' + task jenkfgdas_fcst + endfamily + family grp3 + edit ENSGRP '03' + task jenkfgdas_fcst + endfamily + family grp4 + edit ENSGRP '04' + task jenkfgdas_fcst + endfamily + family grp5 + edit ENSGRP '05' + task jenkfgdas_fcst + endfamily + family grp6 + edit ENSGRP '06' + task jenkfgdas_fcst + endfamily + family grp7 + edit ENSGRP '07' + task jenkfgdas_fcst + endfamily + family grp8 + edit ENSGRP '08' + task jenkfgdas_fcst + endfamily + family grp9 + edit ENSGRP '09' + task jenkfgdas_fcst + endfamily + family grp10 + edit ENSGRP '10' + task jenkfgdas_fcst + endfamily + family grp11 + edit ENSGRP '11' + task jenkfgdas_fcst + endfamily + family grp12 + edit ENSGRP '12' + task jenkfgdas_fcst + endfamily + family grp13 + edit ENSGRP '13' + task jenkfgdas_fcst + endfamily + family grp14 + edit ENSGRP '14' + task jenkfgdas_fcst + endfamily + family grp15 + edit ENSGRP '15' + task jenkfgdas_fcst + endfamily + family grp16 + edit ENSGRP '16' + task jenkfgdas_fcst + endfamily + family grp17 + edit ENSGRP '17' + task jenkfgdas_fcst + endfamily + family grp18 + edit ENSGRP '18' + task jenkfgdas_fcst + endfamily + family grp19 + edit ENSGRP '19' + task jenkfgdas_fcst + endfamily + family grp20 + edit ENSGRP '20' + task jenkfgdas_fcst + endfamily + family grp21 + edit ENSGRP '21' + task jenkfgdas_fcst + endfamily + family grp22 + edit ENSGRP '22' + task jenkfgdas_fcst + endfamily + family grp23 + edit ENSGRP '23' + task jenkfgdas_fcst + endfamily + family grp24 + edit ENSGRP '24' + task jenkfgdas_fcst + endfamily + family grp25 + edit ENSGRP '25' + task jenkfgdas_fcst + endfamily + family grp26 + edit ENSGRP '26' + task jenkfgdas_fcst + endfamily + family grp27 + edit ENSGRP '27' + task jenkfgdas_fcst + endfamily + family grp28 + edit ENSGRP '28' + task jenkfgdas_fcst + endfamily + family grp29 + edit ENSGRP '29' + task jenkfgdas_fcst + endfamily + family grp30 + edit ENSGRP '30' + task jenkfgdas_fcst + endfamily + family grp31 + edit ENSGRP '31' + task jenkfgdas_fcst + endfamily + family grp32 + edit ENSGRP '32' + task jenkfgdas_fcst + endfamily + family grp33 + edit ENSGRP '33' + task jenkfgdas_fcst + endfamily + family grp34 + edit ENSGRP '34' + task jenkfgdas_fcst + endfamily + family grp35 + edit ENSGRP '35' + task jenkfgdas_fcst + endfamily + family grp36 + edit ENSGRP '36' + task jenkfgdas_fcst + endfamily + family grp37 + edit ENSGRP '37' + task jenkfgdas_fcst + endfamily + family grp38 + edit ENSGRP '38' + task jenkfgdas_fcst + endfamily + family grp39 + edit ENSGRP '39' + task jenkfgdas_fcst + endfamily + family grp40 + edit ENSGRP '40' + task jenkfgdas_fcst + endfamily + endfamily + family post + trigger ./forecast == complete + task jenkfgdas_post_f003 + edit FHMIN_EPOS '003' + edit FHMAX_EPOS '003' + edit FHOUT_EPOS '003' + task jenkfgdas_post_f004 + edit FHMIN_EPOS '004' + edit FHMAX_EPOS '004' + edit FHOUT_EPOS '004' + task jenkfgdas_post_f005 + edit FHMIN_EPOS '005' + edit FHMAX_EPOS '005' + edit FHOUT_EPOS '005' + task jenkfgdas_post_f006 + edit FHMIN_EPOS '006' + edit FHMAX_EPOS '006' + edit FHOUT_EPOS '006' + task jenkfgdas_post_f007 + edit FHMIN_EPOS '007' + edit FHMAX_EPOS '007' + edit FHOUT_EPOS '007' + task jenkfgdas_post_f008 + edit FHMIN_EPOS '008' + edit FHMAX_EPOS '008' + edit FHOUT_EPOS '008' + task jenkfgdas_post_f009 + edit FHMIN_EPOS '009' + edit FHMAX_EPOS '009' + edit FHOUT_EPOS '009' + endfamily #### epos + endfamily #### enkf +endsuite diff --git a/ecf/defs/prod12.def b/ecf/defs/prod12.def new file mode 100644 index 0000000000..05c3c1016e --- /dev/null +++ b/ecf/defs/prod12.def @@ -0,0 +1,2549 @@ +extern /prod06/gdas/jgdas_forecast +extern /prod06/gdas/atmos/post +extern /prod06/enkfgdas/post +extern /prod06/gdas/atmos/post_processing/jgdas_atmos_chgres_forenkf + +suite prod12 + repeat day 1 + edit ECF_TRIES '1' + edit CYC '12' + edit ENVIR 'prod' + edit PROJ 'GFS' + edit PROJENVIR 'DEV' + edit QUEUE 'dev' + edit QUEUESHARED 'dev_shared' + edit QUEUESERV 'dev_transfer' + edit ECF_INCLUDE '/lfs/h2/emc/global/noscrub/Lin.Gan/git/feature-ops-wcoss2/ecf/include' + edit MACHINE_SITE 'development' + + family gfs + edit CYC '12' + edit PACKAGEHOME '/lfs/h2/emc/global/noscrub/Lin.Gan/git/feature-ops-wcoss2' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/gfs' + edit PROJ 'GFS' + edit PROJENVIR 'DEV' + edit NET 'gfs' + edit RUN 'gfs' + edit COM '/lfs/h2/emc/ptmp/Lin.Gan/ecfops/com' + edit QUEUE 'dev' + edit QUEUESHARED 'dev_shared' + edit QUEUESERV 'dev_transfer' + family atmos + family obsproc + family dump + task jgfs_atmos_tropcy_qc_reloc + event 1 jtwc_bull_email + time 02:41 + endfamily + family prep + task jgfs_atmos_emcsfc_sfc_prep + trigger ../dump/jgfs_atmos_dump:release_sfcprep + endfamily + endfamily + family analysis + task jgfs_atmos_analysis + trigger ../obsproc/prep/jgfs_atmos_prep == complete and ../obsproc/prep/jgfs_atmos_emcsfc_sfc_prep == complete + event 1 release_fcst + task jgfs_atmos_analysis_calc + trigger ./jgfs_atmos_analysis == complete + endfamily + family post + task jgfs_atmos_post_manager + trigger ../analysis/jgfs_atmos_analysis == complete + event 1 release_postanl + event 2 release_post000 + event 3 release_post001 + event 4 release_post002 + event 5 release_post003 + event 6 release_post004 + event 7 release_post005 + event 8 release_post006 + event 9 release_post007 + event 10 release_post008 + event 11 release_post009 + event 12 release_post010 + event 13 release_post011 + event 14 release_post012 + event 15 release_post013 + event 16 release_post014 + event 17 release_post015 + event 18 release_post016 + event 19 release_post017 + event 20 release_post018 + event 21 release_post019 + event 22 release_post020 + event 23 release_post021 + event 24 release_post022 + event 25 release_post023 + event 26 release_post024 + event 27 release_post025 + event 28 release_post026 + event 29 release_post027 + event 30 release_post028 + event 31 release_post029 + event 32 release_post030 + event 33 release_post031 + event 34 release_post032 + event 35 release_post033 + event 36 release_post034 + event 37 release_post035 + event 38 release_post036 + event 39 release_post037 + event 40 release_post038 + event 41 release_post039 + event 42 release_post040 + event 43 release_post041 + event 44 release_post042 + event 45 release_post043 + event 46 release_post044 + event 47 release_post045 + event 48 release_post046 + event 49 release_post047 + event 50 release_post048 + event 51 release_post049 + event 52 release_post050 + event 53 release_post051 + event 54 release_post052 + event 55 release_post053 + event 56 release_post054 + event 57 release_post055 + event 58 release_post056 + event 59 release_post057 + event 60 release_post058 + event 61 release_post059 + event 62 release_post060 + event 63 release_post061 + event 64 release_post062 + event 65 release_post063 + event 66 release_post064 + event 67 release_post065 + event 68 release_post066 + event 69 release_post067 + event 70 release_post068 + event 71 release_post069 + event 72 release_post070 + event 73 release_post071 + event 74 release_post072 + event 75 release_post073 + event 76 release_post074 + event 77 release_post075 + event 78 release_post076 + event 79 release_post077 + event 80 release_post078 + event 81 release_post079 + event 82 release_post080 + event 83 release_post081 + event 84 release_post082 + event 85 release_post083 + event 86 release_post084 + event 87 release_post085 + event 88 release_post086 + event 89 release_post087 + event 90 release_post088 + event 91 release_post089 + event 92 release_post090 + event 93 release_post091 + event 94 release_post092 + event 95 release_post093 + event 96 release_post094 + event 97 release_post095 + event 98 release_post096 + event 99 release_post097 + event 100 release_post098 + event 101 release_post099 + event 102 release_post100 + event 103 release_post101 + event 104 release_post102 + event 105 release_post103 + event 106 release_post104 + event 107 release_post105 + event 108 release_post106 + event 109 release_post107 + event 110 release_post108 + event 111 release_post109 + event 112 release_post110 + event 113 release_post111 + event 114 release_post112 + event 115 release_post113 + event 116 release_post114 + event 117 release_post115 + event 118 release_post116 + event 119 release_post117 + event 120 release_post118 + event 121 release_post119 + event 122 release_post120 + event 123 release_post123 + event 124 release_post126 + event 125 release_post129 + event 126 release_post132 + event 127 release_post135 + event 128 release_post138 + event 129 release_post141 + event 130 release_post144 + event 131 release_post147 + event 132 release_post150 + event 133 release_post153 + event 134 release_post156 + event 135 release_post159 + event 136 release_post162 + event 137 release_post165 + event 138 release_post168 + event 139 release_post171 + event 140 release_post174 + event 141 release_post177 + event 142 release_post180 + event 143 release_post183 + event 144 release_post186 + event 145 release_post189 + event 146 release_post192 + event 147 release_post195 + event 148 release_post198 + event 149 release_post201 + event 150 release_post204 + event 151 release_post207 + event 152 release_post210 + event 153 release_post213 + event 154 release_post216 + event 155 release_post219 + event 156 release_post222 + event 157 release_post225 + event 158 release_post228 + event 159 release_post231 + event 160 release_post234 + event 161 release_post237 + event 162 release_post240 + event 163 release_post243 + event 164 release_post246 + event 165 release_post249 + event 166 release_post252 + event 167 release_post255 + event 168 release_post258 + event 169 release_post261 + event 170 release_post264 + event 171 release_post267 + event 172 release_post270 + event 173 release_post273 + event 174 release_post276 + event 175 release_post279 + event 176 release_post282 + event 177 release_post285 + event 178 release_post288 + event 179 release_post291 + event 180 release_post294 + event 181 release_post297 + event 182 release_post300 + event 183 release_post303 + event 184 release_post306 + event 185 release_post309 + event 186 release_post312 + event 187 release_post315 + event 188 release_post318 + event 189 release_post321 + event 190 release_post324 + event 191 release_post327 + event 192 release_post330 + event 193 release_post333 + event 194 release_post336 + event 195 release_post339 + event 196 release_post342 + event 197 release_post345 + event 198 release_post348 + event 199 release_post351 + event 200 release_post354 + event 201 release_post357 + event 202 release_post360 + event 203 release_post363 + event 204 release_post366 + event 205 release_post369 + event 206 release_post372 + event 207 release_post375 + event 208 release_post378 + event 209 release_post381 + event 210 release_post384 + task jgfs_atmos_post_anl + trigger ./jgfs_atmos_post_manager:release_postanl + edit FHRGRP '000' + edit FHRLST 'anl' + edit HR 'anl' + edit FHR 'anl' + task jgfs_atmos_post_f000 + trigger ./jgfs_atmos_post_manager:release_post000 + edit FHRGRP '001' + edit FHRLST 'f000' + edit FHR 'f000' + edit HR '000' + task jgfs_atmos_post_f001 + trigger ./jgfs_atmos_post_manager:release_post001 + edit FHRGRP '002' + edit FHRLST 'f001' + edit FHR 'f001' + edit HR '001' + task jgfs_atmos_post_f002 + trigger ./jgfs_atmos_post_manager:release_post002 + edit FHRGRP '003' + edit FHRLST 'f002' + edit FHR 'f002' + edit HR '002' + task jgfs_atmos_post_f003 + trigger ./jgfs_atmos_post_manager:release_post003 + edit FHRGRP '004' + edit FHRLST 'f003' + edit FHR 'f003' + edit HR '003' + task jgfs_atmos_post_f004 + trigger ./jgfs_atmos_post_manager:release_post004 + edit FHRGRP '005' + edit FHRLST 'f004' + edit FHR 'f004' + edit HR '004' + task jgfs_atmos_post_f005 + trigger ./jgfs_atmos_post_manager:release_post005 + edit FHRGRP '006' + edit FHRLST 'f005' + edit FHR 'f005' + edit HR '005' + task jgfs_atmos_post_f006 + trigger ./jgfs_atmos_post_manager:release_post006 + edit FHRGRP '007' + edit FHRLST 'f006' + edit FHR 'f006' + edit HR '006' + task jgfs_atmos_post_f007 + trigger ./jgfs_atmos_post_manager:release_post007 + edit FHRGRP '008' + edit FHRLST 'f007' + edit FHR 'f007' + edit HR '007' + task jgfs_atmos_post_f008 + trigger ./jgfs_atmos_post_manager:release_post008 + edit FHRGRP '009' + edit FHRLST 'f008' + edit FHR 'f008' + edit HR '008' + task jgfs_atmos_post_f009 + trigger ./jgfs_atmos_post_manager:release_post009 + edit FHRGRP '010' + edit FHRLST 'f009' + edit FHR 'f009' + edit HR '009' + task jgfs_atmos_post_f010 + trigger ./jgfs_atmos_post_manager:release_post010 + edit FHRGRP '011' + edit FHRLST 'f010' + edit FHR 'f010' + edit HR '010' + task jgfs_atmos_post_f011 + trigger ./jgfs_atmos_post_manager:release_post011 + edit FHRGRP '012' + edit FHRLST 'f011' + edit FHR 'f011' + edit HR '011' + task jgfs_atmos_post_f012 + trigger ./jgfs_atmos_post_manager:release_post012 + edit FHRGRP '013' + edit FHRLST 'f012' + edit FHR 'f012' + edit HR '012' + task jgfs_atmos_post_f013 + trigger ./jgfs_atmos_post_manager:release_post013 + edit FHRGRP '014' + edit FHRLST 'f013' + edit FHR 'f013' + edit HR '013' + task jgfs_atmos_post_f014 + trigger ./jgfs_atmos_post_manager:release_post014 + edit FHRGRP '015' + edit FHRLST 'f014' + edit FHR 'f014' + edit HR '014' + task jgfs_atmos_post_f015 + trigger ./jgfs_atmos_post_manager:release_post015 + edit FHRGRP '016' + edit FHRLST 'f015' + edit FHR 'f015' + edit HR '015' + task jgfs_atmos_post_f016 + trigger ./jgfs_atmos_post_manager:release_post016 + edit FHRGRP '017' + edit FHRLST 'f016' + edit FHR 'f016' + edit HR '016' + task jgfs_atmos_post_f017 + trigger ./jgfs_atmos_post_manager:release_post017 + edit FHRGRP '018' + edit FHRLST 'f017' + edit FHR 'f017' + edit HR '017' + task jgfs_atmos_post_f018 + trigger ./jgfs_atmos_post_manager:release_post018 + edit FHRGRP '019' + edit FHRLST 'f018' + edit FHR 'f018' + edit HR '018' + task jgfs_atmos_post_f019 + trigger ./jgfs_atmos_post_manager:release_post019 + edit FHRGRP '020' + edit FHRLST 'f019' + edit FHR 'f019' + edit HR '019' + task jgfs_atmos_post_f020 + trigger ./jgfs_atmos_post_manager:release_post020 + edit FHRGRP '021' + edit FHRLST 'f020' + edit FHR 'f020' + edit HR '020' + task jgfs_atmos_post_f021 + trigger ./jgfs_atmos_post_manager:release_post021 + edit FHRGRP '022' + edit FHRLST 'f021' + edit FHR 'f021' + edit HR '021' + task jgfs_atmos_post_f022 + trigger ./jgfs_atmos_post_manager:release_post022 + edit FHRGRP '023' + edit FHRLST 'f022' + edit FHR 'f022' + edit HR '022' + task jgfs_atmos_post_f023 + trigger ./jgfs_atmos_post_manager:release_post023 + edit FHRGRP '024' + edit FHRLST 'f023' + edit FHR 'f023' + edit HR '023' + task jgfs_atmos_post_f024 + trigger ./jgfs_atmos_post_manager:release_post024 + edit FHRGRP '025' + edit FHRLST 'f024' + edit FHR 'f024' + edit HR '024' + task jgfs_atmos_post_f025 + trigger ./jgfs_atmos_post_manager:release_post025 + edit FHRGRP '026' + edit FHRLST 'f025' + edit FHR 'f025' + edit HR '025' + task jgfs_atmos_post_f026 + trigger ./jgfs_atmos_post_manager:release_post026 + edit FHRGRP '027' + edit FHRLST 'f026' + edit FHR 'f026' + edit HR '026' + task jgfs_atmos_post_f027 + trigger ./jgfs_atmos_post_manager:release_post027 + edit FHRGRP '028' + edit FHRLST 'f027' + edit FHR 'f027' + edit HR '027' + task jgfs_atmos_post_f028 + trigger ./jgfs_atmos_post_manager:release_post028 + edit FHRGRP '029' + edit FHRLST 'f028' + edit FHR 'f028' + edit HR '028' + task jgfs_atmos_post_f029 + trigger ./jgfs_atmos_post_manager:release_post029 + edit FHRGRP '030' + edit FHRLST 'f029' + edit FHR 'f029' + edit HR '029' + task jgfs_atmos_post_f030 + trigger ./jgfs_atmos_post_manager:release_post030 + edit FHRGRP '031' + edit FHRLST 'f030' + edit FHR 'f030' + edit HR '030' + task jgfs_atmos_post_f031 + trigger ./jgfs_atmos_post_manager:release_post031 + edit FHRGRP '032' + edit FHRLST 'f031' + edit FHR 'f031' + edit HR '031' + task jgfs_atmos_post_f032 + trigger ./jgfs_atmos_post_manager:release_post032 + edit FHRGRP '033' + edit FHRLST 'f032' + edit FHR 'f032' + edit HR '032' + task jgfs_atmos_post_f033 + trigger ./jgfs_atmos_post_manager:release_post033 + edit FHRGRP '034' + edit FHRLST 'f033' + edit FHR 'f033' + edit HR '033' + task jgfs_atmos_post_f034 + trigger ./jgfs_atmos_post_manager:release_post034 + edit FHRGRP '035' + edit FHRLST 'f034' + edit FHR 'f034' + edit HR '034' + task jgfs_atmos_post_f035 + trigger ./jgfs_atmos_post_manager:release_post035 + edit FHRGRP '036' + edit FHRLST 'f035' + edit FHR 'f035' + edit HR '035' + task jgfs_atmos_post_f036 + trigger ./jgfs_atmos_post_manager:release_post036 + edit FHRGRP '037' + edit FHRLST 'f036' + edit FHR 'f036' + edit HR '036' + task jgfs_atmos_post_f037 + trigger ./jgfs_atmos_post_manager:release_post037 + edit FHRGRP '038' + edit FHRLST 'f037' + edit FHR 'f037' + edit HR '037' + task jgfs_atmos_post_f038 + trigger ./jgfs_atmos_post_manager:release_post038 + edit FHRGRP '039' + edit FHRLST 'f038' + edit FHR 'f038' + edit HR '038' + task jgfs_atmos_post_f039 + trigger ./jgfs_atmos_post_manager:release_post039 + edit FHRGRP '040' + edit FHRLST 'f039' + edit FHR 'f039' + edit HR '039' + task jgfs_atmos_post_f040 + trigger ./jgfs_atmos_post_manager:release_post040 + edit FHRGRP '041' + edit FHRLST 'f040' + edit FHR 'f040' + edit HR '040' + task jgfs_atmos_post_f041 + trigger ./jgfs_atmos_post_manager:release_post041 + edit FHRGRP '042' + edit FHRLST 'f041' + edit FHR 'f041' + edit HR '041' + task jgfs_atmos_post_f042 + trigger ./jgfs_atmos_post_manager:release_post042 + edit FHRGRP '043' + edit FHRLST 'f042' + edit FHR 'f042' + edit HR '042' + task jgfs_atmos_post_f043 + trigger ./jgfs_atmos_post_manager:release_post043 + edit FHRGRP '044' + edit FHRLST 'f043' + edit FHR 'f043' + edit HR '043' + task jgfs_atmos_post_f044 + trigger ./jgfs_atmos_post_manager:release_post044 + edit FHRGRP '045' + edit FHRLST 'f044' + edit FHR 'f044' + edit HR '044' + task jgfs_atmos_post_f045 + trigger ./jgfs_atmos_post_manager:release_post045 + edit FHRGRP '046' + edit FHRLST 'f045' + edit FHR 'f045' + edit HR '045' + task jgfs_atmos_post_f046 + trigger ./jgfs_atmos_post_manager:release_post046 + edit FHRGRP '047' + edit FHRLST 'f046' + edit FHR 'f046' + edit HR '046' + task jgfs_atmos_post_f047 + trigger ./jgfs_atmos_post_manager:release_post047 + edit FHRGRP '048' + edit FHRLST 'f047' + edit FHR 'f047' + edit HR '047' + task jgfs_atmos_post_f048 + trigger ./jgfs_atmos_post_manager:release_post048 + edit FHRGRP '049' + edit FHRLST 'f048' + edit FHR 'f048' + edit HR '048' + task jgfs_atmos_post_f049 + trigger ./jgfs_atmos_post_manager:release_post049 + edit FHRGRP '050' + edit FHRLST 'f049' + edit FHR 'f049' + edit HR '049' + task jgfs_atmos_post_f050 + trigger ./jgfs_atmos_post_manager:release_post050 + edit FHRGRP '051' + edit FHRLST 'f050' + edit FHR 'f050' + edit HR '050' + task jgfs_atmos_post_f051 + trigger ./jgfs_atmos_post_manager:release_post051 + edit FHRGRP '052' + edit FHRLST 'f051' + edit FHR 'f051' + edit HR '051' + task jgfs_atmos_post_f052 + trigger ./jgfs_atmos_post_manager:release_post052 + edit FHRGRP '053' + edit FHRLST 'f052' + edit FHR 'f052' + edit HR '052' + task jgfs_atmos_post_f053 + trigger ./jgfs_atmos_post_manager:release_post053 + edit FHRGRP '054' + edit FHRLST 'f053' + edit FHR 'f053' + edit HR '053' + task jgfs_atmos_post_f054 + trigger ./jgfs_atmos_post_manager:release_post054 + edit FHRGRP '055' + edit FHRLST 'f054' + edit FHR 'f054' + edit HR '054' + task jgfs_atmos_post_f055 + trigger ./jgfs_atmos_post_manager:release_post055 + edit FHRGRP '056' + edit FHRLST 'f055' + edit FHR 'f055' + edit HR '055' + task jgfs_atmos_post_f056 + trigger ./jgfs_atmos_post_manager:release_post056 + edit FHRGRP '057' + edit FHRLST 'f056' + edit FHR 'f056' + edit HR '056' + task jgfs_atmos_post_f057 + trigger ./jgfs_atmos_post_manager:release_post057 + edit FHRGRP '058' + edit FHRLST 'f057' + edit FHR 'f057' + edit HR '057' + task jgfs_atmos_post_f058 + trigger ./jgfs_atmos_post_manager:release_post058 + edit FHRGRP '059' + edit FHRLST 'f058' + edit FHR 'f058' + edit HR '058' + task jgfs_atmos_post_f059 + trigger ./jgfs_atmos_post_manager:release_post059 + edit FHRGRP '060' + edit FHRLST 'f059' + edit FHR 'f059' + edit HR '059' + task jgfs_atmos_post_f060 + trigger ./jgfs_atmos_post_manager:release_post060 + edit FHRGRP '061' + edit FHRLST 'f060' + edit FHR 'f060' + edit HR '060' + task jgfs_atmos_post_f061 + trigger ./jgfs_atmos_post_manager:release_post061 + edit FHRGRP '062' + edit FHRLST 'f061' + edit FHR 'f061' + edit HR '061' + task jgfs_atmos_post_f062 + trigger ./jgfs_atmos_post_manager:release_post062 + edit FHRGRP '063' + edit FHRLST 'f062' + edit FHR 'f062' + edit HR '062' + task jgfs_atmos_post_f063 + trigger ./jgfs_atmos_post_manager:release_post063 + edit FHRGRP '064' + edit FHRLST 'f063' + edit FHR 'f063' + edit HR '063' + task jgfs_atmos_post_f064 + trigger ./jgfs_atmos_post_manager:release_post064 + edit FHRGRP '065' + edit FHRLST 'f064' + edit FHR 'f064' + edit HR '064' + task jgfs_atmos_post_f065 + trigger ./jgfs_atmos_post_manager:release_post065 + edit FHRGRP '066' + edit FHRLST 'f065' + edit FHR 'f065' + edit HR '065' + task jgfs_atmos_post_f066 + trigger ./jgfs_atmos_post_manager:release_post066 + edit FHRGRP '067' + edit FHRLST 'f066' + edit FHR 'f066' + edit HR '066' + task jgfs_atmos_post_f067 + trigger ./jgfs_atmos_post_manager:release_post067 + edit FHRGRP '068' + edit FHRLST 'f067' + edit FHR 'f067' + edit HR '067' + task jgfs_atmos_post_f068 + trigger ./jgfs_atmos_post_manager:release_post068 + edit FHRGRP '069' + edit FHRLST 'f068' + edit FHR 'f068' + edit HR '068' + task jgfs_atmos_post_f069 + trigger ./jgfs_atmos_post_manager:release_post069 + edit FHRGRP '070' + edit FHRLST 'f069' + edit FHR 'f069' + edit HR '069' + task jgfs_atmos_post_f070 + trigger ./jgfs_atmos_post_manager:release_post070 + edit FHRGRP '071' + edit FHRLST 'f070' + edit FHR 'f070' + edit HR '070' + task jgfs_atmos_post_f071 + trigger ./jgfs_atmos_post_manager:release_post071 + edit FHRGRP '072' + edit FHRLST 'f071' + edit FHR 'f071' + edit HR '071' + task jgfs_atmos_post_f072 + trigger ./jgfs_atmos_post_manager:release_post072 + edit FHRGRP '073' + edit FHRLST 'f072' + edit FHR 'f072' + edit HR '072' + task jgfs_atmos_post_f073 + trigger ./jgfs_atmos_post_manager:release_post073 + edit FHRGRP '074' + edit FHRLST 'f073' + edit FHR 'f073' + edit HR '073' + task jgfs_atmos_post_f074 + trigger ./jgfs_atmos_post_manager:release_post074 + edit FHRGRP '075' + edit FHRLST 'f074' + edit FHR 'f074' + edit HR '074' + task jgfs_atmos_post_f075 + trigger ./jgfs_atmos_post_manager:release_post075 + edit FHRGRP '076' + edit FHRLST 'f075' + edit FHR 'f075' + edit HR '075' + task jgfs_atmos_post_f076 + trigger ./jgfs_atmos_post_manager:release_post076 + edit FHRGRP '077' + edit FHRLST 'f076' + edit FHR 'f076' + edit HR '076' + task jgfs_atmos_post_f077 + trigger ./jgfs_atmos_post_manager:release_post077 + edit FHRGRP '078' + edit FHRLST 'f077' + edit FHR 'f077' + edit HR '077' + task jgfs_atmos_post_f078 + trigger ./jgfs_atmos_post_manager:release_post078 + edit FHRGRP '079' + edit FHRLST 'f078' + edit FHR 'f078' + edit HR '078' + task jgfs_atmos_post_f079 + trigger ./jgfs_atmos_post_manager:release_post079 + edit FHRGRP '080' + edit FHRLST 'f079' + edit FHR 'f079' + edit HR '079' + task jgfs_atmos_post_f080 + trigger ./jgfs_atmos_post_manager:release_post080 + edit FHRGRP '081' + edit FHRLST 'f080' + edit FHR 'f080' + edit HR '080' + task jgfs_atmos_post_f081 + trigger ./jgfs_atmos_post_manager:release_post081 + edit FHRGRP '082' + edit FHRLST 'f081' + edit FHR 'f081' + edit HR '081' + task jgfs_atmos_post_f082 + trigger ./jgfs_atmos_post_manager:release_post082 + edit FHRGRP '083' + edit FHRLST 'f082' + edit FHR 'f082' + edit HR '082' + task jgfs_atmos_post_f083 + trigger ./jgfs_atmos_post_manager:release_post083 + edit FHRGRP '084' + edit FHRLST 'f083' + edit FHR 'f083' + edit HR '083' + task jgfs_atmos_post_f084 + trigger ./jgfs_atmos_post_manager:release_post084 + edit FHRGRP '085' + edit FHRLST 'f084' + edit FHR 'f084' + edit HR '084' + task jgfs_atmos_post_f085 + trigger ./jgfs_atmos_post_manager:release_post085 + edit FHRGRP '086' + edit FHRLST 'f085' + edit FHR 'f085' + edit HR '085' + task jgfs_atmos_post_f086 + trigger ./jgfs_atmos_post_manager:release_post086 + edit FHRGRP '087' + edit FHRLST 'f086' + edit FHR 'f086' + edit HR '086' + task jgfs_atmos_post_f087 + trigger ./jgfs_atmos_post_manager:release_post087 + edit FHRGRP '088' + edit FHRLST 'f087' + edit FHR 'f087' + edit HR '087' + task jgfs_atmos_post_f088 + trigger ./jgfs_atmos_post_manager:release_post088 + edit FHRGRP '089' + edit FHRLST 'f088' + edit FHR 'f088' + edit HR '088' + task jgfs_atmos_post_f089 + trigger ./jgfs_atmos_post_manager:release_post089 + edit FHRGRP '090' + edit FHRLST 'f089' + edit FHR 'f089' + edit HR '089' + task jgfs_atmos_post_f090 + trigger ./jgfs_atmos_post_manager:release_post090 + edit FHRGRP '091' + edit FHRLST 'f090' + edit FHR 'f090' + edit HR '090' + task jgfs_atmos_post_f091 + trigger ./jgfs_atmos_post_manager:release_post091 + edit FHRGRP '092' + edit FHRLST 'f091' + edit FHR 'f091' + edit HR '091' + task jgfs_atmos_post_f092 + trigger ./jgfs_atmos_post_manager:release_post092 + edit FHRGRP '093' + edit FHRLST 'f092' + edit FHR 'f092' + edit HR '092' + task jgfs_atmos_post_f093 + trigger ./jgfs_atmos_post_manager:release_post093 + edit FHRGRP '094' + edit FHRLST 'f093' + edit FHR 'f093' + edit HR '093' + task jgfs_atmos_post_f094 + trigger ./jgfs_atmos_post_manager:release_post094 + edit FHRGRP '095' + edit FHRLST 'f094' + edit FHR 'f094' + edit HR '094' + task jgfs_atmos_post_f095 + trigger ./jgfs_atmos_post_manager:release_post095 + edit FHRGRP '096' + edit FHRLST 'f095' + edit FHR 'f095' + edit HR '095' + task jgfs_atmos_post_f096 + trigger ./jgfs_atmos_post_manager:release_post096 + edit FHRGRP '097' + edit FHRLST 'f096' + edit FHR 'f096' + edit HR '096' + task jgfs_atmos_post_f097 + trigger ./jgfs_atmos_post_manager:release_post097 + edit FHRGRP '098' + edit FHRLST 'f097' + edit FHR 'f097' + edit HR '097' + task jgfs_atmos_post_f098 + trigger ./jgfs_atmos_post_manager:release_post098 + edit FHRGRP '099' + edit FHRLST 'f098' + edit FHR 'f098' + edit HR '098' + task jgfs_atmos_post_f099 + trigger ./jgfs_atmos_post_manager:release_post099 + edit FHRGRP '100' + edit FHRLST 'f099' + edit FHR 'f099' + edit HR '099' + task jgfs_atmos_post_f100 + trigger ./jgfs_atmos_post_manager:release_post100 + edit FHRGRP '101' + edit FHRLST 'f100' + edit FHR 'f100' + edit HR '100' + task jgfs_atmos_post_f101 + trigger ./jgfs_atmos_post_manager:release_post101 + edit FHRGRP '102' + edit FHRLST 'f101' + edit FHR 'f101' + edit HR '101' + task jgfs_atmos_post_f102 + trigger ./jgfs_atmos_post_manager:release_post102 + edit FHRGRP '103' + edit FHRLST 'f102' + edit FHR 'f102' + edit HR '102' + task jgfs_atmos_post_f103 + trigger ./jgfs_atmos_post_manager:release_post103 + edit FHRGRP '104' + edit FHRLST 'f103' + edit FHR 'f103' + edit HR '103' + task jgfs_atmos_post_f104 + trigger ./jgfs_atmos_post_manager:release_post104 + edit FHRGRP '105' + edit FHRLST 'f104' + edit FHR 'f104' + edit HR '104' + task jgfs_atmos_post_f105 + trigger ./jgfs_atmos_post_manager:release_post105 + edit FHRGRP '106' + edit FHRLST 'f105' + edit FHR 'f105' + edit HR '105' + task jgfs_atmos_post_f106 + trigger ./jgfs_atmos_post_manager:release_post106 + edit FHRGRP '107' + edit FHRLST 'f106' + edit FHR 'f106' + edit HR '106' + task jgfs_atmos_post_f107 + trigger ./jgfs_atmos_post_manager:release_post107 + edit FHRGRP '108' + edit FHRLST 'f107' + edit FHR 'f107' + edit HR '107' + task jgfs_atmos_post_f108 + trigger ./jgfs_atmos_post_manager:release_post108 + edit FHRGRP '109' + edit FHRLST 'f108' + edit FHR 'f108' + edit HR '108' + task jgfs_atmos_post_f109 + trigger ./jgfs_atmos_post_manager:release_post109 + edit FHRGRP '110' + edit FHRLST 'f109' + edit FHR 'f109' + edit HR '109' + task jgfs_atmos_post_f110 + trigger ./jgfs_atmos_post_manager:release_post110 + edit FHRGRP '111' + edit FHRLST 'f110' + edit FHR 'f110' + edit HR '110' + task jgfs_atmos_post_f111 + trigger ./jgfs_atmos_post_manager:release_post111 + edit FHRGRP '112' + edit FHRLST 'f111' + edit FHR 'f111' + edit HR '111' + task jgfs_atmos_post_f112 + trigger ./jgfs_atmos_post_manager:release_post112 + edit FHRGRP '113' + edit FHRLST 'f112' + edit FHR 'f112' + edit HR '112' + task jgfs_atmos_post_f113 + trigger ./jgfs_atmos_post_manager:release_post113 + edit FHRGRP '114' + edit FHRLST 'f113' + edit FHR 'f113' + edit HR '113' + task jgfs_atmos_post_f114 + trigger ./jgfs_atmos_post_manager:release_post114 + edit FHRGRP '115' + edit FHRLST 'f114' + edit FHR 'f114' + edit HR '114' + task jgfs_atmos_post_f115 + trigger ./jgfs_atmos_post_manager:release_post115 + edit FHRGRP '116' + edit FHRLST 'f115' + edit FHR 'f115' + edit HR '115' + task jgfs_atmos_post_f116 + trigger ./jgfs_atmos_post_manager:release_post116 + edit FHRGRP '117' + edit FHRLST 'f116' + edit FHR 'f116' + edit HR '116' + task jgfs_atmos_post_f117 + trigger ./jgfs_atmos_post_manager:release_post117 + edit FHRGRP '118' + edit FHRLST 'f117' + edit FHR 'f117' + edit HR '117' + task jgfs_atmos_post_f118 + trigger ./jgfs_atmos_post_manager:release_post118 + edit FHRGRP '119' + edit FHRLST 'f118' + edit FHR 'f118' + edit HR '118' + task jgfs_atmos_post_f119 + trigger ./jgfs_atmos_post_manager:release_post119 + edit FHRGRP '120' + edit FHRLST 'f119' + edit FHR 'f119' + edit HR '119' + task jgfs_atmos_post_f120 + trigger ./jgfs_atmos_post_manager:release_post120 + edit FHRGRP '121' + edit FHRLST 'f120' + edit FHR 'f120' + edit HR '120' + task jgfs_atmos_post_f123 + trigger ./jgfs_atmos_post_manager:release_post123 + edit FHRGRP '122' + edit FHRLST 'f123' + edit FHR 'f123' + edit HR '123' + task jgfs_atmos_post_f126 + trigger ./jgfs_atmos_post_manager:release_post126 + edit FHRGRP '123' + edit FHRLST 'f126' + edit FHR 'f126' + edit HR '126' + task jgfs_atmos_post_f129 + trigger ./jgfs_atmos_post_manager:release_post129 + edit FHRGRP '124' + edit FHRLST 'f129' + edit FHR 'f129' + edit HR '129' + task jgfs_atmos_post_f132 + trigger ./jgfs_atmos_post_manager:release_post132 + edit FHRGRP '125' + edit FHRLST 'f132' + edit FHR 'f132' + edit HR '132' + task jgfs_atmos_post_f135 + trigger ./jgfs_atmos_post_manager:release_post135 + edit FHRGRP '126' + edit FHRLST 'f135' + edit FHR 'f135' + edit HR '135' + task jgfs_atmos_post_f138 + trigger ./jgfs_atmos_post_manager:release_post138 + edit FHRGRP '127' + edit FHRLST 'f138' + edit FHR 'f138' + edit HR '138' + task jgfs_atmos_post_f141 + trigger ./jgfs_atmos_post_manager:release_post141 + edit FHRGRP '128' + edit FHRLST 'f141' + edit FHR 'f141' + edit HR '141' + task jgfs_atmos_post_f144 + trigger ./jgfs_atmos_post_manager:release_post144 + edit FHRGRP '129' + edit FHRLST 'f144' + edit FHR 'f144' + edit HR '144' + task jgfs_atmos_post_f147 + trigger ./jgfs_atmos_post_manager:release_post147 + edit FHRGRP '130' + edit FHRLST 'f147' + edit FHR 'f147' + edit HR '147' + task jgfs_atmos_post_f150 + trigger ./jgfs_atmos_post_manager:release_post150 + edit FHRGRP '131' + edit FHRLST 'f150' + edit FHR 'f150' + edit HR '150' + task jgfs_atmos_post_f153 + trigger ./jgfs_atmos_post_manager:release_post153 + edit FHRGRP '132' + edit FHRLST 'f153' + edit FHR 'f153' + edit HR '153' + task jgfs_atmos_post_f156 + trigger ./jgfs_atmos_post_manager:release_post156 + edit FHRGRP '133' + edit FHRLST 'f156' + edit FHR 'f156' + edit HR '156' + task jgfs_atmos_post_f159 + trigger ./jgfs_atmos_post_manager:release_post159 + edit FHRGRP '134' + edit FHRLST 'f159' + edit FHR 'f159' + edit HR '159' + task jgfs_atmos_post_f162 + trigger ./jgfs_atmos_post_manager:release_post162 + edit FHRGRP '135' + edit FHRLST 'f162' + edit FHR 'f162' + edit HR '162' + task jgfs_atmos_post_f165 + trigger ./jgfs_atmos_post_manager:release_post165 + edit FHRGRP '136' + edit FHRLST 'f165' + edit FHR 'f165' + edit HR '165' + task jgfs_atmos_post_f168 + trigger ./jgfs_atmos_post_manager:release_post168 + edit FHRGRP '137' + edit FHRLST 'f168' + edit FHR 'f168' + edit HR '168' + task jgfs_atmos_post_f171 + trigger ./jgfs_atmos_post_manager:release_post171 + edit FHRGRP '138' + edit FHRLST 'f171' + edit FHR 'f171' + edit HR '171' + task jgfs_atmos_post_f174 + trigger ./jgfs_atmos_post_manager:release_post174 + edit FHRGRP '139' + edit FHRLST 'f174' + edit FHR 'f174' + edit HR '174' + task jgfs_atmos_post_f177 + trigger ./jgfs_atmos_post_manager:release_post177 + edit FHRGRP '140' + edit FHRLST 'f177' + edit FHR 'f177' + edit HR '177' + task jgfs_atmos_post_f180 + trigger ./jgfs_atmos_post_manager:release_post180 + edit FHRGRP '141' + edit FHRLST 'f180' + edit FHR 'f180' + edit HR '180' + task jgfs_atmos_post_f183 + trigger ./jgfs_atmos_post_manager:release_post183 + edit FHRGRP '142' + edit FHRLST 'f183' + edit FHR 'f183' + edit HR '183' + task jgfs_atmos_post_f186 + trigger ./jgfs_atmos_post_manager:release_post186 + edit FHRGRP '143' + edit FHRLST 'f186' + edit FHR 'f186' + edit HR '186' + task jgfs_atmos_post_f189 + trigger ./jgfs_atmos_post_manager:release_post189 + edit FHRGRP '144' + edit FHRLST 'f189' + edit FHR 'f189' + edit HR '189' + task jgfs_atmos_post_f192 + trigger ./jgfs_atmos_post_manager:release_post192 + edit FHRGRP '145' + edit FHRLST 'f192' + edit FHR 'f192' + edit HR '192' + task jgfs_atmos_post_f195 + trigger ./jgfs_atmos_post_manager:release_post195 + edit FHRGRP '146' + edit FHRLST 'f195' + edit FHR 'f195' + edit HR '195' + task jgfs_atmos_post_f198 + trigger ./jgfs_atmos_post_manager:release_post198 + edit FHRGRP '147' + edit FHRLST 'f198' + edit FHR 'f198' + edit HR '198' + task jgfs_atmos_post_f201 + trigger ./jgfs_atmos_post_manager:release_post201 + edit FHRGRP '148' + edit FHRLST 'f201' + edit FHR 'f201' + edit HR '201' + task jgfs_atmos_post_f204 + trigger ./jgfs_atmos_post_manager:release_post204 + edit FHRGRP '149' + edit FHRLST 'f204' + edit FHR 'f204' + edit HR '204' + task jgfs_atmos_post_f207 + trigger ./jgfs_atmos_post_manager:release_post207 + edit FHRGRP '150' + edit FHRLST 'f207' + edit FHR 'f207' + edit HR '207' + task jgfs_atmos_post_f210 + trigger ./jgfs_atmos_post_manager:release_post210 + edit FHRGRP '151' + edit FHRLST 'f210' + edit FHR 'f210' + edit HR '210' + task jgfs_atmos_post_f213 + trigger ./jgfs_atmos_post_manager:release_post213 + edit FHRGRP '152' + edit FHRLST 'f213' + edit FHR 'f213' + edit HR '213' + task jgfs_atmos_post_f216 + trigger ./jgfs_atmos_post_manager:release_post216 + edit FHRGRP '153' + edit FHRLST 'f216' + edit FHR 'f216' + edit HR '216' + task jgfs_atmos_post_f219 + trigger ./jgfs_atmos_post_manager:release_post219 + edit FHRGRP '154' + edit FHRLST 'f219' + edit FHR 'f219' + edit HR '219' + task jgfs_atmos_post_f222 + trigger ./jgfs_atmos_post_manager:release_post222 + edit FHRGRP '155' + edit FHRLST 'f222' + edit FHR 'f222' + edit HR '222' + task jgfs_atmos_post_f225 + trigger ./jgfs_atmos_post_manager:release_post225 + edit FHRGRP '156' + edit FHRLST 'f225' + edit FHR 'f225' + edit HR '225' + task jgfs_atmos_post_f228 + trigger ./jgfs_atmos_post_manager:release_post228 + edit FHRGRP '157' + edit FHRLST 'f228' + edit FHR 'f228' + edit HR '228' + task jgfs_atmos_post_f231 + trigger ./jgfs_atmos_post_manager:release_post231 + edit FHRGRP '158' + edit FHRLST 'f231' + edit FHR 'f231' + edit HR '231' + task jgfs_atmos_post_f234 + trigger ./jgfs_atmos_post_manager:release_post234 + edit FHRGRP '159' + edit FHRLST 'f234' + edit FHR 'f234' + edit HR '234' + task jgfs_atmos_post_f237 + trigger ./jgfs_atmos_post_manager:release_post237 + edit FHRGRP '160' + edit FHRLST 'f237' + edit FHR 'f237' + edit HR '237' + task jgfs_atmos_post_f240 + trigger ./jgfs_atmos_post_manager:release_post240 + edit FHRGRP '161' + edit FHRLST 'f240' + edit FHR 'f240' + edit HR '240' + task jgfs_atmos_post_f243 + trigger ./jgfs_atmos_post_manager:release_post243 + edit FHRGRP '162' + edit FHRLST 'f243' + edit FHR 'f243' + edit HR '243' + task jgfs_atmos_post_f246 + trigger ./jgfs_atmos_post_manager:release_post246 + edit FHRGRP '163' + edit FHRLST 'f246' + edit FHR 'f246' + edit HR '246' + task jgfs_atmos_post_f249 + trigger ./jgfs_atmos_post_manager:release_post249 + edit FHRGRP '164' + edit FHRLST 'f249' + edit FHR 'f249' + edit HR '249' + task jgfs_atmos_post_f252 + trigger ./jgfs_atmos_post_manager:release_post252 + edit FHRGRP '165' + edit FHRLST 'f252' + edit FHR 'f252' + edit HR '252' + task jgfs_atmos_post_f255 + trigger ./jgfs_atmos_post_manager:release_post255 + edit FHRGRP '166' + edit FHRLST 'f255' + edit FHR 'f255' + edit HR '255' + task jgfs_atmos_post_f258 + trigger ./jgfs_atmos_post_manager:release_post258 + edit FHRGRP '167' + edit FHRLST 'f258' + edit FHR 'f258' + edit HR '258' + task jgfs_atmos_post_f261 + trigger ./jgfs_atmos_post_manager:release_post261 + edit FHRGRP '168' + edit FHRLST 'f261' + edit FHR 'f261' + edit HR '261' + task jgfs_atmos_post_f264 + trigger ./jgfs_atmos_post_manager:release_post264 + edit FHRGRP '169' + edit FHRLST 'f264' + edit FHR 'f264' + edit HR '264' + task jgfs_atmos_post_f267 + trigger ./jgfs_atmos_post_manager:release_post267 + edit FHRGRP '170' + edit FHRLST 'f267' + edit FHR 'f267' + edit HR '267' + task jgfs_atmos_post_f270 + trigger ./jgfs_atmos_post_manager:release_post270 + edit FHRGRP '171' + edit FHRLST 'f270' + edit FHR 'f270' + edit HR '270' + task jgfs_atmos_post_f273 + trigger ./jgfs_atmos_post_manager:release_post273 + edit FHRGRP '172' + edit FHRLST 'f273' + edit FHR 'f273' + edit HR '273' + task jgfs_atmos_post_f276 + trigger ./jgfs_atmos_post_manager:release_post276 + edit FHRGRP '173' + edit FHRLST 'f276' + edit FHR 'f276' + edit HR '276' + task jgfs_atmos_post_f279 + trigger ./jgfs_atmos_post_manager:release_post279 + edit FHRGRP '174' + edit FHRLST 'f279' + edit FHR 'f279' + edit HR '279' + task jgfs_atmos_post_f282 + trigger ./jgfs_atmos_post_manager:release_post282 + edit FHRGRP '175' + edit FHRLST 'f282' + edit FHR 'f282' + edit HR '282' + task jgfs_atmos_post_f285 + trigger ./jgfs_atmos_post_manager:release_post285 + edit FHRGRP '176' + edit FHRLST 'f285' + edit FHR 'f285' + edit HR '285' + task jgfs_atmos_post_f288 + trigger ./jgfs_atmos_post_manager:release_post288 + edit FHRGRP '177' + edit FHRLST 'f288' + edit FHR 'f288' + edit HR '288' + task jgfs_atmos_post_f291 + trigger ./jgfs_atmos_post_manager:release_post291 + edit FHRGRP '178' + edit FHRLST 'f291' + edit FHR 'f291' + edit HR '291' + task jgfs_atmos_post_f294 + trigger ./jgfs_atmos_post_manager:release_post294 + edit FHRGRP '179' + edit FHRLST 'f294' + edit FHR 'f294' + edit HR '294' + task jgfs_atmos_post_f297 + trigger ./jgfs_atmos_post_manager:release_post297 + edit FHRGRP '180' + edit FHRLST 'f297' + edit FHR 'f297' + edit HR '297' + task jgfs_atmos_post_f300 + trigger ./jgfs_atmos_post_manager:release_post300 + edit FHRGRP '181' + edit FHRLST 'f300' + edit FHR 'f300' + edit HR '300' + task jgfs_atmos_post_f303 + trigger ./jgfs_atmos_post_manager:release_post303 + edit FHRGRP '182' + edit FHRLST 'f303' + edit FHR 'f303' + edit HR '303' + task jgfs_atmos_post_f306 + trigger ./jgfs_atmos_post_manager:release_post306 + edit FHRGRP '183' + edit FHRLST 'f306' + edit FHR 'f306' + edit HR '306' + task jgfs_atmos_post_f309 + trigger ./jgfs_atmos_post_manager:release_post309 + edit FHRGRP '184' + edit FHRLST 'f309' + edit FHR 'f309' + edit HR '309' + task jgfs_atmos_post_f312 + trigger ./jgfs_atmos_post_manager:release_post312 + edit FHRGRP '185' + edit FHRLST 'f312' + edit FHR 'f312' + edit HR '312' + task jgfs_atmos_post_f315 + trigger ./jgfs_atmos_post_manager:release_post315 + edit FHRGRP '186' + edit FHRLST 'f315' + edit FHR 'f315' + edit HR '315' + task jgfs_atmos_post_f318 + trigger ./jgfs_atmos_post_manager:release_post318 + edit FHRGRP '187' + edit FHRLST 'f318' + edit FHR 'f318' + edit HR '318' + task jgfs_atmos_post_f321 + trigger ./jgfs_atmos_post_manager:release_post321 + edit FHRGRP '188' + edit FHRLST 'f321' + edit FHR 'f321' + edit HR '321' + task jgfs_atmos_post_f324 + trigger ./jgfs_atmos_post_manager:release_post324 + edit FHRGRP '189' + edit FHRLST 'f324' + edit FHR 'f324' + edit HR '324' + task jgfs_atmos_post_f327 + trigger ./jgfs_atmos_post_manager:release_post327 + edit FHRGRP '190' + edit FHRLST 'f327' + edit FHR 'f327' + edit HR '327' + task jgfs_atmos_post_f330 + trigger ./jgfs_atmos_post_manager:release_post330 + edit FHRGRP '191' + edit FHRLST 'f330' + edit FHR 'f330' + edit HR '330' + task jgfs_atmos_post_f333 + trigger ./jgfs_atmos_post_manager:release_post333 + edit FHRGRP '192' + edit FHRLST 'f333' + edit FHR 'f333' + edit HR '333' + task jgfs_atmos_post_f336 + trigger ./jgfs_atmos_post_manager:release_post336 + edit FHRGRP '193' + edit FHRLST 'f336' + edit FHR 'f336' + edit HR '336' + task jgfs_atmos_post_f339 + trigger ./jgfs_atmos_post_manager:release_post339 + edit FHRGRP '194' + edit FHRLST 'f339' + edit FHR 'f339' + edit HR '339' + task jgfs_atmos_post_f342 + trigger ./jgfs_atmos_post_manager:release_post342 + edit FHRGRP '195' + edit FHRLST 'f342' + edit FHR 'f342' + edit HR '342' + task jgfs_atmos_post_f345 + trigger ./jgfs_atmos_post_manager:release_post345 + edit FHRGRP '196' + edit FHRLST 'f345' + edit FHR 'f345' + edit HR '345' + task jgfs_atmos_post_f348 + trigger ./jgfs_atmos_post_manager:release_post348 + edit FHRGRP '197' + edit FHRLST 'f348' + edit FHR 'f348' + edit HR '348' + task jgfs_atmos_post_f351 + trigger ./jgfs_atmos_post_manager:release_post351 + edit FHRGRP '198' + edit FHRLST 'f351' + edit FHR 'f351' + edit HR '351' + task jgfs_atmos_post_f354 + trigger ./jgfs_atmos_post_manager:release_post354 + edit FHRGRP '199' + edit FHRLST 'f354' + edit FHR 'f354' + edit HR '354' + task jgfs_atmos_post_f357 + trigger ./jgfs_atmos_post_manager:release_post357 + edit FHRGRP '200' + edit FHRLST 'f357' + edit FHR 'f357' + edit HR '357' + task jgfs_atmos_post_f360 + trigger ./jgfs_atmos_post_manager:release_post360 + edit FHRGRP '201' + edit FHRLST 'f360' + edit FHR 'f360' + edit HR '360' + task jgfs_atmos_post_f363 + trigger ./jgfs_atmos_post_manager:release_post363 + edit FHRGRP '202' + edit FHRLST 'f363' + edit FHR 'f363' + edit HR '363' + task jgfs_atmos_post_f366 + trigger ./jgfs_atmos_post_manager:release_post366 + edit FHRGRP '203' + edit FHRLST 'f366' + edit FHR 'f366' + edit HR '366' + task jgfs_atmos_post_f369 + trigger ./jgfs_atmos_post_manager:release_post369 + edit FHRGRP '204' + edit FHRLST 'f369' + edit FHR 'f369' + edit HR '369' + task jgfs_atmos_post_f372 + trigger ./jgfs_atmos_post_manager:release_post372 + edit FHRGRP '205' + edit FHRLST 'f372' + edit FHR 'f372' + edit HR '372' + task jgfs_atmos_post_f375 + trigger ./jgfs_atmos_post_manager:release_post375 + edit FHRGRP '206' + edit FHRLST 'f375' + edit FHR 'f375' + edit HR '375' + task jgfs_atmos_post_f378 + trigger ./jgfs_atmos_post_manager:release_post378 + edit FHRGRP '207' + edit FHRLST 'f378' + edit FHR 'f378' + edit HR '378' + task jgfs_atmos_post_f381 + trigger ./jgfs_atmos_post_manager:release_post381 + edit FHRGRP '208' + edit FHRLST 'f381' + edit FHR 'f381' + edit HR '381' + task jgfs_atmos_post_f384 + trigger ./jgfs_atmos_post_manager:release_post384 + edit FHRGRP '209' + edit FHRLST 'f384' + edit FHR 'f384' + edit HR '384' + endfamily + family post_processing + family bufr_sounding + task jgfs_atmos_postsnd + trigger ../../post/jgfs_atmos_post_manager:release_post000 + endfamily + family bulletins + task jgfs_atmos_fbwind + trigger ../../post/jgfs_atmos_post_f006 == complete and ../../post/jgfs_atmos_post_f012 == complete and ../../post/jgfs_atmos_post_f024 == complete + endfamily + family awips_20km_1p0 + task jgfs_atmos_awips_f000 + trigger ../../post/jgfs_atmos_post_f000 == complete + edit FHRGRP '000' + edit FHRLST 'f000' + edit FCSTHR '000' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f003 + trigger ../../post/jgfs_atmos_post_f003 == complete + edit FHRGRP '003' + edit FHRLST 'f003' + edit FCSTHR '003' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f006 + trigger ../../post/jgfs_atmos_post_f006 == complete + edit FHRGRP '006' + edit FHRLST 'f006' + edit FCSTHR '006' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f009 + trigger ../../post/jgfs_atmos_post_f009 == complete + edit FHRGRP '009' + edit FHRLST 'f009' + edit FCSTHR '009' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f012 + trigger ../../post/jgfs_atmos_post_f012 == complete + edit FHRGRP '012' + edit FHRLST 'f012' + edit FCSTHR '012' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f015 + trigger ../../post/jgfs_atmos_post_f015 == complete + edit FHRGRP '015' + edit FHRLST 'f015' + edit FCSTHR '015' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f018 + trigger ../../post/jgfs_atmos_post_f018 == complete + edit FHRGRP '018' + edit FHRLST 'f018' + edit FCSTHR '018' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f021 + trigger ../../post/jgfs_atmos_post_f021 == complete + edit FHRGRP '021' + edit FHRLST 'f021' + edit FCSTHR '021' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f024 + trigger ../../post/jgfs_atmos_post_f024 == complete + edit FHRGRP '024' + edit FHRLST 'f024' + edit FCSTHR '024' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f027 + trigger ../../post/jgfs_atmos_post_f027 == complete + edit FHRGRP '027' + edit FHRLST 'f027' + edit FCSTHR '027' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f030 + trigger ../../post/jgfs_atmos_post_f030 == complete + edit FHRGRP '030' + edit FHRLST 'f030' + edit FCSTHR '030' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f033 + trigger ../../post/jgfs_atmos_post_f033 == complete + edit FHRGRP '033' + edit FHRLST 'f033' + edit FCSTHR '033' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f036 + trigger ../../post/jgfs_atmos_post_f036 == complete + edit FHRGRP '036' + edit FHRLST 'f036' + edit FCSTHR '036' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f039 + trigger ../../post/jgfs_atmos_post_f039 == complete + edit FHRGRP '039' + edit FHRLST 'f039' + edit FCSTHR '039' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f042 + trigger ../../post/jgfs_atmos_post_f042 == complete + edit FHRGRP '042' + edit FHRLST 'f042' + edit FCSTHR '042' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f045 + trigger ../../post/jgfs_atmos_post_f045 == complete + edit FHRGRP '045' + edit FHRLST 'f045' + edit FCSTHR '045' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f048 + trigger ../../post/jgfs_atmos_post_f048 == complete + edit FHRGRP '048' + edit FHRLST 'f048' + edit FCSTHR '048' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f051 + trigger ../../post/jgfs_atmos_post_f051 == complete + edit FHRGRP '051' + edit FHRLST 'f051' + edit FCSTHR '051' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f054 + trigger ../../post/jgfs_atmos_post_f054 == complete + edit FHRGRP '054' + edit FHRLST 'f054' + edit FCSTHR '054' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f057 + trigger ../../post/jgfs_atmos_post_f057 == complete + edit FHRGRP '057' + edit FHRLST 'f057' + edit FCSTHR '057' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f060 + trigger ../../post/jgfs_atmos_post_f060 == complete + edit FHRGRP '060' + edit FHRLST 'f060' + edit FCSTHR '060' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f063 + trigger ../../post/jgfs_atmos_post_f063 == complete + edit FHRGRP '063' + edit FHRLST 'f063' + edit FCSTHR '063' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f066 + trigger ../../post/jgfs_atmos_post_f066 == complete + edit FHRGRP '066' + edit FHRLST 'f066' + edit FCSTHR '066' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f069 + trigger ../../post/jgfs_atmos_post_f069 == complete + edit FHRGRP '069' + edit FHRLST 'f069' + edit FCSTHR '069' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f072 + trigger ../../post/jgfs_atmos_post_f072 == complete + edit FHRGRP '072' + edit FHRLST 'f072' + edit FCSTHR '072' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f075 + trigger ../../post/jgfs_atmos_post_f075 == complete + edit FHRGRP '075' + edit FHRLST 'f075' + edit FCSTHR '075' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f078 + trigger ../../post/jgfs_atmos_post_f078 == complete + edit FHRGRP '078' + edit FHRLST 'f078' + edit FCSTHR '078' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f081 + trigger ../../post/jgfs_atmos_post_f081 == complete + edit FHRGRP '081' + edit FHRLST 'f081' + edit FCSTHR '081' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f084 + trigger ../../post/jgfs_atmos_post_f084 == complete + edit FHRGRP '084' + edit FHRLST 'f084' + edit FCSTHR '084' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f090 + trigger ../../post/jgfs_atmos_post_f090 == complete + edit FHRGRP '090' + edit FHRLST 'f090' + edit FCSTHR '090' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f096 + trigger ../../post/jgfs_atmos_post_f096 == complete + edit FHRGRP '096' + edit FHRLST 'f096' + edit FCSTHR '096' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f102 + trigger ../../post/jgfs_atmos_post_f102 == complete + edit FHRGRP '102' + edit FHRLST 'f102' + edit FCSTHR '102' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f108 + trigger ../../post/jgfs_atmos_post_f108 == complete + edit FHRGRP '108' + edit FHRLST 'f108' + edit FCSTHR '108' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f114 + trigger ../../post/jgfs_atmos_post_f114 == complete + edit FHRGRP '114' + edit FHRLST 'f114' + edit FCSTHR '114' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f120 + trigger ../../post/jgfs_atmos_post_f120 == complete + edit FHRGRP '120' + edit FHRLST 'f120' + edit FCSTHR '120' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f126 + trigger ../../post/jgfs_atmos_post_f126 == complete + edit FHRGRP '126' + edit FHRLST 'f126' + edit FCSTHR '126' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f132 + trigger ../../post/jgfs_atmos_post_f132 == complete + edit FHRGRP '132' + edit FHRLST 'f132' + edit FCSTHR '132' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f138 + trigger ../../post/jgfs_atmos_post_f138 == complete + edit FHRGRP '138' + edit FHRLST 'f138' + edit FCSTHR '138' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f144 + trigger ../../post/jgfs_atmos_post_f144 == complete + edit FHRGRP '144' + edit FHRLST 'f144' + edit FCSTHR '144' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f150 + trigger ../../post/jgfs_atmos_post_f150 == complete + edit FHRGRP '150' + edit FHRLST 'f150' + edit FCSTHR '150' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f156 + trigger ../../post/jgfs_atmos_post_f156 == complete + edit FHRGRP '156' + edit FHRLST 'f156' + edit FCSTHR '156' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f162 + trigger ../../post/jgfs_atmos_post_f162 == complete + edit FHRGRP '162' + edit FHRLST 'f162' + edit FCSTHR '162' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f168 + trigger ../../post/jgfs_atmos_post_f168 == complete + edit FHRGRP '168' + edit FHRLST 'f168' + edit FCSTHR '168' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f174 + trigger ../../post/jgfs_atmos_post_f174 == complete + edit FHRGRP '174' + edit FHRLST 'f174' + edit FCSTHR '174' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f180 + trigger ../../post/jgfs_atmos_post_f180 == complete + edit FHRGRP '180' + edit FHRLST 'f180' + edit FCSTHR '180' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f186 + trigger ../../post/jgfs_atmos_post_f186 == complete + edit FHRGRP '186' + edit FHRLST 'f186' + edit FCSTHR '186' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f192 + trigger ../../post/jgfs_atmos_post_f192 == complete + edit FHRGRP '192' + edit FHRLST 'f192' + edit FCSTHR '192' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f198 + trigger ../../post/jgfs_atmos_post_f198 == complete + edit FHRGRP '198' + edit FHRLST 'f198' + edit FCSTHR '198' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f204 + trigger ../../post/jgfs_atmos_post_f204 == complete + edit FHRGRP '204' + edit FHRLST 'f204' + edit FCSTHR '204' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f210 + trigger ../../post/jgfs_atmos_post_f210 == complete + edit FHRGRP '210' + edit FHRLST 'f210' + edit FCSTHR '210' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f216 + trigger ../../post/jgfs_atmos_post_f216 == complete + edit FHRGRP '216' + edit FHRLST 'f216' + edit FCSTHR '216' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f222 + trigger ../../post/jgfs_atmos_post_f222 == complete + edit FHRGRP '222' + edit FHRLST 'f222' + edit FCSTHR '222' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f228 + trigger ../../post/jgfs_atmos_post_f228 == complete + edit FHRGRP '228' + edit FHRLST 'f228' + edit FCSTHR '228' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f234 + trigger ../../post/jgfs_atmos_post_f234 == complete + edit FHRGRP '234' + edit FHRLST 'f234' + edit FCSTHR '234' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f240 + trigger ../../post/jgfs_atmos_post_f240 == complete + edit FHRGRP '240' + edit FHRLST 'f240' + edit FCSTHR '240' + edit TRDRUN 'YES' + endfamily + family awips_g2 + task jgfs_atmos_awips_g2_f000 + trigger ../../post/jgfs_atmos_post_f000 == complete + edit FHRGRP '000' + edit FHRLST 'f000' + edit FCSTHR '000' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f006 + trigger ../../post/jgfs_atmos_post_f006 == complete + edit FHRGRP '006' + edit FHRLST 'f006' + edit FCSTHR '006' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f012 + trigger ../../post/jgfs_atmos_post_f012 == complete + edit FHRGRP '012' + edit FHRLST 'f012' + edit FCSTHR '012' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f018 + trigger ../../post/jgfs_atmos_post_f018 == complete + edit FHRGRP '018' + edit FHRLST 'f018' + edit FCSTHR '018' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f024 + trigger ../../post/jgfs_atmos_post_f024 == complete + edit FHRGRP '024' + edit FHRLST 'f024' + edit FCSTHR '024' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f030 + trigger ../../post/jgfs_atmos_post_f030 == complete + edit FHRGRP '030' + edit FHRLST 'f030' + edit FCSTHR '030' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f036 + trigger ../../post/jgfs_atmos_post_f036 == complete + edit FHRGRP '036' + edit FHRLST 'f036' + edit FCSTHR '036' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f042 + trigger ../../post/jgfs_atmos_post_f042 == complete + edit FHRGRP '042' + edit FHRLST 'f042' + edit FCSTHR '042' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f048 + trigger ../../post/jgfs_atmos_post_f048 == complete + edit FHRGRP '048' + edit FHRLST 'f048' + edit FCSTHR '048' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f054 + trigger ../../post/jgfs_atmos_post_f054 == complete + edit FHRGRP '054' + edit FHRLST 'f054' + edit FCSTHR '054' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f060 + trigger ../../post/jgfs_atmos_post_f060 == complete + edit FHRGRP '060' + edit FHRLST 'f060' + edit FCSTHR '060' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f066 + trigger ../../post/jgfs_atmos_post_f066 == complete + edit FHRGRP '066' + edit FHRLST 'f066' + edit FCSTHR '066' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f072 + trigger ../../post/jgfs_atmos_post_f072 == complete + edit FHRGRP '072' + edit FHRLST 'f072' + edit FCSTHR '072' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f078 + trigger ../../post/jgfs_atmos_post_f078 == complete + edit FHRGRP '078' + edit FHRLST 'f078' + edit FCSTHR '078' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f084 + trigger ../../post/jgfs_atmos_post_f084 == complete + edit FHRGRP '084' + edit FHRLST 'f084' + edit FCSTHR '084' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f090 + trigger ../../post/jgfs_atmos_post_f090 == complete + edit FHRGRP '090' + edit FHRLST 'f090' + edit FCSTHR '090' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f096 + trigger ../../post/jgfs_atmos_post_f096 == complete + edit FHRGRP '096' + edit FHRLST 'f096' + edit FCSTHR '096' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f102 + trigger ../../post/jgfs_atmos_post_f102 == complete + edit FHRGRP '102' + edit FHRLST 'f102' + edit FCSTHR '102' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f108 + trigger ../../post/jgfs_atmos_post_f108 == complete + edit FHRGRP '108' + edit FHRLST 'f108' + edit FCSTHR '108' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f114 + trigger ../../post/jgfs_atmos_post_f114 == complete + edit FHRGRP '114' + edit FHRLST 'f114' + edit FCSTHR '114' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f120 + trigger ../../post/jgfs_atmos_post_f120 == complete + edit FHRGRP '120' + edit FHRLST 'f120' + edit FCSTHR '120' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f126 + trigger ../../post/jgfs_atmos_post_f126 == complete + edit FHRGRP '126' + edit FHRLST 'f126' + edit FCSTHR '126' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f132 + trigger ../../post/jgfs_atmos_post_f132 == complete + edit FHRGRP '132' + edit FHRLST 'f132' + edit FCSTHR '132' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f138 + trigger ../../post/jgfs_atmos_post_f138 == complete + edit FHRGRP '138' + edit FHRLST 'f138' + edit FCSTHR '138' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f144 + trigger ../../post/jgfs_atmos_post_f144 == complete + edit FHRGRP '144' + edit FHRLST 'f144' + edit FCSTHR '144' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f150 + trigger ../../post/jgfs_atmos_post_f150 == complete + edit FHRGRP '150' + edit FHRLST 'f150' + edit FCSTHR '150' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f156 + trigger ../../post/jgfs_atmos_post_f156 == complete + edit FHRGRP '156' + edit FHRLST 'f156' + edit FCSTHR '156' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f162 + trigger ../../post/jgfs_atmos_post_f162 == complete + edit FHRGRP '162' + edit FHRLST 'f162' + edit FCSTHR '162' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f168 + trigger ../../post/jgfs_atmos_post_f168 == complete + edit FHRGRP '168' + edit FHRLST 'f168' + edit FCSTHR '168' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f174 + trigger ../../post/jgfs_atmos_post_f174 == complete + edit FHRGRP '174' + edit FHRLST 'f174' + edit FCSTHR '174' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f180 + trigger ../../post/jgfs_atmos_post_f180 == complete + edit FHRGRP '180' + edit FHRLST 'f180' + edit FCSTHR '180' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f186 + trigger ../../post/jgfs_atmos_post_f186 == complete + edit FHRGRP '186' + edit FHRLST 'f186' + edit FCSTHR '186' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f192 + trigger ../../post/jgfs_atmos_post_f192 == complete + edit FHRGRP '192' + edit FHRLST 'f192' + edit FCSTHR '192' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f198 + trigger ../../post/jgfs_atmos_post_f198 == complete + edit FHRGRP '198' + edit FHRLST 'f198' + edit FCSTHR '198' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f204 + trigger ../../post/jgfs_atmos_post_f204 == complete + edit FHRGRP '204' + edit FHRLST 'f204' + edit FCSTHR '204' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f210 + trigger ../../post/jgfs_atmos_post_f210 == complete + edit FHRGRP '210' + edit FHRLST 'f210' + edit FCSTHR '210' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f216 + trigger ../../post/jgfs_atmos_post_f216 == complete + edit FHRGRP '216' + edit FHRLST 'f216' + edit FCSTHR '216' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f222 + trigger ../../post/jgfs_atmos_post_f222 == complete + edit FHRGRP '222' + edit FHRLST 'f222' + edit FCSTHR '222' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f228 + trigger ../../post/jgfs_atmos_post_f228 == complete + edit FHRGRP '228' + edit FHRLST 'f228' + edit FCSTHR '228' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f234 + trigger ../../post/jgfs_atmos_post_f234 == complete + edit FHRGRP '234' + edit FHRLST 'f234' + edit FCSTHR '234' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f240 + trigger ../../post/jgfs_atmos_post_f240 == complete + edit FHRGRP '240' + edit FHRLST 'f240' + edit FCSTHR '240' + edit TRDRUN 'YES' + endfamily + endfamily + family gempak + task jgfs_atmos_gempak + trigger ../../atmos/analysis/jgfs_atmos_analysis == complete + task jgfs_atmos_gempak_meta + trigger ../../atmos/analysis/jgfs_atmos_analysis == complete + task jgfs_atmos_gempak_ncdc_upapgif + trigger ./jgfs_atmos_gempak == active or ./jgfs_atmos_gempak == complete + task jgfs_atmos_npoess_pgrb2_0p5deg + trigger ../post/jgfs_atmos_post_manager:release_post180 + task jgfs_atmos_pgrb2_spec_gempak + trigger ./jgfs_atmos_npoess_pgrb2_0p5deg == complete + endfamily + family verf + task jgfs_atmos_vminmon + trigger ../analysis/jgfs_atmos_analysis == complete + endfamily + endfamily + family wave + family init + task jgfs_wave_init + trigger ../../atmos/obsproc/prep/jgfs_atmos_prep == complete + endfamily + family prep + task jgfs_wave_prep + trigger ../init/jgfs_wave_init == complete + endfamily + family post + task jgfs_wave_postsbs + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post000 + task jgfs_wave_postpnt + trigger ../../jgfs_forecast == complete + task jgfs_wave_post_bndpnt + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post180 + task jgfs_wave_prdgen_gridded + trigger ./jgfs_wave_postsbs == active or ./jgfs_wave_postsbs == complete + task jgfs_wave_prdgen_bulls + trigger ./jgfs_wave_postpnt == complete and ./jgfs_wave_postsbs == complete + endfamily + family gempak + task jgfs_wave_gempak + trigger ../post/jgfs_wave_postsbs == active or ../post/jgfs_wave_postsbs == complete + endfamily + endfamily + task jgfs_forecast + trigger ./atmos/analysis/jgfs_atmos_analysis:release_fcst and ./wave/prep/jgfs_wave_prep == complete + endfamily + family gdas + edit CYC '12' + edit PACKAGEHOME '/lfs/h2/emc/global/noscrub/Lin.Gan/git/feature-ops-wcoss2' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/gdas' + edit PROJ 'GFS' + edit PROJENVIR 'DEV' + edit NET 'gfs' + edit RUN 'gdas' + edit COM '/lfs/h2/emc/ptmp/Lin.Gan/ecfops/com' + edit QUEUE 'dev' + edit QUEUESHARED 'dev_shared' + edit QUEUESERV 'dev_transfer' + family atmos + family obsproc + family dump + task jgdas_atmos_tropcy_qc_reloc + time 05:45 + endfamily + family prep + task jgdas_atmos_emcsfc_sfc_prep + trigger ../dump/jgdas_atmos_dump:release_sfcprep + endfamily + endfamily + family analysis + task jgdas_atmos_analysis + trigger ../obsproc/prep/jgdas_atmos_prep == complete and ../obsproc/prep/jgdas_atmos_emcsfc_sfc_prep == complete + event 1 release_fcst + task jgdas_atmos_analysis_calc + trigger ./jgdas_atmos_analysis == complete + task jgdas_atmos_analysis_diag + trigger ./jgdas_atmos_analysis == complete + endfamily + family post + task jgdas_atmos_post_manager + trigger ../../jgdas_forecast == active + event 1 release_postanl + event 2 release_post000 + event 3 release_post001 + event 4 release_post002 + event 5 release_post003 + event 6 release_post004 + event 7 release_post005 + event 8 release_post006 + event 9 release_post007 + event 10 release_post008 + event 11 release_post009 + task jgdas_atmos_post_anl + trigger ./jgdas_atmos_post_manager:release_postanl + edit FHRGRP '000' + edit FHRLST 'anl' + edit HR 'anl' + edit FHR 'anl' + task jgdas_atmos_post_f000 + trigger ./jgdas_atmos_post_manager:release_post000 + edit FHR 'f000' + edit HR '000' + edit FHRGRP '001' + edit FHRLST 'f000' + task jgdas_atmos_post_f001 + trigger ./jgdas_atmos_post_manager:release_post001 + edit FHR 'f001' + edit HR '001' + edit FHRGRP '002' + edit FHRLST 'f001' + task jgdas_atmos_post_f002 + trigger ./jgdas_atmos_post_manager:release_post002 + edit FHR 'f002' + edit HR '002' + edit FHRGRP '003' + edit FHRLST 'f002' + task jgdas_atmos_post_f003 + trigger ./jgdas_atmos_post_manager:release_post003 + edit FHR 'f003' + edit HR '003' + edit FHRGRP '004' + edit FHRLST 'f003' + task jgdas_atmos_post_f004 + trigger ./jgdas_atmos_post_manager:release_post004 + edit FHR 'f004' + edit HR '004' + edit FHRGRP '005' + edit FHRLST 'f004' + task jgdas_atmos_post_f005 + trigger ./jgdas_atmos_post_manager:release_post005 + edit FHR 'f005' + edit HR '005' + edit FHRGRP '006' + edit FHRLST 'f005' + task jgdas_atmos_post_f006 + trigger ./jgdas_atmos_post_manager:release_post006 + edit FHR 'f006' + edit HR '006' + edit FHRGRP '007' + edit FHRLST 'f006' + task jgdas_atmos_post_f007 + trigger ./jgdas_atmos_post_manager:release_post007 + edit FHR 'f007' + edit HR '007' + edit FHRGRP '008' + edit FHRLST 'f007' + task jgdas_atmos_post_f008 + trigger ./jgdas_atmos_post_manager:release_post008 + edit FHR 'f008' + edit HR '008' + edit FHRGRP '009' + edit FHRLST 'f008' + task jgdas_atmos_post_f009 + trigger ./jgdas_atmos_post_manager:release_post009 + edit FHR 'f009' + edit HR '009' + edit FHRGRP '010' + edit FHRLST 'f009' + endfamily + family post_processing + task jgdas_atmos_chgres_forenkf + trigger ../../jgdas_forecast == complete and ../../../enkfgdas/forecast == complete + endfamily + family gempak + task jgdas_atmos_gempak + trigger ../../jgdas_forecast == complete + task jgdas_atmos_gempak_meta_ncdc + trigger ./jgdas_atmos_gempak == complete + endfamily + family verf + task jgdas_atmos_vminmon + trigger ../analysis/jgdas_atmos_analysis == complete + task jgdas_atmos_verfrad + trigger ../analysis/jgdas_atmos_analysis_diag == complete + task jgdas_atmos_verfozn + trigger ../analysis/jgdas_atmos_analysis_diag == complete + endfamily + endfamily + family wave + family init + task jgdas_wave_init + trigger ../../atmos/obsproc/prep/jgdas_atmos_prep == complete + endfamily + family prep + task jgdas_wave_prep + trigger ../init/jgdas_wave_init == complete + endfamily + family post + task jgdas_wave_postsbs + trigger ../../atmos/post/jgdas_atmos_post_manager:release_post000 + task jgdas_wave_postpnt + trigger ../../jgdas_forecast == complete + endfamily + endfamily + task jgdas_forecast + trigger ./atmos/analysis/jgdas_atmos_analysis:release_fcst and ./wave/prep/jgdas_wave_prep == complete + endfamily + family enkfgdas + edit CYC '12' + edit PACKAGEHOME '/lfs/h2/emc/global/noscrub/Lin.Gan/git/feature-ops-wcoss2' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas' + edit PROJ 'GFS' + edit PROJENVIR 'DEV' + edit NET 'gfs' + edit RUN 'gdas' + edit COM '/lfs/h2/emc/ptmp/Lin.Gan/ecfops/com' + edit QUEUE 'dev' + edit QUEUESHARED 'dev_shared' + edit QUEUESERV 'dev_transfer' + family analysis + family create + task jenkfgdas_select_obs + trigger ../../../gdas/atmos/obsproc/prep/jgdas_atmos_prep == complete and /prod06/enkfgdas/post == complete + task jenkfgdas_diag + trigger ./jenkfgdas_select_obs == complete + task jenkfgdas_update + trigger ./jenkfgdas_diag == complete + endfamily + family recenter + family ecen + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas/analysis/recenter/ecen' + trigger ../create/jenkfgdas_update == complete and ../../../gdas/atmos/analysis/jgdas_atmos_analysis_calc == complete and /prod06/gdas/atmos/post_processing/jgdas_atmos_chgres_forenkf == complete + family grp1 + edit FHRGRP '003' + task jenkfgdas_ecen + endfamily + family grp2 + edit FHRGRP '006' + task jenkfgdas_ecen + endfamily + family grp3 + edit FHRGRP '009' + task jenkfgdas_ecen + endfamily + endfamily + task jenkfgdas_sfc + trigger ../create/jenkfgdas_update == complete and ../../../gdas/atmos/analysis/jgdas_atmos_analysis_calc == complete + endfamily + endfamily + family forecast + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas/forecast' + trigger ./analysis/recenter/ecen == complete and ./analysis/recenter/jenkfgdas_sfc == complete + family grp1 + edit ENSGRP '01' + task jenkfgdas_fcst + endfamily + family grp2 + edit ENSGRP '02' + task jenkfgdas_fcst + endfamily + family grp3 + edit ENSGRP '03' + task jenkfgdas_fcst + endfamily + family grp4 + edit ENSGRP '04' + task jenkfgdas_fcst + endfamily + family grp5 + edit ENSGRP '05' + task jenkfgdas_fcst + endfamily + family grp6 + edit ENSGRP '06' + task jenkfgdas_fcst + endfamily + family grp7 + edit ENSGRP '07' + task jenkfgdas_fcst + endfamily + family grp8 + edit ENSGRP '08' + task jenkfgdas_fcst + endfamily + family grp9 + edit ENSGRP '09' + task jenkfgdas_fcst + endfamily + family grp10 + edit ENSGRP '10' + task jenkfgdas_fcst + endfamily + family grp11 + edit ENSGRP '11' + task jenkfgdas_fcst + endfamily + family grp12 + edit ENSGRP '12' + task jenkfgdas_fcst + endfamily + family grp13 + edit ENSGRP '13' + task jenkfgdas_fcst + endfamily + family grp14 + edit ENSGRP '14' + task jenkfgdas_fcst + endfamily + family grp15 + edit ENSGRP '15' + task jenkfgdas_fcst + endfamily + family grp16 + edit ENSGRP '16' + task jenkfgdas_fcst + endfamily + family grp17 + edit ENSGRP '17' + task jenkfgdas_fcst + endfamily + family grp18 + edit ENSGRP '18' + task jenkfgdas_fcst + endfamily + family grp19 + edit ENSGRP '19' + task jenkfgdas_fcst + endfamily + family grp20 + edit ENSGRP '20' + task jenkfgdas_fcst + endfamily + family grp21 + edit ENSGRP '21' + task jenkfgdas_fcst + endfamily + family grp22 + edit ENSGRP '22' + task jenkfgdas_fcst + endfamily + family grp23 + edit ENSGRP '23' + task jenkfgdas_fcst + endfamily + family grp24 + edit ENSGRP '24' + task jenkfgdas_fcst + endfamily + family grp25 + edit ENSGRP '25' + task jenkfgdas_fcst + endfamily + family grp26 + edit ENSGRP '26' + task jenkfgdas_fcst + endfamily + family grp27 + edit ENSGRP '27' + task jenkfgdas_fcst + endfamily + family grp28 + edit ENSGRP '28' + task jenkfgdas_fcst + endfamily + family grp29 + edit ENSGRP '29' + task jenkfgdas_fcst + endfamily + family grp30 + edit ENSGRP '30' + task jenkfgdas_fcst + endfamily + family grp31 + edit ENSGRP '31' + task jenkfgdas_fcst + endfamily + family grp32 + edit ENSGRP '32' + task jenkfgdas_fcst + endfamily + family grp33 + edit ENSGRP '33' + task jenkfgdas_fcst + endfamily + family grp34 + edit ENSGRP '34' + task jenkfgdas_fcst + endfamily + family grp35 + edit ENSGRP '35' + task jenkfgdas_fcst + endfamily + family grp36 + edit ENSGRP '36' + task jenkfgdas_fcst + endfamily + family grp37 + edit ENSGRP '37' + task jenkfgdas_fcst + endfamily + family grp38 + edit ENSGRP '38' + task jenkfgdas_fcst + endfamily + family grp39 + edit ENSGRP '39' + task jenkfgdas_fcst + endfamily + family grp40 + edit ENSGRP '40' + task jenkfgdas_fcst + endfamily + endfamily + family post + trigger ./forecast == complete + task jenkfgdas_post_f003 + edit FHMIN_EPOS '003' + edit FHMAX_EPOS '003' + edit FHOUT_EPOS '003' + task jenkfgdas_post_f004 + edit FHMIN_EPOS '004' + edit FHMAX_EPOS '004' + edit FHOUT_EPOS '004' + task jenkfgdas_post_f005 + edit FHMIN_EPOS '005' + edit FHMAX_EPOS '005' + edit FHOUT_EPOS '005' + task jenkfgdas_post_f006 + edit FHMIN_EPOS '006' + edit FHMAX_EPOS '006' + edit FHOUT_EPOS '006' + task jenkfgdas_post_f007 + edit FHMIN_EPOS '007' + edit FHMAX_EPOS '007' + edit FHOUT_EPOS '007' + task jenkfgdas_post_f008 + edit FHMIN_EPOS '008' + edit FHMAX_EPOS '008' + edit FHOUT_EPOS '008' + task jenkfgdas_post_f009 + edit FHMIN_EPOS '009' + edit FHMAX_EPOS '009' + edit FHOUT_EPOS '009' + endfamily #### epos + endfamily #### enkf +endsuite diff --git a/ecf/defs/prod18.def b/ecf/defs/prod18.def new file mode 100644 index 0000000000..df22c4dccb --- /dev/null +++ b/ecf/defs/prod18.def @@ -0,0 +1,2549 @@ +extern /prod12/gdas/jgdas_forecast +extern /prod12/gdas/atmos/post +extern /prod12/enkfgdas/post +extern /prod12/gdas/atmos/post_processing/jgdas_atmos_chgres_forenkf + +suite prod18 + repeat day 1 + edit ECF_TRIES '1' + edit CYC '18' + edit ENVIR 'prod' + edit PROJ 'GFS' + edit PROJENVIR 'DEV' + edit QUEUE 'dev' + edit QUEUESHARED 'dev_shared' + edit QUEUESERV 'dev_transfer' + edit ECF_INCLUDE '/lfs/h2/emc/global/noscrub/Lin.Gan/git/feature-ops-wcoss2/ecf/include' + edit MACHINE_SITE 'development' + + family gfs + edit CYC '18' + edit PACKAGEHOME '/lfs/h2/emc/global/noscrub/Lin.Gan/git/feature-ops-wcoss2' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/gfs' + edit PROJ 'GFS' + edit PROJENVIR 'DEV' + edit NET 'gfs' + edit RUN 'gfs' + edit COM '/lfs/h2/emc/ptmp/Lin.Gan/ecfops/com' + edit QUEUE 'dev' + edit QUEUESHARED 'dev_shared' + edit QUEUESERV 'dev_transfer' + family atmos + family obsproc + family dump + task jgfs_atmos_tropcy_qc_reloc + event 1 jtwc_bull_email + time 02:41 + endfamily + family prep + task jgfs_atmos_emcsfc_sfc_prep + trigger ../dump/jgfs_atmos_dump:release_sfcprep + endfamily + endfamily + family analysis + task jgfs_atmos_analysis + trigger ../obsproc/prep/jgfs_atmos_prep == complete and ../obsproc/prep/jgfs_atmos_emcsfc_sfc_prep == complete + event 1 release_fcst + task jgfs_atmos_analysis_calc + trigger ./jgfs_atmos_analysis == complete + endfamily + family post + task jgfs_atmos_post_manager + trigger ../analysis/jgfs_atmos_analysis == complete + event 1 release_postanl + event 2 release_post000 + event 3 release_post001 + event 4 release_post002 + event 5 release_post003 + event 6 release_post004 + event 7 release_post005 + event 8 release_post006 + event 9 release_post007 + event 10 release_post008 + event 11 release_post009 + event 12 release_post010 + event 13 release_post011 + event 14 release_post012 + event 15 release_post013 + event 16 release_post014 + event 17 release_post015 + event 18 release_post016 + event 19 release_post017 + event 20 release_post018 + event 21 release_post019 + event 22 release_post020 + event 23 release_post021 + event 24 release_post022 + event 25 release_post023 + event 26 release_post024 + event 27 release_post025 + event 28 release_post026 + event 29 release_post027 + event 30 release_post028 + event 31 release_post029 + event 32 release_post030 + event 33 release_post031 + event 34 release_post032 + event 35 release_post033 + event 36 release_post034 + event 37 release_post035 + event 38 release_post036 + event 39 release_post037 + event 40 release_post038 + event 41 release_post039 + event 42 release_post040 + event 43 release_post041 + event 44 release_post042 + event 45 release_post043 + event 46 release_post044 + event 47 release_post045 + event 48 release_post046 + event 49 release_post047 + event 50 release_post048 + event 51 release_post049 + event 52 release_post050 + event 53 release_post051 + event 54 release_post052 + event 55 release_post053 + event 56 release_post054 + event 57 release_post055 + event 58 release_post056 + event 59 release_post057 + event 60 release_post058 + event 61 release_post059 + event 62 release_post060 + event 63 release_post061 + event 64 release_post062 + event 65 release_post063 + event 66 release_post064 + event 67 release_post065 + event 68 release_post066 + event 69 release_post067 + event 70 release_post068 + event 71 release_post069 + event 72 release_post070 + event 73 release_post071 + event 74 release_post072 + event 75 release_post073 + event 76 release_post074 + event 77 release_post075 + event 78 release_post076 + event 79 release_post077 + event 80 release_post078 + event 81 release_post079 + event 82 release_post080 + event 83 release_post081 + event 84 release_post082 + event 85 release_post083 + event 86 release_post084 + event 87 release_post085 + event 88 release_post086 + event 89 release_post087 + event 90 release_post088 + event 91 release_post089 + event 92 release_post090 + event 93 release_post091 + event 94 release_post092 + event 95 release_post093 + event 96 release_post094 + event 97 release_post095 + event 98 release_post096 + event 99 release_post097 + event 100 release_post098 + event 101 release_post099 + event 102 release_post100 + event 103 release_post101 + event 104 release_post102 + event 105 release_post103 + event 106 release_post104 + event 107 release_post105 + event 108 release_post106 + event 109 release_post107 + event 110 release_post108 + event 111 release_post109 + event 112 release_post110 + event 113 release_post111 + event 114 release_post112 + event 115 release_post113 + event 116 release_post114 + event 117 release_post115 + event 118 release_post116 + event 119 release_post117 + event 120 release_post118 + event 121 release_post119 + event 122 release_post120 + event 123 release_post123 + event 124 release_post126 + event 125 release_post129 + event 126 release_post132 + event 127 release_post135 + event 128 release_post138 + event 129 release_post141 + event 130 release_post144 + event 131 release_post147 + event 132 release_post150 + event 133 release_post153 + event 134 release_post156 + event 135 release_post159 + event 136 release_post162 + event 137 release_post165 + event 138 release_post168 + event 139 release_post171 + event 140 release_post174 + event 141 release_post177 + event 142 release_post180 + event 143 release_post183 + event 144 release_post186 + event 145 release_post189 + event 146 release_post192 + event 147 release_post195 + event 148 release_post198 + event 149 release_post201 + event 150 release_post204 + event 151 release_post207 + event 152 release_post210 + event 153 release_post213 + event 154 release_post216 + event 155 release_post219 + event 156 release_post222 + event 157 release_post225 + event 158 release_post228 + event 159 release_post231 + event 160 release_post234 + event 161 release_post237 + event 162 release_post240 + event 163 release_post243 + event 164 release_post246 + event 165 release_post249 + event 166 release_post252 + event 167 release_post255 + event 168 release_post258 + event 169 release_post261 + event 170 release_post264 + event 171 release_post267 + event 172 release_post270 + event 173 release_post273 + event 174 release_post276 + event 175 release_post279 + event 176 release_post282 + event 177 release_post285 + event 178 release_post288 + event 179 release_post291 + event 180 release_post294 + event 181 release_post297 + event 182 release_post300 + event 183 release_post303 + event 184 release_post306 + event 185 release_post309 + event 186 release_post312 + event 187 release_post315 + event 188 release_post318 + event 189 release_post321 + event 190 release_post324 + event 191 release_post327 + event 192 release_post330 + event 193 release_post333 + event 194 release_post336 + event 195 release_post339 + event 196 release_post342 + event 197 release_post345 + event 198 release_post348 + event 199 release_post351 + event 200 release_post354 + event 201 release_post357 + event 202 release_post360 + event 203 release_post363 + event 204 release_post366 + event 205 release_post369 + event 206 release_post372 + event 207 release_post375 + event 208 release_post378 + event 209 release_post381 + event 210 release_post384 + task jgfs_atmos_post_anl + trigger ./jgfs_atmos_post_manager:release_postanl + edit FHRGRP '000' + edit FHRLST 'anl' + edit HR 'anl' + edit FHR 'anl' + task jgfs_atmos_post_f000 + trigger ./jgfs_atmos_post_manager:release_post000 + edit FHRGRP '001' + edit FHRLST 'f000' + edit FHR 'f000' + edit HR '000' + task jgfs_atmos_post_f001 + trigger ./jgfs_atmos_post_manager:release_post001 + edit FHRGRP '002' + edit FHRLST 'f001' + edit FHR 'f001' + edit HR '001' + task jgfs_atmos_post_f002 + trigger ./jgfs_atmos_post_manager:release_post002 + edit FHRGRP '003' + edit FHRLST 'f002' + edit FHR 'f002' + edit HR '002' + task jgfs_atmos_post_f003 + trigger ./jgfs_atmos_post_manager:release_post003 + edit FHRGRP '004' + edit FHRLST 'f003' + edit FHR 'f003' + edit HR '003' + task jgfs_atmos_post_f004 + trigger ./jgfs_atmos_post_manager:release_post004 + edit FHRGRP '005' + edit FHRLST 'f004' + edit FHR 'f004' + edit HR '004' + task jgfs_atmos_post_f005 + trigger ./jgfs_atmos_post_manager:release_post005 + edit FHRGRP '006' + edit FHRLST 'f005' + edit FHR 'f005' + edit HR '005' + task jgfs_atmos_post_f006 + trigger ./jgfs_atmos_post_manager:release_post006 + edit FHRGRP '007' + edit FHRLST 'f006' + edit FHR 'f006' + edit HR '006' + task jgfs_atmos_post_f007 + trigger ./jgfs_atmos_post_manager:release_post007 + edit FHRGRP '008' + edit FHRLST 'f007' + edit FHR 'f007' + edit HR '007' + task jgfs_atmos_post_f008 + trigger ./jgfs_atmos_post_manager:release_post008 + edit FHRGRP '009' + edit FHRLST 'f008' + edit FHR 'f008' + edit HR '008' + task jgfs_atmos_post_f009 + trigger ./jgfs_atmos_post_manager:release_post009 + edit FHRGRP '010' + edit FHRLST 'f009' + edit FHR 'f009' + edit HR '009' + task jgfs_atmos_post_f010 + trigger ./jgfs_atmos_post_manager:release_post010 + edit FHRGRP '011' + edit FHRLST 'f010' + edit FHR 'f010' + edit HR '010' + task jgfs_atmos_post_f011 + trigger ./jgfs_atmos_post_manager:release_post011 + edit FHRGRP '012' + edit FHRLST 'f011' + edit FHR 'f011' + edit HR '011' + task jgfs_atmos_post_f012 + trigger ./jgfs_atmos_post_manager:release_post012 + edit FHRGRP '013' + edit FHRLST 'f012' + edit FHR 'f012' + edit HR '012' + task jgfs_atmos_post_f013 + trigger ./jgfs_atmos_post_manager:release_post013 + edit FHRGRP '014' + edit FHRLST 'f013' + edit FHR 'f013' + edit HR '013' + task jgfs_atmos_post_f014 + trigger ./jgfs_atmos_post_manager:release_post014 + edit FHRGRP '015' + edit FHRLST 'f014' + edit FHR 'f014' + edit HR '014' + task jgfs_atmos_post_f015 + trigger ./jgfs_atmos_post_manager:release_post015 + edit FHRGRP '016' + edit FHRLST 'f015' + edit FHR 'f015' + edit HR '015' + task jgfs_atmos_post_f016 + trigger ./jgfs_atmos_post_manager:release_post016 + edit FHRGRP '017' + edit FHRLST 'f016' + edit FHR 'f016' + edit HR '016' + task jgfs_atmos_post_f017 + trigger ./jgfs_atmos_post_manager:release_post017 + edit FHRGRP '018' + edit FHRLST 'f017' + edit FHR 'f017' + edit HR '017' + task jgfs_atmos_post_f018 + trigger ./jgfs_atmos_post_manager:release_post018 + edit FHRGRP '019' + edit FHRLST 'f018' + edit FHR 'f018' + edit HR '018' + task jgfs_atmos_post_f019 + trigger ./jgfs_atmos_post_manager:release_post019 + edit FHRGRP '020' + edit FHRLST 'f019' + edit FHR 'f019' + edit HR '019' + task jgfs_atmos_post_f020 + trigger ./jgfs_atmos_post_manager:release_post020 + edit FHRGRP '021' + edit FHRLST 'f020' + edit FHR 'f020' + edit HR '020' + task jgfs_atmos_post_f021 + trigger ./jgfs_atmos_post_manager:release_post021 + edit FHRGRP '022' + edit FHRLST 'f021' + edit FHR 'f021' + edit HR '021' + task jgfs_atmos_post_f022 + trigger ./jgfs_atmos_post_manager:release_post022 + edit FHRGRP '023' + edit FHRLST 'f022' + edit FHR 'f022' + edit HR '022' + task jgfs_atmos_post_f023 + trigger ./jgfs_atmos_post_manager:release_post023 + edit FHRGRP '024' + edit FHRLST 'f023' + edit FHR 'f023' + edit HR '023' + task jgfs_atmos_post_f024 + trigger ./jgfs_atmos_post_manager:release_post024 + edit FHRGRP '025' + edit FHRLST 'f024' + edit FHR 'f024' + edit HR '024' + task jgfs_atmos_post_f025 + trigger ./jgfs_atmos_post_manager:release_post025 + edit FHRGRP '026' + edit FHRLST 'f025' + edit FHR 'f025' + edit HR '025' + task jgfs_atmos_post_f026 + trigger ./jgfs_atmos_post_manager:release_post026 + edit FHRGRP '027' + edit FHRLST 'f026' + edit FHR 'f026' + edit HR '026' + task jgfs_atmos_post_f027 + trigger ./jgfs_atmos_post_manager:release_post027 + edit FHRGRP '028' + edit FHRLST 'f027' + edit FHR 'f027' + edit HR '027' + task jgfs_atmos_post_f028 + trigger ./jgfs_atmos_post_manager:release_post028 + edit FHRGRP '029' + edit FHRLST 'f028' + edit FHR 'f028' + edit HR '028' + task jgfs_atmos_post_f029 + trigger ./jgfs_atmos_post_manager:release_post029 + edit FHRGRP '030' + edit FHRLST 'f029' + edit FHR 'f029' + edit HR '029' + task jgfs_atmos_post_f030 + trigger ./jgfs_atmos_post_manager:release_post030 + edit FHRGRP '031' + edit FHRLST 'f030' + edit FHR 'f030' + edit HR '030' + task jgfs_atmos_post_f031 + trigger ./jgfs_atmos_post_manager:release_post031 + edit FHRGRP '032' + edit FHRLST 'f031' + edit FHR 'f031' + edit HR '031' + task jgfs_atmos_post_f032 + trigger ./jgfs_atmos_post_manager:release_post032 + edit FHRGRP '033' + edit FHRLST 'f032' + edit FHR 'f032' + edit HR '032' + task jgfs_atmos_post_f033 + trigger ./jgfs_atmos_post_manager:release_post033 + edit FHRGRP '034' + edit FHRLST 'f033' + edit FHR 'f033' + edit HR '033' + task jgfs_atmos_post_f034 + trigger ./jgfs_atmos_post_manager:release_post034 + edit FHRGRP '035' + edit FHRLST 'f034' + edit FHR 'f034' + edit HR '034' + task jgfs_atmos_post_f035 + trigger ./jgfs_atmos_post_manager:release_post035 + edit FHRGRP '036' + edit FHRLST 'f035' + edit FHR 'f035' + edit HR '035' + task jgfs_atmos_post_f036 + trigger ./jgfs_atmos_post_manager:release_post036 + edit FHRGRP '037' + edit FHRLST 'f036' + edit FHR 'f036' + edit HR '036' + task jgfs_atmos_post_f037 + trigger ./jgfs_atmos_post_manager:release_post037 + edit FHRGRP '038' + edit FHRLST 'f037' + edit FHR 'f037' + edit HR '037' + task jgfs_atmos_post_f038 + trigger ./jgfs_atmos_post_manager:release_post038 + edit FHRGRP '039' + edit FHRLST 'f038' + edit FHR 'f038' + edit HR '038' + task jgfs_atmos_post_f039 + trigger ./jgfs_atmos_post_manager:release_post039 + edit FHRGRP '040' + edit FHRLST 'f039' + edit FHR 'f039' + edit HR '039' + task jgfs_atmos_post_f040 + trigger ./jgfs_atmos_post_manager:release_post040 + edit FHRGRP '041' + edit FHRLST 'f040' + edit FHR 'f040' + edit HR '040' + task jgfs_atmos_post_f041 + trigger ./jgfs_atmos_post_manager:release_post041 + edit FHRGRP '042' + edit FHRLST 'f041' + edit FHR 'f041' + edit HR '041' + task jgfs_atmos_post_f042 + trigger ./jgfs_atmos_post_manager:release_post042 + edit FHRGRP '043' + edit FHRLST 'f042' + edit FHR 'f042' + edit HR '042' + task jgfs_atmos_post_f043 + trigger ./jgfs_atmos_post_manager:release_post043 + edit FHRGRP '044' + edit FHRLST 'f043' + edit FHR 'f043' + edit HR '043' + task jgfs_atmos_post_f044 + trigger ./jgfs_atmos_post_manager:release_post044 + edit FHRGRP '045' + edit FHRLST 'f044' + edit FHR 'f044' + edit HR '044' + task jgfs_atmos_post_f045 + trigger ./jgfs_atmos_post_manager:release_post045 + edit FHRGRP '046' + edit FHRLST 'f045' + edit FHR 'f045' + edit HR '045' + task jgfs_atmos_post_f046 + trigger ./jgfs_atmos_post_manager:release_post046 + edit FHRGRP '047' + edit FHRLST 'f046' + edit FHR 'f046' + edit HR '046' + task jgfs_atmos_post_f047 + trigger ./jgfs_atmos_post_manager:release_post047 + edit FHRGRP '048' + edit FHRLST 'f047' + edit FHR 'f047' + edit HR '047' + task jgfs_atmos_post_f048 + trigger ./jgfs_atmos_post_manager:release_post048 + edit FHRGRP '049' + edit FHRLST 'f048' + edit FHR 'f048' + edit HR '048' + task jgfs_atmos_post_f049 + trigger ./jgfs_atmos_post_manager:release_post049 + edit FHRGRP '050' + edit FHRLST 'f049' + edit FHR 'f049' + edit HR '049' + task jgfs_atmos_post_f050 + trigger ./jgfs_atmos_post_manager:release_post050 + edit FHRGRP '051' + edit FHRLST 'f050' + edit FHR 'f050' + edit HR '050' + task jgfs_atmos_post_f051 + trigger ./jgfs_atmos_post_manager:release_post051 + edit FHRGRP '052' + edit FHRLST 'f051' + edit FHR 'f051' + edit HR '051' + task jgfs_atmos_post_f052 + trigger ./jgfs_atmos_post_manager:release_post052 + edit FHRGRP '053' + edit FHRLST 'f052' + edit FHR 'f052' + edit HR '052' + task jgfs_atmos_post_f053 + trigger ./jgfs_atmos_post_manager:release_post053 + edit FHRGRP '054' + edit FHRLST 'f053' + edit FHR 'f053' + edit HR '053' + task jgfs_atmos_post_f054 + trigger ./jgfs_atmos_post_manager:release_post054 + edit FHRGRP '055' + edit FHRLST 'f054' + edit FHR 'f054' + edit HR '054' + task jgfs_atmos_post_f055 + trigger ./jgfs_atmos_post_manager:release_post055 + edit FHRGRP '056' + edit FHRLST 'f055' + edit FHR 'f055' + edit HR '055' + task jgfs_atmos_post_f056 + trigger ./jgfs_atmos_post_manager:release_post056 + edit FHRGRP '057' + edit FHRLST 'f056' + edit FHR 'f056' + edit HR '056' + task jgfs_atmos_post_f057 + trigger ./jgfs_atmos_post_manager:release_post057 + edit FHRGRP '058' + edit FHRLST 'f057' + edit FHR 'f057' + edit HR '057' + task jgfs_atmos_post_f058 + trigger ./jgfs_atmos_post_manager:release_post058 + edit FHRGRP '059' + edit FHRLST 'f058' + edit FHR 'f058' + edit HR '058' + task jgfs_atmos_post_f059 + trigger ./jgfs_atmos_post_manager:release_post059 + edit FHRGRP '060' + edit FHRLST 'f059' + edit FHR 'f059' + edit HR '059' + task jgfs_atmos_post_f060 + trigger ./jgfs_atmos_post_manager:release_post060 + edit FHRGRP '061' + edit FHRLST 'f060' + edit FHR 'f060' + edit HR '060' + task jgfs_atmos_post_f061 + trigger ./jgfs_atmos_post_manager:release_post061 + edit FHRGRP '062' + edit FHRLST 'f061' + edit FHR 'f061' + edit HR '061' + task jgfs_atmos_post_f062 + trigger ./jgfs_atmos_post_manager:release_post062 + edit FHRGRP '063' + edit FHRLST 'f062' + edit FHR 'f062' + edit HR '062' + task jgfs_atmos_post_f063 + trigger ./jgfs_atmos_post_manager:release_post063 + edit FHRGRP '064' + edit FHRLST 'f063' + edit FHR 'f063' + edit HR '063' + task jgfs_atmos_post_f064 + trigger ./jgfs_atmos_post_manager:release_post064 + edit FHRGRP '065' + edit FHRLST 'f064' + edit FHR 'f064' + edit HR '064' + task jgfs_atmos_post_f065 + trigger ./jgfs_atmos_post_manager:release_post065 + edit FHRGRP '066' + edit FHRLST 'f065' + edit FHR 'f065' + edit HR '065' + task jgfs_atmos_post_f066 + trigger ./jgfs_atmos_post_manager:release_post066 + edit FHRGRP '067' + edit FHRLST 'f066' + edit FHR 'f066' + edit HR '066' + task jgfs_atmos_post_f067 + trigger ./jgfs_atmos_post_manager:release_post067 + edit FHRGRP '068' + edit FHRLST 'f067' + edit FHR 'f067' + edit HR '067' + task jgfs_atmos_post_f068 + trigger ./jgfs_atmos_post_manager:release_post068 + edit FHRGRP '069' + edit FHRLST 'f068' + edit FHR 'f068' + edit HR '068' + task jgfs_atmos_post_f069 + trigger ./jgfs_atmos_post_manager:release_post069 + edit FHRGRP '070' + edit FHRLST 'f069' + edit FHR 'f069' + edit HR '069' + task jgfs_atmos_post_f070 + trigger ./jgfs_atmos_post_manager:release_post070 + edit FHRGRP '071' + edit FHRLST 'f070' + edit FHR 'f070' + edit HR '070' + task jgfs_atmos_post_f071 + trigger ./jgfs_atmos_post_manager:release_post071 + edit FHRGRP '072' + edit FHRLST 'f071' + edit FHR 'f071' + edit HR '071' + task jgfs_atmos_post_f072 + trigger ./jgfs_atmos_post_manager:release_post072 + edit FHRGRP '073' + edit FHRLST 'f072' + edit FHR 'f072' + edit HR '072' + task jgfs_atmos_post_f073 + trigger ./jgfs_atmos_post_manager:release_post073 + edit FHRGRP '074' + edit FHRLST 'f073' + edit FHR 'f073' + edit HR '073' + task jgfs_atmos_post_f074 + trigger ./jgfs_atmos_post_manager:release_post074 + edit FHRGRP '075' + edit FHRLST 'f074' + edit FHR 'f074' + edit HR '074' + task jgfs_atmos_post_f075 + trigger ./jgfs_atmos_post_manager:release_post075 + edit FHRGRP '076' + edit FHRLST 'f075' + edit FHR 'f075' + edit HR '075' + task jgfs_atmos_post_f076 + trigger ./jgfs_atmos_post_manager:release_post076 + edit FHRGRP '077' + edit FHRLST 'f076' + edit FHR 'f076' + edit HR '076' + task jgfs_atmos_post_f077 + trigger ./jgfs_atmos_post_manager:release_post077 + edit FHRGRP '078' + edit FHRLST 'f077' + edit FHR 'f077' + edit HR '077' + task jgfs_atmos_post_f078 + trigger ./jgfs_atmos_post_manager:release_post078 + edit FHRGRP '079' + edit FHRLST 'f078' + edit FHR 'f078' + edit HR '078' + task jgfs_atmos_post_f079 + trigger ./jgfs_atmos_post_manager:release_post079 + edit FHRGRP '080' + edit FHRLST 'f079' + edit FHR 'f079' + edit HR '079' + task jgfs_atmos_post_f080 + trigger ./jgfs_atmos_post_manager:release_post080 + edit FHRGRP '081' + edit FHRLST 'f080' + edit FHR 'f080' + edit HR '080' + task jgfs_atmos_post_f081 + trigger ./jgfs_atmos_post_manager:release_post081 + edit FHRGRP '082' + edit FHRLST 'f081' + edit FHR 'f081' + edit HR '081' + task jgfs_atmos_post_f082 + trigger ./jgfs_atmos_post_manager:release_post082 + edit FHRGRP '083' + edit FHRLST 'f082' + edit FHR 'f082' + edit HR '082' + task jgfs_atmos_post_f083 + trigger ./jgfs_atmos_post_manager:release_post083 + edit FHRGRP '084' + edit FHRLST 'f083' + edit FHR 'f083' + edit HR '083' + task jgfs_atmos_post_f084 + trigger ./jgfs_atmos_post_manager:release_post084 + edit FHRGRP '085' + edit FHRLST 'f084' + edit FHR 'f084' + edit HR '084' + task jgfs_atmos_post_f085 + trigger ./jgfs_atmos_post_manager:release_post085 + edit FHRGRP '086' + edit FHRLST 'f085' + edit FHR 'f085' + edit HR '085' + task jgfs_atmos_post_f086 + trigger ./jgfs_atmos_post_manager:release_post086 + edit FHRGRP '087' + edit FHRLST 'f086' + edit FHR 'f086' + edit HR '086' + task jgfs_atmos_post_f087 + trigger ./jgfs_atmos_post_manager:release_post087 + edit FHRGRP '088' + edit FHRLST 'f087' + edit FHR 'f087' + edit HR '087' + task jgfs_atmos_post_f088 + trigger ./jgfs_atmos_post_manager:release_post088 + edit FHRGRP '089' + edit FHRLST 'f088' + edit FHR 'f088' + edit HR '088' + task jgfs_atmos_post_f089 + trigger ./jgfs_atmos_post_manager:release_post089 + edit FHRGRP '090' + edit FHRLST 'f089' + edit FHR 'f089' + edit HR '089' + task jgfs_atmos_post_f090 + trigger ./jgfs_atmos_post_manager:release_post090 + edit FHRGRP '091' + edit FHRLST 'f090' + edit FHR 'f090' + edit HR '090' + task jgfs_atmos_post_f091 + trigger ./jgfs_atmos_post_manager:release_post091 + edit FHRGRP '092' + edit FHRLST 'f091' + edit FHR 'f091' + edit HR '091' + task jgfs_atmos_post_f092 + trigger ./jgfs_atmos_post_manager:release_post092 + edit FHRGRP '093' + edit FHRLST 'f092' + edit FHR 'f092' + edit HR '092' + task jgfs_atmos_post_f093 + trigger ./jgfs_atmos_post_manager:release_post093 + edit FHRGRP '094' + edit FHRLST 'f093' + edit FHR 'f093' + edit HR '093' + task jgfs_atmos_post_f094 + trigger ./jgfs_atmos_post_manager:release_post094 + edit FHRGRP '095' + edit FHRLST 'f094' + edit FHR 'f094' + edit HR '094' + task jgfs_atmos_post_f095 + trigger ./jgfs_atmos_post_manager:release_post095 + edit FHRGRP '096' + edit FHRLST 'f095' + edit FHR 'f095' + edit HR '095' + task jgfs_atmos_post_f096 + trigger ./jgfs_atmos_post_manager:release_post096 + edit FHRGRP '097' + edit FHRLST 'f096' + edit FHR 'f096' + edit HR '096' + task jgfs_atmos_post_f097 + trigger ./jgfs_atmos_post_manager:release_post097 + edit FHRGRP '098' + edit FHRLST 'f097' + edit FHR 'f097' + edit HR '097' + task jgfs_atmos_post_f098 + trigger ./jgfs_atmos_post_manager:release_post098 + edit FHRGRP '099' + edit FHRLST 'f098' + edit FHR 'f098' + edit HR '098' + task jgfs_atmos_post_f099 + trigger ./jgfs_atmos_post_manager:release_post099 + edit FHRGRP '100' + edit FHRLST 'f099' + edit FHR 'f099' + edit HR '099' + task jgfs_atmos_post_f100 + trigger ./jgfs_atmos_post_manager:release_post100 + edit FHRGRP '101' + edit FHRLST 'f100' + edit FHR 'f100' + edit HR '100' + task jgfs_atmos_post_f101 + trigger ./jgfs_atmos_post_manager:release_post101 + edit FHRGRP '102' + edit FHRLST 'f101' + edit FHR 'f101' + edit HR '101' + task jgfs_atmos_post_f102 + trigger ./jgfs_atmos_post_manager:release_post102 + edit FHRGRP '103' + edit FHRLST 'f102' + edit FHR 'f102' + edit HR '102' + task jgfs_atmos_post_f103 + trigger ./jgfs_atmos_post_manager:release_post103 + edit FHRGRP '104' + edit FHRLST 'f103' + edit FHR 'f103' + edit HR '103' + task jgfs_atmos_post_f104 + trigger ./jgfs_atmos_post_manager:release_post104 + edit FHRGRP '105' + edit FHRLST 'f104' + edit FHR 'f104' + edit HR '104' + task jgfs_atmos_post_f105 + trigger ./jgfs_atmos_post_manager:release_post105 + edit FHRGRP '106' + edit FHRLST 'f105' + edit FHR 'f105' + edit HR '105' + task jgfs_atmos_post_f106 + trigger ./jgfs_atmos_post_manager:release_post106 + edit FHRGRP '107' + edit FHRLST 'f106' + edit FHR 'f106' + edit HR '106' + task jgfs_atmos_post_f107 + trigger ./jgfs_atmos_post_manager:release_post107 + edit FHRGRP '108' + edit FHRLST 'f107' + edit FHR 'f107' + edit HR '107' + task jgfs_atmos_post_f108 + trigger ./jgfs_atmos_post_manager:release_post108 + edit FHRGRP '109' + edit FHRLST 'f108' + edit FHR 'f108' + edit HR '108' + task jgfs_atmos_post_f109 + trigger ./jgfs_atmos_post_manager:release_post109 + edit FHRGRP '110' + edit FHRLST 'f109' + edit FHR 'f109' + edit HR '109' + task jgfs_atmos_post_f110 + trigger ./jgfs_atmos_post_manager:release_post110 + edit FHRGRP '111' + edit FHRLST 'f110' + edit FHR 'f110' + edit HR '110' + task jgfs_atmos_post_f111 + trigger ./jgfs_atmos_post_manager:release_post111 + edit FHRGRP '112' + edit FHRLST 'f111' + edit FHR 'f111' + edit HR '111' + task jgfs_atmos_post_f112 + trigger ./jgfs_atmos_post_manager:release_post112 + edit FHRGRP '113' + edit FHRLST 'f112' + edit FHR 'f112' + edit HR '112' + task jgfs_atmos_post_f113 + trigger ./jgfs_atmos_post_manager:release_post113 + edit FHRGRP '114' + edit FHRLST 'f113' + edit FHR 'f113' + edit HR '113' + task jgfs_atmos_post_f114 + trigger ./jgfs_atmos_post_manager:release_post114 + edit FHRGRP '115' + edit FHRLST 'f114' + edit FHR 'f114' + edit HR '114' + task jgfs_atmos_post_f115 + trigger ./jgfs_atmos_post_manager:release_post115 + edit FHRGRP '116' + edit FHRLST 'f115' + edit FHR 'f115' + edit HR '115' + task jgfs_atmos_post_f116 + trigger ./jgfs_atmos_post_manager:release_post116 + edit FHRGRP '117' + edit FHRLST 'f116' + edit FHR 'f116' + edit HR '116' + task jgfs_atmos_post_f117 + trigger ./jgfs_atmos_post_manager:release_post117 + edit FHRGRP '118' + edit FHRLST 'f117' + edit FHR 'f117' + edit HR '117' + task jgfs_atmos_post_f118 + trigger ./jgfs_atmos_post_manager:release_post118 + edit FHRGRP '119' + edit FHRLST 'f118' + edit FHR 'f118' + edit HR '118' + task jgfs_atmos_post_f119 + trigger ./jgfs_atmos_post_manager:release_post119 + edit FHRGRP '120' + edit FHRLST 'f119' + edit FHR 'f119' + edit HR '119' + task jgfs_atmos_post_f120 + trigger ./jgfs_atmos_post_manager:release_post120 + edit FHRGRP '121' + edit FHRLST 'f120' + edit FHR 'f120' + edit HR '120' + task jgfs_atmos_post_f123 + trigger ./jgfs_atmos_post_manager:release_post123 + edit FHRGRP '122' + edit FHRLST 'f123' + edit FHR 'f123' + edit HR '123' + task jgfs_atmos_post_f126 + trigger ./jgfs_atmos_post_manager:release_post126 + edit FHRGRP '123' + edit FHRLST 'f126' + edit FHR 'f126' + edit HR '126' + task jgfs_atmos_post_f129 + trigger ./jgfs_atmos_post_manager:release_post129 + edit FHRGRP '124' + edit FHRLST 'f129' + edit FHR 'f129' + edit HR '129' + task jgfs_atmos_post_f132 + trigger ./jgfs_atmos_post_manager:release_post132 + edit FHRGRP '125' + edit FHRLST 'f132' + edit FHR 'f132' + edit HR '132' + task jgfs_atmos_post_f135 + trigger ./jgfs_atmos_post_manager:release_post135 + edit FHRGRP '126' + edit FHRLST 'f135' + edit FHR 'f135' + edit HR '135' + task jgfs_atmos_post_f138 + trigger ./jgfs_atmos_post_manager:release_post138 + edit FHRGRP '127' + edit FHRLST 'f138' + edit FHR 'f138' + edit HR '138' + task jgfs_atmos_post_f141 + trigger ./jgfs_atmos_post_manager:release_post141 + edit FHRGRP '128' + edit FHRLST 'f141' + edit FHR 'f141' + edit HR '141' + task jgfs_atmos_post_f144 + trigger ./jgfs_atmos_post_manager:release_post144 + edit FHRGRP '129' + edit FHRLST 'f144' + edit FHR 'f144' + edit HR '144' + task jgfs_atmos_post_f147 + trigger ./jgfs_atmos_post_manager:release_post147 + edit FHRGRP '130' + edit FHRLST 'f147' + edit FHR 'f147' + edit HR '147' + task jgfs_atmos_post_f150 + trigger ./jgfs_atmos_post_manager:release_post150 + edit FHRGRP '131' + edit FHRLST 'f150' + edit FHR 'f150' + edit HR '150' + task jgfs_atmos_post_f153 + trigger ./jgfs_atmos_post_manager:release_post153 + edit FHRGRP '132' + edit FHRLST 'f153' + edit FHR 'f153' + edit HR '153' + task jgfs_atmos_post_f156 + trigger ./jgfs_atmos_post_manager:release_post156 + edit FHRGRP '133' + edit FHRLST 'f156' + edit FHR 'f156' + edit HR '156' + task jgfs_atmos_post_f159 + trigger ./jgfs_atmos_post_manager:release_post159 + edit FHRGRP '134' + edit FHRLST 'f159' + edit FHR 'f159' + edit HR '159' + task jgfs_atmos_post_f162 + trigger ./jgfs_atmos_post_manager:release_post162 + edit FHRGRP '135' + edit FHRLST 'f162' + edit FHR 'f162' + edit HR '162' + task jgfs_atmos_post_f165 + trigger ./jgfs_atmos_post_manager:release_post165 + edit FHRGRP '136' + edit FHRLST 'f165' + edit FHR 'f165' + edit HR '165' + task jgfs_atmos_post_f168 + trigger ./jgfs_atmos_post_manager:release_post168 + edit FHRGRP '137' + edit FHRLST 'f168' + edit FHR 'f168' + edit HR '168' + task jgfs_atmos_post_f171 + trigger ./jgfs_atmos_post_manager:release_post171 + edit FHRGRP '138' + edit FHRLST 'f171' + edit FHR 'f171' + edit HR '171' + task jgfs_atmos_post_f174 + trigger ./jgfs_atmos_post_manager:release_post174 + edit FHRGRP '139' + edit FHRLST 'f174' + edit FHR 'f174' + edit HR '174' + task jgfs_atmos_post_f177 + trigger ./jgfs_atmos_post_manager:release_post177 + edit FHRGRP '140' + edit FHRLST 'f177' + edit FHR 'f177' + edit HR '177' + task jgfs_atmos_post_f180 + trigger ./jgfs_atmos_post_manager:release_post180 + edit FHRGRP '141' + edit FHRLST 'f180' + edit FHR 'f180' + edit HR '180' + task jgfs_atmos_post_f183 + trigger ./jgfs_atmos_post_manager:release_post183 + edit FHRGRP '142' + edit FHRLST 'f183' + edit FHR 'f183' + edit HR '183' + task jgfs_atmos_post_f186 + trigger ./jgfs_atmos_post_manager:release_post186 + edit FHRGRP '143' + edit FHRLST 'f186' + edit FHR 'f186' + edit HR '186' + task jgfs_atmos_post_f189 + trigger ./jgfs_atmos_post_manager:release_post189 + edit FHRGRP '144' + edit FHRLST 'f189' + edit FHR 'f189' + edit HR '189' + task jgfs_atmos_post_f192 + trigger ./jgfs_atmos_post_manager:release_post192 + edit FHRGRP '145' + edit FHRLST 'f192' + edit FHR 'f192' + edit HR '192' + task jgfs_atmos_post_f195 + trigger ./jgfs_atmos_post_manager:release_post195 + edit FHRGRP '146' + edit FHRLST 'f195' + edit FHR 'f195' + edit HR '195' + task jgfs_atmos_post_f198 + trigger ./jgfs_atmos_post_manager:release_post198 + edit FHRGRP '147' + edit FHRLST 'f198' + edit FHR 'f198' + edit HR '198' + task jgfs_atmos_post_f201 + trigger ./jgfs_atmos_post_manager:release_post201 + edit FHRGRP '148' + edit FHRLST 'f201' + edit FHR 'f201' + edit HR '201' + task jgfs_atmos_post_f204 + trigger ./jgfs_atmos_post_manager:release_post204 + edit FHRGRP '149' + edit FHRLST 'f204' + edit FHR 'f204' + edit HR '204' + task jgfs_atmos_post_f207 + trigger ./jgfs_atmos_post_manager:release_post207 + edit FHRGRP '150' + edit FHRLST 'f207' + edit FHR 'f207' + edit HR '207' + task jgfs_atmos_post_f210 + trigger ./jgfs_atmos_post_manager:release_post210 + edit FHRGRP '151' + edit FHRLST 'f210' + edit FHR 'f210' + edit HR '210' + task jgfs_atmos_post_f213 + trigger ./jgfs_atmos_post_manager:release_post213 + edit FHRGRP '152' + edit FHRLST 'f213' + edit FHR 'f213' + edit HR '213' + task jgfs_atmos_post_f216 + trigger ./jgfs_atmos_post_manager:release_post216 + edit FHRGRP '153' + edit FHRLST 'f216' + edit FHR 'f216' + edit HR '216' + task jgfs_atmos_post_f219 + trigger ./jgfs_atmos_post_manager:release_post219 + edit FHRGRP '154' + edit FHRLST 'f219' + edit FHR 'f219' + edit HR '219' + task jgfs_atmos_post_f222 + trigger ./jgfs_atmos_post_manager:release_post222 + edit FHRGRP '155' + edit FHRLST 'f222' + edit FHR 'f222' + edit HR '222' + task jgfs_atmos_post_f225 + trigger ./jgfs_atmos_post_manager:release_post225 + edit FHRGRP '156' + edit FHRLST 'f225' + edit FHR 'f225' + edit HR '225' + task jgfs_atmos_post_f228 + trigger ./jgfs_atmos_post_manager:release_post228 + edit FHRGRP '157' + edit FHRLST 'f228' + edit FHR 'f228' + edit HR '228' + task jgfs_atmos_post_f231 + trigger ./jgfs_atmos_post_manager:release_post231 + edit FHRGRP '158' + edit FHRLST 'f231' + edit FHR 'f231' + edit HR '231' + task jgfs_atmos_post_f234 + trigger ./jgfs_atmos_post_manager:release_post234 + edit FHRGRP '159' + edit FHRLST 'f234' + edit FHR 'f234' + edit HR '234' + task jgfs_atmos_post_f237 + trigger ./jgfs_atmos_post_manager:release_post237 + edit FHRGRP '160' + edit FHRLST 'f237' + edit FHR 'f237' + edit HR '237' + task jgfs_atmos_post_f240 + trigger ./jgfs_atmos_post_manager:release_post240 + edit FHRGRP '161' + edit FHRLST 'f240' + edit FHR 'f240' + edit HR '240' + task jgfs_atmos_post_f243 + trigger ./jgfs_atmos_post_manager:release_post243 + edit FHRGRP '162' + edit FHRLST 'f243' + edit FHR 'f243' + edit HR '243' + task jgfs_atmos_post_f246 + trigger ./jgfs_atmos_post_manager:release_post246 + edit FHRGRP '163' + edit FHRLST 'f246' + edit FHR 'f246' + edit HR '246' + task jgfs_atmos_post_f249 + trigger ./jgfs_atmos_post_manager:release_post249 + edit FHRGRP '164' + edit FHRLST 'f249' + edit FHR 'f249' + edit HR '249' + task jgfs_atmos_post_f252 + trigger ./jgfs_atmos_post_manager:release_post252 + edit FHRGRP '165' + edit FHRLST 'f252' + edit FHR 'f252' + edit HR '252' + task jgfs_atmos_post_f255 + trigger ./jgfs_atmos_post_manager:release_post255 + edit FHRGRP '166' + edit FHRLST 'f255' + edit FHR 'f255' + edit HR '255' + task jgfs_atmos_post_f258 + trigger ./jgfs_atmos_post_manager:release_post258 + edit FHRGRP '167' + edit FHRLST 'f258' + edit FHR 'f258' + edit HR '258' + task jgfs_atmos_post_f261 + trigger ./jgfs_atmos_post_manager:release_post261 + edit FHRGRP '168' + edit FHRLST 'f261' + edit FHR 'f261' + edit HR '261' + task jgfs_atmos_post_f264 + trigger ./jgfs_atmos_post_manager:release_post264 + edit FHRGRP '169' + edit FHRLST 'f264' + edit FHR 'f264' + edit HR '264' + task jgfs_atmos_post_f267 + trigger ./jgfs_atmos_post_manager:release_post267 + edit FHRGRP '170' + edit FHRLST 'f267' + edit FHR 'f267' + edit HR '267' + task jgfs_atmos_post_f270 + trigger ./jgfs_atmos_post_manager:release_post270 + edit FHRGRP '171' + edit FHRLST 'f270' + edit FHR 'f270' + edit HR '270' + task jgfs_atmos_post_f273 + trigger ./jgfs_atmos_post_manager:release_post273 + edit FHRGRP '172' + edit FHRLST 'f273' + edit FHR 'f273' + edit HR '273' + task jgfs_atmos_post_f276 + trigger ./jgfs_atmos_post_manager:release_post276 + edit FHRGRP '173' + edit FHRLST 'f276' + edit FHR 'f276' + edit HR '276' + task jgfs_atmos_post_f279 + trigger ./jgfs_atmos_post_manager:release_post279 + edit FHRGRP '174' + edit FHRLST 'f279' + edit FHR 'f279' + edit HR '279' + task jgfs_atmos_post_f282 + trigger ./jgfs_atmos_post_manager:release_post282 + edit FHRGRP '175' + edit FHRLST 'f282' + edit FHR 'f282' + edit HR '282' + task jgfs_atmos_post_f285 + trigger ./jgfs_atmos_post_manager:release_post285 + edit FHRGRP '176' + edit FHRLST 'f285' + edit FHR 'f285' + edit HR '285' + task jgfs_atmos_post_f288 + trigger ./jgfs_atmos_post_manager:release_post288 + edit FHRGRP '177' + edit FHRLST 'f288' + edit FHR 'f288' + edit HR '288' + task jgfs_atmos_post_f291 + trigger ./jgfs_atmos_post_manager:release_post291 + edit FHRGRP '178' + edit FHRLST 'f291' + edit FHR 'f291' + edit HR '291' + task jgfs_atmos_post_f294 + trigger ./jgfs_atmos_post_manager:release_post294 + edit FHRGRP '179' + edit FHRLST 'f294' + edit FHR 'f294' + edit HR '294' + task jgfs_atmos_post_f297 + trigger ./jgfs_atmos_post_manager:release_post297 + edit FHRGRP '180' + edit FHRLST 'f297' + edit FHR 'f297' + edit HR '297' + task jgfs_atmos_post_f300 + trigger ./jgfs_atmos_post_manager:release_post300 + edit FHRGRP '181' + edit FHRLST 'f300' + edit FHR 'f300' + edit HR '300' + task jgfs_atmos_post_f303 + trigger ./jgfs_atmos_post_manager:release_post303 + edit FHRGRP '182' + edit FHRLST 'f303' + edit FHR 'f303' + edit HR '303' + task jgfs_atmos_post_f306 + trigger ./jgfs_atmos_post_manager:release_post306 + edit FHRGRP '183' + edit FHRLST 'f306' + edit FHR 'f306' + edit HR '306' + task jgfs_atmos_post_f309 + trigger ./jgfs_atmos_post_manager:release_post309 + edit FHRGRP '184' + edit FHRLST 'f309' + edit FHR 'f309' + edit HR '309' + task jgfs_atmos_post_f312 + trigger ./jgfs_atmos_post_manager:release_post312 + edit FHRGRP '185' + edit FHRLST 'f312' + edit FHR 'f312' + edit HR '312' + task jgfs_atmos_post_f315 + trigger ./jgfs_atmos_post_manager:release_post315 + edit FHRGRP '186' + edit FHRLST 'f315' + edit FHR 'f315' + edit HR '315' + task jgfs_atmos_post_f318 + trigger ./jgfs_atmos_post_manager:release_post318 + edit FHRGRP '187' + edit FHRLST 'f318' + edit FHR 'f318' + edit HR '318' + task jgfs_atmos_post_f321 + trigger ./jgfs_atmos_post_manager:release_post321 + edit FHRGRP '188' + edit FHRLST 'f321' + edit FHR 'f321' + edit HR '321' + task jgfs_atmos_post_f324 + trigger ./jgfs_atmos_post_manager:release_post324 + edit FHRGRP '189' + edit FHRLST 'f324' + edit FHR 'f324' + edit HR '324' + task jgfs_atmos_post_f327 + trigger ./jgfs_atmos_post_manager:release_post327 + edit FHRGRP '190' + edit FHRLST 'f327' + edit FHR 'f327' + edit HR '327' + task jgfs_atmos_post_f330 + trigger ./jgfs_atmos_post_manager:release_post330 + edit FHRGRP '191' + edit FHRLST 'f330' + edit FHR 'f330' + edit HR '330' + task jgfs_atmos_post_f333 + trigger ./jgfs_atmos_post_manager:release_post333 + edit FHRGRP '192' + edit FHRLST 'f333' + edit FHR 'f333' + edit HR '333' + task jgfs_atmos_post_f336 + trigger ./jgfs_atmos_post_manager:release_post336 + edit FHRGRP '193' + edit FHRLST 'f336' + edit FHR 'f336' + edit HR '336' + task jgfs_atmos_post_f339 + trigger ./jgfs_atmos_post_manager:release_post339 + edit FHRGRP '194' + edit FHRLST 'f339' + edit FHR 'f339' + edit HR '339' + task jgfs_atmos_post_f342 + trigger ./jgfs_atmos_post_manager:release_post342 + edit FHRGRP '195' + edit FHRLST 'f342' + edit FHR 'f342' + edit HR '342' + task jgfs_atmos_post_f345 + trigger ./jgfs_atmos_post_manager:release_post345 + edit FHRGRP '196' + edit FHRLST 'f345' + edit FHR 'f345' + edit HR '345' + task jgfs_atmos_post_f348 + trigger ./jgfs_atmos_post_manager:release_post348 + edit FHRGRP '197' + edit FHRLST 'f348' + edit FHR 'f348' + edit HR '348' + task jgfs_atmos_post_f351 + trigger ./jgfs_atmos_post_manager:release_post351 + edit FHRGRP '198' + edit FHRLST 'f351' + edit FHR 'f351' + edit HR '351' + task jgfs_atmos_post_f354 + trigger ./jgfs_atmos_post_manager:release_post354 + edit FHRGRP '199' + edit FHRLST 'f354' + edit FHR 'f354' + edit HR '354' + task jgfs_atmos_post_f357 + trigger ./jgfs_atmos_post_manager:release_post357 + edit FHRGRP '200' + edit FHRLST 'f357' + edit FHR 'f357' + edit HR '357' + task jgfs_atmos_post_f360 + trigger ./jgfs_atmos_post_manager:release_post360 + edit FHRGRP '201' + edit FHRLST 'f360' + edit FHR 'f360' + edit HR '360' + task jgfs_atmos_post_f363 + trigger ./jgfs_atmos_post_manager:release_post363 + edit FHRGRP '202' + edit FHRLST 'f363' + edit FHR 'f363' + edit HR '363' + task jgfs_atmos_post_f366 + trigger ./jgfs_atmos_post_manager:release_post366 + edit FHRGRP '203' + edit FHRLST 'f366' + edit FHR 'f366' + edit HR '366' + task jgfs_atmos_post_f369 + trigger ./jgfs_atmos_post_manager:release_post369 + edit FHRGRP '204' + edit FHRLST 'f369' + edit FHR 'f369' + edit HR '369' + task jgfs_atmos_post_f372 + trigger ./jgfs_atmos_post_manager:release_post372 + edit FHRGRP '205' + edit FHRLST 'f372' + edit FHR 'f372' + edit HR '372' + task jgfs_atmos_post_f375 + trigger ./jgfs_atmos_post_manager:release_post375 + edit FHRGRP '206' + edit FHRLST 'f375' + edit FHR 'f375' + edit HR '375' + task jgfs_atmos_post_f378 + trigger ./jgfs_atmos_post_manager:release_post378 + edit FHRGRP '207' + edit FHRLST 'f378' + edit FHR 'f378' + edit HR '378' + task jgfs_atmos_post_f381 + trigger ./jgfs_atmos_post_manager:release_post381 + edit FHRGRP '208' + edit FHRLST 'f381' + edit FHR 'f381' + edit HR '381' + task jgfs_atmos_post_f384 + trigger ./jgfs_atmos_post_manager:release_post384 + edit FHRGRP '209' + edit FHRLST 'f384' + edit FHR 'f384' + edit HR '384' + endfamily + family post_processing + family bufr_sounding + task jgfs_atmos_postsnd + trigger ../../post/jgfs_atmos_post_manager:release_post000 + endfamily + family bulletins + task jgfs_atmos_fbwind + trigger ../../post/jgfs_atmos_post_f006 == complete and ../../post/jgfs_atmos_post_f012 == complete and ../../post/jgfs_atmos_post_f024 == complete + endfamily + family awips_20km_1p0 + task jgfs_atmos_awips_f000 + trigger ../../post/jgfs_atmos_post_f000 == complete + edit FHRGRP '000' + edit FHRLST 'f000' + edit FCSTHR '000' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f003 + trigger ../../post/jgfs_atmos_post_f003 == complete + edit FHRGRP '003' + edit FHRLST 'f003' + edit FCSTHR '003' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f006 + trigger ../../post/jgfs_atmos_post_f006 == complete + edit FHRGRP '006' + edit FHRLST 'f006' + edit FCSTHR '006' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f009 + trigger ../../post/jgfs_atmos_post_f009 == complete + edit FHRGRP '009' + edit FHRLST 'f009' + edit FCSTHR '009' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f012 + trigger ../../post/jgfs_atmos_post_f012 == complete + edit FHRGRP '012' + edit FHRLST 'f012' + edit FCSTHR '012' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f015 + trigger ../../post/jgfs_atmos_post_f015 == complete + edit FHRGRP '015' + edit FHRLST 'f015' + edit FCSTHR '015' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f018 + trigger ../../post/jgfs_atmos_post_f018 == complete + edit FHRGRP '018' + edit FHRLST 'f018' + edit FCSTHR '018' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f021 + trigger ../../post/jgfs_atmos_post_f021 == complete + edit FHRGRP '021' + edit FHRLST 'f021' + edit FCSTHR '021' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f024 + trigger ../../post/jgfs_atmos_post_f024 == complete + edit FHRGRP '024' + edit FHRLST 'f024' + edit FCSTHR '024' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f027 + trigger ../../post/jgfs_atmos_post_f027 == complete + edit FHRGRP '027' + edit FHRLST 'f027' + edit FCSTHR '027' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f030 + trigger ../../post/jgfs_atmos_post_f030 == complete + edit FHRGRP '030' + edit FHRLST 'f030' + edit FCSTHR '030' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f033 + trigger ../../post/jgfs_atmos_post_f033 == complete + edit FHRGRP '033' + edit FHRLST 'f033' + edit FCSTHR '033' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f036 + trigger ../../post/jgfs_atmos_post_f036 == complete + edit FHRGRP '036' + edit FHRLST 'f036' + edit FCSTHR '036' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f039 + trigger ../../post/jgfs_atmos_post_f039 == complete + edit FHRGRP '039' + edit FHRLST 'f039' + edit FCSTHR '039' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f042 + trigger ../../post/jgfs_atmos_post_f042 == complete + edit FHRGRP '042' + edit FHRLST 'f042' + edit FCSTHR '042' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f045 + trigger ../../post/jgfs_atmos_post_f045 == complete + edit FHRGRP '045' + edit FHRLST 'f045' + edit FCSTHR '045' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f048 + trigger ../../post/jgfs_atmos_post_f048 == complete + edit FHRGRP '048' + edit FHRLST 'f048' + edit FCSTHR '048' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f051 + trigger ../../post/jgfs_atmos_post_f051 == complete + edit FHRGRP '051' + edit FHRLST 'f051' + edit FCSTHR '051' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f054 + trigger ../../post/jgfs_atmos_post_f054 == complete + edit FHRGRP '054' + edit FHRLST 'f054' + edit FCSTHR '054' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f057 + trigger ../../post/jgfs_atmos_post_f057 == complete + edit FHRGRP '057' + edit FHRLST 'f057' + edit FCSTHR '057' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f060 + trigger ../../post/jgfs_atmos_post_f060 == complete + edit FHRGRP '060' + edit FHRLST 'f060' + edit FCSTHR '060' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f063 + trigger ../../post/jgfs_atmos_post_f063 == complete + edit FHRGRP '063' + edit FHRLST 'f063' + edit FCSTHR '063' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f066 + trigger ../../post/jgfs_atmos_post_f066 == complete + edit FHRGRP '066' + edit FHRLST 'f066' + edit FCSTHR '066' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f069 + trigger ../../post/jgfs_atmos_post_f069 == complete + edit FHRGRP '069' + edit FHRLST 'f069' + edit FCSTHR '069' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f072 + trigger ../../post/jgfs_atmos_post_f072 == complete + edit FHRGRP '072' + edit FHRLST 'f072' + edit FCSTHR '072' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f075 + trigger ../../post/jgfs_atmos_post_f075 == complete + edit FHRGRP '075' + edit FHRLST 'f075' + edit FCSTHR '075' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f078 + trigger ../../post/jgfs_atmos_post_f078 == complete + edit FHRGRP '078' + edit FHRLST 'f078' + edit FCSTHR '078' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f081 + trigger ../../post/jgfs_atmos_post_f081 == complete + edit FHRGRP '081' + edit FHRLST 'f081' + edit FCSTHR '081' + edit TRDRUN 'NO' + task jgfs_atmos_awips_f084 + trigger ../../post/jgfs_atmos_post_f084 == complete + edit FHRGRP '084' + edit FHRLST 'f084' + edit FCSTHR '084' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f090 + trigger ../../post/jgfs_atmos_post_f090 == complete + edit FHRGRP '090' + edit FHRLST 'f090' + edit FCSTHR '090' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f096 + trigger ../../post/jgfs_atmos_post_f096 == complete + edit FHRGRP '096' + edit FHRLST 'f096' + edit FCSTHR '096' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f102 + trigger ../../post/jgfs_atmos_post_f102 == complete + edit FHRGRP '102' + edit FHRLST 'f102' + edit FCSTHR '102' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f108 + trigger ../../post/jgfs_atmos_post_f108 == complete + edit FHRGRP '108' + edit FHRLST 'f108' + edit FCSTHR '108' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f114 + trigger ../../post/jgfs_atmos_post_f114 == complete + edit FHRGRP '114' + edit FHRLST 'f114' + edit FCSTHR '114' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f120 + trigger ../../post/jgfs_atmos_post_f120 == complete + edit FHRGRP '120' + edit FHRLST 'f120' + edit FCSTHR '120' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f126 + trigger ../../post/jgfs_atmos_post_f126 == complete + edit FHRGRP '126' + edit FHRLST 'f126' + edit FCSTHR '126' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f132 + trigger ../../post/jgfs_atmos_post_f132 == complete + edit FHRGRP '132' + edit FHRLST 'f132' + edit FCSTHR '132' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f138 + trigger ../../post/jgfs_atmos_post_f138 == complete + edit FHRGRP '138' + edit FHRLST 'f138' + edit FCSTHR '138' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f144 + trigger ../../post/jgfs_atmos_post_f144 == complete + edit FHRGRP '144' + edit FHRLST 'f144' + edit FCSTHR '144' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f150 + trigger ../../post/jgfs_atmos_post_f150 == complete + edit FHRGRP '150' + edit FHRLST 'f150' + edit FCSTHR '150' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f156 + trigger ../../post/jgfs_atmos_post_f156 == complete + edit FHRGRP '156' + edit FHRLST 'f156' + edit FCSTHR '156' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f162 + trigger ../../post/jgfs_atmos_post_f162 == complete + edit FHRGRP '162' + edit FHRLST 'f162' + edit FCSTHR '162' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f168 + trigger ../../post/jgfs_atmos_post_f168 == complete + edit FHRGRP '168' + edit FHRLST 'f168' + edit FCSTHR '168' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f174 + trigger ../../post/jgfs_atmos_post_f174 == complete + edit FHRGRP '174' + edit FHRLST 'f174' + edit FCSTHR '174' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f180 + trigger ../../post/jgfs_atmos_post_f180 == complete + edit FHRGRP '180' + edit FHRLST 'f180' + edit FCSTHR '180' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f186 + trigger ../../post/jgfs_atmos_post_f186 == complete + edit FHRGRP '186' + edit FHRLST 'f186' + edit FCSTHR '186' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f192 + trigger ../../post/jgfs_atmos_post_f192 == complete + edit FHRGRP '192' + edit FHRLST 'f192' + edit FCSTHR '192' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f198 + trigger ../../post/jgfs_atmos_post_f198 == complete + edit FHRGRP '198' + edit FHRLST 'f198' + edit FCSTHR '198' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f204 + trigger ../../post/jgfs_atmos_post_f204 == complete + edit FHRGRP '204' + edit FHRLST 'f204' + edit FCSTHR '204' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f210 + trigger ../../post/jgfs_atmos_post_f210 == complete + edit FHRGRP '210' + edit FHRLST 'f210' + edit FCSTHR '210' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f216 + trigger ../../post/jgfs_atmos_post_f216 == complete + edit FHRGRP '216' + edit FHRLST 'f216' + edit FCSTHR '216' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f222 + trigger ../../post/jgfs_atmos_post_f222 == complete + edit FHRGRP '222' + edit FHRLST 'f222' + edit FCSTHR '222' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f228 + trigger ../../post/jgfs_atmos_post_f228 == complete + edit FHRGRP '228' + edit FHRLST 'f228' + edit FCSTHR '228' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f234 + trigger ../../post/jgfs_atmos_post_f234 == complete + edit FHRGRP '234' + edit FHRLST 'f234' + edit FCSTHR '234' + edit TRDRUN 'YES' + task jgfs_atmos_awips_f240 + trigger ../../post/jgfs_atmos_post_f240 == complete + edit FHRGRP '240' + edit FHRLST 'f240' + edit FCSTHR '240' + edit TRDRUN 'YES' + endfamily + family awips_g2 + task jgfs_atmos_awips_g2_f000 + trigger ../../post/jgfs_atmos_post_f000 == complete + edit FHRGRP '000' + edit FHRLST 'f000' + edit FCSTHR '000' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f006 + trigger ../../post/jgfs_atmos_post_f006 == complete + edit FHRGRP '006' + edit FHRLST 'f006' + edit FCSTHR '006' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f012 + trigger ../../post/jgfs_atmos_post_f012 == complete + edit FHRGRP '012' + edit FHRLST 'f012' + edit FCSTHR '012' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f018 + trigger ../../post/jgfs_atmos_post_f018 == complete + edit FHRGRP '018' + edit FHRLST 'f018' + edit FCSTHR '018' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f024 + trigger ../../post/jgfs_atmos_post_f024 == complete + edit FHRGRP '024' + edit FHRLST 'f024' + edit FCSTHR '024' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f030 + trigger ../../post/jgfs_atmos_post_f030 == complete + edit FHRGRP '030' + edit FHRLST 'f030' + edit FCSTHR '030' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f036 + trigger ../../post/jgfs_atmos_post_f036 == complete + edit FHRGRP '036' + edit FHRLST 'f036' + edit FCSTHR '036' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f042 + trigger ../../post/jgfs_atmos_post_f042 == complete + edit FHRGRP '042' + edit FHRLST 'f042' + edit FCSTHR '042' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f048 + trigger ../../post/jgfs_atmos_post_f048 == complete + edit FHRGRP '048' + edit FHRLST 'f048' + edit FCSTHR '048' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f054 + trigger ../../post/jgfs_atmos_post_f054 == complete + edit FHRGRP '054' + edit FHRLST 'f054' + edit FCSTHR '054' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f060 + trigger ../../post/jgfs_atmos_post_f060 == complete + edit FHRGRP '060' + edit FHRLST 'f060' + edit FCSTHR '060' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f066 + trigger ../../post/jgfs_atmos_post_f066 == complete + edit FHRGRP '066' + edit FHRLST 'f066' + edit FCSTHR '066' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f072 + trigger ../../post/jgfs_atmos_post_f072 == complete + edit FHRGRP '072' + edit FHRLST 'f072' + edit FCSTHR '072' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f078 + trigger ../../post/jgfs_atmos_post_f078 == complete + edit FHRGRP '078' + edit FHRLST 'f078' + edit FCSTHR '078' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f084 + trigger ../../post/jgfs_atmos_post_f084 == complete + edit FHRGRP '084' + edit FHRLST 'f084' + edit FCSTHR '084' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f090 + trigger ../../post/jgfs_atmos_post_f090 == complete + edit FHRGRP '090' + edit FHRLST 'f090' + edit FCSTHR '090' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f096 + trigger ../../post/jgfs_atmos_post_f096 == complete + edit FHRGRP '096' + edit FHRLST 'f096' + edit FCSTHR '096' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f102 + trigger ../../post/jgfs_atmos_post_f102 == complete + edit FHRGRP '102' + edit FHRLST 'f102' + edit FCSTHR '102' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f108 + trigger ../../post/jgfs_atmos_post_f108 == complete + edit FHRGRP '108' + edit FHRLST 'f108' + edit FCSTHR '108' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f114 + trigger ../../post/jgfs_atmos_post_f114 == complete + edit FHRGRP '114' + edit FHRLST 'f114' + edit FCSTHR '114' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f120 + trigger ../../post/jgfs_atmos_post_f120 == complete + edit FHRGRP '120' + edit FHRLST 'f120' + edit FCSTHR '120' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f126 + trigger ../../post/jgfs_atmos_post_f126 == complete + edit FHRGRP '126' + edit FHRLST 'f126' + edit FCSTHR '126' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f132 + trigger ../../post/jgfs_atmos_post_f132 == complete + edit FHRGRP '132' + edit FHRLST 'f132' + edit FCSTHR '132' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f138 + trigger ../../post/jgfs_atmos_post_f138 == complete + edit FHRGRP '138' + edit FHRLST 'f138' + edit FCSTHR '138' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f144 + trigger ../../post/jgfs_atmos_post_f144 == complete + edit FHRGRP '144' + edit FHRLST 'f144' + edit FCSTHR '144' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f150 + trigger ../../post/jgfs_atmos_post_f150 == complete + edit FHRGRP '150' + edit FHRLST 'f150' + edit FCSTHR '150' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f156 + trigger ../../post/jgfs_atmos_post_f156 == complete + edit FHRGRP '156' + edit FHRLST 'f156' + edit FCSTHR '156' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f162 + trigger ../../post/jgfs_atmos_post_f162 == complete + edit FHRGRP '162' + edit FHRLST 'f162' + edit FCSTHR '162' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f168 + trigger ../../post/jgfs_atmos_post_f168 == complete + edit FHRGRP '168' + edit FHRLST 'f168' + edit FCSTHR '168' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f174 + trigger ../../post/jgfs_atmos_post_f174 == complete + edit FHRGRP '174' + edit FHRLST 'f174' + edit FCSTHR '174' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f180 + trigger ../../post/jgfs_atmos_post_f180 == complete + edit FHRGRP '180' + edit FHRLST 'f180' + edit FCSTHR '180' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f186 + trigger ../../post/jgfs_atmos_post_f186 == complete + edit FHRGRP '186' + edit FHRLST 'f186' + edit FCSTHR '186' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f192 + trigger ../../post/jgfs_atmos_post_f192 == complete + edit FHRGRP '192' + edit FHRLST 'f192' + edit FCSTHR '192' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f198 + trigger ../../post/jgfs_atmos_post_f198 == complete + edit FHRGRP '198' + edit FHRLST 'f198' + edit FCSTHR '198' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f204 + trigger ../../post/jgfs_atmos_post_f204 == complete + edit FHRGRP '204' + edit FHRLST 'f204' + edit FCSTHR '204' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f210 + trigger ../../post/jgfs_atmos_post_f210 == complete + edit FHRGRP '210' + edit FHRLST 'f210' + edit FCSTHR '210' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f216 + trigger ../../post/jgfs_atmos_post_f216 == complete + edit FHRGRP '216' + edit FHRLST 'f216' + edit FCSTHR '216' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f222 + trigger ../../post/jgfs_atmos_post_f222 == complete + edit FHRGRP '222' + edit FHRLST 'f222' + edit FCSTHR '222' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f228 + trigger ../../post/jgfs_atmos_post_f228 == complete + edit FHRGRP '228' + edit FHRLST 'f228' + edit FCSTHR '228' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f234 + trigger ../../post/jgfs_atmos_post_f234 == complete + edit FHRGRP '234' + edit FHRLST 'f234' + edit FCSTHR '234' + edit TRDRUN 'YES' + task jgfs_atmos_awips_g2_f240 + trigger ../../post/jgfs_atmos_post_f240 == complete + edit FHRGRP '240' + edit FHRLST 'f240' + edit FCSTHR '240' + edit TRDRUN 'YES' + endfamily + endfamily + family gempak + task jgfs_atmos_gempak + trigger ../../atmos/analysis/jgfs_atmos_analysis == complete + task jgfs_atmos_gempak_meta + trigger ../../atmos/analysis/jgfs_atmos_analysis == complete + task jgfs_atmos_gempak_ncdc_upapgif + trigger ./jgfs_atmos_gempak == active or ./jgfs_atmos_gempak == complete + task jgfs_atmos_npoess_pgrb2_0p5deg + trigger ../post/jgfs_atmos_post_manager:release_post180 + task jgfs_atmos_pgrb2_spec_gempak + trigger ./jgfs_atmos_npoess_pgrb2_0p5deg == complete + endfamily + family verf + task jgfs_atmos_vminmon + trigger ../analysis/jgfs_atmos_analysis == complete + endfamily + endfamily + family wave + family init + task jgfs_wave_init + trigger ../../atmos/obsproc/prep/jgfs_atmos_prep == complete + endfamily + family prep + task jgfs_wave_prep + trigger ../init/jgfs_wave_init == complete + endfamily + family post + task jgfs_wave_postsbs + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post000 + task jgfs_wave_postpnt + trigger ../../jgfs_forecast == complete + task jgfs_wave_post_bndpnt + trigger ../../atmos/post/jgfs_atmos_post_manager:release_post180 + task jgfs_wave_prdgen_gridded + trigger ./jgfs_wave_postsbs == active or ./jgfs_wave_postsbs == complete + task jgfs_wave_prdgen_bulls + trigger ./jgfs_wave_postpnt == complete and ./jgfs_wave_postsbs == complete + endfamily + family gempak + task jgfs_wave_gempak + trigger ../post/jgfs_wave_postsbs == active or ../post/jgfs_wave_postsbs == complete + endfamily + endfamily + task jgfs_forecast + trigger ./atmos/analysis/jgfs_atmos_analysis:release_fcst and ./wave/prep/jgfs_wave_prep == complete + endfamily + family gdas + edit CYC '18' + edit PACKAGEHOME '/lfs/h2/emc/global/noscrub/Lin.Gan/git/feature-ops-wcoss2' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/gdas' + edit PROJ 'GFS' + edit PROJENVIR 'DEV' + edit NET 'gfs' + edit RUN 'gdas' + edit COM '/lfs/h2/emc/ptmp/Lin.Gan/ecfops/com' + edit QUEUE 'dev' + edit QUEUESHARED 'dev_shared' + edit QUEUESERV 'dev_transfer' + family atmos + family obsproc + family dump + task jgdas_atmos_tropcy_qc_reloc + time 05:45 + endfamily + family prep + task jgdas_atmos_emcsfc_sfc_prep + trigger ../dump/jgdas_atmos_dump:release_sfcprep + endfamily + endfamily + family analysis + task jgdas_atmos_analysis + trigger ../obsproc/prep/jgdas_atmos_prep == complete and ../obsproc/prep/jgdas_atmos_emcsfc_sfc_prep == complete + event 1 release_fcst + task jgdas_atmos_analysis_calc + trigger ./jgdas_atmos_analysis == complete + task jgdas_atmos_analysis_diag + trigger ./jgdas_atmos_analysis == complete + endfamily + family post + task jgdas_atmos_post_manager + trigger ../../jgdas_forecast == active + event 1 release_postanl + event 2 release_post000 + event 3 release_post001 + event 4 release_post002 + event 5 release_post003 + event 6 release_post004 + event 7 release_post005 + event 8 release_post006 + event 9 release_post007 + event 10 release_post008 + event 11 release_post009 + task jgdas_atmos_post_anl + trigger ./jgdas_atmos_post_manager:release_postanl + edit FHRGRP '000' + edit FHRLST 'anl' + edit HR 'anl' + edit FHR 'anl' + task jgdas_atmos_post_f000 + trigger ./jgdas_atmos_post_manager:release_post000 + edit FHR 'f000' + edit HR '000' + edit FHRGRP '001' + edit FHRLST 'f000' + task jgdas_atmos_post_f001 + trigger ./jgdas_atmos_post_manager:release_post001 + edit FHR 'f001' + edit HR '001' + edit FHRGRP '002' + edit FHRLST 'f001' + task jgdas_atmos_post_f002 + trigger ./jgdas_atmos_post_manager:release_post002 + edit FHR 'f002' + edit HR '002' + edit FHRGRP '003' + edit FHRLST 'f002' + task jgdas_atmos_post_f003 + trigger ./jgdas_atmos_post_manager:release_post003 + edit FHR 'f003' + edit HR '003' + edit FHRGRP '004' + edit FHRLST 'f003' + task jgdas_atmos_post_f004 + trigger ./jgdas_atmos_post_manager:release_post004 + edit FHR 'f004' + edit HR '004' + edit FHRGRP '005' + edit FHRLST 'f004' + task jgdas_atmos_post_f005 + trigger ./jgdas_atmos_post_manager:release_post005 + edit FHR 'f005' + edit HR '005' + edit FHRGRP '006' + edit FHRLST 'f005' + task jgdas_atmos_post_f006 + trigger ./jgdas_atmos_post_manager:release_post006 + edit FHR 'f006' + edit HR '006' + edit FHRGRP '007' + edit FHRLST 'f006' + task jgdas_atmos_post_f007 + trigger ./jgdas_atmos_post_manager:release_post007 + edit FHR 'f007' + edit HR '007' + edit FHRGRP '008' + edit FHRLST 'f007' + task jgdas_atmos_post_f008 + trigger ./jgdas_atmos_post_manager:release_post008 + edit FHR 'f008' + edit HR '008' + edit FHRGRP '009' + edit FHRLST 'f008' + task jgdas_atmos_post_f009 + trigger ./jgdas_atmos_post_manager:release_post009 + edit FHR 'f009' + edit HR '009' + edit FHRGRP '010' + edit FHRLST 'f009' + endfamily + family post_processing + task jgdas_atmos_chgres_forenkf + trigger ../../jgdas_forecast == complete and ../../../enkfgdas/forecast == complete + endfamily + family gempak + task jgdas_atmos_gempak + trigger ../../jgdas_forecast == complete + task jgdas_atmos_gempak_meta_ncdc + trigger ./jgdas_atmos_gempak == complete + endfamily + family verf + task jgdas_atmos_vminmon + trigger ../analysis/jgdas_atmos_analysis == complete + task jgdas_atmos_verfrad + trigger ../analysis/jgdas_atmos_analysis_diag == complete + task jgdas_atmos_verfozn + trigger ../analysis/jgdas_atmos_analysis_diag == complete + endfamily + endfamily + family wave + family init + task jgdas_wave_init + trigger ../../atmos/obsproc/prep/jgdas_atmos_prep == complete + endfamily + family prep + task jgdas_wave_prep + trigger ../init/jgdas_wave_init == complete + endfamily + family post + task jgdas_wave_postsbs + trigger ../../atmos/post/jgdas_atmos_post_manager:release_post000 + task jgdas_wave_postpnt + trigger ../../jgdas_forecast == complete + endfamily + endfamily + task jgdas_forecast + trigger ./atmos/analysis/jgdas_atmos_analysis:release_fcst and ./wave/prep/jgdas_wave_prep == complete + endfamily + family enkfgdas + edit CYC '18' + edit PACKAGEHOME '/lfs/h2/emc/global/noscrub/Lin.Gan/git/feature-ops-wcoss2' + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas' + edit PROJ 'GFS' + edit PROJENVIR 'DEV' + edit NET 'gfs' + edit RUN 'gdas' + edit COM '/lfs/h2/emc/ptmp/Lin.Gan/ecfops/com' + edit QUEUE 'dev' + edit QUEUESHARED 'dev_shared' + edit QUEUESERV 'dev_transfer' + family analysis + family create + task jenkfgdas_select_obs + trigger ../../../gdas/atmos/obsproc/prep/jgdas_atmos_prep == complete and /prod12/enkfgdas/post == complete + task jenkfgdas_diag + trigger ./jenkfgdas_select_obs == complete + task jenkfgdas_update + trigger ./jenkfgdas_diag == complete + endfamily + family recenter + family ecen + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas/analysis/recenter/ecen' + trigger ../create/jenkfgdas_update == complete and ../../../gdas/atmos/analysis/jgdas_atmos_analysis_calc == complete and /prod12/gdas/atmos/post_processing/jgdas_atmos_chgres_forenkf == complete + family grp1 + edit FHRGRP '003' + task jenkfgdas_ecen + endfamily + family grp2 + edit FHRGRP '006' + task jenkfgdas_ecen + endfamily + family grp3 + edit FHRGRP '009' + task jenkfgdas_ecen + endfamily + endfamily + task jenkfgdas_sfc + trigger ../create/jenkfgdas_update == complete and ../../../gdas/atmos/analysis/jgdas_atmos_analysis_calc == complete + endfamily + endfamily + family forecast + edit ECF_FILES '%PACKAGEHOME%/ecf/scripts/enkfgdas/forecast' + trigger ./analysis/recenter/ecen == complete and ./analysis/recenter/jenkfgdas_sfc == complete + family grp1 + edit ENSGRP '01' + task jenkfgdas_fcst + endfamily + family grp2 + edit ENSGRP '02' + task jenkfgdas_fcst + endfamily + family grp3 + edit ENSGRP '03' + task jenkfgdas_fcst + endfamily + family grp4 + edit ENSGRP '04' + task jenkfgdas_fcst + endfamily + family grp5 + edit ENSGRP '05' + task jenkfgdas_fcst + endfamily + family grp6 + edit ENSGRP '06' + task jenkfgdas_fcst + endfamily + family grp7 + edit ENSGRP '07' + task jenkfgdas_fcst + endfamily + family grp8 + edit ENSGRP '08' + task jenkfgdas_fcst + endfamily + family grp9 + edit ENSGRP '09' + task jenkfgdas_fcst + endfamily + family grp10 + edit ENSGRP '10' + task jenkfgdas_fcst + endfamily + family grp11 + edit ENSGRP '11' + task jenkfgdas_fcst + endfamily + family grp12 + edit ENSGRP '12' + task jenkfgdas_fcst + endfamily + family grp13 + edit ENSGRP '13' + task jenkfgdas_fcst + endfamily + family grp14 + edit ENSGRP '14' + task jenkfgdas_fcst + endfamily + family grp15 + edit ENSGRP '15' + task jenkfgdas_fcst + endfamily + family grp16 + edit ENSGRP '16' + task jenkfgdas_fcst + endfamily + family grp17 + edit ENSGRP '17' + task jenkfgdas_fcst + endfamily + family grp18 + edit ENSGRP '18' + task jenkfgdas_fcst + endfamily + family grp19 + edit ENSGRP '19' + task jenkfgdas_fcst + endfamily + family grp20 + edit ENSGRP '20' + task jenkfgdas_fcst + endfamily + family grp21 + edit ENSGRP '21' + task jenkfgdas_fcst + endfamily + family grp22 + edit ENSGRP '22' + task jenkfgdas_fcst + endfamily + family grp23 + edit ENSGRP '23' + task jenkfgdas_fcst + endfamily + family grp24 + edit ENSGRP '24' + task jenkfgdas_fcst + endfamily + family grp25 + edit ENSGRP '25' + task jenkfgdas_fcst + endfamily + family grp26 + edit ENSGRP '26' + task jenkfgdas_fcst + endfamily + family grp27 + edit ENSGRP '27' + task jenkfgdas_fcst + endfamily + family grp28 + edit ENSGRP '28' + task jenkfgdas_fcst + endfamily + family grp29 + edit ENSGRP '29' + task jenkfgdas_fcst + endfamily + family grp30 + edit ENSGRP '30' + task jenkfgdas_fcst + endfamily + family grp31 + edit ENSGRP '31' + task jenkfgdas_fcst + endfamily + family grp32 + edit ENSGRP '32' + task jenkfgdas_fcst + endfamily + family grp33 + edit ENSGRP '33' + task jenkfgdas_fcst + endfamily + family grp34 + edit ENSGRP '34' + task jenkfgdas_fcst + endfamily + family grp35 + edit ENSGRP '35' + task jenkfgdas_fcst + endfamily + family grp36 + edit ENSGRP '36' + task jenkfgdas_fcst + endfamily + family grp37 + edit ENSGRP '37' + task jenkfgdas_fcst + endfamily + family grp38 + edit ENSGRP '38' + task jenkfgdas_fcst + endfamily + family grp39 + edit ENSGRP '39' + task jenkfgdas_fcst + endfamily + family grp40 + edit ENSGRP '40' + task jenkfgdas_fcst + endfamily + endfamily + family post + trigger ./forecast == complete + task jenkfgdas_post_f003 + edit FHMIN_EPOS '003' + edit FHMAX_EPOS '003' + edit FHOUT_EPOS '003' + task jenkfgdas_post_f004 + edit FHMIN_EPOS '004' + edit FHMAX_EPOS '004' + edit FHOUT_EPOS '004' + task jenkfgdas_post_f005 + edit FHMIN_EPOS '005' + edit FHMAX_EPOS '005' + edit FHOUT_EPOS '005' + task jenkfgdas_post_f006 + edit FHMIN_EPOS '006' + edit FHMAX_EPOS '006' + edit FHOUT_EPOS '006' + task jenkfgdas_post_f007 + edit FHMIN_EPOS '007' + edit FHMAX_EPOS '007' + edit FHOUT_EPOS '007' + task jenkfgdas_post_f008 + edit FHMIN_EPOS '008' + edit FHMAX_EPOS '008' + edit FHOUT_EPOS '008' + task jenkfgdas_post_f009 + edit FHMIN_EPOS '009' + edit FHMAX_EPOS '009' + edit FHOUT_EPOS '009' + endfamily #### epos + endfamily #### enkf +endsuite diff --git a/ecf/include/envir-p1.h b/ecf/include/envir-p1.h new file mode 100644 index 0000000000..c6c5112cf9 --- /dev/null +++ b/ecf/include/envir-p1.h @@ -0,0 +1,17 @@ +# envir-p1.h +export job=${job:-$PBS_JOBNAME} +export jobid=${jobid:-$job.$PBS_JOBID} + +if [[ "$envir" == prod && "$SENDDBN" == YES ]]; then + export eval=%EVAL:NO% + if [ $eval == YES ]; then export SIPHONROOT=${UTILROOT}/para_dbn + else export SIPHONROOT=/lfs/h1/ops/prod/dbnet_siphon + fi + if [ "$PARATEST" == YES ]; then export SIPHONROOT=${UTILROOT}/fakedbn; export NODBNFCHK=YES; fi +else + export SIPHONROOT=${UTILROOT}/fakedbn +fi + +export DBNROOT=$SIPHONROOT + +if [[ ! " prod para test " =~ " ${envir} " && " ops.prod ops.para " =~ " $(whoami) " ]]; then err_exit "ENVIR must be prod, para, or test [envir-p1.h]"; fi diff --git a/ecf/include/head.h b/ecf/include/head.h new file mode 100644 index 0000000000..487c750992 --- /dev/null +++ b/ecf/include/head.h @@ -0,0 +1,93 @@ +date +hostname +set -xe # print commands as they are executed and enable signal trapping + +export PS4='+ $SECONDS + ' + +# Variables needed for communication with ecFlow +export ECF_NAME=%ECF_NAME% +export ECF_HOST=%ECF_LOGHOST% +export ECF_PORT=%ECF_PORT% +export ECF_PASS=%ECF_PASS% +export ECF_TRYNO=%ECF_TRYNO% +export ECF_RID=${ECF_RID:-${PBS_JOBID:-$(hostname -s).$$}} +export ECF_JOB=%ECF_JOB% +export ECF_JOBOUT=%ECF_JOBOUT% +export ecflow_ver=%ecflow_ver% + +if [ -d /apps/ops/prod ]; then # On WCOSS2 + set +x + echo "Running 'module reset'" + module reset + set -x +fi + +modelhome=%PACKAGEHOME:% +eval "export HOME${model:?'model undefined'}=$modelhome" +eval "versionfile=\$HOME${model}/versions/run.ver" +if [ -f "$versionfile" ]; then . $versionfile ; fi +modelver=$(echo ${modelhome} | perl -pe "s:.*?/${model}\.(v[\d\.a-z]+).*:\1:") +eval "export ${model}_ver=$modelver" + +export envir=%ENVIR% +export MACHINE_SITE=%MACHINE_SITE% +export RUN_ENVIR=${RUN_ENVIR:-nco} +export SENDECF=${SENDECF:-YES} +export SENDCOM=${SENDCOM:-YES} +if [ -n "%PDY:%" ]; then export PDY=${PDY:-%PDY:%}; fi +if [ -n "%PARATEST:%" ]; then export PARATEST=${PARATEST:-%PARATEST:%}; fi +if [ -n "%COMPATH:%" ]; then export COMPATH=${COMPATH:-%COMPATH:%}; fi +if [ -n "%MAILTO:%" ]; then export MAILTO=${MAILTO:-%MAILTO:%}; fi +if [ -n "%DBNLOG:%" ]; then export DBNLOG=${DBNLOG:-%DBNLOG:%}; fi +export KEEPDATA=${KEEPDATA:-%KEEPDATA:NO%} +export SENDDBN=${SENDDBN:-%SENDDBN:YES%} +export SENDDBN_NTC=${SENDDBN_NTC:-%SENDDBN_NTC:YES%} + +if [ -d /apps/ops/prod ]; then # On WCOSS2 + set +x + if [ $(whoami) == ops.para ]; then + module use -a /apps/ops/para/nco/modulefiles/core + fi + echo "Running module load ecflow/$ecflow_ver" + module load ecflow/$ecflow_ver + echo "ecflow module location: $(module display ecflow |& head -2 | tail -1 | sed 's/:$//')" + set -x + . ${ECF_ROOT}/versions/run.ver + set +x + module load prod_util/${prod_util_ver} + module load prod_envir/${prod_envir_ver} + echo "Listing modules from head.h:" + module list + set -x +fi + +timeout 300 ecflow_client --init=${ECF_RID} + +if [[ " ops.prod ops.para " =~ " $(whoami) " ]]; then + POST_OUT=${POST_OUT:-/lfs/h1/ops/%ENVIR%/tmp/posts/ecflow_post_in.${ECF_RID}} + echo 'export ECF_NAME=${ECF_NAME}' > $POST_OUT + echo 'export ECF_HOST=${ECF_HOST}' >> $POST_OUT + echo 'export ECF_PORT=${ECF_PORT}' >> $POST_OUT + echo 'export ECF_PASS=${ECF_PASS}' >> $POST_OUT + echo 'export ECF_TRYNO=${ECF_TRYNO}' >> $POST_OUT + echo 'export ECF_RID=${ECF_RID}' >> $POST_OUT +fi + +# Define error handler +ERROR() { + set +ex + if [ "$1" -eq 0 ]; then + msg="Killed by signal (likely via qdel)" + else + msg="Killed by signal $1" + fi + ecflow_client --abort="$msg" + echo $msg + if [[ " ops.prod ops.para " =~ " $(whoami) " ]]; then + echo "# Trap Caught" >>$POST_OUT + fi + trap $1; exit $1 +} +# Trap all error and exit signals +trap 'ERROR $?' ERR EXIT + diff --git a/ecf/include/tail.h b/ecf/include/tail.h new file mode 100644 index 0000000000..c6686c5ca1 --- /dev/null +++ b/ecf/include/tail.h @@ -0,0 +1,3 @@ +timeout 300 ecflow_client --complete # Notify ecFlow of a normal end +trap 0 # Remove all traps +exit 0 # End the shell diff --git a/ecf/scripts/enkfgdas/analysis/create/jenkfgdas_diag.ecf b/ecf/scripts/enkfgdas/analysis/create/jenkfgdas_diag.ecf new file mode 100755 index 0000000000..294d5c25d9 --- /dev/null +++ b/ecf/scripts/enkfgdas/analysis/create/jenkfgdas_diag.ecf @@ -0,0 +1,56 @@ +#PBS -S /bin/bash +#PBS -N enkf%RUN%_diag_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:06:00 +#PBS -l select=1:mpiprocs=48:ompthreads=1:ncpus=48:mem=24GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z +export USE_CFP=YES + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGDAS_ENKF_DIAG + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/enkfgdas/analysis/create/jenkfgdas_select_obs.ecf b/ecf/scripts/enkfgdas/analysis/create/jenkfgdas_select_obs.ecf new file mode 100755 index 0000000000..b94e3a18e3 --- /dev/null +++ b/ecf/scripts/enkfgdas/analysis/create/jenkfgdas_select_obs.ecf @@ -0,0 +1,56 @@ +#PBS -S /bin/bash +#PBS -N enkf%RUN%_select_obs_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:10:00 +#PBS -l select=12:mpiprocs=40:ompthreads=3:ncpus=120 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load python/${python_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} +module load crtm/${crtm_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGDAS_ENKF_SELECT_OBS + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/enkfgdas/analysis/create/jenkfgdas_update.ecf b/ecf/scripts/enkfgdas/analysis/create/jenkfgdas_update.ecf new file mode 100755 index 0000000000..6611afff52 --- /dev/null +++ b/ecf/scripts/enkfgdas/analysis/create/jenkfgdas_update.ecf @@ -0,0 +1,57 @@ +#PBS -S /bin/bash +#PBS -N enkf%RUN%_update_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:30:00 +#PBS -l select=35:mpiprocs=9:ompthreads=14:ncpus=126 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} +module load python/${python_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z +export USE_CFP=YES + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGDAS_ENKF_UPDATE + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/enkfgdas/analysis/recenter/ecen/jenkfgdas_ecen.ecf b/ecf/scripts/enkfgdas/analysis/recenter/ecen/jenkfgdas_ecen.ecf new file mode 100755 index 0000000000..1ed2568d61 --- /dev/null +++ b/ecf/scripts/enkfgdas/analysis/recenter/ecen/jenkfgdas_ecen.ecf @@ -0,0 +1,59 @@ +#PBS -S /bin/bash +#PBS -N enkf%RUN%_ecen_%FHRGRP%_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:10:00 +#PBS -l select=3:mpiprocs=32:ompthreads=4:ncpus=128 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load python/${python_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} + +module list + +############################################################# +# environment settings +############################################################# +export FHRGRP=%FHRGRP% +export cyc=%CYC% +export cycle=t%CYC%z +export FHMIN_ECEN=$FHRGRP +export FHMAX_ECEN=$FHRGRP +export FHOUT_ECEN=$FHRGRP + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGDAS_ENKF_ECEN + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/enkfgdas/analysis/recenter/jenkfgdas_sfc.ecf b/ecf/scripts/enkfgdas/analysis/recenter/jenkfgdas_sfc.ecf new file mode 100755 index 0000000000..39d4ec2e8d --- /dev/null +++ b/ecf/scripts/enkfgdas/analysis/recenter/jenkfgdas_sfc.ecf @@ -0,0 +1,57 @@ +#PBS -S /bin/bash +#PBS -N enkf%RUN%_sfc_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:06:00 +#PBS -l select=1:mpiprocs=80:ompthreads=1:ncpus=80:mem=80GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load python/${python_ver} +module load libjpeg/${libjpeg_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} +module load grib_util/${grib_util_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGDAS_ENKF_SFC + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/enkfgdas/forecast/jenkfgdas_fcst.ecf b/ecf/scripts/enkfgdas/forecast/jenkfgdas_fcst.ecf new file mode 100755 index 0000000000..923d208350 --- /dev/null +++ b/ecf/scripts/enkfgdas/forecast/jenkfgdas_fcst.ecf @@ -0,0 +1,55 @@ +#PBS -S /bin/bash +#PBS -N enkf%RUN%_fcst_%ENSGRP%_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:40:00 +#PBS -l select=4:mpiprocs=128:ompthreads=1:ncpus=128 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} + +module list + +############################################################# +# environment settings +###############i############################################# +export ENSGRP=%ENSGRP% +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGDAS_ENKF_FCST + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/enkfgdas/post/.gitignore b/ecf/scripts/enkfgdas/post/.gitignore new file mode 100644 index 0000000000..b82816a86e --- /dev/null +++ b/ecf/scripts/enkfgdas/post/.gitignore @@ -0,0 +1,2 @@ +# Ignore these +jenkfgdas_post_f*.ecf diff --git a/ecf/scripts/enkfgdas/post/jenkfgdas_post_master.ecf b/ecf/scripts/enkfgdas/post/jenkfgdas_post_master.ecf new file mode 100755 index 0000000000..6627b97c10 --- /dev/null +++ b/ecf/scripts/enkfgdas/post/jenkfgdas_post_master.ecf @@ -0,0 +1,57 @@ +#PBS -S /bin/bash +#PBS -N enkf%RUN%_post_f%FHOUT_EPOS%_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:15:00 +#PBS -l select=3:mpiprocs=32:ompthreads=4:ncpus=128 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} + +module list + +############################################################# +# environment settings +############################################################# +export FHMIN_EPOS=%FHOUT_EPOS% +export FHMAX_EPOS=%FHOUT_EPOS% +export FHOUT_EPOS=%FHOUT_EPOS% +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +$HOMEgfs/jobs/JGDAS_ENKF_POST + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gdas/atmos/analysis/jgdas_atmos_analysis.ecf b/ecf/scripts/gdas/atmos/analysis/jgdas_atmos_analysis.ecf new file mode 100755 index 0000000000..36b9272204 --- /dev/null +++ b/ecf/scripts/gdas/atmos/analysis/jgdas_atmos_analysis.ecf @@ -0,0 +1,75 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_analysis_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:50:00 +#PBS -l select=52:mpiprocs=15:ompthreads=8:ncpus=120 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +export model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} +module load python/${python_ver} +module load libjpeg/${libjpeg_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} +module load grib_util/${grib_util_ver} +module load crtm/${crtm_ver} + +module list + +############################################################# +# environment settings +############################################################# +export FORT_BUFFERED=true +export OMP_NUM_THREADS_CY=128 +export NTHREADS=$OMP_NUM_THREADS_CY +export NTHREADS_GSI=$threads +export cyc=%CYC% +export cycle=t%CYC%z +export USE_CFP=YES +export PREINP='' + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_ATMOS_ANALYSIS +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual +###################################################################### +# Purpose: To execute the job that prepares initial condition for +# gdas. +###################################################################### + +###################################################################### +# Job specific troubleshooting instructions: +# see generic troubleshoot manual page +# +###################################################################### + +# include manual page below +%end diff --git a/ecf/scripts/gdas/atmos/analysis/jgdas_atmos_analysis_calc.ecf b/ecf/scripts/gdas/atmos/analysis/jgdas_atmos_analysis_calc.ecf new file mode 100755 index 0000000000..41601c4de8 --- /dev/null +++ b/ecf/scripts/gdas/atmos/analysis/jgdas_atmos_analysis_calc.ecf @@ -0,0 +1,65 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_analysis_calc_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:10:00 +#PBS -l select=1:mpiprocs=128:ompthreads=1:ncpus=128 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load python/${python_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_ATMOS_ANALYSIS_CALC +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual +###################################################################### +# Purpose: To execute the job that prepares initial condition for +# gdas. +###################################################################### + +###################################################################### +# Job specific troubleshooting instructions: +# see generic troubleshoot manual page +# +###################################################################### + +# include manual page below +%end diff --git a/ecf/scripts/gdas/atmos/analysis/jgdas_atmos_analysis_diag.ecf b/ecf/scripts/gdas/atmos/analysis/jgdas_atmos_analysis_diag.ecf new file mode 100755 index 0000000000..f233fed21e --- /dev/null +++ b/ecf/scripts/gdas/atmos/analysis/jgdas_atmos_analysis_diag.ecf @@ -0,0 +1,66 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_analysis_diag_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:10:00 +#PBS -l select=1:mpiprocs=96:ompthreads=1:ncpus=96:mem=48GB +#PBS -l place=vscatter +#PBS -l debug=true + +export model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z +export USE_CFP=YES + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGDAS_ATMOS_ANALYSIS_DIAG +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual +###################################################################### +# Purpose: To execute the job that prepares initial condition for +# gdas. +###################################################################### + +###################################################################### +# Job specific troubleshooting instructions: +# see generic troubleshoot manual page +# +###################################################################### + +# include manual page below +%end diff --git a/ecf/scripts/gdas/atmos/gempak/jgdas_atmos_gempak.ecf b/ecf/scripts/gdas/atmos/gempak/jgdas_atmos_gempak.ecf new file mode 100755 index 0000000000..039ca56852 --- /dev/null +++ b/ecf/scripts/gdas/atmos/gempak/jgdas_atmos_gempak.ecf @@ -0,0 +1,54 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_gempak_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:15:00 +#PBS -l select=1:ncpus=2:mpiprocs=2:mem=4GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} +module load gempak/${gempak_ver} + +module list + +export cyc=%CYC% +export cycle=t%CYC%z +export USE_CFP=YES + +############################################################ +# CALL executable job script here +############################################################ +export model=gdas + +${HOMEgfs}/jobs/JGDAS_ATMOS_GEMPAK + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gdas/atmos/gempak/jgdas_atmos_gempak_meta_ncdc.ecf b/ecf/scripts/gdas/atmos/gempak/jgdas_atmos_gempak_meta_ncdc.ecf new file mode 100755 index 0000000000..61f7f0a17f --- /dev/null +++ b/ecf/scripts/gdas/atmos/gempak/jgdas_atmos_gempak_meta_ncdc.ecf @@ -0,0 +1,49 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_gempak_meta_ncdc_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:30:00 +#PBS -l select=1:ncpus=1:mem=1GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export model=%model:gdas% +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load gempak/${gempak_ver} + +module list + +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGDAS_ATMOS_GEMPAK_META_NCDC + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gdas/atmos/obsproc/dump/jgdas_atmos_tropcy_qc_reloc.ecf b/ecf/scripts/gdas/atmos/obsproc/dump/jgdas_atmos_tropcy_qc_reloc.ecf new file mode 100755 index 0000000000..5322c363ac --- /dev/null +++ b/ecf/scripts/gdas/atmos/obsproc/dump/jgdas_atmos_tropcy_qc_reloc.ecf @@ -0,0 +1,52 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_tropcy_qc_reloc_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:05:00 +#PBS -l select=1:ncpus=1:mem=1GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load libjpeg/${libjpeg_ver} +module load grib_util/${grib_util_ver} +module load wgrib2/${wgrib2_ver} + +module list + +export PROCESS_TROPCY=YES +export DO_RELOCATE=YES +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_ATMOS_TROPCY_QC_RELOC + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gdas/atmos/obsproc/prep/jgdas_atmos_emcsfc_sfc_prep.ecf b/ecf/scripts/gdas/atmos/obsproc/prep/jgdas_atmos_emcsfc_sfc_prep.ecf new file mode 100755 index 0000000000..e0ab513b33 --- /dev/null +++ b/ecf/scripts/gdas/atmos/obsproc/prep/jgdas_atmos_emcsfc_sfc_prep.ecf @@ -0,0 +1,50 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_emcsfc_sfc_prep_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:08:00 +#PBS -l select=1:ncpus=1:mem=2GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load libjpeg/${libjpeg_ver} +module load grib_util/${grib_util_ver} +module load wgrib2/${wgrib2_ver} + +module list + +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_ATMOS_EMCSFC_SFC_PREP + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gdas/atmos/post/.gitignore b/ecf/scripts/gdas/atmos/post/.gitignore new file mode 100644 index 0000000000..851760300f --- /dev/null +++ b/ecf/scripts/gdas/atmos/post/.gitignore @@ -0,0 +1,3 @@ +# Ignore these +jgdas_atmos_post_anl.ecf +jgdas_atmos_post_f*.ecf diff --git a/ecf/scripts/gdas/atmos/post/jgdas_atmos_post_manager.ecf b/ecf/scripts/gdas/atmos/post/jgdas_atmos_post_manager.ecf new file mode 100755 index 0000000000..55d7932aaf --- /dev/null +++ b/ecf/scripts/gdas/atmos/post/jgdas_atmos_post_manager.ecf @@ -0,0 +1,44 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_post_manager_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=01:15:00 +#PBS -l select=1:ncpus=1:mem=1GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ + +module list + +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_ATMOS_POST_MANAGER + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gdas/atmos/post/jgdas_atmos_post_master.ecf b/ecf/scripts/gdas/atmos/post/jgdas_atmos_post_master.ecf new file mode 100755 index 0000000000..f88fdcdaf9 --- /dev/null +++ b/ecf/scripts/gdas/atmos/post/jgdas_atmos_post_master.ecf @@ -0,0 +1,66 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_post_%FHR%_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:12:00 +#PBS -l select=1:mpiprocs=126:ompthreads=1:ncpus=126 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} +module load libjpeg/${libjpeg_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} +module load grib_util/${grib_util_ver} +module load crtm/${crtm_ver} +module load g2tmpl/${g2tmpl_ver} +module load wgrib2/${wgrib2_ver} + +module list + +############################################################# +# environment settings +############################################################# +export FHR=%FHR% +export post_times=%HR% +export FHRGRP=%FHRGRP% +export FHRLST=%FHRLST% +export cyc=%CYC% +export cycle=t%CYC%z +export USE_CFP=YES +export g2tmpl_ver=v${g2tmpl_ver} + +############################################################ +# CALL executable job script here +############################################################ +$HOMEgfs/jobs/JGLOBAL_ATMOS_NCEPPOST + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gdas/atmos/post_processing/jgdas_atmos_chgres_forenkf.ecf b/ecf/scripts/gdas/atmos/post_processing/jgdas_atmos_chgres_forenkf.ecf new file mode 100755 index 0000000000..6993e4ae4f --- /dev/null +++ b/ecf/scripts/gdas/atmos/post_processing/jgdas_atmos_chgres_forenkf.ecf @@ -0,0 +1,57 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_enkf_chgres_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:10:00 +#PBS -l select=1:ncpus=3:mpiprocs=3:ompthreads=1:mem=200GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} +module load python/${python_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z +export USE_CFP=YES + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGDAS_ATMOS_CHGRES_FORENKF + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gdas/atmos/verf/jgdas_atmos_verfozn.ecf b/ecf/scripts/gdas/atmos/verf/jgdas_atmos_verfozn.ecf new file mode 100755 index 0000000000..5bf31996d9 --- /dev/null +++ b/ecf/scripts/gdas/atmos/verf/jgdas_atmos_verfozn.ecf @@ -0,0 +1,55 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_verfozn_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:05:00 +#PBS -l select=1:ncpus=1:mem=1GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load libjpeg/${libjpeg_ver} +module load netcdf/${netcdf_ver} +module load grib_util/${grib_util_ver} +module load util_shared/${util_shared_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z +export VERBOSE=YES + +############################################################ +# CALL executable job script here +############################################################ +$HOMEgfs/jobs/JGDAS_ATMOS_VERFOZN + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gdas/atmos/verf/jgdas_atmos_verfrad.ecf b/ecf/scripts/gdas/atmos/verf/jgdas_atmos_verfrad.ecf new file mode 100755 index 0000000000..b9ee264998 --- /dev/null +++ b/ecf/scripts/gdas/atmos/verf/jgdas_atmos_verfrad.ecf @@ -0,0 +1,55 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_verfrad_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:20:00 +#PBS -l select=1:ncpus=1:mem=5GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load libjpeg/${libjpeg_ver} +module load netcdf/${netcdf_ver} +module load grib_util/${grib_util_ver} +module load util_shared/${util_shared_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z +export VERBOSE=YES + +############################################################ +# CALL executable job script here +############################################################ +$HOMEgfs/jobs/JGDAS_ATMOS_VERFRAD + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gdas/atmos/verf/jgdas_atmos_vminmon.ecf b/ecf/scripts/gdas/atmos/verf/jgdas_atmos_vminmon.ecf new file mode 100755 index 0000000000..71ef1155a9 --- /dev/null +++ b/ecf/scripts/gdas/atmos/verf/jgdas_atmos_vminmon.ecf @@ -0,0 +1,53 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_vminmon_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:05:00 +#PBS -l select=1:ncpus=1:mem=1GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load perl/${perl_ver} +module load util_shared/${util_shared_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z +export VERBOSE=YES + +############################################################ +# CALL executable job script here +############################################################ +$HOMEgfs/jobs/JGDAS_ATMOS_VMINMON + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gdas/jgdas_forecast.ecf b/ecf/scripts/gdas/jgdas_forecast.ecf new file mode 100755 index 0000000000..69c8e17801 --- /dev/null +++ b/ecf/scripts/gdas/jgdas_forecast.ecf @@ -0,0 +1,54 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_forecast_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=01:00:00 +#PBS -l select=27:mpiprocs=32:ompthreads=3:ncpus=96 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_FORECAST + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gdas/wave/init/jgdas_wave_init.ecf b/ecf/scripts/gdas/wave/init/jgdas_wave_init.ecf new file mode 100755 index 0000000000..569a7c0894 --- /dev/null +++ b/ecf/scripts/gdas/wave/init/jgdas_wave_init.ecf @@ -0,0 +1,64 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_wave_init_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:10:00 +#PBS -l select=1:mpiprocs=11:ompthreads=1:ncpus=11:mem=2GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +## Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} + +module list + +############################################################ +## environment settings +############################################################ +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_WAVE_INIT + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual +###################################################################### +# Purpose: +# +# +###################################################################### + +###################################################################### +# Job specific troubleshooting instructions: +# see generic troubleshoot manual page +# +###################################################################### + +# include manual page below +%end diff --git a/ecf/scripts/gdas/wave/post/jgdas_wave_postpnt.ecf b/ecf/scripts/gdas/wave/post/jgdas_wave_postpnt.ecf new file mode 100755 index 0000000000..20db8b240d --- /dev/null +++ b/ecf/scripts/gdas/wave/post/jgdas_wave_postpnt.ecf @@ -0,0 +1,65 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_wave_postpnt_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:12:00 +#PBS -l select=4:mpiprocs=50:ompthreads=1:ncpus=50:mem=10GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +## Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} + +module list + +############################################################ +## environment settings +############################################################ +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_WAVE_POST_PNT + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual +###################################################################### +# Purpose: +# +# +###################################################################### + +###################################################################### +# Job specific troubleshooting instructions: +# see generic troubleshoot manual page +# +###################################################################### + +# include manual page below +%end diff --git a/ecf/scripts/gdas/wave/post/jgdas_wave_postsbs.ecf b/ecf/scripts/gdas/wave/post/jgdas_wave_postsbs.ecf new file mode 100755 index 0000000000..29d5a467d3 --- /dev/null +++ b/ecf/scripts/gdas/wave/post/jgdas_wave_postsbs.ecf @@ -0,0 +1,68 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_wave_postsbs_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:20:00 +#PBS -l select=1:mpiprocs=8:ompthreads=1:ncpus=8:mem=10GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +## Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} +module load libjpeg/${libjpeg_ver} +module load grib_util/${grib_util_ver} +module load wgrib2/${wgrib2_ver} + +module list + +############################################################ +## environment settings +############################################################ +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_WAVE_POST_SBS + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual +###################################################################### +# Purpose: +# +# +###################################################################### + +###################################################################### +# Job specific troubleshooting instructions: +# see generic troubleshoot manual page +# +###################################################################### + +# include manual page below +%end diff --git a/ecf/scripts/gdas/wave/prep/jgdas_wave_prep.ecf b/ecf/scripts/gdas/wave/prep/jgdas_wave_prep.ecf new file mode 100755 index 0000000000..612a29eb71 --- /dev/null +++ b/ecf/scripts/gdas/wave/prep/jgdas_wave_prep.ecf @@ -0,0 +1,72 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_wave_prep_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:10:00 +#PBS -l select=1:mpiprocs=5:ompthreads=1:ncpus=5:mem=100GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +## Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} +module load cdo/${cdo_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} +module load udunits/${udunits_ver} +module load gsl/${gsl_ver} +module load nco/${nco_ver} +module load wgrib2/${wgrib2_ver} + +module list + +############################################################ +## environment settings +############################################################ +export cyc=%CYC% +export cycle=t%CYC%z +export USE_CFP=YES +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_WAVE_PREP + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual +###################################################################### +# Purpose: +# +# +###################################################################### + +###################################################################### +# Job specific troubleshooting instructions: +# see generic troubleshoot manual page +# +###################################################################### + +# include manual page below +%end diff --git a/ecf/scripts/gfs/atmos/analysis/jgfs_atmos_analysis.ecf b/ecf/scripts/gfs/atmos/analysis/jgfs_atmos_analysis.ecf new file mode 100755 index 0000000000..a30eceae57 --- /dev/null +++ b/ecf/scripts/gfs/atmos/analysis/jgfs_atmos_analysis.ecf @@ -0,0 +1,77 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_analysis_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:40:00 +#PBS -l select=55:mpiprocs=15:ompthreads=8:ncpus=120 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +export model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} +module load python/${python_ver} +module load libjpeg/${libjpeg_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} +module load grib_util/${grib_util_ver} +module load crtm/${crtm_ver} + +module list + +############################################################# +# environment settings +############################################################# +export FORT_BUFFERED=true +export OMP_NUM_THREADS_CY=128 +export NTHREADS=$OMP_NUM_THREADS_CY +export NTHREADS_GSI=$threads + +export cyc=%CYC% +export cycle=t%CYC%z +export USE_CFP=YES +export PREINP='' + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_ATMOS_ANALYSIS + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual +###################################################################### +# Purpose: To execute the job that prepares initial condition for +# gdas. +###################################################################### + +###################################################################### +# Job specific troubleshooting instructions: +# see generic troubleshoot manual page +# +###################################################################### + +# include manual page below +%end diff --git a/ecf/scripts/gfs/atmos/analysis/jgfs_atmos_analysis_calc.ecf b/ecf/scripts/gfs/atmos/analysis/jgfs_atmos_analysis_calc.ecf new file mode 100755 index 0000000000..41601c4de8 --- /dev/null +++ b/ecf/scripts/gfs/atmos/analysis/jgfs_atmos_analysis_calc.ecf @@ -0,0 +1,65 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_analysis_calc_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:10:00 +#PBS -l select=1:mpiprocs=128:ompthreads=1:ncpus=128 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load python/${python_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_ATMOS_ANALYSIS_CALC +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual +###################################################################### +# Purpose: To execute the job that prepares initial condition for +# gdas. +###################################################################### + +###################################################################### +# Job specific troubleshooting instructions: +# see generic troubleshoot manual page +# +###################################################################### + +# include manual page below +%end diff --git a/ecf/scripts/gfs/atmos/gempak/jgfs_atmos_gempak.ecf b/ecf/scripts/gfs/atmos/gempak/jgfs_atmos_gempak.ecf new file mode 100755 index 0000000000..c69a02fedf --- /dev/null +++ b/ecf/scripts/gfs/atmos/gempak/jgfs_atmos_gempak.ecf @@ -0,0 +1,56 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_gempak_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=03:00:00 +#PBS -l select=1:ncpus=28:mpiprocs=28:mem=2GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} +module load gempak/${gempak_ver} +module load wgrib2/${wgrib2_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGFS_ATMOS_GEMPAK + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + + +%include +%manual + +%end diff --git a/ecf/scripts/gfs/atmos/gempak/jgfs_atmos_gempak_meta.ecf b/ecf/scripts/gfs/atmos/gempak/jgfs_atmos_gempak_meta.ecf new file mode 100755 index 0000000000..69f736b705 --- /dev/null +++ b/ecf/scripts/gfs/atmos/gempak/jgfs_atmos_gempak_meta.ecf @@ -0,0 +1,55 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_gempak_meta_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=03:00:00 +#PBS -l select=1:ncpus=23:mpiprocs=23:mem=2GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} +module load gempak/${gempak_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z +export USE_CFP=YES + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGFS_ATMOS_GEMPAK_META + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gfs/atmos/gempak/jgfs_atmos_gempak_ncdc_upapgif.ecf b/ecf/scripts/gfs/atmos/gempak/jgfs_atmos_gempak_ncdc_upapgif.ecf new file mode 100755 index 0000000000..d72622b93a --- /dev/null +++ b/ecf/scripts/gfs/atmos/gempak/jgfs_atmos_gempak_ncdc_upapgif.ecf @@ -0,0 +1,52 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_gempak_upapgif_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=02:00:00 +#PBS -l select=1:ncpus=1:mem=1GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load gempak/${gempak_ver} +module load imagemagick/${imagemagick_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGFS_ATMOS_GEMPAK_NCDC_UPAPGIF + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gfs/atmos/gempak/jgfs_atmos_npoess_pgrb2_0p5deg.ecf b/ecf/scripts/gfs/atmos/gempak/jgfs_atmos_npoess_pgrb2_0p5deg.ecf new file mode 100755 index 0000000000..8837e94948 --- /dev/null +++ b/ecf/scripts/gfs/atmos/gempak/jgfs_atmos_npoess_pgrb2_0p5deg.ecf @@ -0,0 +1,51 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_npoess_pgrb2_0p5deg_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=02:00:00 +#PBS -l select=1:ncpus=1:mem=1GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load wgrib2/${wgrib2_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGFS_ATMOS_PGRB2_SPEC_NPOESS + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gfs/atmos/gempak/jgfs_atmos_pgrb2_spec_gempak.ecf b/ecf/scripts/gfs/atmos/gempak/jgfs_atmos_pgrb2_spec_gempak.ecf new file mode 100755 index 0000000000..aa89d37bfc --- /dev/null +++ b/ecf/scripts/gfs/atmos/gempak/jgfs_atmos_pgrb2_spec_gempak.ecf @@ -0,0 +1,53 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_pgrb2_spec_gempak_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:30:00 +#PBS -l select=1:ncpus=1:mem=1GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load gempak/${gempak_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGFS_ATMOS_GEMPAK_PGRB2_SPEC + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gfs/atmos/obsproc/dump/jgfs_atmos_tropcy_qc_reloc.ecf b/ecf/scripts/gfs/atmos/obsproc/dump/jgfs_atmos_tropcy_qc_reloc.ecf new file mode 100755 index 0000000000..5322c363ac --- /dev/null +++ b/ecf/scripts/gfs/atmos/obsproc/dump/jgfs_atmos_tropcy_qc_reloc.ecf @@ -0,0 +1,52 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_tropcy_qc_reloc_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:05:00 +#PBS -l select=1:ncpus=1:mem=1GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load libjpeg/${libjpeg_ver} +module load grib_util/${grib_util_ver} +module load wgrib2/${wgrib2_ver} + +module list + +export PROCESS_TROPCY=YES +export DO_RELOCATE=YES +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_ATMOS_TROPCY_QC_RELOC + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gfs/atmos/obsproc/prep/jgfs_atmos_emcsfc_sfc_prep.ecf b/ecf/scripts/gfs/atmos/obsproc/prep/jgfs_atmos_emcsfc_sfc_prep.ecf new file mode 100755 index 0000000000..f0a1a3346f --- /dev/null +++ b/ecf/scripts/gfs/atmos/obsproc/prep/jgfs_atmos_emcsfc_sfc_prep.ecf @@ -0,0 +1,50 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_emcsfc_sfc_prep_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:07:00 +#PBS -l select=1:ncpus=1:mem=2GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load libjpeg/${libjpeg_ver} +module load grib_util/${grib_util_ver} +module load wgrib2/${wgrib2_ver} + +module list + +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_ATMOS_EMCSFC_SFC_PREP + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gfs/atmos/post/.gitignore b/ecf/scripts/gfs/atmos/post/.gitignore new file mode 100644 index 0000000000..01d641c46d --- /dev/null +++ b/ecf/scripts/gfs/atmos/post/.gitignore @@ -0,0 +1,3 @@ +# Ignore these +jgfs_atmos_post_anl.ecf +jgfs_atmos_post_f*.ecf diff --git a/ecf/scripts/gfs/atmos/post/jgfs_atmos_post_manager.ecf b/ecf/scripts/gfs/atmos/post/jgfs_atmos_post_manager.ecf new file mode 100755 index 0000000000..fc22e941bc --- /dev/null +++ b/ecf/scripts/gfs/atmos/post/jgfs_atmos_post_manager.ecf @@ -0,0 +1,44 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_post_manager_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=04:00:00 +#PBS -l select=1:ncpus=1:mem=1GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ + +module list + +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_ATMOS_POST_MANAGER + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gfs/atmos/post/jgfs_atmos_post_master.ecf b/ecf/scripts/gfs/atmos/post/jgfs_atmos_post_master.ecf new file mode 100755 index 0000000000..ad717147fc --- /dev/null +++ b/ecf/scripts/gfs/atmos/post/jgfs_atmos_post_master.ecf @@ -0,0 +1,71 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_post_%FHR%_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:20:00 +#PBS -l select=1:mpiprocs=126:ompthreads=1:ncpus=126 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +export FHRGRP=%FHRGRP% +export FHRLST=%FHRLST% +export FHR=%FHR% +export post_times=%HR% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} +module load libjpeg/${libjpeg_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} +module load grib_util/${grib_util_ver} +module load crtm/${crtm_ver} +module load g2tmpl/${g2tmpl_ver} +module load wgrib2/${wgrib2_ver} + +module list + +############################################################# +# environment settings +############################################################# +export FHR=%FHR% +export post_times=%HR% +export FHRGRP=%FHRGRP% +export FHRLST=%FHRLST% +export cyc=%CYC% +export cycle=t%CYC%z +export USE_CFP=YES +export g2tmpl_ver=v${g2tmpl_ver} + +############################################################ +# CALL executable job script here +############################################################ +$HOMEgfs/jobs/JGLOBAL_ATMOS_NCEPPOST + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gfs/atmos/post_processing/awips_20km_1p0/.gitignore b/ecf/scripts/gfs/atmos/post_processing/awips_20km_1p0/.gitignore new file mode 100644 index 0000000000..6eef43ca90 --- /dev/null +++ b/ecf/scripts/gfs/atmos/post_processing/awips_20km_1p0/.gitignore @@ -0,0 +1,2 @@ +# Ignore these +jgfs_atmos_awips_f*.ecf diff --git a/ecf/scripts/gfs/atmos/post_processing/awips_20km_1p0/jgfs_atmos_awips_master.ecf b/ecf/scripts/gfs/atmos/post_processing/awips_20km_1p0/jgfs_atmos_awips_master.ecf new file mode 100755 index 0000000000..2333476033 --- /dev/null +++ b/ecf/scripts/gfs/atmos/post_processing/awips_20km_1p0/jgfs_atmos_awips_master.ecf @@ -0,0 +1,56 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_awips_%FCSTHR%_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:10:00 +#PBS -l select=1:ncpus=1:mem=3GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load libjpeg/${libjpeg_ver} +module load grib_util/${grib_util_ver} +module load wgrib2/${wgrib2_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z +export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% +export job=jgfs_awips_f%FCSTHR%_%CYC% + +############################################################ +# CALL executable job script here +############################################################ +$HOMEgfs/jobs/JGFS_ATMOS_AWIPS_20KM_1P0DEG + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + + +%include +%manual + +%end diff --git a/ecf/scripts/gfs/atmos/post_processing/awips_g2/.gitignore b/ecf/scripts/gfs/atmos/post_processing/awips_g2/.gitignore new file mode 100644 index 0000000000..37e58b180a --- /dev/null +++ b/ecf/scripts/gfs/atmos/post_processing/awips_g2/.gitignore @@ -0,0 +1,2 @@ +# Ignore these +jgfs_atmos_awips_g2_f*.ecf diff --git a/ecf/scripts/gfs/atmos/post_processing/awips_g2/jgfs_atmos_awips_g2_master.ecf b/ecf/scripts/gfs/atmos/post_processing/awips_g2/jgfs_atmos_awips_g2_master.ecf new file mode 100755 index 0000000000..a175e34e5a --- /dev/null +++ b/ecf/scripts/gfs/atmos/post_processing/awips_g2/jgfs_atmos_awips_g2_master.ecf @@ -0,0 +1,61 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_awips_g2_%FCSTHR%_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:05:00 +#PBS -l select=1:ncpus=1:mem=3GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +export FHRGRP=%FHRGRP% +export FHRLST=%FHRLST% +export fcsthrs=%FCSTHR% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load libjpeg/${libjpeg_ver} +module load grib_util/${grib_util_ver} +module load wgrib2/${wgrib2_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z +trdrun=%TRDRUN% +export job="jgfs_awips_f${fcsthrs}_${cyc}" + +############################################################ +# CALL executable job script here +############################################################ +$HOMEgfs/jobs/JGFS_ATMOS_AWIPS_G2 + +############################################################### + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gfs/atmos/post_processing/bufr_sounding/jgfs_atmos_postsnd.ecf b/ecf/scripts/gfs/atmos/post_processing/bufr_sounding/jgfs_atmos_postsnd.ecf new file mode 100755 index 0000000000..e2ddf7a1e5 --- /dev/null +++ b/ecf/scripts/gfs/atmos/post_processing/bufr_sounding/jgfs_atmos_postsnd.ecf @@ -0,0 +1,59 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_postsnd_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=02:00:00 +#PBS -l select=4:mpiprocs=10:ompthreads=8:ncpus=80 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} +module load python/${python_ver} +module load gempak/${gempak_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z +export USE_CFP=YES +export MPICH_MPIIO_HINTS_DISPLAY=1 +export OMP_NUM_THREADS=1 +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGFS_ATMOS_POSTSND + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gfs/atmos/post_processing/bulletins/jgfs_atmos_fbwind.ecf b/ecf/scripts/gfs/atmos/post_processing/bulletins/jgfs_atmos_fbwind.ecf new file mode 100755 index 0000000000..a6fb412f71 --- /dev/null +++ b/ecf/scripts/gfs/atmos/post_processing/bulletins/jgfs_atmos_fbwind.ecf @@ -0,0 +1,53 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_fbwind_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:05:00 +#PBS -l select=1:ncpus=1:mem=4GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load libjpeg/${libjpeg_ver} +module load grib_util/${grib_util_ver} +module load wgrib2/${wgrib2_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGFS_ATMOS_FBWIND + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gfs/atmos/verf/jgfs_atmos_vminmon.ecf b/ecf/scripts/gfs/atmos/verf/jgfs_atmos_vminmon.ecf new file mode 100755 index 0000000000..1e19a0ea3e --- /dev/null +++ b/ecf/scripts/gfs/atmos/verf/jgfs_atmos_vminmon.ecf @@ -0,0 +1,53 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_atmos_vminmon_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:05:00 +#PBS -l select=1:ncpus=1:mem=1GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load perl/${perl_ver} +module load util_shared/${util_shared_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z +export VERBOSE=YES + +############################################################ +# CALL executable job script here +############################################################ +$HOMEgfs/jobs/JGFS_ATMOS_VMINMON + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gfs/jgfs_forecast.ecf b/ecf/scripts/gfs/jgfs_forecast.ecf new file mode 100755 index 0000000000..370cd9342d --- /dev/null +++ b/ecf/scripts/gfs/jgfs_forecast.ecf @@ -0,0 +1,53 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_forecast_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=02:30:00 +#PBS -l select=112:mpiprocs=24:ompthreads=5:ncpus=120 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +# Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} + +module list + +############################################################# +# environment settings +############################################################# +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_FORECAST +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual + +%end diff --git a/ecf/scripts/gfs/wave/gempak/jgfs_wave_gempak.ecf b/ecf/scripts/gfs/wave/gempak/jgfs_wave_gempak.ecf new file mode 100755 index 0000000000..199f68adeb --- /dev/null +++ b/ecf/scripts/gfs/wave/gempak/jgfs_wave_gempak.ecf @@ -0,0 +1,63 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_wave_gempak_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=02:00:00 +#PBS -l select=1:ncpus=1:mem=1GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +## Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load gempak/${gempak_ver} + +module list + +############################################################ +## WCOSS_C environment settings +############################################################ +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_WAVE_GEMPAK + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual +###################################################################### +# Purpose: +# +# +###################################################################### + +###################################################################### +# Job specific troubleshooting instructions: +# see generic troubleshoot manual page +# +###################################################################### + +# include manual page below +%end diff --git a/ecf/scripts/gfs/wave/init/jgfs_wave_init.ecf b/ecf/scripts/gfs/wave/init/jgfs_wave_init.ecf new file mode 100755 index 0000000000..569a7c0894 --- /dev/null +++ b/ecf/scripts/gfs/wave/init/jgfs_wave_init.ecf @@ -0,0 +1,64 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_wave_init_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:10:00 +#PBS -l select=1:mpiprocs=11:ompthreads=1:ncpus=11:mem=2GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +## Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} + +module list + +############################################################ +## environment settings +############################################################ +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_WAVE_INIT + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual +###################################################################### +# Purpose: +# +# +###################################################################### + +###################################################################### +# Job specific troubleshooting instructions: +# see generic troubleshoot manual page +# +###################################################################### + +# include manual page below +%end diff --git a/ecf/scripts/gfs/wave/post/jgfs_wave_post_bndpnt.ecf b/ecf/scripts/gfs/wave/post/jgfs_wave_post_bndpnt.ecf new file mode 100755 index 0000000000..2871a0f1a1 --- /dev/null +++ b/ecf/scripts/gfs/wave/post/jgfs_wave_post_bndpnt.ecf @@ -0,0 +1,65 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_wave_post_bndpnt_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=01:00:00 +#PBS -l select=3:ncpus=80:ompthreads=1 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +## Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} + +module list + +############################################################ +## environment settings +############################################################ +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_WAVE_POST_BNDPNT + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual +###################################################################### +# Purpose: +# +# +###################################################################### + +###################################################################### +# Job specific troubleshooting instructions: +# see generic troubleshoot manual page +# +###################################################################### + +# include manual page below +%end diff --git a/ecf/scripts/gfs/wave/post/jgfs_wave_post_bndpntbll.ecf b/ecf/scripts/gfs/wave/post/jgfs_wave_post_bndpntbll.ecf new file mode 100755 index 0000000000..73015f869f --- /dev/null +++ b/ecf/scripts/gfs/wave/post/jgfs_wave_post_bndpntbll.ecf @@ -0,0 +1,63 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_wave_post_bndpntbll_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=01:00:00 +#PBS -l select=4:ncpus=112:ompthreads=1 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +## Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load intel/${intel_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} + +module list + +############################################################ +## environment settings +############################################################ +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_WAVE_POST_BNDPNTBLL + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual +###################################################################### +# Purpose: +# +# +###################################################################### + +###################################################################### +# Job specific troubleshooting instructions: +# see generic troubleshoot manual page +# +###################################################################### + +# include manual page below +%end diff --git a/ecf/scripts/gfs/wave/post/jgfs_wave_postpnt.ecf b/ecf/scripts/gfs/wave/post/jgfs_wave_postpnt.ecf new file mode 100755 index 0000000000..39e58f01c3 --- /dev/null +++ b/ecf/scripts/gfs/wave/post/jgfs_wave_postpnt.ecf @@ -0,0 +1,65 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_wave_postpnt_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=01:30:00 +#PBS -l select=4:ncpus=50:ompthreads=1 +#PBS -l place=vscatter:exclhost +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +## Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} + +module list + +############################################################ +## environment settings +############################################################ +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_WAVE_POST_PNT + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual +###################################################################### +# Purpose: +# +# +###################################################################### + +###################################################################### +# Job specific troubleshooting instructions: +# see generic troubleshoot manual page +# +###################################################################### + +# include manual page below +%end diff --git a/ecf/scripts/gfs/wave/post/jgfs_wave_postsbs.ecf b/ecf/scripts/gfs/wave/post/jgfs_wave_postsbs.ecf new file mode 100755 index 0000000000..a1f18fefd8 --- /dev/null +++ b/ecf/scripts/gfs/wave/post/jgfs_wave_postsbs.ecf @@ -0,0 +1,68 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_wave_postsbs_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=03:00:00 +#PBS -l select=1:mpiprocs=8:ompthreads=1:ncpus=8:mem=10GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +## Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} +module load libjpeg/${libjpeg_ver} +module load grib_util/${grib_util_ver} +module load wgrib2/${wgrib2_ver} + +module list + +############################################################ +## environment settings +############################################################ +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_WAVE_POST_SBS + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual +###################################################################### +# Purpose: +# +# +###################################################################### + +###################################################################### +# Job specific troubleshooting instructions: +# see generic troubleshoot manual page +# +###################################################################### + +# include manual page below +%end diff --git a/ecf/scripts/gfs/wave/post/jgfs_wave_prdgen_bulls.ecf b/ecf/scripts/gfs/wave/post/jgfs_wave_prdgen_bulls.ecf new file mode 100755 index 0000000000..5cbd08032b --- /dev/null +++ b/ecf/scripts/gfs/wave/post/jgfs_wave_prdgen_bulls.ecf @@ -0,0 +1,63 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_wave_prdgen_bulls_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:20:00 +#PBS -l select=1:ncpus=1:mem=1GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +## Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load util_shared/${util_shared_ver} + +module list + +############################################################ +## environment settings +############################################################ +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_WAVE_PRDGEN_BULLS + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual +###################################################################### +# Purpose: +# +# +###################################################################### + +###################################################################### +# Job specific troubleshooting instructions: +# see generic troubleshoot manual page +# +###################################################################### + +# include manual page below +%end diff --git a/ecf/scripts/gfs/wave/post/jgfs_wave_prdgen_gridded.ecf b/ecf/scripts/gfs/wave/post/jgfs_wave_prdgen_gridded.ecf new file mode 100755 index 0000000000..616f360d28 --- /dev/null +++ b/ecf/scripts/gfs/wave/post/jgfs_wave_prdgen_gridded.ecf @@ -0,0 +1,65 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_wave_prdgen_gridded_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=02:00:00 +#PBS -l select=1:ncpus=1:mem=1GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +## Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load libjpeg/${libjpeg_ver} +module load grib_util/${grib_util_ver} +module load wgrib2/${wgrib2_ver} + +module list + +############################################################ +## environment settings +############################################################ +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_WAVE_PRDGEN_GRIDDED + +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual +###################################################################### +# Purpose: +# +# +###################################################################### + +###################################################################### +# Job specific troubleshooting instructions: +# see generic troubleshoot manual page +# +###################################################################### + +# include manual page below +%end diff --git a/ecf/scripts/gfs/wave/prep/jgfs_wave_prep.ecf b/ecf/scripts/gfs/wave/prep/jgfs_wave_prep.ecf new file mode 100755 index 0000000000..97700528ab --- /dev/null +++ b/ecf/scripts/gfs/wave/prep/jgfs_wave_prep.ecf @@ -0,0 +1,71 @@ +#PBS -S /bin/bash +#PBS -N %RUN%_wave_prep_%CYC% +#PBS -j oe +#PBS -q %QUEUE% +#PBS -A %PROJ%-%PROJENVIR% +#PBS -l walltime=00:10:00 +#PBS -l select=1:mpiprocs=65:ompthreads=1:ncpus=65:mem=150GB +#PBS -l place=vscatter +#PBS -l debug=true + +model=gfs +%include +%include + +set -x + +export NET=%NET:gfs% +export RUN=%RUN% +export CDUMP=%RUN% + +############################################################ +## Load modules +############################################################ +module load PrgEnv-intel/${PrgEnv_intel_ver} +module load craype/${craype_ver} +module load intel/${intel_ver} +module load cray-mpich/${cray_mpich_ver} +module load cray-pals/${cray_pals_ver} +module load cfp/${cfp_ver} +module load cdo/${cdo_ver} +module load hdf5/${hdf5_ver} +module load netcdf/${netcdf_ver} +module load udunits/${udunits_ver} +module load gsl/${gsl_ver} +module load nco/${nco_ver} +module load wgrib2/${wgrib2_ver} + +module list + +############################################################ +## environment settings +############################################################ +export cyc=%CYC% +export cycle=t%CYC%z + +############################################################ +# CALL executable job script here +############################################################ +${HOMEgfs}/jobs/JGLOBAL_WAVE_PREP +if [ $? -ne 0 ]; then + ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" + ecflow_client --abort + exit +fi + +%include +%manual +###################################################################### +# Purpose: +# +# +###################################################################### + +###################################################################### +# Job specific troubleshooting instructions: +# see generic troubleshoot manual page +# +###################################################################### + +# include manual page below +%end diff --git a/ecf/setup_ecf_links.sh b/ecf/setup_ecf_links.sh new file mode 100755 index 0000000000..571d255940 --- /dev/null +++ b/ecf/setup_ecf_links.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +set -eu + +ECF_DIR=$(pwd) + +# Function that loops over forecast hours and +# creates link between the master and target +function link_master_to_fhr(){ + tmpl=$1 # Name of the master template + fhrs=$2 # Array of forecast hours + for fhr in ${fhrs[@]}; do + fhrchar=$(printf %03d "${fhr}") + master=${tmpl}_master.ecf + target=${tmpl}_f${fhrchar}.ecf + rm -f "${target}" + ln -sf "${master}" "${target}" + done +} + +# EnKF GDAS post files +cd "${ECF_DIR}/scripts/enkfgdas/post" +echo "Linking enkfgdas/post ..." +fhrs=($(seq 3 9)) +link_master_to_fhr "jenkfgdas_post" "${fhrs}" + +# GDAS post files +cd "${ECF_DIR}/scripts/gdas/atmos/post" +echo "Linking gdas/atmos/post ..." +rm -f jgdas_atmos_post_anl.ecf +ln -sf jgdas_atmos_post_master.ecf jgdas_atmos_post_anl.ecf +fhrs=($(seq 0 9)) +link_master_to_fhr "jgdas_atmos_post" "${fhrs}" + +# GFS post files +cd "${ECF_DIR}/scripts/gfs/atmos/post" +echo "Linking gfs/atmos/post ..." +rm -f jgfs_atmos_post_anl.ecf +ln -sf jgfs_atmos_post_master.ecf jgfs_atmos_post_anl.ecf +fhrs=($(seq 0 1 120) $(seq 123 3 384)) +link_master_to_fhr "jgfs_atmos_post" "${fhrs}" + +# GFS awips 20km 1p0 files +cd "${ECF_DIR}/scripts/gfs/atmos/post_processing/awips_20km_1p0" +echo "Linking gfs/atmos/post_processing/awips_20km_1p0 ..." +fhrs=($(seq 0 3 84) $(seq 90 6 240)) +link_master_to_fhr "jgfs_atmos_awips" "${fhrs}" + +# GFS awips g2 files +cd "${ECF_DIR}/scripts/gfs/atmos/post_processing/awips_g2" +echo "Linking gfs/atmos/post_processing/awips_g2 ..." +fhrs=($(seq 0 3 84) $(seq 90 6 240)) +link_master_to_fhr "jgfs_atmos_awips_g2" "${fhrs}" + diff --git a/ecflow/ecf/defs/gdas_00.def b/ecflow/ecf/defs/gdas_00.def deleted file mode 100644 index 292fc9efd7..0000000000 --- a/ecflow/ecf/defs/gdas_00.def +++ /dev/null @@ -1,240 +0,0 @@ - family gdas - edit CYC '00' - edit ECF_FILES '/ecf/ecfnets/scripts/gdas_FV3' - edit PROJ 'GDAS-OPS' - edit NET 'gfs' - edit RUN 'gdas' - edit COM '/gpfs/dell1/nco/ops/com' - edit QUEUESHARED 'prod_shared' - edit QUEUESERV 'prod_transfer' - edit QUEUE 'prod' - family dump - task jgdas_tropcy_qc_reloc - time 05:45 - task jgdas_dump - event 1 release_sfcprep - time 05:50 - task jgdas_dump_post - trigger jgdas_dump == complete - event 1 release_gdas00_dump_alert - task jgdas_dump_alert - trigger jgdas_dump_post:release_gdas00_dump_alert - task jmodel_realtime_gdas - trigger jgdas_dump_alert == complete - endfamily - family prep - task jgdas_emcsfc_sfc_prep - trigger ../dump/jgdas_dump:release_sfcprep - task jgdas_prep - trigger ../dump/jgdas_dump == complete and ../dump/jgdas_tropcy_qc_reloc == complete - task jgdas_prep_post - trigger jgdas_prep == complete and ../analysis/jgdas_analysis_high == complete - endfamily - family analysis - task jgdas_analysis_high - trigger ../prep/jgdas_prep == complete and ../prep/jgdas_emcsfc_sfc_prep == complete - event 1 release_fcst - endfamily - task jgdas_vminmon - trigger analysis/jgdas_analysis_high == complete - family forecast - task jgdas_forecast_high - trigger ../analysis/jgdas_analysis_high:release_fcst - endfamily - family gempak - task jgdas_gempak - trigger ../forecast/jgdas_forecast_high == complete - task jgdas_gempak_meta_ncdc - trigger ./jgdas_gempak == complete - endfamily - family post - task jgdas_post_manager - trigger ../forecast == active - event 1 release_postanl - event 2 release_post000 - event 3 release_post001 - event 4 release_post002 - event 5 release_post003 - event 6 release_post004 - event 7 release_post005 - event 8 release_post006 - event 9 release_post007 - event 10 release_post008 - event 11 release_post009 - task jgdas_post_anl - trigger ./jgdas_post_manager:release_postanl - edit FHRGRP '000' - edit FHRLST 'anl' - edit HR 'anl' - edit FHR 'anl' - event 1 release_postanl - task jgdas_post_f000 - trigger ./jgdas_post_manager:release_post000 - edit FHR 'f000' - edit HR '000' - edit FHRGRP '001' - edit FHRLST 'f000' - task jgdas_post_f001 - trigger ./jgdas_post_manager:release_post001 - edit FHR 'f001' - edit HR '001' - edit FHRGRP '002' - edit FHRLST 'f001' - task jgdas_post_f002 - trigger ./jgdas_post_manager:release_post002 - edit FHR 'f002' - edit HR '002' - edit FHRGRP '003' - edit FHRLST 'f002' - task jgdas_post_f003 - trigger ./jgdas_post_manager:release_post003 - edit FHR 'f003' - edit HR '003' - edit FHRGRP '004' - edit FHRLST 'f003' - task jgdas_post_f004 - trigger ./jgdas_post_manager:release_post004 - edit FHR 'f004' - edit HR '004' - edit FHRGRP '005' - edit FHRLST 'f004' - task jgdas_post_f005 - trigger ./jgdas_post_manager:release_post005 - edit FHR 'f005' - edit HR '005' - edit FHRGRP '006' - edit FHRLST 'f005' - task jgdas_post_f006 - trigger ./jgdas_post_manager:release_post006 - edit FHR 'f006' - edit HR '006' - edit FHRGRP '007' - edit FHRLST 'f006' - task jgdas_post_f007 - trigger ./jgdas_post_manager:release_post007 - edit FHR 'f007' - edit HR '007' - edit FHRGRP '008' - edit FHRLST 'f007' - task jgdas_post_f008 - trigger ./jgdas_post_manager:release_post008 - edit FHR 'f008' - edit HR '008' - edit FHRGRP '009' - edit FHRLST 'f008' - task jgdas_post_f009 - trigger ./jgdas_post_manager:release_post009 - edit FHR 'f009' - edit HR '009' - edit FHRGRP '010' - edit FHRLST 'f009' - endfamily - family enkf - task jgdas_enkf_select_obs - trigger ../prep/jgdas_prep == complete - family innovate - trigger ./jgdas_enkf_select_obs == complete - task jgdas_enkf_innovate_obs_grp1 - edit ENSGRP '01' - task jgdas_enkf_innovate_obs_grp2 - edit ENSGRP '02' - task jgdas_enkf_innovate_obs_grp3 - edit ENSGRP '03' - task jgdas_enkf_innovate_obs_grp4 - edit ENSGRP '04' - task jgdas_enkf_innovate_obs_grp5 - edit ENSGRP '05' - task jgdas_enkf_innovate_obs_grp6 - edit ENSGRP '06' - task jgdas_enkf_innovate_obs_grp7 - edit ENSGRP '07' - task jgdas_enkf_innovate_obs_grp8 - edit ENSGRP '08' - task jgdas_enkf_innovate_obs_grp9 - edit ENSGRP '09' - task jgdas_enkf_innovate_obs_grp10 - edit ENSGRP '10' - endfamily - task jgdas_enkf_update - trigger ./innovate == complete - task jgdas_enkf_inflate_recenter - trigger ./jgdas_enkf_update == complete and ../analysis/jgdas_analysis_high == complete - family forecast - trigger ./jgdas_enkf_inflate_recenter == complete - task jgdas_enkf_fcst_grp1 - edit ENSGRP '01' - task jgdas_enkf_fcst_grp2 - edit ENSGRP '02' - task jgdas_enkf_fcst_grp3 - edit ENSGRP '03' - task jgdas_enkf_fcst_grp4 - edit ENSGRP '04' - task jgdas_enkf_fcst_grp5 - edit ENSGRP '05' - task jgdas_enkf_fcst_grp6 - edit ENSGRP '06' - task jgdas_enkf_fcst_grp7 - edit ENSGRP '07' - task jgdas_enkf_fcst_grp8 - edit ENSGRP '08' - task jgdas_enkf_fcst_grp9 - edit ENSGRP '09' - task jgdas_enkf_fcst_grp10 - edit ENSGRP '10' - task jgdas_enkf_fcst_grp11 - edit ENSGRP '11' - task jgdas_enkf_fcst_grp12 - edit ENSGRP '12' - task jgdas_enkf_fcst_grp13 - edit ENSGRP '13' - task jgdas_enkf_fcst_grp14 - edit ENSGRP '14' - task jgdas_enkf_fcst_grp15 - edit ENSGRP '15' - task jgdas_enkf_fcst_grp16 - edit ENSGRP '16' - task jgdas_enkf_fcst_grp17 - edit ENSGRP '17' - task jgdas_enkf_fcst_grp18 - edit ENSGRP '18' - task jgdas_enkf_fcst_grp19 - edit ENSGRP '19' - task jgdas_enkf_fcst_grp20 - edit ENSGRP '20' - endfamily - family post - trigger ./forecast == complete - task jgdas_enkf_post_f003 - edit FHMIN_EPOS '003' - edit FHMAX_EPOS '003' - edit FHOUT_EPOS '003' - task jgdas_enkf_post_f004 - edit FHMIN_EPOS '004' - edit FHMAX_EPOS '004' - edit FHOUT_EPOS '004' - task jgdas_enkf_post_f005 - edit FHMIN_EPOS '005' - edit FHMAX_EPOS '005' - edit FHOUT_EPOS '005' - task jgdas_enkf_post_f006 - edit FHMIN_EPOS '006' - edit FHMAX_EPOS '006' - edit FHOUT_EPOS '006' - task jgdas_enkf_post_f007 - edit FHMIN_EPOS '007' - edit FHMAX_EPOS '007' - edit FHOUT_EPOS '007' - task jgdas_enkf_post_f008 - edit FHMIN_EPOS '008' - edit FHMAX_EPOS '008' - edit FHOUT_EPOS '008' - task jgdas_enkf_post_f009 - edit FHMIN_EPOS '009' - edit FHMAX_EPOS '009' - edit FHOUT_EPOS '009' - endfamily - endfamily - task jgdas_verfrad - trigger enkf == complete - endfamily - diff --git a/ecflow/ecf/defs/gdas_06.def b/ecflow/ecf/defs/gdas_06.def deleted file mode 100644 index 391d8c90d2..0000000000 --- a/ecflow/ecf/defs/gdas_06.def +++ /dev/null @@ -1,241 +0,0 @@ - family gdas - edit CYC '06' - edit ECF_FILES '/ecf/ecfnets/scripts/gdas_FV3' - edit PROJ 'GDAS-OPS' - edit NET 'gfs' - edit RUN 'gdas' - edit COM '/gpfs/dell1/nco/ops/com' - edit QUEUESHARED 'prod_shared' - edit QUEUESERV 'prod_transfer' - edit QUEUE 'prod' - edit MACHINE_SITE 'production' - family dump - task jgdas_tropcy_qc_reloc - time 11:45 - task jgdas_dump - event 1 release_sfcprep - time 11:50 - task jgdas_dump_post - trigger jgdas_dump == complete - event 1 release_gdas06_dump_alert - task jgdas_dump_alert - trigger jgdas_dump_post:release_gdas06_dump_alert - task jmodel_realtime_gdas - trigger jgdas_dump_alert == complete - endfamily - family prep - task jgdas_emcsfc_sfc_prep - trigger ../dump/jgdas_dump:release_sfcprep - task jgdas_prep - trigger ../dump/jgdas_dump == complete and ../dump/jgdas_tropcy_qc_reloc == complete - task jgdas_prep_post - trigger jgdas_prep == complete and ../analysis/jgdas_analysis_high == complete - endfamily - family analysis - task jgdas_analysis_high - trigger ../prep/jgdas_prep == complete and ../prep/jgdas_emcsfc_sfc_prep == complete - event 1 release_fcst - endfamily - task jgdas_vminmon - trigger analysis/jgdas_analysis_high == complete - family forecast - task jgdas_forecast_high - trigger ../analysis/jgdas_analysis_high:release_fcst - endfamily - family gempak - task jgdas_gempak - trigger ../forecast/jgdas_forecast_high == complete - task jgdas_gempak_meta_ncdc - trigger ./jgdas_gempak == complete - endfamily - family post - task jgdas_post_manager - trigger ../forecast == active - event 1 release_postanl - event 2 release_post000 - event 3 release_post001 - event 4 release_post002 - event 5 release_post003 - event 6 release_post004 - event 7 release_post005 - event 8 release_post006 - event 9 release_post007 - event 10 release_post008 - event 11 release_post009 - task jgdas_post_anl - trigger ./jgdas_post_manager:release_postanl - edit FHRGRP '000' - edit FHRLST 'anl' - edit HR 'anl' - edit FHR 'anl' - event 1 release_postanl - task jgdas_post_f000 - trigger ./jgdas_post_manager:release_post000 - edit FHR 'f000' - edit HR '000' - edit FHRGRP '001' - edit FHRLST 'f000' - task jgdas_post_f001 - trigger ./jgdas_post_manager:release_post001 - edit FHR 'f001' - edit HR '001' - edit FHRGRP '002' - edit FHRLST 'f001' - task jgdas_post_f002 - trigger ./jgdas_post_manager:release_post002 - edit FHR 'f002' - edit HR '002' - edit FHRGRP '003' - edit FHRLST 'f002' - task jgdas_post_f003 - trigger ./jgdas_post_manager:release_post003 - edit FHR 'f003' - edit HR '003' - edit FHRGRP '004' - edit FHRLST 'f003' - task jgdas_post_f004 - trigger ./jgdas_post_manager:release_post004 - edit FHR 'f004' - edit HR '004' - edit FHRGRP '005' - edit FHRLST 'f004' - task jgdas_post_f005 - trigger ./jgdas_post_manager:release_post005 - edit FHR 'f005' - edit HR '005' - edit FHRGRP '006' - edit FHRLST 'f005' - task jgdas_post_f006 - trigger ./jgdas_post_manager:release_post006 - edit FHR 'f006' - edit HR '006' - edit FHRGRP '007' - edit FHRLST 'f006' - task jgdas_post_f007 - trigger ./jgdas_post_manager:release_post007 - edit FHR 'f007' - edit HR '007' - edit FHRGRP '008' - edit FHRLST 'f007' - task jgdas_post_f008 - trigger ./jgdas_post_manager:release_post008 - edit FHR 'f008' - edit HR '008' - edit FHRGRP '009' - edit FHRLST 'f008' - task jgdas_post_f009 - trigger ./jgdas_post_manager:release_post009 - edit FHR 'f009' - edit HR '009' - edit FHRGRP '010' - edit FHRLST 'f009' - endfamily - family enkf - task jgdas_enkf_select_obs - trigger ../prep/jgdas_prep == complete - family innovate - trigger ./jgdas_enkf_select_obs == complete - task jgdas_enkf_innovate_obs_grp1 - edit ENSGRP '01' - task jgdas_enkf_innovate_obs_grp2 - edit ENSGRP '02' - task jgdas_enkf_innovate_obs_grp3 - edit ENSGRP '03' - task jgdas_enkf_innovate_obs_grp4 - edit ENSGRP '04' - task jgdas_enkf_innovate_obs_grp5 - edit ENSGRP '05' - task jgdas_enkf_innovate_obs_grp6 - edit ENSGRP '06' - task jgdas_enkf_innovate_obs_grp7 - edit ENSGRP '07' - task jgdas_enkf_innovate_obs_grp8 - edit ENSGRP '08' - task jgdas_enkf_innovate_obs_grp9 - edit ENSGRP '09' - task jgdas_enkf_innovate_obs_grp10 - edit ENSGRP '10' - endfamily - task jgdas_enkf_update - trigger ./innovate == complete - task jgdas_enkf_inflate_recenter - trigger ./jgdas_enkf_update == complete and ../analysis/jgdas_analysis_high == complete - family forecast - trigger ./jgdas_enkf_inflate_recenter == complete - task jgdas_enkf_fcst_grp1 - edit ENSGRP '01' - task jgdas_enkf_fcst_grp2 - edit ENSGRP '02' - task jgdas_enkf_fcst_grp3 - edit ENSGRP '03' - task jgdas_enkf_fcst_grp4 - edit ENSGRP '04' - task jgdas_enkf_fcst_grp5 - edit ENSGRP '05' - task jgdas_enkf_fcst_grp6 - edit ENSGRP '06' - task jgdas_enkf_fcst_grp7 - edit ENSGRP '07' - task jgdas_enkf_fcst_grp8 - edit ENSGRP '08' - task jgdas_enkf_fcst_grp9 - edit ENSGRP '09' - task jgdas_enkf_fcst_grp10 - edit ENSGRP '10' - task jgdas_enkf_fcst_grp11 - edit ENSGRP '11' - task jgdas_enkf_fcst_grp12 - edit ENSGRP '12' - task jgdas_enkf_fcst_grp13 - edit ENSGRP '13' - task jgdas_enkf_fcst_grp14 - edit ENSGRP '14' - task jgdas_enkf_fcst_grp15 - edit ENSGRP '15' - task jgdas_enkf_fcst_grp16 - edit ENSGRP '16' - task jgdas_enkf_fcst_grp17 - edit ENSGRP '17' - task jgdas_enkf_fcst_grp18 - edit ENSGRP '18' - task jgdas_enkf_fcst_grp19 - edit ENSGRP '19' - task jgdas_enkf_fcst_grp20 - edit ENSGRP '20' - endfamily - family post - trigger ./forecast == complete - task jgdas_enkf_post_f003 - edit FHMIN_EPOS '003' - edit FHMAX_EPOS '003' - edit FHOUT_EPOS '003' - task jgdas_enkf_post_f004 - edit FHMIN_EPOS '004' - edit FHMAX_EPOS '004' - edit FHOUT_EPOS '004' - task jgdas_enkf_post_f005 - edit FHMIN_EPOS '005' - edit FHMAX_EPOS '005' - edit FHOUT_EPOS '005' - task jgdas_enkf_post_f006 - edit FHMIN_EPOS '006' - edit FHMAX_EPOS '006' - edit FHOUT_EPOS '006' - task jgdas_enkf_post_f007 - edit FHMIN_EPOS '007' - edit FHMAX_EPOS '007' - edit FHOUT_EPOS '007' - task jgdas_enkf_post_f008 - edit FHMIN_EPOS '008' - edit FHMAX_EPOS '008' - edit FHOUT_EPOS '008' - task jgdas_enkf_post_f009 - edit FHMIN_EPOS '009' - edit FHMAX_EPOS '009' - edit FHOUT_EPOS '009' - endfamily - endfamily - task jgdas_verfrad - trigger enkf == complete - endfamily - diff --git a/ecflow/ecf/defs/gdas_12.def b/ecflow/ecf/defs/gdas_12.def deleted file mode 100644 index 674f0bec16..0000000000 --- a/ecflow/ecf/defs/gdas_12.def +++ /dev/null @@ -1,240 +0,0 @@ - family gdas - edit CYC '12' - edit ECF_FILES '/ecf/ecfnets/scripts/gdas_FV3' - edit PROJ 'GDAS-OPS' - edit NET 'gfs' - edit RUN 'gdas' - edit COM '/gpfs/dell1/nco/ops/com' - edit QUEUESHARED 'prod_shared' - edit QUEUESERV 'prod_transfer' - edit QUEUE 'prod' - family dump - task jgdas_tropcy_qc_reloc - time 17:45 - task jgdas_dump - event 1 release_sfcprep - time 17:50 - task jgdas_dump_post - trigger jgdas_dump == complete - event 1 release_gdas12_dump_alert - task jgdas_dump_alert - trigger jgdas_dump_post:release_gdas12_dump_alert - task jmodel_realtime_gdas - trigger jgdas_dump_alert == complete - endfamily - family prep - task jgdas_emcsfc_sfc_prep - trigger ../dump/jgdas_dump:release_sfcprep - task jgdas_prep - trigger ../dump/jgdas_dump == complete and ../dump/jgdas_tropcy_qc_reloc == complete - task jgdas_prep_post - trigger jgdas_prep == complete and ../analysis/jgdas_analysis_high == complete - endfamily - family analysis - task jgdas_analysis_high - trigger ../prep/jgdas_prep == complete and ../prep/jgdas_emcsfc_sfc_prep == complete - event 1 release_fcst - endfamily - task jgdas_vminmon - trigger analysis/jgdas_analysis_high == complete - family forecast - task jgdas_forecast_high - trigger ../analysis/jgdas_analysis_high:release_fcst - endfamily - family gempak - task jgdas_gempak - trigger ../forecast/jgdas_forecast_high == complete - task jgdas_gempak_meta_ncdc - trigger ./jgdas_gempak == complete - endfamily - family post - task jgdas_post_manager - trigger ../forecast == active - event 1 release_postanl - event 2 release_post000 - event 3 release_post001 - event 4 release_post002 - event 5 release_post003 - event 6 release_post004 - event 7 release_post005 - event 8 release_post006 - event 9 release_post007 - event 10 release_post008 - event 11 release_post009 - task jgdas_post_anl - trigger ./jgdas_post_manager:release_postanl - edit FHRGRP '000' - edit FHRLST 'anl' - edit HR 'anl' - edit FHR 'anl' - event 1 release_postanl - task jgdas_post_f000 - trigger ./jgdas_post_manager:release_post000 - edit FHR 'f000' - edit HR '000' - edit FHRGRP '001' - edit FHRLST 'f000' - task jgdas_post_f001 - trigger ./jgdas_post_manager:release_post001 - edit FHR 'f001' - edit HR '001' - edit FHRGRP '002' - edit FHRLST 'f001' - task jgdas_post_f002 - trigger ./jgdas_post_manager:release_post002 - edit FHR 'f002' - edit HR '002' - edit FHRGRP '003' - edit FHRLST 'f002' - task jgdas_post_f003 - trigger ./jgdas_post_manager:release_post003 - edit FHR 'f003' - edit HR '003' - edit FHRGRP '004' - edit FHRLST 'f003' - task jgdas_post_f004 - trigger ./jgdas_post_manager:release_post004 - edit FHR 'f004' - edit HR '004' - edit FHRGRP '005' - edit FHRLST 'f004' - task jgdas_post_f005 - trigger ./jgdas_post_manager:release_post005 - edit FHR 'f005' - edit HR '005' - edit FHRGRP '006' - edit FHRLST 'f005' - task jgdas_post_f006 - trigger ./jgdas_post_manager:release_post006 - edit FHR 'f006' - edit HR '006' - edit FHRGRP '007' - edit FHRLST 'f006' - task jgdas_post_f007 - trigger ./jgdas_post_manager:release_post007 - edit FHR 'f007' - edit HR '007' - edit FHRGRP '008' - edit FHRLST 'f007' - task jgdas_post_f008 - trigger ./jgdas_post_manager:release_post008 - edit FHR 'f008' - edit HR '008' - edit FHRGRP '009' - edit FHRLST 'f008' - task jgdas_post_f009 - trigger ./jgdas_post_manager:release_post009 - edit FHR 'f009' - edit HR '009' - edit FHRGRP '010' - edit FHRLST 'f009' - endfamily - family enkf - task jgdas_enkf_select_obs - trigger ../prep/jgdas_prep == complete - family innovate - trigger ./jgdas_enkf_select_obs == complete - task jgdas_enkf_innovate_obs_grp1 - edit ENSGRP '01' - task jgdas_enkf_innovate_obs_grp2 - edit ENSGRP '02' - task jgdas_enkf_innovate_obs_grp3 - edit ENSGRP '03' - task jgdas_enkf_innovate_obs_grp4 - edit ENSGRP '04' - task jgdas_enkf_innovate_obs_grp5 - edit ENSGRP '05' - task jgdas_enkf_innovate_obs_grp6 - edit ENSGRP '06' - task jgdas_enkf_innovate_obs_grp7 - edit ENSGRP '07' - task jgdas_enkf_innovate_obs_grp8 - edit ENSGRP '08' - task jgdas_enkf_innovate_obs_grp9 - edit ENSGRP '09' - task jgdas_enkf_innovate_obs_grp10 - edit ENSGRP '10' - endfamily - task jgdas_enkf_update - trigger ./innovate == complete - task jgdas_enkf_inflate_recenter - trigger ./jgdas_enkf_update == complete and ../analysis/jgdas_analysis_high == complete - family forecast - trigger ./jgdas_enkf_inflate_recenter == complete - task jgdas_enkf_fcst_grp1 - edit ENSGRP '01' - task jgdas_enkf_fcst_grp2 - edit ENSGRP '02' - task jgdas_enkf_fcst_grp3 - edit ENSGRP '03' - task jgdas_enkf_fcst_grp4 - edit ENSGRP '04' - task jgdas_enkf_fcst_grp5 - edit ENSGRP '05' - task jgdas_enkf_fcst_grp6 - edit ENSGRP '06' - task jgdas_enkf_fcst_grp7 - edit ENSGRP '07' - task jgdas_enkf_fcst_grp8 - edit ENSGRP '08' - task jgdas_enkf_fcst_grp9 - edit ENSGRP '09' - task jgdas_enkf_fcst_grp10 - edit ENSGRP '10' - task jgdas_enkf_fcst_grp11 - edit ENSGRP '11' - task jgdas_enkf_fcst_grp12 - edit ENSGRP '12' - task jgdas_enkf_fcst_grp13 - edit ENSGRP '13' - task jgdas_enkf_fcst_grp14 - edit ENSGRP '14' - task jgdas_enkf_fcst_grp15 - edit ENSGRP '15' - task jgdas_enkf_fcst_grp16 - edit ENSGRP '16' - task jgdas_enkf_fcst_grp17 - edit ENSGRP '17' - task jgdas_enkf_fcst_grp18 - edit ENSGRP '18' - task jgdas_enkf_fcst_grp19 - edit ENSGRP '19' - task jgdas_enkf_fcst_grp20 - edit ENSGRP '20' - endfamily - family post - trigger ./forecast == complete - task jgdas_enkf_post_f003 - edit FHMIN_EPOS '003' - edit FHMAX_EPOS '003' - edit FHOUT_EPOS '003' - task jgdas_enkf_post_f004 - edit FHMIN_EPOS '004' - edit FHMAX_EPOS '004' - edit FHOUT_EPOS '004' - task jgdas_enkf_post_f005 - edit FHMIN_EPOS '005' - edit FHMAX_EPOS '005' - edit FHOUT_EPOS '005' - task jgdas_enkf_post_f006 - edit FHMIN_EPOS '006' - edit FHMAX_EPOS '006' - edit FHOUT_EPOS '006' - task jgdas_enkf_post_f007 - edit FHMIN_EPOS '007' - edit FHMAX_EPOS '007' - edit FHOUT_EPOS '007' - task jgdas_enkf_post_f008 - edit FHMIN_EPOS '008' - edit FHMAX_EPOS '008' - edit FHOUT_EPOS '008' - task jgdas_enkf_post_f009 - edit FHMIN_EPOS '009' - edit FHMAX_EPOS '009' - edit FHOUT_EPOS '009' - endfamily - endfamily - task jgdas_verfrad - trigger enkf == complete - endfamily - diff --git a/ecflow/ecf/defs/gdas_18.def b/ecflow/ecf/defs/gdas_18.def deleted file mode 100644 index 10b0415530..0000000000 --- a/ecflow/ecf/defs/gdas_18.def +++ /dev/null @@ -1,240 +0,0 @@ - family gdas - edit CYC '18' - edit ECF_FILES '/ecf/ecfnets/scripts/gdas_FV3' - edit PROJ 'GDAS-OPS' - edit NET 'gfs' - edit RUN 'gdas' - edit COM '/gpfs/dell1/nco/ops/com' - edit QUEUESHARED 'prod_shared' - edit QUEUESERV 'prod_transfer' - edit QUEUE 'prod' - family dump - task jgdas_tropcy_qc_reloc - time 23:45 - task jgdas_dump - event 1 release_sfcprep - time 23:50 - task jgdas_dump_post - trigger jgdas_dump == complete - event 1 release_gdas18_dump_alert - task jgdas_dump_alert - trigger jgdas_dump_post:release_gdas18_dump_alert - task jmodel_realtime_gdas - trigger jgdas_dump_alert == complete - endfamily - family prep - task jgdas_emcsfc_sfc_prep - trigger ../dump/jgdas_dump:release_sfcprep - task jgdas_prep - trigger ../dump/jgdas_dump == complete and ../dump/jgdas_tropcy_qc_reloc == complete - task jgdas_prep_post - trigger jgdas_prep == complete and ../analysis/jgdas_analysis_high == complete - endfamily - family analysis - task jgdas_analysis_high - trigger ../prep/jgdas_prep == complete and ../prep/jgdas_emcsfc_sfc_prep == complete - event 1 release_fcst - endfamily - task jgdas_vminmon - trigger analysis/jgdas_analysis_high == complete - family forecast - task jgdas_forecast_high - trigger ../analysis/jgdas_analysis_high:release_fcst and ../enkf/innovate == complete - endfamily - family gempak - task jgdas_gempak - trigger ../forecast/jgdas_forecast_high == complete - task jgdas_gempak_meta_ncdc - trigger ./jgdas_gempak == complete - endfamily - family post - task jgdas_post_manager - trigger ../forecast == active - event 1 release_postanl - event 2 release_post000 - event 3 release_post001 - event 4 release_post002 - event 5 release_post003 - event 6 release_post004 - event 7 release_post005 - event 8 release_post006 - event 9 release_post007 - event 10 release_post008 - event 11 release_post009 - task jgdas_post_anl - trigger ./jgdas_post_manager:release_postanl - edit FHRGRP '000' - edit FHRLST 'anl' - edit HR 'anl' - edit FHR 'anl' - event 1 release_postanl - task jgdas_post_f000 - trigger ./jgdas_post_manager:release_post000 - edit FHR 'f000' - edit HR '000' - edit FHRGRP '001' - edit FHRLST 'f000' - task jgdas_post_f001 - trigger ./jgdas_post_manager:release_post001 - edit FHR 'f001' - edit HR '001' - edit FHRGRP '002' - edit FHRLST 'f001' - task jgdas_post_f002 - trigger ./jgdas_post_manager:release_post002 - edit FHR 'f002' - edit HR '002' - edit FHRGRP '003' - edit FHRLST 'f002' - task jgdas_post_f003 - trigger ./jgdas_post_manager:release_post003 - edit FHR 'f003' - edit HR '003' - edit FHRGRP '004' - edit FHRLST 'f003' - task jgdas_post_f004 - trigger ./jgdas_post_manager:release_post004 - edit FHR 'f004' - edit HR '004' - edit FHRGRP '005' - edit FHRLST 'f004' - task jgdas_post_f005 - trigger ./jgdas_post_manager:release_post005 - edit FHR 'f005' - edit HR '005' - edit FHRGRP '006' - edit FHRLST 'f005' - task jgdas_post_f006 - trigger ./jgdas_post_manager:release_post006 - edit FHR 'f006' - edit HR '006' - edit FHRGRP '007' - edit FHRLST 'f006' - task jgdas_post_f007 - trigger ./jgdas_post_manager:release_post007 - edit FHR 'f007' - edit HR '007' - edit FHRGRP '008' - edit FHRLST 'f007' - task jgdas_post_f008 - trigger ./jgdas_post_manager:release_post008 - edit FHR 'f008' - edit HR '008' - edit FHRGRP '009' - edit FHRLST 'f008' - task jgdas_post_f009 - trigger ./jgdas_post_manager:release_post009 - edit FHR 'f009' - edit HR '009' - edit FHRGRP '010' - edit FHRLST 'f009' - endfamily - family enkf - task jgdas_enkf_select_obs - trigger ../prep/jgdas_prep == complete - family innovate - trigger ./jgdas_enkf_select_obs == complete - task jgdas_enkf_innovate_obs_grp1 - edit ENSGRP '01' - task jgdas_enkf_innovate_obs_grp2 - edit ENSGRP '02' - task jgdas_enkf_innovate_obs_grp3 - edit ENSGRP '03' - task jgdas_enkf_innovate_obs_grp4 - edit ENSGRP '04' - task jgdas_enkf_innovate_obs_grp5 - edit ENSGRP '05' - task jgdas_enkf_innovate_obs_grp6 - edit ENSGRP '06' - task jgdas_enkf_innovate_obs_grp7 - edit ENSGRP '07' - task jgdas_enkf_innovate_obs_grp8 - edit ENSGRP '08' - task jgdas_enkf_innovate_obs_grp9 - edit ENSGRP '09' - task jgdas_enkf_innovate_obs_grp10 - edit ENSGRP '10' - endfamily - task jgdas_enkf_update - trigger ./innovate == complete - task jgdas_enkf_inflate_recenter - trigger ./jgdas_enkf_update == complete and ../analysis/jgdas_analysis_high == complete - family forecast - trigger ./jgdas_enkf_inflate_recenter == complete - task jgdas_enkf_fcst_grp1 - edit ENSGRP '01' - task jgdas_enkf_fcst_grp2 - edit ENSGRP '02' - task jgdas_enkf_fcst_grp3 - edit ENSGRP '03' - task jgdas_enkf_fcst_grp4 - edit ENSGRP '04' - task jgdas_enkf_fcst_grp5 - edit ENSGRP '05' - task jgdas_enkf_fcst_grp6 - edit ENSGRP '06' - task jgdas_enkf_fcst_grp7 - edit ENSGRP '07' - task jgdas_enkf_fcst_grp8 - edit ENSGRP '08' - task jgdas_enkf_fcst_grp9 - edit ENSGRP '09' - task jgdas_enkf_fcst_grp10 - edit ENSGRP '10' - task jgdas_enkf_fcst_grp11 - edit ENSGRP '11' - task jgdas_enkf_fcst_grp12 - edit ENSGRP '12' - task jgdas_enkf_fcst_grp13 - edit ENSGRP '13' - task jgdas_enkf_fcst_grp14 - edit ENSGRP '14' - task jgdas_enkf_fcst_grp15 - edit ENSGRP '15' - task jgdas_enkf_fcst_grp16 - edit ENSGRP '16' - task jgdas_enkf_fcst_grp17 - edit ENSGRP '17' - task jgdas_enkf_fcst_grp18 - edit ENSGRP '18' - task jgdas_enkf_fcst_grp19 - edit ENSGRP '19' - task jgdas_enkf_fcst_grp20 - edit ENSGRP '20' - endfamily - family post - trigger ./forecast == complete - task jgdas_enkf_post_f003 - edit FHMIN_EPOS '003' - edit FHMAX_EPOS '003' - edit FHOUT_EPOS '003' - task jgdas_enkf_post_f004 - edit FHMIN_EPOS '004' - edit FHMAX_EPOS '004' - edit FHOUT_EPOS '004' - task jgdas_enkf_post_f005 - edit FHMIN_EPOS '005' - edit FHMAX_EPOS '005' - edit FHOUT_EPOS '005' - task jgdas_enkf_post_f006 - edit FHMIN_EPOS '006' - edit FHMAX_EPOS '006' - edit FHOUT_EPOS '006' - task jgdas_enkf_post_f007 - edit FHMIN_EPOS '007' - edit FHMAX_EPOS '007' - edit FHOUT_EPOS '007' - task jgdas_enkf_post_f008 - edit FHMIN_EPOS '008' - edit FHMAX_EPOS '008' - edit FHOUT_EPOS '008' - task jgdas_enkf_post_f009 - edit FHMIN_EPOS '009' - edit FHMAX_EPOS '009' - edit FHOUT_EPOS '009' - endfamily - endfamily - task jgdas_verfrad - trigger enkf == complete - endfamily - diff --git a/ecflow/ecf/defs/gfs_00.def b/ecflow/ecf/defs/gfs_00.def deleted file mode 100644 index ba53c61198..0000000000 --- a/ecflow/ecf/defs/gfs_00.def +++ /dev/null @@ -1,2300 +0,0 @@ - family gfs - edit CYC '00' - edit ECF_FILES '/ecf/ecfnets/scripts/gfs_FV3' - edit PROJ 'GFS-OPS' - edit NET 'gfs' - edit RUN 'gfs' - edit COM '/gpfs/dell1/nco/ops/com' - edit QUEUESHARED 'prod_shared' - edit QUEUESERV 'prod_transfer' - edit QUEUE 'prod' - family dump - task jgfs_tropcy_qc_reloc - event 1 jtwc_bull_email - time 02:41 - task jgfs_dump - event 1 release_sfcprep - time 02:47 - task jgfs_dump_post - trigger jgfs_dump eq complete - event 1 release_gfs00_dump_alert - task jgfs_dump_alert - trigger jgfs_dump_post:release_gfs00_dump_alert - task jmodel_realtime_gfs - trigger jgfs_dump_alert eq complete - endfamily - family prep - task jgfs_emcsfc_sfc_prep - trigger ../dump/jgfs_dump:release_sfcprep - task jgfs_prep - trigger ../dump/jgfs_dump eq complete and ../dump/jgfs_tropcy_qc_reloc eq complete - task jgfs_prep_post - trigger jgfs_prep eq complete and ../jgfs_analysis eq complete - endfamily - task jgfs_analysis - trigger prep/jgfs_prep eq complete and prep/jgfs_emcsfc_sfc_prep == complete - event 1 release_fcst - task jgfs_vminmon - trigger jgfs_analysis == complete - family forecast - task jgfs_forecast_high - trigger ../jgfs_analysis:release_fcst - endfamily - family post - task jgfs_post_manager - trigger ../jgfs_analysis eq complete - event 1 release_postanl - event 2 release_post000 - event 3 release_post001 - event 4 release_post002 - event 5 release_post003 - event 6 release_post004 - event 7 release_post005 - event 8 release_post006 - event 9 release_post007 - event 10 release_post008 - event 11 release_post009 - event 12 release_post010 - event 13 release_post011 - event 14 release_post012 - event 15 release_post013 - event 16 release_post014 - event 17 release_post015 - event 18 release_post016 - event 19 release_post017 - event 20 release_post018 - event 21 release_post019 - event 22 release_post020 - event 23 release_post021 - event 24 release_post022 - event 25 release_post023 - event 26 release_post024 - event 27 release_post025 - event 28 release_post026 - event 29 release_post027 - event 30 release_post028 - event 31 release_post029 - event 32 release_post030 - event 33 release_post031 - event 34 release_post032 - event 35 release_post033 - event 36 release_post034 - event 37 release_post035 - event 38 release_post036 - event 39 release_post037 - event 40 release_post038 - event 41 release_post039 - event 42 release_post040 - event 43 release_post041 - event 44 release_post042 - event 45 release_post043 - event 46 release_post044 - event 47 release_post045 - event 48 release_post046 - event 49 release_post047 - event 50 release_post048 - event 51 release_post049 - event 52 release_post050 - event 53 release_post051 - event 54 release_post052 - event 55 release_post053 - event 56 release_post054 - event 57 release_post055 - event 58 release_post056 - event 59 release_post057 - event 60 release_post058 - event 61 release_post059 - event 62 release_post060 - event 63 release_post061 - event 64 release_post062 - event 65 release_post063 - event 66 release_post064 - event 67 release_post065 - event 68 release_post066 - event 69 release_post067 - event 70 release_post068 - event 71 release_post069 - event 72 release_post070 - event 73 release_post071 - event 74 release_post072 - event 75 release_post073 - event 76 release_post074 - event 77 release_post075 - event 78 release_post076 - event 79 release_post077 - event 80 release_post078 - event 81 release_post079 - event 82 release_post080 - event 83 release_post081 - event 84 release_post082 - event 85 release_post083 - event 86 release_post084 - event 87 release_post085 - event 88 release_post086 - event 89 release_post087 - event 90 release_post088 - event 91 release_post089 - event 92 release_post090 - event 93 release_post091 - event 94 release_post092 - event 95 release_post093 - event 96 release_post094 - event 97 release_post095 - event 98 release_post096 - event 99 release_post097 - event 100 release_post098 - event 101 release_post099 - event 102 release_post100 - event 103 release_post101 - event 104 release_post102 - event 105 release_post103 - event 106 release_post104 - event 107 release_post105 - event 108 release_post106 - event 109 release_post107 - event 110 release_post108 - event 111 release_post109 - event 112 release_post110 - event 113 release_post111 - event 114 release_post112 - event 115 release_post113 - event 116 release_post114 - event 117 release_post115 - event 118 release_post116 - event 119 release_post117 - event 120 release_post118 - event 121 release_post119 - event 122 release_post120 - event 123 release_post123 - event 124 release_post126 - event 125 release_post129 - event 126 release_post132 - event 127 release_post135 - event 128 release_post138 - event 129 release_post141 - event 130 release_post144 - event 131 release_post147 - event 132 release_post150 - event 133 release_post153 - event 134 release_post156 - event 135 release_post159 - event 136 release_post162 - event 137 release_post165 - event 138 release_post168 - event 139 release_post171 - event 140 release_post174 - event 141 release_post177 - event 142 release_post180 - event 143 release_post183 - event 144 release_post186 - event 145 release_post189 - event 146 release_post192 - event 147 release_post195 - event 148 release_post198 - event 149 release_post201 - event 150 release_post204 - event 151 release_post207 - event 152 release_post210 - event 153 release_post213 - event 154 release_post216 - event 155 release_post219 - event 156 release_post222 - event 157 release_post225 - event 158 release_post228 - event 159 release_post231 - event 160 release_post234 - event 161 release_post237 - event 162 release_post240 - event 163 release_post243 - event 164 release_post246 - event 165 release_post249 - event 166 release_post252 - event 167 release_post255 - event 168 release_post258 - event 169 release_post261 - event 170 release_post264 - event 171 release_post267 - event 172 release_post270 - event 173 release_post273 - event 174 release_post276 - event 175 release_post279 - event 176 release_post282 - event 177 release_post285 - event 178 release_post288 - event 179 release_post291 - event 180 release_post294 - event 181 release_post297 - event 182 release_post300 - event 183 release_post303 - event 184 release_post306 - event 185 release_post309 - event 186 release_post312 - event 187 release_post315 - event 188 release_post318 - event 189 release_post321 - event 190 release_post324 - event 191 release_post327 - event 192 release_post330 - event 193 release_post333 - event 194 release_post336 - event 195 release_post339 - event 196 release_post342 - event 197 release_post345 - event 198 release_post348 - event 199 release_post351 - event 200 release_post354 - event 201 release_post357 - event 202 release_post360 - event 203 release_post363 - event 204 release_post366 - event 205 release_post369 - event 206 release_post372 - event 207 release_post375 - event 208 release_post378 - event 209 release_post381 - event 210 release_post384 - task jgfs_post_anl - trigger ./jgfs_post_manager:release_postanl - edit FHRGRP '000' - edit FHRLST 'anl' - edit HR 'anl' - edit FHR 'anl' - event 1 release_postanl - task jgfs_post_f000 - trigger ./jgfs_post_manager:release_post000 - edit FHRGRP '001' - edit FHRLST 'f000' - edit FHR 'f000' - edit HR '000' - task jgfs_post_f001 - trigger ./jgfs_post_manager:release_post001 - edit FHRGRP '002' - edit FHRLST 'f001' - edit FHR 'f001' - edit HR '001' - task jgfs_post_f002 - trigger ./jgfs_post_manager:release_post002 - edit FHRGRP '003' - edit FHRLST 'f002' - edit FHR 'f002' - edit HR '002' - task jgfs_post_f003 - trigger ./jgfs_post_manager:release_post003 - edit FHRGRP '004' - edit FHRLST 'f003' - edit FHR 'f003' - edit HR '003' - task jgfs_post_f004 - trigger ./jgfs_post_manager:release_post004 - edit FHRGRP '005' - edit FHRLST 'f004' - edit FHR 'f004' - edit HR '004' - task jgfs_post_f005 - trigger ./jgfs_post_manager:release_post005 - edit FHRGRP '006' - edit FHRLST 'f005' - edit FHR 'f005' - edit HR '005' - task jgfs_post_f006 - trigger ./jgfs_post_manager:release_post006 - edit FHRGRP '007' - edit FHRLST 'f006' - edit FHR 'f006' - edit HR '006' - task jgfs_post_f007 - trigger ./jgfs_post_manager:release_post007 - edit FHRGRP '008' - edit FHRLST 'f007' - edit FHR 'f007' - edit HR '007' - task jgfs_post_f008 - trigger ./jgfs_post_manager:release_post008 - edit FHRGRP '009' - edit FHRLST 'f008' - edit FHR 'f008' - edit HR '008' - task jgfs_post_f009 - trigger ./jgfs_post_manager:release_post009 - edit FHRGRP '010' - edit FHRLST 'f009' - edit FHR 'f009' - edit HR '009' - task jgfs_post_f010 - trigger ./jgfs_post_manager:release_post010 - edit FHRGRP '011' - edit FHRLST 'f010' - edit FHR 'f010' - edit HR '010' - task jgfs_post_f011 - trigger ./jgfs_post_manager:release_post011 - edit FHRGRP '012' - edit FHRLST 'f011' - edit FHR 'f011' - edit HR '011' - task jgfs_post_f012 - trigger ./jgfs_post_manager:release_post012 - edit FHRGRP '013' - edit FHRLST 'f012' - edit FHR 'f012' - edit HR '012' - task jgfs_post_f013 - trigger ./jgfs_post_manager:release_post013 - edit FHRGRP '014' - edit FHRLST 'f013' - edit FHR 'f013' - edit HR '013' - task jgfs_post_f014 - trigger ./jgfs_post_manager:release_post014 - edit FHRGRP '015' - edit FHRLST 'f014' - edit FHR 'f014' - edit HR '014' - task jgfs_post_f015 - trigger ./jgfs_post_manager:release_post015 - edit FHRGRP '016' - edit FHRLST 'f015' - edit FHR 'f015' - edit HR '015' - task jgfs_post_f016 - trigger ./jgfs_post_manager:release_post016 - edit FHRGRP '017' - edit FHRLST 'f016' - edit FHR 'f016' - edit HR '016' - task jgfs_post_f017 - trigger ./jgfs_post_manager:release_post017 - edit FHRGRP '018' - edit FHRLST 'f017' - edit FHR 'f017' - edit HR '017' - task jgfs_post_f018 - trigger ./jgfs_post_manager:release_post018 - edit FHRGRP '019' - edit FHRLST 'f018' - edit FHR 'f018' - edit HR '018' - task jgfs_post_f019 - trigger ./jgfs_post_manager:release_post019 - edit FHRGRP '020' - edit FHRLST 'f019' - edit FHR 'f019' - edit HR '019' - task jgfs_post_f020 - trigger ./jgfs_post_manager:release_post020 - edit FHRGRP '021' - edit FHRLST 'f020' - edit FHR 'f020' - edit HR '020' - task jgfs_post_f021 - trigger ./jgfs_post_manager:release_post021 - edit FHRGRP '022' - edit FHRLST 'f021' - edit FHR 'f021' - edit HR '021' - task jgfs_post_f022 - trigger ./jgfs_post_manager:release_post022 - edit FHRGRP '023' - edit FHRLST 'f022' - edit FHR 'f022' - edit HR '022' - task jgfs_post_f023 - trigger ./jgfs_post_manager:release_post023 - edit FHRGRP '024' - edit FHRLST 'f023' - edit FHR 'f023' - edit HR '023' - task jgfs_post_f024 - trigger ./jgfs_post_manager:release_post024 - edit FHRGRP '025' - edit FHRLST 'f024' - edit FHR 'f024' - edit HR '024' - task jgfs_post_f025 - trigger ./jgfs_post_manager:release_post025 - edit FHRGRP '026' - edit FHRLST 'f025' - edit FHR 'f025' - edit HR '025' - task jgfs_post_f026 - trigger ./jgfs_post_manager:release_post026 - edit FHRGRP '027' - edit FHRLST 'f026' - edit FHR 'f026' - edit HR '026' - task jgfs_post_f027 - trigger ./jgfs_post_manager:release_post027 - edit FHRGRP '028' - edit FHRLST 'f027' - edit FHR 'f027' - edit HR '027' - task jgfs_post_f028 - trigger ./jgfs_post_manager:release_post028 - edit FHRGRP '029' - edit FHRLST 'f028' - edit FHR 'f028' - edit HR '028' - task jgfs_post_f029 - trigger ./jgfs_post_manager:release_post029 - edit FHRGRP '030' - edit FHRLST 'f029' - edit FHR 'f029' - edit HR '029' - task jgfs_post_f030 - trigger ./jgfs_post_manager:release_post030 - edit FHRGRP '031' - edit FHRLST 'f030' - edit FHR 'f030' - edit HR '030' - task jgfs_post_f031 - trigger ./jgfs_post_manager:release_post031 - edit FHRGRP '032' - edit FHRLST 'f031' - edit FHR 'f031' - edit HR '031' - task jgfs_post_f032 - trigger ./jgfs_post_manager:release_post032 - edit FHRGRP '033' - edit FHRLST 'f032' - edit FHR 'f032' - edit HR '032' - task jgfs_post_f033 - trigger ./jgfs_post_manager:release_post033 - edit FHRGRP '034' - edit FHRLST 'f033' - edit FHR 'f033' - edit HR '033' - task jgfs_post_f034 - trigger ./jgfs_post_manager:release_post034 - edit FHRGRP '035' - edit FHRLST 'f034' - edit FHR 'f034' - edit HR '034' - task jgfs_post_f035 - trigger ./jgfs_post_manager:release_post035 - edit FHRGRP '036' - edit FHRLST 'f035' - edit FHR 'f035' - edit HR '035' - task jgfs_post_f036 - trigger ./jgfs_post_manager:release_post036 - edit FHRGRP '037' - edit FHRLST 'f036' - edit FHR 'f036' - edit HR '036' - task jgfs_post_f037 - trigger ./jgfs_post_manager:release_post037 - edit FHRGRP '038' - edit FHRLST 'f037' - edit FHR 'f037' - edit HR '037' - task jgfs_post_f038 - trigger ./jgfs_post_manager:release_post038 - edit FHRGRP '039' - edit FHRLST 'f038' - edit FHR 'f038' - edit HR '038' - task jgfs_post_f039 - trigger ./jgfs_post_manager:release_post039 - edit FHRGRP '040' - edit FHRLST 'f039' - edit FHR 'f039' - edit HR '039' - task jgfs_post_f040 - trigger ./jgfs_post_manager:release_post040 - edit FHRGRP '041' - edit FHRLST 'f040' - edit FHR 'f040' - edit HR '040' - task jgfs_post_f041 - trigger ./jgfs_post_manager:release_post041 - edit FHRGRP '042' - edit FHRLST 'f041' - edit FHR 'f041' - edit HR '041' - task jgfs_post_f042 - trigger ./jgfs_post_manager:release_post042 - edit FHRGRP '043' - edit FHRLST 'f042' - edit FHR 'f042' - edit HR '042' - task jgfs_post_f043 - trigger ./jgfs_post_manager:release_post043 - edit FHRGRP '044' - edit FHRLST 'f043' - edit FHR 'f043' - edit HR '043' - task jgfs_post_f044 - trigger ./jgfs_post_manager:release_post044 - edit FHRGRP '045' - edit FHRLST 'f044' - edit FHR 'f044' - edit HR '044' - task jgfs_post_f045 - trigger ./jgfs_post_manager:release_post045 - edit FHRGRP '046' - edit FHRLST 'f045' - edit FHR 'f045' - edit HR '045' - task jgfs_post_f046 - trigger ./jgfs_post_manager:release_post046 - edit FHRGRP '047' - edit FHRLST 'f046' - edit FHR 'f046' - edit HR '046' - task jgfs_post_f047 - trigger ./jgfs_post_manager:release_post047 - edit FHRGRP '048' - edit FHRLST 'f047' - edit FHR 'f047' - edit HR '047' - task jgfs_post_f048 - trigger ./jgfs_post_manager:release_post048 - edit FHRGRP '049' - edit FHRLST 'f048' - edit FHR 'f048' - edit HR '048' - task jgfs_post_f049 - trigger ./jgfs_post_manager:release_post049 - edit FHRGRP '050' - edit FHRLST 'f049' - edit FHR 'f049' - edit HR '049' - task jgfs_post_f050 - trigger ./jgfs_post_manager:release_post050 - edit FHRGRP '051' - edit FHRLST 'f050' - edit FHR 'f050' - edit HR '050' - task jgfs_post_f051 - trigger ./jgfs_post_manager:release_post051 - edit FHRGRP '052' - edit FHRLST 'f051' - edit FHR 'f051' - edit HR '051' - task jgfs_post_f052 - trigger ./jgfs_post_manager:release_post052 - edit FHRGRP '053' - edit FHRLST 'f052' - edit FHR 'f052' - edit HR '052' - task jgfs_post_f053 - trigger ./jgfs_post_manager:release_post053 - edit FHRGRP '054' - edit FHRLST 'f053' - edit FHR 'f053' - edit HR '053' - task jgfs_post_f054 - trigger ./jgfs_post_manager:release_post054 - edit FHRGRP '055' - edit FHRLST 'f054' - edit FHR 'f054' - edit HR '054' - task jgfs_post_f055 - trigger ./jgfs_post_manager:release_post055 - edit FHRGRP '056' - edit FHRLST 'f055' - edit FHR 'f055' - edit HR '055' - task jgfs_post_f056 - trigger ./jgfs_post_manager:release_post056 - edit FHRGRP '057' - edit FHRLST 'f056' - edit FHR 'f056' - edit HR '056' - task jgfs_post_f057 - trigger ./jgfs_post_manager:release_post057 - edit FHRGRP '058' - edit FHRLST 'f057' - edit FHR 'f057' - edit HR '057' - task jgfs_post_f058 - trigger ./jgfs_post_manager:release_post058 - edit FHRGRP '059' - edit FHRLST 'f058' - edit FHR 'f058' - edit HR '058' - task jgfs_post_f059 - trigger ./jgfs_post_manager:release_post059 - edit FHRGRP '060' - edit FHRLST 'f059' - edit FHR 'f059' - edit HR '059' - task jgfs_post_f060 - trigger ./jgfs_post_manager:release_post060 - edit FHRGRP '061' - edit FHRLST 'f060' - edit FHR 'f060' - edit HR '060' - task jgfs_post_f061 - trigger ./jgfs_post_manager:release_post061 - edit FHRGRP '062' - edit FHRLST 'f061' - edit FHR 'f061' - edit HR '061' - task jgfs_post_f062 - trigger ./jgfs_post_manager:release_post062 - edit FHRGRP '063' - edit FHRLST 'f062' - edit FHR 'f062' - edit HR '062' - task jgfs_post_f063 - trigger ./jgfs_post_manager:release_post063 - edit FHRGRP '064' - edit FHRLST 'f063' - edit FHR 'f063' - edit HR '063' - task jgfs_post_f064 - trigger ./jgfs_post_manager:release_post064 - edit FHRGRP '065' - edit FHRLST 'f064' - edit FHR 'f064' - edit HR '064' - task jgfs_post_f065 - trigger ./jgfs_post_manager:release_post065 - edit FHRGRP '066' - edit FHRLST 'f065' - edit FHR 'f065' - edit HR '065' - task jgfs_post_f066 - trigger ./jgfs_post_manager:release_post066 - edit FHRGRP '067' - edit FHRLST 'f066' - edit FHR 'f066' - edit HR '066' - task jgfs_post_f067 - trigger ./jgfs_post_manager:release_post067 - edit FHRGRP '068' - edit FHRLST 'f067' - edit FHR 'f067' - edit HR '067' - task jgfs_post_f068 - trigger ./jgfs_post_manager:release_post068 - edit FHRGRP '069' - edit FHRLST 'f068' - edit FHR 'f068' - edit HR '068' - task jgfs_post_f069 - trigger ./jgfs_post_manager:release_post069 - edit FHRGRP '070' - edit FHRLST 'f069' - edit FHR 'f069' - edit HR '069' - task jgfs_post_f070 - trigger ./jgfs_post_manager:release_post070 - edit FHRGRP '071' - edit FHRLST 'f070' - edit FHR 'f070' - edit HR '070' - task jgfs_post_f071 - trigger ./jgfs_post_manager:release_post071 - edit FHRGRP '072' - edit FHRLST 'f071' - edit FHR 'f071' - edit HR '071' - task jgfs_post_f072 - trigger ./jgfs_post_manager:release_post072 - edit FHRGRP '073' - edit FHRLST 'f072' - edit FHR 'f072' - edit HR '072' - task jgfs_post_f073 - trigger ./jgfs_post_manager:release_post073 - edit FHRGRP '074' - edit FHRLST 'f073' - edit FHR 'f073' - edit HR '073' - task jgfs_post_f074 - trigger ./jgfs_post_manager:release_post074 - edit FHRGRP '075' - edit FHRLST 'f074' - edit FHR 'f074' - edit HR '074' - task jgfs_post_f075 - trigger ./jgfs_post_manager:release_post075 - edit FHRGRP '076' - edit FHRLST 'f075' - edit FHR 'f075' - edit HR '075' - task jgfs_post_f076 - trigger ./jgfs_post_manager:release_post076 - edit FHRGRP '077' - edit FHRLST 'f076' - edit FHR 'f076' - edit HR '076' - task jgfs_post_f077 - trigger ./jgfs_post_manager:release_post077 - edit FHRGRP '078' - edit FHRLST 'f077' - edit FHR 'f077' - edit HR '077' - task jgfs_post_f078 - trigger ./jgfs_post_manager:release_post078 - edit FHRGRP '079' - edit FHRLST 'f078' - edit FHR 'f078' - edit HR '078' - task jgfs_post_f079 - trigger ./jgfs_post_manager:release_post079 - edit FHRGRP '080' - edit FHRLST 'f079' - edit FHR 'f079' - edit HR '079' - task jgfs_post_f080 - trigger ./jgfs_post_manager:release_post080 - edit FHRGRP '081' - edit FHRLST 'f080' - edit FHR 'f080' - edit HR '080' - task jgfs_post_f081 - trigger ./jgfs_post_manager:release_post081 - edit FHRGRP '082' - edit FHRLST 'f081' - edit FHR 'f081' - edit HR '081' - task jgfs_post_f082 - trigger ./jgfs_post_manager:release_post082 - edit FHRGRP '083' - edit FHRLST 'f082' - edit FHR 'f082' - edit HR '082' - task jgfs_post_f083 - trigger ./jgfs_post_manager:release_post083 - edit FHRGRP '084' - edit FHRLST 'f083' - edit FHR 'f083' - edit HR '083' - task jgfs_post_f084 - trigger ./jgfs_post_manager:release_post084 - edit FHRGRP '085' - edit FHRLST 'f084' - edit FHR 'f084' - edit HR '084' - task jgfs_post_f085 - trigger ./jgfs_post_manager:release_post085 - edit FHRGRP '086' - edit FHRLST 'f085' - edit FHR 'f085' - edit HR '085' - task jgfs_post_f086 - trigger ./jgfs_post_manager:release_post086 - edit FHRGRP '087' - edit FHRLST 'f086' - edit FHR 'f086' - edit HR '086' - task jgfs_post_f087 - trigger ./jgfs_post_manager:release_post087 - edit FHRGRP '088' - edit FHRLST 'f087' - edit FHR 'f087' - edit HR '087' - task jgfs_post_f088 - trigger ./jgfs_post_manager:release_post088 - edit FHRGRP '089' - edit FHRLST 'f088' - edit FHR 'f088' - edit HR '088' - task jgfs_post_f089 - trigger ./jgfs_post_manager:release_post089 - edit FHRGRP '090' - edit FHRLST 'f089' - edit FHR 'f089' - edit HR '089' - task jgfs_post_f090 - trigger ./jgfs_post_manager:release_post090 - edit FHRGRP '091' - edit FHRLST 'f090' - edit FHR 'f090' - edit HR '090' - task jgfs_post_f091 - trigger ./jgfs_post_manager:release_post091 - edit FHRGRP '092' - edit FHRLST 'f091' - edit FHR 'f091' - edit HR '091' - task jgfs_post_f092 - trigger ./jgfs_post_manager:release_post092 - edit FHRGRP '093' - edit FHRLST 'f092' - edit FHR 'f092' - edit HR '092' - task jgfs_post_f093 - trigger ./jgfs_post_manager:release_post093 - edit FHRGRP '094' - edit FHRLST 'f093' - edit FHR 'f093' - edit HR '093' - task jgfs_post_f094 - trigger ./jgfs_post_manager:release_post094 - edit FHRGRP '095' - edit FHRLST 'f094' - edit FHR 'f094' - edit HR '094' - task jgfs_post_f095 - trigger ./jgfs_post_manager:release_post095 - edit FHRGRP '096' - edit FHRLST 'f095' - edit FHR 'f095' - edit HR '095' - task jgfs_post_f096 - trigger ./jgfs_post_manager:release_post096 - edit FHRGRP '097' - edit FHRLST 'f096' - edit FHR 'f096' - edit HR '096' - task jgfs_post_f097 - trigger ./jgfs_post_manager:release_post097 - edit FHRGRP '098' - edit FHRLST 'f097' - edit FHR 'f097' - edit HR '097' - task jgfs_post_f098 - trigger ./jgfs_post_manager:release_post098 - edit FHRGRP '099' - edit FHRLST 'f098' - edit FHR 'f098' - edit HR '098' - task jgfs_post_f099 - trigger ./jgfs_post_manager:release_post099 - edit FHRGRP '100' - edit FHRLST 'f099' - edit FHR 'f099' - edit HR '099' - task jgfs_post_f100 - trigger ./jgfs_post_manager:release_post100 - edit FHRGRP '101' - edit FHRLST 'f100' - edit FHR 'f100' - edit HR '100' - task jgfs_post_f101 - trigger ./jgfs_post_manager:release_post101 - edit FHRGRP '102' - edit FHRLST 'f101' - edit FHR 'f101' - edit HR '101' - task jgfs_post_f102 - trigger ./jgfs_post_manager:release_post102 - edit FHRGRP '103' - edit FHRLST 'f102' - edit FHR 'f102' - edit HR '102' - task jgfs_post_f103 - trigger ./jgfs_post_manager:release_post103 - edit FHRGRP '104' - edit FHRLST 'f103' - edit FHR 'f103' - edit HR '103' - task jgfs_post_f104 - trigger ./jgfs_post_manager:release_post104 - edit FHRGRP '105' - edit FHRLST 'f104' - edit FHR 'f104' - edit HR '104' - task jgfs_post_f105 - trigger ./jgfs_post_manager:release_post105 - edit FHRGRP '106' - edit FHRLST 'f105' - edit FHR 'f105' - edit HR '105' - task jgfs_post_f106 - trigger ./jgfs_post_manager:release_post106 - edit FHRGRP '107' - edit FHRLST 'f106' - edit FHR 'f106' - edit HR '106' - task jgfs_post_f107 - trigger ./jgfs_post_manager:release_post107 - edit FHRGRP '108' - edit FHRLST 'f107' - edit FHR 'f107' - edit HR '107' - task jgfs_post_f108 - trigger ./jgfs_post_manager:release_post108 - edit FHRGRP '109' - edit FHRLST 'f108' - edit FHR 'f108' - edit HR '108' - task jgfs_post_f109 - trigger ./jgfs_post_manager:release_post109 - edit FHRGRP '110' - edit FHRLST 'f109' - edit FHR 'f109' - edit HR '109' - task jgfs_post_f110 - trigger ./jgfs_post_manager:release_post110 - edit FHRGRP '111' - edit FHRLST 'f110' - edit FHR 'f110' - edit HR '110' - task jgfs_post_f111 - trigger ./jgfs_post_manager:release_post111 - edit FHRGRP '112' - edit FHRLST 'f111' - edit FHR 'f111' - edit HR '111' - task jgfs_post_f112 - trigger ./jgfs_post_manager:release_post112 - edit FHRGRP '113' - edit FHRLST 'f112' - edit FHR 'f112' - edit HR '112' - task jgfs_post_f113 - trigger ./jgfs_post_manager:release_post113 - edit FHRGRP '114' - edit FHRLST 'f113' - edit FHR 'f113' - edit HR '113' - task jgfs_post_f114 - trigger ./jgfs_post_manager:release_post114 - edit FHRGRP '115' - edit FHRLST 'f114' - edit FHR 'f114' - edit HR '114' - task jgfs_post_f115 - trigger ./jgfs_post_manager:release_post115 - edit FHRGRP '116' - edit FHRLST 'f115' - edit FHR 'f115' - edit HR '115' - task jgfs_post_f116 - trigger ./jgfs_post_manager:release_post116 - edit FHRGRP '117' - edit FHRLST 'f116' - edit FHR 'f116' - edit HR '116' - task jgfs_post_f117 - trigger ./jgfs_post_manager:release_post117 - edit FHRGRP '118' - edit FHRLST 'f117' - edit FHR 'f117' - edit HR '117' - task jgfs_post_f118 - trigger ./jgfs_post_manager:release_post118 - edit FHRGRP '119' - edit FHRLST 'f118' - edit FHR 'f118' - edit HR '118' - task jgfs_post_f119 - trigger ./jgfs_post_manager:release_post119 - edit FHRGRP '120' - edit FHRLST 'f119' - edit FHR 'f119' - edit HR '119' - task jgfs_post_f120 - trigger ./jgfs_post_manager:release_post120 - edit FHRGRP '121' - edit FHRLST 'f120' - edit FHR 'f120' - edit HR '120' - task jgfs_post_f123 - trigger ./jgfs_post_manager:release_post123 - edit FHRGRP '122' - edit FHRLST 'f123' - edit FHR 'f123' - edit HR '123' - task jgfs_post_f126 - trigger ./jgfs_post_manager:release_post126 - edit FHRGRP '123' - edit FHRLST 'f126' - edit FHR 'f126' - edit HR '126' - task jgfs_post_f129 - trigger ./jgfs_post_manager:release_post129 - edit FHRGRP '124' - edit FHRLST 'f129' - edit FHR 'f129' - edit HR '129' - task jgfs_post_f132 - trigger ./jgfs_post_manager:release_post132 - edit FHRGRP '125' - edit FHRLST 'f132' - edit FHR 'f132' - edit HR '132' - task jgfs_post_f135 - trigger ./jgfs_post_manager:release_post135 - edit FHRGRP '126' - edit FHRLST 'f135' - edit FHR 'f135' - edit HR '135' - task jgfs_post_f138 - trigger ./jgfs_post_manager:release_post138 - edit FHRGRP '127' - edit FHRLST 'f138' - edit FHR 'f138' - edit HR '138' - task jgfs_post_f141 - trigger ./jgfs_post_manager:release_post141 - edit FHRGRP '128' - edit FHRLST 'f141' - edit FHR 'f141' - edit HR '141' - task jgfs_post_f144 - trigger ./jgfs_post_manager:release_post144 - edit FHRGRP '129' - edit FHRLST 'f144' - edit FHR 'f144' - edit HR '144' - task jgfs_post_f147 - trigger ./jgfs_post_manager:release_post147 - edit FHRGRP '130' - edit FHRLST 'f147' - edit FHR 'f147' - edit HR '147' - task jgfs_post_f150 - trigger ./jgfs_post_manager:release_post150 - edit FHRGRP '131' - edit FHRLST 'f150' - edit FHR 'f150' - edit HR '150' - task jgfs_post_f153 - trigger ./jgfs_post_manager:release_post153 - edit FHRGRP '132' - edit FHRLST 'f153' - edit FHR 'f153' - edit HR '153' - task jgfs_post_f156 - trigger ./jgfs_post_manager:release_post156 - edit FHRGRP '133' - edit FHRLST 'f156' - edit FHR 'f156' - edit HR '156' - task jgfs_post_f159 - trigger ./jgfs_post_manager:release_post159 - edit FHRGRP '134' - edit FHRLST 'f159' - edit FHR 'f159' - edit HR '159' - task jgfs_post_f162 - trigger ./jgfs_post_manager:release_post162 - edit FHRGRP '135' - edit FHRLST 'f162' - edit FHR 'f162' - edit HR '162' - task jgfs_post_f165 - trigger ./jgfs_post_manager:release_post165 - edit FHRGRP '136' - edit FHRLST 'f165' - edit FHR 'f165' - edit HR '165' - task jgfs_post_f168 - trigger ./jgfs_post_manager:release_post168 - edit FHRGRP '137' - edit FHRLST 'f168' - edit FHR 'f168' - edit HR '168' - task jgfs_post_f171 - trigger ./jgfs_post_manager:release_post171 - edit FHRGRP '138' - edit FHRLST 'f171' - edit FHR 'f171' - edit HR '171' - task jgfs_post_f174 - trigger ./jgfs_post_manager:release_post174 - edit FHRGRP '139' - edit FHRLST 'f174' - edit FHR 'f174' - edit HR '174' - task jgfs_post_f177 - trigger ./jgfs_post_manager:release_post177 - edit FHRGRP '140' - edit FHRLST 'f177' - edit FHR 'f177' - edit HR '177' - task jgfs_post_f180 - trigger ./jgfs_post_manager:release_post180 - edit FHRGRP '141' - edit FHRLST 'f180' - edit FHR 'f180' - edit HR '180' - task jgfs_post_f183 - trigger ./jgfs_post_manager:release_post183 - edit FHRGRP '142' - edit FHRLST 'f183' - edit FHR 'f183' - edit HR '183' - task jgfs_post_f186 - trigger ./jgfs_post_manager:release_post186 - edit FHRGRP '143' - edit FHRLST 'f186' - edit FHR 'f186' - edit HR '186' - task jgfs_post_f189 - trigger ./jgfs_post_manager:release_post189 - edit FHRGRP '144' - edit FHRLST 'f189' - edit FHR 'f189' - edit HR '189' - task jgfs_post_f192 - trigger ./jgfs_post_manager:release_post192 - edit FHRGRP '145' - edit FHRLST 'f192' - edit FHR 'f192' - edit HR '192' - task jgfs_post_f195 - trigger ./jgfs_post_manager:release_post195 - edit FHRGRP '146' - edit FHRLST 'f195' - edit FHR 'f195' - edit HR '195' - task jgfs_post_f198 - trigger ./jgfs_post_manager:release_post198 - edit FHRGRP '147' - edit FHRLST 'f198' - edit FHR 'f198' - edit HR '198' - task jgfs_post_f201 - trigger ./jgfs_post_manager:release_post201 - edit FHRGRP '148' - edit FHRLST 'f201' - edit FHR 'f201' - edit HR '201' - task jgfs_post_f204 - trigger ./jgfs_post_manager:release_post204 - edit FHRGRP '149' - edit FHRLST 'f204' - edit FHR 'f204' - edit HR '204' - task jgfs_post_f207 - trigger ./jgfs_post_manager:release_post207 - edit FHRGRP '150' - edit FHRLST 'f207' - edit FHR 'f207' - edit HR '207' - task jgfs_post_f210 - trigger ./jgfs_post_manager:release_post210 - edit FHRGRP '151' - edit FHRLST 'f210' - edit FHR 'f210' - edit HR '210' - task jgfs_post_f213 - trigger ./jgfs_post_manager:release_post213 - edit FHRGRP '152' - edit FHRLST 'f213' - edit FHR 'f213' - edit HR '213' - task jgfs_post_f216 - trigger ./jgfs_post_manager:release_post216 - edit FHRGRP '153' - edit FHRLST 'f216' - edit FHR 'f216' - edit HR '216' - task jgfs_post_f219 - trigger ./jgfs_post_manager:release_post219 - edit FHRGRP '154' - edit FHRLST 'f219' - edit FHR 'f219' - edit HR '219' - task jgfs_post_f222 - trigger ./jgfs_post_manager:release_post222 - edit FHRGRP '155' - edit FHRLST 'f222' - edit FHR 'f222' - edit HR '222' - task jgfs_post_f225 - trigger ./jgfs_post_manager:release_post225 - edit FHRGRP '156' - edit FHRLST 'f225' - edit FHR 'f225' - edit HR '225' - task jgfs_post_f228 - trigger ./jgfs_post_manager:release_post228 - edit FHRGRP '157' - edit FHRLST 'f228' - edit FHR 'f228' - edit HR '228' - task jgfs_post_f231 - trigger ./jgfs_post_manager:release_post231 - edit FHRGRP '158' - edit FHRLST 'f231' - edit FHR 'f231' - edit HR '231' - task jgfs_post_f234 - trigger ./jgfs_post_manager:release_post234 - edit FHRGRP '159' - edit FHRLST 'f234' - edit FHR 'f234' - edit HR '234' - task jgfs_post_f237 - trigger ./jgfs_post_manager:release_post237 - edit FHRGRP '160' - edit FHRLST 'f237' - edit FHR 'f237' - edit HR '237' - task jgfs_post_f240 - trigger ./jgfs_post_manager:release_post240 - edit FHRGRP '161' - edit FHRLST 'f240' - edit FHR 'f240' - edit HR '240' - task jgfs_post_f243 - trigger ./jgfs_post_manager:release_post243 - edit FHRGRP '162' - edit FHRLST 'f243' - edit FHR 'f243' - edit HR '243' - task jgfs_post_f246 - trigger ./jgfs_post_manager:release_post246 - edit FHRGRP '163' - edit FHRLST 'f246' - edit FHR 'f246' - edit HR '246' - task jgfs_post_f249 - trigger ./jgfs_post_manager:release_post249 - edit FHRGRP '164' - edit FHRLST 'f249' - edit FHR 'f249' - edit HR '249' - task jgfs_post_f252 - trigger ./jgfs_post_manager:release_post252 - edit FHRGRP '165' - edit FHRLST 'f252' - edit FHR 'f252' - edit HR '252' - task jgfs_post_f255 - trigger ./jgfs_post_manager:release_post255 - edit FHRGRP '166' - edit FHRLST 'f255' - edit FHR 'f255' - edit HR '255' - task jgfs_post_f258 - trigger ./jgfs_post_manager:release_post258 - edit FHRGRP '167' - edit FHRLST 'f258' - edit FHR 'f258' - edit HR '258' - task jgfs_post_f261 - trigger ./jgfs_post_manager:release_post261 - edit FHRGRP '168' - edit FHRLST 'f261' - edit FHR 'f261' - edit HR '261' - task jgfs_post_f264 - trigger ./jgfs_post_manager:release_post264 - edit FHRGRP '169' - edit FHRLST 'f264' - edit FHR 'f264' - edit HR '264' - task jgfs_post_f267 - trigger ./jgfs_post_manager:release_post267 - edit FHRGRP '170' - edit FHRLST 'f267' - edit FHR 'f267' - edit HR '267' - task jgfs_post_f270 - trigger ./jgfs_post_manager:release_post270 - edit FHRGRP '171' - edit FHRLST 'f270' - edit FHR 'f270' - edit HR '270' - task jgfs_post_f273 - trigger ./jgfs_post_manager:release_post273 - edit FHRGRP '172' - edit FHRLST 'f273' - edit FHR 'f273' - edit HR '273' - task jgfs_post_f276 - trigger ./jgfs_post_manager:release_post276 - edit FHRGRP '173' - edit FHRLST 'f276' - edit FHR 'f276' - edit HR '276' - task jgfs_post_f279 - trigger ./jgfs_post_manager:release_post279 - edit FHRGRP '174' - edit FHRLST 'f279' - edit FHR 'f279' - edit HR '279' - task jgfs_post_f282 - trigger ./jgfs_post_manager:release_post282 - edit FHRGRP '175' - edit FHRLST 'f282' - edit FHR 'f282' - edit HR '282' - task jgfs_post_f285 - trigger ./jgfs_post_manager:release_post285 - edit FHRGRP '176' - edit FHRLST 'f285' - edit FHR 'f285' - edit HR '285' - task jgfs_post_f288 - trigger ./jgfs_post_manager:release_post288 - edit FHRGRP '177' - edit FHRLST 'f288' - edit FHR 'f288' - edit HR '288' - task jgfs_post_f291 - trigger ./jgfs_post_manager:release_post291 - edit FHRGRP '178' - edit FHRLST 'f291' - edit FHR 'f291' - edit HR '291' - task jgfs_post_f294 - trigger ./jgfs_post_manager:release_post294 - edit FHRGRP '179' - edit FHRLST 'f294' - edit FHR 'f294' - edit HR '294' - task jgfs_post_f297 - trigger ./jgfs_post_manager:release_post297 - edit FHRGRP '180' - edit FHRLST 'f297' - edit FHR 'f297' - edit HR '297' - task jgfs_post_f300 - trigger ./jgfs_post_manager:release_post300 - edit FHRGRP '181' - edit FHRLST 'f300' - edit FHR 'f300' - edit HR '300' - task jgfs_post_f303 - trigger ./jgfs_post_manager:release_post303 - edit FHRGRP '182' - edit FHRLST 'f303' - edit FHR 'f303' - edit HR '303' - task jgfs_post_f306 - trigger ./jgfs_post_manager:release_post306 - edit FHRGRP '183' - edit FHRLST 'f306' - edit FHR 'f306' - edit HR '306' - task jgfs_post_f309 - trigger ./jgfs_post_manager:release_post309 - edit FHRGRP '184' - edit FHRLST 'f309' - edit FHR 'f309' - edit HR '309' - task jgfs_post_f312 - trigger ./jgfs_post_manager:release_post312 - edit FHRGRP '185' - edit FHRLST 'f312' - edit FHR 'f312' - edit HR '312' - task jgfs_post_f315 - trigger ./jgfs_post_manager:release_post315 - edit FHRGRP '186' - edit FHRLST 'f315' - edit FHR 'f315' - edit HR '315' - task jgfs_post_f318 - trigger ./jgfs_post_manager:release_post318 - edit FHRGRP '187' - edit FHRLST 'f318' - edit FHR 'f318' - edit HR '318' - task jgfs_post_f321 - trigger ./jgfs_post_manager:release_post321 - edit FHRGRP '188' - edit FHRLST 'f321' - edit FHR 'f321' - edit HR '321' - task jgfs_post_f324 - trigger ./jgfs_post_manager:release_post324 - edit FHRGRP '189' - edit FHRLST 'f324' - edit FHR 'f324' - edit HR '324' - task jgfs_post_f327 - trigger ./jgfs_post_manager:release_post327 - edit FHRGRP '190' - edit FHRLST 'f327' - edit FHR 'f327' - edit HR '327' - task jgfs_post_f330 - trigger ./jgfs_post_manager:release_post330 - edit FHRGRP '191' - edit FHRLST 'f330' - edit FHR 'f330' - edit HR '330' - task jgfs_post_f333 - trigger ./jgfs_post_manager:release_post333 - edit FHRGRP '192' - edit FHRLST 'f333' - edit FHR 'f333' - edit HR '333' - task jgfs_post_f336 - trigger ./jgfs_post_manager:release_post336 - edit FHRGRP '193' - edit FHRLST 'f336' - edit FHR 'f336' - edit HR '336' - task jgfs_post_f339 - trigger ./jgfs_post_manager:release_post339 - edit FHRGRP '194' - edit FHRLST 'f339' - edit FHR 'f339' - edit HR '339' - task jgfs_post_f342 - trigger ./jgfs_post_manager:release_post342 - edit FHRGRP '195' - edit FHRLST 'f342' - edit FHR 'f342' - edit HR '342' - task jgfs_post_f345 - trigger ./jgfs_post_manager:release_post345 - edit FHRGRP '196' - edit FHRLST 'f345' - edit FHR 'f345' - edit HR '345' - task jgfs_post_f348 - trigger ./jgfs_post_manager:release_post348 - edit FHRGRP '197' - edit FHRLST 'f348' - edit FHR 'f348' - edit HR '348' - task jgfs_post_f351 - trigger ./jgfs_post_manager:release_post351 - edit FHRGRP '198' - edit FHRLST 'f351' - edit FHR 'f351' - edit HR '351' - task jgfs_post_f354 - trigger ./jgfs_post_manager:release_post354 - edit FHRGRP '199' - edit FHRLST 'f354' - edit FHR 'f354' - edit HR '354' - task jgfs_post_f357 - trigger ./jgfs_post_manager:release_post357 - edit FHRGRP '200' - edit FHRLST 'f357' - edit FHR 'f357' - edit HR '357' - task jgfs_post_f360 - trigger ./jgfs_post_manager:release_post360 - edit FHRGRP '201' - edit FHRLST 'f360' - edit FHR 'f360' - edit HR '360' - task jgfs_post_f363 - trigger ./jgfs_post_manager:release_post363 - edit FHRGRP '202' - edit FHRLST 'f363' - edit FHR 'f363' - edit HR '363' - task jgfs_post_f366 - trigger ./jgfs_post_manager:release_post366 - edit FHRGRP '203' - edit FHRLST 'f366' - edit FHR 'f366' - edit HR '366' - task jgfs_post_f369 - trigger ./jgfs_post_manager:release_post369 - edit FHRGRP '204' - edit FHRLST 'f369' - edit FHR 'f369' - edit HR '369' - task jgfs_post_f372 - trigger ./jgfs_post_manager:release_post372 - edit FHRGRP '205' - edit FHRLST 'f372' - edit FHR 'f372' - edit HR '372' - task jgfs_post_f375 - trigger ./jgfs_post_manager:release_post375 - edit FHRGRP '206' - edit FHRLST 'f375' - edit FHR 'f375' - edit HR '375' - task jgfs_post_f378 - trigger ./jgfs_post_manager:release_post378 - edit FHRGRP '207' - edit FHRLST 'f378' - edit FHR 'f378' - edit HR '378' - task jgfs_post_f381 - trigger ./jgfs_post_manager:release_post381 - edit FHRGRP '208' - edit FHRLST 'f381' - edit FHR 'f381' - edit HR '381' - task jgfs_post_f384 - trigger ./jgfs_post_manager:release_post384 - edit FHRGRP '209' - edit FHRLST 'f384' - edit FHR 'f384' - edit HR '384' - endfamily - family post_processing - task jgfs_wafs_gcip - trigger ../post/jgfs_post_f003 == complete - time 04:40 - family grib_wafs - task jgfs_wafs_f00 - trigger ../../post/jgfs_post_f000 == complete and ../../post/jgfs_post_f120 == complete and ../grib2_wafs/jgfs_wafs_grib2 == complete - edit FCSTHR '00' - task jgfs_wafs_f06 - trigger ../../post/jgfs_post_f006 == complete and ./jgfs_wafs_f00 == complete - edit FCSTHR '06' - task jgfs_wafs_f12 - trigger ../../post/jgfs_post_f012 == complete and ./jgfs_wafs_f06 == complete - edit FCSTHR '12' - task jgfs_wafs_f18 - trigger ../../post/jgfs_post_f018 == complete and ./jgfs_wafs_f12 == complete - edit FCSTHR '18' - task jgfs_wafs_f24 - trigger ../../post/jgfs_post_f024 == complete and ./jgfs_wafs_f18 == complete - edit FCSTHR '24' - task jgfs_wafs_f30 - trigger ../../post/jgfs_post_f030 == complete and ./jgfs_wafs_f24 == complete - edit FCSTHR '30' - task jgfs_wafs_f36 - trigger ../../post/jgfs_post_f036 == complete and ./jgfs_wafs_f30 == complete - edit FCSTHR '36' - task jgfs_wafs_f42 - trigger ../../post/jgfs_post_f042 == complete and ./jgfs_wafs_f36 == complete - edit FCSTHR '42' - task jgfs_wafs_f48 - trigger ../../post/jgfs_post_f048 == complete and ./jgfs_wafs_f42 == complete - edit FCSTHR '48' - task jgfs_wafs_f54 - trigger ../../post/jgfs_post_f054 == complete and ./jgfs_wafs_f48 == complete - edit FCSTHR '54' - task jgfs_wafs_f60 - trigger ../../post/jgfs_post_f060 == complete and ./jgfs_wafs_f54 == complete - edit FCSTHR '60' - task jgfs_wafs_f66 - trigger ../../post/jgfs_post_f066 == complete and ./jgfs_wafs_f60 == complete - edit FCSTHR '66' - task jgfs_wafs_f72 - trigger ../../post/jgfs_post_f072 == complete and ./jgfs_wafs_f66 == complete - edit FCSTHR '72' - task jgfs_wafs_f78 - trigger ../../post/jgfs_post_f078 == complete and ./jgfs_wafs_f72 == complete - edit FCSTHR '78' - task jgfs_wafs_f84 - trigger ../../post/jgfs_post_f084 == complete and ./jgfs_wafs_f78 == complete - edit FCSTHR '84' - task jgfs_wafs_f90 - trigger ../../post/jgfs_post_f090 == complete and ./jgfs_wafs_f84 == complete - edit FCSTHR '90' - task jgfs_wafs_f96 - trigger ../../post/jgfs_post_f096 == complete and ./jgfs_wafs_f90 == complete - edit FCSTHR '96' - task jgfs_wafs_f102 - trigger ../../post/jgfs_post_f102 == complete and ./jgfs_wafs_f96 == complete - edit FCSTHR '102' - task jgfs_wafs_f108 - trigger ../../post/jgfs_post_f108 == complete and ./jgfs_wafs_f102 == complete - edit FCSTHR '108' - task jgfs_wafs_f114 - trigger ../../post/jgfs_post_f114 == complete and ./jgfs_wafs_f108 == complete - edit FCSTHR '114' - task jgfs_wafs_f120 - trigger ../../post/jgfs_post_f120 == complete and ./jgfs_wafs_f114 == complete - edit FCSTHR '120' - endfamily - family bufr_sounding - task jgfs_postsnd - trigger ../../post/jgfs_post_manager:release_post000 - endfamily - family bulletins - task jgfs_fbwind - trigger ../../post/jgfs_post_f006 == complete and ../../post/jgfs_post_f012 == complete and ../../post/jgfs_post_f024 == complete - endfamily - family grib2_wafs - task jgfs_wafs_grib2 - trigger ../../post/jgfs_post_f000 == complete - task jgfs_wafs_blending - trigger ./jgfs_wafs_grib2 == complete - time 04:33 - endfamily - family awips_20km_1p0 - task jgfs_awips_f000 - trigger ../../post/jgfs_post_f000 == complete - edit FHRGRP '000' - edit FHRLST 'f000' - edit FCSTHR '000' - edit TRDRUN 'YES' - task jgfs_awips_f003 - trigger ../../post/jgfs_post_f003 == complete - edit FHRGRP '003' - edit FHRLST 'f003' - edit FCSTHR '003' - edit TRDRUN 'NO' - task jgfs_awips_f006 - trigger ../../post/jgfs_post_f006 == complete - edit FHRGRP '006' - edit FHRLST 'f006' - edit FCSTHR '006' - edit TRDRUN 'YES' - task jgfs_awips_f009 - trigger ../../post/jgfs_post_f009 == complete - edit FHRGRP '009' - edit FHRLST 'f009' - edit FCSTHR '009' - edit TRDRUN 'NO' - task jgfs_awips_f012 - trigger ../../post/jgfs_post_f012 == complete - edit FHRGRP '012' - edit FHRLST 'f012' - edit FCSTHR '012' - edit TRDRUN 'YES' - task jgfs_awips_f015 - trigger ../../post/jgfs_post_f015 == complete - edit FHRGRP '015' - edit FHRLST 'f015' - edit FCSTHR '015' - edit TRDRUN 'NO' - task jgfs_awips_f018 - trigger ../../post/jgfs_post_f018 == complete - edit FHRGRP '018' - edit FHRLST 'f018' - edit FCSTHR '018' - edit TRDRUN 'YES' - task jgfs_awips_f021 - trigger ../../post/jgfs_post_f021 == complete - edit FHRGRP '021' - edit FHRLST 'f021' - edit FCSTHR '021' - edit TRDRUN 'NO' - task jgfs_awips_f024 - trigger ../../post/jgfs_post_f024 == complete - edit FHRGRP '024' - edit FHRLST 'f024' - edit FCSTHR '024' - edit TRDRUN 'YES' - task jgfs_awips_f027 - trigger ../../post/jgfs_post_f027 == complete - edit FHRGRP '027' - edit FHRLST 'f027' - edit FCSTHR '027' - edit TRDRUN 'NO' - task jgfs_awips_f030 - trigger ../../post/jgfs_post_f030 == complete - edit FHRGRP '030' - edit FHRLST 'f030' - edit FCSTHR '030' - edit TRDRUN 'YES' - task jgfs_awips_f033 - trigger ../../post/jgfs_post_f033 == complete - edit FHRGRP '033' - edit FHRLST 'f033' - edit FCSTHR '033' - edit TRDRUN 'NO' - task jgfs_awips_f036 - trigger ../../post/jgfs_post_f036 == complete - edit FHRGRP '036' - edit FHRLST 'f036' - edit FCSTHR '036' - edit TRDRUN 'YES' - task jgfs_awips_f039 - trigger ../../post/jgfs_post_f039 == complete - edit FHRGRP '039' - edit FHRLST 'f039' - edit FCSTHR '039' - edit TRDRUN 'NO' - task jgfs_awips_f042 - trigger ../../post/jgfs_post_f042 == complete - edit FHRGRP '042' - edit FHRLST 'f042' - edit FCSTHR '042' - edit TRDRUN 'YES' - task jgfs_awips_f045 - trigger ../../post/jgfs_post_f045 == complete - edit FHRGRP '045' - edit FHRLST 'f045' - edit FCSTHR '045' - edit TRDRUN 'NO' - task jgfs_awips_f048 - trigger ../../post/jgfs_post_f048 == complete - edit FHRGRP '048' - edit FHRLST 'f048' - edit FCSTHR '048' - edit TRDRUN 'YES' - task jgfs_awips_f051 - trigger ../../post/jgfs_post_f051 == complete - edit FHRGRP '051' - edit FHRLST 'f051' - edit FCSTHR '051' - edit TRDRUN 'NO' - task jgfs_awips_f054 - trigger ../../post/jgfs_post_f054 == complete - edit FHRGRP '054' - edit FHRLST 'f054' - edit FCSTHR '054' - edit TRDRUN 'YES' - task jgfs_awips_f057 - trigger ../../post/jgfs_post_f057 == complete - edit FHRGRP '057' - edit FHRLST 'f057' - edit FCSTHR '057' - edit TRDRUN 'NO' - task jgfs_awips_f060 - trigger ../../post/jgfs_post_f060 == complete - edit FHRGRP '060' - edit FHRLST 'f060' - edit FCSTHR '060' - edit TRDRUN 'YES' - task jgfs_awips_f063 - trigger ../../post/jgfs_post_f063 == complete - edit FHRGRP '063' - edit FHRLST 'f063' - edit FCSTHR '063' - edit TRDRUN 'NO' - task jgfs_awips_f066 - trigger ../../post/jgfs_post_f066 == complete - edit FHRGRP '066' - edit FHRLST 'f066' - edit FCSTHR '066' - edit TRDRUN 'YES' - task jgfs_awips_f069 - trigger ../../post/jgfs_post_f069 == complete - edit FHRGRP '069' - edit FHRLST 'f069' - edit FCSTHR '069' - edit TRDRUN 'NO' - task jgfs_awips_f072 - trigger ../../post/jgfs_post_f072 == complete - edit FHRGRP '072' - edit FHRLST 'f072' - edit FCSTHR '072' - edit TRDRUN 'YES' - task jgfs_awips_f075 - trigger ../../post/jgfs_post_f075 == complete - edit FHRGRP '075' - edit FHRLST 'f075' - edit FCSTHR '075' - edit TRDRUN 'NO' - task jgfs_awips_f078 - trigger ../../post/jgfs_post_f078 == complete - edit FHRGRP '078' - edit FHRLST 'f078' - edit FCSTHR '078' - edit TRDRUN 'YES' - task jgfs_awips_f081 - trigger ../../post/jgfs_post_f081 == complete - edit FHRGRP '081' - edit FHRLST 'f081' - edit FCSTHR '081' - edit TRDRUN 'NO' - task jgfs_awips_f084 - trigger ../../post/jgfs_post_f084 == complete - edit FHRGRP '084' - edit FHRLST 'f084' - edit FCSTHR '084' - edit TRDRUN 'YES' - task jgfs_awips_f090 - trigger ../../post/jgfs_post_f090 == complete - edit FHRGRP '090' - edit FHRLST 'f090' - edit FCSTHR '090' - edit TRDRUN 'YES' - task jgfs_awips_f096 - trigger ../../post/jgfs_post_f096 == complete - edit FHRGRP '096' - edit FHRLST 'f096' - edit FCSTHR '096' - edit TRDRUN 'YES' - task jgfs_awips_f102 - trigger ../../post/jgfs_post_f102 == complete - edit FHRGRP '102' - edit FHRLST 'f102' - edit FCSTHR '102' - edit TRDRUN 'YES' - task jgfs_awips_f108 - trigger ../../post/jgfs_post_f108 == complete - edit FHRGRP '108' - edit FHRLST 'f108' - edit FCSTHR '108' - edit TRDRUN 'YES' - task jgfs_awips_f114 - trigger ../../post/jgfs_post_f114 == complete - edit FHRGRP '114' - edit FHRLST 'f114' - edit FCSTHR '114' - edit TRDRUN 'YES' - task jgfs_awips_f120 - trigger ../../post/jgfs_post_f120 == complete - edit FHRGRP '120' - edit FHRLST 'f120' - edit FCSTHR '120' - edit TRDRUN 'YES' - task jgfs_awips_f126 - trigger ../../post/jgfs_post_f126 == complete - edit FHRGRP '126' - edit FHRLST 'f126' - edit FCSTHR '126' - edit TRDRUN 'YES' - task jgfs_awips_f132 - trigger ../../post/jgfs_post_f132 == complete - edit FHRGRP '132' - edit FHRLST 'f132' - edit FCSTHR '132' - edit TRDRUN 'YES' - task jgfs_awips_f138 - trigger ../../post/jgfs_post_f138 == complete - edit FHRGRP '138' - edit FHRLST 'f138' - edit FCSTHR '138' - edit TRDRUN 'YES' - task jgfs_awips_f144 - trigger ../../post/jgfs_post_f144 == complete - edit FHRGRP '144' - edit FHRLST 'f144' - edit FCSTHR '144' - edit TRDRUN 'YES' - task jgfs_awips_f150 - trigger ../../post/jgfs_post_f150 == complete - edit FHRGRP '150' - edit FHRLST 'f150' - edit FCSTHR '150' - edit TRDRUN 'YES' - task jgfs_awips_f156 - trigger ../../post/jgfs_post_f156 == complete - edit FHRGRP '156' - edit FHRLST 'f156' - edit FCSTHR '156' - edit TRDRUN 'YES' - task jgfs_awips_f162 - trigger ../../post/jgfs_post_f162 == complete - edit FHRGRP '162' - edit FHRLST 'f162' - edit FCSTHR '162' - edit TRDRUN 'YES' - task jgfs_awips_f168 - trigger ../../post/jgfs_post_f168 == complete - edit FHRGRP '168' - edit FHRLST 'f168' - edit FCSTHR '168' - edit TRDRUN 'YES' - task jgfs_awips_f174 - trigger ../../post/jgfs_post_f174 == complete - edit FHRGRP '174' - edit FHRLST 'f174' - edit FCSTHR '174' - edit TRDRUN 'YES' - task jgfs_awips_f180 - trigger ../../post/jgfs_post_f180 == complete - edit FHRGRP '180' - edit FHRLST 'f180' - edit FCSTHR '180' - edit TRDRUN 'YES' - task jgfs_awips_f186 - trigger ../../post/jgfs_post_f186 == complete - edit FHRGRP '186' - edit FHRLST 'f186' - edit FCSTHR '186' - edit TRDRUN 'YES' - task jgfs_awips_f192 - trigger ../../post/jgfs_post_f192 == complete - edit FHRGRP '192' - edit FHRLST 'f192' - edit FCSTHR '192' - edit TRDRUN 'YES' - task jgfs_awips_f198 - trigger ../../post/jgfs_post_f198 == complete - edit FHRGRP '198' - edit FHRLST 'f198' - edit FCSTHR '198' - edit TRDRUN 'YES' - task jgfs_awips_f204 - trigger ../../post/jgfs_post_f204 == complete - edit FHRGRP '204' - edit FHRLST 'f204' - edit FCSTHR '204' - edit TRDRUN 'YES' - task jgfs_awips_f210 - trigger ../../post/jgfs_post_f210 == complete - edit FHRGRP '210' - edit FHRLST 'f210' - edit FCSTHR '210' - edit TRDRUN 'YES' - task jgfs_awips_f216 - trigger ../../post/jgfs_post_f216 == complete - edit FHRGRP '216' - edit FHRLST 'f216' - edit FCSTHR '216' - edit TRDRUN 'YES' - task jgfs_awips_f222 - trigger ../../post/jgfs_post_f222 == complete - edit FHRGRP '222' - edit FHRLST 'f222' - edit FCSTHR '222' - edit TRDRUN 'YES' - task jgfs_awips_f228 - trigger ../../post/jgfs_post_f228 == complete - edit FHRGRP '228' - edit FHRLST 'f228' - edit FCSTHR '228' - edit TRDRUN 'YES' - task jgfs_awips_f234 - trigger ../../post/jgfs_post_f234 == complete - edit FHRGRP '234' - edit FHRLST 'f234' - edit FCSTHR '234' - edit TRDRUN 'YES' - task jgfs_awips_f240 - trigger ../../post/jgfs_post_f240 == complete - edit FHRGRP '240' - edit FHRLST 'f240' - edit FCSTHR '240' - edit TRDRUN 'YES' - endfamily - family awips_g2 - task jgfs_awips_g2_f000 - trigger ../../post/jgfs_post_f000 == complete - edit FHRGRP '000' - edit FHRLST 'f000' - edit FCSTHR '000' - edit TRDRUN 'YES' - task jgfs_awips_g2_f006 - trigger ../../post/jgfs_post_f006 == complete - edit FHRGRP '006' - edit FHRLST 'f006' - edit FCSTHR '006' - edit TRDRUN 'YES' - task jgfs_awips_g2_f012 - trigger ../../post/jgfs_post_f012 == complete - edit FHRGRP '012' - edit FHRLST 'f012' - edit FCSTHR '012' - edit TRDRUN 'YES' - task jgfs_awips_g2_f018 - trigger ../../post/jgfs_post_f018 == complete - edit FHRGRP '018' - edit FHRLST 'f018' - edit FCSTHR '018' - edit TRDRUN 'YES' - task jgfs_awips_g2_f024 - trigger ../../post/jgfs_post_f024 == complete - edit FHRGRP '024' - edit FHRLST 'f024' - edit FCSTHR '024' - edit TRDRUN 'YES' - task jgfs_awips_g2_f030 - trigger ../../post/jgfs_post_f030 == complete - edit FHRGRP '030' - edit FHRLST 'f030' - edit FCSTHR '030' - edit TRDRUN 'YES' - task jgfs_awips_g2_f036 - trigger ../../post/jgfs_post_f036 == complete - edit FHRGRP '036' - edit FHRLST 'f036' - edit FCSTHR '036' - edit TRDRUN 'YES' - task jgfs_awips_g2_f042 - trigger ../../post/jgfs_post_f042 == complete - edit FHRGRP '042' - edit FHRLST 'f042' - edit FCSTHR '042' - edit TRDRUN 'YES' - task jgfs_awips_g2_f048 - trigger ../../post/jgfs_post_f048 == complete - edit FHRGRP '048' - edit FHRLST 'f048' - edit FCSTHR '048' - edit TRDRUN 'YES' - task jgfs_awips_g2_f054 - trigger ../../post/jgfs_post_f054 == complete - edit FHRGRP '054' - edit FHRLST 'f054' - edit FCSTHR '054' - edit TRDRUN 'YES' - task jgfs_awips_g2_f060 - trigger ../../post/jgfs_post_f060 == complete - edit FHRGRP '060' - edit FHRLST 'f060' - edit FCSTHR '060' - edit TRDRUN 'YES' - task jgfs_awips_g2_f066 - trigger ../../post/jgfs_post_f066 == complete - edit FHRGRP '066' - edit FHRLST 'f066' - edit FCSTHR '066' - edit TRDRUN 'YES' - task jgfs_awips_g2_f072 - trigger ../../post/jgfs_post_f072 == complete - edit FHRGRP '072' - edit FHRLST 'f072' - edit FCSTHR '072' - edit TRDRUN 'YES' - task jgfs_awips_g2_f078 - trigger ../../post/jgfs_post_f078 == complete - edit FHRGRP '078' - edit FHRLST 'f078' - edit FCSTHR '078' - edit TRDRUN 'YES' - task jgfs_awips_g2_f084 - trigger ../../post/jgfs_post_f084 == complete - edit FHRGRP '084' - edit FHRLST 'f084' - edit FCSTHR '084' - edit TRDRUN 'YES' - task jgfs_awips_g2_f090 - trigger ../../post/jgfs_post_f090 == complete - edit FHRGRP '090' - edit FHRLST 'f090' - edit FCSTHR '090' - edit TRDRUN 'YES' - task jgfs_awips_g2_f096 - trigger ../../post/jgfs_post_f096 == complete - edit FHRGRP '096' - edit FHRLST 'f096' - edit FCSTHR '096' - edit TRDRUN 'YES' - task jgfs_awips_g2_f102 - trigger ../../post/jgfs_post_f102 == complete - edit FHRGRP '102' - edit FHRLST 'f102' - edit FCSTHR '102' - edit TRDRUN 'YES' - task jgfs_awips_g2_f108 - trigger ../../post/jgfs_post_f108 == complete - edit FHRGRP '108' - edit FHRLST 'f108' - edit FCSTHR '108' - edit TRDRUN 'YES' - task jgfs_awips_g2_f114 - trigger ../../post/jgfs_post_f114 == complete - edit FHRGRP '114' - edit FHRLST 'f114' - edit FCSTHR '114' - edit TRDRUN 'YES' - task jgfs_awips_g2_f120 - trigger ../../post/jgfs_post_f120 == complete - edit FHRGRP '120' - edit FHRLST 'f120' - edit FCSTHR '120' - edit TRDRUN 'YES' - task jgfs_awips_g2_f126 - trigger ../../post/jgfs_post_f126 == complete - edit FHRGRP '126' - edit FHRLST 'f126' - edit FCSTHR '126' - edit TRDRUN 'YES' - task jgfs_awips_g2_f132 - trigger ../../post/jgfs_post_f132 == complete - edit FHRGRP '132' - edit FHRLST 'f132' - edit FCSTHR '132' - edit TRDRUN 'YES' - task jgfs_awips_g2_f138 - trigger ../../post/jgfs_post_f138 == complete - edit FHRGRP '138' - edit FHRLST 'f138' - edit FCSTHR '138' - edit TRDRUN 'YES' - task jgfs_awips_g2_f144 - trigger ../../post/jgfs_post_f144 == complete - edit FHRGRP '144' - edit FHRLST 'f144' - edit FCSTHR '144' - edit TRDRUN 'YES' - task jgfs_awips_g2_f150 - trigger ../../post/jgfs_post_f150 == complete - edit FHRGRP '150' - edit FHRLST 'f150' - edit FCSTHR '150' - edit TRDRUN 'YES' - task jgfs_awips_g2_f156 - trigger ../../post/jgfs_post_f156 == complete - edit FHRGRP '156' - edit FHRLST 'f156' - edit FCSTHR '156' - edit TRDRUN 'YES' - task jgfs_awips_g2_f162 - trigger ../../post/jgfs_post_f162 == complete - edit FHRGRP '162' - edit FHRLST 'f162' - edit FCSTHR '162' - edit TRDRUN 'YES' - task jgfs_awips_g2_f168 - trigger ../../post/jgfs_post_f168 == complete - edit FHRGRP '168' - edit FHRLST 'f168' - edit FCSTHR '168' - edit TRDRUN 'YES' - task jgfs_awips_g2_f174 - trigger ../../post/jgfs_post_f174 == complete - edit FHRGRP '174' - edit FHRLST 'f174' - edit FCSTHR '174' - edit TRDRUN 'YES' - task jgfs_awips_g2_f180 - trigger ../../post/jgfs_post_f180 == complete - edit FHRGRP '180' - edit FHRLST 'f180' - edit FCSTHR '180' - edit TRDRUN 'YES' - task jgfs_awips_g2_f186 - trigger ../../post/jgfs_post_f186 == complete - edit FHRGRP '186' - edit FHRLST 'f186' - edit FCSTHR '186' - edit TRDRUN 'YES' - task jgfs_awips_g2_f192 - trigger ../../post/jgfs_post_f192 == complete - edit FHRGRP '192' - edit FHRLST 'f192' - edit FCSTHR '192' - edit TRDRUN 'YES' - task jgfs_awips_g2_f198 - trigger ../../post/jgfs_post_f198 == complete - edit FHRGRP '198' - edit FHRLST 'f198' - edit FCSTHR '198' - edit TRDRUN 'YES' - task jgfs_awips_g2_f204 - trigger ../../post/jgfs_post_f204 == complete - edit FHRGRP '204' - edit FHRLST 'f204' - edit FCSTHR '204' - edit TRDRUN 'YES' - task jgfs_awips_g2_f210 - trigger ../../post/jgfs_post_f210 == complete - edit FHRGRP '210' - edit FHRLST 'f210' - edit FCSTHR '210' - edit TRDRUN 'YES' - task jgfs_awips_g2_f216 - trigger ../../post/jgfs_post_f216 == complete - edit FHRGRP '216' - edit FHRLST 'f216' - edit FCSTHR '216' - edit TRDRUN 'YES' - task jgfs_awips_g2_f222 - trigger ../../post/jgfs_post_f222 == complete - edit FHRGRP '222' - edit FHRLST 'f222' - edit FCSTHR '222' - edit TRDRUN 'YES' - task jgfs_awips_g2_f228 - trigger ../../post/jgfs_post_f228 == complete - edit FHRGRP '228' - edit FHRLST 'f228' - edit FCSTHR '228' - edit TRDRUN 'YES' - task jgfs_awips_g2_f234 - trigger ../../post/jgfs_post_f234 == complete - edit FHRGRP '234' - edit FHRLST 'f234' - edit FCSTHR '234' - edit TRDRUN 'YES' - task jgfs_awips_g2_f240 - trigger ../../post/jgfs_post_f240 == complete - edit FHRGRP '240' - edit FHRLST 'f240' - edit FCSTHR '240' - edit TRDRUN 'YES' - endfamily - endfamily - family mos - edit ECF_FILES '/ecf/ecfnets/scripts/gfs/mos' - edit PROJ 'GFS-%PROJENVIR%' - edit COM '/gpfs/hps/nco/ops/com' - edit QUEUESERV 'prod_transfer' - edit MODULES 'module load cfp-intel-sandybridge/1.1.0 grib_util gempak/6.32.0' - edit QUEUE 'prod' - family prep - task jgfsmos_stn_prep - trigger /prod00/gfs/post/jgfs_post_f096 == complete - edit NTASK '3' - edit PTILE '3' - edit OMP_NUM_THREADS '1' - edit NODES '1' - task jgfsmos_grd_prep - trigger /prod00/gfs/post/jgfs_post_f096 == complete - edit NTASK '4' - edit PTILE '4' - edit OMP_NUM_THREADS '1' - edit NODES '1' - task jgfsmos_ext_stn_prep - trigger /prod00/gfs/post == complete - edit NTASK '2' - edit PTILE '2' - edit OMP_NUM_THREADS '1' - edit NODES '1' - task jgfsmos_ext_grd_prep - trigger /prod00/gfs/post == complete - edit NTASK '7' - edit PTILE '4' - edit OMP_NUM_THREADS '1' - edit NODES '2' - endfamily - family forecast - task jgfsmos_stn_fcst - trigger ../prep/jgfsmos_stn_prep == complete - edit NTASK '5' - edit PTILE '5' - edit OMP_NUM_THREADS '1' - edit NODES '1' - task jgfsmos_grd_fcst - trigger ../prep/jgfsmos_stn_prep == complete and ../prep/jgfsmos_grd_prep == complete - edit NTASK '7' - edit PTILE '4' - edit OMP_NUM_THREADS '1' - edit NODES '2' - task jgfsmos_ext_stn_fcst - trigger ../prep/jgfsmos_ext_stn_prep == complete and ../prdgen/jgfsmos_stn_prdgen == complete - edit NTASK '3' - edit PTILE '3' - edit OMP_NUM_THREADS '1' - edit NODES '1' - task jgfsmos_ext_grd_fcst - trigger ../prep/jgfsmos_ext_stn_prep == complete and ../prep/jgfsmos_ext_grd_prep == complete and jgfsmos_grd_fcst == complete - edit NTASK '7' - edit PTILE '4' - edit OMP_NUM_THREADS '1' - edit NODES '2' - endfamily - family prdgen - task jgfsmos_stn_prdgen - trigger ../forecast/jgfsmos_stn_fcst == complete - edit NTASK '1' - edit PTILE '1' - edit OMP_NUM_THREADS '1' - edit NODES '1' - task jgfsmos_grd_prdgen - trigger ../forecast/jgfsmos_grd_fcst == complete and jgfsmos_stn_prdgen == complete - edit NTASK '14' - edit PTILE '1' - edit OMP_NUM_THREADS '20' - edit NODES '14' - task jgfsmos_ext_stn_prdgen - trigger ../forecast/jgfsmos_ext_stn_fcst == complete and jgfsmos_stn_prdgen == complete - edit NTASK '1' - edit PTILE '1' - edit OMP_NUM_THREADS '1' - edit NODES '1' - task jgfsmos_ext_grd_prdgen - trigger ../forecast/jgfsmos_ext_grd_fcst == complete and jgfsmos_grd_prdgen == complete and jgfsmos_ext_stn_prdgen == complete - edit NTASK '12' - edit PTILE '1' - edit OMP_NUM_THREADS '20' - edit NODES '12' - task jgfsmos_wx_prdgen - trigger ../prdgen/jgfsmos_grd_prdgen == complete - edit NTASK '2' - edit PTILE '1' - edit OMP_NUM_THREADS '20' - edit NODES '2' - task jgfsmos_wx_ext_prdgen - trigger ../prdgen/jgfsmos_ext_grd_prdgen == complete and jgfsmos_wx_prdgen == complete - edit NTASK '2' - edit PTILE '1' - edit OMP_NUM_THREADS '20' - edit NODES '2' - endfamily - family gempak - task jgfs_gempak_mdl - trigger ../prdgen == complete - task jmrf_gempak_mdl - trigger ../prdgen == complete - endfamily - endfamily - family gempak - task jgfs_gempak_ncdc_upapgif - trigger ./jgfs_gempak == active or ./jgfs_gempak == complete - task jgfs_gempak - trigger ../jgfs_analysis eq complete - task jgfs_gempak_meta - trigger ../jgfs_analysis == complete - task jgfs_pgrb2_spec_gempak - trigger ./jgfs_npoess_pgrb2_0p5deg == complete - task jgfs_npoess_pgrb2_0p5deg - trigger ../post/jgfs_post_anl eq active or ../post/jgfs_post_anl == complete - endfamily - endfamily - diff --git a/ecflow/ecf/defs/gfs_06.def b/ecflow/ecf/defs/gfs_06.def deleted file mode 100644 index 0a3c2f1d18..0000000000 --- a/ecflow/ecf/defs/gfs_06.def +++ /dev/null @@ -1,2244 +0,0 @@ - family gfs - edit CYC '06' - edit ECF_FILES '/ecf/ecfnets/scripts/gfs_FV3' - edit PROJ 'GFS-OPS' - edit NET 'gfs' - edit RUN 'gfs' - edit COM '/gpfs/dell1/nco/ops/com' - edit QUEUESHARED 'prod_shared' - edit QUEUESERV 'prod_transfer' - edit QUEUE 'prod' - family dump - task jgfs_tropcy_qc_reloc - event 1 jtwc_bull_email - time 08:41 - task jgfs_dump - event 1 release_sfcprep - time 08:47 - task jgfs_dump_post - trigger jgfs_dump eq complete - event 1 release_gfs06_dump_alert - task jgfs_dump_alert - trigger jgfs_dump_post:release_gfs06_dump_alert - task jmodel_realtime_gfs - trigger jgfs_dump_alert eq complete - endfamily - family prep - task jgfs_emcsfc_sfc_prep - trigger ../dump/jgfs_dump:release_sfcprep - task jgfs_prep - trigger ../dump/jgfs_dump eq complete and ../dump/jgfs_tropcy_qc_reloc eq complete - task jgfs_prep_post - trigger jgfs_prep eq complete and ../jgfs_analysis eq complete - endfamily - task jgfs_analysis - trigger prep/jgfs_prep eq complete and prep/jgfs_emcsfc_sfc_prep == complete - event 1 release_fcst - task jgfs_vminmon - trigger jgfs_analysis == complete - family forecast - task jgfs_forecast_high - trigger ../jgfs_analysis:release_fcst - endfamily - family post - task jgfs_post_manager - trigger ../jgfs_analysis eq complete - event 1 release_postanl - event 2 release_post000 - event 3 release_post001 - event 4 release_post002 - event 5 release_post003 - event 6 release_post004 - event 7 release_post005 - event 8 release_post006 - event 9 release_post007 - event 10 release_post008 - event 11 release_post009 - event 12 release_post010 - event 13 release_post011 - event 14 release_post012 - event 15 release_post013 - event 16 release_post014 - event 17 release_post015 - event 18 release_post016 - event 19 release_post017 - event 20 release_post018 - event 21 release_post019 - event 22 release_post020 - event 23 release_post021 - event 24 release_post022 - event 25 release_post023 - event 26 release_post024 - event 27 release_post025 - event 28 release_post026 - event 29 release_post027 - event 30 release_post028 - event 31 release_post029 - event 32 release_post030 - event 33 release_post031 - event 34 release_post032 - event 35 release_post033 - event 36 release_post034 - event 37 release_post035 - event 38 release_post036 - event 39 release_post037 - event 40 release_post038 - event 41 release_post039 - event 42 release_post040 - event 43 release_post041 - event 44 release_post042 - event 45 release_post043 - event 46 release_post044 - event 47 release_post045 - event 48 release_post046 - event 49 release_post047 - event 50 release_post048 - event 51 release_post049 - event 52 release_post050 - event 53 release_post051 - event 54 release_post052 - event 55 release_post053 - event 56 release_post054 - event 57 release_post055 - event 58 release_post056 - event 59 release_post057 - event 60 release_post058 - event 61 release_post059 - event 62 release_post060 - event 63 release_post061 - event 64 release_post062 - event 65 release_post063 - event 66 release_post064 - event 67 release_post065 - event 68 release_post066 - event 69 release_post067 - event 70 release_post068 - event 71 release_post069 - event 72 release_post070 - event 73 release_post071 - event 74 release_post072 - event 75 release_post073 - event 76 release_post074 - event 77 release_post075 - event 78 release_post076 - event 79 release_post077 - event 80 release_post078 - event 81 release_post079 - event 82 release_post080 - event 83 release_post081 - event 84 release_post082 - event 85 release_post083 - event 86 release_post084 - event 87 release_post085 - event 88 release_post086 - event 89 release_post087 - event 90 release_post088 - event 91 release_post089 - event 92 release_post090 - event 93 release_post091 - event 94 release_post092 - event 95 release_post093 - event 96 release_post094 - event 97 release_post095 - event 98 release_post096 - event 99 release_post097 - event 100 release_post098 - event 101 release_post099 - event 102 release_post100 - event 103 release_post101 - event 104 release_post102 - event 105 release_post103 - event 106 release_post104 - event 107 release_post105 - event 108 release_post106 - event 109 release_post107 - event 110 release_post108 - event 111 release_post109 - event 112 release_post110 - event 113 release_post111 - event 114 release_post112 - event 115 release_post113 - event 116 release_post114 - event 117 release_post115 - event 118 release_post116 - event 119 release_post117 - event 120 release_post118 - event 121 release_post119 - event 122 release_post120 - event 123 release_post123 - event 124 release_post126 - event 125 release_post129 - event 126 release_post132 - event 127 release_post135 - event 128 release_post138 - event 129 release_post141 - event 130 release_post144 - event 131 release_post147 - event 132 release_post150 - event 133 release_post153 - event 134 release_post156 - event 135 release_post159 - event 136 release_post162 - event 137 release_post165 - event 138 release_post168 - event 139 release_post171 - event 140 release_post174 - event 141 release_post177 - event 142 release_post180 - event 143 release_post183 - event 144 release_post186 - event 145 release_post189 - event 146 release_post192 - event 147 release_post195 - event 148 release_post198 - event 149 release_post201 - event 150 release_post204 - event 151 release_post207 - event 152 release_post210 - event 153 release_post213 - event 154 release_post216 - event 155 release_post219 - event 156 release_post222 - event 157 release_post225 - event 158 release_post228 - event 159 release_post231 - event 160 release_post234 - event 161 release_post237 - event 162 release_post240 - event 163 release_post243 - event 164 release_post246 - event 165 release_post249 - event 166 release_post252 - event 167 release_post255 - event 168 release_post258 - event 169 release_post261 - event 170 release_post264 - event 171 release_post267 - event 172 release_post270 - event 173 release_post273 - event 174 release_post276 - event 175 release_post279 - event 176 release_post282 - event 177 release_post285 - event 178 release_post288 - event 179 release_post291 - event 180 release_post294 - event 181 release_post297 - event 182 release_post300 - event 183 release_post303 - event 184 release_post306 - event 185 release_post309 - event 186 release_post312 - event 187 release_post315 - event 188 release_post318 - event 189 release_post321 - event 190 release_post324 - event 191 release_post327 - event 192 release_post330 - event 193 release_post333 - event 194 release_post336 - event 195 release_post339 - event 196 release_post342 - event 197 release_post345 - event 198 release_post348 - event 199 release_post351 - event 200 release_post354 - event 201 release_post357 - event 202 release_post360 - event 203 release_post363 - event 204 release_post366 - event 205 release_post369 - event 206 release_post372 - event 207 release_post375 - event 208 release_post378 - event 209 release_post381 - event 210 release_post384 - task jgfs_post_anl - trigger ./jgfs_post_manager:release_postanl - edit FHRGRP '000' - edit FHRLST 'anl' - edit HR 'anl' - edit FHR 'anl' - event 1 release_postanl - task jgfs_post_f000 - trigger ./jgfs_post_manager:release_post000 - edit FHRGRP '001' - edit FHRLST 'f000' - edit FHR 'f000' - edit HR '000' - task jgfs_post_f001 - trigger ./jgfs_post_manager:release_post001 - edit FHRGRP '002' - edit FHRLST 'f001' - edit FHR 'f001' - edit HR '001' - task jgfs_post_f002 - trigger ./jgfs_post_manager:release_post002 - edit FHRGRP '003' - edit FHRLST 'f002' - edit FHR 'f002' - edit HR '002' - task jgfs_post_f003 - trigger ./jgfs_post_manager:release_post003 - edit FHRGRP '004' - edit FHRLST 'f003' - edit FHR 'f003' - edit HR '003' - task jgfs_post_f004 - trigger ./jgfs_post_manager:release_post004 - edit FHRGRP '005' - edit FHRLST 'f004' - edit FHR 'f004' - edit HR '004' - task jgfs_post_f005 - trigger ./jgfs_post_manager:release_post005 - edit FHRGRP '006' - edit FHRLST 'f005' - edit FHR 'f005' - edit HR '005' - task jgfs_post_f006 - trigger ./jgfs_post_manager:release_post006 - edit FHRGRP '007' - edit FHRLST 'f006' - edit FHR 'f006' - edit HR '006' - task jgfs_post_f007 - trigger ./jgfs_post_manager:release_post007 - edit FHRGRP '008' - edit FHRLST 'f007' - edit FHR 'f007' - edit HR '007' - task jgfs_post_f008 - trigger ./jgfs_post_manager:release_post008 - edit FHRGRP '009' - edit FHRLST 'f008' - edit FHR 'f008' - edit HR '008' - task jgfs_post_f009 - trigger ./jgfs_post_manager:release_post009 - edit FHRGRP '010' - edit FHRLST 'f009' - edit FHR 'f009' - edit HR '009' - task jgfs_post_f010 - trigger ./jgfs_post_manager:release_post010 - edit FHRGRP '011' - edit FHRLST 'f010' - edit FHR 'f010' - edit HR '010' - task jgfs_post_f011 - trigger ./jgfs_post_manager:release_post011 - edit FHRGRP '012' - edit FHRLST 'f011' - edit FHR 'f011' - edit HR '011' - task jgfs_post_f012 - trigger ./jgfs_post_manager:release_post012 - edit FHRGRP '013' - edit FHRLST 'f012' - edit FHR 'f012' - edit HR '012' - task jgfs_post_f013 - trigger ./jgfs_post_manager:release_post013 - edit FHRGRP '014' - edit FHRLST 'f013' - edit FHR 'f013' - edit HR '013' - task jgfs_post_f014 - trigger ./jgfs_post_manager:release_post014 - edit FHRGRP '015' - edit FHRLST 'f014' - edit FHR 'f014' - edit HR '014' - task jgfs_post_f015 - trigger ./jgfs_post_manager:release_post015 - edit FHRGRP '016' - edit FHRLST 'f015' - edit FHR 'f015' - edit HR '015' - task jgfs_post_f016 - trigger ./jgfs_post_manager:release_post016 - edit FHRGRP '017' - edit FHRLST 'f016' - edit FHR 'f016' - edit HR '016' - task jgfs_post_f017 - trigger ./jgfs_post_manager:release_post017 - edit FHRGRP '018' - edit FHRLST 'f017' - edit FHR 'f017' - edit HR '017' - task jgfs_post_f018 - trigger ./jgfs_post_manager:release_post018 - edit FHRGRP '019' - edit FHRLST 'f018' - edit FHR 'f018' - edit HR '018' - task jgfs_post_f019 - trigger ./jgfs_post_manager:release_post019 - edit FHRGRP '020' - edit FHRLST 'f019' - edit FHR 'f019' - edit HR '019' - task jgfs_post_f020 - trigger ./jgfs_post_manager:release_post020 - edit FHRGRP '021' - edit FHRLST 'f020' - edit FHR 'f020' - edit HR '020' - task jgfs_post_f021 - trigger ./jgfs_post_manager:release_post021 - edit FHRGRP '022' - edit FHRLST 'f021' - edit FHR 'f021' - edit HR '021' - task jgfs_post_f022 - trigger ./jgfs_post_manager:release_post022 - edit FHRGRP '023' - edit FHRLST 'f022' - edit FHR 'f022' - edit HR '022' - task jgfs_post_f023 - trigger ./jgfs_post_manager:release_post023 - edit FHRGRP '024' - edit FHRLST 'f023' - edit FHR 'f023' - edit HR '023' - task jgfs_post_f024 - trigger ./jgfs_post_manager:release_post024 - edit FHRGRP '025' - edit FHRLST 'f024' - edit FHR 'f024' - edit HR '024' - task jgfs_post_f025 - trigger ./jgfs_post_manager:release_post025 - edit FHRGRP '026' - edit FHRLST 'f025' - edit FHR 'f025' - edit HR '025' - task jgfs_post_f026 - trigger ./jgfs_post_manager:release_post026 - edit FHRGRP '027' - edit FHRLST 'f026' - edit FHR 'f026' - edit HR '026' - task jgfs_post_f027 - trigger ./jgfs_post_manager:release_post027 - edit FHRGRP '028' - edit FHRLST 'f027' - edit FHR 'f027' - edit HR '027' - task jgfs_post_f028 - trigger ./jgfs_post_manager:release_post028 - edit FHRGRP '029' - edit FHRLST 'f028' - edit FHR 'f028' - edit HR '028' - task jgfs_post_f029 - trigger ./jgfs_post_manager:release_post029 - edit FHRGRP '030' - edit FHRLST 'f029' - edit FHR 'f029' - edit HR '029' - task jgfs_post_f030 - trigger ./jgfs_post_manager:release_post030 - edit FHRGRP '031' - edit FHRLST 'f030' - edit FHR 'f030' - edit HR '030' - task jgfs_post_f031 - trigger ./jgfs_post_manager:release_post031 - edit FHRGRP '032' - edit FHRLST 'f031' - edit FHR 'f031' - edit HR '031' - task jgfs_post_f032 - trigger ./jgfs_post_manager:release_post032 - edit FHRGRP '033' - edit FHRLST 'f032' - edit FHR 'f032' - edit HR '032' - task jgfs_post_f033 - trigger ./jgfs_post_manager:release_post033 - edit FHRGRP '034' - edit FHRLST 'f033' - edit FHR 'f033' - edit HR '033' - task jgfs_post_f034 - trigger ./jgfs_post_manager:release_post034 - edit FHRGRP '035' - edit FHRLST 'f034' - edit FHR 'f034' - edit HR '034' - task jgfs_post_f035 - trigger ./jgfs_post_manager:release_post035 - edit FHRGRP '036' - edit FHRLST 'f035' - edit FHR 'f035' - edit HR '035' - task jgfs_post_f036 - trigger ./jgfs_post_manager:release_post036 - edit FHRGRP '037' - edit FHRLST 'f036' - edit FHR 'f036' - edit HR '036' - task jgfs_post_f037 - trigger ./jgfs_post_manager:release_post037 - edit FHRGRP '038' - edit FHRLST 'f037' - edit FHR 'f037' - edit HR '037' - task jgfs_post_f038 - trigger ./jgfs_post_manager:release_post038 - edit FHRGRP '039' - edit FHRLST 'f038' - edit FHR 'f038' - edit HR '038' - task jgfs_post_f039 - trigger ./jgfs_post_manager:release_post039 - edit FHRGRP '040' - edit FHRLST 'f039' - edit FHR 'f039' - edit HR '039' - task jgfs_post_f040 - trigger ./jgfs_post_manager:release_post040 - edit FHRGRP '041' - edit FHRLST 'f040' - edit FHR 'f040' - edit HR '040' - task jgfs_post_f041 - trigger ./jgfs_post_manager:release_post041 - edit FHRGRP '042' - edit FHRLST 'f041' - edit FHR 'f041' - edit HR '041' - task jgfs_post_f042 - trigger ./jgfs_post_manager:release_post042 - edit FHRGRP '043' - edit FHRLST 'f042' - edit FHR 'f042' - edit HR '042' - task jgfs_post_f043 - trigger ./jgfs_post_manager:release_post043 - edit FHRGRP '044' - edit FHRLST 'f043' - edit FHR 'f043' - edit HR '043' - task jgfs_post_f044 - trigger ./jgfs_post_manager:release_post044 - edit FHRGRP '045' - edit FHRLST 'f044' - edit FHR 'f044' - edit HR '044' - task jgfs_post_f045 - trigger ./jgfs_post_manager:release_post045 - edit FHRGRP '046' - edit FHRLST 'f045' - edit FHR 'f045' - edit HR '045' - task jgfs_post_f046 - trigger ./jgfs_post_manager:release_post046 - edit FHRGRP '047' - edit FHRLST 'f046' - edit FHR 'f046' - edit HR '046' - task jgfs_post_f047 - trigger ./jgfs_post_manager:release_post047 - edit FHRGRP '048' - edit FHRLST 'f047' - edit FHR 'f047' - edit HR '047' - task jgfs_post_f048 - trigger ./jgfs_post_manager:release_post048 - edit FHRGRP '049' - edit FHRLST 'f048' - edit FHR 'f048' - edit HR '048' - task jgfs_post_f049 - trigger ./jgfs_post_manager:release_post049 - edit FHRGRP '050' - edit FHRLST 'f049' - edit FHR 'f049' - edit HR '049' - task jgfs_post_f050 - trigger ./jgfs_post_manager:release_post050 - edit FHRGRP '051' - edit FHRLST 'f050' - edit FHR 'f050' - edit HR '050' - task jgfs_post_f051 - trigger ./jgfs_post_manager:release_post051 - edit FHRGRP '052' - edit FHRLST 'f051' - edit FHR 'f051' - edit HR '051' - task jgfs_post_f052 - trigger ./jgfs_post_manager:release_post052 - edit FHRGRP '053' - edit FHRLST 'f052' - edit FHR 'f052' - edit HR '052' - task jgfs_post_f053 - trigger ./jgfs_post_manager:release_post053 - edit FHRGRP '054' - edit FHRLST 'f053' - edit FHR 'f053' - edit HR '053' - task jgfs_post_f054 - trigger ./jgfs_post_manager:release_post054 - edit FHRGRP '055' - edit FHRLST 'f054' - edit FHR 'f054' - edit HR '054' - task jgfs_post_f055 - trigger ./jgfs_post_manager:release_post055 - edit FHRGRP '056' - edit FHRLST 'f055' - edit FHR 'f055' - edit HR '055' - task jgfs_post_f056 - trigger ./jgfs_post_manager:release_post056 - edit FHRGRP '057' - edit FHRLST 'f056' - edit FHR 'f056' - edit HR '056' - task jgfs_post_f057 - trigger ./jgfs_post_manager:release_post057 - edit FHRGRP '058' - edit FHRLST 'f057' - edit FHR 'f057' - edit HR '057' - task jgfs_post_f058 - trigger ./jgfs_post_manager:release_post058 - edit FHRGRP '059' - edit FHRLST 'f058' - edit FHR 'f058' - edit HR '058' - task jgfs_post_f059 - trigger ./jgfs_post_manager:release_post059 - edit FHRGRP '060' - edit FHRLST 'f059' - edit FHR 'f059' - edit HR '059' - task jgfs_post_f060 - trigger ./jgfs_post_manager:release_post060 - edit FHRGRP '061' - edit FHRLST 'f060' - edit FHR 'f060' - edit HR '060' - task jgfs_post_f061 - trigger ./jgfs_post_manager:release_post061 - edit FHRGRP '062' - edit FHRLST 'f061' - edit FHR 'f061' - edit HR '061' - task jgfs_post_f062 - trigger ./jgfs_post_manager:release_post062 - edit FHRGRP '063' - edit FHRLST 'f062' - edit FHR 'f062' - edit HR '062' - task jgfs_post_f063 - trigger ./jgfs_post_manager:release_post063 - edit FHRGRP '064' - edit FHRLST 'f063' - edit FHR 'f063' - edit HR '063' - task jgfs_post_f064 - trigger ./jgfs_post_manager:release_post064 - edit FHRGRP '065' - edit FHRLST 'f064' - edit FHR 'f064' - edit HR '064' - task jgfs_post_f065 - trigger ./jgfs_post_manager:release_post065 - edit FHRGRP '066' - edit FHRLST 'f065' - edit FHR 'f065' - edit HR '065' - task jgfs_post_f066 - trigger ./jgfs_post_manager:release_post066 - edit FHRGRP '067' - edit FHRLST 'f066' - edit FHR 'f066' - edit HR '066' - task jgfs_post_f067 - trigger ./jgfs_post_manager:release_post067 - edit FHRGRP '068' - edit FHRLST 'f067' - edit FHR 'f067' - edit HR '067' - task jgfs_post_f068 - trigger ./jgfs_post_manager:release_post068 - edit FHRGRP '069' - edit FHRLST 'f068' - edit FHR 'f068' - edit HR '068' - task jgfs_post_f069 - trigger ./jgfs_post_manager:release_post069 - edit FHRGRP '070' - edit FHRLST 'f069' - edit FHR 'f069' - edit HR '069' - task jgfs_post_f070 - trigger ./jgfs_post_manager:release_post070 - edit FHRGRP '071' - edit FHRLST 'f070' - edit FHR 'f070' - edit HR '070' - task jgfs_post_f071 - trigger ./jgfs_post_manager:release_post071 - edit FHRGRP '072' - edit FHRLST 'f071' - edit FHR 'f071' - edit HR '071' - task jgfs_post_f072 - trigger ./jgfs_post_manager:release_post072 - edit FHRGRP '073' - edit FHRLST 'f072' - edit FHR 'f072' - edit HR '072' - task jgfs_post_f073 - trigger ./jgfs_post_manager:release_post073 - edit FHRGRP '074' - edit FHRLST 'f073' - edit FHR 'f073' - edit HR '073' - task jgfs_post_f074 - trigger ./jgfs_post_manager:release_post074 - edit FHRGRP '075' - edit FHRLST 'f074' - edit FHR 'f074' - edit HR '074' - task jgfs_post_f075 - trigger ./jgfs_post_manager:release_post075 - edit FHRGRP '076' - edit FHRLST 'f075' - edit FHR 'f075' - edit HR '075' - task jgfs_post_f076 - trigger ./jgfs_post_manager:release_post076 - edit FHRGRP '077' - edit FHRLST 'f076' - edit FHR 'f076' - edit HR '076' - task jgfs_post_f077 - trigger ./jgfs_post_manager:release_post077 - edit FHRGRP '078' - edit FHRLST 'f077' - edit FHR 'f077' - edit HR '077' - task jgfs_post_f078 - trigger ./jgfs_post_manager:release_post078 - edit FHRGRP '079' - edit FHRLST 'f078' - edit FHR 'f078' - edit HR '078' - task jgfs_post_f079 - trigger ./jgfs_post_manager:release_post079 - edit FHRGRP '080' - edit FHRLST 'f079' - edit FHR 'f079' - edit HR '079' - task jgfs_post_f080 - trigger ./jgfs_post_manager:release_post080 - edit FHRGRP '081' - edit FHRLST 'f080' - edit FHR 'f080' - edit HR '080' - task jgfs_post_f081 - trigger ./jgfs_post_manager:release_post081 - edit FHRGRP '082' - edit FHRLST 'f081' - edit FHR 'f081' - edit HR '081' - task jgfs_post_f082 - trigger ./jgfs_post_manager:release_post082 - edit FHRGRP '083' - edit FHRLST 'f082' - edit FHR 'f082' - edit HR '082' - task jgfs_post_f083 - trigger ./jgfs_post_manager:release_post083 - edit FHRGRP '084' - edit FHRLST 'f083' - edit FHR 'f083' - edit HR '083' - task jgfs_post_f084 - trigger ./jgfs_post_manager:release_post084 - edit FHRGRP '085' - edit FHRLST 'f084' - edit FHR 'f084' - edit HR '084' - task jgfs_post_f085 - trigger ./jgfs_post_manager:release_post085 - edit FHRGRP '086' - edit FHRLST 'f085' - edit FHR 'f085' - edit HR '085' - task jgfs_post_f086 - trigger ./jgfs_post_manager:release_post086 - edit FHRGRP '087' - edit FHRLST 'f086' - edit FHR 'f086' - edit HR '086' - task jgfs_post_f087 - trigger ./jgfs_post_manager:release_post087 - edit FHRGRP '088' - edit FHRLST 'f087' - edit FHR 'f087' - edit HR '087' - task jgfs_post_f088 - trigger ./jgfs_post_manager:release_post088 - edit FHRGRP '089' - edit FHRLST 'f088' - edit FHR 'f088' - edit HR '088' - task jgfs_post_f089 - trigger ./jgfs_post_manager:release_post089 - edit FHRGRP '090' - edit FHRLST 'f089' - edit FHR 'f089' - edit HR '089' - task jgfs_post_f090 - trigger ./jgfs_post_manager:release_post090 - edit FHRGRP '091' - edit FHRLST 'f090' - edit FHR 'f090' - edit HR '090' - task jgfs_post_f091 - trigger ./jgfs_post_manager:release_post091 - edit FHRGRP '092' - edit FHRLST 'f091' - edit FHR 'f091' - edit HR '091' - task jgfs_post_f092 - trigger ./jgfs_post_manager:release_post092 - edit FHRGRP '093' - edit FHRLST 'f092' - edit FHR 'f092' - edit HR '092' - task jgfs_post_f093 - trigger ./jgfs_post_manager:release_post093 - edit FHRGRP '094' - edit FHRLST 'f093' - edit FHR 'f093' - edit HR '093' - task jgfs_post_f094 - trigger ./jgfs_post_manager:release_post094 - edit FHRGRP '095' - edit FHRLST 'f094' - edit FHR 'f094' - edit HR '094' - task jgfs_post_f095 - trigger ./jgfs_post_manager:release_post095 - edit FHRGRP '096' - edit FHRLST 'f095' - edit FHR 'f095' - edit HR '095' - task jgfs_post_f096 - trigger ./jgfs_post_manager:release_post096 - edit FHRGRP '097' - edit FHRLST 'f096' - edit FHR 'f096' - edit HR '096' - task jgfs_post_f097 - trigger ./jgfs_post_manager:release_post097 - edit FHRGRP '098' - edit FHRLST 'f097' - edit FHR 'f097' - edit HR '097' - task jgfs_post_f098 - trigger ./jgfs_post_manager:release_post098 - edit FHRGRP '099' - edit FHRLST 'f098' - edit FHR 'f098' - edit HR '098' - task jgfs_post_f099 - trigger ./jgfs_post_manager:release_post099 - edit FHRGRP '100' - edit FHRLST 'f099' - edit FHR 'f099' - edit HR '099' - task jgfs_post_f100 - trigger ./jgfs_post_manager:release_post100 - edit FHRGRP '101' - edit FHRLST 'f100' - edit FHR 'f100' - edit HR '100' - task jgfs_post_f101 - trigger ./jgfs_post_manager:release_post101 - edit FHRGRP '102' - edit FHRLST 'f101' - edit FHR 'f101' - edit HR '101' - task jgfs_post_f102 - trigger ./jgfs_post_manager:release_post102 - edit FHRGRP '103' - edit FHRLST 'f102' - edit FHR 'f102' - edit HR '102' - task jgfs_post_f103 - trigger ./jgfs_post_manager:release_post103 - edit FHRGRP '104' - edit FHRLST 'f103' - edit FHR 'f103' - edit HR '103' - task jgfs_post_f104 - trigger ./jgfs_post_manager:release_post104 - edit FHRGRP '105' - edit FHRLST 'f104' - edit FHR 'f104' - edit HR '104' - task jgfs_post_f105 - trigger ./jgfs_post_manager:release_post105 - edit FHRGRP '106' - edit FHRLST 'f105' - edit FHR 'f105' - edit HR '105' - task jgfs_post_f106 - trigger ./jgfs_post_manager:release_post106 - edit FHRGRP '107' - edit FHRLST 'f106' - edit FHR 'f106' - edit HR '106' - task jgfs_post_f107 - trigger ./jgfs_post_manager:release_post107 - edit FHRGRP '108' - edit FHRLST 'f107' - edit FHR 'f107' - edit HR '107' - task jgfs_post_f108 - trigger ./jgfs_post_manager:release_post108 - edit FHRGRP '109' - edit FHRLST 'f108' - edit FHR 'f108' - edit HR '108' - task jgfs_post_f109 - trigger ./jgfs_post_manager:release_post109 - edit FHRGRP '110' - edit FHRLST 'f109' - edit FHR 'f109' - edit HR '109' - task jgfs_post_f110 - trigger ./jgfs_post_manager:release_post110 - edit FHRGRP '111' - edit FHRLST 'f110' - edit FHR 'f110' - edit HR '110' - task jgfs_post_f111 - trigger ./jgfs_post_manager:release_post111 - edit FHRGRP '112' - edit FHRLST 'f111' - edit FHR 'f111' - edit HR '111' - task jgfs_post_f112 - trigger ./jgfs_post_manager:release_post112 - edit FHRGRP '113' - edit FHRLST 'f112' - edit FHR 'f112' - edit HR '112' - task jgfs_post_f113 - trigger ./jgfs_post_manager:release_post113 - edit FHRGRP '114' - edit FHRLST 'f113' - edit FHR 'f113' - edit HR '113' - task jgfs_post_f114 - trigger ./jgfs_post_manager:release_post114 - edit FHRGRP '115' - edit FHRLST 'f114' - edit FHR 'f114' - edit HR '114' - task jgfs_post_f115 - trigger ./jgfs_post_manager:release_post115 - edit FHRGRP '116' - edit FHRLST 'f115' - edit FHR 'f115' - edit HR '115' - task jgfs_post_f116 - trigger ./jgfs_post_manager:release_post116 - edit FHRGRP '117' - edit FHRLST 'f116' - edit FHR 'f116' - edit HR '116' - task jgfs_post_f117 - trigger ./jgfs_post_manager:release_post117 - edit FHRGRP '118' - edit FHRLST 'f117' - edit FHR 'f117' - edit HR '117' - task jgfs_post_f118 - trigger ./jgfs_post_manager:release_post118 - edit FHRGRP '119' - edit FHRLST 'f118' - edit FHR 'f118' - edit HR '118' - task jgfs_post_f119 - trigger ./jgfs_post_manager:release_post119 - edit FHRGRP '120' - edit FHRLST 'f119' - edit FHR 'f119' - edit HR '119' - task jgfs_post_f120 - trigger ./jgfs_post_manager:release_post120 - edit FHRGRP '121' - edit FHRLST 'f120' - edit FHR 'f120' - edit HR '120' - task jgfs_post_f123 - trigger ./jgfs_post_manager:release_post123 - edit FHRGRP '122' - edit FHRLST 'f123' - edit FHR 'f123' - edit HR '123' - task jgfs_post_f126 - trigger ./jgfs_post_manager:release_post126 - edit FHRGRP '123' - edit FHRLST 'f126' - edit FHR 'f126' - edit HR '126' - task jgfs_post_f129 - trigger ./jgfs_post_manager:release_post129 - edit FHRGRP '124' - edit FHRLST 'f129' - edit FHR 'f129' - edit HR '129' - task jgfs_post_f132 - trigger ./jgfs_post_manager:release_post132 - edit FHRGRP '125' - edit FHRLST 'f132' - edit FHR 'f132' - edit HR '132' - task jgfs_post_f135 - trigger ./jgfs_post_manager:release_post135 - edit FHRGRP '126' - edit FHRLST 'f135' - edit FHR 'f135' - edit HR '135' - task jgfs_post_f138 - trigger ./jgfs_post_manager:release_post138 - edit FHRGRP '127' - edit FHRLST 'f138' - edit FHR 'f138' - edit HR '138' - task jgfs_post_f141 - trigger ./jgfs_post_manager:release_post141 - edit FHRGRP '128' - edit FHRLST 'f141' - edit FHR 'f141' - edit HR '141' - task jgfs_post_f144 - trigger ./jgfs_post_manager:release_post144 - edit FHRGRP '129' - edit FHRLST 'f144' - edit FHR 'f144' - edit HR '144' - task jgfs_post_f147 - trigger ./jgfs_post_manager:release_post147 - edit FHRGRP '130' - edit FHRLST 'f147' - edit FHR 'f147' - edit HR '147' - task jgfs_post_f150 - trigger ./jgfs_post_manager:release_post150 - edit FHRGRP '131' - edit FHRLST 'f150' - edit FHR 'f150' - edit HR '150' - task jgfs_post_f153 - trigger ./jgfs_post_manager:release_post153 - edit FHRGRP '132' - edit FHRLST 'f153' - edit FHR 'f153' - edit HR '153' - task jgfs_post_f156 - trigger ./jgfs_post_manager:release_post156 - edit FHRGRP '133' - edit FHRLST 'f156' - edit FHR 'f156' - edit HR '156' - task jgfs_post_f159 - trigger ./jgfs_post_manager:release_post159 - edit FHRGRP '134' - edit FHRLST 'f159' - edit FHR 'f159' - edit HR '159' - task jgfs_post_f162 - trigger ./jgfs_post_manager:release_post162 - edit FHRGRP '135' - edit FHRLST 'f162' - edit FHR 'f162' - edit HR '162' - task jgfs_post_f165 - trigger ./jgfs_post_manager:release_post165 - edit FHRGRP '136' - edit FHRLST 'f165' - edit FHR 'f165' - edit HR '165' - task jgfs_post_f168 - trigger ./jgfs_post_manager:release_post168 - edit FHRGRP '137' - edit FHRLST 'f168' - edit FHR 'f168' - edit HR '168' - task jgfs_post_f171 - trigger ./jgfs_post_manager:release_post171 - edit FHRGRP '138' - edit FHRLST 'f171' - edit FHR 'f171' - edit HR '171' - task jgfs_post_f174 - trigger ./jgfs_post_manager:release_post174 - edit FHRGRP '139' - edit FHRLST 'f174' - edit FHR 'f174' - edit HR '174' - task jgfs_post_f177 - trigger ./jgfs_post_manager:release_post177 - edit FHRGRP '140' - edit FHRLST 'f177' - edit FHR 'f177' - edit HR '177' - task jgfs_post_f180 - trigger ./jgfs_post_manager:release_post180 - edit FHRGRP '141' - edit FHRLST 'f180' - edit FHR 'f180' - edit HR '180' - task jgfs_post_f183 - trigger ./jgfs_post_manager:release_post183 - edit FHRGRP '142' - edit FHRLST 'f183' - edit FHR 'f183' - edit HR '183' - task jgfs_post_f186 - trigger ./jgfs_post_manager:release_post186 - edit FHRGRP '143' - edit FHRLST 'f186' - edit FHR 'f186' - edit HR '186' - task jgfs_post_f189 - trigger ./jgfs_post_manager:release_post189 - edit FHRGRP '144' - edit FHRLST 'f189' - edit FHR 'f189' - edit HR '189' - task jgfs_post_f192 - trigger ./jgfs_post_manager:release_post192 - edit FHRGRP '145' - edit FHRLST 'f192' - edit FHR 'f192' - edit HR '192' - task jgfs_post_f195 - trigger ./jgfs_post_manager:release_post195 - edit FHRGRP '146' - edit FHRLST 'f195' - edit FHR 'f195' - edit HR '195' - task jgfs_post_f198 - trigger ./jgfs_post_manager:release_post198 - edit FHRGRP '147' - edit FHRLST 'f198' - edit FHR 'f198' - edit HR '198' - task jgfs_post_f201 - trigger ./jgfs_post_manager:release_post201 - edit FHRGRP '148' - edit FHRLST 'f201' - edit FHR 'f201' - edit HR '201' - task jgfs_post_f204 - trigger ./jgfs_post_manager:release_post204 - edit FHRGRP '149' - edit FHRLST 'f204' - edit FHR 'f204' - edit HR '204' - task jgfs_post_f207 - trigger ./jgfs_post_manager:release_post207 - edit FHRGRP '150' - edit FHRLST 'f207' - edit FHR 'f207' - edit HR '207' - task jgfs_post_f210 - trigger ./jgfs_post_manager:release_post210 - edit FHRGRP '151' - edit FHRLST 'f210' - edit FHR 'f210' - edit HR '210' - task jgfs_post_f213 - trigger ./jgfs_post_manager:release_post213 - edit FHRGRP '152' - edit FHRLST 'f213' - edit FHR 'f213' - edit HR '213' - task jgfs_post_f216 - trigger ./jgfs_post_manager:release_post216 - edit FHRGRP '153' - edit FHRLST 'f216' - edit FHR 'f216' - edit HR '216' - task jgfs_post_f219 - trigger ./jgfs_post_manager:release_post219 - edit FHRGRP '154' - edit FHRLST 'f219' - edit FHR 'f219' - edit HR '219' - task jgfs_post_f222 - trigger ./jgfs_post_manager:release_post222 - edit FHRGRP '155' - edit FHRLST 'f222' - edit FHR 'f222' - edit HR '222' - task jgfs_post_f225 - trigger ./jgfs_post_manager:release_post225 - edit FHRGRP '156' - edit FHRLST 'f225' - edit FHR 'f225' - edit HR '225' - task jgfs_post_f228 - trigger ./jgfs_post_manager:release_post228 - edit FHRGRP '157' - edit FHRLST 'f228' - edit FHR 'f228' - edit HR '228' - task jgfs_post_f231 - trigger ./jgfs_post_manager:release_post231 - edit FHRGRP '158' - edit FHRLST 'f231' - edit FHR 'f231' - edit HR '231' - task jgfs_post_f234 - trigger ./jgfs_post_manager:release_post234 - edit FHRGRP '159' - edit FHRLST 'f234' - edit FHR 'f234' - edit HR '234' - task jgfs_post_f237 - trigger ./jgfs_post_manager:release_post237 - edit FHRGRP '160' - edit FHRLST 'f237' - edit FHR 'f237' - edit HR '237' - task jgfs_post_f240 - trigger ./jgfs_post_manager:release_post240 - edit FHRGRP '161' - edit FHRLST 'f240' - edit FHR 'f240' - edit HR '240' - task jgfs_post_f243 - trigger ./jgfs_post_manager:release_post243 - edit FHRGRP '162' - edit FHRLST 'f243' - edit FHR 'f243' - edit HR '243' - task jgfs_post_f246 - trigger ./jgfs_post_manager:release_post246 - edit FHRGRP '163' - edit FHRLST 'f246' - edit FHR 'f246' - edit HR '246' - task jgfs_post_f249 - trigger ./jgfs_post_manager:release_post249 - edit FHRGRP '164' - edit FHRLST 'f249' - edit FHR 'f249' - edit HR '249' - task jgfs_post_f252 - trigger ./jgfs_post_manager:release_post252 - edit FHRGRP '165' - edit FHRLST 'f252' - edit FHR 'f252' - edit HR '252' - task jgfs_post_f255 - trigger ./jgfs_post_manager:release_post255 - edit FHRGRP '166' - edit FHRLST 'f255' - edit FHR 'f255' - edit HR '255' - task jgfs_post_f258 - trigger ./jgfs_post_manager:release_post258 - edit FHRGRP '167' - edit FHRLST 'f258' - edit FHR 'f258' - edit HR '258' - task jgfs_post_f261 - trigger ./jgfs_post_manager:release_post261 - edit FHRGRP '168' - edit FHRLST 'f261' - edit FHR 'f261' - edit HR '261' - task jgfs_post_f264 - trigger ./jgfs_post_manager:release_post264 - edit FHRGRP '169' - edit FHRLST 'f264' - edit FHR 'f264' - edit HR '264' - task jgfs_post_f267 - trigger ./jgfs_post_manager:release_post267 - edit FHRGRP '170' - edit FHRLST 'f267' - edit FHR 'f267' - edit HR '267' - task jgfs_post_f270 - trigger ./jgfs_post_manager:release_post270 - edit FHRGRP '171' - edit FHRLST 'f270' - edit FHR 'f270' - edit HR '270' - task jgfs_post_f273 - trigger ./jgfs_post_manager:release_post273 - edit FHRGRP '172' - edit FHRLST 'f273' - edit FHR 'f273' - edit HR '273' - task jgfs_post_f276 - trigger ./jgfs_post_manager:release_post276 - edit FHRGRP '173' - edit FHRLST 'f276' - edit FHR 'f276' - edit HR '276' - task jgfs_post_f279 - trigger ./jgfs_post_manager:release_post279 - edit FHRGRP '174' - edit FHRLST 'f279' - edit FHR 'f279' - edit HR '279' - task jgfs_post_f282 - trigger ./jgfs_post_manager:release_post282 - edit FHRGRP '175' - edit FHRLST 'f282' - edit FHR 'f282' - edit HR '282' - task jgfs_post_f285 - trigger ./jgfs_post_manager:release_post285 - edit FHRGRP '176' - edit FHRLST 'f285' - edit FHR 'f285' - edit HR '285' - task jgfs_post_f288 - trigger ./jgfs_post_manager:release_post288 - edit FHRGRP '177' - edit FHRLST 'f288' - edit FHR 'f288' - edit HR '288' - task jgfs_post_f291 - trigger ./jgfs_post_manager:release_post291 - edit FHRGRP '178' - edit FHRLST 'f291' - edit FHR 'f291' - edit HR '291' - task jgfs_post_f294 - trigger ./jgfs_post_manager:release_post294 - edit FHRGRP '179' - edit FHRLST 'f294' - edit FHR 'f294' - edit HR '294' - task jgfs_post_f297 - trigger ./jgfs_post_manager:release_post297 - edit FHRGRP '180' - edit FHRLST 'f297' - edit FHR 'f297' - edit HR '297' - task jgfs_post_f300 - trigger ./jgfs_post_manager:release_post300 - edit FHRGRP '181' - edit FHRLST 'f300' - edit FHR 'f300' - edit HR '300' - task jgfs_post_f303 - trigger ./jgfs_post_manager:release_post303 - edit FHRGRP '182' - edit FHRLST 'f303' - edit FHR 'f303' - edit HR '303' - task jgfs_post_f306 - trigger ./jgfs_post_manager:release_post306 - edit FHRGRP '183' - edit FHRLST 'f306' - edit FHR 'f306' - edit HR '306' - task jgfs_post_f309 - trigger ./jgfs_post_manager:release_post309 - edit FHRGRP '184' - edit FHRLST 'f309' - edit FHR 'f309' - edit HR '309' - task jgfs_post_f312 - trigger ./jgfs_post_manager:release_post312 - edit FHRGRP '185' - edit FHRLST 'f312' - edit FHR 'f312' - edit HR '312' - task jgfs_post_f315 - trigger ./jgfs_post_manager:release_post315 - edit FHRGRP '186' - edit FHRLST 'f315' - edit FHR 'f315' - edit HR '315' - task jgfs_post_f318 - trigger ./jgfs_post_manager:release_post318 - edit FHRGRP '187' - edit FHRLST 'f318' - edit FHR 'f318' - edit HR '318' - task jgfs_post_f321 - trigger ./jgfs_post_manager:release_post321 - edit FHRGRP '188' - edit FHRLST 'f321' - edit FHR 'f321' - edit HR '321' - task jgfs_post_f324 - trigger ./jgfs_post_manager:release_post324 - edit FHRGRP '189' - edit FHRLST 'f324' - edit FHR 'f324' - edit HR '324' - task jgfs_post_f327 - trigger ./jgfs_post_manager:release_post327 - edit FHRGRP '190' - edit FHRLST 'f327' - edit FHR 'f327' - edit HR '327' - task jgfs_post_f330 - trigger ./jgfs_post_manager:release_post330 - edit FHRGRP '191' - edit FHRLST 'f330' - edit FHR 'f330' - edit HR '330' - task jgfs_post_f333 - trigger ./jgfs_post_manager:release_post333 - edit FHRGRP '192' - edit FHRLST 'f333' - edit FHR 'f333' - edit HR '333' - task jgfs_post_f336 - trigger ./jgfs_post_manager:release_post336 - edit FHRGRP '193' - edit FHRLST 'f336' - edit FHR 'f336' - edit HR '336' - task jgfs_post_f339 - trigger ./jgfs_post_manager:release_post339 - edit FHRGRP '194' - edit FHRLST 'f339' - edit FHR 'f339' - edit HR '339' - task jgfs_post_f342 - trigger ./jgfs_post_manager:release_post342 - edit FHRGRP '195' - edit FHRLST 'f342' - edit FHR 'f342' - edit HR '342' - task jgfs_post_f345 - trigger ./jgfs_post_manager:release_post345 - edit FHRGRP '196' - edit FHRLST 'f345' - edit FHR 'f345' - edit HR '345' - task jgfs_post_f348 - trigger ./jgfs_post_manager:release_post348 - edit FHRGRP '197' - edit FHRLST 'f348' - edit FHR 'f348' - edit HR '348' - task jgfs_post_f351 - trigger ./jgfs_post_manager:release_post351 - edit FHRGRP '198' - edit FHRLST 'f351' - edit FHR 'f351' - edit HR '351' - task jgfs_post_f354 - trigger ./jgfs_post_manager:release_post354 - edit FHRGRP '199' - edit FHRLST 'f354' - edit FHR 'f354' - edit HR '354' - task jgfs_post_f357 - trigger ./jgfs_post_manager:release_post357 - edit FHRGRP '200' - edit FHRLST 'f357' - edit FHR 'f357' - edit HR '357' - task jgfs_post_f360 - trigger ./jgfs_post_manager:release_post360 - edit FHRGRP '201' - edit FHRLST 'f360' - edit FHR 'f360' - edit HR '360' - task jgfs_post_f363 - trigger ./jgfs_post_manager:release_post363 - edit FHRGRP '202' - edit FHRLST 'f363' - edit FHR 'f363' - edit HR '363' - task jgfs_post_f366 - trigger ./jgfs_post_manager:release_post366 - edit FHRGRP '203' - edit FHRLST 'f366' - edit FHR 'f366' - edit HR '366' - task jgfs_post_f369 - trigger ./jgfs_post_manager:release_post369 - edit FHRGRP '204' - edit FHRLST 'f369' - edit FHR 'f369' - edit HR '369' - task jgfs_post_f372 - trigger ./jgfs_post_manager:release_post372 - edit FHRGRP '205' - edit FHRLST 'f372' - edit FHR 'f372' - edit HR '372' - task jgfs_post_f375 - trigger ./jgfs_post_manager:release_post375 - edit FHRGRP '206' - edit FHRLST 'f375' - edit FHR 'f375' - edit HR '375' - task jgfs_post_f378 - trigger ./jgfs_post_manager:release_post378 - edit FHRGRP '207' - edit FHRLST 'f378' - edit FHR 'f378' - edit HR '378' - task jgfs_post_f381 - trigger ./jgfs_post_manager:release_post381 - edit FHRGRP '208' - edit FHRLST 'f381' - edit FHR 'f381' - edit HR '381' - task jgfs_post_f384 - trigger ./jgfs_post_manager:release_post384 - edit FHRGRP '209' - edit FHRLST 'f384' - edit FHR 'f384' - edit HR '384' - endfamily - family post_processing - task jgfs_wafs_gcip - trigger ../post/jgfs_post_f003 == complete - time 10:40 - family grib_wafs - task jgfs_wafs_f00 - trigger ../../post/jgfs_post_f000 == complete and ../../post/jgfs_post_f120 == complete and ../grib2_wafs/jgfs_wafs_grib2 == complete - edit FCSTHR '00' - task jgfs_wafs_f06 - trigger ../../post/jgfs_post_f006 == complete and ./jgfs_wafs_f00 == complete - edit FCSTHR '06' - task jgfs_wafs_f12 - trigger ../../post/jgfs_post_f012 == complete and ./jgfs_wafs_f06 == complete - edit FCSTHR '12' - task jgfs_wafs_f18 - trigger ../../post/jgfs_post_f018 == complete and ./jgfs_wafs_f12 == complete - edit FCSTHR '18' - task jgfs_wafs_f24 - trigger ../../post/jgfs_post_f024 == complete and ./jgfs_wafs_f18 == complete - edit FCSTHR '24' - task jgfs_wafs_f30 - trigger ../../post/jgfs_post_f030 == complete and ./jgfs_wafs_f24 == complete - edit FCSTHR '30' - task jgfs_wafs_f36 - trigger ../../post/jgfs_post_f036 == complete and ./jgfs_wafs_f30 == complete - edit FCSTHR '36' - task jgfs_wafs_f42 - trigger ../../post/jgfs_post_f042 == complete and ./jgfs_wafs_f36 == complete - edit FCSTHR '42' - task jgfs_wafs_f48 - trigger ../../post/jgfs_post_f048 == complete and ./jgfs_wafs_f42 == complete - edit FCSTHR '48' - task jgfs_wafs_f54 - trigger ../../post/jgfs_post_f054 == complete and ./jgfs_wafs_f48 == complete - edit FCSTHR '54' - task jgfs_wafs_f60 - trigger ../../post/jgfs_post_f060 == complete and ./jgfs_wafs_f54 == complete - edit FCSTHR '60' - task jgfs_wafs_f66 - trigger ../../post/jgfs_post_f066 == complete and ./jgfs_wafs_f60 == complete - edit FCSTHR '66' - task jgfs_wafs_f72 - trigger ../../post/jgfs_post_f072 == complete and ./jgfs_wafs_f66 == complete - edit FCSTHR '72' - task jgfs_wafs_f78 - trigger ../../post/jgfs_post_f078 == complete and ./jgfs_wafs_f72 == complete - edit FCSTHR '78' - task jgfs_wafs_f84 - trigger ../../post/jgfs_post_f084 == complete and ./jgfs_wafs_f78 == complete - edit FCSTHR '84' - task jgfs_wafs_f90 - trigger ../../post/jgfs_post_f090 == complete and ./jgfs_wafs_f84 == complete - edit FCSTHR '90' - task jgfs_wafs_f96 - trigger ../../post/jgfs_post_f096 == complete and ./jgfs_wafs_f90 == complete - edit FCSTHR '96' - task jgfs_wafs_f102 - trigger ../../post/jgfs_post_f102 == complete and ./jgfs_wafs_f96 == complete - edit FCSTHR '102' - task jgfs_wafs_f108 - trigger ../../post/jgfs_post_f108 == complete and ./jgfs_wafs_f102 == complete - edit FCSTHR '108' - task jgfs_wafs_f114 - trigger ../../post/jgfs_post_f114 == complete and ./jgfs_wafs_f108 == complete - edit FCSTHR '114' - task jgfs_wafs_f120 - trigger ../../post/jgfs_post_f120 == complete and ./jgfs_wafs_f114 == complete - edit FCSTHR '120' - endfamily - family bufr_sounding - task jgfs_postsnd - trigger ../../post/jgfs_post_manager:release_post000 - endfamily - family bulletins - task jgfs_fbwind - trigger ../../post/jgfs_post_f006 == complete and ../../post/jgfs_post_f012 == complete and ../../post/jgfs_post_f024 == complete - endfamily - family grib2_wafs - task jgfs_wafs_grib2 - trigger ../../post/jgfs_post_f000 == complete - task jgfs_wafs_blending - trigger ./jgfs_wafs_grib2 == complete - time 10:33 - endfamily - family awips_20km_1p0 - task jgfs_awips_f000 - trigger ../../post/jgfs_post_f000 == complete - edit FHRGRP '000' - edit FHRLST 'f000' - edit FCSTHR '000' - edit TRDRUN 'YES' - task jgfs_awips_f003 - trigger ../../post/jgfs_post_f003 == complete - edit FHRGRP '003' - edit FHRLST 'f003' - edit FCSTHR '003' - edit TRDRUN 'NO' - task jgfs_awips_f006 - trigger ../../post/jgfs_post_f006 == complete - edit FHRGRP '006' - edit FHRLST 'f006' - edit FCSTHR '006' - edit TRDRUN 'YES' - task jgfs_awips_f009 - trigger ../../post/jgfs_post_f009 == complete - edit FHRGRP '009' - edit FHRLST 'f009' - edit FCSTHR '009' - edit TRDRUN 'NO' - task jgfs_awips_f012 - trigger ../../post/jgfs_post_f012 == complete - edit FHRGRP '012' - edit FHRLST 'f012' - edit FCSTHR '012' - edit TRDRUN 'YES' - task jgfs_awips_f015 - trigger ../../post/jgfs_post_f015 == complete - edit FHRGRP '015' - edit FHRLST 'f015' - edit FCSTHR '015' - edit TRDRUN 'NO' - task jgfs_awips_f018 - trigger ../../post/jgfs_post_f018 == complete - edit FHRGRP '018' - edit FHRLST 'f018' - edit FCSTHR '018' - edit TRDRUN 'YES' - task jgfs_awips_f021 - trigger ../../post/jgfs_post_f021 == complete - edit FHRGRP '021' - edit FHRLST 'f021' - edit FCSTHR '021' - edit TRDRUN 'NO' - task jgfs_awips_f024 - trigger ../../post/jgfs_post_f024 == complete - edit FHRGRP '024' - edit FHRLST 'f024' - edit FCSTHR '024' - edit TRDRUN 'YES' - task jgfs_awips_f027 - trigger ../../post/jgfs_post_f027 == complete - edit FHRGRP '027' - edit FHRLST 'f027' - edit FCSTHR '027' - edit TRDRUN 'NO' - task jgfs_awips_f030 - trigger ../../post/jgfs_post_f030 == complete - edit FHRGRP '030' - edit FHRLST 'f030' - edit FCSTHR '030' - edit TRDRUN 'YES' - task jgfs_awips_f033 - trigger ../../post/jgfs_post_f033 == complete - edit FHRGRP '033' - edit FHRLST 'f033' - edit FCSTHR '033' - edit TRDRUN 'NO' - task jgfs_awips_f036 - trigger ../../post/jgfs_post_f036 == complete - edit FHRGRP '036' - edit FHRLST 'f036' - edit FCSTHR '036' - edit TRDRUN 'YES' - task jgfs_awips_f039 - trigger ../../post/jgfs_post_f039 == complete - edit FHRGRP '039' - edit FHRLST 'f039' - edit FCSTHR '039' - edit TRDRUN 'NO' - task jgfs_awips_f042 - trigger ../../post/jgfs_post_f042 == complete - edit FHRGRP '042' - edit FHRLST 'f042' - edit FCSTHR '042' - edit TRDRUN 'YES' - task jgfs_awips_f045 - trigger ../../post/jgfs_post_f045 == complete - edit FHRGRP '045' - edit FHRLST 'f045' - edit FCSTHR '045' - edit TRDRUN 'NO' - task jgfs_awips_f048 - trigger ../../post/jgfs_post_f048 == complete - edit FHRGRP '048' - edit FHRLST 'f048' - edit FCSTHR '048' - edit TRDRUN 'YES' - task jgfs_awips_f051 - trigger ../../post/jgfs_post_f051 == complete - edit FHRGRP '051' - edit FHRLST 'f051' - edit FCSTHR '051' - edit TRDRUN 'NO' - task jgfs_awips_f054 - trigger ../../post/jgfs_post_f054 == complete - edit FHRGRP '054' - edit FHRLST 'f054' - edit FCSTHR '054' - edit TRDRUN 'YES' - task jgfs_awips_f057 - trigger ../../post/jgfs_post_f057 == complete - edit FHRGRP '057' - edit FHRLST 'f057' - edit FCSTHR '057' - edit TRDRUN 'NO' - task jgfs_awips_f060 - trigger ../../post/jgfs_post_f060 == complete - edit FHRGRP '060' - edit FHRLST 'f060' - edit FCSTHR '060' - edit TRDRUN 'YES' - task jgfs_awips_f063 - trigger ../../post/jgfs_post_f063 == complete - edit FHRGRP '063' - edit FHRLST 'f063' - edit FCSTHR '063' - edit TRDRUN 'NO' - task jgfs_awips_f066 - trigger ../../post/jgfs_post_f066 == complete - edit FHRGRP '066' - edit FHRLST 'f066' - edit FCSTHR '066' - edit TRDRUN 'YES' - task jgfs_awips_f069 - trigger ../../post/jgfs_post_f069 == complete - edit FHRGRP '069' - edit FHRLST 'f069' - edit FCSTHR '069' - edit TRDRUN 'NO' - task jgfs_awips_f072 - trigger ../../post/jgfs_post_f072 == complete - edit FHRGRP '072' - edit FHRLST 'f072' - edit FCSTHR '072' - edit TRDRUN 'YES' - task jgfs_awips_f075 - trigger ../../post/jgfs_post_f075 == complete - edit FHRGRP '075' - edit FHRLST 'f075' - edit FCSTHR '075' - edit TRDRUN 'NO' - task jgfs_awips_f078 - trigger ../../post/jgfs_post_f078 == complete - edit FHRGRP '078' - edit FHRLST 'f078' - edit FCSTHR '078' - edit TRDRUN 'YES' - task jgfs_awips_f081 - trigger ../../post/jgfs_post_f081 == complete - edit FHRGRP '081' - edit FHRLST 'f081' - edit FCSTHR '081' - edit TRDRUN 'NO' - task jgfs_awips_f084 - trigger ../../post/jgfs_post_f084 == complete - edit FHRGRP '084' - edit FHRLST 'f084' - edit FCSTHR '084' - edit TRDRUN 'YES' - task jgfs_awips_f090 - trigger ../../post/jgfs_post_f090 == complete - edit FHRGRP '090' - edit FHRLST 'f090' - edit FCSTHR '090' - edit TRDRUN 'YES' - task jgfs_awips_f096 - trigger ../../post/jgfs_post_f096 == complete - edit FHRGRP '096' - edit FHRLST 'f096' - edit FCSTHR '096' - edit TRDRUN 'YES' - task jgfs_awips_f102 - trigger ../../post/jgfs_post_f102 == complete - edit FHRGRP '102' - edit FHRLST 'f102' - edit FCSTHR '102' - edit TRDRUN 'YES' - task jgfs_awips_f108 - trigger ../../post/jgfs_post_f108 == complete - edit FHRGRP '108' - edit FHRLST 'f108' - edit FCSTHR '108' - edit TRDRUN 'YES' - task jgfs_awips_f114 - trigger ../../post/jgfs_post_f114 == complete - edit FHRGRP '114' - edit FHRLST 'f114' - edit FCSTHR '114' - edit TRDRUN 'YES' - task jgfs_awips_f120 - trigger ../../post/jgfs_post_f120 == complete - edit FHRGRP '120' - edit FHRLST 'f120' - edit FCSTHR '120' - edit TRDRUN 'YES' - task jgfs_awips_f126 - trigger ../../post/jgfs_post_f126 == complete - edit FHRGRP '126' - edit FHRLST 'f126' - edit FCSTHR '126' - edit TRDRUN 'YES' - task jgfs_awips_f132 - trigger ../../post/jgfs_post_f132 == complete - edit FHRGRP '132' - edit FHRLST 'f132' - edit FCSTHR '132' - edit TRDRUN 'YES' - task jgfs_awips_f138 - trigger ../../post/jgfs_post_f138 == complete - edit FHRGRP '138' - edit FHRLST 'f138' - edit FCSTHR '138' - edit TRDRUN 'YES' - task jgfs_awips_f144 - trigger ../../post/jgfs_post_f144 == complete - edit FHRGRP '144' - edit FHRLST 'f144' - edit FCSTHR '144' - edit TRDRUN 'YES' - task jgfs_awips_f150 - trigger ../../post/jgfs_post_f150 == complete - edit FHRGRP '150' - edit FHRLST 'f150' - edit FCSTHR '150' - edit TRDRUN 'YES' - task jgfs_awips_f156 - trigger ../../post/jgfs_post_f156 == complete - edit FHRGRP '156' - edit FHRLST 'f156' - edit FCSTHR '156' - edit TRDRUN 'YES' - task jgfs_awips_f162 - trigger ../../post/jgfs_post_f162 == complete - edit FHRGRP '162' - edit FHRLST 'f162' - edit FCSTHR '162' - edit TRDRUN 'YES' - task jgfs_awips_f168 - trigger ../../post/jgfs_post_f168 == complete - edit FHRGRP '168' - edit FHRLST 'f168' - edit FCSTHR '168' - edit TRDRUN 'YES' - task jgfs_awips_f174 - trigger ../../post/jgfs_post_f174 == complete - edit FHRGRP '174' - edit FHRLST 'f174' - edit FCSTHR '174' - edit TRDRUN 'YES' - task jgfs_awips_f180 - trigger ../../post/jgfs_post_f180 == complete - edit FHRGRP '180' - edit FHRLST 'f180' - edit FCSTHR '180' - edit TRDRUN 'YES' - task jgfs_awips_f186 - trigger ../../post/jgfs_post_f186 == complete - edit FHRGRP '186' - edit FHRLST 'f186' - edit FCSTHR '186' - edit TRDRUN 'YES' - task jgfs_awips_f192 - trigger ../../post/jgfs_post_f192 == complete - edit FHRGRP '192' - edit FHRLST 'f192' - edit FCSTHR '192' - edit TRDRUN 'YES' - task jgfs_awips_f198 - trigger ../../post/jgfs_post_f198 == complete - edit FHRGRP '198' - edit FHRLST 'f198' - edit FCSTHR '198' - edit TRDRUN 'YES' - task jgfs_awips_f204 - trigger ../../post/jgfs_post_f204 == complete - edit FHRGRP '204' - edit FHRLST 'f204' - edit FCSTHR '204' - edit TRDRUN 'YES' - task jgfs_awips_f210 - trigger ../../post/jgfs_post_f210 == complete - edit FHRGRP '210' - edit FHRLST 'f210' - edit FCSTHR '210' - edit TRDRUN 'YES' - task jgfs_awips_f216 - trigger ../../post/jgfs_post_f216 == complete - edit FHRGRP '216' - edit FHRLST 'f216' - edit FCSTHR '216' - edit TRDRUN 'YES' - task jgfs_awips_f222 - trigger ../../post/jgfs_post_f222 == complete - edit FHRGRP '222' - edit FHRLST 'f222' - edit FCSTHR '222' - edit TRDRUN 'YES' - task jgfs_awips_f228 - trigger ../../post/jgfs_post_f228 == complete - edit FHRGRP '228' - edit FHRLST 'f228' - edit FCSTHR '228' - edit TRDRUN 'YES' - task jgfs_awips_f234 - trigger ../../post/jgfs_post_f234 == complete - edit FHRGRP '234' - edit FHRLST 'f234' - edit FCSTHR '234' - edit TRDRUN 'YES' - task jgfs_awips_f240 - trigger ../../post/jgfs_post_f240 == complete - edit FHRGRP '240' - edit FHRLST 'f240' - edit FCSTHR '240' - edit TRDRUN 'YES' - endfamily - family awips_g2 - task jgfs_awips_g2_f000 - trigger ../../post/jgfs_post_f000 == complete - edit FHRGRP '000' - edit FHRLST 'f000' - edit FCSTHR '000' - edit TRDRUN 'YES' - task jgfs_awips_g2_f006 - trigger ../../post/jgfs_post_f006 == complete - edit FHRGRP '006' - edit FHRLST 'f006' - edit FCSTHR '006' - edit TRDRUN 'YES' - task jgfs_awips_g2_f012 - trigger ../../post/jgfs_post_f012 == complete - edit FHRGRP '012' - edit FHRLST 'f012' - edit FCSTHR '012' - edit TRDRUN 'YES' - task jgfs_awips_g2_f018 - trigger ../../post/jgfs_post_f018 == complete - edit FHRGRP '018' - edit FHRLST 'f018' - edit FCSTHR '018' - edit TRDRUN 'YES' - task jgfs_awips_g2_f024 - trigger ../../post/jgfs_post_f024 == complete - edit FHRGRP '024' - edit FHRLST 'f024' - edit FCSTHR '024' - edit TRDRUN 'YES' - task jgfs_awips_g2_f030 - trigger ../../post/jgfs_post_f030 == complete - edit FHRGRP '030' - edit FHRLST 'f030' - edit FCSTHR '030' - edit TRDRUN 'YES' - task jgfs_awips_g2_f036 - trigger ../../post/jgfs_post_f036 == complete - edit FHRGRP '036' - edit FHRLST 'f036' - edit FCSTHR '036' - edit TRDRUN 'YES' - task jgfs_awips_g2_f042 - trigger ../../post/jgfs_post_f042 == complete - edit FHRGRP '042' - edit FHRLST 'f042' - edit FCSTHR '042' - edit TRDRUN 'YES' - task jgfs_awips_g2_f048 - trigger ../../post/jgfs_post_f048 == complete - edit FHRGRP '048' - edit FHRLST 'f048' - edit FCSTHR '048' - edit TRDRUN 'YES' - task jgfs_awips_g2_f054 - trigger ../../post/jgfs_post_f054 == complete - edit FHRGRP '054' - edit FHRLST 'f054' - edit FCSTHR '054' - edit TRDRUN 'YES' - task jgfs_awips_g2_f060 - trigger ../../post/jgfs_post_f060 == complete - edit FHRGRP '060' - edit FHRLST 'f060' - edit FCSTHR '060' - edit TRDRUN 'YES' - task jgfs_awips_g2_f066 - trigger ../../post/jgfs_post_f066 == complete - edit FHRGRP '066' - edit FHRLST 'f066' - edit FCSTHR '066' - edit TRDRUN 'YES' - task jgfs_awips_g2_f072 - trigger ../../post/jgfs_post_f072 == complete - edit FHRGRP '072' - edit FHRLST 'f072' - edit FCSTHR '072' - edit TRDRUN 'YES' - task jgfs_awips_g2_f078 - trigger ../../post/jgfs_post_f078 == complete - edit FHRGRP '078' - edit FHRLST 'f078' - edit FCSTHR '078' - edit TRDRUN 'YES' - task jgfs_awips_g2_f084 - trigger ../../post/jgfs_post_f084 == complete - edit FHRGRP '084' - edit FHRLST 'f084' - edit FCSTHR '084' - edit TRDRUN 'YES' - task jgfs_awips_g2_f090 - trigger ../../post/jgfs_post_f090 == complete - edit FHRGRP '090' - edit FHRLST 'f090' - edit FCSTHR '090' - edit TRDRUN 'YES' - task jgfs_awips_g2_f096 - trigger ../../post/jgfs_post_f096 == complete - edit FHRGRP '096' - edit FHRLST 'f096' - edit FCSTHR '096' - edit TRDRUN 'YES' - task jgfs_awips_g2_f102 - trigger ../../post/jgfs_post_f102 == complete - edit FHRGRP '102' - edit FHRLST 'f102' - edit FCSTHR '102' - edit TRDRUN 'YES' - task jgfs_awips_g2_f108 - trigger ../../post/jgfs_post_f108 == complete - edit FHRGRP '108' - edit FHRLST 'f108' - edit FCSTHR '108' - edit TRDRUN 'YES' - task jgfs_awips_g2_f114 - trigger ../../post/jgfs_post_f114 == complete - edit FHRGRP '114' - edit FHRLST 'f114' - edit FCSTHR '114' - edit TRDRUN 'YES' - task jgfs_awips_g2_f120 - trigger ../../post/jgfs_post_f120 == complete - edit FHRGRP '120' - edit FHRLST 'f120' - edit FCSTHR '120' - edit TRDRUN 'YES' - task jgfs_awips_g2_f126 - trigger ../../post/jgfs_post_f126 == complete - edit FHRGRP '126' - edit FHRLST 'f126' - edit FCSTHR '126' - edit TRDRUN 'YES' - task jgfs_awips_g2_f132 - trigger ../../post/jgfs_post_f132 == complete - edit FHRGRP '132' - edit FHRLST 'f132' - edit FCSTHR '132' - edit TRDRUN 'YES' - task jgfs_awips_g2_f138 - trigger ../../post/jgfs_post_f138 == complete - edit FHRGRP '138' - edit FHRLST 'f138' - edit FCSTHR '138' - edit TRDRUN 'YES' - task jgfs_awips_g2_f144 - trigger ../../post/jgfs_post_f144 == complete - edit FHRGRP '144' - edit FHRLST 'f144' - edit FCSTHR '144' - edit TRDRUN 'YES' - task jgfs_awips_g2_f150 - trigger ../../post/jgfs_post_f150 == complete - edit FHRGRP '150' - edit FHRLST 'f150' - edit FCSTHR '150' - edit TRDRUN 'YES' - task jgfs_awips_g2_f156 - trigger ../../post/jgfs_post_f156 == complete - edit FHRGRP '156' - edit FHRLST 'f156' - edit FCSTHR '156' - edit TRDRUN 'YES' - task jgfs_awips_g2_f162 - trigger ../../post/jgfs_post_f162 == complete - edit FHRGRP '162' - edit FHRLST 'f162' - edit FCSTHR '162' - edit TRDRUN 'YES' - task jgfs_awips_g2_f168 - trigger ../../post/jgfs_post_f168 == complete - edit FHRGRP '168' - edit FHRLST 'f168' - edit FCSTHR '168' - edit TRDRUN 'YES' - task jgfs_awips_g2_f174 - trigger ../../post/jgfs_post_f174 == complete - edit FHRGRP '174' - edit FHRLST 'f174' - edit FCSTHR '174' - edit TRDRUN 'YES' - task jgfs_awips_g2_f180 - trigger ../../post/jgfs_post_f180 == complete - edit FHRGRP '180' - edit FHRLST 'f180' - edit FCSTHR '180' - edit TRDRUN 'YES' - task jgfs_awips_g2_f186 - trigger ../../post/jgfs_post_f186 == complete - edit FHRGRP '186' - edit FHRLST 'f186' - edit FCSTHR '186' - edit TRDRUN 'YES' - task jgfs_awips_g2_f192 - trigger ../../post/jgfs_post_f192 == complete - edit FHRGRP '192' - edit FHRLST 'f192' - edit FCSTHR '192' - edit TRDRUN 'YES' - task jgfs_awips_g2_f198 - trigger ../../post/jgfs_post_f198 == complete - edit FHRGRP '198' - edit FHRLST 'f198' - edit FCSTHR '198' - edit TRDRUN 'YES' - task jgfs_awips_g2_f204 - trigger ../../post/jgfs_post_f204 == complete - edit FHRGRP '204' - edit FHRLST 'f204' - edit FCSTHR '204' - edit TRDRUN 'YES' - task jgfs_awips_g2_f210 - trigger ../../post/jgfs_post_f210 == complete - edit FHRGRP '210' - edit FHRLST 'f210' - edit FCSTHR '210' - edit TRDRUN 'YES' - task jgfs_awips_g2_f216 - trigger ../../post/jgfs_post_f216 == complete - edit FHRGRP '216' - edit FHRLST 'f216' - edit FCSTHR '216' - edit TRDRUN 'YES' - task jgfs_awips_g2_f222 - trigger ../../post/jgfs_post_f222 == complete - edit FHRGRP '222' - edit FHRLST 'f222' - edit FCSTHR '222' - edit TRDRUN 'YES' - task jgfs_awips_g2_f228 - trigger ../../post/jgfs_post_f228 == complete - edit FHRGRP '228' - edit FHRLST 'f228' - edit FCSTHR '228' - edit TRDRUN 'YES' - task jgfs_awips_g2_f234 - trigger ../../post/jgfs_post_f234 == complete - edit FHRGRP '234' - edit FHRLST 'f234' - edit FCSTHR '234' - edit TRDRUN 'YES' - task jgfs_awips_g2_f240 - trigger ../../post/jgfs_post_f240 == complete - edit FHRGRP '240' - edit FHRLST 'f240' - edit FCSTHR '240' - edit TRDRUN 'YES' - endfamily - endfamily - family mos - edit ECF_FILES '/ecf/ecfnets/scripts/gfs/mos' - edit PROJ 'GFS-%PROJENVIR%' - edit COM '/gpfs/hps/nco/ops/com' - edit QUEUESERV 'prod_transfer' - edit MODULES 'module load cfp-intel-sandybridge/1.1.0 grib_util gempak/6.32.0' - edit QUEUE 'prod' - family prep - task jgfsmos_stn_prep - trigger /prod06/gfs/post/jgfs_post_f096 == complete - edit NTASK '3' - edit PTILE '3' - edit OMP_NUM_THREADS '1' - edit NODES '1' - task jgfsmos_ext_stn_prep - trigger /prod06/gfs/post == complete - edit NTASK '2' - edit PTILE '2' - edit OMP_NUM_THREADS '1' - edit NODES '1' - endfamily - family forecast - task jgfsmos_stn_fcst - trigger ../prep/jgfsmos_stn_prep == complete - edit NTASK '5' - edit PTILE '5' - edit OMP_NUM_THREADS '1' - edit NODES '1' - endfamily - family prdgen - task jgfsmos_stn_prdgen - trigger ../forecast/jgfsmos_stn_fcst == complete - edit NTASK '1' - edit PTILE '1' - edit OMP_NUM_THREADS '1' - edit NODES '1' - task jgfsmos_ext_stn_prdgen - trigger jgfsmos_stn_prdgen == complete - edit NTASK '1' - edit PTILE '1' - edit OMP_NUM_THREADS '1' - edit NODES '1' - endfamily - family gempak - task jgfs_gempak_mdl - trigger ../prdgen == complete - endfamily - endfamily - family gempak - task jgfs_gempak_ncdc_upapgif - trigger ./jgfs_gempak == active or ./jgfs_gempak == complete - task jgfs_gempak - trigger ../jgfs_analysis eq complete - task jgfs_gempak_meta - trigger ../jgfs_analysis == complete - task jgfs_pgrb2_spec_gempak - trigger ./jgfs_npoess_pgrb2_0p5deg == complete - task jgfs_npoess_pgrb2_0p5deg - trigger ../post/jgfs_post_anl eq active or ../post/jgfs_post_anl == complete - endfamily - endfamily - diff --git a/ecflow/ecf/defs/gfs_12.def b/ecflow/ecf/defs/gfs_12.def deleted file mode 100644 index d12c47968e..0000000000 --- a/ecflow/ecf/defs/gfs_12.def +++ /dev/null @@ -1,2298 +0,0 @@ - family gfs - edit CYC '12' - edit ECF_FILES '/ecf/ecfnets/scripts/gfs_FV3' - edit PROJ 'GFS-OPS' - edit NET 'gfs' - edit RUN 'gfs' - edit COM '/gpfs/dell1/nco/ops/com' - edit QUEUESHARED 'prod_shared' - edit QUEUESERV 'prod_transfer' - edit QUEUE 'prod' - family dump - task jgfs_tropcy_qc_reloc - event 1 jtwc_bull_email - time 14:41 - task jgfs_dump - event 1 release_sfcprep - time 14:47 - task jgfs_dump_post - trigger jgfs_dump eq complete - event 1 release_gfs12_dump_alert - task jgfs_dump_alert - trigger jgfs_dump_post:release_gfs12_dump_alert - task jmodel_realtime_gfs - trigger jgfs_dump_alert eq complete - endfamily - family prep - task jgfs_emcsfc_sfc_prep - trigger ../dump/jgfs_dump:release_sfcprep - task jgfs_prep - trigger ../dump/jgfs_dump eq complete and ../dump/jgfs_tropcy_qc_reloc eq complete - task jgfs_prep_post - trigger jgfs_prep eq complete and ../jgfs_analysis eq complete - endfamily - task jgfs_analysis - trigger prep/jgfs_prep eq complete and prep/jgfs_emcsfc_sfc_prep == complete - event 1 release_fcst - task jgfs_vminmon - trigger jgfs_analysis == complete - family forecast - task jgfs_forecast_high - trigger ../jgfs_analysis:release_fcst - endfamily - family post - task jgfs_post_manager - trigger ../jgfs_analysis eq complete - event 1 release_postanl - event 2 release_post000 - event 3 release_post001 - event 4 release_post002 - event 5 release_post003 - event 6 release_post004 - event 7 release_post005 - event 8 release_post006 - event 9 release_post007 - event 10 release_post008 - event 11 release_post009 - event 12 release_post010 - event 13 release_post011 - event 14 release_post012 - event 15 release_post013 - event 16 release_post014 - event 17 release_post015 - event 18 release_post016 - event 19 release_post017 - event 20 release_post018 - event 21 release_post019 - event 22 release_post020 - event 23 release_post021 - event 24 release_post022 - event 25 release_post023 - event 26 release_post024 - event 27 release_post025 - event 28 release_post026 - event 29 release_post027 - event 30 release_post028 - event 31 release_post029 - event 32 release_post030 - event 33 release_post031 - event 34 release_post032 - event 35 release_post033 - event 36 release_post034 - event 37 release_post035 - event 38 release_post036 - event 39 release_post037 - event 40 release_post038 - event 41 release_post039 - event 42 release_post040 - event 43 release_post041 - event 44 release_post042 - event 45 release_post043 - event 46 release_post044 - event 47 release_post045 - event 48 release_post046 - event 49 release_post047 - event 50 release_post048 - event 51 release_post049 - event 52 release_post050 - event 53 release_post051 - event 54 release_post052 - event 55 release_post053 - event 56 release_post054 - event 57 release_post055 - event 58 release_post056 - event 59 release_post057 - event 60 release_post058 - event 61 release_post059 - event 62 release_post060 - event 63 release_post061 - event 64 release_post062 - event 65 release_post063 - event 66 release_post064 - event 67 release_post065 - event 68 release_post066 - event 69 release_post067 - event 70 release_post068 - event 71 release_post069 - event 72 release_post070 - event 73 release_post071 - event 74 release_post072 - event 75 release_post073 - event 76 release_post074 - event 77 release_post075 - event 78 release_post076 - event 79 release_post077 - event 80 release_post078 - event 81 release_post079 - event 82 release_post080 - event 83 release_post081 - event 84 release_post082 - event 85 release_post083 - event 86 release_post084 - event 87 release_post085 - event 88 release_post086 - event 89 release_post087 - event 90 release_post088 - event 91 release_post089 - event 92 release_post090 - event 93 release_post091 - event 94 release_post092 - event 95 release_post093 - event 96 release_post094 - event 97 release_post095 - event 98 release_post096 - event 99 release_post097 - event 100 release_post098 - event 101 release_post099 - event 102 release_post100 - event 103 release_post101 - event 104 release_post102 - event 105 release_post103 - event 106 release_post104 - event 107 release_post105 - event 108 release_post106 - event 109 release_post107 - event 110 release_post108 - event 111 release_post109 - event 112 release_post110 - event 113 release_post111 - event 114 release_post112 - event 115 release_post113 - event 116 release_post114 - event 117 release_post115 - event 118 release_post116 - event 119 release_post117 - event 120 release_post118 - event 121 release_post119 - event 122 release_post120 - event 123 release_post123 - event 124 release_post126 - event 125 release_post129 - event 126 release_post132 - event 127 release_post135 - event 128 release_post138 - event 129 release_post141 - event 130 release_post144 - event 131 release_post147 - event 132 release_post150 - event 133 release_post153 - event 134 release_post156 - event 135 release_post159 - event 136 release_post162 - event 137 release_post165 - event 138 release_post168 - event 139 release_post171 - event 140 release_post174 - event 141 release_post177 - event 142 release_post180 - event 143 release_post183 - event 144 release_post186 - event 145 release_post189 - event 146 release_post192 - event 147 release_post195 - event 148 release_post198 - event 149 release_post201 - event 150 release_post204 - event 151 release_post207 - event 152 release_post210 - event 153 release_post213 - event 154 release_post216 - event 155 release_post219 - event 156 release_post222 - event 157 release_post225 - event 158 release_post228 - event 159 release_post231 - event 160 release_post234 - event 161 release_post237 - event 162 release_post240 - event 163 release_post243 - event 164 release_post246 - event 165 release_post249 - event 166 release_post252 - event 167 release_post255 - event 168 release_post258 - event 169 release_post261 - event 170 release_post264 - event 171 release_post267 - event 172 release_post270 - event 173 release_post273 - event 174 release_post276 - event 175 release_post279 - event 176 release_post282 - event 177 release_post285 - event 178 release_post288 - event 179 release_post291 - event 180 release_post294 - event 181 release_post297 - event 182 release_post300 - event 183 release_post303 - event 184 release_post306 - event 185 release_post309 - event 186 release_post312 - event 187 release_post315 - event 188 release_post318 - event 189 release_post321 - event 190 release_post324 - event 191 release_post327 - event 192 release_post330 - event 193 release_post333 - event 194 release_post336 - event 195 release_post339 - event 196 release_post342 - event 197 release_post345 - event 198 release_post348 - event 199 release_post351 - event 200 release_post354 - event 201 release_post357 - event 202 release_post360 - event 203 release_post363 - event 204 release_post366 - event 205 release_post369 - event 206 release_post372 - event 207 release_post375 - event 208 release_post378 - event 209 release_post381 - event 210 release_post384 - task jgfs_post_anl - trigger ./jgfs_post_manager:release_postanl - edit FHRGRP '000' - edit FHRLST 'anl' - edit HR 'anl' - edit FHR 'anl' - event 1 release_postanl - task jgfs_post_f000 - trigger ./jgfs_post_manager:release_post000 - edit FHRGRP '001' - edit FHRLST 'f000' - edit FHR 'f000' - edit HR '000' - task jgfs_post_f001 - trigger ./jgfs_post_manager:release_post001 - edit FHRGRP '002' - edit FHRLST 'f001' - edit FHR 'f001' - edit HR '001' - task jgfs_post_f002 - trigger ./jgfs_post_manager:release_post002 - edit FHRGRP '003' - edit FHRLST 'f002' - edit FHR 'f002' - edit HR '002' - task jgfs_post_f003 - trigger ./jgfs_post_manager:release_post003 - edit FHRGRP '004' - edit FHRLST 'f003' - edit FHR 'f003' - edit HR '003' - task jgfs_post_f004 - trigger ./jgfs_post_manager:release_post004 - edit FHRGRP '005' - edit FHRLST 'f004' - edit FHR 'f004' - edit HR '004' - task jgfs_post_f005 - trigger ./jgfs_post_manager:release_post005 - edit FHRGRP '006' - edit FHRLST 'f005' - edit FHR 'f005' - edit HR '005' - task jgfs_post_f006 - trigger ./jgfs_post_manager:release_post006 - edit FHRGRP '007' - edit FHRLST 'f006' - edit FHR 'f006' - edit HR '006' - task jgfs_post_f007 - trigger ./jgfs_post_manager:release_post007 - edit FHRGRP '008' - edit FHRLST 'f007' - edit FHR 'f007' - edit HR '007' - task jgfs_post_f008 - trigger ./jgfs_post_manager:release_post008 - edit FHRGRP '009' - edit FHRLST 'f008' - edit FHR 'f008' - edit HR '008' - task jgfs_post_f009 - trigger ./jgfs_post_manager:release_post009 - edit FHRGRP '010' - edit FHRLST 'f009' - edit FHR 'f009' - edit HR '009' - task jgfs_post_f010 - trigger ./jgfs_post_manager:release_post010 - edit FHRGRP '011' - edit FHRLST 'f010' - edit FHR 'f010' - edit HR '010' - task jgfs_post_f011 - trigger ./jgfs_post_manager:release_post011 - edit FHRGRP '012' - edit FHRLST 'f011' - edit FHR 'f011' - edit HR '011' - task jgfs_post_f012 - trigger ./jgfs_post_manager:release_post012 - edit FHRGRP '013' - edit FHRLST 'f012' - edit FHR 'f012' - edit HR '012' - task jgfs_post_f013 - trigger ./jgfs_post_manager:release_post013 - edit FHRGRP '014' - edit FHRLST 'f013' - edit FHR 'f013' - edit HR '013' - task jgfs_post_f014 - trigger ./jgfs_post_manager:release_post014 - edit FHRGRP '015' - edit FHRLST 'f014' - edit FHR 'f014' - edit HR '014' - task jgfs_post_f015 - trigger ./jgfs_post_manager:release_post015 - edit FHRGRP '016' - edit FHRLST 'f015' - edit FHR 'f015' - edit HR '015' - task jgfs_post_f016 - trigger ./jgfs_post_manager:release_post016 - edit FHRGRP '017' - edit FHRLST 'f016' - edit FHR 'f016' - edit HR '016' - task jgfs_post_f017 - trigger ./jgfs_post_manager:release_post017 - edit FHRGRP '018' - edit FHRLST 'f017' - edit FHR 'f017' - edit HR '017' - task jgfs_post_f018 - trigger ./jgfs_post_manager:release_post018 - edit FHRGRP '019' - edit FHRLST 'f018' - edit FHR 'f018' - edit HR '018' - task jgfs_post_f019 - trigger ./jgfs_post_manager:release_post019 - edit FHRGRP '020' - edit FHRLST 'f019' - edit FHR 'f019' - edit HR '019' - task jgfs_post_f020 - trigger ./jgfs_post_manager:release_post020 - edit FHRGRP '021' - edit FHRLST 'f020' - edit FHR 'f020' - edit HR '020' - task jgfs_post_f021 - trigger ./jgfs_post_manager:release_post021 - edit FHRGRP '022' - edit FHRLST 'f021' - edit FHR 'f021' - edit HR '021' - task jgfs_post_f022 - trigger ./jgfs_post_manager:release_post022 - edit FHRGRP '023' - edit FHRLST 'f022' - edit FHR 'f022' - edit HR '022' - task jgfs_post_f023 - trigger ./jgfs_post_manager:release_post023 - edit FHRGRP '024' - edit FHRLST 'f023' - edit FHR 'f023' - edit HR '023' - task jgfs_post_f024 - trigger ./jgfs_post_manager:release_post024 - edit FHRGRP '025' - edit FHRLST 'f024' - edit FHR 'f024' - edit HR '024' - task jgfs_post_f025 - trigger ./jgfs_post_manager:release_post025 - edit FHRGRP '026' - edit FHRLST 'f025' - edit FHR 'f025' - edit HR '025' - task jgfs_post_f026 - trigger ./jgfs_post_manager:release_post026 - edit FHRGRP '027' - edit FHRLST 'f026' - edit FHR 'f026' - edit HR '026' - task jgfs_post_f027 - trigger ./jgfs_post_manager:release_post027 - edit FHRGRP '028' - edit FHRLST 'f027' - edit FHR 'f027' - edit HR '027' - task jgfs_post_f028 - trigger ./jgfs_post_manager:release_post028 - edit FHRGRP '029' - edit FHRLST 'f028' - edit FHR 'f028' - edit HR '028' - task jgfs_post_f029 - trigger ./jgfs_post_manager:release_post029 - edit FHRGRP '030' - edit FHRLST 'f029' - edit FHR 'f029' - edit HR '029' - task jgfs_post_f030 - trigger ./jgfs_post_manager:release_post030 - edit FHRGRP '031' - edit FHRLST 'f030' - edit FHR 'f030' - edit HR '030' - task jgfs_post_f031 - trigger ./jgfs_post_manager:release_post031 - edit FHRGRP '032' - edit FHRLST 'f031' - edit FHR 'f031' - edit HR '031' - task jgfs_post_f032 - trigger ./jgfs_post_manager:release_post032 - edit FHRGRP '033' - edit FHRLST 'f032' - edit FHR 'f032' - edit HR '032' - task jgfs_post_f033 - trigger ./jgfs_post_manager:release_post033 - edit FHRGRP '034' - edit FHRLST 'f033' - edit FHR 'f033' - edit HR '033' - task jgfs_post_f034 - trigger ./jgfs_post_manager:release_post034 - edit FHRGRP '035' - edit FHRLST 'f034' - edit FHR 'f034' - edit HR '034' - task jgfs_post_f035 - trigger ./jgfs_post_manager:release_post035 - edit FHRGRP '036' - edit FHRLST 'f035' - edit FHR 'f035' - edit HR '035' - task jgfs_post_f036 - trigger ./jgfs_post_manager:release_post036 - edit FHRGRP '037' - edit FHRLST 'f036' - edit FHR 'f036' - edit HR '036' - task jgfs_post_f037 - trigger ./jgfs_post_manager:release_post037 - edit FHRGRP '038' - edit FHRLST 'f037' - edit FHR 'f037' - edit HR '037' - task jgfs_post_f038 - trigger ./jgfs_post_manager:release_post038 - edit FHRGRP '039' - edit FHRLST 'f038' - edit FHR 'f038' - edit HR '038' - task jgfs_post_f039 - trigger ./jgfs_post_manager:release_post039 - edit FHRGRP '040' - edit FHRLST 'f039' - edit FHR 'f039' - edit HR '039' - task jgfs_post_f040 - trigger ./jgfs_post_manager:release_post040 - edit FHRGRP '041' - edit FHRLST 'f040' - edit FHR 'f040' - edit HR '040' - task jgfs_post_f041 - trigger ./jgfs_post_manager:release_post041 - edit FHRGRP '042' - edit FHRLST 'f041' - edit FHR 'f041' - edit HR '041' - task jgfs_post_f042 - trigger ./jgfs_post_manager:release_post042 - edit FHRGRP '043' - edit FHRLST 'f042' - edit FHR 'f042' - edit HR '042' - task jgfs_post_f043 - trigger ./jgfs_post_manager:release_post043 - edit FHRGRP '044' - edit FHRLST 'f043' - edit FHR 'f043' - edit HR '043' - task jgfs_post_f044 - trigger ./jgfs_post_manager:release_post044 - edit FHRGRP '045' - edit FHRLST 'f044' - edit FHR 'f044' - edit HR '044' - task jgfs_post_f045 - trigger ./jgfs_post_manager:release_post045 - edit FHRGRP '046' - edit FHRLST 'f045' - edit FHR 'f045' - edit HR '045' - task jgfs_post_f046 - trigger ./jgfs_post_manager:release_post046 - edit FHRGRP '047' - edit FHRLST 'f046' - edit FHR 'f046' - edit HR '046' - task jgfs_post_f047 - trigger ./jgfs_post_manager:release_post047 - edit FHRGRP '048' - edit FHRLST 'f047' - edit FHR 'f047' - edit HR '047' - task jgfs_post_f048 - trigger ./jgfs_post_manager:release_post048 - edit FHRGRP '049' - edit FHRLST 'f048' - edit FHR 'f048' - edit HR '048' - task jgfs_post_f049 - trigger ./jgfs_post_manager:release_post049 - edit FHRGRP '050' - edit FHRLST 'f049' - edit FHR 'f049' - edit HR '049' - task jgfs_post_f050 - trigger ./jgfs_post_manager:release_post050 - edit FHRGRP '051' - edit FHRLST 'f050' - edit FHR 'f050' - edit HR '050' - task jgfs_post_f051 - trigger ./jgfs_post_manager:release_post051 - edit FHRGRP '052' - edit FHRLST 'f051' - edit FHR 'f051' - edit HR '051' - task jgfs_post_f052 - trigger ./jgfs_post_manager:release_post052 - edit FHRGRP '053' - edit FHRLST 'f052' - edit FHR 'f052' - edit HR '052' - task jgfs_post_f053 - trigger ./jgfs_post_manager:release_post053 - edit FHRGRP '054' - edit FHRLST 'f053' - edit FHR 'f053' - edit HR '053' - task jgfs_post_f054 - trigger ./jgfs_post_manager:release_post054 - edit FHRGRP '055' - edit FHRLST 'f054' - edit FHR 'f054' - edit HR '054' - task jgfs_post_f055 - trigger ./jgfs_post_manager:release_post055 - edit FHRGRP '056' - edit FHRLST 'f055' - edit FHR 'f055' - edit HR '055' - task jgfs_post_f056 - trigger ./jgfs_post_manager:release_post056 - edit FHRGRP '057' - edit FHRLST 'f056' - edit FHR 'f056' - edit HR '056' - task jgfs_post_f057 - trigger ./jgfs_post_manager:release_post057 - edit FHRGRP '058' - edit FHRLST 'f057' - edit FHR 'f057' - edit HR '057' - task jgfs_post_f058 - trigger ./jgfs_post_manager:release_post058 - edit FHRGRP '059' - edit FHRLST 'f058' - edit FHR 'f058' - edit HR '058' - task jgfs_post_f059 - trigger ./jgfs_post_manager:release_post059 - edit FHRGRP '060' - edit FHRLST 'f059' - edit FHR 'f059' - edit HR '059' - task jgfs_post_f060 - trigger ./jgfs_post_manager:release_post060 - edit FHRGRP '061' - edit FHRLST 'f060' - edit FHR 'f060' - edit HR '060' - task jgfs_post_f061 - trigger ./jgfs_post_manager:release_post061 - edit FHRGRP '062' - edit FHRLST 'f061' - edit FHR 'f061' - edit HR '061' - task jgfs_post_f062 - trigger ./jgfs_post_manager:release_post062 - edit FHRGRP '063' - edit FHRLST 'f062' - edit FHR 'f062' - edit HR '062' - task jgfs_post_f063 - trigger ./jgfs_post_manager:release_post063 - edit FHRGRP '064' - edit FHRLST 'f063' - edit FHR 'f063' - edit HR '063' - task jgfs_post_f064 - trigger ./jgfs_post_manager:release_post064 - edit FHRGRP '065' - edit FHRLST 'f064' - edit FHR 'f064' - edit HR '064' - task jgfs_post_f065 - trigger ./jgfs_post_manager:release_post065 - edit FHRGRP '066' - edit FHRLST 'f065' - edit FHR 'f065' - edit HR '065' - task jgfs_post_f066 - trigger ./jgfs_post_manager:release_post066 - edit FHRGRP '067' - edit FHRLST 'f066' - edit FHR 'f066' - edit HR '066' - task jgfs_post_f067 - trigger ./jgfs_post_manager:release_post067 - edit FHRGRP '068' - edit FHRLST 'f067' - edit FHR 'f067' - edit HR '067' - task jgfs_post_f068 - trigger ./jgfs_post_manager:release_post068 - edit FHRGRP '069' - edit FHRLST 'f068' - edit FHR 'f068' - edit HR '068' - task jgfs_post_f069 - trigger ./jgfs_post_manager:release_post069 - edit FHRGRP '070' - edit FHRLST 'f069' - edit FHR 'f069' - edit HR '069' - task jgfs_post_f070 - trigger ./jgfs_post_manager:release_post070 - edit FHRGRP '071' - edit FHRLST 'f070' - edit FHR 'f070' - edit HR '070' - task jgfs_post_f071 - trigger ./jgfs_post_manager:release_post071 - edit FHRGRP '072' - edit FHRLST 'f071' - edit FHR 'f071' - edit HR '071' - task jgfs_post_f072 - trigger ./jgfs_post_manager:release_post072 - edit FHRGRP '073' - edit FHRLST 'f072' - edit FHR 'f072' - edit HR '072' - task jgfs_post_f073 - trigger ./jgfs_post_manager:release_post073 - edit FHRGRP '074' - edit FHRLST 'f073' - edit FHR 'f073' - edit HR '073' - task jgfs_post_f074 - trigger ./jgfs_post_manager:release_post074 - edit FHRGRP '075' - edit FHRLST 'f074' - edit FHR 'f074' - edit HR '074' - task jgfs_post_f075 - trigger ./jgfs_post_manager:release_post075 - edit FHRGRP '076' - edit FHRLST 'f075' - edit FHR 'f075' - edit HR '075' - task jgfs_post_f076 - trigger ./jgfs_post_manager:release_post076 - edit FHRGRP '077' - edit FHRLST 'f076' - edit FHR 'f076' - edit HR '076' - task jgfs_post_f077 - trigger ./jgfs_post_manager:release_post077 - edit FHRGRP '078' - edit FHRLST 'f077' - edit FHR 'f077' - edit HR '077' - task jgfs_post_f078 - trigger ./jgfs_post_manager:release_post078 - edit FHRGRP '079' - edit FHRLST 'f078' - edit FHR 'f078' - edit HR '078' - task jgfs_post_f079 - trigger ./jgfs_post_manager:release_post079 - edit FHRGRP '080' - edit FHRLST 'f079' - edit FHR 'f079' - edit HR '079' - task jgfs_post_f080 - trigger ./jgfs_post_manager:release_post080 - edit FHRGRP '081' - edit FHRLST 'f080' - edit FHR 'f080' - edit HR '080' - task jgfs_post_f081 - trigger ./jgfs_post_manager:release_post081 - edit FHRGRP '082' - edit FHRLST 'f081' - edit FHR 'f081' - edit HR '081' - task jgfs_post_f082 - trigger ./jgfs_post_manager:release_post082 - edit FHRGRP '083' - edit FHRLST 'f082' - edit FHR 'f082' - edit HR '082' - task jgfs_post_f083 - trigger ./jgfs_post_manager:release_post083 - edit FHRGRP '084' - edit FHRLST 'f083' - edit FHR 'f083' - edit HR '083' - task jgfs_post_f084 - trigger ./jgfs_post_manager:release_post084 - edit FHRGRP '085' - edit FHRLST 'f084' - edit FHR 'f084' - edit HR '084' - task jgfs_post_f085 - trigger ./jgfs_post_manager:release_post085 - edit FHRGRP '086' - edit FHRLST 'f085' - edit FHR 'f085' - edit HR '085' - task jgfs_post_f086 - trigger ./jgfs_post_manager:release_post086 - edit FHRGRP '087' - edit FHRLST 'f086' - edit FHR 'f086' - edit HR '086' - task jgfs_post_f087 - trigger ./jgfs_post_manager:release_post087 - edit FHRGRP '088' - edit FHRLST 'f087' - edit FHR 'f087' - edit HR '087' - task jgfs_post_f088 - trigger ./jgfs_post_manager:release_post088 - edit FHRGRP '089' - edit FHRLST 'f088' - edit FHR 'f088' - edit HR '088' - task jgfs_post_f089 - trigger ./jgfs_post_manager:release_post089 - edit FHRGRP '090' - edit FHRLST 'f089' - edit FHR 'f089' - edit HR '089' - task jgfs_post_f090 - trigger ./jgfs_post_manager:release_post090 - edit FHRGRP '091' - edit FHRLST 'f090' - edit FHR 'f090' - edit HR '090' - task jgfs_post_f091 - trigger ./jgfs_post_manager:release_post091 - edit FHRGRP '092' - edit FHRLST 'f091' - edit FHR 'f091' - edit HR '091' - task jgfs_post_f092 - trigger ./jgfs_post_manager:release_post092 - edit FHRGRP '093' - edit FHRLST 'f092' - edit FHR 'f092' - edit HR '092' - task jgfs_post_f093 - trigger ./jgfs_post_manager:release_post093 - edit FHRGRP '094' - edit FHRLST 'f093' - edit FHR 'f093' - edit HR '093' - task jgfs_post_f094 - trigger ./jgfs_post_manager:release_post094 - edit FHRGRP '095' - edit FHRLST 'f094' - edit FHR 'f094' - edit HR '094' - task jgfs_post_f095 - trigger ./jgfs_post_manager:release_post095 - edit FHRGRP '096' - edit FHRLST 'f095' - edit FHR 'f095' - edit HR '095' - task jgfs_post_f096 - trigger ./jgfs_post_manager:release_post096 - edit FHRGRP '097' - edit FHRLST 'f096' - edit FHR 'f096' - edit HR '096' - task jgfs_post_f097 - trigger ./jgfs_post_manager:release_post097 - edit FHRGRP '098' - edit FHRLST 'f097' - edit FHR 'f097' - edit HR '097' - task jgfs_post_f098 - trigger ./jgfs_post_manager:release_post098 - edit FHRGRP '099' - edit FHRLST 'f098' - edit FHR 'f098' - edit HR '098' - task jgfs_post_f099 - trigger ./jgfs_post_manager:release_post099 - edit FHRGRP '100' - edit FHRLST 'f099' - edit FHR 'f099' - edit HR '099' - task jgfs_post_f100 - trigger ./jgfs_post_manager:release_post100 - edit FHRGRP '101' - edit FHRLST 'f100' - edit FHR 'f100' - edit HR '100' - task jgfs_post_f101 - trigger ./jgfs_post_manager:release_post101 - edit FHRGRP '102' - edit FHRLST 'f101' - edit FHR 'f101' - edit HR '101' - task jgfs_post_f102 - trigger ./jgfs_post_manager:release_post102 - edit FHRGRP '103' - edit FHRLST 'f102' - edit FHR 'f102' - edit HR '102' - task jgfs_post_f103 - trigger ./jgfs_post_manager:release_post103 - edit FHRGRP '104' - edit FHRLST 'f103' - edit FHR 'f103' - edit HR '103' - task jgfs_post_f104 - trigger ./jgfs_post_manager:release_post104 - edit FHRGRP '105' - edit FHRLST 'f104' - edit FHR 'f104' - edit HR '104' - task jgfs_post_f105 - trigger ./jgfs_post_manager:release_post105 - edit FHRGRP '106' - edit FHRLST 'f105' - edit FHR 'f105' - edit HR '105' - task jgfs_post_f106 - trigger ./jgfs_post_manager:release_post106 - edit FHRGRP '107' - edit FHRLST 'f106' - edit FHR 'f106' - edit HR '106' - task jgfs_post_f107 - trigger ./jgfs_post_manager:release_post107 - edit FHRGRP '108' - edit FHRLST 'f107' - edit FHR 'f107' - edit HR '107' - task jgfs_post_f108 - trigger ./jgfs_post_manager:release_post108 - edit FHRGRP '109' - edit FHRLST 'f108' - edit FHR 'f108' - edit HR '108' - task jgfs_post_f109 - trigger ./jgfs_post_manager:release_post109 - edit FHRGRP '110' - edit FHRLST 'f109' - edit FHR 'f109' - edit HR '109' - task jgfs_post_f110 - trigger ./jgfs_post_manager:release_post110 - edit FHRGRP '111' - edit FHRLST 'f110' - edit FHR 'f110' - edit HR '110' - task jgfs_post_f111 - trigger ./jgfs_post_manager:release_post111 - edit FHRGRP '112' - edit FHRLST 'f111' - edit FHR 'f111' - edit HR '111' - task jgfs_post_f112 - trigger ./jgfs_post_manager:release_post112 - edit FHRGRP '113' - edit FHRLST 'f112' - edit FHR 'f112' - edit HR '112' - task jgfs_post_f113 - trigger ./jgfs_post_manager:release_post113 - edit FHRGRP '114' - edit FHRLST 'f113' - edit FHR 'f113' - edit HR '113' - task jgfs_post_f114 - trigger ./jgfs_post_manager:release_post114 - edit FHRGRP '115' - edit FHRLST 'f114' - edit FHR 'f114' - edit HR '114' - task jgfs_post_f115 - trigger ./jgfs_post_manager:release_post115 - edit FHRGRP '116' - edit FHRLST 'f115' - edit FHR 'f115' - edit HR '115' - task jgfs_post_f116 - trigger ./jgfs_post_manager:release_post116 - edit FHRGRP '117' - edit FHRLST 'f116' - edit FHR 'f116' - edit HR '116' - task jgfs_post_f117 - trigger ./jgfs_post_manager:release_post117 - edit FHRGRP '118' - edit FHRLST 'f117' - edit FHR 'f117' - edit HR '117' - task jgfs_post_f118 - trigger ./jgfs_post_manager:release_post118 - edit FHRGRP '119' - edit FHRLST 'f118' - edit FHR 'f118' - edit HR '118' - task jgfs_post_f119 - trigger ./jgfs_post_manager:release_post119 - edit FHRGRP '120' - edit FHRLST 'f119' - edit FHR 'f119' - edit HR '119' - task jgfs_post_f120 - trigger ./jgfs_post_manager:release_post120 - edit FHRGRP '121' - edit FHRLST 'f120' - edit FHR 'f120' - edit HR '120' - task jgfs_post_f123 - trigger ./jgfs_post_manager:release_post123 - edit FHRGRP '122' - edit FHRLST 'f123' - edit FHR 'f123' - edit HR '123' - task jgfs_post_f126 - trigger ./jgfs_post_manager:release_post126 - edit FHRGRP '123' - edit FHRLST 'f126' - edit FHR 'f126' - edit HR '126' - task jgfs_post_f129 - trigger ./jgfs_post_manager:release_post129 - edit FHRGRP '124' - edit FHRLST 'f129' - edit FHR 'f129' - edit HR '129' - task jgfs_post_f132 - trigger ./jgfs_post_manager:release_post132 - edit FHRGRP '125' - edit FHRLST 'f132' - edit FHR 'f132' - edit HR '132' - task jgfs_post_f135 - trigger ./jgfs_post_manager:release_post135 - edit FHRGRP '126' - edit FHRLST 'f135' - edit FHR 'f135' - edit HR '135' - task jgfs_post_f138 - trigger ./jgfs_post_manager:release_post138 - edit FHRGRP '127' - edit FHRLST 'f138' - edit FHR 'f138' - edit HR '138' - task jgfs_post_f141 - trigger ./jgfs_post_manager:release_post141 - edit FHRGRP '128' - edit FHRLST 'f141' - edit FHR 'f141' - edit HR '141' - task jgfs_post_f144 - trigger ./jgfs_post_manager:release_post144 - edit FHRGRP '129' - edit FHRLST 'f144' - edit FHR 'f144' - edit HR '144' - task jgfs_post_f147 - trigger ./jgfs_post_manager:release_post147 - edit FHRGRP '130' - edit FHRLST 'f147' - edit FHR 'f147' - edit HR '147' - task jgfs_post_f150 - trigger ./jgfs_post_manager:release_post150 - edit FHRGRP '131' - edit FHRLST 'f150' - edit FHR 'f150' - edit HR '150' - task jgfs_post_f153 - trigger ./jgfs_post_manager:release_post153 - edit FHRGRP '132' - edit FHRLST 'f153' - edit FHR 'f153' - edit HR '153' - task jgfs_post_f156 - trigger ./jgfs_post_manager:release_post156 - edit FHRGRP '133' - edit FHRLST 'f156' - edit FHR 'f156' - edit HR '156' - task jgfs_post_f159 - trigger ./jgfs_post_manager:release_post159 - edit FHRGRP '134' - edit FHRLST 'f159' - edit FHR 'f159' - edit HR '159' - task jgfs_post_f162 - trigger ./jgfs_post_manager:release_post162 - edit FHRGRP '135' - edit FHRLST 'f162' - edit FHR 'f162' - edit HR '162' - task jgfs_post_f165 - trigger ./jgfs_post_manager:release_post165 - edit FHRGRP '136' - edit FHRLST 'f165' - edit FHR 'f165' - edit HR '165' - task jgfs_post_f168 - trigger ./jgfs_post_manager:release_post168 - edit FHRGRP '137' - edit FHRLST 'f168' - edit FHR 'f168' - edit HR '168' - task jgfs_post_f171 - trigger ./jgfs_post_manager:release_post171 - edit FHRGRP '138' - edit FHRLST 'f171' - edit FHR 'f171' - edit HR '171' - task jgfs_post_f174 - trigger ./jgfs_post_manager:release_post174 - edit FHRGRP '139' - edit FHRLST 'f174' - edit FHR 'f174' - edit HR '174' - task jgfs_post_f177 - trigger ./jgfs_post_manager:release_post177 - edit FHRGRP '140' - edit FHRLST 'f177' - edit FHR 'f177' - edit HR '177' - task jgfs_post_f180 - trigger ./jgfs_post_manager:release_post180 - edit FHRGRP '141' - edit FHRLST 'f180' - edit FHR 'f180' - edit HR '180' - task jgfs_post_f183 - trigger ./jgfs_post_manager:release_post183 - edit FHRGRP '142' - edit FHRLST 'f183' - edit FHR 'f183' - edit HR '183' - task jgfs_post_f186 - trigger ./jgfs_post_manager:release_post186 - edit FHRGRP '143' - edit FHRLST 'f186' - edit FHR 'f186' - edit HR '186' - task jgfs_post_f189 - trigger ./jgfs_post_manager:release_post189 - edit FHRGRP '144' - edit FHRLST 'f189' - edit FHR 'f189' - edit HR '189' - task jgfs_post_f192 - trigger ./jgfs_post_manager:release_post192 - edit FHRGRP '145' - edit FHRLST 'f192' - edit FHR 'f192' - edit HR '192' - task jgfs_post_f195 - trigger ./jgfs_post_manager:release_post195 - edit FHRGRP '146' - edit FHRLST 'f195' - edit FHR 'f195' - edit HR '195' - task jgfs_post_f198 - trigger ./jgfs_post_manager:release_post198 - edit FHRGRP '147' - edit FHRLST 'f198' - edit FHR 'f198' - edit HR '198' - task jgfs_post_f201 - trigger ./jgfs_post_manager:release_post201 - edit FHRGRP '148' - edit FHRLST 'f201' - edit FHR 'f201' - edit HR '201' - task jgfs_post_f204 - trigger ./jgfs_post_manager:release_post204 - edit FHRGRP '149' - edit FHRLST 'f204' - edit FHR 'f204' - edit HR '204' - task jgfs_post_f207 - trigger ./jgfs_post_manager:release_post207 - edit FHRGRP '150' - edit FHRLST 'f207' - edit FHR 'f207' - edit HR '207' - task jgfs_post_f210 - trigger ./jgfs_post_manager:release_post210 - edit FHRGRP '151' - edit FHRLST 'f210' - edit FHR 'f210' - edit HR '210' - task jgfs_post_f213 - trigger ./jgfs_post_manager:release_post213 - edit FHRGRP '152' - edit FHRLST 'f213' - edit FHR 'f213' - edit HR '213' - task jgfs_post_f216 - trigger ./jgfs_post_manager:release_post216 - edit FHRGRP '153' - edit FHRLST 'f216' - edit FHR 'f216' - edit HR '216' - task jgfs_post_f219 - trigger ./jgfs_post_manager:release_post219 - edit FHRGRP '154' - edit FHRLST 'f219' - edit FHR 'f219' - edit HR '219' - task jgfs_post_f222 - trigger ./jgfs_post_manager:release_post222 - edit FHRGRP '155' - edit FHRLST 'f222' - edit FHR 'f222' - edit HR '222' - task jgfs_post_f225 - trigger ./jgfs_post_manager:release_post225 - edit FHRGRP '156' - edit FHRLST 'f225' - edit FHR 'f225' - edit HR '225' - task jgfs_post_f228 - trigger ./jgfs_post_manager:release_post228 - edit FHRGRP '157' - edit FHRLST 'f228' - edit FHR 'f228' - edit HR '228' - task jgfs_post_f231 - trigger ./jgfs_post_manager:release_post231 - edit FHRGRP '158' - edit FHRLST 'f231' - edit FHR 'f231' - edit HR '231' - task jgfs_post_f234 - trigger ./jgfs_post_manager:release_post234 - edit FHRGRP '159' - edit FHRLST 'f234' - edit FHR 'f234' - edit HR '234' - task jgfs_post_f237 - trigger ./jgfs_post_manager:release_post237 - edit FHRGRP '160' - edit FHRLST 'f237' - edit FHR 'f237' - edit HR '237' - task jgfs_post_f240 - trigger ./jgfs_post_manager:release_post240 - edit FHRGRP '161' - edit FHRLST 'f240' - edit FHR 'f240' - edit HR '240' - task jgfs_post_f243 - trigger ./jgfs_post_manager:release_post243 - edit FHRGRP '162' - edit FHRLST 'f243' - edit FHR 'f243' - edit HR '243' - task jgfs_post_f246 - trigger ./jgfs_post_manager:release_post246 - edit FHRGRP '163' - edit FHRLST 'f246' - edit FHR 'f246' - edit HR '246' - task jgfs_post_f249 - trigger ./jgfs_post_manager:release_post249 - edit FHRGRP '164' - edit FHRLST 'f249' - edit FHR 'f249' - edit HR '249' - task jgfs_post_f252 - trigger ./jgfs_post_manager:release_post252 - edit FHRGRP '165' - edit FHRLST 'f252' - edit FHR 'f252' - edit HR '252' - task jgfs_post_f255 - trigger ./jgfs_post_manager:release_post255 - edit FHRGRP '166' - edit FHRLST 'f255' - edit FHR 'f255' - edit HR '255' - task jgfs_post_f258 - trigger ./jgfs_post_manager:release_post258 - edit FHRGRP '167' - edit FHRLST 'f258' - edit FHR 'f258' - edit HR '258' - task jgfs_post_f261 - trigger ./jgfs_post_manager:release_post261 - edit FHRGRP '168' - edit FHRLST 'f261' - edit FHR 'f261' - edit HR '261' - task jgfs_post_f264 - trigger ./jgfs_post_manager:release_post264 - edit FHRGRP '169' - edit FHRLST 'f264' - edit FHR 'f264' - edit HR '264' - task jgfs_post_f267 - trigger ./jgfs_post_manager:release_post267 - edit FHRGRP '170' - edit FHRLST 'f267' - edit FHR 'f267' - edit HR '267' - task jgfs_post_f270 - trigger ./jgfs_post_manager:release_post270 - edit FHRGRP '171' - edit FHRLST 'f270' - edit FHR 'f270' - edit HR '270' - task jgfs_post_f273 - trigger ./jgfs_post_manager:release_post273 - edit FHRGRP '172' - edit FHRLST 'f273' - edit FHR 'f273' - edit HR '273' - task jgfs_post_f276 - trigger ./jgfs_post_manager:release_post276 - edit FHRGRP '173' - edit FHRLST 'f276' - edit FHR 'f276' - edit HR '276' - task jgfs_post_f279 - trigger ./jgfs_post_manager:release_post279 - edit FHRGRP '174' - edit FHRLST 'f279' - edit FHR 'f279' - edit HR '279' - task jgfs_post_f282 - trigger ./jgfs_post_manager:release_post282 - edit FHRGRP '175' - edit FHRLST 'f282' - edit FHR 'f282' - edit HR '282' - task jgfs_post_f285 - trigger ./jgfs_post_manager:release_post285 - edit FHRGRP '176' - edit FHRLST 'f285' - edit FHR 'f285' - edit HR '285' - task jgfs_post_f288 - trigger ./jgfs_post_manager:release_post288 - edit FHRGRP '177' - edit FHRLST 'f288' - edit FHR 'f288' - edit HR '288' - task jgfs_post_f291 - trigger ./jgfs_post_manager:release_post291 - edit FHRGRP '178' - edit FHRLST 'f291' - edit FHR 'f291' - edit HR '291' - task jgfs_post_f294 - trigger ./jgfs_post_manager:release_post294 - edit FHRGRP '179' - edit FHRLST 'f294' - edit FHR 'f294' - edit HR '294' - task jgfs_post_f297 - trigger ./jgfs_post_manager:release_post297 - edit FHRGRP '180' - edit FHRLST 'f297' - edit FHR 'f297' - edit HR '297' - task jgfs_post_f300 - trigger ./jgfs_post_manager:release_post300 - edit FHRGRP '181' - edit FHRLST 'f300' - edit FHR 'f300' - edit HR '300' - task jgfs_post_f303 - trigger ./jgfs_post_manager:release_post303 - edit FHRGRP '182' - edit FHRLST 'f303' - edit FHR 'f303' - edit HR '303' - task jgfs_post_f306 - trigger ./jgfs_post_manager:release_post306 - edit FHRGRP '183' - edit FHRLST 'f306' - edit FHR 'f306' - edit HR '306' - task jgfs_post_f309 - trigger ./jgfs_post_manager:release_post309 - edit FHRGRP '184' - edit FHRLST 'f309' - edit FHR 'f309' - edit HR '309' - task jgfs_post_f312 - trigger ./jgfs_post_manager:release_post312 - edit FHRGRP '185' - edit FHRLST 'f312' - edit FHR 'f312' - edit HR '312' - task jgfs_post_f315 - trigger ./jgfs_post_manager:release_post315 - edit FHRGRP '186' - edit FHRLST 'f315' - edit FHR 'f315' - edit HR '315' - task jgfs_post_f318 - trigger ./jgfs_post_manager:release_post318 - edit FHRGRP '187' - edit FHRLST 'f318' - edit FHR 'f318' - edit HR '318' - task jgfs_post_f321 - trigger ./jgfs_post_manager:release_post321 - edit FHRGRP '188' - edit FHRLST 'f321' - edit FHR 'f321' - edit HR '321' - task jgfs_post_f324 - trigger ./jgfs_post_manager:release_post324 - edit FHRGRP '189' - edit FHRLST 'f324' - edit FHR 'f324' - edit HR '324' - task jgfs_post_f327 - trigger ./jgfs_post_manager:release_post327 - edit FHRGRP '190' - edit FHRLST 'f327' - edit FHR 'f327' - edit HR '327' - task jgfs_post_f330 - trigger ./jgfs_post_manager:release_post330 - edit FHRGRP '191' - edit FHRLST 'f330' - edit FHR 'f330' - edit HR '330' - task jgfs_post_f333 - trigger ./jgfs_post_manager:release_post333 - edit FHRGRP '192' - edit FHRLST 'f333' - edit FHR 'f333' - edit HR '333' - task jgfs_post_f336 - trigger ./jgfs_post_manager:release_post336 - edit FHRGRP '193' - edit FHRLST 'f336' - edit FHR 'f336' - edit HR '336' - task jgfs_post_f339 - trigger ./jgfs_post_manager:release_post339 - edit FHRGRP '194' - edit FHRLST 'f339' - edit FHR 'f339' - edit HR '339' - task jgfs_post_f342 - trigger ./jgfs_post_manager:release_post342 - edit FHRGRP '195' - edit FHRLST 'f342' - edit FHR 'f342' - edit HR '342' - task jgfs_post_f345 - trigger ./jgfs_post_manager:release_post345 - edit FHRGRP '196' - edit FHRLST 'f345' - edit FHR 'f345' - edit HR '345' - task jgfs_post_f348 - trigger ./jgfs_post_manager:release_post348 - edit FHRGRP '197' - edit FHRLST 'f348' - edit FHR 'f348' - edit HR '348' - task jgfs_post_f351 - trigger ./jgfs_post_manager:release_post351 - edit FHRGRP '198' - edit FHRLST 'f351' - edit FHR 'f351' - edit HR '351' - task jgfs_post_f354 - trigger ./jgfs_post_manager:release_post354 - edit FHRGRP '199' - edit FHRLST 'f354' - edit FHR 'f354' - edit HR '354' - task jgfs_post_f357 - trigger ./jgfs_post_manager:release_post357 - edit FHRGRP '200' - edit FHRLST 'f357' - edit FHR 'f357' - edit HR '357' - task jgfs_post_f360 - trigger ./jgfs_post_manager:release_post360 - edit FHRGRP '201' - edit FHRLST 'f360' - edit FHR 'f360' - edit HR '360' - task jgfs_post_f363 - trigger ./jgfs_post_manager:release_post363 - edit FHRGRP '202' - edit FHRLST 'f363' - edit FHR 'f363' - edit HR '363' - task jgfs_post_f366 - trigger ./jgfs_post_manager:release_post366 - edit FHRGRP '203' - edit FHRLST 'f366' - edit FHR 'f366' - edit HR '366' - task jgfs_post_f369 - trigger ./jgfs_post_manager:release_post369 - edit FHRGRP '204' - edit FHRLST 'f369' - edit FHR 'f369' - edit HR '369' - task jgfs_post_f372 - trigger ./jgfs_post_manager:release_post372 - edit FHRGRP '205' - edit FHRLST 'f372' - edit FHR 'f372' - edit HR '372' - task jgfs_post_f375 - trigger ./jgfs_post_manager:release_post375 - edit FHRGRP '206' - edit FHRLST 'f375' - edit FHR 'f375' - edit HR '375' - task jgfs_post_f378 - trigger ./jgfs_post_manager:release_post378 - edit FHRGRP '207' - edit FHRLST 'f378' - edit FHR 'f378' - edit HR '378' - task jgfs_post_f381 - trigger ./jgfs_post_manager:release_post381 - edit FHRGRP '208' - edit FHRLST 'f381' - edit FHR 'f381' - edit HR '381' - task jgfs_post_f384 - trigger ./jgfs_post_manager:release_post384 - edit FHRGRP '209' - edit FHRLST 'f384' - edit FHR 'f384' - edit HR '384' - endfamily - family post_processing - task jgfs_wafs_gcip - trigger ../post/jgfs_post_f003 == complete - time 16:40 - family grib_wafs - task jgfs_wafs_f00 - trigger ../../post/jgfs_post_f000 == complete and ../../post/jgfs_post_f120 == complete and ../grib2_wafs/jgfs_wafs_grib2 == complete - edit FCSTHR '00' - task jgfs_wafs_f06 - trigger ../../post/jgfs_post_f006 == complete and ./jgfs_wafs_f00 == complete - edit FCSTHR '06' - task jgfs_wafs_f12 - trigger ../../post/jgfs_post_f012 == complete and ./jgfs_wafs_f06 == complete - edit FCSTHR '12' - task jgfs_wafs_f18 - trigger ../../post/jgfs_post_f018 == complete and ./jgfs_wafs_f12 == complete - edit FCSTHR '18' - task jgfs_wafs_f24 - trigger ../../post/jgfs_post_f024 == complete and ./jgfs_wafs_f18 == complete - edit FCSTHR '24' - task jgfs_wafs_f30 - trigger ../../post/jgfs_post_f030 == complete and ./jgfs_wafs_f24 == complete - edit FCSTHR '30' - task jgfs_wafs_f36 - trigger ../../post/jgfs_post_f036 == complete and ./jgfs_wafs_f30 == complete - edit FCSTHR '36' - task jgfs_wafs_f42 - trigger ../../post/jgfs_post_f042 == complete and ./jgfs_wafs_f36 == complete - edit FCSTHR '42' - task jgfs_wafs_f48 - trigger ../../post/jgfs_post_f048 == complete and ./jgfs_wafs_f42 == complete - edit FCSTHR '48' - task jgfs_wafs_f54 - trigger ../../post/jgfs_post_f054 == complete and ./jgfs_wafs_f48 == complete - edit FCSTHR '54' - task jgfs_wafs_f60 - trigger ../../post/jgfs_post_f060 == complete and ./jgfs_wafs_f54 == complete - edit FCSTHR '60' - task jgfs_wafs_f66 - trigger ../../post/jgfs_post_f066 == complete and ./jgfs_wafs_f60 == complete - edit FCSTHR '66' - task jgfs_wafs_f72 - trigger ../../post/jgfs_post_f072 == complete and ./jgfs_wafs_f66 == complete - edit FCSTHR '72' - task jgfs_wafs_f78 - trigger ../../post/jgfs_post_f078 == complete and ./jgfs_wafs_f72 == complete - edit FCSTHR '78' - task jgfs_wafs_f84 - trigger ../../post/jgfs_post_f084 == complete and ./jgfs_wafs_f78 == complete - edit FCSTHR '84' - task jgfs_wafs_f90 - trigger ../../post/jgfs_post_f090 == complete and ./jgfs_wafs_f84 == complete - edit FCSTHR '90' - task jgfs_wafs_f96 - trigger ../../post/jgfs_post_f096 == complete and ./jgfs_wafs_f90 == complete - edit FCSTHR '96' - task jgfs_wafs_f102 - trigger ../../post/jgfs_post_f102 == complete and ./jgfs_wafs_f96 == complete - edit FCSTHR '102' - task jgfs_wafs_f108 - trigger ../../post/jgfs_post_f108 == complete and ./jgfs_wafs_f102 == complete - edit FCSTHR '108' - task jgfs_wafs_f114 - trigger ../../post/jgfs_post_f114 == complete and ./jgfs_wafs_f108 == complete - edit FCSTHR '114' - task jgfs_wafs_f120 - trigger ../../post/jgfs_post_f120 == complete and ./jgfs_wafs_f114 == complete - edit FCSTHR '120' - endfamily - family bufr_sounding - task jgfs_postsnd - trigger ../../post/jgfs_post_manager:release_post000 - endfamily - family bulletins - task jgfs_fbwind - trigger ../../post/jgfs_post_f006 == complete and ../../post/jgfs_post_f012 == complete and ../../post/jgfs_post_f024 == complete - endfamily - family grib2_wafs - task jgfs_wafs_grib2 - trigger ../../post/jgfs_post_f000 == complete - task jgfs_wafs_blending - trigger ./jgfs_wafs_grib2 == complete - time 16:33 - endfamily - family awips_20km_1p0 - task jgfs_awips_f000 - trigger ../../post/jgfs_post_f000 == complete - edit FHRGRP '000' - edit FHRLST 'f000' - edit FCSTHR '000' - edit TRDRUN 'YES' - task jgfs_awips_f003 - trigger ../../post/jgfs_post_f003 == complete - edit FHRGRP '003' - edit FHRLST 'f003' - edit FCSTHR '003' - edit TRDRUN 'NO' - task jgfs_awips_f006 - trigger ../../post/jgfs_post_f006 == complete - edit FHRGRP '006' - edit FHRLST 'f006' - edit FCSTHR '006' - edit TRDRUN 'YES' - task jgfs_awips_f009 - trigger ../../post/jgfs_post_f009 == complete - edit FHRGRP '009' - edit FHRLST 'f009' - edit FCSTHR '009' - edit TRDRUN 'NO' - task jgfs_awips_f012 - trigger ../../post/jgfs_post_f012 == complete - edit FHRGRP '012' - edit FHRLST 'f012' - edit FCSTHR '012' - edit TRDRUN 'YES' - task jgfs_awips_f015 - trigger ../../post/jgfs_post_f015 == complete - edit FHRGRP '015' - edit FHRLST 'f015' - edit FCSTHR '015' - edit TRDRUN 'NO' - task jgfs_awips_f018 - trigger ../../post/jgfs_post_f018 == complete - edit FHRGRP '018' - edit FHRLST 'f018' - edit FCSTHR '018' - edit TRDRUN 'YES' - task jgfs_awips_f021 - trigger ../../post/jgfs_post_f021 == complete - edit FHRGRP '021' - edit FHRLST 'f021' - edit FCSTHR '021' - edit TRDRUN 'NO' - task jgfs_awips_f024 - trigger ../../post/jgfs_post_f024 == complete - edit FHRGRP '024' - edit FHRLST 'f024' - edit FCSTHR '024' - edit TRDRUN 'YES' - task jgfs_awips_f027 - trigger ../../post/jgfs_post_f027 == complete - edit FHRGRP '027' - edit FHRLST 'f027' - edit FCSTHR '027' - edit TRDRUN 'NO' - task jgfs_awips_f030 - trigger ../../post/jgfs_post_f030 == complete - edit FHRGRP '030' - edit FHRLST 'f030' - edit FCSTHR '030' - edit TRDRUN 'YES' - task jgfs_awips_f033 - trigger ../../post/jgfs_post_f033 == complete - edit FHRGRP '033' - edit FHRLST 'f033' - edit FCSTHR '033' - edit TRDRUN 'NO' - task jgfs_awips_f036 - trigger ../../post/jgfs_post_f036 == complete - edit FHRGRP '036' - edit FHRLST 'f036' - edit FCSTHR '036' - edit TRDRUN 'YES' - task jgfs_awips_f039 - trigger ../../post/jgfs_post_f039 == complete - edit FHRGRP '039' - edit FHRLST 'f039' - edit FCSTHR '039' - edit TRDRUN 'NO' - task jgfs_awips_f042 - trigger ../../post/jgfs_post_f042 == complete - edit FHRGRP '042' - edit FHRLST 'f042' - edit FCSTHR '042' - edit TRDRUN 'YES' - task jgfs_awips_f045 - trigger ../../post/jgfs_post_f045 == complete - edit FHRGRP '045' - edit FHRLST 'f045' - edit FCSTHR '045' - edit TRDRUN 'NO' - task jgfs_awips_f048 - trigger ../../post/jgfs_post_f048 == complete - edit FHRGRP '048' - edit FHRLST 'f048' - edit FCSTHR '048' - edit TRDRUN 'YES' - task jgfs_awips_f051 - trigger ../../post/jgfs_post_f051 == complete - edit FHRGRP '051' - edit FHRLST 'f051' - edit FCSTHR '051' - edit TRDRUN 'NO' - task jgfs_awips_f054 - trigger ../../post/jgfs_post_f054 == complete - edit FHRGRP '054' - edit FHRLST 'f054' - edit FCSTHR '054' - edit TRDRUN 'YES' - task jgfs_awips_f057 - trigger ../../post/jgfs_post_f057 == complete - edit FHRGRP '057' - edit FHRLST 'f057' - edit FCSTHR '057' - edit TRDRUN 'NO' - task jgfs_awips_f060 - trigger ../../post/jgfs_post_f060 == complete - edit FHRGRP '060' - edit FHRLST 'f060' - edit FCSTHR '060' - edit TRDRUN 'YES' - task jgfs_awips_f063 - trigger ../../post/jgfs_post_f063 == complete - edit FHRGRP '063' - edit FHRLST 'f063' - edit FCSTHR '063' - edit TRDRUN 'NO' - task jgfs_awips_f066 - trigger ../../post/jgfs_post_f066 == complete - edit FHRGRP '066' - edit FHRLST 'f066' - edit FCSTHR '066' - edit TRDRUN 'YES' - task jgfs_awips_f069 - trigger ../../post/jgfs_post_f069 == complete - edit FHRGRP '069' - edit FHRLST 'f069' - edit FCSTHR '069' - edit TRDRUN 'NO' - task jgfs_awips_f072 - trigger ../../post/jgfs_post_f072 == complete - edit FHRGRP '072' - edit FHRLST 'f072' - edit FCSTHR '072' - edit TRDRUN 'YES' - task jgfs_awips_f075 - trigger ../../post/jgfs_post_f075 == complete - edit FHRGRP '075' - edit FHRLST 'f075' - edit FCSTHR '075' - edit TRDRUN 'NO' - task jgfs_awips_f078 - trigger ../../post/jgfs_post_f078 == complete - edit FHRGRP '078' - edit FHRLST 'f078' - edit FCSTHR '078' - edit TRDRUN 'YES' - task jgfs_awips_f081 - trigger ../../post/jgfs_post_f081 == complete - edit FHRGRP '081' - edit FHRLST 'f081' - edit FCSTHR '081' - edit TRDRUN 'NO' - task jgfs_awips_f084 - trigger ../../post/jgfs_post_f084 == complete - edit FHRGRP '084' - edit FHRLST 'f084' - edit FCSTHR '084' - edit TRDRUN 'YES' - task jgfs_awips_f090 - trigger ../../post/jgfs_post_f090 == complete - edit FHRGRP '090' - edit FHRLST 'f090' - edit FCSTHR '090' - edit TRDRUN 'YES' - task jgfs_awips_f096 - trigger ../../post/jgfs_post_f096 == complete - edit FHRGRP '096' - edit FHRLST 'f096' - edit FCSTHR '096' - edit TRDRUN 'YES' - task jgfs_awips_f102 - trigger ../../post/jgfs_post_f102 == complete - edit FHRGRP '102' - edit FHRLST 'f102' - edit FCSTHR '102' - edit TRDRUN 'YES' - task jgfs_awips_f108 - trigger ../../post/jgfs_post_f108 == complete - edit FHRGRP '108' - edit FHRLST 'f108' - edit FCSTHR '108' - edit TRDRUN 'YES' - task jgfs_awips_f114 - trigger ../../post/jgfs_post_f114 == complete - edit FHRGRP '114' - edit FHRLST 'f114' - edit FCSTHR '114' - edit TRDRUN 'YES' - task jgfs_awips_f120 - trigger ../../post/jgfs_post_f120 == complete - edit FHRGRP '120' - edit FHRLST 'f120' - edit FCSTHR '120' - edit TRDRUN 'YES' - task jgfs_awips_f126 - trigger ../../post/jgfs_post_f126 == complete - edit FHRGRP '126' - edit FHRLST 'f126' - edit FCSTHR '126' - edit TRDRUN 'YES' - task jgfs_awips_f132 - trigger ../../post/jgfs_post_f132 == complete - edit FHRGRP '132' - edit FHRLST 'f132' - edit FCSTHR '132' - edit TRDRUN 'YES' - task jgfs_awips_f138 - trigger ../../post/jgfs_post_f138 == complete - edit FHRGRP '138' - edit FHRLST 'f138' - edit FCSTHR '138' - edit TRDRUN 'YES' - task jgfs_awips_f144 - trigger ../../post/jgfs_post_f144 == complete - edit FHRGRP '144' - edit FHRLST 'f144' - edit FCSTHR '144' - edit TRDRUN 'YES' - task jgfs_awips_f150 - trigger ../../post/jgfs_post_f150 == complete - edit FHRGRP '150' - edit FHRLST 'f150' - edit FCSTHR '150' - edit TRDRUN 'YES' - task jgfs_awips_f156 - trigger ../../post/jgfs_post_f156 == complete - edit FHRGRP '156' - edit FHRLST 'f156' - edit FCSTHR '156' - edit TRDRUN 'YES' - task jgfs_awips_f162 - trigger ../../post/jgfs_post_f162 == complete - edit FHRGRP '162' - edit FHRLST 'f162' - edit FCSTHR '162' - edit TRDRUN 'YES' - task jgfs_awips_f168 - trigger ../../post/jgfs_post_f168 == complete - edit FHRGRP '168' - edit FHRLST 'f168' - edit FCSTHR '168' - edit TRDRUN 'YES' - task jgfs_awips_f174 - trigger ../../post/jgfs_post_f174 == complete - edit FHRGRP '174' - edit FHRLST 'f174' - edit FCSTHR '174' - edit TRDRUN 'YES' - task jgfs_awips_f180 - trigger ../../post/jgfs_post_f180 == complete - edit FHRGRP '180' - edit FHRLST 'f180' - edit FCSTHR '180' - edit TRDRUN 'YES' - task jgfs_awips_f186 - trigger ../../post/jgfs_post_f186 == complete - edit FHRGRP '186' - edit FHRLST 'f186' - edit FCSTHR '186' - edit TRDRUN 'YES' - task jgfs_awips_f192 - trigger ../../post/jgfs_post_f192 == complete - edit FHRGRP '192' - edit FHRLST 'f192' - edit FCSTHR '192' - edit TRDRUN 'YES' - task jgfs_awips_f198 - trigger ../../post/jgfs_post_f198 == complete - edit FHRGRP '198' - edit FHRLST 'f198' - edit FCSTHR '198' - edit TRDRUN 'YES' - task jgfs_awips_f204 - trigger ../../post/jgfs_post_f204 == complete - edit FHRGRP '204' - edit FHRLST 'f204' - edit FCSTHR '204' - edit TRDRUN 'YES' - task jgfs_awips_f210 - trigger ../../post/jgfs_post_f210 == complete - edit FHRGRP '210' - edit FHRLST 'f210' - edit FCSTHR '210' - edit TRDRUN 'YES' - task jgfs_awips_f216 - trigger ../../post/jgfs_post_f216 == complete - edit FHRGRP '216' - edit FHRLST 'f216' - edit FCSTHR '216' - edit TRDRUN 'YES' - task jgfs_awips_f222 - trigger ../../post/jgfs_post_f222 == complete - edit FHRGRP '222' - edit FHRLST 'f222' - edit FCSTHR '222' - edit TRDRUN 'YES' - task jgfs_awips_f228 - trigger ../../post/jgfs_post_f228 == complete - edit FHRGRP '228' - edit FHRLST 'f228' - edit FCSTHR '228' - edit TRDRUN 'YES' - task jgfs_awips_f234 - trigger ../../post/jgfs_post_f234 == complete - edit FHRGRP '234' - edit FHRLST 'f234' - edit FCSTHR '234' - edit TRDRUN 'YES' - task jgfs_awips_f240 - trigger ../../post/jgfs_post_f240 == complete - edit FHRGRP '240' - edit FHRLST 'f240' - edit FCSTHR '240' - edit TRDRUN 'YES' - endfamily - family awips_g2 - task jgfs_awips_g2_f000 - trigger ../../post/jgfs_post_f000 == complete - edit FHRGRP '000' - edit FHRLST 'f000' - edit FCSTHR '000' - edit TRDRUN 'YES' - task jgfs_awips_g2_f006 - trigger ../../post/jgfs_post_f006 == complete - edit FHRGRP '006' - edit FHRLST 'f006' - edit FCSTHR '006' - edit TRDRUN 'YES' - task jgfs_awips_g2_f012 - trigger ../../post/jgfs_post_f012 == complete - edit FHRGRP '012' - edit FHRLST 'f012' - edit FCSTHR '012' - edit TRDRUN 'YES' - task jgfs_awips_g2_f018 - trigger ../../post/jgfs_post_f018 == complete - edit FHRGRP '018' - edit FHRLST 'f018' - edit FCSTHR '018' - edit TRDRUN 'YES' - task jgfs_awips_g2_f024 - trigger ../../post/jgfs_post_f024 == complete - edit FHRGRP '024' - edit FHRLST 'f024' - edit FCSTHR '024' - edit TRDRUN 'YES' - task jgfs_awips_g2_f030 - trigger ../../post/jgfs_post_f030 == complete - edit FHRGRP '030' - edit FHRLST 'f030' - edit FCSTHR '030' - edit TRDRUN 'YES' - task jgfs_awips_g2_f036 - trigger ../../post/jgfs_post_f036 == complete - edit FHRGRP '036' - edit FHRLST 'f036' - edit FCSTHR '036' - edit TRDRUN 'YES' - task jgfs_awips_g2_f042 - trigger ../../post/jgfs_post_f042 == complete - edit FHRGRP '042' - edit FHRLST 'f042' - edit FCSTHR '042' - edit TRDRUN 'YES' - task jgfs_awips_g2_f048 - trigger ../../post/jgfs_post_f048 == complete - edit FHRGRP '048' - edit FHRLST 'f048' - edit FCSTHR '048' - edit TRDRUN 'YES' - task jgfs_awips_g2_f054 - trigger ../../post/jgfs_post_f054 == complete - edit FHRGRP '054' - edit FHRLST 'f054' - edit FCSTHR '054' - edit TRDRUN 'YES' - task jgfs_awips_g2_f060 - trigger ../../post/jgfs_post_f060 == complete - edit FHRGRP '060' - edit FHRLST 'f060' - edit FCSTHR '060' - edit TRDRUN 'YES' - task jgfs_awips_g2_f066 - trigger ../../post/jgfs_post_f066 == complete - edit FHRGRP '066' - edit FHRLST 'f066' - edit FCSTHR '066' - edit TRDRUN 'YES' - task jgfs_awips_g2_f072 - trigger ../../post/jgfs_post_f072 == complete - edit FHRGRP '072' - edit FHRLST 'f072' - edit FCSTHR '072' - edit TRDRUN 'YES' - task jgfs_awips_g2_f078 - trigger ../../post/jgfs_post_f078 == complete - edit FHRGRP '078' - edit FHRLST 'f078' - edit FCSTHR '078' - edit TRDRUN 'YES' - task jgfs_awips_g2_f084 - trigger ../../post/jgfs_post_f084 == complete - edit FHRGRP '084' - edit FHRLST 'f084' - edit FCSTHR '084' - edit TRDRUN 'YES' - task jgfs_awips_g2_f090 - trigger ../../post/jgfs_post_f090 == complete - edit FHRGRP '090' - edit FHRLST 'f090' - edit FCSTHR '090' - edit TRDRUN 'YES' - task jgfs_awips_g2_f096 - trigger ../../post/jgfs_post_f096 == complete - edit FHRGRP '096' - edit FHRLST 'f096' - edit FCSTHR '096' - edit TRDRUN 'YES' - task jgfs_awips_g2_f102 - trigger ../../post/jgfs_post_f102 == complete - edit FHRGRP '102' - edit FHRLST 'f102' - edit FCSTHR '102' - edit TRDRUN 'YES' - task jgfs_awips_g2_f108 - trigger ../../post/jgfs_post_f108 == complete - edit FHRGRP '108' - edit FHRLST 'f108' - edit FCSTHR '108' - edit TRDRUN 'YES' - task jgfs_awips_g2_f114 - trigger ../../post/jgfs_post_f114 == complete - edit FHRGRP '114' - edit FHRLST 'f114' - edit FCSTHR '114' - edit TRDRUN 'YES' - task jgfs_awips_g2_f120 - trigger ../../post/jgfs_post_f120 == complete - edit FHRGRP '120' - edit FHRLST 'f120' - edit FCSTHR '120' - edit TRDRUN 'YES' - task jgfs_awips_g2_f126 - trigger ../../post/jgfs_post_f126 == complete - edit FHRGRP '126' - edit FHRLST 'f126' - edit FCSTHR '126' - edit TRDRUN 'YES' - task jgfs_awips_g2_f132 - trigger ../../post/jgfs_post_f132 == complete - edit FHRGRP '132' - edit FHRLST 'f132' - edit FCSTHR '132' - edit TRDRUN 'YES' - task jgfs_awips_g2_f138 - trigger ../../post/jgfs_post_f138 == complete - edit FHRGRP '138' - edit FHRLST 'f138' - edit FCSTHR '138' - edit TRDRUN 'YES' - task jgfs_awips_g2_f144 - trigger ../../post/jgfs_post_f144 == complete - edit FHRGRP '144' - edit FHRLST 'f144' - edit FCSTHR '144' - edit TRDRUN 'YES' - task jgfs_awips_g2_f150 - trigger ../../post/jgfs_post_f150 == complete - edit FHRGRP '150' - edit FHRLST 'f150' - edit FCSTHR '150' - edit TRDRUN 'YES' - task jgfs_awips_g2_f156 - trigger ../../post/jgfs_post_f156 == complete - edit FHRGRP '156' - edit FHRLST 'f156' - edit FCSTHR '156' - edit TRDRUN 'YES' - task jgfs_awips_g2_f162 - trigger ../../post/jgfs_post_f162 == complete - edit FHRGRP '162' - edit FHRLST 'f162' - edit FCSTHR '162' - edit TRDRUN 'YES' - task jgfs_awips_g2_f168 - trigger ../../post/jgfs_post_f168 == complete - edit FHRGRP '168' - edit FHRLST 'f168' - edit FCSTHR '168' - edit TRDRUN 'YES' - task jgfs_awips_g2_f174 - trigger ../../post/jgfs_post_f174 == complete - edit FHRGRP '174' - edit FHRLST 'f174' - edit FCSTHR '174' - edit TRDRUN 'YES' - task jgfs_awips_g2_f180 - trigger ../../post/jgfs_post_f180 == complete - edit FHRGRP '180' - edit FHRLST 'f180' - edit FCSTHR '180' - edit TRDRUN 'YES' - task jgfs_awips_g2_f186 - trigger ../../post/jgfs_post_f186 == complete - edit FHRGRP '186' - edit FHRLST 'f186' - edit FCSTHR '186' - edit TRDRUN 'YES' - task jgfs_awips_g2_f192 - trigger ../../post/jgfs_post_f192 == complete - edit FHRGRP '192' - edit FHRLST 'f192' - edit FCSTHR '192' - edit TRDRUN 'YES' - task jgfs_awips_g2_f198 - trigger ../../post/jgfs_post_f198 == complete - edit FHRGRP '198' - edit FHRLST 'f198' - edit FCSTHR '198' - edit TRDRUN 'YES' - task jgfs_awips_g2_f204 - trigger ../../post/jgfs_post_f204 == complete - edit FHRGRP '204' - edit FHRLST 'f204' - edit FCSTHR '204' - edit TRDRUN 'YES' - task jgfs_awips_g2_f210 - trigger ../../post/jgfs_post_f210 == complete - edit FHRGRP '210' - edit FHRLST 'f210' - edit FCSTHR '210' - edit TRDRUN 'YES' - task jgfs_awips_g2_f216 - trigger ../../post/jgfs_post_f216 == complete - edit FHRGRP '216' - edit FHRLST 'f216' - edit FCSTHR '216' - edit TRDRUN 'YES' - task jgfs_awips_g2_f222 - trigger ../../post/jgfs_post_f222 == complete - edit FHRGRP '222' - edit FHRLST 'f222' - edit FCSTHR '222' - edit TRDRUN 'YES' - task jgfs_awips_g2_f228 - trigger ../../post/jgfs_post_f228 == complete - edit FHRGRP '228' - edit FHRLST 'f228' - edit FCSTHR '228' - edit TRDRUN 'YES' - task jgfs_awips_g2_f234 - trigger ../../post/jgfs_post_f234 == complete - edit FHRGRP '234' - edit FHRLST 'f234' - edit FCSTHR '234' - edit TRDRUN 'YES' - task jgfs_awips_g2_f240 - trigger ../../post/jgfs_post_f240 == complete - edit FHRGRP '240' - edit FHRLST 'f240' - edit FCSTHR '240' - edit TRDRUN 'YES' - endfamily - endfamily - family mos - edit ECF_FILES '/ecf/ecfnets/scripts/gfs/mos' - edit PROJ 'GFS-%PROJENVIR%' - edit COM '/gpfs/hps/nco/ops/com' - edit QUEUESERV 'prod_transfer' - edit MODULES 'module load cfp-intel-sandybridge/1.1.0 grib_util gempak/6.32.0' - edit QUEUE 'prod' - family prep - task jgfsmos_stn_prep - trigger /prod12/gfs/post/jgfs_post_f096 == complete - edit NTASK '3' - edit PTILE '3' - edit OMP_NUM_THREADS '1' - edit NODES '1' - task jgfsmos_grd_prep - trigger /prod12/gfs/post/jgfs_post_f096 == complete - edit NTASK '4' - edit PTILE '4' - edit OMP_NUM_THREADS '1' - edit NODES '1' - task jgfsmos_ext_stn_prep - trigger /prod12/gfs/post == complete - edit NTASK '2' - edit PTILE '2' - edit OMP_NUM_THREADS '1' - edit NODES '1' - task jgfsmos_ext_grd_prep - trigger /prod12/gfs/post == complete - edit NTASK '7' - edit PTILE '4' - edit OMP_NUM_THREADS '1' - edit NODES '2' - endfamily - family forecast - task jgfsmos_stn_fcst - trigger ../prep/jgfsmos_stn_prep == complete - edit NTASK '5' - edit PTILE '5' - edit OMP_NUM_THREADS '1' - edit NODES '1' - task jgfsmos_grd_fcst - trigger ../prep/jgfsmos_stn_prep == complete and ../prep/jgfsmos_grd_prep == complete - edit NTASK '7' - edit PTILE '4' - edit OMP_NUM_THREADS '1' - edit NODES '2' - task jgfsmos_ext_stn_fcst - trigger ../prep/jgfsmos_ext_stn_prep == complete and ../prdgen/jgfsmos_stn_prdgen == complete - edit NTASK '3' - edit PTILE '3' - edit OMP_NUM_THREADS '1' - edit NODES '1' - task jgfsmos_ext_grd_fcst - trigger ../prep/jgfsmos_ext_stn_prep == complete and ../prep/jgfsmos_ext_grd_prep == complete and jgfsmos_grd_fcst == complete - edit NTASK '7' - edit PTILE '4' - edit OMP_NUM_THREADS '1' - edit NODES '2' - endfamily - family prdgen - task jgfsmos_stn_prdgen - trigger ../forecast/jgfsmos_stn_fcst == complete - edit NTASK '1' - edit PTILE '1' - edit OMP_NUM_THREADS '1' - edit NODES '1' - task jgfsmos_grd_prdgen - trigger ../forecast/jgfsmos_grd_fcst == complete and jgfsmos_stn_prdgen == complete - edit NTASK '14' - edit PTILE '1' - edit OMP_NUM_THREADS '20' - edit NODES '14' - task jgfsmos_ext_stn_prdgen - trigger ../forecast/jgfsmos_ext_stn_fcst == complete and jgfsmos_stn_prdgen == complete - edit NTASK '1' - edit PTILE '1' - edit OMP_NUM_THREADS '1' - edit NODES '1' - task jgfsmos_ext_grd_prdgen - trigger ../forecast/jgfsmos_ext_grd_fcst == complete and jgfsmos_grd_prdgen == complete and jgfsmos_ext_stn_prdgen == complete - edit NTASK '12' - edit PTILE '1' - edit OMP_NUM_THREADS '20' - edit NODES '12' - task jgfsmos_wx_prdgen - trigger ../prdgen/jgfsmos_grd_prdgen == complete - edit NTASK '2' - edit PTILE '1' - edit OMP_NUM_THREADS '20' - edit NODES '2' - task jgfsmos_wx_ext_prdgen - trigger ../prdgen/jgfsmos_ext_grd_prdgen == complete and jgfsmos_wx_prdgen == complete - edit NTASK '2' - edit PTILE '1' - edit OMP_NUM_THREADS '20' - edit NODES '2' - endfamily - family gempak - task jgfs_gempak_mdl - trigger ../prdgen == complete - endfamily - endfamily - family gempak - task jgfs_gempak_ncdc_upapgif - trigger ./jgfs_gempak == active or ./jgfs_gempak == complete - task jgfs_gempak - trigger ../jgfs_analysis eq complete - task jgfs_gempak_meta - trigger ../jgfs_analysis == complete - task jgfs_pgrb2_spec_gempak - trigger ./jgfs_npoess_pgrb2_0p5deg == complete - task jgfs_npoess_pgrb2_0p5deg - trigger ../post/jgfs_post_anl eq active or ../post/jgfs_post_anl == complete - endfamily - endfamily - diff --git a/ecflow/ecf/defs/gfs_18.def b/ecflow/ecf/defs/gfs_18.def deleted file mode 100644 index 9dcd240e88..0000000000 --- a/ecflow/ecf/defs/gfs_18.def +++ /dev/null @@ -1,2244 +0,0 @@ - family gfs - edit CYC '18' - edit ECF_FILES '/ecf/ecfnets/scripts/gfs_FV3' - edit PROJ 'GFS-OPS' - edit NET 'gfs' - edit RUN 'gfs' - edit COM '/gpfs/dell1/nco/ops/com' - edit QUEUESHARED 'prod_shared' - edit QUEUESERV 'prod_transfer' - edit QUEUE 'prod' - family dump - task jgfs_tropcy_qc_reloc - event 1 jtwc_bull_email - time 20:41 - task jgfs_dump - event 1 release_sfcprep - time 20:47 - task jgfs_dump_post - trigger jgfs_dump eq complete - event 1 release_gfs18_dump_alert - task jgfs_dump_alert - trigger jgfs_dump_post:release_gfs18_dump_alert - task jmodel_realtime_gfs - trigger jgfs_dump_alert eq complete - endfamily - family prep - task jgfs_emcsfc_sfc_prep - trigger ../dump/jgfs_dump:release_sfcprep - task jgfs_prep - trigger ../dump/jgfs_dump eq complete and ../dump/jgfs_tropcy_qc_reloc eq complete - task jgfs_prep_post - trigger jgfs_prep eq complete and ../jgfs_analysis eq complete - endfamily - task jgfs_analysis - trigger prep/jgfs_prep eq complete and prep/jgfs_emcsfc_sfc_prep == complete - event 1 release_fcst - task jgfs_vminmon - trigger jgfs_analysis == complete - family forecast - task jgfs_forecast_high - trigger ../jgfs_analysis:release_fcst - endfamily - family post - task jgfs_post_manager - trigger ../jgfs_analysis eq complete - event 1 release_postanl - event 2 release_post000 - event 3 release_post001 - event 4 release_post002 - event 5 release_post003 - event 6 release_post004 - event 7 release_post005 - event 8 release_post006 - event 9 release_post007 - event 10 release_post008 - event 11 release_post009 - event 12 release_post010 - event 13 release_post011 - event 14 release_post012 - event 15 release_post013 - event 16 release_post014 - event 17 release_post015 - event 18 release_post016 - event 19 release_post017 - event 20 release_post018 - event 21 release_post019 - event 22 release_post020 - event 23 release_post021 - event 24 release_post022 - event 25 release_post023 - event 26 release_post024 - event 27 release_post025 - event 28 release_post026 - event 29 release_post027 - event 30 release_post028 - event 31 release_post029 - event 32 release_post030 - event 33 release_post031 - event 34 release_post032 - event 35 release_post033 - event 36 release_post034 - event 37 release_post035 - event 38 release_post036 - event 39 release_post037 - event 40 release_post038 - event 41 release_post039 - event 42 release_post040 - event 43 release_post041 - event 44 release_post042 - event 45 release_post043 - event 46 release_post044 - event 47 release_post045 - event 48 release_post046 - event 49 release_post047 - event 50 release_post048 - event 51 release_post049 - event 52 release_post050 - event 53 release_post051 - event 54 release_post052 - event 55 release_post053 - event 56 release_post054 - event 57 release_post055 - event 58 release_post056 - event 59 release_post057 - event 60 release_post058 - event 61 release_post059 - event 62 release_post060 - event 63 release_post061 - event 64 release_post062 - event 65 release_post063 - event 66 release_post064 - event 67 release_post065 - event 68 release_post066 - event 69 release_post067 - event 70 release_post068 - event 71 release_post069 - event 72 release_post070 - event 73 release_post071 - event 74 release_post072 - event 75 release_post073 - event 76 release_post074 - event 77 release_post075 - event 78 release_post076 - event 79 release_post077 - event 80 release_post078 - event 81 release_post079 - event 82 release_post080 - event 83 release_post081 - event 84 release_post082 - event 85 release_post083 - event 86 release_post084 - event 87 release_post085 - event 88 release_post086 - event 89 release_post087 - event 90 release_post088 - event 91 release_post089 - event 92 release_post090 - event 93 release_post091 - event 94 release_post092 - event 95 release_post093 - event 96 release_post094 - event 97 release_post095 - event 98 release_post096 - event 99 release_post097 - event 100 release_post098 - event 101 release_post099 - event 102 release_post100 - event 103 release_post101 - event 104 release_post102 - event 105 release_post103 - event 106 release_post104 - event 107 release_post105 - event 108 release_post106 - event 109 release_post107 - event 110 release_post108 - event 111 release_post109 - event 112 release_post110 - event 113 release_post111 - event 114 release_post112 - event 115 release_post113 - event 116 release_post114 - event 117 release_post115 - event 118 release_post116 - event 119 release_post117 - event 120 release_post118 - event 121 release_post119 - event 122 release_post120 - event 123 release_post123 - event 124 release_post126 - event 125 release_post129 - event 126 release_post132 - event 127 release_post135 - event 128 release_post138 - event 129 release_post141 - event 130 release_post144 - event 131 release_post147 - event 132 release_post150 - event 133 release_post153 - event 134 release_post156 - event 135 release_post159 - event 136 release_post162 - event 137 release_post165 - event 138 release_post168 - event 139 release_post171 - event 140 release_post174 - event 141 release_post177 - event 142 release_post180 - event 143 release_post183 - event 144 release_post186 - event 145 release_post189 - event 146 release_post192 - event 147 release_post195 - event 148 release_post198 - event 149 release_post201 - event 150 release_post204 - event 151 release_post207 - event 152 release_post210 - event 153 release_post213 - event 154 release_post216 - event 155 release_post219 - event 156 release_post222 - event 157 release_post225 - event 158 release_post228 - event 159 release_post231 - event 160 release_post234 - event 161 release_post237 - event 162 release_post240 - event 163 release_post243 - event 164 release_post246 - event 165 release_post249 - event 166 release_post252 - event 167 release_post255 - event 168 release_post258 - event 169 release_post261 - event 170 release_post264 - event 171 release_post267 - event 172 release_post270 - event 173 release_post273 - event 174 release_post276 - event 175 release_post279 - event 176 release_post282 - event 177 release_post285 - event 178 release_post288 - event 179 release_post291 - event 180 release_post294 - event 181 release_post297 - event 182 release_post300 - event 183 release_post303 - event 184 release_post306 - event 185 release_post309 - event 186 release_post312 - event 187 release_post315 - event 188 release_post318 - event 189 release_post321 - event 190 release_post324 - event 191 release_post327 - event 192 release_post330 - event 193 release_post333 - event 194 release_post336 - event 195 release_post339 - event 196 release_post342 - event 197 release_post345 - event 198 release_post348 - event 199 release_post351 - event 200 release_post354 - event 201 release_post357 - event 202 release_post360 - event 203 release_post363 - event 204 release_post366 - event 205 release_post369 - event 206 release_post372 - event 207 release_post375 - event 208 release_post378 - event 209 release_post381 - event 210 release_post384 - task jgfs_post_anl - trigger ./jgfs_post_manager:release_postanl - edit FHRGRP '000' - edit FHRLST 'anl' - edit HR 'anl' - edit FHR 'anl' - event 1 release_postanl - task jgfs_post_f000 - trigger ./jgfs_post_manager:release_post000 - edit FHRGRP '001' - edit FHRLST 'f000' - edit FHR 'f000' - edit HR '000' - task jgfs_post_f001 - trigger ./jgfs_post_manager:release_post001 - edit FHRGRP '002' - edit FHRLST 'f001' - edit FHR 'f001' - edit HR '001' - task jgfs_post_f002 - trigger ./jgfs_post_manager:release_post002 - edit FHRGRP '003' - edit FHRLST 'f002' - edit FHR 'f002' - edit HR '002' - task jgfs_post_f003 - trigger ./jgfs_post_manager:release_post003 - edit FHRGRP '004' - edit FHRLST 'f003' - edit FHR 'f003' - edit HR '003' - task jgfs_post_f004 - trigger ./jgfs_post_manager:release_post004 - edit FHRGRP '005' - edit FHRLST 'f004' - edit FHR 'f004' - edit HR '004' - task jgfs_post_f005 - trigger ./jgfs_post_manager:release_post005 - edit FHRGRP '006' - edit FHRLST 'f005' - edit FHR 'f005' - edit HR '005' - task jgfs_post_f006 - trigger ./jgfs_post_manager:release_post006 - edit FHRGRP '007' - edit FHRLST 'f006' - edit FHR 'f006' - edit HR '006' - task jgfs_post_f007 - trigger ./jgfs_post_manager:release_post007 - edit FHRGRP '008' - edit FHRLST 'f007' - edit FHR 'f007' - edit HR '007' - task jgfs_post_f008 - trigger ./jgfs_post_manager:release_post008 - edit FHRGRP '009' - edit FHRLST 'f008' - edit FHR 'f008' - edit HR '008' - task jgfs_post_f009 - trigger ./jgfs_post_manager:release_post009 - edit FHRGRP '010' - edit FHRLST 'f009' - edit FHR 'f009' - edit HR '009' - task jgfs_post_f010 - trigger ./jgfs_post_manager:release_post010 - edit FHRGRP '011' - edit FHRLST 'f010' - edit FHR 'f010' - edit HR '010' - task jgfs_post_f011 - trigger ./jgfs_post_manager:release_post011 - edit FHRGRP '012' - edit FHRLST 'f011' - edit FHR 'f011' - edit HR '011' - task jgfs_post_f012 - trigger ./jgfs_post_manager:release_post012 - edit FHRGRP '013' - edit FHRLST 'f012' - edit FHR 'f012' - edit HR '012' - task jgfs_post_f013 - trigger ./jgfs_post_manager:release_post013 - edit FHRGRP '014' - edit FHRLST 'f013' - edit FHR 'f013' - edit HR '013' - task jgfs_post_f014 - trigger ./jgfs_post_manager:release_post014 - edit FHRGRP '015' - edit FHRLST 'f014' - edit FHR 'f014' - edit HR '014' - task jgfs_post_f015 - trigger ./jgfs_post_manager:release_post015 - edit FHRGRP '016' - edit FHRLST 'f015' - edit FHR 'f015' - edit HR '015' - task jgfs_post_f016 - trigger ./jgfs_post_manager:release_post016 - edit FHRGRP '017' - edit FHRLST 'f016' - edit FHR 'f016' - edit HR '016' - task jgfs_post_f017 - trigger ./jgfs_post_manager:release_post017 - edit FHRGRP '018' - edit FHRLST 'f017' - edit FHR 'f017' - edit HR '017' - task jgfs_post_f018 - trigger ./jgfs_post_manager:release_post018 - edit FHRGRP '019' - edit FHRLST 'f018' - edit FHR 'f018' - edit HR '018' - task jgfs_post_f019 - trigger ./jgfs_post_manager:release_post019 - edit FHRGRP '020' - edit FHRLST 'f019' - edit FHR 'f019' - edit HR '019' - task jgfs_post_f020 - trigger ./jgfs_post_manager:release_post020 - edit FHRGRP '021' - edit FHRLST 'f020' - edit FHR 'f020' - edit HR '020' - task jgfs_post_f021 - trigger ./jgfs_post_manager:release_post021 - edit FHRGRP '022' - edit FHRLST 'f021' - edit FHR 'f021' - edit HR '021' - task jgfs_post_f022 - trigger ./jgfs_post_manager:release_post022 - edit FHRGRP '023' - edit FHRLST 'f022' - edit FHR 'f022' - edit HR '022' - task jgfs_post_f023 - trigger ./jgfs_post_manager:release_post023 - edit FHRGRP '024' - edit FHRLST 'f023' - edit FHR 'f023' - edit HR '023' - task jgfs_post_f024 - trigger ./jgfs_post_manager:release_post024 - edit FHRGRP '025' - edit FHRLST 'f024' - edit FHR 'f024' - edit HR '024' - task jgfs_post_f025 - trigger ./jgfs_post_manager:release_post025 - edit FHRGRP '026' - edit FHRLST 'f025' - edit FHR 'f025' - edit HR '025' - task jgfs_post_f026 - trigger ./jgfs_post_manager:release_post026 - edit FHRGRP '027' - edit FHRLST 'f026' - edit FHR 'f026' - edit HR '026' - task jgfs_post_f027 - trigger ./jgfs_post_manager:release_post027 - edit FHRGRP '028' - edit FHRLST 'f027' - edit FHR 'f027' - edit HR '027' - task jgfs_post_f028 - trigger ./jgfs_post_manager:release_post028 - edit FHRGRP '029' - edit FHRLST 'f028' - edit FHR 'f028' - edit HR '028' - task jgfs_post_f029 - trigger ./jgfs_post_manager:release_post029 - edit FHRGRP '030' - edit FHRLST 'f029' - edit FHR 'f029' - edit HR '029' - task jgfs_post_f030 - trigger ./jgfs_post_manager:release_post030 - edit FHRGRP '031' - edit FHRLST 'f030' - edit FHR 'f030' - edit HR '030' - task jgfs_post_f031 - trigger ./jgfs_post_manager:release_post031 - edit FHRGRP '032' - edit FHRLST 'f031' - edit FHR 'f031' - edit HR '031' - task jgfs_post_f032 - trigger ./jgfs_post_manager:release_post032 - edit FHRGRP '033' - edit FHRLST 'f032' - edit FHR 'f032' - edit HR '032' - task jgfs_post_f033 - trigger ./jgfs_post_manager:release_post033 - edit FHRGRP '034' - edit FHRLST 'f033' - edit FHR 'f033' - edit HR '033' - task jgfs_post_f034 - trigger ./jgfs_post_manager:release_post034 - edit FHRGRP '035' - edit FHRLST 'f034' - edit FHR 'f034' - edit HR '034' - task jgfs_post_f035 - trigger ./jgfs_post_manager:release_post035 - edit FHRGRP '036' - edit FHRLST 'f035' - edit FHR 'f035' - edit HR '035' - task jgfs_post_f036 - trigger ./jgfs_post_manager:release_post036 - edit FHRGRP '037' - edit FHRLST 'f036' - edit FHR 'f036' - edit HR '036' - task jgfs_post_f037 - trigger ./jgfs_post_manager:release_post037 - edit FHRGRP '038' - edit FHRLST 'f037' - edit FHR 'f037' - edit HR '037' - task jgfs_post_f038 - trigger ./jgfs_post_manager:release_post038 - edit FHRGRP '039' - edit FHRLST 'f038' - edit FHR 'f038' - edit HR '038' - task jgfs_post_f039 - trigger ./jgfs_post_manager:release_post039 - edit FHRGRP '040' - edit FHRLST 'f039' - edit FHR 'f039' - edit HR '039' - task jgfs_post_f040 - trigger ./jgfs_post_manager:release_post040 - edit FHRGRP '041' - edit FHRLST 'f040' - edit FHR 'f040' - edit HR '040' - task jgfs_post_f041 - trigger ./jgfs_post_manager:release_post041 - edit FHRGRP '042' - edit FHRLST 'f041' - edit FHR 'f041' - edit HR '041' - task jgfs_post_f042 - trigger ./jgfs_post_manager:release_post042 - edit FHRGRP '043' - edit FHRLST 'f042' - edit FHR 'f042' - edit HR '042' - task jgfs_post_f043 - trigger ./jgfs_post_manager:release_post043 - edit FHRGRP '044' - edit FHRLST 'f043' - edit FHR 'f043' - edit HR '043' - task jgfs_post_f044 - trigger ./jgfs_post_manager:release_post044 - edit FHRGRP '045' - edit FHRLST 'f044' - edit FHR 'f044' - edit HR '044' - task jgfs_post_f045 - trigger ./jgfs_post_manager:release_post045 - edit FHRGRP '046' - edit FHRLST 'f045' - edit FHR 'f045' - edit HR '045' - task jgfs_post_f046 - trigger ./jgfs_post_manager:release_post046 - edit FHRGRP '047' - edit FHRLST 'f046' - edit FHR 'f046' - edit HR '046' - task jgfs_post_f047 - trigger ./jgfs_post_manager:release_post047 - edit FHRGRP '048' - edit FHRLST 'f047' - edit FHR 'f047' - edit HR '047' - task jgfs_post_f048 - trigger ./jgfs_post_manager:release_post048 - edit FHRGRP '049' - edit FHRLST 'f048' - edit FHR 'f048' - edit HR '048' - task jgfs_post_f049 - trigger ./jgfs_post_manager:release_post049 - edit FHRGRP '050' - edit FHRLST 'f049' - edit FHR 'f049' - edit HR '049' - task jgfs_post_f050 - trigger ./jgfs_post_manager:release_post050 - edit FHRGRP '051' - edit FHRLST 'f050' - edit FHR 'f050' - edit HR '050' - task jgfs_post_f051 - trigger ./jgfs_post_manager:release_post051 - edit FHRGRP '052' - edit FHRLST 'f051' - edit FHR 'f051' - edit HR '051' - task jgfs_post_f052 - trigger ./jgfs_post_manager:release_post052 - edit FHRGRP '053' - edit FHRLST 'f052' - edit FHR 'f052' - edit HR '052' - task jgfs_post_f053 - trigger ./jgfs_post_manager:release_post053 - edit FHRGRP '054' - edit FHRLST 'f053' - edit FHR 'f053' - edit HR '053' - task jgfs_post_f054 - trigger ./jgfs_post_manager:release_post054 - edit FHRGRP '055' - edit FHRLST 'f054' - edit FHR 'f054' - edit HR '054' - task jgfs_post_f055 - trigger ./jgfs_post_manager:release_post055 - edit FHRGRP '056' - edit FHRLST 'f055' - edit FHR 'f055' - edit HR '055' - task jgfs_post_f056 - trigger ./jgfs_post_manager:release_post056 - edit FHRGRP '057' - edit FHRLST 'f056' - edit FHR 'f056' - edit HR '056' - task jgfs_post_f057 - trigger ./jgfs_post_manager:release_post057 - edit FHRGRP '058' - edit FHRLST 'f057' - edit FHR 'f057' - edit HR '057' - task jgfs_post_f058 - trigger ./jgfs_post_manager:release_post058 - edit FHRGRP '059' - edit FHRLST 'f058' - edit FHR 'f058' - edit HR '058' - task jgfs_post_f059 - trigger ./jgfs_post_manager:release_post059 - edit FHRGRP '060' - edit FHRLST 'f059' - edit FHR 'f059' - edit HR '059' - task jgfs_post_f060 - trigger ./jgfs_post_manager:release_post060 - edit FHRGRP '061' - edit FHRLST 'f060' - edit FHR 'f060' - edit HR '060' - task jgfs_post_f061 - trigger ./jgfs_post_manager:release_post061 - edit FHRGRP '062' - edit FHRLST 'f061' - edit FHR 'f061' - edit HR '061' - task jgfs_post_f062 - trigger ./jgfs_post_manager:release_post062 - edit FHRGRP '063' - edit FHRLST 'f062' - edit FHR 'f062' - edit HR '062' - task jgfs_post_f063 - trigger ./jgfs_post_manager:release_post063 - edit FHRGRP '064' - edit FHRLST 'f063' - edit FHR 'f063' - edit HR '063' - task jgfs_post_f064 - trigger ./jgfs_post_manager:release_post064 - edit FHRGRP '065' - edit FHRLST 'f064' - edit FHR 'f064' - edit HR '064' - task jgfs_post_f065 - trigger ./jgfs_post_manager:release_post065 - edit FHRGRP '066' - edit FHRLST 'f065' - edit FHR 'f065' - edit HR '065' - task jgfs_post_f066 - trigger ./jgfs_post_manager:release_post066 - edit FHRGRP '067' - edit FHRLST 'f066' - edit FHR 'f066' - edit HR '066' - task jgfs_post_f067 - trigger ./jgfs_post_manager:release_post067 - edit FHRGRP '068' - edit FHRLST 'f067' - edit FHR 'f067' - edit HR '067' - task jgfs_post_f068 - trigger ./jgfs_post_manager:release_post068 - edit FHRGRP '069' - edit FHRLST 'f068' - edit FHR 'f068' - edit HR '068' - task jgfs_post_f069 - trigger ./jgfs_post_manager:release_post069 - edit FHRGRP '070' - edit FHRLST 'f069' - edit FHR 'f069' - edit HR '069' - task jgfs_post_f070 - trigger ./jgfs_post_manager:release_post070 - edit FHRGRP '071' - edit FHRLST 'f070' - edit FHR 'f070' - edit HR '070' - task jgfs_post_f071 - trigger ./jgfs_post_manager:release_post071 - edit FHRGRP '072' - edit FHRLST 'f071' - edit FHR 'f071' - edit HR '071' - task jgfs_post_f072 - trigger ./jgfs_post_manager:release_post072 - edit FHRGRP '073' - edit FHRLST 'f072' - edit FHR 'f072' - edit HR '072' - task jgfs_post_f073 - trigger ./jgfs_post_manager:release_post073 - edit FHRGRP '074' - edit FHRLST 'f073' - edit FHR 'f073' - edit HR '073' - task jgfs_post_f074 - trigger ./jgfs_post_manager:release_post074 - edit FHRGRP '075' - edit FHRLST 'f074' - edit FHR 'f074' - edit HR '074' - task jgfs_post_f075 - trigger ./jgfs_post_manager:release_post075 - edit FHRGRP '076' - edit FHRLST 'f075' - edit FHR 'f075' - edit HR '075' - task jgfs_post_f076 - trigger ./jgfs_post_manager:release_post076 - edit FHRGRP '077' - edit FHRLST 'f076' - edit FHR 'f076' - edit HR '076' - task jgfs_post_f077 - trigger ./jgfs_post_manager:release_post077 - edit FHRGRP '078' - edit FHRLST 'f077' - edit FHR 'f077' - edit HR '077' - task jgfs_post_f078 - trigger ./jgfs_post_manager:release_post078 - edit FHRGRP '079' - edit FHRLST 'f078' - edit FHR 'f078' - edit HR '078' - task jgfs_post_f079 - trigger ./jgfs_post_manager:release_post079 - edit FHRGRP '080' - edit FHRLST 'f079' - edit FHR 'f079' - edit HR '079' - task jgfs_post_f080 - trigger ./jgfs_post_manager:release_post080 - edit FHRGRP '081' - edit FHRLST 'f080' - edit FHR 'f080' - edit HR '080' - task jgfs_post_f081 - trigger ./jgfs_post_manager:release_post081 - edit FHRGRP '082' - edit FHRLST 'f081' - edit FHR 'f081' - edit HR '081' - task jgfs_post_f082 - trigger ./jgfs_post_manager:release_post082 - edit FHRGRP '083' - edit FHRLST 'f082' - edit FHR 'f082' - edit HR '082' - task jgfs_post_f083 - trigger ./jgfs_post_manager:release_post083 - edit FHRGRP '084' - edit FHRLST 'f083' - edit FHR 'f083' - edit HR '083' - task jgfs_post_f084 - trigger ./jgfs_post_manager:release_post084 - edit FHRGRP '085' - edit FHRLST 'f084' - edit FHR 'f084' - edit HR '084' - task jgfs_post_f085 - trigger ./jgfs_post_manager:release_post085 - edit FHRGRP '086' - edit FHRLST 'f085' - edit FHR 'f085' - edit HR '085' - task jgfs_post_f086 - trigger ./jgfs_post_manager:release_post086 - edit FHRGRP '087' - edit FHRLST 'f086' - edit FHR 'f086' - edit HR '086' - task jgfs_post_f087 - trigger ./jgfs_post_manager:release_post087 - edit FHRGRP '088' - edit FHRLST 'f087' - edit FHR 'f087' - edit HR '087' - task jgfs_post_f088 - trigger ./jgfs_post_manager:release_post088 - edit FHRGRP '089' - edit FHRLST 'f088' - edit FHR 'f088' - edit HR '088' - task jgfs_post_f089 - trigger ./jgfs_post_manager:release_post089 - edit FHRGRP '090' - edit FHRLST 'f089' - edit FHR 'f089' - edit HR '089' - task jgfs_post_f090 - trigger ./jgfs_post_manager:release_post090 - edit FHRGRP '091' - edit FHRLST 'f090' - edit FHR 'f090' - edit HR '090' - task jgfs_post_f091 - trigger ./jgfs_post_manager:release_post091 - edit FHRGRP '092' - edit FHRLST 'f091' - edit FHR 'f091' - edit HR '091' - task jgfs_post_f092 - trigger ./jgfs_post_manager:release_post092 - edit FHRGRP '093' - edit FHRLST 'f092' - edit FHR 'f092' - edit HR '092' - task jgfs_post_f093 - trigger ./jgfs_post_manager:release_post093 - edit FHRGRP '094' - edit FHRLST 'f093' - edit FHR 'f093' - edit HR '093' - task jgfs_post_f094 - trigger ./jgfs_post_manager:release_post094 - edit FHRGRP '095' - edit FHRLST 'f094' - edit FHR 'f094' - edit HR '094' - task jgfs_post_f095 - trigger ./jgfs_post_manager:release_post095 - edit FHRGRP '096' - edit FHRLST 'f095' - edit FHR 'f095' - edit HR '095' - task jgfs_post_f096 - trigger ./jgfs_post_manager:release_post096 - edit FHRGRP '097' - edit FHRLST 'f096' - edit FHR 'f096' - edit HR '096' - task jgfs_post_f097 - trigger ./jgfs_post_manager:release_post097 - edit FHRGRP '098' - edit FHRLST 'f097' - edit FHR 'f097' - edit HR '097' - task jgfs_post_f098 - trigger ./jgfs_post_manager:release_post098 - edit FHRGRP '099' - edit FHRLST 'f098' - edit FHR 'f098' - edit HR '098' - task jgfs_post_f099 - trigger ./jgfs_post_manager:release_post099 - edit FHRGRP '100' - edit FHRLST 'f099' - edit FHR 'f099' - edit HR '099' - task jgfs_post_f100 - trigger ./jgfs_post_manager:release_post100 - edit FHRGRP '101' - edit FHRLST 'f100' - edit FHR 'f100' - edit HR '100' - task jgfs_post_f101 - trigger ./jgfs_post_manager:release_post101 - edit FHRGRP '102' - edit FHRLST 'f101' - edit FHR 'f101' - edit HR '101' - task jgfs_post_f102 - trigger ./jgfs_post_manager:release_post102 - edit FHRGRP '103' - edit FHRLST 'f102' - edit FHR 'f102' - edit HR '102' - task jgfs_post_f103 - trigger ./jgfs_post_manager:release_post103 - edit FHRGRP '104' - edit FHRLST 'f103' - edit FHR 'f103' - edit HR '103' - task jgfs_post_f104 - trigger ./jgfs_post_manager:release_post104 - edit FHRGRP '105' - edit FHRLST 'f104' - edit FHR 'f104' - edit HR '104' - task jgfs_post_f105 - trigger ./jgfs_post_manager:release_post105 - edit FHRGRP '106' - edit FHRLST 'f105' - edit FHR 'f105' - edit HR '105' - task jgfs_post_f106 - trigger ./jgfs_post_manager:release_post106 - edit FHRGRP '107' - edit FHRLST 'f106' - edit FHR 'f106' - edit HR '106' - task jgfs_post_f107 - trigger ./jgfs_post_manager:release_post107 - edit FHRGRP '108' - edit FHRLST 'f107' - edit FHR 'f107' - edit HR '107' - task jgfs_post_f108 - trigger ./jgfs_post_manager:release_post108 - edit FHRGRP '109' - edit FHRLST 'f108' - edit FHR 'f108' - edit HR '108' - task jgfs_post_f109 - trigger ./jgfs_post_manager:release_post109 - edit FHRGRP '110' - edit FHRLST 'f109' - edit FHR 'f109' - edit HR '109' - task jgfs_post_f110 - trigger ./jgfs_post_manager:release_post110 - edit FHRGRP '111' - edit FHRLST 'f110' - edit FHR 'f110' - edit HR '110' - task jgfs_post_f111 - trigger ./jgfs_post_manager:release_post111 - edit FHRGRP '112' - edit FHRLST 'f111' - edit FHR 'f111' - edit HR '111' - task jgfs_post_f112 - trigger ./jgfs_post_manager:release_post112 - edit FHRGRP '113' - edit FHRLST 'f112' - edit FHR 'f112' - edit HR '112' - task jgfs_post_f113 - trigger ./jgfs_post_manager:release_post113 - edit FHRGRP '114' - edit FHRLST 'f113' - edit FHR 'f113' - edit HR '113' - task jgfs_post_f114 - trigger ./jgfs_post_manager:release_post114 - edit FHRGRP '115' - edit FHRLST 'f114' - edit FHR 'f114' - edit HR '114' - task jgfs_post_f115 - trigger ./jgfs_post_manager:release_post115 - edit FHRGRP '116' - edit FHRLST 'f115' - edit FHR 'f115' - edit HR '115' - task jgfs_post_f116 - trigger ./jgfs_post_manager:release_post116 - edit FHRGRP '117' - edit FHRLST 'f116' - edit FHR 'f116' - edit HR '116' - task jgfs_post_f117 - trigger ./jgfs_post_manager:release_post117 - edit FHRGRP '118' - edit FHRLST 'f117' - edit FHR 'f117' - edit HR '117' - task jgfs_post_f118 - trigger ./jgfs_post_manager:release_post118 - edit FHRGRP '119' - edit FHRLST 'f118' - edit FHR 'f118' - edit HR '118' - task jgfs_post_f119 - trigger ./jgfs_post_manager:release_post119 - edit FHRGRP '120' - edit FHRLST 'f119' - edit FHR 'f119' - edit HR '119' - task jgfs_post_f120 - trigger ./jgfs_post_manager:release_post120 - edit FHRGRP '121' - edit FHRLST 'f120' - edit FHR 'f120' - edit HR '120' - task jgfs_post_f123 - trigger ./jgfs_post_manager:release_post123 - edit FHRGRP '122' - edit FHRLST 'f123' - edit FHR 'f123' - edit HR '123' - task jgfs_post_f126 - trigger ./jgfs_post_manager:release_post126 - edit FHRGRP '123' - edit FHRLST 'f126' - edit FHR 'f126' - edit HR '126' - task jgfs_post_f129 - trigger ./jgfs_post_manager:release_post129 - edit FHRGRP '124' - edit FHRLST 'f129' - edit FHR 'f129' - edit HR '129' - task jgfs_post_f132 - trigger ./jgfs_post_manager:release_post132 - edit FHRGRP '125' - edit FHRLST 'f132' - edit FHR 'f132' - edit HR '132' - task jgfs_post_f135 - trigger ./jgfs_post_manager:release_post135 - edit FHRGRP '126' - edit FHRLST 'f135' - edit FHR 'f135' - edit HR '135' - task jgfs_post_f138 - trigger ./jgfs_post_manager:release_post138 - edit FHRGRP '127' - edit FHRLST 'f138' - edit FHR 'f138' - edit HR '138' - task jgfs_post_f141 - trigger ./jgfs_post_manager:release_post141 - edit FHRGRP '128' - edit FHRLST 'f141' - edit FHR 'f141' - edit HR '141' - task jgfs_post_f144 - trigger ./jgfs_post_manager:release_post144 - edit FHRGRP '129' - edit FHRLST 'f144' - edit FHR 'f144' - edit HR '144' - task jgfs_post_f147 - trigger ./jgfs_post_manager:release_post147 - edit FHRGRP '130' - edit FHRLST 'f147' - edit FHR 'f147' - edit HR '147' - task jgfs_post_f150 - trigger ./jgfs_post_manager:release_post150 - edit FHRGRP '131' - edit FHRLST 'f150' - edit FHR 'f150' - edit HR '150' - task jgfs_post_f153 - trigger ./jgfs_post_manager:release_post153 - edit FHRGRP '132' - edit FHRLST 'f153' - edit FHR 'f153' - edit HR '153' - task jgfs_post_f156 - trigger ./jgfs_post_manager:release_post156 - edit FHRGRP '133' - edit FHRLST 'f156' - edit FHR 'f156' - edit HR '156' - task jgfs_post_f159 - trigger ./jgfs_post_manager:release_post159 - edit FHRGRP '134' - edit FHRLST 'f159' - edit FHR 'f159' - edit HR '159' - task jgfs_post_f162 - trigger ./jgfs_post_manager:release_post162 - edit FHRGRP '135' - edit FHRLST 'f162' - edit FHR 'f162' - edit HR '162' - task jgfs_post_f165 - trigger ./jgfs_post_manager:release_post165 - edit FHRGRP '136' - edit FHRLST 'f165' - edit FHR 'f165' - edit HR '165' - task jgfs_post_f168 - trigger ./jgfs_post_manager:release_post168 - edit FHRGRP '137' - edit FHRLST 'f168' - edit FHR 'f168' - edit HR '168' - task jgfs_post_f171 - trigger ./jgfs_post_manager:release_post171 - edit FHRGRP '138' - edit FHRLST 'f171' - edit FHR 'f171' - edit HR '171' - task jgfs_post_f174 - trigger ./jgfs_post_manager:release_post174 - edit FHRGRP '139' - edit FHRLST 'f174' - edit FHR 'f174' - edit HR '174' - task jgfs_post_f177 - trigger ./jgfs_post_manager:release_post177 - edit FHRGRP '140' - edit FHRLST 'f177' - edit FHR 'f177' - edit HR '177' - task jgfs_post_f180 - trigger ./jgfs_post_manager:release_post180 - edit FHRGRP '141' - edit FHRLST 'f180' - edit FHR 'f180' - edit HR '180' - task jgfs_post_f183 - trigger ./jgfs_post_manager:release_post183 - edit FHRGRP '142' - edit FHRLST 'f183' - edit FHR 'f183' - edit HR '183' - task jgfs_post_f186 - trigger ./jgfs_post_manager:release_post186 - edit FHRGRP '143' - edit FHRLST 'f186' - edit FHR 'f186' - edit HR '186' - task jgfs_post_f189 - trigger ./jgfs_post_manager:release_post189 - edit FHRGRP '144' - edit FHRLST 'f189' - edit FHR 'f189' - edit HR '189' - task jgfs_post_f192 - trigger ./jgfs_post_manager:release_post192 - edit FHRGRP '145' - edit FHRLST 'f192' - edit FHR 'f192' - edit HR '192' - task jgfs_post_f195 - trigger ./jgfs_post_manager:release_post195 - edit FHRGRP '146' - edit FHRLST 'f195' - edit FHR 'f195' - edit HR '195' - task jgfs_post_f198 - trigger ./jgfs_post_manager:release_post198 - edit FHRGRP '147' - edit FHRLST 'f198' - edit FHR 'f198' - edit HR '198' - task jgfs_post_f201 - trigger ./jgfs_post_manager:release_post201 - edit FHRGRP '148' - edit FHRLST 'f201' - edit FHR 'f201' - edit HR '201' - task jgfs_post_f204 - trigger ./jgfs_post_manager:release_post204 - edit FHRGRP '149' - edit FHRLST 'f204' - edit FHR 'f204' - edit HR '204' - task jgfs_post_f207 - trigger ./jgfs_post_manager:release_post207 - edit FHRGRP '150' - edit FHRLST 'f207' - edit FHR 'f207' - edit HR '207' - task jgfs_post_f210 - trigger ./jgfs_post_manager:release_post210 - edit FHRGRP '151' - edit FHRLST 'f210' - edit FHR 'f210' - edit HR '210' - task jgfs_post_f213 - trigger ./jgfs_post_manager:release_post213 - edit FHRGRP '152' - edit FHRLST 'f213' - edit FHR 'f213' - edit HR '213' - task jgfs_post_f216 - trigger ./jgfs_post_manager:release_post216 - edit FHRGRP '153' - edit FHRLST 'f216' - edit FHR 'f216' - edit HR '216' - task jgfs_post_f219 - trigger ./jgfs_post_manager:release_post219 - edit FHRGRP '154' - edit FHRLST 'f219' - edit FHR 'f219' - edit HR '219' - task jgfs_post_f222 - trigger ./jgfs_post_manager:release_post222 - edit FHRGRP '155' - edit FHRLST 'f222' - edit FHR 'f222' - edit HR '222' - task jgfs_post_f225 - trigger ./jgfs_post_manager:release_post225 - edit FHRGRP '156' - edit FHRLST 'f225' - edit FHR 'f225' - edit HR '225' - task jgfs_post_f228 - trigger ./jgfs_post_manager:release_post228 - edit FHRGRP '157' - edit FHRLST 'f228' - edit FHR 'f228' - edit HR '228' - task jgfs_post_f231 - trigger ./jgfs_post_manager:release_post231 - edit FHRGRP '158' - edit FHRLST 'f231' - edit FHR 'f231' - edit HR '231' - task jgfs_post_f234 - trigger ./jgfs_post_manager:release_post234 - edit FHRGRP '159' - edit FHRLST 'f234' - edit FHR 'f234' - edit HR '234' - task jgfs_post_f237 - trigger ./jgfs_post_manager:release_post237 - edit FHRGRP '160' - edit FHRLST 'f237' - edit FHR 'f237' - edit HR '237' - task jgfs_post_f240 - trigger ./jgfs_post_manager:release_post240 - edit FHRGRP '161' - edit FHRLST 'f240' - edit FHR 'f240' - edit HR '240' - task jgfs_post_f243 - trigger ./jgfs_post_manager:release_post243 - edit FHRGRP '162' - edit FHRLST 'f243' - edit FHR 'f243' - edit HR '243' - task jgfs_post_f246 - trigger ./jgfs_post_manager:release_post246 - edit FHRGRP '163' - edit FHRLST 'f246' - edit FHR 'f246' - edit HR '246' - task jgfs_post_f249 - trigger ./jgfs_post_manager:release_post249 - edit FHRGRP '164' - edit FHRLST 'f249' - edit FHR 'f249' - edit HR '249' - task jgfs_post_f252 - trigger ./jgfs_post_manager:release_post252 - edit FHRGRP '165' - edit FHRLST 'f252' - edit FHR 'f252' - edit HR '252' - task jgfs_post_f255 - trigger ./jgfs_post_manager:release_post255 - edit FHRGRP '166' - edit FHRLST 'f255' - edit FHR 'f255' - edit HR '255' - task jgfs_post_f258 - trigger ./jgfs_post_manager:release_post258 - edit FHRGRP '167' - edit FHRLST 'f258' - edit FHR 'f258' - edit HR '258' - task jgfs_post_f261 - trigger ./jgfs_post_manager:release_post261 - edit FHRGRP '168' - edit FHRLST 'f261' - edit FHR 'f261' - edit HR '261' - task jgfs_post_f264 - trigger ./jgfs_post_manager:release_post264 - edit FHRGRP '169' - edit FHRLST 'f264' - edit FHR 'f264' - edit HR '264' - task jgfs_post_f267 - trigger ./jgfs_post_manager:release_post267 - edit FHRGRP '170' - edit FHRLST 'f267' - edit FHR 'f267' - edit HR '267' - task jgfs_post_f270 - trigger ./jgfs_post_manager:release_post270 - edit FHRGRP '171' - edit FHRLST 'f270' - edit FHR 'f270' - edit HR '270' - task jgfs_post_f273 - trigger ./jgfs_post_manager:release_post273 - edit FHRGRP '172' - edit FHRLST 'f273' - edit FHR 'f273' - edit HR '273' - task jgfs_post_f276 - trigger ./jgfs_post_manager:release_post276 - edit FHRGRP '173' - edit FHRLST 'f276' - edit FHR 'f276' - edit HR '276' - task jgfs_post_f279 - trigger ./jgfs_post_manager:release_post279 - edit FHRGRP '174' - edit FHRLST 'f279' - edit FHR 'f279' - edit HR '279' - task jgfs_post_f282 - trigger ./jgfs_post_manager:release_post282 - edit FHRGRP '175' - edit FHRLST 'f282' - edit FHR 'f282' - edit HR '282' - task jgfs_post_f285 - trigger ./jgfs_post_manager:release_post285 - edit FHRGRP '176' - edit FHRLST 'f285' - edit FHR 'f285' - edit HR '285' - task jgfs_post_f288 - trigger ./jgfs_post_manager:release_post288 - edit FHRGRP '177' - edit FHRLST 'f288' - edit FHR 'f288' - edit HR '288' - task jgfs_post_f291 - trigger ./jgfs_post_manager:release_post291 - edit FHRGRP '178' - edit FHRLST 'f291' - edit FHR 'f291' - edit HR '291' - task jgfs_post_f294 - trigger ./jgfs_post_manager:release_post294 - edit FHRGRP '179' - edit FHRLST 'f294' - edit FHR 'f294' - edit HR '294' - task jgfs_post_f297 - trigger ./jgfs_post_manager:release_post297 - edit FHRGRP '180' - edit FHRLST 'f297' - edit FHR 'f297' - edit HR '297' - task jgfs_post_f300 - trigger ./jgfs_post_manager:release_post300 - edit FHRGRP '181' - edit FHRLST 'f300' - edit FHR 'f300' - edit HR '300' - task jgfs_post_f303 - trigger ./jgfs_post_manager:release_post303 - edit FHRGRP '182' - edit FHRLST 'f303' - edit FHR 'f303' - edit HR '303' - task jgfs_post_f306 - trigger ./jgfs_post_manager:release_post306 - edit FHRGRP '183' - edit FHRLST 'f306' - edit FHR 'f306' - edit HR '306' - task jgfs_post_f309 - trigger ./jgfs_post_manager:release_post309 - edit FHRGRP '184' - edit FHRLST 'f309' - edit FHR 'f309' - edit HR '309' - task jgfs_post_f312 - trigger ./jgfs_post_manager:release_post312 - edit FHRGRP '185' - edit FHRLST 'f312' - edit FHR 'f312' - edit HR '312' - task jgfs_post_f315 - trigger ./jgfs_post_manager:release_post315 - edit FHRGRP '186' - edit FHRLST 'f315' - edit FHR 'f315' - edit HR '315' - task jgfs_post_f318 - trigger ./jgfs_post_manager:release_post318 - edit FHRGRP '187' - edit FHRLST 'f318' - edit FHR 'f318' - edit HR '318' - task jgfs_post_f321 - trigger ./jgfs_post_manager:release_post321 - edit FHRGRP '188' - edit FHRLST 'f321' - edit FHR 'f321' - edit HR '321' - task jgfs_post_f324 - trigger ./jgfs_post_manager:release_post324 - edit FHRGRP '189' - edit FHRLST 'f324' - edit FHR 'f324' - edit HR '324' - task jgfs_post_f327 - trigger ./jgfs_post_manager:release_post327 - edit FHRGRP '190' - edit FHRLST 'f327' - edit FHR 'f327' - edit HR '327' - task jgfs_post_f330 - trigger ./jgfs_post_manager:release_post330 - edit FHRGRP '191' - edit FHRLST 'f330' - edit FHR 'f330' - edit HR '330' - task jgfs_post_f333 - trigger ./jgfs_post_manager:release_post333 - edit FHRGRP '192' - edit FHRLST 'f333' - edit FHR 'f333' - edit HR '333' - task jgfs_post_f336 - trigger ./jgfs_post_manager:release_post336 - edit FHRGRP '193' - edit FHRLST 'f336' - edit FHR 'f336' - edit HR '336' - task jgfs_post_f339 - trigger ./jgfs_post_manager:release_post339 - edit FHRGRP '194' - edit FHRLST 'f339' - edit FHR 'f339' - edit HR '339' - task jgfs_post_f342 - trigger ./jgfs_post_manager:release_post342 - edit FHRGRP '195' - edit FHRLST 'f342' - edit FHR 'f342' - edit HR '342' - task jgfs_post_f345 - trigger ./jgfs_post_manager:release_post345 - edit FHRGRP '196' - edit FHRLST 'f345' - edit FHR 'f345' - edit HR '345' - task jgfs_post_f348 - trigger ./jgfs_post_manager:release_post348 - edit FHRGRP '197' - edit FHRLST 'f348' - edit FHR 'f348' - edit HR '348' - task jgfs_post_f351 - trigger ./jgfs_post_manager:release_post351 - edit FHRGRP '198' - edit FHRLST 'f351' - edit FHR 'f351' - edit HR '351' - task jgfs_post_f354 - trigger ./jgfs_post_manager:release_post354 - edit FHRGRP '199' - edit FHRLST 'f354' - edit FHR 'f354' - edit HR '354' - task jgfs_post_f357 - trigger ./jgfs_post_manager:release_post357 - edit FHRGRP '200' - edit FHRLST 'f357' - edit FHR 'f357' - edit HR '357' - task jgfs_post_f360 - trigger ./jgfs_post_manager:release_post360 - edit FHRGRP '201' - edit FHRLST 'f360' - edit FHR 'f360' - edit HR '360' - task jgfs_post_f363 - trigger ./jgfs_post_manager:release_post363 - edit FHRGRP '202' - edit FHRLST 'f363' - edit FHR 'f363' - edit HR '363' - task jgfs_post_f366 - trigger ./jgfs_post_manager:release_post366 - edit FHRGRP '203' - edit FHRLST 'f366' - edit FHR 'f366' - edit HR '366' - task jgfs_post_f369 - trigger ./jgfs_post_manager:release_post369 - edit FHRGRP '204' - edit FHRLST 'f369' - edit FHR 'f369' - edit HR '369' - task jgfs_post_f372 - trigger ./jgfs_post_manager:release_post372 - edit FHRGRP '205' - edit FHRLST 'f372' - edit FHR 'f372' - edit HR '372' - task jgfs_post_f375 - trigger ./jgfs_post_manager:release_post375 - edit FHRGRP '206' - edit FHRLST 'f375' - edit FHR 'f375' - edit HR '375' - task jgfs_post_f378 - trigger ./jgfs_post_manager:release_post378 - edit FHRGRP '207' - edit FHRLST 'f378' - edit FHR 'f378' - edit HR '378' - task jgfs_post_f381 - trigger ./jgfs_post_manager:release_post381 - edit FHRGRP '208' - edit FHRLST 'f381' - edit FHR 'f381' - edit HR '381' - task jgfs_post_f384 - trigger ./jgfs_post_manager:release_post384 - edit FHRGRP '209' - edit FHRLST 'f384' - edit FHR 'f384' - edit HR '384' - endfamily - family post_processing - task jgfs_wafs_gcip - trigger ../post/jgfs_post_f003 == complete - time 22:40 - family grib_wafs - task jgfs_wafs_f00 - trigger ../../post/jgfs_post_f000 == complete and ../../post/jgfs_post_f120 == complete and ../grib2_wafs/jgfs_wafs_grib2 == complete - edit FCSTHR '00' - task jgfs_wafs_f06 - trigger ../../post/jgfs_post_f006 == complete and ./jgfs_wafs_f00 == complete - edit FCSTHR '06' - task jgfs_wafs_f12 - trigger ../../post/jgfs_post_f012 == complete and ./jgfs_wafs_f06 == complete - edit FCSTHR '12' - task jgfs_wafs_f18 - trigger ../../post/jgfs_post_f018 == complete and ./jgfs_wafs_f12 == complete - edit FCSTHR '18' - task jgfs_wafs_f24 - trigger ../../post/jgfs_post_f024 == complete and ./jgfs_wafs_f18 == complete - edit FCSTHR '24' - task jgfs_wafs_f30 - trigger ../../post/jgfs_post_f030 == complete and ./jgfs_wafs_f24 == complete - edit FCSTHR '30' - task jgfs_wafs_f36 - trigger ../../post/jgfs_post_f036 == complete and ./jgfs_wafs_f30 == complete - edit FCSTHR '36' - task jgfs_wafs_f42 - trigger ../../post/jgfs_post_f042 == complete and ./jgfs_wafs_f36 == complete - edit FCSTHR '42' - task jgfs_wafs_f48 - trigger ../../post/jgfs_post_f048 == complete and ./jgfs_wafs_f42 == complete - edit FCSTHR '48' - task jgfs_wafs_f54 - trigger ../../post/jgfs_post_f054 == complete and ./jgfs_wafs_f48 == complete - edit FCSTHR '54' - task jgfs_wafs_f60 - trigger ../../post/jgfs_post_f060 == complete and ./jgfs_wafs_f54 == complete - edit FCSTHR '60' - task jgfs_wafs_f66 - trigger ../../post/jgfs_post_f066 == complete and ./jgfs_wafs_f60 == complete - edit FCSTHR '66' - task jgfs_wafs_f72 - trigger ../../post/jgfs_post_f072 == complete and ./jgfs_wafs_f66 == complete - edit FCSTHR '72' - task jgfs_wafs_f78 - trigger ../../post/jgfs_post_f078 == complete and ./jgfs_wafs_f72 == complete - edit FCSTHR '78' - task jgfs_wafs_f84 - trigger ../../post/jgfs_post_f084 == complete and ./jgfs_wafs_f78 == complete - edit FCSTHR '84' - task jgfs_wafs_f90 - trigger ../../post/jgfs_post_f090 == complete and ./jgfs_wafs_f84 == complete - edit FCSTHR '90' - task jgfs_wafs_f96 - trigger ../../post/jgfs_post_f096 == complete and ./jgfs_wafs_f90 == complete - edit FCSTHR '96' - task jgfs_wafs_f102 - trigger ../../post/jgfs_post_f102 == complete and ./jgfs_wafs_f96 == complete - edit FCSTHR '102' - task jgfs_wafs_f108 - trigger ../../post/jgfs_post_f108 == complete and ./jgfs_wafs_f102 == complete - edit FCSTHR '108' - task jgfs_wafs_f114 - trigger ../../post/jgfs_post_f114 == complete and ./jgfs_wafs_f108 == complete - edit FCSTHR '114' - task jgfs_wafs_f120 - trigger ../../post/jgfs_post_f120 == complete and ./jgfs_wafs_f114 == complete - edit FCSTHR '120' - endfamily - family bufr_sounding - task jgfs_postsnd - trigger ../../post/jgfs_post_manager:release_post000 - endfamily - family bulletins - task jgfs_fbwind - trigger ../../post/jgfs_post_f006 == complete and ../../post/jgfs_post_f012 == complete and ../../post/jgfs_post_f024 == complete - endfamily - family grib2_wafs - task jgfs_wafs_grib2 - trigger ../../post/jgfs_post_f000 == complete - task jgfs_wafs_blending - trigger ./jgfs_wafs_grib2 == complete - time 22:40 - endfamily - family awips_20km_1p0 - task jgfs_awips_f000 - trigger ../../post/jgfs_post_f000 == complete - edit FHRGRP '000' - edit FHRLST 'f000' - edit FCSTHR '000' - edit TRDRUN 'YES' - task jgfs_awips_f003 - trigger ../../post/jgfs_post_f003 == complete - edit FHRGRP '003' - edit FHRLST 'f003' - edit FCSTHR '003' - edit TRDRUN 'NO' - task jgfs_awips_f006 - trigger ../../post/jgfs_post_f006 == complete - edit FHRGRP '006' - edit FHRLST 'f006' - edit FCSTHR '006' - edit TRDRUN 'YES' - task jgfs_awips_f009 - trigger ../../post/jgfs_post_f009 == complete - edit FHRGRP '009' - edit FHRLST 'f009' - edit FCSTHR '009' - edit TRDRUN 'NO' - task jgfs_awips_f012 - trigger ../../post/jgfs_post_f012 == complete - edit FHRGRP '012' - edit FHRLST 'f012' - edit FCSTHR '012' - edit TRDRUN 'YES' - task jgfs_awips_f015 - trigger ../../post/jgfs_post_f015 == complete - edit FHRGRP '015' - edit FHRLST 'f015' - edit FCSTHR '015' - edit TRDRUN 'NO' - task jgfs_awips_f018 - trigger ../../post/jgfs_post_f018 == complete - edit FHRGRP '018' - edit FHRLST 'f018' - edit FCSTHR '018' - edit TRDRUN 'YES' - task jgfs_awips_f021 - trigger ../../post/jgfs_post_f021 == complete - edit FHRGRP '021' - edit FHRLST 'f021' - edit FCSTHR '021' - edit TRDRUN 'NO' - task jgfs_awips_f024 - trigger ../../post/jgfs_post_f024 == complete - edit FHRGRP '024' - edit FHRLST 'f024' - edit FCSTHR '024' - edit TRDRUN 'YES' - task jgfs_awips_f027 - trigger ../../post/jgfs_post_f027 == complete - edit FHRGRP '027' - edit FHRLST 'f027' - edit FCSTHR '027' - edit TRDRUN 'NO' - task jgfs_awips_f030 - trigger ../../post/jgfs_post_f030 == complete - edit FHRGRP '030' - edit FHRLST 'f030' - edit FCSTHR '030' - edit TRDRUN 'YES' - task jgfs_awips_f033 - trigger ../../post/jgfs_post_f033 == complete - edit FHRGRP '033' - edit FHRLST 'f033' - edit FCSTHR '033' - edit TRDRUN 'NO' - task jgfs_awips_f036 - trigger ../../post/jgfs_post_f036 == complete - edit FHRGRP '036' - edit FHRLST 'f036' - edit FCSTHR '036' - edit TRDRUN 'YES' - task jgfs_awips_f039 - trigger ../../post/jgfs_post_f039 == complete - edit FHRGRP '039' - edit FHRLST 'f039' - edit FCSTHR '039' - edit TRDRUN 'NO' - task jgfs_awips_f042 - trigger ../../post/jgfs_post_f042 == complete - edit FHRGRP '042' - edit FHRLST 'f042' - edit FCSTHR '042' - edit TRDRUN 'YES' - task jgfs_awips_f045 - trigger ../../post/jgfs_post_f045 == complete - edit FHRGRP '045' - edit FHRLST 'f045' - edit FCSTHR '045' - edit TRDRUN 'NO' - task jgfs_awips_f048 - trigger ../../post/jgfs_post_f048 == complete - edit FHRGRP '048' - edit FHRLST 'f048' - edit FCSTHR '048' - edit TRDRUN 'YES' - task jgfs_awips_f051 - trigger ../../post/jgfs_post_f051 == complete - edit FHRGRP '051' - edit FHRLST 'f051' - edit FCSTHR '051' - edit TRDRUN 'NO' - task jgfs_awips_f054 - trigger ../../post/jgfs_post_f054 == complete - edit FHRGRP '054' - edit FHRLST 'f054' - edit FCSTHR '054' - edit TRDRUN 'YES' - task jgfs_awips_f057 - trigger ../../post/jgfs_post_f057 == complete - edit FHRGRP '057' - edit FHRLST 'f057' - edit FCSTHR '057' - edit TRDRUN 'NO' - task jgfs_awips_f060 - trigger ../../post/jgfs_post_f060 == complete - edit FHRGRP '060' - edit FHRLST 'f060' - edit FCSTHR '060' - edit TRDRUN 'YES' - task jgfs_awips_f063 - trigger ../../post/jgfs_post_f063 == complete - edit FHRGRP '063' - edit FHRLST 'f063' - edit FCSTHR '063' - edit TRDRUN 'NO' - task jgfs_awips_f066 - trigger ../../post/jgfs_post_f066 == complete - edit FHRGRP '066' - edit FHRLST 'f066' - edit FCSTHR '066' - edit TRDRUN 'YES' - task jgfs_awips_f069 - trigger ../../post/jgfs_post_f069 == complete - edit FHRGRP '069' - edit FHRLST 'f069' - edit FCSTHR '069' - edit TRDRUN 'NO' - task jgfs_awips_f072 - trigger ../../post/jgfs_post_f072 == complete - edit FHRGRP '072' - edit FHRLST 'f072' - edit FCSTHR '072' - edit TRDRUN 'YES' - task jgfs_awips_f075 - trigger ../../post/jgfs_post_f075 == complete - edit FHRGRP '075' - edit FHRLST 'f075' - edit FCSTHR '075' - edit TRDRUN 'NO' - task jgfs_awips_f078 - trigger ../../post/jgfs_post_f078 == complete - edit FHRGRP '078' - edit FHRLST 'f078' - edit FCSTHR '078' - edit TRDRUN 'YES' - task jgfs_awips_f081 - trigger ../../post/jgfs_post_f081 == complete - edit FHRGRP '081' - edit FHRLST 'f081' - edit FCSTHR '081' - edit TRDRUN 'NO' - task jgfs_awips_f084 - trigger ../../post/jgfs_post_f084 == complete - edit FHRGRP '084' - edit FHRLST 'f084' - edit FCSTHR '084' - edit TRDRUN 'YES' - task jgfs_awips_f090 - trigger ../../post/jgfs_post_f090 == complete - edit FHRGRP '090' - edit FHRLST 'f090' - edit FCSTHR '090' - edit TRDRUN 'YES' - task jgfs_awips_f096 - trigger ../../post/jgfs_post_f096 == complete - edit FHRGRP '096' - edit FHRLST 'f096' - edit FCSTHR '096' - edit TRDRUN 'YES' - task jgfs_awips_f102 - trigger ../../post/jgfs_post_f102 == complete - edit FHRGRP '102' - edit FHRLST 'f102' - edit FCSTHR '102' - edit TRDRUN 'YES' - task jgfs_awips_f108 - trigger ../../post/jgfs_post_f108 == complete - edit FHRGRP '108' - edit FHRLST 'f108' - edit FCSTHR '108' - edit TRDRUN 'YES' - task jgfs_awips_f114 - trigger ../../post/jgfs_post_f114 == complete - edit FHRGRP '114' - edit FHRLST 'f114' - edit FCSTHR '114' - edit TRDRUN 'YES' - task jgfs_awips_f120 - trigger ../../post/jgfs_post_f120 == complete - edit FHRGRP '120' - edit FHRLST 'f120' - edit FCSTHR '120' - edit TRDRUN 'YES' - task jgfs_awips_f126 - trigger ../../post/jgfs_post_f126 == complete - edit FHRGRP '126' - edit FHRLST 'f126' - edit FCSTHR '126' - edit TRDRUN 'YES' - task jgfs_awips_f132 - trigger ../../post/jgfs_post_f132 == complete - edit FHRGRP '132' - edit FHRLST 'f132' - edit FCSTHR '132' - edit TRDRUN 'YES' - task jgfs_awips_f138 - trigger ../../post/jgfs_post_f138 == complete - edit FHRGRP '138' - edit FHRLST 'f138' - edit FCSTHR '138' - edit TRDRUN 'YES' - task jgfs_awips_f144 - trigger ../../post/jgfs_post_f144 == complete - edit FHRGRP '144' - edit FHRLST 'f144' - edit FCSTHR '144' - edit TRDRUN 'YES' - task jgfs_awips_f150 - trigger ../../post/jgfs_post_f150 == complete - edit FHRGRP '150' - edit FHRLST 'f150' - edit FCSTHR '150' - edit TRDRUN 'YES' - task jgfs_awips_f156 - trigger ../../post/jgfs_post_f156 == complete - edit FHRGRP '156' - edit FHRLST 'f156' - edit FCSTHR '156' - edit TRDRUN 'YES' - task jgfs_awips_f162 - trigger ../../post/jgfs_post_f162 == complete - edit FHRGRP '162' - edit FHRLST 'f162' - edit FCSTHR '162' - edit TRDRUN 'YES' - task jgfs_awips_f168 - trigger ../../post/jgfs_post_f168 == complete - edit FHRGRP '168' - edit FHRLST 'f168' - edit FCSTHR '168' - edit TRDRUN 'YES' - task jgfs_awips_f174 - trigger ../../post/jgfs_post_f174 == complete - edit FHRGRP '174' - edit FHRLST 'f174' - edit FCSTHR '174' - edit TRDRUN 'YES' - task jgfs_awips_f180 - trigger ../../post/jgfs_post_f180 == complete - edit FHRGRP '180' - edit FHRLST 'f180' - edit FCSTHR '180' - edit TRDRUN 'YES' - task jgfs_awips_f186 - trigger ../../post/jgfs_post_f186 == complete - edit FHRGRP '186' - edit FHRLST 'f186' - edit FCSTHR '186' - edit TRDRUN 'YES' - task jgfs_awips_f192 - trigger ../../post/jgfs_post_f192 == complete - edit FHRGRP '192' - edit FHRLST 'f192' - edit FCSTHR '192' - edit TRDRUN 'YES' - task jgfs_awips_f198 - trigger ../../post/jgfs_post_f198 == complete - edit FHRGRP '198' - edit FHRLST 'f198' - edit FCSTHR '198' - edit TRDRUN 'YES' - task jgfs_awips_f204 - trigger ../../post/jgfs_post_f204 == complete - edit FHRGRP '204' - edit FHRLST 'f204' - edit FCSTHR '204' - edit TRDRUN 'YES' - task jgfs_awips_f210 - trigger ../../post/jgfs_post_f210 == complete - edit FHRGRP '210' - edit FHRLST 'f210' - edit FCSTHR '210' - edit TRDRUN 'YES' - task jgfs_awips_f216 - trigger ../../post/jgfs_post_f216 == complete - edit FHRGRP '216' - edit FHRLST 'f216' - edit FCSTHR '216' - edit TRDRUN 'YES' - task jgfs_awips_f222 - trigger ../../post/jgfs_post_f222 == complete - edit FHRGRP '222' - edit FHRLST 'f222' - edit FCSTHR '222' - edit TRDRUN 'YES' - task jgfs_awips_f228 - trigger ../../post/jgfs_post_f228 == complete - edit FHRGRP '228' - edit FHRLST 'f228' - edit FCSTHR '228' - edit TRDRUN 'YES' - task jgfs_awips_f234 - trigger ../../post/jgfs_post_f234 == complete - edit FHRGRP '234' - edit FHRLST 'f234' - edit FCSTHR '234' - edit TRDRUN 'YES' - task jgfs_awips_f240 - trigger ../../post/jgfs_post_f240 == complete - edit FHRGRP '240' - edit FHRLST 'f240' - edit FCSTHR '240' - edit TRDRUN 'YES' - endfamily - family awips_g2 - task jgfs_awips_g2_f000 - trigger ../../post/jgfs_post_f000 == complete - edit FHRGRP '000' - edit FHRLST 'f000' - edit FCSTHR '000' - edit TRDRUN 'YES' - task jgfs_awips_g2_f006 - trigger ../../post/jgfs_post_f006 == complete - edit FHRGRP '006' - edit FHRLST 'f006' - edit FCSTHR '006' - edit TRDRUN 'YES' - task jgfs_awips_g2_f012 - trigger ../../post/jgfs_post_f012 == complete - edit FHRGRP '012' - edit FHRLST 'f012' - edit FCSTHR '012' - edit TRDRUN 'YES' - task jgfs_awips_g2_f018 - trigger ../../post/jgfs_post_f018 == complete - edit FHRGRP '018' - edit FHRLST 'f018' - edit FCSTHR '018' - edit TRDRUN 'YES' - task jgfs_awips_g2_f024 - trigger ../../post/jgfs_post_f024 == complete - edit FHRGRP '024' - edit FHRLST 'f024' - edit FCSTHR '024' - edit TRDRUN 'YES' - task jgfs_awips_g2_f030 - trigger ../../post/jgfs_post_f030 == complete - edit FHRGRP '030' - edit FHRLST 'f030' - edit FCSTHR '030' - edit TRDRUN 'YES' - task jgfs_awips_g2_f036 - trigger ../../post/jgfs_post_f036 == complete - edit FHRGRP '036' - edit FHRLST 'f036' - edit FCSTHR '036' - edit TRDRUN 'YES' - task jgfs_awips_g2_f042 - trigger ../../post/jgfs_post_f042 == complete - edit FHRGRP '042' - edit FHRLST 'f042' - edit FCSTHR '042' - edit TRDRUN 'YES' - task jgfs_awips_g2_f048 - trigger ../../post/jgfs_post_f048 == complete - edit FHRGRP '048' - edit FHRLST 'f048' - edit FCSTHR '048' - edit TRDRUN 'YES' - task jgfs_awips_g2_f054 - trigger ../../post/jgfs_post_f054 == complete - edit FHRGRP '054' - edit FHRLST 'f054' - edit FCSTHR '054' - edit TRDRUN 'YES' - task jgfs_awips_g2_f060 - trigger ../../post/jgfs_post_f060 == complete - edit FHRGRP '060' - edit FHRLST 'f060' - edit FCSTHR '060' - edit TRDRUN 'YES' - task jgfs_awips_g2_f066 - trigger ../../post/jgfs_post_f066 == complete - edit FHRGRP '066' - edit FHRLST 'f066' - edit FCSTHR '066' - edit TRDRUN 'YES' - task jgfs_awips_g2_f072 - trigger ../../post/jgfs_post_f072 == complete - edit FHRGRP '072' - edit FHRLST 'f072' - edit FCSTHR '072' - edit TRDRUN 'YES' - task jgfs_awips_g2_f078 - trigger ../../post/jgfs_post_f078 == complete - edit FHRGRP '078' - edit FHRLST 'f078' - edit FCSTHR '078' - edit TRDRUN 'YES' - task jgfs_awips_g2_f084 - trigger ../../post/jgfs_post_f084 == complete - edit FHRGRP '084' - edit FHRLST 'f084' - edit FCSTHR '084' - edit TRDRUN 'YES' - task jgfs_awips_g2_f090 - trigger ../../post/jgfs_post_f090 == complete - edit FHRGRP '090' - edit FHRLST 'f090' - edit FCSTHR '090' - edit TRDRUN 'YES' - task jgfs_awips_g2_f096 - trigger ../../post/jgfs_post_f096 == complete - edit FHRGRP '096' - edit FHRLST 'f096' - edit FCSTHR '096' - edit TRDRUN 'YES' - task jgfs_awips_g2_f102 - trigger ../../post/jgfs_post_f102 == complete - edit FHRGRP '102' - edit FHRLST 'f102' - edit FCSTHR '102' - edit TRDRUN 'YES' - task jgfs_awips_g2_f108 - trigger ../../post/jgfs_post_f108 == complete - edit FHRGRP '108' - edit FHRLST 'f108' - edit FCSTHR '108' - edit TRDRUN 'YES' - task jgfs_awips_g2_f114 - trigger ../../post/jgfs_post_f114 == complete - edit FHRGRP '114' - edit FHRLST 'f114' - edit FCSTHR '114' - edit TRDRUN 'YES' - task jgfs_awips_g2_f120 - trigger ../../post/jgfs_post_f120 == complete - edit FHRGRP '120' - edit FHRLST 'f120' - edit FCSTHR '120' - edit TRDRUN 'YES' - task jgfs_awips_g2_f126 - trigger ../../post/jgfs_post_f126 == complete - edit FHRGRP '126' - edit FHRLST 'f126' - edit FCSTHR '126' - edit TRDRUN 'YES' - task jgfs_awips_g2_f132 - trigger ../../post/jgfs_post_f132 == complete - edit FHRGRP '132' - edit FHRLST 'f132' - edit FCSTHR '132' - edit TRDRUN 'YES' - task jgfs_awips_g2_f138 - trigger ../../post/jgfs_post_f138 == complete - edit FHRGRP '138' - edit FHRLST 'f138' - edit FCSTHR '138' - edit TRDRUN 'YES' - task jgfs_awips_g2_f144 - trigger ../../post/jgfs_post_f144 == complete - edit FHRGRP '144' - edit FHRLST 'f144' - edit FCSTHR '144' - edit TRDRUN 'YES' - task jgfs_awips_g2_f150 - trigger ../../post/jgfs_post_f150 == complete - edit FHRGRP '150' - edit FHRLST 'f150' - edit FCSTHR '150' - edit TRDRUN 'YES' - task jgfs_awips_g2_f156 - trigger ../../post/jgfs_post_f156 == complete - edit FHRGRP '156' - edit FHRLST 'f156' - edit FCSTHR '156' - edit TRDRUN 'YES' - task jgfs_awips_g2_f162 - trigger ../../post/jgfs_post_f162 == complete - edit FHRGRP '162' - edit FHRLST 'f162' - edit FCSTHR '162' - edit TRDRUN 'YES' - task jgfs_awips_g2_f168 - trigger ../../post/jgfs_post_f168 == complete - edit FHRGRP '168' - edit FHRLST 'f168' - edit FCSTHR '168' - edit TRDRUN 'YES' - task jgfs_awips_g2_f174 - trigger ../../post/jgfs_post_f174 == complete - edit FHRGRP '174' - edit FHRLST 'f174' - edit FCSTHR '174' - edit TRDRUN 'YES' - task jgfs_awips_g2_f180 - trigger ../../post/jgfs_post_f180 == complete - edit FHRGRP '180' - edit FHRLST 'f180' - edit FCSTHR '180' - edit TRDRUN 'YES' - task jgfs_awips_g2_f186 - trigger ../../post/jgfs_post_f186 == complete - edit FHRGRP '186' - edit FHRLST 'f186' - edit FCSTHR '186' - edit TRDRUN 'YES' - task jgfs_awips_g2_f192 - trigger ../../post/jgfs_post_f192 == complete - edit FHRGRP '192' - edit FHRLST 'f192' - edit FCSTHR '192' - edit TRDRUN 'YES' - task jgfs_awips_g2_f198 - trigger ../../post/jgfs_post_f198 == complete - edit FHRGRP '198' - edit FHRLST 'f198' - edit FCSTHR '198' - edit TRDRUN 'YES' - task jgfs_awips_g2_f204 - trigger ../../post/jgfs_post_f204 == complete - edit FHRGRP '204' - edit FHRLST 'f204' - edit FCSTHR '204' - edit TRDRUN 'YES' - task jgfs_awips_g2_f210 - trigger ../../post/jgfs_post_f210 == complete - edit FHRGRP '210' - edit FHRLST 'f210' - edit FCSTHR '210' - edit TRDRUN 'YES' - task jgfs_awips_g2_f216 - trigger ../../post/jgfs_post_f216 == complete - edit FHRGRP '216' - edit FHRLST 'f216' - edit FCSTHR '216' - edit TRDRUN 'YES' - task jgfs_awips_g2_f222 - trigger ../../post/jgfs_post_f222 == complete - edit FHRGRP '222' - edit FHRLST 'f222' - edit FCSTHR '222' - edit TRDRUN 'YES' - task jgfs_awips_g2_f228 - trigger ../../post/jgfs_post_f228 == complete - edit FHRGRP '228' - edit FHRLST 'f228' - edit FCSTHR '228' - edit TRDRUN 'YES' - task jgfs_awips_g2_f234 - trigger ../../post/jgfs_post_f234 == complete - edit FHRGRP '234' - edit FHRLST 'f234' - edit FCSTHR '234' - edit TRDRUN 'YES' - task jgfs_awips_g2_f240 - trigger ../../post/jgfs_post_f240 == complete - edit FHRGRP '240' - edit FHRLST 'f240' - edit FCSTHR '240' - edit TRDRUN 'YES' - endfamily - endfamily - family mos - edit ECF_FILES '/ecf/ecfnets/scripts/gfs/mos' - edit PROJ 'GFS-%PROJENVIR%' - edit COM '/gpfs/hps/nco/ops/com' - edit QUEUESERV 'prod_transfer' - edit MODULES 'module load cfp-intel-sandybridge/1.1.0 grib_util gempak/6.32.0' - edit QUEUE 'prod' - family prep - task jgfsmos_stn_prep - trigger /prod18/gfs/post/jgfs_post_f096 == complete - edit NTASK '3' - edit PTILE '3' - edit OMP_NUM_THREADS '1' - edit NODES '1' - task jgfsmos_ext_stn_prep - trigger /prod18/gfs/post == complete - edit NTASK '2' - edit PTILE '2' - edit OMP_NUM_THREADS '1' - edit NODES '1' - endfamily - family forecast - task jgfsmos_stn_fcst - trigger ../prep/jgfsmos_stn_prep == complete - edit NTASK '5' - edit PTILE '5' - edit OMP_NUM_THREADS '1' - edit NODES '1' - endfamily - family prdgen - task jgfsmos_stn_prdgen - trigger ../forecast/jgfsmos_stn_fcst == complete - edit NTASK '1' - edit PTILE '1' - edit OMP_NUM_THREADS '1' - edit NODES '1' - task jgfsmos_ext_stn_prdgen - trigger jgfsmos_stn_prdgen == complete - edit NTASK '1' - edit PTILE '1' - edit OMP_NUM_THREADS '1' - edit NODES '1' - endfamily - family gempak - task jgfs_gempak_mdl - trigger ../prdgen == complete - endfamily - endfamily - family gempak - task jgfs_gempak_ncdc_upapgif - trigger ./jgfs_gempak == active or ./jgfs_gempak == complete - task jgfs_gempak - trigger ../jgfs_analysis eq complete - task jgfs_gempak_meta - trigger ../jgfs_analysis == complete - task jgfs_pgrb2_spec_gempak - trigger ./jgfs_npoess_pgrb2_0p5deg == complete - task jgfs_npoess_pgrb2_0p5deg - trigger ../post/jgfs_post_anl eq active or ../post/jgfs_post_anl == complete - endfamily - endfamily - diff --git a/ecflow/ecf/defs/para00_gdas_FV3.def b/ecflow/ecf/defs/para00_gdas_FV3.def deleted file mode 100644 index e6d9e732d5..0000000000 --- a/ecflow/ecf/defs/para00_gdas_FV3.def +++ /dev/null @@ -1,247 +0,0 @@ - family gdas_FV3 - edit CYC '00' - edit ECF_FILES '/ecf/ecfnets/scripts/para/gdas_FV3' - edit PROJ 'GDAS-T2O' - edit NET 'gfs' - edit RUN 'gdas' - edit COM '/gpfs/dell1/nco/ops/com' - edit QUEUESHARED 'prod_shared' - edit QUEUESERV 'prod_transfer' - edit QUEUE 'prod' - edit ENVIR 'eval' - family dump - task jgdas_tropcy_qc_reloc - time 05:45 - task jgdas_dump - event 1 release_sfcprep - time 05:50 - task jgdas_dump_post - trigger jgdas_dump == complete - event 1 release_gdas00_dump_alert - task jgdas_dump_alert - trigger jgdas_dump_post:release_gdas00_dump_alert - task jmodel_realtime_gdas - trigger jgdas_dump_alert == complete - endfamily - family prep - task jgdas_emcsfc_sfc_prep - trigger ../dump/jgdas_dump:release_sfcprep - task jgdas_prep - trigger ../dump/jgdas_dump == complete and ../dump/jgdas_tropcy_qc_reloc == complete - task jgdas_prep_post - trigger jgdas_prep == complete and ../analysis/jgdas_analysis_high == complete - endfamily - family analysis - task jgdas_analysis_high - trigger ../prep/jgdas_prep == complete and ../prep/jgdas_emcsfc_sfc_prep == complete - event 1 release_fcst - endfamily - task jgdas_vminmon - trigger analysis/jgdas_analysis_high == complete - family forecast - task jgdas_forecast_high - trigger ../analysis/jgdas_analysis_high:release_fcst - endfamily - family post_processing - family bulletins - task jgdas_mknavybulls - trigger ../../dump/jgdas_dump_post == complete - endfamily - endfamily - family gempak - task jgdas_gempak - trigger ../forecast/jgdas_forecast_high == complete - task jgdas_gempak_meta_ncdc - trigger ./jgdas_gempak == complete - endfamily - family post - task jgdas_post_manager - trigger ../forecast == active - event 1 release_postanl - event 2 release_post000 - event 3 release_post001 - event 4 release_post002 - event 5 release_post003 - event 6 release_post004 - event 7 release_post005 - event 8 release_post006 - event 9 release_post007 - event 10 release_post008 - event 11 release_post009 - task jgdas_post_anl - trigger ./jgdas_post_manager:release_postanl - edit FHRGRP '000' - edit FHRLST 'anl' - edit HR 'anl' - edit FHR 'anl' - event 1 release_pgrb2_anl - task jgdas_post_f000 - trigger ./jgdas_post_manager:release_post000 - edit FHR 'f000' - edit HR '000' - edit FHRGRP '001' - edit FHRLST 'f000' - task jgdas_post_f001 - trigger ./jgdas_post_manager:release_post001 - edit FHR 'f001' - edit HR '001' - edit FHRGRP '002' - edit FHRLST 'f001' - task jgdas_post_f002 - trigger ./jgdas_post_manager:release_post002 - edit FHR 'f002' - edit HR '002' - edit FHRGRP '003' - edit FHRLST 'f002' - task jgdas_post_f003 - trigger ./jgdas_post_manager:release_post003 - edit FHR 'f003' - edit HR '003' - edit FHRGRP '004' - edit FHRLST 'f003' - task jgdas_post_f004 - trigger ./jgdas_post_manager:release_post004 - edit FHR 'f004' - edit HR '004' - edit FHRGRP '005' - edit FHRLST 'f004' - task jgdas_post_f005 - trigger ./jgdas_post_manager:release_post005 - edit FHR 'f005' - edit HR '005' - edit FHRGRP '006' - edit FHRLST 'f005' - task jgdas_post_f006 - trigger ./jgdas_post_manager:release_post006 - edit FHR 'f006' - edit HR '006' - edit FHRGRP '007' - edit FHRLST 'f006' - task jgdas_post_f007 - trigger ./jgdas_post_manager:release_post007 - edit FHR 'f007' - edit HR '007' - edit FHRGRP '008' - edit FHRLST 'f007' - task jgdas_post_f008 - trigger ./jgdas_post_manager:release_post008 - edit FHR 'f008' - edit HR '008' - edit FHRGRP '009' - edit FHRLST 'f008' - task jgdas_post_f009 - trigger ./jgdas_post_manager:release_post009 - edit FHR 'f009' - edit HR '009' - edit FHRGRP '010' - edit FHRLST 'f009' - endfamily - family enkf - task jgdas_enkf_select_obs - trigger ../prep/jgdas_prep == complete - family innovate - trigger ./jgdas_enkf_select_obs == complete - task jgdas_enkf_innovate_obs_grp1 - edit ENSGRP '01' - task jgdas_enkf_innovate_obs_grp2 - edit ENSGRP '02' - task jgdas_enkf_innovate_obs_grp3 - edit ENSGRP '03' - task jgdas_enkf_innovate_obs_grp4 - edit ENSGRP '04' - task jgdas_enkf_innovate_obs_grp5 - edit ENSGRP '05' - task jgdas_enkf_innovate_obs_grp6 - edit ENSGRP '06' - task jgdas_enkf_innovate_obs_grp7 - edit ENSGRP '07' - task jgdas_enkf_innovate_obs_grp8 - edit ENSGRP '08' - task jgdas_enkf_innovate_obs_grp9 - edit ENSGRP '09' - task jgdas_enkf_innovate_obs_grp10 - edit ENSGRP '10' - endfamily - task jgdas_enkf_update - trigger ./innovate == complete - task jgdas_enkf_inflate_recenter - trigger ./jgdas_enkf_update == complete and ../analysis/jgdas_analysis_high == complete - family forecast - trigger ./jgdas_enkf_inflate_recenter == complete - task jgdas_enkf_fcst_grp1 - edit ENSGRP '01' - task jgdas_enkf_fcst_grp2 - edit ENSGRP '02' - task jgdas_enkf_fcst_grp3 - edit ENSGRP '03' - task jgdas_enkf_fcst_grp4 - edit ENSGRP '04' - task jgdas_enkf_fcst_grp5 - edit ENSGRP '05' - task jgdas_enkf_fcst_grp6 - edit ENSGRP '06' - task jgdas_enkf_fcst_grp7 - edit ENSGRP '07' - task jgdas_enkf_fcst_grp8 - edit ENSGRP '08' - task jgdas_enkf_fcst_grp9 - edit ENSGRP '09' - task jgdas_enkf_fcst_grp10 - edit ENSGRP '10' - task jgdas_enkf_fcst_grp11 - edit ENSGRP '11' - task jgdas_enkf_fcst_grp12 - edit ENSGRP '12' - task jgdas_enkf_fcst_grp13 - edit ENSGRP '13' - task jgdas_enkf_fcst_grp14 - edit ENSGRP '14' - task jgdas_enkf_fcst_grp15 - edit ENSGRP '15' - task jgdas_enkf_fcst_grp16 - edit ENSGRP '16' - task jgdas_enkf_fcst_grp17 - edit ENSGRP '17' - task jgdas_enkf_fcst_grp18 - edit ENSGRP '18' - task jgdas_enkf_fcst_grp19 - edit ENSGRP '19' - task jgdas_enkf_fcst_grp20 - edit ENSGRP '20' - endfamily - family post - trigger ./forecast == complete - task jgdas_enkf_post_f003 - edit FHMIN_EPOS '003' - edit FHMAX_EPOS '003' - edit FHOUT_EPOS '003' - task jgdas_enkf_post_f004 - edit FHMIN_EPOS '004' - edit FHMAX_EPOS '004' - edit FHOUT_EPOS '004' - task jgdas_enkf_post_f005 - edit FHMIN_EPOS '005' - edit FHMAX_EPOS '005' - edit FHOUT_EPOS '005' - task jgdas_enkf_post_f006 - edit FHMIN_EPOS '006' - edit FHMAX_EPOS '006' - edit FHOUT_EPOS '006' - task jgdas_enkf_post_f007 - edit FHMIN_EPOS '007' - edit FHMAX_EPOS '007' - edit FHOUT_EPOS '007' - task jgdas_enkf_post_f008 - edit FHMIN_EPOS '008' - edit FHMAX_EPOS '008' - edit FHOUT_EPOS '008' - task jgdas_enkf_post_f009 - edit FHMIN_EPOS '009' - edit FHMAX_EPOS '009' - edit FHOUT_EPOS '009' - endfamily - endfamily - task jgdas_verfrad - trigger enkf == complete - endfamily - diff --git a/ecflow/ecf/defs/para06_gdas_FV3.def b/ecflow/ecf/defs/para06_gdas_FV3.def deleted file mode 100644 index 0742b81f81..0000000000 --- a/ecflow/ecf/defs/para06_gdas_FV3.def +++ /dev/null @@ -1,246 +0,0 @@ - family gdas_FV3 - edit CYC '06' - edit ECF_FILES '/ecf/ecfnets/scripts/para/gdas_FV3' - edit PROJ 'GDAS-T2O' - edit NET 'gfs' - edit RUN 'gdas' - edit COM '/gpfs/dell1/nco/ops/com' - edit QUEUESHARED 'prod_shared' - edit QUEUESERV 'prod_transfer' - edit QUEUE 'prod' - edit ENVIR 'eval' - edit MACHINE_SITE 'production' - family dump - task jgdas_tropcy_qc_reloc - time 11:45 - task jgdas_dump - event 1 release_sfcprep - time 11:50 - task jgdas_dump_post - trigger jgdas_dump == complete - event 1 release_gdas06_dump_alert - task jgdas_dump_alert - trigger jgdas_dump_post:release_gdas06_dump_alert - task jmodel_realtime_gdas - trigger jgdas_dump_alert == complete - endfamily - family prep - task jgdas_emcsfc_sfc_prep - trigger ../dump/jgdas_dump:release_sfcprep - task jgdas_prep - trigger ../dump/jgdas_dump == complete and ../dump/jgdas_tropcy_qc_reloc == complete - task jgdas_prep_post - trigger jgdas_prep == complete and ../analysis/jgdas_analysis_high == complete - endfamily - family analysis - task jgdas_analysis_high - trigger ../prep/jgdas_prep == complete and ../prep/jgdas_emcsfc_sfc_prep == complete - event 1 release_fcst - endfamily - task jgdas_vminmon - trigger analysis/jgdas_analysis_high == complete - family forecast - task jgdas_forecast_high - trigger ../analysis/jgdas_analysis_high:release_fcst - endfamily - family post_processing - task jgdas_tropc - trigger ../post == complete - endfamily - family gempak - task jgdas_gempak - trigger ../forecast/jgdas_forecast_high == complete - task jgdas_gempak_meta_ncdc - trigger ./jgdas_gempak == complete - endfamily - family post - task jgdas_post_manager - trigger ../forecast == active - event 1 release_postanl - event 2 release_post000 - event 3 release_post001 - event 4 release_post002 - event 5 release_post003 - event 6 release_post004 - event 7 release_post005 - event 8 release_post006 - event 9 release_post007 - event 10 release_post008 - event 11 release_post009 - task jgdas_post_anl - trigger ./jgdas_post_manager:release_postanl - edit FHRGRP '000' - edit FHRLST 'anl' - edit HR 'anl' - edit FHR 'anl' - event 1 release_pgrb2_anl - task jgdas_post_f000 - trigger ./jgdas_post_manager:release_post000 - edit FHR 'f000' - edit HR '000' - edit FHRGRP '001' - edit FHRLST 'f000' - task jgdas_post_f001 - trigger ./jgdas_post_manager:release_post001 - edit FHR 'f001' - edit HR '001' - edit FHRGRP '002' - edit FHRLST 'f001' - task jgdas_post_f002 - trigger ./jgdas_post_manager:release_post002 - edit FHR 'f002' - edit HR '002' - edit FHRGRP '003' - edit FHRLST 'f002' - task jgdas_post_f003 - trigger ./jgdas_post_manager:release_post003 - edit FHR 'f003' - edit HR '003' - edit FHRGRP '004' - edit FHRLST 'f003' - task jgdas_post_f004 - trigger ./jgdas_post_manager:release_post004 - edit FHR 'f004' - edit HR '004' - edit FHRGRP '005' - edit FHRLST 'f004' - task jgdas_post_f005 - trigger ./jgdas_post_manager:release_post005 - edit FHR 'f005' - edit HR '005' - edit FHRGRP '006' - edit FHRLST 'f005' - task jgdas_post_f006 - trigger ./jgdas_post_manager:release_post006 - edit FHR 'f006' - edit HR '006' - edit FHRGRP '007' - edit FHRLST 'f006' - task jgdas_post_f007 - trigger ./jgdas_post_manager:release_post007 - edit FHR 'f007' - edit HR '007' - edit FHRGRP '008' - edit FHRLST 'f007' - task jgdas_post_f008 - trigger ./jgdas_post_manager:release_post008 - edit FHR 'f008' - edit HR '008' - edit FHRGRP '009' - edit FHRLST 'f008' - task jgdas_post_f009 - trigger ./jgdas_post_manager:release_post009 - edit FHR 'f009' - edit HR '009' - edit FHRGRP '010' - edit FHRLST 'f009' - endfamily - family enkf - task jgdas_enkf_select_obs - trigger ../prep/jgdas_prep == complete - family innovate - trigger ./jgdas_enkf_select_obs == complete - task jgdas_enkf_innovate_obs_grp1 - edit ENSGRP '01' - task jgdas_enkf_innovate_obs_grp2 - edit ENSGRP '02' - task jgdas_enkf_innovate_obs_grp3 - edit ENSGRP '03' - task jgdas_enkf_innovate_obs_grp4 - edit ENSGRP '04' - task jgdas_enkf_innovate_obs_grp5 - edit ENSGRP '05' - task jgdas_enkf_innovate_obs_grp6 - edit ENSGRP '06' - task jgdas_enkf_innovate_obs_grp7 - edit ENSGRP '07' - task jgdas_enkf_innovate_obs_grp8 - edit ENSGRP '08' - task jgdas_enkf_innovate_obs_grp9 - edit ENSGRP '09' - task jgdas_enkf_innovate_obs_grp10 - edit ENSGRP '10' - endfamily - task jgdas_enkf_update - trigger ./innovate == complete - task jgdas_enkf_inflate_recenter - trigger ./jgdas_enkf_update == complete and ../analysis/jgdas_analysis_high == complete - family forecast - trigger ./jgdas_enkf_inflate_recenter == complete - task jgdas_enkf_fcst_grp1 - edit ENSGRP '01' - task jgdas_enkf_fcst_grp2 - edit ENSGRP '02' - task jgdas_enkf_fcst_grp3 - edit ENSGRP '03' - task jgdas_enkf_fcst_grp4 - edit ENSGRP '04' - task jgdas_enkf_fcst_grp5 - edit ENSGRP '05' - task jgdas_enkf_fcst_grp6 - edit ENSGRP '06' - task jgdas_enkf_fcst_grp7 - edit ENSGRP '07' - task jgdas_enkf_fcst_grp8 - edit ENSGRP '08' - task jgdas_enkf_fcst_grp9 - edit ENSGRP '09' - task jgdas_enkf_fcst_grp10 - edit ENSGRP '10' - task jgdas_enkf_fcst_grp11 - edit ENSGRP '11' - task jgdas_enkf_fcst_grp12 - edit ENSGRP '12' - task jgdas_enkf_fcst_grp13 - edit ENSGRP '13' - task jgdas_enkf_fcst_grp14 - edit ENSGRP '14' - task jgdas_enkf_fcst_grp15 - edit ENSGRP '15' - task jgdas_enkf_fcst_grp16 - edit ENSGRP '16' - task jgdas_enkf_fcst_grp17 - edit ENSGRP '17' - task jgdas_enkf_fcst_grp18 - edit ENSGRP '18' - task jgdas_enkf_fcst_grp19 - edit ENSGRP '19' - task jgdas_enkf_fcst_grp20 - edit ENSGRP '20' - endfamily - family post - trigger ./forecast == complete - task jgdas_enkf_post_f003 - edit FHMIN_EPOS '003' - edit FHMAX_EPOS '003' - edit FHOUT_EPOS '003' - task jgdas_enkf_post_f004 - edit FHMIN_EPOS '004' - edit FHMAX_EPOS '004' - edit FHOUT_EPOS '004' - task jgdas_enkf_post_f005 - edit FHMIN_EPOS '005' - edit FHMAX_EPOS '005' - edit FHOUT_EPOS '005' - task jgdas_enkf_post_f006 - edit FHMIN_EPOS '006' - edit FHMAX_EPOS '006' - edit FHOUT_EPOS '006' - task jgdas_enkf_post_f007 - edit FHMIN_EPOS '007' - edit FHMAX_EPOS '007' - edit FHOUT_EPOS '007' - task jgdas_enkf_post_f008 - edit FHMIN_EPOS '008' - edit FHMAX_EPOS '008' - edit FHOUT_EPOS '008' - task jgdas_enkf_post_f009 - edit FHMIN_EPOS '009' - edit FHMAX_EPOS '009' - edit FHOUT_EPOS '009' - endfamily - endfamily - task jgdas_verfrad - trigger enkf == complete - endfamily - diff --git a/ecflow/ecf/defs/para12_gdas_FV3.def b/ecflow/ecf/defs/para12_gdas_FV3.def deleted file mode 100644 index 952f6c6382..0000000000 --- a/ecflow/ecf/defs/para12_gdas_FV3.def +++ /dev/null @@ -1,247 +0,0 @@ - family gdas_FV3 - edit CYC '12' - edit ECF_FILES '/ecf/ecfnets/scripts/para/gdas_FV3' - edit PROJ 'GDAS-T2O' - edit NET 'gfs' - edit RUN 'gdas' - edit COM '/gpfs/dell1/nco/ops/com' - edit QUEUESHARED 'prod_shared' - edit QUEUESERV 'prod_transfer' - edit QUEUE 'prod' - edit ENVIR 'eval' - family dump - task jgdas_tropcy_qc_reloc - time 17:45 - task jgdas_dump - event 1 release_sfcprep - time 17:50 - task jgdas_dump_post - trigger jgdas_dump == complete - event 1 release_gdas12_dump_alert - task jgdas_dump_alert - trigger jgdas_dump_post:release_gdas12_dump_alert - task jmodel_realtime_gdas - trigger jgdas_dump_alert == complete - endfamily - family prep - task jgdas_emcsfc_sfc_prep - trigger ../dump/jgdas_dump:release_sfcprep - task jgdas_prep - trigger ../dump/jgdas_dump == complete and ../dump/jgdas_tropcy_qc_reloc == complete - task jgdas_prep_post - trigger jgdas_prep == complete and ../analysis/jgdas_analysis_high == complete - endfamily - family analysis - task jgdas_analysis_high - trigger ../prep/jgdas_prep == complete and ../prep/jgdas_emcsfc_sfc_prep == complete - event 1 release_fcst - endfamily - task jgdas_vminmon - trigger analysis/jgdas_analysis_high == complete - family forecast - task jgdas_forecast_high - trigger ../analysis/jgdas_analysis_high:release_fcst - endfamily - family post_processing - family bulletins - task jgdas_mknavybulls - trigger ../../post == complete - endfamily - endfamily - family gempak - task jgdas_gempak - trigger ../forecast/jgdas_forecast_high == complete - task jgdas_gempak_meta_ncdc - trigger ./jgdas_gempak == complete - endfamily - family post - task jgdas_post_manager - trigger ../forecast == active - event 1 release_postanl - event 2 release_post000 - event 3 release_post001 - event 4 release_post002 - event 5 release_post003 - event 6 release_post004 - event 7 release_post005 - event 8 release_post006 - event 9 release_post007 - event 10 release_post008 - event 11 release_post009 - task jgdas_post_anl - trigger ./jgdas_post_manager:release_postanl - edit FHRGRP '000' - edit FHRLST 'anl' - edit HR 'anl' - edit FHR 'anl' - event 1 release_pgrb2_anl - task jgdas_post_f000 - trigger ./jgdas_post_manager:release_post000 - edit FHR 'f000' - edit HR '000' - edit FHRGRP '001' - edit FHRLST 'f000' - task jgdas_post_f001 - trigger ./jgdas_post_manager:release_post001 - edit FHR 'f001' - edit HR '001' - edit FHRGRP '002' - edit FHRLST 'f001' - task jgdas_post_f002 - trigger ./jgdas_post_manager:release_post002 - edit FHR 'f002' - edit HR '002' - edit FHRGRP '003' - edit FHRLST 'f002' - task jgdas_post_f003 - trigger ./jgdas_post_manager:release_post003 - edit FHR 'f003' - edit HR '003' - edit FHRGRP '004' - edit FHRLST 'f003' - task jgdas_post_f004 - trigger ./jgdas_post_manager:release_post004 - edit FHR 'f004' - edit HR '004' - edit FHRGRP '005' - edit FHRLST 'f004' - task jgdas_post_f005 - trigger ./jgdas_post_manager:release_post005 - edit FHR 'f005' - edit HR '005' - edit FHRGRP '006' - edit FHRLST 'f005' - task jgdas_post_f006 - trigger ./jgdas_post_manager:release_post006 - edit FHR 'f006' - edit HR '006' - edit FHRGRP '007' - edit FHRLST 'f006' - task jgdas_post_f007 - trigger ./jgdas_post_manager:release_post007 - edit FHR 'f007' - edit HR '007' - edit FHRGRP '008' - edit FHRLST 'f007' - task jgdas_post_f008 - trigger ./jgdas_post_manager:release_post008 - edit FHR 'f008' - edit HR '008' - edit FHRGRP '009' - edit FHRLST 'f008' - task jgdas_post_f009 - trigger ./jgdas_post_manager:release_post009 - edit FHR 'f009' - edit HR '009' - edit FHRGRP '010' - edit FHRLST 'f009' - endfamily - family enkf - task jgdas_enkf_select_obs - trigger ../prep/jgdas_prep == complete - family innovate - trigger ./jgdas_enkf_select_obs == complete - task jgdas_enkf_innovate_obs_grp1 - edit ENSGRP '01' - task jgdas_enkf_innovate_obs_grp2 - edit ENSGRP '02' - task jgdas_enkf_innovate_obs_grp3 - edit ENSGRP '03' - task jgdas_enkf_innovate_obs_grp4 - edit ENSGRP '04' - task jgdas_enkf_innovate_obs_grp5 - edit ENSGRP '05' - task jgdas_enkf_innovate_obs_grp6 - edit ENSGRP '06' - task jgdas_enkf_innovate_obs_grp7 - edit ENSGRP '07' - task jgdas_enkf_innovate_obs_grp8 - edit ENSGRP '08' - task jgdas_enkf_innovate_obs_grp9 - edit ENSGRP '09' - task jgdas_enkf_innovate_obs_grp10 - edit ENSGRP '10' - endfamily - task jgdas_enkf_update - trigger ./innovate == complete - task jgdas_enkf_inflate_recenter - trigger ./jgdas_enkf_update == complete and ../analysis/jgdas_analysis_high == complete - family forecast - trigger ./jgdas_enkf_inflate_recenter == complete - task jgdas_enkf_fcst_grp1 - edit ENSGRP '01' - task jgdas_enkf_fcst_grp2 - edit ENSGRP '02' - task jgdas_enkf_fcst_grp3 - edit ENSGRP '03' - task jgdas_enkf_fcst_grp4 - edit ENSGRP '04' - task jgdas_enkf_fcst_grp5 - edit ENSGRP '05' - task jgdas_enkf_fcst_grp6 - edit ENSGRP '06' - task jgdas_enkf_fcst_grp7 - edit ENSGRP '07' - task jgdas_enkf_fcst_grp8 - edit ENSGRP '08' - task jgdas_enkf_fcst_grp9 - edit ENSGRP '09' - task jgdas_enkf_fcst_grp10 - edit ENSGRP '10' - task jgdas_enkf_fcst_grp11 - edit ENSGRP '11' - task jgdas_enkf_fcst_grp12 - edit ENSGRP '12' - task jgdas_enkf_fcst_grp13 - edit ENSGRP '13' - task jgdas_enkf_fcst_grp14 - edit ENSGRP '14' - task jgdas_enkf_fcst_grp15 - edit ENSGRP '15' - task jgdas_enkf_fcst_grp16 - edit ENSGRP '16' - task jgdas_enkf_fcst_grp17 - edit ENSGRP '17' - task jgdas_enkf_fcst_grp18 - edit ENSGRP '18' - task jgdas_enkf_fcst_grp19 - edit ENSGRP '19' - task jgdas_enkf_fcst_grp20 - edit ENSGRP '20' - endfamily - family post - trigger ./forecast == complete - task jgdas_enkf_post_f003 - edit FHMIN_EPOS '003' - edit FHMAX_EPOS '003' - edit FHOUT_EPOS '003' - task jgdas_enkf_post_f004 - edit FHMIN_EPOS '004' - edit FHMAX_EPOS '004' - edit FHOUT_EPOS '004' - task jgdas_enkf_post_f005 - edit FHMIN_EPOS '005' - edit FHMAX_EPOS '005' - edit FHOUT_EPOS '005' - task jgdas_enkf_post_f006 - edit FHMIN_EPOS '006' - edit FHMAX_EPOS '006' - edit FHOUT_EPOS '006' - task jgdas_enkf_post_f007 - edit FHMIN_EPOS '007' - edit FHMAX_EPOS '007' - edit FHOUT_EPOS '007' - task jgdas_enkf_post_f008 - edit FHMIN_EPOS '008' - edit FHMAX_EPOS '008' - edit FHOUT_EPOS '008' - task jgdas_enkf_post_f009 - edit FHMIN_EPOS '009' - edit FHMAX_EPOS '009' - edit FHOUT_EPOS '009' - endfamily - endfamily - task jgdas_verfrad - trigger enkf == complete - endfamily - diff --git a/ecflow/ecf/defs/para18_gdas_FV3.def b/ecflow/ecf/defs/para18_gdas_FV3.def deleted file mode 100644 index 84fef9b5e5..0000000000 --- a/ecflow/ecf/defs/para18_gdas_FV3.def +++ /dev/null @@ -1,245 +0,0 @@ - family gdas_FV3 - edit CYC '18' - edit ECF_FILES '/ecf/ecfnets/scripts/para/gdas_FV3' - edit PROJ 'GDAS-T2O' - edit NET 'gfs' - edit RUN 'gdas' - edit COM '/gpfs/dell1/nco/ops/com' - edit QUEUESHARED 'prod_shared' - edit QUEUESERV 'prod_transfer' - edit QUEUE 'prod' - edit ENVIR 'eval' - family dump - task jgdas_tropcy_qc_reloc - time 23:45 - task jgdas_dump - event 1 release_sfcprep - time 23:50 - task jgdas_dump_post - trigger jgdas_dump == complete - event 1 release_gdas18_dump_alert - task jgdas_dump_alert - trigger jgdas_dump_post:release_gdas18_dump_alert - task jmodel_realtime_gdas - trigger jgdas_dump_alert == complete - endfamily - family prep - task jgdas_emcsfc_sfc_prep - trigger ../dump/jgdas_dump:release_sfcprep - task jgdas_prep - trigger ../dump/jgdas_dump == complete and ../dump/jgdas_tropcy_qc_reloc == complete - task jgdas_prep_post - trigger jgdas_prep == complete and ../analysis/jgdas_analysis_high == complete - endfamily - family analysis - task jgdas_analysis_high - trigger ../prep/jgdas_prep == complete and ../prep/jgdas_emcsfc_sfc_prep == complete - event 1 release_fcst - endfamily - task jgdas_vminmon - trigger analysis/jgdas_analysis_high == complete - family forecast - task jgdas_forecast_high - trigger ../analysis/jgdas_analysis_high:release_fcst and ../enkf/innovate == complete - endfamily - family post_processing - task jgdas_tropc - trigger ../post == complete - endfamily - family gempak - task jgdas_gempak - trigger ../forecast/jgdas_forecast_high == complete - task jgdas_gempak_meta_ncdc - trigger ./jgdas_gempak == complete - endfamily - family post - task jgdas_post_manager - trigger ../forecast == active - event 1 release_postanl - event 2 release_post000 - event 3 release_post001 - event 4 release_post002 - event 5 release_post003 - event 6 release_post004 - event 7 release_post005 - event 8 release_post006 - event 9 release_post007 - event 10 release_post008 - event 11 release_post009 - task jgdas_post_anl - trigger ./jgdas_post_manager:release_postanl - edit FHRGRP '000' - edit FHRLST 'anl' - edit HR 'anl' - edit FHR 'anl' - event 1 release_pgrb2_anl - task jgdas_post_f000 - trigger ./jgdas_post_manager:release_post000 - edit FHR 'f000' - edit HR '000' - edit FHRGRP '001' - edit FHRLST 'f000' - task jgdas_post_f001 - trigger ./jgdas_post_manager:release_post001 - edit FHR 'f001' - edit HR '001' - edit FHRGRP '002' - edit FHRLST 'f001' - task jgdas_post_f002 - trigger ./jgdas_post_manager:release_post002 - edit FHR 'f002' - edit HR '002' - edit FHRGRP '003' - edit FHRLST 'f002' - task jgdas_post_f003 - trigger ./jgdas_post_manager:release_post003 - edit FHR 'f003' - edit HR '003' - edit FHRGRP '004' - edit FHRLST 'f003' - task jgdas_post_f004 - trigger ./jgdas_post_manager:release_post004 - edit FHR 'f004' - edit HR '004' - edit FHRGRP '005' - edit FHRLST 'f004' - task jgdas_post_f005 - trigger ./jgdas_post_manager:release_post005 - edit FHR 'f005' - edit HR '005' - edit FHRGRP '006' - edit FHRLST 'f005' - task jgdas_post_f006 - trigger ./jgdas_post_manager:release_post006 - edit FHR 'f006' - edit HR '006' - edit FHRGRP '007' - edit FHRLST 'f006' - task jgdas_post_f007 - trigger ./jgdas_post_manager:release_post007 - edit FHR 'f007' - edit HR '007' - edit FHRGRP '008' - edit FHRLST 'f007' - task jgdas_post_f008 - trigger ./jgdas_post_manager:release_post008 - edit FHR 'f008' - edit HR '008' - edit FHRGRP '009' - edit FHRLST 'f008' - task jgdas_post_f009 - trigger ./jgdas_post_manager:release_post009 - edit FHR 'f009' - edit HR '009' - edit FHRGRP '010' - edit FHRLST 'f009' - endfamily - family enkf - task jgdas_enkf_select_obs - trigger ../prep/jgdas_prep == complete - family innovate - trigger ./jgdas_enkf_select_obs == complete - task jgdas_enkf_innovate_obs_grp1 - edit ENSGRP '01' - task jgdas_enkf_innovate_obs_grp2 - edit ENSGRP '02' - task jgdas_enkf_innovate_obs_grp3 - edit ENSGRP '03' - task jgdas_enkf_innovate_obs_grp4 - edit ENSGRP '04' - task jgdas_enkf_innovate_obs_grp5 - edit ENSGRP '05' - task jgdas_enkf_innovate_obs_grp6 - edit ENSGRP '06' - task jgdas_enkf_innovate_obs_grp7 - edit ENSGRP '07' - task jgdas_enkf_innovate_obs_grp8 - edit ENSGRP '08' - task jgdas_enkf_innovate_obs_grp9 - edit ENSGRP '09' - task jgdas_enkf_innovate_obs_grp10 - edit ENSGRP '10' - endfamily - task jgdas_enkf_update - trigger ./innovate == complete - task jgdas_enkf_inflate_recenter - trigger ./jgdas_enkf_update == complete and ../analysis/jgdas_analysis_high == complete - family forecast - trigger ./jgdas_enkf_inflate_recenter == complete - task jgdas_enkf_fcst_grp1 - edit ENSGRP '01' - task jgdas_enkf_fcst_grp2 - edit ENSGRP '02' - task jgdas_enkf_fcst_grp3 - edit ENSGRP '03' - task jgdas_enkf_fcst_grp4 - edit ENSGRP '04' - task jgdas_enkf_fcst_grp5 - edit ENSGRP '05' - task jgdas_enkf_fcst_grp6 - edit ENSGRP '06' - task jgdas_enkf_fcst_grp7 - edit ENSGRP '07' - task jgdas_enkf_fcst_grp8 - edit ENSGRP '08' - task jgdas_enkf_fcst_grp9 - edit ENSGRP '09' - task jgdas_enkf_fcst_grp10 - edit ENSGRP '10' - task jgdas_enkf_fcst_grp11 - edit ENSGRP '11' - task jgdas_enkf_fcst_grp12 - edit ENSGRP '12' - task jgdas_enkf_fcst_grp13 - edit ENSGRP '13' - task jgdas_enkf_fcst_grp14 - edit ENSGRP '14' - task jgdas_enkf_fcst_grp15 - edit ENSGRP '15' - task jgdas_enkf_fcst_grp16 - edit ENSGRP '16' - task jgdas_enkf_fcst_grp17 - edit ENSGRP '17' - task jgdas_enkf_fcst_grp18 - edit ENSGRP '18' - task jgdas_enkf_fcst_grp19 - edit ENSGRP '19' - task jgdas_enkf_fcst_grp20 - edit ENSGRP '20' - endfamily - family post - trigger ./forecast == complete - task jgdas_enkf_post_f003 - edit FHMIN_EPOS '003' - edit FHMAX_EPOS '003' - edit FHOUT_EPOS '003' - task jgdas_enkf_post_f004 - edit FHMIN_EPOS '004' - edit FHMAX_EPOS '004' - edit FHOUT_EPOS '004' - task jgdas_enkf_post_f005 - edit FHMIN_EPOS '005' - edit FHMAX_EPOS '005' - edit FHOUT_EPOS '005' - task jgdas_enkf_post_f006 - edit FHMIN_EPOS '006' - edit FHMAX_EPOS '006' - edit FHOUT_EPOS '006' - task jgdas_enkf_post_f007 - edit FHMIN_EPOS '007' - edit FHMAX_EPOS '007' - edit FHOUT_EPOS '007' - task jgdas_enkf_post_f008 - edit FHMIN_EPOS '008' - edit FHMAX_EPOS '008' - edit FHOUT_EPOS '008' - task jgdas_enkf_post_f009 - edit FHMIN_EPOS '009' - edit FHMAX_EPOS '009' - edit FHOUT_EPOS '009' - endfamily - endfamily - task jgdas_verfrad - trigger enkf == complete - endfamily - diff --git a/ecflow/ecf/include/envir-p1-old.h b/ecflow/ecf/include/envir-p1-old.h deleted file mode 100644 index ece7cccbfb..0000000000 --- a/ecflow/ecf/include/envir-p1-old.h +++ /dev/null @@ -1,57 +0,0 @@ -# envir-p1.h -export job=${job:-$LSB_JOBNAME} #Can't use $job in filenames! -export jobid=${jobid:-$job.$LSB_JOBID} - -export RUN_ENVIR=${RUN_ENVIR:-nco} -export envir=%ENVIR% -export SENDDBN=${SENDDBN:-%SENDDBN:YES%} -export SENDDBN_NTC=${SENDDBN_NTC:-%SENDDBN_NTC:YES%} - -module load prod_envir prod_util - -case $envir in - prod) - export jlogfile=${jlogfile:-${COMROOT}/logs/jlogfiles/jlogfile.${jobid}} - export DATAROOT=${DATAROOT:-/tmpnwprd1} - if [ "$SENDDBN" == "YES" ]; then - export DBNROOT=/iodprod/dbnet_siphon # previously set in .bash_profile - else - export DBNROOT=${UTILROOT}/fakedbn - fi - ;; - eval) - export envir=para - export jlogfile=${jlogfile:-${COMROOT}/logs/${envir}/jlogfile} - export DATAROOT=${DATAROOT:-/tmpnwprd2} - if [ "$SENDDBN" == "YES" ]; then - export DBNROOT=${UTILROOT}/para_dbn - SENDDBN_NTC=NO - else - export DBNROOT=${UTILROOT}/fakedbn - fi - ;; - para|test) - export jlogfile=${jlogfile:-${COMROOT}/logs/${envir}/jlogfile} - export DATAROOT=${DATAROOT:-/tmpnwprd2} - export DBNROOT=${UTILROOT}/fakedbn - ;; - *) - ecflow_client --abort="ENVIR must be prod, para, eval, or test [envir.h]" - exit - ;; -esac - -export NWROOT=/nw${envir} -export COMROOT=/com -export PCOMROOT=/pcom/${envir} -export SENDECF=${SENDECF:-YES} -export SENDCOM=${SENDCOM:-YES} -export KEEPDATA=${KEEPDATA:-%KEEPDATA:NO%} - -# The following two lines are deprecated (only in the "old" header) -export DCOMROOT=/dcom/us007003 # previously set to /dcom in .bash_profile -export UTILROOT=/nwprod/util - -if [ -n "%PDY:%" ]; then export PDY=${PDY:-%PDY:%}; fi -if [ -n "%MAILTO:%" ]; then export MAILTO=${MAILTO:-%MAILTO:%}; fi -if [ -n "%DBNLOG:%" ]; then export DBNLOG=${DBNLOG:-%DBNLOG:%}; fi diff --git a/ecflow/ecf/include/envir-p3.h b/ecflow/ecf/include/envir-p3.h deleted file mode 100644 index 1ea81cc705..0000000000 --- a/ecflow/ecf/include/envir-p3.h +++ /dev/null @@ -1,52 +0,0 @@ -# envir-p3.h -export job=${job:-$LSB_JOBNAME} #Can't use $job in filenames! -export jobid=${jobid:-$job.$LSB_JOBID} - -export RUN_ENVIR=${RUN_ENVIR:-nco} -export envir=%ENVIR% -export SENDDBN=${SENDDBN:-%SENDDBN:YES%} -export SENDDBN_NTC=${SENDDBN_NTC:-%SENDDBN_NTC:YES%} -FILESYSTEMROOT=/gpfs/%FILESYSTEM:dell1% - -module load prod_envir/%prod_envir_ver% prod_util/%prod_util_ver% - -case $envir in - prod) - export DATAROOT=${DATAROOT:-${FILESYSTEMROOT}/nco/ops/tmpnwprd} - if [ "$SENDDBN" == "YES" ]; then - export DBNROOT=/iodprod_dell/dbnet_siphon - else - export DBNROOT=${UTILROOT}/fakedbn - fi - ;; - eval) - export envir=para - export DATAROOT=${DATAROOT:-${FILESYSTEMROOT}/nco/ops/tmpnwprd} - if [ "$SENDDBN" == "YES" ]; then - export DBNROOT=${UTILROOT}/para_dbn - SENDDBN_NTC=NO - else - export DBNROOT=${UTILROOT}/fakedbn - fi - ;; - para|test) - export DATAROOT=${DATAROOT:-${FILESYSTEMROOT}/nco/ops/tmpnwprd} - export DBNROOT=${UTILROOT}/fakedbn - ;; - *) - ecflow_client --abort="ENVIR must be prod, para, eval, or test [envir.h]" - exit - ;; -esac - -export COMROOT=${FILESYSTEMROOT}/nco/ops/com -export COREROOT=${FILESYSTEMROOT}/ptmp/production.core/$jobid -export NWROOT=/gpfs/dell1/nco/ops/nw${envir} -export SENDECF=${SENDECF:-YES} -export SENDCOM=${SENDCOM:-YES} -export KEEPDATA=${KEEPDATA:-%KEEPDATA:NO%} - -if [ -n "%PDY:%" ]; then export PDY=${PDY:-%PDY:%}; fi -if [ -n "%COMPATH:%" ]; then export COMPATH=${COMPATH:-%COMPATH:%}; fi -if [ -n "%MAILTO:%" ]; then export MAILTO=${MAILTO:-%MAILTO:%}; fi -if [ -n "%DBNLOG:%" ]; then export DBNLOG=${DBNLOG:-%DBNLOG:%}; fi diff --git a/ecflow/ecf/include/head.h b/ecflow/ecf/include/head.h deleted file mode 100644 index 48efa72bcb..0000000000 --- a/ecflow/ecf/include/head.h +++ /dev/null @@ -1,58 +0,0 @@ -set -xe # print commands as they are executed and enable signal trapping - -export PS4='+ $SECONDS + ' - -# Variables needed for communication with ecFlow -export ECF_NAME=%ECF_NAME% -#export ECF_HOST=%ECF_HOST% -export ECF_HOST=%ECF_LOGHOST% -export ECF_PORT=%ECF_PORT% -export ECF_PASS=%ECF_PASS% -export ECF_TRYNO=%ECF_TRYNO% -export ECF_RID=$LSB_JOBID - -# Tell ecFlow we have started -# POST_OUT variable enables LSF post_exec to communicate with ecFlow -if [ -d /opt/modules ]; then - # WCOSS TO4 (Cray XC40) - . /opt/modules/default/init/sh - module load ecflow - POST_OUT=/gpfs/hps/tmpfs/ecflow/ecflow_post_in.$LSB_BATCH_JID -elif [ -d /usrx/local/Modules ]; then - # WCOSS Phase 1 & 2 (IBM iDataPlex) - . /usrx/local/Modules/default/init/sh - module load ecflow - POST_OUT=/var/lsf/ecflow_post_in.$LSB_BATCH_JID -else - # WCOSS Phase 3 (Dell PowerEdge) - . /usrx/local/prod/lmod/lmod/init/sh - module load ips/18.0.1.163 ecflow/%ECF_VERSION% - POST_OUT=/var/lsf/ecflow_post_in.$USER.$LSB_BATCH_JID -fi -ecflow_client --init=${ECF_RID} - -cat > $POST_OUT <>$POST_OUT - trap $1; exit $1 -} -# Trap all error and exit signals -trap 'ERROR $?' ERR EXIT - diff --git a/ecflow/ecf/include/model_ver.h b/ecflow/ecf/include/model_ver.h deleted file mode 100644 index 7db8c034a7..0000000000 --- a/ecflow/ecf/include/model_ver.h +++ /dev/null @@ -1,2 +0,0 @@ -. ${NWROOT:?}/versions/${model:?}.ver -eval export HOME${model}=${NWROOT}/${model}.\${${model}_ver:?} diff --git a/ecflow/ecf/include/tail.h b/ecflow/ecf/include/tail.h deleted file mode 100644 index 1cdbe951a0..0000000000 --- a/ecflow/ecf/include/tail.h +++ /dev/null @@ -1,3 +0,0 @@ -ecflow_client --complete # Notify ecFlow of a normal end -trap 0 # Remove all traps -exit 0 # End the shell diff --git a/ecflow/ecf/scripts/gdas_FV3/analysis/jgdas_analysis_high.ecf b/ecflow/ecf/scripts/gdas_FV3/analysis/jgdas_analysis_high.ecf deleted file mode 100755 index f57ba2682e..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/analysis/jgdas_analysis_high.ecf +++ /dev/null @@ -1,60 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_analysis_high_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_analysis_high_%CYC%.o%J -#BSUB -W 1:00 -#BSUB -n 480 -#BSUB -R affinity[core(14)] -#BSUB -R span[ptile=2] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export PREINP=${CDUMP}.${cycle}. - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_ANALYSIS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/dump/jgdas_dump.ecf b/ecflow/ecf/scripts/gdas_FV3/dump/jgdas_dump.ecf deleted file mode 100755 index c01733c8e5..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/dump/jgdas_dump.ecf +++ /dev/null @@ -1,60 +0,0 @@ -#BSUB -J %E%%RUN%_dump_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/%RUN%_dump_%CYC%.o%J -#BSUB -cwd /tmp -#BSUB -q %QUEUE% -#BSUB -W 00:15 -#BSUB -L /bin/sh -#BSUB -P %PROJ% -#BSUB -n 14 -#BSUB -R span[ptile=14] -#BSUB -R affinity[core(1):distribute=balance] - -%include -%include - -set -x - -export model=obsproc_global -%include - -############################################################# -## Load modules -############################################################## -#. $MODULESHOME/init/sh -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load CFP/$cfp_ver - -module load grib_util/${grib_util_ver} -module list - -############################################################# -## WCOSS_C environment settings -############################################################## - -################################################ -# EXPORT list here - -set -x -export cyc=%CYC% - -# CALL executable job script here -${HOMEobsproc_global}/jobs/JGLOBAL_DUMP - -%include -%manual -###################################################################### -# Purpose: -# -# -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/dump/jgdas_dump_alert.ecf b/ecflow/ecf/scripts/gdas_FV3/dump/jgdas_dump_alert.ecf deleted file mode 100755 index a12461eb3f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/dump/jgdas_dump_alert.ecf +++ /dev/null @@ -1,53 +0,0 @@ -#BSUB -J %E%gdas_dump_alert_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_dump_alert_%CYC%.o%J -#BSUB -L /bin/sh -#BSUB -q %QUEUESERV% -#BSUB -R rusage[mem=1000] -#BSUB -R affinity[core] -#BSUB -cwd /tmp -#BSUB -W 00:05 -#BSUB -P %PROJ% - -%include -%include - -set -x - -export model=obsproc_dump_alert -%include - -############################################################# -# Load modules -############################################################# -#. $MODULESHOME/init/sh -module list - -############################################################# -# WCOSS environment settings -############################################################# - -# EXPORT list here - -set -x -export cyc=%CYC% -export NET=gfs -export RUN=gdas - -# CALL executable job script here -$HOMEobsproc_dump_alert/jobs/JDUMP_ALERT - -%include -%manual -###################################################################### -# Purpose: Job to execute the gfs data dump alert processing for the -# 00Z cycle -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/dump/jgdas_dump_post.ecf b/ecflow/ecf/scripts/gdas_FV3/dump/jgdas_dump_post.ecf deleted file mode 100755 index c42264bf49..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/dump/jgdas_dump_post.ecf +++ /dev/null @@ -1,61 +0,0 @@ -#BSUB -J %E%%RUN%_dump_post_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/%RUN%_dump_post_%CYC%.o%J -#BSUB -L /bin/sh -#BSUB -q %QUEUE% -#BSUB -cwd /tmp -#BSUB -W 00:10 -#BSUB -P %PROJ% -#BSUB -n 14 -#BSUB -R span[ptile=14] -#BSUB -R affinity[core(1):distribute=balance] - -%include -%include - -set -x - -export model=obsproc_global -%include - -############################################################# -## Load modules -############################################################## -# . $MODULESHOME/init/sh -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load CFP/$cfp_ver -module list - -############################################################# -## WCOSS_C environment settings -############################################################## - -################################################ -# EXPORT list here - -set -x -export cyc=%CYC% - -#export PROCESS_DATACOUNTS=NO - -# CALL executable job script here -$HOMEobsproc_global/jobs/JGLOBAL_DUMP_POST - -%include -%manual -###################################################################### -# Purpose: Job to execute the gfs data dump post-processing for the -# 00Z cycle (listing contents of dump files; conversion -# of dump file format) -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -%end - diff --git a/ecflow/ecf/scripts/gdas_FV3/dump/jgdas_tcvital_copy.ecf b/ecflow/ecf/scripts/gdas_FV3/dump/jgdas_tcvital_copy.ecf deleted file mode 100755 index e8e15c46b0..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/dump/jgdas_tcvital_copy.ecf +++ /dev/null @@ -1,53 +0,0 @@ -#BSUB -J %E%gdas_tcvital_copy_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_tcvital_copy_%CYC%.o%J -#BSUB -e %COM%/output/%ENVIR%/today/gdas_tcvital_copy_%CYC%.o%J -#BSUB -cwd /tmp -#BSUB -R rusage[mem=1000]; -R span[ptile=1]; -R affinity[core] -#BSUB -n 1 -#BSUB -q %QUEUESERV% -#BSUB -W 00:15 -#BSUB -L /bin/sh -#BSUB -P %PROJ% - -%include -%include - -# EXPORT list here -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load CFP/$cfp_ver - -set -x -export cyc=%CYC% -export mod=nhc -export RUN=gdas - -# CALL executable job script here -VERSION_FILE=$NWROOT/versions/gfs.ver -if [ -f $VERSION_FILE ]; then - . $VERSION_FILE -else - ecflow_client --msg="***JOB ${ECF_NAME} ERROR: Version File $VERSION_FILE does not exist ***" - ecflow_client --abort - exit -fi - -$NWROOT/gdas.${gdas_ver}/jobs/JTCVITAL_COPY - -%include -%manual -###################################################################### -# Purpose: -# -# -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/dump/jgdas_tcvital_prod.ecf b/ecflow/ecf/scripts/gdas_FV3/dump/jgdas_tcvital_prod.ecf deleted file mode 100755 index 4bd2d49886..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/dump/jgdas_tcvital_prod.ecf +++ /dev/null @@ -1,52 +0,0 @@ -#BSUB -J %E%gdas_tcvital_prod_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_tcvital_prod_%CYC%.o%J -#BSUB -e %COM%/output/%ENVIR%/today/gdas_tcvital_prod_%CYC%.o%J -#BSUB -cwd /tmp -#BSUB -R rusage[mem=1000]; -R span[ptile=1]; -R affinity[core] -#BSUB -n 1 -#BSUB -q %QUEUESERV% -#BSUB -W 00:15 -#BSUB -L /bin/sh -#BSUB -P %PROJ% - -%include -%include - -# EXPORT list here -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load CFP/$cfp_ver - -set -x -export cyc=%CYC% -export RUN=gdas - -# CALL executable job script here -VERSION_FILE=$NWROOT/versions/gfs.ver -if [ -f $VERSION_FILE ]; then - . $VERSION_FILE -else - ecflow_client --msg="***JOB ${ECF_NAME} ERROR: Version File $VERSION_FILE does not exist ***" - ecflow_client --abort - exit -fi - -$NWROOT/gdas.${gdas_ver}/jobs/JTCVITAL_COPY - -%include -%manual -###################################################################### -# Purpose: -# -# -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/dump/jgdas_tropcy_qc_reloc.ecf b/ecflow/ecf/scripts/gdas_FV3/dump/jgdas_tropcy_qc_reloc.ecf deleted file mode 100755 index 412c69f511..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/dump/jgdas_tropcy_qc_reloc.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_tropcy_qc_reloc_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_tropcy_qc_reloc_%CYC%.o%J -#BSUB -W 0:05 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export PROCESS_TROPCY=YES -export DO_RELOCATE=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_TROPCY_QC_RELOC - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/dump/jmodel_realtime_gdas.ecf b/ecflow/ecf/scripts/gdas_FV3/dump/jmodel_realtime_gdas.ecf deleted file mode 100755 index 7cd142a51c..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/dump/jmodel_realtime_gdas.ecf +++ /dev/null @@ -1,53 +0,0 @@ -#BSUB -J %E%model_realtime_gdas_%CYC% -#BSUB -o /com/output/%ENVIR%/today/model_realtime_gdas_%CYC%.o%J -#BSUB -e /com/output/%ENVIR%/today/model_realtime_gdas_%CYC%.o%J -#BSUB -L /bin/sh -#BSUB -q prod_serv2 -#BSUB -cwd /tmp -#BSUB -W 00:10 -#BSUB -R rusage[mem=500] -#BSUB -R affinity[core] -#BSUB -R "span[ptile=8]" -#BSUB -n 16 -#BSUB -P %PROJ% -#BSUB -a poe -##BSUB MP_TASK_AFFINITY=cpu:1 - -%include -%include - -# EXPORT list here -set -x -export NET=gfs -export RUNM=gdas -export cyc=%CYC% - -export job=model_realtime_${NET}_${cyc} -export output=/com/output/${envir}/today/model_realtime_${NET}_${cyc} -export error=/com/output/${envir}/today/model_realtime_${NET}_${cyc} - -# CALL executable job script here -VERSION_FILE=/nw${envir}/versions/models_realtime.ver -if [ -f $VERSION_FILE ]; then - . $VERSION_FILE -else - ecflow_client --msg="***JOB ${ECFNAME} ERROR: Version File $VERSION_FILE does not exist ***" - ecflow_client --abort - exit -fi - -/nw${envir}/models_realtime.${code_ver}/jobs/JMODELS_REALTIME - -%include -%manual -###################################################################### -# PURPOSE: To read the hourly and its monthly mean data dump counts and compares -# to the monthly averages. -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp1.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp1.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp1.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp10.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp10.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp10.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp11.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp11.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp11.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp12.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp12.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp12.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp13.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp13.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp13.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp14.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp14.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp14.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp15.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp15.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp15.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp16.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp16.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp16.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp17.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp17.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp17.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp18.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp18.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp18.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp19.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp19.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp19.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp2.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp2.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp2.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp20.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp20.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp20.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp3.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp3.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp3.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp4.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp4.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp4.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp5.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp5.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp5.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp6.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp6.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp6.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp7.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp7.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp7.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp8.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp8.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp8.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp9.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp9.ecf deleted file mode 100755 index 991f2dde2f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/forecast/jgdas_enkf_fcst_grp9.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_fcst_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_fcst_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 168 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_FCST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp1.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp1.ecf deleted file mode 100755 index 8a861deef0..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp1.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_innovate_obs_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_innovate_obs_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:30 -#BSUB -n 140 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_ENKF_INNOVATE_OBS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp10.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp10.ecf deleted file mode 100755 index 8a861deef0..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp10.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_innovate_obs_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_innovate_obs_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:30 -#BSUB -n 140 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_ENKF_INNOVATE_OBS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp2.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp2.ecf deleted file mode 100755 index 8a861deef0..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp2.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_innovate_obs_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_innovate_obs_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:30 -#BSUB -n 140 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_ENKF_INNOVATE_OBS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp3.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp3.ecf deleted file mode 100755 index 8a861deef0..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp3.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_innovate_obs_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_innovate_obs_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:30 -#BSUB -n 140 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_ENKF_INNOVATE_OBS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp4.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp4.ecf deleted file mode 100755 index 8a861deef0..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp4.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_innovate_obs_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_innovate_obs_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:30 -#BSUB -n 140 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_ENKF_INNOVATE_OBS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp5.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp5.ecf deleted file mode 100755 index 8a861deef0..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp5.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_innovate_obs_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_innovate_obs_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:30 -#BSUB -n 140 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_ENKF_INNOVATE_OBS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp6.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp6.ecf deleted file mode 100755 index 8a861deef0..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp6.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_innovate_obs_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_innovate_obs_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:30 -#BSUB -n 140 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_ENKF_INNOVATE_OBS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp7.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp7.ecf deleted file mode 100755 index 8a861deef0..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp7.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_innovate_obs_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_innovate_obs_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:30 -#BSUB -n 140 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_ENKF_INNOVATE_OBS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp8.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp8.ecf deleted file mode 100755 index 8a861deef0..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp8.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_innovate_obs_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_innovate_obs_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:30 -#BSUB -n 140 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_ENKF_INNOVATE_OBS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp9.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp9.ecf deleted file mode 100755 index 8a861deef0..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/innovate/jgdas_enkf_innovate_obs_grp9.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_innovate_obs_%ENSGRP%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_innovate_obs_%ENSGRP%_%CYC%.o%J -#BSUB -W 0:30 -#BSUB -n 140 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export ENSGRP=%ENSGRP% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_ENKF_INNOVATE_OBS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/jgdas_enkf_inflate_recenter.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/jgdas_enkf_inflate_recenter.ecf deleted file mode 100755 index 34149727cd..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/jgdas_enkf_inflate_recenter.ecf +++ /dev/null @@ -1,56 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_inflate_recenter_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_inflate_recenter_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 80 -#BSUB -R affinity[core(7)] -#BSUB -R span[ptile=4] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load NetCDF/$NetCDF_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_ENKF_RECENTER - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/jgdas_enkf_select_obs.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/jgdas_enkf_select_obs.ecf deleted file mode 100755 index d5f4fa5916..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/jgdas_enkf_select_obs.ecf +++ /dev/null @@ -1,56 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_select_obs_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_select_obs_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 140 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_ENKF_SELECT_OBS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/jgdas_enkf_update.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/jgdas_enkf_update.ecf deleted file mode 100755 index b96d6de93f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/jgdas_enkf_update.ecf +++ /dev/null @@ -1,55 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_update_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_update_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 360 -#BSUB -R affinity[core(7)] -#BSUB -R span[ptile=4] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load CFP/$CFP_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_ENKF_UPDATE - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f003.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f003.ecf deleted file mode 100755 index eff90bc45f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f003.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_post_f%FHOUT_EPOS%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_post_f%FHOUT_EPOS%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 80 -#BSUB -R affinity[core(7)] -#BSUB -R span[ptile=4] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHMIN_EPOS=%FHMIN_EPOS% -export FHMAX_EPOS=%FHMAX_EPOS% -export FHOUT_EPOS=%FHOUT_EPOS% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGDAS_ENKF_POST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f004.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f004.ecf deleted file mode 100755 index eff90bc45f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f004.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_post_f%FHOUT_EPOS%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_post_f%FHOUT_EPOS%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 80 -#BSUB -R affinity[core(7)] -#BSUB -R span[ptile=4] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHMIN_EPOS=%FHMIN_EPOS% -export FHMAX_EPOS=%FHMAX_EPOS% -export FHOUT_EPOS=%FHOUT_EPOS% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGDAS_ENKF_POST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f005.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f005.ecf deleted file mode 100755 index eff90bc45f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f005.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_post_f%FHOUT_EPOS%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_post_f%FHOUT_EPOS%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 80 -#BSUB -R affinity[core(7)] -#BSUB -R span[ptile=4] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHMIN_EPOS=%FHMIN_EPOS% -export FHMAX_EPOS=%FHMAX_EPOS% -export FHOUT_EPOS=%FHOUT_EPOS% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGDAS_ENKF_POST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f006.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f006.ecf deleted file mode 100755 index eff90bc45f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f006.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_post_f%FHOUT_EPOS%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_post_f%FHOUT_EPOS%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 80 -#BSUB -R affinity[core(7)] -#BSUB -R span[ptile=4] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHMIN_EPOS=%FHMIN_EPOS% -export FHMAX_EPOS=%FHMAX_EPOS% -export FHOUT_EPOS=%FHOUT_EPOS% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGDAS_ENKF_POST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f007.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f007.ecf deleted file mode 100755 index eff90bc45f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f007.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_post_f%FHOUT_EPOS%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_post_f%FHOUT_EPOS%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 80 -#BSUB -R affinity[core(7)] -#BSUB -R span[ptile=4] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHMIN_EPOS=%FHMIN_EPOS% -export FHMAX_EPOS=%FHMAX_EPOS% -export FHOUT_EPOS=%FHOUT_EPOS% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGDAS_ENKF_POST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f008.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f008.ecf deleted file mode 100755 index eff90bc45f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f008.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_post_f%FHOUT_EPOS%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_post_f%FHOUT_EPOS%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 80 -#BSUB -R affinity[core(7)] -#BSUB -R span[ptile=4] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHMIN_EPOS=%FHMIN_EPOS% -export FHMAX_EPOS=%FHMAX_EPOS% -export FHOUT_EPOS=%FHOUT_EPOS% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGDAS_ENKF_POST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f009.ecf b/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f009.ecf deleted file mode 100755 index eff90bc45f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/enkf/post/jgdas_enkf_post_f009.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_enkf_post_f%FHOUT_EPOS%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_enkf_post_f%FHOUT_EPOS%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 80 -#BSUB -R affinity[core(7)] -#BSUB -R span[ptile=4] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHMIN_EPOS=%FHMIN_EPOS% -export FHMAX_EPOS=%FHMAX_EPOS% -export FHOUT_EPOS=%FHOUT_EPOS% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGDAS_ENKF_POST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/forecast/jgdas_forecast_high.ecf b/ecflow/ecf/scripts/gdas_FV3/forecast/jgdas_forecast_high.ecf deleted file mode 100755 index 28ac6ff13e..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/forecast/jgdas_forecast_high.ecf +++ /dev/null @@ -1,57 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_forecast_high_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_forecast_high_%CYC%.o%J -#BSUB -W 0:25 -#BSUB -n 336 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_FORECAST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/gempak/jgdas_gempak.ecf b/ecflow/ecf/scripts/gdas_FV3/gempak/jgdas_gempak.ecf deleted file mode 100755 index f39728d23d..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/gempak/jgdas_gempak.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_gempak_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_gempak_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 2 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load CFP/$CFP_ver -module load gempak/$gempak_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -export model=gdas -${HOMEgfs}/jobs/JGDAS_GEMPAK - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/gempak/jgdas_gempak_meta_ncdc.ecf b/ecflow/ecf/scripts/gdas_FV3/gempak/jgdas_gempak_meta_ncdc.ecf deleted file mode 100755 index 128eeb6dcc..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/gempak/jgdas_gempak_meta_ncdc.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_gempak_meta_ncdc_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_gempak_meta_ncdc_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 2 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gdas% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load CFP/$CFP_ver -module load gempak/$gempak_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_GEMPAK_META_NCDC - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/gempak_20190514/jgdas_gempak.ecf b/ecflow/ecf/scripts/gdas_FV3/gempak_20190514/jgdas_gempak.ecf deleted file mode 100755 index e9ccfec1e9..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/gempak_20190514/jgdas_gempak.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_gempak_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_gempak_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 2 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load CFP/$CFP_ver -module use -a /gpfs/dell1/nco/ops/nwprod/modulefiles/ -module load gempak/$gempak_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -export model=gdas -${HOMEgfs}/jobs/JGDAS_GEMPAK - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/gempak_20190514/jgdas_gempak_meta_ncdc.ecf b/ecflow/ecf/scripts/gdas_FV3/gempak_20190514/jgdas_gempak_meta_ncdc.ecf deleted file mode 100755 index cd0bebeb50..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/gempak_20190514/jgdas_gempak_meta_ncdc.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_gempak_meta_ncdc_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_gempak_meta_ncdc_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 2 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gdas% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load CFP/$CFP_ver -module use -a /gpfs/dell1/nco/ops/nwprod/modulefiles/ -module load gempak/$gempak_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGDAS_GEMPAK_META_NCDC - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/jgdas_verfrad.ecf b/ecflow/ecf/scripts/gdas_FV3/jgdas_verfrad.ecf deleted file mode 100755 index 3a1a8bf35e..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/jgdas_verfrad.ecf +++ /dev/null @@ -1,50 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_verfrad_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_verfrad_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver - -module list - -#%include -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGDAS_VERFRAD - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/jgdas_vminmon.ecf b/ecflow/ecf/scripts/gdas_FV3/jgdas_vminmon.ecf deleted file mode 100755 index 71a1536cfe..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/jgdas_vminmon.ecf +++ /dev/null @@ -1,52 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_vminmon_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_vminmon_%CYC%.o%J -#BSUB -W 0:05 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gdas% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load pm5/$pm5_ver -module load ips/$ips_ver - -module list - -#%include -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGDAS_VMINMON - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_anl.ecf b/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_anl.ecf deleted file mode 100755 index db61ca3bb8..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_anl.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_post_%FHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHR=%FHR% -export post_times=%HR% -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f000.ecf b/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f000.ecf deleted file mode 100755 index db61ca3bb8..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f000.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_post_%FHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHR=%FHR% -export post_times=%HR% -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f001.ecf b/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f001.ecf deleted file mode 100755 index db61ca3bb8..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f001.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_post_%FHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHR=%FHR% -export post_times=%HR% -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f002.ecf b/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f002.ecf deleted file mode 100755 index db61ca3bb8..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f002.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_post_%FHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHR=%FHR% -export post_times=%HR% -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f003.ecf b/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f003.ecf deleted file mode 100755 index db61ca3bb8..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f003.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_post_%FHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHR=%FHR% -export post_times=%HR% -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f004.ecf b/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f004.ecf deleted file mode 100755 index db61ca3bb8..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f004.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_post_%FHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHR=%FHR% -export post_times=%HR% -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f005.ecf b/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f005.ecf deleted file mode 100755 index db61ca3bb8..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f005.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_post_%FHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHR=%FHR% -export post_times=%HR% -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f006.ecf b/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f006.ecf deleted file mode 100755 index db61ca3bb8..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f006.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_post_%FHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHR=%FHR% -export post_times=%HR% -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f007.ecf b/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f007.ecf deleted file mode 100755 index db61ca3bb8..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f007.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_post_%FHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHR=%FHR% -export post_times=%HR% -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f008.ecf b/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f008.ecf deleted file mode 100755 index db61ca3bb8..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f008.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_post_%FHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHR=%FHR% -export post_times=%HR% -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f009.ecf b/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f009.ecf deleted file mode 100755 index db61ca3bb8..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_f009.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_post_%FHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHR=%FHR% -export post_times=%HR% -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_manager.ecf b/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_manager.ecf deleted file mode 100755 index 70bc45b8b4..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/post/jgdas_post_manager.ecf +++ /dev/null @@ -1,50 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_post_manager_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_post_manager_%CYC%.o%J -#BSUB -W 1:15 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_POST_MANAGER - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/prep/jgdas_emcsfc_sfc_prep.ecf b/ecflow/ecf/scripts/gdas_FV3/prep/jgdas_emcsfc_sfc_prep.ecf deleted file mode 100755 index d2d1247f41..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/prep/jgdas_emcsfc_sfc_prep.ecf +++ /dev/null @@ -1,52 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gdas_emcsfc_sfc_prep_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_emcsfc_sfc_prep_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export SCRgfs=${HOMEgfs}/scripts - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_EMCSFC_SFC_PREP - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/prep/jgdas_prep.ecf b/ecflow/ecf/scripts/gdas_FV3/prep/jgdas_prep.ecf deleted file mode 100755 index a9fc222c67..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/prep/jgdas_prep.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#BSUB -J %E%%RUN%_prep_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/%RUN%_prep_%CYC%.o%J -#BSUB -cwd /tmp -#BSUB -q %QUEUE% -#BSUB -L /bin/sh -#BSUB -P %PROJ% -#BSUB -W 00:20 -#BSUB -R span[ptile=3]; -R affinity[core] -#BSUB -n 3 -#BSUB -M 18000 - -%include -%include - -export NODES=1 - -export model=obsproc_global -%include - -############################################################# -## Load modules -############################################################## -#. $MODULESHOME/init/sh -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load CFP/$cfp_ver -module list - -############################################################# -## WCOSS_C environment settings -############################################################## - -################################################ -# EXPORT list here - -set -x - -export cyc=%CYC% - -# CALL executable job script here -${HOMEobsproc_global}/jobs/JGLOBAL_PREP - -%include -%manual -###################################################################### -# Purpose: -# -# -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/prep/jgdas_prep_post.ecf b/ecflow/ecf/scripts/gdas_FV3/prep/jgdas_prep_post.ecf deleted file mode 100755 index cff57bb245..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/prep/jgdas_prep_post.ecf +++ /dev/null @@ -1,60 +0,0 @@ -#BSUB -J %E%%RUN%_prep_post_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/%RUN%_prep_post_%CYC%.o%J -#BSUB -L /bin/sh -#BSUB -q %QUEUESERV% -#BSUB -cwd /tmp -##BSUB -W 00:30 -#BSUB -W 00:15 -#BSUB -P %PROJ% -#BSUB -M 1000 -#BSUB -R affinity[core] - -%include -%include - -set -x - -export model=obsproc_global -%include - -############################################################# -## Load modules -############################################################## -#. $MODULESHOME/init/sh -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load CFP/$cfp_ver -module list - -############################################################# -## WCOSS_C environment settings -############################################################## - -################################################ -# EXPORT list here - -set -x -export cyc=%CYC% - -#export PROCESS_ALL_REPORT_COUNTS=NO - -# CALL executable job script here -$HOMEobsproc_global/jobs/JGLOBAL_PREP_POST - -%include -%manual -###################################################################### -# Purpose: Job to execute the GFS PREPBUFR post-processing for -# the 00Z cycle (creating unrestricted PREPBUFR files) -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -%end - diff --git a/ecflow/ecf/scripts/gdas_FV3/prep/jgdas_prep_post.ecf.18z b/ecflow/ecf/scripts/gdas_FV3/prep/jgdas_prep_post.ecf.18z deleted file mode 100755 index 750cf386c7..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/prep/jgdas_prep_post.ecf.18z +++ /dev/null @@ -1,60 +0,0 @@ -#BSUB -J %E%gdas_prep_post_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gdas_prep_post_%CYC%.o%J -#BSUB -L /bin/sh -#BSUB -q %QUEUESERV% -#BSUB -cwd /tmp -#BSUB -W 00:30 -#BSUB -P %PROJ% -#BSUB -M 1000 -##BSUB -extsched 'CRAYLINUX[]' - -%include -%include - -set -x -export NODES=1 - -export model=obsproc_global -%include - -############################################################# -## Load modules -############################################################## -. $MODULESHOME/init/sh -module load cfp-intel-sandybridge/${cfp_intel_sandybridge_ver} -module load grib_util/${grib_util_ver} -module list - -############################################################# -## WCOSS_C environment settings -############################################################## - -################################################ -# EXPORT list here -set -x -export cyc=%CYC% - -#export PROCESS_ALL_REPORT_COUNTS=NO - -export REBUILD_MAINPAGE=YES -export monsummary_dat=$PDY - -# CALL executable job script here -$HOMEobsproc_global/jobs/JGDAS_PREP_POST - -%include -%manual -###################################################################### -# Purpose: Job to execute the GFS PREPBUFR post-processing for -# the 00Z cycle (creating unrestricted PREPBUFR files) -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -%end - diff --git a/ecflow/ecf/scripts/gdas_FV3/prep/jglobal_prep.ecf b/ecflow/ecf/scripts/gdas_FV3/prep/jglobal_prep.ecf deleted file mode 100755 index 0c7097fd96..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/prep/jglobal_prep.ecf +++ /dev/null @@ -1,60 +0,0 @@ -#BSUB -J %E%%RUN%_prep_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/%RUN%_prep_%CYC%.o%J -#BSUB -cwd /tmp -#BSUB -q %QUEUE% -#BSUB -L /bin/sh -#BSUB -P %PROJ% -##BSUB -W 00:30 -#BSUB -W 00:35 -#BSUB -R span[ptile=3]; -R affinity[core] -#BSUB -n 3 -#BSUB -M 18000 - -%include -%include - -export NODES=1 - -export model=obsproc_global -%include - -############################################################# -## Load modules -############################################################## -#. $MODULESHOME/init/sh -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load CFP/$cfp_ver -module list - -############################################################# -## WCOSS_C environment settings -############################################################## - -################################################ -# EXPORT list here - -set -x - -export cyc=%CYC% - -# CALL executable job script here -${HOMEobsproc_global}/jobs/JGLOBAL_PREP - -%include -%manual -###################################################################### -# Purpose: -# -# -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -%end diff --git a/ecflow/ecf/scripts/gdas_FV3/prep/jglobal_prep_post.ecf b/ecflow/ecf/scripts/gdas_FV3/prep/jglobal_prep_post.ecf deleted file mode 100755 index 31ec73452f..0000000000 --- a/ecflow/ecf/scripts/gdas_FV3/prep/jglobal_prep_post.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#BSUB -J %E%%RUN%_prep_post_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/%RUN%_prep_post_%CYC%.o%J -#BSUB -L /bin/sh -#BSUB -q %QUEUESERV% -#BSUB -cwd /tmp -##BSUB -W 00:30 -#BSUB -W 00:15 -#BSUB -P %PROJ% -#BSUB -M 1000 - -%include -%include - -set -x - -export model=obsproc_global -%include - -############################################################# -## Load modules -############################################################## -#. $MODULESHOME/init/sh -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load CFP/$cfp_ver -module list - -############################################################# -## WCOSS_C environment settings -############################################################## - -################################################ -# EXPORT list here - -set -x -export cyc=%CYC% - -#export PROCESS_ALL_REPORT_COUNTS=NO - -# CALL executable job script here -$HOMEobsproc_global/jobs/JGLOBAL_PREP_POST - -%include -%manual -###################################################################### -# Purpose: Job to execute the GFS PREPBUFR post-processing for -# the 00Z cycle (creating unrestricted PREPBUFR files) -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -%end - diff --git a/ecflow/ecf/scripts/gfs_FV3/dump/jgfs_dump.ecf b/ecflow/ecf/scripts/gfs_FV3/dump/jgfs_dump.ecf deleted file mode 100755 index 213c4f455e..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/dump/jgfs_dump.ecf +++ /dev/null @@ -1,61 +0,0 @@ -#BSUB -J %E%%RUN%_dump_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/%RUN%_dump_%CYC%.o%J -#BSUB -cwd /tmp -#BSUB -q %QUEUE% -##BSUB -W 00:20 -#BSUB -W 00:30 -#BSUB -L /bin/sh -#BSUB -P %PROJ% -#BSUB -n 14 -#BSUB -R span[ptile=14] -#BSUB -R affinity[core(1):distribute=balance] - -%include -%include - -set -x - -export model=obsproc_global -%include - -############################################################# -## Load modules -############################################################## -#. $MODULESHOME/init/sh -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load CFP/$cfp_ver - -module load grib_util/${grib_util_ver} -module list - -############################################################# -## WCOSS_C environment settings -############################################################## - -################################################ -# EXPORT list here - -set -x -export cyc=%CYC% - -# CALL executable job script here -${HOMEobsproc_global}/jobs/JGLOBAL_DUMP - -%include -%manual -###################################################################### -# Purpose: -# -# -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/dump/jgfs_dump_alert.ecf b/ecflow/ecf/scripts/gfs_FV3/dump/jgfs_dump_alert.ecf deleted file mode 100755 index c6f541b9fb..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/dump/jgfs_dump_alert.ecf +++ /dev/null @@ -1,52 +0,0 @@ -#BSUB -J %E%gfs_dump_alert_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_dump_alert_%CYC%.o%J -#BSUB -L /bin/sh -#BSUB -q %QUEUESERV% -#BSUB -R rusage[mem=1000] -#BSUB -R affinity[core] -#BSUB -cwd /tmp -#BSUB -W 00:10 -#BSUB -P %PROJ% - -%include -%include - -set -x - -export model=obsproc_dump_alert -%include - -############################################################# -# Load modules -############################################################# -. $MODULESHOME/init/sh -module list - -############################################################# -# WCOSS environment settings -############################################################# - -# EXPORT list here -set -x -export cyc=%CYC% -export NET=gfs -export RUN=gfs - -# CALL executable job script here -$HOMEobsproc_dump_alert/jobs/JDUMP_ALERT - -%include -%manual -###################################################################### -# Purpose: Job to execute the gfs data dump alert processing for the -# 00Z cycle -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/dump/jgfs_dump_post.ecf b/ecflow/ecf/scripts/gfs_FV3/dump/jgfs_dump_post.ecf deleted file mode 100755 index 1ba477972b..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/dump/jgfs_dump_post.ecf +++ /dev/null @@ -1,61 +0,0 @@ -#BSUB -J %E%%RUN%_dump_post_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/%RUN%_dump_post_%CYC%.o%J -#BSUB -L /bin/sh -#BSUB -q %QUEUE% -#BSUB -cwd /tmp -#BSUB -W 00:15 -#BSUB -P %PROJ% -#BSUB -n 14 -#BSUB -R span[ptile=14] -#BSUB -R affinity[core(1):distribute=balance] - -%include -%include - -set -x - -export model=obsproc_global -%include - -############################################################# -## Load modules -############################################################## -# . $MODULESHOME/init/sh -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load CFP/$cfp_ver -module list - -############################################################# -## WCOSS_C environment settings -############################################################## - -################################################ -# EXPORT list here - -set -x -export cyc=%CYC% - -#export PROCESS_DATACOUNTS=NO - -# CALL executable job script here -$HOMEobsproc_global/jobs/JGLOBAL_DUMP_POST - -%include -%manual -###################################################################### -# Purpose: Job to execute the gfs data dump post-processing for the -# 00Z cycle (listing contents of dump files; conversion -# of dump file format) -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -%end - diff --git a/ecflow/ecf/scripts/gfs_FV3/dump/jgfs_jtwc_bull_email.ecf b/ecflow/ecf/scripts/gfs_FV3/dump/jgfs_jtwc_bull_email.ecf deleted file mode 100755 index cdc58e21d0..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/dump/jgfs_jtwc_bull_email.ecf +++ /dev/null @@ -1,53 +0,0 @@ -#BSUB -J %E%gfs_jtwc_bull_email_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_jtwc_bull_email_%CYC%.o%J -#BSUB -cwd /tmp -#BSUB -W 00:15 -#BSUB -R rusage[mem=500] -R affinity[core] -#BSUB -n 1 -#BSUB -q %QUEUESERV% -#BSUB -L /bin/sh -#BSUB -P %PROJ% - -%include -%include - -set -x - -export model=????? -%include - -############################################################# -## Load modules -############################################################## -. $MODULESHOME/init/sh -module list - -############################################################# -## WCOSS_C environment settings -############################################################## - -################################################ -# EXPORT list here -set -x -export cyc=%CYC% -export NET=gfs -export RUN=gfs - -# CALL executable job script here -${NWROOTprod}/util_shared.${util_shared_ver}/jobs/JEMAIL_OUT - -%include -%manual -###################################################################### -# Purpose: To execute the job that prepares initial condition for -# gfs. -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/dump/jgfs_tropcy_qc_reloc.ecf b/ecflow/ecf/scripts/gfs_FV3/dump/jgfs_tropcy_qc_reloc.ecf deleted file mode 100755 index 352428dff0..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/dump/jgfs_tropcy_qc_reloc.ecf +++ /dev/null @@ -1,60 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_tropcy_qc_reloc_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_tropcy_qc_reloc_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -# Configuration files -export EXPDIR=${HOMEgfs}/parm/config - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -export USE_CFP=YES -export PROCESS_TROPCY=YES -export DO_RELOCATE=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_TROPCY_QC_RELOC - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/dump/jmodel_realtime_gfs.ecf b/ecflow/ecf/scripts/gfs_FV3/dump/jmodel_realtime_gfs.ecf deleted file mode 100755 index 3ec5179eac..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/dump/jmodel_realtime_gfs.ecf +++ /dev/null @@ -1,53 +0,0 @@ -#BSUB -J %E%model_realtime_gfs_%CYC% -#BSUB -o /com/output/%ENVIR%/today/model_realtime_gfs_%CYC%.o%J -#BSUB -e /com/output/%ENVIR%/today/model_realtime_gfs_%CYC%.o%J -#BSUB -L /bin/sh -#BSUB -q prod_serv2 -#BSUB -R rusage[mem=1000] -#BSUB -R affinity[core] -#BSUB -cwd /tmpnwprd -#BSUB -W 00:10 -#BSUB -R "span[ptile=8]" -#BSUB -n 16 -#BSUB -P %PROJ% -#BSUB -a poe - -%include -%include - -# EXPORT list here -set -x -export NET=gfs -export RUNM=gfs -export cyc=%CYC% - -export job=model_realtime_${NET}_${cyc} -export output=/com/output/${envir}/today/model_realtime_${NET}_${cyc} -export error=/com/output/${envir}/today/model_realtime_${NET}_${cyc} - -# CALL executable job script here - -VERSION_FILE=/nw${envir}/versions/models_realtime.ver -if [ -f $VERSION_FILE ]; then - . $VERSION_FILE -else - ecflow_client --msg="***JOB ${ECFNAME} ERROR: Version File $VERSION_FILE does not exist ***" - ecflow_client --abort - exit -fi - -/nw${envir}/models_realtime.${code_ver}/jobs/JMODELS_REALTIME - -%include -%manual -###################################################################### -# PURPOSE: To read the hourly and its monthly mean data dump counts and compares -# to the monthly averages. -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/forecast/jgfs_forecast_high.ecf b/ecflow/ecf/scripts/gfs_FV3/forecast/jgfs_forecast_high.ecf deleted file mode 100755 index f941e6e345..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/forecast/jgfs_forecast_high.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_forecast_high_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_forecast_high_%CYC%.o%J -#BSUB -W 3:00 -#BSUB -n 1776 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -# Configuration files -export EXPDIR=${HOMEgfs}/parm/config - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_FORECAST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/forecast/jgfs_forecast_high.usr b/ecflow/ecf/scripts/gfs_FV3/forecast/jgfs_forecast_high.usr deleted file mode 100644 index 4c9f193cde..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/forecast/jgfs_forecast_high.usr +++ /dev/null @@ -1,192 +0,0 @@ -%comment - ecf user variables -COM = /gpfs/dell1/nco/ops/com -COMPATH: = -CYC = 12 -DBNLOG: = -E = t -ECF_LOGHOST = tecflow2 -ECF_VERSION = 4.7.1 -ENVIR = test -FILESYSTEM:dell1 = dell1 -KEEPDATA:NO = NO -MAILTO: = -NET:gfs = gfs -PDY: = 20190523 -PROJ = GFS-T2O -QUEUE = prod -RUN = gfs -SENDDBN:YES = YES -SENDDBN_NTC:YES = YES -prod_envir_ver = 1.0.3 -prod_util_ver = 1.1.4 -%end - ecf user variables -#! /bin/sh -#BSUB -q prod -#BSUB -P GFS-T2O -#BSUB -J tgfs_forecast_high_12 -#BSUB -o /gpfs/dell1/nco/ops/com/output/test/today/gfs_forecast_high_12.o%J -#BSUB -W 3:00 -#BSUB -n 6384 -#BSUB -R affinity[core(2)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -set -xe # print commands as they are executed and enable signal trapping - -export PS4='+ $SECONDS + ' - -# Variables needed for communication with ecFlow -export ECF_NAME=/test/WSC/gfs_FV3_12/forecast/jgfs_forecast_high -#export ECF_HOST=t14z1 -export ECF_HOST=tecflow2 -export ECF_PORT=31415 -export ECF_PASS=0RwK7D8y -export ECF_TRYNO=16 -export ECF_RID=$LSB_JOBID - -# Tell ecFlow we have started -# POST_OUT variable enables LSF post_exec to communicate with ecFlow -if [ -d /opt/modules ]; then - # WCOSS TO4 (Cray XC40) - . /opt/modules/default/init/sh - module load ecflow - POST_OUT=/gpfs/hps/tmpfs/ecflow/ecflow_post_in.$LSB_BATCH_JID -elif [ -d /usrx/local/Modules ]; then - # WCOSS Phase 1 & 2 (IBM iDataPlex) - . /usrx/local/Modules/default/init/sh - module load ecflow - POST_OUT=/var/lsf/ecflow_post_in.$LSB_BATCH_JID -else - # WCOSS Phase 3 (Dell PowerEdge) - . /usrx/local/prod/lmod/lmod/init/sh - module load ips/18.0.1.163 ecflow/4.7.1 - POST_OUT=/var/lsf/ecflow_post_in.$USER.$LSB_BATCH_JID -fi -ecflow_client --init=${ECF_RID} - -cat > $POST_OUT <>$POST_OUT - trap $1; exit $1 -} -# Trap all error and exit signals -trap 'ERROR $?' ERR EXIT - -# envir-p3.h -export job=${job:-$LSB_JOBNAME} #Can't use $job in filenames! -export jobid=${jobid:-$job.$LSB_JOBID} - -export RUN_ENVIR=${RUN_ENVIR:-nco} -export envir=test -export SENDDBN=${SENDDBN:-YES} -export SENDDBN_NTC=${SENDDBN_NTC:-YES} -FILESYSTEMROOT=/gpfs/dell1 - -module load prod_envir/1.0.3 prod_util/1.1.4 - -case $envir in - prod) - export DATAROOT=${DATAROOT:-${FILESYSTEMROOT}/nco/ops/tmpnwprd} - if [ "$SENDDBN" == "YES" ]; then - export DBNROOT=/iodprod_dell/dbnet_siphon - else - export DBNROOT=${UTILROOT}/fakedbn - fi - ;; - eval) - export envir=para - export DATAROOT=${DATAROOT:-${FILESYSTEMROOT}/nco/ops/tmpnwprd} - if [ "$SENDDBN" == "YES" ]; then - export DBNROOT=${UTILROOT}/para_dbn - SENDDBN_NTC=NO - else - export DBNROOT=${UTILROOT}/fakedbn - fi - ;; - para|test) - export DATAROOT=${DATAROOT:-${FILESYSTEMROOT}/nco/ops/tmpnwprd} - export DBNROOT=${UTILROOT}/fakedbn - ;; - *) - ecflow_client --abort="ENVIR must be prod, para, eval, or test [envir.h]" - exit - ;; -esac - -export COMROOT=${FILESYSTEMROOT}/nco/ops/com -export COREROOT=${FILESYSTEMROOT}/ptmp/production.core/$jobid -export NWROOT=/gpfs/dell1/nco/ops/nw${envir} -export SENDECF=${SENDECF:-YES} -export SENDCOM=${SENDCOM:-YES} -export KEEPDATA=${KEEPDATA:-NO} - -if [ -n "20190523" ]; then export PDY=${PDY:-20190523}; fi -if [ -n "" ]; then export COMPATH=${COMPATH:-}; fi -if [ -n "" ]; then export MAILTO=${MAILTO:-}; fi -if [ -n "" ]; then export DBNLOG=${DBNLOG:-}; fi - -set -x - -export NET=gfs -export RUN=gfs -export CDUMP=gfs - -model=gfs -. ${NWROOT:?}/versions/${model:?}.ver -eval export HOME${model}=${NWROOT}/${model}.\${${model}_ver:?} - -# Configuration files -export EXPDIR=${HOMEgfs}/parm/config - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load ESMF/$ESMF_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver - -module list - -export USE_CFP=YES -export ROTDIR=/gpfs/dell1/nco/ops/com -export cyc=12 -export cycle=t12z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_FORECAST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -ecflow_client --complete # Notify ecFlow of a normal end -trap 0 # Remove all traps -exit 0 # End the shell -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/gempak/jgfs_gempak.ecf b/ecflow/ecf/scripts/gfs_FV3/gempak/jgfs_gempak.ecf deleted file mode 100755 index 81a18c7bd1..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/gempak/jgfs_gempak.ecf +++ /dev/null @@ -1,57 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_gempak_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_gempak_%CYC%.o%J -#BSUB -W 3:00 -#BSUB -n 24 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load CFP/$CFP_ver -module load gempak/$gempak_ver -module load grib_util/$grib_util_ver - -module list - -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_GEMPAK - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/gempak/jgfs_gempak_meta.ecf b/ecflow/ecf/scripts/gfs_FV3/gempak/jgfs_gempak_meta.ecf deleted file mode 100755 index 8128434530..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/gempak/jgfs_gempak_meta.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_gempak_meta_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_gempak_meta_%CYC%.o%J -#BSUB -W 3:00 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -# Configuration files - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load CFP/$CFP_ver -module load gempak/$gempak_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_GEMPAK_META - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/gempak/jgfs_gempak_ncdc_upapgif.ecf b/ecflow/ecf/scripts/gfs_FV3/gempak/jgfs_gempak_ncdc_upapgif.ecf deleted file mode 100755 index 6662d271c9..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/gempak/jgfs_gempak_ncdc_upapgif.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_gempak_upapgif_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_gempak_upapgif_%CYC%.o%J -#BSUB -W 3:00 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export MODEL=GFS -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load CFP/$CFP_ver -module load gempak/$gempak_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_GEMPAK_NCDC_UPAPGIF - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/gempak/jgfs_npoess_pgrb2_0p5deg.ecf b/ecflow/ecf/scripts/gfs_FV3/gempak/jgfs_npoess_pgrb2_0p5deg.ecf deleted file mode 100755 index 7ded2d5ae1..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/gempak/jgfs_npoess_pgrb2_0p5deg.ecf +++ /dev/null @@ -1,56 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_npoess_pgrb2_0p5deg_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_npoess_pgrb2_0p5deg_%CYC%.o%J -#BSUB -W 2:00 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_PGRB2_SPEC_NPOESS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/gempak/jgfs_pgrb2_spec_gempak.ecf b/ecflow/ecf/scripts/gfs_FV3/gempak/jgfs_pgrb2_spec_gempak.ecf deleted file mode 100755 index ba776501c6..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/gempak/jgfs_pgrb2_spec_gempak.ecf +++ /dev/null @@ -1,57 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_pgrb2_spec_gempak_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_pgrb2_spec_gempak_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 2 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=2] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load CFP/$CFP_ver -module load gempak/$gempak_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_PGRB2_SPEC_GEMPAK - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/gempak_20190514/jgfs_gempak.ecf b/ecflow/ecf/scripts/gfs_FV3/gempak_20190514/jgfs_gempak.ecf deleted file mode 100755 index 9774a0aa52..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/gempak_20190514/jgfs_gempak.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_gempak_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_gempak_%CYC%.o%J -#BSUB -W 3:00 -#BSUB -n 24 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=12] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load CFP/$CFP_ver -module use -a /gpfs/dell1/nco/ops/nwprod/modulefiles/ -module load gempak/$gempak_ver -module load grib_util/$grib_util_ver - -module list - -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_GEMPAK - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/gempak_20190514/jgfs_gempak_meta.ecf b/ecflow/ecf/scripts/gfs_FV3/gempak_20190514/jgfs_gempak_meta.ecf deleted file mode 100755 index 43fe76b77b..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/gempak_20190514/jgfs_gempak_meta.ecf +++ /dev/null @@ -1,60 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_gempak_meta_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_gempak_meta_%CYC%.o%J -#BSUB -W 3:00 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -# Configuration files - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load CFP/$CFP_ver -module use -a /gpfs/dell1/nco/ops/nwprod/modulefiles/ -module load gempak/$gempak_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_GEMPAK_META - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/gempak_20190514/jgfs_gempak_ncdc_upapgif.ecf b/ecflow/ecf/scripts/gfs_FV3/gempak_20190514/jgfs_gempak_ncdc_upapgif.ecf deleted file mode 100755 index 4049a752ce..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/gempak_20190514/jgfs_gempak_ncdc_upapgif.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_gempak_upapgif_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_gempak_upapgif_%CYC%.o%J -#BSUB -W 3:00 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export MODEL=GFS -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load CFP/$CFP_ver -module use -a /gpfs/dell1/nco/ops/nwprod/modulefiles/ -module load gempak/$gempak_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_GEMPAK_NCDC_UPAPGIF - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/gempak_20190514/jgfs_npoess_pgrb2_0p5deg.ecf b/ecflow/ecf/scripts/gfs_FV3/gempak_20190514/jgfs_npoess_pgrb2_0p5deg.ecf deleted file mode 100755 index 7ded2d5ae1..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/gempak_20190514/jgfs_npoess_pgrb2_0p5deg.ecf +++ /dev/null @@ -1,56 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_npoess_pgrb2_0p5deg_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_npoess_pgrb2_0p5deg_%CYC%.o%J -#BSUB -W 2:00 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_PGRB2_SPEC_NPOESS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/gempak_20190514/jgfs_pgrb2_spec_gempak.ecf b/ecflow/ecf/scripts/gfs_FV3/gempak_20190514/jgfs_pgrb2_spec_gempak.ecf deleted file mode 100755 index e4ec28fc71..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/gempak_20190514/jgfs_pgrb2_spec_gempak.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_pgrb2_spec_gempak_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_pgrb2_spec_gempak_%CYC%.o%J -#BSUB -W 0:40 -#BSUB -n 2 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=2] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load CFP/$CFP_ver -module use -a /gpfs/dell1/nco/ops/nwprod/modulefiles/ -module load gempak/$gempak_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_PGRB2_SPEC_GEMPAK - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/jgfs_analysis.ecf b/ecflow/ecf/scripts/gfs_FV3/jgfs_analysis.ecf deleted file mode 100755 index 3307958636..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/jgfs_analysis.ecf +++ /dev/null @@ -1,60 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_analysis_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_analysis_%CYC%.o%J -#BSUB -W 0:50 -#BSUB -n 480 -#BSUB -R affinity[core(14)] -#BSUB -R span[ptile=2] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load NetCDF/$NetCDF_ver -module load HDF5-serial/$HDF5_serial_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export PREINP=${CDUMP}.${cycle}. - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_ANALYSIS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/jgfs_vminmon.ecf b/ecflow/ecf/scripts/gfs_FV3/jgfs_vminmon.ecf deleted file mode 100755 index b9300d7401..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/jgfs_vminmon.ecf +++ /dev/null @@ -1,52 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_vminmon_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_vminmon_%CYC%.o%J -#BSUB -W 0:05 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load pm5/$pm5_ver -module load ips/$ips_ver - -module list - -#%include -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_VMINMON - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_anl.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_anl.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_anl.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f000.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f000.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f000.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f001.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f001.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f001.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f002.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f002.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f002.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f003.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f003.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f003.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f004.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f004.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f004.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f005.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f005.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f005.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f006.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f006.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f006.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f007.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f007.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f007.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f008.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f008.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f008.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f009.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f009.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f009.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f010.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f010.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f010.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f011.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f011.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f011.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f012.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f012.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f012.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f013.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f013.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f013.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f014.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f014.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f014.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f015.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f015.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f015.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f016.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f016.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f016.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f017.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f017.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f017.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f018.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f018.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f018.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f019.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f019.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f019.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f020.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f020.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f020.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f021.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f021.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f021.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f022.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f022.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f022.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f023.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f023.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f023.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f024.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f024.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f024.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f025.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f025.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f025.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f026.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f026.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f026.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f027.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f027.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f027.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f028.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f028.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f028.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f029.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f029.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f029.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f030.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f030.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f030.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f031.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f031.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f031.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f032.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f032.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f032.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f033.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f033.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f033.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f034.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f034.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f034.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f035.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f035.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f035.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f036.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f036.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f036.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f037.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f037.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f037.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f038.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f038.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f038.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f039.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f039.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f039.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f040.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f040.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f040.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f041.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f041.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f041.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f042.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f042.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f042.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f043.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f043.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f043.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f044.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f044.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f044.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f045.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f045.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f045.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f046.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f046.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f046.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f047.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f047.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f047.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f048.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f048.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f048.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f049.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f049.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f049.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f050.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f050.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f050.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f051.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f051.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f051.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f052.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f052.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f052.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f053.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f053.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f053.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f054.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f054.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f054.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f055.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f055.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f055.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f056.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f056.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f056.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f057.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f057.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f057.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f058.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f058.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f058.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f059.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f059.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f059.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f060.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f060.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f060.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f061.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f061.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f061.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f062.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f062.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f062.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f063.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f063.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f063.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f064.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f064.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f064.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f065.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f065.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f065.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f066.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f066.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f066.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f067.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f067.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f067.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f068.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f068.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f068.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f069.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f069.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f069.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f070.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f070.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f070.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f071.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f071.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f071.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f072.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f072.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f072.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f073.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f073.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f073.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f074.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f074.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f074.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f075.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f075.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f075.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f076.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f076.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f076.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f077.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f077.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f077.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f078.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f078.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f078.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f079.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f079.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f079.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f080.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f080.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f080.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f081.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f081.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f081.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f082.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f082.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f082.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f083.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f083.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f083.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f084.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f084.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f084.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f085.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f085.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f085.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f086.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f086.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f086.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f087.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f087.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f087.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f088.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f088.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f088.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f089.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f089.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f089.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f090.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f090.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f090.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f091.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f091.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f091.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f092.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f092.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f092.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f093.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f093.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f093.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f094.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f094.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f094.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f095.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f095.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f095.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f096.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f096.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f096.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f097.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f097.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f097.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f098.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f098.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f098.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f099.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f099.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f099.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f100.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f100.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f100.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f101.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f101.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f101.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f102.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f102.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f102.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f103.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f103.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f103.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f104.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f104.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f104.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f105.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f105.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f105.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f106.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f106.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f106.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f107.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f107.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f107.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f108.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f108.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f108.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f109.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f109.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f109.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f110.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f110.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f110.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f111.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f111.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f111.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f112.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f112.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f112.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f113.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f113.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f113.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f114.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f114.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f114.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f115.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f115.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f115.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f116.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f116.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f116.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f117.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f117.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f117.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f118.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f118.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f118.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f119.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f119.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f119.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f120.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f120.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f120.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f123.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f123.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f123.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f126.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f126.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f126.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f129.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f129.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f129.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f132.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f132.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f132.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f135.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f135.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f135.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f138.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f138.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f138.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f141.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f141.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f141.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f144.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f144.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f144.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f147.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f147.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f147.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f150.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f150.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f150.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f153.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f153.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f153.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f156.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f156.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f156.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f159.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f159.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f159.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f162.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f162.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f162.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f165.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f165.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f165.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f168.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f168.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f168.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f171.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f171.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f171.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f174.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f174.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f174.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f177.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f177.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f177.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f180.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f180.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f180.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f183.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f183.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f183.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f186.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f186.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f186.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f189.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f189.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f189.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f192.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f192.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f192.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f195.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f195.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f195.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f198.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f198.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f198.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f201.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f201.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f201.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f204.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f204.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f204.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f207.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f207.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f207.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f210.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f210.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f210.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f213.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f213.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f213.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f216.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f216.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f216.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f219.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f219.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f219.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f222.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f222.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f222.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f225.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f225.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f225.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f228.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f228.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f228.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f231.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f231.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f231.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f234.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f234.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f234.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f237.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f237.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f237.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f240.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f240.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f240.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f243.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f243.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f243.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f246.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f246.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f246.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f249.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f249.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f249.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f252.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f252.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f252.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f255.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f255.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f255.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f258.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f258.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f258.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f261.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f261.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f261.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f264.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f264.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f264.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f267.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f267.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f267.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f270.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f270.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f270.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f273.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f273.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f273.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f276.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f276.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f276.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f279.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f279.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f279.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f282.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f282.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f282.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f285.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f285.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f285.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f288.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f288.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f288.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f291.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f291.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f291.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f294.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f294.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f294.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f297.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f297.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f297.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f300.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f300.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f300.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f303.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f303.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f303.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f306.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f306.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f306.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f309.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f309.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f309.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f312.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f312.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f312.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f315.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f315.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f315.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f318.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f318.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f318.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f321.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f321.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f321.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f324.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f324.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f324.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f327.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f327.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f327.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f330.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f330.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f330.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f333.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f333.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f333.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f336.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f336.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f336.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f339.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f339.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f339.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f342.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f342.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f342.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f345.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f345.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f345.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f348.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f348.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f348.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f351.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f351.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f351.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f354.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f354.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f354.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f357.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f357.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f357.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f360.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f360.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f360.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f363.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f363.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f363.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f366.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f366.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f366.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f369.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f369.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f369.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f372.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f372.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f372.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f375.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f375.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f375.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f378.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f378.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f378.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f381.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f381.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f381.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f384.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f384.ecf deleted file mode 100755 index 603f59f5e3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_f384.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_%FHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_%FHR%_%CYC%.o%J -#BSUB -W 0:15 -#BSUB -n 84 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=14] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export FHR=%FHR% -export post_times=%HR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load g2tmpl/$g2tmpl_ver -module load crtm/$crtm_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export g2tmpl_ver=v${g2tmpl_ver} - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGLOBAL_NCEPPOST - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_manager.ecf b/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_manager.ecf deleted file mode 100755 index 9978b0b825..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post/jgfs_post_manager.ecf +++ /dev/null @@ -1,54 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_post_manager_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_post_manager_%CYC%.o%J -#BSUB -W 4:00 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -# Configuration files -export EXPDIR=${HOMEgfs}/parm/config - -############################################################ -# Load modules -############################################################ - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export job=gfs_post_manager_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_POST_MANAGER - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f000.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f000.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f000.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f003.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f003.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f003.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f006.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f006.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f006.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f009.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f009.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f009.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f012.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f012.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f012.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f015.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f015.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f015.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f018.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f018.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f018.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f021.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f021.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f021.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f024.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f024.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f024.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f027.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f027.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f027.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f030.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f030.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f030.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f033.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f033.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f033.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f036.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f036.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f036.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f039.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f039.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f039.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f042.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f042.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f042.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f045.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f045.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f045.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f048.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f048.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f048.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f051.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f051.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f051.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f054.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f054.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f054.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f057.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f057.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f057.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f060.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f060.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f060.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f063.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f063.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f063.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f066.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f066.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f066.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f069.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f069.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f069.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f072.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f072.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f072.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f075.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f075.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f075.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f078.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f078.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f078.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f081.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f081.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f081.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f084.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f084.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f084.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f090.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f090.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f090.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f096.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f096.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f096.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f102.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f102.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f102.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f108.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f108.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f108.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f114.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f114.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f114.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f120.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f120.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f120.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f126.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f126.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f126.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f132.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f132.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f132.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f138.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f138.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f138.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f144.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f144.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f144.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f150.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f150.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f150.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f156.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f156.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f156.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f162.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f162.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f162.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f168.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f168.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f168.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f174.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f174.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f174.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f180.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f180.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f180.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f186.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f186.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f186.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f192.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f192.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f192.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f198.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f198.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f198.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f204.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f204.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f204.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f210.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f210.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f210.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f216.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f216.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f216.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f222.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f222.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f222.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f228.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f228.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f228.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f234.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f234.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f234.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f240.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f240.ecf deleted file mode 100755 index b4d48c5d34..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_20km_1p0/jgfs_awips_f240.ecf +++ /dev/null @@ -1,62 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 28 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=28] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -# CALL executable job script here -export FHRGRP=%FHRGRP% FHRLST=%FHRLST% FCSTHR=%FCSTHR% TRDRUN=%TRDRUN% fcsthrs=%FCSTHR% -export job=jgfs_awips_f%FCSTHR%_%CYC% - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f000.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f000.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f000.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f000.ecf.BAK b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f000.ecf.BAK deleted file mode 100755 index aad9179552..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f000.ecf.BAK +++ /dev/null @@ -1,66 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:06 -#BSUB -n 2 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=2] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f003.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f003.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f003.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f006.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f006.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f006.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f009.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f009.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f009.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f012.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f012.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f012.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f015.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f015.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f015.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f018.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f018.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f018.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f021.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f021.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f021.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f024.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f024.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f024.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f027.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f027.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f027.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f030.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f030.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f030.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f033.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f033.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f033.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f036.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f036.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f036.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f039.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f039.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f039.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f042.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f042.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f042.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f045.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f045.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f045.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f048.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f048.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f048.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f051.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f051.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f051.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f054.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f054.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f054.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f057.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f057.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f057.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f060.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f060.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f060.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f063.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f063.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f063.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f066.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f066.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f066.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f069.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f069.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f069.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f072.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f072.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f072.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f075.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f075.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f075.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f078.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f078.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f078.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f081.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f081.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f081.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f084.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f084.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f084.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f090.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f090.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f090.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f096.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f096.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f096.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f102.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f102.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f102.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f108.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f108.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f108.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f114.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f114.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f114.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f120.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f120.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f120.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f126.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f126.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f126.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f132.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f132.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f132.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f138.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f138.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f138.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f144.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f144.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f144.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f150.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f150.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f150.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f156.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f156.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f156.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f162.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f162.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f162.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f168.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f168.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f168.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f174.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f174.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f174.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f180.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f180.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f180.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f186.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f186.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f186.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f192.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f192.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f192.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f198.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f198.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f198.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f204.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f204.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f204.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f210.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f210.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f210.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f216.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f216.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f216.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f222.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f222.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f222.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f228.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f228.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f228.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f234.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f234.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f234.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f240.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f240.ecf deleted file mode 100755 index 51ff6d8277..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/awips_g2/jgfs_awips_g2_f240.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUESHARED% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_awips_g2_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_awips_g2_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -M 1000 -#BSUB -R affinity[core(1)] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export FHRGRP=%FHRGRP% -export FHRLST=%FHRLST% -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -trdrun=%TRDRUN% - -export job="jgfs_awips_f${fcsthrs}_${cyc}" - -############################################################ -# CALL executable job script here -############################################################ -$HOMEgfs/jobs/JGFS_AWIPS_G2 - -############################################################### - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/bufr_sounding.20190514/jgfs_postsnd.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/bufr_sounding.20190514/jgfs_postsnd.ecf deleted file mode 100755 index 29ee2c9a1b..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/bufr_sounding.20190514/jgfs_postsnd.ecf +++ /dev/null @@ -1,65 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_postsnd_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_postsnd_%CYC%.o%J -#BSUB -W 2:00 -#BSUB -n 12 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=4] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver -module load CFP/$CFP_ver -module use -a /gpfs/dell1/nco/ops/nwprod/modulefiles/ -module load gempak/$gempak_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} - -. ${EXPDIR}/config.base -. ${EXPDIR}/config.postsnd -. ${HOMEgfs}/env/WCOSS_DELL_P3.env postsnd - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_POSTSND - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/bufr_sounding/jgfs_postsnd.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/bufr_sounding/jgfs_postsnd.ecf deleted file mode 100755 index cd5dd5ef22..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/bufr_sounding/jgfs_postsnd.ecf +++ /dev/null @@ -1,64 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_postsnd_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_postsnd_%CYC%.o%J -#BSUB -W 2:00 -#BSUB -n 12 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=4] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver -module load CFP/$CFP_ver -module load gempak/$gempak_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} - -. ${EXPDIR}/config.base -. ${EXPDIR}/config.postsnd -. ${HOMEgfs}/env/WCOSS_DELL_P3.env postsnd - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_POSTSND - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/bulletins/jgfs_fbwind.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/bulletins/jgfs_fbwind.ecf deleted file mode 100755 index 7097c0c890..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/bulletins/jgfs_fbwind.ecf +++ /dev/null @@ -1,56 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_fbwind_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_fbwind_%CYC%.o%J -#BSUB -W 0:05 -#BSUB -n 2 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=2] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load ips/$ips_ver -module load impi/$impi_ver -module load EnvVars/$EnvVars_ver -module load CFP/$CFP_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_FBWIND - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib2_wafs/jgfs_wafs_blending.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib2_wafs/jgfs_wafs_blending.ecf deleted file mode 100755 index 7750291cd9..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib2_wafs/jgfs_wafs_blending.ecf +++ /dev/null @@ -1,60 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_blending_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_blending_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -export SHOUR=06 -export EHOUR=36 -export FHINC=03 - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS_BLENDING - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib2_wafs/jgfs_wafs_grib2.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib2_wafs/jgfs_wafs_grib2.ecf deleted file mode 100755 index 6ce66bc2d3..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib2_wafs/jgfs_wafs_grib2.ecf +++ /dev/null @@ -1,60 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_grib2_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_grib2_%CYC%.o%J -#BSUB -W 0:30 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -export SHOUR=06 -export EHOUR=36 -export FHINC=03 - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS_GRIB2 - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f00.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f00.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f00.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f06.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f06.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f06.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f102.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f102.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f102.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f108.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f108.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f108.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f114.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f114.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f114.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f12.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f12.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f12.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f120.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f120.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f120.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f18.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f18.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f18.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f24.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f24.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f24.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f30.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f30.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f30.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f36.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f36.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f36.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f42.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f42.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f42.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f48.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f48.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f48.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f54.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f54.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f54.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f60.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f60.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f60.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f66.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f66.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f66.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f72.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f72.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f72.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f78.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f78.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f78.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f84.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f84.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f84.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f90.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f90.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f90.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f96.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f96.ecf deleted file mode 100755 index 0786461cef..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/grib_wafs/jgfs_wafs_f96.ecf +++ /dev/null @@ -1,58 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_%FCSTHR%_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_%FCSTHR%_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export model=%model:gfs% -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -export fcsthrs=%FCSTHR% - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/post_processing/jgfs_wafs_gcip.ecf b/ecflow/ecf/scripts/gfs_FV3/post_processing/jgfs_wafs_gcip.ecf deleted file mode 100755 index 462f8edc77..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/post_processing/jgfs_wafs_gcip.ecf +++ /dev/null @@ -1,57 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_wafs_gcip_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_wafs_gcip_%CYC%.o%J -#BSUB -W 0:30 -#BSUB -n 2 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load lsf/$lsf_ver -module load CFP/$CFP_ver -module load grib_util/$grib_util_ver -module load bufr_dumplist/$bufr_dumplist_ver -module load dumpjb/$dumpjb_ver - -module list - -#%include -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGFS_WAFS_GCIP - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/prep/jgfs_emcsfc_sfc_prep.ecf b/ecflow/ecf/scripts/gfs_FV3/prep/jgfs_emcsfc_sfc_prep.ecf deleted file mode 100755 index d7551a00c1..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/prep/jgfs_emcsfc_sfc_prep.ecf +++ /dev/null @@ -1,52 +0,0 @@ -#! /bin/sh -#BSUB -q %QUEUE% -#BSUB -P %PROJ% -#BSUB -J %E%gfs_emcsfc_sfc_prep_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/gfs_emcsfc_sfc_prep_%CYC%.o%J -#BSUB -W 0:10 -#BSUB -n 1 -#BSUB -R affinity[core(1)] -#BSUB -R span[ptile=1] -#BSUB -cwd /tmp - -%include -%include - -set -x - -export NET=%NET:gfs% -export RUN=%RUN% -export CDUMP=%RUN% - -model=gfs -%include - -############################################################ -# Load modules -############################################################ -module load grib_util/$grib_util_ver - -module list - -#%include -export USE_CFP=YES -export ROTDIR=%COM% -export cyc=%CYC% -export cycle=t%CYC%z -export SCRgfs=${HOMEgfs}/scripts - -############################################################ -# CALL executable job script here -############################################################ -${HOMEgfs}/jobs/JGLOBAL_EMCSFC_SFC_PREP - -if [ $? -ne 0 ]; then - ecflow_client --msg="***JOB ${ECF_NAME} ERROR RUNNING J-SCRIPT ***" - ecflow_client --abort - exit -fi - -%include -%manual - -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/prep/jgfs_prep.ecf b/ecflow/ecf/scripts/gfs_FV3/prep/jgfs_prep.ecf deleted file mode 100755 index a9fc222c67..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/prep/jgfs_prep.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#BSUB -J %E%%RUN%_prep_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/%RUN%_prep_%CYC%.o%J -#BSUB -cwd /tmp -#BSUB -q %QUEUE% -#BSUB -L /bin/sh -#BSUB -P %PROJ% -#BSUB -W 00:20 -#BSUB -R span[ptile=3]; -R affinity[core] -#BSUB -n 3 -#BSUB -M 18000 - -%include -%include - -export NODES=1 - -export model=obsproc_global -%include - -############################################################# -## Load modules -############################################################## -#. $MODULESHOME/init/sh -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load CFP/$cfp_ver -module list - -############################################################# -## WCOSS_C environment settings -############################################################## - -################################################ -# EXPORT list here - -set -x - -export cyc=%CYC% - -# CALL executable job script here -${HOMEobsproc_global}/jobs/JGLOBAL_PREP - -%include -%manual -###################################################################### -# Purpose: -# -# -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/prep/jgfs_prep_post.ecf b/ecflow/ecf/scripts/gfs_FV3/prep/jgfs_prep_post.ecf deleted file mode 100755 index 02583bca40..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/prep/jgfs_prep_post.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#BSUB -J %E%%RUN%_prep_post_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/%RUN%_prep_post_%CYC%.o%J -#BSUB -L /bin/sh -#BSUB -q %QUEUESERV% -#BSUB -cwd /tmp -#BSUB -W 00:10 -#BSUB -P %PROJ% -#BSUB -M 1000 -#BSUB -R affinity[core] - -%include -%include - -set -x - -export model=obsproc_global -%include - -############################################################# -## Load modules -############################################################## -#. $MODULESHOME/init/sh -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load CFP/$cfp_ver -module list - -############################################################# -## WCOSS_C environment settings -############################################################## - -################################################ -# EXPORT list here - -set -x -export cyc=%CYC% - -#export PROCESS_ALL_REPORT_COUNTS=NO - -# CALL executable job script here -$HOMEobsproc_global/jobs/JGLOBAL_PREP_POST - -%include -%manual -###################################################################### -# Purpose: Job to execute the GFS PREPBUFR post-processing for -# the 00Z cycle (creating unrestricted PREPBUFR files) -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -%end - diff --git a/ecflow/ecf/scripts/gfs_FV3/prep/jglobal_prep.ecf b/ecflow/ecf/scripts/gfs_FV3/prep/jglobal_prep.ecf deleted file mode 100755 index 0c7097fd96..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/prep/jglobal_prep.ecf +++ /dev/null @@ -1,60 +0,0 @@ -#BSUB -J %E%%RUN%_prep_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/%RUN%_prep_%CYC%.o%J -#BSUB -cwd /tmp -#BSUB -q %QUEUE% -#BSUB -L /bin/sh -#BSUB -P %PROJ% -##BSUB -W 00:30 -#BSUB -W 00:35 -#BSUB -R span[ptile=3]; -R affinity[core] -#BSUB -n 3 -#BSUB -M 18000 - -%include -%include - -export NODES=1 - -export model=obsproc_global -%include - -############################################################# -## Load modules -############################################################## -#. $MODULESHOME/init/sh -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load CFP/$cfp_ver -module list - -############################################################# -## WCOSS_C environment settings -############################################################## - -################################################ -# EXPORT list here - -set -x - -export cyc=%CYC% - -# CALL executable job script here -${HOMEobsproc_global}/jobs/JGLOBAL_PREP - -%include -%manual -###################################################################### -# Purpose: -# -# -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -%end diff --git a/ecflow/ecf/scripts/gfs_FV3/prep/jglobal_prep_post.ecf b/ecflow/ecf/scripts/gfs_FV3/prep/jglobal_prep_post.ecf deleted file mode 100755 index 31ec73452f..0000000000 --- a/ecflow/ecf/scripts/gfs_FV3/prep/jglobal_prep_post.ecf +++ /dev/null @@ -1,59 +0,0 @@ -#BSUB -J %E%%RUN%_prep_post_%CYC% -#BSUB -o %COM%/output/%ENVIR%/today/%RUN%_prep_post_%CYC%.o%J -#BSUB -L /bin/sh -#BSUB -q %QUEUESERV% -#BSUB -cwd /tmp -##BSUB -W 00:30 -#BSUB -W 00:15 -#BSUB -P %PROJ% -#BSUB -M 1000 - -%include -%include - -set -x - -export model=obsproc_global -%include - -############################################################# -## Load modules -############################################################## -#. $MODULESHOME/init/sh -module load EnvVars/$EnvVars_ver -module load ips/$ips_ver -module load impi/$impi_ver -module load CFP/$cfp_ver -module list - -############################################################# -## WCOSS_C environment settings -############################################################## - -################################################ -# EXPORT list here - -set -x -export cyc=%CYC% - -#export PROCESS_ALL_REPORT_COUNTS=NO - -# CALL executable job script here -$HOMEobsproc_global/jobs/JGLOBAL_PREP_POST - -%include -%manual -###################################################################### -# Purpose: Job to execute the GFS PREPBUFR post-processing for -# the 00Z cycle (creating unrestricted PREPBUFR files) -###################################################################### - -###################################################################### -# Job specific troubleshooting instructions: -# see generic troubleshoot manual page -# -###################################################################### - -# include manual page below -%end - diff --git a/ecflow/ecf/versions/gfs.ver b/ecflow/ecf/versions/gfs.ver deleted file mode 100644 index c16b91fb51..0000000000 --- a/ecflow/ecf/versions/gfs.ver +++ /dev/null @@ -1,22 +0,0 @@ -export gfs_ver="v15.1.1" -export EnvVars_ver="1.0.2" -export lsf_ver="10.1" -export emc_utils_ver="1.0.0" -export ips_ver="18.0.1.163" -export NetCDF_ver="4.5.0" -export HDF5_serial_ver="1.10.1" -export impi_ver="18.0.1" -export bufr_ver="11.2.0" -export crtm_ver="2.2.6" -export grib_util_ver="1.1.0" -export g2tmpl_ver="1.5.0" -export ESMF_ver="7_1_0r" -export CFP_ver="2.0.1" -export pm5_ver="1.0" -export gempak_ver="7.3.1" -export bufr_dumplist_ver="2.0.0" -export dumpjb_ver="5.0.2" -export NCL_ver="6.4.0" -# -export PATH=.:$PATH -#export COMPATH=/gpfs/dell1/nco/ops/com/gfs diff --git a/env/AWSPW.env b/env/AWSPW.env new file mode 100755 index 0000000000..894cce2343 --- /dev/null +++ b/env/AWSPW.env @@ -0,0 +1,137 @@ +#! /usr/bin/env bash + +if [[ $# -ne 1 ]]; then + + echo "Must specify an input argument to set runtime environment variables!" + echo "argument can be any one of the following:" + echo "atmanlrun atmensanlrun aeroanlrun landanlrun" + echo "anal sfcanl fcst post metp" + echo "eobs eupd ecen efcs epos" + echo "postsnd awips gempak" + exit 1 + +fi + +step=$1 + +export npe_node_max=36 +export launcher="mpiexec.hydra" +export mpmd_opt="" + +# Configure MPI environment +export OMP_STACKSIZE=2048000 +export NTHSTACK=1024000000 + +ulimit -s unlimited +ulimit -a + +if [[ "${step}" = "fcst" ]] || [[ "${step}" = "efcs" ]]; then + + if [[ "${CDUMP}" =~ "gfs" ]]; then + nprocs="npe_${step}_gfs" + ppn="npe_node_${step}_gfs" || ppn="npe_node_${step}" + else + nprocs="npe_${step}" + ppn="npe_node_${step}" + fi + (( nnodes = (${!nprocs}+${!ppn}-1)/${!ppn} )) + (( ntasks = nnodes*${!ppn} )) + # With ESMF threading, the model wants to use the full node + export APRUN_UFS="${launcher} -n ${ntasks}" + unset nprocs ppn nnodes ntasks + +elif [[ "${step}" = "post" ]]; then + + nth_max=$((npe_node_max / npe_node_post)) + + export NTHREADS_NP=${nth_np:-1} + [[ ${NTHREADS_NP} -gt ${nth_max} ]] && export NTHREADS_NP=${nth_max} + export APRUN_NP="${launcher} -n ${npe_post}" + + export NTHREADS_DWN=${nth_dwn:-1} + [[ ${NTHREADS_DWN} -gt ${nth_max} ]] && export NTHREADS_DWN=${nth_max} + export APRUN_DWN="${launcher} -n ${npe_dwn}" + +elif [[ "${step}" = "ecen" ]]; then + + nth_max=$((npe_node_max / npe_node_ecen)) + + export NTHREADS_ECEN=${nth_ecen:-${nth_max}} + [[ ${NTHREADS_ECEN} -gt ${nth_max} ]] && export NTHREADS_ECEN=${nth_max} + export APRUN_ECEN="${launcher} -n ${npe_ecen}" + + export NTHREADS_CHGRES=${nth_chgres:-12} + [[ ${NTHREADS_CHGRES} -gt ${npe_node_max} ]] && export NTHREADS_CHGRES=${npe_node_max} + export APRUN_CHGRES="time" + + export NTHREADS_CALCINC=${nth_calcinc:-1} + [[ ${NTHREADS_CALCINC} -gt ${nth_max} ]] && export NTHREADS_CALCINC=${nth_max} + export APRUN_CALCINC="${launcher} -n ${npe_ecen}" + +elif [[ "${step}" = "esfc" ]]; then + + nth_max=$((npe_node_max / npe_node_esfc)) + + export NTHREADS_ESFC=${nth_esfc:-${nth_max}} + [[ ${NTHREADS_ESFC} -gt ${nth_max} ]] && export NTHREADS_ESFC=${nth_max} + export APRUN_ESFC="${launcher} -n ${npe_esfc}" + + export NTHREADS_CYCLE=${nth_cycle:-14} + [[ ${NTHREADS_CYCLE} -gt ${npe_node_max} ]] && export NTHREADS_CYCLE=${npe_node_max} + export APRUN_CYCLE="${launcher} -n ${npe_esfc}" + +elif [[ "${step}" = "epos" ]]; then + + nth_max=$((npe_node_max / npe_node_epos)) + + export NTHREADS_EPOS=${nth_epos:-${nth_max}} + [[ ${NTHREADS_EPOS} -gt ${nth_max} ]] && export NTHREADS_EPOS=${nth_max} + export APRUN_EPOS="${launcher} -n ${npe_epos}" + +elif [[ "${step}" = "postsnd" ]]; then + + export CFP_MP="YES" + + nth_max=$((npe_node_max / npe_node_postsnd)) + + export NTHREADS_POSTSND=${nth_postsnd:-1} + [[ ${NTHREADS_POSTSND} -gt ${nth_max} ]] && export NTHREADS_POSTSND=${nth_max} + export APRUN_POSTSND="${launcher} -n ${npe_postsnd}" + + export NTHREADS_POSTSNDCFP=${nth_postsndcfp:-1} + [[ ${NTHREADS_POSTSNDCFP} -gt ${nth_max} ]] && export NTHREADS_POSTSNDCFP=${nth_max} + export APRUN_POSTSNDCFP="${launcher} -n ${npe_postsndcfp} ${mpmd_opt}" + +elif [[ "${step}" = "awips" ]]; then + + nth_max=$((npe_node_max / npe_node_awips)) + + export NTHREADS_AWIPS=${nth_awips:-2} + [[ ${NTHREADS_AWIPS} -gt ${nth_max} ]] && export NTHREADS_AWIPS=${nth_max} + export APRUN_AWIPSCFP="${launcher} -n ${npe_awips} ${mpmd_opt}" + +elif [[ "${step}" = "gempak" ]]; then + + export CFP_MP="YES" + + if [[ ${CDUMP} == "gfs" ]]; then + npe_gempak=${npe_gempak_gfs} + npe_node_gempak=${npe_node_gempak_gfs} + fi + + nth_max=$((npe_node_max / npe_node_gempak)) + + export NTHREADS_GEMPAK=${nth_gempak:-1} + [[ ${NTHREADS_GEMPAK} -gt ${nth_max} ]] && export NTHREADS_GEMPAK=${nth_max} + export APRUN="${launcher} -n ${npe_gempak} ${mpmd_opt}" + + +elif [[ "${step}" = "fit2obs" ]]; then + + nth_max=$((npe_node_max / npe_node_fit2obs)) + + export NTHREADS_FIT2OBS=${nth_fit2obs:-1} + [[ ${NTHREADS_FIT2OBS} -gt ${nth_max} ]] && export NTHREADS_FIT2OBS=${nth_max} + export MPIRUN="${launcher} -n ${npe_fit2obs}" + +fi diff --git a/env/CONTAINER.env b/env/CONTAINER.env new file mode 100755 index 0000000000..bfeb6dd6da --- /dev/null +++ b/env/CONTAINER.env @@ -0,0 +1,38 @@ +#! /usr/bin/env bash + +if [[ $# -ne 1 ]]; then + + echo "Must specify an input argument to set runtime environment variables!" + echo "argument can be any one of the following:" + echo "atmanlrun atmensanlrun aeroanlrun landanl" + echo "anal sfcanl fcst post metp" + echo "eobs eupd ecen efcs epos" + echo "postsnd awips gempak" + exit 1 + +fi + +step=$1 + +export npe_node_max=40 +export launcher="mpirun" +export mpmd_opt="--multi-prog" + +# Configure MPI environment +export MPI_BUFS_PER_PROC=2048 +export MPI_BUFS_PER_HOST=2048 +export MPI_GROUP_MAX=256 +export MPI_MEMMAP_OFF=1 +export MP_STDOUTMODE="ORDERED" +export KMP_AFFINITY=scatter +export OMP_STACKSIZE=2048000 +export NTHSTACK=1024000000 + +ulimit -s unlimited +ulimit -a + + +if [ "${step}" = "ocnanalrun" ]; then + export NTHREADS_OCNANAL=1 + export APRUN_OCNANAL="${launcher} -n 2" +fi diff --git a/env/HERA.env b/env/HERA.env index 6031433fd9..284d54820e 100755 --- a/env/HERA.env +++ b/env/HERA.env @@ -1,10 +1,11 @@ -#!/bin/ksh -x +#! /usr/bin/env bash -if [ $# -ne 1 ]; then +if [[ $# -ne 1 ]]; then echo "Must specify an input argument to set runtime environment variables!" echo "argument can be any one of the following:" - echo "anal fcst post vrfy metp" + echo "atmanlrun atmensanlrun aeroanlrun landanl" + echo "anal sfcanl fcst post metp" echo "eobs eupd ecen efcs epos" echo "postsnd awips gempak" exit 1 @@ -14,7 +15,8 @@ fi step=$1 export npe_node_max=40 -export launcher="srun --export=ALL" +export launcher="srun -l --export=ALL" +export mpmd_opt="--multi-prog --output=mpmd.%j.%t.out" # Configure MPI environment #export I_MPI_ADJUST_ALLREDUCE=5 @@ -25,205 +27,269 @@ export launcher="srun --export=ALL" #export MP_STDOUTMODE="ORDERED" export OMP_STACKSIZE=2048000 export NTHSTACK=1024000000 -##export LD_BIND_NOW=1 -export job=${PBS_JOBNAME:-$step} -export jobid=${job}.${PBS_JOBID:-$$} +#export LD_BIND_NOW=1 +ulimit -s unlimited +ulimit -a -if [ $step = "prep" -o $step = "prepbufr" ]; then +if [[ "${step}" = "prep" ]] || [[ "${step}" = "prepbufr" ]]; then - nth_max=$(($npe_node_max / $npe_node_prep)) + nth_max=$((npe_node_max / npe_node_prep)) export POE="NO" export BACK="NO" export sys_tp="HERA" + export launcher_PREP="srun" -elif [ $step = "waveinit" -o $step = "waveprep" -o $step = "wavepostsbs" ]; then +elif [[ "${step}" = "preplandobs" ]]; then + + export APRUN_CALCFIMS="${launcher} -n 1" + +elif [[ "${step}" = "waveinit" ]] || [[ "${step}" = "waveprep" ]] || [[ "${step}" = "wavepostsbs" ]] || [[ "${step}" = "wavepostbndpnt" ]] || [[ "${step}" = "wavepostbndpntbll" ]] || [[ "${step}" = "wavepostpnt" ]]; then - export mpmd="--multi-prog" export CFP_MP="YES" - if [ $step = "waveprep" ]; then export MP_PULSE=0 ; fi + if [[ "${step}" = "waveprep" ]]; then export MP_PULSE=0 ; fi + export wavempexec=${launcher} + export wave_mpmd=${mpmd_opt} +elif [[ "${step}" = "atmanlrun" ]]; then -elif [ $step = "anal" ]; then + nth_max=$((npe_node_max / npe_node_atmanlrun)) - export MKL_NUM_THREADS=4 - export MKL_CBWR=AUTO + export NTHREADS_ATMANL=${nth_atmanlrun:-${nth_max}} + [[ ${NTHREADS_ATMANL} -gt ${nth_max} ]] && export NTHREADS_ATMANL=${nth_max} + export APRUN_ATMANL="${launcher} -n ${npe_atmanlrun} --cpus-per-task=${NTHREADS_ATMANL}" - nth_max=$(($npe_node_max / $npe_node_anal)) +elif [[ "${step}" = "atmensanlrun" ]]; then - export NTHREADS_GSI=${nth_anal:-$nth_max} - [[ $NTHREADS_GSI -gt $nth_max ]] && export NTHREADS_GSI=$nth_max - export APRUN_GSI="$launcher" + nth_max=$((npe_node_max / npe_node_atmensanlrun)) - export NTHREADS_CALCINC=${nth_calcinc:-1} - [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max - export APRUN_CALCINC="$launcher" + export NTHREADS_ATMENSANL=${nth_atmensanlrun:-${nth_max}} + [[ ${NTHREADS_ATMENSANL} -gt ${nth_max} ]] && export NTHREADS_ATMENSANL=${nth_max} + export APRUN_ATMENSANL="${launcher} -n ${npe_atmensanlrun} --cpus-per-task=${NTHREADS_ATMENSANL}" - export NTHREADS_CYCLE=${nth_cycle:-12} - [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max - npe_cycle=${ntiles:-6} - export APRUN_CYCLE="$launcher -n $npe_cycle" +elif [[ "${step}" = "aeroanlrun" ]]; then + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" - export NTHREADS_GAUSFCANL=1 - npe_gausfcanl=${npe_gausfcanl:-1} - export APRUN_GAUSFCANL="$launcher -n $npe_gausfcanl" + nth_max=$((npe_node_max / npe_node_aeroanlrun)) - export NTHREADS_CHGRES=${nth_echgres:-1} - [[ $NTHREADS_CHGRES -gt $npe_node_max ]] && export NTHREADS_CHGRES=$npe_node_max - export APRUN_CHGRES="" + export NTHREADS_AEROANL=${nth_aeroanlrun:-${nth_max}} + [[ ${NTHREADS_AEROANL} -gt ${nth_max} ]] && export NTHREADS_AEROANL=${nth_max} + export APRUN_AEROANL="${launcher} -n ${npe_aeroanlrun} --cpus-per-task=${NTHREADS_AEROANL}" - export CFP_MP=${CFP_MP:-"YES"} - export USE_CFP=${USE_CFP:-"YES"} - export APRUNCFP="$launcher -n \$ncmd --multi-prog" +elif [[ "${step}" = "landanl" ]]; then -elif [ $step = "gldas" ]; then + nth_max=$((npe_node_max / npe_node_landanl)) - nth_max=$(($npe_node_max / $npe_node_gldas)) + export NTHREADS_LANDANL=${nth_landanl:-${nth_max}} + [[ ${NTHREADS_LANDANL} -gt ${nth_max} ]] && export NTHREADS_LANDANL=${nth_max} + export APRUN_LANDANL="${launcher} -n ${npe_landanl} --cpus-per-task=${NTHREADS_LANDANL}" - export NTHREADS_GLDAS=${nth_gldas:-$nth_max} - [[ $NTHREADS_GLDAS -gt $nth_max ]] && export NTHREADS_GLDAS=$nth_max - export APRUN_GLDAS="$launcher -n $npe_gldas" + export APRUN_APPLY_INCR="${launcher} -n 6" - export NTHREADS_GAUSSIAN=${nth_gaussian:-1} - [[ $NTHREADS_GAUSSIAN -gt $nth_max ]] && export NTHREADS_GAUSSIAN=$nth_max - export APRUN_GAUSSIAN="$launcher -n $npe_gaussian" +elif [[ "${step}" = "ocnanalbmat" ]]; then -# Must run data processing with exactly the number of tasks as time -# periods being processed. + export APRUNCFP="${launcher} -n \$ncmd --multi-prog" - npe_gldas_data_proc=$(($gldas_spinup_hours + 12)) - export APRUN_GLDAS_DATA_PROC="$launcher -n $npe_gldas_data_proc --multi-prog" + nth_max=$((npe_node_max / npe_node_ocnanalbmat)) -elif [ $step = "eobs" ]; then + export NTHREADS_OCNANAL=${nth_ocnanalbmat:-${nth_max}} + [[ ${NTHREADS_OCNANAL} -gt ${nth_max} ]] && export NTHREADS_OCNANAL=${nth_max} + export APRUN_OCNANAL="${launcher} -n ${npe_ocnanalbmat} --cpus-per-task=${NTHREADS_OCNANAL}" - export MKL_NUM_THREADS=4 - export MKL_CBWR=AUTO +elif [[ "${step}" = "ocnanalrun" ]]; then + + export APRUNCFP="${launcher} -n \$ncmd --multi-prog" - nth_max=$(($npe_node_max / $npe_node_eobs)) + nth_max=$((npe_node_max / npe_node_ocnanalrun)) - export NTHREADS_GSI=${nth_eobs:-$nth_max} - [[ $NTHREADS_GSI -gt $nth_max ]] && export NTHREADS_GSI=$nth_max - export APRUN_GSI="$launcher" + export NTHREADS_OCNANAL=${nth_ocnanalrun:-${nth_max}} + [[ ${NTHREADS_OCNANAL} -gt ${nth_max} ]] && export NTHREADS_OCNANAL=${nth_max} + export APRUN_OCNANAL="${launcher} -n ${npe_ocnanalrun} --cpus-per-task=${NTHREADS_OCNANAL}" + +elif [[ "${step}" = "ocnanalchkpt" ]]; then + + export APRUNCFP="${launcher} -n \$ncmd --multi-prog" + + nth_max=$((npe_node_max / npe_node_ocnanalchkpt)) + + export NTHREADS_OCNANAL=${nth_ocnanalchkpt:-${nth_max}} + [[ ${NTHREADS_OCNANAL} -gt ${nth_max} ]] && export NTHREADS_OCNANAL=${nth_max} + export APRUN_OCNANAL="${launcher} -n ${npe_ocnanalchkpt} --cpus-per-task=${NTHREADS_OCNANAL}" + +elif [[ "${step}" = "anal" ]] || [[ "${step}" = "analcalc" ]]; then + + export MKL_NUM_THREADS=4 + export MKL_CBWR=AUTO export CFP_MP=${CFP_MP:-"YES"} export USE_CFP=${USE_CFP:-"YES"} - export APRUNCFP="$launcher -n \$ncmd --multi-prog" + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" + + nth_max=$((npe_node_max / npe_node_anal)) + + export NTHREADS_GSI=${nth_anal:-${nth_max}} + [[ ${NTHREADS_GSI} -gt ${nth_max} ]] && export NTHREADS_GSI=${nth_max} + export APRUN_GSI="${launcher} -n ${npe_gsi:-${npe_anal}} --cpus-per-task=${NTHREADS_GSI}" + + export NTHREADS_CALCINC=${nth_calcinc:-1} + [[ ${NTHREADS_CALCINC} -gt ${nth_max} ]] && export NTHREADS_CALCINC=${nth_max} + export APRUN_CALCINC="${launcher} \$ncmd --cpus-per-task=${NTHREADS_CALCINC}" + + export NTHREADS_CYCLE=${nth_cycle:-12} + [[ ${NTHREADS_CYCLE} -gt ${npe_node_max} ]] && export NTHREADS_CYCLE=${npe_node_max} + npe_cycle=${ntiles:-6} + export APRUN_CYCLE="${launcher} -n ${npe_cycle} --cpus-per-task=${NTHREADS_CYCLE}" + + export NTHREADS_GAUSFCANL=1 + npe_gausfcanl=${npe_gausfcanl:-1} + export APRUN_GAUSFCANL="${launcher} -n ${npe_gausfcanl} --cpus-per-task=${NTHREADS_GAUSFCANL}" + +elif [[ "${step}" = "sfcanl" ]]; then + + nth_max=$((npe_node_max / npe_node_sfcanl)) -elif [ $step = "eupd" ]; then + export NTHREADS_CYCLE=${nth_sfcanl:-14} + [[ ${NTHREADS_CYCLE} -gt ${npe_node_max} ]] && export NTHREADS_CYCLE=${npe_node_max} + npe_sfcanl=${ntiles:-6} + export APRUN_CYCLE="${launcher} -n ${npe_sfcanl} --cpus-per-task=${NTHREADS_CYCLE}" - nth_max=$(($npe_node_max / $npe_node_eupd)) +elif [[ "${step}" = "eobs" ]]; then - export NTHREADS_ENKF=${nth_eupd:-$nth_max} - [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max - export APRUN_ENKF="$launcher" + export MKL_NUM_THREADS=4 + export MKL_CBWR=AUTO + + nth_max=$((npe_node_max / npe_node_eobs)) + + export NTHREADS_GSI=${nth_eobs:-${nth_max}} + [[ ${NTHREADS_GSI} -gt ${nth_max} ]] && export NTHREADS_GSI=${nth_max} + export APRUN_GSI="${launcher} -n ${npe_gsi:-${npe_eobs}} --cpus-per-task=${NTHREADS_GSI}" export CFP_MP=${CFP_MP:-"YES"} export USE_CFP=${USE_CFP:-"YES"} - export APRUNCFP="$launcher -n \$ncmd --multi-prog" + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" -elif [ $step = "fcst" ]; then +elif [[ "${step}" = "eupd" ]]; then - nth_max=$(($npe_node_max / $npe_node_fcst)) + nth_max=$((npe_node_max / npe_node_eupd)) - export NTHREADS_FV3=${nth_fv3:-$nth_max} - [[ $NTHREADS_FV3 -gt $nth_max ]] && export NTHREADS_FV3=$nth_max - export cores_per_node=$npe_node_max - export APRUN_FV3="$launcher" + export NTHREADS_ENKF=${nth_eupd:-${nth_max}} + [[ ${NTHREADS_ENKF} -gt ${nth_max} ]] && export NTHREADS_ENKF=${nth_max} + export APRUN_ENKF="${launcher} -n ${npe_enkf:-${npe_eupd}} --cpus-per-task=${NTHREADS_ENKF}" - export NTHREADS_REGRID_NEMSIO=${nth_regrid_nemsio:-1} - [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max - export APRUN_REGRID_NEMSIO="$launcher" - - export NTHREADS_REMAP=${nth_remap:-2} - [[ $NTHREADS_REMAP -gt $nth_max ]] && export NTHREADS_REMAP=$nth_max - export APRUN_REMAP="$launcher" + export CFP_MP=${CFP_MP:-"YES"} + export USE_CFP=${USE_CFP:-"YES"} + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" -elif [ $step = "efcs" ]; then +elif [[ "${step}" = "fcst" ]] || [[ "${step}" = "efcs" ]]; then - nth_max=$(($npe_node_max / $npe_node_efcs)) + if [[ "${CDUMP}" =~ "gfs" ]]; then + nprocs="npe_${step}_gfs" + ppn="npe_node_${step}_gfs" || ppn="npe_node_${step}" + else + nprocs="npe_${step}" + ppn="npe_node_${step}" + fi + (( nnodes = (${!nprocs}+${!ppn}-1)/${!ppn} )) + (( ntasks = nnodes*${!ppn} )) + # With ESMF threading, the model wants to use the full node + export APRUN_UFS="${launcher} -n ${ntasks}" + unset nprocs ppn nnodes ntasks - export NTHREADS_FV3=${nth_efcs:-$nth_max} - [[ $NTHREADS_FV3 -gt $nth_max ]] && export NTHREADS_FV3=$nth_max - export cores_per_node=$npe_node_max - export APRUN_FV3="$launcher" - export NTHREADS_REGRID_NEMSIO=${nth_regrid_nemsio:-1} - [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max - export APRUN_REGRID_NEMSIO="$launcher $LEVS" +elif [[ "${step}" = "upp" ]]; then -elif [ $step = "post" ]; then + nth_max=$((npe_node_max / npe_node_upp)) - nth_max=$(($npe_node_max / $npe_node_post)) + export NTHREADS_UPP=${nth_upp:-1} + [[ ${NTHREADS_UPP} -gt ${nth_max} ]] && export NTHREADS_UPP=${nth_max} + export APRUN_UPP="${launcher} -n ${npe_upp} --cpus-per-task=${NTHREADS_UPP}" - export NTHREADS_NP=${nth_np:-1} - [[ $NTHREADS_NP -gt $nth_max ]] && export NTHREADS_NP=$nth_max - export APRUN_NP="$launcher" +elif [[ "${step}" = "atmos_products" ]]; then - export NTHREADS_DWN=${nth_dwn:-1} - [[ $NTHREADS_DWN -gt $nth_max ]] && export NTHREADS_DWN=$nth_max - export APRUN_DWN="$launcher" + export USE_CFP="YES" # Use MPMD for downstream product generation on Hera -elif [ $step = "ecen" ]; then +elif [[ "${step}" = "ecen" ]]; then - nth_max=$(($npe_node_max / $npe_node_ecen)) + nth_max=$((npe_node_max / npe_node_ecen)) - export NTHREADS_ECEN=${nth_ecen:-$nth_max} - [[ $NTHREADS_ECEN -gt $nth_max ]] && export NTHREADS_ECEN=$nth_max - export APRUN_ECEN="$launcher" + export NTHREADS_ECEN=${nth_ecen:-${nth_max}} + [[ ${NTHREADS_ECEN} -gt ${nth_max} ]] && export NTHREADS_ECEN=${nth_max} + export APRUN_ECEN="${launcher} -n ${npe_ecen} --cpus-per-task=${NTHREADS_ECEN}" export NTHREADS_CHGRES=${nth_chgres:-12} - [[ $NTHREADS_CHGRES -gt $npe_node_max ]] && export NTHREADS_CHGRES=$npe_node_max + [[ ${NTHREADS_CHGRES} -gt ${npe_node_max} ]] && export NTHREADS_CHGRES=${npe_node_max} export APRUN_CHGRES="time" export NTHREADS_CALCINC=${nth_calcinc:-1} - [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max - export APRUN_CALCINC="$launcher" + [[ ${NTHREADS_CALCINC} -gt ${nth_max} ]] && export NTHREADS_CALCINC=${nth_max} + export APRUN_CALCINC="${launcher} -n ${npe_ecen} --cpus-per-task=${NTHREADS_CALCINC}" -elif [ $step = "esfc" ]; then +elif [[ "${step}" = "esfc" ]]; then - nth_max=$(($npe_node_max / $npe_node_esfc)) + nth_max=$((npe_node_max / npe_node_esfc)) - export NTHREADS_ESFC=${nth_esfc:-$nth_max} - [[ $NTHREADS_ESFC -gt $nth_max ]] && export NTHREADS_ESFC=$nth_max - export APRUN_ESFC="$launcher -n $npe_esfc" + export NTHREADS_ESFC=${nth_esfc:-${nth_max}} + [[ ${NTHREADS_ESFC} -gt ${nth_max} ]] && export NTHREADS_ESFC=${nth_max} + export APRUN_ESFC="${launcher} -n ${npe_esfc} --cpus-per-task=${NTHREADS_ESFC}" export NTHREADS_CYCLE=${nth_cycle:-14} - [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max - export APRUN_CYCLE="$launcher -n $npe_esfc" + [[ ${NTHREADS_CYCLE} -gt ${npe_node_max} ]] && export NTHREADS_CYCLE=${npe_node_max} + export APRUN_CYCLE="${launcher} -n ${npe_esfc} --cpus-per-task=${NTHREADS_CYCLE}" -elif [ $step = "epos" ]; then +elif [[ "${step}" = "epos" ]]; then - nth_max=$(($npe_node_max / $npe_node_epos)) + nth_max=$((npe_node_max / npe_node_epos)) - export NTHREADS_EPOS=${nth_epos:-$nth_max} - [[ $NTHREADS_EPOS -gt $nth_max ]] && export NTHREADS_EPOS=$nth_max - export APRUN_EPOS="$launcher" + export NTHREADS_EPOS=${nth_epos:-${nth_max}} + [[ ${NTHREADS_EPOS} -gt ${nth_max} ]] && export NTHREADS_EPOS=${nth_max} + export APRUN_EPOS="${launcher} -n ${npe_epos} --cpus-per-task=${NTHREADS_EPOS}" -elif [ $step = "fv3ic" ]; then +elif [[ "${step}" = "postsnd" ]]; then - export NTHREADS_CHGRES=${nth_chgres:-$npe_node_max} - [[ $NTHREADS_CHGRES -gt $npe_node_max ]] && export NTHREADS_CHGRES=$npe_node_max - export APRUN_CHGRES="time" - -elif [ $step = "postsnd" ]; then + export CFP_MP="YES" - nth_max=$(($npe_node_max / $npe_node_postsnd)) + nth_max=$((npe_node_max / npe_node_postsnd)) export NTHREADS_POSTSND=${nth_postsnd:-1} - [[ $NTHREADS_POSTSND -gt $nth_max ]] && export NTHREADS_POSTSND=$nth_max - export APRUN_POSTSND="$launcher" + [[ ${NTHREADS_POSTSND} -gt ${nth_max} ]] && export NTHREADS_POSTSND=${nth_max} + export APRUN_POSTSND="${launcher} -n ${npe_postsnd} --cpus-per-task=${NTHREADS_POSTSND}" export NTHREADS_POSTSNDCFP=${nth_postsndcfp:-1} - [[ $NTHREADS_POSTSNDCFP -gt $nth_max ]] && export NTHREADS_POSTSNDCFP=$nth_max - export APRUN_POSTSNDCFP="$launcher" + [[ ${NTHREADS_POSTSNDCFP} -gt ${nth_max} ]] && export NTHREADS_POSTSNDCFP=${nth_max} + export APRUN_POSTSNDCFP="${launcher} -n ${npe_postsndcfp} ${mpmd_opt}" + +elif [[ "${step}" = "awips" ]]; then + + nth_max=$((npe_node_max / npe_node_awips)) + + export NTHREADS_AWIPS=${nth_awips:-2} + [[ ${NTHREADS_AWIPS} -gt ${nth_max} ]] && export NTHREADS_AWIPS=${nth_max} + export APRUN_AWIPSCFP="${launcher} -n ${npe_awips} ${mpmd_opt}" + +elif [[ "${step}" = "gempak" ]]; then + + export CFP_MP="YES" + + if [[ ${CDUMP} == "gfs" ]]; then + npe_gempak=${npe_gempak_gfs} + npe_node_gempak=${npe_node_gempak_gfs} + fi + + nth_max=$((npe_node_max / npe_node_gempak)) + + export NTHREADS_GEMPAK=${nth_gempak:-1} + [[ ${NTHREADS_GEMPAK} -gt ${nth_max} ]] && export NTHREADS_GEMPAK=${nth_max} + export APRUN="${launcher} -n ${npe_gempak} ${mpmd_opt}" + -elif [ $step = "awips" ]; then +elif [[ "${step}" = "fit2obs" ]]; then - echo "WARNING: $step is not enabled on $machine!" + nth_max=$((npe_node_max / npe_node_fit2obs)) -elif [ $step = "gempak" ]; then + export NTHREADS_FIT2OBS=${nth_fit2obs:-1} + [[ ${NTHREADS_FIT2OBS} -gt ${nth_max} ]] && export NTHREADS_FIT2OBS=${nth_max} + export MPIRUN="${launcher} -n ${npe_fit2obs} --cpus-per-task=${NTHREADS_FIT2OBS}" - echo "WARNING: $step is not enabled on $machine!" fi diff --git a/env/HERCULES.env b/env/HERCULES.env new file mode 100755 index 0000000000..3721be2b66 --- /dev/null +++ b/env/HERCULES.env @@ -0,0 +1,69 @@ +#! /usr/bin/env bash + +if [[ $# -ne 1 ]]; then + + echo "Must specify an input argument to set runtime environment variables!" + echo "argument can be any one of the following:" + echo "fcst post" + echo "Note: Hercules is only set up to run in forecast-only mode" + exit 1 + +fi + +step=$1 + +export npe_node_max=40 +export launcher="srun -l --export=ALL" +export mpmd_opt="--multi-prog --output=mpmd.%j.%t.out" + +# Configure MPI environment +export MPI_BUFS_PER_PROC=2048 +export MPI_BUFS_PER_HOST=2048 +export MPI_GROUP_MAX=256 +export MPI_MEMMAP_OFF=1 +export MP_STDOUTMODE="ORDERED" +export KMP_AFFINITY=scatter +export OMP_STACKSIZE=2048000 +export NTHSTACK=1024000000 +#export LD_BIND_NOW=1 + +ulimit -s unlimited +ulimit -a + +if [[ "${step}" = "waveinit" ]] || [[ "${step}" = "waveprep" ]] || [[ "${step}" = "wavepostsbs" ]] || \ + [[ "${step}" = "wavepostbndpnt" ]] || [[ "${step}" = "wavepostpnt" ]] || [[ "${step}" == "wavepostbndpntbll" ]]; then + + export CFP_MP="YES" + if [[ "${step}" = "waveprep" ]]; then export MP_PULSE=0 ; fi + export wavempexec=${launcher} + export wave_mpmd=${mpmd_opt} + +elif [[ "${step}" = "fcst" ]]; then + + export OMP_STACKSIZE=512M + if [[ "${CDUMP}" =~ "gfs" ]]; then + nprocs="npe_${step}_gfs" + ppn="npe_node_${step}_gfs" || ppn="npe_node_${step}" + else + nprocs="npe_${step}" + ppn="npe_node_${step}" + fi + (( nnodes = (${!nprocs}+${!ppn}-1)/${!ppn} )) + (( ntasks = nnodes*${!ppn} )) + # With ESMF threading, the model wants to use the full node + export APRUN_UFS="${launcher} -n ${ntasks}" + unset nprocs ppn nnodes ntasks + +elif [[ "${step}" = "upp" ]]; then + + nth_max=$((npe_node_max / npe_node_upp)) + + export NTHREADS_UPP=${nth_upp:-1} + [[ ${NTHREADS_UPP} -gt ${nth_max} ]] && export NTHREADS_UPP=${nth_max} + export APRUN_UPP="${launcher} -n ${npe_upp} --cpus-per-task=${NTHREADS_UPP}" + +elif [[ "${step}" = "atmos_products" ]]; then + + export USE_CFP="YES" # Use MPMD for downstream product generation + +fi diff --git a/env/JET.env b/env/JET.env index 2dea123612..7bb152c5f3 100755 --- a/env/JET.env +++ b/env/JET.env @@ -1,10 +1,11 @@ -#!/bin/ksh -x +#! /usr/bin/env bash -if [ $# -ne 1 ]; then +if [[ $# -ne 1 ]]; then echo "Must specify an input argument to set runtime environment variables!" echo "argument can be any one of the following:" - echo "anal fcst post vrfy metp" + echo "atmanlrun atmensanlrun aeroanlrun landanl" + echo "anal sfcanl fcst post metp" echo "eobs eupd ecen efcs epos" echo "postsnd awips gempak" exit 1 @@ -13,194 +14,253 @@ fi step=$1 -# Theia information -export npe_node_max=24 -export launcher="mpirun -np" +if [[ "${PARTITION_BATCH}" = "xjet" ]]; then + export npe_node_max=24 +elif [[ "${PARTITION_BATCH}" = "vjet" ]]; then + export npe_node_max=16 +elif [[ "${PARTITION_BATCH}" = "kjet" ]]; then + export npe_node_max=40 +fi +export launcher="srun -l --epilog=/apps/local/bin/report-mem --export=ALL" +export mpmd_opt="--multi-prog --output=mpmd.%j.%t.out" # Configure MPI environment -export MPI_BUFS_PER_PROC=2048 -export MPI_BUFS_PER_HOST=2048 -export MPI_GROUP_MAX=256 -export MPI_MEMMAP_OFF=1 -export MP_STDOUTMODE="ORDERED" export OMP_STACKSIZE=2048000 export NTHSTACK=1024000000 -#export LD_BIND_NOW=1 -export job=${PBS_JOBNAME:-$step} -export jobid=${job}.${PBS_JOBID:-$$} -if [ $step = "prep" -o $step = "prepbufr" ]; then +ulimit -s unlimited +ulimit -a + +if [[ "${step}" = "prep" ]] || [[ "${step}" = "prepbufr" ]]; then - nth_max=$(($npe_node_max / $npe_node_prep)) + nth_max=$((npe_node_max / npe_node_prep)) export POE="NO" - export BACK=${BACK:-"YES"} - export sys_tp="Cray-CS400" + export BACK="NO" + export sys_tp="JET" + export launcher_PREP="srun" + +elif [[ "${step}" = "preplandobs" ]]; then + + export APRUN_CALCFIMS="${launcher} -n 1" + +elif [[ "${step}" = "waveinit" ]] || [[ "${step}" = "waveprep" ]] || [[ "${step}" = "wavepostsbs" ]] || [[ "${step}" = "wavepostbndpnt" ]] || [[ "${step}" = "wavepostbndpntbll" ]] || [[ "${step}" = "wavepostpnt" ]]; then + + export CFP_MP="YES" + if [[ "${step}" = "waveprep" ]]; then export MP_PULSE=0 ; fi + export wavempexec=${launcher} + export wave_mpmd=${mpmd_opt} + +elif [[ "${step}" = "atmanlrun" ]]; then + + nth_max=$((npe_node_max / npe_node_atmanlrun)) + + export NTHREADS_ATMANL=${nth_atmanlrun:-${nth_max}} + [[ ${NTHREADS_ATMANL} -gt ${nth_max} ]] && export NTHREADS_ATMANL=${nth_max} + export APRUN_ATMANL="${launcher} -n ${npe_atmanlrun}" + +elif [[ "${step}" = "atmensanlrun" ]]; then + + nth_max=$((npe_node_max / npe_node_atmensanlrun)) + + export NTHREADS_ATMENSANL=${nth_atmensanlrun:-${nth_max}} + [[ ${NTHREADS_ATMENSANL} -gt ${nth_max} ]] && export NTHREADS_ATMENSANL=${nth_max} + export APRUN_ATMENSANL="${launcher} ${npe_atmensanlrun}" + +elif [[ "${step}" = "aeroanlrun" ]]; then + + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" + + nth_max=$((npe_node_max / npe_node_aeroanlrun)) + + export NTHREADS_AEROANL=${nth_aeroanlrun:-${nth_max}} + [[ ${NTHREADS_AEROANL} -gt ${nth_max} ]] && export NTHREADS_AEROANL=${nth_max} + export APRUN_AEROANL="${launcher} -n ${npe_aeroanlrun}" + +elif [[ "${step}" = "landanl" ]]; then + + nth_max=$((npe_node_max / npe_node_landanl)) + + export NTHREADS_LANDANL=${nth_landanl:-${nth_max}} + [[ ${NTHREADS_LANDANL} -gt ${nth_max} ]] && export NTHREADS_LANDANL=${nth_max} + export APRUN_LANDANL="${launcher} -n ${npe_landanl}" + + export APRUN_APPLY_INCR="${launcher} -n 6" -elif [ $step = "waveprep" ]; then +elif [[ "${step}" = "ocnanalbmat" ]]; then - export MP_PULSE=0 + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" -elif [ $step = "anal" ]; then + nth_max=$((npe_node_max / npe_node_ocnanalbmat)) - nth_max=$(($npe_node_max / $npe_node_anal)) + export NTHREADS_OCNANAL=${nth_ocnanalbmat:-${nth_max}} + [[ ${NTHREADS_OCNANAL} -gt ${nth_max} ]] && export NTHREADS_OCNANAL=${nth_max} + export APRUN_OCNANAL="${launcher} -n ${npe_ocnanalbmat}" - export NTHREADS_GSI=${nth_gsi:-$nth_max} - [[ $NTHREADS_GSI -gt $nth_max ]] && export NTHREADS_GSI=$nth_max - export APRUN_GSI="$launcher ${npe_gsi:-${npe_anal:-$PBS_NP}}" +elif [[ "${step}" = "ocnanalrun" ]]; then + + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" + + nth_max=$((npe_node_max / npe_node_ocnanalrun)) + + export NTHREADS_OCNANAL=${nth_ocnanalrun:-${nth_max}} + [[ ${NTHREADS_OCNANAL} -gt ${nth_max} ]] && export NTHREADS_OCNANAL=${nth_max} + export APRUN_OCNANAL="${launcher} -n ${npe_ocnanalrun}" + +elif [[ "${step}" = "anal" ]] || [[ "${step}" = "analcalc" ]]; then + + export MKL_NUM_THREADS=4 + export MKL_CBWR=AUTO + + export CFP_MP=${CFP_MP:-"YES"} + export USE_CFP=${USE_CFP:-"YES"} + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" + + nth_max=$((npe_node_max / npe_node_anal)) + + export NTHREADS_GSI=${nth_anal:-${nth_max}} + [[ ${NTHREADS_GSI} -gt ${nth_max} ]] && export NTHREADS_GSI=${nth_max} + export APRUN_GSI="${launcher} -n ${npe_gsi:-${npe_anal}}" export NTHREADS_CALCINC=${nth_calcinc:-1} - [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max - export APRUN_CALCINC="$launcher \$ncmd" + [[ ${NTHREADS_CALCINC} -gt ${nth_max} ]] && export NTHREADS_CALCINC=${nth_max} + export APRUN_CALCINC="${launcher} \$ncmd" export NTHREADS_CYCLE=${nth_cycle:-12} - [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max + [[ ${NTHREADS_CYCLE} -gt ${npe_node_max} ]] && export NTHREADS_CYCLE=${npe_node_max} npe_cycle=${ntiles:-6} - export APRUN_CYCLE="$launcher $npe_cycle" + export APRUN_CYCLE="${launcher} -n ${npe_cycle}" export NTHREADS_GAUSFCANL=1 npe_gausfcanl=${npe_gausfcanl:-1} - export APRUN_GAUSFCANL="$launcher $npe_gausfcanl" + export APRUN_GAUSFCANL="${launcher} -n ${npe_gausfcanl}" - export NTHREADS_CHGRES=${nth_echgres:-1} - [[ $NTHREADS_CHGRES -gt $npe_node_max ]] && export NTHREADS_CHGRES=$npe_node_max - export APRUN_CHGRES="" +elif [[ "${step}" = "sfcanl" ]]; then + nth_max=$((npe_node_max / npe_node_sfcanl)) -elif [ $step = "gldas" ]; then + export NTHREADS_CYCLE=${nth_sfcanl:-14} + [[ ${NTHREADS_CYCLE} -gt ${npe_node_max} ]] && export NTHREADS_CYCLE=${npe_node_max} + npe_sfcanl=${ntiles:-6} + export APRUN_CYCLE="${launcher} -n ${npe_sfcanl}" - nth_max=$(($npe_node_max / $npe_node_gldas)) +elif [[ "${step}" = "eobs" ]]; then - export NTHREADS_GLDAS=${nth_gldas:-$nth_max} - [[ $NTHREADS_GLDAS -gt $nth_max ]] && export NTHREADS_GLDAS=$nth_max - export APRUN_GLDAS="$launcher $npe_gldas" + export MKL_NUM_THREADS=4 + export MKL_CBWR=AUTO - export NTHREADS_GAUSSIAN=${nth_gaussian:-1} - [[ $NTHREADS_GAUSSIAN -gt $nth_max ]] && export NTHREADS_GAUSSIAN=$nth_max - export APRUN_GAUSSIAN="$launcher $npe_gaussian" + nth_max=$((npe_node_max / npe_node_eobs)) -elif [ $step = "eobs" ]; then + export NTHREADS_GSI=${nth_eobs:-${nth_max}} + [[ ${NTHREADS_GSI} -gt ${nth_max} ]] && export NTHREADS_GSI=${nth_max} + export APRUN_GSI="${launcher} -n ${npe_gsi:-${npe_eobs}}" - nth_max=$(($npe_node_max / $npe_node_eobs)) + export CFP_MP=${CFP_MP:-"YES"} + export USE_CFP=${USE_CFP:-"YES"} + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" - export NTHREADS_GSI=${nth_gsi:-$nth_max} - [[ $NTHREADS_GSI -gt $nth_max ]] && export NTHREADS_GSI=$nth_max - export APRUN_GSI="$launcher ${npe_gsi:-${npe_eobs:-$PBS_NP}}" +elif [[ "${step}" = "eupd" ]]; then -elif [ $step = "eupd" ]; then + nth_max=$((npe_node_max / npe_node_eupd)) - nth_max=$(($npe_node_max / $npe_node_eupd)) + export NTHREADS_ENKF=${nth_eupd:-${nth_max}} + [[ ${NTHREADS_ENKF} -gt ${nth_max} ]] && export NTHREADS_ENKF=${nth_max} + export APRUN_ENKF="${launcher} -n ${npe_enkf:-${npe_eupd}}" - export NTHREADS_ENKF=${nth_enkf:-$nth_max} - [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max - export APRUN_ENKF="$launcher ${npe_enkf:-${npe_eupd:-$PBS_NP}}" + export CFP_MP=${CFP_MP:-"YES"} + export USE_CFP=${USE_CFP:-"YES"} + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" -elif [ $step = "fcst" ]; then +elif [[ "${step}" = "fcst" ]] || [[ "${step}" = "efcs" ]]; then - nth_max=$(($npe_node_max / $npe_node_fcst)) - - export NTHREADS_FV3=${nth_fv3:-$nth_max} - [[ $NTHREADS_FV3 -gt $nth_max ]] && export NTHREADS_FV3=$nth_max - export cores_per_node=$npe_node_max - #export APRUN_FV3="$launcher ${npe_fv3:-${npe_fcst:-$PBS_NP}}" - if [ $CDUMP = "gdas" ]; then - export APRUN_FV3="$launcher ${npe_fcst:-$PBS_NP}" + if [[ "${CDUMP}" =~ "gfs" ]]; then + nprocs="npe_${step}_gfs" + ppn="npe_node_${step}_gfs" || ppn="npe_node_${step}" else - export APRUN_FV3="$launcher ${npe_fcst_gfs:-$PBS_NP}" + nprocs="npe_${step}" + ppn="npe_node_${step}" fi - export NTHREADS_REGRID_NEMSIO=${nth_regrid_nemsio:-1} - [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max - export APRUN_REGRID_NEMSIO="$launcher $LEVS" - - export NTHREADS_REMAP=${nth_remap:-2} - [[ $NTHREADS_REMAP -gt $nth_max ]] && export NTHREADS_REMAP=$nth_max - export APRUN_REMAP="$launcher ${npe_remap:-${npe_fcst:-$PBS_NP}}" + (( nnodes = (${!nprocs}+${!ppn}-1)/${!ppn} )) + (( ntasks = nnodes*${!ppn} )) + # With ESMF threading, the model wants to use the full node + export APRUN_UFS="${launcher} -n ${ntasks}" + unset nprocs ppn nnodes ntasks -elif [ $step = "efcs" ]; then +elif [[ "${step}" = "upp" ]]; then - nth_max=$(($npe_node_max / $npe_node_efcs)) + nth_max=$((npe_node_max / npe_node_upp)) - export NTHREADS_FV3=${nth_fv3:-$nth_max} - [[ $NTHREADS_FV3 -gt $nth_max ]] && export NTHREADS_FV3=$nth_max - export cores_per_node=$npe_node_max - export APRUN_FV3="$launcher ${npe_fv3:-${npe_efcs:-$PBS_NP}}" + export NTHREADS_UPP=${nth_upp:-1} + [[ ${NTHREADS_UPP} -gt ${nth_max} ]] && export NTHREADS_UPP=${nth_max} + export APRUN_UPP="${launcher} -n ${npe_upp}" - export NTHREADS_REGRID_NEMSIO=${nth_regrid_nemsio:-1} - [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max - export APRUN_REGRID_NEMSIO="$launcher $LEVS" +elif [[ "${step}" = "atmos_products" ]]; then -elif [ $step = "post" ]; then + export USE_CFP="YES" # Use MPMD for downstream product generation - nth_max=$(($npe_node_max / $npe_node_post)) +elif [[ "${step}" = "ecen" ]]; then - export NTHREADS_NP=${nth_np:-1} - [[ $NTHREADS_NP -gt $nth_max ]] && export NTHREADS_NP=$nth_max - export APRUN_NP="$launcher ${npe_np:-${npe_post:-$PBS_NP}}" + nth_max=$((npe_node_max / npe_node_ecen)) - export NTHREADS_DWN=${nth_dwn:-1} - [[ $NTHREADS_DWN -gt $nth_max ]] && export NTHREADS_DWN=$nth_max - export APRUN_DWN="$launcher ${npe_dwn:-$PBS_NP}" - -elif [ $step = "ecen" ]; then - - nth_max=$(($npe_node_max / $npe_node_ecen)) - - export NTHREADS_ECEN=${nth_ecen:-$nth_max} - [[ $NTHREADS_ECEN -gt $nth_max ]] && export NTHREADS_ECEN=$nth_max - export APRUN_ECEN="$launcher ${npe_ecen:-$PBS_NP}" + export NTHREADS_ECEN=${nth_ecen:-${nth_max}} + [[ ${NTHREADS_ECEN} -gt ${nth_max} ]] && export NTHREADS_ECEN=${nth_max} + export APRUN_ECEN="${launcher} -n ${npe_ecen}" export NTHREADS_CHGRES=${nth_chgres:-12} - [[ $NTHREADS_CHGRES -gt $npe_node_max ]] && export NTHREADS_CHGRES=$npe_node_max + [[ ${NTHREADS_CHGRES} -gt ${npe_node_max} ]] && export NTHREADS_CHGRES=${npe_node_max} export APRUN_CHGRES="time" export NTHREADS_CALCINC=${nth_calcinc:-1} - [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max - export APRUN_CALCINC="$launcher ${npe_ecen:-$PBS_NP}" - -elif [ $step = "esfc" ]; then - - nth_max=$(($npe_node_max / $npe_node_esfc)) + [[ ${NTHREADS_CALCINC} -gt ${nth_max} ]] && export NTHREADS_CALCINC=${nth_max} + export APRUN_CALCINC="${launcher} -n ${npe_ecen}" - export NTHREADS_ESFC=${nth_esfc:-$nth_max} - [[ $NTHREADS_ESFC -gt $nth_max ]] && export NTHREADS_ESFC=$nth_max - export APRUN_ESFC="$launcher ${npe_esfc:-$PBS_NP}" +elif [[ "${step}" = "esfc" ]]; then - export NTHREADS_CYCLE=${nth_cycle:-12} - [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max - export APRUN_CYCLE="$launcher $npe_esfc" + nth_max=$((npe_node_max / npe_node_esfc)) + export NTHREADS_ESFC=${nth_esfc:-${nth_max}} + [[ ${NTHREADS_ESFC} -gt ${nth_max} ]] && export NTHREADS_ESFC=${nth_max} + export APRUN_ESFC="${launcher} -n ${npe_esfc}" -elif [ $step = "epos" ]; then + export NTHREADS_CYCLE=${nth_cycle:-14} + [[ ${NTHREADS_CYCLE} -gt ${npe_node_max} ]] && export NTHREADS_CYCLE=${npe_node_max} + export APRUN_CYCLE="${launcher} -n ${npe_esfc}" - nth_max=$(($npe_node_max / $npe_node_epos)) +elif [[ "${step}" = "epos" ]]; then - export NTHREADS_EPOS=${nth_epos:-$nth_max} - [[ $NTHREADS_EPOS -gt $nth_max ]] && export NTHREADS_EPOS=$nth_max - export APRUN_EPOS="$launcher ${npe_epos:-$PBS_NP}" + nth_max=$((npe_node_max / npe_node_epos)) -elif [ $step = "fv3ic" ]; then + export NTHREADS_EPOS=${nth_epos:-${nth_max}} + [[ ${NTHREADS_EPOS} -gt ${nth_max} ]] && export NTHREADS_EPOS=${nth_max} + export APRUN_EPOS="${launcher} -n ${npe_epos}" - export NTHREADS_CHGRES=${nth_chgres:-$npe_node_max} - [[ $NTHREADS_CHGRES -gt $npe_node_max ]] && export NTHREADS_CHGRES=$npe_node_max - export APRUN_CHGRES="time" +elif [[ "${step}" = "postsnd" ]]; then -elif [ $step = "postsnd" ]; then + export CFP_MP="YES" - nth_max=$(($npe_node_max / $npe_node_postsnd)) + nth_max=$((npe_node_max / npe_node_postsnd)) export NTHREADS_POSTSND=${nth_postsnd:-1} - [[ $NTHREADS_POSTSND -gt $nth_max ]] && export NTHREADS_POSTSND=$nth_max - export APRUN_POSTSND="$launcher $npe_postsnd" + [[ ${NTHREADS_POSTSND} -gt ${nth_max} ]] && export NTHREADS_POSTSND=${nth_max} + export APRUN_POSTSND="${launcher} -n ${npe_postsnd}" export NTHREADS_POSTSNDCFP=${nth_postsndcfp:-1} - [[ $NTHREADS_POSTSNDCFP -gt $nth_max ]] && export NTHREADS_POSTSNDCFP=$nth_max - export APRUN_POSTSNDCFP="$launcher $npe_postsndcfp" + [[ ${NTHREADS_POSTSNDCFP} -gt ${nth_max} ]] && export NTHREADS_POSTSNDCFP=${nth_max} + export APRUN_POSTSNDCFP="${launcher} -n ${npe_postsndcfp} ${mpmd_opt}" + +elif [[ "${step}" = "awips" ]]; then + + echo "WARNING: ${step} is not enabled on ${machine}!" + +elif [[ "${step}" = "gempak" ]]; then -elif [ $step = "awips" ]; then + echo "WARNING: ${step} is not enabled on ${machine}!" - echo "WARNING: $step is not enabled on $machine!" +elif [[ "${step}" = "fit2obs" ]]; then -elif [ $step = "gempak" ]; then + nth_max=$((npe_node_max / npe_node_fit2obs)) - echo "WARNING: $step is not enabled on $machine!" + export NTHREADS_FIT2OBS=${nth_fit2obs:-1} + [[ ${NTHREADS_FIT2OBS} -gt ${nth_max} ]] && export NTHREADS_FIT2OBS=${nth_max} + export MPIRUN="${launcher} -n ${npe_fit2obs}" fi diff --git a/env/ORION.env b/env/ORION.env new file mode 100755 index 0000000000..d91fd4db03 --- /dev/null +++ b/env/ORION.env @@ -0,0 +1,294 @@ +#! /usr/bin/env bash + +if [[ $# -ne 1 ]]; then + + echo "Must specify an input argument to set runtime environment variables!" + echo "argument can be any one of the following:" + echo "atmanlrun atmensanlrun aeroanlrun landanl" + echo "anal sfcanl fcst post metp" + echo "eobs eupd ecen efcs epos" + echo "postsnd awips gempak" + exit 1 + +fi + +step=$1 + +export npe_node_max=40 +export launcher="srun -l --export=ALL" +export mpmd_opt="--multi-prog --output=mpmd.%j.%t.out" + +# Configure MPI environment +export MPI_BUFS_PER_PROC=2048 +export MPI_BUFS_PER_HOST=2048 +export MPI_GROUP_MAX=256 +export MPI_MEMMAP_OFF=1 +export MP_STDOUTMODE="ORDERED" +export KMP_AFFINITY=scatter +export OMP_STACKSIZE=2048000 +export NTHSTACK=1024000000 +#export LD_BIND_NOW=1 + +ulimit -s unlimited +ulimit -a + +if [[ "${step}" = "prep" ]] || [[ "${step}" = "prepbufr" ]]; then + + nth_max=$((npe_node_max / npe_node_prep)) + + export POE="NO" + export BACK=${BACK:-"YES"} + export sys_tp="ORION" + export launcher_PREP="srun" + +elif [[ "${step}" = "preplandobs" ]]; then + + export APRUN_CALCFIMS="${launcher} -n 1" + +elif [[ "${step}" = "waveinit" ]] || [[ "${step}" = "waveprep" ]] || [[ "${step}" = "wavepostsbs" ]] || \ + [[ "${step}" = "wavepostbndpnt" ]] || [[ "${step}" = "wavepostpnt" ]] || [[ "${step}" == "wavepostbndpntbll" ]]; then + + export CFP_MP="YES" + if [[ "${step}" = "waveprep" ]]; then export MP_PULSE=0 ; fi + export wavempexec=${launcher} + export wave_mpmd=${mpmd_opt} + +elif [[ "${step}" = "atmanlrun" ]]; then + + nth_max=$((npe_node_max / npe_node_atmanlrun)) + + export NTHREADS_ATMANL=${nth_atmanlrun:-${nth_max}} + [[ ${NTHREADS_ATMANL} -gt ${nth_max} ]] && export NTHREADS_ATMANL=${nth_max} + export APRUN_ATMANL="${launcher} -n ${npe_atmanlrun} --cpus-per-task=${NTHREADS_ATMANL}" + +elif [[ "${step}" = "atmensanlrun" ]]; then + + nth_max=$((npe_node_max / npe_node_atmensanlrun)) + + export NTHREADS_ATMENSANL=${nth_atmensanlrun:-${nth_max}} + [[ ${NTHREADS_ATMENSANL} -gt ${nth_max} ]] && export NTHREADS_ATMENSANL=${nth_max} + export APRUN_ATMENSANL="${launcher} -n ${npe_atmensanlrun} --cpus-per-task=${NTHREADS_ATMENSANL}" + +elif [[ "${step}" = "aeroanlrun" ]]; then + + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" + + nth_max=$((npe_node_max / npe_node_aeroanlrun)) + + export NTHREADS_AEROANL=${nth_aeroanlrun:-${nth_max}} + [[ ${NTHREADS_AEROANL} -gt ${nth_max} ]] && export NTHREADS_AEROANL=${nth_max} + export APRUN_AEROANL="${launcher} -n ${npe_aeroanlrun} --cpus-per-task=${NTHREADS_AEROANL}" + +elif [[ "${step}" = "landanl" ]]; then + + nth_max=$((npe_node_max / npe_node_landanl)) + + export NTHREADS_LANDANL=${nth_landanl:-${nth_max}} + [[ ${NTHREADS_LANDANL} -gt ${nth_max} ]] && export NTHREADS_LANDANL=${nth_max} + export APRUN_LANDANL="${launcher} -n ${npe_landanl} --cpus-per-task=${NTHREADS_LANDANL}" + + export APRUN_APPLY_INCR="${launcher} -n 6" + +elif [[ "${step}" = "ocnanalbmat" ]]; then + + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" + + nth_max=$((npe_node_max / npe_node_ocnanalbmat)) + + export NTHREADS_OCNANAL=${nth_ocnanalbmat:-${nth_max}} + [[ ${NTHREADS_OCNANAL} -gt ${nth_max} ]] && export NTHREADS_OCNANAL=${nth_max} + export APRUN_OCNANAL="${launcher} -n ${npe_ocnanalbmat} --cpus-per-task=${NTHREADS_OCNANAL}" + +elif [[ "${step}" = "ocnanalrun" ]]; then + + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" + + nth_max=$((npe_node_max / npe_node_ocnanalrun)) + + export NTHREADS_OCNANAL=${nth_ocnanalrun:-${nth_max}} + [[ ${NTHREADS_OCNANAL} -gt ${nth_max} ]] && export NTHREADS_OCNANAL=${nth_max} + export APRUN_OCNANAL="${launcher} -n ${npe_ocnanalrun} --cpus-per-task=${NTHREADS_OCNANAL}" + +elif [[ "${step}" = "ocnanalchkpt" ]]; then + + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" + + nth_max=$((npe_node_max / npe_node_ocnanalchkpt)) + + export NTHREADS_OCNANAL=${nth_ocnanalchkpt:-${nth_max}} + [[ ${NTHREADS_OCNANAL} -gt ${nth_max} ]] && export NTHREADS_OCNANAL=${nth_max} + export APRUN_OCNANAL="${launcher} -n ${npe_ocnanalchkpt} --cpus-per-task=${NTHREADS_OCNANAL}" + +elif [[ "${step}" = "anal" ]] || [[ "${step}" = "analcalc" ]]; then + + export MKL_NUM_THREADS=4 + export MKL_CBWR=AUTO + + export CFP_MP=${CFP_MP:-"YES"} + export USE_CFP=${USE_CFP:-"YES"} + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" + + nth_max=$((npe_node_max / npe_node_anal)) + + export NTHREADS_GSI=${nth_anal:-${nth_max}} + [[ ${NTHREADS_GSI} -gt ${nth_max} ]] && export NTHREADS_GSI=${nth_max} + export APRUN_GSI="${launcher} -n ${npe_gsi:-${npe_anal}} --cpus-per-task=${NTHREADS_GSI}" + + export NTHREADS_CALCINC=${nth_calcinc:-1} + [[ ${NTHREADS_CALCINC} -gt ${nth_max} ]] && export NTHREADS_CALCINC=${nth_max} + export APRUN_CALCINC="${launcher} \$ncmd --cpus-per-task=${NTHREADS_CALCINC}" + + export NTHREADS_CYCLE=${nth_cycle:-12} + [[ ${NTHREADS_CYCLE} -gt ${npe_node_max} ]] && export NTHREADS_CYCLE=${npe_node_max} + npe_cycle=${ntiles:-6} + export APRUN_CYCLE="${launcher} -n ${npe_cycle} --cpus-per-task=${NTHREADS_CYCLE}" + + export NTHREADS_GAUSFCANL=1 + npe_gausfcanl=${npe_gausfcanl:-1} + export APRUN_GAUSFCANL="${launcher} -n ${npe_gausfcanl} --cpus-per-task=${NTHREADS_GAUSFCANL}" + +elif [[ "${step}" = "sfcanl" ]]; then + nth_max=$((npe_node_max / npe_node_sfcanl)) + + export NTHREADS_CYCLE=${nth_sfcanl:-14} + [[ ${NTHREADS_CYCLE} -gt ${npe_node_max} ]] && export NTHREADS_CYCLE=${npe_node_max} + npe_sfcanl=${ntiles:-6} + export APRUN_CYCLE="${launcher} -n ${npe_sfcanl} --cpus-per-task=${NTHREADS_CYCLE}" + +elif [[ "${step}" = "eobs" ]]; then + + export MKL_NUM_THREADS=4 + export MKL_CBWR=AUTO + + export CFP_MP=${CFP_MP:-"YES"} + export USE_CFP=${USE_CFP:-"YES"} + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" + + nth_max=$((npe_node_max / npe_node_eobs)) + + export NTHREADS_GSI=${nth_eobs:-${nth_max}} + [[ ${NTHREADS_GSI} -gt ${nth_max} ]] && export NTHREADS_GSI=${nth_max} + export APRUN_GSI="${launcher} -n ${npe_gsi:-${npe_eobs}} --cpus-per-task=${NTHREADS_GSI}" + +elif [[ "${step}" = "eupd" ]]; then + + export CFP_MP=${CFP_MP:-"YES"} + export USE_CFP=${USE_CFP:-"YES"} + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" + + nth_max=$((npe_node_max / npe_node_eupd)) + + export NTHREADS_ENKF=${nth_eupd:-${nth_max}} + [[ ${NTHREADS_ENKF} -gt ${nth_max} ]] && export NTHREADS_ENKF=${nth_max} + export APRUN_ENKF="${launcher} -n ${npe_enkf:-${npe_eupd}} --cpus-per-task=${NTHREADS_ENKF}" + +elif [[ "${step}" = "fcst" ]] || [[ "${step}" = "efcs" ]]; then + + export OMP_STACKSIZE=512M + if [[ "${CDUMP}" =~ "gfs" ]]; then + nprocs="npe_${step}_gfs" + ppn="npe_node_${step}_gfs" || ppn="npe_node_${step}" + else + nprocs="npe_${step}" + ppn="npe_node_${step}" + fi + (( nnodes = (${!nprocs}+${!ppn}-1)/${!ppn} )) + (( ntasks = nnodes*${!ppn} )) + # With ESMF threading, the model wants to use the full node + export APRUN_UFS="${launcher} -n ${ntasks}" + unset nprocs ppn nnodes ntasks + +elif [[ "${step}" = "upp" ]]; then + + nth_max=$((npe_node_max / npe_node_upp)) + + export NTHREADS_UPP=${nth_upp:-1} + [[ ${NTHREADS_UPP} -gt ${nth_max} ]] && export NTHREADS_UPP=${nth_max} + export APRUN_UPP="${launcher} -n ${npe_upp} --cpus-per-task=${NTHREADS_UPP}" + +elif [[ "${step}" = "atmos_products" ]]; then + + export USE_CFP="YES" # Use MPMD for downstream product generation + +elif [[ "${step}" = "ecen" ]]; then + + nth_max=$((npe_node_max / npe_node_ecen)) + + export NTHREADS_ECEN=${nth_ecen:-${nth_max}} + [[ ${NTHREADS_ECEN} -gt ${nth_max} ]] && export NTHREADS_ECEN=${nth_max} + export APRUN_ECEN="${launcher} -n ${npe_ecen} --cpus-per-task=${NTHREADS_ECEN}" + + export NTHREADS_CHGRES=${nth_chgres:-12} + [[ ${NTHREADS_CHGRES} -gt ${npe_node_max} ]] && export NTHREADS_CHGRES=${npe_node_max} + export APRUN_CHGRES="time" + + export NTHREADS_CALCINC=${nth_calcinc:-1} + [[ ${NTHREADS_CALCINC} -gt ${nth_max} ]] && export NTHREADS_CALCINC=${nth_max} + export APRUN_CALCINC="${launcher} -n ${npe_ecen} --cpus-per-task=${NTHREADS_CALCINC}" + +elif [[ "${step}" = "esfc" ]]; then + + nth_max=$((npe_node_max / npe_node_esfc)) + + export NTHREADS_ESFC=${nth_esfc:-${nth_max}} + [[ ${NTHREADS_ESFC} -gt ${nth_max} ]] && export NTHREADS_ESFC=${nth_max} + export APRUN_ESFC="${launcher} -n ${npe_esfc} --cpus-per-task=${NTHREADS_ESFC}" + + export NTHREADS_CYCLE=${nth_cycle:-14} + [[ ${NTHREADS_CYCLE} -gt ${npe_node_max} ]] && export NTHREADS_CYCLE=${npe_node_max} + export APRUN_CYCLE="${launcher} -n ${npe_esfc} --cpus-per-task=${NTHREADS_CYCLE}" + +elif [[ "${step}" = "epos" ]]; then + + nth_max=$((npe_node_max / npe_node_epos)) + + export NTHREADS_EPOS=${nth_epos:-${nth_max}} + [[ ${NTHREADS_EPOS} -gt ${nth_max} ]] && export NTHREADS_EPOS=${nth_max} + export APRUN_EPOS="${launcher} -n ${npe_epos} --cpus-per-task=${NTHREADS_EPOS}" + +elif [[ "${step}" = "postsnd" ]]; then + + export CFP_MP="YES" + + nth_max=$((npe_node_max / npe_node_postsnd)) + + export NTHREADS_POSTSND=${nth_postsnd:-1} + [[ ${NTHREADS_POSTSND} -gt ${nth_max} ]] && export NTHREADS_POSTSND=${nth_max} + export APRUN_POSTSND="${launcher} -n ${npe_postsnd} --cpus-per-task=${NTHREADS_POSTSND}" + + export NTHREADS_POSTSNDCFP=${nth_postsndcfp:-1} + [[ ${NTHREADS_POSTSNDCFP} -gt ${nth_max} ]] && export NTHREADS_POSTSNDCFP=${nth_max} + export APRUN_POSTSNDCFP="${launcher} -n ${npe_postsndcfp} ${mpmd_opt}" + +elif [[ "${step}" = "awips" ]]; then + + nth_max=$((npe_node_max / npe_node_awips)) + + export NTHREADS_AWIPS=${nth_awips:-2} + [[ ${NTHREADS_AWIPS} -gt ${nth_max} ]] && export NTHREADS_AWIPS=${nth_max} + export APRUN_AWIPSCFP="${launcher} -n ${npe_awips} ${mpmd_opt}" + +elif [[ "${step}" = "gempak" ]]; then + + export CFP_MP="YES" + + if [[ ${CDUMP} == "gfs" ]]; then + npe_gempak=${npe_gempak_gfs} + npe_node_gempak=${npe_node_gempak_gfs} + fi + + nth_max=$((npe_node_max / npe_node_gempak)) + + export NTHREADS_GEMPAK=${nth_gempak:-1} + [[ ${NTHREADS_GEMPAK} -gt ${nth_max} ]] && export NTHREADS_GEMPAK=${nth_max} + export APRUN="${launcher} -n ${npe_gempak} ${mpmd_opt}" + +elif [[ "${step}" = "fit2obs" ]]; then + + nth_max=$((npe_node_max / npe_node_fit2obs)) + + export NTHREADS_FIT2OBS=${nth_fit2obs:-1} + [[ ${NTHREADS_FIT2OBS} -gt ${nth_max} ]] && export NTHREADS_FIT2OBS=${nth_max} + export MPIRUN="${launcher} -n ${npe_fit2obs} --cpus-per-task=${NTHREADS_FIT2OBS}" + +fi diff --git a/env/S4.env b/env/S4.env new file mode 100755 index 0000000000..3dab3fc3e7 --- /dev/null +++ b/env/S4.env @@ -0,0 +1,252 @@ +#! /usr/bin/env bash + +if [[ $# -ne 1 ]]; then + + echo "Must specify an input argument to set runtime environment variables!" + echo "argument can be any one of the following:" + echo "atmanlrun atmensanlrun aeroanlrun landanl" + echo "anal sfcanl fcst post metp" + echo "eobs eupd ecen efcs epos" + echo "postsnd awips gempak" + exit 1 + +fi + +step=$1 +PARTITION_BATCH=${PARTITION_BATCH:-"s4"} + +if [[ ${PARTITION_BATCH} = "s4" ]]; then + export npe_node_max=32 +elif [[ ${PARTITION_BATCH} = "ivy" ]]; then + export npe_node_max=20 +fi +export launcher="srun -l --export=ALL" +export mpmd_opt="--multi-prog --output=mpmd.%j.%t.out" + +# Configure MPI environment +export OMP_STACKSIZE=2048000 +export NTHSTACK=1024000000 + +ulimit -s unlimited +ulimit -a + +if [[ "${step}" = "prep" ]] || [[ "${step}" = "prepbufr" ]]; then + + nth_max=$((npe_node_max / npe_node_prep)) + + export POE="NO" + export BACK="NO" + export sys_tp="S4" + export launcher_PREP="srun" + +elif [[ "${step}" = "preplandobs" ]]; then + + export APRUN_CALCFIMS="${launcher} -n 1" + +elif [[ "${step}" = "waveinit" ]] || [[ "${step}" = "waveprep" ]] || [[ "${step}" = "wavepostsbs" ]] || [[ "${step}" = "wavepostbndpnt" ]] || [[ "${step}" = "wavepostbndpntbll" ]] || [[ "${step}" = "wavepostpnt" ]]; then + + export CFP_MP="YES" + if [[ "${step}" = "waveprep" ]]; then export MP_PULSE=0 ; fi + export wavempexec=${launcher} + export wave_mpmd=${mpmd_opt} + +elif [[ "${step}" = "atmanlrun" ]]; then + + nth_max=$((npe_node_max / npe_node_atmanlrun)) + + export NTHREADS_ATMANL=${nth_atmanlrun:-${nth_max}} + [[ ${NTHREADS_ATMANL} -gt ${nth_max} ]] && export NTHREADS_ATMANL=${nth_max} + export APRUN_ATMANL="${launcher} -n ${npe_atmanlrun}" + +elif [[ "${step}" = "atmensanlrun" ]]; then + + nth_max=$((npe_node_max / npe_node_atmensanlrun)) + + export NTHREADS_ATMENSANL=${nth_atmensanlrun:-${nth_max}} + [[ ${NTHREADS_ATMENSANL} -gt ${nth_max} ]] && export NTHREADS_ATMENSANL=${nth_max} + export APRUN_ATMENSANL="${launcher} -n ${npe_atmensanlrun}" + +elif [[ "${step}" = "aeroanlrun" ]]; then + + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" + + nth_max=$((npe_node_max / npe_node_aeroanlrun)) + + export NTHREADS_AEROANL=${nth_aeroanlrun:-${nth_max}} + [[ ${NTHREADS_AEROANL} -gt ${nth_max} ]] && export NTHREADS_AEROANL=${nth_max} + export APRUN_AEROANL="${launcher} -n ${npe_aeroanlrun}" + +elif [[ "${step}" = "landanl" ]]; then + + nth_max=$((npe_node_max / npe_node_landanl)) + + export NTHREADS_LANDANL=${nth_landanl:-${nth_max}} + [[ ${NTHREADS_LANDANL} -gt ${nth_max} ]] && export NTHREADS_LANDANL=${nth_max} + export APRUN_LANDANL="${launcher} -n ${npe_landanl}" + + export APRUN_APPLY_INCR="${launcher} -n 6" + +elif [[ "${step}" = "ocnanalbmat" ]]; then + echo "WARNING: ${step} is not enabled on S4!" + +elif [[ "${step}" = "ocnanalrun" ]]; then + echo "WARNING: ${step} is not enabled on S4!" + +elif [[ "${step}" = "anal" ]] || [[ "${step}" = "analcalc" ]]; then + + export MKL_NUM_THREADS=4 + export MKL_CBWR=AUTO + + export CFP_MP=${CFP_MP:-"YES"} + export USE_CFP=${USE_CFP:-"YES"} + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" + + nth_max=$((npe_node_max / npe_node_anal)) + + export NTHREADS_GSI=${nth_anal:-${nth_max}} + [[ ${NTHREADS_GSI} -gt ${nth_max} ]] && export NTHREADS_GSI=${nth_max} + export APRUN_GSI="${launcher} -n ${npe_gsi:-${npe_anal}}" + + export NTHREADS_CALCINC=${nth_calcinc:-1} + [[ ${NTHREADS_CALCINC} -gt ${nth_max} ]] && export NTHREADS_CALCINC=${nth_max} + export APRUN_CALCINC="${launcher} \$ncmd" + + export NTHREADS_CYCLE=${nth_cycle:-12} + [[ ${NTHREADS_CYCLE} -gt ${npe_node_max} ]] && export NTHREADS_CYCLE=${npe_node_max} + npe_cycle=${ntiles:-6} + export APRUN_CYCLE="${launcher} -n ${npe_cycle}" + + + export NTHREADS_GAUSFCANL=1 + npe_gausfcanl=${npe_gausfcanl:-1} + export APRUN_GAUSFCANL="${launcher} -n ${npe_gausfcanl}" + +elif [[ "${step}" = "sfcanl" ]]; then + nth_max=$((npe_node_max / npe_node_sfcanl)) + + export NTHREADS_CYCLE=${nth_sfcanl:-14} + [[ ${NTHREADS_CYCLE} -gt ${npe_node_max} ]] && export NTHREADS_CYCLE=${npe_node_max} + npe_sfcanl=${ntiles:-6} + export APRUN_CYCLE="${launcher} -n ${npe_sfcanl}" + +elif [[ "${step}" = "eobs" ]]; then + + export MKL_NUM_THREADS=4 + export MKL_CBWR=AUTO + + nth_max=$((npe_node_max / npe_node_eobs)) + + export NTHREADS_GSI=${nth_eobs:-${nth_max}} + [[ ${NTHREADS_GSI} -gt ${nth_max} ]] && export NTHREADS_GSI=${nth_max} + export APRUN_GSI="${launcher} -n ${npe_gsi:-${npe_eobs}}" + + export CFP_MP=${CFP_MP:-"YES"} + export USE_CFP=${USE_CFP:-"YES"} + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" + +elif [[ "${step}" = "eupd" ]]; then + + nth_max=$((npe_node_max / npe_node_eupd)) + + export NTHREADS_ENKF=${nth_eupd:-${nth_max}} + [[ ${NTHREADS_ENKF} -gt ${nth_max} ]] && export NTHREADS_ENKF=${nth_max} + export APRUN_ENKF="${launcher} -n ${npe_enkf:-${npe_eupd}}" + + export CFP_MP=${CFP_MP:-"YES"} + export USE_CFP=${USE_CFP:-"YES"} + export APRUNCFP="${launcher} -n \$ncmd ${mpmd_opt}" + +elif [[ "${step}" = "fcst" ]] || [[ "${step}" = "efcs" ]]; then + + if [[ "${CDUMP}" =~ "gfs" ]]; then + nprocs="npe_${step}_gfs" + ppn="npe_node_${step}_gfs" || ppn="npe_node_${step}" + else + nprocs="npe_${step}" + ppn="npe_node_${step}" + fi + (( nnodes = (${!nprocs}+${!ppn}-1)/${!ppn} )) + (( ntasks = nnodes*${!ppn} )) + # With ESMF threading, the model wants to use the full node + export APRUN_UFS="${launcher} -n ${ntasks}" + unset nprocs ppn nnodes ntasks + +elif [[ "${step}" = "upp" ]]; then + + nth_max=$((npe_node_max / npe_node_upp)) + + export NTHREADS_UPP=${nth_upp:-1} + [[ ${NTHREADS_UPP} -gt ${nth_max} ]] && export NTHREADS_UPP=${nth_max} + export APRUN_UPP="${launcher} -n ${npe_upp}" + +elif [[ "${step}" = "atmos_products" ]]; then + + export USE_CFP="YES" # Use MPMD for downstream product generation + +elif [[ "${step}" = "ecen" ]]; then + + nth_max=$((npe_node_max / npe_node_ecen)) + + export NTHREADS_ECEN=${nth_ecen:-${nth_max}} + [[ ${NTHREADS_ECEN} -gt ${nth_max} ]] && export NTHREADS_ECEN=${nth_max} + export APRUN_ECEN="${launcher} -n ${npe_ecen}" + + export NTHREADS_CHGRES=${nth_chgres:-12} + [[ ${NTHREADS_CHGRES} -gt ${npe_node_max} ]] && export NTHREADS_CHGRES=${npe_node_max} + export APRUN_CHGRES="time" + + export NTHREADS_CALCINC=${nth_calcinc:-1} + [[ ${NTHREADS_CALCINC} -gt ${nth_max} ]] && export NTHREADS_CALCINC=${nth_max} + export APRUN_CALCINC="${launcher} -n ${npe_ecen}" + +elif [[ "${step}" = "esfc" ]]; then + + nth_max=$((npe_node_max / npe_node_esfc)) + + export NTHREADS_ESFC=${nth_esfc:-${nth_max}} + [[ ${NTHREADS_ESFC} -gt ${nth_max} ]] && export NTHREADS_ESFC=${nth_max} + export APRUN_ESFC="${launcher} -n ${npe_esfc}" + + export NTHREADS_CYCLE=${nth_cycle:-14} + [[ ${NTHREADS_CYCLE} -gt ${npe_node_max} ]] && export NTHREADS_CYCLE=${npe_node_max} + export APRUN_CYCLE="${launcher} -n ${npe_esfc}" + +elif [[ "${step}" = "epos" ]]; then + + nth_max=$((npe_node_max / npe_node_epos)) + + export NTHREADS_EPOS=${nth_epos:-${nth_max}} + [[ ${NTHREADS_EPOS} -gt ${nth_max} ]] && export NTHREADS_EPOS=${nth_max} + export APRUN_EPOS="${launcher} -n ${npe_epos}" + +elif [[ "${step}" = "postsnd" ]]; then + + export CFP_MP="YES" + + nth_max=$((npe_node_max / npe_node_postsnd)) + + export NTHREADS_POSTSND=${nth_postsnd:-1} + [[ ${NTHREADS_POSTSND} -gt ${nth_max} ]] && export NTHREADS_POSTSND=${nth_max} + export APRUN_POSTSND="${launcher} -n ${npe_postsnd}" + + export NTHREADS_POSTSNDCFP=${nth_postsndcfp:-1} + [[ ${NTHREADS_POSTSNDCFP} -gt ${nth_max} ]] && export NTHREADS_POSTSNDCFP=${nth_max} + export APRUN_POSTSNDCFP="${launcher} -n ${npe_postsndcfp} ${mpmd_opt}" + +elif [[ "${step}" = "awips" ]]; then + + echo "WARNING: ${step} is not enabled on S4!" + +elif [[ "${step}" = "gempak" ]]; then + + echo "WARNING: ${step} is not enabled on S4!" + +elif [[ "${step}" = "fit2obs" ]]; then + + nth_max=$((npe_node_max / npe_node_fit2obs)) + + export NTHREADS_FIT2OBS=${nth_fit2obs:-1} + [[ ${NTHREADS_FIT2OBS} -gt ${nth_max} ]] && export NTHREADS_FIT2OBS=${nth_max} + export MPIRUN="${launcher} -n ${npe_fit2obs}" + +fi diff --git a/env/WCOSS2.env b/env/WCOSS2.env new file mode 100755 index 0000000000..068b69fd7b --- /dev/null +++ b/env/WCOSS2.env @@ -0,0 +1,286 @@ +#! /usr/bin/env bash + +if [[ $# -ne 1 ]]; then + + echo "Must specify an input argument to set runtime environment variables!" + echo "argument can be any one of the following:" + echo "atmanlrun atmensanlrun aeroanlrun landanl" + echo "anal sfcanl fcst post metp" + echo "eobs eupd ecen esfc efcs epos" + echo "postsnd awips gempak" + exit 1 + +fi + +step=$1 + +# WCOSS2 information +export launcher="mpiexec -l" +export mpmd_opt="--cpu-bind verbose,core cfp" + +export npe_node_max=128 + +if [[ "${step}" = "prep" ]] || [[ "${step}" = "prepbufr" ]]; then + + nth_max=$((npe_node_max / npe_node_prep)) + + export POE=${POE:-"YES"} + export BACK=${BACK:-"off"} + export sys_tp="wcoss2" + export launcher_PREP="mpiexec" + +elif [[ "${step}" = "preplandobs" ]]; then + + export APRUN_CALCFIMS="${launcher} -n 1" + +elif [[ "${step}" = "waveinit" ]] || [[ "${step}" = "waveprep" ]] || [[ "${step}" = "wavepostsbs" ]] || [[ "${step}" = "wavepostbndpnt" ]] || [[ "${step}" = "wavepostbndpntbll" ]] || [[ "${step}" = "wavepostpnt" ]]; then + + export USE_CFP="YES" + if [[ "${step}" = "waveprep" ]] && [[ "${CDUMP}" = "gfs" ]]; then export NTASKS=${NTASKS_gfs} ; fi + export wavempexec="${launcher} -np" + export wave_mpmd=${mpmd_opt} + +elif [[ "${step}" = "atmanlrun" ]]; then + + nth_max=$((npe_node_max / npe_node_atmanlrun)) + + export NTHREADS_ATMANL=${nth_atmanlrun:-${nth_max}} + [[ ${NTHREADS_ATMANL} -gt ${nth_max} ]] && export NTHREADS_ATMANL=${nth_max} + export APRUN_ATMANL="${launcher} -n ${npe_atmanlrun}" + +elif [[ "${step}" = "atmensanlrun" ]]; then + + nth_max=$((npe_node_max / npe_node_atmensanlrun)) + + export NTHREADS_ATMENSANL=${nth_atmensanlrun:-${nth_max}} + [[ ${NTHREADS_ATMENSANL} -gt ${nth_max} ]] && export NTHREADS_ATMENSANL=${nth_max} + export APRUN_ATMENSANL="${launcher} -n ${npe_atmensanlrun}" + +elif [[ "${step}" = "aeroanlrun" ]]; then + + export APRUNCFP="${launcher} -np \$ncmd ${mpmd_opt}" + + nth_max=$((npe_node_max / npe_node_aeroanlrun)) + + export NTHREADS_AEROANL=${nth_aeroanlrun:-${nth_max}} + [[ ${NTHREADS_AEROANL} -gt ${nth_max} ]] && export NTHREADS_AEROANL=${nth_max} + export APRUN_AEROANL="${launcher} -n ${npe_aeroanlrun}" + +elif [[ "${step}" = "landanl" ]]; then + + nth_max=$((npe_node_max / npe_node_landanl)) + + export NTHREADS_LANDANL=${nth_landanl:-${nth_max}} + [[ ${NTHREADS_LANDANL} -gt ${nth_max} ]] && export NTHREADS_LANDANL=${nth_max} + export APRUN_LANDANL="${launcher} -n ${npe_landanl}" + + export APRUN_APPLY_INCR="${launcher} -n 6" + +elif [[ "${step}" = "anal" ]] || [[ "${step}" = "analcalc" ]]; then + + export OMP_PLACES=cores + export OMP_STACKSIZE=1G + export FI_OFI_RXM_SAR_LIMIT=3145728 + + if [[ "${step}" = "analcalc" ]]; then + export MPICH_MPIIO_HINTS="*:romio_cb_write=disable" + fi + + nth_max=$((npe_node_max / npe_node_anal)) + + export NTHREADS_GSI=${nth_anal:-${nth_max}} + [[ ${NTHREADS_GSI} -gt ${nth_max} ]] && export NTHREADS_GSI=${nth_max} + export APRUN_GSI="${launcher} -n ${npe_gsi:-${npe_anal}} -ppn ${npe_node_anal} --cpu-bind depth --depth ${NTHREADS_GSI}" + + export NTHREADS_CALCINC=${nth_calcinc:-1} + [[ ${NTHREADS_CALCINC} -gt ${nth_max} ]] && export NTHREADS_CALCINC=${nth_max} + export APRUN_CALCINC="${launcher} \$ncmd" + + export NTHREADS_CYCLE=${nth_cycle:-14} + [[ ${NTHREADS_CYCLE} -gt ${npe_node_max} ]] && export NTHREADS_CYCLE=${npe_node_max} + npe_cycle=${ntiles:-6} + export APRUN_CYCLE="${launcher} -n ${npe_cycle} -ppn ${npe_node_cycle} --cpu-bind depth --depth ${NTHREADS_CYCLE}" + + export NTHREADS_GAUSFCANL=1 + npe_gausfcanl=${npe_gausfcanl:-1} + export APRUN_GAUSFCANL="${launcher} -n ${npe_gausfcanl}" + + export NTHREADS_CHGRES=${nth_echgres:-14} + [[ ${NTHREADS_CHGRES} -gt ${npe_node_max} ]] && export NTHREADS_CHGRES=${npe_node_max} + export APRUN_CHGRES="" + + export CFP_MP=${CFP_MP:-"NO"} + export USE_CFP=${USE_CFP:-"YES"} + export APRUNCFP="${launcher} -np \$ncmd ${mpmd_opt}" + +elif [[ "${step}" = "sfcanl" ]]; then + + nth_max=$((npe_node_max / npe_node_sfcanl)) + + export NTHREADS_CYCLE=${nth_sfcanl:-14} + [[ ${NTHREADS_CYCLE} -gt ${npe_node_max} ]] && export NTHREADS_CYCLE=${npe_node_max} + npe_sfcanl=${ntiles:-6} + export APRUN_CYCLE="${launcher} -n ${npe_sfcanl}" + +elif [[ "${step}" = "eobs" ]]; then + + export OMP_PLACES=cores + export OMP_STACKSIZE=1G + export FI_OFI_RXM_SAR_LIMIT=3145728 + + nth_max=$((npe_node_max / npe_node_eobs)) + + export NTHREADS_GSI=${nth_eobs:-${nth_max}} + [[ ${NTHREADS_GSI} -gt ${nth_max} ]] && export NTHREADS_GSI=${nth_max} + export APRUN_GSI="${launcher} -n ${npe_gsi:-${npe_eobs}} -ppn ${npe_node_eobs} --cpu-bind depth --depth ${NTHREADS_GSI}" + + export CFP_MP=${CFP_MP:-"NO"} + export USE_CFP=${USE_CFP:-"YES"} + export APRUNCFP="${launcher} -np \$ncmd ${mpmd_opt}" + +elif [[ "${step}" = "eupd" ]]; then + + export OMP_PLACES=cores + export OMP_STACKSIZE=2G + export MPICH_COLL_OPT_OFF=1 + export FI_OFI_RXM_SAR_LIMIT=3145728 + + nth_max=$((npe_node_max / npe_node_eupd)) + + export NTHREADS_ENKF=${nth_eupd:-${nth_max}} + [[ ${NTHREADS_ENKF} -gt ${nth_max} ]] && export NTHREADS_ENKF=${nth_max} + export APRUN_ENKF="${launcher} -n ${npe_enkf:-${npe_eupd}} -ppn ${npe_node_eupd} --cpu-bind depth --depth ${NTHREADS_ENKF}" + + export CFP_MP=${CFP_MP:-"NO"} + export USE_CFP=${USE_CFP:-"YES"} + export APRUNCFP="${launcher} -np \$ncmd ${mpmd_opt}" + +elif [[ "${step}" = "fcst" ]] || [[ "${step}" = "efcs" ]]; then + + if [[ "${CDUMP}" =~ "gfs" ]]; then + nprocs="npe_${step}_gfs" + ppn="npe_node_${step}_gfs" || ppn="npe_node_${step}" + else + nprocs="npe_${step}" + ppn="npe_node_${step}" + fi + (( nnodes = (${!nprocs}+${!ppn}-1)/${!ppn} )) + (( ntasks = nnodes*${!ppn} )) + # With ESMF threading, the model wants to use the full node + export APRUN_UFS="${launcher} -n ${ntasks} -ppn ${!ppn} --cpu-bind depth --depth 1" + unset nprocs ppn nnodes ntasks + + # TODO: Why are fcst and efcs so different on WCOSS2? + # TODO: Compare these with the ufs-weather-model regression test job card at: + # https://github.com/ufs-community/ufs-weather-model/blob/develop/tests/fv3_conf/fv3_qsub.IN_wcoss2 + export FI_OFI_RXM_RX_SIZE=40000 + export FI_OFI_RXM_TX_SIZE=40000 + if [[ "${step}" = "fcst" ]]; then + export OMP_PLACES=cores + export OMP_STACKSIZE=2048M + elif [[ "${step}" = "efcs" ]]; then + export MPICH_MPIIO_HINTS="*:romio_cb_write=disable" + export FI_OFI_RXM_SAR_LIMIT=3145728 + fi + +elif [[ "${step}" = "upp" ]]; then + + nth_max=$((npe_node_max / npe_node_upp)) + + export NTHREADS_UPP=${nth_upp:-1} + [[ ${NTHREADS_UPP} -gt ${nth_max} ]] && export NTHREADS_UPP=${nth_max} + export APRUN_UPP="${launcher} -n ${npe_upp} -ppn ${npe_node_upp} --cpu-bind depth --depth ${NTHREADS_UPP}" + +elif [[ "${step}" = "atmos_products" ]]; then + + export USE_CFP="YES" # Use MPMD for downstream product generation + +elif [[ "${step}" = "ecen" ]]; then + + nth_max=$((npe_node_max / npe_node_ecen)) + + export NTHREADS_ECEN=${nth_ecen:-${nth_max}} + [[ ${NTHREADS_ECEN} -gt ${nth_max} ]] && export NTHREADS_ECEN=${nth_max} + export APRUN_ECEN="${launcher} -n ${npe_ecen} -ppn ${npe_node_ecen} --cpu-bind depth --depth ${NTHREADS_ECEN}" + + export NTHREADS_CHGRES=${nth_chgres:-14} + [[ ${NTHREADS_CHGRES} -gt ${npe_node_max} ]] && export NTHREADS_CHGRES=${npe_node_max} + export APRUN_CHGRES="time" + + export NTHREADS_CALCINC=${nth_calcinc:-1} + [[ ${NTHREADS_CALCINC} -gt ${nth_max} ]] && export NTHREADS_CALCINC=${nth_max} + export APRUN_CALCINC="${launcher} -n ${npe_ecen}" + + export NTHREADS_CYCLE=${nth_cycle:-14} + [[ ${NTHREADS_CYCLE} -gt ${npe_node_max} ]] && export NTHREADS_CYCLE=${npe_node_max} + export APRUN_CYCLE="${launcher} -n ${npe_ecen} -ppn ${npe_node_cycle} --cpu-bind depth --depth ${NTHREADS_CYCLE}" + +elif [[ "${step}" = "esfc" ]]; then + + nth_max=$((npe_node_max / npe_node_esfc)) + + export NTHREADS_ESFC=${nth_esfc:-${nth_max}} + [[ ${NTHREADS_ESFC} -gt ${nth_max} ]] && export NTHREADS_ESFC=${nth_max} + export APRUN_ESFC="${launcher} -n ${npe_esfc} -ppn ${npe_node_esfc} --cpu-bind depth --depth ${NTHREADS_ESFC}" + + export NTHREADS_CYCLE=${nth_cycle:-14} + [[ ${NTHREADS_CYCLE} -gt ${npe_node_max} ]] && export NTHREADS_CYCLE=${npe_node_max} + export APRUN_CYCLE="${launcher} -n ${npe_esfc} -ppn ${npe_node_cycle} --cpu-bind depth --depth ${NTHREADS_CYCLE}" + +elif [[ "${step}" = "epos" ]]; then + + nth_max=$((npe_node_max / npe_node_epos)) + + export NTHREADS_EPOS=${nth_epos:-${nth_max}} + [[ ${NTHREADS_EPOS} -gt ${nth_max} ]] && export NTHREADS_EPOS=${nth_max} + export APRUN_EPOS="${launcher} -n ${npe_epos} -ppn ${npe_node_epos} --cpu-bind depth --depth ${NTHREADS_EPOS}" + +elif [[ "${step}" = "postsnd" ]]; then + + export MPICH_MPIIO_HINTS_DISPLAY=1 + export OMP_NUM_THREADS=1 + + nth_max=$((npe_node_max / npe_node_postsnd)) + + export NTHREADS_POSTSND=${nth_postsnd:-1} + [[ ${NTHREADS_POSTSND} -gt ${nth_max} ]] && export NTHREADS_POSTSND=${nth_max} + export APRUN_POSTSND="${launcher} -n ${npe_postsnd} --depth=${NTHREADS_POSTSND} --cpu-bind depth" + + export NTHREADS_POSTSNDCFP=${nth_postsndcfp:-1} + [[ ${NTHREADS_POSTSNDCFP} -gt ${nth_max} ]] && export NTHREADS_POSTSNDCFP=${nth_max} + export APRUN_POSTSNDCFP="${launcher} -np ${npe_postsndcfp} ${mpmd_opt}" + +elif [[ "${step}" = "awips" ]]; then + + nth_max=$((npe_node_max / npe_node_awips)) + + export NTHREADS_AWIPS=${nth_awips:-2} + [[ ${NTHREADS_AWIPS} -gt ${nth_max} ]] && export NTHREADS_AWIPS=${nth_max} + export APRUN_AWIPSCFP="${launcher} -np ${npe_awips} ${mpmd_opt}" + +elif [[ "${step}" = "gempak" ]]; then + + if [[ ${CDUMP} == "gfs" ]]; then + npe_gempak=${npe_gempak_gfs} + npe_node_gempak=${npe_node_gempak_gfs} + fi + + nth_max=$((npe_node_max / npe_node_gempak)) + + export NTHREADS_GEMPAK=${nth_gempak:-1} + [[ ${NTHREADS_GEMPAK} -gt ${nth_max} ]] && export NTHREADS_GEMPAK=${nth_max} + export APRUN_GEMPAKCFP="${launcher} -np ${npe_gempak} ${mpmd_opt}" + +elif [[ "${step}" = "fit2obs" ]]; then + + nth_max=$((npe_node_max / npe_node_fit2obs)) + + export NTHREADS_FIT2OBS=${nth_fit2obs:-1} + [[ ${NTHREADS_FIT2OBS} -gt ${nth_max} ]] && export NTHREADS_FIT2OBS=${nth_max} + export MPIRUN="${launcher} -np ${npe_fit2obs}" + +elif [[ "${step}" = "waveawipsbulls" ]]; then + + unset PERL5LIB + +fi diff --git a/env/WCOSS_C.env b/env/WCOSS_C.env deleted file mode 100755 index 93bd98ab60..0000000000 --- a/env/WCOSS_C.env +++ /dev/null @@ -1,243 +0,0 @@ -#!/bin/ksh -x - -if [ $# -ne 1 ]; then - - echo "Must specify an input argument to set runtime environment variables!" - echo "argument can be any one of the following:" - echo "anal fcst post vrfy metp" - echo "eobs eupd ecen efcs epos" - echo "postsnd awips gempak" - exit 1 - -fi - -step=$1 - -# Cray information -export launcher="aprun" -export mpmd="cfp" -export npe_node_max=24 - -# Configure MPI environment -export MPI_BUFS_PER_PROC=2048 -export MPI_BUFS_PER_HOST=2048 -export MPI_GROUP_MAX=256 -export MPI_MEMMAP_OFF=1 -export MP_STDOUTMODE="ORDERED" -export NTHSTACK=1024000000 -export OMP_STACKSIZE="2048M" -export KMP_AFFINITY="disabled" -export job=${LSB_JOBNAME:-$step} -export jobid=${job}.${LSB_JOBID:-$$} - -if [ $step = "prep" -o $step = "prepbufr" ]; then - - nth_max=$(($npe_node_max / $npe_node_prep)) - - export POE=${POE:-"YES"} - export sys_tp="Cray-XC40" - -elif [ $step = "waveprep" ]; then - - export MP_PULSE=0 - -elif [ $step = "anal" ]; then - - nth_max=$(($npe_node_max / $npe_node_anal)) - - export NTHREADS_GSI=${nth_anal:-$nth_max} - [[ $NTHREADS_GSI -gt $nth_max ]] && export NTHREADS_GSI=$nth_max - export APRUN_GSI="$launcher -j 1 -n ${npe_gsi:-$npe_anal} -N $npe_node_anal -d $NTHREADS_GSI -cc depth" - - export NTHREADS_CALCINC=${nth_calcinc:-1} - [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max - export APRUN_CALCINC="$launcher -j 1 -n \$ncmd -N 1 -d $NTHREADS_CALCINC -cc depth" - - if [ ${USE_CFP:-"NO"} = "YES" ]; then - export APRUNCFP="$launcher -q -j 1 -n \$ncmd -N \$ncmd_max -d 1 $mpmd" - fi - - export NTHREADS_CYCLE=${nth_cycle:-12} - [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max - npe_node_cycle=$(($npe_node_max / $NTHREADS_CYCLE)) - npe_cycle=${ntiles:-6} - [[ $npe_node_cycle -gt $npe_cycle ]] && npe_node_cycle=$npe_cycle - export APRUN_CYCLE="$launcher -j 1 -n $npe_cycle -N $npe_node_cycle -d $NTHREADS_CYCLE -cc depth" - - export NTHREADS_GAUSFCANL=1 - npe_node_gausfcanl=$(($npe_node_max / $NTHREADS_GAUSFCANL)) - npe_gausfcanl=${npe_gausfcanl:-1} - [[ $npe_node_gausfcanl -gt $npe_gausfcanl ]] && npe_node_gausfcanl=$npe_gausfcanl - export APRUN_GAUSFCANL="$launcher -j 1 -n $npe_gausfcanl -N $npe_node_gausfcanl -d $NTHREADS_GAUSFCANL -cc depth" - - export NTHREADS_CHGRES=${nth_echgres:-1} - [[ $NTHREADS_CHGRES -gt $npe_node_max ]] && export NTHREADS_CHGRES=$npe_node_max - export APRUN_CHGRES="$launcher -j 1 -n 1 -N 1 -d $NTHREADS_CHGRES -cc depth" - -elif [ $step = "gldas" ]; then - - nth_max=$(($npe_node_max / $npe_node_gldas)) - - export NTHREADS_GLDAS=${nth_gldas:-$nth_max} - [[ $NTHREADS_GLDAS -gt $nth_max ]] && export NTHREADS_GLDAS=$nth_max - export APRUN_GLDAS="$launcher -j 1 -n $npe_gldas -N $npe_node_gldas -d $NTHREADS_GLDAS -cc depth" - - export NTHREADS_GAUSSIAN=${nth_gaussian:-1} - [[ $NTHREADS_GAUSSIAN -gt $nth_max ]] && export NTHREADS_GAUSSIAN=$nth_max - export APRUN_GAUSSIAN="$launcher -j 1 -n $npe_gaussian -N $npe_node_gaussian -d $NTHREADS_GAUSSIAN -cc depth" - - export APRUN_GLDAS_DATA_PROC="$launcher -j 1 -n $npe_gldas -N $npe_node_gldas -d 1 $mpmd" - -elif [ $step = "eobs" ]; then - - nth_max=$(($npe_node_max / $npe_node_eobs)) - - export NTHREADS_GSI=${nth_anal:-$nth_max} - [[ $NTHREADS_GSI -gt $nth_max ]] && export NTHREADS_GSI=$nth_max - export APRUN_GSI="$launcher -j 1 -n ${npe_gsi:-$npe_eobs} -N $npe_node_eobs -d $NTHREADS_GSI -cc depth" - - if [ ${USE_CFP:-"NO"} = "YES" ]; then - export APRUNCFP="$launcher -q -j 1 -n \$ncmd -N \$ncmd_max -d 1 $mpmd" - fi - -elif [ $step = "eupd" ]; then - - nth_max=$(($npe_node_max / $npe_node_eupd)) - - export NTHREADS_ENKF=${nth_enkf:-$nth_max} - [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max - export APRUN_ENKF="$launcher -j 1 -n ${npe_enkf:-$npe_eupd} -N $npe_node_eupd -d $NTHREADS_ENKF -cc depth" - - if [ ${USE_CFP:-"NO"} = "YES" ]; then - export APRUNCFP="$launcher -q -j 1 -n \$ncmd -N \$ncmd_max -d 1 $mpmd" - fi - -elif [ $step = "fcst" ]; then - - nth_max=$(($npe_node_max / $npe_node_fcst)) - - export NTHREADS_FV3=${nth_fv3:-$nth_max} - [[ $NTHREADS_FV3 -gt $nth_max ]] && export NTHREADS_FV3=$nth_max - export cores_per_node=$npe_node_max - #export APRUN_FV3="$launcher -j 1 -n ${npe_fv3:-$npe_fcst} -N $npe_node_fcst -d $NTHREADS_FV3 -cc depth" - if [ $CDUMP = "gdas" ]; then - export APRUN_FV3="$launcher -j 1 -n ${npe_fcst} -N $npe_node_fcst -d $NTHREADS_FV3 -cc depth" - else - export APRUN_FV3="$launcher -j 1 -n ${npe_fcst_gfs} -N $npe_node_fcst -d $NTHREADS_FV3 -cc depth" - fi - - export NTHREADS_REGRID_NEMSIO=${nth_regrid_nemsio:-1} - [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max - export APRUN_REGRID_NEMSIO="$launcher -j 1 -n $LEVS -N $npe_node_fcst -d $NTHREADS_REGRID_NEMSIO -cc depth" - - export NTHREADS_REMAP=${nth_remap:-2} - [[ $NTHREADS_REMAP -gt $nth_max ]] && export NTHREADS_REMAP=$nth_max - export APRUN_REMAP="$launcher -j 1 -n ${npe_remap:-$npe_fcst} -N $npe_node_fcst -d $NTHREADS_REMAP -cc depth" - -elif [ $step = "efcs" ]; then - - nth_max=$(($npe_node_max / $npe_node_efcs)) - - export NTHREADS_FV3=${nth_fv3:-$nth_max} - [[ $NTHREADS_FV3 -gt $nth_max ]] && export NTHREADS_FV3=$nth_max - export cores_per_node=$npe_node_max - export APRUN_FV3="$launcher -j 1 -n ${npe_fv3:-$npe_efcs} -N $npe_node_efcs -d $NTHREADS_FV3 -cc depth" - - export NTHREADS_REGRID_NEMSIO=${nth_regrid_nemsio:-1} - [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max - export APRUN_REGRID_NEMSIO="$launcher -j 1 -n $LEVS -N $npe_node_efcs -d $NTHREADS_REGRID_NEMSIO -cc depth" - -elif [ $step = "post" ]; then - - nth_max=$(($npe_node_max / $npe_node_post)) - - export NTHREADS_NP=${nth_np:-1} - [[ $NTHREADS_NP -gt $nth_max ]] && export NTHREADS_NP=$nth_max - export APRUN_NP="$launcher -j 1 -n ${npe_np:-$npe_post} -N $npe_node_post -d $NTHREADS_NP -cc depth" - - export NTHREADS_DWN=${nth_dwn:-1} - [[ $NTHREADS_DWN -gt $nth_max ]] && export NTHREADS_DWN=$nth_max - export APRUN_DWN="$launcher -j 1 -n $npe_dwn -N $npe_node_dwn -d $NTHREADS_DWN $mpmd" - -elif [ $step = "ecen" ]; then - - nth_max=$(($npe_node_max / $npe_node_ecen)) - - export NTHREADS_ECEN=${nth_ecen:-$nth_max} - [[ $NTHREADS_ECEN -gt $nth_max ]] && export NTHREADS_ECEN=$nth_max - export APRUN_ECEN="$launcher -j 1 -n $npe_ecen -N $npe_node_ecen -d $NTHREADS_ECEN -cc depth" - - export NTHREADS_CHGRES=${nth_chgres:-12} - [[ $NTHREADS_CHGRES -gt $npe_node_max ]] && export NTHREADS_CHGRES=$npe_node_max - export APRUN_CHGRES="$launcher -j 1 -n 1 -N 1 -d $NTHREADS_CHGRES -cc depth" - - export NTHREADS_CALCINC=${nth_calcinc:-1} - [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max - export APRUN_CALCINC="$launcher -j 1 -n $npe_ecen -N $npe_node_ecen -d $NTHREADS_CALCINC -cc depth" - -elif [ $step = "esfc" ]; then - - nth_max=$(($npe_node_max / $npe_node_esfc)) - - export NTHREADS_ESFC=${nth_esfc:-$nth_max} - [[ $NTHREADS_ESFC -gt $nth_max ]] && export NTHREADS_ESFC=$nth_max - npe_node_esfc=$(($npe_node_max / $NTHREADS_ESFC)) - export APRUN_ESFC="$launcher -j 1 -n $npe_esfc -N $npe_node_esfc -d $NTHREADS_ESFC -cc depth" - - export NTHREADS_CYCLE=${nth_cycle:-12} - [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max - npe_node_cycle=$(($npe_node_max / $NTHREADS_CYCLE)) - export APRUN_CYCLE="$launcher -j 1 -n $npe_esfc -N $npe_node_cycle -d $NTHREADS_CYCLE -cc depth" - -elif [ $step = "epos" ]; then - - nth_max=$(($npe_node_max / $npe_node_epos)) - - export NTHREADS_EPOS=${nth_epos:-$nth_max} - [[ $NTHREADS_EPOS -gt $nth_max ]] && export NTHREADS_EPOS=$nth_max - export APRUN_EPOS="$launcher -j 1 -n $npe_epos -N $npe_node_epos -d $NTHREADS_EPOS -cc depth" - -elif [ $step = "fv3ic" ]; then - - export NTHREADS_CHGRES=${nth_chgres:-$npe_node_max} - [[ $NTHREADS_CHGRES -gt $npe_node_max ]] && export NTHREADS_CHGRES=$npe_node_max - export APRUN_CHGRES="$launcher -j 1 -n 1 -N 1 -d $NTHREADS_CHGRES -cc depth" - -elif [ $step = "vrfy" ]; then - - export IOBUF_PARAMS="*:size=32M:count=4:verbose" - export APRUNTRACK="$launcher -j1 -n1 -N1 -d1 -cc depth" - -elif [ $step = "metp" ]; then - - export IOBUF_PARAMS="*:size=32M:count=4:verbose" - export APRUNTRACK="$launcher -j1 -n1 -N1 -d1 -cc depth" - -elif [ $step = "postsnd" ]; then - export IOBUF_PARAMS="sigf*:size=128M:count=20:prefetch=0:verbose,gfs_collectiv*:size=128M:count=2:prefetch=0:verbose,*.snd:size=128M:count=3:prefetch=0:verbose,*.sfc:size=32M:count=3:prefetch=0:verbose,bufr.*:size=8M:count=20:prefetch=0:verbose" - - nth_max=$(($npe_node_max / $npe_node_postsnd)) - - export NTHREADS_POSTSND=${nth_postsnd:-1} - [[ $NTHREADS_POSTSND -gt $nth_max ]] && export NTHREADS_POSTSND=$nth_max - export APRUN_POSTSND="$launcher -j 1 -n $npe_postsnd -N $npe_node_postsnd -d $NTHREADS_POSTSND -cc depth" - - export NTHREADS_POSTSNDCFP=${nth_postsndcfp:-1} - [[ $NTHREADS_POSTSNDCFP -gt $nth_max ]] && export NTHREADS_POSTSNDCFP=$nth_max - export APRUN_POSTSNDCFP="$launcher -j 1 -n $npe_postsndcfp -N $npe_node_postsndcfp -d $NTHREADS_POSTSNDCFP $mpmd" - -elif [ $step = "awips" ]; then - nth_max=$(($npe_node_max / $npe_node_awips)) - - export NTHREADS_AWIPS=${nth_awips:-2} - [[ $NTHREADS_AWIPS -gt $nth_max ]] && export NTHREADS_AWIPS=$nth_max - export APRUN_AWIPSCFP="$launcher -j 1 -n $npe_awips -N $npe_node_awips -d $NTHREADS_AWIPS -cc depth $mpmd" - -elif [ $step = "gempak" ]; then - nth_max=$(($npe_node_max / $npe_node_gempak)) - - export NTHREADS_GEMPAK=${nth_gempak:-3} - [[ $NTHREADS_GEMPAK -gt $nth_max ]] && export NTHREADS_GEMPAK=$nth_max - export APRUN_GEMPAKCFP="$launcher -j 1 -n $npe_gempak -N $npe_node_gempak -d $NTHREADS_GEMPAK $mpmd" - -fi diff --git a/env/WCOSS_DELL_P3.env b/env/WCOSS_DELL_P3.env deleted file mode 100755 index ef891347d6..0000000000 --- a/env/WCOSS_DELL_P3.env +++ /dev/null @@ -1,240 +0,0 @@ -#!/bin/ksh -x - -if [ $# -ne 1 ]; then - - echo "Must specify an input argument to set runtime environment variables!" - echo "argument can be any one of the following:" - echo "anal fcst post vrfy metp" - echo "eobs eupd ecen esfc efcs epos" - echo "postsnd awips gempak" - exit 1 - -fi - -step=$1 - -# WCOSS_DELL_P3 information -export launcher="mpirun -n" -export mpmd="cfp" - -export npe_node_max=28 -if [ "$QUEUE" = "dev2" -o "$QUEUE" = "devonprod2" -o "$QUEUE" = "devmax2" ]; then # WCOSS Dell 3.5 - export npe_node_max=40 -fi - -# Configure MPI environment -#export MPI_BUFS_PER_PROC=2048 -#export MPI_BUFS_PER_HOST=2048 -#export MPI_GROUP_MAX=256 -#export MPI_MEMMAP_OFF=1 -export MPI_LABELIO=YES -export MP_STDOUTMODE="ORDERED" -export KMP_STACKSIZE=2048M -export KMP_AFFINITY=scatter -export job=${LSB_JOBNAME:-$step} -export jobid=${job}.${LSB_JOBID:-$$} - -# get binding information -#export I_MPI_DEBUG=4 - -if [ $step = "prep" -o $step = "prepbufr" ]; then - - nth_max=$(($npe_node_max / $npe_node_prep)) - - export POE="NO" - export BACK=${BACK:-"YES"} - export sys_tp="Dell-p3" - -elif [ $step = "waveprep" ]; then - - export MP_PULSE=0 - -elif [ $step = "anal" ]; then - - nth_max=$(($npe_node_max / $npe_node_anal)) - - export NTHREADS_GSI=${nth_anal:-$nth_max} - [[ $NTHREADS_GSI -gt $nth_max ]] && export NTHREADS_GSI=$nth_max - export APRUN_GSI="$launcher ${npe_gsi:-${npe_anal:-$PBS_NP}}" - - export NTHREADS_CALCINC=${nth_calcinc:-1} - [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max - export APRUN_CALCINC="$launcher \$ncmd" - - export NTHREADS_CYCLE=${nth_cycle:-14} - [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max - npe_cycle=${ntiles:-6} - export APRUN_CYCLE="$launcher $npe_cycle" - - export NTHREADS_GAUSFCANL=1 - npe_gausfcanl=${npe_gausfcanl:-1} - export APRUN_GAUSFCANL="$launcher $npe_gausfcanl" - - export NTHREADS_CHGRES=${nth_echgres:-14} - [[ $NTHREADS_CHGRES -gt $npe_node_max ]] && export NTHREADS_CHGRES=$npe_node_max - export APRUN_CHGRES="" - - export CFP_MP=${CFP_MP:-"NO"} - export USE_CFP=${USE_CFP:-"YES"} - export APRUNCFP="$launcher \$ncmd $mpmd" - -elif [ $step = "gldas" ]; then - - nth_max=$(($npe_node_max / $npe_node_gldas)) - - export NTHREADS_GLDAS=${nth_gldas:-$nth_max} - [[ $NTHREADS_GLDAS -gt $nth_max ]] && export NTHREADS_GLDAS=$nth_max - export APRUN_GLDAS="$launcher $npe_gldas" - - export NTHREADS_GAUSSIAN=${nth_gaussian:-1} - [[ $NTHREADS_GAUSSIAN -gt $nth_max ]] && export NTHREADS_GAUSSIAN=$nth_max - export APRUN_GAUSSIAN="$launcher $npe_gaussian" - - export APRUN_GLDAS_DATA_PROC="$launcher $npe_gldas $mpmd" - -elif [ $step = "eobs" ]; then - - nth_max=$(($npe_node_max / $npe_node_eobs)) - - export NTHREADS_GSI=${nth_eobs:-$nth_max} - [[ $NTHREADS_GSI -gt $nth_max ]] && export NTHREADS_GSI=$nth_max - export APRUN_GSI="$launcher ${npe_gsi:-${npe_eobs:-$PBS_NP}}" - - export CFP_MP=${CFP_MP:-"NO"} - export USE_CFP=${USE_CFP:-"YES"} - export APRUNCFP="$launcher \$ncmd $mpmd" - -elif [ $step = "eupd" ]; then - - nth_max=$(($npe_node_max / $npe_node_eupd)) - - export NTHREADS_ENKF=${nth_eupd:-$nth_max} - [[ $NTHREADS_ENKF -gt $nth_max ]] && export NTHREADS_ENKF=$nth_max - export APRUN_ENKF="$launcher ${npe_enkf:-${npe_eupd:-$PBS_NP}}" - - export CFP_MP=${CFP_MP:-"NO"} - export USE_CFP=${USE_CFP:-"YES"} - export APRUNCFP="$launcher \$ncmd $mpmd" - -elif [ $step = "fcst" ]; then - - nth_max=$(($npe_node_max / $npe_node_fcst)) - - export NTHREADS_FV3=${nth_fv3:-$nth_max} - [[ $NTHREADS_FV3 -gt $nth_max ]] && export NTHREADS_FV3=$nth_max - export cores_per_node=$npe_node_max - if [ $CDUMP = "gdas" ]; then - #export APRUN_FV3="$launcher ${npe_fv3:-${npe_fcst:-$PBS_NP}}" - export APRUN_FV3="$launcher ${npe_fcst:-$PBS_NP}" - else - export APRUN_FV3="$launcher ${npe_fcst_gfs:-$PBS_NP}" - fi - export NTHREADS_REGRID_NEMSIO=${nth_regrid_nemsio:-1} - [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max - export APRUN_REGRID_NEMSIO="$launcher $LEVS" - - export NTHREADS_REMAP=${nth_remap:-2} - [[ $NTHREADS_REMAP -gt $nth_max ]] && export NTHREADS_REMAP=$nth_max - export APRUN_REMAP="$launcher ${npe_remap:-${npe_fcst:-$PBS_NP}}" - -elif [ $step = "efcs" ]; then - - nth_max=$(($npe_node_max / $npe_node_efcs)) - - export NTHREADS_FV3=${nth_efcs:-$nth_max} - [[ $NTHREADS_FV3 -gt $nth_max ]] && export NTHREADS_FV3=$nth_max - export cores_per_node=$npe_node_max - export APRUN_FV3="$launcher ${npe_fv3:-${npe_efcs:-$PBS_NP}}" - - export NTHREADS_REGRID_NEMSIO=${nth_regrid_nemsio:-1} - [[ $NTHREADS_REGRID_NEMSIO -gt $nth_max ]] && export NTHREADS_REGRID_NEMSIO=$nth_max - export APRUN_REGRID_NEMSIO="$launcher $LEVS" - -elif [ $step = "post" ]; then - - nth_max=$(($npe_node_max / $npe_node_post)) - - export NTHREADS_NP=${nth_np:-1} - [[ $NTHREADS_NP -gt $nth_max ]] && export NTHREADS_NP=$nth_max - export APRUN_NP="$launcher ${npe_np:-${npe_post:-$PBS_NP}}" - - export NTHREADS_DWN=${nth_dwn:-1} - [[ $NTHREADS_DWN -gt $nth_max ]] && export NTHREADS_DWN=$nth_max - export APRUN_DWN="$launcher ${npe_dwn:-$PBS_NP} $mpmd" - -elif [ $step = "ecen" ]; then - - nth_max=$(($npe_node_max / $npe_node_ecen)) - - export NTHREADS_ECEN=${nth_ecen:-$nth_max} - [[ $NTHREADS_ECEN -gt $nth_max ]] && export NTHREADS_ECEN=$nth_max - export APRUN_ECEN="$launcher ${npe_ecen:-$PBS_NP}" - - export NTHREADS_CHGRES=${nth_chgres:-14} - [[ $NTHREADS_CHGRES -gt $npe_node_max ]] && export NTHREADS_CHGRES=$npe_node_max - export APRUN_CHGRES="time" - - export NTHREADS_CALCINC=${nth_calcinc:-1} - [[ $NTHREADS_CALCINC -gt $nth_max ]] && export NTHREADS_CALCINC=$nth_max - export APRUN_CALCINC="$launcher ${npe_ecen:-$PBS_NP}" - - export NTHREADS_CYCLE=${nth_cycle:-14} - [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max - export APRUN_CYCLE="$launcher $npe_ecen" - -elif [ $step = "esfc" ]; then - - nth_max=$(($npe_node_max / $npe_node_esfc)) - - export NTHREADS_ESFC=${nth_esfc:-$nth_max} - [[ $NTHREADS_ESFC -gt $nth_max ]] && export NTHREADS_ESFC=$nth_max - export APRUN_ESFC="$launcher ${npe_esfc:-$PBS_NP}" - - export NTHREADS_CYCLE=${nth_cycle:-14} - [[ $NTHREADS_CYCLE -gt $npe_node_max ]] && export NTHREADS_CYCLE=$npe_node_max - export APRUN_CYCLE="$launcher $npe_esfc" - -elif [ $step = "epos" ]; then - - nth_max=$(($npe_node_max / $npe_node_epos)) - - export NTHREADS_EPOS=${nth_epos:-$nth_max} - [[ $NTHREADS_EPOS -gt $nth_max ]] && export NTHREADS_EPOS=$nth_max - export APRUN_EPOS="$launcher ${npe_epos:-$PBS_NP}" - -elif [ $step = "fv3ic" ]; then - - export NTHREADS_CHGRES=${nth_chgres:-$npe_node_max} - [[ $NTHREADS_CHGRES -gt $npe_node_max ]] && export NTHREADS_CHGRES=$npe_node_max - export APRUN_CHGRES="time" - -elif [ $step = "postsnd" ]; then - - nth_max=$(($npe_node_max / $npe_node_postsnd)) - - export NTHREADS_POSTSND=${nth_postsnd:-1} - [[ $NTHREADS_POSTSND -gt $nth_max ]] && export NTHREADS_POSTSND=$nth_max - export APRUN_POSTSND="$launcher $npe_postsnd" - - export NTHREADS_POSTSNDCFP=${nth_postsndcfp:-1} - [[ $NTHREADS_POSTSNDCFP -gt $nth_max ]] && export NTHREADS_POSTSNDCFP=$nth_max - export APRUN_POSTSNDCFP="$launcher $npe_postsndcfp $mpmd" - -elif [ $step = "awips" ]; then - - nth_max=$(($npe_node_max / $npe_node_awips)) - - export NTHREADS_AWIPS=${nth_awips:-2} - [[ $NTHREADS_AWIPS -gt $nth_max ]] && export NTHREADS_AWIPS=$nth_max - export APRUN_AWIPSCFP="$launcher ${npe_awips:-$PBS_NP} $mpmd" - -elif [ $step = "gempak" ]; then - - nth_max=$(($npe_node_max / $npe_node_gempak)) - - export NTHREADS_GEMPAK=${nth_gempak:-1} - [[ $NTHREADS_GEMPAK -gt $nth_max ]] && export NTHREADS_GEMPAK=$nth_max - export APRUN_GEMPAKCFP="$launcher \$ntasks $mpmd" - - -fi diff --git a/env/gfs.ver b/env/gfs.ver deleted file mode 100644 index efd4a1d9c3..0000000000 --- a/env/gfs.ver +++ /dev/null @@ -1,22 +0,0 @@ -export gfs_ver=v15.0.0 - -export crtm_ver=2.3.0 -export hwrf_ver=v11.0.0 -export g2tmpl_ver=1.4.0 - -export grib_util_ver=1.1.0 -export util_shared_ver=1.0.6 -export cfp_intel_sandybridge_ver=1.1.0 -export iobuf_ver=2.0.7 -export ESMF_intel_sandybridge_ver=3_1_0rp5 -export ESMF_intel_haswell_ver=3_1_0rp5 -export gempak_ver=7.3.0 -export old_gempak_ver=6.32.0 -export NCL_gnu_sandybridge_ver=6.3.0 -export ncarg_intel_sandybridge_ver=6.1.0 -export dumpjb_ver=4.0.0 - -## FOLLOWING are used by JGDAS_TROPC -export obsproc_dump_ver=v4.0.0 -export obsproc_shared_bufr_dumplist_ver=v1.5.0 - diff --git a/fix/product/gfs_minmon_cost.txt b/fix/product/gfs_minmon_cost.txt deleted file mode 100644 index 7b4341587b..0000000000 --- a/fix/product/gfs_minmon_cost.txt +++ /dev/null @@ -1,4 +0,0 @@ -cost_target:cost,grad,step,b,step?: -cost_number:4: -costterms_target:costterms Jb,Jo,Jc,Jl: - diff --git a/fix/product/gfs_minmon_gnorm.txt b/fix/product/gfs_minmon_gnorm.txt deleted file mode 100644 index 4687139cf3..0000000000 --- a/fix/product/gfs_minmon_gnorm.txt +++ /dev/null @@ -1,6 +0,0 @@ -igrad_target:cost,grad,step,b,step?: -igrad_number:5: -gnorm_target:penalty and grad reduction WRT outer and initial iter: -gnorm_number:14: -expected_gnorms:202: -gross_check_val:3.5E-4: diff --git a/fix/product/wafs_admin_msg b/fix/product/wafs_admin_msg deleted file mode 100755 index 5df92dba3b..0000000000 --- a/fix/product/wafs_admin_msg +++ /dev/null @@ -1,5 +0,0 @@ -WAFC WASHINGTON ADVISES ALL USERS OF TRIAL CB CLOUD, ICING AND TURBULENCE WAFS FORECASTS IN GRIB2 FORMAT THAT PRODUCTION PROBLEMS HAVE TRIGGERED CONTINGENCY MEASURES AND THE ISSUANCE OF NON-HARMONIZED FORECASTS. - -STANDARD WAFS FORECAST PARAMETERS IN GRIB2 FORMAT (WIND, TEMPERATURE, HUMIDITY, TROP HEIGHT, MAX WIND, MAX WIND HEIGHT) ARE UNAFFECTED, AND ARE AVAILABLE AS NORMAL. - -WAFC WASHINGTON APOLOGIZES FOR ANY INCONVENIENCE CAUSED DUE TO THIS ISSUE. diff --git a/gempak/fix/g2varswmo2.tbl b/gempak/fix/g2varswmo2.tbl index 820d6faa48..61151b12b5 100755 --- a/gempak/fix/g2varswmo2.tbl +++ b/gempak/fix/g2varswmo2.tbl @@ -428,7 +428,7 @@ 010 001 002 000 u-component of current m s-1 URELC 0 -9999.00 010 001 003 000 v-component of current m s-1 VRELC 0 -9999.00 ! -010 002 000 000 Ice cover Proportion ICE 0 -9999.00 +010 002 000 000 Ice cover Proportion ICEC 0 -9999.00 010 002 001 000 Ice thickness m ICET 0 -9999.00 010 002 002 000 Direction of ice drift Degree true DRCTI 0 -9999.00 010 002 003 000 Speed of ice drift m s-1 SPEDI 0 -9999.00 diff --git a/gempak/ush/gdas_ecmwf_meta_ver.sh b/gempak/ush/gdas_ecmwf_meta_ver.sh index ef71b2c0ed..e4fffd9c8a 100755 --- a/gempak/ush/gdas_ecmwf_meta_ver.sh +++ b/gempak/ush/gdas_ecmwf_meta_ver.sh @@ -25,7 +25,7 @@ export pgm=gdplot2_nc;. prep_step; startmsg cyc=12 device="nc | ecmwfver.meta" -PDY2=`echo ${PDY} | cut -c3-` +PDY2=$(echo ${PDY} | cut -c3-) # # Copy in datatype table to define gdfile type @@ -39,26 +39,26 @@ fi # # DEFINE YESTERDAY -date1=`$NDATE -24 ${PDY}${cyc} | cut -c -8` -sdate1=`echo ${date1} | cut -c 3-` +date1=$($NDATE -24 ${PDY}${cyc} | cut -c -8) +sdate1=$(echo ${date1} | cut -c 3-) # DEFINE 2 DAYS AGO -date2=`$NDATE -48 ${PDY}${cyc} | cut -c -8` -sdate2=`echo ${date2} | cut -c 3-` +date2=$($NDATE -48 ${PDY}${cyc} | cut -c -8) +sdate2=$(echo ${date2} | cut -c 3-) # DEFINE 3 DAYS AGO -date3=`$NDATE -72 ${PDY}${cyc} | cut -c -8` -sdate3=`echo ${date3} | cut -c 3-` +date3=$($NDATE -72 ${PDY}${cyc} | cut -c -8) +sdate3=$(echo ${date3} | cut -c 3-) # DEFINE 4 DAYS AGO -date4=`$NDATE -96 ${PDY}${cyc} | cut -c -8` -sdate4=`echo ${date4} | cut -c 3-` +date4=$($NDATE -96 ${PDY}${cyc} | cut -c -8) +sdate4=$(echo ${date4} | cut -c 3-) # DEFINE 5 DAYS AGO -date5=`$NDATE -120 ${PDY}${cyc} | cut -c -8` -sdate5=`echo ${date5} | cut -c 3-` +date5=$($NDATE -120 ${PDY}${cyc} | cut -c -8) +sdate5=$(echo ${date5} | cut -c 3-) # DEFINE 6 DAYS AGO -date6=`$NDATE -144 ${PDY}${cyc} | cut -c -8` -sdate6=`echo ${date6} | cut -c 3-` +date6=$($NDATE -144 ${PDY}${cyc} | cut -c -8) +sdate6=$(echo ${date6} | cut -c 3-) # DEFINE 7 DAYS AGO -date7=`$NDATE -168 ${PDY}${cyc} | cut -c -8` -sdate7=`echo ${date7} | cut -c 3-` +date7=$($NDATE -168 ${PDY}${cyc} | cut -c -8) +sdate7=$(echo ${date7} | cut -c 3-) vergrid="F-GDAS | ${PDY2}/0600" fcsthr="0600f006" @@ -82,7 +82,7 @@ for area in $areas fi for verday in $verdays do - verddate=`echo ${verday} | cut -c 3-` + verddate=$(echo ${verday} | cut -c 3-) if [ ${verday} -eq ${date1} ] ; then dgdattim=f024 sdatenum=$sdate1 diff --git a/gempak/ush/gdas_meta_loop.sh b/gempak/ush/gdas_meta_loop.sh index 90c30af771..cd0d9b781b 100755 --- a/gempak/ush/gdas_meta_loop.sh +++ b/gempak/ush/gdas_meta_loop.sh @@ -19,7 +19,7 @@ set -xa device="nc | gdasloop.meta" -PDY2=`echo $PDY | cut -c3-` +PDY2=$(echo $PDY | cut -c3-) if [ "$envir" = "para" ] ; then export m_title="GDASP" @@ -43,19 +43,19 @@ fi # # Define previous days # -PDYm1=`$NDATE -24 ${PDY}${cyc} | cut -c -8` -PDYm2=`$NDATE -48 ${PDY}${cyc} | cut -c -8` -PDYm3=`$NDATE -72 ${PDY}${cyc} | cut -c -8` -PDYm4=`$NDATE -96 ${PDY}${cyc} | cut -c -8` -PDYm5=`$NDATE -120 ${PDY}${cyc} | cut -c -8` -PDYm6=`$NDATE -144 ${PDY}${cyc} | cut -c -8` +PDYm1=$($NDATE -24 ${PDY}${cyc} | cut -c -8) +PDYm2=$($NDATE -48 ${PDY}${cyc} | cut -c -8) +PDYm3=$($NDATE -72 ${PDY}${cyc} | cut -c -8) +PDYm4=$($NDATE -96 ${PDY}${cyc} | cut -c -8) +PDYm5=$($NDATE -120 ${PDY}${cyc} | cut -c -8) +PDYm6=$($NDATE -144 ${PDY}${cyc} | cut -c -8) # verdays="$PDYm6 $PDYm5 $PDYm4 $PDYm3 $PDYm2 $PDYm1 $PDY" for day in $verdays do - PDY2=`echo $day | cut -c 3-` + PDY2=$(echo $day | cut -c 3-) if [ $day -eq $PDY ] ; then if [ $cyc -eq "00" ] ; then cycles="00" @@ -159,7 +159,7 @@ done for day in $verdays do - PDY2=`echo $day | cut -c 3-` + PDY2=$(echo $day | cut -c 3-) if [ $day -eq $PDY ] ; then if [ $cyc -eq "00" ] ; then cycles="00" diff --git a/gempak/ush/gdas_meta_na.sh b/gempak/ush/gdas_meta_na.sh index 3ad7962999..6c4768cfb7 100755 --- a/gempak/ush/gdas_meta_na.sh +++ b/gempak/ush/gdas_meta_na.sh @@ -21,7 +21,7 @@ set -xa device="nc | gdas.meta" -PDY2=`echo $PDY | cut -c3-` +PDY2=$(echo $PDY | cut -c3-) if [ "$envir" = "para" ] ; then export m_title="GDASP" diff --git a/gempak/ush/gdas_ukmet_meta_ver.sh b/gempak/ush/gdas_ukmet_meta_ver.sh index cd6cf146da..845fa1cc6b 100755 --- a/gempak/ush/gdas_ukmet_meta_ver.sh +++ b/gempak/ush/gdas_ukmet_meta_ver.sh @@ -24,7 +24,7 @@ fi export pgm=gdplot2_nc;. prep_step; startmsg device="nc | ukmetver_12.meta" -PDY2=`echo ${PDY} | cut -c3-` +PDY2=$(echo ${PDY} | cut -c3-) # # Copy in datatype table to define gdfile type @@ -33,50 +33,50 @@ cp $FIXgempak/datatype.tbl datatype.tbl # # DEFINE 1 CYCLE AGO -dc1=`$NDATE -06 ${PDY}${cyc} | cut -c -10` -date1=`echo ${dc1} | cut -c -8` -sdate1=`echo ${dc1} | cut -c 3-8` -cycle1=`echo ${dc1} | cut -c 9,10` +dc1=$($NDATE -06 ${PDY}${cyc} | cut -c -10) +date1=$(echo ${dc1} | cut -c -8) +sdate1=$(echo ${dc1} | cut -c 3-8) +cycle1=$(echo ${dc1} | cut -c 9,10) # DEFINE 2 CYCLES AGO -dc2=`$NDATE -18 ${PDY}${cyc} | cut -c -10` -date2=`echo ${dc2} | cut -c -8` -sdate2=`echo ${dc2} | cut -c 3-8` -cycle2=`echo ${dc2} | cut -c 9,10` +dc2=$($NDATE -18 ${PDY}${cyc} | cut -c -10) +date2=$(echo ${dc2} | cut -c -8) +sdate2=$(echo ${dc2} | cut -c 3-8) +cycle2=$(echo ${dc2} | cut -c 9,10) # DEFINE 3 CYCLES AGO -dc3=`$NDATE -30 ${PDY}${cyc} | cut -c -10` -date3=`echo ${dc3} | cut -c -8` -sdate3=`echo ${dc3} | cut -c 3-8` -cycle3=`echo ${dc3} | cut -c 9,10` +dc3=$($NDATE -30 ${PDY}${cyc} | cut -c -10) +date3=$(echo ${dc3} | cut -c -8) +sdate3=$(echo ${dc3} | cut -c 3-8) +cycle3=$(echo ${dc3} | cut -c 9,10) # DEFINE 4 CYCLES AGO -dc4=`$NDATE -42 ${PDY}${cyc} | cut -c -10` -date4=`echo ${dc4} | cut -c -8` -sdate4=`echo ${dc4} | cut -c 3-8` -cycle4=`echo ${dc4} | cut -c 9,10` +dc4=$($NDATE -42 ${PDY}${cyc} | cut -c -10) +date4=$(echo ${dc4} | cut -c -8) +sdate4=$(echo ${dc4} | cut -c 3-8) +cycle4=$(echo ${dc4} | cut -c 9,10) # DEFINE 5 CYCLES AGO -dc5=`$NDATE -54 ${PDY}${cyc} | cut -c -10` -date5=`echo ${dc5} | cut -c -8` -sdate5=`echo ${dc5} | cut -c 3-8` -cycle5=`echo ${dc5} | cut -c 9,10` +dc5=$($NDATE -54 ${PDY}${cyc} | cut -c -10) +date5=$(echo ${dc5} | cut -c -8) +sdate5=$(echo ${dc5} | cut -c 3-8) +cycle5=$(echo ${dc5} | cut -c 9,10) # DEFINE 6 CYCLES AGO -dc6=`$NDATE -66 ${PDY}${cyc} | cut -c -10` -date6=`echo ${dc6} | cut -c -8` -sdate6=`echo ${dc6} | cut -c 3-8` -cycle6=`echo ${dc6} | cut -c 9,10` +dc6=$($NDATE -66 ${PDY}${cyc} | cut -c -10) +date6=$(echo ${dc6} | cut -c -8) +sdate6=$(echo ${dc6} | cut -c 3-8) +cycle6=$(echo ${dc6} | cut -c 9,10) # DEFINE 7 CYCLES AGO -dc7=`$NDATE -90 ${PDY}${cyc} | cut -c -10` -date7=`echo ${dc7} | cut -c -8` -sdate7=`echo ${dc7} | cut -c 3-8` -cycle7=`echo ${dc7} | cut -c 9,10` +dc7=$($NDATE -90 ${PDY}${cyc} | cut -c -10) +date7=$(echo ${dc7} | cut -c -8) +sdate7=$(echo ${dc7} | cut -c 3-8) +cycle7=$(echo ${dc7} | cut -c 9,10) # DEFINE 8 CYCLES AGO -dc8=`$NDATE -114 ${PDY}${cyc} | cut -c -10` -date8=`echo ${dc8} | cut -c -8` -sdate8=`echo ${dc8} | cut -c 3-8` -cycle8=`echo ${dc8} | cut -c 9,10` +dc8=$($NDATE -114 ${PDY}${cyc} | cut -c -10) +date8=$(echo ${dc8} | cut -c -8) +sdate8=$(echo ${dc8} | cut -c 3-8) +cycle8=$(echo ${dc8} | cut -c 9,10) # DEFINE 9 CYCLES AGO -dc9=`$NDATE -138 ${PDY}${cyc} | cut -c -10` -date9=`echo ${dc9} | cut -c -8` -sdate9=`echo ${dc9} | cut -c 3-8` -cycle9=`echo ${dc9} | cut -c 9,10` +dc9=$($NDATE -138 ${PDY}${cyc} | cut -c -10) +date9=$(echo ${dc9} | cut -c -8) +sdate9=$(echo ${dc9} | cut -c 3-8) +cycle9=$(echo ${dc9} | cut -c 9,10) # SET CURRENT CYCLE AS THE VERIFICATION GRIDDED FILE. vergrid="F-GDAS | ${PDY2}/0600" @@ -139,8 +139,7 @@ for area in $areas sdatenum=$sdate9 cyclenum=$cycle9 fi - # JY grid="$COMROOT/nawips/${envir}/ukmet.20${sdatenum}/ukmet_20${sdatenum}${cyclenum}${dgdattim}" - grid="${COMINukmet}.20${sdatenum}/ukmet_20${sdatenum}${cyclenum}${dgdattim}" + grid="${COMINukmet}.20${sdatenum}/gempak/ukmet_20${sdatenum}${cyclenum}${dgdattim}" # 500 MB HEIGHT METAFILE diff --git a/gempak/ush/gempak_gdas_f000_gif.sh b/gempak/ush/gempak_gdas_f000_gif.sh index cc018da782..cdf7659155 100755 --- a/gempak/ush/gempak_gdas_f000_gif.sh +++ b/gempak/ush/gempak_gdas_f000_gif.sh @@ -38,7 +38,7 @@ # $WEBTITLE < dates ${UTILgfs}/exec/webtitle < dates - export TITLE=`cat title.output` + export TITLE=$(cat title.output) echo "\n\n TITLE = $TITLE \n" # Define labels and file names for Northern Hemisphere analysis charts @@ -67,7 +67,7 @@ # Set grid date and input file name - gdattim=`echo ${PDY} | cut -c3-8`/${cyc}00F000 + gdattim=$(echo ${PDY} | cut -c3-8)/${cyc}00F000 gdfile=gem_grids${fhr}.gem diff --git a/gempak/ush/gempak_gfs_f00_gif.sh b/gempak/ush/gempak_gfs_f00_gif.sh index b2acd3df95..2a7cca5c9f 100755 --- a/gempak/ush/gempak_gfs_f00_gif.sh +++ b/gempak/ush/gempak_gfs_f00_gif.sh @@ -39,7 +39,7 @@ export FORT55="title.output" # $WEBTITLE < dates ${UTILgfs}/exec/webtitle < dates - export TITLE=`cat title.output` + export TITLE=$(cat title.output) echo "\n\n TITLE = $TITLE \n" # Define labels and file names for analysis charts @@ -95,7 +95,7 @@ # Set grid date and input file name - gdattim=`echo ${PDY} | cut -c3-8`/${cyc}00F000 + gdattim=$(echo ${PDY} | cut -c3-8)/${cyc}00F000 gdfile=gem_grids${fhr}.gem # Execute the GEMPAK program @@ -593,7 +593,7 @@ if [ $SENDCOM = YES ]; then export input=${COMOUT}/${hgttmp500dev} export HEADER=YES export OUTPATH=$DATA/gfs_500_hgt_tmp_nh_anl_${cyc}.tif - ${UTILgfs}/ush/make_tif.sh + ${USHgfs}/make_tif.sh fi msg=" GEMPAK_GIF ${fhr} hour completed normally" diff --git a/gempak/ush/gempak_gfs_f12_gif.sh b/gempak/ush/gempak_gfs_f12_gif.sh index 6df29e60c7..611252a2e2 100755 --- a/gempak/ush/gempak_gfs_f12_gif.sh +++ b/gempak/ush/gempak_gfs_f12_gif.sh @@ -40,7 +40,7 @@ # $WEBTITLE < dates ${UTILgfs}/exec/webtitle < dates - export TITLE=`cat title.output` + export TITLE=$(cat title.output) echo "\n\n TITLE = $TITLE \n" @@ -59,7 +59,7 @@ # Set grid date and input file name - gdattim=`echo ${PDY} | cut -c3-8`/${cyc}00F0${fhr} + gdattim=$(echo ${PDY} | cut -c3-8)/${cyc}00F0${fhr} gdfile=gem_grids${fhr}.gem # Execute the GEMPAK program diff --git a/gempak/ush/gempak_gfs_f24_gif.sh b/gempak/ush/gempak_gfs_f24_gif.sh index f83640b2b6..53670a29bd 100755 --- a/gempak/ush/gempak_gfs_f24_gif.sh +++ b/gempak/ush/gempak_gfs_f24_gif.sh @@ -48,7 +48,7 @@ # $WEBTITLE < dates ${UTILgfs}/exec/webtitle < dates - export TITLE=`cat title.output` + export TITLE=$(cat title.output) echo "\n\n TITLE = $TITLE \n" @@ -68,7 +68,7 @@ # Set grid date and input file name - gdattim=`echo ${PDY} | cut -c3-8`/${cyc}00F0${fhr} + gdattim=$(echo ${PDY} | cut -c3-8)/${cyc}00F0${fhr} gdfile=gem_grids${fhr}.gem diff --git a/gempak/ush/gempak_gfs_f36_gif.sh b/gempak/ush/gempak_gfs_f36_gif.sh index e5e5d5e30e..e1999090c0 100755 --- a/gempak/ush/gempak_gfs_f36_gif.sh +++ b/gempak/ush/gempak_gfs_f36_gif.sh @@ -47,7 +47,7 @@ # $WEBTITLE < dates ${UTILgfs}/exec/webtitle < dates - export TITLE=`cat title.output` + export TITLE=$(cat title.output) echo "\n\n TITLE = $TITLE \n" @@ -67,7 +67,7 @@ # Set grid date and input file name - gdattim=`echo ${PDY} | cut -c3-8`/${cyc}00F0${fhr} + gdattim=$(echo ${PDY} | cut -c3-8)/${cyc}00F0${fhr} gdfile=gem_grids${fhr}.gem diff --git a/gempak/ush/gempak_gfs_f48_gif.sh b/gempak/ush/gempak_gfs_f48_gif.sh index c82385b134..1e0ba532fd 100755 --- a/gempak/ush/gempak_gfs_f48_gif.sh +++ b/gempak/ush/gempak_gfs_f48_gif.sh @@ -47,7 +47,7 @@ # $WEBTITLE < dates ${UTILgfs}/exec/webtitle < dates - export TITLE=`cat title.output` + export TITLE=$(cat title.output) echo "\n\n TITLE = $TITLE \n" @@ -67,7 +67,7 @@ # Set grid date and input file name - gdattim=`echo ${PDY} | cut -c3-8`/${cyc}00F0${fhr} + gdattim=$(echo ${PDY} | cut -c3-8)/${cyc}00F0${fhr} gdfile=gem_grids${fhr}.gem diff --git a/gempak/ush/gfs_meta_ak.sh b/gempak/ush/gfs_meta_ak.sh index 75c34cd577..c258b7e83a 100755 --- a/gempak/ush/gfs_meta_ak.sh +++ b/gempak/ush/gfs_meta_ak.sh @@ -27,7 +27,7 @@ cd $DATA/ak cp $FIXgempak/datatype.tbl datatype.tbl device="nc | gfs.meta.ak" -PDY2=`echo $PDY | cut -c3-` +PDY2=$(echo $PDY | cut -c3-) fend=F216 diff --git a/gempak/ush/gfs_meta_bwx.sh b/gempak/ush/gfs_meta_bwx.sh index 9af5f7ec47..f5b4e1d944 100755 --- a/gempak/ush/gfs_meta_bwx.sh +++ b/gempak/ush/gfs_meta_bwx.sh @@ -31,7 +31,7 @@ MDL="GFS" metatype="bwx" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=`echo $PDY | cut -c3-` +PDY2=$(echo $PDY | cut -c3-) # #if [ ${cyc} -eq 00 ] ; then # fend=F126 diff --git a/gempak/ush/gfs_meta_comp.sh b/gempak/ush/gfs_meta_comp.sh index ff7f31378e..9bd27c5736 100755 --- a/gempak/ush/gfs_meta_comp.sh +++ b/gempak/ush/gfs_meta_comp.sh @@ -38,7 +38,7 @@ MDL=GFS metatype="comp" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=`echo $PDY | cut -c3-` +PDY2=$(echo $PDY | cut -c3-) # #XXW export MODEL=$COMROOT/nawips/prod # BV export MODEL=$COMROOT/nawips/${envir} @@ -73,16 +73,16 @@ export HPCNAM=${COMINnam}.$PDY/gempak # export HPCNGM=$COMROOT/nawips/prod/ngm.$PDY # # DEFINE YESTERDAY -PDYm1=`$NDATE -24 ${PDY}${cyc} | cut -c -8` -PDY2m1=`echo $PDYm1 | cut -c 3-` +PDYm1=$($NDATE -24 ${PDY}${cyc} | cut -c -8) +PDY2m1=$(echo $PDYm1 | cut -c 3-) # # DEFINE 2 DAYS AGO -PDYm2=`$NDATE -48 ${PDY}${cyc} | cut -c -8` -PDY2m2=`echo $PDYm2 | cut -c 3-` +PDYm2=$($NDATE -48 ${PDY}${cyc} | cut -c -8) +PDY2m2=$(echo $PDYm2 | cut -c 3-) # # DEFINE 3 DAYS AGO -PDYm3=`$NDATE -72 ${PDY}${cyc} | cut -c -8` -PDY2m3=`echo $PDYm3 | cut -c 3-` +PDYm3=$($NDATE -72 ${PDY}${cyc} | cut -c -8) +PDY2m3=$(echo $PDYm3 | cut -c 3-) # # THE 1200 UTC CYCLE # @@ -147,8 +147,8 @@ if [ ${cyc} -eq 12 ] ; then title4="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z PMSL" for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96 102 108 114 120 126 do - gfsoldfhr=F`expr ${gfsfhr} + ${add}` - gfsfhr2=`echo ${gfsfhr}` + gfsoldfhr=F$(expr ${gfsfhr} + ${add}) + gfsfhr2=$(echo ${gfsfhr}) gfsfhr=F${gfsfhr} if [ ${gfsfhr2} -gt ${testgfsfhr} ] ; then grid="F-${MDL} | ${PDY2}/${cyc}00" @@ -157,10 +157,10 @@ if [ ${cyc} -eq 12 ] ; then gdpfun1="sm5s(hght)" gdpfun2="sm5s(pmsl)" line="5/1/3/2/2" - hilo1=`echo ${hilo3}` - hilo2=`echo ${hilo4}` - title1=`echo ${title3}` - title2=`echo ${title4}` + hilo1=$(echo ${hilo3}) + hilo2=$(echo ${hilo4}) + title1=$(echo ${title3}) + title2=$(echo ${title4}) fi export pgm=gdplot2_nc;. prep_step; startmsg @@ -217,13 +217,12 @@ export err=$?;err_chk done # COMPARE THE 1200 UTC GFS MODEL TO THE 0000 UTC UKMET MODEL grid="F-${MDL} | ${PDY2}/${cyc}00" - # JY export HPCUKMET=$COMROOT/nawips/prod/ukmet.${PDY} - export HPCUKMET=${COMINukmet}.${PDY} + export HPCUKMET=${COMINukmet}.${PDY}/gempak grid2="F-UKMETHPC | ${PDY2}/0000" # for gfsfhr in 00 12 24 36 48 60 84 108 for gfsfhr in 00 12 24 84 108 do - ukmetfhr=F`expr ${gfsfhr} + 12` + ukmetfhr=F$(expr ${gfsfhr} + 12) gfsfhr=F${gfsfhr} export pgm=gdplot2_nc;. prep_step; startmsg @@ -303,7 +302,7 @@ export err=$?;err_chk grid2=${COMINecmwf}.${PDYm1}/gempak/ecmwf_glob_${PDYm1}12 for gfsfhr in 00 24 48 72 96 120 do - ecmwffhr=F`expr ${gfsfhr} + 24` + ecmwffhr=F$(expr ${gfsfhr} + 24) gfsfhr=F${gfsfhr} export pgm=gdplot2_nc;. prep_step; startmsg @@ -523,8 +522,8 @@ if [ ${cyc} -eq 00 ] ; then title4="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z PMSL" for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96 102 108 114 120 126 do - gfsoldfhr=F`expr ${gfsfhr} + ${add}` - gfsfhr2=`echo ${gfsfhr}` + gfsoldfhr=F$(expr ${gfsfhr} + ${add}) + gfsfhr2=$(echo ${gfsfhr}) gfsfhr=F${gfsfhr} if [ ${gfsfhr2} -gt ${testgfsfhr} ] ; then grid="F-${MDL} | ${PDY2}/${cyc}00" @@ -533,10 +532,10 @@ if [ ${cyc} -eq 00 ] ; then gdpfun1="sm5s(hght)" gdpfun2="sm5s(pmsl)" line="5/1/3/2/2" - hilo1=`echo ${hilo3}` - hilo2=`echo ${hilo4}` - title1=`echo ${title3}` - title2=`echo ${title4}` + hilo1=$(echo ${hilo3}) + hilo2=$(echo ${hilo4}) + title1=$(echo ${title3}) + title2=$(echo ${title4}) fi export pgm=gdplot2_nc;. prep_step; startmsg @@ -593,13 +592,12 @@ export err=$?;err_chk done # COMPARE THE 0000 UTC GFS MODEL TO THE 1200 UTC UKMET FROM YESTERDAY grid="F-${MDL} | ${PDY2}/${cyc}00" - #XXW export HPCUKMET=${MODEL}/ukmet.${PDYm1} - export HPCUKMET=${COMINukmet}.${PDYm1} + export HPCUKMET=${COMINukmet}.${PDYm1}/gempak grid2="F-UKMETHPC | ${PDY2m1}/1200" # for gfsfhr in 00 12 24 36 48 60 84 108 for gfsfhr in 00 12 24 84 108 do - ukmetfhr=F`expr ${gfsfhr} + 12` + ukmetfhr=F$(expr ${gfsfhr} + 12) gfsfhr=F${gfsfhr} export pgm=gdplot2_nc;. prep_step; startmsg @@ -680,7 +678,7 @@ export err=$?;err_chk grid2="${COMINecmwf}.${PDYm1}/gempak/ecmwf_glob_${PDYm1}12" for gfsfhr in 12 36 60 84 108 do - ecmwffhr=F`expr ${gfsfhr} + 12` + ecmwffhr=F$(expr ${gfsfhr} + 12) gfsfhr=F${gfsfhr} export pgm=gdplot2_nc;. prep_step; startmsg @@ -894,8 +892,8 @@ if [ ${cyc} -eq 18 ] ; then title4="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z PMSL" for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96 102 108 114 120 126 do - gfsoldfhr=F`expr ${gfsfhr} + ${add}` - gfsfhr2=`echo ${gfsfhr}` + gfsoldfhr=F$(expr ${gfsfhr} + ${add}) + gfsfhr2=$(echo ${gfsfhr}) gfsfhr="F${gfsfhr}" if [ ${gfsfhr2} -gt ${testgfsfhr} ] ; then grid="F-${MDL} | ${PDY2}/${cyc}00" @@ -904,10 +902,10 @@ if [ ${cyc} -eq 18 ] ; then gdpfun1="sm5s(hght)" gdpfun2="sm5s(pmsl)" line="5/1/3/2/2" - hilo1=`echo ${hilo3}` - hilo2=`echo ${hilo4}` - title1=`echo ${title3}` - title2=`echo ${title4}` + hilo1=$(echo ${hilo3}) + hilo2=$(echo ${hilo4}) + title1=$(echo ${title3}) + title2=$(echo ${title4}) fi export pgm=gdplot2_nc;. prep_step; startmsg $GEMEXE/gdplot2_nc << EOF @@ -1024,8 +1022,8 @@ if [ ${cyc} -eq 06 ] ; then title4="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z VS ${desc} ${cyc2}Z PMSL" for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96 102 108 114 120 126 do - gfsoldfhr=F`expr ${gfsfhr} + ${add}` - gfsfhr2=`echo ${gfsfhr}` + gfsoldfhr=F$(expr ${gfsfhr} + ${add}) + gfsfhr2=$(echo ${gfsfhr}) gfsfhr="F${gfsfhr}" if [ ${gfsfhr2} -gt ${testgfsfhr} ] ; then grid="F-${MDL} | ${PDY2}/${cyc}00" @@ -1034,10 +1032,10 @@ if [ ${cyc} -eq 06 ] ; then gdpfun1="sm5s(hght)" gdpfun2="sm5s(pmsl)" line="5/1/3/2/2" - hilo1=`echo ${hilo3}` - hilo2=`echo ${hilo4}` - title1=`echo ${title3}` - title2=`echo ${title4}` + hilo1=$(echo ${hilo3}) + hilo2=$(echo ${hilo4}) + title1=$(echo ${title3}) + title2=$(echo ${title4}) fi export pgm=gdplot2_nc;. prep_step; startmsg $GEMEXE/gdplot2_nc << EOF diff --git a/gempak/ush/gfs_meta_crb.sh b/gempak/ush/gfs_meta_crb.sh index 25bddbd4b0..82fa7795e8 100755 --- a/gempak/ush/gfs_meta_crb.sh +++ b/gempak/ush/gfs_meta_crb.sh @@ -24,11 +24,11 @@ MDL=GFS metatype="crb" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=`echo ${PDY} | cut -c3-` +PDY2=$(echo ${PDY} | cut -c3-) # # DEFINE YESTERDAY -PDYm1=`$NDATE -24 ${PDY}${cyc} | cut -c -8` -PDY2m1=`echo ${PDYm1} | cut -c 3-` +PDYm1=$($NDATE -24 ${PDY}${cyc} | cut -c -8) +PDY2m1=$(echo ${PDYm1} | cut -c 3-) # #if [ ${cyc} -eq 00 ] ; then # fend=F126 @@ -260,17 +260,14 @@ export err=$?;err_chk if [ ${cyc} -eq 00 ] ; then - # BV export MODEL=/com/nawips/prod - # JY export HPCECMWF=${MODEL}/ecmwf.${PDY} - # JY export HPCUKMET=${MODEL}/ukmet.${PDYm1} export HPCECMWF=${COMINecmwf}.${PDY}/gempak - export HPCUKMET=${COMINukmet}.${PDYm1} + export HPCUKMET=${COMINukmet}.${PDYm1}/gempak grid1="F-${MDL} | ${PDY2}/${cyc}00" grid2="${COMINecmwf}.${PDYm1}/gempak/ecmwf_glob_${PDYm1}12" grid3="F-UKMETHPC | ${PDY2m1}/1200" for gfsfhr in 12 36 60 84 108 do - ecmwffhr="F`expr ${gfsfhr} + 12`" + ecmwffhr="F$(expr ${gfsfhr} + 12)" gfsfhr="F${gfsfhr}" export pgm=gdplot2_nc;. prep_step; startmsg @@ -335,7 +332,7 @@ export err=$?;err_chk done for gfsfhr in 00 12 24 36 48 60 84 108 132 do - ukmetfhr="F`expr ${gfsfhr} + 12`" + ukmetfhr="F$(expr ${gfsfhr} + 12)" gfsfhr=F${gfsfhr} export pgm=gdplot2_nc;. prep_step; startmsg diff --git a/gempak/ush/gfs_meta_hi.sh b/gempak/ush/gfs_meta_hi.sh index fd2244744e..2b47474e12 100755 --- a/gempak/ush/gfs_meta_hi.sh +++ b/gempak/ush/gfs_meta_hi.sh @@ -23,7 +23,7 @@ cp $FIXgempak/datatype.tbl datatype.tbl device="nc | mrfhi.meta" -PDY2=`echo $PDY | cut -c3-` +PDY2=$(echo $PDY | cut -c3-) if [ "$envir" = "prod" ] ; then export m_title="GFS" diff --git a/gempak/ush/gfs_meta_hur.sh b/gempak/ush/gfs_meta_hur.sh index 011f9c9200..aed25d6d78 100755 --- a/gempak/ush/gfs_meta_hur.sh +++ b/gempak/ush/gfs_meta_hur.sh @@ -32,11 +32,11 @@ MDL=GFS metatype="hur" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=`echo ${PDY} | cut -c3-` +PDY2=$(echo ${PDY} | cut -c3-) # # DEFINE YESTERDAY -PDYm1=`$NDATE -24 ${PDY}${cyc} | cut -c -8` -PDY2m1=`echo ${PDYm1} | cut -c 3-` +PDYm1=$($NDATE -24 ${PDY}${cyc} | cut -c -8) +PDY2m1=$(echo ${PDYm1} | cut -c 3-) # if [ ${cyc} -eq 00 ] ; then gdat="F000-F126-06" @@ -338,13 +338,13 @@ if [ ${cyc} -eq 00 ] ; then # JY export HPCECMWF=${MODEL}/ecmwf.${PDY} # JY export HPCUKMET=${MODEL}/ukmet.${PDY} export HPCECMWF=${COMINecmwf}.${PDY}/gempak - export HPCUKMET=${COMINukmet}.${PDY} + export HPCUKMET=${COMINukmet}.${PDY}/gempak grid1="F-${MDL} | ${PDY2}/${cyc}00" grid2="${COMINecmwf}.${PDYm1}/gempak/ecmwf_glob_${PDYm1}12" grid3="F-UKMETHPC | ${PDY2}/${cyc}00" for gfsfhr in 12 36 60 84 108 do - ecmwffhr="F`expr ${gfsfhr} + 12`" + ecmwffhr="F$(expr ${gfsfhr} + 12)" gfsfhr="F${gfsfhr}" export pgm=gdplot2_nc;. prep_step; startmsg diff --git a/gempak/ush/gfs_meta_mar_atl.sh b/gempak/ush/gfs_meta_mar_atl.sh index 7cc1e706cf..c8db3e59d4 100755 --- a/gempak/ush/gfs_meta_mar_atl.sh +++ b/gempak/ush/gfs_meta_mar_atl.sh @@ -19,7 +19,7 @@ MDL="GFS" metatype="mar_atl" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=`echo $PDY | cut -c3-` +PDY2=$(echo $PDY | cut -c3-) export pgm=gdplot2_nc;. prep_step; startmsg diff --git a/gempak/ush/gfs_meta_mar_comp.sh b/gempak/ush/gfs_meta_mar_comp.sh index c475542131..a55fa3c642 100755 --- a/gempak/ush/gfs_meta_mar_comp.sh +++ b/gempak/ush/gfs_meta_mar_comp.sh @@ -27,7 +27,7 @@ MDL="GFS" metatype="mar_comp" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=`echo $PDY | cut -c3-` +PDY2=$(echo $PDY | cut -c3-) # # BV export MODEL=/com/nawips/prod #XXW export HPCGFS=${MODEL}/${mdl}.$PDY @@ -60,16 +60,16 @@ export HPCNAM=${COMINnam}.$PDY/gempak # export HPCNGM=${MODEL}/ngm.$PDY # # DEFINE YESTERDAY -PDYm1=`$NDATE -24 ${PDY}${cyc} | cut -c -8` -PDY2m1=`echo $PDYm1 | cut -c 3-` +PDYm1=$($NDATE -24 ${PDY}${cyc} | cut -c -8) +PDY2m1=$(echo $PDYm1 | cut -c 3-) # # DEFINE 2 DAYS AGO -PDYm2=`$NDATE -48 ${PDY}${cyc} | cut -c -8` -PDY2m2=`echo $PDYm2 | cut -c 3-` +PDYm2=$($NDATE -48 ${PDY}${cyc} | cut -c -8) +PDY2m2=$(echo $PDYm2 | cut -c 3-) # # DEFINE 3 DAYS AGO -PDYm3=`$NDATE -72 ${PDY}${cyc} | cut -c -8` -PDY2m3=`echo $PDYm3 | cut -c 3-` +PDYm3=$($NDATE -72 ${PDY}${cyc} | cut -c -8) +PDY2m3=$(echo $PDYm3 | cut -c 3-) # # THE 1200 UTC CYCLE # @@ -112,8 +112,8 @@ if [ ${cyc} -eq 12 ] ; then title4="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z PMSL" for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96 102 108 114 120 126 do - gfsoldfhr=F`expr ${gfsfhr} + ${add}` - gfsfhr2=`echo ${gfsfhr}` + gfsoldfhr=F$(expr ${gfsfhr} + ${add}) + gfsfhr2=$(echo ${gfsfhr}) gfsfhr=F${gfsfhr} if [ ${gfsfhr2} -gt ${testgfsfhr} ] ; then grid="F-${MDL} | ${PDY2}/${cyc}00" @@ -122,10 +122,10 @@ if [ ${cyc} -eq 12 ] ; then gdpfun1="sm5s(hght)" gdpfun2="sm5s(pmsl)" line="5/1/3/2/2" - hilo1=`echo ${hilo3}` - hilo2=`echo ${hilo4}` - title1=`echo ${title3}` - title2=`echo ${title4}` + hilo1=$(echo ${hilo3}) + hilo2=$(echo ${hilo4}) + title1=$(echo ${title3}) + title2=$(echo ${title4}) fi export pgm=gdplot2_nc;. prep_step; startmsg @@ -181,12 +181,12 @@ export err=$?;err_chk done # COMPARE THE 1200 UTC GFS MODEL TO THE 0000 UTC UKMET MODEL grid="F-${MDL} | ${PDY2}/${cyc}00" - export HPCUKMET=${COMINukmet}.${PDY} + export HPCUKMET=${COMINukmet}.${PDY}/gempak grid2="F-UKMETHPC | ${PDY2}/0000" # for gfsfhr in 00 12 24 36 48 60 84 108 for gfsfhr in 00 12 24 84 108 do - ukmetfhr=F`expr ${gfsfhr} + 12` + ukmetfhr=F$(expr ${gfsfhr} + 12) gfsfhr=F${gfsfhr} export pgm=gdplot2_nc;. prep_step; startmsg @@ -264,7 +264,7 @@ export err=$?;err_chk grid2=${COMINecmwf}.${PDYm1}/gempak/ecmwf_glob_${PDYm1}12 for gfsfhr in 00 24 48 72 96 120 do - ecmwffhr=F`expr ${gfsfhr} + 24` + ecmwffhr=F$(expr ${gfsfhr} + 24) gfsfhr=F${gfsfhr} export pgm=gdplot2_nc;. prep_step; startmsg @@ -465,8 +465,8 @@ if [ ${cyc} = "00" ] ; then title4="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z PMSL" for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 90 96 102 108 114 120 126 do - gfsoldfhr=F`expr ${gfsfhr} + ${add}` - gfsfhr2=`echo ${gfsfhr}` + gfsoldfhr=F$(expr ${gfsfhr} + ${add}) + gfsfhr2=$(echo ${gfsfhr}) gfsfhr=F${gfsfhr} if [ ${gfsfhr2} -gt ${testgfsfhr} ] ; then grid="F-${MDL} | ${PDY2}/${cyc}00" @@ -475,10 +475,10 @@ if [ ${cyc} = "00" ] ; then gdpfun1="sm5s(hght)" gdpfun2="sm5s(pmsl)" line="5/1/3/2/2" - hilo1=`echo ${hilo3}` - hilo2=`echo ${hilo4}` - title1=`echo ${title3}` - title2=`echo ${title4}` + hilo1=$(echo ${hilo3}) + hilo2=$(echo ${hilo4}) + title1=$(echo ${title3}) + title2=$(echo ${title4}) fi export pgm=gdplot2_nc;. prep_step; startmsg $GEMEXE/gdplot2_nc << EOF @@ -534,12 +534,12 @@ export err=$?;err_chk done # COMPARE THE 0000 UTC GFS MODEL TO THE 1200 UTC UKMET FROM YESTERDAY grid="F-${MDL} | ${PDY2}/${cyc}00" - export HPCUKMET=${COMINukmet}.${PDYm1} + export HPCUKMET=${COMINukmet}.${PDYm1}/gempak grid2="F-UKMETHPC | ${PDY2m1}/1200" # for gfsfhr in 00 12 24 36 48 60 84 108 for gfsfhr in 00 12 24 84 108 do - ukmetfhr=F`expr ${gfsfhr} + 12` + ukmetfhr=F$(expr ${gfsfhr} + 12) gfsfhr=F${gfsfhr} export pgm=gdplot2_nc;. prep_step; startmsg $GEMEXE/gdplot2_nc << EOF @@ -617,7 +617,7 @@ export err=$?;err_chk grid2="${COMINecmwf}.${PDYm1}/gempak/ecmwf_glob_${PDYm1}12" for gfsfhr in 12 36 60 84 108 do - ecmwffhr=F`expr ${gfsfhr} + 12` + ecmwffhr=F$(expr ${gfsfhr} + 12) gfsfhr=F${gfsfhr} $GEMEXE/gdplot2_nc << EOF @@ -813,8 +813,8 @@ if [ ${cyc} -eq "18" ] ; then title4="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z PMSL" for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 do - gfsoldfhr=F`expr ${gfsfhr} + ${add}` - gfsfhr2=`echo ${gfsfhr}` + gfsoldfhr=F$(expr ${gfsfhr} + ${add}) + gfsfhr2=$(echo ${gfsfhr}) gfsfhr="F${gfsfhr}" if [ ${gfsfhr2} -gt ${testgfsfhr} ] ; then grid="F-${MDL} | ${PDY2}/${cyc}00" @@ -823,10 +823,10 @@ if [ ${cyc} -eq "18" ] ; then gdpfun1="sm5s(hght)" gdpfun2="sm5s(pmsl)" line="5/1/3/2/2" - hilo1=`echo ${hilo3}` - hilo2=`echo ${hilo4}` - title1=`echo ${title3}` - title2=`echo ${title4}` + hilo1=$(echo ${hilo3}) + hilo2=$(echo ${hilo4}) + title1=$(echo ${title3}) + title2=$(echo ${title4}) fi export pgm=gdplot2_nc;. prep_step; startmsg @@ -925,8 +925,8 @@ if [ ${cyc} -eq "06" ] ; then title4="5/-2/~ ? ^ ${MDL} PMSL (${cyc}Z YELLOW)|^${gareas} ${cyc}Z vs ${cyc2}Z PMSL" for gfsfhr in 00 06 12 18 24 30 36 42 48 54 60 66 72 78 84 do - gfsoldfhr=F`expr ${gfsfhr} + ${add}` - gfsfhr2=`echo ${gfsfhr}` + gfsoldfhr=F$(expr ${gfsfhr} + ${add}) + gfsfhr2=$(echo ${gfsfhr}) gfsfhr="F${gfsfhr}" if [ ${gfsfhr2} -gt ${testgfsfhr} ] ; then grid="F-${MDL} | ${PDY2}/${cyc}00" @@ -935,10 +935,10 @@ if [ ${cyc} -eq "06" ] ; then gdpfun1="sm5s(hght)" gdpfun2="sm5s(pmsl)" line="5/1/3/2/2" - hilo1=`echo ${hilo3}` - hilo2=`echo ${hilo4}` - title1=`echo ${title3}` - title2=`echo ${title4}` + hilo1=$(echo ${hilo3}) + hilo2=$(echo ${hilo4}) + title1=$(echo ${title3}) + title2=$(echo ${title4}) fi export pgm=gdplot2_nc;. prep_step; startmsg diff --git a/gempak/ush/gfs_meta_mar_pac.sh b/gempak/ush/gfs_meta_mar_pac.sh index d65fc9f2d4..b44f60a2f7 100755 --- a/gempak/ush/gfs_meta_mar_pac.sh +++ b/gempak/ush/gfs_meta_mar_pac.sh @@ -19,7 +19,7 @@ MDL="GFS" metatype="mar_pac" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=`echo $PDY | cut -c3-` +PDY2=$(echo $PDY | cut -c3-) export pgm=gdplot2_nc;. prep_step; startmsg diff --git a/gempak/ush/gfs_meta_mar_ql.sh b/gempak/ush/gfs_meta_mar_ql.sh index e5d1c9a1e3..f1abf3d395 100755 --- a/gempak/ush/gfs_meta_mar_ql.sh +++ b/gempak/ush/gfs_meta_mar_ql.sh @@ -19,7 +19,7 @@ MDL="GFS" metatype="mar_ql" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=`echo $PDY | cut -c3-` +PDY2=$(echo $PDY | cut -c3-) # fend=180 export pgm=gdplot2_nc;. prep_step; startmsg diff --git a/gempak/ush/gfs_meta_mar_skewt.sh b/gempak/ush/gfs_meta_mar_skewt.sh index 3348223a92..040e09e932 100755 --- a/gempak/ush/gfs_meta_mar_skewt.sh +++ b/gempak/ush/gfs_meta_mar_skewt.sh @@ -19,7 +19,7 @@ MDL="GFS" metatype="mar_skewt" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=`echo $PDY | cut -c3-` +PDY2=$(echo $PDY | cut -c3-) for fhr in 000 006 012 018 024 030 036 042 048 054 060 066 072 do diff --git a/gempak/ush/gfs_meta_mar_ver.sh b/gempak/ush/gfs_meta_mar_ver.sh index ba2e646981..63ccba00ed 100755 --- a/gempak/ush/gfs_meta_mar_ver.sh +++ b/gempak/ush/gfs_meta_mar_ver.sh @@ -19,7 +19,7 @@ MDL="GFS" metatype="mar_ver" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=`echo $PDY | cut -c3-` +PDY2=$(echo $PDY | cut -c3-) export pgm=gdplot2_nc;. prep_step; startmsg diff --git a/gempak/ush/gfs_meta_nhsh.sh b/gempak/ush/gfs_meta_nhsh.sh index daa567cce4..3e0146270e 100755 --- a/gempak/ush/gfs_meta_nhsh.sh +++ b/gempak/ush/gfs_meta_nhsh.sh @@ -21,7 +21,7 @@ mkdir -p -m 775 $DATA/mrfnhsh cd $DATA/mrfnhsh cp $FIXgempak/datatype.tbl datatype.tbl -PDY2=`echo $PDY | cut -c3-` +PDY2=$(echo $PDY | cut -c3-) if [ "$envir" = "para" ] ; then export m_title="GFSP" diff --git a/gempak/ush/gfs_meta_opc_na_ver b/gempak/ush/gfs_meta_opc_na_ver index ef1ae56d60..8d5f394b3d 100755 --- a/gempak/ush/gfs_meta_opc_na_ver +++ b/gempak/ush/gfs_meta_opc_na_ver @@ -21,113 +21,113 @@ MDL="GFS" metatype="ver" metaname="gfsver_mpc_na_${cyc}.meta" device="nc | ${metaname}" -PDY2=`echo $PDY | cut -c3-` +PDY2=$(echo $PDY | cut -c3-) # # DEFINE 1 CYCLE AGO -dc1=`$NDATE -06 ${PDY}${cyc} | cut -c -10` -date1=`echo ${dc1} | cut -c -8` -sdate1=`echo ${dc1} | cut -c 3-8` -cycle1=`echo ${dc1} | cut -c 9,10` +dc1=$($NDATE -06 ${PDY}${cyc} | cut -c -10) +date1=$(echo ${dc1} | cut -c -8) +sdate1=$(echo ${dc1} | cut -c 3-8) +cycle1=$(echo ${dc1} | cut -c 9,10) # DEFINE 2 CYCLES AGO -dc2=`$NDATE -12 ${PDY}${cyc} | cut -c -10` -date2=`echo ${dc2} | cut -c -8` -sdate2=`echo ${dc2} | cut -c 3-8` -cycle2=`echo ${dc2} | cut -c 9,10` +dc2=$($NDATE -12 ${PDY}${cyc} | cut -c -10) +date2=$(echo ${dc2} | cut -c -8) +sdate2=$(echo ${dc2} | cut -c 3-8) +cycle2=$(echo ${dc2} | cut -c 9,10) # DEFINE 3 CYCLES AGO -dc3=`$NDATE -18 ${PDY}${cyc} | cut -c -10` -date3=`echo ${dc3} | cut -c -8` -sdate3=`echo ${dc3} | cut -c 3-8` -cycle3=`echo ${dc3} | cut -c 9,10` +dc3=$($NDATE -18 ${PDY}${cyc} | cut -c -10) +date3=$(echo ${dc3} | cut -c -8) +sdate3=$(echo ${dc3} | cut -c 3-8) +cycle3=$(echo ${dc3} | cut -c 9,10) # DEFINE 4 CYCLES AGO -dc4=`$NDATE -24 ${PDY}${cyc} | cut -c -10` -date4=`echo ${dc4} | cut -c -8` -sdate4=`echo ${dc4} | cut -c 3-8` -cycle4=`echo ${dc4} | cut -c 9,10` +dc4=$($NDATE -24 ${PDY}${cyc} | cut -c -10) +date4=$(echo ${dc4} | cut -c -8) +sdate4=$(echo ${dc4} | cut -c 3-8) +cycle4=$(echo ${dc4} | cut -c 9,10) # DEFINE 5 CYCLES AGO -dc5=`$NDATE -30 ${PDY}${cyc} | cut -c -10` -date5=`echo ${dc5} | cut -c -8` -sdate5=`echo ${dc5} | cut -c 3-8` -cycle5=`echo ${dc5} | cut -c 9,10` +dc5=$($NDATE -30 ${PDY}${cyc} | cut -c -10) +date5=$(echo ${dc5} | cut -c -8) +sdate5=$(echo ${dc5} | cut -c 3-8) +cycle5=$(echo ${dc5} | cut -c 9,10) # DEFINE 6 CYCLES AGO -dc6=`$NDATE -36 ${PDY}${cyc} | cut -c -10` -date6=`echo ${dc6} | cut -c -8` -sdate6=`echo ${dc6} | cut -c 3-8` -cycle6=`echo ${dc6} | cut -c 9,10` +dc6=$($NDATE -36 ${PDY}${cyc} | cut -c -10) +date6=$(echo ${dc6} | cut -c -8) +sdate6=$(echo ${dc6} | cut -c 3-8) +cycle6=$(echo ${dc6} | cut -c 9,10) # DEFINE 7 CYCLES AGO -dc7=`$NDATE -42 ${PDY}${cyc} | cut -c -10` -date7=`echo ${dc7} | cut -c -8` -sdate7=`echo ${dc7} | cut -c 3-8` -cycle7=`echo ${dc7} | cut -c 9,10` +dc7=$($NDATE -42 ${PDY}${cyc} | cut -c -10) +date7=$(echo ${dc7} | cut -c -8) +sdate7=$(echo ${dc7} | cut -c 3-8) +cycle7=$(echo ${dc7} | cut -c 9,10) # DEFINE 8 CYCLES AGO -dc8=`$NDATE -48 ${PDY}${cyc} | cut -c -10` -date8=`echo ${dc8} | cut -c -8` -sdate8=`echo ${dc8} | cut -c 3-8` -cycle8=`echo ${dc8} | cut -c 9,10` +dc8=$($NDATE -48 ${PDY}${cyc} | cut -c -10) +date8=$(echo ${dc8} | cut -c -8) +sdate8=$(echo ${dc8} | cut -c 3-8) +cycle8=$(echo ${dc8} | cut -c 9,10) # DEFINE 9 CYCLES AGO -dc9=`$NDATE -54 ${PDY}${cyc} | cut -c -10` -date9=`echo ${dc9} | cut -c -8` -sdate9=`echo ${dc9} | cut -c 3-8` -cycle9=`echo ${dc9} | cut -c 9,10` +dc9=$($NDATE -54 ${PDY}${cyc} | cut -c -10) +date9=$(echo ${dc9} | cut -c -8) +sdate9=$(echo ${dc9} | cut -c 3-8) +cycle9=$(echo ${dc9} | cut -c 9,10) # DEFINE 10 CYCLES AGO -dc10=`$NDATE -60 ${PDY}${cyc} | cut -c -10` -date10=`echo ${dc10} | cut -c -8` -sdate10=`echo ${dc10} | cut -c 3-8` -cycle10=`echo ${dc10} | cut -c 9,10` +dc10=$($NDATE -60 ${PDY}${cyc} | cut -c -10) +date10=$(echo ${dc10} | cut -c -8) +sdate10=$(echo ${dc10} | cut -c 3-8) +cycle10=$(echo ${dc10} | cut -c 9,10) # DEFINE 11 CYCLES AGO -dc11=`$NDATE -66 ${PDY}${cyc} | cut -c -10` -date11=`echo ${dc11} | cut -c -8` -sdate11=`echo ${dc11} | cut -c 3-8` -cycle11=`echo ${dc11} | cut -c 9,10` +dc11=$($NDATE -66 ${PDY}${cyc} | cut -c -10) +date11=$(echo ${dc11} | cut -c -8) +sdate11=$(echo ${dc11} | cut -c 3-8) +cycle11=$(echo ${dc11} | cut -c 9,10) # DEFINE 12 CYCLES AGO -dc12=`$NDATE -72 ${PDY}${cyc} | cut -c -10` -date12=`echo ${dc12} | cut -c -8` -sdate12=`echo ${dc12} | cut -c 3-8` -cycle12=`echo ${dc12} | cut -c 9,10` +dc12=$($NDATE -72 ${PDY}${cyc} | cut -c -10) +date12=$(echo ${dc12} | cut -c -8) +sdate12=$(echo ${dc12} | cut -c 3-8) +cycle12=$(echo ${dc12} | cut -c 9,10) # DEFINE 13 CYCLES AGO -dc13=`$NDATE -78 ${PDY}${cyc} | cut -c -10` -date13=`echo ${dc13} | cut -c -8` -sdate13=`echo ${dc13} | cut -c 3-8` -cycle13=`echo ${dc13} | cut -c 9,10` +dc13=$($NDATE -78 ${PDY}${cyc} | cut -c -10) +date13=$(echo ${dc13} | cut -c -8) +sdate13=$(echo ${dc13} | cut -c 3-8) +cycle13=$(echo ${dc13} | cut -c 9,10) # DEFINE 14 CYCLES AGO -dc14=`$NDATE -84 ${PDY}${cyc} | cut -c -10` -date14=`echo ${dc14} | cut -c -8` -sdate14=`echo ${dc14} | cut -c 3-8` -cycle14=`echo ${dc14} | cut -c 9,10` +dc14=$($NDATE -84 ${PDY}${cyc} | cut -c -10) +date14=$(echo ${dc14} | cut -c -8) +sdate14=$(echo ${dc14} | cut -c 3-8) +cycle14=$(echo ${dc14} | cut -c 9,10) # DEFINE 15 CYCLES AGO -dc15=`$NDATE -90 ${PDY}${cyc} | cut -c -10` -date15=`echo ${dc15} | cut -c -8` -sdate15=`echo ${dc15} | cut -c 3-8` -cycle15=`echo ${dc15} | cut -c 9,10` +dc15=$($NDATE -90 ${PDY}${cyc} | cut -c -10) +date15=$(echo ${dc15} | cut -c -8) +sdate15=$(echo ${dc15} | cut -c 3-8) +cycle15=$(echo ${dc15} | cut -c 9,10) # DEFINE 16 CYCLES AGO -dc16=`$NDATE -96 ${PDY}${cyc} | cut -c -10` -date16=`echo ${dc16} | cut -c -8` -sdate16=`echo ${dc16} | cut -c 3-8` -cycle16=`echo ${dc16} | cut -c 9,10` +dc16=$($NDATE -96 ${PDY}${cyc} | cut -c -10) +date16=$(echo ${dc16} | cut -c -8) +sdate16=$(echo ${dc16} | cut -c 3-8) +cycle16=$(echo ${dc16} | cut -c 9,10) # DEFINE 17 CYCLES AGO -dc17=`$NDATE -102 ${PDY}${cyc} | cut -c -10` -date17=`echo ${dc17} | cut -c -8` -sdate17=`echo ${dc17} | cut -c 3-8` -cycle17=`echo ${dc17} | cut -c 9,10` +dc17=$($NDATE -102 ${PDY}${cyc} | cut -c -10) +date17=$(echo ${dc17} | cut -c -8) +sdate17=$(echo ${dc17} | cut -c 3-8) +cycle17=$(echo ${dc17} | cut -c 9,10) # DEFINE 18 CYCLES AGO -dc18=`$NDATE -108 ${PDY}${cyc} | cut -c -10` -date18=`echo ${dc18} | cut -c -8` -sdate18=`echo ${dc18} | cut -c 3-8` -cycle18=`echo ${dc18} | cut -c 9,10` +dc18=$($NDATE -108 ${PDY}${cyc} | cut -c -10) +date18=$(echo ${dc18} | cut -c -8) +sdate18=$(echo ${dc18} | cut -c 3-8) +cycle18=$(echo ${dc18} | cut -c 9,10) # DEFINE 19 CYCLES AGO -dc19=`$NDATE -114 ${PDY}${cyc} | cut -c -10` -date19=`echo ${dc19} | cut -c -8` -sdate19=`echo ${dc19} | cut -c 3-8` -cycle19=`echo ${dc19} | cut -c 9,10` +dc19=$($NDATE -114 ${PDY}${cyc} | cut -c -10) +date19=$(echo ${dc19} | cut -c -8) +sdate19=$(echo ${dc19} | cut -c 3-8) +cycle19=$(echo ${dc19} | cut -c 9,10) # DEFINE 20 CYCLES AGO -dc20=`$NDATE -120 ${PDY}${cyc} | cut -c -10` -date20=`echo ${dc20} | cut -c -8` -sdate20=`echo ${dc20} | cut -c 3-8` -cycle20=`echo ${dc20} | cut -c 9,10` +dc20=$($NDATE -120 ${PDY}${cyc} | cut -c -10) +date20=$(echo ${dc20} | cut -c -8) +sdate20=$(echo ${dc20} | cut -c 3-8) +cycle20=$(echo ${dc20} | cut -c 9,10) # DEFINE 21 CYCLES AGO -dc21=`$NDATE -126 ${PDY}${cyc} | cut -c -10` -date21=`echo ${dc21} | cut -c -8` -sdate21=`echo ${dc21} | cut -c 3-8` -cycle21=`echo ${dc21} | cut -c 9,10` +dc21=$($NDATE -126 ${PDY}${cyc} | cut -c -10) +date21=$(echo ${dc21} | cut -c -8) +sdate21=$(echo ${dc21} | cut -c 3-8) +cycle21=$(echo ${dc21} | cut -c 9,10) # SET CURRENT CYCLE AS THE VERIFICATION GRIDDED FILE. vergrid="F-${MDL} | ${PDY2}/${cyc}00" @@ -146,7 +146,7 @@ fi MDL2="GFSHPC" for verday in ${verdays} do - cominday=`echo ${verday} | cut -c -8` + cominday=$(echo ${verday} | cut -c -8) #XXW export HPCGFS=$COMROOT/nawips/prod/${mdl}.${cominday} # BV export HPCGFS=$COMROOT/nawips/${envir}/${mdl}.${cominday} export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cyc}/${COMPONENT}/gempak diff --git a/gempak/ush/gfs_meta_opc_np_ver b/gempak/ush/gfs_meta_opc_np_ver index dfb320ea82..5cb9fba3c9 100755 --- a/gempak/ush/gfs_meta_opc_np_ver +++ b/gempak/ush/gfs_meta_opc_np_ver @@ -21,114 +21,114 @@ MDL="GFS" metatype="ver" metaname="gfsver_mpc_np_${cyc}.meta" device="nc | ${metaname}" -PDY2=`echo $PDY | cut -c3-` +PDY2=$(echo $PDY | cut -c3-) # # # DEFINE 1 CYCLE AGO -dc1=`$NDATE -06 ${PDY}${cyc} | cut -c -10` -date1=`echo ${dc1} | cut -c -8` -sdate1=`echo ${dc1} | cut -c 3-8` -cycle1=`echo ${dc1} | cut -c 9,10` +dc1=$($NDATE -06 ${PDY}${cyc} | cut -c -10) +date1=$(echo ${dc1} | cut -c -8) +sdate1=$(echo ${dc1} | cut -c 3-8) +cycle1=$(echo ${dc1} | cut -c 9,10) # DEFINE 2 CYCLES AGO -dc2=`$NDATE -12 ${PDY}${cyc} | cut -c -10` -date2=`echo ${dc2} | cut -c -8` -sdate2=`echo ${dc2} | cut -c 3-8` -cycle2=`echo ${dc2} | cut -c 9,10` +dc2=$($NDATE -12 ${PDY}${cyc} | cut -c -10) +date2=$(echo ${dc2} | cut -c -8) +sdate2=$(echo ${dc2} | cut -c 3-8) +cycle2=$(echo ${dc2} | cut -c 9,10) # DEFINE 3 CYCLES AGO -dc3=`$NDATE -18 ${PDY}${cyc} | cut -c -10` -date3=`echo ${dc3} | cut -c -8` -sdate3=`echo ${dc3} | cut -c 3-8` -cycle3=`echo ${dc3} | cut -c 9,10` +dc3=$($NDATE -18 ${PDY}${cyc} | cut -c -10) +date3=$(echo ${dc3} | cut -c -8) +sdate3=$(echo ${dc3} | cut -c 3-8) +cycle3=$(echo ${dc3} | cut -c 9,10) # DEFINE 4 CYCLES AGO -dc4=`$NDATE -24 ${PDY}${cyc} | cut -c -10` -date4=`echo ${dc4} | cut -c -8` -sdate4=`echo ${dc4} | cut -c 3-8` -cycle4=`echo ${dc4} | cut -c 9,10` +dc4=$($NDATE -24 ${PDY}${cyc} | cut -c -10) +date4=$(echo ${dc4} | cut -c -8) +sdate4=$(echo ${dc4} | cut -c 3-8) +cycle4=$(echo ${dc4} | cut -c 9,10) # DEFINE 5 CYCLES AGO -dc5=`$NDATE -30 ${PDY}${cyc} | cut -c -10` -date5=`echo ${dc5} | cut -c -8` -sdate5=`echo ${dc5} | cut -c 3-8` -cycle5=`echo ${dc5} | cut -c 9,10` +dc5=$($NDATE -30 ${PDY}${cyc} | cut -c -10) +date5=$(echo ${dc5} | cut -c -8) +sdate5=$(echo ${dc5} | cut -c 3-8) +cycle5=$(echo ${dc5} | cut -c 9,10) # DEFINE 6 CYCLES AGO -dc6=`$NDATE -36 ${PDY}${cyc} | cut -c -10` -date6=`echo ${dc6} | cut -c -8` -sdate6=`echo ${dc6} | cut -c 3-8` -cycle6=`echo ${dc6} | cut -c 9,10` +dc6=$($NDATE -36 ${PDY}${cyc} | cut -c -10) +date6=$(echo ${dc6} | cut -c -8) +sdate6=$(echo ${dc6} | cut -c 3-8) +cycle6=$(echo ${dc6} | cut -c 9,10) # DEFINE 7 CYCLES AGO -dc7=`$NDATE -42 ${PDY}${cyc} | cut -c -10` -date7=`echo ${dc7} | cut -c -8` -sdate7=`echo ${dc7} | cut -c 3-8` -cycle7=`echo ${dc7} | cut -c 9,10` +dc7=$($NDATE -42 ${PDY}${cyc} | cut -c -10) +date7=$(echo ${dc7} | cut -c -8) +sdate7=$(echo ${dc7} | cut -c 3-8) +cycle7=$(echo ${dc7} | cut -c 9,10) # DEFINE 8 CYCLES AGO -dc8=`$NDATE -48 ${PDY}${cyc} | cut -c -10` -date8=`echo ${dc8} | cut -c -8` -sdate8=`echo ${dc8} | cut -c 3-8` -cycle8=`echo ${dc8} | cut -c 9,10` +dc8=$($NDATE -48 ${PDY}${cyc} | cut -c -10) +date8=$(echo ${dc8} | cut -c -8) +sdate8=$(echo ${dc8} | cut -c 3-8) +cycle8=$(echo ${dc8} | cut -c 9,10) # DEFINE 9 CYCLES AGO -dc9=`$NDATE -54 ${PDY}${cyc} | cut -c -10` -date9=`echo ${dc9} | cut -c -8` -sdate9=`echo ${dc9} | cut -c 3-8` -cycle9=`echo ${dc9} | cut -c 9,10` +dc9=$($NDATE -54 ${PDY}${cyc} | cut -c -10) +date9=$(echo ${dc9} | cut -c -8) +sdate9=$(echo ${dc9} | cut -c 3-8) +cycle9=$(echo ${dc9} | cut -c 9,10) # DEFINE 10 CYCLES AGO -dc10=`$NDATE -60 ${PDY}${cyc} | cut -c -10` -date10=`echo ${dc10} | cut -c -8` -sdate10=`echo ${dc10} | cut -c 3-8` -cycle10=`echo ${dc10} | cut -c 9,10` +dc10=$($NDATE -60 ${PDY}${cyc} | cut -c -10) +date10=$(echo ${dc10} | cut -c -8) +sdate10=$(echo ${dc10} | cut -c 3-8) +cycle10=$(echo ${dc10} | cut -c 9,10) # DEFINE 11 CYCLES AGO -dc11=`$NDATE -66 ${PDY}${cyc} | cut -c -10` -date11=`echo ${dc11} | cut -c -8` -sdate11=`echo ${dc11} | cut -c 3-8` -cycle11=`echo ${dc11} | cut -c 9,10` +dc11=$($NDATE -66 ${PDY}${cyc} | cut -c -10) +date11=$(echo ${dc11} | cut -c -8) +sdate11=$(echo ${dc11} | cut -c 3-8) +cycle11=$(echo ${dc11} | cut -c 9,10) # DEFINE 12 CYCLES AGO -dc12=`$NDATE -72 ${PDY}${cyc} | cut -c -10` -date12=`echo ${dc12} | cut -c -8` -sdate12=`echo ${dc12} | cut -c 3-8` -cycle12=`echo ${dc12} | cut -c 9,10` +dc12=$($NDATE -72 ${PDY}${cyc} | cut -c -10) +date12=$(echo ${dc12} | cut -c -8) +sdate12=$(echo ${dc12} | cut -c 3-8) +cycle12=$(echo ${dc12} | cut -c 9,10) # DEFINE 13 CYCLES AGO -dc13=`$NDATE -78 ${PDY}${cyc} | cut -c -10` -date13=`echo ${dc13} | cut -c -8` -sdate13=`echo ${dc13} | cut -c 3-8` -cycle13=`echo ${dc13} | cut -c 9,10` +dc13=$($NDATE -78 ${PDY}${cyc} | cut -c -10) +date13=$(echo ${dc13} | cut -c -8) +sdate13=$(echo ${dc13} | cut -c 3-8) +cycle13=$(echo ${dc13} | cut -c 9,10) # DEFINE 14 CYCLES AGO -dc14=`$NDATE -84 ${PDY}${cyc} | cut -c -10` -date14=`echo ${dc14} | cut -c -8` -sdate14=`echo ${dc14} | cut -c 3-8` -cycle14=`echo ${dc14} | cut -c 9,10` +dc14=$($NDATE -84 ${PDY}${cyc} | cut -c -10) +date14=$(echo ${dc14} | cut -c -8) +sdate14=$(echo ${dc14} | cut -c 3-8) +cycle14=$(echo ${dc14} | cut -c 9,10) # DEFINE 15 CYCLES AGO -dc15=`$NDATE -90 ${PDY}${cyc} | cut -c -10` -date15=`echo ${dc15} | cut -c -8` -sdate15=`echo ${dc15} | cut -c 3-8` -cycle15=`echo ${dc15} | cut -c 9,10` +dc15=$($NDATE -90 ${PDY}${cyc} | cut -c -10) +date15=$(echo ${dc15} | cut -c -8) +sdate15=$(echo ${dc15} | cut -c 3-8) +cycle15=$(echo ${dc15} | cut -c 9,10) # DEFINE 16 CYCLES AGO -dc16=`$NDATE -96 ${PDY}${cyc} | cut -c -10` -date16=`echo ${dc16} | cut -c -8` -sdate16=`echo ${dc16} | cut -c 3-8` -cycle16=`echo ${dc16} | cut -c 9,10` +dc16=$($NDATE -96 ${PDY}${cyc} | cut -c -10) +date16=$(echo ${dc16} | cut -c -8) +sdate16=$(echo ${dc16} | cut -c 3-8) +cycle16=$(echo ${dc16} | cut -c 9,10) # DEFINE 17 CYCLES AGO -dc17=`$NDATE -102 ${PDY}${cyc} | cut -c -10` -date17=`echo ${dc17} | cut -c -8` -sdate17=`echo ${dc17} | cut -c 3-8` -cycle17=`echo ${dc17} | cut -c 9,10` +dc17=$($NDATE -102 ${PDY}${cyc} | cut -c -10) +date17=$(echo ${dc17} | cut -c -8) +sdate17=$(echo ${dc17} | cut -c 3-8) +cycle17=$(echo ${dc17} | cut -c 9,10) # DEFINE 18 CYCLES AGO -dc18=`$NDATE -108 ${PDY}${cyc} | cut -c -10` -date18=`echo ${dc18} | cut -c -8` -sdate18=`echo ${dc18} | cut -c 3-8` -cycle18=`echo ${dc18} | cut -c 9,10` +dc18=$($NDATE -108 ${PDY}${cyc} | cut -c -10) +date18=$(echo ${dc18} | cut -c -8) +sdate18=$(echo ${dc18} | cut -c 3-8) +cycle18=$(echo ${dc18} | cut -c 9,10) # DEFINE 19 CYCLES AGO -dc19=`$NDATE -114 ${PDY}${cyc} | cut -c -10` -date19=`echo ${dc19} | cut -c -8` -sdate19=`echo ${dc19} | cut -c 3-8` -cycle19=`echo ${dc19} | cut -c 9,10` +dc19=$($NDATE -114 ${PDY}${cyc} | cut -c -10) +date19=$(echo ${dc19} | cut -c -8) +sdate19=$(echo ${dc19} | cut -c 3-8) +cycle19=$(echo ${dc19} | cut -c 9,10) # DEFINE 20 CYCLES AGO -dc20=`$NDATE -120 ${PDY}${cyc} | cut -c -10` -date20=`echo ${dc20} | cut -c -8` -sdate20=`echo ${dc20} | cut -c 3-8` -cycle20=`echo ${dc20} | cut -c 9,10` +dc20=$($NDATE -120 ${PDY}${cyc} | cut -c -10) +date20=$(echo ${dc20} | cut -c -8) +sdate20=$(echo ${dc20} | cut -c 3-8) +cycle20=$(echo ${dc20} | cut -c 9,10) # DEFINE 21 CYCLES AGO -dc21=`$NDATE -126 ${PDY}${cyc} | cut -c -10` -date21=`echo ${dc21} | cut -c -8` -sdate21=`echo ${dc21} | cut -c 3-8` -cycle21=`echo ${dc21} | cut -c 9,10` +dc21=$($NDATE -126 ${PDY}${cyc} | cut -c -10) +date21=$(echo ${dc21} | cut -c -8) +sdate21=$(echo ${dc21} | cut -c 3-8) +cycle21=$(echo ${dc21} | cut -c 9,10) # SET CURRENT CYCLE AS THE VERIFICATION GRIDDED FILE. vergrid="F-${MDL} | ${PDY2}/${cyc}00" @@ -147,7 +147,7 @@ fi MDL2="GFSHPC" for verday in ${verdays} do - cominday=`echo ${verday} | cut -c -8` + cominday=$(echo ${verday} | cut -c -8) #XXW export HPCGFS=$COMROOT/nawips/prod/${mdl}.${cominday} # BV export HPCGFS=$COMROOT/nawips/${envir}/${mdl}.${cominday} export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cyc}/${COMPONENT}/gempak diff --git a/gempak/ush/gfs_meta_precip.sh b/gempak/ush/gfs_meta_precip.sh index 6d23003f21..cf3db9cbae 100755 --- a/gempak/ush/gfs_meta_precip.sh +++ b/gempak/ush/gfs_meta_precip.sh @@ -21,7 +21,7 @@ MDL=GFS metatype="precip" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=`echo $PDY | cut -c3-` +PDY2=$(echo $PDY | cut -c3-) # # Set range of forecast hours. GFS is available every 6 hours through F192, then diff --git a/gempak/ush/gfs_meta_qpf.sh b/gempak/ush/gfs_meta_qpf.sh index 45e943d6ce..49ca0d8bd4 100755 --- a/gempak/ush/gfs_meta_qpf.sh +++ b/gempak/ush/gfs_meta_qpf.sh @@ -33,7 +33,7 @@ MDL=GFS metatype="qpf" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=`echo $PDY | cut -c3-` +PDY2=$(echo $PDY | cut -c3-) gdat="F000-F126-06" gdatpcpn06="F006-F126-06" gdatpcpn12="F012-F126-06" diff --git a/gempak/ush/gfs_meta_sa.sh b/gempak/ush/gfs_meta_sa.sh index 7eef585536..47984e641d 100755 --- a/gempak/ush/gfs_meta_sa.sh +++ b/gempak/ush/gfs_meta_sa.sh @@ -31,7 +31,7 @@ MDL=GFS metatype="sa" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=`echo ${PDY} | cut -c3-` +PDY2=$(echo ${PDY} | cut -c3-) # #if [ ${cyc} -eq 00 ] ; then # fend=F126 diff --git a/gempak/ush/gfs_meta_sa2.sh b/gempak/ush/gfs_meta_sa2.sh index eab320e4cd..a566031030 100755 --- a/gempak/ush/gfs_meta_sa2.sh +++ b/gempak/ush/gfs_meta_sa2.sh @@ -37,22 +37,22 @@ device="nc | ${metaname}" if [ ${cyc} -eq "12" ] || [ ${cyc} -eq "18" ] then exit -# elif [ ${cyc} -eq "00" ] && [ `echo $COMIN | awk -F/ '{print $5}' | awk -F. '{print $1}'` = "gfs" ] +# elif [ ${cyc} -eq "00" ] && [ $(echo $COMIN | awk -F/ '{print $5}' | awk -F. '{print $1}') = "gfs" ] elif [ ${cyc} -eq "00" ] && [ ${mdl} = "gfs" ] then # don't want to run from 00z gfs exit fi -PDY2=`echo ${PDY} | cut -c3-` +PDY2=$(echo ${PDY} | cut -c3-) # export HPCGFS=$COMROOT/nawips/${envir}/gfs.${PDY} export HPCGFS=${COMINgempak}/${mdl}.${PDY}/${cyc}/${COMPONENT}/gempak grid1="F-GFSHPC | ${PDY2}/${cyc}00" # DEFINE YESTERDAY -PDYm1=`$NDATE -24 ${PDY}${cyc} | cut -c -8` -PDY2m1=`echo ${PDYm1} | cut -c 3-` +PDYm1=$($NDATE -24 ${PDY}${cyc} | cut -c -8) +PDY2m1=$(echo ${PDYm1} | cut -c 3-) $GEMEXE/gdplot2_nc << EOF \$MAPFIL= mepowo.gsf @@ -207,16 +207,16 @@ else times="006 030 054 078 102 126" fi -for gfsfhr in `echo ${times}` +for gfsfhr in $(echo ${times}) do if [ ${cyc} == "06" ]; then - ecmwffhr="F`expr ${gfsfhr} + 18`" + ecmwffhr="F$(expr ${gfsfhr} + 18)" else - ecmwffhr="F`expr ${gfsfhr} + 12`" + ecmwffhr="F$(expr ${gfsfhr} + 12)" fi - while [ `expr length $ecmwffhr` -lt 3 ] + while [ $(expr length $ecmwffhr) -lt 3 ] do - ecmwffhr="F0`expr ${gfsfhr} + 6`" + ecmwffhr="F0$(expr ${gfsfhr} + 6)" done gfsfhr="F${gfsfhr}" grid2="${COMINecmwf}.${PDYm1}/gempak/ecmwf_glob_${PDYm1}12" @@ -291,19 +291,19 @@ elif [ ${cyc} -eq "06" ]; then times="006 018 030 042 054 066 090 114 138" fi -for gfsfhr in `echo ${times}` +for gfsfhr in $(echo ${times}) do if [ ${cyc} -eq "06" ]; then - ukmetfhr="`expr ${gfsfhr} + 6`" - while [ `expr length $ukmetfhr` -lt 3 ] + ukmetfhr="$(expr ${gfsfhr} + 6)" + while [ $(expr length $ukmetfhr) -lt 3 ] do - ukmetfhr="0`expr ${gfsfhr} + 6`" + ukmetfhr="0$(expr ${gfsfhr} + 6)" done else ukmetfhr=${gfsfhr} fi gfsfhr="F${gfsfhr}" - grid3="${COMINukmet}.${PDY}/ukmet_${PDY}00f${ukmetfhr}" + grid3="${COMINukmet}.${PDY}/gempak/ukmet_${PDY}00f${ukmetfhr}" $GEMEXE/gdplot2_nc << EOF25 \$MAPFIL = mepowo.gsf diff --git a/gempak/ush/gfs_meta_trop.sh b/gempak/ush/gfs_meta_trop.sh index 9ad2503f5a..d0cc0dbd14 100755 --- a/gempak/ush/gfs_meta_trop.sh +++ b/gempak/ush/gfs_meta_trop.sh @@ -36,7 +36,7 @@ MDL=GFS metatype="trop" metaname="${mdl}_${metatype}_${cyc}.meta" device="nc | ${metaname}" -PDY2=`echo ${PDY} | cut -c3-` +PDY2=$(echo ${PDY} | cut -c3-) # for a in ATL PAC WPAC do diff --git a/gempak/ush/gfs_meta_us.sh b/gempak/ush/gfs_meta_us.sh index a7607da3d5..7a818c338b 100755 --- a/gempak/ush/gfs_meta_us.sh +++ b/gempak/ush/gfs_meta_us.sh @@ -25,7 +25,7 @@ cd $DATA/us cp $FIXgempak/datatype.tbl datatype.tbl device="nc | gfs.meta" -PDY2=`echo $PDY | cut -c3-` +PDY2=$(echo $PDY | cut -c3-) export fend=F216 diff --git a/gempak/ush/gfs_meta_usext.sh b/gempak/ush/gfs_meta_usext.sh index 5b4388f6e7..dc522bb896 100755 --- a/gempak/ush/gfs_meta_usext.sh +++ b/gempak/ush/gfs_meta_usext.sh @@ -35,7 +35,7 @@ device="nc | mrf.meta" #XXW cp $FIXgempak/model/gfs/ak_sfstns.tbl alaska.tbl cp $FIXgempak/ak_sfstns.tbl alaska.tbl -month=`echo $PDY | cut -c5,6` +month=$(echo $PDY | cut -c5,6) if [ $month -ge 5 -a $month -le 9 ] ; then # fint="40;45;50;55;60;65;70;75;80;85;90;95;100" # fline="26;25;24;23;22;21;20;19;18;17;16;15;14;31" @@ -46,7 +46,7 @@ else fline="4;30;29;28;27;26;25;24;23;22;21;20;19;18;17;16;15;14;31" fi -PDY2=`echo $PDY | cut -c3-` +PDY2=$(echo $PDY | cut -c3-) if [ "$envir" = "para" ] ; then export m_title="GFSP" diff --git a/gempak/ush/gfs_meta_ver.sh b/gempak/ush/gfs_meta_ver.sh index 54697264be..d63f6bc6df 100755 --- a/gempak/ush/gfs_meta_ver.sh +++ b/gempak/ush/gfs_meta_ver.sh @@ -35,173 +35,173 @@ MDL=GFS metatype="ver" metaname="gfsver_${cyc}.meta" device="nc | ${metaname}" -PDY2=`echo ${PDY} | cut -c3-` +PDY2=$(echo ${PDY} | cut -c3-) # # DEFINE 1 CYCLE AGO -dc1=`$NDATE -06 ${PDY}${cyc} | cut -c -10` -date1=`echo ${dc1} | cut -c -8` -sdate1=`echo ${dc1} | cut -c 3-8` -cycle1=`echo ${dc1} | cut -c 9,10` +dc1=$($NDATE -06 ${PDY}${cyc} | cut -c -10) +date1=$(echo ${dc1} | cut -c -8) +sdate1=$(echo ${dc1} | cut -c 3-8) +cycle1=$(echo ${dc1} | cut -c 9,10) # DEFINE 2 CYCLES AGO -dc2=`$NDATE -12 ${PDY}${cyc} | cut -c -10` -date2=`echo ${dc2} | cut -c -8` -sdate2=`echo ${dc2} | cut -c 3-8` -cycle2=`echo ${dc2} | cut -c 9,10` +dc2=$($NDATE -12 ${PDY}${cyc} | cut -c -10) +date2=$(echo ${dc2} | cut -c -8) +sdate2=$(echo ${dc2} | cut -c 3-8) +cycle2=$(echo ${dc2} | cut -c 9,10) # DEFINE 3 CYCLES AGO -dc3=`$NDATE -18 ${PDY}${cyc} | cut -c -10` -date3=`echo ${dc3} | cut -c -8` -sdate3=`echo ${dc3} | cut -c 3-8` -cycle3=`echo ${dc3} | cut -c 9,10` +dc3=$($NDATE -18 ${PDY}${cyc} | cut -c -10) +date3=$(echo ${dc3} | cut -c -8) +sdate3=$(echo ${dc3} | cut -c 3-8) +cycle3=$(echo ${dc3} | cut -c 9,10) # DEFINE 4 CYCLES AGO -dc4=`$NDATE -24 ${PDY}${cyc} | cut -c -10` -date4=`echo ${dc4} | cut -c -8` -sdate4=`echo ${dc4} | cut -c 3-8` -cycle4=`echo ${dc4} | cut -c 9,10` +dc4=$($NDATE -24 ${PDY}${cyc} | cut -c -10) +date4=$(echo ${dc4} | cut -c -8) +sdate4=$(echo ${dc4} | cut -c 3-8) +cycle4=$(echo ${dc4} | cut -c 9,10) # DEFINE 5 CYCLES AGO -dc5=`$NDATE -30 ${PDY}${cyc} | cut -c -10` -date5=`echo ${dc5} | cut -c -8` -sdate5=`echo ${dc5} | cut -c 3-8` -cycle5=`echo ${dc5} | cut -c 9,10` +dc5=$($NDATE -30 ${PDY}${cyc} | cut -c -10) +date5=$(echo ${dc5} | cut -c -8) +sdate5=$(echo ${dc5} | cut -c 3-8) +cycle5=$(echo ${dc5} | cut -c 9,10) # DEFINE 6 CYCLES AGO -dc6=`$NDATE -36 ${PDY}${cyc} | cut -c -10` -date6=`echo ${dc6} | cut -c -8` -sdate6=`echo ${dc6} | cut -c 3-8` -cycle6=`echo ${dc6} | cut -c 9,10` +dc6=$($NDATE -36 ${PDY}${cyc} | cut -c -10) +date6=$(echo ${dc6} | cut -c -8) +sdate6=$(echo ${dc6} | cut -c 3-8) +cycle6=$(echo ${dc6} | cut -c 9,10) # DEFINE 7 CYCLES AGO -dc7=`$NDATE -42 ${PDY}${cyc} | cut -c -10` -date7=`echo ${dc7} | cut -c -8` -sdate7=`echo ${dc7} | cut -c 3-8` -cycle7=`echo ${dc7} | cut -c 9,10` +dc7=$($NDATE -42 ${PDY}${cyc} | cut -c -10) +date7=$(echo ${dc7} | cut -c -8) +sdate7=$(echo ${dc7} | cut -c 3-8) +cycle7=$(echo ${dc7} | cut -c 9,10) # DEFINE 8 CYCLES AGO -dc8=`$NDATE -48 ${PDY}${cyc} | cut -c -10` -date8=`echo ${dc8} | cut -c -8` -sdate8=`echo ${dc8} | cut -c 3-8` -cycle8=`echo ${dc8} | cut -c 9,10` +dc8=$($NDATE -48 ${PDY}${cyc} | cut -c -10) +date8=$(echo ${dc8} | cut -c -8) +sdate8=$(echo ${dc8} | cut -c 3-8) +cycle8=$(echo ${dc8} | cut -c 9,10) # DEFINE 9 CYCLES AGO -dc9=`$NDATE -54 ${PDY}${cyc} | cut -c -10` -date9=`echo ${dc9} | cut -c -8` -sdate9=`echo ${dc9} | cut -c 3-8` -cycle9=`echo ${dc9} | cut -c 9,10` +dc9=$($NDATE -54 ${PDY}${cyc} | cut -c -10) +date9=$(echo ${dc9} | cut -c -8) +sdate9=$(echo ${dc9} | cut -c 3-8) +cycle9=$(echo ${dc9} | cut -c 9,10) # DEFINE 10 CYCLES AGO -dc10=`$NDATE -60 ${PDY}${cyc} | cut -c -10` -date10=`echo ${dc10} | cut -c -8` -sdate10=`echo ${dc10} | cut -c 3-8` -cycle10=`echo ${dc10} | cut -c 9,10` +dc10=$($NDATE -60 ${PDY}${cyc} | cut -c -10) +date10=$(echo ${dc10} | cut -c -8) +sdate10=$(echo ${dc10} | cut -c 3-8) +cycle10=$(echo ${dc10} | cut -c 9,10) # DEFINE 11 CYCLES AGO -dc11=`$NDATE -66 ${PDY}${cyc} | cut -c -10` -date11=`echo ${dc11} | cut -c -8` -sdate11=`echo ${dc11} | cut -c 3-8` -cycle11=`echo ${dc11} | cut -c 9,10` +dc11=$($NDATE -66 ${PDY}${cyc} | cut -c -10) +date11=$(echo ${dc11} | cut -c -8) +sdate11=$(echo ${dc11} | cut -c 3-8) +cycle11=$(echo ${dc11} | cut -c 9,10) # DEFINE 12 CYCLES AGO -dc12=`$NDATE -72 ${PDY}${cyc} | cut -c -10` -date12=`echo ${dc12} | cut -c -8` -sdate12=`echo ${dc12} | cut -c 3-8` -cycle12=`echo ${dc12} | cut -c 9,10` +dc12=$($NDATE -72 ${PDY}${cyc} | cut -c -10) +date12=$(echo ${dc12} | cut -c -8) +sdate12=$(echo ${dc12} | cut -c 3-8) +cycle12=$(echo ${dc12} | cut -c 9,10) # DEFINE 13 CYCLES AGO -dc13=`$NDATE -78 ${PDY}${cyc} | cut -c -10` -date13=`echo ${dc13} | cut -c -8` -sdate13=`echo ${dc13} | cut -c 3-8` -cycle13=`echo ${dc13} | cut -c 9,10` +dc13=$($NDATE -78 ${PDY}${cyc} | cut -c -10) +date13=$(echo ${dc13} | cut -c -8) +sdate13=$(echo ${dc13} | cut -c 3-8) +cycle13=$(echo ${dc13} | cut -c 9,10) # DEFINE 14 CYCLES AGO -dc14=`$NDATE -84 ${PDY}${cyc} | cut -c -10` -date14=`echo ${dc14} | cut -c -8` -sdate14=`echo ${dc14} | cut -c 3-8` -cycle14=`echo ${dc14} | cut -c 9,10` +dc14=$($NDATE -84 ${PDY}${cyc} | cut -c -10) +date14=$(echo ${dc14} | cut -c -8) +sdate14=$(echo ${dc14} | cut -c 3-8) +cycle14=$(echo ${dc14} | cut -c 9,10) # DEFINE 15 CYCLES AGO -dc15=`$NDATE -90 ${PDY}${cyc} | cut -c -10` -date15=`echo ${dc15} | cut -c -8` -sdate15=`echo ${dc15} | cut -c 3-8` -cycle15=`echo ${dc15} | cut -c 9,10` +dc15=$($NDATE -90 ${PDY}${cyc} | cut -c -10) +date15=$(echo ${dc15} | cut -c -8) +sdate15=$(echo ${dc15} | cut -c 3-8) +cycle15=$(echo ${dc15} | cut -c 9,10) # DEFINE 16 CYCLES AGO -dc16=`$NDATE -96 ${PDY}${cyc} | cut -c -10` -date16=`echo ${dc16} | cut -c -8` -sdate16=`echo ${dc16} | cut -c 3-8` -cycle16=`echo ${dc16} | cut -c 9,10` +dc16=$($NDATE -96 ${PDY}${cyc} | cut -c -10) +date16=$(echo ${dc16} | cut -c -8) +sdate16=$(echo ${dc16} | cut -c 3-8) +cycle16=$(echo ${dc16} | cut -c 9,10) # DEFINE 17 CYCLES AGO -dc17=`$NDATE -102 ${PDY}${cyc} | cut -c -10` -date17=`echo ${dc17} | cut -c -8` -sdate17=`echo ${dc17} | cut -c 3-8` -cycle17=`echo ${dc17} | cut -c 9,10` +dc17=$($NDATE -102 ${PDY}${cyc} | cut -c -10) +date17=$(echo ${dc17} | cut -c -8) +sdate17=$(echo ${dc17} | cut -c 3-8) +cycle17=$(echo ${dc17} | cut -c 9,10) # DEFINE 18 CYCLES AGO -dc18=`$NDATE -108 ${PDY}${cyc} | cut -c -10` -date18=`echo ${dc18} | cut -c -8` -sdate18=`echo ${dc18} | cut -c 3-8` -cycle18=`echo ${dc18} | cut -c 9,10` +dc18=$($NDATE -108 ${PDY}${cyc} | cut -c -10) +date18=$(echo ${dc18} | cut -c -8) +sdate18=$(echo ${dc18} | cut -c 3-8) +cycle18=$(echo ${dc18} | cut -c 9,10) # DEFINE 19 CYCLES AGO -dc19=`$NDATE -114 ${PDY}${cyc} | cut -c -10` -date19=`echo ${dc19} | cut -c -8` -sdate19=`echo ${dc19} | cut -c 3-8` -cycle19=`echo ${dc19} | cut -c 9,10` +dc19=$($NDATE -114 ${PDY}${cyc} | cut -c -10) +date19=$(echo ${dc19} | cut -c -8) +sdate19=$(echo ${dc19} | cut -c 3-8) +cycle19=$(echo ${dc19} | cut -c 9,10) # DEFINE 20 CYCLES AGO -dc20=`$NDATE -120 ${PDY}${cyc} | cut -c -10` -date20=`echo ${dc20} | cut -c -8` -sdate20=`echo ${dc20} | cut -c 3-8` -cycle20=`echo ${dc20} | cut -c 9,10` +dc20=$($NDATE -120 ${PDY}${cyc} | cut -c -10) +date20=$(echo ${dc20} | cut -c -8) +sdate20=$(echo ${dc20} | cut -c 3-8) +cycle20=$(echo ${dc20} | cut -c 9,10) # DEFINE 21 CYCLES AGO -dc21=`$NDATE -126 ${PDY}${cyc} | cut -c -10` -date21=`echo ${dc21} | cut -c -8` -sdate21=`echo ${dc21} | cut -c 3-8` -cycle21=`echo ${dc21} | cut -c 9,10` +dc21=$($NDATE -126 ${PDY}${cyc} | cut -c -10) +date21=$(echo ${dc21} | cut -c -8) +sdate21=$(echo ${dc21} | cut -c 3-8) +cycle21=$(echo ${dc21} | cut -c 9,10) # DEFINE 22 CYCLES AGO -dc22=`$NDATE -132 ${PDY}${cyc} | cut -c -10` -date22=`echo ${dc22} | cut -c -8` -sdate22=`echo ${dc22} | cut -c 3-8` -cycle22=`echo ${dc22} | cut -c 9,10` +dc22=$($NDATE -132 ${PDY}${cyc} | cut -c -10) +date22=$(echo ${dc22} | cut -c -8) +sdate22=$(echo ${dc22} | cut -c 3-8) +cycle22=$(echo ${dc22} | cut -c 9,10) # DEFINE 23 CYCLES AGO -dc23=`$NDATE -138 ${PDY}${cyc} | cut -c -10` -date23=`echo ${dc23} | cut -c -8` -sdate23=`echo ${dc23} | cut -c 3-8` -cycle23=`echo ${dc23} | cut -c 9,10` +dc23=$($NDATE -138 ${PDY}${cyc} | cut -c -10) +date23=$(echo ${dc23} | cut -c -8) +sdate23=$(echo ${dc23} | cut -c 3-8) +cycle23=$(echo ${dc23} | cut -c 9,10) # DEFINE 24 CYCLES AGO -dc24=`$NDATE -144 ${PDY}${cyc} | cut -c -10` -date24=`echo ${dc24} | cut -c -8` -sdate24=`echo ${dc24} | cut -c 3-8` -cycle24=`echo ${dc24} | cut -c 9,10` +dc24=$($NDATE -144 ${PDY}${cyc} | cut -c -10) +date24=$(echo ${dc24} | cut -c -8) +sdate24=$(echo ${dc24} | cut -c 3-8) +cycle24=$(echo ${dc24} | cut -c 9,10) # DEFINE 25 CYCLES AGO -dc25=`$NDATE -150 ${PDY}${cyc} | cut -c -10` -date25=`echo ${dc25} | cut -c -8` -sdate25=`echo ${dc25} | cut -c 3-8` -cycle25=`echo ${dc25} | cut -c 9,10` +dc25=$($NDATE -150 ${PDY}${cyc} | cut -c -10) +date25=$(echo ${dc25} | cut -c -8) +sdate25=$(echo ${dc25} | cut -c 3-8) +cycle25=$(echo ${dc25} | cut -c 9,10) # DEFINE 26 CYCLES AGO -dc26=`$NDATE -156 ${PDY}${cyc} | cut -c -10` -date26=`echo ${dc26} | cut -c -8` -sdate26=`echo ${dc26} | cut -c 3-8` -cycle26=`echo ${dc26} | cut -c 9,10` +dc26=$($NDATE -156 ${PDY}${cyc} | cut -c -10) +date26=$(echo ${dc26} | cut -c -8) +sdate26=$(echo ${dc26} | cut -c 3-8) +cycle26=$(echo ${dc26} | cut -c 9,10) # DEFINE 27 CYCLES AGO -dc27=`$NDATE -162 ${PDY}${cyc} | cut -c -10` -date27=`echo ${dc27} | cut -c -8` -sdate27=`echo ${dc27} | cut -c 3-8` -cycle27=`echo ${dc27} | cut -c 9,10` +dc27=$($NDATE -162 ${PDY}${cyc} | cut -c -10) +date27=$(echo ${dc27} | cut -c -8) +sdate27=$(echo ${dc27} | cut -c 3-8) +cycle27=$(echo ${dc27} | cut -c 9,10) # DEFINE 28 CYCLES AGO -dc28=`$NDATE -168 ${PDY}${cyc} | cut -c -10` -date28=`echo ${dc28} | cut -c -8` -sdate28=`echo ${dc28} | cut -c 3-8` -cycle28=`echo ${dc28} | cut -c 9,10` +dc28=$($NDATE -168 ${PDY}${cyc} | cut -c -10) +date28=$(echo ${dc28} | cut -c -8) +sdate28=$(echo ${dc28} | cut -c 3-8) +cycle28=$(echo ${dc28} | cut -c 9,10) # DEFINE 29 CYCLES AGO -dc29=`$NDATE -174 ${PDY}${cyc} | cut -c -10` -date29=`echo ${dc29} | cut -c -8` -sdate29=`echo ${dc29} | cut -c 3-8` -cycle29=`echo ${dc29} | cut -c 9,10` +dc29=$($NDATE -174 ${PDY}${cyc} | cut -c -10) +date29=$(echo ${dc29} | cut -c -8) +sdate29=$(echo ${dc29} | cut -c 3-8) +cycle29=$(echo ${dc29} | cut -c 9,10) # DEFINE 30 CYCLES AGO -dc30=`$NDATE -180 ${PDY}${cyc} | cut -c -10` -date30=`echo ${dc30} | cut -c -8` -sdate30=`echo ${dc30} | cut -c 3-8` -cycle30=`echo ${dc30} | cut -c 9,10` +dc30=$($NDATE -180 ${PDY}${cyc} | cut -c -10) +date30=$(echo ${dc30} | cut -c -8) +sdate30=$(echo ${dc30} | cut -c 3-8) +cycle30=$(echo ${dc30} | cut -c 9,10) # DEFINE 31 CYCLES AGO -dc31=`$NDATE -192 ${PDY}${cyc} | cut -c -10` -date31=`echo ${dc31} | cut -c -8` -sdate31=`echo ${dc31} | cut -c 3-8` -cycle31=`echo ${dc31} | cut -c 9,10` +dc31=$($NDATE -192 ${PDY}${cyc} | cut -c -10) +date31=$(echo ${dc31} | cut -c -8) +sdate31=$(echo ${dc31} | cut -c 3-8) +cycle31=$(echo ${dc31} | cut -c 9,10) # DEFINE 32 CYCLES AGO -dc32=`$NDATE -204 ${PDY}${cyc} | cut -c -10` -date32=`echo ${dc32} | cut -c -8` -sdate32=`echo ${dc32} | cut -c 3-8` -cycle32=`echo ${dc32} | cut -c 9,10` +dc32=$($NDATE -204 ${PDY}${cyc} | cut -c -10) +date32=$(echo ${dc32} | cut -c -8) +sdate32=$(echo ${dc32} | cut -c 3-8) +cycle32=$(echo ${dc32} | cut -c 9,10) # DEFINE 33 CYCLES AGO -dc33=`$NDATE -216 ${PDY}${cyc} | cut -c -10` -date33=`echo ${dc33} | cut -c -8` -sdate33=`echo ${dc33} | cut -c 3-8` -cycle33=`echo ${dc33} | cut -c 9,10` +dc33=$($NDATE -216 ${PDY}${cyc} | cut -c -10) +date33=$(echo ${dc33} | cut -c -8) +sdate33=$(echo ${dc33} | cut -c 3-8) +cycle33=$(echo ${dc33} | cut -c 9,10) # SET CURRENT CYCLE AS THE VERIFICATION GRIDDED FILE. vergrid="F-${MDL} | ${PDY2}/${cyc}00" @@ -224,7 +224,7 @@ ${dc20} ${dc21} ${dc22} ${dc23} ${dc24} ${dc25} ${dc26} ${dc27} ${dc28} ${dc29} MDL2="GFSHPC" for verday in ${verdays} do - cominday=`echo ${verday} | cut -c -8` + cominday=$(echo ${verday} | cut -c -8) #XXW export HPCGFS=$COMROOT/nawips/prod/${mdl}.${cominday} # BV export HPCGFS=$COMROOT/nawips/${envir}/${mdl}.${cominday} export HPCGFS=${COMINgempak}/${mdl}.${cominday}/${cyc}/${COMPONENT}/gempak diff --git a/jobs/JGDAS_ATMOS_ANALYSIS_DIAG b/jobs/JGDAS_ATMOS_ANALYSIS_DIAG new file mode 100755 index 0000000000..6ad5c8f31b --- /dev/null +++ b/jobs/JGDAS_ATMOS_ANALYSIS_DIAG @@ -0,0 +1,59 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "anal" -c "base anal analdiag" + + +############################################## +# Set variables used in the script +############################################## +export CDUMP="${RUN/enkf}" +export DO_CALC_ANALYSIS=${DO_CALC_ANALYSIS:-"YES"} + + +############################################## +# Begin JOB SPECIFIC work +############################################## + +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +GDATE=$(${NDATE} -${assim_freq} ${PDY}${cyc}) +# shellcheck disable= +export gPDY=${GDATE:0:8} +export gcyc=${GDATE:8:2} +export GDUMP="gdas" +export GDUMP_ENS="enkf${GDUMP}" + +export OPREFIX="${CDUMP}.t${cyc}z." +export GPREFIX="${GDUMP}.t${gcyc}z." +export APREFIX="${RUN}.t${cyc}z." + +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_ANALYSIS +mkdir -m 775 -p "${COM_ATMOS_ANALYSIS}" + +############################################################### +# Run relevant script +${ANALDIAGSH:-${SCRgfs}/exglobal_diag.sh} +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat ${pgmout} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 diff --git a/jobs/JGDAS_ATMOS_CHGRES_FORENKF b/jobs/JGDAS_ATMOS_CHGRES_FORENKF new file mode 100755 index 0000000000..1bbed53586 --- /dev/null +++ b/jobs/JGDAS_ATMOS_CHGRES_FORENKF @@ -0,0 +1,49 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "anal" -c "base anal echgres" + + +############################################## +# Set variables used in the script +############################################## +export CDUMP=${RUN/enkf} +export DO_CALC_ANALYSIS=${DO_CALC_ANALYSIS:-"YES"} + + +############################################## +# Begin JOB SPECIFIC work +############################################## + +export APREFIX="${CDUMP}.t${cyc}z." +export APREFIX_ENS="${RUN}.t${cyc}z." + +RUN=${CDUMP} YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_HISTORY +MEMDIR="mem001" YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_HISTORY_MEM:COM_ATMOS_HISTORY_TMPL + +############################################################### +# Run relevant script +${CHGRESFCSTSH:-${SCRgfs}/exgdas_atmos_chgres_forenkf.sh} +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat ${pgmout} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 diff --git a/jobs/JGDAS_ATMOS_GEMPAK b/jobs/JGDAS_ATMOS_GEMPAK new file mode 100755 index 0000000000..1535e07ae3 --- /dev/null +++ b/jobs/JGDAS_ATMOS_GEMPAK @@ -0,0 +1,100 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "gempak" -c "base gempak" + +# TODO (#1219) This j-job is not part of the rocoto suite + +################################ +# Set up the HOME directory +export EXECgfs=${EXECgfs:-${HOMEgfs}/exec} +export PARMgfs=${PARMgfs:-${HOMEgfs}/parm} +export PARMwmo=${PARMwmo:-${HOMEgfs}/parm/wmo} +export PARMproduct=${PARMproduct:-${HOMEgfs}/parm/product} +export FIXgempak=${FIXgempak:-${HOMEgfs}/gempak/fix} +export USHgempak=${USHgempak:-${HOMEgfs}/gempak/ush} +export SRCgfs=${SRCgfs:-${HOMEgfs}/scripts} +export UTILgfs=${UTILgfs:-${HOMEgfs}/util} + +############################################ +# Set up model and cycle specific variables +############################################ + +export fend=09 +export finc=3 +export fstart=00 +export GRIB=pgrb2f +export EXT="" +export DBN_ALERT_TYPE=GDAS_GEMPAK + +export SENDDBN=${SENDDBN:-NO} +export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} + +################################### +# Specify NET and RUN Name and model +#################################### +export model=${model:-gdas} + +############################################## +# Define COM directories +############################################## +for grid in 0p25 0p50 1p00; do + GRID=${grid} YMD=${PDY} HH=${cyc} generate_com -rx "COM_ATMOS_GRIB_${grid}:COM_ATMOS_GRIB_GRID_TMPL" +done + +for grid in 1p00 0p25; do + prod_dir="COM_ATMOS_GEMPAK_${grid}" + GRID=${grid} YMD=${PDY} HH=${cyc} generate_com -rx "COM_ATMOS_GEMPAK_${grid}:COM_ATMOS_GEMPAK_TMPL" + + if [[ ! -d "${!prod_dir}" ]] ; then + mkdir -m 775 -p "${!prod_dir}" + fi +done + + +# TODO: These actions belong in an ex-script not a j-job +if [[ -f poescript ]]; then + rm -f poescript +fi + +######################################################## +# Execute the script. +echo "${SRCgfs}/exgdas_atmos_nawips.sh gdas 009 GDAS_GEMPAK ${COM_ATMOS_GEMPAK_1p00}" >> poescript +######################################################## + +######################################################## +# Execute the script for quater-degree grib +echo "${SRCgfs}/exgdas_atmos_nawips.sh gdas_0p25 009 GDAS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}" >> poescript +######################################################## + +cat poescript + +chmod 775 ${DATA}/poescript +export MP_PGMMODEL=mpmd +export MP_CMDFILE=${DATA}/poescript + +ntasks=${NTASKS_GEMPAK:-$(cat ${DATA}/poescript | wc -l)} +ptile=${PTILE_GEMPAK:-4} +threads=${NTHREADS_GEMPAK:-1} +export OMP_NUM_THREADS=${threads} +APRUN="mpiexec -l -np ${ntasks} --cpu-bind verbose,core cfp" + +APRUN_GEMPAKCFP=${APRUN_GEMPAKCFP:-${APRUN}} + +${APRUN_GEMPAKCFP} ${DATA}/poescript +export err=$?; err_chk + +############################################ +# print exec I/O output +############################################ +if [ -e "${pgmout}" ] ; then + cat ${pgmout} +fi + +################################### +# Remove temp directories +################################### +if [ "${KEEPDATA}" != "YES" ] ; then + rm -rf ${DATA} +fi + diff --git a/jobs/JGDAS_ATMOS_GEMPAK_META_NCDC b/jobs/JGDAS_ATMOS_GEMPAK_META_NCDC new file mode 100755 index 0000000000..6948d29df6 --- /dev/null +++ b/jobs/JGDAS_ATMOS_GEMPAK_META_NCDC @@ -0,0 +1,101 @@ +#! /usr/bin/env bash + +############################################ +# GDAS GEMPAK META NCDC PRODUCT GENERATION +############################################ + +# TODO (#1222) This j-job is not part of the rocoto + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "gempak_meta" -c "base gempak" + +################################ +# Set up the HOME directory +################################ +export HOMEgfs=${HOMEgfs:-${PACKAGEROOT}/gfs.${gfs_ver}} +export EXECgfs=${EXECgfs:-${HOMEgfs}/exec} +export PARMgfs=${PARMgfs:-${HOMEgfs}/parm} +export PARMwmo=${PARMwmo:-${HOMEgfs}/parm/wmo} +export PARMproduct=${PARMproduct:-${HOMEgfs}/parm/product} +export FIXgempak=${FIXgempak:-${HOMEgfs}/gempak/fix} +export USHgempak=${USHgempak:-${HOMEgfs}/gempak/ush} +export SRCgfs=${SRCgfs:-${HOMEgfs}/scripts} +export UTILgfs=${UTILgfs:-${HOMEgfs}/util} + +# +# Now set up GEMPAK/NTRANS environment +# + +cp ${FIXgempak}/datatype.tbl datatype.tbl + +################################### +# Specify NET and RUN Name and model +#################################### +export COMPONENT="atmos" +export MODEL=GDAS +export GRID_NAME=gdas +export fend=09 + +###################################################### +# set increment to 6 hours -- 3 hours is available. +###################################################### +export finc=6 +export fstart=00 + +export DBN_ALERT_TYPE=GDAS_METAFILE + +export SENDDBN=${SENDDBN:-NO} +export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} + +############################################## +# Define COM directories +############################################## +export COMIN=${COMIN:-$(compath.py ${envir}/${NET}/${gfs_ver})/${RUN}.${PDY}/${cyc}/${COMPONENT}/gempak} +export COMINgdas=${COMINgdas:-$(compath.py ${envir}/${NET}/${gfs_ver})/${RUN}} +export COMOUT=${COMOUT:-$(compath.py -o ${NET}/${gfs_ver}/${RUN}.${PDY})/${cyc}/${COMPONENT}/gempak/meta} +export COMOUTncdc=${COMOUTncdc:-$(compath.py -o ${NET}/${gfs_ver}/${RUN}.${PDY})/${cyc}/${COMPONENT}} + +export COMINukmet=${COMINukmet:-$(compath.py ${envir}/ukmet/${ukmet_ver})/ukmet} +export COMINecmwf=${COMINecmwf:-$(compath.py ${envir}/ecmwf/${ecmwf_ver})/ecmwf} + +export COMOUTukmet=${COMOUT} +export COMOUTecmwf=${COMOUT} + +mkdir -m 775 -p ${COMOUT} ${COMOUTncdc} ${COMOUTukmet} ${COMOUTecmwf} + +export pgmout=OUTPUT.$$ + + +######################################################## +# Execute the script. +${USHgempak}/gdas_meta_na.sh +${USHgempak}/gdas_ecmwf_meta_ver.sh +${USHgempak}/gdas_meta_loop.sh +${USHgempak}/gdas_ukmet_meta_ver.sh +export err=$?; err_chk +######################################################## + +############################################ +# GDAS GEMPAK NCDC PRODUCT GENERATION +############################################ + +######################################################## +# Execute the script. +${SRCgfs}/exgdas_atmos_gempak_gif_ncdc.sh +export err=$?; err_chk +######################################################## + +############################################ +# print exec I/O output +############################################ +if [ -e "${pgmout}" ] ; then + cat ${pgmout} +fi + +################################### +# Remove temp directories +################################### +if [ "${KEEPDATA}" != "YES" ] ; then + rm -rf ${DATA} +fi + diff --git a/jobs/JGDAS_ATMOS_VERFOZN b/jobs/JGDAS_ATMOS_VERFOZN new file mode 100755 index 0000000000..65479a9fec --- /dev/null +++ b/jobs/JGDAS_ATMOS_VERFOZN @@ -0,0 +1,43 @@ +#! /usr/bin/env bash + +############################################################# +# Set up environment for GDAS Ozone Monitor job +############################################################# +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "verfozn" -c "base verfozn" + +############################################# +# determine PDY and cyc for previous cycle +############################################# +# shellcheck disable=SC2153 +GDATE=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${assim_freq} hours") +export gPDY=${GDATE:0:8} +export gcyc=${GDATE:8:2} + +#--------------------------------------------- +# OZN_TANKDIR - WHERE OUTPUT DATA WILL RESIDE +# +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_ANALYSIS +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_OZNMON + +export oznstat="${COM_ATMOS_ANALYSIS}/gdas.t${cyc}z.oznstat" +export TANKverf_ozn=${TANKverf_ozn:-${COM_ATMOS_OZNMON}} + +if [[ ! -d ${TANKverf_ozn} ]]; then mkdir -p -m 775 ${TANKverf_ozn} ; fi + +#------------------------------------------------------- +# Execute the script. +# +"${SCRgfs}/exgdas_atmos_verfozn.sh" +err=$? +if (( err != 0 )); then + exit "${err}" +fi + + +################################ +# Remove the Working Directory +################################ +[[ "${KEEPDATA}" = "NO" ]] && rm -rf "${DATA}" + +exit 0 diff --git a/jobs/JGDAS_ATMOS_VERFRAD b/jobs/JGDAS_ATMOS_VERFRAD new file mode 100755 index 0000000000..d440f91b6e --- /dev/null +++ b/jobs/JGDAS_ATMOS_VERFRAD @@ -0,0 +1,46 @@ +#! /usr/bin/env bash + +############################################################# +# Set up environment for GDAS Radiance Monitor job +############################################################# +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "verfrad" -c "base verfrad" + +############################################# +# determine PDY and cyc for previous cycle +############################################# +# shellcheck disable=SC2153 +GDATE=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${assim_freq} hours") +export gPDY=${GDATE:0:8} +export gcyc=${GDATE:8:2} + +############################################# +# COMOUT - WHERE GSI OUTPUT RESIDES +# TANKverf - WHERE OUTPUT DATA WILL RESIDE +############################################# +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_ANALYSIS +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_RADMON +YMD=${gPDY} HH=${gcyc} generate_com -rx COM_ATMOS_RADMON_PREV:COM_ATMOS_RADMON_TMPL + +export biascr="${COM_ATMOS_ANALYSIS}/gdas.t${cyc}z.abias" +export radstat="${COM_ATMOS_ANALYSIS}/gdas.t${cyc}z.radstat" +export TANKverf_rad=${TANKverf_rad:-${COM_ATMOS_RADMON}} +export TANKverf_radM1=${TANKverf_radM1:-${COM_ATMOS_RADMON_PREV}} + +if [[ ! -d ${TANKverf_rad} ]]; then mkdir -p -m 775 ${TANKverf_rad} ; fi +if [[ ! -d ${TANKverf_radM1} ]]; then mkdir -p -m 775 ${TANKverf_radM1} ; fi + +######################################################## +# Execute the script. +"${SCRgfs}/exgdas_atmos_verfrad.sh" +err=$? +if (( err != 0 )); then + exit "${err}" +fi + +################################ +# Remove the Working Directory +################################ +[[ "${KEEPDATA}" = "NO" ]] && rm -rf "${DATA}" + +exit 0 diff --git a/jobs/JGDAS_ENKF_ARCHIVE b/jobs/JGDAS_ENKF_ARCHIVE new file mode 100755 index 0000000000..f986fd38b2 --- /dev/null +++ b/jobs/JGDAS_ENKF_ARCHIVE @@ -0,0 +1,45 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "earc" -c "base earc" + + +############################################## +# Set variables used in the script +############################################## +export CDUMP=${RUN/enkf} + +YMD=${PDY} HH=${cyc} generate_com -rx COM_TOP +MEMDIR="ensstat" YMD=${PDY} HH=${cyc} generate_com -rx \ + COM_ATMOS_ANALYSIS_ENSSTAT:COM_ATMOS_ANALYSIS_TMPL \ + COM_ATMOS_HISTORY_ENSSTAT:COM_ATMOS_HISTORY_TMPL + +############################################################### +# Run archive script +############################################################### + +"${SCRgfs}/exgdas_enkf_earc.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################################### + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + + +########################################## +# Remove the Temporary working directory +########################################## +cd "${DATAROOT}" || (echo "${DATAROOT} does not exist. ABORT!"; exit 1) +[[ ${KEEPDATA} = "NO" ]] && rm -rf "${DATA}" + +exit 0 diff --git a/jobs/JGDAS_ENKF_DIAG b/jobs/JGDAS_ENKF_DIAG new file mode 100755 index 0000000000..40f2968869 --- /dev/null +++ b/jobs/JGDAS_ENKF_DIAG @@ -0,0 +1,123 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "eobs" -c "base anal eobs analdiag ediag" + + +############################################## +# Set variables used in the script +############################################## +export CDUMP="${RUN/enkf}" +export MAKE_NSSTBUFR=${MAKE_NSSTBUFR:-"NO"} +export MAKE_ACFTBUFR=${MAKE_ACFTBUFR:-"NO"} + + +############################################## +# Begin JOB SPECIFIC work +############################################## +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +GDATE=$(${NDATE} -"${assim_freq}" "${PDY}${cyc}") +# shellcheck disable= +export gPDY=${GDATE:0:8} +export gcyc=${GDATE:8:2} +export GDUMP="gdas" +export GDUMP_ENS="enkf${GDUMP}" + +export CASE=${CASE_ENS} + +export OPREFIX="${CDUMP}.t${cyc}z." +export APREFIX="${RUN}.t${cyc}z." +export GPREFIX="${GDUMP_ENS}.t${gcyc}z." +GPREFIX_DET="${GDUMP}.t${gcyc}z." + +RUN=${CDUMP} YMD=${PDY} HH=${cyc} generate_com -rx COM_OBS +MEMDIR="ensstat" YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_ANALYSIS + +RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_OBS_PREV:COM_OBS_TMPL \ + COM_ATMOS_ANALYSIS_DET_PREV:COM_ATMOS_ANALYSIS_TMPL + +MEMDIR="ensstat" RUN=${GDUMP_ENS} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_ATMOS_HISTORY_PREV:COM_ATMOS_HISTORY_TMPL + + +export ATMGES_ENSMEAN="${COM_ATMOS_HISTORY_PREV}/${GPREFIX}atmf006.ensmean.nc" +if [ ! -f ${ATMGES_ENSMEAN} ]; then + echo "FATAL ERROR: FILE MISSING: ATMGES_ENSMEAN = ${ATMGES_ENSMEAN}" + exit 1 +fi + +# Link observational data +export PREPQC="${COM_OBS}/${OPREFIX}prepbufr" +if [[ ! -f ${PREPQC} ]]; then + echo "WARNING: Global PREPBUFR FILE ${PREPQC} MISSING" +fi +export TCVITL="${COM_OBS}/${OPREFIX}syndata.tcvitals.tm00" +if [[ ${DONST} = "YES" ]]; then + export NSSTBF="${COM_OBS}/${OPREFIX}nsstbufr" +fi +export PREPQCPF="${COM_OBS}/${OPREFIX}prepbufr.acft_profiles" + +# Guess Bias correction coefficients related to control +export GBIAS=${COM_ATMOS_ANALYSIS_DET_PREV}/${GPREFIX_DET}abias +export GBIASPC=${COM_ATMOS_ANALYSIS_DET_PREV}/${GPREFIX_DET}abias_pc +export GBIASAIR=${COM_ATMOS_ANALYSIS_DET_PREV}/${GPREFIX_DET}abias_air +export GRADSTAT=${COM_ATMOS_ANALYSIS_DET_PREV}/${GPREFIX_DET}radstat + +# Bias correction coefficients related to ensemble mean +export ABIAS="${COM_ATMOS_ANALYSIS}/${APREFIX}abias.ensmean" +export ABIASPC="${COM_ATMOS_ANALYSIS}/${APREFIX}abias_pc.ensmean" +export ABIASAIR="${COM_ATMOS_ANALYSIS}/${APREFIX}abias_air.ensmean" +export ABIASe="${COM_ATMOS_ANALYSIS}/${APREFIX}abias_int.ensmean" + +# Diagnostics related to ensemble mean +export GSISTAT="${COM_ATMOS_ANALYSIS}/${APREFIX}gsistat.ensmean" +export CNVSTAT="${COM_ATMOS_ANALYSIS}/${APREFIX}cnvstat.ensmean" +export OZNSTAT="${COM_ATMOS_ANALYSIS}/${APREFIX}oznstat.ensmean" +export RADSTAT="${COM_ATMOS_ANALYSIS}/${APREFIX}radstat.ensmean" + +# Select observations based on ensemble mean +export RUN_SELECT="YES" +export USE_SELECT="NO" +export SELECT_OBS="${COM_ATMOS_ANALYSIS}/${APREFIX}obsinput.ensmean" + +export DIAG_SUFFIX="_ensmean" +export DIAG_COMPRESS="NO" + +# GSI namelist options specific to eobs +export SETUP_INVOBS="passive_bc=.false.,${SETUP_INVOBS}" + +# Ensure clean stat tarballs for ensemble mean +for fstat in ${CNVSTAT} ${OZNSTAT} ${RADSTAT}; do + [[ -f ${fstat} ]] && rm -f ${fstat} +done + + +############################################################### +# Run relevant script + +${ANALDIAGSH:-${SCRgfs}/exglobal_diag.sh} +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat ${pgmout} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 diff --git a/jobs/JGDAS_ENKF_ECEN b/jobs/JGDAS_ENKF_ECEN new file mode 100755 index 0000000000..cd77eebb55 --- /dev/null +++ b/jobs/JGDAS_ENKF_ECEN @@ -0,0 +1,68 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "ecen" -c "base ecen" + + +############################################## +# Set variables used in the script +############################################## +export CDUMP="${RUN/enkf}" + +############################################## +# Begin JOB SPECIFIC work +############################################## +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +GDATE=$(${NDATE} -"${assim_freq}" "${PDY}${cyc}") +# shellcheck disable= +export gPDY=${GDATE:0:8} +export gcyc=${GDATE:8:2} +export GDUMP="gdas" +export GDUMP_ENS="enkf${GDUMP}" + +export CASE=${CASE_ENS} + +export OPREFIX="${CDUMP}.t${cyc}z." +export APREFIX="${CDUMP}.t${cyc}z." +export APREFIX_ENS="${RUN}.t${cyc}z." +export GPREFIX="${GDUMP}.t${gcyc}z." +export GPREFIX_ENS="${GDUMP_ENS}.t${gcyc}z." + +RUN=${CDUMP} YMD=${PDY} HH=${cyc} generate_com -rx \ + COM_ATMOS_ANALYSIS_DET:COM_ATMOS_ANALYSIS_TMPL + +MEMDIR="ensstat" YMD=${PDY} HH=${cyc} generate_com -rx \ + COM_ATMOS_ANALYSIS_STAT:COM_ATMOS_ANALYSIS_TMPL + +MEMDIR="ensstat" RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_ATMOS_HISTORY_STAT_PREV:COM_ATMOS_HISTORY_TMPL + + +############################################################### +# Run relevant script + +${ENKFRECENSH:-${SCRgfs}/exgdas_enkf_ecen.sh} +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat ${pgmout} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 diff --git a/jobs/JGDAS_ENKF_FCST b/jobs/JGDAS_ENKF_FCST new file mode 100755 index 0000000000..53408df8cf --- /dev/null +++ b/jobs/JGDAS_ENKF_FCST @@ -0,0 +1,84 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "efcs" -c "base fcst efcs" + + +############################################## +# Set variables used in the script +############################################## +export CDUMP=${RUN/enkf} + +############################################## +# Begin JOB SPECIFIC work +############################################## + +export CASE=${CASE_ENS} + +YMD=${PDY} HH=${cyc} generate_com -rx COM_TOP + + +# Forecast length for EnKF forecast +export FHMIN=${FHMIN_ENKF} +export FHOUT=${FHOUT_ENKF} +export FHMAX=${FHMAX_ENKF} + +# Get ENSBEG/ENSEND from ENSGRP and NMEM_EFCSGRP +if [[ $CDUMP == "gfs" ]]; then + export NMEM_EFCSGRP=${NMEM_EFCSGRP_GFS:-${NMEM_EFCSGRP:-1}} +fi +export ENSEND=$((NMEM_EFCSGRP * 10#${ENSGRP})) +export ENSBEG=$((ENSEND - NMEM_EFCSGRP + 1)) + +if [[ ${DO_WAVE} == "YES" ]]; then + declare -rx RUNwave="${RUN}wave" +fi + +############################################################### +# Run relevant script + +${ENKFFCSTSH:-${SCRgfs}/exgdas_enkf_fcst.sh} +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + + +# Double check the status of members in ENSGRP +EFCSGRP="${COM_TOP}/efcs.grp${ENSGRP}" +npass=0 +if [ -f ${EFCSGRP} ]; then + npass=$(grep "PASS" ${EFCSGRP} | wc -l) +fi +echo "${npass}/${NMEM_EFCSGRP} members successfull in efcs.grp${ENSGRP}" +if [ ${npass} -ne ${NMEM_EFCSGRP} ]; then + echo "FATAL ERROR: Failed members in group ${ENSGRP}, ABORT!" + cat ${EFCSGRP} + exit 99 +fi + + +############################################## +# Send Alerts +############################################## +if [ ${SENDDBN} = YES ] ; then + ${DBNROOT}/bin/dbn_alert MODEL ENKF1_MSC_fcsstat ${job} ${EFCSGRP} +fi + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [ -e "${pgmout}" ] ; then + cat ${pgmout} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + +exit 0 diff --git a/jobs/JGDAS_ENKF_POST b/jobs/JGDAS_ENKF_POST new file mode 100755 index 0000000000..0f7039d614 --- /dev/null +++ b/jobs/JGDAS_ENKF_POST @@ -0,0 +1,49 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "epos" -c "base epos" + + +############################################## +# Set variables used in the script +############################################## +export CDUMP=${RUN/enkf} + + +############################################## +# Begin JOB SPECIFIC work +############################################## +export GFS_NCIO=${GFS_NCIO:-"YES"} + +export PREFIX="${RUN}.t${cyc}z." + +export LEVS=$((LEVS-1)) + + +############################################################### +# Run relevant script + +${ENKFPOSTSH:-${SCRgfs}/exgdas_enkf_post.sh} +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [ -e "${pgmout}" ] ; then + cat ${pgmout} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 diff --git a/jobs/JGDAS_ENKF_SELECT_OBS b/jobs/JGDAS_ENKF_SELECT_OBS new file mode 100755 index 0000000000..7c02512989 --- /dev/null +++ b/jobs/JGDAS_ENKF_SELECT_OBS @@ -0,0 +1,149 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "eobs" -c "base anal eobs" + + +############################################## +# Set variables used in the script +############################################## +export CDUMP=${RUN/enkf} +export MAKE_NSSTBUFR=${MAKE_NSSTBUFR:-"NO"} +export MAKE_ACFTBUFR=${MAKE_ACFTBUFR:-"NO"} + + +############################################## +# Begin JOB SPECIFIC work +############################################## +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +GDATE=$(${NDATE} -${assim_freq} ${PDY}${cyc}) +# shellcheck disable= +export gPDY=${GDATE:0:8} +export gcyc=${GDATE:8:2} +export GDUMP="gdas" +export GDUMP_ENS="enkf${GDUMP}" + +export OPREFIX="${CDUMP}.t${cyc}z." +export APREFIX="${RUN}.t${cyc}z." +export GPREFIX="${GDUMP_ENS}.t${gcyc}z." +APREFIX_DET="${CDUMP}.t${cyc}z." +GPREFIX_DET="${GDUMP}.t${gcyc}z." + +export GSUFFIX=".ensmean.nc" + +# Generate COM variables from templates +RUN=${CDUMP} YMD=${PDY} HH=${cyc} generate_com -rx COM_OBS +MEMDIR='ensstat' YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_ANALYSIS +declare -rx COM_ATMOS_ANALYSIS_ENS="${COM_ATMOS_ANALYSIS}" + +RUN=${CDUMP} YMD=${PDY} HH=${cyc} generate_com -r COM_ATMOS_ANALYSIS_DET:COM_ATMOS_ANALYSIS_TMPL + +MEMDIR='ensstat' RUN=${GDUMP_ENS} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_ATMOS_ANALYSIS_PREV:COM_ATMOS_ANALYSIS_TMPL \ + COM_ATMOS_HISTORY_PREV:COM_ATMOS_HISTORY_TMPL \ + +RUN="${GDUMP}" YMD=${gPDY} HH=${gcyc} generate_com -r COM_ATMOS_ANALYSIS_DET_PREV:COM_ATMOS_ANALYSIS_TMPL + +mkdir -m 775 -p "${COM_ATMOS_ANALYSIS}" + +export ATMGES_ENSMEAN="${COM_ATMOS_HISTORY_PREV}/${GPREFIX}atmf006${GSUFFIX}" +if [[ ! -f ${ATMGES_ENSMEAN} ]]; then + echo "FATAL ERROR: FILE MISSING: ATMGES_ENSMEAN = ${ATMGES_ENSMEAN}" + exit 1 +fi + +# Ignore masking of chained commands and possible misspelling warning +# shellcheck disable=SC2153,SC2312 +LEVS=$(${NCDUMP} -h "${ATMGES_ENSMEAN}" | grep -i "pfull" | head -1 | awk -F" = " '{print $2}' | awk -F" " '{print $1}') # get LEVS +# shellcheck disable= +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" +export LEVS + +# Link observational data +export PREPQC="${COM_OBS}/${OPREFIX}prepbufr" +if [[ ! -f ${PREPQC} ]]; then + echo "WARNING: Global PREPBUFR FILE ${PREPQC} MISSING" +fi +export TCVITL="${COM_OBS}/${APREFIX_DET}syndata.tcvitals.tm00" +if [[ ${DONST} = "YES" ]]; then + export NSSTBF="${COM_OBS}/${OPREFIX}nsstbufr" +fi +export PREPQCPF="${COM_OBS}/${OPREFIX}prepbufr.acft_profiles" + +# Deterministic analysis and increment files +export SFCANL="${COM_ATMOS_ANALYSIS_DET}/${APREFIX_DET}sfcanl.nc" +export DTFANL="${COM_ATMOS_ANALYSIS_DET}/${APREFIX_DET}dtfanl.nc" +export ATMANL="${COM_ATMOS_ANALYSIS_DET}/${APREFIX_DET}atmanl.nc" +export ATMINC="${COM_ATMOS_ANALYSIS_DET}/${APREFIX_DET}atminc.nc" + +# Guess Bias correction coefficients related to control +export GBIAS=${COM_ATMOS_ANALYSIS_DET_PREV}/${GPREFIX_DET}abias +export GBIASPC=${COM_ATMOS_ANALYSIS_DET_PREV}/${GPREFIX_DET}abias_pc +export GBIASAIR=${COM_ATMOS_ANALYSIS_DET_PREV}/${GPREFIX_DET}abias_air +export GRADSTAT=${COM_ATMOS_ANALYSIS_DET_PREV}/${GPREFIX_DET}radstat + +# Bias correction coefficients related to ensemble mean +export ABIAS="${COM_ATMOS_ANALYSIS}/${APREFIX}abias.ensmean" +export ABIASPC="${COM_ATMOS_ANALYSIS}/${APREFIX}abias_pc.ensmean" +export ABIASAIR="${COM_ATMOS_ANALYSIS}/${APREFIX}abias_air.ensmean" +export ABIASe="${COM_ATMOS_ANALYSIS}/${APREFIX}abias_int.ensmean" + +# Diagnostics related to ensemble mean +export GSISTAT="${COM_ATMOS_ANALYSIS}/${APREFIX}gsistat.ensmean" +export CNVSTAT="${COM_ATMOS_ANALYSIS}/${APREFIX}cnvstat.ensmean" +export OZNSTAT="${COM_ATMOS_ANALYSIS}/${APREFIX}oznstat.ensmean" +export RADSTAT="${COM_ATMOS_ANALYSIS}/${APREFIX}radstat.ensmean" + +# Select observations based on ensemble mean +export RUN_SELECT="YES" +export USE_SELECT="NO" +export SELECT_OBS="${COM_ATMOS_ANALYSIS}/${APREFIX}obsinput.ensmean" + +export DIAG_SUFFIX="_ensmean" + +# GSI namelist options specific to eobs +export SETUP_INVOBS="passive_bc=.false.,${SETUP_INVOBS}" + +# Ensure clean stat tarballs for ensemble mean +for fstat in ${CNVSTAT} ${OZNSTAT} ${RADSTAT}; do + [[ -f ${fstat} ]] && rm -f ${fstat} +done + + +############################################################### +# Run relevant script + +${INVOBSSH:-${SCRgfs}/exgdas_enkf_select_obs.sh} +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + + +############################################## +# Send Alerts +############################################## +if [[ ${SENDDBN} = YES ]] ; then + ${DBNROOT}/bin/dbn_alert MODEL ENKF1_MSC_gsistat ${job} ${GSISTAT} +fi + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat ${pgmout} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 diff --git a/jobs/JGDAS_ENKF_SFC b/jobs/JGDAS_ENKF_SFC new file mode 100755 index 0000000000..3214812db8 --- /dev/null +++ b/jobs/JGDAS_ENKF_SFC @@ -0,0 +1,69 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "esfc" -c "base esfc" + + +############################################## +# Set variables used in the script +############################################## +export CDUMP="${RUN/enkf}" + +############################################## +# Begin JOB SPECIFIC work +############################################## +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +GDATE=$(${NDATE} -"${assim_freq}" "${PDY}${cyc}") +# shellcheck disable= +export gPDY=${GDATE:0:8} +export gcyc=${GDATE:8:2} +export GDUMP="gdas" +export GDUMP_ENS="enkf${GDUMP}" + +export OPREFIX="${CDUMP}.t${cyc}z." +export GPREFIX="${GDUMP}.t${gcyc}z." +export APREFIX="${CDUMP}.t${cyc}z." + +export CASE=${CASE_ENS} + +export OPREFIX="${CDUMP}.t${cyc}z." +export APREFIX="${CDUMP}.t${cyc}z." +export APREFIX_ENS="${RUN}.t${cyc}z." +export GPREFIX="${GDUMP}.t${gcyc}z." +export GPREFIX_ENS="${GDUMP_ENS}.t${gcyc}z." + +RUN=${CDUMP} YMD=${PDY} HH=${cyc} generate_com -rx COM_OBS \ + COM_ATMOS_ANALYSIS_DET:COM_ATMOS_ANALYSIS_TMPL + +RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_OBS_PREV:COM_OBS_TMPL \ + COM_ATMOS_ANALYSIS_DET_PREV:COM_ATMOS_ANALYSIS_TMPL + +############################################################### +# Run relevant script + +${ENKFRESFCSH:-${SCRgfs}/exgdas_enkf_sfc.sh} +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat ${pgmout} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 diff --git a/jobs/JGDAS_ENKF_UPDATE b/jobs/JGDAS_ENKF_UPDATE new file mode 100755 index 0000000000..1050529165 --- /dev/null +++ b/jobs/JGDAS_ENKF_UPDATE @@ -0,0 +1,69 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "eupd" -c "base anal eupd" + + +############################################## +# Set variables used in the script +############################################## +export CDUMP="${RUN/enkf}" + + +############################################## +# Begin JOB SPECIFIC work +############################################## +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +GDATE=$(${NDATE} -"${assim_freq}" "${PDY}${cyc}") +# shellcheck disable= +export gPDY=${GDATE:0:8} +export gcyc=${GDATE:8:2} +export GDUMP="gdas" +export GDUMP_ENS="enkf${GDUMP}" + +export APREFIX="${RUN}.t${cyc}z." +export GPREFIX="${GDUMP_ENS}.t${gcyc}z." + +MEMDIR="ensstat" YMD=${PDY} HH=${cyc} generate_com -rx \ + COM_ATMOS_ANALYSIS_STAT:COM_ATMOS_ANALYSIS_TMPL + +MEMDIR="ensstat" RUN="enkfgdas" YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_ATMOS_HISTORY_STAT_PREV:COM_ATMOS_HISTORY_TMPL + + +############################################################### +# Run relevant script + +${ENKFUPDSH:-${SCRgfs}/exgdas_enkf_update.sh} +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + + +############################################## +# Send Alerts +############################################## +if [ ${SENDDBN} = YES ] ; then + "${DBNROOT}/bin/dbn_alert" "MODEL" "ENKF1_MSC_enkfstat" "${job}" "${COM_ATMOS_ANALYSIS_STAT}/${APREFIX}enkfstat" +fi + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [ -e "${pgmout}" ] ; then + cat ${pgmout} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 diff --git a/jobs/JGDAS_FIT2OBS b/jobs/JGDAS_FIT2OBS new file mode 100755 index 0000000000..7638e4f0c8 --- /dev/null +++ b/jobs/JGDAS_FIT2OBS @@ -0,0 +1,92 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "fit2obs" -c "base fit2obs" + + +############################################## +# Set variables used in the script +############################################## + +export CDUMP=${RUN/enkf} + +# Ignore spelling warning; nothing is misspelled +# shellcheck disable=SC2153 +CDATE=$(${NDATE} -"${VBACKUP_FITS}" "${PDY}${cyc}") # set CDATE to lookback cycle for use in fit2obs package +export CDATE +vday=${CDATE:0:8} +vcyc=${CDATE:8:2} + +# These are used by fit2obs, so we can't change them to the standard COM variable names +# shellcheck disable=SC2153 +YMD=${vday} HH=${vcyc} generate_com -rx COM_INA:COM_ATMOS_ANALYSIS_TMPL +RUN=${CDUMP} YMD=${vday} HH=${vcyc} generate_com -rx COM_PRP:COM_OBS_TMPL + +# We want to defer variable expansion, so ignore warning about single quotes +# shellcheck disable=SC2016 +export COM_INF='$ROTDIR/vrfyarch/gfs.$fdy/$fzz' + +export PRPI=${COM_PRP}/${RUN}.t${vcyc}z.prepbufr +# shellcheck disable=SC2153 +export sig1=${COM_INA}/${RUN}.t${vcyc}z.atmanl.nc +export sfc1=${COM_INA}/${RUN}.t${vcyc}z.atmanl.nc +export CNVS=${COM_INA}/${RUN}.t${vcyc}z.cnvstat + +export OUTPUT_FILETYPE=${OUTPUT_FILETYPE:-netcdf} + +export FIT_DIR=${ARCDIR}/fits +[[ ! -d "${FIT_DIR}" ]] && mkdir -p "${FIT_DIR}" +export HORZ_DIR=${ARCDIR}/horiz +[[ ! -d "${HORZ_DIR}" ]] && mkdir -p "${HORZ_DIR}" +export COMLOX=${DATA}/fitx +[[ ! -d "${COMLOX}" ]] && mkdir -p "${COMLOX}" + +echo "echo err_chk">"${DATA}/err_chk"; chmod 755 "${DATA}/err_chk" +echo "echo postmsg">"${DATA}/postmsg"; chmod 755 "${DATA}/postmsg" + +############################################## +# Check spinup and available inputs +############################################## + +# Ignore spelling warning; nothing is misspelled +# shellcheck disable=SC2153 +if [[ ${CDATE} -gt ${SDATE} ]]; then + for file in ${PRPI} ${sig1} ${sfc1} ${CNVS}; do + if [[ ! -f "${file}" ]]; then + echo "FATAL ERROR: FILE MISSING: ${file}" + exit 1 + fi + done + + ############################################## + # RUN FIT2OBS VERIFICATION + ############################################## + + "${SCRIPTSfit2obs}/excfs_gdas_vrfyfits.sh" + status=$? + [[ ${status} -ne 0 ]] && exit "${status}" + + ############################################## + # End JOB SPECIFIC work + ############################################## + + ############################################## + # Final processing + ############################################## + if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" + fi + +else + + echo "Too early for FIT2OBS to run. Exiting." + +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd "${DATAROOT}" || (echo "FATAL ERROR: ${DATAROOT} does not exist. ABORT!"; exit 1) +[[ ${KEEPDATA} = "NO" ]] && rm -rf "${DATA}" + +exit 0 diff --git a/jobs/JGDAS_GEMPAK b/jobs/JGDAS_GEMPAK deleted file mode 100755 index c5de5f1b56..0000000000 --- a/jobs/JGDAS_GEMPAK +++ /dev/null @@ -1,126 +0,0 @@ -#!/bin/sh - -set -xa -export PS4='$SECONDS + ' -date - -############################################ -# GDAS GEMPAK PRODUCT GENERATION -############################################ - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - -###################################### -# Set up the cycle variable -###################################### -export cycle=${cycle:-t${cyc}z} - -########################################### -# Run setpdy and initialize PDY variables -########################################### -setpdy.sh -. PDY - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} -export UTILgfs=${UTILgfs:-$HOMEgfs/util} - -############################################ -# Set up model and cycle specific variables -############################################ - -export fend=09 -export finc=3 -export fstart=00 -export GRIB=pgrb2f -export EXT="" -export DBN_ALERT_TYPE=GDAS_GEMPAK - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gdas} -export model=${model:-gdas} -export COMPONENT=${COMPONENT:-atmos} - -############################################## -# Define COM directories -############################################## -export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/$COMPONENT} -export COMOUT=${COMOUT:-${COMROOT}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/$COMPONENT/gempak} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT -fi - -export pgmout=OUTPUT.$$ - -env - -if [ -f $DATA/poescrip ]; then - rm $DATA/poescript -fi - -######################################################## -# Execute the script. -echo "$SRCgfs/exgdas_nawips.sh gdas 009 GDAS_GEMPAK " >> poescript -######################################################## - -######################################################## -# Execute the script for quater-degree grib -echo "$SRCgfs/exgdas_nawips.sh gdas_0p25 009 GDAS_GEMPAK " >>poescript -######################################################## - -cat poescript - -chmod 775 $DATA/poescript -export MP_PGMMODEL=mpmd -export MP_CMDFILE=$DATA/poescript - -ntasks=${NTASKS_GEMPAK:-$(cat $DATA/poescript | wc -l)} -ptile=${PTILE_GEMPAK:-4} -threads=${NTHREADS_GEMPAK:-1} -export OMP_NUM_THREADS=$threads -APRUN="mpirun -n $ntasks cfp " - -APRUN_GEMPAKCFP=${APRUN_GEMPAKCFP:-$APRUN} -APRUNCFP=$(eval echo $APRUN_GEMPAKCFP) - -$APRUNCFP $DATA/poescript -export err=$?; err_chk - -######################################################## - -msg="JOB $job HAS COMPLETED NORMALLY!" -postmsg $jlogfile "$msg" - -############################################ -# print exec I/O output -############################################ -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - -################################### -# Remove temp directories -################################### -if [ "$KEEPDATA" != "YES" ] ; then - rm -rf $DATA -fi - -date diff --git a/jobs/JGDAS_GEMPAK_META_NCDC b/jobs/JGDAS_GEMPAK_META_NCDC deleted file mode 100755 index 5bd7dbbbc6..0000000000 --- a/jobs/JGDAS_GEMPAK_META_NCDC +++ /dev/null @@ -1,124 +0,0 @@ -#!/bin/sh - -set -xa -export PS4='$SECONDS + ' -date - -############################################ -# GDAS GEMPAK META NCDC PRODUCT GENERATION -############################################ - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - -###################################### -# Set up the cycle variable -###################################### -export cycle=${cycle:-t${cyc}z} - -########################################### -# Run setpdy and initialize PDY variables -########################################### -setpdy.sh -. PDY - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} -export UTILgfs=${UTILgfs:-$HOMEgfs/util} - -# -# Now set up GEMPAK/NTRANS environment -# - -cp $FIXgempak/datatype.tbl datatype.tbl - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gdas} -export COMPONENT=${COMPONENT:-atmos} -export MODEL=GDAS -export GRID_NAME=gdas -export fend=09 - -###################################################### -# set increment to 6 hours -- 3 hours is available. -###################################################### -export finc=6 -export fstart=00 - -export DBN_ALERT_TYPE=GDAS_METAFILE - -############################################## -# Define COM directories -############################################## -export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/$COMPONENT/gempak} -export COMINgdas=${COMINgdas:-$(compath.py ${NET}/${envir}/${RUN})} -export COMOUT=${COMOUT:-${COMROOT}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/$COMPONENT/gempak/meta} -export COMOUTncdc=${COMOUTncdc:-${COMROOT}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/$COMPONENT} - -export COMINukmet=${COMINukmet:-$(compath.py nawips/prod/ukmet)} -export COMINecmwf=${COMINecmwf:-$(compath.py ecmwf/prod/ecmwf)} - -export COMOUTukmet=${COMOUT} -export COMOUTecmwf=${COMOUT} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTncdc $COMOUTukmet $COMOUTecmwf -fi - -export pgmout=OUTPUT.$$ - -env - -######################################################## -# Execute the script. -$USHgempak/gdas_meta_na.sh -$USHgempak/gdas_ecmwf_meta_ver.sh -$USHgempak/gdas_meta_loop.sh -$USHgempak/gdas_ukmet_meta_ver.sh -export err=$?; err_chk -######################################################## - -############################################ -# GDAS GEMPAK NCDC PRODUCT GENERATION -############################################ - -######################################################## -# Execute the script. -$SRCgfs/exgempak_gdas_gif_ncdc.sh -export err=$?; err_chk -######################################################## - -msg="JOB $job HAS COMPLETED NORMALLY!" -postmsg $jlogfile "$msg" - -############################################ -# print exec I/O output -############################################ -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - -################################### -# Remove temp directories -################################### -if [ "$KEEPDATA" != "YES" ] ; then - rm -rf $DATA -fi - -date diff --git a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_BMAT b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_BMAT new file mode 100755 index 0000000000..a1ecc116ea --- /dev/null +++ b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_BMAT @@ -0,0 +1,44 @@ +#!/bin/bash +source "${HOMEgfs}/ush/preamble.sh" +export WIPE_DATA="NO" + +export DATA="${DATAROOT}/${RUN}ocnanal_${cyc}" +source "${HOMEgfs}/ush/jjob_header.sh" -e "ocnanalrun" -c "base ocnanal ocnanalrun" + + +############################################## +# Set variables used in the script +############################################## + + +############################################## +# Begin JOB SPECIFIC work +############################################## + +export COMOUT=${COMOUT:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/ocean} + +############################################################### +# Run relevant script + +EXSCRIPT=${GDASOCNBMATSH:-${HOMEgfs}/sorc/gdas.cd/scripts/exgdas_global_marine_analysis_bmat.sh} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +########################################## +# Do not remove the Temporary working directory (do this in POST) +########################################## +cd "${DATAROOT}" || exit 1 + +exit 0 diff --git a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_BMAT_VRFY b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_BMAT_VRFY new file mode 100755 index 0000000000..08e7da60c0 --- /dev/null +++ b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_BMAT_VRFY @@ -0,0 +1,43 @@ +#!/bin/bash +source "${HOMEgfs}/ush/preamble.sh" +export WIPE_DATA="NO" +export DATA="${DATAROOT}/${RUN}ocnanal_${cyc}" +source "${HOMEgfs}/ush/jjob_header.sh" -e "ocnanalrun" -c "base ocnanal ocnanalrun" + + +############################################## +# Set variables used in the script +############################################## + + +############################################## +# Begin JOB SPECIFIC work +############################################## + +export COMOUT=${COMOUT:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/ocean} + +############################################################### +# Run relevant script + +EXSCRIPT=${GDASOCNMBATVRFYSH:-${HOMEgfs}/sorc/gdas.cd/scripts/exgdas_global_marine_analysis_bmat_vrfy.sh} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +########################################## +# Do not remove the Temporary working directory (do this in POST) +########################################## +cd "${DATAROOT}" || exit 1 + +exit 0 diff --git a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_CHKPT b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_CHKPT new file mode 100755 index 0000000000..afac9fbc25 --- /dev/null +++ b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_CHKPT @@ -0,0 +1,58 @@ +#!/bin/bash +source "${HOMEgfs}/ush/preamble.sh" +export WIPE_DATA="NO" +export DATA="${DATAROOT}/${RUN}ocnanal_${cyc}" +source "${HOMEgfs}/ush/jjob_header.sh" -e "ocnanalchkpt" -c "base ocnanal ocnanalchkpt" + + +############################################## +# Set variables used in the script +############################################## +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +GDATE=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${assim_freq} hours") +export GDATE +export gPDY=${GDATE:0:8} +export gcyc=${GDATE:8:2} +export GDUMP=${GDUMP:-"gdas"} + +export GPREFIX="${GDUMP}.t${gcyc}z." +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +export APREFIX="${CDUMP}.t${cyc}z." + +# Generate COM variables from templates +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_ANALYSIS + +RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx COM_ATMOS_HISTORY_PREV:COM_ATMOS_HISTORY_TMPL + + +############################################## +# Begin JOB SPECIFIC work +############################################## + +############################################################### +# Run relevant script + +EXSCRIPT=${GDASOCNCHKPTSH:-${HOMEgfs}/sorc/gdas.cd/scripts/exgdas_global_marine_analysis_chkpt.sh} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +########################################## +# Do not remove the Temporary working directory (do this in POST) +########################################## +cd "${DATAROOT}" || exit 1 + +exit 0 diff --git a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_POST b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_POST new file mode 100755 index 0000000000..6034fc5425 --- /dev/null +++ b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_POST @@ -0,0 +1,45 @@ +#!/bin/bash +source "${HOMEgfs}/ush/preamble.sh" +export WIPE_DATA="NO" +export DATA="${DATAROOT}/${RUN}ocnanal_${cyc}" +source "${HOMEgfs}/ush/jjob_header.sh" -e "ocnanalpost" -c "base ocnanalpost" + + +############################################## +# Set variables used in the script +############################################## +export CDUMP=${CDUMP:-${RUN:-"gfs"}} +export CDATE=${CDATE:-${PDY}${cyc}} +export GDUMP=${GDUMP:-"gdas"} + +# Generate COM variables from templates +YMD=${PDY} HH=${cyc} generate_com -rx COM_OCEAN_ANALYSIS COM_ICE_RESTART + +mkdir -p "${COM_OCEAN_ANALYSIS}" +mkdir -p "${COM_ICE_RESTART}" + +############################################## +# Begin JOB SPECIFIC work +############################################## + +# Add UFSDA to PYTHONPATH +ufsdaPATH="${HOMEgfs}/sorc/gdas.cd/ush/" +PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${ufsdaPATH}" +export PYTHONPATH + +############################################################### +# Run relevant script +############################################################### + +EXSCRIPT=${GDASOCNPOSTPY:-${HOMEgfs}/sorc/gdas.cd/scripts/exgdas_global_marine_analysis_post.py} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +########################################## +# Remove the Temporary working directory +########################################## +cd "${DATAROOT}" || exit 1 +[[ "${KEEPDATA}" = "NO" ]] && rm -rf "${DATA}" + +exit 0 diff --git a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP new file mode 100755 index 0000000000..2e49a9f14d --- /dev/null +++ b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP @@ -0,0 +1,60 @@ +#!/bin/bash +source "${HOMEgfs}/ush/preamble.sh" +export DATA="${DATAROOT}/${RUN}ocnanal_${cyc}" +source "${HOMEgfs}/ush/jjob_header.sh" -e "ocnanalprep" -c "base ocnanal ocnanalprep" + + +############################################## +# Set variables used in the script +############################################## +export CDUMP=${CDUMP:-${RUN:-"gfs"}} +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +GDATE=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${assim_freq} hours") +export GDATE +export gPDY=${GDATE:0:8} +export gcyc=${GDATE:8:2} +export GDUMP=${GDUMP:-"gdas"} + +export OPREFIX="${CDUMP}.t${cyc}z." +export GPREFIX="${GDUMP}.t${gcyc}z." +export APREFIX="${CDUMP}.t${cyc}z." + +# Generate COM variables from templates +YMD=${PDY} HH=${cyc} generate_com -rx COM_OBS + +RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_OCEAN_HISTORY_PREV:COM_OCEAN_HISTORY_TMPL \ + COM_ICE_HISTORY_PREV:COM_ICE_HISTORY_TMPL \ + COM_ICE_RESTART_PREV:COM_ICE_RESTART_TMPL + +############################################## +# Begin JOB SPECIFIC work +############################################## + +# Add UFSDA to PYTHONPATH +ufsdaPATH="${HOMEgfs}/sorc/gdas.cd/ush/" +pyiodaPATH="${HOMEgfs}/sorc/gdas.cd/build/lib/python3.7/" +PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${ufsdaPATH}:${pyiodaPATH}" +export PYTHONPATH + +############################################################### +# Run relevant script + +EXSCRIPT=${GDASOCNPREPPY:-${HOMEgfs}/sorc/gdas.cd/scripts/exgdas_global_marine_analysis_prep.py} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +exit 0 diff --git a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN new file mode 100755 index 0000000000..5871497223 --- /dev/null +++ b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN @@ -0,0 +1,41 @@ +#!/bin/bash +source "${HOMEgfs}/ush/preamble.sh" +export WIPE_DATA="NO" +export DATA="${DATAROOT}/${RUN}ocnanal_${cyc}" +source "${HOMEgfs}/ush/jjob_header.sh" -e "ocnanalrun" -c "base ocnanal ocnanalrun" + + +############################################## +# Set variables used in the script +############################################## + +############################################## +# Begin JOB SPECIFIC work +############################################## + + +############################################################### +# Run relevant script + +EXSCRIPT=${GDASOCNRUNSH:-${HOMEgfs}/sorc/gdas.cd/scripts/exgdas_global_marine_analysis_run.sh} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +########################################## +# Do not remove the Temporary working directory (do this in POST) +########################################## +cd "${DATAROOT}" || exit 1 + +exit 0 diff --git a/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_VRFY b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_VRFY new file mode 100755 index 0000000000..aba76d7d1a --- /dev/null +++ b/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_VRFY @@ -0,0 +1,56 @@ +#!/bin/bash +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "ocnanalprep" -c "base ocnanal ocnanalprep" + + +############################################## +# Set variables used in the script +############################################## +export CDUMP=${CDUMP:-${RUN:-"gfs"}} +export GDUMP=${GDUMP:-"gdas"} +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +GDATE=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${assim_freq} hours") +export gPDY=${GDATE:0:8} +export gcyc=${GDATE:8:2} + +RUN=${GDUMP} YMD=${PDY} HH=${cyc} generate_com -rx COM_OCEAN_ANALYSIS +RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx COM_OCEAN_HISTORY_PREV:COM_OCEAN_HISTORY_TMPL +RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx COM_ICE_HISTORY_PREV:COM_ICE_HISTORY_TMPL +# To allow extraction of statistics from diag files +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_ANALYSIS + + +############################################## +# Begin JOB SPECIFIC work +############################################## + +# Add UFSDA to PYTHONPATH +export PYTHONPATH=${HOMEgfs}/sorc/gdas.cd/ush/:${HOMEgfs}/sorc/gdas.cd/ush/eva:${PYTHONPATH} +export PYTHONPATH=${HOMEgfs}/sorc/gdas.cd/ush/soca:${PYTHONPATH} + +############################################################### +# Run relevant script + +EXSCRIPT=${GDASOCNVRFYPY:-${HOMEgfs}/sorc/gdas.cd/scripts/exgdas_global_marine_analysis_vrfy.py} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +########################################## +# Do not remove the Temporary working directory (do this in POST) +########################################## +cd "${DATAROOT}" || exit 1 + +exit 0 diff --git a/jobs/JGFS_ATMOS_AWIPS_20KM_1P0DEG b/jobs/JGFS_ATMOS_AWIPS_20KM_1P0DEG new file mode 100755 index 0000000000..516c7a403b --- /dev/null +++ b/jobs/JGFS_ATMOS_AWIPS_20KM_1P0DEG @@ -0,0 +1,68 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "awips" -c "base awips" + +export OMP_NUM_THREADS=${OMP_NUM_THREADS:-1} + +################################ +# Set up the HOME directory +################################ +export HOMEgfs=${HOMEgfs:-${PACKAGEROOT}/gfs.${gfs_ver}} +export USHgfs=${USHgfs:-${HOMEgfs}/ush} +export EXECgfs=${EXECgfs:-${HOMEgfs}/exec} +export PARMgfs=${PARMgfs:-${HOMEgfs}/parm} +export PARMwmo=${PARMwmo:-${HOMEgfs}/parm/wmo} +export PARMproduct=${PARMproduct:-${HOMEgfs}/parm/product} +export FIXgfs=${FIXgfs:-${HOMEgfs}/fix} + +################################### +# Specify NET and RUN Name and model +#################################### +export model=${model:-gfs} +export COMPONENT="atmos" + +############################################## +# Define COM directories +############################################## +export SENDDBN=${SENDDBN:-NO} +export SENDAWIP=${SENDAWIP:-NO} +export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} + +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_WMO +GRID="0p25" YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_GRIB_0p25:COM_ATMOS_GRIB_GRID_TMPL + +if [[ ! -d "${COM_ATMOS_WMO}" ]] ; then + mkdir -m 775 -p "${COM_ATMOS_WMO}" +fi + +export pgmout=OUTPUT.$$ + + +######################################################## +# Execute the script. +# Forecast hours from F00 - F84 at 3-hour interval +# Forecast hours from F90 - F240 at 6-hour interval +######################################################### + +######################################################## +# Execute the script. +"${HOMEgfs}/scripts/exgfs_atmos_awips_20km_1p0deg.sh" "${fcsthrs}" +export err=$?; err_chk +######################################################## + +############################################ +# print exec I/O output +############################################ +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +################################### +# Remove temp directories +################################### +cd "${DATAROOT}" || pass +if [[ "${KEEPDATA}" != "YES" ]] ; then + rm -rf "${DATA}" +fi + diff --git a/jobs/JGFS_ATMOS_AWIPS_G2 b/jobs/JGFS_ATMOS_AWIPS_G2 new file mode 100755 index 0000000000..5bd7749997 --- /dev/null +++ b/jobs/JGFS_ATMOS_AWIPS_G2 @@ -0,0 +1,65 @@ +#! /usr/bin/env bash + +######################################## +# GFS_AWIPS_G2 AWIPS PRODUCT GENERATION +######################################## + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "awips" -c "base awips" + +export OMP_NUM_THREADS=${OMP_NUM_THREADS:-1} + +################################ +# Set up the HOME directory +################################ +export USHgfs=${USHgfs:-${HOMEgfs}/ush} +export EXECgfs=${EXECgfs:-${HOMEgfs}/exec} +export PARMgfs=${PARMgfs:-${HOMEgfs}/parm} +export PARMwmo=${PARMwmo:-${HOMEgfs}/parm/wmo} +export PARMproduct=${PARMproduct:-${HOMEgfs}/parm/product} +export FIXgfs=${FIXgfs:-${HOMEgfs}/fix} +export UTILgfs=${UTILgfs:-${HOMEgfs}/util} + +################################### +# Specify NET and RUN Name and model +#################################### +export model=${model:-gfs} +export COMPONENT="atmos" + +############################################## +# Define COM directories +############################################## +export SENDDBN=${SENDDBN:-NO} +export SENDAWIP=${SENDAWIP:-NO} +export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} + +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_WMO +GRID="0p25" YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_GRIB_0p25:COM_ATMOS_GRIB_GRID_TMPL + +mkdir -m 775 -p "${COM_ATMOS_WMO}" + +export pgmout=OUTPUT.$$ + + +######################################################## +# Execute the script. +######################################################### +mkdir -m 775 awips_g1 +cd ${DATA}/awips_g1 +${HOMEgfs}/scripts/exgfs_atmos_grib_awips.sh ${fcsthrs} +export err=$?; err_chk + +############################################ +# print exec I/O output +############################################ +if [ -e "${pgmout}" ] ; then + cat ${pgmout} +fi + +################################### +# Remove temp directories +################################### +if [ "${KEEPDATA}" != "YES" ] ; then + rm -rf ${DATA} +fi + diff --git a/jobs/JGFS_ATMOS_CYCLONE_GENESIS b/jobs/JGFS_ATMOS_CYCLONE_GENESIS new file mode 100755 index 0000000000..5ac97e079c --- /dev/null +++ b/jobs/JGFS_ATMOS_CYCLONE_GENESIS @@ -0,0 +1,70 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "genesis" -c "base genesis" + + +############################################## +# Set variables used in the exglobal script +############################################## +export cmodel=${RUN} + +#################################### +# SENDDBN - Issue DBNet Client Calls +#################################### +export SENDDBN=${SENDDBN:-NO} +export SENDECF=${SENDECF:-NO} + +#################################### +# Specify Execution Areas +#################################### +export HOMEens_tracker=${HOMEens_tracker:-${PACKAGEROOT}/ens_tracker.${ens_tracker_ver}} +export EXECens_tracker=${EXECens_tracker:-${HOMEens_tracker}/exec} +export FIXens_tracker=${FIXens_tracker:-${HOMEens_tracker}/fix} +export USHens_tracker=${USHens_tracker:-${HOMEens_tracker}/ush} +export SCRIPTens_tracker=${SCRIPTens_tracker:-${HOMEens_tracker}/scripts} + +############################################## +# Define COM directories +############################################## +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_GENESIS +YMD=${PDY} HH=${cyc} GRID="0p25" generate_com -rx COM_ATMOS_GRIB_0p25:COM_ATMOS_GRIB_GRID_TMPL + +# The following variables are used by the tracker scripts which are outside +# of global-workflow and therefore can't be standardized at this time +export COMIN=${COM_ATMOS_GRIB_0p25} +export gfsdir=${COM_ATMOS_GRIB_0p25} +export COMINgfs=${COM_ATMOS_GRIB_0p25} + +export COMINgenvit=${COM_ATMOS_GENESIS} +export COMOUTgenvit=${COM_ATMOS_GENESIS} +export COMOUT=${COM_ATMOS_GENESIS} + +export COMINsyn=${COMINsyn:-$(compath.py "${envir}/com/gfs/${gfs_ver}")/syndat} + +mkdir -m 775 -p "${COMOUTgenvit}" + +export JYYYY=${PDY:0:4} + +############################################## +# Run relevant script +############################################## + +${SCRIPTens_tracker}/exgfs_tc_genesis.sh +export err=$?; err_chk + +############################################## +# Final processing +############################################## +if [ -e "${pgmout}" ] ; then + cat ${pgmout} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 diff --git a/jobs/JGFS_ATMOS_CYCLONE_TRACKER b/jobs/JGFS_ATMOS_CYCLONE_TRACKER new file mode 100755 index 0000000000..a91d8e3c5b --- /dev/null +++ b/jobs/JGFS_ATMOS_CYCLONE_TRACKER @@ -0,0 +1,104 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "tracker" -c "base tracker" + + +export COMPONENT="atmos" + + +############################################## +# Set variables used in the exglobal script +############################################## +export CDATE=${CDATE:-${PDY}${cyc}} +export CDUMP=${RUN/enkf} + + +#################################### +# SENDDBN - Issue DBNet Client Calls +#################################### +export SENDDBN=${SENDDBN:-NO} +export SENDECF=${SENDECF:-NO} + +#################################### +# Specify Execution Areas +#################################### +export HOMEens_tracker=${HOMEens_tracker:-${PACKAGEROOT}/ens_tracker.${ens_tracker_ver}} +export EXECens_tracker=${EXECens_tracker:-${HOMEens_tracker}/exec} +export FIXens_tracker=${FIXens_tracker:-${HOMEens_tracker}/fix} +export USHens_tracker=${USHens_tracker:-${HOMEens_tracker}/ush} + + +############################################## +# Define COM and Data directories +############################################## +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_TRACK COM_ATMOS_GENESIS +YMD=${PDY} HH=${cyc} GRID="0p25" generate_com -rx COM_ATMOS_GRIB_0p25:COM_ATMOS_GRIB_GRID_TMPL + +if [[ ! -d "${COM_ATMOS_TRACK}" ]]; then mkdir -p "${COM_ATMOS_TRACK}"; fi + +# The following variables are used by the tracker scripts which are outside +# of global-workflow and therefore can't be standardized at this time +export COMINgfs=${COM_ATMOS_GRIB_0p25} +export gfsdir=${COM_ATMOS_GRIB_0p25} +export COMINgdas=${COM_ATMOS_GRIB_0p25} +export gdasdir=${COM_ATMOS_GRIB_0p25} +export COMOUT=${COM_ATMOS_TRACK} +export COMINsyn=${COMINsyn:-$(compath.py ${envir}/com/gfs/${gfs_ver})/syndat} + +export COMINgenvit=${COM_ATMOS_GENESIS} + +if [ ${RUN_ENVIR} = "nco" ]; then + export COMOUThur=${COMROOTp1}/hur/${envir}/global + export COMOUTatcf=${COMROOTp1}/nhc/${envir}/atcf + mkdir -m 775 -p ${COMOUThur} ${COMOUTatcf} +else +# export COMOUThur=$COMOUT +# export COMOUTatcf=$COMOUT + export COMOUThur=${DATA} + export COMOUTatcf=${DATA} +fi + +############################################## +# Run relevant script +############################################## + +############################################################# +# Execute the script +export pert="p01" +export cmodel=${CDUMP} +export loopnum=1 + +#-----------input data checking ----------------- +${USHens_tracker}/data_check_gfs.sh +export err=$?; err_chk +#------------------------------------------------ + +machine=${machine:-$(echo ${SITE})} +${USHens_tracker}/extrkr_gfs.sh ${loopnum} ${cmodel} ${CDATE} ${pert} ${DATA} +export err=$?; err_chk + + +# cat ${DATA}/trak.avnx.atcfunix.${PDY}${cyc} | \ +# sed s:AVNX:GFSO:g \ +# > ${COMOUT}/gfso.t${cyc}z.cyclone.trackatcfunix +# +# cat ${DATA}/trak.avnx.atcfunix.${PDY}${cyc} | \ +# sed s:AVNX:AVNO:g \ +# > ${COMOUT}/avn.t${cyc}z.cyclone.trackatcfunix + +############################################## +# Final processing +############################################## +if [ -e "${pgmout}" ] ; then + cat ${pgmout} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 diff --git a/jobs/JGFS_ATMOS_FBWIND b/jobs/JGFS_ATMOS_FBWIND new file mode 100755 index 0000000000..e04b06c0d6 --- /dev/null +++ b/jobs/JGFS_ATMOS_FBWIND @@ -0,0 +1,60 @@ +#! /usr/bin/env bash + +# TODO (#1221) This job is not part of the rocoto suite + +############################################ +# GFS FBWIND PRODUCT GENERATION +############################################ +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "fbwind" -c "base" + +################################ +# Set up the HOME directory +################################ +export USHgfs=${USHgfs:-${HOMEgfs}/ush} +export EXECgfs=${EXECgfs:-${HOMEgfs}/exec} +export PARMgfs=${PARMgfs:-${HOMEgfs}/parm} +export PARMwmo=${PARMwmo:-${HOMEgfs}/parm/wmo} +export PARMproduct=${PARMproduct:-${HOMEgfs}/parm/product} +export FIXgfs=${FIXgfs:-${HOMEgfs}/fix} +export UTILgfs=${UTILgfs:-${HOMEgfs}/util} + +################################### +# Specify NET and RUN Name and model +#################################### +export model=${model:-gfs} +export COMPONENT="atmos" + +############################################## +# Define COM directories +############################################## +export COMIN=${COMIN:-$(compath.py ${envir}/${NET}/${gfs_ver})/${RUN}.${PDY}/${cyc}/${COMPONENT}} +export COMOUT=${COMOUT:-$(compath.py -o ${NET}/${gfs_ver}/${RUN}.${PDY})/${cyc}/${COMPONENT}} +export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} + +export SENDDBN=${SENDDBN:-NO} +export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} + +mkdir -m 775 -p ${COMOUT} ${COMOUTwmo} + + +######################################################## +# Execute the script. +${HOMEgfs}/scripts/exgfs_atmos_fbwind.sh +export err=$?;err_chk +######################################################## + +############################################ +# print exec I/O output +############################################ +if [ -e "${pgmout}" ] ; then + cat ${pgmout} +fi + +################################### +# Remove temp directories +################################### +if [ "${KEEPDATA}" != "YES" ] ; then + rm -rf ${DATA} +fi + diff --git a/jobs/JGFS_ATMOS_FSU_GENESIS b/jobs/JGFS_ATMOS_FSU_GENESIS new file mode 100755 index 0000000000..cc730e21bb --- /dev/null +++ b/jobs/JGFS_ATMOS_FSU_GENESIS @@ -0,0 +1,79 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "genesis_fsu" -c "base genesis_fsu" + +export COMPONENT="atmos" + + +############################################## +# Set variables used in the exglobal script +############################################## +export CDATE=${CDATE:-${PDY}${cyc}} +export CDUMP=${CDUMP:-${RUN:-"gfs"}} + + +#################################### +# SENDDBN - Issue DBNet Client Calls +#################################### +export SENDDBN=${SENDDBN:-NO} +export SENDECF=${SENDECF:-NO} + +#################################### +# Specify Execution Areas +#################################### +export HOMEens_tracker=${HOMEens_tracker:-${PACKAGEROOT}/ens_tracker.${ens_tracker_ver}} +export EXECens_tracker=${EXECens_tracker:-${HOMEens_tracker}/exec} +export FIXens_tracker=${FIXens_tracker:-${HOMEens_tracker}/fix} +export USHens_tracker=${USHens_tracker:-${HOMEens_tracker}/ush} +export SCRIPTens_tracker=${SCRIPTens_tracker:-${HOMEens_tracker}/scripts} +export BINens_tracker=${BINens_tracker:-${HOMEens_tracker}/ush/FSUgenesisPY/bin} +export PYTHONPATH=${USHens_tracker}/FSUgenesisPY:${PYTHONPATH} + +############################################## +# Define COM and Data directories +############################################## +export COMIN=${ROTDIR}/${RUN}.${PDY}/${cyc}/${COMPONENT} +export COMINgfs=${COMIN} +#export gfsdir=${COMINgfs} +export gfsdir=${ROTDIR} +export COMINgdas=${COMIN} +export gdasdir=${COMINgdas} +export COMOUT=${ROTDIR}/${RUN}.${PDY}/${cyc}/${COMPONENT} +export COMINsyn=${COMINsyn:-$(compath.py ${envir}/com/gfs/${gfs_ver})/syndat} + +if [ ${RUN_ENVIR} = "nco" ]; then + export COMOUThur=${COMROOTp1}/hur/${envir}/global + export COMOUTatcf=${COMROOTp1}/nhc/${envir}/atcf + mkdir -m 775 -p ${COMOUThur} ${COMOUTatcf} +else +# export COMOUThur=$COMOUT +# export COMOUTatcf=$COMOUT + export COMOUThur=${DATA} + export COMOUTatcf=${DATA} +fi + +############################################## +# Run relevant script +############################################## + +############################################################# +# Execute the script +${SCRIPTens_tracker}/exgfs_fsu_genesis.sh +export err=$?; err_chk + +############################################## +# Final processing +############################################## +if [ -e "${pgmout}" ] ; then + cat ${pgmout} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 diff --git a/jobs/JGFS_ATMOS_GEMPAK b/jobs/JGFS_ATMOS_GEMPAK new file mode 100755 index 0000000000..ddf10342d2 --- /dev/null +++ b/jobs/JGFS_ATMOS_GEMPAK @@ -0,0 +1,153 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "gempak" -c "base gempak" + + +################################ +# Set up the HOME directory +################################ +export EXECgfs=${EXECgfs:-${HOMEgfs}/exec} +export PARMgfs=${PARMgfs:-${HOMEgfs}/parm} +export EXPDIR=${EXPDIR:-${HOMEgfs}/parm/config} +export FIXgempak=${FIXgempak:-${HOMEgfs}/gempak/fix} +export USHgempak=${USHgempak:-${HOMEgfs}/gempak/ush} +export SRCgfs=${SRCgfs:-${HOMEgfs}/scripts} + +# For half-degree P Grib files +export DO_HD_PGRB=${DO_HD_PGRB:-YES} + +############################################ +# Set up model and cycle specific variables +############################################ +export finc=${finc:-3} +export fstart=${fstart:-0} +export model=${model:-gfs} +export GRIB=${GRIB:-pgrb2f} +export EXT="" +export DBN_ALERT_TYPE=${DBN_ALERT_TYPE:-GFS_GEMPAK} + +################################### +# Specify NET and RUN Name and model +#################################### +export model=${model:-gfs} + +############################################## +# Define COM directories +############################################## +export SENDDBN=${SENDDBN:-NO} +export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} + +for grid in 0p25 0p50 1p00; do + GRID=${grid} YMD=${PDY} HH=${cyc} generate_com -rx "COM_ATMOS_GRIB_${grid}:COM_ATMOS_GRIB_GRID_TMPL" +done + +for grid in 1p00 0p50 0p25 40km 35km_atl 35km_pac; do + prod_dir="COM_ATMOS_GEMPAK_${grid}" + GRID=${grid} YMD=${PDY} HH=${cyc} generate_com -rx "COM_ATMOS_GEMPAK_${grid}:COM_ATMOS_GEMPAK_TMPL" + + if [[ ! -d "${!prod_dir}" ]] ; then + mkdir -m 775 -p "${!prod_dir}" + fi +done + +# TODO: These actions belong in an ex-script not a j-job +if [[ -f poescript ]]; then + rm -f poescript +fi + +ocean_domain_max=180 +if (( ocean_domain_max > FHMAX_GFS )); then + ocean_domain_max=${FHMAX_GFS} +fi + +################################################################# +# Execute the script for the 384 hour 1 degree grib +################################################################## +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_1p00} &> ${DATA}/gfs_1p0.$$.1 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_1p00} &> ${DATA}/gfs_1p0.$$.2 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_1p00} &> ${DATA}/gfs_1p0.$$.3 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_1p00} &> ${DATA}/gfs_1p0.$$.4 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_1p00} &> ${DATA}/gfs_1p0.$$.5 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_1p00} &> ${DATA}/gfs_1p0.$$.6 " >> poescript + +################################################################# +# Execute the script for the half-degree grib +################################################################## +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs_0p50 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p50} &> ${DATA}/gfs_0p5.$$.1 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs_0p50 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p50} &> ${DATA}/gfs_0p5.$$.2 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs_0p50 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p50} &> ${DATA}/gfs_0p5.$$.3 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs_0p50 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p50} &> ${DATA}/gfs_0p5.$$.4 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs_0p50 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p50} &> ${DATA}/gfs_0p5.$$.5 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs_0p50 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p50} &> ${DATA}/gfs_0p5.$$.6 " >> poescript + +################################################################# +# Execute the script for the quater-degree grib +#################################################################### +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.1 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.2 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.3 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.4 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.5 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.6 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.7 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.8 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.9 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs_0p25 ${FHMAX_GFS} GFS_GEMPAK ${COM_ATMOS_GEMPAK_0p25}&> ${DATA}/gfs_0p25.$$.10 " >> poescript + +#################################################################### +# Execute the script to create the 35km Pacific grids for OPC +##################################################################### +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs35_pac ${ocean_domain_max} GFS_GEMPAK_WWB ${COM_ATMOS_GEMPAK_35km_pac} &> ${DATA}/gfs35_pac.$$.1 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs35_pac ${ocean_domain_max} GFS_GEMPAK_WWB ${COM_ATMOS_GEMPAK_35km_pac} &> ${DATA}/gfs35_pac.$$.2 " >> poescript + +#################################################################### +# Execute the script to create the 35km Atlantic grids for OPC +##################################################################### +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs35_atl ${ocean_domain_max} GFS_GEMPAK_WWB ${COM_ATMOS_GEMPAK_35km_atl} &> ${DATA}/gfs35_atl.$$.1 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs35_atl ${ocean_domain_max} GFS_GEMPAK_WWB ${COM_ATMOS_GEMPAK_35km_atl} &> ${DATA}/gfs35_atl.$$.2 " >> poescript + +##################################################################### +# Execute the script to create the 40km grids for HPC +###################################################################### +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs40 ${ocean_domain_max} GFS_GEMPAK_WWB ${COM_ATMOS_GEMPAK_40km} &> ${DATA}/gfs40.$$.1 " >> poescript +echo "time ${SRCgfs}/exgfs_atmos_nawips.sh gfs40 ${ocean_domain_max} GFS_GEMPAK_WWB ${COM_ATMOS_GEMPAK_40km} &> ${DATA}/gfs40.$$.2 " >> poescript + +if [[ ${CFP_MP:-"NO"} == "YES" ]]; then + # Add task number to the MPMD script + nl -n ln -v 0 poescript > poescript.new + mv poescript.new poescript +fi + +cat poescript + +chmod 775 ${DATA}/poescript +export MP_PGMMODEL=mpmd +export MP_CMDFILE=${DATA}/poescript + +ntasks=$(cat ${DATA}/poescript | wc -l) +ptile=${PTILE_GEMPAK:-4} +threads=${NTHREADS_GEMPAK:-1} +export OMP_NUM_THREADS=${threads} +APRUN=${APRUN:-"mpiexec -l -np ${ntasks} --cpu-bind verbose,core cfp"} + +APRUN_GEMPAKCFP=${APRUN_GEMPAKCFP:-${APRUN}} +APRUNCFP=${APRUN_GEMPAKCFP} + +${APRUNCFP} ${DATA}/poescript +export err=$?; err_chk + +############################################ +# print exec I/O output +############################################ +if [ -e "${pgmout}" ] ; then + cat ${pgmout} +fi + +################################### +# Remove temp directories +################################### +if [ "${KEEPDATA}" != "YES" ] ; then + rm -rf ${DATA} +fi + diff --git a/jobs/JGFS_ATMOS_GEMPAK_META b/jobs/JGFS_ATMOS_GEMPAK_META new file mode 100755 index 0000000000..b7786b1f49 --- /dev/null +++ b/jobs/JGFS_ATMOS_GEMPAK_META @@ -0,0 +1,87 @@ +#! /usr/bin/env bash + +# TODO (#1222) This job is not part of the rocoto suite + +############################################ +# GFS GEMPAK META PRODUCT GENERATION +############################################ +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "gempak_meta" -e "base" + + +############################################### +# Set MP variables +############################################### +export LAUNCH_MODE=MPI +export OMP_NUM_THREADS=1 +export MP_LABELIO=yes +export MP_PULSE=0 +export MP_DEBUG_NOTIMEOUT=yes + +################################ +# Set up the HOME directory +################################ +export EXECgfs=${EXECgfs:-${HOMEgfs}/exec} +export PARMgfs=${PARMgfs:-${HOMEgfs}/parm} +export EXPDIR=${EXPDIR:-${HOMEgfs}/parm/config} +export FIXgempak=${FIXgempak:-${HOMEgfs}/gempak/fix} +export USHgempak=${USHgempak:-${HOMEgfs}/gempak/ush} +export SRCgfs=${SRCgfs:-${HOMEgfs}/scripts} + +cp ${FIXgempak}/datatype.tbl datatype.tbl + +############################################# +#set the fcst hrs for all the cycles +############################################# +export fhbeg=00 +export fhend=384 +export fhinc=12 + +################################### +# Specify NET and RUN Name and model +#################################### +export model=${model:-gfs} +export COMPONENT="atmos" + +############################################## +# Set up model and cycle specific variables +############################################## +export DBN_ALERT_TYPE=GFS_METAFILE + +############################################## +# Define COM directories +############################################## +export COMIN=${COMIN:-$(compath.py ${envir}/${NET}/${gfs_ver})/${RUN}.${PDY}/${cyc}/${COMPONENT}/gempak} +export COMOUT=${COMOUT:-$(compath.py -o ${NET}/${gfs_ver}/${RUN}.${PDY})/${cyc}/${COMPONENT}/gempak/meta} +export COMINgempak=${COMINgempak:-$(compath.py ${envir}/${NET}/${gfs_ver})} + +export COMINukmet=${COMINukmet:-$(compath.py ${envir}/ukmet/${ukmet_ver})/ukmet} +export COMINecmwf=${COMINecmwf:-$(compath.py ${envir}/ecmwf/${ecmwf_ver})/ecmwf} +export COMINnam=${COMINnam:-$(compath.py ${envir}/nam/${nam_ver})/nam} + +export SENDDBN=${SENDDBN:-NO} +export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} + +mkdir -m 775 -p ${COMOUT} + + +######################################################## +# Execute the script. +${SRCgfs}/exgfs_atmos_gempak_meta.sh +export err=$?; err_chk +######################################################## + +############################################ +# print exec I/O output +############################################ +if [ -e "${pgmout}" ] ; then + cat ${pgmout} +fi + +################################### +# Remove temp directories +################################### +if [ "${KEEPDATA}" != "YES" ] ; then + rm -rf ${DATA} +fi + diff --git a/jobs/JGFS_ATMOS_GEMPAK_NCDC_UPAPGIF b/jobs/JGFS_ATMOS_GEMPAK_NCDC_UPAPGIF new file mode 100755 index 0000000000..58b24c5e49 --- /dev/null +++ b/jobs/JGFS_ATMOS_GEMPAK_NCDC_UPAPGIF @@ -0,0 +1,86 @@ +#! /usr/bin/env bash + +# TODO (#1222) This job is not part of the rocoto suite + +############################################ +# GFS GEMPAK NCDC PRODUCT GENERATION +############################################ +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "gempak_gif" -c "base" + + +################################ +# Set up the HOME directory +################################ +export EXECgfs=${EXECgfs:-${HOMEgfs}/exec} +export PARMgfs=${PARMgfs:-${HOMEgfs}/parm} +export EXPDIR=${EXPDIR:-${HOMEgfs}/parm/config} +export FIXgfs=${FIXgfs:-${HOMEgfs}/gempak/fix} +export USHgempak=${USHgempak:-${HOMEgfs}/gempak/ush} +export SRCgfs=${SRCgfs:-${HOMEgfs}/scripts} +export UTILgfs=${UTILgfs:-${HOMEgfs}/util} + +###################################### +# Set up the GEMPAK directory +####################################### +export HOMEgempak=${HOMEgempak:-${HOMEgfs}/gempak} +export FIXgempak=${FIXgempak:-${HOMEgempak}/fix} +export USHgempak=${USHgempak:-${HOMEgempak}/ush} + +export MP_PULSE=0 +export MP_TIMEOUT=2000 + + +# +# Set up model and cycle specific variables +# +export MODEL=GFS +export fend=384 + +# set increment to 6 hours -- 3 hours is available. +export finc=6 +export fstart=00 + +################################### +# Specify NET and RUN Name and model +#################################### +export model=${model:-gfs} +export COMPONENT="atmos" + +############################################## +# Define COM directories +############################################## +export COMIN=${COMIN:-$(compath.py ${envir}/${NET}/${gfs_ver})/${RUN}.${PDY}/${cyc}/${COMPONENT}/gempak} +export COMINgfs=${COMINgfs:-$(compath.py ${envir}/${NET}/${gfs_ver}/${RUN}.${PDY})/${cyc}/${COMPONENT}} +export COMINobsproc=${COMINobsproc:-$(compath.py ${envir}/obsproc/${obsproc_ver})/${RUN}.${PDY}/${cyc}/${COMPONENT}} +export COMOUT=${COMOUT:-$(compath.py -o ${NET}/${gfs_ver}/${RUN}.${PDY})/${cyc}/${COMPONENT}} +export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} + +export SENDDBN=${SENDDBN:-NO} +export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} + +mkdir -m 775 -p ${COMOUT} ${COMOUTwmo} + +export pgmout=OUTPUT.$$ + + +######################################################## +# Execute the script. +${SRCgfs}/exgfs_atmos_gempak_gif_ncdc_skew_t.sh +export err=$?; err_chk +######################################################## + +############################################ +# print exec I/O output +############################################ +if [ -e "${pgmout}" ] ; then + cat ${pgmout} +fi + +################################### +# Remove temp directories +################################### +if [ "${KEEPDATA}" != "YES" ] ; then + rm -rf ${DATA} +fi + diff --git a/jobs/JGFS_ATMOS_GEMPAK_PGRB2_SPEC b/jobs/JGFS_ATMOS_GEMPAK_PGRB2_SPEC new file mode 100755 index 0000000000..183465e82d --- /dev/null +++ b/jobs/JGFS_ATMOS_GEMPAK_PGRB2_SPEC @@ -0,0 +1,112 @@ +#! /usr/bin/env bash + +# TODO (#1222) This job is not part of the rocoto suite + +############################################ +# GFS_PGRB2_SPEC_GEMPAK PRODUCT GENERATION +############################################ +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "gempak_spec" -c "base" + + +################################ +# Set up the HOME directory +################################ +export EXECgfs=${EXECgfs:-${HOMEgfs}/exec} +export PARMgfs=${PARMgfs:-${HOMEgfs}/parm} +export EXPDIR=${EXPDIR:-${HOMEgfs}/parm/config} +export FIXgempak=${FIXgempak:-${HOMEgfs}/gempak/fix} +export USHgempak=${USHgempak:-${HOMEgfs}/gempak/ush} +export SRCgfs=${SRCgfs:-${HOMEgfs}/scripts} + +# For half-degree P Grib files +#export DO_HD_PGRB=YES + +################################### +# Specify NET and RUN Name and model +#################################### +export COMPONENT="atmos" +export finc=3 +export model=gfs +export EXT="" + +############################################## +# Define COM directories +############################################## +export COMIN=${COMIN:-$(compath.py ${envir}/${NET}/${gfs_ver})/${RUN}.${PDY}/${cyc}/${COMPONENT}} +export COMOUT=${COMOUT:-$(compath.py -o ${NET}/${gfs_ver}/${NET}.${PDY})/${cyc}/${COMPONENT}/gempak} + +export SENDDBN=${SENDDBN:-NO} +export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} + +mkdir -m 775 -p ${COMOUT} + + +# TODO - Assess what is going on with overwriting $DATA here (#1224) + +export DATA_HOLD=${DATA} + +################################################################# +# Execute the script for the regular grib +################################################################# +export DATA=${DATA_HOLD}/SPECIAL +mkdir -p ${DATA} +cd ${DATA} + +export DBN_ALERT_TYPE=GFS_GOESSIM_GEMPAK +export RUN2=gfs_goessim +export GRIB=goessimpgrb2.0p25.f +export EXT=" " +export fend=180 +export finc=3 +export fstart=000 + +echo "RUNS the Program" + +######################################################## +# Execute the script. +${SRCgfs}/exgfs_atmos_goes_nawips.sh + +################################################################# +# Execute the script for the 221 grib + +export DATA=${DATA_HOLD}/SPECIAL221 +mkdir -p ${DATA} +cd ${DATA} + +export DBN_ALERT_TYPE=GFS_GOESSIM221_GEMPAK +export RUN2=gfs_goessim221 +export GRIB=goessimpgrb2f +export EXT=".grd221" +export fend=180 +export finc=3 +export fstart=000 + +echo "RUNS the Program" + +######################################################## +# Execute the script. +${SRCgfs}/exgfs_atmos_goes_nawips.sh +export err=$?; err_chk +######################################################## + +echo "end of program" +cd ${DATA_HOLD} +echo "######################################" +echo " SPECIAL.OUT " +echo "######################################" + +############################################ +# print exec I/O output +############################################ +if [ -e "${pgmout}" ] ; then + cat ${pgmout} +fi + +################################### +# Remove temp directories +################################### +if [ "${KEEPDATA}" != "YES" ] ; then + rm -rf "${DATA}" +fi + diff --git a/jobs/JGFS_ATMOS_PGRB2_SPEC_NPOESS b/jobs/JGFS_ATMOS_PGRB2_SPEC_NPOESS new file mode 100755 index 0000000000..1cb29be58b --- /dev/null +++ b/jobs/JGFS_ATMOS_PGRB2_SPEC_NPOESS @@ -0,0 +1,101 @@ +#! /usr/bin/env bash + +# TODO (#1225) This job is not part of the rocoto suite + +############################################ +# GFS PGRB2_SPECIAL_POST PRODUCT GENERATION +############################################ +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "npoess" -c "base" + +export OMP_NUM_THREADS=${OMP_NUM_THREADS:-1} + + +################################ +# Set up the HOME directory +################################ +export USHgfs=${USHgfs:-${HOMEgfs}/ush} +export EXECgfs=${EXECgfs:-${HOMEgfs}/exec} +export PARMgfs=${PARMgfs:-${HOMEgfs}/parm} +export EXPDIR=${EXPDIR:-${HOMEgfs}/parm/config} +export PARMwmo=${PARMwmo:-${HOMEgfs}/parm/wmo} +export PARMproduct=${PARMproduct:-${HOMEgfs}/parm/product} +export FIXgfs=${FIXgfs:-${HOMEgfs}/fix} + +################################### +# Specify NET and RUN Name and model +#################################### +export model=${model:-gfs} + +############################################## +# Define COM directories +############################################## +export SENDDBN=${SENDDBN:-NO} +export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} + +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_GOES +GRID="0p50" YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_GRIB_0p50:COM_ATMOS_GRIB_GRID_TMPL + +mkdir -m 775 -p "${COM_ATMOS_GOES}" + +# TODO - This should be in the ex-script (#1226) + +#################################### +# Specify Forecast Hour Range +#################################### +export SHOUR=000 +export FHOUR=180 +export FHINC=003 + +#################################### +# Specify Timeout Behavior of Post +# +# SLEEP_TIME - Amount of time to wait for +# a restart file before exiting +# SLEEP_INT - Amount of time to wait between +# checking for restart files +#################################### +export SLEEP_TIME=900 +export SLEEP_INT=5 + +#################################### +# Check if this is a restart +#################################### +if [[ -f "${COM_ATMOS_GOES}/${RUN}.t${cyc}z.control.goessimpgrb2" ]]; then + modelrecvy=$(cat < "${COM_ATMOS_GOES}/${RUN}.t${cyc}z.control.goessimpgrb") + recvy_cyc="${modelrecvy:8:2}" + recvy_shour="${modelrecvy:10:13}" + + if [[ ${RERUN} == "NO" ]]; then + NEW_SHOUR=$(( recvy_shour + FHINC )) + if (( NEW_SHOUR >= SHOUR )); then + export SHOUR=${NEW_SHOUR} + fi + if (( recvy_shour >= FHOUR )); then + echo "Forecast Pgrb Generation Already Completed to ${FHOUR}" + else + echo "Starting: PDY=${PDY} cycle=t${recvy_cyc}z SHOUR=${SHOUR}" + fi + fi +fi + +############################################################# +# Execute the script +"${HOMEgfs}/scripts/exgfs_atmos_grib2_special_npoess.sh" +export err=$?;err_chk +############################################################# + +############################################ +# print exec I/O output +############################################ +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +################################### +# Remove temp directories +################################### +if [[ "${KEEPDATA}" != "YES" ]] ; then + rm -rf "${DATA}" +fi + diff --git a/jobs/JGFS_ATMOS_POSTSND b/jobs/JGFS_ATMOS_POSTSND new file mode 100755 index 0000000000..721dd27628 --- /dev/null +++ b/jobs/JGFS_ATMOS_POSTSND @@ -0,0 +1,71 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "postsnd" -c "base postsnd" + + +############################################## +# Set variables used in the exglobal script +############################################## +export CDUMP=${RUN/enkf} + + +######################################## +# Runs GFS BUFR SOUNDINGS +######################################## + +export model=${model:-gfs} +export SENDDBN=${SENDDBN:-YES} +export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} + +################################### +# Set up the source directories +################################### + +export HOMEbufrsnd=${HOMEbufrsnd:-${HOMEgfs}} +export EXECbufrsnd=${EXECbufrsnd:-${HOMEbufrsnd}/exec} +export FIXbufrsnd=${FIXbufrsnd:-${HOMEbufrsnd}/fix/product} +export PARMbufrsnd=${PARMbufrsnd:-${HOMEbufrsnd}/parm/product} +export USHbufrsnd=${USHbufrsnd:-${HOMEbufrsnd}/ush} +export SCRbufrsnd=${SCRbufrsnd:-${HOMEbufrsnd}/scripts} + +############################## +# Define COM Directories +############################## +export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} + +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_HISTORY COM_ATMOS_BUFR \ + COM_ATMOS_WMO COM_ATMOS_GEMPAK + +[[ ! -d ${COM_ATMOS_BUFR} ]] && mkdir -p "${COM_ATMOS_BUFR}" +[[ ! -d ${COM_ATMOS_GEMPAK} ]] && mkdir -p "${COM_ATMOS_GEMPAK}" +[[ ! -d ${COM_ATMOS_WMO} ]] && mkdir -p "${COM_ATMOS_WMO}" + + +######################################################## +# Execute the script. +${SCRbufrsnd}/exgfs_atmos_postsnd.sh +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [ -e "${pgmout}" ] ; then + cat ${pgmout} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 + diff --git a/jobs/JGFS_ATMOS_VERIFICATION b/jobs/JGFS_ATMOS_VERIFICATION new file mode 100755 index 0000000000..23a450cd55 --- /dev/null +++ b/jobs/JGFS_ATMOS_VERIFICATION @@ -0,0 +1,43 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "metp" -c "base metp" + +############################################################### +## Abstract: +## Inline METplus verification and diagnostics driver script +## HOMEgfs : /full/path/to/workflow +## EXPDIR : /full/path/to/config/files +## CDATE : current analysis date (YYYYMMDDHH) +## CDUMP : cycle name (gdas / gfs) +## PDY : current date (YYYYMMDD) +## cyc : current cycle (HH) +## SDATE_GFS : first date of GFS cycle (YYYYMMDDHHMM) +## METPCASE : METplus verification use case (g2g1 | g2o1 | pcp1) +############################################################### + +# TODO: This should not be permitted as DATAROOT is set at the job-card level. +# TODO: DATAROOT is being used as DATA in metp jobs. This should be rectified in metp. +# TODO: The temporary directory is DATA and is created at the top of the J-Job. +# TODO: remove this line +export DATAROOT=${DATA} + +VDATE=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${VRFYBACK_HRS} hours") +export VDATE=${VDATE:0:8} + +# Since this is currently a one-element list, shellcheck things we would rather run this as a command +# shellcheck disable=SC2041 +for grid in '1p00'; do + prod_dir="COM_ATMOS_GRIB_${grid}" + GRID=${grid} YMD=${PDY} HH=${cyc} generate_com -rx "${prod_dir}:COM_ATMOS_GRIB_GRID_TMPL" +done + +# TODO: If none of these are on, why are we running this job? +if [[ "${RUN_GRID2GRID_STEP1}" == "YES" || "${RUN_GRID2OBS_STEP1}" == "YES" || "${RUN_PRECIP_STEP1}" == "YES" ]]; then + ${VERIF_GLOBALSH} + status=$? + if (( status != 0 )); then exit "${status}"; fi +fi + +if [[ ${KEEPDATA:-"NO"} = "NO" ]] ; then rm -rf "${DATAROOT}" ; fi # TODO: This should be $DATA + diff --git a/jobs/JGFS_AWIPS_20KM_1P0DEG b/jobs/JGFS_AWIPS_20KM_1P0DEG deleted file mode 100755 index 5794db9c7c..0000000000 --- a/jobs/JGFS_AWIPS_20KM_1P0DEG +++ /dev/null @@ -1,93 +0,0 @@ -#!/bin/sh - -set -xa -export PS4='$SECONDS + ' -export OMP_NUM_THREADS=${OMP_NUM_THREADS:-1} -date - -########################################### -# GFS_AWIPS_20KM AWIPS PRODUCT GENERATION -########################################### - -######################################################### -# obtain unique process id (pid) and make temp directory -######################################################### -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - -###################################### -# Set up the cycle variable -###################################### -export cycle=${cycle:-t${cyc}z} - -########################################### -# Run setpdy and initialize PDY variables -########################################### -setpdy.sh -. PDY - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export USHgfs=${USHgfs:-$HOMEgfs/ush} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgfs=${FIXgfs:-$HOMEgfs/fix} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} -export COMPONENT=${COMPONENT:-atmos} - -############################################## -# Define COM directories -############################################## -export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/$COMPONENT} -export COMOUT=${COMOUT:-${COMROOT}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/$COMPONENT} -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -export pgmout=OUTPUT.$$ - -env - -######################################################## -# Execute the script. -# Forecast hours from F00 - F84 at 3-hour interval -# Forecast hours from F90 - F240 at 6-hour interval -######################################################### - -######################################################## -# Execute the script. -$HOMEgfs/scripts/exgfs_awips_20km_1p0deg.sh $fcsthrs -export err=$?; err_chk -######################################################## - -msg="JOB $job HAS COMPLETED NORMALLY!" -postmsg $jlogfile "$msg" - -############################################ -# print exec I/O output -############################################ -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - -################################### -# Remove temp directories -################################### -if [ "$KEEPDATA" != "YES" ] ; then - rm -rf $DATA -fi - -date diff --git a/jobs/JGFS_AWIPS_G2 b/jobs/JGFS_AWIPS_G2 deleted file mode 100755 index c8c9dbdb81..0000000000 --- a/jobs/JGFS_AWIPS_G2 +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/sh - -set -xa -export PS4='$SECONDS + ' -date -export OMP_NUM_THREADS=${OMP_NUM_THREADS:-1} - -######################################## -# GFS_AWIPS_G2 AWIPS PRODUCT GENERATION -######################################## - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - -###################################### -# Set up the cycle variable -###################################### -export cycle=${cycle:-t${cyc}z} - -########################################### -# Run setpdy and initialize PDY variables -########################################### -setpdy.sh -. PDY - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export USHgfs=${USHgfs:-$HOMEgfs/ush} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgfs=${FIXgfs:-$HOMEgfs/fix} -export UTILgfs=${UTILgfs:-$HOMEgfs/util} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} -export COMPONENT=${COMPONENT:-atmos} - -############################################## -# Define COM directories -############################################## -export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/$COMPONENT} -export COMOUT=${COMOUT:-${COMROOT}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/$COMPONENT} -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -export pgmout=OUTPUT.$$ - -env - -######################################################## -# Execute the script. -######################################################### -mkdir -m 775 awips_g1 -cd $DATA/awips_g1 -$HOMEgfs/scripts/exgfs_grib_awips.sh $fcsthrs -export err=$?; err_chk - -msg="JOB $job HAS COMPLETED NORMALLY!" -postmsg $jlogfile "$msg" - -############################################ -# print exec I/O output -############################################ -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - -################################### -# Remove temp directories -################################### -if [ "$KEEPDATA" != "YES" ] ; then - rm -rf $DATA -fi - -date diff --git a/jobs/JGFS_CYCLONE_GENESIS b/jobs/JGFS_CYCLONE_GENESIS deleted file mode 100755 index 7eb802963b..0000000000 --- a/jobs/JGFS_CYCLONE_GENESIS +++ /dev/null @@ -1,139 +0,0 @@ -#!/bin/ksh -set -x - -export RUN_ENVIR=${RUN_ENVIR:-"nco"} -export PS4='$SECONDS + ' -date - - -############################# -# Source relevant config files -############################# -configs="base vrfy" -config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} -for config in $configs; do - . $config_path/config.$config - status=$? - [[ $status -ne 0 ]] && exit $status -done - - -########################################## -# Source machine runtime environment -########################################## -. $HOMEgfs/env/${machine}.env vrfy -status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################## -# Obtain unique process id (pid) and make temp directory -############################################## -if [ $RUN_ENVIR = "nco" ]; then - export DATA=${DATA:-${DATAROOT}/${jobid:?}} -else - export job="gfs_cyclone_genesis" - export DATA="$DATAROOT/${job}$$" - [[ -d $DATA ]] && rm -rf $DATA -fi -mkdir -p $DATA -cd $DATA - - -############################################## -# Run setpdy and initialize PDY variables -############################################## -export cycle="t${cyc}z" -setpdy.sh -. ./PDY - - -#################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export COMPONENT=${COMPONENT:-atmos} - -############################################## -# Determine Job Output Name on System -############################################## -export pgmout="OUTPUT.${pid}" -export pgmerr=errfile - -############################################## -# Set variables used in the exglobal script -############################################## -export CDATE=${CDATE:-${PDY}${cyc}} -export CDUMP=${CDUMP:-${RUN:-"gfs"}} -if [ $RUN_ENVIR = "nco" ]; then - export ROTDIR=${COMROOT:?}/$NET/$envir -fi -export cmodel=$CDUMP - -#################################### -# SENDCOM - Copy Files From TMPDIR to $COMOUT -# SENDDBN - Issue DBNet Client Calls -#################################### -export SENDCOM=YES -export SENDDBN=${SENDDBN:-NO} -export SENDECF=${SENDECF:-NO} - -#################################### -# Specify Execution Areas -#################################### -export HOMEens_tracker=${HOMEens_tracker:-${NWROOT:?}/ens_tracker.${ens_tracker_ver}} -export EXECens_tracker=${EXECens_tracker:-$HOMEens_tracker/exec} -export FIXens_tracker=${FIXens_tracker:-$HOMEens_tracker/fix} -export USHens_tracker=${USHens_tracker:-$HOMEens_tracker/ush} -export SCRIPTens_tracker=${SCRIPTens_tracker:-$HOMEens_tracker/scripts} - -############################################## -# Define COM directories -############################################## -export COMIN=${ROTDIR}/${RUN}.${PDY}/${cyc}/$COMPONENT -export gfsdir=${COMIN} -export COMINgfs=${COMIN} -export COMOUT=${ROTDIR}/${RUN}.${PDY}/${cyc}/$COMPONENT - -export JYYYY=`echo ${PDY} | cut -c1-4` -export COMINgenvit=${COMINgenvit:-${COMOUT}/genesis_vital_${JYYYY}} -export COMOUTgenvit=${COMOUTgenvit:-${COMOUT}/genesis_vital_${JYYYY}} -#export COMINgenvit=${COMINgenvit:-${DATA}/genesis_vital_${JYYYY}} -#export COMOUTgenvit=${COMOUTgenvit:-${DATA}/genesis_vital_${JYYYY}} - -export COMINsyn=${COMINsyn:-$(compath.py gfs/prod/syndat)} - -mkdir -m 775 -p $COMOUTgenvit - -############################################## -# Run relevant script -############################################## -env -msg="HAS BEGUN on `hostname`" -postmsg "$jlogfile" "$msg" -$LOGSCRIPT - - -${SCRIPTens_tracker}/exgfs_tc_genesis.sh -export err=$?; err_chk - -############################################## -# Final processing -############################################## -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - - -msg="ENDED NORMALLY." -postmsg "$jlogfile" "$msg" - -########################################## -# Remove the Temporary working directory -########################################## -cd $DATAROOT -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA - -date -exit 0 diff --git a/jobs/JGFS_CYCLONE_TRACKER b/jobs/JGFS_CYCLONE_TRACKER deleted file mode 100755 index a26393cb27..0000000000 --- a/jobs/JGFS_CYCLONE_TRACKER +++ /dev/null @@ -1,181 +0,0 @@ -#!/bin/ksh -set -x - -export RUN_ENVIR=${RUN_ENVIR:-"nco"} -export PS4='$SECONDS + ' -date - - -############################# -# Source relevant config files -############################# -configs="base vrfy" -config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} -for config in $configs; do - . $config_path/config.$config - status=$? - [[ $status -ne 0 ]] && exit $status -done - - -########################################## -# Source machine runtime environment -########################################## -. $HOMEgfs/env/${machine}.env vrfy -status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################## -# Obtain unique process id (pid) and make temp directory -############################################## -if [ $RUN_ENVIR = "nco" ]; then - export DATA=${DATA:-${DATAROOT}/${jobid:?}} -else - export job="gfs_cyclone_tracker" - export DATA="$DATAROOT/${job}$$" - [[ -d $DATA ]] && rm -rf $DATA -fi -mkdir -p $DATA -cd $DATA - - -############################################## -# Run setpdy and initialize PDY variables -############################################## -export cycle="t${cyc}z" -setpdy.sh -. ./PDY - - -#################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export COMPONENT=${COMPONENT:-atmos} - - -############################################## -# Determine Job Output Name on System -############################################## -export pgmout="OUTPUT.${pid}" -export pgmerr=errfile - - -############################################## -# Set variables used in the exglobal script -############################################## -export CDATE=${CDATE:-${PDY}${cyc}} -export CDUMP=${CDUMP:-${RUN:-"gfs"}} -if [ $RUN_ENVIR = "nco" ]; then - export ROTDIR=${COMROOT:?}/$NET/$envir -fi - - -#################################### -# SENDCOM - Copy Files From TMPDIR to $COMOUT -# SENDDBN - Issue DBNet Client Calls -#################################### -export SENDCOM=YES -export SENDDBN=${SENDDBN:-NO} -export SENDECF=${SENDECF:-NO} - -#################################### -# Specify Execution Areas -#################################### -export HOMEens_tracker=${HOMEens_tracker:-${NWROOT:?}/ens_tracker.${ens_tracker_ver}} -export EXECens_tracker=${EXECens_tracker:-$HOMEens_tracker/exec} -export FIXens_tracker=${FIXens_tracker:-$HOMEens_tracker/fix} -export USHens_tracker=${USHens_tracker:-$HOMEens_tracker/ush} - - -############################################## -# Define COM and Data directories -############################################## -export COMIN=${ROTDIR}/${RUN}.${PDY}/${cyc}/$COMPONENT -export COMINgfs=${COMIN} -export gfsdir=${COMINgfs} -export COMINgdas=${COMIN} -export gdasdir=${COMINgdas} -export COMOUT=${ROTDIR}/${RUN}.${PDY}/${cyc}/$COMPONENT -export COMINsyn=${COMINsyn:-$(compath.py arch/prod/syndat)} - -if [ $RUN_ENVIR = "nco" ]; then - export COMOUThur=${COMROOTp1:?}/hur/${envir}/global - export COMOUTatcf=${COMROOTp1:?}/nhc/${envir}/atcf - mkdir -m 775 -p $COMOUThur $COMOUTatcf -else -# export COMOUThur=$COMOUT -# export COMOUTatcf=$COMOUT - export COMOUThur=$DATA - export COMOUTatcf=$DATA -fi - -############################################## -# Run relevant script -############################################## -env -msg="HAS BEGUN on `hostname`" -postmsg "$jlogfile" "$msg" -$LOGSCRIPT - -############################################################# -# Execute the script -export pert="p01" -export cmodel=$CDUMP -export loopnum=1 - -#-----------input data checking ----------------- -${USHens_tracker}/data_check_gfs.sh -# exit code 6 = missing data of opportunity -if [ $? -eq 6 ]; then exit; fi -#------------------------------------------------ - -machine=${machine:-`echo ${SITE}`} -if [ $machine = TIDE -o $machine = GYRE ] ; then # For WCOSS - machine=wcoss - ${USHens_tracker}/extrkr_gfs.sh ${loopnum} ${cmodel} ${CDATE} ${pert} ${DATA} -elif [ $machine = LUNA -o $machine = SURGE -o $machine = WCOSS_C ] ; then # For CRAY - machine=cray - ${APRUNTRACK} ${USHens_tracker}/extrkr_gfs.sh ${loopnum} ${cmodel} ${CDATE} ${pert} ${DATA} -elif [ $machine = VENUS -o $machine = MARS -o $machine = WCOSS_DELL_P3 ] ; then # For DELL - machine=dell - mpirun -n 1 ${USHens_tracker}/extrkr_gfs.sh ${loopnum} ${cmodel} ${CDATE} ${pert} ${DATA} -elif [ $machine = HERA ]; then # For HERA - machine=hera - ${USHens_tracker}/extrkr_gfs.sh ${loopnum} ${cmodel} ${CDATE} ${pert} ${DATA} -fi -export err=$?; err_chk - - -#if [ "$SENDCOM" = 'YES' ]; then -# cat ${DATA}/trak.avnx.atcfunix.${PDY}${cyc} | \ -# sed s:AVNX:GFSO:g \ -# > ${COMOUT}/gfso.t${cyc}z.cyclone.trackatcfunix -# -# cat ${DATA}/trak.avnx.atcfunix.${PDY}${cyc} | \ -# sed s:AVNX:AVNO:g \ -# > ${COMOUT}/avn.t${cyc}z.cyclone.trackatcfunix -#fi - -############################################## -# Final processing -############################################## -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - - -msg="ENDED NORMALLY." -postmsg "$jlogfile" "$msg" - - -########################################## -# Remove the Temporary working directory -########################################## -cd $DATAROOT -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA - -date -exit 0 diff --git a/jobs/JGFS_FBWIND b/jobs/JGFS_FBWIND deleted file mode 100755 index 408827d4c6..0000000000 --- a/jobs/JGFS_FBWIND +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/sh - -set -xa -export PS4='$SECONDS + ' -date - -############################################ -# GFS FBWIND PRODUCT GENERATION -############################################ - -########################################################### -# obtain unique process id (pid) and make temp directory -########################################################### -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - -###################################### -# Set up the cycle variable -###################################### -export cycle=${cycle:-t${cyc}z} - -########################################### -# Run setpdy and initialize PDY variables -########################################### -setpdy.sh -. PDY - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export USHgfs=${USHgfs:-$HOMEgfs/ush} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgfs=${FIXgfs:-$HOMEgfs/fix} -export UTILgfs=${UTILgfs:-$HOMEgfs/util} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} -export COMPONENT=${COMPONENT:-atmos} - -############################################## -# Define COM directories -############################################## -export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/$COMPONENT} -export COMOUT=${COMOUT:-${COMROOT}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/$COMPONENT} -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -export pgmout=OUTPUT.$$ - -env - -######################################################## -# Execute the script. -$HOMEgfs/scripts/exgfs_fbwind.sh -export err=$?;err_chk -######################################################## - -msg="JOB $job HAS COMPLETED NORMALLY!" -postmsg $jlogfile "$msg" - -############################################ -# print exec I/O output -############################################ -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - -################################### -# Remove temp directories -################################### -if [ "$KEEPDATA" != "YES" ] ; then - rm -rf $DATA -fi - -date diff --git a/jobs/JGFS_FSU_GENESIS b/jobs/JGFS_FSU_GENESIS deleted file mode 100755 index f693f01b42..0000000000 --- a/jobs/JGFS_FSU_GENESIS +++ /dev/null @@ -1,148 +0,0 @@ -#!/bin/ksh -set -x - -export RUN_ENVIR=${RUN_ENVIR:-"nco"} -export PS4='$SECONDS + ' -date - - -############################# -# Source relevant config files -############################# -configs="base vrfy" -config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} -for config in $configs; do - . $config_path/config.$config - status=$? - [[ $status -ne 0 ]] && exit $status -done - -##exit - -########################################## -# Source machine runtime environment -########################################## -. $HOMEgfs/env/${machine}.env vrfy -status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################## -# Obtain unique process id (pid) and make temp directory -############################################## -if [ $RUN_ENVIR = "nco" ]; then - export DATA=${DATA:-${DATAROOT}/${jobid:?}} -else - export job="gfs_fsu_genesis" - export DATA="$DATAROOT/${job}$$" - [[ -d $DATA ]] && rm -rf $DATA -fi -mkdir -p $DATA -cd $DATA - - -############################################## -# Run setpdy and initialize PDY variables -############################################## -export cycle="t${cyc}z" -setpdy.sh -. ./PDY - - -#################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export COMPONENT=${COMPONENT:-atmos} - - -############################################## -# Determine Job Output Name on System -############################################## -export pgmout="OUTPUT.${pid}" -export pgmerr=errfile - - -############################################## -# Set variables used in the exglobal script -############################################## -export CDATE=${CDATE:-${PDY}${cyc}} -export CDUMP=${CDUMP:-${RUN:-"gfs"}} -if [ $RUN_ENVIR = "nco" ]; then - export ROTDIR=${COMROOT:?}/$NET/$envir -fi - - -#################################### -# SENDCOM - Copy Files From TMPDIR to $COMOUT -# SENDDBN - Issue DBNet Client Calls -#################################### -export SENDCOM=YES -export SENDDBN=${SENDDBN:-NO} -export SENDECF=${SENDECF:-NO} - -#################################### -# Specify Execution Areas -#################################### -export HOMEens_tracker=${HOMEens_tracker:-${NWROOT:?}/ens_tracker.${ens_tracker_ver}} -export EXECens_tracker=${EXECens_tracker:-$HOMEens_tracker/exec} -export FIXens_tracker=${FIXens_tracker:-$HOMEens_tracker/fix} -export USHens_tracker=${USHens_tracker:-$HOMEens_tracker/ush} -export SCRIPTens_tracker=${SCRIPTens_tracker:-$HOMEens_tracker/scripts} -export BINens_tracker=${BINens_tracker:-$HOMEens_tracker/ush/FSUgenesisPY/bin} - -############################################## -# Define COM and Data directories -############################################## -export COMIN=${ROTDIR}/${RUN}.${PDY}/${cyc}/${COMPONENT} -export COMINgfs=${COMIN} -#export gfsdir=${COMINgfs} -export gfsdir=${ROTDIR} -export COMINgdas=${COMIN} -export gdasdir=${COMINgdas} -export COMOUT=${ROTDIR}/${RUN}.${PDY}/${cyc}/${COMPONENT} -export COMINsyn=${COMINsyn:-$(compath.py arch/prod/syndat)} - -if [ $RUN_ENVIR = "nco" ]; then - export COMOUThur=${COMROOTp1:?}/hur/${envir}/global - export COMOUTatcf=${COMROOTp1:?}/nhc/${envir}/atcf - mkdir -m 775 -p $COMOUThur $COMOUTatcf -else -# export COMOUThur=$COMOUT -# export COMOUTatcf=$COMOUT - export COMOUThur=$DATA - export COMOUTatcf=$DATA -fi - -############################################## -# Run relevant script -############################################## -env -msg="HAS BEGUN on `hostname`" -postmsg "$jlogfile" "$msg" -$LOGSCRIPT - -############################################################# -# Execute the script -${SCRIPTens_tracker}/exgfs_fsu_genesis.sh -export err=$?; err_chk - -############################################## -# Final processing -############################################## -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - -msg="ENDED NORMALLY." -postmsg "$jlogfile" "$msg" - -########################################## -# Remove the Temporary working directory -########################################## -cd $DATAROOT -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA - -date -exit 0 diff --git a/jobs/JGFS_GEMPAK b/jobs/JGFS_GEMPAK deleted file mode 100755 index af5e295dc4..0000000000 --- a/jobs/JGFS_GEMPAK +++ /dev/null @@ -1,166 +0,0 @@ -#!/bin/sh - -set -xa -export PS4='$SECONDS + ' -date - -############################################ -# GFS GEMPAK PRODUCT GENERATION -############################################ - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - -###################################### -# Set up the cycle variable -###################################### -export cycle=${cycle:-t${cyc}z} - -########################################### -# Run setpdy and initialize PDY variables -########################################### -setpdy.sh -. PDY - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -# For half-degree P Grib files -export DO_HD_PGRB=${DO_HD_PGRB:-YES} - -############################################ -# Set up model and cycle specific variables -############################################ -export finc=${finc:-3} -export fstart=${fstart:-0} -export model=${model:-gfs} -export GRIB=${GRIB:-pgrb2f} -export EXT="" -export DBN_ALERT_TYPE=${DBN_ALERT_TYPE:-GFS_GEMPAK} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} -export COMPONENT=${COMPONENT:-atmos} - -############################################## -# Define COM directories -############################################## -export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/$COMPONENT} -export COMOUT=${COMOUT:-${COMROOT}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/$COMPONENT/gempak} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT -fi - -export pgmout=OUTPUT.$$ - -env - -rm -f poescript - -################################################################# -# Execute the script for the 384 hour 1 degree grib -################################################################## -echo "time $SRCgfs/exgfs_nawips.sh gfs 384 GFS_GEMPAK &> $DATA/gfs_1p0.$$.1 " >>poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs 384 GFS_GEMPAK &> $DATA/gfs_1p0.$$.2 " >>poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs 384 GFS_GEMPAK &> $DATA/gfs_1p0.$$.3 " >>poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs 384 GFS_GEMPAK &> $DATA/gfs_1p0.$$.4 " >>poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs 384 GFS_GEMPAK &> $DATA/gfs_1p0.$$.5 " >>poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs 384 GFS_GEMPAK &> $DATA/gfs_1p0.$$.6 " >>poescript - -################################################################# -# Execute the script for the half-degree grib -################################################################## -echo "time $SRCgfs/exgfs_nawips.sh gfs_0p50 384 GFS_GEMPAK &> $DATA/gfs_0p5.$$.1 " >>poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs_0p50 384 GFS_GEMPAK &> $DATA/gfs_0p5.$$.2 " >>poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs_0p50 384 GFS_GEMPAK &> $DATA/gfs_0p5.$$.3 " >>poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs_0p50 384 GFS_GEMPAK &> $DATA/gfs_0p5.$$.4 " >>poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs_0p50 384 GFS_GEMPAK &> $DATA/gfs_0p5.$$.5 " >>poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs_0p50 384 GFS_GEMPAK &> $DATA/gfs_0p5.$$.6 " >>poescript - -################################################################# -# Execute the script for the quater-degree grib -#################################################################### -echo "time $SRCgfs/exgfs_nawips.sh gfs_0p25 384 GFS_GEMPAK &> $DATA/gfs_0p25.$$.1 " >> poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs_0p25 384 GFS_GEMPAK &> $DATA/gfs_0p25.$$.2 " >> poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs_0p25 384 GFS_GEMPAK &> $DATA/gfs_0p25.$$.3 " >> poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs_0p25 384 GFS_GEMPAK &> $DATA/gfs_0p25.$$.4 " >> poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs_0p25 384 GFS_GEMPAK &> $DATA/gfs_0p25.$$.5 " >> poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs_0p25 384 GFS_GEMPAK &> $DATA/gfs_0p25.$$.6 " >> poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs_0p25 384 GFS_GEMPAK &> $DATA/gfs_0p25.$$.7 " >> poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs_0p25 384 GFS_GEMPAK &> $DATA/gfs_0p25.$$.8 " >> poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs_0p25 384 GFS_GEMPAK &> $DATA/gfs_0p25.$$.9 " >> poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs_0p25 384 GFS_GEMPAK &> $DATA/gfs_0p25.$$.10 " >> poescript - -#################################################################### -# Execute the script to create the 35km Pacific grids for OPC -##################################################################### -echo "time $SRCgfs/exgfs_nawips.sh gfs35_pac 180 GFS_GEMPAK_WWB &> $DATA/gfs35_pac.$$.1 " >>poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs35_pac 180 GFS_GEMPAK_WWB &> $DATA/gfs35_pac.$$.2 " >>poescript - -#################################################################### -# Execute the script to create the 35km Atlantic grids for OPC -##################################################################### -echo "time $SRCgfs/exgfs_nawips.sh gfs35_atl 180 GFS_GEMPAK_WWB &> $DATA/gfs35_atl.$$.1 " >>poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs35_atl 180 GFS_GEMPAK_WWB &> $DATA/gfs35_atl.$$.2 " >>poescript - -##################################################################### -# Execute the script to create the 40km grids for HPC -###################################################################### -echo "time $SRCgfs/exgfs_nawips.sh gfs40 180 GFS_GEMPAK_WWB &> $DATA/gfs40.$$.1 " >>poescript -echo "time $SRCgfs/exgfs_nawips.sh gfs40 180 GFS_GEMPAK_WWB &> $DATA/gfs40.$$.2 " >>poescript - -cat poescript - -chmod 775 $DATA/poescript -export MP_PGMMODEL=mpmd -export MP_CMDFILE=$DATA/poescript - -ntasks=${NTASKS_GEMPAK:-$(cat $DATA/poescript | wc -l)} -ptile=${PTILE_GEMPAK:-4} -threads=${NTHREADS_GEMPAK:-1} -export OMP_NUM_THREADS=$threads -APRUN="mpirun -n $ntasks cfp " - -APRUN_GEMPAKCFP=${APRUN_GEMPAKCFP:-$APRUN} -APRUNCFP=$(eval echo $APRUN_GEMPAKCFP) - -$APRUNCFP $DATA/poescript -export err=$?; err_chk - -cat $DATA/gfs*.$$.? - -msg="JOB $job HAS COMPLETED NORMALLY!" -postmsg $jlogfile "$msg" - -############################################ -# print exec I/O output -############################################ -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - -################################### -# Remove temp directories -################################### -if [ "$KEEPDATA" != "YES" ] ; then - rm -rf $DATA -fi - -date diff --git a/jobs/JGFS_GEMPAK_META b/jobs/JGFS_GEMPAK_META deleted file mode 100755 index 9c935ab7a8..0000000000 --- a/jobs/JGFS_GEMPAK_META +++ /dev/null @@ -1,117 +0,0 @@ -#!/bin/sh - -set -xa -export PS4='$SECONDS + ' -date - -############################################ -# GFS GEMPAK META PRODUCT GENERATION -############################################ - -export LAUNCH_MODE=MPI - -############################################### -# Set MP variables -############################################### -export OMP_NUM_THREADS=1 -export MP_LABELIO=yes -export MP_PULSE=0 -export MP_DEBUG_NOTIMEOUT=yes - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - -###################################### -# Set up the cycle variable -###################################### -export cycle=${cycle:-t${cyc}z} - -########################################### -# Run setpdy and initialize PDY variables -########################################### -setpdy.sh -. PDY - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -cp $FIXgempak/datatype.tbl datatype.tbl - -############################################# -#set the fcst hrs for all the cycles -############################################# -export fhbeg=00 -export fhend=384 -export fhinc=12 - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} -export COMPONENT=${COMPONENT:-atmos} - -############################################## -# Set up model and cycle specific variables -############################################## -export DBN_ALERT_TYPE=GFS_METAFILE - -############################################## -# Define COM directories -############################################## -export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/$COMPONENT/gempak} -export COMOUT=${COMOUT:-${COMROOT}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/$COMPONENT/gempak/meta} -export COMINgempak=${COMINgempak:-${COMROOT}/${NET}/${envir}} - -export COMINukmet=${COMINukmet:-$(compath.py nawips/prod/ukmet)} -export COMINecmwf=${COMINecmwf:-$(compath.py ecmwf/prod/ecmwf)} -export COMINnam=${COMINnam:-$(compath.py nam/prod/nam)} - -msg="Begin job for $job" -postmsg "$jlogfile" "$msg" - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT -fi - -export pgmout=OUTPUT.$$ - -env - -######################################################## -# Execute the script. -$SRCgfs/exgfs_gempak_meta.sh -export err=$?; err_chk -######################################################## - -msg="JOB $job HAS COMPLETED NORMALLY!" -postmsg $jlogfile "$msg" - -############################################ -# print exec I/O output -############################################ -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - -################################### -# Remove temp directories -################################### -if [ "$KEEPDATA" != "YES" ] ; then - rm -rf $DATA -fi - -date diff --git a/jobs/JGFS_GEMPAK_NCDC_UPAPGIF b/jobs/JGFS_GEMPAK_NCDC_UPAPGIF deleted file mode 100755 index 2f4284f40a..0000000000 --- a/jobs/JGFS_GEMPAK_NCDC_UPAPGIF +++ /dev/null @@ -1,112 +0,0 @@ -#!/bin/sh - -set -xa -export PS4='$SECONDS + ' -date - -############################################ -# GFS GEMPAK NCDC PRODUCT GENERATION -############################################ - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - -###################################### -# Set up the cycle variable -###################################### -export cycle=${cycle:-t${cyc}z} - -########################################### -# Run setpdy and initialize PDY variables -########################################### -setpdy.sh -. PDY - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -export FIXgfs=${FIXgfs:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} -export UTILgfs=${UTILgfs:-$HOMEgfs/util} - -###################################### -# Set up the GEMPAK directory -####################################### -export HOMEgempak=${HOMEgempak:-$HOMEgfs/gempak} -export FIXgempak=${FIXgempak:-$HOMEgempak/fix} -export USHgempak=${USHgempak:-$HOMEgempak/ush} - -export MP_PULSE=0 -export MP_TIMEOUT=2000 -export cycle=t${cyc}z - -# -# Set up model and cycle specific variables -# -export MODEL=GFS -export fend=384 - -# set increment to 6 hours -- 3 hours is available. -export finc=6 -export fstart=00 - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} -export COMPONENT=${COMPONENT:-atmos} - -############################################## -# Define COM directories -############################################## -export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/$COMPONENT/gempak} -export COMINgfs=${COMINgfs:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/$COMPONENT} -export COMOUT=${COMOUT:-${COMROOT}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/$COMPONENT} -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -export pgmout=OUTPUT.$$ - -env - -msg="Begin job for $job" -postmsg "$jlogfile" "$msg" - -######################################################## -# Execute the script. -$SRCgfs/exgempak_gfs_gif_ncdc_skew_t.sh -export err=$?; err_chk -######################################################## - -msg="JOB $job HAS COMPLETED NORMALLY!" -postmsg $jlogfile "$msg" - -############################################ -# print exec I/O output -############################################ -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - -################################### -# Remove temp directories -################################### -if [ "$KEEPDATA" != "YES" ] ; then - rm -rf $DATA -fi - -date diff --git a/jobs/JGFS_PGRB2_SPEC_GEMPAK b/jobs/JGFS_PGRB2_SPEC_GEMPAK deleted file mode 100755 index 79365eb2ea..0000000000 --- a/jobs/JGFS_PGRB2_SPEC_GEMPAK +++ /dev/null @@ -1,138 +0,0 @@ -#!/bin/sh - -set -xa -export PS4='$SECONDS + ' -date - -############################################ -# GFS_PGRB2_SPEC_GEMPAK PRODUCT GENERATION -############################################ - -######################################################### -# obtain unique process id (pid) and make temp directory -######################################################### -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - -###################################### -# Set up the cycle variable -###################################### -export cycle=${cycle:-t${cyc}z} - -########################################### -# Run setpdy and initialize PDY variables -########################################### -setpdy.sh -. PDY - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -export FIXgempak=${FIXgempak:-$HOMEgfs/gempak/fix} -export USHgempak=${USHgempak:-$HOMEgfs/gempak/ush} -export SRCgfs=${SRCgfs:-$HOMEgfs/scripts} - -# For half-degree P Grib files -#export DO_HD_PGRB=YES - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=gfs -export RUN=gfs_goessim -export COMPONENT=${COMPONENT:-atmos} -export finc=3 -export model=gfs -export EXT="" - -############################################## -# Define COM directories -############################################## -export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${NET}.${PDY})/${cyc}/$COMPONENT} -export COMOUT=${COMOUT:-${COMROOT}/${NET}/${envir}/${NET}.${PDY}/${cyc}/$COMPONENT/gempak} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT -fi - -env - -export DATA_HOLD=$DATA - -msg="Begin job for $job" -postmsg "$jlogfile" "$msg" - -################################################################# -# Execute the script for the regular grib -################################################################# -export DATA=$DATA_HOLD/SPECIAL -mkdir -p $DATA -cd $DATA - -export DBN_ALERT_TYPE=GFS_GOESSIM_GEMPAK -export GRIB=goessimpgrb2.0p25.f -export EXT=" " -export fend=180 -export finc=3 -export fstart=000 - -echo "RUNS the Program" -set -xa - -######################################################## -# Execute the script. -$SRCgfs/exgoes_nawips.sh - -################################################################# -# Execute the script for the 221 grib - -export DATA=$DATA_HOLD/SPECIAL221 -mkdir -p $DATA -cd $DATA - -export DBN_ALERT_TYPE=GFS_GOESSIM221_GEMPAK -export RUN=gfs_goessim221 -export GRIB=goessimpgrb2f -export EXT=".grd221" -export fend=180 -export finc=3 -export fstart=000 - -echo "RUNS the Program" -set -xa - -######################################################## -# Execute the script. -$SRCgfs/exgoes_nawips.sh -export err=$?; err_chk -######################################################## - -msg="JOB $job HAS COMPLETED NORMALLY!" -postmsg $jlogfile "$msg" - -echo "end of program" -cd $DATA_HOLD -echo "######################################" -echo " SPECIAL.OUT " -echo "######################################" - -############################################ -# print exec I/O output -############################################ -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - -################################### -# Remove temp directories -################################### -if [ "$KEEPDATA" != "YES" ] ; then - rm -rf $DATA -fi - -date diff --git a/jobs/JGFS_PGRB2_SPEC_NPOESS b/jobs/JGFS_PGRB2_SPEC_NPOESS deleted file mode 100755 index 49e05cf146..0000000000 --- a/jobs/JGFS_PGRB2_SPEC_NPOESS +++ /dev/null @@ -1,141 +0,0 @@ -#!/bin/sh - -set -xa -export PS4='$SECONDS + ' -date - -export OMP_NUM_THREADS=${OMP_NUM_THREADS:-1} - -############################################ -# GFS PGRB2_SPECIAL_POST PRODUCT GENERATION -############################################ - -########################################################## -# obtain unique process id (pid) and make temp directory -########################################################## -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - -###################################### -# Set up the cycle variable -###################################### -export cycle=${cycle:-t${cyc}z} - -########################################### -# Run setpdy and initialize PDY variables -########################################### -setpdy.sh -. PDY - - -################################ -# Set up the HOME directory -################################ -export HOMEgfs=${HOMEgfs:-${NWROOT}/gfs.${gfs_ver}} -export USHgfs=${USHgfs:-$HOMEgfs/ush} -export EXECgfs=${EXECgfs:-$HOMEgfs/exec} -export PARMgfs=${PARMgfs:-$HOMEgfs/parm} -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -export PARMwmo=${PARMwmo:-$HOMEgfs/parm/wmo} -export PARMproduct=${PARMproduct:-$HOMEgfs/parm/product} -export FIXgfs=${FIXgfs:-$HOMEgfs/fix} - -################################### -# Specify NET and RUN Name and model -#################################### -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} -export COMPONENT=${COMPONENT:-atmos} - -############################################## -# Define COM directories -############################################## -export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/$COMPONENT} -export COMOUT=${COMOUT:-${COMROOT}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/$COMPONENT} -export COMOUTwmo=${COMOUTwmo:-${COMOUT}/wmo} - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT $COMOUTwmo -fi - -export pgmout=OUTPUT.$$ - -env - -#################################### -# Specify Forecast Hour Range -#################################### -export SHOUR=000 -export FHOUR=180 -export FHINC=003 - -####################################### -# Specify Restart File Name to Key Off -####################################### -restart_file=$COMIN/${RUN}.t${cyc}z.special.grb2if - -#################################### -# Specify Timeout Behavior of Post -# -# SLEEP_TIME - Amount of time to wait for -# a restart file before exiting -# SLEEP_INT - Amount of time to wait between -# checking for restart files -#################################### -export SLEEP_TIME=900 -export SLEEP_INT=5 - -#################################### -# Check if this is a restart -#################################### -if test -f $COMIN/$RUN.t${cyc}z.control.goessimpgrb2 -then - modelrecvy=`cat < $COMIN/$RUN.t${cyc}z.control.goessimpgrb` - recvy_pdy=`echo $modelrecvy | cut -c1-8` - recvy_cyc=`echo $modelrecvy | cut -c9-10` - recvy_shour=`echo $modelrecvy | cut -c11-13` - - if test $RERUN = "NO" - then - NEW_SHOUR=`expr $recvy_shour + $FHINC` - if test $NEW_SHOUR -ge $SHOUR - then - export SHOUR=$NEW_SHOUR - fi - if test $recvy_shour -ge $FHOUR - then - msg="Forecast Pgrb Generation Already Completed to $FHOUR" - postmsg "$jlogfile" "$msg" - else - msg="Starting: PDY=$PDY cycle=t${recvy_cyc}z SHOUR=$SHOUR ." - postmsg "$jlogfile" "$msg" - fi - fi -fi - -############################################################# -# Execute the script -$HOMEgfs/scripts/exglobal_grib2_special_npoess.sh -export err=$?;err_chk -############################################################# - -msg="JOB $job HAS COMPLETED NORMALLY!" -postmsg $jlogfile "$msg" - -############################################ -# print exec I/O output -############################################ -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - -################################### -# Remove temp directories -################################### -if [ "$KEEPDATA" != "YES" ] ; then - rm -rf $DATA -fi - -date diff --git a/jobs/JGFS_POSTSND b/jobs/JGFS_POSTSND deleted file mode 100755 index e080a89c18..0000000000 --- a/jobs/JGFS_POSTSND +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/sh -export PS4='$SECONDS + ' -date -set -xa -######################################## -# Runs GFS BUFR SOUNDINGS -######################################## - -############################ -export MP_EUIDEVELOP=min -export KMP_STACKSIZE=2048m -export MPICH_ALLTOALL_THROTTLE=0 -export MP_SINGLE_THREAD=yes -export MP_EAGER_LIMIT=65536 -export MP_USE_BULK_XFER=no -export MP_COLLECTIVE_OFFLOAD=no -export MP_SHARED_MEMORY=yes -export MP_MPILIB=mpich2 -export MP_LABELIO=yes -#################################### -# obtain unique process id (pid) and make temp directories -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir $DATA -cd $DATA - -#################################### -# Determine Job Output Name on System -#################################### -export outid="LL$job" -export pgmout="OUTPUT.${pid}" - -export cycle=t${cyc}z - -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export model=${model:-gfs} -export COMPONENT=${COMPONENT:-atmos} - -################################### -# Set up the UTILITIES -################################### - -export HOMEbufrsnd=${HOMEbufrsnd:-$NWROOT/gfs.${gfs_ver}} -export EXECbufrsnd=${EXECbufrsnd:-$HOMEbufrsnd/exec} -export FIXbufrsnd=${FIXbufrsnd:-$HOMEbufrsnd/fix/product} -export PARMbufrsnd=${PARMbufrsnd:-$HOMEbufrsnd/parm/product} -export USHbufrsnd=${USHbufrsnd:-$HOMEbufrsnd/ush} -export SCRbufrsnd=${SCRbufrsnd:-$HOMEbufrsnd/scripts} - -# Run setpdy and initialize PDY variables -setpdy.sh -. ./PDY - -############################## -# Define COM Directories -############################## -export COMIN=${COMIN:-$COMROOT/${NET}/${envir}/${RUN}.${PDY}/${cyc}/$COMPONENT} -export COMOUT=${COMOUT:-$COMROOT/${NET}/${envir}/${RUN}.${PDY}/${cyc}/$COMPONENT} -export pcom=${pcom:-${COMOUT}/wmo} -export COMAWP=${COMAWP:-${COMOUT}/gempak} -mkdir -p $COMOUT $pcom $COMAWP -env - -######################################################## -# Execute the script. -$SCRbufrsnd/exgfs_postsnd.sh -######################################################## - -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - -########################################## -# Remove the Temporary working directory -########################################## -cd $DATAROOT -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA - -date -exit 0 diff --git a/jobs/JGLOBAL_AERO_ANALYSIS_FINALIZE b/jobs/JGLOBAL_AERO_ANALYSIS_FINALIZE new file mode 100755 index 0000000000..ff8e2e9569 --- /dev/null +++ b/jobs/JGLOBAL_AERO_ANALYSIS_FINALIZE @@ -0,0 +1,56 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +export WIPE_DATA="NO" +export DATA=${DATA:-${DATAROOT}/${RUN}aeroanl_${cyc}} +source "${HOMEgfs}/ush/jjob_header.sh" -e "aeroanlfinal" -c "base aeroanl aeroanlfinal" + +############################################## +# Set variables used in the script +############################################## +# shellcheck disable=SC2153 +GDATE=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${assim_freq} hours") +gPDY=${GDATE:0:8} +gcyc=${GDATE:8:2} +GDUMP="gdas" + + +############################################## +# Begin JOB SPECIFIC work +############################################## + +# Generate COM variables from templates +YMD=${PDY} HH=${cyc} generate_com -rx COM_OBS COM_CHEM_ANALYSIS + +RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_CHEM_ANALYSIS_PREV:COM_CHEM_ANALYSIS_TMPL \ + COM_ATMOS_RESTART_PREV:COM_ATMOS_RESTART_TMPL + +mkdir -m 775 -p "${COM_CHEM_ANALYSIS}" + +############################################################### +# Run relevant script + +EXSCRIPT=${GDASAEROFINALPY:-${HOMEgfs}/scripts/exglobal_aero_analysis_finalize.py} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd "${DATAROOT}" || exit 1 +[[ ${KEEPDATA} = "NO" ]] && rm -rf "${DATA}" + +exit 0 diff --git a/jobs/JGLOBAL_AERO_ANALYSIS_INITIALIZE b/jobs/JGLOBAL_AERO_ANALYSIS_INITIALIZE new file mode 100755 index 0000000000..79320b77ee --- /dev/null +++ b/jobs/JGLOBAL_AERO_ANALYSIS_INITIALIZE @@ -0,0 +1,49 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +export DATA=${DATA:-${DATAROOT}/${RUN}aeroanl_${cyc}} +source "${HOMEgfs}/ush/jjob_header.sh" -e "aeroanlinit" -c "base aeroanl aeroanlinit" + +############################################## +# Set variables used in the script +############################################## +# shellcheck disable=SC2153 +GDATE=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${assim_freq} hours") +gPDY=${GDATE:0:8} +gcyc=${GDATE:8:2} +GDUMP="gdas" + + +############################################## +# Begin JOB SPECIFIC work +############################################## + +# Generate COM variables from templates +YMD=${PDY} HH=${cyc} generate_com -rx COM_OBS COM_CHEM_ANALYSIS + +RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_CHEM_ANALYSIS_PREV:COM_CHEM_ANALYSIS_TMPL \ + COM_ATMOS_RESTART_PREV:COM_ATMOS_RESTART_TMPL + +mkdir -m 775 -p "${COM_CHEM_ANALYSIS}" + +############################################################### +# Run relevant script + +EXSCRIPT=${GDASAEROINITPY:-${HOMEgfs}/scripts/exglobal_aero_analysis_initialize.py} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +exit 0 diff --git a/jobs/JGLOBAL_AERO_ANALYSIS_RUN b/jobs/JGLOBAL_AERO_ANALYSIS_RUN new file mode 100755 index 0000000000..853909dc03 --- /dev/null +++ b/jobs/JGLOBAL_AERO_ANALYSIS_RUN @@ -0,0 +1,35 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +export WIPE_DATA="NO" +export DATA=${DATA:-${DATAROOT}/${RUN}aeroanl_${cyc}} +source "${HOMEgfs}/ush/jjob_header.sh" -e "aeroanlrun" -c "base aeroanl aeroanlrun" + +############################################## +# Set variables used in the script +############################################## + +############################################## +# Begin JOB SPECIFIC work +############################################## + +############################################################### +# Run relevant script + +EXSCRIPT=${GDASAERORUNSH:-${HOMEgfs}/scripts/exglobal_aero_analysis_run.py} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +exit 0 diff --git a/jobs/JGLOBAL_ARCHIVE b/jobs/JGLOBAL_ARCHIVE new file mode 100755 index 0000000000..e6c016e703 --- /dev/null +++ b/jobs/JGLOBAL_ARCHIVE @@ -0,0 +1,55 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "arch" -c "base arch" + + +############################################## +# Set variables used in the script +############################################## +export CDUMP=${RUN/enkf} + +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_ANALYSIS COM_ATMOS_BUFR COM_ATMOS_GEMPAK \ + COM_ATMOS_GENESIS COM_ATMOS_HISTORY COM_ATMOS_INPUT COM_ATMOS_MASTER COM_ATMOS_RESTART \ + COM_ATMOS_TRACK COM_ATMOS_WMO \ + COM_CHEM_HISTORY COM_CHEM_ANALYSIS\ + COM_MED_RESTART \ + COM_ICE_HISTORY COM_ICE_INPUT COM_ICE_RESTART \ + COM_OBS COM_TOP \ + COM_OCEAN_HISTORY COM_OCEAN_INPUT COM_OCEAN_RESTART COM_OCEAN_XSECT COM_OCEAN_2D COM_OCEAN_3D \ + COM_OCEAN_ANALYSIS \ + COM_WAVE_GRID COM_WAVE_HISTORY COM_WAVE_STATION \ + COM_ATMOS_OZNMON COM_ATMOS_RADMON COM_ATMOS_MINMON + +for grid in "0p25" "0p50" "1p00"; do + YMD=${PDY} HH=${cyc} GRID=${grid} generate_com -rx "COM_ATMOS_GRIB_${grid}:COM_ATMOS_GRIB_GRID_TMPL" + YMD=${PDY} HH=${cyc} GRID=${grid} generate_com -rx "COM_OCEAN_GRIB_${grid}:COM_OCEAN_GRIB_GRID_TMPL" +done + +############################################################### +# Run archive script +############################################################### + +${GLOBALARCHIVESH:-${SCRgfs}/exglobal_archive.sh} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + + +########################################## +# Remove the Temporary working directory +########################################## +cd "${DATAROOT}" || (echo "${DATAROOT} does not exist. ABORT!"; exit 1) +[[ ${KEEPDATA} = "NO" ]] && rm -rf "${DATA}" + +exit 0 diff --git a/jobs/JGLOBAL_ATMENS_ANALYSIS_FINALIZE b/jobs/JGLOBAL_ATMENS_ANALYSIS_FINALIZE new file mode 100755 index 0000000000..37a49e0ae0 --- /dev/null +++ b/jobs/JGLOBAL_ATMENS_ANALYSIS_FINALIZE @@ -0,0 +1,48 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +export WIPE_DATA="NO" +export DATA=${DATA:-${DATAROOT}/${RUN}atmensanl_${cyc}} +source "${HOMEgfs}/ush/jjob_header.sh" -e "atmensanlfinal" -c "base atmensanl atmensanlfinal" + +############################################## +# Set variables used in the script +############################################## +GDUMP="gdas" +GDUMP_ENS="enkf${GDUMP}" + +############################################## +# Begin JOB SPECIFIC work +############################################## +# Generate COM variable from template +MEMDIR='ensstat' RUN=${GDUMP_ENS} YMD=${PDY} HH=${cyc} generate_com -rx \ + COM_ATMOS_ANALYSIS_ENS:COM_ATMOS_ANALYSIS_TMPL + +mkdir -m 755 -p "${COM_ATMOS_ANALYSIS_ENS}" + +############################################################### +# Run relevant script + +EXSCRIPT=${GDASATMENSFINALPY:-${HOMEgfs}/scripts/exglobal_atmens_analysis_finalize.py} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd "${DATAROOT}" || ( echo "FATAL ERROR: ${DATAROOT} does not exist, ABORT!"; exit 1 ) +[[ ${KEEPDATA} = "NO" ]] && rm -rf "${DATA}" + +exit 0 diff --git a/jobs/JGLOBAL_ATMENS_ANALYSIS_INITIALIZE b/jobs/JGLOBAL_ATMENS_ANALYSIS_INITIALIZE new file mode 100755 index 0000000000..c50214aad1 --- /dev/null +++ b/jobs/JGLOBAL_ATMENS_ANALYSIS_INITIALIZE @@ -0,0 +1,44 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +export DATA=${DATA:-${DATAROOT}/${RUN}atmensanl_${cyc}} +source "${HOMEgfs}/ush/jjob_header.sh" -e "atmensanlinit" -c "base atmensanl atmensanlinit" + +############################################## +# Set variables used in the script +############################################## +# shellcheck disable=SC2153 +GDATE=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${assim_freq} hours") +gPDY=${GDATE:0:8} +gcyc=${GDATE:8:2} +GDUMP="gdas" + +############################################## +# Begin JOB SPECIFIC work +############################################## +# Generate COM variables from templates +RUN=${GDUMP} YMD=${PDY} HH=${cyc} generate_com -rx COM_OBS + +RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_ATMOS_ANALYSIS_PREV:COM_ATMOS_ANALYSIS_TMPL + +############################################################### +# Run relevant script + +EXSCRIPT=${GDASATMENSINITPY:-${HOMEgfs}/scripts/exglobal_atmens_analysis_initialize.py} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +exit 0 diff --git a/jobs/JGLOBAL_ATMENS_ANALYSIS_RUN b/jobs/JGLOBAL_ATMENS_ANALYSIS_RUN new file mode 100755 index 0000000000..0d10c76b05 --- /dev/null +++ b/jobs/JGLOBAL_ATMENS_ANALYSIS_RUN @@ -0,0 +1,35 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +export WIPE_DATA="NO" +export DATA=${DATA:-${DATAROOT}/${RUN}atmensanl_${cyc}} +source "${HOMEgfs}/ush/jjob_header.sh" -e "atmensanlrun" -c "base atmensanl atmensanlrun" + +############################################## +# Set variables used in the script +############################################## + +############################################## +# Begin JOB SPECIFIC work +############################################## + +############################################################### +# Run relevant script + +EXSCRIPT=${GDASATMENSRUNSH:-${HOMEgfs}/scripts/exglobal_atmens_analysis_run.py} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +exit 0 diff --git a/jobs/JGLOBAL_ATMOS_ANALYSIS b/jobs/JGLOBAL_ATMOS_ANALYSIS new file mode 100755 index 0000000000..9e5850bfc3 --- /dev/null +++ b/jobs/JGLOBAL_ATMOS_ANALYSIS @@ -0,0 +1,122 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "anal" -c "base anal" + + +############################################## +# Set variables used in the script +############################################## +export CDATE=${CDATE:-${PDY}${cyc}} +export CDUMP=${RUN/enkf} +export COMPONENT="atmos" +export DO_CALC_ANALYSIS=${DO_CALC_ANALYSIS:-"YES"} +export MAKE_NSSTBUFR=${MAKE_NSSTBUFR:-"NO"} +export MAKE_ACFTBUFR=${MAKE_ACFTBUFR:-"NO"} + + +############################################## +# Begin JOB SPECIFIC work +############################################## + +GDATE=$(${NDATE} -${assim_freq} ${PDY}${cyc}) +export gPDY=${GDATE:0:8} +export gcyc=${GDATE:8:2} +export GDUMP="gdas" +export GDUMP_ENS="enkf${GDUMP}" + +export OPREFIX="${CDUMP}.t${cyc}z." +export GPREFIX="${GDUMP}.t${gcyc}z." +export APREFIX="${CDUMP}.t${cyc}z." +export GPREFIX_ENS="${GDUMP_ENS}.t${gcyc}z." + +# Generate COM variables from templates +YMD=${PDY} HH=${cyc} generate_com -rx COM_OBS COM_ATMOS_ANALYSIS + +RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_ATMOS_ANALYSIS_PREV:COM_ATMOS_ANALYSIS_TMPL \ + COM_ATMOS_HISTORY_PREV:COM_ATMOS_HISTORY_TMPL + +MEMDIR='ensstat' RUN=${GDUMP_ENS} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_ATMOS_HISTORY_ENS_PREV:COM_ATMOS_HISTORY_TMPL + +mkdir -m 775 -p "${COM_ATMOS_ANALYSIS}" + +export ATMGES="${COM_ATMOS_HISTORY_PREV}/${GPREFIX}atmf006.nc" +if [ ! -f ${ATMGES} ]; then + echo "FATAL ERROR: FILE MISSING: ATMGES = ${ATMGES}" + exit 1 +fi + +# Get LEVS +export LEVS=$(${NCLEN} ${ATMGES} pfull) +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + + +if [ ${DOHYBVAR} = "YES" ]; then + export ATMGES_ENSMEAN="${COM_ATMOS_HISTORY_ENS_PREV}/${GPREFIX_ENS}atmf006.ensmean.nc" + if [ ! -f ${ATMGES_ENSMEAN} ]; then + echo "FATAL ERROR: FILE MISSING: ATMGES_ENSMEAN = ${ATMGES_ENSMEAN}" + exit 2 + fi +fi + + +# Link observational data +export PREPQC="${COM_OBS}/${OPREFIX}prepbufr" +if [[ ! -f ${PREPQC} ]]; then + echo "WARNING: Global PREPBUFR FILE ${PREPQC} MISSING" +fi +export TCVITL="${COM_OBS}/${OPREFIX}syndata.tcvitals.tm00" +if [[ ${DONST} = "YES" ]]; then + if [[ ${MAKE_NSSTBUFR} == "YES" ]]; then + export NSSTBF="${COM_OBS}/${OPREFIX}nsstbufr" + fi +fi +export PREPQCPF="${COM_OBS}/${OPREFIX}prepbufr.acft_profiles" + +# Copy fix file for obsproc # TODO: Why is this necessary? +if [[ ${RUN} = "gfs" ]]; then + mkdir -p ${ROTDIR}/fix + cp ${FIXgsi}/prepobs_errtable.global ${ROTDIR}/fix/ +fi + + +############################################################### +# Run relevant script + +${ANALYSISSH:-${SCRgfs}/exglobal_atmos_analysis.sh} +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + + +############################################## +# Send Alerts +############################################## +if [ ${SENDDBN} = YES -a ${RUN} = gdas ] ; then + ${DBNROOT}/bin/dbn_alert MODEL GDAS_MSC_abias ${job} ${COM_ATMOS_ANALYSIS}/${APREFIX}abias + ${DBNROOT}/bin/dbn_alert MODEL GDAS_MSC_abias_pc ${job} ${COM_ATMOS_ANALYSIS}/${APREFIX}abias_pc + ${DBNROOT}/bin/dbn_alert MODEL GDAS_MSC_abias_air ${job} ${COM_ATMOS_ANALYSIS}/${APREFIX}abias_air +fi + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat ${pgmout} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 diff --git a/jobs/JGLOBAL_ATMOS_ANALYSIS_CALC b/jobs/JGLOBAL_ATMOS_ANALYSIS_CALC new file mode 100755 index 0000000000..65a571a974 --- /dev/null +++ b/jobs/JGLOBAL_ATMOS_ANALYSIS_CALC @@ -0,0 +1,82 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "analcalc" -c "base anal analcalc" + + +############################################## +# Set variables used in the script +############################################## +export CDUMP="${RUN/enkf}" +export DO_CALC_ANALYSIS=${DO_CALC_ANALYSIS:-"YES"} + + +############################################## +# Begin JOB SPECIFIC work +############################################## +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +GDATE=$(${NDATE} -"${assim_freq}" "${PDY}${cyc}") +# shellcheck disable= +export gPDY=${GDATE:0:8} +export gcyc=${GDATE:8:2} +export GDUMP="gdas" +export GDUMP_ENS="enkf${GDUMP}" + +export OPREFIX="${CDUMP}.t${cyc}z." +export GPREFIX="${GDUMP}.t${gcyc}z." +export APREFIX="${RUN}.t${cyc}z." +export GPREFIX_ENS="${GDUMP_ENS}.t${gcyc}z." + +RUN=${CDUMP} YMD=${PDY} HH=${cyc} generate_com -rx COM_OBS + +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_ANALYSIS COM_ATMOS_RESTART + +RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_OBS_PREV:COM_OBS_TMPL \ + COM_ATMOS_HISTORY_PREV:COM_ATMOS_HISTORY_TMPL + + +export ATMGES="${COM_ATMOS_HISTORY_PREV}/${GPREFIX}atmf006.nc" +if [ ! -f ${ATMGES} ]; then + echo "FATAL ERROR: FILE MISSING: ATMGES = ${ATMGES}" + exit 1 +fi + +# Get LEVS +export LEVS=$(${NCLEN} ${ATMGES} pfull) +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + + +# Generate Gaussian surface analysis # TODO: Should this be removed now that sfcanl is its own job? +export DOGAUSFCANL=${DOGAUSFCANL:-"YES"} + + +############################################################### +# Run relevant script + +${ANALCALCSH:-${SCRgfs}/exglobal_atmos_analysis_calc.sh} +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat ${pgmout} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 diff --git a/jobs/JGLOBAL_ATMOS_EMCSFC_SFC_PREP b/jobs/JGLOBAL_ATMOS_EMCSFC_SFC_PREP new file mode 100755 index 0000000000..3312ef27f5 --- /dev/null +++ b/jobs/JGLOBAL_ATMOS_EMCSFC_SFC_PREP @@ -0,0 +1,59 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "sfc_prep" -c "base" + +export SENDDBN=${SENDDBN:-NO} +export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} + +############################################## +# Set CDATE +############################################## + +CDATE=${CDATE:-${PDY}${cyc}} +GDATE=$(${NDATE} -06 ${CDATE}) +PDY_m6hrs=$(echo ${GDATE} | cut -c1-8) +cyc_m6hrs=$(echo ${GDATE} | cut -c9-10) +export cycle_m6hrs=t${cyc_m6hrs}z + +export COMPONENT="atmos" +export COMOUT=${COMOUT:-$(compath.py -o ${NET}/${gfs_ver}/${RUN}.${PDY})/${cyc}/${COMPONENT}} + +export COMINobsproc=${COMINobsproc:-$(compath.py ${envir}/obsproc/${obsproc_ver})/${RUN}.${PDY}/${cyc}/${COMPONENT}} +export COMIN_m6hrs=${COMIN_m6hrs:-$(compath.py ${envir}/${NET}/${gfs_ver})/${RUN}.${PDY_m6hrs}/${cyc_m6hrs}/${COMPONENT}} + +export IMS_FILE=${COMINobsproc}/${RUN}.${cycle}.imssnow96.grib2 +export FIVE_MIN_ICE_FILE=${COMINobsproc}/${RUN}.${cycle}.seaice.5min.grib2 +export AFWA_NH_FILE=${COMINobsproc}/${RUN}.${cycle}.NPR.SNWN.SP.S1200.MESH16.grb +export AFWA_SH_FILE=${COMINobsproc}/${RUN}.${cycle}.NPR.SNWS.SP.S1200.MESH16.grb + +export BLENDED_ICE_FILE=${BLENDED_ICE_FILE:-${RUN}.${cycle}.seaice.5min.blend.grb} +export BLENDED_ICE_FILE_m6hrs=${BLENDED_ICE_FILE_m6hrs:-${COMIN_m6hrs}/${RUN}.${cycle_m6hrs}.seaice.5min.blend.grb} + +############################################################### +# Run relevant script +############################################################### + +${EMCSFCPREPSH:-${SCRgfs}/exemcsfc_global_sfc_prep.sh} +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [ -e ${pgmout} ]; then + cat ${pgmout} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 diff --git a/jobs/JGLOBAL_ATMOS_POST_MANAGER b/jobs/JGLOBAL_ATMOS_POST_MANAGER new file mode 100755 index 0000000000..1d82537dca --- /dev/null +++ b/jobs/JGLOBAL_ATMOS_POST_MANAGER @@ -0,0 +1,44 @@ +#! /usr/bin/env bash + +# TODO (#1227) This job is not used in the rocoto suite + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "post" -c "base post" + + +#################################### +# Specify NET and RUN Name and model +#################################### +export NET=${NET:-gfs} +export RUN=${RUN:-gfs} + + +#################################### +# Specify version numbers +#################################### +export gfs_ver=${gfs_ver:-v15.0.0} + +#################################### +# Specify Execution Areas +#################################### +export HOMEgfs=${HOMEgfs:-${PACKAGEROOT}/gfs.${gfs_ver}} +export EXECgfs=${HOMEgfs:-${HOMEgfs}/exec} +export FIXgfs=${HOMEgfs:-${HOMEgfs}/fix} +export PARMgfs=${HOMEgfs:-${HOMEgfs}/parm} +export USHgfs=${HOMEgfs:-${HOMEgfs}/ush} + +########################### +# Set up EXT variable +########################### +export EXT_FCST=NO + +export ROTDIR=${ROTDIR:-${COMROOT:?}/${NET}/${envir}} +export COMIN=${COMIN:-${ROTDIR}/${RUN}.${PDY}/${cyc}/atmos} +export COMOUT=${COMOUT:-${ROTDIR}/${RUN}.${PDY}/${cyc}/atmos} + + +######################################################## +# Execute the script. +${HOMEgfs}/scripts/exglobal_atmos_pmgr.sh +######################################################## + diff --git a/jobs/JGLOBAL_ATMOS_PRODUCTS b/jobs/JGLOBAL_ATMOS_PRODUCTS new file mode 100755 index 0000000000..24e7edacdd --- /dev/null +++ b/jobs/JGLOBAL_ATMOS_PRODUCTS @@ -0,0 +1,47 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "atmos_products" -c "base atmos_products" + + +############################################## +# Begin JOB SPECIFIC work +############################################## + +# Construct COM variables from templates +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_ANALYSIS COM_ATMOS_HISTORY COM_ATMOS_MASTER + +for grid in '0p25' '0p50' '1p00'; do + prod_dir="COM_ATMOS_GRIB_${grid}" + GRID=${grid} YMD=${PDY} HH=${cyc} generate_com -rx "${prod_dir}:COM_ATMOS_GRIB_GRID_TMPL" + if [[ ! -d "${!prod_dir}" ]]; then mkdir -m 775 -p "${!prod_dir}"; fi +done + +# Variables used in this job +export PREFIX="${RUN}.t${cyc}z." + +############################################################### +# Run exglobal script +"${HOMEgfs}/scripts/exglobal_atmos_products.sh" +status=$? +(( status != 0 )) && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]]; then + cat "${pgmout}" +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd "${DATAROOT}" || exit 1 +[[ "${KEEPDATA:-NO}" = "NO" ]] && rm -rf "${DATA}" + + +exit 0 diff --git a/jobs/JGLOBAL_ATMOS_SFCANL b/jobs/JGLOBAL_ATMOS_SFCANL new file mode 100755 index 0000000000..0d709e56dd --- /dev/null +++ b/jobs/JGLOBAL_ATMOS_SFCANL @@ -0,0 +1,61 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "sfcanl" -c "base sfcanl" + + +############################################## +# Set variables used in the script +############################################## +export CDUMP="${RUN/enkf}" + + +############################################## +# Begin JOB SPECIFIC work +############################################## +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +GDATE=$(${NDATE} -"${assim_freq}" "${PDY}${cyc}") +# shellcheck disable= +gPDY=${GDATE:0:8} +gcyc=${GDATE:8:2} +export GDUMP="gdas" + +export OPREFIX="${CDUMP}.t${cyc}z." +export GPREFIX="${GDUMP}.t${gcyc}z." +export APREFIX="${CDUMP}.t${cyc}z." + +YMD=${PDY} HH=${cyc} generate_com -rx COM_OBS COM_ATMOS_ANALYSIS COM_ATMOS_RESTART \ + COM_LAND_ANALYSIS + +RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_OBS_PREV:COM_OBS_TMPL \ + COM_ATMOS_RESTART_PREV:COM_ATMOS_RESTART_TMPL + +############################################################### +# Run relevant script + +${SFCANALSH:-${SCRgfs}/exglobal_atmos_sfcanl.sh} +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat ${pgmout} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 diff --git a/jobs/JGLOBAL_ATMOS_TROPCY_QC_RELOC b/jobs/JGLOBAL_ATMOS_TROPCY_QC_RELOC new file mode 100755 index 0000000000..82c3a5c755 --- /dev/null +++ b/jobs/JGLOBAL_ATMOS_TROPCY_QC_RELOC @@ -0,0 +1,64 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "prep" -c "base prep" + + +############################################## +# Set variables used in the exglobal script +############################################## +export CDATE=${CDATE:-${PDY}${cyc}} +export CDUMP=${RUN/enkf} + + +############################################## +# Begin JOB SPECIFIC work +############################################## + +export PROCESS_TROPCY=${PROCESS_TROPCY:-YES} # Turn on tropical cyclone tcvitals QC proc. if YES +export DO_RELOCATE=${DO_RELOCATE:-NO} # Turn on tropical cyclone relocation proc. if YES + +export tmmark=tm00 +export ARCHSYND=${ROTDIR}/syndat # this location is unique, do not change +if [ ! -d ${ARCHSYND} ]; then mkdir -p ${ARCHSYND}; fi + +export HOMENHC=${HOMENHC:-/lfs/h1/ops/prod/dcom/nhc/atcf/ncep} + +export TANK_TROPCY=${TANK_TROPCY:-${DCOMROOT}} # path to tropical cyclone record database + +############################################## +# Define COM directories +############################################## +generate_com COM_OBS +if [[ ! -d "${COM_OBS}" ]]; then mkdir -p "${COM_OBS}"; fi + +export CRES=$(echo ${CASE} | cut -c2-) +export LATB=$((CRES*2)) +export LONB=$((CRES*4)) +export BKGFREQ=1 # for hourly relocation + + +############################################## +# Run relevant script +############################################## + +${TROPCYQCRELOSH:-${SCRgfs}/exglobal_atmos_tropcy_qc_reloc.sh} +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + + +############################################## +# Final processing +############################################## +if [ -e "${pgmout}" ] ; then + cat ${pgmout} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 diff --git a/jobs/JGLOBAL_ATMOS_UPP b/jobs/JGLOBAL_ATMOS_UPP new file mode 100755 index 0000000000..9364f33225 --- /dev/null +++ b/jobs/JGLOBAL_ATMOS_UPP @@ -0,0 +1,44 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "upp" -c "base upp" + +############################################## +# Set variables used in the exglobal script +############################################## + +############################################## +# Begin JOB SPECIFIC work +############################################## + +# Construct COM variables from templates +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_ANALYSIS COM_ATMOS_HISTORY COM_ATMOS_MASTER +if [[ ! -d ${COM_ATMOS_MASTER} ]]; then mkdir -m 775 -p "${COM_ATMOS_MASTER}"; fi + + +############################################################### +# Run relevant exglobal script + +"${HOMEgfs}/scripts/exglobal_atmos_upp.py" +status=$? +(( status != 0 )) && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]]; then + cat "${pgmout}" +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd "${DATAROOT}" || exit 1 +[[ "${KEEPDATA:-NO}" = "NO" ]] && rm -rf "${DATA}" + + +exit 0 diff --git a/jobs/JGLOBAL_ATMOS_VMINMON b/jobs/JGLOBAL_ATMOS_VMINMON new file mode 100755 index 0000000000..dbd76aed5b --- /dev/null +++ b/jobs/JGLOBAL_ATMOS_VMINMON @@ -0,0 +1,44 @@ +#! /usr/bin/env bash + +########################################################### +# Global Minimization Monitor (MinMon) job +########################################################### +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "vminmon" -c "base vminmon" + +############################################# +# Determine PDY and cyc for previous cycle +############################################# +# shellcheck disable=SC2153 +GDATE=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${assim_freq} hours") +export gPDY=${GDATE:0:8} +export gcyc=${GDATE:8:2} + +############################################# +# TANKverf - WHERE OUTPUT DATA WILL RESIDE +############################################# +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_ANALYSIS +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_MINMON +YMD=${gPDY} HH=${gcyc} generate_com -rx COM_ATMOS_MINMON_PREV:COM_ATMOS_MINMON_TMPL + +export gsistat="${COM_ATMOS_ANALYSIS}/${RUN}.t${cyc}z.gsistat" +export M_TANKverf=${M_TANKverf:-${COM_ATMOS_MINMON}} +export M_TANKverfM1=${M_TANKverfM1:-${COM_ATMOS_MINMON_PREV}} + +if [[ ! -d ${M_TANKverf} ]]; then mkdir -p -m 775 "${M_TANKverf}" ; fi +if [[ ! -d ${M_TANKverfM1} ]]; then mkdir -p -m 775 "${M_TANKverfM1}" ; fi + +######################################################## +# Execute the script. +"${SCRgfs}/exglobal_atmos_vminmon.sh" +err=$? +if (( err != 0 )); then + exit "${err}" +fi + +################################ +# Remove the Working Directory +################################ +[[ "${KEEPDATA}" = "NO" ]] && rm -rf "${DATA}" + +exit 0 diff --git a/jobs/JGLOBAL_ATM_ANALYSIS_FINALIZE b/jobs/JGLOBAL_ATM_ANALYSIS_FINALIZE new file mode 100755 index 0000000000..52a782d7c4 --- /dev/null +++ b/jobs/JGLOBAL_ATM_ANALYSIS_FINALIZE @@ -0,0 +1,58 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +export WIPE_DATA="NO" +export DATA=${DATA:-${DATAROOT}/${RUN}atmanl_${cyc}} +source "${HOMEgfs}/ush/jjob_header.sh" -e "atmanlfinal" -c "base atmanl atmanlfinal" + +############################################## +# Set variables used in the script +############################################## +# shellcheck disable=SC2153 +GDATE=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${assim_freq} hours") +gPDY=${GDATE:0:8} +gcyc=${GDATE:8:2} +GDUMP="gdas" + + +############################################## +# Begin JOB SPECIFIC work +############################################## + +# Generate COM variables from templates +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_ANALYSIS + +RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_ATMOS_ANALYSIS_PREV:COM_ATMOS_ANALYSIS_TMPL \ + COM_ATMOS_HISTORY_PREV:COM_ATMOS_HISTORY_TMPL \ + COM_ATMOS_RESTART_PREV:COM_ATMOS_RESTART_TMPL + +mkdir -m 775 -p "${COM_ATMOS_ANALYSIS}" + + +############################################################### +# Run relevant script + +EXSCRIPT=${GDASATMFINALPY:-${HOMEgfs}/scripts/exglobal_atm_analysis_finalize.py} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd "${DATAROOT}" || ( echo "FATAL ERROR: ${DATAROOT} does not exist, ABORT!"; exit 1 ) +[[ ${KEEPDATA} = "NO" ]] && rm -rf "${DATA}" + +exit 0 diff --git a/jobs/JGLOBAL_ATM_ANALYSIS_INITIALIZE b/jobs/JGLOBAL_ATM_ANALYSIS_INITIALIZE new file mode 100755 index 0000000000..4ef5e6392d --- /dev/null +++ b/jobs/JGLOBAL_ATM_ANALYSIS_INITIALIZE @@ -0,0 +1,55 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +export DATA=${DATA:-${DATAROOT}/${RUN}atmanl_${cyc}} +source "${HOMEgfs}/ush/jjob_header.sh" -e "atmanlinit" -c "base atmanl atmanlinit" + +############################################## +# Set variables used in the script +############################################## +# shellcheck disable=SC2153 +GDATE=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${assim_freq} hours") +gPDY=${GDATE:0:8} +gcyc=${GDATE:8:2} +GDUMP="gdas" +GDUMP_ENS="enkf${GDUMP}" + + +############################################## +# Begin JOB SPECIFIC work +############################################## + +# Generate COM variables from templates +YMD=${PDY} HH=${cyc} generate_com -rx COM_OBS COM_ATMOS_ANALYSIS + +RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_ATMOS_ANALYSIS_PREV:COM_ATMOS_ANALYSIS_TMPL \ + COM_ATMOS_HISTORY_PREV:COM_ATMOS_HISTORY_TMPL \ + COM_ATMOS_RESTART_PREV:COM_ATMOS_RESTART_TMPL + +MEMDIR='ensstat' RUN=${GDUMP_ENS} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_ATMOS_HISTORY_ENS_PREV:COM_ATMOS_HISTORY_TMPL + +mkdir -m 775 -p "${COM_ATMOS_ANALYSIS}" + + +############################################################### +# Run relevant script + +EXSCRIPT=${GDASATMINITPY:-${HOMEgfs}/scripts/exglobal_atm_analysis_initialize.py} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +exit 0 diff --git a/jobs/JGLOBAL_ATM_ANALYSIS_RUN b/jobs/JGLOBAL_ATM_ANALYSIS_RUN new file mode 100755 index 0000000000..bbfdbe4a1f --- /dev/null +++ b/jobs/JGLOBAL_ATM_ANALYSIS_RUN @@ -0,0 +1,37 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +export WIPE_DATA="NO" +export DATA=${DATA:-${DATAROOT}/${RUN}atmanl_${cyc}} +source "${HOMEgfs}/ush/jjob_header.sh" -e "atmanlrun" -c "base atmanl atmanlrun" + +############################################## +# Set variables used in the script +############################################## + + +############################################## +# Begin JOB SPECIFIC work +############################################## + + +############################################################### +# Run relevant script + +EXSCRIPT=${GDASATMRUNSH:-${HOMEgfs}/scripts/exglobal_atm_analysis_run.py} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +exit 0 diff --git a/jobs/JGLOBAL_ATM_PREP_IODA_OBS b/jobs/JGLOBAL_ATM_PREP_IODA_OBS new file mode 100755 index 0000000000..ef0e682468 --- /dev/null +++ b/jobs/JGLOBAL_ATM_PREP_IODA_OBS @@ -0,0 +1,36 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "prepatmiodaobs" -c "base prepatmiodaobs" + +############################################## +# Set variables used in the script +############################################## + + +############################################## +# Begin JOB SPECIFIC work +############################################## +# Generate COM variables from templates +YMD=${PDY} HH=${cyc} generate_com -rx COM_OBS + + +############################################################### +# Run relevant script +EXSCRIPT=${BUFR2IODASH:-${HOMEgfs}/ush/run_bufr2ioda.py} +${EXSCRIPT} "${PDY}${cyc}" "${RUN}" "${DMPDIR}" "${IODAPARM}" "${COM_OBS}/" +status=$? +[[ ${status} -ne 0 ]] && (echo "FATAL ERROR: Error executing ${EXSCRIPT}, ABORT!"; exit "${status}") + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +exit 0 diff --git a/jobs/JGLOBAL_CLEANUP b/jobs/JGLOBAL_CLEANUP new file mode 100755 index 0000000000..ad938ccf60 --- /dev/null +++ b/jobs/JGLOBAL_CLEANUP @@ -0,0 +1,17 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "cleanup" -c "base cleanup" + +"${HOMEgfs}/scripts/exglobal_cleanup.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +########################################## +# Remove the Temporary working directory +########################################## +cd "${DATAROOT}" || (echo "${DATAROOT} does not exist. ABORT!"; exit 1) +[[ ${KEEPDATA} = "NO" ]] && rm -rf "${DATA}" + +exit 0 + diff --git a/jobs/JGLOBAL_EMCSFC_SFC_PREP b/jobs/JGLOBAL_EMCSFC_SFC_PREP deleted file mode 100755 index cffd73c6ff..0000000000 --- a/jobs/JGLOBAL_EMCSFC_SFC_PREP +++ /dev/null @@ -1,91 +0,0 @@ -#!/bin/ksh -set -x - -export RUN_ENVIR=${RUN_ENVIR:-"nco"} -export PS4='$SECONDS + ' -date - -############################################## -# Obtain unique process id (pid) and make temp directory -############################################## -export pid=${pid:-$$} -export outid=${outid:-"LL$job"} -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - - -############################################## -# Run setpdy and initialize PDY variables -############################################## -export cycle="t${cyc}z" -setpdy.sh -. ./PDY - - -############################################## -# Determine Job Output Name on System -############################################## -export pgmout="OUTPUT.${pid}" -export pgmerr=errfile - - -############################################## -# Set CDATE -############################################## - -CDATE=${CDATE:-${PDY}${cyc}} -GDATE=$($NDATE -06 $CDATE) -PDY_m6hrs=$(echo $GDATE | cut -c1-8) -cyc_m6hrs=$(echo $GDATE | cut -c9-10) -export cycle_m6hrs=t${cyc_m6hrs}z - -export COMPONENT=${COMPONENT:-atmos} -export COMOUT=${COMOUT:-${COMROOT}/$NET/$envir/$RUN.$PDY/$cyc/$COMPONENT} - -export COMINgfs=${COMINgfs:-$(compath.py $NET/$envir/$RUN.$PDY)/$cyc/$COMPONENT} -export COMINgfs_m6hrs=${COMINgfs_m6hrs:-$(compath.py $NET/$envir/$RUN.$PDY_m6hrs)/$cyc_m6hrs/$COMPONENT} - -export IMS_FILE=${COMINgfs}/${RUN}.${cycle}.imssnow96.grib2 -export FIVE_MIN_ICE_FILE=${COMINgfs}/${RUN}.${cycle}.seaice.5min.grib2 -export AFWA_NH_FILE=${COMINgfs}/${RUN}.${cycle}.NPR.SNWN.SP.S1200.MESH16.grb -export AFWA_SH_FILE=${COMINgfs}/${RUN}.${cycle}.NPR.SNWS.SP.S1200.MESH16.grb - -export BLENDED_ICE_FILE=${BLENDED_ICE_FILE:-${RUN}.${cycle}.seaice.5min.blend.grb} -export BLENDED_ICE_FILE_m6hrs=${BLENDED_ICE_FILE_m6hrs:-${COMINgfs_m6hrs}/${RUN}.${cycle_m6hrs}.seaice.5min.blend.grb} - -############################################################### -# Run relevant script -############################################################### - -env -msg="HAS BEGUN on `hostname`" -postmsg "$jlogfile" "$msg" - -${EMCSFCPREPSH:-$SCRgfs/exemcsfc_global_sfc_prep.sh} -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################## -# End JOB SPECIFIC work -############################################## - -############################################## -# Final processing -############################################## -if [ -e ${pgmout} ]; then - cat $pgmout -fi - -msg="ENDED NORMALLY." -postmsg "$jlogfile" "$msg" - -########################################## -# Remove the Temporary working directory -########################################## -cd $DATAROOT -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA - -date - -exit 0 diff --git a/jobs/JGLOBAL_FORECAST b/jobs/JGLOBAL_FORECAST index ef0107fc53..b2825af54f 100755 --- a/jobs/JGLOBAL_FORECAST +++ b/jobs/JGLOBAL_FORECAST @@ -1,114 +1,87 @@ -#!/bin/ksh -set -x - -export RUN_ENVIR=${RUN_ENVIR:-"nco"} -export PS4='$SECONDS + ' -date - - -############################# -# Source relevant config files -############################# -configs="base fcst" -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} -for config in $configs; do - . $config_path/config.$config - status=$? - [[ $status -ne 0 ]] && exit $status -done -# Source additional configs -if [ ${DO_WAVE:-"NO"} = "YES" ]; then - configs="wave" - for config in $configs; do - . $config_path/config.$config - status=$? - [[ $status -ne 0 ]] && exit $status - done -fi - -########################################## -# Source machine runtime environment -########################################## -. $HOMEgfs/env/${machine}.env fcst -status=$? -[[ $status -ne 0 ]] && exit $status +#! /usr/bin/env bash +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "fcst" -c "base fcst" ############################################## -# Obtain unique process id (pid) and make temp directory +# Set variables used in the script ############################################## -export pid=${pid:-$$} -export outid=${outid:-"LL$job"} -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - - -############################################## -# Run setpdy and initialize PDY variables -############################################## -export cycle="t${cyc}z" -setpdy.sh -. ./PDY - - -############################################## -# Determine Job Output Name on System -############################################## -export pgmout="OUTPUT.${pid}" -export pgmerr=errfile - - -############################################## -# Set variables used in the exglobal script -############################################## -export CDATE=${CDATE:-${PDY}${cyc}} -export CDUMP=${CDUMP:-${RUN:-"gfs"}} -if [ $RUN_ENVIR = "nco" ]; then - export ROTDIR=${COMROOT:?}/$NET/$envir - export RSTDIR=${GESROOT:?}/$envir -fi - -# Set wave variables -if [ ${DO_WAVE:-"NO"} = "YES" ]; then - # WAVE component directory - export CDUMPwave=${CDUMPwave:-${CDUMP}wave} - export COMINwave=${COMINwave:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/wave} - export COMOUTwave=${COMOUTwave:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/wave} -fi +export CDUMP=${RUN/enkf} ############################################## # Begin JOB SPECIFIC work ############################################## # Restart conditions for GFS cycle come from GDAS -rCDUMP=$CDUMP -[[ $CDUMP = "gfs" ]] && export rCDUMP="gdas" +rCDUMP=${CDUMP} +[[ ${CDUMP} = "gfs" ]] && export rCDUMP="gdas" # Forecast length for GFS forecast -if [ $CDUMP = "gfs" ]; then - export FHMAX=$FHMAX_GFS - export FHOUT=$FHOUT_GFS - export FHMAX_HF=$FHMAX_HF_GFS - export FHOUT_HF=$FHOUT_HF_GFS -else +case ${RUN} in + *gfs | *gefs) + # shellcheck disable=SC2153 + export FHMAX=${FHMAX_GFS} + # shellcheck disable=SC2153 + export FHOUT=${FHOUT_GFS} + export FHMAX_HF=${FHMAX_HF_GFS} + export FHOUT_HF=${FHOUT_HF_GFS} + ;; + *gdas) export FHMAX_HF=0 export FHOUT_HF=0 + ;; + *) + echo "FATAL ERROR: Unsupported RUN '${RUN}'" + exit 1 +esac + + +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +GDATE=$(date --utc -d "${PDY} ${cyc} - ${assim_freq} hours" +%Y%m%d%H) +declare -rx GDATE +# shellcheck disable= +declare -rx gPDY="${GDATE:0:8}" +declare -rx gcyc="${GDATE:8:2}" + +# Construct COM variables from templates (see config.com) +YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_RESTART COM_ATMOS_INPUT COM_ATMOS_ANALYSIS \ + COM_ATMOS_HISTORY COM_ATMOS_MASTER COM_TOP COM_CONF + +RUN=${rCDUMP} YMD="${gPDY}" HH="${gcyc}" generate_com -rx \ + COM_ATMOS_RESTART_PREV:COM_ATMOS_RESTART_TMPL + +if [[ ${DO_WAVE} == "YES" ]]; then + YMD=${PDY} HH=${cyc} generate_com -rx COM_WAVE_RESTART COM_WAVE_PREP COM_WAVE_HISTORY + RUN=${rCDUMP} YMD="${gPDY}" HH="${gcyc}" generate_com -rx \ + COM_WAVE_RESTART_PREV:COM_WAVE_RESTART_TMPL + declare -rx RUNwave="${RUN}wave" +fi + +if [[ ${DO_OCN} == "YES" ]]; then + YMD=${PDY} HH=${cyc} generate_com -rx COM_MED_RESTART COM_OCEAN_RESTART COM_OCEAN_INPUT \ + COM_OCEAN_HISTORY COM_OCEAN_ANALYSIS + RUN=${rCDUMP} YMD="${gPDY}" HH="${gcyc}" generate_com -rx \ + COM_OCEAN_RESTART_PREV:COM_OCEAN_RESTART_TMPL +fi + +if [[ ${DO_ICE} == "YES" ]]; then + YMD=${PDY} HH=${cyc} generate_com -rx COM_ICE_HISTORY COM_ICE_INPUT COM_ICE_RESTART + RUN=${rCDUMP} YMD="${gPDY}" HH="${gcyc}" generate_com -rx \ + COM_ICE_RESTART_PREV:COM_ICE_RESTART_TMPL +fi + +if [[ ${DO_AERO} == "YES" ]]; then + YMD=${PDY} HH=${cyc} generate_com -rx COM_CHEM_HISTORY fi ############################################################### # Run relevant exglobal script -env -msg="HAS BEGUN on `hostname`" -postmsg "$jlogfile" "$msg" -$LOGSCRIPT - -${FORECASTSH:-$SCRgfs/exglobal_fcst_nemsfv3gfs.sh} +${FORECASTSH:-${SCRgfs}/exglobal_forecast.sh} status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} ############################################## @@ -118,18 +91,15 @@ status=$? ############################################## # Final processing ############################################## -if [ -e "$pgmout" ] ; then - cat $pgmout +if [ -e "${pgmout}" ] ; then + cat ${pgmout} fi -msg="ENDED NORMALLY." -postmsg "$jlogfile" "$msg" - ########################################## # Remove the Temporary working directory ########################################## -cd $DATAROOT -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + -date exit 0 diff --git a/jobs/JGLOBAL_LAND_ANALYSIS b/jobs/JGLOBAL_LAND_ANALYSIS new file mode 100755 index 0000000000..3ff7e72a35 --- /dev/null +++ b/jobs/JGLOBAL_LAND_ANALYSIS @@ -0,0 +1,46 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "landanl" -c "base landanl" + +############################################## +# Set variables used in the script +############################################## +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +GDATE=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${assim_freq} hours") +gPDY=${GDATE:0:8} +gcyc=${GDATE:8:2} +GDUMP="gdas" + +############################################## +# Begin JOB SPECIFIC work +############################################## +# Generate COM variables from templates +YMD=${PDY} HH=${cyc} generate_com -rx COM_OBS COM_LAND_ANALYSIS COM_CONF + +RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_ATMOS_RESTART_PREV:COM_ATMOS_RESTART_TMPL + +mkdir -m 775 -p "${COM_LAND_ANALYSIS}" "${COM_CONF}" + +############################################################### +# Run relevant script + +EXSCRIPT=${LANDANLPY:-${HOMEgfs}/scripts/exglobal_land_analysis.py} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +exit 0 diff --git a/jobs/JGLOBAL_PREP_LAND_OBS b/jobs/JGLOBAL_PREP_LAND_OBS new file mode 100755 index 0000000000..025adae529 --- /dev/null +++ b/jobs/JGLOBAL_PREP_LAND_OBS @@ -0,0 +1,43 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "preplandobs" -c "base preplandobs" + +############################################## +# Set variables used in the script +############################################## +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +GDATE=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${assim_freq} hours") +gPDY=${GDATE:0:8} +gcyc=${GDATE:8:2} +GDUMP="gdas" + +############################################## +# Begin JOB SPECIFIC work +############################################## +# Generate COM variables from templates +YMD=${PDY} HH=${cyc} generate_com -rx COM_OBS + +RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_ATMOS_RESTART_PREV:COM_ATMOS_RESTART_TMPL + +############################################################### +# Run relevant script +EXSCRIPT=${GDASLANDPREPSH:-${HOMEgfs}/scripts/exglobal_prep_land_obs.py} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && (echo "FATAL ERROR: Error executing ${EXSCRIPT}, ABORT!"; exit "${status}") + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +exit 0 diff --git a/jobs/JGLOBAL_PREP_OCEAN_OBS b/jobs/JGLOBAL_PREP_OCEAN_OBS new file mode 100755 index 0000000000..44cbbf1c08 --- /dev/null +++ b/jobs/JGLOBAL_PREP_OCEAN_OBS @@ -0,0 +1,45 @@ +#!/bin/bash +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "prepoceanobs" -c "base prepoceanobs" + + +############################################## +# Set variables used in the script +############################################## + +export COMIN_OBS="${DATA}" + +############################################## +# Begin JOB SPECIFIC work +############################################## + +# Add prep_marine_obs.py to PYTHONPATH +export PYTHONPATH=${HOMEgfs}/sorc/gdas.cd/ush/soca:${PYTHONPATH} + +############################################################### +# Run relevant script + +EXSCRIPT=${GDASPREPOCNOBSPY:-${HOMEgfs}/ush/exglobal_prep_ocean_obs.py} +${EXSCRIPT} +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + + +############################################## +# End JOB SPECIFIC work +############################################## + +############################################## +# Final processing +############################################## +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +########################################## +# Handle the temporary working directory +########################################## +cd "${DATAROOT}" || (echo "FATAL ERROR: ${DATAROOT} does not exist. ABORT!"; exit 1) +[[ ${KEEPDATA} = "NO" ]] && rm -rf "${DATA}" + +exit 0 diff --git a/jobs/JGLOBAL_STAGE_IC b/jobs/JGLOBAL_STAGE_IC new file mode 100755 index 0000000000..4c94990fde --- /dev/null +++ b/jobs/JGLOBAL_STAGE_IC @@ -0,0 +1,21 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "stage_ic" -c "base stage_ic" + +# Restart conditions for GFS cycle come from GDAS +# shellcheck disable=SC2153 +rCDUMP=${CDUMP} +[[ ${CDUMP} = "gfs" ]] && export rCDUMP="gdas" +export rCDUMP + +# Execute the Script +"${HOMEgfs}/scripts/exglobal_stage_ic.sh" + +########################################## +# Remove the Temporary working directory +########################################## +cd "${DATAROOT}" || (echo "${DATAROOT} does not exist. ABORT!"; exit 1) +[[ ${KEEPDATA} = "NO" ]] && rm -rf "${DATA}" + +exit 0 diff --git a/jobs/JGLOBAL_TROPCY_QC_RELOC b/jobs/JGLOBAL_TROPCY_QC_RELOC deleted file mode 100755 index b03e4b07cb..0000000000 --- a/jobs/JGLOBAL_TROPCY_QC_RELOC +++ /dev/null @@ -1,136 +0,0 @@ -#!/bin/ksh -set -x - -export RUN_ENVIR=${RUN_ENVIR:-"nco"} -export PS4='$SECONDS + ' -date - - -############################# -# Source relevant config files -############################# -configs="base prep" -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} -for config in $configs; do - . $config_path/config.$config - status=$? - [[ $status -ne 0 ]] && exit $status -done - - -########################################## -# Source machine runtime environment -########################################## -. $HOMEgfs/env/${machine}.env prep -status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################## -# Obtain unique process id (pid) and make temp directory -############################################## -export pid=${pid:-$$} -export outid=${outid:-"LL$job"} -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - - -############################################## -# Run setpdy and initialize PDY variables -############################################## -export cycle="t${cyc}z" -setpdy.sh -. ./PDY - - -############################################## -# Determine Job Output Name on System -############################################## -export pgmout="OUTPUT.${pid}" -export pgmerr=errfile - - -############################################## -# Set variables used in the exglobal script -############################################## -export CDATE=${CDATE:-${PDY}${cyc}} -export CDUMP=${CDUMP:-${RUN:-"gfs"}} -export COMPONENT=${COMPONENT:-atmos} -if [ $RUN_ENVIR = "nco" ]; then - export ROTDIR=${COMROOT:?}/$NET/$envir -fi - - -############################################## -# Begin JOB SPECIFIC work -############################################## - -export PROCESS_TROPCY=${PROCESS_TROPCY:-YES} # Turn on tropical cyclone tcvitals QC proc. if YES -export DO_RELOCATE=${DO_RELOCATE:-NO} # Turn on tropical cyclone relocation proc. if YES - - -export tmmark=tm00 -if [ $RUN_ENVIR = "nco" ]; then - export ARCHSYND=$COMROOTp3/gfs/${envir}/syndat # this location is unique, do not change -else - export ARCHSYND=${ROTDIR}/syndat -fi -if [ ! -d ${ARCHSYND} ]; then mkdir -p $ARCHSYND; fi - -export HOMENHCp1=${HOMENHCp1:-/gpfs/?p1/nhc/save/guidance/storm-data/ncep} -export HOMENHC=${HOMENHC:-/gpfs/dell2/nhc/save/guidance/storm-data/ncep} - -# JY export TANK_TROPCY=${TANK_TROPCY:-${DCOMROOT}/${envir}} # path to tropical cyclone record database -export TANK_TROPCY=${TANK_TROPCY:-${DCOMROOT}/prod} # path to tropical cyclone record database - - -############################################## -# Define COM directories -############################################## -export COMIN=${ROTDIR}/${RUN}.${PDY}/${cyc}/$COMPONENT -export COMOUT=${ROTDIR}/${RUN}.${PDY}/${cyc}/$COMPONENT -if [ ! -d ${COMOUT} ]; then mkdir -p $COMOUT; fi -#export COMINgdas=${ROTDIR}/gdas.${PDY}/${cyc} -#export COMINgfs=${ROTDIR}/gfs.${PDY}/${cyc} - -export CRES=$(echo $CASE | cut -c2-) -export LATB=$((CRES*2)) -export LONB=$((CRES*4)) -export BKGFREQ=1 # for hourly relocation - - -############################################## -# Run relevant script -############################################## -env -msg="HAS BEGUN on `hostname`" -postmsg "$jlogfile" "$msg" -$LOGSCRIPT - - -${TROPCYQCRELOSH:-$SCRgfs/extropcy_qc_reloc.sh} -status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################## -# Final processing -############################################## -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - -msg="ENDED NORMALLY." -postmsg "$jlogfile" "$msg" - - -########################################## -# Remove the Temporary working directory -########################################## -cd $DATAROOT -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA - -date -exit 0 diff --git a/jobs/JGLOBAL_WAVE_GEMPAK b/jobs/JGLOBAL_WAVE_GEMPAK index 646d076e6a..89c389fa11 100755 --- a/jobs/JGLOBAL_WAVE_GEMPAK +++ b/jobs/JGLOBAL_WAVE_GEMPAK @@ -1,55 +1,33 @@ -#!/bin/bash +#! /usr/bin/env bash +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "wavegempak" -c "base wave wavegempak" -date -set -xa -export PS4='$SECONDS + ' -# -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export COMPONENT=${COMPONENT:-wave} -export machine=${machine:-WCOSS_DELL_P3} -export HOMEgfs=${HOMEgfs:-$(dirname $(dirname $0))} +# Add default errchk = err_chk +export errchk=${errchk:-err_chk} ################################### # Set COM Paths -export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/$COMPONENT} -export COMOUT=${COMOUT:-${COMROOT}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/$COMPONENT/gempak} -#export pid=$$ -export pgmout="OUTPUT.$$" - -export DBN_ALERT_TYPE=NFC_WAVEENS_GEMPAK -export SENDCOM=${SENDCOM:-YES} +################################### +export DBN_ALERT_TYPE=GFS_WAVE_GEMPAK export SENDDBN=${SENDDBN:-YES} +export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA - -if [ $SENDCOM = YES ] ; then - mkdir -m 775 -p $COMOUT -fi +YMD=${PDY} HH=${cyc} generate_com -rx COM_WAVE_GRID COM_WAVE_GEMPAK -###################################### -# Set up the cycle variable -###################################### -export cycle=${cycle:-t${cyc}z} - -setpdy.sh -. PDY -env -msg="Begin job for $job" -postmsg "$jlogfile" "$msg" +if [[ ! -d ${COM_WAVE_GEMPAK} ]]; then mkdir -p "${COM_WAVE_GEMPAK}"; fi ######################################################## # Execute the script. ${HOMEgfs}/scripts/exgfs_wave_nawips.sh - +status=$? +[[ ${status} -ne 0 ]] && exit ${status} ################################### + # Remove temp directories -if [ "$KEEPDATA" != "YES" ]; then - cd $DATAROOT - rm -rf $DATA +cd ${DATAROOT} +if [ "${KEEPDATA}" != "YES" ]; then + rm -rf ${DATA} fi -date +exit 0 diff --git a/jobs/JGLOBAL_WAVE_INIT b/jobs/JGLOBAL_WAVE_INIT index dbed424464..59df553dc1 100755 --- a/jobs/JGLOBAL_WAVE_INIT +++ b/jobs/JGLOBAL_WAVE_INIT @@ -1,83 +1,37 @@ -#!/bin/bash +#! /usr/bin/env bash -date -export RUN_ENVIR=${RUN_ENVIR:-"nco"} -export PS4=' $SECONDS + ' -set -x -e +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "waveinit" -c "base wave waveinit" -############################# -# Source relevant config files -############################# -configs="base wave waveinit" -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} -for config in $configs; do - . $config_path/config.$config - status=$? - [[ $status -ne 0 ]] && exit $status -done - -########################################## -# Source machine runtime environment -########################################## -. $HOMEgfs/env/${machine}.env waveinit -status=$? -[[ $status -ne 0 ]] && exit $status - -# PATH for working directory -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export COMPONENT=${COMPONENT:-wave} # Add default errchk = err_chk export errchk=${errchk:-err_chk} -# Create and go to DATA directory -export DATA=${DATA:-${DATAROOT:?}/${jobid}} -mkdir -p $DATA -cd $DATA - -cyc=${cyc:-00} -export cycle=${cycle:-t${cyc}z} - -# Set PDY -setpdy.sh -sh ./PDY - -export pgmout=OUTPUT.$$ - export MP_PULSE=0 # Path to HOME Directory -export FIXwave=${FIXwave:-$HOMEgfs/fix/fix_wave_${NET}} -export PARMwave=${PARMwave:-$HOMEgfs/parm/wave} -export USHwave=${USHwave:-$HOMEgfs/ush} -export EXECwave=${EXECwave:-$HOMEgfs/exec} +export FIXwave=${FIXwave:-${HOMEgfs}/fix/fix_wave_${NET}} +export PARMwave=${PARMwave:-${HOMEgfs}/parm/wave} +export USHwave=${USHwave:-${HOMEgfs}/ush} +export EXECwave=${EXECwave:-${HOMEgfs}/exec} -# Set COM Paths and GETGES environment -if [ $RUN_ENVIR = "nco" ]; then - export ROTDIR=${COMROOT:?}/$NET/$envir -fi -export COMIN=${COMIN:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/$COMPONENT} -export COMOUT=${COMOUT:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/$COMPONENT} -[[ ! -d $COMOUT ]] && mkdir -m 775 -p $COMOUT +# Set COM Paths +YMD=${PDY} HH=${cyc} generate_com -rx COM_WAVE_PREP -if [ $SENDCOM = YES ]; then - mkdir -p $COMOUT/rundata -fi +mkdir -m 775 -p ${COM_WAVE_PREP} # Set mpi serial command -export wavempexec=${launcher:-"mpirun -n"} -export wave_mpmd=${mpmd:-"cfp"} +export wavempexec=${wavempexec:-"mpirun -n"} +export wave_mpmd=${wave_mpmd:-"cfp"} -# Execute the Script -$HOMEgfs/scripts/exgfs_wave_init.sh +# Execute the Script +${HOMEgfs}/scripts/exgfs_wave_init.sh ########################################## # Remove the Temporary working directory ########################################## -cd $DATAROOT -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + -date exit 0 diff --git a/jobs/JGLOBAL_WAVE_POST_BNDPNT b/jobs/JGLOBAL_WAVE_POST_BNDPNT new file mode 100755 index 0000000000..9016d624d7 --- /dev/null +++ b/jobs/JGLOBAL_WAVE_POST_BNDPNT @@ -0,0 +1,51 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "wavepostbndpnt" -c "base wave wavepostsbs wavepostbndpnt" + +# Add default errchk = err_chk +export errchk=${errchk:-err_chk} + +export MP_PULSE=0 + +# Path to HOME Directory +export FIXwave=${FIXwave:-${HOMEgfs}/fix/fix_wave_${NET}} +export PARMwave=${PARMwave:-${HOMEgfs}/parm/wave} +export USHwave=${USHwave:-${HOMEgfs}/ush} +export EXECwave=${EXECwave:-${HOMEgfs}/exec} + +# Set COM Paths and GETGES environment +YMD=${PDY} HH=${cyc} generate_com -rx COM_WAVE_PREP COM_WAVE_HISTORY COM_WAVE_STATION + +if [[ ! -d ${COM_WAVE_STATION} ]]; then mkdir -p "${COM_WAVE_STATION}"; fi + +# Set wave model ID tag to include member number +# if ensemble; waveMEMB var empty in deterministic +membTAG='p' +if [ "${waveMEMB}" == "00" ]; then membTAG='c'; fi +export membTAG +export WAV_MOD_TAG=${RUN}wave${waveMEMB} + +export CFP_VERBOSE=1 + +export FHMAX_WAV_PNT=${FHMAX_WAV_IBP} +export DOSPC_WAV='YES' # Spectral post +export DOBLL_WAV='NO' # Bulletin post +export DOBNDPNT_WAV='YES' # Do boundary points + +# Execute the Script +${HOMEgfs}/scripts/exgfs_wave_post_pnt.sh +err=$? +if [ ${err} -ne 0 ]; then + echo "FATAL ERROR: ex-script of GWES_POST failed!" + exit ${err} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 diff --git a/jobs/JGLOBAL_WAVE_POST_BNDPNTBLL b/jobs/JGLOBAL_WAVE_POST_BNDPNTBLL new file mode 100755 index 0000000000..c193a28cf7 --- /dev/null +++ b/jobs/JGLOBAL_WAVE_POST_BNDPNTBLL @@ -0,0 +1,55 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "wavepostbndpntbll" -c "base wave wavepostsbs wavepostbndpntbll" + +export COMPONENT="wave" + +# Add default errchk = err_chk +export errchk=${errchk:-err_chk} + +export CDATE=${PDY}${cyc} + +export MP_PULSE=0 + +# Path to HOME Directory +export FIXwave=${FIXwave:-${HOMEgfs}/fix/fix_wave_${NET}} +export PARMwave=${PARMwave:-${HOMEgfs}/parm/wave} +export USHwave=${USHwave:-${HOMEgfs}/ush} +export EXECwave=${EXECwave:-${HOMEgfs}/exec} + +# Set COM Paths and GETGES environment +YMD=${PDY} HH=${cyc} generate_com -rx COM_WAVE_PREP COM_WAVE_HISTORY COM_WAVE_STATION + +if [[ ! -d ${COM_WAVE_STATION} ]]; then mkdir -p "${COM_WAVE_STATION}"; fi + +# Set wave model ID tag to include member number +# if ensemble; waveMEMB var empty in deterministic +membTAG='p' +if [ "${waveMEMB}" == "00" ]; then membTAG='c'; fi +export membTAG +export WAV_MOD_TAG=${RUN}wave${waveMEMB} + +export CFP_VERBOSE=1 + +export FHMAX_WAV_PNT=${FHMAX_WAV_IBP} +export DOSPC_WAV='NO' # Spectral post +export DOBLL_WAV='YES' # Bulletin post +export DOBNDPNT_WAV='YES' #boundary points + +# Execute the Script +${HOMEgfs}/scripts/exgfs_wave_post_pnt.sh +err=$? +if [ ${err} -ne 0 ]; then + echo "FATAL ERROR: ex-script of GFS_WAVE_POST_PNT failed!" + exit ${err} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 diff --git a/jobs/JGLOBAL_WAVE_POST_PNT b/jobs/JGLOBAL_WAVE_POST_PNT new file mode 100755 index 0000000000..3ee1d56eef --- /dev/null +++ b/jobs/JGLOBAL_WAVE_POST_PNT @@ -0,0 +1,52 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "wavepostpnt" -c "base wave wavepostsbs wavepostpnt" + +# Add default errchk = err_chk +export errchk=${errchk:-err_chk} + +export MP_PULSE=0 + +# Path to HOME Directory +export FIXwave=${FIXwave:-${HOMEgfs}/fix/fix_wave_${NET}} +export PARMwave=${PARMwave:-${HOMEgfs}/parm/wave} +export USHwave=${USHwave:-${HOMEgfs}/ush} +export EXECwave=${EXECwave:-${HOMEgfs}/exec} + +# Set COM Paths and GETGES environment +YMD=${PDY} HH=${cyc} generate_com -rx COM_WAVE_PREP COM_WAVE_HISTORY COM_WAVE_STATION + +if [[ ! -d ${COM_WAVE_STATION} ]]; then mkdir -p "${COM_WAVE_STATION}"; fi + +# Set wave model ID tag to include member number +# if ensemble; waveMEMB var empty in deterministic +membTAG='p' +if [ "${waveMEMB}" == "00" ]; then membTAG='c'; fi +export membTAG +export WAV_MOD_TAG=${RUN}wave${waveMEMB} + +export CFP_VERBOSE=1 + +export FHMAX_WAV_PNT=${FHMAX_WAV} +export DOSPC_WAV='YES' # Spectral post +export DOBLL_WAV='YES' # Bulletin post +export DOBNDPNT_WAV='NO' #not boundary points + + +# Execute the Script +${HOMEgfs}/scripts/exgfs_wave_post_pnt.sh +err=$? +if [ ${err} -ne 0 ]; then + echo "FATAL ERROR: ex-script of GWES_POST failed!" + exir ${err} +fi + +########################################## +# Remove the Temporary working directory +########################################## +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + + +exit 0 diff --git a/jobs/JGLOBAL_WAVE_POST_SBS b/jobs/JGLOBAL_WAVE_POST_SBS index 87cf5e074e..47e7063db4 100755 --- a/jobs/JGLOBAL_WAVE_POST_SBS +++ b/jobs/JGLOBAL_WAVE_POST_SBS @@ -1,109 +1,49 @@ -#!/bin/bash +#! /usr/bin/env bash -date -export RUN_ENVIR=${RUN_ENVIR:-"nco"} -export PS4=' $SECONDS + ' -set -x -e - -############################# -# Source relevant config files -############################# -configs="base wave wavepostsbs" -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} -for config in $configs; do - . $config_path/config.$config - status=$? - [[ $status -ne 0 ]] && exit $status -done - -########################################## -# Source machine runtime environment -########################################## -. $HOMEgfs/env/${machine}.env wavepostsbs -status=$? -[[ $status -ne 0 ]] && exit $status - -# PATH for working directory -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export COMPONENT=${COMPONENT:-wave} - -export HOMEgefs=${HOMEgefs:-$NWROOT/$NET.${gefs_ver}} -export HOMEgfs=${HOMEgfs:-$NWROOT/$NET.${gfs_ver}} +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "wavepostsbs" -c "base wave wavepostsbs" # Add default errchk = err_chk export errchk=${errchk:-err_chk} -# Create and go to DATA directory -export DATA=${DATA:-${DATAROOT:?}/${jobid}} -mkdir -p $DATA -cd $DATA - -export cyc=${cyc:-00} -export cycle=${cycle:-t${cyc}z} - -# Set PDY -setpdy.sh -sh ./PDY - -export pgmout=OUTPUT.$$ - export MP_PULSE=0 # Path to HOME Directory -export FIXwave=${FIXwave:-$HOMEgfs/fix/fix_wave_${NET}} -export PARMwave=${PARMwave:-$HOMEgfs/parm/wave} -export USHwave=${USHwave:-$HOMEgfs/ush} -export EXECwave=${EXECwave:-$HOMEgfs/exec} +export FIXwave=${FIXwave:-${HOMEgfs}/fix/fix_wave_${NET}} +export PARMwave=${PARMwave:-${HOMEgfs}/parm/wave} +export USHwave=${USHwave:-${HOMEgfs}/ush} +export EXECwave=${EXECwave:-${HOMEgfs}/exec} # Set COM Paths and GETGES environment -if [ $RUN_ENVIR = "nco" ]; then - export ROTDIR=${COMROOT:?}/$NET/$envir -fi -export COMIN=${COMIN:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/$COMPONENT} -export COMOUT=${COMOUT:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/$COMPONENT} - -export COMINice=${COMINice:-${COMROOTp2}/omb/prod} -export COMINwnd=${COMINwnd:-${COMROOT}/gfs/prod} -export COMIN_WAV_CUR=${COMIN_WAV_CUR:-${COMROOTp2}/rtofs/prod} +YMD=${PDY} HH=${cyc} generate_com -rx COM_WAVE_PREP COM_WAVE_HISTORY COM_WAVE_GRID -mkdir -p $COMOUT/gridded -mkdir -p $COMOUT/station -mkdir -p $COMOUT/stats +mkdir -p "${COM_WAVE_GRID}" -# Set mpi serial command -export wavempexec=${launcher:-"mpirun -n"} -export wave_mpmd=${mpmd:-"cfp"} -env | sort - -# Set wave model ID tag to include member number +# Set wave model ID tag to include member number # if ensemble; waveMEMB var empty in deterministic # Set wave model ID tag to include member number # if ensemble; waveMEMB var empty in deterministic membTAG='p' if [ "${waveMEMB}" == "00" ]; then membTAG='c'; fi export membTAG -export WAV_MOD_TAG=${CDUMP}wave${waveMEMB} +export WAV_MOD_TAG=${RUN}wave${waveMEMB} export CFP_VERBOSE=1 -# Execute the Script -$HOMEgfs/scripts/exgfs_wave_post_sbs.sh +# Execute the Script +${HOMEgfs}/scripts/exgfs_wave_post_gridded_sbs.sh err=$? -if [ $err -ne 0 ]; then - msg="FATAL ERROR: ex-script of GWES_POST failed!" -else - msg="$job completed normally!" +if [ ${err} -ne 0 ]; then + echo "FATAL ERROR: ex-script of GWES_POST failed!" + exit ${err} fi -postmsg "$jlogfile" "$msg" ########################################## # Remove the Temporary working directory ########################################## -cd $DATAROOT -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + -date exit 0 diff --git a/jobs/JGLOBAL_WAVE_PRDGEN_BULLS b/jobs/JGLOBAL_WAVE_PRDGEN_BULLS index e6df49563d..3a2947af56 100755 --- a/jobs/JGLOBAL_WAVE_PRDGEN_BULLS +++ b/jobs/JGLOBAL_WAVE_PRDGEN_BULLS @@ -1,51 +1,35 @@ -#!/bin/bash +#! /usr/bin/env bash -date -export PS4=' $SECONDS + ' -set -xa +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "waveawipsbulls" -c "base wave waveawipsbulls" -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export COMPONENT=${COMPONENT:-wave} -export HOMEgfs=${HOMEgfs:-$(dirname $(dirname $0))} # parent directory of current job card +# Add default errchk = err_chk +export errchk=${errchk:-err_chk} ################################### # Set COM Paths -export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/$COMPONENT} -export COMOUT=${COMOUT:-${COMROOT}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/$COMPONENT} -export PCOM=${PCOM:-${COMOUT}/wmo} -export SENDCOM=${SENDCOM:-YES} +################################### export SENDDBN_NTC=${SENDDBN_NTC:-YES} +export SENDDBN=${SENDDBN:-NO} +export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} -if [ $SENDCOM = YES ]; then - mkdir -p $COMOUT $PCOM -fi - -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA +YMD=${PDY} HH=${cyc} generate_com -rx COM_WAVE_STATION COM_WAVE_WMO -###################################### -# Set up the cycle variable -###################################### -export cycle=${cycle:-t${cyc}z} - -# Set PDY - setpdy.sh - . PDY -env +if [[ ! -d ${COM_WAVE_WMO} ]]; then mkdir -p "${COM_WAVE_WMO}"; fi ################################### -# Execute the Script +# Execute the Script -$HOMEgfs/scripts/exgfs_wave_prdgen_bulls.sh +${HOMEgfs}/scripts/exgfs_wave_prdgen_bulls.sh +status=$? +[[ ${status} -ne 0 ]] && exit ${status} ################################### # Remove temp directories - -if [ "$KEEPDATA" != "YES" ]; then - cd $DATAROOT - rm -rf $DATA +cd ${DATAROOT} +if [ "${KEEPDATA}" != "YES" ]; then + rm -rf ${DATA} fi -date + +exit 0 diff --git a/jobs/JGLOBAL_WAVE_PRDGEN_GRIDDED b/jobs/JGLOBAL_WAVE_PRDGEN_GRIDDED index 465f10b315..4b32c709bf 100755 --- a/jobs/JGLOBAL_WAVE_PRDGEN_GRIDDED +++ b/jobs/JGLOBAL_WAVE_PRDGEN_GRIDDED @@ -1,52 +1,39 @@ -#!/bin/bash +#! /usr/bin/env bash -date -export PS4=' $SECONDS + ' -set -xa +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "waveawipsgridded" -c "base wave waveawipsgridded" -# PATH for working directory -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export COMPONENT=${COMPONENT:-wave} -export HOMEgfs=${HOMEgfs:-$(dirname $(dirname $0))} # parent directory of current job card +# Add default errchk = err_chk +export errchk=${errchk:-err_chk} ################################### # Set COM Paths ################################### -export COMIN=${COMIN:-$(compath.py ${NET}/${envir}/${RUN}.${PDY})/${cyc}/$COMPONENT} -export COMOUT=${COMOUT:-${COMROOT}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/$COMPONENT} -export PCOM=${PCOM:-${COMOUT}/wmo} -export SENDCOM=${SENDCOM:-YES} export SENDDBN_NTC=${SENDDBN_NTC:-YES} -if [ $SENDCOM = YES ]; then - mkdir -p $COMOUT $PCOM -fi +export SENDDBN=${SENDDBN:-NO} +export DBNROOT=${DBNROOT:-${UTILROOT}/fakedbn} -export DATA=${DATA:-${DATAROOT}/${jobid:?}} -mkdir -p $DATA -cd $DATA +YMD=${PDY} HH=${cyc} generate_com -rx COM_WAVE_GRID COM_WAVE_WMO -###################################### -# Set up the cycle variable -###################################### -export cycle=${cycle:-t${cyc}z} +if [[ ! -d ${COM_WAVE_WMO} ]]; then mkdir -p "${COM_WAVE_WMO}"; fi -# Set PDY - setpdy.sh - . PDY - env +mkdir -p "${COM_WAVE_WMO}" ################################### -# Execute the Script +# Execute the Script ################################### -$HOMEgfs/scripts/exgfs_wave_prdgen_gridded.sh +${HOMEgfs}/scripts/exgfs_wave_prdgen_gridded.sh +status=$? +[[ ${status} -ne 0 ]] && exit ${status} ################################### # Remove temp directories ################################### -if [ "$KEEPDATA" != "YES" ]; then - cd $DATAROOT - rm -rf $DATA +cd ${DATAROOT} +if [ "${KEEPDATA}" != "YES" ]; then + rm -rf ${DATA} fi -date + + +exit 0 diff --git a/jobs/JGLOBAL_WAVE_PREP b/jobs/JGLOBAL_WAVE_PREP index 59e2932ca9..5ff48d886c 100755 --- a/jobs/JGLOBAL_WAVE_PREP +++ b/jobs/JGLOBAL_WAVE_PREP @@ -1,54 +1,15 @@ -#!/bin/bash +#! /usr/bin/env bash -date -export RUN_ENVIR=${RUN_ENVIR:-"nco"} -export PS4=' $SECONDS + ' -set -x -e - -############################# -# Source relevant config files -############################# -configs="base wave waveprep" -export EXPDIR=${EXPDIR:-$HOMEgfs/parm/config} -config_path=${EXPDIR:-$NWROOT/gfs.${gfs_ver}/parm/config} -for config in $configs; do - . $config_path/config.$config - status=$? - [[ $status -ne 0 ]] && exit $status -done - -########################################## -# Source machine runtime environment -########################################## -. $HOMEgfs/env/${machine}.env waveprep -status=$? -[[ $status -ne 0 ]] && exit $status - -# PATH for working directory -export NET=${NET:-gfs} -export RUN=${RUN:-gfs} -export COMPONENT=${COMPONENT:-wave} - -export HOMEgfs=${HOMEgfs:-$NWROOT/gfs.${gfs_ver}} +source "${HOMEgfs}/ush/preamble.sh" +source "${HOMEgfs}/ush/jjob_header.sh" -e "waveprep" -c "base wave waveprep" # Add default errchk = err_chk export errchk=${errchk:-err_chk} -# Create and go to DATA directory -export DATA=${DATA:-${DATAROOT:?}/${jobid}} -mkdir -p $DATA -cd $DATA +export CDUMP=${RUN/enkf} -cyc=${cyc:-00} -export cycle=${cycle:-t${cyc}z} - -# Set PDY -setpdy.sh -sh ./PDY # Set rtofs PDY -export RPDY=$PDY - -export pgmout=OUTPUT.$$ +export RPDY=${PDY} export MP_PULSE=0 @@ -56,53 +17,24 @@ export MP_PULSE=0 export CDO=${CDO_ROOT}/bin/cdo # Path to HOME Directory -export FIXwave=${FIXwave:-$HOMEgfs/fix/fix_wave_${NET}} -export PARMwave=${PARMwave:-$HOMEgfs/parm/wave} -export USHwave=${USHwave:-$HOMEgfs/ush} -export EXECwave=${EXECwave:-$HOMEgfs/exec} +export FIXwave=${FIXwave:-${HOMEgfs}/fix/fix_wave_${NET}} +export PARMwave=${PARMwave:-${HOMEgfs}/parm/wave} +export USHwave=${USHwave:-${HOMEgfs}/ush} +export EXECwave=${EXECwave:-${HOMEgfs}/exec} # Set COM Paths and GETGES environment -if [ $RUN_ENVIR = "nco" ]; then - export ROTDIR=${COMROOT:?}/$NET/$envir -fi -export COMIN=${COMIN:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/$COMPONENT} -export COMOUT=${COMOUT:-${ROTDIR}/${CDUMP}.${PDY}/${cyc}/$COMPONENT} -[[ ! -d $COMOUT ]] && mkdir -m 775 -p $COMOUT - -if [ $RUN_ENVIR = "nco" ]; then - export COMIN_WAV_ICE=${COMIN_WAV_ICE:-$(compath.py gfs/prod)}/${CDUMP}.${PDY}/${cyc}/atmos - export COMIN_WAV_WND=${COMIN_WAV_WND:-$(compath.py gfs/prod)}/${CDUMP}.${PDY}/${cyc}/atmos - export COMIN_WAV_CUR=${COMIN_WAV_CUR:-$(compath.py ${WAVECUR_DID}/prod)}/${WAVECUR_DID}.${RPDY} - if [ ! -d $COMIN_WAV_CUR ]; then - export RPDY=`$NDATE -24 ${PDY}00 | cut -c1-8` - export COMIN_WAV_CUR=$(compath.py ${WAVECUR_DID}/prod)/${WAVECUR_DID}.${RPDY} - fi -else - if [ ! -d $DMPDIR/${WAVECUR_DID}.${RPDY} ]; then export RPDY=`$NDATE -24 ${PDY}00 | cut -c1-8`; fi - if [ ! -L $ROTDIR/${WAVECUR_DID}.${RPDY} ]; then # Check if symlink already exists in ROTDIR - $NLN $DMPDIR/${WAVECUR_DID}.${RPDY} $ROTDIR/${WAVECUR_DID}.${RPDY} - fi - if [ ! -L $ROTDIR/${CDUMP}.${PDY}/${cyc}/atmos/${WAVICEFILE} ]; then # Check if symlink already exists in ROTDIR - $NLN $DMPDIR/$CDUMP.${PDY}/$cyc/${WAVICEFILE} $ROTDIR/$CDUMP.${PDY}/$cyc/atmos/${WAVICEFILE} - fi - export COMIN_OBS=${COMIN_OBS:-$ROTDIR/$RUN.$PDY/$cyc/atmos} - export COMIN_WAV_ICE=${COMIN_OBS} - export COMIN_WAV_WND=${COMIN_OBS} - export COMIN_WAV_CUR=${ROTDIR}/${WAVECUR_DID}.${RPDY} -fi +YMD=${PDY} HH=${cyc} generate_com -rx COM_OBS COM_WAVE_PREP +generate_com -rx COM_RTOFS +[[ ! -d ${COM_WAVE_PREP} ]] && mkdir -m 775 -p "${COM_WAVE_PREP}" -# Set mpi serial command -export wavempexec=${launcher:-"mpirun -n"} -export wave_mpmd=${mpmd:-"cfp"} - -# Execute the Script -$HOMEgfs/scripts/exgfs_wave_prep.sh +# Execute the Script +${HOMEgfs}/scripts/exgfs_wave_prep.sh ########################################## # Remove the Temporary working directory ########################################## -cd $DATAROOT -[[ $KEEPDATA = "NO" ]] && rm -rf $DATA +cd ${DATAROOT} +[[ ${KEEPDATA} = "NO" ]] && rm -rf ${DATA} + -date exit 0 diff --git a/jobs/rocoto/aeroanlfinal.sh b/jobs/rocoto/aeroanlfinal.sh new file mode 100755 index 0000000000..16bb6887fd --- /dev/null +++ b/jobs/rocoto/aeroanlfinal.sh @@ -0,0 +1,23 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source UFSDA workflow modules +. "${HOMEgfs}/ush/load_ufsda_modules.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="aeroanlfinal" +export jobid="${job}.$$" + +############################################################### +# setup python path for workflow utilities and tasks +wxflowPATH="${HOMEgfs}/ush/python:${HOMEgfs}/ush/python/wxflow/src" +PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${wxflowPATH}" +export PYTHONPATH +############################################################### +# Execute the JJOB +"${HOMEgfs}/jobs/JGLOBAL_AERO_ANALYSIS_FINALIZE" +status=$? +exit "${status}" diff --git a/jobs/rocoto/aeroanlinit.sh b/jobs/rocoto/aeroanlinit.sh new file mode 100755 index 0000000000..9aaf255782 --- /dev/null +++ b/jobs/rocoto/aeroanlinit.sh @@ -0,0 +1,24 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source UFSDA workflow modules +. "${HOMEgfs}/ush/load_ufsda_modules.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="aeroanlinit" +export jobid="${job}.$$" + +############################################################### +# setup python path for workflow utilities and tasks +wxflowPATH="${HOMEgfs}/ush/python:${HOMEgfs}/ush/python/wxflow/src" +PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${wxflowPATH}" +export PYTHONPATH + +############################################################### +# Execute the JJOB +"${HOMEgfs}/jobs/JGLOBAL_AERO_ANALYSIS_INITIALIZE" +status=$? +exit "${status}" diff --git a/jobs/rocoto/aeroanlrun.sh b/jobs/rocoto/aeroanlrun.sh new file mode 100755 index 0000000000..bcd86e3fbf --- /dev/null +++ b/jobs/rocoto/aeroanlrun.sh @@ -0,0 +1,24 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source UFSDA workflow modules +. "${HOMEgfs}/ush/load_ufsda_modules.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="aeroanlrun" +export jobid="${job}.$$" + +############################################################### +# setup python path for workflow utilities and tasks +wxflowPATH="${HOMEgfs}/ush/python:${HOMEgfs}/ush/python/wxflow/src" +PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${wxflowPATH}" +export PYTHONPATH + +############################################################### +# Execute the JJOB +"${HOMEgfs}/jobs/JGLOBAL_AERO_ANALYSIS_RUN" +status=$? +exit "${status}" diff --git a/jobs/rocoto/aerosol_init.sh b/jobs/rocoto/aerosol_init.sh new file mode 100755 index 0000000000..34ccc0fe26 --- /dev/null +++ b/jobs/rocoto/aerosol_init.sh @@ -0,0 +1,38 @@ +#! /usr/bin/env bash + +source "$HOMEgfs/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source $HOMEgfs/ush/load_fv3gfs_modules.sh +status=$? +[[ $status -ne 0 ]] && exit $status + +############################################################### +# Source relevant configs +configs="base aerosol_init" +for config in $configs; do + source $EXPDIR/config.${config} + status=$? + [[ $status -ne 0 ]] && exit $status +done + +############################################################### +# Source machine runtime environment +source $BASE_ENV/${machine}.env aerosol_init +status=$? +[[ $status -ne 0 ]] && exit $status + +$HOMEgfs/scripts/exgfs_aero_init_aerosol.py + +status=$? +if [[ $status -ne 0 ]]; then + echo "FATAL ERROR: exgfs_chem_init_aerosol.py failed with error code $status" + exit $status +fi + +############################################################## +# Exit cleanly + + +exit 0 diff --git a/jobs/rocoto/anal.sh b/jobs/rocoto/anal.sh index 4a9e2a8f3e..00f03e3832 100755 --- a/jobs/rocoto/anal.sh +++ b/jobs/rocoto/anal.sh @@ -1,13 +1,20 @@ -#!/bin/ksh -x +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +. ${HOMEgfs}/ush/load_fv3gfs_modules.sh status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} + +export job="anal" +export jobid="${job}.$$" ############################################################### # Execute the JJOB -$HOMEgfs/jobs/JGLOBAL_ANALYSIS +"${HOMEgfs}/jobs/JGLOBAL_ATMOS_ANALYSIS" status=$? -exit $status + + +exit "${status}" diff --git a/jobs/rocoto/analcalc.sh b/jobs/rocoto/analcalc.sh index fd7d8f8916..2e669b0163 100755 --- a/jobs/rocoto/analcalc.sh +++ b/jobs/rocoto/analcalc.sh @@ -1,13 +1,20 @@ -#!/bin/ksh -x +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +. ${HOMEgfs}/ush/load_fv3gfs_modules.sh status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} + +export job="analcalc" +export jobid="${job}.$$" ############################################################### # Execute the JJOB -$HOMEgfs/jobs/JGLOBAL_ANALCALC +${HOMEgfs}/jobs/JGLOBAL_ATMOS_ANALYSIS_CALC status=$? -exit $status + + +exit ${status} diff --git a/jobs/rocoto/analdiag.sh b/jobs/rocoto/analdiag.sh index 9d5101c67e..cd6e1113f0 100755 --- a/jobs/rocoto/analdiag.sh +++ b/jobs/rocoto/analdiag.sh @@ -1,13 +1,20 @@ -#!/bin/ksh -x +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +. ${HOMEgfs}/ush/load_fv3gfs_modules.sh status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} + +export job="analdiag" +export jobid="${job}.$$" ############################################################### # Execute the JJOB -$HOMEgfs/jobs/JGLOBAL_ANALDIAG +${HOMEgfs}/jobs/JGDAS_ATMOS_ANALYSIS_DIAG status=$? -exit $status + + +exit ${status} diff --git a/jobs/rocoto/arch.sh b/jobs/rocoto/arch.sh index 2c0836fed2..d949b7d76f 100755 --- a/jobs/rocoto/arch.sh +++ b/jobs/rocoto/arch.sh @@ -1,374 +1,19 @@ -#!/bin/ksh -x +#! /usr/bin/env bash -############################################################### -## Abstract: -## Archive driver script -## RUN_ENVIR : runtime environment (emc | nco) -## HOMEgfs : /full/path/to/workflow -## EXPDIR : /full/path/to/config/files -## CDATE : current analysis date (YYYYMMDDHH) -## CDUMP : cycle name (gdas / gfs) -## PDY : current date (YYYYMMDD) -## cyc : current cycle (HH) -############################################################### +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +. "${HOMEgfs}"/ush/load_fv3gfs_modules.sh status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -# Source relevant configs -configs="base arch" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done - -# ICS are restarts and always lag INC by $assim_freq hours -ARCHINC_CYC=$ARCH_CYC -ARCHICS_CYC=$((ARCH_CYC-assim_freq)) -if [ $ARCHICS_CYC -lt 0 ]; then - ARCHICS_CYC=$((ARCHICS_CYC+24)) -fi - -# CURRENT CYCLE -APREFIX="${CDUMP}.t${cyc}z." -ASUFFIX=${ASUFFIX:-$SUFFIX} - -if [ $ASUFFIX = ".nc" ]; then - format="netcdf" -else - format="nemsio" -fi - - -# Realtime parallels run GFS MOS on 1 day delay -# If realtime parallel, back up CDATE_MOS one day -CDATE_MOS=$CDATE -if [ $REALTIME = "YES" ]; then - CDATE_MOS=$($NDATE -24 $CDATE) -fi -PDY_MOS=$(echo $CDATE_MOS | cut -c1-8) - -############################################################### -# Archive online for verification and diagnostics -############################################################### - -COMIN=${COMINatmos:-"$ROTDIR/$CDUMP.$PDY/$cyc/atmos"} -cd $COMIN - -[[ ! -d $ARCDIR ]] && mkdir -p $ARCDIR -$NCP ${APREFIX}gsistat $ARCDIR/gsistat.${CDUMP}.${CDATE} -$NCP ${APREFIX}pgrb2.1p00.anl $ARCDIR/pgbanl.${CDUMP}.${CDATE}.grib2 - -# Archive 1 degree forecast GRIB2 files for verification -if [ $CDUMP = "gfs" ]; then - fhmax=$FHMAX_GFS - fhr=0 - while [ $fhr -le $fhmax ]; do - fhr2=$(printf %02i $fhr) - fhr3=$(printf %03i $fhr) - $NCP ${APREFIX}pgrb2.1p00.f$fhr3 $ARCDIR/pgbf${fhr2}.${CDUMP}.${CDATE}.grib2 - (( fhr = $fhr + $FHOUT_GFS )) - done -fi -if [ $CDUMP = "gdas" ]; then - flist="000 003 006 009" - for fhr in $flist; do - fname=${APREFIX}pgrb2.1p00.f${fhr} - fhr2=$(printf %02i $fhr) - $NCP $fname $ARCDIR/pgbf${fhr2}.${CDUMP}.${CDATE}.grib2 - done -fi +[[ ${status} -ne 0 ]] && exit "${status}" -if [ -s avno.t${cyc}z.cyclone.trackatcfunix ]; then - PLSOT4=`echo $PSLOT|cut -c 1-4 |tr '[a-z]' '[A-Z]'` - cat avno.t${cyc}z.cyclone.trackatcfunix | sed s:AVNO:${PLSOT4}:g > ${ARCDIR}/atcfunix.${CDUMP}.$CDATE - cat avnop.t${cyc}z.cyclone.trackatcfunix | sed s:AVNO:${PLSOT4}:g > ${ARCDIR}/atcfunixp.${CDUMP}.$CDATE -fi +export job="arch" +export jobid="${job}.$$" -if [ $CDUMP = "gdas" -a -s gdas.t${cyc}z.cyclone.trackatcfunix ]; then - PLSOT4=`echo $PSLOT|cut -c 1-4 |tr '[a-z]' '[A-Z]'` - cat gdas.t${cyc}z.cyclone.trackatcfunix | sed s:AVNO:${PLSOT4}:g > ${ARCDIR}/atcfunix.${CDUMP}.$CDATE - cat gdasp.t${cyc}z.cyclone.trackatcfunix | sed s:AVNO:${PLSOT4}:g > ${ARCDIR}/atcfunixp.${CDUMP}.$CDATE -fi - -if [ $CDUMP = "gfs" ]; then - $NCP storms.gfso.atcf_gen.$CDATE ${ARCDIR}/. - $NCP storms.gfso.atcf_gen.altg.$CDATE ${ARCDIR}/. - $NCP trak.gfso.atcfunix.$CDATE ${ARCDIR}/. - $NCP trak.gfso.atcfunix.altg.$CDATE ${ARCDIR}/. - - mkdir -p ${ARCDIR}/tracker.$CDATE/$CDUMP - blist="epac natl" - for basin in $blist; do - cp -rp $basin ${ARCDIR}/tracker.$CDATE/$CDUMP - done -fi - -# Archive atmospheric gaussian gfs forecast files for fit2obs -VFYARC=${VFYARC:-$ROTDIR/vrfyarch} -[[ ! -d $VFYARC ]] && mkdir -p $VFYARC -if [ $CDUMP = "gfs" -a $FITSARC = "YES" ]; then - mkdir -p $VFYARC/${CDUMP}.$PDY/$cyc - fhmax=${FHMAX_FITS:-$FHMAX_GFS} - fhr=0 - while [[ $fhr -le $fhmax ]]; do - fhr3=$(printf %03i $fhr) - sfcfile=${CDUMP}.t${cyc}z.sfcf${fhr3}${ASUFFIX} - sigfile=${CDUMP}.t${cyc}z.atmf${fhr3}${ASUFFIX} - $NCP $sfcfile $VFYARC/${CDUMP}.$PDY/$cyc/ - $NCP $sigfile $VFYARC/${CDUMP}.$PDY/$cyc/ - (( fhr = $fhr + 6 )) - done -fi - - -############################################################### -# Archive data to HPSS -if [ $HPSSARCH = "YES" ]; then ############################################################### - -#--determine when to save ICs for warm start and forecast-only runs -SAVEWARMICA="NO" -SAVEWARMICB="NO" -SAVEFCSTIC="NO" -firstday=$($NDATE +24 $SDATE) -mm=`echo $CDATE|cut -c 5-6` -dd=`echo $CDATE|cut -c 7-8` -nday=$(( (mm-1)*30+dd )) -mod=$(($nday % $ARCH_WARMICFREQ)) -if [ $CDATE -eq $firstday -a $cyc -eq $ARCHINC_CYC ]; then SAVEWARMICA="YES" ; fi -if [ $CDATE -eq $firstday -a $cyc -eq $ARCHICS_CYC ]; then SAVEWARMICB="YES" ; fi -if [ $mod -eq 0 -a $cyc -eq $ARCHINC_CYC ]; then SAVEWARMICA="YES" ; fi -if [ $mod -eq 0 -a $cyc -eq $ARCHICS_CYC ]; then SAVEWARMICB="YES" ; fi - -if [ $ARCHICS_CYC -eq 18 ]; then - nday1=$((nday+1)) - mod1=$(($nday1 % $ARCH_WARMICFREQ)) - if [ $mod1 -eq 0 -a $cyc -eq $ARCHICS_CYC ] ; then SAVEWARMICB="YES" ; fi - if [ $mod1 -ne 0 -a $cyc -eq $ARCHICS_CYC ] ; then SAVEWARMICB="NO" ; fi - if [ $CDATE -eq $SDATE -a $cyc -eq $ARCHICS_CYC ] ; then SAVEWARMICB="YES" ; fi -fi - -mod=$(($nday % $ARCH_FCSTICFREQ)) -if [ $mod -eq 0 -o $CDATE -eq $firstday ]; then SAVEFCSTIC="YES" ; fi - - -ARCH_LIST="$COMIN/archlist" -[[ -d $ARCH_LIST ]] && rm -rf $ARCH_LIST -mkdir -p $ARCH_LIST -cd $ARCH_LIST - -$HOMEgfs/ush/hpssarch_gen.sh $CDUMP +# Execute the JJOB +"${HOMEgfs}"/jobs/JGLOBAL_ARCHIVE status=$? -if [ $status -ne 0 ]; then - echo "$HOMEgfs/ush/hpssarch_gen.sh $CDUMP failed, ABORT!" - exit $status -fi - -cd $ROTDIR - -if [ $CDUMP = "gfs" ]; then - - #for targrp in gfsa gfsb - NOTE - do not check htar error status - for targrp in gfsa gfsb; do - htar -P -cvf $ATARDIR/$CDATE/${targrp}.tar `cat $ARCH_LIST/${targrp}.txt` - done - #for targrp in gfs_flux gfs_netcdf/nemsio gfs_pgrb2b; do - if [ ${SAVEFCSTNEMSIO:-"YES"} = "YES" ]; then - for targrp in gfs_flux gfs_${format}a gfs_${format}b gfs_pgrb2b; do - htar -P -cvf $ATARDIR/$CDATE/${targrp}.tar `cat $ARCH_LIST/${targrp}.txt` - status=$? - if [ $status -ne 0 -a $CDATE -ge $firstday ]; then - echo "HTAR $CDATE ${targrp}.tar failed" - exit $status - fi - done - fi - - #for targrp in gfswave - if [ $DO_WAVE = "YES" -a "$WAVE_CDUMP" != "gdas" ]; then - for targrp in gfswave; do - htar -P -cvf $ATARDIR/$CDATE/${targrp}.tar `cat $ARCH_LIST/${targrp}.txt` - status=$? - if [ $status -ne 0 -a $CDATE -ge $firstday ]; then - echo "HTAR $CDATE ${targrp}.tar failed" - exit $status - fi - done - fi - - #for restarts - if [ $SAVEFCSTIC = "YES" ]; then - htar -P -cvf $ATARDIR/$CDATE/gfs_restarta.tar `cat $ARCH_LIST/gfs_restarta.txt` - status=$? - if [ $status -ne 0 -a $CDATE -ge $firstday ]; then - echo "HTAR $CDATE gfs_restarta.tar failed" - exit $status - fi - fi - - #--save mdl gfsmos output from all cycles in the 18Z archive directory - if [ -d gfsmos.$PDY_MOS -a $cyc -eq 18 ]; then - htar -P -cvf $ATARDIR/$CDATE_MOS/gfsmos.tar ./gfsmos.$PDY_MOS - status=$? - if [ $status -ne 0 -a $CDATE -ge $firstday ]; then - echo "HTAR $CDATE gfsmos.tar failed" - exit $status - fi - fi - -fi - - -if [ $CDUMP = "gdas" ]; then - - htar -P -cvf $ATARDIR/$CDATE/gdas.tar `cat $ARCH_LIST/gdas.txt` - status=$? - if [ $status -ne 0 -a $CDATE -ge $firstday ]; then - echo "HTAR $CDATE gdas.tar failed" - exit $status - fi - - #gdaswave - if [ $DO_WAVE = "YES" ]; then - htar -P -cvf $ATARDIR/$CDATE/gdaswave.tar `cat $ARCH_LIST/gdaswave.txt` - status=$? - if [ $status -ne 0 -a $CDATE -ge $firstday ]; then - echo "HTAR $CDATE gdaswave.tar failed" - exit $status - fi - fi - - if [ $SAVEWARMICA = "YES" -o $SAVEFCSTIC = "YES" ]; then - htar -P -cvf $ATARDIR/$CDATE/gdas_restarta.tar `cat $ARCH_LIST/gdas_restarta.txt` - status=$? - if [ $status -ne 0 -a $CDATE -ge $firstday ]; then - echo "HTAR $CDATE gdas_restarta.tar failed" - exit $status - fi - if [ $DO_WAVE = "YES" ]; then - htar -P -cvf $ATARDIR/$CDATE/gdaswave_restart.tar `cat $ARCH_LIST/gdaswave_restart.txt` - status=$? - if [ $status -ne 0 -a $CDATE -ge $firstday ]; then - echo "HTAR $CDATE gdaswave_restart.tar failed" - exit $status - fi - fi - fi - - if [ $SAVEWARMICB = "YES" -o $SAVEFCSTIC = "YES" ]; then - htar -P -cvf $ATARDIR/$CDATE/gdas_restartb.tar `cat $ARCH_LIST/gdas_restartb.txt` - status=$? - if [ $status -ne 0 -a $CDATE -ge $firstday ]; then - echo "HTAR $CDATE gdas_restartb.tar failed" - exit $status - fi - fi - -fi - -############################################################### -fi ##end of HPSS archive -############################################################### - - - -############################################################### -# Clean up previous cycles; various depths -# PRIOR CYCLE: Leave the prior cycle alone -GDATE=$($NDATE -$assim_freq $CDATE) - -# PREVIOUS to the PRIOR CYCLE -GDATE=$($NDATE -$assim_freq $GDATE) -gPDY=$(echo $GDATE | cut -c1-8) -gcyc=$(echo $GDATE | cut -c9-10) - -# Remove the TMPDIR directory -COMIN="$RUNDIR/$GDATE" -[[ -d $COMIN ]] && rm -rf $COMIN - -if [[ "${DELETE_COM_IN_ARCHIVE_JOB:-YES}" == NO ]] ; then - exit 0 -fi - -# Step back every assim_freq hours -# and remove old rotating directories for successful cycles -# defaults from 24h to 120h -DO_GLDAS=${DO_GLDAS:-"NO"} -GDATEEND=$($NDATE -${RMOLDEND:-24} $CDATE) -GDATE=$($NDATE -${RMOLDSTD:-120} $CDATE) -GLDAS_DATE=$($NDATE -96 $CDATE) -RTOFS_DATE=$($NDATE -48 $CDATE) -while [ $GDATE -le $GDATEEND ]; do - gPDY=$(echo $GDATE | cut -c1-8) - gcyc=$(echo $GDATE | cut -c9-10) - COMIN="$ROTDIR/${CDUMP}.$gPDY/$gcyc/atmos" - COMINwave="$ROTDIR/${CDUMP}.$gPDY/$gcyc/wave" - COMINrtofs="$ROTDIR/rtofs.$gPDY" - if [ -d $COMIN ]; then - rocotolog="$EXPDIR/logs/${GDATE}.log" - if [ -f $rocotolog ]; then - testend=$(tail -n 1 $rocotolog | grep "This cycle is complete: Success") - rc=$? - if [ $rc -eq 0 ]; then - if [ -d $COMINwave ]; then rm -rf $COMINwave ; fi - if [ -d $COMINrtofs -a $GDATE -lt $RTOFS_DATE ]; then rm -rf $COMINrtofs ; fi - if [ $CDUMP != "gdas" -o $DO_GLDAS = "NO" -o $GDATE -lt $GLDAS_DATE ]; then - rm -rf $COMIN - else - for file in `ls $COMIN |grep -v sflux |grep -v RESTART`; do - rm -rf $COMIN/$file - done - for file in `ls $COMIN/RESTART |grep -v sfcanl `; do - rm -rf $COMIN/RESTART/$file - done - fi - fi - fi - fi - - # Remove any empty directories - if [ -d $COMIN ]; then - [[ ! "$(ls -A $COMIN)" ]] && rm -rf $COMIN - fi - - if [ -d $COMINwave ]; then - [[ ! "$(ls -A $COMINwave)" ]] && rm -rf $COMINwave - fi - - # Remove mdl gfsmos directory - if [ $CDUMP = "gfs" ]; then - COMIN="$ROTDIR/gfsmos.$gPDY" - if [ -d $COMIN -a $GDATE -lt $CDATE_MOS ]; then rm -rf $COMIN ; fi - fi - - GDATE=$($NDATE +$assim_freq $GDATE) -done - -# Remove archived atmospheric gaussian files used for fit2obs in $VFYARC that are $FHMAX_FITS hrs behind. -# touch existing files to prevent the files from being removed by the operation system. -if [ $CDUMP = "gfs" ]; then - fhmax=$((FHMAX_FITS+36)) - RDATE=$($NDATE -$fhmax $CDATE) - rPDY=$(echo $RDATE | cut -c1-8) - COMIN="$VFYARC/$CDUMP.$rPDY" - [[ -d $COMIN ]] && rm -rf $COMIN - - TDATE=$($NDATE -$FHMAX_FITS $CDATE) - while [ $TDATE -lt $CDATE ]; do - tPDY=$(echo $TDATE | cut -c1-8) - tcyc=$(echo $TDATE | cut -c9-10) - TDIR=$VFYARC/$CDUMP.$tPDY/$tcyc - [[ -d $TDIR ]] && touch $TDIR/* - TDATE=$($NDATE +6 $TDATE) - done -fi - -############################################################### -exit 0 +exit "${status}" diff --git a/jobs/rocoto/atmanlfinal.sh b/jobs/rocoto/atmanlfinal.sh new file mode 100755 index 0000000000..3d3c3ba9e6 --- /dev/null +++ b/jobs/rocoto/atmanlfinal.sh @@ -0,0 +1,23 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source UFSDA workflow modules +. "${HOMEgfs}/ush/load_ufsda_modules.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="atmanlfinal" +export jobid="${job}.$$" + +############################################################### +# setup python path for workflow utilities and tasks +wxflowPATH="${HOMEgfs}/ush/python:${HOMEgfs}/ush/python/wxflow/src" +PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${wxflowPATH}" +export PYTHONPATH +############################################################### +# Execute the JJOB +"${HOMEgfs}/jobs/JGLOBAL_ATM_ANALYSIS_FINALIZE" +status=$? +exit "${status}" diff --git a/jobs/rocoto/atmanlinit.sh b/jobs/rocoto/atmanlinit.sh new file mode 100755 index 0000000000..13c7d8710b --- /dev/null +++ b/jobs/rocoto/atmanlinit.sh @@ -0,0 +1,24 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source UFSDA workflow modules +. "${HOMEgfs}/ush/load_ufsda_modules.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="atmanlinit" +export jobid="${job}.$$" + +############################################################### +# setup python path for workflow utilities and tasks +wxflowPATH="${HOMEgfs}/ush/python:${HOMEgfs}/ush/python/wxflow/src" +PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${wxflowPATH}" +export PYTHONPATH + +############################################################### +# Execute the JJOB +"${HOMEgfs}/jobs/JGLOBAL_ATM_ANALYSIS_INITIALIZE" +status=$? +exit "${status}" diff --git a/jobs/rocoto/atmanlrun.sh b/jobs/rocoto/atmanlrun.sh new file mode 100755 index 0000000000..1b87cb4074 --- /dev/null +++ b/jobs/rocoto/atmanlrun.sh @@ -0,0 +1,24 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source UFSDA workflow modules +. "${HOMEgfs}/ush/load_ufsda_modules.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="atmanlrun" +export jobid="${job}.$$" + +############################################################### +# setup python path for workflow utilities and tasks +wxflowPATH="${HOMEgfs}/ush/python:${HOMEgfs}/ush/python/wxflow/src" +PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${wxflowPATH}" +export PYTHONPATH + +############################################################### +# Execute the JJOB +"${HOMEgfs}/jobs/JGLOBAL_ATM_ANALYSIS_RUN" +status=$? +exit "${status}" diff --git a/jobs/rocoto/atmensanlfinal.sh b/jobs/rocoto/atmensanlfinal.sh new file mode 100755 index 0000000000..5ffaa92754 --- /dev/null +++ b/jobs/rocoto/atmensanlfinal.sh @@ -0,0 +1,23 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source UFSDA workflow modules +. "${HOMEgfs}/ush/load_ufsda_modules.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="atmensanlfinal" +export jobid="${job}.$$" + +############################################################### +# setup python path for workflow utilities and tasks +wxflowPATH="${HOMEgfs}/ush/python:${HOMEgfs}/ush/python/wxflow/src" +PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${wxflowPATH}" +export PYTHONPATH +############################################################### +# Execute the JJOB +"${HOMEgfs}/jobs/JGLOBAL_ATMENS_ANALYSIS_FINALIZE" +status=$? +exit "${status}" diff --git a/jobs/rocoto/atmensanlinit.sh b/jobs/rocoto/atmensanlinit.sh new file mode 100755 index 0000000000..2c2204548a --- /dev/null +++ b/jobs/rocoto/atmensanlinit.sh @@ -0,0 +1,24 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source UFSDA workflow modules +. "${HOMEgfs}/ush/load_ufsda_modules.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="atmensanlinit" +export jobid="${job}.$$" + +############################################################### +# setup python path for workflow utilities and tasks +wxflowPATH="${HOMEgfs}/ush/python:${HOMEgfs}/ush/python/wxflow/src" +PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${wxflowPATH}" +export PYTHONPATH + +############################################################### +# Execute the JJOB +"${HOMEgfs}/jobs/JGLOBAL_ATMENS_ANALYSIS_INITIALIZE" +status=$? +exit "${status}" diff --git a/jobs/rocoto/atmensanlrun.sh b/jobs/rocoto/atmensanlrun.sh new file mode 100755 index 0000000000..d991e3eb82 --- /dev/null +++ b/jobs/rocoto/atmensanlrun.sh @@ -0,0 +1,24 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source UFSDA workflow modules +. "${HOMEgfs}/ush/load_ufsda_modules.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="atmensanlrun" +export jobid="${job}.$$" + +############################################################### +# setup python path for workflow utilities and tasks +wxflowPATH="${HOMEgfs}/ush/python:${HOMEgfs}/ush/python/wxflow/src" +PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${wxflowPATH}" +export PYTHONPATH + +############################################################### +# Execute the JJOB +"${HOMEgfs}/jobs/JGLOBAL_ATMENS_ANALYSIS_RUN" +status=$? +exit "${status}" diff --git a/jobs/rocoto/atmos_products.sh b/jobs/rocoto/atmos_products.sh new file mode 100755 index 0000000000..fbc10cadbd --- /dev/null +++ b/jobs/rocoto/atmos_products.sh @@ -0,0 +1,31 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +## atmosphere products driver script +## FHRLST : forecast hour list to post-process (e.g. -f001, f000, f000_f001_f002, ...) +############################################################### + +# Source FV3GFS workflow modules +. "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +if (( status != 0 )); then exit "${status}"; fi + +export job="atmos_products" +export jobid="${job}.$$" + +############################################################### +# shellcheck disable=SC2153,SC2001 +IFS='_' read -ra fhrs <<< "${FHRLST//f}" # strip off the 'f's and convert to array + +#--------------------------------------------------------------- +# Execute the JJOB +for fhr in "${fhrs[@]}"; do + export FORECAST_HOUR=$(( 10#${fhr} )) + "${HOMEgfs}/jobs/JGLOBAL_ATMOS_PRODUCTS" + status=$? + if (( status != 0 )); then exit "${status}"; fi +done + +exit 0 diff --git a/jobs/rocoto/awips.sh b/jobs/rocoto/awips.sh deleted file mode 100755 index 40c5db8cb4..0000000000 --- a/jobs/rocoto/awips.sh +++ /dev/null @@ -1,148 +0,0 @@ -#!/bin/ksh -x - -############################################################### -## Abstract: -## Inline awips driver script -## RUN_ENVIR : runtime environment (emc | nco) -## HOMEgfs : /full/path/to/workflow -## EXPDIR : /full/path/to/config/files -## CDATE : current analysis date (YYYYMMDDHH) -## CDUMP : cycle name (gdas / gfs) -## PDY : current date (YYYYMMDD) -## cyc : current cycle (HH) -############################################################### - -############################################################### -echo -echo "=============== BEGIN TO SOURCE FV3GFS WORKFLOW MODULES ===============" -. $HOMEgfs/ush/load_fv3gfs_modules.sh -status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################################### -echo -echo "=============== BEGIN TO SOURCE RELEVANT CONFIGS ===============" -configs="base awips" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done - -fhrlst=$(echo $FHRLST | sed -e 's/_/ /g; s/f/ /g; s/,/ /g') - -############################################################### -echo -echo "=============== BEGIN TO SOURCE MACHINE RUNTIME ENVIRONMENT ===============" -. $BASE_ENV/${machine}.env awips -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -export COMPONENT=${COMPONENT:-atmos} -export CDATEm1=$($NDATE -24 $CDATE) -export PDYm1=$(echo $CDATEm1 | cut -c1-8) - -export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" -export DATAROOT="$RUNDIR/$CDATE/$CDUMP/awips$FHRGRP" -[[ -d $DATAROOT ]] && rm -rf $DATAROOT -mkdir -p $DATAROOT - - -################################################################################ -echo -echo "=============== BEGIN AWIPS ===============" -export SENDCOM="YES" -export COMOUT="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" -export PCOM="$COMOUT/wmo" -export jlogfile="$ROTDIR/logs/$CDATE/jgfs_awips.log" - -SLEEP_TIME=1800 -SLEEP_INT=5 -SLEEP_LOOP_MAX=`expr $SLEEP_TIME / $SLEEP_INT` - -for fhr in $fhrlst; do - - if [ $fhr -gt $FHMAX_GFS ]; then - echo "Nothing to process for FHR = $fhr, cycle" - continue - fi - - fhmin=0 - fhmax=84 - if [ $fhr -ge $fhmin -a $fhr -le $fhmax ] ; then - if [[ `expr $fhr % 3` -eq 0 ]]; then - fhr3=$(printf %03i $fhr) - -# Check for input file existence. If not present, sleep -# Loop SLEEP_LOOP_MAX times. Abort if not found. - ic=1 - while [[ $ic -le $SLEEP_LOOP_MAX ]]; do - if [ -s $COMOUT/$CDUMP.t${cyc}z.pgrb2b.0p25.f${fhr3}.idx ]; then - break - else - ic=`expr $ic + 1` - sleep $SLEEP_INT - fi - if [ $ic -eq $SLEEP_LOOP_MAX ]; then - echo "***FATAL ERROR*** $COMOUT/$CDUMP.t${cyc}z.pgrb2b.0p25.f${fhr3}.idx NOT available" - export err=9 - err_chk - fi - done - - export fcsthrs=$fhr3 - export job="jgfs_awips_f${fcsthrs}_20km_${cyc}" - export DATA="${DATAROOT}/$job" - $AWIPS20SH - fi - - if [[ `expr $fhr % 6` -eq 0 ]]; then - export job="jgfs_awips_f${fcsthrs}_${cyc}" - export DATA="${DATAROOT}/$job" - $AWIPSG2SH - fi - fi - - fhmin=90 - fhmax=240 - if [ $fhr -ge $fhmin -a $fhr -le $fhmax ]; then - - if [[ `expr $fhr % 6` -eq 0 ]]; then - fhr3=$(printf %03i $fhr) - -# Check for input file existence. If not present, sleep -# Loop SLEEP_LOOP_MAX times. Abort if not found. - ic=1 - while [[ $ic -le $SLEEP_LOOP_MAX ]]; do - if [ -s $COMOUT/$CDUMP.t${cyc}z.pgrb2b.0p25.f${fhr3}.idx ]; then - break - else - ic=`expr $ic + 1` - sleep $SLEEP_INT - fi - if [ $ic -eq $SLEEP_LOOP_MAX ]; then - echo "***FATAL ERROR*** $COMOUT/$CDUMP.t${cyc}z.pgrb2b.0p25.f${fhr3}.idx NOT available" - export err=9 - err_chk - fi - done - - export fcsthrs=$fhr3 - export job="jgfs_awips_f${fcsthrs}_20km_${cyc}" - export DATA="${DATAROOT}/$job" - $AWIPS20SH - - export job="jgfs_awips_f${fcsthrs}_${cyc}" - export DATA="${DATAROOT}/$job" - $AWIPSG2SH - fi - fi -done - - -############################################################### -# Force Exit out cleanly -if [ ${KEEPDATA:-"NO"} = "NO" ] ; then rm -rf $DATAROOT ; fi -exit 0 diff --git a/jobs/rocoto/awips_20km_1p0deg.sh b/jobs/rocoto/awips_20km_1p0deg.sh new file mode 100755 index 0000000000..e1bf623883 --- /dev/null +++ b/jobs/rocoto/awips_20km_1p0deg.sh @@ -0,0 +1,67 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +## Abstract: +## Inline awips driver script +## HOMEgfs : /full/path/to/workflow +## EXPDIR : /full/path/to/config/files +## CDATE : current analysis date (YYYYMMDDHH) +## CDUMP : cycle name (gdas / gfs) +## PDY : current date (YYYYMMDD) +## cyc : current cycle (HH) +############################################################### + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="awips_20km_1p0deg" +export jobid="${job}.$$" + +source "${HOMEgfs}/ush/jjob_header.sh" -e "awips" -c "base awips" + +# shellcheck disable=SC2153 +fhrlst=$(echo "${FHRLST}" | sed -e 's/_/ /g; s/f/ /g; s/,/ /g') + +############################################################### + +################################################################################ +echo +echo "=============== BEGIN AWIPS ===============" + +for fhr3 in ${fhrlst}; do + fhr=$(( 10#${fhr3} )) + if (( fhr > FHMAX_GFS )); then + echo "Nothing to process for FHR = ${fhr3}, cycle" + continue + fi + + fhmin=0 + fhmax=84 + if (( fhr >= fhmin && fhr <= fhmax )); then + if ((fhr % 3 == 0)); then + export fcsthrs="${fhr3}" + "${AWIPS20KM1P0DEGSH}" + fi + fi + + fhmin=90 + fhmax=240 + if (( fhr >= fhmin && fhr <= fhmax )); then + if ((fhr % 6 == 0)); then + export fcsthrs="${fhr3}" + "${AWIPS20KM1P0DEGSH}" + fi + fi +done + + +############################################################### +# Force Exit out cleanly +if [[ ${KEEPDATA:-"NO"} == "NO" ]] ; then rm -rf "${DATA}" ; fi + +exit 0 diff --git a/jobs/rocoto/awips_g2.sh b/jobs/rocoto/awips_g2.sh new file mode 100755 index 0000000000..121c96d63f --- /dev/null +++ b/jobs/rocoto/awips_g2.sh @@ -0,0 +1,57 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +## Abstract: +## Inline awips driver script +## HOMEgfs : /full/path/to/workflow +## EXPDIR : /full/path/to/config/files +## CDATE : current analysis date (YYYYMMDDHH) +## CDUMP : cycle name (gdas / gfs) +## PDY : current date (YYYYMMDD) +## cyc : current cycle (HH) +############################################################### + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="awips_g2" +export jobid="${job}.$$" + +source "${HOMEgfs}/ush/jjob_header.sh" -e "awips" -c "base awips" + +# shellcheck disable=SC2153 +fhrlst=$(echo "${FHRLST}" | sed -e "s/_/ /g; s/f/ /g; s/,/ /g") + +############################################################### + +################################################################################ +echo +echo "=============== BEGIN AWIPS ===============" + +for fhr3 in ${fhrlst}; do + fhr=$(( 10#${fhr3} )) + if (( fhr > FHMAX_GFS )); then + echo "Nothing to process for FHR = ${fhr3}, cycle" + continue + fi + + fhmin=0 + fhmax=240 + if (( fhr >= fhmin && fhr <= fhmax )); then + if ((fhr % 6 == 0)); then + "${AWIPSG2SH}" + fi + fi +done + + +############################################################### +# Force Exit out cleanly +if [[ ${KEEPDATA:-"NO"} == "NO" ]] ; then rm -rf "${DATA}" ; fi + +exit 0 diff --git a/jobs/rocoto/cleanup.sh b/jobs/rocoto/cleanup.sh new file mode 100755 index 0000000000..96303fde57 --- /dev/null +++ b/jobs/rocoto/cleanup.sh @@ -0,0 +1,19 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +. "${HOMEgfs}"/ush/load_fv3gfs_modules.sh +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="cleanup" +export jobid="${job}.$$" + +############################################################### +# Execute the JJOB +"${HOMEgfs}"/jobs/JGLOBAL_CLEANUP +status=$? + +exit "${status}" diff --git a/jobs/rocoto/earc.sh b/jobs/rocoto/earc.sh index 54dc87e3cb..c4c7341698 100755 --- a/jobs/rocoto/earc.sh +++ b/jobs/rocoto/earc.sh @@ -1,186 +1,20 @@ -#!/bin/ksh -x +#! /usr/bin/env bash -############################################################### -## Abstract: -## Ensemble archive driver script -## RUN_ENVIR : runtime environment (emc | nco) -## HOMEgfs : /full/path/to/workflow -## EXPDIR : /full/path/to/config/files -## CDATE : current analysis date (YYYYMMDDHH) -## PDY : current date (YYYYMMDD) -## cyc : current cycle (HH) -## CDUMP : cycle name (gdas / gfs) -## ENSGRP : ensemble sub-group to archive (0, 1, 2, ...) -############################################################### +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -# Source relevant configs -configs="base earc" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done - -export COMPONENT=${COMPONENT:-atmos} - -n=$((ENSGRP)) - -# ICS are restarts and always lag INC by $assim_freq hours. -EARCINC_CYC=$ARCH_CYC -EARCICS_CYC=$((ARCH_CYC-assim_freq)) -if [ $EARCICS_CYC -lt 0 ]; then - EARCICS_CYC=$((EARCICS_CYC+24)) -fi - -# EnKF update in GFS, GDAS or both -CDUMP_ENKF=$(echo ${EUPD_CYC:-"gdas"} | tr a-z A-Z) - -ARCH_LIST="$ROTDIR/enkf${CDUMP}.$PDY/$cyc/$COMPONENT/earc$ENSGRP" -[[ -d $ARCH_LIST ]] && rm -rf $ARCH_LIST -mkdir -p $ARCH_LIST -cd $ARCH_LIST - -$HOMEgfs/ush/hpssarch_gen.sh enkf${CDUMP} +. "${HOMEgfs}/ush/load_fv3gfs_modules.sh" status=$? -if [ $status -ne 0 ]; then - echo "$HOMEgfs/ush/hpssarch_gen.sh enkf${CDUMP} failed, ABORT!" - exit $status -fi - -cd $ROTDIR - - -################################################################### -# ENSGRP > 0 archives a group of ensemble members -firstday=$($NDATE +24 $SDATE) -if [[ $ENSGRP -gt 0 ]] && [[ $HPSSARCH = "YES" ]]; then - -#--determine when to save ICs for warm start - SAVEWARMICA="NO" - SAVEWARMICB="NO" - mm=`echo $CDATE|cut -c 5-6` - dd=`echo $CDATE|cut -c 7-8` - nday=$(( (mm-1)*30+dd )) - mod=$(($nday % $ARCH_WARMICFREQ)) - if [ $CDATE -eq $firstday -a $cyc -eq $EARCINC_CYC ]; then SAVEWARMICA="YES" ; fi - if [ $CDATE -eq $firstday -a $cyc -eq $EARCICS_CYC ]; then SAVEWARMICB="YES" ; fi - if [ $mod -eq 0 -a $cyc -eq $EARCINC_CYC ]; then SAVEWARMICA="YES" ; fi - if [ $mod -eq 0 -a $cyc -eq $EARCICS_CYC ]; then SAVEWARMICB="YES" ; fi - - if [ $EARCICS_CYC -eq 18 ]; then - nday1=$((nday+1)) - mod1=$(($nday1 % $ARCH_WARMICFREQ)) - if [ $mod1 -eq 0 -a $cyc -eq $EARCICS_CYC ] ; then SAVEWARMICB="YES" ; fi - if [ $mod1 -ne 0 -a $cyc -eq $EARCICS_CYC ] ; then SAVEWARMICB="NO" ; fi - if [ $CDATE -eq $SDATE -a $cyc -eq $EARCICS_CYC ] ; then SAVEWARMICB="YES" ; fi - fi - - if [ $CDATE -gt $SDATE ]; then # Don't run for first half cycle - - htar -P -cvf $ATARDIR/$CDATE/enkf${CDUMP}_grp${ENSGRP}.tar `cat $ARCH_LIST/enkf${CDUMP}_grp${n}.txt` - status=$? - if [ $status -ne 0 -a $CDATE -ge $firstday ]; then - echo "HTAR $CDATE enkf${CDUMP}_grp${ENSGRP}.tar failed" - exit $status - fi - - if [ $SAVEWARMICA = "YES" -a $cyc -eq $EARCINC_CYC ]; then - htar -P -cvf $ATARDIR/$CDATE/enkf${CDUMP}_restarta_grp${ENSGRP}.tar `cat $ARCH_LIST/enkf${CDUMP}_restarta_grp${n}.txt` - status=$? - if [ $status -ne 0 ]; then - echo "HTAR $CDATE enkf${CDUMP}_restarta_grp${ENSGRP}.tar failed" - exit $status - fi - fi - - if [ $SAVEWARMICB = "YES" -a $cyc -eq $EARCICS_CYC ]; then - htar -P -cvf $ATARDIR/$CDATE/enkf${CDUMP}_restartb_grp${ENSGRP}.tar `cat $ARCH_LIST/enkf${CDUMP}_restartb_grp${n}.txt` - status=$? - if [ $status -ne 0 ]; then - echo "HTAR $CDATE enkf${CDUMP}_restartb_grp${ENSGRP}.tar failed" - exit $status - fi - fi +[[ ${status} -ne 0 ]] && exit "${status}" - fi # CDATE>SDATE - -fi - - -################################################################### -# ENSGRP 0 archives ensemble means and copy data to online archive -if [ $ENSGRP -eq 0 ]; then - - if [ $HPSSARCH = "YES" ]; then - - htar -P -cvf $ATARDIR/$CDATE/enkf${CDUMP}.tar `cat $ARCH_LIST/enkf${CDUMP}.txt` - status=$? - if [ $status -ne 0 -a $CDATE -ge $firstday ]; then - echo "HTAR $CDATE enkf${CDUMP}.tar failed" - exit $status - fi - fi - - #-- Archive online for verification and diagnostics - [[ ! -d $ARCDIR ]] && mkdir -p $ARCDIR - cd $ARCDIR - - $NCP $ROTDIR/enkf${CDUMP}.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.enkfstat enkfstat.${CDUMP}.$CDATE - $NCP $ROTDIR/enkf${CDUMP}.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.gsistat.ensmean gsistat.${CDUMP}.${CDATE}.ensmean - - if [ $CDUMP_ENKF != "GDAS" ]; then - $NCP $ROTDIR/enkfgfs.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.enkfstat enkfstat.gfs.$CDATE - $NCP $ROTDIR/enkfgfs.$PDY/$cyc/$COMPONENT/${CDUMP}.t${cyc}z.gsistat.ensmean gsistat.gfs.${CDATE}.ensmean - fi - -fi - - -if [[ "${DELETE_COM_IN_ARCHIVE_JOB:-YES}" == NO ]] ; then - exit 0 -fi +export job="earc" +export jobid="${job}.$$" ############################################################### -# ENSGRP 0 also does clean-up -if [ $ENSGRP -eq 0 ]; then - - # Start start and end dates to remove - GDATEEND=$($NDATE -${RMOLDEND_ENKF:-24} $CDATE) - GDATE=$($NDATE -${RMOLDSTD_ENKF:-120} $CDATE) - while [ $GDATE -le $GDATEEND ]; do - - gPDY=$(echo $GDATE | cut -c1-8) - gcyc=$(echo $GDATE | cut -c9-10) - - # Handle GDAS and GFS EnKF directories separately - COMIN_ENS="$ROTDIR/enkfgdas.$gPDY/$gcyc/$COMPONENT" - [[ -d $COMIN_ENS ]] && rm -rf $COMIN_ENS - COMIN_ENS="$ROTDIR/enkfgfs.$gPDY/$gcyc/$COMPONENT" - [[ -d $COMIN_ENS ]] && rm -rf $COMIN_ENS - - # Remove any empty directories - COMIN_ENS="$ROTDIR/enkfgdas.$gPDY/$COMPONENT" - if [ -d $COMIN_ENS ] ; then - [[ ! "$(ls -A $COMIN_ENS)" ]] && rm -rf $COMIN_ENS - fi - COMIN_ENS="$ROTDIR/enkfgfs.$gPDY/$COMPONENT" - if [ -d $COMIN_ENS ] ; then - [[ ! "$(ls -A $COMIN_ENS)" ]] && rm -rf $COMIN_ENS - fi - - # Advance to next cycle - GDATE=$($NDATE +$assim_freq $GDATE) - - done +# Execute the JJOB +"${HOMEgfs}/jobs/JGDAS_ENKF_ARCHIVE" +status=$? -fi -############################################################### -exit 0 +exit "${status}" diff --git a/jobs/rocoto/ecen.sh b/jobs/rocoto/ecen.sh index de14b0a274..744956b1ff 100755 --- a/jobs/rocoto/ecen.sh +++ b/jobs/rocoto/ecen.sh @@ -1,27 +1,32 @@ -#!/bin/ksh -x +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +. ${HOMEgfs}/ush/load_fv3gfs_modules.sh status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} ############################################################### # Loop over groups to Execute the JJOB -fhrlst=$(echo $FHRLST | sed -e 's/_/ /g; s/f/ /g; s/,/ /g') -for fhr in $fhrlst; do +fhrlst=$(echo ${FHRLST} | sed -e 's/_/ /g; s/f/ /g; s/,/ /g') +for fhr in ${fhrlst}; do - export FHMIN_ECEN=$fhr - export FHMAX_ECEN=$fhr - export FHOUT_ECEN=$fhr - export job=ecen${fhr} + export FHMIN_ECEN=${fhr} + export FHMAX_ECEN=${fhr} + export FHOUT_ECEN=${fhr} + export job=ecen + export jobid="${job}.$$" - $HOMEgfs/jobs/JGDAS_ENKF_RECENTER + ${HOMEgfs}/jobs/JGDAS_ENKF_ECEN status=$? - [[ $status -ne 0 ]] && exit $status + [[ ${status} -ne 0 ]] && exit ${status} done ############################################################### # Exit out cleanly + + exit 0 diff --git a/jobs/rocoto/echgres.sh b/jobs/rocoto/echgres.sh index 9776dd424e..5779a91f06 100755 --- a/jobs/rocoto/echgres.sh +++ b/jobs/rocoto/echgres.sh @@ -1,13 +1,20 @@ -#!/bin/ksh -x +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +. ${HOMEgfs}/ush/load_fv3gfs_modules.sh status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} + +export job="echgres" +export jobid="${job}.$$" ############################################################### # Execute the JJOB -$HOMEgfs/jobs/JGDAS_CHGRES_FORENKF +${HOMEgfs}/jobs/JGDAS_ATMOS_CHGRES_FORENKF status=$? -exit $status + + +exit ${status} diff --git a/jobs/rocoto/ediag.sh b/jobs/rocoto/ediag.sh index f53aa6a34a..8462edf296 100755 --- a/jobs/rocoto/ediag.sh +++ b/jobs/rocoto/ediag.sh @@ -1,13 +1,20 @@ -#!/bin/ksh -x +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +. ${HOMEgfs}/ush/load_fv3gfs_modules.sh status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} + +export job="ediag" +export jobid="${job}.$$" ############################################################### # Execute the JJOB -$HOMEgfs/jobs/JGLOBAL_ENKF_ANALDIAG +${HOMEgfs}/jobs/JGDAS_ENKF_DIAG status=$? -exit $status + + +exit ${status} diff --git a/jobs/rocoto/efcs.sh b/jobs/rocoto/efcs.sh index c9457a686f..c5667cb970 100755 --- a/jobs/rocoto/efcs.sh +++ b/jobs/rocoto/efcs.sh @@ -1,13 +1,25 @@ -#!/bin/ksh -x +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +# TODO clean this up once ncdiag/1.1.2 is installed on WCOSS2 +source "${HOMEgfs}/ush/detect_machine.sh" +if [[ "${MACHINE_ID}" == "wcoss2" ]]; then + . ${HOMEgfs}/ush/load_ufswm_modules.sh +else + . ${HOMEgfs}/ush/load_fv3gfs_modules.sh +fi status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} + +export job="efcs" +export jobid="${job}.$$" ############################################################### # Execute the JJOB -$HOMEgfs/jobs/JGDAS_ENKF_FCST +"${HOMEgfs}/jobs/JGDAS_ENKF_FCST" status=$? -exit $status + +exit ${status} diff --git a/jobs/rocoto/eobs.sh b/jobs/rocoto/eobs.sh index 664e332953..1139c3e623 100755 --- a/jobs/rocoto/eobs.sh +++ b/jobs/rocoto/eobs.sh @@ -1,13 +1,20 @@ -#!/bin/ksh -x +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +. ${HOMEgfs}/ush/load_fv3gfs_modules.sh status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} + +export job="eobs" +export jobid="${job}.$$" ############################################################### # Execute the JJOB -$HOMEgfs/jobs/JGLOBAL_ENKF_SELECT_OBS +"${HOMEgfs}/jobs/JGDAS_ENKF_SELECT_OBS" status=$? -exit $status + + +exit "${status}" diff --git a/jobs/rocoto/eomg.sh b/jobs/rocoto/eomg.sh deleted file mode 100755 index 11dbaeeb1e..0000000000 --- a/jobs/rocoto/eomg.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/ksh -x - -############################################################### -# Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -# Execute the JJOB -$HOMEgfs/jobs/JGLOBAL_ENKF_INNOVATE_OBS -status=$? -exit $status diff --git a/jobs/rocoto/epos.sh b/jobs/rocoto/epos.sh index 98b1384973..d1f890a930 100755 --- a/jobs/rocoto/epos.sh +++ b/jobs/rocoto/epos.sh @@ -1,28 +1,33 @@ -#!/bin/ksh -x +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +. ${HOMEgfs}/ush/load_fv3gfs_modules.sh status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} +export job="epos" +export jobid="${job}.$$" + ############################################################### # Loop over groups to Execute the JJOB -fhrlst=$(echo $FHRLST | sed -e 's/_/ /g; s/f/ /g; s/,/ /g') +fhrlst=$(echo ${FHRLST} | sed -e 's/_/ /g; s/f/ /g; s/,/ /g') -for fhr in $fhrlst; do - - export FHMIN_EPOS=$fhr - export FHMAX_EPOS=$fhr - export FHOUT_EPOS=$fhr - export job=epos${fhr} - - $HOMEgfs/jobs/JGDAS_ENKF_POST +for fhr in ${fhrlst}; do + + export FHMIN_EPOS=${fhr} + export FHMAX_EPOS=${fhr} + export FHOUT_EPOS=${fhr} + ${HOMEgfs}/jobs/JGDAS_ENKF_POST status=$? - [[ $status -ne 0 ]] && exit $status + [[ ${status} -ne 0 ]] && exit ${status} done ############################################################### # Exit out cleanly + + exit 0 diff --git a/jobs/rocoto/esfc.sh b/jobs/rocoto/esfc.sh index cdc762beab..85f44151c9 100755 --- a/jobs/rocoto/esfc.sh +++ b/jobs/rocoto/esfc.sh @@ -1,13 +1,20 @@ -#!/bin/ksh -x +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +. ${HOMEgfs}/ush/load_fv3gfs_modules.sh status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} + +export job="esfc" +export jobid="${job}.$$" ############################################################### # Execute the JJOB -$HOMEgfs/jobs/JGDAS_ENKF_SURFACE +${HOMEgfs}/jobs/JGDAS_ENKF_SFC status=$? -exit $status + + +exit ${status} diff --git a/jobs/rocoto/eupd.sh b/jobs/rocoto/eupd.sh index 7954c1db5e..9134ca5f14 100755 --- a/jobs/rocoto/eupd.sh +++ b/jobs/rocoto/eupd.sh @@ -1,13 +1,20 @@ -#!/bin/ksh -x +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +. ${HOMEgfs}/ush/load_fv3gfs_modules.sh status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} + +export job="eupd" +export jobid="${job}.$$" ############################################################### # Execute the JJOB -$HOMEgfs/jobs/JGLOBAL_ENKF_UPDATE +"${HOMEgfs}/jobs/JGDAS_ENKF_UPDATE" status=$? -exit $status + + +exit "${status}" diff --git a/jobs/rocoto/fbwinds.sh b/jobs/rocoto/fbwinds.sh new file mode 100755 index 0000000000..078e71586f --- /dev/null +++ b/jobs/rocoto/fbwinds.sh @@ -0,0 +1,17 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +. "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +if (( status != 0 )); then exit "${status}"; fi + +export job="fbwinds" +export jobid="${job}.$$" + +# Execute the JJOB +"${HOMEgfs}/jobs/JGFS_ATMOS_FBWINDS" + +status=$? +exit "${status}" diff --git a/jobs/rocoto/fcst.sh b/jobs/rocoto/fcst.sh index 23be9b7843..9138b4eb43 100755 --- a/jobs/rocoto/fcst.sh +++ b/jobs/rocoto/fcst.sh @@ -1,13 +1,24 @@ -#!/bin/ksh -x +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +# TODO clean this up once ncdiag/1.1.2 is installed on WCOSS2 +source "${HOMEgfs}/ush/detect_machine.sh" +if [[ "${MACHINE_ID}" == "wcoss2" ]]; then + . ${HOMEgfs}/ush/load_ufswm_modules.sh +else + . ${HOMEgfs}/ush/load_fv3gfs_modules.sh +fi status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} + +export job="fcst" +export jobid="${job}.$$" -############################################################### # Execute the JJOB -$HOMEgfs/jobs/JGLOBAL_FORECAST +"${HOMEgfs}/jobs/JGLOBAL_FORECAST" status=$? -exit $status + +exit ${status} diff --git a/jobs/rocoto/fit2obs.sh b/jobs/rocoto/fit2obs.sh new file mode 100755 index 0000000000..d991234fbe --- /dev/null +++ b/jobs/rocoto/fit2obs.sh @@ -0,0 +1,23 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +echo +echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" +. "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="fit2obs" +export jobid="${job}.$$" + +############################################################### +echo +echo "=============== START TO RUN FIT2OBS ===============" +# Execute the JJOB +"${HOMEgfs}/jobs/JGDAS_FIT2OBS" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +exit 0 diff --git a/jobs/rocoto/fv3ic.sh b/jobs/rocoto/fv3ic.sh deleted file mode 100755 index b5c2e40b48..0000000000 --- a/jobs/rocoto/fv3ic.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/ksh -x - -############################################################### -## Abstract: -## Create FV3 initial conditions from GFS intitial conditions -## RUN_ENVIR : runtime environment (emc | nco) -## HOMEgfs : /full/path/to/workflow -## EXPDIR : /full/path/to/config/files -## CDATE : current date (YYYYMMDDHH) -## CDUMP : cycle name (gdas / gfs) -## PDY : current date (YYYYMMDD) -## cyc : current cycle (HH) -############################################################### - -############################################################### -# Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -# Source relevant configs -configs="base fv3ic" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done - -############################################################### -# Source machine runtime environment -. $BASE_ENV/${machine}.env fv3ic -status=$? -[[ $status -ne 0 ]] && exit $status - -# Set component -export COMPONENT=${COMPONENT:-atmos} - -# Temporary runtime directory -export DATA="$RUNDIR/$CDATE/$CDUMP/fv3ic$$" -[[ -d $DATA ]] && rm -rf $DATA - -# Input GFS initial condition directory -export INIDIR="$ICSDIR/$CDATE/$CDUMP/$CDUMP.$PDY/$cyc" - -# Output FV3 initial condition directory -export OUTDIR="$ICSDIR/$CDATE/$CDUMP/$CASE/INPUT" - -export OMP_NUM_THREADS_CH=$NTHREADS_CHGRES -export APRUNC=$APRUN_CHGRES - -# Call global_chgres_driver.sh -$HOMEgfs/ush/global_chgres_driver.sh -status=$? -if [ $status -ne 0 ]; then - echo "global_chgres_driver.sh returned with a non-zero exit code, ABORT!" - exit $status -fi - -# Stage the FV3 initial conditions to ROTDIR -COMOUT="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" -[[ ! -d $COMOUT ]] && mkdir -p $COMOUT -cd $COMOUT || exit 99 -rm -rf INPUT -$NLN $OUTDIR . - -############################################################### -# Exit cleanly -exit 0 diff --git a/jobs/rocoto/gempak.sh b/jobs/rocoto/gempak.sh index 599c6f3766..82ea1175d8 100755 --- a/jobs/rocoto/gempak.sh +++ b/jobs/rocoto/gempak.sh @@ -1,69 +1,17 @@ -#!/bin/ksh -x +#! /usr/bin/env bash -############################################################### -## Abstract: -## Inline gempak driver script -## RUN_ENVIR : runtime environment (emc | nco) -## HOMEgfs : /full/path/to/workflow -## EXPDIR : /full/path/to/config/files -## CDATE : current analysis date (YYYYMMDDHH) -## CDUMP : cycle name (gdas / gfs) -## PDY : current date (YYYYMMDD) -## cyc : current cycle (HH) -############################################################### +source "${HOMEgfs}/ush/preamble.sh" ############################################################### -echo -echo "=============== BEGIN TO SOURCE FV3GFS WORKFLOW MODULES ===============" -. $HOMEgfs/ush/load_fv3gfs_modules.sh +. "${HOMEgfs}/ush/load_fv3gfs_modules.sh" status=$? -[[ $status -ne 0 ]] && exit $status +if (( status != 0 )); then exit "${status}"; fi +export job="gempak" +export jobid="${job}.$$" -############################################################### -echo -echo "=============== BEGIN TO SOURCE RELEVANT CONFIGS ===============" -configs="base gempak" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done - +# Execute the JJOB +"${HOMEgfs}/jobs/J${RUN^^}_ATMOS_GEMPAK" -############################################################### -echo -echo "=============== BEGIN TO SOURCE MACHINE RUNTIME ENVIRONMENT ===============" -. $BASE_ENV/${machine}.env gempak status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -export COMPONENT=${COMPONENT:-atmos} -export CDATEm1=$($NDATE -24 $CDATE) -export PDYm1=$(echo $CDATEm1 | cut -c1-8) - -export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" -export DATAROOT="$RUNDIR/$CDATE/$CDUMP/gempak" -[[ -d $DATAROOT ]] && rm -rf $DATAROOT -mkdir -p $DATAROOT - - -################################################################################ -echo -echo "=============== BEGIN GEMPAK ===============" -export job="jgfs_gempak_${cyc}" -export jlogfile="$ROTDIR/logs/$CDATE/$job.log" -export DATA="${DATAROOT}/$job" -export SENDCOM="YES" -export COMOUT="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT/gempak" -export FIXgfs="" # set blank so that GEMPAKSH defaults FIXgfs to HOMEgfs/gempak/fix -export USHgfs="" # set blank so that GEMPAKSH defaults FIXgfs to HOMEgfs/gempak/ush - -$GEMPAKSH - - -############################################################### -# Force Exit out cleanly -if [ ${KEEPDATA:-"NO"} = "NO" ] ; then rm -rf $DATAROOT ; fi -exit 0 +exit "${status}" diff --git a/jobs/rocoto/gempakmeta.sh b/jobs/rocoto/gempakmeta.sh new file mode 100755 index 0000000000..0babf7bbbf --- /dev/null +++ b/jobs/rocoto/gempakmeta.sh @@ -0,0 +1,17 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +. "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +if (( status != 0 )); then exit "${status}"; fi + +export job="gempakmeta" +export jobid="${job}.$$" + +# Execute the JJOB +"${HOMEgfs}/jobs/JGFS_ATMOS_GEMPAK_META" + +status=$? +exit "${status}" diff --git a/jobs/rocoto/gempakmetancdc.sh b/jobs/rocoto/gempakmetancdc.sh new file mode 100755 index 0000000000..cfd51cf58a --- /dev/null +++ b/jobs/rocoto/gempakmetancdc.sh @@ -0,0 +1,17 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +. "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +if (( status != 0 )); then exit "${status}"; fi + +export job="gempakmetancdc" +export jobid="${job}.$$" + +# Execute the JJOB +"${HOMEgfs}/jobs/JGDAS_ATMOS_GEMPAK_META_NCDC" + +status=$? +exit "${status}" diff --git a/jobs/rocoto/gempakncdcupapgif.sh b/jobs/rocoto/gempakncdcupapgif.sh new file mode 100755 index 0000000000..2cc84cd47d --- /dev/null +++ b/jobs/rocoto/gempakncdcupapgif.sh @@ -0,0 +1,17 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +. "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +if (( status != 0 )); then exit "${status}"; fi + +export job="gempakncdcupapgif" +export jobid="${job}.$$" + +# Execute the JJOB +"${HOMEgfs}/jobs/JGFS_ATMOS_GEMPAK_NCDC_UPAPGIF" + +status=$? +exit "${status}" diff --git a/jobs/rocoto/gempakpgrb2spec.sh b/jobs/rocoto/gempakpgrb2spec.sh new file mode 100755 index 0000000000..f76c33ecdb --- /dev/null +++ b/jobs/rocoto/gempakpgrb2spec.sh @@ -0,0 +1,17 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +. "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +if (( status != 0 )); then exit "${status}"; fi + +export job="gempakpgrb2spec" +export jobid="${job}.$$" + +# Execute the JJOB +"${HOMEgfs}/jobs/JGFS_ATMOS_GEMPAK_PGRB2_SPEC" + +status=$? +exit "${status}" diff --git a/jobs/rocoto/genesis.sh b/jobs/rocoto/genesis.sh new file mode 100755 index 0000000000..009a7006ef --- /dev/null +++ b/jobs/rocoto/genesis.sh @@ -0,0 +1,20 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="genesis" +export jobid="${job}.$$" + +############################################################### +# Execute the JJOB + +"${HOMEgfs}/jobs/JGFS_ATMOS_CYCLONE_GENESIS" +status=$? + +exit "${status}" diff --git a/jobs/rocoto/genesis_fsu.sh b/jobs/rocoto/genesis_fsu.sh new file mode 100755 index 0000000000..05c0ff8827 --- /dev/null +++ b/jobs/rocoto/genesis_fsu.sh @@ -0,0 +1,20 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="genesis_fsu" +export jobid="${job}.$$" + +############################################################### +# Execute the JJOB + +"${HOMEgfs}/jobs/JGFS_ATMOS_FSU_GENESIS" +status=$? + +exit "${status}" diff --git a/jobs/rocoto/getic.sh b/jobs/rocoto/getic.sh deleted file mode 100755 index 23607069d8..0000000000 --- a/jobs/rocoto/getic.sh +++ /dev/null @@ -1,199 +0,0 @@ -#!/bin/ksh -x - -############################################################### -## Abstract: -## Get GFS intitial conditions -## RUN_ENVIR : runtime environment (emc | nco) -## HOMEgfs : /full/path/to/workflow -## EXPDIR : /full/path/to/config/files -## CDATE : current date (YYYYMMDDHH) -## CDUMP : cycle name (gdas / gfs) -## PDY : current date (YYYYMMDD) -## cyc : current cycle (HH) -############################################################### - -############################################################### -# Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -# Source relevant configs -configs="base getic" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done - -############################################################### -# Source machine runtime environment -. $BASE_ENV/${machine}.env getic -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -# Set script and dependency variables - -yyyy=$(echo $CDATE | cut -c1-4) -mm=$(echo $CDATE | cut -c5-6) -dd=$(echo $CDATE | cut -c7-8) -cyc=${cyc:-$(echo $CDATE | cut -c9-10)} - -export COMPONENT=${COMPONENT:-atmos} - -############################################################### - -target_dir=$ICSDIR/$CDATE/$CDUMP -mkdir -p $target_dir -cd $target_dir - -# Initialize return code to 0 -rc=1 - -if [ $ics_from = "opsgfs" ]; then - - # Location of production tarballs on HPSS - hpssdir="/NCEPPROD/hpssprod/runhistory/rh$yyyy/$yyyy$mm/$PDY" - - # Handle nemsio and pre-nemsio GFS filenames - if [ $CDATE -le "2019061118" ]; then #GFSv14 - # Add CDUMP.PDY/CYC to target_dir - target_dir=$ICSDIR/$CDATE/$CDUMP/${CDUMP}.$yyyy$mm$dd/$cyc - mkdir -p $target_dir - cd $target_dir - - nfanal=4 - fanal[1]="./${CDUMP}.t${cyc}z.atmanl.nemsio" - fanal[2]="./${CDUMP}.t${cyc}z.sfcanl.nemsio" - fanal[3]="./${CDUMP}.t${cyc}z.nstanl.nemsio" - fanal[4]="./${CDUMP}.t${cyc}z.pgrbanl" - flanal="${fanal[1]} ${fanal[2]} ${fanal[3]} ${fanal[4]}" - tarpref="gpfs_hps_nco_ops_com" - if [ $CDUMP = "gdas" ]; then - tarball="$hpssdir/${tarpref}_gfs_prod_${CDUMP}.${CDATE}.tar" - elif [ $CDUMP = "gfs" ]; then - tarball="$hpssdir/${tarpref}_gfs_prod_${CDUMP}.${CDATE}.anl.tar" - fi - else #GFSv15 - nfanal=2 - fanal[1]="./${CDUMP}.$yyyy$mm$dd/$cyc/${CDUMP}.t${cyc}z.atmanl.nemsio" - fanal[2]="./${CDUMP}.$yyyy$mm$dd/$cyc/${CDUMP}.t${cyc}z.sfcanl.nemsio" - flanal="${fanal[1]} ${fanal[2]}" - tarpref="gpfs_dell1_nco_ops_com" - if [ $CDUMP = "gdas" ]; then - tarball="$hpssdir/${tarpref}_gfs_prod_${CDUMP}.${yyyy}${mm}${dd}_${cyc}.${CDUMP}_nemsio.tar" - elif [ $CDUMP = "gfs" ]; then - tarball="$hpssdir/${tarpref}_gfs_prod_${CDUMP}.${yyyy}${mm}${dd}_${cyc}.${CDUMP}_nemsioa.tar" - fi - fi - - # First check the COMROOT for files, if present copy over - if [ $machine = "WCOSS_C" ]; then - - # Need COMROOT - module load prod_envir/1.1.0 >> /dev/null 2>&1 - - comdir="$COMROOT/$CDUMP/prod/$CDUMP.$PDY" - rc=0 - for i in `seq 1 $nfanal`; do - if [ -f $comdir/${fanal[i]} ]; then - $NCP $comdir/${fanal[i]} ${fanal[i]} - else - rb=1 ; ((rc+=rb)) - fi - done - - fi - - # Get initial conditions from HPSS - if [ $rc -ne 0 ]; then - - # check if the tarball exists - hsi ls -l $tarball - rc=$? - if [ $rc -ne 0 ]; then - echo "$tarball does not exist and should, ABORT!" - exit $rc - fi - # get the tarball - htar -xvf $tarball $flanal - rc=$? - if [ $rc -ne 0 ]; then - echo "untarring $tarball failed, ABORT!" - exit $rc - fi - - # Move the files to legacy EMC filenames - if [ $CDATE -le "2019061118" ]; then #GFSv14 - for i in `seq 1 $nfanal`; do - $NMV ${fanal[i]} ${flanal[i]} - done - fi - - fi - - # If found, exit out - if [ $rc -ne 0 ]; then - echo "Unable to obtain operational GFS initial conditions, ABORT!" - exit 1 - fi - -elif [ $ics_from = "pargfs" ]; then - - # Add CDUMP.PDY/CYC to target_dir - target_dir=$ICSDIR/$CDATE/$CDUMP/${CDUMP}.$yyyy$mm$dd/$cyc - mkdir -p $target_dir - cd $target_dir - - # Filenames in parallel - nfanal=4 - fanal[1]="gfnanl.${CDUMP}.$CDATE" - fanal[2]="sfnanl.${CDUMP}.$CDATE" - fanal[3]="nsnanl.${CDUMP}.$CDATE" - fanal[4]="pgbanl.${CDUMP}.$CDATE" - flanal="${fanal[1]} ${fanal[2]} ${fanal[3]} ${fanal[4]}" - - # Get initial conditions from HPSS from retrospective parallel - tarball="$HPSS_PAR_PATH/${CDATE}${CDUMP}.tar" - - # check if the tarball exists - hsi ls -l $tarball - rc=$? - if [ $rc -ne 0 ]; then - echo "$tarball does not exist and should, ABORT!" - exit $rc - fi - # get the tarball - htar -xvf $tarball $flanal - rc=$? - if [ $rc -ne 0 ]; then - echo "untarring $tarball failed, ABORT!" - exit $rc - fi - - # If found, exit out - if [ $rc -ne 0 ]; then - echo "Unable to obtain parallel GFS initial conditions, ABORT!" - exit 1 - fi - -else - - echo "ics_from = $ics_from is not supported, ABORT!" - exit 1 - -fi -############################################################### - -# Copy pgbanl file to COMROT for verification - GFSv14 only -if [ $CDATE -le "2019061118" ]; then #GFSv14 - COMROT=$ROTDIR/${CDUMP}.$PDY/$cyc/$COMPONENT - [[ ! -d $COMROT ]] && mkdir -p $COMROT - $NCP ${fanal[4]} $COMROT/${CDUMP}.t${cyc}z.pgrbanl -fi - -############################################################### -# Exit out cleanly -exit 0 diff --git a/jobs/rocoto/gldas.sh b/jobs/rocoto/gldas.sh deleted file mode 100755 index 2619463b6a..0000000000 --- a/jobs/rocoto/gldas.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/ksh -x - -############################################################### -# Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -# Execute the JJOB. GLDAS only runs once per day. - -$HOMEgfs/jobs/JGDAS_GLDAS -status=$? - -exit $status diff --git a/jobs/rocoto/landanl.sh b/jobs/rocoto/landanl.sh new file mode 100755 index 0000000000..f49b6f9f8b --- /dev/null +++ b/jobs/rocoto/landanl.sh @@ -0,0 +1,24 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source UFSDA workflow modules +. "${HOMEgfs}/ush/load_ufsda_modules.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="landanl" +export jobid="${job}.$$" + +############################################################### +# setup python path for workflow utilities and tasks +wxflowPATH="${HOMEgfs}/ush/python:${HOMEgfs}/ush/python/wxflow/src" +PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${wxflowPATH}" +export PYTHONPATH + +############################################################### +# Execute the JJOB +"${HOMEgfs}/jobs/JGLOBAL_LAND_ANALYSIS" +status=$? +exit "${status}" diff --git a/jobs/rocoto/metp.sh b/jobs/rocoto/metp.sh index 789810d6a7..2bf833c1d6 100755 --- a/jobs/rocoto/metp.sh +++ b/jobs/rocoto/metp.sh @@ -1,72 +1,15 @@ -#!/bin/ksh -x +#! /usr/bin/env bash -############################################################### -## Abstract: -## Inline METplus verification and diagnostics driver script -## RUN_ENVIR : runtime environment (emc | nco) -## HOMEgfs : /full/path/to/workflow -## EXPDIR : /full/path/to/config/files -## CDATE : current analysis date (YYYYMMDDHH) -## CDUMP : cycle name (gdas / gfs) -## PDY : current date (YYYYMMDD) -## cyc : current cycle (HH) -## METPCASE : METplus verification use case (g2g1 | g2o1 | pcp1) -############################################################### +source "${HOMEgfs}/ush/preamble.sh" ############################################################### -echo -echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" -. $HOMEgfs/ush/load_fv3gfs_modules.sh +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################################### -echo -echo "=============== START TO SOURCE RELEVANT CONFIGS ===============" -configs="base vrfy metp" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done +if (( status != 0 )); then exit "${status}"; fi +export job="metp${METPCASE}" +export jobid="${job}.$$" -############################################################### -echo -echo "=============== START TO SOURCE MACHINE RUNTIME ENVIRONMENT ===============" -. $BASE_ENV/${machine}.env metp -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -export COMPONENT=${COMPONENT:-atmos} -export CDATEm1=$($NDATE -24 $CDATE) -export PDYm1=$(echo $CDATEm1 | cut -c1-8) +"${HOMEgfs}/jobs/JGFS_ATMOS_VERIFICATION" -export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" -export DATAROOT="$RUNDIR/$CDATE/$CDUMP/vrfy" -[[ -d $DATAROOT ]] && rm -rf $DATAROOT -mkdir -p $DATAROOT - - -############################################################### -echo -echo "=============== START TO RUN METPLUS VERIFICATION ===============" -if [ $CDUMP = "gfs" ]; then - - if [ $RUN_GRID2GRID_STEP1 = "YES" -o $RUN_GRID2OBS_STEP1 = "YES" -o $RUN_PRECIP_STEP1 = "YES" ]; then - - $VERIF_GLOBALSH - - fi -fi - - -if [ $CDUMP = "gdas" ]; then - echo "METplus verification currently not supported for CDUMP=${CDUMP}" -fi -############################################################### -# Force Exit out cleanly -if [ ${KEEPDATA:-"NO"} = "NO" ] ; then rm -rf $DATAROOT ; fi -exit 0 +exit $? diff --git a/jobs/rocoto/npoess.sh b/jobs/rocoto/npoess.sh new file mode 100755 index 0000000000..3599ca26bd --- /dev/null +++ b/jobs/rocoto/npoess.sh @@ -0,0 +1,17 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +. "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +if (( status != 0 )); then exit "${status}"; fi + +export job="npoess_pgrb2_0p5deg" +export jobid="${job}.$$" + +# Execute the JJOB +"${HOMEgfs}/jobs/JGFS_ATMOS_PGRB2_SPEC_NPOESS" + +status=$? +exit "${status}" diff --git a/jobs/rocoto/ocnanalbmat.sh b/jobs/rocoto/ocnanalbmat.sh new file mode 100755 index 0000000000..e62db9115a --- /dev/null +++ b/jobs/rocoto/ocnanalbmat.sh @@ -0,0 +1,19 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source UFSDA workflow modules +. "${HOMEgfs}/ush/load_ufsda_modules.sh" +status=$? +[[ "${status}" -ne 0 ]] && exit "${status}" + +export job="ocnanalbmat" +export jobid="${job}.$$" + +############################################################### +# Execute the JJOB +"${HOMEgfs}"/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_BMAT +echo "BMAT gets run here" +status=$? +exit "${status}" diff --git a/jobs/rocoto/ocnanalchkpt.sh b/jobs/rocoto/ocnanalchkpt.sh new file mode 100755 index 0000000000..ae98bc8e88 --- /dev/null +++ b/jobs/rocoto/ocnanalchkpt.sh @@ -0,0 +1,18 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source UFSDA workflow modules +. "${HOMEgfs}/ush/load_ufsda_modules.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="ocnanalchkpt" +export jobid="${job}.$$" + +############################################################### +# Execute the JJOB +"${HOMEgfs}"/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_CHKPT +status=$? +exit "${status}" diff --git a/jobs/rocoto/ocnanalpost.sh b/jobs/rocoto/ocnanalpost.sh new file mode 100755 index 0000000000..b99a4e05ca --- /dev/null +++ b/jobs/rocoto/ocnanalpost.sh @@ -0,0 +1,18 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source UFSDA workflow modules +. "${HOMEgfs}/ush/load_ufsda_modules.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="ocnanalpost" +export jobid="${job}.$$" + +############################################################### +# Execute the JJOB +"${HOMEgfs}"/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_POST +status=$? +exit "${status}" diff --git a/jobs/rocoto/ocnanalprep.sh b/jobs/rocoto/ocnanalprep.sh new file mode 100755 index 0000000000..3830fe1c39 --- /dev/null +++ b/jobs/rocoto/ocnanalprep.sh @@ -0,0 +1,19 @@ +#! /usr/bin/env bash + +export STRICT="NO" +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source UFSDA workflow modules +. "${HOMEgfs}/ush/load_ufsda_modules.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="ocnanalprep" +export jobid="${job}.$$" + +############################################################### +# Execute the JJOB +"${HOMEgfs}"/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_PREP +status=$? +exit "${status}" diff --git a/jobs/rocoto/ocnanalrun.sh b/jobs/rocoto/ocnanalrun.sh new file mode 100755 index 0000000000..5f998af989 --- /dev/null +++ b/jobs/rocoto/ocnanalrun.sh @@ -0,0 +1,18 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source UFSDA workflow modules +. "${HOMEgfs}/ush/load_ufsda_modules.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="ocnanalrun" +export jobid="${job}.$$" + +############################################################### +# Execute the JJOB +"${HOMEgfs}"/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN +status=$? +exit "${status}" diff --git a/jobs/rocoto/ocnanalvrfy.sh b/jobs/rocoto/ocnanalvrfy.sh new file mode 100755 index 0000000000..d8e9bbb805 --- /dev/null +++ b/jobs/rocoto/ocnanalvrfy.sh @@ -0,0 +1,19 @@ +#! /usr/bin/env bash + +export STRICT="NO" +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source UFSDA workflow modules +. "${HOMEgfs}/ush/load_ufsda_modules.sh" --eva +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="ocnanalvrfy" +export jobid="${job}.$$" + +############################################################### +# Execute the JJOB +"${HOMEgfs}/jobs/JGDAS_GLOBAL_OCEAN_ANALYSIS_VRFY" +status=$? +exit "${status}" diff --git a/jobs/rocoto/ocnpost.sh b/jobs/rocoto/ocnpost.sh new file mode 100755 index 0000000000..5a2dc091cf --- /dev/null +++ b/jobs/rocoto/ocnpost.sh @@ -0,0 +1,119 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +## CICE5/MOM6 post driver script +## FHRGRP : forecast hour group to post-process (e.g. 0, 1, 2 ...) +## FHRLST : forecast hourlist to be post-process (e.g. anl, f000, f000_f001_f002, ...) +############################################################### + +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="ocnpost" +export jobid="${job}.$$" +source "${HOMEgfs}/ush/jjob_header.sh" -e "ocnpost" -c "base ocnpost" + +############################################## +# Set variables used in the exglobal script +############################################## +export CDUMP=${RUN/enkf} + +############################################## +# Begin JOB SPECIFIC work +############################################## +YMD=${PDY} HH=${cyc} generate_com -rx COM_OCEAN_HISTORY COM_OCEAN_2D COM_OCEAN_3D \ + COM_OCEAN_XSECT COM_ICE_HISTORY + +for grid in "0p50" "0p25"; do + YMD=${PDY} HH=${cyc} GRID=${grid} generate_com -rx "COM_OCEAN_GRIB_${grid}:COM_OCEAN_GRIB_GRID_TMPL" +done + +for outdir in COM_OCEAN_2D COM_OCEAN_3D COM_OCEAN_XSECT COM_OCEAN_GRIB_0p25 COM_OCEAN_GRIB_0p50; do + if [[ ! -d "${!outdir}" ]]; then + mkdir -p "${!outdir}" + fi +done + +fhrlst=$(echo ${FHRLST} | sed -e 's/_/ /g; s/f/ /g; s/,/ /g') + +export OMP_NUM_THREADS=1 +export ENSMEM=${ENSMEM:-000} + +export IDATE=${PDY}${cyc} + +for fhr in ${fhrlst}; do + export fhr=${fhr} + # Ignore possible spelling error (nothing is misspelled) + # shellcheck disable=SC2153 + VDATE=$(${NDATE} "${fhr}" "${IDATE}") + # shellcheck disable= + declare -x VDATE + cd "${DATA}" || exit 2 + if (( 10#${fhr} > 0 )); then + # TODO: This portion calls NCL scripts that are deprecated (see Issue #923) + if [[ "${MAKE_OCN_GRIB:-YES}" == "YES" ]]; then + export MOM6REGRID=${MOM6REGRID:-${HOMEgfs}} + "${MOM6REGRID}/scripts/run_regrid.sh" + status=$? + [[ ${status} -ne 0 ]] && exit "${status}" + + # Convert the netcdf files to grib2 + export executable=${MOM6REGRID}/exec/reg2grb2.x + "${MOM6REGRID}/scripts/run_reg2grb2.sh" + status=$? + [[ ${status} -ne 0 ]] && exit "${status}" + ${NMV} "ocn_ice${VDATE}.${ENSMEM}.${IDATE}_0p25x0p25.grb2" "${COM_OCEAN_GRIB_0p25}/" + ${NMV} "ocn_ice${VDATE}.${ENSMEM}.${IDATE}_0p5x0p5.grb2" "${COM_OCEAN_GRIB_0p50}/" + fi + + #break up ocn netcdf into multiple files: + if [[ -f "${COM_OCEAN_2D}/ocn_2D_${VDATE}.${ENSMEM}.${IDATE}.nc" ]]; then + echo "File ${COM_OCEAN_2D}/ocn_2D_${VDATE}.${ENSMEM}.${IDATE}.nc already exists" + else + ncks -x -v vo,uo,so,temp \ + "${COM_OCEAN_HISTORY}/ocn${VDATE}.${ENSMEM}.${IDATE}.nc" \ + "${COM_OCEAN_2D}/ocn_2D_${VDATE}.${ENSMEM}.${IDATE}.nc" + status=$? + [[ ${status} -ne 0 ]] && exit "${status}" + fi + if [[ -f "${COM_OCEAN_3D}/ocn_3D_${VDATE}.${ENSMEM}.${IDATE}.nc" ]]; then + echo "File ${COM_OCEAN_3D}/ocn_3D_${VDATE}.${ENSMEM}.${IDATE}.nc already exists" + else + ncks -x -v Heat_PmE,LW,LwLatSens,MLD_003,MLD_0125,SSH,SSS,SST,SSU,SSV,SW,cos_rot,ePBL,evap,fprec,frazil,latent,lprec,lrunoff,sensible,sin_rot,speed,taux,tauy,wet_c,wet_u,wet_v \ + "${COM_OCEAN_HISTORY}/ocn${VDATE}.${ENSMEM}.${IDATE}.nc" \ + "${COM_OCEAN_3D}/ocn_3D_${VDATE}.${ENSMEM}.${IDATE}.nc" + status=$? + [[ ${status} -ne 0 ]] && exit "${status}" + fi + if [[ -f "${COM_OCEAN_XSECT}/ocn-temp-EQ_${VDATE}.${ENSMEM}.${IDATE}.nc" ]]; then + echo "File ${COM_OCEAN_XSECT}/ocn-temp-EQ_${VDATE}.${ENSMEM}.${IDATE}.nc already exists" + else + ncks -v temp -d yh,0.0 \ + "${COM_OCEAN_3D}/ocn_3D_${VDATE}.${ENSMEM}.${IDATE}.nc" \ + "${COM_OCEAN_XSECT}/ocn-temp-EQ_${VDATE}.${ENSMEM}.${IDATE}.nc" + status=$? + [[ ${status} -ne 0 ]] && exit "${status}" + fi + if [[ -f "${COM_OCEAN_XSECT}/ocn-uo-EQ_${VDATE}.${ENSMEM}.${IDATE}.nc" ]]; then + echo "File ${COM_OCEAN_XSECT}/ocn-uo-EQ_${VDATE}.${ENSMEM}.${IDATE}.nc already exists" + else + ncks -v uo -d yh,0.0 \ + "${COM_OCEAN_3D}/ocn_3D_${VDATE}.${ENSMEM}.${IDATE}.nc" \ + "${COM_OCEAN_XSECT}/ocn-uo-EQ_${VDATE}.${ENSMEM}.${IDATE}.nc" + status=$? + [[ ${status} -ne 0 ]] && exit "${status}" + fi + fi +done + +# clean up working folder +if [[ ${KEEPDATA:-"NO"} = "NO" ]] ; then rm -rf "${DATA}" ; fi +############################################################### +# Exit out cleanly + + +exit 0 diff --git a/jobs/rocoto/post.sh b/jobs/rocoto/post.sh deleted file mode 100755 index 4a253db31e..0000000000 --- a/jobs/rocoto/post.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/ksh -x - -############################################################### -## NCEP post driver script -## FHRGRP : forecast hour group to post-process (e.g. 0, 1, 2 ...) -## FHRLST : forecast hourlist to be post-process (e.g. anl, f000, f000_f001_f002, ...) -############################################################### - -# Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh -status=$? -[[ $status -ne 0 ]] && exit $status - -export COMPONENT=${COMPONENT:-atmos} - -if [ $FHRGRP -eq 0 ]; then - fhrlst="anl" - restart_file=$ROTDIR/${CDUMP}.${PDY}/${cyc}/$COMPONENT/${CDUMP}.t${cyc}z.atm -else - fhrlst=$(echo $FHRLST | sed -e 's/_/ /g; s/f/ /g; s/,/ /g') - restart_file=$ROTDIR/${CDUMP}.${PDY}/${cyc}/$COMPONENT/${CDUMP}.t${cyc}z.logf -fi - - -#--------------------------------------------------------------- -for fhr in $fhrlst; do - - if [ ! -f $restart_file${fhr}.nemsio -a ! -f $restart_file${fhr}.nc -a ! -f $restart_file${fhr}.txt ]; then - echo "Nothing to process for FHR = $fhr, cycle, wait for 5 minutes" - sleep 300 - fi - if [ ! -f $restart_file${fhr}.nemsio -a ! -f $restart_file${fhr}.nc -a ! -f $restart_file${fhr}.txt ]; then - echo "Nothing to process for FHR = $fhr, cycle, skip" - continue - fi - - #master=$ROTDIR/${CDUMP}.${PDY}/${cyc}/$COMPONENT/${CDUMP}.t${cyc}z.master.grb2f${fhr} - pgb0p25=$ROTDIR/${CDUMP}.${PDY}/${cyc}/$COMPONENT/${CDUMP}.t${cyc}z.pgrb2.0p25.f${fhr} - if [ ! -s $pgb0p25 ]; then - export post_times=$fhr - $HOMEgfs/jobs/JGLOBAL_NCEPPOST - status=$? - [[ $status -ne 0 ]] && exit $status - fi - -done - -############################################################### -# Exit out cleanly -exit 0 diff --git a/jobs/rocoto/postsnd.sh b/jobs/rocoto/postsnd.sh index e3a7e3f8d7..bc274361db 100755 --- a/jobs/rocoto/postsnd.sh +++ b/jobs/rocoto/postsnd.sh @@ -1,71 +1,22 @@ -#!/bin/ksh -x +#! /usr/bin/env bash -############################################################### -## Abstract: -## Inline postsnd driver script -## RUN_ENVIR : runtime environment (emc | nco) -## HOMEgfs : /full/path/to/workflow -## EXPDIR : /full/path/to/config/files -## CDATE : current analysis date (YYYYMMDDHH) -## CDUMP : cycle name (gdas / gfs) -## PDY : current date (YYYYMMDD) -## cyc : current cycle (HH) -############################################################### +source "${HOMEgfs}/ush/preamble.sh" ############################################################### -echo -echo "=============== BEGIN TO SOURCE FV3GFS WORKFLOW MODULES ===============" -. $HOMEgfs/ush/load_fv3gfs_modules.sh -status=$? -[[ $status -ne 0 ]] && exit $status +# Source FV3GFS workflow modules +. ${HOMEgfs}/ush/load_fv3gfs_modules.sh +status=$? +[[ ${status} -ne 0 ]] && exit ${status} -############################################################### -echo -echo "=============== BEGIN TO SOURCE RELEVANT CONFIGS ===============" -configs="base postsnd" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done - +export job="postsnd" +export jobid="${job}.$$" ############################################################### -echo -echo "=============== BEGIN TO SOURCE MACHINE RUNTIME ENVIRONMENT ===============" -. $BASE_ENV/${machine}.env postsnd +# Execute the JJOB +${HOMEgfs}/jobs/JGFS_ATMOS_POSTSND status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -export COMPONENT=${COMPONENT:-atmos} -export CDATEm1=$($NDATE -24 $CDATE) -export PDYm1=$(echo $CDATEm1 | cut -c1-8) - -export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" -export DATAROOT="$RUNDIR/$CDATE/$CDUMP/postsnd" -[[ -d $DATAROOT ]] && rm -rf $DATAROOT -mkdir -p $DATAROOT -################################################################################ -echo -echo "=============== BEGIN POSTSND ===============" -export job="jgfs_postsnd_${cyc}" -export jlogfile="$ROTDIR/logs/$CDATE/$job.log" -export DATA="${DATAROOT}/$job" -export SENDCOM="YES" -export SENDDBN="YES" -export HOMEbufrsnd=$HOMEgfs -export COMOUT="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" -export pcom="$COMOUT/wmo" -export COMAWP="$COMOUT/gempak" +exit ${status} -$POSTSNDSH - - -############################################################### -# Force Exit out cleanly -if [ ${KEEPDATA:-"NO"} = "NO" ] ; then rm -rf $DATAROOT ; fi -exit 0 diff --git a/jobs/rocoto/prep.sh b/jobs/rocoto/prep.sh index b33cd011c4..dfb541abb6 100755 --- a/jobs/rocoto/prep.sh +++ b/jobs/rocoto/prep.sh @@ -1,119 +1,134 @@ -#!/bin/ksh -x +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" ############################################################### # Source FV3GFS workflow modules -. $HOMEgfs/ush/load_fv3gfs_modules.sh +. ${HOMEgfs}/ush/load_fv3gfs_modules.sh status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} ############################################################### -# Source relevant configs -configs="base prep prepbufr" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done +export job="prep" +export jobid="${job}.$$" +source "${HOMEgfs}/ush/jjob_header.sh" -e "prep" -c "base prep" -############################################################### -# Source machine runtime environment -. $BASE_ENV/${machine}.env prep -status=$? -[[ $status -ne 0 ]] && exit $status +export CDUMP="${RUN/enkf}" ############################################################### # Set script and dependency variables -export COMPONENT=${COMPONENT:-atmos} +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +GDATE=$(${NDATE} -"${assim_freq}" "${PDY}${cyc}") +# shellcheck disable= +gPDY=${GDATE:0:8} +gcyc=${GDATE:8:2} +GDUMP="gdas" + export OPREFIX="${CDUMP}.t${cyc}z." -export COMOUT="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" -[[ ! -d $COMOUT ]] && mkdir -p $COMOUT + +YMD=${PDY} HH=${cyc} DUMP=${CDUMP} generate_com -rx COM_OBS COM_OBSDMP + +RUN=${GDUMP} DUMP=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + COM_OBS_PREV:COM_OBS_TMPL \ + COM_OBSDMP_PREV:COM_OBSDMP_TMPL + +export MAKE_PREPBUFR=${MAKE_PREPBUFR:-"YES"} +if [[ ! -d "${COM_OBS}" ]]; then mkdir -p "${COM_OBS}"; fi ############################################################### -# If ROTDIR_DUMP=YES, copy dump files to rotdir -if [ $ROTDIR_DUMP = "YES" ]; then - $HOMEgfs/ush/getdump.sh $CDATE $CDUMP $DMPDIR/${CDUMP}${DUMP_SUFFIX}.${PDY}/${cyc} $COMOUT +# If ROTDIR_DUMP=YES, copy dump files to rotdir +if [[ ${ROTDIR_DUMP} = "YES" ]]; then + "${HOMEgfs}/ush/getdump.sh" "${PDY}${cyc}" "${CDUMP}" "${COM_OBSDMP}" "${COM_OBS}" status=$? - [[ $status -ne 0 ]] && exit $status - -# Ensure previous cycle gdas dumps are available (used by cycle & downstream) - GDATE=$($NDATE -$assim_freq $CDATE) - gPDY=$(echo $GDATE | cut -c1-8) - gcyc=$(echo $GDATE | cut -c9-10) - GDUMP=gdas - gCOMOUT="$ROTDIR/$GDUMP.$gPDY/$gcyc/$COMPONENT" - if [ ! -s $gCOMOUT/$GDUMP.t${gcyc}z.updated.status.tm00.bufr_d ]; then - $HOMEgfs/ush/getdump.sh $GDATE $GDUMP $DMPDIR/${GDUMP}${DUMP_SUFFIX}.${gPDY}/${gcyc} $gCOMOUT + [[ ${status} -ne 0 ]] && exit ${status} + + # Ensure previous cycle gdas dumps are available (used by cycle & downstream) + if [[ ! -s "${COM_OBS_PREV}/${GDUMP}.t${gcyc}z.updated.status.tm00.bufr_d" ]]; then + "${HOMEgfs}/ush/getdump.sh" "${GDATE}" "${GDUMP}" "${COM_OBSDMP_PREV}" "${COM_OBS_PREV}" status=$? - [[ $status -ne 0 ]] && exit $status + [[ ${status} -ne 0 ]] && exit ${status} fi - + # exception handling to ensure no dead link + [[ $(find ${COM_OBS} -xtype l | wc -l) -ge 1 ]] && exit 9 + [[ $(find ${COM_OBS_PREV} -xtype l | wc -l) -ge 1 ]] && exit 9 fi + ############################################################### ############################################################### -# For running real-time parallels on WCOSS_C, execute tropcy_qc and +# For running real-time parallels, execute tropcy_qc and # copy files from operational syndata directory to a local directory. # Otherwise, copy existing tcvital data from globaldump. -if [ $PROCESS_TROPCY = "YES" ]; then +if [[ ${PROCESS_TROPCY} = "YES" ]]; then export COMINsyn=${COMINsyn:-$(compath.py gfs/prod/syndat)} - if [ $RUN_ENVIR != "nco" ]; then - export ARCHSYND=${ROTDIR}/syndat - if [ ! -d ${ARCHSYND} ]; then mkdir -p $ARCHSYND; fi - if [ ! -s $ARCHSYND/syndat_akavit ]; then - for file in syndat_akavit syndat_dateck syndat_stmcat.scr syndat_stmcat syndat_sthisto syndat_sthista ; do - cp $COMINsyn/$file $ARCHSYND/. - done - fi + export ARCHSYND=${ROTDIR}/syndat + if [[ ! -d ${ARCHSYND} ]]; then mkdir -p ${ARCHSYND}; fi + if [[ ! -s ${ARCHSYND}/syndat_akavit ]]; then + for file in syndat_akavit syndat_dateck syndat_stmcat.scr syndat_stmcat syndat_sthisto syndat_sthista ; do + cp ${COMINsyn}/${file} ${ARCHSYND}/. + done fi - [[ $ROTDIR_DUMP = "YES" ]] && rm $COMOUT${CDUMP}.t${cyc}z.syndata.tcvitals.tm00 + if [[ ${ROTDIR_DUMP} = "YES" ]]; then rm "${COM_OBS}/${CDUMP}.t${cyc}z.syndata.tcvitals.tm00"; fi - $HOMEgfs/jobs/JGLOBAL_TROPCY_QC_RELOC + "${HOMEgfs}/jobs/JGLOBAL_ATMOS_TROPCY_QC_RELOC" status=$? - [[ $status -ne 0 ]] && exit $status + [[ ${status} -ne 0 ]] && exit ${status} else - [[ $ROTDIR_DUMP = "NO" ]] && cp $DMPDIR/${CDUMP}${DUMP_SUFFIX}.${PDY}/${cyc}/${CDUMP}.t${cyc}z.syndata.tcvitals.tm00 $COMOUT/ + if [[ ${ROTDIR_DUMP} = "NO" ]]; then cp "${COM_OBSDMP}/${CDUMP}.t${cyc}z.syndata.tcvitals.tm00" "${COM_OBS}/"; fi fi ############################################################### # Generate prepbufr files from dumps or copy from OPS -if [ $DO_MAKEPREPBUFR = "YES" ]; then - if [ $ROTDIR_DUMP = "YES" ]; then - rm $COMOUT/${OPREFIX}prepbufr - rm $COMOUT/${OPREFIX}prepbufr.acft_profiles - rm $COMOUT/${OPREFIX}nsstbufr +if [[ ${MAKE_PREPBUFR} = "YES" ]]; then + if [[ ${ROTDIR_DUMP} = "YES" ]]; then + rm -f "${COM_OBS}/${OPREFIX}prepbufr" + rm -f "${COM_OBS}/${OPREFIX}prepbufr.acft_profiles" + rm -f "${COM_OBS}/${OPREFIX}nsstbufr" fi export job="j${CDUMP}_prep_${cyc}" - export DATAROOT="$RUNDIR/$CDATE/$CDUMP/prepbufr" - #export COMIN=${COMIN:-$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT} - export COMIN=${COMIN:-$ROTDIR} - export COMINgdas=${COMINgdas:-$ROTDIR/gdas.$PDY/$cyc/$COMPONENT} - export COMINgfs=${COMINgfs:-$ROTDIR/gfs.$PDY/$cyc/$COMPONENT} - if [ $ROTDIR_DUMP = "NO" ]; then - COMIN_OBS=${COMIN_OBS:-$DMPDIR/${CDUMP}${DUMP_SUFFIX}.${PDY}/${cyc}} - export COMSP=${COMSP:-$COMIN_OBS/$CDUMP.t${cyc}z.} + export COMIN=${COM_OBS} + export COMOUT=${COM_OBS} + RUN="gdas" YMD=${PDY} HH=${cyc} generate_com -rx COMINgdas:COM_ATMOS_HISTORY_TMPL + RUN="gfs" YMD=${PDY} HH=${cyc} generate_com -rx COMINgfs:COM_ATMOS_HISTORY_TMPL + if [[ ${ROTDIR_DUMP} = "NO" ]]; then + export COMSP=${COMSP:-"${COM_OBSDMP}/${CDUMP}.t${cyc}z."} else - export COMSP=${COMSP:-$ROTDIR/${CDUMP}.${PDY}/${cyc}/$COMPONENT/$CDUMP.t${cyc}z.} + export COMSP=${COMSP:-"${COM_OBS}/${CDUMP}.t${cyc}z."} + fi + export COMSP=${COMSP:-${COMIN_OBS}/${CDUMP}.t${cyc}z.} + + # Disable creating NSSTBUFR if desired, copy from DMPDIR instead + if [[ ${MAKE_NSSTBUFR:-"NO"} = "NO" ]]; then + export MAKE_NSSTBUFR="NO" fi - $HOMEobsproc_network/jobs/JGLOBAL_PREP + "${HOMEobsproc}/jobs/JOBSPROC_GLOBAL_PREP" status=$? - [[ $status -ne 0 ]] && exit $status + [[ ${status} -ne 0 ]] && exit ${status} + + # If creating NSSTBUFR was disabled, copy from DMPDIR if appropriate. + if [[ ${MAKE_NSSTBUFR:-"NO"} = "NO" ]]; then + if [[ ${DONST} = "YES" ]]; then ${NCP} "${COM_OBSDMP}/${OPREFIX}nsstbufr" "${COM_OBS}/${OPREFIX}nsstbufr"; fi + fi else - if [ $ROTDIR_DUMP = "NO" ]; then - $NCP $DMPDIR/${CDUMP}${DUMP_SUFFIX}.${PDY}/${cyc}/${OPREFIX}prepbufr $COMOUT/${OPREFIX}prepbufr - $NCP $DMPDIR/${CDUMP}${DUMP_SUFFIX}.${PDY}/${cyc}/${OPREFIX}prepbufr.acft_profiles $COMOUT/${OPREFIX}prepbufr.acft_profiles - [[ $DONST = "YES" ]] && $NCP $DMPDIR/${CDUMP}${DUMP_SUFFIX}.${PDY}/${cyc}/${OPREFIX}nsstbufr $COMOUT/${OPREFIX}nsstbufr + if [[ ${ROTDIR_DUMP} = "NO" ]]; then + ${NCP} "${COM_OBSDMP}/${OPREFIX}prepbufr" "${COM_OBS}/${OPREFIX}prepbufr" + ${NCP} "${COM_OBSDMP}/${OPREFIX}prepbufr.acft_profiles" "${COM_OBS}/${OPREFIX}prepbufr.acft_profiles" + if [[ ${DONST} = "YES" ]]; then ${NCP} "${COM_OBSDMP}/${OPREFIX}nsstbufr" "${COM_OBS}/${OPREFIX}nsstbufr"; fi fi fi ################################################################################ # Exit out cleanly + + exit 0 diff --git a/jobs/rocoto/prepatmiodaobs.sh b/jobs/rocoto/prepatmiodaobs.sh new file mode 100755 index 0000000000..d424df9261 --- /dev/null +++ b/jobs/rocoto/prepatmiodaobs.sh @@ -0,0 +1,25 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source UFSDA workflow modules +. "${HOMEgfs}/ush/load_ufsda_modules.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="prepatmobs" +export jobid="${job}.$$" + +############################################################### +# setup python path for workflow and ioda utilities +wxflowPATH="${HOMEgfs}/ush/python:${HOMEgfs}/ush/python/wxflow/src" +PYIODALIB="${HOMEgfs}/sorc/gdas.cd/build/lib/python3.7" +PYTHONPATH="${PYIODALIB}:${wxflowPATH}:${PYTHONPATH}" +export PYTHONPATH + +############################################################### +# Execute the JJOB +"${HOMEgfs}/jobs/JGLOBAL_ATM_PREP_IODA_OBS" +status=$? +exit "${status}" diff --git a/jobs/rocoto/preplandobs.sh b/jobs/rocoto/preplandobs.sh new file mode 100755 index 0000000000..6304dd611b --- /dev/null +++ b/jobs/rocoto/preplandobs.sh @@ -0,0 +1,25 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source UFSDA workflow modules +. "${HOMEgfs}/ush/load_ufsda_modules.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="preplandobs" +export jobid="${job}.$$" + +############################################################### +# setup python path for workflow utilities and tasks +wxflowPATH="${HOMEgfs}/ush/python:${HOMEgfs}/ush/python/wxflow/src" +gdasappPATH="${HOMEgfs}/sorc/gdas.cd/iodaconv/src:${HOMEgfs}/sorc/gdas.cd/build/lib/python3.7" +PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${wxflowPATH}:${gdasappPATH}" +export PYTHONPATH + +############################################################### +# Execute the JJOB +"${HOMEgfs}/jobs/JGLOBAL_PREP_LAND_OBS" +status=$? +exit "${status}" diff --git a/jobs/rocoto/prepoceanobs.sh b/jobs/rocoto/prepoceanobs.sh new file mode 100755 index 0000000000..d7ae87851f --- /dev/null +++ b/jobs/rocoto/prepoceanobs.sh @@ -0,0 +1,19 @@ +#! /usr/bin/env bash + +export STRICT="NO" +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source UFSDA workflow modules +. "${HOMEgfs}/ush/load_ufsda_modules.sh" +status=$? +[[ ${status} -ne 0 ]] && exit "${status}" + +export job="prepoceanobs" +export jobid="${job}.$$" + +############################################################### +# Execute the JJOB +"${HOMEgfs}"/jobs/JGLOBAL_PREP_OCEAN_OBS +status=$? +exit "${status}" diff --git a/jobs/rocoto/sfcanl.sh b/jobs/rocoto/sfcanl.sh new file mode 100755 index 0000000000..44f93ee0c3 --- /dev/null +++ b/jobs/rocoto/sfcanl.sh @@ -0,0 +1,20 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +. ${HOMEgfs}/ush/load_fv3gfs_modules.sh +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + +export job="sfcanl" +export jobid="${job}.$$" + +############################################################### +# Execute the JJOB +${HOMEgfs}/jobs/JGLOBAL_ATMOS_SFCANL +status=$? + + +exit ${status} diff --git a/jobs/rocoto/stage_ic.sh b/jobs/rocoto/stage_ic.sh new file mode 100755 index 0000000000..5e7b3395d2 --- /dev/null +++ b/jobs/rocoto/stage_ic.sh @@ -0,0 +1,18 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +# Source FV3GFS workflow modules +. "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +[[ "${status}" -ne 0 ]] && exit "${status}" + +export job="stage_ic" +export jobid="${job}.$$" + +# Execute the JJOB +"${HOMEgfs}/jobs/JGLOBAL_STAGE_IC" +status=$? + + +exit "${status}" diff --git a/jobs/rocoto/tracker.sh b/jobs/rocoto/tracker.sh new file mode 100755 index 0000000000..3e2efd644e --- /dev/null +++ b/jobs/rocoto/tracker.sh @@ -0,0 +1,20 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="tracker" +export jobid="${job}.$$" + +############################################################### +# Execute the JJOB + +"${HOMEgfs}/jobs/JGFS_ATMOS_CYCLONE_TRACKER" +status=$? + +exit "${status}" diff --git a/jobs/rocoto/upp.sh b/jobs/rocoto/upp.sh new file mode 100755 index 0000000000..6ab243d58f --- /dev/null +++ b/jobs/rocoto/upp.sh @@ -0,0 +1,59 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +## Offline UPP driver script +## UPP_RUN: analysis, forecast, goes, wafs. See upp.yaml for valid options +## FHRLST : forecast hourlist to be post-process (e.g. f000, f000_f001_f002, ...) +############################################################### + +# Source FV3GFS workflow modules +#. "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +#status=$? +#if (( status != 0 )); then exit "${status}"; fi +# Temporarily load modules from UPP on WCOSS2 +source "${HOMEgfs}/ush/detect_machine.sh" +if [[ "${MACHINE_ID}" = "wcoss2" ]]; then + set +x + source "${HOMEgfs}/ush/module-setup.sh" + module use "${HOMEgfs}/sorc/ufs_model.fd/FV3/upp/modulefiles" + module load "${MACHINE_ID}" + module load prod_util + module load cray-pals + module load cfp + module load libjpeg + module load grib_util/1.2.3 + module load wgrib2/2.0.8 + export WGRIB2=wgrib2 + module load python/3.8.6 + module laod crtm/2.4.0 # TODO: This is only needed when UPP_RUN=goes. Is there a better way to handle this? + set_trace +else + . "${HOMEgfs}/ush/load_fv3gfs_modules.sh" + status=$? + if (( status != 0 )); then exit "${status}"; fi +fi + +############################################################### +# setup python path for workflow utilities and tasks +wxflowPATH="${HOMEgfs}/ush/python:${HOMEgfs}/ush/python/wxflow/src" +PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${wxflowPATH}" +export PYTHONPATH + +export job="upp" +export jobid="${job}.$$" + +############################################################### +# shellcheck disable=SC2153,SC2001 +IFS='_' read -ra fhrs <<< "${FHRLST//f}" # strip off the 'f's convert to array + +# Execute the JJOB +for fhr in "${fhrs[@]}"; do + export FORECAST_HOUR=$(( 10#${fhr} )) + "${HOMEgfs}/jobs/JGLOBAL_ATMOS_UPP" + status=$? + if (( status != 0 )); then exit "${status}"; fi +done + +exit 0 diff --git a/jobs/rocoto/verfozn.sh b/jobs/rocoto/verfozn.sh new file mode 100755 index 0000000000..70a772fca6 --- /dev/null +++ b/jobs/rocoto/verfozn.sh @@ -0,0 +1,22 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="verfozn" +export jobid="${job}.$$" + +############################################################### +# Execute the JJOB +echo +echo "=============== START TO RUN OZMON DATA EXTRACTION ===============" + +"${HOMEgfs}/jobs/JGDAS_ATMOS_VERFOZN" +status=$? + +exit "${status}" diff --git a/jobs/rocoto/verfrad.sh b/jobs/rocoto/verfrad.sh new file mode 100755 index 0000000000..a687d3cf26 --- /dev/null +++ b/jobs/rocoto/verfrad.sh @@ -0,0 +1,22 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="verfrad" +export jobid="${job}.$$" + +############################################################### +# Execute the JJOB +echo +echo "=============== START TO RUN RADMON DATA EXTRACTION ===============" + +"${HOMEgfs}/jobs/JGDAS_ATMOS_VERFRAD" +status=$? + +exit "${status}" diff --git a/jobs/rocoto/vminmon.sh b/jobs/rocoto/vminmon.sh new file mode 100755 index 0000000000..73f10167e5 --- /dev/null +++ b/jobs/rocoto/vminmon.sh @@ -0,0 +1,22 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Source FV3GFS workflow modules +source "${HOMEgfs}/ush/load_fv3gfs_modules.sh" +status=$? +(( status != 0 )) && exit "${status}" + +export job="vminmon" +export jobid="${job}.$$" + +############################################################### +# Execute the JJOB +echo +echo "=============== START TO RUN MINMON ===============" + +"${HOMEgfs}/jobs/JGLOBAL_ATMOS_VMINMON" +status=$? + +exit "${status}" diff --git a/jobs/rocoto/vrfy.sh b/jobs/rocoto/vrfy.sh deleted file mode 100755 index f3101fc95a..0000000000 --- a/jobs/rocoto/vrfy.sh +++ /dev/null @@ -1,197 +0,0 @@ -#!/bin/ksh -x - -############################################################### -## Abstract: -## Inline verification and diagnostics driver script -## RUN_ENVIR : runtime environment (emc | nco) -## HOMEgfs : /full/path/to/workflow -## EXPDIR : /full/path/to/config/files -## CDATE : current analysis date (YYYYMMDDHH) -## CDUMP : cycle name (gdas / gfs) -## PDY : current date (YYYYMMDD) -## cyc : current cycle (HH) -############################################################### - -############################################################### -echo -echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" -. $HOMEgfs/ush/load_fv3gfs_modules.sh -status=$? -[[ $status -ne 0 ]] && exit $status - - -############################################################### -echo -echo "=============== START TO SOURCE RELEVANT CONFIGS ===============" -configs="base vrfy" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done - - -############################################################### -echo -echo "=============== START TO SOURCE MACHINE RUNTIME ENVIRONMENT ===============" -. $BASE_ENV/${machine}.env vrfy -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -export COMPONENT=${COMPONENT:-atmos} -export CDATEm1=$($NDATE -24 $CDATE) -export PDYm1=$(echo $CDATEm1 | cut -c1-8) - -export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" -export DATAROOT="$RUNDIR/$CDATE/$CDUMP/vrfy" -[[ -d $DATAROOT ]] && rm -rf $DATAROOT -mkdir -p $DATAROOT - - -############################################################### -echo -echo "=============== START TO GENERATE QUARTER DEGREE GRIB1 FILES ===============" -if [ $MKPGB4PRCP = "YES" -a $CDUMP = "gfs" ]; then - nthreads_env=${OMP_NUM_THREADS:-1} # get threads set in env - export OMP_NUM_THREADS=1 - cd $COMIN - fhmax=${vhr_rain:-$FHMAX_GFS} - fhr=0 - while [ $fhr -le $fhmax ]; do - fhr2=$(printf %02i $fhr) - fhr3=$(printf %03i $fhr) - fname=${CDUMP}.t${cyc}z.sfluxgrbf$fhr3.grib2 - fileout=$ARCDIR/pgbq${fhr2}.${CDUMP}.${CDATE}.grib2 - $WGRIB2 $fname -match "(:PRATE:surface:)|(:TMP:2 m above ground:)" -grib $fileout - (( fhr = $fhr + 6 )) - done - cd $DATAROOT - export OMP_NUM_THREADS=$nthreads_env # revert to threads set in env -fi - - -############################################################### -echo -echo "=============== START TO RUN MOS ===============" -if [ $RUNMOS = "YES" -a $CDUMP = "gfs" ]; then - $RUNGFSMOSSH $PDY$cyc -fi - - -############################################################### -echo -echo "=============== START TO RUN FIT2OBS VERIFICATION ===============" -if [ $VRFYFITS = "YES" -a $CDUMP = $CDFNL -a $CDATE != $SDATE ]; then - - export CDUMPFCST=$VDUMP - export TMPDIR="$RUNDIR/$CDATE/$CDUMP" - [[ ! -d $TMPDIR ]] && mkdir -p $TMPDIR - - xdate=$($NDATE -${VBACKUP_FITS} $CDATE) - - - export RUN_ENVIR_SAVE=$RUN_ENVIR - export RUN_ENVIR=$OUTPUT_FILE - - $PREPQFITSH $PSLOT $xdate $ROTDIR $ARCDIR $TMPDIR - - export RUN_ENVIR=$RUN_ENVIR_SAVE - -fi - - -############################################################### -echo -echo "=============== START TO RUN VSDB STEP1, VERIFY PRCIP AND GRID2OBS ===============" -if [ $CDUMP = "gfs" ]; then - - if [ $VSDB_STEP1 = "YES" -o $VRFYPRCP = "YES" -o $VRFYG2OBS = "YES" ]; then - - xdate=$(echo $($NDATE -${BACKDATEVSDB} $CDATE) | cut -c1-8) - export ARCDIR1="$NOSCRUB/archive" - export rundir="$RUNDIR/$CDUMP/$CDATE/vrfy/vsdb_exp" - export COMROT="$ARCDIR1/dummy" - - $VSDBSH $xdate $xdate $vlength $cyc $PSLOT $CDATE $CDUMP $gfs_cyc $rain_bucket - fi -fi - -############################################################### -echo -echo "=============== START TO RUN RADMON DATA EXTRACTION ===============" -if [ $VRFYRAD = "YES" -a $CDUMP = $CDFNL -a $CDATE != $SDATE ]; then - - export EXP=$PSLOT - export COMOUT="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" - export jlogfile="$ROTDIR/logs/$CDATE/${CDUMP}radmon.log" - export TANKverf_rad="$TANKverf/stats/$PSLOT/$CDUMP.$PDY" - export TANKverf_radM1="$TANKverf/stats/$PSLOT/$CDUMP.$PDYm1" - export MY_MACHINE=$machine - - $VRFYRADSH - -fi - - -############################################################### -echo -echo "=============== START TO RUN OZMON DATA EXTRACTION ===============" -if [ $VRFYOZN = "YES" -a $CDUMP = $CDFNL -a $CDATE != $SDATE ]; then - - export EXP=$PSLOT - export COMOUT="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" - export jlogfile="$ROTDIR/logs/$CDATE/${CDUMP}oznmon.log" - export TANKverf_ozn="$TANKverf_ozn/stats/$PSLOT/$CDUMP.$PDY" - export TANKverf_oznM1="$TANKverf_ozn/stats/$PSLOT/$CDUMP.$PDYm1" - export MY_MACHINE=$machine - - $VRFYOZNSH - -fi - - -############################################################### -echo -echo "=============== START TO RUN MINMON ===============" -if [ $VRFYMINMON = "YES" -a $CDATE != $SDATE ]; then - - export COMOUT="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" - export jlogfile="$ROTDIR/logs/$CDATE/${CDUMP}minmon.log" - export M_TANKverfM0="$M_TANKverf/stats/$PSLOT/$CDUMP.$PDY" - export M_TANKverfM1="$M_TANKverf/stats/$PSLOT/$CDUMP.$PDYm1" - export MY_MACHINE=$machine - - $VRFYMINSH - -fi - - -################################################################################ -echo -echo "=============== START TO RUN CYCLONE TRACK VERIFICATION ===============" -if [ $VRFYTRAK = "YES" ]; then - $TRACKERSH -fi - - -################################################################################ -echo -echo "=============== START TO RUN CYCLONE GENESIS VERIFICATION ===============" -if [ $VRFYGENESIS = "YES" -a $CDUMP = "gfs" ]; then - $GENESISSH -fi - - -################################################################################ -echo -echo "=============== START TO RUN CYCLONE GENESIS VERIFICATION (FSU) ===============" -if [ $VRFYFSU = "YES" -a $CDUMP = "gfs" ]; then - $GENESISFSU -fi - - -############################################################### -# Force Exit out cleanly -if [ ${KEEPDATA:-"NO"} = "NO" ] ; then rm -rf $DATAROOT ; fi -exit 0 diff --git a/jobs/rocoto/wafs.sh b/jobs/rocoto/wafs.sh deleted file mode 100755 index efb8983ed9..0000000000 --- a/jobs/rocoto/wafs.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/ksh -x - -############################################################### -echo -echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" -. $HOMEgfs/ush/load_fv3gfs_modules.sh -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -echo "=============== BEGIN TO SOURCE RELEVANT CONFIGS ===============" -configs="base wafs" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done - -############################################################### - -export pid=${pid:-$$} -export jobid=${job}.${pid} -export DATAROOT="$RUNDIR/$CDATE/$CDUMP/wafs.$jobid" -[[ -d $DATAROOT ]] && rm -rf $DATAROOT -mkdir -p $DATAROOT - -export DATA="${DATAROOT}/$job" - -############################################################### -echo -echo "=============== START TO RUN WAFS ===============" - -# Execute the JJOB -$HOMEgfs/jobs/JGFS_WAFS -status=$? -exit $status - -############################################################### -# Force Exit out cleanly -if [ ${KEEPDATA:-"NO"} = "NO" ] ; then rm -rf $DATAROOT ; fi -exit 0 diff --git a/jobs/rocoto/wafsblending.sh b/jobs/rocoto/wafsblending.sh deleted file mode 100755 index 4283e13742..0000000000 --- a/jobs/rocoto/wafsblending.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/ksh -x - -############################################################### -echo -echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" -. $HOMEgfs/ush/load_fv3gfs_modules.sh -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -echo "=============== BEGIN TO SOURCE RELEVANT CONFIGS ===============" -configs="base wafsblending" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done - -############################################################### - -export DATAROOT="$RUNDIR/$CDATE/$CDUMP/wafsblending" -[[ -d $DATAROOT ]] && rm -rf $DATAROOT -mkdir -p $DATAROOT - -export pid=${pid:-$$} -export jobid=${job}.${pid} -export DATA="${DATAROOT}/$job" - -############################################################### -echo -echo "=============== START TO RUN WAFSBLENDING ===============" -# Execute the JJOB -$HOMEgfs/jobs/JGFS_WAFS_BLENDING -status=$? -exit $status - -############################################################### -# Force Exit out cleanly -if [ ${KEEPDATA:-"NO"} = "NO" ] ; then rm -rf $DATAROOT ; fi -exit 0 diff --git a/jobs/rocoto/wafsblending0p25.sh b/jobs/rocoto/wafsblending0p25.sh deleted file mode 100755 index 8aa97027a6..0000000000 --- a/jobs/rocoto/wafsblending0p25.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/ksh -x - -############################################################### -echo -echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" -. $HOMEgfs/ush/load_fv3gfs_modules.sh -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -echo "=============== BEGIN TO SOURCE RELEVANT CONFIGS ===============" -configs="base wafsblending0p25" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done - -############################################################### - -export DATAROOT="$RUNDIR/$CDATE/$CDUMP/wafsblending0p25" -[[ -d $DATAROOT ]] && rm -rf $DATAROOT -mkdir -p $DATAROOT - -export pid=${pid:-$$} -export jobid=${job}.${pid} -export DATA="${DATAROOT}/$job" - -############################################################### -echo -echo "=============== START TO RUN WAFSBLENDING0P25 ===============" -# Execute the JJOB -$HOMEgfs/jobs/JGFS_WAFS_BLENDING_0P25 -status=$? -exit $status - -############################################################### -# Force Exit out cleanly -if [ ${KEEPDATA:-"NO"} = "NO" ] ; then rm -rf $DATAROOT ; fi -exit 0 diff --git a/jobs/rocoto/wafsgcip.sh b/jobs/rocoto/wafsgcip.sh deleted file mode 100755 index 20ef381db8..0000000000 --- a/jobs/rocoto/wafsgcip.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/ksh -x - -############################################################### -echo -echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" -. $HOMEgfs/ush/load_fv3gfs_modules.sh -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -echo "=============== BEGIN TO SOURCE RELEVANT CONFIGS ===============" -configs="base wafsgcip" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done - -############################################################### - -export DATAROOT="$RUNDIR/$CDATE/$CDUMP/wafsgcip" -[[ -d $DATAROOT ]] && rm -rf $DATAROOT -mkdir -p $DATAROOT - -export pid=${pid:-$$} -export jobid=${job}.${pid} -export DATA="${DATAROOT}/$job" - -############################################################### -echo -echo "=============== START TO RUN WAFSGCIP ===============" -# Execute the JJOB -$HOMEgfs/jobs/JGFS_WAFS_GCIP -status=$? -exit $status - -############################################################### -# Force Exit out cleanly -if [ ${KEEPDATA:-"NO"} = "NO" ] ; then rm -rf $DATAROOT ; fi -exit 0 diff --git a/jobs/rocoto/wafsgrib2.sh b/jobs/rocoto/wafsgrib2.sh deleted file mode 100755 index 5ac8786b15..0000000000 --- a/jobs/rocoto/wafsgrib2.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/ksh -x - -############################################################### -echo -echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" -. $HOMEgfs/ush/load_fv3gfs_modules.sh -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -echo "=============== BEGIN TO SOURCE RELEVANT CONFIGS ===============" -configs="base wafsgrib2" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done - -############################################################### - -export DATAROOT="$RUNDIR/$CDATE/$CDUMP/wafsgrib2" -[[ -d $DATAROOT ]] && rm -rf $DATAROOT -mkdir -p $DATAROOT - -export pid=${pid:-$$} -export jobid=${job}.${pid} -export DATA="${DATAROOT}/$job" - -############################################################### -echo -echo "=============== START TO RUN WAFSGRIB2 ===============" -# Execute the JJOB -$HOMEgfs/jobs/JGFS_WAFS_GRIB2 -status=$? -exit $status - -############################################################### -# Force Exit out cleanly -if [ ${KEEPDATA:-"NO"} = "NO" ] ; then rm -rf $DATAROOT ; fi -exit 0 diff --git a/jobs/rocoto/wafsgrib20p25.sh b/jobs/rocoto/wafsgrib20p25.sh deleted file mode 100755 index 5ba6cebdad..0000000000 --- a/jobs/rocoto/wafsgrib20p25.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/ksh -x - -############################################################### -echo -echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" -. $HOMEgfs/ush/load_fv3gfs_modules.sh -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -echo "=============== BEGIN TO SOURCE RELEVANT CONFIGS ===============" -configs="base wafsgrib20p25" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done - -############################################################### - -export DATAROOT="$RUNDIR/$CDATE/$CDUMP/wafsgrib20p25" -[[ -d $DATAROOT ]] && rm -rf $DATAROOT -mkdir -p $DATAROOT - -export pid=${pid:-$$} -export jobid=${job}.${pid} -export DATA="${DATAROOT}/$job" - -############################################################### -echo -echo "=============== START TO RUN WAFSGRIB20p25 ===============" -# Execute the JJOB -$HOMEgfs/jobs/JGFS_WAFS_GRIB2_0P25 -status=$? -exit $status - -############################################################### -# Force Exit out cleanly -if [ ${KEEPDATA:-"NO"} = "NO" ] ; then rm -rf $DATAROOT ; fi -exit 0 diff --git a/jobs/rocoto/waveawipsbulls.sh b/jobs/rocoto/waveawipsbulls.sh index f8af3a02ed..4b6d6e1e82 100755 --- a/jobs/rocoto/waveawipsbulls.sh +++ b/jobs/rocoto/waveawipsbulls.sh @@ -1,42 +1,20 @@ -#!/bin/ksh -x +#! /usr/bin/env bash -############################################################### -echo -echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" -. $HOMEgfs/ush/load_fv3gfs_modules.sh -status=$? -[[ $status -ne 0 ]] && exit $status - -# Load job specific modulefile -module use -a $HOMEgfs/modulefiles -module load modulefile_gfswave_prdgen.wcoss_dell_p3 -status=$? -[[ $status -ne 0 ]] && exit $status +source "$HOMEgfs/ush/preamble.sh" ############################################################### -echo -echo "=============== BEGIN TO SOURCE RELEVANT CONFIGS ===============" -configs="base waveawipsbulls" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done - -############################################################### -echo -echo "=============== BEGIN TO SOURCE MACHINE RUNTIME ENVIRONMENT ===============" -. $BASE_ENV/${machine}.env waveawipsbulls +# Source FV3GFS workflow modules +source ${HOMEgfs}/ush/load_fv3gfs_modules.sh status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} -export DBNROOT=/dev/null +export job="waveawipsbulls" +export jobid="${job}.$$" ############################################################### -echo -echo "=============== START TO RUN WAVE PRDGEN BULLS ===============" # Execute the JJOB $HOMEgfs/jobs/JGLOBAL_WAVE_PRDGEN_BULLS status=$? -exit $status + +exit $status diff --git a/jobs/rocoto/waveawipsgridded.sh b/jobs/rocoto/waveawipsgridded.sh index 369c9cf238..c10f2f39fd 100755 --- a/jobs/rocoto/waveawipsgridded.sh +++ b/jobs/rocoto/waveawipsgridded.sh @@ -1,41 +1,20 @@ -#!/bin/ksh -x +#! /usr/bin/env bash -############################################################### -echo -echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" -. $HOMEgfs/ush/load_fv3gfs_modules.sh -status=$? -[[ $status -ne 0 ]] && exit $status - -# Load job specific modulefile -module use -a $HOMEgfs/modulefiles -module load modulefile_gfswave_prdgen.wcoss_dell_p3 -status=$? -[[ $status -ne 0 ]] && exit $status +source "$HOMEgfs/ush/preamble.sh" ############################################################### -echo -echo "=============== BEGIN TO SOURCE RELEVANT CONFIGS ===============" -configs="base waveawipsgridded" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done - -############################################################### -echo -echo "=============== BEGIN TO SOURCE MACHINE RUNTIME ENVIRONMENT ===============" -. $BASE_ENV/${machine}.env waveawipsgridded +# Source FV3GFS workflow modules +source ${HOMEgfs}/ush/load_fv3gfs_modules.sh status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} -export DBNROOT=/dev/null +export job="waveawipsgridded" +export jobid="${job}.$$" ############################################################### -echo -echo "=============== START TO RUN WAVE PRDGEN GRIDDED ===============" # Execute the JJOB -$HOMEgfs/jobs/JGLOBAL_WAVE_PRDGEN_GRIDDED +${HOMEgfs}/jobs/JGLOBAL_WAVE_PRDGEN_GRIDDED status=$? -exit $status + + +exit ${status} diff --git a/jobs/rocoto/wavegempak.sh b/jobs/rocoto/wavegempak.sh index cc14553a11..58fbcdcc5b 100755 --- a/jobs/rocoto/wavegempak.sh +++ b/jobs/rocoto/wavegempak.sh @@ -1,39 +1,18 @@ -#!/bin/ksh -x +#! /usr/bin/env bash -############################################################### -echo -echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" -. $HOMEgfs/ush/load_fv3gfs_modules.sh -status=$? -[[ $status -ne 0 ]] && exit $status - -# Load job specific modulefile -module use -a $HOMEgfs/modulefiles -module load modulefile_gfswave_gempak.wcoss_dell_p3 -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -echo -echo "=============== BEGIN TO SOURCE RELEVANT CONFIGS ===============" -configs="base wavegempak" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done +source "$HOMEgfs/ush/preamble.sh" ############################################################### -echo -echo "=============== BEGIN TO SOURCE MACHINE RUNTIME ENVIRONMENT ===============" -. $BASE_ENV/${machine}.env wavegempak +source $HOMEgfs/ush/load_fv3gfs_modules.sh status=$? [[ $status -ne 0 ]] && exit $status +export job="post" +export jobid="${job}.$$" + ############################################################### -echo -echo "=============== START TO RUN WAVE GEMPAK ===============" # Execute the JJOB $HOMEgfs/jobs/JGLOBAL_WAVE_GEMPAK status=$? + exit $status diff --git a/jobs/rocoto/waveinit.sh b/jobs/rocoto/waveinit.sh index 5f837bcee0..b38367d09a 100755 --- a/jobs/rocoto/waveinit.sh +++ b/jobs/rocoto/waveinit.sh @@ -1,21 +1,24 @@ -#!/bin/ksh -x +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" ############################################################### echo echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" -. $HOMEgfs/ush/load_fv3gfs_modules.sh +#. ${HOMEgfs}/ush/load_fv3gfs_modules.sh +. ${HOMEgfs}/ush/load_ufswm_modules.sh status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} + +export job="waveinit" +export jobid="${job}.$$" ############################################################### echo echo "=============== START TO RUN WAVE INIT ===============" # Execute the JJOB -$HOMEgfs/jobs/JGLOBAL_WAVE_INIT +${HOMEgfs}/jobs/JGLOBAL_WAVE_INIT status=$? -exit $status +[[ ${status} -ne 0 ]] && exit ${status} -############################################################### -# Force Exit out cleanly -if [ ${KEEPDATA:-"NO"} = "NO" ] ; then rm -rf $DATAROOT ; fi exit 0 diff --git a/jobs/rocoto/wavepostbndpnt.sh b/jobs/rocoto/wavepostbndpnt.sh new file mode 100755 index 0000000000..1a4f940150 --- /dev/null +++ b/jobs/rocoto/wavepostbndpnt.sh @@ -0,0 +1,24 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +echo +echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" +#. ${HOMEgfs}/ush/load_fv3gfs_modules.sh +. ${HOMEgfs}/ush/load_ufswm_modules.sh +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + +export job="wavepostbndpnt" +export jobid="${job}.$$" + +############################################################### +echo +echo "=============== START TO RUN WAVE_POST_BNDPNT ===============" +# Execute the JJOB +${HOMEgfs}/jobs/JGLOBAL_WAVE_POST_BNDPNT +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + +exit 0 diff --git a/jobs/rocoto/wavepostbndpntbll.sh b/jobs/rocoto/wavepostbndpntbll.sh new file mode 100755 index 0000000000..2d128facb7 --- /dev/null +++ b/jobs/rocoto/wavepostbndpntbll.sh @@ -0,0 +1,24 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +echo +echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" +#. ${HOMEgfs}/ush/load_fv3gfs_modules.sh +. ${HOMEgfs}/ush/load_ufswm_modules.sh +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + +export job="wavepostbndpntbll" +export jobid="${job}.$$" + +############################################################### +echo +echo "=============== START TO RUN WAVE_POST_BNDPNT ===============" +# Execute the JJOB +${HOMEgfs}/jobs/JGLOBAL_WAVE_POST_BNDPNTBLL +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + +exit 0 diff --git a/jobs/rocoto/wavepostpnt.sh b/jobs/rocoto/wavepostpnt.sh new file mode 100755 index 0000000000..60017394f5 --- /dev/null +++ b/jobs/rocoto/wavepostpnt.sh @@ -0,0 +1,24 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +echo +echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" +#. ${HOMEgfs}/ush/load_fv3gfs_modules.sh +. ${HOMEgfs}/ush/load_ufswm_modules.sh +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + +export job="wavepostpnt" +export jobid="${job}.$$" + +############################################################### +echo +echo "=============== START TO RUN WAVE_POST_PNT ===============" +# Execute the JJOB +${HOMEgfs}/jobs/JGLOBAL_WAVE_POST_PNT +status=$? +[[ ${status} -ne 0 ]] && exit ${status} + +exit 0 diff --git a/jobs/rocoto/wavepostsbs.sh b/jobs/rocoto/wavepostsbs.sh index 3139ba477f..f4789210d8 100755 --- a/jobs/rocoto/wavepostsbs.sh +++ b/jobs/rocoto/wavepostsbs.sh @@ -1,21 +1,21 @@ -#!/bin/ksh -x +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" ############################################################### -echo -echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" -. $HOMEgfs/ush/load_fv3gfs_modules.sh +# Source FV3GFS workflow modules +#. ${HOMEgfs}/ush/load_fv3gfs_modules.sh +. ${HOMEgfs}/ush/load_ufswm_modules.sh status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} + +export job="wavepostsbs" +export jobid="${job}.$$" ############################################################### -echo -echo "=============== START TO RUN WAVE POST_SBS ===============" # Execute the JJOB -$HOMEgfs/jobs/JGLOBAL_WAVE_POST_SBS +${HOMEgfs}/jobs/JGLOBAL_WAVE_POST_SBS status=$? -exit $status +[[ ${status} -ne 0 ]] && exit ${status} -############################################################### -# Force Exit out cleanly -if [ ${KEEPDATA:-"NO"} = "NO" ] ; then rm -rf $DATAROOT ; fi exit 0 diff --git a/jobs/rocoto/waveprep.sh b/jobs/rocoto/waveprep.sh index f93e02fed0..fa934167b7 100755 --- a/jobs/rocoto/waveprep.sh +++ b/jobs/rocoto/waveprep.sh @@ -1,21 +1,24 @@ -#!/bin/ksh -x +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" ############################################################### echo echo "=============== START TO SOURCE FV3GFS WORKFLOW MODULES ===============" -. $HOMEgfs/ush/load_fv3gfs_modules.sh +#. ${HOMEgfs}/ush/load_fv3gfs_modules.sh +. ${HOMEgfs}/ush/load_ufswm_modules.sh status=$? -[[ $status -ne 0 ]] && exit $status +[[ ${status} -ne 0 ]] && exit ${status} + +export job="waveprep" +export jobid="${job}.$$" ############################################################### echo echo "=============== START TO RUN WAVE PREP ===============" # Execute the JJOB -$HOMEgfs/jobs/JGLOBAL_WAVE_PREP +${HOMEgfs}/jobs/JGLOBAL_WAVE_PREP status=$? -exit $status +[[ ${status} -ne 0 ]] && exit ${status} -############################################################### -# Force Exit out cleanly -if [ ${KEEPDATA:-"NO"} = "NO" ] ; then rm -rf $DATAROOT ; fi exit 0 diff --git a/modulefiles/OznMonBuild.wcoss_dell_p3 b/modulefiles/OznMonBuild.wcoss_dell_p3 deleted file mode 100644 index efb31a7da3..0000000000 --- a/modulefiles/OznMonBuild.wcoss_dell_p3 +++ /dev/null @@ -1,15 +0,0 @@ -#%Module################################################ -# Modfule file for oznmon -######################################################## -export ver=2.0.2 -export FCOMP=ifort - -export CF=$FCOMP -export FC=$FCOMP -export FFLAGS="-O3 -fp-model strict -convert big_endian -assume byterecl" - -export D_FFLAGS="-O3 -fp-model strict -convert big_endian -assume byterecl -debug" - -module load ips/18.0.1.163 -module load w3nco/2.0.6 - diff --git a/modulefiles/RadMonBuild.wcoss_dell_p3 b/modulefiles/RadMonBuild.wcoss_dell_p3 deleted file mode 100644 index 9cece6e116..0000000000 --- a/modulefiles/RadMonBuild.wcoss_dell_p3 +++ /dev/null @@ -1,15 +0,0 @@ -#%Module################################################ -# Modfule file for radmon -######################################################## -export ver=2.0.2 -export FCOMP=ifort - -export CF=$FCOMP -export FC=$FCOMP -export FFLAGS="-O3 -fp-model strict -D_REAL8_ -traceback -convert big_endian -assume byterecl" - -export CHECK_LIBS="/gpfs/hps/nco/ops/nwprod/spa_util/check_libs.bash" -export D_FFLAGS="-O3 -fp-model strict -D_REAL8_ -traceback -convert big_endian -assume byterecl -debug" - -module load ips/18.0.1.163 -module load w3nco/2.0.6 diff --git a/modulefiles/fv3gfs/enkf_chgres_recenter.hera b/modulefiles/fv3gfs/enkf_chgres_recenter.hera deleted file mode 100644 index ed37493828..0000000000 --- a/modulefiles/fv3gfs/enkf_chgres_recenter.hera +++ /dev/null @@ -1,12 +0,0 @@ -#%Module##################################################### -## enkf_chgres_recenter component - hera -############################################################# - -module use -a /scratch2/NCEPDEV/nwprod/NCEPLIBS/modulefiles -module load nemsio/2.2.3 -module load bacio/2.0.2 -module load w3nco/2.0.6 -module load ip/3.0.1 -module load sp/2.0.2 - -export FC=ifort diff --git a/modulefiles/fv3gfs/enkf_chgres_recenter.wcoss b/modulefiles/fv3gfs/enkf_chgres_recenter.wcoss deleted file mode 100644 index c341291800..0000000000 --- a/modulefiles/fv3gfs/enkf_chgres_recenter.wcoss +++ /dev/null @@ -1,13 +0,0 @@ -#%Module##################################################### -## enkf_chgres_recenter component - wcoss -############################################################# - -module unload ics -module load ics/16.0.3 -module load nemsio/v2.2.3 -module load bacio/v2.0.2 -module load w3nco/v2.0.6 -module load ip/v3.0.0 -module load sp/v2.0.2 - -export FC=ifort diff --git a/modulefiles/fv3gfs/enkf_chgres_recenter.wcoss_cray b/modulefiles/fv3gfs/enkf_chgres_recenter.wcoss_cray deleted file mode 100644 index 18ad66ada8..0000000000 --- a/modulefiles/fv3gfs/enkf_chgres_recenter.wcoss_cray +++ /dev/null @@ -1,19 +0,0 @@ -#%Module##################################################### -## enkf_chgres_recenter component - wcoss_cray -############################################################# - -module load ncep/1.0 -module load PrgEnv-intel/5.2.56 -module rm intel -module load intel/16.3.210 -module load cray-mpich/7.2.0 -module load craype-haswell -module load cray-netcdf - -module load nemsio-intel/2.2.3 -module load bacio-intel/2.0.2 -module load w3nco-intel/2.0.6 -module load ip-intel/3.0.0 -module load sp-intel/2.0.2 - -export FC=ftn diff --git a/modulefiles/fv3gfs/enkf_chgres_recenter.wcoss_cray_userlib b/modulefiles/fv3gfs/enkf_chgres_recenter.wcoss_cray_userlib deleted file mode 100644 index 9a7bd7cd60..0000000000 --- a/modulefiles/fv3gfs/enkf_chgres_recenter.wcoss_cray_userlib +++ /dev/null @@ -1,21 +0,0 @@ -#%Module##################################################### -## enkf_chgres_recenter component - wcoss_cray -############################################################# - -module load ncep/1.0 -module load PrgEnv-intel/5.2.56 -module rm intel -module load intel/16.3.210 -module load cray-mpich/7.2.0 -module load craype-haswell -module load cray-netcdf - -module unuse /gpfs/hps/nco/ops/nwprod/lib/modulefiles -module use -a $MOD_PATH -module load nemsio-intel/2.2.3 -module load bacio-intel/2.0.2 -module load w3nco-intel/2.0.6 -module load ip-intel/3.0.0 -module load sp-intel/2.0.2 - -export FC=ftn diff --git a/modulefiles/fv3gfs/enkf_chgres_recenter.wcoss_dell_p3 b/modulefiles/fv3gfs/enkf_chgres_recenter.wcoss_dell_p3 deleted file mode 100644 index 77c76bbb82..0000000000 --- a/modulefiles/fv3gfs/enkf_chgres_recenter.wcoss_dell_p3 +++ /dev/null @@ -1,19 +0,0 @@ -#%Module##################################################### -## enkf_chgres_recenter component - wcoss_dell_p3 -############################################################# - -module load ips/18.0.1.163 -module load impi/18.0.1 - -module load nemsio/2.2.3 -module load bacio/2.0.2 -module load w3nco/2.0.6 -module load ip/3.0.1 -module load sp/2.0.2 - -module use /usrx/local/nceplibs/dev/NCEPLIBS/modulefiles -module load hdf5_parallel/1.10.6 -module load netcdf_parallel/4.7.4 - - -export FC=ifort diff --git a/modulefiles/fv3gfs/enkf_chgres_recenter_nc.hera b/modulefiles/fv3gfs/enkf_chgres_recenter_nc.hera deleted file mode 100644 index 9acce54639..0000000000 --- a/modulefiles/fv3gfs/enkf_chgres_recenter_nc.hera +++ /dev/null @@ -1,14 +0,0 @@ -#%Module##################################################### -## enkf_chgres_recenter component - hera -############################################################# - -module use -a /scratch2/NCEPDEV/nwprod/NCEPLIBS/modulefiles -module load bacio/2.0.2 -module load w3nco/2.0.6 -module load ip/3.0.1 -module load sp/2.0.2 -module load hdf5_parallel/1.10.6 -module load netcdf_parallel/4.7.4 - - -export FC=ifort diff --git a/modulefiles/fv3gfs/enkf_chgres_recenter_nc.wcoss_cray b/modulefiles/fv3gfs/enkf_chgres_recenter_nc.wcoss_cray deleted file mode 100644 index d619dd8644..0000000000 --- a/modulefiles/fv3gfs/enkf_chgres_recenter_nc.wcoss_cray +++ /dev/null @@ -1,25 +0,0 @@ -#%Module##################################################### -## enkf_chgres_recenter component - wcoss_cray -############################################################# - -module load ncep/1.0 -module load PrgEnv-intel/5.2.56 -module unload intel/15.0.3.187 -module load intel/18.1.163 -module load craype-haswell -module load cray-mpich/7.2.0 - -# Loading netcdf modules -module use /usrx/local/dev/modulefiles -module load NetCDF-intel-sandybridge/4.7.4 -module load HDF5-parallel-intel-sandybridge/1.10.6 - -module use /gpfs/hps/nco/ops/nwprod/lib/modulefiles -module load ip-intel/3.0.0 -module load sp-intel/2.0.2 -module load w3nco-intel/2.0.6 - -module use /usrx/local/nceplibs/modulefiles -module load bacio-intel/2.0.2 - -export FC=ftn diff --git a/modulefiles/fv3gfs/enkf_chgres_recenter_nc.wcoss_dell_p3 b/modulefiles/fv3gfs/enkf_chgres_recenter_nc.wcoss_dell_p3 deleted file mode 100644 index 65970aa74e..0000000000 --- a/modulefiles/fv3gfs/enkf_chgres_recenter_nc.wcoss_dell_p3 +++ /dev/null @@ -1,19 +0,0 @@ -#%Module##################################################### -## enkf_chgres_recenter component - wcoss_dell_p3 -############################################################# - -module load ips/18.0.1.163 -module load impi/18.0.1 - -#module load NetCDF/4.5.0 -module load bacio/2.0.2 -module load w3nco/2.0.6 -module load ip/3.0.1 -module load sp/2.0.2 - -module use /usrx/local/nceplibs/dev/NCEPLIBS/modulefiles -module load hdf5_parallel/1.10.6 -module load netcdf_parallel/4.7.4 - - -export FC=ifort diff --git a/modulefiles/fv3gfs/gaussian_sfcanl.hera b/modulefiles/fv3gfs/gaussian_sfcanl.hera deleted file mode 100644 index faa9921f48..0000000000 --- a/modulefiles/fv3gfs/gaussian_sfcanl.hera +++ /dev/null @@ -1,17 +0,0 @@ -#%Module##################################################### -## gaussian_sfcanl build module for Hera -############################################################# - -module use -a /scratch2/NCEPDEV/nwprod/NCEPLIBS/modulefiles -module load w3nco/2.0.6 -module load bacio/2.0.2 -module load nemsio/2.2.3 -module load sp/2.0.2 -module load hdf5_parallel/1.10.6 -module load netcdf_parallel/4.7.4 - - -export NETCDF_INCLUDE="-I${NETCDF}/include" -export NETCDF_LDFLAGS_F="-L${NETCDF}/lib -lnetcdf -lnetcdff -L${HDF5}/lib -lhdf5 -lhdf5_fortran" - -#export FCOMP=$FCOMP diff --git a/modulefiles/fv3gfs/gaussian_sfcanl.wcoss b/modulefiles/fv3gfs/gaussian_sfcanl.wcoss deleted file mode 100644 index 8e89eff6f4..0000000000 --- a/modulefiles/fv3gfs/gaussian_sfcanl.wcoss +++ /dev/null @@ -1,15 +0,0 @@ -#%Module##################################################### -## gaussian_sfcanl build module - wcoss -############################################################# - -# Loading Intel Compiler Suite -module load ics/16.0.3 - -# Loading nceplibs modules -module load w3nco/v2.0.6 -module load bacio/v2.0.2 -module load nemsio/v2.2.3 -module load sp/v2.0.2 -module load NetCDF/4.2/serial - -export FCOMP=ifort diff --git a/modulefiles/fv3gfs/gaussian_sfcanl.wcoss_cray b/modulefiles/fv3gfs/gaussian_sfcanl.wcoss_cray deleted file mode 100644 index e20c863d8e..0000000000 --- a/modulefiles/fv3gfs/gaussian_sfcanl.wcoss_cray +++ /dev/null @@ -1,20 +0,0 @@ -#%Module##################################################### -## gaussian_sfcanl component of fv3gfs - cray -############################################################# - -set ver v15.0.0 - -# Load Intel environment -module load PrgEnv-intel/5.2.56 -module rm intel -module rm NetCDF-intel-sandybridge/4.2 -module load intel/16.3.210 -module load cray-netcdf -module load craype-haswell - -module load nemsio-intel/2.2.3 -module load w3nco-intel/2.0.6 -module load bacio-intel/2.0.2 -module load sp-intel/2.0.2 - -export FCOMP=ftn diff --git a/modulefiles/fv3gfs/gaussian_sfcanl.wcoss_dell_p3 b/modulefiles/fv3gfs/gaussian_sfcanl.wcoss_dell_p3 deleted file mode 100644 index b5794e5ebe..0000000000 --- a/modulefiles/fv3gfs/gaussian_sfcanl.wcoss_dell_p3 +++ /dev/null @@ -1,20 +0,0 @@ -#%Module##################################################### -## gaussian_sfcanl component of fv3gfs - wcoss_dell_p3 -############################################################# - -set ver v15.0.0 - -# Load Intel environment -module load ips/18.0.1.163 -module load impi/18.0.1 - -module load nemsio/2.2.3 -module load w3nco/2.0.6 -module load bacio/2.0.2 -module load sp/2.0.2 - -module use /usrx/local/nceplibs/dev/NCEPLIBS/modulefiles -module load hdf5_parallel/1.10.6 -module load netcdf_parallel/4.7.4 - -export FCOMP=ifort diff --git a/modulefiles/gfs_bufr.hera b/modulefiles/gfs_bufr.hera deleted file mode 100644 index 5d4ef5f7ac..0000000000 --- a/modulefiles/gfs_bufr.hera +++ /dev/null @@ -1,27 +0,0 @@ -#%Module##################################################### -## bufrsnd -############################################################# - -# Loading Intel Compiler Suite -module load intel -module load impi -module use -a /scratch2/NCEPDEV/nwprod/NCEPLIBS/modulefiles -# Loading nceplibs modules -module load sigio/2.1.1 -module load bacio/2.0.3 -module load w3nco/2.0.6 -module load bufr/11.3.0 -module load nemsio/2.2.3 -module load intelpython/3.6.8 -module load w3emc/2.3.1 - -module use /scratch2/NCEPDEV/nwprod/NCEPLIBS/modulefiles -module load hdf5_parallel/1.10.6 -module load netcdf_parallel/4.7.4 -#module load w3emc_para/2.4.0 - - -export myFC=$FCOMP -export myFCFLAGS="-O3 -convert big_endian -traceback -g -fp-model source -qopenmp" -export myCPP=/lib/cpp -export myCPPFLAGS="-P" diff --git a/modulefiles/gfs_bufr.jet b/modulefiles/gfs_bufr.jet deleted file mode 100644 index a57987c1d0..0000000000 --- a/modulefiles/gfs_bufr.jet +++ /dev/null @@ -1,38 +0,0 @@ -#%Module##################################################### -## bufrsnd -############################################################# -export F_COMP=ifort -export F_COMP_MP=mpiifort -export F_COMP_MPI=mpiifort - -export C_COMP=icc -export C_COMP_MP=mpiicc - - -#module use /gpfs/hps/nco/ops/nwprod/lib/modulefiles - -module load newdefaults -module load intel/15.0.3.187 -module load impi/5.1.3.181 - -export NCEPLIBS=/mnt/lfs3/projects/hfv3gfs/gwv/ljtjet/lib - - -module use $NCEPLIBS/modulefiles -module load nemsio-intel-sandybridge/2.2.2 -module load sigio-intel-sandybridge/2.0.1 -module load bacio-intel-sandybridge/2.0.1 -module load sp-intel-sandybridge/2.0.2 -module load w3emc-intel-sandybridge/2.2.0 -module load w3nco-intel-sandybridge/2.0.6 -module load bufr-intel-sandybridge/11.0.1 - -##module use /home/Raghu.Reddy/modules -##module load gempak-rr/7.4.2 -module load gempak/7.4.2 - -export myFC=mpiifort -export myFCFLAGS="-O3 -convert big_endian -traceback -g -fp-model source -openmp" -export myCPP=/lib/cpp -export myCPPFLAGS="-P" - diff --git a/modulefiles/gfs_bufr.wcoss b/modulefiles/gfs_bufr.wcoss deleted file mode 100644 index 3f0654d8c4..0000000000 --- a/modulefiles/gfs_bufr.wcoss +++ /dev/null @@ -1,20 +0,0 @@ -#%Module##################################################### -## bufrsnd -############################################################# - -# Loading Intel Compiler Suite -module load ics/12.1 -module load ibmpe - -# Loding nceplibs modules -module load sigio/v2.1.0 -module load bacio/v2.0.1 -module load w3emc/v2.2.0 -module load w3nco/v2.0.6 -module load bufr/v11.0.1 -module load nemsio/v2.2.1 - -export myFC=mpiifort -export myFCFLAGS="-O2 -g -traceback -openmp -convert big_endian -auto" -export myCPP=/lib/cpp -export myCPPFLAGS="-P" diff --git a/modulefiles/gfs_bufr.wcoss_cray b/modulefiles/gfs_bufr.wcoss_cray deleted file mode 100644 index 3fee448fcc..0000000000 --- a/modulefiles/gfs_bufr.wcoss_cray +++ /dev/null @@ -1,30 +0,0 @@ -#%Module##################################################### -## bufrsnd -############################################################# - -module load modules - -# Loading ncep environment -module load ncep/1.0 - -# Loading Intel Compiler Suite -module load PrgEnv-intel - -# Loading pe environment -module load craype-sandybridge -module load intel intel/15.0.3.187 - -# Loding nceplibs modules -module use /gpfs/hps/nco/ops/nwprod/lib/modulefiles -module load nemsio-intel/2.2.2 -module load sigio-intel/2.1.0 -module load bacio-intel/2.0.1 -module load w3emc-intel/2.2.0 -module load w3nco-intel/2.0.6 -module load bufr-intel/11.0.1 -module load iobuf/2.0.7 - -export myFC=ftn -export myFCFLAGS="-O3 -convert big_endian -traceback -g -fp-model source -openmp" -export myCPP=/lib/cpp -export myCPPFLAGS="-P" diff --git a/modulefiles/gfs_bufr.wcoss_dell_p3 b/modulefiles/gfs_bufr.wcoss_dell_p3 deleted file mode 100644 index 41697a6487..0000000000 --- a/modulefiles/gfs_bufr.wcoss_dell_p3 +++ /dev/null @@ -1,28 +0,0 @@ -#%Module##################################################### -## bufrsnd -############################################################# - -####. $MODULESHOME/init/ksh -# Loading pe environment -module load ips/18.0.1.163 -module load impi/18.0.1 - -# Loding nceplibs modules -module load nemsio/2.2.3 -module load bacio/2.0.2 -module load w3nco/2.0.6 -module load bufr/11.2.0 -module load sigio/2.1.0 - -module use -a /gpfs/dell1/nco/ops/nwprod/modulefiles/ -module load gempak/7.3.1 - -module use /usrx/local/nceplibs/dev/NCEPLIBS/modulefiles -module load hdf5_parallel/1.10.6 -module load netcdf_parallel/4.7.4 -module load w3emc_para/2.4.0 - -export myFC=mpiifort -export myFCFLAGS="-O3 -convert big_endian -traceback -g -fp-model source -qopenmp" -export myCPP=/lib/cpp -export myCPPFLAGS="-P" diff --git a/modulefiles/gfs_fbwndgfs.hera b/modulefiles/gfs_fbwndgfs.hera deleted file mode 100644 index 60a8ccad54..0000000000 --- a/modulefiles/gfs_fbwndgfs.hera +++ /dev/null @@ -1,10 +0,0 @@ -#%Module##################################################### -## Module file for fbwndgfs -############################################################# - -module use -a /scratch2/NCEPDEV/nwprod/NCEPLIBS/modulefiles -module load bacio/2.0.3 -module load w3emc/2.3.1 -module load w3nco/2.0.6 -module load ip/3.0.1 -module load sp/2.0.2 diff --git a/modulefiles/gfs_fbwndgfs.wcoss b/modulefiles/gfs_fbwndgfs.wcoss deleted file mode 100644 index 8c85dd7c10..0000000000 --- a/modulefiles/gfs_fbwndgfs.wcoss +++ /dev/null @@ -1,15 +0,0 @@ -#%Module##################################################### -## Module file for fbwndgfs -############################################################# -# -# Loading required system modules -# - module load ics - module switch ics/15.0.6 - -# Loading Intel-Compiled NCEP Libraries - module load bacio/v2.0.2 - module load w3emc/v2.2.0 - module load w3nco/v2.0.6 - module load ip/v3.0.0 - module load sp/v2.0.2 diff --git a/modulefiles/gfs_fbwndgfs.wcoss_cray b/modulefiles/gfs_fbwndgfs.wcoss_cray deleted file mode 100755 index e327319fb4..0000000000 --- a/modulefiles/gfs_fbwndgfs.wcoss_cray +++ /dev/null @@ -1,20 +0,0 @@ -#%Module##################################################### -## Module file for fbwndgfs -############################################################# -# -# Loading required Cray system modules -# - module load modules - module load craype-sandybridge - module load PrgEnv-intel/5.2.56 - module switch intel intel/15.0.6.233 - -# Loading Intel-Compiled NCEP Libraries - module load bacio-intel/2.0.1 - module load w3emc-intel/2.2.0 - module load w3nco-intel/2.0.6 - module load ip-intel/3.0.0 - module load sp-intel/2.0.2 - -# Loading IOBUF - module load iobuf/2.0.7 diff --git a/modulefiles/gfs_fbwndgfs.wcoss_dell_p3 b/modulefiles/gfs_fbwndgfs.wcoss_dell_p3 deleted file mode 100755 index 3271ea2396..0000000000 --- a/modulefiles/gfs_fbwndgfs.wcoss_dell_p3 +++ /dev/null @@ -1,12 +0,0 @@ -#%Module##################################################### -## Module file for fbwndgfs -############################################################# -# -module load ips/18.0.1.163 -module load impi/18.0.1 - -module load bacio/2.0.2 -module load w3nco/2.0.6 -module load w3emc/2.3.0 -module load ip/3.0.1 -module load sp/2.0.2 diff --git a/modulefiles/module-setup.csh.inc b/modulefiles/module-setup.csh.inc index 7917d2878c..7086326627 100644 --- a/modulefiles/module-setup.csh.inc +++ b/modulefiles/module-setup.csh.inc @@ -2,7 +2,13 @@ set __ms_shell=csh eval "if ( -d / ) set __ms_shell=tcsh" -if ( { test -d /lfs3 } ) then +if ( { test -d /lfs/f1 } ) then + # We are on NOAA Cactus or Dogwood + if ( ! { module help >& /dev/null } ) then + source /usr/share/lmod/lmod/init/$__ms_shell + fi + module reset +else if ( { test -d /lfs3 } ) then if ( ! { module help >& /dev/null } ) then source /apps/lmod/lmod/init/$__ms_shell endif @@ -13,39 +19,25 @@ else if ( { test -d /scratch1 } ) then source /apps/lmod/lmod/init/$__ms_shell endif module purge -else if ( { test -d /scratch3 } ) then - # We are on NOAA Theia - if ( ! { module help >& /dev/null } ) then - source /apps/lmod/lmod/init/$__ms_shell - endif - module purge -else if ( { test -d /gpfs/hps -a -e /etc/SuSE-release } ) then - # We are on NOAA Luna or Surge - if ( ! { module help >& /dev/null } ) then - source /opt/modules/default/init/$__ms_shell - endif - module purge - module purge - unset _LMFILES_ - unset LOADEDMODULES - module use /opt/modulefiles - module use /opt/cray/ari/modulefiles - module use /opt/cray/craype/default/alt-modulefiles - module use /opt/cray/alt-modulefiles - module use /gpfs/hps/nco/ops/nwprod/modulefiles - module use /gpfs/hps/nco/ops/nwprod/lib/modulefiles - module use /usrx/local/prod/modulefiles -else if ( { test -d /dcom -a -d /hwrf } ) then - # We are on NOAA Tide or Gyre - if ( ! { module help >& /dev/null } ) then - source /usrx/local/Modules/default/init/$__ms_shell - endif +elif [[ -d /work ]] ; then + # We are on MSU Orion or Hercules + if [[ -d /apps/other ]] ; then + # Hercules + init_path="/apps/other/lmod/lmod/init/$__ms_shell" + else + # Orion + init_path="/apps/lmod/lmod/init/$__ms_shell" + fi + if ( ! eval module help > /dev/null 2>&1 ) ; then + source "${init_path}" + fi module purge -else if ( { test -L /usrx && sh -c "readlink /usrx 2> /dev/null | grep dell" } ) then - # We are on WCOSS Mars or Venus +else if ( { test -d /data/prod } ) then + # We are on SSEC S4 if ( ! { module help >& /dev/null } ) then - source /usrx/local/prod/lmod/lmod/init/$__ms_shell + source /usr/share/lmod/lmod/init/$__ms_shell endif + source /etc/profile module purge else if ( { test -d /glade } ) then # We are on NCAR Yellowstone @@ -54,7 +46,7 @@ else if ( { test -d /glade } ) then endif module purge else if ( { test -d /lustre -a -d /ncrc } ) then - # We are on GAEA. + # We are on GAEA. if ( ! { module help >& /dev/null } ) then # We cannot simply load the module command. The GAEA # /etc/csh.login modifies a number of module-related variables diff --git a/modulefiles/module-setup.sh.inc b/modulefiles/module-setup.sh.inc index f4aad8b9f1..db9dabffe1 100644 --- a/modulefiles/module-setup.sh.inc +++ b/modulefiles/module-setup.sh.inc @@ -16,7 +16,13 @@ else __ms_shell=sh fi -if [[ -d /lfs3 ]] ; then +if [[ -d /lfs/f1 ]] ; then + # We are on NOAA Cactus or Dogwood + if ( ! eval module help > /dev/null 2>&1 ) ; then + source /usr/share/lmod/lmod/init/$__ms_shell + fi + module reset +elif [[ -d /mnt/lfs1 ]] ; then # We are on NOAA Jet if ( ! eval module help > /dev/null 2>&1 ) ; then source /apps/lmod/lmod/init/$__ms_shell @@ -28,39 +34,17 @@ elif [[ -d /scratch1 ]] ; then source /apps/lmod/lmod/init/$__ms_shell fi module purge -elif [[ -d /scratch3 ]] ; then - # We are on NOAA Theia - if ( ! eval module help > /dev/null 2>&1 ) ; then - source /apps/lmod/lmod/init/$__ms_shell - fi - module purge -elif [[ -d /gpfs/hps && -e /etc/SuSE-release ]] ; then - # We are on NOAA Luna or Surge - if ( ! eval module help > /dev/null 2>&1 ) ; then - source /opt/modules/default/init/$__ms_shell - fi - module purge - module purge - # Workaround until module issues are fixed: - unset _LMFILES_ - unset LOADEDMODULES - module use /opt/modulefiles - module use /opt/cray/ari/modulefiles - module use /opt/cray/craype/default/alt-modulefiles - module use /opt/cray/alt-modulefiles - module use /gpfs/hps/nco/ops/nwprod/modulefiles - module use /gpfs/hps/nco/ops/nwprod/lib/modulefiles - module use /usrx/local/prod/modulefiles -elif [[ -d /dcom && -d /hwrf ]] ; then - # We are on NOAA Tide or Gyre - if ( ! eval module help > /dev/null 2>&1 ) ; then - source /usrx/local/Modules/default/init/$__ms_shell +elif [[ -d /work ]] ; then + # We are on MSU Orion or Hercules + if [[ -d /apps/other ]] ; then + # Hercules + init_path="/apps/other/lmod/lmod/init/$__ms_shell" + else + # Orion + init_path="/apps/lmod/lmod/init/$__ms_shell" fi - module purge -elif [[ -L /usrx && "$( readlink /usrx 2> /dev/null )" =~ dell ]] ; then - # We are on NOAA Mars or Venus if ( ! eval module help > /dev/null 2>&1 ) ; then - source /usrx/local/prod/lmod/lmod/init/$__ms_shell + source "${init_path}" fi module purge elif [[ -d /glade ]] ; then @@ -70,7 +54,7 @@ elif [[ -d /glade ]] ; then fi module purge elif [[ -d /lustre && -d /ncrc ]] ; then - # We are on GAEA. + # We are on GAEA. if ( ! eval module help > /dev/null 2>&1 ) ; then # We cannot simply load the module command. The GAEA # /etc/profile modifies a number of module-related variables @@ -83,7 +67,7 @@ elif [[ -d /lustre && -d /ncrc ]] ; then __ms_source_etc_profile=no fi module purge -# clean up after purge + # clean up after purge unset _LMFILES_ unset _LMFILES_000 unset _LMFILES_001 @@ -109,6 +93,12 @@ elif [[ -d /lustre && -d /ncrc ]] ; then source /etc/profile unset __ms_source_etc_profile fi +elif [[ -d /data/prod ]] ; then + # We are on SSEC's S4 + if ( ! eval module help > /dev/null 2>&1 ) ; then + source /usr/share/lmod/lmod/init/$__ms_shell + fi + module purge else echo WARNING: UNKNOWN PLATFORM 1>&2 fi diff --git a/modulefiles/module_base.hera b/modulefiles/module_base.hera deleted file mode 100644 index a60234f5f5..0000000000 --- a/modulefiles/module_base.hera +++ /dev/null @@ -1,34 +0,0 @@ -#%Module###################################################################### -## -## FV3GFS prerequisites -## - -module load intel/18.0.5.274 -module load impi/2018.0.4 -module load wgrib2/2.0.8 -module load hpss/hpss -module load nco/4.7.0 -module load gempak/7.4.2 - -#Load from official NCEPLIBS -module use -a /scratch2/NCEPDEV/nwprod/NCEPLIBS/modulefiles -module load hdf5_parallel/1.10.6 -#module load netcdf_parallel/4.7.4 -module load g2tmpl/1.6.0 -module load grib_util/1.1.1 -module load crtm/2.3.0 -module load prod_util/1.1.0 - -module use -a /scratch1/NCEPDEV/global/gwv/lp/lib/modulefiles -module load netcdfp/4.7.4 -module load esmflocal/8.0.1.08bs - -#module use -a /scratch1/NCEPDEV/nems/emc.nemspara/soft/modulefiles -#module load esmf/8.0.1bs08 - -# python -module use -a /contrib/anaconda/modulefiles -module load anaconda/2.3.0 - -# waveprep -module load cdo/1.9.5 diff --git a/modulefiles/module_base.hera.lua b/modulefiles/module_base.hera.lua new file mode 100644 index 0000000000..cf77df520a --- /dev/null +++ b/modulefiles/module_base.hera.lua @@ -0,0 +1,50 @@ +help([[ +Load environment to run GFS on Hera +]]) + +spack_stack_ver=(os.getenv("spack_stack_ver") or "None") +spack_env=(os.getenv("spack_env") or "None") +prepend_path("MODULEPATH", "/scratch1/NCEPDEV/nems/role.epic/spack-stack/spack-stack-" .. spack_stack_ver .. "/envs/" .. spack_env .. "/install/modulefiles/Core") + +load(pathJoin("stack-intel", os.getenv("stack_intel_ver"))) +load(pathJoin("stack-intel-oneapi-mpi", os.getenv("stack_impi_ver"))) +load(pathJoin("python", os.getenv("python_ver"))) + +load(pathJoin("hpss", os.getenv("hpss_ver"))) +load(pathJoin("gempak", os.getenv("gempak_ver"))) +load(pathJoin("ncl", os.getenv("ncl_ver"))) +load(pathJoin("jasper", os.getenv("jasper_ver"))) +load(pathJoin("libpng", os.getenv("libpng_ver"))) +load(pathJoin("cdo", os.getenv("cdo_ver"))) +load(pathJoin("R", os.getenv("R_ver"))) + +load(pathJoin("hdf5", os.getenv("hdf5_ver"))) +load(pathJoin("netcdf-c", os.getenv("netcdf_c_ver"))) +load(pathJoin("netcdf-fortran", os.getenv("netcdf_fortran_ver"))) + +load(pathJoin("nco", os.getenv("nco_ver"))) +load(pathJoin("prod_util", os.getenv("prod_util_ver"))) +load(pathJoin("grib-util", os.getenv("grib_util_ver"))) +load(pathJoin("g2tmpl", os.getenv("g2tmpl_ver"))) +load(pathJoin("gsi-ncdiag", os.getenv("gsi_ncdiag_ver"))) +load(pathJoin("crtm", os.getenv("crtm_ver"))) +load(pathJoin("bufr", os.getenv("bufr_ver"))) +load(pathJoin("wgrib2", os.getenv("wgrib2_ver"))) +load(pathJoin("py-netcdf4", os.getenv("py_netcdf4_ver"))) +load(pathJoin("py-pyyaml", os.getenv("py_pyyaml_ver"))) +load(pathJoin("py-jinja2", os.getenv("py_jinja2_ver"))) + +load(pathJoin("met", os.getenv("met_ver"))) +load(pathJoin("metplus", os.getenv("metplus_ver"))) + +setenv("WGRIB2","wgrib2") +setenv("UTILROOT",(os.getenv("prod_util_ROOT") or "None")) + +--prepend_path("MODULEPATH", pathJoin("/scratch1/NCEPDEV/global/glopara/git/prepobs/v" .. (os.getenv("prepobs_run_ver") or "None"), "modulefiles")) +prepend_path("MODULEPATH", pathJoin("/scratch1/NCEPDEV/global/glopara/git/prepobs/feature-GFSv17_com_reorg_log_update/modulefiles")) +load(pathJoin("prepobs", os.getenv("prepobs_run_ver"))) + +prepend_path("MODULEPATH", pathJoin("/scratch1/NCEPDEV/global/glopara/git/Fit2Obs/v" .. (os.getenv("fit2obs_ver") or "None"), "modulefiles")) +load(pathJoin("fit2obs", os.getenv("fit2obs_ver"))) + +whatis("Description: GFS run environment") diff --git a/modulefiles/module_base.hercules.lua b/modulefiles/module_base.hercules.lua new file mode 100644 index 0000000000..d587b90c4f --- /dev/null +++ b/modulefiles/module_base.hercules.lua @@ -0,0 +1,46 @@ +help([[ +Load environment to run GFS on Hercules +]]) + +spack_stack_ver=(os.getenv("spack_stack_ver") or "None") +spack_env=(os.getenv("spack_env") or "None") +prepend_path("MODULEPATH", "/work/noaa/epic/role-epic/spack-stack/hercules/spack-stack-" .. spack_stack_ver .. "/envs/" .. spack_env .. "/install/modulefiles/Core") + +load(pathJoin("stack-intel", os.getenv("stack_intel_ver"))) +load(pathJoin("stack-intel-oneapi-mpi", os.getenv("stack_impi_ver"))) +load(pathJoin("python", os.getenv("python_ver"))) + +-- TODO load NCL once the SAs remove the 'depends_on' statements within it +-- NCL is a static installation and does not depend on any libraries +-- but as is will load, among others, the system netcdf-c/4.9.0 module +--load(pathJoin("ncl", os.getenv("ncl_ver"))) +load(pathJoin("jasper", os.getenv("jasper_ver"))) +load(pathJoin("libpng", os.getenv("libpng_ver"))) +load(pathJoin("cdo", os.getenv("cdo_ver"))) + +load(pathJoin("hdf5", os.getenv("hdf5_ver"))) +load(pathJoin("netcdf-c", os.getenv("netcdf_c_ver"))) +load(pathJoin("netcdf-fortran", os.getenv("netcdf_fortran_ver"))) + +load(pathJoin("nco", os.getenv("nco_ver"))) +load(pathJoin("prod_util", os.getenv("prod_util_ver"))) +load(pathJoin("grib-util", os.getenv("grib_util_ver"))) +load(pathJoin("g2tmpl", os.getenv("g2tmpl_ver"))) +load(pathJoin("gsi-ncdiag", os.getenv("gsi_ncdiag_ver"))) +load(pathJoin("crtm", os.getenv("crtm_ver"))) +load(pathJoin("bufr", os.getenv("bufr_ver"))) +load(pathJoin("wgrib2", os.getenv("wgrib2_ver"))) +load(pathJoin("py-netcdf4", os.getenv("py_netcdf4_ver"))) +load(pathJoin("py-pyyaml", os.getenv("py_pyyaml_ver"))) +load(pathJoin("py-jinja2", os.getenv("py_jinja2_ver"))) + +setenv("WGRIB2","wgrib2") +setenv("UTILROOT",(os.getenv("prod_util_ROOT") or "None")) + +prepend_path("MODULEPATH", pathJoin("/work/noaa/global/glopara/git/prepobs/feature-GFSv17_com_reorg_log_update/modulefiles")) +load(pathJoin("prepobs", os.getenv("prepobs_run_ver"))) + +prepend_path("MODULEPATH", pathJoin("/work/noaa/global/glopara/git/Fit2Obs/v" .. (os.getenv("fit2obs_ver") or "None"), "modulefiles")) +load(pathJoin("fit2obs", os.getenv("fit2obs_ver"))) + +whatis("Description: GFS run environment") diff --git a/modulefiles/module_base.jet b/modulefiles/module_base.jet deleted file mode 100644 index c6c767eedc..0000000000 --- a/modulefiles/module_base.jet +++ /dev/null @@ -1,32 +0,0 @@ -## -## nems prerequisites -## - -proc ModulesHelp {} { - puts stderr "The prerequisites for compiling or running FV3 on Jet. " -} - -module load newdefaults intel/15.0.3.187 impi/5.1.3.181 szip hdf5 netcdf4/4.2.1.1 - -module use /lfs3/projects/hfv3gfs/nwprod/lib/modulefiles -module load bacio/v2.0.2 -module load sp/v2.0.2 -module load ip/v2.0.0 -module load w3nco/v2.0.6 -module load w3emc/v2.2.0 -module load nemsio/v2.2.2 - -#set NCEPLIBS $::env(NCEPLIBS) -#module use $NCEPLIBS/modulefiles -#module load esmf/7.1.0r_impi - -module use /lfs3/projects/hwrf-vd/soft/modulefiles -module load prod_util -module load grib_util -module load hpss - -# mpiserial on Jet includes a cfp wrapper -module load mpiserial - -module load gempak/7.4.2 - diff --git a/modulefiles/module_base.jet.lua b/modulefiles/module_base.jet.lua new file mode 100644 index 0000000000..7a0faaaeb6 --- /dev/null +++ b/modulefiles/module_base.jet.lua @@ -0,0 +1,47 @@ +help([[ +Load environment to run GFS on Jet +]]) + +spack_stack_ver=(os.getenv("spack_stack_ver") or "None") +spack_env=(os.getenv("spack_env") or "None") +prepend_path("MODULEPATH", "/mnt/lfs4/HFIP/hfv3gfs/role.epic/spack-stack/spack-stack-" .. spack_stack_ver .. "/envs/" .. spack_env .. "/install/modulefiles/Core") + +load(pathJoin("stack-intel", os.getenv("stack_intel_ver"))) +load(pathJoin("stack-intel-oneapi-mpi", os.getenv("stack_impi_ver"))) +load(pathJoin("python", os.getenv("python_ver"))) + +load(pathJoin("hpss", os.getenv("hpss_ver"))) +load(pathJoin("gempak", os.getenv("gempak_ver"))) +load(pathJoin("ncl", os.getenv("ncl_ver"))) +load(pathJoin("jasper", os.getenv("jasper_ver"))) +load(pathJoin("libpng", os.getenv("libpng_ver"))) +load(pathJoin("cdo", os.getenv("cdo_ver"))) +load(pathJoin("R", os.getenv("R_ver"))) + +load(pathJoin("hdf5", os.getenv("hdf5_ver"))) +load(pathJoin("netcdf-c", os.getenv("netcdf_c_ver"))) +load(pathJoin("netcdf-fortran", os.getenv("netcdf_fortran_ver"))) + +load(pathJoin("nco", os.getenv("nco_ver"))) +load(pathJoin("prod_util", os.getenv("prod_util_ver"))) +load(pathJoin("grib-util", os.getenv("grib_util_ver"))) +load(pathJoin("g2tmpl", os.getenv("g2tmpl_ver"))) +load(pathJoin("gsi-ncdiag", os.getenv("gsi_ncdiag_ver"))) +load(pathJoin("crtm", os.getenv("crtm_ver"))) +load(pathJoin("bufr", os.getenv("bufr_ver"))) +load(pathJoin("wgrib2", os.getenv("wgrib2_ver"))) +load(pathJoin("py-netcdf4", os.getenv("py_netcdf4_ver"))) +load(pathJoin("py-pyyaml", os.getenv("py_pyyaml_ver"))) +load(pathJoin("py-jinja2", os.getenv("py_jinja2_ver"))) + +setenv("WGRIB2","wgrib2") +setenv("UTILROOT",(os.getenv("prod_util_ROOT") or "None")) + +--prepend_path("MODULEPATH", pathJoin("/lfs4/HFIP/hfv3gfs/glopara/git/prepobs/v" .. (os.getenv("prepobs_run_ver") or "None"), "modulefiles")) +prepend_path("MODULEPATH", pathJoin("/lfs4/HFIP/hfv3gfs/glopara/git/prepobs/feature-GFSv17_com_reorg_log_update/modulefiles")) +load(pathJoin("prepobs", os.getenv("prepobs_run_ver"))) + +prepend_path("MODULEPATH", pathJoin("/lfs4/HFIP/hfv3gfs/glopara/git/Fit2Obs/v" .. (os.getenv("fit2obs_ver") or "None"), "modulefiles")) +load(pathJoin("fit2obs", os.getenv("fit2obs_ver"))) + +whatis("Description: GFS run environment") diff --git a/modulefiles/module_base.orion.lua b/modulefiles/module_base.orion.lua new file mode 100644 index 0000000000..3464accc89 --- /dev/null +++ b/modulefiles/module_base.orion.lua @@ -0,0 +1,48 @@ +help([[ +Load environment to run GFS on Orion +]]) + +spack_stack_ver=(os.getenv("spack_stack_ver") or "None") +spack_env=(os.getenv("spack_env") or "None") +prepend_path("MODULEPATH", "/work/noaa/epic/role-epic/spack-stack/orion/spack-stack-" .. spack_stack_ver .. "/envs/" .. spack_env .. "/install/modulefiles/Core") + +load(pathJoin("stack-intel", os.getenv("stack_intel_ver"))) +load(pathJoin("stack-intel-oneapi-mpi", os.getenv("stack_impi_ver"))) +load(pathJoin("python", os.getenv("python_ver"))) + +load(pathJoin("gempak", os.getenv("gempak_ver"))) +load(pathJoin("ncl", os.getenv("ncl_ver"))) +load(pathJoin("jasper", os.getenv("jasper_ver"))) +load(pathJoin("libpng", os.getenv("libpng_ver"))) +load(pathJoin("cdo", os.getenv("cdo_ver"))) + +load(pathJoin("hdf5", os.getenv("hdf5_ver"))) +load(pathJoin("netcdf-c", os.getenv("netcdf_c_ver"))) +load(pathJoin("netcdf-fortran", os.getenv("netcdf_fortran_ver"))) + +load(pathJoin("nco", os.getenv("nco_ver"))) +load(pathJoin("prod_util", os.getenv("prod_util_ver"))) +load(pathJoin("grib-util", os.getenv("grib_util_ver"))) +load(pathJoin("g2tmpl", os.getenv("g2tmpl_ver"))) +load(pathJoin("gsi-ncdiag", os.getenv("gsi_ncdiag_ver"))) +load(pathJoin("crtm", os.getenv("crtm_ver"))) +load(pathJoin("bufr", os.getenv("bufr_ver"))) +load(pathJoin("wgrib2", os.getenv("wgrib2_ver"))) +load(pathJoin("py-netcdf4", os.getenv("py_netcdf4_ver"))) +load(pathJoin("py-pyyaml", os.getenv("py_pyyaml_ver"))) +load(pathJoin("py-jinja2", os.getenv("py_jinja2_ver"))) + +load(pathJoin("met", os.getenv("met_ver"))) +load(pathJoin("metplus", os.getenv("metplus_ver"))) + +setenv("WGRIB2","wgrib2") +setenv("UTILROOT",(os.getenv("prod_util_ROOT") or "None")) + +--prepend_path("MODULEPATH", pathJoin("/work/noaa/global/glopara/git/prepobs/v" .. (os.getenv("prepobs_run_ver") or "None"), "modulefiles")) +prepend_path("MODULEPATH", pathJoin("/work/noaa/global/glopara/git/prepobs/feature-GFSv17_com_reorg_log_update/modulefiles")) +load(pathJoin("prepobs", os.getenv("prepobs_run_ver"))) + +prepend_path("MODULEPATH", pathJoin("/work/noaa/global/glopara/git/Fit2Obs/v" .. (os.getenv("fit2obs_ver") or "None"), "modulefiles")) +load(pathJoin("fit2obs", os.getenv("fit2obs_ver"))) + +whatis("Description: GFS run environment") diff --git a/modulefiles/module_base.s4.lua b/modulefiles/module_base.s4.lua new file mode 100644 index 0000000000..51eeee0f10 --- /dev/null +++ b/modulefiles/module_base.s4.lua @@ -0,0 +1,44 @@ +help([[ +Load environment to run GFS on S4 +]]) + +spack_stack_ver=(os.getenv("spack_stack_ver") or "None") +spack_env=(os.getenv("spack_env") or "None") +prepend_path("MODULEPATH", "/data/prod/jedi/spack-stack/spack-stack-" .. spack_stack_ver .. "/envs/" .. spack_env .. "/install/modulefiles/Core") + +load(pathJoin("stack-intel", os.getenv("stack_intel_ver"))) +load(pathJoin("stack-intel-oneapi-mpi", os.getenv("stack_impi_ver"))) +load(pathJoin("python", os.getenv("python_ver"))) + +load(pathJoin("ncl", os.getenv("ncl_ver"))) +load(pathJoin("jasper", os.getenv("jasper_ver"))) +load(pathJoin("libpng", os.getenv("libpng_ver"))) +load(pathJoin("cdo", os.getenv("cdo_ver"))) + +load(pathJoin("hdf5", os.getenv("hdf5_ver"))) +load(pathJoin("netcdf-c", os.getenv("netcdf_c_ver"))) +load(pathJoin("netcdf-fortran", os.getenv("netcdf_fortran_ver"))) + +load(pathJoin("nco", os.getenv("nco_ver"))) +load(pathJoin("prod_util", os.getenv("prod_util_ver"))) +load(pathJoin("grib-util", os.getenv("grib_util_ver"))) +load(pathJoin("g2tmpl", os.getenv("g2tmpl_ver"))) +load(pathJoin("gsi-ncdiag", os.getenv("gsi_ncdiag_ver"))) +load(pathJoin("crtm", os.getenv("crtm_ver"))) +load(pathJoin("bufr", os.getenv("bufr_ver"))) +load(pathJoin("wgrib2", os.getenv("wgrib2_ver"))) +load(pathJoin("py-netcdf4", os.getenv("py_netcdf4_ver"))) +load(pathJoin("py-pyyaml", os.getenv("py_pyyaml_ver"))) +load(pathJoin("py-jinja2", os.getenv("py_jinja2_ver"))) + +setenv("WGRIB2","wgrib2") +setenv("UTILROOT",(os.getenv("prod_util_ROOT") or "None")) + +--prepend_path("MODULEPATH", pathJoin("/data/prod/glopara/git/prepobs/v" .. (os.getenv("prepobs_run_ver") or "None"), "modulefiles")) +prepend_path("MODULEPATH", pathJoin("/data/prod/glopara/git/prepobs/feature-GFSv17_com_reorg_log_update/modulefiles")) +load(pathJoin("prepobs", os.getenv("prepobs_run_ver"))) + +prepend_path("MODULEPATH", pathJoin("/data/prod/glopara/git/Fit2Obs/v" .. (os.getenv("fit2obs_ver") or "None"), "modulefiles")) +load(pathJoin("fit2obs", os.getenv("fit2obs_ver"))) + +whatis("Description: GFS run environment") diff --git a/modulefiles/module_base.wcoss2.lua b/modulefiles/module_base.wcoss2.lua new file mode 100644 index 0000000000..aedecf7040 --- /dev/null +++ b/modulefiles/module_base.wcoss2.lua @@ -0,0 +1,41 @@ +help([[ +Load environment to run GFS on WCOSS2 +]]) + +load(pathJoin("PrgEnv-intel", os.getenv("PrgEnv_intel_ver"))) +load(pathJoin("craype", os.getenv("craype_ver"))) +load(pathJoin("intel", os.getenv("intel_ver"))) +load(pathJoin("cray-mpich", os.getenv("cray_mpich_ver"))) +load(pathJoin("cray-pals", os.getenv("cray_pals_ver"))) +load(pathJoin("cfp", os.getenv("cfp_ver"))) +setenv("USE_CFP","YES") + +load(pathJoin("python", os.getenv("python_ver"))) +load(pathJoin("gempak", os.getenv("gempak_ver"))) +load(pathJoin("perl", os.getenv("perl_ver"))) +load(pathJoin("libjpeg", os.getenv("libjpeg_ver"))) +load(pathJoin("udunits", os.getenv("udunits_ver"))) +load(pathJoin("gsl", os.getenv("gsl_ver"))) +load(pathJoin("cdo", os.getenv("cdo_ver"))) + +load(pathJoin("hdf5", os.getenv("hdf5_ver"))) +load(pathJoin("netcdf", os.getenv("netcdf_ver"))) + +load(pathJoin("nco", os.getenv("nco_ver"))) +load(pathJoin("prod_util", os.getenv("prod_util_ver"))) +load(pathJoin("grib_util", os.getenv("grib_util_ver"))) +load(pathJoin("bufr_dump", os.getenv("bufr_dump_ver"))) +load(pathJoin("util_shared", os.getenv("util_shared_ver"))) +load(pathJoin("g2tmpl", os.getenv("g2tmpl_ver"))) +load(pathJoin("ncdiag", os.getenv("ncdiag_ver"))) +load(pathJoin("crtm", os.getenv("crtm_ver"))) +load(pathJoin("wgrib2", os.getenv("wgrib2_ver"))) + +--prepend_path("MODULEPATH", pathJoin("/lfs/h2/emc/global/save/emc.global/git/prepobs/v" .. os.getenv("prepobs_run_ver"), "modulefiles")) +prepend_path("MODULEPATH", pathJoin("/lfs/h2/emc/global/save/emc.global/git/prepobs/feature-GFSv17_com_reorg_log_update/modulefiles")) +load(pathJoin("prepobs", os.getenv("prepobs_run_ver"))) + +prepend_path("MODULEPATH", pathJoin("/lfs/h2/emc/global/save/emc.global/git/Fit2Obs/v" .. os.getenv("fit2obs_ver"), "modulefiles")) +load(pathJoin("fit2obs", os.getenv("fit2obs_ver"))) + +whatis("Description: GFS run environment") diff --git a/modulefiles/module_base.wcoss_c b/modulefiles/module_base.wcoss_c deleted file mode 100644 index 7516514723..0000000000 --- a/modulefiles/module_base.wcoss_c +++ /dev/null @@ -1,63 +0,0 @@ -#%Module###################################################################### -## -## FV3GFS prerequisites -## Installed by: Samuel Trahan (Samuel.Trahan@noaa.gov) -## Installed on: 2017-July-31 - -# From default environment - -module load modules - -module load xt-lsfhpc -module load ncep -module load alps -module load dvs -module load xpmem -module load ugni -module load craype-network-aries -module load switch -#module load eswrap -module load PrgEnv-intel -module load craype -#module switch craype-haswell - -# Is this needed? -module load subversion - -## WCOSS Cray execution prereqs: -module load rca -module load alps -module load xpmem -module load gni-headers -module load udreg -module load ugni -module load hpss - -module load prod_util/1.1.0 -module load g2tmpl-intel/1.4.0 -module load crtm-intel/2.2.6 -module load iobuf/2.0.7 -module load gempak/7.3.0 - -module load nco-gnu-sandybridge/4.4.4 -module load NetCDF-intel-sandybridge/4.2 -module load cfp-intel-sandybridge/1.1.0 -setenv USE_CFP YES - -# modules used by vrfy -module load pm5 -module load prod_envir/1.1.0 -module load util_shared/1.0.7 - -module load gcc/6.3.0 -module unload grib_util/1.0.3 -module load grib_util/1.1.0 - -module use -a /gpfs/hps3/emc/nems/noscrub/emc.nemspara/soft/modulefiles -module unload intel -module load intel/16.3.210 -module load cray-netcdf -module load esmf/8.0.0bs48 - -# python -module load python/3.6.3 diff --git a/modulefiles/module_base.wcoss_dell_p3 b/modulefiles/module_base.wcoss_dell_p3 deleted file mode 100644 index 7a3689669f..0000000000 --- a/modulefiles/module_base.wcoss_dell_p3 +++ /dev/null @@ -1,45 +0,0 @@ -#%Module###################################################################### -## -## FV3GFS prerequisites - -# From default environment - -module load ips/18.0.1.163 -module load impi/18.0.1 -module load lsf/10.1 -module load EnvVars/1.0.3 - -module load HPSS/5.0.2.5 -module load prod_util/1.1.4 -module load prod_envir/1.1.0 -module unload grib_util/1.0.6 -module load grib_util/1.1.0 - -module load NCO/4.7.0 -module load CFP/2.0.2 -setenv USE_CFP YES -module load pm5 - -module use /gpfs/dell2/emc/modeling/noscrub/emc.nemspara/soft/modulefiles -module load hdf5_parallel/1.10.6 -module load netcdf_parallel/4.7.4 -module load esmf/8.0.1bs08 - -module use -a /gpfs/dell1/nco/ops/nwprod/modulefiles/ -module load gempak/7.3.1 - -# Load for WAFS -module load bufr_dumplist/2.0.0 -module load dumpjb/5.0.3 - -# python -module load python/3.6.3 - -# Load crtm/2.3.0 from nceplibs (until installed by NCO) -module use -a /usrx/local/nceplibs/dev/NCEPLIBS/modulefiles -module load crtm/2.3.0 -module load g2tmpl/1.6.0 - -# Load FSU Genesis module -module use -a /gpfs/dell2/emc/modeling/noscrub/emc.glopara/git/tracker/ens_tracker.v1.1.15.3/ush/FSUgenesisPY/modulefiles -module load tclogg diff --git a/modulefiles/module_gwci.hera.lua b/modulefiles/module_gwci.hera.lua new file mode 100644 index 0000000000..1aecddf549 --- /dev/null +++ b/modulefiles/module_gwci.hera.lua @@ -0,0 +1,15 @@ +help([[ +Load environment to run GFS workflow setup scripts on Hera +]]) + +prepend_path("MODULEPATH", "/scratch1/NCEPDEV/nems/role.epic/spack-stack/spack-stack-1.5.1/envs/gsi-addon/install/modulefiles/Core") + +load(pathJoin("stack-intel", os.getenv("2021.5.0"))) +load(pathJoin("stack-intel-oneapi-mpi", os.getenv("2021.5.1"))) + +load(pathJoin("netcdf-c", os.getenv("4.9.2"))) +load(pathJoin("netcdf-fortran", os.getenv("4.6.0"))) +load(pathJoin("nccmp","1.9.0.1")) +load(pathJoin("wgrib2", "2.0.8")) + +whatis("Description: GFS run setup CI environment") diff --git a/modulefiles/module_gwci.hercules.lua b/modulefiles/module_gwci.hercules.lua new file mode 100644 index 0000000000..9c60aed467 --- /dev/null +++ b/modulefiles/module_gwci.hercules.lua @@ -0,0 +1,15 @@ +help([[ +Load environment to run GFS workflow ci scripts on Hercules +]]) + +prepend_path("MODULEPATH", "/work/noaa/epic/role-epic/spack-stack/hercules/spack-stack-1.5.1/envs/gsi-addon/install/modulefiles/Core") + +load(pathJoin("stack-intel", os.getenv("2021.9.0"))) +load(pathJoin("stack-intel-oneapi-mpi", os.getenv("2021.9.0"))) + +load(pathJoin("netcdf-c", os.getenv("4.9.2"))) +load(pathJoin("netcdf-fortran", os.getenv("4.6.0"))) +load(pathJoin("nccmp","1.9.0.1")) +load(pathJoin("wgrib2", "3.1.1")) + +whatis("Description: GFS run ci top-level sripts environment") diff --git a/modulefiles/module_gwci.orion.lua b/modulefiles/module_gwci.orion.lua new file mode 100644 index 0000000000..18851ba7d4 --- /dev/null +++ b/modulefiles/module_gwci.orion.lua @@ -0,0 +1,15 @@ +help([[ +Load environment to run GFS workflow ci scripts on Orion +]]) + +prepend_path("MODULEPATH", "/work/noaa/epic/role-epic/spack-stack/orion/spack-stack-1.5.1/envs/gsi-addon/install/modulefiles/Core") + +load(pathJoin("stack-intel", os.getenv("2022.0.2"))) +load(pathJoin("stack-intel-oneapi-mpi", os.getenv("2021.5.1"))) + +load(pathJoin("netcdf-c", os.getenv("4.9.2"))) +load(pathJoin("netcdf-fortran", os.getenv("4.6.0"))) +load(pathJoin("nccmp","1.9.0.1")) +load(pathJoin("wgrib2", "2.0.8")) + +whatis("Description: GFS run ci top-level sripts environment") diff --git a/modulefiles/module_gwsetup.hera.lua b/modulefiles/module_gwsetup.hera.lua new file mode 100644 index 0000000000..c86cac7b02 --- /dev/null +++ b/modulefiles/module_gwsetup.hera.lua @@ -0,0 +1,18 @@ +help([[ +Load environment to run GFS workflow setup scripts on Hera +]]) + +load(pathJoin("rocoto")) + +prepend_path("MODULEPATH", "/scratch1/NCEPDEV/nems/role.epic/spack-stack/spack-stack-1.5.1/envs/gsi-addon/install/modulefiles/Core") + +local stack_intel_ver=os.getenv("stack_intel_ver") or "2021.5.0" +local python_ver=os.getenv("python_ver") or "3.10.8" + +load(pathJoin("stack-intel", stack_intel_ver)) +load(pathJoin("python", python_ver)) +load("py-jinja2") +load("py-pyyaml") +load("py-numpy") + +whatis("Description: GFS run setup environment") diff --git a/modulefiles/module_gwsetup.hercules.lua b/modulefiles/module_gwsetup.hercules.lua new file mode 100644 index 0000000000..673928605c --- /dev/null +++ b/modulefiles/module_gwsetup.hercules.lua @@ -0,0 +1,19 @@ +help([[ +Load environment to run GFS workflow ci scripts on Hercules +]]) + +load(pathJoin("contrib","0.1")) +load(pathJoin("rocoto","1.3.5")) + +prepend_path("MODULEPATH", "/work/noaa/epic/role-epic/spack-stack/hercules/spack-stack-1.5.1/envs/gsi-addon/install/modulefiles/Core") + +local stack_intel_ver=os.getenv("stack_intel_ver") or "2021.9.0" +local python_ver=os.getenv("python_ver") or "3.10.8" + +load(pathJoin("stack-intel", stack_intel_ver)) +load(pathJoin("python", python_ver)) +load("py-jinja2") +load("py-pyyaml") +load("py-numpy") + +whatis("Description: GFS run setup environment") diff --git a/modulefiles/module_gwsetup.jet.lua b/modulefiles/module_gwsetup.jet.lua new file mode 100644 index 0000000000..d08389c711 --- /dev/null +++ b/modulefiles/module_gwsetup.jet.lua @@ -0,0 +1,18 @@ +help([[ +Load environment to run GFS workflow setup scripts on Jet +]]) + +load(pathJoin("rocoto", "1.3.3")) + +prepend_path("MODULEPATH", "/mnt/lfs4/HFIP/hfv3gfs/role.epic/spack-stack/spack-stack-1.5.1/envs/gsi-addon/install/modulefiles/Core") + +local stack_intel_ver=os.getenv("stack_intel_ver") or "2021.5.0" +local python_ver=os.getenv("python_ver") or "3.10.8" + +load(pathJoin("stack-intel", stack_intel_ver)) +load(pathJoin("python", python_ver)) +load("py-jinja2") +load("py-pyyaml") +load("py-numpy") + +whatis("Description: GFS run setup environment") diff --git a/modulefiles/module_gwsetup.orion.lua b/modulefiles/module_gwsetup.orion.lua new file mode 100644 index 0000000000..93a59c8e50 --- /dev/null +++ b/modulefiles/module_gwsetup.orion.lua @@ -0,0 +1,21 @@ +help([[ +Load environment to run GFS workflow ci scripts on Orion +]]) + +prepend_path("MODULEPATH", "/apps/modulefiles/core") +load(pathJoin("contrib","0.1")) +load(pathJoin("rocoto","1.3.3")) +load(pathJoin("git","2.28.0")) + +prepend_path("MODULEPATH", "/work/noaa/epic/role-epic/spack-stack/orion/spack-stack-1.5.1/envs/gsi-addon/install/modulefiles/Core") + +local stack_intel_ver=os.getenv("stack_intel_ver") or "2022.0.2" +local python_ver=os.getenv("python_ver") or "3.10.8" + +load(pathJoin("stack-intel", stack_intel_ver)) +load(pathJoin("python", python_ver)) +load("py-jinja2") +load("py-pyyaml") +load("py-numpy") + +whatis("Description: GFS run setup environment") diff --git a/modulefiles/module_gwsetup.s4.lua b/modulefiles/module_gwsetup.s4.lua new file mode 100644 index 0000000000..291c654bb3 --- /dev/null +++ b/modulefiles/module_gwsetup.s4.lua @@ -0,0 +1,19 @@ +help([[ +Load environment to run GFS workflow setup scripts on S4 +]]) + +load(pathJoin("rocoto","1.3.5")) +load(pathJoin("git","2.30.0")) + +prepend_path("MODULEPATH", "/data/prod/jedi/spack-stack/spack-stack-1.5.1/envs/gsi-addon/install/modulefiles/Core") + +local stack_intel_ver=os.getenv("stack_intel_ver") or "2021.5.0" +local python_ver=os.getenv("python_ver") or "3.10.8" + +load(pathJoin("stack-intel", stack_intel_ver)) +load(pathJoin("python", python_ver)) +load("py-jinja2") +load("py-pyyaml") +load("py-numpy") + +whatis("Description: GFS run setup environment") diff --git a/modulefiles/module_gwsetup.wcoss2.lua b/modulefiles/module_gwsetup.wcoss2.lua new file mode 100644 index 0000000000..d4e64548b0 --- /dev/null +++ b/modulefiles/module_gwsetup.wcoss2.lua @@ -0,0 +1,10 @@ +help([[ +Load environment to run GFS workflow ci scripts on WCOSS2 +]]) + +load(pathJoin("git","2.29.0")) + +prepend_path("MODULEPATH", "/apps/ops/test/nco/modulefiles/core") +load(pathJoin("rocoto","1.3.5")) + +whatis("Description: GFS run setup environment") diff --git a/modulefiles/modulefile.fv3nc2nemsio.hera b/modulefiles/modulefile.fv3nc2nemsio.hera deleted file mode 100644 index c18bab3def..0000000000 --- a/modulefiles/modulefile.fv3nc2nemsio.hera +++ /dev/null @@ -1,13 +0,0 @@ -#%Module##################################################### -## Module file for fv3nc2nemsio -############################################################# - -module use -a /scratch2/NCEPDEV/nwprod/NCEPLIBS/modulefiles -module load netcdf/4.7.0 -module load hdf5/1.10.5 -module load bacio/2.0.2 -module load nemsio/2.2.3 -module load w3nco/2.0.6 - -export FCMP="ifort" -export FFLAGS="-g -O2 -traceback" diff --git a/modulefiles/modulefile.fv3nc2nemsio.wcoss b/modulefiles/modulefile.fv3nc2nemsio.wcoss deleted file mode 100644 index 5eb8b795b5..0000000000 --- a/modulefiles/modulefile.fv3nc2nemsio.wcoss +++ /dev/null @@ -1,12 +0,0 @@ -#%Module##################################################### -## Module file for fv3nc2nemsio -############################################################# - -module load ics/12.1 -module load NetCDF/4.2/serial -module load bacio/v2.0.2 -module load nemsio/v2.2.3 -module load w3nco/v2.0.6 - -export FCMP="ifort" -export FFLAGS="-free -O3 -xHOST" diff --git a/modulefiles/modulefile.fv3nc2nemsio.wcoss_cray b/modulefiles/modulefile.fv3nc2nemsio.wcoss_cray deleted file mode 100644 index 75260ef7f1..0000000000 --- a/modulefiles/modulefile.fv3nc2nemsio.wcoss_cray +++ /dev/null @@ -1,16 +0,0 @@ -#%Module##################################################### -## Module file for fv3nc2nemsio -############################################################# - -module load ncep/1.0 -module load PrgEnv-intel -module load craype -module load NetCDF-intel-haswell/4.2 -module load HDF5-serial-intel-haswell/1.8.9 - -module load bacio-intel/2.0.1 -module load nemsio-intel/2.2.2 -module load w3nco-intel/2.0.6 - -export FCMP="ftn" -export FFLAGS="-free -O3 -xHOST" diff --git a/modulefiles/modulefile.fv3nc2nemsio.wcoss_cray_userlib b/modulefiles/modulefile.fv3nc2nemsio.wcoss_cray_userlib deleted file mode 100644 index d626039fae..0000000000 --- a/modulefiles/modulefile.fv3nc2nemsio.wcoss_cray_userlib +++ /dev/null @@ -1,17 +0,0 @@ -#%Module##################################################### -## Module file for fv3nc2nemsio -############################################################# - -module load ncep/1.0 -module load PrgEnv-intel -module load craype -module load NetCDF-intel-haswell/4.2 -module load HDF5-serial-intel-haswell/1.8.9 -module unuse /gpfs/hps/nco/ops/nwprod/lib/modulefiles -module use -a $MOD_PATH -module load bacio/v2.0.2 -module load nemsio/v2.2.3 -module load w3nco/v2.0.6 - -export FCMP="ftn" -export FFLAGS="-free -O3 -xHOST" diff --git a/modulefiles/modulefile.fv3nc2nemsio.wcoss_dell_p3 b/modulefiles/modulefile.fv3nc2nemsio.wcoss_dell_p3 deleted file mode 100644 index 5875e5fa64..0000000000 --- a/modulefiles/modulefile.fv3nc2nemsio.wcoss_dell_p3 +++ /dev/null @@ -1,16 +0,0 @@ -#%Module##################################################### -## Module file for fv3nc2nemsio -############################################################# - -module load ips/18.0.1.163 -module load impi/18.0.1 - -module load NetCDF/4.5.0 -module load HDF5-serial/1.10.1 - -module load bacio/2.0.2 -module load nemsio/2.2.3 -module load w3nco/2.0.6 - -export FCMP="ifort" -export FFLAGS="-free -O3 -xHOST" diff --git a/modulefiles/modulefile.grib_util.hera b/modulefiles/modulefile.grib_util.hera deleted file mode 100644 index b912ecc12d..0000000000 --- a/modulefiles/modulefile.grib_util.hera +++ /dev/null @@ -1,18 +0,0 @@ -#%Module###################################################################### -# Module file for grib_util -############################################################################## -module use -a /scratch2/NCEPDEV/nwprod/NCEPLIBS/modulefiles -module load intel/18.0.5.274 -module load bacio/2.0.3 -module load w3emc/2.3.1 -module load w3nco/2.0.6 -module load ip/3.0.1 -module load sp/2.0.2 - -module load jasper/1.900.1 -module load png/1.2.44 -module load z/1.2.11 - -export FCMP=ifort -export CCMP=icc - diff --git a/modulefiles/modulefile.regrid_nemsio.hera b/modulefiles/modulefile.regrid_nemsio.hera deleted file mode 100644 index 6280a02436..0000000000 --- a/modulefiles/modulefile.regrid_nemsio.hera +++ /dev/null @@ -1,17 +0,0 @@ -#%Module##################################################### -## Module file for regrid_nemsio -############################################################# - -module use -a /scratch2/NCEPDEV/nwprod/NCEPLIBS/modulefiles -module load netcdf/4.7.0 -module load hdf5/1.10.5 -module load bacio/2.0.2 -module load nemsio/2.2.3 -module load w3nco/2.0.6 -module load sp/2.0.2 - -export FCMP="$FCOMP" -export NETCDF_LDFLAGS_F="-L${NETCDF}/lib -lnetcdf -lnetcdff -lnetcdf -L${HDF5}/lib -lhdf5 -lhdf5_hl -lhdf5 -lz" -export NETCDF_LDFLAGS="-L${NETCDF}/lib -lnetcdf -lnetcdff -lnetcdf -L${HDF5}/lib -lhdf5 -lhdf5_hl -lhdf5 -lz" -export NETCDF_INCLUDE=-I$NETCDF/include -#export FCMP="mpif90 -f90=ifort" diff --git a/modulefiles/modulefile.regrid_nemsio.wcoss b/modulefiles/modulefile.regrid_nemsio.wcoss deleted file mode 100644 index 54a5343eb6..0000000000 --- a/modulefiles/modulefile.regrid_nemsio.wcoss +++ /dev/null @@ -1,14 +0,0 @@ -#%Module##################################################### -## Module file for regrid_nemsio -############################################################# - -module load ics/12.1 - -module load NetCDF/4.2/serial - -module load bacio/v2.0.2 -module load w3nco/v2.0.6 -module load nemsio/v2.2.3 -module load sp/v2.0.2 - -export FCMP=mpiifort diff --git a/modulefiles/modulefile.regrid_nemsio.wcoss_cray b/modulefiles/modulefile.regrid_nemsio.wcoss_cray deleted file mode 100644 index 2d9ab30946..0000000000 --- a/modulefiles/modulefile.regrid_nemsio.wcoss_cray +++ /dev/null @@ -1,18 +0,0 @@ -#%Module##################################################### -## Module file for regrid_nemsio -############################################################# - -module load craype-network-aries -module load PrgEnv-intel -module load craype - -module unload NetCDF-intel-haswell/3.6.3 -module load NetCDF-intel-haswell/4.2 -module load HDF5-serial-intel-haswell/1.8.9 - -module load bacio-intel/2.0.1 -module load nemsio-intel/2.2.2 -module load w3nco-intel/2.0.6 -module load sp-intel/2.0.2 - -export FCMP="ftn" diff --git a/modulefiles/modulefile.regrid_nemsio.wcoss_cray_userlib b/modulefiles/modulefile.regrid_nemsio.wcoss_cray_userlib deleted file mode 100644 index 6ccccd38b0..0000000000 --- a/modulefiles/modulefile.regrid_nemsio.wcoss_cray_userlib +++ /dev/null @@ -1,20 +0,0 @@ -#%Module##################################################### -## Module file for regrid_nemsio -############################################################# - -module load ncep -module load craype-network-aries -module load PrgEnv-intel -module load craype -module unload NetCDF-intel-haswell/3.6.3 -module load NetCDF-intel-haswell/4.2 -module load HDF5-serial-intel-haswell/1.8.9 - -module unuse /gpfs/hps/nco/ops/nwprod/lib/modulefiles -module use -a $MOD_PATH -module load bacio/v2.0.2 -module load nemsio/v2.2.3 -module load w3nco/v2.0.6 -module load sp/v2.0.2 - -export FCMP="ftn" diff --git a/modulefiles/modulefile.regrid_nemsio.wcoss_dell_p3 b/modulefiles/modulefile.regrid_nemsio.wcoss_dell_p3 deleted file mode 100644 index 7a40aa5b34..0000000000 --- a/modulefiles/modulefile.regrid_nemsio.wcoss_dell_p3 +++ /dev/null @@ -1,15 +0,0 @@ -#%Module##################################################### -## Module file for regrid_nemsio -############################################################# -module load ips/18.0.1.163 -module load impi/18.0.1 - -module load NetCDF/4.5.0 -module load HDF5-serial/1.10.1 - -module load bacio/2.0.2 -module load w3nco/2.0.6 -module load nemsio/2.2.3 -module load sp/2.0.2 - -export FCMP=mpiifort diff --git a/modulefiles/modulefile.storm_reloc_v5.1.0.wcoss b/modulefiles/modulefile.storm_reloc_v5.1.0.wcoss deleted file mode 100644 index 6aa3b31aef..0000000000 --- a/modulefiles/modulefile.storm_reloc_v5.1.0.wcoss +++ /dev/null @@ -1,18 +0,0 @@ -#%Module##################################################### -## Module file for storm_reloc_v5.1.0 -############################################################# - module load EnvVars/1.0.0 - module load ics/12.1 - module load lsf/9.1 - module load ibmpe/1.3.0.10 - module load png/v1.2.44 - module load w3emc/v2.0.5 - module load w3nco/v2.0.6 - module load bacio/v2.0.1 - module load g2/v2.5.0 - module load z/v1.2.6 - module load jasper/v1.900.1 - module load sigio/v2.1.0 - module load sp/v2.0.2 - -setenv FC mpiifort diff --git a/modulefiles/modulefile.storm_reloc_v5.1.0.wcoss_cray b/modulefiles/modulefile.storm_reloc_v5.1.0.wcoss_cray deleted file mode 100644 index 7e1db32d40..0000000000 --- a/modulefiles/modulefile.storm_reloc_v5.1.0.wcoss_cray +++ /dev/null @@ -1,23 +0,0 @@ -#%Module##################################################### -## Module file for storm_reloc_v5.1.0 -############################################################# -module load craype-network-aries -module load craype-haswell -module load craype/2.3.0 -module load PrgEnv-intel/5.2.56 -module load intel/15.0.3.187 -module load cray-mpich/7.2.0 - -module load jasper-gnu-haswell/1.900.1 -module load png-intel-haswell/1.2.49 -module load zlib-intel-haswell/1.2.7 -module load bacio-intel/2.0.1 -module load w3emc-intel/2.2.0 -module load w3nco-intel/2.0.6 -module load sigio-intel/2.1.0 -module load sp-intel/2.0.2 -module load nemsio-intel/2.2.2 -module load nemsiogfs-intel/2.0.1 -module load g2-intel/2.5.0 - -export FC=ftn diff --git a/modulefiles/modulefile.storm_reloc_v5.1.0.wcoss_cray_userlib b/modulefiles/modulefile.storm_reloc_v5.1.0.wcoss_cray_userlib deleted file mode 100644 index 26b5eb96d7..0000000000 --- a/modulefiles/modulefile.storm_reloc_v5.1.0.wcoss_cray_userlib +++ /dev/null @@ -1,26 +0,0 @@ -#%Module##################################################### -## Module file for storm_reloc_v5.1.0 -############################################################# -module load craype-network-aries -module load craype-haswell -module load craype/2.3.0 -module load PrgEnv-intel/5.2.56 -module load intel/15.0.3.187 -module load cray-mpich/7.2.0 - -module unuse /gpfs/hps/nco/ops/nwprod/lib/modulefiles -module use -a $MOD_PATH -module load nemsiogfs/v2.0.1 -module load nemsio/v2.2.3 -module load sigio/v2.0.1 -module load g2/v3.1.0 -module load w3nco/v2.0.6 -module load w3emc/v2.2.0 -module load bacio/v2.0.2 -module load jasper/v1.900.1 -module load png/v1.2.44 -module load z/v1.2.6 -module load sp/v2.0.2 - - -export FC=ftn diff --git a/modulefiles/modulefile.storm_reloc_v5.1.0.wcoss_dell_p3 b/modulefiles/modulefile.storm_reloc_v5.1.0.wcoss_dell_p3 deleted file mode 100644 index 345da671be..0000000000 --- a/modulefiles/modulefile.storm_reloc_v5.1.0.wcoss_dell_p3 +++ /dev/null @@ -1,22 +0,0 @@ -#%Module##################################################### -## Module file for storm_reloc_v5.1.0 -############################################################# - -module load ips/18.0.1.163 -module load impi/18.0.1 - -module load w3emc/2.3.0 -module load w3nco/2.0.6 -module load bacio/2.0.2 -module load sp/2.0.2 -module load nemsio/2.2.3 -module load nemsiogfs/2.0.1 -module load sigio/2.1.0 - -module load jasper/1.900.1 -module load libpng/1.2.59 -module load zlib/1.2.11 -module load g2/3.1.0 - - -export FC=ifort diff --git a/modulefiles/modulefile.storm_reloc_v6.0.0.hera b/modulefiles/modulefile.storm_reloc_v6.0.0.hera deleted file mode 100644 index 36f96e01b9..0000000000 --- a/modulefiles/modulefile.storm_reloc_v6.0.0.hera +++ /dev/null @@ -1,18 +0,0 @@ -#%Module##################################################### -## Module file for storm_reloc_v6.0.0 - Hera -############################################################# - -module use -a /scratch2/NCEPDEV/nwprod/NCEPLIBS/modulefiles -module load w3emc/2.3.0 -module load w3nco/2.0.6 -module load bacio/2.0.2 -module load sp/2.0.2 -module load nemsio/2.2.3 -module load nemsiogfs/2.2.1 -module load sigio/2.1.1 -module load jasper/1.900.1 -module load png/1.2.44 -module load z/1.2.11 -module load g2/3.1.0 - -set FC mpiifort diff --git a/modulefiles/modulefile.storm_reloc_v6.0.0.wcoss b/modulefiles/modulefile.storm_reloc_v6.0.0.wcoss deleted file mode 100644 index 3545956ca9..0000000000 --- a/modulefiles/modulefile.storm_reloc_v6.0.0.wcoss +++ /dev/null @@ -1,18 +0,0 @@ -#%Module##################################################### -## Module file for storm_reloc_v6.0.0 -############################################################# - module load EnvVars/1.0.0 - module load ics/12.1 - module load lsf/9.1 - module load ibmpe/1.3.0.10 - module load png/v1.2.44 - module load w3emc/v2.0.5 - module load w3nco/v2.0.6 - module load bacio/v2.0.1 - module load g2/v2.5.0 - module load z/v1.2.6 - module load jasper/v1.900.1 - module load sigio/v2.0.1 - module load sp/v2.0.2 - -setenv FC mpiifort diff --git a/modulefiles/modulefile.storm_reloc_v6.0.0.wcoss_cray b/modulefiles/modulefile.storm_reloc_v6.0.0.wcoss_cray deleted file mode 100644 index 980f92a175..0000000000 --- a/modulefiles/modulefile.storm_reloc_v6.0.0.wcoss_cray +++ /dev/null @@ -1,23 +0,0 @@ -#%Module##################################################### -## Module file for storm_reloc_v6.0.0 -############################################################# -module load craype-network-aries -module load craype-haswell -module load craype/2.3.0 -module load PrgEnv-intel/5.2.56 -module load intel/15.0.3.187 -module load cray-mpich/7.2.0 - -module load jasper-gnu-haswell/1.900.1 -module load png-intel-haswell/1.2.49 -module load zlib-intel-haswell/1.2.7 -module load bacio-intel/2.0.1 -module load w3emc-intel/2.2.0 -module load w3nco-intel/2.0.6 -module load sigio-intel/2.1.0 -module load sp-intel/2.0.2 -module load nemsio-intel/2.2.2 -module load nemsiogfs-intel/2.0.1 -module load g2-intel/2.5.0 - -export FC=ftn diff --git a/modulefiles/modulefile.storm_reloc_v6.0.0.wcoss_dell_p3 b/modulefiles/modulefile.storm_reloc_v6.0.0.wcoss_dell_p3 deleted file mode 100644 index e59b2fd454..0000000000 --- a/modulefiles/modulefile.storm_reloc_v6.0.0.wcoss_dell_p3 +++ /dev/null @@ -1,22 +0,0 @@ -#%Module##################################################### -## Module file for storm_reloc_v6.0.0 -############################################################# - -module load ips/18.0.1.163 -module load impi/18.0.1 - -module load w3emc/2.3.0 -module load w3nco/2.0.6 -module load bacio/2.0.2 -module load sp/2.0.2 -module load nemsio/2.2.3 -module load nemsiogfs/2.0.1 -module load sigio/2.1.0 - -module load jasper/1.900.1 -module load libpng/1.2.59 -module load zlib/1.2.11 -module load g2/3.1.0 - - -export FC=ifort diff --git a/modulefiles/modulefile_gfswave_gempak.wcoss_dell_p3 b/modulefiles/modulefile_gfswave_gempak.wcoss_dell_p3 deleted file mode 100644 index 9e54816068..0000000000 --- a/modulefiles/modulefile_gfswave_gempak.wcoss_dell_p3 +++ /dev/null @@ -1,32 +0,0 @@ -#%Module -## Roberto.Padilla@noaa.gov IMSG@NOAA/NWS/NCEP/EMC -## -## GEMPAK -##_____________________________________________________ -proc ModulesHelp { } { -puts stderr "Set environment for PRDGENvX.XX.X " -puts stderr "codes in the sorc directory. " -puts stderr "This module initializes the environment " -puts stderr "for the DELL implementation. \n" -} -module-whatis " PRDGEN-wave lsf runtime jobs whatis description" - -set ver v1.2.0 - -set sys [uname sysname] - - -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load impi/18.0.1 -module load lsf/10.1 -module load HDF5-serial/1.10.1 -module load NetCDF/4.5.0 -module load CFP/2.0.2 -module load prod_util/1.1.4 -module load grib_util/1.1.0 -module load prod_envir/1.0.3 -module load util_shared/1.1.2 -module load bufr/11.2.0 -module load sigio/2.0.1 -module load gempak/7.3.1 diff --git a/modulefiles/modulefile_gfswave_prdgen.wcoss_dell_p3 b/modulefiles/modulefile_gfswave_prdgen.wcoss_dell_p3 deleted file mode 100755 index a9d9472b86..0000000000 --- a/modulefiles/modulefile_gfswave_prdgen.wcoss_dell_p3 +++ /dev/null @@ -1,32 +0,0 @@ -#%Module -## Roberto.Padilla@noaa.gov IMSG@NOAA/NWS/NCEP/EMC -## -## NFCENS -##_____________________________________________________ -proc ModulesHelp { } { -puts stderr "Set environment for PRDGENvX.XX.X " -puts stderr "codes in the sorc directory. " -puts stderr "This module initializes the environment " -puts stderr "for the DELL implementation. \n" -} -module-whatis " PRDGEN-wave lsf runtime jobs whatis description" - -set ver v1.0.0 - -set sys [uname sysname] - - -module load EnvVars/1.0.2 -module load ips/18.0.1.163 -module load impi/18.0.1 -module load lsf/10.1 -module load HDF5-serial/1.10.1 -module load NetCDF/4.5.0 -module load CFP/2.0.2 -module load prod_util/1.1.4 -module load grib_util/1.1.0 -module load prod_envir/1.0.3 -module load util_shared/1.1.2 -module load bufr/11.2.0 -module load sigio/2.0.1 -module load gempak/7.3.1 diff --git a/parm/config/config.anal b/parm/config/config.anal deleted file mode 100755 index 35ff5e8299..0000000000 --- a/parm/config/config.anal +++ /dev/null @@ -1,130 +0,0 @@ -#!/bin/ksh -x - -########## config.anal ########## -# Analysis specific - -echo "BEGIN: config.anal" - -# Get task specific resources -. $EXPDIR/config.resources anal - -if [ $DONST = "YES" ]; then - . $EXPDIR/config.nsst -fi - -if [[ "$CDUMP" = "gfs" ]] ; then - export USE_RADSTAT="NO" # This can be only used when bias correction is not-zero. - export GENDIAG="NO" - export SETUP='diag_rad=.false.,diag_pcp=.false.,diag_conv=.false.,diag_ozone=.false.,write_diag(3)=.false.,niter(2)=100,' - export DIAG_TARBALL="NO" -fi - -export npe_gsi=$npe_anal - -if [[ "$CDUMP" == "gfs" ]] ; then - export npe_gsi=$npe_anal_gfs - export nth_anal=$nth_anal_gfs -fi - -# Set parameters specific to L127 -if [ $LEVS = "128" ]; then - export GRIDOPTS="nlayers(63)=1,nlayers(64)=1," - export SETUP="gpstop=55,nsig_ext=56,$SETUP" -fi - -# Set namelist option for LETKF -export lobsdiag_forenkf=".false." # anal does not need to write out jacobians - # set to .true. in config.eobs and config.eupd - -if [ $OUTPUT_FILE = "nemsio" ]; then - export DO_CALC_INCREMENT="YES" - export DO_CALC_ANALYSIS="NO" -fi - -# Do not process the following datasets -export GSNDBF=${GSNDBF:-/dev/null} -export AMSREBF=${AMSREBF:-/dev/null} -export SSMITBF=${SSMITBF:-/dev/null} -export AMSR2BF=${AMSR2BF:-/dev/null} - - -# Use experimental dumps in GFS v16 parallels -export ABIBF="/dev/null" -if [[ "$CDATE" -ge "2019022800" ]] ; then - export ABIBF="$DMPDIR/${CDUMP}x.${PDY}/${cyc}/${CDUMP}.t${cyc}z.gsrcsr.tm00.bufr_d" - if [[ "$CDATE" -ge "2019111000" && "$CDATE" -le "2020052612" ]]; then - export ABIBF="$DMPDIR/${CDUMP}y.${PDY}/${cyc}/${CDUMP}.t${cyc}z.gsrcsr.tm00.bufr_d" - fi -fi - -export AHIBF="/dev/null" -if [[ "$CDATE" -ge "2019042300" ]]; then - export AHIBF="$DMPDIR/${CDUMP}x.${PDY}/${cyc}/${CDUMP}.t${cyc}z.ahicsr.tm00.bufr_d" -fi - - -# Adjust data usage for GFS v16 parallels -# -# NOTE: Remember to set PRVT in config.prep as OBERROR is set below -# -# Set default values -export CONVINFO=$FIXgsi/global_convinfo.txt -export OZINFO=$FIXgsi/global_ozinfo.txt -export SATINFO=$FIXgsi/global_satinfo.txt -export OBERROR=$FIXgsi/prepobs_errtable.global - - -# Set convinfo and prepobs.errtable.global for start of GFS v16 parallels -if [[ "$CDATE" -ge "2019021900" && "$CDATE" -lt "2019110706" ]]; then - export CONVINFO=$FIXgsi/gfsv16_historical/global_convinfo.txt.2019021900 - export OBERROR=$FIXgsi/gfsv16_historical/prepobs_errtable.global.2019021900 -fi - -# Place GOES-15 AMVs in monitor, assimilate GOES-17 AMVs, assimilate KOMPSAT-5 gps -if [[ "$CDATE" -ge "2019110706" && "$CDATE" -lt "2020040718" ]]; then - export CONVINFO=$FIXgsi/gfsv16_historical/global_convinfo.txt.2019110706 - export OBERROR=$FIXgsi/gfsv16_historical/prepobs_errtable.global.2019110706 -fi - -# Assimilate 135 (T) & 235 (uv) Canadian AMDAR observations -if [[ "$CDATE" -ge "2020040718" && "$CDATE" -lt "2020052612" ]]; then - export CONVINFO=$FIXgsi/gfsv16_historical/global_convinfo.txt.2020040718 -fi - -# NOTE: -# As of 2020052612, gfsv16_historical/global_convinfo.txt.2020052612 is -# identical to ../global_convinfo.txt. Thus, the logic below is not -# needed at this time. -# Assimilate COSMIC-2 GPS -##if [[ "$CDATE" -ge "2020052612" && "$CDATE" -lt "YYYYMMDDHH" ]]; then -## export CONVINFO=$FIXgsi/gfsv16_historical/global_convinfo.txt.2020052612 -##fi - - -# Turn off assmilation of OMPS during period of bad data -if [[ "$CDATE" -ge "2020011600" && "$CDATE" -lt "2020011806" ]]; then - export OZINFO=$FIXgsi/gfsv16_historical/global_ozinfo.txt.2020011600 -fi - - -# Set satinfo for start of GFS v16 parallels -if [[ "$CDATE" -ge "2019021900" && "$CDATE" -lt "2019110706" ]]; then - export SATINFO=$FIXgsi/gfsv16_historical/global_satinfo.txt.2019021900 -fi - -# Turn on assimilation of Metop-C AMSUA and MHS -if [[ "$CDATE" -ge "2019110706" && "$CDATE" -lt "2020022012" ]]; then - export SATINFO=$FIXgsi/gfsv16_historical/global_satinfo.txt.2019110706 -fi - -# NOTE: -# As of 2020022012, gfsv16_historical/global_satinfo.txt.2020022012 is -# identical to ../global_satinfo.txt. Thus, the logic below is not -# needed at this time -# -# Turn off assmilation of all Metop-A MHS -## if [[ "$CDATE" -ge "2020022012" && "$CDATE" -lt "YYYYMMDDHH" ]]; then -## export SATINFO=$FIXgsi/gfsv16_historical/global_satinfo.txt.2020022012 -## fi - -echo "END: config.anal" diff --git a/parm/config/config.analcalc b/parm/config/config.analcalc deleted file mode 100755 index 5866ce5ac6..0000000000 --- a/parm/config/config.analcalc +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/ksh -x - -########## config.analcalc ########## -# GFS post-anal specific (non-diag) - -echo "BEGIN: config.analcalc" - -# Get task specific resources -. $EXPDIR/config.resources analcalc - -echo "END: config.analcalc" diff --git a/parm/config/config.arch b/parm/config/config.arch deleted file mode 100755 index fe4363613a..0000000000 --- a/parm/config/config.arch +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/ksh -x - -########## config.arch ########## -# Archive specific - -echo "BEGIN: config.arch" - -# Get task specific resources -. $EXPDIR/config.resources arch - -#--online archive of nemsio files for fit2obs verification -export FITSARC="YES" -export FHMAX_FITS=132 -[[ "$FHMAX_FITS" -gt "$FHMAX_GFS" ]] && export FHMAX_FITS=$FHMAX_GFS - -#--starting and ending hours of previous cycles to be removed from rotating directory -export RMOLDSTD=144 -export RMOLDEND=24 - -#--keep forcing data for running gldas step -if [[ "$DO_GLDAS" == "YES" && "$CDUMP" == "gdas" ]]; then - [[ $RMOLDSTD -lt 144 ]] && export RMOLDSTD=144 -fi - -echo "END: config.arch" diff --git a/parm/config/config.awips b/parm/config/config.awips deleted file mode 100755 index 76a9c21536..0000000000 --- a/parm/config/config.awips +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/ksh -x - -########## config.awips ########## -# GFS awips step specific - -echo "BEGIN: config.awips" - -# Get task specific resources -. $EXPDIR/config.resources awips - -export AWIPS20SH=$HOMEgfs/jobs/JGFS_AWIPS_20KM_1P0DEG -export AWIPSG2SH=$HOMEgfs/jobs/JGFS_AWIPS_G2 - -# No. of concurrent awips jobs -export NAWIPSGRP=42 - -echo "END: config.awips" diff --git a/parm/config/config.base.emc.dyn b/parm/config/config.base.emc.dyn deleted file mode 100755 index dcd5035647..0000000000 --- a/parm/config/config.base.emc.dyn +++ /dev/null @@ -1,279 +0,0 @@ -#!/bin/ksh -x - -########## config.base ########## -# Common to all steps - -echo "BEGIN: config.base" - -# Machine environment -export machine="@MACHINE@" - -# EMC parallel or NCO production -export RUN_ENVIR="emc" - -# Account, queue, etc. -export ACCOUNT="@ACCOUNT@" -export QUEUE="@QUEUE@" -export QUEUE_ARCH="@QUEUE_ARCH@" - -# Project to use in mass store: -HPSS_PROJECT=emc-global - -# Directories relative to installation areas: -export HOMEgfs=@HOMEgfs@ -export PARMgfs=$HOMEgfs/parm -export FIXgfs=$HOMEgfs/fix -export USHgfs=$HOMEgfs/ush -export UTILgfs=$HOMEgfs/util -export EXECgfs=$HOMEgfs/exec -export SCRgfs=$HOMEgfs/scripts - -######################################################################## - -# GLOBAL static environment parameters -export NWPROD="@NWPROD@" -export COMROOT="@COMROOT@" -export DMPDIR="@DMPDIR@" -export RTMFIX=$CRTM_FIX - -# USER specific paths -export HOMEDIR="@HOMEDIR@" -export STMP="@STMP@" -export PTMP="@PTMP@" -export NOSCRUB="@NOSCRUB@" - -# Base directories for various builds -export BASE_GIT="@BASE_GIT@" - -# Toggle to turn on/off GFS downstream processing. -export DO_BUFRSND="YES" # BUFR sounding products -export DO_GEMPAK="NO" # GEMPAK products -export DO_AWIPS="NO" # AWIPS products -export WAFSF="NO" # WAFS products - -# NO for retrospective parallel; YES for real-time parallel -# arch.sh uses REALTIME for MOS. Need to set REALTIME=YES -# if want MOS written to HPSS. Should update arch.sh to -# use RUNMOS flag (currently in config.vrfy) -export REALTIME="YES" - - -#################################################### -# DO NOT ADD MACHINE DEPENDENT STUFF BELOW THIS LINE -# IF YOU HAVE TO MAKE MACHINE SPECIFIC CHANGES BELOW -# FEEL FREE TO MOVE THEM ABOVE THIS LINE TO KEEP IT -# CLEAR -#################################################### -# Build paths relative to $HOMEgfs -export FIXgsi="$HOMEgfs/fix/fix_gsi" -export HOMEfv3gfs="$HOMEgfs/sorc/fv3gfs.fd" -export HOMEpost="$HOMEgfs" -export HOMEobsproc_prep="$BASE_GIT/obsproc/gfsv16b/obsproc_prep.iss70457.netcdfhistory" -export HOMEobsproc_network="$BASE_GIT/obsproc/gfsv16b/obsproc_global.iss71402.supportGFSv16" -export HOMEobsproc_global=$HOMEobsproc_network -export BASE_VERIF="$BASE_GIT/verif/global/tags/vsdb" - -# CONVENIENT utility scripts and other environment parameters -export NCP="/bin/cp -p" -export NMV="/bin/mv" -export NLN="/bin/ln -sf" -export VERBOSE="YES" -export KEEPDATA="NO" -export CHGRP_CMD="chgrp rstprod" -export NEMSIOGET="$HOMEgfs/exec/nemsio_get" -export NCDUMP="$NETCDF/bin/ncdump" -export NCLEN="$HOMEgfs/ush/getncdimlen" - -# Machine environment, jobs, and other utility scripts -export BASE_ENV="$HOMEgfs/env" -export BASE_JOB="$HOMEgfs/jobs/rocoto" - -# EXPERIMENT specific environment parameters -export SDATE=@SDATE@ -export EDATE=@EDATE@ -export assim_freq=6 -export PSLOT="@PSLOT@" -export EXPDIR="@EXPDIR@/$PSLOT" -export ROTDIR="@ROTDIR@/$PSLOT" -export ROTDIR_DUMP="YES" #Note: A value of "NO" does not currently work -export DUMP_SUFFIX="" -if [[ "$CDATE" -ge "2019092100" && "$CDATE" -le "2019110700" ]]; then - export DUMP_SUFFIX="p" # Use dumps from NCO GFS v15.3 parallel -fi -export RUNDIR="$STMP/RUNDIRS/$PSLOT" -export DATAROOT="$RUNDIR/$CDATE/$CDUMP" -export ARCDIR="$NOSCRUB/archive/$PSLOT" -export ICSDIR="@ICSDIR@" -export ATARDIR="/NCEPDEV/$HPSS_PROJECT/1year/$USER/$machine/scratch/$PSLOT" - -# Commonly defined parameters in JJOBS -export envir=${envir:-"prod"} -export NET="gfs" -export RUN=${RUN:-${CDUMP:-"gfs"}} -export COMINatmos=${ROTDIR}/${CDUMP}.${PDY}/${cyc}/atmos -export COMOUTatmos=${ROTDIR}/${CDUMP}.${PDY}/${cyc}/atmos -export COMINwave=${ROTDIR}/${CDUMP}.${PDY}/${cyc}/wave -export COMOUTwave=${ROTDIR}/${CDUMP}.${PDY}/${cyc}/wave - -export jlogfile="${EXPDIR}/logs/jlogfile" -export ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} -export LOGSCRIPT=${LOGSCRIPT:-""} -#export ERRSCRIPT=${ERRSCRIPT:-"err_chk"} -#export LOGSCRIPT=${LOGSCRIPT:-"startmsg"} -export REDOUT="1>" -export REDERR="2>" - -export SENDECF="NO" -export SENDCOM="NO" -export SENDDBN="NO" -export SENDDBN_NTC="NO" -export SENDSDM="NO" - -# Resolution specific parameters -export LEVS=128 -export CASE="@CASECTL@" -export CASE_ENKF="@CASEENS@" - -# Surface cycle update frequency -if [[ "$CDUMP" == "gdas" ]] ; then - export FHCYC=1 - export FTSFS=10 -elif [[ "$CDUMP" == "gfs" ]] ; then - export FHCYC=24 -fi - -# Output frequency of the forecast model (for cycling) -export FHMIN=0 -export FHMAX=9 -export FHOUT=3 - -# Cycle to run EnKF (set to BOTH for both gfs and gdas) -export EUPD_CYC="gdas" - -# GFS cycle info -export gfs_cyc=@gfs_cyc@ # 0: no GFS cycle, 1: 00Z only, 2: 00Z and 12Z only, 4: all 4 cycles. - -# GFS output and frequency -export FHMIN_GFS=0 - -export FHMAX_GFS_00=384 -export FHMAX_GFS_06=384 -export FHMAX_GFS_12=384 -export FHMAX_GFS_18=384 -export FHMAX_GFS=$(eval echo \${FHMAX_GFS_$cyc}) - -export FHOUT_GFS=3 -export FHMAX_HF_GFS=0 -export FHOUT_HF_GFS=1 -export ILPOST=1 # gempak output frequency up to F120 - -# GFS restart interval in hours -export restart_interval_gfs=0 - - -# I/O QUILTING, true--use Write Component; false--use GFDL FMS -# if quilting=true, choose OUTPUT_GRID as cubed_sphere_grid in netcdf or gaussian_grid -# if gaussian_grid, set OUTPUT_FILE for nemsio or netcdf -# WRITE_DOPOST=true, use inline POST -export QUILTING=".true." -export OUTPUT_GRID="gaussian_grid" -export OUTPUT_FILE="netcdf" -export WRITE_DOPOST=".true." - -# suffix options depending on file format -if [ $OUTPUT_FILE = "netcdf" ]; then - export SUFFIX=".nc" - export NEMSIO_IN=".false." - export NETCDF_IN=".true." -else - export SUFFIX=".nemsio" - export NEMSIO_IN=".true." - export NETCDF_IN=".false." -fi - -# IAU related parameters -export DOIAU="YES" # Enable 4DIAU for control with 3 increments -export IAUFHRS="3,6,9" -export IAU_FHROT=`echo $IAUFHRS | cut -c1` -export IAU_DELTHRS=6 -export IAU_OFFSET=6 -export DOIAU_ENKF="YES" # Enable 4DIAU for EnKF ensemble -export IAUFHRS_ENKF="3,6,9" -export IAU_DELTHRS_ENKF=6 -if [[ "$SDATE" = "$CDATE" ]]; then - export IAU_OFFSET=0 - export IAU_FHROT=0 -fi - -# Use Jacobians in eupd and thereby remove need to run eomg -export lobsdiag_forenkf=".true." - -# run GLDAS to spin up land ICs -export DO_GLDAS=YES -export gldas_cyc=00 - -# run wave component -export DO_WAVE=YES -export WAVE_CDUMP="both" - -# Microphysics Options: 99-ZhaoCarr, 8-Thompson; 6-WSM6, 10-MG, 11-GFDL -export imp_physics=11 - -# Shared parameters -# Hybrid related -export DOHYBVAR="YES" -export NMEM_ENKF=@NMEM_ENKF@ -export SMOOTH_ENKF="NO" -export l4densvar=".true." -export lwrite4danl=".true." - -# EnKF output frequency -if [ $DOHYBVAR = "YES" ]; then - export FHMIN_ENKF=3 - export FHMAX_ENKF=9 - if [ $l4densvar = ".true." ]; then - export FHOUT=1 - export FHOUT_ENKF=1 - else - export FHOUT_ENKF=3 - fi -fi - -# turned on nsst in anal and/or fcst steps, and turn off rtgsst -export DONST="YES" -if [ $DONST = "YES" ]; then export FNTSFA=" "; fi - -# The switch to apply SST elevation correction or not -export nst_anl=.true. - -# Analysis increments to zero in CALCINCEXEC -export INCREMENTS_TO_ZERO="'liq_wat_inc','icmr_inc'" - -if [ $OUTPUT_FILE = "nemsio" ]; then - export DO_CALC_INCREMENT="YES" - export DO_CALC_ANALYSIS="NO" -fi - -# Stratospheric increments to zero -export INCVARS_ZERO_STRAT="'sphum_inc','liq_wat_inc','icmr_inc'" -export INCVARS_EFOLD="5" - -# Swith to generate netcdf or binary diagnostic files. If not specified, -# script default to binary diagnostic files. Set diagnostic file -# variables here since used in both DA and vrfy jobs -export netcdf_diag=".true." -export binary_diag=".false." - -# Verification options -export DO_METP="YES" # Run METPLUS jobs - set METPLUS settings in config.metp -export DO_VSDB="YES" # Run VSDB package - set VSDB settings in config.vrfy - -# Archiving options -export HPSSARCH="YES" # save data to HPSS archive -export ARCH_CYC=00 # Archive data at this cycle for warm_start capability -export ARCH_WARMICFREQ=4 # Archive frequency in days for warm_start capability -export ARCH_FCSTICFREQ=1 # Archive frequency in days for gdas and gfs forecast-only capability - -export DELETE_COM_IN_ARCHIVE_JOB="YES" # NO=retain ROTDIR. YES default in arch.sh and earc.sh. - -echo "END: config.base" diff --git a/parm/config/config.base.nco.static b/parm/config/config.base.nco.static deleted file mode 100755 index b4f0262b58..0000000000 --- a/parm/config/config.base.nco.static +++ /dev/null @@ -1,238 +0,0 @@ -#!/bin/ksh -x - -########## config.base ########## -# Common to all steps - -echo "BEGIN: config.base" - -# Machine environment -export machine="WCOSS_DELL_P3" - -# EMC parallel or NCO production -export RUN_ENVIR="nco" - -# Account, queue, etc. -export ACCOUNT="GFS-T2O" -export QUEUE="prod" -export QUEUE_ARCH="dev_transfer" - -# Project to use in mass store: -HPSS_PROJECT=emc-global - -# Directories relative to installation areas: -export PARMgfs=$HOMEgfs/parm -export FIXgfs=$HOMEgfs/fix -export USHgfs=$HOMEgfs/ush -export UTILgfs=$HOMEgfs/util -export EXECgfs=$HOMEgfs/exec -export SCRgfs=$HOMEgfs/scripts - -######################################################################## - -# GLOBAL static environment parameters - -export NWPROD="/gpfs/dell1/nco/ops/nwprod" -export DMPDIR="/gpfs/dell3/emc/global/dump" -export RTMFIX=$CRTM_FIX - - -# Machine specific paths used everywhere - -# USER specific paths -# export HOMEDIR="/gpfs/dell2/emc/modeling/noscrub/$USER" - export HOMEDIR=$EXPDIR/HOMEDIR -# export STMP="/gpfs/dell3/stmp/$USER" - export STMP=$DATAROOT -# export PTMP="/gpfs/dell3/ptmp/$USER" - export PTMP=$ROTDIR -# export NOSCRUB="/gpfs/dell2/emc/modeling/noscrub/$USER" - export NOSCRUB=$EXPDIR/NOSCRUB - - # Base directories for various builds - export BASE_GIT="/gpfs/dell2/emc/modeling/noscrub/emc.glopara/git" - - -# Toggle to turn on/off GFS downstream processing. -export DO_BUFRSND="YES" -export DO_GEMPAK="YES" -export DO_AWIPS="YES" -export WAFSF="YES" # WAFS products - -# NO for retrospective parallel; YES for real-time parallel -export REALTIME="YES" - - -#################################################### -# DO NOT ADD MACHINE DEPENDENT STUFF BELOW THIS LINE -# IF YOU HAVE TO MAKE MACHINE SPECIFIC CHANGES BELOW -# FEEL FREE TO MOVE THEM ABOVE THIS LINE TO KEEP IT -# CLEAR -#################################################### -# Build paths relative to $HOMEgfs -export FIXgsi="$HOMEgfs/fix/fix_gsi" -export HOMEfv3gfs="$HOMEgfs/sorc/fv3gfs.fd" -export HOMEpost="$HOMEgfs" -export HOMEobsproc_prep="$BASE_GIT/obsproc/obsproc_prep.iss-46886.fv3gfs" -export HOMEobsproc_network="$BASE_GIT/obsproc/obsproc_global.iss-46886.fv3gfs" -export BASE_VERIF="$BASE_GIT/verif/global/tags/vsdb" - -# CONVENIENT utility scripts and other environment parameters -export NCP="/bin/cp -p" -export NMV="/bin/mv" -export NLN="/bin/ln -sf" -export VERBOSE="YES" -export KEEPDATA="NO" -export CHGRP_CMD="chgrp rstprod" -export NEMSIOGET="$HOMEgfs/exec/nemsio_get" - -# Machine environment, jobs, and other utility scripts -export BASE_ENV="$HOMEgfs/env" -export BASE_JOB="$HOMEgfs/jobs/rocoto" - -# EXPERIMENT specific environment parameters -export SDATE=2018080600 -export EDATE=2039123100 -export assim_freq=6 -export PSLOT="rtecffv3" -export EXPDIR="$EXPDIR" -export ROTDIR="$ROTDIR" -export ROTDIR_DUMP="YES" -export DUMP_SUFFIX="" -export RUNDIR="$DATAROOT" -export ARCDIR="$NOSCRUB/archive/$PSLOT" -export ICSDIR="/gpfs/dell2/ptmp/$USER/FV3ICS" -export ATARDIR="/NCEPDEV/$HPSS_PROJECT/1year/$USER/$machine/scratch/$PSLOT" - -# Commonly defined parameters in JJOBS -export envir=${envir:-"prod"} -export NET="gfs" -export RUN=${RUN:-${CDUMP:-"gfs"}} -export COMINatmos=${ROTDIR}/${CDUMP}.${PDY}/${cyc}/atmos -export COMOUTatmos=${ROTDIR}/${CDUMP}.${PDY}/${cyc}/atmos -export COMINwave=${ROTDIR}/${CDUMP}.${PDY}/${cyc}/wave -export COMOUTwave=${ROTDIR}/${CDUMP}.${PDY}/${cyc}/wave - -export ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} -export LOGSCRIPT=${LOGSCRIPT:-""} -#export ERRSCRIPT=${ERRSCRIPT:-"err_chk"} -#export LOGSCRIPT=${LOGSCRIPT:-"startmsg"} -export REDOUT="1>" -export REDERR="2>" - -export SENDECF=${SENDECF:-"NO"} -export SENDCOM=${SENDCOM:-"YES"} -export SENDDBN=${SENDDBN:-"YES"} -export SENDDBN_NTC=${SENDDBN_NTC:-"YES"} -export SENDSDM=${SENDSDM:-"NO"} - -# Resolution specific parameters -export LEVS=128 -export CASE="C768" -export CASE_ENKF="C384" - -# Surface cycle update frequency -if [[ "$CDUMP" == "gdas" ]] ; then - export FHCYC=1 - export FTSFS=10 -elif [[ "$CDUMP" == "gfs" ]] ; then - export FHCYC=24 -fi - -# Output frequency of the forecast model (for cycling) -export FHMIN=0 -export FHMAX=9 -export FHOUT=3 - -# GFS cycle info -export gfs_cyc=4 # 0: no GFS cycle, 1: 00Z only, 2: 00Z and 12Z only, 4: all 4 cycles. - -# GFS output and frequency -export FHMIN_GFS=0 - -export FHMAX_GFS_00=384 -export FHMAX_GFS_06=384 -export FHMAX_GFS_12=384 -export FHMAX_GFS_18=384 -export FHMAX_GFS=$(eval echo \${FHMAX_GFS_$cyc}) - -export FHOUT_GFS=3 -export FHMAX_HF_GFS=120 -export FHOUT_HF_GFS=1 - -# frequency for saving restart files. set to 6,12,24,48 etc -export restart_interval_gfs=12 - - -# I/O QUILTING, true--use Write Component; false--use GFDL FMS -# if quilting=true, choose OUTPUT_GRID as cubed_sphere_grid in netcdf or gaussian_grid -# if gaussian_grid, set OUTPUT_FILE for nemsio or netcdf -# WRITE_DOPOST=true, use inline POST -export QUILTING=".true." -export OUTPUT_GRID="gaussian_grid" -export OUTPUT_FILE="nemsio" -export WRITE_DOPOST=".true." - -# IAU related parameters -export DOIAU="NO" -export IAUFHRS=6 -export IAU_FHROT=`echo $IAUFHRS | cut -c1` -export IAU_DELTHRS=6 -export DOIAU_ENKF="NO" -export IAUFHRS_ENKF=6 -export IAU_DELTHRS_ENKF=6 -if [[ "$SDATE" = "$CDATE" ]]; then - export IAU_OFFSET=0 - export IAU_FHROT=0 -fi - -# run GLDAS to spin up land ICs -export DO_GLDAS=YES -export gldas_cyc=00 - -# run wave component -export DO_WAVE=YES - -# Microphysics Options: 99-ZhaoCarr, 8-Thompson; 6-WSM6, 10-MG, 11-GFDL -export imp_physics=11 - -# Shared parameters -# Hybrid related -export DOHYBVAR="YES" -export NMEM_ENKF=80 -export SMOOTH_ENKF="NO" -export l4densvar=".true." -export lwrite4danl=".false." - -# EnKF output frequency -if [ $DOHYBVAR = "YES" ]; then - export FHMIN_ENKF=3 - export FHMAX_ENKF=9 - if [ $l4densvar = ".true." ]; then - export FHOUT=1 - export FHOUT_ENKF=1 - else - export FHOUT_ENKF=3 - fi -fi - -# turned on nsst in anal and/or fcst steps, and turn off rtgsst - -export DONST="YES" -if [ $DONST = "YES" ]; then export FNTSFA=" "; fi - -# The switch to apply SST elevation correction or not -export nst_anl=.true. - -# Analysis increments to zero in CALCINCEXEC -export INCREMENTS_TO_ZERO="'delz_inc','clwmr_inc','icmr_inc'" - - -# Archiving options -export DELETE_COM_IN_ARCHIVE_JOB=YES -export HPSSARCH="NO" # save data to HPSS archive -export ARCH_CYC=00 # Archive data at this cycle for warm_start capability -export ARCH_WARMICFREQ=1 # Archive frequency in days for warm_start capability -export ARCH_FCSTICFREQ=1 # Archive frequency in days for gdas and gfs forecast-only capability - - -echo "END: config.base" diff --git a/parm/config/config.efcs b/parm/config/config.efcs deleted file mode 100755 index c326117d5d..0000000000 --- a/parm/config/config.efcs +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/ksh -x - -########## config.efcs ########## -# Ensemble forecast specific, dependency: config.fcst - -echo "BEGIN: config.efcs" - -# Source model specific information that is resolution dependent -. $EXPDIR/config.fv3 $CASE_ENKF - -# Get task specific resources -. $EXPDIR/config.resources efcs - -export npe_fv3=$npe_efcs - -if [ $QUILTING = ".true." ]; then - export npe_fv3=$(echo " $npe_fv3 + $WRITE_GROUP * $WRTTASK_PER_GROUP" | bc) - export npe_efcs=$npe_fv3 -fi - -# Number of enkf members per fcst job -export NMEM_EFCSGRP=2 -export RERUN_EFCSGRP="NO" - -# Turn off inline UPP for EnKF forecast -export WRITE_DOPOST=".false." - -# Stochastic physics parameters (only for ensemble forecasts) -export DO_SKEB="YES" -export SKEB=0.3 -export SKEB_TAU=21600. -export SKEB_LSCALE=250000. -export SKEBNORM=0 -export SKEB_NPASS=30 -export SKEB_VDOF=5 -export DO_SHUM="YES" -export SHUM=0.005 -export SHUM_TAU=21600. -export SHUM_LSCALE=500000. -export DO_SPPT="YES" -export SPPT=0.5 -export SPPT_TAU=21600. -export SPPT_LSCALE=500000. -export SPPT_LOGIT=".true." -export SPPT_SFCLIMIT=".true." - -if [ $QUILTING = ".true." -a $OUTPUT_GRID = "gaussian_grid" ]; then - export DIAG_TABLE="$HOMEgfs/parm/parm_fv3diag/diag_table_da" -else - export DIAG_TABLE="$HOMEgfs/parm/parm_fv3diag/diag_table_da_orig" -fi - -# FV3 model namelist parameters to over-ride -export restart_interval=${restart_interval:-6} - -# For IAU, write restarts at beginning of window also -if [ $DOIAU_ENKF = "YES" ]; then - export restart_interval="6 -1" - if [[ "$SDATE" = "$CDATE" ]]; then export restart_interval="3 -1"; fi -fi - -export OUTPUT_FILETYPES="$OUTPUT_FILE" -if [[ "$OUTPUT_FILE" == "netcdf" ]]; then - export ichunk2d=0; export jchunk2d=0 - export ichunk3d=0; export jchunk3d=0; export kchunk3d=0 - RESTILE=`echo $CASE_ENKF |cut -c 2-` - if [[ "$machine" == "WCOSS_DELL_P3" ]]; then - if [ $RESTILE -ge 384 ]; then - export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf' " - export ichunk2d=$((4*RESTILE)) - export jchunk2d=$((2*RESTILE)) - export ichunk3d=$((4*RESTILE)) - export jchunk3d=$((2*RESTILE)) - export kchunk3d=1 - else - export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf' " - fi - fi - if [[ "$machine" == "HERA" ]]; then - export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf_parallel' " - if [ $RESTILE -le 192 ]; then - export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf' " - fi - fi -fi - -# wave model -export cplwav=.false. - -echo "END: config.efcs" diff --git a/parm/config/config.fcst b/parm/config/config.fcst deleted file mode 100755 index 2809f422f0..0000000000 --- a/parm/config/config.fcst +++ /dev/null @@ -1,276 +0,0 @@ -#!/bin/ksh -x - -########## config.fcst ########## -# Forecast specific - -echo "BEGIN: config.fcst" - -# Source model specific information that is resolution dependent -. $EXPDIR/config.fv3 $CASE - -# Get task specific resources -. $EXPDIR/config.resources fcst - -if [ $DONST = "YES" ]; then - . $EXPDIR/config.nsst -fi - -export FORECASTSH="$HOMEgfs/scripts/exglobal_fcst_nemsfv3gfs.sh" -export FCSTEXECDIR="$HOMEgfs/exec" -export FCSTEXEC="global_fv3gfs.x" -export npe_fv3=$npe_fcst - -if [[ "$CDUMP" == "gfs" ]] ; then - export npe_fv3=$npe_fcst_gfs - export layout_x=$layout_x_gfs - export layout_y=$layout_y_gfs - export WRITE_GROUP=$WRITE_GROUP_GFS - export WRTTASK_PER_GROUP=$WRTTASK_PER_GROUP_GFS -fi - -if [ $QUILTING = ".true." ]; then - export npe_fv3=$(echo " $npe_fv3 + $WRITE_GROUP * $WRTTASK_PER_GROUP" | bc) - export npe_fcst=$npe_fv3 - export npe_fcst_gfs=$(echo " $npe_fcst_gfs + $WRITE_GROUP_GFS * $WRTTASK_PER_GROUP_GFS" | bc) -fi - -if [ $DO_WAVE = "YES" ] ; then - export npe_fcst=$((npe_fcst + npe_wav)) - if [ "$WAVE_CDUMP" = "gfs" -o "$WAVE_CDUMP" = "both" ]; then - export npe_fcst_gfs=$((npe_fcst_gfs + npe_wav_gfs)) - if [ "$CDUMP" = "gfs" ]; then npe_wav=$npe_wav_gfs ; fi - fi -fi - -# Model configuration -export TYPE="nh" -export MONO="non-mono" - -# Use stratosphere h2o physics -export h2o_phys=".true." - -# Options of stratosphere O3 physics reaction coefficients -export new_o3forc="YES" - -# do_ugwp=T: use unified CGWD and OGWD, and turbulent orographic form drag (TOFD) -# do_ugwp=F: use unified CGWD but old OGWD, TOFD is not uded. -export do_ugwp=".false." -export do_tofd=".true." -export launch_level=$(echo "$LEVS/2.35" |bc) - -# Sponge layer settings for L127 -if [ $LEVS = "128" -a "$CDUMP" = "gdas" ]; then - export tau=5.0 - export rf_cutoff=1.0e3 - export d2_bg_k1=0.20 - export d2_bg_k2=0.0 -fi - -# PBL/turbulance schemes -export hybedmf=".false." -export satmedmf=".true." -export isatmedmf=1 -tbf="" -if [ $satmedmf = ".true." ]; then tbf="_satmedmf" ; fi - -# Land surface model. (2--NoahMP, landice=F); (1--Noah, landice=T) -export lsm=1 -if [ $lsm -eq 2 ]; then - export lheatstrg=".false." - export landice=".false." -else - export lheatstrg=".false." - export landice=".true." -fi - -# Radiation options -export IAER=5111 ;#spectral band mapping method for aerosol optical properties -export iovr_lw=3 ;#de-correlation length cloud overlap method (Barker, 2008) -export iovr_sw=3 ;#de-correlation length cloud overlap method (Barker, 2008) -export icliq_sw=2 ;#cloud optical coeffs from AER's newer version v3.9-v4.0 for hu and stamnes - - -# Microphysics configuration -export dnats=0 -export cal_pre=".true." -export do_sat_adj=".false." -export random_clds=".true." - -if [ $imp_physics -eq 99 ]; then # ZhaoCarr - export ncld=1 - export FIELD_TABLE="$HOMEgfs/parm/parm_fv3diag/field_table_zhaocarr${tbf}" - export nwat=2 - -elif [ $imp_physics -eq 6 ]; then # WSM6 - export ncld=2 - export FIELD_TABLE="$HOMEgfs/parm/parm_fv3diag/field_table_wsm6${tbf}" - export nwat=6 - -elif [ $imp_physics -eq 8 ]; then # Thompson - export ncld=2 - export FIELD_TABLE="$HOMEgfs/parm/parm_fv3diag/field_table_thompson${tbf}" - export nwat=6 - -elif [ $imp_physics -eq 11 ]; then # GFDL - export ncld=5 - export FIELD_TABLE="$HOMEgfs/parm/parm_fv3diag/field_table_gfdl${tbf}" - export nwat=6 - export dnats=1 - export cal_pre=".false." - export do_sat_adj=".true." - export random_clds=".false." - export lgfdlmprad=".true." - export effr_in=".true." - export reiflag=2 - - export hord_mt_nh_nonmono=5 - export hord_xx_nh_nonmono=5 - export vtdm4_nh_nonmono=0.02 - export nord=2 - export dddmp=0.1 - export d4_bg=0.12 - -else - echo "Unknown microphysics option, ABORT!" - -fi -#--------------------------------------------------------------------- - -# ideflate: netcdf zlib lossless compression (0-9): 0 no compression -# nbits: netcdf lossy compression level (0-32): 0 lossless -export ideflate=1 -export nbits=14 -export ishuffle=0 -# compression for RESTART files written by FMS -export shuffle=1 -export deflate_level=1 - -export OUTPUT_FILETYPES="$OUTPUT_FILE" -if [[ "$OUTPUT_FILE" == "netcdf" ]]; then - export ichunk2d=0; export jchunk2d=0 - export ichunk3d=0; export jchunk3d=0; export kchunk3d=0 - RESTILE=`echo $CASE |cut -c 2-` - if [[ "$machine" == "WCOSS_DELL_P3" ]]; then - if [ $RESTILE -ge 768 ]; then - export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf_parallel' " - export ichunk3d=$((4*RESTILE)) - export jchunk3d=$((2*RESTILE)) - export kchunk3d=1 - else - export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf' " - fi - fi - if [[ "$machine" == "HERA" ]]; then - export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf_parallel' " - if [ $RESTILE -le 192 ]; then - export OUTPUT_FILETYPES=" 'netcdf_parallel' 'netcdf' " - fi - fi -fi - - -#--------------------------------------------------------------------- -# Disable the use of coupler.res; get model start time from model_configure -export USE_COUPLER_RES="NO" - -if [[ "$CDUMP" == "gdas" ]] ; then # GDAS cycle specific parameters - - # Variables used in DA cycling - if [ $QUILTING = ".true." -a $OUTPUT_GRID = "gaussian_grid" ]; then - export DIAG_TABLE="$HOMEgfs/parm/parm_fv3diag/diag_table_da" - else - export DIAG_TABLE="$HOMEgfs/parm/parm_fv3diag/diag_table_da_orig" - fi - - # Write restart files, where $number is current model start time. - # restart_interval: $number - # number=0, writes out restart files at the end of forecast. - # number>0, writes out restart files at the frequency of $number and at the end of forecast. - # restart_interval: "$number -1" - # writes out restart files only once at $number forecast hour. - # restart_interval: "$number1 $number2 $number3 ..." - # writes out restart file at the specified forecast hours - export restart_interval=${restart_interval:-6} - - # For IAU, write restarts at beginning of window also - if [ $DOIAU = "YES" ]; then - export restart_interval="6 9" - if [[ "$SDATE" = "$CDATE" ]]; then export restart_interval="3 6"; fi - fi - - # Choose coupling with wave - if [ $DO_WAVE = "YES" ]; then export cplwav=".true." ; fi - - # Turn on dry mass adjustment in GDAS - export adjust_dry_mass=".true." - -elif [[ "$CDUMP" == "gfs" ]] ; then # GFS cycle specific parameters - - # Write more variables to output - if [ $QUILTING = ".true." -a $OUTPUT_GRID = "gaussian_grid" ]; then - export DIAG_TABLE="$HOMEgfs/parm/parm_fv3diag/diag_table" - else - export DIAG_TABLE="$HOMEgfs/parm/parm_fv3diag/diag_table_orig" - fi - - # Write gfs restart files to rerun fcst from any break point - export restart_interval_gfs=${restart_interval_gfs:-0} - if [ $restart_interval_gfs -le 0 ]; then - export restart_interval=0 - else - rst_list="" - IAU_OFFSET=${IAU_OFFSET:-0} - [[ $DOIAU = "NO" ]] && export IAU_OFFSET=0 - xfh=$((restart_interval_gfs+(IAU_OFFSET/2))) - while [ $xfh -le $FHMAX_GFS ]; do - rst_list="$rst_list $xfh" - xfh=$((xfh+restart_interval_gfs)) - done - export restart_interval="$rst_list" - fi - - - # Choose coupling with wave - if [ $DO_WAVE = "YES" -a "$WAVE_CDUMP" != "gdas" ]; then - export cplwav=".true." - fi - - # Turn off dry mass adjustment in GFS - export adjust_dry_mass=".false." - - # Write each restart file in 16 small files to save time - export io_layout="4,4" - - # Set number of layers from the top over - # which two delta-Z filter is applied - export n_sponge=42 - - # Debug load balancing - #export KEEPDATA="YES" - #export ESMF_RUNTIME_PROFILE=ON - #export ESMF_RUNTIME_PROFILE_OUTPUT=SUMMARY - -fi - - -# Regrid tiles to global Gaussian grid in NEMSIO -export REGRID_NEMSIO_SH="$HOMEgfs/ush/fv3gfs_regrid_nemsio.sh" -if [ $DONST = YES ]; then - export REGRID_NEMSIO_TBL="$HOMEgfs/parm/parm_fv3diag/variable_table_da.txt" -else - export REGRID_NEMSIO_TBL="$HOMEgfs/parm/parm_fv3diag/variable_table_da_nonsst.txt" -fi - -# Remap tiles to global latlon grid in NetCDF -export REMAPSH="$HOMEgfs/ush/fv3gfs_remap.sh" -export master_grid="0p25deg" # 1deg 0p5deg 0p25deg 0p125deg etc -export npe_remap=$((npe_fcst < 240 ? npe_fcst : 240)) - -# Global latlon NetCDF to nemsio utility parameters -export NC2NEMSIOSH="$HOMEgfs/ush/fv3gfs_nc2nemsio.sh" - -# Remember config.efcs will over-ride these values for ensemble forecasts -# if these variables are re-defined there. -# Otherwise, the ensemble forecast will inherit from config.fcst - -echo "END: config.fcst" diff --git a/parm/config/config.fv3 b/parm/config/config.fv3 deleted file mode 100755 index 8aaaee3d8e..0000000000 --- a/parm/config/config.fv3 +++ /dev/null @@ -1,156 +0,0 @@ -#!/bin/ksh -x - -########## config.fv3 ########## -# FV3 model resolution specific parameters -# e.g. time-step, processor layout, physics and dynamics parameters -# This config sets default variables for FV3 for a given resolution -# User can over-ride after sourcing this config file - -if [ $# -ne 1 ]; then - - echo "Must specify an input resolution argument to set variables!" - echo "argument can be any one of the following:" - echo "C48 C96 C192 C384 C768 C1152 C3072" - exit 1 - -fi - -case_in=$1 - -echo "BEGIN: config.fv3" - - -if [[ "$machine" = "WCOSS_DELL_P3" ]]; then - export npe_node_max=28 -elif [[ "$machine" = "WCOSS_C" ]]; then - export npe_node_max=24 -elif [[ "$machine" = "THEIA" ]]; then - export npe_node_max=24 -elif [[ "$machine" = "JET" ]]; then - export npe_node_max=24 -elif [[ "$machine" = "HERA" ]]; then - export npe_node_max=40 -fi - - -# (Standard) Model resolution dependent variables -case $case_in in - "C48") - export DELTIM=450 - export layout_x=2 - export layout_y=4 - export layout_x_gfs=2 - export layout_y_gfs=4 - export npe_wav=14 - export npe_wav_gfs=14 - export nth_fv3=1 - export cdmbgwd="0.071,2.1,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling - export WRITE_GROUP=1 - export WRTTASK_PER_GROUP=$npe_node_max - export WRITE_GROUP_GFS=1 - export WRTTASK_PER_GROUP_GFS=$npe_node_max - export WRTIOBUF="4M" - ;; - "C96") - export DELTIM=450 - export layout_x=4 - export layout_y=4 - export layout_x_gfs=4 - export layout_y_gfs=4 - export npe_wav=14 - export npe_wav_gfs=14 - export nth_fv3=1 - export cdmbgwd="0.14,1.8,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling - export WRITE_GROUP=1 - export WRTTASK_PER_GROUP=$npe_node_max - export WRITE_GROUP_GFS=1 - export WRTTASK_PER_GROUP_GFS=$npe_node_max - export WRTIOBUF="4M" - ;; - "C192") - export DELTIM=450 - export layout_x=4 - export layout_y=6 - export layout_x_gfs=4 - export layout_y_gfs=6 - export npe_wav=21 - export npe_wav_gfs=21 - export nth_fv3=2 - export cdmbgwd="0.23,1.5,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling - export WRITE_GROUP=1 - export WRTTASK_PER_GROUP=$npe_node_max - export WRITE_GROUP_GFS=2 - export WRTTASK_PER_GROUP_GFS=$npe_node_max - export WRTIOBUF="8M" - ;; - "C384") - export DELTIM=240 - export layout_x=8 - export layout_y=8 - export layout_x_gfs=6 - export layout_y_gfs=6 - export npe_wav=35 - export npe_wav_gfs=35 - export nth_fv3=1 - export cdmbgwd="1.1,0.72,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling - export WRITE_GROUP=1 - export WRTTASK_PER_GROUP=$npe_node_max - export WRITE_GROUP_GFS=2 - export WRTTASK_PER_GROUP_GFS=$npe_node_max - export WRTIOBUF="16M" - ;; - "C768") - export DELTIM=150 - export layout_x=12 - export layout_y=8 - export layout_x_gfs=16 - export layout_y_gfs=12 - export npe_wav=70 - export npe_wav_gfs=70 - export nth_fv3=4 - export cdmbgwd="4.0,0.15,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling - export WRITE_GROUP=2 - export WRTTASK_PER_GROUP=$(echo "2*$npe_node_max" |bc) - export WRITE_GROUP_GFS=4 - export WRTTASK_PER_GROUP_GFS=$(echo "2*$npe_node_max" |bc) - export WRTIOBUF="32M" - ;; - "C1152") - export DELTIM=120 - export layout_x=8 - export layout_y=16 - export layout_x_gfs=8 - export layout_y_gfs=16 - export npe_wav=140 - export npe_wav_gfs=140 - export nth_fv3=4 - export cdmbgwd="4.0,0.10,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling - export WRITE_GROUP=4 - export WRTTASK_PER_GROUP=$(echo "2*$npe_node_max" |bc) - export WRITE_GROUP_GFS=4 - export WRTTASK_PER_GROUP_GFS=$(echo "2*$npe_node_max" |bc) - export WRTIOBUF="48M" - ;; - "C3072") - export DELTIM=90 - export layout_x=16 - export layout_y=32 - export layout_x_gfs=16 - export layout_y_gfs=32 - export npe_wav=140 - export npe_wav_gfs=140 - export nth_fv3=4 - export cdmbgwd="4.0,0.05,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling - export WRITE_GROUP=4 - export WRTTASK_PER_GROUP=$(echo "3*$npe_node_max" |bc) - export WRITE_GROUP_GFS=4 - export WRTTASK_PER_GROUP_GFS=$(echo "3*$npe_node_max" |bc) - export WRTIOBUF="64M" - ;; - *) - echo "grid $case_in not supported, ABORT!" - exit 1 - ;; -esac - -echo "END: config.fv3" diff --git a/parm/config/config.fv3ic b/parm/config/config.fv3ic deleted file mode 100755 index eaed3892ea..0000000000 --- a/parm/config/config.fv3ic +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/ksh -x - -########## config.fv3ic ########## -# Convert GFS initial conditions into FV3 initial conditions - -echo "BEGIN: config.fv3ic" - -# Task and thread configuration -export wtime_fv3ic="00:30:00" -export npe_fv3ic=1 -export npe_node_fv3ic=1 -export nth_fv3ic=${NTHREADS_CHGRES:-24} -if [ $machine = HERA ]; then - export npe_fv3ic=4 - export npe_node_fv3ic=4 - export nth_fv3ic=1 -fi - -echo "END: config.fv3ic" diff --git a/parm/config/config.getic b/parm/config/config.getic deleted file mode 100755 index a754454264..0000000000 --- a/parm/config/config.getic +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/ksh -x - -########## config.getic ########## -# Fetching GFS initial conditions specific - -echo "BEGIN: config.getic" - -# Get task specific resources -. $EXPDIR/config.resources getic - -# We should just be supporting the OPSGFS only -export ics_from="opsgfs" # initial conditions from opsgfs or pargfs - -# Provide a parallel experiment name and path to HPSS archive -if [ $ics_from = "pargfs" ]; then - export parexp="prnemsrn" - export HPSS_PAR_PATH="/5year/NCEPDEV/emc-global/emc.glopara/WCOSS_C/$parexp" -fi - -echo "END: config.getic" diff --git a/parm/config/config.gldas b/parm/config/config.gldas deleted file mode 100755 index 456d205c9b..0000000000 --- a/parm/config/config.gldas +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/ksh -x - -########## config.gldas ########## -# GDAS gldas step specific - -echo "BEGIN: config.gldas" - -# Get task specific resources -. $EXPDIR/config.resources gldas - -export GLDASSH=$HOMEgfs/scripts/exgdas_gldas.sh -export gldas_spinup_hours=72 -export CPCGAUGE=$DMPDIR - - -echo "END: config.gldas" diff --git a/parm/config/config.metp b/parm/config/config.metp deleted file mode 100755 index aaea79db62..0000000000 --- a/parm/config/config.metp +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/ksh -x - -########## config.metp ########## -# METplus verification step specific - -echo "BEGIN: config.metp" - -# Get task specific resources -. $EXPDIR/config.resources metp - -export RUN_GRID2GRID_STEP1="YES" # Run grid-to-grid verification using METplus -export RUN_GRID2OBS_STEP1="YES" # Run grid-to-obs verification using METplus -export RUN_PRECIP_STEP1="YES" # Run precip verification using METplus - - -#---------------------------------------------------------- -# METplus, Verify grid-to-grid, and/or grid-to-obs, and/or precipitation options -#---------------------------------------------------------- - -if [ "$CDUMP" = "gfs" ] ; then - if [ $RUN_GRID2GRID_STEP1 = "YES" -o $RUN_GRID2OBS_STEP1 = "YES" -o $RUN_PRECIP_STEP1 = "YES" ]; then - export HOMEverif_global=${HOMEgfs}/sorc/verif-global.fd - export VERIF_GLOBALSH=$HOMEverif_global/ush/run_verif_global_in_global_workflow.sh - ## INPUT DATA SETTINGS - export model_list=$PSLOT - export model_data_dir_list=$ARCDIR/.. - export model_fileformat_list="pgbf{lead?fmt=%H}.${CDUMP}.{init?fmt=%Y%m%d%H}.grib2" - export model_hpssdir_list=$ATARDIR/.. - export get_data_from_hpss="NO" - export hpss_walltime="10" - ## OUTPUT SETTINGS - export OUTPUTROOT=$RUNDIR/$CDUMP/$CDATE/vrfy/metplus_exp - export model_arch_dir_list=$ARCDIR/.. - export make_met_data_by="VALID" - export gather_by="VSDB" - ## DATE SETTINGS - export VRFYBACK_HRS="24" - ## METPLUS SETTINGS - export METplus_verbosity="INFO" - export MET_verbosity="2" - export log_MET_output_to_METplus="yes" - ## FORECAST VERIFICATION SETTINGS - export fhr_min=$FHMIN_GFS - export fhr_max=$FHMAX_GFS - # GRID-TO-GRID STEP 1 - export g2g1_type_list="anom pres sfc" - export g2g1_anl_name="self_anl" - export g2g1_anl_fileformat_list="pgbanl.gfs.{valid?fmt=%Y%m%d%H}.grib2" - export g2g1_grid="G002" - # GRID-TO-OBS STEP 1 - export g2o1_type_list="upper_air conus_sfc" - export g2o1_obtype_upper_air="ADPUPA" - export g2o1_grid_upper_air="G003" - export g2o1_fhr_out_upper_air="6" - export g2o1_obtype_conus_sfc="ONLYSF ADPUPA" - export g2o1_grid_conus_sfc="G104" - export g2o1_fhr_out_conus_sfc="3" - export g2o1_prepbufr_data_runhpss="YES" - # PRECIP STEP 1 - export precip1_obtype="ccpa" - export precip1_accum_length="24" - export precip1_model_bucket_list="06" - export precip1_model_varname_list="APCP" - export precip1_model_fileformat_list="pgbf{lead?fmt=%H}.gfs.{init?fmt=%Y%m%d%H}.grib2" - export precip1_grid="G211" - fi -fi - -echo "END: config.metp" diff --git a/parm/config/config.nsst b/parm/config/config.nsst deleted file mode 100755 index a59ca19495..0000000000 --- a/parm/config/config.nsst +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/ksh -x - -########## config.nsst ########## -# NSST specific - -echo "BEGIN: config.nsst" - -# NSST parameters contained within nstf_name - -# nstf_name(1) : NST_MODEL (NSST Model) : 0 = OFF, 1 = ON but uncoupled, 2 = ON and coupled -export NST_MODEL=2 - -# nstf_name(2) : NST_SPINUP : 0 = OFF, 1 = ON, -export NST_SPINUP=0 -#if [[ "$CDATE" = $SDATE ]]; then -# export NST_SPINUP=1 -#fi - -# nstf_name(3) : NST_RESV (Reserved, NSST Analysis) : 0 = OFF, 1 = ON -export NST_RESV=0 - -# nstf_name(4,5) : ZSEA1, ZSEA2 the two depths to apply vertical average (bias correction) -export ZSEA1=0 -export ZSEA2=0 - -export NST_GSI=3 # default 0: No NST info at all; - # 1: Input NST info but not used in GSI; - # 2: Input NST info, used in CRTM simulation, no Tr analysis - # 3: Input NST info, used in both CRTM simulation and Tr analysis -export NSTINFO=0 # number of elements added in obs. data array (default = 0) -if [ $NST_GSI -gt 0 ]; then export NSTINFO=4; fi - -echo "END: config.nsst" diff --git a/parm/config/config.post b/parm/config/config.post deleted file mode 100755 index 4e33da0cbe..0000000000 --- a/parm/config/config.post +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/ksh -x - -########## config.post ########## -# Post specific - -echo "BEGIN: config.post" - -# Get task specific resources -. $EXPDIR/config.resources post - -# Convert nemsio files to grib files using post job -#------------------------------------------- - -# No. of concurrent post jobs [0 implies sequential] -export NPOSTGRP=42 -export OUTTYP=4 -export MODEL_OUT_FORM=binarynemsiompiio -if [ $OUTPUT_FILE = "netcdf" ]; then - export MODEL_OUT_FORM=netcdfpara -fi - -# Post driver job that calls gfs_nceppost.sh and downstream jobs -export POSTJJOBSH="$HOMEpost/jobs/JGLOBAL_NCEPPOST" -export GFSDOWNSH="$HOMEpost/ush/fv3gfs_downstream_nems.sh" -export GFSDWNSH="$HOMEpost/ush/fv3gfs_dwn_nems.sh" - -export POSTGPSH="$HOMEpost/ush/gfs_nceppost.sh" -export POSTGPEXEC="$HOMEpost/exec/gfs_ncep_post" -export GOESF=YES # goes image -export FLXF=YES # grib2 flux file written by post - -export npe_postgp=$npe_post -export nth_postgp=1 - -export GFS_DOWNSTREAM="YES" -export downset=2 -if [ $machine = "WCOSS_DELL_P3" ]; then - export npe_dwn=28 -else - export npe_dwn=24 -fi - -export GRIBVERSION='grib2' -export SENDCOM="YES" - -echo "END: config.post" diff --git a/parm/config/config.postsnd b/parm/config/config.postsnd deleted file mode 100755 index 9c68e5284e..0000000000 --- a/parm/config/config.postsnd +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/ksh -x - -########## config.postsnd ########## -# GFS bufr sounding step specific - -echo "BEGIN: config.postsnd" - -# Get task specific resources -. $EXPDIR/config.resources postsnd - -export POSTSNDSH=$HOMEgfs/jobs/JGFS_POSTSND - -echo "END: config.postsnd" diff --git a/parm/config/config.prep b/parm/config/config.prep deleted file mode 100755 index c7f9965f88..0000000000 --- a/parm/config/config.prep +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/ksh -x - -########## config.prep ########## -# Prep step specific - -echo "BEGIN: config.prep" - -# Get task specific resources -. $EXPDIR/config.resources prep - -export DO_MAKEPREPBUFR="YES" # if NO, will copy prepbufr from globaldump -export dictionaries_ver=v3.3.0 - -# Relocation and syndata QC -export PROCESS_TROPCY=${PROCESS_TROPCY:-NO} -[[ $RUN_ENVIR == "nco" && $envir == "prod" ]] && export PROCESS_TROPCY="YES" -export DO_RELOCATE="NO" -export TROPCYQCRELOSH="$HOMEgfs/scripts/extropcy_qc_reloc.sh" -export SENDCOM=YES - -export COMINsyn=${COMINsyn:-$(compath.py gfs/prod/syndat)} -if [ $machine = "HERA" ]; then - export COMINsyn="${COMROOT}/arch/prod/syndat" -fi - -export HOMERELO=$HOMEgfs -export EXECRELO=${HOMERELO}/exec -export FIXRELO=${HOMERELO}/fix/fix_am -export USHRELO=${HOMERELO}/ush - - -# Adjust observation error for GFS v16 parallels -# -# NOTE: Remember to set OBERROR in config.anal as PRVT is set below -# -# Set default prepobs_errtable.global -export PRVT=$FIXgsi/prepobs_errtable.global - - -# Set prepobs.errtable.global for start of GFS v16 parallels -if [[ "$CDATE" -ge "2019021900" && "$CDATE" -lt "2019110706" ]]; then - export PRVT=$FIXgsi/gfsv16_historical/prepobs_errtable.global.2019021900 -fi - -# Place GOES-15 AMVs in monitor, assimilate GOES-17 AMVs, assimilate KOMPSAT-5 gps - if [[ "$CDATE" -ge "2019110706" && "$CDATE" -lt "2020040718" ]]; then - export PRVT=$FIXgsi/gfsv16_historical/prepobs_errtable.global.2019110706 - fi - -#NOTE: -# As of 2020040718, gfsv16_historical/prepobs_errtable.global.2020040718 is -# identical to ../prepobs_errtable.global. Thus, the logic below is not -# needed at this time - -# Set observation errors for type 135 (T) & 235 (uv) Canadian AMDAR observations -##if [[ "$CDATE" -ge "2020040718" && "$CDATE" -lt "YYYMMDDHH" ]]; then -## export PRVT=$EXPDIR/prepobs_errtable.global -##fi - -echo "END: config.prep" diff --git a/parm/config/config.prepbufr b/parm/config/config.prepbufr deleted file mode 100755 index c90a732c41..0000000000 --- a/parm/config/config.prepbufr +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/ksh -x - -########## config.prepbufr ########## -# PREPBUFR specific configuration - -echo "BEGIN: config.prepbufr" - -# Get task specific resources -. $EXPDIR/config.resources prepbufr - -# Set variables - -if [ $machine = "HERA" ]; then - export GESROOT=/scratch1/NCEPDEV/rstprod # set by module prod_envir on WCOSS_C -fi - -echo "END: config.prepbufr" diff --git a/parm/config/config.resources b/parm/config/config.resources deleted file mode 100755 index 73b0ce77e3..0000000000 --- a/parm/config/config.resources +++ /dev/null @@ -1,379 +0,0 @@ -#!/bin/ksh -x - -########## config.resources ########## -# Set resource information for job tasks -# e.g. walltime, node, cores per node, memory etc. - -if [ $# -ne 1 ]; then - - echo "Must specify an input task argument to set resource variables!" - echo "argument can be any one of the following:" - echo "anal analcalc analdiag gldas fcst post vrfy metp arch echgres" - echo "eobs ediag eomg eupd ecen esfc efcs epos earc" - echo "waveinit waveprep wavepostsbs" - echo "wavegempak waveawipsbulls waveawipsgridded" - echo "postsnd awips gempak" - echo "wafs wafsgrib2 wafsblending wafsgrib20p25 wafsblending0p25 wafsgcip" - exit 1 - -fi - -step=$1 - -echo "BEGIN: config.resources" - -if [[ "$machine" = "WCOSS_DELL_P3" ]]; then - export npe_node_max=28 - if [ "$QUEUE" = "dev2" -o "$QUEUE" = "devonprod2" -o "$QUEUE" = "devmax2" ]; then # WCOSS Dell 3.5 - export npe_node_max=40 - fi -elif [[ "$machine" = "WCOSS_C" ]]; then - export npe_node_max=24 -elif [[ "$machine" = "JET" ]]; then - export npe_node_max=24 -elif [[ "$machine" = "HERA" ]]; then - export npe_node_max=40 -fi - -if [ $step = "prep" -o $step = "prepbufr" ]; then - - eval "export wtime_$step='00:45:00'" - eval "export npe_$step=4" - eval "export npe_node_$step=4" - eval "export nth_$step=1" - -elif [ $step = "waveinit" ]; then - - export wtime_waveinit="00:10:00" - export npe_waveinit=10 - export nth_waveinit=1 - export npe_node_waveinit=$(echo "$npe_node_max / $nth_waveinit" | bc) - export NTASKS=${npe_waveinit} - -elif [ $step = "waveprep" ]; then - - export wtime_waveprep="00:30:00" - export npe_waveprep=115 - export nth_waveprep=1 - export npe_node_waveprep=$(echo "$npe_node_max / $nth_waveprep" | bc) - export NTASKS=${npe_waveprep} - -elif [ $step = "wavepostsbs" ]; then - - export wtime_wavepostsbs="06:00:00" - export npe_wavepostsbs=280 - export nth_wavepostsbs=1 - export npe_node_wavepostsbs=$(echo "$npe_node_max / $nth_wavepostsbs" | bc) - export NTASKS=${npe_wavepostsbs} - -elif [ $step = "wavegempak" ]; then - - export wtime_wavegempak="01:00:00" - export npe_wavegempak=$npe_node_max - export nth_wavegempak=1 - export npe_node_wavegempak=$(echo "$npe_node_max / $nth_wavegempak" | bc) - export NTASKS=${npe_wavegempak} - -elif [ $step = "waveawipsbulls" ]; then - - export wtime_waveawipsbulls="00:30:00" - export npe_waveawipsbulls=$npe_node_max - export nth_waveawipsbulls=1 - export npe_node_waveawipsbulls=$(echo "$npe_node_max / $nth_waveawipsbulls" | bc) - export NTASKS=${npe_waveawipsbulls} - -elif [ $step = "waveawipsgridded" ]; then - - export wtime_waveawipsgridded="00:30:00" - export npe_waveawipsgridded=$npe_node_max - export nth_waveawipsgridded=1 - export npe_node_waveawipsgridded=$(echo "$npe_node_max / $nth_waveawipsgridded" | bc) - export NTASKS=${npe_waveawipsgridded} - -elif [ $step = "anal" ]; then - - export wtime_anal="02:00:00" - export npe_anal=800 - export nth_anal=4 - if [ $CASE = "C384" ]; then - export npe_anal=160 - export nth_anal=10 - fi - if [ $CASE = "C192" -o $CASE = "C96" -o $CASE = "C48" ]; then export npe_anal=84; fi - if [[ "$machine" = "WCOSS_DELL_P3" ]]; then export nth_anal=7; fi - export npe_node_anal=$(echo "$npe_node_max / $nth_anal" | bc) - export nth_cycle=$npe_node_max - if [[ "$machine" == "WCOSS_C" ]]; then export memory_anal="3072M"; fi - -elif [ $step = "analcalc" ]; then - - export wtime_analcalc="02:00:00" - export npe_analcalc=127 - export nth_analcalc=1 - export npe_node_analcalc=$npe_node_max - if [[ "$machine" = "WCOSS_DELL_P3" ]]; then export npe_analcalc=127 ; fi - -elif [ $step = "analdiag" ]; then - - export wtime_analdiag="02:00:00" - export npe_analdiag=112 - export nth_analdiag=1 - export npe_node_analdiag=$npe_node_max - if [[ "$machine" == "WCOSS_C" ]]; then export memory_analdiag="3072M"; fi - -elif [ $step = "gldas" ]; then - - export wtime_gldas="02:00:00" - export npe_gldas=96 - export nth_gldas=1 - export npe_node_gldas=$npe_node_max - export npe_gaussian=96 - export nth_gaussian=1 - export npe_node_gaussian=24 - if [[ "$machine" = "WCOSS_DELL_P3" ]]; then export npe_gldas=112 ; fi - if [[ "$machine" == "WCOSS_C" ]]; then export memory_gldas="3072M"; fi - -elif [ $step = "fcst" ]; then - - export wtime_fcst="01:00:00" - export wtime_fcst_gfs="08:00:00" - export npe_fcst=$(echo "$layout_x * $layout_y * 6" | bc) - export npe_fcst_gfs=$(echo "$layout_x_gfs * $layout_y_gfs * 6" | bc) - export nth_fcst=${nth_fv3:-2} - export npe_node_fcst=$(echo "$npe_node_max / $nth_fcst" | bc) - if [[ "$machine" == "WCOSS_C" ]]; then export memory_fcst="1024M"; fi - -elif [ $step = "post" ]; then - - export wtime_post="02:00:00" - export wtime_post_gfs="06:00:00" - export npe_post=48 - export nth_post=1 - export npe_node_post=12 - export npe_node_dwn=$npe_node_max - if [[ "$machine" = "WCOSS_DELL_P3" ]]; then export npe_node_post=14 ; fi - if [[ "$machine" == "WCOSS_C" ]]; then export memory_post="3072M"; fi - -elif [ $step = "wafs" ]; then - - export wtime_wafs="00:30:00" - export npe_wafs=1 - export npe_node_wafs=1 - export nth_wafs=1 - -elif [ $step = "wafsgcip" ]; then - - export wtime_wafsgcip="00:30:00" - export npe_wafsgcip=2 - export npe_node_wafsgcip=1 - export nth_wafsgcip=1 - -elif [ $step = "wafsgrib2" ]; then - - export wtime_wafsgrib2="00:30:00" - export npe_wafsgrib2=1 - export npe_node_wafsgrib2=1 - export nth_wafsgrib2=1 - -elif [ $step = "wafsblending" ]; then - - export wtime_wafsblending="00:30:00" - export npe_wafsblending=1 - export npe_node_wafsblending=1 - export nth_wafsblending=1 - -elif [ $step = "wafsgrib20p25" ]; then - - export wtime_wafsgrib20p25="00:30:00" - export npe_wafsgrib20p25=1 - export npe_node_wafsgrib20p25=1 - export nth_wafsgrib20p25=1 - -elif [ $step = "wafsblending0p25" ]; then - - export wtime_wafsblending0p25="00:30:00" - export npe_wafsblending0p25=1 - export npe_node_wafsblending0p25=1 - export nth_wafsblending0p25=1 - -elif [ $step = "vrfy" ]; then - - export wtime_vrfy="03:00:00" - export wtime_vrfy_gfs="06:00:00" - export npe_vrfy=3 - export nth_vrfy=1 - export npe_node_vrfy=1 - export npe_vrfy_gfs=1 - export npe_node_vrfy_gfs=1 - if [[ "$machine" == "WCOSS_C" ]]; then - export memory_vrfy="3072M" - elif [[ "$machine" == "HERA" ]]; then - export memory_vrfy="16384M" - fi - -elif [ $step = "metp" ]; then - - export nth_metp=1 - export wtime_metp="03:00:00" - export npe_metp=4 - export npe_node_metp=4 - export wtime_metp_gfs="06:00:00" - export npe_metp_gfs=4 - export npe_node_metp_gfs=4 - if [[ "$machine" == "WCOSS_C" ]]; then - export memory_metp="3072M" - elif [[ "$machine" == "THEIA" ]]; then - export memory_metp="16384M" - fi - -elif [ $step = "echgres" ]; then - - export wtime_echgres="01:00:00" - export npe_echgres=3 - export nth_echgres=$npe_node_max - export npe_node_echgres=1 - -elif [ $step = "arch" -o $step = "earc" -o $step = "getic" ]; then - - eval "export wtime_$step='06:00:00'" - eval "export npe_$step=1" - eval "export npe_node_$step=1" - eval "export nth_$step=1" - eval "export memory_$step=2048M" - -elif [ $step = "eobs" -o $step = "eomg" ]; then - - - export wtime_eobs="00:30:00" - export wtime_eomg="01:00:00" - if [ $CASE = "C768" ]; then - export npe_eobs=100 - elif [ $CASE = "C384" ]; then - export npe_eobs=42 - elif [ $CASE = "C192" ]; then - export npe_eobs=28 - elif [ $CASE = "C96" -o $CASE = "C48" ]; then - export npe_eobs=14 - fi - export nth_eobs=2 - if [[ "$machine" = "WCOSS_DELL_P3" ]]; then export nth_eobs=7; fi - export npe_node_eobs=$(echo "$npe_node_max / $nth_eobs" | bc) - if [[ "$machine" == "WCOSS_C" ]]; then export memory_eobs="3072M"; fi - -elif [ $step = "ediag" ]; then - - export wtime_ediag="02:00:00" - export npe_ediag=56 - export nth_ediag=1 - export npe_node_ediag=$npe_node_max - if [[ "$machine" == "WCOSS_C" ]]; then export memory_ediag="3072M"; fi - -elif [ $step = "eupd" ]; then - - export wtime_eupd="01:30:00" - if [ $CASE = "C768" ]; then - export npe_eupd=540 - export nth_eupd=6 - if [[ "$machine" = "WCOSS_DELL_P3" ]]; then - export nth_eupd=9 - fi - elif [ $CASE = "C384" ]; then - export npe_eupd=270 - export nth_eupd=2 - if [[ "$machine" = "WCOSS_DELL_P3" ]]; then - export nth_eupd=9 - fi - if [[ "$machine" = "HERA" ]]; then - export npe_eupd=84 - export nth_eupd=10 - fi - elif [ $CASE = "C192" -o $CASE = "C96" -o $CASE = "C48" ]; then - export npe_eupd=42 - export nth_eupd=2 - fi - export npe_node_eupd=$(echo "$npe_node_max / $nth_eupd" | bc) - if [[ "$machine" == "WCOSS_C" ]]; then - export memory_eupd="3072M" - fi - -elif [ $step = "ecen" ]; then - - export wtime_ecen="00:30:00" - export npe_ecen=80 - export nth_ecen=6 - if [[ "$machine" = "WCOSS_DELL_P3" ]]; then export nth_ecen=7; fi - if [ $CASE = "C384" -o $CASE = "C192" -o $CASE = "C96" -o $CASE = "C48" ]; then export nth_ecen=2; fi - export npe_node_ecen=$(echo "$npe_node_max / $nth_ecen" | bc) - export nth_cycle=$nth_ecen - if [[ "$machine" == "WCOSS_C" ]]; then export memory_ecen="3072M"; fi - -elif [ $step = "esfc" ]; then - - export wtime_esfc="03:00:00" - export npe_esfc=80 - export npe_node_esfc=$npe_node_max - export nth_esfc=1 - export nth_cycle=$nth_esfc - if [[ "$machine" == "WCOSS_C" ]]; then export memory_esfc="3072M"; fi - -elif [ $step = "efcs" ]; then - - export wtime_efcs="03:00:00" - export npe_efcs=$(echo "$layout_x * $layout_y * 6" | bc) - export nth_efcs=${nth_fv3:-2} - export npe_node_efcs=$(echo "$npe_node_max / $nth_efcs" | bc) - if [[ "$machine" == "WCOSS_C" ]]; then export memory_efcs="254M"; fi - -elif [ $step = "epos" ]; then - - export wtime_epos="03:00:00" - export npe_epos=80 - export nth_epos=6 - if [[ "$machine" = "WCOSS_DELL_P3" ]]; then export nth_epos=7; fi - export npe_node_epos=$(echo "$npe_node_max / $nth_epos" | bc) - if [[ "$machine" == "WCOSS_C" ]]; then export memory_epos="254M"; fi - -elif [ $step = "postsnd" ]; then - - export wtime_postsnd="02:00:00" - export npe_postsnd=40 - export nth_postsnd=1 - export npe_node_postsnd=4 - export npe_postsndcfp=9 - export npe_node_postsndcfp=3 - if [ $OUTPUT_FILE == "nemsio" ]; then - export npe_postsnd=13 - export npe_node_postsnd=4 - fi - if [[ "$machine" = "HERA" ]]; then export npe_node_postsnd=2; fi - if [[ "$machine" == "WCOSS_C" ]]; then export memory_postsnd="254M"; fi - -elif [ $step = "awips" ]; then - - export wtime_awips="03:30:00" - export npe_awips=4 - export npe_node_awips=4 - export nth_awips=2 - if [[ "$machine" == "WCOSS_DELL_P3" ]]; then - export npe_awips=2 - export npe_node_awips=2 - export nth_awips=1 - fi - if [[ "$machine" == "WCOSS_C" ]]; then export memory_awips="2048M"; fi - -elif [ $step = "gempak" ]; then - - export wtime_gempak="02:00:00" - export npe_gempak=17 - export npe_node_gempak=4 - export nth_gempak=3 - if [[ "$machine" == "WCOSS_C" ]]; then export memory_gempak="254M"; fi - -else - - echo "Invalid step = $step, ABORT!" - exit 2 - -fi - -echo "END: config.resources" diff --git a/parm/config/config.vrfy b/parm/config/config.vrfy deleted file mode 100755 index 065ea57c8a..0000000000 --- a/parm/config/config.vrfy +++ /dev/null @@ -1,195 +0,0 @@ -#!/bin/ksh -x - -########## config.vrfy ########## -# Verification step specific - -echo "BEGIN: config.vrfy" - -# Get task specific resources -. $EXPDIR/config.resources vrfy - -export DO_VSDB=${DO_VSDB:-"NO"} # Switch to run VSDB package; set in config.base - -export VDUMP="gfs" # Verifying dump -export CDUMPFCST="gdas" # Fit-to-obs with GDAS/GFS prepbufr -export CDFNL="gdas" # Scores verification against GDAS/GFS analysis - -export MKPGB4PRCP="YES" # Make 0.25-deg pgb files in ARCDIR for precip verification -export VRFYFITS="YES" # Fit to observations -export VSDB_STEP1="YES" # Populate VSDB database -export VSDB_STEP2="NO" -export VRFYG2OBS="YES" # Grid to observations, see note below if turning ON -export VRFYPRCP="YES" # Precip threat scores -export VRFYRAD="YES" # Radiance data assimilation monitoring -export VRFYOZN="YES" # Ozone data assimilation monitoring -export VRFYMINMON="YES" # GSI minimization monitoring -export VRFYTRAK="YES" # Hurricane track verification -export VRFYGENESIS="YES" # Cyclone genesis verification -export VRFYFSU="NO" # Cyclone genesis verification (FSU) -export RUNMOS="NO" # whether to run entire MOS package - -#------------------------------------------------- -# Fit to Observations -#------------------------------------------------- - -if [ $VRFYFITS = "YES" ]; then - - export PRVT=$HOMEgfs/fix/fix_gsi/prepobs_errtable.global - export HYBLEVS=$HOMEgfs/fix/fix_am/global_hyblev.l${LEVS}.txt - export CUE2RUN=$QUEUE - - export VBACKUP_FITS=24 - - export CONVNETC="NO" - if [ ${netcdf_diag:-".false."} = ".true." ]; then - export CONVNETC="YES" - fi - - if [ $machine = "WCOSS_C" ]; then - export fitdir="$BASE_GIT/verif/global/parafits.fv3nems/batrun" - export PREPQFITSH="$fitdir/subfits_cray_nems" - elif [ $machine = "WCOSS_DELL_P3" ]; then - export fitdir="$BASE_GIT/verif/global/Fit2Obs/ncf-vqc/batrun" - export PREPQFITSH="$fitdir/subfits_dell_nems" - elif [ $machine = "HERA" ]; then - #export fitdir="$BASE_GIT/Fit2Obs/batrun" - export fitdir="$BASE_GIT/verif/global/Fit2Obs/ncf-vqc/batrun" - export PREPQFITSH="$fitdir/subfits_hera_slurm" - fi - -fi - - -#---------------------------------------------------------- -# VSDB STEP1, Verify Precipipation and Grid To Obs options -#---------------------------------------------------------- -# All these call $VSDBSH - -if [ "$CDUMP" = "gfs" ] ; then - ddd=`echo $CDATE |cut -c 1-8` - #if [ $ddd -eq 5 -o $ddd -eq 10 ]; then export VSDB_STEP2 = "YES" ;fi - - if [ $VSDB_STEP1 = "YES" -o $VSDB_STEP2 = "YES" -o $VRFYPRCP = "YES" -o $VRFYG2OBS = "YES" ]; then - export BACKDATEVSDB=24 # execute vsdbjob for the previous day - export VBACKUP_PRCP=24 # back up for QPF verification data - export vsdbsave="$NOSCRUB/archive/vsdb_data" # place to save vsdb database - export vsdbhome=$BASE_VERIF # location of global verification scripts - export VSDBSH="$vsdbhome/vsdbjob.sh" # VSDB job script - export vlength=$FHMAX_GFS # verification length - export vhr_rain=$FHMAX_GFS # verification length for precip - export ftyplist="pgbq" # verif. files used for computing QPF ETS scores - export ptyplist="PRATE" # precip types in GRIB: PRATE or APCP - export anltype="gfs" # default=gfs, analysis type (gfs or gdas) for verification - export rain_bucket=6 # prate in pgb files is 6-hr accumulated - - export VSDB_START_DATE="$SDATE" # starting date for vsdb maps - export webhost="emcrzdm.ncep.noaa.gov" # webhost(rzdm) computer - export webhostid="$USER" # webhost(rzdm) user name - export SEND2WEB="NO" # whether or not to send maps to webhost - export WEBDIR="/home/people/emc/www/htdocs/gmb/${webhostid}/vsdb/$PSLOT" - export mdlist="gfs $PSLOT " # exps (up to 10) to compare in maps - fi -fi - - -#---------------------------------------------------------- -# Minimization, Radiance and Ozone Monitoring -#---------------------------------------------------------- - -if [ $VRFYRAD = "YES" -o $VRFYMINMON = "YES" -o $VRFYOZN = "YES" ]; then - - export envir="para" - - # Radiance Monitoring - if [[ "$VRFYRAD" == "YES" && "$CDUMP" == "$CDFNL" ]] ; then - - export RADMON_SUFFIX=$PSLOT - export TANKverf="$NOSCRUB/monitor/radmon" - export VRFYRADSH="$HOMEgfs/jobs/JGDAS_VERFRAD" - - fi - - # Minimization Monitoring - if [[ "$VRFYMINMON" = "YES" ]] ; then - - export MINMON_SUFFIX=$PSLOT - export M_TANKverf="$NOSCRUB/monitor/minmon" - if [[ "$CDUMP" = "gdas" ]] ; then - export VRFYMINSH="$HOMEgfs/jobs/JGDAS_VMINMON" - elif [[ "$CDUMP" = "gfs" ]] ; then - export VRFYMINSH="$HOMEgfs/jobs/JGFS_VMINMON" - fi - - fi - - # Ozone Monitoring - if [[ "$VRFYOZN" == "YES" && "$CDUMP" == "$CDFNL" ]] ; then - - export HOMEgfs_ozn="$HOMEgfs" - export OZNMON_SUFFIX=$PSLOT - export TANKverf_ozn="$NOSCRUB/monitor/oznmon" - export VRFYOZNSH="$HOMEgfs/jobs/JGDAS_VERFOZN" - - fi - -fi - - -#------------------------------------------------- -# Cyclone genesis and cyclone track verification -#------------------------------------------------- - -export ens_tracker_ver=v1.1.15.1 -if [ $machine = "WCOSS_DELL_P3" ] ; then - export ens_tracker_ver=v1.1.15.3 -fi -export HOMEens_tracker=$BASE_GIT/tracker/ens_tracker.${ens_tracker_ver} - - -if [ "$VRFYTRAK" = "YES" ]; then - - export TRACKERSH="$HOMEgfs/jobs/JGFS_CYCLONE_TRACKER" - if [ "$CDUMP" = "gdas" ]; then - export FHOUT_CYCLONE=3 - export FHMAX_CYCLONE=$FHMAX - else - export FHOUT_CYCLONE=6 - export FHMAX_CYCLONE=$(( FHMAX_GFS<240 ? FHMAX_GFS : 240 )) - fi - if [ $machine = "HERA" ]; then - export COMROOTp1="/scratch1/NCEPDEV/global/glopara/com" - export COMINsyn=${COMINsyn:-${COMROOTp1}/gfs/prod/syndat} - else - export COMINsyn=${COMINsyn:-$(compath.py gfs/prod/syndat)} - fi -fi - - -if [[ "$VRFYGENESIS" == "YES" && "$CDUMP" == "gfs" ]]; then - - export GENESISSH="$HOMEgfs/jobs/JGFS_CYCLONE_GENESIS" -fi - -if [[ "$VRFYFSU" == "YES" && "$CDUMP" == "gfs" ]]; then - - export GENESISFSU="$HOMEgfs/jobs/JGFS_FSU_GENESIS" -fi - -if [[ "$RUNMOS" == "YES" && "$CDUMP" == "gfs" ]]; then - - if [ $machine = "WCOSS_C" ] ; then - export RUNGFSMOSSH="$HOMEgfs/scripts/run_gfsmos_master.sh.cray" - elif [ $machine = "WCOSS_DELL_P3" ] ; then - export RUNGFSMOSSH="$HOMEgfs/scripts/run_gfsmos_master.sh.dell" - elif [ $machine = "HERA" ] ; then - export RUNGFSMOSSH="$HOMEgfs/scripts/run_gfsmos_master.sh.hera" - else - echo "WARNING: MOS package is not enabled on $machine!" - export RUNMOS="NO" - export RUNGFSMOSSH="" - fi -fi - - - -echo "END: config.vrfy" diff --git a/parm/config/config.wafs b/parm/config/config.wafs deleted file mode 100755 index dafded38a1..0000000000 --- a/parm/config/config.wafs +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/ksh -x - -########## config.wafs ########## - -echo "BEGIN: config.wafs" - -# Get task specific resources -. $EXPDIR/config.resources wafs - -export fcsthrs=120 -export COMIN=$COMINatmos -export COMOUT=$COMOUTatmos -export SENDCOM="YES" - -echo "END: config.wafs" diff --git a/parm/config/config.wafsblending b/parm/config/config.wafsblending deleted file mode 100755 index dfd7d1715e..0000000000 --- a/parm/config/config.wafsblending +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/ksh -x - -########## config.wafsblending ########## - -echo "BEGIN: config.wafsblending" - -# Get task specific resources -. $EXPDIR/config.resources wafsblending - -export COMIN=$COMINatmos -export COMOUT=$COMOUTatmos -export SENDCOM="YES" - -echo "END: config.wafsblending" diff --git a/parm/config/config.wafsblending0p25 b/parm/config/config.wafsblending0p25 deleted file mode 100755 index 28a2de90ff..0000000000 --- a/parm/config/config.wafsblending0p25 +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/ksh -x - -########## config.wafsblending0p25 ########## - -echo "BEGIN: config.wafsblending0p25" - -# Get task specific resources -. $EXPDIR/config.resources wafsblending0p25 - -export COMIN=$COMINatmos -export COMOUT=$COMOUTatmos -export SENDCOM="YES" - -echo "END: config.wafsblending0p25" diff --git a/parm/config/config.wafsgcip b/parm/config/config.wafsgcip deleted file mode 100755 index 5c166a541b..0000000000 --- a/parm/config/config.wafsgcip +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/ksh -x - -########## config.wafsgcip ########## - -echo "BEGIN: config.wafsgcip" - -# Get task specific resources -. $EXPDIR/config.resources wafsgcip - -export COMIN=$COMINatmos -export COMINgfs=$COMIN -export COMOUT=$COMOUTatmos -export SENDCOM="YES" - -echo "END: config.wafsgcip" diff --git a/parm/config/config.wafsgrib2 b/parm/config/config.wafsgrib2 deleted file mode 100755 index 27b137cd8c..0000000000 --- a/parm/config/config.wafsgrib2 +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/ksh -x - -########## config.wafsgrib2 ########## -# Post specific - -echo "BEGIN: config.wafsgrib2" - -# Get task specific resources -. $EXPDIR/config.resources wafsgrib2 - -export COMIN=$COMINatmos -export COMOUT=$COMOUTatmos -export SENDCOM="YES" - -echo "END: config.wafsgrib2" diff --git a/parm/config/config.wafsgrib20p25 b/parm/config/config.wafsgrib20p25 deleted file mode 100755 index 8b55333c00..0000000000 --- a/parm/config/config.wafsgrib20p25 +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/ksh -x - -########## config.wafsgrib20p25 ########## - -echo "BEGIN: config.wafsgrib20p25" - -# Get task specific resources -. $EXPDIR/config.resources wafsgrib20p25 - -export COMIN=$COMINatmos -export COMOUT=$COMOUTatmos -export SENDCOM="YES" - -echo "END: config.wafsgrib20p25" diff --git a/parm/config/config.wave b/parm/config/config.wave deleted file mode 100755 index df37ff49d3..0000000000 --- a/parm/config/config.wave +++ /dev/null @@ -1,121 +0,0 @@ -#!/bin/ksh -x - -########## config.wave ########## -# Wave steps specific - -echo "BEGIN: config.wave" - -# Parameters that are common to all wave model steps - -# System and version -export wave_sys_ver=v1.0.0 - -# This config contains variables/parameters used in the fcst step -# Some others are also used across the workflow in wave component scripts - -# General runtime labels -export CDUMPwave="${CDUMP}wave" - -# In GFS/GDAS, restart files are generated/read from gdas runs -export CDUMPRSTwave="gdas" - -# Grids for wave model -# GFSv16 -export waveGRD='gnh_10m aoc_9km gsh_15m' -export waveGRDN='1 2 3' # gridnumber for ww3_multi -export waveGRDG='10 20 30' # gridgroup for ww3_multi - -# ESMF input grid -export waveesmfGRD='glox_10m' # input grid - -# Grids for input fields -export WAVEICE_DID=sice -export WAVEICE_FID=glix_10m -export WAVECUR_DID=rtofs -export WAVECUR_FID=glix_10m -export WAVEWND_DID= -export WAVEWND_FID= - -# Grids for output fields (used in all steps) -export waveuoutpGRD=points -export waveinterpGRD='glo_15mxt' # Grids that need to be interpolated from native - # in POST will generate grib unless gribOK not set -export wavesbsGRD='' # side-by-side grids generated as wave model runs, writes to com -export wavepostGRD='gnh_10m aoc_9km gsh_15m' # Native grids that will be post-processed (grib2) - -# CDATE -export CDATE=${PDY}${cyc} - -# The start time reflects the number of hindcast hours prior to the cycle initial time -if [ "$CDUMP" = "gdas" ]; then - export FHMAX_WAV=${FHMAX:-9} -else - export FHMAX_WAV=$FHMAX_GFS -fi -export WAVHINDH=${WAVHINDH:-0} -export FHMIN_WAV=${FHMIN_WAV:-0} -export FHOUT_WAV=${FHOUT_WAV:-3} -export FHMAX_HF_WAV=${FHMAX_HF_WAV:-120} -export FHOUT_HF_WAV=${FHOUT_HF_WAV:-1} - -# gridded and point output rate -export DTFLD_WAV=`expr $FHOUT_HF_WAV \* 3600` -export DTPNT_WAV=3600 -export FHINCP_WAV=`expr $DTPNT_WAV / 3600` - -# Selected output parameters (gridded) -export OUTPARS_WAV="WND CUR ICE HS T01 T02 DIR FP DP PHS PTP PDIR CHA" - -# Restart file config -if [ "$CDUMP" = "gdas" ]; then - WAVNCYC=4 - WAVHCYC=6 - FHMAX_WAV_CUR=${FHMAX_WAV_CUR:-48} # RTOFS forecasts only out to 8 days -elif [ ${gfs_cyc} -ne 0 ]; then - FHMAX_WAV_CUR=${FHMAX_WAV_CUR:-192} # RTOFS forecasts only out to 8 days - WAVHCYC=`expr 24 / ${gfs_cyc}` -else - WAVHCYC=0 - FHMAX_WAV_CUR=${FHMAX_WAV_CUR:-192} # RTOFS forecasts only out to 8 days -fi -export FHMAX_WAV_CUR WAVHCYC WAVNCYC - -# Restart timing business -if [ "${CDUMP}" != gfs ]; then # Setting is valid for GDAS and GEFS - export RSTTYPE_WAV='T' # generate second tier of restart files - export DT_1_RST_WAV=10800 # time between restart files, set to DTRST=1 for a single restart file - export DT_2_RST_WAV=43200 # restart stride for checkpointing restart - export RSTIOFF_WAV=0 # first restart file offset relative to model start -else # This is a GFS run - rst_dt_gfs=$(( restart_interval_gfs * 3600 )) - export RSTTYPE_WAV='F' # generate second tier of restart files - if [ $rst_dt_gfs -gt 0 ]; then export RSTTYPE_WAV='T' ; fi - export DT_1_RST_WAV=${rst_dt_gfs:-0} # time between restart files, set to DTRST=1 for a single restart file - export DT_2_RST_WAV=${rst_dt_gfs:-0} # restart stride for checkpointing restart - export RSTIOFF_WAV=0 # first restart file offset relative to model start -fi -# -# Set runmember to default value if not GEFS cpl run -# (for a GFS coupled run, RUNMEN would be unset, this should default to -1) -export RUNMEM=${RUNMEM:--1} -# Set wave model member tags if ensemble run -# -1: no suffix, deterministic; xxxNN: extract two last digits to make ofilename prefix=gwesNN -if [ $RUNMEM = -1 ]; then -# No suffix added to model ID in case of deterministic run - export waveMEMB= -else -# Extract member number only - export waveMEMB=`echo $RUNMEM | grep -o '..$'` -fi - -# Determine if wave component needs input and/or is coupled -export WW3ATMINP='CPL' -export WW3ICEINP='YES' -export WW3CURINP='YES' - -# Determine if input is from perturbed ensemble (T) or single input file (F) for all members -export WW3ATMIENS='F' -export WW3ICEIENS='F' -export WW3CURIENS='F' - -echo "END: config.wave" diff --git a/parm/config/config.waveawipsbulls b/parm/config/config.waveawipsbulls deleted file mode 100755 index ec39bfb646..0000000000 --- a/parm/config/config.waveawipsbulls +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/ksh -x - -########## config.waveawipsbulls ########## -# Wave steps specific - -echo "BEGIN: config.waveawipsbulls" - -# Get task specific resources -. $EXPDIR/config.resources waveawipsbulls - -export DBNROOT=/dev/null -export SENDCOM="YES" -export COMPONENT=${COMPONENT:-wave} -export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" -export COMOUT="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" - -echo "END: config.waveawipsbulls" diff --git a/parm/config/config.waveawipsgridded b/parm/config/config.waveawipsgridded deleted file mode 100755 index 7f2972bb24..0000000000 --- a/parm/config/config.waveawipsgridded +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/ksh -x - -########## config.waveawipsgridded ########## -# Wave steps specific - -echo "BEGIN: config.waveawipsgridded" - -# Get task specific resources -. $EXPDIR/config.resources waveawipsgridded - -export DBNROOT=/dev/null -export SENDCOM="YES" -export COMPONENT=${COMPONENT:-wave} -export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" -export COMOUT="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" - -echo "END: config.waveawipsgridded" diff --git a/parm/config/config.wavegempak b/parm/config/config.wavegempak deleted file mode 100755 index ec1f59d25c..0000000000 --- a/parm/config/config.wavegempak +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/ksh -x - -########## config.wavegempak ########## -# Wave steps specific - -echo "BEGIN: config.wavegempak" - -# Get task specific resources -. $EXPDIR/config.resources wavegempak - -export SENDCOM="YES" -export COMPONENT=${COMPONENT:-wave} -export COMIN="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT" -export COMOUT="$ROTDIR/$CDUMP.$PDY/$cyc/$COMPONENT/gempak" - -echo "END: config.wavegempak" diff --git a/parm/config/config.waveinit b/parm/config/config.waveinit deleted file mode 100755 index 93960e5e25..0000000000 --- a/parm/config/config.waveinit +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/ksh -x - -########## config.waveinit ########## -# Wave steps specific - -echo "BEGIN: config.waveinit" - -# Get task specific resources -. $EXPDIR/config.resources waveinit - -# Step label -export sigMODE=${sigMODE:-init} - -echo "END: config.waveinit" diff --git a/parm/config/config.wavepostsbs b/parm/config/config.wavepostsbs deleted file mode 100755 index b9051776e3..0000000000 --- a/parm/config/config.wavepostsbs +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/ksh -x - -########## config.wavepostsbs ########## -# Wave steps specific - -echo "BEGIN: config.wavepostsbs" - -# Get task specific resources -. $EXPDIR/config.resources wavepostsbs - - -# Subgrid info for grib2 encoding -export WAV_SUBGRBSRC="gnh_10m" -export WAV_SUBGRB="WAV_ATLO_GRB WAV_EPAC_GRB WAV_WCST_GRB" -export WAV_ATLO_GRB="0 6 0 0 0 0 0 0 301 331 0 0 55000000 260000000 48 0 310000000 166667 166667 0 atlocn 0p16" -export WAV_EPAC_GRB="0 6 0 0 0 0 0 0 511 301 0 0 30000002 130000000 48 -20000000 215000000 166667 166667 0 epacif 0p16" -export WAV_WCST_GRB="0 6 0 0 0 0 0 0 241 151 0 0 50000000 210000000 48 25000000 250000000 166667 166667 0 wcoast 0p16" - -# Options for point output (switch on/off boundary point output) -export DOIBP_WAV='NO' # Input boundary points -export DOFLD_WAV='YES' # Field data -export DOPNT_WAV='YES' # Station data -export DOGRB_WAV='YES' # Create grib2 files -export DOGRI_WAV='YES' # Create interpolated grids -export DOSPC_WAV='YES' # Spectral post -export DOBLL_WAV='YES' # Bulletin post - -echo "END: config.wavepostsbs" diff --git a/parm/config/config.waveprep b/parm/config/config.waveprep deleted file mode 100755 index f400a7f934..0000000000 --- a/parm/config/config.waveprep +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/ksh -x - -########## config.waveprep ########## -# Wave steps specific - -echo "BEGIN: config.waveprep" - -# Get task specific resources -. $EXPDIR/config.resources waveprep - -# Step label -export sigMODE=${sigMODE:-prep} - -export HOUR_INC=3 # This value should match with the one used in - # the wind update script -export GOFILETYPE=1 # GOFILETYPE=1 one gridded file per output step -export POFILETYPE=1 # POFILETYPE=1 one point file per output step - -# Parameters for ww3_multi.inp -# Unified output T or F -export FUNIPNT='T' -# Output server type (see ww3_multi.inp in WW3 repo) -export IOSRV='3' -# Flag for dedicated output process for unified points -export FPNTPROC='T' -# Flag for grids sharing dedicated output processes -export FGRDPROC='F' - -# Wind interval for standalone file-based runs -# Output stride -export WAV_WND_HOUR_INC=1 # This value should match with the one used in - # the wind update script -# Intake currents settings -export WAV_CUR_DT=${WAV_CUR_DT:-3} -export WAV_CUR_HF_DT=${WAV_CUR_HF_DT:-3} # Defaults to 3h for GEFSv12 -export WAV_CUR_HF_FH=${WAV_CUR_HF_FH:-0} # Constant DT for GFSv16 from getgo -export WAV_CUR_CDO_SMOOTH="NO" - -# Location of CDO module -export CDO_ROOT=${CDO_ROOT:-/gpfs/dell1/nco/ops/nwprod/rtofs_shared/rtofs_cdo.v1.6.0} - -if [ "${WW3ICEINP}" = "YES" ]; then - export WAVICEFILE=${CDUMP}.t${cyc}z.seaice.5min.grib2 -fi - -echo "END: config.waveprep" diff --git a/parm/config/gefs/config.aero b/parm/config/gefs/config.aero new file mode 120000 index 0000000000..9cf5cce080 --- /dev/null +++ b/parm/config/gefs/config.aero @@ -0,0 +1 @@ +../gfs/config.aero \ No newline at end of file diff --git a/parm/config/gefs/config.base.emc.dyn b/parm/config/gefs/config.base.emc.dyn new file mode 100644 index 0000000000..238eb16991 --- /dev/null +++ b/parm/config/gefs/config.base.emc.dyn @@ -0,0 +1,320 @@ +#! /usr/bin/env bash + +########## config.base ########## +# Common to all steps + +echo "BEGIN: config.base" + +# Machine environment +export machine="@MACHINE@" + +# EMC parallel or NCO production +export RUN_ENVIR="emc" + +# Account, queue, etc. +export ACCOUNT="@ACCOUNT@" +export QUEUE="@QUEUE@" +export QUEUE_SERVICE="@QUEUE_SERVICE@" +export PARTITION_BATCH="@PARTITION_BATCH@" +export PARTITION_SERVICE="@PARTITION_SERVICE@" + +# Project to use in mass store: +export HPSS_PROJECT="@HPSS_PROJECT@" + +# Directories relative to installation areas: +export HOMEgfs=@HOMEgfs@ +export PARMgfs=${HOMEgfs}/parm +export FIXgfs=${HOMEgfs}/fix +export USHgfs=${HOMEgfs}/ush +export UTILgfs=${HOMEgfs}/util +export EXECgfs=${HOMEgfs}/exec +export SCRgfs=${HOMEgfs}/scripts + +export FIXcice=${HOMEgfs}/fix/cice +export FIXmom=${HOMEgfs}/fix/mom6 +export FIXreg2grb2=${HOMEgfs}/fix/reg2grb2 + +######################################################################## + +# GLOBAL static environment parameters +export PACKAGEROOT="@PACKAGEROOT@" # TODO: set via prod_envir in Ops +export COMROOT="@COMROOT@" # TODO: set via prod_envir in Ops +export COMINsyn="@COMINsyn@" +export BASE_CPLIC="@BASE_CPLIC@" + +# USER specific paths +export HOMEDIR="@HOMEDIR@" +export STMP="@STMP@" +export PTMP="@PTMP@" +export NOSCRUB="@NOSCRUB@" + +# Base directories for various builds +export BASE_GIT="@BASE_GIT@" + +# Toggle to turn on/off GFS downstream processing. +export DO_BUFRSND="NO" # BUFR sounding products +export DO_GEMPAK="NO" # GEMPAK products +export DO_AWIPS="NO" # AWIPS products + +# NO for retrospective parallel; YES for real-time parallel +# arch.sh uses REALTIME for MOS. Need to set REALTIME=YES +# if want MOS written to HPSS. Should update arch.sh to +# use RUNMOS flag +export REALTIME="YES" + +# Experiment mode (cycled or forecast-only) +export MODE="@MODE@" # cycled/forecast-only + +#################################################### +# DO NOT ADD MACHINE DEPENDENT STUFF BELOW THIS LINE +# IF YOU HAVE TO MAKE MACHINE SPECIFIC CHANGES BELOW +# FEEL FREE TO MOVE THEM ABOVE THIS LINE TO KEEP IT +# CLEAR +#################################################### +# Build paths relative to $HOMEgfs +export HOMEpost="${HOMEgfs}" + +# CONVENIENT utility scripts and other environment parameters +export NCP="/bin/cp -p" +export NMV="/bin/mv" +export NLN="/bin/ln -sf" +export VERBOSE="YES" +export KEEPDATA="NO" +export CHGRP_RSTPROD="@CHGRP_RSTPROD@" +export CHGRP_CMD="@CHGRP_CMD@" +export NCDUMP="${NETCDF:-${netcdf_c_ROOT:-}}/bin/ncdump" +export NCLEN="${HOMEgfs}/ush/getncdimlen" + +# Machine environment, jobs, and other utility scripts +export BASE_ENV="${HOMEgfs}/env" +export BASE_JOB="${HOMEgfs}/jobs/rocoto" + +# EXPERIMENT specific environment parameters +export SDATE=@SDATE@ +export EDATE=@EDATE@ +export EXP_WARM_START="@EXP_WARM_START@" +export assim_freq=6 +export PSLOT="@PSLOT@" +export EXPDIR="@EXPDIR@/${PSLOT}" +export ROTDIR="@ROTDIR@/${PSLOT}" + +export DATAROOT="${STMP}/RUNDIRS/${PSLOT}" # TODO: set via prod_envir in Ops +export RUNDIR="${DATAROOT}" # TODO: Should be removed; use DATAROOT instead +export ARCDIR="${NOSCRUB}/archive/${PSLOT}" +export ATARDIR="@ATARDIR@" + +# Commonly defined parameters in JJOBS +export envir=${envir:-"prod"} +export NET="gefs" # NET is defined in the job-card (ecf) +export RUN="gefs" # RUN is defined in the job-card (ecf); CDUMP is used at EMC as a RUN proxy +# TODO: determine where is RUN actually used in the workflow other than here +# TODO: is it possible to replace all instances of ${CDUMP} to ${RUN} to be +# consistent w/ EE2? + +# Get all the COM path templates +source "${EXPDIR}/config.com" + +export ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} +export LOGSCRIPT=${LOGSCRIPT:-""} +#export ERRSCRIPT=${ERRSCRIPT:-"err_chk"} +#export LOGSCRIPT=${LOGSCRIPT:-"startmsg"} +export REDOUT="1>" +export REDERR="2>" + +export SENDECF=${SENDECF:-"NO"} +export SENDSDM=${SENDSDM:-"NO"} +export SENDDBN_NTC=${SENDDBN_NTC:-"NO"} +export SENDDBN=${SENDDBN:-"NO"} +export DBNROOT=${DBNROOT:-${UTILROOT:-}/fakedbn} + +# APP settings +export APP=@APP@ + +# Defaults: +export DO_ATM="YES" +export DO_COUPLED="NO" +export DO_WAVE="NO" +export DO_OCN="NO" +export DO_ICE="NO" +export DO_AERO="NO" +export WAVE_CDUMP="" # When to include wave suite: gdas, gfs, or both +export DOBNDPNT_WAVE="NO" +export FRAC_GRID=".true." + +# Set operational resolution +export OPS_RES="C768" # Do not change + +# Resolution specific parameters +export LEVS=128 +export CASE="@CASECTL@" # CASE is required in GEFS to determine ocean/ice/wave resolutions +export CASE_ENS="@CASEENS@" +# TODO: This should not depend on $CASE or $CASE_ENS +# These are the currently available grid-combinations +case "${CASE}" in + "C48") + export OCNRES=500 + export waveGRD='glo_500' + ;; + "C96") + export OCNRES=100 + export waveGRD='glo_200' + ;; + "C192") + export OCNRES=050 + export waveGRD='glo_200' + ;; + "C384") + export OCNRES=025 + export waveGRD='glo_025' + ;; + "C768") + export OCNRES=025 + export waveGRD='mx025' + ;; + *) + export OCNRES=025 + export waveGRD='glo_025' + ;; +esac +export ICERES=${OCNRES} + +case "${APP}" in + ATM) + ;; + ATMA) + export DO_AERO="YES" + ;; + ATMW) + export DO_COUPLED="YES" + export DO_WAVE="YES" + export WAVE_CDUMP="both" + ;; + NG-GODAS) + export DO_ATM="NO" + export DO_OCN="YES" + export DO_ICE="YES" + ;; + S2S*) + export DO_COUPLED="YES" + export DO_OCN="YES" + export DO_ICE="YES" + + if [[ "${APP}" =~ A$ ]]; then + export DO_AERO="YES" + fi + + if [[ "${APP}" =~ ^S2SW ]]; then + export DO_WAVE="YES" + export WAVE_CDUMP="both" + export cplwav2atm=".true." + fi + ;; + *) + echo "Unrecognized APP: ${1}" + exit 1 + ;; +esac + +# GFS cycle info +export gfs_cyc=@gfs_cyc@ # 0: no GFS cycle, 1: 00Z only, 2: 00Z and 12Z only, 4: all 4 cycles. + +# GFS output and frequency +export FHMIN_GFS=0 + +export FHMAX_GFS_00=120 +export FHMAX_GFS_06=120 +export FHMAX_GFS_12=120 +export FHMAX_GFS_18=120 +current_fhmax_var=FHMAX_GFS_${cyc}; declare -x FHMAX_GFS=${!current_fhmax_var} + +export FHOUT_GFS=6 # Must be 6 for S2S until #1629 is addressed; 3 for ops +export FHMAX_HF_GFS=0 +export FHOUT_HF_GFS=1 +if (( gfs_cyc != 0 )); then + export STEP_GFS=$(( 24 / gfs_cyc )) +else + export STEP_GFS="0" +fi +export ILPOST=1 # gempak output frequency up to F120 + +export FHMIN_ENKF=${FHMIN_GFS} +export FHMAX_ENKF=${FHMAX_GFS} +export FHOUT_ENKF=${FHOUT_GFS} + +# GFS restart interval in hours +export restart_interval_gfs=12 +# NOTE: Do not set this to zero. Instead set it to $FHMAX_GFS +# TODO: Remove this variable from config.base and reference from config.fcst +# TODO: rework logic in config.wave and push it to parsing_nameslist_WW3.sh where it is actually used + +export QUILTING=".true." +export OUTPUT_GRID="gaussian_grid" +export WRITE_DOPOST=".true." # WRITE_DOPOST=true, use inline POST +export WRITE_NSFLIP=".true." + +# Override normal post flat files for GEFS +export FLTFILEGFS="${PARMgfs}/post/postxconfig-NT-GEFS.txt" +export FLTFILEGFSF00="${PARMgfs}/post/postxconfig-NT-GEFS-F00.txt" + +# Microphysics Options: 99-ZhaoCarr, 8-Thompson; 6-WSM6, 10-MG, 11-GFDL +export imp_physics=8 + +# Shared parameters +# DA engine +export DO_JEDIATMVAR="NO" +export DO_JEDIATMENS="NO" +export DO_JEDIOCNVAR="NO" +export DO_JEDILANDDA="NO" +export DO_MERGENSST="NO" + +# Hybrid related +export NMEM_ENS=@NMEM_ENS@ + +# set default member number memdir for control +# this will be overwritten for the perturbed members +export ENSMEM="000" +export MEMDIR="mem${ENSMEM}" + +export DOIAU="NO" # While we are not doing IAU, we may want to warm start w/ IAU in the future +# Check if cycle is cold starting +if [[ "${EXP_WARM_START}" = ".false." ]]; then + export IAU_FHROT=0 +else + if [[ "${DOIAU}" = "YES" ]]; then + export IAU_FHROT=3 + else + export IAU_FHROT=0 + fi +fi + +# turned on nsst in anal and/or fcst steps, and turn off rtgsst +export DONST="YES" +if [[ ${DONST} = "YES" ]]; then export FNTSFA=" "; fi + +# The switch to apply SST elevation correction or not +export nst_anl=.true. + +# Make the nsstbufr file on the fly or use the GDA version +export MAKE_NSSTBUFR="@MAKE_NSSTBUFR@" + +# Make the aircraft prepbufr file on the fly or use the GDA version +export MAKE_ACFTBUFR="@MAKE_ACFTBUFR@" + +# Verification options +export DO_METP="NO" # Run METPLUS jobs - set METPLUS settings in config.metp +export DO_FIT2OBS="NO" # Run fit to observations package + +# Archiving options +export HPSSARCH="@HPSSARCH@" # save data to HPSS archive +export LOCALARCH="@LOCALARCH@" # save data to local archive +if [[ ${HPSSARCH} = "YES" ]] && [[ ${LOCALARCH} = "YES" ]]; then + echo "Both HPSS and local archiving selected. Please choose one or the other." + exit 2 +fi +export ARCH_CYC=00 # Archive data at this cycle for warm_start capability +export ARCH_WARMICFREQ=4 # Archive frequency in days for warm_start capability +export ARCH_FCSTICFREQ=1 # Archive frequency in days for gdas and gfs forecast-only capability + +export DELETE_COM_IN_ARCHIVE_JOB="YES" # NO=retain ROTDIR. YES default in arch.sh and earc.sh. + +echo "END: config.base" diff --git a/parm/config/gefs/config.com b/parm/config/gefs/config.com new file mode 120000 index 0000000000..6a3754559c --- /dev/null +++ b/parm/config/gefs/config.com @@ -0,0 +1 @@ +../gfs/config.com \ No newline at end of file diff --git a/parm/config/gefs/config.efcs b/parm/config/gefs/config.efcs new file mode 100644 index 0000000000..9593408848 --- /dev/null +++ b/parm/config/gefs/config.efcs @@ -0,0 +1,59 @@ +#! /usr/bin/env bash + +########## config.efcs ########## +# Ensemble forecast specific, dependency: config.fcst + +echo "BEGIN: config.efcs" + +# Turn off components in ensemble via _ENKF, or use setting from deterministic +export DO_AERO=${DO_AERO_ENKF:-${DO_AERO:-"NO"}} +export DO_OCN=${DO_OCN_ENKF:-${DO_OCN:-"NO"}} +export DO_ICE=${DO_ICE_ENKF:-${DO_ICE:-"NO"}} +export DO_WAVE=${DO_WAVE_ENKF:-${DO_WAVE:-"NO"}} + +# Source model specific information that is resolution dependent +string="--fv3 ${CASE_ENS}" +# Ocean/Ice/Waves ensemble configurations are identical to deterministic member +[[ "${DO_OCN}" == "YES" ]] && string="${string} --mom6 ${OCNRES}" +[[ "${DO_ICE}" == "YES" ]] && string="${string} --cice6 ${ICERES}" +[[ "${DO_WAVE}" == "YES" ]] && string="${string} --ww3 ${waveGRD// /;}" +[[ "${DO_AERO}" == "YES" ]] && string="${string} --gocart" +# shellcheck disable=SC2086 +source "${EXPDIR}/config.ufs" ${string} + +# Get task specific resources +source "${EXPDIR}/config.resources" efcs + +# Use serial I/O for ensemble (lustre?) +export OUTPUT_FILETYPE_ATM="netcdf" +export OUTPUT_FILETYPE_SFC="netcdf" + +# Number of enkf members per fcst job +export NMEM_EFCSGRP=1 +export RERUN_EFCSGRP="NO" + +# Turn off inline UPP for EnKF forecast +export WRITE_DOPOST=".true." + +# Stochastic physics parameters (only for ensemble forecasts) +export DO_SKEB="YES" +export SKEB=0.3 +export SKEB_TAU=21600. +export SKEB_LSCALE=250000. +export SKEBNORM=0 +export SKEB_NPASS=30 +export SKEB_VDOF=5 +export DO_SHUM="YES" +export SHUM=0.005 +export SHUM_TAU=21600. +export SHUM_LSCALE=500000. +export DO_SPPT="YES" +export SPPT=0.5 +export SPPT_TAU=21600. +export SPPT_LSCALE=500000. +export SPPT_LOGIT=".true." +export SPPT_SFCLIMIT=".true." + +export restart_interval=${restart_interval_gfs} + +echo "END: config.efcs" diff --git a/parm/config/gefs/config.fcst b/parm/config/gefs/config.fcst new file mode 100644 index 0000000000..e36e023652 --- /dev/null +++ b/parm/config/gefs/config.fcst @@ -0,0 +1,268 @@ +#! /usr/bin/env bash + +########## config.fcst ########## +# Forecast specific + +echo "BEGIN: config.fcst" + +# Turn off waves if not used for this CDUMP +case ${WAVE_CDUMP} in + both | "${CDUMP/enkf}" ) ;; # Don't change + *) DO_WAVE="NO" ;; # Turn waves off +esac + +# Source model specific information that is resolution dependent +string="--fv3 ${CASE}" +[[ "${DO_OCN}" == "YES" ]] && string="${string} --mom6 ${OCNRES}" +[[ "${DO_ICE}" == "YES" ]] && string="${string} --cice6 ${ICERES}" +[[ "${DO_WAVE}" == "YES" ]] && string="${string} --ww3 ${waveGRD// /;}" +[[ "${DO_AERO}" == "YES" ]] && string="${string} --gocart" +# We are counting on $string being multiple arguments +# shellcheck disable=SC2086 +source "${EXPDIR}/config.ufs" ${string} + + +# Get task specific resources +source "${EXPDIR}/config.resources" fcst +export domains_stack_size="16000000" + + +if [[ "${DONST}" == "YES" ]]; then + source "${EXPDIR}/config.nsst" +fi + +export esmf_profile=".false." +export esmf_logkind="ESMF_LOGKIND_MULTI_ON_ERROR" #Options: ESMF_LOGKIND_MULTI_ON_ERROR, ESMF_LOGKIND_MULTI, ESMF_LOGKIND_NONE + + +####################################################################### + +export FORECASTSH="${HOMEgfs}/scripts/exglobal_forecast.sh" +#export FORECASTSH="${HOMEgfs}/scripts/exglobal_forecast.py" # Temp. while this is worked on +export FCSTEXECDIR="${HOMEgfs}/exec" +export FCSTEXEC="ufs_model.x" + +####################################################################### +# Model configuration +export TYPE="nh" +export MONO="non-mono" + +# Use stratosphere h2o physics +export h2o_phys=".true." + +# Options of stratosphere O3 physics reaction coefficients +export new_o3forc="YES" + +export gwd_opt=2 + +# --GFS.v16 uGWD.v0, used for suite FV3_GFS_v16 and UFS p6 etc +# do_ugwp=T: use unified CGWD and OGWD, and turbulent orographic form drag (TOFD) +# do_ugwp=F: use unified CGWD but old OGWD, TOFD is not uded. +if (( gwd_opt == 1 )); then + export knob_ugwp_version=0 + export do_ugwp=".false." + export do_tofd=".false." + launch_level=$(echo "${LEVS}/2.35" |bc) + export launch_level +fi + + +# -- uGWD.v1, for suite FV3_GFS_v17 and FV3_GFS_v17p8b etc +if (( gwd_opt == 2 )); then + + #--used for UFS p7 and p8a + #export knob_ugwp_version=1 + #export do_ugwp=".false." + #export do_tofd=".false." + #export do_ugwp_v0=".false." + #export do_ugwp_v1=".true." + #export do_ugwp_v0_orog_only=".false." + #export do_ugwp_v0_nst_only=".false." + #export do_gsl_drag_ls_bl=".true." + #export do_gsl_drag_ss=".true." + #export do_gsl_drag_tofd=".true." + #export do_ugwp_v1_orog_only=".false." + + #--used for UFS p8 + export knob_ugwp_version=1 + export do_ugwp=".false." + export do_tofd=".false." + export do_ugwp_v0=".false." + export do_ugwp_v1=".true." + export do_ugwp_v0_orog_only=".false." + export do_ugwp_v0_nst_only=".false." + export do_gsl_drag_ls_bl=".true." + export do_gsl_drag_ss=".true." + export do_gsl_drag_tofd=".true." + export do_ugwp_v1_orog_only=".false." + launch_level=$(echo "${LEVS}/2.35" |bc) + export launch_level + if [[ ${do_gsl_drag_ls_bl} == ".true." ]]; then + export cdmbgwd=${cdmbgwd_gsl} + fi +fi + +# Sponge layer settings +export tau=0. +export rf_cutoff=10. +export d2_bg_k1=0.20 +export d2_bg_k2=0.04 +export dz_min=6 +export n_sponge=42 +if (( LEVS == 128 )) && [[ "${CDUMP}" =~ "gdas" ]]; then + export tau=5.0 + export rf_cutoff=1.0e3 + export d2_bg_k1=0.20 + export d2_bg_k2=0.0 +fi + +# PBL/turbulance schemes +export hybedmf=".false." +export satmedmf=".true." +export isatmedmf=1 +tbf="" +if [[ "${satmedmf}" == ".true." ]]; then tbf="_satmedmf" ; fi + +#Convection schemes +export progsigma=".true." +tbp="" +if [[ "${progsigma}" == ".true." ]]; then tbp="_progsigma" ; fi + +# Radiation options +export IAER=1011 ; #spectral band mapping method for aerosol optical properties +export iovr_lw=3 ; #de-correlation length cloud overlap method (Barker, 2008) +export iovr_sw=3 ; #de-correlation length cloud overlap method (Barker, 2008) +export iovr=3 ; #de-correlation length cloud overlap method (Barker, 2008) +export icliq_sw=2 ; #cloud optical coeffs from AER's newer version v3.9-v4.0 for hu and stamnes +export isubc_sw=2 +export isubc_lw=2 + +# RRTMGP radiation scheme +export do_RRTMGP=.false. +export doGP_cldoptics_LUT=.false. +export doGP_lwscat=.false. + +# LSM configuration +# NoahMP only +export iopt_sfc="3" +export iopt_trs="2" + +# Microphysics configuration +export dnats=0 +export cal_pre=".true." +export do_sat_adj=".false." +export random_clds=".true." + +case ${imp_physics} in + 99) # ZhaoCarr + export ncld=1 + export FIELD_TABLE="${HOMEgfs}/parm/ufs/fv3/field_table_zhaocarr${tbf}${tbp}" + export nwat=2 + ;; + 6) # WSM6 + export ncld=2 + export FIELD_TABLE="${HOMEgfs}/parm/ufs/fv3/field_table_wsm6${tbf}${tbp}" + export nwat=6 + ;; + 8) # Thompson + export ncld=2 + export FIELD_TABLE="${HOMEgfs}/parm/ufs/fv3/field_table_thompson_noaero_tke${tbp}" + export nwat=6 + + export cal_pre=".false." + export random_clds=".false." + export effr_in=".true." + export ltaerosol=".false." + export lradar=".false." + export ttendlim="-999" + export dt_inner=$((DELTIM/2)) + export sedi_semi=.true. + if [[ "${sedi_semi}" == .true. ]]; then export dt_inner=${DELTIM} ; fi + export decfl=10 + + export hord_mt_nh_nonmono=5 + export hord_xx_nh_nonmono=5 + export vtdm4_nh_nonmono=0.02 + export nord=2 + export dddmp=0.1 + export d4_bg=0.12 + ;; + 11) # GFDL + export ncld=5 + export FIELD_TABLE="${HOMEgfs}/parm/ufs/fv3/field_table_gfdl${tbf}${tbp}" + export nwat=6 + export dnats=1 + export cal_pre=".false." + export do_sat_adj=".true." + export random_clds=".false." + export lgfdlmprad=".true." + export effr_in=".true." + export reiflag=2 + + export hord_mt_nh_nonmono=5 + export hord_xx_nh_nonmono=5 + export vtdm4_nh_nonmono=0.02 + export nord=2 + export d4_bg=0.12 + export dddmp=0.1 + ;; + *) echo "Unknown microphysics option, ABORT!" ;; +esac + +# Stochastic physics +export DO_SPPT=${DO_SPPT:-"NO"} +export DO_SKEB=${DO_SKEB:-"NO"} +export DO_SHUM=${DO_SHUM:-"NO"} +export DO_LAND_PERT=${DO_LAND_PERT:-"NO"} +export DO_CA=${DO_CA:-"YES"} + +#coupling settings +export cplmode="ufs.frac" +if [[ "${FRAC_GRID:-".true."}" == ".false." ]]; then + export cplmode="ufs.nfrac" +fi +export psm_bc="1" + +export min_lakeice="0.15" +export min_seaice=${min_seaice:-"0.15"} +export use_cice_alb=${use_cice_alb:-".false."} + +export FSICL="0" +export FSICS="0" + +#--------------------------------------------------------------------- + +# ideflate: netcdf zlib lossless compression (0-9): 0 no compression +# nbits: netcdf lossy compression level (0-32): 0 lossless +export ideflate=1 +export nbits=14 +export ishuffle=0 +# compression for RESTART files written by FMS +export shuffle=1 +export deflate_level=1 + +#--------------------------------------------------------------------- +# Disable the use of coupler.res; get model start time from model_configure +export USE_COUPLER_RES="NO" + +# Write more variables to output +export DIAG_TABLE="${HOMEgfs}/parm/ufs/fv3/diag_table" + +# Write gfs restart files to rerun fcst from any break point +export restart_interval=${restart_interval_gfs:-12} + +# Turn off dry mass adjustment in GFS +export adjust_dry_mass=".false." + +# Write each restart file in 16 small files to save time +if [[ "${CASE}" = C768 ]]; then + export io_layout="4,4" +else + export io_layout="1,1" +fi + +# Remember config.efcs will over-ride these values for ensemble forecasts +# if these variables are re-defined there. +# Otherwise, the ensemble forecast will inherit from config.fcst + +echo "END: config.fcst" diff --git a/parm/config/gefs/config.ice b/parm/config/gefs/config.ice new file mode 120000 index 0000000000..39385a1cb4 --- /dev/null +++ b/parm/config/gefs/config.ice @@ -0,0 +1 @@ +../gfs/config.ice \ No newline at end of file diff --git a/parm/config/gefs/config.nsst b/parm/config/gefs/config.nsst new file mode 100644 index 0000000000..db4367b2c0 --- /dev/null +++ b/parm/config/gefs/config.nsst @@ -0,0 +1,34 @@ +#! /usr/bin/env bash + +########## config.nsst ########## +# NSST specific + +echo "BEGIN: config.nsst" + +# NSST parameters contained within nstf_name + +# nstf_name(1) : NST_MODEL (NSST Model) : 0 = OFF, 1 = ON but uncoupled, 2 = ON and coupled +export NST_MODEL=2 + +# nstf_name(2) : NST_SPINUP : 0 = OFF, 1 = ON, +export NST_SPINUP=0 +cdate="${PDY}${cyc}" +if (( cdate < 2017072000 )); then + export NST_SPINUP=1 +fi + +# nstf_name(3) : NST_RESV (Reserved, NSST Analysis) : 0 = OFF, 1 = ON +export NST_RESV=0 + +# nstf_name(4,5) : ZSEA1, ZSEA2 the two depths to apply vertical average (bias correction) +export ZSEA1=0 +export ZSEA2=0 + +export NST_GSI=3 # default 0: No NST info at all; + # 1: Input NST info but not used in GSI; + # 2: Input NST info, used in CRTM simulation, no Tr analysis + # 3: Input NST info, used in both CRTM simulation and Tr analysis +export NSTINFO=0 # number of elements added in obs. data array (default = 0) +if (( NST_GSI > 0 )); then export NSTINFO=4; fi + +echo "END: config.nsst" diff --git a/parm/config/gefs/config.ocn b/parm/config/gefs/config.ocn new file mode 120000 index 0000000000..d9ab25be5e --- /dev/null +++ b/parm/config/gefs/config.ocn @@ -0,0 +1 @@ +../gfs/config.ocn \ No newline at end of file diff --git a/parm/config/gefs/config.resources b/parm/config/gefs/config.resources new file mode 100644 index 0000000000..a50418d23a --- /dev/null +++ b/parm/config/gefs/config.resources @@ -0,0 +1,477 @@ +#! /usr/bin/env bash + +########## config.resources ########## +# Set resource information for job tasks +# e.g. walltime, node, cores per node, memory etc. + +if [[ $# -ne 1 ]]; then + + echo "Must specify an input task argument to set resource variables!" + echo "argument can be any one of the following:" + echo "stage_ic aerosol_init" + echo "sfcanl analcalc analdiag fcst fit2obs metp arch echgres" + echo "ecen esfc efcs epos earc" + echo "init_chem mom6ic ocnpost" + echo "waveinit waveprep wavepostsbs wavepostbndpnt wavepostbndpntbll wavepostpnt" + echo "wavegempak waveawipsbulls waveawipsgridded" + echo "postsnd awips gempak" + exit 1 + +fi + +step=$1 + +echo "BEGIN: config.resources" + +if [[ "${machine}" = "WCOSS2" ]]; then + export npe_node_max=128 +elif [[ "${machine}" = "JET" ]]; then + if [[ ${PARTITION_BATCH} = "xjet" ]]; then + export npe_node_max=24 + elif [[ ${PARTITION_BATCH} = "vjet" || ${PARTITION_BATCH} = "sjet" ]]; then + export npe_node_max=16 + elif [[ ${PARTITION_BATCH} = "kjet" ]]; then + export npe_node_max=40 + fi +elif [[ ${machine} = "HERA" ]]; then + export npe_node_max=40 +elif [[ ${machine} = "S4" ]]; then + if [[ ${PARTITION_BATCH} = "s4" ]]; then + export npe_node_max=32 + elif [[ ${PARTITION_BATCH} = "ivy" ]]; then + export npe_node_max=20 + fi +elif [[ ${machine} = "ORION" ]]; then + export npe_node_max=40 +elif [[ ${machine} = "HERCULES" ]]; then + export npe_node_max=40 +fi + +if [[ ${step} = "prep" ]]; then + export wtime_prep='00:30:00' + export npe_prep=4 + export npe_node_prep=2 + export nth_prep=1 + if [[ "${machine}" = "WCOSS2" ]]; then + export is_exclusive=True + else + export memory_prep="40G" + fi + +elif [[ "${step}" = "aerosol_init" ]]; then + export wtime_aerosol_init="00:05:00" + export npe_aerosol_init=1 + export nth_aerosol_init=1 + npe_node_aerosol_init=$(echo "${npe_node_max} / ${nth_aerosol_init}" | bc) + export npe_node_aerosol_init + export NTASKS=${npe_aerosol_init} + export memory_aerosol_init="6G" + +elif [[ ${step} = "waveinit" ]]; then + + export wtime_waveinit="00:10:00" + export npe_waveinit=12 + export nth_waveinit=1 + npe_node_waveinit=$(echo "${npe_node_max} / ${nth_waveinit}" | bc) + export npe_node_waveinit + export NTASKS=${npe_waveinit} + export memory_waveinit="2GB" + +elif [[ ${step} = "waveprep" ]]; then + + export wtime_waveprep="00:10:00" + export npe_waveprep=5 + export npe_waveprep_gfs=65 + export nth_waveprep=1 + export nth_waveprep_gfs=1 + npe_node_waveprep=$(echo "${npe_node_max} / ${nth_waveprep}" | bc) + export npe_node_waveprep + npe_node_waveprep_gfs=$(echo "${npe_node_max} / ${nth_waveprep_gfs}" | bc) + export npe_node_waveprep_gfs + export NTASKS=${npe_waveprep} + export NTASKS_gfs=${npe_waveprep_gfs} + export memory_waveprep="100GB" + export memory_waveprep_gfs="150GB" + +elif [[ ${step} = "wavepostsbs" ]]; then + + export wtime_wavepostsbs="00:20:00" + export wtime_wavepostsbs_gfs="03:00:00" + export npe_wavepostsbs=8 + export nth_wavepostsbs=1 + npe_node_wavepostsbs=$(echo "${npe_node_max} / ${nth_wavepostsbs}" | bc) + export npe_node_wavepostsbs + export NTASKS=${npe_wavepostsbs} + export memory_wavepostsbs="10GB" + export memory_wavepostsbs_gfs="10GB" + +elif [[ ${step} = "wavepostbndpnt" ]]; then + + export wtime_wavepostbndpnt="01:00:00" + export npe_wavepostbndpnt=240 + export nth_wavepostbndpnt=1 + npe_node_wavepostbndpnt=$(echo "${npe_node_max} / ${nth_wavepostbndpnt}" | bc) + export npe_node_wavepostbndpnt + export NTASKS=${npe_wavepostbndpnt} + export is_exclusive=True + +elif [[ ${step} = "wavepostbndpntbll" ]]; then + + export wtime_wavepostbndpntbll="01:00:00" + export npe_wavepostbndpntbll=448 + export nth_wavepostbndpntbll=1 + npe_node_wavepostbndpntbll=$(echo "${npe_node_max} / ${nth_wavepostbndpntbll}" | bc) + export npe_node_wavepostbndpntbll + export NTASKS=${npe_wavepostbndpntbll} + export is_exclusive=True + +elif [[ ${step} = "wavepostpnt" ]]; then + + export wtime_wavepostpnt="01:30:00" + export npe_wavepostpnt=200 + export nth_wavepostpnt=1 + npe_node_wavepostpnt=$(echo "${npe_node_max} / ${nth_wavepostpnt}" | bc) + export npe_node_wavepostpnt + export NTASKS=${npe_wavepostpnt} + export is_exclusive=True + +elif [[ ${step} = "wavegempak" ]]; then + + export wtime_wavegempak="02:00:00" + export npe_wavegempak=1 + export nth_wavegempak=1 + npe_node_wavegempak=$(echo "${npe_node_max} / ${nth_wavegempak}" | bc) + export npe_node_wavegempak + export NTASKS=${npe_wavegempak} + export memory_wavegempak="1GB" + +elif [[ ${step} = "waveawipsbulls" ]]; then + + export wtime_waveawipsbulls="00:20:00" + export npe_waveawipsbulls=1 + export nth_waveawipsbulls=1 + npe_node_waveawipsbulls=$(echo "${npe_node_max} / ${nth_waveawipsbulls}" | bc) + export npe_node_waveawipsbulls + export NTASKS=${npe_waveawipsbulls} + export is_exclusive=True + +elif [[ ${step} = "waveawipsgridded" ]]; then + + export wtime_waveawipsgridded="02:00:00" + export npe_waveawipsgridded=1 + export nth_waveawipsgridded=1 + npe_node_waveawipsgridded=$(echo "${npe_node_max} / ${nth_waveawipsgridded}" | bc) + export npe_node_waveawipsgridded + export NTASKS=${npe_waveawipsgridded} + export memory_waveawipsgridded_gfs="1GB" + +elif [[ ${step} = "analcalc" ]]; then + + export wtime_analcalc="00:10:00" + export npe_analcalc=127 + export ntasks="${npe_analcalc}" + export nth_analcalc=1 + export nth_echgres=4 + export nth_echgres_gfs=12 + npe_node_analcalc=$(echo "${npe_node_max} / ${nth_analcalc}" | bc) + export npe_node_analcalc + export is_exclusive=True + +elif [[ ${step} = "analdiag" ]]; then + + export wtime_analdiag="00:15:00" + export npe_analdiag=96 # Should be at least twice npe_ediag + export nth_analdiag=1 + npe_node_analdiag=$(echo "${npe_node_max} / ${nth_analdiag}" | bc) + export npe_node_analdiag + export memory_analdiag="48GB" + +elif [[ ${step} = "sfcanl" ]]; then + + export wtime_sfcanl="00:10:00" + export npe_sfcanl=6 + export nth_sfcanl=1 + npe_node_sfcanl=$(echo "${npe_node_max} / ${nth_sfcanl}" | bc) + export npe_node_sfcanl + export is_exclusive=True + +elif [[ "${step}" = "fcst" || "${step}" = "efcs" ]]; then + + export is_exclusive=True + + if [[ "${step}" = "fcst" ]]; then + _CDUMP_LIST=${CDUMP:-"gdas gfs"} + elif [[ "${step}" = "efcs" ]]; then + _CDUMP_LIST=${CDUMP:-"enkfgdas enkfgfs"} + fi + + # During workflow creation, we need resources for all CDUMPs and CDUMP is undefined + for _CDUMP in ${_CDUMP_LIST}; do + if [[ "${_CDUMP}" =~ "gfs" ]]; then + export layout_x=${layout_x_gfs} + export layout_y=${layout_y_gfs} + export WRITE_GROUP=${WRITE_GROUP_GFS} + export WRTTASK_PER_GROUP_PER_THREAD=${WRTTASK_PER_GROUP_PER_THREAD_GFS} + ntasks_fv3=${ntasks_fv3_gfs} + ntasks_quilt=${ntasks_quilt_gfs} + nthreads_fv3=${nthreads_fv3_gfs} + fi + + # PETS for the atmosphere dycore + (( FV3PETS = ntasks_fv3 * nthreads_fv3 )) + echo "FV3 using (nthreads, PETS) = (${nthreads_fv3}, ${FV3PETS})" + + # PETS for quilting + if [[ "${QUILTING:-}" = ".true." ]]; then + (( QUILTPETS = ntasks_quilt * nthreads_fv3 )) + (( WRTTASK_PER_GROUP = WRTTASK_PER_GROUP_PER_THREAD )) + export WRTTASK_PER_GROUP + else + QUILTPETS=0 + fi + echo "QUILT using (nthreads, PETS) = (${nthreads_fv3}, ${QUILTPETS})" + + # Total PETS for the atmosphere component + ATMTHREADS=${nthreads_fv3} + (( ATMPETS = FV3PETS + QUILTPETS )) + export ATMPETS ATMTHREADS + echo "FV3ATM using (nthreads, PETS) = (${ATMTHREADS}, ${ATMPETS})" + + # Total PETS for the coupled model (starting w/ the atmosphere) + NTASKS_TOT=${ATMPETS} + + # The mediator PETS can overlap with other components, usually it lands on the atmosphere tasks. + # However, it is suggested limiting mediator PETS to 300, as it may cause the slow performance. + # See https://docs.google.com/document/d/1bKpi-52t5jIfv2tuNHmQkYUe3hkKsiG_DG_s6Mnukog/edit + # TODO: Update reference when moved to ufs-weather-model RTD + MEDTHREADS=${nthreads_mediator:-1} + MEDPETS=${MEDPETS:-ATMPETS} + [[ "${MEDPETS}" -gt 300 ]] && MEDPETS=300 + export MEDPETS MEDTHREADS + echo "MEDIATOR using (threads, PETS) = (${MEDTHREADS}, ${MEDPETS})" + + CHMPETS=0; CHMTHREADS=0 + if [[ "${DO_AERO}" = "YES" ]]; then + # GOCART shares the same grid and forecast tasks as FV3 (do not add write grid component tasks). + (( CHMTHREADS = ATMTHREADS )) + (( CHMPETS = FV3PETS )) + # Do not add to NTASKS_TOT + echo "GOCART using (threads, PETS) = (${CHMTHREADS}, ${CHMPETS})" + fi + export CHMPETS CHMTHREADS + + WAVPETS=0; WAVTHREADS=0 + if [[ "${DO_WAVE}" = "YES" ]]; then + (( WAVPETS = ntasks_ww3 * nthreads_ww3 )) + (( WAVTHREADS = nthreads_ww3 )) + echo "WW3 using (threads, PETS) = (${WAVTHREADS}, ${WAVPETS})" + (( NTASKS_TOT = NTASKS_TOT + WAVPETS )) + fi + export WAVPETS WAVTHREADS + + OCNPETS=0; OCNTHREADS=0 + if [[ "${DO_OCN}" = "YES" ]]; then + (( OCNPETS = ntasks_mom6 * nthreads_mom6 )) + (( OCNTHREADS = nthreads_mom6 )) + echo "MOM6 using (threads, PETS) = (${OCNTHREADS}, ${OCNPETS})" + (( NTASKS_TOT = NTASKS_TOT + OCNPETS )) + fi + export OCNPETS OCNTHREADS + + ICEPETS=0; ICETHREADS=0 + if [[ "${DO_ICE}" = "YES" ]]; then + (( ICEPETS = ntasks_cice6 * nthreads_cice6 )) + (( ICETHREADS = nthreads_cice6 )) + echo "CICE6 using (threads, PETS) = (${ICETHREADS}, ${ICEPETS})" + (( NTASKS_TOT = NTASKS_TOT + ICEPETS )) + fi + export ICEPETS ICETHREADS + + echo "Total PETS for ${_CDUMP} = ${NTASKS_TOT}" + + if [[ "${_CDUMP}" =~ "gfs" ]]; then + declare -x "npe_${step}_gfs"="${NTASKS_TOT}" + declare -x "nth_${step}_gfs"=1 # ESMF handles threading for the UFS-weather-model + declare -x "npe_node_${step}_gfs"="${npe_node_max}" + else + declare -x "npe_${step}"="${NTASKS_TOT}" + declare -x "nth_${step}"=1 # ESMF handles threading for the UFS-weather-model + declare -x "npe_node_${step}"="${npe_node_max}" + fi + + done + + case "${CASE}" in + "C48" | "C96" | "C192") + declare -x "wtime_${step}"="03:00:00" + declare -x "wtime_${step}_gfs"="03:00:00" + ;; + "C384" | "C768" | "C1152") + declare -x "wtime_${step}"="06:00:00" + declare -x "wtime_${step}_gfs"="06:00:00" + ;; + *) + echo "FATAL ERROR: Resolution ${CASE} not supported in ${step}" + exit 1 + ;; + esac + + unset _CDUMP _CDUMP_LIST + unset NTASKS_TOT + +elif [[ ${step} = "ocnpost" ]]; then + + export wtime_ocnpost="00:30:00" + export npe_ocnpost=1 + export npe_node_ocnpost=1 + export nth_ocnpost=1 + export memory_ocnpost="96G" + if [[ ${machine} == "JET" ]]; then + # JET only has 88GB of requestable memory per node + # so a second node is required to meet the requiremtn + npe_ocnpost=2 + fi + +elif [[ "${step}" = "fit2obs" ]]; then + + export wtime_fit2obs="00:20:00" + export npe_fit2obs=3 + export nth_fit2obs=1 + export npe_node_fit2obs=1 + export memory_fit2obs="20G" + if [[ ${machine} == "WCOSS2" ]]; then export npe_node_fit2obs=3 ; fi + +elif [[ "${step}" = "metp" ]]; then + + export nth_metp=1 + export wtime_metp="03:00:00" + export npe_metp=4 + export npe_node_metp=4 + export wtime_metp_gfs="06:00:00" + export npe_metp_gfs=4 + export npe_node_metp_gfs=4 + export is_exclusive=True + +elif [[ ${step} = "echgres" ]]; then + + export wtime_echgres="00:10:00" + export npe_echgres=3 + export nth_echgres=${npe_node_max} + export npe_node_echgres=1 + if [[ "${machine}" = "WCOSS2" ]]; then + export memory_echgres="200GB" + fi + +elif [[ ${step} = "init_chem" ]]; then + + export wtime_init_chem="00:30:00" + export npe_init_chem=1 + export npe_node_init_chem=1 + export is_exclusive=True + +elif [[ ${step} = "mom6ic" ]]; then + + export wtime_mom6ic="00:30:00" + export npe_mom6ic=24 + export npe_node_mom6ic=24 + export is_exclusive=True + +elif [[ ${step} = "arch" || ${step} = "earc" ]]; then + + eval "export wtime_${step}='06:00:00'" + eval "export npe_${step}=1" + eval "export npe_node_${step}=1" + eval "export nth_${step}=1" + eval "export memory_${step}=4096M" + if [[ "${machine}" = "WCOSS2" ]]; then + eval "export memory_${step}=50GB" + fi + +elif [[ ${step} = "stage_ic" ]]; then + + export wtime_stage_ic="00:15:00" + export npe_stage_ic=1 + export npe_node_stage_ic=1 + export nth_stage_ic=1 + export is_exclusive=True + +elif [[ ${step} = "ecen" ]]; then + + export wtime_ecen="00:10:00" + export npe_ecen=80 + export nth_ecen=4 + if [[ "${machine}" = "HERA" ]]; then export nth_ecen=6; fi + if [[ ${CASE} = "C384" || ${CASE} = "C192" || ${CASE} = "C96" || ${CASE} = "C48" ]]; then export nth_ecen=2; fi + npe_node_ecen=$(echo "${npe_node_max} / ${nth_ecen}" | bc) + export npe_node_ecen + export nth_cycle=${nth_ecen} + npe_node_cycle=$(echo "${npe_node_max} / ${nth_cycle}" | bc) + export npe_node_cycle + export is_exclusive=True + +elif [[ ${step} = "esfc" ]]; then + + export wtime_esfc="00:06:00" + export npe_esfc=80 + export nth_esfc=1 + npe_node_esfc=$(echo "${npe_node_max} / ${nth_esfc}" | bc) + export npe_node_esfc + export nth_cycle=${nth_esfc} + npe_node_cycle=$(echo "${npe_node_max} / ${nth_cycle}" | bc) + export npe_node_cycle + export memory_esfc="80GB" + +elif [[ ${step} = "epos" ]]; then + + export wtime_epos="00:15:00" + export npe_epos=80 + export nth_epos=4 + if [[ "${machine}" == "HERA" ]]; then + export nth_epos=6 + fi + npe_node_epos=$(echo "${npe_node_max} / ${nth_epos}" | bc) + export npe_node_epos + export is_exclusive=True + +elif [[ ${step} = "postsnd" ]]; then + + export wtime_postsnd="02:00:00" + export npe_postsnd=40 + export nth_postsnd=8 + export npe_node_postsnd=10 + export npe_postsndcfp=9 + export npe_node_postsndcfp=1 + postsnd_req_cores=$(echo "${npe_node_postsnd} * ${nth_postsnd}" | bc) + if [[ ${postsnd_req_cores} -gt "${npe_node_max}" ]]; then + npe_node_postsnd=$(echo "${npe_node_max} / ${nth_postsnd}" | bc) + export npe_node_postsnd + fi + export is_exclusive=True + +elif [[ ${step} = "awips" ]]; then + + export wtime_awips="03:30:00" + export npe_awips=1 + export npe_node_awips=1 + export nth_awips=1 + export memory_awips="3GB" + +elif [[ ${step} = "gempak" ]]; then + + export wtime_gempak="03:00:00" + export npe_gempak=2 + export npe_gempak_gfs=28 + export npe_node_gempak=2 + export npe_node_gempak_gfs=28 + export nth_gempak=1 + export memory_gempak="4GB" + export memory_gempak_gfs="2GB" + +else + + echo "Invalid step = ${step}, ABORT!" + exit 2 + +fi + +echo "END: config.resources" diff --git a/parm/config/gefs/config.stage_ic b/parm/config/gefs/config.stage_ic new file mode 100644 index 0000000000..e2bb0af2b8 --- /dev/null +++ b/parm/config/gefs/config.stage_ic @@ -0,0 +1,23 @@ +#! /usr/bin/env bash + +########## config.stage_ic ########## + +echo "BEGIN: config.stage_ic" + +# Get task specific resources +source "${EXPDIR}/config.resources" stage_ic + +case "${CASE}" in + "C48") + export CPL_ATMIC="gefs_test" + export CPL_ICEIC="gefs_test" + export CPL_OCNIC="gefs_test" + export CPL_WAVIC="gefs_test" + ;; + *) + echo "FATAL ERROR Unrecognized resolution: ${CASE}" + exit 1 + ;; +esac + +echo "END: config.stage_ic" diff --git a/parm/config/gefs/config.ufs b/parm/config/gefs/config.ufs new file mode 100644 index 0000000000..68b364529e --- /dev/null +++ b/parm/config/gefs/config.ufs @@ -0,0 +1,508 @@ +#! /usr/bin/env bash + +########## config.ufs ########## +# UFS model resolution specific parameters +# e.g. time-step, processor layout, physics and dynamics parameters +# This config sets default variables for FV3, MOM6, CICE6 for their resolutions +# User can over-ride after sourcing this config file + +echo "BEGIN: config.ufs" + +if (( $# <= 1 )); then + + echo "Must specify an input resolution argument to set variables!" + echo "argument can be any one of the following:" + echo "--fv3 C48|C96|C192|C384|C768|C1152|C3072" + echo "--mom6 500|100|025" + echo "--cice6 500|100|025" + echo "--ww3 gnh_10m;aoc_9km;gsh_15m|gwes_30m|glo_025|glo_200|glo_500|mx025" + echo "--gocart" + + exit 1 + +fi + +# Initialize +skip_mom6=true +skip_cice6=true +skip_ww3=true +skip_gocart=true +skip_mediator=true + +# Loop through named arguments +while (( $# > 0 )); do + key="$1" + case "${key}" in + "--fv3") + fv3_res="$2" + shift + ;; + "--mom6") + mom6_res="$2" + skip_mom6=false + shift + ;; + "--cice6") + cice6_res="$2" + skip_cice6=false + shift + ;; + "--ww3") + ww3_res="$2" + skip_ww3=false + shift + ;; + "--gocart") + skip_gocart=false + ;; + *) # unknown option + echo "FATAL ERROR: Unknown option: ${key}, ABORT!" + exit 1 + ;; + esac + shift +done + +# Mediator is required if any of the non-ATM components are used +if [[ "${skip_mom6}" == "false" ]] || [[ "${skip_cice6}" == "false" ]] || [[ "${skip_ww3}" == "false" ]]; then + skip_mediator=false +fi + +case "${machine}" in + "WCOSS2") + npe_node_max=128 + ;; + "HERA" | "ORION" | "HERCULES" ) + npe_node_max=40 + ;; + "JET") + case "${PARTITION_BATCH}" in + "xjet") + npe_node_max=24 + ;; + "vjet" | "sjet") + npe_node_max=16 + ;; + "kjet") + npe_node_max=40 + ;; + *) + echo "FATAL ERROR: Unsupported ${machine} PARTITION_BATCH = ${PARTITION_BATCH}, ABORT!" + exit 1 + ;; + esac + ;; + "S4") + case "${PARTITION_BATCH}" in + "s4") + npe_node_max=32 + ;; + "ivy") + npe_node_max=20 + ;; + *) + echo "FATAL ERROR: Unsupported ${machine} PARTITION_BATCH = ${PARTITION_BATCH}, ABORT!" + exit 1 + ;; + esac + ;; + *) + echo "FATAL ERROR: Unrecognized machine ${machine}" + exit 14 + ;; +esac +export npe_node_max + +# (Standard) Model resolution dependent variables +case "${fv3_res}" in + "C48") + export DELTIM=1200 + export layout_x=1 + export layout_y=1 + export layout_x_gfs=1 + export layout_y_gfs=1 + export nthreads_fv3=1 + export nthreads_fv3_gfs=1 + export cdmbgwd="0.071,2.1,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling + export cdmbgwd_gsl="40.0,1.77,1.0,1.0" # settings for GSL drag suite + export knob_ugwp_tauamp=6.0e-3 # setting for UGWPv1 non-stationary GWD + export WRITE_GROUP=1 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE=1 + export WRITE_GROUP_GFS=1 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE_GFS=1 + ;; + "C96") + export DELTIM=600 + export layout_x=2 + export layout_y=2 + export layout_x_gfs=2 + export layout_y_gfs=2 + export nthreads_fv3=1 + export nthreads_fv3_gfs=1 + export cdmbgwd="0.14,1.8,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling + export cdmbgwd_gsl="20.0,2.5,1.0,1.0" # settings for GSL drag suite + export knob_ugwp_tauamp=3.0e-3 # setting for UGWPv1 non-stationary GWD + export WRITE_GROUP=1 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE=1 + export WRITE_GROUP_GFS=1 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE_GFS=1 + ;; + "C192") + export DELTIM=450 + export layout_x=4 + export layout_y=6 + export layout_x_gfs=4 + export layout_y_gfs=6 + export nthreads_fv3=1 + export nthreads_fv3_gfs=2 + export cdmbgwd="0.23,1.5,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling + export cdmbgwd_gsl="10.0,3.5,1.0,1.0" # settings for GSL drag suite + export knob_ugwp_tauamp=1.5e-3 # setting for UGWPv1 non-stationary GWD + export WRITE_GROUP=1 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE=10 + export WRITE_GROUP_GFS=2 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE_GFS=5 + ;; + "C384") + export DELTIM=300 + export layout_x=6 + export layout_y=8 + export layout_x_gfs=8 + export layout_y_gfs=8 + export nthreads_fv3=1 + export nthreads_fv3_gfs=2 + export cdmbgwd="1.1,0.72,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling + export cdmbgwd_gsl="5.0,5.0,1.0,1.0" # settings for GSL drag suite + export knob_ugwp_tauamp=0.8e-3 # setting for UGWPv1 non-stationary GWD + export WRITE_GROUP=2 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE=8 + export WRITE_GROUP_GFS=2 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE_GFS=10 + ;; + "C768") + export DELTIM=150 + export layout_x=8 + export layout_y=12 + export layout_x_gfs=12 + export layout_y_gfs=16 + export nthreads_fv3=4 + export nthreads_fv3_gfs=4 + export cdmbgwd="4.0,0.15,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling + export cdmbgwd_gsl="2.5,7.5,1.0,1.0" # settings for GSL drag suite + export knob_ugwp_tauamp=0.5e-3 # setting for UGWPv1 non-stationary GWD + export WRITE_GROUP=2 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE=10 + export WRITE_GROUP_GFS=4 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE_GFS=10 + ;; + "C1152") + export DELTIM=120 + export layout_x=8 + export layout_y=16 + export layout_x_gfs=8 + export layout_y_gfs=16 + export nthreads_fv3=4 + export nthreads_fv3_gfs=4 + export cdmbgwd="4.0,0.10,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling + export cdmbgwd_gsl="1.67,8.8,1.0,1.0" # settings for GSL drag suite + export knob_ugwp_tauamp=0.35e-3 # setting for UGWPv1 non-stationary GWD + export WRITE_GROUP=4 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE=10 # TODO: refine these numbers when a case is available + export WRITE_GROUP_GFS=4 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE_GFS=10 # TODO: refine these numbers when a case is available + ;; + "C3072") + export DELTIM=90 + export layout_x=16 + export layout_y=32 + export layout_x_gfs=16 + export layout_y_gfs=32 + export nthreads_fv3=4 + export nthreads_fv3_gfs=4 + export cdmbgwd="4.0,0.05,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling + export cdmbgwd_gsl="0.625,14.1,1.0,1.0" # settings for GSL drag suite + export knob_ugwp_tauamp=0.13e-3 # setting for UGWPv1 non-stationary GWD + export WRITE_GROUP=4 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE=10 # TODO: refine these numbers when a case is available + export WRITE_GROUP_GFS=4 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE_GFS=10 # TODO: refine these numbers when a case is available + ;; + *) + echo "FATAL ERROR: Unsupported FV3 resolution = ${fv3_res}, ABORT!" + exit 1 + ;; +esac + +(( WRTTASK_PER_GROUP_PER_THREAD = WRTTASK_PER_GROUP_PER_THREAD_PER_TILE * 6 )) +(( WRTTASK_PER_GROUP_PER_THREAD_GFS = WRTTASK_PER_GROUP_PER_THREAD_PER_TILE_GFS * 6 )) +export WRTTASK_PER_GROUP_PER_THREAD +export WRTTASK_PER_GROUP_PER_THREAD_GFS + +(( ntasks_fv3 = layout_x * layout_y * 6 )) +(( ntasks_fv3_gfs = layout_x_gfs * layout_y_gfs * 6 )) +export ntasks_fv3 +export ntasks_fv3_gfs + +(( ntasks_quilt = WRITE_GROUP * WRTTASK_PER_GROUP_PER_THREAD )) +(( ntasks_quilt_gfs = WRITE_GROUP_GFS * WRTTASK_PER_GROUP_PER_THREAD_GFS )) +export ntasks_quilt +export ntasks_quilt_gfs + +# Determine whether to use parallel NetCDF based on resolution +case ${fv3_res} in + "C48" | "C96" | "C192" | "C384") + OUTPUT_FILETYPE_ATM="netcdf" + OUTPUT_FILETYPE_SFC="netcdf" + ;; + "C768" | "C1152" | "C3072") + OUTPUT_FILETYPE_ATM="netcdf_parallel" + OUTPUT_FILETYPE_SFC="netcdf_parallel" + ;; +esac +export OUTPUT_FILETYPE_ATM OUTPUT_FILETYPE_SFC + +# cpl defaults +export cpl=".false." +export cplflx=".false." +export cplice=".false." +export cplchm=".false." +export cplwav=".false." +export cplwav2atm=".false." +export CCPP_SUITE="FV3_GFS_v17_p8_ugwpv1" +model_list="atm" + +# Mediator specific settings +if [[ "${skip_mediator}" == "false" ]]; then + export cpl=".true." + export nthreads_mediator=${nthreads_fv3} # Use same threads as FV3 + export CCPP_SUITE="FV3_GFS_v17_coupled_p8_ugwpv1" # TODO: Does this include FV3_GFS_v17_p8? Can this be used instead of FV3_GFS_v17_p8? +fi + +# MOM6 specific settings +if [[ "${skip_mom6}" == "false" ]]; then + source "${EXPDIR}/config.ocn" + export cplflx=".true." + model_list="${model_list}.ocean" + nthreads_mom6=1 + case "${mom6_res}" in + "500") + ntasks_mom6=8 + OCNTIM=3600 + NX_GLB=72 + NY_GLB=35 + DT_DYNAM_MOM6='3600' + DT_THERM_MOM6='3600' + FRUNOFF="" + CHLCLIM="seawifs_1998-2006_smoothed_2X.nc" + MOM6_RESTART_SETTING='r' + MOM6_RIVER_RUNOFF='False' + eps_imesh="4.0e-1" + MOM6_DIAG_COORD_DEF_Z_FILE="oceanda_zgrid_25L.nc" + MOM6_DIAG_MISVAL="0.0" + MOM6_ALLOW_LANDMASK_CHANGES='False' + TOPOEDITS="" + ;; + "100") + ntasks_mom6=20 + OCNTIM=3600 + NX_GLB=360 + NY_GLB=320 + DT_DYNAM_MOM6='1800' + DT_THERM_MOM6='3600' + FRUNOFF="" + CHLCLIM="seawifs_1998-2006_smoothed_2X.nc" + MOM6_RESTART_SETTING='n' + MOM6_RIVER_RUNOFF='False' + eps_imesh="2.5e-1" + if [[ "${DO_JEDIOCNVAR:-NO}" = "YES" ]]; then + MOM6_DIAG_COORD_DEF_Z_FILE="oceanda_zgrid_75L.nc" + MOM6_DIAG_MISVAL="0.0" + else + MOM6_DIAG_COORD_DEF_Z_FILE="interpolate_zgrid_40L.nc" + MOM6_DIAG_MISVAL="-1e34" + fi + ;; + "050") + ntasks_mom6=60 + OCNTIM=3600 + NX_GLB=720 + NY_GLB=576 + DT_DYNAM_MOM6='1800' + DT_THERM_MOM6='3600' + FRUNOFF="runoff.daitren.clim.${NX_GLB}x${NY_GLB}.v20180328.nc" + CHLCLIM="seawifs-clim-1997-2010.${NX_GLB}x${NY_GLB}.v20180328.nc" + MOM6_RESTART_SETTING='n' + MOM6_RIVER_RUNOFF='True' + eps_imesh="1.0e-1" + TOPOEDITS="ufs.topo_edits_011818.nc" + if [[ "${DO_JEDIOCNVAR:-NO}" = "YES" ]]; then + MOM6_DIAG_COORD_DEF_Z_FILE="oceanda_zgrid_75L.nc" + MOM6_DIAG_MISVAL="0.0" + else + MOM6_DIAG_COORD_DEF_Z_FILE="interpolate_zgrid_40L.nc" + MOM6_DIAG_MISVAL="-1e34" + fi + MOM6_ALLOW_LANDMASK_CHANGES='True' + ;; + "025") + ntasks_mom6=220 + OCNTIM=1800 + NX_GLB=1440 + NY_GLB=1080 + DT_DYNAM_MOM6='900' + DT_THERM_MOM6='1800' + FRUNOFF="runoff.daitren.clim.${NX_GLB}x${NY_GLB}.v20180328.nc" + CHLCLIM="seawifs-clim-1997-2010.${NX_GLB}x${NY_GLB}.v20180328.nc" + MOM6_RIVER_RUNOFF='True' + MOM6_RESTART_SETTING="r" + eps_imesh="1.0e-1" + TOPOEDITS="" + if [[ "${DO_JEDIOCNVAR:-NO}" = "YES" ]]; then + MOM6_DIAG_COORD_DEF_Z_FILE="oceanda_zgrid_75L.nc" + MOM6_DIAG_MISVAL="0.0" + else + MOM6_DIAG_COORD_DEF_Z_FILE="interpolate_zgrid_40L.nc" + MOM6_DIAG_MISVAL="-1e34" + fi + MOM6_ALLOW_LANDMASK_CHANGES='True' + ;; + *) + echo "FATAL ERROR: Unsupported MOM6 resolution = ${mom6_res}, ABORT!" + exit 1 + ;; + esac + + export nthreads_mom6 ntasks_mom6 + export OCNTIM + export NX_GLB NY_GLB + export DT_DYNAM_MOM6 DT_THERM_MOM6 + export FRUNOFF + export CHLCLIM + export MOM6_RIVER_RUNOFF + export MOM6_RESTART_SETTING + export eps_imesh + export TOPOEDITS + export MOM6_DIAG_COORD_DEF_Z_FILE + export MOM6_DIAG_MISVAL + export MOM6_ALLOW_LANDMASK_CHANGES +fi + +# CICE6 specific settings +if [[ "${skip_cice6}" == "false" ]]; then + source "${EXPDIR}/config.ice" + export cplice=".true." + model_list="${model_list}.ice" + # Ensure we sourced the MOM6 section + if [[ "${skip_mom6}" == "true" ]]; then + echo "FATAL ERROR: CICE6 cannot be configured without MOM6, ABORT!" + exit 1 + fi + nthreads_cice6=${nthreads_mom6} # CICE6 needs to run on same threads as MOM6 + case "${cice6_res}" in + "500") + ntasks_cice6=4 + cice6_processor_shape="slenderX1" + ;; + "100") + ntasks_cice6=10 + cice6_processor_shape="slenderX2" + ;; + "050") + ntasks_cice6=30 + cice6_processor_shape="slenderX2" + ;; + "025") + ntasks_cice6=120 + cice6_processor_shape="slenderX2" + ;; + *) + echo "FATAL ERROR: Unsupported CICE6 resolution = ${cice6_res}, ABORT!" + exit 1 + ;; + esac + # NX_GLB and NY_GLB are set in the MOM6 section above + # CICE6 runs on the same domain decomposition as MOM6 + export nthreads_cice6 ntasks_cice6 + export cice6_processor_shape +fi + +# WW3 specific settings +if [[ "${skip_ww3}" == "false" ]]; then + source "${EXPDIR}/config.wave" + export cplwav=".true." + export cplwav2atm=".true." + model_list="${model_list}.wave" + nthreads_ww3=2 + case "${ww3_res}" in + "gnh_10m;aoc_9km;gsh_15m") + ntasks_ww3=140 + ;; + "gwes_30m") + ntasks_ww3=100 + ;; + "glo_025") + ntasks_ww3=262 + ;; + "glo_200") + ntasks_ww3=30 + nthreads_ww3=1 + ;; + "glo_500") + ntasks_ww3=12 + nthreads_ww3=1 + ;; + "mx025") + ntasks_ww3=80 + ;; + *) + echo "FATAL ERROR: Unsupported WW3 resolution = ${ww3_res}, ABORT!" + exit 1 + ;; + esac + export ntasks_ww3 nthreads_ww3 +fi + +# GOCART specific settings +if [[ "${skip_gocart}" == "false" ]]; then + source "${EXPDIR}/config.aero" + export cplchm=".true." + model_list="${model_list}.aero" +fi + +# Set the name of the UFS (previously nems) configure template to use +case "${model_list}" in + atm) + export ufs_configure_template="${HOMEgfs}/parm/ufs/ufs.configure.atm.IN" + ;; + atm.aero) + export ufs_configure_template="${HOMEgfs}/parm/ufs/ufs.configure.atm_aero.IN" + ;; + atm.wave) + export ufs_configure_template="${HOMEgfs}/parm/ufs/ufs.configure.leapfrog_atm_wav.IN" + ;; + atm.ocean.ice) + export ufs_configure_template="${HOMEgfs}/parm/ufs/ufs.configure.cpld.IN" + ;; + atm.ocean.ice.aero) + export ufs_configure_template="${HOMEgfs}/parm/ufs/ufs.configure.cpld_aero.IN" + ;; + atm.ocean.ice.wave) + export ufs_configure_template="${HOMEgfs}/parm/ufs/ufs.configure.cpld_outerwave.IN" + ;; + atm.ocean.ice.wave.aero) + export ufs_configure_template="${HOMEgfs}/parm/ufs/ufs.configure.cpld_aero_outerwave.IN" + ;; + *) + echo "FATAL ERROR: Unable to determine appropriate UFS configure template for ${model_list}" + exit 16 + ;; +esac + +if [[ ! -r "${ufs_configure_template}" ]]; then + echo "FATAL ERROR: ${ufs_configure_template} either doesn't exist or is not readable." + exit 17 +fi + +unset model_list + +echo "END: config.ufs" diff --git a/parm/config/gefs/config.wave b/parm/config/gefs/config.wave new file mode 100644 index 0000000000..e04331e533 --- /dev/null +++ b/parm/config/gefs/config.wave @@ -0,0 +1,185 @@ +#! /usr/bin/env bash + +########## config.wave ########## +# Wave steps specific + +echo "BEGIN: config.wave" + +# Parameters that are common to all wave model steps + +# System and version +export wave_sys_ver=v1.0.0 + +export EXECwave="${HOMEgfs}/exec" +export FIXwave="${HOMEgfs}/fix/wave" +export PARMwave="${HOMEgfs}/parm/wave" +export USHwave="${HOMEgfs}/ush" + +# This config contains variables/parameters used in the fcst step +# Some others are also used across the workflow in wave component scripts + +# General runtime labels +export CDUMPwave="${RUN}wave" + +# In GFS/GDAS, restart files are generated/read from gdas runs +export CDUMPRSTwave="gdas" + +# Grids for wave model +export waveGRD=${waveGRD:-'mx025'} + +#grid dependent variable defaults +export waveGRDN='1' # grid number for ww3_multi +export waveGRDG='10' # grid group for ww3_multi +export USE_WAV_RMP='NO' # YES/NO rmp grid remapping pre-processed coefficients +export waveMULTIGRID='.false.' # .true./.false. for multi or shel +export MESH_WAV="mesh.${waveGRD}.nc" # Mesh grid for wave model for CMEPS +export waveesmfGRD=' ' # input grid for multigrid + +#Grid dependent variables for various grids +case "${waveGRD}" in + "gnh_10m;aoc_9km;gsh_15m") + #GFSv16 settings: + export waveGRDN='1 2 3' + export waveGRDG='10 20 30' + export USE_WAV_RMP='YES' + export waveMULTIGRID='.true.' + export IOSRV='3' + export MESH_WAV=' ' + export waveesmfGRD='glox_10m' + export waveuoutpGRD='points' + export waveinterpGRD='glo_15mxt at_10m ep_10m wc_10m glo_30m' + export wavepostGRD='gnh_10m aoc_9km gsh_15m' + ;; + "gwes_30m") + #Grid used for P8 + export waveinterpGRD='' + export wavepostGRD='gwes_30m' + export waveuoutpGRD=${waveGRD} + ;; + "mx025") + #Grid used for HR1 (tripolar 1/4 deg) + export waveinterpGRD='reg025' + export wavepostGRD='' + export waveuoutpGRD=${waveGRD} + ;; + "glo_025") + #GEFSv13 regular lat/lon 1/4 deg grid + export waveinterpGRD='' + export wavepostGRD='glo_025' + export waveuoutpGRD=${waveGRD} + ;; + "glo_200") + #Global regular lat/lon 2deg deg grid + export waveinterpGRD='' + export wavepostGRD='glo_200' + export waveuoutpGRD=${waveGRD} + ;; + "glo_500") + #Global regular lat/lon 5deg deg grid + export waveinterpGRD='' + export wavepostGRD='glo_500' + export waveuoutpGRD=${waveGRD} + ;; + *) + echo "FATAL ERROR: No grid specific wave config values exist for ${waveGRD}. Aborting." + exit 1 + ;; +esac + +# Grids for input wind fields +export WAVEWND_DID= +export WAVEWND_FID= + +# The start time reflects the number of hindcast hours prior to the cycle initial time +export FHMAX_WAV=${FHMAX_GFS} +export WAVHINDH=0 +export FHMIN_WAV=0 +export FHOUT_WAV=3 +export FHMAX_HF_WAV=120 +export FHOUT_HF_WAV=1 +export FHMAX_WAV_IBP=180 +if (( FHMAX_WAV < FHMAX_WAV_IBP )); then export FHMAX_WAV_IBP=${FHMAX_GFS} ; fi + +# gridded and point output rate +export DTFLD_WAV=$(( FHOUT_HF_WAV * 3600 )) +export DTPNT_WAV=3600 +export FHINCP_WAV=$(( DTPNT_WAV / 3600 )) + +# Selected output parameters (gridded) +export OUTPARS_WAV="WND CUR ICE HS T01 T02 DIR FP DP PHS PTP PDIR CHA" + +# Restart file config +export WAVHCYC=${assim_freq:-6} +export FHMAX_WAV_CUR=192 # RTOFS forecasts only out to 8 days + +# Restart timing business + +export RSTTYPE_WAV='T' # generate second tier of restart files +rst_dt_gfs=$(( restart_interval_gfs * 3600 )) # TODO: This calculation needs to move to parsing_namelists_WW3.sh +if [[ ${rst_dt_gfs} -gt 0 ]]; then + export DT_1_RST_WAV=0 #${rst_dt_gfs:-0} # time between restart files, set to DTRST=1 for a single restart file + #temporarily set to zero to avoid a clash in requested restart times + #which makes the wave model crash a fix for the model issue will be coming + export DT_2_RST_WAV=${rst_dt_gfs:-0} # restart stride for checkpointing restart +else + rst_dt_fhmax=$(( FHMAX_WAV * 3600 )) + export DT_1_RST_WAV=0 # time between restart files, set to DTRST=1 for a single restart file + export DT_2_RST_WAV=${rst_dt_fhmax:-0} # use checkpoint restart file name for creating restart at end of run +fi +export RSTIOFF_WAV=0 # first restart file offset relative to model start +# +# Set runmember to default value if not GEFS cpl run +# (for a GFS coupled run, RUNMEN would be unset, this should default to -1) +export RUNMEM=${RUNMEM:--1} +# Set wave model member tags if ensemble run +# -1: no suffix, deterministic; xxxNN: extract two last digits to make ofilename prefix=gwesNN +if [[ ${RUNMEM} = -1 ]]; then +# No suffix added to model ID in case of deterministic run + export waveMEMB= +else +# Extract member number only + export waveMEMB="${RUNMEM: -2}" +fi + +# Determine if wave component needs input and/or is coupled +export WW3ATMINP='CPL' +if [[ ${DO_ICE} == "YES" ]]; then + export WW3ICEINP='CPL' + export WAVEICE_FID= +else + export WW3ICEINP='YES' + export WAVEICE_FID=glix_10m +fi + +export WAVECUR_DID=rtofs +if [[ ${DO_OCN} == "YES" ]]; then + export WW3CURINP='CPL' + export WAVECUR_FID= +else + export WW3CURINP='YES' + export WAVECUR_FID=glix_10m +fi + +# Determine if input is from perturbed ensemble (T) or single input file (F) for all members +export WW3ATMIENS='F' +export WW3ICEIENS='F' +export WW3CURIENS='F' + +export GOFILETYPE=1 # GOFILETYPE=1 one gridded file per output step +export POFILETYPE=1 # POFILETYPE=1 one point file per output step + +# Parameters for ww3_multi/shel.inp +# Unified output T or F +export FUNIPNT='T' +# Output server type (see ww3_shel/multi.inp in WW3 repo) +export IOSRV=${IOSRV:-'1'} +# Flag for dedicated output process for unified points +export FPNTPROC='T' +# Flag for grids sharing dedicated output processes +export FGRDPROC='F' +# Flag for masking computation in two-way nesting +export FLAGMASKCOMP="F" +# Flag for masking at printout time. +export FLAGMASKOUT="F" + +echo "END: config.wave" diff --git a/parm/config/gefs/config.waveinit b/parm/config/gefs/config.waveinit new file mode 120000 index 0000000000..769bbcf903 --- /dev/null +++ b/parm/config/gefs/config.waveinit @@ -0,0 +1 @@ +../gfs/config.waveinit \ No newline at end of file diff --git a/parm/config/gefs/yaml/defaults.yaml b/parm/config/gefs/yaml/defaults.yaml new file mode 100644 index 0000000000..ce5d8aeb3d --- /dev/null +++ b/parm/config/gefs/yaml/defaults.yaml @@ -0,0 +1,6 @@ +base: + DO_JEDIATMVAR: "NO" + DO_JEDIATMENS: "NO" + DO_JEDIOCNVAR: "NO" + DO_JEDILANDDA: "NO" + DO_MERGENSST: "NO" diff --git a/parm/config/gfs/config.aero b/parm/config/gfs/config.aero new file mode 100644 index 0000000000..32993554b4 --- /dev/null +++ b/parm/config/gfs/config.aero @@ -0,0 +1,46 @@ +#! /usr/bin/env bash + +# UFS-Aerosols settings + +# Turn off warnings about unused variables +# shellcheck disable=SC2034 + + +# Path to the input data tree +case ${machine} in + "HERA") + AERO_INPUTS_DIR="/scratch1/NCEPDEV/global/glopara/data/gocart_emissions" + ;; + "ORION" | "HERCULES") + AERO_INPUTS_DIR="/work2/noaa/global/wkolczyn/noscrub/global-workflow/gocart_emissions" + ;; + "S4") + AERO_INPUTS_DIR="/data/prod/glopara/gocart_emissions" + ;; + "WCOSS2") + AERO_INPUTS_DIR="/lfs/h2/emc/global/noscrub/emc.global/data/gocart_emissions" + ;; + "JET") + AERO_INPUTS_DIR="/lfs4/HFIP/hfv3gfs/glopara/data/gocart_emissions" + ;; + *) + echo "FATAL ERROR: Machine ${machine} unsupported for aerosols" + exit 2 + ;; +esac +export AERO_INPUTS_DIR + +export AERO_DIAG_TABLE="${HOMEgfs}/parm/ufs/fv3/diag_table.aero" +export AERO_FIELD_TABLE="${HOMEgfs}/parm/ufs/fv3/field_table.aero" +# Biomass burning emission dataset. Choose from: gbbepx, qfed, none +export AERO_EMIS_FIRE="qfed" +# Directory containing GOCART configuration files +export AERO_CONFIG_DIR="${HOMEgfs}/parm/ufs/gocart" + +# Aerosol convective scavenging factors (list of string array elements) +# Element syntax: ':'. Use = * to set default factor for all aerosol tracers +# Scavenging factors are set to 0 (no scavenging) if unset +export fscav_aero="'*:0.3','so2:0.0','msa:0.0','dms:0.0','nh3:0.4','nh4:0.6','bc1:0.6','bc2:0.6','oc1:0.4','oc2:0.4','dust1:0.6','dust2:0.6', 'dust3:0.6','dust4:0.6','dust5:0.6','seas1:0.5','seas2:0.5','seas3:0.5','seas4:0.5','seas5:0.5'" +# +# Number of diagnostic aerosol tracers (default: 0) +export dnats_aero=2 diff --git a/parm/config/gfs/config.aeroanl b/parm/config/gfs/config.aeroanl new file mode 100644 index 0000000000..4100690635 --- /dev/null +++ b/parm/config/gfs/config.aeroanl @@ -0,0 +1,30 @@ +#!/bin/bash -x + +########## config.aeroanl ########## +# configuration common to all aero analysis tasks + +echo "BEGIN: config.aeroanl" + +export CASE_ANL=${CASE} +export OBS_YAML_DIR=${HOMEgfs}/sorc/gdas.cd/parm/aero/obs/config/ +export OBS_LIST=${HOMEgfs}/sorc/gdas.cd/parm/aero/obs/lists/gdas_aero_prototype.yaml +export STATICB_TYPE='identity' +export BERROR_YAML=${HOMEgfs}/sorc/gdas.cd/parm/aero/berror/staticb_${STATICB_TYPE}.yaml +export FV3JEDI_FIX=${HOMEgfs}/fix/gdas +export BERROR_DATA_DIR=${FV3JEDI_FIX}/bump/aero/${CASE_ANL}/ +export BERROR_DATE="20160630.000000" + +export io_layout_x=@IO_LAYOUT_X@ +export io_layout_y=@IO_LAYOUT_Y@ + +export JEDIEXE=${HOMEgfs}/exec/fv3jedi_var.x + +if [[ "${DOIAU}" == "YES" ]]; then + export aero_bkg_times="3,6,9" + export AEROVARYAML=${HOMEgfs}/sorc/gdas.cd/parm/aero/variational/3dvar_fgat_gfs_aero.yaml +else + export aero_bkg_times="6" + export AEROVARYAML=${HOMEgfs}/sorc/gdas.cd/parm/aero/variational/3dvar_gfs_aero.yaml +fi + +echo "END: config.aeroanl" diff --git a/parm/config/gfs/config.aeroanlfinal b/parm/config/gfs/config.aeroanlfinal new file mode 100644 index 0000000000..230ec5205a --- /dev/null +++ b/parm/config/gfs/config.aeroanlfinal @@ -0,0 +1,10 @@ +#!/bin/bash -x + +########## config.aeroanlfinal ########## +# Post Aero Analysis specific + +echo "BEGIN: config.aeroanlfinal" + +# Get task specific resources +. $EXPDIR/config.resources aeroanlfinal +echo "END: config.aeroanlfinal" diff --git a/parm/config/gfs/config.aeroanlinit b/parm/config/gfs/config.aeroanlinit new file mode 100644 index 0000000000..72175b8d0c --- /dev/null +++ b/parm/config/gfs/config.aeroanlinit @@ -0,0 +1,10 @@ +#!/bin/bash -x + +########## config.aeroanlinit ########## +# Pre Aero Analysis specific + +echo "BEGIN: config.aeroanlinit" + +# Get task specific resources +. $EXPDIR/config.resources aeroanlinit +echo "END: config.aeroanlinit" diff --git a/parm/config/gfs/config.aeroanlrun b/parm/config/gfs/config.aeroanlrun new file mode 100644 index 0000000000..da13df2831 --- /dev/null +++ b/parm/config/gfs/config.aeroanlrun @@ -0,0 +1,11 @@ +#!/bin/bash -x + +########## config.aeroanlrun ########## +# Aerosol Analysis specific + +echo "BEGIN: config.aeroanlrun" + +# Get task specific resources +. $EXPDIR/config.resources aeroanlrun + +echo "END: config.aeroanlrun" diff --git a/parm/config/gfs/config.aerosol_init b/parm/config/gfs/config.aerosol_init new file mode 100644 index 0000000000..0e586e0231 --- /dev/null +++ b/parm/config/gfs/config.aerosol_init @@ -0,0 +1,10 @@ +#! /usr/bin/env bash + +########## config.aerosol_init ########## + +echo "BEGIN: config.aerosol_init" + +# Get task specific resources +source $EXPDIR/config.resources aerosol_init + +echo "END: config.aerosol_init" \ No newline at end of file diff --git a/parm/config/gfs/config.anal b/parm/config/gfs/config.anal new file mode 100644 index 0000000000..e3a17f9c6a --- /dev/null +++ b/parm/config/gfs/config.anal @@ -0,0 +1,146 @@ +#! /usr/bin/env bash + +########## config.anal ########## +# Analysis specific + +echo "BEGIN: config.anal" + +# Get task specific resources +. ${EXPDIR}/config.resources anal + +if [[ ${DONST} = "YES" ]]; then + . ${EXPDIR}/config.nsst +fi + +if [[ "${CDUMP}" = "gfs" ]] ; then + export USE_RADSTAT="NO" # This can be only used when bias correction is not-zero. + export GENDIAG="NO" + export SETUP='diag_rad=.false.,diag_pcp=.false.,diag_conv=.false.,diag_ozone=.false.,write_diag(3)=.false.,niter(2)=100,' + export DIAG_TARBALL="YES" +fi + +export npe_gsi=${npe_anal} + +if [[ "${CDUMP}" == "gfs" ]] ; then + export npe_gsi=${npe_anal_gfs} + export nth_anal=${nth_anal_gfs} +fi + +# Set parameters specific to L127 +if [[ ${LEVS} = "128" ]]; then + export GRIDOPTS="nlayers(63)=1,nlayers(64)=1," + export SETUP="gpstop=55,nsig_ext=45,${SETUP:-}" +fi + +# Set namelist option for LETKF +export lobsdiag_forenkf=".false." # anal does not need to write out jacobians + # set to .true. in config.eobs and config.eupd + +# Do not process the following datasets +export GSNDBF=${GSNDBF:-/dev/null} +export AMSREBF=${AMSREBF:-/dev/null} +export SSMITBF=${SSMITBF:-/dev/null} +export AMSR2BF=${AMSR2BF:-/dev/null} + + +# Set default values for info files and observation error +# NOTE: Remember to set PRVT in config.prep as OBERROR is set below +export CONVINFO=${FIXgsi}/global_convinfo.txt +export OZINFO=${FIXgsi}/global_ozinfo.txt +export SATINFO=${FIXgsi}/global_satinfo.txt +export OBERROR=${FIXgsi}/prepobs_errtable.global + + +# Use experimental dumps in EMC GFS v16 parallels +if [[ ${RUN_ENVIR} == "emc" ]]; then + # Set info files and prepobs.errtable.global for GFS v16 retrospective parallels + if [[ "${PDY}${cyc}" -ge "2019021900" && "${PDY}${cyc}" -lt "2019110706" ]]; then + export CONVINFO=${FIXgsi}/gfsv16_historical/global_convinfo.txt.2019021900 + export OBERROR=${FIXgsi}/gfsv16_historical/prepobs_errtable.global.2019021900 + fi + + # Place GOES-15 AMVs in monitor, assimilate GOES-17 AMVs, assimilate KOMPSAT-5 gps + if [[ "${PDY}${cyc}" -ge "2019110706" && "${PDY}${cyc}" -lt "2020040718" ]]; then + export CONVINFO=${FIXgsi}/gfsv16_historical/global_convinfo.txt.2019110706 + export OBERROR=${FIXgsi}/gfsv16_historical/prepobs_errtable.global.2019110706 + fi + + # Assimilate 135 (T) & 235 (uv) Canadian AMDAR observations + if [[ "${PDY}${cyc}" -ge "2020040718" && "${PDY}${cyc}" -lt "2020052612" ]]; then + export CONVINFO=${FIXgsi}/gfsv16_historical/global_convinfo.txt.2020040718 + export OBERROR=${FIXgsi}/gfsv16_historical/prepobs_errtable.global.2020040718 + fi + + # Assimilate COSMIC-2 + if [[ "${PDY}${cyc}" -ge "2020052612" && "${PDY}${cyc}" -lt "2020082412" ]]; then + export CONVINFO=${FIXgsi}/gfsv16_historical/global_convinfo.txt.2020052612 + export OBERROR=${FIXgsi}/gfsv16_historical/prepobs_errtable.global.2020040718 + fi + + # Assimilate HDOB + if [[ "${PDY}${cyc}" -ge "2020082412" && "${PDY}${cyc}" -lt "2020091612" ]]; then + export CONVINFO=${FIXgsi}/gfsv16_historical/global_convinfo.txt.2020082412 + fi + + # Assimilate Metop-C GNSSRO + if [[ "${PDY}${cyc}" -ge "2020091612" && "${PDY}${cyc}" -lt "2021031712" ]]; then + export CONVINFO=${FIXgsi}/gfsv16_historical/global_convinfo.txt.2020091612 + fi + + # Assimilate DO-2 GeoOptics + if [[ "${PDY}${cyc}" -ge "2021031712" && "${PDY}${cyc}" -lt "2021091612" ]]; then + export CONVINFO=${FIXgsi}/gfsv16_historical/global_convinfo.txt.2021031712 + fi + + # NOTE: + # As of 2021110312, gfsv16_historical/global_convinfo.txt.2021110312 is + # identical to ../global_convinfo.txt. Thus, the logic below is not + # needed at this time. + # Assimilate COSMIC-2 GPS + # if [[ "${PDY}${cyc}" -ge "2021110312" && "${PDY}${cyc}" -lt "YYYYMMDDHH" ]]; then + # export CONVINFO=$FIXgsi/gfsv16_historical/global_convinfo.txt.2021110312 + # fi + + # Turn off assmilation of OMPS during period of bad data + if [[ "${PDY}${cyc}" -ge "2020011600" && "${PDY}${cyc}" -lt "2020011806" ]]; then + export OZINFO=${FIXgsi}/gfsv16_historical/global_ozinfo.txt.2020011600 + fi + + + # Set satinfo for start of GFS v16 parallels + if [[ "${PDY}${cyc}" -ge "2019021900" && "${PDY}${cyc}" -lt "2019110706" ]]; then + export SATINFO=${FIXgsi}/gfsv16_historical/global_satinfo.txt.2019021900 + fi + + # Turn on assimilation of Metop-C AMSUA and MHS + if [[ "${PDY}${cyc}" -ge "2019110706" && "${PDY}${cyc}" -lt "2020022012" ]]; then + export SATINFO=${FIXgsi}/gfsv16_historical/global_satinfo.txt.2019110706 + fi + + # Turn off assimilation of Metop-A MHS + if [[ "${PDY}${cyc}" -ge "2020022012" && "${PDY}${cyc}" -lt "2021052118" ]]; then + export SATINFO=${FIXgsi}/gfsv16_historical/global_satinfo.txt.2020022012 + fi + + # Turn off assimilation of S-NPP CrIS + if [[ "${PDY}${cyc}" -ge "2021052118" && "${PDY}${cyc}" -lt "2021092206" ]]; then + export SATINFO=${FIXgsi}/gfsv16_historical/global_satinfo.txt.2021052118 + fi + + # Turn off assimilation of MetOp-A IASI + if [[ "${PDY}${cyc}" -ge "2021092206" && "${PDY}${cyc}" -lt "2021102612" ]]; then + export SATINFO=${FIXgsi}/gfsv16_historical/global_satinfo.txt.2021092206 + fi + + # NOTE: + # As of 2021110312, gfsv16_historical/global_satinfo.txt.2021110312 is + # identical to ../global_satinfo.txt. Thus, the logic below is not + # needed at this time + # + # Turn off assmilation of all Metop-A MHS + # if [[ "${PDY}${cyc}" -ge "2021110312" && "${PDY}${cyc}" -lt "YYYYMMDDHH" ]]; then + # export SATINFO=$FIXgsi/gfsv16_historical/global_satinfo.txt.2021110312 + # fi +fi + +echo "END: config.anal" diff --git a/parm/config/gfs/config.analcalc b/parm/config/gfs/config.analcalc new file mode 100644 index 0000000000..9405114ecc --- /dev/null +++ b/parm/config/gfs/config.analcalc @@ -0,0 +1,15 @@ +#! /usr/bin/env bash + +########## config.analcalc ########## +# GFS post-anal specific (non-diag) + +echo "BEGIN: config.analcalc" + +# Get task specific resources +. $EXPDIR/config.resources analcalc + +if [[ "$CDUMP" == "gfs" ]]; then + export nth_echgres=$nth_echgres_gfs +fi + +echo "END: config.analcalc" diff --git a/parm/config/config.analdiag b/parm/config/gfs/config.analdiag old mode 100755 new mode 100644 similarity index 90% rename from parm/config/config.analdiag rename to parm/config/gfs/config.analdiag index 285e614d37..7b128d3bad --- a/parm/config/config.analdiag +++ b/parm/config/gfs/config.analdiag @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#! /usr/bin/env bash ########## config.analdiag ########## # GFS post-anal specific (diag) diff --git a/parm/config/gfs/config.arch b/parm/config/gfs/config.arch new file mode 100644 index 0000000000..a23bcce6ae --- /dev/null +++ b/parm/config/gfs/config.arch @@ -0,0 +1,15 @@ +#! /usr/bin/env bash + +########## config.arch ########## +# Archive specific + +echo "BEGIN: config.arch" + +# Get task specific resources +. "${EXPDIR}/config.resources" arch + +export ARCH_GAUSSIAN="YES" +export ARCH_GAUSSIAN_FHMAX=${FHMAX_GFS} +export ARCH_GAUSSIAN_FHINC=${FHOUT_GFS} + +echo "END: config.arch" diff --git a/parm/config/gfs/config.atmanl b/parm/config/gfs/config.atmanl new file mode 100644 index 0000000000..abfbd80734 --- /dev/null +++ b/parm/config/gfs/config.atmanl @@ -0,0 +1,21 @@ +#! /usr/bin/env bash + +########## config.atmanl ########## +# configuration common to all atm var analysis tasks + +echo "BEGIN: config.atmanl" + +export CASE_ANL=${CASE} +export OBS_YAML_DIR=${HOMEgfs}/sorc/gdas.cd/parm/atm/obs/config/ +export OBS_LIST=${HOMEgfs}/sorc/gdas.cd/parm/atm/obs/lists/gdas_prototype_3d.yaml +export ATMVARYAML=${HOMEgfs}/sorc/gdas.cd/parm/atm/variational/3dvar_dripcg.yaml +export STATICB_TYPE="gsibec" +export BERROR_YAML=${HOMEgfs}/sorc/gdas.cd/parm/atm/berror/staticb_${STATICB_TYPE}.yaml +export INTERP_METHOD='barycentric' + +export io_layout_x=@IO_LAYOUT_X@ +export io_layout_y=@IO_LAYOUT_Y@ + +export JEDIEXE=${HOMEgfs}/exec/fv3jedi_var.x + +echo "END: config.atmanl" diff --git a/parm/config/gfs/config.atmanlfinal b/parm/config/gfs/config.atmanlfinal new file mode 100644 index 0000000000..a6b714f7fc --- /dev/null +++ b/parm/config/gfs/config.atmanlfinal @@ -0,0 +1,10 @@ +#! /usr/bin/env bash + +########## config.atmanlfinal ########## +# Post Atm Var Analysis specific + +echo "BEGIN: config.atmanlfinal" + +# Get task specific resources +. "${EXPDIR}/config.resources" atmanlfinal +echo "END: config.atmanlfinal" diff --git a/parm/config/gfs/config.atmanlinit b/parm/config/gfs/config.atmanlinit new file mode 100644 index 0000000000..bc95ef4962 --- /dev/null +++ b/parm/config/gfs/config.atmanlinit @@ -0,0 +1,10 @@ +#! /usr/bin/env bash + +########## config.atmanlinit ########## +# Pre Atm Var Analysis specific + +echo "BEGIN: config.atmanlinit" + +# Get task specific resources +. "${EXPDIR}/config.resources" atmanlinit +echo "END: config.atmanlinit" diff --git a/parm/config/gfs/config.atmanlrun b/parm/config/gfs/config.atmanlrun new file mode 100644 index 0000000000..68b7615718 --- /dev/null +++ b/parm/config/gfs/config.atmanlrun @@ -0,0 +1,11 @@ +#! /usr/bin/env bash + +########## config.atmanlrun ########## +# Atm Var Analysis specific + +echo "BEGIN: config.atmanlrun" + +# Get task specific resources +. "${EXPDIR}/config.resources" atmanlrun + +echo "END: config.atmanlrun" diff --git a/parm/config/gfs/config.atmensanl b/parm/config/gfs/config.atmensanl new file mode 100644 index 0000000000..58fd7b6e22 --- /dev/null +++ b/parm/config/gfs/config.atmensanl @@ -0,0 +1,18 @@ +#! /usr/bin/env bash + +########## config.atmensanl ########## +# configuration common to all atm ens analysis tasks + +echo "BEGIN: config.atmensanl" + +export OBS_YAML_DIR=${HOMEgfs}/sorc/gdas.cd/parm/atm/obs/config/ +export OBS_LIST=${HOMEgfs}/sorc/gdas.cd/parm/atm/obs/lists/lgetkf_prototype.yaml +export ATMENSYAML=${HOMEgfs}/sorc/gdas.cd/parm/atm/lgetkf/lgetkf.yaml +export INTERP_METHOD='barycentric' + +export io_layout_x=@IO_LAYOUT_X@ +export io_layout_y=@IO_LAYOUT_Y@ + +export JEDIEXE=${HOMEgfs}/exec/fv3jedi_letkf.x + +echo "END: config.atmensanl" diff --git a/parm/config/gfs/config.atmensanlfinal b/parm/config/gfs/config.atmensanlfinal new file mode 100644 index 0000000000..5d8ec458c3 --- /dev/null +++ b/parm/config/gfs/config.atmensanlfinal @@ -0,0 +1,10 @@ +#! /usr/bin/env bash + +########## config.atmensanlfinal ########## +# Post Atm Ens Analysis specific + +echo "BEGIN: config.atmensanlfinal" + +# Get task specific resources +. "${EXPDIR}/config.resources" atmensanlfinal +echo "END: config.atmensanlfinal" diff --git a/parm/config/gfs/config.atmensanlinit b/parm/config/gfs/config.atmensanlinit new file mode 100644 index 0000000000..34429023bb --- /dev/null +++ b/parm/config/gfs/config.atmensanlinit @@ -0,0 +1,10 @@ +#! /usr/bin/env bash + +########## config.atmensanlinit ########## +# Pre Atm Ens Analysis specific + +echo "BEGIN: config.atmensanlinit" + +# Get task specific resources +. "${EXPDIR}/config.resources" atmensanlinit +echo "END: config.atmensanlinit" diff --git a/parm/config/gfs/config.atmensanlrun b/parm/config/gfs/config.atmensanlrun new file mode 100644 index 0000000000..01f211a17a --- /dev/null +++ b/parm/config/gfs/config.atmensanlrun @@ -0,0 +1,11 @@ +#! /usr/bin/env bash + +########## config.atmensanlrun ########## +# Atm Ens Analysis specific + +echo "BEGIN: config.atmensanlrun" + +# Get task specific resources +. "${EXPDIR}/config.resources" atmensanlrun + +echo "END: config.atmensanlrun" diff --git a/parm/config/gfs/config.atmos_products b/parm/config/gfs/config.atmos_products new file mode 100644 index 0000000000..d8b1d6e32b --- /dev/null +++ b/parm/config/gfs/config.atmos_products @@ -0,0 +1,34 @@ +#! /usr/bin/env bash + +########## config.atmos_products ########## +# atmosphere grib2 products specific + +echo "BEGIN: config.atmos_products" + +# Get task specific resources +. "${EXPDIR}/config.resources" atmos_products + +# No. of forecast hours to process in a single job +export NFHRS_PER_GROUP=3 + +# Scripts used by this job +export INTERP_ATMOS_MASTERSH="${HOMEgfs}/ush/interp_atmos_master.sh" +export INTERP_ATMOS_SFLUXSH="${HOMEgfs}/ush/interp_atmos_sflux.sh" + +if [[ "${RUN:-}" == "gdas" ]]; then + export downset=1 + export FHOUT_PGBS=${FHOUT:-1} # Output frequency of supplemental gfs pgb file at 1.0 and 0.5 deg + export FLXGF="NO" # Create interpolated sflux.1p00 file +elif [[ "${RUN:-}" == "gfs" ]]; then + export downset=2 + export FHOUT_PGBS=${FHOUT_GFS:-3} # Output frequency of supplemental gfs pgb file at 1.0 and 0.5 deg + export FLXGF="YES" # Create interpolated sflux.1p00 file +fi + +# paramlist files for the different forecast hours and downsets +export paramlista="${HOMEgfs}/parm/post/global_1x1_paramlist_g2" +export paramlista_anl="${HOMEgfs}/parm/post/global_1x1_paramlist_g2.anl" +export paramlista_f000="${HOMEgfs}/parm/post/global_1x1_paramlist_g2.f000" +export paramlistb="${HOMEgfs}/parm/post/global_master-catchup_parmlist_g2" + +echo "END: config.atmos_products" diff --git a/parm/config/gfs/config.awips b/parm/config/gfs/config.awips new file mode 100644 index 0000000000..3b78d4bb4b --- /dev/null +++ b/parm/config/gfs/config.awips @@ -0,0 +1,17 @@ +#! /usr/bin/env bash + +########## config.awips ########## +# GFS awips step specific + +echo "BEGIN: config.awips" + +# Get task specific resources +. "${EXPDIR}/config.resources" awips + +export AWIPS20KM1P0DEGSH="${HOMEgfs}/jobs/JGFS_ATMOS_AWIPS_20KM_1P0DEG" +export AWIPSG2SH="${HOMEgfs}/jobs/JGFS_ATMOS_AWIPS_G2" + +# No. of concurrent awips jobs +export NAWIPSGRP=42 + +echo "END: config.awips" diff --git a/parm/config/gfs/config.base.emc.dyn b/parm/config/gfs/config.base.emc.dyn new file mode 100644 index 0000000000..4451c049b0 --- /dev/null +++ b/parm/config/gfs/config.base.emc.dyn @@ -0,0 +1,398 @@ +#! /usr/bin/env bash + +########## config.base ########## +# Common to all steps + +echo "BEGIN: config.base" + +# Machine environment +export machine="@MACHINE@" + +# EMC parallel or NCO production +export RUN_ENVIR="emc" + +# Account, queue, etc. +export ACCOUNT="@ACCOUNT@" +export QUEUE="@QUEUE@" +export QUEUE_SERVICE="@QUEUE_SERVICE@" +export PARTITION_BATCH="@PARTITION_BATCH@" +export PARTITION_SERVICE="@PARTITION_SERVICE@" + +# Project to use in mass store: +export HPSS_PROJECT="@HPSS_PROJECT@" + +# Directories relative to installation areas: +export HOMEgfs=@HOMEgfs@ +export PARMgfs=${HOMEgfs}/parm +export FIXgfs=${HOMEgfs}/fix +export USHgfs=${HOMEgfs}/ush +export UTILgfs=${HOMEgfs}/util +export EXECgfs=${HOMEgfs}/exec +export SCRgfs=${HOMEgfs}/scripts + +export FIXcice=${HOMEgfs}/fix/cice +export FIXmom=${HOMEgfs}/fix/mom6 +export FIXreg2grb2=${HOMEgfs}/fix/reg2grb2 + +######################################################################## + +# GLOBAL static environment parameters +export PACKAGEROOT="@PACKAGEROOT@" # TODO: set via prod_envir in Ops +export COMROOT="@COMROOT@" # TODO: set via prod_envir in Ops +export COMINsyn="@COMINsyn@" +export DMPDIR="@DMPDIR@" +export BASE_CPLIC="@BASE_CPLIC@" + +# USER specific paths +export HOMEDIR="@HOMEDIR@" +export STMP="@STMP@" +export PTMP="@PTMP@" +export NOSCRUB="@NOSCRUB@" + +# Base directories for various builds +export BASE_GIT="@BASE_GIT@" + +# Toggle to turn on/off GFS downstream processing. +export DO_GOES="NO" # GOES products +export DO_BUFRSND="NO" # BUFR sounding products +export DO_GEMPAK="NO" # GEMPAK products +export DO_AWIPS="NO" # AWIPS products +export DO_NPOESS="NO" # NPOESS products +export DO_TRACKER="YES" # Hurricane track verification +export DO_GENESIS="YES" # Cyclone genesis verification +export DO_GENESIS_FSU="NO" # Cyclone genesis verification (FSU) +export DO_VERFOZN="YES" # Ozone data assimilation monitoring +export DO_VERFRAD="YES" # Radiance data assimilation monitoring +export DO_VMINMON="YES" # GSI minimization monitoring + +# NO for retrospective parallel; YES for real-time parallel +# arch.sh uses REALTIME for MOS. Need to set REALTIME=YES +# if want MOS written to HPSS. Should update arch.sh to +# use RUNMOS flag +export REALTIME="YES" + +# Experiment mode (cycled or forecast-only) +export MODE="@MODE@" # cycled/forecast-only + +#################################################### +# DO NOT ADD MACHINE DEPENDENT STUFF BELOW THIS LINE +# IF YOU HAVE TO MAKE MACHINE SPECIFIC CHANGES BELOW +# FEEL FREE TO MOVE THEM ABOVE THIS LINE TO KEEP IT +# CLEAR +#################################################### +# Build paths relative to $HOMEgfs +export FIXgsi="${HOMEgfs}/fix/gsi" +export HOMEpost="${HOMEgfs}" +export HOMEobsproc="${BASE_GIT:-}/obsproc/v${obsproc_run_ver:-1.1.2}" + +# CONVENIENT utility scripts and other environment parameters +export NCP="/bin/cp -p" +export NMV="/bin/mv" +export NLN="/bin/ln -sf" +export VERBOSE="YES" +export KEEPDATA="NO" +export CHGRP_RSTPROD="@CHGRP_RSTPROD@" +export CHGRP_CMD="@CHGRP_CMD@" +export NCDUMP="${NETCDF:-${netcdf_c_ROOT:-}}/bin/ncdump" +export NCLEN="${HOMEgfs}/ush/getncdimlen" + +# Machine environment, jobs, and other utility scripts +export BASE_ENV="${HOMEgfs}/env" +export BASE_JOB="${HOMEgfs}/jobs/rocoto" + +# EXPERIMENT specific environment parameters +export SDATE=@SDATE@ +export EDATE=@EDATE@ +export EXP_WARM_START="@EXP_WARM_START@" +export assim_freq=6 +export PSLOT="@PSLOT@" +export EXPDIR="@EXPDIR@/${PSLOT}" +export ROTDIR="@ROTDIR@/${PSLOT}" +export ROTDIR_DUMP="YES" #Note: A value of "NO" does not currently work +export DUMP_SUFFIX="" +if [[ "${PDY}${cyc}" -ge "2019092100" && "${PDY}${cyc}" -le "2019110700" ]]; then + export DUMP_SUFFIX="p" # Use dumps from NCO GFS v15.3 parallel +fi +export DATAROOT="${STMP}/RUNDIRS/${PSLOT}" # TODO: set via prod_envir in Ops +export RUNDIR="${DATAROOT}" # TODO: Should be removed; use DATAROOT instead +export ARCDIR="${NOSCRUB}/archive/${PSLOT}" +export ATARDIR="@ATARDIR@" + +# Commonly defined parameters in JJOBS +export envir=${envir:-"prod"} +export NET="gfs" # NET is defined in the job-card (ecf) +export RUN=${RUN:-${CDUMP:-"gfs"}} # RUN is defined in the job-card (ecf); CDUMP is used at EMC as a RUN proxy +# TODO: determine where is RUN actually used in the workflow other than here +# TODO: is it possible to replace all instances of ${CDUMP} to ${RUN} to be +# consistent w/ EE2? + +# Get all the COM path templates +source "${EXPDIR}/config.com" + +export ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} +export LOGSCRIPT=${LOGSCRIPT:-""} +#export ERRSCRIPT=${ERRSCRIPT:-"err_chk"} +#export LOGSCRIPT=${LOGSCRIPT:-"startmsg"} +export REDOUT="1>" +export REDERR="2>" + +export SENDECF=${SENDECF:-"NO"} +export SENDSDM=${SENDSDM:-"NO"} +export SENDDBN_NTC=${SENDDBN_NTC:-"NO"} +export SENDDBN=${SENDDBN:-"NO"} +export DBNROOT=${DBNROOT:-${UTILROOT:-}/fakedbn} + +# APP settings +export APP=@APP@ + +# Defaults: +export DO_ATM="YES" +export DO_COUPLED="NO" +export DO_WAVE="NO" +export DO_OCN="NO" +export DO_ICE="NO" +export DO_AERO="NO" +export WAVE_CDUMP="" # When to include wave suite: gdas, gfs, or both +export DOBNDPNT_WAVE="NO" +export FRAC_GRID=".true." + +# Set operational resolution +export OPS_RES="C768" # Do not change # TODO: Why is this needed and where is it used? + +# Resolution specific parameters +export LEVS=128 +export CASE="@CASECTL@" +export CASE_ENS="@CASEENS@" +# TODO: This should not depend on $CASE or $CASE_ENS +# These are the currently available grid-combinations +case "${CASE}" in + "C48") + export OCNRES=500 + export waveGRD='glo_500' + ;; + "C96") + export OCNRES=500 + export waveGRD='glo_200' + ;; + "C192") + export OCNRES=050 + export waveGRD='glo_200' + ;; + "C384") + export OCNRES=025 + export waveGRD='glo_025' + ;; + "C768" | "C1152") + export OCNRES=025 + export waveGRD='mx025' + ;; + *) + echo "FATAL ERROR: Unrecognized CASE ${CASE}, ABORT!" + exit 1 + ;; +esac +export ICERES=${OCNRES} + +case "${APP}" in + ATM) + ;; + ATMA) + export DO_AERO="YES" + ;; + ATMW) + export DO_COUPLED="YES" + export DO_WAVE="YES" + export WAVE_CDUMP="both" + ;; + NG-GODAS) + export DO_ATM="NO" + export DO_OCN="YES" + export DO_ICE="YES" + ;; + S2S*) + export DO_COUPLED="YES" + export DO_OCN="YES" + export DO_ICE="YES" + + if [[ "${APP}" =~ A$ ]]; then + export DO_AERO="YES" + fi + + if [[ "${APP}" =~ ^S2SW ]]; then + export DO_WAVE="YES" + export WAVE_CDUMP="both" + fi + ;; + *) + echo "Unrecognized APP: '${APP}'" + exit 1 + ;; +esac + +# Surface cycle update frequency +if [[ "${CDUMP}" =~ "gdas" ]] ; then + export FHCYC=1 + export FTSFS=10 +elif [[ "${CDUMP}" =~ "gfs" ]] ; then + export FHCYC=24 +fi + +# Output frequency of the forecast model (for cycling) +export FHMIN=0 +export FHMAX=9 +export FHOUT=3 # Will be changed to 1 in config.base if (DOHYBVAR set to NO and l4densvar set to false) + +# Cycle to run EnKF (set to BOTH for both gfs and gdas) +export EUPD_CYC="gdas" + +# GFS cycle info +export gfs_cyc=@gfs_cyc@ # 0: no GFS cycle, 1: 00Z only, 2: 00Z and 12Z only, 4: all 4 cycles. + +# GFS output and frequency +export FHMIN_GFS=0 + +export FHMAX_GFS_00=120 +export FHMAX_GFS_06=120 +export FHMAX_GFS_12=120 +export FHMAX_GFS_18=120 +current_fhmax_var=FHMAX_GFS_${cyc}; declare -x FHMAX_GFS=${!current_fhmax_var} + +export FHOUT_GFS=6 # Must be 6 for S2S until #1629 is addressed; 3 for ops +export FHMAX_HF_GFS=0 +export FHOUT_HF_GFS=1 +if (( gfs_cyc != 0 )); then + export STEP_GFS=$(( 24 / gfs_cyc )) +else + export STEP_GFS="0" +fi +export ILPOST=1 # gempak output frequency up to F120 + +# GFS restart interval in hours +export restart_interval_gfs=12 +# NOTE: Do not set this to zero. Instead set it to $FHMAX_GFS +# TODO: Remove this variable from config.base and reference from config.fcst +# TODO: rework logic in config.wave and push it to parsing_nameslist_WW3.sh where it is actually used + +export QUILTING=".true." +export OUTPUT_GRID="gaussian_grid" +export WRITE_DOPOST=".true." # WRITE_DOPOST=true, use inline POST +export WRITE_NSFLIP=".true." + +# IAU related parameters +export DOIAU="@DOIAU@" # Enable 4DIAU for control with 3 increments +export IAUFHRS="3,6,9" +export IAU_FHROT=${IAUFHRS%%,*} +export IAU_DELTHRS=6 +export IAU_OFFSET=6 +export DOIAU_ENKF=${DOIAU:-"YES"} # Enable 4DIAU for EnKF ensemble +export IAUFHRS_ENKF="3,6,9" +export IAU_DELTHRS_ENKF=6 + +# Use Jacobians in eupd and thereby remove need to run eomg +export lobsdiag_forenkf=".true." + +# if [[ "$SDATE" -lt "2019020100" ]]; then # no rtofs in GDA +# export DO_WAVE="NO" +# echo "WARNING: Wave suite turned off due to lack of RTOFS in GDA for SDATE" +# fi + +# Microphysics Options: 99-ZhaoCarr, 8-Thompson; 6-WSM6, 10-MG, 11-GFDL +export imp_physics=8 + +# Shared parameters +# DA engine +export DO_JEDIATMVAR="@DO_JEDIATMVAR@" +export DO_JEDIATMENS="@DO_JEDIATMENS@" +export DO_JEDIOCNVAR="@DO_JEDIOCNVAR@" +export DO_JEDILANDDA="@DO_JEDILANDDA@" +export DO_MERGENSST="@DO_MERGENSST@" + +# Hybrid related +export DOHYBVAR="@DOHYBVAR@" +export NMEM_ENS=@NMEM_ENS@ +export NMEM_ENS_GFS=@NMEM_ENS@ +export SMOOTH_ENKF="NO" +export l4densvar=".true." +export lwrite4danl=".true." + +# EnKF output frequency +if [[ ${DOHYBVAR} = "YES" ]]; then + export FHMIN_ENKF=3 + export FHMAX_ENKF=9 + export FHMAX_ENKF_GFS=120 + export FHOUT_ENKF_GFS=3 + if [[ ${l4densvar} = ".true." ]]; then + export FHOUT=1 + export FHOUT_ENKF=1 + else + export FHOUT_ENKF=3 + fi +fi + +# if 3DVAR and IAU +if [[ ${DOHYBVAR} == "NO" && ${DOIAU} == "YES" ]]; then + export IAUFHRS="6" + export IAU_FHROT="3" + export IAU_FILTER_INCREMENTS=".true." + export IAUFHRS_ENKF="6" +fi + +# Check if cycle is cold starting, DOIAU off, or free-forecast mode +if [[ "${MODE}" = "cycled" && "${SDATE}" = "${PDY}${cyc}" && ${EXP_WARM_START} = ".false." ]] || [[ "${DOIAU}" = "NO" ]] || [[ "${MODE}" = "forecast-only" && ${EXP_WARM_START} = ".false." ]] ; then + export IAU_OFFSET=0 + export IAU_FHROT=0 + export IAUFHRS="6" +fi + +if [[ "${DOIAU_ENKF}" = "NO" ]]; then export IAUFHRS_ENKF="6"; fi + +# turned on nsst in anal and/or fcst steps, and turn off rtgsst +export DONST="YES" +if [[ ${DONST} = "YES" ]]; then export FNTSFA=" "; fi + +# The switch to apply SST elevation correction or not +export nst_anl=.true. + +# Make the nsstbufr file on the fly or use the GDA version +export MAKE_NSSTBUFR="@MAKE_NSSTBUFR@" + +# Make the aircraft prepbufr file on the fly or use the GDA version +export MAKE_ACFTBUFR="@MAKE_ACFTBUFR@" + +# Analysis increments to zero in CALCINCEXEC +export INCREMENTS_TO_ZERO="'liq_wat_inc','icmr_inc'" + +# Write analysis files for early cycle EnKF +export DO_CALC_INCREMENT_ENKF_GFS="YES" + +# Stratospheric increments to zero +export INCVARS_ZERO_STRAT="'sphum_inc','liq_wat_inc','icmr_inc'" +export INCVARS_EFOLD="5" + +# Swith to generate netcdf or binary diagnostic files. If not specified, +# script default to binary diagnostic files. Set diagnostic file +# variables here since used in DA job +export netcdf_diag=".true." +export binary_diag=".false." + +# Verification options +export DO_METP="NO" # Run METPLUS jobs - set METPLUS settings in config.metp; not supported with spack-stack +export DO_FIT2OBS="YES" # Run fit to observations package + +# Archiving options +export HPSSARCH="@HPSSARCH@" # save data to HPSS archive +export LOCALARCH="@LOCALARCH@" # save data to local archive +if [[ ${HPSSARCH} = "YES" ]] && [[ ${LOCALARCH} = "YES" ]]; then + echo "Both HPSS and local archiving selected. Please choose one or the other." + exit 2 +fi +export ARCH_CYC=00 # Archive data at this cycle for warm_start capability +export ARCH_WARMICFREQ=4 # Archive frequency in days for warm_start capability +export ARCH_FCSTICFREQ=1 # Archive frequency in days for gdas and gfs forecast-only capability + +#--online archive of nemsio files for fit2obs verification +export FITSARC="YES" +export FHMAX_FITS=132 +[[ "${FHMAX_FITS}" -gt "${FHMAX_GFS}" ]] && export FHMAX_FITS=${FHMAX_GFS} + +echo "END: config.base" diff --git a/parm/config/gfs/config.cleanup b/parm/config/gfs/config.cleanup new file mode 100644 index 0000000000..1908c91bb5 --- /dev/null +++ b/parm/config/gfs/config.cleanup @@ -0,0 +1,25 @@ +#! /usr/bin/env bash + +########## config.cleanup ########## +echo "BEGIN: config.cleanup" + +# Get task specific resources +source "${EXPDIR}/config.resources" cleanup + +export CLEANUP_COM="YES" # NO=retain ROTDIR. YES default in cleanup.sh + +#--starting and ending hours of previous cycles to be removed from rotating directory +export RMOLDSTD=144 +export RMOLDEND=24 + +# Specify the list of files to exclude from the first stage of cleanup +# Because arrays cannot be exported, list is a single string of comma- +# separated values. This string is split to form an array at runtime. +case ${RUN} in + gdas | gfs) exclude_string="*prepbufr*, *cnvstat*, *atmanl.nc" ;; + enkf*) exclude_string="*f006.ens*" ;; + *) exclude_string="" ;; +esac +export exclude_string + +echo "END: config.cleanup" \ No newline at end of file diff --git a/parm/config/gfs/config.com b/parm/config/gfs/config.com new file mode 100644 index 0000000000..208b0ac096 --- /dev/null +++ b/parm/config/gfs/config.com @@ -0,0 +1,96 @@ +# shellcheck shell=bash +# Ignore shellcheck warnings about variables not being expanded; this is what we want +# shellcheck disable=SC2016 +echo "BEGIN: config.com" + +# These are just templates. All templates must use single quotations so variable +# expansion does not occur when this file is sourced. Substitution happens later +# during runtime. It is recommended to use the helper function `generate_com()`, +# to do this substitution, which is defined in `ush/preamble.sh`. +# +# Syntax for generate_com(): +# generate_com [-rx] $var1[:$tmpl1] [$var2[:$tmpl2]] [...]] +# +# options: +# -r: Make variable read-only (same as `decalre -r`) +# -x: Mark variable for declare -rx (same as `declare -x`) +# var1, var2, etc: Variable names whose values will be generated from a template +# and declared +# tmpl1, tmpl2, etc: Specify the template to use (default is "${var}_TMPL") +# +# Examples: +# # Current cycle and RUN +# YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_ANALYSIS +# +# # Previous cycle and gdas +# RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx \ +# COM_ATMOS_HISTORY_PREV:COM_ATMOS_HISTORY_TMPL +# +# # Current cycle and COM for first member +# MEMDIR='mem001' YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_HISTORY +# + +# +# If any restart, input, or analysis template is updated, `setup_expt.py.fill_COMROT_cycled()` +# must correspondingly be updated to match. +# +if [[ "${RUN_ENVIR:-emc}" == "nco" ]]; then + COM_OBS_TMPL=$(compath.py "${envir}/obsproc/${obsproc_ver}")'/${RUN}.${YMD}/${HH}/atmos' + COM_RTOFS_TMPL=$(compath.py "${envir}/${WAVECUR_DID}/${rtofs_ver}") +else + COM_OBS_TMPL='${ROTDIR}/${RUN}.${YMD}/${HH}/obs' + COM_RTOFS_TMPL='${DMPDIR}' +fi +declare -rx COM_OBS_TMPL COM_RTOFS_TMPL +declare -rx COM_OBSDMP_TMPL='${DMPDIR}/${DUMP}${DUMP_SUFFIX}.${YMD}/${HH}/atmos' + +COM_BASE='${ROTDIR}/${RUN}.${YMD}/${HH}/${MEMDIR}' + +declare -rx COM_TOP_TMPL='${ROTDIR}/${RUN}.${YMD}/${HH}' + +declare -rx COM_CONF_TMPL=${COM_BASE}'/conf' +declare -rx COM_ATMOS_INPUT_TMPL=${COM_BASE}'/model_data/atmos/input' +declare -rx COM_ATMOS_RESTART_TMPL=${COM_BASE}'/model_data/atmos/restart' +declare -rx COM_ATMOS_ANALYSIS_TMPL=${COM_BASE}'/analysis/atmos' +declare -rx COM_LAND_ANALYSIS_TMPL=${COM_BASE}'/analysis/land' +declare -rx COM_ATMOS_HISTORY_TMPL=${COM_BASE}'/model_data/atmos/history' +declare -rx COM_ATMOS_MASTER_TMPL=${COM_BASE}'/model_data/atmos/master' +declare -rx COM_ATMOS_GRIB_TMPL=${COM_BASE}'/products/atmos/grib2' +declare -rx COM_ATMOS_GRIB_GRID_TMPL=${COM_ATMOS_GRIB_TMPL}'/${GRID}' +declare -rx COM_ATMOS_BUFR_TMPL=${COM_BASE}'/products/atmos/bufr' +declare -rx COM_ATMOS_GEMPAK_TMPL=${COM_BASE}'/products/atmos/gempak/${GRID}' +declare -rx COM_ATMOS_GENESIS_TMPL=${COM_BASE}'/products/atmos/cyclone/genesis_vital' +declare -rx COM_ATMOS_TRACK_TMPL=${COM_BASE}'/products/atmos/cyclone/tracks' +declare -rx COM_ATMOS_GOES_TMPL=${COM_BASE}'/products/atmos/goes_sim' +declare -rx COM_ATMOS_IMAGERY_TMPL=${COM_BASE}'/products/atmos/imagery' +declare -rx COM_ATMOS_OZNMON_TMPL=${COM_BASE}'/products/atmos/oznmon' +declare -rx COM_ATMOS_RADMON_TMPL=${COM_BASE}'/products/atmos/radmon' +declare -rx COM_ATMOS_MINMON_TMPL=${COM_BASE}'/products/atmos/minmon' +declare -rx COM_ATMOS_WMO_TMPL=${COM_BASE}'/products/atmos/wmo' + +declare -rx COM_WAVE_RESTART_TMPL=${COM_BASE}'/model_data/wave/restart' +declare -rx COM_WAVE_PREP_TMPL=${COM_BASE}'/model_data/wave/prep' +declare -rx COM_WAVE_HISTORY_TMPL=${COM_BASE}'/model_data/wave/history' +declare -rx COM_WAVE_GRID_TMPL=${COM_BASE}'/products/wave/gridded' +declare -rx COM_WAVE_STATION_TMPL=${COM_BASE}'/products/wave/station' +declare -rx COM_WAVE_GEMPAK_TMPL=${COM_BASE}'/products/wave/gempak' +declare -rx COM_WAVE_WMO_TMPL=${COM_BASE}'/products/wave/wmo' + +declare -rx COM_OCEAN_HISTORY_TMPL=${COM_BASE}'/model_data/ocean/history' +declare -rx COM_OCEAN_RESTART_TMPL=${COM_BASE}'/model_data/ocean/restart' +declare -rx COM_OCEAN_INPUT_TMPL=${COM_BASE}'/model_data/ocean/input' +declare -rx COM_OCEAN_ANALYSIS_TMPL=${COM_BASE}'/analysis/ocean' +declare -rx COM_OCEAN_2D_TMPL=${COM_BASE}'/products/ocean/2D' +declare -rx COM_OCEAN_3D_TMPL=${COM_BASE}'/products/ocean/3D' +declare -rx COM_OCEAN_XSECT_TMPL=${COM_BASE}'/products/ocean/xsect' +declare -rx COM_OCEAN_GRIB_TMPL=${COM_BASE}'/products/ocean/grib2' +declare -rx COM_OCEAN_GRIB_GRID_TMPL=${COM_OCEAN_GRIB_TMPL}'/${GRID}' + +declare -rx COM_ICE_INPUT_TMPL=${COM_BASE}'/model_data/ice/input' +declare -rx COM_ICE_HISTORY_TMPL=${COM_BASE}'/model_data/ice/history' +declare -rx COM_ICE_RESTART_TMPL=${COM_BASE}'/model_data/ice/restart' + +declare -rx COM_CHEM_HISTORY_TMPL=${COM_BASE}'/model_data/chem/history' +declare -rx COM_CHEM_ANALYSIS_TMPL=${COM_BASE}'/analysis/chem' + +declare -rx COM_MED_RESTART_TMPL=${COM_BASE}'/model_data/med/restart' diff --git a/parm/config/config.earc b/parm/config/gfs/config.earc old mode 100755 new mode 100644 similarity index 94% rename from parm/config/config.earc rename to parm/config/gfs/config.earc index 7cb1de235f..de73a93731 --- a/parm/config/config.earc +++ b/parm/config/gfs/config.earc @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#! /usr/bin/env bash ########## config.earc ########## # Ensemble archive specific diff --git a/parm/config/config.ecen b/parm/config/gfs/config.ecen old mode 100755 new mode 100644 similarity index 95% rename from parm/config/config.ecen rename to parm/config/gfs/config.ecen index c9609e3ff8..2b686c6b48 --- a/parm/config/config.ecen +++ b/parm/config/gfs/config.ecen @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#! /usr/bin/env bash ########## config.ecen ########## # Ensemble recentering specific diff --git a/parm/config/config.echgres b/parm/config/gfs/config.echgres old mode 100755 new mode 100644 similarity index 91% rename from parm/config/config.echgres rename to parm/config/gfs/config.echgres index cbf176c92f..478c6b4bcf --- a/parm/config/config.echgres +++ b/parm/config/gfs/config.echgres @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#! /usr/bin/env bash ########## config.echgres ########## # regrid full-res forecast for use in ensemble-res analysis generation diff --git a/parm/config/config.ediag b/parm/config/gfs/config.ediag old mode 100755 new mode 100644 similarity index 89% rename from parm/config/config.ediag rename to parm/config/gfs/config.ediag index 192b5d0b48..12b142088d --- a/parm/config/config.ediag +++ b/parm/config/gfs/config.ediag @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#! /usr/bin/env bash ########## config.ediag ########## # GFS ensemble post-eobs specific diff --git a/parm/config/gfs/config.efcs b/parm/config/gfs/config.efcs new file mode 100644 index 0000000000..283ec3ab7e --- /dev/null +++ b/parm/config/gfs/config.efcs @@ -0,0 +1,72 @@ +#! /usr/bin/env bash + +########## config.efcs ########## +# Ensemble forecast specific, dependency: config.fcst + +echo "BEGIN: config.efcs" + +# Turn off components in ensemble via _ENKF, or use setting from deterministic +export DO_AERO=${DO_AERO_ENKF:-${DO_AERO:-"NO"}} +export DO_OCN=${DO_OCN_ENKF:-${DO_OCN:-"NO"}} +export DO_ICE=${DO_ICE_ENKF:-${DO_ICE:-"NO"}} +export DO_WAVE=${DO_WAVE_ENKF:-${DO_WAVE:-"NO"}} + +# Source model specific information that is resolution dependent +string="--fv3 ${CASE_ENS}" +# Ocean/Ice/Waves ensemble configurations are identical to deterministic member +[[ "${DO_OCN}" == "YES" ]] && string="${string} --mom6 ${OCNRES}" +[[ "${DO_ICE}" == "YES" ]] && string="${string} --cice6 ${ICERES}" +[[ "${DO_WAVE}" == "YES" ]] && string="${string} --ww3 ${waveGRD// /;}" +[[ "${DO_AERO}" == "YES" ]] && string="${string} --gocart" +# We are counting on $string being multiple arguments +# shellcheck disable=SC2086 +source "${EXPDIR}/config.ufs" ${string} + +# Get task specific resources +. "${EXPDIR}/config.resources" efcs + +# Use serial I/O for ensemble (lustre?) +export OUTPUT_FILETYPE_ATM="netcdf" +export OUTPUT_FILETYPE_SFC="netcdf" + +# Number of enkf members per fcst job +export NMEM_EFCSGRP=2 +export NMEM_EFCSGRP_GFS=1 +export RERUN_EFCSGRP="NO" + +# Turn off inline UPP for EnKF forecast +export WRITE_DOPOST=".false." + +# Stochastic physics parameters (only for ensemble forecasts) +export DO_SKEB="YES" +export SKEB=0.3 +export SKEB_TAU=21600. +export SKEB_LSCALE=250000. +export SKEBNORM=0 +export SKEB_NPASS=30 +export SKEB_VDOF=5 +export DO_SHUM="YES" +export SHUM=0.005 +export SHUM_TAU=21600. +export SHUM_LSCALE=500000. +export DO_SPPT="YES" +export SPPT=0.5 +export SPPT_TAU=21600. +export SPPT_LSCALE=500000. +export SPPT_LOGIT=".true." +export SPPT_SFCLIMIT=".true." + +if [[ "${QUILTING}" = ".true." ]] && [[ "${OUTPUT_GRID}" = "gaussian_grid" ]]; then + export DIAG_TABLE="${HOMEgfs}/parm/ufs/fv3/diag_table_da" +else + export DIAG_TABLE="${HOMEgfs}/parm/ufs/fv3/diag_table_da_orig" +fi + +# For IAU, write restarts at beginning of window also +if [[ "${DOIAU_ENKF:-}" = "YES" ]]; then + export restart_interval="3" +else + export restart_interval="6" +fi + +echo "END: config.efcs" diff --git a/parm/config/config.eobs b/parm/config/gfs/config.eobs old mode 100755 new mode 100644 similarity index 89% rename from parm/config/config.eobs rename to parm/config/gfs/config.eobs index 8fa99c10fb..21f982addc --- a/parm/config/config.eobs +++ b/parm/config/gfs/config.eobs @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#! /usr/bin/env bash ########## config.eobs config.eomg ########## # Ensemble innovation specific, dependency config.anal @@ -14,7 +14,7 @@ export RERUN_EOMGGRP="YES" export npe_gsi=$npe_eobs # GSI namelist options related to observer for EnKF -export OBSINPUT_INVOBS="dmesh(1)=225.0,dmesh(2)=225.0" +export OBSINPUT_INVOBS="dmesh(1)=225.0,dmesh(2)=225.0,dmesh(3)=225.0,dmesh(4)=100.0" export OBSQC_INVOBS="tcp_width=60.0,tcp_ermin=2.0,tcp_ermax=12.0" if [ $LEVS = "128" ]; then export GRIDOPTS_INVOBS="nlayers(63)=1,nlayers(64)=1," diff --git a/parm/config/config.epos b/parm/config/gfs/config.epos old mode 100755 new mode 100644 similarity index 94% rename from parm/config/config.epos rename to parm/config/gfs/config.epos index 441a1ff995..8026a2ba2e --- a/parm/config/config.epos +++ b/parm/config/gfs/config.epos @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#! /usr/bin/env bash ########## config.epos ########## # Ensemble post processing specific diff --git a/parm/config/config.esfc b/parm/config/gfs/config.esfc old mode 100755 new mode 100644 similarity index 94% rename from parm/config/config.esfc rename to parm/config/gfs/config.esfc index 53cbb09175..2bb3d48bb4 --- a/parm/config/config.esfc +++ b/parm/config/gfs/config.esfc @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#! /usr/bin/env bash ########## config.esfc ########## # Ensemble surface specific diff --git a/parm/config/config.eupd b/parm/config/gfs/config.eupd old mode 100755 new mode 100644 similarity index 98% rename from parm/config/config.eupd rename to parm/config/gfs/config.eupd index 0e9d42e093..1ac90d2b75 --- a/parm/config/config.eupd +++ b/parm/config/gfs/config.eupd @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#! /usr/bin/env bash ########## config.eupd ########## # Ensemble update specific, dependency config.anal diff --git a/parm/config/gfs/config.fcst b/parm/config/gfs/config.fcst new file mode 100644 index 0000000000..3f63578d76 --- /dev/null +++ b/parm/config/gfs/config.fcst @@ -0,0 +1,286 @@ +#! /usr/bin/env bash + +########## config.fcst ########## +# Forecast specific + +echo "BEGIN: config.fcst" + +# Turn off waves if not used for this CDUMP +case ${WAVE_CDUMP} in + both | "${CDUMP/enkf}" ) ;; # Don't change + *) DO_WAVE="NO" ;; # Turn waves off +esac + +# Source model specific information that is resolution dependent +string="--fv3 ${CASE}" +[[ "${DO_OCN}" == "YES" ]] && string="${string} --mom6 ${OCNRES}" +[[ "${DO_ICE}" == "YES" ]] && string="${string} --cice6 ${ICERES}" +[[ "${DO_WAVE}" == "YES" ]] && string="${string} --ww3 ${waveGRD// /;}" +[[ "${DO_AERO}" == "YES" ]] && string="${string} --gocart" +# We are counting on $string being multiple arguments +# shellcheck disable=SC2086 +source "${EXPDIR}/config.ufs" ${string} + + +# Get task specific resources +source "${EXPDIR}/config.resources" fcst +export domains_stack_size="16000000" + + +if [[ "${DONST}" == "YES" ]]; then + source "${EXPDIR}/config.nsst" +fi + +export esmf_profile=".false." +export esmf_logkind="ESMF_LOGKIND_MULTI_ON_ERROR" #Options: ESMF_LOGKIND_MULTI_ON_ERROR, ESMF_LOGKIND_MULTI, ESMF_LOGKIND_NONE + + +####################################################################### + +export FORECASTSH="${HOMEgfs}/scripts/exglobal_forecast.sh" +#export FORECASTSH="${HOMEgfs}/scripts/exglobal_forecast.py" # Temp. while this is worked on +export FCSTEXECDIR="${HOMEgfs}/exec" +export FCSTEXEC="ufs_model.x" + +####################################################################### +# Model configuration +export TYPE="nh" +export MONO="non-mono" + +# Use stratosphere h2o physics +export h2o_phys=".true." + +# Options of stratosphere O3 physics reaction coefficients +export new_o3forc="YES" + +export gwd_opt=2 + +# --GFS.v16 uGWD.v0, used for suite FV3_GFS_v16 and UFS p6 etc +# do_ugwp=T: use unified CGWD and OGWD, and turbulent orographic form drag (TOFD) +# do_ugwp=F: use unified CGWD but old OGWD, TOFD is not uded. +if (( gwd_opt == 1 )); then + export knob_ugwp_version=0 + export do_ugwp=".false." + export do_tofd=".false." + launch_level=$(echo "${LEVS}/2.35" |bc) + export launch_level +fi + + +# -- uGWD.v1, for suite FV3_GFS_v17 and FV3_GFS_v17p8b etc +if (( gwd_opt == 2 )); then + + #--used for UFS p7 and p8a + #export knob_ugwp_version=1 + #export do_ugwp=".false." + #export do_tofd=".false." + #export do_ugwp_v0=".false." + #export do_ugwp_v1=".true." + #export do_ugwp_v0_orog_only=".false." + #export do_ugwp_v0_nst_only=".false." + #export do_gsl_drag_ls_bl=".true." + #export do_gsl_drag_ss=".true." + #export do_gsl_drag_tofd=".true." + #export do_ugwp_v1_orog_only=".false." + + #--used for UFS p8 + export knob_ugwp_version=1 + export do_ugwp=".false." + export do_tofd=".false." + export do_ugwp_v0=".false." + export do_ugwp_v1=".true." + export do_ugwp_v0_orog_only=".false." + export do_ugwp_v0_nst_only=".false." + export do_gsl_drag_ls_bl=".true." + export do_gsl_drag_ss=".true." + export do_gsl_drag_tofd=".true." + export do_ugwp_v1_orog_only=".false." + launch_level=$(echo "${LEVS}/2.35" |bc) + export launch_level + if [[ ${do_gsl_drag_ls_bl} == ".true." ]]; then + export cdmbgwd=${cdmbgwd_gsl} + fi +fi + +# Sponge layer settings +export tau=0. +export rf_cutoff=10. +export d2_bg_k1=0.20 +export d2_bg_k2=0.04 +export dz_min=6 +export n_sponge=42 +if (( LEVS == 128 )) && [[ "${CDUMP}" =~ "gdas" ]]; then + export tau=5.0 + export rf_cutoff=1.0e3 + export d2_bg_k1=0.20 + export d2_bg_k2=0.0 +fi + +# PBL/turbulance schemes +export hybedmf=".false." +export satmedmf=".true." +export isatmedmf=1 +tbf="" +if [[ "${satmedmf}" == ".true." ]]; then tbf="_satmedmf" ; fi + +#Convection schemes +export progsigma=".true." +tbp="" +if [[ "${progsigma}" == ".true." ]]; then tbp="_progsigma" ; fi + +# Radiation options +export IAER=1011 ; #spectral band mapping method for aerosol optical properties +export iovr_lw=3 ; #de-correlation length cloud overlap method (Barker, 2008) +export iovr_sw=3 ; #de-correlation length cloud overlap method (Barker, 2008) +export iovr=3 ; #de-correlation length cloud overlap method (Barker, 2008) +export icliq_sw=2 ; #cloud optical coeffs from AER's newer version v3.9-v4.0 for hu and stamnes +export isubc_sw=2 +export isubc_lw=2 + +# RRTMGP radiation scheme +export do_RRTMGP=.false. +export doGP_cldoptics_LUT=.false. +export doGP_lwscat=.false. + +# LSM configuration +# NoahMP only +export iopt_sfc="3" +export iopt_trs="2" + +# Microphysics configuration +export dnats=0 +export cal_pre=".true." +export do_sat_adj=".false." +export random_clds=".true." + +case ${imp_physics} in + 99) # ZhaoCarr + export ncld=1 + export FIELD_TABLE="${HOMEgfs}/parm/ufs/fv3/field_table_zhaocarr${tbf}${tbp}" + export nwat=2 + ;; + 6) # WSM6 + export ncld=2 + export FIELD_TABLE="${HOMEgfs}/parm/ufs/fv3/field_table_wsm6${tbf}${tbp}" + export nwat=6 + ;; + 8) # Thompson + export ncld=2 + export FIELD_TABLE="${HOMEgfs}/parm/ufs/fv3/field_table_thompson_noaero_tke${tbp}" + export nwat=6 + + export cal_pre=".false." + export random_clds=".false." + export effr_in=".true." + export ltaerosol=".false." + export lradar=".false." + export ttendlim="-999" + export dt_inner=$((DELTIM/2)) + export sedi_semi=.true. + if [[ "${sedi_semi}" == .true. ]]; then export dt_inner=${DELTIM} ; fi + export decfl=10 + + export hord_mt_nh_nonmono=5 + export hord_xx_nh_nonmono=5 + export vtdm4_nh_nonmono=0.02 + export nord=2 + export dddmp=0.1 + export d4_bg=0.12 + ;; + 11) # GFDL + export ncld=5 + export FIELD_TABLE="${HOMEgfs}/parm/ufs/fv3/field_table_gfdl${tbf}${tbp}" + export nwat=6 + export dnats=1 + export cal_pre=".false." + export do_sat_adj=".true." + export random_clds=".false." + export lgfdlmprad=".true." + export effr_in=".true." + export reiflag=2 + + export hord_mt_nh_nonmono=5 + export hord_xx_nh_nonmono=5 + export vtdm4_nh_nonmono=0.02 + export nord=2 + export d4_bg=0.12 + export dddmp=0.1 + ;; + *) echo "Unknown microphysics option, ABORT!" ;; +esac + +# Stochastic physics +export DO_SPPT=${DO_SPPT:-"NO"} +export DO_SKEB=${DO_SKEB:-"NO"} +export DO_SHUM=${DO_SHUM:-"NO"} +export DO_LAND_PERT=${DO_LAND_PERT:-"NO"} +export DO_CA=${DO_CA:-"YES"} + +#coupling settings +export cplmode="ufs.frac" +if [[ "${FRAC_GRID:-".true."}" == ".false." ]]; then + export cplmode="ufs.nfrac" +fi +export psm_bc="1" + +export min_lakeice="0.15" +export min_seaice=${min_seaice:-"0.15"} +export use_cice_alb=${use_cice_alb:-".false."} + +export FSICL="0" +export FSICS="0" + +#--------------------------------------------------------------------- + +# ideflate: netcdf zlib lossless compression (0-9): 0 no compression +# nbits: netcdf lossy compression level (0-32): 0 lossless +export ideflate=1 +export nbits=14 +export ishuffle=0 +# compression for RESTART files written by FMS +export shuffle=1 +export deflate_level=1 + +#--------------------------------------------------------------------- +# Disable the use of coupler.res; get model start time from model_configure +export USE_COUPLER_RES="NO" + +if [[ "${CDUMP}" =~ "gdas" ]] ; then # GDAS cycle specific parameters + + # Variables used in DA cycling + export DIAG_TABLE="${HOMEgfs}/parm/ufs/fv3/diag_table_da" + + if [[ "${DOIAU}" == "YES" ]]; then + export restart_interval="3" + else + export restart_interval="6" + fi + + # Turn on dry mass adjustment in GDAS + export adjust_dry_mass=".true." + +elif [[ "${CDUMP}" =~ "gfs" ]] ; then # GFS cycle specific parameters + + # Write more variables to output + export DIAG_TABLE="${HOMEgfs}/parm/ufs/fv3/diag_table" + + # Write gfs restart files to rerun fcst from any break point + export restart_interval=${restart_interval_gfs:-12} + + # Turn off dry mass adjustment in GFS + export adjust_dry_mass=".false." + + # Write each restart file in 16 small files to save time + if [[ "${CASE}" = C768 ]]; then + export io_layout="4,4" + else + export io_layout="1,1" + fi + +fi + +# Remember config.efcs will over-ride these values for ensemble forecasts +# if these variables are re-defined there. +# Otherwise, the ensemble forecast will inherit from config.fcst + +echo "END: config.fcst" diff --git a/parm/config/gfs/config.fit2obs b/parm/config/gfs/config.fit2obs new file mode 100644 index 0000000000..46baaa9e45 --- /dev/null +++ b/parm/config/gfs/config.fit2obs @@ -0,0 +1,23 @@ +#! /usr/bin/env bash + +########## config.fit2obs ########## +# Fit to Observations + +echo "BEGIN: config.fit2obs" + +# Get task specific resources +. "${EXPDIR}/config.resources" fit2obs + +export PRVT=${HOMEgfs}/fix/gsi/prepobs_errtable.global +export HYBLEVS=${HOMEgfs}/fix/am/global_hyblev.l${LEVS}.txt + +export VBACKUP_FITS=24 +export OUTPUT_FILETYPE="netcdf" +export CONVNETC="YES" +export ACPROFit="YES" + +if [[ ${netcdf_diag:-".false."} = ".true." ]]; then + export CONVNETC="YES" +fi + +echo "END: config.fit2obs" diff --git a/parm/config/config.gempak b/parm/config/gfs/config.gempak old mode 100755 new mode 100644 similarity index 76% rename from parm/config/config.gempak rename to parm/config/gfs/config.gempak index 647f474e90..791770ba4a --- a/parm/config/config.gempak +++ b/parm/config/gfs/config.gempak @@ -1,4 +1,4 @@ -#!/bin/ksh -x +#! /usr/bin/env bash ########## config.gempak ########## # GFS gempak step specific @@ -8,6 +8,4 @@ echo "BEGIN: config.gempak" # Get task specific resources . $EXPDIR/config.resources gempak -export GEMPAKSH=$HOMEgfs/jobs/JGFS_GEMPAK - echo "END: config.gempak" diff --git a/parm/config/gfs/config.genesis b/parm/config/gfs/config.genesis new file mode 100644 index 0000000000..62a1bf88c0 --- /dev/null +++ b/parm/config/gfs/config.genesis @@ -0,0 +1,12 @@ +#! /usr/bin/env bash + +########## config.genesis ########## +echo "BEGIN: config.genesis" + +# Get task specific resources +. "${EXPDIR}/config.resources" genesis + +# Get tropcy settings +. "${EXPDIR}/config.tropcy" + +echo "END: config.genesis" diff --git a/parm/config/gfs/config.genesis_fsu b/parm/config/gfs/config.genesis_fsu new file mode 100644 index 0000000000..13948592c4 --- /dev/null +++ b/parm/config/gfs/config.genesis_fsu @@ -0,0 +1,12 @@ +#! /usr/bin/env bash + +########## config.genesis_fsu ########## +echo "BEGIN: config.genesis_fsu" + +# Get task specific resources +. "${EXPDIR}/config.resources" genesis_fsu + +# Get tropcy settings +. "${EXPDIR}/config.tropcy" + +echo "END: config.genesis_fsu" diff --git a/parm/config/gfs/config.ice b/parm/config/gfs/config.ice new file mode 100644 index 0000000000..205458020f --- /dev/null +++ b/parm/config/gfs/config.ice @@ -0,0 +1,9 @@ +#! /usr/bin/env bash + +echo "BEGIN: config.ice" + +# Override atm-only FV3 settings when ice model is on +export min_seaice="1.0e-6" +export use_cice_alb=".true." + +echo "END: config.ice" diff --git a/parm/config/gfs/config.landanl b/parm/config/gfs/config.landanl new file mode 100644 index 0000000000..70ebae7529 --- /dev/null +++ b/parm/config/gfs/config.landanl @@ -0,0 +1,34 @@ +#! /usr/bin/env bash + +########## config.landanl ########## +# configuration common to land analysis tasks + +echo "BEGIN: config.landanl" + +# Get task specific resources +. "${EXPDIR}/config.resources" landanl + +obs_list_name=gdas_land_gts_only.yaml +if [[ "${cyc}" = "18" ]]; then + obs_list_name=gdas_land_prototype.yaml +fi + +export OBS_YAML_DIR=${HOMEgfs}/sorc/gdas.cd/parm/land/obs/config/ +export OBS_LIST=${HOMEgfs}/sorc/gdas.cd/parm/land/obs/lists/${obs_list_name} + +# Name of the JEDI executable and its yaml template +export JEDIEXE="${HOMEgfs}/exec/fv3jedi_letkf.x" +export JEDIYAML="${HOMEgfs}/sorc/gdas.cd/parm/land/letkfoi/letkfoi.yaml" + +# Ensemble member properties +export SNOWDEPTHVAR="snodl" +export BESTDDEV="30." # Background Error Std. Dev. for LETKFOI + +# Name of the executable that applies increment to bkg and its namelist template +export APPLY_INCR_EXE="${HOMEgfs}/exec/apply_incr.exe" +export APPLY_INCR_NML_TMPL="${HOMEgfs}/sorc/gdas.cd/parm/land/letkfoi/apply_incr_nml.j2" + +export io_layout_x=@IO_LAYOUT_X@ +export io_layout_y=@IO_LAYOUT_Y@ + +echo "END: config.landanl" diff --git a/parm/config/gfs/config.metp b/parm/config/gfs/config.metp new file mode 100644 index 0000000000..c90903f6a5 --- /dev/null +++ b/parm/config/gfs/config.metp @@ -0,0 +1,99 @@ +#! /usr/bin/env bash + +########## config.metp ########## +# METplus verification step specific + +echo "BEGIN: config.metp" + +# Get task specific resources +. "${EXPDIR}/config.resources" metp + +export RUN_GRID2GRID_STEP1="YES" # Run grid-to-grid verification using METplus +export RUN_GRID2OBS_STEP1="YES" # Run grid-to-obs verification using METplus +export RUN_PRECIP_STEP1="YES" # Run precip verification using METplus + + +#---------------------------------------------------------- +# METplus: Verify grid-to-grid, grid-to-obs, precipitation options +#---------------------------------------------------------- +## EMC_VERIF_GLOBAL SETTINGS +export HOMEverif_global=${HOMEgfs}/sorc/verif-global.fd +export VERIF_GLOBALSH=${HOMEverif_global}/ush/run_verif_global_in_global_workflow.sh +## INPUT DATA SETTINGS +export model=${PSLOT} +export model_file_format="pgbf{lead?fmt=%2H}.${CDUMP}.{init?fmt=%Y%m%d%H}.grib2" +export model_hpss_dir=${ATARDIR}/.. +export get_data_from_hpss="NO" +export hpss_walltime="10" +## OUTPUT SETTINGS +export model_stat_dir=${ARCDIR}/.. +export make_met_data_by="VALID" +export SENDMETVIEWER="NO" +## DATE SETTINGS +export VRFYBACK_HRS="0" +## METPLUS SETTINGS +export METplus_verbosity="INFO" +export MET_verbosity="2" +export log_MET_output_to_METplus="yes" +# GRID-TO-GRID STEP 1: gfsmetpg2g1 +export g2g1_type_list="anom pres sfc" +export g2g1_anom_truth_name="self_anl" +export g2g1_anom_truth_file_format="pgbanl.${CDUMP}.{valid?fmt=%Y%m%d%H}.grib2" +export g2g1_anom_fhr_min=${FHMIN_GFS} +export g2g1_anom_fhr_max=${FHMAX_GFS} +export g2g1_anom_grid="G002" +export g2g1_anom_gather_by="VSDB" +export g2g1_pres_truth_name="self_anl" +export g2g1_pres_truth_file_format="pgbanl.${CDUMP}.{valid?fmt=%Y%m%d%H}.grib2" +export g2g1_pres_fhr_min=${FHMIN_GFS} +export g2g1_pres_fhr_max=${FHMAX_GFS} +export g2g1_pres_grid="G002" +export g2g1_pres_gather_by="VSDB" +export g2g1_sfc_truth_name="self_f00" +export g2g1_sfc_truth_file_format="pgbf00.${CDUMP}.{valid?fmt=%Y%m%d%H}.grib2" +export g2g1_sfc_fhr_min=${FHMIN_GFS} +export g2g1_sfc_fhr_max=${FHMAX_GFS} +export g2g1_sfc_grid="G002" +export g2g1_sfc_gather_by="VSDB" +export g2g1_mv_database_name="mv_${PSLOT}_grid2grid_metplus" +export g2g1_mv_database_group="NOAA NCEP" +export g2g1_mv_database_desc="Grid-to-grid METplus data for global workflow experiment ${PSLOT}" +# GRID-TO-OBS STEP 1: gfsmetpg2o1 +export g2o1_type_list="upper_air conus_sfc" +export g2o1_upper_air_msg_type_list="ADPUPA" +export g2o1_upper_air_vhr_list="00 06 12 18" +export g2o1_upper_air_fhr_min=${FHMIN_GFS} +export g2o1_upper_air_fhr_max="240" +export g2o1_upper_air_grid="G003" +export g2o1_upper_air_gather_by="VSDB" +export g2o1_conus_sfc_msg_type_list="ONLYSF ADPUPA" +export g2o1_conus_sfc_vhr_list="00 03 06 09 12 15 18 21" +export g2o1_conus_sfc_fhr_min=${FHMIN_GFS} +export g2o1_conus_sfc_fhr_max="240" +export g2o1_conus_sfc_grid="G104" +export g2o1_conus_sfc_gather_by="VSDB" +export g2o1_polar_sfc_msg_type_list="IABP" +export g2o1_polar_sfc_vhr_list="00 03 06 09 12 15 18 21" +export g2o1_polar_sfc_fhr_min=${FHMIN_GFS} +export g2o1_polar_sfc_fhr_max="240" +export g2o1_polar_sfc_grid="G219" +export g2o1_polar_sfc_gather_by="VSDB" +export g2o1_prepbufr_data_run_hpss="NO" +export g2o1_mv_database_name="mv_${PSLOT}_grid2obs_metplus" +export g2o1_mv_database_group="NOAA NCEP" +export g2o1_mv_database_desc="Grid-to-obs METplus data for global workflow experiment ${PSLOT}" +# PRECIP STEP 1: gfsmetppcp1 +export precip1_type_list="ccpa_accum24hr" +export precip1_ccpa_accum24hr_model_bucket="06" +export precip1_ccpa_accum24hr_model_var="APCP" +export precip1_ccpa_accum24hr_model_file_format="pgbf{lead?fmt=%2H}.${CDUMP}.{init?fmt=%Y%m%d%H}.grib2" +export precip1_ccpa_accum24hr_fhr_min=${FHMIN_GFS} +export precip1_ccpa_accum24hr_fhr_max="180" +export precip1_ccpa_accum24hr_grid="G211" +export precip1_ccpa_accum24hr_gather_by="VSDB" +export precip1_obs_data_run_hpss="NO" +export precip1_mv_database_name="mv_${PSLOT}_precip_metplus" +export precip1_mv_database_group="NOAA NCEP" +export precip1_mv_database_desc="Precip METplus data for global workflow experiment ${PSLOT}" + +echo "END: config.metp" diff --git a/parm/config/gfs/config.npoess b/parm/config/gfs/config.npoess new file mode 100644 index 0000000000..9a388d2e6b --- /dev/null +++ b/parm/config/gfs/config.npoess @@ -0,0 +1,11 @@ +#! /usr/bin/env bash + +########## config.npoess ########## +# GFS NPOESS step specific + +echo "BEGIN: config.npoess" + +# Get task specific resources +. "${EXPDIR}/config.resources" npoess + +echo "END: config.npoess" diff --git a/parm/config/gfs/config.nsst b/parm/config/gfs/config.nsst new file mode 100644 index 0000000000..db4367b2c0 --- /dev/null +++ b/parm/config/gfs/config.nsst @@ -0,0 +1,34 @@ +#! /usr/bin/env bash + +########## config.nsst ########## +# NSST specific + +echo "BEGIN: config.nsst" + +# NSST parameters contained within nstf_name + +# nstf_name(1) : NST_MODEL (NSST Model) : 0 = OFF, 1 = ON but uncoupled, 2 = ON and coupled +export NST_MODEL=2 + +# nstf_name(2) : NST_SPINUP : 0 = OFF, 1 = ON, +export NST_SPINUP=0 +cdate="${PDY}${cyc}" +if (( cdate < 2017072000 )); then + export NST_SPINUP=1 +fi + +# nstf_name(3) : NST_RESV (Reserved, NSST Analysis) : 0 = OFF, 1 = ON +export NST_RESV=0 + +# nstf_name(4,5) : ZSEA1, ZSEA2 the two depths to apply vertical average (bias correction) +export ZSEA1=0 +export ZSEA2=0 + +export NST_GSI=3 # default 0: No NST info at all; + # 1: Input NST info but not used in GSI; + # 2: Input NST info, used in CRTM simulation, no Tr analysis + # 3: Input NST info, used in both CRTM simulation and Tr analysis +export NSTINFO=0 # number of elements added in obs. data array (default = 0) +if (( NST_GSI > 0 )); then export NSTINFO=4; fi + +echo "END: config.nsst" diff --git a/parm/config/gfs/config.ocn b/parm/config/gfs/config.ocn new file mode 100644 index 0000000000..37f6a966aa --- /dev/null +++ b/parm/config/gfs/config.ocn @@ -0,0 +1,22 @@ +#! /usr/bin/env bash + +echo "BEGIN: config.ocn" + +# MOM_input template to use +export MOM_INPUT="MOM_input_template_${OCNRES}" + +export DO_OCN_SPPT="NO" # In MOM_input, this variable is determines OCN_SPPT (OCN_SPPT = True|False) +export DO_OCN_PERT_EPBL="NO" # In MOM_input, this variable determines PERT_EPBL (PERT_EPBL = True|False) + +# Templated variables in MOM_input_template +export MOM6_USE_LI2016="True" # set to False for restart reproducibility +export MOM6_THERMO_SPAN="False" + +if [[ "${DO_JEDIOCNVAR}" == "YES" ]]; then + export ODA_INCUPD="True" +else + export ODA_INCUPD="False" +fi +export ODA_INCUPD_NHOURS="3.0" # In MOM_input, this is time interval for applying increment + +echo "END: config.ocn" diff --git a/parm/config/gfs/config.ocnanal b/parm/config/gfs/config.ocnanal new file mode 100644 index 0000000000..ec45ddd288 --- /dev/null +++ b/parm/config/gfs/config.ocnanal @@ -0,0 +1,31 @@ +#!/bin/bash + +########## config.ocnanal ########## +# configuration common to all ocean analysis tasks + +echo "BEGIN: config.ocnanal" + +export OBS_YAML_DIR="${HOMEgfs}/sorc/gdas.cd/parm/soca/obs/config" +export OBS_LIST=@SOCA_OBS_LIST@ +export OBS_YAML="${OBS_LIST}" +export FV3JEDI_STAGE_YAML="${HOMEgfs}/sorc/gdas.cd/test/soca/testinput/dumy.yaml" +export SOCA_INPUT_FIX_DIR=@SOCA_INPUT_FIX_DIR@ +export SOCA_VARS=tocn,socn,ssh +export SABER_BLOCKS_YAML=@SABER_BLOCKS_YAML@ +export SOCA_NINNER=@SOCA_NINNER@ +export CASE_ANL=@CASE_ANL@ +export DOMAIN_STACK_SIZE=116640000 #TODO: Make the stack size resolution dependent +export JEDI_BIN=${HOMEgfs}/sorc/gdas.cd/build/bin + +# R2D2 +export R2D2_OBS_DB=shared +export R2D2_OBS_DUMP=@R2D2_OBS_DUMP@ +export R2D2_OBS_SRC=@R2D2_OBS_SRC@ +export R2D2_OBS_WINDOW=24 # TODO: Check if the R2D2 sampling DB window is still needed +export COMIN_OBS=@COMIN_OBS@ + +# NICAS +export NICAS_RESOL=@NICAS_RESOL@ +export NICAS_GRID_SIZE=@NICAS_GRID_SIZE@ + +echo "END: config.ocnanal" diff --git a/parm/config/gfs/config.ocnanalbmat b/parm/config/gfs/config.ocnanalbmat new file mode 100644 index 0000000000..024da5f51b --- /dev/null +++ b/parm/config/gfs/config.ocnanalbmat @@ -0,0 +1,11 @@ +#!/bin/bash + +########## config.ocnanalbmat ########## +# Ocn Analysis specific + +echo "BEGIN: config.ocnanalbmat" + +# Get task specific resources +. "${EXPDIR}/config.resources" ocnanalbmat + +echo "END: config.ocnanalbmat" diff --git a/parm/config/gfs/config.ocnanalchkpt b/parm/config/gfs/config.ocnanalchkpt new file mode 100644 index 0000000000..c059fdba42 --- /dev/null +++ b/parm/config/gfs/config.ocnanalchkpt @@ -0,0 +1,11 @@ +#!/bin/bash + +########## config.ocnanalchkpt ########## +# Ocn Analysis specific + +echo "BEGIN: config.ocnanalchkpt" + +# Get task specific resources +. "${EXPDIR}/config.resources" ocnanalchkpt + +echo "END: config.ocnanalchkpt" diff --git a/parm/config/gfs/config.ocnanalpost b/parm/config/gfs/config.ocnanalpost new file mode 100644 index 0000000000..bc4d945865 --- /dev/null +++ b/parm/config/gfs/config.ocnanalpost @@ -0,0 +1,10 @@ +#!/bin/bash + +########## config.ocnanalpost ########## +# Post Ocn Analysis specific + +echo "BEGIN: config.ocnanalpost" + +# Get task specific resources +. "${EXPDIR}/config.resources" ocnanalpost +echo "END: config.ocnanalpost" diff --git a/parm/config/gfs/config.ocnanalprep b/parm/config/gfs/config.ocnanalprep new file mode 100644 index 0000000000..225eb089c3 --- /dev/null +++ b/parm/config/gfs/config.ocnanalprep @@ -0,0 +1,10 @@ +#!/bin/bash + +########## config.ocnanalprep ########## +# Pre Ocn Analysis specific + +echo "BEGIN: config.ocnanalprep" + +# Get task specific resources +. "${EXPDIR}/config.resources" ocnanalprep +echo "END: config.ocnanalprep" diff --git a/parm/config/gfs/config.ocnanalrun b/parm/config/gfs/config.ocnanalrun new file mode 100644 index 0000000000..5345b6c684 --- /dev/null +++ b/parm/config/gfs/config.ocnanalrun @@ -0,0 +1,11 @@ +#!/bin/bash + +########## config.ocnanalrun ########## +# Ocn Analysis specific + +echo "BEGIN: config.ocnanalrun" + +# Get task specific resources +. "${EXPDIR}/config.resources" ocnanalrun + +echo "END: config.ocnanalrun" diff --git a/parm/config/gfs/config.ocnanalvrfy b/parm/config/gfs/config.ocnanalvrfy new file mode 100644 index 0000000000..4eda451853 --- /dev/null +++ b/parm/config/gfs/config.ocnanalvrfy @@ -0,0 +1,10 @@ +#!/bin/bash + +########## config.ocnanalvrfy ########## +# Pre Ocn Analysis specific + +echo "BEGIN: config.ocnanalvrfy" + +# Get task specific resources +. "${EXPDIR}/config.resources" ocnanalvrfy +echo "END: config.ocnanalvrfy" diff --git a/parm/config/gfs/config.ocnpost b/parm/config/gfs/config.ocnpost new file mode 100644 index 0000000000..2505431401 --- /dev/null +++ b/parm/config/gfs/config.ocnpost @@ -0,0 +1,29 @@ +#! /usr/bin/env bash + +########## config.ocnpost ########## + +echo "BEGIN: config.ocnpost" + +# Get task specific resources +source "${EXPDIR}/config.resources" ocnpost + +# Convert netcdf files to grib files using post job +#------------------------------------------- +case "${OCNRES}" in + "025") export MAKE_OCN_GRIB="YES";; + "050") export MAKE_OCN_GRIB="NO";; + "100") export MAKE_OCN_GRIB="NO";; + "500") export MAKE_OCN_GRIB="NO";; + *) export MAKE_OCN_GRIB="NO";; +esac + +if [[ "${machine}" = "WCOSS2" ]]; then + #Currently the conversion to netcdf uses NCL which is not on WCOSS2 + #This should be removed when this is updated + export MAKE_OCN_GRIB="NO" +fi + +# No. of forecast hours to process in a single job +export NFHRS_PER_GROUP=3 + +echo "END: config.ocnpost" diff --git a/parm/config/gfs/config.postsnd b/parm/config/gfs/config.postsnd new file mode 100644 index 0000000000..53d66bf4f6 --- /dev/null +++ b/parm/config/gfs/config.postsnd @@ -0,0 +1,15 @@ +#! /usr/bin/env bash + +########## config.postsnd ########## +# GFS bufr sounding step specific + +echo "BEGIN: config.postsnd" + +# Get task specific resources +. $EXPDIR/config.resources postsnd + +export POSTSNDSH=$HOMEgfs/jobs/JGFS_ATMOS_POSTSND +export ENDHOUR=180 +if [[ "$FHMAX_GFS" -lt "$ENDHOUR" ]] ; then export ENDHOUR=$FHMAX_GFS ; fi + +echo "END: config.postsnd" diff --git a/parm/config/gfs/config.prep b/parm/config/gfs/config.prep new file mode 100644 index 0000000000..d5ac1925f7 --- /dev/null +++ b/parm/config/gfs/config.prep @@ -0,0 +1,66 @@ +#! /usr/bin/env bash + +########## config.prep ########## +# Prep step specific + +echo "BEGIN: config.prep" + +# Get task specific resources +. $EXPDIR/config.resources prep + +export MAKE_PREPBUFR="YES" # if NO, will copy prepbufr from globaldump +export cdate10=${PDY}${cyc} + +# Relocation and syndata QC +export PROCESS_TROPCY=${PROCESS_TROPCY:-NO} +export TROPCYQCRELOSH="$HOMEgfs/scripts/exglobal_atmos_tropcy_qc_reloc.sh" + +export COMINtcvital=${COMINtcvital:-${DMPDIR}/${CDUMP}.${PDY}/${cyc}/atmos} +export COMINsyn=${COMINsyn:-$(compath.py ${envir}/com/gfs/${gfs_ver})/syndat} + +export HOMERELO=$HOMEgfs +export EXECRELO=${HOMERELO}/exec +export FIXRELO=${HOMERELO}/fix/am +export USHRELO=${HOMERELO}/ush + +# Adjust observation error for GFS v16 parallels +# +# NOTE: Remember to set OBERROR in config.anal as PRVT is set below +# +# Set default prepobs_errtable.global +export PRVT=$FIXgsi/prepobs_errtable.global + + +# Set prepobs.errtable.global for GFS v16 retrospective parallels +if [[ $RUN_ENVIR == "emc" ]]; then + if [[ "${PDY}${cyc}" -ge "2019021900" && "${PDY}${cyc}" -lt "2019110706" ]]; then + export PRVT=$FIXgsi/gfsv16_historical/prepobs_errtable.global.2019021900 + fi + +# Place GOES-15 AMVs in monitor, assimilate GOES-17 AMVs, assimilate KOMPSAT-5 gps + if [[ "${PDY}${cyc}" -ge "2019110706" && "${PDY}${cyc}" -lt "2020040718" ]]; then + export PRVT=$FIXgsi/gfsv16_historical/prepobs_errtable.global.2019110706 + fi + +# NOTE: +# As of 2020040718, gfsv16_historical/prepobs_errtable.global.2020040718 is +# identical to ../prepobs_errtable.global. Thus, the logic below is not +# needed at this time + +# Set observation errors for type 135 (T) & 235 (uv) Canadian AMDAR observations +# if [[ "${PDY}${cyc}" -ge "2020040718" && "${PDY}${cyc}" -lt "YYYMMDDHH" ]]; then +# export PRVT=$EXPDIR/prepobs_errtable.global +# fi + +fi + +# NSST bufr was created with a different set of files prior to 2020102200 +# See comments at the end of +# https://github.com/NOAA-EMC/global-workflow/issues/313 +if [[ "${PDY}${cyc}" -ge "2020102200" ]]; then + export DTYPS_nsst='sfcshp tesac bathy trkob' +else + export DTYPS_nsst='sfcshp dbuoyb mbuoyb tesac bathy trkob' +fi + +echo "END: config.prep" diff --git a/parm/config/gfs/config.prepatmiodaobs b/parm/config/gfs/config.prepatmiodaobs new file mode 100644 index 0000000000..ed9b246120 --- /dev/null +++ b/parm/config/gfs/config.prepatmiodaobs @@ -0,0 +1,14 @@ +#! /usr/bin/env bash + +########## config.prepatmiodaobs ########## +# Atm Obs Prep specific + +echo "BEGIN: config.prepatmiodaobs" + +# Get task specific resources +. "${EXPDIR}/config.resources" prepatmiodaobs + +export BUFR2IODASH="${HOMEgfs}/ush/run_bufr2ioda.py" +export IODAPARM="${HOMEgfs}/sorc/gdas.cd/parm/ioda/bufr2ioda" + +echo "END: config.prepatmiodaobs" diff --git a/parm/config/gfs/config.preplandobs b/parm/config/gfs/config.preplandobs new file mode 100644 index 0000000000..20ae20b5ad --- /dev/null +++ b/parm/config/gfs/config.preplandobs @@ -0,0 +1,18 @@ +#! /usr/bin/env bash + +########## config.preplandobs ########## +# Land Obs Prep specific + +echo "BEGIN: config.preplandobs" + +# Get task specific resources +. "${EXPDIR}/config.resources" preplandobs + +export GTS_OBS_LIST="${HOMEgfs}/sorc/gdas.cd/parm/land/prep/prep_gts.yaml" +export BUFR2IODAX="${HOMEgfs}/exec/bufr2ioda.x" +export FIMS_NML_TMPL="${HOMEgfs}/sorc/gdas.cd/parm/land/prep/fims.nml.j2" +export IMS_OBS_LIST="${HOMEgfs}/sorc/gdas.cd/parm/land/prep/prep_ims.yaml" +export CALCFIMSEXE="${HOMEgfs}/exec/calcfIMS.exe" +export IMS2IODACONV="${HOMEgfs}/ush/imsfv3_scf2ioda.py" + +echo "END: config.preplandobs" diff --git a/parm/config/gfs/config.prepoceanobs b/parm/config/gfs/config.prepoceanobs new file mode 100644 index 0000000000..068ecff1ad --- /dev/null +++ b/parm/config/gfs/config.prepoceanobs @@ -0,0 +1,17 @@ +#!/bin/bash + +########## config.prepoceanobs ########## + +echo "BEGIN: config.prepoceanobs" + +export OCNOBS2IODAEXEC=${HOMEgfs}/sorc/gdas.cd/build/bin/gdas_obsprovider2ioda.x + +export OBS_YAML_DIR=${HOMEgfs}/sorc/gdas.cd/parm/soca/obs/config +export OBSPROC_YAML=@OBSPROC_CONFIG@ +export OBS_LIST=@SOCA_OBS_LIST@ +[[ -n "${OBS_LIST}" ]] || export OBS_LIST=${HOMEgfs}/sorc/gdas.cd/parm/soca/obs/obs_list.yaml +export OBS_YAML=${OBS_LIST} + +# Get task specific resources +. "${EXPDIR}/config.resources" prepoceanobs +echo "END: config.prepoceanobs" diff --git a/parm/config/gfs/config.resources b/parm/config/gfs/config.resources new file mode 100644 index 0000000000..695ad5fcc5 --- /dev/null +++ b/parm/config/gfs/config.resources @@ -0,0 +1,1040 @@ +#! /usr/bin/env bash + +########## config.resources ########## +# Set resource information for job tasks +# e.g. walltime, node, cores per node, memory etc. + +if [[ $# -ne 1 ]]; then + + echo "Must specify an input task argument to set resource variables!" + echo "argument can be any one of the following:" + echo "stage_ic aerosol_init" + echo "prep preplandobs prepatmiodaobs" + echo "atmanlinit atmanlrun atmanlfinal" + echo "atmensanlinit atmensanlrun atmensanlfinal" + echo "landanl" + echo "aeroanlinit aeroanlrun aeroanlfinal" + echo "anal sfcanl analcalc analdiag fcst echgres" + echo "upp atmos_products" + echo "tracker genesis genesis_fsu" + echo "verfozn verfrad vminmon fit2obs metp arch cleanup" + echo "eobs ediag eomg eupd ecen esfc efcs epos earc" + echo "init_chem mom6ic ocnpost" + echo "waveinit waveprep wavepostsbs wavepostbndpnt wavepostbndpntbll wavepostpnt" + echo "wavegempak waveawipsbulls waveawipsgridded" + echo "postsnd awips gempak npoess" + echo "ocnanalprep prepoceanobs ocnanalbmat ocnanalrun ocnanalchkpt ocnanalpost ocnanalvrfy" + exit 1 + +fi + +step=$1 + +echo "BEGIN: config.resources" + +if [[ "${machine}" = "WCOSS2" ]]; then + export npe_node_max=128 +elif [[ "${machine}" = "JET" ]]; then + if [[ ${PARTITION_BATCH} = "xjet" ]]; then + export npe_node_max=24 + elif [[ ${PARTITION_BATCH} = "vjet" || ${PARTITION_BATCH} = "sjet" ]]; then + export npe_node_max=16 + elif [[ ${PARTITION_BATCH} = "kjet" ]]; then + export npe_node_max=40 + fi +elif [[ ${machine} = "HERA" ]]; then + export npe_node_max=40 +elif [[ ${machine} = "S4" ]]; then + if [[ ${PARTITION_BATCH} = "s4" ]]; then + export npe_node_max=32 + elif [[ ${PARTITION_BATCH} = "ivy" ]]; then + export npe_node_max=20 + fi +elif [[ "${machine}" = "AWSPW" ]]; then + export PARTITION_BATCH="compute" + export npe_node_max=40 +elif [[ ${machine} = "ORION" ]]; then + export npe_node_max=40 +elif [[ ${machine} = "HERCULES" ]]; then + export npe_node_max=40 +fi + +if [[ ${step} = "prep" ]]; then + export wtime_prep='00:30:00' + export npe_prep=4 + export npe_node_prep=2 + export nth_prep=1 + if [[ "${machine}" = "WCOSS2" ]]; then + export is_exclusive=True + else + export memory_prep="40G" + fi + +elif [[ "${step}" = "preplandobs" ]]; then + export wtime_preplandobs="00:05:00" + npe_preplandobs=1 + export npe_preplandobs + export nth_preplandobs=1 + npe_node_preplandobs=1 + export npe_node_preplandobs + +elif [[ "${step}" = "prepatmiodaobs" ]]; then + export wtime_prepatmiodaobs="00:10:00" + export npe_prepatmiodaobs=1 + export nth_prepatmiodaobs=1 + npe_node_prepatmiodaobs=$(echo "${npe_node_max} / ${nth_prepatmiodaobs}" | bc) + export npe_node_prepatmiodaobs + +elif [[ "${step}" = "aerosol_init" ]]; then + export wtime_aerosol_init="00:05:00" + export npe_aerosol_init=1 + export nth_aerosol_init=1 + npe_node_aerosol_init=$(echo "${npe_node_max} / ${nth_aerosol_init}" | bc) + export npe_node_aerosol_init + export NTASKS=${npe_aerosol_init} + export memory_aerosol_init="6G" + +elif [[ ${step} = "waveinit" ]]; then + + export wtime_waveinit="00:10:00" + export npe_waveinit=12 + export nth_waveinit=1 + npe_node_waveinit=$(echo "${npe_node_max} / ${nth_waveinit}" | bc) + export npe_node_waveinit + export NTASKS=${npe_waveinit} + export memory_waveinit="2GB" + +elif [[ ${step} = "waveprep" ]]; then + + export wtime_waveprep="00:10:00" + export npe_waveprep=5 + export npe_waveprep_gfs=65 + export nth_waveprep=1 + export nth_waveprep_gfs=1 + npe_node_waveprep=$(echo "${npe_node_max} / ${nth_waveprep}" | bc) + export npe_node_waveprep + npe_node_waveprep_gfs=$(echo "${npe_node_max} / ${nth_waveprep_gfs}" | bc) + export npe_node_waveprep_gfs + export NTASKS=${npe_waveprep} + export NTASKS_gfs=${npe_waveprep_gfs} + export memory_waveprep="100GB" + export memory_waveprep_gfs="150GB" + +elif [[ ${step} = "wavepostsbs" ]]; then + + export wtime_wavepostsbs="00:20:00" + export wtime_wavepostsbs_gfs="03:00:00" + export npe_wavepostsbs=8 + export nth_wavepostsbs=1 + npe_node_wavepostsbs=$(echo "${npe_node_max} / ${nth_wavepostsbs}" | bc) + export npe_node_wavepostsbs + export NTASKS=${npe_wavepostsbs} + export memory_wavepostsbs="10GB" + export memory_wavepostsbs_gfs="10GB" + +elif [[ ${step} = "wavepostbndpnt" ]]; then + + export wtime_wavepostbndpnt="01:00:00" + export npe_wavepostbndpnt=240 + export nth_wavepostbndpnt=1 + npe_node_wavepostbndpnt=$(echo "${npe_node_max} / ${nth_wavepostbndpnt}" | bc) + export npe_node_wavepostbndpnt + export NTASKS=${npe_wavepostbndpnt} + export is_exclusive=True + +elif [[ ${step} = "wavepostbndpntbll" ]]; then + + export wtime_wavepostbndpntbll="01:00:00" + export npe_wavepostbndpntbll=448 + export nth_wavepostbndpntbll=1 + npe_node_wavepostbndpntbll=$(echo "${npe_node_max} / ${nth_wavepostbndpntbll}" | bc) + export npe_node_wavepostbndpntbll + export NTASKS=${npe_wavepostbndpntbll} + export is_exclusive=True + +elif [[ ${step} = "wavepostpnt" ]]; then + + export wtime_wavepostpnt="04:00:00" + export npe_wavepostpnt=200 + export nth_wavepostpnt=1 + npe_node_wavepostpnt=$(echo "${npe_node_max} / ${nth_wavepostpnt}" | bc) + export npe_node_wavepostpnt + export NTASKS=${npe_wavepostpnt} + export is_exclusive=True + +elif [[ ${step} = "wavegempak" ]]; then + + export wtime_wavegempak="02:00:00" + export npe_wavegempak=1 + export nth_wavegempak=1 + npe_node_wavegempak=$(echo "${npe_node_max} / ${nth_wavegempak}" | bc) + export npe_node_wavegempak + export NTASKS=${npe_wavegempak} + export memory_wavegempak="1GB" + +elif [[ ${step} = "waveawipsbulls" ]]; then + + export wtime_waveawipsbulls="00:20:00" + export npe_waveawipsbulls=1 + export nth_waveawipsbulls=1 + npe_node_waveawipsbulls=$(echo "${npe_node_max} / ${nth_waveawipsbulls}" | bc) + export npe_node_waveawipsbulls + export NTASKS=${npe_waveawipsbulls} + export is_exclusive=True + +elif [[ ${step} = "waveawipsgridded" ]]; then + + export wtime_waveawipsgridded="02:00:00" + export npe_waveawipsgridded=1 + export nth_waveawipsgridded=1 + npe_node_waveawipsgridded=$(echo "${npe_node_max} / ${nth_waveawipsgridded}" | bc) + export npe_node_waveawipsgridded + export NTASKS=${npe_waveawipsgridded} + export memory_waveawipsgridded_gfs="1GB" + +elif [[ "${step}" = "atmanlinit" ]]; then + + # make below case dependent later + export layout_x=1 + export layout_y=1 + + layout_gsib_x=$(echo "${layout_x} * 3" | bc) + export layout_gsib_x + layout_gsib_y=$(echo "${layout_y} * 2" | bc) + export layout_gsib_y + + export wtime_atmanlinit="00:10:00" + export npe_atmanlinit=1 + export nth_atmanlinit=1 + npe_node_atmanlinit=$(echo "${npe_node_max} / ${nth_atmanlinit}" | bc) + export npe_node_atmanlinit + export memory_atmanlinit="3072M" + +elif [[ "${step}" = "atmanlrun" ]]; then + + # make below case dependent later + export layout_x=1 + export layout_y=1 + + export wtime_atmanlrun="00:30:00" + npe_atmanlrun=$(echo "${layout_x} * ${layout_y} * 6" | bc) + export npe_atmanlrun + npe_atmanlrun_gfs=$(echo "${layout_x} * ${layout_y} * 6" | bc) + export npe_atmanlrun_gfs + export nth_atmanlrun=1 + export nth_atmanlrun_gfs=${nth_atmanlrun} + npe_node_atmanlrun=$(echo "${npe_node_max} / ${nth_atmanlrun}" | bc) + export npe_node_atmanlrun + export is_exclusive=True + +elif [[ "${step}" = "atmanlfinal" ]]; then + + export wtime_atmanlfinal="00:30:00" + export npe_atmanlfinal=${npe_node_max} + export nth_atmanlfinal=1 + npe_node_atmanlfinal=$(echo "${npe_node_max} / ${nth_atmanlfinal}" | bc) + export npe_node_atmanlfinal + export is_exclusive=True + +elif [[ "${step}" = "landanl" ]]; then + # below lines are for creating JEDI YAML + case ${CASE} in + C768) + layout_x=6 + layout_y=6 + ;; + C384) + layout_x=5 + layout_y=5 + ;; + C192 | C96 | C48) + layout_x=1 + layout_y=1 + ;; + *) + echo "FATAL ERROR: Resolution not supported for land analysis'" + exit 1 + esac + + export layout_x + export layout_y + + export wtime_landanl="00:15:00" + npe_landanl=$(echo "${layout_x} * ${layout_y} * 6" | bc) + export npe_landanl + export nth_landanl=1 + npe_node_landanl=$(echo "${npe_node_max} / ${nth_landanl}" | bc) + export npe_node_landanl + +elif [[ "${step}" = "aeroanlinit" ]]; then + + # below lines are for creating JEDI YAML + case ${CASE} in + C768) + layout_x=8 + layout_y=8 + ;; + C384) + layout_x=8 + layout_y=8 + ;; + C192 | C96) + layout_x=8 + layout_y=8 + ;; + C48 ) + # this case is for testing only + layout_x=1 + layout_y=1 + ;; + *) + echo "FATAL ERROR: Resolution not supported for aerosol analysis'" + exit 1 + esac + + export layout_x + export layout_y + + export wtime_aeroanlinit="00:10:00" + export npe_aeroanlinit=1 + export nth_aeroanlinit=1 + npe_node_aeroanlinit=$(echo "${npe_node_max} / ${nth_aeroanlinit}" | bc) + export npe_node_aeroanlinit + export memory_aeroanlinit="3072M" + +elif [[ "${step}" = "aeroanlrun" ]]; then + + case ${CASE} in + C768) + layout_x=8 + layout_y=8 + ;; + C384) + layout_x=8 + layout_y=8 + ;; + C192 | C96) + layout_x=8 + layout_y=8 + ;; + C48 ) + # this case is for testing only + layout_x=1 + layout_y=1 + ;; + *) + echo "FATAL ERROR: Resolution ${CASE} is not supported, ABORT!" + exit 1 + esac + + export layout_x + export layout_y + + export wtime_aeroanlrun="00:30:00" + npe_aeroanlrun=$(echo "${layout_x} * ${layout_y} * 6" | bc) + export npe_aeroanlrun + npe_aeroanlrun_gfs=$(echo "${layout_x} * ${layout_y} * 6" | bc) + export npe_aeroanlrun_gfs + export nth_aeroanlrun=1 + export nth_aeroanlrun_gfs=1 + npe_node_aeroanlrun=$(echo "${npe_node_max} / ${nth_aeroanlrun}" | bc) + export npe_node_aeroanlrun + export is_exclusive=True + +elif [[ "${step}" = "aeroanlfinal" ]]; then + + export wtime_aeroanlfinal="00:10:00" + export npe_aeroanlfinal=1 + export nth_aeroanlfinal=1 + npe_node_aeroanlfinal=$(echo "${npe_node_max} / ${nth_aeroanlfinal}" | bc) + export npe_node_aeroanlfinal + export memory_aeroanlfinal="3072M" + +elif [[ "${step}" = "ocnanalprep" ]]; then + + export wtime_ocnanalprep="00:10:00" + export npe_ocnanalprep=1 + export nth_ocnanalprep=1 + npe_node_ocnanalprep=$(echo "${npe_node_max} / ${nth_ocnanalprep}" | bc) + export npe_node_ocnanalprep + export memory_ocnanalprep="24GB" + +elif [[ "${step}" = "prepoceanobs" ]]; then + + export wtime_prepoceanobs="00:10:00" + export npe_prepoceanobs=1 + export nth_prepoceanobs=1 + npe_node_prepoceanobs=$(echo "${npe_node_max} / ${nth_prepoceanobs}" | bc) + export npe_node_prepoceanobs + export memory_prepoceanobs="24GB" + + +elif [[ "${step}" = "ocnanalbmat" ]]; then + npes=16 + case ${CASE} in + C384) + npes=480 + ;; + C96) + npes=16 + ;; + C48) + npes=16 + ;; + *) + echo "FATAL: Resolution not supported'" + exit 1 + esac + + export wtime_ocnanalbmat="00:30:00" + export npe_ocnanalbmat=${npes} + export nth_ocnanalbmat=1 + export is_exclusive=True + npe_node_ocnanalbmat=$(echo "${npe_node_max} / ${nth_ocnanalbmat}" | bc) + export npe_node_ocnanalbmat + +elif [[ "${step}" = "ocnanalrun" ]]; then + npes=16 + case ${CASE} in + C384) + npes=480 + memory_ocnanalrun="128GB" + ;; + C96) + npes=16 + ;; + C48) + npes=16 + memory_ocnanalrun="64GB" + ;; + *) + echo "FATAL: Resolution not supported'" + exit 1 + esac + + export wtime_ocnanalrun="00:15:00" + export npe_ocnanalrun=${npes} + export nth_ocnanalrun=2 + export is_exclusive=True + npe_node_ocnanalrun=$(echo "${npe_node_max} / ${nth_ocnanalrun}" | bc) + export npe_node_ocnanalrun + export memory_ocnanalrun + +elif [[ "${step}" = "ocnanalchkpt" ]]; then + + export wtime_ocnanalchkpt="00:10:00" + export npe_ocnanalchkpt=1 + export nth_ocnanalchkpt=1 + npe_node_ocnanalchkpt=$(echo "${npe_node_max} / ${nth_ocnanalchkpt}" | bc) + export npe_node_ocnanalchkpt + case ${CASE} in + C384) + export memory_ocnanalchkpt="128GB" + ;; + C96) + export memory_ocnanalchkpt="32GB" + ;; + C48) + export memory_ocnanalchkpt="32GB" + ;; + *) + echo "FATAL: Resolution not supported'" + exit 1 + esac + +elif [[ "${step}" = "ocnanalpost" ]]; then + + export wtime_ocnanalpost="00:30:00" + export npe_ocnanalpost=${npe_node_max} + export nth_ocnanalpost=1 + npe_node_ocnanalpost=$(echo "${npe_node_max} / ${nth_ocnanalpost}" | bc) + export npe_node_ocnanalpost + +elif [[ "${step}" = "ocnanalvrfy" ]]; then + + export wtime_ocnanalvrfy="00:35:00" + export npe_ocnanalvrfy=1 + export nth_ocnanalvrfy=1 + npe_node_ocnanalvrfy=$(echo "${npe_node_max} / ${nth_ocnanalvrfy}" | bc) + export npe_node_ocnanalvrfy + export memory_ocnanalvrfy="24GB" + +elif [[ ${step} = "anal" ]]; then + + export wtime_anal="00:50:00" + export wtime_anal_gfs="00:40:00" + export npe_anal=780 + export nth_anal=5 + export npe_anal_gfs=825 + export nth_anal_gfs=5 + if [[ "${machine}" = "WCOSS2" ]]; then + export nth_anal=8 + export nth_anal_gfs=8 + fi + if [[ ${CASE} = "C384" ]]; then + export npe_anal=160 + export npe_anal_gfs=160 + export nth_anal=10 + export nth_anal_gfs=10 + if [[ ${machine} = "S4" ]]; then + #On the S4-s4 partition, this is accomplished by increasing the task + #count to a multiple of 32 + if [[ ${PARTITION_BATCH} = "s4" ]]; then + export npe_anal=416 + export npe_anal_gfs=416 + fi + #S4 is small, so run this task with just 1 thread + export nth_anal=1 + export nth_anal_gfs=1 + export wtime_anal="02:00:00" + fi + fi + if [[ ${CASE} = "C192" || ${CASE} = "C96" || ${CASE} = "C48" ]]; then + export npe_anal=84 + export npe_anal_gfs=84 + if [[ ${machine} = "S4" ]]; then + export nth_anal=4 + export nth_anal_gfs=4 + #Adjust job count for S4 + if [[ ${PARTITION_BATCH} = "s4" ]]; then + export npe_anal=88 + export npe_anal_gfs=88 + elif [[ ${PARTITION_BATCH} = "ivy" ]]; then + export npe_anal=90 + export npe_anal_gfs=90 + fi + fi + fi + npe_node_anal=$(echo "${npe_node_max} / ${nth_anal}" | bc) + export npe_node_anal + export nth_cycle=${nth_anal} + npe_node_cycle=$(echo "${npe_node_max} / ${nth_cycle}" | bc) + export npe_node_cycle + export is_exclusive=True + +elif [[ ${step} = "analcalc" ]]; then + + export wtime_analcalc="00:10:00" + export npe_analcalc=127 + export ntasks="${npe_analcalc}" + export nth_analcalc=1 + export nth_echgres=4 + export nth_echgres_gfs=12 + npe_node_analcalc=$(echo "${npe_node_max} / ${nth_analcalc}" | bc) + export npe_node_analcalc + export is_exclusive=True + export memory_analcalc="48GB" + +elif [[ ${step} = "analdiag" ]]; then + + export wtime_analdiag="00:15:00" + export npe_analdiag=96 # Should be at least twice npe_ediag + export nth_analdiag=1 + npe_node_analdiag=$(echo "${npe_node_max} / ${nth_analdiag}" | bc) + export npe_node_analdiag + export memory_analdiag="48GB" + +elif [[ ${step} = "sfcanl" ]]; then + + export wtime_sfcanl="00:10:00" + export npe_sfcanl=6 + export nth_sfcanl=1 + npe_node_sfcanl=$(echo "${npe_node_max} / ${nth_sfcanl}" | bc) + export npe_node_sfcanl + export is_exclusive=True + +elif [[ "${step}" = "fcst" || "${step}" = "efcs" ]]; then + + export is_exclusive=True + + if [[ "${step}" = "fcst" ]]; then + _CDUMP_LIST=${CDUMP:-"gdas gfs"} + elif [[ "${step}" = "efcs" ]]; then + _CDUMP_LIST=${CDUMP:-"enkfgdas enkfgfs"} + fi + + # During workflow creation, we need resources for all CDUMPs and CDUMP is undefined + for _CDUMP in ${_CDUMP_LIST}; do + if [[ "${_CDUMP}" =~ "gfs" ]]; then + export layout_x=${layout_x_gfs} + export layout_y=${layout_y_gfs} + export WRITE_GROUP=${WRITE_GROUP_GFS} + export WRTTASK_PER_GROUP_PER_THREAD=${WRTTASK_PER_GROUP_PER_THREAD_GFS} + ntasks_fv3=${ntasks_fv3_gfs} + ntasks_quilt=${ntasks_quilt_gfs} + nthreads_fv3=${nthreads_fv3_gfs} + fi + + # PETS for the atmosphere dycore + (( FV3PETS = ntasks_fv3 * nthreads_fv3 )) + echo "FV3 using (nthreads, PETS) = (${nthreads_fv3}, ${FV3PETS})" + + # PETS for quilting + if [[ "${QUILTING:-}" = ".true." ]]; then + (( QUILTPETS = ntasks_quilt * nthreads_fv3 )) + (( WRTTASK_PER_GROUP = WRTTASK_PER_GROUP_PER_THREAD )) + export WRTTASK_PER_GROUP + else + QUILTPETS=0 + fi + echo "QUILT using (nthreads, PETS) = (${nthreads_fv3}, ${QUILTPETS})" + + # Total PETS for the atmosphere component + ATMTHREADS=${nthreads_fv3} + (( ATMPETS = FV3PETS + QUILTPETS )) + export ATMPETS ATMTHREADS + echo "FV3ATM using (nthreads, PETS) = (${ATMTHREADS}, ${ATMPETS})" + + # Total PETS for the coupled model (starting w/ the atmosphere) + NTASKS_TOT=${ATMPETS} + + # The mediator PETS can overlap with other components, usually it lands on the atmosphere tasks. + # However, it is suggested limiting mediator PETS to 300, as it may cause the slow performance. + # See https://docs.google.com/document/d/1bKpi-52t5jIfv2tuNHmQkYUe3hkKsiG_DG_s6Mnukog/edit + # TODO: Update reference when moved to ufs-weather-model RTD + MEDTHREADS=${nthreads_mediator:-1} + MEDPETS=${MEDPETS:-${FV3PETS}} + [[ "${MEDPETS}" -gt 300 ]] && MEDPETS=300 + export MEDPETS MEDTHREADS + echo "MEDIATOR using (threads, PETS) = (${MEDTHREADS}, ${MEDPETS})" + + CHMPETS=0; CHMTHREADS=0 + if [[ "${DO_AERO}" = "YES" ]]; then + # GOCART shares the same grid and forecast tasks as FV3 (do not add write grid component tasks). + (( CHMTHREADS = ATMTHREADS )) + (( CHMPETS = FV3PETS )) + # Do not add to NTASKS_TOT + echo "GOCART using (threads, PETS) = (${CHMTHREADS}, ${CHMPETS})" + fi + export CHMPETS CHMTHREADS + + WAVPETS=0; WAVTHREADS=0 + if [[ "${DO_WAVE}" = "YES" ]]; then + (( WAVPETS = ntasks_ww3 * nthreads_ww3 )) + (( WAVTHREADS = nthreads_ww3 )) + echo "WW3 using (threads, PETS) = (${WAVTHREADS}, ${WAVPETS})" + (( NTASKS_TOT = NTASKS_TOT + WAVPETS )) + fi + export WAVPETS WAVTHREADS + + OCNPETS=0; OCNTHREADS=0 + if [[ "${DO_OCN}" = "YES" ]]; then + (( OCNPETS = ntasks_mom6 * nthreads_mom6 )) + (( OCNTHREADS = nthreads_mom6 )) + echo "MOM6 using (threads, PETS) = (${OCNTHREADS}, ${OCNPETS})" + (( NTASKS_TOT = NTASKS_TOT + OCNPETS )) + fi + export OCNPETS OCNTHREADS + + ICEPETS=0; ICETHREADS=0 + if [[ "${DO_ICE}" = "YES" ]]; then + (( ICEPETS = ntasks_cice6 * nthreads_cice6 )) + (( ICETHREADS = nthreads_cice6 )) + echo "CICE6 using (threads, PETS) = (${ICETHREADS}, ${ICEPETS})" + (( NTASKS_TOT = NTASKS_TOT + ICEPETS )) + fi + export ICEPETS ICETHREADS + + echo "Total PETS for ${_CDUMP} = ${NTASKS_TOT}" + + if [[ "${_CDUMP}" =~ "gfs" ]]; then + declare -x "npe_${step}_gfs"="${NTASKS_TOT}" + declare -x "nth_${step}_gfs"=1 # ESMF handles threading for the UFS-weather-model + declare -x "npe_node_${step}_gfs"="${npe_node_max}" + else + declare -x "npe_${step}"="${NTASKS_TOT}" + declare -x "nth_${step}"=1 # ESMF handles threading for the UFS-weather-model + declare -x "npe_node_${step}"="${npe_node_max}" + fi + + done + + case "${CASE}" in + "C48" | "C96" | "C192") + declare -x "wtime_${step}"="00:30:00" + declare -x "wtime_${step}_gfs"="03:00:00" + ;; + "C384") + declare -x "wtime_${step}"="00:20:00" + declare -x "wtime_${step}_gfs"="06:00:00" + ;; + "C768" | "C1152") + declare -x "wtime_${step}"="01:00:00" + declare -x "wtime_${step}_gfs"="06:00:00" + ;; + *) + echo "FATAL ERROR: Resolution ${CASE} not supported in ${step}" + exit 1 + ;; + esac + + unset _CDUMP _CDUMP_LIST + unset NTASKS_TOT + +elif [[ ${step} = "ocnpost" ]]; then + + export wtime_ocnpost="00:30:00" + export npe_ocnpost=1 + export npe_node_ocnpost=1 + export nth_ocnpost=1 + export memory_ocnpost="96G" + if [[ ${machine} == "JET" ]]; then + # JET only has 88GB of requestable memory per node + # so a second node is required to meet the requiremtn + npe_ocnpost=2 + fi + +elif [[ "${step}" = "upp" ]]; then + + case "${CASE}" in + "C48" | "C96") + export npe_upp=${CASE:1} + ;; + "C192" | "C384" | "C768") + export npe_upp=120 + ;; + *) + echo "FATAL ERROR: Resolution '${CASE}' not supported for UPP'" + exit 1 + ;; + esac + export npe_node_upp=${npe_upp} + + export nth_upp=1 + + export wtime_upp="00:15:00" + if [[ "${npe_node_upp}" -gt "${npe_node_max}" ]]; then + export npe_node_upp=${npe_node_max} + fi + export is_exclusive=True + +elif [[ ${step} = "atmos_products" ]]; then + + export wtime_atmos_products="00:15:00" + export npe_atmos_products=24 + export nth_atmos_products=1 + export npe_node_atmos_products="${npe_atmos_products}" + export wtime_atmos_products_gfs="${wtime_atmos_products}" + export npe_atmos_products_gfs="${npe_atmos_products}" + export nth_atmos_products_gfs="${nth_atmos_products}" + export npe_node_atmos_products_gfs="${npe_node_atmos_products}" + export is_exclusive=True + +elif [[ ${step} = "verfozn" ]]; then + + export wtime_verfozn="00:05:00" + export npe_verfozn=1 + export nth_verfozn=1 + export npe_node_verfozn=1 + export memory_verfozn="1G" + +elif [[ ${step} = "verfrad" ]]; then + + export wtime_verfrad="00:20:00" + export npe_verfrad=1 + export nth_verfrad=1 + export npe_node_verfrad=1 + export memory_verfrad="5G" + +elif [[ ${step} = "vminmon" ]]; then + + export wtime_vminmon="00:05:00" + export npe_vminmon=1 + export nth_vminmon=1 + export npe_node_vminmon=1 + export wtime_vminmon_gfs="00:05:00" + export npe_vminmon_gfs=1 + export nth_vminmon_gfs=1 + export npe_node_vminmon_gfs=1 + export memory_vminmon="1G" + +elif [[ ${step} = "tracker" ]]; then + + export wtime_tracker="00:10:00" + export npe_tracker=1 + export nth_tracker=1 + export npe_node_tracker=1 + export memory_tracker="4G" + +elif [[ ${step} = "genesis" ]]; then + + export wtime_genesis="00:25:00" + export npe_genesis=1 + export nth_genesis=1 + export npe_node_genesis=1 + export memory_genesis="4G" + +elif [[ ${step} = "genesis_fsu" ]]; then + + export wtime_genesis_fsu="00:10:00" + export npe_genesis_fsu=1 + export nth_genesis_fsu=1 + export npe_node_genesis_fsu=1 + export memory_genesis_fsu="4G" + +elif [[ "${step}" = "fit2obs" ]]; then + + export wtime_fit2obs="00:20:00" + export npe_fit2obs=3 + export nth_fit2obs=1 + export npe_node_fit2obs=1 + export memory_fit2obs="20G" + if [[ ${machine} == "WCOSS2" ]]; then export npe_node_fit2obs=3 ; fi + +elif [[ "${step}" = "metp" ]]; then + + export nth_metp=1 + export wtime_metp="03:00:00" + export npe_metp=4 + export npe_node_metp=4 + export wtime_metp_gfs="06:00:00" + export npe_metp_gfs=4 + export npe_node_metp_gfs=4 + export is_exclusive=True + +elif [[ ${step} = "echgres" ]]; then + + export wtime_echgres="00:10:00" + export npe_echgres=3 + export nth_echgres=${npe_node_max} + export npe_node_echgres=1 + if [[ "${machine}" = "WCOSS2" ]]; then + export memory_echgres="200GB" + fi + +elif [[ ${step} = "init" ]]; then + + export wtime_init="00:30:00" + export npe_init=24 + export nth_init=1 + export npe_node_init=6 + export memory_init="70G" + +elif [[ ${step} = "init_chem" ]]; then + + export wtime_init_chem="00:30:00" + export npe_init_chem=1 + export npe_node_init_chem=1 + export is_exclusive=True + +elif [[ ${step} = "mom6ic" ]]; then + + export wtime_mom6ic="00:30:00" + export npe_mom6ic=24 + export npe_node_mom6ic=24 + export is_exclusive=True + +elif [[ ${step} = "arch" || ${step} = "earc" || ${step} = "getic" ]]; then + + eval "export wtime_${step}='06:00:00'" + eval "export npe_${step}=1" + eval "export npe_node_${step}=1" + eval "export nth_${step}=1" + eval "export memory_${step}=4096M" + if [[ "${machine}" = "WCOSS2" ]]; then + eval "export memory_${step}=50GB" + fi + +elif [[ ${step} == "cleanup" ]]; then + export wtime_cleanup="01:00:00" + export npe_cleanup=1 + export npe_node_cleanup=1 + export nth_cleanup=1 + export memory_cleanup="4096M" + +elif [[ ${step} = "stage_ic" ]]; then + + export wtime_stage_ic="00:15:00" + export npe_stage_ic=1 + export npe_node_stage_ic=1 + export nth_stage_ic=1 + export is_exclusive=True + +elif [[ "${step}" = "atmensanlinit" ]]; then + + # make below case dependent later + export layout_x=1 + export layout_y=1 + + export wtime_atmensanlinit="00:10:00" + export npe_atmensanlinit=1 + export nth_atmensanlinit=1 + npe_node_atmensanlinit=$(echo "${npe_node_max} / ${nth_atmensanlinit}" | bc) + export npe_node_atmensanlinit + export memory_atmensanlinit="3072M" + +elif [[ "${step}" = "atmensanlrun" ]]; then + + # make below case dependent later + export layout_x=1 + export layout_y=1 + + export wtime_atmensanlrun="00:30:00" + npe_atmensanlrun=$(echo "${layout_x} * ${layout_y} * 6" | bc) + export npe_atmensanlrun + npe_atmensanlrun_gfs=$(echo "${layout_x} * ${layout_y} * 6" | bc) + export npe_atmensanlrun_gfs + export nth_atmensanlrun=1 + export nth_atmensanlrun_gfs=${nth_atmensanlrun} + npe_node_atmensanlrun=$(echo "${npe_node_max} / ${nth_atmensanlrun}" | bc) + export npe_node_atmensanlrun + export is_exclusive=True + +elif [[ "${step}" = "atmensanlfinal" ]]; then + + export wtime_atmensanlfinal="00:30:00" + export npe_atmensanlfinal=${npe_node_max} + export nth_atmensanlfinal=1 + npe_node_atmensanlfinal=$(echo "${npe_node_max} / ${nth_atmensanlfinal}" | bc) + export npe_node_atmensanlfinal + export is_exclusive=True + +elif [[ ${step} = "eobs" || ${step} = "eomg" ]]; then + + export wtime_eobs="00:15:00" + export wtime_eomg="01:00:00" + if [[ ${CASE} = "C768" ]]; then + export npe_eobs=200 + elif [[ ${CASE} = "C384" ]]; then + export npe_eobs=100 + elif [[ ${CASE} = "C192" || ${CASE} = "C96" || ${CASE} = "C48" ]]; then + export npe_eobs=40 + fi + export npe_eomg=${npe_eobs} + export nth_eobs=2 + export nth_eomg=${nth_eobs} + npe_node_eobs=$(echo "${npe_node_max} / ${nth_eobs}" | bc) + export npe_node_eobs + export npe_node_eomg=${npe_node_eobs} + export is_exclusive=True + #The number of tasks and cores used must be the same for eobs + #For S4, this is accomplished by running 10 tasks/node + if [[ ${machine} = "S4" ]]; then + export npe_node_eobs=10 + fi + +elif [[ ${step} = "ediag" ]]; then + + export wtime_ediag="00:15:00" + export npe_ediag=48 + export nth_ediag=1 + npe_node_ediag=$(echo "${npe_node_max} / ${nth_ediag}" | bc) + export npe_node_ediag + export memory_ediag="30GB" + +elif [[ ${step} = "eupd" ]]; then + + export wtime_eupd="00:30:00" + if [[ ${CASE} = "C768" ]]; then + export npe_eupd=480 + export nth_eupd=6 + if [[ "${machine}" = "WCOSS2" ]]; then + export npe_eupd=315 + export nth_eupd=14 + fi + elif [[ ${CASE} = "C384" ]]; then + export npe_eupd=270 + export nth_eupd=8 + if [[ "${machine}" = "WCOSS2" ]]; then + export npe_eupd=315 + export nth_eupd=14 + elif [[ ${machine} = "S4" ]]; then + export npe_eupd=160 + export nth_eupd=2 + fi + elif [[ ${CASE} = "C192" || ${CASE} = "C96" || ${CASE} = "C48" ]]; then + export npe_eupd=42 + export nth_eupd=2 + if [[ "${machine}" = "HERA" || "${machine}" = "JET" ]]; then + export nth_eupd=4 + fi + fi + npe_node_eupd=$(echo "${npe_node_max} / ${nth_eupd}" | bc) + export npe_node_eupd + export is_exclusive=True + +elif [[ ${step} = "ecen" ]]; then + + export wtime_ecen="00:10:00" + export npe_ecen=80 + export nth_ecen=4 + if [[ "${machine}" = "HERA" ]]; then export nth_ecen=6; fi + if [[ ${CASE} = "C384" || ${CASE} = "C192" || ${CASE} = "C96" || ${CASE} = "C48" ]]; then export nth_ecen=2; fi + npe_node_ecen=$(echo "${npe_node_max} / ${nth_ecen}" | bc) + export npe_node_ecen + export nth_cycle=${nth_ecen} + npe_node_cycle=$(echo "${npe_node_max} / ${nth_cycle}" | bc) + export npe_node_cycle + export is_exclusive=True + +elif [[ ${step} = "esfc" ]]; then + + export wtime_esfc="00:08:00" + export npe_esfc=80 + export nth_esfc=1 + npe_node_esfc=$(echo "${npe_node_max} / ${nth_esfc}" | bc) + export npe_node_esfc + export nth_cycle=${nth_esfc} + npe_node_cycle=$(echo "${npe_node_max} / ${nth_cycle}" | bc) + export npe_node_cycle + export memory_esfc="80GB" + +elif [[ ${step} = "epos" ]]; then + + export wtime_epos="00:15:00" + export npe_epos=80 + export nth_epos=1 + npe_node_epos=$(echo "${npe_node_max} / ${nth_epos}" | bc) + export npe_node_epos + export is_exclusive=True + +elif [[ ${step} = "postsnd" ]]; then + + export wtime_postsnd="02:00:00" + export npe_postsnd=40 + export nth_postsnd=8 + export npe_node_postsnd=10 + export npe_postsndcfp=9 + export npe_node_postsndcfp=1 + postsnd_req_cores=$(echo "${npe_node_postsnd} * ${nth_postsnd}" | bc) + if [[ ${postsnd_req_cores} -gt "${npe_node_max}" ]]; then + npe_node_postsnd=$(echo "${npe_node_max} / ${nth_postsnd}" | bc) + export npe_node_postsnd + fi + export is_exclusive=True + +elif [[ ${step} = "awips" ]]; then + + export wtime_awips="03:30:00" + export npe_awips=1 + export npe_node_awips=1 + export nth_awips=1 + export memory_awips="3GB" + +elif [[ ${step} = "npoess" ]]; then + + export wtime_npoess="03:30:00" + export npe_npoess=1 + export npe_node_npoess=1 + export nth_npoess=1 + export memory_npoess="3GB" + +elif [[ ${step} = "gempak" ]]; then + + export wtime_gempak="03:00:00" + export npe_gempak=2 + export npe_gempak_gfs=28 + export npe_node_gempak=2 + export npe_node_gempak_gfs=28 + export nth_gempak=1 + export memory_gempak="4GB" + export memory_gempak_gfs="2GB" + +else + + echo "Invalid step = ${step}, ABORT!" + exit 2 + +fi + +echo "END: config.resources" diff --git a/parm/config/gfs/config.sfcanl b/parm/config/gfs/config.sfcanl new file mode 100644 index 0000000000..9592fb77c9 --- /dev/null +++ b/parm/config/gfs/config.sfcanl @@ -0,0 +1,11 @@ +#! /usr/bin/env bash + +########## config.sfcanl ########## +# GFS surface analysis specific + +echo "BEGIN: config.sfcanl" + +# Get task specific resources +. $EXPDIR/config.resources sfcanl + +echo "END: config.sfcanl" diff --git a/parm/config/gfs/config.stage_ic b/parm/config/gfs/config.stage_ic new file mode 100644 index 0000000000..7f3956af4d --- /dev/null +++ b/parm/config/gfs/config.stage_ic @@ -0,0 +1,41 @@ +#! /usr/bin/env bash + +########## config.stage_ic ########## + +echo "BEGIN: config.stage_ic" + +# Get task specific resources +source "${EXPDIR}/config.resources" stage_ic + +case "${CASE}" in + "C48" | "C96") + export CPL_ATMIC="workflow_${CASE}_refactored" + export CPL_ICEIC="workflow_${CASE}_refactored" + export CPL_OCNIC="workflow_${CASE}_refactored" + export CPL_WAVIC="workflow_${CASE}_refactored" + ;; + "C384") + export CPL_ATMIC=GEFS-NoahMP-aerosols-p8c_refactored + export CPL_ICEIC=CPC_refactored + export CPL_OCNIC=CPC3Dvar_refactored + export CPL_WAVIC=workflow_C384_refactored + ;; + "C768") + export CPL_ATMIC=HR2_refactored + export CPL_ICEIC=HR1_refactored + export CPL_OCNIC=HR1_refactored + export CPL_WAVIC=HR1_refactored + ;; + "C1152") + export CPL_ATMIC=HR2_C1152_refactored + export CPL_ICEIC=HR3_refactored + export CPL_OCNIC=HR3_refactored + export CPL_WAVIC=HR1_refactored + ;; + *) + echo "FATAL ERROR Unrecognized resolution: ${CASE}" + exit 1 + ;; +esac + +echo "END: config.stage_ic" diff --git a/parm/config/gfs/config.tracker b/parm/config/gfs/config.tracker new file mode 100644 index 0000000000..71fcf9196d --- /dev/null +++ b/parm/config/gfs/config.tracker @@ -0,0 +1,12 @@ +#! /usr/bin/env bash + +########## config.tracker ########## +echo "BEGIN: config.tracker" + +# Get task specific resources +. "${EXPDIR}/config.resources" tracker + +# Get tropcy settings +. "${EXPDIR}/config.tropcy" + +echo "END: config.tracker" diff --git a/parm/config/gfs/config.tropcy b/parm/config/gfs/config.tropcy new file mode 100644 index 0000000000..718abe3be5 --- /dev/null +++ b/parm/config/gfs/config.tropcy @@ -0,0 +1,15 @@ +#! /usr/bin/env bash + +########## config.tropcy ########## +echo "BEGIN: config.tropcy" + +# Tracker/genesis package location +export HOMEens_tracker=${BASE_GIT}/TC_tracker/${ens_tracker_ver} + +export SENDCOM="YES" # Needed by tracker scripts still + +export FHOUT_CYCLONE=6 +FHMAX_CYCLONE=$(( FHMAX_GFS<240 ? FHMAX_GFS : 240 )) +export FHMAX_CYCLONE + +echo "END: config.tropcy" diff --git a/parm/config/gfs/config.ufs b/parm/config/gfs/config.ufs new file mode 100644 index 0000000000..000c8b1e99 --- /dev/null +++ b/parm/config/gfs/config.ufs @@ -0,0 +1,515 @@ +#! /usr/bin/env bash + +########## config.ufs ########## +# UFS model resolution specific parameters +# e.g. time-step, processor layout, physics and dynamics parameters +# This config sets default variables for FV3, MOM6, CICE6 for their resolutions +# User can over-ride after sourcing this config file + +echo "BEGIN: config.ufs" + +if (( $# <= 1 )); then + + echo "Must specify an input resolution argument to set variables!" + echo "argument can be any one of the following:" + echo "--fv3 C48|C96|C192|C384|C768|C1152|C3072" + echo "--mom6 500|100|025" + echo "--cice6 500|100|025" + echo "--ww3 gnh_10m;aoc_9km;gsh_15m|gwes_30m|glo_025|glo_200|glo_500|mx025" + echo "--gocart" + + exit 1 + +fi + +# Initialize +skip_mom6=true +skip_cice6=true +skip_ww3=true +skip_gocart=true +skip_mediator=true + +# Loop through named arguments +while (( $# > 0 )); do + key="$1" + case "${key}" in + "--fv3") + fv3_res="$2" + shift + ;; + "--mom6") + mom6_res="$2" + skip_mom6=false + shift + ;; + "--cice6") + cice6_res="$2" + skip_cice6=false + shift + ;; + "--ww3") + ww3_res="$2" + skip_ww3=false + shift + ;; + "--gocart") + skip_gocart=false + ;; + *) # unknown option + echo "FATAL ERROR: Unknown option: ${key}, ABORT!" + exit 1 + ;; + esac + shift +done + +# Mediator is required if any of the non-ATM components are used +if [[ "${skip_mom6}" == "false" ]] || [[ "${skip_cice6}" == "false" ]] || [[ "${skip_ww3}" == "false" ]]; then + skip_mediator=false +fi + +case "${machine}" in + "WCOSS2") + npe_node_max=128 + ;; + "HERA" | "ORION" | "HERCULES") + npe_node_max=40 + ;; + "JET") + case "${PARTITION_BATCH}" in + "xjet") + npe_node_max=24 + ;; + "vjet" | "sjet") + npe_node_max=16 + ;; + "kjet") + npe_node_max=40 + ;; + *) + echo "FATAL ERROR: Unsupported ${machine} PARTITION_BATCH = ${PARTITION_BATCH}, ABORT!" + exit 1 + ;; + esac + ;; + "S4") + case "${PARTITION_BATCH}" in + "s4") + npe_node_max=32 + ;; + "ivy") + npe_node_max=20 + ;; + *) + echo "FATAL ERROR: Unsupported ${machine} PARTITION_BATCH = ${PARTITION_BATCH}, ABORT!" + exit 1 + ;; + esac + ;; + *) + echo "FATAL ERROR: Unrecognized machine ${machine}" + exit 14 + ;; +esac +export npe_node_max + +# (Standard) Model resolution dependent variables +case "${fv3_res}" in + "C48") + export DELTIM=1200 + export layout_x=1 + export layout_y=1 + export layout_x_gfs=1 + export layout_y_gfs=1 + export nthreads_fv3=1 + export nthreads_fv3_gfs=1 + export cdmbgwd="0.071,2.1,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling + export cdmbgwd_gsl="40.0,1.77,1.0,1.0" # settings for GSL drag suite + export knob_ugwp_tauamp=6.0e-3 # setting for UGWPv1 non-stationary GWD + export WRITE_GROUP=1 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE=1 + export WRITE_GROUP_GFS=1 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE_GFS=1 + ;; + "C96") + export DELTIM=600 + export layout_x=2 + export layout_y=2 + export layout_x_gfs=2 + export layout_y_gfs=2 + export nthreads_fv3=1 + export nthreads_fv3_gfs=1 + export cdmbgwd="0.14,1.8,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling + export cdmbgwd_gsl="20.0,2.5,1.0,1.0" # settings for GSL drag suite + export knob_ugwp_tauamp=3.0e-3 # setting for UGWPv1 non-stationary GWD + export WRITE_GROUP=1 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE=1 + export WRITE_GROUP_GFS=1 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE_GFS=1 + ;; + "C192") + export DELTIM=450 + export layout_x=4 + export layout_y=6 + export layout_x_gfs=4 + export layout_y_gfs=6 + export nthreads_fv3=1 + export nthreads_fv3_gfs=2 + export cdmbgwd="0.23,1.5,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling + export cdmbgwd_gsl="10.0,3.5,1.0,1.0" # settings for GSL drag suite + export knob_ugwp_tauamp=1.5e-3 # setting for UGWPv1 non-stationary GWD + export WRITE_GROUP=1 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE=10 + export WRITE_GROUP_GFS=2 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE_GFS=5 + ;; + "C384") + export DELTIM=300 + export layout_x=8 + export layout_y=8 + export layout_x_gfs=8 + export layout_y_gfs=8 + export nthreads_fv3=2 + export nthreads_fv3_gfs=2 + export cdmbgwd="1.1,0.72,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling + export cdmbgwd_gsl="5.0,5.0,1.0,1.0" # settings for GSL drag suite + export knob_ugwp_tauamp=0.8e-3 # setting for UGWPv1 non-stationary GWD + export WRITE_GROUP=4 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE=10 + export WRITE_GROUP_GFS=4 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE_GFS=10 + ;; + "C768") + export DELTIM=150 + export layout_x=8 + export layout_y=12 + export layout_x_gfs=12 + export layout_y_gfs=16 + export nthreads_fv3=4 + export nthreads_fv3_gfs=4 + export cdmbgwd="4.0,0.15,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling + export cdmbgwd_gsl="2.5,7.5,1.0,1.0" # settings for GSL drag suite + export knob_ugwp_tauamp=0.5e-3 # setting for UGWPv1 non-stationary GWD + export WRITE_GROUP=2 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE=10 + export WRITE_GROUP_GFS=4 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE_GFS=20 #Note this should be 10 for WCOSS2 + ;; + "C1152") + export DELTIM=120 + export layout_x=8 + export layout_y=16 + export layout_x_gfs=8 + export layout_y_gfs=16 + export nthreads_fv3=4 + export nthreads_fv3_gfs=4 + export cdmbgwd="4.0,0.10,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling + export cdmbgwd_gsl="1.67,8.8,1.0,1.0" # settings for GSL drag suite + export knob_ugwp_tauamp=0.35e-3 # setting for UGWPv1 non-stationary GWD + export WRITE_GROUP=4 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE=10 # TODO: refine these numbers when a case is available + export WRITE_GROUP_GFS=4 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE_GFS=20 # TODO: refine these numbers when a case is available + ;; + "C3072") + export DELTIM=90 + export layout_x=16 + export layout_y=32 + export layout_x_gfs=16 + export layout_y_gfs=32 + export nthreads_fv3=4 + export nthreads_fv3_gfs=4 + export cdmbgwd="4.0,0.05,1.0,1.0" # mountain blocking, ogwd, cgwd, cgwd src scaling + export cdmbgwd_gsl="0.625,14.1,1.0,1.0" # settings for GSL drag suite + export knob_ugwp_tauamp=0.13e-3 # setting for UGWPv1 non-stationary GWD + export WRITE_GROUP=4 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE=10 # TODO: refine these numbers when a case is available + export WRITE_GROUP_GFS=4 + export WRTTASK_PER_GROUP_PER_THREAD_PER_TILE_GFS=10 # TODO: refine these numbers when a case is available + ;; + *) + echo "FATAL ERROR: Unsupported FV3 resolution = ${fv3_res}, ABORT!" + exit 1 + ;; +esac + +(( WRTTASK_PER_GROUP_PER_THREAD = WRTTASK_PER_GROUP_PER_THREAD_PER_TILE * 6 )) +(( WRTTASK_PER_GROUP_PER_THREAD_GFS = WRTTASK_PER_GROUP_PER_THREAD_PER_TILE_GFS * 6 )) +export WRTTASK_PER_GROUP_PER_THREAD +export WRTTASK_PER_GROUP_PER_THREAD_GFS + +(( ntasks_fv3 = layout_x * layout_y * 6 )) +(( ntasks_fv3_gfs = layout_x_gfs * layout_y_gfs * 6 )) +export ntasks_fv3 +export ntasks_fv3_gfs + +(( ntasks_quilt = WRITE_GROUP * WRTTASK_PER_GROUP_PER_THREAD )) +(( ntasks_quilt_gfs = WRITE_GROUP_GFS * WRTTASK_PER_GROUP_PER_THREAD_GFS )) +export ntasks_quilt +export ntasks_quilt_gfs + +# Determine whether to use parallel NetCDF based on resolution +case ${fv3_res} in + "C48" | "C96" | "C192" | "C384") + OUTPUT_FILETYPE_ATM="netcdf" + OUTPUT_FILETYPE_SFC="netcdf" + ;; + "C768" | "C1152" | "C3072") + OUTPUT_FILETYPE_ATM="netcdf_parallel" + OUTPUT_FILETYPE_SFC="netcdf_parallel" + ;; + *) + echo "FATAL ERROR: Unrecognized FV3 resolution ${fv3_res}" + exit 15 + ;; +esac +export OUTPUT_FILETYPE_ATM OUTPUT_FILETYPE_SFC + +# cpl defaults +export cpl=".false." +export cplflx=".false." +export cplice=".false." +export cplchm=".false." +export cplwav=".false." +export cplwav2atm=".false." +export CCPP_SUITE="FV3_GFS_v17_p8_ugwpv1" +model_list="atm" + +# Mediator specific settings +if [[ "${skip_mediator}" == "false" ]]; then + export cpl=".true." + export nthreads_mediator=${nthreads_fv3} # Use same threads as FV3 + export CCPP_SUITE="FV3_GFS_v17_coupled_p8_ugwpv1" # TODO: Does this include FV3_GFS_v17_p8? Can this be used instead of FV3_GFS_v17_p8? +fi + +# MOM6 specific settings +if [[ "${skip_mom6}" == "false" ]]; then + source "${EXPDIR}/config.ocn" + export cplflx=".true." + model_list="${model_list}.ocean" + nthreads_mom6=1 + case "${mom6_res}" in + "500") + ntasks_mom6=8 + OCNTIM=3600 + NX_GLB=72 + NY_GLB=35 + DT_DYNAM_MOM6='3600' + DT_THERM_MOM6='3600' + FRUNOFF="" + CHLCLIM="seawifs_1998-2006_smoothed_2X.nc" + MOM6_RESTART_SETTING='r' + MOM6_RIVER_RUNOFF='False' + eps_imesh="4.0e-1" + MOM6_DIAG_COORD_DEF_Z_FILE="oceanda_zgrid_25L.nc" + MOM6_DIAG_MISVAL="0.0" + MOM6_ALLOW_LANDMASK_CHANGES='False' + TOPOEDITS="" + ;; + "100") + ntasks_mom6=20 + OCNTIM=3600 + NX_GLB=360 + NY_GLB=320 + DT_DYNAM_MOM6='1800' + DT_THERM_MOM6='3600' + FRUNOFF="runoff.daitren.clim.1deg.nc" + CHLCLIM="seawifs_1998-2006_smoothed_2X.nc" + MOM6_RESTART_SETTING='r' + MOM6_RIVER_RUNOFF='False' + eps_imesh="2.5e-1" + TOPOEDITS="ufs.topo_edits_011818.nc" + if [[ "${DO_JEDIOCNVAR:-NO}" = "YES" ]]; then + MOM6_DIAG_COORD_DEF_Z_FILE="oceanda_zgrid_75L.nc" + MOM6_DIAG_MISVAL="0.0" + else + MOM6_DIAG_COORD_DEF_Z_FILE="interpolate_zgrid_40L.nc" + MOM6_DIAG_MISVAL="-1e34" + fi + MOM6_ALLOW_LANDMASK_CHANGES='True' + ;; + "050") + ntasks_mom6=60 + OCNTIM=3600 + NX_GLB=720 + NY_GLB=576 + DT_DYNAM_MOM6='1800' + DT_THERM_MOM6='3600' + FRUNOFF="runoff.daitren.clim.${NX_GLB}x${NY_GLB}.v20180328.nc" + CHLCLIM="seawifs-clim-1997-2010.${NX_GLB}x${NY_GLB}.v20180328.nc" + MOM6_RESTART_SETTING='n' + MOM6_RIVER_RUNOFF='True' + eps_imesh="1.0e-1" + if [[ "${DO_JEDIOCNVAR:-NO}" = "YES" ]]; then + MOM6_DIAG_COORD_DEF_Z_FILE="oceanda_zgrid_75L.nc" + MOM6_DIAG_MISVAL="0.0" + else + MOM6_DIAG_COORD_DEF_Z_FILE="interpolate_zgrid_40L.nc" + MOM6_DIAG_MISVAL="-1e34" + fi + MOM6_ALLOW_LANDMASK_CHANGES='False' + TOPOEDITS="" + ;; + "025") + ntasks_mom6=220 + OCNTIM=1800 + NX_GLB=1440 + NY_GLB=1080 + DT_DYNAM_MOM6='900' + DT_THERM_MOM6='1800' + FRUNOFF="runoff.daitren.clim.${NX_GLB}x${NY_GLB}.v20180328.nc" + CHLCLIM="seawifs-clim-1997-2010.${NX_GLB}x${NY_GLB}.v20180328.nc" + MOM6_RIVER_RUNOFF='True' + MOM6_RESTART_SETTING="r" + eps_imesh="1.0e-1" + if [[ "${DO_JEDIOCNVAR:-NO}" = "YES" ]]; then + MOM6_DIAG_COORD_DEF_Z_FILE="oceanda_zgrid_75L.nc" + MOM6_DIAG_MISVAL="0.0" + else + MOM6_DIAG_COORD_DEF_Z_FILE="interpolate_zgrid_40L.nc" + MOM6_DIAG_MISVAL="-1e34" + fi + MOM6_ALLOW_LANDMASK_CHANGES='False' + TOPOEDITS="" + ;; + *) + echo "FATAL ERROR: Unsupported MOM6 resolution = ${mom6_res}, ABORT!" + exit 1 + ;; + esac + + export nthreads_mom6 ntasks_mom6 + export OCNTIM + export NX_GLB NY_GLB + export DT_DYNAM_MOM6 DT_THERM_MOM6 + export FRUNOFF + export CHLCLIM + export TOPOEDITS + export MOM6_RIVER_RUNOFF + export MOM6_RESTART_SETTING + export eps_imesh + export MOM6_DIAG_COORD_DEF_Z_FILE + export MOM6_DIAG_MISVAL + export MOM6_ALLOW_LANDMASK_CHANGES +fi + +# CICE6 specific settings +if [[ "${skip_cice6}" == "false" ]]; then + source "${EXPDIR}/config.ice" + export cplice=".true." + model_list="${model_list}.ice" + # Ensure we sourced the MOM6 section + if [[ "${skip_mom6}" == "true" ]]; then + echo "FATAL ERROR: CICE6 cannot be configured without MOM6, ABORT!" + exit 1 + fi + + nthreads_cice6=${nthreads_mom6} # CICE6 needs to run on same threads as MOM6 + case "${cice6_res}" in + "500") + ntasks_cice6=4 + cice6_processor_shape="slenderX1" + ;; + "100") + ntasks_cice6=10 + cice6_processor_shape="slenderX2" + ;; + "050") + ntasks_cice6=30 + cice6_processor_shape="slenderX2" + ;; + "025") + ntasks_cice6=120 + cice6_processor_shape="slenderX2" + ;; + *) + echo "FATAL ERROR: Unsupported CICE6 resolution = ${cice6_res}, ABORT!" + exit 1 + ;; + esac + # NX_GLB and NY_GLB are set in the MOM6 section above + # CICE6 runs on the same domain decomposition as MOM6 + export nthreads_cice6 ntasks_cice6 + export cice6_processor_shape +fi + +# WW3 specific settings +if [[ "${skip_ww3}" == "false" ]]; then + source "${EXPDIR}/config.wave" + export cplwav=".true." + export cplwav2atm=".true." + model_list="${model_list}.wave" + nthreads_ww3=2 + case "${ww3_res}" in + "gnh_10m;aoc_9km;gsh_15m") + ntasks_ww3=140 + ;; + "gwes_30m") + ntasks_ww3=100 + ;; + "glo_025") + ntasks_ww3=262 + ;; + "glo_200") + ntasks_ww3=30 + nthreads_ww3=1 + ;; + "glo_500") + ntasks_ww3=12 + nthreads_ww3=1 + ;; + "mx025") + ntasks_ww3=80 + ;; + *) + echo "FATAL ERROR: Unsupported WW3 resolution = ${ww3_res}, ABORT!" + exit 1 + ;; + esac + export ntasks_ww3 nthreads_ww3 +fi + +# GOCART specific settings +if [[ "${skip_gocart}" == "false" ]]; then + source "${EXPDIR}/config.aero" + export cplchm=".true." + model_list="${model_list}.aero" +fi + +# Set the name of the UFS (previously nems) configure template to use +case "${model_list}" in + atm) + export ufs_configure_template="${HOMEgfs}/parm/ufs/ufs.configure.atm.IN" + ;; + atm.aero) + export ufs_configure_template="${HOMEgfs}/parm/ufs/ufs.configure.atm_aero.IN" + ;; + atm.wave) + export ufs_configure_template="${HOMEgfs}/parm/ufs/ufs.configure.leapfrog_atm_wav.IN" + ;; + atm.ocean.ice) + export ufs_configure_template="${HOMEgfs}/parm/ufs/ufs.configure.cpld.IN" + ;; + atm.ocean.ice.aero) + export ufs_configure_template="${HOMEgfs}/parm/ufs/ufs.configure.cpld_aero.IN" + ;; + atm.ocean.ice.wave) + export ufs_configure_template="${HOMEgfs}/parm/ufs/ufs.configure.cpld_outerwave.IN" + ;; + atm.ocean.ice.wave.aero) + export ufs_configure_template="${HOMEgfs}/parm/ufs/ufs.configure.cpld_aero_outerwave.IN" + ;; + *) + echo "FATAL ERROR: Unable to determine appropriate UFS configure template for ${model_list}" + exit 16 + ;; +esac + +if [[ ! -r "${ufs_configure_template}" ]]; then + echo "FATAL ERROR: ${ufs_configure_template} either doesn't exist or is not readable." + exit 17 +fi + +unset model_list + +echo "END: config.ufs" diff --git a/parm/config/gfs/config.upp b/parm/config/gfs/config.upp new file mode 100644 index 0000000000..a1bd0a7d34 --- /dev/null +++ b/parm/config/gfs/config.upp @@ -0,0 +1,16 @@ +#! /usr/bin/env bash + +########## config.upp ########## +# UPP specific + +echo "BEGIN: config.upp" + +# Get task specific resources +. "${EXPDIR}/config.resources" upp + +export UPP_CONFIG="${HOMEgfs}/parm/post/upp.yaml" + +# No. of forecast hours to process in a single job +export NFHRS_PER_GROUP=3 + +echo "END: config.upp" diff --git a/parm/config/gfs/config.verfozn b/parm/config/gfs/config.verfozn new file mode 100644 index 0000000000..9eea0f25a3 --- /dev/null +++ b/parm/config/gfs/config.verfozn @@ -0,0 +1,23 @@ +#! /usr/bin/env bash + +########## config.verfozn ########## +echo "BEGIN: config.verfozn" + +# Get task specific resources +. "${EXPDIR}/config.resources" verfozn + +export DO_DATA_RPT=1 +export OZN_AREA="glb" +export OZNMON_SUFFIX=${NET} +export PARMmonitor=${PARMgfs}/monitor +export SATYPE_FILE=${PARMmonitor}/gdas_oznmon_satype.txt + +# Source the parm file +. "${PARMmonitor}/gdas_oznmon.parm" + +# Set up validation file +if [[ ${VALIDATE_DATA} -eq 1 ]]; then + export ozn_val_file=${PARMmonitor}/gdas_oznmon_base.tar +fi + +echo "END: config.verfozn" diff --git a/parm/config/gfs/config.verfrad b/parm/config/gfs/config.verfrad new file mode 100644 index 0000000000..dd65020180 --- /dev/null +++ b/parm/config/gfs/config.verfrad @@ -0,0 +1,27 @@ +#! /usr/bin/env bash + +########## config.verfrad ########## +echo "BEGIN: config.verfrad" + +# Get task specific resources +. "${EXPDIR}/config.resources" verfrad + +export PARMmonitor=${PARMgfs}/monitor +export satype_file=${PARMmonitor}/gdas_radmon_satype.txt + +# Source the parm file +. "${PARMmonitor}/da_mon.parm" + +# Other variables +export RAD_AREA="glb" +export MAKE_CTL=1 +export MAKE_DATA=1 +export USE_ANL=1 +export DO_DIAG_RPT=1 +export DO_DATA_RPT=1 + +export RADMON_SUFFIX=${RUN} +export CYCLE_INTERVAL=${assim_freq:-6} +export VERBOSE="YES" + +echo "END: config.verfrad" diff --git a/parm/config/gfs/config.vminmon b/parm/config/gfs/config.vminmon new file mode 100644 index 0000000000..8929c36e0e --- /dev/null +++ b/parm/config/gfs/config.vminmon @@ -0,0 +1,16 @@ +#! /usr/bin/env bash + +########## config.vminmon ########## +echo "BEGIN: config.vminmon" + +# Get task specific resources +. "${EXPDIR}/config.resources" vminmon + +export MINMON_SUFFIX=${MINMON_SUFFIX:-${NET}} +export CYCLE_INTERVAL=${assim_freq:-6} + +export PARMmonitor=${PARMgfs}/monitor +export mm_gnormfile=${PARMmonitor}/${RUN}_minmon_gnorm.txt +export mm_costfile=${PARMmonitor}/${RUN}_minmon_cost.txt + +echo "END: config.vminmon" diff --git a/parm/config/gfs/config.wave b/parm/config/gfs/config.wave new file mode 100644 index 0000000000..acb4c518ba --- /dev/null +++ b/parm/config/gfs/config.wave @@ -0,0 +1,204 @@ +#! /usr/bin/env bash + +########## config.wave ########## +# Wave steps specific + +echo "BEGIN: config.wave" + +# Parameters that are common to all wave model steps + +# System and version +export wave_sys_ver=v1.0.0 + +export EXECwave="${HOMEgfs}/exec" +export FIXwave="${HOMEgfs}/fix/wave" +export PARMwave="${HOMEgfs}/parm/wave" +export USHwave="${HOMEgfs}/ush" + +# This config contains variables/parameters used in the fcst step +# Some others are also used across the workflow in wave component scripts + +# General runtime labels +export CDUMPwave="${RUN}wave" + +# In GFS/GDAS, restart files are generated/read from gdas runs +export CDUMPRSTwave="gdas" + +# Grids for wave model +export waveGRD=${waveGRD:-'mx025'} + +#grid dependent variable defaults +export waveGRDN='1' # grid number for ww3_multi +export waveGRDG='10' # grid group for ww3_multi +export USE_WAV_RMP='NO' # YES/NO rmp grid remapping pre-processed coefficients +export waveMULTIGRID='.false.' # .true./.false. for multi or shel +export MESH_WAV="mesh.${waveGRD}.nc" # Mesh grid for wave model for CMEPS +export waveesmfGRD=' ' # input grid for multigrid + +#Grid dependent variables for various grids +case "${waveGRD}" in + "gnh_10m;aoc_9km;gsh_15m") + #GFSv16 settings: + export waveGRDN='1 2 3' + export waveGRDG='10 20 30' + export USE_WAV_RMP='YES' + export waveMULTIGRID='.true.' + export IOSRV='3' + export MESH_WAV=' ' + export waveesmfGRD='glox_10m' + export waveuoutpGRD='points' + export waveinterpGRD='glo_15mxt at_10m ep_10m wc_10m glo_30m' + export wavepostGRD='gnh_10m aoc_9km gsh_15m' + ;; + "gwes_30m") + #Grid used for P8 + export waveinterpGRD='' + export wavepostGRD='gwes_30m' + export waveuoutpGRD=${waveGRD} + ;; + "mx025") + #Grid used for HR1 (tripolar 1/4 deg) + export waveinterpGRD='reg025' + export wavepostGRD='' + export waveuoutpGRD=${waveGRD} + ;; + "glo_025") + #GEFSv13 regular lat/lon 1/4 deg grid + export waveinterpGRD='' + export wavepostGRD='glo_025' + export waveuoutpGRD=${waveGRD} + ;; + "glo_200") + #Global regular lat/lon 2deg deg grid + export waveinterpGRD='' + export wavepostGRD='glo_200' + export waveuoutpGRD=${waveGRD} + ;; + "glo_500") + #Global regular lat/lon 5deg deg grid + export waveinterpGRD='' + export wavepostGRD='glo_500' + export waveuoutpGRD=${waveGRD} + ;; + *) + echo "FATAL ERROR: No grid specific wave config values exist for ${waveGRD}. Aborting." + exit 1 + ;; +esac + +# Grids for input wind fields +export WAVEWND_DID= +export WAVEWND_FID= + +# The start time reflects the number of hindcast hours prior to the cycle initial time +if [[ "${CDUMP}" = "gdas" ]]; then + export FHMAX_WAV=${FHMAX:-9} +else + export FHMAX_WAV=${FHMAX_GFS} +fi +export WAVHINDH=0 +export FHMIN_WAV=0 +export FHOUT_WAV=3 +export FHMAX_HF_WAV=120 +export FHOUT_HF_WAV=1 +export FHMAX_WAV_IBP=180 +if (( FHMAX_WAV < FHMAX_WAV_IBP )); then export FHMAX_WAV_IBP=${FHMAX_GFS} ; fi + +# gridded and point output rate +export DTFLD_WAV=$(( FHOUT_HF_WAV * 3600 )) +export DTPNT_WAV=3600 +export FHINCP_WAV=$(( DTPNT_WAV / 3600 )) + +# Selected output parameters (gridded) +export OUTPARS_WAV="WND CUR ICE HS T01 T02 DIR FP DP PHS PTP PDIR CHA" + +# Restart file config +if [[ "${CDUMP}" = "gdas" ]]; then + export WAVNCYC=4 + export WAVHCYC=${assim_freq:-6} + export FHMAX_WAV_CUR=48 # RTOFS forecasts only out to 8 days +elif [[ ${gfs_cyc} -ne 0 ]]; then + export WAVHCYC=${assim_freq:-6} + export FHMAX_WAV_CUR=192 # RTOFS forecasts only out to 8 days +else + export WAVHCYC=0 + export FHMAX_WAV_CUR=192 # RTOFS forecasts only out to 8 days +fi + +# Restart timing business + +export RSTTYPE_WAV='T' # generate second tier of restart files +if [[ "${CDUMP}" != gfs ]]; then # Setting is valid for GDAS and GEFS + export DT_1_RST_WAV=10800 # time between restart files, set to DTRST=1 for a single restart file + export DT_2_RST_WAV=43200 # restart stride for checkpointing restart + export RSTIOFF_WAV=0 # first restart file offset relative to model start +else # This is a GFS run + rst_dt_gfs=$(( restart_interval_gfs * 3600 )) # TODO: This calculation needs to move to parsing_namelists_WW3.sh + if [[ ${rst_dt_gfs} -gt 0 ]]; then + export DT_1_RST_WAV=0 #${rst_dt_gfs:-0} # time between restart files, set to DTRST=1 for a single restart file + #temporarily set to zero to avoid a clash in requested restart times + #which makes the wave model crash a fix for the model issue will be coming + export DT_2_RST_WAV=${rst_dt_gfs:-0} # restart stride for checkpointing restart + else + rst_dt_fhmax=$(( FHMAX_WAV * 3600 )) + export DT_1_RST_WAV=0 # time between restart files, set to DTRST=1 for a single restart file + export DT_2_RST_WAV=${rst_dt_fhmax:-0} # use checkpoint restart file name for creating restart at end of run + fi + export RSTIOFF_WAV=0 # first restart file offset relative to model start +fi +# +# Set runmember to default value if not GEFS cpl run +# (for a GFS coupled run, RUNMEN would be unset, this should default to -1) +export RUNMEM=${RUNMEM:--1} +# Set wave model member tags if ensemble run +# -1: no suffix, deterministic; xxxNN: extract two last digits to make ofilename prefix=gwesNN +if [[ ${RUNMEM} = -1 ]]; then +# No suffix added to model ID in case of deterministic run + export waveMEMB= +else +# Extract member number only + export waveMEMB="${RUNMEM: -2}" +fi + +# Determine if wave component needs input and/or is coupled +export WW3ATMINP='CPL' +if [[ ${DO_ICE} == "YES" ]]; then + export WW3ICEINP='CPL' + export WAVEICE_FID= +else + export WW3ICEINP='YES' + export WAVEICE_FID=glix_10m +fi + +export WAVECUR_DID=rtofs +if [[ ${DO_OCN} == "YES" ]]; then + export WW3CURINP='CPL' + export WAVECUR_FID= +else + export WW3CURINP='YES' + export WAVECUR_FID=glix_10m +fi + +# Determine if input is from perturbed ensemble (T) or single input file (F) for all members +export WW3ATMIENS='F' +export WW3ICEIENS='F' +export WW3CURIENS='F' + +export GOFILETYPE=1 # GOFILETYPE=1 one gridded file per output step +export POFILETYPE=1 # POFILETYPE=1 one point file per output step + +# Parameters for ww3_multi/shel.inp +# Unified output T or F +export FUNIPNT='T' +# Output server type (see ww3_shel/multi.inp in WW3 repo) +export IOSRV=${IOSRV:-'1'} +# Flag for dedicated output process for unified points +export FPNTPROC='T' +# Flag for grids sharing dedicated output processes +export FGRDPROC='F' +# Flag for masking computation in two-way nesting +export FLAGMASKCOMP="F" +# Flag for masking at printout time. +export FLAGMASKOUT="F" + +echo "END: config.wave" diff --git a/parm/config/gfs/config.waveawipsbulls b/parm/config/gfs/config.waveawipsbulls new file mode 100644 index 0000000000..65a8d5076b --- /dev/null +++ b/parm/config/gfs/config.waveawipsbulls @@ -0,0 +1,13 @@ +#! /usr/bin/env bash + +########## config.waveawipsbulls ########## +# Wave steps specific + +echo "BEGIN: config.waveawipsbulls" + +# Get task specific resources +. $EXPDIR/config.resources waveawipsbulls + +export DBNROOT=/dev/null + +echo "END: config.waveawipsbulls" diff --git a/parm/config/gfs/config.waveawipsgridded b/parm/config/gfs/config.waveawipsgridded new file mode 100644 index 0000000000..bd7c7c11e4 --- /dev/null +++ b/parm/config/gfs/config.waveawipsgridded @@ -0,0 +1,13 @@ +#! /usr/bin/env bash + +########## config.waveawipsgridded ########## +# Wave steps specific + +echo "BEGIN: config.waveawipsgridded" + +# Get task specific resources +. $EXPDIR/config.resources waveawipsgridded + +export DBNROOT=/dev/null + +echo "END: config.waveawipsgridded" diff --git a/parm/config/gfs/config.wavegempak b/parm/config/gfs/config.wavegempak new file mode 100644 index 0000000000..bcbec91f07 --- /dev/null +++ b/parm/config/gfs/config.wavegempak @@ -0,0 +1,12 @@ +#! /usr/bin/env bash + +########## config.wavegempak ########## +# Wave steps specific + +echo "BEGIN: config.wavegempak" + +# Get task specific resources +. $EXPDIR/config.resources wavegempak + + +echo "END: config.wavegempak" diff --git a/parm/config/gfs/config.waveinit b/parm/config/gfs/config.waveinit new file mode 100644 index 0000000000..61715f7f01 --- /dev/null +++ b/parm/config/gfs/config.waveinit @@ -0,0 +1,14 @@ +#! /usr/bin/env bash + +########## config.waveinit ########## +# Wave steps specific + +echo "BEGIN: config.waveinit" + +# Get task specific resources +. $EXPDIR/config.resources waveinit + +# Step label +export sigMODE=${sigMODE:-init} + +echo "END: config.waveinit" diff --git a/parm/config/gfs/config.wavepostbndpnt b/parm/config/gfs/config.wavepostbndpnt new file mode 100644 index 0000000000..dfeddc79b2 --- /dev/null +++ b/parm/config/gfs/config.wavepostbndpnt @@ -0,0 +1,11 @@ +#! /usr/bin/env bash + +########## config.wavepostbndpnt ########## +# Wave steps specific + +echo "BEGIN: config.wavepostbndpnt" + +# Get task specific resources +. $EXPDIR/config.resources wavepostbndpnt + +echo "END: config.wavepostbndpnt" diff --git a/parm/config/gfs/config.wavepostbndpntbll b/parm/config/gfs/config.wavepostbndpntbll new file mode 100644 index 0000000000..bb7224cc70 --- /dev/null +++ b/parm/config/gfs/config.wavepostbndpntbll @@ -0,0 +1,11 @@ +#! /usr/bin/env bash + +########## config.wavepostbndpntbll ########## +# Wave steps specific + +echo "BEGIN: config.wavepostbndpntbll" + +# Get task specific resources +. $EXPDIR/config.resources wavepostbndpntbll + +echo "END: config.wavepostbndpntbll" diff --git a/parm/config/gfs/config.wavepostpnt b/parm/config/gfs/config.wavepostpnt new file mode 100644 index 0000000000..8befb91760 --- /dev/null +++ b/parm/config/gfs/config.wavepostpnt @@ -0,0 +1,11 @@ +#! /usr/bin/env bash + +########## config.wavepostpnt ########## +# Wave steps specific + +echo "BEGIN: config.wavepostpnt" + +# Get task specific resources +. $EXPDIR/config.resources wavepostpnt + +echo "END: config.wavepostpnt" diff --git a/parm/config/gfs/config.wavepostsbs b/parm/config/gfs/config.wavepostsbs new file mode 100644 index 0000000000..8e74aae069 --- /dev/null +++ b/parm/config/gfs/config.wavepostsbs @@ -0,0 +1,28 @@ +#! /usr/bin/env bash + +########## config.wavepostsbs ########## +# Wave steps specific + +echo "BEGIN: config.wavepostsbs" + +# Get task specific resources +. $EXPDIR/config.resources wavepostsbs + +# Subgrid info for grib2 encoding +export WAV_SUBGRBSRC="" +export WAV_SUBGRB="" + +# Options for point output (switch on/off boundary point output) +export DOIBP_WAV='NO' # Input boundary points +export DOFLD_WAV='YES' # Field data +export DOPNT_WAV='YES' # Station data +export DOGRB_WAV='YES' # Create grib2 files +if [[ -n "${waveinterpGRD}" ]]; then + export DOGRI_WAV='YES' # Create interpolated grids +else + export DOGRI_WAV='NO' # Do not create interpolated grids +fi +export DOSPC_WAV='YES' # Spectral post +export DOBLL_WAV='YES' # Bulletin post + +echo "END: config.wavepostsbs" diff --git a/parm/config/gfs/config.waveprep b/parm/config/gfs/config.waveprep new file mode 100644 index 0000000000..1c9a40c1d8 --- /dev/null +++ b/parm/config/gfs/config.waveprep @@ -0,0 +1,27 @@ +#! /usr/bin/env bash + +########## config.waveprep ########## +# Wave steps specific + +echo "BEGIN: config.waveprep" + +# Get task specific resources +. $EXPDIR/config.resources waveprep + +# Step label +export sigMODE=${sigMODE:-prep} + +# Intake currents settings +export WAV_CUR_DT=${WAV_CUR_DT:-3} +export WAV_CUR_HF_DT=${WAV_CUR_HF_DT:-3} +export WAV_CUR_HF_FH=${WAV_CUR_HF_FH:-0} +export WAV_CUR_CDO_SMOOTH="NO" + +# Location of CDO module +export CDO_ROOT=${CDO_ROOT:-/usrx/local/dev/packages/cdo/1.9.8} + +if [ "${WW3ICEINP}" = "YES" ]; then + export WAVICEFILE=${CDUMP}.t${cyc}z.seaice.5min.grib2 +fi + +echo "END: config.waveprep" diff --git a/parm/config/gfs/yaml/defaults.yaml b/parm/config/gfs/yaml/defaults.yaml new file mode 100644 index 0000000000..c0298edb18 --- /dev/null +++ b/parm/config/gfs/yaml/defaults.yaml @@ -0,0 +1,35 @@ +base: + DOIAU: "YES" + DO_JEDIATMVAR: "NO" + DO_JEDIATMENS: "NO" + DO_JEDIOCNVAR: "NO" + DO_JEDILANDDA: "NO" + DO_MERGENSST: "NO" + +atmanl: + IO_LAYOUT_X: 1 + IO_LAYOUT_Y: 1 + +atmensanl: + IO_LAYOUT_X: 1 + IO_LAYOUT_Y: 1 + +aeroanl: + IO_LAYOUT_X: 1 + IO_LAYOUT_Y: 1 + +landanl: + IO_LAYOUT_X: 1 + IO_LAYOUT_Y: 1 + +ocnanal: + SOCA_INPUT_FIX_DIR: "/scratch2/NCEPDEV/ocean/Guillaume.Vernieres/data/static/72x35x25/soca" # TODO: These need to go to glopara fix space. @guillaumevernieres will open an issue + CASE_ANL: "C48" + COMIN_OBS: "/scratch2/NCEPDEV/marineda/r2d2-v2-v3" # TODO: make platform agnostic + SOCA_OBS_LIST: "{{ HOMEgfs }}/sorc/gdas.cd/parm/soca/obs/obs_list.yaml" + SOCA_NINNER: 100 + R2D2_OBS_SRC: "gdas_marine" + R2D2_OBS_DUMP: "s2s_v1" + SABER_BLOCKS_YAML: "" + NICAS_RESOL: 1 + NICAS_GRID_SIZE: 15000 diff --git a/parm/config/gfs/yaml/test_ci.yaml b/parm/config/gfs/yaml/test_ci.yaml new file mode 100644 index 0000000000..bb9602be59 --- /dev/null +++ b/parm/config/gfs/yaml/test_ci.yaml @@ -0,0 +1,4 @@ +defaults: + !INC {{ HOMEgfs }}/parm/config/gfs/yaml/defaults.yaml +base: + ACCOUNT: "nems" diff --git a/parm/gdas/aero_crtm_coeff.yaml b/parm/gdas/aero_crtm_coeff.yaml new file mode 100644 index 0000000000..75b54c3741 --- /dev/null +++ b/parm/gdas/aero_crtm_coeff.yaml @@ -0,0 +1,13 @@ +mkdir: +- {{ DATA }}/crtm/ +copy: +- [{{ CRTM_FIX }}/AerosolCoeff.bin, {{ DATA }}/crtm/] +- [{{ CRTM_FIX }}/CloudCoeff.bin, {{ DATA }}/crtm/] +- [{{ CRTM_FIX }}/v.viirs-m_npp.SpcCoeff.bin, {{ DATA }}/crtm/] +- [{{ CRTM_FIX }}/v.viirs-m_npp.TauCoeff.bin, {{ DATA }}/crtm/] +- [{{ CRTM_FIX }}/v.viirs-m_j1.SpcCoeff.bin, {{ DATA }}/crtm/] +- [{{ CRTM_FIX }}/v.viirs-m_j1.TauCoeff.bin, {{ DATA }}/crtm/] +- [{{ CRTM_FIX }}/NPOESS.VISice.EmisCoeff.bin, {{ DATA }}/crtm/] +- [{{ CRTM_FIX }}/NPOESS.VISland.EmisCoeff.bin, {{ DATA }}/crtm/] +- [{{ CRTM_FIX }}/NPOESS.VISsnow.EmisCoeff.bin, {{ DATA }}/crtm/] +- [{{ CRTM_FIX }}/NPOESS.VISwater.EmisCoeff.bin, {{ DATA }}/crtm/] diff --git a/parm/gdas/aero_jedi_fix.yaml b/parm/gdas/aero_jedi_fix.yaml new file mode 100644 index 0000000000..e3c0109407 --- /dev/null +++ b/parm/gdas/aero_jedi_fix.yaml @@ -0,0 +1,11 @@ +mkdir: +- !ENV ${DATA}/fv3jedi +copy: +- - !ENV ${FV3JEDI_FIX}/fv3jedi/fv3files/akbk$(npz).nc4 + - !ENV ${DATA}/fv3jedi/akbk.nc4 +- - !ENV ${FV3JEDI_FIX}/fv3jedi/fv3files/fmsmpp.nml + - !ENV ${DATA}/fv3jedi/fmsmpp.nml +- - !ENV ${FV3JEDI_FIX}/fv3jedi/fv3files/field_table_gfdl + - !ENV ${DATA}/fv3jedi/field_table +- - !ENV $(HOMEgfs)/sorc/gdas.cd/parm/io/fv3jedi_fieldmetadata_restart.yaml + - !ENV ${DATA}/fv3jedi/fv3jedi_fieldmetadata_restart.yaml diff --git a/parm/gdas/aeroanl_inc_vars.yaml b/parm/gdas/aeroanl_inc_vars.yaml new file mode 100644 index 0000000000..298373d6e2 --- /dev/null +++ b/parm/gdas/aeroanl_inc_vars.yaml @@ -0,0 +1 @@ +incvars: ['dust1', 'dust2', 'dust3', 'dust4', 'dust5', 'seas1', 'seas2', 'seas3', 'seas4', 'so4', 'oc1', 'oc2', 'bc1', 'bc2'] diff --git a/parm/gdas/atm_crtm_coeff.yaml b/parm/gdas/atm_crtm_coeff.yaml new file mode 100644 index 0000000000..b943f5cbb3 --- /dev/null +++ b/parm/gdas/atm_crtm_coeff.yaml @@ -0,0 +1,178 @@ +mkdir: +- {{ DATA }}/crtm +copy: +# Emissivity files +- [{{ CRTM_FIX }}/NPOESS.VISice.EmisCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/NPOESS.VISland.EmisCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/NPOESS.VISsnow.EmisCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/NPOESS.VISwater.EmisCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/NPOESS.IRice.EmisCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/NPOESS.IRland.EmisCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/NPOESS.IRsnow.EmisCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/Nalli.IRwater.EmisCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/FASTEM6.MWwater.EmisCoeff.bin, {{ DATA }}/crtm] +# Aerosol and Cloud files +- [{{ CRTM_FIX }}/AerosolCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/CloudCoeff.bin, {{ DATA }}/crtm] +##- [{{ CRTM_FIX }}/CloudCoeff.GFDLFV3.-109z-1.bin, {{ DATA }}/crtm] +# Satellite_Sensor specific Tau and Spc coefficient files +- [{{ CRTM_FIX }}/abi_g16.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/abi_g16.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/abi_g17.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/abi_g17.TauCoeff.bin, {{ DATA }}/crtm] +##- [{{ CRTM_FIX }}/abi_g18.SpcCoeff.bin, {{ DATA }}/crtm] +##- [{{ CRTM_FIX }}/abi_g18.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/ahi_himawari8.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/ahi_himawari8.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/ahi_himawari9.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/ahi_himawari9.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/airs_aqua.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/airs_aqua.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsr2_gcom-w1.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsr2_gcom-w1.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsre_aqua.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsre_aqua.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsua_aqua.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsua_aqua.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsua_metop-a.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsua_metop-a.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsua_metop-b.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsua_metop-b.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsua_metop-c.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsua_metop-c.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsua_n15.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsua_n15.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsua_n18.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsua_n18.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsua_n19.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsua_n19.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsub_n17.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/amsub_n17.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/atms_n20.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/atms_n20.TauCoeff.bin, {{ DATA }}/crtm] +##- [{{ CRTM_FIX }}/atms_n21.SpcCoeff.bin, {{ DATA }}/crtm] +##- [{{ CRTM_FIX }}/atms_n21.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/atms_npp.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/atms_npp.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/avhrr3_metop-a.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/avhrr3_metop-a.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/avhrr3_metop-b.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/avhrr3_metop-b.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/avhrr3_metop-c.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/avhrr3_metop-c.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/avhrr3_n18.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/avhrr3_n18.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/avhrr3_n19.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/avhrr3_n19.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/cris-fsr_n20.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/cris-fsr_n20.TauCoeff.bin, {{ DATA }}/crtm] +##- [{{ CRTM_FIX }}/cris-fsr_n21.SpcCoeff.bin, {{ DATA }}/crtm] +##- [{{ CRTM_FIX }}/cris-fsr_n21.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/cris-fsr_npp.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/cris-fsr_npp.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/gmi_gpm.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/gmi_gpm.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/hirs3_n17.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/hirs3_n17.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/hirs4_metop-a.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/hirs4_metop-a.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/hirs4_metop-b.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/hirs4_metop-b.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/hirs4_n19.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/hirs4_n19.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/iasi_metop-a.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/iasi_metop-a.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/iasi_metop-b.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/iasi_metop-b.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/iasi_metop-c.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/iasi_metop-c.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/imgr_g11.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/imgr_g11.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/imgr_g12.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/imgr_g12.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/imgr_g13.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/imgr_g13.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/imgr_g14.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/imgr_g14.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/imgr_g15.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/imgr_g15.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/mhs_metop-a.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/mhs_metop-a.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/mhs_metop-b.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/mhs_metop-b.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/mhs_metop-c.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/mhs_metop-c.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/mhs_n18.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/mhs_n18.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/mhs_n19.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/mhs_n19.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/saphir_meghat.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/saphir_meghat.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/seviri_m08.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/seviri_m08.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/seviri_m09.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/seviri_m09.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/seviri_m10.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/seviri_m10.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/seviri_m11.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/seviri_m11.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD1_g11.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD1_g11.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD1_g12.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD1_g12.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD1_g13.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD1_g13.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD1_g14.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD1_g14.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD1_g15.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD1_g15.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD2_g11.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD2_g11.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD2_g12.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD2_g12.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD2_g13.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD2_g13.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD2_g14.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD2_g14.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD2_g15.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD2_g15.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD3_g11.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD3_g11.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD3_g12.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD3_g12.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD3_g13.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD3_g13.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD3_g14.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD3_g14.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD3_g15.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD3_g15.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD4_g11.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD4_g11.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD4_g12.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD4_g12.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD4_g13.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD4_g13.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD4_g14.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD4_g14.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD4_g15.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/sndrD4_g15.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/ssmi_f15.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/ssmi_f15.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/ssmis_f16.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/ssmis_f16.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/ssmis_f17.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/ssmis_f17.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/ssmis_f18.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/ssmis_f18.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/ssmis_f19.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/ssmis_f19.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/ssmis_f20.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/ssmis_f20.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/viirs-m_j1.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/viirs-m_j1.TauCoeff.bin, {{ DATA }}/crtm] +##- [{{ CRTM_FIX }}/viirs-m_j2.SpcCoeff.bin, {{ DATA }}/crtm] +##- [{{ CRTM_FIX }}/viirs-m_j2.TauCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/viirs-m_npp.SpcCoeff.bin, {{ DATA }}/crtm] +- [{{ CRTM_FIX }}/viirs-m_npp.TauCoeff.bin, {{ DATA }}/crtm] +# Special Spc files +##- [{{ CRTM_FIX }}/amsua_metop-a_v2.SpcCoeff.bin, {{ DATA }}/crtm] diff --git a/parm/gdas/atm_jedi_fix.yaml b/parm/gdas/atm_jedi_fix.yaml new file mode 100644 index 0000000000..3d1ca79f33 --- /dev/null +++ b/parm/gdas/atm_jedi_fix.yaml @@ -0,0 +1,7 @@ +mkdir: +- $(DATA)/fv3jedi +copy: +- [$(HOMEgfs)/fix/gdas/fv3jedi/fv3files/akbk$(npz).nc4, $(DATA)/fv3jedi/akbk.nc4] +- [$(HOMEgfs)/fix/gdas/fv3jedi/fv3files/fmsmpp.nml, $(DATA)/fv3jedi/fmsmpp.nml] +- [$(HOMEgfs)/fix/gdas/fv3jedi/fv3files/field_table_gfdl, $(DATA)/fv3jedi/field_table] +- [$(HOMEgfs)/sorc/gdas.cd/parm/io/fv3jedi_fieldmetadata_restart.yaml, $(DATA)/fv3jedi/fv3jedi_fieldmetadata_restart.yaml] diff --git a/parm/gdas/atmanl_inc_vars.yaml b/parm/gdas/atmanl_inc_vars.yaml new file mode 100644 index 0000000000..cb6718ce9f --- /dev/null +++ b/parm/gdas/atmanl_inc_vars.yaml @@ -0,0 +1 @@ +incvars: ['ua', 'va', 't', 'sphum', 'liq_wat', 'ice_wat', 'o3mr'] diff --git a/parm/gdas/land_jedi_fix.yaml b/parm/gdas/land_jedi_fix.yaml new file mode 100644 index 0000000000..3d1ca79f33 --- /dev/null +++ b/parm/gdas/land_jedi_fix.yaml @@ -0,0 +1,7 @@ +mkdir: +- $(DATA)/fv3jedi +copy: +- [$(HOMEgfs)/fix/gdas/fv3jedi/fv3files/akbk$(npz).nc4, $(DATA)/fv3jedi/akbk.nc4] +- [$(HOMEgfs)/fix/gdas/fv3jedi/fv3files/fmsmpp.nml, $(DATA)/fv3jedi/fmsmpp.nml] +- [$(HOMEgfs)/fix/gdas/fv3jedi/fv3files/field_table_gfdl, $(DATA)/fv3jedi/field_table] +- [$(HOMEgfs)/sorc/gdas.cd/parm/io/fv3jedi_fieldmetadata_restart.yaml, $(DATA)/fv3jedi/fv3jedi_fieldmetadata_restart.yaml] diff --git a/parm/parm_fv3diag/diag_table b/parm/parm_fv3diag/diag_table deleted file mode 100644 index 4617eab270..0000000000 --- a/parm/parm_fv3diag/diag_table +++ /dev/null @@ -1,208 +0,0 @@ -"fv3_history", 0, "hours", 1, "hours", "time" -"fv3_history2d", 0, "hours", 1, "hours", "time" - -"gfs_dyn", "ucomp", "ugrd", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "vcomp", "vgrd", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "sphum", "spfh", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "temp", "tmp", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "liq_wat", "clwmr", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "ice_wat", "icmr", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "snowwat", "snmr", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "rainwat", "rwmr", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "graupel", "grle", "fv3_history", "all", .false., "none", 2 -#"gfs_dyn", "ice_nc", "nccice", "fv3_history", "all", .false., "none", 2 -#"gfs_dyn", "rain_nc", "nconrd", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "o3mr", "o3mr", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "cld_amt", "cld_amt", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "delp", "dpres", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "delz", "delz", "fv3_history", "all", .false., "none", 2 -#"gfs_dyn", "pfhy", "preshy", "fv3_history", "all", .false., "none", 2 -#"gfs_dyn", "pfnh", "presnh", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "w", "dzdt", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "ps", "pressfc", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "hs", "hgtsfc", "fv3_history", "all", .false., "none", 2 - -"gfs_phys", "ALBDO_ave", "albdo_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "cnvprcp_ave", "cprat_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "cnvprcpb_ave", "cpratb_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "totprcp_ave", "prate_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "totprcpb_ave", "prateb_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "DLWRF", "dlwrf_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "DLWRFI", "dlwrf", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "ULWRF", "ulwrf_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "ULWRFI", "ulwrf", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "DSWRF", "dswrf_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "DSWRFI", "dswrf", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "USWRF", "uswrf_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "USWRFI", "uswrf", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "DSWRFtoa", "dswrf_avetoa", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "USWRFtoa", "uswrf_avetoa", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "ULWRFtoa", "ulwrf_avetoa", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "gflux_ave", "gflux_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "hpbl", "hpbl", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "lhtfl_ave", "lhtfl_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "shtfl_ave", "shtfl_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "pwat", "pwatclm", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "soilm", "soilm", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "TCDC_aveclm", "tcdc_aveclm", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "TCDC_avebndcl", "tcdc_avebndcl", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "TCDC_avelcl", "tcdc_avelcl", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "TCDC_avemcl", "tcdc_avemcl", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "TCDC_avehcl", "tcdc_avehcl", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "TCDCcnvcl", "tcdccnvcl", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "PRES_avelct", "pres_avelct", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "PRES_avelcb", "pres_avelcb", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "PRES_avemct", "pres_avemct", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "PRES_avemcb", "pres_avemcb", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "PRES_avehct", "pres_avehct", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "PRES_avehcb", "pres_avehcb", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "PREScnvclt", "prescnvclt", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "PREScnvclb", "prescnvclb", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "TEMP_avehct", "tmp_avehct", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "TEMP_avemct", "tmp_avemct", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "TEMP_avelct", "tmp_avelct", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "u-gwd_ave", "u-gwd_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "v-gwd_ave", "v-gwd_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "dusfc", "uflx_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "dvsfc", "vflx_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "acond", "acond", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "cduvb_ave", "cduvb_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "cpofp", "cpofp", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "duvb_ave", "duvb_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "csdlf_ave", "csdlf", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "csusf_ave", "csusf", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "csusf_avetoa", "csusftoa", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "csdsf_ave", "csdsf", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "csulf_ave", "csulf", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "csulf_avetoa", "csulftoa", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "cwork_ave", "cwork_aveclm", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "evbs_ave", "evbs_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "evcw_ave", "evcw_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "fldcp", "fldcp", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "hgt_hyblev1", "hgt_hyblev1", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "spfh_hyblev1", "spfh_hyblev1", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "ugrd_hyblev1", "ugrd_hyblev1", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "vgrd_hyblev1", "vgrd_hyblev1", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "tmp_hyblev1", "tmp_hyblev1", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "gfluxi", "gflux", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "lhtfl", "lhtfl", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "shtfl", "shtfl", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "pevpr", "pevpr", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "pevpr_ave", "pevpr_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "sbsno_ave", "sbsno_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "sfexc", "sfexc", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "snohf", "snohf", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "snowc_ave", "snowc_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "spfhmax2m", "spfhmax_max2m", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "spfhmin2m", "spfhmin_min2m", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "tmpmax2m", "tmax_max2m", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "tmpmin2m", "tmin_min2m", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "ssrun_acc", "ssrun_acc", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "sunsd_acc", "sunsd_acc", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "watr_acc", "watr_acc", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "wilt", "wilt", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "vbdsf_ave", "vbdsf_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "vddsf_ave", "vddsf_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "nbdsf_ave", "nbdsf_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "nddsf_ave", "nddsf_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "trans_ave", "trans_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "psurf", "pressfc", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "u10m", "ugrd10m", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "v10m", "vgrd10m", "fv3_history2d", "all", .false., "none", 2 - -"gfs_sfc", "crain", "crain", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "tprcp", "tprcp", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "rainc", "cnvprcp", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "hgtsfc", "orog", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "weasd", "weasd", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "f10m", "f10m", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "q2m", "spfh2m", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "t2m", "tmp2m", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "tsfc", "tmpsfc", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "vtype", "vtype", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "stype", "sotyp", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "slmsksfc", "land", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "vfracsfc", "veg", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "zorlsfc", "sfcr", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "uustar", "fricv", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "soilt1", "soilt1" "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "soilt2", "soilt2" "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "soilt3", "soilt3" "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "soilt4", "soilt4" "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "soilw1", "soilw1" "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "soilw2", "soilw2" "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "soilw3", "soilw3" "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "soilw4", "soilw4" "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "slc_1", "soill1", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "slc_2", "soill2", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "slc_3", "soill3", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "slc_4", "soill4", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "slope", "sltyp", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "alnsf", "alnsf", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "alnwf", "alnwf", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "alvsf", "alvsf", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "alvwf", "alvwf", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "canopy", "cnwat", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "facsf", "facsf", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "facwf", "facwf", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "ffhh", "ffhh", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "ffmm", "ffmm", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "fice", "icec", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "hice", "icetk", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "snoalb", "snoalb", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "shdmax", "shdmax", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "shdmin", "shdmin", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "snowd", "snod", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "tg3", "tg3", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "tisfc", "tisfc", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "tref", "tref", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "z_c", "zc", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "c_0", "c0", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "c_d", "cd", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "w_0", "w0", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "w_d", "wd", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "xt", "xt", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "xz", "xz", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "dt_cool", "dtcool", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "xs", "xs", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "xu", "xu", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "xv", "xv", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "xtts", "xtts", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "xzts", "xzts", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "d_conv", "dconv", "fv3_history2d", "all", .false., "none", 2 -"gfs_sfc", "qrain", "qrain", "fv3_history2d", "all", .false., "none", 2 - - -#============================================================================================= -# -#====> This file can be used with diag_manager/v2.0a (or higher) <==== -# -# -# FORMATS FOR FILE ENTRIES (not all input values are used) -# ------------------------ -# -#"file_name", output_freq, "output_units", format, "time_units", "long_name", -# -# -#output_freq: > 0 output frequency in "output_units" -# = 0 output frequency every time step -# =-1 output frequency at end of run -# -#output_units = units used for output frequency -# (years, months, days, minutes, hours, seconds) -# -#time_units = units used to label the time axis -# (days, minutes, hours, seconds) -# -# -# FORMAT FOR FIELD ENTRIES (not all input values are used) -# ------------------------ -# -#"module_name", "field_name", "output_name", "file_name" "time_sampling", time_avg, "other_opts", packing -# -#time_avg = .true. or .false. -# -#packing = 1 double precision -# = 2 float -# = 4 packed 16-bit integers -# = 8 packed 1-byte (not tested?) diff --git a/parm/parm_fv3diag/diag_table_history b/parm/parm_fv3diag/diag_table_history deleted file mode 100644 index 9a5766c27c..0000000000 --- a/parm/parm_fv3diag/diag_table_history +++ /dev/null @@ -1,89 +0,0 @@ -#"atmos_static", -1, "hours", 1, "hours", "time" -"fv3_history", 0, "hours", 1, "hours", "time" -"fv3_history2d", 0, "hours", 1, "hours", "time" -# -# static data -# "dynamics", "pk", "pk", "atmos_static", "all", .false., "none", 2 -# "dynamics", "bk", "bk", "atmos_static", "all", .false., "none", 2 -# "dynamics", "hyam", "hyam", "atmos_static", "all", .false., "none", 2 -# "dynamics", "hybm", "hybm", "atmos_static", "all", .false., "none", 2 -# "dynamics", "zsurf", "zsurf", "atmos_static", "all", .false., "none", 2 -# -# history files -"gfs_dyn", "ucomp", "ucomp", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "vcomp", "vcomp", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "sphum", "sphum", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "temp", "temp", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "liq_wat", "liq_wat", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "o3mr", "o3mr", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "delp", "delp", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "pfhy", "hypres", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "pfnh", "nhpres", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "w", "vvel", "fv3_history", "all", .false., "none", 2 -"gfs_dyn", "delz", "delz", "fv3_history", "all", .false., "none", 2 -# -"gfs_sfc" "hgtsfc" "hgtsfc" "fv3_history2d" "all" .false. "none" 2 -"gfs_phys" "psurf" "pressfc" "fv3_history2d" "all" .false. "none" 2 -"gfs_phys" "u10m" "u10m" "fv3_history2d" "all" .false. "none" 2 -"gfs_phys" "v10m" "v10m" "fv3_history2d" "all" .false. "none" 2 -"gfs_phys" "soilm" "soilm" "fv3_history2d" "all" .false. "none" 2 -"gfs_phys" "cnvprcp" "cnvprcp" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "tprcp" "tprcp" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "weasd" "weasd" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "f10m" "f10m" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "q2m" "q2m" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "t2m" "t2m" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "tsfc" "tsfc" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "vtype" "vtype" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "stype" "stype" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "slmsksfc" "slmsk" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "vfracsfc" "vfrac" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "zorlsfc" "zorl" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "uustar" "uustar" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "soilt1" "soilt1" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "soilt2" "soilt2" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "soilt3" "soilt3" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "soilt4" "soilt4" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "soilw1" "soilw1" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "soilw2" "soilw2" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "soilw3" "soilw3" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "soilw4" "soilw4" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "slc_1" "slc_1" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "slc_2" "slc_2" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "slc_3" "slc_3" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "slc_4" "slc_4" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "slope" "slope" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "alnsf" "alnsf" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "alnwf" "alnwf" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "alvsf" "alvsf" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "alvwf" "alvwf" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "canopy" "canopy" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "facsf" "facsf" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "facwf" "facwf" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "ffhh" "ffhh" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "ffmm" "ffmm" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "fice" "fice" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "hice" "hice" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "snoalb" "snoalb" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "shdmax" "shdmax" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "shdmin" "shdmin" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "snowd" "snowd" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "tg3" "tg3" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "tisfc" "tisfc" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "tref" "tref" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "z_c" "z_c" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "c_0" "c_0" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "c_d" "c_d" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "w_0" "w_0" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "w_d" "w_d" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "xt" "xt" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "xz" "xz" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "dt_cool" "dt_cool" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "xs" "xs" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "xu" "xu" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "xv" "xv" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "xtts" "xtts" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "xzts" "xzts" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "d_conv" "d_conv" "fv3_history2d" "all" .false. "none" 2 -"gfs_sfc" "qrain" "qrain" "fv3_history2d" "all" .false. "none" 2 - diff --git a/parm/parm_fv3diag/diag_table_orig b/parm/parm_fv3diag/diag_table_orig deleted file mode 100644 index 0b3000f904..0000000000 --- a/parm/parm_fv3diag/diag_table_orig +++ /dev/null @@ -1,449 +0,0 @@ -#output files -"grid_spec", -1, "months", 1, "days", "time" -"atmos_4xdaily", 6, "hours", 1, "days", "time" -#"atmos_daily", 24, "hours", 1, "days", "time" -"atmos_static", -1, "hours", 1, "hours", "time" -#"atmos_sos", 60, "minutes", 1, "days", "time" -#NOTE: Using multiple gfs output files appears to cause OOM errors. -#"gfs_physics", 0, "hours", 1, "hours", "time" -#"gfs_surface", 0, "hours", 1, "hours", "time" -# files needed for NGGPS evaluation -"nggps3d", 0, "hours", 1, "hours", "time" -"nggps2d", 0, "hours", 1, "hours", "time" -#"atmos_8xdaily_instant", 3, "hours", 1, "days", "time" - -# -#output variables -# -# -#======================= -# ATMOSPHERE DIAGNOSTICS -#======================= -### -# grid_spec -### - "dynamics", "grid_lon", "grid_lon", "grid_spec", "all", .false., "none", 2, - "dynamics", "grid_lat", "grid_lat", "grid_spec", "all", .false., "none", 2, - "dynamics", "grid_lont", "grid_lont", "grid_spec", "all", .false., "none", 2, - "dynamics", "grid_latt", "grid_latt", "grid_spec", "all", .false., "none", 2, - "dynamics", "area", "area", "grid_spec", "all", .false., "none", 2, -### -# 4x daily output -### - "dynamics", "slp", "slp", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "vort850", "vort850", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "vort200", "vort200", "atmos_4xdaily", "all", .false., "none", 2 -# "dynamics", "aam", "aam", "atmos_4xdaily", "all", .false., "none", 2 -### - "dynamics", "us", "us", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "u1000", "u1000", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "u850", "u850", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "u700", "u700", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "u500", "u500", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "u200", "u200", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "u100", "u100", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "u50", "u50", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "u10", "u10", "atmos_4xdaily", "all", .false., "none", 2 -### - "dynamics", "vs", "vs", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "v1000", "v1000", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "v850", "v850", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "v700", "v700", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "v500", "v500", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "v200", "v200", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "v100", "v100", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "v50", "v50", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "v10", "v10", "atmos_4xdaily", "all", .false., "none", 2 -#### - "dynamics", "tm", "tm", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "t1000", "t1000", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "t850", "t850", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "t700", "t700", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "t500", "t500", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "t200", "t200", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "t100", "t100", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "t50", "t50", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "t10", "t10", "atmos_4xdaily", "all", .false., "none", 2 -#### - "dynamics", "z1000", "z1000", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "z850", "z850", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "z700", "z700", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "z500", "z500", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "z200", "z200", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "z100", "z100", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "z50", "z50", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "z10", "z10", "atmos_4xdaily", "all", .false., "none", 2 -#### -#"dynamics", "w1000", "w1000", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "w850", "w850", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "w700", "w700", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "w500", "w500", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "w200", "w200", "atmos_4xdaily", "all", .false., "none", 2 -#"dynamics", "w100", "w100", "atmos_4xdaily", "all", .false., "none", 2 -#"dynamics", "w50", "w50", "atmos_4xdaily", "all", .false., "none", 2 -#"dynamics", "w10", "w10", "atmos_4xdaily", "all", .false., "none", 2 -#### - "dynamics", "q1000", "q1000", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "q850", "q850", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "q700", "q700", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "q500", "q500", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "q200", "q200", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "q100", "q100", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "q50", "q50", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "q10", "q10", "atmos_4xdaily", "all", .false., "none", 2 -#### - "dynamics", "rh1000", "rh1000", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "rh850", "rh850", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "rh700", "rh700", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "rh500", "rh500", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "rh200", "rh200", "atmos_4xdaily", "all", .false., "none", 2 -# "dynamics", "rh100", "rh100", "atmos_4xdaily", "all", .false., "none", 2 -# "dynamics", "rh50", "rh50", "atmos_4xdaily", "all", .false., "none", 2 -# "dynamics", "rh10", "rh10", "atmos_4xdaily", "all", .false., "none", 2 -#### - "dynamics", "omg1000", "omg1000", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "omg850", "omg850", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "omg700", "omg700", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "omg500", "omg500", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "omg200", "omg200", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "omg100", "omg100", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "omg50", "omg50", "atmos_4xdaily", "all", .false., "none", 2 - "dynamics", "omg10", "omg10", "atmos_4xdaily", "all", .false., "none", 2 -### -# Daily averages: -### -#"dynamics", "u850", "u850", "atmos_daily", "all", .true., "none", 2 -#"dynamics", "v850", "v850", "atmos_daily", "all", .true., "none", 2 -#"dynamics", "u200", "u200", "atmos_daily", "all", .true., "none", 2 -#"dynamics", "v200", "v200", "atmos_daily", "all", .true., "none", 2 -#"dynamics", "t200", "t200", "atmos_daily", "all", .true., "none", 2 -#"dynamics", "t100", "t100", "atmos_daily", "all", .true., "none", 2 -#"dynamics", "slp", "slp", "atmos_daily", "all", .true., "none", 2 -### -# gfs static data -### - "dynamics", "pk", "pk", "atmos_static", "all", .false., "none", 2 - "dynamics", "bk", "bk", "atmos_static", "all", .false., "none", 2 - "dynamics", "hyam", "hyam", "atmos_static", "all", .false., "none", 2 - "dynamics", "hybm", "hybm", "atmos_static", "all", .false., "none", 2 - "dynamics", "zsurf", "zsurf", "atmos_static", "all", .false., "none", 2 -############################################################################################# -### -# FV3 variabls needed for NGGPS evaluation -### - "gfs_dyn", "ucomp", "ucomp", "nggps3d", "all", .false., "none", 2 - "gfs_dyn", "vcomp", "vcomp", "nggps3d", "all", .false., "none", 2 - "gfs_dyn", "temp", "temp", "nggps3d", "all", .false., "none", 2 - "gfs_dyn", "delp", "delp", "nggps3d", "all", .false., "none", 2 - "gfs_dyn", "sphum", "sphum", "nggps3d", "all", .false., "none", 2 - "gfs_dyn", "o3mr", "o3mr", "nggps3d", "all", .false., "none", 2 - "gfs_dyn", "liq_wat", "clwmr", "nggps3d", "all", .false., "none", 2 - "gfs_dyn", "pfhy", "hypres", "nggps3d", "all", .false., "none", 2 - "gfs_dyn", "pfnh", "nhpres", "nggps3d", "all", .false., "none", 2 - "gfs_dyn", "w", "w", "nggps3d", "all", .false., "none", 2 - "gfs_dyn", "delz", "delz", "nggps3d", "all", .false., "none", 2 -### -# GFS variabls needed for NGGPS evaluation -### - "gfs_phys", "ALBDO_ave" "ALBDOsfc" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "cnvprcp_ave" "CPRATsfc" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "totprcp_ave" "PRATEsfc" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "DLWRF" "DLWRFsfc" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "ULWRF" "ULWRFsfc" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "DSWRF" "DSWRFsfc" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "USWRF" "USWRFsfc" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "DSWRFtoa" "DSWRFtoa" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "USWRFtoa" "USWRFtoa" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "ULWRFtoa" "ULWRFtoa" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "gflux_ave" "GFLUXsfc" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "HGTsfc" "HGTsfc" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "hpbl" "HPBLsfc" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "fice" "ICECsfc" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "SLMSKsfc" "SLMSKsfc" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "lhtfl_ave" "LHTFLsfc" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "shtfl_ave" "SHTFLsfc" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "psurf" "PRESsfc" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "pwat" "PWATclm" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "soilm" "SOILM" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "SOILW1" "SOILW1" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "SOILW2" "SOILW2" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "SOILW3" "SOILW3" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "SOILW4" "SOILW4" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "q2m" "SPFH2m" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "TCDCclm" "TCDCclm" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "TCDChcl" "TCDChcl" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "TCDClcl" "TCDClcl" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "TCDCmcl" "TCDCmcl" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "SOILT1" "SOILT1" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "SOILT2" "SOILT2" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "SOILT3" "SOILT3" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "SOILT4" "SOILT4" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "t2m" "TMP2m" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "tsfc" "TMPsfc" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "u-gwd_ave" "UGWDsfc" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "v-gwd_ave" "VGWDsfc" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "dusfc" "UFLXsfc" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "dvsfc" "VFLXsfc" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "u10m" "UGRD10m" "nggps2d", "all", .false., "none", 2 - "gfs_phys", "v10m" "VGRD10m" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "weasd" "WEASDsfc" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "snowd" "SNODsfc" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "ZORLsfc" "ZORLsfc" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "VFRACsfc" "VFRACsfc" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "f10m" "F10Msfc" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "vtype" "VTYPEsfc" "nggps2d", "all", .false., "none", 2 - "gfs_sfc", "stype" "STYPEsfc" "nggps2d", "all", .false., "none", 2 - -############################################################################################# -### -# gfs physics data -### -#"gfs_phys", "fluxr_01" "fluxr_01" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_02" "fluxr_02" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_03" "fluxr_03" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_04" "fluxr_04" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_05" "fluxr_05" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_06" "fluxr_06" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_07" "fluxr_07" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_08" "fluxr_08" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_09" "fluxr_09" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_10" "fluxr_10" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_11" "fluxr_11" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_12" "fluxr_12" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_13" "fluxr_13" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_14" "fluxr_14" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_15" "fluxr_15" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_16" "fluxr_16" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_17" "fluxr_17" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_18" "fluxr_18" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_19" "fluxr_19" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_20" "fluxr_20" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_21" "fluxr_21" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_22" "fluxr_22" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_23" "fluxr_23" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_24" "fluxr_24" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_25" "fluxr_25" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_26" "fluxr_26" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_27" "fluxr_27" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_28" "fluxr_28" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_29" "fluxr_29" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_30" "fluxr_30" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_31" "fluxr_31" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_32" "fluxr_32" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_33" "fluxr_33" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_34" "fluxr_34" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_35" "fluxr_35" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_36" "fluxr_36" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_37" "fluxr_37" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_38" "fluxr_38" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "fluxr_39" "fluxr_39" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "dswcmp_1" "dswcmp_1" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "dswcmp_2" "dswcmp_2" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "dswcmp_3" "dswcmp_3" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "dswcmp_4" "dswcmp_4" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "uswcmp_1" "uswcmp_1" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "uswcmp_2" "uswcmp_2" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "uswcmp_3" "uswcmp_3" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "uswcmp_4" "uswcmp_4" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "sw_upfxc" "sw_upfxc" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "sw_dnfxc" "sw_dnfxc" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "sw_upfx0" "sw_upfx0" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "lw_upfxc" "lw_upfxc" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "lw_upfx0" "lw_upfx0" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "srunoff" "srunoff" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "evbsa" "evbsa" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "evcwa" "evcwa" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "snohfa" "snohfa" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "transa" "transa" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "sbsnoa" "sbsnoa" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "snowca" "snowca" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "soilm" "soilm" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "tmpmin" "tmpmin" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "tmpmax" "tmpmax" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "dusfc" "dusfc" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "dvsfc" "dvsfc" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "dtsfc" "dtsfc" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "dqsfc" "dqsfc" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "totprcp" "totprcp" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "gflux" "gflux" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "dlwsfc" "dlwsfc" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "ulwsfc" "ulwsfc" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "suntim" "suntim" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "runoff" "runoff" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "ep" "ep" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "cldwrk" "cldwrk" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "dugwd" "dugwd" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "dvgwd" "dvgwd" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "psmean" "psmean" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "cnvprcp" "cnvprcp" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "spfhmin" "spfhmin" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "spfhmax" "spfhmax" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "rain" "rain" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "rainc" "rainc" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "u10m" "u10m" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "v10m" "v10m" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "zlvl" "zlvl" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "psurf" "psurf" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "hpbl" "hpbl" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "pwat" "pwat" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "t1" "t1" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "q1" "q1" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "u1" "u1" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "v1" "v1" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "chh" "chh" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "cmm" "cmm" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "dlwsfci" "dlwsfci" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "ulwsfci" "ulwsfci" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "dswsfci" "dswsfci" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "uswsfci" "uswsfci" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "dusfci" "dusfci" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "dvsfci" "dvsfci" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "dtsfci" "dtsfci" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "dqsfci" "dqsfci" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "gfluxi" "gfluxi" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "epi" "epi" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "smcwlt2" "smcwlt2" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "smcref2" "smcref2" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "wet1" "wet1" "gfs_physics", "all", .false., "none", 2 -#"gfs_phys", "sr" "sr" "gfs_physics", "all", .false., "none", 2 -### -# gfs surface data -### -#"gfs_sfc", "alnsf" "alnsf" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "alnwf" "alnwf" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "alvsf" "alvsf" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "alvwf" "alvwf" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "canopy" "canopy" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "f10m" "f10m" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "facsf" "facsf" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "facwf" "facwf" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "ffhh" "ffhh" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "ffmm" "ffmm" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "uustar" "uustar" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "slope" "slope" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "fice" "fice" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "hice" "hice" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "snoalb" "snoalb" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "shdmax" "shdmax" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "shdmin" "shdmin" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "snowd" "snowd" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "stype" "stype" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "q2m" "q2m" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "t2m" "t2m" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "tsfc" "tsfc" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "tg3" "tg3" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "tisfc" "tisfc" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "tprcp" "tprcp" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "vtype" "vtype" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "weasd" "weasd" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "slc_1" "slc_1" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "slc_2" "slc_2" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "slc_3" "slc_3" "gfs_surface", "all", .false., "none", 2 -#"gfs_sfc", "slc_4" "slc_4" "gfs_surface", "all", .false., "none", 2 -### -#"gfs_phys", "dt3dt_1" "dt3dt_1" "gfs_physics1", "all", .false., "none", 2 -#"gfs_phys", "dt3dt_2" "dt3dt_2" "gfs_physics1", "all", .false., "none", 2 -#"gfs_phys", "dt3dt_3" "dt3dt_3" "gfs_physics1", "all", .false., "none", 2 -#"gfs_phys", "dt3dt_4" "dt3dt_4" "gfs_physics1", "all", .false., "none", 2 -#"gfs_phys", "dt3dt_5" "dt3dt_5" "gfs_physics1", "all", .false., "none", 2 -#"gfs_phys", "dt3dt_6" "dt3dt_6" "gfs_physics1", "all", .false., "none", 2 -### -#"gfs_phys", "dq3dt_1" "dq3dt_1" "gfs_physics2", "all", .false., "none", 2 -#"gfs_phys", "dq3dt_2" "dq3dt_2" "gfs_physics2", "all", .false., "none", 2 -#"gfs_phys", "dq3dt_3" "dq3dt_3" "gfs_physics2", "all", .false., "none", 2 -#"gfs_phys", "dq3dt_4" "dq3dt_4" "gfs_physics2", "all", .false., "none", 2 -#"gfs_phys", "dq3dt_5" "dq3dt_5" "gfs_physics2", "all", .false., "none", 2 -#"gfs_phys", "dq3dt_6" "dq3dt_6" "gfs_physics2", "all", .false., "none", 2 -#"gfs_phys", "dq3dt_7" "dq3dt_7" "gfs_physics2", "all", .false., "none", 2 -#"gfs_phys", "dq3dt_8" "dq3dt_8" "gfs_physics2", "all", .false., "none", 2 -#"gfs_phys", "dq3dt_9" "dq3dt_9" "gfs_physics2", "all", .false., "none", 2 -### -#"gfs_phys", "du3dt_1" "du3dt_1" "gfs_physics3", "all", .false., "none", 2 -#"gfs_phys", "du3dt_2" "du3dt_2" "gfs_physics3", "all", .false., "none", 2 -#"gfs_phys", "du3dt_3" "du3dt_3" "gfs_physics3", "all", .false., "none", 2 -#"gfs_phys", "du3dt_4" "du3dt_4" "gfs_physics3", "all", .false., "none", 2 -### -#"gfs_phys", "dv3dt_1" "dv3dt_1" "gfs_physics4", "all", .false., "none", 2 -#"gfs_phys", "dv3dt_2" "dv3dt_2" "gfs_physics4", "all", .false., "none", 2 -#"gfs_phys", "dv3dt_3" "dv3dt_3" "gfs_physics4", "all", .false., "none", 2 -#"gfs_phys", "dv3dt_4" "dv3dt_4" "gfs_physics4", "all", .false., "none", 2 -### -#"gfs_phys", "dtemp_dt" "dtemp_dt" "gfs_physics5", "all", .false., "none", 2 -#"gfs_phys", "du_dt" "du_dt" "gfs_physics5", "all", .false., "none", 2 -#"gfs_phys", "dv_dt" "dv_dt" "gfs_physics5", "all", .false., "none", 2 -#"gfs_phys", "dsphum_dt" "dsphum_dt" "gfs_physics5", "all", .false., "none", 2 -### -#"gfs_phys", "dclwmr_dt" "dclwmr_dt" "gfs_physics6", "all", .false., "none", 2 -#"gfs_phys", "do3mr_dt" "do3mr_dt" "gfs_physics6", "all", .false., "none", 2 -#"gfs_phys", "dqdt_v" "dqdt_v" "gfs_physics6", "all", .false., "none", 2 -#### -## SOS high-frequency -#### -#"dynamics", "tq", "tq", "atmos_sos", "all", .false., "none", 2 -#"dynamics", "lw", "lw", "atmos_sos", "all", .false., "none", 2 -#"dynamics", "tb", "tb", "atmos_sos", "all", .false., "none", 2 -#"dynamics", "ps", "ps", "atmos_sos", "all", .false., "none", 2 -#"dynamics", "us", "us", "atmos_sos", "all", .false., "none", 2 -#"dynamics", "vs", "vs", "atmos_sos", "all", .false., "none", 2 -#"dynamics", "slp", "slp", "atmos_sos", "all", .false., "none", 2 -#"dynamics", "vort850", "vort850", "atmos_sos", "all", .false., "none", 2 -#"dynamics", "w850", "w850", "atmos_sos", "all", .false., "none", 2 -#### -## Monthly averages: -#### -# "dynamics", "zsurf", "zsurf", "atmos_month", "all", .false., "none", 2 -# "dynamics", "bk", "bk", "atmos_month", "all", .false., "none", 2 -# "dynamics", "pk", "pk", "atmos_month", "all", .false., "none", 2 -# "dynamics", "ps", "ps", "atmos_month", "all", .true., "none", 2 -# "dynamics", "slp", "slp", "atmos_month", "all", .true., "none", 2 -# "dynamics", "tm", "tm", "atmos_month", "all", .true., "none", 2 -# "dynamics", "cld_amt", "cld_amt", "atmos_month", "all", .true., "none", 2 -# "dynamics", "liq_wat", "liq_wat", "atmos_month", "all", .true., "none", 2 -# "dynamics", "ice_wat", "ice_wat", "atmos_month", "all", .true., "none", 2 -# "dynamics", "snowwat", "snowwat", "atmos_month", "all", .true., "none", 2 -# "dynamics", "rainwat", "rainwat", "atmos_month", "all", .true., "none", 2 -# "dynamics", "graupel", "graupel", "atmos_month", "all", .true., "none", 2 -# "dynamics", "iw", "iw", "atmos_month", "all", .true., "none", 2 -# "dynamics", "lw", "lw", "atmos_month", "all", .true., "none", 2 -# "dynamics", "aam", "aam", "atmos_month", "all", .true., "none", 2 -# "dynamics", "amdt", "amdt", "atmos_month", "all", .true., "none", 2 -# "dynamics", "z500", "z500", "atmos_month", "all", .true., "none", 2 -# "dynamics", "temp", "temp", "atmos_month", "all", .true., "none", 2 -# "dynamics", "ucomp", "ucomp", "atmos_month", "all", .true., "none", 2 -# "dynamics", "vcomp", "vcomp", "atmos_month", "all", .true., "none", 2 -# "dynamics", "sphum", "sphum", "atmos_month", "all", .true., "none", 2 -# "dynamics", "omega", "omega", "atmos_month", "all", .true., "none", 2 -# -#============================================================================================= -# -#====> This file can be used with diag_manager/v2.0a (or higher) <==== -# -# -# FORMATS FOR FILE ENTRIES (not all input values are used) -# ------------------------ -# -#"file_name", output_freq, "output_units", format, "time_units", "long_name", -# -# -#output_freq: > 0 output frequency in "output_units" -# = 0 output frequency every time step -# =-1 output frequency at end of run -# -#output_units = units used for output frequency -# (years, months, days, minutes, hours, seconds) -# -#time_units = units used to label the time axis -# (days, minutes, hours, seconds) -# -# -# FORMAT FOR FIELD ENTRIES (not all input values are used) -# ------------------------ -# -#"module_name", "field_name", "output_name", "file_name" "time_sampling", time_avg, "other_opts", packing -# -#time_avg = .true. or .false. -# -#packing = 1 double precision -# = 2 float -# = 4 packed 16-bit integers -# = 8 packed 1-byte (not tested?) diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f000 b/parm/parm_wave/grib2_gfswave.ak_10m.f000 deleted file mode 100755 index 58a0761da8..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f000 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEA88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 0 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREA88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 0 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEA88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 0 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEA88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 0 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEA88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 0 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEA88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 0 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEA88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 0 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEA88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 0 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEA88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 0 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEA88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 0 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEA88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 0 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEA88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 0 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEA88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 0 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEA88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 0 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEA88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 0 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEA88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 0 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f003 b/parm/parm_wave/grib2_gfswave.ak_10m.f003 deleted file mode 100755 index 169cb03bc8..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f003 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEB88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 3 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREB88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 3 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEB88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 3 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEB88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 3 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEB88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 3 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEB88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 3 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEB88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 3 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEB88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 3 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEB88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 3 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEB88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 3 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEB88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 3 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEB88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 3 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEB88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 3 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEB88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 3 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEB88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 3 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEB88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 3 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f006 b/parm/parm_wave/grib2_gfswave.ak_10m.f006 deleted file mode 100755 index 647be729f5..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f006 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEC88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 6 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREC88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 6 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEC88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 6 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEC88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 6 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEC88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 6 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEC88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 6 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEC88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 6 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEC88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 6 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEC88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 6 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEC88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 6 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEC88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 6 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEC88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 6 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEC88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 6 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEC88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 6 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEC88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 6 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEC88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 6 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f009 b/parm/parm_wave/grib2_gfswave.ak_10m.f009 deleted file mode 100755 index 1422aa007c..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f009 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQED88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 9 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='ERED88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 9 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAED88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 9 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBED88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 9 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECED88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 9 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJED88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 9 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKED88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 9 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELED88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 9 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOED88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 9 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOED88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 9 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMED88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 9 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYED88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 9 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYED88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 9 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENED88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 9 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPED88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 9 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPED88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 9 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f012 b/parm/parm_wave/grib2_gfswave.ak_10m.f012 deleted file mode 100755 index f136454b16..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f012 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEE88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 12 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREE88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 12 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEE88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 12 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEE88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 12 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEE88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 12 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEE88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 12 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEE88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 12 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEE88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 12 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEE88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 12 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEE88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 12 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEE88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 12 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEE88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 12 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEE88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 12 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEE88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 12 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEE88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 12 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEE88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 12 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f015 b/parm/parm_wave/grib2_gfswave.ak_10m.f015 deleted file mode 100755 index 9a3eb668cc..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f015 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEF88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 15 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREF88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 15 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEF88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 15 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEF88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 15 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEF88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 15 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEF88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 15 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEF88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 15 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEF88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 15 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEF88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 15 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEF88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 15 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEF88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 15 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEF88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 15 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEF88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 15 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEF88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 15 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEF88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 15 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEF88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 15 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f018 b/parm/parm_wave/grib2_gfswave.ak_10m.f018 deleted file mode 100755 index 21bb05a89b..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f018 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEG88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 18 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREG88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 18 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEG88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 18 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEG88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 18 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEG88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 18 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEG88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 18 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEG88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 18 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEG88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 18 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEG88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 18 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEG88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 18 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEG88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 18 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEG88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 18 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEG88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 18 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEG88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 18 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEG88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 18 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEG88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 18 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f021 b/parm/parm_wave/grib2_gfswave.ak_10m.f021 deleted file mode 100755 index 74866eccf4..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f021 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEH88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 21 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREH88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 21 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEH88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 21 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEH88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 21 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEH88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 21 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEH88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 21 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEH88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 21 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEH88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 21 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEH88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 21 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEH88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 21 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEH88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 21 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEH88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 21 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEH88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 21 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEH88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 21 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEH88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 21 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEH88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 21 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f024 b/parm/parm_wave/grib2_gfswave.ak_10m.f024 deleted file mode 100755 index 40e695673b..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f024 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEI88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 24 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREI88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 24 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEI88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 24 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEI88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 24 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEI88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 24 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEI88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 24 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEI88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 24 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEI88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 24 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEI88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 24 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEI88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 24 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEI88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 24 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEI88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 24 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEI88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 24 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEI88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 24 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEI88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 24 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEI88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 24 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f027 b/parm/parm_wave/grib2_gfswave.ak_10m.f027 deleted file mode 100755 index 7513d7a380..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f027 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEI88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 27 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREI88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 27 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEI88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 27 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEI88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 27 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEI88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 27 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEI88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 27 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEI88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 27 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEI88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 27 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEI88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 27 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEI88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 27 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEI88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 27 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEI88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 27 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEI88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 27 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEI88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 27 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEI88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 27 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEI88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 27 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f030 b/parm/parm_wave/grib2_gfswave.ak_10m.f030 deleted file mode 100755 index e7ab8bbe20..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f030 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEJ88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 30 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREJ88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 30 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEJ88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 30 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEJ88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 30 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEJ88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 30 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEJ88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 30 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEJ88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 30 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEJ88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 30 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEJ88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 30 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEJ88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 30 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEJ88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 30 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEJ88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 30 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEJ88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 30 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEJ88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 30 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEJ88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 30 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEJ88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 30 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f033 b/parm/parm_wave/grib2_gfswave.ak_10m.f033 deleted file mode 100755 index f3a77449c7..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f033 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEJ88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 33 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREJ88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 33 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEJ88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 33 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEJ88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 33 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEJ88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 33 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEJ88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 33 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEJ88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 33 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEJ88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 33 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEJ88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 33 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEJ88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 33 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEJ88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 33 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEJ88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 33 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEJ88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 33 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEJ88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 33 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEJ88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 33 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEJ88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 33 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f036 b/parm/parm_wave/grib2_gfswave.ak_10m.f036 deleted file mode 100755 index 7771f90e2b..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f036 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEK88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 36 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREK88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 36 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEK88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 36 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEK88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 36 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEK88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 36 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEK88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 36 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEK88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 36 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEK88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 36 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEK88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 36 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEK88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 36 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEK88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 36 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEK88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 36 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEK88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 36 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEK88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 36 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEK88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 36 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEK88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 36 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f039 b/parm/parm_wave/grib2_gfswave.ak_10m.f039 deleted file mode 100755 index dc12cebd1e..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f039 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEK88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 39 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREK88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 39 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEK88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 39 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEK88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 39 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEK88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 39 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEK88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 39 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEK88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 39 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEK88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 39 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEK88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 39 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEK88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 39 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEK88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 39 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEK88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 39 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEK88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 39 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEK88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 39 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEK88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 39 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEK88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 39 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f042 b/parm/parm_wave/grib2_gfswave.ak_10m.f042 deleted file mode 100755 index f29fe5632e..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f042 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEL88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 42 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREL88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 42 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEL88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 42 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEL88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 42 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEL88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 42 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEL88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 42 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEL88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 42 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEL88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 42 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEL88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 42 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEL88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 42 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEL88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 42 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEL88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 42 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEL88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 42 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEL88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 42 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEL88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 42 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEL88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 42 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f045 b/parm/parm_wave/grib2_gfswave.ak_10m.f045 deleted file mode 100755 index 6753ec2626..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f045 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEL88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 45 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREL88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 45 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEL88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 45 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEL88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 45 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEL88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 45 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEL88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 45 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEL88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 45 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEL88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 45 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEL88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 45 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEL88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 45 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEL88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 45 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEL88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 45 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEL88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 45 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEL88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 45 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEL88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 45 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEL88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 45 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f048 b/parm/parm_wave/grib2_gfswave.ak_10m.f048 deleted file mode 100755 index e41ebbafcc..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f048 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEM88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 48 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREM88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 48 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEM88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 48 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEM88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 48 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEM88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 48 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEM88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 48 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEM88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 48 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEM88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 48 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEM88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 48 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEM88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 48 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEM88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 48 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEM88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 48 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEM88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 48 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEM88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 48 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEM88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 48 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEM88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 48 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f051 b/parm/parm_wave/grib2_gfswave.ak_10m.f051 deleted file mode 100755 index 4da8e535f3..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f051 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEM88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 51 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREM88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 51 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEM88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 51 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEM88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 51 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEM88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 51 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEM88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 51 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEM88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 51 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEM88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 51 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEM88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 51 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEM88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 51 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEM88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 51 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEM88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 51 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEM88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 51 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEM88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 51 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEM88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 51 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEM88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 51 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f054 b/parm/parm_wave/grib2_gfswave.ak_10m.f054 deleted file mode 100755 index 1ba15e5afc..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f054 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEX88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 54 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREX88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 54 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEX88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 54 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEX88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 54 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEX88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 54 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEX88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 54 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEX88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 54 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEX88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 54 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEX88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 54 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEX88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 54 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEX88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 54 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEX88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 54 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEX88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 54 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEX88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 54 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEX88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 54 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEX88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 54 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f057 b/parm/parm_wave/grib2_gfswave.ak_10m.f057 deleted file mode 100755 index e8f184238f..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f057 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEX88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 57 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREX88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 57 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEX88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 57 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEX88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 57 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEX88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 57 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEX88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 57 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEX88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 57 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEX88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 57 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEX88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 57 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEX88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 57 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEX88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 57 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEX88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 57 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEX88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 57 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEX88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 57 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEX88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 57 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEX88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 57 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f060 b/parm/parm_wave/grib2_gfswave.ak_10m.f060 deleted file mode 100755 index 9ade048128..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f060 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEN88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 60 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREN88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 60 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEN88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 60 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEN88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 60 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEN88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 60 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEN88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 60 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEN88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 60 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEN88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 60 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEN88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 60 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEN88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 60 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEN88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 60 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEN88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 60 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEN88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 60 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEN88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 60 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEN88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 60 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEN88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 60 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f063 b/parm/parm_wave/grib2_gfswave.ak_10m.f063 deleted file mode 100755 index e998aa3158..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f063 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEN88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 63 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREN88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 63 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEN88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 63 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEN88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 63 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEN88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 63 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEN88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 63 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEN88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 63 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEN88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 63 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEN88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 63 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEN88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 63 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEN88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 63 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEN88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 63 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEN88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 63 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEN88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 63 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEN88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 63 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEN88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 63 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f066 b/parm/parm_wave/grib2_gfswave.ak_10m.f066 deleted file mode 100755 index 8bbc763f44..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f066 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEY88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 66 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREY88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 66 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEY88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 66 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEY88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 66 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEY88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 66 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEY88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 66 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEY88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 66 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEY88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 66 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEY88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 66 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEY88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 66 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEY88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 66 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEY88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 66 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEY88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 66 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEY88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 66 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEY88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 66 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEY88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 66 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f069 b/parm/parm_wave/grib2_gfswave.ak_10m.f069 deleted file mode 100755 index d27636db2e..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f069 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEY88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 69 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREY88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 69 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEY88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 69 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEY88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 69 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEY88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 69 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEY88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 69 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEY88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 69 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEY88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 69 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEY88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 69 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEY88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 69 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEY88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 69 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEY88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 69 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEY88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 69 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEY88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 69 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEY88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 69 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEY88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 69 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f072 b/parm/parm_wave/grib2_gfswave.ak_10m.f072 deleted file mode 100755 index b59e8b964a..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f072 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEO88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 72 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREO88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 72 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEO88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 72 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEO88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 72 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEO88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 72 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEO88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 72 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEO88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 72 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEO88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 72 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEO88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 72 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEO88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 72 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEO88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 72 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEO88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 72 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEO88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 72 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEO88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 72 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEO88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 72 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEO88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 72 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f078 b/parm/parm_wave/grib2_gfswave.ak_10m.f078 deleted file mode 100755 index f66e7be273..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f078 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEO88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 78 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREO88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 78 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEO88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 78 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEO88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 78 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEO88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 78 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEO88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 78 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEO88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 78 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEO88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 78 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEO88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 78 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEO88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 78 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEO88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 78 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEO88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 78 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEO88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 78 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEO88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 78 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEO88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 78 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEO88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 78 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f084 b/parm/parm_wave/grib2_gfswave.ak_10m.f084 deleted file mode 100755 index 8a6c05921c..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f084 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEP88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 84 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREP88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 84 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEP88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 84 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEP88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 84 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEP88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 84 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEP88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 84 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEP88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 84 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEP88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 84 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEP88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 84 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEP88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 84 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEP88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 84 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEP88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 84 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEP88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 84 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEP88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 84 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEP88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 84 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEP88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 84 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f090 b/parm/parm_wave/grib2_gfswave.ak_10m.f090 deleted file mode 100755 index 604d085c5f..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f090 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEP88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 90 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREP88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 90 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEP88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 90 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEP88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 90 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEP88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 90 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEP88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 90 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEP88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 90 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEP88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 90 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEP88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 90 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEP88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 90 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEP88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 90 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEP88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 90 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEP88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 90 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEP88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 90 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEP88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 90 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEP88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 90 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f096 b/parm/parm_wave/grib2_gfswave.ak_10m.f096 deleted file mode 100755 index aeabf0c9c6..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f096 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEQ88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 96 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREQ88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 96 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEQ88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 96 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEQ88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 96 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEQ88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 96 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEQ88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 96 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEQ88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 96 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEQ88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 96 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEQ88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 96 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEQ88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 96 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEQ88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 96 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEQ88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 96 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEQ88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 96 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEQ88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 96 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEQ88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 96 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEQ88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 96 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f102 b/parm/parm_wave/grib2_gfswave.ak_10m.f102 deleted file mode 100755 index 104d742a6d..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f102 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEQ88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 102 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREQ88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 102 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEQ88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 102 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEQ88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 102 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEQ88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 102 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEQ88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 102 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEQ88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 102 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEQ88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 102 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEQ88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 102 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEQ88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 102 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEQ88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 102 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEQ88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 102 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEQ88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 102 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEQ88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 102 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEQ88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 102 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEQ88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 102 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f108 b/parm/parm_wave/grib2_gfswave.ak_10m.f108 deleted file mode 100755 index 7cdb8f6e04..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f108 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEZ88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 108 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREZ88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 108 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEZ88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 108 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEZ88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 108 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEZ88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 108 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEZ88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 108 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEZ88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 108 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEZ88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 108 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEZ88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 108 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEZ88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 108 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEZ88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 108 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEZ88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 108 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEZ88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 108 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEZ88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 108 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEZ88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 108 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEZ88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 108 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f114 b/parm/parm_wave/grib2_gfswave.ak_10m.f114 deleted file mode 100755 index be156aa4e8..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f114 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEZ88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 114 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREZ88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 114 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEZ88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 114 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEZ88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 114 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEZ88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 114 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEZ88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 114 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEZ88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 114 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEZ88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 114 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEZ88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 114 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEZ88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 114 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEZ88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 114 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEZ88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 114 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEZ88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 114 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEZ88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 114 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEZ88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 114 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEZ88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 114 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f120 b/parm/parm_wave/grib2_gfswave.ak_10m.f120 deleted file mode 100755 index 348eb7622c..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f120 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQER88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 120 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='ERER88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 120 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAER88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 120 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBER88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 120 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECER88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 120 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJER88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 120 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKER88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 120 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELER88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 120 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOER88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 120 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOER88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 120 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMER88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 120 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYER88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 120 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYER88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 120 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENER88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 120 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPER88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 120 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPER88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 120 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f126 b/parm/parm_wave/grib2_gfswave.ak_10m.f126 deleted file mode 100755 index 1825eb662a..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f126 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQER88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 126 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='ERER88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 126 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAER88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 126 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBER88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 126 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECER88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 126 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJER88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 126 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKER88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 126 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELER88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 126 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOER88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 126 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOER88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 126 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMER88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 126 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYER88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 126 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYER88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 126 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENER88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 126 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPER88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 126 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPER88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 126 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f132 b/parm/parm_wave/grib2_gfswave.ak_10m.f132 deleted file mode 100755 index 9ad0092d00..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f132 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQES88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 132 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='ERES88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 132 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAES88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 132 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBES88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 132 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECES88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 132 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJES88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 132 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKES88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 132 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELES88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 132 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOES88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 132 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOES88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 132 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMES88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 132 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYES88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 132 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYES88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 132 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENES88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 132 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPES88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 132 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPES88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 132 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f138 b/parm/parm_wave/grib2_gfswave.ak_10m.f138 deleted file mode 100755 index 1cec71823d..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f138 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQES88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 138 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='ERES88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 138 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAES88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 138 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBES88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 138 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECES88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 138 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJES88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 138 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKES88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 138 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELES88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 138 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOES88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 138 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOES88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 138 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMES88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 138 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYES88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 138 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYES88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 138 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENES88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 138 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPES88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 138 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPES88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 138 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f144 b/parm/parm_wave/grib2_gfswave.ak_10m.f144 deleted file mode 100755 index 27ec7f7777..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f144 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQET88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 144 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='ERET88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 144 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAET88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 144 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBET88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 144 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECET88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 144 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJET88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 144 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKET88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 144 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELET88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 144 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOET88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 144 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOET88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 144 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMET88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 144 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYET88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 144 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYET88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 144 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENET88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 144 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPET88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 144 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPET88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 144 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f150 b/parm/parm_wave/grib2_gfswave.ak_10m.f150 deleted file mode 100755 index 3160e051bc..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f150 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQET88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 150 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='ERET88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 150 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAET88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 150 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBET88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 150 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECET88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 150 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJET88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 150 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKET88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 150 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELET88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 150 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOET88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 150 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOET88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 150 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMET88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 150 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYET88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 150 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYET88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 150 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENET88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 150 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPET88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 150 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPET88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 150 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f156 b/parm/parm_wave/grib2_gfswave.ak_10m.f156 deleted file mode 100755 index 80b2710d57..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f156 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEU88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 156 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREU88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 156 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEU88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 156 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEU88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 156 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEU88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 156 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEU88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 156 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEU88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 156 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEU88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 156 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEU88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 156 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEU88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 156 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEU88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 156 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEU88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 156 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEU88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 156 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEU88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 156 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEU88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 156 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEU88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 156 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f162 b/parm/parm_wave/grib2_gfswave.ak_10m.f162 deleted file mode 100755 index 246c0f601c..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f162 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEU88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 162 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREU88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 162 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEU88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 162 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEU88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 162 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEU88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 162 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEU88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 162 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEU88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 162 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEU88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 162 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEU88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 162 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEU88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 162 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEU88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 162 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEU88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 162 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEU88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 162 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEU88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 162 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEU88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 162 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEU88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 162 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f168 b/parm/parm_wave/grib2_gfswave.ak_10m.f168 deleted file mode 100755 index 2f17cf47ca..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f168 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEV88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 168 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREV88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 168 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEV88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 168 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEV88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 168 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEV88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 168 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEV88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 168 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEV88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 168 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEV88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 168 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEV88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 168 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEV88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 168 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEV88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 168 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEV88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 168 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEV88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 168 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEV88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 168 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEV88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 168 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEV88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 168 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f174 b/parm/parm_wave/grib2_gfswave.ak_10m.f174 deleted file mode 100755 index c1aa39a9e0..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f174 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEV88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 174 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREV88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 174 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEV88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 174 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEV88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 174 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEV88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 174 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEV88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 174 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEV88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 174 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEV88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 174 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEV88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 174 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEV88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 174 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEV88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 174 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEV88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 174 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEV88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 174 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEV88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 174 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEV88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 174 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEV88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 174 241 0 2 255 0 0 / diff --git a/parm/parm_wave/grib2_gfswave.ak_10m.f180 b/parm/parm_wave/grib2_gfswave.ak_10m.f180 deleted file mode 100755 index 9f65151219..0000000000 --- a/parm/parm_wave/grib2_gfswave.ak_10m.f180 +++ /dev/null @@ -1,16 +0,0 @@ -&GRIBIDS DESC=' WIND Surface ',WMOHEAD='EQEW88 KWBJ',PDTN= 0 ,PDT= 2 1 2 0 11 0 0 1 180 1 0 1 255 0 0 / -&GRIBIDS DESC=' WDIR Surface ',WMOHEAD='EREW88 KWBJ',PDTN= 0 ,PDT= 2 0 2 0 11 0 0 1 180 1 0 1 255 0 0 / -&GRIBIDS DESC=' U GRD Surface ',WMOHEAD='EAEW88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 2 2 0 11 0 0 1 180 1 0 1 255 0 0 / -&GRIBIDS DESC=' V GRD Surface ',WMOHEAD='EBEW88 KWBJ',EXTRACT=.true.,PDTN= 0 ,PDT= 2 3 2 0 11 0 0 1 180 1 0 1 255 0 0 / -&GRIBIDS DESC=' HTSGW Surface ',WMOHEAD='ECEW88 KWBJ',PDTN= 0 ,PDT= 0 3 2 0 11 0 0 1 180 1 0 1 255 0 0 / -&GRIBIDS DESC=' PERPW Surface ',WMOHEAD='EJEW88 KWBJ',PDTN= 0 ,PDT= 0 11 2 0 11 0 0 1 180 1 0 1 255 0 0 / -&GRIBIDS DESC=' DIRPW Surface ',WMOHEAD='EKEW88 KWBJ',PDTN= 0 ,PDT= 0 10 2 0 11 0 0 1 180 1 0 1 255 0 0 / -&GRIBIDS DESC=' WVHGT Surface ',WMOHEAD='ELEW88 KWBJ',PDTN= 0 ,PDT= 0 5 2 0 11 0 0 1 180 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEW88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 180 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWELL Order Seq. Of Data ',WMOHEAD='EOEW88 KWBJ',PDTN= 0 ,PDT= 0 8 2 0 11 0 0 1 180 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVPER Surface ',WMOHEAD='EMEW88 KWBJ',PDTN= 0 ,PDT= 0 6 2 0 11 0 0 1 180 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEW88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 180 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWPER Order Seq. Of Data ',WMOHEAD='EYEW88 KWBJ',PDTN= 0 ,PDT= 0 9 2 0 11 0 0 1 180 241 0 2 255 0 0 / -&GRIBIDS DESC=' WVDIR Surface ',WMOHEAD='ENEW88 KWBJ',PDTN= 0 ,PDT= 0 4 2 0 11 0 0 1 180 1 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEW88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 180 241 0 1 255 0 0 / -&GRIBIDS DESC=' SWDIR Order Seq. Of Data ',WMOHEAD='EPEW88 KWBJ',PDTN= 0 ,PDT= 0 7 2 0 11 0 0 1 180 241 0 2 255 0 0 / diff --git a/parm/post/global_1x1_paramlist_g2 b/parm/post/global_1x1_paramlist_g2 new file mode 100644 index 0000000000..350a715bac --- /dev/null +++ b/parm/post/global_1x1_paramlist_g2 @@ -0,0 +1,761 @@ +4LFTX:surface +5WAVH:500 mb +ABSV:1000 mb +ABSV:100 mb +ABSV:10 mb +ABSV:15 mb +ABSV:150 mb +ABSV:20 mb +ABSV:200 mb +ABSV:250 mb +ABSV:300 mb +ABSV:30 mb +ABSV:350 mb +ABSV:40 mb +ABSV:400 mb +ABSV:450 mb +ABSV:500 mb +ABSV:50 mb +ABSV:550 mb +ABSV:600 mb +ABSV:650 mb +ABSV:700 mb +ABSV:70 mb +ABSV:750 mb +ABSV:800 mb +ABSV:850 mb +ABSV:900 mb +ABSV:925 mb +ABSV:950 mb +ABSV:975 mb +ABSV:1 mb +ABSV:2 mb +ABSV:3 mb +ABSV:5 mb +ABSV:7 mb +ABSV:0.1 mb +ABSV:0.2 mb +ABSV:0.4 mb +ABSV:0.7 mb +ABSV:0.01 mb +ABSV:0.02 mb +ABSV:0.04 mb +ABSV:0.07 mb +ACPCP:surface +ALBDO:surface +APCP:surface +APTMP:2 m above ground +var discipline=0 master_table=2 parmcat=0 parm=21:2 m above ground +AOTK:entire atmosphere +CAPE:180-0 mb above ground +CAPE:255-0 mb above ground +CAPE:90-0 mb above ground +CAPE:surface +CFRZR:surface +CICEP:surface +CIN:180-0 mb above ground +CIN:255-0 mb above ground +CIN:90-0 mb above ground +CIN:surface +CLMR:50 mb +CLMR:1000 mb +CLMR:100 mb +CLMR:150 mb +CLMR:200 mb +CLMR:250 mb +CLMR:300 mb +CLMR:350 mb +CLMR:400 mb +CLMR:450 mb +CLMR:500 mb +CLMR:550 mb +CLMR:600 mb +CLMR:650 mb +CLMR:700 mb +CLMR:750 mb +CLMR:800 mb +CLMR:850 mb +CLMR:900 mb +CLMR:925 mb +CLMR:950 mb +CLMR:975 mb +CLMR:1 hybrid level +CNWAT:surface +CPOFP:surface +CPRAT:surface +CRAIN:surface +CSNOW:surface +CWAT:entire atmosphere (considered as a single layer) +CWORK:entire atmosphere (considered as a single layer) +DLWRF:surface +DPT:2 m above ground +DSWRF:surface +FLDCP:surface +FRICV:surface +FROZR:surface +FRZR:surface +GFLUX:surface +GRLE:50 mb +GRLE:1000 mb +GRLE:100 mb +GRLE:150 mb +GRLE:200 mb +GRLE:250 mb +GRLE:300 mb +GRLE:350 mb +GRLE:400 mb +GRLE:450 mb +GRLE:500 mb +GRLE:550 mb +GRLE:600 mb +GRLE:650 mb +GRLE:700 mb +GRLE:750 mb +GRLE:800 mb +GRLE:850 mb +GRLE:900 mb +GRLE:925 mb +GRLE:950 mb +GRLE:975 mb +GRLE:1 hybrid level +GUST:surface +HCDC:high cloud layer +HGT:0C isotherm +HGT:1000 mb +HGT:100 mb +HGT:10 mb +HGT:150 mb +HGT:15 mb +HGT:200 mb +HGT:20 mb +HGT:250 mb +HGT:300 mb +HGT:30 mb +HGT:350 mb +HGT:400 mb +HGT:450 mb +HGT:40 mb +HGT:500 mb +HGT:50 mb +HGT:550 mb +HGT:600 mb +HGT:650 mb +HGT:700 mb +HGT:70 mb +HGT:750 mb +HGT:800 mb +HGT:850 mb +HGT:900 mb +HGT:925 mb +HGT:950 mb +HGT:975 mb +HGT:1 mb +HGT:2 mb +HGT:3 mb +HGT:5 mb +HGT:7 mb +HGT:0.1 mb +HGT:0.2 mb +HGT:0.4 mb +HGT:0.7 mb +HGT:0.01 mb +HGT:0.02 mb +HGT:0.04 mb +HGT:0.07 mb +HGT:cloud ceiling +HGT:highest tropospheric freezing level +HGT:max wind +HGT:PV=-2e-06 (Km^2/kg/s) surface +HGT:PV=2e-06 (Km^2/kg/s) surface +HGT:surface +HGT:tropopause +HINDEX:surface +HLCY:1000-0 m above ground +HLCY:3000-0 m above ground +HPBL:surface +ICAHT:max wind +ICAHT:tropopause +ICEC:surface +ICETK:surface +ICETMP:surface +ICSEV:100 mb +ICSEV:150 mb +ICSEV:200 mb +ICSEV:250 mb +ICSEV:300 mb +ICSEV:350 mb +ICSEV:400 mb +ICSEV:450 mb +ICSEV:500 mb +ICSEV:550 mb +ICSEV:600 mb +ICSEV:650 mb +ICSEV:700 mb +ICSEV:750 mb +ICSEV:800 mb +ICSEV:850 mb +ICSEV:900 mb +ICSEV:950 mb +ICSEV:1000 mb +ICMR:50 mb +ICMR:1000 mb +ICMR:100 mb +ICMR:150 mb +ICMR:200 mb +ICMR:250 mb +ICMR:300 mb +ICMR:350 mb +ICMR:400 mb +ICMR:450 mb +ICMR:500 mb +ICMR:550 mb +ICMR:600 mb +ICMR:650 mb +ICMR:700 mb +ICMR:750 mb +ICMR:800 mb +ICMR:850 mb +ICMR:900 mb +ICMR:925 mb +ICMR:950 mb +ICMR:975 mb +ICMR:1 hybrid level +LAND:surface +LCDC:low cloud layer +LFTX:surface +LHTFL:surface +MSLET:mean sea level +O3MR:1000 mb +O3MR:100 mb +O3MR:10 mb +O3MR:15 mb +O3MR:150 mb +O3MR:20 mb +O3MR:200 mb +O3MR:250 mb +O3MR:300 mb +O3MR:30 mb +O3MR:350 mb +O3MR:40 mb +O3MR:400 mb +O3MR:450 mb +O3MR:500 mb +O3MR:50 mb +O3MR:550 mb +O3MR:600 mb +O3MR:650 mb +O3MR:700 mb +O3MR:70 mb +O3MR:750 mb +O3MR:800 mb +O3MR:850 mb +O3MR:900 mb +O3MR:925 mb +O3MR:950 mb +O3MR:975 mb +O3MR:1 mb +O3MR:2 mb +O3MR:3 mb +O3MR:5 mb +O3MR:7 mb +O3MR:0.1 mb +O3MR:0.2 mb +O3MR:0.4 mb +O3MR:0.7 mb +O3MR:0.01 mb +O3MR:0.02 mb +O3MR:0.04 mb +O3MR:0.07 mb +MCDC:middle cloud layer +PEVPR:surface +PLPL:255-0 mb above ground +POT:0.995 sigma level +PRATE:surface +PRES:80 m above ground +PRES:convective cloud bottom level +PRES:convective cloud top level +PRES:high cloud bottom level +PRES:high cloud top level +PRES:low cloud bottom level +PRES:low cloud top level +PRES:max wind +PRES:middle cloud bottom level +PRES:middle cloud top level +PRES:PV=-2e-06 (Km^2/kg/s) surface +PRES:PV=2e-06 (Km^2/kg/s) surface +PRES:surface +PRES:tropopause +PRMSL:mean sea level +PWAT:entire atmosphere +REFC:entire atmosphere +REFD:1 hybrid level +REFD:2 hybrid level +REFD:1000 m above ground +REFD:4000 m above ground +RH:0.33-1 sigma layer +RH:0.44-0.72 sigma layer +RH:0.44-1 sigma layer +RH:0.72-0.94 sigma layer +RH:0.995 sigma level +RH:0C isotherm +RH:1000 mb +RH:100 mb +RH:10 mb +RH:15 mb +RH:150 mb +RH:20 mb +RH:200 mb +RH:250 mb +RH:2 m above ground +RH:300 mb +RH:30-0 mb above ground +RH:30 mb +RH:350 mb +RH:40 mb +RH:400 mb +RH:450 mb +RH:500 mb +RH:50 mb +RH:550 mb +RH:600 mb +RH:650 mb +RH:700 mb +RH:70 mb +RH:750 mb +RH:800 mb +RH:850 mb +RH:900 mb +RH:925 mb +RH:950 mb +RH:975 mb +RH:1 mb +RH:2 mb +RH:3 mb +RH:5 mb +RH:7 mb +RH:0.1 mb +RH:0.2 mb +RH:0.4 mb +RH:0.7 mb +RH:0.01 mb +RH:0.02 mb +RH:0.04 mb +RH:0.07 mb +RH:entire atmosphere (considered as a single layer) +RH:highest tropospheric freezing level +RWMR:50 mb +RWMR:1000 mb +RWMR:100 mb +RWMR:150 mb +RWMR:200 mb +RWMR:250 mb +RWMR:300 mb +RWMR:350 mb +RWMR:400 mb +RWMR:450 mb +RWMR:500 mb +RWMR:550 mb +RWMR:600 mb +RWMR:650 mb +RWMR:700 mb +RWMR:750 mb +RWMR:800 mb +RWMR:850 mb +RWMR:900 mb +RWMR:925 mb +RWMR:950 mb +RWMR:975 mb +RWMR:1 hybrid level +SHTFL:surface +SDEN:surface +SFCR:surface +SOILW:0-0.1 m below ground +SOILW:0.1-0.4 m below ground +SOILW:0.4-1 m below ground +SOILW:1-2 m below ground +SOTYP:surface +SPFH:1000 mb +SPFH:100 mb +SPFH:10 mb +SPFH:15 mb +SPFH:150 mb +SPFH:20 mb +SPFH:200 mb +SPFH:250 mb +SPFH:300 mb +SPFH:30 mb +SPFH:350 mb +SPFH:40 mb +SPFH:400 mb +SPFH:450 mb +SPFH:500 mb +SPFH:50 mb +SPFH:550 mb +SPFH:600 mb +SPFH:650 mb +SPFH:700 mb +SPFH:70 mb +SPFH:750 mb +SPFH:800 mb +SPFH:850 mb +SPFH:900 mb +SPFH:925 mb +SPFH:950 mb +SPFH:975 mb +SPFH:1 mb +SPFH:2 mb +SPFH:3 mb +SPFH:5 mb +SPFH:7 mb +SPFH:0.1 mb +SPFH:0.2 mb +SPFH:0.4 mb +SPFH:0.7 mb +SPFH:0.01 mb +SPFH:0.02 mb +SPFH:0.04 mb +SPFH:0.07 mb +SPFH:2 m above ground +SPFH:30-0 mb above ground +SPFH:80 m above ground +SNMR:50 mb +SNMR:1000 mb +SNMR:100 mb +SNMR:150 mb +SNMR:200 mb +SNMR:250 mb +SNMR:300 mb +SNMR:350 mb +SNMR:400 mb +SNMR:450 mb +SNMR:500 mb +SNMR:550 mb +SNMR:600 mb +SNMR:650 mb +SNMR:700 mb +SNMR:750 mb +SNMR:800 mb +SNMR:850 mb +SNMR:900 mb +SNMR:925 mb +SNMR:950 mb +SNMR:975 mb +SNMR:1 hybrid level +SOILL:0-0.1 m below ground +SOILL:0.1-0.4 m below ground +SOILL:0.4-1 m below ground +SOILL:1-2 m below ground +SUNSD:surface +TCDC:50 mb +TCDC:1000 mb +TCDC:100 mb +TCDC:150 mb +TCDC:200 mb +TCDC:250 mb +TCDC:300 mb +TCDC:350 mb +TCDC:400 mb +TCDC:450 mb +TCDC:500 mb +TCDC:550 mb +TCDC:600 mb +TCDC:650 mb +TCDC:700 mb +TCDC:750 mb +TCDC:800 mb +TCDC:850 mb +TCDC:900 mb +TCDC:925 mb +TCDC:950 mb +TCDC:975 mb +TCDC:boundary layer cloud layer +TCDC:convective cloud layer +TCDC:entire atmosphere +TCDC:high cloud layer +TCDC:low cloud layer +TCDC:middle cloud layer +TMAX:2 m above ground +TMIN:2 m above ground +TSOIL:0-0.1 m below ground +TSOIL:0.1-0.4 m below ground +TSOIL:0.4-1 m below ground +TMP:0.995 sigma level +TMP:1000 mb +TMP:100 m above ground +TMP:100 mb +TMP:10 mb +TMP:15 mb +TSOIL:1-2 m below ground +TMP:150 mb +TMP:1829 m above mean sea level +TMP:200 mb +TMP:20 mb +TMP:250 mb +TMP:2743 m above mean sea level +TMP:2 m above ground +TMP:300 mb +TMP:30-0 mb above ground +TMP:30 mb +TMP:350 mb +TMP:3658 m above mean sea level +TMP:400 mb +TMP:40 mb +TMP:450 mb +TMP:500 mb +TMP:50 mb +TMP:550 mb +TMP:600 mb +TMP:650 mb +TMP:700 mb +TMP:70 mb +TMP:750 mb +TMP:800 mb +TMP:80 m above ground +TMP:850 mb +TMP:900 mb +TMP:925 mb +TMP:950 mb +TMP:975 mb +TMP:1 mb +TMP:2 mb +TMP:3 mb +TMP:5 mb +TMP:7 mb +TMP:0.1 mb +TMP:0.2 mb +TMP:0.4 mb +TMP:0.7 mb +TMP:0.01 mb +TMP:0.02 mb +TMP:0.04 mb +TMP:0.07 mb +TMP:high cloud top level +TMP:low cloud top level +TMP:max wind +TMP:middle cloud top level +TMP:PV=-2e-06 (Km^2/kg/s) surface +TMP:PV=2e-06 (Km^2/kg/s) surface +TMP:surface +TMP:tropopause +TOZNE:entire atmosphere (considered as a single layer) +TSNOWP:surface +UFLX:surface +UGRD:0.995 sigma level +UGRD:1000 mb +UGRD:100 m above ground +UGRD:100 mb +UGRD:10 m above ground +UGRD:10 mb +UGRD:15 mb +UGRD:150 mb +UGRD:1829 m above mean sea level +UGRD:200 mb +UGRD:20 mb +UGRD:20 m above ground +UGRD:250 mb +UGRD:2743 m above mean sea level +UGRD:300 mb +UGRD:30 m above ground +UGRD:30-0 mb above ground +UGRD:30 mb +UGRD:350 mb +UGRD:3658 m above mean sea level +UGRD:40 mb +UGRD:400 mb +UGRD:40 m above ground +UGRD:450 mb +UGRD:500 mb +UGRD:50 mb +UGRD:50 m above ground +UGRD:550 mb +UGRD:600 mb +UGRD:650 mb +UGRD:700 mb +UGRD:70 mb +UGRD:750 mb +UGRD:800 mb +UGRD:80 m above ground +UGRD:850 mb +UGRD:900 mb +UGRD:925 mb +UGRD:950 mb +UGRD:975 mb +UGRD:1 mb +UGRD:2 mb +UGRD:3 mb +UGRD:5 mb +UGRD:7 mb +UGRD:0.1 mb +UGRD:0.2 mb +UGRD:0.4 mb +UGRD:0.7 mb +UGRD:0.01 mb +UGRD:0.02 mb +UGRD:0.04 mb +UGRD:0.07 mb +UGRD:max wind +UGRD:planetary boundary layer +UGRD:PV=-2e-06 (Km^2/kg/s) surface +UGRD:PV=2e-06 (Km^2/kg/s) surface +UGRD:tropopause +U-GWD:surface +ULWRF:surface +ULWRF:top of atmosphere +USTM:6000-0 m above ground +USWRF:surface +USWRF:top of atmosphere +VEG:surface +VFLX:surface +VGRD:0.995 sigma level +VGRD:1000 mb +VGRD:100 m above ground +VGRD:100 mb +VGRD:10 m above ground +VGRD:10 mb +VGRD:15 mb +VGRD:150 mb +VGRD:1829 m above mean sea level +VGRD:200 mb +VGRD:20 mb +VGRD:20 m above ground +VGRD:250 mb +VGRD:2743 m above mean sea level +VGRD:300 mb +VGRD:30 m above ground +VGRD:30-0 mb above ground +VGRD:30 mb +VGRD:350 mb +VGRD:3658 m above mean sea level +VGRD:40 mb +VGRD:400 mb +VGRD:40 m above ground +VGRD:450 mb +VGRD:500 mb +VGRD:50 mb +VGRD:50 m above ground +VGRD:550 mb +VGRD:600 mb +VGRD:650 mb +VGRD:700 mb +VGRD:70 mb +VGRD:750 mb +VGRD:800 mb +VGRD:80 m above ground +VGRD:850 mb +VGRD:900 mb +VGRD:925 mb +VGRD:950 mb +VGRD:975 mb +VGRD:1 mb +VGRD:2 mb +VGRD:3 mb +VGRD:5 mb +VGRD:7 mb +VGRD:0.1 mb +VGRD:0.2 mb +VGRD:0.4 mb +VGRD:0.7 mb +VGRD:0.01 mb +VGRD:0.02 mb +VGRD:0.04 mb +VGRD:0.07 mb +VGRD:max wind +VGRD:planetary boundary layer +VGRD:PV=-2e-06 (Km^2/kg/s) surface +VGRD:PV=2e-06 (Km^2/kg/s) surface +VGRD:tropopause +V-GWD:surface +VRATE:planetary boundary layer +VSTM:6000-0 m above ground +DZDT:1000 mb +DZDT:100 mb +DZDT:10 mb +DZDT:15 mb +DZDT:150 mb +DZDT:20 mb +DZDT:200 mb +DZDT:250 mb +DZDT:300 mb +DZDT:30 mb +DZDT:350 mb +DZDT:40 mb +DZDT:400 mb +DZDT:450 mb +DZDT:500 mb +DZDT:50 mb +DZDT:550 mb +DZDT:600 mb +DZDT:650 mb +DZDT:700 mb +DZDT:70 mb +DZDT:750 mb +DZDT:800 mb +DZDT:850 mb +DZDT:900 mb +DZDT:925 mb +DZDT:950 mb +DZDT:975 mb +DZDT:1 mb +DZDT:2 mb +DZDT:3 mb +DZDT:5 mb +DZDT:7 mb +DZDT:0.1 mb +DZDT:0.2 mb +DZDT:0.4 mb +DZDT:0.7 mb +DZDT:0.01 mb +DZDT:0.02 mb +DZDT:0.04 mb +DZDT:0.07 mb +VVEL:0.995 sigma level +VVEL:1000 mb +VVEL:100 mb +VVEL:10 mb +VVEL:15 mb +VVEL:150 mb +VVEL:20 mb +VVEL:200 mb +VVEL:250 mb +VVEL:300 mb +VVEL:30 mb +VVEL:350 mb +VVEL:40 mb +VVEL:400 mb +VVEL:450 mb +VVEL:500 mb +VVEL:50 mb +VVEL:550 mb +VVEL:600 mb +VVEL:650 mb +VVEL:700 mb +VVEL:70 mb +VVEL:750 mb +VVEL:800 mb +VVEL:850 mb +VVEL:900 mb +VVEL:925 mb +VVEL:950 mb +VVEL:975 mb +VVEL:1 mb +VVEL:2 mb +VVEL:3 mb +VVEL:5 mb +VVEL:7 mb +VVEL:0.1 mb +VVEL:0.2 mb +VVEL:0.4 mb +VVEL:0.7 mb +VVEL:0.01 mb +VVEL:0.02 mb +VVEL:0.04 mb +VVEL:0.07 mb +VWSH:PV=-2e-06 (Km^2/kg/s) surface +VWSH:PV=2e-06 (Km^2/kg/s) surface +VWSH:tropopause +WATR:surface +WEASD:surface +WILT:surface +SNOD:surface +VIS:surface +ICEG:10 m above mean sea level diff --git a/parm/post/global_1x1_paramlist_g2.anl b/parm/post/global_1x1_paramlist_g2.anl new file mode 100644 index 0000000000..dd340636d6 --- /dev/null +++ b/parm/post/global_1x1_paramlist_g2.anl @@ -0,0 +1,628 @@ +4LFTX:surface +5WAVH:500 mb +ABSV:1000 mb +ABSV:100 mb +ABSV:10 mb +ABSV:15 mb +ABSV:150 mb +ABSV:20 mb +ABSV:200 mb +ABSV:250 mb +ABSV:300 mb +ABSV:30 mb +ABSV:350 mb +ABSV:40 mb +ABSV:400 mb +ABSV:450 mb +ABSV:500 mb +ABSV:50 mb +ABSV:550 mb +ABSV:600 mb +ABSV:650 mb +ABSV:700 mb +ABSV:70 mb +ABSV:750 mb +ABSV:800 mb +ABSV:850 mb +ABSV:900 mb +ABSV:925 mb +ABSV:950 mb +ABSV:975 mb +ABSV:1 mb +ABSV:2 mb +ABSV:3 mb +ABSV:5 mb +ABSV:7 mb +ABSV:0.1 mb +ABSV:0.2 mb +ABSV:0.4 mb +ABSV:0.7 mb +ABSV:0.01 mb +ABSV:0.02 mb +ABSV:0.04 mb +ABSV:0.07 mb +CAPE:180-0 mb above ground +CAPE:surface +CFRZR:surface +CICEP:surface +CIN:180-0 mb above ground +CIN:surface +CLMR:50 mb +CLMR:1000 mb +CLMR:100 mb +CLMR:150 mb +CLMR:200 mb +CLMR:250 mb +CLMR:300 mb +CLMR:350 mb +CLMR:400 mb +CLMR:450 mb +CLMR:500 mb +CLMR:550 mb +CLMR:600 mb +CLMR:650 mb +CLMR:700 mb +CLMR:750 mb +CLMR:800 mb +CLMR:850 mb +CLMR:900 mb +CLMR:925 mb +CLMR:950 mb +CLMR:975 mb +CLMR:1 hybrid level +CNWAT:surface +CPOFP:surface +CRAIN:surface +CSNOW:surface +CWAT:entire atmosphere (considered as a single layer) +DPT:2 m above ground +GRLE:50 mb +GRLE:1000 mb +GRLE:100 mb +GRLE:150 mb +GRLE:200 mb +GRLE:250 mb +GRLE:300 mb +GRLE:350 mb +GRLE:400 mb +GRLE:450 mb +GRLE:500 mb +GRLE:550 mb +GRLE:600 mb +GRLE:650 mb +GRLE:700 mb +GRLE:750 mb +GRLE:800 mb +GRLE:850 mb +GRLE:900 mb +GRLE:925 mb +GRLE:950 mb +GRLE:975 mb +GRLE:1 hybrid level +FRICV:surface +HGT:0C isotherm +HGT:1000 mb +HGT:100 mb +HGT:10 mb +HGT:150 mb +HGT:15 mb +HGT:200 mb +HGT:20 mb +HGT:250 mb +HGT:300 mb +HGT:30 mb +HGT:350 mb +HGT:400 mb +HGT:40 mb +HGT:450 mb +HGT:500 mb +HGT:50 mb +HGT:550 mb +HGT:600 mb +HGT:650 mb +HGT:700 mb +HGT:70 mb +HGT:750 mb +HGT:800 mb +HGT:850 mb +HGT:900 mb +HGT:925 mb +HGT:950 mb +HGT:975 mb +HGT:1 mb +HGT:2 mb +HGT:3 mb +HGT:5 mb +HGT:7 mb +HGT:0.1 mb +HGT:0.2 mb +HGT:0.4 mb +HGT:0.7 mb +HGT:0.01 mb +HGT:0.02 mb +HGT:0.04 mb +HGT:0.07 mb +HGT:highest tropospheric freezing level +HGT:max wind +HGT:PV=-2e-06 (Km^2/kg/s) surface +HGT:PV=2e-06 (Km^2/kg/s) surface +HGT:surface +HGT:tropopause +HLCY:3000-0 m above ground +ICAHT:max wind +ICAHT:tropopause +ICETK:surface +ICETMP:surface +ICMR:50 mb +ICMR:1000 mb +ICMR:100 mb +ICMR:150 mb +ICMR:200 mb +ICMR:250 mb +ICMR:300 mb +ICMR:350 mb +ICMR:400 mb +ICMR:450 mb +ICMR:500 mb +ICMR:550 mb +ICMR:600 mb +ICMR:650 mb +ICMR:700 mb +ICMR:750 mb +ICMR:800 mb +ICMR:850 mb +ICMR:900 mb +ICMR:925 mb +ICMR:950 mb +ICMR:975 mb +ICMR:1 hybrid level +LFTX:surface +MSLET:mean sea level +O3MR:1000 mb +O3MR:100 mb +O3MR:10 mb +O3MR:15 mb +O3MR:150 mb +O3MR:20 mb +O3MR:200 mb +O3MR:250 mb +O3MR:300 mb +O3MR:30 mb +O3MR:350 mb +O3MR:40 mb +O3MR:400 mb +O3MR:450 mb +O3MR:500 mb +O3MR:50 mb +O3MR:550 mb +O3MR:600 mb +O3MR:650 mb +O3MR:700 mb +O3MR:70 mb +O3MR:750 mb +O3MR:800 mb +O3MR:850 mb +O3MR:900 mb +O3MR:925 mb +O3MR:950 mb +O3MR:975 mb +O3MR:1 mb +O3MR:2 mb +O3MR:3 mb +O3MR:5 mb +O3MR:7 mb +O3MR:0.1 mb +O3MR:0.2 mb +O3MR:0.4 mb +O3MR:0.7 mb +O3MR:0.01 mb +O3MR:0.02 mb +O3MR:0.04 mb +O3MR:0.07 mb +POT:0.995 sigma level +PRATE:surface +PRES:max wind +PRES:PV=-2e-06 (Km^2/kg/s) surface +PRES:PV=2e-06 (Km^2/kg/s) surface +PRES:surface +PRES:tropopause +PRMSL:mean sea level +PWAT:entire atmosphere +RH:0.33-1 sigma layer +RH:0.44-0.72 sigma layer +RH:0.44-1 sigma layer +RH:0.72-0.94 sigma layer +RH:0.995 sigma level +RH:0C isotherm +RH:1000 mb +RH:100 mb +RH:10 mb +RH:15 mb +RH:150 mb +RH:20 mb +RH:200 mb +RH:250 mb +RH:30-0 mb above ground +RH:300 mb +RH:30 mb +RH:350 mb +RH:40 mb +RH:400 mb +RH:450 mb +RH:500 mb +RH:50 mb +RH:550 mb +RH:600 mb +RH:650 mb +RH:700 mb +RH:70 mb +RH:750 mb +RH:800 mb +RH:850 mb +RH:900 mb +RH:925 mb +RH:950 mb +RH:975 mb +RH:1 mb +RH:2 mb +RH:3 mb +RH:5 mb +RH:7 mb +RH:0.1 mb +RH:0.2 mb +RH:0.4 mb +RH:0.7 mb +RH:0.01 mb +RH:0.02 mb +RH:0.04 mb +RH:0.07 mb +RH:entire atmosphere (considered as a single layer) +RH:highest tropospheric freezing level +SFCR:surface +RWMR:50 mb +RWMR:1000 mb +RWMR:100 mb +RWMR:150 mb +RWMR:200 mb +RWMR:250 mb +RWMR:300 mb +RWMR:350 mb +RWMR:400 mb +RWMR:450 mb +RWMR:500 mb +RWMR:550 mb +RWMR:600 mb +RWMR:650 mb +RWMR:700 mb +RWMR:750 mb +RWMR:800 mb +RWMR:850 mb +RWMR:900 mb +RWMR:925 mb +RWMR:950 mb +RWMR:975 mb +RWMR:1 hybrid level +SNMR:50 mb +SNMR:1000 mb +SNMR:100 mb +SNMR:150 mb +SNMR:200 mb +SNMR:250 mb +SNMR:300 mb +SNMR:350 mb +SNMR:400 mb +SNMR:450 mb +SNMR:500 mb +SNMR:550 mb +SNMR:600 mb +SNMR:650 mb +SNMR:700 mb +SNMR:750 mb +SNMR:800 mb +SNMR:850 mb +SNMR:900 mb +SNMR:925 mb +SNMR:950 mb +SNMR:975 mb +SNMR:1 hybrid level +SOILL:0-0.1 m below ground +SOILL:0.1-0.4 m below ground +SOILL:0.4-1 m below ground +SOILL:1-2 m below ground +SOTYP:surface +SPFH:1000 mb +SPFH:100 mb +SPFH:10 mb +SPFH:15 mb +SPFH:150 mb +SPFH:200 mb +SPFH:20 mb +SPFH:250 mb +SPFH:300 mb +SPFH:30 mb +SPFH:350 mb +SPFH:400 mb +SPFH:40 mb +SPFH:450 mb +SPFH:500 mb +SPFH:50 mb +SPFH:550 mb +SPFH:600 mb +SPFH:650 mb +SPFH:700 mb +SPFH:70 mb +SPFH:750 mb +SPFH:800 mb +SPFH:850 mb +SPFH:900 mb +SPFH:925 mb +SPFH:950 mb +SPFH:975 mb +SPFH:1 mb +SPFH:2 mb +SPFH:3 mb +SPFH:5 mb +SPFH:7 mb +SPFH:0.1 mb +SPFH:0.2 mb +SPFH:0.4 mb +SPFH:0.7 mb +SPFH:0.01 mb +SPFH:0.02 mb +SPFH:0.04 mb +SPFH:0.07 mb +SPFH:30-0 mb above ground +TMP:0.995 sigma level +TMP:1000 mb +TMP:100 m above ground +TMP:100 mb +TMP:10 mb +TMP:150 mb +TMP:15 mb +TMP:1829 m above mean sea level +TMP:200 mb +TMP:20 mb +TMP:250 mb +TMP:2743 m above mean sea level +TMP:30-0 mb above ground +TMP:300 mb +TMP:30 mb +TMP:350 mb +TMP:3658 m above mean sea level +TMP:400 mb +TMP:40 mb +TMP:450 mb +TMP:500 mb +TMP:50 mb +TMP:550 mb +TMP:600 mb +TMP:650 mb +TMP:700 mb +TMP:70 mb +TMP:750 mb +TMP:800 mb +TMP:80 m above ground +TMP:850 mb +TMP:900 mb +TMP:925 mb +TMP:950 mb +TMP:975 mb +TMP:1 mb +TMP:2 mb +TMP:3 mb +TMP:5 mb +TMP:7 mb +TMP:0.1 mb +TMP:0.2 mb +TMP:0.4 mb +TMP:0.7 mb +TMP:0.01 mb +TMP:0.02 mb +TMP:0.04 mb +TMP:0.07 mb +TMP:max wind +TMP:PV=-2e-06 (Km^2/kg/s) surface +TMP:PV=2e-06 (Km^2/kg/s) surface +TMP:tropopause +TOZNE:entire atmosphere (considered as a single layer) +UGRD:0.995 sigma level +UGRD:1000 mb +UGRD:100 m above ground +UGRD:100 mb +UGRD:10 mb +UGRD:150 mb +UGRD:15 mb +UGRD:1829 m above mean sea level +UGRD:200 mb +UGRD:20 mb +UGRD:20 m above ground +UGRD:250 mb +UGRD:2743 m above mean sea level +UGRD:30-0 mb above ground +UGRD:300 mb +UGRD:30 mb +UGRD:30 m above ground +UGRD:350 mb +UGRD:3658 m above mean sea level +UGRD:400 mb +UGRD:40 mb +UGRD:40 m above ground +UGRD:450 mb +UGRD:500 mb +UGRD:50 mb +UGRD:50 m above ground +UGRD:550 mb +UGRD:600 mb +UGRD:650 mb +UGRD:700 mb +UGRD:70 mb +UGRD:750 mb +UGRD:800 mb +UGRD:80 m above ground +UGRD:850 mb +UGRD:900 mb +UGRD:925 mb +UGRD:950 mb +UGRD:975 mb +UGRD:1 mb +UGRD:2 mb +UGRD:3 mb +UGRD:5 mb +UGRD:7 mb +UGRD:0.1 mb +UGRD:0.2 mb +UGRD:0.4 mb +UGRD:0.7 mb +UGRD:0.01 mb +UGRD:0.02 mb +UGRD:0.04 mb +UGRD:0.07 mb +UGRD:max wind +UGRD:PV=-2e-06 (Km^2/kg/s) surface +UGRD:PV=2e-06 (Km^2/kg/s) surface +UGRD:tropopause +USTM:6000-0 m above ground +VEG:surface +VGRD:0.995 sigma level +VGRD:1000 mb +VGRD:100 m above ground +VGRD:100 mb +VGRD:10 mb +VGRD:150 mb +VGRD:15 mb +VGRD:1829 m above mean sea level +VGRD:200 mb +VGRD:20 mb +VGRD:20 m above ground +VGRD:250 mb +VGRD:2743 m above mean sea level +VGRD:30-0 mb above ground +VGRD:300 mb +VGRD:30 mb +VGRD:30 m above ground +VGRD:350 mb +VGRD:3658 m above mean sea level +VGRD:400 mb +VGRD:40 mb +VGRD:40 m above ground +VGRD:450 mb +VGRD:500 mb +VGRD:50 mb +VGRD:50 m above ground +VGRD:550 mb +VGRD:600 mb +VGRD:650 mb +VGRD:700 mb +VGRD:70 mb +VGRD:750 mb +VGRD:800 mb +VGRD:80 m above ground +VGRD:850 mb +VGRD:900 mb +VGRD:925 mb +VGRD:950 mb +VGRD:975 mb +VGRD:1 mb +VGRD:2 mb +VGRD:3 mb +VGRD:5 mb +VGRD:7 mb +VGRD:0.1 mb +VGRD:0.2 mb +VGRD:0.4 mb +VGRD:0.7 mb +VGRD:0.01 mb +VGRD:0.02 mb +VGRD:0.04 mb +VGRD:0.07 mb +VGRD:max wind +VGRD:PV=-2e-06 (Km^2/kg/s) surface +VGRD:PV=2e-06 (Km^2/kg/s) surface +VGRD:tropopause +VSTM:6000-0 m above ground +DZDT:1000 mb +DZDT:100 mb +DZDT:10 mb +DZDT:15 mb +DZDT:150 mb +DZDT:20 mb +DZDT:200 mb +DZDT:250 mb +DZDT:300 mb +DZDT:30 mb +DZDT:350 mb +DZDT:40 mb +DZDT:400 mb +DZDT:450 mb +DZDT:500 mb +DZDT:50 mb +DZDT:550 mb +DZDT:600 mb +DZDT:650 mb +DZDT:700 mb +DZDT:70 mb +DZDT:750 mb +DZDT:800 mb +DZDT:850 mb +DZDT:900 mb +DZDT:925 mb +DZDT:950 mb +DZDT:975 mb +DZDT:1 mb +DZDT:2 mb +DZDT:3 mb +DZDT:5 mb +DZDT:7 mb +DZDT:0.1 mb +DZDT:0.2 mb +DZDT:0.4 mb +DZDT:0.7 mb +DZDT:0.01 mb +DZDT:0.02 mb +DZDT:0.04 mb +DZDT:0.07 mb +VVEL:0.995 sigma level +VVEL:1000 mb +VVEL:100 mb +VVEL:10 mb +VVEL:15 mb +VVEL:150 mb +VVEL:20 mb +VVEL:200 mb +VVEL:250 mb +VVEL:300 mb +VVEL:30 mb +VVEL:350 mb +VVEL:40 mb +VVEL:400 mb +VVEL:450 mb +VVEL:500 mb +VVEL:50 mb +VVEL:550 mb +VVEL:600 mb +VVEL:650 mb +VVEL:700 mb +VVEL:70 mb +VVEL:750 mb +VVEL:800 mb +VVEL:850 mb +VVEL:900 mb +VVEL:925 mb +VVEL:950 mb +VVEL:975 mb +VVEL:1 mb +VVEL:2 mb +VVEL:3 mb +VVEL:5 mb +VVEL:7 mb +VVEL:0.1 mb +VVEL:0.2 mb +VVEL:0.4 mb +VVEL:0.7 mb +VVEL:0.01 mb +VVEL:0.02 mb +VVEL:0.04 mb +VVEL:0.07 mb +VWSH:PV=-2e-06 (Km^2/kg/s) surface +VWSH:PV=2e-06 (Km^2/kg/s) surface +VWSH:tropopause diff --git a/parm/post/global_1x1_paramlist_g2.f000 b/parm/post/global_1x1_paramlist_g2.f000 new file mode 100644 index 0000000000..b1dcb09ccd --- /dev/null +++ b/parm/post/global_1x1_paramlist_g2.f000 @@ -0,0 +1,700 @@ +4LFTX:surface +5WAVH:500 mb +ABSV:1000 mb +ABSV:100 mb +ABSV:10 mb +ABSV:150 mb +ABSV:15 mb +ABSV:200 mb +ABSV:20 mb +ABSV:250 mb +ABSV:300 mb +ABSV:30 mb +ABSV:350 mb +ABSV:400 mb +ABSV:40 mb +ABSV:450 mb +ABSV:500 mb +ABSV:50 mb +ABSV:550 mb +ABSV:600 mb +ABSV:650 mb +ABSV:700 mb +ABSV:70 mb +ABSV:750 mb +ABSV:800 mb +ABSV:850 mb +ABSV:900 mb +ABSV:925 mb +ABSV:950 mb +ABSV:975 mb +ABSV:1 mb +ABSV:2 mb +ABSV:3 mb +ABSV:5 mb +ABSV:7 mb +ABSV:0.1 mb +ABSV:0.2 mb +ABSV:0.4 mb +ABSV:0.7 mb +ABSV:0.01 mb +ABSV:0.02 mb +ABSV:0.04 mb +ABSV:0.07 mb +APTMP:2 m above ground +var discipline=0 master_table=2 parmcat=0 parm=21:2 m above ground +CAPE:180-0 mb above ground +CAPE:255-0 mb above ground +CAPE:90-0 mb above ground +CAPE:surface +CFRZR:surface +CICEP:surface +CIN:180-0 mb above ground +CIN:255-0 mb above ground +CIN:90-0 mb above ground +CIN:surface +CLMR:50 mb +CLMR:1000 mb +CLMR:100 mb +CLMR:150 mb +CLMR:200 mb +CLMR:250 mb +CLMR:300 mb +CLMR:350 mb +CLMR:400 mb +CLMR:450 mb +CLMR:500 mb +CLMR:550 mb +CLMR:600 mb +CLMR:650 mb +CLMR:700 mb +CLMR:750 mb +CLMR:800 mb +CLMR:850 mb +CLMR:900 mb +CLMR:925 mb +CLMR:950 mb +CLMR:975 mb +CLMR:1 hybrid level +CNWAT:surface +CPOFP:surface +CRAIN:surface +CSNOW:surface +CWAT:entire atmosphere (considered as a single layer) +DPT:2 m above ground +FLDCP:surface +FRICV:surface +GRLE:50 mb +GRLE:1000 mb +GRLE:100 mb +GRLE:150 mb +GRLE:200 mb +GRLE:250 mb +GRLE:300 mb +GRLE:350 mb +GRLE:400 mb +GRLE:450 mb +GRLE:500 mb +GRLE:550 mb +GRLE:600 mb +GRLE:650 mb +GRLE:700 mb +GRLE:750 mb +GRLE:800 mb +GRLE:850 mb +GRLE:900 mb +GRLE:925 mb +GRLE:950 mb +GRLE:975 mb +GRLE:1 hybrid level +GUST:surface +HCDC:high cloud layer +HGT:0C isotherm +HGT:1000 mb +HGT:100 mb +HGT:10 mb +HGT:150 mb +HGT:15 mb +HGT:200 mb +HGT:20 mb +HGT:250 mb +HGT:300 mb +HGT:30 mb +HGT:350 mb +HGT:400 mb +HGT:40 mb +HGT:450 mb +HGT:500 mb +HGT:50 mb +HGT:550 mb +HGT:600 mb +HGT:650 mb +HGT:700 mb +HGT:70 mb +HGT:750 mb +HGT:800 mb +HGT:850 mb +HGT:900 mb +HGT:925 mb +HGT:950 mb +HGT:975 mb +HGT:1 mb +HGT:2 mb +HGT:3 mb +HGT:5 mb +HGT:7 mb +HGT:0.1 mb +HGT:0.2 mb +HGT:0.4 mb +HGT:0.7 mb +HGT:0.01 mb +HGT:0.02 mb +HGT:0.04 mb +HGT:0.07 mb +HGT:cloud ceiling +HGT:highest tropospheric freezing level +HGT:max wind +HGT:PV=-2e-06 (Km^2/kg/s) surface +HGT:PV=2e-06 (Km^2/kg/s) surface +HGT:surface +HGT:tropopause +HINDEX:surface +HLCY:1000-0 m above ground +HLCY:3000-0 m above ground +HPBL:surface +ICAHT:max wind +ICAHT:tropopause +ICEC:surface +ICETK:surface +ICETMP:surface +ICMR:50 mb +ICMR:1000 mb +ICMR:100 mb +ICMR:150 mb +ICMR:200 mb +ICMR:250 mb +ICMR:300 mb +ICMR:350 mb +ICMR:400 mb +ICMR:450 mb +ICMR:500 mb +ICMR:550 mb +ICMR:600 mb +ICMR:650 mb +ICMR:700 mb +ICMR:750 mb +ICMR:800 mb +ICMR:850 mb +ICMR:900 mb +ICMR:925 mb +ICMR:950 mb +ICMR:975 mb +ICMR:1 hybrid level +LAND:surface +LCDC:low cloud layer +LFTX:surface +MSLET:mean sea level +O3MR:1000 mb +O3MR:100 mb +O3MR:10 mb +O3MR:150 mb +O3MR:15 mb +O3MR:20 mb +O3MR:200 mb +O3MR:250 mb +O3MR:300 mb +O3MR:30 mb +O3MR:350 mb +O3MR:400 mb +O3MR:40 mb +O3MR:450 mb +O3MR:500 mb +O3MR:50 mb +O3MR:550 mb +O3MR:600 mb +O3MR:650 mb +O3MR:700 mb +O3MR:70 mb +O3MR:750 mb +O3MR:800 mb +O3MR:850 mb +O3MR:900 mb +O3MR:925 mb +O3MR:950 mb +O3MR:975 mb +O3MR:1 mb +O3MR:2 mb +O3MR:3 mb +O3MR:5 mb +O3MR:7 mb +O3MR:0.1 mb +O3MR:0.2 mb +O3MR:0.4 mb +O3MR:0.7 mb +O3MR:0.01 mb +O3MR:0.02 mb +O3MR:0.04 mb +O3MR:0.07 mb +MCDC:middle cloud layer +PLPL:255-0 mb above ground +POT:0.995 sigma level +PRATE:surface +PRES:80 m above ground +PRES:max wind +PRES:PV=-2e-06 (Km^2/kg/s) surface +PRES:PV=2e-06 (Km^2/kg/s) surface +PRES:surface +PRES:tropopause +PRMSL:mean sea level +PWAT:entire atmosphere +REFC:entire atmosphere +REFD:1 hybrid level +REFD:2 hybrid level +REFD:1000 m above ground +REFD:4000 m above ground +RH:0.33-1 sigma layer +RH:0.44-0.72 sigma layer +RH:0.44-1 sigma layer +RH:0.72-0.94 sigma layer +RH:0.995 sigma level +RH:0C isotherm +RH:1000 mb +RH:100 mb +RH:10 mb +RH:150 mb +RH:15 mb +RH:20 mb +RH:200 mb +RH:250 mb +RH:2 m above ground +RH:30-0 mb above ground +RH:300 mb +RH:30 mb +RH:350 mb +RH:400 mb +RH:40 mb +RH:450 mb +RH:500 mb +RH:50 mb +RH:550 mb +RH:600 mb +RH:650 mb +RH:700 mb +RH:70 mb +RH:750 mb +RH:800 mb +RH:850 mb +RH:900 mb +RH:925 mb +RH:950 mb +RH:975 mb +RH:1 mb +RH:2 mb +RH:3 mb +RH:5 mb +RH:7 mb +RH:0.1 mb +RH:0.2 mb +RH:0.4 mb +RH:0.7 mb +RH:0.01 mb +RH:0.02 mb +RH:0.04 mb +RH:0.07 mb +RH:entire atmosphere (considered as a single layer) +RH:highest tropospheric freezing level +RWMR:50 mb +RWMR:1000 mb +RWMR:100 mb +RWMR:150 mb +RWMR:200 mb +RWMR:250 mb +RWMR:300 mb +RWMR:350 mb +RWMR:400 mb +RWMR:450 mb +RWMR:500 mb +RWMR:550 mb +RWMR:600 mb +RWMR:650 mb +RWMR:700 mb +RWMR:750 mb +RWMR:800 mb +RWMR:850 mb +RWMR:900 mb +RWMR:925 mb +RWMR:950 mb +RWMR:975 mb +RWMR:1 hybrid level +SFCR:surface +SNMR:50 mb +SNMR:1000 mb +SNMR:100 mb +SNMR:150 mb +SNMR:200 mb +SNMR:250 mb +SNMR:300 mb +SNMR:350 mb +SNMR:400 mb +SNMR:450 mb +SNMR:500 mb +SNMR:550 mb +SNMR:600 mb +SNMR:650 mb +SNMR:700 mb +SNMR:750 mb +SNMR:800 mb +SNMR:850 mb +SNMR:900 mb +SNMR:925 mb +SNMR:950 mb +SNMR:975 mb +SNMR:1 hybrid level +SOILL:0-0.1 m below ground +SOILL:0.1-0.4 m below ground +SOILL:0.4-1 m below ground +SOILL:1-2 m below ground +SOILW:0-0.1 m below ground +SOILW:0.1-0.4 m below ground +SOILW:0.4-1 m below ground +SOILW:1-2 m below ground +SOTYP:surface +SPFH:1000 mb +SPFH:100 mb +SPFH:10 mb +SPFH:15 mb +SPFH:150 mb +SPFH:200 mb +SPFH:20 mb +SPFH:250 mb +SPFH:300 mb +SPFH:30 mb +SPFH:350 mb +SPFH:400 mb +SPFH:40 mb +SPFH:450 mb +SPFH:500 mb +SPFH:50 mb +SPFH:550 mb +SPFH:600 mb +SPFH:650 mb +SPFH:700 mb +SPFH:70 mb +SPFH:750 mb +SPFH:800 mb +SPFH:850 mb +SPFH:900 mb +SPFH:925 mb +SPFH:950 mb +SPFH:975 mb +SPFH:1 mb +SPFH:2 mb +SPFH:3 mb +SPFH:5 mb +SPFH:7 mb +SPFH:0.1 mb +SPFH:0.2 mb +SPFH:0.4 mb +SPFH:0.7 mb +SPFH:0.01 mb +SPFH:0.02 mb +SPFH:0.04 mb +SPFH:0.07 mb +SPFH:2 m above ground +SPFH:30-0 mb above ground +SPFH:80 m above ground +SUNSD:surface +TCDC:50 mb +TCDC:1000 mb +TCDC:100 mb +TCDC:150 mb +TCDC:200 mb +TCDC:250 mb +TCDC:300 mb +TCDC:350 mb +TCDC:400 mb +TCDC:450 mb +TCDC:500 mb +TCDC:550 mb +TCDC:600 mb +TCDC:650 mb +TCDC:700 mb +TCDC:750 mb +TCDC:800 mb +TCDC:850 mb +TCDC:900 mb +TCDC:925 mb +TCDC:950 mb +TCDC:975 mb +TCDC:entire atmosphere +TCDC:convective cloud layer +TSOIL:0-0.1 m below ground +TSOIL:0.1-0.4 m below ground +TSOIL:0.4-1 m below ground +TMP:0.995 sigma level +TMP:1000 mb +TMP:100 m above ground +TMP:100 mb +TMP:10 mb +TMP:15 mb +TSOIL:1-2 m below ground +TMP:150 mb +TMP:1829 m above mean sea level +TMP:200 mb +TMP:20 mb +TMP:250 mb +TMP:2743 m above mean sea level +TMP:2 m above ground +TMP:30-0 mb above ground +TMP:300 mb +TMP:30 mb +TMP:350 mb +TMP:3658 m above mean sea level +TMP:400 mb +TMP:40 mb +TMP:450 mb +TMP:500 mb +TMP:50 mb +TMP:550 mb +TMP:600 mb +TMP:650 mb +TMP:700 mb +TMP:70 mb +TMP:750 mb +TMP:800 mb +TMP:80 m above ground +TMP:850 mb +TMP:900 mb +TMP:925 mb +TMP:950 mb +TMP:975 mb +TMP:1 mb +TMP:2 mb +TMP:3 mb +TMP:5 mb +TMP:7 mb +TMP:0.1 mb +TMP:0.2 mb +TMP:0.4 mb +TMP:0.7 mb +TMP:0.01 mb +TMP:0.02 mb +TMP:0.04 mb +TMP:0.07 mb +TMP:max wind +TMP:PV=-2e-06 (Km^2/kg/s) surface +TMP:PV=2e-06 (Km^2/kg/s) surface +TMP:surface +TMP:tropopause +TOZNE:entire atmosphere (considered as a single layer) +UGRD:0.995 sigma level +UGRD:1000 mb +UGRD:100 m above ground +UGRD:100 mb +UGRD:10 m above ground +UGRD:10 mb +UGRD:150 mb +UGRD:15 mb +UGRD:1829 m above mean sea level +UGRD:200 mb +UGRD:20 mb +UGRD:20 m above ground +UGRD:250 mb +UGRD:2743 m above mean sea level +UGRD:30-0 mb above ground +UGRD:300 mb +UGRD:30 mb +UGRD:30 m above ground +UGRD:350 mb +UGRD:3658 m above mean sea level +UGRD:400 mb +UGRD:40 mb +UGRD:40 m above ground +UGRD:450 mb +UGRD:500 mb +UGRD:50 mb +UGRD:50 m above ground +UGRD:550 mb +UGRD:600 mb +UGRD:650 mb +UGRD:700 mb +UGRD:70 mb +UGRD:750 mb +UGRD:800 mb +UGRD:80 m above ground +UGRD:850 mb +UGRD:900 mb +UGRD:925 mb +UGRD:950 mb +UGRD:975 mb +UGRD:1 mb +UGRD:2 mb +UGRD:3 mb +UGRD:5 mb +UGRD:7 mb +UGRD:0.1 mb +UGRD:0.2 mb +UGRD:0.4 mb +UGRD:0.7 mb +UGRD:0.01 mb +UGRD:0.02 mb +UGRD:0.04 mb +UGRD:0.07 mb +UGRD:max wind +UGRD:planetary boundary layer +UGRD:PV=-2e-06 (Km^2/kg/s) surface +UGRD:PV=2e-06 (Km^2/kg/s) surface +UGRD:tropopause +USTM:6000-0 m above ground +VEG:surface +VGRD:0.995 sigma level +VGRD:1000 mb +VGRD:100 m above ground +VGRD:100 mb +VGRD:10 m above ground +VGRD:10 mb +VGRD:150 mb +VGRD:15 mb +VGRD:1829 m above mean sea level +VGRD:200 mb +VGRD:20 mb +VGRD:20 m above ground +VGRD:250 mb +VGRD:2743 m above mean sea level +VGRD:30-0 mb above ground +VGRD:300 mb +VGRD:30 mb +VGRD:30 m above ground +VGRD:350 mb +VGRD:3658 m above mean sea level +VGRD:400 mb +VGRD:40 mb +VGRD:40 m above ground +VGRD:450 mb +VGRD:500 mb +VGRD:50 mb +VGRD:50 m above ground +VGRD:550 mb +VGRD:600 mb +VGRD:650 mb +VGRD:700 mb +VGRD:70 mb +VGRD:750 mb +VGRD:800 mb +VGRD:80 m above ground +VGRD:850 mb +VGRD:900 mb +VGRD:925 mb +VGRD:950 mb +VGRD:975 mb +VGRD:1 mb +VGRD:2 mb +VGRD:3 mb +VGRD:5 mb +VGRD:7 mb +VGRD:0.1 mb +VGRD:0.2 mb +VGRD:0.4 mb +VGRD:0.7 mb +VGRD:0.01 mb +VGRD:0.02 mb +VGRD:0.04 mb +VGRD:0.07 mb +VGRD:max wind +VGRD:planetary boundary layer +VGRD:PV=-2e-06 (Km^2/kg/s) surface +VGRD:PV=2e-06 (Km^2/kg/s) surface +VGRD:tropopause +VRATE:planetary boundary layer +VSTM:6000-0 m above ground +DZDT:1000 mb +DZDT:100 mb +DZDT:10 mb +DZDT:15 mb +DZDT:150 mb +DZDT:20 mb +DZDT:200 mb +DZDT:250 mb +DZDT:300 mb +DZDT:30 mb +DZDT:350 mb +DZDT:40 mb +DZDT:400 mb +DZDT:450 mb +DZDT:500 mb +DZDT:50 mb +DZDT:550 mb +DZDT:600 mb +DZDT:650 mb +DZDT:700 mb +DZDT:70 mb +DZDT:750 mb +DZDT:800 mb +DZDT:850 mb +DZDT:900 mb +DZDT:925 mb +DZDT:950 mb +DZDT:975 mb +DZDT:1 mb +DZDT:2 mb +DZDT:3 mb +DZDT:5 mb +DZDT:7 mb +DZDT:0.1 mb +DZDT:0.2 mb +DZDT:0.4 mb +DZDT:0.7 mb +DZDT:0.01 mb +DZDT:0.02 mb +DZDT:0.04 mb +DZDT:0.07 mb +VVEL:0.995 sigma level +VVEL:1000 mb +VVEL:100 mb +VVEL:10 mb +VVEL:15 mb +VVEL:150 mb +VVEL:20 mb +VVEL:200 mb +VVEL:250 mb +VVEL:300 mb +VVEL:30 mb +VVEL:350 mb +VVEL:40 mb +VVEL:400 mb +VVEL:450 mb +VVEL:500 mb +VVEL:50 mb +VVEL:550 mb +VVEL:600 mb +VVEL:650 mb +VVEL:700 mb +VVEL:70 mb +VVEL:750 mb +VVEL:800 mb +VVEL:850 mb +VVEL:900 mb +VVEL:925 mb +VVEL:950 mb +VVEL:975 mb +VVEL:1 mb +VVEL:2 mb +VVEL:3 mb +VVEL:5 mb +VVEL:7 mb +VVEL:0.1 mb +VVEL:0.2 mb +VVEL:0.4 mb +VVEL:0.7 mb +VVEL:0.01 mb +VVEL:0.02 mb +VVEL:0.04 mb +VVEL:0.07 mb +VWSH:PV=-2e-06 (Km^2/kg/s) surface +VWSH:PV=2e-06 (Km^2/kg/s) surface +VWSH:tropopause +WEASD:surface +WILT:surface +SNOD:surface +VIS:surface +ICEG:10 m above mean sea level diff --git a/parm/post/global_master-catchup_parmlist_g2 b/parm/post/global_master-catchup_parmlist_g2 new file mode 100644 index 0000000000..a92a609bfc --- /dev/null +++ b/parm/post/global_master-catchup_parmlist_g2 @@ -0,0 +1,349 @@ +ABSV:125 mb +ABSV:175 mb +ABSV:1 mb +ABSV:225 mb +ABSV:275 mb +ABSV:2 mb +ABSV:325 mb +ABSV:375 mb +ABSV:3 mb +ABSV:425 mb +ABSV:475 mb +ABSV:525 mb +ABSV:575 mb +ABSV:5 mb +ABSV:625 mb +ABSV:675 mb +ABSV:725 mb +ABSV:775 mb +ABSV:7 mb +ABSV:825 mb +ABSV:875 mb +CDUVB:surface +CLMR:70 mb +CLMR:125 mb +CLMR:175 mb +CLMR:225 mb +CLMR:275 mb +CLMR:325 mb +CLMR:375 mb +CLMR:425 mb +CLMR:475 mb +CLMR:525 mb +CLMR:575 mb +CLMR:625 mb +CLMR:675 mb +CLMR:725 mb +CLMR:775 mb +CLMR:825 mb +CLMR:875 mb +CNWAT:surface +DUVB:surface +GRLE:70 mb +GRLE:125 mb +GRLE:175 mb +GRLE:225 mb +GRLE:275 mb +GRLE:325 mb +GRLE:375 mb +GRLE:425 mb +GRLE:475 mb +GRLE:525 mb +GRLE:575 mb +GRLE:625 mb +GRLE:675 mb +GRLE:725 mb +GRLE:775 mb +GRLE:825 mb +GRLE:875 mb +HGT:125 mb +HGT:175 mb +HGT:1 mb +HGT:225 mb +HGT:275 mb +HGT:2 mb +HGT:325 mb +HGT:375 mb +HGT:3 mb +HGT:425 mb +HGT:475 mb +HGT:525 mb +HGT:575 mb +HGT:5 mb +HGT:625 mb +HGT:675 mb +HGT:725 mb +HGT:775 mb +HGT:7 mb +HGT:825 mb +HGT:875 mb +HGT:PV=-1.5e-06 (Km^2/kg/s) surface +HGT:PV=1.5e-06 (Km^2/kg/s) surface +HGT:PV=-1e-06 (Km^2/kg/s) surface +HGT:PV=1e-06 (Km^2/kg/s) surface +HGT:PV=-5e-07 (Km^2/kg/s) surface +HGT:PV=5e-07 (Km^2/kg/s) surface +ICETK:surface +ICMR:70 mb +ICMR:125 mb +ICMR:175 mb +ICMR:225 mb +ICMR:275 mb +ICMR:325 mb +ICMR:375 mb +ICMR:425 mb +ICMR:475 mb +ICMR:525 mb +ICMR:575 mb +ICMR:625 mb +ICMR:675 mb +ICMR:725 mb +ICMR:775 mb +ICMR:825 mb +ICMR:875 mb +O3MR:1 mb +O3MR:2 mb +O3MR:3 mb +O3MR:5 mb +O3MR:7 mb +PRES:PV=-1.5e-06 (Km^2/kg/s) surface +PRES:PV=1.5e-06 (Km^2/kg/s) surface +PRES:PV=-1e-06 (Km^2/kg/s) surface +PRES:PV=1e-06 (Km^2/kg/s) surface +PRES:PV=-5e-07 (Km^2/kg/s) surface +PRES:PV=5e-07 (Km^2/kg/s) surface +RH:120-90 mb above ground +RH:125 mb +RH:150-120 mb above ground +RH:175 mb +RH:180-150 mb above ground +RH:1 mb +RH:225 mb +RH:275 mb +RH:2 mb +RH:325 mb +RH:375 mb +RH:3 mb +RH:425 mb +RH:475 mb +RH:525 mb +RH:575 mb +RH:5 mb +RH:60-30 mb above ground +RH:625 mb +RH:675 mb +RH:725 mb +RH:775 mb +RH:7 mb +RH:825 mb +RH:875 mb +RH:90-60 mb above ground +RWMR:70 mb +RWMR:125 mb +RWMR:175 mb +RWMR:225 mb +RWMR:275 mb +RWMR:325 mb +RWMR:375 mb +RWMR:425 mb +RWMR:475 mb +RWMR:525 mb +RWMR:575 mb +RWMR:625 mb +RWMR:675 mb +RWMR:725 mb +RWMR:775 mb +RWMR:825 mb +RWMR:875 mb +SOILL:0-0.1 m below ground +SOILL:0.1-0.4 m below ground +SOILL:0.4-1 m below ground +SOILL:1-2 m below ground +SPFH:120-90 mb above ground +SPFH:150-120 mb above ground +SPFH:180-150 mb above ground +SPFH:60-30 mb above ground +SPFH:90-60 mb above ground +SNMR:70 mb +SNMR:125 mb +SNMR:175 mb +SNMR:225 mb +SNMR:275 mb +SNMR:325 mb +SNMR:375 mb +SNMR:425 mb +SNMR:475 mb +SNMR:525 mb +SNMR:575 mb +SNMR:625 mb +SNMR:675 mb +SNMR:725 mb +SNMR:775 mb +SNMR:825 mb +SNMR:875 mb +TCDC:70 mb +TCDC:125 mb +TCDC:175 mb +TCDC:225 mb +TCDC:275 mb +TCDC:325 mb +TCDC:375 mb +TCDC:425 mb +TCDC:475 mb +TCDC:525 mb +TCDC:575 mb +TCDC:625 mb +TCDC:675 mb +TCDC:725 mb +TCDC:775 mb +TCDC:825 mb +TCDC:875 mb +TMP:120-90 mb above ground +TMP:125 mb +TMP:150-120 mb above ground +TMP:175 mb +TMP:180-150 mb above ground +TMP:1 mb +TMP:225 mb +TMP:275 mb +TMP:2 mb +TMP:305 m above mean sea level +TMP:325 mb +TMP:375 mb +TMP:3 mb +TMP:425 mb +TMP:4572 m above mean sea level +TMP:457 m above mean sea level +TMP:475 mb +TMP:525 mb +TMP:575 mb +TMP:5 mb +TMP:60-30 mb above ground +TMP:610 m above mean sea level +TMP:625 mb +TMP:675 mb +TMP:725 mb +TMP:775 mb +TMP:7 mb +TMP:825 mb +TMP:875 mb +TMP:90-60 mb above ground +TMP:914 m above mean sea level +TMP:PV=-1.5e-06 (Km^2/kg/s) surface +TMP:PV=1.5e-06 (Km^2/kg/s) surface +TMP:PV=-1e-06 (Km^2/kg/s) surface +TMP:PV=1e-06 (Km^2/kg/s) surface +TMP:PV=-5e-07 (Km^2/kg/s) surface +TMP:PV=5e-07 (Km^2/kg/s) surface +UGRD:120-90 mb above ground +UGRD:125 mb +UGRD:150-120 mb above ground +UGRD:175 mb +UGRD:180-150 mb above ground +UGRD:1 mb +UGRD:225 mb +UGRD:275 mb +UGRD:2 mb +UGRD:305 m above mean sea level +UGRD:325 mb +UGRD:375 mb +UGRD:3 mb +UGRD:425 mb +UGRD:4572 m above mean sea level +UGRD:457 m above mean sea level +UGRD:475 mb +UGRD:525 mb +UGRD:575 mb +UGRD:5 mb +UGRD:60-30 mb above ground +UGRD:610 m above mean sea level +UGRD:625 mb +UGRD:675 mb +UGRD:725 mb +UGRD:775 mb +UGRD:7 mb +UGRD:825 mb +UGRD:875 mb +UGRD:90-60 mb above ground +UGRD:914 m above mean sea level +UGRD:PV=-1.5e-06 (Km^2/kg/s) surface +UGRD:PV=1.5e-06 (Km^2/kg/s) surface +UGRD:PV=-1e-06 (Km^2/kg/s) surface +UGRD:PV=1e-06 (Km^2/kg/s) surface +UGRD:PV=-5e-07 (Km^2/kg/s) surface +UGRD:PV=5e-07 (Km^2/kg/s) surface +VGRD:120-90 mb above ground +VGRD:125 mb +VGRD:150-120 mb above ground +VGRD:175 mb +VGRD:180-150 mb above ground +VGRD:1 mb +VGRD:225 mb +VGRD:275 mb +VGRD:2 mb +VGRD:305 m above mean sea level +VGRD:325 mb +VGRD:375 mb +VGRD:3 mb +VGRD:425 mb +VGRD:4572 m above mean sea level +VGRD:457 m above mean sea level +VGRD:475 mb +VGRD:525 mb +VGRD:575 mb +VGRD:5 mb +VGRD:60-30 mb above ground +VGRD:610 m above mean sea level +VGRD:625 mb +VGRD:675 mb +VGRD:725 mb +VGRD:775 mb +VGRD:7 mb +VGRD:825 mb +VGRD:875 mb +VGRD:90-60 mb above ground +VGRD:914 m above mean sea level +VGRD:PV=-1.5e-06 (Km^2/kg/s) surface +VGRD:PV=1.5e-06 (Km^2/kg/s) surface +VGRD:PV=-1e-06 (Km^2/kg/s) surface +VGRD:PV=1e-06 (Km^2/kg/s) surface +VGRD:PV=-5e-07 (Km^2/kg/s) surface +VGRD:PV=5e-07 (Km^2/kg/s) surface +DZDT:125 mb +DZDT:175 mb +DZDT:225 mb +DZDT:275 mb +DZDT:325 mb +DZDT:375 mb +DZDT:425 mb +DZDT:475 mb +DZDT:525 mb +DZDT:575 mb +DZDT:625 mb +DZDT:675 mb +DZDT:725 mb +DZDT:775 mb +DZDT:825 mb +DZDT:875 mb +VVEL:125 mb +VVEL:175 mb +VVEL:225 mb +VVEL:275 mb +VVEL:325 mb +VVEL:375 mb +VVEL:425 mb +VVEL:475 mb +VVEL:525 mb +VVEL:575 mb +VVEL:625 mb +VVEL:675 mb +VVEL:725 mb +VVEL:775 mb +VVEL:825 mb +VVEL:875 mb +VWSH:PV=-1.5e-06 (Km^2/kg/s) surface +VWSH:PV=1.5e-06 (Km^2/kg/s) surface +VWSH:PV=-1e-06 (Km^2/kg/s) surface +VWSH:PV=1e-06 (Km^2/kg/s) surface +VWSH:PV=-5e-07 (Km^2/kg/s) surface +VWSH:PV=5e-07 (Km^2/kg/s) surface diff --git a/parm/post/itag.jinja b/parm/post/itag.jinja new file mode 100644 index 0000000000..07aa41f8da --- /dev/null +++ b/parm/post/itag.jinja @@ -0,0 +1,16 @@ +&model_inputs + filename = "{{ atmos_filename }}", + ioform = "{{ ioform }}", + grib = "{{ grib_version }}", + datestr = "{{ valid_datetime | strftime('%Y-%m-%d_%H:%M:%S') }}", + modelname = "{{ NET | upper }}", + submodelname = "NONE", + filenameflux = "{{ flux_filename }}", + filenameflat = "postxconfig-NT.txt" +/ +&nampgb + kpo = {{ po | length }}, + po = {{ po | join(', ') }}, + rdaod = {{ rdaod | to_f90bool }} +/ + diff --git a/parm/post/upp.yaml b/parm/post/upp.yaml new file mode 100644 index 0000000000..651f3c12a8 --- /dev/null +++ b/parm/post/upp.yaml @@ -0,0 +1,90 @@ +upp: + config: + grib_version: "grib2" + ioform: "netcdfpara" + po: [1000.,975.,950.,925.,900.,875.,850.,825.,800.,775.,750.,725.,700.,675.,650.,625.,600.,575.,550.,525.,500.,475.,450.,425.,400.,375.,350.,325.,300.,275.,250.,225.,200.,175.,150.,125.,100.,70.,50.,40.,30.,20.,15.,10.,7.,5.,3.,2.,1.,0.7,0.4,0.2,0.1,0.07,0.04,0.02,0.01] + rdaod: False + fix_data: + mkdir: + - "{{ DATA }}" + copy: + - ["{{ 'g2tmpl_ROOT' | getenv }}/share/params_grib2_tbl_new", "{{ DATA }}/params_grib2_tbl_new"] + - ["{{ HOMEgfs }}/parm/post/nam_micro_lookup.dat", "{{ DATA }}/eta_micro_lookup.dat"] + - ["{{ HOMEgfs }}/exec/upp.x", "{{ DATA }}/"] + - ["{{ HOMEgfs }}/parm/post/itag.jinja", "{{ DATA }}/"] + +analysis: + config: + rdaod: True + data_in: + copy: + - ["{{ HOMEgfs }}/parm/post/postxconfig-NT-GFS-ANL.txt", "{{ DATA }}/postxconfig-NT.txt"] + - ["{{ COM_ATMOS_ANALYSIS }}/{{ RUN }}.t{{ current_cycle | strftime('%H') }}z.atmanl.nc", "{{ DATA }}/{{ atmos_filename }}"] + - ["{{ COM_ATMOS_ANALYSIS }}/{{ RUN }}.t{{ current_cycle | strftime('%H') }}z.sfcanl.nc", "{{ DATA }}/{{ flux_filename }}"] + data_out: + copy: + - ["{{ DATA }}/GFSPRS.GrbF00", "{{ COM_ATMOS_MASTER }}/{{ RUN }}.t{{ current_cycle | strftime('%H') }}z.master.grb2anl"] + - ["{{ DATA }}/GFSPRS.GrbF00.idx", "{{ COM_ATMOS_MASTER }}/{{ RUN }}.t{{ current_cycle | strftime('%H') }}z.master.grb2ianl"] + +forecast: + config: + rdaod: False + data_in: + copy: + {% if forecast_hour == 0 %} + - ["{{ HOMEgfs }}/parm/post/postxconfig-NT-GFS-F00-TWO.txt", "{{ DATA }}/postxconfig-NT.txt"] + {% else %} + - ["{{ HOMEgfs }}/parm/post/postxconfig-NT-GFS-TWO.txt", "{{ DATA }}/postxconfig-NT.txt"] + {% endif %} + - ["{{ COM_ATMOS_HISTORY }}/{{ RUN }}.t{{ current_cycle | strftime('%H') }}z.atmf{{ '%03d' % forecast_hour }}.nc", "{{ DATA }}/{{ atmos_filename }}"] + - ["{{ COM_ATMOS_HISTORY }}/{{ RUN }}.t{{ current_cycle | strftime('%H') }}z.sfcf{{ '%03d' % forecast_hour }}.nc", "{{ DATA }}/{{ flux_filename }}"] + data_out: + copy: + - ["{{ DATA }}/GFSPRS.GrbF{{ '%02d' % forecast_hour }}", "{{ COM_ATMOS_MASTER }}/{{ RUN }}.t{{ current_cycle | strftime('%H') }}z.masterf{{ '%03d' % forecast_hour }}.grb2"] + - ["{{ DATA }}/GFSFLX.GrbF{{ '%02d' % forecast_hour }}", "{{ COM_ATMOS_MASTER }}/{{ RUN }}.t{{ current_cycle | strftime('%H') }}z.sfluxf{{ '%03d' % forecast_hour }}.grb2"] + - ["{{ DATA }}/GFSPRS.GrbF{{ '%02d' % forecast_hour }}.idx", "{{ COM_ATMOS_MASTER }}/{{ RUN }}.t{{ current_cycle | strftime('%H') }}z.masterf{{ '%03d' % forecast_hour }}.grb2.idx"] + - ["{{ DATA }}/GFSFLX.GrbF{{ '%02d' % forecast_hour }}.idx", "{{ COM_ATMOS_MASTER }}/{{ RUN }}.t{{ current_cycle | strftime('%H') }}z.sfluxf{{ '%03d' % forecast_hour }}.grb2.idx"] + +goes: + config: + rdaod: True + data_in: + copy: + {% set crtm_coefficients = [ + 'amsre_aqua', + 'imgr_g11', 'imgr_g12', 'imgr_g13', 'imgr_g15', + 'imgr_mt1r', 'imgr_mt2', 'imgr_insat3d', + 'seviri_m10', + 'ssmi_f13', 'ssmi_f14', 'ssmi_f15', 'ssmis_f16', 'ssmis_f17', 'ssmis_f18', 'ssmis_f19', 'ssmis_f20', + 'tmi_trmm', + 'abi_gr', + 'ahi_himawari8' + ] %} + {% for coefficient in crtm_coefficients %} + - ["{{ 'CRTM_FIX' | getenv }}/{{ coefficient }}.TauCoeff.bin", "{{ DATA }}/"] + - ["{{ 'CRTM_FIX' | getenv }}/{{ coefficient }}.SpcCoeff.bin", "{{ DATA }}/"] + {% endfor %} + {% for coefficient in ['v.seviri_m10'] %} + - ["{{ 'CRTM_FIX' | getenv }}/{{ coefficient }}.SpcCoeff.bin", "{{ DATA }}/"] + {% endfor %} + {% set emission_coefficients = [ + 'FASTEM4.MWwater', 'FASTEM5.MWwater', 'FASTEM6.MWwater', + 'IGBP.IRland', 'IGBP.VISland', + 'Nalli.IRwater', + 'NPOESS.IRice', 'NPOESS.IRland', 'NPOESS.IRsnow', + 'NPOESS.VISice', 'NPOESS.VISland', 'NPOESS.VISsnow', 'NPOESS.VISwater', + 'USGS.IRland', 'USGS.VISland', + 'WuSmith.IRwater' + ] %} + {% for coefficient in emission_coefficients %} + - ["{{ 'CRTM_FIX' | getenv }}/{{ coefficient }}.EmisCoeff.bin", "{{ DATA }}/"] + {% endfor %} + - ["{{ 'CRTM_FIX' | getenv }}/AerosolCoeff.bin", "{{ DATA }}/"] + - ["{{ 'CRTM_FIX' | getenv }}/CloudCoeff.bin", "{{ DATA }}/"] + - ["{{ HOMEgfs }}/parm/post/postxconfig-NT-GFS-GOES.txt", "{{ DATA }}/postxconfig-NT.txt"] + - ["{{ COM_ATMOS_HISTORY }}/{{ RUN }}.t{{ current_cycle | strftime('%H') }}z.atmf{{ '%03d' % forecast_hour }}.nc", "{{ DATA }}/{{ atmos_filename }}"] + - ["{{ COM_ATMOS_HISTORY }}/{{ RUN }}.t{{ current_cycle | strftime('%H') }}z.sfcf{{ '%03d' % forecast_hour }}.nc", "{{ DATA }}/{{ flux_filename }}"] + data_out: + copy: + - ["{{ DATA }}/GFSPRS.GrbF{{ '%02d' % forecast_hour }}", "{{ COM_ATMOS_MASTER }}/{{ RUN }}.t{{ current_cycle | strftime('%H') }}z.goesmasterf{{ '%03d' % forecast_hour }}.grb2"] + - ["{{ DATA }}/GFSPRS.GrbF{{ '%02d' % forecast_hour }}.idx", "{{ COM_ATMOS_MASTER }}/{{ RUN }}.t{{ current_cycle | strftime('%H') }}z.goesmasterf{{ '%03d' % forecast_hour }}.grb2.idx"] diff --git a/parm/product/bufr_ij13km.txt b/parm/product/bufr_ij13km.txt index 2f50d036fe..568717de72 100644 --- a/parm/product/bufr_ij13km.txt +++ b/parm/product/bufr_ij13km.txt @@ -727,1383 +727,1389 @@ 727 1556 281 57.00 -177.70 728 2053 491 32.40 -119.50 729 2065 491 32.49 -118.03 - 730 1688 568 23.40 -162.30 - 731 1726 621 17.20 -157.80 - 732 1700 603 19.30 -160.80 - 733 1771 619 17.40 -152.50 - 734 73 294 55.52 8.55 - 735 41 321 52.31 4.76 - 736 59 322 52.28 6.89 - 737 1783 258 59.77 -151.17 - 738 54 350 48.98 6.25 - 739 2236 514 29.70 -98.01 - 740 2334 459 36.25 -86.57 - 741 2257 459 36.18 -95.56 - 742 2057 467 35.24 -119.03 - 743 2303 438 38.62 -90.18 - 744 2183 440 38.46 -104.18 - 745 2376 414 41.50 -81.60 - 746 2111 400 43.11 -112.68 - 747 2084 363 47.47 -115.80 - 748 18 416 41.28 2.07 - 749 3036 423 40.42 -4.25 - 750 3068 431 39.50 -0.47 - 751 2212 456 36.50 -100.80 - 752 2205 509 30.30 -101.70 - 753 2198 532 27.70 -102.50 - 754 2227 508 30.50 -99.10 - 755 2230 526 28.40 -98.70 - 756 2229 544 26.30 -98.80 - 757 2241 560 24.40 -97.40 - 758 2259 547 25.90 -95.30 - 759 2267 559 24.50 -94.40 - 760 2257 569 23.30 -95.60 - 761 2269 612 18.30 -94.20 - 762 2278 585 21.40 -93.10 - 763 2291 569 23.30 -91.60 - 764 2316 566 23.70 -88.70 - 765 2347 572 23.00 -85.00 - 766 2236 567 23.50 -98.00 - 767 2292 375 46.02 -91.45 - 768 2366 437 38.83 -82.80 - 769 2402 436 38.88 -78.52 - 770 2400 430 39.62 -78.76 - 771 2415 430 39.61 -77.01 - 772 76 315 53.05 8.79 - 773 115 320 52.47 13.40 - 774 62 334 50.87 7.15 - 775 74 341 50.05 8.58 - 776 79 352 48.68 9.22 - 777 101 355 48.35 11.78 - 778 122 356 48.23 14.19 - 779 142 357 48.12 16.57 - 780 122 340 50.10 14.26 - 781 158 304 54.38 18.47 - 782 179 323 52.17 20.97 - 783 145 332 51.10 16.89 - 784 164 363 47.43 19.18 - 785 176 386 44.78 20.53 - 786 200 404 42.69 23.41 - 787 235 405 42.57 27.52 - 788 238 399 43.23 27.83 - 789 213 409 42.07 24.86 - 790 223 388 44.57 26.09 - 791 106 380 45.50 12.33 - 792 108 411 41.80 12.60 - 793 105 411 41.80 12.23 - 794 207 465 35.53 24.15 - 795 249 418 40.97 29.08 - 796 282 425 40.13 33.00 - 797 344 446 37.75 40.20 - 798 284 468 35.15 33.28 - 799 1594 218 64.43 -173.23 - 800 258 259 59.58 30.18 - 801 321 292 55.75 37.57 - 802 708 298 55.03 82.90 - 803 1126 400 43.12 131.90 - 804 657 399 43.23 76.93 - 805 384 412 41.68 44.95 - 806 636 400 43.07 74.47 - 807 592 416 41.27 69.27 - 808 308 495 31.98 35.98 - 809 301 496 31.87 35.22 - 810 400 556 24.88 46.77 - 811 399 557 24.72 46.72 - 812 410 519 29.22 47.98 - 813 369 458 36.32 43.15 - 814 378 484 33.22 44.23 - 815 408 507 30.57 47.78 - 816 419 529 28.00 49.00 - 817 427 538 27.00 50.00 - 818 438 463 35.68 51.32 - 819 525 503 31.05 61.47 - 820 602 474 34.42 70.47 - 821 562 501 31.31 65.85 - 822 441 552 25.25 51.57 - 823 473 552 25.25 55.33 - 824 467 560 24.42 54.65 - 825 2486 115 76.53 -68.75 - 826 659 524 28.58 77.20 - 827 711 617 17.72 83.30 - 828 915 399 43.20 107.17 - 829 729 532 27.70 85.37 - 830 975 577 22.32 114.17 - 831 1037 554 25.03 121.52 - 832 989 676 10.72 115.83 - 833 1083 447 37.55 126.80 - 834 1101 468 35.18 128.93 - 835 1207 421 40.70 141.37 - 836 1169 467 35.25 136.93 - 837 1193 465 35.55 139.78 - 838 1198 463 35.76 140.38 - 839 1157 472 34.68 135.53 - 840 856 723 5.30 100.27 - 841 869 745 2.75 101.72 - 842 886 756 1.38 103.72 - 843 896 573 22.82 104.97 - 844 903 589 21.02 105.80 - 845 911 676 10.82 106.67 - 846 1081 327 51.72 126.65 - 847 994 428 39.80 116.47 - 848 1027 460 36.07 120.33 - 849 888 506 30.67 104.02 - 850 930 475 34.30 108.93 - 851 972 473 34.52 113.83 - 852 1037 502 31.17 121.43 - 853 2941 530 27.93 -15.38 - 854 3007 481 33.57 -7.67 - 855 3004 498 31.62 -8.03 - 856 47 573 22.82 5.47 - 857 19 653 13.48 2.17 - 858 3047 625 16.72 -3.00 - 859 2923 642 14.73 -17.50 - 860 2929 654 13.35 -16.80 - 861 618 830 -7.30 72.42 - 862 199 561 24.22 23.30 - 863 233 501 31.33 27.22 - 864 315 779 -1.28 36.83 - 865 317 797 -3.42 37.07 - 866 327 810 -4.92 38.23 - 867 132 805 -4.38 15.45 - 868 29 712 6.58 3.33 - 869 3071 720 5.60 -0.17 - 870 3008 705 7.38 -7.53 - 871 3039 723 5.25 -3.93 - 872 2984 715 6.23 -10.37 - 873 113 844 -8.85 13.23 - 874 265 976 -24.37 31.05 - 875 159 1058 -33.97 18.60 - 876 1735 159 71.30 -156.78 - 877 1847 169 70.13 -143.63 - 878 1655 180 68.88 -166.13 - 879 1685 197 66.87 -162.63 - 880 1774 176 69.37 -152.13 - 881 1780 197 66.92 -151.52 - 882 1775 212 65.17 -152.10 - 883 1833 200 66.57 -145.27 - 884 1661 217 64.50 -165.43 - 885 1700 223 63.88 -160.80 - 886 1656 241 61.78 -166.03 - 887 1692 249 60.78 -161.80 - 888 1733 215 64.73 -156.93 - 889 1745 230 62.97 -155.62 - 890 1741 231 62.90 -155.98 - 891 1745 246 61.10 -155.58 - 892 1792 236 62.30 -150.10 - 893 1782 239 61.97 -151.18 - 894 1782 251 60.57 -151.25 - 895 1811 215 64.82 -147.87 - 896 1817 216 64.67 -147.10 - 897 1829 222 63.97 -145.70 - 898 1829 222 64.00 -145.73 - 899 1831 237 62.15 -145.45 - 900 1794 245 61.25 -149.80 - 901 1792 246 61.17 -150.02 - 902 1800 242 61.60 -149.08 - 903 1824 246 61.13 -146.35 - 904 1797 255 60.12 -149.45 - 905 1868 215 64.78 -141.15 - 906 1861 230 62.97 -141.93 - 907 1831 252 60.50 -145.50 - 908 1690 267 58.65 -162.07 - 909 1620 280 57.15 -170.22 - 910 1684 297 55.20 -162.73 - 911 1720 264 59.05 -158.52 - 912 1736 267 58.68 -156.65 - 913 1751 258 59.75 -154.92 - 914 1780 259 59.63 -151.50 - 915 1824 261 59.43 -146.33 - 916 1771 275 57.75 -152.50 - 917 1881 260 59.52 -139.67 - 918 1918 260 59.47 -135.30 - 919 1914 269 58.42 -135.73 - 920 1918 281 57.07 -135.35 - 921 1924 270 58.37 -134.58 - 922 1938 283 56.82 -132.97 - 923 1943 286 56.48 -132.37 - 924 1949 296 55.35 -131.70 - 925 1950 298 55.03 -131.57 - 926 1486 318 52.72 174.12 - 927 1565 325 51.88 -176.65 - 928 1632 316 52.95 -168.85 - 929 1651 308 53.90 -166.55 - 930 1954 325 51.93 -131.02 - 931 1991 211 65.28 -126.75 - 932 2003 153 72.00 -125.28 - 933 2070 288 56.23 -117.43 - 934 2054 117 76.23 -119.33 - 935 2210 283 56.87 -101.08 - 936 2237 292 55.75 -97.87 - 937 2379 181 68.78 -81.25 - 938 2541 64 82.50 -62.33 - 939 2028 349 49.03 -122.37 - 940 1986 335 50.68 -127.37 - 941 2099 311 53.55 -114.10 - 942 2103 313 53.30 -113.58 - 943 2146 306 54.13 -108.52 - 944 2124 339 50.27 -111.18 - 945 2185 313 53.33 -104.00 - 946 2462 368 46.90 -71.50 - 947 2568 362 47.57 -59.17 - 948 2054 342 49.95 -119.40 - 949 1963 269 58.42 -130.00 - 950 2390 399 43.17 -79.93 - 951 2387 397 43.47 -80.38 - 952 2531 385 44.88 -63.50 - 953 2519 384 44.98 -64.92 - 954 2516 395 43.72 -65.25 - 955 2123 207 65.77 -111.25 - 956 2364 407 42.27 -82.97 - 957 2560 393 43.93 -60.02 - 958 2531 387 44.63 -63.50 - 959 2508 394 43.87 -66.10 - 960 2510 381 45.32 -65.88 - 961 2380 401 43.03 -81.15 - 962 2393 395 43.67 -79.63 - 963 2413 376 45.95 -77.32 - 964 2443 380 45.47 -73.75 - 965 2441 378 45.68 -74.03 - 966 2427 381 45.32 -75.67 - 967 2404 390 44.23 -78.37 - 968 2396 384 44.97 -79.30 - 969 2380 386 44.75 -81.10 - 970 2506 377 45.83 -66.43 - 971 2521 374 46.12 -64.68 - 972 2534 373 46.28 -63.13 - 973 2560 374 46.17 -60.05 - 974 2463 369 46.80 -71.40 - 975 2424 372 46.38 -75.97 - 976 2409 358 48.05 -77.78 - 977 2395 372 46.37 -79.42 - 978 2349 359 47.97 -84.78 - 979 2378 353 48.57 -81.37 - 980 2323 322 52.23 -87.88 - 981 2310 355 48.37 -89.32 - 982 2019 353 48.65 -123.43 - 983 2623 362 47.62 -52.73 - 984 2607 350 48.95 -54.57 - 985 2583 348 49.22 -57.40 - 986 2507 339 50.22 -66.27 - 987 2573 354 48.53 -58.55 - 988 2557 313 53.32 -60.42 - 989 2437 343 49.77 -74.53 - 990 2444 309 53.75 -73.67 - 991 2331 343 49.78 -86.93 - 992 2384 330 51.27 -80.65 - 993 2385 330 51.28 -80.60 - 994 2303 329 51.45 -90.20 - 995 2306 309 53.83 -89.87 - 996 2267 343 49.78 -94.37 - 997 2243 342 49.90 -97.23 - 998 2222 343 49.78 -99.65 - 999 2205 301 54.68 -101.68 - 1000 2179 338 50.43 -104.67 - 1001 2162 323 52.17 -106.68 - 1002 2210 307 53.97 -101.10 - 1003 2171 314 53.22 -105.68 - 1004 2128 341 50.02 -110.72 - 1005 2110 344 49.63 -112.80 - 1006 2100 332 51.12 -114.02 - 1007 2085 344 49.62 -115.78 - 1008 2069 347 49.30 -117.63 - 1009 2021 348 49.18 -123.17 - 1010 2007 344 49.72 -124.90 - 1011 2026 308 53.88 -122.68 - 1012 2489 272 58.10 -68.42 - 1013 2406 269 58.45 -78.12 - 1014 2488 224 63.75 -68.53 - 1015 2270 267 58.75 -94.07 - 1016 2361 220 64.20 -83.37 - 1017 2339 85 79.98 -85.93 - 1018 2158 278 57.35 -107.13 - 1019 2262 130 74.72 -94.95 - 1020 2175 178 69.10 -105.12 - 1021 2253 219 64.30 -96.00 - 1022 2117 300 54.77 -112.02 - 1023 2117 256 60.02 -111.95 - 1024 2096 234 62.50 -114.40 - 1025 2026 266 58.83 -122.58 - 1026 2038 240 61.80 -121.20 - 1027 1973 255 60.12 -128.82 - 1028 1933 185 68.32 -133.53 - 1029 1920 250 60.72 -135.07 - 1030 1885 221 64.05 -139.13 - 1031 1879 191 67.57 -139.82 - 1032 2375 558 24.55 -81.75 - 1033 2381 557 24.73 -81.05 - 1034 2387 548 25.82 -80.28 - 1035 2387 547 25.90 -80.28 - 1036 2389 545 26.07 -80.15 - 1037 2386 549 25.65 -80.43 - 1038 2389 540 26.68 -80.12 - 1039 2388 544 26.20 -80.17 - 1040 2384 528 28.10 -80.65 - 1041 2386 532 27.65 -80.42 - 1042 2379 525 28.43 -81.32 - 1043 2381 519 29.18 -81.05 - 1044 2375 508 30.50 -81.69 - 1045 2374 510 30.22 -81.88 - 1046 2380 494 32.13 -81.19 - 1047 2384 493 32.22 -80.70 - 1048 2390 487 32.90 -80.03 - 1049 2370 532 27.70 -82.38 - 1050 2387 533 27.50 -80.37 - 1051 2374 541 26.58 -81.87 - 1052 2375 542 26.53 -81.75 - 1053 2368 529 27.97 -82.53 - 1054 2368 534 27.40 -82.55 - 1055 2367 530 27.92 -82.68 - 1056 2373 529 27.99 -82.02 - 1057 2363 515 29.62 -83.10 - 1058 2369 501 31.25 -82.40 - 1059 2377 501 31.25 -81.47 - 1060 2378 502 31.15 -81.37 - 1061 2353 509 30.38 -84.37 - 1062 2370 515 29.68 -82.27 - 1063 2351 483 33.36 -84.57 - 1064 2354 499 31.53 -84.18 - 1065 2362 505 30.78 -83.28 - 1066 2359 489 32.70 -83.65 - 1067 2373 483 33.37 -81.97 - 1068 2352 481 33.65 -84.42 - 1069 2351 480 33.78 -84.52 - 1070 2353 479 33.88 -84.30 - 1071 2347 514 29.73 -84.98 - 1072 2339 507 30.56 -85.92 - 1073 2329 508 30.47 -87.18 - 1074 2319 506 30.68 -88.25 - 1075 2321 507 30.63 -88.07 - 1076 2341 510 30.22 -85.68 - 1077 2349 492 32.33 -84.83 - 1078 2348 490 32.52 -84.93 - 1079 2335 492 32.30 -86.40 - 1080 2343 501 31.32 -85.45 - 1081 2332 481 33.57 -86.75 - 1082 2325 484 33.22 -87.62 - 1083 2340 481 33.58 -85.85 - 1084 2328 487 32.90 -87.25 - 1085 2276 514 29.78 -93.30 - 1086 2332 485 33.17 -86.77 - 1087 2303 520 29.10 -90.20 - 1088 2302 512 29.98 -90.25 - 1089 2288 512 30.03 -91.88 - 1090 2304 511 30.05 -90.03 - 1091 2295 507 30.53 -91.15 - 1092 2310 518 29.33 -89.40 - 1093 2306 509 30.33 -89.82 - 1094 2315 492 32.33 -88.75 - 1095 2310 499 31.47 -89.33 - 1096 2304 492 32.32 -90.08 - 1097 2296 482 33.48 -90.98 - 1098 2300 502 31.18 -90.47 - 1099 2304 482 33.50 -90.08 - 1100 2277 503 31.05 -93.20 - 1101 2277 511 30.12 -93.22 - 1102 2288 510 30.20 -91.98 - 1103 2270 512 29.95 -94.02 - 1104 2264 518 29.30 -94.80 - 1105 2259 512 29.97 -95.35 - 1106 2259 515 29.65 -95.28 - 1107 2250 507 30.58 -96.37 - 1108 2264 501 31.23 -94.75 - 1109 2258 492 32.34 -95.40 - 1110 2265 492 32.34 -94.65 - 1111 2272 491 32.47 -93.82 - 1112 2287 490 32.52 -92.03 - 1113 2285 500 31.40 -92.30 - 1114 2242 488 32.83 -97.30 - 1115 2241 547 25.90 -97.43 - 1116 2239 544 26.23 -97.65 - 1117 2234 545 26.18 -98.23 - 1118 2240 531 27.77 -97.50 - 1119 2236 531 27.73 -98.03 - 1120 2224 533 27.55 -99.47 - 1121 2258 519 29.12 -95.47 - 1122 2232 516 29.53 -98.47 - 1123 2239 509 30.30 -97.70 - 1124 2245 522 28.85 -96.92 - 1125 2243 498 31.62 -97.22 - 1126 2238 503 31.07 -97.83 - 1127 2246 488 32.84 -96.85 - 1128 2258 481 33.63 -95.45 - 1129 2245 487 32.90 -97.03 - 1130 2064 469 35.07 -118.15 - 1131 2242 488 32.82 -97.37 - 1132 2235 493 32.22 -98.18 - 1133 2211 517 29.37 -100.92 - 1134 2178 496 31.83 -104.80 - 1135 2215 500 31.37 -100.50 - 1136 2197 461 36.02 -102.55 - 1137 2185 509 30.37 -104.02 - 1138 2201 495 31.95 -102.18 - 1139 2192 497 31.78 -103.20 - 1140 2222 491 32.41 -99.68 - 1141 2204 481 33.65 -101.82 - 1142 2181 484 33.30 -104.53 - 1143 2183 492 32.33 -104.27 - 1144 2192 489 32.68 -103.22 - 1145 2166 493 32.24 -106.22 - 1146 2160 492 32.28 -106.92 - 1147 2165 497 31.80 -106.40 - 1148 2157 484 33.23 -107.27 - 1149 2153 493 32.27 -107.72 - 1150 2131 499 31.57 -110.33 - 1151 2137 499 31.47 -109.60 - 1152 2126 494 32.12 -110.93 - 1153 2117 483 33.43 -112.02 - 1154 2095 489 32.65 -114.60 - 1155 2069 477 34.05 -117.60 - 1156 2078 479 33.83 -116.50 - 1157 2063 476 34.20 -118.35 - 1158 2061 476 34.22 -118.48 - 1159 2043 467 35.23 -120.63 - 1160 2073 489 32.73 -117.17 - 1161 2074 490 32.57 -116.98 - 1162 2053 484 33.25 -119.45 - 1163 2062 483 33.40 -118.42 - 1164 2072 485 33.13 -117.28 - 1165 2073 488 32.85 -117.12 - 1166 2062 479 33.93 -118.40 - 1167 2064 479 33.82 -118.15 - 1168 2067 481 33.68 -117.87 - 1169 2408 475 34.27 -77.90 - 1170 2398 468 35.17 -79.02 - 1171 2399 469 34.98 -78.87 - 1172 2428 467 35.27 -75.55 - 1173 2417 471 34.78 -76.87 - 1174 2400 462 35.87 -78.78 - 1175 2412 464 35.64 -77.39 - 1176 2407 466 35.33 -77.97 - 1177 2408 462 35.84 -77.90 - 1178 2410 471 34.82 -77.61 - 1179 2457 454 36.82 -72.10 - 1180 2422 453 36.90 -76.19 - 1181 2420 451 37.13 -76.50 - 1182 2416 470 34.90 -76.88 - 1183 2415 469 35.07 -77.05 - 1184 2380 478 33.95 -81.12 - 1185 2392 476 34.18 -79.72 - 1186 2362 478 33.95 -83.32 - 1187 2370 471 34.84 -82.35 - 1188 2371 470 34.90 -82.22 - 1189 2367 474 34.50 -82.72 - 1190 2382 467 35.22 -80.93 - 1191 2378 463 35.73 -81.37 - 1192 2368 466 35.43 -82.55 - 1193 2390 460 36.08 -79.94 - 1194 2386 450 37.21 -80.41 - 1195 2369 457 36.48 -82.40 - 1196 2388 460 36.13 -80.22 - 1197 2346 475 34.35 -85.16 - 1198 2332 472 34.65 -86.77 - 1199 2325 471 34.75 -87.62 - 1200 2345 469 35.03 -85.20 - 1201 2356 462 35.82 -83.98 - 1202 2346 461 35.95 -85.08 - 1203 2333 460 36.13 -86.68 - 1204 2315 475 34.27 -88.77 - 1205 2304 469 35.05 -90.00 - 1206 2314 464 35.59 -88.92 - 1207 2285 471 34.83 -92.25 - 1208 2285 472 34.73 -92.23 - 1209 2299 462 35.83 -90.65 - 1210 2278 474 34.48 -93.10 - 1211 2288 476 34.18 -91.93 - 1212 2271 482 33.45 -93.98 - 1213 2281 484 33.22 -92.80 - 1214 2267 466 35.33 -94.37 - 1215 2269 461 36.00 -94.17 - 1216 2278 458 36.27 -93.15 - 1217 2283 459 36.20 -92.47 - 1218 2290 463 35.73 -91.65 - 1219 2288 453 36.88 -91.90 - 1220 2308 450 37.23 -89.57 - 1221 2270 453 36.91 -94.02 - 1222 2266 451 37.15 -94.50 - 1223 2232 478 33.98 -98.50 - 1224 2227 469 34.98 -99.05 - 1225 2226 466 35.33 -99.20 - 1226 2221 458 36.30 -99.77 - 1227 2240 466 35.40 -97.60 - 1228 2244 454 36.73 -97.10 - 1229 2233 473 34.60 -98.40 - 1230 2245 475 34.30 -97.02 - 1231 2254 459 36.20 -95.90 - 1232 2253 454 36.76 -96.01 - 1233 2255 470 34.88 -95.78 - 1234 2241 467 35.23 -97.47 - 1235 2192 457 36.45 -103.15 - 1236 2217 474 34.43 -100.28 - 1237 2144 465 35.52 -108.78 - 1238 2205 467 35.23 -101.70 - 1239 2162 496 31.87 -106.70 - 1240 2163 469 35.05 -106.62 - 1241 2167 464 35.62 -106.08 - 1242 2149 454 36.75 -108.23 - 1243 2188 468 35.18 -103.60 - 1244 2175 464 35.65 -105.15 - 1245 2100 467 35.27 -113.95 - 1246 2121 453 36.93 -111.45 - 1247 2113 473 34.53 -112.47 - 1248 2113 472 34.65 -112.42 - 1249 2128 469 35.02 -110.73 - 1250 2134 475 34.27 -110.00 - 1251 2139 473 34.51 -109.38 - 1252 2120 468 35.13 -111.67 - 1253 2118 467 35.23 -111.82 - 1254 2115 461 35.95 -112.15 - 1255 2094 471 34.77 -114.62 - 1256 2066 470 34.92 -117.90 - 1257 2076 471 34.84 -116.78 - 1258 2064 472 34.73 -118.22 - 1259 2065 472 34.63 -118.08 - 1260 2057 466 35.43 -119.05 - 1261 2090 460 36.08 -115.17 - 1262 2082 455 36.62 -116.02 - 1263 2051 454 36.77 -119.72 - 1264 2056 477 34.12 -119.12 - 1265 2050 474 34.43 -119.83 - 1266 2055 476 34.21 -119.20 - 1267 2044 471 34.75 -120.57 - 1268 2045 470 34.90 -120.45 - 1269 2043 464 35.66 -120.63 - 1270 2413 448 37.50 -77.33 - 1271 2403 443 38.13 -78.44 - 1272 2403 449 37.35 -78.43 - 1273 2428 444 37.93 -75.48 - 1274 2412 436 38.95 -77.44 - 1275 2412 441 38.27 -77.45 - 1276 2421 441 38.28 -76.40 - 1277 2428 441 38.33 -75.51 - 1278 2415 436 38.84 -77.03 - 1279 2418 434 39.18 -76.67 - 1280 2409 429 39.70 -77.73 - 1281 2420 432 39.33 -76.42 - 1282 2436 431 39.45 -74.57 - 1283 2432 432 39.37 -75.07 - 1284 2430 428 39.88 -75.25 - 1285 2432 426 40.08 -75.01 - 1286 2427 429 39.68 -75.60 - 1287 2434 424 40.28 -74.82 - 1288 2436 426 40.02 -74.60 - 1289 2437 420 40.80 -74.42 - 1290 2397 449 37.33 -79.19 - 1291 2396 456 36.57 -79.33 - 1292 2390 449 37.32 -79.97 - 1293 2391 444 37.95 -79.83 - 1294 2380 446 37.78 -81.12 - 1295 2380 450 37.30 -81.19 - 1296 2386 445 37.87 -80.40 - 1297 2376 440 38.37 -81.60 - 1298 2391 436 38.88 -79.85 - 1299 2388 433 39.30 -80.23 - 1300 2391 430 39.65 -79.92 - 1301 2407 432 39.40 -77.98 - 1302 2350 435 39.05 -84.67 - 1303 2351 443 38.03 -84.60 - 1304 2341 442 38.18 -85.73 - 1305 2362 447 37.59 -83.32 - 1306 2329 446 37.75 -87.16 - 1307 2339 444 37.91 -85.97 - 1308 2355 451 37.08 -84.08 - 1309 2368 440 38.37 -82.55 - 1310 2357 432 39.42 -83.83 - 1311 2331 441 38.25 -86.95 - 1312 2378 432 39.34 -81.43 - 1313 2384 425 40.18 -80.65 - 1314 2365 427 40.00 -82.88 - 1315 2365 428 39.82 -82.93 - 1316 2374 427 39.95 -81.90 - 1317 2354 427 39.90 -84.20 - 1318 2352 434 39.09 -84.42 - 1319 2326 443 38.05 -87.53 - 1320 2313 438 38.65 -88.97 - 1321 2311 446 37.78 -89.25 - 1322 2301 437 38.75 -90.37 - 1323 2299 438 38.66 -90.65 - 1324 2315 452 37.07 -88.77 - 1325 2350 452 37.05 -84.61 - 1326 2327 431 39.45 -87.32 - 1327 2333 434 39.15 -86.62 - 1328 2336 429 39.73 -86.27 - 1329 2331 423 40.41 -86.93 - 1330 2307 428 39.84 -89.67 - 1331 2294 427 39.95 -91.20 - 1332 2314 422 40.48 -88.92 - 1333 2325 426 40.12 -87.60 - 1334 2276 450 37.23 -93.38 - 1335 2286 437 38.82 -92.22 - 1336 2301 446 37.77 -90.43 - 1337 2289 443 38.13 -91.77 - 1338 2283 443 38.10 -92.55 - 1339 2264 432 39.32 -94.72 - 1340 2265 434 39.12 -94.60 - 1341 2263 437 38.83 -94.89 - 1342 2263 429 39.77 -94.92 - 1343 2241 447 37.65 -97.43 - 1344 2237 443 38.07 -97.87 - 1345 2258 447 37.66 -95.48 - 1346 2242 443 38.06 -97.28 - 1347 2219 446 37.77 -99.97 - 1348 2213 444 37.93 -100.72 - 1349 2211 452 37.04 -100.97 - 1350 2229 441 38.34 -98.86 - 1351 2225 436 38.85 -99.27 - 1352 2232 450 37.27 -98.55 - 1353 2248 434 39.13 -96.67 - 1354 2252 441 38.33 -96.19 - 1355 2257 434 39.07 -95.62 - 1356 2256 436 38.95 -95.67 - 1357 2239 430 39.55 -97.65 - 1358 2229 436 38.87 -98.82 - 1359 2239 437 38.80 -97.65 - 1360 2203 452 37.01 -101.88 - 1361 2169 448 37.45 -105.87 - 1362 2153 451 37.15 -107.75 - 1363 2152 444 37.95 -107.90 - 1364 2189 443 38.05 -103.52 - 1365 2196 443 38.07 -102.68 - 1366 2181 441 38.28 -104.52 - 1367 2205 432 39.37 -101.70 - 1368 2221 432 39.38 -99.83 - 1369 2179 437 38.82 -104.72 - 1370 2178 430 39.57 -104.85 - 1371 2160 430 39.65 -106.92 - 1372 2161 433 39.22 -106.87 - 1373 2160 439 38.53 -106.93 - 1374 2178 438 38.70 -104.77 - 1375 2178 429 39.75 -104.87 - 1376 2192 425 40.17 -103.22 - 1377 2175 427 39.91 -105.12 - 1378 2127 430 39.62 -110.75 - 1379 2138 447 37.62 -109.47 - 1380 2128 440 38.37 -110.72 - 1381 2104 452 37.04 -113.50 - 1382 2107 446 37.70 -113.10 - 1383 2115 446 37.70 -112.15 - 1384 2146 434 39.12 -108.53 - 1385 2152 439 38.50 -107.90 - 1386 2145 450 37.30 -108.67 - 1387 2180 423 40.43 -104.63 - 1388 2176 423 40.45 -105.01 - 1389 2132 435 39.00 -110.17 - 1390 2136 437 38.76 -109.75 - 1391 2112 432 39.33 -112.58 - 1392 2118 411 41.78 -111.85 - 1393 2062 449 37.37 -118.37 - 1394 2044 450 37.28 -120.52 - 1395 2036 439 38.52 -121.50 - 1396 2037 439 38.55 -121.30 - 1397 2035 438 38.70 -121.58 - 1398 2073 443 38.05 -117.08 - 1399 2060 439 38.55 -118.63 - 1400 2092 433 39.28 -114.85 - 1401 2095 447 37.62 -114.52 - 1402 2050 431 39.50 -119.78 - 1403 2050 430 39.57 -119.79 - 1404 2033 456 36.58 -121.85 - 1405 2035 455 36.66 -121.60 - 1406 2038 444 37.90 -121.25 - 1407 2033 446 37.70 -121.82 - 1408 2030 446 37.73 -122.22 - 1409 2028 447 37.62 -122.38 - 1410 2032 449 37.37 -121.93 - 1411 2024 439 38.52 -122.82 - 1412 2451 419 40.87 -72.86 - 1413 2440 421 40.70 -74.17 - 1414 2440 419 40.84 -74.07 - 1415 2442 420 40.77 -73.90 - 1416 2449 420 40.80 -73.10 - 1417 2442 413 41.63 -73.87 - 1418 2444 417 41.07 -73.69 - 1419 2440 414 41.50 -74.10 - 1420 2449 417 41.17 -73.12 - 1421 2451 416 41.27 -72.87 - 1422 2458 415 41.33 -72.05 - 1423 2462 417 41.17 -71.58 - 1424 2471 412 41.65 -70.52 - 1425 2475 416 41.25 -70.07 - 1426 2469 410 41.92 -70.73 - 1427 2467 412 41.68 -70.97 - 1428 2473 412 41.67 -70.28 - 1429 2463 412 41.73 -71.43 - 1430 2463 413 41.60 -71.42 - 1431 2452 410 41.93 -72.68 - 1432 2457 412 41.73 -72.18 - 1433 2456 405 42.57 -72.27 - 1434 2453 412 41.73 -72.65 - 1435 2467 405 42.58 -70.92 - 1436 2466 406 42.37 -71.03 - 1437 2459 407 42.27 -71.87 - 1438 2424 423 40.38 -75.97 - 1439 2417 425 40.20 -76.76 - 1440 2421 426 40.12 -76.29 - 1441 2399 416 41.18 -78.90 - 1442 2404 424 40.30 -78.32 - 1443 2400 424 40.32 -78.83 - 1444 2408 419 40.84 -77.85 - 1445 2426 415 41.33 -75.73 - 1446 2416 416 41.25 -76.92 - 1447 2434 412 41.70 -74.80 - 1448 2424 408 42.22 -75.98 - 1449 2420 405 42.48 -76.44 - 1450 2416 408 42.17 -76.90 - 1451 2450 396 43.53 -72.95 - 1452 2429 421 40.65 -75.43 - 1453 2443 403 42.75 -73.80 - 1454 2444 398 43.33 -73.62 - 1455 2428 387 44.68 -75.47 - 1456 2423 400 43.12 -76.12 - 1457 2429 400 43.15 -75.37 - 1458 2388 422 40.50 -80.22 - 1459 2386 420 40.77 -80.40 - 1460 2390 424 40.34 -79.93 - 1461 2395 424 40.28 -79.40 - 1462 2378 419 40.91 -81.43 - 1463 2396 408 42.15 -79.26 - 1464 2374 414 41.42 -81.87 - 1465 2368 420 40.82 -82.52 - 1466 2384 416 41.27 -80.67 - 1467 2388 409 42.08 -80.18 - 1468 2402 411 41.80 -78.62 - 1469 2391 415 41.38 -79.87 - 1470 2401 402 42.93 -78.73 - 1471 2399 400 43.10 -78.94 - 1472 2410 400 43.12 -77.67 - 1473 2322 410 41.98 -87.90 - 1474 2319 410 41.92 -88.25 - 1475 2319 426 40.03 -88.28 - 1476 2314 428 39.83 -88.87 - 1477 2307 421 40.66 -89.68 - 1478 2307 412 41.74 -89.68 - 1479 2345 418 41.00 -85.20 - 1480 2344 424 40.25 -85.40 - 1481 2327 413 41.62 -87.42 - 1482 2324 411 41.78 -87.75 - 1483 2325 411 41.87 -87.60 - 1484 2323 406 42.42 -87.87 - 1485 2336 412 41.70 -86.32 - 1486 2357 413 41.60 -83.80 - 1487 2359 418 41.02 -83.67 - 1488 2361 408 42.23 -83.33 - 1489 2364 406 42.42 -83.02 - 1490 2368 402 42.92 -82.53 - 1491 2322 363 47.45 -87.90 - 1492 2351 403 42.77 -84.60 - 1493 2352 407 42.27 -84.47 - 1494 2345 407 42.30 -85.25 - 1495 2312 408 42.20 -89.10 - 1496 2300 414 41.45 -90.52 - 1497 2290 411 41.88 -91.70 - 1498 2295 420 40.78 -91.13 - 1499 2273 413 41.53 -93.65 - 1500 2284 417 41.10 -92.45 - 1501 2258 420 40.75 -95.41 - 1502 2299 406 42.40 -90.70 - 1503 2290 399 43.28 -91.74 - 1504 2284 405 42.55 -92.40 - 1505 2276 400 43.15 -93.33 - 1506 2269 405 42.55 -94.20 - 1507 2260 404 42.60 -95.23 - 1508 2254 415 41.30 -95.90 - 1509 2247 419 40.84 -96.75 - 1510 2247 424 40.30 -96.75 - 1511 2234 418 40.97 -98.32 - 1512 2228 413 41.62 -98.95 - 1513 2228 420 40.73 -99.00 - 1514 2252 412 41.76 -96.18 - 1515 2257 426 40.08 -95.60 - 1516 2222 414 41.44 -99.64 - 1517 2241 410 41.98 -97.43 - 1518 2242 414 41.45 -97.34 - 1519 2230 405 42.47 -98.69 - 1520 2250 406 42.40 -96.38 - 1521 2250 415 41.32 -96.37 - 1522 2194 417 41.10 -102.98 - 1523 2213 417 41.13 -100.68 - 1524 2205 422 40.51 -101.62 - 1525 2225 423 40.45 -99.33 - 1526 2195 409 42.05 -102.80 - 1527 2193 402 42.83 -103.10 - 1528 2178 417 41.15 -104.82 - 1529 2171 415 41.32 -105.67 - 1530 2179 428 39.87 -104.67 - 1531 2188 411 41.87 -103.60 - 1532 2164 402 42.92 -106.47 - 1533 2138 423 40.43 -109.52 - 1534 2158 422 40.48 -107.22 - 1535 2153 431 39.53 -107.73 - 1536 2117 420 40.78 -111.97 - 1537 2119 425 40.22 -111.72 - 1538 2142 413 41.60 -109.07 - 1539 2158 411 41.80 -107.20 - 1540 2117 416 41.20 -112.02 - 1541 2145 402 42.82 -108.73 - 1542 2147 400 43.07 -108.47 - 1543 2125 416 41.28 -111.03 - 1544 2128 396 43.60 -110.73 - 1545 2112 402 42.92 -112.60 - 1546 2116 397 43.52 -112.07 - 1547 2082 385 44.88 -116.10 - 1548 2061 426 40.07 -118.57 - 1549 2099 420 40.73 -114.03 - 1550 2085 419 40.87 -115.73 - 1551 2085 419 40.83 -115.78 - 1552 2085 412 41.67 -115.78 - 1553 2067 419 40.90 -117.80 - 1554 2044 423 40.38 -120.57 - 1555 2043 433 39.28 -120.70 - 1556 2047 432 39.32 -120.13 - 1557 2048 436 38.90 -120.00 - 1558 2097 397 43.50 -114.30 - 1559 2096 405 42.48 -114.48 - 1560 2102 405 42.55 -113.77 - 1561 2034 408 42.15 -121.73 - 1562 2021 434 39.13 -123.20 - 1563 2029 425 40.15 -122.25 - 1564 2029 422 40.50 -122.30 - 1565 2014 418 40.98 -124.10 - 1566 2012 411 41.78 -124.23 - 1567 2044 414 41.50 -120.53 - 1568 2024 406 42.37 -122.87 - 1569 2462 399 43.20 -71.50 - 1570 2468 400 43.08 -70.82 - 1571 2472 395 43.65 -70.32 - 1572 2469 398 43.40 -70.72 - 1573 2489 389 44.45 -68.37 - 1574 2483 392 44.07 -69.10 - 1575 2501 385 44.92 -67.00 - 1576 2490 364 47.28 -68.32 - 1577 2485 386 44.80 -68.83 - 1578 2454 398 43.35 -72.52 - 1579 2456 396 43.63 -72.30 - 1580 2462 389 44.36 -71.55 - 1581 2458 389 44.42 -72.02 - 1582 2453 391 44.20 -72.57 - 1583 2463 396 43.57 -71.42 - 1584 2465 387 44.58 -71.18 - 1585 2456 402 42.90 -72.27 - 1586 2448 388 44.47 -73.15 - 1587 2471 388 44.53 -70.53 - 1588 2473 392 44.05 -70.28 - 1589 2477 390 44.32 -69.80 - 1590 2479 380 45.47 -69.58 - 1591 2486 378 45.65 -68.68 - 1592 2446 387 44.65 -73.47 - 1593 2434 384 44.93 -74.85 - 1594 2424 392 44.00 -76.01 - 1595 2439 389 44.38 -74.19 - 1596 2360 404 42.70 -83.47 - 1597 2350 385 44.90 -84.72 - 1598 2343 402 42.88 -85.52 - 1599 2335 408 42.14 -86.44 - 1600 2342 408 42.23 -85.55 - 1601 2336 399 43.17 -86.25 - 1602 2358 401 42.97 -83.75 - 1603 2361 404 42.67 -83.42 - 1604 2355 396 43.53 -84.08 - 1605 2350 389 44.36 -84.67 - 1606 2344 390 44.28 -85.42 - 1607 2336 390 44.28 -86.25 - 1608 2342 386 44.73 -85.58 - 1609 2359 383 45.07 -83.57 - 1610 2361 389 44.45 -83.40 - 1611 2322 401 42.95 -87.90 - 1612 2310 400 43.13 -89.33 - 1613 2313 404 42.62 -89.04 - 1614 2303 399 43.21 -90.18 - 1615 2294 394 43.87 -91.25 - 1616 2292 385 44.87 -91.48 - 1617 2283 393 43.92 -92.50 - 1618 2320 388 44.48 -88.13 - 1619 2324 391 44.13 -87.68 - 1620 2317 393 43.98 -88.55 - 1621 2308 384 44.93 -89.63 - 1622 2307 386 44.78 -89.67 - 1623 2329 378 45.73 -87.08 - 1624 2325 383 45.12 -87.63 - 1625 2274 385 44.85 -93.57 - 1626 2247 396 43.58 -96.73 - 1627 2246 390 44.31 -96.82 - 1628 2242 402 42.92 -97.38 - 1629 2225 394 43.80 -99.32 - 1630 2234 389 44.38 -98.22 - 1631 2236 394 43.77 -98.03 - 1632 2243 385 44.92 -97.15 - 1633 2270 379 45.55 -94.07 - 1634 2269 372 46.40 -94.13 - 1635 2261 388 44.55 -95.08 - 1636 2258 376 45.87 -95.40 - 1637 2255 389 44.45 -95.82 - 1638 2266 390 44.32 -94.50 - 1639 2267 376 45.95 -94.35 - 1640 2277 385 44.88 -93.22 - 1641 2278 384 44.95 -93.07 - 1642 2271 391 44.22 -93.91 - 1643 2267 395 43.65 -94.42 - 1644 2276 395 43.68 -93.37 - 1645 2233 380 45.45 -98.43 - 1646 2193 392 44.06 -103.05 - 1647 2172 389 44.35 -105.53 - 1648 2160 386 44.77 -106.97 - 1649 2130 388 44.54 -110.42 - 1650 2151 393 43.97 -107.95 - 1651 2173 380 45.45 -105.40 - 1652 2178 366 47.13 -104.80 - 1653 2216 379 45.55 -100.41 - 1654 2217 389 44.38 -100.28 - 1655 2201 376 45.93 -102.17 - 1656 2142 388 44.52 -109.02 - 1657 2133 405 42.58 -110.11 - 1658 2124 387 44.68 -111.12 - 1659 2146 377 45.80 -108.53 - 1660 2138 366 47.05 -109.47 - 1661 2112 376 45.95 -112.50 - 1662 2112 382 45.25 -112.55 - 1663 2124 377 45.78 -111.15 - 1664 2130 378 45.70 -110.45 - 1665 2081 396 43.57 -116.22 - 1666 2057 396 43.58 -118.95 - 1667 2039 390 44.25 -121.15 - 1668 2101 383 45.12 -113.88 - 1669 2082 376 45.95 -116.13 - 1670 2058 378 45.68 -118.85 - 1671 2067 385 44.83 -117.82 - 1672 2020 399 43.23 -123.35 - 1673 2012 397 43.42 -124.25 - 1674 2021 391 44.12 -123.22 - 1675 2023 385 44.92 -123.00 - 1676 2014 387 44.58 -124.06 - 1677 2026 379 45.60 -122.60 - 1678 2028 379 45.55 -122.40 - 1679 2023 379 45.53 -122.95 - 1680 2039 379 45.62 -121.17 - 1681 2494 374 46.12 -67.80 - 1682 2479 370 46.62 -69.53 - 1683 2492 368 46.87 -68.01 - 1684 2492 370 46.68 -68.05 - 1685 2353 371 46.47 -84.37 - 1686 2352 373 46.25 -84.47 - 1687 2349 379 45.57 -84.80 - 1688 2309 378 45.63 -89.47 - 1689 2325 371 46.53 -87.55 - 1690 2327 372 46.35 -87.40 - 1691 2321 377 45.82 -88.12 - 1692 2317 365 47.17 -88.50 - 1693 2303 371 46.53 -90.13 - 1694 2286 368 46.83 -92.18 - 1695 2280 364 47.38 -92.83 - 1696 2254 368 46.83 -95.89 - 1697 2289 360 47.82 -91.83 - 1698 2276 353 48.57 -93.38 - 1699 2265 352 48.73 -94.62 - 1700 2246 368 46.90 -96.80 - 1701 2230 367 46.93 -98.68 - 1702 2262 363 47.50 -94.93 - 1703 2259 350 48.93 -95.33 - 1704 2243 359 47.95 -97.18 - 1705 2229 357 48.10 -98.87 - 1706 2213 369 46.77 -100.75 - 1707 2195 369 46.80 -102.80 - 1708 2188 357 48.18 -103.63 - 1709 2208 356 48.27 -101.28 - 1710 2207 361 47.65 -101.43 - 1711 2163 356 48.22 -106.62 - 1712 2160 364 47.33 -106.93 - 1713 2172 357 48.10 -105.58 - 1714 2183 361 47.70 -104.20 - 1715 2117 370 46.60 -112.00 - 1716 2099 367 46.92 -114.08 - 1717 2122 363 47.48 -111.37 - 1718 2136 354 48.55 -109.77 - 1719 2097 356 48.30 -114.27 - 1720 2114 353 48.60 -112.37 - 1721 2044 370 46.57 -120.53 - 1722 2037 364 47.28 -121.33 - 1723 2048 363 47.40 -120.02 - 1724 2047 363 47.40 -120.20 - 1725 2053 364 47.30 -119.52 - 1726 2054 365 47.20 -119.32 - 1727 2074 372 46.38 -117.02 - 1728 2076 360 47.77 -116.82 - 1729 2055 373 46.32 -119.27 - 1730 2056 373 46.27 -119.12 - 1731 2063 374 46.10 -118.28 - 1732 2070 361 47.63 -117.53 - 1733 2071 361 47.68 -117.32 - 1734 2073 369 46.75 -117.12 - 1735 2069 361 47.70 -117.60 - 1736 2067 354 48.55 -117.88 - 1737 2044 367 47.03 -120.53 - 1738 2019 357 48.12 -123.50 - 1739 2053 355 48.42 -119.53 - 1740 2015 374 46.15 -123.88 - 1741 2024 367 46.97 -122.90 - 1742 2015 367 46.97 -123.93 - 1743 2023 374 46.12 -122.94 - 1744 2029 363 47.45 -122.30 - 1745 2030 363 47.50 -122.22 - 1746 2029 362 47.53 -122.30 - 1747 2029 359 47.90 -122.28 - 1748 2026 364 47.27 -122.58 - 1749 2378 532 27.65 -81.33 - 1750 2010 359 47.95 -124.55 - 1751 2027 351 48.80 -122.53 - 1752 2109 425 40.17 -112.93 - 1753 2169 372 46.43 -105.87 - 1754 2258 387 44.67 -95.45 - 1755 2300 399 43.22 -90.53 - 1756 2426 392 44.05 -75.73 - 1757 2473 393 43.90 -70.25 - 1758 2463 402 42.93 -71.43 - 1759 2166 410 41.90 -106.19 - 1760 2214 426 40.09 -100.65 - 1761 2205 402 42.91 -101.69 - 1762 2242 426 40.10 -97.34 - 1763 2238 408 42.21 -97.79 - 1764 2273 410 41.90 -93.70 - 1765 2300 413 41.61 -90.57 - 1766 2355 428 39.82 -84.03 - 1767 2317 411 41.77 -88.48 - 1768 2330 420 40.81 -87.05 - 1769 2344 437 38.83 -85.42 - 1770 2443 421 40.65 -73.78 - 1771 2464 405 42.47 -71.28 - 1772 2466 403 42.72 -71.12 - 1773 2454 408 42.20 -72.53 - 1774 2452 408 42.15 -72.72 - 1775 2476 412 41.67 -69.97 - 1776 2442 402 42.85 -73.93 - 1777 2201 446 37.77 -102.18 - 1778 2178 435 38.97 -104.82 - 1779 2188 433 39.26 -103.70 - 1780 2179 425 40.18 -104.72 - 1781 2227 447 37.65 -99.09 - 1782 2256 449 37.38 -95.63 - 1783 2242 441 38.31 -97.30 - 1784 2281 448 37.52 -92.70 - 1785 2269 430 39.58 -94.19 - 1786 2300 429 39.66 -90.48 - 1787 2310 425 40.15 -89.33 - 1788 2433 435 39.02 -74.92 - 1789 2068 463 35.68 -117.68 - 1790 2165 491 32.41 -106.35 - 1791 2152 454 36.84 -107.91 - 1792 2226 460 36.07 -99.22 - 1793 2223 457 36.43 -99.53 - 1794 2241 455 36.69 -97.48 - 1795 2254 463 35.68 -95.86 - 1796 2240 469 34.98 -97.52 - 1797 2305 453 36.88 -89.97 - 1798 2335 452 36.97 -86.42 - 1799 2422 458 36.27 -76.18 - 1800 2086 488 32.83 -115.58 - 1801 2081 481 33.63 -116.17 - 1802 2094 481 33.62 -114.72 - 1803 2188 469 35.08 -103.61 - 1804 2167 486 33.08 -106.12 - 1805 2165 487 32.90 -106.40 - 1806 2211 486 33.02 -100.98 - 1807 2221 508 30.50 -99.77 - 1808 2256 497 31.78 -95.71 - 1809 2268 477 34.11 -94.29 - 1810 2281 496 31.90 -92.78 - 1811 2312 509 30.40 -89.07 - 1812 2314 477 34.09 -88.86 - 1813 2376 496 31.90 -81.63 - 1814 2364 504 30.89 -83.01 - 1815 2386 478 33.97 -80.47 - 1816 2399 481 33.68 -78.93 - 1817 2401 479 33.82 -78.72 - 1818 2385 525 28.47 -80.55 - 1819 2074 490 32.55 -116.97 - 1820 2089 489 32.63 -115.24 - 1821 2164 498 31.63 -106.43 - 1822 2063 521 28.88 -118.30 - 1823 2126 520 29.07 -110.97 - 1824 2168 523 28.70 -105.97 - 1825 2114 535 27.32 -112.30 - 1826 2126 529 27.97 -110.93 - 1827 2127 529 27.95 -110.80 - 1828 2223 534 27.43 -99.57 - 1829 2234 546 26.02 -98.23 - 1830 2190 550 25.53 -103.45 - 1831 2217 547 25.87 -100.20 - 1832 2218 548 25.78 -100.10 - 1833 2240 548 25.77 -97.53 - 1834 2130 562 24.17 -110.42 - 1835 2131 563 24.07 -110.37 - 1836 2136 570 23.15 -109.70 - 1837 2156 556 24.82 -107.40 - 1838 2181 562 24.13 -104.53 - 1839 2164 570 23.20 -106.42 - 1840 2166 570 23.17 -106.27 - 1841 2227 565 23.73 -99.13 - 1842 2228 566 23.72 -98.97 - 1843 2196 573 22.90 -102.68 - 1844 2211 579 22.15 -100.98 - 1845 2237 578 22.28 -97.87 - 1846 2200 581 21.88 -102.30 - 1847 2331 588 21.03 -86.87 - 1848 2174 591 20.68 -105.25 - 1849 2191 593 20.52 -103.32 - 1850 2307 589 20.98 -89.65 - 1851 2331 593 20.53 -86.93 - 1852 2180 605 19.15 -104.57 - 1853 2210 599 19.85 -101.03 - 1854 2223 603 19.35 -99.57 - 1855 2227 602 19.43 -99.10 - 1856 2252 605 19.15 -96.18 - 1857 2265 613 18.10 -94.58 - 1858 2289 609 18.65 -91.80 - 1859 2207 618 17.60 -101.47 - 1860 2220 624 16.83 -99.92 - 1861 2221 625 16.77 -99.75 - 1862 2251 633 15.78 -96.27 - 1863 2284 642 14.78 -92.38 - 1864 2521 492 32.37 -64.68 - 1865 2399 540 26.70 -78.97 - 1866 2401 541 26.55 -78.69 - 1867 2396 548 25.73 -79.30 - 1868 2411 554 25.05 -77.47 - 1869 2426 567 23.50 -75.76 - 1870 2366 582 21.83 -82.78 - 1871 2369 572 22.98 -82.40 - 1872 2379 571 23.13 -81.28 - 1873 2408 585 21.42 -77.85 - 1874 2414 594 20.33 -77.12 - 1875 2419 594 20.40 -76.62 - 1876 2425 598 19.96 -75.85 - 1877 2431 597 20.08 -75.15 - 1878 2437 594 20.35 -74.50 - 1879 2433 592 20.65 -74.92 - 1880 2377 583 21.62 -81.55 - 1881 2400 582 21.78 -78.78 - 1882 2416 589 20.95 -76.94 - 1883 2431 598 19.90 -75.12 - 1884 2378 603 19.28 -81.35 - 1885 2408 610 18.50 -77.92 - 1886 2417 615 17.93 -76.78 - 1887 2457 599 19.75 -72.18 - 1888 2456 609 18.57 -72.30 - 1889 2470 599 19.75 -70.55 - 1890 2469 602 19.46 -70.69 - 1891 2489 609 18.57 -68.37 - 1892 2478 611 18.43 -69.67 - 1893 2476 610 18.47 -69.88 - 1894 2500 610 18.50 -67.12 - 1895 2499 612 18.27 -67.15 - 1896 2504 614 18.02 -66.57 - 1897 2509 611 18.43 -66.00 - 1898 2518 612 18.33 -64.97 - 1899 2520 617 17.70 -64.80 - 1900 2522 611 18.45 -64.53 - 1901 2319 618 17.53 -88.30 - 1902 2306 624 16.92 -89.88 - 1903 2292 637 15.32 -91.47 - 1904 2316 634 15.72 -88.60 - 1905 2300 644 14.58 -90.52 - 1906 2298 649 13.92 -90.82 - 1907 2306 652 13.57 -89.83 - 1908 2312 651 13.70 -89.12 - 1909 2313 653 13.43 -89.05 - 1910 2324 655 13.28 -87.67 - 1911 2339 627 16.46 -85.92 - 1912 2334 629 16.32 -86.53 - 1913 2331 634 15.73 -86.87 - 1914 2326 634 15.72 -87.48 - 1915 2329 639 15.17 -87.12 - 1916 2322 636 15.45 -87.93 - 1917 2357 638 15.22 -83.80 - 1918 2339 641 14.90 -85.93 - 1919 2315 642 14.78 -88.78 - 1920 2320 646 14.33 -88.17 - 1921 2328 648 14.05 -87.22 - 1922 2329 654 13.30 -87.18 - 1923 2361 648 14.05 -83.37 - 1924 2337 664 12.15 -86.17 - 1925 2349 683 9.97 -84.78 - 1926 2354 683 10.00 -84.22 - 1927 2354 683 9.95 -84.15 - 1928 2364 683 10.00 -83.05 - 1929 2342 678 10.60 -85.55 - 1930 2368 688 9.43 -82.52 - 1931 2395 691 9.05 -79.37 - 1932 2369 696 8.39 -82.42 - 1933 2371 688 9.35 -82.25 - 1934 2382 699 8.08 -80.94 - 1935 2394 691 8.97 -79.51 - 1936 2534 613 18.20 -63.05 - 1937 2542 625 16.75 -62.17 - 1938 2538 620 17.29 -62.68 - 1939 2538 621 17.20 -62.58 - 1940 2545 622 17.12 -61.78 - 1941 2534 614 18.04 -63.12 - 1942 2535 619 17.48 -62.98 - 1943 2536 615 17.90 -62.85 - 1944 2548 629 16.27 -61.52 - 1945 2549 635 15.53 -61.30 - 1946 2549 635 15.53 -61.40 - 1947 2549 637 15.30 -61.40 - 1948 2565 656 13.07 -59.48 - 1949 2475 661 12.50 -70.01 - 1950 2484 664 12.20 -68.97 - 1951 2490 664 12.15 -68.28 - 1952 2375 661 12.58 -81.72 - 1953 2439 673 11.13 -74.23 - 1954 2428 679 10.45 -75.52 - 1955 2434 675 10.90 -74.77 - 1956 2448 707 7.10 -73.20 - 1957 2427 715 6.22 -75.60 - 1958 2429 715 6.18 -75.43 - 1959 2426 727 4.82 -75.80 - 1960 2440 728 4.70 -74.13 - 1961 2460 678 10.57 -71.73 - 1962 2501 678 10.60 -66.98 - 1963 2555 792 -2.83 -60.70 - 1964 2659 780 -1.43 -48.48 - 1965 2561 795 -3.15 -59.98 - 1966 2744 800 -3.78 -38.53 - 1967 2653 815 -5.53 -49.15 - 1968 2707 811 -5.05 -42.82 - 1969 2772 819 -5.92 -35.25 - 1970 2730 835 -7.88 -40.08 - 1971 2527 842 -8.70 -63.90 - 1972 2652 839 -8.27 -49.28 - 1973 2694 845 -9.07 -44.37 - 1974 2659 859 -10.70 -48.40 - 1975 2744 879 -13.00 -38.52 - 1976 2594 902 -15.65 -56.10 - 1977 2670 964 -23.00 -47.13 - 1978 2654 959 -22.32 -49.07 - 1979 2704 963 -22.90 -43.17 - 1980 2674 970 -23.62 -46.65 - 1981 2636 1025 -30.08 -51.18 - 1982 2308 776 -0.90 -89.62 - 1983 2404 769 -0.12 -78.35 - 1984 2391 786 -2.15 -79.88 - 1985 2397 837 -8.08 -79.12 - 1986 2415 871 -12.02 -77.03 - 1987 2520 894 -14.75 -64.80 - 1988 2491 909 -16.50 -68.17 - 1989 2469 1053 -33.38 -70.78 - 1990 2465 1067 -34.97 -71.22 - 1991 2583 983 -25.16 -57.38 - 1992 2569 1002 -27.45 -59.05 - 1993 2554 1049 -32.92 -60.78 - 1994 2573 1065 -34.82 -58.53 - 1995 2497 1159 -45.78 -67.45 - 1996 1713 580 21.98 -159.35 - 1997 1724 586 21.32 -158.07 - 1998 1725 586 21.35 -157.93 - 1999 1732 587 21.15 -157.10 - 2000 1738 590 20.90 -156.43 - 2001 1236 654 13.35 144.80 - 2002 1244 639 15.12 145.73 - 2003 1423 603 19.28 166.65 - 2004 1750 601 19.72 -155.07 - 2005 1296 704 7.47 151.85 - 2006 1351 709 6.97 158.22 - 2007 1392 723 5.33 163.03 - 2008 1432 693 8.73 167.73 - 2009 1463 708 7.08 171.38 - 2010 1148 705 7.33 134.48 - 2011 1179 687 9.48 138.08 - 2012 1240 647 14.20 145.20 - 2013 1243 640 15.00 145.60 - 2014 1244 608 18.80 145.70 - 2015 1150 699 8.10 134.70 - 2016 1129 723 5.30 132.20 - 2017 1174 697 8.30 137.50 - 2018 1193 683 10.00 139.80 - 2019 1199 684 9.80 140.50 - 2020 1152 705 7.40 134.90 - 2021 1234 695 8.60 144.60 - 2022 1256 705 7.40 147.10 - 2023 1274 705 7.40 149.20 - 2024 1278 695 8.60 149.70 - 2025 1297 695 8.60 151.90 - 2026 1304 709 6.90 152.70 - 2027 1313 721 5.50 153.80 - 2028 1323 736 3.80 155.00 - 2029 1343 718 5.80 157.30 - 2030 1348 708 7.00 157.90 - 2031 1364 710 6.80 159.80 - 2032 1372 715 6.20 160.70 - 2033 1387 667 11.80 162.50 - 2034 1414 692 8.90 165.70 - 2035 1441 706 7.30 168.80 - 2036 1448 718 5.90 169.60 - 2037 1449 672 11.20 169.80 - 2038 1453 687 9.50 170.20 - 2039 1467 716 6.10 171.80 - 2040 1870 922 -18.07 -140.95 - 2041 1492 1084 -37.02 174.80 - 2042 1117 874 -12.42 130.87 - 2043 1304 1004 -27.63 152.72 - 2044 990 1040 -31.92 115.97 - 2045 1291 1058 -33.95 151.18 - 2046 1236 1090 -37.67 144.83 - 2047 1272 1070 -35.40 148.98 - 2048 1259 1134 -42.83 147.50 - 2049 912 820 -6.15 106.85 - 2050 2330 500 31.42 -87.05 - 2051 1029 638 15.18 120.57 - 2052 1033 644 14.52 121.00 - 2053 1042 709 6.90 122.07 - 2054 2410 482 33.49 -77.59 - 2055 2096 517 29.37 -114.47 - 2056 2104 424 40.33 -113.50 - 2057 2394 468 35.17 -79.50 - 2058 2205 351 48.83 -101.67 - 2059 3067 391 44.22 -0.67 - 2060 184 1007 -28.00 21.50 - 2061 2492 1114 -40.50 -68.00 - 2062 2565 1001 -27.33 -59.50 - 2063 1152 1009 -28.23 134.98 - 2064 2841 438 38.70 -27.10 - 2065 1794 246 61.20 -149.80 - 2066 2950 835 -7.90 -14.40 - 2067 1189 463 35.70 139.30 - 2068 2607 351 48.90 -54.50 - 2069 42 397 43.50 4.90 - 2070 2997 318 52.70 -8.90 - 2071 1129 892 -14.50 132.30 - 2072 3005 443 38.10 -7.90 - 2073 1030 561 24.20 120.60 - 2074 862 660 12.70 101.00 - 2075 355 595 20.30 41.60 - 2076 1616 890 -14.30 -170.70 - 2077 2481 1208 -51.60 -69.30 - 2078 2139 1000 -27.20 -109.40 - 2079 756 575 22.60 88.50 - 2080 2775 837 -8.10 -34.90 - 2081 2676 968 -23.40 -46.50 - 2082 682 707 7.20 79.90 - 2083 2501 678 10.60 -67.00 - 2084 2625 727 4.80 -52.40 - 2085 622 605 19.10 72.80 - 2086 406 928 -18.80 47.50 - 2087 2126 493 32.20 -110.90 - 2088 2193 392 44.10 -103.10 - 2089 1818 217 64.60 -147.00 - 2090 2043 471 34.80 -120.60 - 2091 2065 473 34.60 -118.10 - 2092 2104 425 40.19 -113.47 - 2093 592 470 34.95 69.27 - 2094 3061 317 52.83 -1.32 - 2095 62 691 9.01 7.26 - 2096 2079 566 23.61 -116.48 - 2097 543 375 46.00 63.56 - 2098 578 361 47.67 67.73 - 2099 1741 600 19.73 -156.05 - 2100 1917 262 59.23 -135.43 - 2101 1824 246 61.13 -146.25 - 2102 1733 591 20.78 -156.95 - 2103 1736 589 21.02 -156.63 - 2104 2505 616 17.85 -66.52 - 2105 2499 613 18.17 -67.15 - 2106 2278 467 35.25 -93.09 - 2107 1094 900 -15.51 128.15 - 2108 3010 277 57.48 -7.36 - 2109 87 304 54.38 10.13 + 730 845 608 18.77 98.96 + 731 878 627 16.47 102.78 + 732 855 633 15.77 100.14 + 733 895 638 15.25 104.87 + 734 859 651 13.67 100.61 + 735 859 707 7.19 100.61 + 736 1688 568 23.40 -162.30 + 737 1726 621 17.20 -157.80 + 738 1700 603 19.30 -160.80 + 739 1771 619 17.40 -152.50 + 740 73 294 55.52 8.55 + 741 41 321 52.31 4.76 + 742 59 322 52.28 6.89 + 743 1783 258 59.77 -151.17 + 744 54 350 48.98 6.25 + 745 2236 514 29.70 -98.01 + 746 2334 459 36.25 -86.57 + 747 2257 459 36.18 -95.56 + 748 2057 467 35.24 -119.03 + 749 2303 438 38.62 -90.18 + 750 2183 440 38.46 -104.18 + 751 2376 414 41.50 -81.60 + 752 2111 400 43.11 -112.68 + 753 2084 363 47.47 -115.80 + 754 18 416 41.28 2.07 + 755 3036 423 40.42 -4.25 + 756 3068 431 39.50 -0.47 + 757 2212 456 36.50 -100.80 + 758 2205 509 30.30 -101.70 + 759 2198 532 27.70 -102.50 + 760 2227 508 30.50 -99.10 + 761 2230 526 28.40 -98.70 + 762 2229 544 26.30 -98.80 + 763 2241 560 24.40 -97.40 + 764 2259 547 25.90 -95.30 + 765 2267 559 24.50 -94.40 + 766 2257 569 23.30 -95.60 + 767 2269 612 18.30 -94.20 + 768 2278 585 21.40 -93.10 + 769 2291 569 23.30 -91.60 + 770 2316 566 23.70 -88.70 + 771 2347 572 23.00 -85.00 + 772 2236 567 23.50 -98.00 + 773 2292 375 46.02 -91.45 + 774 2366 437 38.83 -82.80 + 775 2402 436 38.88 -78.52 + 776 2400 430 39.62 -78.76 + 777 2415 430 39.61 -77.01 + 778 76 315 53.05 8.79 + 779 115 320 52.47 13.40 + 780 62 334 50.87 7.15 + 781 74 341 50.05 8.58 + 782 79 352 48.68 9.22 + 783 101 355 48.35 11.78 + 784 122 356 48.23 14.19 + 785 142 357 48.12 16.57 + 786 122 340 50.10 14.26 + 787 158 304 54.38 18.47 + 788 179 323 52.17 20.97 + 789 145 332 51.10 16.89 + 790 164 363 47.43 19.18 + 791 176 386 44.78 20.53 + 792 200 404 42.69 23.41 + 793 235 405 42.57 27.52 + 794 238 399 43.23 27.83 + 795 213 409 42.07 24.86 + 796 223 388 44.57 26.09 + 797 106 380 45.50 12.33 + 798 108 411 41.80 12.60 + 799 105 411 41.80 12.23 + 800 207 465 35.53 24.15 + 801 249 418 40.97 29.08 + 802 282 425 40.13 33.00 + 803 344 446 37.75 40.20 + 804 284 468 35.15 33.28 + 805 1594 218 64.43 -173.23 + 806 258 259 59.58 30.18 + 807 321 292 55.75 37.57 + 808 708 298 55.03 82.90 + 809 1126 400 43.12 131.90 + 810 657 399 43.23 76.93 + 811 384 412 41.68 44.95 + 812 636 400 43.07 74.47 + 813 592 416 41.27 69.27 + 814 308 495 31.98 35.98 + 815 301 496 31.87 35.22 + 816 400 556 24.88 46.77 + 817 399 557 24.72 46.72 + 818 410 519 29.22 47.98 + 819 369 458 36.32 43.15 + 820 378 484 33.22 44.23 + 821 408 507 30.57 47.78 + 822 419 529 28.00 49.00 + 823 427 538 27.00 50.00 + 824 438 463 35.68 51.32 + 825 525 503 31.05 61.47 + 826 602 474 34.42 70.47 + 827 562 501 31.31 65.85 + 828 441 552 25.25 51.57 + 829 473 552 25.25 55.33 + 830 467 560 24.42 54.65 + 831 2486 115 76.53 -68.75 + 832 659 524 28.58 77.20 + 833 711 617 17.72 83.30 + 834 915 399 43.20 107.17 + 835 729 532 27.70 85.37 + 836 975 577 22.32 114.17 + 837 1037 554 25.03 121.52 + 838 989 676 10.72 115.83 + 839 1083 447 37.55 126.80 + 840 1101 468 35.18 128.93 + 841 1207 421 40.70 141.37 + 842 1169 467 35.25 136.93 + 843 1193 465 35.55 139.78 + 844 1198 463 35.76 140.38 + 845 1157 472 34.68 135.53 + 846 856 723 5.30 100.27 + 847 869 745 2.75 101.72 + 848 886 756 1.38 103.72 + 849 896 573 22.82 104.97 + 850 903 589 21.02 105.80 + 851 911 676 10.82 106.67 + 852 1081 327 51.72 126.65 + 853 994 428 39.80 116.47 + 854 1027 460 36.07 120.33 + 855 888 506 30.67 104.02 + 856 930 475 34.30 108.93 + 857 972 473 34.52 113.83 + 858 1037 502 31.17 121.43 + 859 2941 530 27.93 -15.38 + 860 3007 481 33.57 -7.67 + 861 3004 498 31.62 -8.03 + 862 47 573 22.82 5.47 + 863 19 653 13.48 2.17 + 864 3047 625 16.72 -3.00 + 865 2923 642 14.73 -17.50 + 866 2929 654 13.35 -16.80 + 867 618 830 -7.30 72.42 + 868 199 561 24.22 23.30 + 869 233 501 31.33 27.22 + 870 315 779 -1.28 36.83 + 871 317 797 -3.42 37.07 + 872 327 810 -4.92 38.23 + 873 132 805 -4.38 15.45 + 874 29 712 6.58 3.33 + 875 3071 720 5.60 -0.17 + 876 3008 705 7.38 -7.53 + 877 3039 723 5.25 -3.93 + 878 2984 715 6.23 -10.37 + 879 113 844 -8.85 13.23 + 880 265 976 -24.37 31.05 + 881 159 1058 -33.97 18.60 + 882 1735 159 71.30 -156.78 + 883 1847 169 70.13 -143.63 + 884 1655 180 68.88 -166.13 + 885 1685 197 66.87 -162.63 + 886 1774 176 69.37 -152.13 + 887 1780 197 66.92 -151.52 + 888 1775 212 65.17 -152.10 + 889 1833 200 66.57 -145.27 + 890 1661 217 64.50 -165.43 + 891 1700 223 63.88 -160.80 + 892 1656 241 61.78 -166.03 + 893 1692 249 60.78 -161.80 + 894 1733 215 64.73 -156.93 + 895 1745 230 62.97 -155.62 + 896 1741 231 62.90 -155.98 + 897 1745 246 61.10 -155.58 + 898 1792 236 62.30 -150.10 + 899 1782 239 61.97 -151.18 + 900 1782 251 60.57 -151.25 + 901 1811 215 64.82 -147.87 + 902 1817 216 64.67 -147.10 + 903 1829 222 63.97 -145.70 + 904 1829 222 64.00 -145.73 + 905 1831 237 62.15 -145.45 + 906 1794 245 61.25 -149.80 + 907 1792 246 61.17 -150.02 + 908 1800 242 61.60 -149.08 + 909 1824 246 61.13 -146.35 + 910 1797 255 60.12 -149.45 + 911 1868 215 64.78 -141.15 + 912 1861 230 62.97 -141.93 + 913 1831 252 60.50 -145.50 + 914 1690 267 58.65 -162.07 + 915 1620 280 57.15 -170.22 + 916 1684 297 55.20 -162.73 + 917 1720 264 59.05 -158.52 + 918 1736 267 58.68 -156.65 + 919 1751 258 59.75 -154.92 + 920 1780 259 59.63 -151.50 + 921 1824 261 59.43 -146.33 + 922 1771 275 57.75 -152.50 + 923 1881 260 59.52 -139.67 + 924 1918 260 59.47 -135.30 + 925 1914 269 58.42 -135.73 + 926 1918 281 57.07 -135.35 + 927 1924 270 58.37 -134.58 + 928 1938 283 56.82 -132.97 + 929 1943 286 56.48 -132.37 + 930 1949 296 55.35 -131.70 + 931 1950 298 55.03 -131.57 + 932 1486 318 52.72 174.12 + 933 1565 325 51.88 -176.65 + 934 1632 316 52.95 -168.85 + 935 1651 308 53.90 -166.55 + 936 1954 325 51.93 -131.02 + 937 1991 211 65.28 -126.75 + 938 2003 153 72.00 -125.28 + 939 2070 288 56.23 -117.43 + 940 2054 117 76.23 -119.33 + 941 2210 283 56.87 -101.08 + 942 2237 292 55.75 -97.87 + 943 2379 181 68.78 -81.25 + 944 2541 64 82.50 -62.33 + 945 2028 349 49.03 -122.37 + 946 1986 335 50.68 -127.37 + 947 2099 311 53.55 -114.10 + 948 2103 313 53.30 -113.58 + 949 2146 306 54.13 -108.52 + 950 2124 339 50.27 -111.18 + 951 2185 313 53.33 -104.00 + 952 2462 368 46.90 -71.50 + 953 2568 362 47.57 -59.17 + 954 2054 342 49.95 -119.40 + 955 1963 269 58.42 -130.00 + 956 2390 399 43.17 -79.93 + 957 2387 397 43.47 -80.38 + 958 2531 385 44.88 -63.50 + 959 2519 384 44.98 -64.92 + 960 2516 395 43.72 -65.25 + 961 2123 207 65.77 -111.25 + 962 2364 407 42.27 -82.97 + 963 2560 393 43.93 -60.02 + 964 2531 387 44.63 -63.50 + 965 2508 394 43.87 -66.10 + 966 2510 381 45.32 -65.88 + 967 2380 401 43.03 -81.15 + 968 2393 395 43.67 -79.63 + 969 2413 376 45.95 -77.32 + 970 2443 380 45.47 -73.75 + 971 2441 378 45.68 -74.03 + 972 2427 381 45.32 -75.67 + 973 2404 390 44.23 -78.37 + 974 2396 384 44.97 -79.30 + 975 2380 386 44.75 -81.10 + 976 2506 377 45.83 -66.43 + 977 2521 374 46.12 -64.68 + 978 2534 373 46.28 -63.13 + 979 2560 374 46.17 -60.05 + 980 2463 369 46.80 -71.40 + 981 2424 372 46.38 -75.97 + 982 2409 358 48.05 -77.78 + 983 2395 372 46.37 -79.42 + 984 2349 359 47.97 -84.78 + 985 2378 353 48.57 -81.37 + 986 2323 322 52.23 -87.88 + 987 2310 355 48.37 -89.32 + 988 2019 353 48.65 -123.43 + 989 2623 362 47.62 -52.73 + 990 2607 350 48.95 -54.57 + 991 2583 348 49.22 -57.40 + 992 2507 339 50.22 -66.27 + 993 2573 354 48.53 -58.55 + 994 2557 313 53.32 -60.42 + 995 2437 343 49.77 -74.53 + 996 2444 309 53.75 -73.67 + 997 2331 343 49.78 -86.93 + 998 2384 330 51.27 -80.65 + 999 2385 330 51.28 -80.60 + 1000 2303 329 51.45 -90.20 + 1001 2306 309 53.83 -89.87 + 1002 2267 343 49.78 -94.37 + 1003 2243 342 49.90 -97.23 + 1004 2222 343 49.78 -99.65 + 1005 2205 301 54.68 -101.68 + 1006 2179 338 50.43 -104.67 + 1007 2162 323 52.17 -106.68 + 1008 2210 307 53.97 -101.10 + 1009 2171 314 53.22 -105.68 + 1010 2128 341 50.02 -110.72 + 1011 2110 344 49.63 -112.80 + 1012 2100 332 51.12 -114.02 + 1013 2085 344 49.62 -115.78 + 1014 2069 347 49.30 -117.63 + 1015 2021 348 49.18 -123.17 + 1016 2007 344 49.72 -124.90 + 1017 2026 308 53.88 -122.68 + 1018 2489 272 58.10 -68.42 + 1019 2406 269 58.45 -78.12 + 1020 2488 224 63.75 -68.53 + 1021 2270 267 58.75 -94.07 + 1022 2361 220 64.20 -83.37 + 1023 2339 85 79.98 -85.93 + 1024 2158 278 57.35 -107.13 + 1025 2262 130 74.72 -94.95 + 1026 2175 178 69.10 -105.12 + 1027 2253 219 64.30 -96.00 + 1028 2117 300 54.77 -112.02 + 1029 2117 256 60.02 -111.95 + 1030 2096 234 62.50 -114.40 + 1031 2026 266 58.83 -122.58 + 1032 2038 240 61.80 -121.20 + 1033 1973 255 60.12 -128.82 + 1034 1933 185 68.32 -133.53 + 1035 1920 250 60.72 -135.07 + 1036 1885 221 64.05 -139.13 + 1037 1879 191 67.57 -139.82 + 1038 2375 558 24.55 -81.75 + 1039 2381 557 24.73 -81.05 + 1040 2387 548 25.82 -80.28 + 1041 2387 547 25.90 -80.28 + 1042 2389 545 26.07 -80.15 + 1043 2386 549 25.65 -80.43 + 1044 2389 540 26.68 -80.12 + 1045 2388 544 26.20 -80.17 + 1046 2384 528 28.10 -80.65 + 1047 2386 532 27.65 -80.42 + 1048 2379 525 28.43 -81.32 + 1049 2381 519 29.18 -81.05 + 1050 2375 508 30.50 -81.69 + 1051 2374 510 30.22 -81.88 + 1052 2380 494 32.13 -81.19 + 1053 2384 493 32.22 -80.70 + 1054 2390 487 32.90 -80.03 + 1055 2370 532 27.70 -82.38 + 1056 2387 533 27.50 -80.37 + 1057 2374 541 26.58 -81.87 + 1058 2375 542 26.53 -81.75 + 1059 2368 529 27.97 -82.53 + 1060 2368 534 27.40 -82.55 + 1061 2367 530 27.92 -82.68 + 1062 2373 529 27.99 -82.02 + 1063 2363 515 29.62 -83.10 + 1064 2369 501 31.25 -82.40 + 1065 2377 501 31.25 -81.47 + 1066 2378 502 31.15 -81.37 + 1067 2353 509 30.38 -84.37 + 1068 2370 515 29.68 -82.27 + 1069 2351 483 33.36 -84.57 + 1070 2354 499 31.53 -84.18 + 1071 2362 505 30.78 -83.28 + 1072 2359 489 32.70 -83.65 + 1073 2373 483 33.37 -81.97 + 1074 2352 481 33.65 -84.42 + 1075 2351 480 33.78 -84.52 + 1076 2353 479 33.88 -84.30 + 1077 2347 514 29.73 -84.98 + 1078 2339 507 30.56 -85.92 + 1079 2329 508 30.47 -87.18 + 1080 2319 506 30.68 -88.25 + 1081 2321 507 30.63 -88.07 + 1082 2341 510 30.22 -85.68 + 1083 2349 492 32.33 -84.83 + 1084 2348 490 32.52 -84.93 + 1085 2335 492 32.30 -86.40 + 1086 2343 501 31.32 -85.45 + 1087 2332 481 33.57 -86.75 + 1088 2325 484 33.22 -87.62 + 1089 2340 481 33.58 -85.85 + 1090 2328 487 32.90 -87.25 + 1091 2276 514 29.78 -93.30 + 1092 2332 485 33.17 -86.77 + 1093 2303 520 29.10 -90.20 + 1094 2302 512 29.98 -90.25 + 1095 2288 512 30.03 -91.88 + 1096 2304 511 30.05 -90.03 + 1097 2295 507 30.53 -91.15 + 1098 2310 518 29.33 -89.40 + 1099 2306 509 30.33 -89.82 + 1100 2315 492 32.33 -88.75 + 1101 2310 499 31.47 -89.33 + 1102 2304 492 32.32 -90.08 + 1103 2296 482 33.48 -90.98 + 1104 2300 502 31.18 -90.47 + 1105 2304 482 33.50 -90.08 + 1106 2277 503 31.05 -93.20 + 1107 2277 511 30.12 -93.22 + 1108 2288 510 30.20 -91.98 + 1109 2270 512 29.95 -94.02 + 1110 2264 518 29.30 -94.80 + 1111 2259 512 29.97 -95.35 + 1112 2259 515 29.65 -95.28 + 1113 2250 507 30.58 -96.37 + 1114 2264 501 31.23 -94.75 + 1115 2258 492 32.34 -95.40 + 1116 2265 492 32.34 -94.65 + 1117 2272 491 32.47 -93.82 + 1118 2287 490 32.52 -92.03 + 1119 2285 500 31.40 -92.30 + 1120 2242 488 32.83 -97.30 + 1121 2241 547 25.90 -97.43 + 1122 2239 544 26.23 -97.65 + 1123 2234 545 26.18 -98.23 + 1124 2240 531 27.77 -97.50 + 1125 2236 531 27.73 -98.03 + 1126 2224 533 27.55 -99.47 + 1127 2258 519 29.12 -95.47 + 1128 2232 516 29.53 -98.47 + 1129 2239 509 30.30 -97.70 + 1130 2245 522 28.85 -96.92 + 1131 2243 498 31.62 -97.22 + 1132 2238 503 31.07 -97.83 + 1133 2246 488 32.84 -96.85 + 1134 2258 481 33.63 -95.45 + 1135 2245 487 32.90 -97.03 + 1136 2064 469 35.07 -118.15 + 1137 2242 488 32.82 -97.37 + 1138 2235 493 32.22 -98.18 + 1139 2211 517 29.37 -100.92 + 1140 2178 496 31.83 -104.80 + 1141 2215 500 31.37 -100.50 + 1142 2197 461 36.02 -102.55 + 1143 2185 509 30.37 -104.02 + 1144 2201 495 31.95 -102.18 + 1145 2192 497 31.78 -103.20 + 1146 2222 491 32.41 -99.68 + 1147 2204 481 33.65 -101.82 + 1148 2181 484 33.30 -104.53 + 1149 2183 492 32.33 -104.27 + 1150 2192 489 32.68 -103.22 + 1151 2166 493 32.24 -106.22 + 1152 2160 492 32.28 -106.92 + 1153 2165 497 31.80 -106.40 + 1154 2157 484 33.23 -107.27 + 1155 2153 493 32.27 -107.72 + 1156 2131 499 31.57 -110.33 + 1157 2137 499 31.47 -109.60 + 1158 2126 494 32.12 -110.93 + 1159 2117 483 33.43 -112.02 + 1160 2095 489 32.65 -114.60 + 1161 2069 477 34.05 -117.60 + 1162 2078 479 33.83 -116.50 + 1163 2063 476 34.20 -118.35 + 1164 2061 476 34.22 -118.48 + 1165 2043 467 35.23 -120.63 + 1166 2073 489 32.73 -117.17 + 1167 2074 490 32.57 -116.98 + 1168 2053 484 33.25 -119.45 + 1169 2062 483 33.40 -118.42 + 1170 2072 485 33.13 -117.28 + 1171 2073 488 32.85 -117.12 + 1172 2062 479 33.93 -118.40 + 1173 2064 479 33.82 -118.15 + 1174 2067 481 33.68 -117.87 + 1175 2408 475 34.27 -77.90 + 1176 2398 468 35.17 -79.02 + 1177 2399 469 34.98 -78.87 + 1178 2428 467 35.27 -75.55 + 1179 2417 471 34.78 -76.87 + 1180 2400 462 35.87 -78.78 + 1181 2412 464 35.64 -77.39 + 1182 2407 466 35.33 -77.97 + 1183 2408 462 35.84 -77.90 + 1184 2410 471 34.82 -77.61 + 1185 2457 454 36.82 -72.10 + 1186 2422 453 36.90 -76.19 + 1187 2420 451 37.13 -76.50 + 1188 2416 470 34.90 -76.88 + 1189 2415 469 35.07 -77.05 + 1190 2380 478 33.95 -81.12 + 1191 2392 476 34.18 -79.72 + 1192 2362 478 33.95 -83.32 + 1193 2370 471 34.84 -82.35 + 1194 2371 470 34.90 -82.22 + 1195 2367 474 34.50 -82.72 + 1196 2382 467 35.22 -80.93 + 1197 2378 463 35.73 -81.37 + 1198 2368 466 35.43 -82.55 + 1199 2390 460 36.08 -79.94 + 1200 2386 450 37.21 -80.41 + 1201 2369 457 36.48 -82.40 + 1202 2388 460 36.13 -80.22 + 1203 2346 475 34.35 -85.16 + 1204 2332 472 34.65 -86.77 + 1205 2325 471 34.75 -87.62 + 1206 2345 469 35.03 -85.20 + 1207 2356 462 35.82 -83.98 + 1208 2346 461 35.95 -85.08 + 1209 2333 460 36.13 -86.68 + 1210 2315 475 34.27 -88.77 + 1211 2304 469 35.05 -90.00 + 1212 2314 464 35.59 -88.92 + 1213 2285 471 34.83 -92.25 + 1214 2285 472 34.73 -92.23 + 1215 2299 462 35.83 -90.65 + 1216 2278 474 34.48 -93.10 + 1217 2288 476 34.18 -91.93 + 1218 2271 482 33.45 -93.98 + 1219 2281 484 33.22 -92.80 + 1220 2267 466 35.33 -94.37 + 1221 2269 461 36.00 -94.17 + 1222 2278 458 36.27 -93.15 + 1223 2283 459 36.20 -92.47 + 1224 2290 463 35.73 -91.65 + 1225 2288 453 36.88 -91.90 + 1226 2308 450 37.23 -89.57 + 1227 2270 453 36.91 -94.02 + 1228 2266 451 37.15 -94.50 + 1229 2232 478 33.98 -98.50 + 1230 2227 469 34.98 -99.05 + 1231 2226 466 35.33 -99.20 + 1232 2221 458 36.30 -99.77 + 1233 2240 466 35.40 -97.60 + 1234 2244 454 36.73 -97.10 + 1235 2233 473 34.60 -98.40 + 1236 2245 475 34.30 -97.02 + 1237 2254 459 36.20 -95.90 + 1238 2253 454 36.76 -96.01 + 1239 2255 470 34.88 -95.78 + 1240 2241 467 35.23 -97.47 + 1241 2192 457 36.45 -103.15 + 1242 2217 474 34.43 -100.28 + 1243 2144 465 35.52 -108.78 + 1244 2205 467 35.23 -101.70 + 1245 2162 496 31.87 -106.70 + 1246 2163 469 35.05 -106.62 + 1247 2167 464 35.62 -106.08 + 1248 2149 454 36.75 -108.23 + 1249 2188 468 35.18 -103.60 + 1250 2175 464 35.65 -105.15 + 1251 2100 467 35.27 -113.95 + 1252 2121 453 36.93 -111.45 + 1253 2113 473 34.53 -112.47 + 1254 2113 472 34.65 -112.42 + 1255 2128 469 35.02 -110.73 + 1256 2134 475 34.27 -110.00 + 1257 2139 473 34.51 -109.38 + 1258 2120 468 35.13 -111.67 + 1259 2118 467 35.23 -111.82 + 1260 2115 461 35.95 -112.15 + 1261 2094 471 34.77 -114.62 + 1262 2066 470 34.92 -117.90 + 1263 2076 471 34.84 -116.78 + 1264 2064 472 34.73 -118.22 + 1265 2065 472 34.63 -118.08 + 1266 2057 466 35.43 -119.05 + 1267 2090 460 36.08 -115.17 + 1268 2082 455 36.62 -116.02 + 1269 2051 454 36.77 -119.72 + 1270 2056 477 34.12 -119.12 + 1271 2050 474 34.43 -119.83 + 1272 2055 476 34.21 -119.20 + 1273 2044 471 34.75 -120.57 + 1274 2045 470 34.90 -120.45 + 1275 2043 464 35.66 -120.63 + 1276 2413 448 37.50 -77.33 + 1277 2403 443 38.13 -78.44 + 1278 2403 449 37.35 -78.43 + 1279 2428 444 37.93 -75.48 + 1280 2412 436 38.95 -77.44 + 1281 2412 441 38.27 -77.45 + 1282 2421 441 38.28 -76.40 + 1283 2428 441 38.33 -75.51 + 1284 2415 436 38.84 -77.03 + 1285 2418 434 39.18 -76.67 + 1286 2409 429 39.70 -77.73 + 1287 2420 432 39.33 -76.42 + 1288 2436 431 39.45 -74.57 + 1289 2432 432 39.37 -75.07 + 1290 2430 428 39.88 -75.25 + 1291 2432 426 40.08 -75.01 + 1292 2427 429 39.68 -75.60 + 1293 2434 424 40.28 -74.82 + 1294 2436 426 40.02 -74.60 + 1295 2437 420 40.80 -74.42 + 1296 2397 449 37.33 -79.19 + 1297 2396 456 36.57 -79.33 + 1298 2390 449 37.32 -79.97 + 1299 2391 444 37.95 -79.83 + 1300 2380 446 37.78 -81.12 + 1301 2380 450 37.30 -81.19 + 1302 2386 445 37.87 -80.40 + 1303 2376 440 38.37 -81.60 + 1304 2391 436 38.88 -79.85 + 1305 2388 433 39.30 -80.23 + 1306 2391 430 39.65 -79.92 + 1307 2407 432 39.40 -77.98 + 1308 2350 435 39.05 -84.67 + 1309 2351 443 38.03 -84.60 + 1310 2341 442 38.18 -85.73 + 1311 2362 447 37.59 -83.32 + 1312 2329 446 37.75 -87.16 + 1313 2339 444 37.91 -85.97 + 1314 2355 451 37.08 -84.08 + 1315 2368 440 38.37 -82.55 + 1316 2357 432 39.42 -83.83 + 1317 2331 441 38.25 -86.95 + 1318 2378 432 39.34 -81.43 + 1319 2384 425 40.18 -80.65 + 1320 2365 427 40.00 -82.88 + 1321 2365 428 39.82 -82.93 + 1322 2374 427 39.95 -81.90 + 1323 2354 427 39.90 -84.20 + 1324 2352 434 39.09 -84.42 + 1325 2326 443 38.05 -87.53 + 1326 2313 438 38.65 -88.97 + 1327 2311 446 37.78 -89.25 + 1328 2301 437 38.75 -90.37 + 1329 2299 438 38.66 -90.65 + 1330 2315 452 37.07 -88.77 + 1331 2350 452 37.05 -84.61 + 1332 2327 431 39.45 -87.32 + 1333 2333 434 39.15 -86.62 + 1334 2336 429 39.73 -86.27 + 1335 2331 423 40.41 -86.93 + 1336 2307 428 39.84 -89.67 + 1337 2294 427 39.95 -91.20 + 1338 2314 422 40.48 -88.92 + 1339 2325 426 40.12 -87.60 + 1340 2276 450 37.23 -93.38 + 1341 2286 437 38.82 -92.22 + 1342 2301 446 37.77 -90.43 + 1343 2289 443 38.13 -91.77 + 1344 2283 443 38.10 -92.55 + 1345 2264 432 39.32 -94.72 + 1346 2265 434 39.12 -94.60 + 1347 2263 437 38.83 -94.89 + 1348 2263 429 39.77 -94.92 + 1349 2241 447 37.65 -97.43 + 1350 2237 443 38.07 -97.87 + 1351 2258 447 37.66 -95.48 + 1352 2242 443 38.06 -97.28 + 1353 2219 446 37.77 -99.97 + 1354 2213 444 37.93 -100.72 + 1355 2211 452 37.04 -100.97 + 1356 2229 441 38.34 -98.86 + 1357 2225 436 38.85 -99.27 + 1358 2232 450 37.27 -98.55 + 1359 2248 434 39.13 -96.67 + 1360 2252 441 38.33 -96.19 + 1361 2257 434 39.07 -95.62 + 1362 2256 436 38.95 -95.67 + 1363 2239 430 39.55 -97.65 + 1364 2229 436 38.87 -98.82 + 1365 2239 437 38.80 -97.65 + 1366 2203 452 37.01 -101.88 + 1367 2169 448 37.45 -105.87 + 1368 2153 451 37.15 -107.75 + 1369 2152 444 37.95 -107.90 + 1370 2189 443 38.05 -103.52 + 1371 2196 443 38.07 -102.68 + 1372 2181 441 38.28 -104.52 + 1373 2205 432 39.37 -101.70 + 1374 2221 432 39.38 -99.83 + 1375 2179 437 38.82 -104.72 + 1376 2178 430 39.57 -104.85 + 1377 2160 430 39.65 -106.92 + 1378 2161 433 39.22 -106.87 + 1379 2160 439 38.53 -106.93 + 1380 2178 438 38.70 -104.77 + 1381 2178 429 39.75 -104.87 + 1382 2192 425 40.17 -103.22 + 1383 2175 427 39.91 -105.12 + 1384 2127 430 39.62 -110.75 + 1385 2138 447 37.62 -109.47 + 1386 2128 440 38.37 -110.72 + 1387 2104 452 37.04 -113.50 + 1388 2107 446 37.70 -113.10 + 1389 2115 446 37.70 -112.15 + 1390 2146 434 39.12 -108.53 + 1391 2152 439 38.50 -107.90 + 1392 2145 450 37.30 -108.67 + 1393 2180 423 40.43 -104.63 + 1394 2176 423 40.45 -105.01 + 1395 2132 435 39.00 -110.17 + 1396 2136 437 38.76 -109.75 + 1397 2112 432 39.33 -112.58 + 1398 2118 411 41.78 -111.85 + 1399 2062 449 37.37 -118.37 + 1400 2044 450 37.28 -120.52 + 1401 2036 439 38.52 -121.50 + 1402 2037 439 38.55 -121.30 + 1403 2035 438 38.70 -121.58 + 1404 2073 443 38.05 -117.08 + 1405 2060 439 38.55 -118.63 + 1406 2092 433 39.28 -114.85 + 1407 2095 447 37.62 -114.52 + 1408 2050 431 39.50 -119.78 + 1409 2050 430 39.57 -119.79 + 1410 2033 456 36.58 -121.85 + 1411 2035 455 36.66 -121.60 + 1412 2038 444 37.90 -121.25 + 1413 2033 446 37.70 -121.82 + 1414 2030 446 37.73 -122.22 + 1415 2028 447 37.62 -122.38 + 1416 2032 449 37.37 -121.93 + 1417 2024 439 38.52 -122.82 + 1418 2451 419 40.87 -72.86 + 1419 2440 421 40.70 -74.17 + 1420 2440 419 40.84 -74.07 + 1421 2442 420 40.77 -73.90 + 1422 2449 420 40.80 -73.10 + 1423 2442 413 41.63 -73.87 + 1424 2444 417 41.07 -73.69 + 1425 2440 414 41.50 -74.10 + 1426 2449 417 41.17 -73.12 + 1427 2451 416 41.27 -72.87 + 1428 2458 415 41.33 -72.05 + 1429 2462 417 41.17 -71.58 + 1430 2471 412 41.65 -70.52 + 1431 2475 416 41.25 -70.07 + 1432 2469 410 41.92 -70.73 + 1433 2467 412 41.68 -70.97 + 1434 2473 412 41.67 -70.28 + 1435 2463 412 41.73 -71.43 + 1436 2463 413 41.60 -71.42 + 1437 2452 410 41.93 -72.68 + 1438 2457 412 41.73 -72.18 + 1439 2456 405 42.57 -72.27 + 1440 2453 412 41.73 -72.65 + 1441 2467 405 42.58 -70.92 + 1442 2466 406 42.37 -71.03 + 1443 2459 407 42.27 -71.87 + 1444 2424 423 40.38 -75.97 + 1445 2417 425 40.20 -76.76 + 1446 2421 426 40.12 -76.29 + 1447 2399 416 41.18 -78.90 + 1448 2404 424 40.30 -78.32 + 1449 2400 424 40.32 -78.83 + 1450 2408 419 40.84 -77.85 + 1451 2426 415 41.33 -75.73 + 1452 2416 416 41.25 -76.92 + 1453 2434 412 41.70 -74.80 + 1454 2424 408 42.22 -75.98 + 1455 2420 405 42.48 -76.44 + 1456 2416 408 42.17 -76.90 + 1457 2450 396 43.53 -72.95 + 1458 2429 421 40.65 -75.43 + 1459 2443 403 42.75 -73.80 + 1460 2444 398 43.33 -73.62 + 1461 2428 387 44.68 -75.47 + 1462 2423 400 43.12 -76.12 + 1463 2429 400 43.15 -75.37 + 1464 2388 422 40.50 -80.22 + 1465 2386 420 40.77 -80.40 + 1466 2390 424 40.34 -79.93 + 1467 2395 424 40.28 -79.40 + 1468 2378 419 40.91 -81.43 + 1469 2396 408 42.15 -79.26 + 1470 2374 414 41.42 -81.87 + 1471 2368 420 40.82 -82.52 + 1472 2384 416 41.27 -80.67 + 1473 2388 409 42.08 -80.18 + 1474 2402 411 41.80 -78.62 + 1475 2391 415 41.38 -79.87 + 1476 2401 402 42.93 -78.73 + 1477 2399 400 43.10 -78.94 + 1478 2410 400 43.12 -77.67 + 1479 2322 410 41.98 -87.90 + 1480 2319 410 41.92 -88.25 + 1481 2319 426 40.03 -88.28 + 1482 2314 428 39.83 -88.87 + 1483 2307 421 40.66 -89.68 + 1484 2307 412 41.74 -89.68 + 1485 2345 418 41.00 -85.20 + 1486 2344 424 40.25 -85.40 + 1487 2327 413 41.62 -87.42 + 1488 2324 411 41.78 -87.75 + 1489 2325 411 41.87 -87.60 + 1490 2323 406 42.42 -87.87 + 1491 2336 412 41.70 -86.32 + 1492 2357 413 41.60 -83.80 + 1493 2359 418 41.02 -83.67 + 1494 2361 408 42.23 -83.33 + 1495 2364 406 42.42 -83.02 + 1496 2368 402 42.92 -82.53 + 1497 2322 363 47.45 -87.90 + 1498 2351 403 42.77 -84.60 + 1499 2352 407 42.27 -84.47 + 1500 2345 407 42.30 -85.25 + 1501 2312 408 42.20 -89.10 + 1502 2300 414 41.45 -90.52 + 1503 2290 411 41.88 -91.70 + 1504 2295 420 40.78 -91.13 + 1505 2273 413 41.53 -93.65 + 1506 2284 417 41.10 -92.45 + 1507 2258 420 40.75 -95.41 + 1508 2299 406 42.40 -90.70 + 1509 2290 399 43.28 -91.74 + 1510 2284 405 42.55 -92.40 + 1511 2276 400 43.15 -93.33 + 1512 2269 405 42.55 -94.20 + 1513 2260 404 42.60 -95.23 + 1514 2254 415 41.30 -95.90 + 1515 2247 419 40.84 -96.75 + 1516 2247 424 40.30 -96.75 + 1517 2234 418 40.97 -98.32 + 1518 2228 413 41.62 -98.95 + 1519 2228 420 40.73 -99.00 + 1520 2252 412 41.76 -96.18 + 1521 2257 426 40.08 -95.60 + 1522 2222 414 41.44 -99.64 + 1523 2241 410 41.98 -97.43 + 1524 2242 414 41.45 -97.34 + 1525 2230 405 42.47 -98.69 + 1526 2250 406 42.40 -96.38 + 1527 2250 415 41.32 -96.37 + 1528 2194 417 41.10 -102.98 + 1529 2213 417 41.13 -100.68 + 1530 2205 422 40.51 -101.62 + 1531 2225 423 40.45 -99.33 + 1532 2195 409 42.05 -102.80 + 1533 2193 402 42.83 -103.10 + 1534 2178 417 41.15 -104.82 + 1535 2171 415 41.32 -105.67 + 1536 2179 428 39.87 -104.67 + 1537 2188 411 41.87 -103.60 + 1538 2164 402 42.92 -106.47 + 1539 2138 423 40.43 -109.52 + 1540 2158 422 40.48 -107.22 + 1541 2153 431 39.53 -107.73 + 1542 2117 420 40.78 -111.97 + 1543 2119 425 40.22 -111.72 + 1544 2142 413 41.60 -109.07 + 1545 2158 411 41.80 -107.20 + 1546 2117 416 41.20 -112.02 + 1547 2145 402 42.82 -108.73 + 1548 2147 400 43.07 -108.47 + 1549 2125 416 41.28 -111.03 + 1550 2128 396 43.60 -110.73 + 1551 2112 402 42.92 -112.60 + 1552 2116 397 43.52 -112.07 + 1553 2082 385 44.88 -116.10 + 1554 2061 426 40.07 -118.57 + 1555 2099 420 40.73 -114.03 + 1556 2085 419 40.87 -115.73 + 1557 2085 419 40.83 -115.78 + 1558 2085 412 41.67 -115.78 + 1559 2067 419 40.90 -117.80 + 1560 2044 423 40.38 -120.57 + 1561 2043 433 39.28 -120.70 + 1562 2047 432 39.32 -120.13 + 1563 2048 436 38.90 -120.00 + 1564 2097 397 43.50 -114.30 + 1565 2096 405 42.48 -114.48 + 1566 2102 405 42.55 -113.77 + 1567 2034 408 42.15 -121.73 + 1568 2021 434 39.13 -123.20 + 1569 2029 425 40.15 -122.25 + 1570 2029 422 40.50 -122.30 + 1571 2014 418 40.98 -124.10 + 1572 2012 411 41.78 -124.23 + 1573 2044 414 41.50 -120.53 + 1574 2024 406 42.37 -122.87 + 1575 2462 399 43.20 -71.50 + 1576 2468 400 43.08 -70.82 + 1577 2472 395 43.65 -70.32 + 1578 2469 398 43.40 -70.72 + 1579 2489 389 44.45 -68.37 + 1580 2483 392 44.07 -69.10 + 1581 2501 385 44.92 -67.00 + 1582 2490 364 47.28 -68.32 + 1583 2485 386 44.80 -68.83 + 1584 2454 398 43.35 -72.52 + 1585 2456 396 43.63 -72.30 + 1586 2462 389 44.36 -71.55 + 1587 2458 389 44.42 -72.02 + 1588 2453 391 44.20 -72.57 + 1589 2463 396 43.57 -71.42 + 1590 2465 387 44.58 -71.18 + 1591 2456 402 42.90 -72.27 + 1592 2448 388 44.47 -73.15 + 1593 2471 388 44.53 -70.53 + 1594 2473 392 44.05 -70.28 + 1595 2477 390 44.32 -69.80 + 1596 2479 380 45.47 -69.58 + 1597 2486 378 45.65 -68.68 + 1598 2446 387 44.65 -73.47 + 1599 2434 384 44.93 -74.85 + 1600 2424 392 44.00 -76.01 + 1601 2439 389 44.38 -74.19 + 1602 2360 404 42.70 -83.47 + 1603 2350 385 44.90 -84.72 + 1604 2343 402 42.88 -85.52 + 1605 2335 408 42.14 -86.44 + 1606 2342 408 42.23 -85.55 + 1607 2336 399 43.17 -86.25 + 1608 2358 401 42.97 -83.75 + 1609 2361 404 42.67 -83.42 + 1610 2355 396 43.53 -84.08 + 1611 2350 389 44.36 -84.67 + 1612 2344 390 44.28 -85.42 + 1613 2336 390 44.28 -86.25 + 1614 2342 386 44.73 -85.58 + 1615 2359 383 45.07 -83.57 + 1616 2361 389 44.45 -83.40 + 1617 2322 401 42.95 -87.90 + 1618 2310 400 43.13 -89.33 + 1619 2313 404 42.62 -89.04 + 1620 2303 399 43.21 -90.18 + 1621 2294 394 43.87 -91.25 + 1622 2292 385 44.87 -91.48 + 1623 2283 393 43.92 -92.50 + 1624 2320 388 44.48 -88.13 + 1625 2324 391 44.13 -87.68 + 1626 2317 393 43.98 -88.55 + 1627 2308 384 44.93 -89.63 + 1628 2307 386 44.78 -89.67 + 1629 2329 378 45.73 -87.08 + 1630 2325 383 45.12 -87.63 + 1631 2274 385 44.85 -93.57 + 1632 2247 396 43.58 -96.73 + 1633 2246 390 44.31 -96.82 + 1634 2242 402 42.92 -97.38 + 1635 2225 394 43.80 -99.32 + 1636 2234 389 44.38 -98.22 + 1637 2236 394 43.77 -98.03 + 1638 2243 385 44.92 -97.15 + 1639 2270 379 45.55 -94.07 + 1640 2269 372 46.40 -94.13 + 1641 2261 388 44.55 -95.08 + 1642 2258 376 45.87 -95.40 + 1643 2255 389 44.45 -95.82 + 1644 2266 390 44.32 -94.50 + 1645 2267 376 45.95 -94.35 + 1646 2277 385 44.88 -93.22 + 1647 2278 384 44.95 -93.07 + 1648 2271 391 44.22 -93.91 + 1649 2267 395 43.65 -94.42 + 1650 2276 395 43.68 -93.37 + 1651 2233 380 45.45 -98.43 + 1652 2193 392 44.06 -103.05 + 1653 2172 389 44.35 -105.53 + 1654 2160 386 44.77 -106.97 + 1655 2130 388 44.54 -110.42 + 1656 2151 393 43.97 -107.95 + 1657 2173 380 45.45 -105.40 + 1658 2178 366 47.13 -104.80 + 1659 2216 379 45.55 -100.41 + 1660 2217 389 44.38 -100.28 + 1661 2201 376 45.93 -102.17 + 1662 2142 388 44.52 -109.02 + 1663 2133 405 42.58 -110.11 + 1664 2124 387 44.68 -111.12 + 1665 2146 377 45.80 -108.53 + 1666 2138 366 47.05 -109.47 + 1667 2112 376 45.95 -112.50 + 1668 2112 382 45.25 -112.55 + 1669 2124 377 45.78 -111.15 + 1670 2130 378 45.70 -110.45 + 1671 2081 396 43.57 -116.22 + 1672 2057 396 43.58 -118.95 + 1673 2039 390 44.25 -121.15 + 1674 2101 383 45.12 -113.88 + 1675 2082 376 45.95 -116.13 + 1676 2058 378 45.68 -118.85 + 1677 2067 385 44.83 -117.82 + 1678 2020 399 43.23 -123.35 + 1679 2012 397 43.42 -124.25 + 1680 2021 391 44.12 -123.22 + 1681 2023 385 44.92 -123.00 + 1682 2014 387 44.58 -124.06 + 1683 2026 379 45.60 -122.60 + 1684 2028 379 45.55 -122.40 + 1685 2023 379 45.53 -122.95 + 1686 2039 379 45.62 -121.17 + 1687 2494 374 46.12 -67.80 + 1688 2479 370 46.62 -69.53 + 1689 2492 368 46.87 -68.01 + 1690 2492 370 46.68 -68.05 + 1691 2353 371 46.47 -84.37 + 1692 2352 373 46.25 -84.47 + 1693 2349 379 45.57 -84.80 + 1694 2309 378 45.63 -89.47 + 1695 2325 371 46.53 -87.55 + 1696 2327 372 46.35 -87.40 + 1697 2321 377 45.82 -88.12 + 1698 2317 365 47.17 -88.50 + 1699 2303 371 46.53 -90.13 + 1700 2286 368 46.83 -92.18 + 1701 2280 364 47.38 -92.83 + 1702 2254 368 46.83 -95.89 + 1703 2289 360 47.82 -91.83 + 1704 2276 353 48.57 -93.38 + 1705 2265 352 48.73 -94.62 + 1706 2246 368 46.90 -96.80 + 1707 2230 367 46.93 -98.68 + 1708 2262 363 47.50 -94.93 + 1709 2259 350 48.93 -95.33 + 1710 2243 359 47.95 -97.18 + 1711 2229 357 48.10 -98.87 + 1712 2213 369 46.77 -100.75 + 1713 2195 369 46.80 -102.80 + 1714 2188 357 48.18 -103.63 + 1715 2208 356 48.27 -101.28 + 1716 2207 361 47.65 -101.43 + 1717 2163 356 48.22 -106.62 + 1718 2160 364 47.33 -106.93 + 1719 2172 357 48.10 -105.58 + 1720 2183 361 47.70 -104.20 + 1721 2117 370 46.60 -112.00 + 1722 2099 367 46.92 -114.08 + 1723 2122 363 47.48 -111.37 + 1724 2136 354 48.55 -109.77 + 1725 2097 356 48.30 -114.27 + 1726 2114 353 48.60 -112.37 + 1727 2044 370 46.57 -120.53 + 1728 2037 364 47.28 -121.33 + 1729 2048 363 47.40 -120.02 + 1730 2047 363 47.40 -120.20 + 1731 2053 364 47.30 -119.52 + 1732 2054 365 47.20 -119.32 + 1733 2074 372 46.38 -117.02 + 1734 2076 360 47.77 -116.82 + 1735 2055 373 46.32 -119.27 + 1736 2056 373 46.27 -119.12 + 1737 2063 374 46.10 -118.28 + 1738 2070 361 47.63 -117.53 + 1739 2071 361 47.68 -117.32 + 1740 2073 369 46.75 -117.12 + 1741 2069 361 47.70 -117.60 + 1742 2067 354 48.55 -117.88 + 1743 2044 367 47.03 -120.53 + 1744 2019 357 48.12 -123.50 + 1745 2053 355 48.42 -119.53 + 1746 2015 374 46.15 -123.88 + 1747 2024 367 46.97 -122.90 + 1748 2015 367 46.97 -123.93 + 1749 2023 374 46.12 -122.94 + 1750 2029 363 47.45 -122.30 + 1751 2030 363 47.50 -122.22 + 1752 2029 362 47.53 -122.30 + 1753 2029 359 47.90 -122.28 + 1754 2026 364 47.27 -122.58 + 1755 2378 532 27.65 -81.33 + 1756 2010 359 47.95 -124.55 + 1757 2027 351 48.80 -122.53 + 1758 2109 425 40.17 -112.93 + 1759 2169 372 46.43 -105.87 + 1760 2258 387 44.67 -95.45 + 1761 2300 399 43.22 -90.53 + 1762 2426 392 44.05 -75.73 + 1763 2473 393 43.90 -70.25 + 1764 2463 402 42.93 -71.43 + 1765 2166 410 41.90 -106.19 + 1766 2214 426 40.09 -100.65 + 1767 2205 402 42.91 -101.69 + 1768 2242 426 40.10 -97.34 + 1769 2238 408 42.21 -97.79 + 1770 2273 410 41.90 -93.70 + 1771 2300 413 41.61 -90.57 + 1772 2355 428 39.82 -84.03 + 1773 2317 411 41.77 -88.48 + 1774 2330 420 40.81 -87.05 + 1775 2344 437 38.83 -85.42 + 1776 2443 421 40.65 -73.78 + 1777 2464 405 42.47 -71.28 + 1778 2466 403 42.72 -71.12 + 1779 2454 408 42.20 -72.53 + 1780 2452 408 42.15 -72.72 + 1781 2476 412 41.67 -69.97 + 1782 2442 402 42.85 -73.93 + 1783 2201 446 37.77 -102.18 + 1784 2178 435 38.97 -104.82 + 1785 2188 433 39.26 -103.70 + 1786 2179 425 40.18 -104.72 + 1787 2227 447 37.65 -99.09 + 1788 2256 449 37.38 -95.63 + 1789 2242 441 38.31 -97.30 + 1790 2281 448 37.52 -92.70 + 1791 2269 430 39.58 -94.19 + 1792 2300 429 39.66 -90.48 + 1793 2310 425 40.15 -89.33 + 1794 2433 435 39.02 -74.92 + 1795 2068 463 35.68 -117.68 + 1796 2165 491 32.41 -106.35 + 1797 2152 454 36.84 -107.91 + 1798 2226 460 36.07 -99.22 + 1799 2223 457 36.43 -99.53 + 1800 2241 455 36.69 -97.48 + 1801 2254 463 35.68 -95.86 + 1802 2240 469 34.98 -97.52 + 1803 2305 453 36.88 -89.97 + 1804 2335 452 36.97 -86.42 + 1805 2422 458 36.27 -76.18 + 1806 2086 488 32.83 -115.58 + 1807 2081 481 33.63 -116.17 + 1808 2094 481 33.62 -114.72 + 1809 2188 469 35.08 -103.61 + 1810 2167 486 33.08 -106.12 + 1811 2165 487 32.90 -106.40 + 1812 2211 486 33.02 -100.98 + 1813 2221 508 30.50 -99.77 + 1814 2256 497 31.78 -95.71 + 1815 2268 477 34.11 -94.29 + 1816 2281 496 31.90 -92.78 + 1817 2312 509 30.40 -89.07 + 1818 2314 477 34.09 -88.86 + 1819 2376 496 31.90 -81.63 + 1820 2364 504 30.89 -83.01 + 1821 2386 478 33.97 -80.47 + 1822 2399 481 33.68 -78.93 + 1823 2401 479 33.82 -78.72 + 1824 2385 525 28.47 -80.55 + 1825 2074 490 32.55 -116.97 + 1826 2089 489 32.63 -115.24 + 1827 2164 498 31.63 -106.43 + 1828 2063 521 28.88 -118.30 + 1829 2126 520 29.07 -110.97 + 1830 2168 523 28.70 -105.97 + 1831 2114 535 27.32 -112.30 + 1832 2126 529 27.97 -110.93 + 1833 2127 529 27.95 -110.80 + 1834 2223 534 27.43 -99.57 + 1835 2234 546 26.02 -98.23 + 1836 2190 550 25.53 -103.45 + 1837 2217 547 25.87 -100.20 + 1838 2218 548 25.78 -100.10 + 1839 2240 548 25.77 -97.53 + 1840 2130 562 24.17 -110.42 + 1841 2131 563 24.07 -110.37 + 1842 2136 570 23.15 -109.70 + 1843 2156 556 24.82 -107.40 + 1844 2181 562 24.13 -104.53 + 1845 2164 570 23.20 -106.42 + 1846 2166 570 23.17 -106.27 + 1847 2227 565 23.73 -99.13 + 1848 2228 566 23.72 -98.97 + 1849 2196 573 22.90 -102.68 + 1850 2211 579 22.15 -100.98 + 1851 2237 578 22.28 -97.87 + 1852 2200 581 21.88 -102.30 + 1853 2331 588 21.03 -86.87 + 1854 2174 591 20.68 -105.25 + 1855 2191 593 20.52 -103.32 + 1856 2307 589 20.98 -89.65 + 1857 2331 593 20.53 -86.93 + 1858 2180 605 19.15 -104.57 + 1859 2210 599 19.85 -101.03 + 1860 2223 603 19.35 -99.57 + 1861 2227 602 19.43 -99.10 + 1862 2252 605 19.15 -96.18 + 1863 2265 613 18.10 -94.58 + 1864 2289 609 18.65 -91.80 + 1865 2207 618 17.60 -101.47 + 1866 2220 624 16.83 -99.92 + 1867 2221 625 16.77 -99.75 + 1868 2251 633 15.78 -96.27 + 1869 2284 642 14.78 -92.38 + 1870 2521 492 32.37 -64.68 + 1871 2399 540 26.70 -78.97 + 1872 2401 541 26.55 -78.69 + 1873 2396 548 25.73 -79.30 + 1874 2411 554 25.05 -77.47 + 1875 2426 567 23.50 -75.76 + 1876 2366 582 21.83 -82.78 + 1877 2369 572 22.98 -82.40 + 1878 2379 571 23.13 -81.28 + 1879 2408 585 21.42 -77.85 + 1880 2414 594 20.33 -77.12 + 1881 2419 594 20.40 -76.62 + 1882 2425 598 19.96 -75.85 + 1883 2431 597 20.08 -75.15 + 1884 2437 594 20.35 -74.50 + 1885 2433 592 20.65 -74.92 + 1886 2377 583 21.62 -81.55 + 1887 2400 582 21.78 -78.78 + 1888 2416 589 20.95 -76.94 + 1889 2431 598 19.90 -75.12 + 1890 2378 603 19.28 -81.35 + 1891 2408 610 18.50 -77.92 + 1892 2417 615 17.93 -76.78 + 1893 2457 599 19.75 -72.18 + 1894 2456 609 18.57 -72.30 + 1895 2470 599 19.75 -70.55 + 1896 2469 602 19.46 -70.69 + 1897 2489 609 18.57 -68.37 + 1898 2478 611 18.43 -69.67 + 1899 2476 610 18.47 -69.88 + 1900 2500 610 18.50 -67.12 + 1901 2499 612 18.27 -67.15 + 1902 2504 614 18.02 -66.57 + 1903 2509 611 18.43 -66.00 + 1904 2518 612 18.33 -64.97 + 1905 2520 617 17.70 -64.80 + 1906 2522 611 18.45 -64.53 + 1907 2319 618 17.53 -88.30 + 1908 2306 624 16.92 -89.88 + 1909 2292 637 15.32 -91.47 + 1910 2316 634 15.72 -88.60 + 1911 2300 644 14.58 -90.52 + 1912 2298 649 13.92 -90.82 + 1913 2306 652 13.57 -89.83 + 1914 2312 651 13.70 -89.12 + 1915 2313 653 13.43 -89.05 + 1916 2324 655 13.28 -87.67 + 1917 2339 627 16.46 -85.92 + 1918 2334 629 16.32 -86.53 + 1919 2331 634 15.73 -86.87 + 1920 2326 634 15.72 -87.48 + 1921 2329 639 15.17 -87.12 + 1922 2322 636 15.45 -87.93 + 1923 2357 638 15.22 -83.80 + 1924 2339 641 14.90 -85.93 + 1925 2315 642 14.78 -88.78 + 1926 2320 646 14.33 -88.17 + 1927 2328 648 14.05 -87.22 + 1928 2329 654 13.30 -87.18 + 1929 2361 648 14.05 -83.37 + 1930 2337 664 12.15 -86.17 + 1931 2349 683 9.97 -84.78 + 1932 2354 683 10.00 -84.22 + 1933 2354 683 9.95 -84.15 + 1934 2364 683 10.00 -83.05 + 1935 2342 678 10.60 -85.55 + 1936 2368 688 9.43 -82.52 + 1937 2395 691 9.05 -79.37 + 1938 2369 696 8.39 -82.42 + 1939 2371 688 9.35 -82.25 + 1940 2382 699 8.08 -80.94 + 1941 2394 691 8.97 -79.51 + 1942 2534 613 18.20 -63.05 + 1943 2542 625 16.75 -62.17 + 1944 2538 620 17.29 -62.68 + 1945 2538 621 17.20 -62.58 + 1946 2545 622 17.12 -61.78 + 1947 2534 614 18.04 -63.12 + 1948 2535 619 17.48 -62.98 + 1949 2536 615 17.90 -62.85 + 1950 2548 629 16.27 -61.52 + 1951 2549 635 15.53 -61.30 + 1952 2549 635 15.53 -61.40 + 1953 2549 637 15.30 -61.40 + 1954 2565 656 13.07 -59.48 + 1955 2475 661 12.50 -70.01 + 1956 2484 664 12.20 -68.97 + 1957 2490 664 12.15 -68.28 + 1958 2375 661 12.58 -81.72 + 1959 2439 673 11.13 -74.23 + 1960 2428 679 10.45 -75.52 + 1961 2434 675 10.90 -74.77 + 1962 2448 707 7.10 -73.20 + 1963 2427 715 6.22 -75.60 + 1964 2429 715 6.18 -75.43 + 1965 2426 727 4.82 -75.80 + 1966 2440 728 4.70 -74.13 + 1967 2460 678 10.57 -71.73 + 1968 2501 678 10.60 -66.98 + 1969 2555 792 -2.83 -60.70 + 1970 2659 780 -1.43 -48.48 + 1971 2561 795 -3.15 -59.98 + 1972 2744 800 -3.78 -38.53 + 1973 2653 815 -5.53 -49.15 + 1974 2707 811 -5.05 -42.82 + 1975 2772 819 -5.92 -35.25 + 1976 2730 835 -7.88 -40.08 + 1977 2527 842 -8.70 -63.90 + 1978 2652 839 -8.27 -49.28 + 1979 2694 845 -9.07 -44.37 + 1980 2659 859 -10.70 -48.40 + 1981 2744 879 -13.00 -38.52 + 1982 2594 902 -15.65 -56.10 + 1983 2670 964 -23.00 -47.13 + 1984 2654 959 -22.32 -49.07 + 1985 2704 963 -22.90 -43.17 + 1986 2674 970 -23.62 -46.65 + 1987 2636 1025 -30.08 -51.18 + 1988 2308 776 -0.90 -89.62 + 1989 2404 769 -0.12 -78.35 + 1990 2391 786 -2.15 -79.88 + 1991 2397 837 -8.08 -79.12 + 1992 2415 871 -12.02 -77.03 + 1993 2520 894 -14.75 -64.80 + 1994 2491 909 -16.50 -68.17 + 1995 2469 1053 -33.38 -70.78 + 1996 2465 1067 -34.97 -71.22 + 1997 2583 983 -25.16 -57.38 + 1998 2569 1002 -27.45 -59.05 + 1999 2554 1049 -32.92 -60.78 + 2000 2573 1065 -34.82 -58.53 + 2001 2497 1159 -45.78 -67.45 + 2002 1713 580 21.98 -159.35 + 2003 1724 586 21.32 -158.07 + 2004 1725 586 21.35 -157.93 + 2005 1732 587 21.15 -157.10 + 2006 1738 590 20.90 -156.43 + 2007 1236 654 13.35 144.80 + 2008 1244 639 15.12 145.73 + 2009 1423 603 19.28 166.65 + 2010 1749 600 19.72 -155.07 + 2011 1296 704 7.47 151.85 + 2012 1351 709 6.97 158.22 + 2013 1392 723 5.33 163.03 + 2014 1432 693 8.73 167.73 + 2015 1463 708 7.08 171.38 + 2016 1148 705 7.33 134.48 + 2017 1179 687 9.48 138.08 + 2018 1240 647 14.20 145.20 + 2019 1243 640 15.00 145.60 + 2020 1244 608 18.80 145.70 + 2021 1150 699 8.10 134.70 + 2022 1129 723 5.30 132.20 + 2023 1174 697 8.30 137.50 + 2024 1193 683 10.00 139.80 + 2025 1199 684 9.80 140.50 + 2026 1152 705 7.40 134.90 + 2027 1234 695 8.60 144.60 + 2028 1256 705 7.40 147.10 + 2029 1274 705 7.40 149.20 + 2030 1278 695 8.60 149.70 + 2031 1297 695 8.60 151.90 + 2032 1304 709 6.90 152.70 + 2033 1313 721 5.50 153.80 + 2034 1323 736 3.80 155.00 + 2035 1343 718 5.80 157.30 + 2036 1348 708 7.00 157.90 + 2037 1364 710 6.80 159.80 + 2038 1372 715 6.20 160.70 + 2039 1387 667 11.80 162.50 + 2040 1414 692 8.90 165.70 + 2041 1441 706 7.30 168.80 + 2042 1448 718 5.90 169.60 + 2043 1449 672 11.20 169.80 + 2044 1453 687 9.50 170.20 + 2045 1467 716 6.10 171.80 + 2046 1870 922 -18.07 -140.95 + 2047 1492 1084 -37.02 174.80 + 2048 1117 874 -12.42 130.87 + 2049 1304 1004 -27.63 152.72 + 2050 990 1040 -31.92 115.97 + 2051 1291 1058 -33.95 151.18 + 2052 1236 1090 -37.67 144.83 + 2053 1272 1070 -35.40 148.98 + 2054 1259 1134 -42.83 147.50 + 2055 912 820 -6.15 106.85 + 2056 2330 500 31.42 -87.05 + 2057 1029 638 15.18 120.57 + 2058 1033 644 14.52 121.00 + 2059 1042 709 6.90 122.07 + 2060 2410 482 33.49 -77.59 + 2061 2096 517 29.37 -114.47 + 2062 2104 424 40.33 -113.50 + 2063 2394 468 35.17 -79.50 + 2064 2205 351 48.83 -101.67 + 2065 3067 391 44.22 -0.67 + 2066 184 1007 -28.00 21.50 + 2067 2492 1114 -40.50 -68.00 + 2068 2565 1001 -27.33 -59.50 + 2069 1152 1009 -28.23 134.98 + 2070 2841 438 38.70 -27.10 + 2071 1794 246 61.20 -149.80 + 2072 2950 835 -7.90 -14.40 + 2073 1189 463 35.70 139.30 + 2074 2607 351 48.90 -54.50 + 2075 42 397 43.50 4.90 + 2076 2997 318 52.70 -8.90 + 2077 1129 892 -14.50 132.30 + 2078 3005 443 38.10 -7.90 + 2079 1030 561 24.20 120.60 + 2080 862 660 12.70 101.00 + 2081 355 595 20.30 41.60 + 2082 1616 890 -14.30 -170.70 + 2083 2481 1208 -51.60 -69.30 + 2084 2139 1000 -27.20 -109.40 + 2085 756 575 22.60 88.50 + 2086 2775 837 -8.10 -34.90 + 2087 2676 968 -23.40 -46.50 + 2088 682 707 7.20 79.90 + 2089 2501 678 10.60 -67.00 + 2090 2625 727 4.80 -52.40 + 2091 622 605 19.10 72.80 + 2092 406 928 -18.80 47.50 + 2093 2126 493 32.20 -110.90 + 2094 2193 392 44.10 -103.10 + 2095 1818 217 64.60 -147.00 + 2096 2043 471 34.80 -120.60 + 2097 2065 473 34.60 -118.10 + 2098 2104 425 40.19 -113.47 + 2099 592 470 34.95 69.27 + 2100 3061 317 52.83 -1.32 + 2101 62 691 9.01 7.26 + 2102 2079 566 23.61 -116.48 + 2103 543 375 46.00 63.56 + 2104 578 361 47.67 67.73 + 2105 1741 600 19.73 -156.05 + 2106 1917 262 59.23 -135.43 + 2107 1824 246 61.13 -146.25 + 2108 1733 591 20.78 -156.95 + 2109 1736 589 21.02 -156.63 + 2110 2505 616 17.85 -66.52 + 2111 2499 613 18.17 -67.15 + 2112 2278 467 35.25 -93.09 + 2113 1094 900 -15.51 128.15 + 2114 3010 277 57.48 -7.36 + 2115 87 304 54.38 10.13 diff --git a/parm/product/bufr_stalist.meteo.gfs b/parm/product/bufr_stalist.meteo.gfs index e6911a9332..51d4108bac 100755 --- a/parm/product/bufr_stalist.meteo.gfs +++ b/parm/product/bufr_stalist.meteo.gfs @@ -727,6 +727,12 @@ 046035 57.00N 177.70W B#L 20 BUOY BERING SEA PAC 0 3-93 046047 32.40N 119.50W B#U 20 BUOY W SAN DIEGO PAC 0 OPC 11-03 046086 32.49N 118.03W B086 20 CLEMENTE BASIN BUOY (46086) 0 NASA ORION 10-13 +048327 18.77N 98.96E VTCC 10 CHIANG MAI, THAILAND 316 Usr Rqst 9-2020 +048381 16.47N 102.78E VTUK 10 KHON KAEN, THAILAND 204 Usr Rqst 9-2020 +048400 15.77N 100.14E VTPN 10 NAKHON SAWAN, THAILAND 34 Usr Rqst 9-2020 +048407 15.25N 104.87E VTUU 10 UBON RATCHATHANI, THAILAND 124 Usr Rqst 9-2020 +048453 13.67N 100.61E BKK 10 BANGKOK THAILAND 1 Usr Rqst 9-2020 +048568 7.19N 100.61E VTSH 10 SONGKHLA, THAILAND 12 Usr Rqst 9-2020 051001 23.40N 162.30W B#M 20 BUOY NW KAUAI PAC 0 FOUS 4-93 051002 17.20N 157.80W B#N 20 BUOY S OAHU PAC 0 4-93 051003 19.30N 160.80W B#O 20 BUOY S KAUAI PAC 0 4-93 diff --git a/parm/product/transfer_gfs_1.list b/parm/product/transfer_gfs_1.list index 5067ae9d98..2fda891ca3 100644 --- a/parm/product/transfer_gfs_1.list +++ b/parm/product/transfer_gfs_1.list @@ -30,7 +30,6 @@ com/gfs/_ENVIR_/gfs._PDY_/ - /gfs.t??z.*flx* - /gfs.t??z.*atmfc* - /gfs_grb211.t??z.pgrsfnf* -- /wafsgfs??.t??z.grisfnf* - /gfs.t??z.master.* - /gfs*sfcf* @@ -43,7 +42,6 @@ com/gfs/_ENVIR_/gfs._PDYm1_/ - /gfs.t??z.*flx* - /gfs.t??z.*atmfc* - /gfs_grb211.t??z.pgrsfnf* -- /wafsgfs??.t??z.grisfnf* - /gfs.t??z.master.* - /gfs*sfcf* diff --git a/parm/product/transfer_gfs_7.list b/parm/product/transfer_gfs_7.list index 8ef7fbfa22..b21756140c 100644 --- a/parm/product/transfer_gfs_7.list +++ b/parm/product/transfer_gfs_7.list @@ -27,7 +27,6 @@ com/gfs/_ENVIR_/gfs._PDY_/ + /gfs.t??z.flxgrbf* + /gfs.t??z.flxgrbif* + /gfs.t??z.goessimpgrb2.1p00.f* -+ /wafsgfs??.t??z.grib* #+ /gfs.t??z.flxf*.nemsio - * B 444000 @@ -37,7 +36,6 @@ com/gfs/_ENVIR_/gfs._PDYm1_/ + /gfs.t??z.flxgrbf* + /gfs.t??z.flxgrbif* + /gfs.t??z.goessimpgrb2.1p00.f* -+ /wafsgfs??.t??z.grib* #+ /gfs.t??z.flxf*.nemsio - * B 444000 diff --git a/parm/transfer_gdas_1a.list b/parm/transfer/transfer_gdas_1a.list similarity index 76% rename from parm/transfer_gdas_1a.list rename to parm/transfer/transfer_gdas_1a.list index 6142bef415..00c5306f3b 100644 --- a/parm/transfer_gdas_1a.list +++ b/parm/transfer/transfer_gdas_1a.list @@ -17,36 +17,39 @@ # B bytes, relative size of the path in relation to the other paths in the list # D delete, delete extraneous files from destination directories (takes no arg) # E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) # T two-way syncronization will update both sides with latest changes (takes no arg) # Z compress data as it is sent, accepts optional compression level argument (1-9) # Rules higher in the list take precedence over lower ones. By default, all files in a # directory are included, so if no exclude patterns match that file, it will be # tranatmferred. -com/gfs/_ENVIR_/gdas._PDY_/ +_COMROOT_/gfs/_SHORTVER_/gdas._PDY_/ + /??/ -+ /??/*atmf000* -+ /??/*atmf001* -+ /??/*atmf002* -+ /??/*atmf003* -+ /??/*atmf004* -+ /??/*atmf005* -+ /??/*atmf006* -- /??/* ++ /??/atmos/ ++ /??/atmos/*atmf000* ++ /??/atmos/*atmf001* ++ /??/atmos/*atmf002* ++ /??/atmos/*atmf003* ++ /??/atmos/*atmf004* ++ /??/atmos/*atmf005* ++ /??/atmos/*atmf006* +- /??/atmos/* - * B 100 -com/gfs/_ENVIR_/gdas._PDYm1_/ +_COMROOT_/gfs/_SHORTVER_/gdas._PDYm1_/ + /??/ -+ /??/*atmf000* -+ /??/*atmf001* -+ /??/*atmf002* -+ /??/*atmf003* -+ /??/*atmf004* -+ /??/*atmf005* -+ /??/*atmf006* -- /??/* ++ /??/atmos/ ++ /??/atmos/*atmf000* ++ /??/atmos/*atmf001* ++ /??/atmos/*atmf002* ++ /??/atmos/*atmf003* ++ /??/atmos/*atmf004* ++ /??/atmos/*atmf005* ++ /??/atmos/*atmf006* +- /??/atmos/* - * B 100 diff --git a/parm/transfer_gdas_1b.list b/parm/transfer/transfer_gdas_1b.list similarity index 79% rename from parm/transfer_gdas_1b.list rename to parm/transfer/transfer_gdas_1b.list index 0ceafaffac..998c71d843 100644 --- a/parm/transfer_gdas_1b.list +++ b/parm/transfer/transfer_gdas_1b.list @@ -17,32 +17,35 @@ # B bytes, relative size of the path in relation to the other paths in the list # D delete, delete extraneous files from destination directories (takes no arg) # E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) # T two-way syncronization will update both sides with latest changes (takes no arg) # Z compress data as it is sent, accepts optional compression level argument (1-9) # Rules higher in the list take precedence over lower ones. By default, all files in a # directory are included, so if no exclude patterns match that file, it will be # tranatmferred. -com/gfs/_ENVIR_/gdas._PDY_/ +_COMROOT_/gfs/_SHORTVER_/gdas._PDY_/ + /??/ -+ /??/*atmf007* -+ /??/*atmf008* -+ /??/*atmf009* -+ /??/*atmg* -+ /??/*atmanl* -- /??/* ++ /??/atmos/ ++ /??/atmos/*atmf007* ++ /??/atmos/*atmf008* ++ /??/atmos/*atmf009* ++ /??/atmos/*atmg* ++ /??/atmos/*atmanl* +- /??/atmos/* - * B 100 -com/gfs/_ENVIR_/gdas._PDYm1_/ +_COMROOT_/gfs/_SHORTVER_/gdas._PDYm1_/ + /??/ -+ /??/*atmf007* -+ /??/*atmf008* -+ /??/*atmf009* -+ /??/*atmg* -+ /??/*atmanl* -- /??/* ++ /??/atmos/ ++ /??/atmos/*atmf007* ++ /??/atmos/*atmf008* ++ /??/atmos/*atmf009* ++ /??/atmos/*atmg* ++ /??/atmos/*atmanl* +- /??/atmos/* - * B 100 diff --git a/parm/transfer/transfer_gdas_1c.list b/parm/transfer/transfer_gdas_1c.list new file mode 100644 index 0000000000..42b1bd4f64 --- /dev/null +++ b/parm/transfer/transfer_gdas_1c.list @@ -0,0 +1,67 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/gdas._PDY_/ +- /??/atmos/*atmf000* +- /??/atmos/*atmf001* +- /??/atmos/*atmf002* +- /??/atmos/*atmf003* +- /??/atmos/*atmf004* +- /??/atmos/*atmf005* +- /??/atmos/*atmf006* +- /??/atmos/*atmf007* +- /??/atmos/*atmf008* +- /??/atmos/*atmf009* +- /??/atmos/*atmg* +- /??/atmos/*atmanl* ++ /* ++ /??/ ++ /??/atmos/ ++ /??/atmos/* + +B 100 + +_COMROOT_/gfs/_SHORTVER_/gdas._PDYm1_/ +- /??/atmos/*atmf000* +- /??/atmos/*atmf001* +- /??/atmos/*atmf002* +- /??/atmos/*atmf003* +- /??/atmos/*atmf004* +- /??/atmos/*atmf005* +- /??/atmos/*atmf006* +- /??/atmos/*atmf007* +- /??/atmos/*atmf008* +- /??/atmos/*atmf009* +- /??/atmos/*atmg* +- /??/atmos/*atmanl* ++ /* ++ /??/ ++ /??/atmos/ ++ /??/atmos/* + +B 100 + + diff --git a/parm/transfer/transfer_gdas_enkf_enkf_05.list b/parm/transfer/transfer_gdas_enkf_enkf_05.list new file mode 100644 index 0000000000..fe1be06e8c --- /dev/null +++ b/parm/transfer/transfer_gdas_enkf_enkf_05.list @@ -0,0 +1,61 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem001/ ++ /??/atmos/mem001/** ++ /??/atmos/mem002/ ++ /??/atmos/mem002/** ++ /??/atmos/mem003/ ++ /??/atmos/mem003/** ++ /??/atmos/mem004/ ++ /??/atmos/mem004/** ++ /??/atmos/mem005/ ++ /??/atmos/mem005/** +- * + +B 100 + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem001/ ++ /??/atmos/mem001/** ++ /??/atmos/mem002/ ++ /??/atmos/mem002/** ++ /??/atmos/mem003/ ++ /??/atmos/mem003/** ++ /??/atmos/mem004/ ++ /??/atmos/mem004/** ++ /??/atmos/mem005/ ++ /??/atmos/mem005/** +- * + +B 100 + + diff --git a/parm/transfer/transfer_gdas_enkf_enkf_10.list b/parm/transfer/transfer_gdas_enkf_enkf_10.list new file mode 100644 index 0000000000..b2298be8af --- /dev/null +++ b/parm/transfer/transfer_gdas_enkf_enkf_10.list @@ -0,0 +1,61 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem006/ ++ /??/atmos/mem006/** ++ /??/atmos/mem007/ ++ /??/atmos/mem007/** ++ /??/atmos/mem008/ ++ /??/atmos/mem008/** ++ /??/atmos/mem009/ ++ /??/atmos/mem009/** ++ /??/atmos/mem010/ ++ /??/atmos/mem010/** +- * + +B 100 + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem006/ ++ /??/atmos/mem006/** ++ /??/atmos/mem007/ ++ /??/atmos/mem007/** ++ /??/atmos/mem008/ ++ /??/atmos/mem008/** ++ /??/atmos/mem009/ ++ /??/atmos/mem009/** ++ /??/atmos/mem010/ ++ /??/atmos/mem010/** +- * + +B 100 + + diff --git a/parm/transfer/transfer_gdas_enkf_enkf_15.list b/parm/transfer/transfer_gdas_enkf_enkf_15.list new file mode 100644 index 0000000000..435de61bba --- /dev/null +++ b/parm/transfer/transfer_gdas_enkf_enkf_15.list @@ -0,0 +1,61 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem011/ ++ /??/atmos/mem011/** ++ /??/atmos/mem012/ ++ /??/atmos/mem012/** ++ /??/atmos/mem013/ ++ /??/atmos/mem013/** ++ /??/atmos/mem014/ ++ /??/atmos/mem014/** ++ /??/atmos/mem015/ ++ /??/atmos/mem015/** +- * + +B 100 + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem011/ ++ /??/atmos/mem011/** ++ /??/atmos/mem012/ ++ /??/atmos/mem012/** ++ /??/atmos/mem013/ ++ /??/atmos/mem013/** ++ /??/atmos/mem014/ ++ /??/atmos/mem014/** ++ /??/atmos/mem015/ ++ /??/atmos/mem015/** +- * + +B 100 + + diff --git a/parm/transfer/transfer_gdas_enkf_enkf_20.list b/parm/transfer/transfer_gdas_enkf_enkf_20.list new file mode 100644 index 0000000000..e329d227bd --- /dev/null +++ b/parm/transfer/transfer_gdas_enkf_enkf_20.list @@ -0,0 +1,61 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem016/ ++ /??/atmos/mem016/** ++ /??/atmos/mem017/ ++ /??/atmos/mem017/** ++ /??/atmos/mem018/ ++ /??/atmos/mem018/** ++ /??/atmos/mem019/ ++ /??/atmos/mem019/** ++ /??/atmos/mem020/ ++ /??/atmos/mem020/** +- * + +B 100 + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem016/ ++ /??/atmos/mem016/** ++ /??/atmos/mem017/ ++ /??/atmos/mem017/** ++ /??/atmos/mem018/ ++ /??/atmos/mem018/** ++ /??/atmos/mem019/ ++ /??/atmos/mem019/** ++ /??/atmos/mem020/ ++ /??/atmos/mem020/** +- * + +B 100 + + diff --git a/parm/transfer/transfer_gdas_enkf_enkf_25.list b/parm/transfer/transfer_gdas_enkf_enkf_25.list new file mode 100644 index 0000000000..fb6d964369 --- /dev/null +++ b/parm/transfer/transfer_gdas_enkf_enkf_25.list @@ -0,0 +1,61 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem021/ ++ /??/atmos/mem021/** ++ /??/atmos/mem022/ ++ /??/atmos/mem022/** ++ /??/atmos/mem023/ ++ /??/atmos/mem023/** ++ /??/atmos/mem024/ ++ /??/atmos/mem024/** ++ /??/atmos/mem025/ ++ /??/atmos/mem025/** +- * + +B 100 + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem021/ ++ /??/atmos/mem021/** ++ /??/atmos/mem022/ ++ /??/atmos/mem022/** ++ /??/atmos/mem023/ ++ /??/atmos/mem023/** ++ /??/atmos/mem024/ ++ /??/atmos/mem024/** ++ /??/atmos/mem025/ ++ /??/atmos/mem025/** +- * + +B 100 + + diff --git a/parm/transfer/transfer_gdas_enkf_enkf_30.list b/parm/transfer/transfer_gdas_enkf_enkf_30.list new file mode 100644 index 0000000000..bce22494a4 --- /dev/null +++ b/parm/transfer/transfer_gdas_enkf_enkf_30.list @@ -0,0 +1,61 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem026/ ++ /??/atmos/mem026/** ++ /??/atmos/mem027/ ++ /??/atmos/mem027/** ++ /??/atmos/mem028/ ++ /??/atmos/mem028/** ++ /??/atmos/mem029/ ++ /??/atmos/mem029/** ++ /??/atmos/mem030/ ++ /??/atmos/mem030/** +- * + +B 100 + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem026/ ++ /??/atmos/mem026/** ++ /??/atmos/mem027/ ++ /??/atmos/mem027/** ++ /??/atmos/mem028/ ++ /??/atmos/mem028/** ++ /??/atmos/mem029/ ++ /??/atmos/mem029/** ++ /??/atmos/mem030/ ++ /??/atmos/mem030/** +- * + +B 100 + + diff --git a/parm/transfer/transfer_gdas_enkf_enkf_35.list b/parm/transfer/transfer_gdas_enkf_enkf_35.list new file mode 100644 index 0000000000..6397c6693e --- /dev/null +++ b/parm/transfer/transfer_gdas_enkf_enkf_35.list @@ -0,0 +1,61 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem031/ ++ /??/atmos/mem031/** ++ /??/atmos/mem032/ ++ /??/atmos/mem032/** ++ /??/atmos/mem033/ ++ /??/atmos/mem033/** ++ /??/atmos/mem034/ ++ /??/atmos/mem034/** ++ /??/atmos/mem035/ ++ /??/atmos/mem035/** +- * + +B 100 + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem031/ ++ /??/atmos/mem031/** ++ /??/atmos/mem032/ ++ /??/atmos/mem032/** ++ /??/atmos/mem033/ ++ /??/atmos/mem033/** ++ /??/atmos/mem034/ ++ /??/atmos/mem034/** ++ /??/atmos/mem035/ ++ /??/atmos/mem035/** +- * + +B 100 + + diff --git a/parm/transfer/transfer_gdas_enkf_enkf_40.list b/parm/transfer/transfer_gdas_enkf_enkf_40.list new file mode 100644 index 0000000000..d8a85e529c --- /dev/null +++ b/parm/transfer/transfer_gdas_enkf_enkf_40.list @@ -0,0 +1,61 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem036/ ++ /??/atmos/mem036/** ++ /??/atmos/mem037/ ++ /??/atmos/mem037/** ++ /??/atmos/mem038/ ++ /??/atmos/mem038/** ++ /??/atmos/mem039/ ++ /??/atmos/mem039/** ++ /??/atmos/mem040/ ++ /??/atmos/mem040/** +- * + +B 100 + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem036/ ++ /??/atmos/mem036/** ++ /??/atmos/mem037/ ++ /??/atmos/mem037/** ++ /??/atmos/mem038/ ++ /??/atmos/mem038/** ++ /??/atmos/mem039/ ++ /??/atmos/mem039/** ++ /??/atmos/mem040/ ++ /??/atmos/mem040/** +- * + +B 100 + + diff --git a/parm/transfer/transfer_gdas_enkf_enkf_45.list b/parm/transfer/transfer_gdas_enkf_enkf_45.list new file mode 100644 index 0000000000..fd8b1d5299 --- /dev/null +++ b/parm/transfer/transfer_gdas_enkf_enkf_45.list @@ -0,0 +1,61 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem041/ ++ /??/atmos/mem041/** ++ /??/atmos/mem042/ ++ /??/atmos/mem042/** ++ /??/atmos/mem043/ ++ /??/atmos/mem043/** ++ /??/atmos/mem044/ ++ /??/atmos/mem044/** ++ /??/atmos/mem045/ ++ /??/atmos/mem045/** +- * + +B 100 + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem041/ ++ /??/atmos/mem041/** ++ /??/atmos/mem042/ ++ /??/atmos/mem042/** ++ /??/atmos/mem043/ ++ /??/atmos/mem043/** ++ /??/atmos/mem044/ ++ /??/atmos/mem044/** ++ /??/atmos/mem045/ ++ /??/atmos/mem045/** +- * + +B 100 + + diff --git a/parm/transfer/transfer_gdas_enkf_enkf_50.list b/parm/transfer/transfer_gdas_enkf_enkf_50.list new file mode 100644 index 0000000000..dd7721505b --- /dev/null +++ b/parm/transfer/transfer_gdas_enkf_enkf_50.list @@ -0,0 +1,61 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem046/ ++ /??/atmos/mem046/** ++ /??/atmos/mem047/ ++ /??/atmos/mem047/** ++ /??/atmos/mem048/ ++ /??/atmos/mem048/** ++ /??/atmos/mem049/ ++ /??/atmos/mem049/** ++ /??/atmos/mem050/ ++ /??/atmos/mem050/** +- * + +B 100 + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem046/ ++ /??/atmos/mem046/** ++ /??/atmos/mem047/ ++ /??/atmos/mem047/** ++ /??/atmos/mem048/ ++ /??/atmos/mem048/** ++ /??/atmos/mem049/ ++ /??/atmos/mem049/** ++ /??/atmos/mem050/ ++ /??/atmos/mem050/** +- * + +B 100 + + diff --git a/parm/transfer/transfer_gdas_enkf_enkf_55.list b/parm/transfer/transfer_gdas_enkf_enkf_55.list new file mode 100644 index 0000000000..4606feb727 --- /dev/null +++ b/parm/transfer/transfer_gdas_enkf_enkf_55.list @@ -0,0 +1,61 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem051/ ++ /??/atmos/mem051/** ++ /??/atmos/mem052/ ++ /??/atmos/mem052/** ++ /??/atmos/mem053/ ++ /??/atmos/mem053/** ++ /??/atmos/mem054/ ++ /??/atmos/mem054/** ++ /??/atmos/mem055/ ++ /??/atmos/mem055/** +- * + +B 100 + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem051/ ++ /??/atmos/mem051/** ++ /??/atmos/mem052/ ++ /??/atmos/mem052/** ++ /??/atmos/mem053/ ++ /??/atmos/mem053/** ++ /??/atmos/mem054/ ++ /??/atmos/mem054/** ++ /??/atmos/mem055/ ++ /??/atmos/mem055/** +- * + +B 100 + + diff --git a/parm/transfer/transfer_gdas_enkf_enkf_60.list b/parm/transfer/transfer_gdas_enkf_enkf_60.list new file mode 100644 index 0000000000..e5764082dc --- /dev/null +++ b/parm/transfer/transfer_gdas_enkf_enkf_60.list @@ -0,0 +1,61 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem056/ ++ /??/atmos/mem056/** ++ /??/atmos/mem057/ ++ /??/atmos/mem057/** ++ /??/atmos/mem058/ ++ /??/atmos/mem058/** ++ /??/atmos/mem059/ ++ /??/atmos/mem059/** ++ /??/atmos/mem060/ ++ /??/atmos/mem060/** +- * + +B 100 + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem056/ ++ /??/atmos/mem056/** ++ /??/atmos/mem057/ ++ /??/atmos/mem057/** ++ /??/atmos/mem058/ ++ /??/atmos/mem058/** ++ /??/atmos/mem059/ ++ /??/atmos/mem059/** ++ /??/atmos/mem060/ ++ /??/atmos/mem060/** +- * + +B 100 + + diff --git a/parm/transfer/transfer_gdas_enkf_enkf_65.list b/parm/transfer/transfer_gdas_enkf_enkf_65.list new file mode 100644 index 0000000000..15e12a0660 --- /dev/null +++ b/parm/transfer/transfer_gdas_enkf_enkf_65.list @@ -0,0 +1,61 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem061/ ++ /??/atmos/mem061/** ++ /??/atmos/mem062/ ++ /??/atmos/mem062/** ++ /??/atmos/mem063/ ++ /??/atmos/mem063/** ++ /??/atmos/mem064/ ++ /??/atmos/mem064/** ++ /??/atmos/mem065/ ++ /??/atmos/mem065/** +- * + +B 100 + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem061/ ++ /??/atmos/mem061/** ++ /??/atmos/mem062/ ++ /??/atmos/mem062/** ++ /??/atmos/mem063/ ++ /??/atmos/mem063/** ++ /??/atmos/mem064/ ++ /??/atmos/mem064/** ++ /??/atmos/mem065/ ++ /??/atmos/mem065/** +- * + +B 100 + + diff --git a/parm/transfer/transfer_gdas_enkf_enkf_70.list b/parm/transfer/transfer_gdas_enkf_enkf_70.list new file mode 100644 index 0000000000..88accbffb9 --- /dev/null +++ b/parm/transfer/transfer_gdas_enkf_enkf_70.list @@ -0,0 +1,61 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem066/ ++ /??/atmos/mem066/** ++ /??/atmos/mem067/ ++ /??/atmos/mem067/** ++ /??/atmos/mem068/ ++ /??/atmos/mem068/** ++ /??/atmos/mem069/ ++ /??/atmos/mem069/** ++ /??/atmos/mem070/ ++ /??/atmos/mem070/** +- * + +B 100 + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem066/ ++ /??/atmos/mem066/** ++ /??/atmos/mem067/ ++ /??/atmos/mem067/** ++ /??/atmos/mem068/ ++ /??/atmos/mem068/** ++ /??/atmos/mem069/ ++ /??/atmos/mem069/** ++ /??/atmos/mem070/ ++ /??/atmos/mem070/** +- * + +B 100 + + diff --git a/parm/transfer/transfer_gdas_enkf_enkf_75.list b/parm/transfer/transfer_gdas_enkf_enkf_75.list new file mode 100644 index 0000000000..3db4f41a03 --- /dev/null +++ b/parm/transfer/transfer_gdas_enkf_enkf_75.list @@ -0,0 +1,61 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem071/ ++ /??/atmos/mem071/** ++ /??/atmos/mem072/ ++ /??/atmos/mem072/** ++ /??/atmos/mem073/ ++ /??/atmos/mem073/** ++ /??/atmos/mem074/ ++ /??/atmos/mem074/** ++ /??/atmos/mem075/ ++ /??/atmos/mem075/** +- * + +B 100 + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem071/ ++ /??/atmos/mem071/** ++ /??/atmos/mem072/ ++ /??/atmos/mem072/** ++ /??/atmos/mem073/ ++ /??/atmos/mem073/** ++ /??/atmos/mem074/ ++ /??/atmos/mem074/** ++ /??/atmos/mem075/ ++ /??/atmos/mem075/** +- * + +B 100 + + diff --git a/parm/transfer/transfer_gdas_enkf_enkf_80.list b/parm/transfer/transfer_gdas_enkf_enkf_80.list new file mode 100644 index 0000000000..58ca72515d --- /dev/null +++ b/parm/transfer/transfer_gdas_enkf_enkf_80.list @@ -0,0 +1,61 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem076/ ++ /??/atmos/mem076/** ++ /??/atmos/mem077/ ++ /??/atmos/mem077/** ++ /??/atmos/mem078/ ++ /??/atmos/mem078/** ++ /??/atmos/mem079/ ++ /??/atmos/mem079/** ++ /??/atmos/mem080/ ++ /??/atmos/mem080/** +- * + +B 100 + +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/mem076/ ++ /??/atmos/mem076/** ++ /??/atmos/mem077/ ++ /??/atmos/mem077/** ++ /??/atmos/mem078/ ++ /??/atmos/mem078/** ++ /??/atmos/mem079/ ++ /??/atmos/mem079/** ++ /??/atmos/mem080/ ++ /??/atmos/mem080/** +- * + +B 100 + + diff --git a/parm/transfer_gdas_enkf_enkf_misc.list b/parm/transfer/transfer_gdas_enkf_enkf_misc.list similarity index 88% rename from parm/transfer_gdas_enkf_enkf_misc.list rename to parm/transfer/transfer_gdas_enkf_enkf_misc.list index ef6d47fa0e..141b4af1da 100644 --- a/parm/transfer_gdas_enkf_enkf_misc.list +++ b/parm/transfer/transfer_gdas_enkf_enkf_misc.list @@ -17,24 +17,25 @@ # B bytes, relative size of the path in relation to the other paths in the list # D delete, delete extraneous files from destination directories (takes no arg) # E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) # T two-way syncronization will update both sides with latest changes (takes no arg) # Z compress data as it is sent, accepts optional compression level argument (1-9) # Rules higher in the list take precedence over lower ones. By default, all files in a # directory are included, so if no exclude patterns match that file, it will be # tranatmferred. -#com/gfs/_ENVIR_/enkfgdas._PDY_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDY_/ +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ + /??/ -+ /??/* ++ /??/atmos/ ++ /??/atmos/* - * B 100 -#com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ + /??/ -+ /??/* ++ /??/atmos/ ++ /??/atmos/* - * B 100 diff --git a/parm/transfer_gdas_misc.list b/parm/transfer/transfer_gdas_misc.list old mode 100755 new mode 100644 similarity index 85% rename from parm/transfer_gdas_misc.list rename to parm/transfer/transfer_gdas_misc.list index 1d86dca379..3d7fe47a88 --- a/parm/transfer_gdas_misc.list +++ b/parm/transfer/transfer_gdas_misc.list @@ -17,6 +17,7 @@ # B bytes, relative size of the path in relation to the other paths in the list # D delete, delete extraneous files from destination directories (takes no arg) # E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) # T two-way syncronization will update both sides with latest changes (takes no arg) # Z compress data as it is sent, accepts optional compression level argument (1-9) # Rules higher in the list take precedence over lower ones. By default, all files in a @@ -29,30 +30,30 @@ #B 4500000 -com/gfs/_ENVIR_/syndat/ +_COMROOT_/gfs/_SHORTVER_/syndat/ B 180 -com/gfs/_ENVIR_/gdascounts/ +_COMROOT_/gfs/_SHORTVER_/gdascounts/ + /data_counts._MONPREV_/*** - * B 16000000 -com/gfs/_ENVIR_/gdascounts/ +_COMROOT_/gfs/_SHORTVER_/gdascounts/ + /data_counts._MONCUR_/*** - * B 16000000 -com/gfs/_ENVIR_/gdascounts/ +_COMROOT_/gfs/_SHORTVER_/gdascounts/ + /satcounts._MONPREV_/*** - * B 16000000 -com/gfs/_ENVIR_/gdascounts/ +_COMROOT_/gfs/_SHORTVER_/gdascounts/ + /satcounts._MONCUR_/*** - * B 16000000 -com/gfs/_ENVIR_/sdm_rtdm/ +_COMROOT_/gfs/_SHORTVER_/sdm_rtdm/ + /obcount_30day/ + /obcount_30day/gdas/ + /obcount_30day/gdas/gdas._PDYm1_/*** @@ -60,14 +61,14 @@ com/gfs/_ENVIR_/sdm_rtdm/ - * B 2000000 -com/gfs/_ENVIR_/sdm_rtdm/ +_COMROOT_/gfs/_SHORTVER_/sdm_rtdm/ + /avgdata/ + /avgdata/obcount_30davg.gdas._MONPREV_ + /avgdata/obcount_30davg.gdas.current - * B 256000 -com/gfs/_ENVIR_/gdascounts/ +_COMROOT_/gfs/_SHORTVER_/gdascounts/ + /index.shtml + /index_backup.shtml - * diff --git a/parm/transfer_gfs_1.list b/parm/transfer/transfer_gfs_1.list similarity index 77% rename from parm/transfer_gfs_1.list rename to parm/transfer/transfer_gfs_1.list index 91f118d16f..84e852ff82 100644 --- a/parm/transfer_gfs_1.list +++ b/parm/transfer/transfer_gfs_1.list @@ -17,26 +17,34 @@ # B bytes, relative size of the path in relation to the other paths in the list # D delete, delete extraneous files from destination directories (takes no arg) # E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) # T two-way syncronization will update both sides with latest changes (takes no arg) # Z compress data as it is sent, accepts optional compression level argument (1-9) # Rules higher in the list take precedence over lower ones. By default, all files in a # directory are included, so if no exclude patterns match that file, it will be # tranatmferred. -com/gfs/_ENVIR_/gfs._PDY_/ +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ + /??/ -- /??/gfs.t??z.atmf???.nemsio -- /??/gfs.t??z.sfcf???.nemsio -- /??/gfs.t??z.master.* - ++ /??/atmos/ +- /??/atmos/gfs.t??z.atmf???.nc +- /??/atmos/gfs.t??z.sfcf???.nc +- /??/atmos/gfs.t??z.master.* +- /??/atmos/gempak/ +- /??/atmos/gempak/* +- /??/wave/ +- /??/wave/* B 100 -com/gfs/_ENVIR_/gfs._PDYm1_/ +_COMROOT_/gfs/_SHORTVER_/gfs._PDYm1_/ + /??/ -- /??/gfs.t??z.atmf???.nemsio -- /??/gfs.t??z.sfcf???.nemsio -- /??/gfs.t??z.master.* - ++ /??/atmos/ +- /??/atmos/gfs.t??z.atmf???.nc +- /??/atmos/gfs.t??z.sfcf???.nc +- /??/atmos/gfs.t??z.master.* +- /??/atmos/gempak/ +- /??/atmos/gempak/* +- /??/wave/ +- /??/wave/* B 100 - diff --git a/parm/transfer_gfs_10a.list b/parm/transfer/transfer_gfs_10a.list similarity index 77% rename from parm/transfer_gfs_10a.list rename to parm/transfer/transfer_gfs_10a.list index b09f4ffd6b..3beb6d15fd 100644 --- a/parm/transfer_gfs_10a.list +++ b/parm/transfer/transfer_gfs_10a.list @@ -17,33 +17,33 @@ # B bytes, relative size of the path in relation to the other paths in the list # D delete, delete extraneous files from destination directories (takes no arg) # E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) # T two-way syncronization will update both sides with latest changes (takes no arg) # Z compress data as it is sent, accepts optional compression level argument (1-9) # Rules higher in the list take precedence over lower ones. By default, all files in a # directory are included, so if no exclude patterns match that file, it will be # tranatmferred. -com/gfs/_ENVIR_/gfs._PDY_/ +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ + /??/ -+ /??/gfs.t??z.master.*l -+ /??/gfs.t??z.master.*1 -+ /??/gfs.t??z.master.*3 -+ /??/gfs.t??z.master.*5 -+ /??/gfs.t??z.master.*7 -+ /??/gfs.t??z.master.*9 ++ /??/atmos/ ++ /??/atmos/gfs.t??z.master.*1 ++ /??/atmos/gfs.t??z.master.*3 ++ /??/atmos/gfs.t??z.master.*5 ++ /??/atmos/gfs.t??z.master.*7 ++ /??/atmos/gfs.t??z.master.*9 - * B 100 -com/gfs/_ENVIR_/gfs._PDYm1_/ +_COMROOT_/gfs/_SHORTVER_/gfs._PDYm1_/ + /??/ -+ /??/gfs.t??z.master.*l -+ /??/gfs.t??z.master.*1 -+ /??/gfs.t??z.master.*3 -+ /??/gfs.t??z.master.*5 -+ /??/gfs.t??z.master.*7 -+ /??/gfs.t??z.master.*9 ++ /??/atmos/ ++ /??/atmos/gfs.t??z.master.*1 ++ /??/atmos/gfs.t??z.master.*3 ++ /??/atmos/gfs.t??z.master.*5 ++ /??/atmos/gfs.t??z.master.*7 ++ /??/atmos/gfs.t??z.master.*9 - * - B 100 diff --git a/parm/transfer_gfs_10b.list b/parm/transfer/transfer_gfs_10b.list similarity index 77% rename from parm/transfer_gfs_10b.list rename to parm/transfer/transfer_gfs_10b.list index f6d9bf4d6d..34522d1e2f 100644 --- a/parm/transfer_gfs_10b.list +++ b/parm/transfer/transfer_gfs_10b.list @@ -17,29 +17,32 @@ # B bytes, relative size of the path in relation to the other paths in the list # D delete, delete extraneous files from destination directories (takes no arg) # E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) # T two-way syncronization will update both sides with latest changes (takes no arg) # Z compress data as it is sent, accepts optional compression level argument (1-9) # Rules higher in the list take precedence over lower ones. By default, all files in a # directory are included, so if no exclude patterns match that file, it will be # tranatmferred. -com/gfs/_ENVIR_/gfs._PDY_/ +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ + /??/ -+ /??/gfs.t??z.master.*0 -+ /??/gfs.t??z.master.*2 -+ /??/gfs.t??z.master.*4 -+ /??/gfs.t??z.master.*6 -+ /??/gfs.t??z.master.*8 ++ /??/atmos/ ++ /??/atmos/gfs.t??z.master.*0 ++ /??/atmos/gfs.t??z.master.*2 ++ /??/atmos/gfs.t??z.master.*4 ++ /??/atmos/gfs.t??z.master.*6 ++ /??/atmos/gfs.t??z.master.*8 - * B 100 -com/gfs/_ENVIR_/gfs._PDYm1_/ +_COMROOT_/gfs/_SHORTVER_/gfs._PDYm1_/ + /??/ -+ /??/gfs.t??z.master.*0 -+ /??/gfs.t??z.master.*2 -+ /??/gfs.t??z.master.*4 -+ /??/gfs.t??z.master.*6 -+ /??/gfs.t??z.master.*8 ++ /??/atmos/ ++ /??/atmos/gfs.t??z.master.*0 ++ /??/atmos/gfs.t??z.master.*2 ++ /??/atmos/gfs.t??z.master.*4 ++ /??/atmos/gfs.t??z.master.*6 ++ /??/atmos/gfs.t??z.master.*8 - * B 100 diff --git a/parm/transfer/transfer_gfs_2.list b/parm/transfer/transfer_gfs_2.list new file mode 100644 index 0000000000..f0ea9bc9c5 --- /dev/null +++ b/parm/transfer/transfer_gfs_2.list @@ -0,0 +1,99 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/gfs.t??z.atmf000.nc ++ /??/atmos/gfs.t??z.atmf007.nc ++ /??/atmos/gfs.t??z.atmf014.nc ++ /??/atmos/gfs.t??z.atmf021.nc ++ /??/atmos/gfs.t??z.atmf028.nc ++ /??/atmos/gfs.t??z.atmf035.nc ++ /??/atmos/gfs.t??z.atmf042.nc ++ /??/atmos/gfs.t??z.atmf049.nc ++ /??/atmos/gfs.t??z.atmf056.nc ++ /??/atmos/gfs.t??z.atmf063.nc ++ /??/atmos/gfs.t??z.atmf070.nc ++ /??/atmos/gfs.t??z.atmf077.nc ++ /??/atmos/gfs.t??z.atmf084.nc ++ /??/atmos/gfs.t??z.atmf091.nc ++ /??/atmos/gfs.t??z.atmf098.nc ++ /??/atmos/gfs.t??z.atmf105.nc ++ /??/atmos/gfs.t??z.atmf112.nc ++ /??/atmos/gfs.t??z.atmf119.nc ++ /??/atmos/gfs.t??z.atmf138.nc ++ /??/atmos/gfs.t??z.atmf159.nc ++ /??/atmos/gfs.t??z.atmf180.nc ++ /??/atmos/gfs.t??z.atmf201.nc ++ /??/atmos/gfs.t??z.atmf222.nc ++ /??/atmos/gfs.t??z.atmf243.nc ++ /??/atmos/gfs.t??z.atmf264.nc ++ /??/atmos/gfs.t??z.atmf285.nc ++ /??/atmos/gfs.t??z.atmf306.nc ++ /??/atmos/gfs.t??z.atmf327.nc ++ /??/atmos/gfs.t??z.atmf348.nc ++ /??/atmos/gfs.t??z.atmf369.nc +- * +B 100 + + +_COMROOT_/gfs/_SHORTVER_/gfs._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/gfs.t??z.atmf000.nc ++ /??/atmos/gfs.t??z.atmf007.nc ++ /??/atmos/gfs.t??z.atmf014.nc ++ /??/atmos/gfs.t??z.atmf021.nc ++ /??/atmos/gfs.t??z.atmf028.nc ++ /??/atmos/gfs.t??z.atmf035.nc ++ /??/atmos/gfs.t??z.atmf042.nc ++ /??/atmos/gfs.t??z.atmf049.nc ++ /??/atmos/gfs.t??z.atmf056.nc ++ /??/atmos/gfs.t??z.atmf063.nc ++ /??/atmos/gfs.t??z.atmf070.nc ++ /??/atmos/gfs.t??z.atmf077.nc ++ /??/atmos/gfs.t??z.atmf084.nc ++ /??/atmos/gfs.t??z.atmf091.nc ++ /??/atmos/gfs.t??z.atmf098.nc ++ /??/atmos/gfs.t??z.atmf105.nc ++ /??/atmos/gfs.t??z.atmf112.nc ++ /??/atmos/gfs.t??z.atmf119.nc ++ /??/atmos/gfs.t??z.atmf138.nc ++ /??/atmos/gfs.t??z.atmf159.nc ++ /??/atmos/gfs.t??z.atmf180.nc ++ /??/atmos/gfs.t??z.atmf201.nc ++ /??/atmos/gfs.t??z.atmf222.nc ++ /??/atmos/gfs.t??z.atmf243.nc ++ /??/atmos/gfs.t??z.atmf264.nc ++ /??/atmos/gfs.t??z.atmf285.nc ++ /??/atmos/gfs.t??z.atmf306.nc ++ /??/atmos/gfs.t??z.atmf327.nc ++ /??/atmos/gfs.t??z.atmf348.nc ++ /??/atmos/gfs.t??z.atmf369.nc +- * +B 100 + diff --git a/parm/transfer/transfer_gfs_3.list b/parm/transfer/transfer_gfs_3.list new file mode 100644 index 0000000000..636077381e --- /dev/null +++ b/parm/transfer/transfer_gfs_3.list @@ -0,0 +1,99 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/gfs.t??z.atmf001.nc ++ /??/atmos/gfs.t??z.atmf008.nc ++ /??/atmos/gfs.t??z.atmf015.nc ++ /??/atmos/gfs.t??z.atmf022.nc ++ /??/atmos/gfs.t??z.atmf029.nc ++ /??/atmos/gfs.t??z.atmf036.nc ++ /??/atmos/gfs.t??z.atmf043.nc ++ /??/atmos/gfs.t??z.atmf050.nc ++ /??/atmos/gfs.t??z.atmf057.nc ++ /??/atmos/gfs.t??z.atmf064.nc ++ /??/atmos/gfs.t??z.atmf071.nc ++ /??/atmos/gfs.t??z.atmf078.nc ++ /??/atmos/gfs.t??z.atmf085.nc ++ /??/atmos/gfs.t??z.atmf092.nc ++ /??/atmos/gfs.t??z.atmf099.nc ++ /??/atmos/gfs.t??z.atmf106.nc ++ /??/atmos/gfs.t??z.atmf113.nc ++ /??/atmos/gfs.t??z.atmf120.nc ++ /??/atmos/gfs.t??z.atmf141.nc ++ /??/atmos/gfs.t??z.atmf162.nc ++ /??/atmos/gfs.t??z.atmf183.nc ++ /??/atmos/gfs.t??z.atmf204.nc ++ /??/atmos/gfs.t??z.atmf225.nc ++ /??/atmos/gfs.t??z.atmf246.nc ++ /??/atmos/gfs.t??z.atmf267.nc ++ /??/atmos/gfs.t??z.atmf288.nc ++ /??/atmos/gfs.t??z.atmf309.nc ++ /??/atmos/gfs.t??z.atmf330.nc ++ /??/atmos/gfs.t??z.atmf351.nc ++ /??/atmos/gfs.t??z.atmf372.nc +- * +B 100 + + +_COMROOT_/gfs/_SHORTVER_/gfs._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/gfs.t??z.atmf001.nc ++ /??/atmos/gfs.t??z.atmf008.nc ++ /??/atmos/gfs.t??z.atmf015.nc ++ /??/atmos/gfs.t??z.atmf022.nc ++ /??/atmos/gfs.t??z.atmf029.nc ++ /??/atmos/gfs.t??z.atmf036.nc ++ /??/atmos/gfs.t??z.atmf043.nc ++ /??/atmos/gfs.t??z.atmf050.nc ++ /??/atmos/gfs.t??z.atmf057.nc ++ /??/atmos/gfs.t??z.atmf064.nc ++ /??/atmos/gfs.t??z.atmf071.nc ++ /??/atmos/gfs.t??z.atmf078.nc ++ /??/atmos/gfs.t??z.atmf085.nc ++ /??/atmos/gfs.t??z.atmf092.nc ++ /??/atmos/gfs.t??z.atmf099.nc ++ /??/atmos/gfs.t??z.atmf106.nc ++ /??/atmos/gfs.t??z.atmf113.nc ++ /??/atmos/gfs.t??z.atmf120.nc ++ /??/atmos/gfs.t??z.atmf141.nc ++ /??/atmos/gfs.t??z.atmf162.nc ++ /??/atmos/gfs.t??z.atmf183.nc ++ /??/atmos/gfs.t??z.atmf204.nc ++ /??/atmos/gfs.t??z.atmf225.nc ++ /??/atmos/gfs.t??z.atmf246.nc ++ /??/atmos/gfs.t??z.atmf267.nc ++ /??/atmos/gfs.t??z.atmf288.nc ++ /??/atmos/gfs.t??z.atmf309.nc ++ /??/atmos/gfs.t??z.atmf330.nc ++ /??/atmos/gfs.t??z.atmf351.nc ++ /??/atmos/gfs.t??z.atmf372.nc +- * +B 100 + diff --git a/parm/transfer/transfer_gfs_4.list b/parm/transfer/transfer_gfs_4.list new file mode 100644 index 0000000000..b45e4027ff --- /dev/null +++ b/parm/transfer/transfer_gfs_4.list @@ -0,0 +1,99 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/gfs.t??z.atmf002.nc ++ /??/atmos/gfs.t??z.atmf009.nc ++ /??/atmos/gfs.t??z.atmf016.nc ++ /??/atmos/gfs.t??z.atmf023.nc ++ /??/atmos/gfs.t??z.atmf030.nc ++ /??/atmos/gfs.t??z.atmf037.nc ++ /??/atmos/gfs.t??z.atmf044.nc ++ /??/atmos/gfs.t??z.atmf051.nc ++ /??/atmos/gfs.t??z.atmf058.nc ++ /??/atmos/gfs.t??z.atmf065.nc ++ /??/atmos/gfs.t??z.atmf072.nc ++ /??/atmos/gfs.t??z.atmf079.nc ++ /??/atmos/gfs.t??z.atmf086.nc ++ /??/atmos/gfs.t??z.atmf093.nc ++ /??/atmos/gfs.t??z.atmf100.nc ++ /??/atmos/gfs.t??z.atmf107.nc ++ /??/atmos/gfs.t??z.atmf114.nc ++ /??/atmos/gfs.t??z.atmf123.nc ++ /??/atmos/gfs.t??z.atmf144.nc ++ /??/atmos/gfs.t??z.atmf165.nc ++ /??/atmos/gfs.t??z.atmf186.nc ++ /??/atmos/gfs.t??z.atmf207.nc ++ /??/atmos/gfs.t??z.atmf228.nc ++ /??/atmos/gfs.t??z.atmf249.nc ++ /??/atmos/gfs.t??z.atmf270.nc ++ /??/atmos/gfs.t??z.atmf291.nc ++ /??/atmos/gfs.t??z.atmf312.nc ++ /??/atmos/gfs.t??z.atmf333.nc ++ /??/atmos/gfs.t??z.atmf354.nc ++ /??/atmos/gfs.t??z.atmf375.nc +- * +B 100 + + +_COMROOT_/gfs/_SHORTVER_/gfs._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/gfs.t??z.atmf002.nc ++ /??/atmos/gfs.t??z.atmf009.nc ++ /??/atmos/gfs.t??z.atmf016.nc ++ /??/atmos/gfs.t??z.atmf023.nc ++ /??/atmos/gfs.t??z.atmf030.nc ++ /??/atmos/gfs.t??z.atmf037.nc ++ /??/atmos/gfs.t??z.atmf044.nc ++ /??/atmos/gfs.t??z.atmf051.nc ++ /??/atmos/gfs.t??z.atmf058.nc ++ /??/atmos/gfs.t??z.atmf065.nc ++ /??/atmos/gfs.t??z.atmf072.nc ++ /??/atmos/gfs.t??z.atmf079.nc ++ /??/atmos/gfs.t??z.atmf086.nc ++ /??/atmos/gfs.t??z.atmf093.nc ++ /??/atmos/gfs.t??z.atmf100.nc ++ /??/atmos/gfs.t??z.atmf107.nc ++ /??/atmos/gfs.t??z.atmf114.nc ++ /??/atmos/gfs.t??z.atmf123.nc ++ /??/atmos/gfs.t??z.atmf144.nc ++ /??/atmos/gfs.t??z.atmf165.nc ++ /??/atmos/gfs.t??z.atmf186.nc ++ /??/atmos/gfs.t??z.atmf207.nc ++ /??/atmos/gfs.t??z.atmf228.nc ++ /??/atmos/gfs.t??z.atmf249.nc ++ /??/atmos/gfs.t??z.atmf270.nc ++ /??/atmos/gfs.t??z.atmf291.nc ++ /??/atmos/gfs.t??z.atmf312.nc ++ /??/atmos/gfs.t??z.atmf333.nc ++ /??/atmos/gfs.t??z.atmf354.nc ++ /??/atmos/gfs.t??z.atmf375.nc +- * +B 100 + diff --git a/parm/transfer/transfer_gfs_5.list b/parm/transfer/transfer_gfs_5.list new file mode 100644 index 0000000000..21f59df4f8 --- /dev/null +++ b/parm/transfer/transfer_gfs_5.list @@ -0,0 +1,99 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/gfs.t??z.atmf003.nc ++ /??/atmos/gfs.t??z.atmf010.nc ++ /??/atmos/gfs.t??z.atmf017.nc ++ /??/atmos/gfs.t??z.atmf024.nc ++ /??/atmos/gfs.t??z.atmf031.nc ++ /??/atmos/gfs.t??z.atmf038.nc ++ /??/atmos/gfs.t??z.atmf045.nc ++ /??/atmos/gfs.t??z.atmf052.nc ++ /??/atmos/gfs.t??z.atmf059.nc ++ /??/atmos/gfs.t??z.atmf066.nc ++ /??/atmos/gfs.t??z.atmf073.nc ++ /??/atmos/gfs.t??z.atmf080.nc ++ /??/atmos/gfs.t??z.atmf087.nc ++ /??/atmos/gfs.t??z.atmf094.nc ++ /??/atmos/gfs.t??z.atmf101.nc ++ /??/atmos/gfs.t??z.atmf108.nc ++ /??/atmos/gfs.t??z.atmf115.nc ++ /??/atmos/gfs.t??z.atmf126.nc ++ /??/atmos/gfs.t??z.atmf147.nc ++ /??/atmos/gfs.t??z.atmf168.nc ++ /??/atmos/gfs.t??z.atmf189.nc ++ /??/atmos/gfs.t??z.atmf210.nc ++ /??/atmos/gfs.t??z.atmf231.nc ++ /??/atmos/gfs.t??z.atmf252.nc ++ /??/atmos/gfs.t??z.atmf273.nc ++ /??/atmos/gfs.t??z.atmf294.nc ++ /??/atmos/gfs.t??z.atmf315.nc ++ /??/atmos/gfs.t??z.atmf336.nc ++ /??/atmos/gfs.t??z.atmf357.nc ++ /??/atmos/gfs.t??z.atmf378.nc +- * +B 100 + + +_COMROOT_/gfs/_SHORTVER_/gfs._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/gfs.t??z.atmf003.nc ++ /??/atmos/gfs.t??z.atmf010.nc ++ /??/atmos/gfs.t??z.atmf017.nc ++ /??/atmos/gfs.t??z.atmf024.nc ++ /??/atmos/gfs.t??z.atmf031.nc ++ /??/atmos/gfs.t??z.atmf038.nc ++ /??/atmos/gfs.t??z.atmf045.nc ++ /??/atmos/gfs.t??z.atmf052.nc ++ /??/atmos/gfs.t??z.atmf059.nc ++ /??/atmos/gfs.t??z.atmf066.nc ++ /??/atmos/gfs.t??z.atmf073.nc ++ /??/atmos/gfs.t??z.atmf080.nc ++ /??/atmos/gfs.t??z.atmf087.nc ++ /??/atmos/gfs.t??z.atmf094.nc ++ /??/atmos/gfs.t??z.atmf101.nc ++ /??/atmos/gfs.t??z.atmf108.nc ++ /??/atmos/gfs.t??z.atmf115.nc ++ /??/atmos/gfs.t??z.atmf126.nc ++ /??/atmos/gfs.t??z.atmf147.nc ++ /??/atmos/gfs.t??z.atmf168.nc ++ /??/atmos/gfs.t??z.atmf189.nc ++ /??/atmos/gfs.t??z.atmf210.nc ++ /??/atmos/gfs.t??z.atmf231.nc ++ /??/atmos/gfs.t??z.atmf252.nc ++ /??/atmos/gfs.t??z.atmf273.nc ++ /??/atmos/gfs.t??z.atmf294.nc ++ /??/atmos/gfs.t??z.atmf315.nc ++ /??/atmos/gfs.t??z.atmf336.nc ++ /??/atmos/gfs.t??z.atmf357.nc ++ /??/atmos/gfs.t??z.atmf378.nc +- * +B 100 + diff --git a/parm/transfer/transfer_gfs_6.list b/parm/transfer/transfer_gfs_6.list new file mode 100644 index 0000000000..5e90f975fc --- /dev/null +++ b/parm/transfer/transfer_gfs_6.list @@ -0,0 +1,99 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/gfs.t??z.atmf004.nc ++ /??/atmos/gfs.t??z.atmf011.nc ++ /??/atmos/gfs.t??z.atmf018.nc ++ /??/atmos/gfs.t??z.atmf025.nc ++ /??/atmos/gfs.t??z.atmf032.nc ++ /??/atmos/gfs.t??z.atmf039.nc ++ /??/atmos/gfs.t??z.atmf046.nc ++ /??/atmos/gfs.t??z.atmf053.nc ++ /??/atmos/gfs.t??z.atmf060.nc ++ /??/atmos/gfs.t??z.atmf067.nc ++ /??/atmos/gfs.t??z.atmf074.nc ++ /??/atmos/gfs.t??z.atmf081.nc ++ /??/atmos/gfs.t??z.atmf088.nc ++ /??/atmos/gfs.t??z.atmf095.nc ++ /??/atmos/gfs.t??z.atmf102.nc ++ /??/atmos/gfs.t??z.atmf109.nc ++ /??/atmos/gfs.t??z.atmf116.nc ++ /??/atmos/gfs.t??z.atmf129.nc ++ /??/atmos/gfs.t??z.atmf150.nc ++ /??/atmos/gfs.t??z.atmf171.nc ++ /??/atmos/gfs.t??z.atmf192.nc ++ /??/atmos/gfs.t??z.atmf213.nc ++ /??/atmos/gfs.t??z.atmf234.nc ++ /??/atmos/gfs.t??z.atmf255.nc ++ /??/atmos/gfs.t??z.atmf276.nc ++ /??/atmos/gfs.t??z.atmf297.nc ++ /??/atmos/gfs.t??z.atmf318.nc ++ /??/atmos/gfs.t??z.atmf339.nc ++ /??/atmos/gfs.t??z.atmf360.nc ++ /??/atmos/gfs.t??z.atmf381.nc +- * +B 100 + + +_COMROOT_/gfs/_SHORTVER_/gfs._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/gfs.t??z.atmf004.nc ++ /??/atmos/gfs.t??z.atmf011.nc ++ /??/atmos/gfs.t??z.atmf018.nc ++ /??/atmos/gfs.t??z.atmf025.nc ++ /??/atmos/gfs.t??z.atmf032.nc ++ /??/atmos/gfs.t??z.atmf039.nc ++ /??/atmos/gfs.t??z.atmf046.nc ++ /??/atmos/gfs.t??z.atmf053.nc ++ /??/atmos/gfs.t??z.atmf060.nc ++ /??/atmos/gfs.t??z.atmf067.nc ++ /??/atmos/gfs.t??z.atmf074.nc ++ /??/atmos/gfs.t??z.atmf081.nc ++ /??/atmos/gfs.t??z.atmf088.nc ++ /??/atmos/gfs.t??z.atmf095.nc ++ /??/atmos/gfs.t??z.atmf102.nc ++ /??/atmos/gfs.t??z.atmf109.nc ++ /??/atmos/gfs.t??z.atmf116.nc ++ /??/atmos/gfs.t??z.atmf129.nc ++ /??/atmos/gfs.t??z.atmf150.nc ++ /??/atmos/gfs.t??z.atmf171.nc ++ /??/atmos/gfs.t??z.atmf192.nc ++ /??/atmos/gfs.t??z.atmf213.nc ++ /??/atmos/gfs.t??z.atmf234.nc ++ /??/atmos/gfs.t??z.atmf255.nc ++ /??/atmos/gfs.t??z.atmf276.nc ++ /??/atmos/gfs.t??z.atmf297.nc ++ /??/atmos/gfs.t??z.atmf318.nc ++ /??/atmos/gfs.t??z.atmf339.nc ++ /??/atmos/gfs.t??z.atmf360.nc ++ /??/atmos/gfs.t??z.atmf381.nc +- * +B 100 + diff --git a/parm/transfer/transfer_gfs_7.list b/parm/transfer/transfer_gfs_7.list new file mode 100644 index 0000000000..e3b8dad532 --- /dev/null +++ b/parm/transfer/transfer_gfs_7.list @@ -0,0 +1,99 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/gfs.t??z.atmf005.nc ++ /??/atmos/gfs.t??z.atmf012.nc ++ /??/atmos/gfs.t??z.atmf019.nc ++ /??/atmos/gfs.t??z.atmf026.nc ++ /??/atmos/gfs.t??z.atmf033.nc ++ /??/atmos/gfs.t??z.atmf040.nc ++ /??/atmos/gfs.t??z.atmf047.nc ++ /??/atmos/gfs.t??z.atmf054.nc ++ /??/atmos/gfs.t??z.atmf061.nc ++ /??/atmos/gfs.t??z.atmf068.nc ++ /??/atmos/gfs.t??z.atmf075.nc ++ /??/atmos/gfs.t??z.atmf082.nc ++ /??/atmos/gfs.t??z.atmf089.nc ++ /??/atmos/gfs.t??z.atmf096.nc ++ /??/atmos/gfs.t??z.atmf103.nc ++ /??/atmos/gfs.t??z.atmf110.nc ++ /??/atmos/gfs.t??z.atmf117.nc ++ /??/atmos/gfs.t??z.atmf132.nc ++ /??/atmos/gfs.t??z.atmf153.nc ++ /??/atmos/gfs.t??z.atmf174.nc ++ /??/atmos/gfs.t??z.atmf195.nc ++ /??/atmos/gfs.t??z.atmf216.nc ++ /??/atmos/gfs.t??z.atmf237.nc ++ /??/atmos/gfs.t??z.atmf258.nc ++ /??/atmos/gfs.t??z.atmf279.nc ++ /??/atmos/gfs.t??z.atmf300.nc ++ /??/atmos/gfs.t??z.atmf321.nc ++ /??/atmos/gfs.t??z.atmf342.nc ++ /??/atmos/gfs.t??z.atmf363.nc ++ /??/atmos/gfs.t??z.atmf384.nc +- * +B 100 + + +_COMROOT_/gfs/_SHORTVER_/gfs._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/gfs.t??z.atmf005.nc ++ /??/atmos/gfs.t??z.atmf012.nc ++ /??/atmos/gfs.t??z.atmf019.nc ++ /??/atmos/gfs.t??z.atmf026.nc ++ /??/atmos/gfs.t??z.atmf033.nc ++ /??/atmos/gfs.t??z.atmf040.nc ++ /??/atmos/gfs.t??z.atmf047.nc ++ /??/atmos/gfs.t??z.atmf054.nc ++ /??/atmos/gfs.t??z.atmf061.nc ++ /??/atmos/gfs.t??z.atmf068.nc ++ /??/atmos/gfs.t??z.atmf075.nc ++ /??/atmos/gfs.t??z.atmf082.nc ++ /??/atmos/gfs.t??z.atmf089.nc ++ /??/atmos/gfs.t??z.atmf096.nc ++ /??/atmos/gfs.t??z.atmf103.nc ++ /??/atmos/gfs.t??z.atmf110.nc ++ /??/atmos/gfs.t??z.atmf117.nc ++ /??/atmos/gfs.t??z.atmf132.nc ++ /??/atmos/gfs.t??z.atmf153.nc ++ /??/atmos/gfs.t??z.atmf174.nc ++ /??/atmos/gfs.t??z.atmf195.nc ++ /??/atmos/gfs.t??z.atmf216.nc ++ /??/atmos/gfs.t??z.atmf237.nc ++ /??/atmos/gfs.t??z.atmf258.nc ++ /??/atmos/gfs.t??z.atmf279.nc ++ /??/atmos/gfs.t??z.atmf300.nc ++ /??/atmos/gfs.t??z.atmf321.nc ++ /??/atmos/gfs.t??z.atmf342.nc ++ /??/atmos/gfs.t??z.atmf363.nc ++ /??/atmos/gfs.t??z.atmf384.nc +- * +B 100 + diff --git a/parm/transfer/transfer_gfs_8.list b/parm/transfer/transfer_gfs_8.list new file mode 100644 index 0000000000..df146fd207 --- /dev/null +++ b/parm/transfer/transfer_gfs_8.list @@ -0,0 +1,97 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/gfs.t??z.atmf006.nc ++ /??/atmos/gfs.t??z.atmf013.nc ++ /??/atmos/gfs.t??z.atmf020.nc ++ /??/atmos/gfs.t??z.atmf027.nc ++ /??/atmos/gfs.t??z.atmf034.nc ++ /??/atmos/gfs.t??z.atmf041.nc ++ /??/atmos/gfs.t??z.atmf048.nc ++ /??/atmos/gfs.t??z.atmf055.nc ++ /??/atmos/gfs.t??z.atmf062.nc ++ /??/atmos/gfs.t??z.atmf069.nc ++ /??/atmos/gfs.t??z.atmf076.nc ++ /??/atmos/gfs.t??z.atmf083.nc ++ /??/atmos/gfs.t??z.atmf090.nc ++ /??/atmos/gfs.t??z.atmf097.nc ++ /??/atmos/gfs.t??z.atmf104.nc ++ /??/atmos/gfs.t??z.atmf111.nc ++ /??/atmos/gfs.t??z.atmf118.nc ++ /??/atmos/gfs.t??z.atmf135.nc ++ /??/atmos/gfs.t??z.atmf156.nc ++ /??/atmos/gfs.t??z.atmf177.nc ++ /??/atmos/gfs.t??z.atmf198.nc ++ /??/atmos/gfs.t??z.atmf219.nc ++ /??/atmos/gfs.t??z.atmf240.nc ++ /??/atmos/gfs.t??z.atmf261.nc ++ /??/atmos/gfs.t??z.atmf282.nc ++ /??/atmos/gfs.t??z.atmf303.nc ++ /??/atmos/gfs.t??z.atmf324.nc ++ /??/atmos/gfs.t??z.atmf345.nc ++ /??/atmos/gfs.t??z.atmf366.nc +- * +B 100 + + +_COMROOT_/gfs/_SHORTVER_/gfs._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/gfs.t??z.atmf006.nc ++ /??/atmos/gfs.t??z.atmf013.nc ++ /??/atmos/gfs.t??z.atmf020.nc ++ /??/atmos/gfs.t??z.atmf027.nc ++ /??/atmos/gfs.t??z.atmf034.nc ++ /??/atmos/gfs.t??z.atmf041.nc ++ /??/atmos/gfs.t??z.atmf048.nc ++ /??/atmos/gfs.t??z.atmf055.nc ++ /??/atmos/gfs.t??z.atmf062.nc ++ /??/atmos/gfs.t??z.atmf069.nc ++ /??/atmos/gfs.t??z.atmf076.nc ++ /??/atmos/gfs.t??z.atmf083.nc ++ /??/atmos/gfs.t??z.atmf090.nc ++ /??/atmos/gfs.t??z.atmf097.nc ++ /??/atmos/gfs.t??z.atmf104.nc ++ /??/atmos/gfs.t??z.atmf111.nc ++ /??/atmos/gfs.t??z.atmf118.nc ++ /??/atmos/gfs.t??z.atmf135.nc ++ /??/atmos/gfs.t??z.atmf156.nc ++ /??/atmos/gfs.t??z.atmf177.nc ++ /??/atmos/gfs.t??z.atmf198.nc ++ /??/atmos/gfs.t??z.atmf219.nc ++ /??/atmos/gfs.t??z.atmf240.nc ++ /??/atmos/gfs.t??z.atmf261.nc ++ /??/atmos/gfs.t??z.atmf282.nc ++ /??/atmos/gfs.t??z.atmf303.nc ++ /??/atmos/gfs.t??z.atmf324.nc ++ /??/atmos/gfs.t??z.atmf345.nc ++ /??/atmos/gfs.t??z.atmf366.nc +- * +B 100 + diff --git a/parm/transfer_gfs_9a.list b/parm/transfer/transfer_gfs_9a.list similarity index 77% rename from parm/transfer_gfs_9a.list rename to parm/transfer/transfer_gfs_9a.list index 5c4981fd8c..44d316c81e 100644 --- a/parm/transfer_gfs_9a.list +++ b/parm/transfer/transfer_gfs_9a.list @@ -17,30 +17,33 @@ # B bytes, relative size of the path in relation to the other paths in the list # D delete, delete extraneous files from destination directories (takes no arg) # E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) # T two-way syncronization will update both sides with latest changes (takes no arg) # Z compress data as it is sent, accepts optional compression level argument (1-9) # Rules higher in the list take precedence over lower ones. By default, all files in a # directory are included, so if no exclude patterns match that file, it will be # tranatmferred. -com/gfs/_ENVIR_/gfs._PDY_/ +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ + /??/ -+ /??/gfs.t??z.sfcf??0.nemsio -+ /??/gfs.t??z.sfcf??2.nemsio -+ /??/gfs.t??z.sfcf??4.nemsio -+ /??/gfs.t??z.sfcf??6.nemsio -+ /??/gfs.t??z.sfcf??8.nemsio ++ /??/atmos/ ++ /??/atmos/gfs.t??z.sfcf??0.nc ++ /??/atmos/gfs.t??z.sfcf??2.nc ++ /??/atmos/gfs.t??z.sfcf??4.nc ++ /??/atmos/gfs.t??z.sfcf??6.nc ++ /??/atmos/gfs.t??z.sfcf??8.nc - * B 100 -com/gfs/_ENVIR_/gfs._PDYm1_/ +_COMROOT_/gfs/_SHORTVER_/gfs._PDYm1_/ + /??/ -+ /??/gfs.t??z.sfcf??0.nemsio -+ /??/gfs.t??z.sfcf??2.nemsio -+ /??/gfs.t??z.sfcf??4.nemsio -+ /??/gfs.t??z.sfcf??6.nemsio -+ /??/gfs.t??z.sfcf??8.nemsio ++ /??/atmos/ ++ /??/atmos/gfs.t??z.sfcf??0.nc ++ /??/atmos/gfs.t??z.sfcf??2.nc ++ /??/atmos/gfs.t??z.sfcf??4.nc ++ /??/atmos/gfs.t??z.sfcf??6.nc ++ /??/atmos/gfs.t??z.sfcf??8.nc - * B 100 diff --git a/parm/transfer_gfs_9b.list b/parm/transfer/transfer_gfs_9b.list similarity index 77% rename from parm/transfer_gfs_9b.list rename to parm/transfer/transfer_gfs_9b.list index f18468fb74..b2571dfb7c 100644 --- a/parm/transfer_gfs_9b.list +++ b/parm/transfer/transfer_gfs_9b.list @@ -17,30 +17,33 @@ # B bytes, relative size of the path in relation to the other paths in the list # D delete, delete extraneous files from destination directories (takes no arg) # E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) # T two-way syncronization will update both sides with latest changes (takes no arg) # Z compress data as it is sent, accepts optional compression level argument (1-9) # Rules higher in the list take precedence over lower ones. By default, all files in a # directory are included, so if no exclude patterns match that file, it will be # tranatmferred. -com/gfs/_ENVIR_/gfs._PDY_/ +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ + /??/ -+ /??/gfs.t??z.sfcf??1.nemsio -+ /??/gfs.t??z.sfcf??3.nemsio -+ /??/gfs.t??z.sfcf??5.nemsio -+ /??/gfs.t??z.sfcf??7.nemsio -+ /??/gfs.t??z.sfcf??9.nemsio ++ /??/atmos/ ++ /??/atmos/gfs.t??z.sfcf??1.nc ++ /??/atmos/gfs.t??z.sfcf??3.nc ++ /??/atmos/gfs.t??z.sfcf??5.nc ++ /??/atmos/gfs.t??z.sfcf??7.nc ++ /??/atmos/gfs.t??z.sfcf??9.nc - * B 100 -com/gfs/_ENVIR_/gfs._PDYm1_/ +_COMROOT_/gfs/_SHORTVER_/gfs._PDYm1_/ + /??/ -+ /??/gfs.t??z.sfcf??1.nemsio -+ /??/gfs.t??z.sfcf??3.nemsio -+ /??/gfs.t??z.sfcf??5.nemsio -+ /??/gfs.t??z.sfcf??7.nemsio -+ /??/gfs.t??z.sfcf??9.nemsio ++ /??/atmos/ ++ /??/atmos/gfs.t??z.sfcf??1.nc ++ /??/atmos/gfs.t??z.sfcf??3.nc ++ /??/atmos/gfs.t??z.sfcf??5.nc ++ /??/atmos/gfs.t??z.sfcf??7.nc ++ /??/atmos/gfs.t??z.sfcf??9.nc - * B 100 diff --git a/parm/transfer/transfer_gfs_gempak.list b/parm/transfer/transfer_gfs_gempak.list new file mode 100644 index 0000000000..e491821d69 --- /dev/null +++ b/parm/transfer/transfer_gfs_gempak.list @@ -0,0 +1,45 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/gempak/ ++ /??/atmos/gempak/* +- * + +B 100 + +_COMROOT_/gfs/_SHORTVER_/gfs._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/gempak/ ++ /??/atmos/gempak/* +- * + +B 100 + + diff --git a/parm/transfer_gfs_misc.list b/parm/transfer/transfer_gfs_misc.list old mode 100755 new mode 100644 similarity index 92% rename from parm/transfer_gfs_misc.list rename to parm/transfer/transfer_gfs_misc.list index 55b21e12db..32f002d1e7 --- a/parm/transfer_gfs_misc.list +++ b/parm/transfer/transfer_gfs_misc.list @@ -17,13 +17,14 @@ # B bytes, relative size of the path in relation to the other paths in the list # D delete, delete extraneous files from destination directories (takes no arg) # E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) # T two-way syncronization will update both sides with latest changes (takes no arg) # Z compress data as it is sent, accepts optional compression level argument (1-9) # Rules higher in the list take precedence over lower ones. By default, all files in a # directory are included, so if no exclude patterns match that file, it will be # tranatmferred. -com/gfs/_ENVIR_/sdm_rtdm/ +_COMROOT_/gfs/_SHORTVER_/sdm_rtdm/ + /avgdata/ + /avgdata/obcount_30davg.gfs._MONPREV_ + /avgdata/obcount_30davg.gfs.current @@ -31,7 +32,7 @@ com/gfs/_ENVIR_/sdm_rtdm/ B 256000 -com/gfs/_ENVIR_/sdm_rtdm/ +_COMROOT_/gfs/_SHORTVER_/sdm_rtdm/ + /obcount_30day/ + /obcount_30day/gfs/ + /obcount_30day/gfs/gfs._PDYm1_/*** diff --git a/parm/transfer/transfer_gfs_wave_restart1.list b/parm/transfer/transfer_gfs_wave_restart1.list new file mode 100644 index 0000000000..cdac47428a --- /dev/null +++ b/parm/transfer/transfer_gfs_wave_restart1.list @@ -0,0 +1,44 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ ++ /??/ ++ /??/wave/ ++ /??/wave/restart/ ++ /??/wave/restart/*aoc_9km +- * +B 100 + +_COMROOT_/gfs/_SHORTVER_/gfs._PDYm1_/ ++ /??/ ++ /??/wave/ ++ /??/wave/restart/ ++ /??/wave/restart/*aoc_9km +- * +B 100 + + + diff --git a/parm/transfer/transfer_gfs_wave_restart2.list b/parm/transfer/transfer_gfs_wave_restart2.list new file mode 100644 index 0000000000..6f4eb289af --- /dev/null +++ b/parm/transfer/transfer_gfs_wave_restart2.list @@ -0,0 +1,44 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ ++ /??/ ++ /??/wave/ ++ /??/wave/restart/ ++ /??/wave/restart/*gsh_15m +- * +B 100 + +_COMROOT_/gfs/_SHORTVER_/gfs._PDYm1_/ ++ /??/ ++ /??/wave/ ++ /??/wave/restart/ ++ /??/wave/restart/*gsh_15m +- * +B 100 + + + diff --git a/parm/transfer/transfer_gfs_wave_restart3.list b/parm/transfer/transfer_gfs_wave_restart3.list new file mode 100644 index 0000000000..c8005e53eb --- /dev/null +++ b/parm/transfer/transfer_gfs_wave_restart3.list @@ -0,0 +1,44 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ ++ /??/ ++ /??/wave/ ++ /??/wave/restart/ ++ /??/wave/restart/*gnh_10m +- * +B 100 + +_COMROOT_/gfs/_SHORTVER_/gfs._PDYm1_/ ++ /??/ ++ /??/wave/ ++ /??/wave/restart/ ++ /??/wave/restart/*gnh_10m +- * +B 100 + + + diff --git a/parm/transfer/transfer_gfs_wave_rundata.list b/parm/transfer/transfer_gfs_wave_rundata.list new file mode 100644 index 0000000000..dfacfe48f7 --- /dev/null +++ b/parm/transfer/transfer_gfs_wave_rundata.list @@ -0,0 +1,44 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ ++ /??/ ++ /??/wave/ ++ /??/wave/rundata/ ++ /??/wave/rundata/* +- * + +B 100 + +_COMROOT_/gfs/_SHORTVER_/gfs._PDYm1_/ ++ /??/ ++ /??/wave/ ++ /??/wave/rundata/ ++ /??/wave/rundata/* +- * + +B 100 + diff --git a/parm/transfer/transfer_gfs_wave_wave.list b/parm/transfer/transfer_gfs_wave_wave.list new file mode 100644 index 0000000000..03cf074797 --- /dev/null +++ b/parm/transfer/transfer_gfs_wave_wave.list @@ -0,0 +1,51 @@ +# This file specifies the directories to be tranatmfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the tranatmfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# tranatmferred. + +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ ++ /??/ ++ /??/wave/ ++ /??/wave/gridded/ ++ /??/wave/gridded/* ++ /??/wave/station/ ++ /??/wave/station/* ++ /??/wave/gempak/ ++ /??/wave/gempak/* +- * +B 100 + +_COMROOT_/gfs/_SHORTVER_/gfs._PDYm1_/ ++ /??/ ++ /??/wave/ ++ /??/wave/gridded/ ++ /??/wave/gridded/* ++ /??/wave/station/ ++ /??/wave/station/* ++ /??/wave/gempak/ ++ /??/wave/gempak/* +- * +B 100 + + diff --git a/parm/transfer/transfer_rdhpcs_gdas.list b/parm/transfer/transfer_rdhpcs_gdas.list new file mode 100644 index 0000000000..a154b022ed --- /dev/null +++ b/parm/transfer/transfer_rdhpcs_gdas.list @@ -0,0 +1,70 @@ +# This file specifies the directories to be transfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the transfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# transferred. + +_COMROOT_/gfs/_SHORTVER_/gdas._PDYm1_/ _REMOTEPATH_/com/gfs/_ENVIR_/gdas._PDYm1_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/gdas.t??z*tcvitals* ++ /??/atmos/gdas.*bufr* ++ /??/atmos/gdas.t??z.abias_pc ++ /??/atmos/gdas.t??z.abias_air ++ /??/atmos/gdas.t??z.abias ++ /??/atmos/gdas.t??z.sfcf*.nc ++ /??/atmos/gdas.t??z.engicegrb ++ /??/atmos/gdas.t??z.atmf0*.nc ++ /??/atmos/gdas.t??z.radstat ++ /??/atmos/gdas.t??z.atmanl.nc ++ /??/atmos/gdas.t??z.atmges.nc ++ /??/atmos/gdas.t??z.atmgm3.nc ++ /??/atmos/gdas.t??z.atmgp3.nc ++ /??/atmos/gdas.t??z.sfcanl.nc +- * +E +# This directory is a good candidate for compression +#Z +_COMROOT_/gfs/_SHORTVER_/gdas._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/gdas._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/gdas.t??z*tcvitals* ++ /??/atmos/gdas.*bufr* ++ /??/atmos/gdas.t??z.abias_pc ++ /??/atmos/gdas.t??z.abias_air ++ /??/atmos/gdas.t??z.abias ++ /??/atmos/gdas.t??z.sfcf*.nc ++ /??/atmos/gdas.t??z.engicegrb ++ /??/atmos/gdas.t??z.atmf0*.nc ++ /??/atmos/gdas.t??z.radstat ++ /??/atmos/gdas.t??z.atmanl.nc ++ /??/atmos/gdas.t??z.atmges.nc ++ /??/atmos/gdas.t??z.atmgm3.nc ++ /??/atmos/gdas.t??z.atmgp3.nc ++ /??/atmos/gdas.t??z.sfcanl.nc ++ /??/atmos/gdas.t??z.sstgrb +- * +E +# This directory is a good candidate for compression +#Z + diff --git a/parm/transfer_rdhpcs_gdas_enkf_enkf_1.list b/parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_1.list old mode 100755 new mode 100644 similarity index 79% rename from parm/transfer_rdhpcs_gdas_enkf_enkf_1.list rename to parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_1.list index bb75f652f5..aae14dc120 --- a/parm/transfer_rdhpcs_gdas_enkf_enkf_1.list +++ b/parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_1.list @@ -17,6 +17,7 @@ # B bytes, relative size of the path in relation to the other paths in the list # D delete, delete extraneous files from destination directories (takes no arg) # E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) # T two-way syncronization will update both sides with latest changes (takes no arg) # Z compress data as it is sent, accepts optional compression level argument (1-9) # Rules higher in the list take precedence over lower ones. By default, all files in a @@ -26,20 +27,22 @@ # This directory is a good candidate for compression #Z -com/gfs/_ENVIR_/enkfgdas._PDYm1_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ + /00/ -+ /00/mem???/ -+ /00/mem???/gdas.t??z.atmf006s.nemsio -+ /00/mem???/gdas.t??z.atmf009s.nemsio ++ /00/atmos/ ++ /00/atmos/mem???/ ++ /00/atmos/mem???/gdas.t??z.atmf006.nc ++ /00/atmos/mem???/gdas.t??z.atmf009.nc - * E # This directory is a good candidate for compression #Z -com/gfs/_ENVIR_/enkfgdas._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDY_/ +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDY_/ + /00/ -+ /00/mem???/ -+ /00/mem???/gdas.t??z.atmf006s.nemsio -+ /00/mem???/gdas.t??z.atmf009s.nemsio ++ /00/atmos/ ++ /00/atmos/mem???/ ++ /00/atmos/mem???/gdas.t??z.atmf006.nc ++ /00/atmos/mem???/gdas.t??z.atmf009.nc - * E # This directory is a good candidate for compression diff --git a/parm/transfer_rdhpcs_gdas_enkf_enkf_2.list b/parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_2.list old mode 100755 new mode 100644 similarity index 79% rename from parm/transfer_rdhpcs_gdas_enkf_enkf_2.list rename to parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_2.list index f29819c6e9..1cf3b8f5e4 --- a/parm/transfer_rdhpcs_gdas_enkf_enkf_2.list +++ b/parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_2.list @@ -17,6 +17,7 @@ # B bytes, relative size of the path in relation to the other paths in the list # D delete, delete extraneous files from destination directories (takes no arg) # E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) # T two-way syncronization will update both sides with latest changes (takes no arg) # Z compress data as it is sent, accepts optional compression level argument (1-9) # Rules higher in the list take precedence over lower ones. By default, all files in a @@ -26,20 +27,22 @@ # This directory is a good candidate for compression #Z -com/gfs/_ENVIR_/enkfgdas._PDYm1_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ + /06/ -+ /06/mem???/ -+ /06/mem???/gdas.t??z.atmf006s.nemsio -+ /06/mem???/gdas.t??z.atmf009s.nemsio ++ /06/atmos/ ++ /06/atmos/mem???/ ++ /06/atmos/mem???/gdas.t??z.atmf006.nc ++ /06/atmos/mem???/gdas.t??z.atmf009.nc - * E # This directory is a good candidate for compression #Z -com/gfs/_ENVIR_/enkfgdas._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDY_/ +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDY_/ + /06/ -+ /06/mem???/ -+ /06/mem???/gdas.t??z.atmf006s.nemsio -+ /06/mem???/gdas.t??z.atmf009s.nemsio ++ /06/atmos/ ++ /06/atmos/mem???/ ++ /06/atmos/mem???/gdas.t??z.atmf006.nc ++ /06/atmos/mem???/gdas.t??z.atmf009.nc - * E # This directory is a good candidate for compression diff --git a/parm/transfer_rdhpcs_gdas_enkf_enkf_3.list b/parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_3.list old mode 100755 new mode 100644 similarity index 79% rename from parm/transfer_rdhpcs_gdas_enkf_enkf_3.list rename to parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_3.list index f338047a26..ee0dae4c34 --- a/parm/transfer_rdhpcs_gdas_enkf_enkf_3.list +++ b/parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_3.list @@ -17,6 +17,7 @@ # B bytes, relative size of the path in relation to the other paths in the list # D delete, delete extraneous files from destination directories (takes no arg) # E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) # T two-way syncronization will update both sides with latest changes (takes no arg) # Z compress data as it is sent, accepts optional compression level argument (1-9) # Rules higher in the list take precedence over lower ones. By default, all files in a @@ -26,20 +27,22 @@ # This directory is a good candidate for compression #Z -com/gfs/_ENVIR_/enkfgdas._PDYm1_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ + /12/ -+ /12/mem???/ -+ /12/mem???/gdas.t??z.atmf006s.nemsio -+ /12/mem???/gdas.t??z.atmf009s.nemsio ++ /12/atmos/ ++ /12/atmos/mem???/ ++ /12/atmos/mem???/gdas.t??z.atmf006.nc ++ /12/atmos/mem???/gdas.t??z.atmf009.nc - * E # This directory is a good candidate for compression #Z -com/gfs/_ENVIR_/enkfgdas._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDY_/ +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDY_/ + /12/ -+ /12/mem???/ -+ /12/mem???/gdas.t??z.atmf006s.nemsio -+ /12/mem???/gdas.t??z.atmf009s.nemsio ++ /12/atmos/ ++ /12/atmos/mem???/ ++ /12/atmos/mem???/gdas.t??z.atmf006.nc ++ /12/atmos/mem???/gdas.t??z.atmf009.nc - * E # This directory is a good candidate for compression diff --git a/parm/transfer_rdhpcs_gdas_enkf_enkf_4.list b/parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_4.list old mode 100755 new mode 100644 similarity index 79% rename from parm/transfer_rdhpcs_gdas_enkf_enkf_4.list rename to parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_4.list index 2fcd4ce8b3..29f1a601d1 --- a/parm/transfer_rdhpcs_gdas_enkf_enkf_4.list +++ b/parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_4.list @@ -17,6 +17,7 @@ # B bytes, relative size of the path in relation to the other paths in the list # D delete, delete extraneous files from destination directories (takes no arg) # E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) # T two-way syncronization will update both sides with latest changes (takes no arg) # Z compress data as it is sent, accepts optional compression level argument (1-9) # Rules higher in the list take precedence over lower ones. By default, all files in a @@ -26,20 +27,22 @@ # This directory is a good candidate for compression #Z -com/gfs/_ENVIR_/enkfgdas._PDYm1_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ + /18/ -+ /18/mem???/ -+ /18/mem???/gdas.t??z.atmf006s.nemsio -+ /18/mem???/gdas.t??z.atmf009s.nemsio ++ /18/atmos/ ++ /18/atmos/mem???/ ++ /18/atmos/mem???/gdas.t??z.atmf006.nc ++ /18/atmos/mem???/gdas.t??z.atmf009.nc - * E # This directory is a good candidate for compression #Z -com/gfs/_ENVIR_/enkfgdas._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDY_/ +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDY_/ + /18/ -+ /18/mem???/ -+ /18/mem???/gdas.t??z.atmf006s.nemsio -+ /18/mem???/gdas.t??z.atmf009s.nemsio ++ /18/atmos/ ++ /18/atmos/mem???/ ++ /18/atmos/mem???/gdas.t??z.atmf006.nc ++ /18/atmos/mem???/gdas.t??z.atmf009.nc - * E # This directory is a good candidate for compression diff --git a/parm/transfer_rdhpcs_gdas_enkf_enkf_5.list b/parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_5.list old mode 100755 new mode 100644 similarity index 76% rename from parm/transfer_rdhpcs_gdas_enkf_enkf_5.list rename to parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_5.list index 3b6370ea39..7d1dd9ff6a --- a/parm/transfer_rdhpcs_gdas_enkf_enkf_5.list +++ b/parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_5.list @@ -17,6 +17,7 @@ # B bytes, relative size of the path in relation to the other paths in the list # D delete, delete extraneous files from destination directories (takes no arg) # E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) # T two-way syncronization will update both sides with latest changes (takes no arg) # Z compress data as it is sent, accepts optional compression level argument (1-9) # Rules higher in the list take precedence over lower ones. By default, all files in a @@ -26,22 +27,24 @@ # This directory is a good candidate for compression #Z -com/gfs/_ENVIR_/enkfgdas._PDYm1_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ + /00/ -+ /00/mem???/ -+ /00/mem???/gdas.t??z.ratmanl.nemsio -+ /00/gdas.t??z.atmf006.ensmean.nemsio -+ /00/gdas.t??z.atmf009.ensmean.nemsio ++ /00/atmos/ ++ /00/atmos/mem???/ ++ /00/atmos/mem???/gdas.t??z.ratminc.nc ++ /00/atmos/gdas.t??z.atmf006.ensmean.nc ++ /00/atmos/gdas.t??z.atmf009.ensmean.nc - * E # This directory is a good candidate for compression #Z -com/gfs/_ENVIR_/enkfgdas._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDY_/ +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDY_/ + /00/ -+ /00/mem???/ -+ /00/mem???/gdas.t??z.ratmanl.nemsio -+ /00/gdas.t??z.atmf006.ensmean.nemsio -+ /00/gdas.t??z.atmf009.ensmean.nemsio ++ /00/atmos/ ++ /00/atmos/mem???/ ++ /00/atmos/mem???/gdas.t??z.ratminc.nc ++ /00/atmos/gdas.t??z.atmf006.ensmean.nc ++ /00/atmos/gdas.t??z.atmf009.ensmean.nc - * E # This directory is a good candidate for compression diff --git a/parm/transfer_rdhpcs_gdas_enkf_enkf_6.list b/parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_6.list old mode 100755 new mode 100644 similarity index 76% rename from parm/transfer_rdhpcs_gdas_enkf_enkf_6.list rename to parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_6.list index 0ab4484afa..124dbe3aad --- a/parm/transfer_rdhpcs_gdas_enkf_enkf_6.list +++ b/parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_6.list @@ -17,6 +17,7 @@ # B bytes, relative size of the path in relation to the other paths in the list # D delete, delete extraneous files from destination directories (takes no arg) # E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) # T two-way syncronization will update both sides with latest changes (takes no arg) # Z compress data as it is sent, accepts optional compression level argument (1-9) # Rules higher in the list take precedence over lower ones. By default, all files in a @@ -26,22 +27,24 @@ # This directory is a good candidate for compression #Z -com/gfs/_ENVIR_/enkfgdas._PDYm1_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ + /06/ -+ /06/mem???/ -+ /06/mem???/gdas.t??z.ratmanl.nemsio -+ /06/gdas.t??z.atmf006.ensmean.nemsio -+ /06/gdas.t??z.atmf009.ensmean.nemsio ++ /06/atmos/ ++ /06/atmos/mem???/ ++ /06/atmos/mem???/gdas.t??z.ratminc.nc ++ /06/atmos/gdas.t??z.atmf006.ensmean.nc ++ /06/atmos/gdas.t??z.atmf009.ensmean.nc - * E # This directory is a good candidate for compression #Z -com/gfs/_ENVIR_/enkfgdas._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDY_/ +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDY_/ + /06/ -+ /06/mem???/ -+ /06/mem???/gdas.t??z.ratmanl.nemsio -+ /06/gdas.t??z.atmf006.ensmean.nemsio -+ /06/gdas.t??z.atmf009.ensmean.nemsio ++ /06/atmos/ ++ /06/atmos/mem???/ ++ /06/atmos/mem???/gdas.t??z.ratminc.nc ++ /06/atmos/gdas.t??z.atmf006.ensmean.nc ++ /06/atmos/gdas.t??z.atmf009.ensmean.nc - * E # This directory is a good candidate for compression diff --git a/parm/transfer_rdhpcs_gdas_enkf_enkf_7.list b/parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_7.list old mode 100755 new mode 100644 similarity index 76% rename from parm/transfer_rdhpcs_gdas_enkf_enkf_7.list rename to parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_7.list index 9f96c591b7..58ff55b5d6 --- a/parm/transfer_rdhpcs_gdas_enkf_enkf_7.list +++ b/parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_7.list @@ -17,6 +17,7 @@ # B bytes, relative size of the path in relation to the other paths in the list # D delete, delete extraneous files from destination directories (takes no arg) # E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) # T two-way syncronization will update both sides with latest changes (takes no arg) # Z compress data as it is sent, accepts optional compression level argument (1-9) # Rules higher in the list take precedence over lower ones. By default, all files in a @@ -26,22 +27,24 @@ # This directory is a good candidate for compression #Z -com/gfs/_ENVIR_/enkfgdas._PDYm1_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ + /12/ -+ /12/mem???/ -+ /12/mem???/gdas.t??z.ratmanl.nemsio -+ /12/gdas.t??z.atmf006.ensmean.nemsio -+ /12/gdas.t??z.atmf009.ensmean.nemsio ++ /12/atmos/ ++ /12/atmos/mem???/ ++ /12/atmos/mem???/gdas.t??z.ratminc.nc ++ /12/atmos/gdas.t??z.atmf006.ensmean.nc ++ /12/atmos/gdas.t??z.atmf009.ensmean.nc - * E # This directory is a good candidate for compression #Z -com/gfs/_ENVIR_/enkfgdas._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDY_/ +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDY_/ + /12/ -+ /12/mem???/ -+ /12/mem???/gdas.t??z.ratmanl.nemsio -+ /12/gdas.t??z.atmf006.ensmean.nemsio -+ /12/gdas.t??z.atmf009.ensmean.nemsio ++ /12/atmos/ ++ /12/atmos/mem???/ ++ /12/atmos/mem???/gdas.t??z.ratminc.nc ++ /12/atmos/gdas.t??z.atmf006.ensmean.nc ++ /12/atmos/gdas.t??z.atmf009.ensmean.nc - * E # This directory is a good candidate for compression diff --git a/parm/transfer_rdhpcs_gdas_enkf_enkf_8.list b/parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_8.list old mode 100755 new mode 100644 similarity index 76% rename from parm/transfer_rdhpcs_gdas_enkf_enkf_8.list rename to parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_8.list index ceb201c6c0..99d3de2843 --- a/parm/transfer_rdhpcs_gdas_enkf_enkf_8.list +++ b/parm/transfer/transfer_rdhpcs_gdas_enkf_enkf_8.list @@ -17,6 +17,7 @@ # B bytes, relative size of the path in relation to the other paths in the list # D delete, delete extraneous files from destination directories (takes no arg) # E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) # T two-way syncronization will update both sides with latest changes (takes no arg) # Z compress data as it is sent, accepts optional compression level argument (1-9) # Rules higher in the list take precedence over lower ones. By default, all files in a @@ -26,22 +27,24 @@ # This directory is a good candidate for compression #Z -com/gfs/_ENVIR_/enkfgdas._PDYm1_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDYm1_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ + /18/ -+ /18/mem???/ -+ /18/mem???/gdas.t??z.ratmanl.nemsio -+ /18/gdas.t??z.atmf006.ensmean.nemsio -+ /18/gdas.t??z.atmf009.ensmean.nemsio ++ /18/atmos/ ++ /18/atmos/mem???/ ++ /18/atmos/mem???/gdas.t??z.ratminc.nc ++ /18/atmos/gdas.t??z.atmf006.ensmean.nc ++ /18/atmos/gdas.t??z.atmf009.ensmean.nc - * E # This directory is a good candidate for compression #Z -com/gfs/_ENVIR_/enkfgdas._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDY_/ +_COMROOT_/gfs/_SHORTVER_/enkfgdas._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/enkfgdas._PDY_/ + /18/ -+ /18/mem???/ -+ /18/mem???/gdas.t??z.ratmanl.nemsio -+ /18/gdas.t??z.atmf006.ensmean.nemsio -+ /18/gdas.t??z.atmf009.ensmean.nemsio ++ /18/atmos/ ++ /18/atmos/mem???/ ++ /18/atmos/mem???/gdas.t??z.ratminc.nc ++ /18/atmos/gdas.t??z.atmf006.ensmean.nc ++ /18/atmos/gdas.t??z.atmf009.ensmean.nc - * E # This directory is a good candidate for compression diff --git a/parm/transfer/transfer_rdhpcs_gfs.list b/parm/transfer/transfer_rdhpcs_gfs.list new file mode 100644 index 0000000000..78eedd1f24 --- /dev/null +++ b/parm/transfer/transfer_rdhpcs_gfs.list @@ -0,0 +1,69 @@ +# This file specifies the directories to be transfered and, optionally, the files within +# those directories to include or exclude. If one directory is specified per line, it +# will be used as both the source and destination. If two directories are specified per +# line, separated by one or more spaces, the first will be used as the source and the +# second the destination. Directories that begin with "com/" will be resolved using +# the compath.py utility. Rules may be placed below each directory or directory pair +# and must begin with one of the following characters: +# - exclude, specifies an exclude pattern +# + include, specifies an include pattern +# . merge, specifies a merge-file to read for more rules +# : dir-merge, specifies a per-directory merge-file +# H hide, specifies a pattern for hiding files from the transfer +# S show, files that match the pattern are not hidden +# P protect, specifies a pattern for protecting files from deletion +# R risk, files that match the pattern are not protected +# ! clear, clears the current include/exclude list (takes no arg) +# B bytes, relative size of the path in relation to the other paths in the list +# D delete, delete extraneous files from destination directories (takes no arg) +# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) +# T two-way syncronization will update both sides with latest changes (takes no arg) +# Z compress data as it is sent, accepts optional compression level argument (1-9) +# Rules higher in the list take precedence over lower ones. By default, all files in a +# directory are included, so if no exclude patterns match that file, it will be +# transferred. + +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/gfs._PDY_/ ++ /??/ ++ /??/atmos/ ++ /??/atmos/gfs.t??z.*bufr* ++ /??/atmos/gfs.t??z.engicegrb ++ /??/atmos/gfs.t??z.*tcvitals*tm00 ++ /??/atmos/gfs.t??z.atmanl.nc ++ /??/atmos/gfs.t??z.sfcanl.nc ++ /??/atmos/gfs.t??z.master.grb2f* ++ /??/atmos/gfs.t??z.pgrb2.0p25.f* ++ /??/atmos/gfs.t??z.sfluxgrbf* ++ /??/atmos/gfs.t??z.gcip.f00.grib2 ++ /??/atmos/gfs.t??z.atmf000.nc ++ /??/atmos/gfs.t??z.atmf003.nc ++ /??/atmos/gfs.t??z.atmf006.nc ++ /??/atmos/gfs.t??z.atmf009.nc ++ /??/atmos/gfs.t??z.atmf012.nc ++ /??/atmos/gfs.t??z.atmf015.nc ++ /??/atmos/gfs.t??z.atmf018.nc ++ /??/atmos/gfs.t??z.atmf021.nc ++ /??/atmos/gfs.t??z.atmf024.nc ++ /??/atmos/gfs.t??z.atmf027.nc ++ /??/atmos/gfs.t??z.atmf030.nc ++ /??/atmos/gfs.t??z.atmf033.nc ++ /??/atmos/gfs.t??z.atmf036.nc ++ /??/atmos/gfs.t??z.atmf039.nc ++ /??/atmos/gfs.t??z.atmf042.nc ++ /??/atmos/gfs.t??z.atmf045.nc ++ /??/atmos/gfs.t??z.atmf048.nc ++ /??/atmos/gfs.t??z.sfcf024.nc ++ /??/atmos/gfs.t??z.sfcf027.nc ++ /??/atmos/gfs.t??z.sfcf030.nc ++ /??/atmos/gfs.t??z.sfcf033.nc ++ /??/atmos/gfs.t??z.sfcf036.nc ++ /??/atmos/gfs.t??z.sfcf039.nc ++ /??/atmos/gfs.t??z.sfcf042.nc ++ /??/atmos/gfs.t??z.sfcf045.nc ++ /??/atmos/gfs.t??z.sfcf048.nc +- * +E +# This directory is a good candidate for compression +#Z + diff --git a/parm/transfer_rdhpcs_gfs_nawips.list b/parm/transfer/transfer_rdhpcs_gfs_nawips.list old mode 100755 new mode 100644 similarity index 83% rename from parm/transfer_rdhpcs_gfs_nawips.list rename to parm/transfer/transfer_rdhpcs_gfs_nawips.list index c646bdd4de..3465d3c360 --- a/parm/transfer_rdhpcs_gfs_nawips.list +++ b/parm/transfer/transfer_rdhpcs_gfs_nawips.list @@ -17,19 +17,21 @@ # B bytes, relative size of the path in relation to the other paths in the list # D delete, delete extraneous files from destination directories (takes no arg) # E encrypt, enables data encryption [two cores should be allocated] (takes no arg) +# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) # T two-way syncronization will update both sides with latest changes (takes no arg) # Z compress data as it is sent, accepts optional compression level argument (1-9) # Rules higher in the list take precedence over lower ones. By default, all files in a # directory are included, so if no exclude patterns match that file, it will be # transferred. -com/gfs/_ENVIR_/gfs._PDY_/ _REMOTEPATH_/com/nawips/_ENVIR_/gfs._PDY_/ +_COMROOT_/gfs/_SHORTVER_/gfs._PDY_/ _REMOTEPATH_/_ENVIR_/com/gfs/_SHORTVER_/gfs._PDY_/ + /??/ -+ /??/gempak/ -+ /??/gempak/gfs_??????????f??? -+ /??/gempak/gfs40_??????????f??? -+ /??/gempak/gfs_*.snd -+ /??/gempak/gfs_*.sfc ++ /??/atmos/ ++ /??/atmos/gempak/ ++ /??/atmos/gempak/gfs_??????????f??? ++ /??/atmos/gempak/gfs40_??????????f??? ++ /??/atmos/gempak/gfs_*.snd ++ /??/atmos/gempak/gfs_*.sfc - * E # This directory is a good candidate for compression diff --git a/parm/transfer_gdas_1c.list b/parm/transfer_gdas_1c.list deleted file mode 100644 index 37cd3742ac..0000000000 --- a/parm/transfer_gdas_1c.list +++ /dev/null @@ -1,64 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -com/gfs/_ENVIR_/gdas._PDY_/ -- /??/*atmf000* -- /??/*atmf001* -- /??/*atmf002* -- /??/*atmf003* -- /??/*atmf004* -- /??/*atmf005* -- /??/*atmf006* -- /??/*atmf007* -- /??/*atmf008* -- /??/*atmf009* -- /??/*atmg* -- /??/*atmanl* -+ /* -+ /??/ -+ /??/* - -B 100 - -com/gfs/_ENVIR_/gdas._PDYm1_/ -- /??/*atmf000* -- /??/*atmf001* -- /??/*atmf002* -- /??/*atmf003* -- /??/*atmf004* -- /??/*atmf005* -- /??/*atmf006* -- /??/*atmf007* -- /??/*atmf008* -- /??/*atmf009* -- /??/*atmg* -- /??/*atmanl* -+ /* -+ /??/ -+ /??/* - -B 100 - - diff --git a/parm/transfer_gdas_enkf_enkf_05.list b/parm/transfer_gdas_enkf_enkf_05.list deleted file mode 100644 index d9fb01b8f7..0000000000 --- a/parm/transfer_gdas_enkf_enkf_05.list +++ /dev/null @@ -1,60 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -#com/gfs/_ENVIR_/enkfgdas._PDY_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDY_/ -+ /??/ -+ /??/mem001/ -+ /??/mem001/** -+ /??/mem002/ -+ /??/mem002/** -+ /??/mem003/ -+ /??/mem003/** -+ /??/mem004/ -+ /??/mem004/** -+ /??/mem005/ -+ /??/mem005/** -- * - -B 100 - -#com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -+ /??/ -+ /??/mem001/ -+ /??/mem001/** -+ /??/mem002/ -+ /??/mem002/** -+ /??/mem003/ -+ /??/mem003/** -+ /??/mem004/ -+ /??/mem004/** -+ /??/mem005/ -+ /??/mem005/** -- * - -B 100 - - diff --git a/parm/transfer_gdas_enkf_enkf_10.list b/parm/transfer_gdas_enkf_enkf_10.list deleted file mode 100644 index c71b688233..0000000000 --- a/parm/transfer_gdas_enkf_enkf_10.list +++ /dev/null @@ -1,60 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -#com/gfs/_ENVIR_/enkfgdas._PDY_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDY_/ -+ /??/ -+ /??/mem006/ -+ /??/mem006/** -+ /??/mem007/ -+ /??/mem007/** -+ /??/mem008/ -+ /??/mem008/** -+ /??/mem009/ -+ /??/mem009/** -+ /??/mem010/ -+ /??/mem010/** -- * - -B 100 - -#com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -+ /??/ -+ /??/mem006/ -+ /??/mem006/** -+ /??/mem007/ -+ /??/mem007/** -+ /??/mem008/ -+ /??/mem008/** -+ /??/mem009/ -+ /??/mem009/** -+ /??/mem010/ -+ /??/mem010/** -- * - -B 100 - - diff --git a/parm/transfer_gdas_enkf_enkf_15.list b/parm/transfer_gdas_enkf_enkf_15.list deleted file mode 100644 index b4a717ff4a..0000000000 --- a/parm/transfer_gdas_enkf_enkf_15.list +++ /dev/null @@ -1,60 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -#com/gfs/_ENVIR_/enkfgdas._PDY_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDY_/ -+ /??/ -+ /??/mem011/ -+ /??/mem011/** -+ /??/mem012/ -+ /??/mem012/** -+ /??/mem013/ -+ /??/mem013/** -+ /??/mem014/ -+ /??/mem014/** -+ /??/mem015/ -+ /??/mem015/** -- * - -B 100 - -#com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -+ /??/ -+ /??/mem011/ -+ /??/mem011/** -+ /??/mem012/ -+ /??/mem012/** -+ /??/mem013/ -+ /??/mem013/** -+ /??/mem014/ -+ /??/mem014/** -+ /??/mem015/ -+ /??/mem015/** -- * - -B 100 - - diff --git a/parm/transfer_gdas_enkf_enkf_20.list b/parm/transfer_gdas_enkf_enkf_20.list deleted file mode 100644 index 3cc88b6b29..0000000000 --- a/parm/transfer_gdas_enkf_enkf_20.list +++ /dev/null @@ -1,60 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -#com/gfs/_ENVIR_/enkfgdas._PDY_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDY_/ -+ /??/ -+ /??/mem016/ -+ /??/mem016/** -+ /??/mem017/ -+ /??/mem017/** -+ /??/mem018/ -+ /??/mem018/** -+ /??/mem019/ -+ /??/mem019/** -+ /??/mem020/ -+ /??/mem020/** -- * - -B 100 - -#com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -+ /??/ -+ /??/mem016/ -+ /??/mem016/** -+ /??/mem017/ -+ /??/mem017/** -+ /??/mem018/ -+ /??/mem018/** -+ /??/mem019/ -+ /??/mem019/** -+ /??/mem020/ -+ /??/mem020/** -- * - -B 100 - - diff --git a/parm/transfer_gdas_enkf_enkf_25.list b/parm/transfer_gdas_enkf_enkf_25.list deleted file mode 100644 index 31817914e2..0000000000 --- a/parm/transfer_gdas_enkf_enkf_25.list +++ /dev/null @@ -1,60 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -#com/gfs/_ENVIR_/enkfgdas._PDY_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDY_/ -+ /??/ -+ /??/mem021/ -+ /??/mem021/** -+ /??/mem022/ -+ /??/mem022/** -+ /??/mem023/ -+ /??/mem023/** -+ /??/mem024/ -+ /??/mem024/** -+ /??/mem025/ -+ /??/mem025/** -- * - -B 100 - -#com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -+ /??/ -+ /??/mem021/ -+ /??/mem021/** -+ /??/mem022/ -+ /??/mem022/** -+ /??/mem023/ -+ /??/mem023/** -+ /??/mem024/ -+ /??/mem024/** -+ /??/mem025/ -+ /??/mem025/** -- * - -B 100 - - diff --git a/parm/transfer_gdas_enkf_enkf_30.list b/parm/transfer_gdas_enkf_enkf_30.list deleted file mode 100644 index 5adcee55fa..0000000000 --- a/parm/transfer_gdas_enkf_enkf_30.list +++ /dev/null @@ -1,60 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -#com/gfs/_ENVIR_/enkfgdas._PDY_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDY_/ -+ /??/ -+ /??/mem026/ -+ /??/mem026/** -+ /??/mem027/ -+ /??/mem027/** -+ /??/mem028/ -+ /??/mem028/** -+ /??/mem029/ -+ /??/mem029/** -+ /??/mem030/ -+ /??/mem030/** -- * - -B 100 - -#com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -+ /??/ -+ /??/mem026/ -+ /??/mem026/** -+ /??/mem027/ -+ /??/mem027/** -+ /??/mem028/ -+ /??/mem028/** -+ /??/mem029/ -+ /??/mem029/** -+ /??/mem030/ -+ /??/mem030/** -- * - -B 100 - - diff --git a/parm/transfer_gdas_enkf_enkf_35.list b/parm/transfer_gdas_enkf_enkf_35.list deleted file mode 100644 index fbe1593311..0000000000 --- a/parm/transfer_gdas_enkf_enkf_35.list +++ /dev/null @@ -1,60 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -#com/gfs/_ENVIR_/enkfgdas._PDY_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDY_/ -+ /??/ -+ /??/mem031/ -+ /??/mem031/** -+ /??/mem032/ -+ /??/mem032/** -+ /??/mem033/ -+ /??/mem033/** -+ /??/mem034/ -+ /??/mem034/** -+ /??/mem035/ -+ /??/mem035/** -- * - -B 100 - -#com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -+ /??/ -+ /??/mem031/ -+ /??/mem031/** -+ /??/mem032/ -+ /??/mem032/** -+ /??/mem033/ -+ /??/mem033/** -+ /??/mem034/ -+ /??/mem034/** -+ /??/mem035/ -+ /??/mem035/** -- * - -B 100 - - diff --git a/parm/transfer_gdas_enkf_enkf_40.list b/parm/transfer_gdas_enkf_enkf_40.list deleted file mode 100644 index dc3316833d..0000000000 --- a/parm/transfer_gdas_enkf_enkf_40.list +++ /dev/null @@ -1,60 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -#com/gfs/_ENVIR_/enkfgdas._PDY_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDY_/ -+ /??/ -+ /??/mem036/ -+ /??/mem036/** -+ /??/mem037/ -+ /??/mem037/** -+ /??/mem038/ -+ /??/mem038/** -+ /??/mem039/ -+ /??/mem039/** -+ /??/mem040/ -+ /??/mem040/** -- * - -B 100 - -#com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -+ /??/ -+ /??/mem036/ -+ /??/mem036/** -+ /??/mem037/ -+ /??/mem037/** -+ /??/mem038/ -+ /??/mem038/** -+ /??/mem039/ -+ /??/mem039/** -+ /??/mem040/ -+ /??/mem040/** -- * - -B 100 - - diff --git a/parm/transfer_gdas_enkf_enkf_45.list b/parm/transfer_gdas_enkf_enkf_45.list deleted file mode 100644 index 3dd1a34001..0000000000 --- a/parm/transfer_gdas_enkf_enkf_45.list +++ /dev/null @@ -1,60 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -#com/gfs/_ENVIR_/enkfgdas._PDY_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDY_/ -+ /??/ -+ /??/mem041/ -+ /??/mem041/** -+ /??/mem042/ -+ /??/mem042/** -+ /??/mem043/ -+ /??/mem043/** -+ /??/mem044/ -+ /??/mem044/** -+ /??/mem045/ -+ /??/mem045/** -- * - -B 100 - -#com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -+ /??/ -+ /??/mem041/ -+ /??/mem041/** -+ /??/mem042/ -+ /??/mem042/** -+ /??/mem043/ -+ /??/mem043/** -+ /??/mem044/ -+ /??/mem044/** -+ /??/mem045/ -+ /??/mem045/** -- * - -B 100 - - diff --git a/parm/transfer_gdas_enkf_enkf_50.list b/parm/transfer_gdas_enkf_enkf_50.list deleted file mode 100644 index fdef8bbbe4..0000000000 --- a/parm/transfer_gdas_enkf_enkf_50.list +++ /dev/null @@ -1,60 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -#com/gfs/_ENVIR_/enkfgdas._PDY_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDY_/ -+ /??/ -+ /??/mem046/ -+ /??/mem046/** -+ /??/mem047/ -+ /??/mem047/** -+ /??/mem048/ -+ /??/mem048/** -+ /??/mem049/ -+ /??/mem049/** -+ /??/mem050/ -+ /??/mem050/** -- * - -B 100 - -#com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -+ /??/ -+ /??/mem046/ -+ /??/mem046/** -+ /??/mem047/ -+ /??/mem047/** -+ /??/mem048/ -+ /??/mem048/** -+ /??/mem049/ -+ /??/mem049/** -+ /??/mem050/ -+ /??/mem050/** -- * - -B 100 - - diff --git a/parm/transfer_gdas_enkf_enkf_55.list b/parm/transfer_gdas_enkf_enkf_55.list deleted file mode 100644 index 385097f49d..0000000000 --- a/parm/transfer_gdas_enkf_enkf_55.list +++ /dev/null @@ -1,60 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -#com/gfs/_ENVIR_/enkfgdas._PDY_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDY_/ -+ /??/ -+ /??/mem051/ -+ /??/mem051/** -+ /??/mem052/ -+ /??/mem052/** -+ /??/mem053/ -+ /??/mem053/** -+ /??/mem054/ -+ /??/mem054/** -+ /??/mem055/ -+ /??/mem055/** -- * - -B 100 - -#com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -+ /??/ -+ /??/mem051/ -+ /??/mem051/** -+ /??/mem052/ -+ /??/mem052/** -+ /??/mem053/ -+ /??/mem053/** -+ /??/mem054/ -+ /??/mem054/** -+ /??/mem055/ -+ /??/mem055/** -- * - -B 100 - - diff --git a/parm/transfer_gdas_enkf_enkf_60.list b/parm/transfer_gdas_enkf_enkf_60.list deleted file mode 100644 index 82242f1223..0000000000 --- a/parm/transfer_gdas_enkf_enkf_60.list +++ /dev/null @@ -1,60 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -#com/gfs/_ENVIR_/enkfgdas._PDY_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDY_/ -+ /??/ -+ /??/mem056/ -+ /??/mem056/** -+ /??/mem057/ -+ /??/mem057/** -+ /??/mem058/ -+ /??/mem058/** -+ /??/mem059/ -+ /??/mem059/** -+ /??/mem060/ -+ /??/mem060/** -- * - -B 100 - -#com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -+ /??/ -+ /??/mem056/ -+ /??/mem056/** -+ /??/mem057/ -+ /??/mem057/** -+ /??/mem058/ -+ /??/mem058/** -+ /??/mem059/ -+ /??/mem059/** -+ /??/mem060/ -+ /??/mem060/** -- * - -B 100 - - diff --git a/parm/transfer_gdas_enkf_enkf_65.list b/parm/transfer_gdas_enkf_enkf_65.list deleted file mode 100644 index 32a14e6e17..0000000000 --- a/parm/transfer_gdas_enkf_enkf_65.list +++ /dev/null @@ -1,60 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -#com/gfs/_ENVIR_/enkfgdas._PDY_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDY_/ -+ /??/ -+ /??/mem061/ -+ /??/mem061/** -+ /??/mem062/ -+ /??/mem062/** -+ /??/mem063/ -+ /??/mem063/** -+ /??/mem064/ -+ /??/mem064/** -+ /??/mem065/ -+ /??/mem065/** -- * - -B 100 - -#com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -+ /??/ -+ /??/mem061/ -+ /??/mem061/** -+ /??/mem062/ -+ /??/mem062/** -+ /??/mem063/ -+ /??/mem063/** -+ /??/mem064/ -+ /??/mem064/** -+ /??/mem065/ -+ /??/mem065/** -- * - -B 100 - - diff --git a/parm/transfer_gdas_enkf_enkf_70.list b/parm/transfer_gdas_enkf_enkf_70.list deleted file mode 100644 index 9d143b71c4..0000000000 --- a/parm/transfer_gdas_enkf_enkf_70.list +++ /dev/null @@ -1,60 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -#com/gfs/_ENVIR_/enkfgdas._PDY_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDY_/ -+ /??/ -+ /??/mem066/ -+ /??/mem066/** -+ /??/mem067/ -+ /??/mem067/** -+ /??/mem068/ -+ /??/mem068/** -+ /??/mem069/ -+ /??/mem069/** -+ /??/mem070/ -+ /??/mem070/** -- * - -B 100 - -#com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -+ /??/ -+ /??/mem066/ -+ /??/mem066/** -+ /??/mem067/ -+ /??/mem067/** -+ /??/mem068/ -+ /??/mem068/** -+ /??/mem069/ -+ /??/mem069/** -+ /??/mem070/ -+ /??/mem070/** -- * - -B 100 - - diff --git a/parm/transfer_gdas_enkf_enkf_75.list b/parm/transfer_gdas_enkf_enkf_75.list deleted file mode 100644 index 7734c0d051..0000000000 --- a/parm/transfer_gdas_enkf_enkf_75.list +++ /dev/null @@ -1,60 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -#com/gfs/_ENVIR_/enkfgdas._PDY_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDY_/ -+ /??/ -+ /??/mem071/ -+ /??/mem071/** -+ /??/mem072/ -+ /??/mem072/** -+ /??/mem073/ -+ /??/mem073/** -+ /??/mem074/ -+ /??/mem074/** -+ /??/mem075/ -+ /??/mem075/** -- * - -B 100 - -#com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -+ /??/ -+ /??/mem071/ -+ /??/mem071/** -+ /??/mem072/ -+ /??/mem072/** -+ /??/mem073/ -+ /??/mem073/** -+ /??/mem074/ -+ /??/mem074/** -+ /??/mem075/ -+ /??/mem075/** -- * - -B 100 - - diff --git a/parm/transfer_gdas_enkf_enkf_80.list b/parm/transfer_gdas_enkf_enkf_80.list deleted file mode 100644 index 31e7caa97e..0000000000 --- a/parm/transfer_gdas_enkf_enkf_80.list +++ /dev/null @@ -1,60 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -#com/gfs/_ENVIR_/enkfgdas._PDY_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDY_/ -+ /??/ -+ /??/mem076/ -+ /??/mem076/** -+ /??/mem077/ -+ /??/mem077/** -+ /??/mem078/ -+ /??/mem078/** -+ /??/mem079/ -+ /??/mem079/** -+ /??/mem080/ -+ /??/mem080/** -- * - -B 100 - -#com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -/gpfs/dell1/nco/ops/com/gfs/_ENVIR_/enkfgdas._PDYm1_/ -+ /??/ -+ /??/mem076/ -+ /??/mem076/** -+ /??/mem077/ -+ /??/mem077/** -+ /??/mem078/ -+ /??/mem078/** -+ /??/mem079/ -+ /??/mem079/** -+ /??/mem080/ -+ /??/mem080/** -- * - -B 100 - - diff --git a/parm/transfer_gfs_2.list b/parm/transfer_gfs_2.list deleted file mode 100644 index f430bdf642..0000000000 --- a/parm/transfer_gfs_2.list +++ /dev/null @@ -1,96 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -com/gfs/_ENVIR_/gfs._PDY_/ -+ /??/ -+ /??/gfs.t??z.atmf000.nemsio -+ /??/gfs.t??z.atmf007.nemsio -+ /??/gfs.t??z.atmf014.nemsio -+ /??/gfs.t??z.atmf021.nemsio -+ /??/gfs.t??z.atmf028.nemsio -+ /??/gfs.t??z.atmf035.nemsio -+ /??/gfs.t??z.atmf042.nemsio -+ /??/gfs.t??z.atmf049.nemsio -+ /??/gfs.t??z.atmf056.nemsio -+ /??/gfs.t??z.atmf063.nemsio -+ /??/gfs.t??z.atmf070.nemsio -+ /??/gfs.t??z.atmf077.nemsio -+ /??/gfs.t??z.atmf084.nemsio -+ /??/gfs.t??z.atmf091.nemsio -+ /??/gfs.t??z.atmf098.nemsio -+ /??/gfs.t??z.atmf105.nemsio -+ /??/gfs.t??z.atmf112.nemsio -+ /??/gfs.t??z.atmf119.nemsio -+ /??/gfs.t??z.atmf138.nemsio -+ /??/gfs.t??z.atmf159.nemsio -+ /??/gfs.t??z.atmf180.nemsio -+ /??/gfs.t??z.atmf201.nemsio -+ /??/gfs.t??z.atmf222.nemsio -+ /??/gfs.t??z.atmf243.nemsio -+ /??/gfs.t??z.atmf264.nemsio -+ /??/gfs.t??z.atmf285.nemsio -+ /??/gfs.t??z.atmf306.nemsio -+ /??/gfs.t??z.atmf327.nemsio -+ /??/gfs.t??z.atmf348.nemsio -+ /??/gfs.t??z.atmf369.nemsio -- * -B 100 - - -com/gfs/_ENVIR_/gfs._PDYm1_/ -+ /??/ -+ /??/gfs.t??z.atmf000.nemsio -+ /??/gfs.t??z.atmf007.nemsio -+ /??/gfs.t??z.atmf014.nemsio -+ /??/gfs.t??z.atmf021.nemsio -+ /??/gfs.t??z.atmf028.nemsio -+ /??/gfs.t??z.atmf035.nemsio -+ /??/gfs.t??z.atmf042.nemsio -+ /??/gfs.t??z.atmf049.nemsio -+ /??/gfs.t??z.atmf056.nemsio -+ /??/gfs.t??z.atmf063.nemsio -+ /??/gfs.t??z.atmf070.nemsio -+ /??/gfs.t??z.atmf077.nemsio -+ /??/gfs.t??z.atmf084.nemsio -+ /??/gfs.t??z.atmf091.nemsio -+ /??/gfs.t??z.atmf098.nemsio -+ /??/gfs.t??z.atmf105.nemsio -+ /??/gfs.t??z.atmf112.nemsio -+ /??/gfs.t??z.atmf119.nemsio -+ /??/gfs.t??z.atmf138.nemsio -+ /??/gfs.t??z.atmf159.nemsio -+ /??/gfs.t??z.atmf180.nemsio -+ /??/gfs.t??z.atmf201.nemsio -+ /??/gfs.t??z.atmf222.nemsio -+ /??/gfs.t??z.atmf243.nemsio -+ /??/gfs.t??z.atmf264.nemsio -+ /??/gfs.t??z.atmf285.nemsio -+ /??/gfs.t??z.atmf306.nemsio -+ /??/gfs.t??z.atmf327.nemsio -+ /??/gfs.t??z.atmf348.nemsio -+ /??/gfs.t??z.atmf369.nemsio -- * -B 100 - diff --git a/parm/transfer_gfs_3.list b/parm/transfer_gfs_3.list deleted file mode 100644 index 7ff973c52a..0000000000 --- a/parm/transfer_gfs_3.list +++ /dev/null @@ -1,96 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -com/gfs/_ENVIR_/gfs._PDY_/ -+ /??/ -+ /??/gfs.t??z.atmf001.nemsio -+ /??/gfs.t??z.atmf008.nemsio -+ /??/gfs.t??z.atmf015.nemsio -+ /??/gfs.t??z.atmf022.nemsio -+ /??/gfs.t??z.atmf029.nemsio -+ /??/gfs.t??z.atmf036.nemsio -+ /??/gfs.t??z.atmf043.nemsio -+ /??/gfs.t??z.atmf050.nemsio -+ /??/gfs.t??z.atmf057.nemsio -+ /??/gfs.t??z.atmf064.nemsio -+ /??/gfs.t??z.atmf071.nemsio -+ /??/gfs.t??z.atmf078.nemsio -+ /??/gfs.t??z.atmf085.nemsio -+ /??/gfs.t??z.atmf092.nemsio -+ /??/gfs.t??z.atmf099.nemsio -+ /??/gfs.t??z.atmf106.nemsio -+ /??/gfs.t??z.atmf113.nemsio -+ /??/gfs.t??z.atmf120.nemsio -+ /??/gfs.t??z.atmf141.nemsio -+ /??/gfs.t??z.atmf162.nemsio -+ /??/gfs.t??z.atmf183.nemsio -+ /??/gfs.t??z.atmf204.nemsio -+ /??/gfs.t??z.atmf225.nemsio -+ /??/gfs.t??z.atmf246.nemsio -+ /??/gfs.t??z.atmf267.nemsio -+ /??/gfs.t??z.atmf288.nemsio -+ /??/gfs.t??z.atmf309.nemsio -+ /??/gfs.t??z.atmf330.nemsio -+ /??/gfs.t??z.atmf351.nemsio -+ /??/gfs.t??z.atmf372.nemsio -- * -B 100 - - -com/gfs/_ENVIR_/gfs._PDYm1_/ -+ /??/ -+ /??/gfs.t??z.atmf001.nemsio -+ /??/gfs.t??z.atmf008.nemsio -+ /??/gfs.t??z.atmf015.nemsio -+ /??/gfs.t??z.atmf022.nemsio -+ /??/gfs.t??z.atmf029.nemsio -+ /??/gfs.t??z.atmf036.nemsio -+ /??/gfs.t??z.atmf043.nemsio -+ /??/gfs.t??z.atmf050.nemsio -+ /??/gfs.t??z.atmf057.nemsio -+ /??/gfs.t??z.atmf064.nemsio -+ /??/gfs.t??z.atmf071.nemsio -+ /??/gfs.t??z.atmf078.nemsio -+ /??/gfs.t??z.atmf085.nemsio -+ /??/gfs.t??z.atmf092.nemsio -+ /??/gfs.t??z.atmf099.nemsio -+ /??/gfs.t??z.atmf106.nemsio -+ /??/gfs.t??z.atmf113.nemsio -+ /??/gfs.t??z.atmf120.nemsio -+ /??/gfs.t??z.atmf141.nemsio -+ /??/gfs.t??z.atmf162.nemsio -+ /??/gfs.t??z.atmf183.nemsio -+ /??/gfs.t??z.atmf204.nemsio -+ /??/gfs.t??z.atmf225.nemsio -+ /??/gfs.t??z.atmf246.nemsio -+ /??/gfs.t??z.atmf267.nemsio -+ /??/gfs.t??z.atmf288.nemsio -+ /??/gfs.t??z.atmf309.nemsio -+ /??/gfs.t??z.atmf330.nemsio -+ /??/gfs.t??z.atmf351.nemsio -+ /??/gfs.t??z.atmf372.nemsio -- * -B 100 - diff --git a/parm/transfer_gfs_4.list b/parm/transfer_gfs_4.list deleted file mode 100644 index 43516897d1..0000000000 --- a/parm/transfer_gfs_4.list +++ /dev/null @@ -1,96 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -com/gfs/_ENVIR_/gfs._PDY_/ -+ /??/ -+ /??/gfs.t??z.atmf002.nemsio -+ /??/gfs.t??z.atmf009.nemsio -+ /??/gfs.t??z.atmf016.nemsio -+ /??/gfs.t??z.atmf023.nemsio -+ /??/gfs.t??z.atmf030.nemsio -+ /??/gfs.t??z.atmf037.nemsio -+ /??/gfs.t??z.atmf044.nemsio -+ /??/gfs.t??z.atmf051.nemsio -+ /??/gfs.t??z.atmf058.nemsio -+ /??/gfs.t??z.atmf065.nemsio -+ /??/gfs.t??z.atmf072.nemsio -+ /??/gfs.t??z.atmf079.nemsio -+ /??/gfs.t??z.atmf086.nemsio -+ /??/gfs.t??z.atmf093.nemsio -+ /??/gfs.t??z.atmf100.nemsio -+ /??/gfs.t??z.atmf107.nemsio -+ /??/gfs.t??z.atmf114.nemsio -+ /??/gfs.t??z.atmf123.nemsio -+ /??/gfs.t??z.atmf144.nemsio -+ /??/gfs.t??z.atmf165.nemsio -+ /??/gfs.t??z.atmf186.nemsio -+ /??/gfs.t??z.atmf207.nemsio -+ /??/gfs.t??z.atmf228.nemsio -+ /??/gfs.t??z.atmf249.nemsio -+ /??/gfs.t??z.atmf270.nemsio -+ /??/gfs.t??z.atmf291.nemsio -+ /??/gfs.t??z.atmf312.nemsio -+ /??/gfs.t??z.atmf333.nemsio -+ /??/gfs.t??z.atmf354.nemsio -+ /??/gfs.t??z.atmf375.nemsio -- * -B 100 - - -com/gfs/_ENVIR_/gfs._PDYm1_/ -+ /??/ -+ /??/gfs.t??z.atmf002.nemsio -+ /??/gfs.t??z.atmf009.nemsio -+ /??/gfs.t??z.atmf016.nemsio -+ /??/gfs.t??z.atmf023.nemsio -+ /??/gfs.t??z.atmf030.nemsio -+ /??/gfs.t??z.atmf037.nemsio -+ /??/gfs.t??z.atmf044.nemsio -+ /??/gfs.t??z.atmf051.nemsio -+ /??/gfs.t??z.atmf058.nemsio -+ /??/gfs.t??z.atmf065.nemsio -+ /??/gfs.t??z.atmf072.nemsio -+ /??/gfs.t??z.atmf079.nemsio -+ /??/gfs.t??z.atmf086.nemsio -+ /??/gfs.t??z.atmf093.nemsio -+ /??/gfs.t??z.atmf100.nemsio -+ /??/gfs.t??z.atmf107.nemsio -+ /??/gfs.t??z.atmf114.nemsio -+ /??/gfs.t??z.atmf123.nemsio -+ /??/gfs.t??z.atmf144.nemsio -+ /??/gfs.t??z.atmf165.nemsio -+ /??/gfs.t??z.atmf186.nemsio -+ /??/gfs.t??z.atmf207.nemsio -+ /??/gfs.t??z.atmf228.nemsio -+ /??/gfs.t??z.atmf249.nemsio -+ /??/gfs.t??z.atmf270.nemsio -+ /??/gfs.t??z.atmf291.nemsio -+ /??/gfs.t??z.atmf312.nemsio -+ /??/gfs.t??z.atmf333.nemsio -+ /??/gfs.t??z.atmf354.nemsio -+ /??/gfs.t??z.atmf375.nemsio -- * -B 100 - diff --git a/parm/transfer_gfs_5.list b/parm/transfer_gfs_5.list deleted file mode 100644 index cf8e69e71f..0000000000 --- a/parm/transfer_gfs_5.list +++ /dev/null @@ -1,96 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -com/gfs/_ENVIR_/gfs._PDY_/ -+ /??/ -+ /??/gfs.t??z.atmf003.nemsio -+ /??/gfs.t??z.atmf010.nemsio -+ /??/gfs.t??z.atmf017.nemsio -+ /??/gfs.t??z.atmf024.nemsio -+ /??/gfs.t??z.atmf031.nemsio -+ /??/gfs.t??z.atmf038.nemsio -+ /??/gfs.t??z.atmf045.nemsio -+ /??/gfs.t??z.atmf052.nemsio -+ /??/gfs.t??z.atmf059.nemsio -+ /??/gfs.t??z.atmf066.nemsio -+ /??/gfs.t??z.atmf073.nemsio -+ /??/gfs.t??z.atmf080.nemsio -+ /??/gfs.t??z.atmf087.nemsio -+ /??/gfs.t??z.atmf094.nemsio -+ /??/gfs.t??z.atmf101.nemsio -+ /??/gfs.t??z.atmf108.nemsio -+ /??/gfs.t??z.atmf115.nemsio -+ /??/gfs.t??z.atmf126.nemsio -+ /??/gfs.t??z.atmf147.nemsio -+ /??/gfs.t??z.atmf168.nemsio -+ /??/gfs.t??z.atmf189.nemsio -+ /??/gfs.t??z.atmf210.nemsio -+ /??/gfs.t??z.atmf231.nemsio -+ /??/gfs.t??z.atmf252.nemsio -+ /??/gfs.t??z.atmf273.nemsio -+ /??/gfs.t??z.atmf294.nemsio -+ /??/gfs.t??z.atmf315.nemsio -+ /??/gfs.t??z.atmf336.nemsio -+ /??/gfs.t??z.atmf357.nemsio -+ /??/gfs.t??z.atmf378.nemsio -- * -B 100 - - -com/gfs/_ENVIR_/gfs._PDYm1_/ -+ /??/ -+ /??/gfs.t??z.atmf003.nemsio -+ /??/gfs.t??z.atmf010.nemsio -+ /??/gfs.t??z.atmf017.nemsio -+ /??/gfs.t??z.atmf024.nemsio -+ /??/gfs.t??z.atmf031.nemsio -+ /??/gfs.t??z.atmf038.nemsio -+ /??/gfs.t??z.atmf045.nemsio -+ /??/gfs.t??z.atmf052.nemsio -+ /??/gfs.t??z.atmf059.nemsio -+ /??/gfs.t??z.atmf066.nemsio -+ /??/gfs.t??z.atmf073.nemsio -+ /??/gfs.t??z.atmf080.nemsio -+ /??/gfs.t??z.atmf087.nemsio -+ /??/gfs.t??z.atmf094.nemsio -+ /??/gfs.t??z.atmf101.nemsio -+ /??/gfs.t??z.atmf108.nemsio -+ /??/gfs.t??z.atmf115.nemsio -+ /??/gfs.t??z.atmf126.nemsio -+ /??/gfs.t??z.atmf147.nemsio -+ /??/gfs.t??z.atmf168.nemsio -+ /??/gfs.t??z.atmf189.nemsio -+ /??/gfs.t??z.atmf210.nemsio -+ /??/gfs.t??z.atmf231.nemsio -+ /??/gfs.t??z.atmf252.nemsio -+ /??/gfs.t??z.atmf273.nemsio -+ /??/gfs.t??z.atmf294.nemsio -+ /??/gfs.t??z.atmf315.nemsio -+ /??/gfs.t??z.atmf336.nemsio -+ /??/gfs.t??z.atmf357.nemsio -+ /??/gfs.t??z.atmf378.nemsio -- * -B 100 - diff --git a/parm/transfer_gfs_6.list b/parm/transfer_gfs_6.list deleted file mode 100644 index bf12243991..0000000000 --- a/parm/transfer_gfs_6.list +++ /dev/null @@ -1,96 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -com/gfs/_ENVIR_/gfs._PDY_/ -+ /??/ -+ /??/gfs.t??z.atmf004.nemsio -+ /??/gfs.t??z.atmf011.nemsio -+ /??/gfs.t??z.atmf018.nemsio -+ /??/gfs.t??z.atmf025.nemsio -+ /??/gfs.t??z.atmf032.nemsio -+ /??/gfs.t??z.atmf039.nemsio -+ /??/gfs.t??z.atmf046.nemsio -+ /??/gfs.t??z.atmf053.nemsio -+ /??/gfs.t??z.atmf060.nemsio -+ /??/gfs.t??z.atmf067.nemsio -+ /??/gfs.t??z.atmf074.nemsio -+ /??/gfs.t??z.atmf081.nemsio -+ /??/gfs.t??z.atmf088.nemsio -+ /??/gfs.t??z.atmf095.nemsio -+ /??/gfs.t??z.atmf102.nemsio -+ /??/gfs.t??z.atmf109.nemsio -+ /??/gfs.t??z.atmf116.nemsio -+ /??/gfs.t??z.atmf129.nemsio -+ /??/gfs.t??z.atmf150.nemsio -+ /??/gfs.t??z.atmf171.nemsio -+ /??/gfs.t??z.atmf192.nemsio -+ /??/gfs.t??z.atmf213.nemsio -+ /??/gfs.t??z.atmf234.nemsio -+ /??/gfs.t??z.atmf255.nemsio -+ /??/gfs.t??z.atmf276.nemsio -+ /??/gfs.t??z.atmf297.nemsio -+ /??/gfs.t??z.atmf318.nemsio -+ /??/gfs.t??z.atmf339.nemsio -+ /??/gfs.t??z.atmf360.nemsio -+ /??/gfs.t??z.atmf381.nemsio -- * -B 100 - - -com/gfs/_ENVIR_/gfs._PDYm1_/ -+ /??/ -+ /??/gfs.t??z.atmf004.nemsio -+ /??/gfs.t??z.atmf011.nemsio -+ /??/gfs.t??z.atmf018.nemsio -+ /??/gfs.t??z.atmf025.nemsio -+ /??/gfs.t??z.atmf032.nemsio -+ /??/gfs.t??z.atmf039.nemsio -+ /??/gfs.t??z.atmf046.nemsio -+ /??/gfs.t??z.atmf053.nemsio -+ /??/gfs.t??z.atmf060.nemsio -+ /??/gfs.t??z.atmf067.nemsio -+ /??/gfs.t??z.atmf074.nemsio -+ /??/gfs.t??z.atmf081.nemsio -+ /??/gfs.t??z.atmf088.nemsio -+ /??/gfs.t??z.atmf095.nemsio -+ /??/gfs.t??z.atmf102.nemsio -+ /??/gfs.t??z.atmf109.nemsio -+ /??/gfs.t??z.atmf116.nemsio -+ /??/gfs.t??z.atmf129.nemsio -+ /??/gfs.t??z.atmf150.nemsio -+ /??/gfs.t??z.atmf171.nemsio -+ /??/gfs.t??z.atmf192.nemsio -+ /??/gfs.t??z.atmf213.nemsio -+ /??/gfs.t??z.atmf234.nemsio -+ /??/gfs.t??z.atmf255.nemsio -+ /??/gfs.t??z.atmf276.nemsio -+ /??/gfs.t??z.atmf297.nemsio -+ /??/gfs.t??z.atmf318.nemsio -+ /??/gfs.t??z.atmf339.nemsio -+ /??/gfs.t??z.atmf360.nemsio -+ /??/gfs.t??z.atmf381.nemsio -- * -B 100 - diff --git a/parm/transfer_gfs_7.list b/parm/transfer_gfs_7.list deleted file mode 100644 index d44c65f9b1..0000000000 --- a/parm/transfer_gfs_7.list +++ /dev/null @@ -1,96 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -com/gfs/_ENVIR_/gfs._PDY_/ -+ /??/ -+ /??/gfs.t??z.atmf005.nemsio -+ /??/gfs.t??z.atmf012.nemsio -+ /??/gfs.t??z.atmf019.nemsio -+ /??/gfs.t??z.atmf026.nemsio -+ /??/gfs.t??z.atmf033.nemsio -+ /??/gfs.t??z.atmf040.nemsio -+ /??/gfs.t??z.atmf047.nemsio -+ /??/gfs.t??z.atmf054.nemsio -+ /??/gfs.t??z.atmf061.nemsio -+ /??/gfs.t??z.atmf068.nemsio -+ /??/gfs.t??z.atmf075.nemsio -+ /??/gfs.t??z.atmf082.nemsio -+ /??/gfs.t??z.atmf089.nemsio -+ /??/gfs.t??z.atmf096.nemsio -+ /??/gfs.t??z.atmf103.nemsio -+ /??/gfs.t??z.atmf110.nemsio -+ /??/gfs.t??z.atmf117.nemsio -+ /??/gfs.t??z.atmf132.nemsio -+ /??/gfs.t??z.atmf153.nemsio -+ /??/gfs.t??z.atmf174.nemsio -+ /??/gfs.t??z.atmf195.nemsio -+ /??/gfs.t??z.atmf216.nemsio -+ /??/gfs.t??z.atmf237.nemsio -+ /??/gfs.t??z.atmf258.nemsio -+ /??/gfs.t??z.atmf279.nemsio -+ /??/gfs.t??z.atmf300.nemsio -+ /??/gfs.t??z.atmf321.nemsio -+ /??/gfs.t??z.atmf342.nemsio -+ /??/gfs.t??z.atmf363.nemsio -+ /??/gfs.t??z.atmf384.nemsio -- * -B 100 - - -com/gfs/_ENVIR_/gfs._PDYm1_/ -+ /??/ -+ /??/gfs.t??z.atmf005.nemsio -+ /??/gfs.t??z.atmf012.nemsio -+ /??/gfs.t??z.atmf019.nemsio -+ /??/gfs.t??z.atmf026.nemsio -+ /??/gfs.t??z.atmf033.nemsio -+ /??/gfs.t??z.atmf040.nemsio -+ /??/gfs.t??z.atmf047.nemsio -+ /??/gfs.t??z.atmf054.nemsio -+ /??/gfs.t??z.atmf061.nemsio -+ /??/gfs.t??z.atmf068.nemsio -+ /??/gfs.t??z.atmf075.nemsio -+ /??/gfs.t??z.atmf082.nemsio -+ /??/gfs.t??z.atmf089.nemsio -+ /??/gfs.t??z.atmf096.nemsio -+ /??/gfs.t??z.atmf103.nemsio -+ /??/gfs.t??z.atmf110.nemsio -+ /??/gfs.t??z.atmf117.nemsio -+ /??/gfs.t??z.atmf132.nemsio -+ /??/gfs.t??z.atmf153.nemsio -+ /??/gfs.t??z.atmf174.nemsio -+ /??/gfs.t??z.atmf195.nemsio -+ /??/gfs.t??z.atmf216.nemsio -+ /??/gfs.t??z.atmf237.nemsio -+ /??/gfs.t??z.atmf258.nemsio -+ /??/gfs.t??z.atmf279.nemsio -+ /??/gfs.t??z.atmf300.nemsio -+ /??/gfs.t??z.atmf321.nemsio -+ /??/gfs.t??z.atmf342.nemsio -+ /??/gfs.t??z.atmf363.nemsio -+ /??/gfs.t??z.atmf384.nemsio -- * -B 100 - diff --git a/parm/transfer_gfs_8.list b/parm/transfer_gfs_8.list deleted file mode 100644 index 1b8997bb1a..0000000000 --- a/parm/transfer_gfs_8.list +++ /dev/null @@ -1,94 +0,0 @@ -# This file specifies the directories to be tranatmfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the tranatmfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# tranatmferred. - -com/gfs/_ENVIR_/gfs._PDY_/ -+ /??/ -+ /??/gfs.t??z.atmf006.nemsio -+ /??/gfs.t??z.atmf013.nemsio -+ /??/gfs.t??z.atmf020.nemsio -+ /??/gfs.t??z.atmf027.nemsio -+ /??/gfs.t??z.atmf034.nemsio -+ /??/gfs.t??z.atmf041.nemsio -+ /??/gfs.t??z.atmf048.nemsio -+ /??/gfs.t??z.atmf055.nemsio -+ /??/gfs.t??z.atmf062.nemsio -+ /??/gfs.t??z.atmf069.nemsio -+ /??/gfs.t??z.atmf076.nemsio -+ /??/gfs.t??z.atmf083.nemsio -+ /??/gfs.t??z.atmf090.nemsio -+ /??/gfs.t??z.atmf097.nemsio -+ /??/gfs.t??z.atmf104.nemsio -+ /??/gfs.t??z.atmf111.nemsio -+ /??/gfs.t??z.atmf118.nemsio -+ /??/gfs.t??z.atmf135.nemsio -+ /??/gfs.t??z.atmf156.nemsio -+ /??/gfs.t??z.atmf177.nemsio -+ /??/gfs.t??z.atmf198.nemsio -+ /??/gfs.t??z.atmf219.nemsio -+ /??/gfs.t??z.atmf240.nemsio -+ /??/gfs.t??z.atmf261.nemsio -+ /??/gfs.t??z.atmf282.nemsio -+ /??/gfs.t??z.atmf303.nemsio -+ /??/gfs.t??z.atmf324.nemsio -+ /??/gfs.t??z.atmf345.nemsio -+ /??/gfs.t??z.atmf366.nemsio -- * -B 100 - - -com/gfs/_ENVIR_/gfs._PDYm1_/ -+ /??/ -+ /??/gfs.t??z.atmf006.nemsio -+ /??/gfs.t??z.atmf013.nemsio -+ /??/gfs.t??z.atmf020.nemsio -+ /??/gfs.t??z.atmf027.nemsio -+ /??/gfs.t??z.atmf034.nemsio -+ /??/gfs.t??z.atmf041.nemsio -+ /??/gfs.t??z.atmf048.nemsio -+ /??/gfs.t??z.atmf055.nemsio -+ /??/gfs.t??z.atmf062.nemsio -+ /??/gfs.t??z.atmf069.nemsio -+ /??/gfs.t??z.atmf076.nemsio -+ /??/gfs.t??z.atmf083.nemsio -+ /??/gfs.t??z.atmf090.nemsio -+ /??/gfs.t??z.atmf097.nemsio -+ /??/gfs.t??z.atmf104.nemsio -+ /??/gfs.t??z.atmf111.nemsio -+ /??/gfs.t??z.atmf118.nemsio -+ /??/gfs.t??z.atmf135.nemsio -+ /??/gfs.t??z.atmf156.nemsio -+ /??/gfs.t??z.atmf177.nemsio -+ /??/gfs.t??z.atmf198.nemsio -+ /??/gfs.t??z.atmf219.nemsio -+ /??/gfs.t??z.atmf240.nemsio -+ /??/gfs.t??z.atmf261.nemsio -+ /??/gfs.t??z.atmf282.nemsio -+ /??/gfs.t??z.atmf303.nemsio -+ /??/gfs.t??z.atmf324.nemsio -+ /??/gfs.t??z.atmf345.nemsio -+ /??/gfs.t??z.atmf366.nemsio -- * -B 100 - diff --git a/parm/transfer_rdhpcs_gdas.list b/parm/transfer_rdhpcs_gdas.list deleted file mode 100755 index 1576b126e7..0000000000 --- a/parm/transfer_rdhpcs_gdas.list +++ /dev/null @@ -1,69 +0,0 @@ -# This file specifies the directories to be transfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the transfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# W whole files, copy whole files rather than use delta-xfer algorithm (takes no arg) (v2.2.3+) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# transferred. - -com/gfs/_ENVIR_/gdas._PDYm1_/ _REMOTEPATH_/com/gfs/_ENVIR_/gdas._PDYm1_/ -+ /??/ -+ /??/gdas.t??z*tcvitals* -+ /??/gdas.*bufr* -+ /??/gdas.t??z.abias_pc -+ /??/gdas.t??z.abias_air -+ /??/gdas.t??z.abias -+ /??/gdas.t??z.sfcf*.nemsio -+ /??/gdas.t??z.engicegrb -+ /??/gdas.t??z.atmf0*.nemsio -+ /??/gdas.t??z.radstat -+ /??/gdas.t??z.atmanl.nemsio -+ /??/gdas.t??z.atmges.nemsio -+ /??/gdas.t??z.atmgm3.nemsio -+ /??/gdas.t??z.atmgp3.nemsio -+ /??/gdas.t??z.sfcanl.nemsio -+ /??/gdas.t??z.sstgrb -- * -E -# This directory is a good candidate for compression -#Z -com/gfs/_ENVIR_/gdas._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/gdas._PDY_/ -+ /??/ -+ /??/gdas.t??z*tcvitals* -+ /??/gdas.*bufr* -+ /??/gdas.t??z.abias_pc -+ /??/gdas.t??z.abias_air -+ /??/gdas.t??z.abias -+ /??/gdas.t??z.sfcf*.nemsio -+ /??/gdas.t??z.engicegrb -+ /??/gdas.t??z.atmf0*.nemsio -+ /??/gdas.t??z.radstat -+ /??/gdas.t??z.atmanl.nemsio -+ /??/gdas.t??z.atmges.nemsio -+ /??/gdas.t??z.atmgm3.nemsio -+ /??/gdas.t??z.atmgp3.nemsio -+ /??/gdas.t??z.sfcanl.nemsio -+ /??/gdas.t??z.sstgrb -- * -E -# This directory is a good candidate for compression -#Z - diff --git a/parm/transfer_rdhpcs_gfs.list b/parm/transfer_rdhpcs_gfs.list deleted file mode 100755 index cbe0436489..0000000000 --- a/parm/transfer_rdhpcs_gfs.list +++ /dev/null @@ -1,69 +0,0 @@ -# This file specifies the directories to be transfered and, optionally, the files within -# those directories to include or exclude. If one directory is specified per line, it -# will be used as both the source and destination. If two directories are specified per -# line, separated by one or more spaces, the first will be used as the source and the -# second the destination. Directories that begin with "com/" will be resolved using -# the compath.py utility. Rules may be placed below each directory or directory pair -# and must begin with one of the following characters: -# - exclude, specifies an exclude pattern -# + include, specifies an include pattern -# . merge, specifies a merge-file to read for more rules -# : dir-merge, specifies a per-directory merge-file -# H hide, specifies a pattern for hiding files from the transfer -# S show, files that match the pattern are not hidden -# P protect, specifies a pattern for protecting files from deletion -# R risk, files that match the pattern are not protected -# ! clear, clears the current include/exclude list (takes no arg) -# B bytes, relative size of the path in relation to the other paths in the list -# D delete, delete extraneous files from destination directories (takes no arg) -# E encrypt, enables data encryption [two cores should be allocated] (takes no arg) -# T two-way syncronization will update both sides with latest changes (takes no arg) -# Z compress data as it is sent, accepts optional compression level argument (1-9) -# Rules higher in the list take precedence over lower ones. By default, all files in a -# directory are included, so if no exclude patterns match that file, it will be -# transferred. - -com/gfs/_ENVIR_/gfs._PDY_/ _REMOTEPATH_/com/gfs/_ENVIR_/gfs._PDY_/ -+ /??/ -+ /??/gfs.t??z.*bufr* -+ /??/gfs.t??z.sstgrb -+ /??/gfs.t??z.engicegrb -+ /??/gfs.t??z.*tcvitals*tm00 -+ /??/gfs.t??z.atmanl.nemsio -+ /??/gfs.t??z.sfcanl.nemsio -+ /??/gfs.t??z.master.grb2f* -+ /??/gfs.t??z.pgrb2.0p25.f* -+ /??/gfs.t??z.sfluxgrbf* -+ /??/gfs.t??z.gtg.grb2f* -+ /??/gfs.t??z.gcip.f00.grib2 -+ /??/gfs.t??z.atmf000.nemsio -+ /??/gfs.t??z.atmf003.nemsio -+ /??/gfs.t??z.atmf006.nemsio -+ /??/gfs.t??z.atmf009.nemsio -+ /??/gfs.t??z.atmf012.nemsio -+ /??/gfs.t??z.atmf015.nemsio -+ /??/gfs.t??z.atmf018.nemsio -+ /??/gfs.t??z.atmf021.nemsio -+ /??/gfs.t??z.atmf024.nemsio -+ /??/gfs.t??z.atmf027.nemsio -+ /??/gfs.t??z.atmf030.nemsio -+ /??/gfs.t??z.atmf033.nemsio -+ /??/gfs.t??z.atmf036.nemsio -+ /??/gfs.t??z.atmf039.nemsio -+ /??/gfs.t??z.atmf042.nemsio -+ /??/gfs.t??z.atmf045.nemsio -+ /??/gfs.t??z.atmf048.nemsio -+ /??/gfs.t??z.sfcf024.nemsio -+ /??/gfs.t??z.sfcf027.nemsio -+ /??/gfs.t??z.sfcf030.nemsio -+ /??/gfs.t??z.sfcf033.nemsio -+ /??/gfs.t??z.sfcf036.nemsio -+ /??/gfs.t??z.sfcf039.nemsio -+ /??/gfs.t??z.sfcf042.nemsio -+ /??/gfs.t??z.sfcf045.nemsio -+ /??/gfs.t??z.sfcf048.nemsio -- * -E -# This directory is a good candidate for compression -#Z - diff --git a/parm/ufs/fix/gfs/atmos.fixed_files.yaml b/parm/ufs/fix/gfs/atmos.fixed_files.yaml new file mode 100644 index 0000000000..a4e9958e45 --- /dev/null +++ b/parm/ufs/fix/gfs/atmos.fixed_files.yaml @@ -0,0 +1,85 @@ +copy: + # Atmosphere mosaic file linked as the grid_spec file (atm only) + - [$(FIX_orog)/$(atm_res)/$(atm_res)_mosaic.nc, $(DATA)/INPUT/grid_spec.nc] + + # Atmosphere grid tile files + - [$(FIX_orog)/$(atm_res)/$(atm_res)_grid.tile1.nc, $(DATA)/INPUT/] + - [$(FIX_orog)/$(atm_res)/$(atm_res)_grid.tile2.nc, $(DATA)/INPUT/] + - [$(FIX_orog)/$(atm_res)/$(atm_res)_grid.tile3.nc, $(DATA)/INPUT/] + - [$(FIX_orog)/$(atm_res)/$(atm_res)_grid.tile4.nc, $(DATA)/INPUT/] + - [$(FIX_orog)/$(atm_res)/$(atm_res)_grid.tile5.nc, $(DATA)/INPUT/] + - [$(FIX_orog)/$(atm_res)/$(atm_res)_grid.tile6.nc, $(DATA)/INPUT/] + + # oro_data_ls and oro_data_ss files from FIX_ugwd + - [$(FIX_ugwd)/$(atm_res)/$(atm_res)_oro_data_ls.tile1.nc, $(DATA)/INPUT/oro_data_ls.tile1.nc] + - [$(FIX_ugwd)/$(atm_res)/$(atm_res)_oro_data_ls.tile2.nc, $(DATA)/INPUT/oro_data_ls.tile2.nc] + - [$(FIX_ugwd)/$(atm_res)/$(atm_res)_oro_data_ls.tile3.nc, $(DATA)/INPUT/oro_data_ls.tile3.nc] + - [$(FIX_ugwd)/$(atm_res)/$(atm_res)_oro_data_ls.tile4.nc, $(DATA)/INPUT/oro_data_ls.tile4.nc] + - [$(FIX_ugwd)/$(atm_res)/$(atm_res)_oro_data_ls.tile5.nc, $(DATA)/INPUT/oro_data_ls.tile5.nc] + - [$(FIX_ugwd)/$(atm_res)/$(atm_res)_oro_data_ls.tile6.nc, $(DATA)/INPUT/oro_data_ls.tile6.nc] + - [$(FIX_ugwd)/$(atm_res)/$(atm_res)_oro_data_ss.tile1.nc, $(DATA)/INPUT/oro_data_ss.tile1.nc] + - [$(FIX_ugwd)/$(atm_res)/$(atm_res)_oro_data_ss.tile2.nc, $(DATA)/INPUT/oro_data_ss.tile2.nc] + - [$(FIX_ugwd)/$(atm_res)/$(atm_res)_oro_data_ss.tile3.nc, $(DATA)/INPUT/oro_data_ss.tile3.nc] + - [$(FIX_ugwd)/$(atm_res)/$(atm_res)_oro_data_ss.tile4.nc, $(DATA)/INPUT/oro_data_ss.tile4.nc] + - [$(FIX_ugwd)/$(atm_res)/$(atm_res)_oro_data_ss.tile5.nc, $(DATA)/INPUT/oro_data_ss.tile5.nc] + - [$(FIX_ugwd)/$(atm_res)/$(atm_res)_oro_data_ss.tile6.nc, $(DATA)/INPUT/oro_data_ss.tile6.nc] + + # GWD?? + - [$(FIX_ugwd)/ugwp_limb_tau.nc, $(DATA)/ugwp_limb_tau.nc] + + # CO2 climatology + - [$(FIX_am)/co2monthlycyc.txt, $(DATA)/co2monthlycyc.txt] + - [$(FIX_am)/global_co2historicaldata_glob.txt, $(DATA)/co2historicaldata_glob.txt] + - [$(FIX_am)/fix_co2_proj/global_co2historicaldata_2009.txt, $(DATA)/co2historicaldata_2009.txt] + - [$(FIX_am)/fix_co2_proj/global_co2historicaldata_2010.txt, $(DATA)/co2historicaldata_2010.txt] + - [$(FIX_am)/fix_co2_proj/global_co2historicaldata_2011.txt, $(DATA)/co2historicaldata_2011.txt] + - [$(FIX_am)/fix_co2_proj/global_co2historicaldata_2012.txt, $(DATA)/co2historicaldata_2012.txt] + - [$(FIX_am)/fix_co2_proj/global_co2historicaldata_2013.txt, $(DATA)/co2historicaldata_2013.txt] + - [$(FIX_am)/fix_co2_proj/global_co2historicaldata_2014.txt, $(DATA)/co2historicaldata_2014.txt] + - [$(FIX_am)/fix_co2_proj/global_co2historicaldata_2015.txt, $(DATA)/co2historicaldata_2015.txt] + - [$(FIX_am)/fix_co2_proj/global_co2historicaldata_2016.txt, $(DATA)/co2historicaldata_2016.txt] + - [$(FIX_am)/fix_co2_proj/global_co2historicaldata_2017.txt, $(DATA)/co2historicaldata_2017.txt] + - [$(FIX_am)/fix_co2_proj/global_co2historicaldata_2018.txt, $(DATA)/co2historicaldata_2018.txt] + - [$(FIX_am)/fix_co2_proj/global_co2historicaldata_2019.txt, $(DATA)/co2historicaldata_2019.txt] + - [$(FIX_am)/fix_co2_proj/global_co2historicaldata_2020.txt, $(DATA)/co2historicaldata_2020.txt] + - [$(FIX_am)/fix_co2_proj/global_co2historicaldata_2021.txt, $(DATA)/co2historicaldata_2021.txt] + - [$(FIX_am)/fix_co2_proj/global_co2historicaldata_2022.txt, $(DATA)/co2historicaldata_2022.txt] + - [$(FIX_am)/fix_co2_proj/global_co2historicaldata_2023.txt, $(DATA)/co2historicaldata_2023.txt] + + # FIX_am files + - [$(FIX_am)/global_climaeropac_global.txt, $(DATA)/aerosol.dat] + - [$(FIX_am)/ozprdlos_2015_new_sbuvO3_tclm15_nuchem.f77, $(DATA)/global_o3prdlos.f77] + - [$(FIX_am)/global_h2o_pltc.f77, $(DATA)/global_h2oprdlos.f77] + - [$(FIX_am)/global_glacier.2x2.grb, $(DATA)/global_glacier.2x2.grb] + - [$(FIX_am)/global_maxice.2x2.grb, $(DATA)/global_maxice.2x2.grb] + - [$(FIX_am)/global_snoclim.1.875.grb, $(DATA)/global_snoclim.1.875.grb] + - [$(FIX_am)/global_slmask.t1534.3072.1536.grb, $(DATA)/global_slmask.t1534.3072.1536.grb] + - [$(FIX_am)/global_soilmgldas.statsgo.t1534.3072.1536.grb, $(DATA)/global_soilmgldas.statsgo.t1534.3072.1536.grb] + - [$(FIX_am)/global_solarconstant_noaa_an.txt, $(DATA)/solarconstant_noaa_an.txt] + - [$(FIX_am)/global_sfc_emissivity_idx.txt, $(DATA)/sfc_emissivity_idx.txt] + - [$(FIX_am)/RTGSST.1982.2012.monthly.clim.grb, $(DATA)/RTGSST.1982.2012.monthly.clim.grb] + - [$(FIX_am)/IMS-NIC.blended.ice.monthly.clim.grb, $(DATA)/IMS-NIC.blended.ice.monthly.clim.grb] + + # MERRA2 Aerosol Climatology + - [$(FIX_aer)/merra2.aerclim.2003-2014.m01.nc, $(DATA)/aeroclim.m01.nc] + - [$(FIX_aer)/merra2.aerclim.2003-2014.m02.nc, $(DATA)/aeroclim.m02.nc] + - [$(FIX_aer)/merra2.aerclim.2003-2014.m03.nc, $(DATA)/aeroclim.m03.nc] + - [$(FIX_aer)/merra2.aerclim.2003-2014.m04.nc, $(DATA)/aeroclim.m04.nc] + - [$(FIX_aer)/merra2.aerclim.2003-2014.m05.nc, $(DATA)/aeroclim.m05.nc] + - [$(FIX_aer)/merra2.aerclim.2003-2014.m06.nc, $(DATA)/aeroclim.m06.nc] + - [$(FIX_aer)/merra2.aerclim.2003-2014.m07.nc, $(DATA)/aeroclim.m07.nc] + - [$(FIX_aer)/merra2.aerclim.2003-2014.m08.nc, $(DATA)/aeroclim.m08.nc] + - [$(FIX_aer)/merra2.aerclim.2003-2014.m09.nc, $(DATA)/aeroclim.m09.nc] + - [$(FIX_aer)/merra2.aerclim.2003-2014.m10.nc, $(DATA)/aeroclim.m10.nc] + - [$(FIX_aer)/merra2.aerclim.2003-2014.m11.nc, $(DATA)/aeroclim.m11.nc] + - [$(FIX_aer)/merra2.aerclim.2003-2014.m12.nc, $(DATA)/aeroclim.m12.nc] + + # Optical depth + - [$(FIX_lut)/optics_BC.v1_3.dat, $(DATA)/optics_BC.dat] + - [$(FIX_lut)/optics_DU.v15_3.dat, $(DATA)/optics_DU.dat] + - [$(FIX_lut)/optics_OC.v1_3.dat, $(DATA)/optics_OC.dat] + - [$(FIX_lut)/optics_SS.v3_3.dat, $(DATA)/optics_SS.dat] + - [$(FIX_lut)/optics_SU.v1_3.dat, $(DATA)/optics_SU.dat] + + # fd_ufs.yaml file + - [$(HOMEgfs)/sorc/ufs_model.fd/tests/parm/fd_ufs.yaml, $(DATA)/] diff --git a/parm/ufs/fix/gfs/land.fixed_files.yaml b/parm/ufs/fix/gfs/land.fixed_files.yaml new file mode 100644 index 0000000000..d98d66df45 --- /dev/null +++ b/parm/ufs/fix/gfs/land.fixed_files.yaml @@ -0,0 +1,58 @@ +copy: + + # Files from FIX_orog/C??.mx??_frac/sfc + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).facsf.tile1.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).facsf.tile2.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).facsf.tile3.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).facsf.tile4.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).facsf.tile5.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).facsf.tile6.nc, $(DATA)/] + + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).maximum_snow_albedo.tile1.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).maximum_snow_albedo.tile2.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).maximum_snow_albedo.tile3.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).maximum_snow_albedo.tile4.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).maximum_snow_albedo.tile5.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).maximum_snow_albedo.tile6.nc, $(DATA)/] + + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).slope_type.tile1.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).slope_type.tile2.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).slope_type.tile3.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).slope_type.tile4.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).slope_type.tile5.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).slope_type.tile6.nc, $(DATA)/] + + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).snowfree_albedo.tile1.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).snowfree_albedo.tile2.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).snowfree_albedo.tile3.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).snowfree_albedo.tile4.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).snowfree_albedo.tile5.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).snowfree_albedo.tile6.nc, $(DATA)/] + + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).soil_type.tile1.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).soil_type.tile2.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).soil_type.tile3.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).soil_type.tile4.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).soil_type.tile5.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).soil_type.tile6.nc, $(DATA)/] + + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).substrate_temperature.tile1.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).substrate_temperature.tile2.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).substrate_temperature.tile3.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).substrate_temperature.tile4.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).substrate_temperature.tile5.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).substrate_temperature.tile6.nc, $(DATA)/] + + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).vegetation_greenness.tile1.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).vegetation_greenness.tile2.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).vegetation_greenness.tile3.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).vegetation_greenness.tile4.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).vegetation_greenness.tile5.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).vegetation_greenness.tile6.nc, $(DATA)/] + + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).vegetation_type.tile1.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).vegetation_type.tile2.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).vegetation_type.tile3.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).vegetation_type.tile4.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).vegetation_type.tile5.nc, $(DATA)/] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/sfc/$(atm_res).mx$(ocn_res).vegetation_type.tile6.nc, $(DATA)/] diff --git a/parm/ufs/fix/gfs/ocean.fixed_files.yaml b/parm/ufs/fix/gfs/ocean.fixed_files.yaml new file mode 100644 index 0000000000..801f070c49 --- /dev/null +++ b/parm/ufs/fix/gfs/ocean.fixed_files.yaml @@ -0,0 +1,10 @@ +copy: + + # Orography data tile files + # The following are for "frac_grid = .true." + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/oro_$(atm_res).mx$(ocn_res).tile1.nc, $(DATA)/INPUT/oro_data.tile1.nc] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/oro_$(atm_res).mx$(ocn_res).tile2.nc, $(DATA)/INPUT/oro_data.tile2.nc] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/oro_$(atm_res).mx$(ocn_res).tile3.nc, $(DATA)/INPUT/oro_data.tile3.nc] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/oro_$(atm_res).mx$(ocn_res).tile4.nc, $(DATA)/INPUT/oro_data.tile4.nc] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/oro_$(atm_res).mx$(ocn_res).tile5.nc, $(DATA)/INPUT/oro_data.tile5.nc] + - [$(FIX_orog)/$(atm_res).mx$(ocn_res)_frac/oro_$(atm_res).mx$(ocn_res).tile6.nc, $(DATA)/INPUT/oro_data.tile6.nc] diff --git a/parm/ufs/fv3/data_table b/parm/ufs/fv3/data_table new file mode 100644 index 0000000000..4ca9128415 --- /dev/null +++ b/parm/ufs/fv3/data_table @@ -0,0 +1 @@ +"OCN", "runoff", "runoff", "./INPUT/@[FRUNOFF]", "none" , 1.0 diff --git a/parm/ufs/fv3/diag_table b/parm/ufs/fv3/diag_table new file mode 100644 index 0000000000..29ecfefb3c --- /dev/null +++ b/parm/ufs/fv3/diag_table @@ -0,0 +1,302 @@ +"fv3_history", 0, "hours", 1, "hours", "time" +"fv3_history2d", 0, "hours", 1, "hours", "time" +"ocn%4yr%2mo%2dy%2hr", 6, "hours", 1, "hours", "time", 6, "hours", "1901 1 1 0 0 0" +"ocn_daily%4yr%2mo%2dy", 1, "days", 1, "days", "time", 1, "days", "1901 1 1 0 0 0" + +############## +# Ocean fields +############## +# static fields +"ocean_model", "geolon", "geolon", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "geolat", "geolat", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "geolon_c", "geolon_c", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "geolat_c", "geolat_c", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "geolon_u", "geolon_u", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "geolat_u", "geolat_u", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "geolon_v", "geolon_v", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "geolat_v", "geolat_v", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +# "ocean_model", "depth_ocean", "depth_ocean", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +# "ocean_model", "wet", "wet", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "wet_c", "wet_c", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "wet_u", "wet_u", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "wet_v", "wet_v", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "sin_rot", "sin_rot", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "cos_rot", "cos_rot", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + +# ocean output TSUV and others +"ocean_model", "SSH", "SSH", "ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model", "SST", "SST", "ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model", "SSS", "SSS", "ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model", "speed", "speed", "ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model", "SSU", "SSU", "ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model", "SSV", "SSV", "ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model", "frazil", "frazil", "ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model", "ePBL_h_ML", "ePBL", "ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model", "MLD_003", "MLD_003", "ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model", "MLD_0125", "MLD_0125", "ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model", "tob", "tob", "ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 + +# Z-Space Fields Provided for CMIP6 (CMOR Names): +"ocean_model_z", "uo", "uo", "ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model_z", "vo", "vo", "ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model_z", "so", "so", "ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 +"ocean_model_z", "temp", "temp", "ocn%4yr%2mo%2dy%2hr", "all", .true., "none", 2 + +# forcing +"ocean_model", "taux", "taux", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "tauy", "tauy", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "latent", "latent", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "sensible", "sensible", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "SW", "SW", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "LW", "LW", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "evap", "evap", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "lprec", "lprec", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "lrunoff", "lrunoff", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +# "ocean_model", "frunoff", "frunoff", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "fprec", "fprec", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "LwLatSens", "LwLatSens", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +"ocean_model", "Heat_PmE", "Heat_PmE", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + +# Daily fields +"ocean_model", "geolon", "geolon", "ocn_daily%4yr%2mo%2dy", "all", .false., "none", 2 +"ocean_model", "geolat", "geolat", "ocn_daily%4yr%2mo%2dy", "all", .false., "none", 2 +"ocean_model", "geolon_c", "geolon_c", "ocn_daily%4yr%2mo%2dy", "all", .false., "none", 2 +"ocean_model", "geolat_c", "geolat_c", "ocn_daily%4yr%2mo%2dy", "all", .false., "none", 2 +"ocean_model", "geolon_u", "geolon_u", "ocn_daily%4yr%2mo%2dy", "all", .false., "none", 2 +"ocean_model", "geolat_u", "geolat_u", "ocn_daily%4yr%2mo%2dy", "all", .false., "none", 2 +"ocean_model", "geolon_v", "geolon_v", "ocn_daily%4yr%2mo%2dy", "all", .false., "none", 2 +"ocean_model", "geolat_v", "geolat_v", "ocn_daily%4yr%2mo%2dy", "all", .false., "none", 2 +"ocean_model", "SST", "sst", "ocn_daily%4yr%2mo%2dy", "all", .true., "none", 2 +"ocean_model", "latent", "latent", "ocn_daily%4yr%2mo%2dy", "all", .true., "none", 2 +"ocean_model", "sensible", "sensible", "ocn_daily%4yr%2mo%2dy", "all", .true., "none", 2 +"ocean_model", "SW", "SW", "ocn_daily%4yr%2mo%2dy", "all", .true., "none", 2 +"ocean_model", "LW", "LW", "ocn_daily%4yr%2mo%2dy", "all", .true., "none", 2 +"ocean_model", "evap", "evap", "ocn_daily%4yr%2mo%2dy", "all", .true., "none", 2 +"ocean_model", "lprec", "lprec", "ocn_daily%4yr%2mo%2dy", "all", .true., "none", 2 +"ocean_model", "taux", "taux", "ocn_daily%4yr%2mo%2dy", "all", .true., "none", 2 +"ocean_model", "tauy", "tauy", "ocn_daily%4yr%2mo%2dy", "all", .true., "none", 2 + +################### +# Atmosphere fields +################### +"gfs_dyn", "ucomp", "ugrd", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "vcomp", "vgrd", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "sphum", "spfh", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "temp", "tmp", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "liq_wat", "clwmr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "ice_wat", "icmr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "snowwat", "snmr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "rainwat", "rwmr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "graupel", "grle", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "ice_nc", "nccice", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "rain_nc", "nconrd", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "o3mr", "o3mr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "cld_amt", "cld_amt", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "delp", "dpres", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "delz", "delz", "fv3_history", "all", .false., "none", 2 +#"gfs_dyn", "pfhy", "preshy", "fv3_history", "all", .false., "none", 2 +#"gfs_dyn", "pfnh", "presnh", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "w", "dzdt", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "ps", "pressfc", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "hs", "hgtsfc", "fv3_history", "all", .false., "none", 2 + +"gfs_phys", "cldfra", "cldfra", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "frzr", "frzr", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "frzrb", "frzrb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "frozr", "frozr", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "frozrb", "frozrb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tsnowp", "tsnowp", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tsnowpb", "tsnowpb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "rhonewsn", "rhonewsn", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ALBDO_ave", "albdo_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cnvprcp_ave", "cprat_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cnvprcpb_ave", "cpratb_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "totprcp_ave", "prate_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "totprcpb_ave", "prateb_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DLWRF", "dlwrf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DLWRFI", "dlwrf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ULWRF", "ulwrf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ULWRFI", "ulwrf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DSWRF", "dswrf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DSWRFI", "dswrf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "USWRF", "uswrf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "USWRFI", "uswrf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DSWRFtoa", "dswrf_avetoa", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "USWRFtoa", "uswrf_avetoa", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ULWRFtoa", "ulwrf_avetoa", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "gflux_ave", "gflux_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "hpbl", "hpbl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "lhtfl_ave", "lhtfl_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "shtfl_ave", "shtfl_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "pwat", "pwat", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "soilm", "soilm", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_aveclm", "tcdc_aveclm", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_avebndcl", "tcdc_avebndcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_avelcl", "tcdc_avelcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_avemcl", "tcdc_avemcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_avehcl", "tcdc_avehcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDCcnvcl", "tcdccnvcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avelct", "pres_avelct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avelcb", "pres_avelcb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avemct", "pres_avemct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avemcb", "pres_avemcb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avehct", "pres_avehct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avehcb", "pres_avehcb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PREScnvclt", "prescnvclt", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PREScnvclb", "prescnvclb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TEMP_avehct", "tmp_avehct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TEMP_avemct", "tmp_avemct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TEMP_avelct", "tmp_avelct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "u-gwd_ave", "u-gwd_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "v-gwd_ave", "v-gwd_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "dusfc", "uflx_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "dvsfc", "vflx_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "acond", "acond", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cduvb_ave", "cduvb_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cpofp", "cpofp", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "duvb_ave", "duvb_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csdlf_ave", "csdlf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csusf_ave", "csusf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csusf_avetoa", "csusftoa", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csdsf_ave", "csdsf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csulf_ave", "csulf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csulf_avetoa", "csulftoa", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cwork_ave", "cwork_aveclm", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "evbs_ave", "evbs_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "evcw_ave", "evcw_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "fldcp", "fldcp", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "hgt_hyblev1", "hgt_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "spfh_hyblev1", "spfh_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ugrd_hyblev1", "ugrd_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "vgrd_hyblev1", "vgrd_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tmp_hyblev1", "tmp_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "gfluxi", "gflux", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "lhtfl", "lhtfl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "shtfl", "shtfl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "pevpr", "pevpr", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "pevpr_ave", "pevpr_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "sbsno_ave", "sbsno_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "sfexc", "sfexc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "snohf", "snohf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "snowc_ave", "snowc_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "spfhmax2m", "spfhmax_max2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "spfhmin2m", "spfhmin_min2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tmpmax2m", "tmax_max2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tmpmin2m", "tmin_min2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ssrun_acc", "ssrun_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "sunsd_acc", "sunsd_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "watr_acc", "watr_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "wilt", "wilt", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "vbdsf_ave", "vbdsf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "vddsf_ave", "vddsf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "nbdsf_ave", "nbdsf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "nddsf_ave", "nddsf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "trans_ave", "trans_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "psurf", "pressfc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "u10m", "ugrd10m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "v10m", "vgrd10m", "fv3_history2d", "all", .false., "none", 2 + +"gfs_phys", "pahi", "pahi", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "pah_ave", "pah_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ecan_acc", "ecan_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "etran_acc", "etran_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "edir_acc", "edir_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "wa_acc", "wa_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "lfrac", "lfrac", "fv3_history2d", "all", .false., "none", 2 + +"gfs_sfc", "crain", "crain", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tprcp", "tprcp", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "rainc", "cnvprcp", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "hgtsfc", "orog", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "weasd", "weasd", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "f10m", "f10m", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "q2m", "spfh2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "t2m", "tmp2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tsfc", "tmpsfc", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "vtype", "vtype", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "stype", "sotyp", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slmsksfc", "land", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "vfracsfc", "veg", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "zorlsfc", "sfcr", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "uustar", "fricv", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilt1", "soilt1" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilt2", "soilt2" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilt3", "soilt3" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilt4", "soilt4" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilw1", "soilw1" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilw2", "soilw2" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilw3", "soilw3" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilw4", "soilw4" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slc_1", "soill1", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slc_2", "soill2", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slc_3", "soill3", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slc_4", "soill4", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slope", "sltyp", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "alnsf", "alnsf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "alnwf", "alnwf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "alvsf", "alvsf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "alvwf", "alvwf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "canopy", "cnwat", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "facsf", "facsf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "facwf", "facwf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "ffhh", "ffhh", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "ffmm", "ffmm", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "fice", "icec", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "hice", "icetk", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "snoalb", "snoalb", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "shdmax", "shdmax", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "shdmin", "shdmin", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "snowd", "snod", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tg3", "tg3", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tisfc", "tisfc", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tref", "tref", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "z_c", "zc", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "c_0", "c0", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "c_d", "cd", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "w_0", "w0", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "w_d", "wd", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xt", "xt", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xz", "xz", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "dt_cool", "dtcool", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xs", "xs", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xu", "xu", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xv", "xv", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xtts", "xtts", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xzts", "xzts", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "d_conv", "dconv", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "qrain", "qrain", "fv3_history2d", "all", .false., "none", 2 + + +#============================================================================================= +# +#====> This file can be used with diag_manager/v2.0a (or higher) <==== +# +# +# FORMATS FOR FILE ENTRIES (not all input values are used) +# ------------------------ +# +#"file_name", output_freq, "output_units", format, "time_units", "long_name", +# +# +#output_freq: > 0 output frequency in "output_units" +# = 0 output frequency every time step +# =-1 output frequency at end of run +# +#output_units = units used for output frequency +# (years, months, days, minutes, hours, seconds) +# +#time_units = units used to label the time axis +# (days, minutes, hours, seconds) +# +# +# FORMAT FOR FIELD ENTRIES (not all input values are used) +# ------------------------ +# +#"module_name", "field_name", "output_name", "file_name" "time_sampling", time_avg, "other_opts", packing +# +#time_avg = .true. or .false. +# +#packing = 1 double precision +# = 2 float +# = 4 packed 16-bit integers +# = 8 packed 1-byte (not tested?) diff --git a/parm/ufs/fv3/diag_table.aero b/parm/ufs/fv3/diag_table.aero new file mode 100644 index 0000000000..6f96b462f1 --- /dev/null +++ b/parm/ufs/fv3/diag_table.aero @@ -0,0 +1,28 @@ +### +# chemical tracers advected by FV3 +### +"gfs_dyn", "so2", "so2", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "so4", "so4", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "dms", "dms", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "msa", "msa", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "bc1", "bc1", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "bc2", "bc2", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "oc1", "oc1", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "oc2", "oc2", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "dust1", "dust1", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "dust2", "dust2", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "dust3", "dust3", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "dust4", "dust4", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "dust5", "dust5", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "seas1", "seas1", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "seas2", "seas2", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "seas3", "seas3", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "seas4", "seas4", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "seas5", "seas5", "fv3_history", "all", .false., "none", 2 +# "gfs_dyn", "nh3", "nh3", "fv3_history", "all", .false., "none", 2 +# "gfs_dyn", "nh4a", "nh4a", "fv3_history", "all", .false., "none", 2 +# "gfs_dyn", "no3an1", "no3an1", "fv3_history", "all", .false., "none", 2 +# "gfs_dyn", "no3an2", "no3an2", "fv3_history", "all", .false., "none", 2 +# "gfs_dyn", "no3an3", "no3an3", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "pm25", "pm25", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "pm10", "pm10", "fv3_history", "all", .false., "none", 2 diff --git a/parm/ufs/fv3/diag_table_aod b/parm/ufs/fv3/diag_table_aod new file mode 100644 index 0000000000..0de51b66d8 --- /dev/null +++ b/parm/ufs/fv3/diag_table_aod @@ -0,0 +1,6 @@ +"gfs_phys", "AOD_550", "aod550", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DU_AOD_550", "du_aod550", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "SU_AOD_550", "su_aod550", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "BC_AOD_550", "bc_aod550", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "OC_AOD_550", "oc_aod550", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "SS_AOD_550", "ss_aod550", "fv3_history2d", "all", .false., "none", 2 \ No newline at end of file diff --git a/parm/parm_fv3diag/diag_table_da b/parm/ufs/fv3/diag_table_da similarity index 92% rename from parm/parm_fv3diag/diag_table_da rename to parm/ufs/fv3/diag_table_da index 57c106531e..40824caee9 100644 --- a/parm/parm_fv3diag/diag_table_da +++ b/parm/ufs/fv3/diag_table_da @@ -1,5 +1,16 @@ "fv3_history", 0, "hours", 1, "hours", "time" "fv3_history2d", 0, "hours", 1, "hours", "time" +"ocn_da%4yr%2mo%2dy%2hr", 1, "hours", 1, "hours", "time", 1, "hours" + +"ocean_model", "geolon", "geolon", "ocn_da%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "geolat", "geolat", "ocn_da%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "SSH", "ave_ssh", "ocn_da%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model", "MLD_0125", "MLD", "ocn_da%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model_z", "u", "u", "ocn_da%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model_z", "v", "v", "ocn_da%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model_z", "h", "h", "ocn_da%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model_z", "salt", "Salt", "ocn_da%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +"ocean_model_z", "temp", "Temp", "ocn_da%4yr%2mo%2dy%2hr", "all", .false., "none", 2 "gfs_dyn", "ucomp", "ugrd", "fv3_history", "all", .false., "none", 2 "gfs_dyn", "vcomp", "vgrd", "fv3_history", "all", .false., "none", 2 @@ -10,8 +21,8 @@ "gfs_dyn", "snowwat", "snmr", "fv3_history", "all", .false., "none", 2 "gfs_dyn", "rainwat", "rwmr", "fv3_history", "all", .false., "none", 2 "gfs_dyn", "graupel", "grle", "fv3_history", "all", .false., "none", 2 -#"gfs_dyn", "ice_nc", "nccice", "fv3_history", "all", .false., "none", 2 -#"gfs_dyn", "rain_nc", "nconrd", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "ice_nc", "nccice", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "rain_nc", "nconrd", "fv3_history", "all", .false., "none", 2 "gfs_dyn", "o3mr", "o3mr", "fv3_history", "all", .false., "none", 2 #"gfs_dyn", "cld_amt", "cld_amt", "fv3_history", "all", .false., "none", 2 "gfs_dyn", "delp", "dpres", "fv3_history", "all", .false., "none", 2 @@ -22,6 +33,7 @@ "gfs_dyn", "ps", "pressfc", "fv3_history", "all", .false., "none", 2 "gfs_dyn", "hs", "hgtsfc", "fv3_history", "all", .false., "none", 2 +"gfs_phys", "cldfra", "cldfra", "fv3_history2d", "all", .false., "none", 2 "gfs_phys", "ALBDO_ave", "albdo_ave", "fv3_history2d", "all", .false., "none", 2 "gfs_phys", "cnvprcp_ave", "cprat_ave", "fv3_history2d", "all", .false., "none", 2 "gfs_phys", "cnvprcpb_ave", "cpratb_ave", "fv3_history2d", "all", .false., "none", 2 @@ -42,7 +54,7 @@ "gfs_phys", "hpbl", "hpbl", "fv3_history2d", "all", .false., "none", 2 "gfs_phys", "lhtfl_ave", "lhtfl_ave", "fv3_history2d", "all", .false., "none", 2 "gfs_phys", "shtfl_ave", "shtfl_ave", "fv3_history2d", "all", .false., "none", 2 -"gfs_phys", "pwat", "pwatclm", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "pwat", "pwat", "fv3_history2d", "all", .false., "none", 2 "gfs_phys", "soilm", "soilm", "fv3_history2d", "all", .false., "none", 2 "gfs_phys", "TCDC_aveclm", "tcdc_aveclm", "fv3_history2d", "all", .false., "none", 2 "gfs_phys", "TCDC_avebndcl", "tcdc_avebndcl", "fv3_history2d", "all", .false., "none", 2 diff --git a/parm/parm_fv3diag/diag_table_da_orig b/parm/ufs/fv3/diag_table_da_orig similarity index 100% rename from parm/parm_fv3diag/diag_table_da_orig rename to parm/ufs/fv3/diag_table_da_orig diff --git a/parm/parm_fv3diag/field_table b/parm/ufs/fv3/field_table similarity index 100% rename from parm/parm_fv3diag/field_table rename to parm/ufs/fv3/field_table diff --git a/parm/ufs/fv3/field_table.aero b/parm/ufs/fv3/field_table.aero new file mode 100644 index 0000000000..385192803f --- /dev/null +++ b/parm/ufs/fv3/field_table.aero @@ -0,0 +1,127 @@ +# prognostic aerosols + "TRACER", "atmos_mod", "so2" + "longname", "so2 mixing ratio" + "units", "ppm" + "tracer_usage", "chemistry" + "profile_type", "fixed", "surface_value=0.0" / + "TRACER", "atmos_mod", "so4" + "longname", "sulfate mixing ratio" + "units", "ug/kg" + "tracer_usage", "chemistry" + "profile_type", "fixed", "surface_value=0.0" / + "TRACER", "atmos_mod", "dms" + "longname", "DMS mixing ratio" + "units", "ppm" + "tracer_usage", "chemistry" + "profile_type", "fixed", "surface_value=0.0" / + "TRACER", "atmos_mod", "msa" + "longname", "msa mixing ratio" + "units", "ppm" + "tracer_usage", "chemistry" + "profile_type", "fixed", "surface_value=0.0" / + "TRACER", "atmos_mod", "bc1" + "longname", "hydrophobic black carbon mixing ratio" + "units", "ug/kg" + "tracer_usage", "chemistry" + "profile_type", "fixed", "surface_value=0.0" / + "TRACER", "atmos_mod", "bc2" + "longname", "hydrophillic black carbon mixing ratio" + "units", "ug/kg" + "tracer_usage", "chemistry" + "profile_type", "fixed", "surface_value=0.0" / + "TRACER", "atmos_mod", "oc1" + "longname", "hydrophobic organic carbon mixing ratio" + "units", "ug/kg" + "tracer_usage", "chemistry" + "profile_type", "fixed", "surface_value=0.0" / + "TRACER", "atmos_mod", "oc2" + "longname", "hydrophillic organic carbon mixing ratio" + "units", "ug/kg" + "tracer_usage", "chemistry" + "profile_type", "fixed", "surface_value=0.0" / + "TRACER", "atmos_mod", "dust1" + "longname", "fine dust1 mixing ratio" + "units", "ug/kg" + "tracer_usage", "chemistry" + "profile_type", "fixed", "surface_value=0.0" / + "TRACER", "atmos_mod", "dust2" + "longname", "fine dust2 mixing ratio" + "units", "ug/kg" + "tracer_usage", "chemistry" + "profile_type", "fixed", "surface_value=0.0" / + "TRACER", "atmos_mod", "dust3" + "longname", "coarse dust3 mixing ratio" + "units", "ug/kg" + "tracer_usage", "chemistry" + "profile_type", "fixed", "surface_value=0.0" / + "TRACER", "atmos_mod", "dust4" + "longname", "coarse dust4 mixing ratio" + "units", "ug/kg" + "tracer_usage", "chemistry" + "profile_type", "fixed", "surface_value=0.0" / + "TRACER", "atmos_mod", "dust5" + "longname", "coarse dust5 mixing ratio" + "units", "ug/kg" + "tracer_usage", "chemistry" + "profile_type", "fixed", "surface_value=0.0" / + "TRACER", "atmos_mod", "seas1" + "longname", "seasalt1 mixing ratio" + "units", "ug/kg" + "tracer_usage", "chemistry" + "profile_type", "fixed", "surface_value=0.0" / + "TRACER", "atmos_mod", "seas2" + "longname", "seasalt2 mixing ratio" + "units", "ug/kg" + "tracer_usage", "chemistry" + "profile_type", "fixed", "surface_value=0.0" / + "TRACER", "atmos_mod", "seas3" + "longname", "seasalt3 mixing ratio" + "units", "ug/kg" + "tracer_usage", "chemistry" + "profile_type", "fixed", "surface_value=0.0" / + "TRACER", "atmos_mod", "seas4" + "longname", "seasalt4 mixing ratio" + "units", "ug/kg" + "tracer_usage", "chemistry" + "profile_type", "fixed", "surface_value=0.0" / + "TRACER", "atmos_mod", "seas5" + "longname", "seasalt5 mixing ratio" + "units", "ug/kg" + "tracer_usage", "chemistry" + "profile_type", "fixed", "surface_value=0.0" / +# "TRACER", "atmos_mod", "nh3" +# "longname", "primary NH3 mixing ratio" +# "units", "ug/kg" +# "tracer_usage", "chemistry" +# "profile_type", "fixed", "surface_value=0.0" / +# "TRACER", "atmos_mod", "nh4a" +# "longname", "primary NH4a mixing ratio" +# "units", "ug/kg" +# "tracer_usage", "chemistry" +# "profile_type", "fixed", "surface_value=0.0" / +# "TRACER", "atmos_mod", "no3an1" +# "longname", "primary NO3an1 mixing ratio" +# "units", "ug/kg" +# "tracer_usage", "chemistry" +# "profile_type", "fixed", "surface_value=0.0" / +# "TRACER", "atmos_mod", "no3an2" +# "longname", "primary NO3an2 mixing ratio" +# "units", "ug/kg" +# "tracer_usage", "chemistry" +# "profile_type", "fixed", "surface_value=0.0" / +# "TRACER", "atmos_mod", "no3an3" +# "longname", "primary NO3an3 mixing ratio" +# "units", "ug/kg" +# "tracer_usage", "chemistry" +# "profile_type", "fixed", "surface_value=0.0" / +# diagnostic PM tracers + "TRACER", "atmos_mod", "pm25" + "longname", "primary PM25 mixing ratio" + "units", "ug/m3" + "tracer_usage", "chemistry", "type=diagnostic" + "profile_type", "fixed", "surface_value=0.0" / + "TRACER", "atmos_mod", "pm10" + "longname", "primary PM10 mixing ratio" + "units", "ug/m3" + "tracer_usage", "chemistry", "type=diagnostic" + "profile_type", "fixed", "surface_value=0.0" / diff --git a/parm/parm_fv3diag/field_table_gfdl b/parm/ufs/fv3/field_table_gfdl similarity index 100% rename from parm/parm_fv3diag/field_table_gfdl rename to parm/ufs/fv3/field_table_gfdl diff --git a/parm/ufs/fv3/field_table_gfdl_progsigma b/parm/ufs/fv3/field_table_gfdl_progsigma new file mode 100644 index 0000000000..f7668455da --- /dev/null +++ b/parm/ufs/fv3/field_table_gfdl_progsigma @@ -0,0 +1,42 @@ +# added by FRE: sphum must be present in atmos +# specific humidity for moist runs + "TRACER", "atmos_mod", "sphum" + "longname", "specific humidity" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic cloud water mixing ratio + "TRACER", "atmos_mod", "liq_wat" + "longname", "cloud water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / + "TRACER", "atmos_mod", "rainwat" + "longname", "rain mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / + "TRACER", "atmos_mod", "ice_wat" + "longname", "cloud ice mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / + "TRACER", "atmos_mod", "snowwat" + "longname", "snow mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / + "TRACER", "atmos_mod", "graupel" + "longname", "graupel mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic ozone mixing ratio tracer + "TRACER", "atmos_mod", "o3mr" + "longname", "ozone mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognotsitc sigmab tracer + "TRACER", "atmos_mod", "sigmab" + "longname", "sigma fraction" + "units", "fraction" + "profile_type", "fixed", "surface_value=0.0" / +# non-prognostic cloud amount + "TRACER", "atmos_mod", "cld_amt" + "longname", "cloud amount" + "units", "1" + "profile_type", "fixed", "surface_value=1.e30" / diff --git a/parm/parm_fv3diag/field_table_gfdl_satmedmf b/parm/ufs/fv3/field_table_gfdl_satmedmf similarity index 100% rename from parm/parm_fv3diag/field_table_gfdl_satmedmf rename to parm/ufs/fv3/field_table_gfdl_satmedmf diff --git a/parm/ufs/fv3/field_table_gfdl_satmedmf_progsigma b/parm/ufs/fv3/field_table_gfdl_satmedmf_progsigma new file mode 100644 index 0000000000..edc5389839 --- /dev/null +++ b/parm/ufs/fv3/field_table_gfdl_satmedmf_progsigma @@ -0,0 +1,47 @@ +# added by FRE: sphum must be present in atmos +# specific humidity for moist runs + "TRACER", "atmos_mod", "sphum" + "longname", "specific humidity" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic cloud water mixing ratio + "TRACER", "atmos_mod", "liq_wat" + "longname", "cloud water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / + "TRACER", "atmos_mod", "rainwat" + "longname", "rain mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / + "TRACER", "atmos_mod", "ice_wat" + "longname", "cloud ice mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / + "TRACER", "atmos_mod", "snowwat" + "longname", "snow mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / + "TRACER", "atmos_mod", "graupel" + "longname", "graupel mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic ozone mixing ratio tracer + "TRACER", "atmos_mod", "o3mr" + "longname", "ozone mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic subgrid scale turbulent kinetic energy + "TRACER", "atmos_mod", "sgs_tke" + "longname", "subgrid scale turbulent kinetic energy" + "units", "m2/s2" + "profile_type", "fixed", "surface_value=0.0" / +# prognotsitc sigmab tracer + "TRACER", "atmos_mod", "sigmab" + "longname", "sigma fraction" + "units", "fraction" + "profile_type", "fixed", "surface_value=0.0" / +# non-prognostic cloud amount + "TRACER", "atmos_mod", "cld_amt" + "longname", "cloud amount" + "units", "1" + "profile_type", "fixed", "surface_value=1.e30" / diff --git a/parm/parm_fv3diag/field_table_thompson b/parm/ufs/fv3/field_table_thompson similarity index 100% rename from parm/parm_fv3diag/field_table_thompson rename to parm/ufs/fv3/field_table_thompson diff --git a/parm/ufs/fv3/field_table_thompson_aero_tke b/parm/ufs/fv3/field_table_thompson_aero_tke new file mode 100644 index 0000000000..e86fdad740 --- /dev/null +++ b/parm/ufs/fv3/field_table_thompson_aero_tke @@ -0,0 +1,65 @@ +# added by FRE: sphum must be present in atmos +# specific humidity for moist runs + "TRACER", "atmos_mod", "sphum" + "longname", "specific humidity" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=3.e-6" / +# prognostic cloud water mixing ratio + "TRACER", "atmos_mod", "liq_wat" + "longname", "cloud water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic ice water mixing ratio + "TRACER", "atmos_mod", "ice_wat" + "longname", "cloud ice mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic rain water mixing ratio + "TRACER", "atmos_mod", "rainwat" + "longname", "rain water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic snow water mixing ratio + "TRACER", "atmos_mod", "snowwat" + "longname", "snow water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic Grau water mixing ratio + "TRACER", "atmos_mod", "graupel" + "longname", "graupel mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic cloud water number concentration + "TRACER", "atmos_mod", "water_nc" + "longname", "cloud liquid water number concentration" + "units", "/kg" + "profile_type", "fixed", "surface_value=0.0" / +# prognostic cloud ice number concentration + "TRACER", "atmos_mod", "ice_nc" + "longname", "cloud ice water number concentration" + "units", "/kg" + "profile_type", "fixed", "surface_value=0.0" / +# prognostic rain number concentration + "TRACER", "atmos_mod", "rain_nc" + "longname", "rain number concentration" + "units", "/kg" + "profile_type", "fixed", "surface_value=0.0" / +# prognostic ozone mixing ratio tracer + "TRACER", "atmos_mod", "o3mr" + "longname", "ozone mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# water- and ice-friendly aerosols (Thompson) + "TRACER", "atmos_mod", "liq_aero" + "longname", "water-friendly aerosol number concentration" + "units", "/kg" + "profile_type", "fixed", "surface_value=0.0" / + "TRACER", "atmos_mod", "ice_aero" + "longname", "ice-friendly aerosol number concentration" + "units", "/kg" + "profile_type", "fixed", "surface_value=0.0" / +# prognostic subgrid scale turbulent kinetic energy + "TRACER", "atmos_mod", "sgs_tke" + "longname", "subgrid scale turbulent kinetic energy" + "units", "m2/s2" + "profile_type", "fixed", "surface_value=0.0" / diff --git a/parm/ufs/fv3/field_table_thompson_noaero_tke b/parm/ufs/fv3/field_table_thompson_noaero_tke new file mode 100644 index 0000000000..bc96278faa --- /dev/null +++ b/parm/ufs/fv3/field_table_thompson_noaero_tke @@ -0,0 +1,65 @@ +# added by FRE: sphum must be present in atmos +# specific humidity for moist runs + "TRACER", "atmos_mod", "sphum" + "longname", "specific humidity" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=3.e-6" / +# prognostic cloud water mixing ratio + "TRACER", "atmos_mod", "liq_wat" + "longname", "cloud water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic ice water mixing ratio + "TRACER", "atmos_mod", "ice_wat" + "longname", "cloud ice mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic rain water mixing ratio + "TRACER", "atmos_mod", "rainwat" + "longname", "rain water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic snow water mixing ratio + "TRACER", "atmos_mod", "snowwat" + "longname", "snow water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic Grau water mixing ratio + "TRACER", "atmos_mod", "graupel" + "longname", "graupel mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic cloud water number concentration - not for non-aerosol runs +# "TRACER", "atmos_mod", "water_nc" +# "longname", "cloud liquid water number concentration" +# "units", "/kg" +# "profile_type", "fixed", "surface_value=0.0" / +# prognostic cloud ice number concentration + "TRACER", "atmos_mod", "ice_nc" + "longname", "cloud ice water number concentration" + "units", "/kg" + "profile_type", "fixed", "surface_value=0.0" / +# prognostic rain number concentration + "TRACER", "atmos_mod", "rain_nc" + "longname", "rain number concentration" + "units", "/kg" + "profile_type", "fixed", "surface_value=0.0" / +# prognostic ozone mixing ratio tracer + "TRACER", "atmos_mod", "o3mr" + "longname", "ozone mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# water- and ice-friendly aerosols (Thompson) - not for non-aerosol runs +# "TRACER", "atmos_mod", "liq_aero" +# "longname", "water-friendly aerosol number concentration" +# "units", "/kg" +# "profile_type", "fixed", "surface_value=0.0" / +# "TRACER", "atmos_mod", "ice_aero" +# "longname", "ice-friendly aerosol number concentration" +# "units", "/kg" +# "profile_type", "fixed", "surface_value=0.0" / +# prognostic subgrid scale turbulent kinetic energy + "TRACER", "atmos_mod", "sgs_tke" + "longname", "subgrid scale turbulent kinetic energy" + "units", "m2/s2" + "profile_type", "fixed", "surface_value=0.0" / diff --git a/parm/ufs/fv3/field_table_thompson_noaero_tke_progsigma b/parm/ufs/fv3/field_table_thompson_noaero_tke_progsigma new file mode 100644 index 0000000000..a54c7b60c9 --- /dev/null +++ b/parm/ufs/fv3/field_table_thompson_noaero_tke_progsigma @@ -0,0 +1,70 @@ +# added by FRE: sphum must be present in atmos +# specific humidity for moist runs + "TRACER", "atmos_mod", "sphum" + "longname", "specific humidity" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=3.e-6" / +# prognostic cloud water mixing ratio + "TRACER", "atmos_mod", "liq_wat" + "longname", "cloud water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic ice water mixing ratio + "TRACER", "atmos_mod", "ice_wat" + "longname", "cloud ice mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic rain water mixing ratio + "TRACER", "atmos_mod", "rainwat" + "longname", "rain water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic snow water mixing ratio + "TRACER", "atmos_mod", "snowwat" + "longname", "snow water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic Grau water mixing ratio + "TRACER", "atmos_mod", "graupel" + "longname", "graupel mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic cloud water number concentration - not for non-aerosol runs +# "TRACER", "atmos_mod", "water_nc" +# "longname", "cloud liquid water number concentration" +# "units", "/kg" +# "profile_type", "fixed", "surface_value=0.0" / +# prognostic cloud ice number concentration + "TRACER", "atmos_mod", "ice_nc" + "longname", "cloud ice water number concentration" + "units", "/kg" + "profile_type", "fixed", "surface_value=0.0" / +# prognostic rain number concentration + "TRACER", "atmos_mod", "rain_nc" + "longname", "rain number concentration" + "units", "/kg" + "profile_type", "fixed", "surface_value=0.0" / +# prognostic ozone mixing ratio tracer + "TRACER", "atmos_mod", "o3mr" + "longname", "ozone mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# water- and ice-friendly aerosols (Thompson) - not for non-aerosol runs +# "TRACER", "atmos_mod", "liq_aero" +# "longname", "water-friendly aerosol number concentration" +# "units", "/kg" +# "profile_type", "fixed", "surface_value=0.0" / +# "TRACER", "atmos_mod", "ice_aero" +# "longname", "ice-friendly aerosol number concentration" +# "units", "/kg" +# "profile_type", "fixed", "surface_value=0.0" / +# prognostic subgrid scale turbulent kinetic energy + "TRACER", "atmos_mod", "sgs_tke" + "longname", "subgrid scale turbulent kinetic energy" + "units", "m2/s2" + "profile_type", "fixed", "surface_value=0.0" / +# prognotsitc sigmab tracer + "TRACER", "atmos_mod", "sigmab" + "longname", "sigma fraction" + "units", "fraction" + "profile_type", "fixed", "surface_value=0.0" / diff --git a/parm/parm_fv3diag/field_table_thompson_satmedmf b/parm/ufs/fv3/field_table_thompson_satmedmf similarity index 100% rename from parm/parm_fv3diag/field_table_thompson_satmedmf rename to parm/ufs/fv3/field_table_thompson_satmedmf diff --git a/parm/parm_fv3diag/field_table_wsm6 b/parm/ufs/fv3/field_table_wsm6 similarity index 100% rename from parm/parm_fv3diag/field_table_wsm6 rename to parm/ufs/fv3/field_table_wsm6 diff --git a/parm/ufs/fv3/field_table_wsm6_progsigma b/parm/ufs/fv3/field_table_wsm6_progsigma new file mode 100644 index 0000000000..3bc52e1296 --- /dev/null +++ b/parm/ufs/fv3/field_table_wsm6_progsigma @@ -0,0 +1,38 @@ +# added by FRE: sphum must be present in atmos +# specific humidity for moist runs + "TRACER", "atmos_mod", "sphum" + "longname", "specific humidity" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=3.e-6" / +# prognostic cloud water mixing ratio + "TRACER", "atmos_mod", "liq_wat" + "longname", "cloud water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / + "TRACER", "atmos_mod", "ice_wat" + "longname", "ice water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=3.e-6" / +# prognostic cloud water mixing ratio + "TRACER", "atmos_mod", "rainwat" + "longname", "rain water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / + "TRACER", "atmos_mod", "snowwat" + "longname", "snow water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / + "TRACER", "atmos_mod", "graupel" + "longname", "graupel mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic ozone mixing ratio tracer + "TRACER", "atmos_mod", "o3mr" + "longname", "ozone mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognotsitc sigmab tracer + "TRACER", "atmos_mod", "sigmab" + "longname", "sigma fraction" + "units", "fraction" + "profile_type", "fixed", "surface_value=0.0" / diff --git a/parm/parm_fv3diag/field_table_wsm6_satmedmf b/parm/ufs/fv3/field_table_wsm6_satmedmf similarity index 100% rename from parm/parm_fv3diag/field_table_wsm6_satmedmf rename to parm/ufs/fv3/field_table_wsm6_satmedmf diff --git a/parm/ufs/fv3/field_table_wsm6_satmedmf_progsigma b/parm/ufs/fv3/field_table_wsm6_satmedmf_progsigma new file mode 100644 index 0000000000..a73d13dbbf --- /dev/null +++ b/parm/ufs/fv3/field_table_wsm6_satmedmf_progsigma @@ -0,0 +1,43 @@ +# added by FRE: sphum must be present in atmos +# specific humidity for moist runs + "TRACER", "atmos_mod", "sphum" + "longname", "specific humidity" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=3.e-6" / +# prognostic cloud water mixing ratio + "TRACER", "atmos_mod", "liq_wat" + "longname", "cloud water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / + "TRACER", "atmos_mod", "ice_wat" + "longname", "ice water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=3.e-6" / +# prognostic cloud water mixing ratio + "TRACER", "atmos_mod", "rainwat" + "longname", "rain water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / + "TRACER", "atmos_mod", "snowwat" + "longname", "snow water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / + "TRACER", "atmos_mod", "graupel" + "longname", "graupel mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic ozone mixing ratio tracer + "TRACER", "atmos_mod", "o3mr" + "longname", "ozone mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic subgrid scale turbulent kinetic energy + "TRACER", "atmos_mod", "sgs_tke" + "longname", "subgrid scale turbulent kinetic energy" + "units", "m2/s2" + "profile_type", "fixed", "surface_value=0.0" / +# prognotsitc sigmab tracer + "TRACER", "atmos_mod", "sigmab" + "longname", "sigma fraction" + "units", "fraction" + "profile_type", "fixed", "surface_value=0.0" / diff --git a/parm/parm_fv3diag/field_table_zhaocarr b/parm/ufs/fv3/field_table_zhaocarr similarity index 100% rename from parm/parm_fv3diag/field_table_zhaocarr rename to parm/ufs/fv3/field_table_zhaocarr diff --git a/parm/ufs/fv3/field_table_zhaocarr_progsigma b/parm/ufs/fv3/field_table_zhaocarr_progsigma new file mode 100644 index 0000000000..9a1a1abf5d --- /dev/null +++ b/parm/ufs/fv3/field_table_zhaocarr_progsigma @@ -0,0 +1,21 @@ +# added by FRE: sphum must be present in atmos +# specific humidity for moist runs + "TRACER", "atmos_mod", "sphum" + "longname", "specific humidity" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=3.e-6" / +# prognostic cloud water mixing ratio + "TRACER", "atmos_mod", "liq_wat" + "longname", "cloud water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic ozone mixing ratio tracer + "TRACER", "atmos_mod", "o3mr" + "longname", "ozone mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognotsitc sigmab tracer + "TRACER", "atmos_mod", "sigmab" + "longname", "sigma fraction" + "units", "fraction" + "profile_type", "fixed", "surface_value=0.0" / diff --git a/parm/parm_fv3diag/field_table_zhaocarr_satmedmf b/parm/ufs/fv3/field_table_zhaocarr_satmedmf similarity index 100% rename from parm/parm_fv3diag/field_table_zhaocarr_satmedmf rename to parm/ufs/fv3/field_table_zhaocarr_satmedmf diff --git a/parm/ufs/fv3/field_table_zhaocarr_satmedmf_progsigma b/parm/ufs/fv3/field_table_zhaocarr_satmedmf_progsigma new file mode 100644 index 0000000000..76114f8e58 --- /dev/null +++ b/parm/ufs/fv3/field_table_zhaocarr_satmedmf_progsigma @@ -0,0 +1,26 @@ +# added by FRE: sphum must be present in atmos +# specific humidity for moist runs + "TRACER", "atmos_mod", "sphum" + "longname", "specific humidity" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=3.e-6" / +# prognostic cloud water mixing ratio + "TRACER", "atmos_mod", "liq_wat" + "longname", "cloud water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic ozone mixing ratio tracer + "TRACER", "atmos_mod", "o3mr" + "longname", "ozone mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic subgrid scale turbulent kinetic energy + "TRACER", "atmos_mod", "sgs_tke" + "longname", "subgrid scale turbulent kinetic energy" + "units", "m2/s2" + "profile_type", "fixed", "surface_value=0.0" / +# prognotsitc sigmab tracer + "TRACER", "atmos_mod", "sigmab" + "longname", "sigma fraction" + "units", "fraction" + "profile_type", "fixed", "surface_value=0.0" / diff --git a/parm/parm_fv3diag/variable_table.txt b/parm/ufs/fv3/variable_table.txt similarity index 100% rename from parm/parm_fv3diag/variable_table.txt rename to parm/ufs/fv3/variable_table.txt diff --git a/parm/parm_fv3diag/variable_table_da.txt b/parm/ufs/fv3/variable_table_da.txt similarity index 100% rename from parm/parm_fv3diag/variable_table_da.txt rename to parm/ufs/fv3/variable_table_da.txt diff --git a/parm/parm_fv3diag/variable_table_da_nonsst.txt b/parm/ufs/fv3/variable_table_da_nonsst.txt similarity index 100% rename from parm/parm_fv3diag/variable_table_da_nonsst.txt rename to parm/ufs/fv3/variable_table_da_nonsst.txt diff --git a/parm/ufs/gocart/AERO.rc b/parm/ufs/gocart/AERO.rc new file mode 100644 index 0000000000..ff40fba2aa --- /dev/null +++ b/parm/ufs/gocart/AERO.rc @@ -0,0 +1,10 @@ +NX: 4 +NY: 24 + +# Atmospheric Model Configuration Parameters +# ------------------------------------------ +IOSERVER_NODES: 0 + +DYCORE: NONE + +NUM_BANDS: 30 diff --git a/parm/ufs/gocart/AERO_HISTORY.rc b/parm/ufs/gocart/AERO_HISTORY.rc new file mode 100644 index 0000000000..4c7df15b2a --- /dev/null +++ b/parm/ufs/gocart/AERO_HISTORY.rc @@ -0,0 +1,452 @@ +####################################################################### +# Create History List for Output +####################################################################### + +VERSION: 1 +EXPID: gocart +EXPDSC: GOCART2g_diagnostics_at_c360 +EXPSRC: GEOSgcm-v10.16.0 +Allow_Overwrite: .true. + +COLLECTIONS: 'inst_aod' +# 'inst_du_ss' +# 'inst_ca' +# 'inst_ni' +# 'inst_su' +# 'inst_du_bin' +# 'inst_ss_bin' +# 'inst_ca_bin' +# 'inst_ni_bin' +# 'inst_su_bin' +# 'inst_2d' +# 'inst_3d' +# 'inst_aod' +# 'tavg_du_ss' +# 'tavg_du_bin' +# 'tavg_2d_rad' +# 'tavg_3d_rad' + :: + +################################################## +# The GRID_LABELS section must be after the main # +# list of COLLECTIONS for scripting purposes. # +################################################## + +GRID_LABELS: PC720x361-DC +:: + + +PC720x361-DC.GRID_TYPE: LatLon +PC720x361-DC.IM_WORLD: 720 +PC720x361-DC.JM_WORLD: 361 +PC720x361-DC.POLE: PC +PC720x361-DC.DATELINE: DC +PC720x361-DC.LM: 72 + +# --------------------- +# Aerosols/Constituents +# --------------------- +# +#### Instantaneous (hourly) output + +# +# 3d aerosols +# + inst_du_ss.format: 'CFIO' , + inst_du_ss.descr: '3d,Hourly,Instantaneous,Model-Level,Aerosol Concentrations', + inst_du_ss.template: '%y4%m2%d2_%h2%n2z.nc4', + inst_du_ss.mode: 'instantaneous', + inst_du_ss.grid_label: PC720x361-DC , + inst_du_ss.splitField: 1, + inst_du_ss.frequency: 120000 , + inst_du_ss.duration: 010000 , + inst_du_ss.ref_time: 000000 , + inst_du_ss.nbits: 10, + inst_du_ss.fields: 'DU' , 'DU' , + 'SS' , 'SS' , + :: + + tavg_du_ss.format: 'CFIO' , + tavg_du_ss.descr: '3d,Hourly,Instantaneous,Model-Level,Aerosol Concentrations', + tavg_du_ss.template: '%y4%m2%d2_%h2%n2z.nc4', + tavg_du_ss.mode: 'time-averaged', + tavg_du_ss.grid_label: PC720x361-DC , + tavg_du_ss.splitField: 1, + tavg_du_ss.frequency: 120000 , + tavg_du_ss.duration: 010000 , + tavg_du_ss.ref_time: 000000 , + tavg_du_ss.nbits: 10, + tavg_du_ss.fields: 'DU' , 'DU' , + 'SS' , 'SS' , + :: + + inst_ca.format: 'CFIO' , + inst_ca.descr: '3d,Hourly,Instantaneous,Model-Level,Aerosol Concentrations', + inst_ca.template: '%y4%m2%d2_%h2%n2z.nc4', + inst_ca.mode: 'instantaneous', + inst_ca.grid_label: PC720x361-DC , + inst_ca.frequency: 120000 , + inst_ca.duration: 010000 , + inst_ca.ref_time: 000000 , + inst_ca.nbits: 10, + inst_ca.fields: 'CAphilicCA.bc' , 'CA.bc' , + 'CAphobicCA.bc' , 'CA.bc' , + 'CAphilicCA.oc' , 'CA.oc' , + 'CAphobicCA.oc' , 'CA.oc' , + :: + + inst_ni.format: 'CFIO' , + inst_ni.descr: '3d,Hourly,Instantaneous,Model-Level,Aerosol Concentrations', + inst_ni.template: '%y4%m2%d2_%h2%n2z.nc4', + inst_ni.mode: 'instantaneous', + inst_ni.grid_label: PC720x361-DC , + inst_ni.frequency: 120000 , + inst_ni.duration: 010000 , + inst_ni.ref_time: 000000 , + inst_ni.nbits: 10, + inst_ni.fields: 'NH3' , 'NI' , + 'NH4a' , 'NI' , + 'NO3an1' , 'NI' , + 'NO3an2' , 'NI' , + 'NO3an3' , 'NI' , + :: + + inst_su.format: 'CFIO' , + inst_su.descr: '3d,Hourly,Instantaneous,Model-Level,Aerosol Concentrations', + inst_su.template: '%y4%m2%d2_%h2%n2z.nc4', + inst_su.mode: 'instantaneous', + inst_su.grid_label: PC720x361-DC , + inst_su.frequency: 120000 , + inst_su.duration: 010000 , + inst_su.ref_time: 000000 , + inst_su.nbits: 10, + inst_su.fields: 'DMS' , 'SU' , + 'SO2' , 'SU' , + 'SO4' , 'SU' , + 'MSA' , 'SU' , + :: +# +# Binned aerosols +# + + inst_du_bin.format: 'CFIO' , + inst_du_bin.descr: '2d,Hourly,Instantaneous' + inst_du_bin.template: '%y4%m2%d2_%h2%n2z.nc4', + inst_du_bin.mode: 'instantaneous' + inst_du_bin.grid_label: PC720x361-DC , + inst_du_bin.splitField: 1, + inst_du_bin.frequency: 010000 , + inst_du_bin.duration: 010000 , + inst_du_bin.ref_time: 000000 , + inst_du_bin.nbits: 10, + inst_du_bin.fields: 'DUEM' , 'DU' , + 'DUSD' , 'DU' , + 'DUDP' , 'DU' , + 'DUWT' , 'DU' , + 'DUSV' , 'DU' , + :: + + tavg_du_bin.format: 'CFIO' , + tavg_du_bin.descr: '2d,Hourly,Instantaneous' + tavg_du_bin.template: '%y4%m2%d2_%h2%n2z.nc4', + tavg_du_bin.mode: 'time-averaged' + tavg_du_bin.grid_label: PC720x361-DC , + tavg_du_bin.splitField: 1, + tavg_du_bin.frequency: 030000 , + tavg_du_bin.duration: 010000 , + tavg_du_bin.ref_time: 000000 , + tavg_du_bin.nbits: 10, + tavg_du_bin.fields: 'DUEM' , 'DU' , + 'DUSD' , 'DU' , + 'DUDP' , 'DU' , + 'DUWT' , 'DU' , + 'DUSV' , 'DU' , + :: + + inst_ss_bin.format: 'CFIO' , + inst_ss_bin.descr: '2d,Hourly,Instantaneous' + inst_ss_bin.template: '%y4%m2%d2_%h2%n2z.nc4', + inst_ss_bin.mode: 'instantaneous' + inst_ss_bin.grid_label: PC720x361-DC , + inst_ss_bin.splitField: 1, + inst_ss_bin.frequency: 060000 , + inst_ss_bin.duration: 010000 , + inst_ss_bin.ref_time: 000000 , + inst_ss_bin.nbits: 10, + inst_ss_bin.fields: 'SSEM' , 'SS' , + 'SSSD' , 'SS' , + 'SSDP' , 'SS' , + 'SSWT' , 'SS' , + 'SSSV' , 'SS' , + :: + + inst_ca_bin.format: 'CFIO' , + inst_ca_bin.descr: '3d,Hourly,Instantaneous,Model-Level' + inst_ca_bin.template: '%y4%m2%d2_%h2%n2z.nc4', + inst_ca_bin.mode: 'instantaneous' + inst_ca_bin.grid_label: PC720x361-DC , + inst_ca_bin.splitField: 1, + inst_ca_bin.frequency: 120000 , + inst_ca_bin.duration: 010000 , + inst_ca_bin.ref_time: 000000 , + inst_ca_bin.nbits: 10, + inst_ca_bin.fields: 'CAEMCA.bc' , 'CA.bc' , + 'CAEMCA.oc' , 'CA.oc' , + 'CASDCA.bc' , 'CA.bc' , + 'CASDCA.oc' , 'CA.oc' , + 'CADPCA.bc' , 'CA.bc' , + 'CADPCA.oc' , 'CA.oc' , + 'CAWTCA.bc' , 'CA.bc' , + 'CAWTCA.oc' , 'CA.oc' , + 'CASVCA.bc' , 'CA.bc' , + 'CASVCA.oc' , 'CA.oc' , + :: + + inst_ni_bin.format: 'CFIO' , + inst_ni_bin.descr: '3d,Hourly,Instantaneous,Model-Level' + inst_ni_bin.template: '%y4%m2%d2_%h2%n2z.nc4', + inst_ni_bin.mode: 'instantaneous', + inst_ni_bin.grid_label: PC720x361-DC , + inst_ni_bin.splitField: 1, + inst_ni_bin.frequency: 120000 , + inst_ni_bin.duration: 010000 , + inst_ni_bin.ref_time: 000000 , + inst_ni_bin.nbits: 10, + inst_ni_bin.fields: 'NIHT' , 'NI' , + 'NISD' , 'NI' , + 'NIDP' , 'NI' , + 'NIWT' , 'NI' , + 'NISV' , 'NI' , + :: + + inst_su_bin.format: 'CFIO' , + inst_su_bin.descr: '3d,Hourly,Instantaneous,Model-Level' + inst_su_bin.template: '%y4%m2%d2_%h2%n2z.nc4', + inst_su_bin.mode: 'instantaneous', + inst_su_bin.grid_label: PC720x361-DC , + inst_su_bin.splitField: 1, + inst_su_bin.frequency: 120000 , + inst_su_bin.duration: 010000 , + inst_su_bin.ref_time: 000000 , + inst_su_bin.nbits: 10, + inst_su_bin.fields: 'SUEM' , 'SU', + 'SUSD' , 'SU', + 'SUDP' , 'SU', + 'SUWT' , 'SU', + 'SUSV' , 'SU', + :: + +# +# Other 2d diagnostics +# + inst_2d.format: 'CFIO' , + inst_2d.descr: '3d,Hourly,Instantaneous' + inst_2d.template: '%y4%m2%d2_%h2%n2z.nc4', + inst_2d.archive: '%c/Y%y4', + inst_2d.mode: 'instantaneous' + inst_2d.frequency: 030000, + inst_2d.duration: 030000, + inst_2d.ref_time: 000000, + inst_2d.grid_label: PC720x361-DC + inst_2d.fields: 'DUSMASS' , 'DU' , + 'DUCMASS' , 'DU' , + 'DUSMASS25' , 'DU' , + 'DUCMASS25' , 'DU' , + 'DUAERIDX' , 'DU' , + 'DUFLUXU' , 'DU' , + 'DUFLUXV' , 'DU' , + 'DUANGSTR' , 'DU' , + 'SSSMASS' , 'SS' , + 'SSCMASS' , 'SS' , + 'SSSMASS25' , 'SS' , + 'SSCMASS25' , 'SS' , + 'SSAERIDX' , 'SS' , + 'SSANGSTR' , 'SS' , + 'SSFLUXU' , 'SS' , + 'SSFLUXV' , 'SS' , + 'CAEMANCA.bc' , 'CA.bc' , + 'CAEMANCA.oc' , 'CA.oc' , + 'CAEMBBCA.bc' , 'CA.bc' , + 'CAEMBBCA.oc' , 'CA.oc' , + 'CAEMBFCA.bc' , 'CA.bc' , + 'CAEMBFCA.oc' , 'CA.oc' , + 'CAEMBGCA.bc' , 'CA.bc' , + 'CAEMBGCA.oc' , 'CA.oc' , + 'CAHYPHILCA.bc' , 'CA.bc' , + 'CAHYPHILCA.oc' , 'CA.oc' , + 'CAPSOACA.bc' , 'CA.bc' , + 'CAPSOACA.oc' , 'CA.oc' , + 'CASMASSCA.bc' , 'CA.bc' , + 'CASMASSCA.oc' , 'CA.oc' , + 'CACMASSCA.bc' , 'CA.bc' , + 'CACMASSCA.oc' , 'CA.oc' , + 'CAANGSTRCA.bc' , 'CA.bc' , + 'CAANGSTRCA.oc' , 'CA.oc' , + 'CAFLUXUCA.bc' , 'CA.bc' , + 'CAFLUXUCA.oc' , 'CA.oc' , + 'CAFLUXVCA.bc' , 'CA.bc' , + 'CAFLUXVCA.oc' , 'CA.oc' , + 'CAAERIDXCA.bc' , 'CA.bc' , + 'CAAERIDXCA.oc' , 'CA.oc' , + 'NIPNO3AQ' , 'NI' , + 'NIPNH4AQ' , 'NI' , + 'NIPNH3AQ' , 'NI' , + 'NH3EM' , 'NI' , + 'NH3DP' , 'NI' , + 'NH3WT' , 'NI' , + 'NH3SV' , 'NI' , + 'NH4SD' , 'NI' , + 'NH4DP' , 'NI' , + 'NH4WT' , 'NI' , + 'NH4SV' , 'NI' , + 'HNO3SMASS' , 'NI' , + 'NH3SMASS' , 'NI' , + 'NH4SMASS' , 'NI' , + 'NISMASS' , 'NI' , + 'NISMASS25' , 'NI' , + 'HNO3CMASS' , 'NI' , + 'NH3CMASS' , 'NI' , + 'NH4CMASS' , 'NI' , + 'NICMASS' , 'NI' , + 'NICMASS25' , 'NI' , + 'NIANGSTR' , 'NI' , + 'NIFLUXU' , 'NI' , + 'NIFLUXV' , 'NI' , + 'SUPSO2' , 'SU' , + 'SUPSO4' , 'SU' , + 'SUPSO4G' , 'SU' , + 'SUPSO4AQ' , 'SU' , + 'SUPSO4WT' , 'SU' , + 'SUPMSA' , 'SU' , + 'SO2SMASS' , 'SU' , + 'SO2CMASS' , 'SU' , + 'SO4SMASS' , 'SU' , + 'SO4CMASS' , 'SU' , + 'DMSSMASS' , 'SU' , + 'DMSCMASS' , 'SU' , + 'MSASMASS' , 'SU' , + 'MSACMASS' , 'SU' , + 'SUANGSTR' , 'SU' , + 'SUFLUXU' , 'SU' , + 'SUFLUXV' , 'SU' , + 'SO4EMAN' , 'SU' , + 'SO2EMAN' , 'SU' , + 'SO2EMBB' , 'SU' , + 'SO2EMVN' , 'SU' , + 'SO2EMVE' , 'SU' , + :: + +# +# 3d diagnostics +# + inst_3d.format: 'CFIO' , + inst_3d.template: '%y4%m2%d2_%h2%n2z.nc4' , + inst_3d.archive: '%c/Y%y4' , + inst_3d.mode: 'instantaneous' + inst_3d.frequency: 060000, + inst_3d.duration: 010000, + inst_3d.ref_time: 000000, + inst_3d.grid_label: PC720x361-DC + inst_3d.fields: 'DUMASS' , 'DU', + 'DUMASS25' , 'DU', + 'DUCONC' , 'DU', + 'SSMASS' , 'SS', + 'SSMASS25' , 'SS', + 'SSCONC' , 'SS', + 'CAMASSCA.bc' , 'CA.bc' , + 'CACONCCA.bc' , 'CA.bc' , + 'CAMASSCA.oc' , 'CA.oc' , + 'CACONCCA.oc' , 'CA.oc' , + 'SO4MASS' , 'SU', + 'SO4SAREA' , 'SU', + 'SO4SNUM' , 'SU', + 'SUCONC' , 'SU', + 'PSO2' , 'SU', + 'PMSA' , 'SU', + 'PSO4' , 'SU', + 'PSO4G' , 'SU', + 'PSO4WET' , 'SU', + 'PSO4AQ' , 'SU', + 'DMS' , 'SU', + 'SO2' , 'SU', + 'SO4' , 'SU', + 'MSA' , 'SU', + :: + + +# +# Radiation-related diagnostics +# + inst_aod.format: 'CFIO' , + inst_aod.template: '%y4%m2%d2_%h2%n2z.nc4' , + inst_aod.archive: '%c/Y%y4' , + inst_aod.mode: 'instantaneous' + inst_aod.frequency: 060000, + inst_aod.duration: 010000, + inst_aod.ref_time: 000000, + inst_aod.grid_label: PC720x361-DC + inst_aod.fields: 'CA.bcEXTTAU' , 'CA.bc' , 'AOD_BC', + 'CA.ocEXTTAU' , 'CA.oc' , 'AOD_OC', + 'DUEXTTAU' , 'DU' , 'AOD_DU', + 'SSEXTTAU' , 'SS' , 'AOD_SS', + 'SUEXTTAU' , 'SU' , 'AOD_SU', + 'TOTEXTTAU' , 'GOCART2G' , 'AOD' , + :: + + + tavg_2d_rad.format: 'CFIO' , + tavg_2d_rad.template: '%y4%m2%d2_%h2%n2z.nc4', + tavg_2d_rad.archive: '%c/Y%y4', + tavg_2d_rad.mode: 'time-averaged', + tavg_2d_rad.frequency: 120000, + tavg_2d_rad.duration: 120000, + tavg_2d_rad.ref_time: 000000, + tavg_2d_rad.grid_label: PC720x361-DC + tavg_2d_rad.fields: 'CA.bcEXTTAU' , 'CA.bc' , + 'CA.ocEXTTAU' , 'CA.oc' , + 'CASCATAUCA.bc' , 'CA.bc' , + 'CASCATAUCA.oc' , 'CA.oc' , + 'DUEXTTAU' , 'DU' , + 'DUSCATAU' , 'DU' , + 'DUEXTT25' , 'DU' , + 'DUSCAT25' , 'DU' , + 'DUEXTTFM' , 'DU' , + 'DUSCATFM' , 'DU' , + 'NIEXTTFM' , 'NI' , + 'NISCATFM' , 'NI' , + 'NIEXTT25' , 'NI' , + 'NISCAT25' , 'NI' , + 'NIEXTTAU' , 'NI' , + 'NISCATAU' , 'NI' , + 'SSEXTTAU' , 'SS' , + 'SSSCATAU' , 'SS' , + 'SSEXTT25' , 'SS' , + 'SSSCAT25' , 'SS' , + 'SSEXTTFM' , 'SS' , + 'SSSCATFM' , 'SS' , + 'SUEXTTAU' , 'SU' , + 'SUSCATAU' , 'SU' , + :: + + tavg_3d_rad.format: 'CFIO' , + tavg_3d_rad.template: '%y4%m2%d2_%h2%n2z.nc4', + tavg_3d_rad.archive: '%c/Y%y4', + tavg_3d_rad.mode: 'time-averaged', + tavg_3d_rad.frequency: 120000, + tavg_3d_rad.duration: 120000, + tavg_3d_rad.ref_time: 000000, + tavg_3d_rad.grid_label: PC720x361-DC + tavg_3d_rad.splitField: 1, + tavg_3d_rad.fields: 'CAEXTCOEFCA.bc' , 'CA.bc' , + 'CAEXTCOEFCA.oc' , 'CA.oc' , + 'CASCACOEFCA.bc' , 'CA.bc' , + 'CASCACOEFCA.oc' , 'CA.oc' , + 'DUEXTCOEF' , 'DU' , + 'DUSCACOEF' , 'DU' , + 'NIEXTCOEF' , 'NI' , + 'NISCACOEF' , 'NI' , + 'SSEXTCOEF' , 'SS' , + 'SSSCACOEF' , 'SS' , + 'SUEXTCOEF' , 'SU' , + 'SUSCACOEF' , 'SU' , + :: diff --git a/parm/ufs/gocart/AGCM.rc b/parm/ufs/gocart/AGCM.rc new file mode 100644 index 0000000000..9539b49655 --- /dev/null +++ b/parm/ufs/gocart/AGCM.rc @@ -0,0 +1,5 @@ +# ------------------------------------------ +# Atmospheric Model Configuration Parameters +# ------------------------------------------ +# +# This file must be present but empty for UFS Aerosols diff --git a/parm/ufs/gocart/CA2G_instance_CA.bc.rc b/parm/ufs/gocart/CA2G_instance_CA.bc.rc new file mode 100644 index 0000000000..f6411e2c9d --- /dev/null +++ b/parm/ufs/gocart/CA2G_instance_CA.bc.rc @@ -0,0 +1,41 @@ +# +# Resource file for Black Carbon parameters. +# + +nbins: 2 + +aerosol_radBands_optics_file: ExtData/optics/opticsBands_BC.v1_3.RRTMG.nc +aerosol_monochromatic_optics_file: ExtData/monochromatic/optics_BC.v1_3.nc + +# Aircraft emission factor: convert input unit to kg C +aircraft_fuel_emission_factor: 1.0000 + +# Heights [m] of LTO, CDS and CRS aviation emissions layers +aviation_vertical_layers: 0.0 100.0 9.0e3 10.0e3 + +# Initially hydrophobic portion +hydrophobic_fraction: 0.8 + +# Scavenging efficiency per bin [km-1] (NOT USED UNLESS RAS IS CALLED) +fscav: 0.0 0.4 + +# Dry particle density [kg m-3] +particle_density: 1800 1800 + +# Molecular weight of species [kg mole-1] +molecular_weight: 0.18 0.18 + +# Number of particles per kg mass +fnum: 1.50e19 1.50e19 + +# Number median radius [um] +particle_radius_microns: 0.35 0.35 + +rhFlag: 0 + +# Sigma of lognormal number distribution +sigma: 2.0 2.0 + +pressure_lid_in_hPa: 0.01 + +point_emissions_srcfilen: /dev/null diff --git a/parm/ufs/gocart/CA2G_instance_CA.br.rc b/parm/ufs/gocart/CA2G_instance_CA.br.rc new file mode 100644 index 0000000000..41360831f3 --- /dev/null +++ b/parm/ufs/gocart/CA2G_instance_CA.br.rc @@ -0,0 +1,48 @@ +# +# Resource file for BR parameters. +# + +aerosol_radBands_optics_file: ExtData/optics/opticsBands_BRC.v1_5.RRTMG.nc +aerosol_monochromatic_optics_file: ExtData/monochromatic/optics_BRC.v1_5.nc + +# Aircraft emission factor: convert input unit to kg C +aircraft_fuel_emission_factor: 1.0000 + +# Heights [m] of LTO, CDS and CRS aviation emissions layers +aviation_vertical_layers: 0.0 100.0 9.0e3 10.0e3 + +# Fraction of biogenic VOCs emissions for SOA production +monoterpenes_emission_fraction: 0.0 +isoprene_emission_fraction: 0.0 + +# Ratio of POM/BRC -> convert source masses from carbon to POM +pom_ca_ratio: 1.8 + +# Initially hydrophobic portion +hydrophobic_fraction: 0.5 + +# Scavenging efficiency per bin [km-1] (NOT USED UNLESS RAS IS CALLED) +fscav: 0.0 0.4 + +# particle radius +particle_radius_microns: 0.35 0.35 + +rhFlag: 0 + +# Dry particle density [kg m-3] +particle_density: 1800 1800 + +# Molecular weight of species [kg mole-1] +molecular_weight: 0.18 0.18 + +# Number of particles per kg mass +fnum: 9.76e17 9.76e17 + +# Sigma of lognormal number distribution +sigma: 2.20 2.20 + +nbins: 2 + +pressure_lid_in_hPa: 0.01 + +point_emissions_srcfilen: /dev/null diff --git a/parm/ufs/gocart/CA2G_instance_CA.oc.rc b/parm/ufs/gocart/CA2G_instance_CA.oc.rc new file mode 100644 index 0000000000..6e3f5ef978 --- /dev/null +++ b/parm/ufs/gocart/CA2G_instance_CA.oc.rc @@ -0,0 +1,48 @@ +# +# Resource file for Organic Carbon parameters. +# + +aerosol_radBands_optics_file: ExtData/optics/opticsBands_OC.v1_3.RRTMG.nc +aerosol_monochromatic_optics_file: ExtData/monochromatic/optics_OC.v1_3.nc + +# Aircraft emission factor: convert input unit to kg C +aircraft_fuel_emission_factor: 1.0000 + +# Heights [m] of LTO, CDS and CRS aviation emissions layers +aviation_vertical_layers: 0.0 100.0 9.0e3 10.0e3 + +# Fraction of biogenic VOCs emissions for SOA production +monoterpenes_emission_fraction: 0.05 +isoprene_emission_fraction: 0.03 + +# Ratio of POM/OC -> convert source masses from carbon to POM +pom_ca_ratio: 1.8 + +# particle radius +particle_radius_microns: 0.35 0.35 + +rhFlag: 0 + +# Initially hydrophobic portion +hydrophobic_fraction: 0.5 + +# Scavenging efficiency per bin [km-1] (NOT USED UNLESS RAS IS CALLED) +fscav: 0.0 0.4 + +# Dry particle density [kg m-3] +particle_density: 1800 1800 + +# Molecular weight of species [kg mole-1] +molecular_weight: 0.18 0.18 + +# Number of particles per kg mass +fnum: 9.76e17 9.76e17 + +# Sigma of lognormal number distribution +sigma: 2.20 2.20 + +pressure_lid_in_hPa: 0.01 + +nbins: 2 + +point_emissions_srcfilen: /dev/null diff --git a/parm/ufs/gocart/CAP.rc b/parm/ufs/gocart/CAP.rc new file mode 100644 index 0000000000..2b8e71975b --- /dev/null +++ b/parm/ufs/gocart/CAP.rc @@ -0,0 +1,82 @@ +MAPLROOT_COMPNAME: AERO + ROOT_NAME: AERO +ROOT_CF: AERO.rc +HIST_CF: AERO_HISTORY.rc +EXTDATA_CF: AERO_ExtData.rc + +REPORT_THROUGHPUT: .false. + +USE_SHMEM: 0 + +GridType: Cubed-Sphere + +MAPL_ENABLE_TIMERS: NO +MAPL_ENABLE_MEMUTILS: NO +PRINTSPEC: 0 # (0: OFF, 1: IMPORT & EXPORT, 2: IMPORT, 3: EXPORT) + + +# Meteorological fields imported from atmospheric model +# ----------------------------------------------------- +CAP_IMPORTS: + FROCEAN + FRACI + FRSNOW + LWI + U10M + V10M + USTAR + TS + DZ + FRLAKE + AREA + ZPBL + SH + Z0H + CN_PRCP + NCN_PRCP + AIRDENS + DELP + T + RH2 + ZLE + PLE + PFL_LSAN + PFI_LSAN + U + V + WET1 + SLC + FCLD +:: + + +# Prognostic Tracers Table +# GOCARTname,GOCARTcomp. AtmTracerName +#--------------------------------------- +CAP_EXPORTS: + SS,SS seas* + DU,DU dust* + DMS,SU dms + MSA,SU msa + SO2,SU so2 + SO4,SU so4 + CA.bcphobic,CA.bc bc1 + CA.bcphilic,CA.bc bc2 + CA.ocphobic,CA.oc oc1 + CA.ocphilic,CA.oc oc2 +:: +# NH3,NI nh3 +# NH4a,NI nh4a +# NO3an1,NI no3an1 +# NO3an2,NI no3an2 +# NO3an3,NI no3an3 +# :: + + +# Diagnostic Tracers Table (only PM10 & PM25 available) +# InternalName AtmTracerName +#--------------------------------------- +CAP_DIAGNOSTICS: + PM10 pm10 + PM25 pm25 +:: diff --git a/parm/ufs/gocart/DU2G_instance_DU.rc b/parm/ufs/gocart/DU2G_instance_DU.rc new file mode 100644 index 0000000000..6c30cdf06b --- /dev/null +++ b/parm/ufs/gocart/DU2G_instance_DU.rc @@ -0,0 +1,48 @@ +# +# Resource file Dust parameters. +# + +aerosol_radBands_optics_file: ExtData/optics/opticsBands_DU.v15_3.RRTMG.nc +aerosol_monochromatic_optics_file: ExtData/monochromatic/optics_DU.v15_3.nc + +particle_radius_microns: 0.73 1.4 2.4 4.5 8.0 + +radius_lower: 0.1 1.0 1.8 3.0 6.0 + +radius_upper: 1.0 1.8 3.0 6.0 10.0 + +source_fraction: 1.0 1.0 1.0 1.0 1.0 + +# units [kg/m-3] +particle_density: 2500. 2650. 2650. 2650. 2650. + +# Resolution dependent tuning constant for emissions (a,b,c,d,e,f) (Ginoux, K14) +Ch_DU: 0.2 0.2 0.07 0.07 0.07 0.056 + +# Scavenging efficiency per bin [km-1] +fscav: 0.2 0.2 0.2 0.2 0.2 # + +# Molecular weight of species [kg mole-1] +molecular_weight: 0.1 0.1 0.1 0.1 0.1 + +# Number of particles per kg mass +fnum: 2.45e14 3.28e13 6.52e12 9.89e11 1.76e11 + +rhFlag: 0 + +# Maring settling velocity correction +maringFlag: .true. + +nbins: 5 + +pressure_lid_in_hPa: 0.01 + +# Emissions methods +emission_scheme: fengsha # choose among: fengsha, ginoux, k14 + +# FENGSHA settings +alpha: 0.1 +gamma: 1.0 +soil_moisture_factor: 1 +soil_drylimit_factor: 1 +vertical_to_horizontal_flux_ratio_limit: 2.e-04 diff --git a/parm/ufs/gocart/ExtData.gbbepx b/parm/ufs/gocart/ExtData.gbbepx new file mode 100644 index 0000000000..3bd516c772 --- /dev/null +++ b/parm/ufs/gocart/ExtData.gbbepx @@ -0,0 +1,8 @@ +#====== BIOMASS BURNING EMISSIONS ======================================= + +# GBBEPx +#-------------------------------------------------------------------------------------------------------------------------------- +SU_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none 0.7778 SO2 ExtData/nexus/GBBEPx/GBBEPx_all01GRID.emissions_v003_%y4%m2%d2.nc +OC_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none 0.7778 OC ExtData/nexus/GBBEPx/GBBEPx_all01GRID.emissions_v003_%y4%m2%d2.nc +BC_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none 0.7778 BC ExtData/nexus/GBBEPx/GBBEPx_all01GRID.emissions_v003_%y4%m2%d2.nc +# EMI_NH3_BB NA N Y %y4-%m2-%d2t12:00:00 none 0.7778 NH3 ExtData/nexus/GBBEPx/GBBEPx_all01GRID.emissions_v003_%y4%m2%d2.nc diff --git a/parm/ufs/gocart/ExtData.none b/parm/ufs/gocart/ExtData.none new file mode 100644 index 0000000000..15ad023eb8 --- /dev/null +++ b/parm/ufs/gocart/ExtData.none @@ -0,0 +1,8 @@ +#====== BIOMASS BURNING EMISSIONS ======================================= + +# NONE +#-------------------------------------------------------------------------------------------------------------------------------- +SU_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none none biomass /dev/null +OC_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none none biomass /dev/null +BC_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none none biomass /dev/null +EMI_NH3_BB NA N Y %y4-%m2-%d2t12:00:00 none none biomass /dev/null diff --git a/parm/ufs/gocart/ExtData.other b/parm/ufs/gocart/ExtData.other new file mode 100644 index 0000000000..789576305e --- /dev/null +++ b/parm/ufs/gocart/ExtData.other @@ -0,0 +1,147 @@ +# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| +# Import | | | Regrid | Refresh | OffSet | Scale | Variable On | File | +# Name | Units | Clim | Method | Time Template | Factor | Factor | File | Template | +# -------------|-------|-------|--------|----------------------|--------|--------|-------------|----------| + +#====== Atmospheric Parameters ======================================= +TROPP 'Pa' Y N - 0.0 1.0 TROPP /dev/null:10000. + +#====== Dust Imports ================================================= +# FENGSHA input files. Note: regridding should be N or E - Use files with _FillValue != NaN +DU_CLAY '1' Y E - none none clayfrac ExtData/nexus/FENGSHA/FENGSHA_2022_NESDIS_inputs_10km_v3.2.nc +DU_SAND '1' Y E - none none sandfrac ExtData/nexus/FENGSHA/FENGSHA_2022_NESDIS_inputs_10km_v3.2.nc +DU_SILT '1' Y E - none none siltfrac /dev/null +DU_SSM '1' Y E - none none sep ExtData/nexus/FENGSHA/FENGSHA_2022_NESDIS_inputs_10km_v3.2.nc +DU_RDRAG '1' Y E %y4-%m2-%d2t12:00:00 none none albedo_drag ExtData/nexus/FENGSHA/FENGSHA_2022_NESDIS_inputs_10km_v3.2.nc +DU_UTHRES '1' Y E - none none uthres ExtData/nexus/FENGSHA/FENGSHA_2022_NESDIS_inputs_10km_v3.2.nc + +#====== Sulfate Sources ================================================= +# Anthropogenic (BF & FF) emissions -- allowed to input as two layers +SU_ANTHROL1 NA N Y %y4-%m2-%d2t12:00:00 none none SO2 ExtData/nexus/CEDS/v2019/%y4/CEDS.2019.emis.%y4%m2%d2.nc +SU_ANTHROL2 NA N Y %y4-%m2-%d2t12:00:00 none none SO2_elev ExtData/nexus/CEDS/v2019/%y4/CEDS.2019.emis.%y4%m2%d2.nc + +# Ship emissions +SU_SHIPSO2 NA N Y %y4-%m2-%d2t12:00:00 none none SO2_ship ExtData/nexus/CEDS/v2019/%y4/CEDS.2019.emis.%y4%m2%d2.nc +SU_SHIPSO4 NA N Y %y4-%m2-%d2t12:00:00 none none SO4_ship ExtData/nexus/CEDS/v2019/%y4/CEDS.2019.emis.%y4%m2%d2.nc + +# Aircraft fuel consumption +SU_AIRCRAFT NA Y Y %y4-%m2-%d2t12:00:00 none none none /dev/null + +# DMS concentration +SU_DMSO NA Y Y %y4-%m2-%d2t12:00:00 none none conc ExtData/MERRA2/sfc/DMSclim_sfcconcentration.x360_y181_t12.Lana2011.nc4 + +# Aviation emissions during the three phases of flight +SU_AVIATION_LTO NA Y Y %y4-%m2-%d2t12:00:00 none none so2_aviation ExtData/PIESA/sfc/HTAP/v2.2/htap-v2.2.emis_so2.aviation_lto.x3600_y1800_t12.2010.nc4 +SU_AVIATION_CDS NA Y Y %y4-%m2-%d2t12:00:00 none none so2_aviation ExtData/PIESA/sfc/HTAP/v2.2/htap-v2.2.emis_so2.aviation_cds.x3600_y1800_t12.2010.nc4 +SU_AVIATION_CRS NA Y Y %y4-%m2-%d2t12:00:00 none none so2_aviation ExtData/PIESA/sfc/HTAP/v2.2/htap-v2.2.emis_so2.aviation_crs.x3600_y1800_t12.2010.nc4 + +# H2O2, OH and NO3 mixing ratios +# -------------------------------------------------------------- +# If using 64 levels please replace this section with the correct values (ie replace 127 with 64) + +SU_H2O2 NA N Y %y4-%m2-%d2t12:00:00 none none h2o2 ExtData/PIESA/L127/A2_ACCMIP_gmic_MERRA_oh_h2o2_no3.x144_y91_z127_t14.%y4.nc +SU_OH NA N Y %y4-%m2-%d2t12:00:00 none none oh ExtData/PIESA/L127/A2_ACCMIP_gmic_MERRA_oh_h2o2_no3.x144_y91_z127_t14.%y4.nc +SU_NO3 NA N Y %y4-%m2-%d2t12:00:00 none none no3 ExtData/PIESA/L127/A2_ACCMIP_gmic_MERRA_oh_h2o2_no3.x144_y91_z127_t14.%y4.nc +#--------------------------------------------------------------- + +# Production of SO2 from OCS oxidation +pSO2_OCS NA Y Y %y4-%m2-%d2t12:00:00 none none biofuel /dev/null + +#SU_regionMask NA N v - none none REGION_MASK /scratch1/NCEPDEV/nems/Raffaele.Montuoro/data/NASA/ExtData/PIESA/sfc/ARCTAS.region_mask.x540_y361.2008.nc + +#=========== Carbonaceous aerosol sources =========================================== +# ORGANIC CARBON +# --------------- + +# # VOCs - OFFLINE MEGAN BIOG +OC_ISOPRENE NA N Y %y4-%m2-%d2t12:00:00 none none isoprene ExtData/nexus/MEGAN_OFFLINE_BVOC/v2019-10/%y4/MEGAN.OFFLINE.BIOVOC.%y4.emis.%y4%m2%d2.nc +OC_LIMO NA N Y %y4-%m2-%d2t12:00:00 none none limo ExtData/nexus/MEGAN_OFFLINE_BVOC/v2019-10/%y4/MEGAN.OFFLINE.BIOVOC.%y4.emis.%y4%m2%d2.nc +OC_MTPA NA N Y %y4-%m2-%d2t12:00:00 none none mtpa ExtData/nexus/MEGAN_OFFLINE_BVOC/v2019-10/%y4/MEGAN.OFFLINE.BIOVOC.%y4.emis.%y4%m2%d2.nc +OC_MTPO NA N Y %y4-%m2-%d2t12:00:00 none none mtpo ExtData/nexus/MEGAN_OFFLINE_BVOC/v2019-10/%y4/MEGAN.OFFLINE.BIOVOC.%y4.emis.%y4%m2%d2.nc + +# Biofuel Source -- Included in AeroCom anthropogenic emissions +OC_BIOFUEL NA Y Y %y4-%m2-%d2t12:00:00 none none biofuel /dev/null + +# Anthropogenic (BF & FF) emissions -- allowed to input as two layers +OC_ANTEOC1 NA N Y %y4-%m2-%d2t12:00:00 none none OC ExtData/nexus/CEDS/v2019/%y4/CEDS.2019.emis.%y4%m2%d2.nc +OC_ANTEOC2 NA N Y %y4-%m2-%d2t12:00:00 none none OC_elev ExtData/nexus/CEDS/v2019/%y4/CEDS.2019.emis.%y4%m2%d2.nc + +# EDGAR based ship emissions +OC_SHIP NA N Y %y4-%m2-%d2t12:00:00 none none OC_ship ExtData/nexus/CEDS/v2019/%y4/CEDS.2019.emis.%y4%m2%d2.nc + +# Aircraft fuel consumption +OC_AIRCRAFT NA N Y %y4-%m2-%d2t12:00:00 none none oc_aviation /dev/null + +# Aviation emissions during the three phases of flight +OC_AVIATION_LTO NA Y Y %y4-%m2-%d2t12:00:00 none none oc_aviation ExtData/PIESA/sfc/HTAP/v2.2/htap-v2.2.emis_oc.aviation_lto.x3600_y1800_t12.2010.nc4 +OC_AVIATION_CDS NA Y Y %y4-%m2-%d2t12:00:00 none none oc_aviation ExtData/PIESA/sfc/HTAP/v2.2/htap-v2.2.emis_oc.aviation_cds.x3600_y1800_t12.2010.nc4 +OC_AVIATION_CRS NA Y Y %y4-%m2-%d2t12:00:00 none none oc_aviation ExtData/PIESA/sfc/HTAP/v2.2/htap-v2.2.emis_oc.aviation_crs.x3600_y1800_t12.2010.nc4 + +# SOA production +pSOA_ANTHRO_VOC NA Y Y %y4-%m2-%d2t12:00:00 none none biofuel /dev/null + +#============================================================================================================ +# BLACK CARBON +# ------------ + +# Biofuel Source -- Included in AeroCom anthropogenic emissions +BC_BIOFUEL NA Y Y %y4-%m2-%d2t12:00:00 none none biofuel /dev/null + +# Anthropogenic (BF & FF) emissions -- allowed to input as two layers +BC_ANTEBC1 NA N Y %y4-%m2-%d2t12:00:00 none none BC ExtData/nexus/CEDS/v2019/%y4/CEDS.2019.emis.%y4%m2%d2.nc +BC_ANTEBC2 NA N Y %y4-%m2-%d2t12:00:00 none none BC_elev ExtData/nexus/CEDS/v2019/%y4/CEDS.2019.emis.%y4%m2%d2.nc + +# EDGAR based ship emissions +BC_SHIP NA N Y %y4-%m2-%d2t12:00:00 none none BC_ship ExtData/nexus/CEDS/v2019/%y4/CEDS.2019.emis.%y4%m2%d2.nc + +# Aircraft fuel consumption +BC_AIRCRAFT NA N Y %y4-%m2-%d2t12:00:00 none none bc_aviation /dev/null + +# Aviation emissions during the LTO, SDC and CRS phases of flight +BC_AVIATION_LTO NA Y Y %y4-%m2-%d2t12:00:00 none none bc_aviation ExtData/PIESA/sfc/HTAP/v2.2/htap-v2.2.emis_bc.aviation_lto.x3600_y1800_t12.2010.nc4 +BC_AVIATION_CDS NA Y Y %y4-%m2-%d2t12:00:00 none none bc_aviation ExtData/PIESA/sfc/HTAP/v2.2/htap-v2.2.emis_bc.aviation_cds.x3600_y1800_t12.2010.nc4 +BC_AVIATION_CRS NA Y Y %y4-%m2-%d2t12:00:00 none none bc_aviation ExtData/PIESA/sfc/HTAP/v2.2/htap-v2.2.emis_bc.aviation_crs.x3600_y1800_t12.2010.nc4 + +#============================================================================================================ +# BROWN CARBON +# ------------ +# Biomass burning -- QFED-v2.x +BRC_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none none biomass /dev/null + +# Terpene emission +BRC_TERPENE NA Y Y %y4-%m2-%d2t12:00:00 none none terpene /dev/null + +# Biofuel Source -- Included in AeroCom anthropogenic emissions +BRC_BIOFUEL NA Y Y %y4-%m2-%d2t12:00:00 none none biofuel /dev/null + +# Anthropogenic (BF & FF) emissions -- allowed to input as two layers +BRC_ANTEBRC1 NA Y Y %y4-%m2-%d2t12:00:00 none none anteoc1 /dev/null +BRC_ANTEBRC2 NA Y Y %y4-%m2-%d2t12:00:00 none none anteoc2 /dev/null + +# EDGAR based ship emissions +BRC_SHIP NA Y Y %y4-%m2-%d2t12:00:00 none none oc_ship /dev/null + +# Aircraft fuel consumption +BRC_AIRCRAFT NA N Y %y4-%m2-%d2t12:00:00 none none none /dev/null + +# Aviation emissions during the three phases of flight +BRC_AVIATION_LTO NA Y Y %y4-%m2-%d2t12:00:00 none none oc_aviation /dev/null +BRC_AVIATION_CDS NA Y Y %y4-%m2-%d2t12:00:00 none none oc_aviation /dev/null +BRC_AVIATION_CRS NA Y Y %y4-%m2-%d2t12:00:00 none none oc_aviation /dev/null + +# SOA production +pSOA_BIOB_VOC NA Y Y %y4-%m2-%d2t12:00:00 none none biofuel /dev/null + +# # ======= Nitrate Sources ======== +# EMI_NH3_AG 'kg m-2 s-1' N Y %y4-%m2-%d2T12:00:00 none none NH3_ag ExtData/nexus/CEDS/v2019/%y4/CEDS.2019.emis.%y4%m2%d2.nc +# EMI_NH3_EN 'kg m-2 s-1' N Y %y4-%m2-%d2T12:00:00 none none NH3_en /dev/null +# EMI_NH3_IN 'kg m-2 s-1' N Y %y4-%m2-%d2T12:00:00 none none NH3_in ExtData/nexus/CEDS/v2019/%y4/CEDS.2019.emis.%y4%m2%d2.nc +# EMI_NH3_RE 'kg m-2 s-1' N Y %y4-%m2-%d2T12:00:00 none none NH3_re ExtData/nexus/CEDS/v2019/%y4/CEDS.2019.emis.%y4%m2%d2.nc +# EMI_NH3_TR 'kg m-2 s-1' N Y %y4-%m2-%d2T12:00:00 none none NH3_tr ExtData/nexus/CEDS/v2019/%y4/CEDS.2019.emis.%y4%m2%d2.nc +# EMI_NH3_OC 'kg m-2 s-1' Y Y %y4-%m2-%d2T12:00:00 none none emiss_ocn ExtData/PIESA/sfc/GEIA.emis_NH3.ocean.x576_y361.t12.20080715_12z.nc4 + +# # -------------------------------------------------------------- +# # If using 64 levels please replace this section with the correct values (ie replace 127 with 64) +# NITRATE_HNO3 'mol mol-1' Y N %y4-%m2-%d2T12:00:00 none 0.20 hno3 ExtData/PIESA/L127/GMI.vmr_HNO3.x144_y91.t12.2006.nc4 +# # -------------------------------------------------------------- +# NI_regionMask NA Y V - none none REGION_MASK ExtData/PIESA/sfc/ARCTAS.region_mask.x540_y361.2008.nc diff --git a/parm/ufs/gocart/ExtData.qfed b/parm/ufs/gocart/ExtData.qfed new file mode 100644 index 0000000000..b3a721211e --- /dev/null +++ b/parm/ufs/gocart/ExtData.qfed @@ -0,0 +1,8 @@ +#====== BIOMASS BURNING EMISSIONS ======================================= + +# QFED +#-------------------------------------------------------------------------------------------------------------------------------- +SU_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none 0.7778 biomass ExtData/nexus/QFED/%y4/%m2/qfed2.emis_so2.006.%y4%m2%d2.nc4 +OC_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none 0.7778 biomass ExtData/nexus/QFED/%y4/%m2/qfed2.emis_oc.006.%y4%m2%d2.nc4 +BC_BIOMASS NA N Y %y4-%m2-%d2t12:00:00 none 0.7778 biomass ExtData/nexus/QFED/%y4/%m2/qfed2.emis_bc.006.%y4%m2%d2.nc4 +# EMI_NH3_BB NA N Y %y4-%m2-%d2t12:00:00 none 0.7778 biomass ExtData/nexus/QFED/%y4/%m2/qfed2.emis_nh3.006.%y4%m2%d2.nc4 diff --git a/parm/ufs/gocart/GOCART2G_GridComp.rc b/parm/ufs/gocart/GOCART2G_GridComp.rc new file mode 100644 index 0000000000..2dd63a6d17 --- /dev/null +++ b/parm/ufs/gocart/GOCART2G_GridComp.rc @@ -0,0 +1,43 @@ +# +# !RESOURCE: GOCART2G_GridComp.rc --- GOCART2G resource file +# +# DESCRIPTION: +# The GOCART2G resource file is used to control basic +# properties of the GOCART2G Grid Components. Instances are +# defined here. Default is the data component. +# +# Only the FIRST entry in the ACTIVE_INSTANCE_XX is given as +# the AERO_PROVIDER. +# +# !REVISION HISTORY: +# +# 11Oct2019 E.Sherman GOCART2G resource file has been created +#-------------------------------------------------------------------- + + + # &Label Active Constituents + +# Include the constituent in the simulation? +# ---------------------------------------------------- +ACTIVE_INSTANCES_DU: DU # DU.data +PASSIVE_INSTANCES_DU: + +ACTIVE_INSTANCES_SS: SS # SS.data +PASSIVE_INSTANCES_SS: + +ACTIVE_INSTANCES_SU: SU # SU.data +PASSIVE_INSTANCES_SU: + +ACTIVE_INSTANCES_CA: CA.oc CA.bc # CA.oc.data CA.bc.data +PASSIVE_INSTANCES_CA: + +ACTIVE_INSTANCES_NI: # NI # NI.data +PASSIVE_INSTANCES_NI: + +# Set optics parameters +# --------------------- +aerosol_monochromatic_optics_wavelength_in_nm_from_LUT: 470 550 670 870 +wavelengths_for_profile_aop_in_nm: 470 550 670 870 # must be included in LUT +wavelengths_for_vertically_integrated_aop_in_nm: 470 550 670 870 # must be included in LUT + +use_threads: .TRUE. diff --git a/parm/ufs/gocart/NI2G_instance_NI.rc b/parm/ufs/gocart/NI2G_instance_NI.rc new file mode 100644 index 0000000000..73db601073 --- /dev/null +++ b/parm/ufs/gocart/NI2G_instance_NI.rc @@ -0,0 +1,33 @@ +# +# Resource file Nitrate parameters. +# + +nbins: 5 + +aerosol_radBands_optics_file: ExtData/optics/opticsBands_NI.v2_5.RRTMG.nc +aerosol_monochromatic_optics_file: ExtData/monochromatic/optics_NI.v2_5.nc + +# Scavenging efficiency per bin [km-1] +fscav: 0.0 0.4 0.4 0.4 0.4 + +# Dry particle radius [um], used for settling +particle_radius_microns: 0.0 0.2695 0.2695 2.1 7.57 + +# Dry particle density [kg m-3] +particle_density: 1000 1769 1725 2200 2650 + +# Molecular weight of species [kg mole-1] +molecular_weight: 0.18 0.18 0.18 0.18 0.18 + +# Number of particles per kg mass +fnum: 1.50e19 1.50e19 1.50e19 1.50e19 1.50e19 + +# Number median radius [um] +particle_radius_number: 0.0118 0.0118 0.0118 0.0118 0.0118 + +# Sigma of lognormal number distribution +sigma: 2.0 2.0 2.0 2.0 2.0 + +pressure_lid_in_hPa: 0.01 + +rhFlag: 0 diff --git a/parm/ufs/gocart/SS2G_instance_SS.rc b/parm/ufs/gocart/SS2G_instance_SS.rc new file mode 100644 index 0000000000..d8faa3efa8 --- /dev/null +++ b/parm/ufs/gocart/SS2G_instance_SS.rc @@ -0,0 +1,43 @@ +# +# Resource file Sea Salt parameters +# + +aerosol_radBands_optics_file: ExtData/optics/opticsBands_SS.v3_3.RRTMG.nc +aerosol_monochromatic_optics_file: ExtData/monochromatic/optics_SS.v3_3.nc + +particle_radius_microns: 0.079 0.316 1.119 2.818 7.772 + +radius_lower: 0.03 0.1 0.5 1.5 5.0 + +radius_upper: 0.1 0.5 1.5 5.0 10.0 + +particle_density: 2200. 2200. 2200. 2200. 2200. + +# Scavenging efficiency per bin [km-1] +fscav: 0.4 0.4 0.4 0.4 0.4 + +# Emissions methods and scaling +emission_scheme: 3 # 1 for Gong 2003, 2 for ... +emission_scale: 1.0 1.0 1.0 1.0 1.0 1.0 # a global scaling factor for C96 +sstEmisFlag: 2 # Apply a correction to emissions based on SST (see code) +hoppelFlag: .false. # Apply Hoppel correction (set non-zero, see Fan and Toon 2011) +weibullFlag: .false. # Apply Weibull distribution (set non-zero, see Fan and Toon 2011) + +# Method of apply relative humidity to particle radius +rhFlag: 2 # RH swelling of Seasalt (1 for Fitzgerald 1975, + # 2 for Gerber 1985 method) + +# Molecular weight of species [kg mole-1] +molecular_weight: 0.058 0.058 0.058 0.058 0.058 + +# Number of particles per kg mass +fnum: 3.017e17 1.085e16 1.207e14 9.391e12 2.922e11 + +# Number median radius [um] +particle_radius_number: 0.066 0.176 0.885 2.061 6.901 + +nbins: 5 + +pressure_lid_in_hPa: 0.01 + + diff --git a/parm/ufs/gocart/SU2G_instance_SU.rc b/parm/ufs/gocart/SU2G_instance_SU.rc new file mode 100644 index 0000000000..e365827760 --- /dev/null +++ b/parm/ufs/gocart/SU2G_instance_SU.rc @@ -0,0 +1,53 @@ +# +# Resource file for Sulfer parameters. +# + +aerosol_radBands_optics_file: ExtData/optics/opticsBands_SU.v1_3.RRTMG.nc +aerosol_monochromatic_optics_file: ExtData/monochromatic/optics_SU.v1_3.nc + +nbins: 4 + +# Volcanic pointwise sources +volcano_srcfilen: ExtData/nexus/VOLCANO/v2021-09/%y4/%m2/so2_volcanic_emissions_Carns.%y4%m2%d2.rc + +# Heights [m] of LTO, CDS and CRS aviation emissions layers +aviation_vertical_layers: 0.0 100.0 9.0e3 10.0e3 + +# Fraction of anthropogenic emissions that are SO4 +so4_anthropogenic_fraction: 0.03 + +# Aircraft emission factor: go from kg fuel to kg SO2 +aircraft_fuel_emission_factor: 0.0008 + +# Scavenging efficiency per bin [km-1] (NOT USED UNLESS RAS IS CALLED) +fscav: 0.0 0.0 0.4 0.4 + +# Dry particle radius [um], used for settling +particle_radius_microns: 0.0 0.0 0.35 0.0 + +# Type of settling to use (see Chem_SettlingMod) +rhFlag: 4 + +# Dry particle density [kg m-3] +particle_density: -1 -1 1700 -1 + +pressure_lid_in_hPa: 0.01 + +# Molecular weight of species [kg mole-1] +molecular_weight: -1 -1 0.132 -1 + +# Number of particles per kg mass +fnum: -1 -1 9.01e16 -1 + +# Number median radius [um] +particle_radius_number: -1 -1 0.0695 -1 + +# Sigma of lognormal number distribution +sigma: -1 -1 2.03 -1 + +# OH H2O2 NO3 from GMI Combined Stratosphere Troposphere (Lower case yes to enable) +# ------------------------------------------------------------------------------------- +export_H2O2: no +using_GMI_OH: .false. +using_GMI_NO3: .false. +using_GMI_H2O2: .false. diff --git a/parm/ufs/gocart/gocart_tracer.list b/parm/ufs/gocart/gocart_tracer.list new file mode 100644 index 0000000000..8742aff67c --- /dev/null +++ b/parm/ufs/gocart/gocart_tracer.list @@ -0,0 +1,20 @@ +so2 +so4 +dms +msa +bc1 +bc2 +oc1 +oc2 +dust1 +dust2 +dust3 +dust4 +dust5 +seas1 +seas2 +seas3 +seas4 +seas5 +pm25 +pm10 diff --git a/parm/ufs/mom6/MOM_input_template_025 b/parm/ufs/mom6/MOM_input_template_025 new file mode 100644 index 0000000000..df56a3f486 --- /dev/null +++ b/parm/ufs/mom6/MOM_input_template_025 @@ -0,0 +1,902 @@ +! This input file provides the adjustable run-time parameters for version 6 of the Modular Ocean Model (MOM6). +! Where appropriate, parameters use usually given in MKS units. + +! This particular file is for the example in ice_ocean_SIS2/OM4_025. + +! This MOM_input file typically contains only the non-default values that are needed to reproduce this example. +! A full list of parameters for this example can be found in the corresponding MOM_parameter_doc.all file +! which is generated by the model at run-time. +! === module MOM_domains === +TRIPOLAR_N = True ! [Boolean] default = False + ! Use tripolar connectivity at the northern edge of the domain. With + ! TRIPOLAR_N, NIGLOBAL must be even. +NIGLOBAL = @[NX_GLB] ! + ! The total number of thickness grid points in the x-direction in the physical + ! domain. With STATIC_MEMORY_ this is set in MOM_memory.h at compile time. +NJGLOBAL = @[NY_GLB] ! + ! The total number of thickness grid points in the y-direction in the physical + ! domain. With STATIC_MEMORY_ this is set in MOM_memory.h at compile time. +NIHALO = 4 ! default = 4 + ! The number of halo points on each side in the x-direction. With + ! STATIC_MEMORY_ this is set as NIHALO_ in MOM_memory.h at compile time; without + ! STATIC_MEMORY_ the default is NIHALO_ in MOM_memory.h (if defined) or 2. +NJHALO = 4 ! default = 4 + ! The number of halo points on each side in the y-direction. With + ! STATIC_MEMORY_ this is set as NJHALO_ in MOM_memory.h at compile time; without + ! STATIC_MEMORY_ the default is NJHALO_ in MOM_memory.h (if defined) or 2. +! LAYOUT = 32, 18 ! + ! The processor layout that was actually used. +! IO_LAYOUT = 1, 1 ! default = 1 + ! The processor layout to be used, or 0,0 to automatically set the io_layout to + ! be the same as the layout. + +! === module MOM === +USE_REGRIDDING = True ! [Boolean] default = False + ! If True, use the ALE algorithm (regridding/remapping). If False, use the + ! layered isopycnal algorithm. +THICKNESSDIFFUSE = True ! [Boolean] default = False + ! If true, interface heights are diffused with a coefficient of KHTH. +THICKNESSDIFFUSE_FIRST = True ! [Boolean] default = False + ! If true, do thickness diffusion before dynamics. This is only used if + ! THICKNESSDIFFUSE is true. +DT = @[DT_DYNAM_MOM6] ! [s] + ! The (baroclinic) dynamics time step. The time-step that is actually used will + ! be an integer fraction of the forcing time-step (DT_FORCING in ocean-only mode + ! or the coupling timestep in coupled mode.) +DT_THERM = @[DT_THERM_MOM6] ! [s] default = 1800.0 + ! The thermodynamic and tracer advection time step. Ideally DT_THERM should be + ! an integer multiple of DT and less than the forcing or coupling time-step, + ! unless THERMO_SPANS_COUPLING is true, in which case DT_THERM can be an integer + ! multiple of the coupling timestep. By default DT_THERM is set to DT. +THERMO_SPANS_COUPLING = @[MOM6_THERMO_SPAN] ! [Boolean] default = False + ! If true, the MOM will take thermodynamic and tracer timesteps that can be + ! longer than the coupling timestep. The actual thermodynamic timestep that is + ! used in this case is the largest integer multiple of the coupling timestep + ! that is less than or equal to DT_THERM. +HFREEZE = 20.0 ! [m] default = -1.0 + ! If HFREEZE > 0, melt potential will be computed. The actual depth + ! over which melt potential is computed will be min(HFREEZE, OBLD) + ! where OBLD is the boundary layer depth. If HFREEZE <= 0 (default) + ! melt potential will not be computed. +USE_PSURF_IN_EOS = False ! [Boolean] default = False + ! If true, always include the surface pressure contributions in equation of + ! state calculations. +FRAZIL = True ! [Boolean] default = False + ! If true, water freezes if it gets too cold, and the accumulated heat deficit + ! is returned in the surface state. FRAZIL is only used if + ! ENABLE_THERMODYNAMICS is true. +DO_GEOTHERMAL = True ! [Boolean] default = False + ! If true, apply geothermal heating. +BOUND_SALINITY = True ! [Boolean] default = False + ! If true, limit salinity to being positive. (The sea-ice model may ask for more + ! salt than is available and drive the salinity negative otherwise.) +MIN_SALINITY = 0.01 ! [PPT] default = 0.01 + ! The minimum value of salinity when BOUND_SALINITY=True. The default is 0.01 + ! for backward compatibility but ideally should be 0. +C_P = 3992.0 ! [J kg-1 K-1] default = 3991.86795711963 + ! The heat capacity of sea water, approximated as a constant. This is only used + ! if ENABLE_THERMODYNAMICS is true. The default value is from the TEOS-10 + ! definition of conservative temperature. +CHECK_BAD_SURFACE_VALS = True ! [Boolean] default = False + ! If true, check the surface state for ridiculous values. +BAD_VAL_SSH_MAX = 50.0 ! [m] default = 20.0 + ! The value of SSH above which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SSS_MAX = 75.0 ! [PPT] default = 45.0 + ! The value of SSS above which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SST_MAX = 55.0 ! [deg C] default = 45.0 + ! The value of SST above which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SST_MIN = -3.0 ! [deg C] default = -2.1 + ! The value of SST below which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +DEFAULT_2018_ANSWERS = True ! [Boolean] default = True + ! This sets the default value for the various _2018_ANSWERS parameters. +WRITE_GEOM = 2 ! default = 1 + ! If =0, never write the geometry and vertical grid files. If =1, write the + ! geometry and vertical grid files only for a new simulation. If =2, always + ! write the geometry and vertical grid files. Other values are invalid. +SAVE_INITIAL_CONDS = False ! [Boolean] default = False + ! If true, write the initial conditions to a file given by IC_OUTPUT_FILE. + +! === module MOM_hor_index === +! Sets the horizontal array index types. + +! === module MOM_fixed_initialization === +INPUTDIR = "INPUT" ! default = "." + ! The directory in which input files are found. + +! === module MOM_grid_init === +GRID_CONFIG = "mosaic" ! + ! A character string that determines the method for defining the horizontal + ! grid. Current options are: + ! mosaic - read the grid from a mosaic (supergrid) + ! file set by GRID_FILE. + ! cartesian - use a (flat) Cartesian grid. + ! spherical - use a simple spherical grid. + ! mercator - use a Mercator spherical grid. +GRID_FILE = "ocean_hgrid.nc" ! + ! Name of the file from which to read horizontal grid data. +GRID_ROTATION_ANGLE_BUGS = False ! [Boolean] default = True + ! If true, use an older algorithm to calculate the sine and + ! cosines needed rotate between grid-oriented directions and + ! true north and east. Differences arise at the tripolar fold +USE_TRIPOLAR_GEOLONB_BUG = False ! [Boolean] default = True + ! If true, use older code that incorrectly sets the longitude in some points + ! along the tripolar fold to be off by 360 degrees. +TOPO_CONFIG = "file" ! + ! This specifies how bathymetry is specified: + ! file - read bathymetric information from the file + ! specified by (TOPO_FILE). + ! flat - flat bottom set to MAXIMUM_DEPTH. + ! bowl - an analytically specified bowl-shaped basin + ! ranging between MAXIMUM_DEPTH and MINIMUM_DEPTH. + ! spoon - a similar shape to 'bowl', but with an vertical + ! wall at the southern face. + ! halfpipe - a zonally uniform channel with a half-sine + ! profile in the meridional direction. + ! benchmark - use the benchmark test case topography. + ! Neverland - use the Neverland test case topography. + ! DOME - use a slope and channel configuration for the + ! DOME sill-overflow test case. + ! ISOMIP - use a slope and channel configuration for the + ! ISOMIP test case. + ! DOME2D - use a shelf and slope configuration for the + ! DOME2D gravity current/overflow test case. + ! Kelvin - flat but with rotated land mask. + ! seamount - Gaussian bump for spontaneous motion test case. + ! dumbbell - Sloshing channel with reservoirs on both ends. + ! shelfwave - exponential slope for shelfwave test case. + ! Phillips - ACC-like idealized topography used in the Phillips config. + ! dense - Denmark Strait-like dense water formation and overflow. + ! USER - call a user modified routine. +TOPO_FILE = "ocean_topog.nc" ! default = "topog.nc" + ! The file from which the bathymetry is read. +TOPO_EDITS_FILE = "All_edits.nc" ! default = "" + ! The file from which to read a list of i,j,z topography overrides. +ALLOW_LANDMASK_CHANGES = @[MOM6_ALLOW_LANDMASK_CHANGES] ! default = "False" + ! If true, allow topography overrides to change ocean points to land +MAXIMUM_DEPTH = 6500.0 ! [m] + ! The maximum depth of the ocean. +MINIMUM_DEPTH = 9.5 ! [m] default = 0.0 + ! If MASKING_DEPTH is unspecified, then anything shallower than MINIMUM_DEPTH is + ! assumed to be land and all fluxes are masked out. If MASKING_DEPTH is + ! specified, then all depths shallower than MINIMUM_DEPTH but deeper than + ! MASKING_DEPTH are rounded to MINIMUM_DEPTH. + +! === module MOM_open_boundary === +! Controls where open boundaries are located, what kind of boundary condition to impose, and what data to apply, +! if any. +MASKING_DEPTH = 0.0 ! [m] default = -9999.0 + ! The depth below which to mask points as land points, for which all fluxes are + ! zeroed out. MASKING_DEPTH is ignored if negative. +CHANNEL_CONFIG = "list" ! default = "none" + ! A parameter that determines which set of channels are + ! restricted to specific widths. Options are: + ! none - All channels have the grid width. + ! global_1deg - Sets 16 specific channels appropriate + ! for a 1-degree model, as used in CM2G. + ! list - Read the channel locations and widths from a + ! text file, like MOM_channel_list in the MOM_SIS + ! test case. + ! file - Read open face widths everywhere from a + ! NetCDF file on the model grid. +CHANNEL_LIST_FILE = "MOM_channels_global_025" ! default = "MOM_channel_list" + ! The file from which the list of narrowed channels is read. + +! === module MOM_verticalGrid === +! Parameters providing information about the vertical grid. +NK = 75 ! [nondim] + ! The number of model layers. + +! === module MOM_tracer_registry === + +! === module MOM_EOS === +DTFREEZE_DP = -7.75E-08 ! [deg C Pa-1] default = 0.0 + ! When TFREEZE_FORM=LINEAR, this is the derivative of the freezing potential + ! temperature with pressure. + +! === module MOM_restart === +PARALLEL_RESTARTFILES = True ! [Boolean] default = False + ! If true, each processor writes its own restart file, otherwise a single + ! restart file is generated + +! === module MOM_tracer_flow_control === +USE_IDEAL_AGE_TRACER = False ! [Boolean] default = False + ! If true, use the ideal_age_example tracer package. + +! === module ideal_age_example === + +! === module MOM_coord_initialization === +COORD_CONFIG = "file" ! + ! This specifies how layers are to be defined: + ! ALE or none - used to avoid defining layers in ALE mode + ! file - read coordinate information from the file + ! specified by (COORD_FILE). + ! BFB - Custom coords for buoyancy-forced basin case + ! based on SST_S, T_BOT and DRHO_DT. + ! linear - linear based on interfaces not layers + ! layer_ref - linear based on layer densities + ! ts_ref - use reference temperature and salinity + ! ts_range - use range of temperature and salinity + ! (T_REF and S_REF) to determine surface density + ! and GINT calculate internal densities. + ! gprime - use reference density (RHO_0) for surface + ! density and GINT calculate internal densities. + ! ts_profile - use temperature and salinity profiles + ! (read from COORD_FILE) to set layer densities. + ! USER - call a user modified routine. +COORD_FILE = "layer_coord.nc" ! + ! The file from which the coordinate densities are read. +REMAP_UV_USING_OLD_ALG = True ! [Boolean] default = True + ! If true, uses the old remapping-via-a-delta-z method for remapping u and v. If + ! false, uses the new method that remaps between grids described by an old and + ! new thickness. +REGRIDDING_COORDINATE_MODE = "HYCOM1" ! default = "LAYER" + ! Coordinate mode for vertical regridding. Choose among the following + ! possibilities: LAYER - Isopycnal or stacked shallow water layers + ! ZSTAR, Z* - stretched geopotential z* + ! SIGMA_SHELF_ZSTAR - stretched geopotential z* ignoring shelf + ! SIGMA - terrain following coordinates + ! RHO - continuous isopycnal + ! HYCOM1 - HyCOM-like hybrid coordinate + ! SLIGHT - stretched coordinates above continuous isopycnal + ! ADAPTIVE - optimize for smooth neutral density surfaces +BOUNDARY_EXTRAPOLATION = True ! [Boolean] default = False + ! When defined, a proper high-order reconstruction scheme is used within + ! boundary cells rather than PCM. E.g., if PPM is used for remapping, a PPM + ! reconstruction will also be used within boundary cells. +ALE_COORDINATE_CONFIG = "HYBRID:hycom1_75_800m.nc,sigma2,FNC1:2,4000,4.5,.01" ! default = "UNIFORM" + ! Determines how to specify the coordinate resolution. Valid options are: + ! PARAM - use the vector-parameter ALE_RESOLUTION + ! UNIFORM[:N] - uniformly distributed + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,dz + ! or FILE:lev.nc,interfaces=zw + ! WOA09[:N] - the WOA09 vertical grid (approximately) + ! FNC1:string - FNC1:dz_min,H_total,power,precision + ! HYBRID:string - read from a file. The string specifies + ! the filename and two variable names, separated + ! by a comma or space, for sigma-2 and dz. e.g. + ! HYBRID:vgrid.nc,sigma2,dz +!ALE_RESOLUTION = 7*2.0, 2*2.01, 2.02, 2.03, 2.05, 2.08, 2.11, 2.15, 2.21, 2.2800000000000002, 2.37, 2.48, 2.61, 2.77, 2.95, 3.17, 3.4299999999999997, 3.74, 4.09, 4.49, 4.95, 5.48, 6.07, 6.74, 7.5, 8.34, 9.280000000000001, 10.33, 11.49, 12.77, 14.19, 15.74, 17.450000000000003, 19.31, 21.35, 23.56, 25.97, 28.580000000000002, 31.41, 34.47, 37.77, 41.32, 45.14, 49.25, 53.65, 58.370000000000005, 63.42, 68.81, 74.56, 80.68, 87.21000000000001, 94.14, 101.51, 109.33, 117.62, 126.4, 135.68, 145.5, 155.87, 166.81, 178.35, 190.51, 203.31, 216.78, 230.93, 245.8, 261.42, 277.83 ! [m] + ! The distribution of vertical resolution for the target + ! grid used for Eulerian-like coordinates. For example, + ! in z-coordinate mode, the parameter is a list of level + ! thicknesses (in m). In sigma-coordinate mode, the list + ! is of non-dimensional fractions of the water column. +!TARGET_DENSITIES = 1010.0, 1014.3034, 1017.8088, 1020.843, 1023.5566, 1025.813, 1027.0275, 1027.9114, 1028.6422, 1029.2795, 1029.852, 1030.3762, 1030.8626, 1031.3183, 1031.7486, 1032.1572, 1032.5471, 1032.9207, 1033.2798, 1033.6261, 1033.9608, 1034.2519, 1034.4817, 1034.6774, 1034.8508, 1035.0082, 1035.1533, 1035.2886, 1035.4159, 1035.5364, 1035.6511, 1035.7608, 1035.8661, 1035.9675, 1036.0645, 1036.1554, 1036.2411, 1036.3223, 1036.3998, 1036.4739, 1036.5451, 1036.6137, 1036.68, 1036.7441, 1036.8062, 1036.8526, 1036.8874, 1036.9164, 1036.9418, 1036.9647, 1036.9857, 1037.0052, 1037.0236, 1037.0409, 1037.0574, 1037.0738, 1037.0902, 1037.1066, 1037.123, 1037.1394, 1037.1558, 1037.1722, 1037.1887, 1037.206, 1037.2241, 1037.2435, 1037.2642, 1037.2866, 1037.3112, 1037.3389, 1037.3713, 1037.4118, 1037.475, 1037.6332, 1037.8104, 1038.0 ! [m] + ! HYBRID target densities for interfaces +REGRID_COMPRESSIBILITY_FRACTION = 0.01 ! [nondim] default = 0.0 + ! When interpolating potential density profiles we can add some artificial + ! compressibility solely to make homogeneous regions appear stratified. +MAXIMUM_INT_DEPTH_CONFIG = "FNC1:5,8000.0,1.0,.01" ! default = "NONE" + ! Determines how to specify the maximum interface depths. + ! Valid options are: + ! NONE - there are no maximum interface depths + ! PARAM - use the vector-parameter MAXIMUM_INTERFACE_DEPTHS + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,Z + ! FNC1:string - FNC1:dz_min,H_total,power,precision +!MAXIMUM_INT_DEPTHS = 0.0, 5.0, 12.75, 23.25, 36.49, 52.480000000000004, 71.22, 92.71000000000001, 116.94000000000001, 143.92000000000002, 173.65, 206.13, 241.36, 279.33000000000004, 320.05000000000007, 363.5200000000001, 409.7400000000001, 458.7000000000001, 510.4100000000001, 564.8700000000001, 622.0800000000002, 682.0300000000002, 744.7300000000002, 810.1800000000003, 878.3800000000003, 949.3300000000004, 1023.0200000000004, 1099.4600000000005, 1178.6500000000005, 1260.5900000000006, 1345.2700000000007, 1432.7000000000007, 1522.8800000000008, 1615.8100000000009, 1711.490000000001, 1809.910000000001, 1911.080000000001, 2015.0000000000011, 2121.670000000001, 2231.080000000001, 2343.2400000000007, 2458.1500000000005, 2575.8100000000004, 2696.2200000000003, 2819.3700000000003, 2945.2700000000004, 3073.9200000000005, 3205.3200000000006, 3339.4600000000005, 3476.3500000000004, 3615.9900000000002, 3758.38, 3903.52, 4051.4, 4202.03, 4355.41, 4511.54, 4670.41, 4832.03, 4996.4, 5163.5199999999995, 5333.379999999999, 5505.989999999999, 5681.3499999999985, 5859.459999999998, 6040.319999999998, 6223.919999999998, 6410.269999999999, 6599.369999999999, 6791.219999999999, 6985.8099999999995, 7183.15, 7383.24, 7586.08, 7791.67, 8000.0 + ! The list of maximum depths for each interface. +MAX_LAYER_THICKNESS_CONFIG = "FNC1:400,31000.0,0.1,.01" ! default = "NONE" + ! Determines how to specify the maximum layer thicknesses. + ! Valid options are: + ! NONE - there are no maximum layer thicknesses + ! PARAM - use the vector-parameter MAX_LAYER_THICKNESS + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,Z + ! FNC1:string - FNC1:dz_min,H_total,power,precision +!MAX_LAYER_THICKNESS = 400.0, 409.63, 410.32, 410.75, 411.07, 411.32, 411.52, 411.7, 411.86, 412.0, 412.13, 412.24, 412.35, 412.45, 412.54, 412.63, 412.71, 412.79, 412.86, 412.93, 413.0, 413.06, 413.12, 413.18, 413.24, 413.29, 413.34, 413.39, 413.44, 413.49, 413.54, 413.58, 413.62, 413.67, 413.71, 413.75, 413.78, 413.82, 413.86, 413.9, 413.93, 413.97, 414.0, 414.03, 414.06, 414.1, 414.13, 414.16, 414.19, 414.22, 414.24, 414.27, 414.3, 414.33, 414.35, 414.38, 414.41, 414.43, 414.46, 414.48, 414.51, 414.53, 414.55, 414.58, 414.6, 414.62, 414.65, 414.67, 414.69, 414.71, 414.73, 414.75, 414.77, 414.79, 414.83 ! [m] + ! The list of maximum thickness for each layer. +REMAPPING_SCHEME = "PPM_H4" ! default = "PLM" + ! This sets the reconstruction scheme used for vertical remapping for all + ! variables. It can be one of the following schemes: PCM (1st-order + ! accurate) + ! PLM (2nd-order accurate) + ! PPM_H4 (3rd-order accurate) + ! PPM_IH4 (3rd-order accurate) + ! PQM_IH4IH3 (4th-order accurate) + ! PQM_IH6IH5 (5th-order accurate) + +! === module MOM_grid === +! Parameters providing information about the lateral grid. + +! === module MOM_state_initialization === +INIT_LAYERS_FROM_Z_FILE = True ! [Boolean] default = False + ! If true, initialize the layer thicknesses, temperatures, and salinities from a + ! Z-space file on a latitude-longitude grid. + +! === module MOM_initialize_layers_from_Z === +TEMP_SALT_Z_INIT_FILE = "MOM6_IC_TS.nc" ! default = "temp_salt_z.nc" + ! The name of the z-space input file used to initialize + ! temperatures (T) and salinities (S). If T and S are not + ! in the same file, TEMP_Z_INIT_FILE and SALT_Z_INIT_FILE + ! must be set. +Z_INIT_FILE_PTEMP_VAR = "temp" ! default = "ptemp" + ! The name of the potential temperature variable in + ! TEMP_Z_INIT_FILE. +Z_INIT_FILE_SALT_VAR = "salt" ! default = "salt" + ! The name of the salinity variable in + ! SALT_Z_INIT_FILE. + +Z_INIT_ALE_REMAPPING = True ! [Boolean] default = False + ! If True, then remap straight to model coordinate from file. +Z_INIT_REMAP_OLD_ALG = True ! [Boolean] default = True + ! If false, uses the preferred remapping algorithm for initialization. If true, + ! use an older, less robust algorithm for remapping. + +! === module MOM_diag_mediator === +!Jiande NUM_DIAG_COORDS = 2 ! default = 1 +NUM_DIAG_COORDS = 1 + ! The number of diagnostic vertical coordinates to use. + ! For each coordinate, an entry in DIAG_COORDS must be provided. +!Jiande DIAG_COORDS = "z Z ZSTAR", "rho2 RHO2 RHO" ! +DIAG_COORDS = "z Z ZSTAR" + ! A list of string tuples associating diag_table modules to + ! a coordinate definition used for diagnostics. Each string + ! is of the form "MODULE_SUFFIX,PARAMETER_SUFFIX,COORDINATE_NAME". +DIAG_COORD_DEF_Z="FILE:@[MOM6_DIAG_COORD_DEF_Z_FILE],interfaces=zw" +DIAG_MISVAL = @[MOM6_DIAG_MISVAL] +!DIAG_COORD_DEF_RHO2 = "FILE:diag_rho2.nc,interfaces=rho2" ! default = "WOA09" + ! Determines how to specify the coordinate resolution. Valid options are: + ! PARAM - use the vector-parameter DIAG_COORD_RES_RHO2 + ! UNIFORM[:N] - uniformly distributed + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,dz + ! or FILE:lev.nc,interfaces=zw + ! WOA09[:N] - the WOA09 vertical grid (approximately) + ! FNC1:string - FNC1:dz_min,H_total,power,precision + ! HYBRID:string - read from a file. The string specifies + ! the filename and two variable names, separated + ! by a comma or space, for sigma-2 and dz. e.g. + ! HYBRID:vgrid.nc,sigma2,dz + +! === module MOM_MEKE === +USE_MEKE = True ! [Boolean] default = False + ! If true, turns on the MEKE scheme which calculates a sub-grid mesoscale eddy + ! kinetic energy budget. +MEKE_GMCOEFF = 1.0 ! [nondim] default = -1.0 + ! The efficiency of the conversion of potential energy into MEKE by the + ! thickness mixing parameterization. If MEKE_GMCOEFF is negative, this + ! conversion is not used or calculated. +MEKE_BGSRC = 1.0E-13 ! [W kg-1] default = 0.0 + ! A background energy source for MEKE. +MEKE_KHMEKE_FAC = 1.0 ! [nondim] default = 0.0 + ! A factor that maps MEKE%Kh to Kh for MEKE itself. +MEKE_ALPHA_RHINES = 0.15 ! [nondim] default = 0.05 + ! If positive, is a coefficient weighting the Rhines scale in the expression for + ! mixing length used in MEKE-derived diffusivity. +MEKE_ALPHA_EADY = 0.15 ! [nondim] default = 0.05 + ! If positive, is a coefficient weighting the Eady length scale in the + ! expression for mixing length used in MEKE-derived diffusivity. + +! === module MOM_lateral_mixing_coeffs === +USE_VARIABLE_MIXING = True ! [Boolean] default = False + ! If true, the variable mixing code will be called. This allows diagnostics to + ! be created even if the scheme is not used. If KHTR_SLOPE_CFF>0 or + ! KhTh_Slope_Cff>0, this is set to true regardless of what is in the parameter + ! file. +RESOLN_SCALED_KH = True ! [Boolean] default = False + ! If true, the Laplacian lateral viscosity is scaled away when the first + ! baroclinic deformation radius is well resolved. +RESOLN_SCALED_KHTH = True ! [Boolean] default = False + ! If true, the interface depth diffusivity is scaled away when the first + ! baroclinic deformation radius is well resolved. +KHTR_SLOPE_CFF = 0.25 ! [nondim] default = 0.0 + ! The nondimensional coefficient in the Visbeck formula for the epipycnal tracer + ! diffusivity +USE_STORED_SLOPES = True ! [Boolean] default = False + ! If true, the isopycnal slopes are calculated once and stored for re-use. This + ! uses more memory but avoids calling the equation of state more times than + ! should be necessary. +INTERPOLATE_RES_FN = False ! [Boolean] default = True + ! If true, interpolate the resolution function to the velocity points from the + ! thickness points; otherwise interpolate the wave speed and calculate the + ! resolution function independently at each point. +GILL_EQUATORIAL_LD = True ! [Boolean] default = False + ! If true, uses Gill's definition of the baroclinic equatorial deformation + ! radius, otherwise, if false, use Pedlosky's definition. These definitions + ! differ by a factor of 2 in front of the beta term in the denominator. Gill's + ! is the more appropriate definition. +INTERNAL_WAVE_SPEED_BETTER_EST = False ! [Boolean] default = True + ! If true, use a more robust estimate of the first mode wave speed as the + ! starting point for iterations. + +! === module MOM_set_visc === +CHANNEL_DRAG = True ! [Boolean] default = False + ! If true, the bottom drag is exerted directly on each layer proportional to the + ! fraction of the bottom it overlies. +PRANDTL_TURB = 1.25 ! [nondim] default = 1.0 + ! The turbulent Prandtl number applied to shear instability. +HBBL = 10.0 ! [m] + ! The thickness of a bottom boundary layer with a viscosity of KVBBL if + ! BOTTOMDRAGLAW is not defined, or the thickness over which near-bottom + ! velocities are averaged for the drag law if BOTTOMDRAGLAW is defined but + ! LINEAR_DRAG is not. +DRAG_BG_VEL = 0.1 ! [m s-1] default = 0.0 + ! DRAG_BG_VEL is either the assumed bottom velocity (with LINEAR_DRAG) or an + ! unresolved velocity that is combined with the resolved velocity to estimate + ! the velocity magnitude. DRAG_BG_VEL is only used when BOTTOMDRAGLAW is + ! defined. +BBL_USE_EOS = True ! [Boolean] default = False + ! If true, use the equation of state in determining the properties of the bottom + ! boundary layer. Otherwise use the layer target potential densities. +BBL_THICK_MIN = 0.1 ! [m] default = 0.0 + ! The minimum bottom boundary layer thickness that can be used with + ! BOTTOMDRAGLAW. This might be Kv/(cdrag*drag_bg_vel) to give Kv as the minimum + ! near-bottom viscosity. +KV = 1.0E-04 ! [m2 s-1] + ! The background kinematic viscosity in the interior. The molecular value, ~1e-6 + ! m2 s-1, may be used. +KV_BBL_MIN = 0.0 ! [m2 s-1] default = 1.0E-04 + ! The minimum viscosities in the bottom boundary layer. +KV_TBL_MIN = 0.0 ! [m2 s-1] default = 1.0E-04 + ! The minimum viscosities in the top boundary layer. + +! === module MOM_thickness_diffuse === +KHTH_MAX_CFL = 0.1 ! [nondimensional] default = 0.8 + ! The maximum value of the local diffusive CFL ratio that is permitted for the + ! thickness diffusivity. 1.0 is the marginally unstable value in a pure layered + ! model, but much smaller numbers (e.g. 0.1) seem to work better for ALE-based + ! models. +USE_GM_WORK_BUG = True ! [Boolean] default = True + ! If true, compute the top-layer work tendency on the u-grid with the incorrect + ! sign, for legacy reproducibility. + +! === module MOM_continuity === + +! === module MOM_continuity_PPM === +ETA_TOLERANCE = 1.0E-06 ! [m] default = 3.75E-09 + ! The tolerance for the differences between the barotropic and baroclinic + ! estimates of the sea surface height due to the fluxes through each face. The + ! total tolerance for SSH is 4 times this value. The default is + ! 0.5*NK*ANGSTROM, and this should not be set less than about + ! 10^-15*MAXIMUM_DEPTH. +ETA_TOLERANCE_AUX = 0.001 ! [m] default = 1.0E-06 + ! The tolerance for free-surface height discrepancies between the barotropic + ! solution and the sum of the layer thicknesses when calculating the auxiliary + ! corrected velocities. By default, this is the same as ETA_TOLERANCE, but can + ! be made larger for efficiency. + +! === module MOM_CoriolisAdv === +CORIOLIS_SCHEME = "SADOURNY75_ENSTRO" ! default = "SADOURNY75_ENERGY" + ! CORIOLIS_SCHEME selects the discretization for the Coriolis terms. Valid + ! values are: + ! SADOURNY75_ENERGY - Sadourny, 1975; energy cons. + ! ARAKAWA_HSU90 - Arakawa & Hsu, 1990 + ! SADOURNY75_ENSTRO - Sadourny, 1975; enstrophy cons. + ! ARAKAWA_LAMB81 - Arakawa & Lamb, 1981; En. + Enst. + ! ARAKAWA_LAMB_BLEND - A blend of Arakawa & Lamb with + ! Arakawa & Hsu and Sadourny energy +BOUND_CORIOLIS = True ! [Boolean] default = False + ! If true, the Coriolis terms at u-points are bounded by the four estimates of + ! (f+rv)v from the four neighboring v-points, and similarly at v-points. This + ! option would have no effect on the SADOURNY Coriolis scheme if it were + ! possible to use centered difference thickness fluxes. + +! === module MOM_PressureForce === + +! === module MOM_PressureForce_AFV === +MASS_WEIGHT_IN_PRESSURE_GRADIENT = True ! [Boolean] default = False + ! If true, use mass weighting when interpolating T/S for integrals near the + ! bathymetry in AFV pressure gradient calculations. + +! === module MOM_hor_visc === +LAPLACIAN = True ! [Boolean] default = False + ! If true, use a Laplacian horizontal viscosity. +AH_VEL_SCALE = 0.01 ! [m s-1] default = 0.0 + ! The velocity scale which is multiplied by the cube of the grid spacing to + ! calculate the biharmonic viscosity. The final viscosity is the largest of this + ! scaled viscosity, the Smagorinsky and Leith viscosities, and AH. +SMAGORINSKY_AH = True ! [Boolean] default = False + ! If true, use a biharmonic Smagorinsky nonlinear eddy viscosity. +SMAG_BI_CONST = 0.06 ! [nondim] default = 0.0 + ! The nondimensional biharmonic Smagorinsky constant, typically 0.015 - 0.06. +USE_LAND_MASK_FOR_HVISC = False ! [Boolean] default = False + ! If true, use Use the land mask for the computation of thicknesses at velocity + ! locations. This eliminates the dependence on arbitrary values over land or + ! outside of the domain. Default is False in order to maintain answers with + ! legacy experiments but should be changed to True for new experiments. + +! === module MOM_vert_friction === +HMIX_FIXED = 0.5 ! [m] + ! The prescribed depth over which the near-surface viscosity and diffusivity are + ! elevated when the bulk mixed layer is not used. +KVML = 1.0E-04 ! [m2 s-1] default = 1.0E-04 + ! The kinematic viscosity in the mixed layer. A typical value is ~1e-2 m2 s-1. + ! KVML is not used if BULKMIXEDLAYER is true. The default is set by KV. +MAXVEL = 6.0 ! [m s-1] default = 3.0E+08 + ! The maximum velocity allowed before the velocity components are truncated. + +! === module MOM_PointAccel === +U_TRUNC_FILE = "U_velocity_truncations" ! default = "" + ! The absolute path to a file into which the accelerations leading to zonal + ! velocity truncations are written. Undefine this for efficiency if this + ! diagnostic is not needed. +V_TRUNC_FILE = "V_velocity_truncations" ! default = "" + ! The absolute path to a file into which the accelerations leading to meridional + ! velocity truncations are written. Undefine this for efficiency if this + ! diagnostic is not needed. + +! === module MOM_barotropic === +BOUND_BT_CORRECTION = True ! [Boolean] default = False + ! If true, the corrective pseudo mass-fluxes into the barotropic solver are + ! limited to values that require less than maxCFL_BT_cont to be accommodated. +BT_PROJECT_VELOCITY = True ! [Boolean] default = False + ! If true, step the barotropic velocity first and project out the velocity + ! tendency by 1+BEBT when calculating the transport. The default (false) is to + ! use a predictor continuity step to find the pressure field, and then to do a + ! corrector continuity step using a weighted average of the old and new + ! velocities, with weights of (1-BEBT) and BEBT. +DYNAMIC_SURFACE_PRESSURE = True ! [Boolean] default = False + ! If true, add a dynamic pressure due to a viscous ice shelf, for instance. +BEBT = 0.2 ! [nondim] default = 0.1 + ! BEBT determines whether the barotropic time stepping uses the forward-backward + ! time-stepping scheme or a backward Euler scheme. BEBT is valid in the range + ! from 0 (for a forward-backward treatment of nonrotating gravity waves) to 1 + ! (for a backward Euler treatment). In practice, BEBT must be greater than about + ! 0.05. +DTBT = -0.9 ! [s or nondim] default = -0.98 + ! The barotropic time step, in s. DTBT is only used with the split explicit time + ! stepping. To set the time step automatically based the maximum stable value + ! use 0, or a negative value gives the fraction of the stable value. Setting + ! DTBT to 0 is the same as setting it to -0.98. The value of DTBT that will + ! actually be used is an integer fraction of DT, rounding down. +BT_USE_OLD_CORIOLIS_BRACKET_BUG = True ! [Boolean] default = False + ! If True, use an order of operations that is not bitwise rotationally symmetric + ! in the meridional Coriolis term of the barotropic solver. + +! === module MOM_mixed_layer_restrat === +MIXEDLAYER_RESTRAT = True ! [Boolean] default = False + ! If true, a density-gradient dependent re-stratifying flow is imposed in the + ! mixed layer. Can be used in ALE mode without restriction but in layer mode can + ! only be used if BULKMIXEDLAYER is true. +FOX_KEMPER_ML_RESTRAT_COEF = 1.0 ! [nondim] default = 0.0 + ! A nondimensional coefficient that is proportional to the ratio of the + ! deformation radius to the dominant lengthscale of the submesoscale mixed layer + ! instabilities, times the minimum of the ratio of the mesoscale eddy kinetic + ! energy to the large-scale geostrophic kinetic energy or 1 plus the square of + ! the grid spacing over the deformation radius, as detailed by Fox-Kemper et al. + ! (2010) +MLE_FRONT_LENGTH = 500.0 ! [m] default = 0.0 + ! If non-zero, is the frontal-length scale used to calculate the upscaling of + ! buoyancy gradients that is otherwise represented by the parameter + ! FOX_KEMPER_ML_RESTRAT_COEF. If MLE_FRONT_LENGTH is non-zero, it is recommended + ! to set FOX_KEMPER_ML_RESTRAT_COEF=1.0. +MLE_USE_PBL_MLD = True ! [Boolean] default = False + ! If true, the MLE parameterization will use the mixed-layer depth provided by + ! the active PBL parameterization. If false, MLE will estimate a MLD based on a + ! density difference with the surface using the parameter MLE_DENSITY_DIFF. +MLE_MLD_DECAY_TIME = 2.592E+06 ! [s] default = 0.0 + ! The time-scale for a running-mean filter applied to the mixed-layer depth used + ! in the MLE restratification parameterization. When the MLD deepens below the + ! current running-mean the running-mean is instantaneously set to the current + ! MLD. + +! === module MOM_diabatic_driver === +! The following parameters are used for diabatic processes. +ENERGETICS_SFC_PBL = True ! [Boolean] default = False + ! If true, use an implied energetics planetary boundary layer scheme to + ! determine the diffusivity and viscosity in the surface boundary layer. +EPBL_IS_ADDITIVE = False ! [Boolean] default = True + ! If true, the diffusivity from ePBL is added to all other diffusivities. + ! Otherwise, the larger of kappa-shear and ePBL diffusivities are used. + +! === module MOM_CVMix_KPP === +! This is the MOM wrapper to CVMix:KPP +! See http://cvmix.github.io/ + +! === module MOM_tidal_mixing === +! Vertical Tidal Mixing Parameterization +INT_TIDE_DISSIPATION = True ! [Boolean] default = False + ! If true, use an internal tidal dissipation scheme to drive diapycnal mixing, + ! along the lines of St. Laurent et al. (2002) and Simmons et al. (2004). +INT_TIDE_PROFILE = "POLZIN_09" ! default = "STLAURENT_02" + ! INT_TIDE_PROFILE selects the vertical profile of energy dissipation with + ! INT_TIDE_DISSIPATION. Valid values are: + ! STLAURENT_02 - Use the St. Laurent et al exponential + ! decay profile. + ! POLZIN_09 - Use the Polzin WKB-stretched algebraic + ! decay profile. +INT_TIDE_DECAY_SCALE = 300.3003003003003 ! [m] default = 500.0 + ! The decay scale away from the bottom for tidal TKE with the new coding when + ! INT_TIDE_DISSIPATION is used. +KAPPA_ITIDES = 6.28319E-04 ! [m-1] default = 6.283185307179586E-04 + ! A topographic wavenumber used with INT_TIDE_DISSIPATION. The default is 2pi/10 + ! km, as in St.Laurent et al. 2002. +KAPPA_H2_FACTOR = 0.84 ! [nondim] default = 1.0 + ! A scaling factor for the roughness amplitude with INT_TIDE_DISSIPATION. +TKE_ITIDE_MAX = 0.1 ! [W m-2] default = 1000.0 + ! The maximum internal tide energy source available to mix above the bottom + ! boundary layer with INT_TIDE_DISSIPATION. +READ_TIDEAMP = True ! [Boolean] default = False + ! If true, read a file (given by TIDEAMP_FILE) containing the tidal amplitude + ! with INT_TIDE_DISSIPATION. +TIDEAMP_FILE = "tidal_amplitude.v20140616.nc" ! default = "tideamp.nc" + ! The path to the file containing the spatially varying tidal amplitudes with + ! INT_TIDE_DISSIPATION. +H2_FILE = "ocean_topog.nc" ! + ! The path to the file containing the sub-grid-scale topographic roughness + ! amplitude with INT_TIDE_DISSIPATION. + +! === module MOM_CVMix_conv === +! Parameterization of enhanced mixing due to convection via CVMix + +! === module MOM_geothermal === +GEOTHERMAL_SCALE = 1.0 ! [W m-2 or various] default = 0.0 + ! The constant geothermal heat flux, a rescaling factor for the heat flux read + ! from GEOTHERMAL_FILE, or 0 to disable the geothermal heating. +GEOTHERMAL_FILE = "geothermal_davies2013_v1.nc" ! default = "" + ! The file from which the geothermal heating is to be read, or blank to use a + ! constant heating rate. +GEOTHERMAL_VARNAME = "geothermal_hf" ! default = "geo_heat" + ! The name of the geothermal heating variable in GEOTHERMAL_FILE. + +! === module MOM_set_diffusivity === +BBL_MIXING_AS_MAX = False ! [Boolean] default = True + ! If true, take the maximum of the diffusivity from the BBL mixing and the other + ! diffusivities. Otherwise, diffusivity from the BBL_mixing is simply added. +USE_LOTW_BBL_DIFFUSIVITY = True ! [Boolean] default = False + ! If true, uses a simple, imprecise but non-coordinate dependent, model of BBL + ! mixing diffusivity based on Law of the Wall. Otherwise, uses the original BBL + ! scheme. +SIMPLE_TKE_TO_KD = True ! [Boolean] default = False + ! If true, uses a simple estimate of Kd/TKE that will work for arbitrary + ! vertical coordinates. If false, calculates Kd/TKE and bounds based on exact + ! energetics for an isopycnal layer-formulation. + +! === module MOM_bkgnd_mixing === +! Adding static vertical background mixing coefficients +KD = 1.5E-05 ! [m2 s-1] + ! The background diapycnal diffusivity of density in the interior. Zero or the + ! molecular value, ~1e-7 m2 s-1, may be used. +KD_MIN = 2.0E-06 ! [m2 s-1] default = 1.5E-07 + ! The minimum diapycnal diffusivity. +HENYEY_IGW_BACKGROUND = True ! [Boolean] default = False + ! If true, use a latitude-dependent scaling for the near surface background + ! diffusivity, as described in Harrison & Hallberg, JPO 2008. +KD_MAX = 0.1 ! [m2 s-1] default = -1.0 + ! The maximum permitted increment for the diapycnal diffusivity from TKE-based + ! parameterizations, or a negative value for no limit. + +! === module MOM_kappa_shear === +! Parameterization of shear-driven turbulence following Jackson, Hallberg and Legg, JPO 2008 +USE_JACKSON_PARAM = True ! [Boolean] default = False + ! If true, use the Jackson-Hallberg-Legg (JPO 2008) shear mixing + ! parameterization. +MAX_RINO_IT = 25 ! [nondim] default = 50 + ! The maximum number of iterations that may be used to estimate the Richardson + ! number driven mixing. +VERTEX_SHEAR = False ! [Boolean] default = False + ! If true, do the calculations of the shear-driven mixing + ! at the cell vertices (i.e., the vorticity points). +KAPPA_SHEAR_ITER_BUG = True ! [Boolean] default = True + ! If true, use an older, dimensionally inconsistent estimate of the derivative + ! of diffusivity with energy in the Newton's method iteration. The bug causes + ! undercorrections when dz > 1 m. +KAPPA_SHEAR_ALL_LAYER_TKE_BUG = True ! [Boolean] default = True + ! If true, report back the latest estimate of TKE instead of the time average + ! TKE when there is mass in all layers. Otherwise always report the time + ! averaged TKE, as is currently done when there are some massless layers. + +! === module MOM_CVMix_shear === +! Parameterization of shear-driven turbulence via CVMix (various options) + +! === module MOM_CVMix_ddiff === +! Parameterization of mixing due to double diffusion processes via CVMix + +! === module MOM_diabatic_aux === +! The following parameters are used for auxiliary diabatic processes. +PRESSURE_DEPENDENT_FRAZIL = False ! [Boolean] default = False + ! If true, use a pressure dependent freezing temperature when making frazil. The + ! default is false, which will be faster but is inappropriate with ice-shelf + ! cavities. +VAR_PEN_SW = True ! [Boolean] default = False + ! If true, use one of the CHL_A schemes specified by OPACITY_SCHEME to determine + ! the e-folding depth of incoming short wave radiation. +CHL_FILE = @[CHLCLIM] ! + ! CHL_FILE is the file containing chl_a concentrations in the variable CHL_A. It + ! is used when VAR_PEN_SW and CHL_FROM_FILE are true. +CHL_VARNAME = "chlor_a" ! default = "CHL_A" + ! Name of CHL_A variable in CHL_FILE. + +! === module MOM_energetic_PBL === +ML_OMEGA_FRAC = 0.001 ! [nondim] default = 0.0 + ! When setting the decay scale for turbulence, use this fraction of the absolute + ! rotation rate blended with the local value of f, as sqrt((1-of)*f^2 + + ! of*4*omega^2). +TKE_DECAY = 0.01 ! [nondim] default = 2.5 + ! TKE_DECAY relates the vertical rate of decay of the TKE available for + ! mechanical entrainment to the natural Ekman depth. +EPBL_MSTAR_SCHEME = "OM4" ! default = "CONSTANT" + ! EPBL_MSTAR_SCHEME selects the method for setting mstar. Valid values are: + ! CONSTANT - Use a fixed mstar given by MSTAR + ! OM4 - Use L_Ekman/L_Obukhov in the sabilizing limit, as in OM4 + ! REICHL_H18 - Use the scheme documented in Reichl & Hallberg, 2018. +MSTAR_CAP = 10.0 ! [nondim] default = -1.0 + ! If this value is positive, it sets the maximum value of mstar allowed in ePBL. + ! (This is not used if EPBL_MSTAR_SCHEME = CONSTANT). +MSTAR2_COEF1 = 0.29 ! [nondim] default = 0.3 + ! Coefficient in computing mstar when rotation and stabilizing effects are both + ! important (used if EPBL_MSTAR_SCHEME = OM4). +MSTAR2_COEF2 = 0.152 ! [nondim] default = 0.085 + ! Coefficient in computing mstar when only rotation limits the total mixing + ! (used if EPBL_MSTAR_SCHEME = OM4) +NSTAR = 0.06 ! [nondim] default = 0.2 + ! The portion of the buoyant potential energy imparted by surface fluxes that is + ! available to drive entrainment at the base of mixed layer when that energy is + ! positive. +EPBL_MLD_BISECTION = True ! [Boolean] default = False + ! If true, use bisection with the iterative determination of the self-consistent + ! mixed layer depth. Otherwise use the false position after a maximum and + ! minimum bound have been evaluated and the returned value or bisection before + ! this. +MSTAR_CONV_ADJ = 0.667 ! [nondim] default = 0.0 + ! Coefficient used for reducing mstar during convection due to reduction of + ! stable density gradient. +USE_MLD_ITERATION = True ! [Boolean] default = False + ! A logical that specifies whether or not to use the distance to the bottom of + ! the actively turbulent boundary layer to help set the EPBL length scale. +EPBL_TRANSITION_SCALE = 0.01 ! [nondim] default = 0.1 + ! A scale for the mixing length in the transition layer at the edge of the + ! boundary layer as a fraction of the boundary layer thickness. +MIX_LEN_EXPONENT = 1.0 ! [nondim] default = 2.0 + ! The exponent applied to the ratio of the distance to the MLD and the MLD depth + ! which determines the shape of the mixing length. This is only used if + ! USE_MLD_ITERATION is True. +USE_LA_LI2016 = @[MOM6_USE_LI2016] ! [nondim] default = False + ! A logical to use the Li et al. 2016 (submitted) formula to determine the + ! Langmuir number. +USE_WAVES = @[MOM6_USE_WAVES] ! [Boolean] default = False + ! If true, enables surface wave modules. +WAVE_METHOD = "SURFACE_BANDS" ! default = "EMPTY" + ! Choice of wave method, valid options include: + ! TEST_PROFILE - Prescribed from surface Stokes drift + ! and a decay wavelength. + ! SURFACE_BANDS - Computed from multiple surface values + ! and decay wavelengths. + ! DHH85 - Uses Donelan et al. 1985 empirical + ! wave spectrum with prescribed values. + ! LF17 - Infers Stokes drift profile from wind + ! speed following Li and Fox-Kemper 2017. +SURFBAND_SOURCE = "COUPLER" ! default = "EMPTY" + ! Choice of SURFACE_BANDS data mode, valid options include: + ! DATAOVERRIDE - Read from NetCDF using FMS DataOverride. + ! COUPLER - Look for variables from coupler pass + ! INPUT - Testing with fixed values. +STK_BAND_COUPLER = 3 ! default = 1 + ! STK_BAND_COUPLER is the number of Stokes drift bands in the coupler. This has + ! to be consistent with the number of Stokes drift bands in WW3, or the model + ! will fail. +SURFBAND_WAVENUMBERS = 0.04, 0.11, 0.3305 ! [rad/m] default = 0.12566 + ! Central wavenumbers for surface Stokes drift bands. +EPBL_LANGMUIR_SCHEME = "ADDITIVE" ! default = "NONE" + ! EPBL_LANGMUIR_SCHEME selects the method for including Langmuir turbulence. + ! Valid values are: + ! NONE - Do not do any extra mixing due to Langmuir turbulence + ! RESCALE - Use a multiplicative rescaling of mstar to account for Langmuir + ! turbulence + ! ADDITIVE - Add a Langmuir turblence contribution to mstar to other + ! contributions +LT_ENHANCE_COEF = 0.044 ! [nondim] default = 0.447 + ! Coefficient for Langmuir enhancement of mstar +LT_ENHANCE_EXP = -1.5 ! [nondim] default = -1.33 + ! Exponent for Langmuir enhancementt of mstar +LT_MOD_LAC1 = 0.0 ! [nondim] default = -0.87 + ! Coefficient for modification of Langmuir number due to MLD approaching Ekman + ! depth. +LT_MOD_LAC4 = 0.0 ! [nondim] default = 0.95 + ! Coefficient for modification of Langmuir number due to ratio of Ekman to + ! stable Obukhov depth. +LT_MOD_LAC5 = 0.22 ! [nondim] default = 0.95 + ! Coefficient for modification of Langmuir number due to ratio of Ekman to + ! unstable Obukhov depth. + +! === module MOM_regularize_layers === + +! === module MOM_opacity === +PEN_SW_NBANDS = 3 ! default = 1 + ! The number of bands of penetrating shortwave radiation. + +! === module MOM_tracer_advect === +TRACER_ADVECTION_SCHEME = "PPM:H3" ! default = "PLM" + ! The horizontal transport scheme for tracers: + ! PLM - Piecewise Linear Method + ! PPM:H3 - Piecewise Parabolic Method (Huyhn 3rd order) + ! PPM - Piecewise Parabolic Method (Colella-Woodward) + +! === module MOM_tracer_hor_diff === +CHECK_DIFFUSIVE_CFL = True ! [Boolean] default = False + ! If true, use enough iterations the diffusion to ensure that the diffusive + ! equivalent of the CFL limit is not violated. If false, always use the greater + ! of 1 or MAX_TR_DIFFUSION_CFL iteration. + +! === module MOM_neutral_diffusion === +! This module implements neutral diffusion of tracers + +! === module MOM_lateral_boundary_diffusion === +! This module implements lateral diffusion of tracers near boundaries + +! === module MOM_sum_output === +MAXTRUNC = 100000 ! [truncations save_interval-1] default = 0 + ! The run will be stopped, and the day set to a very large value if the velocity + ! is truncated more than MAXTRUNC times between energy saves. Set MAXTRUNC to 0 + ! to stop if there is any truncation of velocities. +ENERGYSAVEDAYS = 1.00 ! [days] default = 1.0 + ! The interval in units of TIMEUNIT between saves of the energies of the run and + ! other globally summed diagnostics. + +! === module ocean_model_init === + +! === module MOM_oda_incupd === +ODA_INCUPD = @[ODA_INCUPD] ! [Boolean] default = False + ! If true, oda incremental updates will be applied + ! everywhere in the domain. +ODA_INCUPD_FILE = "mom6_increment.nc" ! The name of the file with the T,S,h increments. + +ODA_TEMPINC_VAR = "Temp" ! default = "ptemp_inc" + ! The name of the potential temperature inc. variable in + ! ODA_INCUPD_FILE. +ODA_SALTINC_VAR = "Salt" ! default = "sal_inc" + ! The name of the salinity inc. variable in + ! ODA_INCUPD_FILE. +ODA_THK_VAR = "h" ! default = "h" + ! The name of the int. depth inc. variable in + ! ODA_INCUPD_FILE. +ODA_INCUPD_UV = true ! +ODA_UINC_VAR = "u" ! default = "u_inc" + ! The name of the zonal vel. inc. variable in + ! ODA_INCUPD_UV_FILE. +ODA_VINC_VAR = "v" ! default = "v_inc" + ! The name of the meridional vel. inc. variable in + ! ODA_INCUPD_UV_FILE. +ODA_INCUPD_NHOURS = @[ODA_INCUPD_NHOURS] ! default=3.0 + +! === module MOM_surface_forcing === +OCEAN_SURFACE_STAGGER = "A" ! default = "C" + ! A case-insensitive character string to indicate the + ! staggering of the surface velocity field that is + ! returned to the coupler. Valid values include + ! 'A', 'B', or 'C'. + +MAX_P_SURF = 0.0 ! [Pa] default = -1.0 + ! The maximum surface pressure that can be exerted by the atmosphere and + ! floating sea-ice or ice shelves. This is needed because the FMS coupling + ! structure does not limit the water that can be frozen out of the ocean and the + ! ice-ocean heat fluxes are treated explicitly. No limit is applied if a + ! negative value is used. +WIND_STAGGER = "A" ! default = "C" + ! A case-insensitive character string to indicate the + ! staggering of the input wind stress field. Valid + ! values are 'A', 'B', or 'C'. +CD_TIDES = 0.0018 ! [nondim] default = 1.0E-04 + ! The drag coefficient that applies to the tides. +GUST_CONST = 0.0 ! [Pa] default = 0.02 + ! The background gustiness in the winds. +FIX_USTAR_GUSTLESS_BUG = False ! [Boolean] default = False + ! If true correct a bug in the time-averaging of the gustless wind friction + ! velocity +USE_RIGID_SEA_ICE = True ! [Boolean] default = False + ! If true, sea-ice is rigid enough to exert a nonhydrostatic pressure that + ! resist vertical motion. +SEA_ICE_RIGID_MASS = 100.0 ! [kg m-2] default = 1000.0 + ! The mass of sea-ice per unit area at which the sea-ice starts to exhibit + ! rigidity +LIQUID_RUNOFF_FROM_DATA = @[MOM6_RIVER_RUNOFF] ! [Boolean] default = False + ! If true, allows liquid river runoff to be specified via + ! the data_table using the component name 'OCN'. +! === module ocean_stochastics === +DO_SPPT = @[DO_OCN_SPPT] ! [Boolean] default = False + ! If true perturb the diabatic tendencies in MOM_diabatic_driver +PERT_EPBL = @[PERT_EPBL] ! [Boolean] default = False + ! If true perturb the KE dissipation and destruction in MOM_energetic_PBL +! === module MOM_restart === +RESTART_CHECKSUMS_REQUIRED = False +! === module MOM_file_parser === diff --git a/parm/ufs/mom6/MOM_input_template_050 b/parm/ufs/mom6/MOM_input_template_050 new file mode 100644 index 0000000000..4c39198c02 --- /dev/null +++ b/parm/ufs/mom6/MOM_input_template_050 @@ -0,0 +1,947 @@ +! This input file provides the adjustable run-time parameters for version 6 of the Modular Ocean Model (MOM6). +! Where appropriate, parameters use usually given in MKS units. + +! This particular file is for the example in ice_ocean_SIS2/OM4_05. + +! This MOM_input file typically contains only the non-default values that are needed to reproduce this example. +! A full list of parameters for this example can be found in the corresponding MOM_parameter_doc.all file +! which is generated by the model at run-time. +! === module MOM_domains === +TRIPOLAR_N = True ! [Boolean] default = False + ! Use tripolar connectivity at the northern edge of the domain. With + ! TRIPOLAR_N, NIGLOBAL must be even. +NIGLOBAL = @[NX_GLB] ! + ! The total number of thickness grid points in the x-direction in the physical + ! domain. With STATIC_MEMORY_ this is set in MOM_memory.h at compile time. +NJGLOBAL = @[NY_GLB] ! + ! The total number of thickness grid points in the y-direction in the physical + ! domain. With STATIC_MEMORY_ this is set in MOM_memory.h at compile time. +NIHALO = 4 ! default = 4 + ! The number of halo points on each side in the x-direction. With + ! STATIC_MEMORY_ this is set as NIHALO_ in MOM_memory.h at compile time; without + ! STATIC_MEMORY_ the default is NIHALO_ in MOM_memory.h (if defined) or 2. +NJHALO = 4 ! default = 4 + ! The number of halo points on each side in the y-direction. With + ! STATIC_MEMORY_ this is set as NJHALO_ in MOM_memory.h at compile time; without + ! STATIC_MEMORY_ the default is NJHALO_ in MOM_memory.h (if defined) or 2. +! LAYOUT = 21, 20 ! + ! The processor layout that was actually used. +! IO_LAYOUT = 1, 1 ! default = 1 + ! The processor layout to be used, or 0,0 to automatically set the io_layout to + ! be the same as the layout. + +! === module MOM === +USE_REGRIDDING = True ! [Boolean] default = False + ! If True, use the ALE algorithm (regridding/remapping). If False, use the + ! layered isopycnal algorithm. +THICKNESSDIFFUSE = True ! [Boolean] default = False + ! If true, interface heights are diffused with a coefficient of KHTH. +THICKNESSDIFFUSE_FIRST = True ! [Boolean] default = False + ! If true, do thickness diffusion before dynamics. This is only used if + ! THICKNESSDIFFUSE is true. +DT = @[DT_DYNAM_MOM6] ! [s] + ! The (baroclinic) dynamics time step. The time-step that is actually used will + ! be an integer fraction of the forcing time-step (DT_FORCING in ocean-only mode + ! or the coupling timestep in coupled mode.) +DT_THERM = @[DT_THERM_MOM6] ! [s] default = 1800.0 + ! The thermodynamic and tracer advection time step. Ideally DT_THERM should be + ! an integer multiple of DT and less than the forcing or coupling time-step, + ! unless THERMO_SPANS_COUPLING is true, in which case DT_THERM can be an integer + ! multiple of the coupling timestep. By default DT_THERM is set to DT. +THERMO_SPANS_COUPLING = @[MOM6_THERMO_SPAN] ! [Boolean] default = False + ! If true, the MOM will take thermodynamic and tracer timesteps that can be + ! longer than the coupling timestep. The actual thermodynamic timestep that is + ! used in this case is the largest integer multiple of the coupling timestep + ! that is less than or equal to DT_THERM. +HFREEZE = 20.0 ! [m] default = -1.0 + ! If HFREEZE > 0, melt potential will be computed. The actual depth + ! over which melt potential is computed will be min(HFREEZE, OBLD) + ! where OBLD is the boundary layer depth. If HFREEZE <= 0 (default) + ! melt potential will not be computed. +USE_PSURF_IN_EOS = False ! [Boolean] default = False + ! If true, always include the surface pressure contributions in equation of + ! state calculations. +FRAZIL = True ! [Boolean] default = False + ! If true, water freezes if it gets too cold, and the accumulated heat deficit + ! is returned in the surface state. FRAZIL is only used if + ! ENABLE_THERMODYNAMICS is true. +DO_GEOTHERMAL = True ! [Boolean] default = False + ! If true, apply geothermal heating. +BOUND_SALINITY = True ! [Boolean] default = False + ! If true, limit salinity to being positive. (The sea-ice model may ask for more + ! salt than is available and drive the salinity negative otherwise.) +MIN_SALINITY = 0.01 ! [PPT] default = 0.01 + ! The minimum value of salinity when BOUND_SALINITY=True. The default is 0.01 + ! for backward compatibility but ideally should be 0. +C_P = 3992.0 ! [J kg-1 K-1] default = 3991.86795711963 + ! The heat capacity of sea water, approximated as a constant. This is only used + ! if ENABLE_THERMODYNAMICS is true. The default value is from the TEOS-10 + ! definition of conservative temperature. +CHECK_BAD_SURFACE_VALS = True ! [Boolean] default = False + ! If true, check the surface state for ridiculous values. +BAD_VAL_SSH_MAX = 50.0 ! [m] default = 20.0 + ! The value of SSH above which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SSS_MAX = 75.0 ! [PPT] default = 45.0 + ! The value of SSS above which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SST_MAX = 55.0 ! [deg C] default = 45.0 + ! The value of SST above which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SST_MIN = -3.0 ! [deg C] default = -2.1 + ! The value of SST below which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +DEFAULT_2018_ANSWERS = True ! [Boolean] default = True + ! This sets the default value for the various _2018_ANSWERS parameters. +WRITE_GEOM = 2 ! default = 1 + ! If =0, never write the geometry and vertical grid files. If =1, write the + ! geometry and vertical grid files only for a new simulation. If =2, always + ! write the geometry and vertical grid files. Other values are invalid. +SAVE_INITIAL_CONDS = False ! [Boolean] default = False + ! If true, write the initial conditions to a file given by IC_OUTPUT_FILE. + +! === module MOM_hor_index === +! Sets the horizontal array index types. + +! === module MOM_fixed_initialization === +INPUTDIR = "INPUT" ! default = "." + ! The directory in which input files are found. + +! === module MOM_grid_init === +GRID_CONFIG = "mosaic" ! + ! A character string that determines the method for defining the horizontal + ! grid. Current options are: + ! mosaic - read the grid from a mosaic (supergrid) + ! file set by GRID_FILE. + ! cartesian - use a (flat) Cartesian grid. + ! spherical - use a simple spherical grid. + ! mercator - use a Mercator spherical grid. +GRID_FILE = "ocean_hgrid.nc" ! + ! Name of the file from which to read horizontal grid data. +GRID_ROTATION_ANGLE_BUGS = False ! [Boolean] default = True + ! If true, use an older algorithm to calculate the sine and + ! cosines needed rotate between grid-oriented directions and + ! true north and east. Differences arise at the tripolar fold +USE_TRIPOLAR_GEOLONB_BUG = False ! [Boolean] default = True + ! If true, use older code that incorrectly sets the longitude in some points + ! along the tripolar fold to be off by 360 degrees. +TOPO_CONFIG = "file" ! + ! This specifies how bathymetry is specified: + ! file - read bathymetric information from the file + ! specified by (TOPO_FILE). + ! flat - flat bottom set to MAXIMUM_DEPTH. + ! bowl - an analytically specified bowl-shaped basin + ! ranging between MAXIMUM_DEPTH and MINIMUM_DEPTH. + ! spoon - a similar shape to 'bowl', but with an vertical + ! wall at the southern face. + ! halfpipe - a zonally uniform channel with a half-sine + ! profile in the meridional direction. + ! benchmark - use the benchmark test case topography. + ! Neverland - use the Neverland test case topography. + ! DOME - use a slope and channel configuration for the + ! DOME sill-overflow test case. + ! ISOMIP - use a slope and channel configuration for the + ! ISOMIP test case. + ! DOME2D - use a shelf and slope configuration for the + ! DOME2D gravity current/overflow test case. + ! Kelvin - flat but with rotated land mask. + ! seamount - Gaussian bump for spontaneous motion test case. + ! dumbbell - Sloshing channel with reservoirs on both ends. + ! shelfwave - exponential slope for shelfwave test case. + ! Phillips - ACC-like idealized topography used in the Phillips config. + ! dense - Denmark Strait-like dense water formation and overflow. + ! USER - call a user modified routine. +TOPO_FILE = "ocean_topog.nc" ! default = "topog.nc" + ! The file from which the bathymetry is read. +ALLOW_LANDMASK_CHANGES = @[MOM6_ALLOW_LANDMASK_CHANGES] ! default = "False" + ! If true, allow topography overrides to change ocean points to land +MAXIMUM_DEPTH = 6500.0 ! [m] + ! The maximum depth of the ocean. +MINIMUM_DEPTH = 9.5 ! [m] default = 0.0 + ! If MASKING_DEPTH is unspecified, then anything shallower than MINIMUM_DEPTH is + ! assumed to be land and all fluxes are masked out. If MASKING_DEPTH is + ! specified, then all depths shallower than MINIMUM_DEPTH but deeper than + ! MASKING_DEPTH are rounded to MINIMUM_DEPTH. + +! === module MOM_open_boundary === +! Controls where open boundaries are located, what kind of boundary condition to impose, and what data to apply, +! if any. +MASKING_DEPTH = 0.0 ! [m] default = -9999.0 + ! The depth below which to mask points as land points, for which all fluxes are + ! zeroed out. MASKING_DEPTH is ignored if negative. +CHANNEL_CONFIG = "list" ! default = "none" + ! A parameter that determines which set of channels are + ! restricted to specific widths. Options are: + ! none - All channels have the grid width. + ! global_1deg - Sets 16 specific channels appropriate + ! for a 1-degree model, as used in CM2G. + ! list - Read the channel locations and widths from a + ! text file, like MOM_channel_list in the MOM_SIS + ! test case. + ! file - Read open face widths everywhere from a + ! NetCDF file on the model grid. +CHANNEL_LIST_FILE = "MOM_channels_global_025" ! default = "MOM_channel_list" + ! The file from which the list of narrowed channels is read. + +! === module MOM_verticalGrid === +! Parameters providing information about the vertical grid. +NK = 75 ! [nondim] + ! The number of model layers. + +! === module MOM_tracer_registry === + +! === module MOM_EOS === +DTFREEZE_DP = -7.75E-08 ! [deg C Pa-1] default = 0.0 + ! When TFREEZE_FORM=LINEAR, this is the derivative of the freezing potential + ! temperature with pressure. + +! === module MOM_restart === +PARALLEL_RESTARTFILES = True ! [Boolean] default = False + ! If true, each processor writes its own restart file, otherwise a single + ! restart file is generated + +! === module MOM_tracer_flow_control === +USE_IDEAL_AGE_TRACER = False ! [Boolean] default = False + ! If true, use the ideal_age_example tracer package. + +! === module ideal_age_example === + +! === module MOM_coord_initialization === +COORD_CONFIG = "file" ! + ! This specifies how layers are to be defined: + ! ALE or none - used to avoid defining layers in ALE mode + ! file - read coordinate information from the file + ! specified by (COORD_FILE). + ! BFB - Custom coords for buoyancy-forced basin case + ! based on SST_S, T_BOT and DRHO_DT. + ! linear - linear based on interfaces not layers + ! layer_ref - linear based on layer densities + ! ts_ref - use reference temperature and salinity + ! ts_range - use range of temperature and salinity + ! (T_REF and S_REF) to determine surface density + ! and GINT calculate internal densities. + ! gprime - use reference density (RHO_0) for surface + ! density and GINT calculate internal densities. + ! ts_profile - use temperature and salinity profiles + ! (read from COORD_FILE) to set layer densities. + ! USER - call a user modified routine. +COORD_FILE = "layer_coord.nc" ! + ! The file from which the coordinate densities are read. +REMAP_UV_USING_OLD_ALG = True ! [Boolean] default = True + ! If true, uses the old remapping-via-a-delta-z method for remapping u and v. If + ! false, uses the new method that remaps between grids described by an old and + ! new thickness. +REGRIDDING_COORDINATE_MODE = "HYCOM1" ! default = "LAYER" + ! Coordinate mode for vertical regridding. Choose among the following + ! possibilities: LAYER - Isopycnal or stacked shallow water layers + ! ZSTAR, Z* - stretched geopotential z* + ! SIGMA_SHELF_ZSTAR - stretched geopotential z* ignoring shelf + ! SIGMA - terrain following coordinates + ! RHO - continuous isopycnal + ! HYCOM1 - HyCOM-like hybrid coordinate + ! SLIGHT - stretched coordinates above continuous isopycnal + ! ADAPTIVE - optimize for smooth neutral density surfaces +BOUNDARY_EXTRAPOLATION = True ! [Boolean] default = False + ! When defined, a proper high-order reconstruction scheme is used within + ! boundary cells rather than PCM. E.g., if PPM is used for remapping, a PPM + ! reconstruction will also be used within boundary cells. +ALE_COORDINATE_CONFIG = "HYBRID:hycom1_75_800m.nc,sigma2,FNC1:2,4000,4.5,.01" ! default = "UNIFORM" + ! Determines how to specify the coordinate resolution. Valid options are: + ! PARAM - use the vector-parameter ALE_RESOLUTION + ! UNIFORM[:N] - uniformly distributed + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,dz + ! or FILE:lev.nc,interfaces=zw + ! WOA09[:N] - the WOA09 vertical grid (approximately) + ! FNC1:string - FNC1:dz_min,H_total,power,precision + ! HYBRID:string - read from a file. The string specifies + ! the filename and two variable names, separated + ! by a comma or space, for sigma-2 and dz. e.g. + ! HYBRID:vgrid.nc,sigma2,dz +!ALE_RESOLUTION = 7*2.0, 2*2.01, 2.02, 2.03, 2.05, 2.08, 2.11, 2.15, 2.21, 2.2800000000000002, 2.37, 2.48, 2.61, 2.77, 2.95, 3.17, 3.4299999999999997, 3.74, 4.09, 4.49, 4.95, 5.48, 6.07, 6.74, 7.5, 8.34, 9.280000000000001, 10.33, 11.49, 12.77, 14.19, 15.74, 17.450000000000003, 19.31, 21.35, 23.56, 25.97, 28.580000000000002, 31.41, 34.47, 37.77, 41.32, 45.14, 49.25, 53.65, 58.370000000000005, 63.42, 68.81, 74.56, 80.68, 87.21000000000001, 94.14, 101.51, 109.33, 117.62, 126.4, 135.68, 145.5, 155.87, 166.81, 178.35, 190.51, 203.31, 216.78, 230.93, 245.8, 261.42, 277.83 ! [m] + ! The distribution of vertical resolution for the target + ! grid used for Eulerian-like coordinates. For example, + ! in z-coordinate mode, the parameter is a list of level + ! thicknesses (in m). In sigma-coordinate mode, the list + ! is of non-dimensional fractions of the water column. +!TARGET_DENSITIES = 1010.0, 1014.3034, 1017.8088, 1020.843, 1023.5566, 1025.813, 1027.0275, 1027.9114, 1028.6422, 1029.2795, 1029.852, 1030.3762, 1030.8626, 1031.3183, 1031.7486, 1032.1572, 1032.5471, 1032.9207, 1033.2798, 1033.6261, 1033.9608, 1034.2519, 1034.4817, 1034.6774, 1034.8508, 1035.0082, 1035.1533, 1035.2886, 1035.4159, 1035.5364, 1035.6511, 1035.7608, 1035.8661, 1035.9675, 1036.0645, 1036.1554, 1036.2411, 1036.3223, 1036.3998, 1036.4739, 1036.5451, 1036.6137, 1036.68, 1036.7441, 1036.8062, 1036.8526, 1036.8874, 1036.9164, 1036.9418, 1036.9647, 1036.9857, 1037.0052, 1037.0236, 1037.0409, 1037.0574, 1037.0738, 1037.0902, 1037.1066, 1037.123, 1037.1394, 1037.1558, 1037.1722, 1037.1887, 1037.206, 1037.2241, 1037.2435, 1037.2642, 1037.2866, 1037.3112, 1037.3389, 1037.3713, 1037.4118, 1037.475, 1037.6332, 1037.8104, 1038.0 ! [m] + ! HYBRID target densities for interfaces +REGRID_COMPRESSIBILITY_FRACTION = 0.01 ! [nondim] default = 0.0 + ! When interpolating potential density profiles we can add some artificial + ! compressibility solely to make homogeneous regions appear stratified. +MAXIMUM_INT_DEPTH_CONFIG = "FNC1:5,8000.0,1.0,.01" ! default = "NONE" + ! Determines how to specify the maximum interface depths. + ! Valid options are: + ! NONE - there are no maximum interface depths + ! PARAM - use the vector-parameter MAXIMUM_INTERFACE_DEPTHS + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,Z + ! FNC1:string - FNC1:dz_min,H_total,power,precision +!MAXIMUM_INT_DEPTHS = 0.0, 5.0, 12.75, 23.25, 36.49, 52.480000000000004, 71.22, 92.71000000000001, 116.94000000000001, 143.92000000000002, 173.65, 206.13, 241.36, 279.33000000000004, 320.05000000000007, 363.5200000000001, 409.7400000000001, 458.7000000000001, 510.4100000000001, 564.8700000000001, 622.0800000000002, 682.0300000000002, 744.7300000000002, 810.1800000000003, 878.3800000000003, 949.3300000000004, 1023.0200000000004, 1099.4600000000005, 1178.6500000000005, 1260.5900000000006, 1345.2700000000007, 1432.7000000000007, 1522.8800000000008, 1615.8100000000009, 1711.490000000001, 1809.910000000001, 1911.080000000001, 2015.0000000000011, 2121.670000000001, 2231.080000000001, 2343.2400000000007, 2458.1500000000005, 2575.8100000000004, 2696.2200000000003, 2819.3700000000003, 2945.2700000000004, 3073.9200000000005, 3205.3200000000006, 3339.4600000000005, 3476.3500000000004, 3615.9900000000002, 3758.38, 3903.52, 4051.4, 4202.03, 4355.41, 4511.54, 4670.41, 4832.03, 4996.4, 5163.5199999999995, 5333.379999999999, 5505.989999999999, 5681.3499999999985, 5859.459999999998, 6040.319999999998, 6223.919999999998, 6410.269999999999, 6599.369999999999, 6791.219999999999, 6985.8099999999995, 7183.15, 7383.24, 7586.08, 7791.67, 8000.0 + ! The list of maximum depths for each interface. +MAX_LAYER_THICKNESS_CONFIG = "FNC1:400,31000.0,0.1,.01" ! default = "NONE" + ! Determines how to specify the maximum layer thicknesses. + ! Valid options are: + ! NONE - there are no maximum layer thicknesses + ! PARAM - use the vector-parameter MAX_LAYER_THICKNESS + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,Z + ! FNC1:string - FNC1:dz_min,H_total,power,precision +!MAX_LAYER_THICKNESS = 400.0, 409.63, 410.32, 410.75, 411.07, 411.32, 411.52, 411.7, 411.86, 412.0, 412.13, 412.24, 412.35, 412.45, 412.54, 412.63, 412.71, 412.79, 412.86, 412.93, 413.0, 413.06, 413.12, 413.18, 413.24, 413.29, 413.34, 413.39, 413.44, 413.49, 413.54, 413.58, 413.62, 413.67, 413.71, 413.75, 413.78, 413.82, 413.86, 413.9, 413.93, 413.97, 414.0, 414.03, 414.06, 414.1, 414.13, 414.16, 414.19, 414.22, 414.24, 414.27, 414.3, 414.33, 414.35, 414.38, 414.41, 414.43, 414.46, 414.48, 414.51, 414.53, 414.55, 414.58, 414.6, 414.62, 414.65, 414.67, 414.69, 414.71, 414.73, 414.75, 414.77, 414.79, 414.83 ! [m] + ! The list of maximum thickness for each layer. +REMAPPING_SCHEME = "PPM_H4" ! default = "PLM" + ! This sets the reconstruction scheme used for vertical remapping for all + ! variables. It can be one of the following schemes: PCM (1st-order + ! accurate) + ! PLM (2nd-order accurate) + ! PPM_H4 (3rd-order accurate) + ! PPM_IH4 (3rd-order accurate) + ! PQM_IH4IH3 (4th-order accurate) + ! PQM_IH6IH5 (5th-order accurate) + +! === module MOM_grid === +! Parameters providing information about the lateral grid. + +! === module MOM_state_initialization === +INIT_LAYERS_FROM_Z_FILE = True ! [Boolean] default = False + ! If true, initialize the layer thicknesses, temperatures, and salinities from a + ! Z-space file on a latitude-longitude grid. + +! === module MOM_initialize_layers_from_Z === +TEMP_SALT_Z_INIT_FILE = "MOM6_IC_TS.nc" ! default = "temp_salt_z.nc" + ! The name of the z-space input file used to initialize + ! temperatures (T) and salinities (S). If T and S are not + ! in the same file, TEMP_Z_INIT_FILE and SALT_Z_INIT_FILE + ! must be set. +Z_INIT_FILE_PTEMP_VAR = "temp" ! default = "ptemp" + ! The name of the potential temperature variable in + ! TEMP_Z_INIT_FILE. +Z_INIT_FILE_SALT_VAR = "salt" ! default = "salt" + ! The name of the salinity variable in + ! SALT_Z_INIT_FILE. + +Z_INIT_ALE_REMAPPING = True ! [Boolean] default = False + ! If True, then remap straight to model coordinate from file. +Z_INIT_REMAP_OLD_ALG = True ! [Boolean] default = True + ! If false, uses the preferred remapping algorithm for initialization. If true, + ! use an older, less robust algorithm for remapping. + +! === module MOM_diag_mediator === +!Jiande NUM_DIAG_COORDS = 2 ! default = 1 +NUM_DIAG_COORDS = 1 ! default = 1 + ! The number of diagnostic vertical coordinates to use. + ! For each coordinate, an entry in DIAG_COORDS must be provided. +!Jiande DIAG_COORDS = "z Z ZSTAR", "rho2 RHO2 RHO" ! +DIAG_COORDS = "z Z ZSTAR" + ! A list of string tuples associating diag_table modules to + ! a coordinate definition used for diagnostics. Each string + ! is of the form "MODULE_SUFFIX,PARAMETER_SUFFIX,COORDINATE_NAME". +DIAG_COORD_DEF_Z="FILE:interpolate_zgrid_40L.nc,interfaces=zw" +DIAG_MISVAL = -1e34 +!DIAG_COORD_DEF_RHO2 = "RFNC1:35,999.5,1028,1028.5,8.,1038.,0.0078125" ! default = "WOA09" + ! Determines how to specify the coordinate resolution. Valid options are: + ! PARAM - use the vector-parameter DIAG_COORD_RES_RHO2 + ! UNIFORM[:N] - uniformly distributed + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,dz + ! or FILE:lev.nc,interfaces=zw + ! WOA09[:N] - the WOA09 vertical grid (approximately) + ! FNC1:string - FNC1:dz_min,H_total,power,precision + ! HYBRID:string - read from a file. The string specifies + ! the filename and two variable names, separated + ! by a comma or space, for sigma-2 and dz. e.g. + ! HYBRID:vgrid.nc,sigma2,dz + +! === module MOM_MEKE === +USE_MEKE = True ! [Boolean] default = False + ! If true, turns on the MEKE scheme which calculates a sub-grid mesoscale eddy + ! kinetic energy budget. +MEKE_GMCOEFF = 1.0 ! [nondim] default = -1.0 + ! The efficiency of the conversion of potential energy into MEKE by the + ! thickness mixing parameterization. If MEKE_GMCOEFF is negative, this + ! conversion is not used or calculated. +MEKE_BGSRC = 1.0E-13 ! [W kg-1] default = 0.0 + ! A background energy source for MEKE. +MEKE_KHTH_FAC = 0.5 ! [nondim] default = 0.0 + ! A factor that maps MEKE%Kh to KhTh. +MEKE_KHTR_FAC = 0.5 ! [nondim] default = 0.0 + ! A factor that maps MEKE%Kh to KhTr. +MEKE_KHMEKE_FAC = 1.0 ! [nondim] default = 0.0 + ! A factor that maps MEKE%Kh to Kh for MEKE itself. +MEKE_VISCOSITY_COEFF_KU = 1.0 ! [nondim] default = 0.0 + ! If non-zero, is the scaling coefficient in the expression forviscosity used to + ! parameterize harmonic lateral momentum mixing byunresolved eddies represented + ! by MEKE. Can be negative torepresent backscatter from the unresolved eddies. +MEKE_ALPHA_RHINES = 0.15 ! [nondim] default = 0.05 + ! If positive, is a coefficient weighting the Rhines scale in the expression for + ! mixing length used in MEKE-derived diffusivity. +MEKE_ALPHA_EADY = 0.15 ! [nondim] default = 0.05 + ! If positive, is a coefficient weighting the Eady length scale in the + ! expression for mixing length used in MEKE-derived diffusivity. + +! === module MOM_lateral_mixing_coeffs === +USE_VARIABLE_MIXING = True ! [Boolean] default = False + ! If true, the variable mixing code will be called. This allows diagnostics to + ! be created even if the scheme is not used. If KHTR_SLOPE_CFF>0 or + ! KhTh_Slope_Cff>0, this is set to true regardless of what is in the parameter + ! file. +RESOLN_SCALED_KH = True ! [Boolean] default = False + ! If true, the Laplacian lateral viscosity is scaled away when the first + ! baroclinic deformation radius is well resolved. +RESOLN_SCALED_KHTH = True ! [Boolean] default = False + ! If true, the interface depth diffusivity is scaled away when the first + ! baroclinic deformation radius is well resolved. +KHTH_USE_EBT_STRUCT = True ! [Boolean] default = False + ! If true, uses the equivalent barotropic structure as the vertical structure of + ! thickness diffusivity. +KHTR_SLOPE_CFF = 0.25 ! [nondim] default = 0.0 + ! The nondimensional coefficient in the Visbeck formula for the epipycnal tracer + ! diffusivity +USE_STORED_SLOPES = True ! [Boolean] default = False + ! If true, the isopycnal slopes are calculated once and stored for re-use. This + ! uses more memory but avoids calling the equation of state more times than + ! should be necessary. +KH_RES_FN_POWER = 100 ! [nondim] default = 2 + ! The power of dx/Ld in the Kh resolution function. Any positive integer may be + ! used, although even integers are more efficient to calculate. Setting this + ! greater than 100 results in a step-function being used. +INTERPOLATE_RES_FN = False ! [Boolean] default = True + ! If true, interpolate the resolution function to the velocity points from the + ! thickness points; otherwise interpolate the wave speed and calculate the + ! resolution function independently at each point. +GILL_EQUATORIAL_LD = True ! [Boolean] default = False + ! If true, uses Gill's definition of the baroclinic equatorial deformation + ! radius, otherwise, if false, use Pedlosky's definition. These definitions + ! differ by a factor of 2 in front of the beta term in the denominator. Gill's + ! is the more appropriate definition. +INTERNAL_WAVE_SPEED_BETTER_EST = False ! [Boolean] default = True + ! If true, use a more robust estimate of the first mode wave speed as the + ! starting point for iterations. + +! === module MOM_set_visc === +CHANNEL_DRAG = True ! [Boolean] default = False + ! If true, the bottom drag is exerted directly on each layer proportional to the + ! fraction of the bottom it overlies. +PRANDTL_TURB = 1.25 ! [nondim] default = 1.0 + ! The turbulent Prandtl number applied to shear instability. +HBBL = 10.0 ! [m] + ! The thickness of a bottom boundary layer with a viscosity of KVBBL if + ! BOTTOMDRAGLAW is not defined, or the thickness over which near-bottom + ! velocities are averaged for the drag law if BOTTOMDRAGLAW is defined but + ! LINEAR_DRAG is not. +DRAG_BG_VEL = 0.1 ! [m s-1] default = 0.0 + ! DRAG_BG_VEL is either the assumed bottom velocity (with LINEAR_DRAG) or an + ! unresolved velocity that is combined with the resolved velocity to estimate + ! the velocity magnitude. DRAG_BG_VEL is only used when BOTTOMDRAGLAW is + ! defined. +BBL_USE_EOS = True ! [Boolean] default = False + ! If true, use the equation of state in determining the properties of the bottom + ! boundary layer. Otherwise use the layer target potential densities. +BBL_THICK_MIN = 0.1 ! [m] default = 0.0 + ! The minimum bottom boundary layer thickness that can be used with + ! BOTTOMDRAGLAW. This might be Kv/(cdrag*drag_bg_vel) to give Kv as the minimum + ! near-bottom viscosity. +KV = 1.0E-04 ! [m2 s-1] + ! The background kinematic viscosity in the interior. The molecular value, ~1e-6 + ! m2 s-1, may be used. +KV_BBL_MIN = 0.0 ! [m2 s-1] default = 1.0E-04 + ! The minimum viscosities in the bottom boundary layer. +KV_TBL_MIN = 0.0 ! [m2 s-1] default = 1.0E-04 + ! The minimum viscosities in the top boundary layer. + +! === module MOM_thickness_diffuse === +KHTH_MAX_CFL = 0.1 ! [nondimensional] default = 0.8 + ! The maximum value of the local diffusive CFL ratio that is permitted for the + ! thickness diffusivity. 1.0 is the marginally unstable value in a pure layered + ! model, but much smaller numbers (e.g. 0.1) seem to work better for ALE-based + ! models. +KHTH_USE_FGNV_STREAMFUNCTION = True ! [Boolean] default = False + ! If true, use the streamfunction formulation of Ferrari et al., 2010, which + ! effectively emphasizes graver vertical modes by smoothing in the vertical. +FGNV_FILTER_SCALE = 0.1 ! [nondim] default = 1.0 + ! A coefficient scaling the vertical smoothing term in the Ferrari et al., 2010, + ! streamfunction formulation. +USE_GM_WORK_BUG = True ! [Boolean] default = True + ! If true, compute the top-layer work tendency on the u-grid with the incorrect + ! sign, for legacy reproducibility. + +! === module MOM_continuity === + +! === module MOM_continuity_PPM === +ETA_TOLERANCE = 1.0E-06 ! [m] default = 3.75E-09 + ! The tolerance for the differences between the barotropic and baroclinic + ! estimates of the sea surface height due to the fluxes through each face. The + ! total tolerance for SSH is 4 times this value. The default is + ! 0.5*NK*ANGSTROM, and this should not be set less than about + ! 10^-15*MAXIMUM_DEPTH. +ETA_TOLERANCE_AUX = 0.001 ! [m] default = 1.0E-06 + ! The tolerance for free-surface height discrepancies between the barotropic + ! solution and the sum of the layer thicknesses when calculating the auxiliary + ! corrected velocities. By default, this is the same as ETA_TOLERANCE, but can + ! be made larger for efficiency. + +! === module MOM_CoriolisAdv === +CORIOLIS_SCHEME = "SADOURNY75_ENSTRO" ! default = "SADOURNY75_ENERGY" + ! CORIOLIS_SCHEME selects the discretization for the Coriolis terms. Valid + ! values are: + ! SADOURNY75_ENERGY - Sadourny, 1975; energy cons. + ! ARAKAWA_HSU90 - Arakawa & Hsu, 1990 + ! SADOURNY75_ENSTRO - Sadourny, 1975; enstrophy cons. + ! ARAKAWA_LAMB81 - Arakawa & Lamb, 1981; En. + Enst. + ! ARAKAWA_LAMB_BLEND - A blend of Arakawa & Lamb with + ! Arakawa & Hsu and Sadourny energy +BOUND_CORIOLIS = True ! [Boolean] default = False + ! If true, the Coriolis terms at u-points are bounded by the four estimates of + ! (f+rv)v from the four neighboring v-points, and similarly at v-points. This + ! option would have no effect on the SADOURNY Coriolis scheme if it were + ! possible to use centered difference thickness fluxes. + +! === module MOM_PressureForce === + +! === module MOM_PressureForce_AFV === +MASS_WEIGHT_IN_PRESSURE_GRADIENT = True ! [Boolean] default = False + ! If true, use mass weighting when interpolating T/S for integrals near the + ! bathymetry in AFV pressure gradient calculations. + +! === module MOM_hor_visc === +LAPLACIAN = True ! [Boolean] default = False + ! If true, use a Laplacian horizontal viscosity. +KH_VEL_SCALE = 0.01 ! [m s-1] default = 0.0 + ! The velocity scale which is multiplied by the grid spacing to calculate the + ! Laplacian viscosity. The final viscosity is the largest of this scaled + ! viscosity, the Smagorinsky and Leith viscosities, and KH. +KH_SIN_LAT = 2000.0 ! [m2 s-1] default = 0.0 + ! The amplitude of a latitudinally-dependent background viscosity of the form + ! KH_SIN_LAT*(SIN(LAT)**KH_PWR_OF_SINE). +SMAGORINSKY_KH = True ! [Boolean] default = False + ! If true, use a Smagorinsky nonlinear eddy viscosity. +SMAG_LAP_CONST = 0.15 ! [nondim] default = 0.0 + ! The nondimensional Laplacian Smagorinsky constant, often 0.15. +AH_VEL_SCALE = 0.01 ! [m s-1] default = 0.0 + ! The velocity scale which is multiplied by the cube of the grid spacing to + ! calculate the biharmonic viscosity. The final viscosity is the largest of this + ! scaled viscosity, the Smagorinsky and Leith viscosities, and AH. +SMAGORINSKY_AH = True ! [Boolean] default = False + ! If true, use a biharmonic Smagorinsky nonlinear eddy viscosity. +SMAG_BI_CONST = 0.06 ! [nondim] default = 0.0 + ! The nondimensional biharmonic Smagorinsky constant, typically 0.015 - 0.06. +USE_LAND_MASK_FOR_HVISC = False ! [Boolean] default = False + ! If true, use Use the land mask for the computation of thicknesses at velocity + ! locations. This eliminates the dependence on arbitrary values over land or + ! outside of the domain. Default is False in order to maintain answers with + ! legacy experiments but should be changed to True for new experiments. + +! === module MOM_vert_friction === +HMIX_FIXED = 0.5 ! [m] + ! The prescribed depth over which the near-surface viscosity and diffusivity are + ! elevated when the bulk mixed layer is not used. +KVML = 1.0E-04 ! [m2 s-1] default = 1.0E-04 + ! The kinematic viscosity in the mixed layer. A typical value is ~1e-2 m2 s-1. + ! KVML is not used if BULKMIXEDLAYER is true. The default is set by KV. +MAXVEL = 6.0 ! [m s-1] default = 3.0E+08 + ! The maximum velocity allowed before the velocity components are truncated. + +! === module MOM_PointAccel === +U_TRUNC_FILE = "U_velocity_truncations" ! default = "" + ! The absolute path to a file into which the accelerations leading to zonal + ! velocity truncations are written. Undefine this for efficiency if this + ! diagnostic is not needed. +V_TRUNC_FILE = "V_velocity_truncations" ! default = "" + ! The absolute path to a file into which the accelerations leading to meridional + ! velocity truncations are written. Undefine this for efficiency if this + ! diagnostic is not needed. + +! === module MOM_barotropic === +BOUND_BT_CORRECTION = True ! [Boolean] default = False + ! If true, the corrective pseudo mass-fluxes into the barotropic solver are + ! limited to values that require less than maxCFL_BT_cont to be accommodated. +BT_PROJECT_VELOCITY = True ! [Boolean] default = False + ! If true, step the barotropic velocity first and project out the velocity + ! tendency by 1+BEBT when calculating the transport. The default (false) is to + ! use a predictor continuity step to find the pressure field, and then to do a + ! corrector continuity step using a weighted average of the old and new + ! velocities, with weights of (1-BEBT) and BEBT. +DYNAMIC_SURFACE_PRESSURE = True ! [Boolean] default = False + ! If true, add a dynamic pressure due to a viscous ice shelf, for instance. +BEBT = 0.2 ! [nondim] default = 0.1 + ! BEBT determines whether the barotropic time stepping uses the forward-backward + ! time-stepping scheme or a backward Euler scheme. BEBT is valid in the range + ! from 0 (for a forward-backward treatment of nonrotating gravity waves) to 1 + ! (for a backward Euler treatment). In practice, BEBT must be greater than about + ! 0.05. +DTBT = -0.9 ! [s or nondim] default = -0.98 + ! The barotropic time step, in s. DTBT is only used with the split explicit time + ! stepping. To set the time step automatically based the maximum stable value + ! use 0, or a negative value gives the fraction of the stable value. Setting + ! DTBT to 0 is the same as setting it to -0.98. The value of DTBT that will + ! actually be used is an integer fraction of DT, rounding down. +BT_USE_OLD_CORIOLIS_BRACKET_BUG = True ! [Boolean] default = False + ! If True, use an order of operations that is not bitwise rotationally symmetric + ! in the meridional Coriolis term of the barotropic solver. + +! === module MOM_mixed_layer_restrat === +MIXEDLAYER_RESTRAT = True ! [Boolean] default = False + ! If true, a density-gradient dependent re-stratifying flow is imposed in the + ! mixed layer. Can be used in ALE mode without restriction but in layer mode can + ! only be used if BULKMIXEDLAYER is true. +FOX_KEMPER_ML_RESTRAT_COEF = 1.0 ! [nondim] default = 0.0 + ! A nondimensional coefficient that is proportional to the ratio of the + ! deformation radius to the dominant lengthscale of the submesoscale mixed layer + ! instabilities, times the minimum of the ratio of the mesoscale eddy kinetic + ! energy to the large-scale geostrophic kinetic energy or 1 plus the square of + ! the grid spacing over the deformation radius, as detailed by Fox-Kemper et al. + ! (2010) +MLE_FRONT_LENGTH = 200.0 ! [m] default = 0.0 + ! If non-zero, is the frontal-length scale used to calculate the upscaling of + ! buoyancy gradients that is otherwise represented by the parameter + ! FOX_KEMPER_ML_RESTRAT_COEF. If MLE_FRONT_LENGTH is non-zero, it is recommended + ! to set FOX_KEMPER_ML_RESTRAT_COEF=1.0. +MLE_USE_PBL_MLD = True ! [Boolean] default = False + ! If true, the MLE parameterization will use the mixed-layer depth provided by + ! the active PBL parameterization. If false, MLE will estimate a MLD based on a + ! density difference with the surface using the parameter MLE_DENSITY_DIFF. +MLE_MLD_DECAY_TIME = 2.592E+06 ! [s] default = 0.0 + ! The time-scale for a running-mean filter applied to the mixed-layer depth used + ! in the MLE restratification parameterization. When the MLD deepens below the + ! current running-mean the running-mean is instantaneously set to the current + ! MLD. + +! === module MOM_diabatic_driver === +! The following parameters are used for diabatic processes. +ENERGETICS_SFC_PBL = True ! [Boolean] default = False + ! If true, use an implied energetics planetary boundary layer scheme to + ! determine the diffusivity and viscosity in the surface boundary layer. +EPBL_IS_ADDITIVE = False ! [Boolean] default = True + ! If true, the diffusivity from ePBL is added to all other diffusivities. + ! Otherwise, the larger of kappa-shear and ePBL diffusivities are used. + +! === module MOM_CVMix_KPP === +! This is the MOM wrapper to CVMix:KPP +! See http://cvmix.github.io/ + +! === module MOM_tidal_mixing === +! Vertical Tidal Mixing Parameterization +INT_TIDE_DISSIPATION = True ! [Boolean] default = False + ! If true, use an internal tidal dissipation scheme to drive diapycnal mixing, + ! along the lines of St. Laurent et al. (2002) and Simmons et al. (2004). +INT_TIDE_PROFILE = "POLZIN_09" ! default = "STLAURENT_02" + ! INT_TIDE_PROFILE selects the vertical profile of energy dissipation with + ! INT_TIDE_DISSIPATION. Valid values are: + ! STLAURENT_02 - Use the St. Laurent et al exponential + ! decay profile. + ! POLZIN_09 - Use the Polzin WKB-stretched algebraic + ! decay profile. +INT_TIDE_DECAY_SCALE = 300.3003003003003 ! [m] default = 500.0 + ! The decay scale away from the bottom for tidal TKE with the new coding when + ! INT_TIDE_DISSIPATION is used. +KAPPA_ITIDES = 6.28319E-04 ! [m-1] default = 6.283185307179586E-04 + ! A topographic wavenumber used with INT_TIDE_DISSIPATION. The default is 2pi/10 + ! km, as in St.Laurent et al. 2002. +KAPPA_H2_FACTOR = 0.84 ! [nondim] default = 1.0 + ! A scaling factor for the roughness amplitude with INT_TIDE_DISSIPATION. +TKE_ITIDE_MAX = 0.1 ! [W m-2] default = 1000.0 + ! The maximum internal tide energy source available to mix above the bottom + ! boundary layer with INT_TIDE_DISSIPATION. +READ_TIDEAMP = True ! [Boolean] default = False + ! If true, read a file (given by TIDEAMP_FILE) containing the tidal amplitude + ! with INT_TIDE_DISSIPATION. +TIDEAMP_FILE = "tidal_amplitude.nc" ! default = "tideamp.nc" + ! The path to the file containing the spatially varying tidal amplitudes with + ! INT_TIDE_DISSIPATION. +H2_FILE = "ocean_topog.nc" ! + ! The path to the file containing the sub-grid-scale topographic roughness + ! amplitude with INT_TIDE_DISSIPATION. + +! === module MOM_CVMix_conv === +! Parameterization of enhanced mixing due to convection via CVMix + +! === module MOM_geothermal === +GEOTHERMAL_SCALE = 1.0 ! [W m-2 or various] default = 0.0 + ! The constant geothermal heat flux, a rescaling factor for the heat flux read + ! from GEOTHERMAL_FILE, or 0 to disable the geothermal heating. +GEOTHERMAL_FILE = "geothermal_davies2013_v1.nc" ! default = "" + ! The file from which the geothermal heating is to be read, or blank to use a + ! constant heating rate. +GEOTHERMAL_VARNAME = "geothermal_hf" ! default = "geo_heat" + ! The name of the geothermal heating variable in GEOTHERMAL_FILE. + +! === module MOM_set_diffusivity === +BBL_MIXING_AS_MAX = False ! [Boolean] default = True + ! If true, take the maximum of the diffusivity from the BBL mixing and the other + ! diffusivities. Otherwise, diffusivity from the BBL_mixing is simply added. +USE_LOTW_BBL_DIFFUSIVITY = True ! [Boolean] default = False + ! If true, uses a simple, imprecise but non-coordinate dependent, model of BBL + ! mixing diffusivity based on Law of the Wall. Otherwise, uses the original BBL + ! scheme. +SIMPLE_TKE_TO_KD = True ! [Boolean] default = False + ! If true, uses a simple estimate of Kd/TKE that will work for arbitrary + ! vertical coordinates. If false, calculates Kd/TKE and bounds based on exact + ! energetics for an isopycnal layer-formulation. + +! === module MOM_bkgnd_mixing === +! Adding static vertical background mixing coefficients +KD = 1.5E-05 ! [m2 s-1] + ! The background diapycnal diffusivity of density in the interior. Zero or the + ! molecular value, ~1e-7 m2 s-1, may be used. +KD_MIN = 2.0E-06 ! [m2 s-1] default = 1.5E-07 + ! The minimum diapycnal diffusivity. +HENYEY_IGW_BACKGROUND = True ! [Boolean] default = False + ! If true, use a latitude-dependent scaling for the near surface background + ! diffusivity, as described in Harrison & Hallberg, JPO 2008. +KD_MAX = 0.1 ! [m2 s-1] default = -1.0 + ! The maximum permitted increment for the diapycnal diffusivity from TKE-based + ! parameterizations, or a negative value for no limit. + +! === module MOM_kappa_shear === +! Parameterization of shear-driven turbulence following Jackson, Hallberg and Legg, JPO 2008 +USE_JACKSON_PARAM = True ! [Boolean] default = False + ! If true, use the Jackson-Hallberg-Legg (JPO 2008) shear mixing + ! parameterization. +MAX_RINO_IT = 25 ! [nondim] default = 50 + ! The maximum number of iterations that may be used to estimate the Richardson + ! number driven mixing. +VERTEX_SHEAR = False ! [Boolean] default = False + ! If true, do the calculations of the shear-driven mixing + ! at the cell vertices (i.e., the vorticity points). +KAPPA_SHEAR_ITER_BUG = True ! [Boolean] default = True + ! If true, use an older, dimensionally inconsistent estimate of the derivative + ! of diffusivity with energy in the Newton's method iteration. The bug causes + ! undercorrections when dz > 1 m. +KAPPA_SHEAR_ALL_LAYER_TKE_BUG = True ! [Boolean] default = True + ! If true, report back the latest estimate of TKE instead of the time average + ! TKE when there is mass in all layers. Otherwise always report the time + ! averaged TKE, as is currently done when there are some massless layers. + +! === module MOM_CVMix_shear === +! Parameterization of shear-driven turbulence via CVMix (various options) + +! === module MOM_CVMix_ddiff === +! Parameterization of mixing due to double diffusion processes via CVMix + +! === module MOM_diabatic_aux === +! The following parameters are used for auxiliary diabatic processes. +PRESSURE_DEPENDENT_FRAZIL = False ! [Boolean] default = False + ! If true, use a pressure dependent freezing temperature when making frazil. The + ! default is false, which will be faster but is inappropriate with ice-shelf + ! cavities. +VAR_PEN_SW = True ! [Boolean] default = False + ! If true, use one of the CHL_A schemes specified by OPACITY_SCHEME to determine + ! the e-folding depth of incoming short wave radiation. +CHL_FILE = @[CHLCLIM] ! + ! CHL_FILE is the file containing chl_a concentrations in the variable CHL_A. It + ! is used when VAR_PEN_SW and CHL_FROM_FILE are true. +CHL_VARNAME = "chlor_a" ! default = "CHL_A" + ! Name of CHL_A variable in CHL_FILE. + +! === module MOM_energetic_PBL === +ML_OMEGA_FRAC = 0.001 ! [nondim] default = 0.0 + ! When setting the decay scale for turbulence, use this fraction of the absolute + ! rotation rate blended with the local value of f, as sqrt((1-of)*f^2 + + ! of*4*omega^2). +TKE_DECAY = 0.01 ! [nondim] default = 2.5 + ! TKE_DECAY relates the vertical rate of decay of the TKE available for + ! mechanical entrainment to the natural Ekman depth. +EPBL_MSTAR_SCHEME = "OM4" ! default = "CONSTANT" + ! EPBL_MSTAR_SCHEME selects the method for setting mstar. Valid values are: + ! CONSTANT - Use a fixed mstar given by MSTAR + ! OM4 - Use L_Ekman/L_Obukhov in the sabilizing limit, as in OM4 + ! REICHL_H18 - Use the scheme documented in Reichl & Hallberg, 2018. +MSTAR_CAP = 10.0 ! [nondim] default = -1.0 + ! If this value is positive, it sets the maximum value of mstar allowed in ePBL. + ! (This is not used if EPBL_MSTAR_SCHEME = CONSTANT). +MSTAR2_COEF1 = 0.29 ! [nondim] default = 0.3 + ! Coefficient in computing mstar when rotation and stabilizing effects are both + ! important (used if EPBL_MSTAR_SCHEME = OM4). +MSTAR2_COEF2 = 0.152 ! [nondim] default = 0.085 + ! Coefficient in computing mstar when only rotation limits the total mixing + ! (used if EPBL_MSTAR_SCHEME = OM4) +EPBL_MLD_BISECTION = True ! [Boolean] default = False + ! If true, use bisection with the iterative determination of the self-consistent + ! mixed layer depth. Otherwise use the false position after a maximum and + ! minimum bound have been evaluated and the returned value or bisection before + ! this. +NSTAR = 0.06 ! [nondim] default = 0.2 + ! The portion of the buoyant potential energy imparted by surface fluxes that is + ! available to drive entrainment at the base of mixed layer when that energy is + ! positive. +MSTAR_CONV_ADJ = 0.667 ! [nondim] default = 0.0 + ! Coefficient used for reducing mstar during convection due to reduction of + ! stable density gradient. +USE_MLD_ITERATION = True ! [Boolean] default = False + ! A logical that specifies whether or not to use the distance to the bottom of + ! the actively turbulent boundary layer to help set the EPBL length scale. +EPBL_TRANSITION_SCALE = 0.01 ! [nondim] default = 0.1 + ! A scale for the mixing length in the transition layer at the edge of the + ! boundary layer as a fraction of the boundary layer thickness. +MIX_LEN_EXPONENT = 1.0 ! [nondim] default = 2.0 + ! The exponent applied to the ratio of the distance to the MLD and the MLD depth + ! which determines the shape of the mixing length. This is only used if + ! USE_MLD_ITERATION is True. +USE_LA_LI2016 = @[MOM6_USE_LI2016] ! [nondim] default = False + ! A logical to use the Li et al. 2016 (submitted) formula to determine the + ! Langmuir number. +USE_WAVES = @[MOM6_USE_WAVES] ! [Boolean] default = False + ! If true, enables surface wave modules. +WAVE_METHOD = "SURFACE_BANDS" ! default = "EMPTY" + ! Choice of wave method, valid options include: + ! TEST_PROFILE - Prescribed from surface Stokes drift + ! and a decay wavelength. + ! SURFACE_BANDS - Computed from multiple surface values + ! and decay wavelengths. + ! DHH85 - Uses Donelan et al. 1985 empirical + ! wave spectrum with prescribed values. + ! LF17 - Infers Stokes drift profile from wind + ! speed following Li and Fox-Kemper 2017. +SURFBAND_SOURCE = "COUPLER" ! default = "EMPTY" + ! Choice of SURFACE_BANDS data mode, valid options include: + ! DATAOVERRIDE - Read from NetCDF using FMS DataOverride. + ! COUPLER - Look for variables from coupler pass + ! INPUT - Testing with fixed values. +STK_BAND_COUPLER = 3 ! default = 1 + ! STK_BAND_COUPLER is the number of Stokes drift bands in the coupler. This has + ! to be consistent with the number of Stokes drift bands in WW3, or the model + ! will fail. +SURFBAND_WAVENUMBERS = 0.04, 0.11, 0.3305 ! [rad/m] default = 0.12566 + ! Central wavenumbers for surface Stokes drift bands. +EPBL_LANGMUIR_SCHEME = "ADDITIVE" ! default = "NONE" + ! EPBL_LANGMUIR_SCHEME selects the method for including Langmuir turbulence. + ! Valid values are: + ! NONE - Do not do any extra mixing due to Langmuir turbulence + ! RESCALE - Use a multiplicative rescaling of mstar to account for Langmuir + ! turbulence + ! ADDITIVE - Add a Langmuir turblence contribution to mstar to other + ! contributions +LT_ENHANCE_COEF = 0.044 ! [nondim] default = 0.447 + ! Coefficient for Langmuir enhancement of mstar +LT_ENHANCE_EXP = -1.5 ! [nondim] default = -1.33 + ! Exponent for Langmuir enhancementt of mstar +LT_MOD_LAC1 = 0.0 ! [nondim] default = -0.87 + ! Coefficient for modification of Langmuir number due to MLD approaching Ekman + ! depth. +LT_MOD_LAC4 = 0.0 ! [nondim] default = 0.95 + ! Coefficient for modification of Langmuir number due to ratio of Ekman to + ! stable Obukhov depth. +LT_MOD_LAC5 = 0.22 ! [nondim] default = 0.95 + ! Coefficient for modification of Langmuir number due to ratio of Ekman to + ! unstable Obukhov depth. + +! === module MOM_regularize_layers === + +! === module MOM_opacity === +PEN_SW_NBANDS = 3 ! default = 1 + ! The number of bands of penetrating shortwave radiation. + +! === module MOM_tracer_advect === +TRACER_ADVECTION_SCHEME = "PPM:H3" ! default = "PLM" + ! The horizontal transport scheme for tracers: + ! PLM - Piecewise Linear Method + ! PPM:H3 - Piecewise Parabolic Method (Huyhn 3rd order) + ! PPM - Piecewise Parabolic Method (Colella-Woodward) + +! === module MOM_tracer_hor_diff === +KHTR = 50.0 ! [m2 s-1] default = 0.0 + ! The background along-isopycnal tracer diffusivity. +CHECK_DIFFUSIVE_CFL = True ! [Boolean] default = False + ! If true, use enough iterations the diffusion to ensure that the diffusive + ! equivalent of the CFL limit is not violated. If false, always use the greater + ! of 1 or MAX_TR_DIFFUSION_CFL iteration. +MAX_TR_DIFFUSION_CFL = 2.0 ! [nondim] default = -1.0 + ! If positive, locally limit the along-isopycnal tracer diffusivity to keep the + ! diffusive CFL locally at or below this value. The number of diffusive + ! iterations is often this value or the next greater integer. + +! === module MOM_neutral_diffusion === +! This module implements neutral diffusion of tracers +USE_NEUTRAL_DIFFUSION = True ! [Boolean] default = False + ! If true, enables the neutral diffusion module. + +! === module ocean_model_init === +RESTART_CHECKSUMS_REQUIRED = False + +! === module MOM_oda_incupd === +ODA_INCUPD = @[ODA_INCUPD] ! [Boolean] default = False + ! If true, oda incremental updates will be applied + ! everywhere in the domain. +ODA_INCUPD_FILE = "mom6_increment.nc" ! The name of the file with the T,S,h increments. + +ODA_TEMPINC_VAR = "Temp" ! default = "ptemp_inc" + ! The name of the potential temperature inc. variable in + ! ODA_INCUPD_FILE. +ODA_SALTINC_VAR = "Salt" ! default = "sal_inc" + ! The name of the salinity inc. variable in + ! ODA_INCUPD_FILE. +ODA_THK_VAR = "h" ! default = "h" + ! The name of the int. depth inc. variable in + ! ODA_INCUPD_FILE. +ODA_INCUPD_UV = false ! +!ODA_UINC_VAR = "u" ! default = "u_inc" + ! The name of the zonal vel. inc. variable in + ! ODA_INCUPD_UV_FILE. +!ODA_VINC_VAR = "v" ! default = "v_inc" + ! The name of the meridional vel. inc. variable in + ! ODA_INCUPD_UV_FILE. +ODA_INCUPD_NHOURS = @[ODA_INCUPD_NHOURS] ! default=3.0 + +! === module MOM_lateral_boundary_diffusion === +! This module implements lateral diffusion of tracers near boundaries + +! === module MOM_sum_output === +MAXTRUNC = 100000 ! [truncations save_interval-1] default = 0 + ! The run will be stopped, and the day set to a very large value if the velocity + ! is truncated more than MAXTRUNC times between energy saves. Set MAXTRUNC to 0 + ! to stop if there is any truncation of velocities. +ENERGYSAVEDAYS = 1.0 ! [days] default = 1.0 + ! The interval in units of TIMEUNIT between saves of the energies of the run and + ! other globally summed diagnostics. +ENERGYSAVEDAYS_GEOMETRIC = 0.25 ! [days] default = 0.0 + ! The starting interval in units of TIMEUNIT for the first call to save the + ! energies of the run and other globally summed diagnostics. The interval + ! increases by a factor of 2. after each call to write_energy. + +! === module ocean_model_init === + +! === module MOM_surface_forcing === +OCEAN_SURFACE_STAGGER = "A" ! default = "C" + ! A case-insensitive character string to indicate the + ! staggering of the surface velocity field that is + ! returned to the coupler. Valid values include + ! 'A', 'B', or 'C'. + +MAX_P_SURF = 0.0 ! [Pa] default = -1.0 + ! The maximum surface pressure that can be exerted by the atmosphere and + ! floating sea-ice or ice shelves. This is needed because the FMS coupling + ! structure does not limit the water that can be frozen out of the ocean and the + ! ice-ocean heat fluxes are treated explicitly. No limit is applied if a + ! negative value is used. +WIND_STAGGER = "A" ! default = "C" + ! A case-insensitive character string to indicate the + ! staggering of the input wind stress field. Valid + ! values are 'A', 'B', or 'C'. +CD_TIDES = 0.0018 ! [nondim] default = 1.0E-04 + ! The drag coefficient that applies to the tides. +GUST_CONST = 0.0 ! [Pa] default = 0.02 + ! The background gustiness in the winds. +FIX_USTAR_GUSTLESS_BUG = False ! [Boolean] default = False + ! If true correct a bug in the time-averaging of the gustless wind friction + ! velocity +USE_RIGID_SEA_ICE = True ! [Boolean] default = False + ! If true, sea-ice is rigid enough to exert a nonhydrostatic pressure that + ! resist vertical motion. +SEA_ICE_RIGID_MASS = 100.0 ! [kg m-2] default = 1000.0 + ! The mass of sea-ice per unit area at which the sea-ice starts to exhibit + ! rigidity +LIQUID_RUNOFF_FROM_DATA = @[MOM6_RIVER_RUNOFF] ! [Boolean] default = False + ! If true, allows liquid river runoff to be specified via + ! the data_table using the component name 'OCN'. +! === module ocean_stochastics === +DO_SPPT = @[DO_OCN_SPPT] ! [Boolean] default = False + ! If true perturb the diabatic tendencies in MOM_diabatic_driver +PERT_EPBL = @[PERT_EPBL] ! [Boolean] default = False + ! If true perturb the KE dissipation and destruction in MOM_energetic_PBL +! === module MOM_restart === + +! === module MOM_file_parser === diff --git a/parm/ufs/mom6/MOM_input_template_100 b/parm/ufs/mom6/MOM_input_template_100 new file mode 100644 index 0000000000..f26d6e4bfb --- /dev/null +++ b/parm/ufs/mom6/MOM_input_template_100 @@ -0,0 +1,866 @@ +! This file was written by the model and records all non-layout or debugging parameters used at run-time. +! === module MOM === + +! === module MOM_unit_scaling === +! Parameters for doing unit scaling of variables. +USE_REGRIDDING = True ! [Boolean] default = False + ! If True, use the ALE algorithm (regridding/remapping). If False, use the + ! layered isopycnal algorithm. +THICKNESSDIFFUSE = True ! [Boolean] default = False + ! If true, interface heights are diffused with a coefficient of KHTH. +THICKNESSDIFFUSE_FIRST = True ! [Boolean] default = False + ! If true, do thickness diffusion before dynamics. This is only used if + ! THICKNESSDIFFUSE is true. +DT = @[DT_DYNAM_MOM6] ! [s] + ! The (baroclinic) dynamics time step. The time-step that is actually used will + ! be an integer fraction of the forcing time-step (DT_FORCING in ocean-only mode + ! or the coupling timestep in coupled mode.) +DT_THERM = @[DT_THERM_MOM6] ! [s] default = 1800.0 + ! The thermodynamic and tracer advection time step. Ideally DT_THERM should be + ! an integer multiple of DT and less than the forcing or coupling time-step, + ! unless THERMO_SPANS_COUPLING is true, in which case DT_THERM can be an integer + ! multiple of the coupling timestep. By default DT_THERM is set to DT. +THERMO_SPANS_COUPLING = @[MOM6_THERMO_SPAN] ! [Boolean] default = False + ! If true, the MOM will take thermodynamic and tracer timesteps that can be + ! longer than the coupling timestep. The actual thermodynamic timestep that is + ! used in this case is the largest integer multiple of the coupling timestep + ! that is less than or equal to DT_THERM. +HFREEZE = 20.0 ! [m] default = -1.0 + ! If HFREEZE > 0, melt potential will be computed. The actual depth + ! over which melt potential is computed will be min(HFREEZE, OBLD) + ! where OBLD is the boundary layer depth. If HFREEZE <= 0 (default) + ! melt potential will not be computed. +DTBT_RESET_PERIOD = -1.0 ! [s] default = 7200.0 + ! The period between recalculations of DTBT (if DTBT <= 0). If DTBT_RESET_PERIOD + ! is negative, DTBT is set based only on information available at + ! initialization. If 0, DTBT will be set every dynamics time step. The default + ! is set by DT_THERM. This is only used if SPLIT is true. +FRAZIL = True ! [Boolean] default = False + ! If true, water freezes if it gets too cold, and the accumulated heat deficit + ! is returned in the surface state. FRAZIL is only used if + ! ENABLE_THERMODYNAMICS is true. +BOUND_SALINITY = True ! [Boolean] default = False + ! If true, limit salinity to being positive. (The sea-ice model may ask for more + ! salt than is available and drive the salinity negative otherwise.) +MIN_SALINITY = 0.01 ! [PPT] default = 0.0 + ! The minimum value of salinity when BOUND_SALINITY=True. +C_P = 3925.0 ! [J kg-1 K-1] default = 3991.86795711963 + ! The heat capacity of sea water, approximated as a constant. This is only used + ! if ENABLE_THERMODYNAMICS is true. The default value is from the TEOS-10 + ! definition of conservative temperature. +USE_PSURF_IN_EOS = False ! [Boolean] default = True + ! If true, always include the surface pressure contributions in equation of + ! state calculations. +CHECK_BAD_SURFACE_VALS = True ! [Boolean] default = False + ! If true, check the surface state for ridiculous values. +BAD_VAL_SSH_MAX = 50.0 ! [m] default = 20.0 + ! The value of SSH above which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SSS_MAX = 75.0 ! [PPT] default = 45.0 + ! The value of SSS above which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SST_MAX = 55.0 ! [deg C] default = 45.0 + ! The value of SST above which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +BAD_VAL_SST_MIN = -3.0 ! [deg C] default = -2.1 + ! The value of SST below which a bad value message is triggered, if + ! CHECK_BAD_SURFACE_VALS is true. +DEFAULT_2018_ANSWERS = True ! [Boolean] default = False + ! This sets the default value for the various _2018_ANSWERS parameters. +WRITE_GEOM = 2 ! default = 1 + ! If =0, never write the geometry and vertical grid files. If =1, write the + ! geometry and vertical grid files only for a new simulation. If =2, always + ! write the geometry and vertical grid files. Other values are invalid. +SAVE_INITIAL_CONDS = False ! [Boolean] default = False + ! If true, write the initial conditions to a file given by IC_OUTPUT_FILE. + +! === module MOM_domains === +TRIPOLAR_N = True ! [Boolean] default = False + ! Use tripolar connectivity at the northern edge of the domain. With + ! TRIPOLAR_N, NIGLOBAL must be even. +NIGLOBAL = @[NX_GLB] ! + ! The total number of thickness grid points in the x-direction in the physical + ! domain. With STATIC_MEMORY_ this is set in MOM_memory.h at compile time. +NJGLOBAL = @[NY_GLB] ! + ! The total number of thickness grid points in the y-direction in the physical + ! domain. With STATIC_MEMORY_ this is set in MOM_memory.h at compile time. + +! === module MOM_hor_index === +! Sets the horizontal array index types. + +! === module MOM_fixed_initialization === +INPUTDIR = "INPUT" ! default = "." + ! The directory in which input files are found. + +! === module MOM_grid_init === +GRID_CONFIG = "mosaic" ! + ! A character string that determines the method for defining the horizontal + ! grid. Current options are: + ! mosaic - read the grid from a mosaic (supergrid) + ! file set by GRID_FILE. + ! cartesian - use a (flat) Cartesian grid. + ! spherical - use a simple spherical grid. + ! mercator - use a Mercator spherical grid. +GRID_FILE = "ocean_hgrid.nc" ! + ! Name of the file from which to read horizontal grid data. +GRID_ROTATION_ANGLE_BUGS = False ! [Boolean] default = True + ! If true, use an older algorithm to calculate the sine and + ! cosines needed rotate between grid-oriented directions and + ! true north and east. Differences arise at the tripolar fold +USE_TRIPOLAR_GEOLONB_BUG = False ! [Boolean] default = True + ! If true, use older code that incorrectly sets the longitude in some points + ! along the tripolar fold to be off by 360 degrees. +TOPO_CONFIG = "file" ! + ! This specifies how bathymetry is specified: + ! file - read bathymetric information from the file + ! specified by (TOPO_FILE). + ! flat - flat bottom set to MAXIMUM_DEPTH. + ! bowl - an analytically specified bowl-shaped basin + ! ranging between MAXIMUM_DEPTH and MINIMUM_DEPTH. + ! spoon - a similar shape to 'bowl', but with an vertical + ! wall at the southern face. + ! halfpipe - a zonally uniform channel with a half-sine + ! profile in the meridional direction. + ! bbuilder - build topography from list of functions. + ! benchmark - use the benchmark test case topography. + ! Neverworld - use the Neverworld test case topography. + ! DOME - use a slope and channel configuration for the + ! DOME sill-overflow test case. + ! ISOMIP - use a slope and channel configuration for the + ! ISOMIP test case. + ! DOME2D - use a shelf and slope configuration for the + ! DOME2D gravity current/overflow test case. + ! Kelvin - flat but with rotated land mask. + ! seamount - Gaussian bump for spontaneous motion test case. + ! dumbbell - Sloshing channel with reservoirs on both ends. + ! shelfwave - exponential slope for shelfwave test case. + ! Phillips - ACC-like idealized topography used in the Phillips config. + ! dense - Denmark Strait-like dense water formation and overflow. + ! USER - call a user modified routine. +TOPO_EDITS_FILE = "@[TOPOEDITS]" ! default = "" + ! The file from which to read a list of i,j,z topography overrides. +ALLOW_LANDMASK_CHANGES = @[MOM6_ALLOW_LANDMASK_CHANGES] ! default = "False" + ! If true, allow topography overrides to change ocean points to land +MAXIMUM_DEPTH = 6500.0 ! [m] + ! The maximum depth of the ocean. +MINIMUM_DEPTH = 9.5 ! [m] default = 0.0 + ! If MASKING_DEPTH is unspecified, then anything shallower than MINIMUM_DEPTH is + ! assumed to be land and all fluxes are masked out. If MASKING_DEPTH is + ! specified, then all depths shallower than MINIMUM_DEPTH but deeper than + ! MASKING_DEPTH are rounded to MINIMUM_DEPTH. + +! === module MOM_open_boundary === +! Controls where open boundaries are located, what kind of boundary condition to impose, and what data to apply, +! if any. +MASKING_DEPTH = 0.0 ! [m] default = -9999.0 + ! The depth below which to mask points as land points, for which all fluxes are + ! zeroed out. MASKING_DEPTH is ignored if negative. +CHANNEL_CONFIG = "list" ! default = "none" + ! A parameter that determines which set of channels are + ! restricted to specific widths. Options are: + ! none - All channels have the grid width. + ! global_1deg - Sets 16 specific channels appropriate + ! for a 1-degree model, as used in CM2G. + ! list - Read the channel locations and widths from a + ! text file, like MOM_channel_list in the MOM_SIS + ! test case. + ! file - Read open face widths everywhere from a + ! NetCDF file on the model grid. +CHANNEL_LIST_FILE = "MOM_channels_SPEAR" ! default = "MOM_channel_list" + ! The file from which the list of narrowed channels is read. + +! === module MOM_verticalGrid === +! Parameters providing information about the vertical grid. +NK = 75 ! [nondim] + ! The number of model layers. + +! === module MOM_tracer_registry === + +! === module MOM_EOS === +TFREEZE_FORM = "MILLERO_78" ! default = "LINEAR" + ! TFREEZE_FORM determines which expression should be used for the freezing + ! point. Currently, the valid choices are "LINEAR", "MILLERO_78", "TEOS10" + +! === module MOM_restart === +PARALLEL_RESTARTFILES = True ! [Boolean] default = False + ! If true, each processor writes its own restart file, otherwise a single + ! restart file is generated + +! === module MOM_tracer_flow_control === +USE_IDEAL_AGE_TRACER = False ! [Boolean] default = False + ! If true, use the ideal_age_example tracer package. + +! === module ideal_age_example === + +! === module MOM_coord_initialization === +COORD_CONFIG = "file" ! default = "none" + ! This specifies how layers are to be defined: + ! ALE or none - used to avoid defining layers in ALE mode + ! file - read coordinate information from the file + ! specified by (COORD_FILE). + ! BFB - Custom coords for buoyancy-forced basin case + ! based on SST_S, T_BOT and DRHO_DT. + ! linear - linear based on interfaces not layers + ! layer_ref - linear based on layer densities + ! ts_ref - use reference temperature and salinity + ! ts_range - use range of temperature and salinity + ! (T_REF and S_REF) to determine surface density + ! and GINT calculate internal densities. + ! gprime - use reference density (RHO_0) for surface + ! density and GINT calculate internal densities. + ! ts_profile - use temperature and salinity profiles + ! (read from COORD_FILE) to set layer densities. + ! USER - call a user modified routine. +COORD_FILE = "layer_coord.nc" ! + ! The file from which the coordinate densities are read. +REMAP_UV_USING_OLD_ALG = True ! [Boolean] default = False + ! If true, uses the old remapping-via-a-delta-z method for remapping u and v. If + ! false, uses the new method that remaps between grids described by an old and + ! new thickness. +REGRIDDING_COORDINATE_MODE = "HYCOM1" ! default = "LAYER" + ! Coordinate mode for vertical regridding. Choose among the following + ! possibilities: LAYER - Isopycnal or stacked shallow water layers + ! ZSTAR, Z* - stretched geopotential z* + ! SIGMA_SHELF_ZSTAR - stretched geopotential z* ignoring shelf + ! SIGMA - terrain following coordinates + ! RHO - continuous isopycnal + ! HYCOM1 - HyCOM-like hybrid coordinate + ! SLIGHT - stretched coordinates above continuous isopycnal + ! ADAPTIVE - optimize for smooth neutral density surfaces +BOUNDARY_EXTRAPOLATION = True ! [Boolean] default = False + ! When defined, a proper high-order reconstruction scheme is used within + ! boundary cells rather than PCM. E.g., if PPM is used for remapping, a PPM + ! reconstruction will also be used within boundary cells. +ALE_COORDINATE_CONFIG = "HYBRID:hycom1_75_800m.nc,sigma2,FNC1:2,4000,4.5,.01" ! default = "UNIFORM" + ! Determines how to specify the coordinate resolution. Valid options are: + ! PARAM - use the vector-parameter ALE_RESOLUTION + ! UNIFORM[:N] - uniformly distributed + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,dz + ! or FILE:lev.nc,interfaces=zw + ! WOA09[:N] - the WOA09 vertical grid (approximately) + ! FNC1:string - FNC1:dz_min,H_total,power,precision + ! HYBRID:string - read from a file. The string specifies + ! the filename and two variable names, separated + ! by a comma or space, for sigma-2 and dz. e.g. + ! HYBRID:vgrid.nc,sigma2,dz +!ALE_RESOLUTION = 7*2.0, 2*2.01, 2.02, 2.03, 2.05, 2.08, 2.11, 2.15, 2.21, 2.2800000000000002, 2.37, 2.48, 2.61, 2.77, 2.95, 3.17, 3.4299999999999997, 3.74, 4.09, 4.49, 4.95, 5.48, 6.07, 6.74, 7.5, 8.34, 9.280000000000001, 10.33, 11.49, 12.77, 14.19, 15.74, 17.450000000000003, 19.31, 21.35, 23.56, 25.97, 28.580000000000002, 31.41, 34.47, 37.77, 41.32, 45.14, 49.25, 53.65, 58.370000000000005, 63.42, 68.81, 74.56, 80.68, 87.21000000000001, 94.14, 101.51, 109.33, 117.62, 126.4, 135.68, 145.5, 155.87, 166.81, 178.35, 190.51, 203.31, 216.78, 230.93, 245.8, 261.42, 277.83 ! [m] + ! The distribution of vertical resolution for the target + ! grid used for Eulerian-like coordinates. For example, + ! in z-coordinate mode, the parameter is a list of level + ! thicknesses (in m). In sigma-coordinate mode, the list + ! is of non-dimensional fractions of the water column. +!TARGET_DENSITIES = 1010.0, 1014.3034, 1017.8088, 1020.843, 1023.5566, 1025.813, 1027.0275, 1027.9114, 1028.6422, 1029.2795, 1029.852, 1030.3762, 1030.8626, 1031.3183, 1031.7486, 1032.1572, 1032.5471, 1032.9207, 1033.2798, 1033.6261, 1033.9608, 1034.2519, 1034.4817, 1034.6774, 1034.8508, 1035.0082, 1035.1533, 1035.2886, 1035.4159, 1035.5364, 1035.6511, 1035.7608, 1035.8661, 1035.9675, 1036.0645, 1036.1554, 1036.2411, 1036.3223, 1036.3998, 1036.4739, 1036.5451, 1036.6137, 1036.68, 1036.7441, 1036.8062, 1036.8526, 1036.8874, 1036.9164, 1036.9418, 1036.9647, 1036.9857, 1037.0052, 1037.0236, 1037.0409, 1037.0574, 1037.0738, 1037.0902, 1037.1066, 1037.123, 1037.1394, 1037.1558, 1037.1722, 1037.1887, 1037.206, 1037.2241, 1037.2435, 1037.2642, 1037.2866, 1037.3112, 1037.3389, 1037.3713, 1037.4118, 1037.475, 1037.6332, 1037.8104, 1038.0 ! [m] + ! HYBRID target densities for interfaces +MAXIMUM_INT_DEPTH_CONFIG = "FNC1:5,8000.0,1.0,.01" ! default = "NONE" + ! Determines how to specify the maximum interface depths. + ! Valid options are: + ! NONE - there are no maximum interface depths + ! PARAM - use the vector-parameter MAXIMUM_INTERFACE_DEPTHS + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,Z + ! FNC1:string - FNC1:dz_min,H_total,power,precision +!MAXIMUM_INT_DEPTHS = 0.0, 5.0, 12.75, 23.25, 36.49, 52.480000000000004, 71.22, 92.71000000000001, 116.94000000000001, 143.92000000000002, 173.65, 206.13, 241.36, 279.33000000000004, 320.05000000000007, 363.5200000000001, 409.7400000000001, 458.7000000000001, 510.4100000000001, 564.8700000000001, 622.0800000000002, 682.0300000000002, 744.7300000000002, 810.1800000000003, 878.3800000000003, 949.3300000000004, 1023.0200000000004, 1099.4600000000005, 1178.6500000000005, 1260.5900000000006, 1345.2700000000007, 1432.7000000000007, 1522.8800000000008, 1615.8100000000009, 1711.490000000001, 1809.910000000001, 1911.080000000001, 2015.0000000000011, 2121.670000000001, 2231.080000000001, 2343.2400000000007, 2458.1500000000005, 2575.8100000000004, 2696.2200000000003, 2819.3700000000003, 2945.2700000000004, 3073.9200000000005, 3205.3200000000006, 3339.4600000000005, 3476.3500000000004, 3615.9900000000002, 3758.38, 3903.52, 4051.4, 4202.03, 4355.41, 4511.54, 4670.41, 4832.03, 4996.4, 5163.5199999999995, 5333.379999999999, 5505.989999999999, 5681.3499999999985, 5859.459999999998, 6040.319999999998, 6223.919999999998, 6410.269999999999, 6599.369999999999, 6791.219999999999, 6985.8099999999995, 7183.15, 7383.24, 7586.08, 7791.67, 8000.0 + ! The list of maximum depths for each interface. +MAX_LAYER_THICKNESS_CONFIG = "FNC1:400,31000.0,0.1,.01" ! default = "NONE" + ! Determines how to specify the maximum layer thicknesses. + ! Valid options are: + ! NONE - there are no maximum layer thicknesses + ! PARAM - use the vector-parameter MAX_LAYER_THICKNESS + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,Z + ! FNC1:string - FNC1:dz_min,H_total,power,precision +!MAX_LAYER_THICKNESS = 400.0, 409.63, 410.32, 410.75, 411.07, 411.32, 411.52, 411.7, 411.86, 412.0, 412.13, 412.24, 412.35, 412.45, 412.54, 412.63, 412.71, 412.79, 412.86, 412.93, 413.0, 413.06, 413.12, 413.18, 413.24, 413.29, 413.34, 413.39, 413.44, 413.49, 413.54, 413.58, 413.62, 413.67, 413.71, 413.75, 413.78, 413.82, 413.86, 413.9, 413.93, 413.97, 414.0, 414.03, 414.06, 414.1, 414.13, 414.16, 414.19, 414.22, 414.24, 414.27, 414.3, 414.33, 414.35, 414.38, 414.41, 414.43, 414.46, 414.48, 414.51, 414.53, 414.55, 414.58, 414.6, 414.62, 414.65, 414.67, 414.69, 414.71, 414.73, 414.75, 414.77, 414.79, 414.83 ! [m] + ! The list of maximum thickness for each layer. +REMAPPING_SCHEME = "PPM_H4" ! default = "PLM" + ! This sets the reconstruction scheme used for vertical remapping for all + ! variables. It can be one of the following schemes: PCM (1st-order + ! accurate) + ! PLM (2nd-order accurate) + ! PPM_H4 (3rd-order accurate) + ! PPM_IH4 (3rd-order accurate) + ! PQM_IH4IH3 (4th-order accurate) + ! PQM_IH6IH5 (5th-order accurate) + +! === module MOM_grid === +! Parameters providing information about the lateral grid. + +! === module MOM_state_initialization === +INIT_LAYERS_FROM_Z_FILE = True ! [Boolean] default = False + ! If true, initialize the layer thicknesses, temperatures, and salinities from a + ! Z-space file on a latitude-longitude grid. + +! === module MOM_initialize_layers_from_Z === +TEMP_SALT_Z_INIT_FILE = "MOM6_IC_TS.nc" ! default = "temp_salt_z.nc" + ! The name of the z-space input file used to initialize + ! temperatures (T) and salinities (S). If T and S are not + ! in the same file, TEMP_Z_INIT_FILE and SALT_Z_INIT_FILE + ! must be set. +Z_INIT_FILE_PTEMP_VAR = "temp" ! default = "ptemp" + ! The name of the potential temperature variable in + ! TEMP_Z_INIT_FILE. +Z_INIT_FILE_SALT_VAR = "salt" ! default = "salt" + ! The name of the salinity variable in + ! SALT_Z_INIT_FILE. +Z_INIT_ALE_REMAPPING = True ! [Boolean] default = False + ! If True, then remap straight to model coordinate from file. +Z_INIT_REMAP_OLD_ALG = True ! [Boolean] default = False + ! If false, uses the preferred remapping algorithm for initialization. If true, + ! use an older, less robust algorithm for remapping. + +! === module MOM_diag_mediator === +!Jiande NUM_DIAG_COORDS = 2 ! default = 1 +NUM_DIAG_COORDS = 1 + ! The number of diagnostic vertical coordinates to use. + ! For each coordinate, an entry in DIAG_COORDS must be provided. +!Jiande DIAG_COORDS = "z Z ZSTAR", "rho2 RHO2 RHO" ! +DIAG_COORDS = "z Z ZSTAR" + ! A list of string tuples associating diag_table modules to + ! a coordinate definition used for diagnostics. Each string + ! is of the form "MODULE_SUFFIX,PARAMETER_SUFFIX,COORDINATE_NAME". +DIAG_COORD_DEF_Z="FILE:@[MOM6_DIAG_COORD_DEF_Z_FILE],interfaces=zw" +DIAG_MISVAL = @[MOM6_DIAG_MISVAL] +!AVAILABLE_DIAGS_FILE = "available_diags.002160" ! default = "available_diags.000000" + ! A file into which to write a list of all available ocean diagnostics that can + ! be included in a diag_table. +!DIAG_COORD_DEF_Z = "FILE:vgrid_75_2m.nc,dz" ! default = "WOA09" + ! Determines how to specify the coordinate resolution. Valid options are: + ! PARAM - use the vector-parameter DIAG_COORD_RES_Z + ! UNIFORM[:N] - uniformly distributed + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,dz + ! or FILE:lev.nc,interfaces=zw + ! WOA09[:N] - the WOA09 vertical grid (approximately) + ! FNC1:string - FNC1:dz_min,H_total,power,precision + ! HYBRID:string - read from a file. The string specifies + ! the filename and two variable names, separated + ! by a comma or space, for sigma-2 and dz. e.g. + ! HYBRID:vgrid.nc,sigma2,dz +!DIAG_COORD_DEF_RHO2 = "RFNC1:35,999.5,1028,1028.5,8.,1038.,0.0078125" ! default = "WOA09" + ! Determines how to specify the coordinate resolution. Valid options are: + ! PARAM - use the vector-parameter DIAG_COORD_RES_RHO2 + ! UNIFORM[:N] - uniformly distributed + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,dz + ! or FILE:lev.nc,interfaces=zw + ! WOA09[:N] - the WOA09 vertical grid (approximately) + ! FNC1:string - FNC1:dz_min,H_total,power,precision + ! HYBRID:string - read from a file. The string specifies + ! the filename and two variable names, separated + ! by a comma or space, for sigma-2 and dz. e.g. + ! HYBRID:vgrid.nc,sigma2,dz + +! === module MOM_MEKE === +USE_MEKE = True ! [Boolean] default = False + ! If true, turns on the MEKE scheme which calculates a sub-grid mesoscale eddy + ! kinetic energy budget. +MEKE_GMCOEFF = 1.0 ! [nondim] default = -1.0 + ! The efficiency of the conversion of potential energy into MEKE by the + ! thickness mixing parameterization. If MEKE_GMCOEFF is negative, this + ! conversion is not used or calculated. +MEKE_BGSRC = 1.0E-13 ! [W kg-1] default = 0.0 + ! A background energy source for MEKE. +MEKE_KHTH_FAC = 0.8 ! [nondim] default = 0.0 + ! A factor that maps MEKE%Kh to KhTh. +MEKE_KHTR_FAC = 0.8 ! [nondim] default = 0.0 + ! A factor that maps MEKE%Kh to KhTr. +MEKE_ALPHA_RHINES = 0.05 ! [nondim] default = 0.0 + ! If positive, is a coefficient weighting the Rhines scale in the expression for + ! mixing length used in MEKE-derived diffusivity. +MEKE_ALPHA_EADY = 0.05 ! [nondim] default = 0.0 + ! If positive, is a coefficient weighting the Eady length scale in the + ! expression for mixing length used in MEKE-derived diffusivity. + +! === module MOM_lateral_mixing_coeffs === +USE_VARIABLE_MIXING = True ! [Boolean] default = False + ! If true, the variable mixing code will be called. This allows diagnostics to + ! be created even if the scheme is not used. If KHTR_SLOPE_CFF>0 or + ! KhTh_Slope_Cff>0, this is set to true regardless of what is in the parameter + ! file. +RESOLN_SCALED_KH = True ! [Boolean] default = False + ! If true, the Laplacian lateral viscosity is scaled away when the first + ! baroclinic deformation radius is well resolved. +RESOLN_SCALED_KHTH = True ! [Boolean] default = False + ! If true, the interface depth diffusivity is scaled away when the first + ! baroclinic deformation radius is well resolved. +KHTR_SLOPE_CFF = 0.25 ! [nondim] default = 0.0 + ! The nondimensional coefficient in the Visbeck formula for the epipycnal tracer + ! diffusivity +USE_STORED_SLOPES = True ! [Boolean] default = False + ! If true, the isopycnal slopes are calculated once and stored for re-use. This + ! uses more memory but avoids calling the equation of state more times than + ! should be necessary. +KH_RES_FN_POWER = 100 ! [nondim] default = 2 + ! The power of dx/Ld in the Kh resolution function. Any positive integer may be + ! used, although even integers are more efficient to calculate. Setting this + ! greater than 100 results in a step-function being used. +VISC_RES_FN_POWER = 2 ! [nondim] default = 100 + ! The power of dx/Ld in the Kh resolution function. Any positive integer may be + ! used, although even integers are more efficient to calculate. Setting this + ! greater than 100 results in a step-function being used. This function affects + ! lateral viscosity, Kh, and not KhTh. +INTERNAL_WAVE_SPEED_BETTER_EST = False ! [Boolean] default = True + ! If true, use a more robust estimate of the first mode wave speed as the + ! starting point for iterations. + +! === module MOM_set_visc === +CHANNEL_DRAG = True ! [Boolean] default = False + ! If true, the bottom drag is exerted directly on each layer proportional to the + ! fraction of the bottom it overlies. +HBBL = 10.0 ! [m] + ! The thickness of a bottom boundary layer with a viscosity of KVBBL if + ! BOTTOMDRAGLAW is not defined, or the thickness over which near-bottom + ! velocities are averaged for the drag law if BOTTOMDRAGLAW is defined but + ! LINEAR_DRAG is not. +DRAG_BG_VEL = 0.1 ! [m s-1] default = 0.0 + ! DRAG_BG_VEL is either the assumed bottom velocity (with LINEAR_DRAG) or an + ! unresolved velocity that is combined with the resolved velocity to estimate + ! the velocity magnitude. DRAG_BG_VEL is only used when BOTTOMDRAGLAW is + ! defined. +BBL_USE_EOS = True ! [Boolean] default = False + ! If true, use the equation of state in determining the properties of the bottom + ! boundary layer. Otherwise use the layer target potential densities. +BBL_THICK_MIN = 0.1 ! [m] default = 0.0 + ! The minimum bottom boundary layer thickness that can be used with + ! BOTTOMDRAGLAW. This might be Kv/(cdrag*drag_bg_vel) to give Kv as the minimum + ! near-bottom viscosity. +KV = 1.0E-04 ! [m2 s-1] + ! The background kinematic viscosity in the interior. The molecular value, ~1e-6 + ! m2 s-1, may be used. +KV_BBL_MIN = 0.0 ! [m2 s-1] default = 1.0E-04 + ! The minimum viscosities in the bottom boundary layer. +KV_TBL_MIN = 0.0 ! [m2 s-1] default = 1.0E-04 + ! The minimum viscosities in the top boundary layer. + +! === module MOM_thickness_diffuse === +USE_GM_WORK_BUG = True ! [Boolean] default = False + ! If true, compute the top-layer work tendency on the u-grid with the incorrect + ! sign, for legacy reproducibility. + +! === module MOM_dynamics_split_RK2 === + +! === module MOM_continuity === + +! === module MOM_continuity_PPM === +ETA_TOLERANCE = 1.0E-06 ! [m] default = 3.75E-09 + ! The tolerance for the differences between the barotropic and baroclinic + ! estimates of the sea surface height due to the fluxes through each face. The + ! total tolerance for SSH is 4 times this value. The default is + ! 0.5*NK*ANGSTROM, and this should not be set less than about + ! 10^-15*MAXIMUM_DEPTH. +ETA_TOLERANCE_AUX = 0.001 ! [m] default = 1.0E-06 + ! The tolerance for free-surface height discrepancies between the barotropic + ! solution and the sum of the layer thicknesses when calculating the auxiliary + ! corrected velocities. By default, this is the same as ETA_TOLERANCE, but can + ! be made larger for efficiency. + +! === module MOM_CoriolisAdv === +CORIOLIS_SCHEME = "SADOURNY75_ENSTRO" ! default = "SADOURNY75_ENERGY" + ! CORIOLIS_SCHEME selects the discretization for the Coriolis terms. Valid + ! values are: + ! SADOURNY75_ENERGY - Sadourny, 1975; energy cons. + ! ARAKAWA_HSU90 - Arakawa & Hsu, 1990 + ! SADOURNY75_ENSTRO - Sadourny, 1975; enstrophy cons. + ! ARAKAWA_LAMB81 - Arakawa & Lamb, 1981; En. + Enst. + ! ARAKAWA_LAMB_BLEND - A blend of Arakawa & Lamb with + ! Arakawa & Hsu and Sadourny energy +BOUND_CORIOLIS = True ! [Boolean] default = False + ! If true, the Coriolis terms at u-points are bounded by the four estimates of + ! (f+rv)v from the four neighboring v-points, and similarly at v-points. This + ! option would have no effect on the SADOURNY Coriolis scheme if it were + ! possible to use centered difference thickness fluxes. + +! === module MOM_PressureForce === + +! === module MOM_PressureForce_AFV === +MASS_WEIGHT_IN_PRESSURE_GRADIENT = True ! [Boolean] default = False + ! If true, use mass weighting when interpolating T/S for integrals near the + ! bathymetry in AFV pressure gradient calculations. + +! === module MOM_hor_visc === +LAPLACIAN = True ! [Boolean] default = False + ! If true, use a Laplacian horizontal viscosity. +SMAGORINSKY_KH = True ! [Boolean] default = False + ! If true, use a Smagorinsky nonlinear eddy viscosity. +SMAG_LAP_CONST = 0.15 ! [nondim] default = 0.0 + ! The nondimensional Laplacian Smagorinsky constant, often 0.15. +AH_VEL_SCALE = 0.05 ! [m s-1] default = 0.0 + ! The velocity scale which is multiplied by the cube of the grid spacing to + ! calculate the biharmonic viscosity. The final viscosity is the largest of this + ! scaled viscosity, the Smagorinsky and Leith viscosities, and AH. +SMAGORINSKY_AH = True ! [Boolean] default = False + ! If true, use a biharmonic Smagorinsky nonlinear eddy viscosity. +SMAG_BI_CONST = 0.06 ! [nondim] default = 0.0 + ! The nondimensional biharmonic Smagorinsky constant, typically 0.015 - 0.06. +USE_KH_BG_2D = True ! [Boolean] default = False + ! If true, read a file containing 2-d background harmonic viscosities. The final + ! viscosity is the maximum of the other terms and this background value. + +! === module MOM_vert_friction === +HMIX_FIXED = 0.5 ! [m] + ! The prescribed depth over which the near-surface viscosity and diffusivity are + ! elevated when the bulk mixed layer is not used. +KVML = 1.0E-04 ! [m2 s-1] default = 1.0E-04 + ! The kinematic viscosity in the mixed layer. A typical value is ~1e-2 m2 s-1. + ! KVML is not used if BULKMIXEDLAYER is true. The default is set by KV. +MAXVEL = 6.0 ! [m s-1] default = 3.0E+08 + ! The maximum velocity allowed before the velocity components are truncated. + +! === module MOM_barotropic === +BOUND_BT_CORRECTION = True ! [Boolean] default = False + ! If true, the corrective pseudo mass-fluxes into the barotropic solver are + ! limited to values that require less than maxCFL_BT_cont to be accommodated. +BT_PROJECT_VELOCITY = True ! [Boolean] default = False + ! If true, step the barotropic velocity first and project out the velocity + ! tendency by 1+BEBT when calculating the transport. The default (false) is to + ! use a predictor continuity step to find the pressure field, and then to do a + ! corrector continuity step using a weighted average of the old and new + ! velocities, with weights of (1-BEBT) and BEBT. +BT_STRONG_DRAG = True ! [Boolean] default = False + ! If true, use a stronger estimate of the retarding effects of strong bottom + ! drag, by making it implicit with the barotropic time-step instead of implicit + ! with the baroclinic time-step and dividing by the number of barotropic steps. +BEBT = 0.2 ! [nondim] default = 0.1 + ! BEBT determines whether the barotropic time stepping uses the forward-backward + ! time-stepping scheme or a backward Euler scheme. BEBT is valid in the range + ! from 0 (for a forward-backward treatment of nonrotating gravity waves) to 1 + ! (for a backward Euler treatment). In practice, BEBT must be greater than about + ! 0.05. +DTBT = -0.9 ! [s or nondim] default = -0.98 + ! The barotropic time step, in s. DTBT is only used with the split explicit time + ! stepping. To set the time step automatically based the maximum stable value + ! use 0, or a negative value gives the fraction of the stable value. Setting + ! DTBT to 0 is the same as setting it to -0.98. The value of DTBT that will + ! actually be used is an integer fraction of DT, rounding down. + +! === module MOM_mixed_layer_restrat === +MIXEDLAYER_RESTRAT = True ! [Boolean] default = False + ! If true, a density-gradient dependent re-stratifying flow is imposed in the + ! mixed layer. Can be used in ALE mode without restriction but in layer mode can + ! only be used if BULKMIXEDLAYER is true. +FOX_KEMPER_ML_RESTRAT_COEF = 60.0 ! [nondim] default = 0.0 + ! A nondimensional coefficient that is proportional to the ratio of the + ! deformation radius to the dominant lengthscale of the submesoscale mixed layer + ! instabilities, times the minimum of the ratio of the mesoscale eddy kinetic + ! energy to the large-scale geostrophic kinetic energy or 1 plus the square of + ! the grid spacing over the deformation radius, as detailed by Fox-Kemper et al. + ! (2010) +MLE_USE_PBL_MLD = True ! [Boolean] default = False + ! If true, the MLE parameterization will use the mixed-layer depth provided by + ! the active PBL parameterization. If false, MLE will estimate a MLD based on a + ! density difference with the surface using the parameter MLE_DENSITY_DIFF. +MLE_MLD_DECAY_TIME = 2.592E+06 ! [s] default = 0.0 + ! The time-scale for a running-mean filter applied to the mixed-layer depth used + ! in the MLE restratification parameterization. When the MLD deepens below the + ! current running-mean the running-mean is instantaneously set to the current + ! MLD. + +! === module MOM_diabatic_driver === +! The following parameters are used for diabatic processes. +ENERGETICS_SFC_PBL = True ! [Boolean] default = False + ! If true, use an implied energetics planetary boundary layer scheme to + ! determine the diffusivity and viscosity in the surface boundary layer. +EPBL_IS_ADDITIVE = False ! [Boolean] default = True + ! If true, the diffusivity from ePBL is added to all other diffusivities. + ! Otherwise, the larger of kappa-shear and ePBL diffusivities are used. +KD_MIN_TR = 2.0E-06 ! [m2 s-1] default = 2.0E-06 + ! A minimal diffusivity that should always be applied to tracers, especially in + ! massless layers near the bottom. The default is 0.1*KD. + +! === module MOM_CVMix_KPP === +! This is the MOM wrapper to CVMix:KPP +! See http://cvmix.github.io/ + +! === module MOM_tidal_mixing === +! Vertical Tidal Mixing Parameterization +INT_TIDE_DISSIPATION = True ! [Boolean] default = False + ! If true, use an internal tidal dissipation scheme to drive diapycnal mixing, + ! along the lines of St. Laurent et al. (2002) and Simmons et al. (2004). +INT_TIDE_PROFILE = "POLZIN_09" ! default = "STLAURENT_02" + ! INT_TIDE_PROFILE selects the vertical profile of energy dissipation with + ! INT_TIDE_DISSIPATION. Valid values are: + ! STLAURENT_02 - Use the St. Laurent et al exponential + ! decay profile. + ! POLZIN_09 - Use the Polzin WKB-stretched algebraic + ! decay profile. +KAPPA_ITIDES = 6.28319E-04 ! [m-1] default = 6.283185307179586E-04 + ! A topographic wavenumber used with INT_TIDE_DISSIPATION. The default is 2pi/10 + ! km, as in St.Laurent et al. 2002. +KAPPA_H2_FACTOR = 0.84 ! [nondim] default = 1.0 + ! A scaling factor for the roughness amplitude with INT_TIDE_DISSIPATION. +TKE_ITIDE_MAX = 0.1 ! [W m-2] default = 1000.0 + ! The maximum internal tide energy source available to mix above the bottom + ! boundary layer with INT_TIDE_DISSIPATION. +READ_TIDEAMP = True ! [Boolean] default = False + ! If true, read a file (given by TIDEAMP_FILE) containing the tidal amplitude + ! with INT_TIDE_DISSIPATION. +TIDEAMP_FILE = "tidal_amplitude.nc" ! default = "tideamp.nc" + ! The path to the file containing the spatially varying tidal amplitudes with + ! INT_TIDE_DISSIPATION. +H2_FILE = "topog.nc" ! + ! The path to the file containing the sub-grid-scale topographic roughness + ! amplitude with INT_TIDE_DISSIPATION. + +! === module MOM_CVMix_conv === +! Parameterization of enhanced mixing due to convection via CVMix + +! === module MOM_set_diffusivity === +BBL_MIXING_AS_MAX = False ! [Boolean] default = True + ! If true, take the maximum of the diffusivity from the BBL mixing and the other + ! diffusivities. Otherwise, diffusivity from the BBL_mixing is simply added. +USE_LOTW_BBL_DIFFUSIVITY = True ! [Boolean] default = False + ! If true, uses a simple, imprecise but non-coordinate dependent, model of BBL + ! mixing diffusivity based on Law of the Wall. Otherwise, uses the original BBL + ! scheme. +SIMPLE_TKE_TO_KD = True ! [Boolean] default = False + ! If true, uses a simple estimate of Kd/TKE that will work for arbitrary + ! vertical coordinates. If false, calculates Kd/TKE and bounds based on exact + ! energetics for an isopycnal layer-formulation. + +! === module MOM_bkgnd_mixing === +! Adding static vertical background mixing coefficients +KD = 2.0E-05 ! [m2 s-1] default = 0.0 + ! The background diapycnal diffusivity of density in the interior. Zero or the + ! molecular value, ~1e-7 m2 s-1, may be used. +KD_MIN = 2.0E-06 ! [m2 s-1] default = 2.0E-07 + ! The minimum diapycnal diffusivity. +HENYEY_IGW_BACKGROUND = True ! [Boolean] default = False + ! If true, use a latitude-dependent scaling for the near surface background + ! diffusivity, as described in Harrison & Hallberg, JPO 2008. +KD_MAX = 0.1 ! [m2 s-1] default = -1.0 + ! The maximum permitted increment for the diapycnal diffusivity from TKE-based + ! parameterizations, or a negative value for no limit. + +! === module MOM_kappa_shear === +! Parameterization of shear-driven turbulence following Jackson, Hallberg and Legg, JPO 2008 +USE_JACKSON_PARAM = True ! [Boolean] default = False + ! If true, use the Jackson-Hallberg-Legg (JPO 2008) shear mixing + ! parameterization. +MAX_RINO_IT = 25 ! [nondim] default = 50 + ! The maximum number of iterations that may be used to estimate the Richardson + ! number driven mixing. +VERTEX_SHEAR = False ! [Boolean] default = False + ! If true, do the calculations of the shear-driven mixing + ! at the cell vertices (i.e., the vorticity points). +KD_TRUNC_KAPPA_SHEAR = 2.0E-07 ! [m2 s-1] default = 2.0E-07 + ! The value of shear-driven diffusivity that is considered negligible and is + ! rounded down to 0. The default is 1% of KD_KAPPA_SHEAR_0. +KAPPA_SHEAR_ITER_BUG = True ! [Boolean] default = False + ! If true, use an older, dimensionally inconsistent estimate of the derivative + ! of diffusivity with energy in the Newton's method iteration. The bug causes + ! undercorrections when dz > 1 m. +KAPPA_SHEAR_ALL_LAYER_TKE_BUG = True ! [Boolean] default = False + ! If true, report back the latest estimate of TKE instead of the time average + ! TKE when there is mass in all layers. Otherwise always report the time + ! averaged TKE, as is currently done when there are some massless layers. + +! === module MOM_CVMix_shear === +! Parameterization of shear-driven turbulence via CVMix (various options) + +! === module MOM_CVMix_ddiff === +! Parameterization of mixing due to double diffusion processes via CVMix + +! === module MOM_diabatic_aux === +! The following parameters are used for auxiliary diabatic processes. +PRESSURE_DEPENDENT_FRAZIL = False ! [Boolean] default = False + ! If true, use a pressure dependent freezing temperature when making frazil. The + ! default is false, which will be faster but is inappropriate with ice-shelf + ! cavities. +VAR_PEN_SW = True ! [Boolean] default = False + ! If true, use one of the CHL_A schemes specified by OPACITY_SCHEME to determine + ! the e-folding depth of incoming short wave radiation. +CHL_FILE = @[CHLCLIM] ! + ! CHL_FILE is the file containing chl_a concentrations in the variable CHL_A. It + ! is used when VAR_PEN_SW and CHL_FROM_FILE are true. + +! === module MOM_energetic_PBL === +ML_OMEGA_FRAC = 0.001 ! [nondim] default = 0.0 + ! When setting the decay scale for turbulence, use this fraction of the absolute + ! rotation rate blended with the local value of f, as sqrt((1-of)*f^2 + + ! of*4*omega^2). +TKE_DECAY = 0.01 ! [nondim] default = 2.5 + ! TKE_DECAY relates the vertical rate of decay of the TKE available for + ! mechanical entrainment to the natural Ekman depth. +EPBL_MSTAR_SCHEME = "OM4" ! default = "CONSTANT" + ! EPBL_MSTAR_SCHEME selects the method for setting mstar. Valid values are: + ! CONSTANT - Use a fixed mstar given by MSTAR + ! OM4 - Use L_Ekman/L_Obukhov in the sabilizing limit, as in OM4 + ! REICHL_H18 - Use the scheme documented in Reichl & Hallberg, 2018. +MSTAR_CAP = 10.0 ! [nondim] default = -1.0 + ! If this value is positive, it sets the maximum value of mstar allowed in ePBL. + ! (This is not used if EPBL_MSTAR_SCHEME = CONSTANT). +MSTAR2_COEF1 = 0.29 ! [nondim] default = 0.3 + ! Coefficient in computing mstar when rotation and stabilizing effects are both + ! important (used if EPBL_MSTAR_SCHEME = OM4). +MSTAR2_COEF2 = 0.152 ! [nondim] default = 0.085 + ! Coefficient in computing mstar when only rotation limits the total mixing + ! (used if EPBL_MSTAR_SCHEME = OM4) +NSTAR = 0.06 ! [nondim] default = 0.2 + ! The portion of the buoyant potential energy imparted by surface fluxes that is + ! available to drive entrainment at the base of mixed layer when that energy is + ! positive. +MSTAR_CONV_ADJ = 0.667 ! [nondim] default = 0.0 + ! Coefficient used for reducing mstar during convection due to reduction of + ! stable density gradient. +USE_MLD_ITERATION = False ! [Boolean] default = True + ! A logical that specifies whether or not to use the distance to the bottom of + ! the actively turbulent boundary layer to help set the EPBL length scale. +EPBL_TRANSITION_SCALE = 0.01 ! [nondim] default = 0.1 + ! A scale for the mixing length in the transition layer at the edge of the + ! boundary layer as a fraction of the boundary layer thickness. +MIX_LEN_EXPONENT = 1.0 ! [nondim] default = 2.0 + ! The exponent applied to the ratio of the distance to the MLD and the MLD depth + ! which determines the shape of the mixing length. This is only used if + ! USE_MLD_ITERATION is True. +USE_LA_LI2016 = @[MOM6_USE_LI2016] ! [nondim] default = False + ! A logical to use the Li et al. 2016 (submitted) formula to determine the + ! Langmuir number. +USE_WAVES = @[MOM6_USE_WAVES] ! [Boolean] default = False + ! If true, enables surface wave modules. +WAVE_METHOD = "SURFACE_BANDS" ! default = "EMPTY" + ! Choice of wave method, valid options include: + ! TEST_PROFILE - Prescribed from surface Stokes drift + ! and a decay wavelength. + ! SURFACE_BANDS - Computed from multiple surface values + ! and decay wavelengths. + ! DHH85 - Uses Donelan et al. 1985 empirical + ! wave spectrum with prescribed values. + ! LF17 - Infers Stokes drift profile from wind + ! speed following Li and Fox-Kemper 2017. +SURFBAND_SOURCE = "COUPLER" ! default = "EMPTY" + ! Choice of SURFACE_BANDS data mode, valid options include: + ! DATAOVERRIDE - Read from NetCDF using FMS DataOverride. + ! COUPLER - Look for variables from coupler pass + ! INPUT - Testing with fixed values. +STK_BAND_COUPLER = 3 ! default = 1 + ! STK_BAND_COUPLER is the number of Stokes drift bands in the coupler. This has + ! to be consistent with the number of Stokes drift bands in WW3, or the model + ! will fail. +SURFBAND_WAVENUMBERS = 0.04, 0.11, 0.3305 ! [rad/m] default = 0.12566 + ! Central wavenumbers for surface Stokes drift bands. +EPBL_LANGMUIR_SCHEME = "ADDITIVE" ! default = "NONE" + ! EPBL_LANGMUIR_SCHEME selects the method for including Langmuir turbulence. + ! Valid values are: + ! NONE - Do not do any extra mixing due to Langmuir turbulence + ! RESCALE - Use a multiplicative rescaling of mstar to account for Langmuir + ! turbulence + ! ADDITIVE - Add a Langmuir turblence contribution to mstar to other + ! contributions +LT_ENHANCE_COEF = 0.044 ! [nondim] default = 0.447 + ! Coefficient for Langmuir enhancement of mstar +LT_ENHANCE_EXP = -1.5 ! [nondim] default = -1.33 + ! Exponent for Langmuir enhancementt of mstar +LT_MOD_LAC1 = 0.0 ! [nondim] default = -0.87 + ! Coefficient for modification of Langmuir number due to MLD approaching Ekman + ! depth. +LT_MOD_LAC4 = 0.0 ! [nondim] default = 0.95 + ! Coefficient for modification of Langmuir number due to ratio of Ekman to + ! stable Obukhov depth. +LT_MOD_LAC5 = 0.22 ! [nondim] default = 0.95 + ! Coefficient for modification of Langmuir number due to ratio of Ekman to + ! unstable Obukhov depth. + +! === module MOM_regularize_layers === + +! === module MOM_opacity === +PEN_SW_NBANDS = 3 ! default = 1 + ! The number of bands of penetrating shortwave radiation. + +! === module MOM_tracer_advect === +TRACER_ADVECTION_SCHEME = "PPM:H3" ! default = "PLM" + ! The horizontal transport scheme for tracers: + ! PLM - Piecewise Linear Method + ! PPM:H3 - Piecewise Parabolic Method (Huyhn 3rd order) + ! PPM - Piecewise Parabolic Method (Colella-Woodward) + +! === module MOM_tracer_hor_diff === +CHECK_DIFFUSIVE_CFL = True ! [Boolean] default = False + ! If true, use enough iterations the diffusion to ensure that the diffusive + ! equivalent of the CFL limit is not violated. If false, always use the greater + ! of 1 or MAX_TR_DIFFUSION_CFL iteration. + +! === module MOM_neutral_diffusion === +! This module implements neutral diffusion of tracers +USE_NEUTRAL_DIFFUSION = True ! [Boolean] default = False + ! If true, enables the neutral diffusion module. + +! === module MOM_lateral_boundary_diffusion === +! This module implements lateral diffusion of tracers near boundaries + +! === module MOM_sum_output === +CALCULATE_APE = False ! [Boolean] default = True + ! If true, calculate the available potential energy of the interfaces. Setting + ! this to false reduces the memory footprint of high-PE-count models + ! dramatically. +MAXTRUNC = 100000 ! [truncations save_interval-1] default = 0 + ! The run will be stopped, and the day set to a very large value if the velocity + ! is truncated more than MAXTRUNC times between energy saves. Set MAXTRUNC to 0 + ! to stop if there is any truncation of velocities. +ENERGYSAVEDAYS = 0.25 ! [days] default = 1.0 + ! The interval in units of TIMEUNIT between saves of the energies of the run and + ! other globally summed diagnostics. + +! === module ocean_model_init === + +! === module MOM_oda_incupd === +ODA_INCUPD = @[ODA_INCUPD] ! [Boolean] default = False + ! If true, oda incremental updates will be applied + ! everywhere in the domain. +ODA_INCUPD_FILE = "mom6_increment.nc" ! The name of the file with the T,S,h increments. + +ODA_TEMPINC_VAR = "Temp" ! default = "ptemp_inc" + ! The name of the potential temperature inc. variable in + ! ODA_INCUPD_FILE. +ODA_SALTINC_VAR = "Salt" ! default = "sal_inc" + ! The name of the salinity inc. variable in + ! ODA_INCUPD_FILE. +ODA_THK_VAR = "h" ! default = "h" + ! The name of the int. depth inc. variable in + ! ODA_INCUPD_FILE. +ODA_INCUPD_UV = true ! +ODA_UINC_VAR = "u" ! default = "u_inc" + ! The name of the zonal vel. inc. variable in + ! ODA_INCUPD_UV_FILE. +ODA_VINC_VAR = "v" ! default = "v_inc" + ! The name of the meridional vel. inc. variable in + ! ODA_INCUPD_UV_FILE. +ODA_INCUPD_NHOURS = @[ODA_INCUPD_NHOURS] ! default=3.0 + +! === module MOM_surface_forcing === +OCEAN_SURFACE_STAGGER = "A" ! default = "C" + ! A case-insensitive character string to indicate the + ! staggering of the surface velocity field that is + ! returned to the coupler. Valid values include + ! 'A', 'B', or 'C'. + +MAX_P_SURF = 0.0 ! [Pa] default = -1.0 + ! The maximum surface pressure that can be exerted by the atmosphere and + ! floating sea-ice or ice shelves. This is needed because the FMS coupling + ! structure does not limit the water that can be frozen out of the ocean and the + ! ice-ocean heat fluxes are treated explicitly. No limit is applied if a + ! negative value is used. +WIND_STAGGER = "A" ! default = "C" + ! A case-insensitive character string to indicate the + ! staggering of the input wind stress field. Valid + ! values are 'A', 'B', or 'C'. +CD_TIDES = 0.0018 ! [nondim] default = 1.0E-04 + ! The drag coefficient that applies to the tides. +GUST_CONST = 0.02 ! [Pa] default = 0.0 + ! The background gustiness in the winds. +FIX_USTAR_GUSTLESS_BUG = False ! [Boolean] default = True + ! If true correct a bug in the time-averaging of the gustless wind friction + ! velocity +! === module ocean_stochastics === +DO_SPPT = @[DO_OCN_SPPT] ! [Boolean] default = False + ! If true perturb the diabatic tendencies in MOM_diabatic_driver +PERT_EPBL = @[PERT_EPBL] ! [Boolean] default = False + ! If true perturb the KE dissipation and destruction in MOM_energetic_PBL + +! === module MOM_restart === + +! === module MOM_file_parser === diff --git a/parm/ufs/mom6/MOM_input_template_500 b/parm/ufs/mom6/MOM_input_template_500 new file mode 100644 index 0000000000..dde805d247 --- /dev/null +++ b/parm/ufs/mom6/MOM_input_template_500 @@ -0,0 +1,592 @@ +! This file was written by the model and records the non-default parameters used at run-time. +! === module MOM === + +! === module MOM_unit_scaling === +! Parameters for doing unit scaling of variables. +USE_REGRIDDING = True ! [Boolean] default = False + ! If True, use the ALE algorithm (regridding/remapping). If False, use the + ! layered isopycnal algorithm. +THICKNESSDIFFUSE = True ! [Boolean] default = False + ! If true, interface heights are diffused with a coefficient of KHTH. +THICKNESSDIFFUSE_FIRST = True ! [Boolean] default = False + ! If true, do thickness diffusion before dynamics. This is only used if + ! THICKNESSDIFFUSE is true. +DT = @[DT_DYNAM_MOM6] ! [s] + ! The (baroclinic) dynamics time step. The time-step that is actually used will + ! be an integer fraction of the forcing time-step (DT_FORCING in ocean-only mode + ! or the coupling timestep in coupled mode.) +DT_THERM = @[DT_THERM_MOM6] ! [s] default = 1800.0 + ! The thermodynamic and tracer advection time step. Ideally DT_THERM should be + ! an integer multiple of DT and less than the forcing or coupling time-step, + ! unless THERMO_SPANS_COUPLING is true, in which case DT_THERM can be an integer + ! multiple of the coupling timestep. By default DT_THERM is set to DT. +THERMO_SPANS_COUPLING = @[MOM6_THERMO_SPAN] ! [Boolean] default = False + ! If true, the MOM will take thermodynamic and tracer timesteps that can be + ! longer than the coupling timestep. The actual thermodynamic timestep that is + ! used in this case is the largest integer multiple of the coupling timestep + ! that is less than or equal to DT_THERM. +HFREEZE = 20.0 ! [m] default = -1.0 + ! If HFREEZE > 0, melt potential will be computed. The actual depth + ! over which melt potential is computed will be min(HFREEZE, OBLD) + ! where OBLD is the boundary layer depth. If HFREEZE <= 0 (default) + ! melt potential will not be computed. +FRAZIL = True ! [Boolean] default = False + ! If true, water freezes if it gets too cold, and the accumulated heat deficit + ! is returned in the surface state. FRAZIL is only used if + ! ENABLE_THERMODYNAMICS is true. +BOUND_SALINITY = True ! [Boolean] default = False + ! If true, limit salinity to being positive. (The sea-ice model may ask for more + ! salt than is available and drive the salinity negative otherwise.) + +! === module MOM_domains === +TRIPOLAR_N = True ! [Boolean] default = False + ! Use tripolar connectivity at the northern edge of the domain. With + ! TRIPOLAR_N, NIGLOBAL must be even. +NIGLOBAL = @[NX_GLB] ! + ! The total number of thickness grid points in the x-direction in the physical + ! domain. With STATIC_MEMORY_ this is set in MOM_memory.h at compile time. +NJGLOBAL = @[NY_GLB] ! + ! The total number of thickness grid points in the y-direction in the physical + ! domain. With STATIC_MEMORY_ this is set in MOM_memory.h at compile time. + +! === module MOM_hor_index === +! Sets the horizontal array index types. + +! === module MOM_fixed_initialization === +INPUTDIR = "INPUT" ! default = "." + ! The directory in which input files are found. + +! === module MOM_grid_init === +GRID_CONFIG = "mosaic" ! + ! A character string that determines the method for defining the horizontal + ! grid. Current options are: + ! mosaic - read the grid from a mosaic (supergrid) + ! file set by GRID_FILE. + ! cartesian - use a (flat) Cartesian grid. + ! spherical - use a simple spherical grid. + ! mercator - use a Mercator spherical grid. +GRID_FILE = "ocean_hgrid.nc" ! + ! Name of the file from which to read horizontal grid data. +GRID_ROTATION_ANGLE_BUGS = False ! [Boolean] default = True + ! If true, use an older algorithm to calculate the sine and + ! cosines needed rotate between grid-oriented directions and + ! true north and east. Differences arise at the tripolar fold +USE_TRIPOLAR_GEOLONB_BUG = False ! [Boolean] default = True + ! If true, use older code that incorrectly sets the longitude in some points + ! along the tripolar fold to be off by 360 degrees. +TOPO_CONFIG = "file" ! + ! This specifies how bathymetry is specified: + ! file - read bathymetric information from the file + ! specified by (TOPO_FILE). + ! flat - flat bottom set to MAXIMUM_DEPTH. + ! bowl - an analytically specified bowl-shaped basin + ! ranging between MAXIMUM_DEPTH and MINIMUM_DEPTH. + ! spoon - a similar shape to 'bowl', but with an vertical + ! wall at the southern face. + ! halfpipe - a zonally uniform channel with a half-sine + ! profile in the meridional direction. + ! bbuilder - build topography from list of functions. + ! benchmark - use the benchmark test case topography. + ! Neverworld - use the Neverworld test case topography. + ! DOME - use a slope and channel configuration for the + ! DOME sill-overflow test case. + ! ISOMIP - use a slope and channel configuration for the + ! ISOMIP test case. + ! DOME2D - use a shelf and slope configuration for the + ! DOME2D gravity current/overflow test case. + ! Kelvin - flat but with rotated land mask. + ! seamount - Gaussian bump for spontaneous motion test case. + ! dumbbell - Sloshing channel with reservoirs on both ends. + ! shelfwave - exponential slope for shelfwave test case. + ! Phillips - ACC-like idealized topography used in the Phillips config. + ! dense - Denmark Strait-like dense water formation and overflow. + ! USER - call a user modified routine. +TOPO_FILE = "ocean_topog.nc" ! default = "topog.nc" + ! The file from which the bathymetry is read. +!MAXIMUM_DEPTH = 5801.341919389728 ! [m] + ! The (diagnosed) maximum depth of the ocean. +MINIMUM_DEPTH = 10.0 ! [m] default = 0.0 + ! If MASKING_DEPTH is unspecified, then anything shallower than MINIMUM_DEPTH is + ! assumed to be land and all fluxes are masked out. If MASKING_DEPTH is + ! specified, then all depths shallower than MINIMUM_DEPTH but deeper than + ! MASKING_DEPTH are rounded to MINIMUM_DEPTH. + +! === module MOM_open_boundary === +! Controls where open boundaries are located, what kind of boundary condition to impose, and what data to apply, +! if any. +MASKING_DEPTH = 0.0 ! [m] default = -9999.0 + ! The depth below which to mask points as land points, for which all fluxes are + ! zeroed out. MASKING_DEPTH is ignored if negative. + +! === module MOM_verticalGrid === +! Parameters providing information about the vertical grid. +NK = 25 ! [nondim] + ! The number of model layers. + +! === module MOM_tracer_registry === + +! === module MOM_EOS === +TFREEZE_FORM = "MILLERO_78" ! default = "LINEAR" + ! TFREEZE_FORM determines which expression should be used for the freezing + ! point. Currently, the valid choices are "LINEAR", "MILLERO_78", "TEOS10" + +! === module MOM_restart === +RESTART_CHECKSUMS_REQUIRED = False +! === module MOM_tracer_flow_control === + +! === module MOM_coord_initialization === +COORD_CONFIG = "file" ! default = "none" + ! This specifies how layers are to be defined: + ! ALE or none - used to avoid defining layers in ALE mode + ! file - read coordinate information from the file + ! specified by (COORD_FILE). + ! BFB - Custom coords for buoyancy-forced basin case + ! based on SST_S, T_BOT and DRHO_DT. + ! linear - linear based on interfaces not layers + ! layer_ref - linear based on layer densities + ! ts_ref - use reference temperature and salinity + ! ts_range - use range of temperature and salinity + ! (T_REF and S_REF) to determine surface density + ! and GINT calculate internal densities. + ! gprime - use reference density (RHO_0) for surface + ! density and GINT calculate internal densities. + ! ts_profile - use temperature and salinity profiles + ! (read from COORD_FILE) to set layer densities. + ! USER - call a user modified routine. +COORD_FILE = "layer_coord25.nc" ! + ! The file from which the coordinate densities are read. +REGRIDDING_COORDINATE_MODE = "HYCOM1" ! default = "LAYER" + ! Coordinate mode for vertical regridding. Choose among the following + ! possibilities: LAYER - Isopycnal or stacked shallow water layers + ! ZSTAR, Z* - stretched geopotential z* + ! SIGMA_SHELF_ZSTAR - stretched geopotential z* ignoring shelf + ! SIGMA - terrain following coordinates + ! RHO - continuous isopycnal + ! HYCOM1 - HyCOM-like hybrid coordinate + ! SLIGHT - stretched coordinates above continuous isopycnal + ! ADAPTIVE - optimize for smooth neutral density surfaces +BOUNDARY_EXTRAPOLATION = True ! [Boolean] default = False + ! When defined, a proper high-order reconstruction scheme is used within + ! boundary cells rather than PCM. E.g., if PPM is used for remapping, a PPM + ! reconstruction will also be used within boundary cells. +ALE_COORDINATE_CONFIG = "HYBRID:hycom1_25.nc,sigma2,FNC1:5,4000,4.5,.01" ! default = "UNIFORM" + ! Determines how to specify the coordinate + ! resolution. Valid options are: + ! PARAM - use the vector-parameter ALE_RESOLUTION + ! UNIFORM[:N] - uniformly distributed + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,dz + ! or FILE:lev.nc,interfaces=zw + ! WOA09[:N] - the WOA09 vertical grid (approximately) + ! FNC1:string - FNC1:dz_min,H_total,power,precision + ! HYBRID:string - read from a file. The string specifies + ! the filename and two variable names, separated + ! by a comma or space, for sigma-2 and dz. e.g. + ! HYBRID:vgrid.nc,sigma2,dz +!ALE_RESOLUTION = 2*5.0, 5.01, 5.07, 5.25, 5.68, 6.55, 8.1, 10.66, 14.620000000000001, 20.450000000000003, 28.73, 40.1, 55.32, 75.23, 100.8, 133.09, 173.26, 222.62, 282.56, 354.62, 440.47, 541.87, 660.76, 799.1800000000001 ! [m] + ! The distribution of vertical resolution for the target + ! grid used for Eulerian-like coordinates. For example, + ! in z-coordinate mode, the parameter is a list of level + ! thicknesses (in m). In sigma-coordinate mode, the list + ! is of non-dimensional fractions of the water column. +!TARGET_DENSITIES = 1010.0, 1020.843017578125, 1027.0274658203125, 1029.279541015625, 1030.862548828125, 1032.1572265625, 1033.27978515625, 1034.251953125, 1034.850830078125, 1035.28857421875, 1035.651123046875, 1035.967529296875, 1036.2410888671875, 1036.473876953125, 1036.6800537109375, 1036.8525390625, 1036.9417724609375, 1037.0052490234375, 1037.057373046875, 1037.1065673828125, 1037.15576171875, 1037.2060546875, 1037.26416015625, 1037.3388671875, 1037.4749755859375, 1038.0 ! [m] + ! HYBRID target densities for itnerfaces +REGRID_COMPRESSIBILITY_FRACTION = 0.01 ! [not defined] default = 0.0 + ! When interpolating potential density profiles we can add + ! some artificial compressibility solely to make homogenous + ! regions appear stratified. +MAXIMUM_INT_DEPTH_CONFIG = "FNC1:5,8000.0,1.0,.125" ! default = "NONE" + ! Determines how to specify the maximum interface depths. + ! Valid options are: + ! NONE - there are no maximum interface depths + ! PARAM - use the vector-parameter MAXIMUM_INTERFACE_DEPTHS + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,Z + ! FNC1:string - FNC1:dz_min,H_total,power,precision +!MAXIMUM_INT_DEPTHS = 0.0, 5.0, 36.25, 93.75, 177.5, 287.5, 423.75, 586.25, 775.0, 990.0, 1231.25, 1498.75, 1792.5, 2112.5, 2458.75, 2831.25, 3230.0, 3655.0, 4106.25, 4583.75, 5087.5, 5617.5, 6173.75, 6756.25, 7365.0, 8000.0 ! [m] + ! The list of maximum depths for each interface. +MAX_LAYER_THICKNESS_CONFIG = "FNC1:400,31000.0,0.1,.01" ! default = "NONE" + ! Determines how to specify the maximum layer thicknesses. + ! Valid options are: + ! NONE - there are no maximum layer thicknesses + ! PARAM - use the vector-parameter MAX_LAYER_THICKNESS + ! FILE:string - read from a file. The string specifies + ! the filename and variable name, separated + ! by a comma or space, e.g. FILE:lev.nc,Z + ! FNC1:string - FNC1:dz_min,H_total,power,precision +!MAX_LAYER_THICKNESS = 400.0, 1094.2, 1144.02, 1174.81, 1197.42, 1215.4099999999999, 1230.42, 1243.3200000000002, 1254.65, 1264.78, 1273.94, 1282.31, 1290.02, 1297.17, 1303.85, 1310.1, 1316.0, 1321.5700000000002, 1326.85, 1331.87, 1336.67, 1341.25, 1345.6399999999999, 1349.85, 1353.88 ! [m] + ! The list of maximum thickness for each layer. +REMAPPING_SCHEME = "PPM_H4" ! default = "PLM" + ! This sets the reconstruction scheme used for vertical remapping for all + ! variables. It can be one of the following schemes: PCM (1st-order + ! accurate) + ! PLM (2nd-order accurate) + ! PPM_H4 (3rd-order accurate) + ! PPM_IH4 (3rd-order accurate) + ! PQM_IH4IH3 (4th-order accurate) + ! PQM_IH6IH5 (5th-order accurate) + +! === module MOM_grid === +! Parameters providing information about the lateral grid. + +! === module MOM_state_initialization === +INIT_LAYERS_FROM_Z_FILE = True ! [Boolean] default = False + ! If true, initialize the layer thicknesses, temperatures, and salinities from a + ! Z-space file on a latitude-longitude grid. + +! === module MOM_initialize_layers_from_Z === +TEMP_SALT_Z_INIT_FILE = "" ! default = "temp_salt_z.nc" + ! The name of the z-space input file used to initialize + ! temperatures (T) and salinities (S). If T and S are not + ! in the same file, TEMP_Z_INIT_FILE and SALT_Z_INIT_FILE + ! must be set. +TEMP_Z_INIT_FILE = "woa18_decav_t00_01.nc" ! default = "" + ! The name of the z-space input file used to initialize + ! temperatures, only. +SALT_Z_INIT_FILE = "woa18_decav_s00_01.nc" ! default = "" + ! The name of the z-space input file used to initialize + ! temperatures, only. +Z_INIT_FILE_PTEMP_VAR = "t_an" ! default = "ptemp" + ! The name of the potential temperature variable in + ! TEMP_Z_INIT_FILE. +Z_INIT_FILE_SALT_VAR = "s_an" ! default = "salt" + ! The name of the salinity variable in + ! SALT_Z_INIT_FILE. +Z_INIT_ALE_REMAPPING = True ! [Boolean] default = False + ! If True, then remap straight to model coordinate from file. + +! === module MOM_diag_mediator === +NUM_DIAG_COORDS = 1 + ! The number of diagnostic vertical coordinates to use. + ! For each coordinate, an entry in DIAG_COORDS must be provided. +DIAG_COORDS = "z Z ZSTAR" + ! A list of string tuples associating diag_table modules to + ! a coordinate definition used for diagnostics. Each string + ! is of the form "MODULE_SUFFIX,PARAMETER_SUFFIX,COORDINATE_NAME". +DIAG_COORD_DEF_Z="FILE:@[MOM6_DIAG_COORD_DEF_Z_FILE],interfaces=zw" +DIAG_MISVAL = @[MOM6_DIAG_MISVAL] + +! === module MOM_MEKE === +USE_MEKE = True ! [Boolean] default = False + ! If true, turns on the MEKE scheme which calculates a sub-grid mesoscale eddy + ! kinetic energy budget. + +! === module MOM_lateral_mixing_coeffs === +USE_VARIABLE_MIXING = True ! [Boolean] default = False + ! If true, the variable mixing code will be called. This allows diagnostics to + ! be created even if the scheme is not used. If KHTR_SLOPE_CFF>0 or + ! KhTh_Slope_Cff>0, this is set to true regardless of what is in the parameter + ! file. +! === module MOM_set_visc === +CHANNEL_DRAG = True ! [Boolean] default = False + ! If true, the bottom drag is exerted directly on each layer proportional to the + ! fraction of the bottom it overlies. +HBBL = 10.0 ! [m] + ! The thickness of a bottom boundary layer with a viscosity of KVBBL if + ! BOTTOMDRAGLAW is not defined, or the thickness over which near-bottom + ! velocities are averaged for the drag law if BOTTOMDRAGLAW is defined but + ! LINEAR_DRAG is not. +KV = 1.0E-04 ! [m2 s-1] + ! The background kinematic viscosity in the interior. The molecular value, ~1e-6 + ! m2 s-1, may be used. + +! === module MOM_continuity === + +! === module MOM_continuity_PPM === + +! === module MOM_CoriolisAdv === +CORIOLIS_SCHEME = "SADOURNY75_ENSTRO" ! default = "SADOURNY75_ENERGY" + ! CORIOLIS_SCHEME selects the discretization for the Coriolis terms. Valid + ! values are: + ! SADOURNY75_ENERGY - Sadourny, 1975; energy cons. + ! ARAKAWA_HSU90 - Arakawa & Hsu, 1990 + ! SADOURNY75_ENSTRO - Sadourny, 1975; enstrophy cons. + ! ARAKAWA_LAMB81 - Arakawa & Lamb, 1981; En. + Enst. + ! ARAKAWA_LAMB_BLEND - A blend of Arakawa & Lamb with + ! Arakawa & Hsu and Sadourny energy +BOUND_CORIOLIS = True ! [Boolean] default = False + ! If true, the Coriolis terms at u-points are bounded by the four estimates of + ! (f+rv)v from the four neighboring v-points, and similarly at v-points. This + ! option would have no effect on the SADOURNY Coriolis scheme if it were + ! possible to use centered difference thickness fluxes. + +! === module MOM_PressureForce === + +! === module MOM_PressureForce_AFV === +MASS_WEIGHT_IN_PRESSURE_GRADIENT = True ! [Boolean] default = False + ! If true, use mass weighting when interpolating T/S for integrals near the + ! bathymetry in AFV pressure gradient calculations. + +! === module MOM_hor_visc === +LAPLACIAN = True ! [Boolean] default = False + ! If true, use a Laplacian horizontal viscosity. +KH_VEL_SCALE = 0.01 ! [m s-1] default = 0.0 + ! The velocity scale which is multiplied by the grid spacing to calculate the + ! Laplacian viscosity. The final viscosity is the largest of this scaled + ! viscosity, the Smagorinsky and Leith viscosities, and KH. +KH_SIN_LAT = 2000.0 ! [m2 s-1] default = 0.0 + ! The amplitude of a latitudinally-dependent background viscosity of the form + ! KH_SIN_LAT*(SIN(LAT)**KH_PWR_OF_SINE). +SMAGORINSKY_KH = True ! [Boolean] default = False + ! If true, use a Smagorinsky nonlinear eddy viscosity. +SMAG_LAP_CONST = 0.15 ! [nondim] default = 0.0 + ! The nondimensional Laplacian Smagorinsky constant, often 0.15. +AH_VEL_SCALE = 0.01 ! [m s-1] default = 0.0 + ! The velocity scale which is multiplied by the cube of the grid spacing to + ! calculate the biharmonic viscosity. The final viscosity is the largest of this + ! scaled viscosity, the Smagorinsky and Leith viscosities, and AH. +SMAGORINSKY_AH = True ! [Boolean] default = False + ! If true, use a biharmonic Smagorinsky nonlinear eddy viscosity. +SMAG_BI_CONST = 0.06 ! [nondim] default = 0.0 + ! The nondimensional biharmonic Smagorinsky constant, typically 0.015 - 0.06. +USE_LAND_MASK_FOR_HVISC = True ! [Boolean] default = False + ! If true, use Use the land mask for the computation of thicknesses at velocity + ! locations. This eliminates the dependence on arbitrary values over land or + ! outside of the domain. + +! === module MOM_vert_friction === +HMIX_FIXED = 0.5 ! [m] + ! The prescribed depth over which the near-surface viscosity and diffusivity are + ! elevated when the bulk mixed layer is not used. +KVML = 1.0E-04 ! [m2 s-1] default = 1.0E-04 + ! The kinematic viscosity in the mixed layer. A typical value is ~1e-2 m2 s-1. + ! KVML is not used if BULKMIXEDLAYER is true. The default is set by KV. +MAXVEL = 6.0 ! [m s-1] default = 3.0E+08 + ! The maximum velocity allowed before the velocity components are truncated. + +! === module MOM_barotropic === +BOUND_BT_CORRECTION = True ! [Boolean] default = False + ! If true, the corrective pseudo mass-fluxes into the barotropic solver are + ! limited to values that require less than maxCFL_BT_cont to be accommodated. +BT_PROJECT_VELOCITY = True ! [Boolean] default = False + ! If true, step the barotropic velocity first and project out the velocity + ! tendency by 1+BEBT when calculating the transport. The default (false) is to + ! use a predictor continuity step to find the pressure field, and then to do a + ! corrector continuity step using a weighted average of the old and new + ! velocities, with weights of (1-BEBT) and BEBT. +DYNAMIC_SURFACE_PRESSURE = False ! [Boolean] default = False + ! If true, add a dynamic pressure due to a viscous ice shelf, for instance. +BEBT = 0.2 ! [nondim] default = 0.1 + ! BEBT determines whether the barotropic time stepping uses the forward-backward + ! time-stepping scheme or a backward Euler scheme. BEBT is valid in the range + ! from 0 (for a forward-backward treatment of nonrotating gravity waves) to 1 + ! (for a backward Euler treatment). In practice, BEBT must be greater than about + ! 0.05. +DTBT = -0.9 ! [s or nondim] default = -0.98 + ! The barotropic time step, in s. DTBT is only used with the split explicit time + ! stepping. To set the time step automatically based the maximum stable value + ! use 0, or a negative value gives the fraction of the stable value. Setting + ! DTBT to 0 is the same as setting it to -0.98. The value of DTBT that will + ! actually be used is an integer fraction of DT, rounding down. + +! === module MOM_mixed_layer_restrat === +MIXEDLAYER_RESTRAT = False ! [Boolean] default = False + ! If true, a density-gradient dependent re-stratifying flow is imposed in the + ! mixed layer. Can be used in ALE mode without restriction but in layer mode can + ! only be used if BULKMIXEDLAYER is true. +FOX_KEMPER_ML_RESTRAT_COEF = 60.0 ! [nondim] default = 0.0 + ! A nondimensional coefficient that is proportional to the ratio of the + ! deformation radius to the dominant lengthscale of the submesoscale mixed layer + ! instabilities, times the minimum of the ratio of the mesoscale eddy kinetic + ! energy to the large-scale geostrophic kinetic energy or 1 plus the square of + ! the grid spacing over the deformation radius, as detailed by Fox-Kemper et al. + ! (2010) +MLE_FRONT_LENGTH = 200.0 ! [m] default = 0.0 + ! If non-zero, is the frontal-length scale used to calculate the upscaling of + ! buoyancy gradients that is otherwise represented by the parameter + ! FOX_KEMPER_ML_RESTRAT_COEF. If MLE_FRONT_LENGTH is non-zero, it is recommended + ! to set FOX_KEMPER_ML_RESTRAT_COEF=1.0. +MLE_USE_PBL_MLD = True ! [Boolean] default = False + ! If true, the MLE parameterization will use the mixed-layer depth provided by + ! the active PBL parameterization. If false, MLE will estimate a MLD based on a + ! density difference with the surface using the parameter MLE_DENSITY_DIFF. +MLE_MLD_DECAY_TIME = 2.592E+06 ! [s] default = 0.0 + ! The time-scale for a running-mean filter applied to the mixed-layer depth used + ! in the MLE restratification parameterization. When the MLD deepens below the + ! current running-mean the running-mean is instantaneously set to the current + ! MLD. + +! === module MOM_diabatic_driver === +! The following parameters are used for diabatic processes. +ENERGETICS_SFC_PBL = True ! [Boolean] default = False + ! If true, use an implied energetics planetary boundary layer scheme to + ! determine the diffusivity and viscosity in the surface boundary layer. +EPBL_IS_ADDITIVE = False ! [Boolean] default = True + ! If true, the diffusivity from ePBL is added to all other diffusivities. + ! Otherwise, the larger of kappa-shear and ePBL diffusivities are used. + +! === module MOM_CVMix_KPP === +! This is the MOM wrapper to CVMix:KPP +! See http://cvmix.github.io/ + +! === module MOM_tidal_mixing === +! Vertical Tidal Mixing Parameterization + +! === module MOM_CVMix_conv === +! Parameterization of enhanced mixing due to convection via CVMix + +! === module MOM_set_diffusivity === + +! === module MOM_bkgnd_mixing === +! Adding static vertical background mixing coefficients +KD = 1.5E-05 ! [m2 s-1] default = 0.0 + ! The background diapycnal diffusivity of density in the interior. Zero or the + ! molecular value, ~1e-7 m2 s-1, may be used. +KD_MIN = 2.0E-06 ! [m2 s-1] default = 2.0E-07 + ! The minimum diapycnal diffusivity. +HENYEY_IGW_BACKGROUND = True ! [Boolean] default = False + ! If true, use a latitude-dependent scaling for the near surface background + ! diffusivity, as described in Harrison & Hallberg, JPO 2008. + +! === module MOM_kappa_shear === +! Parameterization of shear-driven turbulence following Jackson, Hallberg and Legg, JPO 2008 +USE_JACKSON_PARAM = True ! [Boolean] default = False + ! If true, use the Jackson-Hallberg-Legg (JPO 2008) shear mixing + ! parameterization. +MAX_RINO_IT = 25 ! [nondim] default = 50 + ! The maximum number of iterations that may be used to estimate the Richardson + ! number driven mixing. + +! === module MOM_CVMix_shear === +! Parameterization of shear-driven turbulence via CVMix (various options) + +! === module MOM_CVMix_ddiff === +! Parameterization of mixing due to double diffusion processes via CVMix + +! === module MOM_diabatic_aux === +! The following parameters are used for auxiliary diabatic processes. + +! === module MOM_energetic_PBL === +EPBL_USTAR_MIN = 1.45842E-18 ! [m s-1] + ! The (tiny) minimum friction velocity used within the ePBL code, derived from + ! OMEGA and ANGSTROM.. +USE_LA_LI2016 = @[MOM6_USE_LI2016] ! [nondim] default = False + ! A logical to use the Li et al. 2016 (submitted) formula to determine the + ! Langmuir number. +USE_WAVES = @[MOM6_USE_WAVES] ! [Boolean] default = False + ! If true, enables surface wave modules. +WAVE_METHOD = "SURFACE_BANDS" ! default = "EMPTY" + ! Choice of wave method, valid options include: + ! TEST_PROFILE - Prescribed from surface Stokes drift + ! and a decay wavelength. + ! SURFACE_BANDS - Computed from multiple surface values + ! and decay wavelengths. + ! DHH85 - Uses Donelan et al. 1985 empirical + ! wave spectrum with prescribed values. + ! LF17 - Infers Stokes drift profile from wind + ! speed following Li and Fox-Kemper 2017. +SURFBAND_SOURCE = "COUPLER" ! default = "EMPTY" + ! Choice of SURFACE_BANDS data mode, valid options include: + ! DATAOVERRIDE - Read from NetCDF using FMS DataOverride. + ! COUPLER - Look for variables from coupler pass + ! INPUT - Testing with fixed values. +STK_BAND_COUPLER = 3 ! default = 1 + ! STK_BAND_COUPLER is the number of Stokes drift bands in the coupler. This has + ! to be consistent with the number of Stokes drift bands in WW3, or the model + ! will fail. +SURFBAND_WAVENUMBERS = 0.04, 0.11, 0.3305 ! [rad/m] default = 0.12566 + ! Central wavenumbers for surface Stokes drift bands. +EPBL_LANGMUIR_SCHEME = "ADDITIVE" ! default = "NONE" + ! EPBL_LANGMUIR_SCHEME selects the method for including Langmuir turbulence. + ! Valid values are: + ! NONE - Do not do any extra mixing due to Langmuir turbulence + ! RESCALE - Use a multiplicative rescaling of mstar to account for Langmuir + ! turbulence + ! ADDITIVE - Add a Langmuir turblence contribution to mstar to other + ! contributions +LT_ENHANCE_COEF = 0.044 ! [nondim] default = 0.447 + ! Coefficient for Langmuir enhancement of mstar +LT_ENHANCE_EXP = -1.5 ! [nondim] default = -1.33 + ! Exponent for Langmuir enhancementt of mstar +LT_MOD_LAC1 = 0.0 ! [nondim] default = -0.87 + ! Coefficient for modification of Langmuir number due to MLD approaching Ekman + ! depth. +LT_MOD_LAC4 = 0.0 ! [nondim] default = 0.95 + ! Coefficient for modification of Langmuir number due to ratio of Ekman to + ! stable Obukhov depth. +LT_MOD_LAC5 = 0.22 ! [nondim] default = 0.95 + ! Coefficient for modification of Langmuir number due to ratio of Ekman to + ! unstable Obukhov depth. + +! === module MOM_regularize_layers === + +! === module MOM_opacity === + +! === module MOM_tracer_advect === +TRACER_ADVECTION_SCHEME = "PPM:H3" ! default = "PLM" + ! The horizontal transport scheme for tracers: + ! PLM - Piecewise Linear Method + ! PPM:H3 - Piecewise Parabolic Method (Huyhn 3rd order) + ! PPM - Piecewise Parabolic Method (Colella-Woodward) + +! === module MOM_tracer_hor_diff === +KHTR = 50.0 ! [m2 s-1] default = 0.0 + ! The background along-isopycnal tracer diffusivity. +CHECK_DIFFUSIVE_CFL = True ! [Boolean] default = False + ! If true, use enough iterations the diffusion to ensure that the diffusive + ! equivalent of the CFL limit is not violated. If false, always use the greater + ! of 1 or MAX_TR_DIFFUSION_CFL iteration. +MAX_TR_DIFFUSION_CFL = 2.0 ! [nondim] default = -1.0 + ! If positive, locally limit the along-isopycnal tracer diffusivity to keep the + ! diffusive CFL locally at or below this value. The number of diffusive + ! iterations is often this value or the next greater integer. + +! === module MOM_neutral_diffusion === +! This module implements neutral diffusion of tracers +USE_NEUTRAL_DIFFUSION = True ! [Boolean] default = False + ! If true, enables the neutral diffusion module. + +! === module MOM_sum_output === +MAXTRUNC = 1000 ! [truncations save_interval-1] default = 0 + ! The run will be stopped, and the day set to a very large value if the velocity + ! is truncated more than MAXTRUNC times between energy saves. Set MAXTRUNC to 0 + ! to stop if there is any truncation of velocities. + +! === module ocean_model_init === + +! === module MOM_oda_incupd === +ODA_INCUPD = @[ODA_INCUPD] ! [Boolean] default = False + ! If true, oda incremental updates will be applied + ! everywhere in the domain. +ODA_INCUPD_FILE = "mom6_increment.nc" ! The name of the file with the T,S,h increments. + +ODA_TEMPINC_VAR = "Temp" ! default = "ptemp_inc" + ! The name of the potential temperature inc. variable in + ! ODA_INCUPD_FILE. +ODA_SALTINC_VAR = "Salt" ! default = "sal_inc" + ! The name of the salinity inc. variable in + ! ODA_INCUPD_FILE. +ODA_THK_VAR = "h" ! default = "h" + ! The name of the int. depth inc. variable in + ! ODA_INCUPD_FILE. +ODA_INCUPD_UV = true ! +ODA_UINC_VAR = "u" ! default = "u_inc" + ! The name of the zonal vel. inc. variable in + ! ODA_INCUPD_UV_FILE. +ODA_VINC_VAR = "v" ! default = "v_inc" + ! The name of the meridional vel. inc. variable in + ! ODA_INCUPD_UV_FILE. +ODA_INCUPD_NHOURS = @[ODA_INCUPD_NHOURS] ! default=3.0 + +! === module MOM_surface_forcing === +OCEAN_SURFACE_STAGGER = "A" ! default = "C" + ! A case-insensitive character string to indicate the + ! staggering of the surface velocity field that is + ! returned to the coupler. Valid values include + ! 'A', 'B', or 'C'. + +MAX_P_SURF = 0.0 ! [Pa] default = -1.0 + ! The maximum surface pressure that can be exerted by the atmosphere and + ! floating sea-ice or ice shelves. This is needed because the FMS coupling + ! structure does not limit the water that can be frozen out of the ocean and the + ! ice-ocean heat fluxes are treated explicitly. No limit is applied if a + ! negative value is used. +WIND_STAGGER = "A" ! default = "C" + ! A case-insensitive character string to indicate the + ! staggering of the input wind stress field. Valid + ! values are 'A', 'B', or 'C'. +! === module MOM_restart === + +! === module MOM_file_parser === diff --git a/parm/ufs/ufs.configure.atm.IN b/parm/ufs/ufs.configure.atm.IN new file mode 100644 index 0000000000..c74fe38128 --- /dev/null +++ b/parm/ufs/ufs.configure.atm.IN @@ -0,0 +1,12 @@ +# ESMF # +logKindFlag: @[esmf_logkind] +globalResourceControl: true + +EARTH_component_list: ATM +ATM_model: @[atm_model] +ATM_petlist_bounds: @[atm_petlist_bounds] +ATM_omp_num_threads: @[atm_omp_num_threads] + +runSeq:: + ATM +:: diff --git a/parm/ufs/ufs.configure.atm_aero.IN b/parm/ufs/ufs.configure.atm_aero.IN new file mode 100644 index 0000000000..a83a4f9cad --- /dev/null +++ b/parm/ufs/ufs.configure.atm_aero.IN @@ -0,0 +1,50 @@ +############################################# +#### UFS Run-Time Configuration File ##### +############################################# + +# ESMF # +logKindFlag: @[esmf_logkind] +globalResourceControl: true + +# EARTH # +EARTH_component_list: ATM CHM +EARTH_attributes:: + Verbosity = max +:: + +# ATM # +ATM_model: @[atm_model] +ATM_petlist_bounds: @[atm_petlist_bounds] +ATM_omp_num_threads: @[atm_omp_num_threads] +ATM_attributes:: + Verbosity = max +:: + +# CHM # +CHM_model: @[chm_model] +CHM_petlist_bounds: @[chm_petlist_bounds] +CHM_omp_num_threads: @[chm_omp_num_threads] +CHM_attributes:: + Verbosity = max +:: + +# Run Sequence # +runSeq:: + @@[coupling_interval_fast_sec] + ATM phase1 + ATM -> CHM + CHM + CHM -> ATM + ATM phase2 + @ +:: + +# CMEPS variables + +DRIVER_attributes:: + mediator_read_restart = .false. +:: + +ALLCOMP_attributes:: + start_type = startup +:: diff --git a/parm/ufs/ufs.configure.blocked_atm_wav.IN b/parm/ufs/ufs.configure.blocked_atm_wav.IN new file mode 100644 index 0000000000..b68aa2e735 --- /dev/null +++ b/parm/ufs/ufs.configure.blocked_atm_wav.IN @@ -0,0 +1,41 @@ +############################################# +#### UFS Run-Time Configuration File ##### +############################################# + +# ESMF # +logKindFlag: @[esmf_logkind] +globalResourceControl: true + +# EARTH # +EARTH_component_list: ATM WAV +EARTH_attributes:: + Verbosity = max +:: + +# ATM # +ATM_model: @[atm_model] +ATM_petlist_bounds: @[atm_petlist_bounds] +ATM_omp_num_threads: @[atm_omp_num_threads] +ATM_attributes:: + Verbosity = max + DumpFields = true +:: + +# WAV # +WAV_model: @[wav_model] +WAV_petlist_bounds: @[wav_petlist_bounds] +WAV_omp_num_threads: @[wav_omp_num_threads] +WAV_attributes:: + Verbosity = max +:: + + + +# Run Sequence # +runSeq:: + @@[coupling_interval_sec] + ATM -> WAV + ATM + WAV + @ +:: diff --git a/parm/ufs/ufs.configure.cpld.IN b/parm/ufs/ufs.configure.cpld.IN new file mode 100644 index 0000000000..5265e7f13b --- /dev/null +++ b/parm/ufs/ufs.configure.cpld.IN @@ -0,0 +1,122 @@ +############################################# +#### UFS Run-Time Configuration File ##### +############################################# + +# ESMF # +logKindFlag: @[esmf_logkind] +globalResourceControl: true + +# EARTH # +EARTH_component_list: MED ATM OCN ICE +EARTH_attributes:: + Verbosity = 0 +:: + +# MED # +MED_model: @[med_model] +MED_petlist_bounds: @[med_petlist_bounds] +MED_omp_num_threads: @[med_omp_num_threads] +:: + +# ATM # +ATM_model: @[atm_model] +ATM_petlist_bounds: @[atm_petlist_bounds] +ATM_omp_num_threads: @[atm_omp_num_threads] +ATM_attributes:: + Verbosity = 0 + DumpFields = @[DumpFields] + ProfileMemory = false + OverwriteSlice = true +:: + +# OCN # +OCN_model: @[ocn_model] +OCN_petlist_bounds: @[ocn_petlist_bounds] +OCN_omp_num_threads: @[ocn_omp_num_threads] +OCN_attributes:: + Verbosity = 0 + DumpFields = @[DumpFields] + ProfileMemory = false + OverwriteSlice = true + mesh_ocn = @[MESH_OCN_ICE] +:: + +# ICE # +ICE_model: @[ice_model] +ICE_petlist_bounds: @[ice_petlist_bounds] +ICE_omp_num_threads: @[ice_omp_num_threads] +ICE_attributes:: + Verbosity = 0 + DumpFields = @[DumpFields] + ProfileMemory = false + OverwriteSlice = true + mesh_ice = @[MESH_OCN_ICE] + stop_n = @[RESTART_N] + stop_option = nhours + stop_ymd = -999 +:: + +# CMEPS warm run sequence +runSeq:: +@@[coupling_interval_slow_sec] + MED med_phases_prep_ocn_avg + MED -> OCN :remapMethod=redist + OCN + @@[coupling_interval_fast_sec] + MED med_phases_prep_atm + MED med_phases_prep_ice + MED -> ATM :remapMethod=redist + MED -> ICE :remapMethod=redist + ATM + ICE + ATM -> MED :remapMethod=redist + MED med_phases_post_atm + ICE -> MED :remapMethod=redist + MED med_phases_post_ice + MED med_phases_ocnalb_run + MED med_phases_prep_ocn_accum + @ + OCN -> MED :remapMethod=redist + MED med_phases_post_ocn + MED med_phases_restart_write +@ +:: + +# CMEPS variables + +DRIVER_attributes:: +:: +MED_attributes:: + ATM_model = @[atm_model] + ICE_model = @[ice_model] + OCN_model = @[ocn_model] + coupling_mode = @[CPLMODE] + history_tile_atm = @[ATMTILESIZE] + pio_rearranger = box + ocean_albedo_limit = @[ocean_albedo_limit] +:: +ALLCOMP_attributes:: + ScalarFieldCount = 2 + ScalarFieldIdxGridNX = 1 + ScalarFieldIdxGridNY = 2 + ScalarFieldName = cpl_scalars + start_type = @[RUNTYPE] + restart_dir = RESTART/ + case_name = ufs.cpld + restart_n = @[RESTART_N] + restart_option = nhours + restart_ymd = -999 + dbug_flag = @[cap_dbug_flag] + use_coldstart = @[use_coldstart] + use_mommesh = @[use_mommesh] + eps_imesh = @[eps_imesh] + stop_n = @[FHMAX] + stop_option = nhours + stop_ymd = -999 + orb_eccen = 1.e36 + orb_iyear = 2000 + orb_iyear_align = 2000 + orb_mode = fixed_year + orb_mvelp = 1.e36 + orb_obliq = 1.e36 +:: diff --git a/parm/ufs/ufs.configure.cpld_aero.IN b/parm/ufs/ufs.configure.cpld_aero.IN new file mode 100644 index 0000000000..d998338583 --- /dev/null +++ b/parm/ufs/ufs.configure.cpld_aero.IN @@ -0,0 +1,134 @@ +############################################# +#### UFS Run-Time Configuration File ##### +############################################# + +# ESMF # +logKindFlag: @[esmf_logkind] +globalResourceControl: true + +# EARTH # +EARTH_component_list: MED ATM CHM OCN ICE +EARTH_attributes:: + Verbosity = 0 +:: + +# MED # +MED_model: @[med_model] +MED_petlist_bounds: @[med_petlist_bounds] +MED_omp_num_threads: @[med_omp_num_threads] +:: + +# ATM # +ATM_model: @[atm_model] +ATM_petlist_bounds: @[atm_petlist_bounds] +ATM_omp_num_threads: @[atm_omp_num_threads] +ATM_attributes:: + Verbosity = 0 + DumpFields = @[DumpFields] + ProfileMemory = false + OverwriteSlice = true +:: + +# CHM # +CHM_model: @[chm_model] +CHM_petlist_bounds: @[chm_petlist_bounds] +CHM_omp_num_threads: @[chm_omp_num_threads] +CHM_attributes:: + Verbosity = 0 +:: + +# OCN # +OCN_model: @[ocn_model] +OCN_petlist_bounds: @[ocn_petlist_bounds] +OCN_omp_num_threads: @[ocn_omp_num_threads] +OCN_attributes:: + Verbosity = 0 + DumpFields = @[DumpFields] + ProfileMemory = false + OverwriteSlice = true + mesh_ocn = @[MESH_OCN_ICE] +:: + +# ICE # +ICE_model: @[ice_model] +ICE_petlist_bounds: @[ice_petlist_bounds] +ICE_omp_num_threads: @[ice_omp_num_threads] +ICE_attributes:: + Verbosity = 0 + DumpFields = @[DumpFields] + ProfileMemory = false + OverwriteSlice = true + mesh_ice = @[MESH_OCN_ICE] + stop_n = @[RESTART_N] + stop_option = nhours + stop_ymd = -999 +:: + +# CMEPS warm run sequence +runSeq:: +@@[coupling_interval_slow_sec] + MED med_phases_prep_ocn_avg + MED -> OCN :remapMethod=redist + OCN + @@[coupling_interval_fast_sec] + MED med_phases_prep_atm + MED med_phases_prep_ice + MED -> ATM :remapMethod=redist + MED -> ICE :remapMethod=redist + ATM phase1 + ATM -> CHM + CHM + CHM -> ATM + ATM phase2 + ICE + ATM -> MED :remapMethod=redist + MED med_phases_post_atm + ICE -> MED :remapMethod=redist + MED med_phases_post_ice + MED med_phases_ocnalb_run + MED med_phases_prep_ocn_accum + @ + OCN -> MED :remapMethod=redist + MED med_phases_post_ocn + MED med_phases_restart_write +@ +:: + +# CMEPS variables + +DRIVER_attributes:: +:: +MED_attributes:: + ATM_model = @[atm_model] + ICE_model = @[ice_model] + OCN_model = @[ocn_model] + coupling_mode = @[CPLMODE] + history_tile_atm = @[ATMTILESIZE] + pio_rearranger = box + ocean_albedo_limit = @[ocean_albedo_limit] +:: +ALLCOMP_attributes:: + ScalarFieldCount = 2 + ScalarFieldIdxGridNX = 1 + ScalarFieldIdxGridNY = 2 + ScalarFieldName = cpl_scalars + start_type = @[RUNTYPE] + restart_dir = RESTART/ + case_name = ufs.cpld + restart_n = @[RESTART_N] + restart_option = nhours + restart_ymd = -999 + dbug_flag = @[cap_dbug_flag] + use_coldstart = @[use_coldstart] + use_mommesh = @[use_mommesh] + eps_imesh = @[eps_imesh] + stop_n = @[FHMAX] + stop_option = nhours + stop_ymd = -999 + orb_eccen = 1.e36 + orb_iyear = 2000 + orb_iyear_align = 2000 + orb_mode = fixed_year + orb_mvelp = 1.e36 + orb_obliq = 1.e36 +:: diff --git a/parm/ufs/ufs.configure.cpld_aero_outerwave.IN b/parm/ufs/ufs.configure.cpld_aero_outerwave.IN new file mode 100644 index 0000000000..f95f5d9b8e --- /dev/null +++ b/parm/ufs/ufs.configure.cpld_aero_outerwave.IN @@ -0,0 +1,154 @@ +############################################# +#### UFS Run-Time Configuration File ##### +############################################# + +# ESMF # +logKindFlag: @[esmf_logkind] +globalResourceControl: true + +# EARTH # +EARTH_component_list: MED ATM CHM OCN ICE WAV +EARTH_attributes:: + Verbosity = 0 +:: + +# MED # +MED_model: @[med_model] +MED_petlist_bounds: @[med_petlist_bounds] +MED_omp_num_threads: @[med_omp_num_threads] +:: + +# ATM # +ATM_model: @[atm_model] +ATM_petlist_bounds: @[atm_petlist_bounds] +ATM_omp_num_threads: @[atm_omp_num_threads] +ATM_attributes:: + Verbosity = 0 + DumpFields = @[DumpFields] + ProfileMemory = false + OverwriteSlice = true +:: + +# CHM # +CHM_model: @[chm_model] +CHM_petlist_bounds: @[chm_petlist_bounds] +CHM_omp_num_threads: @[chm_omp_num_threads] +CHM_attributes:: + Verbosity = 0 +:: + +# OCN # +OCN_model: @[ocn_model] +OCN_petlist_bounds: @[ocn_petlist_bounds] +OCN_omp_num_threads: @[ocn_omp_num_threads] +OCN_attributes:: + Verbosity = 0 + DumpFields = @[DumpFields] + ProfileMemory = false + OverwriteSlice = true + mesh_ocn = @[MESH_OCN_ICE] +:: + +# ICE # +ICE_model: @[ice_model] +ICE_petlist_bounds: @[ice_petlist_bounds] +ICE_omp_num_threads: @[ice_omp_num_threads] +ICE_attributes:: + Verbosity = 0 + DumpFields = @[DumpFields] + ProfileMemory = false + OverwriteSlice = true + mesh_ice = @[MESH_OCN_ICE] + stop_n = @[RESTART_N] + stop_option = nhours + stop_ymd = -999 +:: + +# WAV # +WAV_model: @[wav_model] +WAV_petlist_bounds: @[wav_petlist_bounds] +WAV_omp_num_threads: @[wav_omp_num_threads] +WAV_attributes:: + Verbosity = 0 + OverwriteSlice = false + diro = "." + logfile = wav.log + mesh_wav = @[MESH_WAV] + multigrid = @[MULTIGRID] +:: + +# CMEPS warm run sequence +runSeq:: +@@[coupling_interval_slow_sec] + MED med_phases_prep_wav_avg + MED med_phases_prep_ocn_avg + MED -> WAV :remapMethod=redist + MED -> OCN :remapMethod=redist + WAV + OCN + @@[coupling_interval_fast_sec] + MED med_phases_prep_atm + MED med_phases_prep_ice + MED -> ATM :remapMethod=redist + MED -> ICE :remapMethod=redist + ATM phase1 + ATM -> CHM + CHM + CHM -> ATM + ATM phase2 + ICE + ATM -> MED :remapMethod=redist + MED med_phases_post_atm + ICE -> MED :remapMethod=redist + MED med_phases_post_ice + MED med_phases_ocnalb_run + MED med_phases_prep_ocn_accum + MED med_phases_prep_wav_accum + @ + OCN -> MED :remapMethod=redist + WAV -> MED :remapMethod=redist + MED med_phases_post_ocn + MED med_phases_post_wav + MED med_phases_restart_write +@ +:: + +# CMEPS variables + +DRIVER_attributes:: +:: +MED_attributes:: + ATM_model = @[atm_model] + ICE_model = @[ice_model] + OCN_model = @[ocn_model] + WAV_model = @[wav_model] + coupling_mode = @[CPLMODE] + history_tile_atm = @[ATMTILESIZE] + pio_rearranger = box + ocean_albedo_limit = @[ocean_albedo_limit] +:: +ALLCOMP_attributes:: + ScalarFieldCount = 2 + ScalarFieldIdxGridNX = 1 + ScalarFieldIdxGridNY = 2 + ScalarFieldName = cpl_scalars + start_type = @[RUNTYPE] + restart_dir = RESTART/ + case_name = ufs.cpld + restart_n = @[RESTART_N] + restart_option = nhours + restart_ymd = -999 + dbug_flag = @[cap_dbug_flag] + use_coldstart = @[use_coldstart] + use_mommesh = @[use_mommesh] + eps_imesh = @[eps_imesh] + stop_n = @[FHMAX] + stop_option = nhours + stop_ymd = -999 + orb_eccen = 1.e36 + orb_iyear = 2000 + orb_iyear_align = 2000 + orb_mode = fixed_year + orb_mvelp = 1.e36 + orb_obliq = 1.e36 +:: diff --git a/parm/ufs/ufs.configure.cpld_aero_wave.IN b/parm/ufs/ufs.configure.cpld_aero_wave.IN new file mode 100644 index 0000000000..38ca37de72 --- /dev/null +++ b/parm/ufs/ufs.configure.cpld_aero_wave.IN @@ -0,0 +1,154 @@ +############################################# +#### UFS Run-Time Configuration File ##### +############################################# + +# ESMF # +logKindFlag: @[esmf_logkind] +globalResourceControl: true + +# EARTH # +EARTH_component_list: MED ATM CHM OCN ICE WAV +EARTH_attributes:: + Verbosity = 0 +:: + +# MED # +MED_model: @[med_model] +MED_petlist_bounds: @[med_petlist_bounds] +MED_omp_num_threads: @[med_omp_num_threads] +:: + +# ATM # +ATM_model: @[atm_model] +ATM_petlist_bounds: @[atm_petlist_bounds] +ATM_omp_num_threads: @[atm_omp_num_threads] +ATM_attributes:: + Verbosity = 0 + DumpFields = @[DumpFields] + ProfileMemory = false + OverwriteSlice = true +:: + +# CHM # +CHM_model: @[chm_model] +CHM_petlist_bounds: @[chm_petlist_bounds] +CHM_omp_num_threads: @[chm_omp_num_threads] +CHM_attributes:: + Verbosity = 0 +:: + +# OCN # +OCN_model: @[ocn_model] +OCN_petlist_bounds: @[ocn_petlist_bounds] +OCN_omp_num_threads: @[ocn_omp_num_threads] +OCN_attributes:: + Verbosity = 0 + DumpFields = @[DumpFields] + ProfileMemory = false + OverwriteSlice = true + mesh_ocn = @[MESH_OCN_ICE] +:: + +# ICE # +ICE_model: @[ice_model] +ICE_petlist_bounds: @[ice_petlist_bounds] +ICE_omp_num_threads: @[ice_omp_num_threads] +ICE_attributes:: + Verbosity = 0 + DumpFields = @[DumpFields] + ProfileMemory = false + OverwriteSlice = true + mesh_ice = @[MESH_OCN_ICE] + stop_n = @[RESTART_N] + stop_option = nhours + stop_ymd = -999 +:: + +# WAV # +WAV_model: @[wav_model] +WAV_petlist_bounds: @[wav_petlist_bounds] +WAV_omp_num_threads: @[wav_omp_num_threads] +WAV_attributes:: + Verbosity = 0 + OverwriteSlice = false + diro = "." + logfile = wav.log + mesh_wav = @[MESH_WAV] + multigrid = @[MULTIGRID] +:: + +# CMEPS warm run sequence +runSeq:: +@@[coupling_interval_slow_sec] + MED med_phases_prep_ocn_avg + MED -> OCN :remapMethod=redist + OCN + @@[coupling_interval_fast_sec] + MED med_phases_prep_atm + MED med_phases_prep_ice + MED med_phases_prep_wav_accum + MED med_phases_prep_wav_avg + MED -> ATM :remapMethod=redist + MED -> ICE :remapMethod=redist + MED -> WAV :remapMethod=redist + ATM phase1 + ATM -> CHM + CHM + CHM -> ATM + ATM phase2 + ICE + WAV + ATM -> MED :remapMethod=redist + MED med_phases_post_atm + ICE -> MED :remapMethod=redist + MED med_phases_post_ice + WAV -> MED :remapMethod=redist + MED med_phases_post_wav + MED med_phases_ocnalb_run + MED med_phases_prep_ocn_accum + @ + OCN -> MED :remapMethod=redist + MED med_phases_post_ocn + MED med_phases_restart_write +@ +:: + +# CMEPS variables + +DRIVER_attributes:: +:: +MED_attributes:: + ATM_model = @[atm_model] + ICE_model = @[ice_model] + OCN_model = @[ocn_model] + WAV_model = @[wav_model] + coupling_mode = @[CPLMODE] + history_tile_atm = @[ATMTILESIZE] + pio_rearranger = box + ocean_albedo_limit = @[ocean_albedo_limit] +:: +ALLCOMP_attributes:: + ScalarFieldCount = 2 + ScalarFieldIdxGridNX = 1 + ScalarFieldIdxGridNY = 2 + ScalarFieldName = cpl_scalars + start_type = @[RUNTYPE] + restart_dir = RESTART/ + case_name = ufs.cpld + restart_n = @[RESTART_N] + restart_option = nhours + restart_ymd = -999 + dbug_flag = @[cap_dbug_flag] + use_coldstart = @[use_coldstart] + use_mommesh = @[use_mommesh] + eps_imesh = @[eps_imesh] + stop_n = @[FHMAX] + stop_option = nhours + stop_ymd = -999 + orb_eccen = 1.e36 + orb_iyear = 2000 + orb_iyear_align = 2000 + orb_mode = fixed_year + orb_mvelp = 1.e36 + orb_obliq = 1.e36 +:: diff --git a/parm/ufs/ufs.configure.cpld_outerwave.IN b/parm/ufs/ufs.configure.cpld_outerwave.IN new file mode 100644 index 0000000000..a2c6c34777 --- /dev/null +++ b/parm/ufs/ufs.configure.cpld_outerwave.IN @@ -0,0 +1,142 @@ +############################################# +#### UFS Run-Time Configuration File ##### +############################################# + +# ESMF # +logKindFlag: @[esmf_logkind] +globalResourceControl: true + +# EARTH # +EARTH_component_list: MED ATM OCN ICE WAV +EARTH_attributes:: + Verbosity = 0 +:: + +# MED # +MED_model: @[med_model] +MED_petlist_bounds: @[med_petlist_bounds] +MED_omp_num_threads: @[med_omp_num_threads] +:: + +# ATM # +ATM_model: @[atm_model] +ATM_petlist_bounds: @[atm_petlist_bounds] +ATM_omp_num_threads: @[atm_omp_num_threads] +ATM_attributes:: + Verbosity = 0 + DumpFields = @[DumpFields] + ProfileMemory = false + OverwriteSlice = true +:: + +# OCN # +OCN_model: @[ocn_model] +OCN_petlist_bounds: @[ocn_petlist_bounds] +OCN_omp_num_threads: @[ocn_omp_num_threads] +OCN_attributes:: + Verbosity = 0 + DumpFields = @[DumpFields] + ProfileMemory = false + OverwriteSlice = true + mesh_ocn = @[MESH_OCN_ICE] +:: + +# ICE # +ICE_model: @[ice_model] +ICE_petlist_bounds: @[ice_petlist_bounds] +ICE_omp_num_threads: @[ice_omp_num_threads] +ICE_attributes:: + Verbosity = 0 + DumpFields = @[DumpFields] + ProfileMemory = false + OverwriteSlice = true + mesh_ice = @[MESH_OCN_ICE] + stop_n = @[RESTART_N] + stop_option = nhours + stop_ymd = -999 +:: + +# WAV # +WAV_model: @[wav_model] +WAV_petlist_bounds: @[wav_petlist_bounds] +WAV_omp_num_threads: @[wav_omp_num_threads] +WAV_attributes:: + Verbosity = 0 + OverwriteSlice = false + diro = "." + logfile = wav.log + mesh_wav = @[MESH_WAV] + multigrid = @[MULTIGRID] +:: + +# CMEPS warm run sequence +runSeq:: +@@[coupling_interval_slow_sec] + MED med_phases_prep_wav_avg + MED med_phases_prep_ocn_avg + MED -> WAV :remapMethod=redist + MED -> OCN :remapMethod=redist + WAV + OCN + @@[coupling_interval_fast_sec] + MED med_phases_prep_atm + MED med_phases_prep_ice + MED -> ATM :remapMethod=redist + MED -> ICE :remapMethod=redist + ATM + ICE + ATM -> MED :remapMethod=redist + MED med_phases_post_atm + ICE -> MED :remapMethod=redist + MED med_phases_post_ice + MED med_phases_ocnalb_run + MED med_phases_prep_ocn_accum + MED med_phases_prep_wav_accum + @ + OCN -> MED :remapMethod=redist + WAV -> MED :remapMethod=redist + MED med_phases_post_ocn + MED med_phases_post_wav + MED med_phases_restart_write +@ +:: + +# CMEPS variables + +DRIVER_attributes:: +:: +MED_attributes:: + ATM_model = @[atm_model] + ICE_model = @[ice_model] + OCN_model = @[ocn_model] + WAV_model = @[wav_model] + coupling_mode = @[CPLMODE] + history_tile_atm = @[ATMTILESIZE] + pio_rearranger = box + ocean_albedo_limit = @[ocean_albedo_limit] +:: +ALLCOMP_attributes:: + ScalarFieldCount = 2 + ScalarFieldIdxGridNX = 1 + ScalarFieldIdxGridNY = 2 + ScalarFieldName = cpl_scalars + start_type = @[RUNTYPE] + restart_dir = RESTART/ + case_name = ufs.cpld + restart_n = @[RESTART_N] + restart_option = nhours + restart_ymd = -999 + dbug_flag = @[cap_dbug_flag] + use_coldstart = @[use_coldstart] + use_mommesh = @[use_mommesh] + eps_imesh = @[eps_imesh] + stop_n = @[FHMAX] + stop_option = nhours + stop_ymd = -999 + orb_eccen = 1.e36 + orb_iyear = 2000 + orb_iyear_align = 2000 + orb_mode = fixed_year + orb_mvelp = 1.e36 + orb_obliq = 1.e36 +:: diff --git a/parm/ufs/ufs.configure.cpld_wave.IN b/parm/ufs/ufs.configure.cpld_wave.IN new file mode 100644 index 0000000000..96c83501d1 --- /dev/null +++ b/parm/ufs/ufs.configure.cpld_wave.IN @@ -0,0 +1,142 @@ +############################################# +#### UFS Run-Time Configuration File ##### +############################################# + +# ESMF # +logKindFlag: @[esmf_logkind] +globalResourceControl: true + +# EARTH # +EARTH_component_list: MED ATM OCN ICE WAV +EARTH_attributes:: + Verbosity = 0 +:: + +# MED # +MED_model: @[med_model] +MED_petlist_bounds: @[med_petlist_bounds] +MED_omp_num_threads: @[med_omp_num_threads] +:: + +# ATM # +ATM_model: @[atm_model] +ATM_petlist_bounds: @[atm_petlist_bounds] +ATM_omp_num_threads: @[atm_omp_num_threads] +ATM_attributes:: + Verbosity = 0 + DumpFields = @[DumpFields] + ProfileMemory = false + OverwriteSlice = true +:: + +# OCN # +OCN_model: @[ocn_model] +OCN_petlist_bounds: @[ocn_petlist_bounds] +OCN_omp_num_threads: @[ocn_omp_num_threads] +OCN_attributes:: + Verbosity = 0 + DumpFields = @[DumpFields] + ProfileMemory = false + OverwriteSlice = true + mesh_ocn = @[MESH_OCN_ICE] +:: + +# ICE # +ICE_model: @[ice_model] +ICE_petlist_bounds: @[ice_petlist_bounds] +ICE_omp_num_threads: @[ice_omp_num_threads] +ICE_attributes:: + Verbosity = 0 + DumpFields = @[DumpFields] + ProfileMemory = false + OverwriteSlice = true + mesh_ice = @[MESH_OCN_ICE] + stop_n = @[RESTART_N] + stop_option = nhours + stop_ymd = -999 +:: + +# WAV # +WAV_model: @[wav_model] +WAV_petlist_bounds: @[wav_petlist_bounds] +WAV_omp_num_threads: @[wav_omp_num_threads] +WAV_attributes:: + Verbosity = 0 + OverwriteSlice = false + diro = "." + logfile = wav.log + mesh_wav = @[MESH_WAV] + multigrid = @[MULTIGRID] +:: + +# CMEPS warm run sequence +runSeq:: +@@[coupling_interval_slow_sec] + MED med_phases_prep_ocn_avg + MED -> OCN :remapMethod=redist + OCN + @@[coupling_interval_fast_sec] + MED med_phases_prep_atm + MED med_phases_prep_ice + MED med_phases_prep_wav_accum + MED med_phases_prep_wav_avg + MED -> ATM :remapMethod=redist + MED -> ICE :remapMethod=redist + MED -> WAV :remapMethod=redist + ATM + ICE + WAV + ATM -> MED :remapMethod=redist + MED med_phases_post_atm + ICE -> MED :remapMethod=redist + MED med_phases_post_ice + WAV -> MED :remapMethod=redist + MED med_phases_post_wav + MED med_phases_ocnalb_run + MED med_phases_prep_ocn_accum + @ + OCN -> MED :remapMethod=redist + MED med_phases_post_ocn + MED med_phases_restart_write +@ +:: + +# CMEPS variables + +DRIVER_attributes:: +:: +MED_attributes:: + ATM_model = @[atm_model] + ICE_model = @[ice_model] + OCN_model = @[ocn_model] + WAV_model = @[wav_model] + coupling_mode = @[CPLMODE] + history_tile_atm = @[ATMTILESIZE] + pio_rearranger = box + ocean_albedo_limit = @[ocean_albedo_limit] +:: +ALLCOMP_attributes:: + ScalarFieldCount = 2 + ScalarFieldIdxGridNX = 1 + ScalarFieldIdxGridNY = 2 + ScalarFieldName = cpl_scalars + start_type = @[RUNTYPE] + restart_dir = RESTART/ + case_name = ufs.cpld + restart_n = @[RESTART_N] + restart_option = nhours + restart_ymd = -999 + dbug_flag = @[cap_dbug_flag] + use_coldstart = @[use_coldstart] + use_mommesh = @[use_mommesh] + eps_imesh = @[eps_imesh] + stop_n = @[FHMAX] + stop_option = nhours + stop_ymd = -999 + orb_eccen = 1.e36 + orb_iyear = 2000 + orb_iyear_align = 2000 + orb_mode = fixed_year + orb_mvelp = 1.e36 + orb_obliq = 1.e36 +:: diff --git a/parm/ufs/ufs.configure.leapfrog_atm_wav.IN b/parm/ufs/ufs.configure.leapfrog_atm_wav.IN new file mode 100644 index 0000000000..ec22c9478c --- /dev/null +++ b/parm/ufs/ufs.configure.leapfrog_atm_wav.IN @@ -0,0 +1,41 @@ +############################################# +#### UFS Run-Time Configuration File ##### +############################################# + +# ESMF # +logKindFlag: @[esmf_logkind] +globalResourceControl: true + +# EARTH # +EARTH_component_list: ATM WAV +EARTH_attributes:: + Verbosity = max +:: + +# ATM # +ATM_model: @[atm_model] +ATM_petlist_bounds: @[atm_petlist_bounds] +ATM_omp_num_threads: @[atm_omp_num_threads] +ATM_attributes:: + Verbosity = max + DumpFields = true +:: + +# WAV # +WAV_model: @[wav_model] +WAV_petlist_bounds: @[wav_petlist_bounds] +WAV_omp_num_threads: @[wav_omp_num_threads] +WAV_attributes:: + Verbosity = max +:: + + + +# Run Sequence # +runSeq:: + @@[coupling_interval_slow_sec] + ATM + ATM -> WAV + WAV + @ +:: diff --git a/parm/wave/ak_10m_interp.inp.tmpl b/parm/wave/ak_10m_interp.inp.tmpl new file mode 100755 index 0000000000..225ab3628d --- /dev/null +++ b/parm/wave/ak_10m_interp.inp.tmpl @@ -0,0 +1,13 @@ +$ Input file for interpolation of GLO30m_ext Grid +$------------------------------------------------ +$ Start Time DT NSteps + TIME DT NSTEPS +$ Total number of grids + 3 +$ Grid extensions + 'gnh_10m' + 'aoc_9km' + 'ak_10m' +$ + 0 +$ diff --git a/parm/wave/at_10m_interp.inp.tmpl b/parm/wave/at_10m_interp.inp.tmpl new file mode 100755 index 0000000000..b2a80081e1 --- /dev/null +++ b/parm/wave/at_10m_interp.inp.tmpl @@ -0,0 +1,12 @@ +$ Input file for interpolation of GLO30m_ext Grid +$------------------------------------------------ +$ Start Time DT NSteps + TIME DT NSTEPS +$ Total number of grids + 2 +$ Grid extensions + 'gnh_10m' + 'at_10m' +$ + 0 +$ diff --git a/parm/parm_wave/bull_awips_gfswave b/parm/wave/bull_awips_gfswave similarity index 100% rename from parm/parm_wave/bull_awips_gfswave rename to parm/wave/bull_awips_gfswave diff --git a/parm/wave/ep_10m_interp.inp.tmpl b/parm/wave/ep_10m_interp.inp.tmpl new file mode 100755 index 0000000000..0848854ccf --- /dev/null +++ b/parm/wave/ep_10m_interp.inp.tmpl @@ -0,0 +1,12 @@ +$ Input file for interpolation of GLO30m_ext Grid +$------------------------------------------------ +$ Start Time DT NSteps + TIME DT NSTEPS +$ Total number of grids + 2 +$ Grid extensions + 'gnh_10m' + 'ep_10m' +$ + 0 +$ diff --git a/parm/wave/glo_15mxt_interp.inp.tmpl b/parm/wave/glo_15mxt_interp.inp.tmpl new file mode 100755 index 0000000000..74bc9eebf4 --- /dev/null +++ b/parm/wave/glo_15mxt_interp.inp.tmpl @@ -0,0 +1,14 @@ +$ Input file for interpolation of GLO30m_ext Grid +$------------------------------------------------ +$ Start Time DT NSteps + TIME DT NSTEPS +$ Total number of grids + 4 +$ Grid extensions + 'gnh_10m' + 'aoc_9km' + 'gsh_15m' + 'glo_15mxt' +$ + 0 +$ diff --git a/parm/wave/glo_30m_interp.inp.tmpl b/parm/wave/glo_30m_interp.inp.tmpl new file mode 100755 index 0000000000..ea1baf7fc4 --- /dev/null +++ b/parm/wave/glo_30m_interp.inp.tmpl @@ -0,0 +1,14 @@ +$ Input file for interpolation of GLO30m_ext Grid +$------------------------------------------------ +$ Start Time DT NSteps + TIME DT NSTEPS +$ Total number of grids + 4 +$ Grid extensions + 'gnh_10m' + 'aoc_9km' + 'gsh_15m' + 'glo_30m' +$ + 0 +$ diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f000 b/parm/wave/grib2_gfswave.ao_9km.f000 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f000 rename to parm/wave/grib2_gfswave.ao_9km.f000 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f003 b/parm/wave/grib2_gfswave.ao_9km.f003 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f003 rename to parm/wave/grib2_gfswave.ao_9km.f003 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f006 b/parm/wave/grib2_gfswave.ao_9km.f006 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f006 rename to parm/wave/grib2_gfswave.ao_9km.f006 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f009 b/parm/wave/grib2_gfswave.ao_9km.f009 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f009 rename to parm/wave/grib2_gfswave.ao_9km.f009 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f012 b/parm/wave/grib2_gfswave.ao_9km.f012 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f012 rename to parm/wave/grib2_gfswave.ao_9km.f012 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f015 b/parm/wave/grib2_gfswave.ao_9km.f015 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f015 rename to parm/wave/grib2_gfswave.ao_9km.f015 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f018 b/parm/wave/grib2_gfswave.ao_9km.f018 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f018 rename to parm/wave/grib2_gfswave.ao_9km.f018 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f021 b/parm/wave/grib2_gfswave.ao_9km.f021 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f021 rename to parm/wave/grib2_gfswave.ao_9km.f021 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f024 b/parm/wave/grib2_gfswave.ao_9km.f024 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f024 rename to parm/wave/grib2_gfswave.ao_9km.f024 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f027 b/parm/wave/grib2_gfswave.ao_9km.f027 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f027 rename to parm/wave/grib2_gfswave.ao_9km.f027 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f030 b/parm/wave/grib2_gfswave.ao_9km.f030 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f030 rename to parm/wave/grib2_gfswave.ao_9km.f030 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f033 b/parm/wave/grib2_gfswave.ao_9km.f033 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f033 rename to parm/wave/grib2_gfswave.ao_9km.f033 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f036 b/parm/wave/grib2_gfswave.ao_9km.f036 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f036 rename to parm/wave/grib2_gfswave.ao_9km.f036 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f039 b/parm/wave/grib2_gfswave.ao_9km.f039 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f039 rename to parm/wave/grib2_gfswave.ao_9km.f039 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f042 b/parm/wave/grib2_gfswave.ao_9km.f042 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f042 rename to parm/wave/grib2_gfswave.ao_9km.f042 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f045 b/parm/wave/grib2_gfswave.ao_9km.f045 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f045 rename to parm/wave/grib2_gfswave.ao_9km.f045 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f048 b/parm/wave/grib2_gfswave.ao_9km.f048 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f048 rename to parm/wave/grib2_gfswave.ao_9km.f048 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f051 b/parm/wave/grib2_gfswave.ao_9km.f051 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f051 rename to parm/wave/grib2_gfswave.ao_9km.f051 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f054 b/parm/wave/grib2_gfswave.ao_9km.f054 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f054 rename to parm/wave/grib2_gfswave.ao_9km.f054 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f057 b/parm/wave/grib2_gfswave.ao_9km.f057 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f057 rename to parm/wave/grib2_gfswave.ao_9km.f057 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f060 b/parm/wave/grib2_gfswave.ao_9km.f060 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f060 rename to parm/wave/grib2_gfswave.ao_9km.f060 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f063 b/parm/wave/grib2_gfswave.ao_9km.f063 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f063 rename to parm/wave/grib2_gfswave.ao_9km.f063 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f066 b/parm/wave/grib2_gfswave.ao_9km.f066 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f066 rename to parm/wave/grib2_gfswave.ao_9km.f066 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f069 b/parm/wave/grib2_gfswave.ao_9km.f069 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f069 rename to parm/wave/grib2_gfswave.ao_9km.f069 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f072 b/parm/wave/grib2_gfswave.ao_9km.f072 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f072 rename to parm/wave/grib2_gfswave.ao_9km.f072 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f078 b/parm/wave/grib2_gfswave.ao_9km.f078 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f078 rename to parm/wave/grib2_gfswave.ao_9km.f078 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f084 b/parm/wave/grib2_gfswave.ao_9km.f084 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f084 rename to parm/wave/grib2_gfswave.ao_9km.f084 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f090 b/parm/wave/grib2_gfswave.ao_9km.f090 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f090 rename to parm/wave/grib2_gfswave.ao_9km.f090 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f096 b/parm/wave/grib2_gfswave.ao_9km.f096 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f096 rename to parm/wave/grib2_gfswave.ao_9km.f096 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f102 b/parm/wave/grib2_gfswave.ao_9km.f102 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f102 rename to parm/wave/grib2_gfswave.ao_9km.f102 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f108 b/parm/wave/grib2_gfswave.ao_9km.f108 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f108 rename to parm/wave/grib2_gfswave.ao_9km.f108 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f114 b/parm/wave/grib2_gfswave.ao_9km.f114 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f114 rename to parm/wave/grib2_gfswave.ao_9km.f114 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f120 b/parm/wave/grib2_gfswave.ao_9km.f120 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f120 rename to parm/wave/grib2_gfswave.ao_9km.f120 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f126 b/parm/wave/grib2_gfswave.ao_9km.f126 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f126 rename to parm/wave/grib2_gfswave.ao_9km.f126 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f132 b/parm/wave/grib2_gfswave.ao_9km.f132 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f132 rename to parm/wave/grib2_gfswave.ao_9km.f132 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f138 b/parm/wave/grib2_gfswave.ao_9km.f138 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f138 rename to parm/wave/grib2_gfswave.ao_9km.f138 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f144 b/parm/wave/grib2_gfswave.ao_9km.f144 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f144 rename to parm/wave/grib2_gfswave.ao_9km.f144 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f150 b/parm/wave/grib2_gfswave.ao_9km.f150 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f150 rename to parm/wave/grib2_gfswave.ao_9km.f150 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f156 b/parm/wave/grib2_gfswave.ao_9km.f156 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f156 rename to parm/wave/grib2_gfswave.ao_9km.f156 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f162 b/parm/wave/grib2_gfswave.ao_9km.f162 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f162 rename to parm/wave/grib2_gfswave.ao_9km.f162 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f168 b/parm/wave/grib2_gfswave.ao_9km.f168 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f168 rename to parm/wave/grib2_gfswave.ao_9km.f168 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f174 b/parm/wave/grib2_gfswave.ao_9km.f174 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f174 rename to parm/wave/grib2_gfswave.ao_9km.f174 diff --git a/parm/parm_wave/grib2_gfswave.ao_9km.f180 b/parm/wave/grib2_gfswave.ao_9km.f180 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ao_9km.f180 rename to parm/wave/grib2_gfswave.ao_9km.f180 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f000 b/parm/wave/grib2_gfswave.at_10m.f000 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f000 rename to parm/wave/grib2_gfswave.at_10m.f000 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f003 b/parm/wave/grib2_gfswave.at_10m.f003 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f003 rename to parm/wave/grib2_gfswave.at_10m.f003 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f006 b/parm/wave/grib2_gfswave.at_10m.f006 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f006 rename to parm/wave/grib2_gfswave.at_10m.f006 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f009 b/parm/wave/grib2_gfswave.at_10m.f009 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f009 rename to parm/wave/grib2_gfswave.at_10m.f009 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f012 b/parm/wave/grib2_gfswave.at_10m.f012 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f012 rename to parm/wave/grib2_gfswave.at_10m.f012 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f015 b/parm/wave/grib2_gfswave.at_10m.f015 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f015 rename to parm/wave/grib2_gfswave.at_10m.f015 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f018 b/parm/wave/grib2_gfswave.at_10m.f018 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f018 rename to parm/wave/grib2_gfswave.at_10m.f018 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f021 b/parm/wave/grib2_gfswave.at_10m.f021 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f021 rename to parm/wave/grib2_gfswave.at_10m.f021 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f024 b/parm/wave/grib2_gfswave.at_10m.f024 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f024 rename to parm/wave/grib2_gfswave.at_10m.f024 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f027 b/parm/wave/grib2_gfswave.at_10m.f027 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f027 rename to parm/wave/grib2_gfswave.at_10m.f027 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f030 b/parm/wave/grib2_gfswave.at_10m.f030 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f030 rename to parm/wave/grib2_gfswave.at_10m.f030 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f033 b/parm/wave/grib2_gfswave.at_10m.f033 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f033 rename to parm/wave/grib2_gfswave.at_10m.f033 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f036 b/parm/wave/grib2_gfswave.at_10m.f036 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f036 rename to parm/wave/grib2_gfswave.at_10m.f036 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f039 b/parm/wave/grib2_gfswave.at_10m.f039 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f039 rename to parm/wave/grib2_gfswave.at_10m.f039 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f042 b/parm/wave/grib2_gfswave.at_10m.f042 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f042 rename to parm/wave/grib2_gfswave.at_10m.f042 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f045 b/parm/wave/grib2_gfswave.at_10m.f045 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f045 rename to parm/wave/grib2_gfswave.at_10m.f045 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f048 b/parm/wave/grib2_gfswave.at_10m.f048 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f048 rename to parm/wave/grib2_gfswave.at_10m.f048 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f051 b/parm/wave/grib2_gfswave.at_10m.f051 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f051 rename to parm/wave/grib2_gfswave.at_10m.f051 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f054 b/parm/wave/grib2_gfswave.at_10m.f054 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f054 rename to parm/wave/grib2_gfswave.at_10m.f054 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f057 b/parm/wave/grib2_gfswave.at_10m.f057 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f057 rename to parm/wave/grib2_gfswave.at_10m.f057 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f060 b/parm/wave/grib2_gfswave.at_10m.f060 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f060 rename to parm/wave/grib2_gfswave.at_10m.f060 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f063 b/parm/wave/grib2_gfswave.at_10m.f063 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f063 rename to parm/wave/grib2_gfswave.at_10m.f063 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f066 b/parm/wave/grib2_gfswave.at_10m.f066 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f066 rename to parm/wave/grib2_gfswave.at_10m.f066 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f069 b/parm/wave/grib2_gfswave.at_10m.f069 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f069 rename to parm/wave/grib2_gfswave.at_10m.f069 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f072 b/parm/wave/grib2_gfswave.at_10m.f072 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f072 rename to parm/wave/grib2_gfswave.at_10m.f072 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f078 b/parm/wave/grib2_gfswave.at_10m.f078 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f078 rename to parm/wave/grib2_gfswave.at_10m.f078 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f084 b/parm/wave/grib2_gfswave.at_10m.f084 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f084 rename to parm/wave/grib2_gfswave.at_10m.f084 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f090 b/parm/wave/grib2_gfswave.at_10m.f090 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f090 rename to parm/wave/grib2_gfswave.at_10m.f090 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f096 b/parm/wave/grib2_gfswave.at_10m.f096 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f096 rename to parm/wave/grib2_gfswave.at_10m.f096 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f102 b/parm/wave/grib2_gfswave.at_10m.f102 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f102 rename to parm/wave/grib2_gfswave.at_10m.f102 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f108 b/parm/wave/grib2_gfswave.at_10m.f108 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f108 rename to parm/wave/grib2_gfswave.at_10m.f108 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f114 b/parm/wave/grib2_gfswave.at_10m.f114 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f114 rename to parm/wave/grib2_gfswave.at_10m.f114 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f120 b/parm/wave/grib2_gfswave.at_10m.f120 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f120 rename to parm/wave/grib2_gfswave.at_10m.f120 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f126 b/parm/wave/grib2_gfswave.at_10m.f126 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f126 rename to parm/wave/grib2_gfswave.at_10m.f126 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f132 b/parm/wave/grib2_gfswave.at_10m.f132 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f132 rename to parm/wave/grib2_gfswave.at_10m.f132 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f138 b/parm/wave/grib2_gfswave.at_10m.f138 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f138 rename to parm/wave/grib2_gfswave.at_10m.f138 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f144 b/parm/wave/grib2_gfswave.at_10m.f144 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f144 rename to parm/wave/grib2_gfswave.at_10m.f144 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f150 b/parm/wave/grib2_gfswave.at_10m.f150 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f150 rename to parm/wave/grib2_gfswave.at_10m.f150 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f156 b/parm/wave/grib2_gfswave.at_10m.f156 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f156 rename to parm/wave/grib2_gfswave.at_10m.f156 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f162 b/parm/wave/grib2_gfswave.at_10m.f162 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f162 rename to parm/wave/grib2_gfswave.at_10m.f162 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f168 b/parm/wave/grib2_gfswave.at_10m.f168 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f168 rename to parm/wave/grib2_gfswave.at_10m.f168 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f174 b/parm/wave/grib2_gfswave.at_10m.f174 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f174 rename to parm/wave/grib2_gfswave.at_10m.f174 diff --git a/parm/parm_wave/grib2_gfswave.at_10m.f180 b/parm/wave/grib2_gfswave.at_10m.f180 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.at_10m.f180 rename to parm/wave/grib2_gfswave.at_10m.f180 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f000 b/parm/wave/grib2_gfswave.ep_10m.f000 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f000 rename to parm/wave/grib2_gfswave.ep_10m.f000 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f003 b/parm/wave/grib2_gfswave.ep_10m.f003 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f003 rename to parm/wave/grib2_gfswave.ep_10m.f003 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f006 b/parm/wave/grib2_gfswave.ep_10m.f006 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f006 rename to parm/wave/grib2_gfswave.ep_10m.f006 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f009 b/parm/wave/grib2_gfswave.ep_10m.f009 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f009 rename to parm/wave/grib2_gfswave.ep_10m.f009 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f012 b/parm/wave/grib2_gfswave.ep_10m.f012 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f012 rename to parm/wave/grib2_gfswave.ep_10m.f012 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f015 b/parm/wave/grib2_gfswave.ep_10m.f015 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f015 rename to parm/wave/grib2_gfswave.ep_10m.f015 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f018 b/parm/wave/grib2_gfswave.ep_10m.f018 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f018 rename to parm/wave/grib2_gfswave.ep_10m.f018 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f021 b/parm/wave/grib2_gfswave.ep_10m.f021 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f021 rename to parm/wave/grib2_gfswave.ep_10m.f021 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f024 b/parm/wave/grib2_gfswave.ep_10m.f024 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f024 rename to parm/wave/grib2_gfswave.ep_10m.f024 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f027 b/parm/wave/grib2_gfswave.ep_10m.f027 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f027 rename to parm/wave/grib2_gfswave.ep_10m.f027 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f030 b/parm/wave/grib2_gfswave.ep_10m.f030 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f030 rename to parm/wave/grib2_gfswave.ep_10m.f030 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f033 b/parm/wave/grib2_gfswave.ep_10m.f033 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f033 rename to parm/wave/grib2_gfswave.ep_10m.f033 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f036 b/parm/wave/grib2_gfswave.ep_10m.f036 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f036 rename to parm/wave/grib2_gfswave.ep_10m.f036 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f039 b/parm/wave/grib2_gfswave.ep_10m.f039 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f039 rename to parm/wave/grib2_gfswave.ep_10m.f039 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f042 b/parm/wave/grib2_gfswave.ep_10m.f042 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f042 rename to parm/wave/grib2_gfswave.ep_10m.f042 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f045 b/parm/wave/grib2_gfswave.ep_10m.f045 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f045 rename to parm/wave/grib2_gfswave.ep_10m.f045 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f048 b/parm/wave/grib2_gfswave.ep_10m.f048 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f048 rename to parm/wave/grib2_gfswave.ep_10m.f048 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f051 b/parm/wave/grib2_gfswave.ep_10m.f051 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f051 rename to parm/wave/grib2_gfswave.ep_10m.f051 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f054 b/parm/wave/grib2_gfswave.ep_10m.f054 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f054 rename to parm/wave/grib2_gfswave.ep_10m.f054 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f057 b/parm/wave/grib2_gfswave.ep_10m.f057 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f057 rename to parm/wave/grib2_gfswave.ep_10m.f057 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f060 b/parm/wave/grib2_gfswave.ep_10m.f060 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f060 rename to parm/wave/grib2_gfswave.ep_10m.f060 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f063 b/parm/wave/grib2_gfswave.ep_10m.f063 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f063 rename to parm/wave/grib2_gfswave.ep_10m.f063 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f066 b/parm/wave/grib2_gfswave.ep_10m.f066 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f066 rename to parm/wave/grib2_gfswave.ep_10m.f066 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f069 b/parm/wave/grib2_gfswave.ep_10m.f069 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f069 rename to parm/wave/grib2_gfswave.ep_10m.f069 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f072 b/parm/wave/grib2_gfswave.ep_10m.f072 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f072 rename to parm/wave/grib2_gfswave.ep_10m.f072 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f078 b/parm/wave/grib2_gfswave.ep_10m.f078 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f078 rename to parm/wave/grib2_gfswave.ep_10m.f078 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f084 b/parm/wave/grib2_gfswave.ep_10m.f084 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f084 rename to parm/wave/grib2_gfswave.ep_10m.f084 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f090 b/parm/wave/grib2_gfswave.ep_10m.f090 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f090 rename to parm/wave/grib2_gfswave.ep_10m.f090 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f096 b/parm/wave/grib2_gfswave.ep_10m.f096 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f096 rename to parm/wave/grib2_gfswave.ep_10m.f096 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f102 b/parm/wave/grib2_gfswave.ep_10m.f102 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f102 rename to parm/wave/grib2_gfswave.ep_10m.f102 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f108 b/parm/wave/grib2_gfswave.ep_10m.f108 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f108 rename to parm/wave/grib2_gfswave.ep_10m.f108 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f114 b/parm/wave/grib2_gfswave.ep_10m.f114 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f114 rename to parm/wave/grib2_gfswave.ep_10m.f114 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f120 b/parm/wave/grib2_gfswave.ep_10m.f120 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f120 rename to parm/wave/grib2_gfswave.ep_10m.f120 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f126 b/parm/wave/grib2_gfswave.ep_10m.f126 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f126 rename to parm/wave/grib2_gfswave.ep_10m.f126 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f132 b/parm/wave/grib2_gfswave.ep_10m.f132 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f132 rename to parm/wave/grib2_gfswave.ep_10m.f132 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f138 b/parm/wave/grib2_gfswave.ep_10m.f138 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f138 rename to parm/wave/grib2_gfswave.ep_10m.f138 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f144 b/parm/wave/grib2_gfswave.ep_10m.f144 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f144 rename to parm/wave/grib2_gfswave.ep_10m.f144 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f150 b/parm/wave/grib2_gfswave.ep_10m.f150 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f150 rename to parm/wave/grib2_gfswave.ep_10m.f150 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f156 b/parm/wave/grib2_gfswave.ep_10m.f156 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f156 rename to parm/wave/grib2_gfswave.ep_10m.f156 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f162 b/parm/wave/grib2_gfswave.ep_10m.f162 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f162 rename to parm/wave/grib2_gfswave.ep_10m.f162 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f168 b/parm/wave/grib2_gfswave.ep_10m.f168 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f168 rename to parm/wave/grib2_gfswave.ep_10m.f168 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f174 b/parm/wave/grib2_gfswave.ep_10m.f174 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f174 rename to parm/wave/grib2_gfswave.ep_10m.f174 diff --git a/parm/parm_wave/grib2_gfswave.ep_10m.f180 b/parm/wave/grib2_gfswave.ep_10m.f180 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.ep_10m.f180 rename to parm/wave/grib2_gfswave.ep_10m.f180 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f000 b/parm/wave/grib2_gfswave.glo_30m.f000 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f000 rename to parm/wave/grib2_gfswave.glo_30m.f000 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f003 b/parm/wave/grib2_gfswave.glo_30m.f003 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f003 rename to parm/wave/grib2_gfswave.glo_30m.f003 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f006 b/parm/wave/grib2_gfswave.glo_30m.f006 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f006 rename to parm/wave/grib2_gfswave.glo_30m.f006 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f009 b/parm/wave/grib2_gfswave.glo_30m.f009 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f009 rename to parm/wave/grib2_gfswave.glo_30m.f009 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f012 b/parm/wave/grib2_gfswave.glo_30m.f012 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f012 rename to parm/wave/grib2_gfswave.glo_30m.f012 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f015 b/parm/wave/grib2_gfswave.glo_30m.f015 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f015 rename to parm/wave/grib2_gfswave.glo_30m.f015 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f018 b/parm/wave/grib2_gfswave.glo_30m.f018 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f018 rename to parm/wave/grib2_gfswave.glo_30m.f018 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f021 b/parm/wave/grib2_gfswave.glo_30m.f021 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f021 rename to parm/wave/grib2_gfswave.glo_30m.f021 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f024 b/parm/wave/grib2_gfswave.glo_30m.f024 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f024 rename to parm/wave/grib2_gfswave.glo_30m.f024 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f027 b/parm/wave/grib2_gfswave.glo_30m.f027 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f027 rename to parm/wave/grib2_gfswave.glo_30m.f027 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f030 b/parm/wave/grib2_gfswave.glo_30m.f030 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f030 rename to parm/wave/grib2_gfswave.glo_30m.f030 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f033 b/parm/wave/grib2_gfswave.glo_30m.f033 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f033 rename to parm/wave/grib2_gfswave.glo_30m.f033 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f036 b/parm/wave/grib2_gfswave.glo_30m.f036 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f036 rename to parm/wave/grib2_gfswave.glo_30m.f036 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f039 b/parm/wave/grib2_gfswave.glo_30m.f039 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f039 rename to parm/wave/grib2_gfswave.glo_30m.f039 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f042 b/parm/wave/grib2_gfswave.glo_30m.f042 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f042 rename to parm/wave/grib2_gfswave.glo_30m.f042 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f045 b/parm/wave/grib2_gfswave.glo_30m.f045 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f045 rename to parm/wave/grib2_gfswave.glo_30m.f045 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f048 b/parm/wave/grib2_gfswave.glo_30m.f048 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f048 rename to parm/wave/grib2_gfswave.glo_30m.f048 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f051 b/parm/wave/grib2_gfswave.glo_30m.f051 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f051 rename to parm/wave/grib2_gfswave.glo_30m.f051 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f054 b/parm/wave/grib2_gfswave.glo_30m.f054 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f054 rename to parm/wave/grib2_gfswave.glo_30m.f054 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f057 b/parm/wave/grib2_gfswave.glo_30m.f057 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f057 rename to parm/wave/grib2_gfswave.glo_30m.f057 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f060 b/parm/wave/grib2_gfswave.glo_30m.f060 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f060 rename to parm/wave/grib2_gfswave.glo_30m.f060 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f063 b/parm/wave/grib2_gfswave.glo_30m.f063 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f063 rename to parm/wave/grib2_gfswave.glo_30m.f063 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f066 b/parm/wave/grib2_gfswave.glo_30m.f066 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f066 rename to parm/wave/grib2_gfswave.glo_30m.f066 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f069 b/parm/wave/grib2_gfswave.glo_30m.f069 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f069 rename to parm/wave/grib2_gfswave.glo_30m.f069 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f072 b/parm/wave/grib2_gfswave.glo_30m.f072 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f072 rename to parm/wave/grib2_gfswave.glo_30m.f072 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f078 b/parm/wave/grib2_gfswave.glo_30m.f078 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f078 rename to parm/wave/grib2_gfswave.glo_30m.f078 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f084 b/parm/wave/grib2_gfswave.glo_30m.f084 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f084 rename to parm/wave/grib2_gfswave.glo_30m.f084 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f090 b/parm/wave/grib2_gfswave.glo_30m.f090 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f090 rename to parm/wave/grib2_gfswave.glo_30m.f090 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f096 b/parm/wave/grib2_gfswave.glo_30m.f096 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f096 rename to parm/wave/grib2_gfswave.glo_30m.f096 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f102 b/parm/wave/grib2_gfswave.glo_30m.f102 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f102 rename to parm/wave/grib2_gfswave.glo_30m.f102 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f108 b/parm/wave/grib2_gfswave.glo_30m.f108 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f108 rename to parm/wave/grib2_gfswave.glo_30m.f108 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f114 b/parm/wave/grib2_gfswave.glo_30m.f114 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f114 rename to parm/wave/grib2_gfswave.glo_30m.f114 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f120 b/parm/wave/grib2_gfswave.glo_30m.f120 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f120 rename to parm/wave/grib2_gfswave.glo_30m.f120 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f126 b/parm/wave/grib2_gfswave.glo_30m.f126 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f126 rename to parm/wave/grib2_gfswave.glo_30m.f126 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f132 b/parm/wave/grib2_gfswave.glo_30m.f132 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f132 rename to parm/wave/grib2_gfswave.glo_30m.f132 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f138 b/parm/wave/grib2_gfswave.glo_30m.f138 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f138 rename to parm/wave/grib2_gfswave.glo_30m.f138 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f144 b/parm/wave/grib2_gfswave.glo_30m.f144 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f144 rename to parm/wave/grib2_gfswave.glo_30m.f144 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f150 b/parm/wave/grib2_gfswave.glo_30m.f150 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f150 rename to parm/wave/grib2_gfswave.glo_30m.f150 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f156 b/parm/wave/grib2_gfswave.glo_30m.f156 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f156 rename to parm/wave/grib2_gfswave.glo_30m.f156 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f162 b/parm/wave/grib2_gfswave.glo_30m.f162 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f162 rename to parm/wave/grib2_gfswave.glo_30m.f162 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f168 b/parm/wave/grib2_gfswave.glo_30m.f168 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f168 rename to parm/wave/grib2_gfswave.glo_30m.f168 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f174 b/parm/wave/grib2_gfswave.glo_30m.f174 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f174 rename to parm/wave/grib2_gfswave.glo_30m.f174 diff --git a/parm/parm_wave/grib2_gfswave.glo_30m.f180 b/parm/wave/grib2_gfswave.glo_30m.f180 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.glo_30m.f180 rename to parm/wave/grib2_gfswave.glo_30m.f180 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f000 b/parm/wave/grib2_gfswave.wc_10m.f000 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f000 rename to parm/wave/grib2_gfswave.wc_10m.f000 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f003 b/parm/wave/grib2_gfswave.wc_10m.f003 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f003 rename to parm/wave/grib2_gfswave.wc_10m.f003 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f006 b/parm/wave/grib2_gfswave.wc_10m.f006 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f006 rename to parm/wave/grib2_gfswave.wc_10m.f006 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f009 b/parm/wave/grib2_gfswave.wc_10m.f009 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f009 rename to parm/wave/grib2_gfswave.wc_10m.f009 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f012 b/parm/wave/grib2_gfswave.wc_10m.f012 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f012 rename to parm/wave/grib2_gfswave.wc_10m.f012 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f015 b/parm/wave/grib2_gfswave.wc_10m.f015 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f015 rename to parm/wave/grib2_gfswave.wc_10m.f015 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f018 b/parm/wave/grib2_gfswave.wc_10m.f018 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f018 rename to parm/wave/grib2_gfswave.wc_10m.f018 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f021 b/parm/wave/grib2_gfswave.wc_10m.f021 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f021 rename to parm/wave/grib2_gfswave.wc_10m.f021 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f024 b/parm/wave/grib2_gfswave.wc_10m.f024 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f024 rename to parm/wave/grib2_gfswave.wc_10m.f024 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f027 b/parm/wave/grib2_gfswave.wc_10m.f027 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f027 rename to parm/wave/grib2_gfswave.wc_10m.f027 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f030 b/parm/wave/grib2_gfswave.wc_10m.f030 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f030 rename to parm/wave/grib2_gfswave.wc_10m.f030 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f033 b/parm/wave/grib2_gfswave.wc_10m.f033 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f033 rename to parm/wave/grib2_gfswave.wc_10m.f033 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f036 b/parm/wave/grib2_gfswave.wc_10m.f036 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f036 rename to parm/wave/grib2_gfswave.wc_10m.f036 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f039 b/parm/wave/grib2_gfswave.wc_10m.f039 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f039 rename to parm/wave/grib2_gfswave.wc_10m.f039 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f042 b/parm/wave/grib2_gfswave.wc_10m.f042 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f042 rename to parm/wave/grib2_gfswave.wc_10m.f042 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f045 b/parm/wave/grib2_gfswave.wc_10m.f045 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f045 rename to parm/wave/grib2_gfswave.wc_10m.f045 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f048 b/parm/wave/grib2_gfswave.wc_10m.f048 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f048 rename to parm/wave/grib2_gfswave.wc_10m.f048 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f051 b/parm/wave/grib2_gfswave.wc_10m.f051 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f051 rename to parm/wave/grib2_gfswave.wc_10m.f051 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f054 b/parm/wave/grib2_gfswave.wc_10m.f054 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f054 rename to parm/wave/grib2_gfswave.wc_10m.f054 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f057 b/parm/wave/grib2_gfswave.wc_10m.f057 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f057 rename to parm/wave/grib2_gfswave.wc_10m.f057 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f060 b/parm/wave/grib2_gfswave.wc_10m.f060 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f060 rename to parm/wave/grib2_gfswave.wc_10m.f060 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f063 b/parm/wave/grib2_gfswave.wc_10m.f063 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f063 rename to parm/wave/grib2_gfswave.wc_10m.f063 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f066 b/parm/wave/grib2_gfswave.wc_10m.f066 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f066 rename to parm/wave/grib2_gfswave.wc_10m.f066 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f069 b/parm/wave/grib2_gfswave.wc_10m.f069 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f069 rename to parm/wave/grib2_gfswave.wc_10m.f069 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f072 b/parm/wave/grib2_gfswave.wc_10m.f072 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f072 rename to parm/wave/grib2_gfswave.wc_10m.f072 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f078 b/parm/wave/grib2_gfswave.wc_10m.f078 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f078 rename to parm/wave/grib2_gfswave.wc_10m.f078 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f084 b/parm/wave/grib2_gfswave.wc_10m.f084 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f084 rename to parm/wave/grib2_gfswave.wc_10m.f084 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f090 b/parm/wave/grib2_gfswave.wc_10m.f090 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f090 rename to parm/wave/grib2_gfswave.wc_10m.f090 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f096 b/parm/wave/grib2_gfswave.wc_10m.f096 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f096 rename to parm/wave/grib2_gfswave.wc_10m.f096 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f102 b/parm/wave/grib2_gfswave.wc_10m.f102 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f102 rename to parm/wave/grib2_gfswave.wc_10m.f102 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f108 b/parm/wave/grib2_gfswave.wc_10m.f108 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f108 rename to parm/wave/grib2_gfswave.wc_10m.f108 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f114 b/parm/wave/grib2_gfswave.wc_10m.f114 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f114 rename to parm/wave/grib2_gfswave.wc_10m.f114 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f120 b/parm/wave/grib2_gfswave.wc_10m.f120 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f120 rename to parm/wave/grib2_gfswave.wc_10m.f120 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f126 b/parm/wave/grib2_gfswave.wc_10m.f126 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f126 rename to parm/wave/grib2_gfswave.wc_10m.f126 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f132 b/parm/wave/grib2_gfswave.wc_10m.f132 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f132 rename to parm/wave/grib2_gfswave.wc_10m.f132 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f138 b/parm/wave/grib2_gfswave.wc_10m.f138 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f138 rename to parm/wave/grib2_gfswave.wc_10m.f138 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f144 b/parm/wave/grib2_gfswave.wc_10m.f144 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f144 rename to parm/wave/grib2_gfswave.wc_10m.f144 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f150 b/parm/wave/grib2_gfswave.wc_10m.f150 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f150 rename to parm/wave/grib2_gfswave.wc_10m.f150 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f156 b/parm/wave/grib2_gfswave.wc_10m.f156 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f156 rename to parm/wave/grib2_gfswave.wc_10m.f156 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f162 b/parm/wave/grib2_gfswave.wc_10m.f162 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f162 rename to parm/wave/grib2_gfswave.wc_10m.f162 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f168 b/parm/wave/grib2_gfswave.wc_10m.f168 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f168 rename to parm/wave/grib2_gfswave.wc_10m.f168 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f174 b/parm/wave/grib2_gfswave.wc_10m.f174 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f174 rename to parm/wave/grib2_gfswave.wc_10m.f174 diff --git a/parm/parm_wave/grib2_gfswave.wc_10m.f180 b/parm/wave/grib2_gfswave.wc_10m.f180 old mode 100755 new mode 100644 similarity index 100% rename from parm/parm_wave/grib2_gfswave.wc_10m.f180 rename to parm/wave/grib2_gfswave.wc_10m.f180 diff --git a/parm/wave/reg025_interp.inp.tmpl b/parm/wave/reg025_interp.inp.tmpl new file mode 100755 index 0000000000..c65289bbae --- /dev/null +++ b/parm/wave/reg025_interp.inp.tmpl @@ -0,0 +1,12 @@ +$ Input file for interpolation of GLO30m_ext Grid +$------------------------------------------------ +$ Start Time DT NSteps + TIME DT NSTEPS +$ Total number of grids + 2 +$ Grid extensions + 'mx025' + 'reg025' +$ + 0 +$ diff --git a/parm/wave/wave_gefs.buoys b/parm/wave/wave_gefs.buoys new file mode 100644 index 0000000000..6a56303b87 --- /dev/null +++ b/parm/wave/wave_gefs.buoys @@ -0,0 +1,300 @@ +$ +$ Global output point data file for global wave ensembles +$ +$ Retained only deep water buoys or so from general buoy file +$ taken from multi_1/2 +$ +$ Key to data in file: +$ +$ LON Longitude, east positive +$ LAT Latitude +$ NAME Output point name C*10, no blanks in name allowed +$ AH Anemometer height, dummy value for none-data points +$ TYPE Buoy type indicator, used for plotting and postprocessing +$ DAT Data point +$ XDT Former data point +$ BPT Boundary data for external models. +$ VBY 'Virtual buoy' +$ SOURCE Source of data point +$ ENCAN Environment Canada +$ GOMOOS Gulf of Maine OOS +$ IDT Irish Department of Transportation +$ METFR Meteo France +$ NCEP Boundary and other data points +$ NDBC National Data Buoy Center +$ PRIV Private and incidental data sources +$ SCRIPPS Scripps +$ UKMO UK Met Office +$ PDES Puertos del Estados +$ SHOM Service Hydrographique et Oceanographique de la Marine +$ OCNOR Fugro Oceanor +$ WHOI Woods Hole Oceanographic Institute +$ SKOREA South Korea +$ MVEW Ministerie van Verkeer en Waterstaat +$ CORMP Coastal Ocean Research and Monitoring Program +$ DIMAR Direccion General Maritima (Columbia) +$ BP British Petroleum +$ SCALE Scale indicator for plotting of locations on map +$ Point will only be plotted if SCALE =< DX in our +$ GrADS scripts, DX is width of plot in logitude +$ +$ DEptH Depth in meters +$ +$ Notes: +$ +$ - The '$' at the first position identifies comments for WAVEWATCH III +$ input. +$ - The first three data columns are used by the forecats code, the other +$ are used by postprocessing scripts. +$ +$ LON LAT NAME AH TYPE SOURCE SCALE DEPTH +$ --------------------------------------------------------------- + -85.078 -19.425 '32012 ' -1 DAT WHOI 360 4534 + -90.000 -55.000 '34002 ' 6.2 DAT OCOBSI 360 4800 + -72.522 34.502 '41001 ' 4 DAT NDBC 360 4556 + -74.930 31.892 '41002 ' 4 DAT NDBC 360 3920 + -79.099 32.501 '41004 ' 4 DAT NDBC 360 39 + -80.868 31.400 '41008 ' 5 DAT NDBC 360 14.9 + -80.185 28.508 '41009 ' 4 DAT NDBC 360 42 + -78.485 28.878 '41010 ' 4 DAT NDBC 360 890 + -77.743 33.436 '41013 ' 4 DAT NDBC 360 23.5 + -78.477 33.837 '41024 ' 2.95 DAT CORMP 360 10 + -75.363 35.025 '41025 ' 4 DAT NDBC 360 59.4 + -79.624 32.803 '41029 ' 2.95 DAT CORMP 360 10 + -80.406 32.279 '41033 ' 2.95 DAT CORMP 360 10 + -77.362 33.988 '41037 ' 2.95 DAT CORMP 360 30 + -77.715 34.141 '41038 ' 2.95 DAT CORMP 360 18 + -53.045 14.554 '41040 ' 4 DAT NDBC 360 5112 + -46.093 14.311 '41041 ' 4 DAT NDBC 360 3595 + -64.830 21.124 '41043 ' 4 DAT NDBC 360 5271 + -58.630 21.582 '41044 ' 4 DAT NDBC 360 5419 + -68.384 23.822 '41046 ' 4 DAT NDBC 360 5549 + -71.494 27.514 '41047 ' 4 DAT NDBC 360 5321 + -69.585 31.838 '41048 ' 4 DAT NDBC 360 5340 + -62.938 27.490 '41049 ' 4 DAT NDBC 360 5459 + -65.004 18.257 '41051 ' 4 DAT CARICOOS 360 32 + -64.763 18.249 '41052 ' 4 DAT CARICOOS 360 44 + -65.464 18.261 '41056 ' 4 DAT CARICOOS 360 30 + -65.157 18.476 '41058 ' 4 DAT CARICOOS 360 40 + -51.017 14.824 '41060 ' -1 DAT WHOI 360 5021 + -75.095 35.778 '41062 ' 3.5 DAT UNC 360 36 + -75.941 34.782 '41063 ' 3.5 DAT UNC 360 30 + -76.949 34.207 '41064 ' 2.95 DAT CORMP 360 30 + -78.015 33.721 '41108 ' -1 DAT SIO 360 12.8 + -77.717 34.141 '41110 ' -1 DAT CORMP 360 17 + -81.292 30.709 '41112 ' -1 DAT SIO 360 15.54 + -80.534 28.400 '41113 ' -1 DAT SIO 360 9.8 + -80.188 28.523 '41116 ' -1 DAT SIO 360 41 + -81.080 30.000 '41117 ' -1 DAT USACE 360 24.4 + -80.590 28.609 '41118 ' -1 DAT SIO 360 7.3 + -78.483 33.842 '41119 ' -1 DAT CORMP 360 13 + -76.946 34.213 '41159 ' -1 DAT CORMP 360 30.5 + -89.650 25.961 '42001 ' 3.6 DAT NDBC 360 3334 + -93.758 26.091 '42002 ' 5 DAT NDBC 360 3125.1 + -85.615 25.925 '42003 ' 4 DAT NDBC 360 3265 + -87.551 30.064 '42012 ' 4 DAT NDBC 360 25.9 + -95.350 27.906 '42019 ' 5 DAT NDBC 360 82.2 + -96.693 26.968 '42020 ' 4 DAT NDBC 360 84.1 + -83.741 27.505 '42022 ' 3.1 DAT COMPS 360 50 + -83.086 26.010 '42023 ' 3.1 DAT COMPS 360 50 + -83.475 25.171 '42026 ' 3.2 DAT COMPS 360 70 + -94.413 29.232 '42035 ' 4 DAT NDBC 360 16.2 + -84.516 28.501 '42036 ' 4 DAT NDBC 360 49.7 + -86.008 28.788 '42039 ' 4 DAT NDBC 360 270 + -88.226 29.208 '42040 ' 4 DAT NDBC 360 183 + -94.899 28.982 '42043 ' 4 DAT TAMUNI 360 19 + -96.500 26.217 '42045 ' 4 DAT TAMUNI 360 62 + -94.037 27.890 '42046 ' 4 DAT TAMUNI 360 105 + -93.597 27.897 '42047 ' 4 DAT TAMUNI 360 89 + -93.941 22.124 '42055 ' 4 DAT NDBC 360 3624 + -84.946 19.812 '42056 ' 4 DAT NDBC 360 4565 + -81.422 16.908 '42057 ' 4 DAT NDBC 360 377 + -74.560 14.775 '42058 ' 4 DAT NDBC 360 4150 + -67.483 15.252 '42059 ' 4 DAT NDBC 360 4784 + -63.354 16.413 '42060 ' 4 DAT NDBC 360 1507 + -81.251 24.500 '42078 ' -1 DAT CDIP 360 170 + -81.242 24.535 '42079 ' -1 DAT CDIP 360 99 + -66.532 17.869 '42085 ' 4 DAT CARICOOS 360 18.9 + -60.848 11.185 '42087 ' 3.35 DAT ICON 360 1266 + -60.521 11.301 '42088 ' 3.35 DAT ICON 360 1266 + -80.061 19.699 '42089 ' 3.35 DAT ICON 360 5726 + -69.580 18.432 '42090 ' 3.35 DAT ICON 360 1188 + -81.967 24.407 '42095 ' -1 DAT USACE 360 100 + -83.650 25.700 '42097 ' -1 DAT USACE 360 81 + -84.275 27.345 '42099 ' -1 DAT SIO 360 93.9 + -90.459 26.689 '42360 ' 3 DAT MURPHY 360 2539.9 + -92.490 27.550 '42361 ' 122 DAT SHELL 360 871.7 + -90.648 27.795 '42362 ' 122 DAT ENVEN 360 910 + -89.220 28.160 '42363 ' 122 DAT SHELL 360 894 + -88.090 29.060 '42364 ' 122 DAT SHELL 360 980.2 + -90.283 27.207 '42369 ' 60.4 DAT BP 360 1371.9 + -88.289 28.521 '42375 ' 61 DAT BP 360 1920.2 + -94.898 26.129 '42390 ' -1 DAT SHELL 360 2382.6 + -90.027 27.196 '42392 ' -1 DAT BP 360 2156.16 + -89.240 28.157 '42394 ' 100 DAT SHELL 360 923.5 + -90.792 26.404 '42395 ' 3 DAT SHELL 360 2941.9 + -125.032 10.051 '43010 ' -1 DAT WHOI 360 4769 + -69.128 43.201 '44005 ' 5 DAT NDBC 360 180.7 + -70.141 43.525 '44007 ' 5 DAT NDBC 360 26.5 + -69.248 40.504 '44008 ' 4 DAT NDBC 360 74.7 + -74.702 38.457 '44009 ' 5 DAT NDBC 360 30 + -66.588 41.070 '44011 ' 4 DAT NDBC 360 88.4 + -70.651 42.346 '44013 ' 5 DAT NDBC 360 64 + -74.840 36.606 '44014 ' 5 DAT NDBC 360 47 + -72.049 40.693 '44017 ' 5 DAT NDBC 360 48 + -70.143 42.206 '44018 ' 5 DAT NDBC 360 41.5 + -70.279 41.493 '44020 ' 4 DAT NDBC 360 14.3 + -73.728 40.883 '44022 ' 3.5 DAT UCT 360 22.5 + -65.912 42.327 '44024 ' 4 DAT NRCOOS 360 225 + -73.164 40.251 '44025 ' 5 DAT NDBC 360 36.3 + -67.300 44.283 '44027 ' 5 DAT NDBC 360 185.3 + -70.566 42.523 '44029 ' 4 DAT NRCOOS 360 65 + -70.426 43.179 '44030 ' 4 DAT NRCOOS 360 62 + -69.355 43.715 '44032 ' 4 DAT NRCOOS 360 100 + -68.996 44.055 '44033 ' 4 DAT NRCOOS 360 110 + -68.112 44.103 '44034 ' 4 DAT NRCOOS 360 100 + -67.876 43.497 '44037 ' 4 DAT NRCOOS 360 285 + -73.580 40.956 '44040 ' 3.5 DAT UCT 360 18.3 + -75.715 36.199 '44056 ' -1 DAT USACE 360 17.4 + -73.703 40.369 '44065 ' 4 DAT NDBC 360 25 + -72.644 39.618 '44066 ' 4 DAT NDBC 360 78 + -73.087 40.699 '44069 ' 3 DAT SBROOKU 360 46 + -70.540 43.020 '44073 ' 2.6 DAT UNH 360 131 + -75.421 36.001 '44086 ' -1 DAT SIO 360 21 + -74.838 36.612 '44088 ' -1 DAT SIO 360 47 + -75.334 37.757 '44089 ' -1 DAT USACE 360 16.9 + -70.329 41.840 '44090 ' -1 DAT USGS 360 26 + -73.769 39.778 '44091 ' -1 DAT USACE 360 25.6 + -75.492 36.872 '44093 ' -1 DAT SIO 360 26.82 + -75.330 35.750 '44095 ' -1 DAT SIO 360 18.3 + -75.809 37.023 '44096 ' -1 DAT SIO 360 11.9 + -71.127 40.969 '44097 ' -1 DAT SIO 360 48.16 + -70.168 42.798 '44098 ' -1 DAT SIO 360 76.5 + -75.720 36.914 '44099 ' -1 DAT SIO 360 18.3 + -75.594 36.260 '44100 ' -1 DAT SIO 360 25.9 + -62.000 42.260 '44137 ' 5 DAT ENCAN 360 4000 + -57.100 44.240 '44139 ' 5 DAT ENCAN 360 1500 + -64.020 42.500 '44150 ' 5 DAT ENCAN 360 1300 + -63.400 44.500 '44258 ' 5 DAT ENCAN 360 58 + -147.949 56.232 '46001 ' 5 DAT NDBC 360 4054 + -130.537 42.612 '46002 ' 4 DAT NDBC 360 3413 + -136.100 50.930 '46004 ' 5 DAT ENCAN 360 3600 + -131.079 46.134 '46005 ' 4 DAT NDBC 360 2852 + -137.397 40.782 '46006 ' 4 DAT NDBC 360 4378 + -121.019 34.956 '46011 ' 5 DAT NDBC 360 464.8 + -160.000 57.700 '46021 ' -1 DAT NDBC 360 59 + -120.967 34.714 '46023 ' 10 DAT NDBC 360 384.1 + -119.200 33.000 '46024 ' -1 DAT NDBC 360 1213 + -119.053 33.763 '46025 ' 4 DAT NDBC 360 888 + -121.857 35.703 '46028 ' 5 DAT NDBC 360 1048 + -177.708 57.018 '46035 ' 5 DAT NDBC 360 3687 + -122.398 36.785 '46042 ' 5 DAT NDBC 360 1645.9 + -119.506 32.404 '46047 ' 4 DAT NDBC 360 1394 + -120.477 34.265 '46054 ' 4 DAT NDBC 360 469.4 + -129.951 38.094 '46059 ' 4 DAT NDBC 360 4628 + -146.805 60.584 '46060 ' 5 DAT NDBC 360 445 + -154.987 52.765 '46066 ' 5 DAT NDBC 360 4460 + -120.213 33.677 '46069 ' 4 DAT NDBC 360 977.8 + 175.153 55.082 '46070 ' 5 DAT NDBC 360 3835 + 179.012 51.125 '46071 ' 5 DAT NDBC 360 1681 + -172.088 51.672 '46072 ' 5 DAT NDBC 360 3572 + -172.001 55.031 '46073 ' 5 DAT NDBC 360 3051.5 + -160.817 53.983 '46075 ' 5 DAT NDBC 360 2392.7 + -147.990 59.502 '46076 ' 5 DAT NDBC 360 195.1 + -152.582 55.556 '46078 ' 5 DAT NDBC 360 5380 + -150.042 57.947 '46080 ' 5 DAT NDBC 360 254.5 + -143.372 59.681 '46082 ' 5 DAT NDBC 360 300 + -137.997 58.300 '46083 ' 5 DAT NDBC 360 136 + -136.102 56.622 '46084 ' 5 DAT NDBC 360 1158 + -142.882 55.883 '46085 ' 4 DAT NDBC 360 3721 + -118.052 32.499 '46086 ' 4 DAT NDBC 360 1844.7 + -125.771 45.925 '46089 ' 5 DAT NDBC 360 2293.3 + -122.029 36.751 '46092 ' 4 DAT MBARI 360 1000 + -122.351 36.723 '46114 ' -1 DAT SIO 360 1463 + -131.220 51.830 '46147 ' 5 DAT ENCAN 360 2000 + -131.100 53.620 '46183 ' 5 DAT ENCAN 360 65 + -138.850 53.910 '46184 ' 5 DAT ENCAN 360 3200 + -129.790 52.420 '46185 ' 5 DAT ENCAN 360 230 + -128.770 51.380 '46204 ' -1 DAT ENCAN 360 222 + -134.320 54.190 '46205 ' 5 DAT ENCAN 360 2675 + -126.000 48.840 '46206 ' 5 DAT ENCAN 360 72 + -129.920 50.870 '46207 ' 5 DAT ENCAN 360 2125 + -132.690 52.520 '46208 ' 5 DAT ENCAN 360 2950 + -123.472 37.950 '46214 ' -1 DAT SIO 360 550 + -120.783 34.454 '46218 ' -1 DAT SIO 360 548.6 + -119.882 33.225 '46219 ' -1 DAT SIO 360 274.3 + -118.634 33.855 '46221 ' -1 DAT SIO 360 370 + -118.317 33.618 '46222 ' -1 DAT SIO 360 457 + -117.391 32.933 '46225 ' -1 DAT SIO 360 549 + -117.370 32.747 '46231 ' -1 DAT SIO 360 201.17 + -117.421 32.530 '46232 ' -1 DAT SIO 360 1143 + -117.169 32.570 '46235 ' -1 DAT SIO 360 21 + -122.096 36.343 '46239 ' -1 DAT SIO 360 369 + -145.200 50.033 '46246 ' -1 DAT SIO 360 4252 + -119.559 33.761 '46251 ' -1 DAT SIO 360 1920 + -118.181 33.576 '46253 ' -1 DAT SIO 360 66 + -117.267 32.868 '46254 ' -1 DAT SIO 360 38.71 + -119.651 33.400 '46255 ' -1 DAT SIO 360 105 + -118.201 33.700 '46256 ' -1 DAT SIO 360 23.25 + -120.766 34.439 '46257 ' -1 DAT SIO 360 576.07 + -117.501 32.752 '46258 ' -1 DAT SIO 360 588.6 + -121.497 34.767 '46259 ' -1 DAT USACE 360 646.8 + -119.004 33.704 '46262 ' -1 DAT SIO 360 905 + -151.695 57.479 '46264 ' -1 DAT SIO 360 86 + -165.475 64.473 '46265 ' -1 DAT SIO 360 18.2 + -153.781 23.535 '51000 ' 5 DAT NDBC 360 4811 + -162.000 24.453 '51001 ' 4 DAT NDBC 360 4895 + -157.742 17.043 '51002 ' 4 DAT NDBC 360 4948 + -160.662 19.172 '51003 ' 4 DAT NDBC 360 4943.3 + -152.364 17.604 '51004 ' 4 DAT NDBC 360 4998 + -162.075 24.361 '51101 ' 4 DAT NDBC 360 4849 + -158.117 21.671 '51201 ' -1 DAT SIO 360 200 + -157.678 21.415 '51202 ' -1 DAT SIO 360 89 + -157.010 20.788 '51203 ' -1 DAT SIO 360 201 + -158.124 21.281 '51204 ' -1 DAT SIO 360 300 + -156.425 21.018 '51205 ' -1 DAT SIO 360 200 + -154.970 19.780 '51206 ' -1 DAT SIO 360 345 + -157.752 21.477 '51207 ' -1 DAT SIO 360 81 + -159.574 22.285 '51208 ' -1 DAT SIO 360 200 + -170.493 -14.264 '51209 ' -1 DAT SIO 360 82 + -157.756 21.477 '51210 ' -1 DAT SIO 360 80 + -157.959 21.297 '51211 ' -1 DAT SIO 360 35 + -158.149 21.323 '51212 ' -1 DAT SIO 360 280 + -157.003 20.750 '51213 ' -1 DAT SIO 360 235 + 144.788 13.354 '52200 ' -1 DAT SIO 360 200 + 171.392 7.083 '52201 ' -1 DAT SIO 360 540 + 144.812 13.684 '52202 ' -1 DAT SIO 360 510 + 145.662 15.268 '52211 ' -1 DAT SIO 360 487.68 + 134.667 7.630 '52212 ' -1 DAT SIO 360 97 + -5.000 45.230 '62001 ' 3 DAT UKMO 360 4556 + -12.430 48.720 '62029 ' 3 DAT UKMO 360 3575 + -4.400 50.000 '62050 ' -1 DAT UKMO 360 53 + -2.900 49.900 '62103 ' 14 DAT UKMO 360 18 + -12.570 55.420 '62105 ' 3 DAT UKMO 360 2899 + -6.100 50.102 '62107 ' 14 DAT UKMO 360 61 + 0.000 58.300 '62114 ' -1 DAT PRIVATE 360 142 + 0.700 54.000 '62127 ' -1 DAT PRIVATE 360 39 + 1.700 53.400 '62144 ' -1 DAT PRIVATE 360 16 + 2.800 53.102 '62145 ' -1 DAT PRIVATE 360 26 + 2.100 57.200 '62146 ' -1 DAT PRIVATE 360 98 + 1.500 53.600 '62148 ' -1 DAT PRIVATE 360 16 + 1.100 53.700 '62149 ' -1 DAT PRIVATE 360 16 + -8.470 47.550 '62163 ' 3 DAT UKMO 360 4000 + 1.100 54.000 '62165 ' -1 DAT PRIVATE 360 41 + 0.000 50.400 '62305 ' 14 DAT UKMO 360 39 + 1.500 59.500 '63110 ' -1 DAT PRIVATE 360 117 + 1.000 61.100 '63112 ' -1 DAT PRIVATE 360 156 + 1.708 61.000 '63113 ' -1 DAT PRIVATE 360 156 + 1.300 61.600 '63115 ' -1 DAT PRIVATE 360 156 + 1.100 61.400 '63117 ' -1 DAT PRIVATE 360 156 + -11.420 59.070 '64045 ' 3 DAT UKMO 360 1935 + -4.167 60.483 '64046 ' 3 DAT UKMO 360 230 +$ +$ --------------------------------------------------------------- +$ +$ End of list +$ +$ --------------------------------------------------------------- +$ + 0.00 0.00 'STOPSTRING' 999. XXX NCEP 0 +$ diff --git a/parm/wave/wave_gfs.buoys b/parm/wave/wave_gfs.buoys new file mode 120000 index 0000000000..6f47adefac --- /dev/null +++ b/parm/wave/wave_gfs.buoys @@ -0,0 +1 @@ +wave_gfs.buoys.full \ No newline at end of file diff --git a/parm/wave/wave_gfs.buoys.dat b/parm/wave/wave_gfs.buoys.dat new file mode 100755 index 0000000000..0d2f4ab11e --- /dev/null +++ b/parm/wave/wave_gfs.buoys.dat @@ -0,0 +1,614 @@ +$ +$ Global output point data file for multi-grid wave model +$ +$ Key to data in file: +$ +$ LON Longitude, east positive +$ LAT Latitude +$ NAME Output point name C*10, no blanks in name allowed +$ AH Anemometer height, dummy value for none-data points +$ TYPE Buoy type indicator, used for plotting and postprocessing +$ DAT Data point +$ NBY 'Non-NWS Virtual buoy' +$ SOURCE Source of data point +$ ENCAN Environment Canada +$ GOMOOS Gulf of Maine OOS +$ IDT Irish Department of Transportation +$ METFR Meteo France +$ NCEP Boundary and other data points +$ NDBC National Data Buoy Center +$ PRIV Private and incidental data sources +$ SCRIPPS Scripps +$ UKMO UK Met Office +$ PDES Puertos del Estados +$ SHOM Service Hydrographique et Oceanographique de la Marine +$ OCNOR Fugro Oceanor +$ WHOI Woods Hole Oceanographic Institute +$ SKOREA South Korea +$ MVEW Ministerie van Verkeer en Waterstaat +$ CORMP Coastal Ocean Research and Monitoring Program +$ DIMAR Direccion General Maritima (Columbia) +$ BP British Petroleum +$ SCALE Scale indicator for plotting of locations on map +$ Point will only be plotted if SCALE =< DX in our +$ GrADS scripts, DX is width of plot in logitude +$ +$ Notes: +$ +$ - The '$' at the first position identifies comments for WAVEWATCH III +$ input. +$ - The first three data columns are used by the forecats code, the other +$ are used by postprocessing scripts. +$ +$ LON LAT NAME AH TYPE SOURCE SCALE +$ --------------------------------------------------------- +$ +$ AWIPS Data section (most actual observational sites) +$ AWIPS code indicated prior and after each AWIPS section +$ +$AGGA48 +$ Gulf of Alaska (AG) Spectral data (4) near S/SW Alaska Anchorage (8) + -148.02 56.31 '46001 ' 5.0 DAT NDBC 360 + -154.98 52.70 '46066 ' 5.0 DAT NDBC 360 + -146.83 60.22 '46061 ' 5.0 DAT NDBC 90 + -160.81 53.93 '46075 ' 5.0 DAT NDBC 360 + -148.00 59.50 '46076 ' 5.0 DAT NDBC 360 + -152.45 56.05 '46078 ' 5.0 DAT NDBC 360 + -152.09 59.76 '46106 ' 999 DAT NDBC 75 + -150.00 58.00 '46080 ' 5.0 DAT NDBC 360 + -151.829 59.597 '46108 ' 5.0 DAT NDBC 45 + -160.000 57.700 '46021 ' 999.0 DAT NDBC 45 + -146.805 60.584 '46060 ' 5.0 DAT NDBC 45 + -154.175 57.910 '46077 ' 5.0 DAT NDBC 45 + -152.230 59.050 '46079 ' 4.9 DAT NDBC 45 + -152.233 59.049 '46105 ' 2.0 DAT NDBC 45 + -147.992 59.925 '46107 ' 2.0 DAT NDBC 45 + -165.475 64.473 '46265 ' 2.0 DAT NDBC 45 +$AGGA48 +$ +$AGGA47 +$ Gulf of Alaska (AG) Spectral data (4) near Alaska Panhandle and NBC (7) + -136.10 50.93 '46004 ' 5.0 DAT ENCAN 360 + -138.85 53.91 '46184 ' 5.0 DAT ENCAN 360 + -143.42 59.69 '46082 ' 5.0 DAT NDBC 360 + -138.00 58.25 '46083 ' 5.0 DAT NDBC 360 + -136.16 56.59 '46084 ' 5.0 DAT NDBC 360 + -142.56 56.85 '46085 ' 5.0 DAT NDBC 360 + -134.28 54.16 '46205 ' 5.0 DAT ENCAN 45 + -132.45 54.38 '46145 ' 5.0 DAT ENCAN 45 + -131.22 51.83 '46147 ' 5.0 DAT ENCAN 90 + -131.10 53.62 '46183 ' 5.0 DAT ENCAN 45 + -129.81 52.42 '46185 ' 5.0 DAT ENCAN 45 + -128.75 51.37 '46204 ' 5.0 DAT ENCAN 45 + -129.92 50.87 '46207 ' 5.0 DAT ENCAN 45 + -132.68 52.52 '46208 ' 5.0 DAT ENCAN 45 + -129.795 52.437 '46138 ' 999.0 DAT NDBC 45 +$AGGA47 +$ +$AGPZ46 +$ Eastern Pacific (PZ) spectral data (4) near Pacific states and SBC (6) + -130.27 42.60 '46002 ' 5.0 DAT NDBC 360 + -137.48 40.80 '46006 ' 5.0 DAT NDBC 360 + -130.00 37.98 '46059 ' 5.0 DAT NDBC 360 + -120.87 34.88 '46011 ' 5.0 DAT NDBC 15 + -122.88 37.36 '46012 ' 5.0 DAT NDBC 45 + -123.32 38.23 '46013 ' 5.0 DAT NDBC 25 + -123.97 39.22 '46014 ' 5.0 DAT NDBC 45 + -124.54 40.78 '46022 ' 5.0 DAT NDBC 25 + -120.97 34.71 '46023 ' 10.0 DAT NDBC 45 + -122.82 37.75 '46026 ' 5.0 DAT NDBC 25 + -124.38 41.85 '46027 ' 5.0 DAT NDBC 45 + -124.85 42.75 '46015 ' 5.0 DAT NDBC 45 + -119.08 33.75 '46025 ' 5.0 DAT NDBC 45 + -121.89 35.74 '46028 ' 5.0 DAT NDBC 45 + -124.53 40.42 '46030 ' 5.0 DAT NDBC 15 + -122.42 36.75 '46042 ' 5.0 DAT NDBC 45 + -119.53 32.43 '46047 ' 5.0 DAT NDBC 45 + -124.53 44.62 '46050 ' 5.0 DAT NDBC 45 + -119.85 34.24 '46053 ' 5.0 DAT NDBC 45 + -120.45 34.27 '46054 ' 10.0 DAT NDBC 25 + -121.01 35.10 '46062 ' 5.0 DAT NDBC 45 + -120.70 34.27 '46063 ' 5.0 DAT NDBC 45 + -120.20 33.65 '46069 ' 5.0 DAT NDBC 45 + -118.00 32.50 '46086 ' 5.0 DAT NDBC 45 + -125.77 45.88 '46089 ' 5.0 DAT NDBC 45 + -124.74 40.29 '46213 ' 999. DAT SCRIPPS 25 + -123.465 37.9403 '46214 ' 999. DAT SCRIPPS 45 + -119.80 34.33 '46216 ' 999. DAT SCRIPPS 15 + -119.43 34.17 '46217 ' 999. DAT SCRIPPS 15 + -120.78 34.45 '46218 ' 999. DAT SCRIPPS 25 + -119.88 33.22 '46219 ' 999. DAT SCRIPPS 45 + -118.641 33.8599 '46221 ' 999. DAT SCRIPPS 15 + -118.32 33.62 '46222 ' 999. DAT SCRIPPS 15 + -117.77 33.46 '46223 ' 999. DAT SCRIPPS 15 + -117.47 33.18 '46224 ' 999. DAT SCRIPPS 15 + -117.39 32.93 '46225 ' 999. DAT SCRIPPS 15 + -117.44 32.63 '46227 ' 999. DAT SCRIPPS 15 + -124.55 43.77 '46229 ' 999. DAT SCRIPPS 25 + -117.37 32.75 '46231 ' 999. DAT SCRIPPS 15 + -117.425 32.517 '46232 ' 999. DAT SCRIPPS 15 + -120.86 35.20 '46215 ' 999. DAT SCRIPPS 45 + -121.95 36.76 '46236 ' 999. DAT SCRIPPS 15 + -122.634 37.787 '46237 ' 999. DAT SCRIPPS 15 + -119.47 33.40 '46238 ' 999. DAT SCRIPPS 15 + -122.10 36.34 '46239 ' 999. DAT SCRIPPS 15 + -121.91 36.62 '46240 ' 999. DAT SCRIPPS 15 + -124.13 46.22 '46243 ' 999. DAT SCRIPPS 45 + -124.36 40.89 '46244 ' 999. DAT SCRIPPS 45 + -145.20 50.033 '46246 ' 999. DAT SCRIPPS 45 + -124.644 46.133 '46248 ' 999. DAT SCRIPPS 45 + -119.200 33.000 '46024 ' 10.0 DAT NDBC 45 + -121.899 36.835 '46091 ' 4.0 DAT NDBC 45 + -122.030 36.750 '46092 ' 4.0 DAT NDBC 45 + -122.410 36.690 '46093 ' 4.0 DAT NDBC 45 + -124.300 44.642 '46094 ' 3.0 DAT NDBC 45 + -124.304 44.639 '46097 ' 4.5 DAT NDBC 45 + -124.956 44.381 '46098 ' 4.5 DAT NDBC 45 + -122.33 36.685 '46114 ' 999.0 DAT NDBC 45 + -124.313 40.753 '46212 ' 999.0 DAT NDBC 45 + -117.353 32.848 '46226 ' 999.0 DAT NDBC 45 + -117.320 32.936 '46233 ' 3.0 DAT NDBC 45 + -117.167 32.572 '46235 ' 999.0 DAT NDBC 45 + -117.439 33.220 '46242 ' 999.0 DAT NDBC 45 + -122.833 37.753 '46247 ' 999.0 DAT NDBC 45 + -119.708 33.821 '46249 ' 999.0 DAT NDBC 45 + -119.090 34.034 '46250 ' 999.0 DAT NDBC 45 + -119.564 33.769 '46251 ' 999.0 DAT NDBC 45 + -119.257 33.953 '46252 ' 999.0 DAT NDBC 45 + -118.181 33.576 '46253 ' 999.0 DAT NDBC 45 + -117.267 32.868 '46254 ' 999.0 DAT NDBC 45 + -119.651 33.400 '46255 ' 999.0 DAT NDBC 45 + -118.201 33.700 '46256 ' 999.0 DAT NDBC 45 + -120.766 34.439 '46257 ' 999.0 DAT NDBC 45 + -117.500 32.750 '46258 ' 999.0 DAT NDBC 45 + -121.497 34.767 '46259 ' 999.0 DAT NDBC 45 + -119.004 33.704 '46262 ' 999.0 DAT NDBC 45 +$AGPZ46 +$ +$AGPZ47 +$ Eastern Pacific (PZ) spectral data (4) near Alaska Panhandle and NBC (7) + -131.02 46.05 '46005 ' 5.0 DAT NDBC 360 + -133.94 48.35 '46036 ' 5.0 DAT ENCAN 360 + -127.93 49.74 '46132 ' 5.0 DAT ENCAN 90 + -126.00 48.84 '46206 ' 5.0 DAT ENCAN 45 + -124.51 46.12 '46029 ' 5.0 DAT NDBC 45 + -124.75 47.34 '46041 ' 5.0 DAT NDBC 45 + -124.73 48.49 '46087 ' 5.0 DAT NDBC 45 + -124.24 46.86 '46211 ' 999. DAT SCRIPPS 25 + -123.165 48.334 '46088 ' 5.0 DAT NDBC 45 + -124.127 46.173 '46096 ' 3.0 DAT NDBC 45 + -124.566 46.986 '46099 ' 4.5 DAT NDBC 45 + -124.972 46.851 '46100 ' 4.5 DAT NDBC 45 + -124.950 47.967 '46119 ' 3.7 DAT NDBC 45 + -124.063 46.215 '46127 ' 3.0 DAT NDBC 45 + -126.010 48.844 '46139 ' 999.0 DAT NDBC 45 + -151.700 57.480 '46264 ' 999.0 DAT NDBC 45 +$AGPZ47 +$ +$AGPN48 +$ North Pacific and Behring Sea (PN) spectra (4) near S/SW Alaska Anchorage (8) + -177.58 57.05 '46035 ' 10.0 DAT NDBC 360 + 175.28 55.00 '46070 ' 5.0 DAT NDBC 360 + -172.03 54.94 '46073 ' 10.0 DAT NDBC 360 + 179.05 51.16 '46071 ' 5.0 DAT NDBC 360 + -171.73 52.25 '46072 ' 5.0 DAT NDBC 360 + -168.000 55.883 '46020 ' 999.0 DAT NDBC 360 +$AGPN48 +$ +$AGHW40 +$ Hawaiian waters (HW) spectra (4) in Pacific Ocean and Pacific Isles (0) + -162.21 23.43 '51001 ' 5.0 DAT NDBC 360 + -157.78 17.19 '51002 ' 5.0 DAT NDBC 360 + -160.82 19.22 '51003 ' 5.0 DAT NDBC 360 + -152.48 17.52 '51004 ' 5.0 DAT NDBC 360 + -158.12 21.67 '51201 ' 999. DAT SCRIPPS 11 + -157.68 21.42 '51202 ' 999. DAT SCRIPPS 11 + -154.06 23.55 '51000 ' 5.0 DAT NDBC 11 + -153.90 23.56 '51100 ' 5.0 DAT NDBC 11 + -162.06 24.32 '51101 ' 5.0 DAT NDBC 11 + -157.00 20.79 '51203 ' 999. DAT SCRIPPS 11 + -158.12 21.28 '51204 ' 999. DAT SCRIPPS 11 + -156.42 21.02 '51205 ' 999. DAT SCRIPPS 11 + -154.97 19.78 '51206 ' 999. DAT SCRIPPS 11 + -157.75 21.48 '51207 ' 999. DAT SCRIPPS 11 + -153.87 0.02 '51028 ' 5.0 DAT NDBC 11 + -158.303 21.096 '51200 ' 999.0 DAT NDBC 11 + -159.574 22.285 '51208 ' 999. DAT SCRIPPS 11 + -170.5 -14.273 '51209 ' 999.0 DAT NDBC 360 + -157.756 21.477 '51210 ' 999.0 DAT NDBC 11 + 134.670 7.692 '52212 ' 999.0 DAT NDBC 360 + -157.959 21.297 '51211 ' 999.0 DAT NDBC 360 + -158.150 21.323 '51212 ' 999.0 DAT NDBC 360 + -157.003 20.750 '51213 ' 999.0 DAT NDBC 360 +$AGHW40 +$ +$AGPW40 +$ Western Pacific (PW) spectra (4) in Pacific Ocean and Pacific Isles (0) + 144.79 13.35 '52200 ' 999. DAT SCRIPPS 360 + 126.02 37.23 '22101 ' 999. DAT SKOREA 100 + 125.77 34.80 '22102 ' 999. DAT SKOREA 100 + 127.50 34.00 '22103 ' 999. DAT SKOREA 100 + 128.90 34.77 '22104 ' 999. DAT SKOREA 100 + 130.00 37.53 '22105 ' 999. DAT SKOREA 100 + 171.391 7.038 '52201 ' 999. DAT SCRIPPS 360 + 144.80 13.68 '52202 ' 999. DAT SCRIPPS 360 + 145.66 15.27 '52211 ' 999. DAT SCRIPPS 360 + 133.62 33.19 '21178 ' 999. DAT WMO 360 + 131.11 37.46 '21229 ' 999. DAT WMO 360 + 125.75 36.25 '22108 ' 999. DAT WMO 360 + 126.14 33.79 '22184 ' 999. DAT WMO 360 + 125.43 37.09 '22185 ' 999. DAT WMO 360 + 125.81 35.66 '22186 ' 999. DAT WMO 360 + 127.02 33.13 '22187 ' 999. DAT WMO 360 + 128.23 34.39 '22188 ' 999. DAT WMO 360 + 129.84 35.35 '22189 ' 999. DAT WMO 360 + 129.87 36.91 '22190 ' 999. DAT WMO 360 +$AGPW40 +$ +$AGPS40 +$ South Pacific (PS) in Pacific Ocean and Pacific Isles (0) + 150.18 -37.29 '55020 ' 999. DAT UNKNOWN 50 + 151.07 -23.31 '55033 ' 999. DAT UNKNOWN 50 + 153.63 -27.49 '55035 ' 999. DAT UNKNOWN 50 + 148.19 -38.60 '55039 ' 999. DAT UNKNOWN 50 +$AGPS40 +$ +$AGGX42 +$ Gulf of Mexico (GX) spectra (4) south from NC and Puerto Rico (2) + -89.67 25.90 '42001 ' 10.0 DAT NDBC 360 + -94.42 25.17 '42002 ' 10.0 DAT NDBC 360 + -85.94 26.07 '42003 ' 10.0 DAT NDBC 360 + -88.77 30.09 '42007 ' 5.0 DAT NDBC 90 + -95.36 27.91 '42019 ' 5.0 DAT NDBC 90 + -96.70 26.94 '42020 ' 5.0 DAT NDBC 90 + -94.40 29.22 '42035 ' 5.0 DAT NDBC 90 + -84.52 28.50 '42036 ' 5.0 DAT NDBC 90 + -86.02 28.79 '42039 ' 5.0 DAT NDBC 90 + -88.21 29.18 '42040 ' 5.0 DAT NDBC 90 + -90.46 27.50 '42041 ' 5.0 DAT NDBC 90 + -92.55 27.42 '42038 ' 5.0 DAT NDBC 90 + -94.05 22.01 '42055 ' 10.0 DAT NDBC 360 + -84.275 27.348 '42099 ' 999. DAT SCRIPPS 100 + -87.55 30.06 '42012 ' 5.0 DAT NDBC 90 + -88.49 28.19 '42887 ' 48.2 DAT BP 90 + -82.924 27.173 '42013 ' 3.1 DAT NDBC 90 + -82.220 25.254 '42014 ' 2.8 DAT NDBC 90 + -83.306 28.311 '42021 ' 2.8 DAT NDBC 90 + -83.741 27.504 '42022 ' 3.1 DAT NDBC 90 + -83.086 26.010 '42023 ' 3.1 DAT NDBC 90 + -94.899 28.982 '42043 ' 3.4 DAT NDBC 90 + -97.051 26.191 '42044 ' 3.4 DAT NDBC 90 + -96.500 26.217 '42045 ' 3.4 DAT NDBC 90 + -94.037 27.890 '42046 ' 3.4 DAT NDBC 90 + -93.597 27.896 '42047 ' 3.4 DAT NDBC 90 + -88.647 30.042 '42067 ' 5.0 DAT NDBC 90 + -83.650 25.700 '42097 ' 999.0 DAT NDBC 90 + -82.931 27.589 '42098 ' 999.0 DAT NDBC 90 + -90.471 26.672 '42360 ' 3.0 DAT NDBC 90 + -92.490 27.550 '42361 ' 122.0 DAT NDBC 90 + -90.648 27.795 '42362 ' 122.0 DAT NDBC 90 + -89.220 28.160 '42363 ' 122.0 DAT NDBC 90 + -88.090 29.060 '42364 ' 122.0 DAT NDBC 90 + -89.120 28.200 '42365 ' 122.0 DAT NDBC 90 + -90.283 27.207 '42369 ' 60.4 DAT NDBC 90 + -90.536 27.322 '42370 ' 78.7 DAT NDBC 90 + -88.056 28.866 '42374 ' 61.0 DAT NDBC 90 + -88.289 28.521 '42375 ' 61.0 DAT NDBC 90 + -87.944 29.108 '42376 ' 61.0 DAT NDBC 90 + -94.898 26.129 '42390 ' 61.0 DAT NDBC 90 + -90.027 27.196 '42392 ' 100.0 DAT NDBC 90 + -89.240 28.157 '42394 ' 100.0 DAT NDBC 90 + -90.792 26.404 '42395 ' 3.0 DAT NDBC 90 +$AGGX42 +$ +$AGCA42 +$ Caribbean Sea (CA) spectra (4) south from NC and Puerto Rico (2) + -85.06 19.87 '42056 ' 10.0 DAT NDBC 360 + -81.50 16.83 '42057 ' 10.0 DAT NDBC 360 + -75.06 15.09 '42058 ' 10.0 DAT NDBC 360 + -81.95 24.39 '42080 ' 999. DAT NDBC 45 + -67.50 15.01 '42059 ' 5.0 DAT NDBC 360 + -85.38 -19.62 '32012' 999. DAT WHOI 360 + -63.50 16.50 '42060 ' 5.0 DAT NDBC 360 + -74.681 11.161 '41194 ' 999.0 DAT NDBC 90 + -66.524 17.860 '42085 ' 4.0 DAT NDBC 90 + -80.061 19.699 '42089 ' 3.4 DAT NDBC 90 + -64.763 18.251 '41052 ' 4.0 DAT NDBC 90 + -65.004 18.257 '41051 ' 4.0 DAT NDBC 90 + -65.457 18.260 '41056 ' 4.0 DAT NDBC 90 + -67.280 18.379 '41115 ' 999.0 DAT NDBC 90 + -81.080 30.000 '41117 ' 999.0 DAT NDBC 90 + -81.244 24.535 '42079 ' 999.0 DAT NDBC 90 + -75.042 36.000 '42086 ' 999.0 DAT NDBC 90 + -81.967 24.407 '42095 ' 999.0 DAT NDBC 90 +$AGCA42 +$ +$AGNT42 +$ Western Atlantic (NT) spectra (4) south from NC and Puerto Rico (2) + -72.66 34.68 '41001 ' 5.0 DAT NDBC 360 + -75.36 32.32 '41002 ' 5.0 DAT NDBC 360 + -79.09 32.50 '41004 ' 5.0 DAT NDBC 360 + -80.87 31.40 '41008 ' 5.0 DAT NDBC 360 + -80.17 28.50 '41009 ' 5.0 DAT NDBC 80 + -78.47 28.95 '41010 ' 5.0 DAT NDBC 80 + -80.60 30.00 '41012 ' 5.0 DAT NDBC 80 + -77.74 33.44 '41013 ' 5.0 DAT NDBC 80 + -75.40 35.01 '41025 ' 5.0 DAT NDBC 80 + -77.28 34.48 '41035 ' 5.0 DAT NDBC 80 + -76.95 34.21 '41036 ' 5.0 DAT NDBC 80 + -65.01 20.99 '41043 ' 5.0 DAT NDBC 90 + -70.99 24.00 '41046 ' 5.0 DAT NDBC 90 + -71.49 27.47 '41047 ' 10.0 DAT NDBC 90 + -69.65 31.98 '41048 ' 10.0 DAT NDBC 90 + -81.292 30.709 '41112 ' 999. DAT SCRIPPS 30 + -80.53 28.40 '41113 ' 999. DAT SCRIPPS 30 + -80.22 27.55 '41114 ' 999. DAT SCRIPPS 30 + -74.84 36.61 '44014 ' 5.0 DAT NDBC 90 + -77.36 33.99 '41037 ' 3.0 DAT CORMP 80 + -77.72 34.14 '41038 ' 3.0 DAT CORMP 80 + -63.00 27.50 '41049 ' 5.0 DAT NDBC 90 + -58.69 21.65 '41044 ' 5.0 DAT NDBC 90 + -77.30 34.48 '41109 ' 3.0 DAT CORMP 80 + -77.71 34.14 '41110 ' 3.0 DAT CORMP 80 + -67.28 18.38 '41111 ' 3.0 DAT CORMP 80 + -66.099 18.474 '41053 ' 5.0 DAT NDBC 80 + -65.157 18.476 '41058 ' 5.0 DAT NDBC 80 + -78.484 33.837 '41024 ' 3.0 DAT NDBC 80 + -78.137 33.302 '41027 ' 3.0 DAT NDBC 80 + -79.624 32.803 '41029 ' 3.0 DAT NDBC 80 + -79.340 32.520 '41030 ' 3.0 DAT NDBC 80 + -80.410 32.279 '41033 ' 3.0 DAT NDBC 80 + -38.000 24.581 '41061 ' 2.7 DAT NDBC 80 + -75.095 35.778 '41062 ' 3.5 DAT NDBC 80 + -75.941 34.782 '41063 ' 3.5 DAT NDBC 80 + -76.949 34.207 '41064 ' 3.0 DAT NDBC 80 + -78.015 33.721 '41108 ' 999.0 DAT NDBC 80 + -76.948 34.210 '41159 ' 999.0 DAT NDBC 80 + -75.714 36.200 '44056 ' 999.0 DAT NDBC 80 +$AGNT42 +$ +$AGNT41 +$ Western Atlantic (NT) spectra (4) NE states north of VA (1) + -53.62 44.26 '44138 ' 5.0 DAT ENCAN 360 + -66.58 41.11 '44011 ' 5.0 DAT NDBC 360 + -58.00 43.00 '44141 ' 5.0 DAT ENCAN 360 + -64.02 42.50 '44142 ' 5.0 DAT ENCAN 360 + -48.01 46.77 'WRB07 ' 10.0 DAT PRIV 360 + -62.00 42.26 '44137 ' 5.0 DAT ENCAN 360 + -57.08 44.26 '44139 ' 5.0 DAT ENCAN 360 + -51.74 43.75 '44140 ' 5.0 DAT ENCAN 360 + -64.01 42.50 '44150 ' 5.0 DAT ENCAN 360 + -70.43 38.48 '44004 ' 5.0 DAT NDBC 90 + -69.16 43.19 '44005 ' 5.0 DAT NDBC 90 + -69.43 40.50 '44008 ' 5.0 DAT NDBC 90 + -74.70 38.46 '44009 ' 5.0 DAT NDBC 90 + -72.10 40.70 '44017 ' 5.0 DAT NDBC 80 + -69.29 41.26 '44018 ' 5.0 DAT NDBC 80 + -73.17 40.25 '44025 ' 5.0 DAT NDBC 80 + -71.01 41.38 '44070 ' 999. DAT NDBC 60 + -65.93 42.31 '44024 ' 4.0 DAT GOMOOS 80 + -67.31 44.27 '44027 ' 5.0 DAT NDBC 80 + -67.88 43.49 '44037 ' 4.0 DAT GOMOOS 80 + -66.55 43.62 '44038 ' 4.0 DAT GOMOOS 80 + -53.39 46.44 '44251 ' 5.0 DAT ENCAN 80 + -57.35 47.28 '44255 ' 5.0 DAT ENCAN 80 + -75.720 36.915 '44099 ' 999. DAT SCRIPPS 90 + -75.59 36.26 '44100 ' 999. DAT SCRIPPS 90 + -72.60 39.58 '44066 ' 5.0 DAT NDBC 80 + -75.492 36.872 '44093 ' 999. DAT SCRIPPS 80 + -75.33 35.75 '44095 ' 999. DAT SCRIPPS 80 + -75.809 37.023 '44096 ' 999. DAT SCRIPPS 80 + -71.126 40.967 '44097 ' 999. DAT SCRIPPS 80 + -70.17 42.80 '44098 ' 999. DAT SCRIPPS 80 + -70.141 43.525 '44007 ' 5.0 DAT NDBC 80 + -70.651 42.346 '44013 ' 5.0 DAT NDBC 80 + -70.186 41.439 '44020 ' 5.0 DAT NDBC 80 + -70.566 42.523 '44029 ' 4.0 DAT NDBC 80 + -70.428 43.181 '44030 ' 4.0 DAT NDBC 80 + -70.060 43.570 '44031 ' 4.0 DAT NDBC 80 + -69.355 43.716 '44032 ' 4.0 DAT NDBC 80 + -68.998 44.055 '44033 ' 4.0 DAT NDBC 80 + -68.109 44.106 '44034 ' 4.0 DAT NDBC 80 + -72.655 41.138 '44039 ' 3.5 DAT NDBC 80 + -73.580 40.956 '44040 ' 3.5 DAT NDBC 80 + -76.391 39.152 '44043 ' 3.0 DAT NDBC 80 + -75.183 38.883 '44054 ' 999.0 DAT NDBC 80 + -75.256 39.122 '44055 ' 999.0 DAT NDBC 80 + -76.257 37.567 '44058 ' 3.0 DAT NDBC 80 + -72.067 41.263 '44060 ' 3.5 DAT NDBC 80 + -77.036 38.788 '44061 ' 2.0 DAT NDBC 80 + -76.415 38.556 '44062 ' 3.0 DAT NDBC 80 + -76.448 38.963 '44063 ' 3.0 DAT NDBC 80 + -76.087 36.998 '44064 ' 3.0 DAT NDBC 80 + -73.703 40.369 '44065 ' 5.0 DAT NDBC 80 + -76.266 37.201 '44072 ' 3.0 DAT NDBC 80 + -75.334 37.757 '44089 ' 999.0 DAT NDBC 80 + -70.329 41.840 '44090 ' 999.0 DAT NDBC 80 + -73.77 39.77 '44091 ' 999.0 DAT NDBC 80 + -70.632 42.942 '44092 ' 999.0 DAT NDBC 80 + -73.106 40.585 '44094 ' 999.0 DAT NDBC 80 + -63.408 44.500 '44172 ' 999.0 DAT NDBC 360 + -57.341 47.263 '44235 ' 999.0 DAT NDBC 360 + -76.149 37.024 '44087 ' 999.0 DAT NDBC 360 +$AGNT41 +$ +$AGNT43 +$ Western Atlantic (NT) spectra (4) near South America (3) + -48.13 -27.70 '31201 ' 999. DAT SCRIPPS 180 + -34.567 -8.15 '31052 ' 999. DAT PNBOIA 180 + -43.088 -23.031 '31260 ' 999. DAT PNBOIA 180 + -47.367 -28.5 '31374 ' 999. DAT PNBOIA 180 + -44.933 -25.283 '31051 ' 999. DAT PNBOIA 180 + -51.353 -32.595 '31053 ' 999. DAT PNBOIA 180 + -49.81 -31.52 '31375 ' 999. DAT WMO 360 +$AGNT43 +$ +$AGXT43 +$ Tropical Belt (XT) spectra (4) near South America (3) + -53.08 14.55 '41040 ' 5.0 DAT NDBC 360 + -46.00 14.53 '41041 ' 5.0 DAT NDBC 360 + -57.90 15.90 '41100 ' 5.0 DAT METFR 360 + -56.20 14.60 '41101 ' 5.0 DAT METFR 360 + -50.949 14.754 '41060 ' 2.7 DAT NDBC 360 + -60.848 11.185 '42087 ' 3.4 DAT NDBC 360 + -60.521 11.301 '42088 ' 3.4 DAT NDBC 360 +$AGXT43 +$ +$AGXT40 +$ Tropical Belt (XT) spectra (4) in Pacific Ocean and Pacific Isles (0) + -125.032 10.051 '43010 ' 3.5 DAT NDBC 360 + -144.668 13.729 '52009 ' 5.0 DAT NDBC 360 +$AGXT40 +$ +$AGET43 +$ Eastern Atlantic (ET) spectra (3) near Europe (3) + -5.00 45.20 '62001 ' 3.0 DAT UKMO 360 + -20.00 41.60 '62002 ' 999. DAT UNKNOWN 360 + -12.40 48.70 '62029 ' 3.0 DAT UKMO 360 + -7.90 51.40 '62023 ' 999. DAT UNKNOWN 360 + -5.60 48.50 '62052 ' 999. DAT METFR 100 + -13.30 51.00 '62081 ' 3.0 DAT UKMO 360 + -11.20 53.13 '62090 ' 4.5 DAT IDT 100 + -5.42 53.47 '62091 ' 4.5 DAT IDT 60 + -10.55 51.22 '62092 ' 4.5 DAT IDT 100 + -9.07 54.67 '62093 ' 4.5 DAT IDT 60 + -6.70 51.69 '62094 ' 4.5 DAT IDT 60 + -15.92 53.06 '62095 ' 4.5 DAT IDT 100 + -2.90 49.90 '62103 ' 14.0 DAT UKMO 360 + -12.36 54.54 '62105 ' 3.0 DAT UKMO 360 + -9.90 57.00 '62106 ' 4.5 DAT UKMO 360 + -6.10 50.10 '62107 ' 14.0 DAT UKMO 360 + -19.50 53.50 '62108 ' 3.0 DAT UKMO 360 + -8.50 47.50 '62163 ' 3.0 DAT UKMO 360 + -4.70 52.30 '62301 ' 3.0 DAT UKMO 25 + -5.10 51.60 '62303 ' 3.0 DAT UKMO 25 + 0.00 50.40 '62305 ' 14.0 DAT UKMO 25 + 2.00 51.40 '62170 ' 999.0 DAT UKMO 25 + -11.40 59.10 '64045 ' 3.0 DAT UKMO 360 + -4.50 60.70 '64046 ' 3.0 DAT UKMO 360 + -23.10 64.05 'TFGSK ' 999. DAT UNKNOWN 60 + -15.20 64.00 'TFHFN ' 999. DAT UNKNOWN 60 + -20.35 63.00 'TFSRT ' 999. DAT UNKNOWN 60 + 7.80 64.30 'LF3F ' 999. DAT UNKNOWN 360 + 1.10 55.30 '62026 ' 999. DAT UNKNOWN 360 + 0.00 57.00 '62109 ' 999. DAT UNKNOWN 25 + 0.40 58.10 '62111 ' 999. DAT UNKNOWN 25 + 1.30 58.70 '62112 ' 999. DAT UNKNOWN 25 + 1.40 57.70 '62116 ' 999. DAT UNKNOWN 360 + 0.00 57.90 '62117 ' 999. DAT UNKNOWN 15 + 2.00 57.00 '62119 ' 999. DAT UNKNOWN 25 + 1.40 58.70 '62128 ' 999. DAT UNKNOWN 25 + 2.00 56.40 '62132 ' 999. DAT UNKNOWN 25 + 1.00 57.10 '62133 ' 999. DAT UNKNOWN 15 + 2.10 53.00 '62142 ' 999. DAT PRIV 30 + 1.80 57.70 '62143 ' 999. DAT UNKNOWN 25 + 1.70 53.40 '62144 ' 999. DAT PRIV 45 + 2.80 53.10 '62145 ' 999. DAT PRIV 360 + 1.80 57.00 '62152 ' 999. DAT UNKNOWN 25 + 0.50 57.40 '62162 ' 999. DAT UNKNOWN 25 + 0.50 57.20 '62164 ' 999. DAT PRIV 15 + 1.90 51.10 '62304 ' 14.0 DAT UKMO 25 + 1.70 60.60 '63055 ' 999. DAT UNKNOWN 25 + 1.60 59.50 '63056 ' 999. DAT UNKNOWN 25 + 1.50 59.20 '63057 ' 999. DAT UNKNOWN 360 + 1.10 61.20 '63103 ' 999. DAT UNKNOWN 15 + 1.70 60.80 '63108 ' 999. DAT UNKNOWN 15 + 1.50 59.50 '63110 ' 999. DAT PRIV 15 + 1.00 61.10 '63112 ' 999. DAT PRIV 360 + 1.70 61.00 '63113 ' 999. DAT PRIV 100 + 1.30 61.60 '63115 ' 999. DAT PRIV 25 + 2.30 61.20 'LF3J ' 999. DAT UNKNOWN 25 + 3.70 60.60 'LF4B ' 999. DAT UNKNOWN 360 + 2.20 59.60 'LF4H ' 999. DAT UNKNOWN 25 + 1.90 58.40 'LF4C ' 999. DAT UNKNOWN 25 + 3.20 56.50 'LF5U ' 999. DAT UNKNOWN 60 + 3.28 51.99 'EURO ' 999. DAT MVEW 60 + 3.22 53.22 'K13 ' 999. DAT MVEW 25 + -3.03 43.63 '62024 ' 999. DAT PDES 25 + -7.62 44.07 '62082 ' 999. DAT PDES 25 + -9.40 42.12 '62084 ' 999. DAT PDES 25 + -6.97 36.48 '62085 ' 999. DAT PDES 25 + -15.82 28.18 '13130 ' 999. DAT PDES 25 + -16.58 28.00 '13131 ' 999. DAT PDES 25 + 0.90 57.70 '62118 ' 999. DAT UNKNOWN 15 + 2.10 57.10 '62146 ' 999. DAT UNKNOWN 25 + 6.33 55.00 'BSH01 ' 999. DAT UNKNOWN 60 + 7.89 54.16 'BSH02 ' 999. DAT UNKNOWN 60 + 8.12 54.00 'BSH03 ' 999. DAT UNKNOWN 60 + 6.58 54.00 'BSH04 ' 999. DAT UNKNOWN 60 + 8.22 54.92 'BSH05 ' 999. DAT UNKNOWN 60 +$AGET43 +$ +$AGAC43 +$ Arctic Ocean (AC) spectra (4) non-descript (3) + -25.00 65.69 'TFBLK ' 999. DAT UNKNOWN 60 + -18.20 66.50 'TFGRS ' 999. DAT UNKNOWN 60 + -13.50 65.65 'TFKGR ' 999. DAT UNKNOWN 60 + 7.30 65.30 'LF3N ' 999. DAT UNKNOWN 60 + 8.10 66.00 'LF5T ' 999. DAT UNKNOWN 360 + 2.00 66.00 'LDWR ' 999. DAT UNKNOWN 360 + 21.10 71.60 '3FYT ' 999. DAT UNKNOWN 360 + 15.50 73.50 'LFB1 ' 999. DAT OCNOR 360 + 30.00 74.00 'LFB2 ' 999. DAT OCNOR 360 + -9.26 68.48 '64071 ' 999. DAT UNKNOWN 60 + -166.071 70.025 '48012 ' 3.0 DAT NDBC 360 + -169.454 65.011 '48114 ' 999.0 DAT NDBC 360 + -146.040 70.370 '48211 ' 999.0 DAT NDBC 360 + -150.279 70.874 '48212 ' 999.0 DAT NDBC 360 + -164.133 71.502 '48213 ' 999.0 DAT NDBC 360 + -165.248 70.872 '48214 ' 999.0 DAT NDBC 360 + -167.952 71.758 '48216 ' 999.0 DAT NDBC 360 +$AGAC43 +$ +$AGIO45 +$ Indian Ocean (I) spectra (4) non-descript (5) + 72.49 17.02 '23092 ' 999. DAT UNKNOWN 20 + 73.75 15.40 '23093 ' 999. DAT UNKNOWN 120 + 74.50 12.94 '23094 ' 999. DAT UNKNOWN 120 + 80.39 13.19 '23096 ' 999. DAT UNKNOWN 120 + 69.24 15.47 '23097 ' 999. DAT UNKNOWN 360 + 72.51 10.65 '23098 ' 999. DAT UNKNOWN 360 + 90.74 12.14 '23099 ' 999. DAT UNKNOWN 360 + 87.56 18.35 '23100 ' 999. DAT UNKNOWN 120 + 83.27 13.97 '23101 ' 999. DAT UNKNOWN 360 + 87.50 15.00 '23168 ' 999. DAT UNKNOWN 360 + 90.14 18.13 '23169 ' 999. DAT UNKNOWN 360 + 72.66 8.33 '23170 ' 999. DAT UNKNOWN 360 + 72.00 12.50 '23172 ' 999. DAT UNKNOWN 360 + 78.57 8.21 '23173 ' 999. DAT UNKNOWN 120 + 81.53 11.57 '23174 ' 999. DAT UNKNOWN 360 + 116.14 -19.59 '56002 ' 999. DAT UNKNOWN 120 + 115.40 -32.11 '56005 ' 999. DAT UNKNOWN 50 + 114.78 -33.36 '56006 ' 999. DAT UNKNOWN 120 + 114.94 -21.41 '56007 ' 999. DAT UNKNOWN 50 + 22.17 -34.97 'AGULHAS_FA' 10.0 DAT PRIV 360 + 121.90 -34.00 '56010 ' 999. DAT UNKNOWN 50 + 114.10 -21.70 '56012 ' 999. DAT UNKNOWN 50 + 85.00 12.60 '23167 ' 999. DAT UNKNOWN 360 + 70.00 11.02 '23171 ' 999. DAT UNKNOWN 360 + 91.66 10.52 '23451 ' 999. DAT UNKNOWN 120 + 89.04 10.97 '23455 ' 999. DAT UNKNOWN 120 + 86.98 9.99 '23456 ' 999. DAT UNKNOWN 120 + 70.10 5.16 '23491 ' 999. DAT UNKNOWN 120 + 68.08 13.89 '23492 ' 999. DAT UNKNOWN 120 + 66.98 11.12 '23493 ' 999. DAT UNKNOWN 120 + 75.00 6.46 '23494 ' 999. DAT UNKNOWN 120 + 68.97 7.13 '23495 ' 999. DAT UNKNOWN 120 +$AGIO45 +$ +$ END of AWIPS Section +$ +$ South America DAT + -77.50 6.26 '32488 ' 999. DAT DIMAR 45 + -77.74 3.52 '32487 ' 999. DAT DIMAR 45 + -72.22 12.35 '41193 ' 999. DAT DIMAR 120 +$ Japanese buoys DAT +$ South Korean buoys DAT + 129.78 36.35 '22106 ' 999. DAT SKOREA 100 + 126.33 33.00 '22107 ' 999. DAT SKOREA 100 +$ Africa DAT + 57.70 -20.45 'MAUR01 ' 999. DAT WMO 360 + 57.75 -20.10 'MAUR02 ' 999. DAT WMO 360 +$ End of multi_1 buoy file +$ + 0.00 0.00 'STOPSTRING' 999. XXX NCEP 0 diff --git a/parm/wave/wave_gfs.buoys.full b/parm/wave/wave_gfs.buoys.full new file mode 100755 index 0000000000..086de45582 --- /dev/null +++ b/parm/wave/wave_gfs.buoys.full @@ -0,0 +1,4267 @@ +$ +$ Global output point data file for multi-grid wave model +$ +$ Key to data in file: +$ +$ LON Longitude, east positive +$ LAT Latitude +$ NAME Output point name C*10, no blanks in name allowed +$ AH Anemometer height, dummy value for none-data points +$ TYPE Buoy type indicator, used for plotting and postprocessing +$ DAT Data point +$ XDT Former data point +$ BPT Boundary data for non-NCEP models. +$ IBP Boundary data for NCEP models. +$ VBY 'NWS Virtual buoy' +$ NBY 'Non-NWS Virtual buoy' +$ SOURCE Source of data point +$ ENCAN Environment Canada +$ GOMOOS Gulf of Maine OOS +$ IDT Irish Department of Transportation +$ METFR Meteo France +$ NCEP Boundary and other data points +$ NDBC National Data Buoy Center +$ PRIV Private and incidental data sources +$ SCRIPPS Scripps +$ UKMO UK Met Office +$ PDES Puertos del Estados +$ SHOM Service Hydrographique et Oceanographique de la Marine +$ OCNOR Fugro Oceanor +$ WHOI Woods Hole Oceanographic Institute +$ SKOREA South Korea +$ MVEW Ministerie van Verkeer en Waterstaat +$ CORMP Coastal Ocean Research and Monitoring Program +$ DIMAR Direccion General Maritima (Columbia) +$ BP British Petroleum +$ SCALE Scale indicator for plotting of locations on map +$ Point will only be plotted if SCALE =< DX in our +$ GrADS scripts, DX is width of plot in logitude +$ +$ Notes: +$ +$ - The '$' at the first position identifies comments for WAVEWATCH III +$ input. +$ - The first three data columns are used by the forecats code, the other +$ are used by postprocessing scripts. +$ +$ LON LAT NAME AH TYPE SOURCE SCALE +$ --------------------------------------------------------- +$ +$ AWIPS Data section (most actual observational sites) +$ AWIPS code indicated prior and after each AWIPS section +$ +$AGGA48 +$ Gulf of Alaska (AG) Spectral data (4) near S/SW Alaska Anchorage (8) + -148.02 56.31 '46001 ' 5.0 DAT NDBC 360 + -154.98 52.70 '46066 ' 5.0 DAT NDBC 360 + -146.83 60.22 '46061 ' 5.0 DAT NDBC 90 + -160.81 53.93 '46075 ' 5.0 DAT NDBC 360 + -148.00 59.50 '46076 ' 5.0 DAT NDBC 360 + -152.45 56.05 '46078 ' 5.0 DAT NDBC 360 + -152.09 59.76 '46106 ' 999 DAT NDBC 75 + -150.00 58.00 '46080 ' 5.0 DAT NDBC 360 + -151.829 59.597 '46108 ' 5.0 DAT NDBC 45 + -160.000 57.700 '46021 ' 999.0 DAT NDBC 45 + -146.805 60.584 '46060 ' 5.0 DAT NDBC 45 + -154.175 57.910 '46077 ' 5.0 DAT NDBC 45 + -152.230 59.050 '46079 ' 4.9 DAT NDBC 45 + -152.233 59.049 '46105 ' 2.0 DAT NDBC 45 + -147.992 59.925 '46107 ' 2.0 DAT NDBC 45 + -165.475 64.473 '46265 ' 2.0 DAT NDBC 45 +$AGGA48 +$ +$AGGA47 +$ Gulf of Alaska (AG) Spectral data (4) near Alaska Panhandle and NBC (7) + -136.10 50.93 '46004 ' 5.0 DAT ENCAN 360 + -138.85 53.91 '46184 ' 5.0 DAT ENCAN 360 + -143.42 59.69 '46082 ' 5.0 DAT NDBC 360 + -138.00 58.25 '46083 ' 5.0 DAT NDBC 360 + -136.16 56.59 '46084 ' 5.0 DAT NDBC 360 + -142.56 56.85 '46085 ' 5.0 DAT NDBC 360 + -134.28 54.16 '46205 ' 5.0 DAT ENCAN 45 + -132.45 54.38 '46145 ' 5.0 DAT ENCAN 45 + -131.22 51.83 '46147 ' 5.0 DAT ENCAN 90 + -131.10 53.62 '46183 ' 5.0 DAT ENCAN 45 + -129.81 52.42 '46185 ' 5.0 DAT ENCAN 45 + -128.75 51.37 '46204 ' 5.0 DAT ENCAN 45 + -129.92 50.87 '46207 ' 5.0 DAT ENCAN 45 + -132.68 52.52 '46208 ' 5.0 DAT ENCAN 45 + -129.795 52.437 '46138 ' 999.0 DAT NDBC 45 +$AGGA47 +$ +$AGPZ46 +$ Eastern Pacific (PZ) spectral data (4) near Pacific states and SBC (6) + -130.27 42.60 '46002 ' 5.0 DAT NDBC 360 + -137.48 40.80 '46006 ' 5.0 DAT NDBC 360 + -130.00 37.98 '46059 ' 5.0 DAT NDBC 360 + -120.87 34.88 '46011 ' 5.0 DAT NDBC 15 + -122.88 37.36 '46012 ' 5.0 DAT NDBC 45 + -123.32 38.23 '46013 ' 5.0 DAT NDBC 25 + -123.97 39.22 '46014 ' 5.0 DAT NDBC 45 + -124.54 40.78 '46022 ' 5.0 DAT NDBC 25 + -120.97 34.71 '46023 ' 10.0 DAT NDBC 45 + -122.82 37.75 '46026 ' 5.0 DAT NDBC 25 + -124.38 41.85 '46027 ' 5.0 DAT NDBC 45 + -124.85 42.75 '46015 ' 5.0 DAT NDBC 45 + -119.08 33.75 '46025 ' 5.0 DAT NDBC 45 + -121.89 35.74 '46028 ' 5.0 DAT NDBC 45 + -124.53 40.42 '46030 ' 5.0 DAT NDBC 15 + -122.42 36.75 '46042 ' 5.0 DAT NDBC 45 + -119.53 32.43 '46047 ' 5.0 DAT NDBC 45 + -124.53 44.62 '46050 ' 5.0 DAT NDBC 45 + -119.85 34.24 '46053 ' 5.0 DAT NDBC 45 + -120.45 34.27 '46054 ' 10.0 DAT NDBC 25 + -121.01 35.10 '46062 ' 5.0 DAT NDBC 45 + -120.70 34.27 '46063 ' 5.0 DAT NDBC 45 + -120.20 33.65 '46069 ' 5.0 DAT NDBC 45 + -118.00 32.50 '46086 ' 5.0 DAT NDBC 45 + -125.77 45.88 '46089 ' 5.0 DAT NDBC 45 + -124.74 40.29 '46213 ' 999. DAT SCRIPPS 25 + -123.465 37.9403 '46214 ' 999. DAT SCRIPPS 45 + -119.80 34.33 '46216 ' 999. DAT SCRIPPS 15 + -119.43 34.17 '46217 ' 999. DAT SCRIPPS 15 + -120.78 34.45 '46218 ' 999. DAT SCRIPPS 25 + -119.88 33.22 '46219 ' 999. DAT SCRIPPS 45 + -118.641 33.8599 '46221 ' 999. DAT SCRIPPS 15 + -118.32 33.62 '46222 ' 999. DAT SCRIPPS 15 + -117.77 33.46 '46223 ' 999. DAT SCRIPPS 15 + -117.47 33.18 '46224 ' 999. DAT SCRIPPS 15 + -117.39 32.93 '46225 ' 999. DAT SCRIPPS 15 + -117.44 32.63 '46227 ' 999. DAT SCRIPPS 15 + -124.55 43.77 '46229 ' 999. DAT SCRIPPS 25 + -117.37 32.75 '46231 ' 999. DAT SCRIPPS 15 + -117.425 32.517 '46232 ' 999. DAT SCRIPPS 15 + -117.75 32.64 'SGX01 ' 999. VBY NCEP 25 + -118.00 30.00 'TPC50 ' 999. VBY NCEP 360 + -135.00 20.00 'TPC51 ' 999. VBY NCEP 360 + -117.00 20.00 'TPC52 ' 999. VBY NCEP 360 + -120.00 6.00 'TPC53 ' 999. VBY NCEP 360 + -95.00 15.00 'TPC54 ' 999. VBY NCEP 360 + -88.00 9.00 'TPC55 ' 999. VBY NCEP 360 + -80.00 6.00 'TPC56 ' 999. VBY NCEP 360 + -130.50 48.10 'OPCP01 ' 999. VBY NCEP 45 + -126.60 48.10 'OPCP02 ' 999. VBY NCEP 45 + -129.70 45.30 'OPCP03 ' 999. VBY NCEP 45 + -125.60 45.30 'OPCP04 ' 999. VBY NCEP 45 + -129.90 41.75 'OPCP05 ' 999. VBY NCEP 45 + -125.80 41.90 'OPCP06 ' 999. VBY NCEP 45 + -129.00 38.50 'OPCP07 ' 999. VBY NCEP 45 + -125.50 39.20 'OPCP08 ' 999. VBY NCEP 45 + -125.40 36.40 'OPCP09 ' 999. VBY NCEP 45 + -125.00 33.30 'OPCP10 ' 999. VBY NCEP 45 + -122.30 34.60 'OPCP11 ' 999. VBY NCEP 45 + -121.50 30.90 'OPCP12 ' 999. VBY NCEP 45 + -117.00 29.60 'OPCP13 ' 999. VBY NCEP 45 + -120.86 35.20 '46215 ' 999. DAT SCRIPPS 45 + -121.95 36.76 '46236 ' 999. DAT SCRIPPS 15 + -122.634 37.787 '46237 ' 999. DAT SCRIPPS 15 + -119.47 33.40 '46238 ' 999. DAT SCRIPPS 15 + -122.10 36.34 '46239 ' 999. DAT SCRIPPS 15 + -121.91 36.62 '46240 ' 999. DAT SCRIPPS 15 + -124.13 46.22 '46243 ' 999. DAT SCRIPPS 45 + -124.36 40.89 '46244 ' 999. DAT SCRIPPS 45 + -145.20 50.033 '46246 ' 999. DAT SCRIPPS 45 + -124.644 46.133 '46248 ' 999. DAT SCRIPPS 45 + -119.200 33.000 '46024 ' 10.0 DAT NDBC 45 + -121.899 36.835 '46091 ' 4.0 DAT NDBC 45 + -122.030 36.750 '46092 ' 4.0 DAT NDBC 45 + -122.410 36.690 '46093 ' 4.0 DAT NDBC 45 + -124.300 44.642 '46094 ' 3.0 DAT NDBC 45 + -124.304 44.639 '46097 ' 4.5 DAT NDBC 45 + -124.956 44.381 '46098 ' 4.5 DAT NDBC 45 + -122.33 36.685 '46114 ' 999.0 DAT NDBC 45 + -124.313 40.753 '46212 ' 999.0 DAT NDBC 45 + -117.353 32.848 '46226 ' 999.0 DAT NDBC 45 + -117.320 32.936 '46233 ' 3.0 DAT NDBC 45 + -117.167 32.572 '46235 ' 999.0 DAT NDBC 45 + -117.439 33.220 '46242 ' 999.0 DAT NDBC 45 + -122.833 37.753 '46247 ' 999.0 DAT NDBC 45 + -119.708 33.821 '46249 ' 999.0 DAT NDBC 45 + -119.090 34.034 '46250 ' 999.0 DAT NDBC 45 + -119.564 33.769 '46251 ' 999.0 DAT NDBC 45 + -119.257 33.953 '46252 ' 999.0 DAT NDBC 45 + -118.181 33.576 '46253 ' 999.0 DAT NDBC 45 + -117.267 32.868 '46254 ' 999.0 DAT NDBC 45 + -119.651 33.400 '46255 ' 999.0 DAT NDBC 45 + -118.201 33.700 '46256 ' 999.0 DAT NDBC 45 + -120.766 34.439 '46257 ' 999.0 DAT NDBC 45 + -117.500 32.750 '46258 ' 999.0 DAT NDBC 45 + -121.497 34.767 '46259 ' 999.0 DAT NDBC 45 + -119.004 33.704 '46262 ' 999.0 DAT NDBC 45 +$AGPZ46 +$ +$AGPZ47 +$ Eastern Pacific (PZ) spectral data (4) near Alaska Panhandle and NBC (7) + -131.02 46.05 '46005 ' 5.0 DAT NDBC 360 + -133.94 48.35 '46036 ' 5.0 DAT ENCAN 360 + -127.93 49.74 '46132 ' 5.0 DAT ENCAN 90 + -126.00 48.84 '46206 ' 5.0 DAT ENCAN 45 + -124.51 46.12 '46029 ' 5.0 DAT NDBC 45 + -124.75 47.34 '46041 ' 5.0 DAT NDBC 45 + -124.73 48.49 '46087 ' 5.0 DAT NDBC 45 + -124.24 46.86 '46211 ' 999. DAT SCRIPPS 25 + -123.165 48.334 '46088 ' 5.0 DAT NDBC 45 + -124.127 46.173 '46096 ' 3.0 DAT NDBC 45 + -124.566 46.986 '46099 ' 4.5 DAT NDBC 45 + -124.972 46.851 '46100 ' 4.5 DAT NDBC 45 + -124.950 47.967 '46119 ' 3.7 DAT NDBC 45 + -124.063 46.215 '46127 ' 3.0 DAT NDBC 45 + -126.010 48.844 '46139 ' 999.0 DAT NDBC 45 + -151.700 57.480 '46264 ' 999.0 DAT NDBC 45 +$AGPZ47 +$ +$AGPN48 +$ North Pacific and Behring Sea (PN) spectra (4) near S/SW Alaska Anchorage (8) + -177.58 57.05 '46035 ' 10.0 DAT NDBC 360 + 175.28 55.00 '46070 ' 5.0 DAT NDBC 360 + -172.03 54.94 '46073 ' 10.0 DAT NDBC 360 + 179.05 51.16 '46071 ' 5.0 DAT NDBC 360 + -171.73 52.25 '46072 ' 5.0 DAT NDBC 360 + -168.000 55.883 '46020 ' 999.0 DAT NDBC 360 +$AGPN48 +$ +$AGHW40 +$ Hawaiian waters (HW) spectra (4) in Pacific Ocean and Pacific Isles (0) + -162.21 23.43 '51001 ' 5.0 DAT NDBC 360 + -157.78 17.19 '51002 ' 5.0 DAT NDBC 360 + -160.82 19.22 '51003 ' 5.0 DAT NDBC 360 + -152.48 17.52 '51004 ' 5.0 DAT NDBC 360 + -158.00 24.00 'HNL01 ' 999. VBY NCEP 360 + -153.00 22.50 'HNL02 ' 999. VBY NCEP 360 + -157.75 22.00 'HNL10 ' 999. VBY NCEP 45 + -158.25 21.00 'HNL11 ' 999. VBY NCEP 45 + -156.50 19.75 'HNL12 ' 999. VBY NCEP 45 + -158.12 21.67 '51201 ' 999. DAT SCRIPPS 11 + -157.68 21.42 '51202 ' 999. DAT SCRIPPS 11 + -177.40 28.20 'MIDWAY ' 999. VBY NCEP 360 + -169.50 16.70 'JOHNSTON ' 999. VBY NCEP 360 + -166.30 23.90 'FF_SHOALS ' 999. VBY NCEP 360 + -154.06 23.55 '51000 ' 5.0 DAT NDBC 11 + -153.90 23.56 '51100 ' 5.0 DAT NDBC 11 + -162.06 24.32 '51101 ' 5.0 DAT NDBC 11 + -157.00 20.79 '51203 ' 999. DAT SCRIPPS 11 + -158.12 21.28 '51204 ' 999. DAT SCRIPPS 11 + -156.42 21.02 '51205 ' 999. DAT SCRIPPS 11 + -154.97 19.78 '51206 ' 999. DAT SCRIPPS 11 + -157.75 21.48 '51207 ' 999. DAT SCRIPPS 11 + -153.87 0.02 '51028 ' 5.0 DAT NDBC 11 + -158.303 21.096 '51200 ' 999.0 DAT NDBC 11 + -159.574 22.285 '51208 ' 999. DAT SCRIPPS 11 + -170.5 -14.273 '51209 ' 999.0 DAT NDBC 360 + -157.756 21.477 '51210 ' 999.0 DAT NDBC 11 + 134.670 7.692 '52212 ' 999.0 DAT NDBC 360 + -157.959 21.297 '51211 ' 999.0 DAT NDBC 360 + -158.150 21.323 '51212 ' 999.0 DAT NDBC 360 + -157.003 20.750 '51213 ' 999.0 DAT NDBC 360 +$AGHW40 +$ +$AGPW40 +$ Western Pacific (PW) spectra (4) in Pacific Ocean and Pacific Isles (0) + 147.50 16.00 'SAIPAN ' 999. VBY NCEP 360 + 143.75 12.00 'GUAM ' 999. VBY NCEP 360 + 166.50 19.50 'WAKE ' 999. VBY NCEP 360 + 136.25 9.00 'PALAU ' 999. VBY NCEP 360 + 138.00 9.60 'YAP ' 999. VBY NCEP 360 + 152.50 8.00 'CHUUK ' 999. VBY NCEP 360 + 157.50 7.00 'POHNPEI ' 999. VBY NCEP 360 + 163.00 5.10 'KOSRAE ' 999. VBY NCEP 360 + 171.25 8.00 'MAJURO ' 999. VBY NCEP 360 + 163.75 13.00 'ENEWETAK ' 999. VBY NCEP 360 + 174.00 1.00 'TARAWA ' 999. VBY NCEP 360 + 144.79 13.35 '52200 ' 999. DAT SCRIPPS 360 + 126.02 37.23 '22101 ' 999. DAT SKOREA 100 + 125.77 34.80 '22102 ' 999. DAT SKOREA 100 + 127.50 34.00 '22103 ' 999. DAT SKOREA 100 + 128.90 34.77 '22104 ' 999. DAT SKOREA 100 + 130.00 37.53 '22105 ' 999. DAT SKOREA 100 + 171.391 7.038 '52201 ' 999. DAT SCRIPPS 360 + 144.80 13.68 '52202 ' 999. DAT SCRIPPS 360 + 145.66 15.27 '52211 ' 999. DAT SCRIPPS 360 + 145.00 14.70 'SAIPAN_W ' 999. VBY NCEP 360 + 145.60 14.30 'SAIPAN_E ' 999. VBY NCEP 360 + 133.90 7.50 'PALAU_W ' 999. VBY NCEP 360 + 134.90 7.70 'PALAU_E ' 999. VBY NCEP 360 + 138.40 9.60 'YAP_E ' 999. VBY NCEP 360 + 151.20 7.40 'CHUUK_W ' 999. VBY NCEP 360 + 152.10 7.60 'CHUUK_E ' 999. VBY NCEP 360 + 158.40 7.10 'POHNPEI_E ' 999. VBY NCEP 360 + 162.80 5.90 'KOSRAE_W ' 999. VBY NCEP 360 + 167.80 9.50 'KWAJALEIN ' 999. VBY NCEP 360 + 167.50 8.67 'KWAJ_W1 ' 999. VBY NCEP 360 + 167.00 8.67 'KWAJ_W2 ' 999. VBY NCEP 360 + 168.17 8.67 'KWAJ_E ' 999. VBY NCEP 360 + 166.33 9.17 'WOTHO ' 999. VBY NCEP 360 + 168.00 9.17 'ROI_NAMUR ' 999. VBY NCEP 360 + 171.50 9.17 'WOTJE_E ' 999. VBY NCEP 360 + 171.40 7.60 'MAJURO_02 ' 999. VBY NCEP 360 + 171.50 6.60 'MAJURO_03 ' 999. VBY NCEP 360 + 133.62 33.19 '21178 ' 999. DAT WMO 360 + 131.11 37.46 '21229 ' 999. DAT WMO 360 + 125.75 36.25 '22108 ' 999. DAT WMO 360 + 126.14 33.79 '22184 ' 999. DAT WMO 360 + 125.43 37.09 '22185 ' 999. DAT WMO 360 + 125.81 35.66 '22186 ' 999. DAT WMO 360 + 127.02 33.13 '22187 ' 999. DAT WMO 360 + 128.23 34.39 '22188 ' 999. DAT WMO 360 + 129.84 35.35 '22189 ' 999. DAT WMO 360 + 129.87 36.91 '22190 ' 999. DAT WMO 360 +$AGPW40 +$ +$AGPS40 +$ South Pacific (PS) in Pacific Ocean and Pacific Isles (0) + 146.25 -12.00 'NEWGUINE_S' 999. VBY NCEP 360 + -168.75 -15.00 'PAGO_PAGO ' 999. VBY NCEP 360 + 176.25 -18.00 'NADI ' 999. VBY NCEP 360 + 179.20 -8.50 'FUNAFUTI ' 999. VBY NCEP 360 + -175.00 -22.00 'TONGATAPU ' 999. VBY NCEP 360 + -159.80 -21.20 'RAROTONGA ' 999. VBY NCEP 360 + 167.50 -24.00 'NOUMEA ' 999. VBY NCEP 360 + 167.50 -18.00 'PORT_VILA ' 999. VBY NCEP 360 + -149.60 -19.00 'PAPEETE ' 999. VBY NCEP 360 + -169.90 -19.10 'NIUE ' 999. VBY NCEP 360 + -171.90 -9.20 'NUKUNONO ' 999. VBY NCEP 360 + 167.00 -0.50 'NAURU ' 999. VBY NCEP 360 + 160.00 -12.00 'SOLOMON_SW' 999. VBY NCEP 360 + 165.00 -12.00 'SOLOMON_SE' 999. VBY NCEP 360 + 160.00 -5.00 'SOLOMON_N ' 999. VBY NCEP 360 + -85.00 -15.00 'TPC01 ' 999. VBY NCEP 360 + -110.00 -15.00 'TPC02 ' 999. VBY NCEP 360 + -135.00 -15.00 'TPC03 ' 999. VBY NCEP 360 + 150.18 -37.29 '55020 ' 999. DAT UNKNOWN 50 + 151.07 -23.31 '55033 ' 999. DAT UNKNOWN 50 + 153.63 -27.49 '55035 ' 999. DAT UNKNOWN 50 + 148.19 -38.60 '55039 ' 999. DAT UNKNOWN 50 + 118.00 -1.00 'SULAWESI ' 999. VBY NCEP 360 + 120.00 -7.50 'P_BONARAT ' 999. VBY NCEP 100 + 125.00 -5.00 'P_RUNDUMA ' 999. VBY NCEP 100 + 133.00 -8.00 'P_JAMDENA ' 999. VBY NCEP 360 + 122.00 -11.00 'P_SAWA ' 999. VBY NCEP 360 +$AGPS40 +$ +$AGGX42 +$ Gulf of Mexico (GX) spectra (4) south from NC and Puerto Rico (2) + -89.67 25.90 '42001 ' 10.0 DAT NDBC 360 + -94.42 25.17 '42002 ' 10.0 DAT NDBC 360 + -85.94 26.07 '42003 ' 10.0 DAT NDBC 360 + -88.77 30.09 '42007 ' 5.0 DAT NDBC 90 + -95.36 27.91 '42019 ' 5.0 DAT NDBC 90 + -96.70 26.94 '42020 ' 5.0 DAT NDBC 90 + -94.40 29.22 '42035 ' 5.0 DAT NDBC 90 + -84.52 28.50 '42036 ' 5.0 DAT NDBC 90 + -86.02 28.79 '42039 ' 5.0 DAT NDBC 90 + -88.21 29.18 '42040 ' 5.0 DAT NDBC 90 + -90.46 27.50 '42041 ' 5.0 DAT NDBC 90 + -92.55 27.42 '42038 ' 5.0 DAT NDBC 90 + -94.05 22.01 '42055 ' 10.0 DAT NDBC 360 + -84.275 27.348 '42099 ' 999. DAT SCRIPPS 100 + -86.00 23.00 'TPC26 ' 999. VBY NCEP 360 + -87.55 30.06 '42012 ' 5.0 DAT NDBC 90 + -88.49 28.19 '42887 ' 48.2 DAT BP 90 + -87.73 26.00 '42054 ' 10.0 XDT NDBC 90 + -82.924 27.173 '42013 ' 3.1 DAT NDBC 90 + -82.220 25.254 '42014 ' 2.8 DAT NDBC 90 + -83.306 28.311 '42021 ' 2.8 DAT NDBC 90 + -83.741 27.504 '42022 ' 3.1 DAT NDBC 90 + -83.086 26.010 '42023 ' 3.1 DAT NDBC 90 + -94.899 28.982 '42043 ' 3.4 DAT NDBC 90 + -97.051 26.191 '42044 ' 3.4 DAT NDBC 90 + -96.500 26.217 '42045 ' 3.4 DAT NDBC 90 + -94.037 27.890 '42046 ' 3.4 DAT NDBC 90 + -93.597 27.896 '42047 ' 3.4 DAT NDBC 90 + -88.647 30.042 '42067 ' 5.0 DAT NDBC 90 + -83.650 25.700 '42097 ' 999.0 DAT NDBC 90 + -82.931 27.589 '42098 ' 999.0 DAT NDBC 90 + -90.471 26.672 '42360 ' 3.0 DAT NDBC 90 + -92.490 27.550 '42361 ' 122.0 DAT NDBC 90 + -90.648 27.795 '42362 ' 122.0 DAT NDBC 90 + -89.220 28.160 '42363 ' 122.0 DAT NDBC 90 + -88.090 29.060 '42364 ' 122.0 DAT NDBC 90 + -89.120 28.200 '42365 ' 122.0 DAT NDBC 90 + -90.283 27.207 '42369 ' 60.4 DAT NDBC 90 + -90.536 27.322 '42370 ' 78.7 DAT NDBC 90 + -88.056 28.866 '42374 ' 61.0 DAT NDBC 90 + -88.289 28.521 '42375 ' 61.0 DAT NDBC 90 + -87.944 29.108 '42376 ' 61.0 DAT NDBC 90 + -94.898 26.129 '42390 ' 61.0 DAT NDBC 90 + -90.027 27.196 '42392 ' 100.0 DAT NDBC 90 + -89.240 28.157 '42394 ' 100.0 DAT NDBC 90 + -90.792 26.404 '42395 ' 3.0 DAT NDBC 90 +$AGGX42 +$ +$AGCA42 +$ Caribbean Sea (CA) spectra (4) south from NC and Puerto Rico (2) + -85.06 19.87 '42056 ' 10.0 DAT NDBC 360 + -81.50 16.83 '42057 ' 10.0 DAT NDBC 360 + -75.06 15.09 '42058 ' 10.0 DAT NDBC 360 + -81.95 24.39 '42080 ' 999. DAT NDBC 45 + -81.75 24.00 'EYW01 ' 999. VBY NCEP 90 + -82.25 25.00 'EYW02 ' 999. VBY NCEP 90 + -66.50 19.00 'PUERTO_R_N' 999. VBY NCEP 90 + -66.50 17.50 'PUERTO_R_S' 999. VBY NCEP 90 + -67.50 15.01 '42059 ' 5.0 DAT NDBC 360 + -85.38 -19.62 '32012' 999. DAT WHOI 360 + -63.00 15.00 'TPC21 ' 999. VBY NCEP 360 + -77.00 12.00 'TPC22 ' 999. VBY NCEP 360 + -80.00 15.00 'TPC23 ' 999. VBY NCEP 360 + -76.00 22.00 'TPC24 ' 999. VBY NCEP 360 + -80.00 24.00 'TPC25 ' 999. VBY NCEP 360 + -63.50 16.50 '42060 ' 5.0 DAT NDBC 360 + -67.50 19.00 'CARCOOS01 ' 999. VBY NCEP 90 + -65.50 19.00 'CARCOOS02 ' 999. VBY NCEP 90 + -64.00 19.00 'CARCOOS03 ' 999. VBY NCEP 90 + -64.40 17.30 'CARCOOS04 ' 999. VBY NCEP 90 + -67.50 17.50 'CARCOOS05 ' 999. VBY NCEP 90 + -74.681 11.161 '41194 ' 999.0 DAT NDBC 90 + -66.524 17.860 '42085 ' 4.0 DAT NDBC 90 + -80.061 19.699 '42089 ' 3.4 DAT NDBC 90 + -64.763 18.251 '41052 ' 4.0 DAT NDBC 90 + -65.004 18.257 '41051 ' 4.0 DAT NDBC 90 + -65.457 18.260 '41056 ' 4.0 DAT NDBC 90 + -67.280 18.379 '41115 ' 999.0 DAT NDBC 90 + -81.080 30.000 '41117 ' 999.0 DAT NDBC 90 + -81.244 24.535 '42079 ' 999.0 DAT NDBC 90 + -75.042 36.000 '42086 ' 999.0 DAT NDBC 90 + -81.967 24.407 '42095 ' 999.0 DAT NDBC 90 +$AGCA42 +$ +$AGNT42 +$ Western Atlantic (NT) spectra (4) south from NC and Puerto Rico (2) + -72.66 34.68 '41001 ' 5.0 DAT NDBC 360 + -75.36 32.32 '41002 ' 5.0 DAT NDBC 360 + -79.09 32.50 '41004 ' 5.0 DAT NDBC 360 + -80.87 31.40 '41008 ' 5.0 DAT NDBC 360 + -80.17 28.50 '41009 ' 5.0 DAT NDBC 80 + -78.47 28.95 '41010 ' 5.0 DAT NDBC 80 + -80.60 30.00 '41012 ' 5.0 DAT NDBC 80 + -77.74 33.44 '41013 ' 5.0 DAT NDBC 80 + -75.40 35.01 '41025 ' 5.0 DAT NDBC 80 + -77.28 34.48 '41035 ' 5.0 DAT NDBC 80 + -76.95 34.21 '41036 ' 5.0 DAT NDBC 80 + -65.01 20.99 '41043 ' 5.0 DAT NDBC 90 + -70.99 24.00 '41046 ' 5.0 DAT NDBC 90 + -71.49 27.47 '41047 ' 10.0 DAT NDBC 90 + -69.65 31.98 '41048 ' 10.0 DAT NDBC 90 + -81.292 30.709 '41112 ' 999. DAT SCRIPPS 30 + -80.53 28.40 '41113 ' 999. DAT SCRIPPS 30 + -80.22 27.55 '41114 ' 999. DAT SCRIPPS 30 + -74.84 36.61 '44014 ' 5.0 DAT NDBC 90 + -77.00 30.75 'CHS01 ' 999. VBY NCEP 80 + -77.00 34.00 'ILM01 ' 999. VBY NCEP 45 + -78.50 33.25 'ILM02 ' 999. VBY NCEP 45 + -80.25 29.50 'JAX02 ' 999. VBY NCEP 90 + -79.50 27.25 'MLB01 ' 999. VBY NCEP 90 + -79.50 26.25 'MIA01 ' 999. VBY NCEP 80 + -79.75 25.00 'MIA02 ' 999. VBY NCEP 90 + -74.60 36.30 'OPCA05 ' 999. VBY NCEP 45 + -73.80 35.60 'OPCA06 ' 999. VBY NCEP 45 + -70.80 34.90 'OPCA07 ' 999. VBY NCEP 45 + -76.00 33.80 'OPCA08 ' 999. VBY NCEP 45 + -72.30 32.80 'OPCA09 ' 999. VBY NCEP 45 + -77.36 33.99 '41037 ' 3.0 DAT CORMP 80 + -77.72 34.14 '41038 ' 3.0 DAT CORMP 80 + -63.00 27.50 '41049 ' 5.0 DAT NDBC 90 + -58.69 21.65 '41044 ' 5.0 DAT NDBC 90 + -77.30 34.48 '41109 ' 3.0 DAT CORMP 80 + -77.71 34.14 '41110 ' 3.0 DAT CORMP 80 + -67.28 18.38 '41111 ' 3.0 DAT CORMP 80 + -66.099 18.474 '41053 ' 5.0 DAT NDBC 80 + -65.157 18.476 '41058 ' 5.0 DAT NDBC 80 + -78.484 33.837 '41024 ' 3.0 DAT NDBC 80 + -78.137 33.302 '41027 ' 3.0 DAT NDBC 80 + -79.624 32.803 '41029 ' 3.0 DAT NDBC 80 + -79.340 32.520 '41030 ' 3.0 DAT NDBC 80 + -80.410 32.279 '41033 ' 3.0 DAT NDBC 80 + -38.000 24.581 '41061 ' 2.7 DAT NDBC 80 + -75.095 35.778 '41062 ' 3.5 DAT NDBC 80 + -75.941 34.782 '41063 ' 3.5 DAT NDBC 80 + -76.949 34.207 '41064 ' 3.0 DAT NDBC 80 + -78.015 33.721 '41108 ' 999.0 DAT NDBC 80 + -76.948 34.210 '41159 ' 999.0 DAT NDBC 80 + -75.714 36.200 '44056 ' 999.0 DAT NDBC 80 +$AGNT42 +$ +$AGNT41 +$ Western Atlantic (NT) spectra (4) NE states north of VA (1) + -53.62 44.26 '44138 ' 5.0 DAT ENCAN 360 + -66.58 41.11 '44011 ' 5.0 DAT NDBC 360 + -58.00 43.00 '44141 ' 5.0 DAT ENCAN 360 + -64.02 42.50 '44142 ' 5.0 DAT ENCAN 360 + -48.01 46.77 'WRB07 ' 10.0 DAT PRIV 360 + -62.00 42.26 '44137 ' 5.0 DAT ENCAN 360 + -57.08 44.26 '44139 ' 5.0 DAT ENCAN 360 + -51.74 43.75 '44140 ' 5.0 DAT ENCAN 360 + -64.01 42.50 '44150 ' 5.0 DAT ENCAN 360 + -70.43 38.48 '44004 ' 5.0 DAT NDBC 90 + -69.16 43.19 '44005 ' 5.0 DAT NDBC 90 + -69.43 40.50 '44008 ' 5.0 DAT NDBC 90 + -74.70 38.46 '44009 ' 5.0 DAT NDBC 90 + -72.10 40.70 '44017 ' 5.0 DAT NDBC 80 + -69.29 41.26 '44018 ' 5.0 DAT NDBC 80 + -73.17 40.25 '44025 ' 5.0 DAT NDBC 80 + -70.25 42.50 'BOX01 ' 999. VBY NCEP 45 + -67.50 44.00 'CAR01 ' 999. VBY NCEP 45 + -71.01 41.38 '44070 ' 999. DAT NDBC 60 + -65.93 42.31 '44024 ' 4.0 DAT GOMOOS 80 + -67.31 44.27 '44027 ' 5.0 DAT NDBC 80 + -67.88 43.49 '44037 ' 4.0 DAT GOMOOS 80 + -66.55 43.62 '44038 ' 4.0 DAT GOMOOS 80 + -53.39 46.44 '44251 ' 5.0 DAT ENCAN 80 + -57.35 47.28 '44255 ' 5.0 DAT ENCAN 80 + -69.75 43.25 'GYX01 ' 999. VBY NCEP 45 + -67.70 42.35 'OPCA01 ' 999. VBY NCEP 45 + -72.00 39.30 'OPCA02 ' 999. VBY NCEP 45 + -65.70 39.30 'OPCA03 ' 999. VBY NCEP 45 + -70.10 37.30 'OPCA04 ' 999. VBY NCEP 45 + -75.720 36.915 '44099 ' 999. DAT SCRIPPS 90 + -75.59 36.26 '44100 ' 999. DAT SCRIPPS 90 + -72.60 39.58 '44066 ' 5.0 DAT NDBC 80 + -75.492 36.872 '44093 ' 999. DAT SCRIPPS 80 + -75.33 35.75 '44095 ' 999. DAT SCRIPPS 80 + -75.809 37.023 '44096 ' 999. DAT SCRIPPS 80 + -71.126 40.967 '44097 ' 999. DAT SCRIPPS 80 + -70.17 42.80 '44098 ' 999. DAT SCRIPPS 80 + -70.141 43.525 '44007 ' 5.0 DAT NDBC 80 + -70.651 42.346 '44013 ' 5.0 DAT NDBC 80 + -70.186 41.439 '44020 ' 5.0 DAT NDBC 80 + -70.566 42.523 '44029 ' 4.0 DAT NDBC 80 + -70.428 43.181 '44030 ' 4.0 DAT NDBC 80 + -70.060 43.570 '44031 ' 4.0 DAT NDBC 80 + -69.355 43.716 '44032 ' 4.0 DAT NDBC 80 + -68.998 44.055 '44033 ' 4.0 DAT NDBC 80 + -68.109 44.106 '44034 ' 4.0 DAT NDBC 80 + -72.655 41.138 '44039 ' 3.5 DAT NDBC 80 + -73.580 40.956 '44040 ' 3.5 DAT NDBC 80 + -76.391 39.152 '44043 ' 3.0 DAT NDBC 80 + -75.183 38.883 '44054 ' 999.0 DAT NDBC 80 + -75.256 39.122 '44055 ' 999.0 DAT NDBC 80 + -76.257 37.567 '44058 ' 3.0 DAT NDBC 80 + -72.067 41.263 '44060 ' 3.5 DAT NDBC 80 + -77.036 38.788 '44061 ' 2.0 DAT NDBC 80 + -76.415 38.556 '44062 ' 3.0 DAT NDBC 80 + -76.448 38.963 '44063 ' 3.0 DAT NDBC 80 + -76.087 36.998 '44064 ' 3.0 DAT NDBC 80 + -73.703 40.369 '44065 ' 5.0 DAT NDBC 80 + -76.266 37.201 '44072 ' 3.0 DAT NDBC 80 + -75.334 37.757 '44089 ' 999.0 DAT NDBC 80 + -70.329 41.840 '44090 ' 999.0 DAT NDBC 80 + -73.77 39.77 '44091 ' 999.0 DAT NDBC 80 + -70.632 42.942 '44092 ' 999.0 DAT NDBC 80 + -73.106 40.585 '44094 ' 999.0 DAT NDBC 80 + -63.408 44.500 '44172 ' 999.0 DAT NDBC 360 + -57.341 47.263 '44235 ' 999.0 DAT NDBC 360 + -76.149 37.024 '44087 ' 999.0 DAT NDBC 360 +$AGNT41 +$ +$AGNT43 +$ Western Atlantic (NT) spectra (4) near South America (3) + -48.13 -27.70 '31201 ' 999. DAT SCRIPPS 180 + -48.75 -32.00 'RIO_GRANDE' 999. VBY NCEP 360 + -46.25 -28.00 'FLORIPA ' 999. VBY NCEP 360 + -43.75 -25.00 'SANTOS ' 999. VBY NCEP 360 + -34.567 -8.15 '31052 ' 999. DAT PNBOIA 180 + -43.088 -23.031 '31260 ' 999. DAT PNBOIA 180 + -47.367 -28.5 '31374 ' 999. DAT PNBOIA 180 + -44.933 -25.283 '31051 ' 999. DAT PNBOIA 180 + -51.353 -32.595 '31053 ' 999. DAT PNBOIA 180 + -42.187 -22.994 'SIODOC ' 999. VBY NCEP 360 + -44.270 -23.42 'ILHAGRANDE' 999. VBY NCEP 360 + -43.46 -23.16 'RECREIO ' 999. VBY NCEP 360 + -43.12 -23.11 'CAGARRAS ' 999. VBY NCEP 360 + -49.81 -31.52 '31375 ' 999. DAT WMO 360 +$AGNT43 +$ +$AGXT43 +$ Tropical Belt (XT) spectra (4) near South America (3) + -53.08 14.55 '41040 ' 5.0 DAT NDBC 360 + -46.00 14.53 '41041 ' 5.0 DAT NDBC 360 + -57.90 15.90 '41100 ' 5.0 DAT METFR 360 + -56.20 14.60 '41101 ' 5.0 DAT METFR 360 + -55.00 15.00 'TPC20 ' 999. VBY NCEP 360 + -38.75 -21.00 'CAMPOS ' 999. VBY NCEP 360 + -36.25 -13.00 'SALVADOR ' 999. VBY NCEP 360 + -32.50 -8.00 'RECIFE ' 999. VBY NCEP 360 + -36.25 -3.00 'FORTALEZA ' 999. VBY NCEP 360 + -47.50 3.00 'AMAZON ' 999. VBY NCEP 360 + -30.00 1.00 'PETER_PAUL' 999. VBY NCEP 360 + -5.7833 35.7833 'TANGER ' 999. VBY WMO 360 + -9.6333 30.4167 'AGADIR ' 999. VBY WMO 360 + -7.6167 33.6000 'CASABLANCA' 999. VBY WMO 360 + 3.5 6.0 'LAGOS ' 999. VBY WMO 360 + 5.0 5.0 'FORCADOS ' 999. VBY WMO 360 + 7.0 4.0 'NIGERDELTA' 999. VBY WMO 360 + 8.0 4.0 'CALABAR ' 999. VBY WMO 360 + -50.949 14.754 '41060 ' 2.7 DAT NDBC 360 + -60.848 11.185 '42087 ' 3.4 DAT NDBC 360 + -60.521 11.301 '42088 ' 3.4 DAT NDBC 360 +$AGXT43 +$ +$AGXT40 +$ Tropical Belt (XT) spectra (4) in Pacific Ocean and Pacific Isles (0) + -83.75 0.00 'TPC00 ' 999. VBY NCEP 360 + -93.75 0.00 'TPC04 ' 999. VBY NCEP 360 + 102.00 -5.00 'P_ENGGANO ' 999. VBY NCEP 360 + 107.00 0.00 'P_PENJAN ' 999. VBY NCEP 360 + 110.00 -5.00 'SEMARANG ' 999. VBY NCEP 360 + 132.00 1.00 'P_IGI ' 999. VBY NCEP 360 + 100.00 4.00 'P_PANGKOR ' 999. VBY NCEP 100 + 123.00 3.00 'BORNEO ' 999. VBY NCEP 360 + 126.00 1.00 'P_GUREDA ' 999. VBY NCEP 100 + -125.032 10.051 '43010 ' 3.5 DAT NDBC 360 + -144.668 13.729 '52009 ' 5.0 DAT NDBC 360 +$AGXT40 +$ +$AGET43 +$ Eastern Atlantic (ET) spectra (3) near Europe (3) + -5.00 45.20 '62001 ' 3.0 DAT UKMO 360 + -20.00 41.60 '62002 ' 999. DAT UNKNOWN 360 + -12.40 48.70 '62029 ' 3.0 DAT UKMO 360 + -7.90 51.40 '62023 ' 999. DAT UNKNOWN 360 + -5.60 48.50 '62052 ' 999. DAT METFR 100 + -13.30 51.00 '62081 ' 3.0 DAT UKMO 360 + -11.20 53.13 '62090 ' 4.5 DAT IDT 100 + -5.42 53.47 '62091 ' 4.5 DAT IDT 60 + -10.55 51.22 '62092 ' 4.5 DAT IDT 100 + -9.07 54.67 '62093 ' 4.5 DAT IDT 60 + -6.70 51.69 '62094 ' 4.5 DAT IDT 60 + -15.92 53.06 '62095 ' 4.5 DAT IDT 100 + -2.90 49.90 '62103 ' 14.0 DAT UKMO 360 + -12.36 54.54 '62105 ' 3.0 DAT UKMO 360 + -9.90 57.00 '62106 ' 4.5 DAT UKMO 360 + -6.10 50.10 '62107 ' 14.0 DAT UKMO 360 + -19.50 53.50 '62108 ' 3.0 DAT UKMO 360 + -8.50 47.50 '62163 ' 3.0 DAT UKMO 360 + -4.70 52.30 '62301 ' 3.0 DAT UKMO 25 + -5.10 51.60 '62303 ' 3.0 DAT UKMO 25 + 0.00 50.40 '62305 ' 14.0 DAT UKMO 25 + 2.00 51.40 '62170 ' 999.0 DAT UKMO 25 + -11.40 59.10 '64045 ' 3.0 DAT UKMO 360 + -4.50 60.70 '64046 ' 3.0 DAT UKMO 360 + -23.10 64.05 'TFGSK ' 999. DAT UNKNOWN 60 + -15.20 64.00 'TFHFN ' 999. DAT UNKNOWN 60 + -20.35 63.00 'TFSRT ' 999. DAT UNKNOWN 60 + 7.80 64.30 'LF3F ' 999. DAT UNKNOWN 360 + 1.10 55.30 '62026 ' 999. DAT UNKNOWN 360 + 0.00 57.00 '62109 ' 999. DAT UNKNOWN 25 + 0.40 58.10 '62111 ' 999. DAT UNKNOWN 25 + 1.30 58.70 '62112 ' 999. DAT UNKNOWN 25 + 1.40 57.70 '62116 ' 999. DAT UNKNOWN 360 + 0.00 57.90 '62117 ' 999. DAT UNKNOWN 15 + 2.00 57.00 '62119 ' 999. DAT UNKNOWN 25 + 1.40 58.70 '62128 ' 999. DAT UNKNOWN 25 + 2.00 56.40 '62132 ' 999. DAT UNKNOWN 25 + 1.00 57.10 '62133 ' 999. DAT UNKNOWN 15 + 2.10 53.00 '62142 ' 999. DAT PRIV 30 + 1.80 57.70 '62143 ' 999. DAT UNKNOWN 25 + 1.70 53.40 '62144 ' 999. DAT PRIV 45 + 2.80 53.10 '62145 ' 999. DAT PRIV 360 + 1.80 57.00 '62152 ' 999. DAT UNKNOWN 25 + 0.50 57.40 '62162 ' 999. DAT UNKNOWN 25 + 0.50 57.20 '62164 ' 999. DAT PRIV 15 + 1.90 51.10 '62304 ' 14.0 DAT UKMO 25 + 1.70 60.60 '63055 ' 999. DAT UNKNOWN 25 + 1.60 59.50 '63056 ' 999. DAT UNKNOWN 25 + 1.50 59.20 '63057 ' 999. DAT UNKNOWN 360 + 1.10 61.20 '63103 ' 999. DAT UNKNOWN 15 + 1.70 60.80 '63108 ' 999. DAT UNKNOWN 15 + 1.50 59.50 '63110 ' 999. DAT PRIV 15 + 1.00 61.10 '63112 ' 999. DAT PRIV 360 + 1.70 61.00 '63113 ' 999. DAT PRIV 100 + 1.30 61.60 '63115 ' 999. DAT PRIV 25 + 2.30 61.20 'LF3J ' 999. DAT UNKNOWN 25 + 3.70 60.60 'LF4B ' 999. DAT UNKNOWN 360 + 2.20 59.60 'LF4H ' 999. DAT UNKNOWN 25 + 1.90 58.40 'LF4C ' 999. DAT UNKNOWN 25 + 3.20 56.50 'LF5U ' 999. DAT UNKNOWN 60 + 3.28 51.99 'EURO ' 999. DAT MVEW 60 + 3.22 53.22 'K13 ' 999. DAT MVEW 25 + -3.03 43.63 '62024 ' 999. DAT PDES 25 + -7.62 44.07 '62082 ' 999. DAT PDES 25 + -9.40 42.12 '62084 ' 999. DAT PDES 25 + -6.97 36.48 '62085 ' 999. DAT PDES 25 + -15.82 28.18 '13130 ' 999. DAT PDES 25 + -16.58 28.00 '13131 ' 999. DAT PDES 25 + 0.90 57.70 '62118 ' 999. DAT UNKNOWN 15 + 2.10 57.10 '62146 ' 999. DAT UNKNOWN 25 + 1.50 59.50 '63111 ' 10.0 XDT PRIV 0 + 6.33 55.00 'BSH01 ' 999. DAT UNKNOWN 60 + 7.89 54.16 'BSH02 ' 999. DAT UNKNOWN 60 + 8.12 54.00 'BSH03 ' 999. DAT UNKNOWN 60 + 6.58 54.00 'BSH04 ' 999. DAT UNKNOWN 60 + 8.22 54.92 'BSH05 ' 999. DAT UNKNOWN 60 +$AGET43 +$ +$AGAC43 +$ Arctic Ocean (AC) spectra (4) non-descript (3) + -25.00 65.69 'TFBLK ' 999. DAT UNKNOWN 60 + -18.20 66.50 'TFGRS ' 999. DAT UNKNOWN 60 + -13.50 65.65 'TFKGR ' 999. DAT UNKNOWN 60 + 7.30 65.30 'LF3N ' 999. DAT UNKNOWN 60 + 8.10 66.00 'LF5T ' 999. DAT UNKNOWN 360 + 2.00 66.00 'LDWR ' 999. DAT UNKNOWN 360 + 21.10 71.60 '3FYT ' 999. DAT UNKNOWN 360 + 15.50 73.50 'LFB1 ' 999. DAT OCNOR 360 + 30.00 74.00 'LFB2 ' 999. DAT OCNOR 360 + -9.26 68.48 '64071 ' 999. DAT UNKNOWN 60 + -166.071 70.025 '48012 ' 3.0 DAT NDBC 360 + -169.454 65.011 '48114 ' 999.0 DAT NDBC 360 + -146.040 70.370 '48211 ' 999.0 DAT NDBC 360 + -150.279 70.874 '48212 ' 999.0 DAT NDBC 360 + -164.133 71.502 '48213 ' 999.0 DAT NDBC 360 + -165.248 70.872 '48214 ' 999.0 DAT NDBC 360 + -167.952 71.758 '48216 ' 999.0 DAT NDBC 360 +$AGAC43 +$ +$AGIO45 +$ Indian Ocean (I) spectra (4) non-descript (5) + 72.49 17.02 '23092 ' 999. DAT UNKNOWN 20 + 73.75 15.40 '23093 ' 999. DAT UNKNOWN 120 + 74.50 12.94 '23094 ' 999. DAT UNKNOWN 120 + 80.39 13.19 '23096 ' 999. DAT UNKNOWN 120 + 69.24 15.47 '23097 ' 999. DAT UNKNOWN 360 + 72.51 10.65 '23098 ' 999. DAT UNKNOWN 360 + 90.74 12.14 '23099 ' 999. DAT UNKNOWN 360 + 87.56 18.35 '23100 ' 999. DAT UNKNOWN 120 + 83.27 13.97 '23101 ' 999. DAT UNKNOWN 360 + 87.50 15.00 '23168 ' 999. DAT UNKNOWN 360 + 90.14 18.13 '23169 ' 999. DAT UNKNOWN 360 + 72.66 8.33 '23170 ' 999. DAT UNKNOWN 360 + 72.00 12.50 '23172 ' 999. DAT UNKNOWN 360 + 78.57 8.21 '23173 ' 999. DAT UNKNOWN 120 + 81.53 11.57 '23174 ' 999. DAT UNKNOWN 360 + 93.00 6.00 'G_NICOBAR ' 999. VBY NCEP 360 + 116.14 -19.59 '56002 ' 999. DAT UNKNOWN 120 + 115.40 -32.11 '56005 ' 999. DAT UNKNOWN 50 + 114.78 -33.36 '56006 ' 999. DAT UNKNOWN 120 + 114.94 -21.41 '56007 ' 999. DAT UNKNOWN 50 + 22.17 -34.97 'AGULHAS_FA' 10.0 DAT PRIV 360 + 104.00 6.00 'MALAY01 ' 999. VBY NCEP 100 + 105.00 3.00 'MALAY02 ' 999. VBY NCEP 100 + 110.00 3.00 'MALAY03 ' 999. VBY NCEP 100 + 113.00 5.00 'MALAY04 ' 999. VBY NCEP 100 + 116.00 7.50 'MALAY05 ' 999. VBY NCEP 100 + 117.00 7.50 'MALAY06 ' 999. VBY NCEP 100 + 121.90 -34.00 '56010 ' 999. DAT UNKNOWN 50 + 114.10 -21.70 '56012 ' 999. DAT UNKNOWN 50 + 136.20 -36.10 'CADUCOU ' 999. VBY UNKNOWN 120 + 139.00 -38.00 'SWROBE ' 999. VBY UNKNOWN 120 + 142.45 -39.20 'WBAST1 ' 999. VBY UNKNOWN 120 + 141.50 -40.00 'WBAST2 ' 999. VBY UNKNOWN 120 + 151.00 -40.00 'EBAST ' 999. VBY UNKNOWN 120 + 146.50 -40.50 'CBAST ' 999. VBY UNKNOWN 120 + 144.60 -42.30 'CSORRELL ' 999. VBY UNKNOWN 120 + 144.50 -40.10 'SEKING ' 999. VBY UNKNOWN 120 + 143.80 -39.20 'NKING ' 999. VBY UNKNOWN 120 + 144.85 -38.60 'PNEPEAN ' 999. VBY UNKNOWN 120 + 147.40 -39.20 'EHOGAN ' 999. VBY UNKNOWN 120 + 147.00 -44.00 'STHSEC ' 999. VBY UNKNOWN 120 + 149.50 -41.50 'EBICHENO ' 999. VBY UNKNOWN 120 + 133.50 -33.50 'WCAPYORK ' 999. VBY UNKNOWN 120 + 114.617 -19.785 'JANSZ ' 999. VBY UNKNOWN 120 + 85.00 12.60 '23167 ' 999. DAT UNKNOWN 360 + 70.00 11.02 '23171 ' 999. DAT UNKNOWN 360 + 91.66 10.52 '23451 ' 999. DAT UNKNOWN 120 + 89.04 10.97 '23455 ' 999. DAT UNKNOWN 120 + 86.98 9.99 '23456 ' 999. DAT UNKNOWN 120 + 70.10 5.16 '23491 ' 999. DAT UNKNOWN 120 + 68.08 13.89 '23492 ' 999. DAT UNKNOWN 120 + 66.98 11.12 '23493 ' 999. DAT UNKNOWN 120 + 75.00 6.46 '23494 ' 999. DAT UNKNOWN 120 + 68.97 7.13 '23495 ' 999. DAT UNKNOWN 120 + 24.988 -34.060 'JEFFREYBAY' 999. VBY NCEP 360 + 27.933 -33.033 'EASTLONDON' 999. VBY NCEP 360 + 17.967 -33.050 'SALDANHABY' 999. VBY NCEP 360 + 18.283 -34.200 'CAPEPOINT ' 999. VBY NCEP 360 + 22.167 -34.967 'FAPLATFORM' 999. VBY NCEP 360 + 22.150 -34.117 'MOSSELBAY ' 999. VBY NCEP 360 +$AGIO45 +$ +$ END of AWIPS Section +$ +$ Non-AWIPS sites, external (BPT) and internal (IBP) boundary points +$ +$ Alaska +$ Virtual buoys for the North Slope DAT + -160.00 72.00 'Alaska_NS1' 999 VBY NCEP 360 + -150.00 72.00 'Alaska_NS2' 999 VBY NCEP 360 + -140.00 72.00 'Alaska_NS3' 999 VBY NCEP 360 +$ Canada DAT +$ USA DAT + -116.48 23.62 'EFT1 ' 999. VBY NCEP 25 +$ NE Pacific boundary data DAT +$ PG&E Diablo Canyon Power Plant +$ Cooperation with Scripps. + -123.75 36.00 'DIABLO_01 ' 999. BPT NCEP 45 +$ CDIP Southern California + -121.50 35.75 'CDIP01 ' 999. BPT NCEP 45 + -122.00 35.75 'CDIP02 ' 999. BPT NCEP 45 + -122.00 35.25 'CDIP03 ' 999. BPT NCEP 45 + -122.00 34.75 'CDIP04 ' 999. BPT NCEP 45 + -122.00 34.25 'CDIP05 ' 999. BPT NCEP 45 + -122.00 33.75 'CDIP06 ' 999. BPT NCEP 45 + -122.00 33.25 'CDIP07 ' 999. BPT NCEP 45 + -122.00 32.75 'CDIP08 ' 999. BPT NCEP 45 + -122.00 32.25 'CDIP09 ' 999. BPT NCEP 45 + -122.00 31.75 'CDIP10 ' 999. BPT NCEP 45 + -122.00 31.25 'CDIP11 ' 999. BPT NCEP 45 + -122.00 30.75 'CDIP12 ' 999. BPT NCEP 45 + -121.75 30.75 'CDIP13 ' 999. BPT NCEP 45 + -121.25 30.75 'CDIP14 ' 999. BPT NCEP 45 + -120.75 30.75 'CDIP15 ' 999. BPT NCEP 45 + -120.25 30.75 'CDIP16 ' 999. BPT NCEP 45 + -119.75 30.75 'CDIP17 ' 999. BPT NCEP 45 + -119.25 30.75 'CDIP18 ' 999. BPT NCEP 45 + -118.75 30.75 'CDIP19 ' 999. BPT NCEP 45 + -118.25 30.75 'CDIP20 ' 999. BPT NCEP 45 + -117.75 30.75 'CDIP21 ' 999. BPT NCEP 45 + -117.25 30.75 'CDIP22 ' 999. BPT NCEP 45 + -116.75 30.75 'CDIP23 ' 999. BPT NCEP 45 + -116.25 30.75 'CDIP24 ' 999. BPT NCEP 45 +$ BKMG (Indonesia) Boundary Points + 90.00 -15.00 'BKMG01 ' 999. BPT NCEP 360 + 92.00 -15.00 'BKMG02 ' 999. BPT NCEP 360 + 94.00 -15.00 'BKMG03 ' 999. BPT NCEP 360 + 96.00 -15.00 'BKMG04 ' 999. BPT NCEP 360 + 98.00 -15.00 'BKMG05 ' 999. BPT NCEP 360 + 100.00 -15.00 'BKMG06 ' 999. BPT NCEP 360 + 102.00 -15.00 'BKMG07 ' 999. BPT NCEP 360 + 104.00 -15.00 'BKMG08 ' 999. BPT NCEP 360 + 106.00 -15.00 'BKMG09 ' 999. BPT NCEP 360 + 108.00 -15.00 'BKMG10 ' 999. BPT NCEP 360 + 110.00 -15.00 'BKMG11 ' 999. BPT NCEP 360 + 112.00 -15.00 'BKMG12 ' 999. BPT NCEP 360 + 114.00 -15.00 'BKMG13 ' 999. BPT NCEP 360 + 116.00 -15.00 'BKMG14 ' 999. BPT NCEP 360 + 118.00 -15.00 'BKMG15 ' 999. BPT NCEP 360 + 120.00 -15.00 'BKMG16 ' 999. BPT NCEP 360 + 122.00 -15.00 'BKMG17 ' 999. BPT NCEP 360 + 124.00 -15.00 'BKMG18 ' 999. BPT NCEP 360 + 124.50 -15.00 'BKMG19 ' 999. BPT NCEP 360 + 137.00 -15.00 'BKMG20 ' 999. BPT NCEP 360 + 139.00 -15.00 'BKMG21 ' 999. BPT NCEP 360 + 141.00 -15.00 'BKMG22 ' 999. BPT NCEP 360 + 145.00 -13.50 'BKMG23 ' 999. BPT NCEP 360 + 145.00 -13.00 'BKMG24 ' 999. BPT NCEP 360 + 145.00 -11.00 'BKMG25 ' 999. BPT NCEP 360 + 145.00 -9.00 'BKMG26 ' 999. BPT NCEP 360 + 145.00 -8.00 'BKMG27 ' 999. BPT NCEP 360 + 145.00 -3.00 'BKMG28 ' 999. BPT NCEP 360 + 145.00 -1.00 'BKMG29 ' 999. BPT NCEP 360 + 145.00 1.00 'BKMG30 ' 999. BPT NCEP 360 + 145.00 3.00 'BKMG31 ' 999. BPT NCEP 360 + 145.00 5.00 'BKMG32 ' 999. BPT NCEP 360 + 145.00 7.00 'BKMG33 ' 999. BPT NCEP 360 + 145.00 9.00 'BKMG34 ' 999. BPT NCEP 360 + 145.00 11.00 'BKMG35 ' 999. BPT NCEP 360 + 145.00 13.00 'BKMG36 ' 999. BPT NCEP 360 + 145.00 15.00 'BKMG37 ' 999. BPT NCEP 360 + 143.00 15.00 'BKMG38 ' 999. BPT NCEP 360 + 141.00 15.00 'BKMG39 ' 999. BPT NCEP 360 + 139.00 15.00 'BKMG40 ' 999. BPT NCEP 360 + 137.00 15.00 'BKMG41 ' 999. BPT NCEP 360 + 135.00 15.00 'BKMG42 ' 999. BPT NCEP 360 + 133.00 15.00 'BKMG43 ' 999. BPT NCEP 360 + 131.00 15.00 'BKMG44 ' 999. BPT NCEP 360 + 129.00 15.00 'BKMG45 ' 999. BPT NCEP 360 + 127.00 15.00 'BKMG46 ' 999. BPT NCEP 360 + 125.00 15.00 'BKMG47 ' 999. BPT NCEP 360 + 123.00 15.00 'BKMG48 ' 999. BPT NCEP 360 + 122.50 15.00 'BKMG49 ' 999. BPT NCEP 360 + 120.00 15.00 'BKMG50 ' 999. BPT NCEP 360 + 118.00 15.00 'BKMG51 ' 999. BPT NCEP 360 + 116.00 15.00 'BKMG52 ' 999. BPT NCEP 360 + 114.00 15.00 'BKMG53 ' 999. BPT NCEP 360 + 112.00 15.00 'BKMG54 ' 999. BPT NCEP 360 + 110.00 15.00 'BKMG55 ' 999. BPT NCEP 360 + 97.50 15.00 'BKMG56 ' 999. BPT NCEP 360 + 97.00 15.00 'BKMG57 ' 999. BPT NCEP 360 + 95.00 15.00 'BKMG58 ' 999. BPT NCEP 360 + 93.00 15.00 'BKMG59 ' 999. BPT NCEP 360 + 91.00 15.00 'BKMG60 ' 999. BPT NCEP 360 + 90.00 15.00 'BKMG61 ' 999. BPT NCEP 360 + 90.00 13.00 'BKMG62 ' 999. BPT NCEP 360 + 90.00 11.00 'BKMG63 ' 999. BPT NCEP 360 + 90.00 9.00 'BKMG64 ' 999. BPT NCEP 360 + 90.00 7.00 'BKMG65 ' 999. BPT NCEP 360 + 90.00 5.00 'BKMG66 ' 999. BPT NCEP 360 + 90.00 3.00 'BKMG67 ' 999. BPT NCEP 360 + 90.00 1.00 'BKMG68 ' 999. BPT NCEP 360 + 90.00 -1.00 'BKMG69 ' 999. BPT NCEP 360 + 90.00 -3.00 'BKMG70 ' 999. BPT NCEP 360 + 90.00 -5.00 'BKMG71 ' 999. BPT NCEP 360 + 90.00 -7.00 'BKMG72 ' 999. BPT NCEP 360 + 90.00 -9.00 'BKMG73 ' 999. BPT NCEP 360 + 90.00 -11.00 'BKMG74 ' 999. BPT NCEP 360 + 90.00 -13.00 'BKMG75 ' 999. BPT NCEP 360 +$ South America DAT + -77.50 6.26 '32488 ' 999. DAT DIMAR 45 + -77.74 3.52 '32487 ' 999. DAT DIMAR 45 + -72.22 12.35 '41193 ' 999. DAT DIMAR 120 +$ Japanese buoys DAT + 134.90 28.90 '21004 ' 999. XDT JAPAN 360 + 126.30 28.10 '22001 ' 999. XDT JAPAN 360 +$ South Korean buoys DAT + 129.78 36.35 '22106 ' 999. DAT SKOREA 100 + 126.33 33.00 '22107 ' 999. DAT SKOREA 100 +$ Africa DAT + 57.70 -20.45 'MAUR01 ' 999. DAT WMO 360 + 57.75 -20.10 'MAUR02 ' 999. DAT WMO 360 + 55.00 -25.00 'V14003 ' 999. VBY WMO 360 + 60.00 -25.00 'V14004 ' 999. VBY WMO 360 + 57.00 -20.00 'V14005 ' 999. VBY WMO 360 + 60.00 -20.00 'V14006 ' 999. VBY WMO 360 + 63.00 -20.00 'V14007 ' 999. VBY WMO 360 + 64.00 -19.00 'V14008 ' 999. VBY WMO 360 + 58.00 -18.00 'V14009 ' 999. VBY WMO 360 + 60.00 -16.00 'V14010 ' 999. VBY WMO 360 + 56.00 -10.00 'V14011 ' 999. VBY WMO 360 + 57.00 -11.00 'V14012 ' 999. VBY WMO 360 + 70.00 -25.00 'V14013 ' 999. VBY WMO 360 + 80.00 -25.00 'V14014 ' 999. VBY WMO 360 + 90.00 -25.00 'V53015 ' 999. VBY WMO 360 + 70.00 -15.00 'V14016 ' 999. VBY WMO 360 + 80.00 -15.00 'V14017 ' 999. VBY WMO 360 + 90.00 -15.00 'V53018 ' 999. VBY WMO 360 + 65.00 -5.00 'V23019 ' 999. VBY WMO 360 + 75.00 -5.00 'V23020 ' 999. VBY WMO 360 + 85.00 -5.00 'V23021 ' 999. VBY WMO 360 + 95.00 -5.00 'V23022 ' 999. VBY WMO 360 + 55.00 -5.00 'V14023 ' 999. VBY WMO 360 + 10.929 -17.328 'V14039 ' 999. VBY WMO 360 + 10.953 -18.097 'V14040 ' 999. VBY WMO 360 + 11.681 -19.001 'V14041 ' 999. VBY WMO 360 + 12.250 -20.069 'V14042 ' 999. VBY WMO 360 + 12.653 -20.967 'V14043 ' 999. VBY WMO 360 + 13.223 -21.930 'V14044 ' 999. VBY WMO 360 + 13.418 -22.624 'V14045 ' 999. VBY WMO 360 + 13.584 -23.613 'V14046 ' 999. VBY WMO 360 + 13.659 -24.375 'V14047 ' 999. VBY WMO 360 + 13.951 -25.245 'V14048 ' 999. VBY WMO 360 + 14.032 -26.084 'V14049 ' 999. VBY WMO 360 + 14.191 -26.728 'V14050 ' 999. VBY WMO 360 + 14.536 -27.593 'V14051 ' 999. VBY WMO 360 + 14.968 -28.341 'V14052 ' 999. VBY WMO 360 + 15.676 -29.085 'V14053 ' 999. VBY WMO 360 + 39.750 -5.000 'V14054 ' 999. VBY WMO 360 + 39.750 -5.583 'V14055 ' 999. VBY WMO 360 + 39.750 -6.217 'V14056 ' 999. VBY WMO 360 + 39.800 -6.750 'V14057 ' 999. VBY WMO 360 + 39.917 -7.083 'V14058 ' 999. VBY WMO 360 + 39.750 -7.300 'V14059 ' 999. VBY WMO 360 + 39.750 -8.167 'V14060 ' 999. VBY WMO 360 + 40.250 -8.833 'V14061 ' 999. VBY WMO 360 + 40.250 -9.167 'V14062 ' 999. VBY WMO 360 + 40.250 -9.917 'V14063 ' 999. VBY WMO 360 + 40.583 -10.333 'V14064 ' 999. VBY WMO 360 + 42.000 -11.000 'V14065 ' 999. VBY WMO 360 + 42.000 -12.000 'V14066 ' 999. VBY WMO 360 + 42.000 -13.000 'V14067 ' 999. VBY WMO 360 + 42.000 -14.000 'V14068 ' 999. VBY WMO 360 + 42.000 -15.000 'V14069 ' 999. VBY WMO 360 + 40.250 -17.000 'V14070 ' 999. VBY WMO 360 + 39.000 -17.833 'V14071 ' 999. VBY WMO 360 + 38.250 -18.000 'V14072 ' 999. VBY WMO 360 + 37.250 -19.000 'V14073 ' 999. VBY WMO 360 + 35.500 -20.000 'V14074 ' 999. VBY WMO 360 + 36.000 -21.000 'V14075 ' 999. VBY WMO 360 + 35.567 -21.917 'V14076 ' 999. VBY WMO 360 + 35.583 -22.000 'V14077 ' 999. VBY WMO 360 + 42.833 -22.000 'V14078 ' 999. VBY WMO 360 + 36.000 -23.000 'V14079 ' 999. VBY WMO 360 + 36.833 -24.000 'V14080 ' 999. VBY WMO 360 + 36.000 -25.000 'V14081 ' 999. VBY WMO 360 + 35.000 -25.500 'V14082 ' 999. VBY WMO 360 + 34.000 -26.000 'V14083 ' 999. VBY WMO 360 + 34.000 -27.000 'V14084 ' 999. VBY WMO 360 +$ Boundary Points for Kenya , Madagascar and Seychelles + 40.000 -8.000 'KNY51 ' 999. BPT WMO 360 + 42.000 -8.000 'KNY52 ' 999. BPT WMO 360 + 44.000 -8.000 'KNY53 ' 999. BPT WMO 360 + 46.000 -8.000 'KNY54 ' 999. BPT WMO 360 + 48.000 -8.000 'KNY55 ' 999. BPT WMO 360 + 50.000 -8.000 'KNY56 ' 999. BPT WMO 360 + 52.000 -8.000 'KNY57 ' 999. BPT WMO 360 + 54.000 -8.000 'KNY58 ' 999. BPT WMO 360 + 56.000 -8.000 'KNY59 ' 999. BPT WMO 360 + 58.000 -8.000 'KNY60 ' 999. BPT WMO 360 + 60.000 -8.000 'KNY61 ' 999. BPT WMO 360 + 62.000 -8.000 'KNY62 ' 999. BPT WMO 360 + 64.000 -8.000 'KNY63 ' 999. BPT WMO 360 + 66.000 -8.000 'KNY64 ' 999. BPT WMO 360 + 68.000 -8.000 'KNY65 ' 999. BPT WMO 360 + 70.000 -8.000 'KNY66 ' 999. BPT WMO 360 + 70.000 -6.000 'KNY67 ' 999. BPT WMO 360 + 70.000 -4.000 'KNY68 ' 999. BPT WMO 360 + 70.000 -2.000 'KNY69 ' 999. BPT WMO 360 + 70.000 0.000 'KNY70 ' 999. BPT WMO 360 + 70.000 2.000 'KNY71 ' 999. BPT WMO 360 + 70.000 4.000 'KNY72 ' 999. BPT WMO 360 + 70.000 6.000 'KNY73 ' 999. BPT WMO 360 + 70.000 8.000 'KNY74 ' 999. BPT WMO 360 + 68.000 8.000 'KNY75 ' 999. BPT WMO 360 + 66.000 8.000 'KNY76 ' 999. BPT WMO 360 + 64.000 8.000 'KNY77 ' 999. BPT WMO 360 + 62.000 8.000 'KNY78 ' 999. BPT WMO 360 + 60.000 8.000 'KNY79 ' 999. BPT WMO 360 + 58.000 8.000 'KNY80 ' 999. BPT WMO 360 + 56.000 8.000 'KNY81 ' 999. BPT WMO 360 + 54.000 8.000 'KNY82 ' 999. BPT WMO 360 + 52.000 8.000 'KNY83 ' 999. BPT WMO 360 + 42.000 -18.000 'MDG51 ' 999. BPT WMO 360 + 42.000 -20.000 'MDG52 ' 999. BPT WMO 360 + 42.000 -22.000 'MDG53 ' 999. BPT WMO 360 + 42.000 -24.000 'MDG54 ' 999. BPT WMO 360 + 42.000 -26.000 'MDG55 ' 999. BPT WMO 360 + 42.000 -28.000 'MDG56 ' 999. BPT WMO 360 + 42.000 -30.000 'MDG57 ' 999. BPT WMO 360 + 44.000 -30.000 'MDG58 ' 999. BPT WMO 360 + 46.000 -30.000 'MDG59 ' 999. BPT WMO 360 + 48.000 -30.000 'MDG60 ' 999. BPT WMO 360 + 50.000 -30.000 'MDG61 ' 999. BPT WMO 360 + 52.000 -30.000 'MDG62 ' 999. BPT WMO 360 + 54.000 -30.000 'MDG63 ' 999. BPT WMO 360 + 54.000 -28.000 'MDG64 ' 999. BPT WMO 360 + 54.000 -26.000 'MDG65 ' 999. BPT WMO 360 + 54.000 -24.000 'MDG66 ' 999. BPT WMO 360 + 54.000 -22.000 'MDG67 ' 999. BPT WMO 360 + 54.000 -20.000 'MDG68 ' 999. BPT WMO 360 + 54.000 -18.000 'MDG69 ' 999. BPT WMO 360 + 54.000 -16.000 'MDG70 ' 999. BPT WMO 360 + 54.000 -14.000 'MDG71 ' 999. BPT WMO 360 + 54.000 -12.000 'MDG72 ' 999. BPT WMO 360 + 54.000 -10.000 'MDG73 ' 999. BPT WMO 360 + 52.000 -10.000 'MDG74 ' 999. BPT WMO 360 + 50.000 -10.000 'MDG75 ' 999. BPT WMO 360 + 48.000 -10.000 'MDG76 ' 999. BPT WMO 360 + 46.000 -10.000 'MDG77 ' 999. BPT WMO 360 + 44.000 -10.000 'MDG78 ' 999. BPT WMO 360 + 44.000 -12.000 'MDG79 ' 999. BPT WMO 360 + 44.000 -14.000 'MDG80 ' 999. BPT WMO 360 + 42.000 -16.000 'MDG81 ' 999. BPT WMO 360 + 50.000 -10.000 'SYC51 ' 999. BPT WMO 360 + 52.000 -10.000 'SYC52 ' 999. BPT WMO 360 + 54.000 -10.000 'SYC53 ' 999. BPT WMO 360 + 56.000 -10.000 'SYC54 ' 999. BPT WMO 360 + 58.000 -10.000 'SYC55 ' 999. BPT WMO 360 + 60.000 -10.000 'SYC56 ' 999. BPT WMO 360 + 60.000 -8.000 'SYC57 ' 999. BPT WMO 360 + 60.000 -6.000 'SYC58 ' 999. BPT WMO 360 + 60.000 -4.000 'SYC59 ' 999. BPT WMO 360 + 60.000 -2.000 'SYC60 ' 999. BPT WMO 360 + 60.000 0.000 'SYC61 ' 999. BPT WMO 360 + 58.000 0.000 'SYC62 ' 999. BPT WMO 360 + 56.000 0.000 'SYC63 ' 999. BPT WMO 360 + 54.000 0.000 'SYC64 ' 999. BPT WMO 360 + 52.000 0.000 'SYC65 ' 999. BPT WMO 360 + 50.000 0.000 'SYC66 ' 999. BPT WMO 360 + 50.000 -2.000 'SYC67 ' 999. BPT WMO 360 + 50.000 -4.000 'SYC68 ' 999. BPT WMO 360 + 50.000 -6.000 'SYC69 ' 999. BPT WMO 360 + 50.000 -8.000 'SYC70 ' 999. BPT WMO 360 + 50.000 -10.000 'SYC71 ' 999. BPT WMO 360 +$ +$ Hawaii BPT +$ + -157.25 20.75 'HNL51 ' 999. IBP NCEP 45 + -157.806 20.160 'HNL52 ' 999. IBP NCEP 45 + -158.540 20.569 'HNL53 ' 999. IBP NCEP 45 + -159.274 20.978 'HNL54 ' 999. IBP NCEP 45 + -158.745 21.787 'HNL55 ' 999. IBP NCEP 45 + -158.170 22.665 'HNL56 ' 999. IBP NCEP 45 + -157.422 22.264 'HNL57 ' 999. IBP NCEP 45 + -156.674 21.874 'HNL58 ' 999. IBP NCEP 45 + -157.00 21.50 'HNL59 ' 999. IBP NCEP 45 +$ + -161.118 21.337 'HNL61 ' 999. IBP NCEP 45 + -160.707 22.494 'HNL62 ' 999. IBP NCEP 45 + -160.295 23.650 'HNL63 ' 999. IBP NCEP 45 + -159.275 23.198 'HNL64 ' 999. IBP NCEP 45 + -158.254 22.746 'HNL65 ' 999. IBP NCEP 45 + -158.759 21.799 'HNL66 ' 999. IBP NCEP 45 + -159.243 20.823 'HNL67 ' 999. IBP NCEP 45 + -160.180 21.080 'HNL68 ' 999. IBP NCEP 45 +$ +$ NE Atlantic boundary data +$ + -81.30 30.67 'CHS51 ' 999. IBP NCEP 45 + -80.50 30.67 'CHS52 ' 999. IBP NCEP 45 + -79.80 30.67 'CHS53 ' 999. IBP NCEP 45 + -79.00 30.67 'CHS54 ' 999. IBP NCEP 45 + -78.10 30.67 'CHS55 ' 999. IBP NCEP 45 + -78.10 31.4 'CHS56 ' 999. IBP NCEP 45 + -78.10 32.13 'CHS57 ' 999. IBP NCEP 45 + -78.10 32.86 'CHS58 ' 999. IBP NCEP 45 + -78.10 33.58 'CHS59 ' 999. IBP NCEP 45 + -78.50 33.58 'CHS60 ' 999. IBP NCEP 45 + -78.90 33.58 'CHS61 ' 999. IBP NCEP 45 +$ + -80.25 28.50 'JAX51 ' 999. IBP NCEP 45 + -79.50 28.50 'JAX52 ' 999. IBP NCEP 45 + -78.50 28.50 'JAX53 ' 999. IBP NCEP 45 + -78.50 29.75 'JAX54 ' 999. IBP NCEP 45 + -78.50 31.25 'JAX55 ' 999. IBP NCEP 45 + -78.50 32.50 'JAX56 ' 999. IBP NCEP 45 + -79.25 32.50 'JAX57 ' 999. IBP NCEP 45 + -80.00 32.50 'JAX58 ' 999. IBP NCEP 45 +$ + -80.20 28.70 'JXFL51 ' 999. IBP NCEP 45 + -79.70 28.70 'JXFL52 ' 999. IBP NCEP 45 + -79.30 28.70 'JXFL53 ' 999. IBP NCEP 45 + -79.30 29.20 'JXFL54 ' 999. IBP NCEP 45 + -79.30 29.70 'JXFL55 ' 999. IBP NCEP 45 + -79.30 30.20 'JXFL56 ' 999. IBP NCEP 45 + -79.30 30.70 'JXFL57 ' 999. IBP NCEP 45 + -79.30 31.20 'JXFL58 ' 999. IBP NCEP 45 + -79.30 31.60 'JXFL59 ' 999. IBP NCEP 45 + -79.30 32.00 'JXFL60 ' 999. IBP NCEP 45 + -79.80 32.00 'JXFL61 ' 999. IBP NCEP 45 + -80.20 32.00 'JXFL62 ' 999. IBP NCEP 45 + -80.50 32.00 'JXFL63 ' 999. IBP NCEP 45 +$ + -72.40 40.60 'MNE51 ' 999. IBP NCEP 45 + -72.40 40.20 'MNE52 ' 999. IBP NCEP 45 + -71.60 40.20 'MNE53 ' 999. IBP NCEP 45 + -70.80 40.20 'MNE54 ' 999. IBP NCEP 45 + -70.00 40.20 'MNE55 ' 999. IBP NCEP 45 + -69.20 40.20 'MNE56 ' 999. IBP NCEP 45 + -68.40 40.20 'MNE57 ' 999. IBP NCEP 45 + -67.60 40.20 'MNE58 ' 999. IBP NCEP 45 + -66.80 40.20 'MNE59 ' 999. IBP NCEP 45 + -66.80 41.00 'MNE60 ' 999. IBP NCEP 45 + -66.80 41.80 'MNE61 ' 999. IBP NCEP 45 + -66.80 42.60 'MNE62 ' 999. IBP NCEP 45 + -66.80 43.40 'MNE63 ' 999. IBP NCEP 45 + -66.80 44.20 'MNE64 ' 999. IBP NCEP 45 + -66.80 44.50 'MNE65 ' 999. IBP NCEP 45 +$ +$ Peurto Rico boundary points +$ + -68.00 17.00 'SJU51 ' 999. IBP NCEP 45 + -68.00 17.50 'SJU52 ' 999. IBP NCEP 45 + -68.00 18.00 'SJU53 ' 999. IBP NCEP 45 + -68.00 18.50 'SJU54 ' 999. IBP NCEP 45 + -68.00 19.00 'SJU55 ' 999. IBP NCEP 45 + -68.00 19.50 'SJU56 ' 999. IBP NCEP 45 + -67.50 19.50 'SJU57 ' 999. IBP NCEP 45 + -67.00 19.50 'SJU58 ' 999. IBP NCEP 45 + -66.50 19.50 'SJU59 ' 999. IBP NCEP 45 + -66.00 19.50 'SJU60 ' 999. IBP NCEP 45 + -65.50 19.50 'SJU61 ' 999. IBP NCEP 45 + -65.00 19.50 'SJU62 ' 999. IBP NCEP 45 + -64.50 19.50 'SJU63 ' 999. IBP NCEP 45 + -64.00 19.50 'SJU64 ' 999. IBP NCEP 45 + -64.00 19.00 'SJU65 ' 999. IBP NCEP 45 + -64.00 18.50 'SJU66 ' 999. IBP NCEP 45 + -64.00 18.00 'SJU67 ' 999. IBP NCEP 45 + -64.00 17.50 'SJU68 ' 999. IBP NCEP 45 + -64.00 17.00 'SJU69 ' 999. IBP NCEP 45 + -64.50 17.00 'SJU70 ' 999. IBP NCEP 45 + -65.00 17.00 'SJU71 ' 999. IBP NCEP 45 + -65.50 17.00 'SJU72 ' 999. IBP NCEP 45 + -66.00 17.00 'SJU73 ' 999. IBP NCEP 45 + -66.50 17.00 'SJU74 ' 999. IBP NCEP 45 + -67.00 17.00 'SJU75 ' 999. IBP NCEP 45 + -67.50 17.00 'SJU76 ' 999. IBP NCEP 45 + -68.00 17.00 'SJU77 ' 999. IBP NCEP 45 +$ +$ Bermuda boundary data +$ + -65.50 31.50 'BER51 ' 999. IBP NCEP 45 + -65.25 31.50 'BER52 ' 999. IBP NCEP 45 + -65.00 31.50 'BER53 ' 999. IBP NCEP 45 + -64.75 31.50 'BER54 ' 999. IBP NCEP 45 + -64.50 31.50 'BER55 ' 999. IBP NCEP 45 + -64.25 31.50 'BER56 ' 999. IBP NCEP 45 + -64.00 31.50 'BER57 ' 999. IBP NCEP 45 + -64.00 31.75 'BER58 ' 999. IBP NCEP 45 + -64.00 32.00 'BER59 ' 999. IBP NCEP 45 + -64.00 32.25 'BER60 ' 999. IBP NCEP 45 + -64.00 32.50 'BER61 ' 999. IBP NCEP 45 + -64.00 32.75 'BER62 ' 999. IBP NCEP 45 + -64.00 33.00 'BER63 ' 999. IBP NCEP 45 + -64.25 33.00 'BER64 ' 999. IBP NCEP 45 + -64.50 33.00 'BER65 ' 999. IBP NCEP 45 + -64.75 33.00 'BER66 ' 999. IBP NCEP 45 + -64.00 33.00 'BER67 ' 999. IBP NCEP 45 + -65.25 33.00 'BER68 ' 999. IBP NCEP 45 + -65.50 33.00 'BER69 ' 999. IBP NCEP 45 + -65.50 32.75 'BER70 ' 999. IBP NCEP 45 + -65.50 32.50 'BER71 ' 999. IBP NCEP 45 + -65.50 32.25 'BER72 ' 999. IBP NCEP 45 + -65.50 32.00 'BER73 ' 999. IBP NCEP 45 + -65.50 31.75 'BER74 ' 999. IBP NCEP 45 +$ +$ Gulf of Mexico boundary data +$ + -97. 23. 'SRH51 ' 999. IBP NCEP 45 + -96. 23. 'SRH52 ' 999. IBP NCEP 45 + -95. 23. 'SRH53 ' 999. IBP NCEP 45 + -94. 23. 'SRH54 ' 999. IBP NCEP 45 + -93. 23. 'SRH55 ' 999. IBP NCEP 45 + -92. 23. 'SRH56 ' 999. IBP NCEP 45 + -91. 23. 'SRH57 ' 999. IBP NCEP 45 + -90. 23. 'SRH58 ' 999. IBP NCEP 45 + -89. 23. 'SRH59 ' 999. IBP NCEP 45 + -88. 23. 'SRH60 ' 999. IBP NCEP 45 + -87. 23. 'SRH61 ' 999. IBP NCEP 45 + -86. 23. 'SRH62 ' 999. IBP NCEP 45 + -85. 23. 'SRH63 ' 999. IBP NCEP 45 + -79. 23. 'SRH64 ' 999. IBP NCEP 45 + -78. 23. 'SRH65 ' 999. IBP NCEP 45 + -78. 28. 'SRH66 ' 999. IBP NCEP 45 + -78. 29. 'SRH67 ' 999. IBP NCEP 45 + -78. 30. 'SRH68 ' 999. IBP NCEP 45 + -78. 31. 'SRH69 ' 999. IBP NCEP 45 + -78. 32. 'SRH70 ' 999. IBP NCEP 45 + -78. 33. 'SRH71 ' 999. IBP NCEP 45 +$ + -96.91 25.26 'BRO51 ' 999. IBP NCEP 45 + -96.41 25.26 'BRO52 ' 999. IBP NCEP 45 + -95.91 25.26 'BRO53 ' 999. IBP NCEP 45 + -95.41 25.26 'BRO54 ' 999. IBP NCEP 45 + -95.41 25.76 'BRO55 ' 999. IBP NCEP 45 + -95.41 26.26 'BRO56 ' 999. IBP NCEP 45 + -95.41 26.76 'BRO57 ' 999. IBP NCEP 45 + -95.41 27.26 'BRO58 ' 999. IBP NCEP 45 + -95.41 27.76 'BRO59 ' 999. IBP NCEP 45 + -95.41 28.26 'BRO60 ' 999. IBP NCEP 45 +$ + -96.87 27. 'HGX51 ' 999. IBP NCEP 45 + -96.37 27. 'HGX52 ' 999. IBP NCEP 45 + -95.87 27. 'HGX53 ' 999. IBP NCEP 45 + -95.37 27. 'HGX54 ' 999. IBP NCEP 45 + -94.87 27. 'HGX55 ' 999. IBP NCEP 45 + -94.37 27. 'HGX56 ' 999. IBP NCEP 45 + -93.87 27. 'HGX57 ' 999. IBP NCEP 45 + -93.37 27. 'HGX58 ' 999. IBP NCEP 45 + -93.37 27.5 'HGX59 ' 999. IBP NCEP 45 + -93.37 28. 'HGX60 ' 999. IBP NCEP 45 + -93.37 28.5 'HGX61 ' 999. IBP NCEP 45 + -93.37 29. 'HGX62 ' 999. IBP NCEP 45 +$ + -97.02 25.75 'CRP51 ' 999. IBP NCEP 45 + -96.73 25.75 'CRP52 ' 999. IBP NCEP 45 + -96.48 25.75 'CRP53 ' 999. IBP NCEP 45 + -96.16 25.76 'CRP54 ' 999. IBP NCEP 45 + -95.77 25.73 'CRP55 ' 999. IBP NCEP 45 + -95.39 25.73 'CRP56 ' 999. IBP NCEP 45 + -95.15 25.75 'CRP57 ' 999. IBP NCEP 45 + -95.14 25.98 'CRP58 ' 999. IBP NCEP 45 + -95.13 26.35 'CRP59 ' 999. IBP NCEP 45 + -95.13 26.68 'CRP60 ' 999. IBP NCEP 45 + -95.11 27.00 'CRP61 ' 999. IBP NCEP 45 + -95.10 27.35 'CRP62 ' 999. IBP NCEP 45 + -95.09 27.76 'CRP63 ' 999. IBP NCEP 45 + -95.09 28.10 'CRP64 ' 999. IBP NCEP 45 + -95.08 28.36 'CRP65 ' 999. IBP NCEP 45 + -95.07 28.64 'CRP66 ' 999. IBP NCEP 45 + -95.06 28.86 'CRP67 ' 999. IBP NCEP 45 + -95.05 29.09 'CRP68 ' 999. IBP NCEP 45 +$ + -97.00 26.00 'CCTX51 ' 999. IBP NCEP 45 + -96.50 26.00 'CCTX52 ' 999. IBP NCEP 45 + -96.00 26.00 'CCTX53 ' 999. IBP NCEP 45 + -95.50 26.00 'CCTX54 ' 999. IBP NCEP 45 + -95.00 26.00 'CCTX55 ' 999. IBP NCEP 45 + -95.00 26.50 'CCTX56 ' 999. IBP NCEP 45 + -95.00 27.00 'CCTX57 ' 999. IBP NCEP 45 + -95.00 27.50 'CCTX58 ' 999. IBP NCEP 45 + -95.00 28.00 'CCTX59 ' 999. IBP NCEP 45 + -95.00 28.50 'CCTX60 ' 999. IBP NCEP 45 + -95.00 28.80 'CCTX61 ' 999. IBP NCEP 45 +$ + -95.03 28.55 'LCH51 ' 999. IBP NCEP 45 + -95.03 28.23 'LCH52 ' 999. IBP NCEP 45 + -95.03 27.79 'LCH53 ' 999. IBP NCEP 45 + -95.03 27.41 'LCH54 ' 999. IBP NCEP 45 + -94.45 27.41 'LCH55 ' 999. IBP NCEP 45 + -93.53 27.41 'LCH56 ' 999. IBP NCEP 45 + -92.66 27.41 'LCH57 ' 999. IBP NCEP 45 + -91.69 27.41 'LCH58 ' 999. IBP NCEP 45 + -90.43 27.41 'LCH59 ' 999. IBP NCEP 45 + -90.43 27.74 'LCH60 ' 999. IBP NCEP 45 + -90.43 28.16 'LCH61 ' 999. IBP NCEP 45 + -90.43 28.52 'LCH62 ' 999. IBP NCEP 45 + -90.43 28.68 'LCH63 ' 999. IBP NCEP 45 +$ + -91.80 28.90 'LIX51 ' 999. IBP NCEP 45 + -91.80 28.50 'LIX52 ' 999. IBP NCEP 45 + -91.80 28. 'LIX53 ' 999. IBP NCEP 45 + -91.80 27.5 'LIX54 ' 999. IBP NCEP 45 + -91.30 27.5 'LIX55 ' 999. IBP NCEP 45 + -90.80 27.5 'LIX56 ' 999. IBP NCEP 45 + -90.30 27.5 'LIX57 ' 999. IBP NCEP 45 + -89.80 27.5 'LIX58 ' 999. IBP NCEP 45 + -89.30 27.5 'LIX59 ' 999. IBP NCEP 45 + -88.80 27.5 'LIX60 ' 999. IBP NCEP 45 + -88.30 27.5 'LIX61 ' 999. IBP NCEP 45 + -87.80 27.5 'LIX62 ' 999. IBP NCEP 45 + -87.40 27.5 'LIX63 ' 999. IBP NCEP 45 + -87.40 28. 'LIX64 ' 999. IBP NCEP 45 + -87.40 28.5 'LIX65 ' 999. IBP NCEP 45 + -87.40 29. 'LIX66 ' 999. IBP NCEP 45 + -87.40 29.5 'LIX67 ' 999. IBP NCEP 45 + -87.40 30. 'LIX68 ' 999. IBP NCEP 45 +$ + -89.10 28.80 'MOB51 ' 999. IBP NCEP 45 + -89.10 28.50 'MOB52 ' 999. IBP NCEP 45 + -88.40 28.50 'MOB53 ' 999. IBP NCEP 45 + -87.90 28.50 'MOB54 ' 999. IBP NCEP 45 + -87.40 28.50 'MOB55 ' 999. IBP NCEP 45 + -86.90 28.50 'MOB56 ' 999. IBP NCEP 45 + -86.40 28.50 'MOB57 ' 999. IBP NCEP 45 + -85.90 28.50 'MOB58 ' 999. IBP NCEP 45 + -85.90 29.00 'MOB59 ' 999. IBP NCEP 45 + -85.90 29.50 'MOB60 ' 999. IBP NCEP 45 + -85.90 30.00 'MOB61 ' 999. IBP NCEP 45 +$ + -87.35 28.35 'PCB51 ' 999. IBP NCEP 45 + -87.35 28.65 'PCB52 ' 999. IBP NCEP 45 + -87.35 28.95 'PCB53 ' 999. IBP NCEP 45 + -87.35 29.25 'PCB54 ' 999. IBP NCEP 45 + -87.35 29.55 'PCB55 ' 999. IBP NCEP 45 + -87.35 29.85 'PCB56 ' 999. IBP NCEP 45 + -87.35 30.15 'PCB57 ' 999. IBP NCEP 45 + -87.05 28.35 'PCB58 ' 999. IBP NCEP 45 + -86.75 28.35 'PCB59 ' 999. IBP NCEP 45 + -86.45 28.35 'PCB60 ' 999. IBP NCEP 45 + -86.15 28.35 'PCB61 ' 999. IBP NCEP 45 + -85.85 28.35 'PCB62 ' 999. IBP NCEP 45 + -85.55 28.35 'PCB63 ' 999. IBP NCEP 45 + -85.25 28.35 'PCB64 ' 999. IBP NCEP 45 + -84.95 28.35 'PCB65 ' 999. IBP NCEP 45 + -84.65 28.35 'PCB66 ' 999. IBP NCEP 45 + -84.35 28.35 'PCB67 ' 999. IBP NCEP 45 + -84.05 28.35 'PCB68 ' 999. IBP NCEP 45 + -83.75 28.35 'PCB69 ' 999. IBP NCEP 45 + -83.45 28.35 'PCB70 ' 999. IBP NCEP 45 + -83.00 28.35 'PCB71 ' 999. IBP NCEP 45 +$ + -84.80 29.45 'TBW51 ' 999. IBP NCEP 45 + -84.80 28.95 'TBW52 ' 999. IBP NCEP 45 + -84.80 28.45 'TBW53 ' 999. IBP NCEP 45 + -84.80 27.95 'TBW54 ' 999. IBP NCEP 45 + -84.80 27.45 'TBW55 ' 999. IBP NCEP 45 + -84.80 26.95 'TBW56 ' 999. IBP NCEP 45 + -84.80 26.45 'TBW57 ' 999. IBP NCEP 45 + -84.80 25.95 'TBW58 ' 999. IBP NCEP 45 + -84.80 25.45 'TBW59 ' 999. IBP NCEP 45 + -84.30 25.45 'TBW60 ' 999. IBP NCEP 45 + -83.80 25.45 'TBW61 ' 999. IBP NCEP 45 + -83.30 25.45 'TBW62 ' 999. IBP NCEP 45 + -82.80 25.45 'TBW63 ' 999. IBP NCEP 45 + -82.30 25.45 'TBW64 ' 999. IBP NCEP 45 +$ + -83.54 24.10 'MIA51 ' 999. IBP NCEP 45 + -83.54 24.82 'MIA52 ' 999. IBP NCEP 45 + -83.54 25.54 'MIA53 ' 999. IBP NCEP 45 + -83.54 26.26 'MIA54 ' 999. IBP NCEP 45 + -83.54 26.98 'MIA55 ' 999. IBP NCEP 45 + -83.54 27.70 'MIA56 ' 999. IBP NCEP 45 + -83.14 27.70 'MIA57 ' 999. IBP NCEP 45 + -80.01 27.70 'MIA58 ' 999. IBP NCEP 45 + -79.61 27.70 'MIA59 ' 999. IBP NCEP 45 + -79.21 27.70 'MIA60 ' 999. IBP NCEP 45 + -78.81 27.70 'MIA61 ' 999. IBP NCEP 45 + -78.41 27.70 'MIA62 ' 999. IBP NCEP 45 + -78.41 27.40 'MIA63 ' 999. IBP NCEP 45 + -78.41 26.50 'MIA64 ' 999. IBP NCEP 45 + -78.41 26.20 'MIA65 ' 999. IBP NCEP 45 + -78.41 25.90 'MIA66 ' 999. IBP NCEP 45 + -78.41 24.10 'MIA67 ' 999. IBP NCEP 45 + -78.923 24.10 'MIA68 ' 999. IBP NCEP 45 + -79.436 24.10 'MIA69 ' 999. IBP NCEP 45 + -79.949 24.10 'MIA70 ' 999. IBP NCEP 45 + -80.462 24.10 'MIA71 ' 999. IBP NCEP 45 + -80.975 24.10 'MIA72 ' 999. IBP NCEP 45 + -81.488 24.10 'MIA73 ' 999. IBP NCEP 45 + -82.001 24.10 'MIA74 ' 999. IBP NCEP 45 + -82.514 24.10 'MIA75 ' 999. IBP NCEP 45 + -83.027 24.10 'MIA76 ' 999. IBP NCEP 45 +$ + -81.00 30.00 'MLB51 ' 999. IBP NCEP 45 + -80.60 30.00 'MLB52 ' 999. IBP NCEP 45 + -80.20 30.00 'MLB53 ' 999. IBP NCEP 45 + -79.80 30.00 'MLB54 ' 999. IBP NCEP 45 + -79.40 30.00 'MLB55 ' 999. IBP NCEP 45 + -79.00 30.00 'MLB56 ' 999. IBP NCEP 45 + -78.51 30.00 'MLB57 ' 999. IBP NCEP 45 + -78.51 29.70 'MLB58 ' 999. IBP NCEP 45 + -78.51 29.40 'MLB59 ' 999. IBP NCEP 45 + -78.51 29.10 'MLB60 ' 999. IBP NCEP 45 + -78.51 28.80 'MLB61 ' 999. IBP NCEP 45 + -78.51 28.50 'MLB62 ' 999. IBP NCEP 45 + -78.51 28.20 'MLB63 ' 999. IBP NCEP 45 + -78.51 27.90 'MLB64 ' 999. IBP NCEP 45 + -78.51 27.60 'MLB65 ' 999. IBP NCEP 45 + -78.51 27.30 'MLB66 ' 999. IBP NCEP 45 + -79.90 26.50 'MLB67 ' 999. IBP NCEP 45 + -79.70 26.50 'MLB68 ' 999. IBP NCEP 45 + -79.50 26.50 'MLB69 ' 999. IBP NCEP 45 + -79.30 26.50 'MLB70 ' 999. IBP NCEP 45 + -79.10 26.50 'MLB71 ' 999. IBP NCEP 45 + -78.90 26.50 'MLB72 ' 999. IBP NCEP 45 +$ + -83.50 26.00 'KEY51 ' 999. IBP NCEP 45 + -83.50 25.75 'KEY52 ' 999. IBP NCEP 45 + -83.50 25.50 'KEY53 ' 999. IBP NCEP 45 + -83.50 25.25 'KEY54 ' 999. IBP NCEP 45 + -83.50 25.00 'KEY55 ' 999. IBP NCEP 45 + -83.50 24.75 'KEY56 ' 999. IBP NCEP 45 + -83.50 24.50 'KEY57 ' 999. IBP NCEP 45 + -83.50 24.25 'KEY58 ' 999. IBP NCEP 45 + -83.50 24.00 'KEY59 ' 999. IBP NCEP 45 + -83.50 23.75 'KEY60 ' 999. IBP NCEP 45 + -83.50 23.50 'KEY61 ' 999. IBP NCEP 45 + -83.50 23.25 'KEY62 ' 999. IBP NCEP 45 + -83.50 23.00 'KEY63 ' 999. IBP NCEP 45 + -79.80 23.00 'KEY64 ' 999. IBP NCEP 45 + -79.60 23.00 'KEY65 ' 999. IBP NCEP 45 + -79.40 23.00 'KEY66 ' 999. IBP NCEP 45 + -79.20 23.00 'KEY67 ' 999. IBP NCEP 45 + -79.00 23.00 'KEY68 ' 999. IBP NCEP 45 + -79.00 23.20 'KEY69 ' 999. IBP NCEP 45 + -79.00 23.40 'KEY70 ' 999. IBP NCEP 45 + -79.00 26.00 'KEY71 ' 999. IBP NCEP 45 + -79.20 26.00 'KEY72 ' 999. IBP NCEP 45 + -79.40 26.00 'KEY73 ' 999. IBP NCEP 45 + -79.60 26.00 'KEY74 ' 999. IBP NCEP 45 + -79.80 26.00 'KEY75 ' 999. IBP NCEP 45 + -80.00 26.00 'KEY76 ' 999. IBP NCEP 45 + -82.20 26.00 'KEY77 ' 999. IBP NCEP 45 + -82.45 26.00 'KEY78 ' 999. IBP NCEP 45 + -82.70 26.00 'KEY79 ' 999. IBP NCEP 45 + -82.95 26.00 'KEY80 ' 999. IBP NCEP 45 + -83.20 26.00 'KEY81 ' 999. IBP NCEP 45 +$ +$ NWPS Beta Testing sites (NW) +$ + -69.20 43.30 'NW-CAR51 ' 999. IBP NCEP 45 + -68.70 43.30 'NW-CAR52 ' 999. IBP NCEP 45 + -68.20 43.30 'NW-CAR53 ' 999. IBP NCEP 45 + -67.70 43.30 'NW-CAR54 ' 999. IBP NCEP 45 + -67.20 43.30 'NW-CAR55 ' 999. IBP NCEP 45 + -66.70 43.30 'NW-CAR56 ' 999. IBP NCEP 45 + -66.30 43.30 'NW-CAR57 ' 999. IBP NCEP 45 + -66.30 43.55 'NW-CAR58 ' 999. IBP NCEP 45 + -66.30 43.80 'NW-CAR59 ' 999. IBP NCEP 45 + -66.30 44.05 'NW-CAR60 ' 999. IBP NCEP 45 + -66.30 44.30 'NW-CAR61 ' 999. IBP NCEP 45 + -66.30 44.55 'NW-CAR62 ' 999. IBP NCEP 45 + -66.30 44.80 'NW-CAR63 ' 999. IBP NCEP 45 + -66.30 45.05 'NW-CAR64 ' 999. IBP NCEP 45 + -69.20 43.80 'NW-CAR65 ' 999. IBP NCEP 45 + -69.20 43.55 'NW-CAR66 ' 999. IBP NCEP 45 + -69.20 43.30 'NW-CAR67 ' 999. IBP NCEP 45 +$ + -72.50 40.45 'NW-BOX51 ' 999. IBP NCEP 45 + -72.00 40.45 'NW-BOX52 ' 999. IBP NCEP 45 + -71.50 40.45 'NW-BOX53 ' 999. IBP NCEP 45 + -71.00 40.45 'NW-BOX54 ' 999. IBP NCEP 45 + -70.50 40.45 'NW-BOX55 ' 999. IBP NCEP 45 + -70.00 40.45 'NW-BOX56 ' 999. IBP NCEP 45 + -69.50 40.45 'NW-BOX57 ' 999. IBP NCEP 45 + -69.00 40.45 'NW-BOX58 ' 999. IBP NCEP 45 + -68.85 40.45 'NW-BOX59 ' 999. IBP NCEP 45 + -68.85 40.95 'NW-BOX60 ' 999. IBP NCEP 45 + -68.85 41.45 'NW-BOX61 ' 999. IBP NCEP 45 + -68.85 41.95 'NW-BOX62 ' 999. IBP NCEP 45 + -68.85 42.45 'NW-BOX63 ' 999. IBP NCEP 45 + -68.85 42.95 'NW-BOX64 ' 999. IBP NCEP 45 + -68.85 43.25 'NW-BOX65 ' 999. IBP NCEP 45 + -69.35 43.25 'NW-BOX66 ' 999. IBP NCEP 45 + -69.85 43.25 'NW-BOX67 ' 999. IBP NCEP 45 + -70.35 43.25 'NW-BOX68 ' 999. IBP NCEP 45 + -70.48 43.25 'NW-BOX69 ' 999. IBP NCEP 45 + -72.50 40.70 'NW-BOX70 ' 999. IBP NCEP 45 + -72.50 41.20 'NW-BOX71 ' 999. IBP NCEP 45 +$ + -71.55 39.75 'NW-NYC51 ' 999. IBP NCEP 45 + -72.05 39.75 'NW-NYC52 ' 999. IBP NCEP 45 + -72.55 39.75 'NW-NYC53 ' 999. IBP NCEP 45 + -73.05 39.75 'NW-NYC54 ' 999. IBP NCEP 45 + -73.55 39.75 'NW-NYC55 ' 999. IBP NCEP 45 + -74.05 39.75 'NW-NYC56 ' 999. IBP NCEP 45 + -71.05 39.75 'NW-NYC57 ' 999. IBP NCEP 45 + -71.05 40.25 'NW-NYC58 ' 999. IBP NCEP 45 + -71.05 40.75 'NW-NYC59 ' 999. IBP NCEP 45 + -71.05 41.25 'NW-NYC60 ' 999. IBP NCEP 45 + -71.05 41.38 'NW-NYC61 ' 999. IBP NCEP 45 +$ + -75.25 38.20 'NW-PHI51 ' 999. IBP NCEP 45 + -74.75 38.20 'NW-PHI52 ' 999. IBP NCEP 45 + -74.25 38.20 'NW-PHI53 ' 999. IBP NCEP 45 + -73.75 38.20 'NW-PHI54 ' 999. IBP NCEP 45 + -73.35 38.20 'NW-PHI55 ' 999. IBP NCEP 45 + -73.35 38.60 'NW-PHI56 ' 999. IBP NCEP 45 + -73.35 39.10 'NW-PHI57 ' 999. IBP NCEP 45 + -73.35 39.60 'NW-PHI58 ' 999. IBP NCEP 45 + -73.35 40.10 'NW-PHI59 ' 999. IBP NCEP 45 + -73.35 40.60 'NW-PHI60 ' 999. IBP NCEP 45 +$ + -75.40 36.75 'NW-LWX51 ' 999. IBP NCEP 45 + -75.65 36.75 'NW-LWX52 ' 999. IBP NCEP 45 + -75.90 36.75 'NW-LWX53 ' 999. IBP NCEP 45 + -75.40 37.00 'NW-LWX54 ' 999. IBP NCEP 45 + -75.40 37.25 'NW-LWX55 ' 999. IBP NCEP 45 + -75.40 37.50 'NW-LWX56 ' 999. IBP NCEP 45 + -75.40 37.75 'NW-LWX57 ' 999. IBP NCEP 45 +$ + -80.15 32.50 'NW-ILM51 ' 999. IBP NCEP 45 + -79.90 32.50 'NW-ILM52 ' 999. IBP NCEP 45 + -79.40 32.50 'NW-ILM53 ' 999. IBP NCEP 45 + -78.90 32.50 'NW-ILM54 ' 999. IBP NCEP 45 + -78.40 32.50 'NW-ILM55 ' 999. IBP NCEP 45 + -77.90 32.50 'NW-ILM56 ' 999. IBP NCEP 45 + -77.40 32.50 'NW-ILM57 ' 999. IBP NCEP 45 + -76.90 32.50 'NW-ILM58 ' 999. IBP NCEP 45 + -76.50 32.50 'NW-ILM59 ' 999. IBP NCEP 45 + -76.50 33.00 'NW-ILM60 ' 999. IBP NCEP 45 + -76.50 33.50 'NW-ILM61 ' 999. IBP NCEP 45 + -76.50 34.00 'NW-ILM62 ' 999. IBP NCEP 45 + -76.50 34.50 'NW-ILM63 ' 999. IBP NCEP 45 +$ + -70.86 42.40 'NW-GYX51 ' 999. IBP NCEP 45 + -70.36 42.40 'NW-GYX52 ' 999. IBP NCEP 45 + -69.86 42.40 'NW-GYX53 ' 999. IBP NCEP 45 + -69.36 42.40 'NW-GYX54 ' 999. IBP NCEP 45 + -68.86 42.40 'NW-GYX55 ' 999. IBP NCEP 45 + -68.36 42.40 'NW-GYX56 ' 999. IBP NCEP 45 + -67.86 42.40 'NW-GYX57 ' 999. IBP NCEP 45 + -67.85 42.40 'NW-GYX58 ' 999. IBP NCEP 45 + -67.85 42.90 'NW-GYX59 ' 999. IBP NCEP 45 + -67.85 43.40 'NW-GYX60 ' 999. IBP NCEP 45 + -67.85 43.90 'NW-GYX61 ' 999. IBP NCEP 45 + -67.85 44.40 'NW-GYX62 ' 999. IBP NCEP 45 +$ + -77.91 33.85 'NW-MHX51 ' 999. IBP NCEP 45 + -77.41 33.85 'NW-MHX52 ' 999. IBP NCEP 45 + -76.91 33.85 'NW-MHX53 ' 999. IBP NCEP 45 + -76.41 33.85 'NW-MHX54 ' 999. IBP NCEP 45 + -75.91 33.85 'NW-MHX55 ' 999. IBP NCEP 45 + -75.41 33.85 'NW-MHX56 ' 999. IBP NCEP 45 + -74.91 33.85 'NW-MHX57 ' 999. IBP NCEP 45 + -74.75 33.85 'NW-MHX58 ' 999. IBP NCEP 45 + -74.75 34.35 'NW-MHX59 ' 999. IBP NCEP 45 + -74.75 34.85 'NW-MHX60 ' 999. IBP NCEP 45 + -74.75 35.35 'NW-MHX61 ' 999. IBP NCEP 45 + -74.75 35.85 'NW-MHX62 ' 999. IBP NCEP 45 + -74.75 36.35 'NW-MHX63 ' 999. IBP NCEP 45 + -74.75 36.60 'NW-MHX64 ' 999. IBP NCEP 45 + -75.25 36.60 'NW-MHX65 ' 999. IBP NCEP 45 + -75.75 36.60 'NW-MHX66 ' 999. IBP NCEP 45 + -75.83 36.60 'NW-MHX67 ' 999. IBP NCEP 45 +$ + -74.25 39.50 'NW-AKQ51 ' 999. IBP NCEP 45 + -74.25 39.00 'NW-AKQ52 ' 999. IBP NCEP 45 + -74.25 38.50 'NW-AKQ53 ' 999. IBP NCEP 45 + -74.25 38.00 'NW-AKQ54 ' 999. IBP NCEP 45 + -74.25 37.50 'NW-AKQ55 ' 999. IBP NCEP 45 + -74.25 37.00 'NW-AKQ56 ' 999. IBP NCEP 45 + -74.25 36.50 'NW-AKQ57 ' 999. IBP NCEP 45 + -74.25 36.00 'NW-AKQ58 ' 999. IBP NCEP 45 + -74.25 35.80 'NW-AKQ59 ' 999. IBP NCEP 45 + -74.50 35.80 'NW-AKQ60 ' 999. IBP NCEP 45 + -75.00 35.80 'NW-AKQ61 ' 999. IBP NCEP 45 + -75.50 35.80 'NW-AKQ62 ' 999. IBP NCEP 45 +$ + -119.00 32.08 'NW-SGX51 ' 999. IBP NCEP 45 + -119.00 32.33 'NW-SGX52 ' 999. IBP NCEP 45 + -119.00 32.58 'NW-SGX53 ' 999. IBP NCEP 45 + -119.00 32.83 'NW-SGX54 ' 999. IBP NCEP 45 + -119.00 33.08 'NW-SGX55 ' 999. IBP NCEP 45 + -119.00 33.33 'NW-SGX56 ' 999. IBP NCEP 45 + -119.00 33.58 'NW-SGX57 ' 999. IBP NCEP 45 + -119.00 33.82 'NW-SGX58 ' 999. IBP NCEP 45 + -118.75 33.82 'NW-SGX59 ' 999. IBP NCEP 45 + -118.50 33.82 'NW-SGX60 ' 999. IBP NCEP 45 + -116.93 32.08 'NW-SGX61 ' 999. IBP NCEP 45 + -117.00 32.08 'NW-SGX62 ' 999. IBP NCEP 45 + -117.25 32.08 'NW-SGX63 ' 999. IBP NCEP 45 + -117.50 32.08 'NW-SGX64 ' 999. IBP NCEP 45 + -117.75 32.08 'NW-SGX65 ' 999. IBP NCEP 45 + -118.00 32.08 'NW-SGX66 ' 999. IBP NCEP 45 + -118.25 32.08 'NW-SGX67 ' 999. IBP NCEP 45 + -118.50 32.08 'NW-SGX68 ' 999. IBP NCEP 45 + -118.75 32.08 'NW-SGX69 ' 999. IBP NCEP 45 +$ + -123.36 32.60 'NW-LOX51 ' 999. IBP NCEP 45 + -123.36 33.10 'NW-LOX52 ' 999. IBP NCEP 45 + -123.36 33.60 'NW-LOX53 ' 999. IBP NCEP 45 + -123.36 34.10 'NW-LOX54 ' 999. IBP NCEP 45 + -123.36 34.60 'NW-LOX55 ' 999. IBP NCEP 45 + -123.36 35.10 'NW-LOX56 ' 999. IBP NCEP 45 + -123.36 35.60 'NW-LOX57 ' 999. IBP NCEP 45 + -123.36 36.10 'NW-LOX58 ' 999. IBP NCEP 45 + -123.36 36.10 'NW-LOX59 ' 999. IBP NCEP 45 + -122.86 36.10 'NW-LOX60 ' 999. IBP NCEP 45 + -122.36 36.10 'NW-LOX61 ' 999. IBP NCEP 45 + -121.86 36.10 'NW-LOX62 ' 999. IBP NCEP 45 + -123.36 32.60 'NW-LOX63 ' 999. IBP NCEP 45 + -122.86 32.60 'NW-LOX64 ' 999. IBP NCEP 45 + -122.36 32.60 'NW-LOX65 ' 999. IBP NCEP 45 + -121.86 32.60 'NW-LOX66 ' 999. IBP NCEP 45 + -121.36 32.60 'NW-LOX67 ' 999. IBP NCEP 45 + -120.86 32.60 'NW-LOX68 ' 999. IBP NCEP 45 + -120.36 32.60 'NW-LOX69 ' 999. IBP NCEP 45 + -119.86 32.60 'NW-LOX70 ' 999. IBP NCEP 45 + -119.36 32.60 'NW-LOX71 ' 999. IBP NCEP 45 + -118.86 32.60 'NW-LOX72 ' 999. IBP NCEP 45 + -118.36 32.60 'NW-LOX73 ' 999. IBP NCEP 45 + -117.86 32.60 'NW-LOX74 ' 999. IBP NCEP 45 + -117.36 32.60 'NW-LOX75 ' 999. IBP NCEP 45 +$ + -125.80 39.40 'NW-MTR51 ' 999. IBP NCEP 45 + -125.80 38.90 'NW-MTR52 ' 999. IBP NCEP 45 + -125.80 38.40 'NW-MTR53 ' 999. IBP NCEP 45 + -125.80 37.90 'NW-MTR54 ' 999. IBP NCEP 45 + -125.80 37.40 'NW-MTR55 ' 999. IBP NCEP 45 + -125.80 36.90 'NW-MTR56 ' 999. IBP NCEP 45 + -125.80 36.40 'NW-MTR57 ' 999. IBP NCEP 45 + -125.80 35.90 'NW-MTR58 ' 999. IBP NCEP 45 + -125.80 35.40 'NW-MTR59 ' 999. IBP NCEP 45 + -125.80 35.00 'NW-MTR60 ' 999. IBP NCEP 45 + -125.30 35.00 'NW-MTR61 ' 999. IBP NCEP 45 + -124.80 35.00 'NW-MTR62 ' 999. IBP NCEP 45 + -124.30 35.00 'NW-MTR63 ' 999. IBP NCEP 45 + -123.80 35.00 'NW-MTR64 ' 999. IBP NCEP 45 + -123.30 35.00 'NW-MTR65 ' 999. IBP NCEP 45 + -122.80 35.00 'NW-MTR66 ' 999. IBP NCEP 45 + -122.30 35.00 'NW-MTR67 ' 999. IBP NCEP 45 + -121.80 35.00 'NW-MTR68 ' 999. IBP NCEP 45 + -121.30 35.00 'NW-MTR69 ' 999. IBP NCEP 45 + -120.80 35.00 'NW-MTR70 ' 999. IBP NCEP 45 + -125.80 39.40 'NW-MTR71 ' 999. IBP NCEP 45 + -125.30 39.40 'NW-MTR72 ' 999. IBP NCEP 45 + -124.80 39.40 'NW-MTR73 ' 999. IBP NCEP 45 + -124.30 39.40 'NW-MTR74 ' 999. IBP NCEP 45 + -124.05 39.40 'NW-MTR75 ' 999. IBP NCEP 45 +$ + -127.30 41.00 'NW-MFR51 ' 999. IBP NCEP 45 + -127.30 41.50 'NW-MFR52 ' 999. IBP NCEP 45 + -127.30 42.00 'NW-MFR53 ' 999. IBP NCEP 45 + -127.30 42.50 'NW-MFR54 ' 999. IBP NCEP 45 + -127.30 43.00 'NW-MFR55 ' 999. IBP NCEP 45 + -127.30 43.50 'NW-MFR56 ' 999. IBP NCEP 45 + -127.30 44.00 'NW-MFR57 ' 999. IBP NCEP 45 + -127.30 44.45 'NW-MFR58 ' 999. IBP NCEP 45 + -126.80 44.45 'NW-MFR59 ' 999. IBP NCEP 45 + -126.30 44.45 'NW-MFR60 ' 999. IBP NCEP 45 + -125.80 44.45 'NW-MFR61 ' 999. IBP NCEP 45 + -125.30 44.45 'NW-MFR62 ' 999. IBP NCEP 45 + -124.80 44.45 'NW-MFR63 ' 999. IBP NCEP 45 + -124.30 44.45 'NW-MFR64 ' 999. IBP NCEP 45 + -124.30 41.00 'NW-MFR65 ' 999. IBP NCEP 45 + -124.80 41.00 'NW-MFR66 ' 999. IBP NCEP 45 + -125.30 41.00 'NW-MFR67 ' 999. IBP NCEP 45 + -125.80 41.00 'NW-MFR68 ' 999. IBP NCEP 45 + -126.30 41.00 'NW-MFR69 ' 999. IBP NCEP 45 + -126.80 41.00 'NW-MFR70 ' 999. IBP NCEP 45 + -127.30 41.00 'NW-MFR71 ' 999. IBP NCEP 45 +$ + -126.28 43.50 'NW-PQR51 ' 999. IBP NCEP 45 + -126.28 44.00 'NW-PQR52 ' 999. IBP NCEP 45 + -126.28 44.50 'NW-PQR53 ' 999. IBP NCEP 45 + -126.28 45.00 'NW-PQR54 ' 999. IBP NCEP 45 + -126.28 45.50 'NW-PQR55 ' 999. IBP NCEP 45 + -126.28 46.00 'NW-PQR56 ' 999. IBP NCEP 45 + -126.28 46.50 'NW-PQR57 ' 999. IBP NCEP 45 + -126.28 47.00 'NW-PQR58 ' 999. IBP NCEP 45 + -126.28 47.15 'NW-PQR59 ' 999. IBP NCEP 45 + -125.78 47.15 'NW-PQR60 ' 999. IBP NCEP 45 + -125.28 47.15 'NW-PQR61 ' 999. IBP NCEP 45 + -124.78 47.15 'NW-PQR62 ' 999. IBP NCEP 45 + -124.28 47.15 'NW-PQR63 ' 999. IBP NCEP 45 + -124.30 43.50 'NW-PQR64 ' 999. IBP NCEP 45 + -124.80 43.50 'NW-PQR65 ' 999. IBP NCEP 45 + -125.30 43.50 'NW-PQR66 ' 999. IBP NCEP 45 + -125.80 43.50 'NW-PQR67 ' 999. IBP NCEP 45 +$ + -127.00 46.10 'NW-SEW51 ' 999. IBP NCEP 45 + -127.00 46.60 'NW-SEW52 ' 999. IBP NCEP 45 + -127.00 47.10 'NW-SEW53 ' 999. IBP NCEP 45 + -127.00 47.60 'NW-SEW54 ' 999. IBP NCEP 45 + -127.00 48.10 'NW-SEW55 ' 999. IBP NCEP 45 + -127.00 48.60 'NW-SEW56 ' 999. IBP NCEP 45 + -127.00 49.10 'NW-SEW57 ' 999. IBP NCEP 45 + -127.00 49.42 'NW-SEW58 ' 999. IBP NCEP 45 + -126.75 49.42 'NW-SEW59 ' 999. IBP NCEP 45 + -124.16 46.10 'NW-SEW60 ' 999. IBP NCEP 45 + -124.41 46.10 'NW-SEW61 ' 999. IBP NCEP 45 + -124.91 46.10 'NW-SEW62 ' 999. IBP NCEP 45 + -125.41 46.10 'NW-SEW63 ' 999. IBP NCEP 45 + -125.91 46.10 'NW-SEW64 ' 999. IBP NCEP 45 + -126.41 46.10 'NW-SEW65 ' 999. IBP NCEP 45 + -126.91 46.10 'NW-SEW66 ' 999. IBP NCEP 45 +$ + -126.27 38.40 'NW-EKA51 ' 999. IBP NCEP 45 + -126.27 38.90 'NW-EKA52 ' 999. IBP NCEP 45 + -126.27 39.40 'NW-EKA53 ' 999. IBP NCEP 45 + -126.27 39.90 'NW-EKA54 ' 999. IBP NCEP 45 + -126.27 40.40 'NW-EKA55 ' 999. IBP NCEP 45 + -126.27 40.90 'NW-EKA56 ' 999. IBP NCEP 45 + -126.27 41.40 'NW-EKA57 ' 999. IBP NCEP 45 + -126.27 41.90 'NW-EKA58 ' 999. IBP NCEP 45 + -126.27 42.20 'NW-EKA59 ' 999. IBP NCEP 45 + -125.77 42.20 'NW-EKA60 ' 999. IBP NCEP 45 + -125.27 42.20 'NW-EKA61 ' 999. IBP NCEP 45 + -124.77 42.20 'NW-EKA62 ' 999. IBP NCEP 45 + -124.64 42.20 'NW-EKA63 ' 999. IBP NCEP 45 + -123.70 38.40 'NW-EKA64 ' 999. IBP NCEP 45 + -124.20 38.40 'NW-EKA65 ' 999. IBP NCEP 45 + -124.70 38.40 'NW-EKA66 ' 999. IBP NCEP 45 + -125.20 38.40 'NW-EKA67 ' 999. IBP NCEP 45 + -125.70 38.40 'NW-EKA68 ' 999. IBP NCEP 45 + -126.20 38.40 'NW-EKA69 ' 999. IBP NCEP 45 + -126.27 38.40 'NW-EKA70 ' 999. IBP NCEP 45 +$ + -161.50 18.07 'NW-HFO51 ' 999. IBP NCEP 45 + -161.50 18.57 'NW-HFO52 ' 999. IBP NCEP 45 + -161.50 19.07 'NW-HFO53 ' 999. IBP NCEP 45 + -161.50 19.57 'NW-HFO54 ' 999. IBP NCEP 45 + -161.50 20.07 'NW-HFO55 ' 999. IBP NCEP 45 + -161.50 20.57 'NW-HFO56 ' 999. IBP NCEP 45 + -161.50 21.07 'NW-HFO57 ' 999. IBP NCEP 45 + -161.50 21.57 'NW-HFO58 ' 999. IBP NCEP 45 + -161.50 22.07 'NW-HFO59 ' 999. IBP NCEP 45 + -161.50 22.57 'NW-HFO60 ' 999. IBP NCEP 45 + -161.50 23.09 'NW-HFO61 ' 999. IBP NCEP 45 + -161.50 23.09 'NW-HFO62 ' 999. IBP NCEP 45 + -161.00 23.09 'NW-HFO63 ' 999. IBP NCEP 45 + -160.50 23.09 'NW-HFO64 ' 999. IBP NCEP 45 + -160.00 23.09 'NW-HFO65 ' 999. IBP NCEP 45 + -159.50 23.09 'NW-HFO66 ' 999. IBP NCEP 45 + -159.00 23.09 'NW-HFO67 ' 999. IBP NCEP 45 + -158.50 23.09 'NW-HFO68 ' 999. IBP NCEP 45 + -158.00 23.09 'NW-HFO69 ' 999. IBP NCEP 45 + -157.50 23.09 'NW-HFO70 ' 999. IBP NCEP 45 + -157.00 23.09 'NW-HFO71 ' 999. IBP NCEP 45 + -156.50 23.09 'NW-HFO72 ' 999. IBP NCEP 45 + -156.00 23.09 'NW-HFO73 ' 999. IBP NCEP 45 + -155.50 23.09 'NW-HFO74 ' 999. IBP NCEP 45 + -155.00 23.09 'NW-HFO75 ' 999. IBP NCEP 45 + -154.50 23.09 'NW-HFO76 ' 999. IBP NCEP 45 + -153.90 23.09 'NW-HFO77 ' 999. IBP NCEP 45 + -153.90 23.00 'NW-HFO78 ' 999. IBP NCEP 45 + -153.90 22.50 'NW-HFO79 ' 999. IBP NCEP 45 + -153.90 22.00 'NW-HFO80 ' 999. IBP NCEP 45 + -153.90 21.50 'NW-HFO81 ' 999. IBP NCEP 45 + -153.90 21.00 'NW-HFO82 ' 999. IBP NCEP 45 + -153.90 20.50 'NW-HFO83 ' 999. IBP NCEP 45 + -153.90 20.00 'NW-HFO84 ' 999. IBP NCEP 45 + -153.90 19.50 'NW-HFO85 ' 999. IBP NCEP 45 + -153.90 19.00 'NW-HFO86 ' 999. IBP NCEP 45 + -153.90 18.50 'NW-HFO87 ' 999. IBP NCEP 45 + -153.90 18.07 'NW-HFO88 ' 999. IBP NCEP 45 + -154.00 18.07 'NW-HFO89 ' 999. IBP NCEP 45 + -154.50 18.07 'NW-HFO90 ' 999. IBP NCEP 45 + -155.00 18.07 'NW-HFO91 ' 999. IBP NCEP 45 + -155.50 18.07 'NW-HFO92 ' 999. IBP NCEP 45 + -156.00 18.07 'NW-HFO93 ' 999. IBP NCEP 45 + -156.50 18.07 'NW-HFO94 ' 999. IBP NCEP 45 + -157.00 18.07 'NW-HFO95 ' 999. IBP NCEP 45 + -157.50 18.07 'NW-HFO96 ' 999. IBP NCEP 45 + -158.00 18.07 'NW-HFO97 ' 999. IBP NCEP 45 + -158.50 18.07 'NW-HFO98 ' 999. IBP NCEP 45 + -159.00 18.07 'NW-HFO99 ' 999. IBP NCEP 45 + -159.50 18.07 'NW-HFO100 ' 999. IBP NCEP 45 + -160.00 18.07 'NW-HFO101 ' 999. IBP NCEP 45 + -160.50 18.07 'NW-HFO102 ' 999. IBP NCEP 45 + -161.00 18.07 'NW-HFO103 ' 999. IBP NCEP 45 +$ + -144.50 53.90 'NW-AJK51 ' 999. IBP NCEP 45 + -144.50 54.00 'NW-AJK52 ' 999. IBP NCEP 45 + -144.50 54.50 'NW-AJK53 ' 999. IBP NCEP 45 + -144.50 55.00 'NW-AJK54 ' 999. IBP NCEP 45 + -144.50 55.50 'NW-AJK55 ' 999. IBP NCEP 45 + -144.50 56.00 'NW-AJK56 ' 999. IBP NCEP 45 + -144.50 56.50 'NW-AJK57 ' 999. IBP NCEP 45 + -144.50 57.00 'NW-AJK58 ' 999. IBP NCEP 45 + -144.50 57.50 'NW-AJK59 ' 999. IBP NCEP 45 + -144.50 58.00 'NW-AJK60 ' 999. IBP NCEP 45 + -144.50 58.50 'NW-AJK61 ' 999. IBP NCEP 45 + -144.50 59.00 'NW-AJK62 ' 999. IBP NCEP 45 + -144.50 59.50 'NW-AJK63 ' 999. IBP NCEP 45 + -144.50 60.00 'NW-AJK64 ' 999. IBP NCEP 45 + -131.00 53.90 'NW-AJK65 ' 999. IBP NCEP 45 + -131.50 53.90 'NW-AJK66 ' 999. IBP NCEP 45 + -133.50 53.90 'NW-AJK67 ' 999. IBP NCEP 45 + -134.00 53.90 'NW-AJK68 ' 999. IBP NCEP 45 + -134.50 53.90 'NW-AJK69 ' 999. IBP NCEP 45 + -135.00 53.90 'NW-AJK70 ' 999. IBP NCEP 45 + -135.50 53.90 'NW-AJK71 ' 999. IBP NCEP 45 + -136.00 53.90 'NW-AJK72 ' 999. IBP NCEP 45 + -136.50 53.90 'NW-AJK73 ' 999. IBP NCEP 45 + -137.00 53.90 'NW-AJK74 ' 999. IBP NCEP 45 + -137.50 53.90 'NW-AJK75 ' 999. IBP NCEP 45 + -138.00 53.90 'NW-AJK76 ' 999. IBP NCEP 45 + -138.50 53.90 'NW-AJK77 ' 999. IBP NCEP 45 + -139.00 53.90 'NW-AJK78 ' 999. IBP NCEP 45 + -139.50 53.90 'NW-AJK79 ' 999. IBP NCEP 45 + -140.00 53.90 'NW-AJK80 ' 999. IBP NCEP 45 + -140.50 53.90 'NW-AJK81 ' 999. IBP NCEP 45 + -141.00 53.90 'NW-AJK82 ' 999. IBP NCEP 45 + -141.50 53.90 'NW-AJK83 ' 999. IBP NCEP 45 + -142.00 53.90 'NW-AJK84 ' 999. IBP NCEP 45 + -142.50 53.90 'NW-AJK85 ' 999. IBP NCEP 45 + -143.00 53.90 'NW-AJK86 ' 999. IBP NCEP 45 + -143.50 53.90 'NW-AJK87 ' 999. IBP NCEP 45 + -144.00 53.90 'NW-AJK88 ' 999. IBP NCEP 45 + -144.50 53.90 'NW-AJK89 ' 999. IBP NCEP 45 +$ + -158.00 55.00 'NW-AER51 ' 999. IBP NCEP 45 + -158.00 55.50 'NW-AER52 ' 999. IBP NCEP 45 + -158.00 56.00 'NW-AER53 ' 999. IBP NCEP 45 + -158.00 57.75 'NW-AER54 ' 999. IBP NCEP 45 + -158.00 58.00 'NW-AER55 ' 999. IBP NCEP 45 + -142.85 59.85 'NW-AER56 ' 999. IBP NCEP 45 + -142.85 59.35 'NW-AER57 ' 999. IBP NCEP 45 + -142.85 58.85 'NW-AER58 ' 999. IBP NCEP 45 + -142.85 58.35 'NW-AER59 ' 999. IBP NCEP 45 + -142.85 57.85 'NW-AER60 ' 999. IBP NCEP 45 + -142.85 57.35 'NW-AER61 ' 999. IBP NCEP 45 + -142.85 56.85 'NW-AER62 ' 999. IBP NCEP 45 + -142.85 56.35 'NW-AER63 ' 999. IBP NCEP 45 + -142.85 55.85 'NW-AER64 ' 999. IBP NCEP 45 + -142.85 55.35 'NW-AER65 ' 999. IBP NCEP 45 + -142.85 55.00 'NW-AER66 ' 999. IBP NCEP 45 + -143.35 55.00 'NW-AER67 ' 999. IBP NCEP 45 + -143.85 55.00 'NW-AER68 ' 999. IBP NCEP 45 + -144.35 55.00 'NW-AER69 ' 999. IBP NCEP 45 + -144.85 55.00 'NW-AER70 ' 999. IBP NCEP 45 + -145.35 55.00 'NW-AER71 ' 999. IBP NCEP 45 + -145.85 55.00 'NW-AER72 ' 999. IBP NCEP 45 + -146.35 55.00 'NW-AER73 ' 999. IBP NCEP 45 + -146.85 55.00 'NW-AER74 ' 999. IBP NCEP 45 + -147.35 55.00 'NW-AER75 ' 999. IBP NCEP 45 + -147.85 55.00 'NW-AER76 ' 999. IBP NCEP 45 + -148.35 55.00 'NW-AER77 ' 999. IBP NCEP 45 + -148.85 55.00 'NW-AER78 ' 999. IBP NCEP 45 + -149.35 55.00 'NW-AER79 ' 999. IBP NCEP 45 + -149.85 55.00 'NW-AER80 ' 999. IBP NCEP 45 + -150.35 55.00 'NW-AER81 ' 999. IBP NCEP 45 + -150.85 55.00 'NW-AER82 ' 999. IBP NCEP 45 + -151.35 55.00 'NW-AER83 ' 999. IBP NCEP 45 + -151.85 55.00 'NW-AER84 ' 999. IBP NCEP 45 + -152.35 55.00 'NW-AER85 ' 999. IBP NCEP 45 + -152.85 55.00 'NW-AER86 ' 999. IBP NCEP 45 + -153.35 55.00 'NW-AER87 ' 999. IBP NCEP 45 + -153.85 55.00 'NW-AER88 ' 999. IBP NCEP 45 + -154.35 55.00 'NW-AER89 ' 999. IBP NCEP 45 + -154.85 55.00 'NW-AER90 ' 999. IBP NCEP 45 + -155.35 55.00 'NW-AER91 ' 999. IBP NCEP 45 + -155.85 55.00 'NW-AER92 ' 999. IBP NCEP 45 + -156.35 55.00 'NW-AER93 ' 999. IBP NCEP 45 + -156.85 55.00 'NW-AER94 ' 999. IBP NCEP 45 + -157.35 55.00 'NW-AER95 ' 999. IBP NCEP 45 + -157.85 55.00 'NW-AER96 ' 999. IBP NCEP 45 + -158.00 55.00 'NW-AER97 ' 999. IBP NCEP 45 +$ + -177.00 51.00 'NW-ALU51 ' 999. IBP NCEP 45 + -176.50 51.00 'NW-ALU52 ' 999. IBP NCEP 45 + -176.00 51.00 'NW-ALU53 ' 999. IBP NCEP 45 + -175.50 51.00 'NW-ALU54 ' 999. IBP NCEP 45 + -175.00 51.00 'NW-ALU55 ' 999. IBP NCEP 45 + -174.50 51.00 'NW-ALU56 ' 999. IBP NCEP 45 + -174.00 51.00 'NW-ALU57 ' 999. IBP NCEP 45 + -173.50 51.00 'NW-ALU58 ' 999. IBP NCEP 45 + -173.00 51.00 'NW-ALU59 ' 999. IBP NCEP 45 + -172.50 51.00 'NW-ALU60 ' 999. IBP NCEP 45 + -172.00 51.00 'NW-ALU61 ' 999. IBP NCEP 45 + -171.50 51.00 'NW-ALU62 ' 999. IBP NCEP 45 + -171.00 51.00 'NW-ALU63 ' 999. IBP NCEP 45 + -170.50 51.00 'NW-ALU64 ' 999. IBP NCEP 45 + -170.00 51.00 'NW-ALU65 ' 999. IBP NCEP 45 + -169.50 51.00 'NW-ALU66 ' 999. IBP NCEP 45 + -169.00 51.00 'NW-ALU67 ' 999. IBP NCEP 45 + -168.50 51.00 'NW-ALU68 ' 999. IBP NCEP 45 + -168.00 51.00 'NW-ALU69 ' 999. IBP NCEP 45 + -167.50 51.00 'NW-ALU70 ' 999. IBP NCEP 45 + -167.00 51.00 'NW-ALU71 ' 999. IBP NCEP 45 + -166.50 51.00 'NW-ALU72 ' 999. IBP NCEP 45 + -166.00 51.00 'NW-ALU73 ' 999. IBP NCEP 45 + -165.50 51.00 'NW-ALU74 ' 999. IBP NCEP 45 + -165.00 51.00 'NW-ALU75 ' 999. IBP NCEP 45 + -164.50 51.00 'NW-ALU76 ' 999. IBP NCEP 45 + -164.00 51.00 'NW-ALU77 ' 999. IBP NCEP 45 + -163.50 51.00 'NW-ALU78 ' 999. IBP NCEP 45 + -163.00 51.00 'NW-ALU79 ' 999. IBP NCEP 45 + -162.50 51.00 'NW-ALU80 ' 999. IBP NCEP 45 + -162.00 51.00 'NW-ALU81 ' 999. IBP NCEP 45 + -161.50 51.00 'NW-ALU82 ' 999. IBP NCEP 45 + -161.00 51.00 'NW-ALU83 ' 999. IBP NCEP 45 + -160.50 51.00 'NW-ALU84 ' 999. IBP NCEP 45 + -160.00 51.00 'NW-ALU85 ' 999. IBP NCEP 45 + -159.50 51.00 'NW-ALU86 ' 999. IBP NCEP 45 + -159.00 51.00 'NW-ALU87 ' 999. IBP NCEP 45 + -158.50 51.00 'NW-ALU88 ' 999. IBP NCEP 45 + -158.00 51.00 'NW-ALU89 ' 999. IBP NCEP 45 + -157.50 51.00 'NW-ALU90 ' 999. IBP NCEP 45 + -157.00 51.00 'NW-ALU91 ' 999. IBP NCEP 45 + -156.50 51.00 'NW-ALU92 ' 999. IBP NCEP 45 + -156.00 51.00 'NW-ALU93 ' 999. IBP NCEP 45 + -155.50 51.00 'NW-ALU94 ' 999. IBP NCEP 45 + -155.00 51.00 'NW-ALU95 ' 999. IBP NCEP 45 + -154.50 51.00 'NW-ALU96 ' 999. IBP NCEP 45 + -154.00 51.00 'NW-ALU97 ' 999. IBP NCEP 45 + -153.50 51.00 'NW-ALU98 ' 999. IBP NCEP 45 + -153.00 51.00 'NW-ALU99 ' 999. IBP NCEP 45 + -152.40 51.00 'NW-ALU100 ' 999. IBP NCEP 45 + -177.00 51.50 'NW-ALU101 ' 999. IBP NCEP 45 + -177.00 52.00 'NW-ALU102 ' 999. IBP NCEP 45 + -177.00 52.50 'NW-ALU103 ' 999. IBP NCEP 45 + -177.00 53.00 'NW-ALU104 ' 999. IBP NCEP 45 + -177.00 53.50 'NW-ALU105 ' 999. IBP NCEP 45 + -177.00 54.00 'NW-ALU106 ' 999. IBP NCEP 45 + -177.00 54.50 'NW-ALU107 ' 999. IBP NCEP 45 + -177.00 55.00 'NW-ALU108 ' 999. IBP NCEP 45 + -177.00 55.50 'NW-ALU109 ' 999. IBP NCEP 45 + -177.00 56.00 'NW-ALU110 ' 999. IBP NCEP 45 + -177.00 56.50 'NW-ALU111 ' 999. IBP NCEP 45 + -177.00 57.00 'NW-ALU112 ' 999. IBP NCEP 45 + -177.00 57.50 'NW-ALU113 ' 999. IBP NCEP 45 + -177.00 58.00 'NW-ALU114 ' 999. IBP NCEP 45 + -177.00 58.50 'NW-ALU115 ' 999. IBP NCEP 45 + -177.00 59.00 'NW-ALU116 ' 999. IBP NCEP 45 + -177.00 59.50 'NW-ALU117 ' 999. IBP NCEP 45 + -177.00 60.00 'NW-ALU118 ' 999. IBP NCEP 45 + -177.00 60.50 'NW-ALU119 ' 999. IBP NCEP 45 + -177.00 61.00 'NW-ALU120 ' 999. IBP NCEP 45 + -177.00 61.50 'NW-ALU121 ' 999. IBP NCEP 45 + -177.00 62.00 'NW-ALU122 ' 999. IBP NCEP 45 + -176.50 62.00 'NW-ALU123 ' 999. IBP NCEP 45 + -176.00 62.00 'NW-ALU124 ' 999. IBP NCEP 45 + -175.50 62.00 'NW-ALU125 ' 999. IBP NCEP 45 + -175.00 62.00 'NW-ALU126 ' 999. IBP NCEP 45 + -174.50 62.00 'NW-ALU127 ' 999. IBP NCEP 45 + -174.00 62.00 'NW-ALU128 ' 999. IBP NCEP 45 + -173.50 62.00 'NW-ALU129 ' 999. IBP NCEP 45 + -173.00 62.00 'NW-ALU130 ' 999. IBP NCEP 45 + -172.50 62.00 'NW-ALU131 ' 999. IBP NCEP 45 + -172.00 62.00 'NW-ALU132 ' 999. IBP NCEP 45 + -171.50 62.00 'NW-ALU133 ' 999. IBP NCEP 45 + -171.00 62.00 'NW-ALU134 ' 999. IBP NCEP 45 + -170.50 62.00 'NW-ALU135 ' 999. IBP NCEP 45 + -170.00 62.00 'NW-ALU136 ' 999. IBP NCEP 45 + -169.50 62.00 'NW-ALU137 ' 999. IBP NCEP 45 + -169.00 62.00 'NW-ALU138 ' 999. IBP NCEP 45 + -168.50 62.00 'NW-ALU139 ' 999. IBP NCEP 45 + -168.00 62.00 'NW-ALU140 ' 999. IBP NCEP 45 + -167.50 62.00 'NW-ALU141 ' 999. IBP NCEP 45 + -167.00 62.00 'NW-ALU142 ' 999. IBP NCEP 45 + -166.50 62.00 'NW-ALU143 ' 999. IBP NCEP 45 + -166.00 62.00 'NW-ALU144 ' 999. IBP NCEP 45 + -152.40 60.20 'NW-ALU145 ' 999. IBP NCEP 45 + -152.40 59.70 'NW-ALU146 ' 999. IBP NCEP 45 + -152.40 59.20 'NW-ALU147 ' 999. IBP NCEP 45 + -152.40 58.70 'NW-ALU148 ' 999. IBP NCEP 45 + -152.40 57.20 'NW-ALU149 ' 999. IBP NCEP 45 + -152.40 56.70 'NW-ALU150 ' 999. IBP NCEP 45 + -152.40 56.20 'NW-ALU151 ' 999. IBP NCEP 45 + -152.40 55.70 'NW-ALU152 ' 999. IBP NCEP 45 + -152.40 55.20 'NW-ALU153 ' 999. IBP NCEP 45 + -152.40 54.70 'NW-ALU154 ' 999. IBP NCEP 45 + -152.40 54.20 'NW-ALU155 ' 999. IBP NCEP 45 + -152.40 53.70 'NW-ALU156 ' 999. IBP NCEP 45 + -152.40 53.20 'NW-ALU157 ' 999. IBP NCEP 45 + -152.40 52.70 'NW-ALU158 ' 999. IBP NCEP 45 + -152.40 52.20 'NW-ALU159 ' 999. IBP NCEP 45 + -152.40 51.70 'NW-ALU160 ' 999. IBP NCEP 45 + -152.40 51.20 'NW-ALU161 ' 999. IBP NCEP 45 + -152.40 51.00 'NW-ALU162 ' 999. IBP NCEP 45 + -177.00 53.15 'NW-ALU163 ' 999. IBP NCEP 45 + -176.50 53.15 'NW-ALU164 ' 999. IBP NCEP 45 + -176.00 53.15 'NW-ALU165 ' 999. IBP NCEP 45 + -175.50 53.15 'NW-ALU166 ' 999. IBP NCEP 45 + -175.00 53.15 'NW-ALU167 ' 999. IBP NCEP 45 + -174.50 53.15 'NW-ALU168 ' 999. IBP NCEP 45 + -174.00 53.15 'NW-ALU169 ' 999. IBP NCEP 45 + -173.50 53.15 'NW-ALU170 ' 999. IBP NCEP 45 + -173.00 53.15 'NW-ALU171 ' 999. IBP NCEP 45 + -172.50 53.15 'NW-ALU172 ' 999. IBP NCEP 45 + -172.00 53.15 'NW-ALU173 ' 999. IBP NCEP 45 + -171.50 53.15 'NW-ALU174 ' 999. IBP NCEP 45 + -171.00 53.15 'NW-ALU175 ' 999. IBP NCEP 45 + -170.50 53.15 'NW-ALU176 ' 999. IBP NCEP 45 + -170.00 53.15 'NW-ALU177 ' 999. IBP NCEP 45 + -169.50 53.15 'NW-ALU178 ' 999. IBP NCEP 45 + -169.00 53.15 'NW-ALU179 ' 999. IBP NCEP 45 + -168.50 53.15 'NW-ALU180 ' 999. IBP NCEP 45 + -168.00 53.15 'NW-ALU181 ' 999. IBP NCEP 45 + -167.50 53.15 'NW-ALU182 ' 999. IBP NCEP 45 + -167.00 53.15 'NW-ALU183 ' 999. IBP NCEP 45 + -166.50 53.15 'NW-ALU184 ' 999. IBP NCEP 45 + -166.00 53.15 'NW-ALU185 ' 999. IBP NCEP 45 + -165.50 53.15 'NW-ALU186 ' 999. IBP NCEP 45 + -165.00 53.15 'NW-ALU187 ' 999. IBP NCEP 45 + -164.50 53.15 'NW-ALU188 ' 999. IBP NCEP 45 + -164.00 53.15 'NW-ALU189 ' 999. IBP NCEP 45 + -163.50 53.15 'NW-ALU190 ' 999. IBP NCEP 45 + -163.00 53.15 'NW-ALU191 ' 999. IBP NCEP 45 + -162.50 53.15 'NW-ALU192 ' 999. IBP NCEP 45 + -162.00 53.15 'NW-ALU193 ' 999. IBP NCEP 45 + -161.50 53.15 'NW-ALU194 ' 999. IBP NCEP 45 + -161.00 53.15 'NW-ALU195 ' 999. IBP NCEP 45 + -160.50 53.15 'NW-ALU196 ' 999. IBP NCEP 45 + -160.00 53.15 'NW-ALU197 ' 999. IBP NCEP 45 + -159.50 53.15 'NW-ALU198 ' 999. IBP NCEP 45 + -159.00 53.15 'NW-ALU199 ' 999. IBP NCEP 45 + -158.50 53.15 'NW-ALU200 ' 999. IBP NCEP 45 + -158.00 53.15 'NW-ALU201 ' 999. IBP NCEP 45 + -157.50 53.15 'NW-ALU202 ' 999. IBP NCEP 45 + -157.00 53.15 'NW-ALU203 ' 999. IBP NCEP 45 + -156.50 53.15 'NW-ALU204 ' 999. IBP NCEP 45 + -156.00 53.15 'NW-ALU205 ' 999. IBP NCEP 45 + -155.50 53.15 'NW-ALU206 ' 999. IBP NCEP 45 + -155.00 53.15 'NW-ALU207 ' 999. IBP NCEP 45 + -154.50 53.15 'NW-ALU208 ' 999. IBP NCEP 45 + -154.00 53.15 'NW-ALU209 ' 999. IBP NCEP 45 + -153.50 53.15 'NW-ALU210 ' 999. IBP NCEP 45 + -153.00 53.15 'NW-ALU211 ' 999. IBP NCEP 45 + -152.40 53.15 'NW-ALU212 ' 999. IBP NCEP 45 +$ + -176.50 73.00 'NW-AFG51 ' 999. IBP NCEP 45 + -176.00 73.00 'NW-AFG52 ' 999. IBP NCEP 45 + -175.50 73.00 'NW-AFG53 ' 999. IBP NCEP 45 + -175.00 73.00 'NW-AFG54 ' 999. IBP NCEP 45 + -174.50 73.00 'NW-AFG55 ' 999. IBP NCEP 45 + -174.00 73.00 'NW-AFG56 ' 999. IBP NCEP 45 + -173.50 73.00 'NW-AFG57 ' 999. IBP NCEP 45 + -173.00 73.00 'NW-AFG58 ' 999. IBP NCEP 45 + -172.50 73.00 'NW-AFG59 ' 999. IBP NCEP 45 + -172.00 73.00 'NW-AFG60 ' 999. IBP NCEP 45 + -171.50 73.00 'NW-AFG61 ' 999. IBP NCEP 45 + -171.00 73.00 'NW-AFG62 ' 999. IBP NCEP 45 + -170.50 73.00 'NW-AFG63 ' 999. IBP NCEP 45 + -170.00 73.00 'NW-AFG64 ' 999. IBP NCEP 45 + -169.50 73.00 'NW-AFG65 ' 999. IBP NCEP 45 + -169.00 73.00 'NW-AFG66 ' 999. IBP NCEP 45 + -168.50 73.00 'NW-AFG67 ' 999. IBP NCEP 45 + -168.00 73.00 'NW-AFG68 ' 999. IBP NCEP 45 + -167.50 73.00 'NW-AFG69 ' 999. IBP NCEP 45 + -167.00 73.00 'NW-AFG70 ' 999. IBP NCEP 45 + -166.50 73.00 'NW-AFG71 ' 999. IBP NCEP 45 + -166.00 73.00 'NW-AFG72 ' 999. IBP NCEP 45 + -165.50 73.00 'NW-AFG73 ' 999. IBP NCEP 45 + -165.00 73.00 'NW-AFG74 ' 999. IBP NCEP 45 + -164.50 73.00 'NW-AFG75 ' 999. IBP NCEP 45 + -164.00 73.00 'NW-AFG76 ' 999. IBP NCEP 45 + -163.50 73.00 'NW-AFG77 ' 999. IBP NCEP 45 + -163.00 73.00 'NW-AFG78 ' 999. IBP NCEP 45 + -162.50 73.00 'NW-AFG79 ' 999. IBP NCEP 45 + -162.00 73.00 'NW-AFG80 ' 999. IBP NCEP 45 + -161.50 73.00 'NW-AFG81 ' 999. IBP NCEP 45 + -161.00 73.00 'NW-AFG82 ' 999. IBP NCEP 45 + -160.50 73.00 'NW-AFG83 ' 999. IBP NCEP 45 + -160.00 73.00 'NW-AFG84 ' 999. IBP NCEP 45 + -159.50 73.00 'NW-AFG85 ' 999. IBP NCEP 45 + -159.00 73.00 'NW-AFG86 ' 999. IBP NCEP 45 + -158.50 73.00 'NW-AFG87 ' 999. IBP NCEP 45 + -158.00 73.00 'NW-AFG88 ' 999. IBP NCEP 45 + -157.50 73.00 'NW-AFG89 ' 999. IBP NCEP 45 + -157.00 73.00 'NW-AFG90 ' 999. IBP NCEP 45 + -156.50 73.00 'NW-AFG91 ' 999. IBP NCEP 45 + -156.00 73.00 'NW-AFG92 ' 999. IBP NCEP 45 + -155.50 73.00 'NW-AFG93 ' 999. IBP NCEP 45 + -155.00 73.00 'NW-AFG94 ' 999. IBP NCEP 45 + -154.50 73.00 'NW-AFG95 ' 999. IBP NCEP 45 + -154.00 73.00 'NW-AFG96 ' 999. IBP NCEP 45 + -153.50 73.00 'NW-AFG97 ' 999. IBP NCEP 45 + -153.00 73.00 'NW-AFG98 ' 999. IBP NCEP 45 + -152.50 73.00 'NW-AFG99 ' 999. IBP NCEP 45 + -152.00 73.00 'NW-AFG100 ' 999. IBP NCEP 45 + -151.50 73.00 'NW-AFG101 ' 999. IBP NCEP 45 + -151.00 73.00 'NW-AFG102 ' 999. IBP NCEP 45 + -150.50 73.00 'NW-AFG103 ' 999. IBP NCEP 45 + -150.00 73.00 'NW-AFG104 ' 999. IBP NCEP 45 + -149.50 73.00 'NW-AFG105 ' 999. IBP NCEP 45 + -149.00 73.00 'NW-AFG106 ' 999. IBP NCEP 45 + -148.50 73.00 'NW-AFG107 ' 999. IBP NCEP 45 + -148.00 73.00 'NW-AFG108 ' 999. IBP NCEP 45 + -147.50 73.00 'NW-AFG109 ' 999. IBP NCEP 45 + -147.00 73.00 'NW-AFG110 ' 999. IBP NCEP 45 + -146.50 73.00 'NW-AFG111 ' 999. IBP NCEP 45 + -146.00 73.00 'NW-AFG112 ' 999. IBP NCEP 45 + -145.50 73.00 'NW-AFG113 ' 999. IBP NCEP 45 + -145.00 73.00 'NW-AFG114 ' 999. IBP NCEP 45 + -144.50 73.00 'NW-AFG115 ' 999. IBP NCEP 45 + -144.00 73.00 'NW-AFG116 ' 999. IBP NCEP 45 + -143.50 73.00 'NW-AFG117 ' 999. IBP NCEP 45 + -143.00 73.00 'NW-AFG118 ' 999. IBP NCEP 45 + -142.50 73.00 'NW-AFG119 ' 999. IBP NCEP 45 + -142.00 73.00 'NW-AFG120 ' 999. IBP NCEP 45 + -141.50 73.00 'NW-AFG121 ' 999. IBP NCEP 45 + -141.00 73.00 'NW-AFG122 ' 999. IBP NCEP 45 + -140.50 73.00 'NW-AFG123 ' 999. IBP NCEP 45 + -140.00 73.00 'NW-AFG124 ' 999. IBP NCEP 45 + -139.50 73.00 'NW-AFG125 ' 999. IBP NCEP 45 + -139.00 73.00 'NW-AFG126 ' 999. IBP NCEP 45 + -139.00 72.50 'NW-AFG127 ' 999. IBP NCEP 45 + -139.00 72.00 'NW-AFG128 ' 999. IBP NCEP 45 + -139.00 71.50 'NW-AFG129 ' 999. IBP NCEP 45 + -139.00 71.00 'NW-AFG130 ' 999. IBP NCEP 45 + -139.00 70.50 'NW-AFG131 ' 999. IBP NCEP 45 + -139.00 70.00 'NW-AFG132 ' 999. IBP NCEP 45 + -139.00 69.75 'NW-AFG133 ' 999. IBP NCEP 45 + -176.50 72.50 'NW-AFG134 ' 999. IBP NCEP 45 + -176.50 72.00 'NW-AFG135 ' 999. IBP NCEP 45 + -176.50 71.50 'NW-AFG136 ' 999. IBP NCEP 45 + -176.50 71.00 'NW-AFG137 ' 999. IBP NCEP 45 + -176.50 70.50 'NW-AFG138 ' 999. IBP NCEP 45 + -176.50 70.00 'NW-AFG139 ' 999. IBP NCEP 45 + -176.50 69.50 'NW-AFG140 ' 999. IBP NCEP 45 + -176.50 69.00 'NW-AFG141 ' 999. IBP NCEP 45 + -176.50 68.50 'NW-AFG142 ' 999. IBP NCEP 45 + -176.50 65.00 'NW-AFG143 ' 999. IBP NCEP 45 + -176.50 64.50 'NW-AFG144 ' 999. IBP NCEP 45 + -176.50 64.00 'NW-AFG145 ' 999. IBP NCEP 45 + -176.50 63.50 'NW-AFG146 ' 999. IBP NCEP 45 + -176.50 63.00 'NW-AFG147 ' 999. IBP NCEP 45 + -176.50 62.50 'NW-AFG148 ' 999. IBP NCEP 45 + -176.50 62.00 'NW-AFG149 ' 999. IBP NCEP 45 + -176.50 61.50 'NW-AFG150 ' 999. IBP NCEP 45 + -176.50 61.00 'NW-AFG151 ' 999. IBP NCEP 45 + -176.00 61.00 'NW-AFG152 ' 999. IBP NCEP 45 + -175.50 61.00 'NW-AFG153 ' 999. IBP NCEP 45 + -175.00 61.00 'NW-AFG154 ' 999. IBP NCEP 45 + -174.50 61.00 'NW-AFG155 ' 999. IBP NCEP 45 + -174.00 61.00 'NW-AFG156 ' 999. IBP NCEP 45 + -173.50 61.00 'NW-AFG157 ' 999. IBP NCEP 45 + -173.00 61.00 'NW-AFG158 ' 999. IBP NCEP 45 + -172.50 61.00 'NW-AFG159 ' 999. IBP NCEP 45 + -172.00 61.00 'NW-AFG160 ' 999. IBP NCEP 45 + -171.50 61.00 'NW-AFG161 ' 999. IBP NCEP 45 + -171.00 61.00 'NW-AFG162 ' 999. IBP NCEP 45 + -170.50 61.00 'NW-AFG163 ' 999. IBP NCEP 45 + -170.00 61.00 'NW-AFG164 ' 999. IBP NCEP 45 + -169.50 61.00 'NW-AFG165 ' 999. IBP NCEP 45 + -169.00 61.00 'NW-AFG166 ' 999. IBP NCEP 45 + -168.50 61.00 'NW-AFG167 ' 999. IBP NCEP 45 + -168.00 61.00 'NW-AFG168 ' 999. IBP NCEP 45 + -167.50 61.00 'NW-AFG169 ' 999. IBP NCEP 45 + -167.00 61.00 'NW-AFG170 ' 999. IBP NCEP 45 + -166.50 61.00 'NW-AFG171 ' 999. IBP NCEP 45 + -166.00 61.00 'NW-AFG172 ' 999. IBP NCEP 45 +$ + 143.67 12.34 'NW-GUM51 ' 999. IBP NCEP 45 + 143.67 12.84 'NW-GUM52 ' 999. IBP NCEP 45 + 143.67 13.34 'NW-GUM53 ' 999. IBP NCEP 45 + 143.67 13.84 'NW-GUM54 ' 999. IBP NCEP 45 + 143.67 14.34 'NW-GUM55 ' 999. IBP NCEP 45 + 143.67 14.84 'NW-GUM56 ' 999. IBP NCEP 45 + 143.67 15.34 'NW-GUM57 ' 999. IBP NCEP 45 + 143.67 15.84 'NW-GUM58 ' 999. IBP NCEP 45 + 143.67 16.34 'NW-GUM59 ' 999. IBP NCEP 45 + 143.67 16.81 'NW-GUM60 ' 999. IBP NCEP 45 + 144.17 16.81 'NW-GUM61 ' 999. IBP NCEP 45 + 144.67 16.81 'NW-GUM62 ' 999. IBP NCEP 45 + 145.17 16.81 'NW-GUM63 ' 999. IBP NCEP 45 + 145.67 16.81 'NW-GUM64 ' 999. IBP NCEP 45 + 146.17 16.81 'NW-GUM65 ' 999. IBP NCEP 45 + 146.67 16.81 'NW-GUM66 ' 999. IBP NCEP 45 + 147.17 16.81 'NW-GUM67 ' 999. IBP NCEP 45 + 147.67 16.81 'NW-GUM68 ' 999. IBP NCEP 45 + 148.17 16.81 'NW-GUM69 ' 999. IBP NCEP 45 + 148.29 16.81 'NW-GUM70 ' 999. IBP NCEP 45 + 148.29 16.34 'NW-GUM71 ' 999. IBP NCEP 45 + 148.29 15.84 'NW-GUM72 ' 999. IBP NCEP 45 + 148.29 15.34 'NW-GUM73 ' 999. IBP NCEP 45 + 148.29 14.84 'NW-GUM74 ' 999. IBP NCEP 45 + 148.29 14.34 'NW-GUM75 ' 999. IBP NCEP 45 + 148.29 13.84 'NW-GUM76 ' 999. IBP NCEP 45 + 148.29 13.34 'NW-GUM77 ' 999. IBP NCEP 45 + 148.29 12.84 'NW-GUM78 ' 999. IBP NCEP 45 + 148.29 12.34 'NW-GUM79 ' 999. IBP NCEP 45 + 147.79 12.34 'NW-GUM80 ' 999. IBP NCEP 45 + 147.29 12.34 'NW-GUM81 ' 999. IBP NCEP 45 + 146.79 12.34 'NW-GUM82 ' 999. IBP NCEP 45 + 146.29 12.34 'NW-GUM83 ' 999. IBP NCEP 45 + 145.79 12.34 'NW-GUM84 ' 999. IBP NCEP 45 + 145.29 12.34 'NW-GUM85 ' 999. IBP NCEP 45 + 144.79 12.34 'NW-GUM86 ' 999. IBP NCEP 45 + 144.29 12.34 'NW-GUM87 ' 999. IBP NCEP 45 + 143.79 12.34 'NW-GUM88 ' 999. IBP NCEP 45 + 143.67 16.84 'NW-GUM89 ' 999. IBP NCEP 45 + 143.67 17.34 'NW-GUM90 ' 999. IBP NCEP 45 + 143.67 17.84 'NW-GUM91 ' 999. IBP NCEP 45 + 143.67 18.34 'NW-GUM92 ' 999. IBP NCEP 45 + 143.67 18.84 'NW-GUM93 ' 999. IBP NCEP 45 + 143.67 19.34 'NW-GUM94 ' 999. IBP NCEP 45 + 143.67 19.84 'NW-GUM95 ' 999. IBP NCEP 45 + 143.67 20.00 'NW-GUM96 ' 999. IBP NCEP 45 + 144.17 20.00 'NW-GUM97 ' 999. IBP NCEP 45 + 144.67 20.00 'NW-GUM98 ' 999. IBP NCEP 45 + 145.17 20.00 'NW-GUM99 ' 999. IBP NCEP 45 + 145.67 20.00 'NW-GUM100 ' 999. IBP NCEP 45 + 146.17 20.00 'NW-GUM101 ' 999. IBP NCEP 45 + 146.67 20.00 'NW-GUM102 ' 999. IBP NCEP 45 + 147.17 20.00 'NW-GUM103 ' 999. IBP NCEP 45 + 147.67 20.00 'NW-GUM104 ' 999. IBP NCEP 45 + 148.17 20.00 'NW-GUM105 ' 999. IBP NCEP 45 + 148.29 20.00 'NW-GUM106 ' 999. IBP NCEP 45 + 148.29 19.84 'NW-GUM107 ' 999. IBP NCEP 45 + 148.29 19.34 'NW-GUM108 ' 999. IBP NCEP 45 + 148.29 18.84 'NW-GUM109 ' 999. IBP NCEP 45 + 148.29 18.34 'NW-GUM110 ' 999. IBP NCEP 45 + 148.29 17.84 'NW-GUM111 ' 999. IBP NCEP 45 + 148.29 17.34 'NW-GUM112 ' 999. IBP NCEP 45 + 148.29 16.84 'NW-GUM113 ' 999. IBP NCEP 45 +$ + -172.50 -15.25 'NW-PGG51 ' 999. IBP NCEP 45 + -172.50 -14.75 'NW-PGG52 ' 999. IBP NCEP 45 + -172.50 -14.25 'NW-PGG53 ' 999. IBP NCEP 45 + -172.50 -13.75 'NW-PGG54 ' 999. IBP NCEP 45 + -172.50 -13.25 'NW-PGG55 ' 999. IBP NCEP 45 + -172.50 -12.75 'NW-PGG56 ' 999. IBP NCEP 45 + -172.50 -12.25 'NW-PGG57 ' 999. IBP NCEP 45 + -172.50 -11.75 'NW-PGG58 ' 999. IBP NCEP 45 + -172.50 -11.25 'NW-PGG59 ' 999. IBP NCEP 45 + -172.50 -10.75 'NW-PGG60 ' 999. IBP NCEP 45 + -172.50 -10.25 'NW-PGG61 ' 999. IBP NCEP 45 + -172.00 -10.25 'NW-PGG62 ' 999. IBP NCEP 45 + -171.50 -10.25 'NW-PGG63 ' 999. IBP NCEP 45 + -171.00 -10.25 'NW-PGG64 ' 999. IBP NCEP 45 + -170.50 -10.25 'NW-PGG65 ' 999. IBP NCEP 45 + -170.00 -10.25 'NW-PGG66 ' 999. IBP NCEP 45 + -169.50 -10.25 'NW-PGG67 ' 999. IBP NCEP 45 + -169.00 -10.25 'NW-PGG68 ' 999. IBP NCEP 45 + -168.50 -10.25 'NW-PGG69 ' 999. IBP NCEP 45 + -168.50 -10.75 'NW-PGG70 ' 999. IBP NCEP 45 + -168.50 -11.25 'NW-PGG71 ' 999. IBP NCEP 45 + -168.50 -11.75 'NW-PGG72 ' 999. IBP NCEP 45 + -168.50 -12.25 'NW-PGG73 ' 999. IBP NCEP 45 + -168.50 -12.75 'NW-PGG74 ' 999. IBP NCEP 45 + -168.50 -13.25 'NW-PGG75 ' 999. IBP NCEP 45 + -168.50 -13.75 'NW-PGG76 ' 999. IBP NCEP 45 + -168.50 -14.25 'NW-PGG77 ' 999. IBP NCEP 45 + -168.50 -14.75 'NW-PGG78 ' 999. IBP NCEP 45 + -168.50 -15.24 'NW-PGG79 ' 999. IBP NCEP 45 + -169.00 -15.25 'NW-PGG80 ' 999. IBP NCEP 45 + -169.50 -15.25 'NW-PGG81 ' 999. IBP NCEP 45 + -170.00 -15.25 'NW-PGG82 ' 999. IBP NCEP 45 + -170.50 -15.25 'NW-PGG83 ' 999. IBP NCEP 45 + -171.00 -15.25 'NW-PGG84 ' 999. IBP NCEP 45 + -171.50 -15.25 'NW-PGG85 ' 999. IBP NCEP 45 + -172.00 -15.25 'NW-PGG86 ' 999. IBP NCEP 45 +$ +$ + -80.00 27.50 'NW-OPC51 ' 999. IBP NCEP 45 + -79.50 27.50 'NW-OPC52 ' 999. IBP NCEP 45 + -79.00 27.50 'NW-OPC53 ' 999. IBP NCEP 45 + -78.50 27.50 'NW-OPC54 ' 999. IBP NCEP 45 + -78.00 27.50 'NW-OPC55 ' 999. IBP NCEP 45 + -77.50 27.50 'NW-OPC56 ' 999. IBP NCEP 45 + -77.00 27.50 'NW-OPC57 ' 999. IBP NCEP 45 + -76.50 27.50 'NW-OPC58 ' 999. IBP NCEP 45 + -76.00 27.50 'NW-OPC59 ' 999. IBP NCEP 45 + -75.50 27.50 'NW-OPC60 ' 999. IBP NCEP 45 + -75.00 27.50 'NW-OPC61 ' 999. IBP NCEP 45 + -74.50 27.50 'NW-OPC62 ' 999. IBP NCEP 45 + -74.00 27.50 'NW-OPC63 ' 999. IBP NCEP 45 + -73.50 27.50 'NW-OPC64 ' 999. IBP NCEP 45 + -73.00 27.50 'NW-OPC65 ' 999. IBP NCEP 45 + -72.50 27.50 'NW-OPC66 ' 999. IBP NCEP 45 + -72.00 27.50 'NW-OPC67 ' 999. IBP NCEP 45 + -71.50 27.50 'NW-OPC68 ' 999. IBP NCEP 45 + -71.00 27.50 'NW-OPC69 ' 999. IBP NCEP 45 + -70.50 27.50 'NW-OPC70 ' 999. IBP NCEP 45 + -70.00 27.50 'NW-OPC71 ' 999. IBP NCEP 45 + -69.50 27.50 'NW-OPC72 ' 999. IBP NCEP 45 + -69.00 27.50 'NW-OPC73 ' 999. IBP NCEP 45 + -68.50 27.50 'NW-OPC74 ' 999. IBP NCEP 45 + -68.00 27.50 'NW-OPC75 ' 999. IBP NCEP 45 + -67.50 27.50 'NW-OPC76 ' 999. IBP NCEP 45 + -67.00 27.50 'NW-OPC77 ' 999. IBP NCEP 45 + -66.50 27.50 'NW-OPC78 ' 999. IBP NCEP 45 + -66.00 27.50 'NW-OPC79 ' 999. IBP NCEP 45 + -65.50 27.50 'NW-OPC80 ' 999. IBP NCEP 45 + -65.00 27.50 'NW-OPC81 ' 999. IBP NCEP 45 + -64.50 27.50 'NW-OPC82 ' 999. IBP NCEP 45 + -64.20 27.50 'NW-OPC83 ' 999. IBP NCEP 45 + -64.20 28.00 'NW-OPC84 ' 999. IBP NCEP 45 + -64.20 28.50 'NW-OPC85 ' 999. IBP NCEP 45 + -64.20 29.00 'NW-OPC86 ' 999. IBP NCEP 45 + -64.20 29.50 'NW-OPC87 ' 999. IBP NCEP 45 + -64.20 30.00 'NW-OPC88 ' 999. IBP NCEP 45 + -64.20 30.50 'NW-OPC89 ' 999. IBP NCEP 45 + -64.20 31.00 'NW-OPC90 ' 999. IBP NCEP 45 + -64.20 31.50 'NW-OPC91 ' 999. IBP NCEP 45 + -64.20 32.00 'NW-OPC92 ' 999. IBP NCEP 45 + -64.20 32.50 'NW-OPC93 ' 999. IBP NCEP 45 + -64.20 33.00 'NW-OPC94 ' 999. IBP NCEP 45 + -64.20 33.50 'NW-OPC95 ' 999. IBP NCEP 45 + -64.20 34.00 'NW-OPC96 ' 999. IBP NCEP 45 + -64.20 34.50 'NW-OPC97 ' 999. IBP NCEP 45 + -64.20 35.00 'NW-OPC98 ' 999. IBP NCEP 45 + -64.20 35.50 'NW-OPC99 ' 999. IBP NCEP 45 + -64.20 36.00 'NW-OPC100 ' 999. IBP NCEP 45 + -64.20 36.50 'NW-OPC101 ' 999. IBP NCEP 45 + -64.20 37.00 'NW-OPC102 ' 999. IBP NCEP 45 + -64.20 37.50 'NW-OPC103 ' 999. IBP NCEP 45 + -64.20 38.00 'NW-OPC104 ' 999. IBP NCEP 45 + -64.20 38.50 'NW-OPC105 ' 999. IBP NCEP 45 + -64.20 39.00 'NW-OPC106 ' 999. IBP NCEP 45 + -64.20 39.50 'NW-OPC107 ' 999. IBP NCEP 45 + -64.20 40.00 'NW-OPC108 ' 999. IBP NCEP 45 + -64.20 40.50 'NW-OPC109 ' 999. IBP NCEP 45 + -64.20 41.00 'NW-OPC110 ' 999. IBP NCEP 45 + -64.20 41.50 'NW-OPC111 ' 999. IBP NCEP 45 + -64.20 42.00 'NW-OPC112 ' 999. IBP NCEP 45 + -64.20 42.50 'NW-OPC113 ' 999. IBP NCEP 45 + -64.20 43.00 'NW-OPC114 ' 999. IBP NCEP 45 + -64.20 43.50 'NW-OPC115 ' 999. IBP NCEP 45 + -64.20 44.00 'NW-OPC116 ' 999. IBP NCEP 45 + -66.00 44.80 'NW-OPC117 ' 999. IBP NCEP 45 + -66.50 44.80 'NW-OPC118 ' 999. IBP NCEP 45 +$ +$ HWRF wave grid boundary points -- Region a (NIO) +$ + 40.00 -5.00 'HWRFa-50 ' 999. IBP NCEP 360 + 42.00 -5.00 'HWRFa-51 ' 999. IBP NCEP 360 + 44.00 -5.00 'HWRFa-52 ' 999. IBP NCEP 360 + 46.00 -5.00 'HWRFa-53 ' 999. IBP NCEP 360 + 48.00 -5.00 'HWRFa-54 ' 999. IBP NCEP 360 + 50.00 -5.00 'HWRFa-55 ' 999. IBP NCEP 360 + 52.00 -5.00 'HWRFa-56 ' 999. IBP NCEP 360 + 54.00 -5.00 'HWRFa-57 ' 999. IBP NCEP 360 + 56.00 -5.00 'HWRFa-58 ' 999. IBP NCEP 360 + 58.00 -5.00 'HWRFa-59 ' 999. IBP NCEP 360 + 60.00 -5.00 'HWRFa-60 ' 999. IBP NCEP 360 + 62.00 -5.00 'HWRFa-61 ' 999. IBP NCEP 360 + 64.00 -5.00 'HWRFa-62 ' 999. IBP NCEP 360 + 66.00 -5.00 'HWRFa-63 ' 999. IBP NCEP 360 + 68.00 -5.00 'HWRFa-64 ' 999. IBP NCEP 360 + 70.00 -5.00 'HWRFa-65 ' 999. IBP NCEP 360 + 72.00 -5.00 'HWRFa-66 ' 999. IBP NCEP 360 + 74.00 -5.00 'HWRFa-67 ' 999. IBP NCEP 360 + 76.00 -5.00 'HWRFa-68 ' 999. IBP NCEP 360 + 78.00 -5.00 'HWRFa-69 ' 999. IBP NCEP 360 + 80.00 -5.00 'HWRFa-70 ' 999. IBP NCEP 360 + 82.00 -5.00 'HWRFa-71 ' 999. IBP NCEP 360 + 84.00 -5.00 'HWRFa-72 ' 999. IBP NCEP 360 + 86.00 -5.00 'HWRFa-73 ' 999. IBP NCEP 360 + 88.00 -5.00 'HWRFa-74 ' 999. IBP NCEP 360 + 90.00 -5.00 'HWRFa-75 ' 999. IBP NCEP 360 + 92.00 -5.00 'HWRFa-76 ' 999. IBP NCEP 360 + 94.00 -5.00 'HWRFa-77 ' 999. IBP NCEP 360 + 96.00 -5.00 'HWRFa-78 ' 999. IBP NCEP 360 + 98.00 -5.00 'HWRFa-79 ' 999. IBP NCEP 360 + 100.00 -5.00 'HWRFa-80 ' 999. IBP NCEP 360 + 102.00 -5.00 'HWRFa-81 ' 999. IBP NCEP 360 + 105.00 -1.00 'HWRFa-82 ' 999. IBP NCEP 360 + 105.00 1.00 'HWRFa-83 ' 999. IBP NCEP 360 + 105.00 3.00 'HWRFa-84 ' 999. IBP NCEP 360 + 105.00 5.00 'HWRFa-85 ' 999. IBP NCEP 360 + 105.00 7.00 'HWRFa-86 ' 999. IBP NCEP 360 +$ +$ HWRF wave grid boundary points -- Region c (CPAC) +$ + 125.00 1.50 'HWRFc-50 ' 999. IBP NCEP 360 + 126.00 1.50 'HWRFc-51 ' 999. IBP NCEP 360 + 127.00 1.50 'HWRFc-52 ' 999. IBP NCEP 360 + 128.00 1.50 'HWRFc-53 ' 999. IBP NCEP 360 + 129.00 1.50 'HWRFc-54 ' 999. IBP NCEP 360 + 130.00 1.50 'HWRFc-55 ' 999. IBP NCEP 360 + 131.00 1.50 'HWRFc-56 ' 999. IBP NCEP 360 + 132.00 1.50 'HWRFc-57 ' 999. IBP NCEP 360 + 133.00 1.50 'HWRFc-58 ' 999. IBP NCEP 360 + 134.00 1.50 'HWRFc-59 ' 999. IBP NCEP 360 + 135.00 1.50 'HWRFc-60 ' 999. IBP NCEP 360 + 136.00 1.50 'HWRFc-61 ' 999. IBP NCEP 360 + 137.00 1.50 'HWRFc-62 ' 999. IBP NCEP 360 + 138.00 1.50 'HWRFc-63 ' 999. IBP NCEP 360 + 139.00 1.50 'HWRFc-64 ' 999. IBP NCEP 360 + 140.00 1.50 'HWRFc-65 ' 999. IBP NCEP 360 + 141.00 1.50 'HWRFc-66 ' 999. IBP NCEP 360 + 142.00 1.50 'HWRFc-67 ' 999. IBP NCEP 360 + 143.00 1.50 'HWRFc-68 ' 999. IBP NCEP 360 + 144.00 1.50 'HWRFc-69 ' 999. IBP NCEP 360 + 145.00 1.50 'HWRFc-70 ' 999. IBP NCEP 360 + 146.00 1.50 'HWRFc-71 ' 999. IBP NCEP 360 + 147.00 1.50 'HWRFc-72 ' 999. IBP NCEP 360 + 148.00 1.50 'HWRFc-73 ' 999. IBP NCEP 360 + 149.00 1.50 'HWRFc-74 ' 999. IBP NCEP 360 + 150.00 1.50 'HWRFc-75 ' 999. IBP NCEP 360 + 151.00 1.50 'HWRFc-76 ' 999. IBP NCEP 360 + 152.00 1.50 'HWRFc-77 ' 999. IBP NCEP 360 + 153.00 1.50 'HWRFc-78 ' 999. IBP NCEP 360 + 154.00 1.50 'HWRFc-79 ' 999. IBP NCEP 360 + 155.00 1.50 'HWRFc-80 ' 999. IBP NCEP 360 + 156.00 1.50 'HWRFc-81 ' 999. IBP NCEP 360 + 157.00 1.50 'HWRFc-82 ' 999. IBP NCEP 360 + 158.00 1.50 'HWRFc-83 ' 999. IBP NCEP 360 + 159.00 1.50 'HWRFc-84 ' 999. IBP NCEP 360 + 160.00 1.50 'HWRFc-85 ' 999. IBP NCEP 360 + 161.00 1.50 'HWRFc-86 ' 999. IBP NCEP 360 + 162.00 1.50 'HWRFc-87 ' 999. IBP NCEP 360 + 163.00 1.50 'HWRFc-88 ' 999. IBP NCEP 360 + 164.00 1.50 'HWRFc-89 ' 999. IBP NCEP 360 + 165.00 1.50 'HWRFc-90 ' 999. IBP NCEP 360 + 166.00 1.50 'HWRFc-91 ' 999. IBP NCEP 360 + 167.00 1.50 'HWRFc-92 ' 999. IBP NCEP 360 + 168.00 1.50 'HWRFc-93 ' 999. IBP NCEP 360 + 169.00 1.50 'HWRFc-94 ' 999. IBP NCEP 360 + 170.00 1.50 'HWRFc-95 ' 999. IBP NCEP 360 + 171.00 1.50 'HWRFc-96 ' 999. IBP NCEP 360 + 172.00 1.50 'HWRFc-97 ' 999. IBP NCEP 360 + 173.00 1.50 'HWRFc-98 ' 999. IBP NCEP 360 + 174.00 1.50 'HWRFc-99 ' 999. IBP NCEP 360 + 175.00 1.50 'HWRFc-100 ' 999. IBP NCEP 360 + 176.00 1.50 'HWRFc-101 ' 999. IBP NCEP 360 + 177.00 1.50 'HWRFc-102 ' 999. IBP NCEP 360 + 178.00 1.50 'HWRFc-103 ' 999. IBP NCEP 360 + 179.00 1.50 'HWRFc-104 ' 999. IBP NCEP 360 + 180.00 1.50 'HWRFc-105 ' 999. IBP NCEP 360 + 181.00 1.50 'HWRFc-106 ' 999. IBP NCEP 360 + 182.00 1.50 'HWRFc-107 ' 999. IBP NCEP 360 + 183.00 1.50 'HWRFc-108 ' 999. IBP NCEP 360 + 184.00 1.50 'HWRFc-109 ' 999. IBP NCEP 360 + 185.00 1.50 'HWRFc-110 ' 999. IBP NCEP 360 + 186.00 1.50 'HWRFc-111 ' 999. IBP NCEP 360 + 187.00 1.50 'HWRFc-112 ' 999. IBP NCEP 360 + 188.00 1.50 'HWRFc-113 ' 999. IBP NCEP 360 + 189.00 1.50 'HWRFc-114 ' 999. IBP NCEP 360 + 190.00 1.50 'HWRFc-115 ' 999. IBP NCEP 360 + 191.00 1.50 'HWRFc-116 ' 999. IBP NCEP 360 + 192.00 1.50 'HWRFc-117 ' 999. IBP NCEP 360 + 193.00 1.50 'HWRFc-118 ' 999. IBP NCEP 360 + 194.00 1.50 'HWRFc-119 ' 999. IBP NCEP 360 + 195.00 1.50 'HWRFc-120 ' 999. IBP NCEP 360 + 196.00 1.50 'HWRFc-121 ' 999. IBP NCEP 360 + 197.00 1.50 'HWRFc-122 ' 999. IBP NCEP 360 + 198.00 1.50 'HWRFc-123 ' 999. IBP NCEP 360 + 199.00 1.50 'HWRFc-124 ' 999. IBP NCEP 360 + 200.00 1.50 'HWRFc-125 ' 999. IBP NCEP 360 + 201.00 1.50 'HWRFc-126 ' 999. IBP NCEP 360 + 202.00 1.50 'HWRFc-127 ' 999. IBP NCEP 360 + 203.00 1.50 'HWRFc-128 ' 999. IBP NCEP 360 + 204.00 1.50 'HWRFc-129 ' 999. IBP NCEP 360 + 205.00 1.50 'HWRFc-130 ' 999. IBP NCEP 360 + 206.00 1.50 'HWRFc-131 ' 999. IBP NCEP 360 + 207.00 1.50 'HWRFc-132 ' 999. IBP NCEP 360 + 208.00 1.50 'HWRFc-133 ' 999. IBP NCEP 360 + 209.00 1.50 'HWRFc-134 ' 999. IBP NCEP 360 + 210.00 1.50 'HWRFc-135 ' 999. IBP NCEP 360 + 211.00 1.50 'HWRFc-136 ' 999. IBP NCEP 360 + 212.00 1.50 'HWRFc-137 ' 999. IBP NCEP 360 + 213.00 1.50 'HWRFc-138 ' 999. IBP NCEP 360 + 214.00 1.50 'HWRFc-139 ' 999. IBP NCEP 360 + 215.00 1.50 'HWRFc-140 ' 999. IBP NCEP 360 + 216.00 1.50 'HWRFc-141 ' 999. IBP NCEP 360 + 217.00 1.50 'HWRFc-142 ' 999. IBP NCEP 360 + 218.00 1.50 'HWRFc-143 ' 999. IBP NCEP 360 + 219.00 1.50 'HWRFc-144 ' 999. IBP NCEP 360 + 220.00 1.50 'HWRFc-145 ' 999. IBP NCEP 360 + 220.00 2.50 'HWRFc-146 ' 999. IBP NCEP 360 + 220.00 3.50 'HWRFc-147 ' 999. IBP NCEP 360 + 220.00 4.50 'HWRFc-148 ' 999. IBP NCEP 360 + 220.00 5.50 'HWRFc-149 ' 999. IBP NCEP 360 + 220.00 6.50 'HWRFc-150 ' 999. IBP NCEP 360 + 220.00 7.50 'HWRFc-151 ' 999. IBP NCEP 360 + 220.00 8.50 'HWRFc-152 ' 999. IBP NCEP 360 + 220.00 9.50 'HWRFc-153 ' 999. IBP NCEP 360 + 220.00 10.50 'HWRFc-154 ' 999. IBP NCEP 360 + 220.00 11.50 'HWRFc-155 ' 999. IBP NCEP 360 + 220.00 12.50 'HWRFc-156 ' 999. IBP NCEP 360 + 220.00 13.50 'HWRFc-157 ' 999. IBP NCEP 360 + 220.00 14.50 'HWRFc-158 ' 999. IBP NCEP 360 + 220.00 15.50 'HWRFc-159 ' 999. IBP NCEP 360 + 220.00 16.50 'HWRFc-160 ' 999. IBP NCEP 360 + 220.00 17.50 'HWRFc-161 ' 999. IBP NCEP 360 + 220.00 18.50 'HWRFc-162 ' 999. IBP NCEP 360 + 220.00 19.50 'HWRFc-163 ' 999. IBP NCEP 360 + 220.00 20.50 'HWRFc-164 ' 999. IBP NCEP 360 + 220.00 21.50 'HWRFc-165 ' 999. IBP NCEP 360 + 220.00 22.50 'HWRFc-166 ' 999. IBP NCEP 360 + 220.00 23.50 'HWRFc-167 ' 999. IBP NCEP 360 + 220.00 24.50 'HWRFc-168 ' 999. IBP NCEP 360 + 220.00 25.50 'HWRFc-169 ' 999. IBP NCEP 360 + 220.00 26.50 'HWRFc-170 ' 999. IBP NCEP 360 + 220.00 27.50 'HWRFc-171 ' 999. IBP NCEP 360 + 220.00 28.50 'HWRFc-172 ' 999. IBP NCEP 360 + 220.00 29.50 'HWRFc-173 ' 999. IBP NCEP 360 + 220.00 30.50 'HWRFc-174 ' 999. IBP NCEP 360 + 220.00 31.50 'HWRFc-175 ' 999. IBP NCEP 360 + 220.00 32.50 'HWRFc-176 ' 999. IBP NCEP 360 + 220.00 33.50 'HWRFc-177 ' 999. IBP NCEP 360 + 220.00 34.50 'HWRFc-178 ' 999. IBP NCEP 360 + 220.00 35.50 'HWRFc-179 ' 999. IBP NCEP 360 + 220.00 36.50 'HWRFc-180 ' 999. IBP NCEP 360 + 220.00 37.50 'HWRFc-181 ' 999. IBP NCEP 360 + 220.00 38.50 'HWRFc-182 ' 999. IBP NCEP 360 + 220.00 39.50 'HWRFc-183 ' 999. IBP NCEP 360 + 220.00 40.50 'HWRFc-184 ' 999. IBP NCEP 360 + 220.00 41.50 'HWRFc-185 ' 999. IBP NCEP 360 + 219.00 41.50 'HWRFc-186 ' 999. IBP NCEP 360 + 218.00 41.50 'HWRFc-187 ' 999. IBP NCEP 360 + 217.00 41.50 'HWRFc-188 ' 999. IBP NCEP 360 + 216.00 41.50 'HWRFc-189 ' 999. IBP NCEP 360 + 215.00 41.50 'HWRFc-190 ' 999. IBP NCEP 360 + 214.00 41.50 'HWRFc-191 ' 999. IBP NCEP 360 + 213.00 41.50 'HWRFc-192 ' 999. IBP NCEP 360 + 212.00 41.50 'HWRFc-193 ' 999. IBP NCEP 360 + 211.00 41.50 'HWRFc-194 ' 999. IBP NCEP 360 + 210.00 41.50 'HWRFc-195 ' 999. IBP NCEP 360 + 209.00 41.50 'HWRFc-196 ' 999. IBP NCEP 360 + 208.00 41.50 'HWRFc-197 ' 999. IBP NCEP 360 + 207.00 41.50 'HWRFc-198 ' 999. IBP NCEP 360 + 206.00 41.50 'HWRFc-199 ' 999. IBP NCEP 360 + 205.00 41.50 'HWRFc-200 ' 999. IBP NCEP 360 + 204.00 41.50 'HWRFc-201 ' 999. IBP NCEP 360 + 203.00 41.50 'HWRFc-202 ' 999. IBP NCEP 360 + 202.00 41.50 'HWRFc-203 ' 999. IBP NCEP 360 + 201.00 41.50 'HWRFc-204 ' 999. IBP NCEP 360 + 200.00 41.50 'HWRFc-205 ' 999. IBP NCEP 360 + 199.00 41.50 'HWRFc-206 ' 999. IBP NCEP 360 + 198.00 41.50 'HWRFc-207 ' 999. IBP NCEP 360 + 197.00 41.50 'HWRFc-208 ' 999. IBP NCEP 360 + 196.00 41.50 'HWRFc-209 ' 999. IBP NCEP 360 + 195.00 41.50 'HWRFc-210 ' 999. IBP NCEP 360 + 194.00 41.50 'HWRFc-211 ' 999. IBP NCEP 360 + 193.00 41.50 'HWRFc-212 ' 999. IBP NCEP 360 + 192.00 41.50 'HWRFc-213 ' 999. IBP NCEP 360 + 191.00 41.50 'HWRFc-214 ' 999. IBP NCEP 360 + 190.00 41.50 'HWRFc-215 ' 999. IBP NCEP 360 + 189.00 41.50 'HWRFc-216 ' 999. IBP NCEP 360 + 188.00 41.50 'HWRFc-217 ' 999. IBP NCEP 360 + 187.00 41.50 'HWRFc-218 ' 999. IBP NCEP 360 + 186.00 41.50 'HWRFc-219 ' 999. IBP NCEP 360 + 185.00 41.50 'HWRFc-220 ' 999. IBP NCEP 360 + 184.00 41.50 'HWRFc-221 ' 999. IBP NCEP 360 + 183.00 41.50 'HWRFc-222 ' 999. IBP NCEP 360 + 182.00 41.50 'HWRFc-223 ' 999. IBP NCEP 360 + 181.00 41.50 'HWRFc-224 ' 999. IBP NCEP 360 + 180.00 41.50 'HWRFc-225 ' 999. IBP NCEP 360 + 179.00 41.50 'HWRFc-226 ' 999. IBP NCEP 360 + 178.00 41.50 'HWRFc-227 ' 999. IBP NCEP 360 + 177.00 41.50 'HWRFc-228 ' 999. IBP NCEP 360 + 176.00 41.50 'HWRFc-229 ' 999. IBP NCEP 360 + 175.00 41.50 'HWRFc-230 ' 999. IBP NCEP 360 + 174.00 41.50 'HWRFc-231 ' 999. IBP NCEP 360 + 173.00 41.50 'HWRFc-232 ' 999. IBP NCEP 360 + 172.00 41.50 'HWRFc-233 ' 999. IBP NCEP 360 + 171.00 41.50 'HWRFc-234 ' 999. IBP NCEP 360 + 170.00 41.50 'HWRFc-235 ' 999. IBP NCEP 360 + 169.00 41.50 'HWRFc-236 ' 999. IBP NCEP 360 + 168.00 41.50 'HWRFc-237 ' 999. IBP NCEP 360 + 167.00 41.50 'HWRFc-238 ' 999. IBP NCEP 360 + 166.00 41.50 'HWRFc-239 ' 999. IBP NCEP 360 + 165.00 41.50 'HWRFc-240 ' 999. IBP NCEP 360 + 164.00 41.50 'HWRFc-241 ' 999. IBP NCEP 360 + 163.00 41.50 'HWRFc-242 ' 999. IBP NCEP 360 + 162.00 41.50 'HWRFc-243 ' 999. IBP NCEP 360 + 161.00 41.50 'HWRFc-244 ' 999. IBP NCEP 360 + 160.00 41.50 'HWRFc-245 ' 999. IBP NCEP 360 + 159.00 41.50 'HWRFc-246 ' 999. IBP NCEP 360 + 158.00 41.50 'HWRFc-247 ' 999. IBP NCEP 360 + 157.00 41.50 'HWRFc-248 ' 999. IBP NCEP 360 + 156.00 41.50 'HWRFc-249 ' 999. IBP NCEP 360 + 155.00 41.50 'HWRFc-250 ' 999. IBP NCEP 360 + 154.00 41.50 'HWRFc-251 ' 999. IBP NCEP 360 + 153.00 41.50 'HWRFc-252 ' 999. IBP NCEP 360 + 152.00 41.50 'HWRFc-253 ' 999. IBP NCEP 360 + 151.00 41.50 'HWRFc-254 ' 999. IBP NCEP 360 + 150.00 41.50 'HWRFc-255 ' 999. IBP NCEP 360 + 149.00 41.50 'HWRFc-256 ' 999. IBP NCEP 360 + 148.00 41.50 'HWRFc-257 ' 999. IBP NCEP 360 + 147.00 41.50 'HWRFc-258 ' 999. IBP NCEP 360 + 146.00 41.50 'HWRFc-259 ' 999. IBP NCEP 360 + 145.00 41.50 'HWRFc-260 ' 999. IBP NCEP 360 + 144.00 41.50 'HWRFc-261 ' 999. IBP NCEP 360 + 143.00 41.50 'HWRFc-262 ' 999. IBP NCEP 360 + 142.00 41.50 'HWRFc-263 ' 999. IBP NCEP 360 + 141.00 41.50 'HWRFc-264 ' 999. IBP NCEP 360 + 140.00 41.50 'HWRFc-265 ' 999. IBP NCEP 360 + 139.00 41.50 'HWRFc-266 ' 999. IBP NCEP 360 + 138.00 41.50 'HWRFc-267 ' 999. IBP NCEP 360 + 137.00 41.50 'HWRFc-268 ' 999. IBP NCEP 360 + 136.00 41.50 'HWRFc-269 ' 999. IBP NCEP 360 + 135.00 41.50 'HWRFc-270 ' 999. IBP NCEP 360 + 134.00 41.50 'HWRFc-271 ' 999. IBP NCEP 360 + 133.00 41.50 'HWRFc-272 ' 999. IBP NCEP 360 + 132.00 41.50 'HWRFc-273 ' 999. IBP NCEP 360 + 125.00 39.50 'HWRFc-274 ' 999. IBP NCEP 360 + 125.00 38.50 'HWRFc-275 ' 999. IBP NCEP 360 + 125.00 37.50 'HWRFc-276 ' 999. IBP NCEP 360 + 125.00 36.50 'HWRFc-277 ' 999. IBP NCEP 360 + 125.00 35.50 'HWRFc-278 ' 999. IBP NCEP 360 + 125.00 34.50 'HWRFc-279 ' 999. IBP NCEP 360 + 125.00 33.50 'HWRFc-280 ' 999. IBP NCEP 360 + 125.00 32.50 'HWRFc-281 ' 999. IBP NCEP 360 + 125.00 31.50 'HWRFc-282 ' 999. IBP NCEP 360 + 125.00 30.50 'HWRFc-283 ' 999. IBP NCEP 360 + 125.00 29.50 'HWRFc-284 ' 999. IBP NCEP 360 + 125.00 28.50 'HWRFc-285 ' 999. IBP NCEP 360 + 125.00 27.50 'HWRFc-286 ' 999. IBP NCEP 360 + 125.00 26.50 'HWRFc-287 ' 999. IBP NCEP 360 + 125.00 25.50 'HWRFc-288 ' 999. IBP NCEP 360 + 125.00 24.50 'HWRFc-289 ' 999. IBP NCEP 360 + 125.00 23.50 'HWRFc-290 ' 999. IBP NCEP 360 + 125.00 22.50 'HWRFc-291 ' 999. IBP NCEP 360 + 125.00 21.50 'HWRFc-292 ' 999. IBP NCEP 360 + 125.00 20.50 'HWRFc-293 ' 999. IBP NCEP 360 + 125.00 19.50 'HWRFc-294 ' 999. IBP NCEP 360 + 125.00 18.50 'HWRFc-295 ' 999. IBP NCEP 360 + 125.00 17.50 'HWRFc-296 ' 999. IBP NCEP 360 + 125.00 16.50 'HWRFc-297 ' 999. IBP NCEP 360 + 125.00 15.50 'HWRFc-298 ' 999. IBP NCEP 360 + 125.00 14.50 'HWRFc-299 ' 999. IBP NCEP 360 + 125.00 13.50 'HWRFc-300 ' 999. IBP NCEP 360 + 125.00 12.50 'HWRFc-301 ' 999. IBP NCEP 360 + 125.00 11.50 'HWRFc-302 ' 999. IBP NCEP 360 + 125.00 10.50 'HWRFc-303 ' 999. IBP NCEP 360 + 125.00 9.50 'HWRFc-304 ' 999. IBP NCEP 360 + 125.00 8.50 'HWRFc-305 ' 999. IBP NCEP 360 + 125.00 7.50 'HWRFc-306 ' 999. IBP NCEP 360 + 125.00 6.50 'HWRFc-307 ' 999. IBP NCEP 360 + 125.00 5.50 'HWRFc-308 ' 999. IBP NCEP 360 + 125.00 4.50 'HWRFc-309 ' 999. IBP NCEP 360 + 125.00 3.50 'HWRFc-310 ' 999. IBP NCEP 360 + 125.00 2.50 'HWRFc-311 ' 999. IBP NCEP 360 +$ +$ HWRF wave grid boundary points -- Region e (EPAC) +$ + 180.00 1.50 'HWRFe-50 ' 999. IBP NCEP 360 + 180.50 1.50 'HWRFe-51 ' 999. IBP NCEP 360 + 181.00 1.50 'HWRFe-52 ' 999. IBP NCEP 360 + 181.50 1.50 'HWRFe-53 ' 999. IBP NCEP 360 + 182.00 1.50 'HWRFe-54 ' 999. IBP NCEP 360 + 182.50 1.50 'HWRFe-55 ' 999. IBP NCEP 360 + 183.00 1.50 'HWRFe-56 ' 999. IBP NCEP 360 + 183.50 1.50 'HWRFe-57 ' 999. IBP NCEP 360 + 184.00 1.50 'HWRFe-58 ' 999. IBP NCEP 360 + 184.50 1.50 'HWRFe-59 ' 999. IBP NCEP 360 + 185.00 1.50 'HWRFe-60 ' 999. IBP NCEP 360 + 185.50 1.50 'HWRFe-61 ' 999. IBP NCEP 360 + 186.00 1.50 'HWRFe-62 ' 999. IBP NCEP 360 + 186.50 1.50 'HWRFe-63 ' 999. IBP NCEP 360 + 187.00 1.50 'HWRFe-64 ' 999. IBP NCEP 360 + 187.50 1.50 'HWRFe-65 ' 999. IBP NCEP 360 + 188.00 1.50 'HWRFe-66 ' 999. IBP NCEP 360 + 188.50 1.50 'HWRFe-67 ' 999. IBP NCEP 360 + 189.00 1.50 'HWRFe-68 ' 999. IBP NCEP 360 + 189.50 1.50 'HWRFe-69 ' 999. IBP NCEP 360 + 190.00 1.50 'HWRFe-70 ' 999. IBP NCEP 360 + 190.50 1.50 'HWRFe-71 ' 999. IBP NCEP 360 + 191.00 1.50 'HWRFe-72 ' 999. IBP NCEP 360 + 191.50 1.50 'HWRFe-73 ' 999. IBP NCEP 360 + 192.00 1.50 'HWRFe-74 ' 999. IBP NCEP 360 + 192.50 1.50 'HWRFe-75 ' 999. IBP NCEP 360 + 193.00 1.50 'HWRFe-76 ' 999. IBP NCEP 360 + 193.50 1.50 'HWRFe-77 ' 999. IBP NCEP 360 + 194.00 1.50 'HWRFe-78 ' 999. IBP NCEP 360 + 194.50 1.50 'HWRFe-79 ' 999. IBP NCEP 360 + 195.00 1.50 'HWRFe-80 ' 999. IBP NCEP 360 + 195.50 1.50 'HWRFe-81 ' 999. IBP NCEP 360 + 196.00 1.50 'HWRFe-82 ' 999. IBP NCEP 360 + 196.50 1.50 'HWRFe-83 ' 999. IBP NCEP 360 + 197.00 1.50 'HWRFe-84 ' 999. IBP NCEP 360 + 197.50 1.50 'HWRFe-85 ' 999. IBP NCEP 360 + 198.00 1.50 'HWRFe-86 ' 999. IBP NCEP 360 + 198.50 1.50 'HWRFe-87 ' 999. IBP NCEP 360 + 199.00 1.50 'HWRFe-88 ' 999. IBP NCEP 360 + 199.50 1.50 'HWRFe-89 ' 999. IBP NCEP 360 + 200.00 1.50 'HWRFe-90 ' 999. IBP NCEP 360 + 200.50 1.50 'HWRFe-91 ' 999. IBP NCEP 360 + 201.00 1.50 'HWRFe-92 ' 999. IBP NCEP 360 + 201.50 1.50 'HWRFe-93 ' 999. IBP NCEP 360 + 202.00 1.50 'HWRFe-94 ' 999. IBP NCEP 360 + 202.50 1.50 'HWRFe-95 ' 999. IBP NCEP 360 + 203.00 1.50 'HWRFe-96 ' 999. IBP NCEP 360 + 203.50 1.50 'HWRFe-97 ' 999. IBP NCEP 360 + 204.00 1.50 'HWRFe-98 ' 999. IBP NCEP 360 + 204.50 1.50 'HWRFe-99 ' 999. IBP NCEP 360 + 205.00 1.50 'HWRFe-100 ' 999. IBP NCEP 360 + 205.50 1.50 'HWRFe-101 ' 999. IBP NCEP 360 + 206.00 1.50 'HWRFe-102 ' 999. IBP NCEP 360 + 206.50 1.50 'HWRFe-103 ' 999. IBP NCEP 360 + 207.00 1.50 'HWRFe-104 ' 999. IBP NCEP 360 + 207.50 1.50 'HWRFe-105 ' 999. IBP NCEP 360 + 208.00 1.50 'HWRFe-106 ' 999. IBP NCEP 360 + 208.50 1.50 'HWRFe-107 ' 999. IBP NCEP 360 + 209.00 1.50 'HWRFe-108 ' 999. IBP NCEP 360 + 209.50 1.50 'HWRFe-109 ' 999. IBP NCEP 360 + 210.00 1.50 'HWRFe-110 ' 999. IBP NCEP 360 + 210.50 1.50 'HWRFe-111 ' 999. IBP NCEP 360 + 211.00 1.50 'HWRFe-112 ' 999. IBP NCEP 360 + 211.50 1.50 'HWRFe-113 ' 999. IBP NCEP 360 + 212.00 1.50 'HWRFe-114 ' 999. IBP NCEP 360 + 212.50 1.50 'HWRFe-115 ' 999. IBP NCEP 360 + 213.00 1.50 'HWRFe-116 ' 999. IBP NCEP 360 + 213.50 1.50 'HWRFe-117 ' 999. IBP NCEP 360 + 214.00 1.50 'HWRFe-118 ' 999. IBP NCEP 360 + 214.50 1.50 'HWRFe-119 ' 999. IBP NCEP 360 + 215.00 1.50 'HWRFe-120 ' 999. IBP NCEP 360 + 215.50 1.50 'HWRFe-121 ' 999. IBP NCEP 360 + 216.00 1.50 'HWRFe-122 ' 999. IBP NCEP 360 + 216.50 1.50 'HWRFe-123 ' 999. IBP NCEP 360 + 217.00 1.50 'HWRFe-124 ' 999. IBP NCEP 360 + 217.50 1.50 'HWRFe-125 ' 999. IBP NCEP 360 + 218.00 1.50 'HWRFe-126 ' 999. IBP NCEP 360 + 218.50 1.50 'HWRFe-127 ' 999. IBP NCEP 360 + 219.00 1.50 'HWRFe-128 ' 999. IBP NCEP 360 + 219.50 1.50 'HWRFe-129 ' 999. IBP NCEP 360 + 220.00 1.50 'HWRFe-130 ' 999. IBP NCEP 360 + 220.50 1.50 'HWRFe-131 ' 999. IBP NCEP 360 + 221.00 1.50 'HWRFe-132 ' 999. IBP NCEP 360 + 221.50 1.50 'HWRFe-133 ' 999. IBP NCEP 360 + 222.00 1.50 'HWRFe-134 ' 999. IBP NCEP 360 + 222.50 1.50 'HWRFe-135 ' 999. IBP NCEP 360 + 223.00 1.50 'HWRFe-136 ' 999. IBP NCEP 360 + 223.50 1.50 'HWRFe-137 ' 999. IBP NCEP 360 + 224.00 1.50 'HWRFe-138 ' 999. IBP NCEP 360 + 224.50 1.50 'HWRFe-139 ' 999. IBP NCEP 360 + 225.00 1.50 'HWRFe-140 ' 999. IBP NCEP 360 + 225.50 1.50 'HWRFe-141 ' 999. IBP NCEP 360 + 226.00 1.50 'HWRFe-142 ' 999. IBP NCEP 360 + 226.50 1.50 'HWRFe-143 ' 999. IBP NCEP 360 + 227.00 1.50 'HWRFe-144 ' 999. IBP NCEP 360 + 227.50 1.50 'HWRFe-145 ' 999. IBP NCEP 360 + 228.00 1.50 'HWRFe-146 ' 999. IBP NCEP 360 + 228.50 1.50 'HWRFe-147 ' 999. IBP NCEP 360 + 229.00 1.50 'HWRFe-148 ' 999. IBP NCEP 360 + 229.50 1.50 'HWRFe-149 ' 999. IBP NCEP 360 + 230.00 1.50 'HWRFe-150 ' 999. IBP NCEP 360 + 230.50 1.50 'HWRFe-151 ' 999. IBP NCEP 360 + 231.00 1.50 'HWRFe-152 ' 999. IBP NCEP 360 + 231.50 1.50 'HWRFe-153 ' 999. IBP NCEP 360 + 232.00 1.50 'HWRFe-154 ' 999. IBP NCEP 360 + 232.50 1.50 'HWRFe-155 ' 999. IBP NCEP 360 + 233.00 1.50 'HWRFe-156 ' 999. IBP NCEP 360 + 233.50 1.50 'HWRFe-157 ' 999. IBP NCEP 360 + 234.00 1.50 'HWRFe-158 ' 999. IBP NCEP 360 + 234.50 1.50 'HWRFe-159 ' 999. IBP NCEP 360 + 235.00 1.50 'HWRFe-160 ' 999. IBP NCEP 360 + 235.50 1.50 'HWRFe-161 ' 999. IBP NCEP 360 + 236.00 1.50 'HWRFe-162 ' 999. IBP NCEP 360 + 236.50 1.50 'HWRFe-163 ' 999. IBP NCEP 360 + 237.00 1.50 'HWRFe-164 ' 999. IBP NCEP 360 + 237.50 1.50 'HWRFe-165 ' 999. IBP NCEP 360 + 238.00 1.50 'HWRFe-166 ' 999. IBP NCEP 360 + 238.50 1.50 'HWRFe-167 ' 999. IBP NCEP 360 + 239.00 1.50 'HWRFe-168 ' 999. IBP NCEP 360 + 239.50 1.50 'HWRFe-169 ' 999. IBP NCEP 360 + 240.00 1.50 'HWRFe-170 ' 999. IBP NCEP 360 + 240.50 1.50 'HWRFe-171 ' 999. IBP NCEP 360 + 241.00 1.50 'HWRFe-172 ' 999. IBP NCEP 360 + 241.50 1.50 'HWRFe-173 ' 999. IBP NCEP 360 + 242.00 1.50 'HWRFe-174 ' 999. IBP NCEP 360 + 242.50 1.50 'HWRFe-175 ' 999. IBP NCEP 360 + 243.00 1.50 'HWRFe-176 ' 999. IBP NCEP 360 + 243.50 1.50 'HWRFe-177 ' 999. IBP NCEP 360 + 244.00 1.50 'HWRFe-178 ' 999. IBP NCEP 360 + 244.50 1.50 'HWRFe-179 ' 999. IBP NCEP 360 + 245.00 1.50 'HWRFe-180 ' 999. IBP NCEP 360 + 245.50 1.50 'HWRFe-181 ' 999. IBP NCEP 360 + 246.00 1.50 'HWRFe-182 ' 999. IBP NCEP 360 + 246.50 1.50 'HWRFe-183 ' 999. IBP NCEP 360 + 247.00 1.50 'HWRFe-184 ' 999. IBP NCEP 360 + 247.50 1.50 'HWRFe-185 ' 999. IBP NCEP 360 + 248.00 1.50 'HWRFe-186 ' 999. IBP NCEP 360 + 248.50 1.50 'HWRFe-187 ' 999. IBP NCEP 360 + 249.00 1.50 'HWRFe-188 ' 999. IBP NCEP 360 + 249.50 1.50 'HWRFe-189 ' 999. IBP NCEP 360 + 250.00 1.50 'HWRFe-190 ' 999. IBP NCEP 360 + 250.50 1.50 'HWRFe-191 ' 999. IBP NCEP 360 + 251.00 1.50 'HWRFe-192 ' 999. IBP NCEP 360 + 251.50 1.50 'HWRFe-193 ' 999. IBP NCEP 360 + 252.00 1.50 'HWRFe-194 ' 999. IBP NCEP 360 + 252.50 1.50 'HWRFe-195 ' 999. IBP NCEP 360 + 253.00 1.50 'HWRFe-196 ' 999. IBP NCEP 360 + 253.50 1.50 'HWRFe-197 ' 999. IBP NCEP 360 + 254.00 1.50 'HWRFe-198 ' 999. IBP NCEP 360 + 254.50 1.50 'HWRFe-199 ' 999. IBP NCEP 360 + 255.00 1.50 'HWRFe-200 ' 999. IBP NCEP 360 + 255.50 1.50 'HWRFe-201 ' 999. IBP NCEP 360 + 256.00 1.50 'HWRFe-202 ' 999. IBP NCEP 360 + 256.50 1.50 'HWRFe-203 ' 999. IBP NCEP 360 + 257.00 1.50 'HWRFe-204 ' 999. IBP NCEP 360 + 257.50 1.50 'HWRFe-205 ' 999. IBP NCEP 360 + 258.00 1.50 'HWRFe-206 ' 999. IBP NCEP 360 + 258.50 1.50 'HWRFe-207 ' 999. IBP NCEP 360 + 259.00 1.50 'HWRFe-208 ' 999. IBP NCEP 360 + 259.50 1.50 'HWRFe-209 ' 999. IBP NCEP 360 + 260.00 1.50 'HWRFe-210 ' 999. IBP NCEP 360 + 260.50 1.50 'HWRFe-211 ' 999. IBP NCEP 360 + 261.00 1.50 'HWRFe-212 ' 999. IBP NCEP 360 + 261.50 1.50 'HWRFe-213 ' 999. IBP NCEP 360 + 262.00 1.50 'HWRFe-214 ' 999. IBP NCEP 360 + 262.50 1.50 'HWRFe-215 ' 999. IBP NCEP 360 + 263.00 1.50 'HWRFe-216 ' 999. IBP NCEP 360 + 263.50 1.50 'HWRFe-217 ' 999. IBP NCEP 360 + 264.00 1.50 'HWRFe-218 ' 999. IBP NCEP 360 + 264.50 1.50 'HWRFe-219 ' 999. IBP NCEP 360 + 265.00 1.50 'HWRFe-220 ' 999. IBP NCEP 360 + 265.50 1.50 'HWRFe-221 ' 999. IBP NCEP 360 + 266.00 1.50 'HWRFe-222 ' 999. IBP NCEP 360 + 266.50 1.50 'HWRFe-223 ' 999. IBP NCEP 360 + 267.00 1.50 'HWRFe-224 ' 999. IBP NCEP 360 + 267.50 1.50 'HWRFe-225 ' 999. IBP NCEP 360 + 268.00 1.50 'HWRFe-226 ' 999. IBP NCEP 360 + 268.50 1.50 'HWRFe-227 ' 999. IBP NCEP 360 + 269.00 1.50 'HWRFe-228 ' 999. IBP NCEP 360 + 269.50 1.50 'HWRFe-229 ' 999. IBP NCEP 360 + 270.00 1.50 'HWRFe-230 ' 999. IBP NCEP 360 + 270.50 1.50 'HWRFe-231 ' 999. IBP NCEP 360 + 271.00 1.50 'HWRFe-232 ' 999. IBP NCEP 360 + 271.50 1.50 'HWRFe-233 ' 999. IBP NCEP 360 + 272.00 1.50 'HWRFe-234 ' 999. IBP NCEP 360 + 272.50 1.50 'HWRFe-235 ' 999. IBP NCEP 360 + 273.00 1.50 'HWRFe-236 ' 999. IBP NCEP 360 + 273.50 1.50 'HWRFe-237 ' 999. IBP NCEP 360 + 274.00 1.50 'HWRFe-238 ' 999. IBP NCEP 360 + 274.50 1.50 'HWRFe-239 ' 999. IBP NCEP 360 + 275.00 1.50 'HWRFe-240 ' 999. IBP NCEP 360 + 275.50 1.50 'HWRFe-241 ' 999. IBP NCEP 360 + 276.00 1.50 'HWRFe-242 ' 999. IBP NCEP 360 + 276.50 1.50 'HWRFe-243 ' 999. IBP NCEP 360 + 277.00 1.50 'HWRFe-244 ' 999. IBP NCEP 360 + 277.50 1.50 'HWRFe-245 ' 999. IBP NCEP 360 + 278.00 1.50 'HWRFe-246 ' 999. IBP NCEP 360 + 234.00 41.50 'HWRFe-247 ' 999. IBP NCEP 360 + 233.50 41.50 'HWRFe-248 ' 999. IBP NCEP 360 + 233.00 41.50 'HWRFe-249 ' 999. IBP NCEP 360 + 232.50 41.50 'HWRFe-250 ' 999. IBP NCEP 360 + 232.00 41.50 'HWRFe-251 ' 999. IBP NCEP 360 + 231.50 41.50 'HWRFe-252 ' 999. IBP NCEP 360 + 231.00 41.50 'HWRFe-253 ' 999. IBP NCEP 360 + 230.50 41.50 'HWRFe-254 ' 999. IBP NCEP 360 + 230.00 41.50 'HWRFe-255 ' 999. IBP NCEP 360 + 229.50 41.50 'HWRFe-256 ' 999. IBP NCEP 360 + 229.00 41.50 'HWRFe-257 ' 999. IBP NCEP 360 + 228.50 41.50 'HWRFe-258 ' 999. IBP NCEP 360 + 228.00 41.50 'HWRFe-259 ' 999. IBP NCEP 360 + 227.50 41.50 'HWRFe-260 ' 999. IBP NCEP 360 + 227.00 41.50 'HWRFe-261 ' 999. IBP NCEP 360 + 226.50 41.50 'HWRFe-262 ' 999. IBP NCEP 360 + 226.00 41.50 'HWRFe-263 ' 999. IBP NCEP 360 + 225.50 41.50 'HWRFe-264 ' 999. IBP NCEP 360 + 225.00 41.50 'HWRFe-265 ' 999. IBP NCEP 360 + 224.50 41.50 'HWRFe-266 ' 999. IBP NCEP 360 + 224.00 41.50 'HWRFe-267 ' 999. IBP NCEP 360 + 223.50 41.50 'HWRFe-268 ' 999. IBP NCEP 360 + 223.00 41.50 'HWRFe-269 ' 999. IBP NCEP 360 + 222.50 41.50 'HWRFe-270 ' 999. IBP NCEP 360 + 222.00 41.50 'HWRFe-271 ' 999. IBP NCEP 360 + 221.50 41.50 'HWRFe-272 ' 999. IBP NCEP 360 + 221.00 41.50 'HWRFe-273 ' 999. IBP NCEP 360 + 220.50 41.50 'HWRFe-274 ' 999. IBP NCEP 360 + 220.00 41.50 'HWRFe-275 ' 999. IBP NCEP 360 + 219.50 41.50 'HWRFe-276 ' 999. IBP NCEP 360 + 219.00 41.50 'HWRFe-277 ' 999. IBP NCEP 360 + 218.50 41.50 'HWRFe-278 ' 999. IBP NCEP 360 + 218.00 41.50 'HWRFe-279 ' 999. IBP NCEP 360 + 217.50 41.50 'HWRFe-280 ' 999. IBP NCEP 360 + 217.00 41.50 'HWRFe-281 ' 999. IBP NCEP 360 + 216.50 41.50 'HWRFe-282 ' 999. IBP NCEP 360 + 216.00 41.50 'HWRFe-283 ' 999. IBP NCEP 360 + 215.50 41.50 'HWRFe-284 ' 999. IBP NCEP 360 + 215.00 41.50 'HWRFe-285 ' 999. IBP NCEP 360 + 214.50 41.50 'HWRFe-286 ' 999. IBP NCEP 360 + 214.00 41.50 'HWRFe-287 ' 999. IBP NCEP 360 + 213.50 41.50 'HWRFe-288 ' 999. IBP NCEP 360 + 213.00 41.50 'HWRFe-289 ' 999. IBP NCEP 360 + 212.50 41.50 'HWRFe-290 ' 999. IBP NCEP 360 + 212.00 41.50 'HWRFe-291 ' 999. IBP NCEP 360 + 211.50 41.50 'HWRFe-292 ' 999. IBP NCEP 360 + 211.00 41.50 'HWRFe-293 ' 999. IBP NCEP 360 + 210.50 41.50 'HWRFe-294 ' 999. IBP NCEP 360 + 210.00 41.50 'HWRFe-295 ' 999. IBP NCEP 360 + 209.50 41.50 'HWRFe-296 ' 999. IBP NCEP 360 + 209.00 41.50 'HWRFe-297 ' 999. IBP NCEP 360 + 208.50 41.50 'HWRFe-298 ' 999. IBP NCEP 360 + 208.00 41.50 'HWRFe-299 ' 999. IBP NCEP 360 + 207.50 41.50 'HWRFe-300 ' 999. IBP NCEP 360 + 207.00 41.50 'HWRFe-301 ' 999. IBP NCEP 360 + 206.50 41.50 'HWRFe-302 ' 999. IBP NCEP 360 + 206.00 41.50 'HWRFe-303 ' 999. IBP NCEP 360 + 205.50 41.50 'HWRFe-304 ' 999. IBP NCEP 360 + 205.00 41.50 'HWRFe-305 ' 999. IBP NCEP 360 + 204.50 41.50 'HWRFe-306 ' 999. IBP NCEP 360 + 204.00 41.50 'HWRFe-307 ' 999. IBP NCEP 360 + 203.50 41.50 'HWRFe-308 ' 999. IBP NCEP 360 + 203.00 41.50 'HWRFe-309 ' 999. IBP NCEP 360 + 202.50 41.50 'HWRFe-310 ' 999. IBP NCEP 360 + 202.00 41.50 'HWRFe-311 ' 999. IBP NCEP 360 + 201.50 41.50 'HWRFe-312 ' 999. IBP NCEP 360 + 201.00 41.50 'HWRFe-313 ' 999. IBP NCEP 360 + 200.50 41.50 'HWRFe-314 ' 999. IBP NCEP 360 + 200.00 41.50 'HWRFe-315 ' 999. IBP NCEP 360 + 199.50 41.50 'HWRFe-316 ' 999. IBP NCEP 360 + 199.00 41.50 'HWRFe-317 ' 999. IBP NCEP 360 + 198.50 41.50 'HWRFe-318 ' 999. IBP NCEP 360 + 198.00 41.50 'HWRFe-319 ' 999. IBP NCEP 360 + 197.50 41.50 'HWRFe-320 ' 999. IBP NCEP 360 + 197.00 41.50 'HWRFe-321 ' 999. IBP NCEP 360 + 196.50 41.50 'HWRFe-322 ' 999. IBP NCEP 360 + 196.00 41.50 'HWRFe-323 ' 999. IBP NCEP 360 + 195.50 41.50 'HWRFe-324 ' 999. IBP NCEP 360 + 195.00 41.50 'HWRFe-325 ' 999. IBP NCEP 360 + 194.50 41.50 'HWRFe-326 ' 999. IBP NCEP 360 + 194.00 41.50 'HWRFe-327 ' 999. IBP NCEP 360 + 193.50 41.50 'HWRFe-328 ' 999. IBP NCEP 360 + 193.00 41.50 'HWRFe-329 ' 999. IBP NCEP 360 + 192.50 41.50 'HWRFe-330 ' 999. IBP NCEP 360 + 192.00 41.50 'HWRFe-331 ' 999. IBP NCEP 360 + 191.50 41.50 'HWRFe-332 ' 999. IBP NCEP 360 + 191.00 41.50 'HWRFe-333 ' 999. IBP NCEP 360 + 190.50 41.50 'HWRFe-334 ' 999. IBP NCEP 360 + 190.00 41.50 'HWRFe-335 ' 999. IBP NCEP 360 + 189.50 41.50 'HWRFe-336 ' 999. IBP NCEP 360 + 189.00 41.50 'HWRFe-337 ' 999. IBP NCEP 360 + 188.50 41.50 'HWRFe-338 ' 999. IBP NCEP 360 + 188.00 41.50 'HWRFe-339 ' 999. IBP NCEP 360 + 187.50 41.50 'HWRFe-340 ' 999. IBP NCEP 360 + 187.00 41.50 'HWRFe-341 ' 999. IBP NCEP 360 + 186.50 41.50 'HWRFe-342 ' 999. IBP NCEP 360 + 186.00 41.50 'HWRFe-343 ' 999. IBP NCEP 360 + 185.50 41.50 'HWRFe-344 ' 999. IBP NCEP 360 + 185.00 41.50 'HWRFe-345 ' 999. IBP NCEP 360 + 184.50 41.50 'HWRFe-346 ' 999. IBP NCEP 360 + 184.00 41.50 'HWRFe-347 ' 999. IBP NCEP 360 + 183.50 41.50 'HWRFe-348 ' 999. IBP NCEP 360 + 183.00 41.50 'HWRFe-349 ' 999. IBP NCEP 360 + 182.50 41.50 'HWRFe-350 ' 999. IBP NCEP 360 + 182.00 41.50 'HWRFe-351 ' 999. IBP NCEP 360 + 181.50 41.50 'HWRFe-352 ' 999. IBP NCEP 360 + 181.00 41.50 'HWRFe-353 ' 999. IBP NCEP 360 + 180.50 41.50 'HWRFe-354 ' 999. IBP NCEP 360 + 180.00 41.50 'HWRFe-355 ' 999. IBP NCEP 360 + 180.00 41.00 'HWRFe-356 ' 999. IBP NCEP 360 + 180.00 40.50 'HWRFe-357 ' 999. IBP NCEP 360 + 180.00 40.00 'HWRFe-358 ' 999. IBP NCEP 360 + 180.00 39.50 'HWRFe-359 ' 999. IBP NCEP 360 + 180.00 39.00 'HWRFe-360 ' 999. IBP NCEP 360 + 180.00 38.50 'HWRFe-361 ' 999. IBP NCEP 360 + 180.00 38.00 'HWRFe-362 ' 999. IBP NCEP 360 + 180.00 37.50 'HWRFe-363 ' 999. IBP NCEP 360 + 180.00 37.00 'HWRFe-364 ' 999. IBP NCEP 360 + 180.00 36.50 'HWRFe-365 ' 999. IBP NCEP 360 + 180.00 36.00 'HWRFe-366 ' 999. IBP NCEP 360 + 180.00 35.50 'HWRFe-367 ' 999. IBP NCEP 360 + 180.00 35.00 'HWRFe-368 ' 999. IBP NCEP 360 + 180.00 34.50 'HWRFe-369 ' 999. IBP NCEP 360 + 180.00 34.00 'HWRFe-370 ' 999. IBP NCEP 360 + 180.00 33.50 'HWRFe-371 ' 999. IBP NCEP 360 + 180.00 33.00 'HWRFe-372 ' 999. IBP NCEP 360 + 180.00 32.50 'HWRFe-373 ' 999. IBP NCEP 360 + 180.00 32.00 'HWRFe-374 ' 999. IBP NCEP 360 + 180.00 31.50 'HWRFe-375 ' 999. IBP NCEP 360 + 180.00 31.00 'HWRFe-376 ' 999. IBP NCEP 360 + 180.00 30.50 'HWRFe-377 ' 999. IBP NCEP 360 + 180.00 30.00 'HWRFe-378 ' 999. IBP NCEP 360 + 180.00 29.50 'HWRFe-379 ' 999. IBP NCEP 360 + 180.00 29.00 'HWRFe-380 ' 999. IBP NCEP 360 + 180.00 28.50 'HWRFe-381 ' 999. IBP NCEP 360 + 180.00 28.00 'HWRFe-382 ' 999. IBP NCEP 360 + 180.00 27.50 'HWRFe-383 ' 999. IBP NCEP 360 + 180.00 27.00 'HWRFe-384 ' 999. IBP NCEP 360 + 180.00 26.50 'HWRFe-385 ' 999. IBP NCEP 360 + 180.00 26.00 'HWRFe-386 ' 999. IBP NCEP 360 + 180.00 25.50 'HWRFe-387 ' 999. IBP NCEP 360 + 180.00 25.00 'HWRFe-388 ' 999. IBP NCEP 360 + 180.00 24.50 'HWRFe-389 ' 999. IBP NCEP 360 + 180.00 24.00 'HWRFe-390 ' 999. IBP NCEP 360 + 180.00 23.50 'HWRFe-391 ' 999. IBP NCEP 360 + 180.00 23.00 'HWRFe-392 ' 999. IBP NCEP 360 + 180.00 22.50 'HWRFe-393 ' 999. IBP NCEP 360 + 180.00 22.00 'HWRFe-394 ' 999. IBP NCEP 360 + 180.00 21.50 'HWRFe-395 ' 999. IBP NCEP 360 + 180.00 21.00 'HWRFe-396 ' 999. IBP NCEP 360 + 180.00 20.50 'HWRFe-397 ' 999. IBP NCEP 360 + 180.00 20.00 'HWRFe-398 ' 999. IBP NCEP 360 + 180.00 19.50 'HWRFe-399 ' 999. IBP NCEP 360 + 180.00 19.00 'HWRFe-400 ' 999. IBP NCEP 360 + 180.00 18.50 'HWRFe-401 ' 999. IBP NCEP 360 + 180.00 18.00 'HWRFe-402 ' 999. IBP NCEP 360 + 180.00 17.50 'HWRFe-403 ' 999. IBP NCEP 360 + 180.00 17.00 'HWRFe-404 ' 999. IBP NCEP 360 + 180.00 16.50 'HWRFe-405 ' 999. IBP NCEP 360 + 180.00 16.00 'HWRFe-406 ' 999. IBP NCEP 360 + 180.00 15.50 'HWRFe-407 ' 999. IBP NCEP 360 + 180.00 15.00 'HWRFe-408 ' 999. IBP NCEP 360 + 180.00 14.50 'HWRFe-409 ' 999. IBP NCEP 360 + 180.00 14.00 'HWRFe-410 ' 999. IBP NCEP 360 + 180.00 13.50 'HWRFe-411 ' 999. IBP NCEP 360 + 180.00 13.00 'HWRFe-412 ' 999. IBP NCEP 360 + 180.00 12.50 'HWRFe-413 ' 999. IBP NCEP 360 + 180.00 12.00 'HWRFe-414 ' 999. IBP NCEP 360 + 180.00 11.50 'HWRFe-415 ' 999. IBP NCEP 360 + 180.00 11.00 'HWRFe-416 ' 999. IBP NCEP 360 + 180.00 10.50 'HWRFe-417 ' 999. IBP NCEP 360 + 180.00 10.00 'HWRFe-418 ' 999. IBP NCEP 360 + 180.00 9.50 'HWRFe-419 ' 999. IBP NCEP 360 + 180.00 9.00 'HWRFe-420 ' 999. IBP NCEP 360 + 180.00 8.50 'HWRFe-421 ' 999. IBP NCEP 360 + 180.00 8.00 'HWRFe-422 ' 999. IBP NCEP 360 + 180.00 7.50 'HWRFe-423 ' 999. IBP NCEP 360 + 180.00 7.00 'HWRFe-424 ' 999. IBP NCEP 360 + 180.00 6.50 'HWRFe-425 ' 999. IBP NCEP 360 + 180.00 6.00 'HWRFe-426 ' 999. IBP NCEP 360 + 180.00 5.50 'HWRFe-427 ' 999. IBP NCEP 360 + 180.00 5.00 'HWRFe-428 ' 999. IBP NCEP 360 + 180.00 4.50 'HWRFe-429 ' 999. IBP NCEP 360 + 180.00 4.00 'HWRFe-430 ' 999. IBP NCEP 360 + 180.00 3.50 'HWRFe-431 ' 999. IBP NCEP 360 + 180.00 3.00 'HWRFe-432 ' 999. IBP NCEP 360 + 180.00 2.50 'HWRFe-433 ' 999. IBP NCEP 360 + 180.00 2.00 'HWRFe-434 ' 999. IBP NCEP 360 +$ +$ HWRF wave grid boundary points -- Region l (NATL) +$ + 312.00 1.50 'HWRFl-50 ' 999. IBP NCEP 360 + 312.50 1.50 'HWRFl-51 ' 999. IBP NCEP 360 + 313.00 1.50 'HWRFl-52 ' 999. IBP NCEP 360 + 313.50 1.50 'HWRFl-53 ' 999. IBP NCEP 360 + 314.00 1.50 'HWRFl-54 ' 999. IBP NCEP 360 + 314.50 1.50 'HWRFl-55 ' 999. IBP NCEP 360 + 315.00 1.50 'HWRFl-56 ' 999. IBP NCEP 360 + 315.50 1.50 'HWRFl-57 ' 999. IBP NCEP 360 + 316.00 1.50 'HWRFl-58 ' 999. IBP NCEP 360 + 316.50 1.50 'HWRFl-59 ' 999. IBP NCEP 360 + 317.00 1.50 'HWRFl-60 ' 999. IBP NCEP 360 + 317.50 1.50 'HWRFl-61 ' 999. IBP NCEP 360 + 318.00 1.50 'HWRFl-62 ' 999. IBP NCEP 360 + 318.50 1.50 'HWRFl-63 ' 999. IBP NCEP 360 + 319.00 1.50 'HWRFl-64 ' 999. IBP NCEP 360 + 319.50 1.50 'HWRFl-65 ' 999. IBP NCEP 360 + 320.00 1.50 'HWRFl-66 ' 999. IBP NCEP 360 + 320.50 1.50 'HWRFl-67 ' 999. IBP NCEP 360 + 321.00 1.50 'HWRFl-68 ' 999. IBP NCEP 360 + 321.50 1.50 'HWRFl-69 ' 999. IBP NCEP 360 + 322.00 1.50 'HWRFl-70 ' 999. IBP NCEP 360 + 322.50 1.50 'HWRFl-71 ' 999. IBP NCEP 360 + 323.00 1.50 'HWRFl-72 ' 999. IBP NCEP 360 + 323.50 1.50 'HWRFl-73 ' 999. IBP NCEP 360 + 324.00 1.50 'HWRFl-74 ' 999. IBP NCEP 360 + 324.50 1.50 'HWRFl-75 ' 999. IBP NCEP 360 + 325.00 1.50 'HWRFl-76 ' 999. IBP NCEP 360 + 325.50 1.50 'HWRFl-77 ' 999. IBP NCEP 360 + 326.00 1.50 'HWRFl-78 ' 999. IBP NCEP 360 + 326.50 1.50 'HWRFl-79 ' 999. IBP NCEP 360 + 327.00 1.50 'HWRFl-80 ' 999. IBP NCEP 360 + 327.50 1.50 'HWRFl-81 ' 999. IBP NCEP 360 + 328.00 1.50 'HWRFl-82 ' 999. IBP NCEP 360 + 328.50 1.50 'HWRFl-83 ' 999. IBP NCEP 360 + 329.00 1.50 'HWRFl-84 ' 999. IBP NCEP 360 + 329.50 1.50 'HWRFl-85 ' 999. IBP NCEP 360 + 330.00 1.50 'HWRFl-86 ' 999. IBP NCEP 360 + 330.50 1.50 'HWRFl-87 ' 999. IBP NCEP 360 + 331.00 1.50 'HWRFl-88 ' 999. IBP NCEP 360 + 331.50 1.50 'HWRFl-89 ' 999. IBP NCEP 360 + 332.00 1.50 'HWRFl-90 ' 999. IBP NCEP 360 + 332.50 1.50 'HWRFl-91 ' 999. IBP NCEP 360 + 333.00 1.50 'HWRFl-92 ' 999. IBP NCEP 360 + 333.50 1.50 'HWRFl-93 ' 999. IBP NCEP 360 + 334.00 1.50 'HWRFl-94 ' 999. IBP NCEP 360 + 334.50 1.50 'HWRFl-95 ' 999. IBP NCEP 360 + 335.00 1.50 'HWRFl-96 ' 999. IBP NCEP 360 + 335.50 1.50 'HWRFl-97 ' 999. IBP NCEP 360 + 336.00 1.50 'HWRFl-98 ' 999. IBP NCEP 360 + 336.50 1.50 'HWRFl-99 ' 999. IBP NCEP 360 + 337.00 1.50 'HWRFl-100 ' 999. IBP NCEP 360 + 337.50 1.50 'HWRFl-101 ' 999. IBP NCEP 360 + 338.00 1.50 'HWRFl-102 ' 999. IBP NCEP 360 + 338.50 1.50 'HWRFl-103 ' 999. IBP NCEP 360 + 339.00 1.50 'HWRFl-104 ' 999. IBP NCEP 360 + 339.50 1.50 'HWRFl-105 ' 999. IBP NCEP 360 + 340.00 1.50 'HWRFl-106 ' 999. IBP NCEP 360 + 340.50 1.50 'HWRFl-107 ' 999. IBP NCEP 360 + 341.00 1.50 'HWRFl-108 ' 999. IBP NCEP 360 + 341.50 1.50 'HWRFl-109 ' 999. IBP NCEP 360 + 342.00 1.50 'HWRFl-110 ' 999. IBP NCEP 360 + 342.50 1.50 'HWRFl-111 ' 999. IBP NCEP 360 + 343.00 1.50 'HWRFl-112 ' 999. IBP NCEP 360 + 343.50 1.50 'HWRFl-113 ' 999. IBP NCEP 360 + 344.00 1.50 'HWRFl-114 ' 999. IBP NCEP 360 + 344.50 1.50 'HWRFl-115 ' 999. IBP NCEP 360 + 345.00 1.50 'HWRFl-116 ' 999. IBP NCEP 360 + 345.50 1.50 'HWRFl-117 ' 999. IBP NCEP 360 + 346.00 1.50 'HWRFl-118 ' 999. IBP NCEP 360 + 346.50 1.50 'HWRFl-119 ' 999. IBP NCEP 360 + 347.00 1.50 'HWRFl-120 ' 999. IBP NCEP 360 + 347.50 1.50 'HWRFl-121 ' 999. IBP NCEP 360 + 348.00 1.50 'HWRFl-122 ' 999. IBP NCEP 360 + 348.50 1.50 'HWRFl-123 ' 999. IBP NCEP 360 + 349.00 1.50 'HWRFl-124 ' 999. IBP NCEP 360 + 349.50 1.50 'HWRFl-125 ' 999. IBP NCEP 360 + 350.00 1.50 'HWRFl-126 ' 999. IBP NCEP 360 + 350.50 1.50 'HWRFl-127 ' 999. IBP NCEP 360 + 351.00 1.50 'HWRFl-128 ' 999. IBP NCEP 360 + 351.50 1.50 'HWRFl-129 ' 999. IBP NCEP 360 + 352.00 1.50 'HWRFl-130 ' 999. IBP NCEP 360 + 352.00 2.00 'HWRFl-131 ' 999. IBP NCEP 360 + 352.00 2.50 'HWRFl-132 ' 999. IBP NCEP 360 + 352.00 3.00 'HWRFl-133 ' 999. IBP NCEP 360 + 352.00 3.50 'HWRFl-134 ' 999. IBP NCEP 360 + 352.00 45.50 'HWRFl-135 ' 999. IBP NCEP 360 + 351.50 45.50 'HWRFl-136 ' 999. IBP NCEP 360 + 351.00 45.50 'HWRFl-137 ' 999. IBP NCEP 360 + 350.50 45.50 'HWRFl-138 ' 999. IBP NCEP 360 + 350.00 45.50 'HWRFl-139 ' 999. IBP NCEP 360 + 349.50 45.50 'HWRFl-140 ' 999. IBP NCEP 360 + 349.00 45.50 'HWRFl-141 ' 999. IBP NCEP 360 + 348.50 45.50 'HWRFl-142 ' 999. IBP NCEP 360 + 348.00 45.50 'HWRFl-143 ' 999. IBP NCEP 360 + 347.50 45.50 'HWRFl-144 ' 999. IBP NCEP 360 + 347.00 45.50 'HWRFl-145 ' 999. IBP NCEP 360 + 346.50 45.50 'HWRFl-146 ' 999. IBP NCEP 360 + 346.00 45.50 'HWRFl-147 ' 999. IBP NCEP 360 + 345.50 45.50 'HWRFl-148 ' 999. IBP NCEP 360 + 345.00 45.50 'HWRFl-149 ' 999. IBP NCEP 360 + 344.50 45.50 'HWRFl-150 ' 999. IBP NCEP 360 + 344.00 45.50 'HWRFl-151 ' 999. IBP NCEP 360 + 343.50 45.50 'HWRFl-152 ' 999. IBP NCEP 360 + 343.00 45.50 'HWRFl-153 ' 999. IBP NCEP 360 + 342.50 45.50 'HWRFl-154 ' 999. IBP NCEP 360 + 342.00 45.50 'HWRFl-155 ' 999. IBP NCEP 360 + 341.50 45.50 'HWRFl-156 ' 999. IBP NCEP 360 + 341.00 45.50 'HWRFl-157 ' 999. IBP NCEP 360 + 340.50 45.50 'HWRFl-158 ' 999. IBP NCEP 360 + 340.00 45.50 'HWRFl-159 ' 999. IBP NCEP 360 + 339.50 45.50 'HWRFl-160 ' 999. IBP NCEP 360 + 339.00 45.50 'HWRFl-161 ' 999. IBP NCEP 360 + 338.50 45.50 'HWRFl-162 ' 999. IBP NCEP 360 + 338.00 45.50 'HWRFl-163 ' 999. IBP NCEP 360 + 337.50 45.50 'HWRFl-164 ' 999. IBP NCEP 360 + 337.00 45.50 'HWRFl-165 ' 999. IBP NCEP 360 + 336.50 45.50 'HWRFl-166 ' 999. IBP NCEP 360 + 336.00 45.50 'HWRFl-167 ' 999. IBP NCEP 360 + 335.50 45.50 'HWRFl-168 ' 999. IBP NCEP 360 + 335.00 45.50 'HWRFl-169 ' 999. IBP NCEP 360 + 334.50 45.50 'HWRFl-170 ' 999. IBP NCEP 360 + 334.00 45.50 'HWRFl-171 ' 999. IBP NCEP 360 + 333.50 45.50 'HWRFl-172 ' 999. IBP NCEP 360 + 333.00 45.50 'HWRFl-173 ' 999. IBP NCEP 360 + 332.50 45.50 'HWRFl-174 ' 999. IBP NCEP 360 + 332.00 45.50 'HWRFl-175 ' 999. IBP NCEP 360 + 331.50 45.50 'HWRFl-176 ' 999. IBP NCEP 360 + 331.00 45.50 'HWRFl-177 ' 999. IBP NCEP 360 + 330.50 45.50 'HWRFl-178 ' 999. IBP NCEP 360 + 330.00 45.50 'HWRFl-179 ' 999. IBP NCEP 360 + 329.50 45.50 'HWRFl-180 ' 999. IBP NCEP 360 + 329.00 45.50 'HWRFl-181 ' 999. IBP NCEP 360 + 328.50 45.50 'HWRFl-182 ' 999. IBP NCEP 360 + 328.00 45.50 'HWRFl-183 ' 999. IBP NCEP 360 + 327.50 45.50 'HWRFl-184 ' 999. IBP NCEP 360 + 327.00 45.50 'HWRFl-185 ' 999. IBP NCEP 360 + 326.50 45.50 'HWRFl-186 ' 999. IBP NCEP 360 + 326.00 45.50 'HWRFl-187 ' 999. IBP NCEP 360 + 325.50 45.50 'HWRFl-188 ' 999. IBP NCEP 360 + 325.00 45.50 'HWRFl-189 ' 999. IBP NCEP 360 + 324.50 45.50 'HWRFl-190 ' 999. IBP NCEP 360 + 324.00 45.50 'HWRFl-191 ' 999. IBP NCEP 360 + 323.50 45.50 'HWRFl-192 ' 999. IBP NCEP 360 + 323.00 45.50 'HWRFl-193 ' 999. IBP NCEP 360 + 322.50 45.50 'HWRFl-194 ' 999. IBP NCEP 360 + 322.00 45.50 'HWRFl-195 ' 999. IBP NCEP 360 + 321.50 45.50 'HWRFl-196 ' 999. IBP NCEP 360 + 321.00 45.50 'HWRFl-197 ' 999. IBP NCEP 360 + 320.50 45.50 'HWRFl-198 ' 999. IBP NCEP 360 + 320.00 45.50 'HWRFl-199 ' 999. IBP NCEP 360 + 319.50 45.50 'HWRFl-200 ' 999. IBP NCEP 360 + 319.00 45.50 'HWRFl-201 ' 999. IBP NCEP 360 + 318.50 45.50 'HWRFl-202 ' 999. IBP NCEP 360 + 318.00 45.50 'HWRFl-203 ' 999. IBP NCEP 360 + 317.50 45.50 'HWRFl-204 ' 999. IBP NCEP 360 + 317.00 45.50 'HWRFl-205 ' 999. IBP NCEP 360 + 316.50 45.50 'HWRFl-206 ' 999. IBP NCEP 360 + 316.00 45.50 'HWRFl-207 ' 999. IBP NCEP 360 + 315.50 45.50 'HWRFl-208 ' 999. IBP NCEP 360 + 315.00 45.50 'HWRFl-209 ' 999. IBP NCEP 360 + 314.50 45.50 'HWRFl-210 ' 999. IBP NCEP 360 + 314.00 45.50 'HWRFl-211 ' 999. IBP NCEP 360 + 313.50 45.50 'HWRFl-212 ' 999. IBP NCEP 360 + 313.00 45.50 'HWRFl-213 ' 999. IBP NCEP 360 + 312.50 45.50 'HWRFl-214 ' 999. IBP NCEP 360 + 312.00 45.50 'HWRFl-215 ' 999. IBP NCEP 360 + 311.50 45.50 'HWRFl-216 ' 999. IBP NCEP 360 + 311.00 45.50 'HWRFl-217 ' 999. IBP NCEP 360 + 310.50 45.50 'HWRFl-218 ' 999. IBP NCEP 360 + 310.00 45.50 'HWRFl-219 ' 999. IBP NCEP 360 + 309.50 45.50 'HWRFl-220 ' 999. IBP NCEP 360 + 309.00 45.50 'HWRFl-221 ' 999. IBP NCEP 360 + 308.50 45.50 'HWRFl-222 ' 999. IBP NCEP 360 + 308.00 45.50 'HWRFl-223 ' 999. IBP NCEP 360 + 307.50 45.50 'HWRFl-224 ' 999. IBP NCEP 360 + 307.00 45.50 'HWRFl-225 ' 999. IBP NCEP 360 + 306.50 45.50 'HWRFl-226 ' 999. IBP NCEP 360 + 306.00 45.50 'HWRFl-227 ' 999. IBP NCEP 360 + 305.50 45.50 'HWRFl-228 ' 999. IBP NCEP 360 + 305.00 45.50 'HWRFl-229 ' 999. IBP NCEP 360 + 304.50 45.50 'HWRFl-230 ' 999. IBP NCEP 360 + 304.00 45.50 'HWRFl-231 ' 999. IBP NCEP 360 + 303.50 45.50 'HWRFl-232 ' 999. IBP NCEP 360 + 303.00 45.50 'HWRFl-233 ' 999. IBP NCEP 360 + 302.50 45.50 'HWRFl-234 ' 999. IBP NCEP 360 + 302.00 45.50 'HWRFl-235 ' 999. IBP NCEP 360 + 301.50 45.50 'HWRFl-236 ' 999. IBP NCEP 360 + 301.00 45.50 'HWRFl-237 ' 999. IBP NCEP 360 + 300.50 45.50 'HWRFl-238 ' 999. IBP NCEP 360 + 300.00 45.50 'HWRFl-239 ' 999. IBP NCEP 360 +$ +$ HWRF wave grid boundary points -- Region p (SPAC) +$ + 125.00 -42.50 'HWRFp-50 ' 999. IBP NCEP 360 + 127.00 -42.50 'HWRFp-51 ' 999. IBP NCEP 360 + 129.00 -42.50 'HWRFp-52 ' 999. IBP NCEP 360 + 131.00 -42.50 'HWRFp-53 ' 999. IBP NCEP 360 + 133.00 -42.50 'HWRFp-54 ' 999. IBP NCEP 360 + 135.00 -42.50 'HWRFp-55 ' 999. IBP NCEP 360 + 137.00 -42.50 'HWRFp-56 ' 999. IBP NCEP 360 + 139.00 -42.50 'HWRFp-57 ' 999. IBP NCEP 360 + 141.00 -42.50 'HWRFp-58 ' 999. IBP NCEP 360 + 143.00 -42.50 'HWRFp-59 ' 999. IBP NCEP 360 + 145.00 -42.50 'HWRFp-60 ' 999. IBP NCEP 360 + 147.00 -42.50 'HWRFp-61 ' 999. IBP NCEP 360 + 149.00 -42.50 'HWRFp-62 ' 999. IBP NCEP 360 + 151.00 -42.50 'HWRFp-63 ' 999. IBP NCEP 360 + 153.00 -42.50 'HWRFp-64 ' 999. IBP NCEP 360 + 155.00 -42.50 'HWRFp-65 ' 999. IBP NCEP 360 + 157.00 -42.50 'HWRFp-66 ' 999. IBP NCEP 360 + 159.00 -42.50 'HWRFp-67 ' 999. IBP NCEP 360 + 161.00 -42.50 'HWRFp-68 ' 999. IBP NCEP 360 + 163.00 -42.50 'HWRFp-69 ' 999. IBP NCEP 360 + 165.00 -42.50 'HWRFp-70 ' 999. IBP NCEP 360 + 167.00 -42.50 'HWRFp-71 ' 999. IBP NCEP 360 + 169.00 -42.50 'HWRFp-72 ' 999. IBP NCEP 360 + 175.00 -42.50 'HWRFp-73 ' 999. IBP NCEP 360 + 177.00 -42.50 'HWRFp-74 ' 999. IBP NCEP 360 + 179.00 -42.50 'HWRFp-75 ' 999. IBP NCEP 360 + 181.00 -42.50 'HWRFp-76 ' 999. IBP NCEP 360 + 183.00 -42.50 'HWRFp-77 ' 999. IBP NCEP 360 + 185.00 -42.50 'HWRFp-78 ' 999. IBP NCEP 360 + 187.00 -42.50 'HWRFp-79 ' 999. IBP NCEP 360 + 189.00 -42.50 'HWRFp-80 ' 999. IBP NCEP 360 + 191.00 -42.50 'HWRFp-81 ' 999. IBP NCEP 360 + 193.00 -42.50 'HWRFp-82 ' 999. IBP NCEP 360 + 195.00 -42.50 'HWRFp-83 ' 999. IBP NCEP 360 + 197.00 -42.50 'HWRFp-84 ' 999. IBP NCEP 360 + 199.00 -42.50 'HWRFp-85 ' 999. IBP NCEP 360 + 201.00 -42.50 'HWRFp-86 ' 999. IBP NCEP 360 + 203.00 -42.50 'HWRFp-87 ' 999. IBP NCEP 360 + 205.00 -42.50 'HWRFp-88 ' 999. IBP NCEP 360 + 207.00 -42.50 'HWRFp-89 ' 999. IBP NCEP 360 + 209.00 -42.50 'HWRFp-90 ' 999. IBP NCEP 360 + 211.00 -42.50 'HWRFp-91 ' 999. IBP NCEP 360 + 213.00 -42.50 'HWRFp-92 ' 999. IBP NCEP 360 + 215.00 -42.50 'HWRFp-93 ' 999. IBP NCEP 360 + 217.00 -42.50 'HWRFp-94 ' 999. IBP NCEP 360 + 219.00 -42.50 'HWRFp-95 ' 999. IBP NCEP 360 + 221.00 -42.50 'HWRFp-96 ' 999. IBP NCEP 360 + 223.00 -42.50 'HWRFp-97 ' 999. IBP NCEP 360 + 225.00 -42.50 'HWRFp-98 ' 999. IBP NCEP 360 + 225.00 -40.50 'HWRFp-99 ' 999. IBP NCEP 360 + 225.00 -38.50 'HWRFp-100 ' 999. IBP NCEP 360 + 225.00 -36.50 'HWRFp-101 ' 999. IBP NCEP 360 + 225.00 -34.50 'HWRFp-102 ' 999. IBP NCEP 360 + 225.00 -32.50 'HWRFp-103 ' 999. IBP NCEP 360 + 225.00 -30.50 'HWRFp-104 ' 999. IBP NCEP 360 + 225.00 -28.50 'HWRFp-105 ' 999. IBP NCEP 360 + 225.00 -26.50 'HWRFp-106 ' 999. IBP NCEP 360 + 225.00 -24.50 'HWRFp-107 ' 999. IBP NCEP 360 + 225.00 -22.50 'HWRFp-108 ' 999. IBP NCEP 360 + 225.00 -20.50 'HWRFp-109 ' 999. IBP NCEP 360 + 225.00 -18.50 'HWRFp-110 ' 999. IBP NCEP 360 + 225.00 -16.50 'HWRFp-111 ' 999. IBP NCEP 360 + 225.00 -14.50 'HWRFp-112 ' 999. IBP NCEP 360 + 225.00 -12.50 'HWRFp-113 ' 999. IBP NCEP 360 + 225.00 -10.50 'HWRFp-114 ' 999. IBP NCEP 360 + 225.00 -8.50 'HWRFp-115 ' 999. IBP NCEP 360 + 225.00 -6.50 'HWRFp-116 ' 999. IBP NCEP 360 + 225.00 -4.50 'HWRFp-117 ' 999. IBP NCEP 360 + 225.00 -2.50 'HWRFp-118 ' 999. IBP NCEP 360 + 223.00 -2.50 'HWRFp-119 ' 999. IBP NCEP 360 + 221.00 -2.50 'HWRFp-120 ' 999. IBP NCEP 360 + 219.00 -2.50 'HWRFp-121 ' 999. IBP NCEP 360 + 217.00 -2.50 'HWRFp-122 ' 999. IBP NCEP 360 + 215.00 -2.50 'HWRFp-123 ' 999. IBP NCEP 360 + 213.00 -2.50 'HWRFp-124 ' 999. IBP NCEP 360 + 211.00 -2.50 'HWRFp-125 ' 999. IBP NCEP 360 + 209.00 -2.50 'HWRFp-126 ' 999. IBP NCEP 360 + 207.00 -2.50 'HWRFp-127 ' 999. IBP NCEP 360 + 205.00 -2.50 'HWRFp-128 ' 999. IBP NCEP 360 + 203.00 -2.50 'HWRFp-129 ' 999. IBP NCEP 360 + 201.00 -2.50 'HWRFp-130 ' 999. IBP NCEP 360 + 199.00 -2.50 'HWRFp-131 ' 999. IBP NCEP 360 + 197.00 -2.50 'HWRFp-132 ' 999. IBP NCEP 360 + 195.00 -2.50 'HWRFp-133 ' 999. IBP NCEP 360 + 193.00 -2.50 'HWRFp-134 ' 999. IBP NCEP 360 + 191.00 -2.50 'HWRFp-135 ' 999. IBP NCEP 360 + 189.00 -2.50 'HWRFp-136 ' 999. IBP NCEP 360 + 187.00 -2.50 'HWRFp-137 ' 999. IBP NCEP 360 + 185.00 -2.50 'HWRFp-138 ' 999. IBP NCEP 360 + 183.00 -2.50 'HWRFp-139 ' 999. IBP NCEP 360 + 181.00 -2.50 'HWRFp-140 ' 999. IBP NCEP 360 + 179.00 -2.50 'HWRFp-141 ' 999. IBP NCEP 360 + 177.00 -2.50 'HWRFp-142 ' 999. IBP NCEP 360 + 175.00 -2.50 'HWRFp-143 ' 999. IBP NCEP 360 + 173.00 -2.50 'HWRFp-144 ' 999. IBP NCEP 360 + 171.00 -2.50 'HWRFp-145 ' 999. IBP NCEP 360 + 169.00 -2.50 'HWRFp-146 ' 999. IBP NCEP 360 + 167.00 -2.50 'HWRFp-147 ' 999. IBP NCEP 360 + 165.00 -2.50 'HWRFp-148 ' 999. IBP NCEP 360 + 163.00 -2.50 'HWRFp-149 ' 999. IBP NCEP 360 + 161.00 -2.50 'HWRFp-150 ' 999. IBP NCEP 360 + 159.00 -2.50 'HWRFp-151 ' 999. IBP NCEP 360 + 157.00 -2.50 'HWRFp-152 ' 999. IBP NCEP 360 + 155.00 -2.50 'HWRFp-153 ' 999. IBP NCEP 360 + 153.00 -2.50 'HWRFp-154 ' 999. IBP NCEP 360 + 151.00 -2.50 'HWRFp-155 ' 999. IBP NCEP 360 + 149.00 -2.50 'HWRFp-156 ' 999. IBP NCEP 360 + 147.00 -2.50 'HWRFp-157 ' 999. IBP NCEP 360 + 145.00 -2.50 'HWRFp-158 ' 999. IBP NCEP 360 + 131.00 -2.50 'HWRFp-159 ' 999. IBP NCEP 360 + 127.00 -2.50 'HWRFp-160 ' 999. IBP NCEP 360 + 125.00 -2.50 'HWRFp-161 ' 999. IBP NCEP 360 + 125.00 -4.50 'HWRFp-162 ' 999. IBP NCEP 360 + 125.00 -6.50 'HWRFp-163 ' 999. IBP NCEP 360 + 125.00 -10.50 'HWRFp-164 ' 999. IBP NCEP 360 + 125.00 -12.50 'HWRFp-165 ' 999. IBP NCEP 360 + 125.00 -34.50 'HWRFp-166 ' 999. IBP NCEP 360 + 125.00 -36.50 'HWRFp-167 ' 999. IBP NCEP 360 + 125.00 -38.50 'HWRFp-168 ' 999. IBP NCEP 360 + 125.00 -40.50 'HWRFp-169 ' 999. IBP NCEP 360 +$ +$ HWRF wave grid boundary points -- Region s (SIO) +$ + 31.00 -42.50 'HWRFs-50 ' 999. IBP NCEP 360 + 33.00 -42.50 'HWRFs-51 ' 999. IBP NCEP 360 + 35.00 -42.50 'HWRFs-52 ' 999. IBP NCEP 360 + 37.00 -42.50 'HWRFs-53 ' 999. IBP NCEP 360 + 39.00 -42.50 'HWRFs-54 ' 999. IBP NCEP 360 + 41.00 -42.50 'HWRFs-55 ' 999. IBP NCEP 360 + 43.00 -42.50 'HWRFs-56 ' 999. IBP NCEP 360 + 45.00 -42.50 'HWRFs-57 ' 999. IBP NCEP 360 + 47.00 -42.50 'HWRFs-58 ' 999. IBP NCEP 360 + 49.00 -42.50 'HWRFs-59 ' 999. IBP NCEP 360 + 51.00 -42.50 'HWRFs-60 ' 999. IBP NCEP 360 + 53.00 -42.50 'HWRFs-61 ' 999. IBP NCEP 360 + 55.00 -42.50 'HWRFs-62 ' 999. IBP NCEP 360 + 57.00 -42.50 'HWRFs-63 ' 999. IBP NCEP 360 + 59.00 -42.50 'HWRFs-64 ' 999. IBP NCEP 360 + 61.00 -42.50 'HWRFs-65 ' 999. IBP NCEP 360 + 63.00 -42.50 'HWRFs-66 ' 999. IBP NCEP 360 + 65.00 -42.50 'HWRFs-67 ' 999. IBP NCEP 360 + 67.00 -42.50 'HWRFs-68 ' 999. IBP NCEP 360 + 69.00 -42.50 'HWRFs-69 ' 999. IBP NCEP 360 + 71.00 -42.50 'HWRFs-70 ' 999. IBP NCEP 360 + 73.00 -42.50 'HWRFs-71 ' 999. IBP NCEP 360 + 75.00 -42.50 'HWRFs-72 ' 999. IBP NCEP 360 + 77.00 -42.50 'HWRFs-73 ' 999. IBP NCEP 360 + 79.00 -42.50 'HWRFs-74 ' 999. IBP NCEP 360 + 81.00 -42.50 'HWRFs-75 ' 999. IBP NCEP 360 + 83.00 -42.50 'HWRFs-76 ' 999. IBP NCEP 360 + 85.00 -42.50 'HWRFs-77 ' 999. IBP NCEP 360 + 87.00 -42.50 'HWRFs-78 ' 999. IBP NCEP 360 + 89.00 -42.50 'HWRFs-79 ' 999. IBP NCEP 360 + 91.00 -42.50 'HWRFs-80 ' 999. IBP NCEP 360 + 93.00 -42.50 'HWRFs-81 ' 999. IBP NCEP 360 + 95.00 -42.50 'HWRFs-82 ' 999. IBP NCEP 360 + 97.00 -42.50 'HWRFs-83 ' 999. IBP NCEP 360 + 99.00 -42.50 'HWRFs-84 ' 999. IBP NCEP 360 + 101.00 -42.50 'HWRFs-85 ' 999. IBP NCEP 360 + 103.00 -42.50 'HWRFs-86 ' 999. IBP NCEP 360 + 105.00 -42.50 'HWRFs-87 ' 999. IBP NCEP 360 + 107.00 -42.50 'HWRFs-88 ' 999. IBP NCEP 360 + 109.00 -42.50 'HWRFs-89 ' 999. IBP NCEP 360 + 111.00 -42.50 'HWRFs-90 ' 999. IBP NCEP 360 + 113.00 -42.50 'HWRFs-91 ' 999. IBP NCEP 360 + 115.00 -42.50 'HWRFs-92 ' 999. IBP NCEP 360 + 117.00 -42.50 'HWRFs-93 ' 999. IBP NCEP 360 + 119.00 -42.50 'HWRFs-94 ' 999. IBP NCEP 360 + 121.00 -42.50 'HWRFs-95 ' 999. IBP NCEP 360 + 123.00 -42.50 'HWRFs-96 ' 999. IBP NCEP 360 + 125.00 -42.50 'HWRFs-97 ' 999. IBP NCEP 360 + 127.00 -42.50 'HWRFs-98 ' 999. IBP NCEP 360 + 128.00 -42.50 'HWRFs-99 ' 999. IBP NCEP 360 + 128.00 -40.50 'HWRFs-100 ' 999. IBP NCEP 360 + 128.00 -38.50 'HWRFs-101 ' 999. IBP NCEP 360 + 128.00 -36.50 'HWRFs-102 ' 999. IBP NCEP 360 + 128.00 -34.50 'HWRFs-103 ' 999. IBP NCEP 360 + 128.00 -12.50 'HWRFs-104 ' 999. IBP NCEP 360 + 128.00 -10.50 'HWRFs-105 ' 999. IBP NCEP 360 + 128.00 -8.50 'HWRFs-106 ' 999. IBP NCEP 360 + 128.00 -6.50 'HWRFs-107 ' 999. IBP NCEP 360 + 128.00 -4.50 'HWRFs-108 ' 999. IBP NCEP 360 + 128.00 -2.50 'HWRFs-109 ' 999. IBP NCEP 360 + 127.00 -2.50 'HWRFs-110 ' 999. IBP NCEP 360 + 125.00 -2.50 'HWRFs-111 ' 999. IBP NCEP 360 + 123.00 -2.50 'HWRFs-112 ' 999. IBP NCEP 360 + 117.00 -2.50 'HWRFs-113 ' 999. IBP NCEP 360 + 109.00 -2.50 'HWRFs-114 ' 999. IBP NCEP 360 + 107.00 -2.50 'HWRFs-115 ' 999. IBP NCEP 360 + 101.00 -2.50 'HWRFs-116 ' 999. IBP NCEP 360 + 99.00 -2.50 'HWRFs-117 ' 999. IBP NCEP 360 + 97.00 -2.50 'HWRFs-118 ' 999. IBP NCEP 360 + 95.00 -2.50 'HWRFs-119 ' 999. IBP NCEP 360 + 93.00 -2.50 'HWRFs-120 ' 999. IBP NCEP 360 + 91.00 -2.50 'HWRFs-121 ' 999. IBP NCEP 360 + 89.00 -2.50 'HWRFs-122 ' 999. IBP NCEP 360 + 87.00 -2.50 'HWRFs-123 ' 999. IBP NCEP 360 + 85.00 -2.50 'HWRFs-124 ' 999. IBP NCEP 360 + 83.00 -2.50 'HWRFs-125 ' 999. IBP NCEP 360 + 81.00 -2.50 'HWRFs-126 ' 999. IBP NCEP 360 + 79.00 -2.50 'HWRFs-127 ' 999. IBP NCEP 360 + 77.00 -2.50 'HWRFs-128 ' 999. IBP NCEP 360 + 75.00 -2.50 'HWRFs-129 ' 999. IBP NCEP 360 + 73.00 -2.50 'HWRFs-130 ' 999. IBP NCEP 360 + 71.00 -2.50 'HWRFs-131 ' 999. IBP NCEP 360 + 69.00 -2.50 'HWRFs-132 ' 999. IBP NCEP 360 + 67.00 -2.50 'HWRFs-133 ' 999. IBP NCEP 360 + 65.00 -2.50 'HWRFs-134 ' 999. IBP NCEP 360 + 63.00 -2.50 'HWRFs-135 ' 999. IBP NCEP 360 + 61.00 -2.50 'HWRFs-136 ' 999. IBP NCEP 360 + 59.00 -2.50 'HWRFs-137 ' 999. IBP NCEP 360 + 57.00 -2.50 'HWRFs-138 ' 999. IBP NCEP 360 + 55.00 -2.50 'HWRFs-139 ' 999. IBP NCEP 360 + 53.00 -2.50 'HWRFs-140 ' 999. IBP NCEP 360 + 51.00 -2.50 'HWRFs-141 ' 999. IBP NCEP 360 + 49.00 -2.50 'HWRFs-142 ' 999. IBP NCEP 360 + 47.00 -2.50 'HWRFs-143 ' 999. IBP NCEP 360 + 45.00 -2.50 'HWRFs-144 ' 999. IBP NCEP 360 + 43.00 -2.50 'HWRFs-145 ' 999. IBP NCEP 360 + 31.00 -32.50 'HWRFs-146 ' 999. IBP NCEP 360 + 31.00 -34.50 'HWRFs-147 ' 999. IBP NCEP 360 + 31.00 -36.50 'HWRFs-148 ' 999. IBP NCEP 360 + 31.00 -38.50 'HWRFs-149 ' 999. IBP NCEP 360 + 31.00 -40.50 'HWRFs-150 ' 999. IBP NCEP 360 +$ +$ HWRF wave grid boundary points -- Region w (WPAC) +$ + 105.00 1.50 'HWRFw-50 ' 999. IBP NCEP 360 + 107.00 1.50 'HWRFw-51 ' 999. IBP NCEP 360 + 123.00 1.50 'HWRFw-52 ' 999. IBP NCEP 360 + 127.00 1.50 'HWRFw-53 ' 999. IBP NCEP 360 + 131.00 1.50 'HWRFw-54 ' 999. IBP NCEP 360 + 133.00 1.50 'HWRFw-55 ' 999. IBP NCEP 360 + 135.00 1.50 'HWRFw-56 ' 999. IBP NCEP 360 + 137.00 1.50 'HWRFw-57 ' 999. IBP NCEP 360 + 139.00 1.50 'HWRFw-58 ' 999. IBP NCEP 360 + 141.00 1.50 'HWRFw-59 ' 999. IBP NCEP 360 + 143.00 1.50 'HWRFw-60 ' 999. IBP NCEP 360 + 145.00 1.50 'HWRFw-61 ' 999. IBP NCEP 360 + 147.00 1.50 'HWRFw-62 ' 999. IBP NCEP 360 + 149.00 1.50 'HWRFw-63 ' 999. IBP NCEP 360 + 151.00 1.50 'HWRFw-64 ' 999. IBP NCEP 360 + 153.00 1.50 'HWRFw-65 ' 999. IBP NCEP 360 + 155.00 1.50 'HWRFw-66 ' 999. IBP NCEP 360 + 157.00 1.50 'HWRFw-67 ' 999. IBP NCEP 360 + 159.00 1.50 'HWRFw-68 ' 999. IBP NCEP 360 + 161.00 1.50 'HWRFw-69 ' 999. IBP NCEP 360 + 163.00 1.50 'HWRFw-70 ' 999. IBP NCEP 360 + 165.00 1.50 'HWRFw-71 ' 999. IBP NCEP 360 + 167.00 1.50 'HWRFw-72 ' 999. IBP NCEP 360 + 169.00 1.50 'HWRFw-73 ' 999. IBP NCEP 360 + 171.00 1.50 'HWRFw-74 ' 999. IBP NCEP 360 + 173.00 1.50 'HWRFw-75 ' 999. IBP NCEP 360 + 175.00 1.50 'HWRFw-76 ' 999. IBP NCEP 360 + 177.00 1.50 'HWRFw-77 ' 999. IBP NCEP 360 + 179.00 1.50 'HWRFw-78 ' 999. IBP NCEP 360 + 180.00 1.50 'HWRFw-79 ' 999. IBP NCEP 360 + 180.00 3.50 'HWRFw-80 ' 999. IBP NCEP 360 + 180.00 5.50 'HWRFw-81 ' 999. IBP NCEP 360 + 180.00 7.50 'HWRFw-82 ' 999. IBP NCEP 360 + 180.00 9.50 'HWRFw-83 ' 999. IBP NCEP 360 + 180.00 11.50 'HWRFw-84 ' 999. IBP NCEP 360 + 180.00 13.50 'HWRFw-85 ' 999. IBP NCEP 360 + 180.00 15.50 'HWRFw-86 ' 999. IBP NCEP 360 + 180.00 17.50 'HWRFw-87 ' 999. IBP NCEP 360 + 180.00 19.50 'HWRFw-88 ' 999. IBP NCEP 360 + 180.00 21.50 'HWRFw-89 ' 999. IBP NCEP 360 + 180.00 23.50 'HWRFw-90 ' 999. IBP NCEP 360 + 180.00 25.50 'HWRFw-91 ' 999. IBP NCEP 360 + 180.00 27.50 'HWRFw-92 ' 999. IBP NCEP 360 + 180.00 29.50 'HWRFw-93 ' 999. IBP NCEP 360 + 180.00 31.50 'HWRFw-94 ' 999. IBP NCEP 360 + 180.00 33.50 'HWRFw-95 ' 999. IBP NCEP 360 + 180.00 35.50 'HWRFw-96 ' 999. IBP NCEP 360 + 180.00 37.50 'HWRFw-97 ' 999. IBP NCEP 360 + 180.00 39.50 'HWRFw-98 ' 999. IBP NCEP 360 + 180.00 41.50 'HWRFw-99 ' 999. IBP NCEP 360 + 179.00 41.50 'HWRFw-100 ' 999. IBP NCEP 360 + 177.00 41.50 'HWRFw-101 ' 999. IBP NCEP 360 + 175.00 41.50 'HWRFw-102 ' 999. IBP NCEP 360 + 173.00 41.50 'HWRFw-103 ' 999. IBP NCEP 360 + 171.00 41.50 'HWRFw-104 ' 999. IBP NCEP 360 + 169.00 41.50 'HWRFw-105 ' 999. IBP NCEP 360 + 167.00 41.50 'HWRFw-106 ' 999. IBP NCEP 360 + 165.00 41.50 'HWRFw-107 ' 999. IBP NCEP 360 + 163.00 41.50 'HWRFw-108 ' 999. IBP NCEP 360 + 161.00 41.50 'HWRFw-109 ' 999. IBP NCEP 360 + 159.00 41.50 'HWRFw-110 ' 999. IBP NCEP 360 + 157.00 41.50 'HWRFw-111 ' 999. IBP NCEP 360 + 155.00 41.50 'HWRFw-112 ' 999. IBP NCEP 360 + 153.00 41.50 'HWRFw-113 ' 999. IBP NCEP 360 + 151.00 41.50 'HWRFw-114 ' 999. IBP NCEP 360 + 149.00 41.50 'HWRFw-115 ' 999. IBP NCEP 360 + 147.00 41.50 'HWRFw-116 ' 999. IBP NCEP 360 + 145.00 41.50 'HWRFw-117 ' 999. IBP NCEP 360 + 143.00 41.50 'HWRFw-118 ' 999. IBP NCEP 360 + 139.00 41.50 'HWRFw-119 ' 999. IBP NCEP 360 + 137.00 41.50 'HWRFw-120 ' 999. IBP NCEP 360 + 135.00 41.50 'HWRFw-121 ' 999. IBP NCEP 360 + 133.00 41.50 'HWRFw-122 ' 999. IBP NCEP 360 + 131.00 41.50 'HWRFw-123 ' 999. IBP NCEP 360 +$ +$ NHC domain boundary points +$ + -98.00 3.00 'RW-NH2-51 ' 999. IBP NCEP 45 + -98.00 3.50 'RW-NH2-52 ' 999. IBP NCEP 45 + -98.00 4.00 'RW-NH2-53 ' 999. IBP NCEP 45 + -98.00 4.50 'RW-NH2-54 ' 999. IBP NCEP 45 + -98.00 5.00 'RW-NH2-55 ' 999. IBP NCEP 45 + -98.00 5.50 'RW-NH2-56 ' 999. IBP NCEP 45 + -98.00 6.00 'RW-NH2-57 ' 999. IBP NCEP 45 + -98.00 6.50 'RW-NH2-58 ' 999. IBP NCEP 45 + -98.00 7.00 'RW-NH2-59 ' 999. IBP NCEP 45 + -98.00 7.50 'RW-NH2-60 ' 999. IBP NCEP 45 + -98.00 8.00 'RW-NH2-61 ' 999. IBP NCEP 45 + -98.00 8.50 'RW-NH2-62 ' 999. IBP NCEP 45 + -98.00 9.00 'RW-NH2-63 ' 999. IBP NCEP 45 + -98.00 9.50 'RW-NH2-64 ' 999. IBP NCEP 45 + -98.00 10.00 'RW-NH2-65 ' 999. IBP NCEP 45 + -98.00 10.50 'RW-NH2-66 ' 999. IBP NCEP 45 + -98.00 11.00 'RW-NH2-67 ' 999. IBP NCEP 45 + -98.00 11.50 'RW-NH2-68 ' 999. IBP NCEP 45 + -98.00 12.00 'RW-NH2-69 ' 999. IBP NCEP 45 + -98.00 12.50 'RW-NH2-70 ' 999. IBP NCEP 45 + -98.00 13.00 'RW-NH2-71 ' 999. IBP NCEP 45 + -98.00 13.50 'RW-NH2-72 ' 999. IBP NCEP 45 + -98.00 14.00 'RW-NH2-73 ' 999. IBP NCEP 45 + -98.00 14.50 'RW-NH2-74 ' 999. IBP NCEP 45 + -98.00 15.00 'RW-NH2-75 ' 999. IBP NCEP 45 + -98.00 15.50 'RW-NH2-76 ' 999. IBP NCEP 45 + -98.00 16.00 'RW-NH2-77 ' 999. IBP NCEP 45 + -80.75 32.00 'RW-NH2-78 ' 999. IBP NCEP 45 + -80.50 32.00 'RW-NH2-79 ' 999. IBP NCEP 45 + -80.00 32.00 'RW-NH2-80 ' 999. IBP NCEP 45 + -79.50 32.00 'RW-NH2-81 ' 999. IBP NCEP 45 + -79.00 32.00 'RW-NH2-82 ' 999. IBP NCEP 45 + -78.50 32.00 'RW-NH2-83 ' 999. IBP NCEP 45 + -78.00 32.00 'RW-NH2-84 ' 999. IBP NCEP 45 + -77.50 32.00 'RW-NH2-85 ' 999. IBP NCEP 45 + -77.00 32.00 'RW-NH2-86 ' 999. IBP NCEP 45 + -76.50 32.00 'RW-NH2-87 ' 999. IBP NCEP 45 + -76.00 32.00 'RW-NH2-88 ' 999. IBP NCEP 45 + -75.50 32.00 'RW-NH2-89 ' 999. IBP NCEP 45 + -75.00 32.00 'RW-NH2-90 ' 999. IBP NCEP 45 + -74.50 32.00 'RW-NH2-91 ' 999. IBP NCEP 45 + -74.00 32.00 'RW-NH2-92 ' 999. IBP NCEP 45 + -73.50 32.00 'RW-NH2-93 ' 999. IBP NCEP 45 + -73.00 32.00 'RW-NH2-94 ' 999. IBP NCEP 45 + -72.50 32.00 'RW-NH2-95 ' 999. IBP NCEP 45 + -72.00 32.00 'RW-NH2-96 ' 999. IBP NCEP 45 + -71.50 32.00 'RW-NH2-97 ' 999. IBP NCEP 45 + -71.00 32.00 'RW-NH2-98 ' 999. IBP NCEP 45 + -70.50 32.00 'RW-NH2-99 ' 999. IBP NCEP 45 + -70.00 32.00 'RW-NH2-100' 999. IBP NCEP 45 + -69.50 32.00 'RW-NH2-101' 999. IBP NCEP 45 + -69.00 32.00 'RW-NH2-102' 999. IBP NCEP 45 + -68.50 32.00 'RW-NH2-103' 999. IBP NCEP 45 + -68.00 32.00 'RW-NH2-104' 999. IBP NCEP 45 + -67.50 32.00 'RW-NH2-105' 999. IBP NCEP 45 + -67.00 32.00 'RW-NH2-106' 999. IBP NCEP 45 + -66.50 32.00 'RW-NH2-107' 999. IBP NCEP 45 + -66.00 32.00 'RW-NH2-108' 999. IBP NCEP 45 + -65.50 32.00 'RW-NH2-109' 999. IBP NCEP 45 + -65.00 32.00 'RW-NH2-110' 999. IBP NCEP 45 + -64.50 32.00 'RW-NH2-111' 999. IBP NCEP 45 + -64.00 32.00 'RW-NH2-112' 999. IBP NCEP 45 + -63.50 32.00 'RW-NH2-113' 999. IBP NCEP 45 + -63.00 32.00 'RW-NH2-114' 999. IBP NCEP 45 + -62.50 32.00 'RW-NH2-115' 999. IBP NCEP 45 + -62.00 32.00 'RW-NH2-116' 999. IBP NCEP 45 + -61.50 32.00 'RW-NH2-117' 999. IBP NCEP 45 + -61.00 32.00 'RW-NH2-118' 999. IBP NCEP 45 + -60.50 32.00 'RW-NH2-119' 999. IBP NCEP 45 + -60.00 32.00 'RW-NH2-120' 999. IBP NCEP 45 + -59.50 32.00 'RW-NH2-121' 999. IBP NCEP 45 + -59.00 32.00 'RW-NH2-122' 999. IBP NCEP 45 + -58.50 32.00 'RW-NH2-123' 999. IBP NCEP 45 + -58.00 32.00 'RW-NH2-124' 999. IBP NCEP 45 + -57.50 32.00 'RW-NH2-125' 999. IBP NCEP 45 + -57.00 32.00 'RW-NH2-126' 999. IBP NCEP 45 + -56.50 32.00 'RW-NH2-127' 999. IBP NCEP 45 + -56.00 32.00 'RW-NH2-128' 999. IBP NCEP 45 + -55.50 32.00 'RW-NH2-129' 999. IBP NCEP 45 + -55.00 32.00 'RW-NH2-130' 999. IBP NCEP 45 + -54.50 32.00 'RW-NH2-131' 999. IBP NCEP 45 + -54.00 32.00 'RW-NH2-132' 999. IBP NCEP 45 + -53.50 32.00 'RW-NH2-133' 999. IBP NCEP 45 + -53.00 32.00 'RW-NH2-134' 999. IBP NCEP 45 + -52.50 32.00 'RW-NH2-135' 999. IBP NCEP 45 + -52.00 32.00 'RW-NH2-136' 999. IBP NCEP 45 + -51.50 32.00 'RW-NH2-137' 999. IBP NCEP 45 + -51.00 32.00 'RW-NH2-138' 999. IBP NCEP 45 + -50.50 32.00 'RW-NH2-139' 999. IBP NCEP 45 + -50.00 32.00 'RW-NH2-140' 999. IBP NCEP 45 + -49.50 32.00 'RW-NH2-141' 999. IBP NCEP 45 + -49.00 32.00 'RW-NH2-142' 999. IBP NCEP 45 + -48.50 32.00 'RW-NH2-143' 999. IBP NCEP 45 + -48.00 32.00 'RW-NH2-144' 999. IBP NCEP 45 + -47.50 32.00 'RW-NH2-145' 999. IBP NCEP 45 + -47.00 32.00 'RW-NH2-146' 999. IBP NCEP 45 + -46.50 32.00 'RW-NH2-147' 999. IBP NCEP 45 + -46.00 32.00 'RW-NH2-148' 999. IBP NCEP 45 + -45.50 32.00 'RW-NH2-149' 999. IBP NCEP 45 + -45.00 32.00 'RW-NH2-150' 999. IBP NCEP 45 + -44.50 32.00 'RW-NH2-151' 999. IBP NCEP 45 + -44.00 32.00 'RW-NH2-152' 999. IBP NCEP 45 + -43.50 32.00 'RW-NH2-153' 999. IBP NCEP 45 + -43.00 32.00 'RW-NH2-154' 999. IBP NCEP 45 + -42.50 32.00 'RW-NH2-155' 999. IBP NCEP 45 + -42.00 32.00 'RW-NH2-156' 999. IBP NCEP 45 + -41.50 32.00 'RW-NH2-157' 999. IBP NCEP 45 + -41.00 32.00 'RW-NH2-158' 999. IBP NCEP 45 + -40.50 32.00 'RW-NH2-159' 999. IBP NCEP 45 + -40.00 32.00 'RW-NH2-160' 999. IBP NCEP 45 + -39.50 32.00 'RW-NH2-161' 999. IBP NCEP 45 + -39.00 32.00 'RW-NH2-162' 999. IBP NCEP 45 + -38.50 32.00 'RW-NH2-163' 999. IBP NCEP 45 + -38.00 32.00 'RW-NH2-164' 999. IBP NCEP 45 + -37.50 32.00 'RW-NH2-165' 999. IBP NCEP 45 + -37.00 32.00 'RW-NH2-166' 999. IBP NCEP 45 + -36.50 32.00 'RW-NH2-167' 999. IBP NCEP 45 + -36.00 32.00 'RW-NH2-168' 999. IBP NCEP 45 + -35.50 32.00 'RW-NH2-169' 999. IBP NCEP 45 + -35.00 32.00 'RW-NH2-170' 999. IBP NCEP 45 + -34.50 32.00 'RW-NH2-171' 999. IBP NCEP 45 + -34.00 32.00 'RW-NH2-172' 999. IBP NCEP 45 + -33.50 32.00 'RW-NH2-173' 999. IBP NCEP 45 + -33.00 32.00 'RW-NH2-174' 999. IBP NCEP 45 + -32.50 32.00 'RW-NH2-175' 999. IBP NCEP 45 + -32.00 32.00 'RW-NH2-176' 999. IBP NCEP 45 + -31.50 32.00 'RW-NH2-177' 999. IBP NCEP 45 + -31.00 32.00 'RW-NH2-178' 999. IBP NCEP 45 + -30.50 32.00 'RW-NH2-179' 999. IBP NCEP 45 + -30.00 32.00 'RW-NH2-180' 999. IBP NCEP 45 + -29.50 32.00 'RW-NH2-181' 999. IBP NCEP 45 + -29.00 32.00 'RW-NH2-182' 999. IBP NCEP 45 + -28.50 32.00 'RW-NH2-183' 999. IBP NCEP 45 + -28.00 32.00 'RW-NH2-184' 999. IBP NCEP 45 + -27.50 32.00 'RW-NH2-185' 999. IBP NCEP 45 + -27.00 32.00 'RW-NH2-186' 999. IBP NCEP 45 + -26.50 32.00 'RW-NH2-187' 999. IBP NCEP 45 + -26.00 32.00 'RW-NH2-188' 999. IBP NCEP 45 + -25.50 32.00 'RW-NH2-189' 999. IBP NCEP 45 + -25.00 32.00 'RW-NH2-190' 999. IBP NCEP 45 + -24.50 32.00 'RW-NH2-191' 999. IBP NCEP 45 + -24.00 32.00 'RW-NH2-192' 999. IBP NCEP 45 + -23.50 32.00 'RW-NH2-193' 999. IBP NCEP 45 + -23.00 32.00 'RW-NH2-194' 999. IBP NCEP 45 + -22.50 32.00 'RW-NH2-195' 999. IBP NCEP 45 + -22.00 32.00 'RW-NH2-196' 999. IBP NCEP 45 + -21.50 32.00 'RW-NH2-197' 999. IBP NCEP 45 + -21.00 32.00 'RW-NH2-198' 999. IBP NCEP 45 + -20.50 32.00 'RW-NH2-199' 999. IBP NCEP 45 + -20.00 32.00 'RW-NH2-200' 999. IBP NCEP 45 + -19.50 32.00 'RW-NH2-201' 999. IBP NCEP 45 + -19.00 32.00 'RW-NH2-202' 999. IBP NCEP 45 + -18.50 32.00 'RW-NH2-203' 999. IBP NCEP 45 + -18.00 32.00 'RW-NH2-204' 999. IBP NCEP 45 + -17.50 32.00 'RW-NH2-205' 999. IBP NCEP 45 + -17.00 32.00 'RW-NH2-206' 999. IBP NCEP 45 + -16.50 32.00 'RW-NH2-207' 999. IBP NCEP 45 + -16.00 32.00 'RW-NH2-208' 999. IBP NCEP 45 + -15.50 32.00 'RW-NH2-209' 999. IBP NCEP 45 + -15.00 32.00 'RW-NH2-210' 999. IBP NCEP 45 + -14.50 32.00 'RW-NH2-211' 999. IBP NCEP 45 + -14.00 32.00 'RW-NH2-212' 999. IBP NCEP 45 + -13.50 32.00 'RW-NH2-213' 999. IBP NCEP 45 + -13.00 32.00 'RW-NH2-214' 999. IBP NCEP 45 + -12.50 32.00 'RW-NH2-215' 999. IBP NCEP 45 + -12.00 32.00 'RW-NH2-216' 999. IBP NCEP 45 + -11.50 32.00 'RW-NH2-217' 999. IBP NCEP 45 + -11.00 32.00 'RW-NH2-218' 999. IBP NCEP 45 + -10.50 32.00 'RW-NH2-219' 999. IBP NCEP 45 + -10.00 32.00 'RW-NH2-220' 999. IBP NCEP 45 + -9.50 32.00 'RW-NH2-221' 999. IBP NCEP 45 + -10.00 5.50 'RW-NH2-222' 999. IBP NCEP 45 + -10.00 5.00 'RW-NH2-223' 999. IBP NCEP 45 + -10.00 4.50 'RW-NH2-224' 999. IBP NCEP 45 + -10.00 4.00 'RW-NH2-225' 999. IBP NCEP 45 + -10.00 3.50 'RW-NH2-226' 999. IBP NCEP 45 + -10.00 3.00 'RW-NH2-227' 999. IBP NCEP 45 + -10.00 3.00 'RW-NH2-228' 999. IBP NCEP 45 + -10.50 3.00 'RW-NH2-229' 999. IBP NCEP 45 + -11.00 3.00 'RW-NH2-230' 999. IBP NCEP 45 + -11.50 3.00 'RW-NH2-231' 999. IBP NCEP 45 + -12.00 3.00 'RW-NH2-232' 999. IBP NCEP 45 + -12.50 3.00 'RW-NH2-233' 999. IBP NCEP 45 + -13.00 3.00 'RW-NH2-234' 999. IBP NCEP 45 + -13.50 3.00 'RW-NH2-235' 999. IBP NCEP 45 + -14.00 3.00 'RW-NH2-236' 999. IBP NCEP 45 + -14.50 3.00 'RW-NH2-237' 999. IBP NCEP 45 + -15.00 3.00 'RW-NH2-238' 999. IBP NCEP 45 + -15.50 3.00 'RW-NH2-239' 999. IBP NCEP 45 + -16.00 3.00 'RW-NH2-240' 999. IBP NCEP 45 + -16.50 3.00 'RW-NH2-241' 999. IBP NCEP 45 + -17.00 3.00 'RW-NH2-242' 999. IBP NCEP 45 + -17.50 3.00 'RW-NH2-243' 999. IBP NCEP 45 + -18.00 3.00 'RW-NH2-244' 999. IBP NCEP 45 + -18.50 3.00 'RW-NH2-245' 999. IBP NCEP 45 + -19.00 3.00 'RW-NH2-246' 999. IBP NCEP 45 + -19.50 3.00 'RW-NH2-247' 999. IBP NCEP 45 + -20.00 3.00 'RW-NH2-248' 999. IBP NCEP 45 + -20.50 3.00 'RW-NH2-249' 999. IBP NCEP 45 + -21.00 3.00 'RW-NH2-250' 999. IBP NCEP 45 + -21.50 3.00 'RW-NH2-251' 999. IBP NCEP 45 + -22.00 3.00 'RW-NH2-252' 999. IBP NCEP 45 + -22.50 3.00 'RW-NH2-253' 999. IBP NCEP 45 + -23.00 3.00 'RW-NH2-254' 999. IBP NCEP 45 + -23.50 3.00 'RW-NH2-255' 999. IBP NCEP 45 + -24.00 3.00 'RW-NH2-256' 999. IBP NCEP 45 + -24.50 3.00 'RW-NH2-257' 999. IBP NCEP 45 + -25.00 3.00 'RW-NH2-258' 999. IBP NCEP 45 + -25.50 3.00 'RW-NH2-259' 999. IBP NCEP 45 + -26.00 3.00 'RW-NH2-260' 999. IBP NCEP 45 + -26.50 3.00 'RW-NH2-261' 999. IBP NCEP 45 + -27.00 3.00 'RW-NH2-262' 999. IBP NCEP 45 + -27.50 3.00 'RW-NH2-263' 999. IBP NCEP 45 + -28.00 3.00 'RW-NH2-264' 999. IBP NCEP 45 + -28.50 3.00 'RW-NH2-265' 999. IBP NCEP 45 + -29.00 3.00 'RW-NH2-266' 999. IBP NCEP 45 + -29.50 3.00 'RW-NH2-267' 999. IBP NCEP 45 + -30.00 3.00 'RW-NH2-268' 999. IBP NCEP 45 + -30.50 3.00 'RW-NH2-269' 999. IBP NCEP 45 + -31.00 3.00 'RW-NH2-270' 999. IBP NCEP 45 + -31.50 3.00 'RW-NH2-271' 999. IBP NCEP 45 + -32.00 3.00 'RW-NH2-272' 999. IBP NCEP 45 + -32.50 3.00 'RW-NH2-273' 999. IBP NCEP 45 + -33.00 3.00 'RW-NH2-274' 999. IBP NCEP 45 + -33.50 3.00 'RW-NH2-275' 999. IBP NCEP 45 + -34.00 3.00 'RW-NH2-276' 999. IBP NCEP 45 + -34.50 3.00 'RW-NH2-277' 999. IBP NCEP 45 + -35.00 3.00 'RW-NH2-278' 999. IBP NCEP 45 + -35.50 3.00 'RW-NH2-279' 999. IBP NCEP 45 + -36.00 3.00 'RW-NH2-280' 999. IBP NCEP 45 + -36.50 3.00 'RW-NH2-281' 999. IBP NCEP 45 + -37.00 3.00 'RW-NH2-282' 999. IBP NCEP 45 + -37.50 3.00 'RW-NH2-283' 999. IBP NCEP 45 + -38.00 3.00 'RW-NH2-284' 999. IBP NCEP 45 + -38.50 3.00 'RW-NH2-285' 999. IBP NCEP 45 + -39.00 3.00 'RW-NH2-286' 999. IBP NCEP 45 + -39.50 3.00 'RW-NH2-287' 999. IBP NCEP 45 + -40.00 3.00 'RW-NH2-288' 999. IBP NCEP 45 + -40.50 3.00 'RW-NH2-289' 999. IBP NCEP 45 + -41.00 3.00 'RW-NH2-290' 999. IBP NCEP 45 + -41.50 3.00 'RW-NH2-291' 999. IBP NCEP 45 + -42.00 3.00 'RW-NH2-292' 999. IBP NCEP 45 + -42.50 3.00 'RW-NH2-293' 999. IBP NCEP 45 + -43.00 3.00 'RW-NH2-294' 999. IBP NCEP 45 + -43.50 3.00 'RW-NH2-295' 999. IBP NCEP 45 + -44.00 3.00 'RW-NH2-296' 999. IBP NCEP 45 + -44.50 3.00 'RW-NH2-297' 999. IBP NCEP 45 + -42.00 3.00 'RW-NH2-298' 999. IBP NCEP 45 + -42.50 3.00 'RW-NH2-299' 999. IBP NCEP 45 + -43.00 3.00 'RW-NH2-300' 999. IBP NCEP 45 + -43.50 3.00 'RW-NH2-301' 999. IBP NCEP 45 + -44.00 3.00 'RW-NH2-302' 999. IBP NCEP 45 + -44.50 3.00 'RW-NH2-303' 999. IBP NCEP 45 + -45.00 3.00 'RW-NH2-304' 999. IBP NCEP 45 + -42.50 3.00 'RW-NH2-305' 999. IBP NCEP 45 + -43.00 3.00 'RW-NH2-306' 999. IBP NCEP 45 + -43.50 3.00 'RW-NH2-307' 999. IBP NCEP 45 + -44.00 3.00 'RW-NH2-308' 999. IBP NCEP 45 + -44.50 3.00 'RW-NH2-309' 999. IBP NCEP 45 + -45.00 3.00 'RW-NH2-310' 999. IBP NCEP 45 + -45.50 3.00 'RW-NH2-311' 999. IBP NCEP 45 + -46.00 3.00 'RW-NH2-312' 999. IBP NCEP 45 + -46.50 3.00 'RW-NH2-313' 999. IBP NCEP 45 + -47.00 3.00 'RW-NH2-314' 999. IBP NCEP 45 + -47.50 3.00 'RW-NH2-315' 999. IBP NCEP 45 + -48.00 3.00 'RW-NH2-316' 999. IBP NCEP 45 + -45.50 3.00 'RW-NH2-317' 999. IBP NCEP 45 + -46.00 3.00 'RW-NH2-318' 999. IBP NCEP 45 + -46.50 3.00 'RW-NH2-319' 999. IBP NCEP 45 + -47.00 3.00 'RW-NH2-320' 999. IBP NCEP 45 + -47.50 3.00 'RW-NH2-321' 999. IBP NCEP 45 + -48.00 3.00 'RW-NH2-322' 999. IBP NCEP 45 + -48.50 3.00 'RW-NH2-323' 999. IBP NCEP 45 + -49.00 3.00 'RW-NH2-324' 999. IBP NCEP 45 + -49.50 3.00 'RW-NH2-325' 999. IBP NCEP 45 + -50.00 3.00 'RW-NH2-326' 999. IBP NCEP 45 + -50.50 3.00 'RW-NH2-327' 999. IBP NCEP 45 + -50.75 3.00 'RW-NH2-328' 999. IBP NCEP 45 + -77.75 3.00 'RW-NH2-329' 999. IBP NCEP 45 + -78.00 3.00 'RW-NH2-330' 999. IBP NCEP 45 + -78.50 3.00 'RW-NH2-331' 999. IBP NCEP 45 + -79.00 3.00 'RW-NH2-332' 999. IBP NCEP 45 + -79.50 3.00 'RW-NH2-333' 999. IBP NCEP 45 + -80.00 3.00 'RW-NH2-334' 999. IBP NCEP 45 + -80.50 3.00 'RW-NH2-335' 999. IBP NCEP 45 + -81.00 3.00 'RW-NH2-336' 999. IBP NCEP 45 + -81.50 3.00 'RW-NH2-337' 999. IBP NCEP 45 + -82.00 3.00 'RW-NH2-338' 999. IBP NCEP 45 + -82.50 3.00 'RW-NH2-339' 999. IBP NCEP 45 + -83.00 3.00 'RW-NH2-340' 999. IBP NCEP 45 + -83.50 3.00 'RW-NH2-341' 999. IBP NCEP 45 + -84.00 3.00 'RW-NH2-342' 999. IBP NCEP 45 + -84.50 3.00 'RW-NH2-343' 999. IBP NCEP 45 + -85.00 3.00 'RW-NH2-344' 999. IBP NCEP 45 + -85.50 3.00 'RW-NH2-345' 999. IBP NCEP 45 + -86.00 3.00 'RW-NH2-346' 999. IBP NCEP 45 + -86.50 3.00 'RW-NH2-347' 999. IBP NCEP 45 + -87.00 3.00 'RW-NH2-348' 999. IBP NCEP 45 + -87.50 3.00 'RW-NH2-349' 999. IBP NCEP 45 + -88.00 3.00 'RW-NH2-350' 999. IBP NCEP 45 + -88.50 3.00 'RW-NH2-351' 999. IBP NCEP 45 + -89.00 3.00 'RW-NH2-352' 999. IBP NCEP 45 + -89.50 3.00 'RW-NH2-353' 999. IBP NCEP 45 + -90.00 3.00 'RW-NH2-354' 999. IBP NCEP 45 + -90.50 3.00 'RW-NH2-355' 999. IBP NCEP 45 + -91.00 3.00 'RW-NH2-356' 999. IBP NCEP 45 + -91.50 3.00 'RW-NH2-357' 999. IBP NCEP 45 + -92.00 3.00 'RW-NH2-358' 999. IBP NCEP 45 + -92.50 3.00 'RW-NH2-359' 999. IBP NCEP 45 + -93.00 3.00 'RW-NH2-360' 999. IBP NCEP 45 + -93.50 3.00 'RW-NH2-361' 999. IBP NCEP 45 + -94.00 3.00 'RW-NH2-362' 999. IBP NCEP 45 + -94.50 3.00 'RW-NH2-363' 999. IBP NCEP 45 + -95.00 3.00 'RW-NH2-364' 999. IBP NCEP 45 + -95.50 3.00 'RW-NH2-365' 999. IBP NCEP 45 + -96.00 3.00 'RW-NH2-366' 999. IBP NCEP 45 + -96.50 3.00 'RW-NH2-367' 999. IBP NCEP 45 + -97.00 3.00 'RW-NH2-368' 999. IBP NCEP 45 + -97.50 3.00 'RW-NH2-369' 999. IBP NCEP 45 + -98.00 3.00 'RW-NH2-370' 999. IBP NCEP 45 + -30.00 3.00 'RW-NH2-371' 999. IBP NCEP 45 + -30.00 3.50 'RW-NH2-372' 999. IBP NCEP 45 + -30.00 4.00 'RW-NH2-373' 999. IBP NCEP 45 + -30.00 4.50 'RW-NH2-374' 999. IBP NCEP 45 + -30.00 5.00 'RW-NH2-375' 999. IBP NCEP 45 + -30.00 5.50 'RW-NH2-376' 999. IBP NCEP 45 + -30.00 6.00 'RW-NH2-377' 999. IBP NCEP 45 + -30.00 6.50 'RW-NH2-378' 999. IBP NCEP 45 + -30.00 7.00 'RW-NH2-379' 999. IBP NCEP 45 + -30.00 7.50 'RW-NH2-380' 999. IBP NCEP 45 + -30.00 8.00 'RW-NH2-381' 999. IBP NCEP 45 + -30.00 8.50 'RW-NH2-382' 999. IBP NCEP 45 + -30.00 9.00 'RW-NH2-383' 999. IBP NCEP 45 + -30.00 9.50 'RW-NH2-384' 999. IBP NCEP 45 + -30.00 10.00 'RW-NH2-385' 999. IBP NCEP 45 + -30.00 10.50 'RW-NH2-386' 999. IBP NCEP 45 + -30.00 11.00 'RW-NH2-387' 999. IBP NCEP 45 + -30.00 11.50 'RW-NH2-388' 999. IBP NCEP 45 + -30.00 12.00 'RW-NH2-389' 999. IBP NCEP 45 + -30.00 12.50 'RW-NH2-390' 999. IBP NCEP 45 + -30.00 13.00 'RW-NH2-391' 999. IBP NCEP 45 + -30.00 13.50 'RW-NH2-392' 999. IBP NCEP 45 + -30.00 14.00 'RW-NH2-393' 999. IBP NCEP 45 + -30.00 14.50 'RW-NH2-394' 999. IBP NCEP 45 + -30.00 15.00 'RW-NH2-395' 999. IBP NCEP 45 + -30.00 15.50 'RW-NH2-396' 999. IBP NCEP 45 + -30.00 16.00 'RW-NH2-397' 999. IBP NCEP 45 + -30.00 16.50 'RW-NH2-398' 999. IBP NCEP 45 + -30.00 17.00 'RW-NH2-399' 999. IBP NCEP 45 + -30.00 17.50 'RW-NH2-400' 999. IBP NCEP 45 + -30.00 18.00 'RW-NH2-401' 999. IBP NCEP 45 + -30.00 18.50 'RW-NH2-402' 999. IBP NCEP 45 + -30.00 19.00 'RW-NH2-403' 999. IBP NCEP 45 + -30.00 19.50 'RW-NH2-404' 999. IBP NCEP 45 + -30.00 20.00 'RW-NH2-405' 999. IBP NCEP 45 + -30.00 20.50 'RW-NH2-406' 999. IBP NCEP 45 + -30.00 21.00 'RW-NH2-407' 999. IBP NCEP 45 + -30.00 21.50 'RW-NH2-408' 999. IBP NCEP 45 + -30.00 22.00 'RW-NH2-409' 999. IBP NCEP 45 + -30.00 22.50 'RW-NH2-410' 999. IBP NCEP 45 + -30.00 23.00 'RW-NH2-411' 999. IBP NCEP 45 + -30.00 23.50 'RW-NH2-412' 999. IBP NCEP 45 + -30.00 24.00 'RW-NH2-413' 999. IBP NCEP 45 + -30.00 24.50 'RW-NH2-414' 999. IBP NCEP 45 + -30.00 25.00 'RW-NH2-415' 999. IBP NCEP 45 + -30.00 25.60 'RW-NH2-416' 999. IBP NCEP 45 + -30.00 26.00 'RW-NH2-417' 999. IBP NCEP 45 + -30.00 26.50 'RW-NH2-418' 999. IBP NCEP 45 + -30.00 27.00 'RW-NH2-419' 999. IBP NCEP 45 + -30.00 27.50 'RW-NH2-420' 999. IBP NCEP 45 + -30.00 28.00 'RW-NH2-421' 999. IBP NCEP 45 + -30.00 28.50 'RW-NH2-422' 999. IBP NCEP 45 + -30.00 29.00 'RW-NH2-423' 999. IBP NCEP 45 + -30.00 29.50 'RW-NH2-424' 999. IBP NCEP 45 + -30.00 30.00 'RW-NH2-425' 999. IBP NCEP 45 + -30.00 30.50 'RW-NH2-426' 999. IBP NCEP 45 + -30.00 31.00 'RW-NH2-427' 999. IBP NCEP 45 + -30.00 31.50 'RW-NH2-428' 999. IBP NCEP 45 + -30.00 32.00 'RW-NH2-429' 999. IBP NCEP 45 +$ + -141.00 -19.50 'RW-NH1-51 ' 999. IBP NCEP 45 + -141.00 -19.00 'RW-NH1-52 ' 999. IBP NCEP 45 + -141.00 -18.50 'RW-NH1-53 ' 999. IBP NCEP 45 + -141.00 -18.00 'RW-NH1-54 ' 999. IBP NCEP 45 + -141.00 -17.50 'RW-NH1-55 ' 999. IBP NCEP 45 + -141.00 -17.00 'RW-NH1-56 ' 999. IBP NCEP 45 + -141.00 -16.50 'RW-NH1-57 ' 999. IBP NCEP 45 + -141.00 -16.00 'RW-NH1-58 ' 999. IBP NCEP 45 + -141.00 -15.50 'RW-NH1-59 ' 999. IBP NCEP 45 + -141.00 -15.00 'RW-NH1-60 ' 999. IBP NCEP 45 + -141.00 -14.50 'RW-NH1-61 ' 999. IBP NCEP 45 + -141.00 -14.00 'RW-NH1-62 ' 999. IBP NCEP 45 + -141.00 -13.50 'RW-NH1-63 ' 999. IBP NCEP 45 + -141.00 -13.00 'RW-NH1-64 ' 999. IBP NCEP 45 + -141.00 -12.50 'RW-NH1-65 ' 999. IBP NCEP 45 + -141.00 -12.00 'RW-NH1-66 ' 999. IBP NCEP 45 + -141.00 -11.50 'RW-NH1-67 ' 999. IBP NCEP 45 + -141.00 -11.00 'RW-NH1-68 ' 999. IBP NCEP 45 + -141.00 -10.50 'RW-NH1-69 ' 999. IBP NCEP 45 + -141.00 -10.00 'RW-NH1-70 ' 999. IBP NCEP 45 + -141.00 -9.50 'RW-NH1-71 ' 999. IBP NCEP 45 + -141.00 -9.00 'RW-NH1-72 ' 999. IBP NCEP 45 + -141.00 -8.50 'RW-NH1-73 ' 999. IBP NCEP 45 + -141.00 -8.00 'RW-NH1-74 ' 999. IBP NCEP 45 + -141.00 -7.50 'RW-NH1-75 ' 999. IBP NCEP 45 + -141.00 -7.00 'RW-NH1-76 ' 999. IBP NCEP 45 + -141.00 -6.50 'RW-NH1-77 ' 999. IBP NCEP 45 + -141.00 -6.00 'RW-NH1-78 ' 999. IBP NCEP 45 + -141.00 -5.50 'RW-NH1-79 ' 999. IBP NCEP 45 + -141.00 -5.00 'RW-NH1-80 ' 999. IBP NCEP 45 + -141.00 -4.50 'RW-NH1-81 ' 999. IBP NCEP 45 + -141.00 -4.00 'RW-NH1-82 ' 999. IBP NCEP 45 + -141.00 -3.50 'RW-NH1-83 ' 999. IBP NCEP 45 + -141.00 -3.00 'RW-NH1-84 ' 999. IBP NCEP 45 + -141.00 -2.50 'RW-NH1-85 ' 999. IBP NCEP 45 + -141.00 -2.00 'RW-NH1-86 ' 999. IBP NCEP 45 + -141.00 -1.50 'RW-NH1-87 ' 999. IBP NCEP 45 + -141.00 -1.00 'RW-NH1-88 ' 999. IBP NCEP 45 + -141.00 -0.50 'RW-NH1-89 ' 999. IBP NCEP 45 + -141.00 0.00 'RW-NH1-90 ' 999. IBP NCEP 45 + -141.00 0.50 'RW-NH1-91 ' 999. IBP NCEP 45 + -141.00 1.00 'RW-NH1-92 ' 999. IBP NCEP 45 + -141.00 1.50 'RW-NH1-93 ' 999. IBP NCEP 45 + -141.00 2.00 'RW-NH1-94 ' 999. IBP NCEP 45 + -141.00 2.50 'RW-NH1-95 ' 999. IBP NCEP 45 + -141.00 3.00 'RW-NH1-96 ' 999. IBP NCEP 45 + -141.00 3.50 'RW-NH1-97 ' 999. IBP NCEP 45 + -141.00 4.00 'RW-NH1-98 ' 999. IBP NCEP 45 + -141.00 4.50 'RW-NH1-99 ' 999. IBP NCEP 45 + -141.00 5.00 'RW-NH1-100' 999. IBP NCEP 45 + -141.00 5.50 'RW-NH1-101' 999. IBP NCEP 45 + -141.00 6.00 'RW-NH1-102' 999. IBP NCEP 45 + -141.00 6.50 'RW-NH1-103' 999. IBP NCEP 45 + -141.00 7.00 'RW-NH1-104' 999. IBP NCEP 45 + -141.00 7.50 'RW-NH1-105' 999. IBP NCEP 45 + -141.00 8.00 'RW-NH1-106' 999. IBP NCEP 45 + -141.00 8.50 'RW-NH1-107' 999. IBP NCEP 45 + -141.00 9.00 'RW-NH1-108' 999. IBP NCEP 45 + -141.00 9.50 'RW-NH1-109' 999. IBP NCEP 45 + -141.00 10.00 'RW-NH1-110' 999. IBP NCEP 45 + -141.00 10.50 'RW-NH1-111' 999. IBP NCEP 45 + -141.00 11.00 'RW-NH1-112' 999. IBP NCEP 45 + -141.00 11.50 'RW-NH1-113' 999. IBP NCEP 45 + -141.00 12.00 'RW-NH1-114' 999. IBP NCEP 45 + -141.00 12.50 'RW-NH1-115' 999. IBP NCEP 45 + -141.00 13.00 'RW-NH1-116' 999. IBP NCEP 45 + -141.00 13.50 'RW-NH1-117' 999. IBP NCEP 45 + -141.00 14.00 'RW-NH1-118' 999. IBP NCEP 45 + -141.00 14.50 'RW-NH1-119' 999. IBP NCEP 45 + -141.00 15.00 'RW-NH1-120' 999. IBP NCEP 45 + -141.00 15.50 'RW-NH1-121' 999. IBP NCEP 45 + -141.00 16.00 'RW-NH1-122' 999. IBP NCEP 45 + -141.00 16.50 'RW-NH1-123' 999. IBP NCEP 45 + -141.00 17.00 'RW-NH1-124' 999. IBP NCEP 45 + -141.00 17.50 'RW-NH1-125' 999. IBP NCEP 45 + -141.00 18.00 'RW-NH1-126' 999. IBP NCEP 45 + -141.00 18.50 'RW-NH1-127' 999. IBP NCEP 45 + -141.00 19.00 'RW-NH1-128' 999. IBP NCEP 45 + -141.00 19.50 'RW-NH1-129' 999. IBP NCEP 45 + -141.00 20.00 'RW-NH1-130' 999. IBP NCEP 45 + -141.00 20.50 'RW-NH1-131' 999. IBP NCEP 45 + -141.00 21.00 'RW-NH1-132' 999. IBP NCEP 45 + -141.00 21.50 'RW-NH1-133' 999. IBP NCEP 45 + -141.00 22.00 'RW-NH1-134' 999. IBP NCEP 45 + -141.00 22.50 'RW-NH1-135' 999. IBP NCEP 45 + -141.00 23.00 'RW-NH1-136' 999. IBP NCEP 45 + -141.00 23.50 'RW-NH1-137' 999. IBP NCEP 45 + -141.00 24.00 'RW-NH1-138' 999. IBP NCEP 45 + -141.00 24.50 'RW-NH1-139' 999. IBP NCEP 45 + -141.00 25.00 'RW-NH1-140' 999. IBP NCEP 45 + -141.00 25.50 'RW-NH1-141' 999. IBP NCEP 45 + -141.00 26.00 'RW-NH1-142' 999. IBP NCEP 45 + -141.00 26.50 'RW-NH1-143' 999. IBP NCEP 45 + -141.00 27.00 'RW-NH1-144' 999. IBP NCEP 45 + -141.00 27.50 'RW-NH1-145' 999. IBP NCEP 45 + -141.00 28.00 'RW-NH1-146' 999. IBP NCEP 45 + -141.00 28.50 'RW-NH1-147' 999. IBP NCEP 45 + -141.00 29.00 'RW-NH1-148' 999. IBP NCEP 45 + -141.00 29.50 'RW-NH1-149' 999. IBP NCEP 45 + -141.00 30.00 'RW-NH1-150' 999. IBP NCEP 45 + -141.00 30.50 'RW-NH1-151' 999. IBP NCEP 45 + -141.00 31.00 'RW-NH1-152' 999. IBP NCEP 45 + -141.00 31.50 'RW-NH1-153' 999. IBP NCEP 45 + -141.00 32.00 'RW-NH1-154' 999. IBP NCEP 45 + -141.00 32.50 'RW-NH1-155' 999. IBP NCEP 45 + -141.00 32.80 'RW-NH1-156' 999. IBP NCEP 45 + -141.00 32.80 'RW-NH1-157' 999. IBP NCEP 45 + -140.50 32.80 'RW-NH1-158' 999. IBP NCEP 45 + -140.00 32.80 'RW-NH1-159' 999. IBP NCEP 45 + -139.50 32.80 'RW-NH1-160' 999. IBP NCEP 45 + -139.00 32.80 'RW-NH1-161' 999. IBP NCEP 45 + -138.50 32.80 'RW-NH1-162' 999. IBP NCEP 45 + -138.00 32.80 'RW-NH1-163' 999. IBP NCEP 45 + -137.50 32.80 'RW-NH1-164' 999. IBP NCEP 45 + -137.00 32.80 'RW-NH1-165' 999. IBP NCEP 45 + -136.50 32.80 'RW-NH1-166' 999. IBP NCEP 45 + -136.00 32.80 'RW-NH1-167' 999. IBP NCEP 45 + -135.50 32.80 'RW-NH1-168' 999. IBP NCEP 45 + -135.00 32.80 'RW-NH1-169' 999. IBP NCEP 45 + -134.50 32.80 'RW-NH1-170' 999. IBP NCEP 45 + -134.00 32.80 'RW-NH1-171' 999. IBP NCEP 45 + -133.50 32.80 'RW-NH1-172' 999. IBP NCEP 45 + -133.00 32.80 'RW-NH1-173' 999. IBP NCEP 45 + -132.50 32.80 'RW-NH1-174' 999. IBP NCEP 45 + -132.00 32.80 'RW-NH1-175' 999. IBP NCEP 45 + -131.50 32.80 'RW-NH1-176' 999. IBP NCEP 45 + -131.00 32.80 'RW-NH1-177' 999. IBP NCEP 45 + -130.50 32.80 'RW-NH1-178' 999. IBP NCEP 45 + -130.00 32.80 'RW-NH1-179' 999. IBP NCEP 45 + -129.50 32.80 'RW-NH1-180' 999. IBP NCEP 45 + -129.00 32.80 'RW-NH1-181' 999. IBP NCEP 45 + -128.50 32.80 'RW-NH1-182' 999. IBP NCEP 45 + -128.00 32.80 'RW-NH1-183' 999. IBP NCEP 45 + -127.50 32.80 'RW-NH1-184' 999. IBP NCEP 45 + -127.00 32.80 'RW-NH1-185' 999. IBP NCEP 45 + -126.50 32.80 'RW-NH1-186' 999. IBP NCEP 45 + -126.00 32.80 'RW-NH1-187' 999. IBP NCEP 45 + -125.50 32.80 'RW-NH1-188' 999. IBP NCEP 45 + -125.00 32.80 'RW-NH1-189' 999. IBP NCEP 45 + -124.50 32.80 'RW-NH1-190' 999. IBP NCEP 45 + -124.00 32.80 'RW-NH1-191' 999. IBP NCEP 45 + -123.50 32.80 'RW-NH1-192' 999. IBP NCEP 45 + -123.00 32.80 'RW-NH1-193' 999. IBP NCEP 45 + -122.50 32.80 'RW-NH1-194' 999. IBP NCEP 45 + -122.00 32.80 'RW-NH1-195' 999. IBP NCEP 45 + -121.50 32.80 'RW-NH1-196' 999. IBP NCEP 45 + -121.00 32.80 'RW-NH1-197' 999. IBP NCEP 45 + -120.50 32.80 'RW-NH1-198' 999. IBP NCEP 45 + -120.00 32.80 'RW-NH1-199' 999. IBP NCEP 45 + -119.50 32.80 'RW-NH1-200' 999. IBP NCEP 45 + -119.00 32.80 'RW-NH1-201' 999. IBP NCEP 45 + -118.50 32.80 'RW-NH1-202' 999. IBP NCEP 45 + -118.00 32.80 'RW-NH1-203' 999. IBP NCEP 45 + -117.50 32.80 'RW-NH1-204' 999. IBP NCEP 45 + -113.50 31.00 'RW-NH1-205' 999. IBP NCEP 45 + -81.25 31.00 'RW-NH1-206' 999. IBP NCEP 45 + -81.00 31.00 'RW-NH1-207' 999. IBP NCEP 45 + -80.50 31.00 'RW-NH1-208' 999. IBP NCEP 45 + -80.00 31.00 'RW-NH1-209' 999. IBP NCEP 45 + -79.50 31.00 'RW-NH1-210' 999. IBP NCEP 45 + -79.00 31.00 'RW-NH1-211' 999. IBP NCEP 45 + -78.50 31.00 'RW-NH1-212' 999. IBP NCEP 45 + -78.00 31.00 'RW-NH1-213' 999. IBP NCEP 45 + -77.50 31.00 'RW-NH1-214' 999. IBP NCEP 45 + -77.00 31.00 'RW-NH1-215' 999. IBP NCEP 45 + -76.50 31.00 'RW-NH1-216' 999. IBP NCEP 45 + -76.00 31.00 'RW-NH1-217' 999. IBP NCEP 45 + -75.50 31.00 'RW-NH1-218' 999. IBP NCEP 45 + -75.00 31.00 'RW-NH1-219' 999. IBP NCEP 45 + -74.50 31.00 'RW-NH1-220' 999. IBP NCEP 45 + -74.00 31.00 'RW-NH1-221' 999. IBP NCEP 45 + -73.50 31.00 'RW-NH1-222' 999. IBP NCEP 45 + -73.00 31.00 'RW-NH1-223' 999. IBP NCEP 45 + -72.50 31.00 'RW-NH1-224' 999. IBP NCEP 45 + -72.00 31.00 'RW-NH1-225' 999. IBP NCEP 45 + -71.50 31.00 'RW-NH1-226' 999. IBP NCEP 45 + -71.00 31.00 'RW-NH1-227' 999. IBP NCEP 45 + -70.50 31.00 'RW-NH1-228' 999. IBP NCEP 45 + -70.00 31.00 'RW-NH1-229' 999. IBP NCEP 45 + -70.00 31.00 'RW-NH1-230' 999. IBP NCEP 45 + -70.00 30.50 'RW-NH1-231' 999. IBP NCEP 45 + -70.00 30.00 'RW-NH1-232' 999. IBP NCEP 45 + -70.00 29.50 'RW-NH1-233' 999. IBP NCEP 45 + -70.00 29.00 'RW-NH1-234' 999. IBP NCEP 45 + -70.00 28.50 'RW-NH1-235' 999. IBP NCEP 45 + -70.00 28.00 'RW-NH1-236' 999. IBP NCEP 45 + -70.00 27.50 'RW-NH1-237' 999. IBP NCEP 45 + -70.00 27.00 'RW-NH1-238' 999. IBP NCEP 45 + -70.00 26.50 'RW-NH1-239' 999. IBP NCEP 45 + -70.00 26.00 'RW-NH1-240' 999. IBP NCEP 45 + -70.00 25.50 'RW-NH1-241' 999. IBP NCEP 45 + -70.00 25.00 'RW-NH1-242' 999. IBP NCEP 45 + -70.00 24.50 'RW-NH1-243' 999. IBP NCEP 45 + -70.00 24.00 'RW-NH1-244' 999. IBP NCEP 45 + -70.00 23.50 'RW-NH1-245' 999. IBP NCEP 45 + -70.00 23.00 'RW-NH1-246' 999. IBP NCEP 45 + -70.00 22.50 'RW-NH1-247' 999. IBP NCEP 45 + -70.00 22.00 'RW-NH1-248' 999. IBP NCEP 45 + -70.00 21.50 'RW-NH1-249' 999. IBP NCEP 45 + -70.00 21.00 'RW-NH1-250' 999. IBP NCEP 45 + -70.00 20.50 'RW-NH1-251' 999. IBP NCEP 45 + -70.00 20.00 'RW-NH1-252' 999. IBP NCEP 45 + -70.00 18.00 'RW-NH1-253' 999. IBP NCEP 45 + -70.00 17.50 'RW-NH1-254' 999. IBP NCEP 45 + -70.00 17.00 'RW-NH1-255' 999. IBP NCEP 45 + -70.00 16.50 'RW-NH1-256' 999. IBP NCEP 45 + -70.00 16.00 'RW-NH1-257' 999. IBP NCEP 45 + -70.00 15.50 'RW-NH1-258' 999. IBP NCEP 45 + -70.00 15.00 'RW-NH1-259' 999. IBP NCEP 45 + -70.00 14.50 'RW-NH1-260' 999. IBP NCEP 45 + -70.00 14.00 'RW-NH1-261' 999. IBP NCEP 45 + -70.00 13.50 'RW-NH1-262' 999. IBP NCEP 45 + -70.00 13.00 'RW-NH1-263' 999. IBP NCEP 45 + -70.00 12.50 'RW-NH1-264' 999. IBP NCEP 45 + -70.50 -19.50 'RW-NH1-265' 999. IBP NCEP 45 + -71.00 -19.50 'RW-NH1-266' 999. IBP NCEP 45 + -71.50 -19.50 'RW-NH1-267' 999. IBP NCEP 45 + -72.00 -19.50 'RW-NH1-268' 999. IBP NCEP 45 + -72.50 -19.50 'RW-NH1-269' 999. IBP NCEP 45 + -73.00 -19.50 'RW-NH1-270' 999. IBP NCEP 45 + -73.50 -19.50 'RW-NH1-271' 999. IBP NCEP 45 + -74.00 -19.50 'RW-NH1-272' 999. IBP NCEP 45 + -74.50 -19.50 'RW-NH1-273' 999. IBP NCEP 45 + -75.00 -19.50 'RW-NH1-274' 999. IBP NCEP 45 + -75.50 -19.50 'RW-NH1-275' 999. IBP NCEP 45 + -76.00 -19.50 'RW-NH1-276' 999. IBP NCEP 45 + -76.50 -19.50 'RW-NH1-277' 999. IBP NCEP 45 + -77.00 -19.50 'RW-NH1-278' 999. IBP NCEP 45 + -77.50 -19.50 'RW-NH1-279' 999. IBP NCEP 45 + -78.00 -19.50 'RW-NH1-280' 999. IBP NCEP 45 + -78.50 -19.50 'RW-NH1-281' 999. IBP NCEP 45 + -79.00 -19.50 'RW-NH1-282' 999. IBP NCEP 45 + -79.50 -19.50 'RW-NH1-283' 999. IBP NCEP 45 + -80.00 -19.50 'RW-NH1-284' 999. IBP NCEP 45 + -80.50 -19.50 'RW-NH1-285' 999. IBP NCEP 45 + -81.00 -19.50 'RW-NH1-286' 999. IBP NCEP 45 + -81.50 -19.50 'RW-NH1-287' 999. IBP NCEP 45 + -82.00 -19.50 'RW-NH1-288' 999. IBP NCEP 45 + -82.50 -19.50 'RW-NH1-289' 999. IBP NCEP 45 + -83.00 -19.50 'RW-NH1-290' 999. IBP NCEP 45 + -83.50 -19.50 'RW-NH1-291' 999. IBP NCEP 45 + -84.00 -19.50 'RW-NH1-292' 999. IBP NCEP 45 + -84.50 -19.50 'RW-NH1-293' 999. IBP NCEP 45 + -85.00 -19.50 'RW-NH1-294' 999. IBP NCEP 45 + -85.50 -19.50 'RW-NH1-295' 999. IBP NCEP 45 + -86.00 -19.50 'RW-NH1-296' 999. IBP NCEP 45 + -86.50 -19.50 'RW-NH1-297' 999. IBP NCEP 45 + -87.00 -19.50 'RW-NH1-298' 999. IBP NCEP 45 + -87.50 -19.50 'RW-NH1-299' 999. IBP NCEP 45 + -88.00 -19.50 'RW-NH1-300' 999. IBP NCEP 45 + -88.50 -19.50 'RW-NH1-301' 999. IBP NCEP 45 + -89.00 -19.50 'RW-NH1-302' 999. IBP NCEP 45 + -89.50 -19.50 'RW-NH1-303' 999. IBP NCEP 45 + -90.00 -19.50 'RW-NH1-304' 999. IBP NCEP 45 + -90.50 -19.50 'RW-NH1-305' 999. IBP NCEP 45 + -91.00 -19.50 'RW-NH1-306' 999. IBP NCEP 45 + -91.50 -19.50 'RW-NH1-307' 999. IBP NCEP 45 + -92.00 -19.50 'RW-NH1-308' 999. IBP NCEP 45 + -92.50 -19.50 'RW-NH1-309' 999. IBP NCEP 45 + -93.00 -19.50 'RW-NH1-310' 999. IBP NCEP 45 + -93.50 -19.50 'RW-NH1-311' 999. IBP NCEP 45 + -94.00 -19.50 'RW-NH1-312' 999. IBP NCEP 45 + -94.50 -19.50 'RW-NH1-313' 999. IBP NCEP 45 + -95.00 -19.50 'RW-NH1-314' 999. IBP NCEP 45 + -95.50 -19.50 'RW-NH1-315' 999. IBP NCEP 45 + -96.00 -19.50 'RW-NH1-316' 999. IBP NCEP 45 + -96.50 -19.50 'RW-NH1-317' 999. IBP NCEP 45 + -97.00 -19.50 'RW-NH1-318' 999. IBP NCEP 45 + -97.50 -19.50 'RW-NH1-319' 999. IBP NCEP 45 + -98.00 -19.50 'RW-NH1-320' 999. IBP NCEP 45 + -98.50 -19.50 'RW-NH1-321' 999. IBP NCEP 45 + -99.00 -19.50 'RW-NH1-322' 999. IBP NCEP 45 + -99.50 -19.50 'RW-NH1-323' 999. IBP NCEP 45 + -100.00 -19.50 'RW-NH1-324' 999. IBP NCEP 45 + -100.50 -19.50 'RW-NH1-325' 999. IBP NCEP 45 + -101.00 -19.50 'RW-NH1-326' 999. IBP NCEP 45 + -101.50 -19.50 'RW-NH1-327' 999. IBP NCEP 45 + -102.00 -19.50 'RW-NH1-328' 999. IBP NCEP 45 + -102.50 -19.50 'RW-NH1-329' 999. IBP NCEP 45 + -103.00 -19.50 'RW-NH1-330' 999. IBP NCEP 45 + -103.50 -19.50 'RW-NH1-331' 999. IBP NCEP 45 + -104.00 -19.50 'RW-NH1-332' 999. IBP NCEP 45 + -104.50 -19.50 'RW-NH1-333' 999. IBP NCEP 45 + -102.00 -19.50 'RW-NH1-334' 999. IBP NCEP 45 + -102.50 -19.50 'RW-NH1-335' 999. IBP NCEP 45 + -103.00 -19.50 'RW-NH1-336' 999. IBP NCEP 45 + -103.50 -19.50 'RW-NH1-337' 999. IBP NCEP 45 + -104.00 -19.50 'RW-NH1-338' 999. IBP NCEP 45 + -104.50 -19.50 'RW-NH1-339' 999. IBP NCEP 45 + -105.00 -19.50 'RW-NH1-340' 999. IBP NCEP 45 + -102.50 -19.50 'RW-NH1-341' 999. IBP NCEP 45 + -103.00 -19.50 'RW-NH1-342' 999. IBP NCEP 45 + -103.50 -19.50 'RW-NH1-343' 999. IBP NCEP 45 + -104.00 -19.50 'RW-NH1-344' 999. IBP NCEP 45 + -104.50 -19.50 'RW-NH1-345' 999. IBP NCEP 45 + -105.00 -19.50 'RW-NH1-346' 999. IBP NCEP 45 + -105.50 -19.50 'RW-NH1-347' 999. IBP NCEP 45 + -106.00 -19.50 'RW-NH1-348' 999. IBP NCEP 45 + -106.50 -19.50 'RW-NH1-349' 999. IBP NCEP 45 + -107.00 -19.50 'RW-NH1-350' 999. IBP NCEP 45 + -107.50 -19.50 'RW-NH1-351' 999. IBP NCEP 45 + -108.00 -19.50 'RW-NH1-352' 999. IBP NCEP 45 + -105.50 -19.50 'RW-NH1-353' 999. IBP NCEP 45 + -106.00 -19.50 'RW-NH1-354' 999. IBP NCEP 45 + -106.50 -19.50 'RW-NH1-355' 999. IBP NCEP 45 + -107.00 -19.50 'RW-NH1-356' 999. IBP NCEP 45 + -107.50 -19.50 'RW-NH1-357' 999. IBP NCEP 45 + -108.00 -19.50 'RW-NH1-358' 999. IBP NCEP 45 + -108.50 -19.50 'RW-NH1-359' 999. IBP NCEP 45 + -109.00 -19.50 'RW-NH1-360' 999. IBP NCEP 45 + -109.50 -19.50 'RW-NH1-361' 999. IBP NCEP 45 + -110.00 -19.50 'RW-NH1-362' 999. IBP NCEP 45 + -110.50 -19.50 'RW-NH1-363' 999. IBP NCEP 45 + -111.00 -19.50 'RW-NH1-364' 999. IBP NCEP 45 + -111.50 -19.50 'RW-NH1-365' 999. IBP NCEP 45 + -112.00 -19.50 'RW-NH1-366' 999. IBP NCEP 45 + -112.50 -19.50 'RW-NH1-367' 999. IBP NCEP 45 + -113.00 -19.50 'RW-NH1-368' 999. IBP NCEP 45 + -113.50 -19.50 'RW-NH1-369' 999. IBP NCEP 45 + -114.00 -19.50 'RW-NH1-370' 999. IBP NCEP 45 + -114.50 -19.50 'RW-NH1-371' 999. IBP NCEP 45 + -115.00 -19.50 'RW-NH1-372' 999. IBP NCEP 45 + -115.50 -19.50 'RW-NH1-373' 999. IBP NCEP 45 + -116.00 -19.50 'RW-NH1-374' 999. IBP NCEP 45 + -116.50 -19.50 'RW-NH1-375' 999. IBP NCEP 45 + -117.00 -19.50 'RW-NH1-376' 999. IBP NCEP 45 + -117.50 -19.50 'RW-NH1-377' 999. IBP NCEP 45 + -118.00 -19.50 'RW-NH1-378' 999. IBP NCEP 45 + -118.50 -19.50 'RW-NH1-379' 999. IBP NCEP 45 + -119.00 -19.50 'RW-NH1-380' 999. IBP NCEP 45 + -119.50 -19.50 'RW-NH1-381' 999. IBP NCEP 45 + -120.00 -19.50 'RW-NH1-382' 999. IBP NCEP 45 + -120.50 -19.50 'RW-NH1-383' 999. IBP NCEP 45 + -121.00 -19.50 'RW-NH1-384' 999. IBP NCEP 45 + -121.50 -19.50 'RW-NH1-385' 999. IBP NCEP 45 + -122.00 -19.50 'RW-NH1-386' 999. IBP NCEP 45 + -122.50 -19.50 'RW-NH1-387' 999. IBP NCEP 45 + -123.00 -19.50 'RW-NH1-388' 999. IBP NCEP 45 + -123.50 -19.50 'RW-NH1-389' 999. IBP NCEP 45 + -124.00 -19.50 'RW-NH1-390' 999. IBP NCEP 45 + -124.50 -19.50 'RW-NH1-391' 999. IBP NCEP 45 + -125.00 -19.50 'RW-NH1-392' 999. IBP NCEP 45 + -125.50 -19.50 'RW-NH1-393' 999. IBP NCEP 45 + -126.00 -19.50 'RW-NH1-394' 999. IBP NCEP 45 + -126.50 -19.50 'RW-NH1-395' 999. IBP NCEP 45 + -127.00 -19.50 'RW-NH1-396' 999. IBP NCEP 45 + -127.50 -19.50 'RW-NH1-397' 999. IBP NCEP 45 + -128.00 -19.50 'RW-NH1-398' 999. IBP NCEP 45 + -128.50 -19.50 'RW-NH1-399' 999. IBP NCEP 45 + -129.00 -19.50 'RW-NH1-400' 999. IBP NCEP 45 + -129.50 -19.50 'RW-NH1-401' 999. IBP NCEP 45 + -130.00 -19.50 'RW-NH1-402' 999. IBP NCEP 45 + -130.50 -19.50 'RW-NH1-403' 999. IBP NCEP 45 + -131.00 -19.50 'RW-NH1-404' 999. IBP NCEP 45 + -131.50 -19.50 'RW-NH1-405' 999. IBP NCEP 45 + -132.00 -19.50 'RW-NH1-406' 999. IBP NCEP 45 + -132.50 -19.50 'RW-NH1-407' 999. IBP NCEP 45 + -133.00 -19.50 'RW-NH1-408' 999. IBP NCEP 45 + -133.50 -19.50 'RW-NH1-409' 999. IBP NCEP 45 + -134.00 -19.50 'RW-NH1-410' 999. IBP NCEP 45 + -134.50 -19.50 'RW-NH1-411' 999. IBP NCEP 45 + -135.00 -19.50 'RW-NH1-412' 999. IBP NCEP 45 + -135.50 -19.50 'RW-NH1-413' 999. IBP NCEP 45 + -136.00 -19.50 'RW-NH1-414' 999. IBP NCEP 45 + -136.50 -19.50 'RW-NH1-415' 999. IBP NCEP 45 + -137.00 -19.50 'RW-NH1-416' 999. IBP NCEP 45 + -137.50 -19.50 'RW-NH1-417' 999. IBP NCEP 45 + -138.00 -19.50 'RW-NH1-418' 999. IBP NCEP 45 + -138.50 -19.50 'RW-NH1-419' 999. IBP NCEP 45 + -139.00 -19.50 'RW-NH1-420' 999. IBP NCEP 45 + -139.50 -19.50 'RW-NH1-421' 999. IBP NCEP 45 + -140.00 -19.50 'RW-NH1-422' 999. IBP NCEP 45 + -140.50 -19.50 'RW-NH1-423' 999. IBP NCEP 45 + -141.00 -19.50 'RW-NH1-424' 999. IBP NCEP 45 +$ +$ +$ End of multi_1 buoy file +$ + 0.00 0.00 'STOPSTRING' 999. XXX NCEP 0 +$ diff --git a/parm/wave/wc_10m_interp.inp.tmpl b/parm/wave/wc_10m_interp.inp.tmpl new file mode 100755 index 0000000000..abb51b4dfc --- /dev/null +++ b/parm/wave/wc_10m_interp.inp.tmpl @@ -0,0 +1,12 @@ +$ Input file for interpolation of GLO30m_ext Grid +$------------------------------------------------ +$ Start Time DT NSteps + TIME DT NSTEPS +$ Total number of grids + 2 +$ Grid extensions + 'gnh_10m' + 'wc_10m' +$ + 0 +$ diff --git a/parm/wave/ww3_grib2.ak_10m.inp.tmpl b/parm/wave/ww3_grib2.ak_10m.inp.tmpl new file mode 100755 index 0000000000..ddfabdb13d --- /dev/null +++ b/parm/wave/ww3_grib2.ak_10m.inp.tmpl @@ -0,0 +1,9 @@ +$ WAVEWATCH-III gridded output input file +$ ---------------------------------------- +TIME DT NT +N +FLAGS +$ +TIME 7 MODNR GRIDNR 0 0 +$ +$ end of input file diff --git a/parm/wave/ww3_grib2.ant_9km.inp.tmpl b/parm/wave/ww3_grib2.ant_9km.inp.tmpl new file mode 100755 index 0000000000..fb00e6a507 --- /dev/null +++ b/parm/wave/ww3_grib2.ant_9km.inp.tmpl @@ -0,0 +1,10 @@ +$ WAVEWATCH-III gridded output input file +$ ---------------------------------------- +TIME DT NT +N +FLAGS +$ +TIME 7 MODNR GRIDNR 0 20 +$ + -60 0 8.64919046313 8.64919046313 64 +$ end of input file diff --git a/parm/wave/ww3_grib2.aoc_9km.inp.tmpl b/parm/wave/ww3_grib2.aoc_9km.inp.tmpl new file mode 100755 index 0000000000..ca768872e2 --- /dev/null +++ b/parm/wave/ww3_grib2.aoc_9km.inp.tmpl @@ -0,0 +1,11 @@ +$ WAVEWATCH-III gridded output input file +$ ---------------------------------------- +TIME DT NT +N +FLAGS +$ +TIME 7 MODNR GRIDNR 0 20 +$ + 70 0 9.0 9.0 64 +$ 60 0 8.64919046313 8.64919046313 64 +$ end of input file diff --git a/parm/wave/ww3_grib2.at_10m.inp.tmpl b/parm/wave/ww3_grib2.at_10m.inp.tmpl new file mode 100755 index 0000000000..ddfabdb13d --- /dev/null +++ b/parm/wave/ww3_grib2.at_10m.inp.tmpl @@ -0,0 +1,9 @@ +$ WAVEWATCH-III gridded output input file +$ ---------------------------------------- +TIME DT NT +N +FLAGS +$ +TIME 7 MODNR GRIDNR 0 0 +$ +$ end of input file diff --git a/parm/wave/ww3_grib2.ep_10m.inp.tmpl b/parm/wave/ww3_grib2.ep_10m.inp.tmpl new file mode 100755 index 0000000000..ddfabdb13d --- /dev/null +++ b/parm/wave/ww3_grib2.ep_10m.inp.tmpl @@ -0,0 +1,9 @@ +$ WAVEWATCH-III gridded output input file +$ ---------------------------------------- +TIME DT NT +N +FLAGS +$ +TIME 7 MODNR GRIDNR 0 0 +$ +$ end of input file diff --git a/parm/wave/ww3_grib2.glo_025.inp.tmpl b/parm/wave/ww3_grib2.glo_025.inp.tmpl new file mode 100755 index 0000000000..ddfabdb13d --- /dev/null +++ b/parm/wave/ww3_grib2.glo_025.inp.tmpl @@ -0,0 +1,9 @@ +$ WAVEWATCH-III gridded output input file +$ ---------------------------------------- +TIME DT NT +N +FLAGS +$ +TIME 7 MODNR GRIDNR 0 0 +$ +$ end of input file diff --git a/parm/wave/ww3_grib2.glo_10m.inp.tmpl b/parm/wave/ww3_grib2.glo_10m.inp.tmpl new file mode 100755 index 0000000000..ddfabdb13d --- /dev/null +++ b/parm/wave/ww3_grib2.glo_10m.inp.tmpl @@ -0,0 +1,9 @@ +$ WAVEWATCH-III gridded output input file +$ ---------------------------------------- +TIME DT NT +N +FLAGS +$ +TIME 7 MODNR GRIDNR 0 0 +$ +$ end of input file diff --git a/parm/wave/ww3_grib2.glo_15mxt.inp.tmpl b/parm/wave/ww3_grib2.glo_15mxt.inp.tmpl new file mode 100755 index 0000000000..ddfabdb13d --- /dev/null +++ b/parm/wave/ww3_grib2.glo_15mxt.inp.tmpl @@ -0,0 +1,9 @@ +$ WAVEWATCH-III gridded output input file +$ ---------------------------------------- +TIME DT NT +N +FLAGS +$ +TIME 7 MODNR GRIDNR 0 0 +$ +$ end of input file diff --git a/parm/wave/ww3_grib2.glo_200.inp.tmpl b/parm/wave/ww3_grib2.glo_200.inp.tmpl new file mode 100755 index 0000000000..ddfabdb13d --- /dev/null +++ b/parm/wave/ww3_grib2.glo_200.inp.tmpl @@ -0,0 +1,9 @@ +$ WAVEWATCH-III gridded output input file +$ ---------------------------------------- +TIME DT NT +N +FLAGS +$ +TIME 7 MODNR GRIDNR 0 0 +$ +$ end of input file diff --git a/parm/wave/ww3_grib2.glo_30m.inp.tmpl b/parm/wave/ww3_grib2.glo_30m.inp.tmpl new file mode 100755 index 0000000000..ddfabdb13d --- /dev/null +++ b/parm/wave/ww3_grib2.glo_30m.inp.tmpl @@ -0,0 +1,9 @@ +$ WAVEWATCH-III gridded output input file +$ ---------------------------------------- +TIME DT NT +N +FLAGS +$ +TIME 7 MODNR GRIDNR 0 0 +$ +$ end of input file diff --git a/parm/wave/ww3_grib2.glo_500.inp.tmpl b/parm/wave/ww3_grib2.glo_500.inp.tmpl new file mode 100755 index 0000000000..ddfabdb13d --- /dev/null +++ b/parm/wave/ww3_grib2.glo_500.inp.tmpl @@ -0,0 +1,9 @@ +$ WAVEWATCH-III gridded output input file +$ ---------------------------------------- +TIME DT NT +N +FLAGS +$ +TIME 7 MODNR GRIDNR 0 0 +$ +$ end of input file diff --git a/parm/wave/ww3_grib2.gnh_10m.inp.tmpl b/parm/wave/ww3_grib2.gnh_10m.inp.tmpl new file mode 100755 index 0000000000..ddfabdb13d --- /dev/null +++ b/parm/wave/ww3_grib2.gnh_10m.inp.tmpl @@ -0,0 +1,9 @@ +$ WAVEWATCH-III gridded output input file +$ ---------------------------------------- +TIME DT NT +N +FLAGS +$ +TIME 7 MODNR GRIDNR 0 0 +$ +$ end of input file diff --git a/parm/wave/ww3_grib2.gsh_15m.inp.tmpl b/parm/wave/ww3_grib2.gsh_15m.inp.tmpl new file mode 100755 index 0000000000..ddfabdb13d --- /dev/null +++ b/parm/wave/ww3_grib2.gsh_15m.inp.tmpl @@ -0,0 +1,9 @@ +$ WAVEWATCH-III gridded output input file +$ ---------------------------------------- +TIME DT NT +N +FLAGS +$ +TIME 7 MODNR GRIDNR 0 0 +$ +$ end of input file diff --git a/parm/wave/ww3_grib2.gwes_30m.inp.tmpl b/parm/wave/ww3_grib2.gwes_30m.inp.tmpl new file mode 100755 index 0000000000..ddfabdb13d --- /dev/null +++ b/parm/wave/ww3_grib2.gwes_30m.inp.tmpl @@ -0,0 +1,9 @@ +$ WAVEWATCH-III gridded output input file +$ ---------------------------------------- +TIME DT NT +N +FLAGS +$ +TIME 7 MODNR GRIDNR 0 0 +$ +$ end of input file diff --git a/parm/wave/ww3_grib2.inp.tmpl b/parm/wave/ww3_grib2.inp.tmpl new file mode 100755 index 0000000000..ddfabdb13d --- /dev/null +++ b/parm/wave/ww3_grib2.inp.tmpl @@ -0,0 +1,9 @@ +$ WAVEWATCH-III gridded output input file +$ ---------------------------------------- +TIME DT NT +N +FLAGS +$ +TIME 7 MODNR GRIDNR 0 0 +$ +$ end of input file diff --git a/parm/wave/ww3_grib2.reg025.inp.tmpl b/parm/wave/ww3_grib2.reg025.inp.tmpl new file mode 100755 index 0000000000..ddfabdb13d --- /dev/null +++ b/parm/wave/ww3_grib2.reg025.inp.tmpl @@ -0,0 +1,9 @@ +$ WAVEWATCH-III gridded output input file +$ ---------------------------------------- +TIME DT NT +N +FLAGS +$ +TIME 7 MODNR GRIDNR 0 0 +$ +$ end of input file diff --git a/parm/wave/ww3_grib2.wc_10m.inp.tmpl b/parm/wave/ww3_grib2.wc_10m.inp.tmpl new file mode 100755 index 0000000000..ddfabdb13d --- /dev/null +++ b/parm/wave/ww3_grib2.wc_10m.inp.tmpl @@ -0,0 +1,9 @@ +$ WAVEWATCH-III gridded output input file +$ ---------------------------------------- +TIME DT NT +N +FLAGS +$ +TIME 7 MODNR GRIDNR 0 0 +$ +$ end of input file diff --git a/parm/wave/ww3_multi.inp.tmpl b/parm/wave/ww3_multi.inp.tmpl new file mode 100755 index 0000000000..50b59544cb --- /dev/null +++ b/parm/wave/ww3_multi.inp.tmpl @@ -0,0 +1,38 @@ +$ WAVEWATCH III multi-grid input file +$ ------------------------------------ + NMGRIDS NFGRIDS FUNIPNT IOSRV FPNTPROC FGRDPROC +$ +CPLILINE +WINDLINE +ICELINE +CURRLINE +UNIPOINTS +GRIDLINE +$ + RUN_BEG RUN_END +$ + FLAGMASKCOMP FLAGMASKOUT +$ + OUT_BEG DTFLD OUT_END GOFILETYPE + N + OUTPARS +$ + OUT_BEG DTPNT OUT_END POFILETYPE +BUOY_FILE +$ + OUT_BEG 0 OUT_END +$ +$ Keep next two lines formatting as is to allow proper parsing + RST_BEG DTRST RST_END RSTTYPE +RST_2_BEG DT_2_RST RST_2_END +$ + OUT_BEG 0 OUT_END +$ + OUT_BEG 0 OUT_END +$ + 'the_end' 0 +$ + 'STP' +$ +$ End of input file + diff --git a/parm/wave/ww3_outp_bull.inp.tmpl b/parm/wave/ww3_outp_bull.inp.tmpl new file mode 100755 index 0000000000..e7741b876c --- /dev/null +++ b/parm/wave/ww3_outp_bull.inp.tmpl @@ -0,0 +1,11 @@ +$ WAVEWATCH III Point output post-processing +$ ------------------------------------------ + TIME DT 999 +$ + POINT + -1 +$ + 4 + 4 1 REFT 'UTC' +$ +$ End of input file diff --git a/parm/wave/ww3_outp_spec.inp.tmpl b/parm/wave/ww3_outp_spec.inp.tmpl new file mode 100755 index 0000000000..2490b7a8d7 --- /dev/null +++ b/parm/wave/ww3_outp_spec.inp.tmpl @@ -0,0 +1,11 @@ +$ WAVEWATCH III Point output post-processing +$ ------------------------------------------ + TIME DT 999 +$ + POINT + -1 +$ + ITYPE + 3 0. 0. 51 FORMAT +$ +$ End of input file diff --git a/parm/wave/ww3_prnc.cur.glix_10m.inp.tmpl b/parm/wave/ww3_prnc.cur.glix_10m.inp.tmpl new file mode 100755 index 0000000000..6be7b873c0 --- /dev/null +++ b/parm/wave/ww3_prnc.cur.glix_10m.inp.tmpl @@ -0,0 +1,27 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Field preprocessor input file $ + 'CUR' 'LL' T HDRFL +$ +$ Name of spatial dimensions------------------------------------------ $ +$ NB: time dimension is expected to be called 'time' and must respect +$ Julian or Gregorian calendar with leap day. +$ + lon lat +$ +$ Variables to use --------------------------------------------------- $ +$ + u_velocity v_velocity +$ +$ Additional time input ---------------------------------------------- $ +$ If time flag is .FALSE., give time of field in yyyymmdd hhmmss format. +$ +$ 19680606 053000 +$ +$ Define data files -------------------------------------------------- $ +$ The input line identifies the filename using for the forcing field. +$ + 'cur.nc' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/parm/wave/ww3_prnc.cur.rtofs_5m.inp.tmpl b/parm/wave/ww3_prnc.cur.rtofs_5m.inp.tmpl new file mode 100755 index 0000000000..6be7b873c0 --- /dev/null +++ b/parm/wave/ww3_prnc.cur.rtofs_5m.inp.tmpl @@ -0,0 +1,27 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III Field preprocessor input file $ + 'CUR' 'LL' T HDRFL +$ +$ Name of spatial dimensions------------------------------------------ $ +$ NB: time dimension is expected to be called 'time' and must respect +$ Julian or Gregorian calendar with leap day. +$ + lon lat +$ +$ Variables to use --------------------------------------------------- $ +$ + u_velocity v_velocity +$ +$ Additional time input ---------------------------------------------- $ +$ If time flag is .FALSE., give time of field in yyyymmdd hhmmss format. +$ +$ 19680606 053000 +$ +$ Define data files -------------------------------------------------- $ +$ The input line identifies the filename using for the forcing field. +$ + 'cur.nc' +$ +$ -------------------------------------------------------------------- $ +$ End of input file $ +$ -------------------------------------------------------------------- $ diff --git a/parm/wave/ww3_prnc.ice.glix_10m.inp.tmpl b/parm/wave/ww3_prnc.ice.glix_10m.inp.tmpl new file mode 100755 index 0000000000..0ededc3257 --- /dev/null +++ b/parm/wave/ww3_prnc.ice.glix_10m.inp.tmpl @@ -0,0 +1,12 @@ +$ WAVEWATCH-III wind preprocessor input file +$ ------------------------------------------ + 'ICE' 'LL' T T +$ + longitude latitude +$ +$ Variables to use --------------------------------------------------- $ +$ + ICEC_meansealevel +$ + 'icean_5m.nc' +$ end of input file diff --git a/parm/wave/ww3_prnc.ice.icean_5m.inp.tmpl b/parm/wave/ww3_prnc.ice.icean_5m.inp.tmpl new file mode 100755 index 0000000000..0ededc3257 --- /dev/null +++ b/parm/wave/ww3_prnc.ice.icean_5m.inp.tmpl @@ -0,0 +1,12 @@ +$ WAVEWATCH-III wind preprocessor input file +$ ------------------------------------------ + 'ICE' 'LL' T T +$ + longitude latitude +$ +$ Variables to use --------------------------------------------------- $ +$ + ICEC_meansealevel +$ + 'icean_5m.nc' +$ end of input file diff --git a/parm/wave/ww3_shel.inp.tmpl b/parm/wave/ww3_shel.inp.tmpl new file mode 100644 index 0000000000..0b9b335e1b --- /dev/null +++ b/parm/wave/ww3_shel.inp.tmpl @@ -0,0 +1,42 @@ +$ -------------------------------------------------------------------- $ +$ WAVEWATCH III shel input file $ +$ -------------------------------------------------------------------- $ +$ Include ice and mud parameters only if IC1/2/3/4 used : + F F Water levels + CURRLINE + WINDLINE + ICELINE + F F Atmospheric momentum + F F Air density + F Assimilation data : Mean parameters + F Assimilation data : 1-D spectra + F Assimilation data : 2-D spectra +$ + RUN_BEG + RUN_END +$ +$ IOSTYP + IOSRV +$ + OUT_BEG DTFLD OUT_END GOFILETYPE + N + OUTPARS +$ + OUT_BEG DTPNT OUT_END POFILETYPE +BUOY_FILE +$ + OUT_BEG 0 OUT_END +$ +$ Keep next two lines formatting as is to allow proper parsing + RST_BEG DTRST RST_END RSTTYPE +RST_2_BEG DT_2_RST RST_2_END +$ + OUT_BEG 0 OUT_END +$ + OUT_BEG 0 OUT_END +$ + 'the_end' 0 +$ + 'STP' +$ +$ End of input file diff --git a/scripts/exgdas_atmos_chgres_forenkf.sh b/scripts/exgdas_atmos_chgres_forenkf.sh new file mode 100755 index 0000000000..25d034ef47 --- /dev/null +++ b/scripts/exgdas_atmos_chgres_forenkf.sh @@ -0,0 +1,191 @@ +#! /usr/bin/env bash +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exgdas_atmos_chgres_forenkf.sh +# Script description: Runs chgres on full-resolution forecast for EnKF recentering +# +# Author: Cory Martin Org: NCEP/EMC Date: 2020-06-08 +# +# Abstract: This script runs chgres on full-resolution forecast for later +# use in the EnKF recentering step +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# +################################################################################ + +source "$HOMEgfs/ush/preamble.sh" + +# Directories. +pwd=$(pwd) +export FIXgsm=${FIXgsm:-$HOMEgfs/fix/am} + +# Base variables +CDATE=${CDATE:-"2001010100"} +CDUMP=${CDUMP:-"enkfgdas"} +GDUMP=${GDUMP:-"gdas"} + +# Derived base variables +GDATE=$($NDATE -$assim_freq $CDATE) +BDATE=$($NDATE -3 $CDATE) +PDY=$(echo $CDATE | cut -c1-8) +cyc=$(echo $CDATE | cut -c9-10) +bPDY=$(echo $BDATE | cut -c1-8) +bcyc=$(echo $BDATE | cut -c9-10) + +# Utilities +export NCP=${NCP:-"/bin/cp"} +export NMV=${NMV:-"/bin/mv"} +export NLN=${NLN:-"/bin/ln -sf"} +export CHGRP_CMD=${CHGRP_CMD:-"chgrp ${group_name:-rstprod}"} +export NCLEN=${NCLEN:-$HOMEgfs/ush/getncdimlen} + +# IAU +DOIAU=${DOIAU:-"NO"} +export IAUFHRS=${IAUFHRS:-"6"} + +# Dependent Scripts and Executables +export APRUN_CHGRES=${APRUN_CHGRES:-${APRUN:-""}} +export CHGRESNCEXEC=${CHGRESNCEXEC:-$HOMEgfs/exec/enkf_chgres_recenter_nc.x} +export NTHREADS_CHGRES=${NTHREADS_CHGRES:-1} +APRUNCFP=${APRUNCFP:-""} + +# OPS flags +RUN=${RUN:-""} +SENDECF=${SENDECF:-"NO"} +SENDDBN=${SENDDBN:-"NO"} + +# level info file +SIGLEVEL=${SIGLEVEL:-${FIXgsm}/global_hyblev.l${LEVS}.txt} + +# forecast files +APREFIX=${APREFIX:-""} +APREFIX_ENS=${APREFIX_ENS:-""} +# at full resolution +ATMF03=${ATMF03:-${COM_ATMOS_HISTORY}/${APREFIX}atmf003.nc} +ATMF04=${ATMF04:-${COM_ATMOS_HISTORY}/${APREFIX}atmf004.nc} +ATMF05=${ATMF05:-${COM_ATMOS_HISTORY}/${APREFIX}atmf005.nc} +ATMF06=${ATMF06:-${COM_ATMOS_HISTORY}/${APREFIX}atmf006.nc} +ATMF07=${ATMF07:-${COM_ATMOS_HISTORY}/${APREFIX}atmf007.nc} +ATMF08=${ATMF08:-${COM_ATMOS_HISTORY}/${APREFIX}atmf008.nc} +ATMF09=${ATMF09:-${COM_ATMOS_HISTORY}/${APREFIX}atmf009.nc} +# at ensemble resolution +ATMF03ENS=${ATMF03ENS:-${COM_ATMOS_HISTORY}/${APREFIX}atmf003.ensres.nc} +ATMF04ENS=${ATMF04ENS:-${COM_ATMOS_HISTORY}/${APREFIX}atmf004.ensres.nc} +ATMF05ENS=${ATMF05ENS:-${COM_ATMOS_HISTORY}/${APREFIX}atmf005.ensres.nc} +ATMF06ENS=${ATMF06ENS:-${COM_ATMOS_HISTORY}/${APREFIX}atmf006.ensres.nc} +ATMF07ENS=${ATMF07ENS:-${COM_ATMOS_HISTORY}/${APREFIX}atmf007.ensres.nc} +ATMF08ENS=${ATMF08ENS:-${COM_ATMOS_HISTORY}/${APREFIX}atmf008.ensres.nc} +ATMF09ENS=${ATMF09ENS:-${COM_ATMOS_HISTORY}/${APREFIX}atmf009.ensres.nc} +ATMFCST_ENSRES=${ATMFCST_ENSRES:-${COM_ATMOS_HISTORY_MEM}/${APREFIX_ENS}atmf006.nc} + +# Set script / GSI control parameters +DOHYBVAR=${DOHYBVAR:-"NO"} +lrun_subdirs=${lrun_subdirs:-".true."} +USE_CFP=${USE_CFP:-"NO"} +CFP_MP=${CFP_MP:-"NO"} +nm="" +if [ $CFP_MP = "YES" ]; then + nm=0 +fi +if [ $DOHYBVAR = "YES" ]; then + l_hyb_ens=.true. + export l4densvar=${l4densvar:-".false."} + export lwrite4danl=${lwrite4danl:-".false."} +else + echo "DOHYBVAR != YES, this script will exit without regridding deterministic forecast" + exit 0 +fi + +################################################################################ +################################################################################ + +# get resolution information +LONB_ENKF=${LONB_ENKF:-$($NCLEN $ATMFCST_ENSRES grid_xt)} # get LONB_ENKF +LATB_ENKF=${LATB_ENKF:-$($NCLEN $ATMFCST_ENSRES grid_yt)} # get LATB_ENFK +LEVS_ENKF=${LEVS_ENKF:-$($NCLEN $ATMFCST_ENSRES pfull)} # get LATB_ENFK + +############################################################## +# If analysis increment is written by GSI, regrid forecasts to increment resolution +if [ $DO_CALC_ANALYSIS == "YES" ]; then + $NLN $ATMF06 fcst.06 + $NLN $ATMF06ENS fcst.ensres.06 + $NLN $ATMFCST_ENSRES atmens_fcst + if [ $DOHYBVAR = "YES" -a $l4densvar = ".true." -a $lwrite4danl = ".true." ]; then + $NLN $ATMF03 fcst.03 + $NLN $ATMF03ENS fcst.ensres.03 + $NLN $ATMF04 fcst.04 + $NLN $ATMF04ENS fcst.ensres.04 + $NLN $ATMF05 fcst.05 + $NLN $ATMF05ENS fcst.ensres.05 + $NLN $ATMF07 fcst.07 + $NLN $ATMF07ENS fcst.ensres.07 + $NLN $ATMF08 fcst.08 + $NLN $ATMF08ENS fcst.ensres.08 + $NLN $ATMF09 fcst.09 + $NLN $ATMF09ENS fcst.ensres.09 + fi + export OMP_NUM_THREADS=$NTHREADS_CHGRES + SIGLEVEL=${SIGLEVEL:-${FIXgsm}/global_hyblev.l${LEVS_ENKF}.txt} + + if [ $USE_CFP = "YES" ]; then + [[ -f $DATA/mp_chgres.sh ]] && rm $DATA/mp_chgres.sh + fi + + nfhrs=$(echo $IAUFHRS_ENKF | sed 's/,/ /g') + for FHR in $nfhrs; do + echo "Regridding deterministic forecast for forecast hour $FHR" + rm -f chgres_nc_gauss0$FHR.nml +cat > chgres_nc_gauss0$FHR.nml << EOF +&chgres_setup +i_output=$LONB_ENKF +j_output=$LATB_ENKF +input_file="fcst.0$FHR" +output_file="fcst.ensres.0$FHR" +terrain_file="atmens_fcst" +ref_file="atmens_fcst" +/ +EOF + if [ $USE_CFP = "YES" ]; then + echo "$nm $APRUN_CHGRES $CHGRESNCEXEC chgres_nc_gauss0$FHR.nml" | tee -a $DATA/mp_chgres.sh + if [ ${CFP_MP:-"NO"} = "YES" ]; then + nm=$((nm+1)) + fi + else + + export pgm=$CHGRESNCEXEC + . prep_step + + $APRUN_CHGRES $CHGRESNCEXEC chgres_nc_gauss0$FHR.nml + export err=$?; err_chk + fi + done + + if [ $USE_CFP = "YES" ]; then + chmod 755 $DATA/mp_chgres.sh + ncmd=$(cat $DATA/mp_chgres.sh | wc -l) + if [ $ncmd -gt 0 ]; then + ncmd_max=$((ncmd < npe_node_max ? ncmd : npe_node_max)) + APRUNCFP_CHGRES=$(eval echo $APRUNCFP) + + export pgm=$CHGRESNCEXEC + . prep_step + + $APRUNCFP_CHGRES $DATA/mp_chgres.sh + export err=$?; err_chk + fi + fi + +else + echo "DO_CALC_ANALYSIS != YES, doing nothing" +fi + + +################################################################################ +# Postprocessing +cd $pwd + +exit $err diff --git a/scripts/exgdas_atmos_gempak_gif_ncdc.sh b/scripts/exgdas_atmos_gempak_gif_ncdc.sh new file mode 100755 index 0000000000..63a7475a0e --- /dev/null +++ b/scripts/exgdas_atmos_gempak_gif_ncdc.sh @@ -0,0 +1,60 @@ +#! /usr/bin/env bash +############################################################## +# Add the NCDC GIF processing to the end of the gempak_gif job +# There is no timing issue with the NCDC GIF, so it is +# okay to just add it here. If timing becomes a problem +# in the future, we should move it above somewhere else. +############################################################## + +source "$HOMEgfs/ush/preamble.sh" + +cd $DATA + +export NTS=$USHgempak/restore + +if [ $MODEL = GDAS ] +then + case $MODEL in + GDAS) fcsthrs="000";; + esac + + export fhr + for fhr in $fcsthrs + do + icnt=1 + maxtries=180 + while [ $icnt -lt 1000 ] + do + if [ -r ${COMIN}/${RUN}_${PDY}${cyc}f${fhr} ] ; then + break + else + sleep 20 + let "icnt=icnt+1" + fi + if [ $icnt -ge $maxtries ] + then + msg="ABORTING after 1 hour of waiting for F$fhr to end." + err_exit $msg + fi + done + + cp ${COMIN}/${RUN}_${PDY}${cyc}f${fhr} gem_grids${fhr}.gem + export err=$? + if [[ $err -ne 0 ]] ; then + echo " File: ${COMIN}/${RUN}_${PDY}${cyc}f${fhr} does not exist." + exit $err + fi + + if [ $cyc -eq 00 -o $cyc -eq 12 ] + then + $USHgempak/gempak_${RUN}_f${fhr}_gif.sh + if [ ! -f $USHgempak/gempak_${RUN}_f${fhr}_gif.sh ] ; then + echo "WARNING: $USHgempak/gempak_${RUN}_f${fhr}_gif.sh FILE is missing" + fi + fi + + done +fi + + +exit diff --git a/scripts/exgdas_atmos_nawips.sh b/scripts/exgdas_atmos_nawips.sh new file mode 100755 index 0000000000..94a23f2a85 --- /dev/null +++ b/scripts/exgdas_atmos_nawips.sh @@ -0,0 +1,164 @@ +#! /usr/bin/env bash + +################################################################### +# echo "----------------------------------------------------" +# echo "exnawips - convert NCEP GRIB files into GEMPAK Grids" +# echo "----------------------------------------------------" +# echo "History: Mar 2000 - First implementation of this new script." +# echo "S Lilly: May 2008 - add logic to make sure that all of the " +# echo " data produced from the restricted ECMWF" +# echo " data on the CCS is properly protected." +##################################################################### + +source "$HOMEgfs/ush/preamble.sh" "${2}" + +cd $DATA +RUN2=$1 +fend=$2 +DBN_ALERT_TYPE=$3 +destination=$4 + +DATA_RUN=$DATA/$RUN2 +mkdir -p $DATA_RUN +cd $DATA_RUN + +cp $FIXgempak/g2varswmo2.tbl g2varswmo2.tbl +export err=$? +if [[ $err -ne 0 ]] ; then + echo " File g2varswmo2.tbl file is missing." + exit $err +fi +cp $FIXgempak/g2vcrdwmo2.tbl g2vcrdwmo2.tbl +export err=$? +if [[ $err -ne 0 ]] ; then + echo " File g2vcrdwmo2.tbl file is missing." + exit $err +fi + +cp $FIXgempak/g2varsncep1.tbl g2varsncep1.tbl +export err=$? +if [[ $err -ne 0 ]] ; then + echo " File g2varsncep1.tbl file is missing." + exit $err +fi + +cp $FIXgempak/g2vcrdncep1.tbl g2vcrdncep1.tbl +export err=$? +if [[ $err -ne 0 ]] ; then + echo " File g2vcrdncep1.tbl file is missing." + exit $err +fi + +# +NAGRIB=$GEMEXE/nagrib2_nc +export err=$? +if [[ $err -ne 0 ]] ; then + echo " File $GEMEXE/nagrib2_nc is missing." + echo " WARNING: module GEMPAK was not loaded" + exit $err +fi + +cpyfil=gds +garea=dset +gbtbls= +maxgrd=4999 +kxky= +grdarea= +proj= +output=T +pdsext=no + +maxtries=180 +fhcnt=$fstart +while [ $fhcnt -le $fend ] ; do + fhr=$(printf "%03d" $fhcnt) + fhcnt3=$(expr $fhr % 3) + + fhr3=$(printf "%03d" $fhcnt) + + GEMGRD=${RUN2}_${PDY}${cyc}f${fhr3} + + if [[ ${RUN2} = "gdas_0p25" ]]; then + export GRIBIN=${COM_ATMOS_GRIB_0p25}/${model}.${cycle}.pgrb2.0p25.f${fhr} + if [[ ! -f ${GRIBIN} ]] ; then + echo "WARNING: ${GRIBIN} FILE is missing" + fi + GRIBIN_chk=${COM_ATMOS_GRIB_0p25}${model}.${cycle}.pgrb2.0p25.f${fhr}.idx + else + export GRIBIN=${COM_ATMOS_GRIB_1p00}/${model}.${cycle}.pgrb2.1p00.f${fhr} + if [[ ! -f ${GRIBIN} ]] ; then + echo "WARNING: ${GRIBIN} FILE is missing" + fi + GRIBIN_chk=${COM_ATMOS_GRIB_1p00}/${model}.${cycle}.pgrb2.1p00.f${fhr}.idx + fi + + icnt=1 + while [ $icnt -lt 1000 ] + do + if [ -r $GRIBIN_chk ] ; then + sleep 5 + break + else + echo "The process is waiting ... ${GRIBIN_chk} file to proceed." + sleep 20 + let "icnt=icnt+1" + fi + if [ $icnt -ge $maxtries ] + then + echo "ABORTING: after 1 hour of waiting for ${GRIBIN_chk} file at F$fhr to end." + export err=7 ; err_chk + exit $err + fi + done + + cp $GRIBIN grib$fhr + + export pgm="nagrib2 F$fhr" + startmsg + + $NAGRIB << EOF + GBFILE = grib$fhr + INDXFL = + GDOUTF = $GEMGRD + PROJ = $proj + GRDAREA = $grdarea + KXKY = $kxky + MAXGRD = $maxgrd + CPYFIL = $cpyfil + GAREA = $garea + OUTPUT = $output + GBTBLS = $gbtbls + GBDIAG = + PDSEXT = $pdsext + l + r +EOF + export err=$?;err_chk + + cp "${GEMGRD}" "${destination}/.${GEMGRD}" + export err=$? + if [[ ${err} -ne 0 ]] ; then + echo " File ${GEMGRD} does not exist." + exit "${err}" + fi + + mv "${destination}/.${GEMGRD}" "${destination}/${GEMGRD}" + if [[ ${SENDDBN} = "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${destination}/${GEMGRD}" + else + echo "##### DBN_ALERT_TYPE is: ${DBN_ALERT_TYPE} #####" + fi + + if [ $fhcnt -ge 240 ] ; then + let fhcnt=fhcnt+12 + else + let fhcnt=fhcnt+finc + fi +done + +$GEMEXE/gpend +##################################################################### + + +############################### END OF SCRIPT ####################### diff --git a/scripts/exgdas_atmos_verfozn.sh b/scripts/exgdas_atmos_verfozn.sh new file mode 100755 index 0000000000..1810fdef5d --- /dev/null +++ b/scripts/exgdas_atmos_verfozn.sh @@ -0,0 +1,50 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +################################################################################ +# exgdas_atmos_verfozn.sh +# +# This script runs the data extract/validation portion of the Ozone Monitor +# (OznMon) DA package. +# +################################################################################ +err=0 + +data_available=0 + +if [[ -s ${oznstat} ]]; then + data_available=1 + + #------------------------------------------------------------------ + # Copy data files file to local data directory. + # Untar oznstat file. + #------------------------------------------------------------------ + + ${NCP} "${oznstat}" "./oznstat.${PDY}${cyc}" + + tar -xvf "oznstat.${PDY}${cyc}" + rm "oznstat.${PDY}${cyc}" + + netcdf=0 + count=$(ls diag* | grep ".nc4" | wc -l) + if [ "${count}" -gt 0 ] ; then + netcdf=1 + for filenc4 in $(ls diag*nc4.gz); do + file=$(echo "${filenc4}" | cut -d'.' -f1-2).gz + mv "${filenc4}" "${file}" + done + fi + + export OZNMON_NETCDF=${netcdf} + + "${USHgfs}/ozn_xtrct.sh" + err=$? + +else + # oznstat file not found + err=1 +fi + +exit ${err} + diff --git a/scripts/exgdas_atmos_verfrad.sh b/scripts/exgdas_atmos_verfrad.sh new file mode 100755 index 0000000000..50320ffba1 --- /dev/null +++ b/scripts/exgdas_atmos_verfrad.sh @@ -0,0 +1,174 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exgdas_atmos_verfrad.sh +# Script description: Runs data extract/validation for global radiance diag data +# +# Author: Ed Safford Org: NP23 Date: 2012-01-18 +# +# Abstract: This script runs the data extract/validation portion of the +# RadMon package. +# +# Condition codes +# 0 - no problem encountered +# >0 - some problem encountered +# +################################################################################ + +data_available=0 + +if [[ -s ${radstat} && -s ${biascr} ]]; then + data_available=1 + + #------------------------------------------------------------------ + # Copy data files file to local data directory. + # Untar radstat file. + #------------------------------------------------------------------ + + ${NCP} "${biascr}" "./biascr.${PDY}${cyc}" + ${NCP} "${radstat}" "./radstat.${PDY}${cyc}" + + tar -xvf "radstat.${PDY}${cyc}" + rm "radstat.${PDY}${cyc}" + + #------------------------------------------------------------------ + # SATYPE is the list of expected satellite/instrument sources + # in the radstat file. It should be stored in the $TANKverf + # directory. If it isn't there then use the $FIXgdas copy. In all + # cases write it back out to the radmon.$PDY directory. Add any + # new sources to the list before writing back out. + #------------------------------------------------------------------ + + radstat_satype=$(ls d*ges* | awk -F_ '{ print $2 "_" $3 }') + if [[ "${VERBOSE}" = "YES" ]]; then + echo "${radstat_satype}" + fi + + echo satype_file = "${satype_file}" + + #------------------------------------------------------------------ + # Get previous cycle's date, and look for the satype_file. Using + # the previous cycle will get us the previous day's directory if + # the cycle being processed is 00z. + #------------------------------------------------------------------ + if [[ ${cyc} = "00" ]]; then + use_tankdir=${TANKverf_radM1} + else + use_tankdir=${TANKverf_rad} + fi + + echo satype_file = "${satype_file}" + export SATYPE=$(cat "${satype_file}") + + + #------------------------------------------------------------- + # Update the SATYPE if any new sat/instrument was + # found in $radstat_satype. Write the SATYPE contents back + # to $TANKverf/radmon.$PDY. + #------------------------------------------------------------- + satype_changes=0 + new_satype=${SATYPE} + for type in ${radstat_satype}; do + type_count=$(echo "${SATYPE}" | grep "${type}" | wc -l) + + if (( type_count == 0 )); then + if [[ "${VERBOSE}" = "YES" ]]; then + echo "Found ${type} in radstat file but not in SATYPE list. Adding it now." + fi + satype_changes=1 + new_satype="${new_satype} ${type}" + fi + done + + + #------------------------------------------------------------------ + # Rename the diag files and uncompress + #------------------------------------------------------------------ + netcdf=0 + + for type in ${SATYPE}; do + + if (( netcdf == 0 )) && [[ -e "diag_${type}_ges.${PDY}${cyc}.nc4.${Z}" ]]; then + netcdf=1 + fi + + if [[ $(find . -maxdepth 1 -type f -name "diag_${type}_ges.${PDY}${cyc}*.${Z}" | wc -l) -gt 0 ]]; then + mv "diag_${type}_ges.${PDY}${cyc}"*".${Z}" "${type}.${Z}" + ${UNCOMPRESS} "./${type}.${Z}" + else + echo "WARNING: diag_${type}_ges.${PDY}${cyc}*.${Z} not available, skipping" + fi + + if [[ ${USE_ANL} -eq 1 ]]; then + if [[ $(find . -maxdepth 1 -type f -name "diag_${type}_anl.${PDY}${cyc}*.${Z}" | wc -l) -gt 0 ]]; then + mv "diag_${type}_anl.${PDY}${cyc}"*".${Z}" "${type}_anl.${Z}" + ${UNCOMPRESS} "./${type}_anl.${Z}" + else + echo "WARNING: diag_${type}_anl.${PDY}${cyc}*.${Z} not available, skipping" + fi + fi + done + + export RADMON_NETCDF=${netcdf} + + + #------------------------------------------------------------------ + # Run the child scripts. + #------------------------------------------------------------------ + "${USHgfs}/radmon_verf_angle.sh" + rc_angle=$? + + "${USHgfs}/radmon_verf_bcoef.sh" + rc_bcoef=$? + + "${USHgfs}/radmon_verf_bcor.sh" + rc_bcor=$? + + "${USHgfs}/radmon_verf_time.sh" + rc_time=$? + + #-------------------------------------- + # optionally run clean_tankdir script + # + if [[ ${CLEAN_TANKVERF:-0} -eq 1 ]]; then + "${USHradmon}/clean_tankdir.sh" glb 60 + rc_clean_tankdir=$? + echo "rc_clean_tankdir = ${rc_clean_tankdir}" + fi + +fi + + + +##################################################################### +# Postprocessing + +err=0 +if [[ ${data_available} -ne 1 ]]; then + err=1 +elif [[ ${rc_angle} -ne 0 ]]; then + err=${rc_angle} +elif [[ ${rc_bcoef} -ne 0 ]]; then + err=${rc_bcoef} +elif [[ ${rc_bcor} -ne 0 ]]; then + err=${rc_bcor} +elif [[ ${rc_time} -ne 0 ]]; then + err=${rc_time} +fi + +##################################################################### +# Restrict select sensors and satellites +export CHGRP_CMD=${CHGRP_CMD:-"chgrp ${group_name:-rstprod}"} +rlist="saphir" +for rtype in ${rlist}; do + if compgen -G "${TANKverf_rad}/"*"${rtype}"* > /dev/null; then + ${CHGRP_CMD} "${TANKverf_rad}/"*"${rtype}"* + fi +done + +exit ${err} + diff --git a/scripts/exgdas_enkf_earc.sh b/scripts/exgdas_enkf_earc.sh new file mode 100755 index 0000000000..199b5609a2 --- /dev/null +++ b/scripts/exgdas_enkf_earc.sh @@ -0,0 +1,163 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################## +# Begin JOB SPECIFIC work +############################################## +export n=$((10#${ENSGRP})) +export CDUMP_ENKF="${EUPD_CYC:-"gdas"}" + +# ICS are restarts and always lag INC by $assim_freq hours. +EARCINC_CYC=${ARCH_CYC} +EARCICS_CYC=$((ARCH_CYC-assim_freq)) +if [ "${EARCICS_CYC}" -lt 0 ]; then + EARCICS_CYC=$((EARCICS_CYC+24)) +fi + +"${HOMEgfs}/ush/hpssarch_gen.sh" "${RUN}" +status=$? +if [ "${status}" -ne 0 ]; then + echo "${HOMEgfs}/ush/hpssarch_gen.sh ${RUN} failed, ABORT!" + exit "${status}" +fi + +cd "${ROTDIR}" || exit 2 + +source "${HOMEgfs}/ush/file_utils.sh" + +################################################################### +# ENSGRP > 0 archives a group of ensemble members +firstday=$(${NDATE} +24 "${SDATE}") +if (( 10#${ENSGRP} > 0 )) && [[ ${HPSSARCH} = "YES" || ${LOCALARCH} = "YES" ]]; then + +#--set the archiving command and create local directories, if necessary + TARCMD="htar" + if [[ ${LOCALARCH} = "YES" ]]; then + TARCMD="tar" + if [[ ! -d "${ATARDIR}/${PDY}${cyc}" ]]; then mkdir -p "${ATARDIR}/${PDY}${cyc}"; fi + fi + +#--determine when to save ICs for warm start + SAVEWARMICA="NO" + SAVEWARMICB="NO" + mm="${PDY:4:2}" + dd="${PDY:6:2}" + nday=$(( (10#${mm}-1)*30+10#${dd} )) + mod=$((nday % ARCH_WARMICFREQ)) + if [ "${PDY}${cyc}" -eq "${firstday}" ] && [ "${cyc}" -eq "${EARCINC_CYC}" ]; then SAVEWARMICA="YES" ; fi + if [ "${PDY}${cyc}" -eq "${firstday}" ] && [ "${cyc}" -eq "${EARCICS_CYC}" ]; then SAVEWARMICB="YES" ; fi + if [ "${mod}" -eq 0 ] && [ "${cyc}" ] && [ "${EARCINC_CYC}" ]; then SAVEWARMICA="YES" ; fi + if [ "${mod}" -eq 0 ] && [ "${cyc}" ] && [ "${EARCICS_CYC}" ]; then SAVEWARMICB="YES" ; fi + + if [ "${EARCICS_CYC}" -eq 18 ]; then + nday1=$((nday+1)) + mod1=$((nday1 % ARCH_WARMICFREQ)) + if [ "${mod1}" -eq 0 ] && [ "${cyc}" -eq "${EARCICS_CYC}" ] ; then SAVEWARMICB="YES" ; fi + if [ "${mod1}" -ne 0 ] && [ "${cyc}" -eq "${EARCICS_CYC}" ] ; then SAVEWARMICB="NO" ; fi + if [ "${PDY}${cyc}" -eq "${SDATE}" ] && [ "${cyc}" -eq "${EARCICS_CYC}" ] ; then SAVEWARMICB="YES" ; fi + fi + + if [ "${PDY}${cyc}" -gt "${SDATE}" ]; then # Don't run for first half cycle + + ${TARCMD} -P -cvf "${ATARDIR}/${PDY}${cyc}/${RUN}_grp${ENSGRP}.tar" $(cat "${DATA}/${RUN}_grp${n}.txt") + status=$? + if [ "${status}" -ne 0 ] && [ "${PDY}${cyc}" -ge "${firstday}" ]; then + echo "FATAL ERROR: ${TARCMD} ${PDY}${cyc} ${RUN}_grp${ENSGRP}.tar failed" + exit "${status}" + fi + + if [ "${SAVEWARMICA}" = "YES" ] && [ "${cyc}" -eq "${EARCINC_CYC}" ]; then + ${TARCMD} -P -cvf "${ATARDIR}/${PDY}${cyc}/${RUN}_restarta_grp${ENSGRP}.tar" $(cat "${DATA}/${RUN}_restarta_grp${n}.txt") + status=$? + if [ "${status}" -ne 0 ]; then + echo "FATAL ERROR: ${TARCMD} ${PDY}${cyc} ${RUN}_restarta_grp${ENSGRP}.tar failed" + exit "${status}" + fi + fi + + if [ "${SAVEWARMICB}" = "YES" ] && [ "${cyc}" -eq "${EARCICS_CYC}" ]; then + ${TARCMD} -P -cvf "${ATARDIR}/${PDY}${cyc}/${RUN}_restartb_grp${ENSGRP}.tar" $(cat "${DATA}/${RUN}_restartb_grp${n}.txt") + status=$? + if [ "${status}" -ne 0 ]; then + echo "FATAL ERROR: ${TARCMD} ${PDY}${cyc} ${RUN}_restartb_grp${ENSGRP}.tar failed" + exit "${status}" + fi + fi + + fi # CDATE>SDATE + +fi + + +################################################################### +# ENSGRP 0 archives ensemble means and copy data to online archive +if [ "${ENSGRP}" -eq 0 ]; then + + if [[ ${HPSSARCH} = "YES" || ${LOCALARCH} = "YES" ]]; then + + #--set the archiving command and create local directories, if necessary + TARCMD="htar" + HSICMD="hsi" + if [[ ${LOCALARCH} = "YES" ]]; then + TARCMD="tar" + HSICMD="" + if [[ ! -d "${ATARDIR}/${PDY}${cyc}" ]]; then mkdir -p "${ATARDIR}/${PDY}${cyc}"; fi + fi + + set +e + # Check if the tarball will have rstprod in it + has_rstprod="NO" + while IFS= read -r file; do + if [[ -f ${file} ]]; then + group=$( stat -c "%G" "${file}" ) + if [[ "${group}" == "rstprod" ]]; then + has_rstprod="YES" + break + fi + fi + done < "${DATA}/${RUN}.txt" + + # Create the tarball + tar_fl=${ATARDIR}/${PDY}${cyc}/${RUN}.tar + ${TARCMD} -P -cvf "${tar_fl}" $(cat "${DATA}/${RUN}.txt") + status=$? + if [[ "${status}" -ne 0 ]]; then + echo "FATAL ERROR: Tarring of ${tar_fl} failed" + exit "${status}" + fi + + # If rstprod was found, change the group of the tarball + if [[ "${has_rstprod}" == "YES" ]]; then + ${HSICMD} chgrp rstprod "${tar_fl}" + stat_chgrp=$? + ${HSICMD} chmod 640 "${tar_fl}" + stat_chgrp=$((stat_chgrp+$?)) + if [[ "${stat_chgrp}" -gt 0 ]]; then + echo "FATAL ERROR: Unable to properly restrict ${tar_fl}!" + echo "Attempting to delete ${tar_fl}" + ${HSICMD} rm "${tar_fl}" + echo "Please verify that ${tar_fl} was deleted!" + exit "${stat_chgrp}" + fi + fi + + # For safety, test if the htar/tar command failed only after changing groups + if (( status != 0 && ${PDY}${cyc} >= firstday )); then + echo "FATAL ERROR: ${TARCMD} ${tar_fl} failed" + exit "${status}" + fi + set_strict + fi + + #-- Archive online for verification and diagnostics + [[ ! -d ${ARCDIR} ]] && mkdir -p "${ARCDIR}" + cd "${ARCDIR}" || exit 2 + + nb_copy "${COM_ATMOS_ANALYSIS_ENSSTAT}/${RUN}.t${cyc}z.enkfstat" \ + "enkfstat.${RUN}.${PDY}${cyc}" + nb_copy "${COM_ATMOS_ANALYSIS_ENSSTAT}/${RUN}.t${cyc}z.gsistat.ensmean" \ + "gsistat.${RUN}.${PDY}${cyc}.ensmean" +fi + +exit 0 diff --git a/scripts/exgdas_enkf_ecen.sh b/scripts/exgdas_enkf_ecen.sh new file mode 100755 index 0000000000..30edb947a9 --- /dev/null +++ b/scripts/exgdas_enkf_ecen.sh @@ -0,0 +1,360 @@ +#! /usr/bin/env bash + +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exgdas_enkf_ecen.sh +# Script description: recenter ensemble around hi-res deterministic analysis +# +# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 +# +# Abstract: This script recenters ensemble around hi-res deterministic analysis +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# +################################################################################ + +source "$HOMEgfs/ush/preamble.sh" + +# Directories. +pwd=$(pwd) + +# Base variables +CDATE=${CDATE:-"2010010100"} +DONST=${DONST:-"NO"} +export CASE=${CASE:-384} +ntiles=${ntiles:-6} + +# Utilities +NCP=${NCP:-"/bin/cp -p"} +NLN=${NLN:-"/bin/ln -sf"} +NCLEN=${NCLEN:-$HOMEgfs/ush/getncdimlen} + +# Scripts + +# Executables. +GETATMENSMEANEXEC=${GETATMENSMEANEXEC:-$HOMEgfs/exec/getsigensmeanp_smooth.x} +GETSFCENSMEANEXEC=${GETSFCENSMEANEXEC:-$HOMEgfs/exec/getsfcensmeanp.x} +RECENATMEXEC=${RECENATMEXEC:-$HOMEgfs/exec/recentersigp.x} +CALCINCNEMSEXEC=${CALCINCNEMSEXEC:-$HOMEgfs/exec/calc_increment_ens.x} +CALCINCNCEXEC=${CALCINCEXEC:-$HOMEgfs/exec/calc_increment_ens_ncio.x} + +# Files. +OPREFIX=${OPREFIX:-""} +OSUFFIX=${OSUFFIX:-""} +APREFIX=${APREFIX:-""} +APREFIX_ENS=${APREFIX_ENS:-$APREFIX} +GPREFIX=${GPREFIX:-""} +GPREFIX_ENS=${GPREFIX_ENS:-$GPREFIX} + +# Variables +NMEM_ENS=${NMEM_ENS:-80} +imp_physics=${imp_physics:-99} +INCREMENTS_TO_ZERO=${INCREMENTS_TO_ZERO:-"'NONE'"} +DOIAU=${DOIAU_ENKF:-"NO"} +FHMIN=${FHMIN_ECEN:-3} +FHMAX=${FHMAX_ECEN:-9} +FHOUT=${FHOUT_ECEN:-3} +FHSFC=${FHSFC_ECEN:-$FHMIN} +if [ $RUN = "enkfgfs" ]; then + DO_CALC_INCREMENT=${DO_CALC_INCREMENT_ENKF_GFS:-"NO"} +else + DO_CALC_INCREMENT=${DO_CALC_INCREMENT:-"NO"} +fi + +# global_chgres stuff +CHGRESNEMS=${CHGRESNEMS:-$HOMEgfs/exec/enkf_chgres_recenter.x} +CHGRESNC=${CHGRESNC:-$HOMEgfs/exec/enkf_chgres_recenter_nc.x} +NTHREADS_CHGRES=${NTHREADS_CHGRES:-24} +APRUN_CHGRES=${APRUN_CHGRES:-""} + +# global_cycle stuff +CYCLESH=${CYCLESH:-$HOMEgfs/ush/global_cycle.sh} +export CYCLEXEC=${CYCLEXEC:-$HOMEgfs/exec/global_cycle} +APRUN_CYCLE=${APRUN_CYCLE:-${APRUN:-""}} +NTHREADS_CYCLE=${NTHREADS_CYCLE:-${NTHREADS:-1}} +export FIXfv3=${FIXfv3:-$HOMEgfs/fix/orog} +export FIXgsm=${FIXgsm:-$HOMEgfs/fix/am} +export CYCLVARS=${CYCLVARS:-"FSNOL=-2.,FSNOS=99999.,"} +export FHOUR=${FHOUR:-0} +export DELTSFC=${DELTSFC:-6} + + +RECENTER_ENKF=${RECENTER_ENKF:-"YES"} +SMOOTH_ENKF=${SMOOTH_ENKF:-"YES"} + +APRUN_ECEN=${APRUN_ECEN:-${APRUN:-""}} +NTHREADS_ECEN=${NTHREADS_ECEN:-${NTHREADS:-1}} +APRUN_CALCINC=${APRUN_CALCINC:-${APRUN:-""}} +NTHREADS_CALCINC=${NTHREADS_CALCINC:-${NTHREADS:-1}} + +################################################################################ +# Preprocessing +mkdata=NO +if [ ! -d $DATA ]; then + mkdata=YES + mkdir -p $DATA +fi +cd $DATA || exit 99 + +ENKF_SUFFIX="s" +[[ $SMOOTH_ENKF = "NO" ]] && ENKF_SUFFIX="" + +################################################################################ +# Link ensemble member guess, analysis and increment files +for FHR in $(seq $FHMIN $FHOUT $FHMAX); do + +for imem in $(seq 1 $NMEM_ENS); do + memchar="mem"$(printf %03i $imem) + + MEMDIR=${memchar} YMD=${PDY} HH=${cyc} generate_com -x \ + COM_ATMOS_ANALYSIS_MEM:COM_ATMOS_ANALYSIS_TMPL + + MEMDIR=${memchar} RUN=${GDUMP_ENS} YMD=${gPDY} HH=${gcyc} generate_com -x \ + COM_ATMOS_HISTORY_MEM_PREV:COM_ATMOS_HISTORY_TMPL + + ${NLN} "${COM_ATMOS_HISTORY_MEM_PREV}/${GPREFIX_ENS}atmf00${FHR}${ENKF_SUFFIX}.nc" "./atmges_${memchar}" + if [ $DO_CALC_INCREMENT = "YES" ]; then + if [ $FHR -eq 6 ]; then + ${NLN} "${COM_ATMOS_ANALYSIS_MEM}/${APREFIX_ENS}atmanl.nc" "./atmanl_${memchar}" + else + ${NLN} "${COM_ATMOS_ANALYSIS_MEM}/${APREFIX_ENS}atma00${FHR}.nc" "./atmanl_${memchar}" + fi + fi + mkdir -p "${COM_ATMOS_ANALYSIS_MEM}" + if [ $FHR -eq 6 ]; then + ${NLN} "${COM_ATMOS_ANALYSIS_MEM}/${APREFIX_ENS}atminc.nc" "./atminc_${memchar}" + else + ${NLN} "${COM_ATMOS_ANALYSIS_MEM}/${APREFIX_ENS}atmi00${FHR}.nc" "./atminc_${memchar}" + fi + if [[ $RECENTER_ENKF = "YES" ]]; then + if [ $DO_CALC_INCREMENT = "YES" ]; then + if [ $FHR -eq 6 ]; then + ${NLN} "${COM_ATMOS_ANALYSIS_MEM}/${APREFIX_ENS}ratmanl.nc" "./ratmanl_${memchar}" + else + ${NLN} "${COM_ATMOS_ANALYSIS_MEM}/${APREFIX_ENS}ratma00${FHR}.nc" "./ratmanl_${memchar}" + fi + else + if [ $FHR -eq 6 ]; then + ${NLN} "${COM_ATMOS_ANALYSIS_MEM}/${APREFIX_ENS}ratminc.nc" "./ratminc_${memchar}" + else + ${NLN} "${COM_ATMOS_ANALYSIS_MEM}/${APREFIX_ENS}ratmi00${FHR}.nc" "./ratminc_${memchar}" + fi + fi + fi +done + +if [ $DO_CALC_INCREMENT = "YES" ]; then + # Link ensemble mean analysis + if [ $FHR -eq 6 ]; then + ${NLN} "${COM_ATMOS_ANALYSIS_STAT}/${APREFIX_ENS}atmanl.ensmean.nc" "./atmanl_ensmean" + else + ${NLN} "${COM_ATMOS_ANALYSIS_STAT}/${APREFIX_ENS}atma00${FHR}.ensmean.nc" "./atmanl_ensmean" + fi + + # Compute ensemble mean analysis + DATAPATH="./" + ATMANLNAME="atmanl" + ATMANLMEANNAME="atmanl_ensmean" + + export OMP_NUM_THREADS=$NTHREADS_ECEN + export pgm=$GETATMENSMEANEXEC + . prep_step + + $NCP $GETATMENSMEANEXEC $DATA + $APRUN_ECEN ${DATA}/$(basename $GETATMENSMEANEXEC) $DATAPATH $ATMANLMEANNAME $ATMANLNAME $NMEM_ENS + export err=$?; err_chk +else + # Link ensemble mean increment + if [ $FHR -eq 6 ]; then + ${NLN} "${COM_ATMOS_ANALYSIS_STAT}/${APREFIX_ENS}atminc.ensmean.nc" "./atminc_ensmean" + else + ${NLN} "${COM_ATMOS_ANALYSIS_STAT}/${APREFIX_ENS}atmi00${FHR}.ensmean.nc" "./atminc_ensmean" + fi + + # Compute ensemble mean increment + DATAPATH="./" + ATMINCNAME="atminc" + ATMINCMEANNAME="atminc_ensmean" + + export OMP_NUM_THREADS=$NTHREADS_ECEN + export pgm=$GETATMENSMEANEXEC + . prep_step + + $NCP $GETATMENSMEANEXEC $DATA + $APRUN_ECEN ${DATA}/$(basename $GETATMENSMEANEXEC) $DATAPATH $ATMINCMEANNAME $ATMINCNAME $NMEM_ENS + export err=$?; err_chk + + # If available, link to ensemble mean guess. Otherwise, compute ensemble mean guess + if [[ -s "${COM_ATMOS_HISTORY_STAT_PREV}/${GPREFIX_ENS}atmf00${FHR}.ensmean.nc" ]]; then + ${NLN} "${COM_ATMOS_HISTORY_STAT_PREV}/${GPREFIX_ENS}atmf00${FHR}.ensmean.nc" "./atmges_ensmean" + else + DATAPATH="./" + ATMGESNAME="atmges" + ATMGESMEANNAME="atmges_ensmean" + + export OMP_NUM_THREADS=$NTHREADS_ECEN + export pgm=$GETATMENSMEANEXEC + . prep_step + + $NCP $GETATMENSMEANEXEC $DATA + $APRUN_ECEN ${DATA}/$(basename $GETATMENSMEANEXEC) $DATAPATH $ATMGESMEANNAME $ATMGESNAME $NMEM_ENS + export err=$?; err_chk + fi +fi + +if [ $DO_CALC_INCREMENT = "YES" ]; then + LONB_ENKF=${LONB_ENKF:-$($NCLEN atmanl_ensmean grid_xt)} # get LONB + LATB_ENKF=${LATB_ENKF:-$($NCLEN atmanl_ensmean grid_yt)} # get LATB + LEVS_ENKF=${LEVS_ENKF:-$($NCLEN atmanl_ensmean pfull)} # get LEVS +else + LONB_ENKF=${LONB_ENKF:-$($NCLEN atminc_ensmean lon)} # get LONB + LATB_ENKF=${LATB_ENKF:-$($NCLEN atminc_ensmean lat)} # get LATB + LEVS_ENKF=${LEVS_ENKF:-$($NCLEN atminc_ensmean lev)} # get LEVS +fi +JCAP_ENKF=${JCAP_ENKF:--9999} # there is no jcap in these files +[ $JCAP_ENKF -eq -9999 -a $LATB_ENKF -ne -9999 ] && JCAP_ENKF=$((LATB_ENKF-2)) +[ $LONB_ENKF -eq -9999 -o $LATB_ENKF -eq -9999 -o $LEVS_ENKF -eq -9999 -o $JCAP_ENKF -eq -9999 ] && exit -9999 + +################################################################################ +# This is to give the user the option to recenter, default is YES +if [ $RECENTER_ENKF = "YES" ]; then + + # GSI EnVar analysis + if [ $FHR -eq 6 ]; then + ATMANL_GSI="${COM_ATMOS_ANALYSIS_DET}/${APREFIX}atmanl.nc" + ATMANL_GSI_ENSRES="${COM_ATMOS_ANALYSIS_DET}/${APREFIX}atmanl.ensres.nc" + else + ATMANL_GSI="${COM_ATMOS_ANALYSIS_DET}/${APREFIX}atma00${FHR}.nc" + ATMANL_GSI_ENSRES="${COM_ATMOS_ANALYSIS_DET}/${APREFIX}atma00${FHR}.ensres.nc" + fi + + # if we already have a ensemble resolution GSI analysis then just link to it + if [ -f $ATMANL_GSI_ENSRES ]; then + + $NLN $ATMANL_GSI_ENSRES atmanl_gsi_ensres + + else + + $NLN $ATMANL_GSI atmanl_gsi + $NLN $ATMANL_GSI_ENSRES atmanl_gsi_ensres + SIGLEVEL=${SIGLEVEL:-${FIXgsm}/global_hyblev.l${LEVS}.txt} + $NLN $CHGRESNC chgres.x + chgresnml=chgres_nc_gauss.nml + nmltitle=chgres + + export OMP_NUM_THREADS=$NTHREADS_CHGRES + + [[ -f $chgresnml ]] && rm -f $chgresnml + cat > $chgresnml << EOF +&${nmltitle}_setup + i_output=$LONB_ENKF + j_output=$LATB_ENKF + input_file="atmanl_gsi" + output_file="atmanl_gsi_ensres" + terrain_file="atmanl_ensmean" + vcoord_file="$SIGLEVEL" +/ +EOF + cat $chgresnml + $APRUN_CHGRES ./chgres.x + export err=$?; err_chk + fi + + if [ $DO_CALC_INCREMENT = "YES" ]; then + ################################################################################ + # Recenter ensemble member atmospheric analyses about hires analysis + + FILENAMEIN="atmanl" + FILENAME_MEANIN="atmanl_ensmean" # EnKF ensemble mean analysis + FILENAME_MEANOUT="atmanl_gsi_ensres" # recenter around GSI analysis at ensemble resolution + FILENAMEOUT="ratmanl" + + export OMP_NUM_THREADS=$NTHREADS_ECEN + export pgm=$RECENATMEXEC + . prep_step + + $NCP $RECENATMEXEC $DATA + $APRUN_ECEN ${DATA}/$(basename $RECENATMEXEC) $FILENAMEIN $FILENAME_MEANIN $FILENAME_MEANOUT $FILENAMEOUT $NMEM_ENS + export err=$?; err_chk + else + ################################################################################ + # Recenter ensemble member atmospheric increments about hires analysis + + FILENAMEIN="atminc" + FILENAME_INCMEANIN="atminc_ensmean" # EnKF ensemble mean increment + FILENAME_GESMEANIN="atmges_ensmean" # EnKF ensemble mean guess + FILENAME_GSIDET="atmanl_gsi_ensres" # recenter around GSI analysis at ensemble resolution + FILENAMEOUT="ratminc" + + export OMP_NUM_THREADS=$NTHREADS_ECEN + + # make the small namelist file for incvars_to_zero + + [[ -f recenter.nml ]] && rm recenter.nml + cat > recenter.nml << EOF +&recenter + incvars_to_zero = $INCREMENTS_TO_ZERO +/ +EOF +cat recenter.nml + + export pgm=$RECENATMEXEC + . prep_step + + $NCP $RECENATMEXEC $DATA + $APRUN_ECEN ${DATA}/$(basename $RECENATMEXEC) $FILENAMEIN $FILENAME_INCMEANIN $FILENAME_GSIDET $FILENAMEOUT $NMEM_ENS $FILENAME_GESMEANIN + export err=$?; err_chk + fi +fi + +################################################################################ +# Calculate ensemble analysis increment +if [ $DO_CALC_INCREMENT = "YES" ]; then + if [ $RECENTER_ENKF = "YES" ]; then + ATMANLNAME='ratmanl' + else + ATMANLNAME='atmanl' + fi + + export OMP_NUM_THREADS=$NTHREADS_CALCINC + CALCINCEXEC=$CALCINCNCEXEC + + export pgm=$CALCINCEXEC + . prep_step + + $NCP $CALCINCEXEC $DATA + [[ -f calc_increment.nml ]] && rm calc_increment.nml + cat > calc_increment.nml << EOF +&setup + datapath = './' + analysis_filename = '$ATMANLNAME' + firstguess_filename = 'atmges' + increment_filename = 'atminc' + debug = .false. + nens = $NMEM_ENS + imp_physics = $imp_physics +/ +&zeroinc + incvars_to_zero = $INCREMENTS_TO_ZERO +/ +EOF +cat calc_increment.nml + + $APRUN_CALCINC ${DATA}/$(basename $CALCINCEXEC) + export err=$?; err_chk +fi +done # loop over analysis times in window + +################################################################################ + +################################################################################ +# Postprocessing +cd $pwd +[[ $mkdata = "YES" ]] && rm -rf $DATA + + +exit ${err} diff --git a/scripts/exgdas_enkf_fcst.sh b/scripts/exgdas_enkf_fcst.sh new file mode 100755 index 0000000000..fd6136ddd2 --- /dev/null +++ b/scripts/exgdas_enkf_fcst.sh @@ -0,0 +1,225 @@ +#! /usr/bin/env bash + +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exgdas_enkf_fcst.sh +# Script description: Run ensemble forecasts +# +# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 +# +# Abstract: This script runs ensemble forecasts serially one-after-another +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# +#### +################################################################################ + +source "${HOMEgfs}/ush/preamble.sh" + +# Enemble group, begin and end +ENSGRP=${ENSGRP:-1} +ENSBEG=${ENSBEG:-1} +ENSEND=${ENSEND:-1} + +# Re-run failed members, or entire group +RERUN_EFCSGRP=${RERUN_EFCSGRP:-"YES"} + +# Recenter flag and increment file prefix +RECENTER_ENKF=${RECENTER_ENKF:-"YES"} +export PREFIX_ATMINC=${PREFIX_ATMINC:-""} + +################################################################################ +# Preprocessing +cd "${DATA}" || exit 99 +DATATOP=${DATA} + +################################################################################ +# Set output data +EFCSGRP="${COM_TOP}/efcs.grp${ENSGRP}" +if [[ -f ${EFCSGRP} ]]; then + if [[ ${RERUN_EFCSGRP} = "YES" ]]; then + rm -f "${EFCSGRP}" + else + echo "RERUN_EFCSGRP = ${RERUN_EFCSGRP}, will re-run FAILED members only!" + ${NMV} "${EFCSGRP}" "${EFCSGRP}.fail" + fi +fi + +################################################################################ +# Set namelist/model config options common to all members once + +# There are many many model namelist options +# Some are resolution (CASE) dependent, some depend on the model configuration +# and will need to be added here before $FORECASTSH is called +# For now assume that +# 1. the ensemble and the deterministic are same resolution +# 2. the ensemble runs with the same configuration as the deterministic + +# Model config option for Ensemble +export TYPE=${TYPE_ENKF:-${TYPE:-nh}} # choices: nh, hydro +export MONO=${MONO_ENKF:-${MONO:-non-mono}} # choices: mono, non-mono + +# fv_core_nml +export CASE=${CASE_ENS:-${CASE:-C768}} +export layout_x=${layout_x_ENKF:-${layout_x:-8}} +export layout_y=${layout_y_ENKF:-${layout_y:-16}} +export LEVS=${LEVS_ENKF:-${LEVS:-64}} + +# nggps_diag_nml +export FHOUT=${FHOUT_ENKF:-3} +if [[ ${RUN} == "enkfgfs" ]]; then + export FHOUT=${FHOUT_ENKF_GFS:-${FHOUT_ENKF:${FHOUT:-3}}} +fi +# model_configure +export DELTIM=${DELTIM_ENKF:-${DELTIM:-225}} +export FHMAX=${FHMAX_ENKF:-9} +if [[ ${RUN} == "enkfgfs" ]]; then + export FHMAX=${FHMAX_ENKF_GFS:-${FHMAX_ENKF:-${FHMAX}}} +fi + +# gfs_physics_nml +export FHSWR=${FHSWR_ENKF:-${FHSWR:-3600.}} +export FHLWR=${FHLWR_ENKF:-${FHLWR:-3600.}} +export IEMS=${IEMS_ENKF:-${IEMS:-1}} +export ISOL=${ISOL_ENKF:-${ISOL:-2}} +export IAER=${IAER_ENKF:-${IAER:-111}} +export ICO2=${ICO2_ENKF:-${ICO2:-2}} +export cdmbgwd=${cdmbgwd_ENKF:-${cdmbgwd:-"3.5,0.25"}} +export dspheat=${dspheat_ENKF:-${dspheat:-".true."}} +export shal_cnv=${shal_cnv_ENKF:-${shal_cnv:-".true."}} +export FHZER=${FHZER_ENKF:-${FHZER:-6}} +export FHCYC=${FHCYC_ENKF:-${FHCYC:-6}} + +# Set PREFIX_ATMINC to r when recentering on +if [[ ${RECENTER_ENKF} = "YES" ]]; then + export PREFIX_ATMINC="r" +fi + +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +GDATE=$(${NDATE} -"${assim_freq}" "${PDY}${cyc}") +declare -x gPDY="${GDATE:0:8}" +declare -x gcyc="${GDATE:8:2}" + +################################################################################ +# Run forecast for ensemble member +rc=0 +for imem in $(seq "${ENSBEG}" "${ENSEND}"); do + + cd "${DATATOP}" + + ENSMEM=$(printf %03i "${imem}") + export ENSMEM + memchar="mem${ENSMEM}" + + echo "Processing MEMBER: ${ENSMEM}" + + ra=0 + + skip_mem="NO" + if [[ -f ${EFCSGRP}.fail ]]; then + set +e + memstat=$(grep "MEMBER ${ENSMEM}" "${EFCSGRP}.fail" | grep -c "PASS") + set_strict + [[ ${memstat} -eq 1 ]] && skip_mem="YES" + fi + + # Construct COM variables from templates (see config.com) + # Can't make these read-only because we are looping over members + MEMDIR="${memchar}" YMD=${PDY} HH=${cyc} generate_com -x COM_ATMOS_RESTART COM_ATMOS_INPUT COM_ATMOS_ANALYSIS \ + COM_ATMOS_HISTORY COM_ATMOS_MASTER COM_CONF + + MEMDIR="${memchar}" YMD="${gPDY}" HH="${gcyc}" generate_com -x COM_ATMOS_RESTART_PREV:COM_ATMOS_RESTART_TMPL + + if [[ ${DO_WAVE} == "YES" ]]; then + MEMDIR="${memchar}" YMD=${PDY} HH=${cyc} generate_com -x COM_WAVE_RESTART COM_WAVE_PREP COM_WAVE_HISTORY + MEMDIR="${memchar}" YMD="${gPDY}" HH="${gcyc}" generate_com -x COM_WAVE_RESTART_PREV:COM_WAVE_RESTART_TMPL + fi + + if [[ ${DO_OCN} == "YES" ]]; then + MEMDIR="${memchar}" YMD=${PDY} HH=${cyc} generate_com -x COM_MED_RESTART COM_OCEAN_RESTART \ + COM_OCEAN_INPUT COM_OCEAN_HISTORY COM_OCEAN_ANALYSIS + MEMDIR="${memchar}" YMD="${gPDY}" HH="${gcyc}" generate_com -x COM_OCEAN_RESTART_PREV:COM_OCEAN_RESTART_TMPL + fi + + if [[ ${DO_ICE} == "YES" ]]; then + MEMDIR="${memchar}" YMD=${PDY} HH=${cyc} generate_com -x COM_ICE_HISTORY COM_ICE_INPUT COM_ICE_RESTART + MEMDIR="${memchar}" YMD="${gPDY}" HH="${gcyc}" generate_com -x COM_ICE_RESTART_PREV:COM_ICE_RESTART_TMPL + fi + + if [[ ${DO_AERO} == "YES" ]]; then + MEMDIR="${memchar}" YMD=${PDY} HH=${cyc} generate_com -x COM_CHEM_HISTORY + fi + + + if [[ ${skip_mem} = "NO" ]]; then + + ra=0 + + export MEMBER=${imem} + export DATA="${DATATOP}/${memchar}" + if [[ -d ${DATA} ]]; then rm -rf "${DATA}"; fi + mkdir -p "${DATA}" + ${FORECASTSH} + ra=$? + + # Notify a member forecast failed and abort + if [[ ${ra} -ne 0 ]]; then + err_exit "FATAL ERROR: forecast of member ${ENSMEM} FAILED. Aborting job" + fi + + rc=$((rc+ra)) + + fi + + if [[ ${SENDDBN} = YES ]]; then + fhr=${FHOUT} + while [[ ${fhr} -le ${FHMAX} ]]; do + FH3=$(printf %03i "${fhr}") + if (( fhr % 3 == 0 )); then + "${DBNROOT}/bin/dbn_alert" MODEL GFS_ENKF "${job}" "${COM_ATMOS_HISTORY}/${RUN}.t${cyc}z.sfcf${FH3}.nc" + fi + fhr=$((fhr+FHOUT)) + done + fi + + cd "${DATATOP}" + + if [[ -s ${EFCSGRP} ]]; then + ${NCP} "${EFCSGRP}" log_old + fi + [[ -f log ]] && rm log + [[ -f log_new ]] && rm log_new + if [[ ${ra} -ne 0 ]]; then + echo "MEMBER ${ENSMEM} : FAIL" > log + else + echo "MEMBER ${ENSMEM} : PASS" > log + fi + if [[ -s log_old ]] ; then + cat log_old log > log_new + else + cat log > log_new + fi + ${NCP} log_new "${EFCSGRP}" + +done + +################################################################################ +# Echo status of ensemble group +cd "${DATATOP}" +echo "Status of ensemble members in group ${ENSGRP}:" +cat "${EFCSGRP}" +[[ -f ${EFCSGRP}.fail ]] && rm "${EFCSGRP}".fail + +################################################################################ +# If any members failed, error out +export err=${rc}; err_chk + +################################################################################ +# Postprocessing + +exit "${err}" diff --git a/scripts/exgdas_enkf_post.sh b/scripts/exgdas_enkf_post.sh new file mode 100755 index 0000000000..86ab9071a4 --- /dev/null +++ b/scripts/exgdas_enkf_post.sh @@ -0,0 +1,162 @@ +#! /usr/bin/env bash + +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exgdas_enkf_post.sh +# Script description: Global ensemble forecast post processing +# +# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 +# +# Abstract: This script post-processes global ensemble forecast output +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# +################################################################################ + +source "$HOMEgfs/ush/preamble.sh" + +# Directories. +pwd=$(pwd) + +# Utilities +NCP=${NCP:-"/bin/cp"} +NLN=${NLN:-"/bin/ln -sf"} + +APRUN_EPOS=${APRUN_EPOS:-${APRUN:-""}} +NTHREADS_EPOS=${NTHREADS_EPOS:-1} + +# Ops stuff +SENDDBN=${SENDDBN:-"NO"} + +# Fix files +LEVS=${LEVS:-64} +HYBENSMOOTH=${HYBENSMOOTH:-$FIXgsi/global_hybens_smoothinfo.l${LEVS}.txt} + +# Executables. +GETATMENSMEANEXEC=${GETATMENSMEANEXEC:-$HOMEgfs/exec/getsigensmeanp_smooth.x} +GETSFCENSMEANEXEC=${GETSFCENSMEANEXEC:-$HOMEgfs/exec/getsfcensmeanp.x} + +# Other variables. +PREFIX=${PREFIX:-""} +FHMIN=${FHMIN_EPOS:-3} +FHMAX=${FHMAX_EPOS:-9} +FHOUT=${FHOUT_EPOS:-3} + +if [[ $CDUMP == "gfs" ]]; then + NMEM_ENS=${NMEM_ENS_GFS:-${NMEM_ENS:-30}} +fi +NMEM_ENS=${NMEM_ENS:-80} +SMOOTH_ENKF=${SMOOTH_ENKF:-"NO"} +ENKF_SPREAD=${ENKF_SPREAD:-"NO"} + +################################################################################ +# Preprocessing +ENKF_SUFFIX="s" +[[ $SMOOTH_ENKF = "NO" ]] && ENKF_SUFFIX="" + +################################################################################ +# Copy executables to working directory +$NCP $GETSFCENSMEANEXEC $DATA +$NCP $GETATMENSMEANEXEC $DATA + +export OMP_NUM_THREADS=$NTHREADS_EPOS + +################################################################################ +# Forecast ensemble member files +for imem in $(seq 1 $NMEM_ENS); do + memchar="mem"$(printf %03i "${imem}") + MEMDIR=${memchar} YMD=${PDY} HH=${cyc} generate_com -x COM_ATMOS_HISTORY:COM_ATMOS_HISTORY_TMPL + + for fhr in $(seq $FHMIN $FHOUT $FHMAX); do + fhrchar=$(printf %03i $fhr) + ${NLN} "${COM_ATMOS_HISTORY}/${PREFIX}sfcf${fhrchar}.nc" "sfcf${fhrchar}_${memchar}" + ${NLN} "${COM_ATMOS_HISTORY}/${PREFIX}atmf${fhrchar}.nc" "atmf${fhrchar}_${memchar}" + done +done + +# Forecast ensemble mean and smoothed files +MEMDIR="ensstat" YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_HISTORY_STAT:COM_ATMOS_HISTORY_TMPL +if [[ ! -d "${COM_ATMOS_HISTORY_STAT}" ]]; then mkdir -p "${COM_ATMOS_HISTORY_STAT}"; fi + +for fhr in $(seq $FHMIN $FHOUT $FHMAX); do + fhrchar=$(printf %03i $fhr) + ${NLN} "${COM_ATMOS_HISTORY_STAT}/${PREFIX}sfcf${fhrchar}.ensmean.nc" "sfcf${fhrchar}.ensmean" + ${NLN} "${COM_ATMOS_HISTORY_STAT}/${PREFIX}atmf${fhrchar}.ensmean.nc" "atmf${fhrchar}.ensmean" + if [ $SMOOTH_ENKF = "YES" ]; then + for imem in $(seq 1 $NMEM_ENS); do + memchar="mem"$(printf %03i "${imem}") + MEMDIR="${memchar}" YMD=${PDY} HH=${cyc} generate_com -x COM_ATMOS_HISTORY + ${NLN} "${COM_ATMOS_HISTORY}/${PREFIX}atmf${fhrchar}${ENKF_SUFFIX}.nc" "atmf${fhrchar}${ENKF_SUFFIX}_${memchar}" + done + fi + [[ $ENKF_SPREAD = "YES" ]] && ${NLN} "${COM_ATMOS_HISTORY_STAT}/${PREFIX}atmf${fhrchar}.ensspread.nc" "atmf${fhrchar}.ensspread" +done + +################################################################################ +# Generate ensemble mean surface and atmospheric files + +[[ $SMOOTH_ENKF = "YES" ]] && $NCP $HYBENSMOOTH ./hybens_smoothinfo + +rc=0 +for fhr in $(seq $FHMIN $FHOUT $FHMAX); do + fhrchar=$(printf %03i $fhr) + + export pgm=$GETSFCENSMEANEXEC + . prep_step + + $APRUN_EPOS ${DATA}/$(basename $GETSFCENSMEANEXEC) ./ sfcf${fhrchar}.ensmean sfcf${fhrchar} $NMEM_ENS + ra=$? + rc=$((rc+ra)) + + export_pgm=$GETATMENSMEANEXEC + . prep_step + + if [ $ENKF_SPREAD = "YES" ]; then + $APRUN_EPOS ${DATA}/$(basename $GETATMENSMEANEXEC) ./ atmf${fhrchar}.ensmean atmf${fhrchar} $NMEM_ENS atmf${fhrchar}.ensspread + else + $APRUN_EPOS ${DATA}/$(basename $GETATMENSMEANEXEC) ./ atmf${fhrchar}.ensmean atmf${fhrchar} $NMEM_ENS + fi + ra=$? + rc=$((rc+ra)) +done +export err=$rc; err_chk + +################################################################################ +# If smoothing on but no smoothing output, copy smoothed ensemble atmospheric files +if [ $SMOOTH_ENKF = "YES" ]; then + for fhr in $(seq $FHMIN $FHOUT $FHMAX); do + fhrchar=$(printf %03i $fhr) + if [ ! -s atmf${fhrchar}${ENKF_SUFFIX}_mem001 ]; then + echo WARNING! no smoothed ensemble member for fhour = $fhrchar >&2 + for imem in $(seq 1 $NMEM_ENS); do + memchar="mem"$(printf %03i $imem) + ${NCP} "atmf${fhrchar}_${memchar}" "atmf${fhrchar}${ENKF_SUFFIX}_${memchar}" + done + fi + done +fi + +################################################################################ +# Send DBN alerts +if [ $SENDDBN = "YES" ]; then + + for fhr in $(seq $FHMIN $FHOUT $FHMAX); do + fhrchar=$(printf %03i $fhr) + if [ $(expr $fhr % 3) -eq 0 ]; then + if [ -s ./sfcf${fhrchar}.ensmean ]; then + ${DBNROOT}/bin/dbn_alert "MODEL" "GFS_ENKF" "${job}" "${COM_ATMOS_HISTORY_STAT}/${PREFIX}sfcf${fhrchar}.ensmean.nc" + fi + fi + done + +fi + +################################################################################ +# Postprocessing +cd $pwd + +exit $err diff --git a/scripts/exgdas_enkf_select_obs.sh b/scripts/exgdas_enkf_select_obs.sh new file mode 100755 index 0000000000..2ad624bcdb --- /dev/null +++ b/scripts/exgdas_enkf_select_obs.sh @@ -0,0 +1,113 @@ +#! /usr/bin/env bash + +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exgdas_enkf_select_obs.sh +# Script description: Compute global_gsi innovations +# +# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 +# +# Abstract: This script computes global_gsi innovations +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# +################################################################################ + +source "$HOMEgfs/ush/preamble.sh" + +# Directories. +pwd=$(pwd) + +# Utilities +export NLN=${NLN:-"/bin/ln -sf"} + +# Scripts. +ANALYSISSH=${ANALYSISSH:-$HOMEgfs/scripts/exglobal_atmos_analysis.sh} + +# Select obs +export RUN_SELECT=${RUN_SELECT:-"YES"} +export USE_SELECT=${USE_SELECT:-"NO"} + +# Observation Operator GSI namelist initialization +SETUP_INVOBS=${SETUP_INVOBS:-""} +GRIDOPTS_INVOBS=${GRIDOPTS_INVOBS:-""} +BKGVERR_INVOBS=${BKGVERR_INVOBS:-""} +ANBKGERR_INVOBS=${ANBKGERR_INVOBS:-""} +JCOPTS_INVOBS=${JCOPTS_INVOBS:-""} +STRONGOPTS_INVOBS=${STRONGOPTS_INVOBS:-""} +OBSQC_INVOBS=${OBSQC_INVOBS:-""} +OBSINPUT_INVOBS=${OBSINPUT_INVOBS:-""} +SUPERRAD_INVOBS=${SUPERRAD_INVOBS:-""} +SINGLEOB_INVOBS=${SINGLEOB_INVOBS:-""} +LAGDATA_INVOBS=${LAGDATA_INVOBS:-""} +HYBRID_ENSEMBLE_INVOBS=${HYBRID_ENSEMBLE_INVOBS:-""} +RAPIDREFRESH_CLDSURF_INVOBS=${RAPIDREFRESH_CLDSURF_INVOBS:-""} +CHEM_INVOBS=${CHEM_INVOBS:-""} + +################################################################################ +# Preprocessing +mkdata=NO +if [ ! -d $DATA ]; then + mkdata=YES + mkdir -p $DATA +fi +cd $DATA || exit 8 + +################################################################################ +# ObsInput file from ensemble mean +rm -f obs*input* +$NLN $SELECT_OBS obsinput.tar + +# Whether to save or skip obs +if [ $RUN_SELECT = "YES" -a $USE_SELECT = "NO" ]; then + lread_obs_save=".true." + lread_obs_skip=".false." +elif [ $RUN_SELECT = "NO" -a $USE_SELECT = "YES" ]; then + lread_obs_save=".false." + lread_obs_skip=".true." +fi + +################################################################################ +# Innovation Specific setup for ANALYSISSH +export DIAG_SUFFIX=${DIAG_SUFFIX:-""} +export DIAG_COMPRESS=${DIAG_COMPRESS:-"NO"} +export DIAG_TARBALL=${DIAG_TARBALL:-"YES"} +export DOHYBVAR="NO" +export DO_CALC_INCREMENT="NO" +export DO_CALC_ANALYSIS="NO" +export USE_CORRELATED_OBERRS="NO" +export write_fv3_increment=".false." + +# GSI Namelist options for observation operator only +export SETUP="miter=0,niter=1,lread_obs_save=$lread_obs_save,lread_obs_skip=$lread_obs_skip,lwrite_predterms=.true.,lwrite_peakwt=.true.,reduce_diag=.true.,$SETUP_INVOBS" +export GRIDOPTS="$GRIDOPTS_INVOBS" +export BKGVERR="bkgv_flowdep=.false.,$BKGVERR_INVOBS" +export ANBKGERR="$ANBKGERR_INVOBS" +export JCOPTS="$JCOPTS_INVOBS" +export STRONGOPTS="tlnmc_option=0,nstrong=0,nvmodes_keep=0,baldiag_full=.false.,baldiag_inc=.false.,$STRONGOPTS_INVOBS" +export OBSQC="$OBSQC_INVOBS" +export OBSINPUT="$OBSINPUT_INVOBS" +export SUPERRAD="$SUPERRAD_INVOBS" +export SINGLEOB="$SINGLEOB_INVOBS" +export LAGDATA="$LAGDATA_INVOBS" +export HYBRID_ENSEMBLE="" +export RAPIDREFRESH_CLDSURF="$RAPIDREFRESH_CLDSURF_INVOBS" +export CHEM="$CHEM_INVOBS" + +################################################################################ +# Execute GSI as a forward operator + +$ANALYSISSH +export err=$?; err_chk + +################################################################################ +# Postprocessing +cd $pwd +[[ $mkdata = "YES" ]] && rm -rf $DATA + + +exit $err diff --git a/scripts/exgdas_enkf_sfc.sh b/scripts/exgdas_enkf_sfc.sh new file mode 100755 index 0000000000..5bbe7a460f --- /dev/null +++ b/scripts/exgdas_enkf_sfc.sh @@ -0,0 +1,210 @@ +#! /usr/bin/env bash + +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exgdas_enkf_sfc.sh +# Script description: generate ensemble surface analyses on tiles +# +# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 +# +# Abstract: This script generates ensemble surface analyses on tiles +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# +################################################################################ + +source "$HOMEgfs/ush/preamble.sh" + +# Directories. +pwd=$(pwd) + +# Base variables +DONST=${DONST:-"NO"} +DOSFCANL_ENKF=${DOSFCANL_ENKF:-"YES"} +export CASE=${CASE:-384} +ntiles=${ntiles:-6} + +# Utilities +NCP=${NCP:-"/bin/cp -p"} +NLN=${NLN:-"/bin/ln -sf"} +NCLEN=${NCLEN:-$HOMEgfs/ush/getncdimlen} + +# Scripts + +# Executables. + +# Files. +OPREFIX=${OPREFIX:-""} +OSUFFIX=${OSUFFIX:-""} +APREFIX=${APREFIX:-""} +APREFIX_ENS=${APREFIX_ENS:-$APREFIX} +GPREFIX=${GPREFIX:-""} +GPREFIX_ENS=${GPREFIX_ENS:-${GPREFIX}} + +# Variables +NMEM_ENS=${NMEM_ENS:-80} +DOIAU=${DOIAU_ENKF:-"NO"} + +# Global_cycle stuff +CYCLESH=${CYCLESH:-$HOMEgfs/ush/global_cycle.sh} +export CYCLEXEC=${CYCLEXEC:-$HOMEgfs/exec/global_cycle} +APRUN_CYCLE=${APRUN_CYCLE:-${APRUN:-""}} +NTHREADS_CYCLE=${NTHREADS_CYCLE:-${NTHREADS:-1}} +export FIXfv3=${FIXfv3:-$HOMEgfs/fix/orog} +export FIXgsm=${FIXgsm:-$HOMEgfs/fix/am} +export CYCLVARS=${CYCLVARS:-"FSNOL=-2.,FSNOS=99999.,"} +export FHOUR=${FHOUR:-0} +export DELTSFC=${DELTSFC:-6} + +APRUN_ESFC=${APRUN_ESFC:-${APRUN:-""}} +NTHREADS_ESFC=${NTHREADS_ESFC:-${NTHREADS:-1}} + + +################################################################################ +# Preprocessing +mkdata=NO +if [ ! -d $DATA ]; then + mkdata=YES + mkdir -p $DATA +fi +cd $DATA || exit 99 + + +################################################################################ +# Update surface fields in the FV3 restart's using global_cycle. + +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +BDATE=$(${NDATE} -3 "${PDY}${cyc}") +bPDY=${BDATE:0:8} +bcyc=${BDATE:8:2} + +# Get dimension information based on CASE +res=${CASE:2:} +JCAP_CASE=$((res*2-2)) +LATB_CASE=$((res*2)) +LONB_CASE=$((res*4)) + +# Global cycle requires these files +export FNTSFA=${FNTSFA:-' '} +export FNACNA=${FNACNA:-${COM_OBS}/${OPREFIX}seaice.5min.blend.grb} +export FNSNOA=${FNSNOA:-${COM_OBS}/${OPREFIX}snogrb_t${JCAP_CASE}.${LONB_CASE}.${LATB_CASE}} +[[ ! -f $FNSNOA ]] && export FNSNOA="${COM_OBS}/${OPREFIX}snogrb_t1534.3072.1536" +FNSNOG=${FNSNOG:-${COM_OBS_PREV}/${GPREFIX}snogrb_t${JCAP_CASE}.${LONB_CASE}.${LATB_CASE}} +[[ ! -f $FNSNOG ]] && FNSNOG="${COM_OBS_PREV}/${GPREFIX}snogrb_t1534.3072.1536" + +# Set CYCLVARS by checking grib date of current snogrb vs that of prev cycle +if [ ${RUN_GETGES:-"NO"} = "YES" ]; then + # Ignore possible spelling error (nothing is misspelled) + # shellcheck disable=SC2153 + snoprv=$($GETGESSH -q -t snogrb_$JCAP_CASE -e $gesenvir -n $GDUMP -v $GDATE) +else + snoprv=${snoprv:-$FNSNOG} +fi + +if [ $($WGRIB -4yr $FNSNOA 2>/dev/null | grep -i snowc | awk -F: '{print $3}' | awk -F= '{print $2}') -le \ + $($WGRIB -4yr $snoprv 2>/dev/null | grep -i snowc | awk -F: '{print $3}' | awk -F= '{print $2}') ] ; then + export FNSNOA=" " + export CYCLVARS="FSNOL=99999.,FSNOS=99999.," +else + export SNOW_NUDGE_COEFF=${SNOW_NUDGE_COEFF:-0.} + export CYCLVARS="FSNOL=${SNOW_NUDGE_COEFF},$CYCLVARS" +fi + +if [ $DONST = "YES" ]; then + export NST_FILE=${NST_FILE:-${COM_ATMOS_ANALYSIS_DET}/${APREFIX}dtfanl.nc} +else + export NST_FILE="NULL" +fi + +export APRUNCY=${APRUN_CYCLE:-$APRUN_ESFC} +export OMP_NUM_THREADS_CY=${NTHREADS_CYCLE:-$NTHREADS_ESFC} +export MAX_TASKS_CY=$NMEM_ENS + +if [ $DOIAU = "YES" ]; then + # Update surface restarts at beginning of window when IAU is ON + # For now assume/hold dtfanl.nc is valid at beginning of window. + + for n in $(seq 1 $ntiles); do + + export TILE_NUM=$n + + for imem in $(seq 1 $NMEM_ENS); do + + cmem=$(printf %03i $imem) + memchar="mem$cmem" + + MEMDIR=${memchar} YMD=${PDY} HH=${cyc} generate_com \ + COM_ATMOS_RESTART_MEM:COM_ATMOS_RESTART_TMPL + + MEMDIR=${memchar} RUN="enkfgdas" YMD=${gPDY} HH=${gcyc} generate_com \ + COM_ATMOS_RESTART_MEM_PREV:COM_ATMOS_RESTART_TMPL + + [[ ${TILE_NUM} -eq 1 ]] && mkdir -p "${COM_ATMOS_RESTART_MEM}" + + ${NCP} "${COM_ATMOS_RESTART_MEM_PREV}/${bPDY}.${bcyc}0000.sfc_data.tile${n}.nc" \ + "${COM_ATMOS_RESTART_MEM}/${bPDY}.${bcyc}0000.sfcanl_data.tile${n}.nc" + ${NLN} "${COM_ATMOS_RESTART_MEM_PREV}/${bPDY}.${bcyc}0000.sfc_data.tile${n}.nc" \ + "${DATA}/fnbgsi.${cmem}" + ${NLN} "${COM_ATMOS_RESTART_MEM}/${bPDY}.${bcyc}0000.sfcanl_data.tile${n}.nc" \ + "${DATA}/fnbgso.${cmem}" + ${NLN} "${FIXfv3}/${CASE}/${CASE}_grid.tile${n}.nc" "${DATA}/fngrid.${cmem}" + ${NLN} "${FIXfv3}/${CASE}/${CASE}_oro_data.tile${n}.nc" "${DATA}/fnorog.${cmem}" + + done + + CDATE="${PDY}${cyc}" ${CYCLESH} + export err=$?; err_chk + + done + +fi + +if [ $DOSFCANL_ENKF = "YES" ]; then + for n in $(seq 1 $ntiles); do + + export TILE_NUM=$n + + for imem in $(seq 1 $NMEM_ENS); do + + cmem=$(printf %03i $imem) + memchar="mem$cmem" + + MEMDIR=${memchar} YMD=${PDY} HH=${cyc} generate_com \ + COM_ATMOS_RESTART_MEM:COM_ATMOS_RESTART_TMPL + + RUN="${GDUMP_ENS}" MEMDIR=${memchar} YMD=${gPDY} HH=${gcyc} generate_com \ + COM_ATMOS_RESTART_MEM_PREV:COM_ATMOS_RESTART_TMPL + + [[ ${TILE_NUM} -eq 1 ]] && mkdir -p "${COM_ATMOS_RESTART_MEM}" + + ${NCP} "${COM_ATMOS_RESTART_MEM_PREV}/${PDY}.${cyc}0000.sfc_data.tile${n}.nc" \ + "${COM_ATMOS_RESTART_MEM}/${PDY}.${cyc}0000.sfcanl_data.tile${n}.nc" + ${NLN} "${COM_ATMOS_RESTART_MEM_PREV}/${PDY}.${cyc}0000.sfc_data.tile${n}.nc" \ + "${DATA}/fnbgsi.${cmem}" + ${NLN} "${COM_ATMOS_RESTART_MEM}/${PDY}.${cyc}0000.sfcanl_data.tile${n}.nc" \ + "${DATA}/fnbgso.${cmem}" + ${NLN} "${FIXfv3}/${CASE}/${CASE}_grid.tile${n}.nc" "${DATA}/fngrid.${cmem}" + ${NLN} "${FIXfv3}/${CASE}/${CASE}_oro_data.tile${n}.nc" "${DATA}/fnorog.${cmem}" + + done + + CDATE="${PDY}${cyc}" ${CYCLESH} + export err=$?; err_chk + + done +fi + +################################################################################ + +################################################################################ +# Postprocessing +cd $pwd +[[ $mkdata = "YES" ]] && rm -rf $DATA + + +exit $err diff --git a/scripts/exgdas_enkf_update.sh b/scripts/exgdas_enkf_update.sh new file mode 100755 index 0000000000..1f11026ac4 --- /dev/null +++ b/scripts/exgdas_enkf_update.sh @@ -0,0 +1,405 @@ +#! /usr/bin/env bash + +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exgdas_enkf_update.sh +# Script description: Make global_enkf update +# +# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 +# +# Abstract: This script runs the global_enkf update +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# +################################################################################ + +source "$HOMEgfs/ush/preamble.sh" + +# Directories. +pwd=$(pwd) + +# Utilities +NCP=${NCP:-"/bin/cp -p"} +NLN=${NLN:-"/bin/ln -sf"} +NCLEN=${NCLEN:-$HOMEgfs/ush/getncdimlen} +USE_CFP=${USE_CFP:-"NO"} +CFP_MP=${CFP_MP:-"NO"} +nm="" +if [ $CFP_MP = "YES" ]; then + nm=0 +fi +APRUNCFP=${APRUNCFP:-""} +APRUN_ENKF=${APRUN_ENKF:-${APRUN:-""}} +NTHREADS_ENKF=${NTHREADS_ENKF:-${NTHREADS:-1}} + +# Executables +ENKFEXEC=${ENKFEXEC:-$HOMEgfs/exec/enkf.x} + +# Cycling and forecast hour specific parameters +CDATE=${CDATE:-"2001010100"} + +# Filenames. +GPREFIX=${GPREFIX:-""} +APREFIX=${APREFIX:-""} + +SMOOTH_ENKF=${SMOOTH_ENKF:-"YES"} + +GBIASe=${GBIASe:-${APREFIX}abias_int.ensmean} +CNVSTAT=${CNVSTAT:-${APREFIX}cnvstat} +OZNSTAT=${OZNSTAT:-${APREFIX}oznstat} +RADSTAT=${RADSTAT:-${APREFIX}radstat} +ENKFSTAT=${ENKFSTAT:-${APREFIX}enkfstat} + +# Namelist parameters +USE_CORRELATED_OBERRS=${USE_CORRELATED_OBERRS:-"NO"} +NMEM_ENS=${NMEM_ENS:-80} +NAM_ENKF=${NAM_ENKF:-""} +SATOBS_ENKF=${SATOBS_ENKF:-""} +OZOBS_ENKF=${OZOBS_ENKF:-""} +use_correlated_oberrs=${use_correlated_oberrs:-".false."} +if [ $USE_CORRELATED_OBERRS == "YES" ]; then + use_correlated_oberrs=".true." +fi +imp_physics=${imp_physics:-"99"} +lupp=${lupp:-".true."} +corrlength=${corrlength:-1250} +lnsigcutoff=${lnsigcutoff:-2.5} +analpertwt=${analpertwt:-0.85} +readin_localization_enkf=${readin_localization_enkf:-".true."} +reducedgrid=${reducedgrid:-".true."} +letkf_flag=${letkf_flag:-".false."} +getkf=${getkf:-".false."} +denkf=${denkf:-".false."} +nobsl_max=${nobsl_max:-10000} +lobsdiag_forenkf=${lobsdiag_forenkf:-".false."} +write_spread_diag=${write_spread_diag:-".false."} +cnvw_option=${cnvw_option:-".false."} +netcdf_diag=${netcdf_diag:-".true."} +modelspace_vloc=${modelspace_vloc:-".false."} # if true, 'vlocal_eig.dat' is needed +IAUFHRS_ENKF=${IAUFHRS_ENKF:-6} +if [ $RUN = "enkfgfs" ]; then + DO_CALC_INCREMENT=${DO_CALC_INCREMENT_ENKF_GFS:-"NO"} +else + DO_CALC_INCREMENT=${DO_CALC_INCREMENT:-"NO"} +fi +INCREMENTS_TO_ZERO=${INCREMENTS_TO_ZERO:-"'NONE'"} + +################################################################################ + +ATMGES_ENSMEAN="${COM_ATMOS_HISTORY_STAT_PREV}/${GPREFIX}atmf006.ensmean.nc" +LONB_ENKF=${LONB_ENKF:-$($NCLEN $ATMGES_ENSMEAN grid_xt)} # get LONB_ENKF +LATB_ENKF=${LATB_ENKF:-$($NCLEN $ATMGES_ENSMEAN grid_yt)} # get LATB_ENFK +LEVS_ENKF=${LEVS_ENKF:-$($NCLEN $ATMGES_ENSMEAN pfull)} # get LEVS_ENFK +use_gfs_ncio=".true." +use_gfs_nemsio=".false." +paranc=${paranc:-".true."} +WRITE_INCR_ZERO="incvars_to_zero= $INCREMENTS_TO_ZERO," +if [ $DO_CALC_INCREMENT = "YES" ]; then + write_fv3_incr=".false." +else + write_fv3_incr=".true." +fi +LATA_ENKF=${LATA_ENKF:-$LATB_ENKF} +LONA_ENKF=${LONA_ENKF:-$LONB_ENKF} +SATANGL=${SATANGL:-${FIXgsi}/global_satangbias.txt} +SATINFO=${SATINFO:-${FIXgsi}/global_satinfo.txt} +CONVINFO=${CONVINFO:-${FIXgsi}/global_convinfo.txt} +OZINFO=${OZINFO:-${FIXgsi}/global_ozinfo.txt} +SCANINFO=${SCANINFO:-${FIXgsi}/global_scaninfo.txt} +HYBENSINFO=${HYBENSINFO:-${FIXgsi}/global_hybens_info.l${LEVS_ENKF}.txt} +ANAVINFO=${ANAVINFO:-${FIXgsi}/global_anavinfo.l${LEVS_ENKF}.txt} +VLOCALEIG=${VLOCALEIG:-${FIXgsi}/vlocal_eig_l${LEVS_ENKF}.dat} +ENKF_SUFFIX="s" +[[ $SMOOTH_ENKF = "NO" ]] && ENKF_SUFFIX="" + +################################################################################ +# Preprocessing +mkdata=NO +if [ ! -d $DATA ]; then + mkdata=YES + mkdir -p $DATA +fi +cd $DATA || exit 99 + +################################################################################ +# Fixed files +$NLN $SATANGL satbias_angle +$NLN $SATINFO satinfo +$NLN $SCANINFO scaninfo +$NLN $CONVINFO convinfo +$NLN $OZINFO ozinfo +$NLN $HYBENSINFO hybens_info +$NLN $ANAVINFO anavinfo +$NLN $VLOCALEIG vlocal_eig.dat + +# Bias correction coefficients based on the ensemble mean +${NLN} "${COM_ATMOS_ANALYSIS_STAT}/${GBIASe}" "satbias_in" + +################################################################################ + +if [ $USE_CFP = "YES" ]; then + [[ -f $DATA/untar.sh ]] && rm $DATA/untar.sh + [[ -f $DATA/mp_untar.sh ]] && rm $DATA/mp_untar.sh + cat > $DATA/untar.sh << EOFuntar +#!/bin/sh +memchar=\$1 +COM_ATMOS_ANALYSIS=\$2 +flist="$CNVSTAT $OZNSTAT $RADSTAT" +for ftype in \$flist; do + if [ \$memchar = "ensmean" ]; then + fname=\${COM_ATMOS_ANALYSIS}/\${ftype}.ensmean + else + fname=\${COM_ATMOS_ANALYSIS}/\${ftype} + fi + tar -xvf \$fname +done +EOFuntar + chmod 755 $DATA/untar.sh +fi + +################################################################################ +# Ensemble guess, observational data and analyses/increments + +flist="$CNVSTAT $OZNSTAT $RADSTAT" +if [ $USE_CFP = "YES" ]; then + echo "${nm} ${DATA}/untar.sh ensmean ${COM_ATMOS_ANALYSIS_STAT}" | tee -a "${DATA}/mp_untar.sh" + if [ ${CFP_MP:-"NO"} = "YES" ]; then + nm=$((nm+1)) + fi +else + for ftype in $flist; do + fname="${COM_ATMOS_ANALYSIS_STAT}/${ftype}.ensmean" + tar -xvf $fname + done +fi +nfhrs=$(echo $IAUFHRS_ENKF | sed 's/,/ /g') +for imem in $(seq 1 $NMEM_ENS); do + memchar="mem"$(printf %03i $imem) + + MEMDIR=${memchar} RUN=${GDUMP_ENS} YMD=${gPDY} HH=${gcyc} generate_com -x \ + COM_ATMOS_HISTORY_MEM_PREV:COM_ATMOS_HISTORY_TMPL + + MEMDIR=${memchar} YMD=${PDY} HH=${cyc} generate_com -x \ + COM_ATMOS_ANALYSIS_MEM:COM_ATMOS_ANALYSIS_TMPL + + if [ $lobsdiag_forenkf = ".false." ]; then + if [ $USE_CFP = "YES" ]; then + echo "${nm} ${DATA}/untar.sh ${memchar} ${COM_ATMOS_ANALYSIS_MEM}" | tee -a "${DATA}/mp_untar.sh" + if [ ${CFP_MP:-"NO"} = "YES" ]; then + nm=$((nm+1)) + fi + else + for ftype in $flist; do + fname="${COM_ATMOS_ANALYSIS_MEM}/${ftype}" + tar -xvf $fname + done + fi + fi + mkdir -p "${COM_ATMOS_ANALYSIS_MEM}" + for FHR in $nfhrs; do + ${NLN} "${COM_ATMOS_HISTORY_MEM_PREV}/${GPREFIX}atmf00${FHR}${ENKF_SUFFIX}.nc" \ + "sfg_${PDY}${cyc}_fhr0${FHR}_${memchar}" + if [ $cnvw_option = ".true." ]; then + ${NLN} "${COM_ATMOS_HISTORY_MEM_PREV}/${GPREFIX}sfcf00${FHR}.nc" \ + "sfgsfc_${PDY}${cyc}_fhr0${FHR}_${memchar}" + fi + if [ $FHR -eq 6 ]; then + if [ $DO_CALC_INCREMENT = "YES" ]; then + ${NLN} "${COM_ATMOS_ANALYSIS_MEM}/${APREFIX}atmanl.nc" \ + "sanl_${PDY}${cyc}_fhr0${FHR}_${memchar}" + else + ${NLN} "${COM_ATMOS_ANALYSIS_MEM}/${APREFIX}atminc.nc" \ + "incr_${PDY}${cyc}_fhr0${FHR}_${memchar}" + fi + else + if [ $DO_CALC_INCREMENT = "YES" ]; then + ${NLN} "${COM_ATMOS_ANALYSIS_MEM}/${APREFIX}atma00${FHR}.nc" \ + "sanl_${PDY}${cyc}_fhr0${FHR}_${memchar}" + else + ${NLN} "${COM_ATMOS_ANALYSIS_MEM}/${APREFIX}atmi00${FHR}.nc" \ + "incr_${PDY}${cyc}_fhr0${FHR}_${memchar}" + fi + fi + done +done + +# Ensemble mean guess +for FHR in $nfhrs; do + + ${NLN} "${COM_ATMOS_HISTORY_STAT_PREV}/${GPREFIX}atmf00${FHR}.ensmean.nc" \ + "sfg_${PDY}${cyc}_fhr0${FHR}_ensmean" + if [ $cnvw_option = ".true." ]; then + ${NLN} "${COM_ATMOS_HISTORY_STAT_PREV}/${GPREFIX}sfcf00${FHR}.ensmean.nc" \ + "sfgsfc_${PDY}${cyc}_fhr0${FHR}_ensmean" + fi +done + +if [ $USE_CFP = "YES" ]; then + chmod 755 $DATA/mp_untar.sh + ncmd=$(cat $DATA/mp_untar.sh | wc -l) + if [ $ncmd -gt 0 ]; then + ncmd_max=$((ncmd < npe_node_max ? ncmd : npe_node_max)) + APRUNCFP=$(eval echo $APRUNCFP) + $APRUNCFP $DATA/mp_untar.sh + export err=$?; err_chk + fi +fi + +################################################################################ +# Create global_enkf namelist +cat > enkf.nml << EOFnml +&nam_enkf + datestring="${PDY}${cyc}",datapath="$DATA/", + analpertwtnh=${analpertwt},analpertwtsh=${analpertwt},analpertwttr=${analpertwt}, + covinflatemax=1.e2,covinflatemin=1,pseudo_rh=.false.,iassim_order=0, + corrlengthnh=${corrlength},corrlengthsh=${corrlength},corrlengthtr=${corrlength}, + lnsigcutoffnh=${lnsigcutoff},lnsigcutoffsh=${lnsigcutoff},lnsigcutofftr=${lnsigcutoff}, + lnsigcutoffpsnh=${lnsigcutoff},lnsigcutoffpssh=${lnsigcutoff},lnsigcutoffpstr=${lnsigcutoff}, + lnsigcutoffsatnh=${lnsigcutoff},lnsigcutoffsatsh=${lnsigcutoff},lnsigcutoffsattr=${lnsigcutoff}, + obtimelnh=1.e30,obtimelsh=1.e30,obtimeltr=1.e30, + saterrfact=1.0,numiter=0, + sprd_tol=1.e30,paoverpb_thresh=0.98, + nlons=$LONA_ENKF,nlats=$LATA_ENKF,nlevs=$LEVS_ENKF,nanals=$NMEM_ENS, + deterministic=.true.,sortinc=.true.,lupd_satbiasc=.false., + reducedgrid=${reducedgrid},readin_localization=${readin_localization_enkf}., + use_gfs_nemsio=${use_gfs_nemsio},use_gfs_ncio=${use_gfs_ncio},imp_physics=$imp_physics,lupp=$lupp, + univaroz=.false.,adp_anglebc=.true.,angord=4,use_edges=.false.,emiss_bc=.true., + letkf_flag=${letkf_flag},nobsl_max=${nobsl_max},denkf=${denkf},getkf=${getkf}., + nhr_anal=${IAUFHRS_ENKF},nhr_state=${IAUFHRS_ENKF}, + lobsdiag_forenkf=$lobsdiag_forenkf, + write_spread_diag=$write_spread_diag, + modelspace_vloc=$modelspace_vloc, + use_correlated_oberrs=${use_correlated_oberrs}, + netcdf_diag=$netcdf_diag,cnvw_option=$cnvw_option, + paranc=$paranc,write_fv3_incr=$write_fv3_incr, + $WRITE_INCR_ZERO + $NAM_ENKF +/ +&satobs_enkf + sattypes_rad(1) = 'amsua_n15', dsis(1) = 'amsua_n15', + sattypes_rad(2) = 'amsua_n18', dsis(2) = 'amsua_n18', + sattypes_rad(3) = 'amsua_n19', dsis(3) = 'amsua_n19', + sattypes_rad(4) = 'amsub_n16', dsis(4) = 'amsub_n16', + sattypes_rad(5) = 'amsub_n17', dsis(5) = 'amsub_n17', + sattypes_rad(6) = 'amsua_aqua', dsis(6) = 'amsua_aqua', + sattypes_rad(7) = 'amsua_metop-a', dsis(7) = 'amsua_metop-a', + sattypes_rad(8) = 'airs_aqua', dsis(8) = 'airs_aqua', + sattypes_rad(9) = 'hirs3_n17', dsis(9) = 'hirs3_n17', + sattypes_rad(10)= 'hirs4_n19', dsis(10)= 'hirs4_n19', + sattypes_rad(11)= 'hirs4_metop-a', dsis(11)= 'hirs4_metop-a', + sattypes_rad(12)= 'mhs_n18', dsis(12)= 'mhs_n18', + sattypes_rad(13)= 'mhs_n19', dsis(13)= 'mhs_n19', + sattypes_rad(14)= 'mhs_metop-a', dsis(14)= 'mhs_metop-a', + sattypes_rad(15)= 'goes_img_g11', dsis(15)= 'imgr_g11', + sattypes_rad(16)= 'goes_img_g12', dsis(16)= 'imgr_g12', + sattypes_rad(17)= 'goes_img_g13', dsis(17)= 'imgr_g13', + sattypes_rad(18)= 'goes_img_g14', dsis(18)= 'imgr_g14', + sattypes_rad(19)= 'goes_img_g15', dsis(19)= 'imgr_g15', + sattypes_rad(20)= 'avhrr_n18', dsis(20)= 'avhrr3_n18', + sattypes_rad(21)= 'avhrr_metop-a', dsis(21)= 'avhrr3_metop-a', + sattypes_rad(22)= 'avhrr_n19', dsis(22)= 'avhrr3_n19', + sattypes_rad(23)= 'amsre_aqua', dsis(23)= 'amsre_aqua', + sattypes_rad(24)= 'ssmis_f16', dsis(24)= 'ssmis_f16', + sattypes_rad(25)= 'ssmis_f17', dsis(25)= 'ssmis_f17', + sattypes_rad(26)= 'ssmis_f18', dsis(26)= 'ssmis_f18', + sattypes_rad(27)= 'ssmis_f19', dsis(27)= 'ssmis_f19', + sattypes_rad(28)= 'ssmis_f20', dsis(28)= 'ssmis_f20', + sattypes_rad(29)= 'sndrd1_g11', dsis(29)= 'sndrD1_g11', + sattypes_rad(30)= 'sndrd2_g11', dsis(30)= 'sndrD2_g11', + sattypes_rad(31)= 'sndrd3_g11', dsis(31)= 'sndrD3_g11', + sattypes_rad(32)= 'sndrd4_g11', dsis(32)= 'sndrD4_g11', + sattypes_rad(33)= 'sndrd1_g12', dsis(33)= 'sndrD1_g12', + sattypes_rad(34)= 'sndrd2_g12', dsis(34)= 'sndrD2_g12', + sattypes_rad(35)= 'sndrd3_g12', dsis(35)= 'sndrD3_g12', + sattypes_rad(36)= 'sndrd4_g12', dsis(36)= 'sndrD4_g12', + sattypes_rad(37)= 'sndrd1_g13', dsis(37)= 'sndrD1_g13', + sattypes_rad(38)= 'sndrd2_g13', dsis(38)= 'sndrD2_g13', + sattypes_rad(39)= 'sndrd3_g13', dsis(39)= 'sndrD3_g13', + sattypes_rad(40)= 'sndrd4_g13', dsis(40)= 'sndrD4_g13', + sattypes_rad(41)= 'sndrd1_g14', dsis(41)= 'sndrD1_g14', + sattypes_rad(42)= 'sndrd2_g14', dsis(42)= 'sndrD2_g14', + sattypes_rad(43)= 'sndrd3_g14', dsis(43)= 'sndrD3_g14', + sattypes_rad(44)= 'sndrd4_g14', dsis(44)= 'sndrD4_g14', + sattypes_rad(45)= 'sndrd1_g15', dsis(45)= 'sndrD1_g15', + sattypes_rad(46)= 'sndrd2_g15', dsis(46)= 'sndrD2_g15', + sattypes_rad(47)= 'sndrd3_g15', dsis(47)= 'sndrD3_g15', + sattypes_rad(48)= 'sndrd4_g15', dsis(48)= 'sndrD4_g15', + sattypes_rad(49)= 'iasi_metop-a', dsis(49)= 'iasi_metop-a', + sattypes_rad(50)= 'seviri_m08', dsis(50)= 'seviri_m08', + sattypes_rad(51)= 'seviri_m09', dsis(51)= 'seviri_m09', + sattypes_rad(52)= 'seviri_m10', dsis(52)= 'seviri_m10', + sattypes_rad(53)= 'seviri_m11', dsis(53)= 'seviri_m11', + sattypes_rad(54)= 'amsua_metop-b', dsis(54)= 'amsua_metop-b', + sattypes_rad(55)= 'hirs4_metop-b', dsis(55)= 'hirs4_metop-b', + sattypes_rad(56)= 'mhs_metop-b', dsis(56)= 'mhs_metop-b', + sattypes_rad(57)= 'iasi_metop-b', dsis(57)= 'iasi_metop-b', + sattypes_rad(58)= 'avhrr_metop-b', dsis(58)= 'avhrr3_metop-b', + sattypes_rad(59)= 'atms_npp', dsis(59)= 'atms_npp', + sattypes_rad(60)= 'atms_n20', dsis(60)= 'atms_n20', + sattypes_rad(61)= 'cris_npp', dsis(61)= 'cris_npp', + sattypes_rad(62)= 'cris-fsr_npp', dsis(62)= 'cris-fsr_npp', + sattypes_rad(63)= 'cris-fsr_n20', dsis(63)= 'cris-fsr_n20', + sattypes_rad(64)= 'gmi_gpm', dsis(64)= 'gmi_gpm', + sattypes_rad(65)= 'saphir_meghat', dsis(65)= 'saphir_meghat', + sattypes_rad(66)= 'amsua_metop-c', dsis(66)= 'amsua_metop-c', + sattypes_rad(67)= 'mhs_metop-c', dsis(67)= 'mhs_metop-c', + sattypes_rad(68)= 'ahi_himawari8', dsis(68)= 'ahi_himawari8', + sattypes_rad(69)= 'abi_g16', dsis(69)= 'abi_g16', + sattypes_rad(70)= 'abi_g17', dsis(70)= 'abi_g17', + sattypes_rad(71)= 'iasi_metop-c', dsis(71)= 'iasi_metop-c', + sattypes_rad(72)= 'viirs-m_npp', dsis(72)= 'viirs-m_npp', + sattypes_rad(73)= 'viirs-m_j1', dsis(73)= 'viirs-m_j1', + sattypes_rad(74)= 'avhrr_metop-c', dsis(74)= 'avhrr3_metop-c', + sattypes_rad(75)= 'abi_g18', dsis(75)= 'abi_g18', + sattypes_rad(76)= 'ahi_himawari9', dsis(76)= 'ahi_himawari9', + sattypes_rad(77)= 'viirs-m_j2', dsis(77)= 'viirs-m_j2', + sattypes_rad(78)= 'atms_n21', dsis(78)= 'atms_n21', + sattypes_rad(79)= 'cris-fsr_n21', dsis(79)= 'cris-fsr_n21', + $SATOBS_ENKF +/ +&ozobs_enkf + sattypes_oz(1) = 'sbuv2_n16', + sattypes_oz(2) = 'sbuv2_n17', + sattypes_oz(3) = 'sbuv2_n18', + sattypes_oz(4) = 'sbuv2_n19', + sattypes_oz(5) = 'omi_aura', + sattypes_oz(6) = 'gome_metop-a', + sattypes_oz(7) = 'gome_metop-b', + sattypes_oz(8) = 'mls30_aura', + sattypes_oz(9) = 'ompsnp_npp', + sattypes_oz(10) = 'ompstc8_npp', + sattypes_oz(11) = 'ompstc8_n20', + sattypes_oz(12) = 'ompsnp_n20', + sattypes_oz(13) = 'ompslp_npp', + sattypes_oz(14) = 'ompstc8_n21', + sattypes_oz(15) = 'ompsnp_n21', + sattypes_oz(16) = 'gome_metop-c', + $OZOBS_ENKF +/ +EOFnml + +################################################################################ +# Run enkf update + +export OMP_NUM_THREADS=$NTHREADS_ENKF +export pgm=$ENKFEXEC +. prep_step + +$NCP $ENKFEXEC $DATA +$APRUN_ENKF ${DATA}/$(basename $ENKFEXEC) 1>stdout 2>stderr +export err=$?; err_chk + +# Cat runtime output files. +cat stdout stderr > "${COM_ATMOS_ANALYSIS_STAT}/${ENKFSTAT}" + +################################################################################ +# Postprocessing +cd $pwd +[[ $mkdata = "YES" ]] && rm -rf $DATA + + +exit $err diff --git a/scripts/exgdas_nawips.sh b/scripts/exgdas_nawips.sh deleted file mode 100755 index b42b69b9ce..0000000000 --- a/scripts/exgdas_nawips.sh +++ /dev/null @@ -1,188 +0,0 @@ -#!/bin/ksh -################################################################### -echo "----------------------------------------------------" -echo "exnawips - convert NCEP GRIB files into GEMPAK Grids" -echo "----------------------------------------------------" -echo "History: Mar 2000 - First implementation of this new script." -echo "S Lilly: May 2008 - add logic to make sure that all of the " -echo " data produced from the restricted ECMWF" -echo " data on the CCS is properly protected." -##################################################################### - -set -xa - -cd $DATA -RUN=$1 -fend=$2 -DBN_ALERT_TYPE=$3 - -export 'PS4=$RUN:$SECONDS + ' - -DATA_RUN=$DATA/$RUN -mkdir -p $DATA_RUN -cd $DATA_RUN - -msg="Begin job for $job" -postmsg "$jlogfile" "$msg" - -cp $FIXgempak/g2varswmo2.tbl g2varswmo2.tbl -export err=$? -if [[ $err -ne 0 ]] ; then - echo " File g2varswmo2.tbl file is missing." - exit $err -fi -cp $FIXgempak/g2vcrdwmo2.tbl g2vcrdwmo2.tbl -export err=$? -if [[ $err -ne 0 ]] ; then - echo " File g2vcrdwmo2.tbl file is missing." - exit $err -fi - -cp $FIXgempak/g2varsncep1.tbl g2varsncep1.tbl -export err=$? -if [[ $err -ne 0 ]] ; then - echo " File g2varsncep1.tbl file is missing." - exit $err -fi - -cp $FIXgempak/g2vcrdncep1.tbl g2vcrdncep1.tbl -export err=$? -if [[ $err -ne 0 ]] ; then - echo " File g2vcrdncep1.tbl file is missing." - exit $err -fi - -# -NAGRIB=$GEMEXE/nagrib2_nc -export err=$? -if [[ $err -ne 0 ]] ; then - echo " File $GEMEXE/nagrib2_nc is missing." - echo " WARNING: module GEMPAK was not loaded" - exit $err -fi - -cpyfil=gds -garea=dset -gbtbls= -maxgrd=4999 -kxky= -grdarea= -proj= -output=T -pdsext=no - -maxtries=180 -fhcnt=$fstart -while [ $fhcnt -le $fend ] ; do - typeset -Z3 fhr - - fhr=$fhcnt - fhcnt3=`expr $fhr % 3` - - fhr3=$fhcnt - typeset -Z3 fhr3 - - GEMGRD=${RUN}_${PDY}${cyc}f${fhr3} - - if [ $RUN = "gdas_0p25" ]; then - export GRIBIN=$COMIN/${model}.${cycle}.pgrb2.0p25.f${fhr} - if [ ! -f $GRIBIN ] ; then - echo "WARNING: $GRIBIN FILE is missing" - msg=" $GRIBIN file is missing " - postmsg "$jlogfile" "$msg" - fi - GRIBIN_chk=$COMIN/${model}.${cycle}.pgrb2.0p25.f${fhr}.idx - else - export GRIBIN=$COMIN/${model}.${cycle}.pgrb2.1p00.f${fhr} - if [ ! -f $GRIBIN ] ; then - echo "WARNING: $GRIBIN FILE is missing" - msg=" $GRIBIN file is missing " - postmsg "$jlogfile" "$msg" - fi - GRIBIN_chk=$COMIN/${model}.${cycle}.pgrb2.1p00.f${fhr}.idx - fi - - icnt=1 - while [ $icnt -lt 1000 ] - do - if [ -r $GRIBIN_chk ] ; then - sleep 5 - break - else - msg="The process is waiting ... ${GRIBIN_chk} file to proceed." - postmsg "${jlogfile}" "$msg" - sleep 20 - let "icnt=icnt+1" - fi - if [ $icnt -ge $maxtries ] - then - msg="ABORTING: after 1 hour of waiting for ${GRIBIN_chk} file at F$fhr to end." - postmsg "${jlogfile}" "$msg" - export err=7 ; err_chk - exit $err - fi - done - - cp $GRIBIN grib$fhr - - export pgm="nagrib2 F$fhr" - startmsg - - $NAGRIB << EOF - GBFILE = grib$fhr - INDXFL = - GDOUTF = $GEMGRD - PROJ = $proj - GRDAREA = $grdarea - KXKY = $kxky - MAXGRD = $maxgrd - CPYFIL = $cpyfil - GAREA = $garea - OUTPUT = $output - GBTBLS = $gbtbls - GBDIAG = - PDSEXT = $pdsext - l - r -EOF - export err=$?;err_chk - - if [ $SENDCOM = "YES" ] ; then - cp $GEMGRD $COMOUT/.$GEMGRD - export err=$? - if [[ $err -ne 0 ]] ; then - echo " File $GEMGRD does not exist." - exit $err - fi - - mv $COMOUT/.$GEMGRD $COMOUT/$GEMGRD - if [ $SENDDBN = "YES" ] ; then - $DBNROOT/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - $COMOUT/$GEMGRD - else - echo "##### DBN_ALERT_TYPE is: ${DBN_ALERT_TYPE} #####" - fi - fi - - if [ $fhcnt -ge 240 ] ; then - let fhcnt=fhcnt+12 - else - let fhcnt=fhcnt+finc - fi -done - -$GEMEXE/gpend -##################################################################### -# GOOD RUN -set +x -echo "**************JOB $RUN NAWIPS COMPLETED NORMALLY ON THE IBM" -echo "**************JOB $RUN NAWIPS COMPLETED NORMALLY ON THE IBM" -echo "**************JOB $RUN NAWIPS COMPLETED NORMALLY ON THE IBM" -set -x -##################################################################### - -msg='Job completed normally.' -echo $msg -postmsg "$jlogfile" "$msg" - -############################### END OF SCRIPT ####################### diff --git a/scripts/exgempak_gdas_gif_ncdc.sh b/scripts/exgempak_gdas_gif_ncdc.sh deleted file mode 100755 index 884ae1cf25..0000000000 --- a/scripts/exgempak_gdas_gif_ncdc.sh +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/sh -############################################################## -# Add the NCDC GIF processing to the end of the gempak_gif job -# There is no timing issue with the NCDC GIF, so it is -# okay to just add it here. If timing becomes a problem -# in the future, we should move it above somewhere else. -############################################################## -export PS4='exgempakgif_ncdc:$SECONDS + ' -set -xa - -cd $DATA -msg="The NCDC GIF processing has begun" -postmsg "$jlogfile" "$msg" - -export NTS=$USHgempak/restore - -if [ $MODEL = GDAS ] -then - case $MODEL in - GDAS) fcsthrs="000";; - esac - - export fhr - for fhr in $fcsthrs - do - icnt=1 - maxtries=180 - while [ $icnt -lt 1000 ] - do - if [ -r ${COMIN}/${RUN}_${PDY}${cyc}f${fhr} ] ; then - break - else - sleep 20 - let "icnt=icnt+1" - fi - if [ $icnt -ge $maxtries ] - then - msg="ABORTING after 1 hour of waiting for F$fhr to end." - err_exit $msg - fi - done - - cp ${COMIN}/${RUN}_${PDY}${cyc}f${fhr} gem_grids${fhr}.gem - export err=$? - if [[ $err -ne 0 ]] ; then - echo " File: ${COMIN}/${RUN}_${PDY}${cyc}f${fhr} does not exist." - exit $err - fi - - if [ $cyc -eq 00 -o $cyc -eq 12 ] - then - $USHgempak/gempak_${RUN}_f${fhr}_gif.sh - if [ ! -f $USHgempak/gempak_${RUN}_f${fhr}_gif.sh ] ; then - echo "WARNING: $USHgempak/gempak_${RUN}_f${fhr}_gif.sh FILE is missing" - msg=" $USHgempak/gempak_${RUN}_f${fhr}_gif.sh file is missing " - postmsg "jlogfile" "$msg" - fi - fi - - done -fi - -exit diff --git a/scripts/exgempak_gfs_gif_ncdc_skew_t.sh b/scripts/exgempak_gfs_gif_ncdc_skew_t.sh deleted file mode 100755 index b6ad4d062d..0000000000 --- a/scripts/exgempak_gfs_gif_ncdc_skew_t.sh +++ /dev/null @@ -1,125 +0,0 @@ -#!/bin/sh -############################################################## -# Add the NCDC GIF processing to the end of the gempak_gif job -# There is no timing issue with the NCDC GIF, so it is -# okay to just add it here. If timing becomes a problem -# in the future, we should move it above somewhere else. -############################################################## -export PS4='exgempakgif_ncdc_skewt:$SECONDS + ' -set -xa - -cd $DATA -msg="The NCDC GIF processing has begun" -postmsg "$jlogfile" "$msg" - -export NTS=$USHgempak/restore - -if [ $MODEL = GDAS -o $MODEL = GFS ] -then - case $MODEL in - GDAS) fcsthrs="00";; - GFS) fcsthrs="00 12 24 36 48";; - esac - - export fhr - for fhr in $fcsthrs - do - icnt=1 - maxtries=180 - export GRIBFILE=${COMIN}/${RUN}_${PDY}${cyc}f0${fhr} - while [ $icnt -lt 1000 ] - do - if [ -r ${COMIN}/${RUN}_${PDY}${cyc}f0${fhr} ] ; then - sleep 5 - break - else - msg="The process is waiting ... ${GRIBFILE} file to proceed." - postmsg "${jlogfile}" "$msg" - sleep 20 - let "icnt=icnt+1" - fi - if [ $icnt -ge $maxtries ] - then - msg="ABORTING: after 1 hour of waiting for ${GRIBFILE} file at F$fhr to end." - postmsg "${jlogfile}" "$msg" - export err=7 ; err_chk - exit $err - fi - done - - cp ${COMIN}/${RUN}_${PDY}${cyc}f0${fhr} gem_grids${fhr}.gem - -# if [ $cyc -eq 00 -o $cyc -eq 12 ] - #then - $USHgempak/gempak_${RUN}_f${fhr}_gif.sh - #fi - - done -fi - -#################################################################################### -echo "-----------------------------------------------------------------------------" -echo "GFS MAG postprocessing script exmag_sigman_skew_k_gfs_gif_ncdc_skew_t.sh " -echo "-----------------------------------------------------------------------------" -echo "History: Mar 2012 added to processing for enhanced MAG skew_t" -echo "2012-03-11 Mabe -- reworked script to add significant level " -echo " data to existing mandatory level data in a new file" -echo "2013-04-24 Mabe -- Reworked to remove unneeded output with " -echo " conversion to WCOSS" -# Add ms to filename to make it different since it has both mandatory -# and significant level data $COMOUT/${RUN}.${cycle}.msupperair -# $COMOUT/${RUN}.${cycle}.msupperairtble -##################################################################################### - -set -x - -cd $DATA - -export RSHPDY=`echo $PDY | cut -c5-``echo $PDY | cut -c3-4` - -cp $HOMEgfs/gempak/dictionaries/sonde.land.tbl . -cp $HOMEgfs/gempak/dictionaries/metar.tbl . -sort -k 2n,2 metar.tbl > metar_stnm.tbl -cp $COMINgfs/${model}.$cycle.adpupa.tm00.bufr_d fort.40 -export err=$? -if [[ $err -ne 0 ]] ; then - echo " File ${model}.$cycle.adpupa.tm00.bufr_d does not exist." - exit $err -fi -# $RDBFMSUA >> $pgmout 2> errfile -${UTILgfs}/exec/rdbfmsua >> $pgmout 2> errfile - -err=$?;export err ;err_chk - -export filesize=` ls -l rdbfmsua.out | awk '{print $5}' ` - -################################################################ -# only run script if rdbfmsua.out contained upper air data. -################################################################ - -if [ $filesize -gt 40 ] -then - -if [ $SENDCOM = "YES" ]; then - cp rdbfmsua.out $COMOUT/${RUN}.${cycle}.msupperair - cp sonde.idsms.tbl $COMOUT/${RUN}.${cycle}.msupperairtble - if [ $SENDDBN = "YES" ]; then - $DBNROOT/bin/dbn_alert DATA MSUPPER_AIR $job $COMOUT/${RUN}.${cycle}.msupperair - $DBNROOT/bin/dbn_alert DATA MSUPPER_AIRTBL $job $COMOUT/${RUN}.${cycle}.msupperairtble - fi -fi - -fi - -############################################################ -# GOOD RUN -set +x -echo "********** JGFS_GEMPAK_NCDC_UPAPGIF COMPLETED" -set -x -############################################################ -if [ -e "$pgmout" ] ; then - cat $pgmout -fi -msg="HAS COMPLETED NORMALLY!" - -exit diff --git a/scripts/exgfs_aero_init_aerosol.py b/scripts/exgfs_aero_init_aerosol.py new file mode 100755 index 0000000000..db5e462f64 --- /dev/null +++ b/scripts/exgfs_aero_init_aerosol.py @@ -0,0 +1,292 @@ +#! /usr/bin/env python3 + +''' +'script'-level control of the aerosol init job. + +Reads environment variables, determines the atmospheric IC files and most recent available +restart files, then calls the script that merges the tracers from the restart files into +the IC files. + +INPUTS +--------- +This script requires the following environment variables be set beforehand: + +CDATE: Initial time in YYYYMMDDHH format +STEP_GFS: Forecast cadence (frequency) in hours +FHMAX_GFS: Forecast length in hours +CDUMP: Forecast phase (gfs or gdas). Currently always expected to be gfs. +ROTDIR: Rotating (COM) directory +USHgfs: Path to global-workflow `ush` directory +PARMgfs: Path to global-workflow `parm` directory + +Additionally, the following data files are used: + +- Tiled atmospheric initial conditions that follow the naming pattern determined by `atm_base_pattern` and `atm_file_pattern` +- Restart files from a previous cycle that fit the pattern determined by restart_base_pattern and restart_file_pattern, + tracer_file_pattern, and dycore_file_pattern +- A static file containing a list of tracers from the restart files to be added to the IC files, determined by + `tracer_list_file_pattern` + +OUTPUTS +--------- +The tiled atmospheric intial condition files will be updated with conservation-adjusted tracer fields from the restart files. + + +''' + +import os +import subprocess +import typing +from datetime import datetime, timedelta +from functools import partial + +# Constants +atm_base_pattern = "{rot_dir}/{cdump}.%Y%m%d/%H/atmos/INPUT" # Location of atmosphere ICs +atm_file_pattern = "{path}/gfs_data.{tile}.nc" # Atm IC file names +atm_ctrl_pattern = "{path}/gfs_ctrl.nc" # Atm IC control file name +restart_base_pattern = "{rot_dir}/{cdump}.%Y%m%d/%H/atmos/RERUN_RESTART" # Location of restart files (time of previous run) +restart_file_pattern = "{file_base}/{timestamp}fv_core.res.{tile}.nc" # Name of restart data files (time when restart is valid) +tracer_file_pattern = "{file_base}/{timestamp}fv_tracer.res.{tile}.nc" # Name of restart tracer files (time when restart is valid) +dycore_file_pattern = "{file_base}/{timestamp}fv_core.res.nc" # Name of restart dycore file (time when restart is valid) +tracer_list_file_pattern = "{parm_gfs}/chem/gocart_tracer.list" # Text list of tracer names to copy +merge_script_pattern = "{ush_gfs}/merge_fv3_aerosol_tile.py" +n_tiles = 6 +max_lookback = 4 # Maximum number of past cycles to look for for tracer data +debug = True + +# End configurable settings + +# Make sure print statements are flushed immediately, otherwise +# print statments may be out-of-order with subprocess output +print = partial(print, flush=True) + +tiles = list(map(lambda t: "tile{t}".format(t=t), range(1, n_tiles + 1))) + + +def main() -> None: + # Read in environment variables and make sure they exist + cdate = get_env_var("CDATE") + incr = int(get_env_var('STEP_GFS')) + fcst_length = int(get_env_var('FHMAX_GFS')) + cdump = get_env_var("CDUMP") + rot_dir = get_env_var("ROTDIR") + ush_gfs = get_env_var("USHgfs") + parm_gfs = get_env_var("PARMgfs") + + # os.chdir(data) + + merge_script = merge_script_pattern.format(ush_gfs=ush_gfs) + tracer_list_file = tracer_list_file_pattern.format(parm_gfs=parm_gfs) + + time = datetime.strptime(cdate, "%Y%m%d%H") + atm_source_path = time.strftime(atm_base_pattern.format(**locals())) + + if (debug): + for var in ['merge_script', 'tracer_list_file', 'atm_source_path']: + print(f'{var} = {f"{var}"}') + + atm_files, ctrl_files = get_atm_files(atm_source_path) + tracer_files, rest_files, core_files = get_restart_files(time, incr, max_lookback, fcst_length, rot_dir, cdump) + + if (tracer_files is not None): + merge_tracers(merge_script, atm_files, tracer_files, rest_files, core_files[0], ctrl_files[0], tracer_list_file) + + return + + +def get_env_var(varname: str, fail_on_missing: bool = True) -> str: + ''' + Retrieve environment variable and exit or print warning if not defined + + Parameters + ---------- + varname : str + Environment variable to read + fail_on_missing : bool, optional + Whether to fail (if True) or print warning (False) if environment variable is not defined (default: True) + + Returns + ---------- + str + Value of the named variable + + Raises + ---------- + RuntimeError + If fail_on_missing is True and environment variable is not defined + + ''' + if (debug): + print(f'Trying to read envvar {varname}') + + var = os.environ.get(varname) + if (var is None): + if (fail_on_missing is True): + raise RuntimeError(f'Environment variable {varname} not set') + else: + print(f"WARNING: Environment variable {varname} not set, continuing using None") + if (debug): + print(f'\tValue: {var}') + return (var) + + +def get_atm_files(path: str) -> typing.List[typing.List[str]]: + ''' + Checks whether all atmospheric IC files exist in the given location and returns a list + of the filenames. + + Parameters + ---------- + path : str + Location where atmospheric IC files should exist + + Returns + ---------- + list of str + List of the full paths to each of the atmospheric files + + Raises + ---------- + IOError + If fail_on_missing is True and environment variable is not defined + + ''' + print(f'Checking for atm files in {path}') + + file_list = [] + for file_pattern in atm_file_pattern, atm_ctrl_pattern: + files = list(map(lambda tile: file_pattern.format(tile=tile, path=path), tiles)) + for file_name in files: + if (debug): + print(f"\tChecking for {file_name}") + if (not os.path.isfile(file_name)): + raise IOError(f"Atmosphere file {file_name} not found") + elif (debug): + print(f"\t\tFound {file_name}") + file_list = file_list + [files] + return file_list + + +def get_restart_files(time: datetime, incr: int, max_lookback: int, fcst_length: int, rot_dir: str, cdump: str) -> typing.List[typing.List[str]]: + ''' + Determines the last cycle where all the necessary restart files are available. Ideally the immediate previous cycle + + Parameters + ---------- + time : datetime + Initial time for the current forecast + incr : int + Forecast cadence in hours + max_lookback : int + Maximum number of cycles to look back before failing + fcst_length : int + Length of forecast in hours + rot_dir : str + Path to the ROTDIR (COM) directory + cdump : str + CDUMP of current forecast portion (currently should always be 'gfs') + + Returns + ---------- + list of str + Full pathnames of all restart files needed from previous cycle (fv_core and fv_tracer files) + If all needed files aren't found within lookback period, An array of three None is returned instead. + + ''' + print(f"Looking for restart tracer files in {rot_dir}") + for lookback in map(lambda i: incr * (i + 1), range(max_lookback)): + if (lookback > fcst_length): + # Trying to look back farther than the length of a forecast + break + elif (lookback == fcst_length): + # Restart files at the end of the cycle don't have a timestamp + timestamp = "" + else: + timestamp = time.strftime("%Y%m%d.%H0000.") + + last_time = time - timedelta(hours=lookback) + + if (debug): + print(f"\tChecking {last_time}") + file_list = [] + file_base = last_time.strftime(restart_base_pattern.format(**locals())) + + for file_pattern in tracer_file_pattern, restart_file_pattern, dycore_file_pattern: + files = list(map(lambda tile: file_pattern.format(timestamp=timestamp, file_base=file_base, tile=tile), tiles)) + if (debug): + print(f"\t\tLooking for files {files} in directory {file_base}") + file_list = file_list + [files] + + found = all([os.path.isfile(file) for file in files for files in file_list]) + + if (found): + break + else: + print(last_time.strftime("Restart files not found for %Y%m%d_%H")) + + if (found): + return file_list + else: + print("WARNING: Unable to find restart files, will use zero fields") + return [None, None, None] + + +# Merge tracer data into atmospheric data +def merge_tracers(merge_script: str, + atm_files: typing.List[str], + tracer_files: typing.List[str], + rest_files: typing.List[str], + core_file: str, + ctrl_file: str, + tracer_list_file: str) -> None: + ''' + Call the merger script to merge the tracers into the atmospheric IC files. Merged file is written to a temp file + which then overwrites the original upon successful completion of the script. + + Parameters + ---------- + merge_script : str + Full path to the merge script + atm_files : list of str + List of paths to atmospheric IC files + tracer_files : list of str + List of paths to tracer restart files + rest_files : list of str + List of paths to dycore tile restart files + core_file : str + Path of dycore restart file + ctrl_file : str + Path of control file + tracer_list_file : str + Full path to the file listing the tracer variables to add + + Returns + ---------- + None + + Raises + ---------- + ValueError + If `atm_files`, `tracer_files`, and `rest_files` are not all the same length + CalledProcessError + If merge script exits with a non-zero error + + ''' + print("Merging tracers") + if (len(atm_files) != len(tracer_files)): + raise ValueError("Atmosphere file list and tracer file list are not the same length") + + if (len(atm_files) != len(rest_files)): + raise ValueError("Atmosphere file list and dycore file list are not the same length") + + for atm_file, tracer_file, rest_file in zip(atm_files, tracer_files, rest_files): + if debug: + print(f"\tMerging tracers from {tracer_file} into {atm_file}") + temp_file = f'{atm_file}.tmp' + subprocess.run([merge_script, atm_file, tracer_file, core_file, ctrl_file, rest_file, tracer_list_file, temp_file], check=True) + os.replace(temp_file, atm_file) + + +if __name__ == "__main__": + main() + exit(0) diff --git a/scripts/exgfs_atmos_awips_20km_1p0deg.sh b/scripts/exgfs_atmos_awips_20km_1p0deg.sh new file mode 100755 index 0000000000..7546f3cabe --- /dev/null +++ b/scripts/exgfs_atmos_awips_20km_1p0deg.sh @@ -0,0 +1,253 @@ +#! /usr/bin/env bash + +############################################################################## +# UTILITY SCRIPT NAME : exgfs_awips_20km_1p0deg.sh +# DATE WRITTEN : 11/01/2017 +# +# Abstract: This utility script produces the GFS AWIPS 20km and 1.0 deg +# grids GRIB2 +# +# Input: 1 arguments are passed to this script. +# 1st argument - Forecast Hour - format of 3I (3 digits) +# +############################################################################### +# echo "------------------------------------------------" +# echo "JGFS_AWIPS_00/06/12/18 GFS postprocessing" +# echo "------------------------------------------------" +# echo "History: NOV 2017 - First implementation of this new script to " +# echo " process GFS AWIPS 20km and 1.0 deg grids products " +# echo " " +############################################################################### + +source "${HOMEgfs}/ush/preamble.sh" + +fcsthrs="$1" +num=$# +job_name=${job/[jpt]gfs/gfs} + +if (( num != 1 )); then + echo "" + echo " FATAL ERROR: Incorrect number of arguments " + echo "" + echo "" + echo "Usage: $0 \${fcsthrs} (3 digits) " + echo "" + exit 16 +fi + +cd "${DATA}" || exit 2 + +# "Import" functions used in this script +source "${HOMEgfs}/ush/product_functions.sh" + +############################################### +# Wait for the availability of the pgrb file +############################################### +icnt=1 +while (( icnt < 1000 )); do + if [[ -s "${COM_ATMOS_GRIB_0p25}/${RUN}.${cycle}.pgrb2b.0p25.f${fcsthrs}.idx" ]]; then + break + fi + + sleep 10 + icnt=$((icnt + 1)) + if (( icnt >= 180 )); then + msg="FATAL ERROR: No GFS pgrb2 file after 30 min of waiting" + err_exit "${msg}" + exit 5 + fi +done + +######################################## + +echo " ------------------------------------------" +echo " BEGIN MAKING GFS AWIPS PRODUCTS" +echo " ------------------------------------------" + +set +x +echo " " +echo "#######################################" +echo " Process GRIB AWIP GRIB2 PRODUCTS " +echo "#######################################" +echo " " +set_trace + +# Set type of Interpolation for WGRIB2 +export opt1=' -set_grib_type same -new_grid_winds earth ' +export opt1uv=' -set_grib_type same -new_grid_winds grid ' +export opt21=' -new_grid_interpolation bilinear -if ' +export opt22=":(CSNOW|CRAIN|CFRZR|CICEP|ICSEV):" +export opt23=' -new_grid_interpolation neighbor -fi ' +export opt24=' -set_bitmap 1 -set_grib_max_bits 16 -if ' +export opt25=":(APCP|ACPCP|PRATE|CPRAT):" +export opt26=' -set_grib_max_bits 25 -fi -if ' +export opt27=":(APCP|ACPCP|PRATE|CPRAT|DZDT):" +export opt28=' -new_grid_interpolation budget -fi ' + +############################################################### +# Process GFS GRIB AWIP PRODUCTS IN GRIB2 # +############################################################### + +cp "${COM_ATMOS_GRIB_0p25}/gfs.t${cyc}z.pgrb2.0p25.f${fcsthrs}" "tmpfile2${fcsthrs}" +cp "${COM_ATMOS_GRIB_0p25}/gfs.t${cyc}z.pgrb2b.0p25.f${fcsthrs}" "tmpfile2b${fcsthrs}" +cat "tmpfile2${fcsthrs}" "tmpfile2b${fcsthrs}" > "tmpfile${fcsthrs}" +${WGRIB2} "tmpfile${fcsthrs}" | grep -F -f "${PARMproduct}/gfs_awips_parmlist_g2" | \ + ${WGRIB2} -i -grib masterfile "tmpfile${fcsthrs}" +export err=$? +if [[ $err -ne 0 ]]; then + echo " FATAL ERROR: masterfile does not exist." + exit $err +fi + +${WGRIB2} masterfile -match ":PWAT:entire atmosphere" -grib gfs_pwat.grb +${WGRIB2} masterfile | grep -v ":PWAT:entire atmosphere" | ${WGRIB2} -i -grib temp_gfs masterfile +################################################################## +# Process to change PWAT from level 200 to 10 (Entire Atmosphere) +# in production defintion template (PDT) 4.0 +################################################################## +${WGRIB2} gfs_pwat.grb -set_byte 4 23 10 -grib gfs_pwat_levels_10.grb +export err=$?; err_chk + +cat temp_gfs gfs_pwat_levels_10.grb > tmp_masterfile + +for GRID in conus ak prico pac 003; do + case ${GRID} in + conus) + gridconus="lambert:265.0:25.0:25.0 226.541:369:20318.0 12.19:257:20318.0" + # shellcheck disable=SC2086,SC2248 + ${WGRIB2} tmp_masterfile ${opt1uv} ${opt21} ${opt22} ${opt23} ${opt24} ${opt25} ${opt26} \ + ${opt27} ${opt28} -new_grid ${gridconus} "awps_file_f${fcsthrs}_${GRID}" + ;; + ak) + gridak="nps:210.0:60.0 170.0:277:22500 35.0:225:22500" + # shellcheck disable=SC2086,SC2248 + ${WGRIB2} tmp_masterfile ${opt1uv} ${opt21} ${opt22} ${opt23} ${opt24} ${opt25} ${opt26} \ + ${opt27} ${opt28} -new_grid ${gridak} "awps_file_f${fcsthrs}_${GRID}" + ;; + prico) + gridprico="latlon 271.75:275:0.25 50.75:205:-0.25" + # shellcheck disable=SC2086,SC2248 + ${WGRIB2} tmp_masterfile ${opt1} ${opt21} ${opt22} ${opt23} ${opt24} ${opt25} ${opt26} \ + ${opt27} ${opt28} -new_grid ${gridprico} "awps_file_f${fcsthrs}_${GRID}" + ;; + pac) + gridpac="mercator:20.0 110.0:837:20000:270.0 -45.0:725:20000:65.7345" + # shellcheck disable=SC2086,SC2248 + ${WGRIB2} tmp_masterfile ${opt1} ${opt21} ${opt22} ${opt23} ${opt24} ${opt25} ${opt26} \ + ${opt27} ${opt28} -new_grid ${gridpac} "awps_file_f${fcsthrs}_${GRID}" + ;; + 003) + ###################################################################### + # Process GFS GRIB AWIP 1.0 DEGREE (GRID 003) PRODUCTS IN GRIB2 # + ###################################################################### + grid003="latlon 0:360:1.0 90:181:-1.0" + # shellcheck disable=SC2086,SC2248 + ${WGRIB2} tmp_masterfile ${opt1} ${opt21} ${opt22} ${opt23} ${opt24} ${opt25} ${opt26} \ + ${opt27} ${opt28} -new_grid ${grid003} "awps_file_f${fcsthrs}_${GRID}" + ;; + *) + echo "FATAL ERROR: Unknown output grid ${GRID}" + exit 2 + ;; + esac + trim_rh "awps_file_f${fcsthrs}_${GRID}" + scale_dec "awps_file_f${fcsthrs}_${GRID}" + ${GRB2INDEX} "awps_file_f${fcsthrs}_${GRID}" "awps_file_fi${fcsthrs}_${GRID}" + + ########################################################################### + # Checking fields in awps_file_f${fcsthrs}_${GRID} file + # before TOCGRIB2 adding WMO headers for AWIPS products. + # + # NOTE: numparm is the total of fields in grib2_awpgfs_20km_conusf000 file + ########################################################################### + numparm=247 + numrec=$( ${WGRIB2} "awps_file_f${fcsthrs}_${GRID}" | wc -l ) + + if (( numrec < numparm )); then + msg="FATAL ERROR: awps_file_f${fcsthrs}_${GRID} file is missing fields for AWIPS !" + err_exit "${msg}" || exit 10 + fi + + # Processing AWIPS GRIB2 grids with WMO headers + + pgm=tocgrib2 + export pgm; prep_step + startmsg + + if [[ ${GRID} = "003" && $(( 10#${fcsthrs} % 6 )) == 0 ]]; then + export FORT11="awps_file_f${fcsthrs}_${GRID}" + export FORT31="awps_file_fi${fcsthrs}_${GRID}" + export FORT51="grib2.awpgfs${fcsthrs}.${GRID}" + + cp "${PARMwmo}/grib2_awpgfs${fcsthrs}.${GRID}" "parm_list" + if [[ ${DO_WAVE} != "YES" ]]; then + # Remove wave field it not running wave model + grep -vw "5WAVH" "parm_list" > "parm_list_temp" + mv "parm_list_temp" "parm_list" + fi + + ${TOCGRIB2} < "parm_list" >> "${pgmout}" 2> errfile + export err=$?; err_chk + # TODO: Should this be fatal? + echo "error from tocgrib2=${err}" + + ############################## + # Post Files to ${COM_ATMOS_WMO} + ############################## + + mv "grib2.awpgfs${fcsthrs}.${GRID}" \ + "${COM_ATMOS_WMO}/grib2.awpgfs${fcsthrs}.${GRID}.gfs_awips_f${fcsthrs}_1p0deg_${cyc}" + + ############################## + # Distribute Data + ############################## + + if [[ "${SENDDBN}" == 'YES' || "${SENDAWIP}" == 'YES' ]]; then + "${DBNROOT}/bin/dbn_alert" NTC_LOW "${NET}" "${job}" \ + "${COM_ATMOS_WMO}/grib2.awpgfs${fcsthrs}.${GRID}.gfs_awips_f${fcsthrs}_1p0deg_${cyc}" + else + echo "File ${COM_ATMOS_WMO}/grib2.awpgfs${fcsthrs}.${GRID}.gfs_awips_f${fcsthrs}_1p0deg_${cyc} not posted to db_net." + fi + elif [[ ${GRID} != "003" ]]; then + export FORT11="awps_file_f${fcsthrs}_${GRID}" + export FORT31="awps_file_fi${fcsthrs}_${GRID}" + export FORT51="grib2.awpgfs_20km_${GRID}_f${fcsthrs}" + + cp "${PARMwmo}/grib2_awpgfs_20km_${GRID}f${fcsthrs}" "parm_list" + if [[ ${DO_WAVE} != "YES" ]]; then + # Remove wave field it not running wave model + grep -vw "5WAVH" "parm_list" > "parm_list_temp" + mv "parm_list_temp" "parm_list" + fi + + ${TOCGRIB2} < "parm_list" >> "${pgmout}" 2> errfile + export err=$?; err_chk || exit "${err}" + + ############################## + # Post Files to ${COM_ATMOS_WMO} + ############################## + + mv "grib2.awpgfs_20km_${GRID}_f${fcsthrs}" \ + "${COM_ATMOS_WMO}/grib2.awpgfs_20km_${GRID}_f${fcsthrs}.${job_name}" + + ############################## + # Distribute Data + ############################## + + if [[ "${SENDDBN}" = 'YES' || "${SENDAWIP}" = 'YES' ]]; then + "${DBNROOT}/bin/dbn_alert" NTC_LOW "${NET}" "${job}" \ + "${COM_ATMOS_WMO}/grib2.awpgfs_20km_${GRID}_f${fcsthrs}.${job_name}" + else + echo "File ${COM_ATMOS_WMO}/grib2.awpgfs_20km_${GRID}_f${fcsthrs}.${job_name} not posted to db_net." + fi + fi + echo "Awip Processing ${fcsthrs} hour completed normally" + +done + +if [[ -e "${pgmout}" ]]; then + cat "${pgmout}" +fi + + +############## END OF SCRIPT ####################### diff --git a/scripts/exgfs_atmos_fbwind.sh b/scripts/exgfs_atmos_fbwind.sh new file mode 100755 index 0000000000..735a906bff --- /dev/null +++ b/scripts/exgfs_atmos_fbwind.sh @@ -0,0 +1,86 @@ +#! /usr/bin/env bash + +##################################################################### +# echo "------------------------------------------------" +# echo "JGFS_BULLS - 24hr GFS processing" +# echo "------------------------------------------------" +# echo "History: Jul 2004 - First implementation of this new script." +# echo " FBWNDGFS (FB Winds) program for 15 sites outside" +# echo " the Hawaiian Islands." +# echo " Feb 2006 - L Sager Send bulletins to TOC via NTC. " +# echo " Jul 2014 - B Vuong Modified to use GFS master GRIB2" +# echo " and Add bulletins WINTEMV process." +# echo " Sep 2016 - B Vuong Modified to use GFS 0p25 deg GRIB2" +# echo " Nov 2019 - B Vuong Removed WINTEMV bulletin (retired)" +##################################################################### + +source "$HOMEgfs/ush/preamble.sh" + +cd $DATA + +###################### +# Set up Here Files. +###################### + +job_name=$(echo $job|sed 's/[jpt]gfs/gfs/') + +set +x +echo " " +echo "#############################################################" +echo " Process Bulletins of forecast winds and temps for Hawaii " +echo " and 15 sites outside of the Hawaiian Islands. " +echo "#############################################################" +echo " " +set_trace + +export pgm=bulls_fbwndgfs +. prep_step + +for fhr in 006 012 024 +do + + cp $COMIN/gfs.${cycle}.pgrb2.0p25.f${fhr} tmp_pgrb2_0p25${fhr} + cp $COMIN/gfs.${cycle}.pgrb2b.0p25.f${fhr} tmp_pgrb2b_0p25${fhr} + cat tmp_pgrb2_0p25${fhr} tmp_pgrb2b_0p25${fhr} > tmp0p25filef${fhr} + $WGRIB2 tmp0p25filef${fhr} | grep -F -f $PARMproduct/gfs_fbwnd_parmlist_g2 | $WGRIB2 -i -grib tmpfilef${fhr} tmp0p25filef${fhr} + $CNVGRIB -g21 tmpfilef${fhr} tmpfilef${fhr}.grib1 + $GRBINDEX tmpfilef${fhr}.grib1 tmpfilef${fhr}.grib1i + mv tmpfilef${fhr}.grib1 gfs.t${cyc}z.grbf${fhr}_grb1 + mv tmpfilef${fhr}.grib1i gfs.t${cyc}z.grbif${fhr}_grb1 + +done + +export FORT11="gfs.t${cyc}z.grbf006_grb1" +export FORT12="gfs.t${cyc}z.grbf012_grb1" +export FORT13="gfs.t${cyc}z.grbf024_grb1" + +# GFS grib index files + +export FORT31="gfs.t${cyc}z.grbif006_grb1" +export FORT32="gfs.t${cyc}z.grbif012_grb1" +export FORT33="gfs.t${cyc}z.grbif024_grb1" + +# +# 1280 byte transmission file +# + +export FORT51="tran.fbwnd_pacific" + +startmsg + +$EXECgfs/fbwndgfs < $PARMproduct/fbwnd_pacific.stnlist >> $pgmout 2> errfile +export err=$?; err_chk + + +cp tran.fbwnd_pacific ${COMOUTwmo}/tran.fbwnd_pacific.$job_name + +if test "$SENDDBN" = 'YES' +then +# make_ntc_bull.pl WMOBH NONE KWNO NONE tran.fbwnd_pacific ${COMOUTwmo}/tran.fbwnd_pacific.$job_name + ${USHgfs}/make_ntc_bull.pl WMOBH NONE KWNO NONE tran.fbwnd_pacific ${COMOUTwmo}/tran.fbwnd_pacific.$job_name +fi + +##################################################################### + + +############################### END OF SCRIPT ####################### diff --git a/scripts/exgfs_atmos_gempak_gif_ncdc_skew_t.sh b/scripts/exgfs_atmos_gempak_gif_ncdc_skew_t.sh new file mode 100755 index 0000000000..2dd7fa886a --- /dev/null +++ b/scripts/exgfs_atmos_gempak_gif_ncdc_skew_t.sh @@ -0,0 +1,114 @@ +#! /usr/bin/env bash + +############################################################## +# Add the NCDC GIF processing to the end of the gempak_gif job +# There is no timing issue with the NCDC GIF, so it is +# okay to just add it here. If timing becomes a problem +# in the future, we should move it above somewhere else. +############################################################## + +source "$HOMEgfs/ush/preamble.sh" + +cd $DATA + +export NTS=$USHgempak/restore + +if [ $MODEL = GDAS -o $MODEL = GFS ] +then + case $MODEL in + GDAS) fcsthrs="00";; + GFS) fcsthrs="00 12 24 36 48";; + esac + + export fhr + for fhr in $fcsthrs + do + icnt=1 + maxtries=180 + export GRIBFILE=${COMIN}/${RUN}_${PDY}${cyc}f0${fhr} + while [ $icnt -lt 1000 ] + do + if [ -r ${COMIN}/${RUN}_${PDY}${cyc}f0${fhr} ] ; then + sleep 5 + break + else + echo "The process is waiting ... ${GRIBFILE} file to proceed." + sleep 20 + let "icnt=icnt+1" + fi + if [ $icnt -ge $maxtries ] + then + echo "ABORTING: after 1 hour of waiting for ${GRIBFILE} file at F$fhr to end." + export err=7 ; err_chk + exit $err + fi + done + + cp ${COMIN}/${RUN}_${PDY}${cyc}f0${fhr} gem_grids${fhr}.gem + +# if [ $cyc -eq 00 -o $cyc -eq 12 ] + #then + $USHgempak/gempak_${RUN}_f${fhr}_gif.sh + #fi + + done +fi + +#################################################################################### +# echo "-----------------------------------------------------------------------------" +# echo "GFS MAG postprocessing script exmag_sigman_skew_k_gfs_gif_ncdc_skew_t.sh " +# echo "-----------------------------------------------------------------------------" +# echo "History: Mar 2012 added to processing for enhanced MAG skew_t" +# echo "2012-03-11 Mabe -- reworked script to add significant level " +# echo " data to existing mandatory level data in a new file" +# echo "2013-04-24 Mabe -- Reworked to remove unneeded output with " +# echo " conversion to WCOSS" +# Add ms to filename to make it different since it has both mandatory +# and significant level data $COMOUT/${RUN}.${cycle}.msupperair +# $COMOUT/${RUN}.${cycle}.msupperairtble +##################################################################################### + +cd $DATA + +export RSHPDY=$(echo $PDY | cut -c5-)$(echo $PDY | cut -c3-4) + +cp $HOMEgfs/gempak/dictionaries/sonde.land.tbl . +cp $HOMEgfs/gempak/dictionaries/metar.tbl . +sort -k 2n,2 metar.tbl > metar_stnm.tbl +cp $COMINobsproc/${model}.$cycle.adpupa.tm00.bufr_d fort.40 +export err=$? +if [[ $err -ne 0 ]] ; then + echo " File ${model}.$cycle.adpupa.tm00.bufr_d does not exist." + exit $err +fi +# $RDBFMSUA >> $pgmout 2> errfile +${UTILgfs}/exec/rdbfmsua >> $pgmout 2> errfile + +err=$?;export err ;err_chk + +export filesize=$( ls -l rdbfmsua.out | awk '{print $5}' ) + +################################################################ +# only run script if rdbfmsua.out contained upper air data. +################################################################ + +if [ $filesize -gt 40 ] +then + + cp rdbfmsua.out $COMOUT/${RUN}.${cycle}.msupperair + cp sonde.idsms.tbl $COMOUT/${RUN}.${cycle}.msupperairtble + if [ $SENDDBN = "YES" ]; then + $DBNROOT/bin/dbn_alert DATA MSUPPER_AIR $job $COMOUT/${RUN}.${cycle}.msupperair + $DBNROOT/bin/dbn_alert DATA MSUPPER_AIRTBL $job $COMOUT/${RUN}.${cycle}.msupperairtble + fi + +fi + +############################################################ + +if [ -e "$pgmout" ] ; then + cat $pgmout +fi + + +exit diff --git a/scripts/exgfs_atmos_gempak_meta.sh b/scripts/exgfs_atmos_gempak_meta.sh new file mode 100755 index 0000000000..04f4f1fc5c --- /dev/null +++ b/scripts/exgfs_atmos_gempak_meta.sh @@ -0,0 +1,138 @@ +#! /usr/bin/env bash + +source "$HOMEgfs/ush/preamble.sh" + +cd $DATA + +GEMGRD1=${RUN}_${PDY}${cyc}f +#find out what fcst hr to start processing +fhr=$fhend + +export numproc=23 + +while [ $fhr -ge $fhbeg ] ; do + fhr=$(printf "%03d" $fhr) + ls -l $COMIN/$GEMGRD1${fhr} + err1=$? + if [ $err1 -eq 0 -o $fhr -eq $fhbeg ] ; then + break + fi + fhr=$(expr $fhr - $fhinc) +done + +maxtries=180 +first_time=0 +do_all=0 + +#loop through and process needed forecast hours +while [ $fhr -le $fhend ] +do + # + # First check to see if this is a rerun. If so make all Meta files + if [ $fhr -gt 126 -a $first_time -eq 0 ] ; then + do_all=1 + fi + first_time=1 + + if [ $fhr -eq 120 ] ; then + fhr=126 + fi + icnt=1 + + while [ $icnt -lt 1000 ] + do + ls -l $COMIN/$GEMGRD1${fhr} + err1=$? + if [ $err1 -eq 0 ] ; then + break + else + sleep 20 + let "icnt= icnt + 1" + fi + if [ $icnt -ge $maxtries ] + then + echo "ABORTING after 1 hour of waiting for gempak grid F$fhr to end." + export err=7 ; err_chk + exit $err + fi + done + + export fhr + + ######################################################## + # Create a script to be poe'd + # + # Note: The number of scripts to be run MUST match the number + # of total_tasks set in the ecf script, or the job will fail. + # +# if [ -f $DATA/poescript ]; then + rm $DATA/poescript +# fi + + fhr=$(printf "%02d" $fhr) + + if [ $do_all -eq 1 ] ; then + do_all=0 + awk '{print $1}' $FIXgempak/gfs_meta > $DATA/tmpscript + else + # + # Do not try to grep out 12, it will grab the 12 from 126. + # This will work as long as we don't need 12 fhr metafiles + # + if [ $fhr -ne 12 ] ; then + grep $fhr $FIXgempak/gfs_meta |awk -F" [0-9]" '{print $1}' > $DATA/tmpscript + fi + fi + + for script in $(cat $DATA/tmpscript) + do + eval "echo $script" >> $DATA/poescript + done + + num=$(cat $DATA/poescript |wc -l) + + while [ $num -lt $numproc ] ; do + echo "hostname" >>poescript + num=$(expr $num + 1) + done + + chmod 775 $DATA/poescript + cat $DATA/poescript + export MP_PGMMODEL=mpmd + export MP_CMDFILE=$DATA/poescript + +# If this is the final fcst hour, alert the +# file to all centers. +# + if [ 10#$fhr -ge $fhend ] ; then + export DBN_ALERT_TYPE=GFS_METAFILE_LAST + fi + + export fend=$fhr + + sleep 20 + ntasks=${NTASKS_META:-$(cat $DATA/poescript | wc -l)} + ptile=${PTILE_META:-4} + threads=${NTHREADS_META:-1} + export OMP_NUM_THREADS=$threads + APRUN="mpiexec -l -n $ntasks -ppn $ntasks --cpu-bind verbose,core cfp" + + APRUN_METACFP=${APRUN_METACFP:-$APRUN} + APRUNCFP=$(eval echo $APRUN_METACFP) + + $APRUNCFP $DATA/poescript + export err=$?; err_chk + + fhr=$(printf "%03d" $fhr) + if [ $fhr -eq 126 ] ; then + let fhr=fhr+6 + else + let fhr=fhr+fhinc + fi +done + +##################################################################### + + +exit +# diff --git a/scripts/exgfs_atmos_goes_nawips.sh b/scripts/exgfs_atmos_goes_nawips.sh new file mode 100755 index 0000000000..583593fef8 --- /dev/null +++ b/scripts/exgfs_atmos_goes_nawips.sh @@ -0,0 +1,121 @@ +#! /usr/bin/env bash + +################################################################### +# echo "----------------------------------------------------" +# echo "exnawips - convert NCEP GRIB files into GEMPAK Grids" +# echo "----------------------------------------------------" +# echo "History: Mar 2000 - First implementation of this new script." +# echo "S Lilly: May 2008 - add logic to make sure that all of the " +# echo " data produced from the restricted ECMWF" +# echo " data on the CCS is properly protected." +# echo "C. Magee: 10/2013 - swap X and Y for rtgssthr Atl and Pac." +##################################################################### + +source "$HOMEgfs/ush/preamble.sh" + +cd $DATA + +cp $FIXgempak/g2varswmo2.tbl g2varswmo2.tbl +cp $FIXgempak/g2vcrdwmo2.tbl g2vcrdwmo2.tbl +cp $FIXgempak/g2varsncep1.tbl g2varsncep1.tbl +cp $FIXgempak/g2vcrdncep1.tbl g2vcrdncep1.tbl + +# +# NAGRIB_TABLE=$FIXgempak/nagrib.tbl +NAGRIB=$GEMEXE/nagrib2 +# + +entry=$(grep "^$RUN2 " $NAGRIB_TABLE | awk 'index($1,"#") != 1 {print $0}') + +if [ "$entry" != "" ] ; then + cpyfil=$(echo $entry | awk 'BEGIN {FS="|"} {print $2}') + garea=$(echo $entry | awk 'BEGIN {FS="|"} {print $3}') + gbtbls=$(echo $entry | awk 'BEGIN {FS="|"} {print $4}') + maxgrd=$(echo $entry | awk 'BEGIN {FS="|"} {print $5}') + kxky=$(echo $entry | awk 'BEGIN {FS="|"} {print $6}') + grdarea=$(echo $entry | awk 'BEGIN {FS="|"} {print $7}') + proj=$(echo $entry | awk 'BEGIN {FS="|"} {print $8}') + output=$(echo $entry | awk 'BEGIN {FS="|"} {print $9}') +else + cpyfil=gds + garea=dset + gbtbls= + maxgrd=4999 + kxky= + grdarea= + proj= + output=T +fi +pdsext=no + +maxtries=180 +fhcnt=$fstart +while [ $fhcnt -le $fend ] ; do + fhr=$(printf "%03d" $fhcnt) + fhcnt3=$(expr $fhr % 3) + + fhr3=$(printf "03d" $fhcnt) + GRIBIN=$COMIN/${model}.${cycle}.${GRIB}${fhr}${EXT} + GEMGRD=${RUN2}_${PDY}${cyc}f${fhr3} + + GRIBIN_chk=$GRIBIN + + icnt=1 + while [ $icnt -lt 1000 ] + do + if [ -r $GRIBIN_chk ] ; then + break + else + sleep 20 + let "icnt=icnt+1" + fi + if [ $icnt -ge $maxtries ] + then + echo "ABORTING after 1 hour of waiting for F$fhr to end." + export err=7 ; err_chk + exit $err + fi + done + + cp $GRIBIN grib$fhr + + export pgm="nagrib_nc F$fhr" + startmsg + + $NAGRIB << EOF + GBFILE = grib$fhr + INDXFL = + GDOUTF = $GEMGRD + PROJ = $proj + GRDAREA = $grdarea + KXKY = $kxky + MAXGRD = $maxgrd + CPYFIL = $cpyfil + GAREA = $garea + OUTPUT = $output + GBTBLS = $gbtbls + GBDIAG = + PDSEXT = $pdsext + l + r +EOF + export err=$?;err_chk + + $GEMEXE/gpend + + cp $GEMGRD $COMOUT/.$GEMGRD + mv $COMOUT/.$GEMGRD $COMOUT/$GEMGRD + if [ $SENDDBN = "YES" ] ; then + $DBNROOT/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ + $COMOUT/$GEMGRD + else + echo "##### DBN_ALERT_TYPE is: ${DBN_ALERT_TYPE} #####" + fi + + let fhcnt=fhcnt+finc +done + +##################################################################### + + +############################### END OF SCRIPT ####################### diff --git a/scripts/exgfs_atmos_grib2_special_npoess.sh b/scripts/exgfs_atmos_grib2_special_npoess.sh new file mode 100755 index 0000000000..23161c2714 --- /dev/null +++ b/scripts/exgfs_atmos_grib2_special_npoess.sh @@ -0,0 +1,186 @@ +#! /usr/bin/env bash + +##################################################################### +# echo "-----------------------------------------------------" +# echo " exglobal_grib2_special_npoess.sh" +# echo " Jan 2008 - Chuang - Produces 1x1 degree special Grib from master." +# echo "-----------------------------------------------------" +##################################################################### + +source "$HOMEgfs/ush/preamble.sh" + +cd $DATA + +############################################################ +# Define Variables: +# ----------------- +# SHOUR is the starting forecast hour. normally 0 except for restarts. +# FHOUR is the ending forecast hour. +# FHINC is the increment hour for each forecast steps. +# FH is the current forecast hour. +# SLEEP_TIME is the number of seconds to sleep before exiting with error. +# SLEEP_INT is the number of seconds to sleep between restrt file checks. +# restart_file is the name of the file to key off of to kick off pgrb +# generation. +############################################################ + +############################################################ +# NO processing Analysis special Files +############################################################ + +# Set type of Interpolation for WGRIB2 +export opt1=' -set_grib_type same -new_grid_winds earth ' +export opt1uv=' -set_grib_type same -new_grid_winds grid ' +export opt21=' -new_grid_interpolation bilinear -if ' +export opt22=":(CSNOW|CRAIN|CFRZR|CICEP|ICSEV):" +export opt23=' -new_grid_interpolation neighbor -fi ' +export opt24=' -set_bitmap 1 -set_grib_max_bits 16 -if ' +export opt25=":(APCP|ACPCP|PRATE|CPRAT):" +export opt26=' -set_grib_max_bits 25 -fi -if ' +export opt27=":(APCP|ACPCP|PRATE|CPRAT|DZDT):" +export opt28=' -new_grid_interpolation budget -fi ' + +SLEEP_LOOP_MAX=$(expr $SLEEP_TIME / $SLEEP_INT) + +############################################################################## +# Specify Forecast Hour Range F000 - F024 for GFS_NPOESS_PGRB2_0P5DEG +############################################################################## +export SHOUR=000 +export FHOUR=024 + +############################################################ +# Loop Through the Post Forecast Files +############################################################ +for (( fhr=$((10#${SHOUR})); fhr <= $((10#${FHOUR})); fhr = fhr + FHINC )); do + + fhr3=$(printf "%03d" "${fhr}") + + ############################### + # Start Looping for the + # existence of the restart files + ############################### + export pgm="postcheck" + ic=1 + while (( ic <= SLEEP_LOOP_MAX )); do + if [[ -f "${COM_ATMOS_GRIB_0p50}/gfs.t${cyc}z.pgrb2b.0p50.f${fhr3}.idx" ]]; then + break + else + ic=$((ic + 1)) + sleep "${SLEEP_INT}" + fi + ############################### + # If we reach this point assume + # fcst job never reached restart + # period and error exit + ############################### + if (( ic == SLEEP_LOOP_MAX )); then + echo "FATAL ERROR: 0p50 grib file not available after max sleep time" + export err=9 + err_chk || exit "${err}" + fi + done + + ###################################################################### + # Process Global NPOESS 0.50 GFS GRID PRODUCTS IN GRIB2 F000 - F024 # + ###################################################################### + paramlist=${PARMproduct}/global_npoess_paramlist_g2 + cp "${COM_ATMOS_GRIB_0p50}/gfs.t${cyc}z.pgrb2.0p50.f${fhr3}" tmpfile2 + cp "${COM_ATMOS_GRIB_0p50}/gfs.t${cyc}z.pgrb2b.0p50.f${fhr3}" tmpfile2b + cat tmpfile2 tmpfile2b > tmpfile + ${WGRIB2} tmpfile | grep -F -f ${paramlist} | ${WGRIB2} -i -grib pgb2file tmpfile + export err=$?; err_chk + + cp pgb2file "${COM_ATMOS_GOES}/${RUN}.${cycle}.pgrb2f${fhr3}.npoess" + + if [[ ${SENDDBN} == "YES" ]]; then + "${DBNROOT}/bin/dbn_alert" MODEL GFS_PGBNPOESS "${job}" \ + "${COM_ATMOS_GOES}/${RUN}.${cycle}.pgrb2f${fhr3}.npoess" + else + msg="File ${RUN}.${cycle}.pgrb2f${fhr3}.npoess not posted to db_net." + postmsg "${msg}" || echo "${msg}" + fi + echo "${PDY}${cyc}${fhr3}" > "${COM_ATMOS_GOES}/${RUN}.t${cyc}z.control.halfdeg.npoess" + rm tmpfile pgb2file + +done + +################################################################ +# Specify Forecast Hour Range F000 - F180 for GOESSIMPGRB files +################################################################ +export SHOUR=000 +export FHOUR=180 + +################################# +# Process GFS PGRB2_SPECIAL_POST +################################# + +for (( fhr=$((10#${SHOUR})); fhr <= $((10#${FHOUR})); fhr = fhr + FHINC )); do + + fhr3=$(printf "%03d" "${fhr}") + + ############################### + # Start Looping for the + # existence of the restart files + ############################### + set +x + export pgm="postcheck" + ic=1 + while (( ic <= SLEEP_LOOP_MAX )); do + if [[ -f "${COM_ATMOS_GOES}/${RUN}.t${cyc}z.special.grb2if${fhr3}.idx" ]]; then + break + else + ic=$((ic + 1)) + sleep "${SLEEP_INT}" + fi + ############################### + # If we reach this point assume + # fcst job never reached restart + # period and error exit + ############################### + if (( ic == SLEEP_LOOP_MAX )); then + echo "FATAL ERROR: Special goes grib file not available after max sleep time" + export err=9 + err_chk || exit "${err}" + fi + done + set_trace + ############################### + # Put restart files into /nwges + # for backup to start Model Fcst + ############################### + cp "${COM_ATMOS_GOES}/${RUN}.t${cyc}z.special.grb2if${fhr3}" masterfile + export grid0p25="latlon 0:1440:0.25 90:721:-0.25" + ${WGRIB2} masterfile ${opt1} ${opt21} ${opt22} ${opt23} ${opt24} ${opt25} ${opt26} \ + ${opt27} ${opt28} -new_grid ${grid0p25} pgb2file + + export gridconus="lambert:253.0:50.0:50.0 214.5:349:32463.0 1.0:277:32463.0" + ${WGRIB2} masterfile ${opt1} ${opt21} ${opt22} ${opt23} ${opt24} ${opt25} ${opt26} \ + ${opt27} ${opt28} -new_grid ${gridconus} pgb2file2 + + ${WGRIB2} pgb2file -s > pgb2ifile + + cp pgb2file "${COM_ATMOS_GOES}/${RUN}.${cycle}.goessimpgrb2.0p25.f${fhr3}" + cp pgb2ifile "${COM_ATMOS_GOES}/${RUN}.${cycle}.goessimpgrb2.0p25.f${fhr3}.idx" + cp pgb2file2 "${COM_ATMOS_GOES}/${RUN}.${cycle}.goessimpgrb2f${fhr3}.grd221" + + if [[ ${SENDDBN} == "YES" ]]; then + "${DBNROOT}/bin/dbn_alert" MODEL GFS_GOESSIMPGB2_0P25 "${job}" \ + "${COM_ATMOS_GOES}/${RUN}.${cycle}.goessimpgrb2.0p25.f${fhr}" + "${DBNROOT}/bin/dbn_alert" MODEL GFS_GOESSIMPGB2_0P25_WIDX "${job}" \ + "${COM_ATMOS_GOES}/${RUN}.${cycle}.goessimpgrb2.0p25.f${fhr}.idx" + "${DBNROOT}/bin/dbn_alert" MODEL GFS_GOESSIMGRD221_PGB2 "${job}" \ + "${COM_ATMOS_GOES}/${RUN}.${cycle}.goessimpgrb2f${fhr}.grd221" + fi + + echo "${PDY}${cyc}${fhr}" > "${COM_ATMOS_GOES}/${RUN}.t${cyc}z.control.goessimpgrb" + rm pgb2file2 pgb2ifile + + if [[ ${SENDECF} == "YES" ]]; then + # TODO Does this even do anything? + export fhour=$(( fhr % 6 )) + fi + +done + + +################## END OF SCRIPT ####################### diff --git a/scripts/exgfs_atmos_grib_awips.sh b/scripts/exgfs_atmos_grib_awips.sh new file mode 100755 index 0000000000..037b4ce191 --- /dev/null +++ b/scripts/exgfs_atmos_grib_awips.sh @@ -0,0 +1,135 @@ +#! /usr/bin/env bash + +###################################################################### +# UTILITY SCRIPT NAME : exgfs_grib_awips.sh +# DATE WRITTEN : 10/04/2004 +# +# Abstract: This utility script produces the GFS AWIPS GRIB +# +# Input: 1 arguments are passed to this script. +# 1st argument - Forecast Hour - format of 2I +# +##################################################################### +# echo "------------------------------------------------" +# echo "JGFS_AWIPS_00/06/12/18 GFS postprocessing" +# echo "------------------------------------------------" +# echo "History: OCT 2004 - First implementation of this new script." +# echo " JUN 2014 - Modified to remove process for AWIPS in GRIB2" +# echo " to script exgfs_grib_awips_g2.sh and this " +# echo " script only process AWIPS GRIB1 (211 and 225)" +# echo " AUG 2015 - Modified for WCOSS phase2" +# echo " FEB 2019 - Removed grid 225" +##################################################################### + +source "${HOMEgfs}/ush/preamble.sh" + +fcsthrs="$1" +num=$# +job_name=${job/[jpt]gfs/gfs} + +if (( num != 1 )); then + echo "" + echo " FATAL ERROR: Incorrect number of arguments " + echo "" + echo "" + echo "Usage: $0 \${fcsthrs} (3 digits) " + echo "" + exit 16 +fi + +cd "${DATA}/awips_g1" || exit 2 + +# "Import" functions used in this script +source "${HOMEgfs}/ush/product_functions.sh" + +############################################### +# Wait for the availability of the pgrb file +############################################### +icnt=1 +while (( icnt < 1000 )); do + if [[ -s "${COM_ATMOS_GRIB_0p25}/${RUN}.${cycle}.pgrb2b.0p25.f${fcsthrs}.idx" ]]; then + break + fi + + sleep 10 + icnt=$((icnt + 1)) + if (( icnt >= 180 )); then + msg="FATAL ERROR: No GFS pgrb2 file after 30 min of waiting" + err_exit "${msg}" + exit 5 + fi +done + +echo " ------------------------------------------" +echo " BEGIN MAKING GFS GRIB1 AWIPS PRODUCTS" +echo " ------------------------------------------" + +set +x +echo " " +echo "###############################################" +echo " Process GFS GRIB1 AWIP PRODUCTS (211) " +echo "###############################################" +echo " " +set_trace + +cp "${COM_ATMOS_GRIB_0p25}/gfs.t${cyc}z.pgrb2.0p25.f${fcsthrs}" "tmpfile2" +cp "${COM_ATMOS_GRIB_0p25}/gfs.t${cyc}z.pgrb2b.0p25.f${fcsthrs}" "tmpfile2b" +cat tmpfile2 tmpfile2b > tmpfile +${WGRIB2} tmpfile | grep -F -f "${PARMproduct}/gfs_awips_parmlist_g2" | \ + ${WGRIB2} -i -grib masterfile tmpfile +scale_dec masterfile +${CNVGRIB} -g21 masterfile masterfile.grib1 + +ln -s masterfile.grib1 fort.11 + +"${HOMEgfs}/exec/overgridid.x" << EOF +255 +EOF + +mv fort.51 "master.grbf${fcsthrs}" +rm fort.11 + +${GRBINDEX} "master.grbf${fcsthrs}" "master.grbif${fcsthrs}" + +############################################################### +# Process GFS GRIB1 AWIP GRIDS 211 PRODUCTS +############################################################### + +DBNALERT_TYPE=GRIB_LOW + +startmsg + +# GRID=211 out to 240 hours: + +export GRID=211 +export FORT11="master.grbf${fcsthrs}" +export FORT31="master.grbif${fcsthrs}" +export FORT51="xtrn.awpgfs${fcsthrs}.${GRID}" +# $MKGFSAWPS < $PARMwmo/grib_awpgfs${fcsthrs}.${GRID} parm=KWBC >> $pgmout 2>errfile +"${HOMEgfs}/exec/mkgfsawps.x" < "${PARMwmo}/grib_awpgfs${fcsthrs}.${GRID}" parm=KWBC >> "${pgmout}" 2>errfile +export err=$?; err_chk +############################## +# Post Files to ${COM_ATMOS_WMO} +############################## + +cp "xtrn.awpgfs${fcsthrs}.${GRID}" "${COM_ATMOS_WMO}/xtrn.awpgfs${fcsthrs}.${GRID}.${job_name}" + +############################## +# Distribute Data +############################## + +if [[ "${SENDDBN}" == 'YES' || "${SENDAWIP}" == 'YES' ]] ; then + "${DBNROOT}/bin/dbn_alert" "${DBNALERT_TYPE}" "${NET}" "${job}" \ + "${COM_ATMOS_WMO}/xtrn.awpgfs${fcsthrs}.${GRID}.${job_name}" +else + echo "File xtrn.awpgfs${fcsthrs}.${GRID}.${job_name} not posted to db_net." +fi + +if [[ -e "${pgmout}" ]] ; then + cat "${pgmout}" +fi + +############################################################################### + + +############## END OF SCRIPT ####################### diff --git a/scripts/exgfs_atmos_nawips.sh b/scripts/exgfs_atmos_nawips.sh new file mode 100755 index 0000000000..ebb509d392 --- /dev/null +++ b/scripts/exgfs_atmos_nawips.sh @@ -0,0 +1,174 @@ +#! /usr/bin/env bash + +################################################################### +# echo "----------------------------------------------------" +# echo "exnawips - convert NCEP GRIB files into GEMPAK Grids" +# echo "----------------------------------------------------" +# echo "History: Mar 2000 - First implementation of this new script." +# echo "S Lilly: May 2008 - add logic to make sure that all of the " +# echo " data produced from the restricted ECMWF" +# echo " data on the CCS is properly protected." +##################################################################### + +source "${HOMEgfs}/ush/preamble.sh" "${2}" + +#### If EMC GFS PARA runs hourly file are not available, The ILPOST +#### will set to 3 hour in EMC GFS PARA. +#### Note: ILPOST default set to 1 +export ILPOST=${ILPOST:-1} + +cd "${DATA}" || exit 1 +RUN2=$1 +fend=$2 +DBN_ALERT_TYPE=$3 +destination=$4 + +DATA_RUN="${DATA}/${RUN2}" +mkdir -p "${DATA_RUN}" +cd "${DATA_RUN}" || exit 1 + +# "Import" functions used in this script +source "${HOMEgfs}/ush/product_functions.sh" + +# +NAGRIB="${GEMEXE}/nagrib2" +# + +cpyfil=gds +garea=dset +gbtbls= +maxgrd=4999 +kxky= +grdarea= +proj= +output=T +pdsext=no + +maxtries=360 +fhcnt=${fstart} +while (( fhcnt <= fend )) ; do + + if mkdir "lock.${fhcnt}" ; then + cd "lock.${fhcnt}" || exit 1 + cp "${FIXgempak}/g2varswmo2.tbl" "g2varswmo2.tbl" + cp "${FIXgempak}/g2vcrdwmo2.tbl" "g2vcrdwmo2.tbl" + cp "${FIXgempak}/g2varsncep1.tbl" "g2varsncep1.tbl" + cp "${FIXgempak}/g2vcrdncep1.tbl" "g2vcrdncep1.tbl" + + fhr=$(printf "%03d" "${fhcnt}") + + GEMGRD="${RUN2}_${PDY}${cyc}f${fhr}" + + # Set type of Interpolation for WGRIB2 + export opt1=' -set_grib_type same -new_grid_winds earth ' + export opt1uv=' -set_grib_type same -new_grid_winds grid ' + export opt21=' -new_grid_interpolation bilinear -if ' + export opt22=":(CSNOW|CRAIN|CFRZR|CICEP|ICSEV):" + export opt23=' -new_grid_interpolation neighbor -fi ' + export opt24=' -set_bitmap 1 -set_grib_max_bits 16 -if ' + export opt25=":(APCP|ACPCP|PRATE|CPRAT):" + export opt26=' -set_grib_max_bits 25 -fi -if ' + export opt27=":(APCP|ACPCP|PRATE|CPRAT|DZDT):" + export opt28=' -new_grid_interpolation budget -fi ' + + case ${RUN2} in + # TODO: Why aren't we interpolating from the 0p25 grids for 35-km and 40-km? + 'gfs_0p50' | 'gfs_0p25') res=${RUN2: -4};; + *) res="1p00";; + esac + + source_var="COM_ATMOS_GRIB_${res}" + export GRIBIN="${!source_var}/${model}.${cycle}.pgrb2.${res}.f${fhr}" + GRIBIN_chk="${!source_var}/${model}.${cycle}.pgrb2.${res}.f${fhr}.idx" + + icnt=1 + while (( icnt < 1000 )); do + if [[ -r "${GRIBIN_chk}" ]] ; then + # File available, wait 5 seconds then proceed + sleep 5 + break + else + # File not available yet, wait 10 seconds and try again + echo "The process is waiting ... ${GRIBIN_chk} file to proceed." + sleep 10 + icnt=$((icnt+1)) + fi + if (( icnt >= maxtries )); then + echo "FATAL ERROR: after 1 hour of waiting for ${GRIBIN_chk} file at F${fhr} to end." + export err=7 ; err_chk + exit "${err}" + fi + done + + case "${RUN2}" in + gfs35_pac) + export gfs35_pac='latlon 130.0:416:0.312 75.125:186:-0.312' + # shellcheck disable=SC2086,SC2248 + "${WGRIB2}" "${GRIBIN}" ${opt1} ${opt21} ${opt22} ${opt23} ${opt24} ${opt25} ${opt26} ${opt27} ${opt28} -new_grid ${gfs35_pac} "grib${fhr}" + trim_rh "grib${fhr}" + ;; + gfs35_atl) + export gfs35_atl='latlon 230.0:480:0.312 75.125:242:-0.312' + # shellcheck disable=SC2086,SC2248 + "${WGRIB2}" "${GRIBIN}" ${opt1} ${opt21} ${opt22} ${opt23} ${opt24} ${opt25} ${opt26} ${opt27} ${opt28} -new_grid ${gfs35_atl} "grib${fhr}" + trim_rh "grib${fhr}" + ;; + gfs40) + export gfs40='lambert:265.0:25.0:25.0 226.541:185:40635.0 12.19:129:40635.0' + # shellcheck disable=SC2086,SC2248 + "${WGRIB2}" "${GRIBIN}" ${opt1uv} ${opt21} ${opt22} ${opt23} ${opt24} ${opt25} ${opt26} ${opt27} ${opt28} -new_grid ${gfs40} "grib${fhr}" + trim_rh "grib${fhr}" + ;; + *) + cp "${GRIBIN}" "grib${fhr}" + esac + + export pgm="nagrib2 F${fhr}" + startmsg + + ${NAGRIB} << EOF +GBFILE = grib${fhr} +INDXFL = +GDOUTF = ${GEMGRD} +PROJ = ${proj} +GRDAREA = ${grdarea} +KXKY = ${kxky} +MAXGRD = ${maxgrd} +CPYFIL = ${cpyfil} +GAREA = ${garea} +OUTPUT = ${output} +GBTBLS = ${gbtbls} +GBDIAG = +PDSEXT = ${pdsext} +l +r +EOF + export err=$?;err_chk + + cpfs "${GEMGRD}" "${destination}/${GEMGRD}" + if [[ ${SENDDBN} == "YES" ]] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" \ + "${destination}/${GEMGRD}" + fi + cd "${DATA_RUN}" || exit 1 + else + if (( fhcnt <= 240 )) ; then + if (( fhcnt < 276 )) && [[ "${RUN2}" = "gfs_0p50" ]] ; then + fhcnt=$((fhcnt+6)) + else + fhcnt=$((fhcnt+12)) + fi + elif ((fhcnt < 120)) && [[ "${RUN2}" = "gfs_0p25" ]] ; then + #### let fhcnt=fhcnt+1 + fhcnt=$((hcnt + ILPOST)) + else + fhcnt=$((ILPOST > finc ? fhcnt+ILPOST : fhcnt+finc )) + fi + fi +done + +"${GEMEXE}/gpend" +##################################################################### + + +############################### END OF SCRIPT ####################### diff --git a/scripts/exgfs_atmos_postsnd.sh b/scripts/exgfs_atmos_postsnd.sh new file mode 100755 index 0000000000..368f001ed0 --- /dev/null +++ b/scripts/exgfs_atmos_postsnd.sh @@ -0,0 +1,135 @@ +#! /usr/bin/env bash + +################################################################ +# Script Name: exgfs_atmos_postsnd.sh.sms +# Script Description: Generate GFS BUFR sounding files +# Script History Log: +# 1) 2003-03-25 Hualu Pan First Implementation +# 2) 2010-05-25 V. Krishna Kumar Modified for the GFS +# resolution upgrade +# 3) 2014-08-01 D. Carlis Updated to vertical structure +# and T1534 Resolution +# 4) 2016-11-01 H. Chuang Update to read new model nems output +# 5) 2017-02-21 Guang Ping Lou setup mpmd to speedup the run +# and 1 & 3 hourly output +# 6) 2018-03-22 Guang Ping Lou Take FV3GFS configuration +# parameters as input; make it work for +# both FV3GFS and GFS +# 7) 2018-07-18 Guang Ping Lou Generalize this version to other platforms +# 8) 2019-10-18 Guang Ping Lou Transition to reading in NetCDF model data +# 9) 2019-12-18 Guang Ping Lou generalizing to reading in NetCDF or nemsio +################################################################ + +source "$HOMEgfs/ush/preamble.sh" + +cd $DATA + +######################################## + +################################################### +## Run meteogram generator for T574 +################################################### +export LEVS=${LEVS:-127} +export STARTHOUR=${STARTHOUR:-00} +export ENDHOUR=${ENDHOUR:-180} +export INCREMENT=12 +export MAKEBUFR=NO +export F00FLAG=YES +export fformat=netcdf +export atmfm="nc" +export logfm="txt" +export NINT1=${FHOUT_HF_GFS:-1} +export NEND1=${FHMAX_HF_GFS:-120} +export NINT3=${FHOUT_GFS:-3} + +rm -f -r "${COM_ATMOS_BUFR}" +mkdir -p "${COM_ATMOS_BUFR}" +GETDIM="${HOMEgfs}/ush/getncdimlen" +LEVS=$(${GETDIM} "${COM_ATMOS_HISTORY}/${RUN}.${cycle}.atmf000.${atmfm}" pfull) +declare -x LEVS + +### Loop for the hour and wait for the sigma and surface flux file: +export FSTART=$STARTHOUR +# +while [ $FSTART -lt $ENDHOUR ] +do +export FINT=$NINT1 + # Define the end hour for the input + export FEND=$(expr $FSTART + $INCREMENT) + if test $FEND -lt 100; then FEND=0$FEND; fi + if [ $FSTART -eq 00 ] + then + export F00FLAG=YES + else + export F00FLAG=NO + fi + + if [ $FEND -eq $ENDHOUR ] + then + export MAKEBUFR=YES + fi + + ic=0 + while [ $ic -lt 1000 ]; do + if [[ ! -f "${COM_ATMOS_HISTORY}/${RUN}.${cycle}.atm.logf${FEND}.${logfm}" ]]; then + sleep 10 + ic=$(expr $ic + 1) + else + break + fi + + if [ $ic -ge 360 ] + then + err_exit "COULD NOT LOCATE logf$FEND file AFTER 1 HOUR" + fi + done + +## 1-hourly output before $NEND1, 3-hourly output after + if [ $FEND -gt $NEND1 ]; then + export FINT=$NINT3 + fi +## $USHbufrsnd/gfs_bufr.sh + $USHbufrsnd/gfs_bufr.sh + + export FSTART=$FEND +done + +############################################################## +# Tar and gzip the individual bufr files and send them to /com +############################################################## +cd "${COM_ATMOS_BUFR}" || exit 2 +tar -cf - . | /usr/bin/gzip > "${RUN}.${cycle}.bufrsnd.tar.gz" +cd "${DATA}" || exit 2 + +######################################## +# Send the single tar file to OSO +######################################## +if [[ "${SENDDBN}" == 'YES' ]]; then + "${DBNROOT}/bin/dbn_alert" MODEL GFS_BUFRSND_TAR "${job}" \ + "${COM_ATMOS_BUFR}/${RUN}.${cycle}.bufrsnd.tar.gz" +fi + +######################################## +# Create Regional Collectives of BUFR data and +# add appropriate WMO Headers. +######################################## +rm -rf poe_col +for (( m = 1; m <10 ; m++ )); do + echo "sh ${USHbufrsnd}/gfs_sndp.sh ${m} " >> poe_col +done + +if [[ ${CFP_MP:-"NO"} == "YES" ]]; then + nl -n ln -v 0 poe_col > cmdfile +else + mv poe_col cmdfile +fi + +cat cmdfile +chmod +x cmdfile + +${APRUN_POSTSNDCFP} cmdfile + +sh "${USHbufrsnd}/gfs_bfr2gpk.sh" + + +############## END OF SCRIPT ####################### diff --git a/scripts/exgfs_awips_20km_1p0deg.sh b/scripts/exgfs_awips_20km_1p0deg.sh deleted file mode 100755 index 8a67c3ffd2..0000000000 --- a/scripts/exgfs_awips_20km_1p0deg.sh +++ /dev/null @@ -1,264 +0,0 @@ -#!/bin/ksh -############################################################################## -# UTILITY SCRIPT NAME : exgfs_awips_20km_1p0deg.sh -# DATE WRITTEN : 11/01/2017 -# -# Abstract: This utility script produces the GFS AWIPS 20km and 1.0 deg -# grids GRIB2 -# -# Input: 1 arguments are passed to this script. -# 1st argument - Forecast Hour - format of 3I (3 digits) -# -############################################################################### -echo "------------------------------------------------" -echo "JGFS_AWIPS_00/06/12/18 GFS postprocessing" -echo "------------------------------------------------" -echo "History: NOV 2017 - First implementation of this new script to " -echo " process GFS AWIPS 20km and 1.0 deg grids products " -echo " " -############################################################################### -fcsthrs="$1" -num=$# -job_name=`echo $job|sed 's/[jpt]gfs/gfs/'` - -if test "$num" -ge 1 -then - echo "" - echo " Appropriate number of arguments were passed" - echo "" -else - echo "" - echo " Number of arguments were not passed " - echo "" - echo "" - echo "Usage: $0 \$fcsthrs (3 digits) " - echo "" - exit 16 -fi - -cd $DATA - -set -x - -############################################### -# Wait for the availability of the pgrb file -############################################### -icnt=1 -while [ $icnt -lt 1000 ] -do - if [ -s $COMIN/${RUN}.${cycle}.pgrb2b.0p25.f$fcsthrs.idx ] - then - break - fi - - sleep 10 - icnt=$((icnt + 1)) - if [ $icnt -ge 180 ] - then - msg="ABORTING after 30 min of waiting for the GFS pgrb2 file!" - err_exit $msg - fi -done - -######################################## -msg="HAS BEGUN!" -postmsg "$jlogfile" "$msg" -######################################## - -echo " ------------------------------------------" -echo " BEGIN MAKING GFS AWIPS PRODUCTS" -echo " ------------------------------------------" - -set +x -echo " " -echo "#######################################" -echo " Process GRIB AWIP GRIB2 PRODUCTS " -echo "#######################################" -echo " " -set -x - -# Set type of Interpolation for WGRIB2 -export opt1=' -set_grib_type same -new_grid_winds earth ' -export opt1uv=' -set_grib_type same -new_grid_winds grid ' -export opt21=' -new_grid_interpolation bilinear -if ' -export opt22=":(CSNOW|CRAIN|CFRZR|CICEP|ICSEV):" -export opt23=' -new_grid_interpolation neighbor -fi ' -export opt24=' -set_bitmap 1 -set_grib_max_bits 16 -if ' -export opt25=":(APCP|ACPCP|PRATE|CPRAT):" -export opt26=' -set_grib_max_bits 25 -fi -if ' -export opt27=":(APCP|ACPCP|PRATE|CPRAT|DZDT):" -export opt28=' -new_grid_interpolation budget -fi ' -export TRIMRH=${TRIMRH:-$USHgfs/trim_rh.sh} - -############################################################### -# Process GFS GRIB AWIP PRODUCTS IN GRIB2 # -############################################################### - -cp $COMIN/gfs.t${cyc}z.pgrb2.0p25.f${fcsthrs} tmpfile2${fcsthrs} -cp $COMIN/gfs.t${cyc}z.pgrb2b.0p25.f${fcsthrs} tmpfile2b${fcsthrs} -cat tmpfile2${fcsthrs} tmpfile2b${fcsthrs} > tmpfile${fcsthrs} -$WGRIB2 tmpfile${fcsthrs} | grep -F -f $PARMproduct/gfs_awips_parmlist_g2 | $WGRIB2 -i -grib masterfile tmpfile${fcsthrs} -export err=$? -if [[ $err -ne 0 ]] ; then - echo " File: masterfile does not exist." - exit $err -fi - -$WGRIB2 masterfile -match ":PWAT:entire atmosphere" -grib gfs_pwat.grb -$WGRIB2 masterfile | grep -v ":PWAT:entire atmosphere" | $WGRIB2 -i -grib temp_gfs masterfile -################################################################## -# Process to change PWAT from level 200 to 10 (Entire Atmosphere) -# in production defintion template (PDT) 4.0 -################################################################## -$WGRIB2 gfs_pwat.grb -set_byte 4 23 10 -grib gfs_pwat_levels_10.grb -export err=$?; err_chk - -cat temp_gfs gfs_pwat_levels_10.grb > tmp_masterfile - -for GRID in conus ak prico pac 003 -do - case $GRID in - conus) - # Grid 20km_conus - CONUS - 20 km Quadruple Resolution (Lambert Conformal) - # export grid_20km_conus="30 6 0 0 0 0 0 0 369 257 12190000 226541000 8 25000000 265000000 20318000 20318000 0 64 25000000 25000000 0 0" - # $COPYGB2 -g "$grid_20km_conus" -i0 -x tmp_masterfile awps_file_f${fcsthrs}_${GRID} - - export gridconus="lambert:265.0:25.0:25.0 226.541:369:20318.0 12.19:257:20318.0" - $WGRIB2 tmp_masterfile $opt1uv $opt21 $opt22 $opt23 $opt24 $opt25 $opt26 $opt27 $opt28 -new_grid $gridconus awps_file_f${fcsthrs}_${GRID} - ;; - ak) - # Grid 20km_ak - Alaska - Double Resolution (Polar Stereographic) - # Redefined grid 217 for Alaska region - # export grid_20km_ak="20 6 0 0 0 0 0 0 277 213 30000000 187000000 8 60000000 225000000 22500000 22500000 0 64" - # $COPYGB2 -g "$grid_20km_ak" -i0 -x tmp_masterfile awps_file_f${fcsthrs}_${GRID} - - export gridak="nps:210.0:60.0 170.0:277:22500 35.0:225:22500" - $WGRIB2 tmp_masterfile $opt1uv $opt21 $opt22 $opt23 $opt24 $opt25 $opt26 $opt27 $opt28 -new_grid $gridak awps_file_f${fcsthrs}_${GRID} - ;; - prico) - # Grid 20km_prico - 0.25 degree Lat/Lon grid for Puerto Rico (20km) - # export grid_20km_prico="0 6 0 0 0 0 0 0 275 205 0 0 50750000 271750000 48 -250000 340250000 250000 250000 0" - # $COPYGB2 -g "$grid_20km_prico" -i0 -x tmp_masterfile awps_file_f${fcsthrs}_${GRID} - - export gridprico="latlon 271.75:275:0.25 50.75:205:-0.25" - $WGRIB2 tmp_masterfile $opt1 $opt21 $opt22 $opt23 $opt24 $opt25 $opt26 $opt27 $opt28 -new_grid $gridprico awps_file_f${fcsthrs}_${GRID} - ;; - pac) - # Grid 20km_pac - 20 km Mercator grid for Pacific Region - # export grid_20km_pac="10 6 0 0 0 0 0 0 837 692 -45000000 110000000 48 20000000 65720000 270000000 64 0 20000000 20000000" - # NEW export grid_20km_pac="10 6 0 0 0 0 0 0 837 725 -45000000 110000000 48 20000000 65734500 270000000 64 0 20000000 20000000" - # $COPYGB2 -g "$grid_20km_pac" -i0 -x tmp_masterfile awps_file_f${fcsthrs}_${GRID} - - export gridpac="mercator:20.0 110.0:837:20000:270.0 -45.0:725:20000:65.7345" - $WGRIB2 tmp_masterfile $opt1 $opt21 $opt22 $opt23 $opt24 $opt25 $opt26 $opt27 $opt28 -new_grid $gridpac awps_file_f${fcsthrs}_${GRID} - ;; - 003) - ###################################################################### - # Process GFS GRIB AWIP 1.0 DEGREE (GRID 003) PRODUCTS IN GRIB2 # - ###################################################################### - export grid003="latlon 0:360:1.0 90:181:-1.0" - $WGRIB2 tmp_masterfile $opt1 $opt21 $opt22 $opt23 $opt24 $opt25 $opt26 $opt27 $opt28 -new_grid $grid003 awps_file_f${fcsthrs}_${GRID} - ;; - esac - $TRIMRH awps_file_f${fcsthrs}_${GRID} - $GRB2INDEX awps_file_f${fcsthrs}_${GRID} awps_file_fi${fcsthrs}_${GRID} - -########################################################################### -# Checking fields in awps_file_f${fcsthrs}_${GRID} file -# before TOCGRIB2 adding WMO headers for AWIPS products. -# -# NOTE: numparm is the total of fields in grib2_awpgfs_20km_conusf000 file -########################################################################### -numparm=247 -numrec=` $WGRIB2 awps_file_f${fcsthrs}_${GRID} | wc -l ` - -if [ $numrec -lt $numparm ] -then - msg="ABORTING : awps_file_f${fcsthrs}_${GRID} file is missing fields for AWIPS !" - err_exit $msg -fi - -# Processing AWIPS GRIB2 grids with WMO headers - - pgm=tocgrib2 - export pgm; prep_step - startmsg - - if [ $GRID = "003" -a `expr ${fcsthrs} % 6` -eq 0 ] ; then - export FORT11=awps_file_f${fcsthrs}_${GRID} - export FORT31=awps_file_fi${fcsthrs}_${GRID} - export FORT51=grib2.awpgfs${fcsthrs}.${GRID} - - $TOCGRIB2 < $PARMwmo/grib2_awpgfs${fcsthrs}.${GRID} >> $pgmout 2> errfile - export err=$?; err_chk - echo " error from tocgrib2=",$err - - if [ $SENDCOM = "YES" ] ; then - ############################## - # Post Files to ${COMOUTwmo} - ############################## - - mv grib2.awpgfs${fcsthrs}.${GRID} ${COMOUTwmo}/grib2.awpgfs${fcsthrs}.${GRID}.gfs_awips_f${fcsthrs}_1p0deg_${cyc} - - ############################## - # Distribute Data - ############################## - - if [ "$SENDDBN" = 'YES' -o "$SENDAWIP" = 'YES' ] ; then - $DBNROOT/bin/dbn_alert NTC_LOW $NET $job ${COMOUTwmo}/grib2.awpgfs${fcsthrs}.${GRID}.gfs_awips_f${fcsthrs}_1p0deg_${cyc} - else - msg="File ${COMOUTwmo}/grib2.awpgfs${fcsthrs}.${GRID}.gfs_awips_f${fcsthrs}_1p0deg_${cyc} not posted to db_net." - postmsg "$jlogfile" "$msg" - fi - fi - elif [ $GRID != "003" ] ; then - export FORT11=awps_file_f${fcsthrs}_${GRID} - export FORT31=awps_file_fi${fcsthrs}_${GRID} - export FORT51=grib2.awpgfs_20km_${GRID}_f${fcsthrs} - - $TOCGRIB2 < $PARMwmo/grib2_awpgfs_20km_${GRID}f${fcsthrs} >> $pgmout 2> errfile - export err=$? ;err_chk - echo " error from tocgrib2=",$err - - if [ $SENDCOM = "YES" ] ; then - - ############################## - # Post Files to ${COMOUTwmo} - ############################## - - mv grib2.awpgfs_20km_${GRID}_f${fcsthrs} ${COMOUTwmo}/grib2.awpgfs_20km_${GRID}_f${fcsthrs}.$job_name - - ############################## - # Distribute Data - ############################## - - if [ "$SENDDBN" = 'YES' -o "$SENDAWIP" = 'YES' ] ; then - $DBNROOT/bin/dbn_alert NTC_LOW $NET $job ${COMOUTwmo}/grib2.awpgfs_20km_${GRID}_f${fcsthrs}.$job_name - else - msg="File ${COMOUTwmo}/grib2.awpgfs_20km_${GRID}_f${fcsthrs}.$job_name not posted to db_net." - postmsg "$jlogfile" "$msg" - fi - fi - fi - msg="Awip Processing ${fcsthrs} hour completed normally" - postmsg "$jlogfile" "$msg" - -done - -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - -############################################################################################ -# GOOD RUN -set +x -echo "**************JOB EXGFS_AWIPS_20KM_1P0DEG.SH.ECF COMPLETED NORMALLY ON THE WCOSS" -echo "**************JOB EXGFS_AWIPS_20KM_1P0DEG.SH.ECF COMPLETED NORMALLY ON THE WCOSS" -echo "**************JOB EXGFS_AWIPS_20KM_1P0DEG.SH.ECF COMPLETED NORMALLY ON THE WCOSS" -set -x -############################################################################################ - -msg="HAS COMPLETED NORMALLY!" -postmsg "$jlogfile" "$msg" - -############## END OF SCRIPT ####################### diff --git a/scripts/exgfs_fbwind.sh b/scripts/exgfs_fbwind.sh deleted file mode 100755 index 81191fe816..0000000000 --- a/scripts/exgfs_fbwind.sh +++ /dev/null @@ -1,116 +0,0 @@ -#!/bin/ksh -echo "------------------------------------------------" -echo "JGFS_BULLS - 24hr GFS processing" -echo "------------------------------------------------" -echo "History: Jul 2004 - First implementation of this new script." -echo " FBWNDGFS (FB Winds) program for 15 sites outside" -echo " the Hawaiian Islands." -echo " Feb 2006 - L Sager Send bulletins to TOC via NTC. " -echo " Jul 2014 - B Vuong Modified to use GFS master GRIB2" -echo " and Add bulletins WINTEMV process." -echo " Sep 2016 - B Vuong Modified to use GFS 0p25 deg GRIB2" -echo " Nov 2019 - B Vuong Removed WINTEMV bulletin (retired)" -##################################################################### - -cd $DATA - -###################### -# Set up Here Files. -###################### - -set -x -msg="Begin job for $job" -postmsg "$jlogfile" "$msg" - -job_name=`echo $job|sed 's/[jpt]gfs/gfs/'` - -set +x -echo " " -echo "#############################################################" -echo " Process Bulletins of forecast winds and temps for Hawaii " -echo " and 15 sites outside of the Hawaiian Islands. " -echo "#############################################################" -echo " " -set -x - -export pgm=bulls_fbwndgfs -. prep_step - -for fhr in 006 012 024 -do - - cp $COMIN/gfs.${cycle}.pgrb2.0p25.f${fhr} tmp_pgrb2_0p25${fhr} - cp $COMIN/gfs.${cycle}.pgrb2b.0p25.f${fhr} tmp_pgrb2b_0p25${fhr} - cat tmp_pgrb2_0p25${fhr} tmp_pgrb2b_0p25${fhr} > tmp0p25filef${fhr} - $WGRIB2 tmp0p25filef${fhr} | grep -F -f $PARMproduct/gfs_fbwnd_parmlist_g2 | $WGRIB2 -i -grib tmpfilef${fhr} tmp0p25filef${fhr} - $CNVGRIB -g21 tmpfilef${fhr} tmpfilef${fhr}.grib1 - $GRBINDEX tmpfilef${fhr}.grib1 tmpfilef${fhr}.grib1i - mv tmpfilef${fhr}.grib1 gfs.t${cyc}z.grbf${fhr}_grb1 - mv tmpfilef${fhr}.grib1i gfs.t${cyc}z.grbif${fhr}_grb1 - -done - -export FORT11="gfs.t${cyc}z.grbf006_grb1" -export FORT12="gfs.t${cyc}z.grbf012_grb1" -export FORT13="gfs.t${cyc}z.grbf024_grb1" - -# GFS grib index files - -export FORT31="gfs.t${cyc}z.grbif006_grb1" -export FORT32="gfs.t${cyc}z.grbif012_grb1" -export FORT33="gfs.t${cyc}z.grbif024_grb1" - -# -# 1280 byte transmission file -# - -export FORT51="tran.fbwnd_pacific" - -startmsg - -$EXECgfs/fbwndgfs < $PARMproduct/fbwnd_pacific.stnlist >> $pgmout 2> errfile -export err=$?; err_chk - -if test "$SENDCOM" = 'YES' -then - cp tran.fbwnd_pacific ${COMOUTwmo}/tran.fbwnd_pacific.$job_name -fi - -if test "$SENDDBN" = 'YES' -then -# make_ntc_bull.pl WMOBH NONE KWNO NONE tran.fbwnd_pacific ${COMOUTwmo}/tran.fbwnd_pacific.$job_name - ${UTILgfs}/ush/make_ntc_bull.pl WMOBH NONE KWNO NONE tran.fbwnd_pacific ${COMOUTwmo}/tran.fbwnd_pacific.$job_name -fi - -# -# EMC is proposing to retire WINTEMV bulletin in GFS v16.0 -# - -# if test ${cycle} = 't00z' -o ${cycle} = 't12z' -# then -# -# set +x -# echo " " -# echo "#################################################" -# echo " Process 06, 12, 18 and 24 fcsthrs WINTEM Bulletins. " -# echo "#################################################" -# echo " " -# set -x -# sh $USHgfs/mkwintem.sh -# -#fi - -##################################################################### -# GOOD RUN -set +x -echo "**************JOB JGFS_FBWIND COMPLETED NORMALLY ON IBM-SP" -echo "**************JOB JGFS_FBWIND COMPLETED NORMALLY ON IBM-SP" -echo "**************JOB JGFS_FBWIND COMPLETED NORMALLY ON IBM-SP" -set -x -##################################################################### - -msg='Job completed normally.' -echo $msg -postmsg "$jlogfile" "$msg" - -############################### END OF SCRIPT ####################### diff --git a/scripts/exgfs_gempak_meta.sh b/scripts/exgfs_gempak_meta.sh deleted file mode 100755 index 65c292c8e5..0000000000 --- a/scripts/exgfs_gempak_meta.sh +++ /dev/null @@ -1,152 +0,0 @@ -#!/bin/ksh - -set -x - -msg="JOB $job HAS BEGUN" -postmsg "$jlogfile" "$msg" - -cd $DATA - -GEMGRD1=${RUN}_${PDY}${cyc}f -#find out what fcst hr to start processing -fhr=$fhend - -export numproc=23 - -while [ $fhr -ge $fhbeg ] ; do - typeset -Z3 fhr - ls -l $COMIN/$GEMGRD1${fhr} - err1=$? - if [ $err1 -eq 0 -o $fhr -eq $fhbeg ] ; then - break - fi - fhr=`expr $fhr - $fhinc` -done - -maxtries=180 -first_time=0 -do_all=0 - -#loop through and process needed forecast hours -while [ $fhr -le $fhend ] -do - # - # First check to see if this is a rerun. If so make all Meta files - if [ $fhr -gt 126 -a $first_time -eq 0 ] ; then - do_all=1 - fi - first_time=1 - - if [ $fhr -eq 120 ] ; then - fhr=126 - fi - icnt=1 - - while [ $icnt -lt 1000 ] - do - ls -l $COMIN/$GEMGRD1${fhr} - err1=$? - if [ $err1 -eq 0 ] ; then - break - else - sleep 20 - let "icnt= icnt + 1" - fi - if [ $icnt -ge $maxtries ] - then - msg="ABORTING after 1 hour of waiting for gempak grid F$fhr to end." - postmsg "${jlogfile}" "$msg" - export err=7 ; err_chk - exit $err - fi - done - - export fhr - - ######################################################## - # Create a script to be poe'd - # - # Note: The number of scripts to be run MUST match the number - # of total_tasks set in the ecf script, or the job will fail. - # -# if [ -f $DATA/poescript ]; then - rm $DATA/poescript -# fi - - if [ $fhr -lt 100 ] ; then - typeset -Z2 fhr - fi - - if [ $do_all -eq 1 ] ; then - do_all=0 - awk '{print $1}' $FIXgempak/gfs_meta > $DATA/tmpscript - else - # - # Do not try to grep out 12, it will grab the 12 from 126. - # This will work as long as we don't need 12 fhr metafiles - # - if [ $fhr -ne 12 ] ; then - grep $fhr $FIXgempak/gfs_meta |awk -F" [0-9]" '{print $1}' > $DATA/tmpscript - fi - fi - - for script in `cat $DATA/tmpscript` - do - eval "echo $script" >> $DATA/poescript - done - - num=`cat $DATA/poescript |wc -l` - - while [ $num -lt $numproc ] ; do - echo "hostname" >>poescript - num=`expr $num + 1` - done - - chmod 775 $DATA/poescript - cat $DATA/poescript - export MP_PGMMODEL=mpmd - export MP_CMDFILE=$DATA/poescript - -# If this is the final fcst hour, alert the -# file to all centers. -# - if [ $fhr -ge $fhend ] ; then - export DBN_ALERT_TYPE=GFS_METAFILE_LAST - fi - - export fend=$fhr - - sleep 20 -# mpirun.lsf - ntasks=${NTASKS_META:-$(cat $DATA/poescript | wc -l)} - ptile=${PTILE_META:-4} - threads=${NTHREADS_META:-1} - export OMP_NUM_THREADS=$threads - APRUN="mpirun -n $ntasks cfp " - - APRUN_METACFP=${APRUN_METACFP:-$APRUN} - APRUNCFP=$(eval echo $APRUN_METACFP) - - $APRUNCFP $DATA/poescript - export err=$?; err_chk - - typeset -Z3 fhr - if [ $fhr -eq 126 ] ; then - let fhr=fhr+6 - else - let fhr=fhr+fhinc - fi -done - -##################################################################### -# GOOD RUN -set +x -echo "**************JOB GFS_META COMPLETED NORMALLY on the IBM-SP" -echo "**************JOB GFS_META COMPLETED NORMALLY on the IBM-SP" -echo "**************JOB GFS_META COMPLETED NORMALLY on the IBM-SP" -set -x -##################################################################### - -echo EXITING $0 -exit -# diff --git a/scripts/exgfs_grib_awips.sh b/scripts/exgfs_grib_awips.sh deleted file mode 100755 index 43c82aac68..0000000000 --- a/scripts/exgfs_grib_awips.sh +++ /dev/null @@ -1,162 +0,0 @@ -#!/bin/ksh -###################################################################### -# UTILITY SCRIPT NAME : exgfs_grib_awips.sh -# DATE WRITTEN : 10/04/2004 -# -# Abstract: This utility script produces the GFS AWIPS GRIB -# -# Input: 1 arguments are passed to this script. -# 1st argument - Forecast Hour - format of 2I -# -##################################################################### -echo "------------------------------------------------" -echo "JGFS_AWIPS_00/06/12/18 GFS postprocessing" -echo "------------------------------------------------" -echo "History: OCT 2004 - First implementation of this new script." -echo " JUN 2014 - Modified to remove process for AWIPS in GRIB2" -echo " to script exgfs_grib_awips_g2.sh and this " -echo " script only process AWIPS GRIB1 (211 and 225)" -echo " AUG 2015 - Modified for WCOSS phase2" -echo " FEB 2019 - Removed grid 225" -##################################################################### -set +x -fcsthrs="$1" -num=$# -job_name=`echo $job|sed 's/[jpt]gfs/gfs/'` - -typeset -Z3 fcsthrs - -export PS4='gfs_grib_awips:f$fcsthrs:$SECONDS + ' - -#if [ $fhcsthrs -t 100 ]; then -# fcsthrs=0$fcsthrs -#fi -if test "$num" -ge 1 -then - echo "" - echo " Appropriate number of arguments were passed" - echo "" -else - echo "" - echo " Number of arguments were not passed " - echo "" - echo "" - echo "Usage: $0 \$fcsthrs (3-digit) " - echo "" - exit 16 -fi - -cd $DATA/awips_g1 - -set -x - -############################################### -# Wait for the availability of the pgrb file -############################################### -icnt=1 -while [ $icnt -lt 1000 ] -do - if [ -s $COMIN/${RUN}.${cycle}.pgrb2b.0p25.f${fcsthrs}.idx ] - then - break - fi - - sleep 10 - icnt=$((icnt + 1)) - if [ $icnt -ge 180 ] - then - msg="ABORTING after 30 min of waiting for the pgrb file!" - err_exit $msg - fi -done - -######################################## -msg="HAS BEGUN!" -postmsg "$jlogfile" "$msg" -######################################## - -echo " ------------------------------------------" -echo " BEGIN MAKING GFS GRIB1 AWIPS PRODUCTS" -echo " ------------------------------------------" - -set +x -echo " " -echo "###############################################" -echo " Process GFS GRIB1 AWIP PRODUCTS (211) " -echo "###############################################" -echo " " -set -x - - cp $COMIN/gfs.t${cyc}z.pgrb2.0p25.f${fcsthrs} tmpfile2 - cp $COMIN/gfs.t${cyc}z.pgrb2b.0p25.f${fcsthrs} tmpfile2b - cat tmpfile2 tmpfile2b > tmpfile - $WGRIB2 tmpfile | grep -F -f $PARMproduct/gfs_awips_parmlist_g2 | $WGRIB2 -i -grib masterfile tmpfile - $CNVGRIB -g21 masterfile masterfile.grib1 - - ln -s masterfile.grib1 fort.11 - -# $OVERGRIDID << EOF - ${UTILgfs}/exec/overgridid << EOF -255 -EOF - - mv fort.51 master.grbf${fcsthrs} - rm fort.11 - - $GRBINDEX master.grbf${fcsthrs} master.grbif${fcsthrs} - -############################################################### -# Process GFS GRIB1 AWIP GRIDS 211 PRODUCTS -############################################################### - - executable=mkgfsawps - DBNALERT_TYPE=GRIB_LOW - - startmsg - -# GRID=211 out to 240 hours: - - export GRID=211 - export FORT11=master.grbf${fcsthrs} - export FORT31=master.grbif${fcsthrs} - export FORT51=xtrn.awpgfs${fcsthrs}.${GRID} -# $MKGFSAWPS < $PARMwmo/grib_awpgfs${fcsthrs}.${GRID} parm=KWBC >> $pgmout 2>errfile - ${UTILgfs}/exec/mkgfsawps < $PARMwmo/grib_awpgfs${fcsthrs}.${GRID} parm=KWBC >> $pgmout 2>errfile - export err=$?; err_chk - ############################## - # Post Files to ${COMOUTwmo} - ############################## - - if test "$SENDCOM" = 'YES' - then - cp xtrn.awpgfs${fcsthrs}.${GRID} ${COMOUTwmo}/xtrn.awpgfs${fcsthrs}.${GRID}.$job_name - - ############################## - # Distribute Data - ############################## - - if [ "$SENDDBN" = 'YES' -o "$SENDAWIP" = 'YES' ] ; then - $DBNROOT/bin/dbn_alert $DBNALERT_TYPE $NET $job ${COMOUTwmo}/xtrn.awpgfs${fcsthrs}.${GRID}.$job_name - else - msg="File $output_grb.$job_name not posted to db_net." - postmsg "$jlogfile" "$msg" - fi - fi - -if [ -e "$pgmout" ] ; then - cat $pgmout -fi - -############################################################################### -# GOOD RUN -set +x -echo "**************JOB EXGFS_GRIB_AWIPS.SH.ECF COMPLETED NORMALLY ON THE IBM" -echo "**************JOB EXGFS_GRIB_AWIPS.SH.ECF COMPLETED NORMALLY ON THE IBM" -echo "**************JOB EXGFS_GRIB_AWIPS.SH.ECF COMPLETED NORMALLY ON THE IBM" -set -x -############################################################################### - -msg="HAS COMPLETED NORMALLY!" -postmsg "$jlogfile" "$msg" - -############## END OF SCRIPT ####################### diff --git a/scripts/exgfs_nawips.sh b/scripts/exgfs_nawips.sh deleted file mode 100755 index bb6d83c45d..0000000000 --- a/scripts/exgfs_nawips.sh +++ /dev/null @@ -1,204 +0,0 @@ -#!/bin/ksh -################################################################### -echo "----------------------------------------------------" -echo "exnawips - convert NCEP GRIB files into GEMPAK Grids" -echo "----------------------------------------------------" -echo "History: Mar 2000 - First implementation of this new script." -echo "S Lilly: May 2008 - add logic to make sure that all of the " -echo " data produced from the restricted ECMWF" -echo " data on the CCS is properly protected." -##################################################################### - -set -xa - -#### If EMC GFS PARA runs hourly file are not available, The ILPOST -#### will set to 3 hour in EMC GFS PARA. -#### Note: ILPOST default set to 1 -export ILPOST=${ILPOST:-1} - -cd $DATA -RUN=$1 -fend=$2 -DBN_ALERT_TYPE=$3 - -export 'PS4=$RUN:$SECONDS + ' - -DATA_RUN=$DATA/$RUN -mkdir -p $DATA_RUN -cd $DATA_RUN - -msg="Begin job for $job" -postmsg "$jlogfile" "$msg" - - -# -NAGRIB=$GEMEXE/nagrib2_nc -# - -cpyfil=gds -garea=dset -gbtbls= -maxgrd=4999 -kxky= -grdarea= -proj= -output=T -pdsext=no - -maxtries=360 -fhcnt=$fstart -while [ $fhcnt -le $fend ] ; do - -if mkdir lock.$fhcnt ; then - cd lock.$fhcnt - cp $FIXgempak/g2varswmo2.tbl g2varswmo2.tbl - cp $FIXgempak/g2vcrdwmo2.tbl g2vcrdwmo2.tbl - cp $FIXgempak/g2varsncep1.tbl g2varsncep1.tbl - cp $FIXgempak/g2vcrdncep1.tbl g2vcrdncep1.tbl - - typeset -Z3 fhr - - fhr=$fhcnt - fhcnt3=`expr $fhr % 3` - - fhr3=$fhcnt - typeset -Z3 fhr3 - - GEMGRD=${RUN}_${PDY}${cyc}f${fhr3} - -# Set type of Interpolation for WGRIB2 - export opt1=' -set_grib_type same -new_grid_winds earth ' - export opt1uv=' -set_grib_type same -new_grid_winds grid ' - export opt21=' -new_grid_interpolation bilinear -if ' - export opt22=":(CSNOW|CRAIN|CFRZR|CICEP|ICSEV):" - export opt23=' -new_grid_interpolation neighbor -fi ' - export opt24=' -set_bitmap 1 -set_grib_max_bits 16 -if ' - export opt25=":(APCP|ACPCP|PRATE|CPRAT):" - export opt26=' -set_grib_max_bits 25 -fi -if ' - export opt27=":(APCP|ACPCP|PRATE|CPRAT|DZDT):" - export opt28=' -new_grid_interpolation budget -fi ' - export TRIMRH=$HOMEgfs/ush/trim_rh.sh - - if [ $RUN = "gfs_0p50" ]; then - export GRIBIN=$COMIN/${model}.${cycle}.pgrb2.0p50.f${fhr} - GRIBIN_chk=$COMIN/${model}.${cycle}.pgrb2.0p50.f${fhr}.idx - elif [ $RUN = "gfs_0p25" -o $RUN = "gdas_0p25" -o $RUN = "gfs35_atl" -o $RUN = "gfs35_pac" -o $RUN = "gfs40" ]; then - export GRIBIN=$COMIN/${model}.${cycle}.pgrb2.0p25.f${fhr} - GRIBIN_chk=$COMIN/${model}.${cycle}.pgrb2.0p25.f${fhr}.idx - else - export GRIBIN=$COMIN/${model}.${cycle}.pgrb2.1p00.f${fhr} - GRIBIN_chk=$COMIN/${model}.${cycle}.pgrb2.1p00.f${fhr}.idx - fi - - icnt=1 - while [ $icnt -lt 1000 ] - do - if [ -r $GRIBIN_chk ] ; then - sleep 5 - break - else - msg="The process is waiting ... ${GRIBIN_chk} file to proceed." - postmsg "${jlogfile}" "$msg" - sleep 10 - let "icnt=icnt+1" - fi - if [ $icnt -ge $maxtries ] - then - msg="ABORTING: after 1 hour of waiting for ${GRIBIN_chk} file at F$fhr to end." - postmsg "${jlogfile}" "$msg" - export err=7 ; err_chk - exit $err - fi - done - -case $RUN in - gfs35_pac) -# $COPYGB2 -g "0 6 0 0 0 0 0 0 416 186 0 0 75125000 130000000 48 17000000 260000000 312000 312000 0" -x $GRIBIN grib$fhr -# NEW define gfs35_pac="0 6 0 0 0 0 0 0 416 186 0 -1 75125000 130000000 48 17405000 259480000 312000 312000 0" -# $COPYGB2 -g "0 6 0 0 0 0 0 0 416 186 0 -1 75125000 130000000 48 17405000 259480000 312000 312000 0" -x $GRIBIN grib$fhr - - export gfs35_pac='latlon 130.0:416:0.312 75.125:186:-0.312' - $WGRIB2 $GRIBIN $opt1 $opt21 $opt22 $opt23 $opt24 $opt25 $opt26 $opt27 $opt28 -new_grid ${gfs35_pac} grib$fhr - $TRIMRH grib$fhr - ;; - gfs35_atl) -# $COPYGB2 -g "0 6 0 0 0 0 0 0 480 242 0 0 75125000 230000000 48 -500000 20000000 312000 312000 0" -x $GRIBIN grib$fhr -# NEW define gfs35_atl="0 6 0 0 0 0 0 0 480 242 0 -1 75125000 230000000 48 -67000 19448000 312000 312000 0" -# $COPYGB2 -g "0 6 0 0 0 0 0 0 480 242 0 -1 75125000 230000000 48 -67000 19448000 312000 312000 0" -x $GRIBIN grib$fhr - - export gfs35_atl='latlon 230.0:480:0.312 75.125:242:-0.312' - $WGRIB2 $GRIBIN $opt1 $opt21 $opt22 $opt23 $opt24 $opt25 $opt26 $opt27 $opt28 -new_grid ${gfs35_atl} grib$fhr - $TRIMRH grib$fhr - ;; - gfs40) -# $COPYGB2 -g "30 6 0 0 0 0 0 0 185 129 12190000 226541000 8 25000000 265000000 40635000 40635000 0 64 25000000 25000000 0 0" -x $GRIBIN grib$fhr - - export gfs40='lambert:265.0:25.0:25.0 226.541:185:40635.0 12.19:129:40635.0' - $WGRIB2 $GRIBIN $opt1uv $opt21 $opt22 $opt23 $opt24 $opt25 $opt26 $opt27 $opt28 -new_grid ${gfs40} grib$fhr - $TRIMRH grib$fhr - ;; - *) - cp $GRIBIN grib$fhr -esac - - export pgm="nagrib2 F$fhr" - startmsg - - $NAGRIB << EOF - GBFILE = grib$fhr - INDXFL = - GDOUTF = $GEMGRD - PROJ = $proj - GRDAREA = $grdarea - KXKY = $kxky - MAXGRD = $maxgrd - CPYFIL = $cpyfil - GAREA = $garea - OUTPUT = $output - GBTBLS = $gbtbls - GBDIAG = - PDSEXT = $pdsext - l - r -EOF - export err=$?;err_chk - - if [ $SENDCOM = "YES" ] ; then - cpfs $GEMGRD $COMOUT/$GEMGRD - if [ $SENDDBN = "YES" ] ; then - $DBNROOT/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - $COMOUT/$GEMGRD - fi - fi - cd $DATA_RUN -else - if [ $fhcnt -ge 240 ] ; then - if [ $fhcnt -lt 276 -a $RUN = "gfs_0p50" ] ; then - let fhcnt=fhcnt+6 - else - let fhcnt=fhcnt+12 - fi - elif [ $fhcnt -lt 120 -a $RUN = "gfs_0p25" ] ; then -#### let fhcnt=fhcnt+1 - let fhcnt=fhcnt+$ILPOST - else - let fhcnt=fhcnt+finc - fi -fi -done - -$GEMEXE/gpend -##################################################################### -# GOOD RUN -set +x -echo "**************JOB $RUN NAWIPS COMPLETED NORMALLY ON THE IBM" -echo "**************JOB $RUN NAWIPS COMPLETED NORMALLY ON THE IBM" -echo "**************JOB $RUN NAWIPS COMPLETED NORMALLY ON THE IBM" -set -x -##################################################################### - -msg='Job completed normally.' -echo $msg -postmsg "$jlogfile" "$msg" - -############################### END OF SCRIPT ####################### diff --git a/scripts/exgfs_pmgr.sh b/scripts/exgfs_pmgr.sh index dcee75dd95..a417bbed55 100755 --- a/scripts/exgfs_pmgr.sh +++ b/scripts/exgfs_pmgr.sh @@ -1,13 +1,14 @@ -#! /bin/ksh +#! /usr/bin/env bash + # # Script name: exgfs_pmgr.sh.sms # # This script monitors the progress of the gfs_fcst job # -set -x + +source "$HOMEgfs/ush/preamble.sh" hour=00 -typeset -Z2 hour TEND=384 TCP=385 @@ -17,15 +18,12 @@ fi while [ $hour -lt $TCP ]; do + hour=$(printf "%02d" $hour) echo $hour >>posthours - if [ $hour -lt 240 ] + if [ 10#$hour -lt 240 ] then - if [ $hour -eq 99 ] - then - typeset -Z3 hour - fi # JY if [ $hour -lt 12 ] - if [ $hour -lt 120 ] + if [ 10#$hour -lt 120 ] then let "hour=hour+1" else @@ -35,7 +33,7 @@ do let "hour=hour+12" fi done -postjobs=`cat posthours` +postjobs=$(cat posthours) # # Wait for all fcst hours to finish @@ -45,7 +43,7 @@ while [ $icnt -lt 1000 ] do for fhr in $postjobs do - fhr3=`printf "%03d" $fhr` + fhr3=$(printf "%03d" $fhr) if [ -s ${COMIN}/gfs.${cycle}.logf${fhr}.txt -o -s ${COMIN}/gfs.${cycle}.logf${fhr3}.txt ] then if [ $fhr -eq 0 ] @@ -54,11 +52,11 @@ do fi ecflow_client --event release_post${fhr} # Remove current fhr from list - postjobs=`echo $postjobs | sed "s/${fhr}//"` + postjobs=$(echo $postjobs | sed "s/${fhr}//") fi done - result_check=`echo $postjobs | wc -w` + result_check=$(echo $postjobs | wc -w) if [ $result_check -eq 0 ] then break @@ -74,6 +72,5 @@ do done -echo Exiting $0 exit diff --git a/scripts/exgfs_postsnd.sh b/scripts/exgfs_postsnd.sh deleted file mode 100755 index 2fc8d91188..0000000000 --- a/scripts/exgfs_postsnd.sh +++ /dev/null @@ -1,185 +0,0 @@ -#!/bin/ksh -################################################################ -# Script Name: exgfs_postsnd.sh.sms -# Script Description: Generate GFS BUFR sounding files -# Script History Log: -# 1) 2003-03-25 Hualu Pan First Implementation -# 2) 2010-05-25 V. Krishna Kumar Modified for the GFS -# resolution upgrade -# 3) 2014-08-01 D. Carlis Updated to vertical structure -# and T1534 Resolution -# 4) 2016-11-01 H. Chuang Update to read new model nems output -# 5) 2017-02-21 Guang Ping Lou setup mpmd to speedup the run -# and 1 & 3 hourly output -# 6) 2018-03-22 Guang Ping Lou Take FV3GFS configuration -# parameters as input; make it work for -# both FV3GFS and GFS -# 7) 2018-07-18 Guang Ping Lou Generalize this version to other platforms -# 8) 2019-10-18 Guang Ping Lou Transition to reading in NetCDF model data -# 9) 2019-12-18 Guang Ping Lou generalizing to reading in NetCDF or nemsio -################################################################ -set -xa - -cd $DATA -######################################## -msg="HAS BEGUN" -#postmsg "$jlogfile" "$msg" -######################################## - -################################################### -## Run meteogram generator for T574 -################################################### -export LEVS=${LEVS:-127} -export STARTHOUR=${STARTHOUR:-00} -export ENDHOUR=${ENDHOUR:-180} -export INCREMENT=12 -export MAKEBUFR=NO -export F00FLAG=YES -export fformat=${OUTPUT_FILE:-netcdf} -if [ $fformat == "netcdf" ] - then -export atmfm="nc" -export logfm="txt" -else -export atmfm="nemsio" -export logfm="nemsio" -fi - - export NINT1=${FHOUT_HF_GFS:-1} - export NEND1=${FHMAX_HF_GFS:-120} - export NINT3=${FHOUT_GFS:-3} - -rm -f -r ${COMOUT}/bufr.${cycle} -mkdir -p ${COMOUT}/bufr.${cycle} - - if [ -f $HOMEgfs/ush/getncdimlen ] - then - GETDIM=$HOMEgfs/ush/getncdimlen - else - GETDIM=$EXECbufrsnd/getncdimlen - fi -if [ $fformat == "netcdf" ] - then -export LEVS=`$GETDIM $COMIN/${RUN}.${cycle}.atmf000.${atmfm} pfull` -else -# Extract number of vertical levels from $STARTHOUR atmospheric file -export NEMSIOGET=${NEMSIOGET:-$EXECbufrsnd/nemsio_get} -fhr3=$(printf %03i $STARTHOUR) -ATMFCS=$COMIN/${RUN}.${cycle}.atmf${fhr3}.nemsio -export LEVS=$($NEMSIOGET $ATMFCS dimz | awk '{print $2}') -fi - -### Loop for the hour and wait for the sigma and surface flux file: -export FSTART=$STARTHOUR -# -while [ $FSTART -lt $ENDHOUR ] -do -export FINT=$NINT1 - # Define the end hour for the input - export FEND=`expr $FSTART + $INCREMENT` - if test $FEND -lt 100; then FEND=0$FEND; fi - if [ $FSTART -eq 00 ] - then - export F00FLAG=YES - else - export F00FLAG=NO - fi - - if [ $FEND -eq $ENDHOUR ] - then - export MAKEBUFR=YES - fi - - ic=0 - while [ $ic -lt 1000 ] - do - if [ ! -f $COMIN/${RUN}.${cycle}.logf$FEND.${logfm} ] - then - sleep 10 - ic=`expr $ic + 1` - else - break - fi - - if [ $ic -ge 360 ] - then - err_exit "COULD NOT LOCATE logf$FEND file AFTER 1 HOUR" - fi - done - -## 1-hourly output before $NEND1, 3-hourly output after - if [ $FEND -gt $NEND1 ]; then - export FINT=$NINT3 - fi -## $USHbufrsnd/gfs_bufr.sh - $USHbufrsnd/gfs_bufr.sh - - export FSTART=$FEND -done - -############################################################## -# Tar and gzip the individual bufr files and send them to /com -############################################################## -cd ${COMOUT}/bufr.${cycle} -tar -cf - . | /usr/bin/gzip > ../${RUN}.${cycle}.bufrsnd.tar.gz -cd $DATA - -######################################## -# Send the single tar file to OSO -######################################## -if test "$SENDDBN" = 'YES' -then - $DBNROOT/bin/dbn_alert MODEL GFS_BUFRSND_TAR $job \ - $COMOUT/${RUN}.${cycle}.bufrsnd.tar.gz -fi - -######################################## -# Create Regional Collectives of BUFR data and -# add appropriate WMO Headers. -######################################## -collect=' 1 2 3 4 5 6 7 8 9' -if [ $machine == "HERA" -o $machine == "JET" ]; then -for m in ${collect} -do -sh $USHbufrsnd/gfs_sndp.sh $m -done - -################################################ -# Convert the bufr soundings into GEMPAK files -################################################ -sh $USHbufrsnd/gfs_bfr2gpk.sh - -else -rm -rf poe_col -for m in ${collect} -do -echo "sh $USHbufrsnd/gfs_sndp.sh $m " >> poe_col -done - -mv poe_col cmdfile - -cat cmdfile -chmod +x cmdfile - -${APRUN_POSTSNDCFP} cmdfile - -sh $USHbufrsnd/gfs_bfr2gpk.sh -fi -################################################ -# Convert the bufr soundings into GEMPAK files -################################################ -##$USHbufrsnd/gfs_bfr2gpk.sh - -##################################################################### -# GOOD RUN -set +x -echo "**************JOB GFS_meteogrm COMPLETED NORMALLY ON THE IBM" -echo "**************JOB GFS_meteogrm COMPLETED NORMALLY ON THE IBM" -echo "**************JOB GFS_meteogrm COMPLETED NORMALLY ON THE IBM" -set -x -##################################################################### - -msg='HAS COMPLETED NORMALLY.' -#postmsg "$jlogfile" "$msg" - -############## END OF SCRIPT ####################### diff --git a/scripts/exgfs_prdgen_manager.sh b/scripts/exgfs_prdgen_manager.sh index 6aaf915baf..7d0a95696b 100755 --- a/scripts/exgfs_prdgen_manager.sh +++ b/scripts/exgfs_prdgen_manager.sh @@ -1,13 +1,14 @@ -#! /bin/ksh +#! /usr/bin/env bash + # # Script name: exgfs_pmgr.sh.sms # # This script monitors the progress of the gfs_fcst job # -set -x + +source "$HOMEgfs/ush/preamble.sh" hour=00 -typeset -Z2 hour TEND=384 TCP=385 @@ -17,13 +18,11 @@ fi while [ $hour -lt $TCP ]; do + hour=$(printf "%02d" $hour) echo $hour >>pgrb2_hours - if [ $hour -lt 240 ] + if [ 10#$hour -lt 240 ] then - if [ $hour -eq 99 ]; then - typeset -Z3 hour - fi - if [ $hour -lt 120 ] + if [ 10#$hour -lt 120 ] then let "hour=hour+1" else @@ -33,7 +32,7 @@ do let "hour=hour+12" fi done -pgrb2_jobs=`cat pgrb2_hours` +pgrb2_jobs=$(cat pgrb2_hours) # # Wait for all fcst hours to finish @@ -51,11 +50,11 @@ do # fi ecflow_client --event release_pgrb2_${fhr} # Remove current fhr from list - pgrb2_jobs=`echo ${pgrb2_jobs} | sed "s/${fhr}//"` + pgrb2_jobs=$(echo ${pgrb2_jobs} | sed "s/${fhr}//") fi done - result_check=`echo ${pgrb2_jobs} | wc -w` + result_check=$(echo ${pgrb2_jobs} | wc -w) if [ $result_check -eq 0 ] then break @@ -71,6 +70,5 @@ do done -echo Exiting $0 exit diff --git a/scripts/exgfs_wave_init.sh b/scripts/exgfs_wave_init.sh index 0183c5bfa9..ce903a2284 100755 --- a/scripts/exgfs_wave_init.sh +++ b/scripts/exgfs_wave_init.sh @@ -1,5 +1,5 @@ -#!/bin/bash -# +#! /usr/bin/env bash + ################################################################################ # # UNIX Script Documentation Block @@ -20,41 +20,35 @@ # # Attributes: # Language: Bourne-again (BASH) shell -# Machine: WCOSS-DELL-P3 # ############################################################################### # # --------------------------------------------------------------------------- # # 0. Preparations + +source "${HOMEgfs}/ush/preamble.sh" + # 0.a Basic modes of operation - set -x - # Use LOUD variable to turn on/off trace. Defaults to YES (on). - export LOUD=${LOUD:-YES}; [[ $LOUD = yes ]] && export LOUD=YES - [[ "$LOUD" != YES ]] && set +x + err=0 cd $DATA - msg="HAS BEGUN on `hostname`" - postmsg "$jlogfile" "$msg" - msg="Starting MWW3 INIT CONFIG SCRIPT for ${CDUMP}wave" - postmsg "$jlogfile" "$msg" - set +x echo ' ' echo ' ********************************' echo ' *** MWW3 INIT CONFIG SCRIPT ***' echo ' ********************************' echo ' Initial configuration script' - echo " Model identifier : ${CDUMP}wave" + echo " Model identifier : ${RUN}wave" echo ' ' - echo "Starting at : `date`" + echo "Starting at : $(date)" echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace # Script will run only if pre-defined NTASKS # The actual work is distributed over these tasks. - if [ -z ${NTASKS} ] + if [ -z ${NTASKS} ] then echo "FATAL ERROR: requires NTASKS to be set " err=1; export err;${errchk} @@ -64,7 +58,7 @@ echo ' ' echo " Script set to run with $NTASKS tasks " echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace # --------------------------------------------------------------------------- # @@ -74,7 +68,7 @@ echo 'Preparing input files :' echo '-----------------------' echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace # 1.a Model definition files @@ -85,23 +79,21 @@ chmod 744 cmdfile # Eliminate duplicate grids - array=($WAVECUR_FID $WAVEICE_FID $WAVEWND_FID $waveuoutpGRD $waveGRD $waveesmfGRD $wavesbsGRD $wavepostGRD $waveinterpGRD) - grdALL=`printf "%s\n" "${array[@]}" | sort -u | tr '\n' ' '` + array=($WAVECUR_FID $WAVEICE_FID $WAVEWND_FID $waveuoutpGRD $waveGRD $waveesmfGRD $wavepostGRD $waveinterpGRD) + grdALL=$(printf "%s\n" "${array[@]}" | sort -u | tr '\n' ' ') - for grdID in ${grdALL} - do - if [ -f "$COMIN/rundata/${CDUMP}wave.mod_def.${grdID}" ] - then + for grdID in ${grdALL}; do + if [[ -f "${COM_WAVE_PREP}/${RUN}wave.mod_def.${grdID}" ]]; then set +x - echo " Mod def file for $grdID found in ${COMIN}/rundata. copying ...." - [[ "$LOUD" = YES ]] && set -x - cp $COMIN/rundata/${CDUMP}wave.mod_def.${grdID} mod_def.$grdID + echo " Mod def file for ${grdID} found in ${COM_WAVE_PREP}. copying ...." + set_trace + cp "${COM_WAVE_PREP}/${RUN}wave.mod_def.${grdID}" "mod_def.${grdID}" else set +x - echo " Mod def file for $grdID not found in ${COMIN}/rundata. Setting up to generate ..." + echo " Mod def file for ${grdID} not found in ${COM_WAVE_PREP}. Setting up to generate ..." echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace if [ -f $FIXwave/ww3_grid.inp.$grdID ] then cp $FIXwave/ww3_grid.inp.$grdID ww3_grid.inp.$grdID @@ -113,10 +105,8 @@ echo ' ' echo " ww3_grid.inp.$grdID copied ($FIXwave/ww3_grid.inp.$grdID)." echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace else - msg="ABNORMAL EXIT: NO INP FILE FOR MODEL DEFINITION FILE" - postmsg "$jlogfile" "$msg" set +x echo ' ' echo '*********************************************************** ' @@ -124,24 +114,23 @@ echo '*********************************************************** ' echo " grdID = $grdID" echo ' ' - echo $msg - [[ "$LOUD" = YES ]] && set -x + set_trace err=2;export err;${errchk} fi - [[ ! -d $COMOUT/rundata ]] && mkdir -m 775 -p $COMOUT/rundata + [[ ! -d "${COM_WAVE_PREP}" ]] && mkdir -m 775 -p "${COM_WAVE_PREP}" if [ ${CFP_MP:-"NO"} = "YES" ]; then echo "$nmoddef $USHwave/wave_grid_moddef.sh $grdID > $grdID.out 2>&1" >> cmdfile else echo "$USHwave/wave_grid_moddef.sh $grdID > $grdID.out 2>&1" >> cmdfile fi - nmoddef=`expr $nmoddef + 1` + nmoddef=$(expr $nmoddef + 1) fi done -# 1.a.1 Execute parallel or serialpoe +# 1.a.1 Execute parallel or serialpoe if [ "$nmoddef" -gt '0' ] then @@ -150,21 +139,20 @@ echo ' ' echo " Generating $nmoddef mod def files" echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace # Set number of processes for mpmd - wavenproc=`wc -l cmdfile | awk '{print $1}'` - wavenproc=`echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))` + wavenproc=$(wc -l cmdfile | awk '{print $1}') + wavenproc=$(echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))) # 1.a.3 Execute the serial or parallel cmdfile set +x echo ' ' - echo " Executing the mod_def command file at : `date`" + echo " Executing the mod_def command file at : $(date)" echo ' ------------------------------------' echo ' ' - [[ "$LOUD" = YES ]] && set -x - + set_trace if [ "$NTASKS" -gt '1' ] then if [ ${CFP_MP:-"NO"} = "YES" ]; then @@ -177,35 +165,31 @@ ./cmdfile exit=$? fi - + if [ "$exit" != '0' ] then set +x echo ' ' - echo '********************************************' - echo '*** POE FAILURE DURING RAW DATA COPYING ***' - echo '********************************************' + echo '********************************************************' + echo '*** FATAL ERROR: POE FAILURE DURING RAW DATA COPYING ***' + echo '********************************************************' echo ' See Details Below ' echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace fi - - fi + + fi # 1.a.3 File check - for grdID in ${grdALL} - do - if [ -f ${COMOUT}/rundata/${CDUMP}wave.mod_def.$grdID ] - then + for grdID in ${grdALL}; do + if [[ -f "${COM_WAVE_PREP}/${RUN}wave.mod_def.${grdID}" ]]; then set +x echo ' ' echo " mod_def.$grdID succesfully created/copied " echo ' ' - [[ "$LOUD" = YES ]] && set -x - else - msg="ABNORMAL EXIT: NO MODEL DEFINITION FILE" - postmsg "$jlogfile" "$msg" + set_trace + else set +x echo ' ' echo '********************************************** ' @@ -213,24 +197,25 @@ echo '********************************************** ' echo " grdID = $grdID" echo ' ' - echo $msg sed "s/^/$grdID.out : /g" $grdID.out - [[ "$LOUD" = YES ]] && set -x + set_trace err=3;export err;${errchk} fi done -# --------------------------------------------------------------------------- # -# 2. Ending +# Copy to other members if needed +if (( NMEM_ENS > 0 )); then + for mem in $(seq -f "%03g" 1 "${NMEM_ENS}"); do + MEMDIR="mem${mem}" YMD=${PDY} HH=${cyc} generate_com COM_WAVE_PREP_MEM:COM_WAVE_PREP_TMPL + mkdir -p "${COM_WAVE_PREP_MEM}" + for grdID in ${grdALL}; do + ${NLN} "${COM_WAVE_PREP}/${RUN}wave.mod_def.${grdID}" "${COM_WAVE_PREP_MEM}/" + done + done +fi - set +x - echo ' ' - echo "Ending at : `date`" - echo ' ' - echo ' *** End of MWW3 Init Config ***' - echo ' ' - [[ "$LOUD" = YES ]] && set -x +# --------------------------------------------------------------------------- # +# 2. Ending - exit $err # End of MWW3 init config script ------------------------------------------- # diff --git a/scripts/exgfs_wave_nawips.sh b/scripts/exgfs_wave_nawips.sh index c03d42e31d..e574ffeabb 100755 --- a/scripts/exgfs_wave_nawips.sh +++ b/scripts/exgfs_wave_nawips.sh @@ -1,20 +1,21 @@ -#!/bin/ksh +#! /usr/bin/env bash + ################################################################### -echo "----------------------------------------------------" -echo "exnawips - convert NCEP GRIB files into GEMPAK Grids" -echo "----------------------------------------------------" -echo "History: Mar 2000 - First implementation of this new script." -echo "Sept 2011 - First implementation of this new script based on" -echo " /nwprod/scripts/exnawips.sh.sms" -echo " March 2020- Modified for GEFSv12.0" +# echo "----------------------------------------------------" +# echo "exnawips - convert NCEP GRIB files into GEMPAK Grids" +# echo "----------------------------------------------------" +# echo "History: Mar 2000 - First implementation of this new script." +# echo "Sept 2011 - First implementation of this new script based on" +# echo " /nwprod/scripts/exnawips.sh.sms" +# echo " March 2020- Modified for GEFSv12.0" # March-2020 Roberto.Padilla@noaa.gov ##################################################################### -set -xa +source "$HOMEgfs/ush/preamble.sh" -export grids=${grids:-'glo_30m at_10m ep_10m wc_10m ao_9km'} #Interpolated grids -#export grids=${grids:-'glo_10m gso_15m ao_9km'} #Native grids -export RUNwave=${RUNwave:-${RUN}${COMPONENT}} +#export grids=${grids:-'glo_30m at_10m ep_10m wc_10m ao_9km'} #Interpolated grids +export grids=${grids:-'glo_30m'} #Native grids +export RUNwave=${RUNwave:-${RUN}wave} export fstart=${fstart:-0} export FHMAX_WAV=${FHMAX_WAV:-180} #180 Total of hours to process export FHMAX_HF_WAV=${FHMAX_HF_WAV:-72} @@ -30,6 +31,7 @@ if [ ! -d $DATA ];then fi cd $DATA +cp $GEMwave/fix/g2varswmo2.tbl . cpyfil=gds garea=dset @@ -50,7 +52,8 @@ while [ $fhcnt -le $FHMAX_WAV ]; do for grid in $grids;do case $grid in ao_9km) grdIDin='arctic.9km' - grdIDout='gfswaveao9km' ;; + #grdIDout='gfswaveao9km' ;; + grdIDout='gfswavearc' ;; at_10m) grdIDin='atlocn.0p16' grdIDout='gfswaveat10m' ;; ep_10m) grdIDin='epacif.0p16' @@ -59,26 +62,47 @@ while [ $fhcnt -le $FHMAX_WAV ]; do grdIDout='gfswavewc10m' ;; glo_30m) grdIDin='global.0p25' grdIDout='gfswavegl30m' ;; -# ao_9km) grdIDin='arctic.9km' -# grdIDout='gfswavea9k' ;; - glo_10m) grdIDin='global.0p25' - grdIDout='gfswaveg16k' ;; + glo_10m) grdIDin='global.0p16' + #grdIDout='gfswaveg16k' ;; + grdIDout='gfswavenh' ;; gso_15m) grdIDin='gsouth.0p25' - grdIDout='gfswaves25k' ;; + #grdIDout='gfswaves25k' ;; + grdIDout='gfswavesh' ;; *) gridIDin= grdIDout= ;; esac - GRIBIN=$COMIN/gridded/$RUNwave.$cycle.$grdIDin.f${fhr}.grib2 + GRIBIN="${COM_WAVE_GRID}/${RUNwave}.${cycle}.${grdIDin}.f${fhr}.grib2" GRIBIN_chk=$GRIBIN.idx - if [ "$grdIDin" = "global.0p25" ] && [ "$grid" = "glo_30m" ]; then - #cp $GRIBIN tempgf.$grdID.f${fhr} - #cp $GRIBIN tempgf.$grdIDin.f${fhr} + + icnt=1 + while [ $icnt -lt 1000 ]; do + if [ -r $GRIBIN_chk ] ; then + break + else + let "icnt=icnt+1" + sleep 20 + fi + if [ $icnt -ge $maxtries ]; then + msg="ABORTING after 5 minutes of waiting for $GRIBIN." + echo ' ' + echo '**************************** ' + echo '*** ERROR : NO GRIB FILE *** ' + echo '**************************** ' + echo ' ' + echo $msg + set_trace + echo "$RUNwave $grdID ${fhr} prdgen $date $cycle : GRIB file missing." >> $wavelog + err=1;export err;${errchk} || exit ${err} + fi + done + + #if [ "$grdIDin" = "global.0p25" && "$grid" = "glo_30m" ]; then + if [ "$grdIDin" = "global.0p25" ]; then $WGRIB2 -lola 0:720:0.5 -90:361:0.5 gribfile.$grdIDout.f${fhr} grib \ $GRIBIN 1> out 2>&1 OK=$? if [ "$OK" != '0' ]; then msg="ABNORMAL EXIT: ERROR IN interpolation the global grid" - postmsg "$jlogfile" "$msg" #set +x echo ' ' echo '************************************************************* ' @@ -86,7 +110,7 @@ while [ $fhcnt -le $FHMAX_WAV ]; do echo '************************************************************* ' echo ' ' echo $msg - #[[ "$LOUD" = YES ]] && set -x + #set_trace echo "$RUNwave $grdID prdgen $date $cycle : error in grbindex." >> $wavelog err=2;export err;err_chk else @@ -97,28 +121,7 @@ while [ $fhcnt -le $FHMAX_WAV ]; do echo $GRIBIN GEMGRD=${grdIDout}_${PDY}${cyc}f${fhr} - icnt=1 - while [ $icnt -lt 1000 ]; do - if [ -r $GRIBIN_chk ] ; then - break - else - let "icnt=icnt+1" - sleep 20 - fi - if [ $icnt -ge $maxtries ]; then - msg="ABORTING after 5 minutes of waiting for $GRIBIN." - postmsg "$jlogfile" "$msg" - echo ' ' - echo '**************************** ' - echo '*** ERROR : NO GRIB FILE *** ' - echo '**************************** ' - echo ' ' - echo $msg - [[ "$LOUD" = YES ]] && set -x - echo "$RUNwave $grdID ${fhr} prdgen $date $cycle : GRIB file missing." >> $wavelog - err=1;export err;${errchk} || exit ${err} - fi - done + cp $GRIBIN grib_$grid startmsg @@ -154,14 +157,11 @@ while [ $fhcnt -le $FHMAX_WAV ]; do gpend fi - if [ $SENDCOM = "YES" ] ; then - cpfs $GEMGRD $COMOUT/$GEMGRD - if [ $SENDDBN = "YES" ] ; then - $DBNROOT/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - $COMOUT/$GEMGRD - else - echo "##### DBN_ALERT is: MODEL ${DBN_ALERT_TYPE} $job $COMOUT/$GEMGRD#####" - fi + cpfs "${GEMGRD}" "${COM_WAVE_GEMPAK}/${GEMGRD}" + if [ $SENDDBN = "YES" ] ; then + "${DBNROOT}/bin/dbn_alert" MODEL "${DBN_ALERT_TYPE}" "${job}" "${COM_WAVE_GEMPAK}/${GEMGRD}" + else + echo "##### DBN_ALERT is: MODEL ${DBN_ALERT_TYPE} ${job} ${COM_WAVE_GEMPAK}/${GEMGRD}#####" fi rm grib_$grid done @@ -173,14 +173,6 @@ while [ $fhcnt -le $FHMAX_WAV ]; do let fhcnt=fhcnt+inc done ##################################################################### -# GOOD RUN -set +x -echo "**************JOB $RUN NAWIPS COMPLETED NORMALLY ON THE IBM" -echo "**************JOB $RUN NAWIPS COMPLETED NORMALLY ON THE IBM" -echo "**************JOB $RUN NAWIPS COMPLETED NORMALLY ON THE IBM" -set -x -##################################################################### -msg='Job completed normally.' -echo $msg -postmsg "$jlogfile" "$msg" + + ############################### END OF SCRIPT ####################### diff --git a/scripts/exgfs_wave_post_gridded_sbs.sh b/scripts/exgfs_wave_post_gridded_sbs.sh new file mode 100755 index 0000000000..af362b1c45 --- /dev/null +++ b/scripts/exgfs_wave_post_gridded_sbs.sh @@ -0,0 +1,440 @@ +#! /usr/bin/env bash + +################################################################################ +# +# UNIX Script Documentation Block +# Script name: exgfs_wave_post_gridded_sbs.sh +# Script description: Creates output products from binary WW3 data +# +# Author: Jose-Henrique Alves Org: NCEP/EMC Date: 2019-12-06 +# Abstract: This script is the postprocessor for the wave component in GFS. +# This version runs side-by-side with the GFS fcst step. +# It executes several scripts forpreparing and creating output data +# as follows: +# +# wave_grib2_sbs.sh : generates GRIB2 files. +# wave_grid_interp_ush.sh : interpolates data from new grids to old grids +# +# Script history log: +# 2019-12-06 J-Henrique Alves: First Version adapted from HTolman post.sh 2007 +# 2020-06-10 J-Henrique Alves: Porting to R&D machine Hera +# 2020-07-31 Jessica Meixner: Removing points, now gridded data only +# +# $Id$ +# +# Attributes: +# Language: Bourne-again (Bash) Shell +# +############################################################################### +# +# --------------------------------------------------------------------------- # +# 0. Preparations + +source "$HOMEgfs/ush/preamble.sh" + +# 0.a Basic modes of operation + + # Set wave model ID tag to include member number + # if ensemble; waveMEMB var empty in deterministic + export WAV_MOD_TAG=${RUN}wave${waveMEMB} + + cd $DATA + + echo "Starting WAVE POSTPROCESSOR SCRIPT for $WAV_MOD_TAG" + + set +x + echo ' ' + echo ' *********************************' + echo ' *** WAVE POSTPROCESSOR SCRIPT ***' + echo ' *********************************' + echo ' ' + echo "Starting at : $(date)" + echo '-------------' + echo ' ' + set_trace + +# Script will run only if pre-defined NTASKS +# The actual work is distributed over these tasks. + if [ -z ${NTASKS} ] + then + echo "FATAL ERROR: requires NTASKS to be set " + err=1; export err;${errchk} + exit $err + fi + +# 0.c Defining model grids + +# 0.c.1 Grids + + export waveGRD=${waveGRD?Var waveGRD Not Set} + +# 0.c.2 extended global grid and rtma transfer grid + export waveinterpGRD=${waveinterpGRD?Var wavepostGRD Not Set} + export wavepostGRD=${wavepostGRD?Var wavepostGRD Not Set} + + + set +x + echo ' ' + echo 'Grid information :' + echo '-------------------' + echo " Native wave grids : $waveGRD" + echo " Interpolated grids : $waveinterpGRD" + echo " Post-process grids : $wavepostGRD" + echo ' ' + set_trace + + export FHRUN=0 + +# --------------------------------------------------------------------------- # +# 1. Get files that are used by most child scripts + + export DOGRB_WAV=${DOGRB_WAV:-'YES'} #Create grib2 files + export DOGRI_WAV=${DOGRI_WAV:-'NO'} #Create interpolated grids + + exit_code=0 + + set +x + echo ' ' + echo 'Preparing input files :' + echo '-----------------------' + set_trace + +# 1.a Model definition files and output files (set up using poe) + +# 1.a.1 Copy model definition files + for grdID in ${waveGRD} ${wavepostGRD} ${waveinterpGRD}; do + if [[ -f "${COM_WAVE_PREP}/${RUN}wave.mod_def.${grdID}" ]]; then + set +x + echo " Mod def file for ${grdID} found in ${COM_WAVE_PREP}. copying ...." + set_trace + + cp -f "${COM_WAVE_PREP}/${RUN}wave.mod_def.${grdID}" "mod_def.${grdID}" + fi + done + +# 1.a.2 Check that model definition files exist + for grdID in ${waveGRD} ${wavepostGRD} ${waveinterpGRD}; do + if [[ ! -f "mod_def.${grdID}" ]]; then + set +x + echo ' ' + echo '*************************************************** ' + echo " FATAL ERROR : NO MOD_DEF FILE mod_def.$grdID " + echo '*************************************************** ' + echo ' ' + set_trace + err=2; export err;${errchk} + exit $err + DOGRB_WAV='NO' + else + set +x + echo "File mod_def.$grdID found. Syncing to all nodes ..." + set_trace + fi + done + + +# 1.b Input template files + + if [ "$DOGRI_WAV" = 'YES' ] + then + for intGRD in $waveinterpGRD + do + if [ -f $PARMwave/${intGRD}_interp.inp.tmpl ] + then + cp -f $PARMwave/${intGRD}_interp.inp.tmpl ${intGRD}_interp.inp.tmpl + fi + + if [ -f ${intGRD}_interp.inp.tmpl ] + then + set +x + echo " ${intGRD}_interp.inp.tmpl copied. Syncing to all nodes ..." + set_trace + else + set +x + echo ' ' + echo '*********************************************** ' + echo '*** ERROR : NO TEMPLATE FOR GRINT INPUT FILE *** ' + echo '*********************************************** ' + echo ' ' + set_trace + echo "${WAV_MOD_TAG} post ${PDY} ${cycle} : GRINT template file missing." + exit_code=1 + DOGRI_WAV='NO' + fi + done + fi + + if [ "$DOGRB_WAV" = 'YES' ] + then + for grbGRD in $waveinterpGRD $wavepostGRD + do + if [ -f $PARMwave/ww3_grib2.${grbGRD}.inp.tmpl ] + then + cp -f $PARMwave/ww3_grib2.${grbGRD}.inp.tmpl ww3_grib2.${grbGRD}.inp.tmpl + fi + + if [ -f ww3_grib2.${grbGRD}.inp.tmpl ] + then + set +x + echo " ww3_grib2.${grbGRD}.inp.tmpl copied. Syncing to all nodes ..." + set_trace + else + set +x + echo ' ' + echo '*********************************************** ' + echo "*** ERROR : NO TEMPLATE FOR ${grbGRD} GRIB INPUT FILE *** " + echo '*********************************************** ' + echo ' ' + set_trace + exit_code=2 + DOGRB_WAV='NO' + fi + done + fi + + +# 1.c Data summary + + set +x + echo ' ' + echo " Input files read and processed at : $(date)" + echo ' ' + echo ' Data summary : ' + echo ' ---------------------------------------------' + echo " Sufficient data for GRID interpolation : $DOGRI_WAV" + echo " Sufficient data for GRIB files : $DOGRB_WAV" + echo ' ' + set_trace + +# --------------------------------------------------------------------------- # +# 2. Make consolidated grib2 file for side-by-side grids and interpolate +# onto extended grids +# +# 2.a Command file set-up + + set +x + echo ' Making command file for sbs grib2 and GRID Interpolation ' + set_trace + +# 1.a.2 Loop over forecast time to generate post files +# When executed side-by-side, serial mode (cfp when run after the fcst step) +# Contingency for RERUN=YES + if [ "${RERUN-NO}" = "YES" ]; then + fhr=$((FHRUN + FHMIN_WAV)) + if [ $FHMAX_HF_WAV -gt 0 ] && [ $FHOUT_HF_WAV -gt 0 ] && [ $fhr -lt $FHMAX_HF_WAV ]; then + FHINCG=$FHOUT_HF_WAV + else + FHINCG=$FHOUT_WAV + fi + fhr=$((fhr + FHINCG)) + else + fhr=$FHMIN_WAV + fi + fhrg=$fhr + iwaitmax=120 # Maximum loop cycles for waiting until wave component output file is ready (fails after max) + while [ $fhr -le $FHMAX_WAV ]; do + + ymdh=$($NDATE $fhr ${PDY}${cyc}) + YMD=$(echo $ymdh | cut -c1-8) + HMS="$(echo $ymdh | cut -c9-10)0000" + YMDHMS=${YMD}${HMS} + FH3=$(printf %03i $fhr) + + fcmdnow=cmdfile.${FH3} + fcmdigrd=icmdfile.${FH3} + mkdir output_$YMDHMS + cd output_$YMDHMS + rm -f ${fcmdnow} ${fcmdigrd} + touch ${fcmdnow} ${fcmdigrd} + + +# Create instances of directories for gridded output + export GRIBDATA=${DATA}/output_$YMDHMS + export GRDIDATA=${DATA}/output_$YMDHMS + +# Gridded data (main part, need to be run side-by-side with forecast + + if [ $fhr = $fhrg ] + then + iwait=0 + for wavGRD in ${waveGRD} ; do + gfile=${COM_WAVE_HISTORY}/${WAV_MOD_TAG}.out_grd.${wavGRD}.${YMD}.${HMS} + while [ ! -s ${gfile} ]; do sleep 10; let iwait=iwait+1; done + if [ $iwait -eq $iwaitmax ]; then + echo '*************************************************** ' + echo " FATAL ERROR : NO RAW FIELD OUTPUT FILE out_grd.$grdID " + echo '*************************************************** ' + echo ' ' + set_trace + echo "${WAV_MOD_TAG} post ${grdID} ${PDY} ${cycle} : field output missing." + err=3; export err;${errchk} + exit $err + fi + ln -s ${gfile} ./out_grd.${wavGRD} + done + + if [ "$DOGRI_WAV" = 'YES' ] + then + nigrd=1 + for grdID in $waveinterpGRD + do + ymdh_int=$($NDATE -${WAVHINDH} $ymdh); dt_int=3600.; n_int=9999 ; + echo "$USHwave/wave_grid_interp_sbs.sh $grdID $ymdh_int $dt_int $n_int > grint_$grdID.out 2>&1" >> ${fcmdigrd}.${nigrd} + if [ "$DOGRB_WAV" = 'YES' ] + then + gribFL=\'$(echo ${OUTPARS_WAV})\' + case $grdID in + glo_15mxt) GRDNAME='global' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; + reg025) GRDNAME='global' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; + glo_025) GRDNAME='global' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; + glo_200) GRDNAME='global' ; GRDRES=2p00 ; GRIDNR=255 ; MODNR=11 ;; + glo_500) GRDNAME='global' ; GRDRES=5p00 ; GRIDNR=255 ; MODNR=11 ;; + glo_30mxt) GRDNAME='global' ; GRDRES=0p50 ; GRIDNR=255 ; MODNR=11 ;; + glo_30m) GRDNAME='global' ; GRDRES=0p50 ; GRIDNR=255 ; MODNR=11 ;; + at_10m) GRDNAME='atlocn' ; GRDRES=0p16 ; GRIDNR=255 ; MODNR=11 ;; + ep_10m) GRDNAME='epacif' ; GRDRES=0p16 ; GRIDNR=255 ; MODNR=11 ;; + wc_10m) GRDNAME='wcoast' ; GRDRES=0p16 ; GRIDNR=255 ; MODNR=11 ;; + ak_10m) GRDNAME='alaska' ; GRDRES=0p16 ; GRIDNR=255 ; MODNR=11 ;; + esac + echo "$USHwave/wave_grib2_sbs.sh $grdID $GRIDNR $MODNR $ymdh $fhr $GRDNAME $GRDRES $gribFL > grib_$grdID.out 2>&1" >> ${fcmdigrd}.${nigrd} + fi + echo "${GRIBDATA}/${fcmdigrd}.${nigrd}" >> ${fcmdnow} + chmod 744 ${fcmdigrd}.${nigrd} + nigrd=$((nigrd+1)) + done + fi + + if [ "$DOGRB_WAV" = 'YES' ] + then + for grdID in ${wavepostGRD} # First concatenate grib files for sbs grids + do + gribFL=\'$(echo ${OUTPARS_WAV})\' + case $grdID in + aoc_9km) GRDNAME='arctic' ; GRDRES=9km ; GRIDNR=255 ; MODNR=11 ;; + ant_9km) GRDNAME='antarc' ; GRDRES=9km ; GRIDNR=255 ; MODNR=11 ;; + glo_10m) GRDNAME='global' ; GRDRES=0p16 ; GRIDNR=255 ; MODNR=11 ;; + gnh_10m) GRDNAME='global' ; GRDRES=0p16 ; GRIDNR=255 ; MODNR=11 ;; + gsh_15m) GRDNAME='gsouth' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; + glo_15m) GRDNAME='global' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; + ao_20m) GRDNAME='arctic' ; GRDRES=0p33 ; GRIDNR=255 ; MODNR=11 ;; + so_20m) GRDNAME='antarc' ; GRDRES=0p33 ; GRIDNR=255 ; MODNR=11 ;; + glo_15mxt) GRDNAME='global' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; + reg025) GRDNAME='global' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; + glo_025) GRDNAME='global' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; + glo_200) GRDNAME='global' ; GRDRES=2p00 ; GRIDNR=255 ; MODNR=11 ;; + glo_500) GRDNAME='global' ; GRDRES=5p00 ; GRIDNR=255 ; MODNR=11 ;; + gwes_30m) GRDNAME='global' ; GRDRES=0p50 ; GRIDNR=255 ; MODNR=10 ;; + esac + echo "$USHwave/wave_grib2_sbs.sh $grdID $GRIDNR $MODNR $ymdh $fhr $GRDNAME $GRDRES $gribFL > grib_$grdID.out 2>&1" >> ${fcmdnow} + done + fi + + fi + + if [ ${CFP_MP:-"NO"} = "YES" ]; then + nfile=0 + ifile=0 + iline=1 + ifirst='yes' + nlines=$( wc -l ${fcmdnow} | awk '{print $1}' ) + while [ $iline -le $nlines ]; do + line=$( sed -n ''$iline'p' ${fcmdnow} ) + if [ -z "$line" ]; then + break + else + if [ "$ifirst" = 'yes' ]; then + echo "#!/bin/sh" > cmdmfile.$nfile + echo "$nfile cmdmfile.$nfile" >> cmdmprog + chmod 744 cmdmfile.$nfile + fi + echo $line >> cmdmfile.$nfile + nfile=$(( nfile + 1 )) + if [ $nfile -eq $NTASKS ]; then + nfile=0 + ifirst='no' + fi + iline=$(( iline + 1 )) + fi + done + fi + + wavenproc=$(wc -l ${fcmdnow} | awk '{print $1}') + wavenproc=$(echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))) + + set +x + echo ' ' + echo " Executing the grib2_sbs scripts at : $(date)" + echo ' ------------------------------------' + echo ' ' + set_trace + + if [ "$wavenproc" -gt '1' ] + then + if [ ${CFP_MP:-"NO"} = "YES" ]; then + ${wavempexec} -n ${wavenproc} ${wave_mpmd} cmdmprog + else + ${wavempexec} ${wavenproc} ${wave_mpmd} ${fcmdnow} + fi + exit=$? + else + chmod 744 ${fcmdnow} + ./${fcmdnow} + exit=$? + fi + + if [ "$exit" != '0' ] + then + set +x + echo ' ' + echo '*************************************' + echo '*** FATAL ERROR: CMDFILE FAILED ***' + echo '*************************************' + echo ' See Details Below ' + echo ' ' + set_trace + err=4; export err;${errchk} + exit $err + fi + + rm -f out_grd.* # Remove large binary grid output files + + cd $DATA + + FHINCG=$(( DTFLD_WAV / 3600 )) + if [ $fhr = $fhrg ] + then +# Check if grib2 file created + ENSTAG="" + if [ ${waveMEMB} ]; then ENSTAG=".${membTAG}${waveMEMB}" ; fi + gribchk="${RUN}wave.${cycle}${ENSTAG}.${GRDNAME}.${GRDRES}.f${FH3}.grib2" + if [ ! -s ${COM_WAVE_GRID}/${gribchk} ]; then + set +x + echo ' ' + echo '********************************************' + echo "*** FATAL ERROR: $gribchk not generated " + echo '********************************************' + echo ' See Details Below ' + echo ' ' + set_trace + err=5; export err;${errchk} + exit $err + fi + if [ $FHMAX_HF_WAV -gt 0 ] && [ $FHOUT_HF_WAV -gt 0 ] && [ $fhr -lt $FHMAX_HF_WAV ]; then + FHINCG=$FHOUT_HF_WAV + else + FHINCG=$FHOUT_WAV + fi + fhrg=$((fhr+FHINCG)) + fi + echo $fhrg + + fhr=$fhrg #loop with out_grd stride + + done + +# --------------------------------------------------------------------------- # +# 7. Ending output + +echo "$exit_code" + +# End of MWW3 prostprocessor script ---------------------------------------- # diff --git a/scripts/exgfs_wave_post_pnt.sh b/scripts/exgfs_wave_post_pnt.sh new file mode 100755 index 0000000000..a7aa957564 --- /dev/null +++ b/scripts/exgfs_wave_post_pnt.sh @@ -0,0 +1,698 @@ +#! /usr/bin/env bash + +################################################################################ +# +# UNIX Script Documentation Block +# Script name: exgfs_wave_post_pnt.sh +# Script description: Creates point output products from binary WW3 data +# +# Author: Jose-Henrique Alves Org: NCEP/EMC Date: 2019-12-06 +# Abstract: This script is the point postprocessor for the wave component in GFS. +# It executes several scripts forpreparing and creating output data +# as follows: +# +# wave_outp_spec.sh : generates spectral data for output locations +# wave_outp_bull.sh : generates bulletins for output locations +# wave_outp_cat.sh : cats the by hour into the single output file +# wave_tar.sh : tars the spectral and bulletin multiple files +# +# Script history log: +# 2019-12-06 J-Henrique Alves: First Version adapted from HTolman post.sh 2007 +# 2020-06-10 J-Henrique Alves: Porting to R&D machine Hera +# 2020-07-30 Jessica Meixner: Points only - no gridded data +# 2020-09-29 Jessica Meixner: optimized by changing loop structures +# +# $Id$ +# +# Attributes: +# Language: Bourne-again (Bash) Shell +# +############################################################################### +# +# --------------------------------------------------------------------------- # +# 0. Preparations + +source "$HOMEgfs/ush/preamble.sh" + +# 0.a Basic modes of operation + + cd $DATA + + # Set wave model ID tag to include member number + # if ensemble; waveMEMB var empty in deterministic + export WAV_MOD_TAG=${CDUMP}wave${waveMEMB} + + echo "HAS BEGUN on $(hostname)" + echo "Starting WAVE PNT POSTPROCESSOR SCRIPT for $WAV_MOD_TAG" + + set +x + echo ' ' + echo ' *************************************' + echo ' *** WAVE PNT POSTPROCESSOR SCRIPT ***' + echo ' *************************************' + echo ' ' + echo "Starting at : $(date)" + echo '-------------' + echo ' ' + set_trace + +# Script will run only if pre-defined NTASKS +# The actual work is distributed over these tasks. + if [ -z ${NTASKS} ] + then + echo "FATAL ERROR: requires NTASKS to be set " + err=1; export err;${errchk} + exit $err + fi + +# 0.c Defining model grids + + waveuoutpGRD=${waveuoutpGRD:?buoyNotSet} + +# 0.c.1 Define a temporary directory for storing ascii point output files +# and flush it + + export STA_DIR=$DATA/station_ascii_files + if [ -d $STA_DIR ] + then + rm -rf ${STA_DIR} + fi + mkdir -p ${STA_DIR} + mkdir -p ${STA_DIR}/spec + mkdir -p ${STA_DIR}/bull + mkdir -p ${STA_DIR}/cbull + mkdir -p ${STA_DIR}/specfhr + mkdir -p ${STA_DIR}/bullfhr + mkdir -p ${STA_DIR}/cbullfhr + + set +x + echo ' ' + echo 'Grid information :' + echo '-------------------' + echo " Output points : $waveuoutpGRD" + echo ' ' + set_trace + +# --------------------------------------------------------------------------- # +# 1. Get files that are used by most child scripts + + exit_code=0 + + set +x + echo ' ' + echo 'Preparing input files :' + echo '-----------------------' + set_trace + +# 1.a Model definition files and output files (set up using poe) + +# 1.a.1 Set up the parallel command tasks + + rm -f cmdfile + touch cmdfile + chmod 744 cmdfile + + set_trace + +# Copy model definition files + iloop=0 + for grdID in ${waveuoutpGRD}; do + if [[ -f "${COM_WAVE_PREP}/${RUN}wave.mod_def.${grdID}" ]]; then + set +x + echo " Mod def file for ${grdID} found in ${COM_WAVE_PREP}. copying ...." + set_trace + + cp -f "${COM_WAVE_PREP}/${RUN}wave.mod_def.${grdID}" "mod_def.${grdID}" + iloop=$((iloop + 1)) + fi + done + + for grdID in $waveuoutpGRD + do + if [ ! -f mod_def.$grdID ] + then + set +x + echo ' ' + echo '*************************************************** ' + echo " FATAL ERROR : NO MOD_DEF FILE mod_def.$grdID " + echo '*************************************************** ' + echo ' ' + set_trace + err=2; export err;${errchk} + exit $err + else + set +x + echo "File mod_def.$grdID found. Syncing to all nodes ..." + set_trace + fi + done + +# 1.c Output locations file + + rm -f buoy.loc + + if [ -f $PARMwave/wave_${NET}.buoys ] + then + cp -f $PARMwave/wave_${NET}.buoys buoy.loc.temp + if [ "$DOBNDPNT_WAV" = YES ]; then + #only do boundary points + sed -n '/^\$.*/!p' buoy.loc.temp | grep IBP > buoy.loc + else + #exclude boundary points + sed -n '/^\$.*/!p' buoy.loc.temp | grep -v IBP > buoy.loc + fi + fi + + if [ -s buoy.loc ] + then + set +x + echo " buoy.loc and buoy.ibp copied and processed ($PARMwave/wave_${NET}.buoys)." + set_trace + else + set +x + echo ' ' + echo '************************************* ' + echo ' FATAL ERROR : NO BUOY LOCATION FILE ' + echo '************************************* ' + echo ' ' + set_trace + err=3; export err;${errchk} + exit $err + DOSPC_WAV='NO' + DOBLL_WAV='NO' + fi + +# 1.d Input template files + + if [ -f $PARMwave/ww3_outp_spec.inp.tmpl ] + then + cp -f $PARMwave/ww3_outp_spec.inp.tmpl ww3_outp_spec.inp.tmpl + fi + + if [ -f ww3_outp_spec.inp.tmpl ] + then + set +x + echo " ww3_outp_spec.inp.tmpl copied. Syncing to all grids ..." + set_trace + else + set +x + echo ' ' + echo '*********************************************** ' + echo '*** ERROR : NO TEMPLATE FOR SPEC INPUT FILE *** ' + echo '*********************************************** ' + echo ' ' + set_trace + exit_code=3 + DOSPC_WAV='NO' + DOBLL_WAV='NO' + fi + + if [ -f $PARMwave/ww3_outp_bull.inp.tmpl ] + then + cp -f $PARMwave/ww3_outp_bull.inp.tmpl ww3_outp_bull.inp.tmpl + fi + + if [ -f ww3_outp_bull.inp.tmpl ] + then + set +x + echo " ww3_outp_bull.inp.tmpl copied. Syncing to all nodes ..." + set_trace + else + set +x + echo ' ' + echo '*************************************************** ' + echo '*** ERROR : NO TEMPLATE FOR BULLETIN INPUT FILE *** ' + echo '*************************************************** ' + echo ' ' + set_trace + exit_code=4 + DOBLL_WAV='NO' + fi + +# 1.e Getting buoy information for points + + if [ "$DOSPC_WAV" = 'YES' ] || [ "$DOBLL_WAV" = 'YES' ] + then + ymdh=$(${NDATE} -"${WAVHINDH}" "${PDY}${cyc}") + tstart="${ymdh:0:8} ${ymdh:8:2}0000" + dtspec=3600. # default time step (not used here) + sed -e "s/TIME/${tstart}/g" \ + -e "s/DT/${dtspec}/g" \ + -e "s/POINT/1/g" \ + -e "s/ITYPE/0/g" \ + -e "s/FORMAT/F/g" \ + ww3_outp_spec.inp.tmpl > ww3_outp.inp + + ln -s mod_def.$waveuoutpGRD mod_def.ww3 + HMS="${cyc}0000" + if [[ -f "${COM_WAVE_HISTORY}/${WAV_MOD_TAG}.out_pnt.${waveuoutpGRD}.${PDY}.${HMS}" ]]; then + ln -s "${COM_WAVE_HISTORY}/${WAV_MOD_TAG}.out_pnt.${waveuoutpGRD}.${PDY}.${HMS}" \ + "./out_pnt.${waveuoutpGRD}" + else + echo '*************************************************** ' + echo " FATAL ERROR : NO RAW POINT OUTPUT FILE out_pnt.${waveuoutpGRD}.${PDY}.${HMS} " + echo '*************************************************** ' + echo ' ' + set_trace + echo "${WAV_MOD_TAG} post ${waveuoutpGRD} ${PDY}${cyc} ${cycle} : field output missing." + err=4; export err;${errchk} + fi + + rm -f buoy_tmp.loc buoy_log.ww3 ww3_oup.inp + ln -fs ./out_pnt.${waveuoutpGRD} ./out_pnt.ww3 + ln -fs ./mod_def.${waveuoutpGRD} ./mod_def.ww3 + export pgm=ww3_outp;. prep_step + $EXECwave/ww3_outp > buoy_lst.loc 2>&1 + export err=$?;err_chk + + + if [ "$err" != '0' ] && [ ! -f buoy_log.ww3 ] + then + pgm=wave_post + set +x + echo ' ' + echo '******************************************** ' + echo '*** FATAL ERROR : ERROR IN ww3_outp *** ' + echo '******************************************** ' + echo ' ' + cat buoy_tmp.loc + echo "$WAV_MOD_TAG post $date $cycle : buoy log file failed to be created." + set_trace + err=5;export err;${errchk} + DOSPC_WAV='NO' + DOBLL_WAV='NO' + exit $err + fi + +# Create new buoy_log.ww3 + cat buoy.loc | awk '{print $3}' | sed 's/'\''//g' > ibp_tags + grep -F -f ibp_tags buoy_log.ww3 > buoy_log.tmp + rm -f buoy_log.dat + mv buoy_log.tmp buoy_log.dat + + grep -F -f ibp_tags buoy_lst.loc > buoy_tmp1.loc + #sed '$d' buoy_tmp1.loc > buoy_tmp2.loc + buoys=$(awk '{ print $1 }' buoy_tmp1.loc) + Nb=$(wc buoy_tmp1.loc | awk '{ print $1 }') + rm -f buoy_tmp1.loc + + if [ -s buoy_log.dat ] + then + set +x + echo 'Buoy log file created. Syncing to all nodes ...' + set_trace + else + set +x + echo ' ' + echo '**************************************** ' + echo '*** ERROR : NO BUOY LOG FILE CREATED *** ' + echo '**************************************** ' + echo ' ' + set_trace + err=6;export err;${errchk} + DOSPC_WAV='NO' + DOBLL_WAV='NO' + fi + + fi + +# 1.f Data summary + + set +x + echo ' ' + echo " Input files read and processed at : $(date)" + echo ' ' + echo ' Data summary : ' + echo ' ---------------------------------------------' + echo " Sufficient data for spectral files : $DOSPC_WAV ($Nb points)" + echo " Sufficient data for bulletins : $DOBLL_WAV ($Nb points)" + echo " Boundary points : $DOBNDPNT_WAV" + echo ' ' + set_trace + +# --------------------------------------------------------------------------- # +# 2. Make files for processing boundary points +# +# 2.a Command file set-up + + set +x + echo ' Making command file for wave post points ' + set_trace + + rm -f cmdfile + touch cmdfile + chmod 744 cmdfile + +# 1.a.2 Loop over forecast time to generate post files + fhr=$FHMIN_WAV + while [ $fhr -le $FHMAX_WAV_PNT ]; do + + echo " Creating the wave point scripts at : $(date)" + ymdh=$($NDATE "${fhr}" "${PDY}${cyc}") + YMD=${ymdh:0:8} + HMS="${ymdh:8:2}0000" + YMDHMS=${YMD}${HMS} + FH3=$(printf %03i ${fhr}) + + rm -f tmpcmdfile.${FH3} + touch tmpcmdfile.${FH3} + mkdir output_$YMDHMS + cd output_$YMDHMS + +# Create instances of directories for spec and gridded output + export SPECDATA=${DATA}/output_$YMDHMS + export BULLDATA=${DATA}/output_$YMDHMS + cp $DATA/mod_def.${waveuoutpGRD} mod_def.${waveuoutpGRD} + + pfile="${COM_WAVE_HISTORY}/${WAV_MOD_TAG}.out_pnt.${waveuoutpGRD}.${YMD}.${HMS}" + if [ -f ${pfile} ] + then + ln -fs ${pfile} ./out_pnt.${waveuoutpGRD} + else + echo " FATAL ERROR : NO RAW POINT OUTPUT FILE out_pnt.$waveuoutpGRD.${YMD}.${HMS} " + echo ' ' + set_trace + err=7; export err;${errchk} + exit $err + fi + + cd $DATA + + if [ "$DOSPC_WAV" = 'YES' ] + then + export dtspec=3600. + for buoy in $buoys + do + echo "$USHwave/wave_outp_spec.sh $buoy $ymdh spec $SPECDATA > $SPECDATA/spec_$buoy.out 2>&1" >> tmpcmdfile.$FH3 + done + fi + + if [ "$DOBLL_WAV" = 'YES' ] + then + export dtspec=3600. + for buoy in $buoys + do + echo "$USHwave/wave_outp_spec.sh $buoy $ymdh bull $SPECDATA > $SPECDATA/bull_$buoy.out 2>&1" >> tmpcmdfile.$FH3 + done + fi + + split -n l/1/10 tmpcmdfile.$FH3 > cmdfile.${FH3}.01 + split -n l/2/10 tmpcmdfile.$FH3 > cmdfile.${FH3}.02 + split -n l/3/10 tmpcmdfile.$FH3 > cmdfile.${FH3}.03 + split -n l/4/10 tmpcmdfile.$FH3 > cmdfile.${FH3}.04 + split -n l/5/10 tmpcmdfile.$FH3 > cmdfile.${FH3}.05 + split -n l/6/10 tmpcmdfile.$FH3 > cmdfile.${FH3}.06 + split -n l/7/10 tmpcmdfile.$FH3 > cmdfile.${FH3}.07 + split -n l/8/10 tmpcmdfile.$FH3 > cmdfile.${FH3}.08 + split -n l/9/10 tmpcmdfile.$FH3 > cmdfile.${FH3}.09 + split -n l/10/10 tmpcmdfile.$FH3 > cmdfile.${FH3}.10 + + rm tmpcmdfile.$FH3 + chmod 744 cmdfile.${FH3}.01 cmdfile.${FH3}.02 cmdfile.${FH3}.03 cmdfile.${FH3}.04 + chmod 744 cmdfile.${FH3}.05 cmdfile.${FH3}.06 cmdfile.${FH3}.07 cmdfile.${FH3}.08 + chmod 744 cmdfile.${FH3}.09 cmdfile.${FH3}.10 + echo "$DATA/cmdfile.${FH3}.01" >> cmdfile + echo "$DATA/cmdfile.${FH3}.02" >> cmdfile + echo "$DATA/cmdfile.${FH3}.03" >> cmdfile + echo "$DATA/cmdfile.${FH3}.04" >> cmdfile + echo "$DATA/cmdfile.${FH3}.05" >> cmdfile + echo "$DATA/cmdfile.${FH3}.06" >> cmdfile + echo "$DATA/cmdfile.${FH3}.07" >> cmdfile + echo "$DATA/cmdfile.${FH3}.08" >> cmdfile + echo "$DATA/cmdfile.${FH3}.09" >> cmdfile + echo "$DATA/cmdfile.${FH3}.10" >> cmdfile + + + FHINCP=$(( DTPNT_WAV / 3600 )) + fhrp=$((fhr+FHINCP)) + fhr=$fhrp # no gridded output, loop with out_pnt stride + + done + + + if [ ${CFP_MP:-"NO"} = "YES" ]; then + nfile=0 + ifile=0 + iline=1 + ifirst='yes' + nlines=$( wc -l cmdfile | awk '{print $1}' ) + while [ $iline -le $nlines ]; do + line=$( sed -n ''$iline'p' cmdfile ) + if [ -z "$line" ]; then + break + else + if [ "$ifirst" = 'yes' ]; then + echo "#!/bin/sh" > cmdmfile.$nfile + echo "$nfile cmdmfile.$nfile" >> cmdmprog + chmod 744 cmdmfile.$nfile + fi + echo $line >> cmdmfile.$nfile + nfile=$(( nfile + 1 )) + if [ $nfile -eq $NTASKS ]; then + nfile=0 + ifirst='no' + fi + iline=$(( iline + 1 )) + fi + done + fi + + wavenproc=$(wc -l cmdfile | awk '{print $1}') + wavenproc=$(echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))) + + set +x + echo ' ' + echo " Executing the wave point scripts at : $(date)" + echo ' ------------------------------------' + echo ' ' + set_trace + + if [ "$wavenproc" -gt '1' ] + then + if [ ${CFP_MP:-"NO"} = "YES" ]; then + ${wavempexec} -n ${wavenproc} ${wave_mpmd} cmdmprog + else + ${wavempexec} ${wavenproc} ${wave_mpmd} cmdfile + fi + exit=$? + else + chmod 744 cmdfile + ./cmdfile + exit=$? + fi + + if [ "$exit" != '0' ] + then + set +x + echo ' ' + echo '*************************************' + echo '*** FATAL ERROR: CMDFILE FAILED ***' + echo '*************************************' + echo ' See Details Below ' + echo ' ' + set_trace + err=8; export err;${errchk} + exit $err + fi + +# 2.b Loop over each buoy to cat the final buoy file for all fhr + + cd $DATA + + echo "Before create cmdfile for cat bouy : $(date)" + rm -f cmdfile.bouy + touch cmdfile.bouy + chmod 744 cmdfile.bouy + CATOUTDIR=${DATA}/pnt_cat_out + mkdir -p ${CATOUTDIR} + + if [ "$DOSPC_WAV" = 'YES' ] + then + for buoy in $buoys + do + echo "$USHwave/wave_outp_cat.sh $buoy $FHMAX_WAV_PNT spec > ${CATOUTDIR}/spec_cat_$buoy.out 2>&1" >> cmdfile.bouy + done + fi + + if [ "$DOBLL_WAV" = 'YES' ] + then + for buoy in $buoys + do + echo "$USHwave/wave_outp_cat.sh $buoy $FHMAX_WAV_PNT bull > ${CATOUTDIR}/bull_cat_$buoy.out 2>&1" >> cmdfile.bouy + done + fi + + if [ ${CFP_MP:-"NO"} = "YES" ]; then + nfile=0 + ifile=0 + iline=1 + ifirst='yes' + nlines=$( wc -l cmdfile.bouy | awk '{print $1}' ) + while [ $iline -le $nlines ]; do + line=$( sed -n ''$iline'p' cmdfile.bouy ) + if [ -z "$line" ]; then + break + else + if [ "$ifirst" = 'yes' ]; then + echo "#!/bin/sh" > cmdfile.bouy.$nfile + echo "$nfile cmdfile.bouy.$nfile" >> cmdmprogbouy + chmod 744 cmdfile.bouy.$nfile + fi + echo $line >> cmdfile.bouy.$nfile + nfile=$(( nfile + 1 )) + if [ $nfile -eq $NTASKS ]; then + nfile=0 + ifirst='no' + fi + iline=$(( iline + 1 )) + fi + done + fi + + wavenproc=$(wc -l cmdfile.bouy | awk '{print $1}') + wavenproc=$(echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))) + + set +x + echo ' ' + echo " Executing the boundary point cat script at : $(date)" + echo ' ------------------------------------' + echo ' ' + set_trace + + if [ "$wavenproc" -gt '1' ] + then + if [ ${CFP_MP:-"NO"} = "YES" ]; then + ${wavempexec} -n ${wavenproc} ${wave_mpmd} cmdmprogbouy + else + ${wavempexec} ${wavenproc} ${wave_mpmd} cmdfile.bouy + fi + exit=$? + else + chmod 744 ${fcmdnow} + ./${fcmdnow} + exit=$? + fi + + if [ "$exit" != '0' ] + then + set +x + echo ' ' + echo '*************************************' + echo '*** FATAL ERROR: CMDFILE FAILED ***' + echo '*************************************' + echo ' See Details Below ' + echo ' ' + set_trace + err=9; export err;${errchk} + exit $err + fi + + +# --------------------------------------------------------------------------- # +# 3. Compress point output data into tar files + +# 3.a Set up cmdfile + + rm -f cmdtarfile + touch cmdtarfile + chmod 744 cmdtarfile + + set +x + echo ' ' + echo ' Making command file for taring all point output files.' + + set_trace + +# 6.b Spectral data files + + if [ ${CFP_MP:-"NO"} = "YES" ]; then nm=0; fi + + if [ ${CFP_MP:-"NO"} = "YES" ] && [ "$DOBLL_WAV" = "YES" ]; then + if [ "$DOBNDPNT_WAV" = YES ]; then + if [ "$DOSPC_WAV" = YES ]; then + echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG ibp $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + nm=$(( nm + 1 )) + fi + if [ "$DOBLL_WAV" = YES ]; then + echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG ibpbull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + nm=$(( nm + 1 )) + echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG ibpcbull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + nm=$(( nm + 1 )) + fi + else + if [ "$DOSPC_WAV" = YES ]; then + echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG spec $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + nm=$(( nm + 1 )) + fi + if [ "$DOBLL_WAV" = YES ]; then + echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG bull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + nm=$(( nm + 1 )) + echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG cbull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + nm=$(( nm + 1 )) + fi + fi + else + if [ "$DOBNDPNT_WAV" = YES ]; then + if [ "$DOSPC_WAV" = YES ]; then + echo "$USHwave/wave_tar.sh $WAV_MOD_TAG ibp $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + fi + if [ "$DOBLL_WAV" = YES ]; then + echo "$USHwave/wave_tar.sh $WAV_MOD_TAG ibpbull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + echo "$USHwave/wave_tar.sh $WAV_MOD_TAG ibpcbull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + fi + else + if [ "$DOSPC_WAV" = YES ]; then + echo "$USHwave/wave_tar.sh $WAV_MOD_TAG spec $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + fi + if [ "$DOBLL_WAV" = YES ]; then + echo "$USHwave/wave_tar.sh $WAV_MOD_TAG bull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + echo "$USHwave/wave_tar.sh $WAV_MOD_TAG cbull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile + fi + fi + fi + + wavenproc=$(wc -l cmdtarfile | awk '{print $1}') + wavenproc=$(echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))) + + set +x + echo ' ' + echo " Executing the wave_tar scripts at : $(date)" + echo ' ------------------------------------' + echo ' ' + set_trace + + if [ "$wavenproc" -gt '1' ] + then + if [ ${CFP_MP:-"NO"} = "YES" ]; then + ${wavempexec} -n ${wavenproc} ${wave_mpmd} cmdtarfile + else + ${wavempexec} ${wavenproc} ${wave_mpmd} cmdtarfile + fi + exit=$? + else + chmod 744 cmdtarfile + ./cmdtarfile + exit=$? + fi + + if [ "$exit" != '0' ] + then + set +x + echo ' ' + echo '*************************************' + echo '*** FATAL ERROR: CMDFILE FAILED ***' + echo '*************************************' + echo ' See Details Below ' + echo ' ' + set_trace + err=10; export err;${errchk} + exit $err + fi + +# --------------------------------------------------------------------------- # +# 4. Ending output + + +exit $exit_code + +# End of MWW3 point prostprocessor script ---------------------------------------- # diff --git a/scripts/exgfs_wave_post_sbs.sh b/scripts/exgfs_wave_post_sbs.sh deleted file mode 100755 index fe37a689bf..0000000000 --- a/scripts/exgfs_wave_post_sbs.sh +++ /dev/null @@ -1,834 +0,0 @@ -#!/bin/bash -# -################################################################################ -# -# UNIX Script Documentation Block -# Script name: exwave_post_sbs.sh -# Script description: Creates output products from binary WW3 data -# -# Author: Jose-Henrique Alves Org: NCEP/EMC Date: 2019-12-06 -# Abstract: This script is the postprocessor for the wave component in GFS. -# This version runs side-by-side with the GFS fcst step. -# It executes several scripts forpreparing and creating output data -# as follows: -# -# wave_grib2_sbs.sh : generates GRIB2 files. -# wave_outp_spec.sh : generates spectral data for output locations. -# wave_outp_bull.sh : generates bulletins for output locations. -# wave_grid_interp_ush.sh : interpolates data from new grids to old grids -# wave_tar.sh : tars the spectral and bulletin multiple files -# -# Script history log: -# 2019-12-06 J-Henrique Alves: First Version adapted from HTolman post.sh 2007 -# 2020-06-10 J-Henrique Alves: Porting to R&D machine Hera -# -# $Id$ -# -# Attributes: -# Language: Bourne-again (Bash) Shell -# Machine: WCOSS-DELL-P3 -# -############################################################################### -# -# --------------------------------------------------------------------------- # -# 0. Preparations -# 0.a Basic modes of operation - - set -x - # Use LOUD variable to turn on/off trace. Defaults to YES (on). - export LOUD=${LOUD:-YES}; [[ $LOUD = yes ]] && export LOUD=YES - [[ "$LOUD" != YES ]] && set +x - - # Set wave model ID tag to include member number - # if ensemble; waveMEMB var empty in deterministic - export WAV_MOD_TAG=${CDUMP}wave${waveMEMB} - - cd $DATA - - postmsg "$jlogfile" "HAS BEGUN on `hostname`" - - msg="Starting WAVE POSTPROCESSOR SCRIPT for $WAV_MOD_TAG" - postmsg "$jlogfile" "$msg" - - set +x - echo ' ' - echo ' *********************************' - echo ' *** WAVE POSTPROCESSOR SCRIPT ***' - echo ' *********************************' - echo ' ' - echo "Starting at : `date`" - echo '-------------' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - -# Script will run only if pre-defined NTASKS -# The actual work is distributed over these tasks. - if [ -z ${NTASKS} ] - then - echo "FATAL ERROR: requires NTASKS to be set " - err=1; export err;${errchk} - exit $err - fi - -# 0.c Defining model grids - - waveuoutpGRD=${waveuoutpGRD:?buoyNotSet} - -# 0.c.1 Grids - - export waveGRD=${waveGRD?Var waveGRD Not Set} - export wavesbsGRD=${wavesbsGRD?Var wavesbsGRD Not Set} - -# 0.c.3 extended global grid and rtma transfer grid - export waveinterpGRD=${waveinterpGRD?Var wavepostGRD Not Set} - export wavepostGRD=${wavepostGRD?Var wavepostGRD Not Set} - -# 0.c.4 Define a temporary directory for storing ascii point output files -# and flush it - - export STA_DIR=$DATA/station_ascii_files - if [ -d $STA_DIR ] - then - rm -rf ${STA_DIR} - fi - mkdir -p ${STA_DIR} - mkdir -p ${STA_DIR}/spec - mkdir -p ${STA_DIR}/ibp - mkdir -p ${STA_DIR}/bull - mkdir -p ${STA_DIR}/cbull - - set +x - echo ' ' - echo 'Grid information :' - echo '-------------------' - echo " Native wave grids : $waveGRD" - echo " Side-by-side grids : $wavesbsGRD" - echo " Interpolated grids : $waveinterpGRD" - echo " Post-process grids : $wavepostGRD" - echo " Output points : $waveuoutpGRD" - echo ' ' - [[ "$LOUD" = YES ]] && set -x - - -# --------------------------------------------------------------------------- # -# 1. Get files that are used by most child scripts - - export DOIBP_WAV='NO' - export DOFLD_WAV='YES' - export DOPNT_WAV='YES' - export DOGRB_WAV='YES' - export DOGRI_WAV='YES' - export DOSPC_WAV='YES' - export DOBLL_WAV='YES' - - exit_code=0 - - set +x - echo ' ' - echo 'Preparing input files :' - echo '-----------------------' - [[ "$LOUD" = YES ]] && set -x - -# 1.a Model definition files and output files (set up using poe) - -# 1.a.1 Set up the parallel command tasks - - rm -f cmdfile - touch cmdfile - chmod 744 cmdfile - - [[ "$LOUD" = YES ]] && set -x - -# Copy model definition files - for grdID in $waveGRD $wavesbsGRD $wavepostGRD $waveinterpGRD $waveuoutpGRD - do - if [ -f "$COMIN/rundata/${CDUMP}wave.mod_def.${grdID}" ] - then - set +x - echo " Mod def file for $grdID found in ${COMIN}/rundata. copying ...." - [[ "$LOUD" = YES ]] && set -x - - cp -f $COMIN/rundata/${CDUMP}wave.mod_def.${grdID} mod_def.$grdID - iloop=`expr $iloop + 1` - fi - done - - for grdID in $waveGRD $wavesbsGRD $wavepostGRD $waveinterpGRD $waveuoutpGRD - do - if [ ! -f mod_def.$grdID ] - then - set +x - echo ' ' - echo '*************************************************** ' - echo " FATAL ERROR : NO MOD_DEF FILE mod_def.$grdID " - echo '*************************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : NO MOD_DEF file mod_def.$grdID" - DOFLD_WAV='NO' - err=2; export err;${errchk} - exit $err - DOGRB_WAV='NO' - else - set +x - echo "File mod_def.$grdID found. Syncing to all nodes ..." - [[ "$LOUD" = YES ]] && set -x - fi - done - -# 1.c Output locations file - - rm -f buoy.loc - - if [ -f $FIXwave/wave_${NET}.buoys ] - then - cp -f $FIXwave/wave_${NET}.buoys buoy.loc.temp -# Reverse grep to exclude IBP points - sed -n '/^\$.*/!p' buoy.loc.temp | grep -v IBP > buoy.loc - fi - - if [ -s buoy.loc ] - then - set +x - echo " buoy.loc and buoy.ibp copied and processed ($FIXwave/wave_${NET}.buoys)." - [[ "$LOUD" = YES ]] && set -x - else - set +x - echo ' ' - echo '************************************* ' - echo ' FATAL ERROR : NO BUOY LOCATION FILE ' - echo '************************************* ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : NO BUOY LOCATION FILE" - err=3; export err;${errchk} - exit $err - DOPNT_WAV='NO' - DOSPC_WAV='NO' - DOBLL_WAV='NO' - fi - - if [ "$DOIBP_WAV" = 'YES' ] - then - sed -n '/^\$.*/!p' buoy.loc.temp | grep IBP > buoy.ibp - if [ -s buoy.ibp ]; then - set +x - echo " buoy.loc and buoy.ibp copied and processed ($FIXwave/wave_${NET}.buoys)." - [[ "$LOUD" = YES ]] && set -x - else - set +x - echo ' ' - echo '************************************* ' - echo ' FATAL ERROR : NO BUOY LOCATION FILE ' - echo '************************************* ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : NO BUOY LOCATION FILE" - err=3; export err;${errchk} - exit $err - DOPNT_WAV='NO' - DOSPC_WAV='NO' - DOBLL_WAV='NO' - fi - fi - -# 1.d Input template files - - if [ "$DOGRI_WAV" = 'YES' ] - then - for intGRD in $waveinterpGRD - do - if [ -f $FIXwave/${intGRD}_interp.inp.tmpl ] - then - cp -f $FIXwave/${intGRD}_interp.inp.tmpl ${intGRD}_interp.inp.tmpl - fi - - if [ -f ${intGRD}_interp.inp.tmpl ] - then - set +x - echo " ${intGRD}_interp.inp.tmpl copied. Syncing to all nodes ..." - [[ "$LOUD" = YES ]] && set -x - else - set +x - echo ' ' - echo '*********************************************** ' - echo '*** ERROR : NO TEMPLATE FOR GRINT INPUT FILE *** ' - echo '*********************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "NON-FATAL ERROR : NO TEMPLATE FOR GRINT INPUT FILE" - exit_code=1 - DOGRI_WAV='NO' - fi - done - fi - - if [ "$DOGRB_WAV" = 'YES' ] - then - for grbGRD in $waveinterpGRD $wavepostGRD - do - if [ -f $FIXwave/ww3_grib2.${grbGRD}.inp.tmpl ] - then - cp -f $FIXwave/ww3_grib2.${grbGRD}.inp.tmpl ww3_grib2.${grbGRD}.inp.tmpl - fi - - if [ -f ww3_grib2.${grbGRD}.inp.tmpl ] - then - set +x - echo " ww3_grib2.${grbGRD}.inp.tmpl copied. Syncing to all nodes ..." - [[ "$LOUD" = YES ]] && set -x - else - set +x - echo ' ' - echo '*********************************************** ' - echo "*** ERROR : NO TEMPLATE FOR ${grbGRD} GRIB INPUT FILE *** " - echo '*********************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "NON-FATAL ERROR : NO TEMPLATE FOR GRIB2 INPUT FILE" - exit_code=2 - DOGRB_WAV='NO' - fi - done - fi - - if [ -f $FIXwave/ww3_outp_spec.inp.tmpl ] - then - cp -f $FIXwave/ww3_outp_spec.inp.tmpl ww3_outp_spec.inp.tmpl - fi - - if [ -f ww3_outp_spec.inp.tmpl ] - then - set +x - echo " ww3_outp_spec.inp.tmpl copied. Syncing to all grids ..." - [[ "$LOUD" = YES ]] && set -x - else - set +x - echo ' ' - echo '*********************************************** ' - echo '*** ERROR : NO TEMPLATE FOR SPEC INPUT FILE *** ' - echo '*********************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "NON-FATAL ERROR : NO TEMPLATE FOR SPEC INPUT FILE" - exit_code=3 - DOSPC_WAV='NO' - DOBLL_WAV='NO' - fi - - if [ -f $FIXwave/ww3_outp_bull.inp.tmpl ] - then - cp -f $FIXwave/ww3_outp_bull.inp.tmpl ww3_outp_bull.inp.tmpl - fi - - if [ -f ww3_outp_bull.inp.tmpl ] - then - set +x - echo " ww3_outp_bull.inp.tmpl copied. Syncing to all nodes ..." - [[ "$LOUD" = YES ]] && set -x - else - set +x - echo ' ' - echo '*************************************************** ' - echo '*** ERROR : NO TEMPLATE FOR BULLETIN INPUT FILE *** ' - echo '*************************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "NON-FATAL ERROR : NO TEMPLATE FOR BULLETIN INPUT FILE" - exit_code=4 - DOBLL_WAV='NO' - fi - -# 1.e Getting buoy information for points - - if [ "$DOSPC_WAV" = 'YES' ] || [ "$DOBLL_WAV" = 'YES' ] - then - ymdh=`$NDATE -${WAVHINDH} $CDATE` - tstart="`echo $ymdh | cut -c1-8` `echo $ymdh | cut -c9-10`0000" - dtspec=3600. # default time step (not used here) - sed -e "s/TIME/$tstart/g" \ - -e "s/DT/$dtspec/g" \ - -e "s/POINT/1/g" \ - -e "s/ITYPE/0/g" \ - -e "s/FORMAT/F/g" \ - ww3_outp_spec.inp.tmpl > ww3_outp.inp - - ln -s mod_def.$waveuoutpGRD mod_def.ww3 - fhr=$FHMIN_WAV - YMD=$(echo $CDATE | cut -c1-8) - HMS="$(echo $CDATE | cut -c9-10)0000" - tloop=0 - tloopmax=600 - tsleep=10 - while [ ${tloop} -le ${tloopmax} ] - do - if [ -f $COMIN/rundata/${WAV_MOD_TAG}.out_pnt.${waveuoutpGRD}.${YMD}.${HMS} ] - then - ln -s $COMIN/rundata/${WAV_MOD_TAG}.out_pnt.${waveuoutpGRD}.${YMD}.${HMS} ./out_pnt.${waveuoutpGRD} - break - else - sleep ${tsleep} - tloop=$(($tloop + $tsleep)) - fi - done - - rm -f buoy_tmp.loc buoy_log.ww3 ww3_oup.inp - ln -fs ./out_pnt.${waveuoutpGRD} ./out_pnt.ww3 - ln -fs ./mod_def.${waveuoutpGRD} ./mod_def.ww3 - $EXECwave/ww3_outp > buoy_lst.loc 2>&1 - err=$? - - if [ "$err" != '0' ] && [ ! -f buoy_log.ww3 ] - then - pgm=wave_post - msg="ABNORMAL EXIT: ERROR IN ww3_outp" - postmsg "$jlogfile" "$msg" - set +x - echo ' ' - echo '******************************************** ' - echo '*** FATAL ERROR : ERROR IN ww3_outp *** ' - echo '******************************************** ' - echo ' ' - cat buoy_tmp.loc - echo $msg - [[ "$LOUD" = YES ]] && set -x - err=4;export err;${errchk} - DOSPC_WAV='NO' - DOBLL_WAV='NO' - exit $err - fi - -# Create new buoy_log.ww3 excluding all IBP files - cat buoy.loc | awk '{print $3}' | sed 's/'\''//g' > ibp_tags - grep -F -f ibp_tags buoy_log.ww3 > buoy_log.tmp - rm -f buoy_log.dat - mv buoy_log.tmp buoy_log.dat - - grep -F -f ibp_tags buoy_lst.loc > buoy_tmp1.loc - sed '$d' buoy_tmp1.loc > buoy_tmp2.loc - buoys=`awk '{ print $1 }' buoy_tmp2.loc` - Nb=`wc buoy_tmp2.loc | awk '{ print $1 }'` - rm -f buoy_tmp1.loc buoy_tmp2.loc - - if [ -s buoy_log.dat ] - then - set +x - echo 'Buoy log file created. Syncing to all nodes ...' - [[ "$LOUD" = YES ]] && set -x - else - set +x - echo ' ' - echo '**************************************** ' - echo '*** ERROR : NO BUOY LOG FILE CREATED *** ' - echo '**************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : NO BUOY LOG FILE GENERATED FOR SPEC AND BULLETIN FILES" - err=5;export err;${errchk} - DOSPC_WAV='NO' - DOBLL_WAV='NO' - fi - -# Create new buoy_log.ww3 including all IBP files - if [ "$DOIBP_WAV" = 'YES' ]; then - cat buoy.ibp | awk '{print $3}' | sed 's/'\''//g' > ibp_tags - grep -F -f ibp_tags buoy_log.ww3 > buoy_log.tmp - rm -f buoy_log.ibp - mv buoy_log.tmp buoy_log.ibp - - grep -F -f ibp_tags buoy_lst.loc > buoy_tmp1.loc - sed '$d' buoy_tmp1.loc > buoy_tmp2.loc - ibpoints=`awk '{ print $1 }' buoy_tmp2.loc` - Nibp=`wc buoy_tmp2.loc | awk '{ print $1 }'` - rm -f buoy_tmp1.loc buoy_tmp2.loc - if [ -s buoy_log.ibp ] - then - set +x - echo 'IBP log file created. Syncing to all nodes ...' - [[ "$LOUD" = YES ]] && set -x - else - set +x - echo ' ' - echo '**************************************** ' - echo '*** ERROR : NO IBP LOG FILE CREATED *** ' - echo '**************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : NO IBP LOG FILE GENERATED FOR SPEC AND BULLETIN FILES" - err=6;export err;${errchk} - DOIBP_WAV='NO' - fi - fi - fi - -# 1.f Data summary - - set +x - echo ' ' - echo " Input files read and processed at : `date`" - echo ' ' - echo ' Data summary : ' - echo ' ---------------------------------------------' - echo " Sufficient data for GRID interpolation : $DOGRI_WAV" - echo " Sufficient data for GRIB files : $DOGRB_WAV" - echo " Sufficient data for spectral files : $DOSPC_WAV ($Nb points)" - echo " Sufficient data for bulletins : $DOBLL_WAV ($Nb points)" - echo " Sufficient data for Input Boundary Points : $DOIBP_WAV ($Nibp points)" - echo ' ' - [[ "$LOUD" = YES ]] && set -x - -# --------------------------------------------------------------------------- # -# 2. Make consolidated grib2 file for side-by-side grids and interpolate -# onto extended grids -# -# 2.a Command file set-up - - set +x - echo ' Making command file for sbs grib2 and GRID Interpolation ' - [[ "$LOUD" = YES ]] && set -x - - rm -f cmdfile - touch cmdfile - chmod 744 cmdfile - -# 1.a.2 Loop over forecast time to generate post files -# When executed side-by-side, serial mode (cfp when run after the fcst step) - fhr=$FHMIN_WAV - fhrp=$fhr - fhrg=$fhr - iwaitmax=120 # Maximum loop cycles for waiting until wave component output file is ready (fails after max) - while [ $fhr -le $FHMAX_WAV ]; do - - ymdh=`$NDATE $fhr $CDATE` - YMD=$(echo $ymdh | cut -c1-8) - HMS="$(echo $ymdh | cut -c9-10)0000" - YMDHMS=${YMD}${HMS} - FH3=$(printf %03i $fhr) - - fcmdnow=cmdfile.${FH3} - fcmdigrd=icmdfile.${FH3} - fcmdpnt=pcmdfile.${FH3} - fcmdibp=ibpcmdfile.${FH3} - rm -f ${fcmdnow} ${fcmdigrd} ${fcmdpnt} ${fcmdibp} - touch ${fcmdnow} ${fcmdigrd} ${fcmdpnt} ${fcmdibp} - mkdir output_$YMDHMS - cd output_$YMDHMS - -# Create instances of directories for spec and gridded output - export SPECDATA=${DATA}/output_$YMDHMS - export BULLDATA=${DATA}/output_$YMDHMS - export GRIBDATA=${DATA}/output_$YMDHMS - export GRDIDATA=${DATA}/output_$YMDHMS - ln -fs $DATA/mod_def.${waveuoutpGRD} mod_def.ww3 - -# Gridded data (main part, need to be run side-by-side with forecast - - if [ $fhr = $fhrg ] - then - for wavGRD in ${waveGRD} ; do - gfile=$COMIN/rundata/${WAV_MOD_TAG}.out_grd.${wavGRD}.${YMD}.${HMS} - while [ ! -s ${gfile} ]; do sleep 10; done - if [ $iwait -eq $iwaitmax ]; then - echo '*************************************************** ' - echo " FATAL ERROR : NO RAW FIELD OUTPUT FILE out_grd.$grdID " - echo '*************************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "NON-FATAL ERROR : NO RAW FIELD OUTPUT FILE out_grd.$grdID" - DOFLD_WAVE='NO' - err=7; export err;${errchk} - exit $err - fi - ln -s ${gfile} ./out_grd.${wavGRD} - done - - if [ "$DOGRI_WAV" = 'YES' ] - then - nigrd=1 - for grdID in $waveinterpGRD - do - case $grdID in - glo_15mxt) ymdh_int=`$NDATE -${WAVHINDH} $ymdh`; dt_int=3600.; n_int=9999 ;; - glo_30mxt) ymdh_int=`$NDATE -${WAVHINDH} $ymdh`; dt_int=3600.; n_int=9999 ;; - esac - echo "$USHwave/wave_grid_interp_sbs.sh $grdID $ymdh_int $dt_int $n_int > grint_$grdID.out 2>&1" >> ${fcmdigrd}.${nigrd} - if [ "$DOGRB_WAV" = 'YES' ] - then - gribFL=\'`echo ${OUTPARS_WAV}`\' - case $grdID in - glo_15mxt) GRDNAME='global' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; - glo_30mxt) GRDNAME='global' ; GRDRES=0p50 ; GRIDNR=255 ; MODNR=11 ;; - esac - echo "$USHwave/wave_grib2_sbs.sh $grdID $GRIDNR $MODNR $ymdh $fhr $GRDNAME $GRDRES $gribFL > grib_$grdID.out 2>&1" >> ${fcmdigrd}.${nigrd} - fi - echo "pwd" >> ${fcmdnow} - echo "${GRIBDATA}/${fcmdigrd}.${nigrd}" >> ${fcmdnow} - chmod 744 ${fcmdigrd}.${nigrd} - nigrd=$((nigrd+1)) - done - fi - - if [ "$DOGRB_WAV" = 'YES' ] - then - for grdID in ${wavepostGRD} # First concatenate grib files for sbs grids - do - gribFL=\'`echo ${OUTPARS_WAV}`\' - case $grdID in - aoc_9km) GRDNAME='arctic' ; GRDRES=9km ; GRIDNR=255 ; MODNR=11 ;; - ant_9km) GRDNAME='antarc' ; GRDRES=9km ; GRIDNR=255 ; MODNR=11 ;; - glo_10m) GRDNAME='global' ; GRDRES=0p16 ; GRIDNR=255 ; MODNR=11 ;; - gnh_10m) GRDNAME='global' ; GRDRES=0p16 ; GRIDNR=255 ; MODNR=11 ;; - gsh_15m) GRDNAME='gsouth' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; - glo_15m) GRDNAME='global' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; - ao_20m) GRDNAME='arctic' ; GRDRES=0p33 ; GRIDNR=255 ; MODNR=11 ;; - so_20m) GRDNAME='antarc' ; GRDRES=0p33 ; GRIDNR=255 ; MODNR=11 ;; - glo_15mxt) GRDNAME='global' ; GRDRES=0p25 ; GRIDNR=255 ; MODNR=11 ;; - esac - echo "$USHwave/wave_grib2_sbs.sh $grdID $GRIDNR $MODNR $ymdh $fhr $GRDNAME $GRDRES $gribFL > grib_$grdID.out 2>&1" >> ${fcmdnow} - done - fi - - fi - -# Point output part (can be split or become meta-task to reduce resource usage) - if [ $fhr = $fhrp ] - then - iwait=0 - pfile=$COMIN/rundata/${WAV_MOD_TAG}.out_pnt.${waveuoutpGRD}.${YMD}.${HMS} - while [ ! -s ${pfile} ]; do sleep 10; ((iwait++)) && ((iwait==$iwaitmax)) && break ; echo $iwait; done - if [ $iwait -eq $iwaitmax ]; then - echo " FATAL ERROR : NO RAW POINT OUTPUT FILE out_pnt.$waveuoutpGRD - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : NO RAW POINT OUTPUT FILE out_pnt.$waveuoutpGRD - err=6; export err;${errchk} - exit $err - fi - ln -fs ${pfile} ./out_pnt.${waveuoutpGRD} - - if [ "$DOSPC_WAV" = 'YES' ] - then - export dtspec=3600. - for buoy in $buoys - do - echo "$USHwave/wave_outp_spec.sh $buoy $ymdh spec > spec_$buoy.out 2>&1" >> ${fcmdnow} - done - fi - - if [ "$DOIBP_WAV" = 'YES' ] - then - export dtspec=3600. - for buoy in $ibpoints - do - echo "$USHwave/wave_outp_spec.sh $buoy $ymdh ibp > ibp_$buoy.out 2>&1" >> ${fcmdnow} - done - fi - - if [ "$DOBLL_WAV" = 'YES' ] - then - export dtspec=3600. - for buoy in $buoys - do - echo "$USHwave/wave_outp_spec.sh $buoy $ymdh bull > bull_$buoy.out 2>&1" >> ${fcmdnow} - done - fi - - fi - - if [ ${CFP_MP:-"NO"} = "YES" ]; then - nfile=0 - ifile=0 - iline=1 - ifirst='yes' - nlines=$( wc -l ${fcmdnow} | awk '{print $1}' ) - while [ $iline -le $nlines ]; do - line=$( sed -n ''$iline'p' ${fcmdnow} ) - if [ -z "$line" ]; then - break - else - if [ "$ifirst" = 'yes' ]; then - echo "#!/bin/sh" > cmdmfile.$nfile - echo "$nfile cmdmfile.$nfile" >> cmdmprog - chmod 744 cmdmfile.$nfile - fi - echo $line >> cmdmfile.$nfile - nfile=$(( nfile + 1 )) - if [ $nfile -eq $NTASKS ]; then - nfile=0 - ifirst='no' - fi - iline=$(( iline + 1 )) - fi - done - fi - - wavenproc=`wc -l ${fcmdnow} | awk '{print $1}'` - wavenproc=`echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))` - - set +x - echo ' ' - echo " Executing the grib2_sbs scripts at : `date`" - echo ' ------------------------------------' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - - if [ "$wavenproc" -gt '1' ] - then - if [ ${CFP_MP:-"NO"} = "YES" ]; then - ${wavempexec} -n ${wavenproc} ${wave_mpmd} cmdmprog - else - ${wavempexec} ${wavenproc} ${wave_mpmd} ${fcmdnow} - fi - exit=$? - else - chmod 744 ${fcmdnow} - ./${fcmdnow} - exit=$? - fi - - if [ "$exit" != '0' ] - then - set +x - echo ' ' - echo '********************************************' - echo '*** CMDFILE FAILED ***' - echo '********************************************' - echo ' See Details Below ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - err=8; export err;${errchk} - exit $err - fi - - rm -f out_grd.* # Remove large binary grid output files - - cd $DATA - - FHINCP=$(( DTPNT_WAV / 3600 )) - FHINCG=$(( DTFLD_WAV / 3600 )) - if [ $fhr = $fhrg ] - then - if [ $FHMAX_HF_WAV -gt 0 ] && [ $FHOUT_HF_WAV -gt 0 ] && [ $fhr -lt $FHMAX_HF_WAV ]; then - FHINCG=$FHOUT_HF_WAV - else - FHINCG=$FHOUT_WAV - fi - fhrg=$((fhr+FHINCG)) - fi - if [ $fhr = $fhrp ] - then - fhrp=$((fhr+FHINCP)) - fi - echo $fhrg $fhrp - fhr=$([ $fhrg -le $fhrp ] && echo "$fhrg" || echo "$fhrp") # reference fhr is the least between grid and point stride - done - -# --------------------------------------------------------------------------- # -# 3. Compress point output data into tar files - -# 3.a Set up cmdfile - - rm -f cmdtarfile - touch cmdtarfile - chmod 744 cmdtarfile - - set +x - echo ' ' - echo ' Making command file for taring all point output files.' - - [[ "$LOUD" = YES ]] && set -x - -# 6.b Spectral data files - - if [ ${CFP_MP:-"NO"} = "YES" ]; then nm=0; fi - - if [ "$DOIBP_WAV" = 'YES' ] - then - if [ ${CFP_MP:-"NO"} = "YES" ]; then - echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG ibp $Nibp > ${WAV_MOD_TAG}_ibp_tar.out 2>&1 " >> cmdtarfile - nm=$(( nm + 1 )) - else - echo "$USHwave/wave_tar.sh $WAV_MOD_TAG ibp $Nibp > ${WAV_MOD_TAG}_ibp_tar.out 2>&1 " >> cmdtarfile - fi - fi - if [ "$DOSPC_WAV" = 'YES' ] - then - if [ ${CFP_MP:-"NO"} = "YES" ]; then - echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG spec $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile - nm=$(( nm + 1 )) - echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG bull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile - nm=$(( nm + 1 )) - echo "$nm $USHwave/wave_tar.sh $WAV_MOD_TAG cbull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile - nm=$(( nm + 1 )) - else - echo "$USHwave/wave_tar.sh $WAV_MOD_TAG spec $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile - echo "$USHwave/wave_tar.sh $WAV_MOD_TAG bull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile - echo "$USHwave/wave_tar.sh $WAV_MOD_TAG cbull $Nb > ${WAV_MOD_TAG}_spec_tar.out 2>&1 " >> cmdtarfile - fi - fi - - wavenproc=`wc -l cmdtarfile | awk '{print $1}'` - wavenproc=`echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))` - - set +x - echo ' ' - echo " Executing the wave_tar scripts at : `date`" - echo ' ------------------------------------' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - - if [ "$wavenproc" -gt '1' ] - then - if [ ${CFP_MP:-"NO"} = "YES" ]; then - ${wavempexec} -n ${wavenproc} ${wave_mpmd} cmdtarfile - else - ${wavempexec} ${wavenproc} ${wave_mpmd} cmdtarfile - fi - exit=$? - else - chmod 744 cmdtarfile - ./cmdtarfile - exit=$? - fi - - if [ "$exit" != '0' ] - then - set +x - echo ' ' - echo '********************************************' - echo '*** CMDFILE FAILED ***' - echo '********************************************' - echo ' See Details Below ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - err=8; export err;${errchk} - exit $err - fi - -# --------------------------------------------------------------------------- # -# 7. Ending output - - set +x - echo ' ' - echo "Ending at : `date`" - echo '-----------' - echo ' ' - echo ' *** End of MWW3 postprocessor ***' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - - if [ "$exit_code" -ne '0' ] - then - msg="ABNORMAL EXIT: Problem in MWW3 POST" - postmsg "$jlogfile" "$msg" - echo $msg - err=16; export err;${errchk} - exit $err - else - echo " Side-by-Side Wave Post Completed Normally " - msg="$job completed normally" - postmsg "$jlogfile" "$msg" - exit 0 - fi - -# End of MWW3 prostprocessor script ---------------------------------------- # diff --git a/scripts/exgfs_wave_prdgen_bulls.sh b/scripts/exgfs_wave_prdgen_bulls.sh index 4eb511309e..2e6cb2071b 100755 --- a/scripts/exgfs_wave_prdgen_bulls.sh +++ b/scripts/exgfs_wave_prdgen_bulls.sh @@ -1,4 +1,5 @@ -#!/bin/bash +#! /usr/bin/env bash + ############################################################################### # # # This script is the product generator ("graphics job") for the # @@ -16,20 +17,19 @@ ############################################################################### # --------------------------------------------------------------------------- # # 0. Preparations + +source "$HOMEgfs/ush/preamble.sh" + # 0.a Basic modes of operation - set -xa - # Use LOUD variable to turn on/off trace. Defaults to YES (on). - export LOUD=${LOUD:-YES}; [[ $LOUD = yes ]] && export LOUD=YES - [[ "$LOUD" != YES ]] && set +x # PATH for working and home directories - export RUNwave=${RUNwave:-${RUN}${COMPONENT}} + export RUNwave=${RUNwave:-${RUN}wave} export envir=${envir:-ops} export cyc=${cyc:-00} export cycle=${cycle:-t${cyc}z} export pgmout=OUTPUT.$$ export DATA=${DATA:-${DATAROOT:?}/${job}.$$} - #export CODEwave=${CODEwave:-${NWROOT}/${NET}_code.${wave_code_ver}/${code_pkg}} + #export CODEwave=${CODEwave:-${PACKAGEROOT}/${NET}_code.${wave_code_ver}/${code_pkg}} export EXECwave=${EXECwave:-$HOMEgfs/exec} export FIXwave=${FIXwave:-$HOMEgfs/fix} export PARMwave=${PARMwave:-$HOMEgfs/parm/parm_wave} @@ -40,10 +40,6 @@ cd $DATA export wavelog=${DATA}/${RUNwave}_prdgbulls.log - postmsg "$jlogfile" "HAS BEGUN on `hostname`" - - msg="Starting MWW3 BULLETINS PRODUCTS SCRIPT" - postmsg "$jlogfile" "$msg" touch $wavelog # 0.b Date and time stuff export date=$PDY @@ -55,23 +51,22 @@ echo ' **************************************' echo " $date $cycle" echo ' ' - echo "Starting at : `date`" + echo "Starting at : $(date)" echo ' ' echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace # 1. Get necessary files set +x - echo " Copying bulletins from $COMIN" - [[ "$LOUD" = YES ]] && set -x + echo " Copying bulletins from ${COM_WAVE_STATION}" + set_trace # 1.a Link the input file and untar it - BullIn=$COMIN/station/${RUNwave}.$cycle.cbull_tar + BullIn="${COM_WAVE_STATION}/${RUNwave}.${cycle}.cbull_tar" if [ -f $BullIn ]; then cp $BullIn cbull.tar else - msg="ABNORMAL EXIT: NO BULLETIN TAR FILE" - postmsg "$jlogfile" "$msg" + echo "ABNORMAL EXIT: NO BULLETIN TAR FILE" set +x echo ' ' echo '************************************ ' @@ -79,7 +74,7 @@ echo '************************************ ' echo ' ' echo $msg - [[ "$LOUD" = YES ]] && set -x + set_trace msg="FATAL ERROR ${RUNwave} prdgen $date $cycle : bulletin tar missing." echo $msg >> $wavelog export err=1; ${errchk} @@ -88,18 +83,17 @@ set +x echo " Untarring bulletins ..." - [[ "$LOUD" = YES ]] && set -x + set_trace tar -xf cbull.tar OK=$? if [ "$OK" = '0' ]; then set +x echo " Unpacking successfull ..." - [[ "$LOUD" = YES ]] && set -x + set_trace rm -f cbull.tar else - msg="ABNORMAL EXIT: ERROR IN BULLETIN UNTAR" - postmsg "$jlogfile" "$msg" + echo "ABNORMAL EXIT: ERROR IN BULLETIN UNTAR" set +x echo ' ' echo '****************************************** ' @@ -107,7 +101,7 @@ echo '****************************************** ' echo ' ' echo $msg - [[ "$LOUD" = YES ]] && set -x + set_trace echo "${RUNwave} prdgen $date $cycle : bulletin untar error." >> $wavelog err=2;export err;err_chk exit $err @@ -115,9 +109,9 @@ # 1.b Output locations from bulletin files set +x - echo ' Nb=`ls -1 *.cbull | wc -l`' - Nb=`ls -1 *.cbull | wc -l` - [[ "$LOUD" = YES ]] && set -x + echo ' Nb=$(ls -1 *.cbull | wc -l)' + Nb=$(ls -1 *.cbull | wc -l) + set_trace echo ' ' echo " Number of bulletin files : $Nb" echo ' --------------------------' @@ -127,7 +121,6 @@ cp $PARMwave/bull_awips_gfswave awipsbull.data else msg="ABNORMAL EXIT: NO AWIPS BULLETIN HEADER DATA FILE" - postmsg "$jlogfile" "$msg" set +x echo ' ' echo '******************************************* ' @@ -135,7 +128,7 @@ echo '******************************************* ' echo ' ' echo $msg - [[ "$LOUD" = YES ]] && set -x + set_trace echo "${RUNwave} prdgen $date $cycle : Bulletin header data file missing." >> $wavelog err=3;export err;err_chk exit $err @@ -148,13 +141,12 @@ echo ' Sourcing data file with header info ...' # 2.b Set up environment variables - [[ "$LOUD" = YES ]] && set -x + set_trace . awipsbull.data # 2.c Generate list of bulletins to process echo ' Generating buoy list ...' - echo 'bulls=`sed -e 's/export b//g' -e 's/=/ /' awipsbull.data | grep -v "#" |awk '{ print $1}'`' - bulls=`sed -e 's/export b//g' -e 's/=/ /' awipsbull.data | grep -v "#" |awk '{ print $1}'` + bulls=$(sed -e 's/export b//g' -e 's/=/ /' awipsbull.data | grep -v "#" |awk '{print $1}') # 2.d Looping over buoys running formbul echo ' Looping over buoys ... \n' @@ -162,13 +154,12 @@ for bull in $bulls; do fname="${RUNwave}.$bull.cbull" oname="awipsbull.$bull.$cycle.${RUNwave}" - headr=`grep "b${bull}=" awipsbull.data | sed 's/=/ /g' | awk '{ print $3}'` + headr=$(grep "b${bull}=" awipsbull.data | sed 's/=/ /g' | awk '{ print $3}') echo " Processing $bull ($headr $oname) ..." if [ -z "$headr" ] || [ ! -s $fname ]; then - [[ "$LOUD" = YES ]] && set -x + set_trace msg="ABNORMAL EXIT: MISSING BULLETING INFO" - postmsg "$jlogfile" "$msg" set +x echo ' ' echo '******************************************** ' @@ -176,23 +167,22 @@ echo '******************************************** ' echo ' ' echo $msg - [[ "$LOUD" = YES ]] && set -x + set_trace echo "${RUNwave} prdgen $date $cycle : Missing bulletin data." >> $wavelog err=4;export err;err_chk exit $err fi - [[ "$LOUD" = YES ]] && set -x + set_trace - formbul.pl -d $headr -f $fname -j $job -m ${RUNwave} \ - -p $PCOM -s NO -o $oname > formbul.out 2>&1 + formbul.pl -d "${headr}" -f "${fname}" -j "${job}" -m "${RUNwave}" \ + -p "${COM_WAVE_WMO}" -s "NO" -o "${oname}" > formbul.out 2>&1 OK=$? if [ "$OK" != '0' ] || [ ! -f $oname ]; then - [[ "$LOUD" = YES ]] && set -x + set_trace cat formbul.out msg="ABNORMAL EXIT: ERROR IN formbul" - postmsg "$jlogfile" "$msg" set +x echo ' ' echo '************************************** ' @@ -200,7 +190,7 @@ echo '************************************** ' echo ' ' echo $msg - [[ "$LOUD" = YES ]] && set -x + set_trace echo "${RUNwave} prdgen $date $cycle : error in formbul." >> $wavelog err=5;export err;err_chk exit $err @@ -211,41 +201,28 @@ done # 3. Send output files to the proper destination - [[ "$LOUD" = YES ]] && set -x - if [ "$SENDCOM" = YES ]; then - cp awipsbull.$cycle.${RUNwave} $PCOM/awipsbull.$cycle.${RUNwave} - if [ "$SENDDBN_NTC" = YES ]; then - make_ntc_bull.pl WMOBH NONE KWBC NONE $DATA/awipsbull.$cycle.${RUNwave} $PCOM/awipsbull.$cycle.${RUNwave} - else - if [ "${envir}" = "para" ] || [ "${envir}" = "test" ] || [ "${envir}" = "dev" ]; then - echo "Making NTC bulletin for parallel environment, but do not alert." - [[ "$LOUD" = YES ]] && set -x - (export SENDDBN=NO; make_ntc_bull.pl WMOBH NONE KWBC NONE \ - $DATA/awipsbull.$cycle.${RUNwave} $PCOM/awipsbull.$cycle.${RUNwave}) - fi - fi - fi +set_trace +cp "awipsbull.${cycle}.${RUNwave}" "${COM_WAVE_WMO}/awipsbull.${cycle}.${RUNwave}" +if [ "$SENDDBN_NTC" = YES ]; then + make_ntc_bull.pl "WMOBH" "NONE" "KWBC" "NONE" "${DATA}/awipsbull.${cycle}.${RUNwave}" \ + "${COM_WAVE_WMO}/awipsbull.${cycle}.${RUNwave}" +else + if [ "${envir}" = "para" ] || [ "${envir}" = "test" ] || [ "${envir}" = "dev" ]; then + echo "Making NTC bulletin for parallel environment, but do not alert." + (export SENDDBN=NO; make_ntc_bull.pl "WMOBH" "NONE" "KWBC" "NONE" \ + "${DATA}/awipsbull.${cycle}.${RUNwave}" "${COM_WAVE_WMO}/awipsbull.${cycle}.${RUNwave}") + fi +fi # --------------------------------------------------------------------------- # # 4. Clean up - set +x; [[ "$LOUD" = YES ]] && set -v + set -v rm -f ${RUNwave}.*.cbull awipsbull.data set +v # --------------------------------------------------------------------------- # # 5. Ending output - set +x - echo ' ' - echo ' ' - echo "Ending at : `date`" - echo ' ' - echo ' *** End of MWW3 BULLETINS product generation ***' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - - msg="$job completed normally" - postmsg "$jlogfile" "$msg" # End of MWW3 product generation script -------------------------------------- # diff --git a/scripts/exgfs_wave_prdgen_gridded.sh b/scripts/exgfs_wave_prdgen_gridded.sh index 4dfb3bc31d..095856e1e2 100755 --- a/scripts/exgfs_wave_prdgen_gridded.sh +++ b/scripts/exgfs_wave_prdgen_gridded.sh @@ -1,4 +1,5 @@ -#!/bin/ksh +#! /usr/bin/env bash + ############################################################################### # # # This script is the product generator ("graphics job") for the # @@ -9,21 +10,20 @@ # # # # # Origination : 05/02/2007 # -# Last update : 05/04/2007 # +# Last update : 10/08/2020 # # # -# May 2020 Roberto.Padilla@noaa.gov, Henrique.HAlves@noaa.gov # +# Oct, 2020 Roberto.Padilla@noaa.gov, Henrique.HAlves@noaa.gov # # - Merging wave scripts to GFSv16 global workflow # # # ############################################################################### # --------------------------------------------------------------------------- # # 0. Preparations + +source "$HOMEgfs/ush/preamble.sh" + # 0.a Basic modes of operation - set -xa - # Use LOUD variable to turn on/off trace. Defaults to YES (on). - export LOUD=${LOUD:-YES}; [[ $LOUD = yes ]] && export LOUD=YES - [[ "$LOUD" != YES ]] && set +x - export RUNwave=${RUNwave:-${RUN}${COMPONENT}} + export RUNwave=${RUNwave:-${RUN}wave} export envir=${envir:-ops} export fstart=${fstart:-0} export FHMAX_WAV=${FHMAX_WAV:-180} #180 Total of hours to process @@ -40,13 +40,13 @@ export DATA=${DATA:-${DATAROOT:?}/${job}.$$} mkdir -p $DATA cd $DATA - export wavelog=${DATA}/${COMPONENTwave}_prdggridded.log + export wavelog=${DATA}/${RUNwave}_prdggridded.log - postmsg "$jlogfile" "HAS BEGUN on `hostname`" - msg="Starting MWW3 GRIDDED PRODUCTS SCRIPT" - postmsg "$jlogfile" "$msg" + echo "Starting MWW3 GRIDDED PRODUCTS SCRIPT" # Output grids - grids=${grids:-ao_9km at_10m ep_10m wc_10m glo_30m} + # grids=${grids:-ao_9km at_10m ep_10m wc_10m glo_30m} +grids=${grids:-ak_10m at_10m ep_10m wc_10m glo_30m} +# export grids=${wavepostGRD} maxtries=${maxtries:-720} # 0.b Date and time stuff export date=$PDY @@ -57,19 +57,19 @@ echo ' ****************************' echo " $date $cycle" echo ' ' - echo "Starting at : `date`" + echo "Starting at : $(date)" echo ' ' echo " AWIPS grib fields" echo " Wave Grids : $grids" echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace # --------------------------------------------------------------------------- # # 1. Get necessary files echo ' ' echo 'Preparing input files :' echo '-----------------------' - [[ "$LOUD" = YES ]] && set -x + set_trace #======================================================================= ASWELL=(SWELL1 SWELL2) # Indices of HS from partitions @@ -78,7 +78,10 @@ # (should be same as ASWELL) #export arrpar=(WIND UGRD VGRD HTSGW PERPW DIRPW WVHGT WVPER WVDIR WDIR ${ASWELL[@]} ${ASWDIR[@]} ${ASWPER[@]}) export arrpar=(WIND WDIR UGRD VGRD HTSGW PERPW DIRPW WVHGT ${ASWELL[@]} WVPER ${ASWPER[@]} WVDIR ${ASWDIR[@]} ) - export nparam=`echo ${arrpar[@]} | wc -w` + export nparam=$(echo ${arrpar[@]} | wc -w) + + +# 1.a Grib file (AWIPS and FAX charts) fhcnt=$fstart while [ $fhcnt -le $FHMAX_WAV ]; do fhr=$(printf "%03d" $fhcnt) @@ -88,10 +91,14 @@ at_10m) grdID='atlocn.0p16' ;; ep_10m) grdID='epacif.0p16' ;; wc_10m) grdID='wcoast.0p16' ;; - glo_30m) grdID='global.0p25' ;; +# glo_30m) grdID='global.0p25' ;; + glo_30m) grdID='global.0p50' ;; + ak_10m) grdID='alaska.0p16' ;; *) grdID= ;; esac - GRIBIN=$COMIN/gridded/$RUNwave.$cycle.$grdID.f${fhr}.grib2 + # + + GRIBIN="${COM_WAVE_GRID}/${RUNwave}.${cycle}.${grdID}.f${fhr}.grib2" GRIBIN_chk=$GRIBIN.idx icnt=1 @@ -105,25 +112,25 @@ fi if [ $icnt -ge $maxtries ]; then msg="ABNORMAL EXIT: NO GRIB FILE FOR GRID $GRIBIN" - postmsg "$jlogfile" "$msg" echo ' ' echo '**************************** ' echo '*** ERROR : NO GRIB FILE *** ' echo '**************************** ' echo ' ' echo $msg - [[ "$LOUD" = YES ]] && set -x + set_trace echo "$RUNwave $grdID ${fhr} prdgen $date $cycle : GRIB file missing." >> $wavelog err=1;export err;${errchk} || exit ${err} fi done + GRIBOUT=$RUNwave.$cycle.$grdID.f${fhr}.clipped.grib2 iparam=1 while [ ${iparam} -le ${nparam} ]; do nip=${arrpar[$iparam-1]} - prepar=`echo $nip | rev | cut -c2- | rev` #Part prefix (assumes 1 digit index) - paridx=`echo $nip | rev | cut -c-1` + prepar=$(echo $nip | rev | cut -c2- | rev) #Part prefix (assumes 1 digit index) + paridx=$(echo $nip | rev | cut -c-1) npart=0 case $prepar in SWELL) npart=1 ;; @@ -141,61 +148,14 @@ $WGRIB2 -i $GRIBIN -grib temp.grib2 > wgrib.out 2>&1 $WGRIB2 temp.grib2 -append -grib $GRIBOUT fi - iparam=`expr ${iparam} + 1` + iparam=$(expr ${iparam} + 1) done #end wave param loop - done #end gridID loop - if [ $fhcnt -ge $FHMAX_HF_WAV ]; then - inc=$FHOUT_WAV - else - inc=$FHOUT_HF_WAV - fi - let fhcnt=fhcnt+inc - done #end time loop - -#======================================================================= - -# 1.a Grib file (AWIPS and FAX charts) - fhcnt=$fstart - while [ $fhcnt -le $FHMAX_WAV ]; do - fhr=$(printf "%03d" $fhcnt) - for grdOut in $grids;do - case $grdOut in - ao_9km) grdID='arctic.9km' ;; - at_10m) grdID='atlocn.0p16' ;; - ep_10m) grdID='epacif.0p16' ;; - wc_10m) grdID='wcoast.0p16' ;; - glo_30m) grdID='global.0p25' ;; - *) grdID= ;; - esac - # +#====================================================================== GRIBIN=$RUNwave.$cycle.$grdID.f${fhr}.clipped.grib2 GRIBIN_chk=$GRIBIN.idx -# 1.c.1 If gridID eq to global.0p25 interpolate it to global_30m - if [ "$grdID" = "global.0p25" ]; then - #cp $GRIBIN tempgf.$grdID.f${fhr} - ln -s $GRIBIN tempgf.$grdID.f${fhr} - $WGRIB2 -lola 0:720:0.5 -90:361:0.5 gribfile.$grdID.f${fhr} grib \ - tempgf.$grdID.f${fhr} 1> out 2>&1 - OK=$? - if [ "$OK" != '0' ]; then - msg="ABNORMAL EXIT: ERROR IN interpolation the global grid" - postmsg "$jlogfile" "$msg" - #set +x - echo ' ' - echo '************************************************************* ' - echo '*** FATAL ERROR : ERROR IN making gribfile.$grdID.f${fhr}*** ' - echo '************************************************************* ' - echo ' ' - echo $msg - #[[ "$LOUD" = YES ]] && set -x - echo "$RUNwave $grdID prdgen $date $cycle : error in grbindex." >> $wavelog - err=2;export err;err_chk - fi - else - #cp $GRIBIN gribfile.$grdID.f${fhr} - ln -s $GRIBIN gribfile.$grdID.f${fhr} - fi + ln -s $GRIBIN gribfile.$grdID.f${fhr} + # # 1.d Input template files parmfile=$PARMwave/grib2_${RUNwave}.$grdOut.f${fhr} @@ -215,19 +175,18 @@ # 2.a.1 Set up for tocgrib2 echo " Do set up for tocgrib2." - [[ "$LOUD" = YES ]] && set -x + set_trace #AWIPSGRB=awipsgrib.$grdID.f${fhr} AWIPSGRB=awipsgrib # 2.a.2 Make GRIB index echo " Make GRIB index for tocgrib2." - [[ "$LOUD" = YES ]] && set -x + set_trace $GRB2INDEX gribfile.$grdID.f${fhr} gribindex.$grdID.f${fhr} OK=$? if [ "$OK" != '0' ] then msg="ABNORMAL EXIT: ERROR IN grb2index MWW3 for grid $grdID" - postmsg "$jlogfile" "$msg" #set +x echo ' ' echo '******************************************** ' @@ -235,7 +194,7 @@ echo '******************************************** ' echo ' ' echo $msg - #[[ "$LOUD" = YES ]] && set -x + #set_trace echo "$RUNwave $grdID prdgen $date $cycle : error in grbindex." >> $wavelog err=4;export err;err_chk fi @@ -243,23 +202,20 @@ # 2.a.3 Run AWIPS GRIB packing program tocgrib2 echo " Run tocgrib2" - [[ "$LOUD" = YES ]] && set -x + set_trace export pgm=tocgrib2 export pgmout=tocgrib2.out . prep_step export FORT11="gribfile.$grdID.f${fhr}" export FORT31="gribindex.$grdID.f${fhr}" - #export FORT51="$AWIPSGRB.$grdOut.f${fhr}" export FORT51="$AWIPSGRB.$grdID.f${fhr}" - #$TOCGRIB2 < awipsgrb.$grdID.f${fhr} parm='KWBJ' > tocgrib2.out 2>&1 $TOCGRIB2 < awipsgrb.$grdID.f${fhr} > tocgrib2.out 2>&1 OK=$? if [ "$OK" != '0' ]; then cat tocgrib2.out msg="ABNORMAL EXIT: ERROR IN tocgrib2" - postmsg "$jlogfile" "$msg" #set +x echo ' ' echo '*************************************** ' @@ -267,7 +223,7 @@ echo '*************************************** ' echo ' ' echo $msg - #[[ "$LOUD" = YES ]] && set -x + #set_trace echo "$RUNwave prdgen $date $cycle : error in tocgrib2." >> $wavelog err=5;export err;err_chk else @@ -276,21 +232,19 @@ # 2.a.7 Get the AWIPS grib bulletin out ... #set +x echo " Get awips GRIB bulletins out ..." - #[[ "$LOUD" = YES ]] && set -x - if [ "$SENDCOM" = 'YES' ] - then - #set +x - echo " Saving $AWIPSGRB.$grdOut.f${fhr} as grib2.$cycle.awipsww3_${grdID}.f${fhr}" - echo " in $PCOM" - #[[ "$LOUD" = YES ]] && set -x - cp $AWIPSGRB.$grdID.f${fhr} $PCOM/grib2.$cycle.f${fhr}.awipsww3_${grdOut} - #set +x - fi + #set_trace + #set +x + echo " Saving $AWIPSGRB.$grdOut.f${fhr} as grib2.$cycle.awipsww3_${grdID}.f${fhr}" + echo " in ${COM_WAVE_WMO}" + #set_trace + cp "${AWIPSGRB}.${grdID}.f${fhr}" "${COM_WAVE_WMO}/grib2.${cycle}.f${fhr}.awipsww3_${grdOut}" + #set +x + - if [ "$SENDDBN_NTC" = 'YES' ] + if [ "$SENDDBN" = 'YES' ] then echo " Sending $AWIPSGRB.$grdID.f${fhr} to DBRUN." - $DBNROOT/bin/dbn_alert GRIB_LOW $RUN $job $PCOM/grib2.$cycle.f${fhr}.awipsww3_${grdOut} + "${DBNROOT}/bin/dbn_alert" GRIB_LOW "${RUN}" "${job}" "${COM_WAVE_WMO}/grib2.${cycle}.f${fhr}.awipsww3_${grdOut}" fi rm -f $AWIPSGRB.$grdID.f${fhr} tocgrib2.out done # For grids @@ -308,23 +262,13 @@ # --------------------------------------------------------------------------- # # 5. Clean up - set +x; [[ "$LOUD" = YES ]] && set -v + set -v rm -f gribfile gribindex.* awipsgrb.* awipsbull.data -#XXX rm -f $RUNwave.*.cbull set +v # --------------------------------------------------------------------------- # # 6. Ending output - echo ' ' - echo ' ' - echo "Ending at : `date`" - echo ' ' - echo ' *** End of MWW3 product generation ***' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - msg="$job completed normally" - postmsg "$jlogfile" "$msg" # End of GFSWAVE product generation script -------------------------------------- # diff --git a/scripts/exgfs_wave_prep.sh b/scripts/exgfs_wave_prep.sh index 256bdfd146..be006c1c85 100755 --- a/scripts/exgfs_wave_prep.sh +++ b/scripts/exgfs_wave_prep.sh @@ -1,5 +1,5 @@ -#!/bin/bash -# +#! /usr/bin/env bash + ################################################################################ # # UNIX Script Documentation Block @@ -12,9 +12,7 @@ # as follows: # # wave_prnc_ice.sh : preprocess ice fields. # -# wave_prnc_wnd.sh : preprocess wind fields (uncoupled run, not active) # # wave_prnc_cur.sh : preprocess current fields. # -# wave_g2ges.sh : find and copy wind grib2 files. # # # # Remarks : # # - For non-fatal errors output is witten to the wave.log file. # @@ -31,6 +29,8 @@ # Apr2019 JHAlves - Transitioning to GEFS workflow # # Nov2019 JHAlves - Merging wave scripts to global workflow # # Jun2020 JHAlves - Porting to R&D machine Hera # +# Oct2020 JMeixner - Updating RTOFS dates for processing minimal amount # +# May2022 JMeixner - Clean up and moving input to other routine # # # # WAV_MOD_ID and WAV_MOD_TAG replace modID. WAV_MOD_TAG # # is used for ensemble-specific I/O. For deterministic # @@ -39,46 +39,32 @@ ############################################################################### # --------------------------------------------------------------------------- # # 0. Preparations -# 0.a Basic modes of operation - set -x - # Use LOUD variable to turn on/off trace. Defaults to YES (on). - export LOUD=${LOUD:-YES}; [[ $LOUD = yes ]] && export LOUD=YES - [[ "$LOUD" != YES ]] && set +x +source "$HOMEgfs/ush/preamble.sh" + +# 0.a Basic modes of operation # Set wave model ID tag to include member number # if ensemble; waveMEMB var empty in deterministic - export WAV_MOD_TAG=${CDUMP}wave${waveMEMB} + export WAV_MOD_TAG=${RUN}wave${waveMEMB} cd $DATA mkdir outtmp - msg="HAS BEGUN on `hostname`" - postmsg "$jlogfile" "$msg" - msg="Starting MWW3 PREPROCESSOR SCRIPT for $WAV_MOD_TAG" - postmsg "$jlogfile" "$msg" + echo "HAS BEGUN on $(hostname)" + echo "Starting MWW3 PREPROCESSOR SCRIPT for $WAV_MOD_TAG" set +x echo ' ' echo ' ********************************' - echo ' *** MWW3 PREPROCESSOR SCRIPT ***' + echo ' *** WW3 PREPROCESSOR SCRIPT ***' echo ' ********************************' echo ' PREP for wave component of NCEP coupled system' echo " Wave component identifier : $WAV_MOD_TAG " echo ' ' - echo "Starting at : `date`" + echo "Starting at : $(date)" echo ' ' - [[ "$LOUD" = YES ]] && set -x - - # export MP_PGMMODEL=mpmd - # export MP_CMDFILE=./cmdfile - - if [ "$INDRUN" = 'no' ] - then - FHMAX_WAV=${FHMAX_WAV:-3} - else - FHMAX_WAV=${FHMAX_WAV:-384} - fi + set_trace # 0.b Date and time stuff @@ -96,38 +82,38 @@ if [ $IAU_OFFSET = 0 ]; then ymdh_beg=$YMDH else - ymdh_beg=`$NDATE -$WAVHINDH $YMDH` + ymdh_beg=$($NDATE -$WAVHINDH $YMDH) fi - time_beg="`echo $ymdh_beg | cut -c1-8` `echo $ymdh_beg | cut -c9-10`0000" - ymdh_end=`$NDATE $FHMAX_WAV $YMDH` - time_end="`echo $ymdh_end | cut -c1-8` `echo $ymdh_end | cut -c9-10`0000" + time_beg="$(echo $ymdh_beg | cut -c1-8) $(echo $ymdh_beg | cut -c9-10)0000" + ymdh_end=$($NDATE $FHMAX_WAV $YMDH) + time_end="$(echo $ymdh_end | cut -c1-8) $(echo $ymdh_end | cut -c9-10)0000" ymdh_beg_out=$YMDH - time_beg_out="`echo $ymdh_beg_out | cut -c1-8` `echo $ymdh_beg_out | cut -c9-10`0000" + time_beg_out="$(echo $ymdh_beg_out | cut -c1-8) $(echo $ymdh_beg_out | cut -c9-10)0000" # Restart file times (already has IAU_FHROT in WAVHINDH) RSTOFFSET=$(( ${WAVHCYC} - ${WAVHINDH} )) # Update restart time is added offset relative to model start RSTOFFSET=$(( ${RSTOFFSET} + ${RSTIOFF_WAV} )) - ymdh_rst_ini=`$NDATE ${RSTOFFSET} $YMDH` + ymdh_rst_ini=$($NDATE ${RSTOFFSET} $YMDH) RST2OFFSET=$(( DT_2_RST_WAV / 3600 )) - ymdh_rst2_ini=`$NDATE ${RST2OFFSET} $YMDH` # DT2 relative to first-first-cycle restart file + ymdh_rst2_ini=$($NDATE ${RST2OFFSET} $YMDH) # DT2 relative to first-first-cycle restart file # First restart file for cycling - time_rst_ini="`echo $ymdh_rst_ini | cut -c1-8` `echo $ymdh_rst_ini | cut -c9-10`0000" + time_rst_ini="$(echo $ymdh_rst_ini | cut -c1-8) $(echo $ymdh_rst_ini | cut -c9-10)0000" if [ ${DT_1_RST_WAV} = 1 ]; then time_rst1_end=${time_rst_ini} else RST1OFFSET=$(( DT_1_RST_WAV / 3600 )) - ymdh_rst1_end=`$NDATE $RST1OFFSET $ymdh_rst_ini` - time_rst1_end="`echo $ymdh_rst1_end | cut -c1-8` `echo $ymdh_rst1_end | cut -c9-10`0000" + ymdh_rst1_end=$($NDATE $RST1OFFSET $ymdh_rst_ini) + time_rst1_end="$(echo $ymdh_rst1_end | cut -c1-8) $(echo $ymdh_rst1_end | cut -c9-10)0000" fi # Second restart file for checkpointing if [ "${RSTTYPE_WAV}" = "T" ]; then - time_rst2_ini="`echo $ymdh_rst2_ini | cut -c1-8` `echo $ymdh_rst2_ini | cut -c9-10`0000" + time_rst2_ini="$(echo $ymdh_rst2_ini | cut -c1-8) $(echo $ymdh_rst2_ini | cut -c9-10)0000" time_rst2_end=$time_end # Condition for gdas run or any other run when checkpoint stamp is > ymdh_end if [ $ymdh_rst2_ini -ge $ymdh_end ]; then - ymdh_rst2_ini=`$NDATE 3 $ymdh_end` - time_rst2_ini="`echo $ymdh_rst2_ini | cut -c1-8` `echo $ymdh_rst2_ini | cut -c9-10`0000" + ymdh_rst2_ini=$($NDATE 3 $ymdh_end) + time_rst2_ini="$(echo $ymdh_rst2_ini | cut -c1-8) $(echo $ymdh_rst2_ini | cut -c9-10)0000" time_rst2_end=$time_rst2_ini fi else @@ -143,7 +129,7 @@ echo " starting time : $time_beg" echo " ending time : $time_end" echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace # Script will run only if pre-defined NTASKS # The actual work is distributed over these tasks. @@ -160,7 +146,7 @@ echo 'Preparing input files :' echo '-----------------------' echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace # 1.a Model definition files @@ -168,24 +154,22 @@ touch cmdfile grdINP='' - if [ "${WW3ATMINP}" = 'YES' ]; then grdINP="${grdINP} $WAVEWND_FID" ; fi - if [ "${WW3ICEINP}" = 'YES' ]; then grdINP="${grdINP} $WAVEICE_FID" ; fi - if [ "${WW3CURINP}" = 'YES' ]; then grdINP="${grdINP} $WAVECUR_FID" ; fi + if [ "${WW3ATMINP}" = 'YES' ]; then grdINP="${grdINP} $WAVEWND_FID" ; fi + if [ "${WW3ICEINP}" = 'YES' ]; then grdINP="${grdINP} $WAVEICE_FID" ; fi + if [ "${WW3CURINP}" = 'YES' ]; then grdINP="${grdINP} $WAVECUR_FID" ; fi ifile=1 for grdID in $grdINP $waveGRD do - if [ -f "$COMIN/rundata/${CDUMP}wave.mod_def.${grdID}" ] + if [ -f "${COM_WAVE_PREP}/${RUN}wave.mod_def.${grdID}" ] then set +x - echo " Mod def file for $grdID found in ${COMIN}/rundata. copying ...." - [[ "$LOUD" = YES ]] && set -x - cp $COMIN/rundata/${CDUMP}wave.mod_def.${grdID} mod_def.$grdID + echo " Mod def file for $grdID found in ${COM_WAVE_PREP}. copying ...." + set_trace + cp ${COM_WAVE_PREP}/${RUN}wave.mod_def.${grdID} mod_def.$grdID else - msg="FATAL ERROR: NO MODEL DEFINITION FILE" - postmsg "$jlogfile" "$msg" set +x echo ' ' echo '*********************************************************** ' @@ -193,16 +177,16 @@ echo '*********************************************************** ' echo " grdID = $grdID" echo ' ' - echo $msg - [[ "$LOUD" = YES ]] && set -x + echo "FATAL ERROR: NO MODEL DEFINITION FILE" + set_trace err=2;export err;${errchk} fi done # 1.b Netcdf Preprocessor template files - if [ "$WW3ATMINP" = 'YES' ]; then itype="$itype wind" ; fi - if [ "$WW3ICEINP" = 'YES' ]; then itype="$itype ice" ; fi - if [ "$WW3CURINP" = 'YES' ]; then itype="$itype cur" ; fi + if [[ "${WW3ATMINP}" == 'YES' ]]; then itype="${itype:-} wind" ; fi + if [[ "${WW3ICEINP}" == 'YES' ]]; then itype="${itype:-} ice" ; fi + if [[ "${WW3CURINP}" == 'YES' ]]; then itype="${itype:-} cur" ; fi for type in $itype do @@ -223,21 +207,19 @@ ;; esac - if [ -f $FIXwave/ww3_prnc.${type}.$grdID.inp.tmpl ] + if [ -f $PARMwave/ww3_prnc.${type}.$grdID.inp.tmpl ] then - cp $FIXwave/ww3_prnc.${type}.$grdID.inp.tmpl . + cp $PARMwave/ww3_prnc.${type}.$grdID.inp.tmpl . fi if [ -f ww3_prnc.${type}.$grdID.inp.tmpl ] then set +x echo ' ' - echo " ww3_prnc.${type}.$grdID.inp.tmpl copied ($FIXwave)." + echo " ww3_prnc.${type}.$grdID.inp.tmpl copied ($PARMwave)." echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace else - msg="ABNORMAL EXIT: NO FILE $file" - ./postmsg "$jlogfile" "$msg" set +x echo ' ' echo '************************************** ' @@ -245,9 +227,9 @@ echo '************************************** ' echo " ww3_prnc.${type}.$grdID.inp.tmpl" echo ' ' - echo $msg + echo "ABNORMAL EXIT: NO FILE $file" echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace err=4;export err;${errchk} fi done @@ -270,365 +252,53 @@ if [ -d ice ] then - postmsg "$jlogfile" "FATAL ERROR ice field not generated." set +x echo ' ' echo ' FATAL ERROR: ice field not generated ' echo ' ' - sed "s/^/ice.out : /g" ice.out + sed "s/^/wave_prnc_ice.out : /g" wave_prnc_ice.out echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace err=5;export err;${errchk} else - mv -f ice.out $DATA/outtmp + mv -f wave_prnc_ice.out $DATA/outtmp set +x echo ' ' echo ' Ice field unpacking successful.' echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace fi else echo ' ' - echo " Ice input is not perturbed, single ice file generated, skipping ${WAV_MOD_TAG}" + echo "WARNING: Ice input is not perturbed, single ice file generated, skipping ${WAV_MOD_TAG}" echo ' ' fi else echo ' ' - echo ' No input ice file generated, this run did not request pre-processed ice data ' + echo 'WARNING: No input ice file generated, this run did not request pre-processed ice data ' echo ' ' fi # --------------------------------------------------------------------------- # -# WIND processing (not functional, TBD for uncoupled cases) - +# WIND processing if [ "${WW3ATMINP}" = 'YES' ]; then -# --------------------------------------------------------------------------- # -# 3. Wind pre-processing - - if [ "${RUNMEM}" = "-1" ] || [ "${WW3ATMIENS}" = "T" ] || [ "$waveMEMB" = "00" ] - then - - rm -f cmdfile - touch cmdfile - chmod 744 cmdfile - -# 3.a Gather and pre-process grib2 files - ymdh=$ymdh_beg - - if [ ${CFP_MP:-"NO"} = "YES" ]; then nm=0 ; fi # Counter for MP CFP - while [ "$ymdh" -le "$ymdh_end" ] - do - if [ ${CFP_MP:-"NO"} = "YES" ]; then - echo "$nm $USHwave/wave_g2ges.sh $ymdh > grb_$ymdh.out 2>&1" >> cmdfile - nm=`expr $nm + 1` - else - echo "$USHwave/wave_g2ges.sh $ymdh > grb_$ymdh.out 2>&1" >> cmdfile - fi - ymdh=`$NDATE $WAV_WND_HOUR_INC $ymdh` - done - -# 3.b Execute the serial or parallel cmdfile - -# Set number of processes for mpmd - cat cmdfile - - wavenproc=`wc -l cmdfile | awk '{print $1}'` - wavenproc=`echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))` - - set +x - echo ' ' - echo " Executing the wnd grib cmd file at : `date`" - echo ' ------------------------------------' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - - if [ "$wavenproc" -gt '1' ] - then - if [ ${CFP_MP:-"NO"} = "YES" ]; then - ${wavempexec} -n ${wavenproc} ${wave_mpmd} cmdfile - else - ${wavempexec} ${wavenproc} ${wave_mpmd} cmdfile - fi - exit=$? - else - ./cmdfile - exit=$? - fi - - if [ "$exit" != '0' ] - then - set +x - echo ' ' - echo '********************************************' - echo '*** CMDFILE FAILED IN WIND GENERATION ***' - echo '********************************************' - echo ' See Details Below ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - fi - -# 3.c Check for errors - - set +x - echo ' ' - echo ' Checking for errors.' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - -# We will go on if the number of errors in files is less -# than err_max - - [[ "$LOUD" = YES ]] && set -x - err_max=1 - - - ymdh=$ymdh_beg - nr_err=0 - - set +x - echo ' Sources of grib2 files :' - [[ "$LOUD" = YES ]] && set -x - while [ "$ymdh" -le "$ymdh_end" ] - do - if [ -d grb_${ymdh} ] - then - set +x - echo ' ' - echo " File for $ymdh : error in wave_g2ges.sh" - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" " File for $ymdh : error in wave_g2ges.sh" - nr_err=`expr $nr_err + 1` - rm -f gwnd.$ymdh - else - grbfile=`grep 'File for' grb_${ymdh}.out` - if [ -z "$grbfile" ] - then - set +x - echo ' ' - echo " File for $ymdh : cannot identify source" - echo ' ' - [[ "$LOUD" = YES ]] && set -x - nr_err=`expr $nr_err + 1` - rm -f gwnd.$ymdh - else - if [ ! -f gwnd.$ymdh ] - then - set +x - echo ' ' - echo " File for $ymdh : file not found" - echo ' ' - [[ "$LOUD" = YES ]] && set -x - nr_err=`expr $nr_err + 1` - else - set +x - echo ' ' - echo " $grbfile" - echo ' ' - [[ "$LOUD" = YES ]] && set -x - mv -f grb_${ymdh}.out $DATA/outtmp - fi - fi - fi - ymdh=`$NDATE $WAV_WND_HOUR_INC $ymdh` - done - - if [ -f grb_*.out ] - then - set +x - echo ' ' - echo '**********************************' - echo '*** ERROR OUTPUT wave_g2ges.sh ***' - echo '**********************************' - echo ' Possibly in multiple calls' - [[ "$LOUD" = YES ]] && set -x - set +x - for file in grb_*.out - do - echo ' ' - sed "s/^/$file : /g" $file - done - echo ' ' - [[ "$LOUD" = YES ]] && set -x - mv -f grb_*.out $DATA/outtmp - postmsg "$jlogfile" "NON-FATAL ERROR in wave_g2ges.sh, possibly in multiple calls." - fi - - if [ "$nr_err" -gt "$err_max" ] - then - msg="ABNORMAL EXIT: TOO MANY MISSING WIND INPUT GRB2 FILES" - postmsg "$jlogfile" "$msg" - set +x - echo ' ' - echo '********************************************* ' - echo '*** FATAL ERROR : ERROR(S) IN WIND FILES *** ' - echo '********************************************* ' - echo ' ' - echo $msg - [[ "$LOUD" = YES ]] && set -x - err=6;export err;${errchk} - fi - - rm -f cmdfile - -# 3.d Getwind data into single file - - set +x - echo ' ' - echo ' Concatenate extracted wind fields ...' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - - files=`ls gwnd.* 2> /dev/null` - - if [ -z "$files" ] - then - msg="ABNORMAL EXIT: NO gwnd.* FILES FOUND" - postmsg "$jlogfile" "$msg" - set +x - echo ' ' - echo '******************************************** ' - echo '*** FATAL ERROR : CANNOT FIND WIND FILES *** ' - echo '******************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - err=7;export err;${errchk} - fi - - rm -f gfs.wind - - for file in $files - do - cat $file >> gfs.wind - rm -f $file - done - -# 3.e Run ww3_prnc - -# Convert gfs wind to netcdf - $WGRIB2 gfs.wind -netcdf gfs.nc - - for grdID in $WAVEWND_FID $curvID - do - - set +x - echo ' ' - echo " Running wind fields through preprocessor for grid $grdID" - echo ' ' - [[ "$LOUD" = YES ]] && set -x - - sed -e "s/HDRFL/T/g" ww3_prnc.wind.$grdID.tmpl > ww3_prnc.inp - ln -sf mod_def.$grdID mod_def.ww3 - - set +x - echo "Executing $EXECwave/ww3_prnc" - [[ "$LOUD" = YES ]] && set -x - - $EXECwave/ww3_prnc > prnc.out - err=$? - - if [ "$err" != '0' ] - then - msg="ABNORMAL EXIT: ERROR IN waveprnc" - postmsg "$jlogfile" "$msg" - set +x - echo ' ' - echo '*************************************** ' - echo '*** FATAL ERROR : ERROR IN waveprnc *** ' - echo '*************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - err=8;export err;${errchk} - fi - - if [ ! -f wind.ww3 ] - then - msg="ABNORMAL EXIT: FILE wind.ww3 MISSING" - postmsg "$jlogfile" "$msg" - set +x - echo ' ' - cat waveprep.out - echo ' ' - echo '****************************************' - echo '*** FATAL ERROR : wind.ww3 NOT FOUND ***' - echo '****************************************' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - err=9;export err;${errchk} - fi - - rm -f mod_def.ww3 - rm -f ww3_prep.inp - - mv wind.ww3 wind.$grdID - mv times.WND times.$grdID - -# 3.f Check to make sure wind files are properly incremented - - first_pass='yes' - windOK='yes' - while read line - do - date1=`echo $line | cut -d ' ' -f 1` - date2=`echo $line | cut -d ' ' -f 2` - ymdh="$date1`echo $date2 | cut -c1-2`" - if [ "$first_pass" = 'no' ] - then - hr_inc=`$NHOUR $ymdh $ymdh_prev` - if [ "${hr_inc}" -gt "${WAV_WND_HOUR_INC}" ] - then - set +x - echo "Incorrect wind forcing increment at $ymdh" - [[ "$LOUD" = YES ]] && set -x - windOK='no' - fi - fi - ymdh_prev=$ymdh - first_pass='no' - done < times.$grdID - - if [ "$windOK" = 'no' ] - then - set +x - echo ' ' - echo '************************************************' - echo '*** ERROR : WIND DATA INCREMENT INCORRECT !! ***' - echo '************************************************' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "$WAV_MOD_TAG prep $grdID $date $cycle : error in wind increment." - err=10;export err;${errchk} - fi - - done - - rm -f gfs.wind - rm -f mod_def.ww3 - rm -f ww3_prnc.inp - else - echo ' ' - echo " Wind input is not perturbed, single wnd file generated, skipping ${WAV_MOD_TAG}" - echo ' ' - - fi - - else + echo ' ' + echo '*************************************************** ' + echo '*** FATAL ERROR : Not set-up to preprocess wind *** ' + echo '*************************************************** ' + echo ' ' + set_trace + err=6;export err;${errchk} - echo ' ' - echo ' Atmospheric inputs not generated, this run did not request pre-processed winds ' - echo ' ' - fi #------------------------------------------------------------------- -# CURR processing (not functional, TBD for uncoupled and GFSv16 cases) +# 3. Process current fields if [ "${WW3CURINP}" = 'YES' ]; then -#------------------------------------------------------------------- -# 4. Process current fields -# 4.a Get into single file +# Get into single file if [ "${RUNMEM}" = "-1" ] || [ "${WW3CURIENS}" = "T" ] || [ "$waveMEMB" = "00" ] then @@ -636,29 +306,62 @@ echo ' ' echo ' Concatenate binary current fields ...' echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace # Prepare files for cfp process rm -f cmdfile touch cmdfile chmod 744 cmdfile - ymdh_rtofs=${PDY}00 # RTOFS runs once daily use ${PDY}00 - ymdh_end=`$NDATE ${FHMAX_WAV_CUR} ${PDY}00` + ymdh_rtofs=${RPDY}00 # RTOFS runs once daily use ${PDY}00 + if [ "$ymdh_beg" -lt "$ymdh_rtofs" ];then + #If the start time is before the first hour of RTOFS, use the previous cycle + export RPDY=$($NDATE -24 ${RPDY}00 | cut -c1-8) + fi + #Set the first time for RTOFS files to be the beginning time of simulation + ymdh_rtofs=$ymdh_beg + + if [ "$FHMAX_WAV_CUR" -le 72 ]; then + rtofsfile1="${COM_RTOFS}/${WAVECUR_DID}.${RPDY}/rtofs_glo_2ds_f024_prog.nc" + rtofsfile2="${COM_RTOFS}/${WAVECUR_DID}.${RPDY}/rtofs_glo_2ds_f048_prog.nc" + rtofsfile3="${COM_RTOFS}/${WAVECUR_DID}.${RPDY}/rtofs_glo_2ds_f072_prog.nc" + if [ ! -f $rtofsfile1 ] || [ ! -f $rtofsfile2 ] || [ ! -f $rtofsfile3 ]; then + #Needed current files are not available, so use RTOFS from previous day + export RPDY=$($NDATE -24 ${RPDY}00 | cut -c1-8) + fi + else + rtofsfile1="${COM_RTOFS}/${WAVECUR_DID}.${RPDY}/rtofs_glo_2ds_f096_prog.nc" + rtofsfile2="${COM_RTOFS}/${WAVECUR_DID}.${RPDY}/rtofs_glo_2ds_f120_prog.nc" + rtofsfile3="${COM_RTOFS}/${WAVECUR_DID}.${RPDY}/rtofs_glo_2ds_f144_prog.nc" + rtofsfile4="${COM_RTOFS}/${WAVECUR_DID}.${RPDY}/rtofs_glo_2ds_f168_prog.nc" + rtofsfile5="${COM_RTOFS}/${WAVECUR_DID}.${RPDY}/rtofs_glo_2ds_f192_prog.nc" + if [ ! -f $rtofsfile1 ] || [ ! -f $rtofsfile2 ] || [ ! -f $rtofsfile3 ] || + [ ! -f $rtofsfile4 ] || [ ! -f $rtofsfile5 ]; then + #Needed current files are not available, so use RTOFS from previous day + export RPDY=$($NDATE -24 ${RPDY}00 | cut -c1-8) + fi + fi + + ymdh_end_rtofs=$($NDATE ${FHMAX_WAV_CUR} ${RPDY}00) + if [ "$ymdh_end" -lt "$ymdh_end_rtofs" ]; then + ymdh_end_rtofs=$ymdh_end + fi + NDATE_DT=${WAV_CUR_HF_DT} FLGHF='T' - + FLGFIRST='T' + fext='f' + if [ ${CFP_MP:-"NO"} = "YES" ]; then nm=0 ; fi # Counter for MP CFP - while [ "$ymdh_rtofs" -le "$ymdh_end" ] + while [ "$ymdh_rtofs" -le "$ymdh_end_rtofs" ] do -# Timing has to be made relative to the single 00z RTOFS cycle for that PDY - fhr_rtofs=`${NHOUR} ${ymdh_rtofs} ${PDY}00` - fext='f' - - fh3_rtofs=`printf "%03d" "${fhr_rtofs#0}"` + # Timing has to be made relative to the single 00z RTOFS cycle for RTOFS PDY (RPDY) + # Start at first fhr for + fhr_rtofs=$(${NHOUR} ${ymdh_rtofs} ${RPDY}00) + fh3_rtofs=$(printf "%03d" "${fhr_rtofs#0}") - curfile1h=${COMIN_WAV_CUR}/rtofs_glo_2ds_${fext}${fh3_rtofs}_1hrly_prog.nc - curfile3h=${COMIN_WAV_CUR}/rtofs_glo_2ds_${fext}${fh3_rtofs}_3hrly_prog.nc + curfile1h=${COM_RTOFS}/${WAVECUR_DID}.${RPDY}/rtofs_glo_2ds_${fext}${fh3_rtofs}_prog.nc + curfile3h=${COM_RTOFS}/${WAVECUR_DID}.${RPDY}/rtofs_glo_2ds_${fext}${fh3_rtofs}_prog.nc if [ -s ${curfile1h} ] && [ "${FLGHF}" = "T" ] ; then curfile=${curfile1h} @@ -667,42 +370,51 @@ FLGHF='F' else echo ' ' - set $setoff + if [ "${FLGHF}" = "T" ] ; then + curfile=${curfile1h} + else + curfile=${curfile3h} + fi + set -x echo ' ' echo '************************************** ' echo "*** FATAL ERROR: NO CUR FILE $curfile *** " echo '************************************** ' echo ' ' - set $seton - postmsg "$jlogfile" "FATAL ERROR - NO CURRENT FILE (RTOFS)" + set_trace + echo "FATAL ERROR - NO CURRENT FILE (RTOFS)" err=11;export err;${errchk} - exit 0 + exit $err echo ' ' fi if [ ${CFP_MP:-"NO"} = "YES" ]; then - echo "$nm $USHwave/wave_prnc_cur.sh $ymdh_rtofs $curfile $fhr_rtofs > cur_$ymdh_rtofs.out 2>&1" >> cmdfile - nm=`expr $nm + 1` + echo "$nm $USHwave/wave_prnc_cur.sh $ymdh_rtofs $curfile $fhr_rtofs $FLGFIRST > cur_$ymdh_rtofs.out 2>&1" >> cmdfile + nm=$(expr $nm + 1) else - echo "$USHwave/wave_prnc_cur.sh $ymdh_rtofs $curfile $fhr_rtofs > cur_$ymdh_rtofs.out 2>&1" >> cmdfile + echo "$USHwave/wave_prnc_cur.sh $ymdh_rtofs $curfile $fhr_rtofs $FLGFIRST > cur_$ymdh_rtofs.out 2>&1" >> cmdfile fi + if [ "${FLGFIRST}" = "T" ] ; then + FLGFIRST='F' + fi + if [ $fhr_rtofs -ge ${WAV_CUR_HF_FH} ] ; then NDATE_DT=${WAV_CUR_DT} fi - ymdh_rtofs=`$NDATE $NDATE_DT $ymdh_rtofs` + ymdh_rtofs=$($NDATE $NDATE_DT $ymdh_rtofs) done # Set number of processes for mpmd - wavenproc=`wc -l cmdfile | awk '{print $1}'` - wavenproc=`echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))` + wavenproc=$(wc -l cmdfile | awk '{print $1}') + wavenproc=$(echo $((${wavenproc}<${NTASKS}?${wavenproc}:${NTASKS}))) set +x echo ' ' - echo " Executing the curr prnc cmdfile at : `date`" + echo " Executing the curr prnc cmdfile at : $(date)" echo ' ------------------------------------' echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace if [ $wavenproc -gt '1' ] then @@ -727,22 +439,21 @@ echo '********************************************' echo ' See Details Below ' echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace fi - files=`ls ${WAVECUR_DID}.* 2> /dev/null` + files=$(ls ${WAVECUR_DID}.* 2> /dev/null) if [ -z "$files" ] then - msg="ABNORMAL EXIT: NO ${WAVECUR_FID}.* FILES FOUND" - postmsg "$jlogfile" "$msg" set +x echo ' ' echo '******************************************** ' echo '*** FATAL ERROR : CANNOT FIND CURR FILES *** ' echo '******************************************** ' echo ' ' - [[ "$LOUD" = YES ]] && set -x + echo "ABNORMAL EXIT: NO ${WAVECUR_FID}.* FILES FOUND" + set_trace err=11;export err;${errchk} fi @@ -754,7 +465,7 @@ cat $file >> cur.${WAVECUR_FID} done - cp -f cur.${WAVECUR_FID} ${COMOUT}/rundata/${CDUMP}wave.${WAVECUR_FID}.$cycle.cur + cp -f cur.${WAVECUR_FID} ${COM_WAVE_PREP}/${RUN}wave.${WAVECUR_FID}.$cycle.cur else echo ' ' @@ -771,259 +482,7 @@ fi # --------------------------------------------------------------------------- # -# 5. Create ww3_multi.inp - -# 5.a ww3_multi template - - if [ -f $FIXwave/ww3_multi.${NET}.inp.tmpl ] - then - cp $FIXwave/ww3_multi.${NET}.inp.tmpl ww3_multi.inp.tmpl - fi - - if [ ! -f ww3_multi.inp.tmpl ] - then - msg="ABNORMAL EXIT: NO TEMPLATE FOR INPUT FILE" - postmsg "$jlogfile" "$msg" - set +x - echo ' ' - echo '************************************************ ' - echo '*** FATAL ERROR : NO TEMPLATE FOR INPUT FILE *** ' - echo '************************************************ ' - echo ' ' - echo $msg - [[ "$LOUD" = YES ]] && set -x - err=12;export err;${errchk} - fi - -# 5.b Buoy location file - - if [ -f $FIXwave/wave_${NET}.buoys ] - then - cp $FIXwave/wave_${NET}.buoys buoy.loc - fi - - if [ -f buoy.loc ] - then - set +x - echo " buoy.loc copied ($FIXwave/wave_${NET}.buoys)." - [[ "$LOUD" = YES ]] && set -x - else - set +x - echo " buoy.loc not found. **** WARNING **** " - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" " FATAL ERROR : buoy.loc ($FIXwave/wave_${NET}.buoys) NOT FOUND" - touch buoy.loc - err=13;export err;${errchk} - fi - -# Initialize inp file parameters - NFGRIDS=0 - NMGRIDS=0 - CPLILINE='$' - ICELINE='$' - ICEFLAG='no' - CURRLINE='$' - CURRFLAG='no' - WINDLINE='$' - WINDFLAG='no' - UNIPOINTS='$' - -# Check for required inputs and coupling options - if [ $waveuoutpGRD ] - then - UNIPOINTS="'$waveuoutpGRD'" - fi - -# Check if waveesmfGRD is set - if [ ${waveesmfGRD} ] - then - NFGRIDS=`expr $NFGRIDS + 1` - fi - - case ${WW3ATMINP} in - 'YES' ) - NFGRIDS=`expr $NFGRIDS + 1` - WINDLINE=" '$WAVEWND_FID' F F T F F F F" - WINDFLAG="$WAVEWND_FID" - ;; - 'CPL' ) - WINDFLAG="CPL:${waveesmfGRD}" - WNDIFLAG='T' - CPLILINE=" '${waveesmfGRD}' F F T F F F F" - ;; - esac - - case ${WW3ICEINP} in - 'YES' ) - NFGRIDS=`expr $NFGRIDS + 1` - ICEIFLAG='T' - ICELINE=" '$WAVEICE_FID' F F F T F F F" - ICEFLAG="$WAVEICE_FID" - ;; - 'CPL' ) - ICEFLAG="CPL:${waveesmfGRD}" - ICEIFLAG='T' - CPLILINE=" '${waveesmfGRD}' F F ${WNDIFLAG} T F F F" - ;; - esac - - case ${WW3CURINP} in - 'YES' ) - if [ "$WAVECUR_FID" != "$WAVEICE_FID" ]; then - NFGRIDS=`expr $NFGRIDS + 1` - CURRLINE=" '$WAVECUR_FID' F T F F F F F" - CURRFLAG="$WAVECUR_FID" - else # cur fields share the same grid as ice grid - ICELINE=" '$WAVEICE_FID' F T F ${ICEIFLAG} F F F" - CURRFLAG="$WAVEICE_FID" - fi - ;; - 'CPL' ) - CURRFLAG="CPL:${waveesmfGRD}" - CURIFLAG='T' - CPLILINE=" '${waveesmfGRD}' F T ${WNDIFLAG} ${ICEFLAG} F F F" - ;; - esac - - unset agrid - agrid= - gline= - GRDN=0 -# grdGRP=1 # Single group for now - for grid in ${waveGRD} - do - GRDN=`expr ${GRDN} + 1` - agrid=( ${agrid[*]} ${grid} ) - NMGRIDS=`expr $NMGRIDS + 1` - gridN=`echo $waveGRDN | awk -v i=$GRDN '{print $i}'` - gridG=`echo $waveGRDG | awk -v i=$GRDN '{print $i}'` - gline="${gline}'${grid}' 'no' 'CURRFLAG' 'WINDFLAG' 'ICEFLAG' 'no' 'no' 'no' ${gridN} ${gridG} 0.00 1.00 F\n" - done - gline="${gline}\$" - echo $gline - - sed -e "s/NFGRIDS/$NFGRIDS/g" \ - -e "s/NMGRIDS/${NMGRIDS}/g" \ - -e "s/FUNIPNT/${FUNIPNT}/g" \ - -e "s/IOSRV/${IOSRV}/g" \ - -e "s/FPNTPROC/${FPNTPROC}/g" \ - -e "s/FGRDPROC/${FGRDPROC}/g" \ - -e "s/OUTPARS/${OUTPARS_WAV}/g" \ - -e "s/CPLILINE/${CPLILINE}/g" \ - -e "s/UNIPOINTS/${UNIPOINTS}/g" \ - -e "s/GRIDLINE/${gline}/g" \ - -e "s/ICELINE/$ICELINE/g" \ - -e "s/CURRLINE/$CURRLINE/g" \ - -e "s/WINDLINE/$WINDLINE/g" \ - -e "s/ICEFLAG/$ICEFLAG/g" \ - -e "s/CURRFLAG/$CURRFLAG/g" \ - -e "s/WINDFLAG/$WINDFLAG/g" \ - -e "s/RUN_BEG/$time_beg/g" \ - -e "s/RUN_END/$time_end/g" \ - -e "s/OUT_BEG/$time_beg_out/g" \ - -e "s/OUT_END/$time_end/g" \ - -e "s/DTFLD/ $DTFLD_WAV/g" \ - -e "s/GOFILETYPE/ $GOFILETYPE/g" \ - -e "s/POFILETYPE/ $POFILETYPE/g" \ - -e "s/FIELDS/$FIELDS/g" \ - -e "s/DTPNT/ $DTPNT_WAV/g" \ - -e "/BUOY_FILE/r buoy.loc" \ - -e "s/BUOY_FILE/DUMMY/g" \ - -e "s/RST_BEG/$time_rst_ini/g" \ - -e "s/RSTTYPE/$RSTTYPE_WAV/g" \ - -e "s/RST_2_BEG/$time_rst2_ini/g" \ - -e "s/DTRST/$DT_1_RST_WAV/g" \ - -e "s/DT_2_RST/$DT_2_RST_WAV/g" \ - -e "s/RST_END/$time_rst1_end/g" \ - -e "s/RST_2_END/$time_rst2_end/g" \ - ww3_multi.inp.tmpl | \ - sed -n "/DUMMY/!p" > ww3_multi.inp - - rm -f ww3_multi.inp.tmpl buoy.loc - - if [ -f ww3_multi.inp ] - then - echo " Copying file ww3_multi.${WAV_MOD_TAG}.inp to $COMOUT " - cp ww3_multi.inp ${COMOUT}/rundata/ww3_multi.${WAV_MOD_TAG}.$cycle.inp - else - echo "FATAL ERROR: file ww3_multi.${WAV_MOD_TAG}.$cycle.inp NOT CREATED, ABORTING" - err=13;export err;${errchk} - fi - -# 6. Copy rmp grid remapping pre-processed coefficients - - if [ "${USE_WAV_RMP:-YES}" = "YES" ]; then - if ls $FIXwave/rmp_src_to_dst_conserv_* 2> /dev/null - then - for file in $(ls $FIXwave/rmp_src_to_dst_conserv_*) ; do - cp -f $file ${COMOUT}/rundata - done - else - msg="NO rmp precomputed nc files found, is this OK???" - postmsg "$jlogfile" "$msg" - set +x - echo ' ' - echo '************************************************ ' - echo '*** FATAL ERROR : NO PRECOMPUTED RMP FILES FOUND *** ' - echo '************************************************ ' - echo ' ' - echo $msg - [[ "$LOUD" = YES ]] && set -x - err=13;export err;${errchk} - fi - fi - - -# --------------------------------------------------------------------------- # -# 6. Output to /com - - if [ "$SENDCOM" = 'YES' ] - then - - if [ "${WW3ATMINP}" = 'YES' ]; then - - for grdID in $WAVEWND_FID $curvID - do - set +x - echo ' ' - echo " Saving wind.$grdID as $COMOUT/rundata/${WAV_MOD_TAG}.$grdID.$PDY$cyc.wind" - echo " Saving times.$grdID file as $COMOUT/rundata/${WAV_MOD_TAG}.$grdID.$PDY$cyc.$grdID.wind.times" - echo ' ' - [[ "$LOUD" = YES ]] && set -x - cp wind.$grdID $COMOUT/rundata/${WAV_MOD_TAG}.$grdID.$PDY$cyc.wind - cp times.$grdID $COMOUT/rundata/${WAV_MOD_TAG}.$grdID.$PDY$cyc.$grdID.wind.times - done - fi - -# if [ "${WW3CURINP}" = 'YES' ]; then -# -# for grdID in $WAVECUR_FID -# do -# set +x -# echo ' ' -# echo " Saving cur.$grdID as $COMOUT/rundata/${WAV_MOD_TAG}.$grdID.$PDY$cyc.cur" -# echo ' ' -# [[ "$LOUD" = YES ]] && set -x -# cp cur.$grdID $COMOUT/rundata/${WAV_MOD_TAG}.$grdID.$PDY$cyc.cur -# done -# fi - fi - - rm -f wind.* - rm -f $WAVEICE_FID.* - rm -f times.* - -# --------------------------------------------------------------------------- # -# 7. Ending output - - set +x - echo ' ' - echo "Ending at : `date`" - echo ' ' - echo ' *** End of MWW3 preprocessor ***' - echo ' ' - [[ "$LOUD" = YES ]] && set -x +# 4. Ending output - exit $err # End of MWW3 preprocessor script ------------------------------------------- # diff --git a/scripts/exglobal_aero_analysis_finalize.py b/scripts/exglobal_aero_analysis_finalize.py new file mode 100755 index 0000000000..e9464b47e5 --- /dev/null +++ b/scripts/exglobal_aero_analysis_finalize.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +# exglobal_aero_analysis_finalize.py +# This script creates an AerosolAnalysis class +# and runs the finalize method +# which perform post-processing and clean up activities +# for a global aerosol variational analysis +import os + +from wxflow import Logger, cast_strdict_as_dtypedict +from pygfs.task.aero_analysis import AerosolAnalysis + + +# Initialize root logger +logger = Logger(level='DEBUG', colored_log=True) + + +if __name__ == '__main__': + + # Take configuration from environment and cast it as python dictionary + config = cast_strdict_as_dtypedict(os.environ) + + # Instantiate the aerosol analysis task + AeroAnl = AerosolAnalysis(config) + AeroAnl.finalize() diff --git a/scripts/exglobal_aero_analysis_initialize.py b/scripts/exglobal_aero_analysis_initialize.py new file mode 100755 index 0000000000..3a57dc8401 --- /dev/null +++ b/scripts/exglobal_aero_analysis_initialize.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +# exglobal_aero_analysis_initialize.py +# This script creates an AerosolAnalysis class +# and runs the initialize method +# which create and stage the runtime directory +# and create the YAML configuration +# for a global aerosol variational analysis +import os + +from wxflow import Logger, cast_strdict_as_dtypedict +from pygfs.task.aero_analysis import AerosolAnalysis + +# Initialize root logger +logger = Logger(level='DEBUG', colored_log=True) + + +if __name__ == '__main__': + + # Take configuration from environment and cast it as python dictionary + config = cast_strdict_as_dtypedict(os.environ) + + # Instantiate the aerosol analysis task + AeroAnl = AerosolAnalysis(config) + AeroAnl.initialize() diff --git a/scripts/exglobal_aero_analysis_run.py b/scripts/exglobal_aero_analysis_run.py new file mode 100755 index 0000000000..85f4b963a4 --- /dev/null +++ b/scripts/exglobal_aero_analysis_run.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 +# exglobal_aero_analysis_run.py +# This script creates an AerosolAnalysis object +# and runs the execute method +# which executes the global aerosol variational analysis +import os + +from wxflow import Logger, cast_strdict_as_dtypedict +from pygfs.task.aero_analysis import AerosolAnalysis + +# Initialize root logger +logger = Logger(level='DEBUG', colored_log=True) + + +if __name__ == '__main__': + + # Take configuration from environment and cast it as python dictionary + config = cast_strdict_as_dtypedict(os.environ) + + # Instantiate the aerosol analysis task + AeroAnl = AerosolAnalysis(config) + AeroAnl.execute() diff --git a/scripts/exglobal_archive.sh b/scripts/exglobal_archive.sh new file mode 100755 index 0000000000..18217f4efc --- /dev/null +++ b/scripts/exglobal_archive.sh @@ -0,0 +1,315 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################## +# Begin JOB SPECIFIC work +############################################## + +# ICS are restarts and always lag INC by $assim_freq hours +ARCHINC_CYC=${ARCH_CYC} +ARCHICS_CYC=$((ARCH_CYC-assim_freq)) +if [ "${ARCHICS_CYC}" -lt 0 ]; then + ARCHICS_CYC=$((ARCHICS_CYC+24)) +fi + +# CURRENT CYCLE +APREFIX="${RUN}.t${cyc}z." + +# Realtime parallels run GFS MOS on 1 day delay +# If realtime parallel, back up CDATE_MOS one day +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +CDATE_MOS=${PDY}${cyc} +if [ "${REALTIME}" = "YES" ]; then + CDATE_MOS=$(${NDATE} -24 "${PDY}${cyc}") +fi +PDY_MOS="${CDATE_MOS:0:8}" + +############################################################### +# Archive online for verification and diagnostics +############################################################### +source "${HOMEgfs}/ush/file_utils.sh" + +[[ ! -d ${ARCDIR} ]] && mkdir -p "${ARCDIR}" +nb_copy "${COM_ATMOS_ANALYSIS}/${APREFIX}gsistat" "${ARCDIR}/gsistat.${RUN}.${PDY}${cyc}" +nb_copy "${COM_CHEM_ANALYSIS}/${APREFIX}aerostat" "${ARCDIR}/aerostat.${RUN}.${PDY}${cyc}" +nb_copy "${COM_ATMOS_GRIB_1p00}/${APREFIX}pgrb2.1p00.anl" "${ARCDIR}/pgbanl.${RUN}.${PDY}${cyc}.grib2" + +# Archive 1 degree forecast GRIB2 files for verification +if [[ "${RUN}" == "gfs" ]]; then + fhmax=${FHMAX_GFS} + fhr=0 + while [ "${fhr}" -le "${fhmax}" ]; do + fhr2=$(printf %02i "${fhr}") + fhr3=$(printf %03i "${fhr}") + nb_copy "${COM_ATMOS_GRIB_1p00}/${APREFIX}pgrb2.1p00.f${fhr3}" "${ARCDIR}/pgbf${fhr2}.${RUN}.${PDY}${cyc}.grib2" + fhr=$((10#${fhr} + 10#${FHOUT_GFS} )) + done +fi +if [[ "${RUN}" == "gdas" ]]; then + flist="000 003 006 009" + for fhr in ${flist}; do + fname="${COM_ATMOS_GRIB_1p00}/${APREFIX}pgrb2.1p00.f${fhr}" + # TODO Shouldn't the archived files also use three-digit tags? + fhr2=$(printf %02i $((10#${fhr}))) + nb_copy "${fname}" "${ARCDIR}/pgbf${fhr2}.${RUN}.${PDY}${cyc}.grib2" + done +fi + +if [[ -s "${COM_ATMOS_TRACK}/avno.t${cyc}z.cyclone.trackatcfunix" ]]; then + # shellcheck disable=2153 + PSLOT4=${PSLOT:0:4} + # shellcheck disable= + PSLOT4=${PSLOT4^^} + sed "s:AVNO:${PSLOT4}:g" < "${COM_ATMOS_TRACK}/avno.t${cyc}z.cyclone.trackatcfunix" \ + > "${ARCDIR}/atcfunix.${RUN}.${PDY}${cyc}" + sed "s:AVNO:${PSLOT4}:g" < "${COM_ATMOS_TRACK}/avnop.t${cyc}z.cyclone.trackatcfunix" \ + > "${ARCDIR}/atcfunixp.${RUN}.${PDY}${cyc}" +fi + +if [[ "${RUN}" == "gdas" ]] && [[ -s "${COM_ATMOS_TRACK}/gdas.t${cyc}z.cyclone.trackatcfunix" ]]; then + # shellcheck disable=2153 + PSLOT4=${PSLOT:0:4} + # shellcheck disable= + PSLOT4=${PSLOT4^^} + sed "s:AVNO:${PSLOT4}:g" < "${COM_ATMOS_TRACK}/gdas.t${cyc}z.cyclone.trackatcfunix" \ + > "${ARCDIR}/atcfunix.${RUN}.${PDY}${cyc}" + sed "s:AVNO:${PSLOT4}:g" < "${COM_ATMOS_TRACK}/gdasp.t${cyc}z.cyclone.trackatcfunix" \ + > "${ARCDIR}/atcfunixp.${RUN}.${PDY}${cyc}" +fi + +if [ "${RUN}" = "gfs" ]; then + nb_copy "${COM_ATMOS_GENESIS}/storms.gfso.atcf_gen.${PDY}${cyc}" "${ARCDIR}/." + nb_copy "${COM_ATMOS_GENESIS}/storms.gfso.atcf_gen.altg.${PDY}${cyc}" "${ARCDIR}/." + nb_copy "${COM_ATMOS_TRACK}/trak.gfso.atcfunix.${PDY}${cyc}" "${ARCDIR}/." + nb_copy "${COM_ATMOS_TRACK}/trak.gfso.atcfunix.altg.${PDY}${cyc}" "${ARCDIR}/." + + mkdir -p "${ARCDIR}/tracker.${PDY}${cyc}/${RUN}" + blist="epac natl" + for basin in ${blist}; do + if [[ -f ${basin} ]]; then + cp -rp "${COM_ATMOS_TRACK}/${basin}" "${ARCDIR}/tracker.${PDY}${cyc}/${RUN}" + fi + done +fi + +# Archive required gaussian gfs forecast files for Fit2Obs +if [[ "${RUN}" == "gfs" ]] && [[ "${FITSARC}" = "YES" ]]; then + VFYARC=${VFYARC:-${ROTDIR}/vrfyarch} + [[ ! -d ${VFYARC} ]] && mkdir -p "${VFYARC}" + mkdir -p "${VFYARC}/${RUN}.${PDY}/${cyc}" + prefix="${RUN}.t${cyc}z" + fhmax=${FHMAX_FITS:-${FHMAX_GFS}} + fhr=0 + while [[ ${fhr} -le ${fhmax} ]]; do + fhr3=$(printf %03i "${fhr}") + sfcfile="${COM_ATMOS_HISTORY}/${prefix}.sfcf${fhr3}.nc" + sigfile="${COM_ATMOS_HISTORY}/${prefix}.atmf${fhr3}.nc" + nb_copy "${sfcfile}" "${VFYARC}/${RUN}.${PDY}/${cyc}/" + nb_copy "${sigfile}" "${VFYARC}/${RUN}.${PDY}/${cyc}/" + (( fhr = 10#${fhr} + 6 )) + done +fi + + +############################################################### +# Archive data either to HPSS or locally +if [[ ${HPSSARCH} = "YES" || ${LOCALARCH} = "YES" ]]; then +############################################################### + + # --set the archiving command and create local directories, if necessary + TARCMD="htar" + HSICMD="hsi" + if [[ ${LOCALARCH} = "YES" ]]; then + TARCMD="tar" + HSICMD='' + [[ ! -d "${ATARDIR}/${PDY}${cyc}" ]] && mkdir -p "${ATARDIR}/${PDY}${cyc}" + [[ ! -d "${ATARDIR}/${CDATE_MOS}" ]] && [[ -d "${ROTDIR}/gfsmos.${PDY_MOS}" ]] && [[ "${cyc}" -eq 18 ]] && mkdir -p "${ATARDIR}/${CDATE_MOS}" + fi + + #--determine when to save ICs for warm start and forecast-only runs + SAVEWARMICA="NO" + SAVEWARMICB="NO" + SAVEFCSTIC="NO" + firstday=$(${NDATE} +24 "${SDATE}") + mm="${PDY:2:2}" + dd="${PDY:4:2}" + # TODO: This math yields multiple dates sharing the same nday + nday=$(( (10#${mm}-1)*30+10#${dd} )) + mod=$((nday % ARCH_WARMICFREQ)) + if [[ "${PDY}${cyc}" -eq "${firstday}" ]] && [[ "${cyc}" -eq "${ARCHINC_CYC}" ]]; then SAVEWARMICA="YES" ; fi + if [[ "${PDY}${cyc}" -eq "${firstday}" ]] && [[ "${cyc}" -eq "${ARCHICS_CYC}" ]]; then SAVEWARMICB="YES" ; fi + if [[ "${mod}" -eq 0 ]] && [[ "${cyc}" -eq "${ARCHINC_CYC}" ]]; then SAVEWARMICA="YES" ; fi + if [[ "${mod}" -eq 0 ]] && [[ "${cyc}" -eq "${ARCHICS_CYC}" ]]; then SAVEWARMICB="YES" ; fi + + if [[ "${ARCHICS_CYC}" -eq 18 ]]; then + nday1=$((nday+1)) + mod1=$((nday1 % ARCH_WARMICFREQ)) + if [[ "${mod1}" -eq 0 ]] && [[ "${cyc}" -eq "${ARCHICS_CYC}" ]] ; then SAVEWARMICB="YES" ; fi + if [[ "${mod1}" -ne 0 ]] && [[ "${cyc}" -eq "${ARCHICS_CYC}" ]] ; then SAVEWARMICB="NO" ; fi + if [[ "${PDY}${cyc}" -eq "${SDATE}" ]] && [[ "${cyc}" -eq "${ARCHICS_CYC}" ]] ; then SAVEWARMICB="YES" ; fi + fi + + mod=$((nday % ARCH_FCSTICFREQ)) + if [[ "${mod}" -eq 0 ]] || [[ "${PDY}${cyc}" -eq "${firstday}" ]]; then SAVEFCSTIC="YES" ; fi + + cd "${DATA}" || exit 2 + + "${HOMEgfs}/ush/hpssarch_gen.sh" "${RUN}" + status=$? + if [ "${status}" -ne 0 ]; then + echo "${HOMEgfs}/ush/hpssarch_gen.sh ${RUN} failed, ABORT!" + exit "${status}" + fi + + cd "${ROTDIR}" || exit 2 + + if [[ "${RUN}" = "gfs" ]]; then + + targrp_list="gfsa gfsb" + + if [ "${ARCH_GAUSSIAN:-"NO"}" = "YES" ]; then + targrp_list="${targrp_list} gfs_flux gfs_netcdfb gfs_pgrb2b" + if [ "${MODE}" = "cycled" ]; then + targrp_list="${targrp_list} gfs_netcdfa" + fi + fi + + if [ "${DO_WAVE}" = "YES" ]; then + targrp_list="${targrp_list} gfswave" + fi + + if [ "${DO_OCN}" = "YES" ]; then + targrp_list="${targrp_list} ocn_ice_grib2_0p5 ocn_ice_grib2_0p25 ocn_2D ocn_3D ocn_xsect ocn_daily gfs_flux_1p00" + fi + + if [ "${DO_ICE}" = "YES" ]; then + targrp_list="${targrp_list} ice" + fi + + # Aerosols + if [ "${DO_AERO}" = "YES" ]; then + for targrp in chem; do + # TODO: Why is this tar being done here instead of being added to the list? + ${TARCMD} -P -cvf "${ATARDIR}/${PDY}${cyc}/${targrp}.tar" $(cat "${DATA}/${targrp}.txt") + status=$? + if [[ "${status}" -ne 0 ]] && [[ "${PDY}${cyc}" -ge "${firstday}" ]]; then + echo "HTAR ${PDY}${cyc} ${targrp}.tar failed" + exit "${status}" + fi + done + fi + + #for restarts + if [ "${SAVEFCSTIC}" = "YES" ]; then + targrp_list="${targrp_list} gfs_restarta" + fi + + #for downstream products + if [ "${DO_BUFRSND}" = "YES" ]; then + targrp_list="${targrp_list} gfs_downstream" + fi + + #--save mdl gfsmos output from all cycles in the 18Z archive directory + if [[ -d "gfsmos.${PDY_MOS}" ]] && [[ "${cyc}" -eq 18 ]]; then + set +e + # TODO: Why is this tar being done here instead of being added to the list? + ${TARCMD} -P -cvf "${ATARDIR}/${CDATE_MOS}/gfsmos.tar" "./gfsmos.${PDY_MOS}" + status=$? + if [[ "${status}" -ne 0 ]] && [[ "${PDY}${cyc}" -ge "${firstday}" ]]; then + echo "${TARCMD^^} ${PDY}${cyc} gfsmos.tar failed" + exit "${status}" + fi + set_strict + fi + elif [[ "${RUN}" = "gdas" ]]; then + + targrp_list="gdas" + + #gdaswave + if [ "${DO_WAVE}" = "YES" ]; then + targrp_list="${targrp_list} gdaswave" + fi + + #gdasocean + if [ "${DO_OCN}" = "YES" ]; then + targrp_list="${targrp_list} gdasocean gdasocean_analysis" + fi + + #gdasice + if [ "${DO_ICE}" = "YES" ]; then + targrp_list="${targrp_list} gdasice" + fi + + if [ "${SAVEWARMICA}" = "YES" ] || [ "${SAVEFCSTIC}" = "YES" ]; then + targrp_list="${targrp_list} gdas_restarta" + if [ "${DO_WAVE}" = "YES" ]; then targrp_list="${targrp_list} gdaswave_restart"; fi + if [ "${DO_OCN}" = "YES" ]; then targrp_list="${targrp_list} gdasocean_restart"; fi + if [ "${DO_ICE}" = "YES" ]; then targrp_list="${targrp_list} gdasice_restart"; fi + fi + + if [ "${SAVEWARMICB}" = "YES" ] || [ "${SAVEFCSTIC}" = "YES" ]; then + targrp_list="${targrp_list} gdas_restartb" + fi + fi + + # Turn on extended globbing options + shopt -s extglob + for targrp in ${targrp_list}; do + set +e + + # Test whether gdas.tar or gdas_restarta.tar will have rstprod data + has_rstprod="NO" + case ${targrp} in + 'gdas'|'gdas_restarta') + # Test for rstprod in each archived file + while IFS= read -r file; do + if [[ -f ${file} ]]; then + group=$( stat -c "%G" "${file}" ) + if [[ "${group}" == "rstprod" ]]; then + has_rstprod="YES" + break + fi + fi + done < "${DATA}/${targrp}.txt" + + ;; + *) ;; + esac + + # Create the tarball + tar_fl="${ATARDIR}/${PDY}${cyc}/${targrp}.tar" + ${TARCMD} -P -cvf "${tar_fl}" $(cat "${DATA}/${targrp}.txt") + status=$? + + # Change group to rstprod if it was found even if htar/tar failed in case of partial creation + if [[ "${has_rstprod}" == "YES" ]]; then + ${HSICMD} chgrp rstprod "${tar_fl}" + stat_chgrp=$? + ${HSICMD} chmod 640 "${tar_fl}" + stat_chgrp=$((stat_chgrp+$?)) + if [ "${stat_chgrp}" -gt 0 ]; then + echo "FATAL ERROR: Unable to properly restrict ${tar_fl}!" + echo "Attempting to delete ${tar_fl}" + ${HSICMD} rm "${tar_fl}" + echo "Please verify that ${tar_fl} was deleted!" + exit "${stat_chgrp}" + fi + fi + + # For safety, test if the htar/tar command failed after changing groups + if [[ "${status}" -ne 0 ]] && [[ "${PDY}${cyc}" -ge "${firstday}" ]]; then + echo "FATAL ERROR: ${TARCMD} ${tar_fl} failed" + exit "${status}" + fi + set_strict + done + # Turn extended globbing back off + shopt -u extglob + +############################################################### +fi ##end of HPSS archive +############################################################### + +exit 0 diff --git a/scripts/exglobal_atm_analysis_finalize.py b/scripts/exglobal_atm_analysis_finalize.py new file mode 100755 index 0000000000..3f4313631c --- /dev/null +++ b/scripts/exglobal_atm_analysis_finalize.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +# exglobal_atm_analysis_finalize.py +# This script creates an AtmAnalysis class +# and runs the finalize method +# which perform post-processing and clean up activities +# for a global atm variational analysis +import os + +from wxflow import Logger, cast_strdict_as_dtypedict +from pygfs.task.atm_analysis import AtmAnalysis + + +# Initialize root logger +logger = Logger(level='DEBUG', colored_log=True) + + +if __name__ == '__main__': + + # Take configuration from environment and cast it as python dictionary + config = cast_strdict_as_dtypedict(os.environ) + + # Instantiate the atm analysis task + AtmAnl = AtmAnalysis(config) + AtmAnl.finalize() diff --git a/scripts/exglobal_atm_analysis_initialize.py b/scripts/exglobal_atm_analysis_initialize.py new file mode 100755 index 0000000000..1793b24b0b --- /dev/null +++ b/scripts/exglobal_atm_analysis_initialize.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +# exglobal_atm_analysis_initialize.py +# This script creates an AtmAnalysis class +# and runs the initialize method +# which create and stage the runtime directory +# and create the YAML configuration +# for a global atm variational analysis +import os + +from wxflow import Logger, cast_strdict_as_dtypedict +from pygfs.task.atm_analysis import AtmAnalysis + +# Initialize root logger +logger = Logger(level='DEBUG', colored_log=True) + + +if __name__ == '__main__': + + # Take configuration from environment and cast it as python dictionary + config = cast_strdict_as_dtypedict(os.environ) + + # Instantiate the atm analysis task + AtmAnl = AtmAnalysis(config) + AtmAnl.initialize() diff --git a/scripts/exglobal_atm_analysis_run.py b/scripts/exglobal_atm_analysis_run.py new file mode 100755 index 0000000000..8adbe4a267 --- /dev/null +++ b/scripts/exglobal_atm_analysis_run.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 +# exglobal_atm_analysis_run.py +# This script creates an AtmAnalysis object +# and runs the execute method +# which executes the global atm variational analysis +import os + +from wxflow import Logger, cast_strdict_as_dtypedict +from pygfs.task.atm_analysis import AtmAnalysis + +# Initialize root logger +logger = Logger(level='DEBUG', colored_log=True) + + +if __name__ == '__main__': + + # Take configuration from environment and cast it as python dictionary + config = cast_strdict_as_dtypedict(os.environ) + + # Instantiate the atm analysis task + AtmAnl = AtmAnalysis(config) + AtmAnl.execute() diff --git a/scripts/exglobal_atmens_analysis_finalize.py b/scripts/exglobal_atmens_analysis_finalize.py new file mode 100755 index 0000000000..b49cb3c413 --- /dev/null +++ b/scripts/exglobal_atmens_analysis_finalize.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +# exglobal_atmens_analysis_finalize.py +# This script creates an AtmEnsAnalysis class +# and runs the finalize method +# which perform post-processing and clean up activities +# for a global atm local ensemble analysis +import os + +from wxflow import Logger, cast_strdict_as_dtypedict +from pygfs.task.atmens_analysis import AtmEnsAnalysis + + +# Initialize root logger +logger = Logger(level='DEBUG', colored_log=True) + + +if __name__ == '__main__': + + # Take configuration from environment and cast it as python dictionary + config = cast_strdict_as_dtypedict(os.environ) + + # Instantiate the atmens analysis task + AtmEnsAnl = AtmEnsAnalysis(config) + AtmEnsAnl.finalize() diff --git a/scripts/exglobal_atmens_analysis_initialize.py b/scripts/exglobal_atmens_analysis_initialize.py new file mode 100755 index 0000000000..1d578b44f2 --- /dev/null +++ b/scripts/exglobal_atmens_analysis_initialize.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +# exglobal_atmens_analysis_initialize.py +# This script creates an AtmEnsAnalysis class +# and runs the initialize method +# which create and stage the runtime directory +# and create the YAML configuration +# for a global atm local ensemble analysis +import os + +from wxflow import Logger, cast_strdict_as_dtypedict +from pygfs.task.atmens_analysis import AtmEnsAnalysis + +# Initialize root logger +logger = Logger(level='DEBUG', colored_log=True) + + +if __name__ == '__main__': + + # Take configuration from environment and cast it as python dictionary + config = cast_strdict_as_dtypedict(os.environ) + + # Instantiate the atmens analysis task + AtmEnsAnl = AtmEnsAnalysis(config) + AtmEnsAnl.initialize() diff --git a/scripts/exglobal_atmens_analysis_run.py b/scripts/exglobal_atmens_analysis_run.py new file mode 100755 index 0000000000..b2eb9fb2e4 --- /dev/null +++ b/scripts/exglobal_atmens_analysis_run.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 +# exglobal_atmens_analysis_run.py +# This script creates an AtmEnsAnalysis object +# and runs the execute method +# which executes the global atm local ensemble analysis +import os + +from wxflow import Logger, cast_strdict_as_dtypedict +from pygfs.task.atmens_analysis import AtmEnsAnalysis + +# Initialize root logger +logger = Logger(level='DEBUG', colored_log=True) + + +if __name__ == '__main__': + + # Take configuration from environment and cast it as python dictionary + config = cast_strdict_as_dtypedict(os.environ) + + # Instantiate the atmens analysis task + AtmEnsAnl = AtmEnsAnalysis(config) + AtmEnsAnl.execute() diff --git a/scripts/exglobal_atmos_analysis.sh b/scripts/exglobal_atmos_analysis.sh new file mode 100755 index 0000000000..5954802d59 --- /dev/null +++ b/scripts/exglobal_atmos_analysis.sh @@ -0,0 +1,983 @@ +#! /usr/bin/env bash + +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exglobal_atmos_analysis.sh +# Script description: Makes a global model upper air analysis with GSI +# +# Author: Rahul Mahajan Org: NCEP/EMC Date: 2017-03-02 +# +# Abstract: This script makes a global model analysis using the GSI +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# +################################################################################# + +# Set environment. + +source "${HOMEgfs}/ush/preamble.sh" + +# Directories. +pwd=$(pwd) + +# Base variables +CDATE=${CDATE:-"2001010100"} +CDUMP=${CDUMP:-"gdas"} +GDUMP=${GDUMP:-"gdas"} + +# Derived base variables +GDATE=$(${NDATE} -${assim_freq} ${CDATE}) +BDATE=$(${NDATE} -3 ${CDATE}) +PDY=$(echo ${CDATE} | cut -c1-8) +cyc=$(echo ${CDATE} | cut -c9-10) +bPDY=$(echo ${BDATE} | cut -c1-8) +bcyc=$(echo ${BDATE} | cut -c9-10) + +# Utilities +export NCP=${NCP:-"/bin/cp"} +export NMV=${NMV:-"/bin/mv"} +export NLN=${NLN:-"/bin/ln -sf"} +export CHGRP_CMD=${CHGRP_CMD:-"chgrp ${group_name:-rstprod}"} +export NCLEN=${NCLEN:-${HOMEgfs}/ush/getncdimlen} +COMPRESS=${COMPRESS:-gzip} +UNCOMPRESS=${UNCOMPRESS:-gunzip} +APRUNCFP=${APRUNCFP:-""} +APRUN_GSI=${APRUN_GSI:-${APRUN:-""}} +NTHREADS_GSI=${NTHREADS_GSI:-${NTHREADS:-1}} + +# Microphysics in the model; 99:ZC, 11:GFDLMP +export imp_physics=${imp_physics:-99} +lupp=${lupp:-".true."} +cnvw_option=${cnvw_option:-".false."} + +# Observation usage options +cao_check=${cao_check:-".true."} +ta2tb=${ta2tb:-".true."} + +# Diagnostic files options +lobsdiag_forenkf=${lobsdiag_forenkf:-".false."} +netcdf_diag=${netcdf_diag:-".true."} +binary_diag=${binary_diag:-".false."} + +# IAU +DOIAU=${DOIAU:-"NO"} +export IAUFHRS=${IAUFHRS:-"6"} + +# Dependent Scripts and Executables +GSIEXEC=${GSIEXEC:-${HOMEgfs}/exec/gsi.x} +export NTHREADS_CALCINC=${NTHREADS_CALCINC:-1} +export APRUN_CALCINC=${APRUN_CALCINC:-${APRUN:-""}} +export APRUN_CALCANL=${APRUN_CALCANL:-${APRUN:-""}} +export APRUN_CHGRES=${APRUN_CALCANL:-${APRUN:-""}} +export CALCINCEXEC=${CALCINCEXEC:-${HOMEgfs}/exec/calc_increment_ens.x} +export CALCINCNCEXEC=${CALCINCNCEXEC:-${HOMEgfs}/exec/calc_increment_ens_ncio.x} +export CALCANLEXEC=${CALCANLEXEC:-${HOMEgfs}/exec/calc_analysis.x} +export CHGRESNCEXEC=${CHGRESNCEXEC:-${HOMEgfs}/exec/enkf_chgres_recenter_nc.x} +export CHGRESINCEXEC=${CHGRESINCEXEC:-${HOMEgfs}/exec/interp_inc.x} +CHGRESEXEC=${CHGRESEXEC:-${HOMEgfs}/exec/enkf_chgres_recenter.x} +export NTHREADS_CHGRES=${NTHREADS_CHGRES:-24} +CALCINCPY=${CALCINCPY:-${HOMEgfs}/ush/calcinc_gfs.py} + +# OPS flags +RUN=${RUN:-""} +SENDECF=${SENDECF:-"NO"} +SENDDBN=${SENDDBN:-"NO"} +RUN_GETGES=${RUN_GETGES:-"NO"} +GETGESSH=${GETGESSH:-"getges.sh"} +export gesenvir=${gesenvir:-${envir}} + +# Observations +OPREFIX=${OPREFIX:-""} +OSUFFIX=${OSUFFIX:-""} +PREPQC=${PREPQC:-${COM_OBS}/${OPREFIX}prepbufr${OSUFFIX}} +PREPQCPF=${PREPQCPF:-${COM_OBS}/${OPREFIX}prepbufr.acft_profiles${OSUFFIX}} +NSSTBF=${NSSTBF:-${COM_OBS}/${OPREFIX}nsstbufr${OSUFFIX}} +SATWND=${SATWND:-${COM_OBS}/${OPREFIX}satwnd.tm00.bufr_d${OSUFFIX}} +OSCATBF=${OSCATBF:-${COM_OBS}/${OPREFIX}oscatw.tm00.bufr_d${OSUFFIX}} +RAPIDSCATBF=${RAPIDSCATBF:-${COM_OBS}/${OPREFIX}rapidscatw.tm00.bufr_d${OSUFFIX}} +GSNDBF=${GSNDBF:-${COM_OBS}/${OPREFIX}goesnd.tm00.bufr_d${OSUFFIX}} +GSNDBF1=${GSNDBF1:-${COM_OBS}/${OPREFIX}goesfv.tm00.bufr_d${OSUFFIX}} +B1HRS2=${B1HRS2:-${COM_OBS}/${OPREFIX}1bhrs2.tm00.bufr_d${OSUFFIX}} +B1MSU=${B1MSU:-${COM_OBS}/${OPREFIX}1bmsu.tm00.bufr_d${OSUFFIX}} +B1HRS3=${B1HRS3:-${COM_OBS}/${OPREFIX}1bhrs3.tm00.bufr_d${OSUFFIX}} +B1HRS4=${B1HRS4:-${COM_OBS}/${OPREFIX}1bhrs4.tm00.bufr_d${OSUFFIX}} +B1AMUA=${B1AMUA:-${COM_OBS}/${OPREFIX}1bamua.tm00.bufr_d${OSUFFIX}} +B1AMUB=${B1AMUB:-${COM_OBS}/${OPREFIX}1bamub.tm00.bufr_d${OSUFFIX}} +B1MHS=${B1MHS:-${COM_OBS}/${OPREFIX}1bmhs.tm00.bufr_d${OSUFFIX}} +ESHRS3=${ESHRS3:-${COM_OBS}/${OPREFIX}eshrs3.tm00.bufr_d${OSUFFIX}} +ESAMUA=${ESAMUA:-${COM_OBS}/${OPREFIX}esamua.tm00.bufr_d${OSUFFIX}} +ESAMUB=${ESAMUB:-${COM_OBS}/${OPREFIX}esamub.tm00.bufr_d${OSUFFIX}} +ESMHS=${ESMHS:-${COM_OBS}/${OPREFIX}esmhs.tm00.bufr_d${OSUFFIX}} +HRS3DB=${HRS3DB:-${COM_OBS}/${OPREFIX}hrs3db.tm00.bufr_d${OSUFFIX}} +AMUADB=${AMUADB:-${COM_OBS}/${OPREFIX}amuadb.tm00.bufr_d${OSUFFIX}} +AMUBDB=${AMUBDB:-${COM_OBS}/${OPREFIX}amubdb.tm00.bufr_d${OSUFFIX}} +MHSDB=${MHSDB:-${COM_OBS}/${OPREFIX}mhsdb.tm00.bufr_d${OSUFFIX}} +AIRSBF=${AIRSBF:-${COM_OBS}/${OPREFIX}airsev.tm00.bufr_d${OSUFFIX}} +IASIBF=${IASIBF:-${COM_OBS}/${OPREFIX}mtiasi.tm00.bufr_d${OSUFFIX}} +ESIASI=${ESIASI:-${COM_OBS}/${OPREFIX}esiasi.tm00.bufr_d${OSUFFIX}} +IASIDB=${IASIDB:-${COM_OBS}/${OPREFIX}iasidb.tm00.bufr_d${OSUFFIX}} +AMSREBF=${AMSREBF:-${COM_OBS}/${OPREFIX}amsre.tm00.bufr_d${OSUFFIX}} +AMSR2BF=${AMSR2BF:-${COM_OBS}/${OPREFIX}amsr2.tm00.bufr_d${OSUFFIX}} +GMI1CRBF=${GMI1CRBF:-${COM_OBS}/${OPREFIX}gmi1cr.tm00.bufr_d${OSUFFIX}} # GMI temporarily disabled due to array overflow. +SAPHIRBF=${SAPHIRBF:-${COM_OBS}/${OPREFIX}saphir.tm00.bufr_d${OSUFFIX}} +SEVIRIBF=${SEVIRIBF:-${COM_OBS}/${OPREFIX}sevcsr.tm00.bufr_d${OSUFFIX}} +AHIBF=${AHIBF:-${COM_OBS}/${OPREFIX}ahicsr.tm00.bufr_d${OSUFFIX}} +SSTVIIRS=${SSTVIIRS:-${COM_OBS}/${OPREFIX}sstvcw.tm00.bufr_d${OSUFFIX}} +ABIBF=${ABIBF:-${COM_OBS}/${OPREFIX}gsrcsr.tm00.bufr_d${OSUFFIX}} +CRISBF=${CRISBF:-${COM_OBS}/${OPREFIX}cris.tm00.bufr_d${OSUFFIX}} +ESCRIS=${ESCRIS:-${COM_OBS}/${OPREFIX}escris.tm00.bufr_d${OSUFFIX}} +CRISDB=${CRISDB:-${COM_OBS}/${OPREFIX}crisdb.tm00.bufr_d${OSUFFIX}} +CRISFSBF=${CRISFSBF:-${COM_OBS}/${OPREFIX}crisf4.tm00.bufr_d${OSUFFIX}} +ESCRISFS=${ESCRISFS:-${COM_OBS}/${OPREFIX}escrsf.tm00.bufr_d${OSUFFIX}} +CRISFSDB=${CRISFSDB:-${COM_OBS}/${OPREFIX}crsfdb.tm00.bufr_d${OSUFFIX}} +ATMSBF=${ATMSBF:-${COM_OBS}/${OPREFIX}atms.tm00.bufr_d${OSUFFIX}} +ESATMS=${ESATMS:-${COM_OBS}/${OPREFIX}esatms.tm00.bufr_d${OSUFFIX}} +ATMSDB=${ATMSDB:-${COM_OBS}/${OPREFIX}atmsdb.tm00.bufr_d${OSUFFIX}} +SSMITBF=${SSMITBF:-${COM_OBS}/${OPREFIX}ssmit.tm00.bufr_d${OSUFFIX}} +SSMISBF=${SSMISBF:-${COM_OBS}/${OPREFIX}ssmisu.tm00.bufr_d${OSUFFIX}} +SBUVBF=${SBUVBF:-${COM_OBS}/${OPREFIX}osbuv8.tm00.bufr_d${OSUFFIX}} +OMPSNPBF=${OMPSNPBF:-${COM_OBS}/${OPREFIX}ompsn8.tm00.bufr_d${OSUFFIX}} +OMPSTCBF=${OMPSTCBF:-${COM_OBS}/${OPREFIX}ompst8.tm00.bufr_d${OSUFFIX}} +OMPSLPBF=${OMPSLPBF:-${COM_OBS}/${OPREFIX}ompslp.tm00.bufr_d${OSUFFIX}} +GOMEBF=${GOMEBF:-${COM_OBS}/${OPREFIX}gome.tm00.bufr_d${OSUFFIX}} +OMIBF=${OMIBF:-${COM_OBS}/${OPREFIX}omi.tm00.bufr_d${OSUFFIX}} +MLSBF=${MLSBF:-${COM_OBS}/${OPREFIX}mls.tm00.bufr_d${OSUFFIX}} +SMIPCP=${SMIPCP:-${COM_OBS}/${OPREFIX}spssmi.tm00.bufr_d${OSUFFIX}} +TMIPCP=${TMIPCP:-${COM_OBS}/${OPREFIX}sptrmm.tm00.bufr_d${OSUFFIX}} +GPSROBF=${GPSROBF:-${COM_OBS}/${OPREFIX}gpsro.tm00.bufr_d${OSUFFIX}} +TCVITL=${TCVITL:-${COM_OBS}/${OPREFIX}syndata.tcvitals.tm00} +B1AVHAM=${B1AVHAM:-${COM_OBS}/${OPREFIX}avcsam.tm00.bufr_d${OSUFFIX}} +B1AVHPM=${B1AVHPM:-${COM_OBS}/${OPREFIX}avcspm.tm00.bufr_d${OSUFFIX}} +HDOB=${HDOB:-${COM_OBS}/${OPREFIX}hdob.tm00.bufr_d${OSUFFIX}} + +# Guess files +GPREFIX=${GPREFIX:-""} +GSUFFIX=${GSUFFIX:-".nc"} +SFCG03=${SFCG03:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}sfcf003${GSUFFIX}} +SFCG04=${SFCG04:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}sfcf004${GSUFFIX}} +SFCG05=${SFCG05:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}sfcf005${GSUFFIX}} +SFCGES=${SFCGES:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}sfcf006${GSUFFIX}} +SFCG07=${SFCG07:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}sfcf007${GSUFFIX}} +SFCG08=${SFCG08:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}sfcf008${GSUFFIX}} +SFCG09=${SFCG09:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}sfcf009${GSUFFIX}} +ATMG03=${ATMG03:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}atmf003${GSUFFIX}} +ATMG04=${ATMG04:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}atmf004${GSUFFIX}} +ATMG05=${ATMG05:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}atmf005${GSUFFIX}} +ATMGES=${ATMGES:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}atmf006${GSUFFIX}} +ATMG07=${ATMG07:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}atmf007${GSUFFIX}} +ATMG08=${ATMG08:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}atmf008${GSUFFIX}} +ATMG09=${ATMG09:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}atmf009${GSUFFIX}} +GBIAS=${GBIAS:-${COM_ATMOS_ANALYSIS_PREV}/${GPREFIX}abias} +GBIASPC=${GBIASPC:-${COM_ATMOS_ANALYSIS_PREV}/${GPREFIX}abias_pc} +GBIASAIR=${GBIASAIR:-${COM_ATMOS_ANALYSIS_PREV}/${GPREFIX}abias_air} +GRADSTAT=${GRADSTAT:-${COM_ATMOS_ANALYSIS_PREV}/${GPREFIX}radstat} + +# Analysis files +export APREFIX=${APREFIX:-""} +SFCANL=${SFCANL:-${COM_ATMOS_ANALYSIS}/${APREFIX}sfcanl.nc} +DTFANL=${DTFANL:-${COM_ATMOS_ANALYSIS}/${APREFIX}dtfanl.nc} +ATMANL=${ATMANL:-${COM_ATMOS_ANALYSIS}/${APREFIX}atmanl.nc} +ABIAS=${ABIAS:-${COM_ATMOS_ANALYSIS}/${APREFIX}abias} +ABIASPC=${ABIASPC:-${COM_ATMOS_ANALYSIS}/${APREFIX}abias_pc} +ABIASAIR=${ABIASAIR:-${COM_ATMOS_ANALYSIS}/${APREFIX}abias_air} +ABIASe=${ABIASe:-${COM_ATMOS_ANALYSIS}/${APREFIX}abias_int} +RADSTAT=${RADSTAT:-${COM_ATMOS_ANALYSIS}/${APREFIX}radstat} +GSISTAT=${GSISTAT:-${COM_ATMOS_ANALYSIS}/${APREFIX}gsistat} +PCPSTAT=${PCPSTAT:-${COM_ATMOS_ANALYSIS}/${APREFIX}pcpstat} +CNVSTAT=${CNVSTAT:-${COM_ATMOS_ANALYSIS}/${APREFIX}cnvstat} +OZNSTAT=${OZNSTAT:-${COM_ATMOS_ANALYSIS}/${APREFIX}oznstat} + +# Increment files +ATMINC=${ATMINC:-${COM_ATMOS_ANALYSIS}/${APREFIX}atminc.nc} + +# Obs diag +RUN_SELECT=${RUN_SELECT:-"NO"} +USE_SELECT=${USE_SELECT:-"NO"} +USE_RADSTAT=${USE_RADSTAT:-"YES"} +SELECT_OBS=${SELECT_OBS:-${COM_ATMOS_ANALYSIS}/${APREFIX}obsinput} +GENDIAG=${GENDIAG:-"YES"} +DIAG_SUFFIX=${DIAG_SUFFIX:-""} +if [ ${netcdf_diag} = ".true." ] ; then + DIAG_SUFFIX="${DIAG_SUFFIX}.nc4" +fi +DIAG_COMPRESS=${DIAG_COMPRESS:-"YES"} +DIAG_TARBALL=${DIAG_TARBALL:-"YES"} +USE_CFP=${USE_CFP:-"NO"} +CFP_MP=${CFP_MP:-"NO"} +nm="" +if [ ${CFP_MP} = "YES" ]; then + nm=0 +fi +DIAG_DIR=${DIAG_DIR:-${COM_ATMOS_ANALYSIS}/gsidiags} + +# Set script / GSI control parameters +DOHYBVAR=${DOHYBVAR:-"NO"} +NMEM_ENS=${NMEM_ENS:-0} +export DONST=${DONST:-"NO"} +NST_GSI=${NST_GSI:-0} +NSTINFO=${NSTINFO:-0} +ZSEA1=${ZSEA1:-0} +ZSEA2=${ZSEA2:-0} +FAC_DTL=${FAC_DTL:-1} +FAC_TSL=${FAC_TSL:-1} +TZR_QC=${TZR_QC:-1} +USE_READIN_ANL_SFCMASK=${USE_READIN_ANL_SFCMASK:-.false.} +SMOOTH_ENKF=${SMOOTH_ENKF:-"YES"} +export DOIAU=${DOIAU:-"NO"} +DO_CALC_INCREMENT=${DO_CALC_INCREMENT:-"NO"} +DO_CALC_ANALYSIS=${DO_CALC_ANALYSIS:-"NO"} +export INCREMENTS_TO_ZERO=${INCREMENTS_TO_ZERO:-"'NONE'"} +USE_CORRELATED_OBERRS=${USE_CORRELATED_OBERRS:-"YES"} + +# Get header information from Guess files +LONB=${LONB:-$(${NCLEN} ${ATMGES} grid_xt)} # get LONB +LATB=${LATB:-$(${NCLEN} ${ATMGES} grid_yt)} # get LATB +LEVS=${LEVS:-$(${NCLEN} ${ATMGES} pfull)} # get LEVS +JCAP=${JCAP:--9999} # there is no jcap in these files +[ ${JCAP} -eq -9999 -a ${LATB} -ne -9999 ] && JCAP=$((LATB-2)) +[ ${LONB} -eq -9999 -o ${LATB} -eq -9999 -o ${LEVS} -eq -9999 -o ${JCAP} -eq -9999 ] && exit -9999 + +# Get header information from Ensemble Guess files +if [ ${DOHYBVAR} = "YES" ]; then + SFCGES_ENSMEAN=${SFCGES_ENSMEAN:-${COM_ATMOS_HISTORY_ENS_PREV}/${GPREFIX_ENS}sfcf006.ensmean.nc} + export ATMGES_ENSMEAN=${ATMGES_ENSMEAN:-${COM_ATMOS_HISTORY_ENS_PREV}/${GPREFIX_ENS}atmf006.ensmean.nc} + LONB_ENKF=${LONB_ENKF:-$(${NCLEN} ${ATMGES_ENSMEAN} grid_xt)} # get LONB_ENKF + LATB_ENKF=${LATB_ENKF:-$(${NCLEN} ${ATMGES_ENSMEAN} grid_yt)} # get LATB_ENFK + LEVS_ENKF=${LEVS_ENKF:-$(${NCLEN} ${ATMGES_ENSMEAN} pfull)} # get LATB_ENFK + JCAP_ENKF=${JCAP_ENKF:--9999} # again, no jcap in the netcdf files + NLON_ENKF=${NLON_ENKF:-${LONB_ENKF}} + NLAT_ENKF=${NLAT_ENKF:-$((${LATB_ENKF}+2))} + [ ${JCAP_ENKF} -eq -9999 -a ${LATB_ENKF} -ne -9999 ] && JCAP_ENKF=$((LATB_ENKF-2)) + [ ${LONB_ENKF} -eq -9999 -o ${LATB_ENKF} -eq -9999 -o ${LEVS_ENKF} -eq -9999 -o ${JCAP_ENKF} -eq -9999 ] && exit -9999 +else + LONB_ENKF=0 # just for if statement later +fi + +# Get dimension information based on CASE +res=$(echo ${CASE} | cut -c2-) +JCAP_CASE=$((res*2-2)) +LATB_CASE=$((res*2)) +LONB_CASE=$((res*4)) + +# Set analysis resolution information +if [ ${DOHYBVAR} = "YES" ]; then + JCAP_A=${JCAP_A:-${JCAP_ENKF:-${JCAP}}} + LONA=${LONA:-${LONB_ENKF:-${LONB}}} + LATA=${LATA:-${LATB_ENKF:-${LATB}}} +else + JCAP_A=${JCAP_A:-${JCAP}} + LONA=${LONA:-${LONB}} + LATA=${LATA:-${LATB}} +fi +NLON_A=${NLON_A:-${LONA}} +NLAT_A=${NLAT_A:-$((${LATA}+2))} + +DELTIM=${DELTIM:-$((3600/(${JCAP_A}/20)))} + +# determine if writing or calculating increment +if [ ${DO_CALC_INCREMENT} = "YES" ]; then + write_fv3_increment=".false." +else + write_fv3_increment=".true." + WRITE_INCR_ZERO="incvars_to_zero= ${INCREMENTS_TO_ZERO}," + WRITE_ZERO_STRAT="incvars_zero_strat= ${INCVARS_ZERO_STRAT}," + WRITE_STRAT_EFOLD="incvars_efold= ${INCVARS_EFOLD}," +fi + +# GSI Fix files +RTMFIX=${CRTM_FIX} +BERROR=${BERROR:-${FIXgsi}/Big_Endian/global_berror.l${LEVS}y${NLAT_A}.f77} +SATANGL=${SATANGL:-${FIXgsi}/global_satangbias.txt} +SATINFO=${SATINFO:-${FIXgsi}/global_satinfo.txt} +RADCLOUDINFO=${RADCLOUDINFO:-${FIXgsi}/cloudy_radiance_info.txt} +ATMSFILTER=${ATMSFILTER:-${FIXgsi}/atms_beamwidth.txt} +ANAVINFO=${ANAVINFO:-${FIXgsi}/global_anavinfo.l${LEVS}.txt} +CONVINFO=${CONVINFO:-${FIXgsi}/global_convinfo.txt} +vqcdat=${vqcdat:-${FIXgsi}/vqctp001.dat} +INSITUINFO=${INSITUINFO:-${FIXgsi}/global_insituinfo.txt} +OZINFO=${OZINFO:-${FIXgsi}/global_ozinfo.txt} +PCPINFO=${PCPINFO:-${FIXgsi}/global_pcpinfo.txt} +AEROINFO=${AEROINFO:-${FIXgsi}/global_aeroinfo.txt} +SCANINFO=${SCANINFO:-${FIXgsi}/global_scaninfo.txt} +HYBENSINFO=${HYBENSINFO:-${FIXgsi}/global_hybens_info.l${LEVS}.txt} +OBERROR=${OBERROR:-${FIXgsi}/prepobs_errtable.global} + +# GSI namelist +SETUP=${SETUP:-""} +GRIDOPTS=${GRIDOPTS:-""} +BKGVERR=${BKGVERR:-""} +ANBKGERR=${ANBKGERR:-""} +JCOPTS=${JCOPTS:-""} +STRONGOPTS=${STRONGOPTS:-""} +OBSQC=${OBSQC:-""} +OBSINPUT=${OBSINPUT:-""} +SUPERRAD=${SUPERRAD:-""} +SINGLEOB=${SINGLEOB:-""} +LAGDATA=${LAGDATA:-""} +HYBRID_ENSEMBLE=${HYBRID_ENSEMBLE:-""} +RAPIDREFRESH_CLDSURF=${RAPIDREFRESH_CLDSURF:-""} +CHEM=${CHEM:-""} +NST=${NST:-""} + +#uGSI Namelist parameters +lrun_subdirs=${lrun_subdirs:-".true."} +if [ ${DOHYBVAR} = "YES" ]; then + l_hyb_ens=.true. + export l4densvar=${l4densvar:-".false."} + export lwrite4danl=${lwrite4danl:-".false."} +else + l_hyb_ens=.false. + export l4densvar=.false. + export lwrite4danl=.false. +fi + +# Set 4D-EnVar specific variables +if [ ${DOHYBVAR} = "YES" -a ${l4densvar} = ".true." -a ${lwrite4danl} = ".true." ]; then + ATMA03=${ATMA03:-${COM_ATMOS_ANALYSIS}/${APREFIX}atma003.nc} + ATMI03=${ATMI03:-${COM_ATMOS_ANALYSIS}/${APREFIX}atmi003.nc} + ATMA04=${ATMA04:-${COM_ATMOS_ANALYSIS}/${APREFIX}atma004.nc} + ATMI04=${ATMI04:-${COM_ATMOS_ANALYSIS}/${APREFIX}atmi004.nc} + ATMA05=${ATMA05:-${COM_ATMOS_ANALYSIS}/${APREFIX}atma005.nc} + ATMI05=${ATMI05:-${COM_ATMOS_ANALYSIS}/${APREFIX}atmi005.nc} + ATMA07=${ATMA07:-${COM_ATMOS_ANALYSIS}/${APREFIX}atma007.nc} + ATMI07=${ATMI07:-${COM_ATMOS_ANALYSIS}/${APREFIX}atmi007.nc} + ATMA08=${ATMA08:-${COM_ATMOS_ANALYSIS}/${APREFIX}atma008.nc} + ATMI08=${ATMI08:-${COM_ATMOS_ANALYSIS}/${APREFIX}atmi008.nc} + ATMA09=${ATMA09:-${COM_ATMOS_ANALYSIS}/${APREFIX}atma009.nc} + ATMI09=${ATMI09:-${COM_ATMOS_ANALYSIS}/${APREFIX}atmi009.nc} +fi + +################################################################################ +# Preprocessing +mkdata=NO +if [ ! -d ${DATA} ]; then + mkdata=YES + mkdir -p ${DATA} +fi + +cd ${DATA} || exit 99 + +############################################################## +# Fixed files +${NLN} ${BERROR} berror_stats +${NLN} ${SATANGL} satbias_angle +${NLN} ${SATINFO} satinfo +${NLN} ${RADCLOUDINFO} cloudy_radiance_info.txt +${NLN} ${ATMSFILTER} atms_beamwidth.txt +${NLN} ${ANAVINFO} anavinfo +${NLN} ${CONVINFO} convinfo +${NLN} ${vqcdat} vqctp001.dat +${NLN} ${INSITUINFO} insituinfo +${NLN} ${OZINFO} ozinfo +${NLN} ${PCPINFO} pcpinfo +${NLN} ${AEROINFO} aeroinfo +${NLN} ${SCANINFO} scaninfo +${NLN} ${HYBENSINFO} hybens_info +${NLN} ${OBERROR} errtable + +#If using correlated error, link to the covariance files +if [ ${USE_CORRELATED_OBERRS} == "YES" ]; then + if grep -q "Rcov" ${ANAVINFO} ; then + if ls ${FIXgsi}/Rcov* 1> /dev/null 2>&1; then + ${NLN} ${FIXgsi}/Rcov* ${DATA} + echo "using correlated obs error" + else + echo "FATAL ERROR: Satellite error covariance files (Rcov) are missing." + echo "Check for the required Rcov files in " ${ANAVINFO} + exit 1 + fi + else + echo "FATAL ERROR: Satellite error covariance info missing in " ${ANAVINFO} + exit 1 + fi + +# Correlated error utlizes mkl lapack. Found it necesary to fix the +# number of mkl threads to ensure reproducible results independent +# of the job configuration. + export MKL_NUM_THREADS=1 + +else + echo "not using correlated obs error" +fi + +############################################################## +# CRTM Spectral and Transmittance coefficients +mkdir -p crtm_coeffs +for file in $(awk '{if($1!~"!"){print $1}}' satinfo | sort | uniq); do + ${NLN} ${RTMFIX}/${file}.SpcCoeff.bin ./crtm_coeffs/${file}.SpcCoeff.bin + ${NLN} ${RTMFIX}/${file}.TauCoeff.bin ./crtm_coeffs/${file}.TauCoeff.bin +done +${NLN} ${RTMFIX}/amsua_metop-a_v2.SpcCoeff.bin ./crtm_coeffs/amsua_metop-a_v2.SpcCoeff.bin + +${NLN} ${RTMFIX}/Nalli.IRwater.EmisCoeff.bin ./crtm_coeffs/Nalli.IRwater.EmisCoeff.bin +${NLN} ${RTMFIX}/NPOESS.IRice.EmisCoeff.bin ./crtm_coeffs/NPOESS.IRice.EmisCoeff.bin +${NLN} ${RTMFIX}/NPOESS.IRland.EmisCoeff.bin ./crtm_coeffs/NPOESS.IRland.EmisCoeff.bin +${NLN} ${RTMFIX}/NPOESS.IRsnow.EmisCoeff.bin ./crtm_coeffs/NPOESS.IRsnow.EmisCoeff.bin +${NLN} ${RTMFIX}/NPOESS.VISice.EmisCoeff.bin ./crtm_coeffs/NPOESS.VISice.EmisCoeff.bin +${NLN} ${RTMFIX}/NPOESS.VISland.EmisCoeff.bin ./crtm_coeffs/NPOESS.VISland.EmisCoeff.bin +${NLN} ${RTMFIX}/NPOESS.VISsnow.EmisCoeff.bin ./crtm_coeffs/NPOESS.VISsnow.EmisCoeff.bin +${NLN} ${RTMFIX}/NPOESS.VISwater.EmisCoeff.bin ./crtm_coeffs/NPOESS.VISwater.EmisCoeff.bin +${NLN} ${RTMFIX}/FASTEM6.MWwater.EmisCoeff.bin ./crtm_coeffs/FASTEM6.MWwater.EmisCoeff.bin +${NLN} ${RTMFIX}/AerosolCoeff.bin ./crtm_coeffs/AerosolCoeff.bin +${NLN} ${RTMFIX}/CloudCoeff.GFDLFV3.-109z-1.bin ./crtm_coeffs/CloudCoeff.bin + +############################################################## +# Observational data +${NLN} ${PREPQC} prepbufr +${NLN} ${PREPQCPF} prepbufr_profl +${NLN} ${SATWND} satwndbufr +${NLN} ${OSCATBF} oscatbufr +${NLN} ${RAPIDSCATBF} rapidscatbufr +${NLN} ${GSNDBF} gsndrbufr +${NLN} ${GSNDBF1} gsnd1bufr +${NLN} ${B1HRS2} hirs2bufr +${NLN} ${B1MSU} msubufr +${NLN} ${B1HRS3} hirs3bufr +${NLN} ${B1HRS4} hirs4bufr +${NLN} ${B1AMUA} amsuabufr +${NLN} ${B1AMUB} amsubbufr +${NLN} ${B1MHS} mhsbufr +${NLN} ${ESHRS3} hirs3bufrears +${NLN} ${ESAMUA} amsuabufrears +${NLN} ${ESAMUB} amsubbufrears +#$NLN $ESMHS mhsbufrears +${NLN} ${HRS3DB} hirs3bufr_db +${NLN} ${AMUADB} amsuabufr_db +${NLN} ${AMUBDB} amsubbufr_db +#$NLN $MHSDB mhsbufr_db +${NLN} ${SBUVBF} sbuvbufr +${NLN} ${OMPSNPBF} ompsnpbufr +${NLN} ${OMPSLPBF} ompslpbufr +${NLN} ${OMPSTCBF} ompstcbufr +${NLN} ${GOMEBF} gomebufr +${NLN} ${OMIBF} omibufr +${NLN} ${MLSBF} mlsbufr +${NLN} ${SMIPCP} ssmirrbufr +${NLN} ${TMIPCP} tmirrbufr +${NLN} ${AIRSBF} airsbufr +${NLN} ${IASIBF} iasibufr +${NLN} ${ESIASI} iasibufrears +${NLN} ${IASIDB} iasibufr_db +${NLN} ${AMSREBF} amsrebufr +${NLN} ${AMSR2BF} amsr2bufr +#${NLN} ${GMI1CRBF} gmibufr # GMI temporarily disabled due to array overflow. +${NLN} ${SAPHIRBF} saphirbufr +${NLN} ${SEVIRIBF} seviribufr +${NLN} ${CRISBF} crisbufr +${NLN} ${ESCRIS} crisbufrears +${NLN} ${CRISDB} crisbufr_db +${NLN} ${CRISFSBF} crisfsbufr +${NLN} ${ESCRISFS} crisfsbufrears +${NLN} ${CRISFSDB} crisfsbufr_db +${NLN} ${ATMSBF} atmsbufr +${NLN} ${ESATMS} atmsbufrears +${NLN} ${ATMSDB} atmsbufr_db +${NLN} ${SSMITBF} ssmitbufr +${NLN} ${SSMISBF} ssmisbufr +${NLN} ${GPSROBF} gpsrobufr +${NLN} ${TCVITL} tcvitl +${NLN} ${B1AVHAM} avhambufr +${NLN} ${B1AVHPM} avhpmbufr +${NLN} ${AHIBF} ahibufr +${NLN} ${ABIBF} abibufr +${NLN} ${HDOB} hdobbufr +${NLN} ${SSTVIIRS} sstviirs + +[[ ${DONST} = "YES" ]] && ${NLN} ${NSSTBF} nsstbufr + +############################################################## +# Required bias guess files +${NLN} ${GBIAS} satbias_in +${NLN} ${GBIASPC} satbias_pc +${NLN} ${GBIASAIR} aircftbias_in +${NLN} ${GRADSTAT} radstat.gdas + +############################################################## +# Required model guess files +${NLN} ${ATMG03} sigf03 +${NLN} ${ATMGES} sigf06 +${NLN} ${ATMG09} sigf09 + +${NLN} ${SFCG03} sfcf03 +${NLN} ${SFCGES} sfcf06 +${NLN} ${SFCG09} sfcf09 + +[[ -f ${ATMG04} ]] && ${NLN} ${ATMG04} sigf04 +[[ -f ${ATMG05} ]] && ${NLN} ${ATMG05} sigf05 +[[ -f ${ATMG07} ]] && ${NLN} ${ATMG07} sigf07 +[[ -f ${ATMG08} ]] && ${NLN} ${ATMG08} sigf08 + +[[ -f ${SFCG04} ]] && ${NLN} ${SFCG04} sfcf04 +[[ -f ${SFCG05} ]] && ${NLN} ${SFCG05} sfcf05 +[[ -f ${SFCG07} ]] && ${NLN} ${SFCG07} sfcf07 +[[ -f ${SFCG08} ]] && ${NLN} ${SFCG08} sfcf08 + +if [ ${DOHYBVAR} = "YES" ]; then + + # Link ensemble members + mkdir -p ensemble_data + + ENKF_SUFFIX="s" + [[ ${SMOOTH_ENKF} = "NO" ]] && ENKF_SUFFIX="" + + fhrs="06" + if [ ${l4densvar} = ".true." ]; then + fhrs="03 04 05 06 07 08 09" + nhr_obsbin=1 + fi + + for imem in $(seq 1 ${NMEM_ENS}); do + memchar="mem$(printf %03i "${imem}")" + MEMDIR=${memchar} RUN=${GDUMP_ENS} YMD=${gPDY} HH=${gcyc} generate_com COM_ATMOS_HISTORY + + for fhr in ${fhrs}; do + ${NLN} ${COM_ATMOS_HISTORY}/${GPREFIX_ENS}atmf0${fhr}${ENKF_SUFFIX}.nc ./ensemble_data/sigf${fhr}_ens_${memchar} + if [ ${cnvw_option} = ".true." ]; then + ${NLN} ${COM_ATMOS_HISTORY}/${GPREFIX_ENS}sfcf0${fhr}.nc ./ensemble_data/sfcf${fhr}_ens_${memchar} + fi + done + done + +fi + +############################################################## +# Handle inconsistent surface mask between background, ensemble and analysis grids +# This needs re-visiting in the context of NSST; especially references to JCAP* +if [ ${JCAP} -ne ${JCAP_A} ]; then + if [ ${DOHYBVAR} = "YES" -a ${JCAP_A} = ${JCAP_ENKF} ]; then + if [ -e ${SFCGES_ENSMEAN} ]; then + USE_READIN_ANL_SFCMASK=.true. + ${NLN} ${SFCGES_ENSMEAN} sfcf06_anlgrid + else + echo "Warning: Inconsistent sfc mask between analysis and ensemble grids, GSI will interpolate" + fi + else + echo "Warning: Inconsistent sfc mask between analysis and background grids, GSI will interpolate" + fi +fi + +############################################################## +# Diagnostic files +# if requested, link GSI diagnostic file directories for use later +if [ ${GENDIAG} = "YES" ] ; then + if [ ${lrun_subdirs} = ".true." ] ; then + if [ -d ${DIAG_DIR} ]; then + rm -rf ${DIAG_DIR} + fi + npe_m1="$((${npe_gsi}-1))" + for pe in $(seq 0 ${npe_m1}); do + pedir="dir."$(printf %04i ${pe}) + mkdir -p ${DIAG_DIR}/${pedir} + ${NLN} ${DIAG_DIR}/${pedir} ${pedir} + done + else + err_exit "FATAL ERROR: lrun_subdirs must be true. lrun_subdirs=${lrun_subdirs}" + fi +fi + +############################################################## +# Output files +${NLN} ${ATMANL} siganl +${NLN} ${ATMINC} siginc.nc +if [ ${DOHYBVAR} = "YES" -a ${l4densvar} = ".true." -a ${lwrite4danl} = ".true." ]; then + ${NLN} ${ATMA03} siga03 + ${NLN} ${ATMI03} sigi03.nc + ${NLN} ${ATMA04} siga04 + ${NLN} ${ATMI04} sigi04.nc + ${NLN} ${ATMA05} siga05 + ${NLN} ${ATMI05} sigi05.nc + ${NLN} ${ATMA07} siga07 + ${NLN} ${ATMI07} sigi07.nc + ${NLN} ${ATMA08} siga08 + ${NLN} ${ATMI08} sigi08.nc + ${NLN} ${ATMA09} siga09 + ${NLN} ${ATMI09} sigi09.nc +fi +${NLN} ${ABIAS} satbias_out +${NLN} ${ABIASPC} satbias_pc.out +${NLN} ${ABIASAIR} aircftbias_out + +if [ ${DONST} = "YES" ]; then + ${NLN} ${DTFANL} dtfanl +fi + +# If requested, link (and if tarred, de-tar obsinput.tar) into obs_input.* files +if [ ${USE_SELECT} = "YES" ]; then + rm obs_input.* + nl=$(file ${SELECT_OBS} | cut -d: -f2 | grep tar | wc -l) + if [ ${nl} -eq 1 ]; then + rm obsinput.tar + ${NLN} ${SELECT_OBS} obsinput.tar + tar -xvf obsinput.tar + rm obsinput.tar + else + for filetop in $(ls ${SELECT_OBS}/obs_input.*); do + fileloc=$(basename ${filetop}) + ${NLN} ${filetop} ${fileloc} + done + fi +fi + +############################################################## +# If requested, copy and de-tar guess radstat file +if [ ${USE_RADSTAT} = "YES" ]; then + if [ ${USE_CFP} = "YES" ]; then + [[ -f ${DATA}/unzip.sh ]] && rm ${DATA}/unzip.sh + [[ -f ${DATA}/mp_unzip.sh ]] && rm ${DATA}/mp_unzip.sh + cat > ${DATA}/unzip.sh << EOFunzip +#!/bin/sh + diag_file=\$1 + diag_suffix=\$2 + fname=\$(echo \$diag_file | cut -d'.' -f1) + fdate=\$(echo \$diag_file | cut -d'.' -f2) + ${UNCOMPRESS} \$diag_file + fnameges=\$(echo \$fname | sed 's/_ges//g') + ${NMV} \$fname.\$fdate\$diag_suffix \$fnameges +EOFunzip + chmod 755 ${DATA}/unzip.sh + fi + + listdiag=$(tar xvf radstat.gdas | cut -d' ' -f2 | grep _ges) + for type in ${listdiag}; do + diag_file=$(echo ${type} | cut -d',' -f1) + if [ ${USE_CFP} = "YES" ] ; then + echo "${nm} ${DATA}/unzip.sh ${diag_file} ${DIAG_SUFFIX}" | tee -a ${DATA}/mp_unzip.sh + if [ ${CFP_MP:-"NO"} = "YES" ]; then + nm=$((nm+1)) + fi + else + fname=$(echo ${diag_file} | cut -d'.' -f1) + date=$(echo ${diag_file} | cut -d'.' -f2) + ${UNCOMPRESS} ${diag_file} + fnameges=$(echo ${fname}|sed 's/_ges//g') + ${NMV} ${fname}.${date}${DIAG_SUFFIX} ${fnameges} + fi + done + + if [ ${USE_CFP} = "YES" ] ; then + chmod 755 ${DATA}/mp_unzip.sh + ncmd=$(cat ${DATA}/mp_unzip.sh | wc -l) + if [ ${ncmd} -gt 0 ]; then + ncmd_max=$((ncmd < npe_node_max ? ncmd : npe_node_max)) + APRUNCFP_UNZIP=$(eval echo ${APRUNCFP}) + ${APRUNCFP_UNZIP} ${DATA}/mp_unzip.sh + export err=$?; err_chk + fi + fi +fi # if [ $USE_RADSTAT = "YES" ] + +############################################################## +# GSI Namelist options +if [ ${DOHYBVAR} = "YES" ]; then + HYBRID_ENSEMBLE="n_ens=${NMEM_ENS},jcap_ens=${JCAP_ENKF},nlat_ens=${NLAT_ENKF},nlon_ens=${NLON_ENKF},jcap_ens_test=${JCAP_ENKF},${HYBRID_ENSEMBLE}" + if [ ${l4densvar} = ".true." ]; then + SETUP="niter(1)=50,niter(2)=150,niter_no_qc(1)=25,niter_no_qc(2)=0,thin4d=.true.,ens_nstarthr=3,l4densvar=${l4densvar},lwrite4danl=${lwrite4danl},${SETUP}" + JCOPTS="ljc4tlevs=.true.,${JCOPTS}" + STRONGOPTS="tlnmc_option=3,${STRONGOPTS}" + OBSQC="c_varqc=0.04,${OBSQC}" + fi +fi + +if [ ${DONST} = "YES" ]; then + NST="nstinfo=${NSTINFO},fac_dtl=${FAC_DTL},fac_tsl=${FAC_TSL},zsea1=${ZSEA1},zsea2=${ZSEA2},${NST}" +fi + +############################################################## +# Create global_gsi namelist +cat > gsiparm.anl << EOF +&SETUP + miter=2, + niter(1)=100,niter(2)=100, + niter_no_qc(1)=50,niter_no_qc(2)=0, + write_diag(1)=.true.,write_diag(2)=.false.,write_diag(3)=.true., + qoption=2, + gencode=${IGEN:-0},deltim=${DELTIM}, + factqmin=0.5,factqmax=0.0002, + iguess=-1, + tzr_qc=${TZR_QC}, + oneobtest=.false.,retrieval=.false.,l_foto=.false., + use_pbl=.false.,use_compress=.true.,nsig_ext=45,gpstop=50.,commgpstop=45.,commgpserrinf=1.0, + use_gfs_nemsio=.false.,use_gfs_ncio=.true.,sfcnst_comb=.true., + use_readin_anl_sfcmask=${USE_READIN_ANL_SFCMASK}, + lrun_subdirs=${lrun_subdirs}, + crtm_coeffs_path='./crtm_coeffs/', + newpc4pred=.true.,adp_anglebc=.true.,angord=4,passive_bc=.true.,use_edges=.false., + diag_precon=.true.,step_start=1.e-3,emiss_bc=.true.,nhr_obsbin=${nhr_obsbin:-3}, + cwoption=3,imp_physics=${imp_physics},lupp=${lupp},cnvw_option=${cnvw_option},cao_check=${cao_check}, + netcdf_diag=${netcdf_diag},binary_diag=${binary_diag}, + lobsdiag_forenkf=${lobsdiag_forenkf}, + write_fv3_incr=${write_fv3_increment}, + nhr_anal=${IAUFHRS}, + ta2tb=${ta2tb}, + ${WRITE_INCR_ZERO} + ${WRITE_ZERO_STRAT} + ${WRITE_STRAT_EFOLD} + ${SETUP} +/ +&GRIDOPTS + JCAP_B=${JCAP},JCAP=${JCAP_A},NLAT=${NLAT_A},NLON=${NLON_A},nsig=${LEVS}, + regional=.false.,nlayers(63)=3,nlayers(64)=6, + ${GRIDOPTS} +/ +&BKGERR + vs=0.7, + hzscl=1.7,0.8,0.5, + hswgt=0.45,0.3,0.25, + bw=0.0,norsp=4, + bkgv_flowdep=.true.,bkgv_rewgtfct=1.5, + bkgv_write=.false., + cwcoveqqcov=.false., + ${BKGVERR} +/ +&ANBKGERR + anisotropic=.false., + ${ANBKGERR} +/ +&JCOPTS + ljcdfi=.false.,alphajc=0.0,ljcpdry=.true.,bamp_jcpdry=5.0e7, + ${JCOPTS} +/ +&STRONGOPTS + tlnmc_option=2,nstrong=1,nvmodes_keep=8,period_max=6.,period_width=1.5, + ${STRONGOPTS} +/ +&OBSQC + dfact=0.75,dfact1=3.0,noiqc=.true.,oberrflg=.false.,c_varqc=0.02, + use_poq7=.true.,qc_noirjaco3_pole=.true.,vqc=.false.,nvqc=.true., + aircraft_t_bc=.true.,biaspredt=1.0e5,upd_aircraft=.true.,cleanup_tail=.true., + tcp_width=70.0,tcp_ermax=7.35, + ${OBSQC} +/ +&OBS_INPUT + dmesh(1)=145.0,dmesh(2)=150.0,dmesh(3)=100.0,dmesh(4)=50.0,time_window_max=3.0, + ${OBSINPUT} +/ +OBS_INPUT:: +! dfile dtype dplat dsis dval dthin dsfcalc + prepbufr ps null ps 0.0 0 0 + prepbufr t null t 0.0 0 0 + prepbufr_profl t null t 0.0 0 0 + hdobbufr t null t 0.0 0 0 + prepbufr q null q 0.0 0 0 + prepbufr_profl q null q 0.0 0 0 + hdobbufr q null q 0.0 0 0 + prepbufr pw null pw 0.0 0 0 + prepbufr uv null uv 0.0 0 0 + prepbufr_profl uv null uv 0.0 0 0 + satwndbufr uv null uv 0.0 0 0 + hdobbufr uv null uv 0.0 0 0 + prepbufr spd null spd 0.0 0 0 + hdobbufr spd null spd 0.0 0 0 + prepbufr dw null dw 0.0 0 0 + radarbufr rw null rw 0.0 0 0 + nsstbufr sst nsst sst 0.0 0 0 + gpsrobufr gps_bnd null gps 0.0 0 0 + ssmirrbufr pcp_ssmi dmsp pcp_ssmi 0.0 -1 0 + tmirrbufr pcp_tmi trmm pcp_tmi 0.0 -1 0 + sbuvbufr sbuv2 n16 sbuv8_n16 0.0 0 0 + sbuvbufr sbuv2 n17 sbuv8_n17 0.0 0 0 + sbuvbufr sbuv2 n18 sbuv8_n18 0.0 0 0 + hirs3bufr hirs3 n17 hirs3_n17 0.0 1 0 + hirs4bufr hirs4 metop-a hirs4_metop-a 0.0 1 1 + gimgrbufr goes_img g11 imgr_g11 0.0 1 0 + gimgrbufr goes_img g12 imgr_g12 0.0 1 0 + airsbufr airs aqua airs_aqua 0.0 1 1 + amsuabufr amsua n15 amsua_n15 0.0 1 1 + amsuabufr amsua n18 amsua_n18 0.0 1 1 + amsuabufr amsua metop-a amsua_metop-a 0.0 1 1 + airsbufr amsua aqua amsua_aqua 0.0 1 1 + amsubbufr amsub n17 amsub_n17 0.0 1 1 + mhsbufr mhs n18 mhs_n18 0.0 1 1 + mhsbufr mhs metop-a mhs_metop-a 0.0 1 1 + ssmitbufr ssmi f15 ssmi_f15 0.0 1 0 + amsrebufr amsre_low aqua amsre_aqua 0.0 1 0 + amsrebufr amsre_mid aqua amsre_aqua 0.0 1 0 + amsrebufr amsre_hig aqua amsre_aqua 0.0 1 0 + ssmisbufr ssmis f16 ssmis_f16 0.0 1 0 + ssmisbufr ssmis f17 ssmis_f17 0.0 1 0 + ssmisbufr ssmis f18 ssmis_f18 0.0 1 0 + gsnd1bufr sndrd1 g12 sndrD1_g12 0.0 1 0 + gsnd1bufr sndrd2 g12 sndrD2_g12 0.0 1 0 + gsnd1bufr sndrd3 g12 sndrD3_g12 0.0 1 0 + gsnd1bufr sndrd4 g12 sndrD4_g12 0.0 1 0 + gsnd1bufr sndrd1 g11 sndrD1_g11 0.0 1 0 + gsnd1bufr sndrd2 g11 sndrD2_g11 0.0 1 0 + gsnd1bufr sndrd3 g11 sndrD3_g11 0.0 1 0 + gsnd1bufr sndrd4 g11 sndrD4_g11 0.0 1 0 + gsnd1bufr sndrd1 g13 sndrD1_g13 0.0 1 0 + gsnd1bufr sndrd2 g13 sndrD2_g13 0.0 1 0 + gsnd1bufr sndrd3 g13 sndrD3_g13 0.0 1 0 + gsnd1bufr sndrd4 g13 sndrD4_g13 0.0 1 0 + iasibufr iasi metop-a iasi_metop-a 0.0 1 1 + gomebufr gome metop-a gome_metop-a 0.0 2 0 + omibufr omi aura omi_aura 0.0 2 0 + sbuvbufr sbuv2 n19 sbuv8_n19 0.0 0 0 + hirs4bufr hirs4 n19 hirs4_n19 0.0 1 1 + amsuabufr amsua n19 amsua_n19 0.0 1 1 + mhsbufr mhs n19 mhs_n19 0.0 1 1 + tcvitl tcp null tcp 0.0 0 0 + seviribufr seviri m08 seviri_m08 0.0 1 0 + seviribufr seviri m09 seviri_m09 0.0 1 0 + seviribufr seviri m10 seviri_m10 0.0 1 0 + seviribufr seviri m11 seviri_m11 0.0 1 0 + hirs4bufr hirs4 metop-b hirs4_metop-b 0.0 1 1 + amsuabufr amsua metop-b amsua_metop-b 0.0 1 1 + mhsbufr mhs metop-b mhs_metop-b 0.0 1 1 + iasibufr iasi metop-b iasi_metop-b 0.0 1 1 + gomebufr gome metop-b gome_metop-b 0.0 2 0 + atmsbufr atms npp atms_npp 0.0 1 1 + atmsbufr atms n20 atms_n20 0.0 1 1 + crisbufr cris npp cris_npp 0.0 1 0 + crisfsbufr cris-fsr npp cris-fsr_npp 0.0 1 0 + crisfsbufr cris-fsr n20 cris-fsr_n20 0.0 1 0 + gsnd1bufr sndrd1 g14 sndrD1_g14 0.0 1 0 + gsnd1bufr sndrd2 g14 sndrD2_g14 0.0 1 0 + gsnd1bufr sndrd3 g14 sndrD3_g14 0.0 1 0 + gsnd1bufr sndrd4 g14 sndrD4_g14 0.0 1 0 + gsnd1bufr sndrd1 g15 sndrD1_g15 0.0 1 0 + gsnd1bufr sndrd2 g15 sndrD2_g15 0.0 1 0 + gsnd1bufr sndrd3 g15 sndrD3_g15 0.0 1 0 + gsnd1bufr sndrd4 g15 sndrD4_g15 0.0 1 0 + oscatbufr uv null uv 0.0 0 0 + mlsbufr mls30 aura mls30_aura 0.0 0 0 + avhambufr avhrr metop-a avhrr3_metop-a 0.0 4 0 + avhpmbufr avhrr n18 avhrr3_n18 0.0 4 0 + avhambufr avhrr metop-b avhrr3_metop-b 0.0 4 0 + avhambufr avhrr metop-c avhrr3_metop-c 0.0 4 0 + avhpmbufr avhrr n19 avhrr3_n19 0.0 4 0 + amsr2bufr amsr2 gcom-w1 amsr2_gcom-w1 0.0 3 0 + gmibufr gmi gpm gmi_gpm 0.0 1 0 + saphirbufr saphir meghat saphir_meghat 0.0 3 0 + ahibufr ahi himawari8 ahi_himawari8 0.0 1 0 + abibufr abi g16 abi_g16 0.0 1 0 + abibufr abi g17 abi_g17 0.0 1 0 + rapidscatbufr uv null uv 0.0 0 0 + ompsnpbufr ompsnp npp ompsnp_npp 0.0 0 0 + ompslpbufr ompslp npp ompslp_npp 0.0 0 0 + ompstcbufr ompstc8 npp ompstc8_npp 0.0 2 0 + ompsnpbufr ompsnp n20 ompsnp_n20 0.0 0 0 + ompstcbufr ompstc8 n20 ompstc8_n20 0.0 2 0 + amsuabufr amsua metop-c amsua_metop-c 0.0 1 1 + mhsbufr mhs metop-c mhs_metop-c 0.0 1 1 + iasibufr iasi metop-c iasi_metop-c 0.0 1 1 + sstviirs viirs-m npp viirs-m_npp 0.0 4 0 + sstviirs viirs-m j1 viirs-m_j1 0.0 4 0 + ahibufr ahi himawari9 ahi_himawari9 0.0 1 0 + sstviirs viirs-m j2 viirs-m_j2 0.0 4 0 + ompsnpbufr ompsnp n21 ompsnp_n21 0.0 0 0 + ompstcbufr ompstc8 n21 ompstc8_n21 0.0 2 0 + gomebufr gome metop-c gome_metop-c 0.0 2 0 +:: +&SUPEROB_RADAR + ${SUPERRAD} +/ +&LAG_DATA + ${LAGDATA} +/ +&HYBRID_ENSEMBLE + l_hyb_ens=${l_hyb_ens}, + generate_ens=.false., + beta_s0=0.125,readin_beta=.false., + s_ens_h=800.,s_ens_v=-0.8,readin_localization=.true., + aniso_a_en=.false.,oz_univ_static=.false.,uv_hyb_ens=.true., + ensemble_path='./ensemble_data/', + ens_fast_read=.true., + ${HYBRID_ENSEMBLE} +/ +&RAPIDREFRESH_CLDSURF + dfi_radar_latent_heat_time_period=30.0, + ${RAPIDREFRESH_CLDSURF} +/ +&CHEM + ${CHEM} +/ +&SINGLEOB_TEST + maginnov=0.1,magoberr=0.1,oneob_type='t', + oblat=45.,oblon=180.,obpres=1000.,obdattim=${CDATE}, + obhourset=0., + ${SINGLEOB} +/ +&NST + nst_gsi=${NST_GSI}, + ${NST} +/ +EOF +cat gsiparm.anl + +############################################################## +# Run gsi analysis + +export OMP_NUM_THREADS=${NTHREADS_GSI} +export pgm=${GSIEXEC} +. prep_step + +${NCP} ${GSIEXEC} ${DATA} +${APRUN_GSI} ${DATA}/$(basename ${GSIEXEC}) 1>&1 2>&2 +export err=$?; err_chk + + +############################################################## +# If full analysis field written, calculate analysis increment +# here before releasing FV3 forecast +if [ ${DO_CALC_INCREMENT} = "YES" ]; then + ${CALCINCPY} + export err=$?; err_chk +fi + + +############################################################## +# For eupd +if [ -s satbias_out.int ]; then + ${NCP} satbias_out.int ${ABIASe} +else + ${NCP} satbias_in ${ABIASe} +fi + +# Cat runtime output files. +cat fort.2* > ${GSISTAT} + +# If requested, create obsinput tarball from obs_input.* files +if [ ${RUN_SELECT} = "YES" ]; then + echo $(date) START tar obs_input >&2 + [[ -s obsinput.tar ]] && rm obsinput.tar + ${NLN} ${SELECT_OBS} obsinput.tar + ${CHGRP_CMD} obs_input.* + tar -cvf obsinput.tar obs_input.* + chmod 750 ${SELECT_OBS} + ${CHGRP_CMD} ${SELECT_OBS} + rm obsinput.tar + echo $(date) END tar obs_input >&2 +fi + +################################################################################ +# Send alerts +if [ ${SENDDBN} = "YES" ]; then + if [ ${RUN} = "gfs" ]; then + ${DBNROOT}/bin/dbn_alert MODEL GFS_abias ${job} ${ABIAS} + fi +fi + +################################################################################ +# Postprocessing +cd ${pwd} +[[ ${mkdata} = "YES" ]] && rm -rf ${DATA} + +############################################################## +# Add this statement to release the forecast job once the +# atmopsheric analysis and updated surface RESTARTS are +# available. Do not release forecast when RUN=enkf +############################################################## +if [ ${SENDECF} = "YES" -a "${RUN}" != "enkf" ]; then + ecflow_client --event release_fcst +fi +echo "${CDUMP} ${CDATE} atminc done at $(date)" > ${COM_ATMOS_ANALYSIS}/${APREFIX}loginc.txt + +################################################################################ + +exit ${err} + +################################################################################ diff --git a/scripts/exglobal_atmos_analysis_calc.sh b/scripts/exglobal_atmos_analysis_calc.sh new file mode 100755 index 0000000000..b353d3c52b --- /dev/null +++ b/scripts/exglobal_atmos_analysis_calc.sh @@ -0,0 +1,197 @@ +#! /usr/bin/env bash + +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exglobal_atmos_analysis_calc.sh +# Script description: Runs non-diagnostic file tasks after GSI analysis is performed +# +# Author: Cory Martin Org: NCEP/EMC Date: 2020-03-03 +# +# Abstract: This script wraps up analysis-related tasks after GSI exits successfully +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# +################################################################################ + +# Set environment. + +source "$HOMEgfs/ush/preamble.sh" + +# Directories. +pwd=$(pwd) +export FIXgsm=${FIXgsm:-$HOMEgfs/fix/am} + +# Base variables +CDUMP=${CDUMP:-"gdas"} +GDUMP=${GDUMP:-"gdas"} + +# Utilities +export NCP=${NCP:-"/bin/cp"} +export NMV=${NMV:-"/bin/mv"} +export NLN=${NLN:-"/bin/ln -sf"} +export CHGRP_CMD=${CHGRP_CMD:-"chgrp ${group_name:-rstprod}"} +export NCLEN=${NCLEN:-$HOMEgfs/ush/getncdimlen} +COMPRESS=${COMPRESS:-gzip} +UNCOMPRESS=${UNCOMPRESS:-gunzip} +APRUNCFP=${APRUNCFP:-""} + +# Diagnostic files options +netcdf_diag=${netcdf_diag:-".true."} +binary_diag=${binary_diag:-".false."} + +# IAU +DOIAU=${DOIAU:-"NO"} +export IAUFHRS=${IAUFHRS:-"6"} + +# Dependent Scripts and Executables +export NTHREADS_CALCINC=${NTHREADS_CALCINC:-1} +export APRUN_CALCINC=${APRUN_CALCINC:-${APRUN:-""}} +export APRUN_CALCANL=${APRUN_CALCANL:-${APRUN:-""}} +export APRUN_CHGRES=${APRUN_CALCANL:-${APRUN:-""}} + +export CALCANLEXEC=${CALCANLEXEC:-$HOMEgfs/exec/calc_analysis.x} +export CHGRESNCEXEC=${CHGRESNCEXEC:-$HOMEgfs/exec/enkf_chgres_recenter_nc.x} +export CHGRESINCEXEC=${CHGRESINCEXEC:-$HOMEgfs/exec/interp_inc.x} +export NTHREADS_CHGRES=${NTHREADS_CHGRES:-1} +CALCINCPY=${CALCINCPY:-$HOMEgfs/ush/calcinc_gfs.py} +CALCANLPY=${CALCANLPY:-$HOMEgfs/ush/calcanl_gfs.py} + +DOGAUSFCANL=${DOGAUSFCANL-"NO"} +GAUSFCANLSH=${GAUSFCANLSH:-$HOMEgfs/ush/gaussian_sfcanl.sh} +export GAUSFCANLEXE=${GAUSFCANLEXE:-$HOMEgfs/exec/gaussian_sfcanl.x} +NTHREADS_GAUSFCANL=${NTHREADS_GAUSFCANL:-1} +APRUN_GAUSFCANL=${APRUN_GAUSFCANL:-${APRUN:-""}} + +# OPS flags +RUN=${RUN:-""} +SENDECF=${SENDECF:-"NO"} +SENDDBN=${SENDDBN:-"NO"} + +# Guess files +GPREFIX=${GPREFIX:-""} +ATMG03=${ATMG03:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}atmf003.nc} +ATMG04=${ATMG04:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}atmf004.nc} +ATMG05=${ATMG05:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}atmf005.nc} +ATMGES=${ATMGES:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}atmf006.nc} +ATMG07=${ATMG07:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}atmf007.nc} +ATMG08=${ATMG08:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}atmf008.nc} +ATMG09=${ATMG09:-${COM_ATMOS_HISTORY_PREV}/${GPREFIX}atmf009.nc} + +# Analysis files +export APREFIX=${APREFIX:-""} +SFCANL=${SFCANL:-${COM_ATMOS_ANALYSIS}/${APREFIX}sfcanl.nc} +DTFANL=${DTFANL:-${COM_ATMOS_ANALYSIS}/${APREFIX}dtfanl.nc} +ATMANL=${ATMANL:-${COM_ATMOS_ANALYSIS}/${APREFIX}atmanl.nc} + +# Increment files +ATMINC=${ATMINC:-${COM_ATMOS_ANALYSIS}/${APREFIX}atminc.nc} + +# Set script / GSI control parameters +DOHYBVAR=${DOHYBVAR:-"NO"} +lrun_subdirs=${lrun_subdirs:-".true."} +if [ $DOHYBVAR = "YES" ]; then + l_hyb_ens=.true. + export l4densvar=${l4densvar:-".false."} + export lwrite4danl=${lwrite4danl:-".false."} +else + l_hyb_ens=.false. + export l4densvar=.false. + export lwrite4danl=.false. +fi + +# Set 4D-EnVar specific variables +if [ $DOHYBVAR = "YES" -a $l4densvar = ".true." -a $lwrite4danl = ".true." ]; then + ATMA03=${ATMA03:-${COM_ATMOS_ANALYSIS}/${APREFIX}atma003.nc} + ATMI03=${ATMI03:-${COM_ATMOS_ANALYSIS}/${APREFIX}atmi003.nc} + ATMA04=${ATMA04:-${COM_ATMOS_ANALYSIS}/${APREFIX}atma004.nc} + ATMI04=${ATMI04:-${COM_ATMOS_ANALYSIS}/${APREFIX}atmi004.nc} + ATMA05=${ATMA05:-${COM_ATMOS_ANALYSIS}/${APREFIX}atma005.nc} + ATMI05=${ATMI05:-${COM_ATMOS_ANALYSIS}/${APREFIX}atmi005.nc} + ATMA07=${ATMA07:-${COM_ATMOS_ANALYSIS}/${APREFIX}atma007.nc} + ATMI07=${ATMI07:-${COM_ATMOS_ANALYSIS}/${APREFIX}atmi007.nc} + ATMA08=${ATMA08:-${COM_ATMOS_ANALYSIS}/${APREFIX}atma008.nc} + ATMI08=${ATMI08:-${COM_ATMOS_ANALYSIS}/${APREFIX}atmi008.nc} + ATMA09=${ATMA09:-${COM_ATMOS_ANALYSIS}/${APREFIX}atma009.nc} + ATMI09=${ATMI09:-${COM_ATMOS_ANALYSIS}/${APREFIX}atmi009.nc} +fi + +################################################################################ +################################################################################ +# Preprocessing +mkdata=NO +if [ ! -d $DATA ]; then + mkdata=YES + mkdir -p $DATA +fi + +cd $DATA || exit 99 + +################################################################################ +# Clean the run-directory +rm -rf dir.* + +############################################################## +# If analysis increment is written by GSI, produce an analysis file here +if [ $DO_CALC_ANALYSIS == "YES" ]; then + # link analysis and increment files + $NLN $ATMANL siganl + $NLN $ATMINC siginc.nc + if [ $DOHYBVAR = "YES" -a $l4densvar = ".true." -a $lwrite4danl = ".true." ]; then + $NLN $ATMA03 siga03 + $NLN $ATMI03 sigi03.nc + $NLN $ATMA04 siga04 + $NLN $ATMI04 sigi04.nc + $NLN $ATMA05 siga05 + $NLN $ATMI05 sigi05.nc + $NLN $ATMA07 siga07 + $NLN $ATMI07 sigi07.nc + $NLN $ATMA08 siga08 + $NLN $ATMI08 sigi08.nc + $NLN $ATMA09 siga09 + $NLN $ATMI09 sigi09.nc + fi + # link guess files + $NLN $ATMG03 sigf03 + $NLN $ATMGES sigf06 + $NLN $ATMG09 sigf09 + + [[ -f $ATMG04 ]] && $NLN $ATMG04 sigf04 + [[ -f $ATMG05 ]] && $NLN $ATMG05 sigf05 + [[ -f $ATMG07 ]] && $NLN $ATMG07 sigf07 + [[ -f $ATMG08 ]] && $NLN $ATMG08 sigf08 + + # Link hourly backgrounds (if present) + if [ -f $ATMG04 -a -f $ATMG05 -a -f $ATMG07 -a -f $ATMG08 ]; then + nhr_obsbin=1 + fi + + $CALCANLPY + export err=$?; err_chk +else + echo "Neither increment nor analysis are generated by external utils" +fi + +############################################################## +# Create gaussian grid surface analysis file at middle of window +if [ $DOGAUSFCANL = "YES" ]; then + export APRUNSFC=$APRUN_GAUSFCANL + export OMP_NUM_THREADS_SFC=$NTHREADS_GAUSFCANL + + $GAUSFCANLSH + export err=$?; err_chk +fi + +echo "${CDUMP} ${PDY}${cyc} atmanl and sfcanl done at $(date)" > "${COM_ATMOS_ANALYSIS}/${APREFIX}loganl.txt" + +################################################################################ +# Postprocessing +cd $pwd +[[ $mkdata = "YES" ]] && rm -rf $DATA + + +exit $err + diff --git a/scripts/exglobal_atmos_pmgr.sh b/scripts/exglobal_atmos_pmgr.sh new file mode 100755 index 0000000000..6e4c2ed3f4 --- /dev/null +++ b/scripts/exglobal_atmos_pmgr.sh @@ -0,0 +1,72 @@ +#! /usr/bin/env bash + +# +# Script name: exgfs_pmgr.sh.sms +# +# This script monitors the progress of the gfs_fcst job +# + +source "$HOMEgfs/ush/preamble.sh" + +hour=00 + +case $RUN in + gfs) + TEND=384 + TCP=385 + ;; + gdas) + TEND=9 + TCP=10 + ;; +esac + +if [ -e posthours ]; then + rm -f posthours +fi + +while [ $hour -lt $TCP ]; do + hour=$(printf "%02d" $hour) + echo $hour >>posthours + if [ 10#$hour -lt 120 ]; then + let "hour=hour+1" + else + let "hour=hour+3" + fi +done +postjobs=$(cat posthours) + +# +# Wait for all fcst hours to finish +# +icnt=1 +while [ $icnt -lt 1000 ]; do + for fhr in $postjobs; do + fhr3=$(printf "%03d" $fhr) + if [ -s ${COMIN}/${RUN}.${cycle}.logf${fhr}.txt -o -s ${COMIN}/${RUN}.${cycle}.logf${fhr3}.txt ]; then + if [ $fhr -eq 0 ]; then + #### ecflow_client --event release_${RUN}_postanl + ecflow_client --event release_postanl + fi + #### ecflow_client --event release_${RUN}_post${fhr} + ecflow_client --event release_post${fhr3} + # Remove current fhr from list + postjobs=$(echo $postjobs | sed "s/${fhr}//") + fi + done + + result_check=$(echo $postjobs | wc -w) + if [ $result_check -eq 0 ]; then + break + fi + + sleep 10 + icnt=$((icnt + 1)) + if [ $icnt -ge 1080 ]; then + msg="ABORTING after 3 hours of waiting for ${RUN} FCST hours $postjobs." + err_exit $msg + fi +done + + +exit diff --git a/scripts/exglobal_atmos_products.sh b/scripts/exglobal_atmos_products.sh new file mode 100755 index 0000000000..d2c0ed7466 --- /dev/null +++ b/scripts/exglobal_atmos_products.sh @@ -0,0 +1,253 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +# Programs used +export WGRIB2=${WGRIB2:-${wgrib2_ROOT}/bin/wgrib2} + +# Scripts used +INTERP_ATMOS_MASTERSH=${INTERP_ATMOS_MASTERSH:-"${HOMEgfs}/ush/interp_atmos_master.sh"} +INTERP_ATMOS_SFLUXSH=${INTERP_ATMOS_SFLUXSH:-"${HOMEgfs}/ush/interp_atmos_sflux.sh"} + +# Variables used in this job +downset=${downset:-1} # No. of groups of pressure grib2 products to create +npe_atmos_products=${npe_atmos_products:-8} # no. of processors available to process each group + +cd "${DATA}" || exit 1 + +# Set paramlist files based on FORECAST_HOUR (-1, 0, 3, 6, etc.) +# Determine if supplemental products (PGBS) (1-degree and 1/2-degree) should be generated +if (( FORECAST_HOUR <= 0 )); then + if (( FORECAST_HOUR < 0 )); then + fhr3="anl" + paramlista="${paramlista_anl}" + FLXGF="NO" + elif (( FORECAST_HOUR == 0 )); then + fhr3=$(printf "f%03d" "${FORECAST_HOUR}") + paramlista="${paramlista_f000}" + fi + PGBS="YES" +else + fhr3=$(printf "f%03d" "${FORECAST_HOUR}") + if (( FORECAST_HOUR%FHOUT_PGBS == 0 )); then + PGBS="YES" + fi +fi + +#----------------------------------------------------- +# Section creating pressure grib2 interpolated products + +# Files needed by ${INTERP_ATMOS_MASTERSH} +MASTER_FILE="${COM_ATMOS_MASTER}/${PREFIX}master.grb2${fhr3}" + +# Get inventory from ${MASTER_FILE} that matches patterns from ${paramlista} +# Extract this inventory from ${MASTER_FILE} into a smaller tmpfile or tmpfileb based on paramlista or paramlistb +# shellcheck disable=SC2312 +${WGRIB2} "${MASTER_FILE}" | grep -F -f "${paramlista}" | ${WGRIB2} -i -grib "tmpfile_${fhr3}" "${MASTER_FILE}" +export err=$?; err_chk +# Do the same as above for ${paramlistb} +if (( downset == 2 )); then + # shellcheck disable=SC2312 + ${WGRIB2} "${MASTER_FILE}" | grep -F -f "${paramlistb}" | ${WGRIB2} -i -grib "tmpfileb_${fhr3}" "${MASTER_FILE}" + export err=$?; err_chk +fi + +# Determine grids once and save them as a string and an array for processing +grid_string="0p25" +if [[ "${PGBS:-}" == "YES" ]]; then + grid_string="${grid_string}:0p50:1p00" +else + echo "Supplemental product generation is disable for fhr = ${fhr3}" + PGBS="NO" # Can't generate supplemental products if PGBS is not YES +fi +# Also transform the ${grid_string} into an array for processing +IFS=':' read -ra grids <<< "${grid_string}" + +for (( nset=1 ; nset <= downset ; nset++ )); do + + echo "Begin processing nset = ${nset}" + + # Number of processors available to process $nset + nproc=${npe_atmos_products} + + # Each set represents a group of files + if (( nset == 1 )); then + grp="" # TODO: this should be "a" when we eventually rename the pressure grib2 files per EE2 convention + elif (( nset == 2 )); then + grp="b" + fi + + # process grib2 chunkfiles to interpolate using MPMD + tmpfile="tmpfile${grp}_${fhr3}" + + # shellcheck disable=SC2312 + ncount=$(${WGRIB2} "${tmpfile}" | wc -l) + if (( nproc > ncount )); then + echo "WARNING: Total no. of available processors '${nproc}' exceeds no. of records '${ncount}' in ${tmpfile}" + echo "Reduce nproc to ${ncount} (or less) to not waste resources" + fi + inv=$(( ncount / nproc )) + rm -f "${DATA}/poescript" + + last=0 + for (( iproc = 1 ; iproc <= nproc ; iproc++ )); do + first=$((last + 1)) + last=$((last + inv)) + if (( last > ncount )); then (( last = ncount )); fi + + # if final record of is u-component, add next record v-component + # if final record is land, add next record icec + # grep returns 1 if no match is found, so temporarily turn off exit on non-zero rc + set +e + # shellcheck disable=SC2312 + ${WGRIB2} -d "${last}" "${tmpfile}" | grep -E -i "ugrd|ustm|uflx|u-gwd|land" + rc=$? + set_strict + if (( rc == 0 )); then # Matched the grep + last=$(( last + 1 )) + fi + if (( iproc == nproc )); then + last=${ncount} + fi + + # Break tmpfile into processor specific chunks in preparation for MPMD + ${WGRIB2} "${tmpfile}" -for "${first}":"${last}" -grib "${tmpfile}_${iproc}" + export err=$?; err_chk + input_file="${tmpfile}_${iproc}" + output_file_prefix="pgb2${grp}file_${fhr3}_${iproc}" + echo "${INTERP_ATMOS_MASTERSH} ${input_file} ${output_file_prefix} ${grid_string}" >> "${DATA}/poescript" + + # if at final record and have not reached the final processor then write echo's to + # poescript for remaining processors + if (( last == ncount )); then + for (( pproc = iproc+1 ; pproc < nproc ; pproc++ )); do + echo "/bin/echo ${pproc}" >> "${DATA}/poescript" + done + break + fi + done # for (( iproc = 1 ; iproc <= nproc ; iproc++ )); do + + # Run with MPMD or serial + if [[ "${USE_CFP:-}" = "YES" ]]; then + "${HOMEgfs}/ush/run_mpmd.sh" "${DATA}/poescript" + export err=$? + else + chmod 755 "${DATA}/poescript" + bash +x "${DATA}/poescript" > mpmd.out 2>&1 + export err=$? + fi + err_chk + + # We are in a loop over downset, save output from mpmd into nset specific output + cat mpmd.out # so we capture output into the main logfile + mv mpmd.out "mpmd_${nset}.out" + + # Concatenate grib files from each processor into a single one + # and clean-up as you go + echo "Concatenating processor-specific grib2 files into a single product file" + for (( iproc = 1 ; iproc <= nproc ; iproc++ )); do + for grid in "${grids[@]}"; do + cat "pgb2${grp}file_${fhr3}_${iproc}_${grid}" >> "pgb2${grp}file_${fhr3}_${grid}" + rm "pgb2${grp}file_${fhr3}_${iproc}_${grid}" + done + # There is no further use of the processor specific tmpfile; delete it + rm "${tmpfile}_${iproc}" + done + + # Move to COM and index the product grib files + for grid in "${grids[@]}"; do + prod_dir="COM_ATMOS_GRIB_${grid}" + ${NCP} "pgb2${grp}file_${fhr3}_${grid}" "${!prod_dir}/${PREFIX}pgrb2${grp}.${grid}.${fhr3}" + ${WGRIB2} -s "pgb2${grp}file_${fhr3}_${grid}" > "${!prod_dir}/${PREFIX}pgrb2${grp}.${grid}.${fhr3}.idx" + done + + echo "Finished processing nset = ${nset}" + +done # for (( nset=1 ; nset <= downset ; nset++ )) + +#--------------------------------------------------------------- + +# Section creating slfux grib2 interpolated products +# Create 1-degree sflux grib2 output +# move to COM and index it +if [[ "${FLXGF:-}" == "YES" ]]; then + + # Files needed by ${INTERP_ATMOS_SFLUXSH} + FLUX_FILE="${COM_ATMOS_MASTER}/${PREFIX}sfluxgrb${fhr3}.grib2" + + input_file="${FLUX_FILE}" + output_file_prefix="sflux_${fhr3}" + grid_string="1p00" + "${INTERP_ATMOS_SFLUXSH}" "${input_file}" "${output_file_prefix}" "${grid_string}" + export err=$?; err_chk + + # Move to COM and index the product sflux file + IFS=':' read -ra grids <<< "${grid_string}" + for grid in "${grids[@]}"; do + prod_dir="COM_ATMOS_GRIB_${grid}" + ${NCP} "sflux_${fhr3}_${grid}" "${!prod_dir}/${PREFIX}flux.${grid}.${fhr3}" + ${WGRIB2} -s "sflux_${fhr3}_${grid}" > "${!prod_dir}/${PREFIX}flux.${grid}.${fhr3}.idx" + done +fi + +#--------------------------------------------------------------- + +# Start sending DBN alerts +# Everything below this line is for sending files to DBN (SENDDBN=YES) +if [[ "${SENDDBN:-}" == "YES" ]]; then + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_PGB2_0P25" "${job}" "${COM_ATMOS_GRIB_0p25}/${PREFIX}pgrb2.0p25.${fhr3}" + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_PGB2_0P25_WIDX" "${job}" "${COM_ATMOS_GRIB_0p25}/${PREFIX}pgrb2.0p25.${fhr3}.idx" + if [[ "${RUN}" == "gfs" ]]; then + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_PGB2B_0P25" "${job}" "${COM_ATMOS_GRIB_0p25}/${PREFIX}pgrb2b.0p25.${fhr3}" + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_PGB2B_0P25_WIDX" "${job}" "${COM_ATMOS_GRIB_0p25}/${PREFIX}pgrb2b.0p25.${fhr3}.idx" + if [[ -s "${COM_ATMOS_GRIB_0p50}/${PREFIX}pgrb2.0p50.f${fhr3}" ]]; then + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_PGB2_0P5" "${job}" "${COM_ATMOS_GRIB_0p50}/${PREFIX}pgrb2.0p50.${fhr3}" + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_PGB2_0P5_WIDX" "${job}" "${COM_ATMOS_GRIB_0p50}/${PREFIX}pgrb2.0p50.${fhr3}.idx" + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_PGB2B_0P5" "${job}" "${COM_ATMOS_GRIB_0p50}/${PREFIX}pgrb2b.0p50.${fhr3}" + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_PGB2B_0P5_WIDX" "${job}" "${COM_ATMOS_GRIB_0p50}/${PREFIX}pgrb2b.0p50.${fhr3}.idx" + fi + if [[ -s "${COM_ATMOS_GRIB_1p00}/${PREFIX}pgrb2.1p00.f${fhr3}" ]]; then + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_PGB2_1P0" "${job}" "${COM_ATMOS_GRIB_1p00}/${PREFIX}pgrb2.1p00.${fhr3}" + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_PGB2_1P0_WIDX" "${job}" "${COM_ATMOS_GRIB_1p00}/${PREFIX}pgrb2.1p00.${fhr3}.idx" + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_PGB2B_1P0" "${job}" "${COM_ATMOS_GRIB_1p00}/${PREFIX}pgrb2b.1p00.${fhr3}" + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_PGB2B_1P0_WIDX" "${job}" "${COM_ATMOS_GRIB_1p00}/${PREFIX}pgrb2b.1p00.${fhr3}.idx" + fi + fi + + if [[ "${fhr3}" == "anl" ]]; then + + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_MSC_sfcanl" "${job}" "${COM_ATMOS_ANALYSIS}/${PREFIX}sfc${fhr3}.nc" + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_SA" "${job}" "${COM_ATMOS_ANALYSIS}/${PREFIX}atm${fhr3}.nc" + + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_PGA_GB2" "${job}" "${COM_ATMOS_GRIB_1p00}/${PREFIX}pgrb2.1p00.${fhr3}" + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_PGA_GB2_WIDX" "${job}" "${COM_ATMOS_GRIB_1p00}/${PREFIX}pgrb2.1p00.${fhr3}.idx" + + else # forecast hours f000, f003, f006, etc. + + if [[ "${RUN}" == "gdas" ]]; then + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_PGB_GB2" "${job}" "${COM_ATMOS_GRIB_1p00}/${PREFIX}pgrb2.1p00.${fhr3}" + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_PGB_GB2_WIDX" "${job}" "${COM_ATMOS_GRIB_1p00}/${PREFIX}pgrb2.1p00.${fhr3}.idx" + if (( FORECAST_HOUR % 3 == 0 )); then + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_SF" "${job}" "${COM_ATMOS_HISTORY}/${PREFIX}atm${fhr3}.nc" + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_BF" "${job}" "${COM_ATMOS_HISTORY}/${PREFIX}sfc${fhr3}.nc" + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_SGB_GB2" "${job}" "${COM_ATMOS_MASTER}/${PREFIX}sfluxgrb${fhr3}.grib2" + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_SGB_GB2_WIDX" "${job}" "${COM_ATMOS_MASTER}/${PREFIX}sfluxgrb${fhr3}.grib2.idx" + fi + elif [[ "${RUN}" == "gfs" ]]; then + + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_SF" "${job}" "${COM_ATMOS_HISTORY}/${PREFIX}atm${fhr3}.nc" + if (( fhr > 0 && fhr <= 84 )) || (( fhr == 120 )); then + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_BF" "${job}" "${COM_ATMOS_HISTORY}/${PREFIX}sfc${fhr3}.nc" + fi + + if [[ -s "${COM_ATMOS_MASTER}/${PREFIX}sfluxgrbf${fhr3}.grib2" ]]; then + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_SGB_GB2" "${job}" "${COM_ATMOS_MASTER}/${PREFIX}sfluxgrb${fhr3}.grib2" + "${DBNROOT}/bin/dbn_alert" MODEL "${RUN^^}_SGB_GB2_WIDX" "${job}" "${COM_ATMOS_MASTER}/${PREFIX}sfluxgrb${fhr3}.grib2.idx" + fi + fi # end if RUN=gfs + + fi # end if fhr3=anl + +fi # end if SENDDBN=YES + +exit 0 diff --git a/scripts/exglobal_atmos_sfcanl.sh b/scripts/exglobal_atmos_sfcanl.sh new file mode 100755 index 0000000000..f173886a07 --- /dev/null +++ b/scripts/exglobal_atmos_sfcanl.sh @@ -0,0 +1,224 @@ +#! /usr/bin/env bash + +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exglobal_atmos_sfcanl.sh +# Script description: Makes global model surface analysis files +# +# Author: Russ Treadon Org: NCEP/EMC Date: 2021-12-13 +# +# Abstract: This script makes global model surface analysis files +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# +################################################################################ + +# Set environment. + +source "${HOMEgfs}/ush/preamble.sh" + +# Directories. +pwd=$(pwd) + +# Derived base variables +# Ignore possible spelling error (nothing is misspelled) +# shellcheck disable=SC2153 +GDATE=$(${NDATE} -"${assim_freq}" "${PDY}${cyc}") +BDATE=$(${NDATE} -3 "${PDY}${cyc}") +bPDY=${BDATE:0:8} +bcyc=${BDATE:8:2} + +# Utilities +export NCP=${NCP:-"/bin/cp"} +export NMV=${NMV:-"/bin/mv"} +export NLN=${NLN:-"/bin/ln -sf"} +export CHGRP_CMD=${CHGRP_CMD:-"chgrp ${group_name:-rstprod}"} +export NCLEN=${NCLEN:-$HOMEgfs/ush/getncdimlen} +COMPRESS=${COMPRESS:-gzip} +UNCOMPRESS=${UNCOMPRESS:-gunzip} +APRUNCFP=${APRUNCFP:-""} + +# IAU +DOIAU=${DOIAU:-"NO"} +export IAUFHRS=${IAUFHRS:-"6"} + +# Surface cycle related parameters +CYCLESH=${CYCLESH:-${HOMEgfs}/ush/global_cycle.sh} +export CYCLEXEC=${CYCLEXEC:-${HOMEgfs}/exec/global_cycle} +NTHREADS_CYCLE=${NTHREADS_CYCLE:-24} +APRUN_CYCLE=${APRUN_CYCLE:-${APRUN:-""}} +export SNOW_NUDGE_COEFF=${SNOW_NUDGE_COEFF:-'-2.'} +export CYCLVARS=${CYCLVARS:-""} +export FHOUR=${FHOUR:-0} +export DELTSFC=${DELTSFC:-6} +export FIXgsm=${FIXgsm:-${HOMEgfs}/fix/am} +export FIXfv3=${FIXfv3:-${HOMEgfs}/fix/orog} + +# FV3 specific info (required for global_cycle) +export CASE=${CASE:-"C384"} +ntiles=${ntiles:-6} + +# IAU +DOIAU=${DOIAU:-"NO"} +export IAUFHRS=${IAUFHRS:-"6"} + +# Dependent Scripts and Executables +export NTHREADS_CALCINC=${NTHREADS_CALCINC:-1} +export APRUN_CALCINC=${APRUN_CALCINC:-${APRUN:-""}} +export APRUN_CALCANL=${APRUN_CALCANL:-${APRUN:-""}} +export APRUN_CHGRES=${APRUN_CALCANL:-${APRUN:-""}} + +export CALCANLEXEC=${CALCANLEXEC:-${HOMEgfs}/exec/calc_analysis.x} +export CHGRESNCEXEC=${CHGRESNCEXEC:-${HOMEgfs}/exec/enkf_chgres_recenter_nc.x} +export CHGRESINCEXEC=${CHGRESINCEXEC:-${HOMEgfs}/exec/interp_inc.x} +export NTHREADS_CHGRES=${NTHREADS_CHGRES:-1} +CALCINCPY=${CALCINCPY:-${HOMEgfs}/ush/calcinc_gfs.py} +CALCANLPY=${CALCANLPY:-${HOMEgfs}/ush/calcanl_gfs.py} + +export APRUN_CHGRES=${APRUN_CALCANL:-${APRUN:-""}} +CHGRESEXEC=${CHGRESEXEC:-${HOMEgfs}/exec/enkf_chgres_recenter.x} + +# OPS flags +RUN=${RUN:-""} +SENDECF=${SENDECF:-"NO"} +SENDDBN=${SENDDBN:-"NO"} +RUN_GETGES=${RUN_GETGES:-"NO"} +GETGESSH=${GETGESSH:-"getges.sh"} +export gesenvir=${gesenvir:-${envir}} + +# Observations +OPREFIX=${OPREFIX:-""} +OSUFFIX=${OSUFFIX:-""} + +# Guess files +GPREFIX=${GPREFIX:-""} + +# Analysis files +export APREFIX=${APREFIX:-""} +DTFANL=${DTFANL:-${COM_ATMOS_ANALYSIS}/${APREFIX}dtfanl.nc} + +# Get dimension information based on CASE +res=$(echo ${CASE} | cut -c2-) +JCAP_CASE=$((res*2-2)) +LATB_CASE=$((res*2)) +LONB_CASE=$((res*4)) + +################################################################################ +# Preprocessing +mkdata=NO +if [[ ! -d ${DATA} ]]; then + mkdata=YES + mkdir -p ${DATA} +fi + +cd ${DATA} || exit 99 + +if [[ ${DONST} = "YES" ]]; then + export NSSTBF="${COM_OBS}/${OPREFIX}nsstbufr" + ${NLN} ${NSSTBF} nsstbufr +fi + + +############################################################## +# Required model guess files + + +############################################################## +# Output files +if [[ ${DONST} = "YES" ]]; then + ${NLN} ${DTFANL} dtfanl +fi + + +############################################################## +# Update surface fields in the FV3 restart's using global_cycle +mkdir -p "${COM_ATMOS_RESTART}" + +# Global cycle requires these files +export FNTSFA=${FNTSFA:-${COM_OBS}/${OPREFIX}rtgssthr.grb} +export FNACNA=${FNACNA:-${COM_OBS}/${OPREFIX}seaice.5min.blend.grb} +export FNSNOA=${FNSNOA:-${COM_OBS}/${OPREFIX}snogrb_t${JCAP_CASE}.${LONB_CASE}.${LATB_CASE}} +[[ ! -f ${FNSNOA} ]] && export FNSNOA="${COM_OBS}/${OPREFIX}snogrb_t1534.3072.1536" +FNSNOG=${FNSNOG:-${COM_OBS_PREV}/${GPREFIX}snogrb_t${JCAP_CASE}.${LONB_CASE}.${LATB_CASE}} +[[ ! -f ${FNSNOG} ]] && FNSNOG="${COM_OBS_PREV}/${GPREFIX}snogrb_t1534.3072.1536" + +# Set CYCLVARS by checking grib date of current snogrb vs that of prev cycle +if [[ ${RUN_GETGES} = "YES" ]]; then + snoprv=$(${GETGESSH} -q -t snogrb_${JCAP_CASE} -e ${gesenvir} -n ${GDUMP} -v ${GDATE}) +else + snoprv=${snoprv:-${FNSNOG}} +fi + +if [[ $(${WGRIB} -4yr ${FNSNOA} 2>/dev/null | grep -i snowc | awk -F: '{print $3}' | awk -F= '{print $2}') -le \ + $(${WGRIB} -4yr ${snoprv} 2>/dev/null | grep -i snowc | awk -F: '{print $3}' | awk -F= '{print $2}') ]] ; then + export FNSNOA=" " + export CYCLVARS="FSNOL=99999.,FSNOS=99999.," +else + export SNOW_NUDGE_COEFF=${SNOW_NUDGE_COEFF:-0.} + export CYCLVARS="FSNOL=${SNOW_NUDGE_COEFF},${CYCLVARS}" +fi + +if [[ ${DONST} = "YES" ]]; then + export NST_FILE=${GSI_FILE:-${COM_ATMOS_ANALYSIS}/${APREFIX}dtfanl.nc} +else + export NST_FILE="NULL" +fi + +if [[ ${DOIAU} = "YES" ]]; then + # update surface restarts at the beginning of the window, if IAU + # For now assume/hold dtfanl.nc valid at beginning of window + for n in $(seq 1 ${ntiles}); do + ${NCP} "${COM_ATMOS_RESTART_PREV}/${bPDY}.${bcyc}0000.sfc_data.tile${n}.nc" \ + "${COM_ATMOS_RESTART}/${bPDY}.${bcyc}0000.sfcanl_data.tile${n}.nc" + ${NLN} "${COM_ATMOS_RESTART_PREV}/${bPDY}.${bcyc}0000.sfc_data.tile${n}.nc" "${DATA}/fnbgsi.00${n}" + ${NLN} "${COM_ATMOS_RESTART}/${bPDY}.${bcyc}0000.sfcanl_data.tile${n}.nc" "${DATA}/fnbgso.00${n}" + ${NLN} "${FIXfv3}/${CASE}/${CASE}_grid.tile${n}.nc" "${DATA}/fngrid.00${n}" + ${NLN} "${FIXfv3}/${CASE}/${CASE}_oro_data.tile${n}.nc" "${DATA}/fnorog.00${n}" + done + + export APRUNCY=${APRUN_CYCLE} + export OMP_NUM_THREADS_CY=${NTHREADS_CYCLE} + export MAX_TASKS_CY=${ntiles} + + CDATE="${PDY}${cyc}" ${CYCLESH} + export err=$?; err_chk +fi + +# Update surface restarts at middle of window +for n in $(seq 1 ${ntiles}); do + if [[ ${DO_JEDILANDDA:-"NO"} = "YES" ]]; then + ${NCP} "${COM_LAND_ANALYSIS}/${PDY}.${cyc}0000.sfc_data.tile${n}.nc" \ + "${COM_ATMOS_RESTART}/${PDY}.${cyc}0000.sfcanl_data.tile${n}.nc" + else + ${NCP} "${COM_ATMOS_RESTART_PREV}/${PDY}.${cyc}0000.sfc_data.tile${n}.nc" \ + "${COM_ATMOS_RESTART}/${PDY}.${cyc}0000.sfcanl_data.tile${n}.nc" + fi + ${NLN} "${COM_ATMOS_RESTART_PREV}/${PDY}.${cyc}0000.sfc_data.tile${n}.nc" "${DATA}/fnbgsi.00${n}" + ${NLN} "${COM_ATMOS_RESTART}/${PDY}.${cyc}0000.sfcanl_data.tile${n}.nc" "${DATA}/fnbgso.00${n}" + ${NLN} "${FIXfv3}/${CASE}/${CASE}_grid.tile${n}.nc" "${DATA}/fngrid.00${n}" + ${NLN} "${FIXfv3}/${CASE}/${CASE}_oro_data.tile${n}.nc" "${DATA}/fnorog.00${n}" +done + +export APRUNCY=${APRUN_CYCLE} +export OMP_NUM_THREADS_CY=${NTHREADS_CYCLE} +export MAX_TASKS_CY=${ntiles} + +CDATE="${PDY}${cyc}" ${CYCLESH} +export err=$?; err_chk + + +################################################################################ +# Postprocessing +cd ${pwd} +[[ ${mkdata} = "YES" ]] && rm -rf ${DATA} + + +################################################################################ + +exit ${err} + +################################################################################ diff --git a/scripts/exglobal_atmos_tropcy_qc_reloc.sh b/scripts/exglobal_atmos_tropcy_qc_reloc.sh new file mode 100755 index 0000000000..380441a6c9 --- /dev/null +++ b/scripts/exglobal_atmos_tropcy_qc_reloc.sh @@ -0,0 +1,151 @@ +#! /usr/bin/env bash + +############################################################################ +# echo "---------------------------------------------------------------------" +# echo "exglobal_atmos_tropcy_qc_reloc.sh - Tropical Cyclone QC/Relocation Prcocessing" +# echo "---------------------------------------------------------------------" +# echo "History: Jun 13 2006 - Original script." +# echo " March 2013 - No changes needed for WCOSS transition" +# echo " MP_LABELIO default added" +# echo " Oct 2013 - Use main USH vars as part of minor pkg cleanup" +############################################################################ + +source "$HOMEgfs/ush/preamble.sh" + +# Make sure we are in the $DATA directory +cd $DATA + +cat break > $pgmout + +tmhr=$(echo $tmmark|cut -c3-4) +cdate10=$( ${NDATE:?} -$tmhr $PDY$cyc) + +NET_uc=$(echo $RUN | tr [a-z] [A-Z]) +tmmark_uc=$(echo $tmmark | tr [a-z] [A-Z]) + +iflag=0 +if [ $RUN = ndas ]; then + if [ $DO_RELOCATE = NO ]; then + echo "CENTER PROCESSING TIME FOR NDAS TROPICAL CYCLONE QC IS $cdate10" + echo "Output tcvitals files will be copied forward in time to proper \ +output file directory path locations" + iflag=1 + else + echo "CENTER PROCESSING TIME FOR $tmmark_uc NDAS TROPICAL CYCLONE \ +RELOCATION IS $cdate10" + fi +else + echo "CENTER PROCESSING TIME FOR $tmmark_uc $NET_uc TROPICAL CYCLONE QC/\ +RELOCATION IS $cdate10" +fi + + +if [ "$PROCESS_TROPCY" = 'YES' ]; then + +#################################### +#################################### +# QC tcvitals for tropical cyclones +#################################### +#################################### + +#echo $PDY + + ${USHSYND:-$HOMEgfs/ush}/syndat_qctropcy.sh $cdate10 + errsc=$? + if [ "$errsc" -ne '0' ]; then + echo "syndat_qctropcy.sh failed. exit" + exit $errsc + fi + + + cd "${COM_OBS}" || exit 1 + pwd + ls -ltr *syndata* + cd $ARCHSYND + pwd;ls -ltr + cat syndat_dateck + cd $HOMENHC + pwd;ls -ltr + cd $DATA + +else + +# Copy null files into "syndata.tcvitals" and "jtwc-fnoc.tcvitals" +# (Note: Only do so if files don't already exist - need because in NDAS this +# script is run twice, first time with DO_RELOCATE=NO, copying these +# files, and second time with PROCESS_TROPCY=NO and thus coming here - +# don't want to wipe out these files) +# + + [ ! -s "${COM_OBS}/${RUN}.t${cyc}z.syndata.tcvitals.${tmmark}" ] && \ + cp "/dev/null" "${COM_OBS}/${RUN}.t${cyc}z.syndata.tcvitals.${tmmark}" + [ ! -s "${COM_OBS}/${RUN}.t${cyc}z.jtwc-fnoc.tcvitals.${tmmark}" ] && \ + cp "/dev/null" "${COM_OBS}/${RUN}.t${cyc}z.jtwc-fnoc.tcvitals.${tmmark}" + +# endif loop $PROCESS_TROPCY +fi + + +if [ "$DO_RELOCATE" = 'YES' ]; then + +################################################### +################################################### +# Relocate tropical cyclones in global sigma guess +################################################### +################################################### + + export MP_LABELIO=${MP_LABELIO:-yes} + $USHRELO/tropcy_relocate.sh $cdate10 + errsc=$? + + [ "$errsc" -ne '0' ] && exit $errsc + + +# save global sigma guess file(s) possibly updated by tropical cyclone +# relocation processing in COMSP path + qual_last=".$tmmark" # need this because gfs and gdas don't add $tmmark + # qualifer to end of output sigma guess files + [ $RUN = gfs -o $RUN = gdas -o $NET = cfs ] && qual_last="" + + if [ $BKGFREQ -eq 1 ]; then + if [[ -s sgm3prep ]]; then cp "sgm3prep" "${COM_OBS}/${RUN}.t${cyc}z.sgm3prep${qual_last}"; fi + if [[ -s sgm2prep ]]; then cp "sgm2prep" "${COM_OBS}/${RUN}.t${cyc}z.sgm2prep${qual_last}"; fi + if [[ -s sgm1prep ]]; then cp "sgm1prep" "${COM_OBS}/${RUN}.t${cyc}z.sgm1prep${qual_last}"; fi + if [[ -s sgesprep ]]; then cp "sgesprep" "${COM_OBS}/${RUN}.t${cyc}z.sgesprep${qual_last}"; fi + if [[ -s sgp1prep ]]; then cp "sgp1prep" "${COM_OBS}/${RUN}.t${cyc}z.sgp1prep${qual_last}"; fi + if [[ -s sgp2prep ]]; then cp "sgp2prep" "${COM_OBS}/${RUN}.t${cyc}z.sgp2prep${qual_last}"; fi + if [[ -s sgp3prep ]]; then cp "sgp3prep" "${COM_OBS}/${RUN}.t${cyc}z.sgp3prep${qual_last}"; fi + elif [ $BKGFREQ -eq 3 ]; then + if [[ -s sgm3prep ]]; then cp "sgm3prep" "${COM_OBS}/${RUN}.t${cyc}z.sgm3prep${qual_last}"; fi + if [[ -s sgesprep ]]; then cp "sgesprep" "${COM_OBS}/${RUN}.t${cyc}z.sgesprep${qual_last}"; fi + if [[ -s sgp3prep ]]; then cp "sgp3prep" "${COM_OBS}/${RUN}.t${cyc}z.sgp3prep${qual_last}"; fi + fi + +# The existence of ${COM_OBS}/${RUN}.t${cyc}z.tropcy_relocation_status.$tmmark file will tell the +# subsequent PREP processing that RELOCATION processing occurred, if this file +# does not already exist at this point, echo "RECORDS PROCESSED" into it to +# further tell PREP processing that records were processed by relocation and +# the global sigma guess was modified by tropical cyclone relocation +# Note: If ${COM_OBS}/${RUN}.t${cyc}z.tropcy_relocation_status.$tmmark already exists at this +# point it means that it contains the string "NO RECORDS to process" +# and was created by the child script tropcy_relocate.sh because records +# were not processed by relocation and the global sigma guess was NOT +# modified by tropical cyclone relocation (because no tcvitals records +# were found in the relocation step) +# ---------------------------------------------------------------------------- + + if [[ ! -s "${COM_OBS}/${RUN}.t${cyc}z.tropcy_relocation_status.${tmmark}" ]]; then + echo "RECORDS PROCESSED" > "${COM_OBS}/${RUN}.t${cyc}z.tropcy_relocation_status.${tmmark}" + fi + +# endif loop $DO_RELOCATE +fi + + +######################################################## + +# save standard output +cat break $pgmout break + + +################## END OF SCRIPT ####################### diff --git a/scripts/exglobal_atmos_upp.py b/scripts/exglobal_atmos_upp.py new file mode 100755 index 0000000000..6cdbc1bc51 --- /dev/null +++ b/scripts/exglobal_atmos_upp.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 + +import os + +from wxflow import AttrDict, Logger, logit, cast_strdict_as_dtypedict +from pygfs.task.upp import UPP + +# initialize root logger +logger = Logger(level=os.environ.get("LOGGING_LEVEL", "DEBUG"), colored_log=True) + + +@logit(logger) +def main(): + + config = cast_strdict_as_dtypedict(os.environ) + + # Instantiate the UPP object + upp = UPP(config) + + # Pull out all the configuration keys needed to run the rest of UPP steps + keys = ['HOMEgfs', 'DATA', 'current_cycle', 'RUN', 'NET', + 'COM_ATMOS_ANALYSIS', 'COM_ATMOS_HISTORY', 'COM_ATMOS_MASTER', + 'upp_run', + 'APRUN_UPP', + 'forecast_hour', 'valid_datetime', + 'atmos_filename', 'flux_filename'] + upp_dict = AttrDict() + for key in keys: + upp_dict[key] = upp.task_config[key] + + # Get the fully parse upp.yaml file for the current cycle + upp_yaml = upp.task_config.upp_yaml + + # Initialize the DATA/ directory; copy static data + upp.initialize(upp_yaml) + + # Configure DATA/ directory for execution; prepare namelist etc. + upp.configure(upp_dict, upp_yaml) + + # Run the UPP and index the master grib2 files + upp.execute(upp_dict.DATA, upp_dict.APRUN_UPP, upp_dict.forecast_hour) + + # Copy processed output from execute + upp.finalize(upp_dict.upp_run, upp_yaml) + + +if __name__ == '__main__': + main() diff --git a/scripts/exglobal_atmos_vminmon.sh b/scripts/exglobal_atmos_vminmon.sh new file mode 100755 index 0000000000..a4453dcf1a --- /dev/null +++ b/scripts/exglobal_atmos_vminmon.sh @@ -0,0 +1,76 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exglobal_atmos_vminmon.sh +# Script description: Runs data extract/validation for GSI normalization diag data +# +# Author: Ed Safford Org: NP23 Date: 2015-04-10 +# +# Abstract: This script runs the data extract/validation portion of the +# MinMon package. +# +# Condition codes +# 0 - no problem encountered +# >0 - some problem encountered +# +################################################################################ + +data_available=0 + +if [[ -s ${gsistat} ]]; then + + data_available=1 + + #----------------------------------------------------------------------- + # Copy the $MINMON_SUFFIX.gnorm_data.txt file to the working directory + # It's ok if it doesn't exist; we'll create a new one if needed. + # + # Note: The logic below is to accomodate two different data storage + # methods. Some parallels (and formerly ops) dump all MinMon data for + # a given day in the same directory (if condition). Ops now separates + # data into ${cyc} subdirectories (elif condition). + #----------------------------------------------------------------------- + if [[ -s ${M_TANKverf}/gnorm_data.txt ]]; then + ${NCP} "${M_TANKverf}/gnorm_data.txt" gnorm_data.txt + elif [[ -s ${M_TANKverfM1}/gnorm_data.txt ]]; then + ${NCP} "${M_TANKverfM1}/gnorm_data.txt" gnorm_data.txt + fi + + + #------------------------------------------------------------------ + # Run the child sccripts. + #------------------------------------------------------------------ + "${USHgfs}/minmon_xtrct_costs.pl" "${MINMON_SUFFIX}" "${PDY}" "${cyc}" "${gsistat}" dummy + rc_costs=$? + echo "rc_costs = ${rc_costs}" + + "${USHgfs}/minmon_xtrct_gnorms.pl" "${MINMON_SUFFIX}" "${PDY}" "${cyc}" "${gsistat}" dummy + rc_gnorms=$? + echo "rc_gnorms = ${rc_gnorms}" + + "${USHgfs}/minmon_xtrct_reduct.pl" "${MINMON_SUFFIX}" "${PDY}" "${cyc}" "${gsistat}" dummy + rc_reduct=$? + echo "rc_reduct = ${rc_reduct}" + +fi + +##################################################################### +# Postprocessing + +err=0 +if [[ ${data_available} -ne 1 ]]; then + err=1 +elif [[ ${rc_costs} -ne 0 ]]; then + err=${rc_costs} +elif [[ ${rc_gnorms} -ne 0 ]]; then + err=${rc_gnorms} +elif [[ ${rc_reduct} -ne 0 ]]; then + err=${rc_reduct} +fi + +exit "${err}" + diff --git a/scripts/exglobal_cleanup.sh b/scripts/exglobal_cleanup.sh new file mode 100755 index 0000000000..5d7c0a9788 --- /dev/null +++ b/scripts/exglobal_cleanup.sh @@ -0,0 +1,106 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +############################################################### +# Clean up previous cycles; various depths +# PRIOR CYCLE: Leave the prior cycle alone +# shellcheck disable=SC2153 +GDATE=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} -${assim_freq} hours") +# PREVIOUS to the PRIOR CYCLE +GDATE=$(date --utc +%Y%m%d%H -d "${GDATE:0:8} ${GDATE:8:2} -${assim_freq} hours") + +# Remove the TMPDIR directory +# TODO Only prepbufr is currently using this directory, and all jobs should be +# cleaning up after themselves anyway +COMIN="${DATAROOT}/${GDATE}" +[[ -d ${COMIN} ]] && rm -rf "${COMIN}" + +if [[ "${CLEANUP_COM:-YES}" == NO ]] ; then + exit 0 +fi + +# Step back every assim_freq hours and remove old rotating directories +# for successful cycles (defaults from 24h to 120h). +# Retain files needed by Fit2Obs +last_date=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} -${RMOLDEND:-24} hours" ) +first_date=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} -${RMOLDSTD:-120} hours") +last_rtofs=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} -${RMOLDRTOFS:-48} hours") +function remove_files() { + local directory=$1 + shift + if [[ ! -d ${directory} ]]; then + echo "No directory ${directory} to remove files from, skiping" + return + fi + local find_exclude_string="" + for exclude in "$@"; do + find_exclude_string+="${find_exclude_string} -name ${exclude} -or" + done + # Chop off any trailing or + find_exclude_string="${find_exclude_string[*]/%-or}" + # Remove all regular files that do not match + # shellcheck disable=SC2086 + find "${directory}" -type f -not \( ${find_exclude_string} \) -delete + # Remove all symlinks that do not match + # shellcheck disable=SC2086 + find "${directory}" -type l -not \( ${find_exclude_string} \) -delete + # Remove any empty directories + find "${directory}" -type d -empty -delete +} + +for (( current_date=first_date; current_date <= last_date; \ + current_date=$(date --utc +%Y%m%d%H -d "${current_date:0:8} ${current_date:8:2} +${assim_freq} hours") )); do + current_PDY="${current_date:0:8}" + current_cyc="${current_date:8:2}" + rtofs_dir="${ROTDIR}/rtofs.${current_PDY}" + rocotolog="${EXPDIR}/logs/${current_date}.log" + if [[ -f "${rocotolog}" ]]; then + # TODO: This needs to be revamped to not look at the rocoto log. + # shellcheck disable=SC2312 + if [[ $(tail -n 1 "${rocotolog}") =~ "This cycle is complete: Success" ]]; then + YMD="${current_PDY}" HH="${current_cyc}" generate_com COM_TOP + if [[ -d "${COM_TOP}" ]]; then + IFS=", " read -r -a exclude_list <<< "${exclude_string:-}" + remove_files "${COM_TOP}" "${exclude_list[@]:-}" + fi + if [[ -d "${rtofs_dir}" ]] && (( current_date < last_rtofs )); then rm -rf "${rtofs_dir}" ; fi + fi + fi + + # Remove mdl gfsmos directory + if [[ "${RUN}" == "gfs" ]]; then + mos_dir="${ROTDIR}/gfsmos.${current_PDY}" + if [[ -d "${mos_dir}" ]] && (( current_date < CDATE_MOS )); then rm -rf "${mos_dir}" ; fi + fi +done + +# Remove archived gaussian files used for Fit2Obs in $VFYARC that are +# $FHMAX_FITS plus a delta before $CDATE. Touch existing archived +# gaussian files to prevent the files from being removed by automatic +# scrubber present on some machines. + +if [[ "${RUN}" == "gfs" ]]; then + fhmax=$((FHMAX_FITS + 36)) + RDATE=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} -${fhmax} hours") + verify_dir="${ROTDIR}/vrfyarch/${RUN}.${RDATE:0:8}" + [[ -d ${verify_dir} ]] && rm -rf "${verify_dir}" + + touch_date=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} -${FHMAX_FITS} hours") + while (( touch_date < "${PDY}${cyc}" )); do + touch_PDY="${touch_date:0:8}" + touch_cyc="${touch_date:8:2}" + touch_dir="${ROTDIR}/vrfyarch/${RUN}.${touch_PDY}/${touch_cyc}" + [[ -d ${touch_dir} ]] && touch "${touch_dir}"/* + touch_date=$(date --utc +%Y%m%d%H -d "${touch_PDY} ${touch_cyc} +6 hours") + done +fi + +# Remove $RUN.$rPDY for the older of GDATE or RDATE +GDATE=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} -${RMOLDSTD:-120} hours") +RDATE=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} -${FHMAX_GFS} hours") +if (( GDATE < RDATE )); then + RDATE=${GDATE} +fi +deletion_target="${ROTDIR}/${RUN}.${RDATE:0:8}" +if [[ -d ${deletion_target} ]]; then rm -rf "${deletion_target}"; fi diff --git a/scripts/exglobal_diag.sh b/scripts/exglobal_diag.sh new file mode 100755 index 0000000000..1f641c4fd7 --- /dev/null +++ b/scripts/exglobal_diag.sh @@ -0,0 +1,282 @@ +#! /usr/bin/env bash + +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: exglobal_diag.sh +# Script description: Creates diagnostic files after GSI analysis is performed +# +# Author: Cory Martin Org: NCEP/EMC Date: 2020-03-03 +# +# Abstract: This script creates GSI diagnostic files after GSI exits successfully +# +# $Id$ +# +# Attributes: +# Language: POSIX shell +# +################################################################################ + +# Set environment. + +source "$HOMEgfs/ush/preamble.sh" + +# Directories. +pwd=$(pwd) + +# Base variables +CDATE="${PDY}${cyc}" +CDUMP=${CDUMP:-"gdas"} +GDUMP=${GDUMP:-"gdas"} + +# Utilities +export NCP=${NCP:-"/bin/cp"} +export NMV=${NMV:-"/bin/mv"} +export NLN=${NLN:-"/bin/ln -sf"} +export CHGRP_CMD=${CHGRP_CMD:-"chgrp ${group_name:-rstprod}"} +export NCLEN=${NCLEN:-$HOMEgfs/ush/getncdimlen} +export CATEXEC=${CATEXEC:-${ncdiag_ROOT:-${gsi_ncdiag_ROOT}}/bin/ncdiag_cat_serial.x} +COMPRESS=${COMPRESS:-gzip} +UNCOMPRESS=${UNCOMPRESS:-gunzip} +APRUNCFP=${APRUNCFP:-""} + +# Diagnostic files options +netcdf_diag=${netcdf_diag:-".true."} +binary_diag=${binary_diag:-".false."} + +# OPS flags +RUN=${RUN:-""} +SENDECF=${SENDECF:-"NO"} +SENDDBN=${SENDDBN:-"NO"} + +# Guess files + +# Analysis files +export APREFIX=${APREFIX:-""} +RADSTAT=${RADSTAT:-${COM_ATMOS_ANALYSIS}/${APREFIX}radstat} +PCPSTAT=${PCPSTAT:-${COM_ATMOS_ANALYSIS}/${APREFIX}pcpstat} +CNVSTAT=${CNVSTAT:-${COM_ATMOS_ANALYSIS}/${APREFIX}cnvstat} +OZNSTAT=${OZNSTAT:-${COM_ATMOS_ANALYSIS}/${APREFIX}oznstat} + +# Remove stat file if file already exists +[[ -s $RADSTAT ]] && rm -f $RADSTAT +[[ -s $PCPSTAT ]] && rm -f $PCPSTAT +[[ -s $CNVSTAT ]] && rm -f $CNVSTAT +[[ -s $OZNSTAT ]] && rm -f $OZNSTAT + +# Obs diag +GENDIAG=${GENDIAG:-"YES"} +DIAG_SUFFIX=${DIAG_SUFFIX:-""} +if [ $netcdf_diag = ".true." ] ; then + DIAG_SUFFIX="${DIAG_SUFFIX}.nc4" +fi +DIAG_COMPRESS=${DIAG_COMPRESS:-"YES"} +DIAG_TARBALL=${DIAG_TARBALL:-"YES"} +USE_CFP=${USE_CFP:-"NO"} +CFP_MP=${CFP_MP:-"NO"} +nm="" +if [ $CFP_MP = "YES" ]; then + nm=0 +fi +DIAG_DIR=${DIAG_DIR:-${COM_ATMOS_ANALYSIS}/gsidiags} +REMOVE_DIAG_DIR=${REMOVE_DIAG_DIR:-"NO"} + +# Set script / GSI control parameters +lrun_subdirs=${lrun_subdirs:-".true."} + + +################################################################################ +# If requested, generate diagnostic files +if [ $GENDIAG = "YES" ] ; then + if [ $lrun_subdirs = ".true." ] ; then + for pe in $DIAG_DIR/dir.*; do + pedir="$(basename -- $pe)" + $NLN $pe $DATA/$pedir + done + else + err_exit "***FATAL ERROR*** lrun_subdirs must be true. Abort job" + fi + + # Set up lists and variables for various types of diagnostic files. + ntype=3 + + diagtype[0]="conv conv_gps conv_ps conv_pw conv_q conv_sst conv_t conv_tcp conv_uv conv_spd" + diagtype[1]="pcp_ssmi_dmsp pcp_tmi_trmm" + diagtype[2]="sbuv2_n16 sbuv2_n17 sbuv2_n18 sbuv2_n19 gome_metop-a gome_metop-b omi_aura mls30_aura ompsnp_npp ompstc8_npp ompstc8_n20 ompsnp_n20 ompstc8_n21 ompsnp_n21 ompslp_npp gome_metop-c" + diagtype[3]="hirs2_n14 msu_n14 sndr_g08 sndr_g11 sndr_g12 sndr_g13 sndr_g08_prep sndr_g11_prep sndr_g12_prep sndr_g13_prep sndrd1_g11 sndrd2_g11 sndrd3_g11 sndrd4_g11 sndrd1_g12 sndrd2_g12 sndrd3_g12 sndrd4_g12 sndrd1_g13 sndrd2_g13 sndrd3_g13 sndrd4_g13 sndrd1_g14 sndrd2_g14 sndrd3_g14 sndrd4_g14 sndrd1_g15 sndrd2_g15 sndrd3_g15 sndrd4_g15 hirs3_n15 hirs3_n16 hirs3_n17 amsua_n15 amsua_n16 amsua_n17 amsub_n15 amsub_n16 amsub_n17 hsb_aqua airs_aqua amsua_aqua imgr_g08 imgr_g11 imgr_g12 imgr_g14 imgr_g15 ssmi_f13 ssmi_f15 hirs4_n18 hirs4_metop-a amsua_n18 amsua_metop-a mhs_n18 mhs_metop-a amsre_low_aqua amsre_mid_aqua amsre_hig_aqua ssmis_f16 ssmis_f17 ssmis_f18 ssmis_f19 ssmis_f20 iasi_metop-a hirs4_n19 amsua_n19 mhs_n19 seviri_m08 seviri_m09 seviri_m10 seviri_m11 cris_npp cris-fsr_npp cris-fsr_n20 atms_npp atms_n20 hirs4_metop-b amsua_metop-b mhs_metop-b iasi_metop-b avhrr_metop-b avhrr_n18 avhrr_n19 avhrr_metop-a amsr2_gcom-w1 gmi_gpm saphir_meghat ahi_himawari8 abi_g16 abi_g17 amsua_metop-c mhs_metop-c iasi_metop-c avhrr_metop-c viirs-m_npp viirs-m_j1 abi_g18 ahi_himawari9 viirs-m_j2 cris-fsr_n21 atms_n21" + + diaglist[0]=listcnv + diaglist[1]=listpcp + diaglist[2]=listozn + diaglist[3]=listrad + + diagfile[0]=$CNVSTAT + diagfile[1]=$PCPSTAT + diagfile[2]=$OZNSTAT + diagfile[3]=$RADSTAT + + numfile[0]=0 + numfile[1]=0 + numfile[2]=0 + numfile[3]=0 + + # Set diagnostic file prefix based on lrun_subdirs variable + if [ $lrun_subdirs = ".true." ]; then + prefix=" dir.*/" + else + prefix="pe*" + fi + + if [ $USE_CFP = "YES" ]; then + [[ -f $DATA/diag.sh ]] && rm $DATA/diag.sh + [[ -f $DATA/mp_diag.sh ]] && rm $DATA/mp_diag.sh + cat > $DATA/diag.sh << EOFdiag +#!/bin/sh +lrun_subdirs=\$1 +binary_diag=\$2 +type=\$3 +loop=\$4 +string=\$5 +CDATE=\$6 +DIAG_COMPRESS=\$7 +DIAG_SUFFIX=\$8 +if [ \$lrun_subdirs = ".true." ]; then + prefix=" dir.*/" +else + prefix="pe*" +fi +file=diag_\${type}_\${string}.\${CDATE}\${DIAG_SUFFIX} +if [ \$binary_diag = ".true." ]; then + cat \${prefix}\${type}_\${loop}* > \$file +else + $CATEXEC -o \$file \${prefix}\${type}_\${loop}* +fi +if [ \$DIAG_COMPRESS = "YES" ]; then + $COMPRESS \$file +fi +EOFdiag + chmod 755 $DATA/diag.sh + fi + + # Collect diagnostic files as a function of loop and type. + # Loop over first and last outer loops to generate innovation + # diagnostic files for indicated observation types (groups) + # + # NOTE: Since we set miter=2 in GSI namelist SETUP, outer + # loop 03 will contain innovations with respect to + # the analysis. Creation of o-a innovation files + # is triggered by write_diag(3)=.true. The setting + # write_diag(1)=.true. turns on creation of o-g + # innovation files. + + loops="01 03" + for loop in $loops; do + case $loop in + 01) string=ges;; + 03) string=anl;; + *) string=$loop;; + esac + echo $(date) START loop $string >&2 + n=-1 + while [ $((n+=1)) -le $ntype ] ;do + for type in $(echo ${diagtype[n]}); do + count=$(ls ${prefix}${type}_${loop}* 2>/dev/null | wc -l) + if [ $count -gt 1 ]; then + if [ $USE_CFP = "YES" ]; then + echo "$nm $DATA/diag.sh $lrun_subdirs $binary_diag $type $loop $string $CDATE $DIAG_COMPRESS $DIAG_SUFFIX" | tee -a $DATA/mp_diag.sh + if [ ${CFP_MP:-"NO"} = "YES" ]; then + nm=$((nm+1)) + fi + else + if [ $binary_diag = ".true." ]; then + cat ${prefix}${type}_${loop}* > diag_${type}_${string}.${CDATE}${DIAG_SUFFIX} + else + $CATEXEC -o diag_${type}_${string}.${CDATE}${DIAG_SUFFIX} ${prefix}${type}_${loop}* + fi + fi + echo "diag_${type}_${string}.${CDATE}*" >> ${diaglist[n]} + numfile[n]=$(expr ${numfile[n]} + 1) + elif [ $count -eq 1 ]; then + cat ${prefix}${type}_${loop}* > diag_${type}_${string}.${CDATE}${DIAG_SUFFIX} + if [ $DIAG_COMPRESS = "YES" ]; then + $COMPRESS diag_${type}_${string}.${CDATE}${DIAG_SUFFIX} + fi + echo "diag_${type}_${string}.${CDATE}*" >> ${diaglist[n]} + numfile[n]=$(expr ${numfile[n]} + 1) + fi + done + done + echo $(date) END loop $string >&2 + done + + # We should already be in $DATA, but extra cd to be sure. + cd $DATA + + # If requested, compress diagnostic files + if [ $DIAG_COMPRESS = "YES" -a $USE_CFP = "NO" ]; then + echo $(date) START $COMPRESS diagnostic files >&2 + for file in $(ls diag_*${CDATE}${DIAG_SUFFIX}); do + $COMPRESS $file + done + echo $(date) END $COMPRESS diagnostic files >&2 + fi + + if [ $USE_CFP = "YES" ] ; then + chmod 755 $DATA/mp_diag.sh + ncmd=$(cat $DATA/mp_diag.sh | wc -l) + if [ $ncmd -gt 0 ]; then + ncmd_max=$((ncmd < npe_node_max ? ncmd : npe_node_max)) + APRUNCFP_DIAG=$(eval echo $APRUNCFP) + $APRUNCFP_DIAG $DATA/mp_diag.sh + export err=$?; err_chk + fi + fi + + # Restrict diagnostic files containing rstprod data + rlist="conv_gps conv_ps conv_pw conv_q conv_sst conv_t conv_uv saphir" + for rtype in $rlist; do + set +e + ${CHGRP_CMD} *${rtype}* + ${STRICT_ON:-set -e} + done + + # If requested, create diagnostic file tarballs + if [ $DIAG_TARBALL = "YES" ]; then + echo $(date) START tar diagnostic files >&2 + n=-1 + while [ $((n+=1)) -le $ntype ] ;do + TAROPTS="-uvf" + if [ ! -s ${diagfile[n]} ]; then + TAROPTS="-cvf" + fi + if [ ${numfile[n]} -gt 0 ]; then + tar $TAROPTS ${diagfile[n]} $(cat ${diaglist[n]}) + export err=$?; err_chk + fi + done + + # Restrict CNVSTAT + chmod 750 $CNVSTAT + ${CHGRP_CMD} $CNVSTAT + + # Restrict RADSTAT + chmod 750 $RADSTAT + ${CHGRP_CMD} $RADSTAT + + echo $(date) END tar diagnostic files >&2 + fi +fi # End diagnostic file generation block - if [ $GENDIAG = "YES" ] + +################################################################################ +# Postprocessing +# If no processing error, remove $DIAG_DIR +if [[ "$REMOVE_DIAG_DIR" = "YES" && "$err" = "0" ]]; then + rm -rf $DIAG_DIR +fi + +cd $pwd +[[ "${mkdata:-YES}" = "YES" ]] && rm -rf $DATA + + +exit $err + diff --git a/scripts/exglobal_fcst_nemsfv3gfs.sh b/scripts/exglobal_fcst_nemsfv3gfs.sh deleted file mode 100755 index 6ed5533143..0000000000 --- a/scripts/exglobal_fcst_nemsfv3gfs.sh +++ /dev/null @@ -1,1355 +0,0 @@ -#!/bin/ksh -################################################################################ -# UNIX Script Documentation Block -# Script name: exglobal_fcst_nemsfv3gfs.sh -# Script description: Runs a global FV3GFS model forecast -# -# Author: Fanglin Yang Org: NCEP/EMC Date: 2016-11-15 -# Abstract: This script runs a single GFS forecast with FV3 dynamical core. -# This script is created based on a C-shell script that GFDL wrote -# for the NGGPS Phase-II Dycore Comparison Project. -# -# Script history log: -# 2016-11-15 Fanglin Yang First Version. -# 2017-02-09 Rahul Mahajan Added warm start and restructured the code. -# 2017-03-10 Fanglin Yang Updated for running forecast on Cray. -# 2017-03-24 Fanglin Yang Updated to use NEMS FV3GFS with IPD4 -# 2017-05-24 Rahul Mahajan Updated for cycling with NEMS FV3GFS -# 2017-09-13 Fanglin Yang Updated for using GFDL MP and Write Component -# 2019-03-05 Rahul Mahajan Implemented IAU -# 2019-03-21 Fanglin Yang Add restart capability for running gfs fcst from a break point. -# 2019-12-12 Henrique Alves Added wave model blocks for coupled run -# 2020-01-31 Henrique Alves Added IAU capability for wave component -# 2020-06-02 Fanglin Yang restore restart capability when IAU is turned on. -# -# $Id$ -# -# Attributes: -# Language: Portable Operating System Interface (POSIX) Shell -# Machine: WCOSS-CRAY, Theia -################################################################################ - -# Set environment. -VERBOSE=${VERBOSE:-"YES"} -if [ $VERBOSE = "YES" ] ; then - echo $(date) EXECUTING $0 $* >&2 - set -x -fi - -machine=${machine:-"WCOSS_C"} -machine=$(echo $machine | tr '[a-z]' '[A-Z]') - -# Cycling and forecast hour specific parameters -CDUMPwave="${CDUMP}wave" -CASE=${CASE:-C768} -CDATE=${CDATE:-2017032500} -CDUMP=${CDUMP:-gdas} -FHMIN=${FHMIN:-0} -FHMAX=${FHMAX:-9} -FHOUT=${FHOUT:-3} -FHZER=${FHZER:-6} -FHCYC=${FHCYC:-24} -FHMAX_HF=${FHMAX_HF:-0} -FHOUT_HF=${FHOUT_HF:-1} -NSOUT=${NSOUT:-"-1"} -FDIAG=$FHOUT -if [ $FHMAX_HF -gt 0 -a $FHOUT_HF -gt 0 ]; then FDIAG=$FHOUT_HF; fi -WRITE_DOPOST=${WRITE_DOPOST:-".false."} -restart_interval=${restart_interval:-0} -rst_invt1=`echo $restart_interval |cut -d " " -f 1` - -PDY=$(echo $CDATE | cut -c1-8) -cyc=$(echo $CDATE | cut -c9-10) - -# Directories. -pwd=$(pwd) -NWPROD=${NWPROD:-${NWROOT:-$pwd}} -HOMEgfs=${HOMEgfs:-$NWPROD} -FIX_DIR=${FIX_DIR:-$HOMEgfs/fix} -FIX_AM=${FIX_AM:-$FIX_DIR/fix_am} -FIXfv3=${FIXfv3:-$FIX_DIR/fix_fv3_gmted2010} -DATA=${DATA:-$pwd/fv3tmp$$} # temporary running directory -ROTDIR=${ROTDIR:-$pwd} # rotating archive directory -ICSDIR=${ICSDIR:-$pwd} # cold start initial conditions -DMPDIR=${DMPDIR:-$pwd} # global dumps for seaice, snow and sst analysis - -# Model resolution specific parameters -DELTIM=${DELTIM:-225} -layout_x=${layout_x:-8} -layout_y=${layout_y:-16} -LEVS=${LEVS:-65} - -# Utilities -NCP=${NCP:-"/bin/cp -p"} -NLN=${NLN:-"/bin/ln -sf"} -NMV=${NMV:-"/bin/mv"} -SEND=${SEND:-"YES"} #move final result to rotating directory -ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} -KEEPDATA=${KEEPDATA:-"NO"} - -# Other options -MEMBER=${MEMBER:-"-1"} # -1: control, 0: ensemble mean, >0: ensemble member $MEMBER -ENS_NUM=${ENS_NUM:-1} # Single executable runs multiple members (e.g. GEFS) -PREFIX_ATMINC=${PREFIX_ATMINC:-""} # allow ensemble to use recentered increment - -# IAU options -DOIAU=${DOIAU:-"NO"} -IAUFHRS=${IAUFHRS:-0} -IAU_DELTHRS=${IAU_DELTHRS:-0} -IAU_OFFSET=${IAU_OFFSET:-0} - -# Model specific stuff -FCSTEXECDIR=${FCSTEXECDIR:-$HOMEgfs/sorc/fv3gfs.fd/NEMS/exe} -FCSTEXEC=${FCSTEXEC:-fv3_gfs.x} -PARM_FV3DIAG=${PARM_FV3DIAG:-$HOMEgfs/parm/parm_fv3diag} -PARM_POST=${PARM_POST:-$HOMEgfs/parm/post} - -# Wave coupling parameter defaults to false -cplwav=${cplwav:-.false.} - -# Model config options -APRUN_FV3=${APRUN_FV3:-${APRUN_FCST:-${APRUN:-""}}} -NTHREADS_FV3=${NTHREADS_FV3:-${NTHREADS_FCST:-${nth_fv3:-1}}} -cores_per_node=${cores_per_node:-${npe_node_max:-24}} -ntiles=${ntiles:-6} -NTASKS_FV3=${NTASKS_FV3:-$npe_fv3} - -TYPE=${TYPE:-"nh"} # choices: nh, hydro -MONO=${MONO:-"non-mono"} # choices: mono, non-mono - -QUILTING=${QUILTING:-".true."} -OUTPUT_GRID=${OUTPUT_GRID:-"gaussian_grid"} -OUTPUT_FILE=${OUTPUT_FILE:-"nemsio"} -WRITE_NEMSIOFLIP=${WRITE_NEMSIOFLIP:-".true."} -WRITE_FSYNCFLAG=${WRITE_FSYNCFLAG:-".true."} -affix="nemsio" -[[ "$OUTPUT_FILE" = "netcdf" ]] && affix="nc" - -rCDUMP=${rCDUMP:-$CDUMP} - -#------------------------------------------------------------------ -# setup the runtime environment -if [ $machine = "WCOSS_C" ] ; then - HUGEPAGES=${HUGEPAGES:-hugepages4M} - . $MODULESHOME/init/sh 2>/dev/null - module load iobuf craype-$HUGEPAGES 2>/dev/null - export MPICH_GNI_COLL_OPT_OFF=${MPICH_GNI_COLL_OPT_OFF:-MPI_Alltoallv} - export MKL_CBWR=AVX2 - export WRTIOBUF=${WRTIOBUF:-"4M"} - export NC_BLKSZ=${NC_BLKSZ:-"4M"} - export IOBUF_PARAMS="*nemsio:verbose:size=${WRTIOBUF},*:verbose:size=${NC_BLKSZ}" -fi - -#------------------------------------------------------- -if [ ! -d $ROTDIR ]; then mkdir -p $ROTDIR; fi -mkdata=NO -if [ ! -d $DATA ]; then - mkdata=YES - mkdir -p $DATA -fi -cd $DATA || exit 8 -mkdir -p $DATA/INPUT - -if [ $cplwav = ".true." ]; then - if [ $CDUMP = "gdas" ]; then - RSTDIR_WAVE=$ROTDIR/${CDUMP}.${PDY}/${cyc}/wave/restart - else - RSTDIR_WAVE=${RSTDIR_WAVE:-$ROTDIR/${CDUMP}.${PDY}/${cyc}/wave/restart} - fi - if [ ! -d $RSTDIR_WAVE ]; then mkdir -p $RSTDIR_WAVE ; fi - $NLN $RSTDIR_WAVE restart_wave -fi - -if [ $CDUMP = "gfs" -a $rst_invt1 -gt 0 ]; then - RSTDIR_ATM=${RSTDIR:-$ROTDIR}/${CDUMP}.${PDY}/${cyc}/atmos/RERUN_RESTART - if [ ! -d $RSTDIR_ATM ]; then mkdir -p $RSTDIR_ATM ; fi - $NLN $RSTDIR_ATM RESTART -else - mkdir -p $DATA/RESTART -fi - -#------------------------------------------------------- -# determine if restart IC exists to continue from a previous forecast -RERUN="NO" -filecount=$(find $RSTDIR_ATM -type f | wc -l) -if [ $CDUMP = "gfs" -a $rst_invt1 -gt 0 -a $FHMAX -gt $rst_invt1 -a $filecount -gt 10 ]; then - reverse=$(echo "${restart_interval[@]} " | tac -s ' ') - for xfh in $reverse ; do - yfh=$((xfh-(IAU_OFFSET/2))) - SDATE=$($NDATE +$yfh $CDATE) - PDYS=$(echo $SDATE | cut -c1-8) - cycs=$(echo $SDATE | cut -c9-10) - flag1=$RSTDIR_ATM/${PDYS}.${cycs}0000.coupler.res - flag2=$RSTDIR_ATM/coupler.res - if [ -s $flag1 ]; then - CDATE_RST=$SDATE - [[ $RERUN = "YES" ]] && break - mv $flag1 ${flag1}.old - if [ -s $flag2 ]; then mv $flag2 ${flag2}.old ;fi - RERUN="YES" - [[ $xfh = $rst_invt1 ]] && RERUN="NO" - fi - done -fi - -#------------------------------------------------------- -# member directory -if [ $MEMBER -lt 0 ]; then - prefix=$CDUMP - rprefix=$rCDUMP - memchar="" -else - prefix=enkf$CDUMP - rprefix=enkf$rCDUMP - memchar=mem$(printf %03i $MEMBER) -fi -memdir=$ROTDIR/${prefix}.$PDY/$cyc/atmos/$memchar -if [ ! -d $memdir ]; then mkdir -p $memdir; fi - -GDATE=$($NDATE -$assim_freq $CDATE) -gPDY=$(echo $GDATE | cut -c1-8) -gcyc=$(echo $GDATE | cut -c9-10) -gmemdir=$ROTDIR/${rprefix}.$gPDY/$gcyc/atmos/$memchar -sCDATE=$($NDATE -3 $CDATE) - -if [[ "$DOIAU" = "YES" ]]; then - sCDATE=$($NDATE -3 $CDATE) - sPDY=$(echo $sCDATE | cut -c1-8) - scyc=$(echo $sCDATE | cut -c9-10) - tPDY=$gPDY - tcyc=$gcyc -else - sCDATE=$CDATE - sPDY=$PDY - scyc=$cyc - tPDY=$sPDY - tcyc=$cyc -fi - -#------------------------------------------------------- -# initial conditions -warm_start=${warm_start:-".false."} -read_increment=${read_increment:-".false."} -res_latlon_dynamics="''" - -# Determine if this is a warm start or cold start -if [ -f $gmemdir/RESTART/${sPDY}.${scyc}0000.coupler.res ]; then - export warm_start=".true." -fi - -# turn IAU off for cold start -DOIAU_coldstart=${DOIAU_coldstart:-"NO"} -if [ $DOIAU = "YES" -a $warm_start = ".false." ] || [ $DOIAU_coldstart = "YES" -a $warm_start = ".true." ]; then - export DOIAU="NO" - echo "turning off IAU" - DOIAU_coldstart="YES" - IAU_OFFSET=0 - sCDATE=$CDATE - sPDY=$PDY - scyc=$cyc - tPDY=$sPDY - tcyc=$cyc -fi - -#------------------------------------------------------- -if [ $warm_start = ".true." -o $RERUN = "YES" ]; then -#------------------------------------------------------- -#............................. - if [ $RERUN = "NO" ]; then -#............................. - - # Link all (except sfc_data) restart files from $gmemdir - for file in $(ls $gmemdir/RESTART/${sPDY}.${scyc}0000.*.nc); do - file2=$(echo $(basename $file)) - file2=$(echo $file2 | cut -d. -f3-) # remove the date from file - fsuf=$(echo $file2 | cut -d. -f1) - if [ $fsuf != "sfc_data" ]; then - $NLN $file $DATA/INPUT/$file2 - fi - done - - # Link sfcanl_data restart files from $memdir - for file in $(ls $memdir/RESTART/${sPDY}.${scyc}0000.*.nc); do - file2=$(echo $(basename $file)) - file2=$(echo $file2 | cut -d. -f3-) # remove the date from file - fsufanl=$(echo $file2 | cut -d. -f1) - if [ $fsufanl = "sfcanl_data" ]; then - file2=$(echo $file2 | sed -e "s/sfcanl_data/sfc_data/g") - $NLN $file $DATA/INPUT/$file2 - fi - done - - # Need a coupler.res when doing IAU - if [ $DOIAU = "YES" ]; then - rm -f $DATA/INPUT/coupler.res - cat >> $DATA/INPUT/coupler.res << EOF - 2 (Calendar: no_calendar=0, thirty_day_months=1, julian=2, gregorian=3, noleap=4) - ${gPDY:0:4} ${gPDY:4:2} ${gPDY:6:2} ${gcyc} 0 0 Model start time: year, month, day, hour, minute, second - ${sPDY:0:4} ${sPDY:4:2} ${sPDY:6:2} ${scyc} 0 0 Current model time: year, month, day, hour, minute, second -EOF - fi - - # Link increments - if [ $DOIAU = "YES" ]; then - for i in $(echo $IAUFHRS | sed "s/,/ /g" | rev); do - incfhr=$(printf %03i $i) - if [ $incfhr = "006" ]; then - increment_file=$memdir/${CDUMP}.t${cyc}z.${PREFIX_ATMINC}atminc.nc - else - increment_file=$memdir/${CDUMP}.t${cyc}z.${PREFIX_ATMINC}atmi${incfhr}.nc - fi - if [ ! -f $increment_file ]; then - echo "ERROR: DOIAU = $DOIAU, but missing increment file for fhr $incfhr at $increment_file" - echo "Abort!" - exit 1 - fi - $NLN $increment_file $DATA/INPUT/fv_increment$i.nc - IAU_INC_FILES="'fv_increment$i.nc',$IAU_INC_FILES" - done - read_increment=".false." - res_latlon_dynamics="" - else - increment_file=$memdir/${CDUMP}.t${cyc}z.${PREFIX_INC}atminc.nc - if [ -f $increment_file ]; then - $NLN $increment_file $DATA/INPUT/fv_increment.nc - read_increment=".true." - res_latlon_dynamics="fv_increment.nc" - fi - fi - -#............................. - else ##RERUN - - export warm_start=".true." - PDYT=$(echo $CDATE_RST | cut -c1-8) - cyct=$(echo $CDATE_RST | cut -c9-10) - for file in $(ls $RSTDIR_ATM/${PDYT}.${cyct}0000.*); do - file2=$(echo $(basename $file)) - file2=$(echo $file2 | cut -d. -f3-) - $NLN $file $DATA/INPUT/$file2 - done - - hour_rst=`$NHOUR $CDATE_RST $CDATE` - IAU_FHROT=$((IAU_OFFSET+hour_rst)) - if [ $DOIAU = "YES" ]; then - IAUFHRS=-1 - IAU_DELTHRS=0 - IAU_INC_FILES="''" - fi - - - fi -#............................. - -else ## cold start - - for file in $(ls $memdir/INPUT/*.nc); do - file2=$(echo $(basename $file)) - fsuf=$(echo $file2 | cut -c1-3) - if [ $fsuf = "gfs" -o $fsuf = "sfc" ]; then - $NLN $file $DATA/INPUT/$file2 - fi - done - -#------------------------------------------------------- -fi -#------------------------------------------------------- - -nfiles=$(ls -1 $DATA/INPUT/* | wc -l) -if [ $nfiles -le 0 ]; then - echo "Initial conditions must exist in $DATA/INPUT, ABORT!" - msg="Initial conditions must exist in $DATA/INPUT, ABORT!" - postmsg "$jlogfile" "$msg" - exit 1 -fi - -# If doing IAU, change forecast hours -if [[ "$DOIAU" = "YES" ]]; then - FHMAX=$((FHMAX+6)) - if [ $FHMAX_HF -gt 0 ]; then - FHMAX_HF=$((FHMAX_HF+6)) - fi -fi - -#-------------------------------------------------------------------------- -# Grid and orography data -for n in $(seq 1 $ntiles); do - $NLN $FIXfv3/$CASE/${CASE}_grid.tile${n}.nc $DATA/INPUT/${CASE}_grid.tile${n}.nc - $NLN $FIXfv3/$CASE/${CASE}_oro_data.tile${n}.nc $DATA/INPUT/oro_data.tile${n}.nc -done -$NLN $FIXfv3/$CASE/${CASE}_mosaic.nc $DATA/INPUT/grid_spec.nc - -# GFS standard input data -IAER=${IAER:-111} -ICO2=${ICO2:-2} - -if [ ${new_o3forc:-YES} = YES ]; then - O3FORC=ozprdlos_2015_new_sbuvO3_tclm15_nuchem.f77 -else - O3FORC=global_o3prdlos.f77 -fi -H2OFORC=${H2OFORC:-"global_h2o_pltc.f77"} -$NLN $FIX_AM/${O3FORC} $DATA/global_o3prdlos.f77 -$NLN $FIX_AM/${H2OFORC} $DATA/global_h2oprdlos.f77 -$NLN $FIX_AM/global_solarconstant_noaa_an.txt $DATA/solarconstant_noaa_an.txt -$NLN $FIX_AM/global_sfc_emissivity_idx.txt $DATA/sfc_emissivity_idx.txt - -$NLN $FIX_AM/global_co2historicaldata_glob.txt $DATA/co2historicaldata_glob.txt -$NLN $FIX_AM/co2monthlycyc.txt $DATA/co2monthlycyc.txt -if [ $ICO2 -gt 0 ]; then - for file in $(ls $FIX_AM/fix_co2_proj/global_co2historicaldata*) ; do - $NLN $file $DATA/$(echo $(basename $file) | sed -e "s/global_//g") - done -fi - -$NLN $FIX_AM/global_climaeropac_global.txt $DATA/aerosol.dat -if [ $IAER -gt 0 ] ; then - for file in $(ls $FIX_AM/global_volcanic_aerosols*) ; do - $NLN $file $DATA/$(echo $(basename $file) | sed -e "s/global_//g") - done -fi - -#-------------wavewave---------------------- -if [ $cplwav = ".true." ]; then - - for file in $(ls $COMINwave/rundata/rmp_src_to_dst_conserv_*) ; do - $NLN $file $DATA/ - done - $NLN $COMINwave/rundata/ww3_multi.${CDUMPwave}${WAV_MEMBER}.${cycle}.inp $DATA/ww3_multi.inp - - array=($WAVECUR_FID $WAVEICE_FID $WAVEWND_FID $waveuoutpGRD $waveGRD $waveesmfGRD $wavesbsGRD $wavepostGRD $waveinterpGRD) - grdALL=`printf "%s\n" "${array[@]}" | sort -u | tr '\n' ' '` - - for wavGRD in ${grdALL}; do - $NLN $COMINwave/rundata/${CDUMPwave}.mod_def.$wavGRD $DATA/mod_def.$wavGRD - done - - export WAVHCYC=${WAVHCYC:-6} - export WRDATE=`$NDATE -${WAVHCYC} $CDATE` - export WRPDY=`echo $WRDATE | cut -c1-8` - export WRcyc=`echo $WRDATE | cut -c9-10` - export WRDIR=${ROTDIR}/${CDUMPRSTwave}.${WRPDY}/${WRcyc}/wave/restart - export datwave=$COMOUTwave/rundata - export wavprfx=${CDUMPwave}${WAV_MEMBER} - - for wavGRD in $waveGRD ; do - if [ $RERUN = "NO" ]; then - $NLN ${WRDIR}/${sPDY}.${scyc}0000.restart.${wavGRD} $DATA/restart.${wavGRD} - else - $NLN ${RSTDIR_WAVE}/${PDYT}.${cyct}0000.restart.${wavGRD} $DATA/restart.${wavGRD} - fi - eval $NLN $datwave/${wavprfx}.log.${wavGRD}.${PDY}${cyc} log.${wavGRD} - done - - if [ "$WW3ICEINP" = "YES" ]; then - wavicefile=$COMINwave/rundata/${CDUMPwave}.${WAVEICE_FID}.${cycle}.ice - if [ ! -f $wavicefile ]; then - echo "ERROR: WW3ICEINP = ${WW3ICEINP}, but missing ice file" - echo "Abort!" - exit 1 - fi - $NLN ${wavicefile} $DATA/ice.${WAVEICE_FID} - fi - - if [ "$WW3CURINP" = "YES" ]; then - wavcurfile=$COMINwave/rundata/${CDUMPwave}.${WAVECUR_FID}.${cycle}.cur - if [ ! -f $wavcurfile ]; then - echo "ERROR: WW3CURINP = ${WW3CURINP}, but missing current file" - echo "Abort!" - exit 1 - fi - $NLN $wavcurfile $DATA/current.${WAVECUR_FID} - fi - - # Link output files - cd $DATA - eval $NLN $datwave/${wavprfx}.log.mww3.${PDY}${cyc} log.mww3 - - # Loop for gridded output (uses FHINC) - fhr=$FHMIN_WAV - while [ $fhr -le $FHMAX_WAV ]; do - YMDH=`$NDATE $fhr $CDATE` - YMD=$(echo $YMDH | cut -c1-8) - HMS="$(echo $YMDH | cut -c9-10)0000" - for wavGRD in ${waveGRD} ; do - eval $NLN $datwave/${wavprfx}.out_grd.${wavGRD}.${YMD}.${HMS} ${YMD}.${HMS}.out_grd.${wavGRD} - done - FHINC=$FHOUT_WAV - if [ $FHMAX_HF_WAV -gt 0 -a $FHOUT_HF_WAV -gt 0 -a $fhr -lt $FHMAX_HF_WAV ]; then - FHINC=$FHOUT_HF_WAV - fi - fhr=$((fhr+FHINC)) - done - - # Loop for point output (uses DTPNT) - fhr=$FHMIN_WAV - while [ $fhr -le $FHMAX_WAV ]; do - YMDH=`$NDATE $fhr $CDATE` - YMD=$(echo $YMDH | cut -c1-8) - HMS="$(echo $YMDH | cut -c9-10)0000" - eval $NLN $datwave/${wavprfx}.out_pnt.${waveuoutpGRD}.${YMD}.${HMS} ${YMD}.${HMS}.out_pnt.${waveuoutpGRD} - FHINC=$FHINCP_WAV - fhr=$((fhr+FHINC)) - done - -fi #cplwav=true -#-------------wavewave---------------------- - -# inline post fix files -if [ $WRITE_DOPOST = ".true." ]; then - $NLN $PARM_POST/post_tag_gfs${LEVS} $DATA/itag - $NLN $PARM_POST/postxconfig-NT-GFS-TWO.txt $DATA/postxconfig-NT.txt - $NLN $PARM_POST/postxconfig-NT-GFS-F00-TWO.txt $DATA/postxconfig-NT_FH00.txt - $NLN $PARM_POST/params_grib2_tbl_new $DATA/params_grib2_tbl_new -fi -#------------------------------------------------------------------ - -# changeable parameters -# dycore definitions -res=$(echo $CASE |cut -c2-5) -resp=$((res+1)) -npx=$resp -npy=$resp -npz=$((LEVS-1)) -io_layout=${io_layout:-"1,1"} -#ncols=$(( (${npx}-1)*(${npy}-1)*3/2 )) - -# spectral truncation and regular grid resolution based on FV3 resolution -JCAP_CASE=$((2*res-2)) -LONB_CASE=$((4*res)) -LATB_CASE=$((2*res)) - -JCAP=${JCAP:-$JCAP_CASE} -LONB=${LONB:-$LONB_CASE} -LATB=${LATB:-$LATB_CASE} - -LONB_IMO=${LONB_IMO:-$LONB_CASE} -LATB_JMO=${LATB_JMO:-$LATB_CASE} - -# Fix files -FNGLAC=${FNGLAC:-"$FIX_AM/global_glacier.2x2.grb"} -FNMXIC=${FNMXIC:-"$FIX_AM/global_maxice.2x2.grb"} -FNTSFC=${FNTSFC:-"$FIX_AM/RTGSST.1982.2012.monthly.clim.grb"} -FNSNOC=${FNSNOC:-"$FIX_AM/global_snoclim.1.875.grb"} -FNZORC=${FNZORC:-"igbp"} -FNALBC2=${FNALBC2:-"$FIX_AM/global_albedo4.1x1.grb"} -FNAISC=${FNAISC:-"$FIX_AM/CFSR.SEAICE.1982.2012.monthly.clim.grb"} -FNTG3C=${FNTG3C:-"$FIX_AM/global_tg3clim.2.6x1.5.grb"} -FNVEGC=${FNVEGC:-"$FIX_AM/global_vegfrac.0.144.decpercent.grb"} -FNMSKH=${FNMSKH:-"$FIX_AM/global_slmask.t1534.3072.1536.grb"} -FNVMNC=${FNVMNC:-"$FIX_AM/global_shdmin.0.144x0.144.grb"} -FNVMXC=${FNVMXC:-"$FIX_AM/global_shdmax.0.144x0.144.grb"} -FNSLPC=${FNSLPC:-"$FIX_AM/global_slope.1x1.grb"} -FNALBC=${FNALBC:-"$FIX_AM/global_snowfree_albedo.bosu.t${JCAP}.${LONB}.${LATB}.rg.grb"} -FNVETC=${FNVETC:-"$FIX_AM/global_vegtype.igbp.t${JCAP}.${LONB}.${LATB}.rg.grb"} -FNSOTC=${FNSOTC:-"$FIX_AM/global_soiltype.statsgo.t${JCAP}.${LONB}.${LATB}.rg.grb"} -FNABSC=${FNABSC:-"$FIX_AM/global_mxsnoalb.uariz.t${JCAP}.${LONB}.${LATB}.rg.grb"} -FNSMCC=${FNSMCC:-"$FIX_AM/global_soilmgldas.statsgo.t${JCAP}.${LONB}.${LATB}.grb"} - -# If the appropriate resolution fix file is not present, use the highest resolution available (T1534) -[[ ! -f $FNALBC ]] && FNALBC="$FIX_AM/global_snowfree_albedo.bosu.t1534.3072.1536.rg.grb" -[[ ! -f $FNVETC ]] && FNVETC="$FIX_AM/global_vegtype.igbp.t1534.3072.1536.rg.grb" -[[ ! -f $FNSOTC ]] && FNSOTC="$FIX_AM/global_soiltype.statsgo.t1534.3072.1536.rg.grb" -[[ ! -f $FNABSC ]] && FNABSC="$FIX_AM/global_mxsnoalb.uariz.t1534.3072.1536.rg.grb" -[[ ! -f $FNSMCC ]] && FNSMCC="$FIX_AM/global_soilmgldas.statsgo.t1534.3072.1536.grb" - -# NSST Options -# nstf_name contains the NSST related parameters -# nstf_name(1) : NST_MODEL (NSST Model) : 0 = OFF, 1 = ON but uncoupled, 2 = ON and coupled -# nstf_name(2) : NST_SPINUP : 0 = OFF, 1 = ON, -# nstf_name(3) : NST_RESV (Reserved, NSST Analysis) : 0 = OFF, 1 = ON -# nstf_name(4) : ZSEA1 (in mm) : 0 -# nstf_name(5) : ZSEA2 (in mm) : 0 -# nst_anl : .true. or .false., NSST analysis over lake -NST_MODEL=${NST_MODEL:-0} -NST_SPINUP=${NST_SPINUP:-0} -NST_RESV=${NST_RESV-0} -ZSEA1=${ZSEA1:-0} -ZSEA2=${ZSEA2:-0} -nstf_name=${nstf_name:-"$NST_MODEL,$NST_SPINUP,$NST_RESV,$ZSEA1,$ZSEA2"} -nst_anl=${nst_anl:-".false."} - - -# blocking factor used for threading and general physics performance -#nyblocks=`expr \( $npy - 1 \) \/ $layout_y ` -#nxblocks=`expr \( $npx - 1 \) \/ $layout_x \/ 32` -#if [ $nxblocks -le 0 ]; then nxblocks=1 ; fi -blocksize=${blocksize:-32} - -# the pre-conditioning of the solution -# =0 implies no pre-conditioning -# >0 means new adiabatic pre-conditioning -# <0 means older adiabatic pre-conditioning -na_init=${na_init:-1} -[[ $warm_start = ".true." ]] && na_init=0 - -# variables for controlling initialization of NCEP/NGGPS ICs -filtered_terrain=${filtered_terrain:-".true."} -gfs_dwinds=${gfs_dwinds:-".true."} - -# various debug options -no_dycore=${no_dycore:-".false."} -dycore_only=${adiabatic:-".false."} -chksum_debug=${chksum_debug:-".false."} -print_freq=${print_freq:-6} - -if [ ${TYPE} = "nh" ]; then # non-hydrostatic options - - hydrostatic=".false." - phys_hydrostatic=".false." # enable heating in hydrostatic balance in non-hydrostatic simulation - use_hydro_pressure=".false." # use hydrostatic pressure for physics - if [ $warm_start = ".true." ]; then - make_nh=".false." # restarts contain non-hydrostatic state - else - make_nh=".true." # re-initialize non-hydrostatic state - fi - -else # hydrostatic options - - hydrostatic=".true." - phys_hydrostatic=".false." # ignored when hydrostatic = T - use_hydro_pressure=".false." # ignored when hydrostatic = T - make_nh=".false." # running in hydrostatic mode - -fi - -# Conserve total energy as heat globally -consv_te=${consv_te:-1.} # range 0.-1., 1. will restore energy to orig. val. before physics - -# time step parameters in FV3 -k_split=${k_split:-2} -n_split=${n_split:-6} - -if [ $(echo $MONO | cut -c-4) = "mono" ]; then # monotonic options - - d_con=${d_con_mono:-"0."} - do_vort_damp=".false." - if [ ${TYPE} = "nh" ]; then # non-hydrostatic - hord_mt=${hord_mt_nh_mono:-"10"} - hord_xx=${hord_xx_nh_mono:-"10"} - else # hydrostatic - hord_mt=${hord_mt_hydro_mono:-"10"} - hord_xx=${hord_xx_hydro_mono:-"10"} - fi - -else # non-monotonic options - - d_con=${d_con_nonmono:-"1."} - do_vort_damp=".true." - if [ ${TYPE} = "nh" ]; then # non-hydrostatic - hord_mt=${hord_mt_nh_nonmono:-"5"} - hord_xx=${hord_xx_nh_nonmono:-"5"} - else # hydrostatic - hord_mt=${hord_mt_hydro_nonmono:-"10"} - hord_xx=${hord_xx_hydro_nonmono:-"10"} - fi - -fi - -if [ $(echo $MONO | cut -c-4) != "mono" -a $TYPE = "nh" ]; then - vtdm4=${vtdm4_nh_nonmono:-"0.06"} -else - vtdm4=${vtdm4:-"0.05"} -fi - -if [ $warm_start = ".true." ]; then # warm start from restart file - - nggps_ic=".false." - ncep_ic=".false." - external_ic=".false." - mountain=".true." - if [ $read_increment = ".true." ]; then # add increment on the fly to the restarts - res_latlon_dynamics="fv_increment.nc" - else - res_latlon_dynamics='""' - fi - -else # CHGRES'd GFS analyses - - nggps_ic=${nggps_ic:-".true."} - ncep_ic=${ncep_ic:-".false."} - external_ic=".true." - mountain=".false." - read_increment=".false." - res_latlon_dynamics='""' - -fi - -# Stochastic Physics Options -if [ ${SET_STP_SEED:-"YES"} = "YES" ]; then - ISEED_SKEB=$((CDATE*1000 + MEMBER*10 + 1)) - ISEED_SHUM=$((CDATE*1000 + MEMBER*10 + 2)) - ISEED_SPPT=$((CDATE*1000 + MEMBER*10 + 3)) -else - ISEED=${ISEED:-0} -fi -DO_SKEB=${DO_SKEB:-"NO"} -DO_SPPT=${DO_SPPT:-"NO"} -DO_SHUM=${DO_SHUM:-"NO"} - -if [ $DO_SKEB = "YES" ]; then - do_skeb=".true." -fi -if [ $DO_SHUM = "YES" ]; then - do_shum=".true." -fi -if [ $DO_SPPT = "YES" ]; then - do_sppt=".true." -fi - -# copy over the tables -DIAG_TABLE=${DIAG_TABLE:-$PARM_FV3DIAG/diag_table} -DATA_TABLE=${DATA_TABLE:-$PARM_FV3DIAG/data_table} -FIELD_TABLE=${FIELD_TABLE:-$PARM_FV3DIAG/field_table} - -# build the diag_table with the experiment name and date stamp -if [ $DOIAU = "YES" ]; then -cat > diag_table << EOF -FV3 Forecast -${gPDY:0:4} ${gPDY:4:2} ${gPDY:6:2} ${gcyc} 0 0 -EOF -cat $DIAG_TABLE >> diag_table -else -cat > diag_table << EOF -FV3 Forecast -${sPDY:0:4} ${sPDY:4:2} ${sPDY:6:2} ${scyc} 0 0 -EOF -cat $DIAG_TABLE >> diag_table -fi - -$NCP $DATA_TABLE data_table -$NCP $FIELD_TABLE field_table - -#------------------------------------------------------------------ -rm -f nems.configure - -if [ $cplwav = ".true." ]; then -#### ww3 version of nems.configure - -# Switch on cpl flag - cpl=.true. - -NTASKS_FV3m1=$((NTASKS_FV3-1)) -atm_petlist_bounds=" 0 $((NTASKS_FV3-1))" -wav_petlist_bounds=" $((NTASKS_FV3)) $((NTASKS_FV3m1+npe_wav))" -### atm_petlist_bounds=" 0 1511" -### atm_petlist_bounds=$atm_petlist_bounds -### wav_petlist_bounds="1512 1691" -### wav_petlist_bounds=$wav_petlist_bounds - coupling_interval_sec=${coupling_interval_sec:-1800} - rm -f nems.configure -cat > nems.configure < WAV :SrcTermProcessing=0:TermOrder=SrcSeq - WAV - @ -:: -EOF -else -#### fv3 standalone version of nems.configure -cat > nems.configure < model_configure < input.nml <> input.nml << EOF - iaufhrs = ${IAUFHRS} - iau_delthrs = ${IAU_DELTHRS} - iau_inc_files= ${IAU_INC_FILES} - iau_drymassfixer = .false. -EOF -fi - -cat >> input.nml <> input.nml - -cat >> input.nml <> input.nml -if [ $MEMBER -gt 0 ]; then - - cat >> input.nml << EOF -&nam_stochy -EOF - - if [ $DO_SKEB = "YES" ]; then - cat >> input.nml << EOF - skeb = $SKEB - iseed_skeb = ${ISEED_SKEB:-$ISEED} - skeb_tau = ${SKEB_TAU:-"-999."} - skeb_lscale = ${SKEB_LSCALE:-"-999."} - skebnorm = ${SKEBNORM:-"1"} - skeb_npass = ${SKEB_nPASS:-"30"} - skeb_vdof = ${SKEB_VDOF:-"5"} -EOF - fi - - if [ $DO_SHUM = "YES" ]; then - cat >> input.nml << EOF - shum = $SHUM - iseed_shum = ${ISEED_SHUM:-$ISEED} - shum_tau = ${SHUM_TAU:-"-999."} - shum_lscale = ${SHUM_LSCALE:-"-999."} -EOF - fi - - if [ $DO_SPPT = "YES" ]; then - cat >> input.nml << EOF - sppt = $SPPT - iseed_sppt = ${ISEED_SPPT:-$ISEED} - sppt_tau = ${SPPT_TAU:-"-999."} - sppt_lscale = ${SPPT_LSCALE:-"-999."} - sppt_logit = ${SPPT_LOGIT:-".true."} - sppt_sfclimit = ${SPPT_SFCLIMIT:-".true."} - use_zmtnblck = ${use_zmtnblck:-".true."} -EOF - fi - - cat >> input.nml << EOF - $nam_stochy_nml -/ -EOF - - - cat >> input.nml << EOF -&nam_sfcperts - $nam_sfcperts_nml -/ -EOF - -else - - cat >> input.nml << EOF -&nam_stochy -/ -&nam_sfcperts -/ -EOF - -fi - - -#------------------------------------------------------------------ -# make symbolic links to write forecast files directly in memdir -cd $DATA -if [ $QUILTING = ".true." -a $OUTPUT_GRID = "gaussian_grid" ]; then - fhr=$FHMIN - while [ $fhr -le $FHMAX ]; do - FH3=$(printf %03i $fhr) - FH2=$(printf %02i $fhr) - atmi=atmf${FH3}.$affix - sfci=sfcf${FH3}.$affix - logi=logf${FH3} - pgbi=GFSPRS.GrbF${FH2} - flxi=GFSFLX.GrbF${FH2} - atmo=$memdir/${CDUMP}.t${cyc}z.atmf${FH3}.$affix - sfco=$memdir/${CDUMP}.t${cyc}z.sfcf${FH3}.$affix - logo=$memdir/${CDUMP}.t${cyc}z.logf${FH3}.txt - pgbo=$memdir/${CDUMP}.t${cyc}z.master.grb2f${FH3} - flxo=$memdir/${CDUMP}.t${cyc}z.sfluxgrbf${FH3}.grib2 - eval $NLN $atmo $atmi - eval $NLN $sfco $sfci - eval $NLN $logo $logi - if [ $WRITE_DOPOST = ".true." ]; then - eval $NLN $pgbo $pgbi - eval $NLN $flxo $flxi - fi - FHINC=$FHOUT - if [ $FHMAX_HF -gt 0 -a $FHOUT_HF -gt 0 -a $fhr -lt $FHMAX_HF ]; then - FHINC=$FHOUT_HF - fi - fhr=$((fhr+FHINC)) - done -else - for n in $(seq 1 $ntiles); do - eval $NLN nggps2d.tile${n}.nc $memdir/nggps2d.tile${n}.nc - eval $NLN nggps3d.tile${n}.nc $memdir/nggps3d.tile${n}.nc - eval $NLN grid_spec.tile${n}.nc $memdir/grid_spec.tile${n}.nc - eval $NLN atmos_static.tile${n}.nc $memdir/atmos_static.tile${n}.nc - eval $NLN atmos_4xdaily.tile${n}.nc $memdir/atmos_4xdaily.tile${n}.nc - done -fi - -#------------------------------------------------------------------ -# run the executable - -$NCP $FCSTEXECDIR/$FCSTEXEC $DATA/. -export OMP_NUM_THREADS=$NTHREADS_FV3 -$APRUN_FV3 $DATA/$FCSTEXEC 1>&1 2>&2 -export ERR=$? -export err=$ERR -$ERRSCRIPT || exit $err - -#------------------------------------------------------------------ -if [ $SEND = "YES" ]; then - - # Copy gdas and enkf member restart files - if [ $CDUMP = "gdas" -a $rst_invt1 -gt 0 ]; then - cd $DATA/RESTART - mkdir -p $memdir/RESTART - for rst_int in $restart_interval ; do - if [ $rst_int -ge 0 ]; then - RDATE=$($NDATE +$rst_int $CDATE) - rPDY=$(echo $RDATE | cut -c1-8) - rcyc=$(echo $RDATE | cut -c9-10) - for file in $(ls ${rPDY}.${rcyc}0000.*) ; do - $NCP $file $memdir/RESTART/$file - done - fi - done - if [ $DOIAU = "YES" ] || [ $DOIAU_coldstart = "YES" ]; then - # if IAU is on, save restart at start of IAU window - rst_iau=$(( ${IAU_OFFSET} - (${IAU_DELTHRS}/2) )) - if [ $rst_iau -lt 0 ];then - rst_iau=$(( (${IAU_DELTHRS}) - ${IAU_OFFSET} )) - fi - RDATE=$($NDATE +$rst_iau $CDATE) - rPDY=$(echo $RDATE | cut -c1-8) - rcyc=$(echo $RDATE | cut -c9-10) - for file in $(ls ${rPDY}.${rcyc}0000.*) ; do - $NCP $file $memdir/RESTART/$file - done - fi - fi -fi - -#------------------------------------------------------------------ -# Clean up before leaving -if [ $mkdata = "YES" ]; then rm -rf $DATA; fi - -#------------------------------------------------------------------ -set +x -if [ $VERBOSE = "YES" ] ; then - echo $(date) EXITING $0 with return code $err >&2 -fi -exit 0 diff --git a/scripts/exglobal_forecast.py b/scripts/exglobal_forecast.py new file mode 100755 index 0000000000..c2ea9495fc --- /dev/null +++ b/scripts/exglobal_forecast.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 + +import os + +from wxflow import Logger, logit, save_as_yaml, cast_strdict_as_dtypedict +from pygfs.task.gfs_forecast import GFSForecast + +# initialize root logger +logger = Logger(level=os.environ.get("LOGGING_LEVEL"), colored_log=True) + + +@logit(logger) +def main(): + + # instantiate the forecast + config = cast_strdict_as_dtypedict(os.environ) + save_as_yaml(config, f'{config.EXPDIR}/fcst.yaml') # Temporarily save the input to the Forecast + + fcst = GFSForecast(config) + fcst.initialize() + fcst.configure() + + +if __name__ == '__main__': + main() diff --git a/scripts/exglobal_forecast.sh b/scripts/exglobal_forecast.sh new file mode 100755 index 0000000000..49dbaf12cf --- /dev/null +++ b/scripts/exglobal_forecast.sh @@ -0,0 +1,165 @@ +#! /usr/bin/env bash + +################################################################################ +## UNIX Script Documentation Block +## Script name: exglobal_forecast.sh +## Script description: Runs a global FV3GFS model forecast +## +## Author: Fanglin Yang Organization: NCEP/EMC Date: 2016-11-15 +## Abstract: This script runs a single GFS forecast with FV3 dynamical core. +## This script is created based on a C-shell script that GFDL wrote +## for the NGGPS Phase-II Dycore Comparison Project. +## +## Script history log: +## 2016-11-15 Fanglin Yang First Version. +## 2017-02-09 Rahul Mahajan Added warm start and restructured the code. +## 2017-03-10 Fanglin Yang Updated for running forecast on Cray. +## 2017-03-24 Fanglin Yang Updated to use NEMS FV3GFS with IPD4 +## 2017-05-24 Rahul Mahajan Updated for cycling with NEMS FV3GFS +## 2017-09-13 Fanglin Yang Updated for using GFDL MP and Write Component +## 2019-04-02 +## +## Attributes: +## Language: Portable Operating System Interface (POSIX) Shell +## Machines: All supported platforms +## +## Usage (Arguments) +## No command line argument +## +## Data input (location, name) +## Warm start files: +## 1. restart file except sfc_data, $gmemdir/RESTART/$PDY.$cyc.*.nc +## 2. sfcanl_data, $memdir/RESTART/$PDY.$cyc.*.nc +## 3. coupler_res, $gmemdir/RESTART/$PDY.$cyc.coupler.res +## 4. increment file, $memdir/${CDUMP}.t${cyc}z.atminc.nc +## OR $DATA/INPUT/fv3_increment.nc +## Cold start files: +## 1. initial condition, $memdir/INPUT/*.nc +## Restart files: +## +## Fix files: +## 1. computing grid, $FIXfv3/$CASE/${CASE}_grid.tile${n}.nc +## 2. orography data, $FIXfv3/$CASE/${CASE}_oro_data.tile${n}.nc +## 3. mosaic data, $FIXfv3/$CASE/${CASE}_mosaic.nc +## 4. Global O3 data, $FIX_AM/${O3FORC} +## 5. Global H2O data, $FIX_AM/${H2OFORC} +## 6. Global solar constant data, $FIX_AM/global_solarconstant_noaa_an.txt +## 7. Global surface emissivity, $FIX_AM/global_sfc_emissivity_idx.txt +## 8. Global CO2 historical data, $FIX_AM/global_co2historicaldata_glob.txt +## 8. Global CO2 monthly data, $FIX_AM/co2monthlycyc.txt +## 10. Additional global CO2 data, $FIX_AM/fix_co2_proj/global_co2historicaldata +## 11. Climatological aerosol global distribution +## $FIX_AM/global_climaeropac_global.txt +## 12. Monthly volcanic forcing $FIX_AM/global_volcanic_aerosols_YYYY-YYYY.txt +## +## Data output (location, name) +## If quilting=true and output grid is gaussian grid: +## 1. atmf data, $memdir/${CDUMP}.t${cyc}z.atmf${FH3}.$OUTPUT_FILE +## 2. sfcf data, $memdir/${CDUMP}.t${cyc}z.sfcf${FH3}.$OUTPUT_FILE +## 3. logf data, $memdir/${CDUMP}.t${cyc}z.logf${FH3}.$OUTPUT_FILE +## If quilting=false and output grid is not gaussian grid: +## 1. NGGPS2D, $memdir/nggps2d.tile${n}.nc +## 2. NGGPS3D, $memdir/nggps3d.tile${n}.nc +## 3. grid spec, $memdir/grid_spec.tile${n}.nc +## 4. atmospheric static tiles, $memdir/atmos_static.tile${n}.nc +## 5. atmospheric 4x daily tiles, $memdir/atmos_4xdaily.tile${n}.nc +## +## Status output +## 0: Normal +## others: Error +## +## Namelist input, in RUNDIR, +## 1. diag_table +## 2. ufs.configure +## 3. model_configure +## 4. input.nml +####################### +# Main body starts here +####################### + +source "${HOMEgfs}/ush/preamble.sh" + +# include all subroutines. Executions later. +source "${HOMEgfs}/ush/forecast_predet.sh" # include functions for variable definition +source "${HOMEgfs}/ush/forecast_det.sh" # include functions for run type determination +source "${HOMEgfs}/ush/forecast_postdet.sh" # include functions for variables after run type determination +source "${HOMEgfs}/ush/ufs_configure.sh" # include functions for ufs.configure processing +source "${HOMEgfs}/ush/parsing_model_configure_FV3.sh" + +# Coupling control switches, for coupling purpose, off by default +cpl=${cpl:-.false.} +cplflx=${cplflx:-.false.} # default off,import from outside source +cplwav=${cplwav:-.false.} # ? how to control 1-way/2-way? +cplchm=${cplchm:-.false.} # Chemistry model +cplice=${cplice:-.false.} # ICE model + +OCNTIM=${OCNTIM:-1800} +DELTIM=${DELTIM:-450} +ICETIM=${DELTIM} + +CPL_SLOW=${CPL_SLOW:-${OCNTIM}} +CPL_FAST=${CPL_FAST:-${ICETIM}} + +echo "MAIN: Loading common variables before determination of run type" +common_predet + +echo "MAIN: Loading variables before determination of run type" +FV3_predet +[[ ${cplflx} = .true. ]] && MOM6_predet +[[ ${cplwav} = .true. ]] && WW3_predet +[[ ${cplice} = .true. ]] && CICE_predet +echo "MAIN: Variables before determination of run type loaded" + +echo "MAIN: Determining run type" +FV3_det +[[ ${cplflx} = .true. ]] && MOM6_det +[[ ${cplwav} = .true. ]] && WW3_det +[[ ${cplice} = .true. ]] && CICE_det +echo "MAIN: RUN Type Determined" + +echo "MAIN: Post-determination set up of run type" +FV3_postdet +[[ ${cplflx} = .true. ]] && MOM6_postdet +[[ ${cplwav} = .true. ]] && WW3_postdet +[[ ${cplice} = .true. ]] && CICE_postdet +[[ ${cplchm} = .true. ]] && GOCART_postdet +echo "MAIN: Post-determination set up of run type finished" + +echo "MAIN: Writing namelists and model configuration" +FV3_nml +[[ ${cplflx} = .true. ]] && MOM6_nml +[[ ${cplwav} = .true. ]] && WW3_nml +[[ ${cplice} = .true. ]] && CICE_nml +[[ ${cplchm} = .true. ]] && GOCART_rc +FV3_model_configure +echo "MAIN: Name lists and model configuration written" + +echo "MAIN: Writing UFS Configure file" +writing_ufs_configure +echo "MAIN: UFS configured" + +#------------------------------------------------------------------ +# run the executable + +if [[ "${esmf_profile:-}" = ".true." ]]; then + export ESMF_RUNTIME_PROFILE=ON + export ESMF_RUNTIME_PROFILE_OUTPUT=SUMMARY +fi + +${NCP} "${FCSTEXECDIR}/${FCSTEXEC}" "${DATA}/" +${APRUN_UFS} "${DATA}/${FCSTEXEC}" 1>&1 2>&2 +export ERR=$? +export err=${ERR} +${ERRSCRIPT} || exit "${err}" + +FV3_out +[[ ${cplflx} = .true. ]] && MOM6_out +[[ ${cplwav} = .true. ]] && WW3_out +[[ ${cplice} = .true. ]] && CICE_out +[[ ${cplchm} = .true. ]] && GOCART_out +[[ ${esmf_profile:-} = .true. ]] && CPL_out +echo "MAIN: Output copied to COMROT" + +#------------------------------------------------------------------ + +exit "${err}" diff --git a/scripts/exglobal_grib2_special_npoess.sh b/scripts/exglobal_grib2_special_npoess.sh deleted file mode 100755 index 652a519205..0000000000 --- a/scripts/exglobal_grib2_special_npoess.sh +++ /dev/null @@ -1,220 +0,0 @@ -#!/bin/ksh -##################################################################### -echo "-----------------------------------------------------" -echo " exglobal_grib2_special_npoess.sh" -echo " Jan 2008 - Chuang - Produces 1x1 degree special Grib from master." -echo "-----------------------------------------------------" -##################################################################### - -set -x - -cd $DATA - -msg="HAS BEGUN on `hostname`" -postmsg "$jlogfile" "$msg" - -############################################################ -# Define Variables: -# ----------------- -# SHOUR is the starting forecast hour. normally 0 except for restarts. -# FHOUR is the ending forecast hour. -# FHINC is the increment hour for each forecast steps. -# FH is the current forecast hour. -# SLEEP_TIME is the number of seconds to sleep before exiting with error. -# SLEEP_INT is the number of seconds to sleep between restrt file checks. -# restart_file is the name of the file to key off of to kick off pgrb -# generation. -############################################################ - -############################################################ -# NO processing Analysis special Files -############################################################ - -# Set type of Interpolation for WGRIB2 -export opt1=' -set_grib_type same -new_grid_winds earth ' -export opt1uv=' -set_grib_type same -new_grid_winds grid ' -export opt21=' -new_grid_interpolation bilinear -if ' -export opt22=":(CSNOW|CRAIN|CFRZR|CICEP|ICSEV):" -export opt23=' -new_grid_interpolation neighbor -fi ' -export opt24=' -set_bitmap 1 -set_grib_max_bits 16 -if ' -export opt25=":(APCP|ACPCP|PRATE|CPRAT):" -export opt26=' -set_grib_max_bits 25 -fi -if ' -export opt27=":(APCP|ACPCP|PRATE|CPRAT|DZDT):" -export opt28=' -new_grid_interpolation budget -fi ' - -SLEEP_LOOP_MAX=`expr $SLEEP_TIME / $SLEEP_INT` - -############################################################################## -# Specify Forecast Hour Range F000 - F024 for GFS_NPOESS_PGRB2_0P5DEG -############################################################################## -export SHOUR=000 -export FHOUR=024 -export fhr=$SHOUR -typeset -Z3 fhr -############################################################ -# Loop Through the Post Forecast Files -############################################################ -while test $fhr -le $FHOUR -do - - ############################### - # Start Looping for the - # existence of the restart files - ############################### - export pgm="postcheck" - ic=1 - while [ $ic -le $SLEEP_LOOP_MAX ] - do - if test -f $COMIN/gfs.t${cyc}z.pgrb2b.0p50.f${fhr}.idx - then - break - else - ic=`expr $ic + 1` - sleep $SLEEP_INT - fi - ############################### - # If we reach this point assume - # fcst job never reached restart - # period and error exit - ############################### - if [ $ic -eq $SLEEP_LOOP_MAX ] - then - export err=9 - err_chk - fi - done - -###################################################################### -# Process Global NPOESS 0.50 GFS GRID PRODUCTS IN GRIB2 F000 - F024 # -###################################################################### - set -x - msg="Starting half degree grib generation for fhr=$fhr" - postmsg "$jlogfile" "$msg" - - paramlist=${PARMproduct}/global_npoess_paramlist_g2 - cp $COMIN/gfs.t${cyc}z.pgrb2.0p50.f${fhr} tmpfile2 - cp $COMIN/gfs.t${cyc}z.pgrb2b.0p50.f${fhr} tmpfile2b - cat tmpfile2 tmpfile2b > tmpfile - $WGRIB2 tmpfile | grep -F -f $paramlist | $WGRIB2 -i -grib pgb2file tmpfile - export err=$?; err_chk - - if test $SENDCOM = "YES" - then - cp pgb2file $COMOUT/${RUN}.${cycle}.pgrb2f${fhr}.npoess - - if test $SENDDBN = "YES" - then - $DBNROOT/bin/dbn_alert MODEL GFS_PGBNPOESS $job $COMOUT/${RUN}.${cycle}.pgrb2f${fhr}.npoess - else - msg="File ${RUN}.${cycle}.pgrb2f${fhr}.npoess not posted to db_net." - postmsg "$msg" - fi - echo "$PDY$cyc$fhr" > $COMOUT/${RUN}.t${cyc}z.control.halfdeg.npoess - fi - rm tmpfile pgb2file - export fhr=`expr $fhr + $FHINC` - typeset -Z3 fhr - -done - -################################################################ -# Specify Forecast Hour Range F000 - F180 for GOESSIMPGRB files -################################################################ -export SHOUR=000 -export FHOUR=180 -export fhr=$SHOUR -typeset -Z3 fhr - -################################# -# Process GFS PGRB2_SPECIAL_POST -################################# - -while test $fhr -le $FHOUR -do - ############################### - # Start Looping for the - # existence of the restart files - ############################### - set +x - export pgm="postcheck" - ic=1 - while [ $ic -le $SLEEP_LOOP_MAX ] - do - if test -f $restart_file$fhr - then - break - else - ic=`expr $ic + 1` - sleep $SLEEP_INT - fi - ############################### - # If we reach this point assume - # fcst job never reached restart - # period and error exit - ############################### - if [ $ic -eq $SLEEP_LOOP_MAX ] - then - export err=9 - err_chk - fi - done - set -x - - msg="Starting special grib file generation for fhr=$fhr" - postmsg "$jlogfile" "$msg" - - ############################### - # Put restart files into /nwges - # for backup to start Model Fcst - ############################### - - cp $COMIN/${RUN}.t${cyc}z.special.grb2f$fhr masterfile - -# $COPYGB2 -g "0 6 0 0 0 0 0 0 360 181 0 0 90000000 0 48 -90000000 359000000 1000000 1000000 0" -i1,1 -x masterfile pgb2file - -# export grid1p0="latlon 0:360:1.0 90:181:-1.0" - export grid0p25="latlon 0:1440:0.25 90:721:-0.25" - $WGRIB2 masterfile $opt1 $opt21 $opt22 $opt23 $opt24 $opt25 $opt26 $opt27 $opt28 -new_grid $grid0p25 pgb2file - -# creating higher resolution goes files for US centers -# $COPYGB2 -g "30 6 0 0 0 0 0 0 349 277 1000000 214500000 8 50000000 253000000 32463000 32463000 0 64 50000000 50000000 0 0" -i1,1 -x masterfile pgb2file2 - - export gridconus="lambert:253.0:50.0:50.0 214.5:349:32463.0 1.0:277:32463.0" - $WGRIB2 masterfile $opt1uv $opt21 $opt22 $opt23 $opt24 $opt25 $opt26 $opt27 $opt28 -new_grid $gridconus pgb2file2 - - $WGRIB2 pgb2file -s > pgb2ifile - - if test $SENDCOM = "YES" - then - - cp pgb2file $COMOUT/${RUN}.${cycle}.goessimpgrb2.0p25.f${fhr} - cp pgb2ifile $COMOUT/${RUN}.${cycle}.goessimpgrb2.0p25.f${fhr}.idx - - cp pgb2file2 $COMOUT/${RUN}.${cycle}.goessimpgrb2f${fhr}.grd221 - - if test $SENDDBN = "YES" - then - $DBNROOT/bin/dbn_alert MODEL GFS_GOESSIMPGB2_1P0 $job $COMOUT/${RUN}.${cycle}.goessimpgrb2.0p25.f${fhr} - $DBNROOT/bin/dbn_alert MODEL GFS_GOESSIMPGB2_1P0_WIDX $job $COMOUT/${RUN}.${cycle}.goessimpgrb2.0p25.f${fhr}.idx - $DBNROOT/bin/dbn_alert MODEL GFS_GOESSIMGRD221_PGB2 $job $COMOUT/${RUN}.${cycle}.goessimpgrb2f${fhr}.grd221 - fi - - echo "$PDY$cyc$fhr" > $COMOUT/${RUN}.t${cyc}z.control.goessimpgrb - fi - rm pgb2file2 pgb2ifile - - if test "$SENDECF" = 'YES' - then - export fhour=`expr ${fhr} % 6 ` - fi - - export fhr=`expr $fhr + $FHINC` - typeset -Z3 fhr -done - -######################################################## - -msg='ENDED NORMALLY.' -postmsg "$jlogfile" "$msg" - -################## END OF SCRIPT ####################### diff --git a/scripts/exglobal_land_analysis.py b/scripts/exglobal_land_analysis.py new file mode 100755 index 0000000000..70141475b0 --- /dev/null +++ b/scripts/exglobal_land_analysis.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 +# exglobal_land_analysis.py +# This script creates an LandAnalysis class +# and runs the initialize, execute and finalize methods +# for a global Land Snow Depth analysis +import os + +from wxflow import Logger, cast_strdict_as_dtypedict +from pygfs.task.land_analysis import LandAnalysis + +# Initialize root logger +logger = Logger(level=os.environ.get("LOGGING_LEVEL", "DEBUG"), colored_log=True) + + +if __name__ == '__main__': + + # Take configuration from environment and cast it as python dictionary + config = cast_strdict_as_dtypedict(os.environ) + + # Instantiate the land analysis task + anl = LandAnalysis(config) + anl.initialize() + anl.execute() + anl.finalize() diff --git a/scripts/exglobal_prep_land_obs.py b/scripts/exglobal_prep_land_obs.py new file mode 100755 index 0000000000..3594771c8a --- /dev/null +++ b/scripts/exglobal_prep_land_obs.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +# exglobal_land_analysis_prepare.py +# This script creates a LandAnalysis object +# and runs the prepare_GTS and prepare_IMS method +# which perform the pre-processing for GTS and IMS data +import os + +from wxflow import Logger, cast_strdict_as_dtypedict +from pygfs.task.land_analysis import LandAnalysis + + +# Initialize root logger +logger = Logger(level=os.environ.get("LOGGING_LEVEL", "DEBUG"), colored_log=True) + + +if __name__ == '__main__': + + # Take configuration from environment and cast it as python dictionary + config = cast_strdict_as_dtypedict(os.environ) + + # Instantiate the land prepare task + LandAnl = LandAnalysis(config) + LandAnl.prepare_GTS() + if f"{ LandAnl.runtime_config.cyc }" == '18': + LandAnl.prepare_IMS() diff --git a/scripts/exglobal_stage_ic.sh b/scripts/exglobal_stage_ic.sh new file mode 100755 index 0000000000..58b37f3114 --- /dev/null +++ b/scripts/exglobal_stage_ic.sh @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +# Locally scoped variables and functions +# shellcheck disable=SC2153 +GDATE=$(date --utc -d "${PDY} ${cyc} - ${assim_freq} hours" +%Y%m%d%H) +gPDY="${GDATE:0:8}" +gcyc="${GDATE:8:2}" + +MEMDIR_ARRAY=() +if [[ "${RUN:-}" = "gefs" ]]; then + # Populate the member_dirs array based on the value of NMEM_ENS + for ((ii = 0; ii <= "${NMEM_ENS:-0}"; ii++)); do + MEMDIR_ARRAY+=("mem$(printf "%03d" "${ii}")") + done +else + MEMDIR_ARRAY+=("") +fi + +# Initialize return code +err=0 + +error_message() { + echo "FATAL ERROR: Unable to copy ${1} to ${2} (Error code ${3})" +} + +############################################################### +for MEMDIR in "${MEMDIR_ARRAY[@]}"; do + + # Stage atmosphere initial conditions to ROTDIR + if [[ ${EXP_WARM_START:-".false."} = ".true." ]]; then + # Stage the FV3 restarts to ROTDIR (warm start) + RUN=${rCDUMP} YMD=${gPDY} HH=${gcyc} generate_com COM_ATMOS_RESTART_PREV:COM_ATMOS_RESTART_TMPL + [[ ! -d "${COM_ATMOS_RESTART_PREV}" ]] && mkdir -p "${COM_ATMOS_RESTART_PREV}" + for ftype in coupler.res fv_core.res.nc; do + src="${BASE_CPLIC}/${CPL_ATMIC:-}/${PDY}${cyc}/${MEMDIR}/atmos/${PDY}.${cyc}0000.${ftype}" + tgt="${COM_ATMOS_RESTART_PREV}/${PDY}.${cyc}0000.${ftype}" + ${NCP} "${src}" "${tgt}" + rc=$? + ((rc != 0)) && error_message "${src}" "${tgt}" "${rc}" + err=$((err + rc)) + done + for ftype in ca_data fv_core.res fv_srf_wnd.res fv_tracer.res phy_data sfc_data; do + for ((tt = 1; tt <= 6; tt++)); do + src="${BASE_CPLIC}/${CPL_ATMIC:-}/${PDY}${cyc}/${MEMDIR}/atmos/${PDY}.${cyc}0000.${ftype}.tile${tt}.nc" + tgt="${COM_ATMOS_RESTART_PREV}/${PDY}.${cyc}0000.${ftype}.tile${tt}.nc" + ${NCP} "${src}" "${tgt}" + rc=$? + ((rc != 0)) && error_message "${src}" "${tgt}" "${rc}" + err=$((err + rc)) + done + done + else + # Stage the FV3 cold-start initial conditions to ROTDIR + YMD=${PDY} HH=${cyc} generate_com COM_ATMOS_INPUT + [[ ! -d "${COM_ATMOS_INPUT}" ]] && mkdir -p "${COM_ATMOS_INPUT}" + src="${BASE_CPLIC}/${CPL_ATMIC:-}/${PDY}${cyc}/${MEMDIR}/atmos/gfs_ctrl.nc" + tgt="${COM_ATMOS_INPUT}/gfs_ctrl.nc" + ${NCP} "${src}" "${tgt}" + rc=$? + ((rc != 0)) && error_message "${src}" "${tgt}" "${rc}" + err=$((err + rc)) + for ftype in gfs_data sfc_data; do + for ((tt = 1; tt <= 6; tt++)); do + src="${BASE_CPLIC}/${CPL_ATMIC:-}/${PDY}${cyc}/${MEMDIR}/atmos/${ftype}.tile${tt}.nc" + tgt="${COM_ATMOS_INPUT}/${ftype}.tile${tt}.nc" + ${NCP} "${src}" "${tgt}" + rc=$? + ((rc != 0)) && error_message "${src}" "${tgt}" "${rc}" + err=$((err + rc)) + done + done + fi + + # Stage ocean initial conditions to ROTDIR (warm start) + if [[ "${DO_OCN:-}" = "YES" ]]; then + RUN=${rCDUMP} YMD=${gPDY} HH=${gcyc} generate_com COM_OCEAN_RESTART_PREV:COM_OCEAN_RESTART_TMPL + [[ ! -d "${COM_OCEAN_RESTART_PREV}" ]] && mkdir -p "${COM_OCEAN_RESTART_PREV}" + src="${BASE_CPLIC}/${CPL_OCNIC:-}/${PDY}${cyc}/${MEMDIR}/ocean/${PDY}.${cyc}0000.MOM.res.nc" + tgt="${COM_OCEAN_RESTART_PREV}/${PDY}.${cyc}0000.MOM.res.nc" + ${NCP} "${src}" "${tgt}" + rc=$? + ((rc != 0)) && error_message "${src}" "${tgt}" "${rc}" + err=$((err + rc)) + case "${OCNRES}" in + "500" | "100") + # Nothing more to do for these resolutions + ;; + "025" ) + for nn in $(seq 1 3); do + src="${BASE_CPLIC}/${CPL_OCNIC:-}/${PDY}${cyc}/${MEMDIR}/ocean/${PDY}.${cyc}0000.MOM.res_${nn}.nc" + tgt="${COM_OCEAN_RESTART_PREV}/${PDY}.${cyc}0000.MOM.res_${nn}.nc" + ${NCP} "${src}" "${tgt}" + rc=$? + ((rc != 0)) && error_message "${src}" "${tgt}" "${rc}" + err=$((err + rc)) + done + ;; + *) + echo "FATAL ERROR: Unsupported ocean resolution ${OCNRES}" + rc=1 + err=$((err + rc)) + ;; + esac + + # TODO: Do mediator restarts exists in a ATMW configuration? + # TODO: No mediator is presumably involved in an ATMA configuration + if [[ ${EXP_WARM_START:-".false."} = ".true." ]]; then + # Stage the mediator restarts to ROTDIR (warm start/restart the coupled model) + RUN=${rCDUMP} YMD=${gPDY} HH=${gcyc} generate_com COM_MED_RESTART_PREV:COM_MED_RESTART_TMPL + [[ ! -d "${COM_MED_RESTART_PREV}" ]] && mkdir -p "${COM_MED_RESTART_PREV}" + src="${BASE_CPLIC}/${CPL_MEDIC:-}/${PDY}${cyc}/${MEMDIR}/med/${PDY}.${cyc}0000.ufs.cpld.cpl.r.nc" + tgt="${COM_MED_RESTART_PREV}/${PDY}.${cyc}0000.ufs.cpld.cpl.r.nc" + if [[ -f "${src}" ]]; then + ${NCP} "${src}" "${tgt}" + rc=$? + ((rc != 0)) && error_message "${src}" "${tgt}" "${rc}" + err=$((err + rc)) + else + echo "WARNING: No mediator restarts available with warm_start=${EXP_WARM_START}" + fi + fi + + fi + + # Stage ice initial conditions to ROTDIR (warm start) + if [[ "${DO_ICE:-}" = "YES" ]]; then + RUN=${rCDUMP} YMD=${gPDY} HH=${gcyc} generate_com COM_ICE_RESTART_PREV:COM_ICE_RESTART_TMPL + [[ ! -d "${COM_ICE_RESTART_PREV}" ]] && mkdir -p "${COM_ICE_RESTART_PREV}" + src="${BASE_CPLIC}/${CPL_ICEIC:-}/${PDY}${cyc}/${MEMDIR}/ice/${PDY}.${cyc}0000.cice_model.res.nc" + tgt="${COM_ICE_RESTART_PREV}/${PDY}.${cyc}0000.cice_model.res.nc" + ${NCP} "${src}" "${tgt}" + rc=$? + ((rc != 0)) && error_message "${src}" "${tgt}" "${rc}" + err=$((err + rc)) + fi + + # Stage the WW3 initial conditions to ROTDIR (warm start; TODO: these should be placed in $RUN.$gPDY/$gcyc) + if [[ "${DO_WAVE:-}" = "YES" ]]; then + YMD=${PDY} HH=${cyc} generate_com COM_WAVE_RESTART + [[ ! -d "${COM_WAVE_RESTART}" ]] && mkdir -p "${COM_WAVE_RESTART}" + for grdID in ${waveGRD}; do # TODO: check if this is a bash array; if so adjust + src="${BASE_CPLIC}/${CPL_WAVIC:-}/${PDY}${cyc}/${MEMDIR}/wave/${PDY}.${cyc}0000.restart.${grdID}" + tgt="${COM_WAVE_RESTART}/${PDY}.${cyc}0000.restart.${grdID}" + ${NCP} "${src}" "${tgt}" + rc=$? + ((rc != 0)) && error_message "${src}" "${tgt}" "${rc}" + err=$((err + rc)) + done + fi + +done # for MEMDIR in "${MEMDIR_ARRAY[@]}"; do + +############################################################### +# Check for errors and exit if any of the above failed +if [[ "${err}" -ne 0 ]]; then + echo "FATAL ERROR: Unable to copy ICs from ${BASE_CPLIC} to ${ROTDIR}; ABORT!" + exit "${err}" +fi + +############################################################## +# Exit cleanly +exit "${err}" diff --git a/scripts/exgoes_nawips.sh b/scripts/exgoes_nawips.sh deleted file mode 100755 index af97d4074b..0000000000 --- a/scripts/exgoes_nawips.sh +++ /dev/null @@ -1,142 +0,0 @@ -#!/bin/ksh -################################################################### -echo "----------------------------------------------------" -echo "exnawips - convert NCEP GRIB files into GEMPAK Grids" -echo "----------------------------------------------------" -echo "History: Mar 2000 - First implementation of this new script." -echo "S Lilly: May 2008 - add logic to make sure that all of the " -echo " data produced from the restricted ECMWF" -echo " data on the CCS is properly protected." -echo "C. Magee: 10/2013 - swap X and Y for rtgssthr Atl and Pac." -##################################################################### - -set -xa - -cd $DATA - -cp $FIXgempak/g2varswmo2.tbl g2varswmo2.tbl -cp $FIXgempak/g2vcrdwmo2.tbl g2vcrdwmo2.tbl -cp $FIXgempak/g2varsncep1.tbl g2varsncep1.tbl -cp $FIXgempak/g2vcrdncep1.tbl g2vcrdncep1.tbl - -msg="Begin job for $job" -postmsg "$jlogfile" "$msg" - -# -# NAGRIB_TABLE=$FIXgempak/nagrib.tbl -NAGRIB=$GEMEXE/nagrib2 -# - -entry=`grep "^$RUN " $NAGRIB_TABLE | awk 'index($1,"#") != 1 {print $0}'` - -if [ "$entry" != "" ] ; then - cpyfil=`echo $entry | awk 'BEGIN {FS="|"} {print $2}'` - garea=`echo $entry | awk 'BEGIN {FS="|"} {print $3}'` - gbtbls=`echo $entry | awk 'BEGIN {FS="|"} {print $4}'` - maxgrd=`echo $entry | awk 'BEGIN {FS="|"} {print $5}'` - kxky=`echo $entry | awk 'BEGIN {FS="|"} {print $6}'` - grdarea=`echo $entry | awk 'BEGIN {FS="|"} {print $7}'` - proj=`echo $entry | awk 'BEGIN {FS="|"} {print $8}'` - output=`echo $entry | awk 'BEGIN {FS="|"} {print $9}'` -else - cpyfil=gds - garea=dset - gbtbls= - maxgrd=4999 - kxky= - grdarea= - proj= - output=T -fi -pdsext=no - -maxtries=180 -fhcnt=$fstart -while [ $fhcnt -le $fend ] ; do -# if [ $fhcnt -ge 100 ] ; then - typeset -Z3 fhr -# else -# typeset -Z2 fhr -# fi - fhr=$fhcnt - fhcnt3=`expr $fhr % 3` - - fhr3=$fhcnt - typeset -Z3 fhr3 - GRIBIN=$COMIN/${model}.${cycle}.${GRIB}${fhr}${EXT} - GEMGRD=${RUN}_${PDY}${cyc}f${fhr3} - - GRIBIN_chk=$GRIBIN - - icnt=1 - while [ $icnt -lt 1000 ] - do - if [ -r $GRIBIN_chk ] ; then - break - else - sleep 20 - let "icnt=icnt+1" - fi - if [ $icnt -ge $maxtries ] - then - msg="ABORTING after 1 hour of waiting for F$fhr to end." - postmsg "${jlogfile}" "$msg" - export err=7 ; err_chk - exit $err - fi - done - - cp $GRIBIN grib$fhr - - export pgm="nagrib_nc F$fhr" - startmsg - - $NAGRIB << EOF - GBFILE = grib$fhr - INDXFL = - GDOUTF = $GEMGRD - PROJ = $proj - GRDAREA = $grdarea - KXKY = $kxky - MAXGRD = $maxgrd - CPYFIL = $cpyfil - GAREA = $garea - OUTPUT = $output - GBTBLS = $gbtbls - GBDIAG = - PDSEXT = $pdsext - l - r -EOF - export err=$?;err_chk - - $GEMEXE/gpend - - if [ $SENDCOM = "YES" ] ; then - cp $GEMGRD $COMOUT/.$GEMGRD - mv $COMOUT/.$GEMGRD $COMOUT/$GEMGRD - if [ $SENDDBN = "YES" ] ; then - $DBNROOT/bin/dbn_alert MODEL ${DBN_ALERT_TYPE} $job \ - $COMOUT/$GEMGRD - else - echo "##### DBN_ALERT_TYPE is: ${DBN_ALERT_TYPE} #####" - fi - fi - - let fhcnt=fhcnt+finc -done - -##################################################################### -# GOOD RUN -set +x -echo "**************JOB $RUN NAWIPS COMPLETED NORMALLY ON THE IBM" -echo "**************JOB $RUN NAWIPS COMPLETED NORMALLY ON THE IBM" -echo "**************JOB $RUN NAWIPS COMPLETED NORMALLY ON THE IBM" -set -x -##################################################################### - -msg='Job completed normally.' -echo $msg -postmsg "$jlogfile" "$msg" - -############################### END OF SCRIPT ####################### diff --git a/scripts/extropcy_qc_reloc.sh b/scripts/extropcy_qc_reloc.sh deleted file mode 100755 index 5c0d129c19..0000000000 --- a/scripts/extropcy_qc_reloc.sh +++ /dev/null @@ -1,182 +0,0 @@ -############################################################################ -echo "---------------------------------------------------------------------" -echo "extropcy_qc_reloc.sh - Tropical Cyclone QC/Relocation Prcocessing" -echo "---------------------------------------------------------------------" -echo "History: Jun 13 2006 - Original script." -echo " March 2013 - No changes needed for WCOSS transition" -echo " MP_LABELIO default added" -echo " Oct 2013 - Use main USH vars as part of minor pkg cleanup" -############################################################################ - -set -x - -# Make sure we are in the $DATA directory -cd $DATA - -msg="HAS BEGUN on `hostname`" -postmsg "$jlogfile" "$msg" - -cat break > $pgmout - -export COMSP=$COMOUT/${RUN}.${cycle}. - -tmhr=`echo $tmmark|cut -c3-4` -cdate10=` ${NDATE:?} -$tmhr $PDY$cyc` - -NET_uc=$(echo $RUN | tr [a-z] [A-Z]) -tmmark_uc=$(echo $tmmark | tr [a-z] [A-Z]) - -msg="$NET_uc ANALYSIS TIME IS $PDY$cyc" -postmsg "$jlogfile" "$msg" - -iflag=0 -if [ $RUN = ndas ]; then - if [ $DO_RELOCATE = NO ]; then - msg="CENTER PROCESSING TIME FOR NDAS TROPICAL CYCLONE QC IS $cdate10" - postmsg "$jlogfile" "$msg" - msg="Output tcvitals files will be copied forward in time to proper \ -output file directory path locations" - postmsg "$jlogfile" "$msg" - iflag=1 - else - msg="CENTER PROCESSING TIME FOR $tmmark_uc NDAS TROPICAL CYCLONE \ -RELOCATION IS $cdate10" - postmsg "$jlogfile" "$msg" - fi -else - msg="CENTER PROCESSING TIME FOR $tmmark_uc $NET_uc TROPICAL CYCLONE QC/\ -RELOCATION IS $cdate10" - postmsg "$jlogfile" "$msg" -fi - - -if [ "$PROCESS_TROPCY" = 'YES' ]; then - -#################################### -#################################### -# QC tcvitals for tropical cyclones -#################################### -#################################### - -#echo $PDY - - ${USHSYND:-$HOMEgfs/ush}/syndat_qctropcy.sh $cdate10 - errsc=$? - if [ "$errsc" -ne '0' ]; then - msg="syndat_qctropcy.sh failed. exit" - postmsg "$jlogfile" "$msg" - exit $errsc - fi - - - cd $COMOUT - pwd - set +x - ls -ltr *syndata* - set -x - cd $ARCHSYND - pwd;ls -ltr - cat syndat_dateck - cd $HOMENHC - pwd;ls -ltr - cd $DATA - -else - -# Copy null files into "syndata.tcvitals" and "jtwc-fnoc.tcvitals" -# (Note: Only do so if files don't already exist - need because in NDAS this -# script is run twice, first time with DO_RELOCATE=NO, copying these -# files, and second time with PROCESS_TROPCY=NO and thus coming here - -# don't want to wipe out these files) -# - - [ ! -s ${COMSP}syndata.tcvitals.$tmmark ] && \ - cp /dev/null ${COMSP}syndata.tcvitals.$tmmark - [ ! -s ${COMSP}jtwc-fnoc.tcvitals.$tmmark ] && \ - cp /dev/null ${COMSP}jtwc-fnoc.tcvitals.$tmmark - -# endif loop $PROCESS_TROPCY -fi - - -if [ "$DO_RELOCATE" = 'YES' ]; then - -################################################### -################################################### -# Relocate tropical cyclones in global sigma guess -################################################### -################################################### - - export MP_LABELIO=${MP_LABELIO:-yes} - $USHRELO/tropcy_relocate.sh $cdate10 - errsc=$? - - [ "$errsc" -ne '0' ] && exit $errsc - - -# save global sigma guess file(s) possibly updated by tropical cyclone -# relocation processing in COMSP path - qual_last=".$tmmark" # need this because gfs and gdas don't add $tmmark - # qualifer to end of output sigma guess files - [ $RUN = gfs -o $RUN = gdas -o $NET = cfs ] && qual_last="" - - if [ $BKGFREQ -eq 1 ]; then - [ -s sgm3prep ] && cp sgm3prep ${COMSP}sgm3prep${qual_last} - [ -s sgm2prep ] && cp sgm2prep ${COMSP}sgm2prep${qual_last} - [ -s sgm1prep ] && cp sgm1prep ${COMSP}sgm1prep${qual_last} - [ -s sgesprep ] && cp sgesprep ${COMSP}sgesprep${qual_last} - [ -s sgp1prep ] && cp sgp1prep ${COMSP}sgp1prep${qual_last} - [ -s sgp2prep ] && cp sgp2prep ${COMSP}sgp2prep${qual_last} - [ -s sgp3prep ] && cp sgp3prep ${COMSP}sgp3prep${qual_last} - elif [ $BKGFREQ -eq 3 ]; then - [ -s sgm3prep ] && cp sgm3prep ${COMSP}sgm3prep${qual_last} - [ -s sgesprep ] && cp sgesprep ${COMSP}sgesprep${qual_last} - [ -s sgp3prep ] && cp sgp3prep ${COMSP}sgp3prep${qual_last} - fi - -# The existence of ${COMSP}tropcy_relocation_status.$tmmark file will tell the -# subsequent PREP processing that RELOCATION processing occurred, if this file -# does not already exist at this point, echo "RECORDS PROCESSED" into it to -# further tell PREP processing that records were processed by relocation and -# the global sigma guess was modified by tropical cyclone relocation -# Note: If ${COMSP}tropcy_relocation_status.$tmmark already exists at this -# point it means that it contains the string "NO RECORDS to process" -# and was created by the child script tropcy_relocate.sh because records -# were not processed by relocation and the global sigma guess was NOT -# modified by tropical cyclone relocation (because no tcvitals records -# were found in the relocation step) -# ---------------------------------------------------------------------------- - - [ ! -s ${COMSP}tropcy_relocation_status.$tmmark ] && \ - echo "RECORDS PROCESSED" > ${COMSP}tropcy_relocation_status.$tmmark - -# endif loop $DO_RELOCATE -fi - - -######################################################## - -# GOOD RUN -set +x -echo " " -echo " ****** PROCESSING COMPLETED NORMALLY" -echo " ****** PROCESSING COMPLETED NORMALLY" -echo " ****** PROCESSING COMPLETED NORMALLY" -echo " ****** PROCESSING COMPLETED NORMALLY" -echo " " -set -x - - -# save standard output -cat break $pgmout break > allout -cat allout -# rm allout - -sleep 10 - -if [ $iflag -eq 0 ]; then - msg='ENDED NORMALLY.' - postmsg "$jlogfile" "$msg" -fi - -################## END OF SCRIPT ####################### diff --git a/scripts/run_gfsmos_master.sh.cray b/scripts/run_gfsmos_master.sh.cray deleted file mode 100755 index 66386bb9e0..0000000000 --- a/scripts/run_gfsmos_master.sh.cray +++ /dev/null @@ -1,330 +0,0 @@ -#!/bin/sh -####################################################################### -# run_gfsmos.sh -# -# History: -# 03/29/13 Scallion Created (Adapted from Eric Engle's -# "master" scripts) -# 12/03/13 Scallion Added ptype/wxgrid -# 04/18/18 J Wagner Set up to run GFSMOS after GFS FV3 retros -# -# Purpose: -# To run the GFS-MOS operational suite -# -####################################################################### -set -x - -if (( $# > 1 )); then - echo "Incorrect number of arguments." - echo "Syntax: $0 [PDYCYC (optional)]" - echo "Exiting..." - exit 1 -fi - -####################################################################### -# Source bash_profile to run with proper modules on cron -####################################################################### -#. ~/.profile - -####################################################################### -# Set global variables neede in the run script and/or each individual -# job script. -####################################################################### - - -. $MODULESHOME/init/sh 2>/dev/null -module load prod_envir/1.1.0 -module load cfp-intel-sandybridge -module load craype-hugepages2M -export FORT_BUFFERED=TRUE -export KMP_AFFINITY=disabled -export envir=prod -#export QUEUE=dev - -#------------------ -export SENDCOM_SAVE=$SENDCOM -export SENDCOM=YES -#------------------ - -dateIn=$1 -export PDY=`echo $dateIn | cut -c 1-8` -export cyc=`echo $dateIn | cut -c 9-10` -export prevday=`$NDATE -24 ${PDY}00 | cut -c1-8` - -# -# VARIABLES TO SET -# PTMPROOT and STMPROOT should be set to the user's directories -# COMDATEROOT defined by module prod_util -#export PTMPROOT=/gpfs/hps3/ptmp/$USER -export PTMPROOT=$ROTDIR/gfsmos.$PDY -#export STMPROOT=/gpfs/hps3/stmp/$USER -export STMPROOT=$RUNDIR/gfsmos.$PDY -export DATAROOT=$STMPROOT -export MODELROOT=$NWROOThps -export MODELDIR=$MODELROOT/gfsmos.v5.0.6 -export CODEDIR=$MODELROOT/mos_shared.v2.6.1 - -if [[ $SITE == "SURGE" ]]; then - export siteprefix=g -elif [[ $SITE == "LUNA" ]]; then - export siteprefix=t -else - echo "SITE $SITE not recognized" - exit -fi - -export range=${range:-"both"} -export skipmodel=n -export skipprep=n -export stnonly=Y -export cycle="t${cyc}z" -export pid="gfs.$$" -export dailylog=$PTMPROOT/dailylog/log.$PDY -export jlogfile=$dailylog/jlogfile_gfsmos -mkdir -p $dailylog - -export SENDDBN=NO -export GET_IOPROFILE=NO - -# Specify Execution Areas -export HOMEmdl=$MODELDIR -export HOMEcode=$CODEDIR - -if [ ! -d $HOMEmdl ]; then - echo "$HOMEmdl does not exist" - exit 1 -fi - -if [ ! -d $HOMEcode ]; then - echo "$HOMEcode does not exist" - exit 1 -fi - -# Load modules -module load prod_util - -module unload grib_util/1.0.3 -module use /usrx/local/nceplibs/modulefiles -module load grib_util/1.1.0 - -# VARIABLES TO SET -# GFSDIR should be set to the directory containing the input GFS FV3 data -# COMOUT should be set to the directory where the GFSMOS output files will be saved -#export GFSDIR=/gpfs/hps3/ptmp/emc.glopara/fv3fy18retro2 -export GFSDIR=$ROTDIR -export COMINgfs=$GFSDIR/gfs.${PDY}/${cyc} -export COMOUT=$ROTDIR/gfsmos.$PDY - -if [[ ! -d $PTMPROOT/qprod ]]; then - mkdir -p $PTMPROOT/qprod -fi - -if [[ ! -d $COMOUT ]]; then - mkdir -p $COMOUT -fi - -export PCOM=$COMOUT - -if [[ ! -d $PCOM ]]; then - mkdir -p $PCOM -fi - - -# NOTE: On WCOSS_C the directory from which bsub -# is executed must exist when the submitted job -# begins. Otherwise, the submitted job fails -# with TERM_CWD_NOTEXIST error. - -mkdir -p $DATAROOT -cd $DATAROOT - - -######################################################################## -# JGFSMOS_PREP47 -######################################################################## -export job=gfsmos_prep_${cyc}_${pid} -export COMIN=$GFSDIR -jobCard=$HOMEmdl/jobs/JGFSMOS_PREP -# Define DATA and create directory -export DATA=$DATAROOT/gfsmos_prep_${cyc} -export logfile=$dailylog/$job.out -export out_dir=$dailylog - -export PTILE=7 -export NTASK=7 -export OMP_NUM_THREADS=1 - -bsub -J $job \ - -o $logfile \ - -q $QUEUE \ - -W 2:00 \ - -M 2500 \ - -P $ACCOUNT \ - -extsched 'CRAYLINUX[]' \ - -R '1*{select[craylinux && !vnode]} + 24*{select[craylinux && vnode]span[ptile=24]}' \ - $jobCard - -######################################################################## -# JGFSMOS_FORECAST -######################################################################## -if [ $prevday -lt `date -u +%Y%m%d -d "48 hours ago"` ]; then - export COMINhourly=$PTMPROOT/hourly.$PDY - if [[ ! -d $COMINhourly ]]; then - mkdir -p $COMINhourly - fi - \cp /gpfs/${siteprefix}d1/mdl/mdlstat/save/rotate/hry/${PDY}03 $COMINhourly/sfctbl.03 - \cp /gpfs/${siteprefix}d1/mdl/mdlstat/save/rotate/hry/${PDY}09 $COMINhourly/sfctbl.09 - \cp /gpfs/${siteprefix}d1/mdl/mdlstat/save/rotate/hry/${PDY}15 $COMINhourly/sfctbl.15 - \cp /gpfs/${siteprefix}d1/mdl/mdlstat/save/rotate/hry/${PDY}21 $COMINhourly/sfctbl.21 -fi - -# -# Change COMIN to get files from user's PTMP "qprod" area -export COMIN=$COMOUT -# -export job=gfsmos_fcst_${cyc}_${pid} -jobCard=$HOMEmdl/jobs/JGFSMOS_FORECAST -export DATA=$DATAROOT/gfsmos_fcst_${cyc} -export logfile=$dailylog/$job.out -export out_dir=$dailylog -# Set dependencies -deps="done(gfsmos_prep_${cyc}_${pid})" -complist="metar cooprfcmeso tstms" -complist2="" -export PTILE=3 -export NTASK=3 -export OMP_NUM_THREADS=1 - -bsub -J ${job} -oo $logfile -q ${QUEUE} -P $ACCOUNT \ - -W 2:30 -M 2000 \ - -extsched 'CRAYLINUX[]' \ - -R '1*{select[craylinux && !vnode]} + 72*{select[craylinux && vnode]span[ptile=24]}' \ - -w "$deps" \ - $jobCard -# -######################################################################## -# JGFSMOS_PRDGEN -######################################################################## -jobCard=$HOMEmdl/jobs/JGFSMOS_PRDGEN -export job=gfsmos_prdgen_${cyc}_${pid} -# Change COMIN back to COMOUT -export COMIN=$COMOUT -# Define DATA and create directory -export DATA=$DATAROOT/gfsmos_prdgen_${cyc} -export logfile=$dailylog/$job.out -export out_dir=$dailylog -# Set dependencies -deps="done(gfsmos_fcst_${cyc}_${pid})" -nodes='1*{select[craylinux && !vnode]} + 24*{select[craylinux && vnode]span[ptile=24]}' -export PTILE=1 -export NTASK=1 -export OMP_NUM_THREADS=1 -# -bsub -J ${job} -oo $logfile -q ${QUEUE} -P $ACCOUNT \ - -W 1:00 -M 2000 \ - -extsched 'CRAYLINUX[]' \ - -R "$nodes" \ - -w "$deps" \ - $jobCard -# -######################################################################## -# EXTENDED-RANGE JOBS -######################################################################## - -######################################################################## -# JGFSMOS_EXT_PREP47 -######################################################################## -export job=gfsmos_extprep_${cyc}_${pid} -export COMIN=$GFSDIR -jobCard=$HOMEmdl/jobs/JGFSMOS_EXT_PREP -# Define DATA and create directory -export DATA=$DATAROOT/gfsmos_extprep_${cyc} -export logfile=$dailylog/$job.out -export out_dir=$dailylog - -export PTILE=5 -export NTASK=10 -export OMP_NUM_THREADS=1 - -bsub -J $job \ - -o $logfile \ - -q $QUEUE \ - -W 2:00 \ - -M 2500 \ - -P $ACCOUNT \ - -extsched 'CRAYLINUX[]' \ - -R '1*{select[craylinux && !vnode]} + 48*{select[craylinux && vnode]span[ptile=24]}' \ - $jobCard - - -# Skip EXT_FORECAST for 06/18 -if [ $cyc -eq 00 -o $cyc -eq 12 ]; then -######################################################################## -# JGFSMOS_EXT_FORECAST -######################################################################## -# -# Change COMIN to get files from user's PTMP "qprod" area -export COMIN=$COMOUT -# -export job=gfsmos_extfcst_${cyc}_${pid} -jobCard=$HOMEmdl/jobs/JGFSMOS_EXT_FORECAST -export DATA=$DATAROOT/gfsmos_extfcst_${cyc} -export logfile=$dailylog/$job.out -export out_dir=$dailylog -# Set dependencies -if [[ "$skipprep" != "y" && "$range" == "both" ]]; then - deps="done(gfsmos_extprep_${cyc}_${pid}) && done(gfsmos_prdgen_${cyc}_${pid})" -elif [[ "$skipprep" != "y" && "$range" == "ext" ]]; then - deps="done(gfsmos_extprep_${cyc}_${pid})" -elif [[ "$skipprep" == "y" && "$range" == "ext" ]]; then - deps="" -else - deps="done(gfsmos_prdgen_${cyc}_${pid})" -fi -# -export PTILE=4 -export NTASK=10 -export OMP_NUM_THREADS=1 -# -bsub -J ${job} -oo $logfile -q $QUEUE -P $ACCOUNT \ - -W 4:00 -M 2000 \ - -extsched 'CRAYLINUX[]' \ - -R '1*{select[craylinux && !vnode]} + 72*{select[craylinux && vnode]span[ptile=24]}' \ - -w "$deps" \ - $jobCard -# -fi #endif for skipping 06/18 ext_fcst -######################################################################### -## JGFSMOS_EXT_PRDGEN -######################################################################### -jobCard=$HOMEmdl/jobs/JGFSMOS_EXT_PRDGEN -export job=gfsmos_extprdgen_${cyc}_${pid} -# Change COMIN back to COMOUT -export COMIN=$COMOUT -# Define DATA and create directory -export DATA=$DATAROOT/gfsmos_extprdgen_${cyc} -export logfile=$dailylog/$job.out -export out_dir=$dailylog -# Set dependencies -if [[ "$cyc" == "06" || "$cyc" == "18" ]]; then - deps="done(gfsmos_prdgen_${cyc}_${pid})" -elif [[ "$range" == "both" ]]; then - deps="done(gfsmos_extfcst_${cyc}_${pid}) && done(gfsmos_prdgen_${cyc}_${pid})" -else - deps="done(gfsmos_extfcst_${cyc}_${pid})" -fi -nodes='1*{select[craylinux && !vnode]} + 24*{select[craylinux && vnode]span[ptile=24]}' -export PTILE=1 -export NTASK=1 -export OMP_NUM_THREADS=1 - -bsub -J ${job} -oo $logfile -q ${QUEUE} -P $ACCOUNT \ - -W 2:00 -M 2000 \ - -extsched 'CRAYLINUX[]' \ - -R "$nodes" \ - -w "$deps" \ - $jobCard - - -#--------------------- -export SENDCOM=$SENDCOM_SAVE diff --git a/scripts/run_gfsmos_master.sh.dell b/scripts/run_gfsmos_master.sh.dell deleted file mode 100755 index 32264146c1..0000000000 --- a/scripts/run_gfsmos_master.sh.dell +++ /dev/null @@ -1,765 +0,0 @@ -#!/bin/sh -####################################################################### -# run_gfsmos.sh -# -# History: -# 03/29/13 Scallion Created (Adapted from Eric Engle's -# "master" scripts) -# 12/03/13 Scallion Added ptype/wxgrid -# -# Purpose: -# To run the GFS-MOS operational suite -# -####################################################################### -set -x - -if (( $# > 1 )); then - echo "Incorrect number of arguments." - echo "Syntax: $0 [PDYCYC (optional)]" - echo "Exiting..." - exit 1 -fi - -##export PATH=./:$PATH - -####################################################################### -# Only run on the dev machine -####################################################################### -#/u/Scott.Scallion/bin/run-on-dev.sh -#[[ $? -eq 1 ]] && exit 1 - -####################################################################### -# Source bash_profile to run with proper modules on cron -####################################################################### -#elim . ~/.bash_profile 1> /dev/null 2>&1 -#. ~/.bash_profile - -####################################################################### -# Check the host to determine whether tide or gyre is prod -####################################################################### -#chkhost=`hostname | cut -c1` -if [[ $SITE == "GYRE" ]] || [[ $SITE == "SURGE" ]] || [[ $SITE == "VENUS" ]]; then - gort="g" -elif [[ $SITE == "TIDE" ]] || [[ $SITE == "LUNA" ]] || [[ $SITE == "MARS" ]]; then - gort="t" -fi - -####################################################################### -# Set global variables neede in the run script and/or each individual -# job script. -####################################################################### -. $MODULESHOME/init/bash -#module purge 2>/dev/null -module load EnvVars/1.0.2 2>/dev/null -module load ips/18.0.1.163 2>/dev/null -module load impi/18.0.1 2>/dev/null -module load lsf/10.1 2>/dev/null -module load prod_envir/1.0.3 2>/dev/null -module load prod_util/1.1.4 2>/dev/null -module load CFP/2.0.1 2>/dev/null - -module use -a /gpfs/dell1/nco/ops/nwpara/modulefiles/compiler_prod/ips/18.0.1 -module load grib_util/1.1.1 2>/dev/null - -export FORT_BUFFERED=TRUE -export KMP_AFFINITY=disabled -export envir=prod -export RUN_ENVIR=${RUN_ENVIR:-""} -#export QUEUE=dev - -#------------------ -export SENDCOM=YES -export SENDCOM_SAVE=$SENDCOM -#------------------ - -#-------------------------------- -# COMDATEROOT defined by module prod_util -##export PTMPROOT=/gpfs/dell2/ptmp/$USER -##export STMPROOT=/gpfs/dell2/stmp/$USER -##export MODELROOT=/gpfs/dell2/mdl/mdlstat/noscrub/usr/$USER/nwprod -##export MODELDIR=$MODELROOT/gfsmos.v5.0.6 -##export CODEDIR=$MODELROOT/mos_shared.v2.6.1 - -export PTMPROOT=$ROTDIR/gfsmos.$PDY -export STMPROOT=$RUNDIR/gfsmos.$PDY -export DATAROOT=$STMPROOT -##export MODELROOT=/gpfs/dell2/emc/modeling/noscrub/emc.glopara/git/gfsmos -export MODELROOT=/gpfs/dell2/mdl/mdlstat/noscrub/usr/Scott.Scallion/gfsv16 -#export MODELDIR=$MODELROOT/gfsmos.v5.2.0.1 -export MODELDIR=$MODELROOT/gfsmos.v5.2.0.1-restructure -export CODEDIR=/gpfs/dell1/nco/ops/nwpara/mos_shared.v2.6.5 -#-------------------------------- - -#-------------------------------- -##export PDY=20180419 -##export PDY=`date -u +%Y%m%d` -##export prevday=`date -u --date="${PDY} 0000 UTC 24 hours ago" +%Y%m%d` - -dateIn=$1 -#if [ $REALTIME = "YES" ]; then -# GDATE=`$NDATE -24 $dateIn` -# dateIn=$GDATE -#fi -export PDY=`echo $dateIn | cut -c 1-8` -export cyc=`echo $dateIn | cut -c 9-10` -export prevday=`$NDATE -24 ${PDY}00 | cut -c1-8` -#-------------------------------- - - -#-------------------------------- -##let hour=`date -u +"%-H"` -##if [[ $hour -ge 4 && $hour -lt 10 ]]; then -## export cyc=00 -## export range=both -##elif [[ $hour -ge 10 && $hour -lt 16 ]]; then -## export cyc=06 -## export range=both -##elif [[ $hour -ge 16 && $hour -lt 22 ]]; then -## export cyc=12 -## export range=both -##elif [[ $hour -ge 22 && $hour -le 23 ]]; then -## export cyc=18 -## export range=both -##else -## export cyc=18 -## export PDY=$prevday -## export range=both -##fi -## -##cyc_list="00 06 12 18" -##if [[ $# == 1 ]] && [[ $cyc_list =~ $1 ]]; then -## export cyc=$1 -## if [ "$cyc" == "00" -o "$cyc" == "12" ]; then -## export range=both -## else -## export range=both -## fi -##elif [[ $# == 1 ]]; then -## echo "$1 is not a valid cycle (choose 00 or 12)" -## exit 1 -##fi - -# ERIC ENGLE 05/30/2018 - PATCH FOR FV3GFS WINTER 17/18 PARALLEL -export range=${range:-"both"} - -#if [ $cyc -eq 00 -o $cyc -eq 12 ]; then -# if [ $cyc -eq 00 ]; then -# export range=both -# else -# export range=short -# fi -# ERIC ENGLE 05/30/2018 - PATCH FOR FV3GFS WINTER 17/18 PARALLEL -export stnonly='Y' -export skipmodel=n -export skipprep=n -export cycle="t${cyc}z" -export pid="gfs_qprod.$$" -export dailylog=$PTMPROOT/dailylog/log.$PDY -export jlogfile=$dailylog/jlogfile_gfsmos -mkdir -p $dailylog - -export SENDDBN=NO -export SENDDBN_NTC=NO -export GET_IOPROFILE=NO - -# Specify Execution Areas -export HOMEmdl=$MODELDIR -export HOMEcode=$CODEDIR -#export utilscript=/gpfs/hps/mdl/mdlstat/noscrub/usr/Scott.Scallion/ush - -if [ ! -d $HOMEmdl ]; then - echo "$HOMEmdl does not exist" - exit 1 -fi - -if [ ! -d $HOMEcode ]; then - echo "$HOMEcode does not exist" - exit 1 -fi - - -#------------------------------------- -# Define COMOUT (COMIN will vary by job) -#export GFSDIR=$COMROOThps/gfs/prod/gfs.$PDY -##export GFSDIR=$COMROOThps/gfs/prod/gfs.$PDY -##export COMINgfs=$GFSDIR -##export COMOUT=$PTMPROOT/qprod/gfsmos.$PDY - -export GFSDIR=$COMROOT/gfs/prod/gfs.${PDY} -if [[ "$RUN_ENVIR" = "emc" ]] ; then - export GFSDIR=$ROTDIR/gfs.${PDY} -fi -export COMINgfs=$GFSDIR -export COMOUT=$ROTDIR/gfsmos.$PDY - -#export COMINm1=$PTMPROOT/gfsmos.$prevday -#export COMINm1=$PTMPROOT/qprod/gfsmos_gmos_pre-nbmv2.$prevday -#export COMINm1=$PTMPROOT/qprod/gfsmos.$prevday - -if [[ ! -d $PTMPROOT/qprod ]]; then - mkdir -p $PTMPROOT/qprod -fi - -if [[ ! -d $COMOUT ]]; then - mkdir -p $COMOUT -fi - -export COMOUTwmo=$PTMPROOT/wmo - -if [[ ! -d $COMOUTwmo ]]; then - mkdir -p $COMOUTwmo -fi - - -# NOTE: On WCOSS_DELL_P3 the directory from which bsub -# is executed must exist when the submitted job -# begins. Otherwise, the submitted job fails -# with TERM_CWD_NOTEXIST error. - -mkdir -p $DATAROOT -cd $DATAROOT - - -if [ "$range" == "short" -o "$range" == "both" ]; then -######################################################################## -######################################################################## -# SHORT-RANGE JOBS -######################################################################## -######################################################################## - -######################################################################## -# Wait for 1 degree model data -######################################################################## -##if [ "$skipmodel" != "y" ]; then -##let attempts=1 -##while [[ $attempts -le 120 ]] -##do -## if [[ -f $GFSDIR/gfs.$cycle.pgrb2.1p00.f096 ]]; then -## echo "Model file found. Proceeding..." -## break -## else -## if [[ $attempts -le 60 ]]; then -## sleep 60 -## else -## sleep 180 -## fi -## attempts=$((attempts+1)) -## fi -##done -## -##if [[ $attempts -gt 120 ]]; then -## echo "Waited 4 hours for model file, but it did not appear." -## echo "Exiting..." -## exit 1 -##fi -## -##fi #endif for skipmodel - -######################################################################## -# Wait for 1/4 degree model data -######################################################################## -##if [ "$skipmodel" != "y" ]; then -##let attempts=1 -##while [[ $attempts -le 120 ]] -##do -## if [[ -f $GFSDIR/gfs.$cycle.pgrb2.0p25.f096 ]]; then -## echo "Model file found. Proceeding..." -## break -## else -## if [[ $attempts -le 60 ]]; then -## sleep 60 -## else -## sleep 180 -## fi -## attempts=$((attempts+1)) -## fi -##done - -##if [[ $attempts -gt 120 ]]; then -## echo "Waited 4 hours for model file, but it did not appear." -## echo "Exiting..." -## exit 1 -##fi -## -##fi #endif for skipmodel - -######################################################################## -# Wait for 1.0 degree GFS model files before running (Pacific MOS) -######################################################################## -##if [ "$skipmodel" != "y" ]; then -##let attempts=1 -##while [[ $attempts -le 120 ]] -##do -## if [[ -f $GFSDIR/gfs.$cycle.pgrb2.1p00.f096 ]]; then -## echo "1.0 degree model file found. Proceeding..." -## break -## else -## if [[ $attempts -le 60 ]]; then -## sleep 60 -## else -## sleep 180 -## fi -## attempts=$((attempts+1)) -## fi -##done -## -##if [[ $attempts -gt 120 ]]; then -## echo "Waited 4 hours for model file, but it did not appear." -## echo "Exiting..." -## exit 1 -##fi -## -##fi #endif for skipmodel - - -######################################################################## -# JGFSMOS_PREP47 -######################################################################## -if [[ "$skipprep" != "y" ]]; then - export job=gfsmos_prep_${cyc}_${pid} - export COMIN=$GFSDIR - jobCard=$HOMEmdl/jobs/JGFSMOS_STN_PREP -# Define DATA and create directory - export DATA=$STMPROOT/qprod/gfsmos_prep_${cyc} - export logfile=$dailylog/$job.out - export out_dir=$dailylog - - export NTASK=3 - export PTILE=3 - export OMP_NUM_THREADS=1 - - bsub -J $job \ - -o $logfile \ - -q $QUEUE \ - -x \ - -n $NTASK \ - -R "span[ptile=$PTILE]" \ - -W 0:25 \ - -P $ACCOUNT \ - $jobCard - -fi #end for skipprep - -######################################################################## -# JGFSMOS_FORECAST -######################################################################## -if [[ ! -d /gpfs/dell1/nco/ops/com/mos/prod/hry_mos.$PDY ]]; then - export ROTATE=/gpfs/dell2/mdl/mdlstat/noscrub/rotate - export COMINhry_mos=$PTMPROOT/hourly.$PDY - if [[ ! -d $COMINhry_mos ]]; then - mkdir -p $COMINhry_mos - fi - \cp $ROTATE/hry/${PDY}03 $COMINhry_mos/sfctbl.03 - \cp $ROTATE/hry/${PDY}09 $COMINhry_mos/sfctbl.09 - \cp $ROTATE/hry/${PDY}15 $COMINhry_mos/sfctbl.15 - \cp $ROTATE/hry/${PDY}21 $COMINhry_mos/sfctbl.21 -fi - -# Change COMIN to get files from user's PTMP "qprod" area -export COMIN=$COMOUT - -export job=gfsmos_fcst_${cyc}_${pid} -jobCard=$HOMEmdl/jobs/JGFSMOS_STN_FORECAST -export DATA=$STMPROOT/qprod/gfsmos_fcst_${cyc} -export logfile=$dailylog/$job.out -export out_dir=$dailylog -# Set dependencies -if [[ "$skipprep" != "y" ]]; then - deps="done(gfsmos_prep_${cyc}_${pid})" -else - deps="" -fi -if [[ $cyc == "00" || $cyc == "12" ]] && [[ "$stnonly" != "Y" ]]; then - complist="metar pac cooprfcmeso goe higoe akgoe tstms" - complist2="copopo3 coptype akpopo3 akptype" -else - complist="metar cooprfcmeso tstms" - complist2="" -fi - -if [[ $cyc == "00" || $cyc == "12" ]] && [[ "$stnonly" != "Y" ]]; then - export NTASK=11 - export PTILE=1 - export OMP_NUM_THREADS=1 -elif [[ $cyc == "00" || $cyc == "12" ]] && [[ "$stnonly" == "Y" ]]; then - export NTASK=5 - export PTILE=5 - export OMP_NUM_THREADS=1 -else - export NTASK=4 - export PTILE=4 - export OMP_NUM_THREADS=1 -fi - -bsub -J ${job} \ - -o $logfile \ - -q ${QUEUE} \ - -x \ - -n $NTASK \ - -R "span[ptile=$PTILE]" \ - -W 0:20 \ - -P $ACCOUNT \ - -w "$deps" \ - $jobCard - -######################################################################## -# JGFSMOS_PRDGEN -######################################################################## -jobCard=$HOMEmdl/jobs/JGFSMOS_STN_PRDGEN -export job=gfsmos_prdgen_${cyc}_${pid} -# Change COMIN back to COMOUT -export COMIN=$COMOUT -# Define DATA and create directory -export DATA=$STMPROOT/qprod/gfsmos_prdgen_${cyc} -export logfile=$dailylog/$job.out -export out_dir=$dailylog -# Set dependencies -deps="done(gfsmos_fcst_${cyc}_${pid})" -# Set Nodes -if [ $cyc -eq 00 -o $cyc -eq 12 ] && [[ "$stnonly" != "Y" ]]; then - #nodes='1*{select[craylinux && !vnode]} + 168*{select[craylinux && vnode]span[ptile=24]}' - export NTASK=1 - export PTILE=1 - export OMP_NUM_THREADS=20 -else - #nodes='1*{select[craylinux && !vnode]} + 24*{select[craylinux && vnode]span[ptile=24]}' - export NTASK=1 - export PTILE=1 - export OMP_NUM_THREADS=1 -fi - -bsub -J ${job} \ - -o $logfile \ - -q ${QUEUE} \ - -x \ - -n $NTASK \ - -R "span[ptile=$PTILE]" \ - -W 0:30 \ - -P $ACCOUNT \ - -w "$deps" \ - $jobCard - -######################################################################## -# JGFSMOS_WX_PRDGEN (00z and 12z only) -######################################################################## -#if [ $cyc -eq 00 -o $cyc -eq 12 ]; then -# jobCard=$HOMEmdl/jobs/JGFSMOS_WX_PRDGEN -# export job=gfsmos_wx_prdgen_${cyc}_${pid} -# # Change COMIN back to COMOUT -# export COMIN=$COMOUT -# # Define DATA and create directory -# export DATA=$STMPROOT/qprod/gfsmos_wx_prdgen_${cyc} -# export logfile=$dailylog/$job.out -# export out_dir=$dailylog -# # Set dependencies -# deps="done(gfsmos_prdgen_${cyc}_${pid})" -# -# export NTASK=2 -# export PTILE=1 -# export OMP_NUM_THREADS=20 -# -# #bsub -J ${job} -oo $logfile -q ${QUEUE} -P MDLST-T2O \ -# # -W 1:00 -M 1000 \ -# # -extsched 'CRAYLINUX[]' \ -# # -R '1*{select[craylinux && !vnode]} + 48*{select[craylinux && vnode]span[ptile=24]}' \ -# # -w "$deps" \ -# # $jobCard -# -# bsub -J ${job} \ -# -o $logfile \ -# -q ${QUEUE} -x \ -# -n $NTASK \ -# -R "span[ptile=$PTILE]" \ -# -W 1:00 \ -# -M 3000 \ -# -P $ACCOUNT \ -# -w "$deps" \ -# $jobCard -#fi - -fi #endif short - -######################################################################## -######################################################################## -# EXTENDED-RANGE JOBS -######################################################################## -######################################################################## - -if [ "$range" == "ext" -o "$range" == "both" ]; then - -######################################################################## -# Wait for 1/4 degree model data -######################################################################## -#if [ "$skipmodel" != "y" ]; then -#let attempts=1 -#proj_list=`seq -f %03g 252 12 384` -#for tau in $proj_list -#do -# while [[ $attempts -le 120 ]] -# do -# if [[ -f $GFSDIR/gfs.$cycle.pgrb2.0p25.f${tau} && -f $GFSDIR/gfs.$cycle.pgrb2.0p50.f${tau} ]]; then -# echo "Model file found. Proceeding to next..." -# break -# else -# if [[ $attempts -le 60 ]]; then -# sleep 60 -# else -# sleep 180 -# fi -# attempts=$((attempts+1)) -# fi -# done -#done -# -#if [[ $attempts -gt 120 ]]; then -# echo "Waited 4 hours for model file, but it did not appear." -# echo "Exiting..." -# exit 1 -#fi - -#fi #endif for skipmodel - -######################################################################## -# Wait for 1.0/2.5 degree GFS model files before running (Pacific GFS) -######################################################################## -#if [ "$skipmodel" != "y" ]; then -#let attempts1deg=1 -#proj_list=`seq -f %03g 204 12 384` -#for tau in $proj_list -#do -# while [[ $attempts1deg -le 120 ]] -# do -## ERIC ENGLE 05/30/2018 - PATCH FOR FV3GFS WINTER 17/18 PARALLEL -# #if [[ -f $GFSDIR/gfs.$cycle.pgrb2.1p00.f384 && -f $GFSDIR/gfs.$cycle.pgrb2.2p50.f240 ]]; then -# if [ $cyc -eq 00 ]; then -# waitfile=$GFSDIR/gfs.$cycle.pgrb2.1p00.f384 -# else -# waitfile=$GFSDIR/gfs.$cycle.pgrb2.1p00.f180 -# fi -# if [[ -f $waitfile ]]; then -## ERIC ENGLE 05/30/2018 - PATCH FOR FV3GFS WINTER 17/18 PARALLEL -# #echo "1.0/2.5 degree model files found. Proceeding to next..." -# echo "1.0 degree model files found. Proceeding to next..." -# break -# else -# if [[ $attempts1deg -le 60 ]]; then -# sleep 60 -# else -# sleep 180 -# fi -# attempts1deg=$((aattempts1deg+1)) -# fi -# done -#done -# -#if [[ $attempts1deg -gt 120 ]]; then -# echo "Waited 4 hours for 1.0 degree model file, but it did not appear." -# echo "Exiting..." -# exit 1 -#fi - -#fi #endif for skipmodel - -######################################################################## -# JGFSMOS_EXT_PREP47 -######################################################################## -if [[ "$skipprep" != "y" ]]; then - export job=gfsmos_extprep_${cyc}_${pid} - export COMIN=$GFSDIR - jobCard=$HOMEmdl/jobs/JGFSMOS_EXT_STN_PREP -# Define DATA and create directory - export DATA=$STMPROOT/qprod/gfsmos_extprep_${cyc} - export logfile=$dailylog/$job.out - export out_dir=$dailylog - - export NTASK=2 - export PTILE=2 - export OMP_NUM_THREADS=1 - -# bsub -J $job \ -# -o $logfile \ -# -q $QUEUE \ -# -W 2:00 \ -# -M 2500 \ -# -P MDLST-T2O \ -# -extsched 'CRAYLINUX[]' \ -# -R '1*{select[craylinux && !vnode]} + 24*{select[craylinux && vnode]span[ptile=24]}' \ -# $jobCard - -bsub -J ${job} \ - -o $logfile \ - -q ${QUEUE} \ - -n $NTASK \ - -R "span[ptile=$PTILE]" \ - -W 2:00 \ - -P $ACCOUNT \ - $jobCard - -fi #end for skipprep - -# Skip EXT_FORECAST for 06/18 -if [ $cyc -eq 00 -o $cyc -eq 12 ]; then -######################################################################## -# JGFSMOS_EXT_FORECAST -######################################################################## -if [[ ! -d /gpfs/dell1/nco/ops/com/mos/prod/hry_mos.$PDY ]]; then - export ROTATE=/gpfs/dell2/mdl/mdlstat/noscrub/rotate - export COMINhry_mos=$PTMPROOT/hourly.$PDY - if [[ ! -d $COMINhry_mos ]]; then - mkdir -p $COMINhry_mos - fi - \cp $ROTATE/hry/${PDY}03 $COMINhry_mos/sfctbl.03 - \cp $ROTATE/hry/${PDY}09 $COMINhry_mos/sfctbl.09 - \cp $ROTATE/hry/${PDY}15 $COMINhry_mos/sfctbl.15 - \cp $ROTATE/hry/${PDY}21 $COMINhry_mos/sfctbl.21 -fi - -# Change COMIN to get files from user's PTMP "qprod" area -export COMIN=$COMOUT - -export job=gfsmos_extfcst_${cyc}_${pid} -jobCard=$HOMEmdl/jobs/JGFSMOS_EXT_STN_FORECAST -export DATA=$STMPROOT/qprod/gfsmos_extfcst_${cyc} -export logfile=$dailylog/$job.out -export out_dir=$dailylog -# Set dependencies -if [[ "$skipprep" != "y" && "$range" == "both" ]]; then - deps="done(gfsmos_extprep_${cyc}_${pid}) && done(gfsmos_fcst_${cyc}_${pid})" -elif [[ "$skipprep" != "y" && "$range" == "ext" ]]; then - deps="done(gfsmos_extprep_${cyc}_${pid})" -elif [[ "$skipprep" == "y" && "$range" == "ext" ]]; then - deps="" -else - deps="done(gfsmos_fcst_${cyc}_${pid})" -fi - -if [[ $stnonly != "Y" ]]; then - export NTASK=10 - export PTILE=1 - export OMP_NUM_THREADS=1 -else - export NTASK=3 - export PTILE=3 - export OMP_NUM_THREADS=1 -fi - -#bsub -J ${job} -oo $logfile -q $QUEUE -P MDLST-T2O \ -# -W 1:00 -M 2000 \ -# -extsched 'CRAYLINUX[]' \ -# -R '1*{select[craylinux && !vnode]} + 24*{select[craylinux && vnode]span[ptile=24]}' \ -# -w "$deps" \ -# $jobCard - -bsub -J ${job} \ - -o $logfile \ - -q ${QUEUE} \ - -x \ - -n $NTASK \ - -R "span[ptile=$PTILE]" \ - -W 1:00 \ - -P $ACCOUNT \ - -w "$deps" \ - $jobCard - -fi #endif for skipping 06/18 ext_fcst -######################################################################## -# JGFSMOS_EXT_PRDGEN -######################################################################## -jobCard=$HOMEmdl/jobs/JGFSMOS_EXT_STN_PRDGEN -export job=gfsmos_extprdgen_${cyc}_${pid} -# Change COMIN back to COMOUT -export COMIN=$COMOUT -# Define DATA and create directory -export DATA=$STMPROOT/qprod/gfsmos_extprdgen_${cyc} -export logfile=$dailylog/$job.out -export out_dir=$dailylog -# Set dependencies -if [[ "$cyc" == "06" || "$cyc" == "18" ]]; then - deps="done(gfsmos_prdgen_${cyc}_${pid})" -elif [[ "$range" == "both" ]]; then - deps="done(gfsmos_extfcst_${cyc}_${pid}) && done(gfsmos_prdgen_${cyc}_${pid})" -else - deps="done(gfsmos_extfcst_${cyc}_${pid})" -fi -# Set Nodes -if [ $cyc -eq 00 -o $cyc -eq 12 ] && [[ "$stnonly" != "Y" ]]; then - #nodes='1*{select[craylinux && !vnode]} + 168*{select[craylinux && vnode]span[ptile=24]}' - export NTASK=1 - export PTILE=1 - export OMP_NUM_THREADS=20 -else - #nodes='1*{select[craylinux && !vnode]} + 24*{select[craylinux && vnode]span[ptile=24]}' - export NTASK=1 - export PTILE=1 - export OMP_NUM_THREADS=1 -fi - - -#bsub -J ${job} -oo $logfile -q ${QUEUE} -P MDLST-T2O \ -# -W 1:00 -M 2000 \ -# -extsched 'CRAYLINUX[]' \ -# -R "$nodes" \ -# -w "$deps" \ -# $jobCard - -bsub -J ${job} \ - -o $logfile \ - -q ${QUEUE} \ - -x \ - -n $NTASK \ - -R "span[ptile=$PTILE]" \ - -W 1:00 \ - -P $ACCOUNT \ - -w "$deps" \ - $jobCard - -# Exit here with $cyc is 06 or 18 -if [ $cyc -eq 06 -o $cyc -eq 18 ]; then - exit 0 -fi -######################################################################## -# JGFSMOS_WX_EXT_PRDGEN -######################################################################## -#jobCard=$HOMEmdl/jobs/JGFSMOS_WX_EXT_PRDGEN -#export job=gfsmos_wx_extprdgen_${cyc}_${pid} -## Change COMIN back to COMOUT -#export COMIN=$COMOUT -## Define DATA and create directory -#export DATA=$STMPROOT/qprod/gfsmos_wx_extprdgen_${cyc} -#export logfile=$dailylog/$job.out -#export out_dir=$dailylog -## Set dependencies -#if [[ "$range" == "both" ]]; then -# deps="done(gfsmos_extprdgen_${cyc}_${pid}) && done(gfsmos_wx_prdgen_${cyc}_${pid})" -#else -# deps="done(gfsmos_extprdgen_${cyc}_${pid})" -#fi -# -#export NTASK=1 -#export PTILE=1 -#export OMP_NUM_THREADS=20 - -##bsub -J ${job} -oo $logfile -q ${QUEUE} -P MDLST-T2O \ -## -W 1:00 -M 1000 \ -## -extsched 'CRAYLINUX[]' \ -## -R '1*{select[craylinux && !vnode]} + 48*{select[craylinux && vnode]span[ptile=24]}' \ -## -w "$deps" \ -## $jobCard - -#bsub -J ${job} \ -# -o $logfile \ -# -q ${QUEUE} -x \ -# -n $NTASK \ -# -R "span[ptile=$PTILE]" \ -# -W 1:00 \ -# -M 3000 \ -# -P $ACCOUNT \ -# -w "$deps" \ -# $jobCard - -fi #endif for ext/both - -#--------------------- -export SENDCOM=$SENDCOM_SAVE - -exit 0 diff --git a/scripts/run_gfsmos_master.sh.hera b/scripts/run_gfsmos_master.sh.hera deleted file mode 100755 index b8a69ab673..0000000000 --- a/scripts/run_gfsmos_master.sh.hera +++ /dev/null @@ -1,833 +0,0 @@ -#!/bin/sh -####################################################################### -# run_gfsmos.sh -# -# History: -# 03/29/13 Scallion Created (Adapted from Eric Engle's -# "master" scripts) -# 12/03/13 Scallion Added ptype/wxgrid -# -# Purpose: -# To run the GFS-MOS operational suite -# -####################################################################### -set -x - -if (( $# > 1 )); then - echo "Incorrect number of arguments." - echo "Syntax: $0 [PDYCYC (optional)]" - echo "Exiting..." - exit 1 -fi - -export PATH=./:$PATH - -####################################################################### -# Only run on the dev machine -####################################################################### -#/u/Scott.Scallion/bin/run-on-dev.sh -#[[ $? -eq 1 ]] && exit 1 - -####################################################################### -# Source bash_profile to run with proper modules on cron -####################################################################### -#elim . ~/.bash_profile 1> /dev/null 2>&1 -#. ~/.bash_profile - -####################################################################### -# Check the host to determine whether tide or gyre is prod -####################################################################### -#chkhost=`hostname | cut -c1` -#if [[ $SITE == "GYRE" ]] || [[ $SITE == "SURGE" ]] || [[ $SITE == "VENUS" ]]; then -# gort="g" -#elif [[ $SITE == "TIDE" ]] || [[ $SITE == "LUNA" ]] || [[ $SITE == "MARS" ]]; then -# gort="t" -#fi - -####################################################################### -# Set global variables neede in the run script and/or each individual -# job script. -####################################################################### -#. $MODULESHOME/init/bash -#module purge 2>/dev/null -#module load EnvVars/1.0.2 2>/dev/null -#module load ips/18.0.1.163 2>/dev/null -#module load impi/18.0.1 2>/dev/null -#module load lsf/10.1 2>/dev/null -#module load prod_envir/1.0.3 2>/dev/null -#module load prod_util/1.1.3 2>/dev/null -#module load CFP/2.0.1 2>/dev/null -# -#module use -a /gpfs/dell1/nco/ops/nwpara/modulefiles/compiler_prod/ips/18.0.1 -#module load grib_util/1.1.1 2>/dev/null - -# HERA -module load intel/18.0.5.274 -module load impi/2018.0.4 - -module use /scratch2/NCEPDEV/nwprod/NCEPLIBS/modulefiles -module load bacio/2.0.3 -module load bufr/11.3.0 -module load g2/3.1.1 -module load jasper/1.900.1 -module load png/1.2.44 -module load w3emc/2.4.0 -module load w3nco/2.0.7 -module load z/1.2.11 - -module use /scratch1/NCEPDEV/mdl/nwprod/modulefiles -module load prod_util/1.0.14 - -module use /scratch1/NCEPDEV/mdl/apps/modulefiles -module load CFP/2.0.1 - -export FORT_BUFFERED=TRUE -export KMP_AFFINITY=disabled -export envir=prod -export RUN_ENVIR=${RUN_ENVIR:-""} -#export QUEUE=dev - -#------------------ -export SENDCOM=YES -export SENDCOM_SAVE=$SENDCOM -#------------------ - -#-------------------------------- -# COMDATEROOT defined by module prod_util -##export PTMPROOT=/gpfs/dell2/ptmp/$USER -##export STMPROOT=/gpfs/dell2/stmp/$USER -##export MODELROOT=/gpfs/dell2/mdl/mdlstat/noscrub/usr/$USER/nwprod -##export MODELDIR=$MODELROOT/gfsmos.v5.0.6 -##export CODEDIR=$MODELROOT/mos_shared.v2.6.1 - -export PTMPROOT=$ROTDIR/gfsmos.$PDY -export STMPROOT=$RUNDIR/gfsmos.$PDY -export DATAROOT=$STMPROOT -##export MODELROOT=/gpfs/dell2/emc/modeling/noscrub/emc.glopara/git/gfsmos -#export MODELROOT=/gpfs/dell2/mdl/mdlstat/noscrub/usr/Scott.Scallion/gfsv16 -#export MODELROOT=/scratch1/NCEPDEV/mdl/nwprod -export MODELROOT=/scratch1/NCEPDEV/global/glopara/git/global-workflow -#export MODELDIR=$MODELROOT/gfsmos.v5.2.0.1 -export MODELDIR=$MODELROOT/gfsmos.v5.2.0 -#export CODEDIR=/gpfs/dell1/nco/ops/nwpara/mos_shared.v2.6.5 -export CODEDIR=$MODELROOT/mos_shared.v2.6.5 -#-------------------------------- - -#-------------------------------- -##export PDY=20180419 -##export PDY=`date -u +%Y%m%d` -##export prevday=`date -u --date="${PDY} 0000 UTC 24 hours ago" +%Y%m%d` - -dateIn=$1 -#if [ $REALTIME = "YES" ]; then -# GDATE=`$NDATE -24 $dateIn` -# dateIn=$GDATE -#fi -export PDY=`echo $dateIn | cut -c 1-8` -export cyc=`echo $dateIn | cut -c 9-10` -export prevday=`$NDATE -24 ${PDY}00 | cut -c1-8` -#-------------------------------- - - -#-------------------------------- -##let hour=`date -u +"%-H"` -##if [[ $hour -ge 4 && $hour -lt 10 ]]; then -## export cyc=00 -## export range=both -##elif [[ $hour -ge 10 && $hour -lt 16 ]]; then -## export cyc=06 -## export range=both -##elif [[ $hour -ge 16 && $hour -lt 22 ]]; then -## export cyc=12 -## export range=both -##elif [[ $hour -ge 22 && $hour -le 23 ]]; then -## export cyc=18 -## export range=both -##else -## export cyc=18 -## export PDY=$prevday -## export range=both -##fi -## -##cyc_list="00 06 12 18" -##if [[ $# == 1 ]] && [[ $cyc_list =~ $1 ]]; then -## export cyc=$1 -## if [ "$cyc" == "00" -o "$cyc" == "12" ]; then -## export range=both -## else -## export range=both -## fi -##elif [[ $# == 1 ]]; then -## echo "$1 is not a valid cycle (choose 00 or 12)" -## exit 1 -##fi - -# ERIC ENGLE 05/30/2018 - PATCH FOR FV3GFS WINTER 17/18 PARALLEL -export range=${range:-"both"} - -#if [ $cyc -eq 00 -o $cyc -eq 12 ]; then -# if [ $cyc -eq 00 ]; then -# export range=both -# else -# export range=short -# fi -# ERIC ENGLE 05/30/2018 - PATCH FOR FV3GFS WINTER 17/18 PARALLEL -export stnonly='Y' -export skipmodel=n -export skipprep=n -export cycle="t${cyc}z" -export pid="gfs_qprod.$$" -export dailylog=$PTMPROOT/dailylog/log.$PDY -export jlogfile=$dailylog/jlogfile_gfsmos -mkdir -p $dailylog - -export SENDDBN=NO -export SENDDBN_NTC=NO -export GET_IOPROFILE=NO - -# Specify Execution Areas -export HOMEmdl=$MODELDIR -export HOMEcode=$CODEDIR -#export utilscript=/gpfs/hps/mdl/mdlstat/noscrub/usr/Scott.Scallion/ush - -if [ ! -d $HOMEmdl ]; then - echo "$HOMEmdl does not exist" - exit 1 -fi - -if [ ! -d $HOMEcode ]; then - echo "$HOMEcode does not exist" - exit 1 -fi - - -#------------------------------------- -# Define COMOUT (COMIN will vary by job) -#export GFSDIR=$COMROOThps/gfs/prod/gfs.$PDY -##export GFSDIR=$COMROOThps/gfs/prod/gfs.$PDY -##export COMINgfs=$GFSDIR -##export COMOUT=$PTMPROOT/qprod/gfsmos.$PDY - -export GFSDIR=$COMROOT/gfs/prod/gfs.${PDY} -if [[ "$RUN_ENVIR" = "emc" ]] ; then - export GFSDIR=$ROTDIR/gfs.${PDY} -fi -export COMINgfs=$GFSDIR -export COMOUT=$ROTDIR/gfsmos.$PDY - -#export COMINm1=$PTMPROOT/gfsmos.$prevday -#export COMINm1=$PTMPROOT/qprod/gfsmos_gmos_pre-nbmv2.$prevday -#export COMINm1=$PTMPROOT/qprod/gfsmos.$prevday - -if [[ ! -d $PTMPROOT/qprod ]]; then - mkdir -p $PTMPROOT/qprod -fi - -if [[ ! -d $COMOUT ]]; then - mkdir -p $COMOUT -fi - -export COMOUTwmo=$PTMPROOT/wmo - -if [[ ! -d $COMOUTwmo ]]; then - mkdir -p $COMOUTwmo -fi - - -# NOTE: On WCOSS_DELL_P3 the directory from which bsub -# is executed must exist when the submitted job -# begins. Otherwise, the submitted job fails -# with TERM_CWD_NOTEXIST error. - -mkdir -p $DATAROOT -cd $DATAROOT - - -if [ "$range" == "short" -o "$range" == "both" ]; then -######################################################################## -######################################################################## -# SHORT-RANGE JOBS -######################################################################## -######################################################################## - -######################################################################## -# Wait for 1 degree model data -######################################################################## -##if [ "$skipmodel" != "y" ]; then -##let attempts=1 -##while [[ $attempts -le 120 ]] -##do -## if [[ -f $GFSDIR/gfs.$cycle.pgrb2.1p00.f096 ]]; then -## echo "Model file found. Proceeding..." -## break -## else -## if [[ $attempts -le 60 ]]; then -## sleep 60 -## else -## sleep 180 -## fi -## attempts=$((attempts+1)) -## fi -##done -## -##if [[ $attempts -gt 120 ]]; then -## echo "Waited 4 hours for model file, but it did not appear." -## echo "Exiting..." -## exit 1 -##fi -## -##fi #endif for skipmodel - -######################################################################## -# Wait for 1/4 degree model data -######################################################################## -##if [ "$skipmodel" != "y" ]; then -##let attempts=1 -##while [[ $attempts -le 120 ]] -##do -## if [[ -f $GFSDIR/gfs.$cycle.pgrb2.0p25.f096 ]]; then -## echo "Model file found. Proceeding..." -## break -## else -## if [[ $attempts -le 60 ]]; then -## sleep 60 -## else -## sleep 180 -## fi -## attempts=$((attempts+1)) -## fi -##done - -##if [[ $attempts -gt 120 ]]; then -## echo "Waited 4 hours for model file, but it did not appear." -## echo "Exiting..." -## exit 1 -##fi -## -##fi #endif for skipmodel - -######################################################################## -# Wait for 1.0 degree GFS model files before running (Pacific MOS) -######################################################################## -##if [ "$skipmodel" != "y" ]; then -##let attempts=1 -##while [[ $attempts -le 120 ]] -##do -## if [[ -f $GFSDIR/gfs.$cycle.pgrb2.1p00.f096 ]]; then -## echo "1.0 degree model file found. Proceeding..." -## break -## else -## if [[ $attempts -le 60 ]]; then -## sleep 60 -## else -## sleep 180 -## fi -## attempts=$((attempts+1)) -## fi -##done -## -##if [[ $attempts -gt 120 ]]; then -## echo "Waited 4 hours for model file, but it did not appear." -## echo "Exiting..." -## exit 1 -##fi -## -##fi #endif for skipmodel - - -######################################################################## -# JGFSMOS_PREP47 -######################################################################## -if [[ "$skipprep" != "y" ]]; then - export job=gfsmos_prep_${cyc}_${pid} - export COMIN=$GFSDIR - jobCard=$HOMEmdl/jobs/JGFSMOS_STN_PREP -# Define DATA and create directory - export DATA=$STMPROOT/qprod/gfsmos_prep_${cyc} - export logfile=$dailylog/$job.out - export out_dir=$dailylog - - export NTASK=3 - export PTILE=3 - export OMP_NUM_THREADS=1 - -# bsub -J $job \ -# -o $logfile \ -# -q $QUEUE \ -# -x \ -# -n $NTASK \ -# -R "span[ptile=$PTILE]" \ -# -W 0:25 \ -# -P $ACCOUNT \ -# $jobCard - -# HERA (Slurm) -#sbatch -A $ACCOUNT -J $job -q batch -n $NTASK --ntasks-per-node=$PTILE --mem-per-cpu=1g -t 00:25:00 -o $logfile $jobCard -sbatch -A $ACCOUNT -J $job -q batch -n $NTASK --ntasks-per-node=$PTILE --mem-per-cpu=1g -t 01:00:00 -o $logfile $jobCard 1> temp -JGFSMOS_STN_PREP_JOBID=$(cat temp | sed 's/[A-Za-z ]//g') - -fi #end for skipprep - -######################################################################## -# JGFSMOS_FORECAST -######################################################################## -#if [[ ! -d /gpfs/dell1/nco/ops/com/mos/prod/hry_mos.$PDY ]]; then -# export ROTATE=/gpfs/dell2/mdl/mdlstat/noscrub/rotate -# #export COMINhry_mos=$PTMPROOT/hourly.$PDY -# export COMINhry_mos=/scratch1/NCEPDEV/mdl/Michael.N.Baker/hry/hry_mos.$PDY -# if [[ ! -d $COMINhry_mos ]]; then -# mkdir -p $COMINhry_mos -# fi -# \cp $ROTATE/hry/${PDY}03 $COMINhry_mos/sfctbl.03 -# \cp $ROTATE/hry/${PDY}09 $COMINhry_mos/sfctbl.09 -# \cp $ROTATE/hry/${PDY}15 $COMINhry_mos/sfctbl.15 -# \cp $ROTATE/hry/${PDY}21 $COMINhry_mos/sfctbl.21 -#fi -export COMINhry_mos=/scratch1/NCEPDEV/mdl/Michael.N.Baker/hry/hry_mos.$PDY - -# Change COMIN to get files from user's PTMP "qprod" area -export COMIN=$COMOUT - -export job=gfsmos_fcst_${cyc}_${pid} -jobCard=$HOMEmdl/jobs/JGFSMOS_STN_FORECAST -export DATA=$STMPROOT/qprod/gfsmos_fcst_${cyc} -export logfile=$dailylog/$job.out -export out_dir=$dailylog -# Set dependencies -if [[ "$skipprep" != "y" ]]; then - #ORIG deps="done(gfsmos_prep_${cyc}_${pid})" - deps="afterany:$JGFSMOS_STN_PREP_JOBID" -else - deps="" -fi -if [[ $cyc == "00" || $cyc == "12" ]] && [[ "$stnonly" != "Y" ]]; then - complist="metar pac cooprfcmeso goe higoe akgoe tstms" - complist2="copopo3 coptype akpopo3 akptype" -else - complist="metar cooprfcmeso tstms" - complist2="" -fi - -if [[ $cyc == "00" || $cyc == "12" ]] && [[ "$stnonly" != "Y" ]]; then - export NTASK=11 - export PTILE=1 - export OMP_NUM_THREADS=1 -elif [[ $cyc == "00" || $cyc == "12" ]] && [[ "$stnonly" == "Y" ]]; then - export NTASK=5 - export PTILE=5 - export OMP_NUM_THREADS=1 -else - export NTASK=4 - export PTILE=4 - export OMP_NUM_THREADS=1 -fi - -#bsub -J ${job} \ -# -o $logfile \ -# -q ${QUEUE} \ -# -x \ -# -n $NTASK \ -# -R "span[ptile=$PTILE]" \ -# -W 0:20 \ -# -P $ACCOUNT \ -# -w "$deps" \ -# $jobCard - -# HERA (Slurm) -#sbatch -A $ACCOUNT -J $job -q batch -n $NTASK --ntasks-per-node=$PTILE --mem-per-cpu=4g -t 00:20:00 -o $logfile $jobCard -sbatch -A $ACCOUNT -J $job -q batch -n $NTASK --ntasks-per-node=$PTILE --mem-per-cpu=4g -t 01:00:00 -o $logfile --dependency=$deps $jobCard 1> temp -JGFSMOS_STN_FORECAST_JOBID=$(cat temp | sed 's/[A-Za-z ]//g') - -######################################################################## -# JGFSMOS_PRDGEN -######################################################################## -jobCard=$HOMEmdl/jobs/JGFSMOS_STN_PRDGEN -export job=gfsmos_prdgen_${cyc}_${pid} -# Change COMIN back to COMOUT -export COMIN=$COMOUT -# Define DATA and create directory -export DATA=$STMPROOT/qprod/gfsmos_prdgen_${cyc} -export logfile=$dailylog/$job.out -export out_dir=$dailylog -# Set dependencies -#ORIG deps="done(gfsmos_fcst_${cyc}_${pid})" -deps="afterany:$JGFSMOS_STN_FORECAST_JOBID" -# Set Nodes -if [ $cyc -eq 00 -o $cyc -eq 12 ] && [[ "$stnonly" != "Y" ]]; then - #nodes='1*{select[craylinux && !vnode]} + 168*{select[craylinux && vnode]span[ptile=24]}' - export NTASK=1 - export PTILE=1 - #ORIG export OMP_NUM_THREADS=20 - export OMP_NUM_THREADS=1 -else - #nodes='1*{select[craylinux && !vnode]} + 24*{select[craylinux && vnode]span[ptile=24]}' - export NTASK=1 - export PTILE=1 - export OMP_NUM_THREADS=1 -fi - -#bsub -J ${job} \ -# -o $logfile \ -# -q ${QUEUE} \ -# -x \ -# -n $NTASK \ -# -R "span[ptile=$PTILE]" \ -# -W 0:30 \ -# -P $ACCOUNT \ -# -w "$deps" \ -# $jobCard - -# HERA (Slurm) -#sbatch -A $ACCOUNT -J $job -q batch -n $NTASK --ntasks-per-node=$PTILE --mem-per-cpu=4g -t 00:30:00 -o $logfile $jobCard -#sbatch -A $ACCOUNT -J $job -q batch -n $NTASK --ntasks-per-node=$PTILE --mem-per-cpu=4g -t 02:00:00 -o $logfile --dependency=$deps $jobCard 1> temp -sbatch -A $ACCOUNT -J $job -q batch -n $NTASK --ntasks-per-node=$PTILE --exclusive -t 02:00:00 -o $logfile --dependency=$deps $jobCard 1> temp -JGFSMOS_STN_PRDGEN_JOBID=$(cat temp | sed 's/[A-Za-z ]//g') - -######################################################################## -# JGFSMOS_WX_PRDGEN (00z and 12z only) -######################################################################## -#if [ $cyc -eq 00 -o $cyc -eq 12 ]; then -# jobCard=$HOMEmdl/jobs/JGFSMOS_WX_PRDGEN -# export job=gfsmos_wx_prdgen_${cyc}_${pid} -# # Change COMIN back to COMOUT -# export COMIN=$COMOUT -# # Define DATA and create directory -# export DATA=$STMPROOT/qprod/gfsmos_wx_prdgen_${cyc} -# export logfile=$dailylog/$job.out -# export out_dir=$dailylog -# # Set dependencies -# deps="done(gfsmos_prdgen_${cyc}_${pid})" -# -# export NTASK=2 -# export PTILE=1 -# export OMP_NUM_THREADS=20 -# -# #bsub -J ${job} -oo $logfile -q ${QUEUE} -P MDLST-T2O \ -# # -W 1:00 -M 1000 \ -# # -extsched 'CRAYLINUX[]' \ -# # -R '1*{select[craylinux && !vnode]} + 48*{select[craylinux && vnode]span[ptile=24]}' \ -# # -w "$deps" \ -# # $jobCard -# -# bsub -J ${job} \ -# -o $logfile \ -# -q ${QUEUE} -x \ -# -n $NTASK \ -# -R "span[ptile=$PTILE]" \ -# -W 1:00 \ -# -M 3000 \ -# -P $ACCOUNT \ -# -w "$deps" \ -# $jobCard -#fi - -fi #endif short - -######################################################################## -######################################################################## -# EXTENDED-RANGE JOBS -######################################################################## -######################################################################## - -if [ "$range" == "ext" -o "$range" == "both" ]; then - -######################################################################## -# Wait for 1/4 degree model data -######################################################################## -#if [ "$skipmodel" != "y" ]; then -#let attempts=1 -#proj_list=`seq -f %03g 252 12 384` -#for tau in $proj_list -#do -# while [[ $attempts -le 120 ]] -# do -# if [[ -f $GFSDIR/gfs.$cycle.pgrb2.0p25.f${tau} && -f $GFSDIR/gfs.$cycle.pgrb2.0p50.f${tau} ]]; then -# echo "Model file found. Proceeding to next..." -# break -# else -# if [[ $attempts -le 60 ]]; then -# sleep 60 -# else -# sleep 180 -# fi -# attempts=$((attempts+1)) -# fi -# done -#done -# -#if [[ $attempts -gt 120 ]]; then -# echo "Waited 4 hours for model file, but it did not appear." -# echo "Exiting..." -# exit 1 -#fi - -#fi #endif for skipmodel - -######################################################################## -# Wait for 1.0/2.5 degree GFS model files before running (Pacific GFS) -######################################################################## -#if [ "$skipmodel" != "y" ]; then -#let attempts1deg=1 -#proj_list=`seq -f %03g 204 12 384` -#for tau in $proj_list -#do -# while [[ $attempts1deg -le 120 ]] -# do -## ERIC ENGLE 05/30/2018 - PATCH FOR FV3GFS WINTER 17/18 PARALLEL -# #if [[ -f $GFSDIR/gfs.$cycle.pgrb2.1p00.f384 && -f $GFSDIR/gfs.$cycle.pgrb2.2p50.f240 ]]; then -# if [ $cyc -eq 00 ]; then -# waitfile=$GFSDIR/gfs.$cycle.pgrb2.1p00.f384 -# else -# waitfile=$GFSDIR/gfs.$cycle.pgrb2.1p00.f180 -# fi -# if [[ -f $waitfile ]]; then -## ERIC ENGLE 05/30/2018 - PATCH FOR FV3GFS WINTER 17/18 PARALLEL -# #echo "1.0/2.5 degree model files found. Proceeding to next..." -# echo "1.0 degree model files found. Proceeding to next..." -# break -# else -# if [[ $attempts1deg -le 60 ]]; then -# sleep 60 -# else -# sleep 180 -# fi -# attempts1deg=$((aattempts1deg+1)) -# fi -# done -#done -# -#if [[ $attempts1deg -gt 120 ]]; then -# echo "Waited 4 hours for 1.0 degree model file, but it did not appear." -# echo "Exiting..." -# exit 1 -#fi - -#fi #endif for skipmodel - -######################################################################## -# JGFSMOS_EXT_PREP47 -######################################################################## -if [[ "$skipprep" != "y" ]]; then - export job=gfsmos_extprep_${cyc}_${pid} - export COMIN=$GFSDIR - jobCard=$HOMEmdl/jobs/JGFSMOS_EXT_STN_PREP -# Define DATA and create directory - export DATA=$STMPROOT/qprod/gfsmos_extprep_${cyc} - export logfile=$dailylog/$job.out - export out_dir=$dailylog - - export NTASK=2 - export PTILE=2 - export OMP_NUM_THREADS=1 - -# bsub -J $job \ -# -o $logfile \ -# -q $QUEUE \ -# -W 2:00 \ -# -M 2500 \ -# -P MDLST-T2O \ -# -extsched 'CRAYLINUX[]' \ -# -R '1*{select[craylinux && !vnode]} + 24*{select[craylinux && vnode]span[ptile=24]}' \ -# $jobCard - -#bsub -J ${job} \ -# -o $logfile \ -# -q ${QUEUE} \ -# -n $NTASK \ -# -R "span[ptile=$PTILE]" \ -# -W 2:00 \ -# -P $ACCOUNT \ -# $jobCard - -# HERA (Slurm) -#sbatch -A $ACCOUNT -J $job -q batch -n $NTASK --ntasks-per-node=$PTILE --mem-per-cpu=4g -t 00:10:00 -o $logfile $jobCard -sbatch -A $ACCOUNT -J $job -q batch -n $NTASK --ntasks-per-node=$PTILE --mem-per-cpu=4g -t 01:00:00 -o $logfile $jobCard 1> temp -JGFSMOS_EXT_STN_PREP_JOBID=$(cat temp | sed 's/[A-Za-z ]//g') - -fi #end for skipprep - -# Skip EXT_FORECAST for 06/18 -if [ $cyc -eq 00 -o $cyc -eq 12 ]; then -######################################################################## -# JGFSMOS_EXT_FORECAST -######################################################################## -#if [[ ! -d /gpfs/dell1/nco/ops/com/mos/prod/hry_mos.$PDY ]]; then -# export ROTATE=/gpfs/dell2/mdl/mdlstat/noscrub/rotate -# #export COMINhry_mos=$PTMPROOT/hourly.$PDY -# export COMINhry_mos=/scratch1/NCEPDEV/mdl/Michael.N.Baker/hry/hry_mos.$PDY -# if [[ ! -d $COMINhry_mos ]]; then -# mkdir -p $COMINhry_mos -# fi -# \cp $ROTATE/hry/${PDY}03 $COMINhry_mos/sfctbl.03 -# \cp $ROTATE/hry/${PDY}09 $COMINhry_mos/sfctbl.09 -# \cp $ROTATE/hry/${PDY}15 $COMINhry_mos/sfctbl.15 -# \cp $ROTATE/hry/${PDY}21 $COMINhry_mos/sfctbl.21 -#fi -export COMINhry_mos=/scratch1/NCEPDEV/mdl/Michael.N.Baker/hry/hry_mos.$PDY - -# Change COMIN to get files from user's PTMP "qprod" area -export COMIN=$COMOUT - -export job=gfsmos_extfcst_${cyc}_${pid} -jobCard=$HOMEmdl/jobs/JGFSMOS_EXT_STN_FORECAST -export DATA=$STMPROOT/qprod/gfsmos_extfcst_${cyc} -export logfile=$dailylog/$job.out -export out_dir=$dailylog -# Set dependencies -if [[ "$skipprep" != "y" && "$range" == "both" ]]; then - #ORIG deps="done(gfsmos_extprep_${cyc}_${pid}) && done(gfsmos_fcst_${cyc}_${pid})" - deps="afterany:${JGFSMOS_EXT_STN_PREP_JOBID},${JGFSMOS_STN_FORECAST_JOBID}" -elif [[ "$skipprep" != "y" && "$range" == "ext" ]]; then - #ORIG deps="done(gfsmos_extprep_${cyc}_${pid})" - deps="afterany:$JGFSMOS_EXT_STN_PREP_JOBID" -elif [[ "$skipprep" == "y" && "$range" == "ext" ]]; then - deps="" -else - #ORIG deps="done(gfsmos_fcst_${cyc}_${pid})" - deps="afterany:$JGFSMOS_STN_FORECAST_JOBID" -fi - -if [[ $stnonly != "Y" ]]; then - export NTASK=10 - export PTILE=1 - export OMP_NUM_THREADS=1 -else - export NTASK=3 - export PTILE=3 - export OMP_NUM_THREADS=1 -fi - -#bsub -J ${job} -oo $logfile -q $QUEUE -P MDLST-T2O \ -# -W 1:00 -M 2000 \ -# -extsched 'CRAYLINUX[]' \ -# -R '1*{select[craylinux && !vnode]} + 24*{select[craylinux && vnode]span[ptile=24]}' \ -# -w "$deps" \ -# $jobCard - -#bsub -J ${job} \ -# -o $logfile \ -# -q ${QUEUE} \ -# -x \ -# -n $NTASK \ -# -R "span[ptile=$PTILE]" \ -# -W 1:00 \ -# -P $ACCOUNT \ -# -w "$deps" \ -# $jobCard - -# HERA (Slurm) -#sbatch -A $ACCOUNT -J $job -q batch -n $NTASK --ntasks-per-node=$PTILE --mem-per-cpu=4g -t 01:00:00 -o $logfile $jobCard -sbatch -A $ACCOUNT -J $job -q batch -n $NTASK --ntasks-per-node=$PTILE --mem-per-cpu=4g -t 02:00:00 -o $logfile --dependency=$deps $jobCard 1> temp -JGFSMOS_EXT_STN_FORECAST_JOBID=$(cat temp | sed 's/[A-Za-z ]//g') - -fi #endif for skipping 06/18 ext_fcst -######################################################################## -# JGFSMOS_EXT_PRDGEN -######################################################################## -jobCard=$HOMEmdl/jobs/JGFSMOS_EXT_STN_PRDGEN -export job=gfsmos_extprdgen_${cyc}_${pid} -# Change COMIN back to COMOUT -export COMIN=$COMOUT -# Define DATA and create directory -export DATA=$STMPROOT/qprod/gfsmos_extprdgen_${cyc} -export logfile=$dailylog/$job.out -export out_dir=$dailylog -# Set dependencies -if [[ "$cyc" == "06" || "$cyc" == "18" ]]; then - #ORIG deps="done(gfsmos_prdgen_${cyc}_${pid})" - deps="afterany:$JGFSMOS_STN_PRDGEN_JOBID" -elif [[ "$range" == "both" ]]; then - #ORIG deps="done(gfsmos_extfcst_${cyc}_${pid}) && done(gfsmos_prdgen_${cyc}_${pid})" - deps="afterany:${JGFSMOS_EXT_STN_FORECAST_JOBID},${JGFSMOS_STN_PRDGEN_JOBID}" -else - #ORIG deps="done(gfsmos_extfcst_${cyc}_${pid})" - deps="afterany:$JGFSMOS_EXT_STN_FORECAST" -fi -# Set Nodes -if [ $cyc -eq 00 -o $cyc -eq 12 ] && [[ "$stnonly" != "Y" ]]; then - #nodes='1*{select[craylinux && !vnode]} + 168*{select[craylinux && vnode]span[ptile=24]}' - export NTASK=1 - export PTILE=1 - #ORIG export OMP_NUM_THREADS=20 - export OMP_NUM_THREADS=1 -else - #nodes='1*{select[craylinux && !vnode]} + 24*{select[craylinux && vnode]span[ptile=24]}' - export NTASK=1 - export PTILE=1 - export OMP_NUM_THREADS=1 -fi - - -#bsub -J ${job} -oo $logfile -q ${QUEUE} -P MDLST-T2O \ -# -W 1:00 -M 2000 \ -# -extsched 'CRAYLINUX[]' \ -# -R "$nodes" \ -# -w "$deps" \ -# $jobCard - -#bsub -J ${job} \ -# -o $logfile \ -# -q ${QUEUE} \ -# -x \ -# -n $NTASK \ -# -R "span[ptile=$PTILE]" \ -# -W 1:00 \ -# -P $ACCOUNT \ -# -w "$deps" \ -# $jobCard - -# HERA (Slurm) -#sbatch -A $ACCOUNT -J $job -q batch -n $NTASK --ntasks-per-node=$PTILE --mem-per-cpu=4g -t 01:00:00 -o $logfile $jobCard -#sbatch -A $ACCOUNT -J $job -q batch -n $NTASK --ntasks-per-node=$PTILE --mem-per-cpu=4g -t 02:00:00 -o $logfile --dependency=$deps $jobCard #NOTE: No need to redirect stdout. -sbatch -A $ACCOUNT -J $job -q batch -n $NTASK --ntasks-per-node=$PTILE --exclusive -t 02:00:00 -o $logfile --dependency=$deps $jobCard #NOTE: No need to redirect stdout. - -# Exit here with $cyc is 06 or 18 -if [ $cyc -eq 06 -o $cyc -eq 18 ]; then - exit 0 -fi -######################################################################## -# JGFSMOS_WX_EXT_PRDGEN -######################################################################## -#jobCard=$HOMEmdl/jobs/JGFSMOS_WX_EXT_PRDGEN -#export job=gfsmos_wx_extprdgen_${cyc}_${pid} -## Change COMIN back to COMOUT -#export COMIN=$COMOUT -## Define DATA and create directory -#export DATA=$STMPROOT/qprod/gfsmos_wx_extprdgen_${cyc} -#export logfile=$dailylog/$job.out -#export out_dir=$dailylog -## Set dependencies -#if [[ "$range" == "both" ]]; then -# deps="done(gfsmos_extprdgen_${cyc}_${pid}) && done(gfsmos_wx_prdgen_${cyc}_${pid})" -#else -# deps="done(gfsmos_extprdgen_${cyc}_${pid})" -#fi -# -#export NTASK=1 -#export PTILE=1 -#export OMP_NUM_THREADS=20 - -##bsub -J ${job} -oo $logfile -q ${QUEUE} -P MDLST-T2O \ -## -W 1:00 -M 1000 \ -## -extsched 'CRAYLINUX[]' \ -## -R '1*{select[craylinux && !vnode]} + 48*{select[craylinux && vnode]span[ptile=24]}' \ -## -w "$deps" \ -## $jobCard - -#bsub -J ${job} \ -# -o $logfile \ -# -q ${QUEUE} -x \ -# -n $NTASK \ -# -R "span[ptile=$PTILE]" \ -# -W 1:00 \ -# -M 3000 \ -# -P $ACCOUNT \ -# -w "$deps" \ -# $jobCard - -fi #endif for ext/both - -#--------------------- -export SENDCOM=$SENDCOM_SAVE - -exit 0 diff --git a/scripts/run_reg2grb2.sh b/scripts/run_reg2grb2.sh new file mode 100755 index 0000000000..ab2c80043e --- /dev/null +++ b/scripts/run_reg2grb2.sh @@ -0,0 +1,72 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +#requires grib_util module + +MOM6REGRID=${MOM6REGRID:-${HOMEgfs}} +export mask_file="${MOM6REGRID}/fix/reg2grb2/mask.0p25x0p25.grb2" + +# offline testing: +#export DATA= +#export icefile=$DATA/DATA0p5/icer2012010106.01.2012010100_0p5x0p5.nc +#export ocnfile=$DATA/DATA0p5/ocnr2012010106.01.2012010100_0p5x0p5.nc +#export outfile=$DATA/DATA0p5/out/ocnh2012010106.01.2012010100.grb2 +# +# workflow testing: +export icefile="icer${VDATE}.${ENSMEM}.${IDATE}_0p25x0p25_CICE.nc" +export ocnfile="ocnr${VDATE}.${ENSMEM}.${IDATE}_0p25x0p25_MOM6.nc" +export outfile="ocn_ice${VDATE}.${ENSMEM}.${IDATE}_0p25x0p25.grb2" +export outfile0p5="ocn_ice${VDATE}.${ENSMEM}.${IDATE}_0p5x0p5.grb2" + +export mfcstcpl=${mfcstcpl:-1} +export IGEN_OCNP=${IGEN_OCNP:-197} + +# PT This is the forecast date +export year=${VDATE:0:4} +export month=${VDATE:4:2} +export day=${VDATE:6:2} +export hour=${VDATE:8:2} + +# PT This is the initialization date +export syear=${IDATE:0:4} +export smonth=${IDATE:4:2} +export sday=${IDATE:6:2} +export shour=${IDATE:8:2} + +# PT Need to get this from above - could be 6 or 1 hour +export hh_inc_ocn=6 +# +# set for 1p0 lat-lon +#export im=360 +#export jm=181 +# export km=40 +#export imo=360 +#export jmo=181 +# +# set for 0p5 lat-lon +#export im=720 +#export jm=361 +#export km=40 +#export imo=720 +#export jmo=361 +# +# set for 0p25 lat-lon +export im=1440 +export jm=721 +export imo=1440 +export jmo=721 +export km=40 + +export flats=-90. +export flatn=90. +export flonw=0.0 +export flone=359.75 + +ln -sf "${mask_file}" ./iceocnpost.g2 +${executable} > "reg2grb2.${VDATE}.${IDATE}.out" + +# interpolated from 0p25 to 0p5 grid +grid2p05="0 6 0 0 0 0 0 0 720 361 0 0 90000000 0 48 -90000000 359500000 500000 500000 0" +${COPYGB2} -g "${grid2p05}" -i0 -x "${outfile}" "${outfile0p5}" + diff --git a/scripts/run_regrid.sh b/scripts/run_regrid.sh new file mode 100755 index 0000000000..103e9a759e --- /dev/null +++ b/scripts/run_regrid.sh @@ -0,0 +1,27 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +MOM6REGRID="${MOM6REGRID:-${HOMEgfs}}" +export EXEC_DIR="${MOM6REGRID}/exec" +export USH_DIR="${MOM6REGRID}/ush" +export COMOUTocean="${COM_OCEAN_HISTORY}" +export COMOUTice="${COM_ICE_HISTORY}" +export IDATE="${IDATE}" +export VDATE="${VDATE}" +export ENSMEM="${ENSMEM}" +export FHR="${fhr}" +export DATA="${DATA}" +export FIXreg2grb2="${FIXreg2grb2}" + +###### DO NOT MODIFY BELOW UNLESS YOU KNOW WHAT YOU ARE DOING ####### +#Need NCL module to be loaded: +echo "${NCARG_ROOT}" +export NCL="${NCARG_ROOT}/bin/ncl" + +ls -alrt + +${NCL} "${USH_DIR}/icepost.ncl" +${NCL} "${USH_DIR}/ocnpost.ncl" +##################################################################### + diff --git a/sorc/CMakeLists.txt b/sorc/CMakeLists.txt new file mode 100644 index 0000000000..97d6a2ba8f --- /dev/null +++ b/sorc/CMakeLists.txt @@ -0,0 +1,74 @@ +cmake_minimum_required(VERSION 3.15) + +# Get the version from the VERSION file. +#file(STRINGS "VERSION" pVersion) +set(pVersion 1.0.0) + +project( + workflow_utils + VERSION ${pVersion} + LANGUAGES Fortran) +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + +include(GNUInstallDirs) + +# User options. +option(OPENMP "use OpenMP threading" ON) + +# Build type +if(NOT CMAKE_BUILD_TYPE MATCHES "^(Debug|Release|RelWithDebInfo|MinSizeRel)$") + message(STATUS "Setting build type to 'Release' as none was specified.") + set(CMAKE_BUILD_TYPE + "Release" + CACHE STRING "Choose the type of build." FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" + "MinSizeRel" "RelWithDebInfo") +endif() + +# Set compiler flags. +if(CMAKE_Fortran_COMPILER_ID MATCHES "^(Intel)$") + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g -traceback") + set(CMAKE_Fortran_FLAGS_RELEASE "-O3") + set(CMAKE_Fortran_FLAGS_DEBUG "-O0 -check -check noarg_temp_created -check nopointer -fp-stack-check -fstack-protector-all -fpe0 -debug -ftrapuv") +elseif(CMAKE_Fortran_COMPILER_ID MATCHES "^(GNU)$") + set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g -fbacktrace") + set(CMAKE_Fortran_FLAGS_RELEASE "-O3") + set(CMAKE_Fortran_FLAGS_DEBUG "-O0 -ggdb -fno-unsafe-math-optimizations -frounding-math -fsignaling-nans -ffpe-trap=invalid,zero,overflow -fbounds-check") +endif() + +# Find packages. +find_package(MPI REQUIRED) +find_package(NetCDF REQUIRED Fortran) + +if(OPENMP) + find_package(OpenMP REQUIRED COMPONENTS Fortran) +endif() + +find_package(bacio REQUIRED) +find_package(w3nco REQUIRED) +find_package(w3emc REQUIRED) +find_package(sp REQUIRED) +find_package(ip REQUIRED) +find_package(ncio REQUIRED) +find_package(nemsio REQUIRED) +find_package(sigio REQUIRED) +find_package(g2 REQUIRED) +find_package(bufr REQUIRED) +find_package(landsfcutil REQUIRED) +find_package(wgrib2 REQUIRED) + +add_subdirectory(enkf_chgres_recenter.fd) +add_subdirectory(enkf_chgres_recenter_nc.fd) +add_subdirectory(fv3nc2nemsio.fd) +add_subdirectory(regrid_nemsio.fd) +add_subdirectory(gaussian_sfcanl.fd) +add_subdirectory(gfs_bufr.fd) +add_subdirectory(reg2grb2.fd) +add_subdirectory(tocsbufr.fd) +add_subdirectory(fbwndgfs.fd) +add_subdirectory(vint.fd) +add_subdirectory(tave.fd) +add_subdirectory(syndat_qctropcy.fd) +add_subdirectory(syndat_maksynrc.fd) +add_subdirectory(syndat_getjtbul.fd) +add_subdirectory(supvit.fd) diff --git a/sorc/build_all.sh b/sorc/build_all.sh index ebcef19156..4ba0b92888 100755 --- a/sorc/build_all.sh +++ b/sorc/build_all.sh @@ -1,29 +1,73 @@ -#!/bin/sh +#! /usr/bin/env bash + set +x #------------------------------------ # Exception handling is now included. # # USER DEFINED STUFF: # -# USE_PREINST_LIBS: set to "true" to use preinstalled libraries. -# Anything other than "true" will use libraries locally. #------------------------------------ -export USE_PREINST_LIBS="true" - #------------------------------------ # END USER DEFINED STUFF #------------------------------------ +function _usage() { + cat << EOF +Builds all of the global-workflow components by calling the individual build + scripts in sequence. + +Usage: ${BASH_SOURCE[0]} [-a UFS_app][-c build_config][-h][-j n][-v] + -a UFS_app: + Build a specific UFS app instead of the default + -c build_config: + Selectively build based on the provided config instead of the default config + -h: + print this help message and exit + -j: + Specify maximum number of build jobs (n) + -v: + Execute all build scripts with -v option to turn on verbose where supported +EOF + exit 1 +} + +script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd) +cd "${script_dir}" || exit 1 -build_dir=`pwd` -logs_dir=$build_dir/logs -if [ ! -d $logs_dir ]; then +_build_ufs_opt="" +_verbose_opt="" +_partial_opt="" +_build_job_max=20 +# Reset option counter in case this script is sourced +OPTIND=1 +while getopts ":a:c:j:hv" option; do + case "${option}" in + a) _build_ufs_opt+="-a ${OPTARG} ";; + c) _partial_opt+="-c ${OPTARG} ";; + h) _usage;; + j) _build_job_max="${OPTARG} ";; + v) _verbose_opt="-v";; + :) + echo "[${BASH_SOURCE[0]}]: ${option} requires an argument" + _usage + ;; + *) + echo "[${BASH_SOURCE[0]}]: Unrecognized option: ${option}" + _usage + ;; + esac +done + +shift $((OPTIND-1)) + +logs_dir="${script_dir}/logs" +if [[ ! -d "${logs_dir}" ]]; then echo "Creating logs folder" - mkdir $logs_dir + mkdir "${logs_dir}" || exit 1 fi # Check final exec folder exists -if [ ! -d "../exec" ]; then +if [[ ! -d "../exec" ]]; then echo "Creating ../exec folder" mkdir ../exec fi @@ -31,250 +75,199 @@ fi #------------------------------------ # GET MACHINE #------------------------------------ -target="" -source ./machine-setup.sh > /dev/null 2>&1 +export COMPILER="intel" +source gfs_utils.fd/ush/detect_machine.sh +source gfs_utils.fd/ush/module-setup.sh +if [[ -z "${MACHINE_ID}" ]]; then + echo "FATAL: Unable to determine target machine" + exit 1 +fi #------------------------------------ -# INCLUDE PARTIAL BUILD +# SOURCE BUILD VERSION FILES #------------------------------------ +# TODO: Commented out until components aligned for build +#source ../versions/build.ver -. ./partial_build.sh +#------------------------------------ +# INCLUDE PARTIAL BUILD +#------------------------------------ +# Turn off some shellcheck warnings because we want to have +# variables with multiple arguments. +# shellcheck disable=SC2086,SC2248 +source ./partial_build.sh ${_verbose_opt} ${_partial_opt} +# shellcheck disable= #------------------------------------ # Exception Handling Init #------------------------------------ +# Disable shellcheck warning about single quotes not being substituted. +# shellcheck disable=SC2016 ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} +# shellcheck disable= err=0 -#------------------------------------ -# build libraries first -#------------------------------------ -$Build_libs && { -echo " .... Library build not currently supported .... " -#echo " .... Building libraries .... " -#./build_libs.sh > $logs_dir/build_libs.log 2>&1 -} +declare -A build_jobs +declare -A build_opts #------------------------------------ -# build fv3 +# Check which builds to do and assign # of build jobs #------------------------------------ -$Build_fv3gfs && { -echo " .... Building fv3 .... " -./build_fv3.sh > $logs_dir/build_fv3.log 2>&1 -rc=$? -if [[ $rc -ne 0 ]] ; then - echo "Fatal error in building fv3." - echo "The log file is in $logs_dir/build_fv3.log" -fi -((err+=$rc)) -} -#------------------------------------ -# build gsi -#------------------------------------ -$Build_gsi && { -echo " .... Building gsi .... " -./build_gsi.sh > $logs_dir/build_gsi.log 2>&1 -rc=$? -if [[ $rc -ne 0 ]] ; then - echo "Fatal error in building gsi." - echo "The log file is in $logs_dir/build_gsi.log" +# Mandatory builds, unless otherwise specified, for the UFS +big_jobs=0 +if [[ ${Build_ufs_model} == 'true' ]]; then + build_jobs["ufs"]=8 + big_jobs=$((big_jobs+1)) + build_opts["ufs"]="${_verbose_opt} ${_build_ufs_opt}" fi -((err+=$rc)) -} - -#------------------------------------ -# build ncep_post -#------------------------------------ -$Build_ncep_post && { -echo " .... Building ncep_post .... " -./build_ncep_post.sh > $logs_dir/build_ncep_post.log 2>&1 -rc=$? -if [[ $rc -ne 0 ]] ; then - echo "Fatal error in building ncep_post." - echo "The log file is in $logs_dir/build_ncep_post.log" +# The UPP is hardcoded to use 6 cores +if [[ ${Build_upp} == 'true' ]]; then + build_jobs["upp"]=6 + build_opts["upp"]="" fi -((err+=$rc)) -} - -#------------------------------------ -# build ufs_utils -#------------------------------------ -$Build_ufs_utils && { -echo " .... Building ufs_utils .... " -./build_ufs_utils.sh > $logs_dir/build_ufs_utils.log 2>&1 -rc=$? -if [[ $rc -ne 0 ]] ; then - echo "Fatal error in building ufs_utils." - echo "The log file is in $logs_dir/build_ufs_utils.log" +if [[ ${Build_ufs_utils} == 'true' ]]; then + build_jobs["ufs_utils"]=3 + build_opts["ufs_utils"]="${_verbose_opt}" fi -((err+=$rc)) -} - -#------------------------------------ -# build gldas -#------------------------------------ -$Build_gldas && { -echo " .... Building gldas .... " -./build_gldas.sh > $logs_dir/build_gldas.log 2>&1 -rc=$? -if [[ $rc -ne 0 ]] ; then - echo "Fatal error in building gldas." - echo "The log file is in $logs_dir/build_gldas.log" +if [[ ${Build_gfs_utils} == 'true' ]]; then + build_jobs["gfs_utils"]=1 + build_opts["gfs_utils"]="${_verbose_opt}" fi -((err+=$rc)) -} - -#------------------------------------ -# build gfs_wafs - optional checkout -#------------------------------------ -if [ -d gfs_wafs.fd ]; then - $Build_gfs_wafs && { - echo " .... Building gfs_wafs .... " - ./build_gfs_wafs.sh > $logs_dir/build_gfs_wafs.log 2>&1 - rc=$? - if [[ $rc -ne 0 ]] ; then - echo "Fatal error in building gfs_wafs." - echo "The log file is in $logs_dir/build_gfs_wafs.log" - fi - ((err+=$rc)) -} +if [[ ${Build_ww3prepost} == "true" ]]; then + build_jobs["ww3prepost"]=3 + build_opts["ww3prepost"]="${_verbose_opt} ${_build_ufs_opt}" fi -#------------------------------------ -# build gaussian_sfcanl -#------------------------------------ -$Build_gaussian_sfcanl && { -echo " .... Building gaussian_sfcanl .... " -./build_gaussian_sfcanl.sh > $logs_dir/build_gaussian_sfcanl.log 2>&1 -rc=$? -if [[ $rc -ne 0 ]] ; then - echo "Fatal error in building gaussian_sfcanl." - echo "The log file is in $logs_dir/build_gaussian_sfcanl.log" +# Optional DA builds +if [[ -d gdas.cd ]]; then + build_jobs["gdas"]=8 + big_jobs=$((big_jobs+1)) + build_opts["gdas"]="${_verbose_opt}" fi -((err+=$rc)) -} - -#------------------------------------ -# build enkf_chgres_recenter -#------------------------------------ -$Build_enkf_chgres_recenter && { -echo " .... Building enkf_chgres_recenter .... " -./build_enkf_chgres_recenter.sh > $logs_dir/build_enkf_chgres_recenter.log 2>&1 -rc=$? -if [[ $rc -ne 0 ]] ; then - echo "Fatal error in building enkf_chgres_recenter." - echo "The log file is in $logs_dir/build_enkf_chgres_recenter.log" +if [[ -d gsi_enkf.fd ]]; then + build_jobs["gsi_enkf"]=8 + big_jobs=$((big_jobs+1)) + build_opts["gsi_enkf"]="${_verbose_opt}" fi -((err+=$rc)) -} - -#------------------------------------ -# build enkf_chgres_recenter_nc -#------------------------------------ -$Build_enkf_chgres_recenter_nc && { -echo " .... Building enkf_chgres_recenter_nc .... " -./build_enkf_chgres_recenter_nc.sh > $logs_dir/build_enkf_chgres_recenter_nc.log 2>&1 -rc=$? -if [[ $rc -ne 0 ]] ; then - echo "Fatal error in building enkf_chgres_recenter_nc." - echo "The log file is in $logs_dir/build_enkf_chgres_recenter_nc.log" +if [[ -d gsi_utils.fd ]]; then + build_jobs["gsi_utils"]=2 + build_opts["gsi_utils"]="${_verbose_opt}" fi -((err+=$rc)) -} - -#------------------------------------ -# build tropcy_NEMS -#------------------------------------ -$Build_tropcy && { -echo " .... Building tropcy_NEMS .... " -./build_tropcy_NEMS.sh > $logs_dir/build_tropcy_NEMS.log 2>&1 -rc=$? -if [[ $rc -ne 0 ]] ; then - echo "Fatal error in building tropcy_NEMS." - echo "The log file is in $logs_dir/build_tropcy_NEMS.log" +if [[ -d gsi_monitor.fd ]]; then + build_jobs["gsi_monitor"]=1 + build_opts["gsi_monitor"]="${_verbose_opt}" fi -((err+=$rc)) -} -#------------------------------------ -# build gfs_fbwndgfs -#------------------------------------ -$Build_gfs_fbwndgfs && { -echo " .... Building gfs_fbwndgfs .... " -./build_gfs_fbwndgfs.sh > $logs_dir/build_gfs_fbwndgfs.log 2>&1 -rc=$? -if [[ $rc -ne 0 ]] ; then - echo "Fatal error in building gfs_fbwndgfs." - echo "The log file is in $logs_dir/build_gfs_fbwndgfs.log" -fi -((err+=$rc)) -} +# Go through all builds and adjust CPU counts down if necessary +requested_cpus=0 +build_list="" +for build in "${!build_jobs[@]}"; do + if [[ -z "${build_list}" ]]; then + build_list="${build}" + else + build_list="${build_list}, ${build}" + fi + if [[ ${build_jobs[${build}]} -gt ${_build_job_max} ]]; then + build_jobs[${build}]=${_build_job_max} + fi + requested_cpus=$(( requested_cpus + build_jobs[${build}] )) +done -#------------------------------------ -# build gfs_bufrsnd -#------------------------------------ -$Build_gfs_bufrsnd && { -echo " .... Building gfs_bufrsnd .... " -./build_gfs_bufrsnd.sh > $logs_dir/build_gfs_bufrsnd.log 2>&1 -rc=$? -if [[ $rc -ne 0 ]] ; then - echo "Fatal error in building gfs_bufrsnd." - echo "The log file is in $logs_dir/build_gfs_bufrsnd.log" -fi -((err+=$rc)) -} +echo "Building ${build_list}" -#------------------------------------ -# build fv3nc2nemsio -#------------------------------------ -$Build_fv3nc2nemsio && { -echo " .... Building fv3nc2nemsio .... " -./build_fv3nc2nemsio.sh > $logs_dir/build_fv3nc2nemsio.log 2>&1 -rc=$? -if [[ $rc -ne 0 ]] ; then - echo "Fatal error in building fv3nc2nemsio." - echo "The log file is in $logs_dir/build_fv3nc2nemsio.log" +# Go through all builds and adjust CPU counts up if possible +if [[ ${requested_cpus} -lt ${_build_job_max} && ${big_jobs} -gt 0 ]]; then + # Add cores to the gdas, ufs, and gsi build jobs + extra_cores=$(( _build_job_max - requested_cpus )) + extra_cores=$(( extra_cores / big_jobs )) + for build in "${!build_jobs[@]}"; do + if [[ "${build}" == "gdas" || "${build}" == "ufs" || "${build}" == "gsi_enkf" ]]; then + build_jobs[${build}]=$(( build_jobs[${build}] + extra_cores )) + fi + done fi -((err+=$rc)) -} -#------------------------------------ -# build regrid_nemsio -#------------------------------------ -$Build_regrid_nemsio && { -echo " .... Building regrid_nemsio .... " -./build_regrid_nemsio.sh > $logs_dir/build_regrid_nemsio.log 2>&1 -rc=$? -if [[ $rc -ne 0 ]] ; then - echo "Fatal error in building regrid_nemsio." - echo "The log file is in $logs_dir/build_regrid_nemsio.log" -fi -((err+=$rc)) -} +procs_in_use=0 +declare -A build_ids -#------------------------------------ -# build gfs_util -#------------------------------------ -# Only build on WCOSS -if [ $target = wcoss -o $target = wcoss_cray -o $target = wcoss_dell_p3 ]; then - $Build_gfs_util && { - echo " .... Building gfs_util .... " - ./build_gfs_util.sh > $logs_dir/build_gfs_util.log 2>&1 - rc=$? - if [[ $rc -ne 0 ]] ; then - echo "Fatal error in building gfs_util." - echo "The log file is in $logs_dir/build_gfs_util.log" - fi - ((err+=$rc)) - } -fi +builds_started=0 +# Now start looping through all of the jobs until everything is done +while [[ ${builds_started} -lt ${#build_jobs[@]} ]]; do + for build in "${!build_jobs[@]}"; do + # Has the job started? + if [[ -n "${build_jobs[${build}]+0}" && -z "${build_ids[${build}]+0}" ]]; then + # Do we have enough processors to run it? + if [[ ${_build_job_max} -ge $(( build_jobs[build] + procs_in_use )) ]]; then + if [[ "${build}" != "upp" ]]; then + "./build_${build}.sh" -j "${build_jobs[${build}]}" "${build_opts[${build}]:-}" > \ + "${logs_dir}/build_${build}.log" 2>&1 & + else + "./build_${build}.sh" "${build_opts[${build}]}" > \ + "${logs_dir}/build_${build}.log" 2>&1 & + fi + build_ids["${build}"]=$! + echo "Starting build_${build}.sh" + procs_in_use=$(( procs_in_use + build_jobs[${build}] )) + fi + fi + done + + # Check if all builds have completed + # Also recalculate how many processors are in use to account for completed builds + builds_started=0 + procs_in_use=0 + for build in "${!build_jobs[@]}"; do + # Has the build started? + if [[ -n "${build_ids[${build}]+0}" ]]; then + builds_started=$(( builds_started + 1)) + # Calculate how many processors are in use + # Is the build still running? + if ps -p "${build_ids[${build}]}" > /dev/null; then + procs_in_use=$(( procs_in_use + build_jobs["${build}"] )) + fi + fi + done + + sleep 5s +done + +# Wait for all jobs to complete and check return statuses +errs=0 +while [[ ${#build_jobs[@]} -gt 0 ]]; do + for build in "${!build_jobs[@]}"; do + # Test if each job is complete and if so, notify and remove from the array + if [[ -n "${build_ids[${build}]+0}" ]]; then + if ! ps -p "${build_ids[${build}]}" > /dev/null; then + wait "${build_ids[${build}]}" + build_stat=$? + errs=$((errs+build_stat)) + if [[ ${build_stat} == 0 ]]; then + echo "build_${build}.sh completed successfully!" + else + echo "build_${build}.sh failed with status ${build_stat}!" + fi + + # Remove the completed build from the list of PIDs + unset 'build_ids[${build}]' + unset 'build_jobs[${build}]' + fi + fi + done + + sleep 5s +done #------------------------------------ # Exception Handling #------------------------------------ -[[ $err -ne 0 ]] && echo "FATAL BUILD ERROR: Please check the log file for detail, ABORT!" -$ERRSCRIPT || exit $err +if (( errs != 0 )); then + cat << EOF +BUILD ERROR: One or more components failed to build + Check the associated build log(s) for details. +EOF + ${ERRSCRIPT} || exit "${err}" +fi echo;echo " .... Build system finished .... " diff --git a/sorc/build_enkf_chgres_recenter.sh b/sorc/build_enkf_chgres_recenter.sh deleted file mode 100755 index 880a9dd032..0000000000 --- a/sorc/build_enkf_chgres_recenter.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh -set -eux - -source ./machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` - -USE_PREINST_LIBS=${USE_PREINST_LIBS:-"true"} -if [ $USE_PREINST_LIBS = true ]; then - export MOD_PATH=/scratch3/NCEPDEV/nwprod/lib/modulefiles - source ../modulefiles/fv3gfs/enkf_chgres_recenter.$target > /dev/null 2>&1 -else - export MOD_PATH=${cwd}/lib/modulefiles - if [ $target = wcoss_cray ]; then - source ../modulefiles/fv3gfs/enkf_chgres_recenter.${target}_userlib > /dev/null 2>&1 - else - source ../modulefiles/fv3gfs/enkf_chgres_recenter.$target > /dev/null 2>&1 - fi -fi -module list - -# Check final exec folder exists -if [ ! -d "../exec" ]; then - mkdir ../exec -fi - -cd ${cwd}/enkf_chgres_recenter.fd - -export FFLAGS="-O3 -r8 -i4 -qopenmp -traceback -fp-model precise" - -make clean -make -make install -make clean diff --git a/sorc/build_enkf_chgres_recenter_nc.sh b/sorc/build_enkf_chgres_recenter_nc.sh deleted file mode 100755 index 3e503379c0..0000000000 --- a/sorc/build_enkf_chgres_recenter_nc.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh -set -eux - -source ./machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` - -USE_PREINST_LIBS=${USE_PREINST_LIBS:-"true"} -if [ $USE_PREINST_LIBS = true ]; then - export MOD_PATH=/scratch3/NCEPDEV/nwprod/lib/modulefiles - source ../modulefiles/fv3gfs/enkf_chgres_recenter_nc.$target > /dev/null 2>&1 -else - export MOD_PATH=${cwd}/lib/modulefiles - if [ $target = wcoss_cray ]; then - source ../modulefiles/fv3gfs/enkf_chgres_recenter_nc.${target}_userlib > /dev/null 2>&1 - else - source ../modulefiles/fv3gfs/enkf_chgres_recenter_nc.$target > /dev/null 2>&1 - fi -fi -module list - -# Check final exec folder exists -if [ ! -d "../exec" ]; then - mkdir ../exec -fi - -cd ${cwd}/enkf_chgres_recenter_nc.fd - -export FFLAGS="-O3 -qopenmp -traceback -fp-model precise" -export FV3GFS_NCIO_LIB="${cwd}/gsi.fd/build/lib/libfv3gfs_ncio.a" -export FV3GFS_NCIO_INC="${cwd}/gsi.fd/build/include" - -make clean -make -make install -make clean diff --git a/sorc/build_fv3.sh b/sorc/build_fv3.sh deleted file mode 100755 index 5659b53316..0000000000 --- a/sorc/build_fv3.sh +++ /dev/null @@ -1,25 +0,0 @@ -#! /usr/bin/env bash -set -eux - -source ./machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` - -USE_PREINST_LIBS=${USE_PREINST_LIBS:-"true"} -if [ $USE_PREINST_LIBS = true ]; then - export MOD_PATH=/scratch3/NCEPDEV/nwprod/lib/modulefiles -else - export MOD_PATH=${cwd}/lib/modulefiles -fi - -# Check final exec folder exists -if [ ! -d "../exec" ]; then - mkdir ../exec -fi - -if [ $target = hera ]; then target=hera.intel ; fi - -cd fv3gfs.fd/ -FV3=$( pwd -P )/FV3 -cd tests/ -./compile.sh "$FV3" "$target" "WW3=Y 32BIT=Y" 1 -mv -f fv3_1.exe ../NEMS/exe/global_fv3gfs.x diff --git a/sorc/build_fv3nc2nemsio.sh b/sorc/build_fv3nc2nemsio.sh deleted file mode 100755 index 14667daa2e..0000000000 --- a/sorc/build_fv3nc2nemsio.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh -set -eux - -source ./machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` - -USE_PREINST_LIBS=${USE_PREINST_LIBS:-"true"} -if [ $USE_PREINST_LIBS = true ]; then - export MOD_PATH=/scratch3/NCEPDEV/nwprod/lib/modulefiles - source ../modulefiles/modulefile.fv3nc2nemsio.$target > /dev/null 2>&1 -else - export MOD_PATH=${cwd}/lib/modulefiles - if [ $target = wcoss_cray ]; then - source ../modulefiles/modulefile.fv3nc2nemsio.${target}_userlib > /dev/null 2>&1 - else - source ../modulefiles/modulefile.fv3nc2nemsio.$target > /dev/null 2>&1 - fi -fi - -# Check final exec folder exists -if [ ! -d "../exec" ]; then - mkdir ../exec -fi - -cd ./fv3nc2nemsio.fd - -LIBnetcdf=`$NETCDF/bin/nf-config --flibs` -INCnetcdf=`$NETCDF/bin/nf-config --fflags` -export NETCDF_LDFLAGS=$LIBnetcdf -export NETCDF_INCLUDE=$INCnetcdf - -$FCMP $FFLAGS -c kinds.f90 -$FCMP $FFLAGS -c constants.f90 -$FCMP $FFLAGS $NETCDF_INCLUDE -I $NEMSIO_INC -c fv3_module.f90 -$FCMP $FFLAGS $NETCDF_INCLUDE -I $NEMSIO_INC -I. -o fv3nc2nemsio.x fv3_main.f90 fv3_module.o $NETCDF_LDFLAGS $NEMSIO_LIB $BACIO_LIB4 $W3NCO_LIBd -L$HDF5/lib -lhdf5_hl -lhdf5 -lz - -rm -f *.o *.mod - -cd $cwd -mv fv3nc2nemsio.fd/fv3nc2nemsio.x ../exec/. - -exit diff --git a/sorc/build_gaussian_sfcanl.sh b/sorc/build_gaussian_sfcanl.sh deleted file mode 100755 index bfb0826edd..0000000000 --- a/sorc/build_gaussian_sfcanl.sh +++ /dev/null @@ -1,22 +0,0 @@ -#! /usr/bin/env bash -set -eux - -source ./machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` - -USE_PREINST_LIBS=${USE_PREINST_LIBS:-"true"} -if [ $USE_PREINST_LIBS = true ]; then - export MOD_PATH=/scratch3/NCEPDEV/nwprod/lib/modulefiles - source ../modulefiles/fv3gfs/gaussian_sfcanl.$target > /dev/null 2>&1 -else - export MOD_PATH=${cwd}/lib/modulefiles - if [ $target = wcoss_cray ]; then - source ../modulefiles/fv3gfs/gaussian_sfcanl.${target}_userlib > /dev/null 2>&1 - else - source ../modulefiles/fv3gfs/gaussian_sfcanl.$target > /dev/null 2>&1 - fi -fi -module list - -cd ${cwd}/gaussian_sfcanl.fd -./makefile.sh diff --git a/sorc/build_gdas.sh b/sorc/build_gdas.sh new file mode 100755 index 0000000000..b1a17c33dd --- /dev/null +++ b/sorc/build_gdas.sh @@ -0,0 +1,30 @@ +#! /usr/bin/env bash +set -eux + +OPTIND=1 +while getopts ":j:dv" option; do + case "${option}" in + d) export BUILD_TYPE="DEBUG";; + j) export BUILD_JOBS=${OPTARG};; + v) export BUILD_VERBOSE="YES";; + :) + echo "[${BASH_SOURCE[0]}]: ${option} requires an argument" + usage + ;; + *) + echo "[${BASH_SOURCE[0]}]: Unrecognized option: ${option}" + usage + ;; + esac +done +shift $((OPTIND-1)) + +# TODO: GDASApp does not presently handle BUILD_TYPE + +BUILD_TYPE=${BUILD_TYPE:-"Release"} \ +BUILD_VERBOSE=${BUILD_VERBOSE:-"NO"} \ +BUILD_JOBS="${BUILD_JOBS:-8}" \ +WORKFLOW_BUILD="ON" \ +./gdas.cd/build.sh + +exit diff --git a/sorc/build_gfs_bufrsnd.sh b/sorc/build_gfs_bufrsnd.sh deleted file mode 100755 index 70a3b4295b..0000000000 --- a/sorc/build_gfs_bufrsnd.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh -set -eux - -source ./machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` - -USE_PREINST_LIBS=${USE_PREINST_LIBS:-"true"} -if [ $USE_PREINST_LIBS = true ]; then - source ../modulefiles/gfs_bufr.$target > /dev/null 2>&1 - else - export MOD_PATH=${cwd}/lib/modulefiles - if [ $target = wcoss_cray ]; then - source ../modulefiles/gfs_bufr.${target}_userlib > /dev/null 2>&1 - else - source ../modulefiles/gfs_bufr.$target > /dev/null 2>&1 - fi - fi - -# Check final exec folder exists -if [ ! -d "../exec" ]; then - mkdir ../exec -fi - -if [ -f gfs_bufr.fd/getncdimlen ]; then - cp gfs_bufr.fd/getncdimlen ../exec - fi -echo "compiling ...." -# Compile codes under /sorc -compile1='gfs_bufr tocsbufr' - -for comp in $compile1 -do - echo "Compiling ${comp}" - cd $cwd/${comp}.fd - make -f makefile_module clean - make -f makefile_module -done - -echo "Build complete" diff --git a/sorc/build_gfs_fbwndgfs.sh b/sorc/build_gfs_fbwndgfs.sh deleted file mode 100755 index 9d5a2888f0..0000000000 --- a/sorc/build_gfs_fbwndgfs.sh +++ /dev/null @@ -1,29 +0,0 @@ -#! /usr/bin/env bash -set -eux - -source ./machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` - -USE_PREINST_LIBS=${USE_PREINST_LIBS:-"true"} -if [ $USE_PREINST_LIBS = true ]; then - export MOD_PATH=/scratch3/NCEPDEV/nwprod/lib/modulefiles - source ../modulefiles/gfs_fbwndgfs.$target > /dev/null 2>&1 -else - export MOD_PATH=${cwd}/lib/modulefiles - if [ $target = wcoss_cray ]; then - source ../modulefiles/gfs_fbwndgfs.${target}_userlib > /dev/null 2>&1 - else - source ../modulefiles/gfs_fbwndgfs.$target > /dev/null 2>&1 - fi -fi -module list - -# Check final exec folder exists -if [ ! -d "../exec" ]; then - mkdir ../exec -fi - -cd fbwndgfs.fd -make -f makefile.GENERIC -make -f makefile.GENERIC clean -mv fbwndgfs ../../exec/ diff --git a/sorc/build_gfs_util.sh b/sorc/build_gfs_util.sh deleted file mode 100755 index 2ea60a59aa..0000000000 --- a/sorc/build_gfs_util.sh +++ /dev/null @@ -1,21 +0,0 @@ -#! /usr/bin/env bash -set -eux - -source ./machine-setup.sh > /dev/null 2>&1 -export dir=` pwd ` - -cd ../util/sorc - -# Check for gfs_util folders exist -if [ ! -d "./mkgfsawps.fd" ]; then - echo " " - echo " GFS_UTIL folders DO NOT exist " - echo " " - exit -fi - -echo "" -echo " Building ... Executables for GFS_UTILITIES " -echo "" - -source ./compile_gfs_util_wcoss.sh diff --git a/sorc/build_gfs_utils.sh b/sorc/build_gfs_utils.sh new file mode 100755 index 0000000000..09bd4a9656 --- /dev/null +++ b/sorc/build_gfs_utils.sh @@ -0,0 +1,49 @@ +#! /usr/bin/env bash +set -eux + +function usage() { + cat << EOF +Builds the GFS utility programs. + +Usage: ${BASH_SOURCE[0]} [-d][-h][-j n][-v] + -d: + Build with debug options + -h: + Print this help message and exit + -j: + Build with n build jobs + -v: + Turn on verbose output +EOF + exit 1 +} + +cwd=$(pwd) + +OPTIND=1 +while getopts ":j:dvh" option; do + case "${option}" in + d) export BUILD_TYPE="DEBUG";; + v) export BUILD_VERBOSE="YES";; + j) export BUILD_JOBS="${OPTARG}";; + h) + usage + ;; + :) + echo "[${BASH_SOURCE[0]}]: ${option} requires an argument" + usage + ;; + *) + echo "[${BASH_SOURCE[0]}]: Unrecognized option: ${option}" + usage + ;; + esac +done +shift $((OPTIND-1)) + +BUILD_TYPE=${BUILD_TYPE:-"Release"} \ +BUILD_VERBOSE=${BUILD_VERBOSE:-"NO"} \ +BUILD_JOBS=${BUILD_JOBS:-8} \ +"${cwd}/gfs_utils.fd/ush/build.sh" + +exit diff --git a/sorc/build_gfs_wafs.sh b/sorc/build_gfs_wafs.sh deleted file mode 100755 index ceff4eae67..0000000000 --- a/sorc/build_gfs_wafs.sh +++ /dev/null @@ -1,22 +0,0 @@ -#! /usr/bin/env bash -set -eux - -source ./machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` - -USE_PREINST_LIBS=${USE_PREINST_LIBS:-"true"} -if [ $USE_PREINST_LIBS = true ]; then - export MOD_PATH=/scratch3/NCEPDEV/nwprod/lib/modulefiles -else - export MOD_PATH=${cwd}/lib/modulefiles -fi - -# Check final exec folder exists -if [ ! -d "../exec" ]; then - mkdir ../exec -fi - -cd gfs_wafs.fd/sorc -sh build_wafs.sh - -exit diff --git a/sorc/build_gldas.sh b/sorc/build_gldas.sh deleted file mode 100755 index e8162d3f4f..0000000000 --- a/sorc/build_gldas.sh +++ /dev/null @@ -1,23 +0,0 @@ -#! /usr/bin/env bash -set -eux - -source ./machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` - -USE_PREINST_LIBS=${USE_PREINST_LIBS:-"true"} -if [ $USE_PREINST_LIBS = true ]; then - export MOD_PATH=/scratch3/NCEPDEV/nwprod/lib/modulefiles -else - export MOD_PATH=${cwd}/lib/modulefiles -fi - -# Check final exec folder exists -if [ ! -d "../exec" ]; then - mkdir ../exec -fi - -cd gldas.fd/sorc -./build_all_gldas.sh - -exit - diff --git a/sorc/build_gsi.sh b/sorc/build_gsi.sh deleted file mode 100755 index f5f938a161..0000000000 --- a/sorc/build_gsi.sh +++ /dev/null @@ -1,26 +0,0 @@ -#! /usr/bin/env bash -set -eux - -source ./machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` - -USE_PREINST_LIBS=${USE_PREINST_LIBS:-"true"} -if [ $USE_PREINST_LIBS = true ]; then - export MOD_PATH=/scratch3/NCEPDEV/nwprod/lib/modulefiles -else - export MOD_PATH=${cwd}/lib/modulefiles -fi - -gsitarget=$target -[[ "$target" == wcoss_cray ]] && gsitarget=cray - -# Check final exec folder exists -if [ ! -d "../exec" ]; then - mkdir ../exec -fi - -cd gsi.fd/ush/ -./build_all_cmake.sh "PRODUCTION" "$cwd/gsi.fd" - -exit - diff --git a/sorc/build_gsi_enkf.sh b/sorc/build_gsi_enkf.sh new file mode 100755 index 0000000000..9ba278e3ec --- /dev/null +++ b/sorc/build_gsi_enkf.sh @@ -0,0 +1,31 @@ +#! /usr/bin/env bash +set -eux + +OPTIND=1 +while getopts ":j:dv" option; do + case "${option}" in + d) export BUILD_TYPE="DEBUG";; + j) export BUILD_JOBS="${OPTARG}";; + v) export BUILD_VERBOSE="YES";; + :) + echo "[${BASH_SOURCE[0]}]: ${option} requires an argument" + usage + ;; + *) + echo "[${BASH_SOURCE[0]}]: Unrecognized option: ${option}" + usage + ;; + esac +done +shift $((OPTIND-1)) + +BUILD_TYPE=${BUILD_TYPE:-"Release"} \ +BUILD_VERBOSE=${BUILD_VERBOSE:-"NO"} \ +BUILD_JOBS=${BUILD_JOBS:-8} \ +GSI_MODE=GFS \ +ENKF_MODE=GFS \ +REGRESSION_TESTS=NO \ +./gsi_enkf.fd/ush/build.sh + +exit + diff --git a/sorc/build_gsi_monitor.sh b/sorc/build_gsi_monitor.sh new file mode 100755 index 0000000000..3de1262aac --- /dev/null +++ b/sorc/build_gsi_monitor.sh @@ -0,0 +1,29 @@ +#! /usr/bin/env bash +set -eux + +cwd=$(pwd) + +OPTIND=1 +while getopts ":j:dv" option; do + case "${option}" in + d) export BUILD_TYPE="DEBUG";; + j) export BUILD_JOBS="${OPTARG}";; + v) export BUILD_VERBOSE="YES";; + :) + echo "[${BASH_SOURCE[0]}]: ${option} requires an argument" + usage + ;; + *) + echo "[${BASH_SOURCE[0]}]: Unrecognized option: ${option}" + usage + ;; + esac +done +shift $((OPTIND-1)) + +BUILD_TYPE=${BUILD_TYPE:-"Release"} \ +BUILD_VERBOSE=${BUILD_VERBOSE:-"NO"} \ +BUILD_JOBS=${BUILD_JOBS:-8} \ +"${cwd}/gsi_monitor.fd/ush/build.sh" + +exit diff --git a/sorc/build_gsi_utils.sh b/sorc/build_gsi_utils.sh new file mode 100755 index 0000000000..81eab0f628 --- /dev/null +++ b/sorc/build_gsi_utils.sh @@ -0,0 +1,30 @@ +#! /usr/bin/env bash +set -eux + +cwd=$(pwd) + +OPTIND=1 +while getopts ":j:dv" option; do + case "${option}" in + d) export BUILD_TYPE="DEBUG";; + j) export BUILD_JOBS="${OPTARG}";; + v) export BUILD_VERBOSE="YES";; + :) + echo "[${BASH_SOURCE[0]}]: ${option} requires an argument" + usage + ;; + *) + echo "[${BASH_SOURCE[0]}]: Unrecognized option: ${option}" + usage + ;; + esac +done +shift $((OPTIND-1)) + +BUILD_TYPE=${BUILD_TYPE:-"Release"} \ +BUILD_VERBOSE=${BUILD_VERBOSE:-"NO"} \ +BUILD_JOBS=${BUILD_JOBS:-8} \ +UTIL_OPTS="-DBUILD_UTIL_ENKF_GFS=ON -DBUILD_UTIL_NCIO=ON" \ +"${cwd}/gsi_utils.fd/ush/build.sh" + +exit diff --git a/sorc/build_libs.sh b/sorc/build_libs.sh deleted file mode 100755 index 31e158c1fc..0000000000 --- a/sorc/build_libs.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/bin/sh -set -eux - -source ./machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` - -# -# Clean lib directory (libraries, modulefiles and incmod) -# -cd $cwd/lib -rm -rf libpng* libjasper* lib*.a incmod/* modulefiles/* - -# -# Optional install, first independent libraries: -# - -# --- first choose BUFR version (different on different machine) -# --- hopefully this will lead to single version in the future -if [ $target = wcoss_cray ]; then - bufr_ver=v11.0.1 -fi -# -------------------------------------------------------------- - -for lib in \ - bacio_v2.0.2 \ - bufr_${bufr_ver} \ - crtm_v2.0.6 \ - g2tmpl_v1.3.0 \ - gfsio_v1.1.0 \ - ip_v2.0.0 \ - ip_v3.0.0 \ - jasper-1.900.1 \ - landsfcutil_v2.1.0 \ - nemsio_v2.2.3 \ - png-1.2.44 \ - sfcio_v1.0.0 \ - sigio_v2.0.1 \ - sp_v2.0.2 \ - w3nco_v2.0.6 \ - z-1.2.6 -do - cd $cwd/lib/sorc/$lib - ./build.sh - cd $cwd -done - -# -# Optional install, now libraries depending on previously installed libs: -# -for lib in \ - w3emc_v2.2.0 \ - nemsiogfs_v2.0.1 \ - g2c_v1.5.0 \ - g2_v3.1.0 -do - cd $cwd/lib/sorc/$lib - ./build.sh - cd $cwd -done - -exit diff --git a/sorc/build_ncep_post.sh b/sorc/build_ncep_post.sh deleted file mode 100755 index 5bbc2f680a..0000000000 --- a/sorc/build_ncep_post.sh +++ /dev/null @@ -1,20 +0,0 @@ -#! /usr/bin/env bash -set -eux - -source ./machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` - -USE_PREINST_LIBS=${USE_PREINST_LIBS:-"true"} -if [ $USE_PREINST_LIBS = true ]; then - export MOD_PATH=/scratch3/NCEPDEV/nwprod/lib/modulefiles -else - export MOD_PATH=${cwd}/lib/modulefiles -fi - -# Check final exec folder exists -if [ ! -d "../exec" ]; then - mkdir ../exec -fi - -cd gfs_post.fd/sorc -sh build_ncep_post.sh diff --git a/sorc/build_regrid_nemsio.sh b/sorc/build_regrid_nemsio.sh deleted file mode 100755 index 894ab5c94b..0000000000 --- a/sorc/build_regrid_nemsio.sh +++ /dev/null @@ -1,48 +0,0 @@ -#! /usr/bin/env bash -set -eux - -source ./machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` - -USE_PREINST_LIBS=${USE_PREINST_LIBS:-"true"} -if [ $USE_PREINST_LIBS = true ]; then - export MOD_PATH=/scratch3/NCEPDEV/nwprod/lib/modulefiles - source ../modulefiles/modulefile.regrid_nemsio.$target > /dev/null 2>&1 -else - export MOD_PATH=${cwd}/lib/modulefiles - if [ $target = wcoss_cray ]; then - source ../modulefiles/modulefile.regrid_nemsio.${target}_userlib > /dev/null 2>&1 - else - source ../modulefiles/modulefile.regrid_nemsio.$target > /dev/null 2>&1 - fi -fi - -# Check final exec folder exists -if [ ! -d "../exec" ]; then - mkdir ../exec -fi - -cd ./regrid_nemsio.fd - -export F90=${FCMP} -export LD=${FCMP} -export F77=${FCMP} - -export FCFFLAGS="" # "-convert native -assume byterecl -heap-arrays -mcmodel=large -shared-intel" -export LDFLAGS="${FCFFLAGS}" -export OPTIMIZATION="-O3 -xHOST" #-axCORE-AVX2,AVX -xSSE4.2 -O3 -export DEBUG="-traceback -g" #-O0 #-C #-fp-stack-check #-check all -fp-stack-check - -if [ $target != hera ]; then - LIBnetcdf=`$NETCDF/bin/nf-config --flibs` - INCnetcdf=`$NETCDF/bin/nf-config --fflags` - export NETCDF_LDFLAGS=$LIBnetcdf - export NETCDF_INCLUDE=$INCnetcdf -fi - -make -f Makefile clean -make -f Makefile -make -f Makefile install -make -f Makefile clean - -exit diff --git a/sorc/build_tropcy_NEMS.sh b/sorc/build_tropcy_NEMS.sh deleted file mode 100755 index dc3f825def..0000000000 --- a/sorc/build_tropcy_NEMS.sh +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/sh -# -# 07052015 E.Mirvis - made build more universal - environmental module based (see readme) -# EMC/NCEP/NOAA -# -# excutables created from build_tropcy.sh: -# 1) relocate_mv_nvortex.fd/relocate_mv_nvortex -# 2) vint.fd/vint.x -# 3) tave.fd/tave.x -# 4) syndat_qctropcy.fd/syndat_qctropcy -# 5) syndat_maksynrc.fd/syndat_maksynrc -# 6) syndat_getjtbul.fd/syndat_getjtbul -# 7) supvit.fd/supvit -# -set -eux - -source ./machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` - -# Check final exec folder exists -if [ ! -d "../exec" ]; then - mkdir ../exec -fi - -USE_PREINST_LIBS=${USE_PREINST_LIBS:-"true"} -if [ $USE_PREINST_LIBS = true ]; then - export MOD_PATH=/scratch3/NCEPDEV/nwprod/lib/modulefiles -else - export MOD_PATH=${cwd}/lib/modulefiles -fi - -source ../modulefiles/modulefile.storm_reloc_v6.0.0.$target -export FC=mpiifort - -export INC="${G2_INCd} -I${NEMSIO_INC}" -export LIBS="${W3EMC_LIBd} ${W3NCO_LIBd} ${BACIO_LIB4} ${G2_LIBd} ${PNG_LIB} ${JASPER_LIB} ${Z_LIB}" -export LIBS_SUP="${W3EMC_LIBd} ${W3NCO_LIBd}" -echo lset -echo lset - export LIBS_REL="${W3NCO_LIB4}" -export LIBS_REL="${NEMSIOGFS_LIB} ${NEMSIO_LIB} ${LIBS_REL} ${SIGIO_LIB4} ${BACIO_LIB4} ${SP_LIBd}" -export LIBS_SIG="${SIGIO_INC4}" -export LIBS_SYN_GET="${W3NCO_LIB4}" -export LIBS_SYN_MAK="${W3NCO_LIB4} ${BACIO_LIB4}" -export LIBS_SYN_QCT="${W3NCO_LIB8}" -echo $LIBS_REL -echo NEXT - -#cd relocate_mv_nvortex.fd -# make clean -# make -f makefile_$targetx -# make install -# make clean -# cd ../ -cd vint.fd - make clean - make -f makefile - make install - cd ../ -cd tave.fd - make clean - make -f makefile - make install - cd ../ -cd syndat_qctropcy.fd - make clean - make -f makefile - make install - make clean - cd ../ -cd syndat_maksynrc.fd - make clean - make -f makefile - make install - make clean - cd ../ -cd syndat_getjtbul.fd - make clean - make -f makefile - make install - make clean - cd ../ -cd supvit.fd - make clean - make -f makefile - make install - make clean - cd ../ - -exit diff --git a/sorc/build_ufs.sh b/sorc/build_ufs.sh new file mode 100755 index 0000000000..3e3f879f1a --- /dev/null +++ b/sorc/build_ufs.sh @@ -0,0 +1,62 @@ +#! /usr/bin/env bash +set -eux + +cwd=$(pwd) + +# Default settings +APP="S2SWA" +CCPP_SUITES="FV3_GFS_v17_p8_ugwpv1,FV3_GFS_v17_coupled_p8_ugwpv1" # TODO: does the g-w need to build with all these CCPP_SUITES? + +while getopts ":da:j:v" option; do + case "${option}" in + d) BUILD_TYPE="DEBUG";; + a) APP="${OPTARG}";; + j) BUILD_JOBS="${OPTARG}";; + v) export BUILD_VERBOSE="YES";; + :) + echo "[${BASH_SOURCE[0]}]: ${option} requires an argument" + ;; + *) + echo "[${BASH_SOURCE[0]}]: Unrecognized option: ${option}" + ;; + esac +done + +cd "${cwd}/ufs_model.fd" + +source "./tests/detect_machine.sh" +source "./tests/module-setup.sh" + +MAKE_OPT="-DAPP=${APP} -D32BIT=ON -DCCPP_SUITES=${CCPP_SUITES}" +[[ ${BUILD_TYPE:-"Release"} = "DEBUG" ]] && MAKE_OPT+=" -DDEBUG=ON" +COMPILE_NR=0 +CLEAN_BEFORE=YES +CLEAN_AFTER=NO + +if [[ "${MACHINE_ID}" != "noaacloud" ]]; then + ./tests/compile.sh "${MACHINE_ID}" "${MAKE_OPT}" "${COMPILE_NR}" "intel" "${CLEAN_BEFORE}" "${CLEAN_AFTER}" + mv "./tests/fv3_${COMPILE_NR}.exe" ./tests/ufs_model.x + mv "./tests/modules.fv3_${COMPILE_NR}.lua" ./tests/modules.ufs_model.lua + cp "./modulefiles/ufs_common.lua" ./tests/ufs_common.lua +else + + if [[ "${PW_CSP:-}" == "aws" ]]; then + set +x + # TODO: This will need to be addressed further when the EPIC stacks are available/supported. + module use /contrib/spack-stack/envs/ufswm/install/modulefiles/Core + module load stack-intel + module load stack-intel-oneapi-mpi + module load ufs-weather-model-env/1.0.0 + # TODO: It is still uncertain why this is the only module that is + # missing; check the spack build as this needed to be added manually. + module load w3emc/2.9.2 # TODO: This has similar issues for the EPIC stack. + module list + set -x + fi + + export CMAKE_FLAGS="${MAKE_OPT}" + BUILD_JOBS=${BUILD_JOBS:-8} ./build.sh + mv "${cwd}/ufs_model.fd/build/ufs_model" "${cwd}/ufs_model.fd/tests/ufs_model.x" +fi + +exit 0 diff --git a/sorc/build_ufs_utils.sh b/sorc/build_ufs_utils.sh index 292145d764..e78ca3c180 100755 --- a/sorc/build_ufs_utils.sh +++ b/sorc/build_ufs_utils.sh @@ -1,15 +1,30 @@ #! /usr/bin/env bash set -eux -source ./machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` +OPTIND=1 +while getopts ":j:dv" option; do + case "${option}" in + j) export BUILD_JOBS="${OPTARG}";; + v) export BUILD_VERBOSE="YES";; + :) + echo "[${BASH_SOURCE[0]}]: ${option} requires an argument" + usage + ;; + *) + echo "[${BASH_SOURCE[0]}]: Unrecognized option: ${option}" + usage + ;; + esac +done +shift $((OPTIND-1)) -if [ $target = wcoss_dell_p3 ]; then target=dell; fi -if [ $target = wcoss_cray ]; then target=cray; fi +script_dir=$(dirname "${BASH_SOURCE[0]}") +cd "${script_dir}/ufs_utils.fd" || exit 1 -cd ufs_utils.fd/sorc - -./build_all_ufs_utils.sh +CMAKE_OPTS="-DGFS=ON" \ +BUILD_JOBS=${BUILD_JOBS:-8} \ +BUILD_VERBOSE=${BUILD_VERBOSE:-} \ +./build_all.sh exit diff --git a/sorc/build_upp.sh b/sorc/build_upp.sh new file mode 100755 index 0000000000..a55e96ebc8 --- /dev/null +++ b/sorc/build_upp.sh @@ -0,0 +1,30 @@ +#! /usr/bin/env bash +set -eux + +script_dir=$(dirname "${BASH_SOURCE[0]}") +cd "${script_dir}" || exit 1 + +OPTIND=1 +_opts="" +while getopts ":dv" option; do + case "${option}" in + d) _opts+="-d ";; + v) _opts+="-v ";; + :) + echo "[${BASH_SOURCE[0]}]: ${option} requires an argument" + ;; + *) + echo "[${BASH_SOURCE[0]}]: Unrecognized option: ${option}" + ;; + esac +done +shift $((OPTIND-1)) + +# Check final exec folder exists +if [[ ! -d "../exec" ]]; then + mkdir ../exec +fi + +cd ufs_model.fd/FV3/upp/tests +# shellcheck disable=SC2086 +./compile_upp.sh ${_opts} diff --git a/sorc/build_ww3prepost.sh b/sorc/build_ww3prepost.sh new file mode 100755 index 0000000000..919afaacb3 --- /dev/null +++ b/sorc/build_ww3prepost.sh @@ -0,0 +1,117 @@ +#! /usr/bin/env bash +set -x + +script_dir=$(dirname "${BASH_SOURCE[0]}") +cd "${script_dir}" || exit 1 + +# Default settings +APP="S2SWA" + +while getopts ":j:a:v" option; do + case "${option}" in + a) APP="${OPTARG}";; + j) BUILD_JOBS="${OPTARG}";; + v) export BUILD_VERBOSE="YES";; + :) + echo "[${BASH_SOURCE[0]}]: ${option} requires an argument" + usage + ;; + *) + echo "[${BASH_SOURCE[0]}]: Unrecognized option: ${option}" + usage + ;; + esac +done + + +# Determine which switch to use +if [[ "${APP}" == "ATMW" ]]; then + ww3switch="model/esmf/switch" +else + ww3switch="model/bin/switch_meshcap" +fi + + +# Check final exec folder exists +if [[ ! -d "../exec" ]]; then + mkdir ../exec +fi + +finalexecdir="$( pwd -P )/../exec" + +#Determine machine and load modules +set +x +source "${script_dir}/ufs_model.fd/tests/detect_machine.sh" +source "${script_dir}/ufs_model.fd/tests/module-setup.sh" +module use "${script_dir}/ufs_model.fd/modulefiles" +module load "ufs_${MACHINE_ID}.intel" +set -x + +#Set WW3 directory, switch, prep and post exes +cd ufs_model.fd/WW3 || exit 1 +WW3_DIR=$( pwd -P ) +export WW3_DIR +export SWITCHFILE="${WW3_DIR}/${ww3switch}" + +# Build exes for prep jobs and post jobs: +prep_exes="ww3_grid ww3_prep ww3_prnc ww3_grid" +post_exes="ww3_outp ww3_outf ww3_outp ww3_gint ww3_ounf ww3_ounp ww3_grib" + +#create build directory: +path_build="${WW3_DIR}/build_SHRD" +[[ -d "${path_build}" ]] && rm -rf "${path_build}" +mkdir -p "${path_build}" || exit 1 +cd "${path_build}" || exit 1 +echo "Forcing a SHRD build" + +cat "${SWITCHFILE}" > "${path_build}/tempswitch" + +sed -e "s/DIST/SHRD/g"\ + -e "s/OMPG / /g"\ + -e "s/OMPH / /g"\ + -e "s/MPIT / /g"\ + -e "s/MPI / /g"\ + -e "s/B4B / /g"\ + -e "s/PDLIB / /g"\ + -e "s/NOGRB/NCEP2/g"\ + "${path_build}/tempswitch" > "${path_build}/switch" +rm "${path_build}/tempswitch" + +echo "Switch file is ${path_build}/switch with switches:" +cat "${path_build}/switch" + +#Build executables: +cmake "${WW3_DIR}" -DSWITCH="${path_build}/switch" -DCMAKE_INSTALL_PREFIX=install +rc=$? +if (( rc != 0 )); then + echo "Fatal error in cmake." + exit "${rc}" +fi +make -j "${BUILD_JOBS:-8}" +rc=$? +if (( rc != 0 )); then + echo "Fatal error in make." + exit "${rc}" +fi +make install +if (( rc != 0 )); then + echo "Fatal error in make install." + exit "${rc}" +fi + +# Copy to top-level exe directory +for prog in ${prep_exes} ${post_exes}; do + cp "${path_build}/install/bin/${prog}" "${finalexecdir}/" + rc=$? + if (( rc != 0 )); then + echo "FATAL: Unable to copy ${path_build}/${prog} to ${finalexecdir} (Error code ${rc})" + exit "${rc}" + fi +done + +#clean-up build directory: +echo "executables are in ${finalexecdir}" +echo "cleaning up ${path_build}" +rm -rf "${path_build}" + +exit 0 diff --git a/sorc/checkout.sh b/sorc/checkout.sh index f61a2427f9..25680df2c0 100755 --- a/sorc/checkout.sh +++ b/sorc/checkout.sh @@ -1,115 +1,184 @@ -#!/bin/sh -set -xue - -while getopts "o" option; -do - case $option in - o) - echo "Received -o flag for optional checkout of GTG, will check out GTG with EMC_post" - checkout_gtg="YES" - ;; - :) - echo "option -$OPTARG needs an argument" - ;; - *) - echo "invalid option -$OPTARG, exiting..." - exit - ;; - esac -done +#! /usr/bin/env bash -topdir=$(pwd) -echo $topdir - -echo fv3gfs checkout ... -if [[ ! -d fv3gfs.fd ]] ; then - rm -f ${topdir}/checkout-fv3gfs.log - git clone https://github.com/ufs-community/ufs-weather-model fv3gfs.fd >> ${topdir}/checkout-fv3gfs.log 2>&1 - cd fv3gfs.fd - git checkout GFS.v16.0.10 - git submodule update --init --recursive - cd ${topdir} -else - echo 'Skip. Directory fv3gfs.fd already exists.' -fi +set +x +set -u -echo gsi checkout ... -if [[ ! -d gsi.fd ]] ; then - rm -f ${topdir}/checkout-gsi.log - git clone --recursive https://github.com/NOAA-EMC/GSI.git gsi.fd >> ${topdir}/checkout-gsi.log 2>&1 - cd gsi.fd - git checkout 56652c2fe2879a37666abefaf51608ed38f2d814 - git submodule update - cd ${topdir} -else - echo 'Skip. Directory gsi.fd already exists.' -fi +function usage() { + cat << EOF +Clones and checks out external components necessary for + global workflow. If the directory already exists, skip + cloning and just check out the requested version (unless + -c option is used). -echo gldas checkout ... -if [[ ! -d gldas.fd ]] ; then - rm -f ${topdir}/checkout-gldas.log - git clone https://github.com/NOAA-EMC/GLDAS gldas.fd >> ${topdir}/checkout-gldas.fd.log 2>&1 - cd gldas.fd - git checkout gldas_gfsv16_release.v1.6.0 - cd ${topdir} -else - echo 'Skip. Directory gldas.fd already exists.' -fi +Usage: ${BASH_SOURCE[0]} [-c][-h][-m ufs_hash] + -c: + Create a fresh clone (delete existing directories) + -h: + Print this help message and exit + -m ufs_hash: + Check out this UFS hash instead of the default + -g: + Check out GSI for GSI-based DA + -u: + Check out GDASApp for UFS-based DA +EOF + exit 1 +} -echo ufs_utils checkout ... -if [[ ! -d ufs_utils.fd ]] ; then - rm -f ${topdir}/checkout-ufs_utils.log - git clone https://github.com/NOAA-EMC/UFS_UTILS.git ufs_utils.fd >> ${topdir}/checkout-ufs_utils.fd.log 2>&1 - cd ufs_utils.fd - git checkout release/ops-gfsv16 - cd ${topdir} -else - echo 'Skip. Directory ufs_utils.fd already exists.' -fi +function checkout() { + # + # Clone or fetch repo, then checkout specific hash and update submodules + # + # Environment variables: + # topdir [default: $(pwd)]: parent directory to your checkout + # logdir [default: $(pwd)]: where you want logfiles written + # CLEAN [default: NO]: whether to delete existing directories and create a fresh clone + # + # Usage: checkout + # + # Arguments + # dir: Directory for the clone + # remote: URL of the remote repository + # version: Commit to check out; should always be a speciifc commit (hash or tag), not a branch + # + # Returns + # Exit code of last failed command, or 0 if successful + # + + dir="$1" + remote="$2" + version="$3" + cpus="${4:-1}" # Default 1 thread + recursive=${5:-"YES"} -echo EMC_post checkout ... -if [[ ! -d gfs_post.fd ]] ; then - rm -f ${topdir}/checkout-gfs_post.log - git clone https://github.com/NOAA-EMC/EMC_post.git gfs_post.fd >> ${topdir}/checkout-gfs_post.log 2>&1 - cd gfs_post.fd - git checkout upp_gfsv16_release.v1.0.13 - ################################################################################ - # checkout_gtg - ## yes: The gtg code at NCAR private repository is available for ops. GFS only. - # Only approved persons/groups have access permission. - ## no: No need to check out gtg code for general GFS users. - ################################################################################ - checkout_gtg=${checkout_gtg:-"NO"} - if [[ ${checkout_gtg} == "YES" ]] ; then - ./manage_externals/checkout_externals - cp sorc/post_gtg.fd/*f90 sorc/ncep_post.fd/. - cp sorc/post_gtg.fd/gtg.config.gfs parm/. + name=$(echo "${dir}" | cut -d '.' -f 1) + echo "Performing checkout of ${name}" + + logfile="${logdir:-$(pwd)}/checkout_${name}.log" + + if [[ -f "${logfile}" ]]; then + rm "${logfile}" + fi + + cd "${topdir}" || exit 1 + if [[ -d "${dir}" && ${CLEAN} == "YES" ]]; then + echo "|-- Removing existing clone in ${dir}" + rm -Rf "${dir}" + fi + if [[ ! -d "${dir}" ]]; then + echo "|-- Cloning from ${remote} into ${dir}" + git clone "${remote}" "${dir}" >> "${logfile}" 2>&1 + status=$? + if ((status > 0)); then + echo " WARNING: Error while cloning ${name}" + echo + return "${status}" fi - cd ${topdir} -else - echo 'Skip. Directory gfs_post.fd already exists.' + cd "${dir}" || exit 1 + else + # Fetch any updates from server + cd "${dir}" || exit 1 + echo "|-- Fetching updates from ${remote}" + git fetch + fi + echo "|-- Checking out ${version}" + git checkout "${version}" >> "${logfile}" 2>&1 + status=$? + if ((status > 0)); then + echo " WARNING: Error while checking out ${version} in ${name}" + echo + return "${status}" + fi + if [[ "${recursive}" == "YES" ]]; then + echo "|-- Updating submodules (if any)" + git submodule update --init --recursive -j "${cpus}" >> "${logfile}" 2>&1 + status=$? + if ((status > 0)); then + echo " WARNING: Error while updating submodules of ${name}" + echo + return "${status}" + fi + fi + echo + return 0 +} + +# Set defaults for variables toggled by options +export CLEAN="NO" +checkout_gsi="NO" +checkout_gdas="NO" + +# Parse command line arguments +while getopts ":chgum:o" option; do + case ${option} in + c) + echo "Received -c flag, will delete any existing directories and start clean" + export CLEAN="YES" + ;; + g) + echo "Received -g flag for optional checkout of GSI-based DA" + checkout_gsi="YES" + ;; + h) usage;; + u) + echo "Received -u flag for optional checkout of UFS-based DA" + checkout_gdas="YES" + ;; + m) + echo "Received -m flag with argument, will check out ufs-weather-model hash ${OPTARG} instead of default" + ufs_model_hash=${OPTARG} + ;; + :) + echo "option -${OPTARG} needs an argument" + usage + ;; + *) + echo "invalid option -${OPTARG}, exiting..." + usage + ;; + esac +done +shift $((OPTIND-1)) + +topdir=$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd) +export topdir +export logdir="${topdir}/logs" +mkdir -p "${logdir}" + +# Setup lmod environment +source "${topdir}/../workflow/gw_setup.sh" + +# The checkout version should always be a speciifc commit (hash or tag), not a branch +errs=0 +# Checkout UFS submodules in parallel +checkout "ufs_model.fd" "https://github.com/ufs-community/ufs-weather-model" "${ufs_model_hash:-3ba8dff}" "8" & + +# Run all other checkouts simultaneously with just 1 core each to handle submodules. +checkout "wxflow" "https://github.com/NOAA-EMC/wxflow" "528f5ab" & +checkout "gfs_utils.fd" "https://github.com/NOAA-EMC/gfs-utils" "427d467" & +checkout "ufs_utils.fd" "https://github.com/ufs-community/UFS_UTILS.git" "892b693" & +checkout "verif-global.fd" "https://github.com/NOAA-EMC/EMC_verif-global.git" "c267780" & + +if [[ ${checkout_gsi} == "YES" ]]; then + checkout "gsi_enkf.fd" "https://github.com/NOAA-EMC/GSI.git" "c94bc72" "1" "NO" & fi -echo EMC_gfs_wafs checkout ... -if [[ ! -d gfs_wafs.fd ]] ; then - rm -f ${topdir}/checkout-gfs_wafs.log - git clone --recursive https://github.com/NOAA-EMC/EMC_gfs_wafs.git gfs_wafs.fd >> ${topdir}/checkout-gfs_wafs.log 2>&1 - cd gfs_wafs.fd - git checkout gfs_wafs.v6.0.4 - cd ${topdir} -else - echo 'Skip. Directory gfs_wafs.fd already exists.' +if [[ ${checkout_gdas} == "YES" ]]; then + checkout "gdas.cd" "https://github.com/NOAA-EMC/GDASApp.git" "f44a6d5" & fi -echo EMC_verif-global checkout ... -if [[ ! -d verif-global.fd ]] ; then - rm -f ${topdir}/checkout-verif-global.log - git clone --recursive https://github.com/NOAA-EMC/EMC_verif-global.git verif-global.fd >> ${topdir}/checkout-verif-global.log 2>&1 - cd verif-global.fd - git checkout verif_global_v1.10.1 - cd ${topdir} -else - echo 'Skip. Directory verif-global.fd already exist.' +if [[ ${checkout_gsi} == "YES" || ${checkout_gdas} == "YES" ]]; then + checkout "gsi_utils.fd" "https://github.com/NOAA-EMC/GSI-Utils.git" "f371890" & + checkout "gsi_monitor.fd" "https://github.com/NOAA-EMC/GSI-Monitor.git" "ae256c0" & fi -exit 0 +# Go through each PID and verify no errors were reported. +for checkout_pid in $(jobs -p); do + wait "${checkout_pid}" || errs=$((errs + $?)) +done + +if (( errs > 0 )); then + echo "WARNING: One or more errors encountered during checkout process, please check logs before building" +fi +echo +exit "${errs}" diff --git a/sorc/enkf_chgres_recenter.fd/.gitignore b/sorc/enkf_chgres_recenter.fd/.gitignore deleted file mode 100644 index 544aec4c42..0000000000 --- a/sorc/enkf_chgres_recenter.fd/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.exe -*.o -*.mod diff --git a/sorc/enkf_chgres_recenter.fd/driver.f90 b/sorc/enkf_chgres_recenter.fd/driver.f90 deleted file mode 100644 index 02a138ae8f..0000000000 --- a/sorc/enkf_chgres_recenter.fd/driver.f90 +++ /dev/null @@ -1,65 +0,0 @@ - program recenter - - use setup, only : program_setup - use interp, only : gaus_to_gaus, adjust_for_terrain - use input_data, only : read_input_data, & - read_vcoord_info - use output_data, only : set_output_grid, write_output_data - - implicit none - - call w3tagb('CHGRES_RECENTER',2018,0179,0055,'NP20') - - print*,"STARTING PROGRAM" - -!-------------------------------------------------------- -! Read configuration namelist. -!-------------------------------------------------------- - - call program_setup - -!-------------------------------------------------------- -! Read input grid data -!-------------------------------------------------------- - - call read_input_data - -!-------------------------------------------------------- -! Read vertical coordinate info -!-------------------------------------------------------- - - call read_vcoord_info - -!-------------------------------------------------------- -! Get output grid specs -!-------------------------------------------------------- - - call set_output_grid - -!-------------------------------------------------------- -! Interpolate data to output grid -!-------------------------------------------------------- - - call gaus_to_gaus - -!-------------------------------------------------------- -! Adjust output fields for differences between -! interpolated and external terrain. -!-------------------------------------------------------- - - call adjust_for_terrain - -!-------------------------------------------------------- -! Write output data to file. -!-------------------------------------------------------- - - call write_output_data - - print* - print*,"PROGRAM FINISHED NORMALLY!" - - call w3tage('CHGRES_RECENTER') - - stop - - end program recenter diff --git a/sorc/enkf_chgres_recenter.fd/input_data.f90 b/sorc/enkf_chgres_recenter.fd/input_data.f90 deleted file mode 100644 index 704aa58c8d..0000000000 --- a/sorc/enkf_chgres_recenter.fd/input_data.f90 +++ /dev/null @@ -1,383 +0,0 @@ - module input_data - - use nemsio_module - use utils - use setup - - implicit none - - private - - integer, public :: idvc, idsl, idvm, nvcoord - integer, public :: ntrac, ncldt,icldamt - integer, public :: ij_input, kgds_input(200) - integer(nemsio_intkind), public :: i_input, j_input, lev - integer(nemsio_intkind), public :: idate(7) - - logical, public :: gfdl_mp - - real, allocatable, public :: vcoord(:,:) - real, allocatable, public :: clwmr_input(:,:) - real, allocatable, public :: dzdt_input(:,:) - real, allocatable, public :: grle_input(:,:) - real, allocatable, public :: cldamt_input(:,:) - real, allocatable, public :: hgt_input(:) - real, allocatable, public :: icmr_input(:,:) - real, allocatable, public :: o3mr_input(:,:) - real, allocatable, public :: rwmr_input(:,:) - real, allocatable, public :: sfcp_input(:) - real, allocatable, public :: snmr_input(:,:) - real, allocatable, public :: spfh_input(:,:) - real, allocatable, public :: tmp_input(:,:) - real, allocatable, public :: ugrd_input(:,:) - real, allocatable, public :: vgrd_input(:,:) - - public :: read_input_data - public :: read_vcoord_info - - contains - - subroutine read_input_data - -!------------------------------------------------------------------------------------- -! Read input grid data from a nemsio file. -!------------------------------------------------------------------------------------- - - implicit none - - character(len=20) :: vlevtyp, vname - character(len=50), allocatable :: recname(:) - - integer(nemsio_intkind) :: vlev, iret, idum, nrec - integer :: n - - real(nemsio_realkind), allocatable :: dummy(:) - - type(nemsio_gfile) :: gfile - - call nemsio_init(iret) - - print* - print*,"OPEN INPUT FILE: ",trim(input_file) - call nemsio_open(gfile, input_file, "read", iret=iret) - if (iret /= 0) then - print*,"FATAL ERROR OPENING FILE: ",trim(input_file) - print*,"IRET IS: ", iret - call errexit(2) - endif - - print*,"GET INPUT FILE HEADER" - call nemsio_getfilehead(gfile, iret=iret, nrec=nrec, idate=idate, & - dimx=i_input, dimy=j_input, dimz=lev) - if (iret /= 0) goto 67 - - print*,'DIMENSIONS OF DATA ARE: ', i_input, j_input, lev - print*,'DATE OF DATA IS: ', idate - - ij_input = i_input * j_input - - allocate(recname(nrec)) - - call nemsio_getfilehead(gfile, iret=iret, recname=recname) - if (iret /= 0) goto 67 - - gfdl_mp = .false. ! Zhao-Carr MP - do n = 1, nrec - if (trim(recname(n)) == "icmr") then - gfdl_mp = .true. ! GFDL MP - exit - endif - enddo - - icldamt = 0 - do n = 1, nrec - if (trim(recname(n)) == "cld_amt") then - icldamt = 1 ! 3D cloud amount present - exit - endif - enddo - - call nemsio_getfilehead(gfile, iret=iret, idvc=idum) - if (iret /= 0) goto 67 - idvc = idum - print*,'IDVC IS: ', idvc - - call nemsio_getfilehead(gfile, iret=iret, idsl=idum) - if (iret /= 0) goto 67 - idsl = idum - print*,'IDSL IS: ', idsl - - call nemsio_getfilehead(gfile, iret=iret, idvm=idum) - if (iret /= 0) goto 67 - idvm = idum - print*,'IDVM IS: ', idvm - - if (gfdl_mp) then - ntrac = 7 + icldamt - ncldt = 5 - else - ntrac = 3 - ncldt = 1 - endif - - allocate(dummy(ij_input)) - - ! figure out the sign of delz - print*,"READ DELZ FOR SIGN CHECK" - vlev = 1 - vlevtyp = "mid layer" - vname = "delz" - call nemsio_readrecv(gfile, vname, vlevtyp, vlev, dummy, 0, iret) - if (iret /= 0) goto 67 - if ( sum(dummy) > 0 ) then - flipdelz = .false. - print*,"DELZ IS POSITIVE" - else - flipdelz = .true. - print*,"DELZ IS NEGATIVE" - end if - - print* - print*,"READ SURFACE PRESSURE" - vlev = 1 - vlevtyp = "sfc" - vname = "pres" - call nemsio_readrecv(gfile, vname, vlevtyp, vlev, dummy, 0, iret) - if (iret /= 0) goto 67 - - allocate(sfcp_input(ij_input)) - sfcp_input = dummy - print*,'MAX/MIN SURFACE PRESSURE: ',maxval(sfcp_input), minval(sfcp_input) - - print* - print*,"READ SURFACE HEIGHT" - vlev = 1 - vlevtyp = "sfc" - vname = "hgt" - call nemsio_readrecv(gfile, vname, vlevtyp, vlev, dummy, 0, iret) - if (iret /= 0) goto 67 - - allocate(hgt_input(ij_input)) - hgt_input = dummy - print*,'MAX/MIN SURFACE HEIGHT: ',maxval(hgt_input), minval(hgt_input) - - print* - print*,"READ U WIND" - vname = "ugrd" - vlevtyp = "mid layer" - allocate(ugrd_input(ij_input,lev)) - do vlev = 1, lev - call nemsio_readrecv(gfile, vname, vlevtyp, vlev, dummy, 0, iret) - if (iret /= 0) goto 67 - ugrd_input(:,vlev) = dummy - print*,'MAX/MIN U WIND AT LEVEL ',vlev, "IS: ", maxval(ugrd_input(:,vlev)), minval(ugrd_input(:,vlev)) - enddo - - print* - print*,"READ V WIND" - vname = "vgrd" - vlevtyp = "mid layer" - allocate(vgrd_input(ij_input,lev)) - do vlev = 1, lev - call nemsio_readrecv(gfile, vname, vlevtyp, vlev, dummy, 0, iret) - if (iret /= 0) goto 67 - vgrd_input(:,vlev) = dummy - print*,'MAX/MIN V WIND AT LEVEL ', vlev, "IS: ", maxval(vgrd_input(:,vlev)), minval(vgrd_input(:,vlev)) - enddo - - print* - print*,"READ TEMPERATURE" - vname = "tmp" - vlevtyp = "mid layer" - allocate(tmp_input(ij_input,lev)) - do vlev = 1, lev - call nemsio_readrecv(gfile, vname, vlevtyp, vlev, dummy, 0, iret) - if (iret /= 0) goto 67 - tmp_input(:,vlev) = dummy(:) - print*,'MAX/MIN TEMPERATURE AT LEVEL ', vlev, 'IS: ', maxval(tmp_input(:,vlev)), minval(tmp_input(:,vlev)) - enddo - - print* - print*,"READ SPECIFIC HUMIDITY" - vname = "spfh" - vlevtyp = "mid layer" - allocate(spfh_input(ij_input,lev)) - do vlev = 1, lev - call nemsio_readrecv(gfile, vname, vlevtyp, vlev, dummy, 0, iret) - if (iret /= 0) goto 67 - spfh_input(:,vlev) = dummy - print*,'MAX/MIN SPECIFIC HUMIDITY AT LEVEL ', vlev, 'IS: ', maxval(spfh_input(:,vlev)), minval(spfh_input(:,vlev)) - enddo - - print* - print*,"READ CLOUD LIQUID WATER" - vname = "clwmr" - vlevtyp = "mid layer" - allocate(clwmr_input(ij_input,lev)) - do vlev = 1, lev - call nemsio_readrecv(gfile, vname, vlevtyp, vlev, dummy, 0, iret) - if (iret /= 0) goto 67 - clwmr_input(:,vlev) = dummy - print*,'MAX/MIN CLOUD LIQUID WATER AT LEVEL ', vlev, 'IS: ', maxval(clwmr_input(:,vlev)), minval(clwmr_input(:,vlev)) - enddo - - print* - print*,"READ OZONE" - vname = "o3mr" - vlevtyp = "mid layer" - allocate(o3mr_input(ij_input,lev)) - do vlev = 1, lev - call nemsio_readrecv(gfile, vname, vlevtyp, vlev, dummy, 0, iret) - if (iret /= 0) goto 67 - o3mr_input(:,vlev) = dummy - print*,'MAX/MIN OZONE AT LEVEL ', vlev, 'IS: ', maxval(o3mr_input(:,vlev)), minval(o3mr_input(:,vlev)) - enddo - - print* - print*,"READ DZDT" - vname = "dzdt" - vlevtyp = "mid layer" - allocate(dzdt_input(ij_input,lev)) - do vlev = 1, lev - call nemsio_readrecv(gfile, vname, vlevtyp, vlev, dummy, 0, iret) - if (iret /= 0) goto 67 - dzdt_input(:,vlev) = dummy - print*,'MAX/MIN DZDT AT LEVEL ', vlev, 'IS: ', maxval(dzdt_input(:,vlev)), minval(dzdt_input(:,vlev)) - enddo - - if (gfdl_mp) then - - print* - print*,"READ RWMR" - vname = "rwmr" - vlevtyp = "mid layer" - allocate(rwmr_input(ij_input,lev)) - do vlev = 1, lev - call nemsio_readrecv(gfile, vname, vlevtyp, vlev, dummy, 0, iret) - if (iret /= 0) goto 67 - rwmr_input(:,vlev) = dummy - print*,'MAX/MIN RWMR AT LEVEL ', vlev, 'IS: ', maxval(rwmr_input(:,vlev)), minval(rwmr_input(:,vlev)) - enddo - - print* - print*,"READ ICMR" - vname = "icmr" - vlevtyp = "mid layer" - allocate(icmr_input(ij_input,lev)) - do vlev = 1, lev - call nemsio_readrecv(gfile, vname, vlevtyp, vlev, dummy, 0, iret) - if (iret /= 0) goto 67 - icmr_input(:,vlev) = dummy - print*,'MAX/MIN ICMR AT LEVEL ', vlev, 'IS: ', maxval(icmr_input(:,vlev)), minval(icmr_input(:,vlev)) - enddo - - print* - print*,"READ SNMR" - vname = "snmr" - vlevtyp = "mid layer" - allocate(snmr_input(ij_input,lev)) - do vlev = 1, lev - call nemsio_readrecv(gfile, vname, vlevtyp, vlev, dummy, 0, iret) - if (iret /= 0) goto 67 - snmr_input(:,vlev) = dummy - print*,'MAX/MIN SNMR AT LEVEL ', vlev, 'IS: ', maxval(snmr_input(:,vlev)), minval(snmr_input(:,vlev)) - enddo - - print* - print*,"READ GRLE" - vname = "grle" - vlevtyp = "mid layer" - allocate(grle_input(ij_input,lev)) - do vlev = 1, lev - call nemsio_readrecv(gfile, vname, vlevtyp, vlev, dummy, 0, iret) - if (iret /= 0) goto 67 - grle_input(:,vlev) = dummy - print*,'MAX/MIN GRLE AT LEVEL ', vlev, 'IS: ', maxval(grle_input(:,vlev)), minval(grle_input(:,vlev)) - enddo - - if (icldamt == 1) then - print* - print*,"READ CLD_AMT" - vname = "cld_amt" - vlevtyp = "mid layer" - allocate(cldamt_input(ij_input,lev)) - do vlev = 1, lev - write(6,*) 'read ',vname,' on ',vlev - call nemsio_readrecv(gfile, vname, vlevtyp, vlev, dummy, 0, iret) - if (iret /= 0) goto 67 - cldamt_input(:,vlev) = dummy - print*,'MAX/MIN CLD_AMT AT LEVEL ', vlev, 'IS: ', maxval(cldamt_input(:,vlev)), minval(cldamt_input(:,vlev)) - enddo - endif - - endif - - deallocate(dummy) - - print*,"CLOSE FILE" - call nemsio_close(gfile, iret=iret) - - call nemsio_finalize() - -!--------------------------------------------------------------------------------------- -! Set the grib 1 grid description array need by the NCEP IPOLATES library. -!--------------------------------------------------------------------------------------- - - call calc_kgds(i_input, j_input, kgds_input) - - return - - 67 continue - - print*,"FATAL ERROR READING FILE: ", trim(input_file) - print*,"IRET IS: ", iret - call errexit(3) - - end subroutine read_input_data - - subroutine read_vcoord_info - -!--------------------------------------------------------------------------------- -! Read vertical coordinate information. -!--------------------------------------------------------------------------------- - - implicit none - - integer :: istat, levs_vcoord, n, k - - print* - print*,"OPEN VERTICAL COORD FILE: ", trim(vcoord_file) - open(14, file=trim(vcoord_file), form='formatted', iostat=istat) - if (istat /= 0) then - print*,"FATAL ERROR OPENING FILE. ISTAT IS: ", istat - call errexit(4) - endif - - read(14, *, iostat=istat) nvcoord, levs_vcoord - if (istat /= 0) then - print*,"FATAL ERROR READING FILE HEADER. ISTAT IS: ",istat - call errexit(5) - endif - -!--------------------------------------------------------------------------------- -! The last value in the file is not used for the fv3 core. Only read the first -! (lev + 1) values. -!--------------------------------------------------------------------------------- - - allocate(vcoord(lev+1, nvcoord)) - read(14, *, iostat=istat) ((vcoord(n,k), k=1,nvcoord), n=1,lev+1) - if (istat /= 0) then - print*,"FATAL ERROR READING FILE. ISTAT IS: ",istat - call errexit(6) - endif - - print* - do k = 1, (lev+1) - print*,'VCOORD FOR LEV ', k, 'IS: ', vcoord(k,:) - enddo - - close(14) - - end subroutine read_vcoord_info - - end module input_data diff --git a/sorc/enkf_chgres_recenter.fd/interp.f90 b/sorc/enkf_chgres_recenter.fd/interp.f90 deleted file mode 100644 index bb2afedbc3..0000000000 --- a/sorc/enkf_chgres_recenter.fd/interp.f90 +++ /dev/null @@ -1,552 +0,0 @@ - module interp - - use nemsio_module - - implicit none - - private - - real, allocatable :: sfcp_b4_adj_output(:) - real, allocatable :: clwmr_b4_adj_output(:,:) - real, allocatable :: dzdt_b4_adj_output(:,:) - real, allocatable :: grle_b4_adj_output(:,:) - real, allocatable :: cldamt_b4_adj_output(:,:) - real, allocatable :: icmr_b4_adj_output(:,:) - real, allocatable :: o3mr_b4_adj_output(:,:) - real, allocatable :: rwmr_b4_adj_output(:,:) - real, allocatable :: snmr_b4_adj_output(:,:) - real, allocatable :: spfh_b4_adj_output(:,:) - real, allocatable :: tmp_b4_adj_output(:,:) - real, allocatable :: ugrd_b4_adj_output(:,:) - real, allocatable :: vgrd_b4_adj_output(:,:) - - public :: adjust_for_terrain - public :: gaus_to_gaus - - contains - - subroutine adjust_for_terrain - -!--------------------------------------------------------------------------------- -! Adjust fields based on differences between the interpolated and external -! terrain. -!--------------------------------------------------------------------------------- - - use input_data - use output_data - use utils - use setup - - implicit none - - integer :: k - - real, allocatable :: pres_b4_adj_output(:,:) - real, allocatable :: pres_output(:,:) - real, allocatable :: q_b4_adj_output(:,:,:), q_output(:,:,:) - -!--------------------------------------------------------------------------------- -! First, compute the mid-layer pressure using the interpolated surface pressure. -!--------------------------------------------------------------------------------- - - allocate(pres_b4_adj_output(ij_output,lev)) - pres_b4_adj_output = 0.0 - - print* - print*,"COMPUTE MID-LAYER PRESSURE FROM INTERPOLATED SURFACE PRESSURE." - call newpr1(ij_output, lev, idvc, idsl, nvcoord, vcoord, & - sfcp_b4_adj_output, pres_b4_adj_output) - -!print*,'after newpr1, pres b4 adj: ', pres_b4_adj_output(ij_output/2,:) - -!--------------------------------------------------------------------------------- -! Adjust surface pressure based on differences between interpolated and -! grid terrain. -!--------------------------------------------------------------------------------- - - allocate(sfcp_output(ij_output)) - sfcp_output = 0.0 - - print*,"ADJUST SURFACE PRESSURE BASED ON TERRAIN DIFFERENCES" - call newps(hgt_output, sfcp_b4_adj_output, ij_output, & - lev, pres_b4_adj_output, tmp_b4_adj_output, & - spfh_b4_adj_output, hgt_external_output, sfcp_output) - -!print*,'after newps ',sfcp_b4_adj_output(ij_output/2),sfcp_output(ij_output/2) - - deallocate(sfcp_b4_adj_output) - -!--------------------------------------------------------------------------------- -! Recompute mid-layer pressure based on the adjusted surface pressure. -!--------------------------------------------------------------------------------- - - allocate(pres_output(ij_output, lev)) - pres_output = 0.0 - - allocate(dpres_output(ij_output, lev)) - dpres_output = 0.0 - - print*,"RECOMPUTE MID-LAYER PRESSURE." - call newpr1(ij_output, lev, idvc, idsl, nvcoord, vcoord, & - sfcp_output, pres_output, dpres_output) - -!do k = 1, lev -! print*,'after newpr1 ',pres_b4_adj_output(ij_output/2,k),pres_output(ij_output/2,k), dpres_output(ij_output/2,k) -!enddo - -!--------------------------------------------------------------------------------- -! Vertically interpolate from the pre-adjusted to the adjusted mid-layer -! pressures. -!--------------------------------------------------------------------------------- - - allocate(q_b4_adj_output(ij_output,lev,ntrac)) - q_b4_adj_output(:,:,1) = spfh_b4_adj_output(:,:) - q_b4_adj_output(:,:,2) = o3mr_b4_adj_output(:,:) - q_b4_adj_output(:,:,3) = clwmr_b4_adj_output(:,:) - if (gfdl_mp) then - q_b4_adj_output(:,:,4) = rwmr_b4_adj_output(:,:) - q_b4_adj_output(:,:,5) = icmr_b4_adj_output(:,:) - q_b4_adj_output(:,:,6) = snmr_b4_adj_output(:,:) - q_b4_adj_output(:,:,7) = grle_b4_adj_output(:,:) - if (icldamt == 1) q_b4_adj_output(:,:,8) = cldamt_b4_adj_output(:,:) - endif - - allocate(q_output(ij_output,lev,ntrac)) - q_output = 0.0 - - allocate(dzdt_output(ij_output,lev)) - dzdt_output = 0.0 - - allocate(ugrd_output(ij_output,lev)) - ugrd_output=0.0 - - allocate(vgrd_output(ij_output,lev)) - vgrd_output=0.0 - - allocate(tmp_output(ij_output,lev)) - tmp_output=0.0 - - print*,"VERTICALLY INTERPOLATE TO NEW PRESSURE LEVELS" - call vintg(ij_output, lev, lev, ntrac, pres_b4_adj_output, & - ugrd_b4_adj_output, vgrd_b4_adj_output, tmp_b4_adj_output, q_b4_adj_output, & - dzdt_b4_adj_output, pres_output, ugrd_output, vgrd_output, tmp_output, & - q_output, dzdt_output) - - deallocate (dzdt_b4_adj_output, q_b4_adj_output) - deallocate (pres_b4_adj_output, pres_output) - - allocate(spfh_output(ij_output,lev)) - spfh_output = q_output(:,:,1) - allocate(o3mr_output(ij_output,lev)) - o3mr_output = q_output(:,:,2) - allocate(clwmr_output(ij_output,lev)) - clwmr_output = q_output(:,:,3) - if (gfdl_mp) then - allocate(rwmr_output(ij_output,lev)) - rwmr_output = q_output(:,:,4) - allocate(icmr_output(ij_output,lev)) - icmr_output = q_output(:,:,5) - allocate(snmr_output(ij_output,lev)) - snmr_output = q_output(:,:,6) - allocate(grle_output(ij_output,lev)) - grle_output = q_output(:,:,7) - if (icldamt == 1) then - allocate(cldamt_output(ij_output,lev)) - cldamt_output = q_output(:,:,8) - endif - endif - - deallocate(q_output) - -!do k = 1, lev -!print*,'after vintg tmp ',tmp_b4_adj_output(ij_output/2,k),tmp_output(ij_output/2,k) -!enddo - - deallocate(tmp_b4_adj_output) - -!do k = 1, lev -!print*,'after vintg u ',ugrd_b4_adj_output(ij_output/2,k),ugrd_output(ij_output/2,k) -!enddo - - deallocate(ugrd_b4_adj_output) - -!do k = 1, lev -!print*,'after vintg v ',vgrd_b4_adj_output(ij_output/2,k),vgrd_output(ij_output/2,k) -!enddo - - deallocate(vgrd_b4_adj_output) - -!do k = 1, lev -!print*,'after vintg spfh ',spfh_b4_adj_output(ij_output/2,k),spfh_output(ij_output/2,k) -!enddo - - deallocate(spfh_b4_adj_output) - -!do k = 1, lev -!print*,'after vintg o3 ',o3mr_b4_adj_output(ij_output/2,k),o3mr_output(ij_output/2,k) -!enddo - - deallocate(o3mr_b4_adj_output) - -!do k = 1, lev -!print*,'after vintg clw ',clwmr_b4_adj_output(ij_output/2,k),clwmr_output(ij_output/2,k) -!enddo - - deallocate(clwmr_b4_adj_output) - - if (gfdl_mp) then - -! do k = 1, lev -! print*,'after vintg rw ',rwmr_b4_adj_output(ij_output/2,k),rwmr_output(ij_output/2,k) -! enddo - - deallocate(rwmr_b4_adj_output) - -! do k = 1, lev -! print*,'after vintg ic ',icmr_b4_adj_output(ij_output/2,k),icmr_output(ij_output/2,k) -! enddo - - deallocate(icmr_b4_adj_output) - -! do k = 1, lev -! print*,'after vintg sn ',snmr_b4_adj_output(ij_output/2,k),snmr_output(ij_output/2,k) -! enddo - - deallocate(snmr_b4_adj_output) - -! do k = 1, lev -! print*,'after vintg grle ',grle_b4_adj_output(ij_output/2,k),grle_output(ij_output/2,k) -! enddo - - deallocate(grle_b4_adj_output) - - if (icldamt == 1) then -! do k = 1, lev -! print*,'after vintg cld_amt ',cldamt_b4_adj_output(ij_output/2,k),cldamt_output(ij_output/2,k) -! enddo - - deallocate(cldamt_b4_adj_output) - endif - - - endif - - allocate(delz_output(ij_output, lev)) - delz_output = 0.0 - - call compute_delz(ij_output, lev, vcoord(:,1), vcoord(:,2), sfcp_output, hgt_output, & - tmp_output, spfh_output, delz_output, flipdelz) - - deallocate(hgt_output) - - end subroutine adjust_for_terrain - - subroutine gaus_to_gaus - -!---------------------------------------------------------------------------------- -! Interpolate data from the input to output grid using IPOLATES library. -!---------------------------------------------------------------------------------- - - use output_data - use input_data - use setup - - implicit none - - integer :: ip, ipopt(20) - integer :: num_fields - integer :: iret, numpts - integer, allocatable :: ibi(:), ibo(:) - - logical*1, allocatable :: bitmap_input(:,:), bitmap_output(:,:) - - real, allocatable :: data_input(:,:) - real, allocatable :: data_output(:,:), crot(:), srot(:) - - print* - print*,'INTERPOLATE DATA TO OUTPUT GRID' - - ip = 0 ! bilinear - ipopt = 0 - -!---------------------------------------------------------------------------------- -! Do 2-D fields first -!---------------------------------------------------------------------------------- - - num_fields = 1 - - allocate(ibi(num_fields)) - ibi = 0 ! no bitmap - allocate(ibo(num_fields)) - ibo = 0 ! no bitmap - - allocate(bitmap_input(ij_input,num_fields)) - bitmap_input = .true. - allocate(bitmap_output(ij_output,num_fields)) - bitmap_output = .true. - - allocate(rlat_output(ij_output)) - rlat_output = 0.0 - allocate(rlon_output(ij_output)) - rlon_output = 0.0 - -!---------------- -! Surface height -!---------------- - - allocate(data_input(ij_input,num_fields)) - data_input(:,num_fields) = hgt_input(:) - deallocate(hgt_input) - - allocate(data_output(ij_output,num_fields)) - data_output = 0 - - print*,"INTERPOLATE SURFACE HEIGHT" - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, data_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - data_output, iret) - if (iret /= 0) goto 89 - - allocate(hgt_output(ij_output)) - hgt_output = data_output(:,num_fields) - -!------------------ -! surface pressure -!------------------ - - data_input(:,num_fields) = sfcp_input(:) - deallocate(sfcp_input) - - print*,"INTERPOLATE SURFACE PRESSURE" - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, data_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - data_output, iret) - if (iret /= 0) goto 89 - - allocate(sfcp_b4_adj_output(ij_output)) - sfcp_b4_adj_output = data_output(:,num_fields) - - deallocate(ibi, ibo, bitmap_input, bitmap_output, data_input, data_output) - -!---------------------------------------------------------------------------------- -! 3d scalars -!---------------------------------------------------------------------------------- - - num_fields = lev - - allocate(ibi(num_fields)) - ibi = 0 ! no bitmap - allocate(ibo(num_fields)) - ibo = 0 ! no bitmap - - allocate(bitmap_input(ij_input,num_fields)) - bitmap_input = .true. - allocate(bitmap_output(ij_output,num_fields)) - bitmap_output = .true. - -!------------- -! Temperature -!------------- - - allocate(tmp_b4_adj_output(ij_output,num_fields)) - tmp_b4_adj_output = 0 - - print*,'INTERPOLATE TEMPERATURE' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, tmp_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - tmp_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(tmp_input) - -!-------------------- -! Cloud liquid water -!-------------------- - - allocate(clwmr_b4_adj_output(ij_output,num_fields)) - clwmr_b4_adj_output = 0 - - print*,'INTERPOLATE CLOUD LIQUID WATER' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, clwmr_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - clwmr_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(clwmr_input) - -!-------------------- -! Specific humidity -!-------------------- - - allocate(spfh_b4_adj_output(ij_output,num_fields)) - spfh_b4_adj_output = 0 - - print*,'INTERPOLATE SPECIFIC HUMIDITY' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, spfh_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - spfh_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(spfh_input) - -!----------- -! Ozone -!----------- - - allocate(o3mr_b4_adj_output(ij_output,num_fields)) - o3mr_b4_adj_output = 0 - - print*,'INTERPOLATE OZONE' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, o3mr_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - o3mr_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(o3mr_input) - -!----------- -! DZDT -!----------- - - allocate(dzdt_b4_adj_output(ij_output,num_fields)) - dzdt_b4_adj_output = 0 - - print*,'INTERPOLATE DZDT' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, dzdt_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - dzdt_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(dzdt_input) - -!---------------------------------------------------------------------------------- -! Interpolate additional 3-d scalars for GFDL microphysics. -!---------------------------------------------------------------------------------- - - if (gfdl_mp) then - -!------------- -! Rain water -!------------- - - allocate(rwmr_b4_adj_output(ij_output,num_fields)) - rwmr_b4_adj_output = 0 - - print*,'INTERPOLATE RWMR' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, rwmr_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - rwmr_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(rwmr_input) - -!------------- -! Snow water -!------------- - - allocate(snmr_b4_adj_output(ij_output,num_fields)) - snmr_b4_adj_output = 0 - - print*,'INTERPOLATE SNMR' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, snmr_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - snmr_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(snmr_input) - -!------------- -! Ice water -!------------- - - allocate(icmr_b4_adj_output(ij_output,num_fields)) - icmr_b4_adj_output = 0 - - print*,'INTERPOLATE ICMR' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, icmr_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - icmr_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(icmr_input) - -!------------- -! Graupel -!------------- - - allocate(grle_b4_adj_output(ij_output,num_fields)) - grle_b4_adj_output = 0 - - print*,'INTERPOLATE GRLE' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, grle_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - grle_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(grle_input) - -!--------------------------- -! Cloud amount (if present) -!--------------------------- - - if (icldamt == 1) then - allocate(cldamt_b4_adj_output(ij_output,num_fields)) - cldamt_b4_adj_output = 0 - - print*,'INTERPOLATE CLD_AMT' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, cldamt_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - cldamt_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(cldamt_input) - endif - - - endif - -!---------------------------------------------------------------------------------- -! 3d u/v winds -!---------------------------------------------------------------------------------- - - allocate(crot(ij_output), srot(ij_output)) - crot = 0. - srot = 0. - - allocate(ugrd_b4_adj_output(ij_output,num_fields)) - ugrd_b4_adj_output = 0 - allocate(vgrd_b4_adj_output(ij_output,num_fields)) - vgrd_b4_adj_output = 0 - - print*,'INTERPOLATE WINDS' - call ipolatev(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, ugrd_input, vgrd_input, & - numpts, rlat_output, rlon_output, crot, srot, ibo, bitmap_output, & - ugrd_b4_adj_output, vgrd_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate (ugrd_input, vgrd_input) - deallocate (crot, srot) - deallocate (ibi, ibo, bitmap_input, bitmap_output) - - return - - 89 continue - print*,"FATAL ERROR IN IPOLATES. IRET IS: ", iret - call errexit(23) - - end subroutine gaus_to_gaus - - end module interp diff --git a/sorc/enkf_chgres_recenter.fd/makefile b/sorc/enkf_chgres_recenter.fd/makefile deleted file mode 100755 index 2a5f36b369..0000000000 --- a/sorc/enkf_chgres_recenter.fd/makefile +++ /dev/null @@ -1,27 +0,0 @@ -SHELL= /bin/sh - -LIBS= $(NEMSIO_LIB) $(BACIO_LIB4) $(W3NCO_LIBd) $(IP_LIBd) $(SP_LIBd) - -CMD= enkf_chgres_recenter.x - -OBJS = driver.o input_data.o interp.o output_data.o utils.o setup.o - -$(CMD): $(OBJS) - $(FC) $(FFLAGS) -o $(CMD) $(OBJS) $(LIBS) - -driver.o: setup.o output_data.o interp.o input_data.o driver.f90 - $(FC) $(FFLAGS) -I$(NEMSIO_INC) -c driver.f90 -interp.o: setup.o utils.o output_data.o input_data.o interp.f90 - $(FC) $(FFLAGS) -I$(NEMSIO_INC) -c interp.f90 -input_data.o: setup.o utils.o input_data.f90 - $(FC) $(FFLAGS) -I$(NEMSIO_INC) -c input_data.f90 -output_data.o: setup.o utils.o input_data.o output_data.f90 - $(FC) $(FFLAGS) -I$(NEMSIO_INC) -c output_data.f90 -setup.o: setup.f90 - $(FC) $(FFLAGS) -I$(NEMSIO_INC) -c setup.f90 -utils.o: utils.f90 - $(FC) $(FFLAGS) -I$(NEMSIO_INC) -c utils.f90 -clean: - rm -f *.o *.mod ${CMD} -install: - -cp $(CMD) ../../exec/. diff --git a/sorc/enkf_chgres_recenter.fd/output_data.f90 b/sorc/enkf_chgres_recenter.fd/output_data.f90 deleted file mode 100644 index 36063d3a06..0000000000 --- a/sorc/enkf_chgres_recenter.fd/output_data.f90 +++ /dev/null @@ -1,396 +0,0 @@ - module output_data - - use nemsio_module - - implicit none - - private - - integer, public :: kgds_output(200) - -! data on the output grid. - real, allocatable, public :: hgt_output(:) ! interpolated from input grid - real, allocatable, public :: hgt_external_output(:) - real, allocatable, public :: sfcp_output(:) - real, allocatable, public :: tmp_output(:,:) - real, allocatable, public :: clwmr_output(:,:) - real, allocatable, public :: delz_output(:,:) - real, allocatable, public :: dpres_output(:,:) - real, allocatable, public :: dzdt_output(:,:) - real, allocatable, public :: o3mr_output(:,:) - real, allocatable, public :: spfh_output(:,:) - real, allocatable, public :: ugrd_output(:,:) - real, allocatable, public :: vgrd_output(:,:) - real, allocatable, public :: rwmr_output(:,:) - real, allocatable, public :: icmr_output(:,:) - real, allocatable, public :: snmr_output(:,:) - real, allocatable, public :: grle_output(:,:) - real, allocatable, public :: cldamt_output(:,:) - real, allocatable, public :: rlat_output(:) - real, allocatable, public :: rlon_output(:) - - public :: set_output_grid - public :: write_output_data - - character(len=50), allocatable :: recname(:) - character(len=50), allocatable :: reclevtyp(:) - - integer(nemsio_intkind) :: nrec - integer(nemsio_intkind), allocatable :: reclev(:) - - real(nemsio_realkind), allocatable :: vcoord_header(:,:,:) - real(nemsio_realkind), allocatable :: lat(:), lon(:) - - contains - - subroutine set_output_grid - -!------------------------------------------------------------------- -! Set grid specs on the output grid. -!------------------------------------------------------------------- - - use setup - use input_data - use utils - - implicit none - - character(len=20) :: vlevtyp, vname - - integer(nemsio_intkind) :: vlev - integer :: iret - - real(nemsio_realkind), allocatable :: dummy(:) - - type(nemsio_gfile) :: gfile - - print* - print*,"OUTPUT GRID I/J DIMENSIONS: ", i_output, j_output - -!------------------------------------------------------------------- -! Set the grib 1 grid description section, which is needed -! by the IPOLATES library. -!------------------------------------------------------------------- - - kgds_output = 0 - - call calc_kgds(i_output, j_output, kgds_output) - -!------------------------------------------------------------------- -! Read the terrain on the output grid. To ensure exact match, -! read it from an existing enkf nemsio restart file. -!------------------------------------------------------------------- - - call nemsio_init(iret) - - print* - print*,"OPEN OUTPUT GRID TERRAIN FILE: ", trim(terrain_file) - call nemsio_open(gfile, terrain_file, "read", iret=iret) - if (iret /= 0) then - print*,"FATAL ERROR OPENING FILE: ",trim(terrain_file) - print*,"IRET IS: ", iret - call errexit(50) - endif - - allocate(dummy(ij_output)) - allocate(hgt_external_output(ij_output)) - - print* - print*,"READ SURFACE HEIGHT" - vlev = 1 - vlevtyp = "sfc" - vname = "hgt" - call nemsio_readrecv(gfile, vname, vlevtyp, vlev, dummy, 0, iret) - if (iret /= 0) then - print*,"FATAL ERROR READING FILE: ",trim(terrain_file) - print*,"IRET IS: ", iret - call errexit(51) - endif - - hgt_external_output = dummy - - deallocate(dummy) - - call nemsio_close(gfile, iret=iret) - - call nemsio_finalize() - - end subroutine set_output_grid - - subroutine write_output_data - -!------------------------------------------------------------------- -! Write output grid data to a nemsio file. -!------------------------------------------------------------------- - - use input_data - use setup - - implicit none - - character(len=5) :: gaction - - integer :: n, iret - - real(nemsio_realkind), allocatable :: dummy(:) - - type(nemsio_gfile) :: gfile - -!------------------------------------------------------------------- -! Set up some header info. -!------------------------------------------------------------------- - - call header_set - -!------------------------------------------------------------------- -! Open and write file. -!------------------------------------------------------------------- - - call nemsio_init(iret) - - gaction="write" - - print* - print*,'OPEN OUTPUT FILE: ',trim(output_file) - call nemsio_open(gfile, output_file, gaction, iret=iret, gdatatype="bin4", & - nmeta=8, modelname="FV3GFS", nrec=nrec, & - idate=idate, dimx=i_output, & - dimy=j_output, dimz=lev, ntrac=ntrac, & - ncldt=ncldt, idvc=idvc, idsl=idsl, idvm=idvm, & - idrt=4, recname=recname, reclevtyp=reclevtyp, & - reclev=reclev,vcoord=vcoord_header, & - lat=lat, lon=lon) - if (iret/=0) then - print*,"FATAL ERROR OPENING FILE. IRET IS: ", iret - call errexit(9) - endif - - deallocate(lon, lat, recname, reclevtyp, reclev, vcoord_header) - - allocate(dummy(i_output*j_output)) - - print*,"WRITE SURFACE HEIGHT" - dummy = hgt_external_output - call nemsio_writerecv(gfile, "hgt", "sfc", 1, dummy, iret=iret) - if (iret/=0) goto 88 - deallocate(hgt_external_output) - - print*,"WRITE SURFACE PRESSURE" - dummy = sfcp_output - call nemsio_writerecv(gfile, "pres", "sfc", 1, dummy, iret=iret) - if (iret/=0) goto 88 - deallocate(sfcp_output) - - print*,"WRITE TEMPERATURE" - do n = 1, lev - dummy = tmp_output(:,n) - call nemsio_writerecv(gfile, "tmp", "mid layer", n, dummy, iret=iret) - if (iret/=0) goto 88 - enddo - deallocate(tmp_output) - - print*,"WRITE CLOUD LIQUID WATER" - do n = 1, lev - dummy = clwmr_output(:,n) - call nemsio_writerecv(gfile, "clwmr", "mid layer", n, dummy, iret=iret) - if (iret/=0) goto 88 - enddo - deallocate(clwmr_output) - - print*,"WRITE SPECIFIC HUMIDITY" - do n = 1, lev - dummy = spfh_output(:,n) - call nemsio_writerecv(gfile, "spfh", "mid layer", n, dummy, iret=iret) - if (iret/=0) goto 88 - enddo - deallocate(spfh_output) - - print*,"WRITE OZONE" - do n = 1, lev - dummy = o3mr_output(:,n) - call nemsio_writerecv(gfile, "o3mr", "mid layer", n, dummy, iret=iret) - if (iret/=0) goto 88 - enddo - deallocate(o3mr_output) - - print*,"WRITE U-WINDS" - do n = 1, lev - dummy = ugrd_output(:,n) - call nemsio_writerecv(gfile, "ugrd", "mid layer", n, dummy, iret=iret) - if (iret/=0) goto 88 - enddo - deallocate(ugrd_output) - - print*,"WRITE V-WINDS" - do n = 1, lev - dummy = vgrd_output(:,n) - call nemsio_writerecv(gfile, "vgrd", "mid layer", n, dummy, iret=iret) - if (iret/=0) goto 88 - enddo - deallocate(vgrd_output) - - print*,"WRITE DZDT" - do n = 1, lev - dummy = dzdt_output(:,n) - call nemsio_writerecv(gfile, "dzdt", "mid layer", n, dummy, iret=iret) - if (iret/=0) goto 88 - enddo - deallocate(dzdt_output) - - print*,"WRITE DPRES" - do n = 1, lev - dummy = dpres_output(:,n) - call nemsio_writerecv(gfile, "dpres", "mid layer", n, dummy, iret=iret) - if (iret/=0) goto 88 - enddo - deallocate(dpres_output) - - print*,"WRITE DELZ" - do n = 1, lev - dummy = delz_output(:,n) - call nemsio_writerecv(gfile, "delz", "mid layer", n, dummy, iret=iret) - if (iret/=0) goto 88 - enddo - deallocate(delz_output) - - if (gfdl_mp) then - - print*,"WRITE RAIN WATER" - do n = 1, lev - dummy = rwmr_output(:,n) - call nemsio_writerecv(gfile, "rwmr", "mid layer", n, dummy, iret=iret) - if (iret/=0) goto 88 - enddo - deallocate(rwmr_output) - - print*,"WRITE SNOW WATER" - do n = 1, lev - dummy = snmr_output(:,n) - call nemsio_writerecv(gfile, "snmr", "mid layer", n, dummy, iret=iret) - if (iret/=0) goto 88 - enddo - deallocate(snmr_output) - - print*,"WRITE ICE WATER" - do n = 1, lev - dummy = icmr_output(:,n) - call nemsio_writerecv(gfile, "icmr", "mid layer", n, dummy, iret=iret) - if (iret/=0) goto 88 - enddo - deallocate(icmr_output) - - print*,"WRITE GRAUPEL" - do n = 1, lev - dummy = grle_output(:,n) - call nemsio_writerecv(gfile, "grle", "mid layer", n, dummy, iret=iret) - if (iret/=0) goto 88 - enddo - deallocate(grle_output) - - if (icldamt == 1) then - print*,"WRITE CLD_AMT" - do n = 1, lev - dummy = cldamt_output(:,n) - call nemsio_writerecv(gfile, "cld_amt", "mid layer", n, dummy, iret=iret) - if (iret/=0) goto 88 - enddo - deallocate(cldamt_output) - endif - - - endif - - deallocate(dummy) - - call nemsio_close(gfile, iret=iret) - - call nemsio_finalize() - - return - - 88 continue - print*,"FATAL ERROR WRITING FILE. IRET IS: ", iret - call errexit(10) - - end subroutine write_output_data - - subroutine header_set - -!------------------------------------------------------------------- -! Set header information for the output nemsio file. -!------------------------------------------------------------------- - - use input_data - use setup - - implicit none - - character(len=8) :: fields(9) - character(len=8) :: fields_gfdl_mp(5) - - integer :: count, l, n - -! Fields common to Zhao-Carr and GFDL microphysics - data fields /'ugrd', 'vgrd', 'dzdt', 'dpres', 'delz', & - 'tmp', 'spfh', 'clwmr', 'o3mr'/ - -! Fields for GFDL microphysics - data fields_gfdl_mp /'rwmr', 'icmr', 'snmr', 'grle', 'cld_amt'/ - - print* - print*,"SET HEADER INFO FOR OUTPUT FILE." - - if (gfdl_mp) then - nrec = ((13+icldamt) * lev) + 2 - else - nrec = (9 * lev) + 2 - endif - - allocate(recname(nrec)) - allocate(reclev(nrec)) - allocate(reclevtyp(nrec)) - - count = 0 - do n = 1, 9 - do l = 1, lev - count = count + 1 - recname(count) = fields(n) - reclev(count) = l - reclevtyp(count) = "mid layer" - enddo - enddo - - if (gfdl_mp) then - do n = 1, 4 + icldamt - do l = 1, lev - count = count + 1 - recname(count) = fields_gfdl_mp(n) - reclev(count) = l - reclevtyp(count) = "mid layer" - enddo - enddo - endif - - recname(nrec-1) = "pres" - reclev(nrec-1) = 1 - reclevtyp(nrec-1) = "sfc" - - recname(nrec) = "hgt" - reclev(nrec) = 1 - reclevtyp(nrec) = "sfc" - - allocate(vcoord_header(lev+1,3,2)) - vcoord_header = 0.0 - vcoord_header(:,1,1) = vcoord(:,1) - vcoord_header(:,2,1) = vcoord(:,2) - - allocate(lat(ij_output), lon(ij_output)) - - lat = rlat_output - lon = rlon_output - - deallocate(rlat_output, rlon_output) - - end subroutine header_set - - end module output_data diff --git a/sorc/enkf_chgres_recenter.fd/setup.f90 b/sorc/enkf_chgres_recenter.fd/setup.f90 deleted file mode 100644 index c2c2dc450e..0000000000 --- a/sorc/enkf_chgres_recenter.fd/setup.f90 +++ /dev/null @@ -1,53 +0,0 @@ - module setup - - use nemsio_module - - implicit none - - private - - character(len=300), public :: input_file - character(len=300), public :: output_file - character(len=300), public :: terrain_file - character(len=300), public :: vcoord_file - - integer(nemsio_intkind), public :: i_output - integer(nemsio_intkind), public :: j_output - integer , public :: ij_output - logical, public :: flipdelz - - public :: program_setup - - contains - - subroutine program_setup - - implicit none - - integer :: istat - - namelist /nam_setup/ i_output, j_output, input_file, output_file, & - terrain_file, vcoord_file - - print* - print*,"OPEN SETUP NAMELIST." - open(43, file="./fort.43", iostat=istat) - if (istat /= 0) then - print*,"FATAL ERROR OPENING NAMELIST FILE. ISTAT IS: ",istat - call errexit(30) - endif - - print*,"READ SETUP NAMELIST." - read(43, nml=nam_setup, iostat=istat) - if (istat /= 0) then - print*,"FATAL ERROR READING NAMELIST FILE. ISTAT IS: ",istat - call errexit(31) - endif - - ij_output = i_output * j_output - - close(43) - - end subroutine program_setup - - end module setup diff --git a/sorc/enkf_chgres_recenter.fd/utils.f90 b/sorc/enkf_chgres_recenter.fd/utils.f90 deleted file mode 100644 index e09c75b018..0000000000 --- a/sorc/enkf_chgres_recenter.fd/utils.f90 +++ /dev/null @@ -1,783 +0,0 @@ - module utils - - private - - public :: calc_kgds - public :: newps - public :: newpr1 - public :: vintg - public :: compute_delz - - contains - - subroutine compute_delz(ijm, levp, ak_in, bk_in, ps, zs, t, sphum, delz, flipsign) - - implicit none - integer, intent(in):: levp, ijm - real, intent(in), dimension(levp+1):: ak_in, bk_in - real, intent(in), dimension(ijm):: ps, zs - real, intent(in), dimension(ijm,levp):: t - real, intent(in), dimension(ijm,levp):: sphum - real, intent(out), dimension(ijm,levp):: delz - logical, intent(in) :: flipsign -! Local: - real, dimension(ijm,levp+1):: zh - real, dimension(ijm,levp+1):: pe0, pn0 - real, dimension(levp+1) :: ak, bk - integer i,k - real, parameter :: GRAV = 9.80665 - real, parameter :: RDGAS = 287.05 - real, parameter :: RVGAS = 461.50 - real :: zvir - real:: grd - - print*,"COMPUTE LAYER THICKNESS." - - grd = grav/rdgas - zvir = rvgas/rdgas - 1. - ak = ak_in - bk = bk_in - ak(levp+1) = max(1.e-9, ak(levp+1)) - - do i=1, ijm - pe0(i,levp+1) = ak(levp+1) - pn0(i,levp+1) = log(pe0(i,levp+1)) - enddo - - do k=levp,1, -1 - do i=1,ijm - pe0(i,k) = ak(k) + bk(k)*ps(i) - pn0(i,k) = log(pe0(i,k)) - enddo - enddo - - do i = 1, ijm - zh(i,1) = zs(i) - enddo - - do k = 2, levp+1 - do i = 1, ijm - zh(i,k) = zh(i,k-1)+t(i,k-1)*(1.+zvir*sphum(i,k-1))* & - (pn0(i,k-1)-pn0(i,k))/grd - enddo - enddo - - do k = 1, levp - do i = 1, ijm - if (flipsign) then - delz(i,k) = zh(i,k) - zh(i,k+1) - else - delz(i,k) = zh(i,k+1) - zh(i,k) - end if - enddo - enddo - - end subroutine compute_delz - - subroutine calc_kgds(idim, jdim, kgds) - - use nemsio_module - - implicit none - - integer(nemsio_intkind), intent(in) :: idim, jdim - - integer, intent(out) :: kgds(200) - - kgds = 0 - kgds(1) = 4 ! OCT 6 - TYPE OF GRID (GAUSSIAN) - kgds(2) = idim ! OCT 7-8 - # PTS ON LATITUDE CIRCLE - kgds(3) = jdim ! OCT 9-10 - # PTS ON LONGITUDE CIRCLE - kgds(4) = 90000 ! OCT 11-13 - LAT OF ORIGIN - kgds(5) = 0 ! OCT 14-16 - LON OF ORIGIN - kgds(6) = 128 ! OCT 17 - RESOLUTION FLAG - kgds(7) = -90000 ! OCT 18-20 - LAT OF EXTREME POINT - kgds(8) = nint(-360000./idim) ! OCT 21-23 - LON OF EXTREME POINT - kgds(9) = nint((360.0 / float(idim))*1000.0) - ! OCT 24-25 - LONGITUDE DIRECTION INCR. - kgds(10) = jdim/2 ! OCT 26-27 - NUMBER OF CIRCLES POLE TO EQUATOR - kgds(12) = 255 ! OCT 29 - RESERVED - kgds(20) = 255 ! OCT 5 - NOT USED, SET TO 255 - - end subroutine calc_kgds - - SUBROUTINE NEWPS(ZS,PS,IM,KM,P,T,Q,ZSNEW,PSNEW) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! -! SUBPROGRAM: NEWPS COMPUTE NEW SURFACE PRESSURE -! PRGMMR: IREDELL ORG: W/NMC23 DATE: 92-10-31 -! -! ABSTRACT: COMPUTES A NEW SURFACE PRESSURE GIVEN A NEW OROGRAPHY. -! THE NEW PRESSURE IS COMPUTED ASSUMING A HYDROSTATIC BALANCE -! AND A CONSTANT TEMPERATURE LAPSE RATE. BELOW GROUND, THE -! LAPSE RATE IS ASSUMED TO BE -6.5 K/KM. -! -! PROGRAM HISTORY LOG: -! 91-10-31 MARK IREDELL -! -! USAGE: CALL NEWPS(ZS,PS,IM,KM,P,T,Q,ZSNEW,PSNEW) -! INPUT ARGUMENT LIST: -! IM INTEGER NUMBER OF POINTS TO COMPUTE -! ZS REAL (IM) OLD OROGRAPHY (M) -! PS REAL (IM) OLD SURFACE PRESSURE (PA) -! KM INTEGER NUMBER OF LEVELS -! P REAL (IM,KM) PRESSURES (PA) -! T REAL (IM,KM) TEMPERATURES (K) -! Q REAL (IM,KM) SPECIFIC HUMIDITIES (KG/KG) -! ZSNEW REAL (IM) NEW OROGRAPHY (M) -! OUTPUT ARGUMENT LIST: -! PSNEW REAL (IM) NEW SURFACE PRESSURE (PA) -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN -! -!C$$$ - REAL ZS(IM),PS(IM),P(IM,KM),T(IM,KM),Q(IM,KM) - REAL ZSNEW(IM),PSNEW(IM) - PARAMETER(BETA=-6.5E-3,EPSILON=1.E-9) - PARAMETER(G=9.80665,RD=287.05,RV=461.50) - PARAMETER(GOR=G/RD,FV=RV/RD-1.) - REAL ZU(IM) - FTV(AT,AQ)=AT*(1+FV*AQ) - FGAM(APU,ATVU,APD,ATVD)=-GOR*LOG(ATVD/ATVU)/LOG(APD/APU) - FZ0(AP,ATV,AZD,APD)=AZD+ATV/GOR*LOG(APD/AP) - FZ1(AP,ATV,AZD,APD,AGAM)=AZD-ATV/AGAM*((APD/AP)**(-AGAM/GOR)-1) - FP0(AZ,AZU,APU,ATVU)=APU*EXP(-GOR/ATVU*(AZ-AZU)) - FP1(AZ,AZU,APU,ATVU,AGAM)=APU*(1+AGAM/ATVU*(AZ-AZU))**(-GOR/AGAM) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! COMPUTE SURFACE PRESSURE BELOW THE ORIGINAL GROUND - LS=0 - K=1 - GAMMA=BETA - DO I=1,IM - PU=P(I,K) - TVU=FTV(T(I,K),Q(I,K)) - ZU(I)=FZ1(PU,TVU,ZS(I),PS(I),GAMMA) - IF(ZSNEW(I).LE.ZU(I)) THEN - PU=P(I,K) - TVU=FTV(T(I,K),Q(I,K)) - IF(ABS(GAMMA).GT.EPSILON) THEN - PSNEW(I)=FP1(ZSNEW(I),ZU(I),PU,TVU,GAMMA) - ELSE - PSNEW(I)=FP0(ZSNEW(I),ZU(I),PU,TVU) - ENDIF - ELSE - PSNEW(I)=0 - LS=LS+1 - ENDIF -! endif - ENDDO -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! COMPUTE SURFACE PRESSURE ABOVE THE ORIGINAL GROUND - DO K=2,KM - IF(LS.GT.0) THEN - DO I=1,IM - IF(PSNEW(I).EQ.0) THEN - PU=P(I,K) - TVU=FTV(T(I,K),Q(I,K)) - PD=P(I,K-1) - TVD=FTV(T(I,K-1),Q(I,K-1)) - GAMMA=FGAM(PU,TVU,PD,TVD) - IF(ABS(GAMMA).GT.EPSILON) THEN - ZU(I)=FZ1(PU,TVU,ZU(I),PD,GAMMA) - ELSE - ZU(I)=FZ0(PU,TVU,ZU(I),PD) - ENDIF - IF(ZSNEW(I).LE.ZU(I)) THEN - IF(ABS(GAMMA).GT.EPSILON) THEN - PSNEW(I)=FP1(ZSNEW(I),ZU(I),PU,TVU,GAMMA) - ELSE - PSNEW(I)=FP0(ZSNEW(I),ZU(I),PU,TVU) - ENDIF - LS=LS-1 - ENDIF - ENDIF - ENDDO - ENDIF - ENDDO -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! COMPUTE SURFACE PRESSURE OVER THE TOP - IF(LS.GT.0) THEN - K=KM - GAMMA=0 - DO I=1,IM - IF(PSNEW(I).EQ.0) THEN - PU=P(I,K) - TVU=FTV(T(I,K),Q(I,K)) - PSNEW(I)=FP0(ZSNEW(I),ZU(I),PU,TVU) - ENDIF - ENDDO - ENDIF - END SUBROUTINE NEWPS - - SUBROUTINE NEWPR1(IM,KM,IDVC,IDSL,NVCOORD,VCOORD, & - PS,PM,DP) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! -! SUBPROGRAM: NEWPR1 COMPUTE MODEL PRESSURES -! PRGMMR: JUANG ORG: W/NMC23 DATE: 2005-04-11 -! PRGMMR: Fanglin Yang ORG: W/NMC23 DATE: 2006-11-28 -! PRGMMR: S. Moorthi ORG: NCEP/EMC DATE: 2006-12-12 -! PRGMMR: S. Moorthi ORG: NCEP/EMC DATE: 2007-01-02 -! -! ABSTRACT: COMPUTE MODEL PRESSURES. -! -! PROGRAM HISTORY LOG: -! 2005-04-11 HANN_MING HENRY JUANG hybrid sigma, sigma-p, and sigma- -! -! USAGE: CALL NEWPR1(IM,IX,KM,KMP,IDVC,IDSL,NVCOORD,VCOORD,PP,TP,QP,P -! INPUT ARGUMENT LIST: -! IM INTEGER NUMBER OF POINTS TO COMPUTE -! KM INTEGER NUMBER OF LEVELS -! IDVC INTEGER VERTICAL COORDINATE ID -! (1 FOR SIGMA AND 2 FOR HYBRID) -! IDSL INTEGER TYPE OF SIGMA STRUCTURE -! (1 FOR PHILLIPS OR 2 FOR MEAN) -! NVCOORD INTEGER NUMBER OF VERTICAL COORDINATES -! VCOORD REAL (KM+1,NVCOORD) VERTICAL COORDINATE VALUES -! FOR IDVC=1, NVCOORD=1: SIGMA INTERFACE -! FOR IDVC=2, NVCOORD=2: HYBRID INTERFACE A AND B -! FOR IDVC=3, NVCOORD=3: JUANG GENERAL HYBRID INTERFACE -! AK REAL (KM+1) HYBRID INTERFACE A -! BK REAL (KM+1) HYBRID INTERFACE B -! PS REAL (IX) SURFACE PRESSURE (PA) -! OUTPUT ARGUMENT LIST: -! PM REAL (IX,KM) MID-LAYER PRESSURE (PA) -! DP REAL (IX,KM) LAYER DELTA PRESSURE (PA) -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN -! -!C$$$ - IMPLICIT NONE - - INTEGER, INTENT(IN) :: IM, KM, NVCOORD, IDVC, IDSL - - REAL, INTENT(IN) :: VCOORD(KM+1,NVCOORD) - REAL, INTENT(IN) :: PS(IM) - - REAL, INTENT(OUT) :: PM(IM,KM) - REAL, OPTIONAL, INTENT(OUT) :: DP(IM,KM) - - REAL, PARAMETER :: RD=287.05, RV=461.50, CP=1004.6, & - ROCP=RD/CP, ROCP1=ROCP+1, ROCPR=1/ROCP, & - FV=RV/RD-1. - - INTEGER :: I, K - - REAL :: AK(KM+1), BK(KM+1), PI(IM,KM+1) - - IF(IDVC.EQ.2) THEN - DO K=1,KM+1 - AK(K) = VCOORD(K,1) - BK(K) = VCOORD(K,2) - PI(1:IM,K) = AK(K) + BK(K)*PS(1:IM) - ENDDO - ELSE - print*,'routine only works for idvc 2' - stop - ENDIF - - IF(IDSL.EQ.2) THEN - DO K=1,KM - PM(1:IM,K) = (PI(1:IM,K)+PI(1:IM,K+1))/2 - ENDDO - ELSE - DO K=1,KM - PM(1:IM,K) = ((PI(1:IM,K)**ROCP1-PI(1:IM,K+1)**ROCP1)/ & - (ROCP1*(PI(1:IM,K)-PI(1:IM,K+1))))**ROCPR - ENDDO - ENDIF - - IF(PRESENT(DP))THEN - DO K=1,KM - DO I=1,IM - DP(I,K) = PI(I,K) - PI(I,K+1) - ENDDO - ENDDO - ENDIF - - END SUBROUTINE NEWPR1 - - SUBROUTINE TERP3(IM,IXZ1,IXQ1,IXZ2,IXQ2,NM,NXQ1,NXQ2, & - KM1,KXZ1,KXQ1,Z1,Q1,KM2,KXZ2,KXQ2,Z2,Q2,J2) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! -! SUBPROGRAM: TERP3 CUBICALLY INTERPOLATE IN ONE DIMENSION -! PRGMMR: IREDELL ORG: W/NMC23 DATE: 98-05-01 -! -! ABSTRACT: INTERPOLATE FIELD(S) IN ONE DIMENSION ALONG THE COLUMN(S). -! THE INTERPOLATION IS CUBIC LAGRANGIAN WITH A MONOTONIC CONSTRAINT -! IN THE CENTER OF THE DOMAIN. IN THE OUTER INTERVALS IT IS LINEAR. -! OUTSIDE THE DOMAIN, FIELDS ARE HELD CONSTANT. -! -! PROGRAM HISTORY LOG: -! 98-05-01 MARK IREDELL -! 1999-01-04 IREDELL USE ESSL SEARCH -! -! USAGE: CALL TERP3(IM,IXZ1,IXQ1,IXZ2,IXQ2,NM,NXQ1,NXQ2, -! & KM1,KXZ1,KXQ1,Z1,Q1,KM2,KXZ2,KXQ2,Z2,Q2,J2) -! INPUT ARGUMENT LIST: -! IM INTEGER NUMBER OF COLUMNS -! IXZ1 INTEGER COLUMN SKIP NUMBER FOR Z1 -! IXQ1 INTEGER COLUMN SKIP NUMBER FOR Q1 -! IXZ2 INTEGER COLUMN SKIP NUMBER FOR Z2 -! IXQ2 INTEGER COLUMN SKIP NUMBER FOR Q2 -! NM INTEGER NUMBER OF FIELDS PER COLUMN -! NXQ1 INTEGER FIELD SKIP NUMBER FOR Q1 -! NXQ2 INTEGER FIELD SKIP NUMBER FOR Q2 -! KM1 INTEGER NUMBER OF INPUT POINTS -! KXZ1 INTEGER POINT SKIP NUMBER FOR Z1 -! KXQ1 INTEGER POINT SKIP NUMBER FOR Q1 -! Z1 REAL (1+(IM-1)*IXZ1+(KM1-1)*KXZ1) -! INPUT COORDINATE VALUES IN WHICH TO INTERPOLATE -! (Z1 MUST BE STRICTLY MONOTONIC IN EITHER DIRECTION) -! Q1 REAL (1+(IM-1)*IXQ1+(KM1-1)*KXQ1+(NM-1)*NXQ1) -! INPUT FIELDS TO INTERPOLATE -! KM2 INTEGER NUMBER OF OUTPUT POINTS -! KXZ2 INTEGER POINT SKIP NUMBER FOR Z2 -! KXQ2 INTEGER POINT SKIP NUMBER FOR Q2 -! Z2 REAL (1+(IM-1)*IXZ2+(KM2-1)*KXZ2) -! OUTPUT COORDINATE VALUES TO WHICH TO INTERPOLATE -! (Z2 NEED NOT BE MONOTONIC) -! -! OUTPUT ARGUMENT LIST: -! Q2 REAL (1+(IM-1)*IXQ2+(KM2-1)*KXQ2+(NM-1)*NXQ2) -! OUTPUT INTERPOLATED FIELDS -! J2 REAL (1+(IM-1)*IXQ2+(KM2-1)*KXQ2+(NM-1)*NXQ2) -! OUTPUT INTERPOLATED FIELDS CHANGE WRT Z2 -! -! SUBPROGRAMS CALLED: -! RSEARCH SEARCH FOR A SURROUNDING REAL INTERVAL -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN -! -!C$$$ - IMPLICIT NONE - INTEGER IM,IXZ1,IXQ1,IXZ2,IXQ2,NM,NXQ1,NXQ2 - INTEGER KM1,KXZ1,KXQ1,KM2,KXZ2,KXQ2 - INTEGER I,K1,K2,N - REAL Z1(1+(IM-1)*IXZ1+(KM1-1)*KXZ1) - REAL Q1(1+(IM-1)*IXQ1+(KM1-1)*KXQ1+(NM-1)*NXQ1) - REAL Z2(1+(IM-1)*IXZ2+(KM2-1)*KXZ2) - REAL Q2(1+(IM-1)*IXQ2+(KM2-1)*KXQ2+(NM-1)*NXQ2) - REAL J2(1+(IM-1)*IXQ2+(KM2-1)*KXQ2+(NM-1)*NXQ2) - REAL FFA(IM),FFB(IM),FFC(IM),FFD(IM) - REAL GGA(IM),GGB(IM),GGC(IM),GGD(IM) - INTEGER K1S(IM,KM2) - REAL Z1A,Z1B,Z1C,Z1D,Q1A,Q1B,Q1C,Q1D,Z2S,Q2S,J2S -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! FIND THE SURROUNDING INPUT INTERVAL FOR EACH OUTPUT POINT. - CALL RSEARCH(IM,KM1,IXZ1,KXZ1,Z1,KM2,IXZ2,KXZ2,Z2,1,IM,K1S) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! GENERALLY INTERPOLATE CUBICALLY WITH MONOTONIC CONSTRAINT -! FROM TWO NEAREST INPUT POINTS ON EITHER SIDE OF THE OUTPUT POINT, -! BUT WITHIN THE TWO EDGE INTERVALS INTERPOLATE LINEARLY. -! KEEP THE OUTPUT FIELDS CONSTANT OUTSIDE THE INPUT DOMAIN. - -!!$OMP PARALLEL DO DEFAULT(PRIVATE) SHARED(IM,IXZ1,IXQ1,IXZ2), & -!!$OMP& SHARED(IXQ2,NM,NXQ1,NXQ2,KM1,KXZ1,KXQ1,Z1,Q1,KM2,KXZ2), & -!!$OMP& SHARED(KXQ2,Z2,Q2,J2,K1S) - - DO K2=1,KM2 - DO I=1,IM - K1=K1S(I,K2) - IF(K1.EQ.1.OR.K1.EQ.KM1-1) THEN - Z2S=Z2(1+(I-1)*IXZ2+(K2-1)*KXZ2) - Z1A=Z1(1+(I-1)*IXZ1+(K1-1)*KXZ1) - Z1B=Z1(1+(I-1)*IXZ1+(K1+0)*KXZ1) - FFA(I)=(Z2S-Z1B)/(Z1A-Z1B) - FFB(I)=(Z2S-Z1A)/(Z1B-Z1A) - GGA(I)=1/(Z1A-Z1B) - GGB(I)=1/(Z1B-Z1A) - ELSEIF(K1.GT.1.AND.K1.LT.KM1-1) THEN - Z2S=Z2(1+(I-1)*IXZ2+(K2-1)*KXZ2) - Z1A=Z1(1+(I-1)*IXZ1+(K1-2)*KXZ1) - Z1B=Z1(1+(I-1)*IXZ1+(K1-1)*KXZ1) - Z1C=Z1(1+(I-1)*IXZ1+(K1+0)*KXZ1) - Z1D=Z1(1+(I-1)*IXZ1+(K1+1)*KXZ1) - FFA(I)=(Z2S-Z1B)/(Z1A-Z1B)* & - (Z2S-Z1C)/(Z1A-Z1C)* & - (Z2S-Z1D)/(Z1A-Z1D) - FFB(I)=(Z2S-Z1A)/(Z1B-Z1A)* & - (Z2S-Z1C)/(Z1B-Z1C)* & - (Z2S-Z1D)/(Z1B-Z1D) - FFC(I)=(Z2S-Z1A)/(Z1C-Z1A)* & - (Z2S-Z1B)/(Z1C-Z1B)* & - (Z2S-Z1D)/(Z1C-Z1D) - FFD(I)=(Z2S-Z1A)/(Z1D-Z1A)* & - (Z2S-Z1B)/(Z1D-Z1B)* & - (Z2S-Z1C)/(Z1D-Z1C) - GGA(I)= 1/(Z1A-Z1B)* & - (Z2S-Z1C)/(Z1A-Z1C)* & - (Z2S-Z1D)/(Z1A-Z1D)+ & - (Z2S-Z1B)/(Z1A-Z1B)* & - 1/(Z1A-Z1C)* & - (Z2S-Z1D)/(Z1A-Z1D)+ & - (Z2S-Z1B)/(Z1A-Z1B)* & - (Z2S-Z1C)/(Z1A-Z1C)* & - 1/(Z1A-Z1D) - GGB(I)= 1/(Z1B-Z1A)* & - (Z2S-Z1C)/(Z1B-Z1C)* & - (Z2S-Z1D)/(Z1B-Z1D)+ & - (Z2S-Z1A)/(Z1B-Z1A)* & - 1/(Z1B-Z1C)* & - (Z2S-Z1D)/(Z1B-Z1D)+ & - (Z2S-Z1A)/(Z1B-Z1A)* & - (Z2S-Z1C)/(Z1B-Z1C)* & - 1/(Z1B-Z1D) - GGC(I)= 1/(Z1C-Z1A)* & - (Z2S-Z1B)/(Z1C-Z1B)* & - (Z2S-Z1D)/(Z1C-Z1D)+ & - (Z2S-Z1A)/(Z1C-Z1A)* & - 1/(Z1C-Z1B)* & - (Z2S-Z1D)/(Z1C-Z1D)+ & - (Z2S-Z1A)/(Z1C-Z1A)* & - (Z2S-Z1B)/(Z1C-Z1B)* & - 1/(Z1C-Z1D) - GGD(I)= 1/(Z1D-Z1A)* & - (Z2S-Z1B)/(Z1D-Z1B)* & - (Z2S-Z1C)/(Z1D-Z1C)+ & - (Z2S-Z1A)/(Z1D-Z1A)* & - 1/(Z1D-Z1B)* & - (Z2S-Z1C)/(Z1D-Z1C)+ & - (Z2S-Z1A)/(Z1D-Z1A)* & - (Z2S-Z1B)/(Z1D-Z1B)* & - 1/(Z1D-Z1C) - ENDIF - ENDDO -! INTERPOLATE. - DO N=1,NM - DO I=1,IM - K1=K1S(I,K2) - IF(K1.EQ.0) THEN - Q2S=Q1(1+(I-1)*IXQ1+(N-1)*NXQ1) - J2S=0 - ELSEIF(K1.EQ.KM1) THEN - Q2S=Q1(1+(I-1)*IXQ1+(KM1-1)*KXQ1+(N-1)*NXQ1) - J2S=0 - ELSEIF(K1.EQ.1.OR.K1.EQ.KM1-1) THEN - Q1A=Q1(1+(I-1)*IXQ1+(K1-1)*KXQ1+(N-1)*NXQ1) - Q1B=Q1(1+(I-1)*IXQ1+(K1+0)*KXQ1+(N-1)*NXQ1) - Q2S=FFA(I)*Q1A+FFB(I)*Q1B - J2S=GGA(I)*Q1A+GGB(I)*Q1B - ELSE - Q1A=Q1(1+(I-1)*IXQ1+(K1-2)*KXQ1+(N-1)*NXQ1) - Q1B=Q1(1+(I-1)*IXQ1+(K1-1)*KXQ1+(N-1)*NXQ1) - Q1C=Q1(1+(I-1)*IXQ1+(K1+0)*KXQ1+(N-1)*NXQ1) - Q1D=Q1(1+(I-1)*IXQ1+(K1+1)*KXQ1+(N-1)*NXQ1) - Q2S=FFA(I)*Q1A+FFB(I)*Q1B+FFC(I)*Q1C+FFD(I)*Q1D - J2S=GGA(I)*Q1A+GGB(I)*Q1B+GGC(I)*Q1C+GGD(I)*Q1D - IF(Q2S.LT.MIN(Q1B,Q1C)) THEN - Q2S=MIN(Q1B,Q1C) - J2S=0 - ELSEIF(Q2S.GT.MAX(Q1B,Q1C)) THEN - Q2S=MAX(Q1B,Q1C) - J2S=0 - ENDIF - ENDIF - Q2(1+(I-1)*IXQ2+(K2-1)*KXQ2+(N-1)*NXQ2)=Q2S - J2(1+(I-1)*IXQ2+(K2-1)*KXQ2+(N-1)*NXQ2)=J2S - ENDDO - ENDDO - ENDDO -!!$OMP END PARALLEL DO - - END SUBROUTINE TERP3 - - SUBROUTINE RSEARCH(IM,KM1,IXZ1,KXZ1,Z1,KM2,IXZ2,KXZ2,Z2,IXL2,KXL2,& - L2) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! -! SUBPROGRAM: RSEARCH SEARCH FOR A SURROUNDING REAL INTERVAL -! PRGMMR: IREDELL ORG: W/NMC23 DATE: 98-05-01 -! -! ABSTRACT: THIS SUBPROGRAM SEARCHES MONOTONIC SEQUENCES OF REAL NUMBERS -! FOR INTERVALS THAT SURROUND A GIVEN SEARCH SET OF REAL NUMBERS. -! THE SEQUENCES MAY BE MONOTONIC IN EITHER DIRECTION; THE REAL NUMBERS -! MAY BE SINGLE OR DOUBLE PRECISION; THE INPUT SEQUENCES AND SETS -! AND THE OUTPUT LOCATIONS MAY BE ARBITRARILY DIMENSIONED. -! -! PROGRAM HISTORY LOG: -! 1999-01-05 MARK IREDELL -! -! USAGE: CALL RSEARCH(IM,KM1,IXZ1,KXZ1,Z1,KM2,IXZ2,KXZ2,Z2,IXL2,KXL2, -! & L2) -! INPUT ARGUMENT LIST: -! IM INTEGER NUMBER OF SEQUENCES TO SEARCH -! KM1 INTEGER NUMBER OF POINTS IN EACH SEQUENCE -! IXZ1 INTEGER SEQUENCE SKIP NUMBER FOR Z1 -! KXZ1 INTEGER POINT SKIP NUMBER FOR Z1 -! Z1 REAL (1+(IM-1)*IXZ1+(KM1-1)*KXZ1) -! SEQUENCE VALUES TO SEARCH -! (Z1 MUST BE MONOTONIC IN EITHER DIRECTION) -! KM2 INTEGER NUMBER OF POINTS TO SEARCH FOR -! IN EACH RESPECTIVE SEQUENCE -! IXZ2 INTEGER SEQUENCE SKIP NUMBER FOR Z2 -! KXZ2 INTEGER POINT SKIP NUMBER FOR Z2 -! Z2 REAL (1+(IM-1)*IXZ2+(KM2-1)*KXZ2) -! SET OF VALUES TO SEARCH FOR -! (Z2 NEED NOT BE MONOTONIC) -! IXL2 INTEGER SEQUENCE SKIP NUMBER FOR L2 -! KXL2 INTEGER POINT SKIP NUMBER FOR L2 -! -! OUTPUT ARGUMENT LIST: -! L2 INTEGER (1+(IM-1)*IXL2+(KM2-1)*KXL2) -! INTERVAL LOCATIONS HAVING VALUES FROM 0 TO KM1 -! (Z2 WILL BE BETWEEN Z1(L2) AND Z1(L2+1)) -! -! SUBPROGRAMS CALLED: -! SBSRCH ESSL BINARY SEARCH -! DBSRCH ESSL BINARY SEARCH -! -! REMARKS: -! IF THE ARRAY Z1 IS DIMENSIONED (IM,KM1), THEN THE SKIP NUMBERS ARE -! IXZ1=1 AND KXZ1=IM; IF IT IS DIMENSIONED (KM1,IM), THEN THE SKIP -! NUMBERS ARE IXZ1=KM1 AND KXZ1=1; IF IT IS DIMENSIONED (IM,JM,KM1), -! THEN THE SKIP NUMBERS ARE IXZ1=1 AND KXZ1=IM*JM; ETCETERA. -! SIMILAR EXAMPLES APPLY TO THE SKIP NUMBERS FOR Z2 AND L2. -! -! RETURNED VALUES OF 0 OR KM1 INDICATE THAT THE GIVEN SEARCH VALUE -! IS OUTSIDE THE RANGE OF THE SEQUENCE. -! -! IF A SEARCH VALUE IS IDENTICAL TO ONE OF THE SEQUENCE VALUES -! THEN THE LOCATION RETURNED POINTS TO THE IDENTICAL VALUE. -! IF THE SEQUENCE IS NOT STRICTLY MONOTONIC AND A SEARCH VALUE IS -! IDENTICAL TO MORE THAN ONE OF THE SEQUENCE VALUES, THEN THE -! LOCATION RETURNED MAY POINT TO ANY OF THE IDENTICAL VALUES. -! -! TO BE EXACT, FOR EACH I FROM 1 TO IM AND FOR EACH K FROM 1 TO KM2, -! Z=Z2(1+(I-1)*IXZ2+(K-1)*KXZ2) IS THE SEARCH VALUE AND -! L=L2(1+(I-1)*IXL2+(K-1)*KXL2) IS THE LOCATION RETURNED. -! IF L=0, THEN Z IS LESS THAN THE START POINT Z1(1+(I-1)*IXZ1) -! FOR ASCENDING SEQUENCES (OR GREATER THAN FOR DESCENDING SEQUENCES). -! IF L=KM1, THEN Z IS GREATER THAN OR EQUAL TO THE END POINT -! Z1(1+(I-1)*IXZ1+(KM1-1)*KXZ1) FOR ASCENDING SEQUENCES -! (OR LESS THAN OR EQUAL TO FOR DESCENDING SEQUENCES). -! OTHERWISE Z IS BETWEEN THE VALUES Z1(1+(I-1)*IXZ1+(L-1)*KXZ1) AND -! Z1(1+(I-1)*IXZ1+(L-0)*KXZ1) AND MAY EQUAL THE FORMER. -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN -! -!C$$$ -! IMPLICIT NONE -! INTEGER,INTENT(IN):: IM,KM1,IXZ1,KXZ1,KM2,IXZ2,KXZ2,IXL2,KXL2 -! REAL,INTENT(IN):: Z1(1+(IM-1)*IXZ1+(KM1-1)*KXZ1) -! REAL,INTENT(IN):: Z2(1+(IM-1)*IXZ2+(KM2-1)*KXZ2) -! INTEGER,INTENT(OUT):: L2(1+(IM-1)*IXL2+(KM2-1)*KXL2) -! INTEGER(4) INCX,N,INCY,M,INDX(KM2),RC(KM2),IOPT -! INTEGER I,K2 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! FIND THE SURROUNDING INPUT INTERVAL FOR EACH OUTPUT POINT. -! DO I=1,IM -! IF(Z1(1+(I-1)*IXZ1).LE.Z1(1+(I-1)*IXZ1+(KM1-1)*KXZ1)) THEN -! INPUT COORDINATE IS MONOTONICALLY ASCENDING. -! INCX=KXZ2 -! N=KM2 -! INCY=KXZ1 -! M=KM1 -! IOPT=1 -! IF(DIGITS(1.).LT.DIGITS(1._8)) THEN -! CALL SBSRCH(Z2(1+(I-1)*IXZ2),INCX,N, -! & Z1(1+(I-1)*IXZ1),INCY,M,INDX,RC,IOPT) -! ELSE -! CALL DBSRCH(Z2(1+(I-1)*IXZ2),INCX,N, -! & Z1(1+(I-1)*IXZ1),INCY,M,INDX,RC,IOPT) -! ENDIF -! DO K2=1,KM2 -! L2(1+(I-1)*IXL2+(K2-1)*KXL2)=INDX(K2)-RC(K2) -! ENDDO -! ELSE -! INPUT COORDINATE IS MONOTONICALLY DESCENDING. -! INCX=KXZ2 -! N=KM2 -! INCY=-KXZ1 -! M=KM1 -! IOPT=0 -! IF(DIGITS(1.).LT.DIGITS(1._8)) THEN -! CALL SBSRCH(Z2(1+(I-1)*IXZ2),INCX,N, -! & Z1(1+(I-1)*IXZ1),INCY,M,INDX,RC,IOPT) -! ELSE -! CALL DBSRCH(Z2(1+(I-1)*IXZ2),INCX,N, -! & Z1(1+(I-1)*IXZ1),INCY,M,INDX,RC,IOPT) -! ENDIF -! DO K2=1,KM2 -! L2(1+(I-1)*IXL2+(K2-1)*KXL2)=KM1+1-INDX(K2) -! ENDDO -! ENDIF -! ENDDO -! - IMPLICIT NONE - INTEGER,INTENT(IN):: IM,KM1,IXZ1,KXZ1,KM2,IXZ2,KXZ2,IXL2,KXL2 - REAL,INTENT(IN):: Z1(1+(IM-1)*IXZ1+(KM1-1)*KXZ1) - REAL,INTENT(IN):: Z2(1+(IM-1)*IXZ2+(KM2-1)*KXZ2) - INTEGER,INTENT(OUT):: L2(1+(IM-1)*IXL2+(KM2-1)*KXL2) - INTEGER I,K2,L - REAL Z -!C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -!C FIND THE SURROUNDING INPUT INTERVAL FOR EACH OUTPUT POINT. - DO I=1,IM - IF(Z1(1+(I-1)*IXZ1).LE.Z1(1+(I-1)*IXZ1+(KM1-1)*KXZ1)) THEN -!C INPUT COORDINATE IS MONOTONICALLY ASCENDING. - DO K2=1,KM2 - Z=Z2(1+(I-1)*IXZ2+(K2-1)*KXZ2) - L=0 - DO - IF(Z.LT.Z1(1+(I-1)*IXZ1+L*KXZ1)) EXIT - L=L+1 - IF(L.EQ.KM1) EXIT - ENDDO - L2(1+(I-1)*IXL2+(K2-1)*KXL2)=L - ENDDO - ELSE -!C INPUT COORDINATE IS MONOTONICALLY DESCENDING. - DO K2=1,KM2 - Z=Z2(1+(I-1)*IXZ2+(K2-1)*KXZ2) - L=0 - DO - IF(Z.GT.Z1(1+(I-1)*IXZ1+L*KXZ1)) EXIT - L=L+1 - IF(L.EQ.KM1) EXIT - ENDDO - L2(1+(I-1)*IXL2+(K2-1)*KXL2)=L - ENDDO - ENDIF - ENDDO - - END SUBROUTINE RSEARCH - - SUBROUTINE VINTG(IM,KM1,KM2,NT,P1,U1,V1,T1,Q1,W1,P2, & - U2,V2,T2,Q2,W2) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! -! SUBPROGRAM: VINTG VERTICALLY INTERPOLATE UPPER-AIR FIELDS -! PRGMMR: IREDELL ORG: W/NMC23 DATE: 92-10-31 -! -! ABSTRACT: VERTICALLY INTERPOLATE UPPER-AIR FIELDS. -! WIND, TEMPERATURE, HUMIDITY AND OTHER TRACERS ARE INTERPOLATED. -! THE INTERPOLATION IS CUBIC LAGRANGIAN IN LOG PRESSURE -! WITH A MONOTONIC CONSTRAINT IN THE CENTER OF THE DOMAIN. -! IN THE OUTER INTERVALS IT IS LINEAR IN LOG PRESSURE. -! OUTSIDE THE DOMAIN, FIELDS ARE GENERALLY HELD CONSTANT, -! EXCEPT FOR TEMPERATURE AND HUMIDITY BELOW THE INPUT DOMAIN, -! WHERE THE TEMPERATURE LAPSE RATE IS HELD FIXED AT -6.5 K/KM AND -! THE RELATIVE HUMIDITY IS HELD CONSTANT. -! -! PROGRAM HISTORY LOG: -! 91-10-31 MARK IREDELL -! -! USAGE: CALL VINTG(IM,KM1,KM2,NT,P1,U1,V1,T1,Q1,P2, -! & U2,V2,T2,Q2) -! INPUT ARGUMENT LIST: -! IM INTEGER NUMBER OF POINTS TO COMPUTE -! KM1 INTEGER NUMBER OF INPUT LEVELS -! KM2 INTEGER NUMBER OF OUTPUT LEVELS -! NT INTEGER NUMBER OF TRACERS -! P1 REAL (IM,KM1) INPUT PRESSURES -! ORDERED FROM BOTTOM TO TOP OF ATMOSPHERE -! U1 REAL (IM,KM1) INPUT ZONAL WIND -! V1 REAL (IM,KM1) INPUT MERIDIONAL WIND -! T1 REAL (IM,KM1) INPUT TEMPERATURE (K) -! Q1 REAL (IM,KM1,NT) INPUT TRACERS (HUMIDITY FIRST) -! P2 REAL (IM,KM2) OUTPUT PRESSURES -! OUTPUT ARGUMENT LIST: -! U2 REAL (IM,KM2) OUTPUT ZONAL WIND -! V2 REAL (IM,KM2) OUTPUT MERIDIONAL WIND -! T2 REAL (IM,KM2) OUTPUT TEMPERATURE (K) -! Q2 REAL (IM,KM2,NT) OUTPUT TRACERS (HUMIDITY FIRST) -! -! SUBPROGRAMS CALLED: -! TERP3 CUBICALLY INTERPOLATE IN ONE DIMENSION -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN -! -!C$$$ - IMPLICIT NONE - - INTEGER, INTENT(IN) :: IM, KM1, KM2, NT - - REAL, INTENT(IN) :: P1(IM,KM1),U1(IM,KM1),V1(IM,KM1) - REAL, INTENT(IN) :: T1(IM,KM1),Q1(IM,KM1,NT) - REAL, INTENT(IN) :: W1(IM,KM1),P2(IM,KM2) - REAL, INTENT(OUT) :: U2(IM,KM2),V2(IM,KM2) - REAL, INTENT(OUT) :: T2(IM,KM2),Q2(IM,KM2,NT) - REAL, INTENT(OUT) :: W2(IM,KM2) - - REAL, PARAMETER :: DLTDZ=-6.5E-3*287.05/9.80665 - REAL, PARAMETER :: DLPVDRT=-2.5E6/461.50 - - INTEGER :: I, K, N - - REAL :: DZ - REAL,ALLOCATABLE :: Z1(:,:),Z2(:,:) - REAL,ALLOCATABLE :: C1(:,:,:),C2(:,:,:),J2(:,:,:) - - ALLOCATE (Z1(IM+1,KM1),Z2(IM+1,KM2)) - ALLOCATE (C1(IM+1,KM1,4+NT),C2(IM+1,KM2,4+NT),J2(IM+1,KM2,4+NT)) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! COMPUTE LOG PRESSURE INTERPOLATING COORDINATE -! AND COPY INPUT WIND, TEMPERATURE, HUMIDITY AND OTHER TRACERS -!$OMP PARALLEL DO PRIVATE(K,I) - DO K=1,KM1 - DO I=1,IM - Z1(I,K) = -LOG(P1(I,K)) - C1(I,K,1) = U1(I,K) - C1(I,K,2) = V1(I,K) - C1(I,K,3) = W1(I,K) - C1(I,K,4) = T1(I,K) - C1(I,K,5) = Q1(I,K,1) - ENDDO - ENDDO -!$OMP END PARALLEL DO - DO N=2,NT - DO K=1,KM1 - DO I=1,IM - C1(I,K,4+N) = Q1(I,K,N) - ENDDO - ENDDO - ENDDO -!$OMP PARALLEL DO PRIVATE(K,I) - DO K=1,KM2 - DO I=1,IM - Z2(I,K) = -LOG(P2(I,K)) - ENDDO - ENDDO -!$OMP END PARALLEL DO -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! PERFORM LAGRANGIAN ONE-DIMENSIONAL INTERPOLATION -! THAT IS 4TH-ORDER IN INTERIOR, 2ND-ORDER IN OUTSIDE INTERVALS -! AND 1ST-ORDER FOR EXTRAPOLATION. - CALL TERP3(IM,1,1,1,1,4+NT,(IM+1)*KM1,(IM+1)*KM2, & - KM1,IM+1,IM+1,Z1,C1,KM2,IM+1,IM+1,Z2,C2,J2) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! COPY OUTPUT WIND, TEMPERATURE, HUMIDITY AND OTHER TRACERS -! EXCEPT BELOW THE INPUT DOMAIN, LET TEMPERATURE INCREASE WITH A FIXED -! LAPSE RATE AND LET THE RELATIVE HUMIDITY REMAIN CONSTANT. - DO K=1,KM2 - DO I=1,IM - U2(I,K)=C2(I,K,1) - V2(I,K)=C2(I,K,2) - W2(I,K)=C2(I,K,3) - DZ=Z2(I,K)-Z1(I,1) - IF(DZ.GE.0) THEN - T2(I,K)=C2(I,K,4) - Q2(I,K,1)=C2(I,K,5) - ELSE - T2(I,K)=T1(I,1)*EXP(DLTDZ*DZ) - Q2(I,K,1)=Q1(I,1,1)*EXP(DLPVDRT*(1/T2(I,K)-1/T1(I,1))-DZ) - ENDIF - ENDDO - ENDDO - DO N=2,NT - DO K=1,KM2 - DO I=1,IM - Q2(I,K,N)=C2(I,K,4+N) - ENDDO - ENDDO - ENDDO - DEALLOCATE (Z1,Z2,C1,C2,J2) - END SUBROUTINE VINTG - end module utils diff --git a/sorc/enkf_chgres_recenter_nc.fd/driver.f90 b/sorc/enkf_chgres_recenter_nc.fd/driver.f90 deleted file mode 100644 index 1ec7c70f03..0000000000 --- a/sorc/enkf_chgres_recenter_nc.fd/driver.f90 +++ /dev/null @@ -1,67 +0,0 @@ -!!! based on chgres_recenter -!!! cory.r.martin@noaa.gov 2019-09-27 - program regrid - - use setup, only : program_setup - use interp, only : gaus_to_gaus, adjust_for_terrain - use input_data, only : read_input_data, & - read_vcoord_info - use output_data, only : set_output_grid, write_output_data - - implicit none - - call w3tagb('ENKF_CHGRES_RECENTER_NCIO',2019,0270,0085,'NP20') - - print*,"STARTING PROGRAM" - -!-------------------------------------------------------- -! Read configuration namelist. -!-------------------------------------------------------- - - call program_setup - -!-------------------------------------------------------- -! Read input grid data -!-------------------------------------------------------- - - call read_input_data - -!-------------------------------------------------------- -! Read vertical coordinate info -!-------------------------------------------------------- - - call read_vcoord_info - -!-------------------------------------------------------- -! Get output grid specs -!-------------------------------------------------------- - - call set_output_grid - -!-------------------------------------------------------- -! Interpolate data to output grid -!-------------------------------------------------------- - - call gaus_to_gaus - -!-------------------------------------------------------- -! Adjust output fields for differences between -! interpolated and external terrain. -!-------------------------------------------------------- - - call adjust_for_terrain - -!-------------------------------------------------------- -! Write output data to file. -!-------------------------------------------------------- - - call write_output_data - - print* - print*,"PROGRAM FINISHED NORMALLY!" - - call w3tage('ENKF_CHGRES_RECENTER_NCIO') - - stop - - end program regrid diff --git a/sorc/enkf_chgres_recenter_nc.fd/input_data.f90 b/sorc/enkf_chgres_recenter_nc.fd/input_data.f90 deleted file mode 100644 index 609aed05a6..0000000000 --- a/sorc/enkf_chgres_recenter_nc.fd/input_data.f90 +++ /dev/null @@ -1,345 +0,0 @@ - module input_data - - use utils - use setup - use module_fv3gfs_ncio - - implicit none - - private - - integer, public :: idvc, idsl, idvm, nvcoord - integer, public :: nvcoord_input, ntrac, ncldt - integer, public :: ij_input, kgds_input(200) - integer, public :: i_input, j_input, lev, lev_output - integer, public :: idate(6) - integer, public :: icldamt, iicmr, & - idelz,idpres,idzdt, & - irwmr,isnmr,igrle - - - real, allocatable, public :: vcoord(:,:) - real, allocatable, public :: vcoord_input(:,:) - real, allocatable, public :: clwmr_input(:,:) - real, allocatable, public :: dzdt_input(:,:) - real, allocatable, public :: grle_input(:,:) - real, allocatable, public :: cldamt_input(:,:) - real, allocatable, public :: hgt_input(:) - real, allocatable, public :: icmr_input(:,:) - real, allocatable, public :: o3mr_input(:,:) - real, allocatable, public :: rwmr_input(:,:) - real, allocatable, public :: sfcp_input(:) - real, allocatable, public :: snmr_input(:,:) - real, allocatable, public :: spfh_input(:,:) - real, allocatable, public :: tmp_input(:,:) - real, allocatable, public :: ugrd_input(:,:) - real, allocatable, public :: vgrd_input(:,:) - real :: missing_value=1.e30 - - public :: read_input_data - public :: read_vcoord_info - - contains - - subroutine read_input_data - -!------------------------------------------------------------------------------------- -! Read input grid data from a netcdf file. -!------------------------------------------------------------------------------------- - - implicit none - - integer :: vlev,rvlev - type(Dataset) :: indset - type(Dimension) :: ncdim - real, allocatable :: work2d(:,:),work3d(:,:,:) - integer iret, k, kk - real, allocatable :: ak(:), bk(:) - - ! hard code these values that are the same for GFS - idvc=2 - idsl=1 - idvm=1 - ntrac = 8 - ncldt = 5 - - print* - print*,"OPEN INPUT FILE: ",trim(input_file) - indset = open_dataset(input_file) - - print*,"GET INPUT FILE HEADER" - ncdim = get_dim(indset, 'grid_xt'); i_input = ncdim%len - ncdim = get_dim(indset, 'grid_yt'); j_input = ncdim%len - ncdim = get_dim(indset, 'pfull'); lev = ncdim%len - idate = get_idate_from_time_units(indset) - - print*,'DIMENSIONS OF DATA ARE: ', i_input, j_input, lev - print*,'DATE OF DATA IS: ', idate - - ij_input = i_input * j_input - - call read_attribute(indset, 'ak', ak) - call read_attribute(indset, 'bk', bk) - - nvcoord_input = 2 - allocate(vcoord_input(lev+1,nvcoord_input)) - do k = 1, lev+1 - kk = lev+2-k - vcoord_input(k,1) = ak(kk) - vcoord_input(k,2) = bk(kk) - print*,'VCOORD OF INPUT DATA ',k,vcoord_input(k,:) - enddo - - deallocate(ak, bk) - - print* - print*,"READ SURFACE PRESSURE" - call read_vardata(indset, 'pressfc', work2d) - - allocate(sfcp_input(ij_input)) - sfcp_input = reshape(work2d,(/ij_input/)) - print*,'MAX/MIN SURFACE PRESSURE: ',maxval(sfcp_input), minval(sfcp_input) - - print* - print*,"READ SURFACE HEIGHT" - call read_vardata(indset, 'hgtsfc', work2d) - - allocate(hgt_input(ij_input)) - hgt_input = reshape(work2d,(/ij_input/)) - print*,'MAX/MIN SURFACE HEIGHT: ',maxval(hgt_input), minval(hgt_input) - - print* - print*,"READ U WIND" - allocate(ugrd_input(ij_input,lev)) - call read_vardata(indset, 'ugrd', work3d) - do vlev = 1, lev - rvlev = lev+1-vlev - ugrd_input(:,vlev) = reshape(work3d(:,:,rvlev),(/ij_input/)) - print*,'MAX/MIN U WIND AT LEVEL ',vlev, "IS: ", maxval(ugrd_input(:,vlev)), minval(ugrd_input(:,vlev)) - enddo - - print* - print*,"READ V WIND" - allocate(vgrd_input(ij_input,lev)) - call read_vardata(indset, 'vgrd', work3d) - do vlev = 1, lev - rvlev = lev+1-vlev - vgrd_input(:,vlev) = reshape(work3d(:,:,rvlev),(/ij_input/)) - print*,'MAX/MIN V WIND AT LEVEL ', vlev, "IS: ", maxval(vgrd_input(:,vlev)), minval(vgrd_input(:,vlev)) - enddo - - print* - print*,"READ TEMPERATURE" - allocate(tmp_input(ij_input,lev)) - call read_vardata(indset, 'tmp', work3d) - do vlev = 1, lev - rvlev = lev+1-vlev - tmp_input(:,vlev) = reshape(work3d(:,:,rvlev),(/ij_input/)) - print*,'MAX/MIN TEMPERATURE AT LEVEL ', vlev, 'IS: ', maxval(tmp_input(:,vlev)), minval(tmp_input(:,vlev)) - enddo - - print* - print*,"READ SPECIFIC HUMIDITY" - allocate(spfh_input(ij_input,lev)) - call read_vardata(indset, 'spfh', work3d) - do vlev = 1, lev - rvlev = lev+1-vlev - spfh_input(:,vlev) = reshape(work3d(:,:,rvlev),(/ij_input/)) - print*,'MAX/MIN SPECIFIC HUMIDITY AT LEVEL ', vlev, 'IS: ', maxval(spfh_input(:,vlev)), minval(spfh_input(:,vlev)) - enddo - - print* - print*,"READ CLOUD LIQUID WATER" - allocate(clwmr_input(ij_input,lev)) - call read_vardata(indset, 'clwmr', work3d) - do vlev = 1, lev - rvlev = lev+1-vlev - clwmr_input(:,vlev) = reshape(work3d(:,:,rvlev),(/ij_input/)) - print*,'MAX/MIN CLOUD LIQUID WATER AT LEVEL ', vlev, 'IS: ', maxval(clwmr_input(:,vlev)), minval(clwmr_input(:,vlev)) - enddo - - print* - print*,"READ OZONE" - allocate(o3mr_input(ij_input,lev)) - call read_vardata(indset, 'o3mr', work3d) - do vlev = 1, lev - rvlev = lev+1-vlev - o3mr_input(:,vlev) = reshape(work3d(:,:,rvlev),(/ij_input/)) - print*,'MAX/MIN OZONE AT LEVEL ', vlev, 'IS: ', maxval(o3mr_input(:,vlev)), minval(o3mr_input(:,vlev)) - enddo - - print* - print*,"READ DZDT" - allocate(dzdt_input(ij_input,lev)) - call read_vardata(indset, 'dzdt', work3d, errcode=iret) - if (iret == 0) then - do vlev = 1, lev - rvlev = lev+1-vlev - dzdt_input(:,vlev) = reshape(work3d(:,:,rvlev),(/ij_input/)) - print*,'MAX/MIN DZDT AT LEVEL ', vlev, 'IS: ', maxval(dzdt_input(:,vlev)), minval(dzdt_input(:,vlev)) - enddo - idzdt = 1 - else - dzdt_input = missing_value - print*,'DZDT NOT IN INPUT FILE' - idzdt = 0 - endif - - - print* - print*,"READ RWMR" - allocate(rwmr_input(ij_input,lev)) - call read_vardata(indset, 'rwmr', work3d, errcode=iret) - if (iret == 0) then - do vlev = 1, lev - rvlev = lev+1-vlev - rwmr_input(:,vlev) = reshape(work3d(:,:,rvlev),(/ij_input/)) - print*,'MAX/MIN RWMR AT LEVEL ', vlev, 'IS: ', maxval(rwmr_input(:,vlev)), minval(rwmr_input(:,vlev)) - enddo - irwmr = 1 - else - rwmr_input = missing_value - print*,'RWMR NOT IN INPUT FILE' - irwmr = 0 - endif - - print* - print*,"READ ICMR" - allocate(icmr_input(ij_input,lev)) - call read_vardata(indset, 'icmr', work3d, errcode=iret) - if (iret == 0) then - do vlev = 1, lev - rvlev = lev+1-vlev - icmr_input(:,vlev) = reshape(work3d(:,:,rvlev),(/ij_input/)) - print*,'MAX/MIN ICMR AT LEVEL ', vlev, 'IS: ', maxval(icmr_input(:,vlev)), minval(icmr_input(:,vlev)) - enddo - iicmr = 1 - else - icmr_input = missing_value - print*,'ICMR NOT IN INPUT FILE' - iicmr = 0 - endif - - print* - print*,"READ SNMR" - allocate(snmr_input(ij_input,lev)) - call read_vardata(indset, 'snmr', work3d, errcode=iret) - if (iret == 0) then - do vlev = 1, lev - rvlev = lev+1-vlev - snmr_input(:,vlev) = reshape(work3d(:,:,rvlev),(/ij_input/)) - print*,'MAX/MIN SNMR AT LEVEL ', vlev, 'IS: ', maxval(snmr_input(:,vlev)), minval(snmr_input(:,vlev)) - enddo - isnmr = 1 - else - snmr_input = missing_value - print*,'SNMR NOT IN INPUT FILE' - isnmr = 0 - endif - - print* - print*,"READ GRLE" - allocate(grle_input(ij_input,lev)) - call read_vardata(indset, 'grle', work3d, errcode=iret) - if (iret == 0) then - do vlev = 1, lev - rvlev = lev+1-vlev - grle_input(:,vlev) = reshape(work3d(:,:,rvlev),(/ij_input/)) - print*,'MAX/MIN GRLE AT LEVEL ', vlev, 'IS: ', maxval(grle_input(:,vlev)), minval(grle_input(:,vlev)) - enddo - igrle = 1 - else - grle_input = missing_value - print*,'GRLE NOT IN INPUT FILE' - igrle = 0 - endif - - print* - print*,"READ CLD_AMT" - allocate(cldamt_input(ij_input,lev)) - if (cld_amt) then - call read_vardata(indset, 'cld_amt', work3d, errcode=iret) - if (iret == 0) then - do vlev = 1, lev - rvlev = lev+1-vlev - cldamt_input(:,vlev) = reshape(work3d(:,:,rvlev),(/ij_input/)) - print*,'MAX/MIN CLD_AMT AT LEVEL ', vlev, 'IS: ', maxval(cldamt_input(:,vlev)), minval(cldamt_input(:,vlev)) - enddo - icldamt = 1 - else - cldamt_input = missing_value - print*,'CLDAMT NOT IN INPUT FILE' - icldamt = 0 - endif - else - cldamt_input = missing_value - print*,'CLDAMT NOT READ - CLD_AMT NAMELIST OPTION NOT SET TO TRUE' - icldamt = 0 - end if - - call read_vardata(indset, 'dpres', work3d, errcode=iret) - if (iret == 0) then - idpres = 1 - else - idpres = 0 - endif - call read_vardata(indset, 'delz', work3d, errcode=iret) - if (iret == 0) then - idelz = 1 - else - idelz = 0 - endif - - print*,"CLOSE FILE" - call close_dataset(indset) - deallocate(work2d,work3d) - -!--------------------------------------------------------------------------------------- -! Set the grib 1 grid description array need by the NCEP IPOLATES library. -!--------------------------------------------------------------------------------------- - - call calc_kgds(i_input, j_input, kgds_input) - - return - - end subroutine read_input_data - - subroutine read_vcoord_info - -!--------------------------------------------------------------------------------- -! Read vertical coordinate information. -!--------------------------------------------------------------------------------- - - implicit none - - integer :: istat, n, k, k2 - - real, allocatable :: ak(:), bk(:) - - type(Dataset) :: refdset - - print* - print*,"READ OUTPUT VERT COORDINATE INFO FROM REFERENCE FILE: ",trim(ref_file) - - refdset = open_dataset(ref_file) - call read_attribute(refdset, 'ak', ak) - call read_attribute(refdset, 'bk', bk) - call close_dataset(refdset) - - lev_output = size(bk) - 1 - - nvcoord=2 - allocate(vcoord(lev_output+1, nvcoord)) - - do k = 1, (lev_output+1) - k2 = lev_output+2 - k - vcoord(k,1) = ak(k2) - vcoord(k,2) = bk(k2) - print*,'VCOORD OF OUTPUT GRID ',k,vcoord(k,:) - enddo - - deallocate (ak, bk) - - end subroutine read_vcoord_info - - end module input_data diff --git a/sorc/enkf_chgres_recenter_nc.fd/interp.f90 b/sorc/enkf_chgres_recenter_nc.fd/interp.f90 deleted file mode 100644 index 291e8ef0d3..0000000000 --- a/sorc/enkf_chgres_recenter_nc.fd/interp.f90 +++ /dev/null @@ -1,582 +0,0 @@ - module interp - - implicit none - - private - - real, allocatable :: sfcp_b4_adj_output(:) - real, allocatable :: clwmr_b4_adj_output(:,:) - real, allocatable :: dzdt_b4_adj_output(:,:) - real, allocatable :: grle_b4_adj_output(:,:) - real, allocatable :: cldamt_b4_adj_output(:,:) - real, allocatable :: icmr_b4_adj_output(:,:) - real, allocatable :: o3mr_b4_adj_output(:,:) - real, allocatable :: rwmr_b4_adj_output(:,:) - real, allocatable :: snmr_b4_adj_output(:,:) - real, allocatable :: spfh_b4_adj_output(:,:) - real, allocatable :: tmp_b4_adj_output(:,:) - real, allocatable :: ugrd_b4_adj_output(:,:) - real, allocatable :: vgrd_b4_adj_output(:,:) - - public :: adjust_for_terrain - public :: gaus_to_gaus - - contains - - subroutine adjust_for_terrain - -!--------------------------------------------------------------------------------- -! Adjust fields based on differences between the interpolated and external -! terrain. -!--------------------------------------------------------------------------------- - - use input_data - use output_data - use utils - use setup - - implicit none - - integer :: k - - real, allocatable :: pres_b4_adj_output(:,:) - real, allocatable :: pres_output(:,:) - real, allocatable :: q_b4_adj_output(:,:,:), q_output(:,:,:) - -!--------------------------------------------------------------------------------- -! First, compute the mid-layer pressure using the interpolated surface pressure. -!--------------------------------------------------------------------------------- - - allocate(pres_b4_adj_output(ij_output,lev)) - pres_b4_adj_output = 0.0 - - print*,'before newpr1, sfcp b4 adj: ', sfcp_b4_adj_output(ij_output/2) - - print* - print*,"COMPUTE MID-LAYER PRESSURE FROM INTERPOLATED SURFACE PRESSURE." - call newpr1(ij_output, lev, idvc, idsl, nvcoord_input, vcoord_input, & - sfcp_b4_adj_output, pres_b4_adj_output) - - print*,'after newpr1, pres b4 adj: ', pres_b4_adj_output(ij_output/2,:) - -!--------------------------------------------------------------------------------- -! Adjust surface pressure based on differences between interpolated and -! grid terrain. -!--------------------------------------------------------------------------------- - - allocate(sfcp_output(ij_output)) - sfcp_output = 0.0 - - print*,"ADJUST SURFACE PRESSURE BASED ON TERRAIN DIFFERENCES" - call newps(hgt_output, sfcp_b4_adj_output, ij_output, & - lev, pres_b4_adj_output, tmp_b4_adj_output, & - spfh_b4_adj_output, hgt_external_output, sfcp_output) - - print*,'after newps ',sfcp_b4_adj_output(ij_output/2),sfcp_output(ij_output/2) - - deallocate(sfcp_b4_adj_output) - -!--------------------------------------------------------------------------------- -! Recompute mid-layer pressure based on the adjusted surface pressure. -!--------------------------------------------------------------------------------- - - allocate(pres_output(ij_output, lev_output)) - pres_output = 0.0 - - allocate(dpres_output(ij_output, lev_output)) - dpres_output = 0.0 - - print*,'before newpr1 ',sfcp_output(ij_output/2) - print*,'before newpr1 ',idvc,idsl,nvcoord,vcoord - - print*,"RECOMPUTE MID-LAYER PRESSURE." - call newpr1(ij_output, lev_output, idvc, idsl, nvcoord, vcoord, & - sfcp_output, pres_output, dpres_output) - - do k = 1, lev_output - print*,'after newpr1 ',pres_output(ij_output/2,k), dpres_output(ij_output/2,k) - enddo - -!--------------------------------------------------------------------------------- -! Vertically interpolate from the pre-adjusted to the adjusted mid-layer -! pressures. -!--------------------------------------------------------------------------------- - - allocate(q_b4_adj_output(ij_output,lev,ntrac)) - q_b4_adj_output(:,:,1) = spfh_b4_adj_output(:,:) - q_b4_adj_output(:,:,2) = o3mr_b4_adj_output(:,:) - q_b4_adj_output(:,:,3) = clwmr_b4_adj_output(:,:) - q_b4_adj_output(:,:,4) = rwmr_b4_adj_output(:,:) - q_b4_adj_output(:,:,5) = icmr_b4_adj_output(:,:) - q_b4_adj_output(:,:,6) = snmr_b4_adj_output(:,:) - q_b4_adj_output(:,:,7) = grle_b4_adj_output(:,:) - q_b4_adj_output(:,:,8) = cldamt_b4_adj_output(:,:) - - allocate(q_output(ij_output,lev_output,ntrac)) - q_output = 0.0 - - allocate(dzdt_output(ij_output,lev_output)) - dzdt_output = 0.0 - - allocate(ugrd_output(ij_output,lev_output)) - ugrd_output=0.0 - - allocate(vgrd_output(ij_output,lev_output)) - vgrd_output=0.0 - - allocate(tmp_output(ij_output,lev_output)) - tmp_output=0.0 - - print*,"VERTICALLY INTERPOLATE TO NEW PRESSURE LEVELS" - call vintg(ij_output, lev, lev_output, ntrac, pres_b4_adj_output, & - ugrd_b4_adj_output, vgrd_b4_adj_output, tmp_b4_adj_output, q_b4_adj_output, & - dzdt_b4_adj_output, pres_output, ugrd_output, vgrd_output, tmp_output, & - q_output, dzdt_output) - - deallocate (dzdt_b4_adj_output, q_b4_adj_output) -!deallocate (pres_b4_adj_output, pres_output) - - allocate(spfh_output(ij_output,lev_output)) - spfh_output = q_output(:,:,1) - allocate(o3mr_output(ij_output,lev_output)) - o3mr_output = q_output(:,:,2) - allocate(clwmr_output(ij_output,lev_output)) - clwmr_output = q_output(:,:,3) - allocate(rwmr_output(ij_output,lev_output)) - rwmr_output = q_output(:,:,4) - allocate(icmr_output(ij_output,lev_output)) - icmr_output = q_output(:,:,5) - allocate(snmr_output(ij_output,lev_output)) - snmr_output = q_output(:,:,6) - allocate(grle_output(ij_output,lev_output)) - grle_output = q_output(:,:,7) - allocate(cldamt_output(ij_output,lev_output)) - cldamt_output = q_output(:,:,8) - - deallocate(q_output) - - do k = 1, lev - print*,'after vintg tmp b4 ',tmp_b4_adj_output(ij_output/2,k), pres_b4_adj_output(ij_output/2,k) - enddo - do k = 1, lev_output - print*,'after vintg tmp ',tmp_output(ij_output/2,k),pres_output(ij_output/2,k) - enddo - - deallocate(tmp_b4_adj_output) - - deallocate(ugrd_b4_adj_output) - - deallocate(vgrd_b4_adj_output) - - deallocate(spfh_b4_adj_output) - - deallocate(o3mr_b4_adj_output) - - deallocate(clwmr_b4_adj_output) - - deallocate(rwmr_b4_adj_output) - - deallocate(icmr_b4_adj_output) - - deallocate(snmr_b4_adj_output) - - deallocate(grle_b4_adj_output) - - deallocate(cldamt_b4_adj_output) - - allocate(delz_output(ij_output, lev_output)) - delz_output = 0.0 - - call compute_delz(ij_output, lev_output, vcoord(:,1), vcoord(:,2), sfcp_output, hgt_output, & - tmp_output, spfh_output, delz_output) - - do k = 1, lev_output - print*,'after compute_delz ',delz_output(ij_output/2,k) - enddo - - deallocate(hgt_output) - - end subroutine adjust_for_terrain - - subroutine gaus_to_gaus - -!---------------------------------------------------------------------------------- -! Interpolate data from the input to output grid using IPOLATES library. -!---------------------------------------------------------------------------------- - - use output_data - use input_data - use setup - - implicit none - - integer :: ip, ipopt(20), i - integer :: num_fields - integer :: iret, numpts - integer, allocatable :: ibi(:), ibo(:) - - logical*1, allocatable :: bitmap_input(:,:), bitmap_output(:,:) - logical :: same_grid - - real, allocatable :: data_input(:,:) - real, allocatable :: data_output(:,:), crot(:), srot(:) - - same_grid=.true. - do i = 1, 11 - if (kgds_input(i) /= kgds_output(i)) then - same_grid=.false. - exit - endif - enddo - - if (same_grid) then - - print* - print*,'INPUT AND OUTPUT GRIDS ARE THE SAME.' - print*,'NO HORIZ INTERPOLATION REQUIRED.' - - allocate(hgt_output(ij_output)) - hgt_output = hgt_input - deallocate(hgt_input) - - allocate(sfcp_b4_adj_output(ij_output)) - sfcp_b4_adj_output = sfcp_input - deallocate(sfcp_input) - - allocate(tmp_b4_adj_output(ij_output,lev)) - tmp_b4_adj_output = tmp_input - deallocate(tmp_input) - - allocate(clwmr_b4_adj_output(ij_output,lev)) - clwmr_b4_adj_output = clwmr_input - deallocate(clwmr_input) - - allocate(spfh_b4_adj_output(ij_output,lev)) - spfh_b4_adj_output = spfh_input - deallocate(spfh_input) - - allocate(o3mr_b4_adj_output(ij_output,lev)) - o3mr_b4_adj_output = o3mr_input - deallocate(o3mr_input) - - allocate(dzdt_b4_adj_output(ij_output,lev)) - dzdt_b4_adj_output = dzdt_input - deallocate(dzdt_input) - - allocate(rwmr_b4_adj_output(ij_output,lev)) - rwmr_b4_adj_output = rwmr_input - deallocate(rwmr_input) - - allocate(snmr_b4_adj_output(ij_output,lev)) - snmr_b4_adj_output = snmr_input - deallocate(snmr_input) - - allocate(icmr_b4_adj_output(ij_output,lev)) - icmr_b4_adj_output = icmr_input - deallocate(icmr_input) - - allocate(grle_b4_adj_output(ij_output,lev)) - grle_b4_adj_output = grle_input - deallocate(grle_input) - - allocate(cldamt_b4_adj_output(ij_output,lev)) - cldamt_b4_adj_output = cldamt_input - deallocate(cldamt_input) - - allocate(ugrd_b4_adj_output(ij_output,lev)) - ugrd_b4_adj_output = ugrd_input - deallocate(ugrd_input) - - allocate(vgrd_b4_adj_output(ij_output,lev)) - vgrd_b4_adj_output = vgrd_input - deallocate(vgrd_input) - - else - - print* - print*,'INTERPOLATE DATA TO OUTPUT GRID' - - - ip = 0 ! bilinear - ipopt = 0 - -!---------------------------------------------------------------------------------- -! Do 2-D fields first -!---------------------------------------------------------------------------------- - - num_fields = 1 - - allocate(ibi(num_fields)) - ibi = 0 ! no bitmap - allocate(ibo(num_fields)) - ibo = 0 ! no bitmap - - allocate(bitmap_input(ij_input,num_fields)) - bitmap_input = .true. - allocate(bitmap_output(ij_output,num_fields)) - bitmap_output = .true. - - allocate(rlat_output(ij_output)) - rlat_output = 0.0 - allocate(rlon_output(ij_output)) - rlon_output = 0.0 - -!---------------- -! Surface height -!---------------- - - allocate(data_input(ij_input,num_fields)) - data_input(:,num_fields) = hgt_input(:) - deallocate(hgt_input) - - allocate(data_output(ij_output,num_fields)) - data_output = 0 - - print*,"INTERPOLATE SURFACE HEIGHT" - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, data_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - data_output, iret) - if (iret /= 0) goto 89 - - allocate(hgt_output(ij_output)) - hgt_output = data_output(:,num_fields) - -!------------------ -! surface pressure -!------------------ - - data_input(:,num_fields) = sfcp_input(:) - deallocate(sfcp_input) - - print*,"INTERPOLATE SURFACE PRESSURE" - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, data_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - data_output, iret) - if (iret /= 0) goto 89 - - allocate(sfcp_b4_adj_output(ij_output)) - sfcp_b4_adj_output = data_output(:,num_fields) - - deallocate(ibi, ibo, bitmap_input, bitmap_output, data_input, data_output) - -!---------------------------------------------------------------------------------- -! 3d scalars -!---------------------------------------------------------------------------------- - - num_fields = lev - - allocate(ibi(num_fields)) - ibi = 0 ! no bitmap - allocate(ibo(num_fields)) - ibo = 0 ! no bitmap - - allocate(bitmap_input(ij_input,num_fields)) - bitmap_input = .true. - allocate(bitmap_output(ij_output,num_fields)) - bitmap_output = .true. - -!------------- -! Temperature -!------------- - - allocate(tmp_b4_adj_output(ij_output,num_fields)) - tmp_b4_adj_output = 0 - - print*,'INTERPOLATE TEMPERATURE' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, tmp_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - tmp_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(tmp_input) - -!-------------------- -! Cloud liquid water -!-------------------- - - allocate(clwmr_b4_adj_output(ij_output,num_fields)) - clwmr_b4_adj_output = 0 - - print*,'INTERPOLATE CLOUD LIQUID WATER' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, clwmr_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - clwmr_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(clwmr_input) - -!-------------------- -! Specific humidity -!-------------------- - - allocate(spfh_b4_adj_output(ij_output,num_fields)) - spfh_b4_adj_output = 0 - - print*,'INTERPOLATE SPECIFIC HUMIDITY' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, spfh_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - spfh_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(spfh_input) - -!----------- -! Ozone -!----------- - - allocate(o3mr_b4_adj_output(ij_output,num_fields)) - o3mr_b4_adj_output = 0 - - print*,'INTERPOLATE OZONE' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, o3mr_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - o3mr_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(o3mr_input) - -!----------- -! DZDT -!----------- - - allocate(dzdt_b4_adj_output(ij_output,num_fields)) - dzdt_b4_adj_output = 0 - - print*,'INTERPOLATE DZDT' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, dzdt_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - dzdt_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(dzdt_input) - -!---------------------------------------------------------------------------------- -! Interpolate additional 3-d scalars for GFDL microphysics. -!---------------------------------------------------------------------------------- - - -!------------- -! Rain water -!------------- - - allocate(rwmr_b4_adj_output(ij_output,num_fields)) - rwmr_b4_adj_output = 0 - - print*,'INTERPOLATE RWMR' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, rwmr_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - rwmr_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(rwmr_input) - -!------------- -! Snow water -!------------- - - allocate(snmr_b4_adj_output(ij_output,num_fields)) - snmr_b4_adj_output = 0 - - print*,'INTERPOLATE SNMR' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, snmr_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - snmr_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(snmr_input) - -!------------- -! Ice water -!------------- - - allocate(icmr_b4_adj_output(ij_output,num_fields)) - icmr_b4_adj_output = 0 - - print*,'INTERPOLATE ICMR' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, icmr_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - icmr_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(icmr_input) - -!------------- -! Graupel -!------------- - - allocate(grle_b4_adj_output(ij_output,num_fields)) - grle_b4_adj_output = 0 - - print*,'INTERPOLATE GRLE' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, grle_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - grle_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(grle_input) - - -!--------------------------- -! Cloud amount -!--------------------------- - - allocate(cldamt_b4_adj_output(ij_output,num_fields)) - cldamt_b4_adj_output = 0 - - print*,'INTERPOLATE CLD_AMT' - call ipolates(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, cldamt_input, & - numpts, rlat_output, rlon_output, ibo, bitmap_output, & - cldamt_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate(cldamt_input) - - - -!---------------------------------------------------------------------------------- -! 3d u/v winds -!---------------------------------------------------------------------------------- - - allocate(crot(ij_output), srot(ij_output)) - crot = 0. - srot = 0. - - allocate(ugrd_b4_adj_output(ij_output,num_fields)) - ugrd_b4_adj_output = 0 - allocate(vgrd_b4_adj_output(ij_output,num_fields)) - vgrd_b4_adj_output = 0 - - print*,'INTERPOLATE WINDS' - call ipolatev(ip, ipopt, kgds_input, kgds_output, ij_input, ij_output,& - num_fields, ibi, bitmap_input, ugrd_input, vgrd_input, & - numpts, rlat_output, rlon_output, crot, srot, ibo, bitmap_output, & - ugrd_b4_adj_output, vgrd_b4_adj_output, iret) - if (iret /= 0) goto 89 - - deallocate (ugrd_input, vgrd_input) - deallocate (crot, srot) - deallocate (ibi, ibo, bitmap_input, bitmap_output) - - endif - - return - - 89 continue - print*,"FATAL ERROR IN IPOLATES. IRET IS: ", iret - call errexit(23) - - end subroutine gaus_to_gaus - - end module interp diff --git a/sorc/enkf_chgres_recenter_nc.fd/makefile b/sorc/enkf_chgres_recenter_nc.fd/makefile deleted file mode 100644 index c9f4c7be37..0000000000 --- a/sorc/enkf_chgres_recenter_nc.fd/makefile +++ /dev/null @@ -1,28 +0,0 @@ -SHELL= /bin/sh - -LIBS= $(FV3GFS_NCIO_LIB) $(BACIO_LIB4) $(W3NCO_LIB4) $(IP_LIB4) $(SP_LIB4) -L$(NETCDF)/lib -lnetcdff -lnetcdf -lhdf5_hl -lhdf5 -lz - -CMD= enkf_chgres_recenter_nc.x - -OBJS = driver.o input_data.o interp.o output_data.o utils.o setup.o - -$(CMD): $(OBJS) - $(FC) $(FFLAGS) -o $(CMD) $(OBJS) $(LIBS) - -driver.o: setup.o output_data.o interp.o input_data.o driver.f90 - $(FC) $(FFLAGS) -I$(FV3GFS_NCIO_INC) -I$(NETCDF)/include -c driver.f90 -interp.o: setup.o utils.o output_data.o input_data.o interp.f90 - $(FC) $(FFLAGS) -I$(FV3GFS_NCIO_INC) -I$(NETCDF)/include -c interp.f90 -input_data.o: setup.o utils.o input_data.f90 - $(FC) $(FFLAGS) -I$(FV3GFS_NCIO_INC) -I$(NETCDF)/include -c input_data.f90 -output_data.o: setup.o utils.o input_data.o output_data.f90 - $(FC) $(FFLAGS) -I$(FV3GFS_NCIO_INC) -I$(NETCDF)/include -c output_data.f90 -setup.o: setup.f90 - $(FC) $(FFLAGS) -I$(FV3GFS_NCIO_INC) -I$(NETCDF)/include -c setup.f90 -utils.o: utils.f90 - $(FC) $(FFLAGS) -I$(FV3GFS_NCIO_INC) -I$(NETCDF)/include -c utils.f90 -clean: - rm -f *.o *.mod ${CMD} -install: - -cp $(CMD) ../../exec/. - diff --git a/sorc/enkf_chgres_recenter_nc.fd/output_data.f90 b/sorc/enkf_chgres_recenter_nc.fd/output_data.f90 deleted file mode 100644 index 17766d23c0..0000000000 --- a/sorc/enkf_chgres_recenter_nc.fd/output_data.f90 +++ /dev/null @@ -1,288 +0,0 @@ - module output_data - - use module_fv3gfs_ncio - - implicit none - - private - - integer, public :: kgds_output(200) - -! data on the output grid. - real, allocatable, public :: hgt_output(:) ! interpolated from input grid - real, allocatable, public :: hgt_external_output(:) - real, allocatable, public :: sfcp_output(:) - real, allocatable, public :: tmp_output(:,:) - real, allocatable, public :: clwmr_output(:,:) - real, allocatable, public :: delz_output(:,:) - real, allocatable, public :: dpres_output(:,:) - real, allocatable, public :: dzdt_output(:,:) - real, allocatable, public :: o3mr_output(:,:) - real, allocatable, public :: spfh_output(:,:) - real, allocatable, public :: ugrd_output(:,:) - real, allocatable, public :: vgrd_output(:,:) - real, allocatable, public :: rwmr_output(:,:) - real, allocatable, public :: icmr_output(:,:) - real, allocatable, public :: snmr_output(:,:) - real, allocatable, public :: grle_output(:,:) - real, allocatable, public :: cldamt_output(:,:) - real, allocatable, public :: rlat_output(:) - real, allocatable, public :: rlon_output(:) - - public :: set_output_grid - public :: write_output_data - type(Dataset) :: indset, outdset - - - contains - - subroutine set_output_grid - -!------------------------------------------------------------------- -! Set grid specs on the output grid. -!------------------------------------------------------------------- - - use setup - use input_data - use utils - - implicit none - - - type(Dataset) :: indset - real, allocatable :: work2d(:,:) - - - - print* - print*,"OUTPUT GRID I/J DIMENSIONS: ", i_output, j_output - -!------------------------------------------------------------------- -! Set the grib 1 grid description section, which is needed -! by the IPOLATES library. -!------------------------------------------------------------------- - - kgds_output = 0 - - call calc_kgds(i_output, j_output, kgds_output) - -!------------------------------------------------------------------- -! Read the terrain on the output grid. To ensure exact match, -! read it from an existing netcdf file. -!------------------------------------------------------------------- - - print* - print*,"OPEN OUTPUT GRID TERRAIN FILE: ", trim(terrain_file) - indset = open_dataset(terrain_file) - - allocate(hgt_external_output(ij_output)) - - print* - print*,"READ SURFACE HEIGHT" - call read_vardata(indset, 'hgtsfc', work2d) - - hgt_external_output = reshape(work2d,(/ij_output/)) - - call close_dataset(indset) - - end subroutine set_output_grid - - subroutine write_output_data - -!------------------------------------------------------------------- -! Write output grid data to a netcdf file. -!------------------------------------------------------------------- - - use input_data - use setup - - implicit none - - integer :: n,nrev - real, allocatable, dimension (:,:) :: out2d - real, allocatable, dimension (:,:,:) :: out3d - -!------------------------------------------------------------------- -! Set up some header info. -!------------------------------------------------------------------- - - call header_set - -!------------------------------------------------------------------- -! Open and write file. -!------------------------------------------------------------------- -! TODO: note there can be compression applied to this output file if necessary -! see how it's done in the GSI EnKF for example - - - print* - print*,'OPEN OUTPUT FILE: ',trim(output_file) - allocate(out2d(i_output,j_output)) - allocate(out3d(i_output,j_output,lev_output)) - - print*,"WRITE SURFACE HEIGHT" - out2d = reshape(hgt_external_output, (/i_output,j_output/)) - call write_vardata(outdset, 'hgtsfc', out2d) - deallocate(hgt_external_output) - - print*,"WRITE SURFACE PRESSURE" - out2d = reshape(sfcp_output, (/i_output,j_output/)) - call write_vardata(outdset, 'pressfc', out2d) - deallocate(sfcp_output) - - print*,"WRITE TEMPERATURE" - do n=1,lev_output - nrev = lev_output+1-n - out3d(:,:,n) = reshape(tmp_output(:,nrev), (/i_output,j_output/)) - end do - call write_vardata(outdset, 'tmp', out3d) - deallocate(tmp_output) - - print*,"WRITE CLOUD LIQUID WATER" - do n=1,lev_output - nrev = lev_output+1-n - out3d(:,:,n) = reshape(clwmr_output(:,nrev), (/i_output,j_output/)) - end do - call write_vardata(outdset, 'clwmr', out3d) - deallocate(clwmr_output) - - print*,"WRITE SPECIFIC HUMIDITY" - do n=1,lev_output - nrev = lev_output+1-n - out3d(:,:,n) = reshape(spfh_output(:,nrev), (/i_output,j_output/)) - end do - call write_vardata(outdset, 'spfh', out3d) - deallocate(spfh_output) - - print*,"WRITE OZONE" - do n=1,lev_output - nrev = lev_output+1-n - out3d(:,:,n) = reshape(o3mr_output(:,nrev), (/i_output,j_output/)) - end do - call write_vardata(outdset, 'o3mr', out3d) - deallocate(o3mr_output) - - print*,"WRITE U-WINDS" - do n=1,lev_output - nrev = lev_output+1-n - out3d(:,:,n) = reshape(ugrd_output(:,nrev), (/i_output,j_output/)) - end do - call write_vardata(outdset, 'ugrd', out3d) - deallocate(ugrd_output) - - print*,"WRITE V-WINDS" - do n=1,lev_output - nrev = lev_output+1-n - out3d(:,:,n) = reshape(vgrd_output(:,nrev), (/i_output,j_output/)) - end do - call write_vardata(outdset, 'vgrd', out3d) - deallocate(vgrd_output) - - if (idzdt == 1) then - print*,"WRITE DZDT" - do n=1,lev_output - nrev = lev_output+1-n - out3d(:,:,n) = reshape(dzdt_output(:,nrev), (/i_output,j_output/)) - end do - call write_vardata(outdset, 'dzdt', out3d) - deallocate(dzdt_output) - endif - - if (idpres == 1) then - print*,"WRITE DPRES" - do n=1,lev_output - nrev = lev_output+1-n - out3d(:,:,n) = reshape(dpres_output(:,nrev), (/i_output,j_output/)) - end do - call write_vardata(outdset, 'dpres', out3d) - endif - deallocate(dpres_output) - - if (idelz == 1) then - print*,"WRITE DELZ" - do n=1,lev_output - nrev = lev_output+1-n - out3d(:,:,n) = reshape(delz_output(:,nrev), (/i_output,j_output/)) - end do - call write_vardata(outdset, 'delz', out3d) - endif - deallocate(delz_output) - - if (irwmr == 1) then - print*,"WRITE RAIN WATER" - do n=1,lev_output - nrev = lev_output+1-n - out3d(:,:,n) = reshape(rwmr_output(:,nrev), (/i_output,j_output/)) - end do - call write_vardata(outdset, 'rwmr', out3d) - deallocate(rwmr_output) - endif - - if (isnmr == 1) then - print*,"WRITE SNOW WATER" - do n=1,lev_output - nrev = lev_output+1-n - out3d(:,:,n) = reshape(snmr_output(:,nrev), (/i_output,j_output/)) - end do - call write_vardata(outdset, 'snmr', out3d) - deallocate(snmr_output) - endif - - if (iicmr == 1) then - print*,"WRITE ICE WATER" - do n=1,lev_output - nrev = lev_output+1-n - out3d(:,:,n) = reshape(icmr_output(:,nrev), (/i_output,j_output/)) - end do - call write_vardata(outdset, 'icmr', out3d) - deallocate(icmr_output) - endif - - if (igrle == 1) then - print*,"WRITE GRAUPEL" - do n=1,lev_output - nrev = lev_output+1-n - out3d(:,:,n) = reshape(grle_output(:,nrev), (/i_output,j_output/)) - end do - call write_vardata(outdset, 'grle', out3d) - deallocate(grle_output) - endif - - if (icldamt == 1) then - print*,"WRITE CLD_AMT" - do n = 1, lev_output - nrev = lev_output+1-n - out3d(:,:,n) = reshape(cldamt_output(:,nrev), (/i_output,j_output/)) - end do - call write_vardata(outdset, 'cld_amt', out3d) - deallocate(cldamt_output) - endif - - - deallocate(out2d,out3d) - - return - - end subroutine write_output_data - - subroutine header_set - -!------------------------------------------------------------------- -! copy dimensions and metadata to the output file from the -! input terrain (output res) file -!------------------------------------------------------------------- - - use input_data - use setup - - implicit none - - print* - print*,"SET HEADER INFO FOR OUTPUT FILE." - - indset = open_dataset(ref_file) - outdset = create_dataset(output_file, indset, nocompress=.true.) - - end subroutine header_set - - end module output_data diff --git a/sorc/enkf_chgres_recenter_nc.fd/setup.f90 b/sorc/enkf_chgres_recenter_nc.fd/setup.f90 deleted file mode 100644 index ee9956ae03..0000000000 --- a/sorc/enkf_chgres_recenter_nc.fd/setup.f90 +++ /dev/null @@ -1,55 +0,0 @@ - module setup - - implicit none - - private - - character(len=300), public :: input_file - character(len=300), public :: output_file - character(len=300), public :: terrain_file - character(len=300), public :: ref_file - - integer, public :: i_output - integer, public :: j_output - integer , public :: ij_output - logical, public :: cld_amt - - public :: program_setup - - contains - - subroutine program_setup - - implicit none - - integer :: istat - character(len=500) :: filenamelist - - namelist /chgres_setup/ i_output, j_output, input_file, output_file, & - terrain_file, cld_amt, ref_file - - cld_amt = .false. ! default option - - print* - call getarg(1,filenamelist) - print*,"OPEN SETUP NAMELIST ",trim(filenamelist) - open(43, file=filenamelist, iostat=istat) - if (istat /= 0) then - print*,"FATAL ERROR OPENING NAMELIST FILE. ISTAT IS: ",istat - stop - endif - - print*,"READ SETUP NAMELIST." - read(43, nml=chgres_setup, iostat=istat) - if (istat /= 0) then - print*,"FATAL ERROR READING NAMELIST FILE. ISTAT IS: ",istat - stop - endif - - ij_output = i_output * j_output - - close(43) - - end subroutine program_setup - - end module setup diff --git a/sorc/enkf_chgres_recenter_nc.fd/utils.f90 b/sorc/enkf_chgres_recenter_nc.fd/utils.f90 deleted file mode 100644 index 786c3644b5..0000000000 --- a/sorc/enkf_chgres_recenter_nc.fd/utils.f90 +++ /dev/null @@ -1,776 +0,0 @@ - module utils - - private - - public :: calc_kgds - public :: newps - public :: newpr1 - public :: vintg - public :: compute_delz - - contains - - subroutine compute_delz(ijm, levp, ak_in, bk_in, ps, zs, t, sphum, delz) - - implicit none - integer, intent(in):: levp, ijm - real, intent(in), dimension(levp+1):: ak_in, bk_in - real, intent(in), dimension(ijm):: ps, zs - real, intent(in), dimension(ijm,levp):: t - real, intent(in), dimension(ijm,levp):: sphum - real, intent(out), dimension(ijm,levp):: delz -! Local: - real, dimension(ijm,levp+1):: zh - real, dimension(ijm,levp+1):: pe0, pn0 - real, dimension(levp+1) :: ak, bk - integer i,k - real, parameter :: GRAV = 9.80665 - real, parameter :: RDGAS = 287.05 - real, parameter :: RVGAS = 461.50 - real :: zvir - real:: grd - - print*,"COMPUTE LAYER THICKNESS." - - grd = grav/rdgas - zvir = rvgas/rdgas - 1. - ak = ak_in - bk = bk_in - ak(levp+1) = max(1.e-9, ak(levp+1)) - - do i=1, ijm - pe0(i,levp+1) = ak(levp+1) - pn0(i,levp+1) = log(pe0(i,levp+1)) - enddo - - do k=levp,1, -1 - do i=1,ijm - pe0(i,k) = ak(k) + bk(k)*ps(i) - pn0(i,k) = log(pe0(i,k)) - enddo - enddo - - do i = 1, ijm - zh(i,1) = zs(i) - enddo - - do k = 2, levp+1 - do i = 1, ijm - zh(i,k) = zh(i,k-1)+t(i,k-1)*(1.+zvir*sphum(i,k-1))* & - (pn0(i,k-1)-pn0(i,k))/grd - enddo - enddo - - do k = 1, levp - do i = 1, ijm - delz(i,k) = zh(i,k) - zh(i,k+1) - enddo - enddo - - end subroutine compute_delz - - subroutine calc_kgds(idim, jdim, kgds) - - implicit none - - integer, intent(in) :: idim, jdim - - integer, intent(out) :: kgds(200) - - kgds = 0 - kgds(1) = 4 ! OCT 6 - TYPE OF GRID (GAUSSIAN) - kgds(2) = idim ! OCT 7-8 - # PTS ON LATITUDE CIRCLE - kgds(3) = jdim ! OCT 9-10 - # PTS ON LONGITUDE CIRCLE - kgds(4) = 90000 ! OCT 11-13 - LAT OF ORIGIN - kgds(5) = 0 ! OCT 14-16 - LON OF ORIGIN - kgds(6) = 128 ! OCT 17 - RESOLUTION FLAG - kgds(7) = -90000 ! OCT 18-20 - LAT OF EXTREME POINT - kgds(8) = nint(-360000./idim) ! OCT 21-23 - LON OF EXTREME POINT - kgds(9) = nint((360.0 / float(idim))*1000.0) - ! OCT 24-25 - LONGITUDE DIRECTION INCR. - kgds(10) = jdim/2 ! OCT 26-27 - NUMBER OF CIRCLES POLE TO EQUATOR - kgds(12) = 255 ! OCT 29 - RESERVED - kgds(20) = 255 ! OCT 5 - NOT USED, SET TO 255 - - end subroutine calc_kgds - - SUBROUTINE NEWPS(ZS,PS,IM,KM,P,T,Q,ZSNEW,PSNEW) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! -! SUBPROGRAM: NEWPS COMPUTE NEW SURFACE PRESSURE -! PRGMMR: IREDELL ORG: W/NMC23 DATE: 92-10-31 -! -! ABSTRACT: COMPUTES A NEW SURFACE PRESSURE GIVEN A NEW OROGRAPHY. -! THE NEW PRESSURE IS COMPUTED ASSUMING A HYDROSTATIC BALANCE -! AND A CONSTANT TEMPERATURE LAPSE RATE. BELOW GROUND, THE -! LAPSE RATE IS ASSUMED TO BE -6.5 K/KM. -! -! PROGRAM HISTORY LOG: -! 91-10-31 MARK IREDELL -! -! USAGE: CALL NEWPS(ZS,PS,IM,KM,P,T,Q,ZSNEW,PSNEW) -! INPUT ARGUMENT LIST: -! IM INTEGER NUMBER OF POINTS TO COMPUTE -! ZS REAL (IM) OLD OROGRAPHY (M) -! PS REAL (IM) OLD SURFACE PRESSURE (PA) -! KM INTEGER NUMBER OF LEVELS -! P REAL (IM,KM) PRESSURES (PA) -! T REAL (IM,KM) TEMPERATURES (K) -! Q REAL (IM,KM) SPECIFIC HUMIDITIES (KG/KG) -! ZSNEW REAL (IM) NEW OROGRAPHY (M) -! OUTPUT ARGUMENT LIST: -! PSNEW REAL (IM) NEW SURFACE PRESSURE (PA) -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN -! -!C$$$ - REAL ZS(IM),PS(IM),P(IM,KM),T(IM,KM),Q(IM,KM) - REAL ZSNEW(IM),PSNEW(IM) - PARAMETER(BETA=-6.5E-3,EPSILON=1.E-9) - PARAMETER(G=9.80665,RD=287.05,RV=461.50) - PARAMETER(GOR=G/RD,FV=RV/RD-1.) - REAL ZU(IM) - FTV(AT,AQ)=AT*(1+FV*AQ) - FGAM(APU,ATVU,APD,ATVD)=-GOR*LOG(ATVD/ATVU)/LOG(APD/APU) - FZ0(AP,ATV,AZD,APD)=AZD+ATV/GOR*LOG(APD/AP) - FZ1(AP,ATV,AZD,APD,AGAM)=AZD-ATV/AGAM*((APD/AP)**(-AGAM/GOR)-1) - FP0(AZ,AZU,APU,ATVU)=APU*EXP(-GOR/ATVU*(AZ-AZU)) - FP1(AZ,AZU,APU,ATVU,AGAM)=APU*(1+AGAM/ATVU*(AZ-AZU))**(-GOR/AGAM) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! COMPUTE SURFACE PRESSURE BELOW THE ORIGINAL GROUND - LS=0 - K=1 - GAMMA=BETA - DO I=1,IM - PU=P(I,K) - TVU=FTV(T(I,K),Q(I,K)) - ZU(I)=FZ1(PU,TVU,ZS(I),PS(I),GAMMA) - IF(ZSNEW(I).LE.ZU(I)) THEN - PU=P(I,K) - TVU=FTV(T(I,K),Q(I,K)) - IF(ABS(GAMMA).GT.EPSILON) THEN - PSNEW(I)=FP1(ZSNEW(I),ZU(I),PU,TVU,GAMMA) - ELSE - PSNEW(I)=FP0(ZSNEW(I),ZU(I),PU,TVU) - ENDIF - ELSE - PSNEW(I)=0 - LS=LS+1 - ENDIF -! endif - ENDDO -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! COMPUTE SURFACE PRESSURE ABOVE THE ORIGINAL GROUND - DO K=2,KM - IF(LS.GT.0) THEN - DO I=1,IM - IF(PSNEW(I).EQ.0) THEN - PU=P(I,K) - TVU=FTV(T(I,K),Q(I,K)) - PD=P(I,K-1) - TVD=FTV(T(I,K-1),Q(I,K-1)) - GAMMA=FGAM(PU,TVU,PD,TVD) - IF(ABS(GAMMA).GT.EPSILON) THEN - ZU(I)=FZ1(PU,TVU,ZU(I),PD,GAMMA) - ELSE - ZU(I)=FZ0(PU,TVU,ZU(I),PD) - ENDIF - IF(ZSNEW(I).LE.ZU(I)) THEN - IF(ABS(GAMMA).GT.EPSILON) THEN - PSNEW(I)=FP1(ZSNEW(I),ZU(I),PU,TVU,GAMMA) - ELSE - PSNEW(I)=FP0(ZSNEW(I),ZU(I),PU,TVU) - ENDIF - LS=LS-1 - ENDIF - ENDIF - ENDDO - ENDIF - ENDDO -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! COMPUTE SURFACE PRESSURE OVER THE TOP - IF(LS.GT.0) THEN - K=KM - GAMMA=0 - DO I=1,IM - IF(PSNEW(I).EQ.0) THEN - PU=P(I,K) - TVU=FTV(T(I,K),Q(I,K)) - PSNEW(I)=FP0(ZSNEW(I),ZU(I),PU,TVU) - ENDIF - ENDDO - ENDIF - END SUBROUTINE NEWPS - - SUBROUTINE NEWPR1(IM,KM,IDVC,IDSL,NVCOORD,VCOORD, & - PS,PM,DP) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! -! SUBPROGRAM: NEWPR1 COMPUTE MODEL PRESSURES -! PRGMMR: JUANG ORG: W/NMC23 DATE: 2005-04-11 -! PRGMMR: Fanglin Yang ORG: W/NMC23 DATE: 2006-11-28 -! PRGMMR: S. Moorthi ORG: NCEP/EMC DATE: 2006-12-12 -! PRGMMR: S. Moorthi ORG: NCEP/EMC DATE: 2007-01-02 -! -! ABSTRACT: COMPUTE MODEL PRESSURES. -! -! PROGRAM HISTORY LOG: -! 2005-04-11 HANN_MING HENRY JUANG hybrid sigma, sigma-p, and sigma- -! -! USAGE: CALL NEWPR1(IM,IX,KM,KMP,IDVC,IDSL,NVCOORD,VCOORD,PP,TP,QP,P -! INPUT ARGUMENT LIST: -! IM INTEGER NUMBER OF POINTS TO COMPUTE -! KM INTEGER NUMBER OF LEVELS -! IDVC INTEGER VERTICAL COORDINATE ID -! (1 FOR SIGMA AND 2 FOR HYBRID) -! IDSL INTEGER TYPE OF SIGMA STRUCTURE -! (1 FOR PHILLIPS OR 2 FOR MEAN) -! NVCOORD INTEGER NUMBER OF VERTICAL COORDINATES -! VCOORD REAL (KM+1,NVCOORD) VERTICAL COORDINATE VALUES -! FOR IDVC=1, NVCOORD=1: SIGMA INTERFACE -! FOR IDVC=2, NVCOORD=2: HYBRID INTERFACE A AND B -! FOR IDVC=3, NVCOORD=3: JUANG GENERAL HYBRID INTERFACE -! AK REAL (KM+1) HYBRID INTERFACE A -! BK REAL (KM+1) HYBRID INTERFACE B -! PS REAL (IX) SURFACE PRESSURE (PA) -! OUTPUT ARGUMENT LIST: -! PM REAL (IX,KM) MID-LAYER PRESSURE (PA) -! DP REAL (IX,KM) LAYER DELTA PRESSURE (PA) -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN -! -!C$$$ - IMPLICIT NONE - - INTEGER, INTENT(IN) :: IM, KM, NVCOORD, IDVC, IDSL - - REAL, INTENT(IN) :: VCOORD(KM+1,NVCOORD) - REAL, INTENT(IN) :: PS(IM) - - REAL, INTENT(OUT) :: PM(IM,KM) - REAL, OPTIONAL, INTENT(OUT) :: DP(IM,KM) - - REAL, PARAMETER :: RD=287.05, RV=461.50, CP=1004.6, & - ROCP=RD/CP, ROCP1=ROCP+1, ROCPR=1/ROCP, & - FV=RV/RD-1. - - INTEGER :: I, K - - REAL :: AK(KM+1), BK(KM+1), PI(IM,KM+1) - - IF(IDVC.EQ.2) THEN - DO K=1,KM+1 - AK(K) = VCOORD(K,1) - BK(K) = VCOORD(K,2) - PI(:,K) = AK(K) + BK(K)*PS(:) - ENDDO - ELSE - print*,'routine only works for idvc 2' - stop - ENDIF - - IF(IDSL.EQ.2) THEN - DO K=1,KM - PM(1:IM,K) = (PI(1:IM,K)+PI(1:IM,K+1))/2 - ENDDO - ELSE - DO K=1,KM - PM(1:IM,K) = ((PI(1:IM,K)**ROCP1-PI(1:IM,K+1)**ROCP1)/ & - (ROCP1*(PI(1:IM,K)-PI(1:IM,K+1))))**ROCPR - ENDDO - ENDIF - - IF(PRESENT(DP))THEN - DO K=1,KM - DO I=1,IM - DP(I,K) = PI(I,K) - PI(I,K+1) - ENDDO - ENDDO - ENDIF - - END SUBROUTINE NEWPR1 - - SUBROUTINE TERP3(IM,IXZ1,IXQ1,IXZ2,IXQ2,NM,NXQ1,NXQ2, & - KM1,KXZ1,KXQ1,Z1,Q1,KM2,KXZ2,KXQ2,Z2,Q2,J2) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! -! SUBPROGRAM: TERP3 CUBICALLY INTERPOLATE IN ONE DIMENSION -! PRGMMR: IREDELL ORG: W/NMC23 DATE: 98-05-01 -! -! ABSTRACT: INTERPOLATE FIELD(S) IN ONE DIMENSION ALONG THE COLUMN(S). -! THE INTERPOLATION IS CUBIC LAGRANGIAN WITH A MONOTONIC CONSTRAINT -! IN THE CENTER OF THE DOMAIN. IN THE OUTER INTERVALS IT IS LINEAR. -! OUTSIDE THE DOMAIN, FIELDS ARE HELD CONSTANT. -! -! PROGRAM HISTORY LOG: -! 98-05-01 MARK IREDELL -! 1999-01-04 IREDELL USE ESSL SEARCH -! -! USAGE: CALL TERP3(IM,IXZ1,IXQ1,IXZ2,IXQ2,NM,NXQ1,NXQ2, -! & KM1,KXZ1,KXQ1,Z1,Q1,KM2,KXZ2,KXQ2,Z2,Q2,J2) -! INPUT ARGUMENT LIST: -! IM INTEGER NUMBER OF COLUMNS -! IXZ1 INTEGER COLUMN SKIP NUMBER FOR Z1 -! IXQ1 INTEGER COLUMN SKIP NUMBER FOR Q1 -! IXZ2 INTEGER COLUMN SKIP NUMBER FOR Z2 -! IXQ2 INTEGER COLUMN SKIP NUMBER FOR Q2 -! NM INTEGER NUMBER OF FIELDS PER COLUMN -! NXQ1 INTEGER FIELD SKIP NUMBER FOR Q1 -! NXQ2 INTEGER FIELD SKIP NUMBER FOR Q2 -! KM1 INTEGER NUMBER OF INPUT POINTS -! KXZ1 INTEGER POINT SKIP NUMBER FOR Z1 -! KXQ1 INTEGER POINT SKIP NUMBER FOR Q1 -! Z1 REAL (1+(IM-1)*IXZ1+(KM1-1)*KXZ1) -! INPUT COORDINATE VALUES IN WHICH TO INTERPOLATE -! (Z1 MUST BE STRICTLY MONOTONIC IN EITHER DIRECTION) -! Q1 REAL (1+(IM-1)*IXQ1+(KM1-1)*KXQ1+(NM-1)*NXQ1) -! INPUT FIELDS TO INTERPOLATE -! KM2 INTEGER NUMBER OF OUTPUT POINTS -! KXZ2 INTEGER POINT SKIP NUMBER FOR Z2 -! KXQ2 INTEGER POINT SKIP NUMBER FOR Q2 -! Z2 REAL (1+(IM-1)*IXZ2+(KM2-1)*KXZ2) -! OUTPUT COORDINATE VALUES TO WHICH TO INTERPOLATE -! (Z2 NEED NOT BE MONOTONIC) -! -! OUTPUT ARGUMENT LIST: -! Q2 REAL (1+(IM-1)*IXQ2+(KM2-1)*KXQ2+(NM-1)*NXQ2) -! OUTPUT INTERPOLATED FIELDS -! J2 REAL (1+(IM-1)*IXQ2+(KM2-1)*KXQ2+(NM-1)*NXQ2) -! OUTPUT INTERPOLATED FIELDS CHANGE WRT Z2 -! -! SUBPROGRAMS CALLED: -! RSEARCH SEARCH FOR A SURROUNDING REAL INTERVAL -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN -! -!C$$$ - IMPLICIT NONE - INTEGER IM,IXZ1,IXQ1,IXZ2,IXQ2,NM,NXQ1,NXQ2 - INTEGER KM1,KXZ1,KXQ1,KM2,KXZ2,KXQ2 - INTEGER I,K1,K2,N - REAL Z1(1+(IM-1)*IXZ1+(KM1-1)*KXZ1) - REAL Q1(1+(IM-1)*IXQ1+(KM1-1)*KXQ1+(NM-1)*NXQ1) - REAL Z2(1+(IM-1)*IXZ2+(KM2-1)*KXZ2) - REAL Q2(1+(IM-1)*IXQ2+(KM2-1)*KXQ2+(NM-1)*NXQ2) - REAL J2(1+(IM-1)*IXQ2+(KM2-1)*KXQ2+(NM-1)*NXQ2) - REAL FFA(IM),FFB(IM),FFC(IM),FFD(IM) - REAL GGA(IM),GGB(IM),GGC(IM),GGD(IM) - INTEGER K1S(IM,KM2) - REAL Z1A,Z1B,Z1C,Z1D,Q1A,Q1B,Q1C,Q1D,Z2S,Q2S,J2S -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! FIND THE SURROUNDING INPUT INTERVAL FOR EACH OUTPUT POINT. - CALL RSEARCH(IM,KM1,IXZ1,KXZ1,Z1,KM2,IXZ2,KXZ2,Z2,1,IM,K1S) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! GENERALLY INTERPOLATE CUBICALLY WITH MONOTONIC CONSTRAINT -! FROM TWO NEAREST INPUT POINTS ON EITHER SIDE OF THE OUTPUT POINT, -! BUT WITHIN THE TWO EDGE INTERVALS INTERPOLATE LINEARLY. -! KEEP THE OUTPUT FIELDS CONSTANT OUTSIDE THE INPUT DOMAIN. - -!!$OMP PARALLEL DO DEFAULT(PRIVATE) SHARED(IM,IXZ1,IXQ1,IXZ2), & -!!$OMP& SHARED(IXQ2,NM,NXQ1,NXQ2,KM1,KXZ1,KXQ1,Z1,Q1,KM2,KXZ2), & -!!$OMP& SHARED(KXQ2,Z2,Q2,J2,K1S) - - DO K2=1,KM2 - DO I=1,IM - K1=K1S(I,K2) - IF(K1.EQ.1.OR.K1.EQ.KM1-1) THEN - Z2S=Z2(1+(I-1)*IXZ2+(K2-1)*KXZ2) - Z1A=Z1(1+(I-1)*IXZ1+(K1-1)*KXZ1) - Z1B=Z1(1+(I-1)*IXZ1+(K1+0)*KXZ1) - FFA(I)=(Z2S-Z1B)/(Z1A-Z1B) - FFB(I)=(Z2S-Z1A)/(Z1B-Z1A) - GGA(I)=1/(Z1A-Z1B) - GGB(I)=1/(Z1B-Z1A) - ELSEIF(K1.GT.1.AND.K1.LT.KM1-1) THEN - Z2S=Z2(1+(I-1)*IXZ2+(K2-1)*KXZ2) - Z1A=Z1(1+(I-1)*IXZ1+(K1-2)*KXZ1) - Z1B=Z1(1+(I-1)*IXZ1+(K1-1)*KXZ1) - Z1C=Z1(1+(I-1)*IXZ1+(K1+0)*KXZ1) - Z1D=Z1(1+(I-1)*IXZ1+(K1+1)*KXZ1) - FFA(I)=(Z2S-Z1B)/(Z1A-Z1B)* & - (Z2S-Z1C)/(Z1A-Z1C)* & - (Z2S-Z1D)/(Z1A-Z1D) - FFB(I)=(Z2S-Z1A)/(Z1B-Z1A)* & - (Z2S-Z1C)/(Z1B-Z1C)* & - (Z2S-Z1D)/(Z1B-Z1D) - FFC(I)=(Z2S-Z1A)/(Z1C-Z1A)* & - (Z2S-Z1B)/(Z1C-Z1B)* & - (Z2S-Z1D)/(Z1C-Z1D) - FFD(I)=(Z2S-Z1A)/(Z1D-Z1A)* & - (Z2S-Z1B)/(Z1D-Z1B)* & - (Z2S-Z1C)/(Z1D-Z1C) - GGA(I)= 1/(Z1A-Z1B)* & - (Z2S-Z1C)/(Z1A-Z1C)* & - (Z2S-Z1D)/(Z1A-Z1D)+ & - (Z2S-Z1B)/(Z1A-Z1B)* & - 1/(Z1A-Z1C)* & - (Z2S-Z1D)/(Z1A-Z1D)+ & - (Z2S-Z1B)/(Z1A-Z1B)* & - (Z2S-Z1C)/(Z1A-Z1C)* & - 1/(Z1A-Z1D) - GGB(I)= 1/(Z1B-Z1A)* & - (Z2S-Z1C)/(Z1B-Z1C)* & - (Z2S-Z1D)/(Z1B-Z1D)+ & - (Z2S-Z1A)/(Z1B-Z1A)* & - 1/(Z1B-Z1C)* & - (Z2S-Z1D)/(Z1B-Z1D)+ & - (Z2S-Z1A)/(Z1B-Z1A)* & - (Z2S-Z1C)/(Z1B-Z1C)* & - 1/(Z1B-Z1D) - GGC(I)= 1/(Z1C-Z1A)* & - (Z2S-Z1B)/(Z1C-Z1B)* & - (Z2S-Z1D)/(Z1C-Z1D)+ & - (Z2S-Z1A)/(Z1C-Z1A)* & - 1/(Z1C-Z1B)* & - (Z2S-Z1D)/(Z1C-Z1D)+ & - (Z2S-Z1A)/(Z1C-Z1A)* & - (Z2S-Z1B)/(Z1C-Z1B)* & - 1/(Z1C-Z1D) - GGD(I)= 1/(Z1D-Z1A)* & - (Z2S-Z1B)/(Z1D-Z1B)* & - (Z2S-Z1C)/(Z1D-Z1C)+ & - (Z2S-Z1A)/(Z1D-Z1A)* & - 1/(Z1D-Z1B)* & - (Z2S-Z1C)/(Z1D-Z1C)+ & - (Z2S-Z1A)/(Z1D-Z1A)* & - (Z2S-Z1B)/(Z1D-Z1B)* & - 1/(Z1D-Z1C) - ENDIF - ENDDO -! INTERPOLATE. - DO N=1,NM - DO I=1,IM - K1=K1S(I,K2) - IF(K1.EQ.0) THEN - Q2S=Q1(1+(I-1)*IXQ1+(N-1)*NXQ1) - J2S=0 - ELSEIF(K1.EQ.KM1) THEN - Q2S=Q1(1+(I-1)*IXQ1+(KM1-1)*KXQ1+(N-1)*NXQ1) - J2S=0 - ELSEIF(K1.EQ.1.OR.K1.EQ.KM1-1) THEN - Q1A=Q1(1+(I-1)*IXQ1+(K1-1)*KXQ1+(N-1)*NXQ1) - Q1B=Q1(1+(I-1)*IXQ1+(K1+0)*KXQ1+(N-1)*NXQ1) - Q2S=FFA(I)*Q1A+FFB(I)*Q1B - J2S=GGA(I)*Q1A+GGB(I)*Q1B - ELSE - Q1A=Q1(1+(I-1)*IXQ1+(K1-2)*KXQ1+(N-1)*NXQ1) - Q1B=Q1(1+(I-1)*IXQ1+(K1-1)*KXQ1+(N-1)*NXQ1) - Q1C=Q1(1+(I-1)*IXQ1+(K1+0)*KXQ1+(N-1)*NXQ1) - Q1D=Q1(1+(I-1)*IXQ1+(K1+1)*KXQ1+(N-1)*NXQ1) - Q2S=FFA(I)*Q1A+FFB(I)*Q1B+FFC(I)*Q1C+FFD(I)*Q1D - J2S=GGA(I)*Q1A+GGB(I)*Q1B+GGC(I)*Q1C+GGD(I)*Q1D - IF(Q2S.LT.MIN(Q1B,Q1C)) THEN - Q2S=MIN(Q1B,Q1C) - J2S=0 - ELSEIF(Q2S.GT.MAX(Q1B,Q1C)) THEN - Q2S=MAX(Q1B,Q1C) - J2S=0 - ENDIF - ENDIF - Q2(1+(I-1)*IXQ2+(K2-1)*KXQ2+(N-1)*NXQ2)=Q2S - J2(1+(I-1)*IXQ2+(K2-1)*KXQ2+(N-1)*NXQ2)=J2S - ENDDO - ENDDO - ENDDO -!!$OMP END PARALLEL DO - - END SUBROUTINE TERP3 - - SUBROUTINE RSEARCH(IM,KM1,IXZ1,KXZ1,Z1,KM2,IXZ2,KXZ2,Z2,IXL2,KXL2,& - L2) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! -! SUBPROGRAM: RSEARCH SEARCH FOR A SURROUNDING REAL INTERVAL -! PRGMMR: IREDELL ORG: W/NMC23 DATE: 98-05-01 -! -! ABSTRACT: THIS SUBPROGRAM SEARCHES MONOTONIC SEQUENCES OF REAL NUMBERS -! FOR INTERVALS THAT SURROUND A GIVEN SEARCH SET OF REAL NUMBERS. -! THE SEQUENCES MAY BE MONOTONIC IN EITHER DIRECTION; THE REAL NUMBERS -! MAY BE SINGLE OR DOUBLE PRECISION; THE INPUT SEQUENCES AND SETS -! AND THE OUTPUT LOCATIONS MAY BE ARBITRARILY DIMENSIONED. -! -! PROGRAM HISTORY LOG: -! 1999-01-05 MARK IREDELL -! -! USAGE: CALL RSEARCH(IM,KM1,IXZ1,KXZ1,Z1,KM2,IXZ2,KXZ2,Z2,IXL2,KXL2, -! & L2) -! INPUT ARGUMENT LIST: -! IM INTEGER NUMBER OF SEQUENCES TO SEARCH -! KM1 INTEGER NUMBER OF POINTS IN EACH SEQUENCE -! IXZ1 INTEGER SEQUENCE SKIP NUMBER FOR Z1 -! KXZ1 INTEGER POINT SKIP NUMBER FOR Z1 -! Z1 REAL (1+(IM-1)*IXZ1+(KM1-1)*KXZ1) -! SEQUENCE VALUES TO SEARCH -! (Z1 MUST BE MONOTONIC IN EITHER DIRECTION) -! KM2 INTEGER NUMBER OF POINTS TO SEARCH FOR -! IN EACH RESPECTIVE SEQUENCE -! IXZ2 INTEGER SEQUENCE SKIP NUMBER FOR Z2 -! KXZ2 INTEGER POINT SKIP NUMBER FOR Z2 -! Z2 REAL (1+(IM-1)*IXZ2+(KM2-1)*KXZ2) -! SET OF VALUES TO SEARCH FOR -! (Z2 NEED NOT BE MONOTONIC) -! IXL2 INTEGER SEQUENCE SKIP NUMBER FOR L2 -! KXL2 INTEGER POINT SKIP NUMBER FOR L2 -! -! OUTPUT ARGUMENT LIST: -! L2 INTEGER (1+(IM-1)*IXL2+(KM2-1)*KXL2) -! INTERVAL LOCATIONS HAVING VALUES FROM 0 TO KM1 -! (Z2 WILL BE BETWEEN Z1(L2) AND Z1(L2+1)) -! -! SUBPROGRAMS CALLED: -! SBSRCH ESSL BINARY SEARCH -! DBSRCH ESSL BINARY SEARCH -! -! REMARKS: -! IF THE ARRAY Z1 IS DIMENSIONED (IM,KM1), THEN THE SKIP NUMBERS ARE -! IXZ1=1 AND KXZ1=IM; IF IT IS DIMENSIONED (KM1,IM), THEN THE SKIP -! NUMBERS ARE IXZ1=KM1 AND KXZ1=1; IF IT IS DIMENSIONED (IM,JM,KM1), -! THEN THE SKIP NUMBERS ARE IXZ1=1 AND KXZ1=IM*JM; ETCETERA. -! SIMILAR EXAMPLES APPLY TO THE SKIP NUMBERS FOR Z2 AND L2. -! -! RETURNED VALUES OF 0 OR KM1 INDICATE THAT THE GIVEN SEARCH VALUE -! IS OUTSIDE THE RANGE OF THE SEQUENCE. -! -! IF A SEARCH VALUE IS IDENTICAL TO ONE OF THE SEQUENCE VALUES -! THEN THE LOCATION RETURNED POINTS TO THE IDENTICAL VALUE. -! IF THE SEQUENCE IS NOT STRICTLY MONOTONIC AND A SEARCH VALUE IS -! IDENTICAL TO MORE THAN ONE OF THE SEQUENCE VALUES, THEN THE -! LOCATION RETURNED MAY POINT TO ANY OF THE IDENTICAL VALUES. -! -! TO BE EXACT, FOR EACH I FROM 1 TO IM AND FOR EACH K FROM 1 TO KM2, -! Z=Z2(1+(I-1)*IXZ2+(K-1)*KXZ2) IS THE SEARCH VALUE AND -! L=L2(1+(I-1)*IXL2+(K-1)*KXL2) IS THE LOCATION RETURNED. -! IF L=0, THEN Z IS LESS THAN THE START POINT Z1(1+(I-1)*IXZ1) -! FOR ASCENDING SEQUENCES (OR GREATER THAN FOR DESCENDING SEQUENCES). -! IF L=KM1, THEN Z IS GREATER THAN OR EQUAL TO THE END POINT -! Z1(1+(I-1)*IXZ1+(KM1-1)*KXZ1) FOR ASCENDING SEQUENCES -! (OR LESS THAN OR EQUAL TO FOR DESCENDING SEQUENCES). -! OTHERWISE Z IS BETWEEN THE VALUES Z1(1+(I-1)*IXZ1+(L-1)*KXZ1) AND -! Z1(1+(I-1)*IXZ1+(L-0)*KXZ1) AND MAY EQUAL THE FORMER. -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN -! -!C$$$ -! IMPLICIT NONE -! INTEGER,INTENT(IN):: IM,KM1,IXZ1,KXZ1,KM2,IXZ2,KXZ2,IXL2,KXL2 -! REAL,INTENT(IN):: Z1(1+(IM-1)*IXZ1+(KM1-1)*KXZ1) -! REAL,INTENT(IN):: Z2(1+(IM-1)*IXZ2+(KM2-1)*KXZ2) -! INTEGER,INTENT(OUT):: L2(1+(IM-1)*IXL2+(KM2-1)*KXL2) -! INTEGER(4) INCX,N,INCY,M,INDX(KM2),RC(KM2),IOPT -! INTEGER I,K2 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! FIND THE SURROUNDING INPUT INTERVAL FOR EACH OUTPUT POINT. -! DO I=1,IM -! IF(Z1(1+(I-1)*IXZ1).LE.Z1(1+(I-1)*IXZ1+(KM1-1)*KXZ1)) THEN -! INPUT COORDINATE IS MONOTONICALLY ASCENDING. -! INCX=KXZ2 -! N=KM2 -! INCY=KXZ1 -! M=KM1 -! IOPT=1 -! IF(DIGITS(1.).LT.DIGITS(1._8)) THEN -! CALL SBSRCH(Z2(1+(I-1)*IXZ2),INCX,N, -! & Z1(1+(I-1)*IXZ1),INCY,M,INDX,RC,IOPT) -! ELSE -! CALL DBSRCH(Z2(1+(I-1)*IXZ2),INCX,N, -! & Z1(1+(I-1)*IXZ1),INCY,M,INDX,RC,IOPT) -! ENDIF -! DO K2=1,KM2 -! L2(1+(I-1)*IXL2+(K2-1)*KXL2)=INDX(K2)-RC(K2) -! ENDDO -! ELSE -! INPUT COORDINATE IS MONOTONICALLY DESCENDING. -! INCX=KXZ2 -! N=KM2 -! INCY=-KXZ1 -! M=KM1 -! IOPT=0 -! IF(DIGITS(1.).LT.DIGITS(1._8)) THEN -! CALL SBSRCH(Z2(1+(I-1)*IXZ2),INCX,N, -! & Z1(1+(I-1)*IXZ1),INCY,M,INDX,RC,IOPT) -! ELSE -! CALL DBSRCH(Z2(1+(I-1)*IXZ2),INCX,N, -! & Z1(1+(I-1)*IXZ1),INCY,M,INDX,RC,IOPT) -! ENDIF -! DO K2=1,KM2 -! L2(1+(I-1)*IXL2+(K2-1)*KXL2)=KM1+1-INDX(K2) -! ENDDO -! ENDIF -! ENDDO -! - IMPLICIT NONE - INTEGER,INTENT(IN):: IM,KM1,IXZ1,KXZ1,KM2,IXZ2,KXZ2,IXL2,KXL2 - REAL,INTENT(IN):: Z1(1+(IM-1)*IXZ1+(KM1-1)*KXZ1) - REAL,INTENT(IN):: Z2(1+(IM-1)*IXZ2+(KM2-1)*KXZ2) - INTEGER,INTENT(OUT):: L2(1+(IM-1)*IXL2+(KM2-1)*KXL2) - INTEGER I,K2,L - REAL Z -!C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -!C FIND THE SURROUNDING INPUT INTERVAL FOR EACH OUTPUT POINT. - DO I=1,IM - IF(Z1(1+(I-1)*IXZ1).LE.Z1(1+(I-1)*IXZ1+(KM1-1)*KXZ1)) THEN -!C INPUT COORDINATE IS MONOTONICALLY ASCENDING. - DO K2=1,KM2 - Z=Z2(1+(I-1)*IXZ2+(K2-1)*KXZ2) - L=0 - DO - IF(Z.LT.Z1(1+(I-1)*IXZ1+L*KXZ1)) EXIT - L=L+1 - IF(L.EQ.KM1) EXIT - ENDDO - L2(1+(I-1)*IXL2+(K2-1)*KXL2)=L - ENDDO - ELSE -!C INPUT COORDINATE IS MONOTONICALLY DESCENDING. - DO K2=1,KM2 - Z=Z2(1+(I-1)*IXZ2+(K2-1)*KXZ2) - L=0 - DO - IF(Z.GT.Z1(1+(I-1)*IXZ1+L*KXZ1)) EXIT - L=L+1 - IF(L.EQ.KM1) EXIT - ENDDO - L2(1+(I-1)*IXL2+(K2-1)*KXL2)=L - ENDDO - ENDIF - ENDDO - - END SUBROUTINE RSEARCH - - SUBROUTINE VINTG(IM,KM1,KM2,NT,P1,U1,V1,T1,Q1,W1,P2, & - U2,V2,T2,Q2,W2) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! -! SUBPROGRAM: VINTG VERTICALLY INTERPOLATE UPPER-AIR FIELDS -! PRGMMR: IREDELL ORG: W/NMC23 DATE: 92-10-31 -! -! ABSTRACT: VERTICALLY INTERPOLATE UPPER-AIR FIELDS. -! WIND, TEMPERATURE, HUMIDITY AND OTHER TRACERS ARE INTERPOLATED. -! THE INTERPOLATION IS CUBIC LAGRANGIAN IN LOG PRESSURE -! WITH A MONOTONIC CONSTRAINT IN THE CENTER OF THE DOMAIN. -! IN THE OUTER INTERVALS IT IS LINEAR IN LOG PRESSURE. -! OUTSIDE THE DOMAIN, FIELDS ARE GENERALLY HELD CONSTANT, -! EXCEPT FOR TEMPERATURE AND HUMIDITY BELOW THE INPUT DOMAIN, -! WHERE THE TEMPERATURE LAPSE RATE IS HELD FIXED AT -6.5 K/KM AND -! THE RELATIVE HUMIDITY IS HELD CONSTANT. -! -! PROGRAM HISTORY LOG: -! 91-10-31 MARK IREDELL -! -! USAGE: CALL VINTG(IM,KM1,KM2,NT,P1,U1,V1,T1,Q1,P2, -! & U2,V2,T2,Q2) -! INPUT ARGUMENT LIST: -! IM INTEGER NUMBER OF POINTS TO COMPUTE -! KM1 INTEGER NUMBER OF INPUT LEVELS -! KM2 INTEGER NUMBER OF OUTPUT LEVELS -! NT INTEGER NUMBER OF TRACERS -! P1 REAL (IM,KM1) INPUT PRESSURES -! ORDERED FROM BOTTOM TO TOP OF ATMOSPHERE -! U1 REAL (IM,KM1) INPUT ZONAL WIND -! V1 REAL (IM,KM1) INPUT MERIDIONAL WIND -! T1 REAL (IM,KM1) INPUT TEMPERATURE (K) -! Q1 REAL (IM,KM1,NT) INPUT TRACERS (HUMIDITY FIRST) -! P2 REAL (IM,KM2) OUTPUT PRESSURES -! OUTPUT ARGUMENT LIST: -! U2 REAL (IM,KM2) OUTPUT ZONAL WIND -! V2 REAL (IM,KM2) OUTPUT MERIDIONAL WIND -! T2 REAL (IM,KM2) OUTPUT TEMPERATURE (K) -! Q2 REAL (IM,KM2,NT) OUTPUT TRACERS (HUMIDITY FIRST) -! -! SUBPROGRAMS CALLED: -! TERP3 CUBICALLY INTERPOLATE IN ONE DIMENSION -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN -! -!C$$$ - IMPLICIT NONE - - INTEGER, INTENT(IN) :: IM, KM1, KM2, NT - - REAL, INTENT(IN) :: P1(IM,KM1),U1(IM,KM1),V1(IM,KM1) - REAL, INTENT(IN) :: T1(IM,KM1),Q1(IM,KM1,NT) - REAL, INTENT(IN) :: W1(IM,KM1),P2(IM,KM2) - REAL, INTENT(OUT) :: U2(IM,KM2),V2(IM,KM2) - REAL, INTENT(OUT) :: T2(IM,KM2),Q2(IM,KM2,NT) - REAL, INTENT(OUT) :: W2(IM,KM2) - - REAL, PARAMETER :: DLTDZ=-6.5E-3*287.05/9.80665 - REAL, PARAMETER :: DLPVDRT=-2.5E6/461.50 - - INTEGER :: I, K, N - - REAL :: DZ - REAL,ALLOCATABLE :: Z1(:,:),Z2(:,:) - REAL,ALLOCATABLE :: C1(:,:,:),C2(:,:,:),J2(:,:,:) - - ALLOCATE (Z1(IM+1,KM1),Z2(IM+1,KM2)) - ALLOCATE (C1(IM+1,KM1,4+NT),C2(IM+1,KM2,4+NT),J2(IM+1,KM2,4+NT)) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! COMPUTE LOG PRESSURE INTERPOLATING COORDINATE -! AND COPY INPUT WIND, TEMPERATURE, HUMIDITY AND OTHER TRACERS -!$OMP PARALLEL DO PRIVATE(K,I) - DO K=1,KM1 - DO I=1,IM - Z1(I,K) = -LOG(P1(I,K)) - C1(I,K,1) = U1(I,K) - C1(I,K,2) = V1(I,K) - C1(I,K,3) = W1(I,K) - C1(I,K,4) = T1(I,K) - C1(I,K,5) = Q1(I,K,1) - ENDDO - ENDDO -!$OMP END PARALLEL DO - DO N=2,NT - DO K=1,KM1 - DO I=1,IM - C1(I,K,4+N) = Q1(I,K,N) - ENDDO - ENDDO - ENDDO -!$OMP PARALLEL DO PRIVATE(K,I) - DO K=1,KM2 - DO I=1,IM - Z2(I,K) = -LOG(P2(I,K)) - ENDDO - ENDDO -!$OMP END PARALLEL DO -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! PERFORM LAGRANGIAN ONE-DIMENSIONAL INTERPOLATION -! THAT IS 4TH-ORDER IN INTERIOR, 2ND-ORDER IN OUTSIDE INTERVALS -! AND 1ST-ORDER FOR EXTRAPOLATION. - CALL TERP3(IM,1,1,1,1,4+NT,(IM+1)*KM1,(IM+1)*KM2, & - KM1,IM+1,IM+1,Z1,C1,KM2,IM+1,IM+1,Z2,C2,J2) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! COPY OUTPUT WIND, TEMPERATURE, HUMIDITY AND OTHER TRACERS -! EXCEPT BELOW THE INPUT DOMAIN, LET TEMPERATURE INCREASE WITH A FIXED -! LAPSE RATE AND LET THE RELATIVE HUMIDITY REMAIN CONSTANT. - DO K=1,KM2 - DO I=1,IM - U2(I,K)=C2(I,K,1) - V2(I,K)=C2(I,K,2) - W2(I,K)=C2(I,K,3) - DZ=Z2(I,K)-Z1(I,1) - IF(DZ.GE.0) THEN - T2(I,K)=C2(I,K,4) - Q2(I,K,1)=C2(I,K,5) - ELSE - T2(I,K)=T1(I,1)*EXP(DLTDZ*DZ) - Q2(I,K,1)=Q1(I,1,1)*EXP(DLPVDRT*(1/T2(I,K)-1/T1(I,1))-DZ) - ENDIF - ENDDO - ENDDO - DO N=2,NT - DO K=1,KM2 - DO I=1,IM - Q2(I,K,N)=C2(I,K,4+N) - ENDDO - ENDDO - ENDDO - DEALLOCATE (Z1,Z2,C1,C2,J2) - END SUBROUTINE VINTG - end module utils diff --git a/sorc/fbwndgfs.fd/fbwndgfs.f b/sorc/fbwndgfs.fd/fbwndgfs.f deleted file mode 100755 index ce7505fd1b..0000000000 --- a/sorc/fbwndgfs.fd/fbwndgfs.f +++ /dev/null @@ -1,969 +0,0 @@ -C$$$ MAIN PROGRAM DOCUMENTATION BLOCK -C . . . . -C MAIN PROGRAM: FBWNDGFS -C PRGMMR: VUONG ORG: NP11 DATE: 2005-08-03 -C -C ABSTRACT: THIS PROGRAM CREATES BULLETINS OF FORECAST WINDS AND -C TEMPS FOR UP TO 15 LEVELS FOR PACIFIC REGION. -C THE PRIMARY (RMP) IS RUN. THE PROGRAM SETUPS TO RUN 4 TIMES PER -C DAY (T00Z, T06Z, T12Z AND T18Z). -C EACH BULLETIN OF A SET REPRESENTS A 6, 12 OR 24 HR FCST. -C THE PROGRAM GENERATED ARE THE FOLLOWING BULLETINS; -C FBOC31, FBOC33, FBOC35, FBOC37, FBOC38, FBOC39 -C THE STATION FILE (FBWNDGFS.STNLIST) IS KEYED TO INDICATE WHICH BULLETIN -C EACH STATION BELONGS IN. THE WIND SPEED (TEN OF DEGREES), WIND DIRECTION -C (KNOTS) & TEMPERATURE(CELSIUS) IN THE FORM (DDff+TT) FOR EACH STATION -C AND LEVELS APPEAR IN THE BULLETIN. WHERE DD IS THE WIND DIRECTION, -C ff IS THE WIND SPEED, AND TT IS THE TEMPERATURE -C THE FORECAST INPUT DATA IS GFS GLOBAL LAT/LON GRID 128 (0.313 DEGREE) -C FORECAST FILES U,V,& T FIELDS, 15 LEVELS: 1000', 1500', 2000', 3000', -C 6000', 9000', 12000', 15000' + 500, 400, 300, 250, 200, 150 AND 100MB -C -C THE INPUT STATION RECORD FOR EACH STATION CONTAINS STN ELEVATION -C AND LATITUDE/LONGITUDE POSITION. -C -C PROGRAM HISTORY LOG: -C 1986-01-03 CAVANAUGH -C 2004-06-29 VUONG MODIFIED THE PROGRAM TO WORK WITH GFS DATA AND -C RUN 4 TIMES PER DAY (T00Z,T06Z,T12Z AND T18Z). -C 2005-08-03 VUONG CHANGED THE FOR USE TIMES SPECIFIED ON WIND AND -C TEMPERATURE ALOFT 6 AND 12 HOUR FORECAST BULLETINS -C 2007-07-03 VUONG CHANGED NO. OF POINTS FOR GFS GLOBAL GAUSSIAN -C LAT/LON GRID 128 -C 2010-05-26 VUONG CHANGED NO. OF POINTS FOR GFS (T574) GAUSSIAN -C LAT/LON GRID -C 2012-08-16 VUONG MODIFIED VARIABLES NNPOS AND CHANGED -C VARIABLE ENVVAR TO CHARACTER*6 -C 2016-05-16 VUONG MODIFIED CODE TO USE MODULE GDSWZD_MOD IN IP.v3.0.0 -C -C USAGE: -C INPUT FILES: -C FORT.05 FBWNDGFS.STNLIST STATION DIRECTORY -C -C - GFS (T574) GLOBAL GAUSSIAN LAT/LON GRID (0.205 DEGREE) -C DIMENSIONS 1760 x 880 = 1548800 -C FORT.11 /COM/GFS/PROD/GFS.${PDY}/GFS.${CYCLE}.MASTER.GRBF06 -C FORT.12 /COM/GFS/PROD/GFS.${PDY}/GFS.${CYCLE}.MASTER.GRBF12 -C FORT.13 /COM/GFS/PROD/GFS.${PDY}/GFS.${CYCLE}.MASTER.GRBF24 -C - GFS INDEX FILES FOR GRIB GRID 128: -C FORT.31 /COM/GFS/PROD/GFS.${PDY}/GFS.${CYCLE}.MASTER.GRBIF06 -C FORT.32 /COM/GFS/PROD/GFS.${PDY}/GFS.${CYCLE}.MASTER.GRBIF12 -C FORT.33 /COM/GFS/PROD/GFS.${PDY}/GFS.${CYCLE}.MASTER.GRBIF24 -C -C WHERE PDY = YYYYMMDD, YYYY IS THE YEAR, MM IS THE MONTH, -C DD IS THE DAY OF THE MONTH -C AND -C CYCLE = T00Z, T06Z, T12Z, T18Z -C -C OUTPUT FILES: -C FORT.06 ERROR MESSAGES -C FORT.51 BULLETIN RECORDS FOR TRANSMISSION -C -C SUBPROGRAMS CALLED: (LIST ALL CALLED FROM ANYWHERE IN CODES) -C LIBRARY: -C W3AI15 WXAI19 W3FC05 W3FI01 -C GETGB (FOR GRIB FILES) -C W3FT01 W3TAGE XMOVEX XSTORE W3UTCDAT -C -C EXIT STATES: -C COND = 110 STN DIRECTORY READ ERR (CONSOLE MSG) -C 1050 NO DATA (FIELD ID IS PRINTED)(FT06 + CONSOLE) -C 1060 NO DATA (FIELD ID IS PRINTED)(FT06 + CONSOLE) -C 1070 NO DATA (FIELD ID IS PRINTED)(FT06 + CONSOLE) -C 1080 NO DATA (FIELD ID IS PRINTED)(FT06 + CONSOLE) -C 1090 NO DATA (FIELD ID IS PRINTED)(FT06 + CONSOLE) -C ALL ARE FATAL -C PLUS W3LIB SUB-RTN RETURN CODES -C -C ATTRIBUTES: -C LANGUAGE: F90 FORTRAN -C MACHINE: IBM WCOSS -C -C$$$ -C - use gdswzd_mod - PARAMETER (NPTS=1548800) - PARAMETER (MAXSTN=800) - PARAMETER (IMAX=1760,JMAX=880) -C - REAL ALAT(MAXSTN),ALON(MAXSTN) - REAL ISTN(MAXSTN),JSTN(MAXSTN) - REAL ERAS(3),FHOUR,FILL - REAL RFLD(NPTS),RINTRP(IMAX,JMAX) - REAL XPTS(NPTS),YPTS(NPTS),RLON(NPTS),RLAT(NPTS) -C -C...MAX NR STNS FOR READ-END SHOULD BE GT ACTUAL NR OF STNS ON STN FILE - INTEGER IELEV(MAXSTN),IRAS(3),KTAU(3) - INTEGER JTIME(8),NDATE(8),MDATE(8) - INTEGER JGDS(100),KGDS(200),JREW,KBYTES - INTEGER KPDS(27),MPDS(27),KREW - INTEGER KSTNU(MAXSTN,15) - INTEGER LMTLWR(2),LMTUPR(2),NTTT -C...NPOS(ITIVE) IS TRANSMISSION SIGN 7C MASK FOR TEMP - INTEGER ICKYR,ICKMO,ICKDAY,ICKHR - INTEGER KSTNV(MAXSTN,15),KSTNT(MAXSTN,15) - INTEGER IDWD1H(3),IDWD2H(3) - INTEGER IDWD1P(3),IDWD2P(3) - INTEGER IDWD2(15),NHGTP(15) -C -C...S,L,T,B ARE SUBSCRIPTS FOR SEQ NR OF STATION, LEVEL, TAU, BULLETIN -C... B IS COUNT OF BULTNS WITHIN TAU, BB IS COUNT WITHIN RUN -C - INTEGER S,L,T,B, BB -C - CHARACTER*6 NHGT6(15), AWIPSID(6) - CHARACTER*1 BSTART,BEND - CHARACTER*1 BULTN(1280) - CHARACTER*1 SPACE(1280) - CHARACTER*1 ETBETX,ETB,ETX,ICK,ICKX - CHARACTER*1 INDIC(MAXSTN),LF,MINUS - CHARACTER*1 MUSES(MAXSTN) - CHARACTER*1 SPC80(80),TSRCE,TMODE,TFLAG - CHARACTER*3 CRCRLF - CHARACTER*4 ITRTIM,STNID(MAXSTN),IVALDA - CHARACTER*1 NNPOS - CHARACTER*4 NFDHDG(6),NCATNR(6),NVALTM(12) - CHARACTER*9 NUSETM(12) -C - CHARACTER*8 IBLANK,IBSDA,IBSTI,ITRDA - CHARACTER*8 ITEMP(MAXSTN,15),IWIND(MAXSTN,15) - CHARACTER*8 NFILE,NTTT4,RF06,RF12,RF24 - CHARACTER*6 ENVVAR - CHARACTER*80 FILEB,FILEI,SPCS,FILEO -C - CHARACTER*86 LINE73 - CHARACTER*40 LN73A,NBUL1 - CHARACTER*46 LN73B - CHARACTER*84 NBULHD - CHARACTER*34 NBUL2 - CHARACTER*32 NBASHD - CHARACTER*60 NVALHD -C - LOGICAL ENDBUL,KBMS(NPTS) -C - EQUIVALENCE (ICK,ICKX) - EQUIVALENCE (RFLD(1),RINTRP(1,1)) - EQUIVALENCE (NBULHD(1:1),NBUL1(1:1)) - EQUIVALENCE (NBULHD(41:41),NBUL2(1:1)) - EQUIVALENCE (LINE73(1:1),LN73A(1:1)) - EQUIVALENCE (LINE73(41:41),LN73B(1:1)) - EQUIVALENCE (SPCS,SPC80) - EQUIVALENCE (NTTT,NTTT4(1:1)) -C - DATA INDEX /1/ - DATA NCYCLK/ 0 / - DATA LIN / 0 / - DATA FHOUR /24.0/ - DATA KTAU /06,12,24/ - DATA LMTLWR/1,11/ - DATA LMTUPR/10,15/ - DATA IDWD1H/ 33, 34, 11/ - DATA IDWD2H/ 103, 103, 103/ - - DATA IDWD1P/ 33, 34, 11/ - DATA IDWD2P/ 100, 100, 100/ - - DATA IDWD2 / 305, 457, 610, 914, - 1 1829, 2743, 3658, 4572, - 2 500, 400, 300, 250, - 3 200, 150, 100/ - - DATA NHGT6 /'1000 ','1500 ','2000 ','3000 ', - 1 '6000 ','9000 ','12000 ','15000 ', - 2 '18000 ','24000 ','30000 ','34000 ', - 3 '39000 ','45000 ','53000'/ - DATA NHGTP /5,5,6,6,6,6,6,6,6,6,5,5,5,5,5/ - DATA BSTART/'B'/ - DATA BEND /'E'/ - DATA ETB /'>'/ - DATA ETX /'%'/ - DATA MINUS /'-'/ - DATA SPC80 /80*' '/ - DATA CRCRLF/'<<@'/ - DATA IBLANK/' '/ - DATA AWIPSID / 'FD1OC1','FD8OC7','FD3OC3', - 1 'FD9OC8','FD5OC5','FD0OC9'/ - DATA NFDHDG/ - 1 'OC31','OC37','OC33','OC38','OC35','OC39'/ - DATA NCATNR/ - 1 '1377','5980','1378','5981','1379','5982'/ - DATA NVALTM/ - 1 '0600','1200','0000','1200','1800','0600', - 2 '1800','0000','1200','0000','0600','1800'/ - DATA NUSETM/ - 1 '0200-0900','0900-1800','1800-0600', - 2 '0800-1500','1500-0000','0000-1200', - 3 '1400-2100','2100-0600','0600-1800', - 4 '2000-0300','0300-1200','1200-0000'/ -C - DATA RF06 /'6 HOURS '/ - DATA RF12 /'12 HOURS'/ - DATA RF24 /'24 HOURS'/ - DATA LN73A /' '/ - DATA LN73B /' <<@^^^'/ - DATA NBUL1 / - 1 '''10 PFB '/ - DATA NBUL2/ - 1 'FB KWNO <<@^^^ <<@$'/ - DATA NBASHD/'DATA BASED ON Z <<@@^^^'/ - DATA NVALHD/ - 1 'VALID Z FOR USE - Z. TEMPS NEG ABV 24000<<@@^'/ -C -C - NNPOS = CHAR(124) - LUGO = 51 - CALL W3TAGB('FBWNDGFS',2012,0184,0184,'NP11') - ENVVAR='FORT ' - WRITE(ENVVAR(5:6),FMT='(I2)') LUGO - CALL GETENV(ENVVAR,FILEO) -C - OPEN(LUGO,FILE=FILEO,ACCESS='DIRECT',RECL=1281) - IREC=1 -C...GET COMPUTER DATE-TIME & SAVE FOR DATA DATE VERIFICATION - CALL W3UTCDAT(JTIME) -C -C...READ AND STORE STATION LIST FROM UNIT 5 -C...INDIC = INDICATOR BEGIN, OR END, BULTN ('B' OR 'E') -C...MUSES = USED IN MULTIPLE BULTNS (FOR SAME TAU) IF '+' -C - DO 25 I = 1, MAXSTN - READ(5,10,ERR=109,END=130) INDIC(I),MUSES(I),STNID(I), - & IELEV(I),ALAT(I),ALON(I) - 25 CONTINUE -C -C/////////////////////////////////////////////////////////////////// - 10 FORMAT(A1,A1,A4,1X,I5,1X,F6.2,1X,F7.2) -C -C...ERROR - 109 CONTINUE - CALL W3TAGE('FBWNDGFS') - PRINT *,'STATION LIST READ ERROR' - CALL ERREXIT (110) -C//////////////////////////////////////////////////////////////////// -C - 130 CONTINUE -C -C CONVERT THE LAT/LONG COORDINATES OF STATION TO LAMBERT -C CONFORMAL PROJECTION I,J COORDINATES FOR GRID 221 -C - NRSTNS = I-1 - WRITE(6,'(A19,1X,I0)') ' NO. OF STATIONS = ',NRSTNS -C -C...END READ. COUNT OF STATIONS STORED -C -C...GET EXEC PARMS -C...PARM FIELD TAKEN OUT, NEXT 4 VALUES HARD WIRED - TMODE = 'M' - TSRCE = 'R' - TFLAG = 'P' - PRINT *,'SOURCE=',TSRCE,' MODE=',TMODE,' FLAG=',TFLAG -C -C********************************************************************** -C -C...READ PACKED DATA, UNPACK, INTERPOLATE, STORE IN STATION ARRAYS, -C... CREATE BULTN HDGS, INSERT STATION IN BULTNS, & WRITE BULTNS. -C - BB = 0 -C -C...BEGIN TAU -C - DO 7000 ITAU=1, 3 -C - WRITE(6,'(A6,1X,I0)') ' ITAU=',ITAU - T = ITAU -C -C SELECT FILE FOR TAU PERIOD (PRIMARY RUN) -C - IF (KTAU(ITAU).EQ.6) THEN - NFILE = RF06 - LUGB = 11 - LUGI = 31 - ELSE IF (KTAU(ITAU).EQ.12) THEN - NFILE = RF12 - LUGB = 12 - LUGI = 32 - ELSE - NFILE = RF24 - LUGB = 13 - LUGI = 33 - ENDIF -C - WRITE(ENVVAR(5:6),FMT='(I2)') LUGB - CALL GETENV(ENVVAR,FILEB) - CALL BAOPENR(LUGB,FILEB,IRET) - WRITE(ENVVAR(5:6),FMT='(I2)') LUGI - CALL GETENV(ENVVAR,FILEI) - CALL BAOPENR(LUGI,FILEI,IRET) - PRINT 1025,NFILE, FILEB, FILEI - 1025 FORMAT('NFILE= ',A8,2X,'GRIB FILE= ',A55,'INDEX FILE= ',A55) -C -C.................................. - DO 2450 ITYP=1,3 -C -C... SEE O.N. 388 FOR FILE ID COMPOSITION -C - DO 2400 L=1,15 -C -C...USE SOME OF THE VALUES IN THE PDS TO GET RECORD -C -C MPDS = -1 SETS ARRAY MPDS TO -1 -C MPDS(3) = GRID IDENTIFICATION (PDS BYTE 7) -C MPDS(5) = INDICATOR OF PARAMETER (PDS BYTE 9) -C MPDS(6) = INDICATOR OF TYPE OF LEVEL OR LAYER (PDS BYTE 10) -C MPDS(7) = HGT,PRES,ETC. OF LEVEL OR LAYER (PDS BYTE 11,12) -C MPDS(14) = P1 - PERIOD OF TIME (PDS BYTE 19) -C VALUES NOT SET TO -1 ARE USED TO FIND RECORD -C - JREW = 0 - KREW = 0 - MPDS = -1 -C -C MPDS(3) = -1 - IF (L.LE.8) THEN - MPDS(5) = IDWD1H(ITYP) -C... HEIGHT ABOVE MEAN SEA LEVEL GPML - MPDS(6) = IDWD2H(ITYP) - ELSE - MPDS(5) = IDWD1P(ITYP) -C... PRESSURE IN HectoPascals (hPa) ISBL - MPDS(6) = IDWD2P(ITYP) - ENDIF - MPDS(7) = IDWD2(L) - MPDS(14) = KTAU(ITAU) -C -C... THE FILE ID COMPLETED. -C PRINT *,MPDS -C... GET THE DATA FIELD. -C - CALL GETGB(LUGB,LUGI,NPTS,JREW,MPDS,JGDS, - & KBYTES,KREW,KPDS,KGDS,KBMS,RFLD,IRET) -C WRITE(*,119) KPDS -119 FORMAT( 1X, 'MAIN: KPDS:', 3(/1X,10(I5,2X) ) ) - -C -C/////////////////////////////////////////////////////////////////////// -C...ERROR - IF (IRET.NE.0) THEN - write(*,120) (MPDS(I),I=3,14) -120 format(1x,' MPDS = ',12(I0,1x)) - WRITE(6,'(A9,1X,I0)') ' IRET = ',IRET - IF (IRET.EQ.96) THEN - PRINT *,'ERROR READING INDEX FILE' - CALL W3TAGE('FBWNDGFS') - CALL ERREXIT (1050) - ELSE IF (IRET.EQ.97) THEN - PRINT *,'ERROR READING GRIB FILE' - CALL W3TAGE('FBWNDGFS') - CALL ERREXIT (1060) - ELSE IF (IRET.EQ.98) THEN - PRINT *,'NUMBER OF DATA POINT GREATER', - * ' THAN NPTS' - CALL W3TAGE('FBWNDGFS') - CALL ERREXIT (1070) - ELSE IF (IRET.EQ.99) THEN - PRINT *,'RECORD REQUESTED NOT FOUND' - CALL W3TAGE('FBWNDGFS') - CALL ERREXIT (1080) - ELSE - PRINT *,'GETGB-W3FI63 GRIB UNPACKER', - * ' RETURN CODE' - CALL W3TAGE('FBWNDGFS') - CALL ERREXIT (1090) - END IF - ENDIF -C -C...GET DATE-TIME FOR LATER BULTN HDG PROCESSING -C - ICKYR = KPDS(8) + 2000 - ICKMO = KPDS(9) - ICKDAY= KPDS(10) - ICKHR = KPDS(11) * 100 - IF (ICKHR.EQ.0000) ICYC=1 - IF (ICKHR.EQ.0600) ICYC=2 - IF (ICKHR.EQ.1200) ICYC=3 - IF (ICKHR.EQ.1800) ICYC=4 - IBSTIM=ICKHR -C -C...GET NEXT DAY - FOR VALID DAY AND 12Z AND 18Z BACKUP TRAN DAY -C...UPDATE TO NEXT DAY - NHOUR=ICKHR*.01 - CALL W3MOVDAT((/0.,FHOUR,0.,0.,0./), - & (/ICKYR,ICKMO,ICKDAY,0,NHOUR,0,0,0/),NDATE) - CALL W3MOVDAT((/0.,FHOUR,0.,0.,0./),NDATE,MDATE) -C -C...12Z, 18Z CYCLE,BACKUP RUN,24HR FCST: VALID DAY IS DAY-AFTER-NEXT -C...NEXT DAY-OF-MONTH NOW STORED IN 'NDATE(3)' -C...NEXT DAY PLUS 1 IN 'MDATE(3)' -C -C CONVERT EARTH COORDINATES OF STATION TO GRID COORDINATES - DO 110 J = 1,NRSTNS -C CALL GDSWIZ(KGDS,-1,1,FILL,XPTS(J),YPTS(J), -C & ALON(J),ALAT(J),IRET,0,DUM,DUM) - CALL GDSWZD(KGDS,-1,1,FILL,XPTS(J),YPTS(J), - & ALON(J),ALAT(J),IRET) - ISTN(J) = XPTS(J) - JSTN(J) = YPTS(J) -C PRINT 111,STNID(J),ALAT(J),ALON(J),ISTN(J),JSTN(J) - 111 FORMAT (3X,A3,2(2X,F8.2),2(2X,F8.3)) - 110 CONTINUE -C -C...CONVERT DATA TO CONVENTIONAL UNITS: -C... WIND FROM METERS/SEC TO KNOTS (2 DIGITS), -C WIND DIRECTION IN TENS OF DEGREES (2 DIGITS), -C AND TEMP FROM K TO CELSIUS (2 DIGITS) -C - DO 1500 I=1,NPTS -C - IF (ITYP.EQ.3) THEN - RFLD(I)=RFLD(I)-273.15 - ELSE - RFLD(I)=RFLD(I)*1.94254 - ENDIF -C - 1500 CONTINUE -C - DO 2300 S=1,NRSTNS -C -C INTERPOLATE GRIDPOINT DATA TO STATION. -C - CALL W3FT01(ISTN(S),JSTN(S),RINTRP,X,IMAX,JMAX,NCYCLK,LIN) -C WRITE(6,830) STNID(S),ISTN(S),JSTN(S),X -830 FORMAT(1X,'STN-ID = ', A4,3X,'SI,SJ = ', 2(F5.1,2X), 1X, - A 'X = ', F10.0) -C -C...INTERPOLATION COMPLETE FOR THIS STATION -C -C...CONVERT WIND, U AND V TO INTEGER -C - IF (ITYP.EQ.1) THEN - KSTNU(S,L)=X*100.0 - ELSE IF (ITYP.EQ.2) THEN - KSTNV(S,L)=X*100.0 -C...CONVERT TEMP TO I*2 - ELSE IF (ITYP.EQ.3) THEN - KSTNT(S,L)=X*100.0 - ENDIF -C - 2300 CONTINUE -C...END OF STATION LOOP -C................................... -C - 2400 CONTINUE -C...END OF LEVEL LOOP -C................................... -C - 2450 CONTINUE -C...END OF DATA TYPE LOOP -C................................... -C -C...INTERPOLATED DATA FOR ALL STATIONS,1 TAU, NOW ARRAYED IN KSTNU-V-T. -C*********************************************************************** -C -C...CONVERT WIND COMPONENTS TO DIRECTION AND SPEED -C -C................................. -C...BEGIN STATION -C - DO 3900 S=1,NRSTNS -C................................. - DO 3750 L=1,15 -C -C...PUT U & V WIND COMPONENTS IN I*4 WORK AREA - IRAS(1)=KSTNU(S,L) - IRAS(2)=KSTNV(S,L) -C...FLOAT U & V - ERAS(1)=FLOAT(IRAS(1))*.01 - ERAS(2)=FLOAT(IRAS(2))*.01 -C -C...CONVERT TO WIND DIRECTION & SPEED -C - CALL W3FC05(ERAS(1),ERAS(2),DD,SS) -C -C...WITH DIR & SPEED IN WORK AREA, PLACE TEMPERATURE -TT- IN WORK - IRAS(3)=KSTNT(S,L) - TT=FLOAT(IRAS(3))*.01 -C -C...DIRECTION, SPEED & TEMP ALL REQUIRE ADDITIONAL TREATMENT TO -C MEET REQUIREMENTS OF BULLETIN FORMAT -C - NDDD=(DD+5.0)/10.0 -C...WIND DIRECTION ROUNDED TO NEAREST 10 DEGREEES -C -C...THERE IS A POSSIBILITY WIND DIRECTION NOT IN RANGE 1-36 - - IF ((NDDD.GT.36).OR.(NDDD.LE.0)) THEN - NDDD = MOD(NDDD, 36) - IF (NDDD.LE.0) NDDD = NDDD + 36 - ENDIF - NSSS=SS+0.5 -C -C...WIND SPEED ROUNDED TO NEAREST KNOT -C...FOR SPEED, KEEP UNITS AND TENS ONLY, WIND SPEEDS OF 100 -C THROUGH 199 KNOTS ARE INDICATED BY SUBTRACTING 100 FROM -C THE SPEED AND ADDING 50 TO DIRECTION. -C -C...WIND SPEEDS GREATER THAN 199 KNOTS ARE INDICATED AS A -C FORECAST SPEED OF 199 KNOTS AND ADDING 50 TO DIRECTION. -C - IF (NSSS.GT.199) THEN - NSSS=99 - NDDD=NDDD+50 -C...SPEED GT 99 AND LE 199 KNOTS - ELSE IF (NSSS.GT.99) THEN - NSSS=NSSS-100 - NDDD=NDDD+50 -C -C...SPEED LT 5 KNOTS (CONSIDERED CALM) AND EXPRESSED BY "9900" - ELSE IF (NSSS.LT.5) THEN - NSSS=0 - NDDD=99 - ENDIF -C -C...COMBINE DIR & SPEED IN ONE WORD I*4 - NDDSS=(NDDD*100)+NSSS -C -C...STORE IN ASCII IN LEVEL ARRAY, WIND FOR ONE STATION - CALL W3AI15(NDDSS,IWIND(S,L),1,4,MINUS) -C -C...TEMP NEXT. IF POSITIVE ROUND TO NEAREST DEGREE, CONV TO ASCII - NTTT = TT - IF (TT.LE.-0.5) NTTT = TT - 0.5 - IF (TT.GE.0.5) NTTT = TT + 0.5 - CALL W3AI15(NTTT,NTTT,1,3,MINUS) - IF (TT.GT.-0.5) NTTT4(1:1) = NNPOS(1:1) - -C...SIGN & 2 DIGITS OF TEMP NOW IN ASCII IN LEFT 3 BYTES OF NTTT -C - ITEMP(S,L)(1:3) = NTTT4(1:3) -C - 3750 CONTINUE -C...END LEVEL (WIND CONVERSION) -C................................. -C -C...AT END OF LVL LOOP FOR ONE STATION, ALL WIND & TEMP DATA IS ARRAYED, -C... IN ASCII, IN IWIND (4 CHARACTER DIR & SPEED) AND ITEMP (3 CHAR -C... INCL SIGN FOR 1ST 10 LVLS, 2 CHAR WITH NO SIGN FOR 5 UPPER LVLS) -C ABOVE 24,000 FEET, THE SIGN IS OMITTED SINCE TEMPERATURES ARE NEGATIVE. -C -C...BEFORE INSERTING INTO BULTN, TEMPS FOR LVLS OTHER THAN 3000' -C... WHICH ARE LESS THAN 2500' ABOVE STATION MUST BE ELIMINATED. -C... (TEMPS FOR 3000' ARE NOT TRANSMITTED) -C...WINDS ARE BLANKED FOR LVLS LESS THAN 1500' ABOVE STATION. -C - IF (IELEV(S).GT.9500) ITEMP(S,7) = IBLANK - IF (IELEV(S).GT.6500) ITEMP(S,6) = IBLANK - IF (IELEV(S).GT.3500) ITEMP(S,5) = IBLANK - ITEMP(S,4)=IBLANK - ITEMP(S,3)=IBLANK - ITEMP(S,2)=IBLANK - ITEMP(S,1)=IBLANK -C - IF (IELEV(S).GT.10500) IWIND(S,7) = IBLANK - IF (IELEV(S).GT.7500) IWIND(S,6) = IBLANK - IF (IELEV(S).GT.4500) IWIND(S,5) = IBLANK - IF (IELEV(S).GT.1500) IWIND(S,4) = IBLANK - -C...DATA FOR 1 STATION, 15 LVLS, 1 TAU NOW READY FOR BULTN LINE -C - 3900 CONTINUE -C...END STATION (WIND CONVERSION) -C -C...DATA FOR ALL STATIONS, ONE TAU, NOW READY FOR BULTN INSERTION -C********************************************************************** -C********************************************************************* -C -C...BULLETIN CREATION -C...REACH THIS POINT ONCE PER TAU -C...B IS BULTN CNT FOR TAU, BB CUMULATIVE BULTN CNT FOR RUN, -C... S IS SEQ NR OF STN. -C... (NOT NEEDED FOR U.S. WHICH IS SET AT #1.) - B = 0 - S = 0 - ENDBUL = .FALSE. -C - DO 6900 J = 1,2 -C....................................................................... -C -C...UPDATE STATION COUNTER -C - 4150 S = S + 1 -C - ICKX=INDIC(S) - IF (ICK(1:1).EQ.BSTART(1:1)) THEN - -C...GO TO START, OR CONTINUE, BULTN -C -C...BEGIN BULLETIN -C -C - B = B + 1 - BB = BB + 1 -C*********************************************************************** -C -C...PROCESS DATE-TIME FOR HEADINGS -C - IF (BB.EQ.1) THEN -C............................... -C...ONE TIME ENTRIES -C -C...TRAN HDGS - ITRDAY=JTIME(3) - IBSDAY=ICKDAY - WRITE(ITRTIM(1:4),'(2(I2.2))') JTIME(5), JTIME(6) -C - IF (TMODE.EQ.'T') THEN -C...BACKUP - IF (ICYC.EQ.3.OR.ICYC.EQ.4) THEN -C...TRAN DAY WILL BE NEXT DAY FOR 12Z, 18Z CYCLE BACKUP - ITRDAY=NDATE(3) - IF (ICYC.EQ.4.AND.T.EQ.3) IVLDAY=MDATE(3) - ENDIF - ENDIF -C...END TRAN BACKUP DAY-HOUR -C -C...PLACE TRAN & BASE DAY-HOUR IN HDGS - CALL W3AI15(ITRDAY,ITRDA,1,2,MINUS) - CALL W3AI15(IBSDAY,IBSDA,1,2,MINUS) - CALL W3AI15(IBSTIM,IBSTI,1,4,MINUS) -C - NBUL2(13:14) = ITRDA(1:2) - NBUL2(15:18) = ITRTIM(1:4) -C - NBASHD(15:16) = IBSDA(1:2) - NBASHD(17:20) = IBSTI(1:4) - ENDIF - -C **************************************************************** -C **************************************************************** -C IF REQUIRED TO INDICATE THE SOURCE FOR THESE FD BULLETINS -C REMOVE THE COMMENT STATUS FROM THE NEXT TWO LINES -C **************************************************************** -C **************************************************************** -C -C...END ONE-TIME ENTRIES -C............................ -C -C...BLANK OUT CONTROL DATE AFTER 1ST BULTN - IF (BB.EQ.2) NBULHD(13:20) = SPCS(1:8) -C -C...CATALOG NUMBER (AND 'P' OR 'B' FOR PRIMARY OR BACKUP RUN) - NBULHD(8:8) = TFLAG - NBULHD(4:7) = NCATNR(BB)(1:4) - NBULHD(43:46) = NFDHDG(BB)(1:4) -C -C INSERT AWIPS ID INTO BULLETIN HEADER -C - NBUL2(25:30) = AWIPSID(BB)(1:6) - - -C...END CATALOG NR -C -C...END TRAN HDGS -C..................................................................... -C -C...VALID-USE HDGS - IF (TMODE.EQ.'T') THEN - -C...BACKUP DAY-HOURS WILL BE SAME AS PRIMARY RUN OF OPPOSITE CYCLE - IVLDAY=NDATE(3) - IF (ICYC.EQ.1.AND.T.EQ.1) IVLDAY=IBSDAY - IF (ICYC.EQ.4.AND.T.EQ.3) IVLDAY=MDATE(3) -C -C...SET POINTER OPPOSITE (USE WITH T -RELATIVE TAU- TO SET HOURS) - IF (ICYC.EQ.1) KCYC=2 - IF (ICYC.EQ.3) KCYC=1 - ELSE - IVLDAY=IBSDAY - IF (T.EQ.3) IVLDAY=NDATE(3) - IF (ICYC.EQ.3.AND.T.EQ.2) IVLDAY=NDATE(3) - IF (ICYC.EQ.4) IVLDAY=NDATE(3) - ENDIF - -C...END BACKUP DAY-HOUR. -C -C...CONVERT TO ASCII AND PLACE IN HDGS - CALL W3AI15(IVLDAY,IVALDA,1,2,MINUS) - NVALHD(7:8) = IVALDA(1:2) - IITAU = ITAU - IF (ICYC.EQ.2) IITAU = ITAU + 3 - IF (ICYC.EQ.3) IITAU = ITAU + 6 - IF (ICYC.EQ.4) IITAU = ITAU + 9 - NVALHD(9:12) = NVALTM(IITAU)(1:4) - NVALHD(25:33) = NUSETM(IITAU)(1:9) -C -C...END VALID-USE HDGS -C -C...MOVE WORK HDGS TO BULTN O/P (TRAN, BASE, VALID, HEIGHT HDGS) - NEXT=0 - CALL WXAI19(NBULHD,74,BULTN,1280,NEXT) -C PRINT *,(NBULHD(L:L),L=41,70) - CALL WXAI19(NBASHD,28,BULTN,1280,NEXT) -C PRINT *,(NBASHD(L:L),L=1,25) - CALL WXAI19(NVALHD,60,BULTN,1280,NEXT) -C PRINT *, (NVALHD(L:L),L=1,55) - LINE73(1:73) = SPCS(1:73) - LINE73(1:2) = 'FT' - NPOS1 = 5 - DO 4500 N = LMTLWR(J), LMTUPR(J) - IF (N.LE.3) THEN - NPOS1 = NPOS1 - ELSE IF (N.EQ.4) THEN - NPOS1 = NPOS1 - 1 - ELSE IF ((N.GE.5).AND.(N.LE.6)) THEN - NPOS1 = NPOS1 + 2 - ELSE IF ((N.EQ.7).OR.(N.EQ.11)) THEN - NPOS1 = NPOS1 + 1 - ELSE IF (N.GT.7) THEN - NPOS1 = NPOS1 + 2 - ENDIF - NPOS2 = NPOS1 + 4 - LINE73(NPOS1:NPOS2) = NHGT6(N)(1:5) - NPOS1 = NPOS1 + NHGTP(N) - 4500 CONTINUE - -C PRINT *,(LINE73(II:II),II=1,NPOS2) - CALL WXAI19(LINE73,NPOS2,BULTN,1280,NEXT) - CALL WXAI19(CRCRLF,3,BULTN,1280,NEXT) - ENDIF -C -C...BULLETIN HDGS FOR ONE BULTN COMPLETE IN O/P AREA -C -C*********************************************************************** -C -C...CONTINUE BULTN, INSERTING DATA LINES. -C - NPOS1 = 5 - LINE73(1:73) = SPCS(1:73) - LINE73(1:1) = '$' - LINE73( 2: 5) = STNID(S)(1:4) - DO 5300 M = LMTLWR(J), LMTUPR(J) - NPOS1 = NPOS1 + 1 - NPOS2 = NPOS1 + 4 - LINE73(NPOS1:NPOS2) = IWIND(S,M)(1:4) - NPOS1 = NPOS1 + 4 - IF ((M.GT.4).AND.(M.LE.10))THEN - NPOS2 = NPOS1 + 2 - LINE73(NPOS1:NPOS2) = ITEMP(S,M)(1:3) - NPOS1 = NPOS1 + 3 - END IF - IF (M.GT.10) THEN - NPOS2 = NPOS1 + 1 - LINE73(NPOS1:NPOS2) = ITEMP(S,M)(2:3) - NPOS1 = NPOS1 + 2 - END IF - 5300 CONTINUE -C PRINT *,(LINE73(II:II),II=2,NPOS2) -C...NXTSAV HOLDS BYTE COUNT IN O/P BULTN FOR RESTORING WXAI19 'NEXT' -C... FIELD SO THAT WHEN 'NEXT' IS RETURNED AS -1, AN ADDITIONAL -C... LINEFEED AND/OR ETB OR ETX CAN BE INSERTED -C - IF (NEXT.GE.1207) THEN - CALL WXAI19 (ETB,1,BULTN,1280,NEXT) - LF = CHAR(10) - do ii=1,next - space(index) = bultn(ii) - if (index .eq. 1280) then - WRITE(51,REC=IREC) space, LF - IREC=IREC + 1 - index = 0 - do kk = 1,1280 - space(kk) = ' ' - enddo - endif - index = index + 1 - enddo -C WRITE(51) BULTN, LF - NEXT = 0 - ENDIF - CALL WXAI19(LINE73,NPOS2,BULTN,1280,NEXT) - CALL WXAI19(CRCRLF,3,BULTN,1280,NEXT) -C -C...AFTER LINE STORED IN O/P, GO TO CHECK BULTN END -C -C................................... -C -C...CHECK FOR LAST STN OF BULTN - IF (ICK(1:1).NE.BEND(1:1)) GO TO 4150 -C -C...END BULLETIN. SET UP RETURN FOR NEXT STN AFTER WRITE O/P. -C...SAVE SEQ NR OF LAST STN FOR SUBSEQUENT SEARCH FOR STNS -C - NXTSAV = NEXT - ENDBUL = .TRUE. -C*********************************************************************** -C -C...OUTPUT SECTION -C - NEXT = NXTSAV - ETBETX = ETB - IF (ENDBUL) ETBETX=ETX -C...END OF TRANSMIT BLOCK, OR END OF TRANSMISSION -C - CALL WXAI19(ETBETX,1,BULTN,1280,NEXT) -C -C...OUTPUT TO HOLD FILES - LF = CHAR(10) - do ii = 1,next - space(index) = bultn(ii) - if (index .eq. 1280) then - WRITE(51,REC=IREC) space, LF - IREC=IREC + 1 - index = 0 - do kk = 1,1280 - space(kk) = ' ' - enddo - endif - index = index + 1 - enddo -C -C...TRAN. -C -C NEXT=0 - ENDBUL=.FALSE. -C -C...RETURN TO START NEW BULTN, OR CONTINUE LINE FOR WHICH THERE WAS -C... INSUFFICIENT SPACE IN BLOCK JUST WRITTEN -C - 6900 CONTINUE -C -C*********************************************************************** - 7000 CONTINUE -C...END TAU LOOP -C -C...FT51 IS TRANSMISSION FILE -C END FILE 51 -C REWIND 51 - if (index .gt. 0) then - WRITE(51,REC=IREC) space, LF - IREC=IREC+1 - endif - KRET = 0 - - CALL W3TAGE('FBWNDGFS') - STOP - END - - SUBROUTINE WXAI19(LINE, L, NBLK, N, NEXT) -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: WXAI19 LINE BLOCKER SUBROUTINE -C AUTHOR: ALLARD, R. ORG: W342 DATE: 01 FEB 74 -C -C ABSTRACT: FILLS A RECORD BLOCK WITH LOGICAL RECORDS OR LINES -C OF INFORMATION. -C -C PROGRAM HISTORY LOG: -C 74-02-01 BOB ALLARD -C 90-09-15 R.E.JONES CONVERT FROM IBM370 ASSEMBLER TO MICROSOFT -C FORTRAN 5.0 -C 90-10-07 R.E.JONES CONVERT TO SUN FORTRAN 1.3 -C 91-07-20 R.E.JONES CONVERT TO SiliconGraphics 3.3 FORTRAN 77 -C 93-03-29 R.E.JONES ADD SAVE STATEMENT -C 94-04-22 R.E.JONES ADD XMOVEX AND XSTORE TO MOVE AND -C STORE CHARACTER DATA FASTER ON THE CRAY -C 96-07-18 R.E.JONES CHANGE EBCDIC FILL TO ASCII FILL -C 96-11-18 R.E.JONES CHANGE NAME W3AI19 TO WXAI19 -C -C USAGE: CALL WXAI19 (LINE, L, NBLK, N, NEXT) -C INPUT ARGUMENT LIST: -C LINE - ARRAY ADDRESS OF LOGICAL RECORD TO BE BLOCKED -C L - NUMBER OF CHARACTERS IN LINE TO BE BLOCKED -C N - MAXIMUM CHARACTER SIZE OF NBLK -C NEXT - FLAG, INITIALIZED TO 0 -C -C OUTPUT ARGUMENT LIST: -C NBLK - BLOCK FILLED WITH LOGICAL RECORDS -C NEXT - CHARACTER COUNT, ERROR INDICATOR -C -C EXIT STATES: -C NEXT = -1 LINE WILL NOT FIT INTO REMAINDER OF BLOCK; -C OTHERWISE, NEXT IS SET TO (NEXT + L) -C NEXT = -2 N IS ZERO OR LESS -C NEXT = -3 L IS ZERO OR LESS -C -C EXTERNAL REFERENCES: XMOVEX XSTORE -C -C ATTRIBUTES: -C LANGUAGE: FORTRAN 90 -C -C$$$ -C -C METHOD: -C -C THE USER MUST SET NEXT = 0 EACH TIME NBLK IS TO BE FILLED WITH -C LOGICAL RECORDS. -C -C WXAI19 WILL THEN MOVE THE LINE OF INFORMATION INTO NBLK, STORE -C BLANK CHARACTERS IN THE REMAINDER OF THE BLOCK, AND SET NEXT = NEXT -C + L. -C -C EACH TIME WXAI19 IS ENTERED, ONE LINE IS BLOCKED AND NEXT INCRE- -C MENTED UNTIL A LINE WILL NOT FIT THE REMAINDER OF THE BLOCK. THEN -C WXAI19 WILL SET NEXT = -1 AS A FLAG FOR THE USER TO DISPOSE OF THE -C BLOCK. THE USER SHOULD BE AWARE THAT THE LAST LOGICAL RECORD WAS NOT -C BLOCKED. -C - INTEGER L - INTEGER N - INTEGER NEXT - INTEGER WBLANK -C - CHARACTER * 1 LINE(*) - CHARACTER * 1 NBLK(*) - CHARACTER * 1 BLANK -C - SAVE -C - DATA WBLANK/Z'2020202020202020'/ -C DATA WBLANK/Z''/ -C -C TEST VALUE OF NEXT. -C - IF (NEXT.LT.0) THEN - RETURN -C -C TEST N FOR ZERO OR LESS -C - ELSE IF (N.LE.0) THEN - NEXT = -2 - RETURN -C -C TEST L FOR ZERO OR LESS -C - ELSE IF (L.LE.0) THEN - NEXT = -3 - RETURN -C -C TEST TO SEE IF LINE WILL FIT IN BLOCK. -C - ELSE IF ((L + NEXT).GT.N) THEN - NEXT = -1 - RETURN -C -C FILL BLOCK WITH BLANK CHARACTERS IF NEXT EQUAL ZERO. -C BLANK IS ASCII BLANK, 20 HEX, OR 32 DECIMAL -C - ELSE IF (NEXT.EQ.0) THEN - CALL W3FI01(LW) - IWORDS = N / LW - CALL XSTORE(NBLK,WBLANK,IWORDS) - IF (MOD(N,LW).NE.0) THEN - NWORDS = IWORDS * LW - IBYTES = N - NWORDS - DO I = 1,IBYTES - NBLK(NWORDS+I) = CHAR(32) - END DO - END IF - END IF -C -C MOVE LINE INTO BLOCK. -C - CALL XMOVEX(NBLK(NEXT+1),LINE,L) -C -C ADJUST VALUE OF NEXT. -C - NEXT = NEXT + L -C - RETURN -C - END diff --git a/sorc/fbwndgfs.fd/makefile.GENERIC b/sorc/fbwndgfs.fd/makefile.GENERIC deleted file mode 100755 index f38539916f..0000000000 --- a/sorc/fbwndgfs.fd/makefile.GENERIC +++ /dev/null @@ -1,81 +0,0 @@ -SHELL=/bin/sh -# -# This makefile was produced by /usr/bin/fmgen at 12:00:38 PM on 11/27/96 -# If it is invoked by the command line -# make -f makefile -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable named a.out. -# -# If it is invoked by the command line -# make -f makefile a.out.prof -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable which profiles -# named a.out.prof. -# -# To remove all the objects but leave the executables use the command line -# make -f makefile clean -# -# To remove everything but the source files use the command line -# make -f makefile clobber -# -# To remove the source files created by /usr/bin/fmgen and this makefile -# use the command line -# make -f makefile void -# -# The parameters SRCS and OBJS should not need to be changed. If, however, -# you need to add a new module add the name of the source module to the -# SRCS parameter and add the name of the resulting object file to the OBJS -# parameter. The new modules are not limited to fortran, but may be C, YACC, -# LEX, or CAL. An explicit rule will need to be added for PASCAL modules. -# -SRCS= fbwndgfs.f - -OBJS= fbwndgfs.o - -# Tunable parameters -# -# FC Name of the fortran compiling system to use -# LDFLAGS Flags to the loader -# LIBS List of libraries -# CMD Name of the executable -# PROFLIB Library needed for profiling -# -FC = ifort -LDFLAGS = -LIBS = ${W3NCO_LIB8} ${W3EMC_LIB8} ${BACIO_LIB8} ${IP_LIB8} ${SP_LIB8} -CMD = fbwndgfs -PROFLIB = -lprof - -# To perform the default compilation, use the first line -# To compile with flowtracing turned on, use the second line -# To compile giving profile additonal information, use the third line -# WARNING: SIMULTANEOUSLY PROFILING AND FLOWTRACING IS NOT RECOMMENDED -FFLAGS = -O3 -g -I ${IP_INC8} -assume byterecl -convert big_endian -r8 -i8 -#FFLAGS = -F -#FFLAGS = -Wf"-ez" - -# Lines from here on down should not need to be changed. They are the -# actual rules which make uses to build a.out. -# -all: $(CMD) - -$(CMD): $(OBJS) - $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS) - -# Make the profiled version of the command and call it a.out.prof -# -$(CMD).prof: $(OBJS) - $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(PROFLIB) $(LIBS) - -install: - mkdir -p ../../exec - cp -p $(CMD) ../../exec - -clean: - -rm -f $(OBJS) - -clobber: clean - -rm -f $(CMD) $(CMD).prof - -void: clobber - -rm -f $(SRCS) makefile diff --git a/sorc/fbwndgfs.fd/makefile.theia b/sorc/fbwndgfs.fd/makefile.theia deleted file mode 100755 index f38539916f..0000000000 --- a/sorc/fbwndgfs.fd/makefile.theia +++ /dev/null @@ -1,81 +0,0 @@ -SHELL=/bin/sh -# -# This makefile was produced by /usr/bin/fmgen at 12:00:38 PM on 11/27/96 -# If it is invoked by the command line -# make -f makefile -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable named a.out. -# -# If it is invoked by the command line -# make -f makefile a.out.prof -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable which profiles -# named a.out.prof. -# -# To remove all the objects but leave the executables use the command line -# make -f makefile clean -# -# To remove everything but the source files use the command line -# make -f makefile clobber -# -# To remove the source files created by /usr/bin/fmgen and this makefile -# use the command line -# make -f makefile void -# -# The parameters SRCS and OBJS should not need to be changed. If, however, -# you need to add a new module add the name of the source module to the -# SRCS parameter and add the name of the resulting object file to the OBJS -# parameter. The new modules are not limited to fortran, but may be C, YACC, -# LEX, or CAL. An explicit rule will need to be added for PASCAL modules. -# -SRCS= fbwndgfs.f - -OBJS= fbwndgfs.o - -# Tunable parameters -# -# FC Name of the fortran compiling system to use -# LDFLAGS Flags to the loader -# LIBS List of libraries -# CMD Name of the executable -# PROFLIB Library needed for profiling -# -FC = ifort -LDFLAGS = -LIBS = ${W3NCO_LIB8} ${W3EMC_LIB8} ${BACIO_LIB8} ${IP_LIB8} ${SP_LIB8} -CMD = fbwndgfs -PROFLIB = -lprof - -# To perform the default compilation, use the first line -# To compile with flowtracing turned on, use the second line -# To compile giving profile additonal information, use the third line -# WARNING: SIMULTANEOUSLY PROFILING AND FLOWTRACING IS NOT RECOMMENDED -FFLAGS = -O3 -g -I ${IP_INC8} -assume byterecl -convert big_endian -r8 -i8 -#FFLAGS = -F -#FFLAGS = -Wf"-ez" - -# Lines from here on down should not need to be changed. They are the -# actual rules which make uses to build a.out. -# -all: $(CMD) - -$(CMD): $(OBJS) - $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS) - -# Make the profiled version of the command and call it a.out.prof -# -$(CMD).prof: $(OBJS) - $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(PROFLIB) $(LIBS) - -install: - mkdir -p ../../exec - cp -p $(CMD) ../../exec - -clean: - -rm -f $(OBJS) - -clobber: clean - -rm -f $(CMD) $(CMD).prof - -void: clobber - -rm -f $(SRCS) makefile diff --git a/sorc/fbwndgfs.fd/makefile.wcoss b/sorc/fbwndgfs.fd/makefile.wcoss deleted file mode 100755 index f38539916f..0000000000 --- a/sorc/fbwndgfs.fd/makefile.wcoss +++ /dev/null @@ -1,81 +0,0 @@ -SHELL=/bin/sh -# -# This makefile was produced by /usr/bin/fmgen at 12:00:38 PM on 11/27/96 -# If it is invoked by the command line -# make -f makefile -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable named a.out. -# -# If it is invoked by the command line -# make -f makefile a.out.prof -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable which profiles -# named a.out.prof. -# -# To remove all the objects but leave the executables use the command line -# make -f makefile clean -# -# To remove everything but the source files use the command line -# make -f makefile clobber -# -# To remove the source files created by /usr/bin/fmgen and this makefile -# use the command line -# make -f makefile void -# -# The parameters SRCS and OBJS should not need to be changed. If, however, -# you need to add a new module add the name of the source module to the -# SRCS parameter and add the name of the resulting object file to the OBJS -# parameter. The new modules are not limited to fortran, but may be C, YACC, -# LEX, or CAL. An explicit rule will need to be added for PASCAL modules. -# -SRCS= fbwndgfs.f - -OBJS= fbwndgfs.o - -# Tunable parameters -# -# FC Name of the fortran compiling system to use -# LDFLAGS Flags to the loader -# LIBS List of libraries -# CMD Name of the executable -# PROFLIB Library needed for profiling -# -FC = ifort -LDFLAGS = -LIBS = ${W3NCO_LIB8} ${W3EMC_LIB8} ${BACIO_LIB8} ${IP_LIB8} ${SP_LIB8} -CMD = fbwndgfs -PROFLIB = -lprof - -# To perform the default compilation, use the first line -# To compile with flowtracing turned on, use the second line -# To compile giving profile additonal information, use the third line -# WARNING: SIMULTANEOUSLY PROFILING AND FLOWTRACING IS NOT RECOMMENDED -FFLAGS = -O3 -g -I ${IP_INC8} -assume byterecl -convert big_endian -r8 -i8 -#FFLAGS = -F -#FFLAGS = -Wf"-ez" - -# Lines from here on down should not need to be changed. They are the -# actual rules which make uses to build a.out. -# -all: $(CMD) - -$(CMD): $(OBJS) - $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS) - -# Make the profiled version of the command and call it a.out.prof -# -$(CMD).prof: $(OBJS) - $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(PROFLIB) $(LIBS) - -install: - mkdir -p ../../exec - cp -p $(CMD) ../../exec - -clean: - -rm -f $(OBJS) - -clobber: clean - -rm -f $(CMD) $(CMD).prof - -void: clobber - -rm -f $(SRCS) makefile diff --git a/sorc/fbwndgfs.fd/makefile.wcoss_cray b/sorc/fbwndgfs.fd/makefile.wcoss_cray deleted file mode 100755 index 0ebe267cb9..0000000000 --- a/sorc/fbwndgfs.fd/makefile.wcoss_cray +++ /dev/null @@ -1,81 +0,0 @@ -SHELL=/bin/sh -# -# This makefile was produced by /usr/bin/fmgen at 12:00:38 PM on 11/27/96 -# If it is invoked by the command line -# make -f makefile -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable named a.out. -# -# If it is invoked by the command line -# make -f makefile a.out.prof -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable which profiles -# named a.out.prof. -# -# To remove all the objects but leave the executables use the command line -# make -f makefile clean -# -# To remove everything but the source files use the command line -# make -f makefile clobber -# -# To remove the source files created by /usr/bin/fmgen and this makefile -# use the command line -# make -f makefile void -# -# The parameters SRCS and OBJS should not need to be changed. If, however, -# you need to add a new module add the name of the source module to the -# SRCS parameter and add the name of the resulting object file to the OBJS -# parameter. The new modules are not limited to fortran, but may be C, YACC, -# LEX, or CAL. An explicit rule will need to be added for PASCAL modules. -# -SRCS= fbwndgfs.f - -OBJS= fbwndgfs.o - -# Tunable parameters -# -# FC Name of the fortran compiling system to use -# LDFLAGS Flags to the loader -# LIBS List of libraries -# CMD Name of the executable -# PROFLIB Library needed for profiling -# -FC = ftn -LDFLAGS = -LIBS = ${W3NCO_LIB8} ${W3EMC_LIB8} ${BACIO_LIB8} ${IP_LIB8} ${SP_LIB8} -CMD = fbwndgfs -PROFLIB = -lprof - -# To perform the default compilation, use the first line -# To compile with flowtracing turned on, use the second line -# To compile giving profile additonal information, use the third line -# WARNING: SIMULTANEOUSLY PROFILING AND FLOWTRACING IS NOT RECOMMENDED -FFLAGS = -O3 -g -I ${IP_INC8} -assume byterecl -convert big_endian -r8 -i8 -axCORE-AVX2 -#FFLAGS = -F -#FFLAGS = -Wf"-ez" - -# Lines from here on down should not need to be changed. They are the -# actual rules which make uses to build a.out. -# -all: $(CMD) - -$(CMD): $(OBJS) - $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS) - -# Make the profiled version of the command and call it a.out.prof -# -$(CMD).prof: $(OBJS) - $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(PROFLIB) $(LIBS) - -install: - mkdir -p ../../exec - cp -p $(CMD) ../../exec - -clean: - -rm -f $(OBJS) - -clobber: clean - -rm -f $(CMD) $(CMD).prof - -void: clobber - -rm -f $(SRCS) makefile diff --git a/sorc/fbwndgfs.fd/makefile.wcoss_dell_p3 b/sorc/fbwndgfs.fd/makefile.wcoss_dell_p3 deleted file mode 100755 index f38539916f..0000000000 --- a/sorc/fbwndgfs.fd/makefile.wcoss_dell_p3 +++ /dev/null @@ -1,81 +0,0 @@ -SHELL=/bin/sh -# -# This makefile was produced by /usr/bin/fmgen at 12:00:38 PM on 11/27/96 -# If it is invoked by the command line -# make -f makefile -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable named a.out. -# -# If it is invoked by the command line -# make -f makefile a.out.prof -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable which profiles -# named a.out.prof. -# -# To remove all the objects but leave the executables use the command line -# make -f makefile clean -# -# To remove everything but the source files use the command line -# make -f makefile clobber -# -# To remove the source files created by /usr/bin/fmgen and this makefile -# use the command line -# make -f makefile void -# -# The parameters SRCS and OBJS should not need to be changed. If, however, -# you need to add a new module add the name of the source module to the -# SRCS parameter and add the name of the resulting object file to the OBJS -# parameter. The new modules are not limited to fortran, but may be C, YACC, -# LEX, or CAL. An explicit rule will need to be added for PASCAL modules. -# -SRCS= fbwndgfs.f - -OBJS= fbwndgfs.o - -# Tunable parameters -# -# FC Name of the fortran compiling system to use -# LDFLAGS Flags to the loader -# LIBS List of libraries -# CMD Name of the executable -# PROFLIB Library needed for profiling -# -FC = ifort -LDFLAGS = -LIBS = ${W3NCO_LIB8} ${W3EMC_LIB8} ${BACIO_LIB8} ${IP_LIB8} ${SP_LIB8} -CMD = fbwndgfs -PROFLIB = -lprof - -# To perform the default compilation, use the first line -# To compile with flowtracing turned on, use the second line -# To compile giving profile additonal information, use the third line -# WARNING: SIMULTANEOUSLY PROFILING AND FLOWTRACING IS NOT RECOMMENDED -FFLAGS = -O3 -g -I ${IP_INC8} -assume byterecl -convert big_endian -r8 -i8 -#FFLAGS = -F -#FFLAGS = -Wf"-ez" - -# Lines from here on down should not need to be changed. They are the -# actual rules which make uses to build a.out. -# -all: $(CMD) - -$(CMD): $(OBJS) - $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS) - -# Make the profiled version of the command and call it a.out.prof -# -$(CMD).prof: $(OBJS) - $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(PROFLIB) $(LIBS) - -install: - mkdir -p ../../exec - cp -p $(CMD) ../../exec - -clean: - -rm -f $(OBJS) - -clobber: clean - -rm -f $(CMD) $(CMD).prof - -void: clobber - -rm -f $(SRCS) makefile diff --git a/sorc/fv3gfs_build.cfg b/sorc/fv3gfs_build.cfg deleted file mode 100644 index 130c6dde03..0000000000 --- a/sorc/fv3gfs_build.cfg +++ /dev/null @@ -1,23 +0,0 @@ -# -# ***** configuration of fv3gfs build ***** - - Building libraries (libs) ............................. no - Building fv3gfs (fv3gfs) .............................. yes - Building gsi (gsi) .................................... yes - Building gldas (gldas) ................................ yes - Building ncep_post (ncep_post) ........................ yes - Building ufs_utils (ufs_utils) ........................ yes - Building gldas (gldas) ................................ yes - Building gfs_wafs (gfs_wafs) .......................... yes - Building gaussian_sfcanl (gaussian_sfcanl)............. yes - Building enkf_chgres_recenter (enkf_chgres_recenter) .. yes - Building enkf_chgres_recenter_nc (enkf_chgres_recenter_nc) .. yes - Building tropcy_NEMS (tropcy) ......................... yes - Building gfs_fbwndgfs (gfs_fbwndgfs) .................. yes - Building gfs_bufrsnd (gfs_bufrsnd) .................... yes - Building fv3nc2nemsio (fv3nc2nemsio) .................. yes - Building regrid_nemsio (regrid_nemsio) ................ yes - Building gfs_util (gfs_util) .......................... yes - -# -- END -- - diff --git a/sorc/fv3nc2nemsio.fd/0readme b/sorc/fv3nc2nemsio.fd/0readme deleted file mode 100644 index 7be2fbcd34..0000000000 --- a/sorc/fv3nc2nemsio.fd/0readme +++ /dev/null @@ -1,23 +0,0 @@ -The first version of this program was provided by Jeff Whitaker and Philip Pegion from ESRL. -Fanglin Ynag has subsequently made a few revsions. - -10/20/2016, Fanglin Yang -Note that FV3 lat-lon grids are located at the center of each grid box, -start from south to north, and from east to west. -For example, for a 0.5-deg uniform grid, -nlon=720, nlat=360 -X(1,1)=[0.25E,89.75S] -X(nlon,nlat)=[359.75E,89.75N] - -write out nemsio, S->N is reversed to N->S to follow NCEP convention - -12/18/2016 Fanglin Yang -updated to handle output of any frequency and any accumulation bucket - - -01/10/2017 Fanglin Yang -updated to handle both hydrostatic and nonhydrostatic cases. They have different output numbers and variable names. - -10/07/2017 Fanglin Yang -In FV3 tic26 branch which includes the lastest Write Component, hgtsfc has been defined as [m] instead of [gpm]. -The scaling by 1/grav in fv3nc2nemsio.fd needs to be removed. diff --git a/sorc/fv3nc2nemsio.fd/constants.f90 b/sorc/fv3nc2nemsio.fd/constants.f90 deleted file mode 100644 index c0a066eec0..0000000000 --- a/sorc/fv3nc2nemsio.fd/constants.f90 +++ /dev/null @@ -1,314 +0,0 @@ -! this module was extracted from the GSI version operational -! at NCEP in Dec. 2007. -module constants -!$$$ module documentation block -! . . . . -! module: constants -! prgmmr: treadon org: np23 date: 2003-09-25 -! -! abstract: This module contains the definition of various constants -! used in the gsi code -! -! program history log: -! 2003-09-25 treadon - original code -! 2004-03-02 treadon - allow global and regional constants to differ -! 2004-06-16 treadon - update documentation -! 2004-10-28 treadon - replace parameter tiny=1.e-12 with tiny_r_kind -! and tiny_single -! 2004-11-16 treadon - add huge_single, huge_r_kind parameters -! 2005-01-27 cucurull - add ione -! 2005-08-24 derber - move cg_term to constants from qcmod -! 2006-03-07 treadon - add rd_over_cp_mass -! 2006-05-18 treadon - add huge_i_kind -! 2006-06-06 su - add var-qc wgtlim, change value to 0.25 (ECMWF) -! 2006-07-28 derber - add r1000 -! -! Subroutines Included: -! sub init_constants - compute derived constants, set regional/global constants -! -! Variable Definitions: -! see below -! -! attributes: -! language: f90 -! machine: ibm RS/6000 SP -! -!$$$ - use kinds, only: r_single,r_kind,i_kind - implicit none - -! Declare constants - integer(i_kind) izero,ione - real(r_kind) rearth,grav,omega,rd,rv,cp,cv,cvap,cliq - real(r_kind) csol,hvap,hfus,psat,t0c,ttp,jcal,cp_mass,cg_term - real(r_kind) fv,deg2rad,rad2deg,pi,tiny_r_kind,huge_r_kind,huge_i_kind - real(r_kind) ozcon,rozcon,tpwcon,rd_over_g,rd_over_cp,g_over_rd - real(r_kind) amsua_clw_d1,amsua_clw_d2,constoz,zero,one,two,four - real(r_kind) one_tenth,quarter,three,five,rd_over_cp_mass, gamma - real(r_kind) rearth_equator,stndrd_atmos_ps,r1000 - real(r_kind) semi_major_axis,semi_minor_axis,n_a,n_b - real(r_kind) eccentricity,grav_polar,grav_ratio - real(r_kind) grav_equator,earth_omega,grav_constant - real(r_kind) flattening,eccentricity_linear,somigliana - real(r_kind) dldt,dldti,hsub,psatk,tmix,xa,xai,xb,xbi - real(r_kind) eps,epsm1,omeps,wgtlim - real(r_kind) elocp,cpr,el2orc,cclimit,climit,epsq - real(r_kind) pcpeff0,pcpeff1,pcpeff2,pcpeff3,rcp,c0,delta - real(r_kind) h1000,factor1,factor2,rhcbot,rhctop,dx_max,dx_min,dx_inv - real(r_kind) h300,half,cmr,cws,ke2,row,rrow - real(r_single) zero_single,tiny_single,huge_single - real(r_single) rmw_mean_distance, roic_mean_distance - logical :: constants_initialized = .true. - - -! Define constants common to global and regional applications -! name value description units -! ---- ----- ----------- ----- - parameter(rearth_equator= 6.37813662e6_r_kind) ! equatorial earth radius (m) - parameter(omega = 7.2921e-5_r_kind) ! angular velocity of earth (1/s) - parameter(cp = 1.0046e+3_r_kind) ! specific heat of air @pressure (J/kg/K) - parameter(cvap = 1.8460e+3_r_kind) ! specific heat of h2o vapor (J/kg/K) - parameter(csol = 2.1060e+3_r_kind) ! specific heat of solid h2o (ice)(J/kg/K) - parameter(hvap = 2.5000e+6_r_kind) ! latent heat of h2o condensation (J/kg) - parameter(hfus = 3.3358e+5_r_kind) ! latent heat of h2o fusion (J/kg) - parameter(psat = 6.1078e+2_r_kind) ! pressure at h2o triple point (Pa) - parameter(t0c = 2.7315e+2_r_kind) ! temperature at zero celsius (K) - parameter(ttp = 2.7316e+2_r_kind) ! temperature at h2o triple point (K) - parameter(jcal = 4.1855e+0_r_kind) ! joules per calorie () - parameter(stndrd_atmos_ps = 1013.25e2_r_kind) ! 1976 US standard atmosphere ps (Pa) - -! Numeric constants - parameter(izero = 0) - parameter(ione = 1) - parameter(zero_single = 0.0_r_single) - parameter(zero = 0.0_r_kind) - parameter(one_tenth = 0.10_r_kind) - parameter(quarter= 0.25_r_kind) - parameter(one = 1.0_r_kind) - parameter(two = 2.0_r_kind) - parameter(three = 3.0_r_kind) - parameter(four = 4.0_r_kind) - parameter(five = 5.0_r_kind) - parameter(r1000 = 1000.0_r_kind) - -! Constants for gps refractivity - parameter(n_a=77.6_r_kind) !K/mb - parameter(n_b=3.73e+5_r_kind) !K^2/mb - -! Parameters below from WGS-84 model software inside GPS receivers. - parameter(semi_major_axis = 6378.1370e3_r_kind) ! (m) - parameter(semi_minor_axis = 6356.7523142e3_r_kind) ! (m) - parameter(grav_polar = 9.8321849378_r_kind) ! (m/s2) - parameter(grav_equator = 9.7803253359_r_kind) ! (m/s2) - parameter(earth_omega = 7.292115e-5_r_kind) ! (rad/s) - parameter(grav_constant = 3.986004418e14_r_kind) ! (m3/s2) - -! Derived geophysical constants - parameter(flattening = (semi_major_axis-semi_minor_axis)/semi_major_axis)!() - parameter(somigliana = & - (semi_minor_axis/semi_major_axis) * (grav_polar/grav_equator) - one)!() - parameter(grav_ratio = (earth_omega*earth_omega * & - semi_major_axis*semi_major_axis * semi_minor_axis) / grav_constant) !() - -! Derived thermodynamic constants - parameter ( dldti = cvap-csol ) - parameter ( hsub = hvap+hfus ) - parameter ( psatk = psat*0.001_r_kind ) - parameter ( tmix = ttp-20._r_kind ) - parameter ( elocp = hvap/cp ) - parameter ( rcp = one/cp ) - -! Constants used in GFS moist physics - parameter ( h300 = 300._r_kind ) - parameter ( half = 0.5_r_kind ) - parameter ( cclimit = 0.001_r_kind ) - parameter ( climit = 1.e-20_r_kind) - parameter ( epsq = 2.e-12_r_kind ) - parameter ( h1000 = 1000.0_r_kind) - parameter ( rhcbot=0.85_r_kind ) - parameter ( rhctop=0.85_r_kind ) - parameter ( dx_max=-8.8818363_r_kind ) - parameter ( dx_min=-5.2574954_r_kind ) - parameter ( dx_inv=one/(dx_max-dx_min) ) - parameter ( c0=0.002_r_kind ) - parameter ( delta=0.6077338_r_kind ) - parameter ( pcpeff0=1.591_r_kind ) - parameter ( pcpeff1=-0.639_r_kind ) - parameter ( pcpeff2=0.0953_r_kind ) - parameter ( pcpeff3=-0.00496_r_kind ) - parameter ( cmr = one/0.0003_r_kind ) - parameter ( cws = 0.025_r_kind ) - parameter ( ke2 = 0.00002_r_kind ) - parameter ( row = 1000._r_kind ) - parameter ( rrow = one/row ) - -! Constant used to process ozone - parameter ( constoz = 604229.0_r_kind) - -! Constants used in cloud liquid water correction for AMSU-A -! brightness temperatures - parameter ( amsua_clw_d1 = 0.754_r_kind ) - parameter ( amsua_clw_d2 = -2.265_r_kind ) - -! Constants used for variational qc - parameter ( wgtlim = 0.25_r_kind) ! Cutoff weight for concluding that obs has been - ! rejected by nonlinear qc. This limit is arbitrary - ! and DOES NOT affect nonlinear qc. It only affects - ! the printout which "counts" the number of obs that - ! "fail" nonlinear qc. Observations counted as failing - ! nonlinear qc are still assimilated. Their weight - ! relative to other observations is reduced. Changing - ! wgtlim does not alter the analysis, only - ! the nonlinear qc data "count" - -! Constants describing the Extended Best-Track Reanalysis [Demuth et -! al., 2008] tropical cyclone (TC) distance for regions relative to TC -! track position; units are in kilometers - - parameter (rmw_mean_distance = 64.5479412) - parameter (roic_mean_distance = 338.319656) - -contains - subroutine init_constants_derived -!$$$ subprogram documentation block -! . . . . -! subprogram: init_constants_derived set derived constants -! prgmmr: treadon org: np23 date: 2004-12-02 -! -! abstract: This routine sets derived constants -! -! program history log: -! 2004-12-02 treadon -! 2005-03-03 treadon - add implicit none -! -! input argument list: -! -! output argument list: -! -! attributes: -! language: f90 -! machine: ibm rs/6000 sp -! -!$$$ - implicit none - -! Trigonometric constants - pi = acos(-one) - deg2rad = pi/180.0_r_kind - rad2deg = one/deg2rad - cg_term = (sqrt(two*pi))/two ! constant for variational qc - tiny_r_kind = tiny(zero) - huge_r_kind = huge(zero) - tiny_single = tiny(zero_single) - huge_single = huge(zero_single) - huge_i_kind = huge(izero) - -! Geophysical parameters used in conversion of geopotential to -! geometric height - eccentricity_linear = sqrt(semi_major_axis**2 - semi_minor_axis**2) - eccentricity = eccentricity_linear / semi_major_axis - constants_initialized = .true. - - return - end subroutine init_constants_derived - - subroutine init_constants(regional) -!$$$ subprogram documentation block -! . . . . -! subprogram: init_constants set regional or global constants -! prgmmr: treadon org: np23 date: 2004-03-02 -! -! abstract: This routine sets constants specific to regional or global -! applications of the gsi -! -! program history log: -! 2004-03-02 treadon -! 2004-06-16 treadon, documentation -! 2004-10-28 treadon - use intrinsic TINY function to set value -! for smallest machine representable positive -! number -! 2004-12-03 treadon - move derived constants to init_constants_derived -! 2005-03-03 treadon - add implicit none -! -! input argument list: -! regional - if .true., set regional gsi constants; -! otherwise (.false.), use global constants -! -! output argument list: -! -! attributes: -! language: f90 -! machine: ibm rs/6000 sp -! -!$$$ - implicit none - logical regional - real(r_kind) reradius,g,r_d,r_v,cliq_wrf - - gamma = 0.0065 - -! Define regional constants here - if (regional) then - -! Name given to WRF constants - reradius = one/6370.e03_r_kind - g = 9.81_r_kind - r_d = 287.04_r_kind - r_v = 461.6_r_kind - cliq_wrf = 4190.0_r_kind - cp_mass = 1004.67_r_kind - -! Transfer WRF constants into unified GSI constants - rearth = one/reradius - grav = g - rd = r_d - rv = r_v - cv = cp-r_d - cliq = cliq_wrf - rd_over_cp_mass = rd / cp_mass - -! Define global constants here - else - rearth = 6.3712e+6_r_kind - grav = 9.80665e+0_r_kind - rd = 2.8705e+2_r_kind - rv = 4.6150e+2_r_kind - cv = 7.1760e+2_r_kind - cliq = 4.1855e+3_r_kind - cp_mass= zero - rd_over_cp_mass = zero - endif - - -! Now define derived constants which depend on constants -! which differ between global and regional applications. - -! Constants related to ozone assimilation - ozcon = grav*21.4e-9_r_kind - rozcon= one/ozcon - -! Constant used in vertical integral for precipitable water - tpwcon = 100.0_r_kind/grav - -! Derived atmospheric constants - fv = rv/rd-one ! used in virtual temperature equation - dldt = cvap-cliq - xa = -(dldt/rv) - xai = -(dldti/rv) - xb = xa+hvap/(rv*ttp) - xbi = xai+hsub/(rv*ttp) - eps = rd/rv - epsm1 = rd/rv-one - omeps = one-eps - factor1 = (cvap-cliq)/rv - factor2 = hvap/rv-factor1*t0c - cpr = cp*rd - el2orc = hvap*hvap/(rv*cp) - rd_over_g = rd/grav - rd_over_cp = rd/cp - g_over_rd = grav/rd - - return - end subroutine init_constants - -end module constants diff --git a/sorc/fv3nc2nemsio.fd/fv3_main.f90 b/sorc/fv3nc2nemsio.fd/fv3_main.f90 deleted file mode 100644 index 39ca00a78f..0000000000 --- a/sorc/fv3nc2nemsio.fd/fv3_main.f90 +++ /dev/null @@ -1,215 +0,0 @@ -program fv3_main - use fv3_module - use netcdf - use nemsio_module - implicit none - - type(nemsio_gfile) :: gfile - type(nemsio_meta) :: meta_nemsio - integer,parameter :: nvar2d=48 - character(nemsio_charkind) :: name2d(nvar2d) - integer :: nvar3d - character(nemsio_charkind), allocatable :: name3din(:), name3dout(:) - character(nemsio_charkind) :: varname,levtype - character(len=300) :: inpath,outpath - character(len=100) :: infile2d,infile3d,outfile - character(len=10) :: analdate, cfhour - character(len=5) :: cfhr,cfhzh - character(len=2) :: nhcase - real , allocatable :: lons(:),lats(:),tmp2d(:,:), tmp2dx(:,:) - real*8,allocatable :: tmp1d(:),tmp1dx(:),fhours(:) - real*4 :: fhour - integer :: fhzh, nhcas - - integer :: ii,i,j,k,ncid2d,ncid3d,ifhr,nlevs,nlons,nlats,ntimes,nargs,iargc,YYYY,MM,DD,HH,stat,varid - - data name2d /'ALBDOsfc','CPRATsfc','PRATEsfc','DLWRFsfc','ULWRFsfc','DSWRFsfc','USWRFsfc','DSWRFtoa','USWRFtoa',& - 'ULWRFtoa','GFLUXsfc','HGTsfc','HPBLsfc',& - 'ICECsfc','SLMSKsfc','LHTFLsfc','SHTFLsfc','PRESsfc','PWATclm','SOILM','SOILW1','SOILW2','SOILW3','SOILW4','SPFH2m',& - 'SOILT1','SOILT2','SOILT3','SOILT4','TMP2m','TMPsfc','UGWDsfc','VGWDsfc','UFLXsfc','VFLXsfc','UGRD10m','VGRD10m',& - 'WEASDsfc','SNODsfc','ZORLsfc','VFRACsfc','F10Msfc','VTYPEsfc','STYPEsfc',& - 'TCDCclm', 'TCDChcl', 'TCDCmcl', 'TCDClcl'/ - - !===================================================================== - - ! read in from command line - nargs=iargc() - IF (nargs .NE. 10) THEN - print*,'usage fv3_interface analdate ifhr fhzh fhour inpath infile2d infile3d outpath,outfile,nhcase' - STOP 1 - ENDIF - call getarg(1,analdate) - call getarg(2,cfhr) - call getarg(3,cfhzh) - call getarg(4,cfhour) - call getarg(5,inpath) - call getarg(6,infile2d) - call getarg(7,infile3d) - call getarg(8,outpath) - call getarg(9,outfile) - call getarg(10,nhcase) -! print*,analdate,cfhr,cfhzh,cfhour,inpath,infile2d,infile3d,outpath,outfile,nhcase - - read(nhcase,'(i2.1)') nhcas - read(cfhr,'(i5.1)') ifhr - read(cfhzh,'(i5.1)') fhzh - read(cfhour,*) fhour - read(analdate(1:4),'(i4)') YYYY - read(analdate(5:6),'(i2)') MM - read(analdate(7:8),'(i2)') DD - read(analdate(9:10),'(i2)') HH - print*,"ifhr,fhzh,fhour,analdate ",ifhr,fhzh,fhour,analdate - - if (nhcas == 0 ) then !non-hydrostatic case - nvar3d=9 - allocate (name3din(nvar3d), name3dout(nvar3d)) - name3din=(/'ucomp','vcomp','temp','sphum','o3mr','nhpres','w','clwmr','delp'/) - name3dout=(/'ugrd','vgrd','tmp','spfh','o3mr','pres','vvel','clwmr','dpres'/) - else - nvar3d=8 - allocate (name3din(nvar3d), name3dout(nvar3d)) - name3din=(/'ucomp','vcomp','temp','sphum','o3mr','hypres','clwmr','delp'/) - name3dout=(/'ugrd','vgrd','tmp','spfh','o3mr','pres','clwmr','dpres'/) - endif - - ! open netcdf files - print*,'reading',trim(inpath)//'/'//trim(infile2d) - stat = nf90_open(trim(inpath)//'/'//trim(infile2d),NF90_NOWRITE, ncid2d) - if (stat .NE.0) print*,stat - print*,'reading',trim(inpath)//'/'//trim(infile3d) - stat = nf90_open(trim(inpath)//'/'//trim(infile3d),NF90_NOWRITE, ncid3d) - if (stat .NE.0) print*,stat - ! get dimesions - - stat = nf90_inq_dimid(ncid2d,'time',varid) - if (stat .NE.0) print*,stat,varid - if (stat .NE. 0) STOP 1 - stat = nf90_inquire_dimension(ncid2d,varid,len=ntimes) - if (stat .NE.0) print*,stat,ntimes - if (stat .NE. 0) STOP 1 - allocate(fhours(ntimes)) - stat = nf90_inq_varid(ncid2d,'time',varid) - if (stat .NE. 0) STOP 1 - stat = nf90_get_var(ncid2d,varid,fhours) - if (stat .NE.0) print*,stat,fhours - if (stat .NE. 0) STOP 1 - - stat = nf90_inq_dimid(ncid3d,'grid_xt',varid) - if (stat .NE.0) print*,stat,varid - if (stat .NE. 0) STOP 1 - stat = nf90_inquire_dimension(ncid3d,varid,len=nlons) - if (stat .NE.0) print*,stat,nlons - if (stat .NE. 0) STOP 1 - allocate(lons(nlons)) - allocate(tmp1d(nlons)) - stat = nf90_inq_varid(ncid3d,'grid_xt',varid) - if (stat .NE. 0) STOP 1 - stat = nf90_get_var(ncid3d,varid,tmp1d) - if (stat .NE.0) print*,stat - if (stat .NE. 0) STOP 1 - - lons=real(tmp1d,kind=4) - !print*,lons(1),lons(3072) - deallocate(tmp1d) - - stat = nf90_inq_dimid(ncid3d,'grid_yt',varid) - if (stat .NE.0) print*,stat - if (stat .NE. 0) STOP 1 - stat = nf90_inquire_dimension(ncid3d,varid,len=nlats) - if (stat .NE.0) print*,stat - if (stat .NE. 0) STOP 1 - allocate(lats(nlats)) - allocate(tmp1d(nlats)) - allocate(tmp1dx(nlats)) - stat = nf90_inq_varid(ncid3d,'grid_yt',varid) - stat = nf90_get_var(ncid3d,varid,tmp1dx,start=(/1/),count=(/nlats/)) - if (stat .NE.0) print*,stat - if (stat .NE. 0) STOP 1 - do j=1,nlats - tmp1d(j)=tmp1dx(nlats-j+1) - enddo - lats=real(tmp1d,kind=4) - print*,"lats_beg, lats_end",lats(1),lats(nlats) - deallocate(tmp1d, tmp1dx) - - stat = nf90_inq_dimid(ncid3d,'pfull',varid) - if (stat .NE.0) print*,stat - if (stat .NE. 0) STOP 1 - stat = nf90_inquire_dimension(ncid3d,varid,len=nlevs) - if (stat .NE.0) print*,stat - if (stat .NE. 0) STOP 1 - - call define_nemsio_meta(meta_nemsio,nlons,nlats,nlevs,nvar2d,nvar3d,lons,lats) - - allocate (tmp2d(nlons,nlats)) - allocate (tmp2dx(nlons,nlats)) - - meta_nemsio%idate(1)=YYYY - meta_nemsio%idate(2)=MM - meta_nemsio%idate(3)=DD - meta_nemsio%idate(4)=HH - - meta_nemsio%varrval(1)=float(fhzh) -! if (ifhr.EQ.0) then -! meta_nemsio%varrval(1)=0.0 -! else -! meta_nemsio%varrval(1)=(ifhr-1.0)*6.0 -! endif - - ! read in data - meta_nemsio%nfhour= fhours(ifhr) - meta_nemsio%fhour= fhours(ifhr) - print*,fhours(ifhr),ifhr,'calling netcdf read' -!--for ifhr=1, fhours=dt but fhour=00 if diag is determined by FHOUT - if (fhour .ne. fhours(ifhr) .and. ifhr.gt.1 )then - print*, 'requested ',fhour, ' not equal to fhours(ifhr) ', fhours(ifhr) - print*, 'abort ! ' - stop 1 - endif - - call nems_write_init(outpath,outfile,meta_nemsio,gfile) -! read in all of the 2d variables and write out - print*,'calling write',meta_nemsio%rlat_min,meta_nemsio%rlat_max - print*,'lats',minval(meta_nemsio%lat),maxval(meta_nemsio%lat) - print *,'loop over 2d variables' - DO i=1,nvar2d - print *,i,trim(name2d(i)) - call fv3_netcdf_read_2d(ncid2d,ifhr,meta_nemsio,name2d(i),tmp2dx) - do ii=1,nlons - do j=1,nlats - tmp2d(ii,j)=tmp2dx(ii,nlats-j+1) - enddo - enddo - call nems_write(gfile,meta_nemsio%recname(i),meta_nemsio%reclevtyp(i),meta_nemsio%reclev(i), & - nlons*nlats,tmp2d,stat) - ENDDO - levtype='mid layer' -! loop through 3d fields - print *,'loop over 3d variables' - DO i=1,nvar3d - print*,i,trim(name3din(i)) - DO k=1,nlevs -! print*,k - call fv3_netcdf_read_3d(ncid3d,ifhr,meta_nemsio,name3din(i),k,tmp2dx) - do ii=1,nlons - do j=1,nlats - tmp2d(ii,j)=tmp2dx(ii,nlats-j+1) - enddo - enddo - call nems_write(gfile,name3dout(i),levtype,nlevs-k+1,nlons*nlats,tmp2d(:,:),stat) - IF (stat .NE. 0) then - print*,'error writing ,named3dout(i)',stat - STOP 1 - ENDIF - ENDDO - ENDDO - - call nemsio_close(gfile,iret=stat) - stat = nf90_close(ncid2d) - stat = nf90_close(ncid3d) - - deallocate(tmp2dx,tmp2d) - deallocate(name3din,name3dout) - - stop -end program fv3_main diff --git a/sorc/fv3nc2nemsio.fd/fv3_module.f90 b/sorc/fv3nc2nemsio.fd/fv3_module.f90 deleted file mode 100644 index 8d161acfcf..0000000000 --- a/sorc/fv3nc2nemsio.fd/fv3_module.f90 +++ /dev/null @@ -1,372 +0,0 @@ -module fv3_module - - - !======================================================================= - - ! Define associated modules and subroutines - - !----------------------------------------------------------------------- - use netcdf - use constants - use kinds - use nemsio_module - - type nemsio_meta - character(nemsio_charkind), dimension(:), allocatable :: recname - character(nemsio_charkind), dimension(:), allocatable :: reclevtyp - character(16), dimension(:), allocatable :: variname - character(16), dimension(:), allocatable :: varrname - character(16), dimension(:), allocatable :: varr8name - character(16), dimension(:), allocatable :: aryiname - character(16), dimension(:), allocatable :: aryr8name - character(nemsio_charkind8) :: gdatatype - character(nemsio_charkind8) :: modelname - real(nemsio_realkind) :: rlon_min - real(nemsio_realkind) :: rlon_max - real(nemsio_realkind) :: rlat_min - real(nemsio_realkind) :: rlat_max - real(nemsio_realkind), dimension(:), allocatable :: lon - real(nemsio_realkind), dimension(:), allocatable :: lat - real(nemsio_realkind), dimension(:), allocatable :: varrval - integer(nemsio_intkind), dimension(:,:), allocatable :: aryival - integer(nemsio_intkind), dimension(:), allocatable :: reclev - integer(nemsio_intkind), dimension(:), allocatable :: varival - integer(nemsio_intkind), dimension(:), allocatable :: aryilen - integer(nemsio_intkind), dimension(:), allocatable :: aryr8len - integer(nemsio_intkind) :: idate(7) - integer(nemsio_intkind) :: version - integer(nemsio_intkind) :: nreo_vc - integer(nemsio_intkind) :: nrec - integer(nemsio_intkind) :: nmeta - integer(nemsio_intkind) :: nmetavari - integer(nemsio_intkind) :: nmetaaryi - integer(nemsio_intkind) :: nmetavarr - integer(nemsio_intkind) :: nfhour - integer(nemsio_intkind) :: nfminute - integer(nemsio_intkind) :: nfsecondn - integer(nemsio_intkind) :: nfsecondd - integer(nemsio_intkind) :: dimx - integer(nemsio_intkind) :: dimy - integer(nemsio_intkind) :: dimz - integer(nemsio_intkind) :: nframe - integer(nemsio_intkind) :: nsoil - integer(nemsio_intkind) :: ntrac - integer(nemsio_intkind) :: ncldt - integer(nemsio_intkind) :: idvc - integer(nemsio_intkind) :: idsl - integer(nemsio_intkind) :: idvm - integer(nemsio_intkind) :: idrt - integer(nemsio_intkind) :: fhour - - end type nemsio_meta ! type nemsio_meta - contains -!----------------------------------------------------------------------- - subroutine fv3_netcdf_read_2d(ncid2d,ifhr,meta_nemsio,varname,data2d) - - implicit none - type(nemsio_meta) :: meta_nemsio - integer :: ncid2d - integer :: ifhr,varid,stat - real :: data2d(meta_nemsio%dimx,meta_nemsio%dimy) - character(nemsio_charkind) :: varname - - ! loop through 2d data - stat = nf90_inq_varid(ncid2d,trim(varname),varid) - !print*,stat,varid,trim(varname) - stat = nf90_get_var(ncid2d,varid,data2d,start=(/1,1,ifhr/),count=(/meta_nemsio%dimx,meta_nemsio%dimy,1/)) - IF (stat .NE. 0 ) THEN - print*,'error reading ',varname - STOP - ENDIF - -end subroutine fv3_netcdf_read_2d -!----------------------------------------------------------------------- - - subroutine fv3_netcdf_read_3d(ncid3d,ifhr,meta_nemsio,varname,k,data2d) - - implicit none - - type(nemsio_meta) :: meta_nemsio - integer :: ncid3d - integer :: k - integer :: ifhr,varid,stat - character(nemsio_charkind) :: varname - !real :: data3d(meta_nemsio%dimx,meta_nemsio%dimy,meta_nemsio%dimz) - real :: data2d(meta_nemsio%dimx,meta_nemsio%dimy) - - - stat = nf90_inq_varid(ncid3d,trim(varname),varid) - !print*,stat,varname,varid - !stat = nf90_get_var(ncid3d,varid,data3d,start=(/1,1,1,ifhr/),count=(/meta_nemsio%dimx,meta_nemsio%dimy,meta_nemsio%dimz,1/)) - stat = nf90_get_var(ncid3d,varid,data2d,start=(/1,1,k,ifhr/),count=(/meta_nemsio%dimx,meta_nemsio%dimy,1,1/)) - - IF (stat .NE. 0 ) THEN - print*,'error reading ',varname - STOP - ENDIF - -end subroutine fv3_netcdf_read_3d -!----------------------------------------------------------------------- - - subroutine define_nemsio_meta(meta_nemsio,nlons,nlats,nlevs,nvar2d,nvar3d,lons,lats) - implicit none - type(nemsio_meta) :: meta_nemsio - integer :: nlons,nlats,nlevs,i,j,k,nvar2d,nvar3d - integer*8 :: ct - real :: lons(nlons),lats(nlats) -! local - - meta_nemsio%idate(1:6) = 0 - meta_nemsio%idate(7) = 1 - meta_nemsio%modelname = 'GFS' - meta_nemsio%version = 198410 - meta_nemsio%nrec = nvar2d + nlevs*nvar3d - meta_nemsio%nmeta = 8 - meta_nemsio%nmetavari = 3 - meta_nemsio%nmetavarr = 1 - meta_nemsio%nmetaaryi = 1 - meta_nemsio%dimx = nlons - meta_nemsio%dimy = nlats - meta_nemsio%dimz = nlevs - meta_nemsio%rlon_min = minval(lons) - meta_nemsio%rlon_max = maxval(lons) - meta_nemsio%rlat_min = minval(lats) - meta_nemsio%rlat_max = maxval(lats) - meta_nemsio%nsoil = 4 - meta_nemsio%nframe = 0 - meta_nemsio%nfminute = 0 - meta_nemsio%nfsecondn = 0 - meta_nemsio%nfsecondd = 1 - meta_nemsio%ntrac = 3 - meta_nemsio%idrt = 0 - meta_nemsio%ncldt = 3 - meta_nemsio%idvc = 2 - - - allocate(meta_nemsio%recname(meta_nemsio%nrec)) - allocate(meta_nemsio%reclevtyp(meta_nemsio%nrec)) - allocate(meta_nemsio%reclev(meta_nemsio%nrec)) - allocate(meta_nemsio%variname(meta_nemsio%nmetavari)) - allocate(meta_nemsio%varival(meta_nemsio%nmetavari)) - allocate(meta_nemsio%aryiname(meta_nemsio%nmetavari)) - allocate(meta_nemsio%aryilen(meta_nemsio%nmetavari)) - allocate(meta_nemsio%varrname(meta_nemsio%nmetavarr)) - allocate(meta_nemsio%varrval(meta_nemsio%nmetavarr)) - allocate(meta_nemsio%lon(nlons*nlats)) - allocate(meta_nemsio%lat(nlons*nlats)) - - meta_nemsio%varrname(1)='zhour' - meta_nemsio%variname(1)='cu_physics' - meta_nemsio%varival(1)=4 - meta_nemsio%variname(2)='mp_physics' - meta_nemsio%varival(2)=1000 - meta_nemsio%variname(3)='IVEGSRC' - meta_nemsio%varival(3)=2 - ct=1 - DO j=1,nlats - DO i=1,nlons - meta_nemsio%lon(ct) = lons(i) - meta_nemsio%lat(ct) = lats(j) - ct=ct+1 - ENDDO - ENDDO - - meta_nemsio%aryilen(1) = nlats/2 - meta_nemsio%aryiname(1) = 'lpl' - meta_nemsio%reclev(:)=1 - meta_nemsio%recname(1) = 'albdo_ave' - meta_nemsio%reclevtyp(1) = 'sfc' - meta_nemsio%recname(2) = 'cprat_ave' - meta_nemsio%reclevtyp(2) = 'sfc' - meta_nemsio%recname(3) = 'prate_ave' - meta_nemsio%reclevtyp(3) = 'sfc' - meta_nemsio%recname(4) = 'dlwrf_ave' - meta_nemsio%reclevtyp(4) = 'sfc' - meta_nemsio%recname(5) = 'ulwrf_ave' - meta_nemsio%reclevtyp(5) = 'sfc' - meta_nemsio%recname(6) = 'dswrf_ave' - meta_nemsio%reclevtyp(6) = 'sfc' - meta_nemsio%recname(7) = 'uswrf_ave' - meta_nemsio%reclevtyp(7) = 'sfc' - meta_nemsio%recname(8) = 'dswrf_ave' - meta_nemsio%reclevtyp(8) = 'nom. top' - meta_nemsio%recname(9) = 'uswrf_ave' - meta_nemsio%reclevtyp(9) = 'nom. top' - meta_nemsio%recname(10) = 'ulwrf_ave' - meta_nemsio%reclevtyp(10) = 'nom. top' - meta_nemsio%recname(11) = 'gflux_ave' - meta_nemsio%reclevtyp(11) = 'sfc' - meta_nemsio%recname(12) = 'hgt' - meta_nemsio%reclevtyp(12) = 'sfc' - meta_nemsio%recname(13) = 'hpbl' - meta_nemsio%reclevtyp(13) = 'sfc' - meta_nemsio%recname(14) = 'icec' - meta_nemsio%reclevtyp(14) = 'sfc' - meta_nemsio%recname(15) = 'land' - meta_nemsio%reclevtyp(15) = 'sfc' - meta_nemsio%recname(16) = 'lhtfl_ave' - meta_nemsio%reclevtyp(16) = 'sfc' - meta_nemsio%recname(17) = 'shtfl_ave' - meta_nemsio%reclevtyp(17) = 'sfc' - meta_nemsio%recname(18) = 'pres' - meta_nemsio%reclevtyp(18) = 'sfc' - meta_nemsio%recname(19) = 'pwat' - meta_nemsio%reclevtyp(19) = 'atmos col' - meta_nemsio%recname(20) = 'soilm' - meta_nemsio%reclevtyp(20) = '0-200 cm down' - meta_nemsio%recname(21) = 'soilw' - meta_nemsio%reclevtyp(21) = '0-10 cm down' - meta_nemsio%recname(22) = 'soilw' - meta_nemsio%reclevtyp(22) = '10-40 cm down' - meta_nemsio%recname(23) = 'soilw' - meta_nemsio%reclevtyp(23) = '40-100 cm down' - meta_nemsio%recname(24) = 'soilw' - meta_nemsio%reclevtyp(24) = '100-200 cm down' - meta_nemsio%recname(25) = 'spfh' - meta_nemsio%reclevtyp(25) = '2 m above gnd' - meta_nemsio%recname(26) = 'tmp' - meta_nemsio%reclevtyp(26) = '0-10 cm down' - meta_nemsio%recname(27) = 'tmp' - meta_nemsio%reclevtyp(27) = '10-40 cm down' - meta_nemsio%recname(28) = 'tmp' - meta_nemsio%reclevtyp(28) = '40-100 cm down' - meta_nemsio%recname(29) = 'tmp' - meta_nemsio%reclevtyp(29) = '100-200 cm down' - meta_nemsio%recname(30) = 'tmp' - meta_nemsio%reclevtyp(30) = '2 m above gnd' - meta_nemsio%recname(31) = 'tmp' - meta_nemsio%reclevtyp(31) = 'sfc' - meta_nemsio%recname(32) = 'ugwd' - meta_nemsio%reclevtyp(32) = 'sfc' - meta_nemsio%recname(33) = 'vgwd' - meta_nemsio%reclevtyp(33) = 'sfc' - meta_nemsio%recname(34) = 'uflx_ave' - meta_nemsio%reclevtyp(34) = 'sfc' - meta_nemsio%recname(35) = 'vflx_ave' - meta_nemsio%reclevtyp(35) = 'sfc' - meta_nemsio%recname(36) = 'ugrd' - meta_nemsio%reclevtyp(36) = '10 m above gnd' - meta_nemsio%recname(37) = 'vgrd' - meta_nemsio%reclevtyp(37) = '10 m above gnd' - meta_nemsio%recname(38) = 'weasd' - meta_nemsio%reclevtyp(38) = 'sfc' - meta_nemsio%recname(39) = 'snod' - meta_nemsio%reclevtyp(39) = 'sfc' - meta_nemsio%recname(40) = 'zorl' - meta_nemsio%reclevtyp(40) = 'sfc' - meta_nemsio%recname(41) = 'vfrac' - meta_nemsio%reclevtyp(41) = 'sfc' - meta_nemsio%recname(42) = 'f10m' - meta_nemsio%reclevtyp(42) = 'sfc' - meta_nemsio%recname(43) = 'vtype' - meta_nemsio%reclevtyp(43) = 'sfc' - meta_nemsio%recname(44) = 'stype' - meta_nemsio%reclevtyp(44) = 'sfc' - meta_nemsio%recname(45) = 'tcdc_ave' - meta_nemsio%reclevtyp(45) = 'atmos col' - meta_nemsio%recname(46) = 'tcdc_ave' - meta_nemsio%reclevtyp(46) = 'high cld lay' - meta_nemsio%recname(47) = 'tcdc_ave' - meta_nemsio%reclevtyp(47) = 'mid cld lay' - meta_nemsio%recname(48) = 'tcdc_ave' - meta_nemsio%reclevtyp(48) = 'low cld lay' -! loop through 3d variables - DO k = 1, nlevs - meta_nemsio%recname(k+nvar2d) = 'ugrd' - meta_nemsio%reclevtyp(k+nvar2d) = 'mid layer' - meta_nemsio%reclev(k+nvar2d) = k - meta_nemsio%recname(k+nvar2d+nlevs) = 'vgrd' - meta_nemsio%reclevtyp(k+nvar2d+nlevs) = 'mid layer' - meta_nemsio%reclev(k+nvar2d+nlevs) = k - meta_nemsio%recname(k+nvar2d+nlevs*2) = 'tmp' - meta_nemsio%reclevtyp(k+nvar2d+nlevs*2) = 'mid layer' - meta_nemsio%reclev(k+nvar2d+nlevs*2) = k - meta_nemsio%recname(k+nvar2d+nlevs*3) = 'spfh' - meta_nemsio%reclevtyp(k+nvar2d+nlevs*3) = 'mid layer' - meta_nemsio%reclev(k+nvar2d+nlevs*3) = k - meta_nemsio%recname(k+nvar2d+nlevs*4) = 'o3mr' - meta_nemsio%reclevtyp(k+nvar2d+nlevs*4) = 'mid layer' - meta_nemsio%reclev(k+nvar2d+nlevs*4) = k - meta_nemsio%recname(k+nvar2d+nlevs*5) = 'pres' - meta_nemsio%reclevtyp(k+nvar2d+nlevs*5) = 'mid layer' - meta_nemsio%reclev(k+nvar2d+nlevs*5) = k - meta_nemsio%recname(k+nvar2d+nlevs*6) = 'clwmr' - meta_nemsio%reclevtyp(k+nvar2d+nlevs*6) = 'mid layer' - meta_nemsio%reclev(k+nvar2d+nlevs*6) = k - meta_nemsio%recname(k+nvar2d+nlevs*7) = 'dpres' - meta_nemsio%reclevtyp(k+nvar2d+nlevs*7) = 'mid layer' - meta_nemsio%reclev(k+nvar2d+nlevs*7) = k - if (nvar3d == 9) then - meta_nemsio%recname(k+nvar2d+nlevs*8) = 'vvel' - meta_nemsio%reclevtyp(k+nvar2d+nlevs*8) = 'mid layer' - meta_nemsio%reclev(k+nvar2d+nlevs*8) = k - endif - ENDDO - - end subroutine define_nemsio_meta - - subroutine nems_write_init(datapath,filename_base,meta_nemsio,gfile) - - - implicit none - - type(nemsio_meta) :: meta_nemsio - character(len=200) :: datapath - character(len=100) :: filename_base - character(len=400) :: filename - type(nemsio_gfile) :: gfile - integer :: nemsio_iret - integer :: i, j, k - - write(filename,500) trim(datapath)//'/'//trim(filename_base) -500 format(a,i3.3) - print*,trim(filename) - call nemsio_init(iret=nemsio_iret) - print*,'iret=',nemsio_iret - !gfile%gtype = 'NEMSIO' - meta_nemsio%gdatatype = 'bin4' - call nemsio_open(gfile,trim(filename),'write', & - & iret=nemsio_iret, & - & modelname=trim(meta_nemsio%modelname), & - & version=meta_nemsio%version,gdatatype=meta_nemsio%gdatatype, & - & dimx=meta_nemsio%dimx,dimy=meta_nemsio%dimy, & - & dimz=meta_nemsio%dimz,rlon_min=meta_nemsio%rlon_min, & - & rlon_max=meta_nemsio%rlon_max,rlat_min=meta_nemsio%rlat_min, & - & rlat_max=meta_nemsio%rlat_max, & - & lon=meta_nemsio%lon,lat=meta_nemsio%lat, & - & idate=meta_nemsio%idate,nrec=meta_nemsio%nrec, & - & nframe=meta_nemsio%nframe,idrt=meta_nemsio%idrt,ncldt= & - & meta_nemsio%ncldt,idvc=meta_nemsio%idvc, & - & nfhour=meta_nemsio%nfhour,nfminute=meta_nemsio%nfminute, & - & nfsecondn=meta_nemsio%nfsecondn,nmeta=meta_nemsio%nmeta, & - & nfsecondd=meta_nemsio%nfsecondd,extrameta=.true., & - & nmetaaryi=meta_nemsio%nmetaaryi,recname=meta_nemsio%recname, & - & nmetavari=meta_nemsio%nmetavari,variname=meta_nemsio%variname, & - & varival=meta_nemsio%varival,varrval=meta_nemsio%varrval, & - & nmetavarr=meta_nemsio%nmetavarr,varrname=meta_nemsio%varrname, & - & reclevtyp=meta_nemsio%reclevtyp, & - & reclev=meta_nemsio%reclev,aryiname=meta_nemsio%aryiname, & - & aryilen=meta_nemsio%aryilen) - print*,'iret=',nemsio_iret - end subroutine nems_write_init - - -!------------------------------------------------------ - subroutine nems_write(gfile,recname,reclevtyp,level,dimx,data2d,iret) - - implicit none - type(nemsio_gfile) :: gfile - integer :: iret,level,dimx - real :: data2d(dimx) - character(nemsio_charkind) :: recname, reclevtyp - - call nemsio_writerecv(gfile,recname,levtyp=reclevtyp,lev=level,data=data2d,iret=iret) - if (iret.NE.0) then - print*,'error writing',recname,level,iret - STOP - ENDIF - - end subroutine nems_write - - -end module fv3_module diff --git a/sorc/fv3nc2nemsio.fd/kinds.f90 b/sorc/fv3nc2nemsio.fd/kinds.f90 deleted file mode 100644 index b3378bfccf..0000000000 --- a/sorc/fv3nc2nemsio.fd/kinds.f90 +++ /dev/null @@ -1,107 +0,0 @@ -! this module was extracted from the GSI version operational -! at NCEP in Dec. 2007. -module kinds -!$$$ module documentation block -! . . . . -! module: kinds -! prgmmr: treadon org: np23 date: 2004-08-15 -! -! abstract: Module to hold specification kinds for variable declaration. -! This module is based on (copied from) Paul vanDelst's -! type_kinds module found in the community radiative transfer -! model -! -! module history log: -! 2004-08-15 treadon -! -! Subroutines Included: -! -! Functions Included: -! -! remarks: -! The numerical data types defined in this module are: -! i_byte - specification kind for byte (1-byte) integer variable -! i_short - specification kind for short (2-byte) integer variable -! i_long - specification kind for long (4-byte) integer variable -! i_llong - specification kind for double long (8-byte) integer variable -! r_single - specification kind for single precision (4-byte) real variable -! r_double - specification kind for double precision (8-byte) real variable -! r_quad - specification kind for quad precision (16-byte) real variable -! -! i_kind - generic specification kind for default integer -! r_kind - generic specification kind for default floating point -! -! -! attributes: -! language: f90 -! machine: ibm RS/6000 SP -! -!$$$ end documentation block - implicit none - private - -! Integer type definitions below - -! Integer types - integer, parameter, public :: i_byte = selected_int_kind(1) ! byte integer - integer, parameter, public :: i_short = selected_int_kind(4) ! short integer - integer, parameter, public :: i_long = selected_int_kind(8) ! long integer - integer, parameter, private :: llong_t = selected_int_kind(16) ! llong integer - integer, parameter, public :: i_llong = max( llong_t, i_long ) - -! Expected 8-bit byte sizes of the integer kinds - integer, parameter, public :: num_bytes_for_i_byte = 1 - integer, parameter, public :: num_bytes_for_i_short = 2 - integer, parameter, public :: num_bytes_for_i_long = 4 - integer, parameter, public :: num_bytes_for_i_llong = 8 - -! Define arrays for default definition - integer, parameter, private :: num_i_kinds = 4 - integer, parameter, dimension( num_i_kinds ), private :: integer_types = (/ & - i_byte, i_short, i_long, i_llong /) - integer, parameter, dimension( num_i_kinds ), private :: integer_byte_sizes = (/ & - num_bytes_for_i_byte, num_bytes_for_i_short, & - num_bytes_for_i_long, num_bytes_for_i_llong /) - -! Default values -! **** CHANGE THE FOLLOWING TO CHANGE THE DEFAULT INTEGER TYPE KIND *** - integer, parameter, private :: default_integer = 3 ! 1=byte, - ! 2=short, - ! 3=long, - ! 4=llong - integer, parameter, public :: i_kind = integer_types( default_integer ) - integer, parameter, public :: num_bytes_for_i_kind = & - integer_byte_sizes( default_integer ) - - -! Real definitions below - -! Real types - integer, parameter, public :: r_single = selected_real_kind(6) ! single precision - integer, parameter, public :: r_double = selected_real_kind(15) ! double precision - integer, parameter, private :: quad_t = selected_real_kind(20) ! quad precision - integer, parameter, public :: r_quad = max( quad_t, r_double ) - -! Expected 8-bit byte sizes of the real kinds - integer, parameter, public :: num_bytes_for_r_single = 4 - integer, parameter, public :: num_bytes_for_r_double = 8 - integer, parameter, public :: num_bytes_for_r_quad = 16 - -! Define arrays for default definition - integer, parameter, private :: num_r_kinds = 3 - integer, parameter, dimension( num_r_kinds ), private :: real_kinds = (/ & - r_single, r_double, r_quad /) - integer, parameter, dimension( num_r_kinds ), private :: real_byte_sizes = (/ & - num_bytes_for_r_single, num_bytes_for_r_double, & - num_bytes_for_r_quad /) - -! Default values -! **** CHANGE THE FOLLOWING TO CHANGE THE DEFAULT REAL TYPE KIND *** - integer, parameter, private :: default_real = 1 ! 1=single, - ! 2=double, - ! 3=quad - integer, parameter, public :: r_kind = real_kinds( default_real ) - integer, parameter, public :: num_bytes_for_r_kind = & - real_byte_sizes( default_real ) - -end module kinds diff --git a/sorc/fv3nc2nemsio.fd/makefile.sh b/sorc/fv3nc2nemsio.fd/makefile.sh deleted file mode 100755 index 94b9b253cc..0000000000 --- a/sorc/fv3nc2nemsio.fd/makefile.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/ksh -set -x - -machine=${1:-"cray"} - -source ../../modulefiles/module-setup.sh.inc -module use ../../modulefiles -module load modulefile.fv3nc2nemsio.$machine - -LIBnetcdf=`$NETCDF/bin/nf-config --flibs` -INCnetcdf=`$NETCDF/bin/nf-config --fflags` -export NETCDF_LDFLAGS=$LIBnetcdf -export NETCDF_INCLUDE=$INCnetcdf - - -$FCMP $FFLAGS -c kinds.f90 -$FCMP $FFLAGS -c constants.f90 -$FCMP $FFLAGS $NETCDF_INCLUDE -I $NEMSIO_INC -c fv3_module.f90 -$FCMP $FFLAGS $NETCDF_INCLUDE -I $NEMSIO_INC -I. -o fv3nc2nemsio.x fv3_main.f90 fv3_module.o $NETCDF_LDFLAGS $NEMSIO_LIB $BACIO_LIB4 $W3NCO_LIBd - -mv fv3nc2nemsio.x ../../exec/. -rm -f *.o *.mod - -exit 0 diff --git a/sorc/gaussian_sfcanl.fd/.gitignore b/sorc/gaussian_sfcanl.fd/.gitignore deleted file mode 100644 index 0a4391755c..0000000000 --- a/sorc/gaussian_sfcanl.fd/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.o -*.mod -*.exe diff --git a/sorc/gaussian_sfcanl.fd/Makefile b/sorc/gaussian_sfcanl.fd/Makefile deleted file mode 100755 index 69cd35f7ae..0000000000 --- a/sorc/gaussian_sfcanl.fd/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -SHELL= /bin/sh - -CMD= gaussian_sfcanl.exe - -OBJS = gaussian_sfcanl.o - -build: $(CMD) - -$(CMD): $(OBJS) - $(FCOMP) $(FFLAGS) -I$(NEMSIO_INC) $(NETCDF_INCLUDE) -o $(CMD) $(OBJS) $(NETCDF_LDFLAGS_F) $(NEMSIO_LIB) $(BACIO_LIB4) $(W3NCO_LIBd) $(SP_LIB4) - -gaussian_sfcanl.o: gaussian_sfcanl.f90 - $(FCOMP) $(FFLAGS) -I$(NEMSIO_INC) $(NETCDF_INCLUDE) -c gaussian_sfcanl.f90 - -install: - cp ${CMD} ../../exec - -clean: - rm -f *.o *.mod ${CMD} ../../exec/${CMD} - -test: - @echo NO TESTS YET diff --git a/sorc/gaussian_sfcanl.fd/gaussian_sfcanl.f90 b/sorc/gaussian_sfcanl.fd/gaussian_sfcanl.f90 deleted file mode 100644 index acce575cd7..0000000000 --- a/sorc/gaussian_sfcanl.fd/gaussian_sfcanl.f90 +++ /dev/null @@ -1,2093 +0,0 @@ -!------------------------------------------------------------------ -! -! Read in surface and nst data on the cubed-sphere grid, -! interpolate it to the gaussian grid, and output the result -! to a nemsio or netcdf file. To not process nst data, -! set flag 'donst' to 'no'. To process nst, set to 'yes'. -! To output gaussian file in netcdf, set netcdf_out=.true. -! Otherwise, nemsio format will be output. -! -! Input files: -! ------------ -! weights.nc Interpolation weights. netcdf format -! anal.tile[1-6].nc fv3 surface restart files -! orog.tile[1-6].nc fv3 orography files -! fort.41 namelist Configuration namelist -! vcoord.txt Vertical coordinate definition file -! (ascii) -! -! Output files: -! ------------- -! sfc.gaussian.analysis.file surface data on gaussian grid - -! nemsio or netcdf. -! -! Namelist variables: -! ------------------- -! yy/mm/dd/hh year/month/day/hour of data. -! i/jgaus i/j dimension of gaussian grid. -! donst When 'no' do not process nst data. -! When 'yes' process nst data. -! netcdf_out When 'true', output gaussian file in -! netcdf. Otherwise output nemsio format. -! -! 2018-Jan-30 Gayno Initial version -! 2019-Oct-30 Gayno Option to output gaussian analysis file -! in netcdf. -! -!------------------------------------------------------------------ - - module io - - use nemsio_module - - implicit none - - character(len=3) :: donst - - integer, parameter :: num_tiles = 6 - - integer :: itile, jtile, igaus, jgaus - - integer(nemsio_intkind) :: idate(8) - - type :: sfc_data -! surface variables - real, allocatable :: alvsf(:) - real, allocatable :: alvwf(:) - real, allocatable :: alnsf(:) - real, allocatable :: alnwf(:) - real, allocatable :: canopy(:) - real, allocatable :: facsf(:) - real, allocatable :: facwf(:) - real, allocatable :: ffhh(:) - real, allocatable :: ffmm(:) - real, allocatable :: fice(:) - real, allocatable :: f10m(:) - real, allocatable :: hice(:) - real, allocatable :: q2m(:) - real, allocatable :: orog(:) - real, allocatable :: sheleg(:) - real, allocatable :: slmask(:) - real, allocatable :: shdmax(:) - real, allocatable :: shdmin(:) - real, allocatable :: slope(:) - real, allocatable :: srflag(:) - real, allocatable :: snoalb(:) - real, allocatable :: snwdph(:) - real, allocatable :: stype(:) - real, allocatable :: t2m(:) - real, allocatable :: tprcp(:) - real, allocatable :: tisfc(:) - real, allocatable :: tsea(:) - real, allocatable :: tg3(:) - real, allocatable :: uustar(:) - real, allocatable :: vfrac(:) - real, allocatable :: vtype(:) - real, allocatable :: zorl(:) - real, allocatable :: slc(:,:) - real, allocatable :: smc(:,:) - real, allocatable :: stc(:,:) -! nst variables - real, allocatable :: c0(:) - real, allocatable :: cd(:) - real, allocatable :: dconv(:) - real, allocatable :: dtcool(:) - real, allocatable :: land(:) - real, allocatable :: qrain(:) - real, allocatable :: tref(:) - real, allocatable :: w0(:) - real, allocatable :: wd(:) - real, allocatable :: xs(:) - real, allocatable :: xt(:) - real, allocatable :: xtts(:) - real, allocatable :: xu(:) - real, allocatable :: xv(:) - real, allocatable :: xz(:) - real, allocatable :: xzts(:) - real, allocatable :: zc(:) - end type sfc_data - - type(sfc_data) :: tile_data, gaussian_data - - end module io - -!------------------------------------------------------------------------------ -! Main program -!------------------------------------------------------------------------------ - - program main - - use netcdf - use io - - implicit none - - character(len=12) :: weightfile - - integer :: i, error, ncid, id_ns, n_s - integer :: id_col, id_row, id_s, n - integer :: yy, mm, dd, hh - integer, allocatable :: col(:), row(:) - - logical :: netcdf_out - - real(kind=8), allocatable :: s(:) - - namelist /setup/ yy, mm, dd, hh, igaus, jgaus, donst, netcdf_out - - call w3tagb('GAUSSIAN_SFCANL',2018,0179,0055,'NP20') - - print*,"- BEGIN EXECUTION" - - netcdf_out = .true. - - donst = 'no' - - print* - print*,"- READ SETUP NAMELIST" - open(41, file="./fort.41") - read(41, nml=setup, iostat=error) - if (error /= 0) then - print*,"** FATAL ERROR READING NAMELIST. ISTAT IS: ", error - call errexit(56) - endif - close (41) - - idate = 0 - idate(1) = yy - idate(2) = mm - idate(3) = dd - idate(4) = hh - -!------------------------------------------------------------------------------ -! Read interpolation weight file. -!------------------------------------------------------------------------------ - - print* - print*,"- READ INTERPOLATION WEIGHT FILE" - - weightfile = "./weights.nc" - - error=nf90_open(trim(weightfile),nf90_nowrite,ncid) - call netcdf_err(error, 'OPENING weights.nc' ) - - error=nf90_inq_dimid(ncid, 'n_s', id_ns) - call netcdf_err(error, 'READING n_s id' ) - error=nf90_inquire_dimension(ncid,id_ns,len=n_s) - call netcdf_err(error, 'READING n_s' ) - - allocate(col(n_s)) - error=nf90_inq_varid(ncid, 'col', id_col) - call netcdf_err(error, 'READING col id' ) - error=nf90_get_var(ncid, id_col, col) - call netcdf_err(error, 'READING col' ) - - allocate(row(n_s)) - error=nf90_inq_varid(ncid, 'row', id_row) - call netcdf_err(error, 'READING row id' ) - error=nf90_get_var(ncid, id_row, row) - call netcdf_err(error, 'READING row' ) - - allocate(s(n_s)) - error=nf90_inq_varid(ncid, 'S', id_s) - call netcdf_err(error, 'READING s id' ) - error=nf90_get_var(ncid, id_s, s) - call netcdf_err(error, 'READING s' ) - - error = nf90_close(ncid) - -!------------------------------------------------------------------------------ -! Read the tiled analysis data. -!------------------------------------------------------------------------------ - - call read_data_anl - -!------------------------------------------------------------------------------ -! Interpolate tiled data to gaussian grid. -!------------------------------------------------------------------------------ - - allocate(gaussian_data%orog(igaus*jgaus)) ! sfc - allocate(gaussian_data%t2m(igaus*jgaus)) - allocate(gaussian_data%tisfc(igaus*jgaus)) - allocate(gaussian_data%q2m(igaus*jgaus)) - allocate(gaussian_data%stype(igaus*jgaus)) - allocate(gaussian_data%snwdph(igaus*jgaus)) - allocate(gaussian_data%slope(igaus*jgaus)) - allocate(gaussian_data%shdmax(igaus*jgaus)) - allocate(gaussian_data%shdmin(igaus*jgaus)) - allocate(gaussian_data%snoalb(igaus*jgaus)) - allocate(gaussian_data%slmask(igaus*jgaus)) - allocate(gaussian_data%tg3(igaus*jgaus)) - allocate(gaussian_data%alvsf(igaus*jgaus)) - allocate(gaussian_data%alvwf(igaus*jgaus)) - allocate(gaussian_data%alnsf(igaus*jgaus)) - allocate(gaussian_data%alnwf(igaus*jgaus)) - allocate(gaussian_data%facsf(igaus*jgaus)) - allocate(gaussian_data%facwf(igaus*jgaus)) - allocate(gaussian_data%ffhh(igaus*jgaus)) - allocate(gaussian_data%ffmm(igaus*jgaus)) - allocate(gaussian_data%sheleg(igaus*jgaus)) - allocate(gaussian_data%canopy(igaus*jgaus)) - allocate(gaussian_data%vfrac(igaus*jgaus)) - allocate(gaussian_data%vtype(igaus*jgaus)) - allocate(gaussian_data%zorl(igaus*jgaus)) - allocate(gaussian_data%tsea(igaus*jgaus)) - allocate(gaussian_data%f10m(igaus*jgaus)) - allocate(gaussian_data%tprcp(igaus*jgaus)) - allocate(gaussian_data%uustar(igaus*jgaus)) - allocate(gaussian_data%fice(igaus*jgaus)) - allocate(gaussian_data%hice(igaus*jgaus)) - allocate(gaussian_data%srflag(igaus*jgaus)) - allocate(gaussian_data%slc(igaus*jgaus,4)) - allocate(gaussian_data%smc(igaus*jgaus,4)) - allocate(gaussian_data%stc(igaus*jgaus,4)) - - if (trim(donst) == "yes" .or. trim(donst) == "YES") then - allocate(gaussian_data%c0(igaus*jgaus)) ! nst - allocate(gaussian_data%cd(igaus*jgaus)) - allocate(gaussian_data%dconv(igaus*jgaus)) - allocate(gaussian_data%dtcool(igaus*jgaus)) - allocate(gaussian_data%land(igaus*jgaus)) - allocate(gaussian_data%qrain(igaus*jgaus)) - allocate(gaussian_data%tref(igaus*jgaus)) - allocate(gaussian_data%w0(igaus*jgaus)) - allocate(gaussian_data%wd(igaus*jgaus)) - allocate(gaussian_data%xs(igaus*jgaus)) - allocate(gaussian_data%xt(igaus*jgaus)) - allocate(gaussian_data%xtts(igaus*jgaus)) - allocate(gaussian_data%xu(igaus*jgaus)) - allocate(gaussian_data%xv(igaus*jgaus)) - allocate(gaussian_data%xz(igaus*jgaus)) - allocate(gaussian_data%xzts(igaus*jgaus)) - allocate(gaussian_data%zc(igaus*jgaus)) - endif - - do i = 1, n_s - gaussian_data%orog(row(i)) = gaussian_data%orog(row(i)) + s(i)*tile_data%orog(col(i)) - gaussian_data%t2m(row(i)) = gaussian_data%t2m(row(i)) + s(i)*tile_data%t2m(col(i)) - gaussian_data%tisfc(row(i)) = gaussian_data%tisfc(row(i)) + s(i)*tile_data%tisfc(col(i)) - gaussian_data%q2m(row(i)) = gaussian_data%q2m(row(i)) + s(i)*tile_data%q2m(col(i)) - gaussian_data%stype(row(i)) = gaussian_data%stype(row(i)) + s(i)*tile_data%stype(col(i)) - gaussian_data%snwdph(row(i)) = gaussian_data%snwdph(row(i)) + s(i)*tile_data%snwdph(col(i)) - gaussian_data%slope(row(i)) = gaussian_data%slope(row(i)) + s(i)*tile_data%slope(col(i)) - gaussian_data%shdmax(row(i)) = gaussian_data%shdmax(row(i)) + s(i)*tile_data%shdmax(col(i)) - gaussian_data%shdmin(row(i)) = gaussian_data%shdmin(row(i)) + s(i)*tile_data%shdmin(col(i)) - gaussian_data%slmask(row(i)) = gaussian_data%slmask(row(i)) + s(i)*tile_data%slmask(col(i)) - gaussian_data%tg3(row(i)) = gaussian_data%tg3(row(i)) + s(i)*tile_data%tg3(col(i)) - gaussian_data%alvsf(row(i)) = gaussian_data%alvsf(row(i)) + s(i)*tile_data%alvsf(col(i)) - gaussian_data%alvwf(row(i)) = gaussian_data%alvwf(row(i)) + s(i)*tile_data%alvwf(col(i)) - gaussian_data%alnsf(row(i)) = gaussian_data%alnsf(row(i)) + s(i)*tile_data%alnsf(col(i)) - gaussian_data%alnwf(row(i)) = gaussian_data%alnwf(row(i)) + s(i)*tile_data%alnwf(col(i)) - gaussian_data%sheleg(row(i)) = gaussian_data%sheleg(row(i)) + s(i)*tile_data%sheleg(col(i)) - gaussian_data%canopy(row(i)) = gaussian_data%canopy(row(i)) + s(i)*tile_data%canopy(col(i)) - gaussian_data%vfrac(row(i)) = gaussian_data%vfrac(row(i)) + s(i)*tile_data%vfrac(col(i)) - gaussian_data%zorl(row(i)) = gaussian_data%zorl(row(i)) + s(i)*tile_data%zorl(col(i)) - gaussian_data%tsea(row(i)) = gaussian_data%tsea(row(i)) + s(i)*tile_data%tsea(col(i)) - gaussian_data%f10m(row(i)) = gaussian_data%f10m(row(i)) + s(i)*tile_data%f10m(col(i)) - gaussian_data%vtype(row(i)) = gaussian_data%vtype(row(i)) + s(i)*tile_data%vtype(col(i)) - gaussian_data%tprcp(row(i)) = gaussian_data%tprcp(row(i)) + s(i)*tile_data%tprcp(col(i)) - gaussian_data%facsf(row(i)) = gaussian_data%facsf(row(i)) + s(i)*tile_data%facsf(col(i)) - gaussian_data%facwf(row(i)) = gaussian_data%facwf(row(i)) + s(i)*tile_data%facwf(col(i)) - gaussian_data%ffhh(row(i)) = gaussian_data%ffhh(row(i)) + s(i)*tile_data%ffhh(col(i)) - gaussian_data%ffmm(row(i)) = gaussian_data%ffmm(row(i)) + s(i)*tile_data%ffmm(col(i)) - gaussian_data%uustar(row(i)) = gaussian_data%uustar(row(i)) + s(i)*tile_data%uustar(col(i)) - gaussian_data%fice(row(i)) = gaussian_data%fice(row(i)) + s(i)*tile_data%fice(col(i)) - gaussian_data%hice(row(i)) = gaussian_data%hice(row(i)) + s(i)*tile_data%hice(col(i)) - gaussian_data%snoalb(row(i)) = gaussian_data%snoalb(row(i)) + s(i)*tile_data%snoalb(col(i)) - gaussian_data%srflag(row(i)) = gaussian_data%srflag(row(i)) + s(i)*tile_data%srflag(col(i)) - if (trim(donst) == "yes" .or. trim(donst) == "YES") then - gaussian_data%c0(row(i)) = gaussian_data%c0(row(i)) + s(i)*tile_data%c0(col(i)) - gaussian_data%cd(row(i)) = gaussian_data%cd(row(i)) + s(i)*tile_data%cd(col(i)) - gaussian_data%dconv(row(i)) = gaussian_data%dconv(row(i)) + s(i)*tile_data%dconv(col(i)) - gaussian_data%dtcool(row(i)) = gaussian_data%dtcool(row(i)) + s(i)*tile_data%dtcool(col(i)) - gaussian_data%qrain(row(i)) = gaussian_data%qrain(row(i)) + s(i)*tile_data%qrain(col(i)) - gaussian_data%tref(row(i)) = gaussian_data%tref(row(i)) + s(i)*tile_data%tref(col(i)) - gaussian_data%w0(row(i)) = gaussian_data%w0(row(i)) + s(i)*tile_data%w0(col(i)) - gaussian_data%wd(row(i)) = gaussian_data%wd(row(i)) + s(i)*tile_data%wd(col(i)) - gaussian_data%xs(row(i)) = gaussian_data%xs(row(i)) + s(i)*tile_data%xs(col(i)) - gaussian_data%xt(row(i)) = gaussian_data%xt(row(i)) + s(i)*tile_data%xt(col(i)) - gaussian_data%xtts(row(i)) = gaussian_data%xtts(row(i)) + s(i)*tile_data%xtts(col(i)) - gaussian_data%xu(row(i)) = gaussian_data%xu(row(i)) + s(i)*tile_data%xu(col(i)) - gaussian_data%xv(row(i)) = gaussian_data%xv(row(i)) + s(i)*tile_data%xv(col(i)) - gaussian_data%xz(row(i)) = gaussian_data%xz(row(i)) + s(i)*tile_data%xz(col(i)) - gaussian_data%xzts(row(i)) = gaussian_data%xzts(row(i)) + s(i)*tile_data%xzts(col(i)) - gaussian_data%zc(row(i)) = gaussian_data%zc(row(i)) + s(i)*tile_data%zc(col(i)) - endif - do n = 1, 4 - gaussian_data%slc(row(i),n) = gaussian_data%slc(row(i),n) + s(i)*tile_data%slc(col(i),n) - gaussian_data%smc(row(i),n) = gaussian_data%smc(row(i),n) + s(i)*tile_data%smc(col(i),n) - gaussian_data%stc(row(i),n) = gaussian_data%stc(row(i),n) + s(i)*tile_data%stc(col(i),n) - enddo - enddo - - deallocate(col, row, s) - - deallocate(tile_data%orog) - deallocate(tile_data%t2m) - deallocate(tile_data%tisfc) - deallocate(tile_data%q2m) - deallocate(tile_data%stype) - deallocate(tile_data%snwdph) - deallocate(tile_data%slope) - deallocate(tile_data%shdmax) - deallocate(tile_data%shdmin) - deallocate(tile_data%snoalb) - deallocate(tile_data%slmask) - deallocate(tile_data%tg3) - deallocate(tile_data%alvsf) - deallocate(tile_data%alvwf) - deallocate(tile_data%alnsf) - deallocate(tile_data%alnwf) - deallocate(tile_data%facsf) - deallocate(tile_data%facwf) - deallocate(tile_data%ffhh) - deallocate(tile_data%ffmm) - deallocate(tile_data%sheleg) - deallocate(tile_data%canopy) - deallocate(tile_data%vfrac) - deallocate(tile_data%vtype) - deallocate(tile_data%zorl) - deallocate(tile_data%tsea) - deallocate(tile_data%f10m) - deallocate(tile_data%tprcp) - deallocate(tile_data%uustar) - deallocate(tile_data%fice) - deallocate(tile_data%hice) - deallocate(tile_data%srflag) - deallocate(tile_data%slc) - deallocate(tile_data%smc) - deallocate(tile_data%stc) - - if (trim(donst) == "yes" .or. trim(donst) == "YES") then - deallocate(tile_data%c0) - deallocate(tile_data%cd) - deallocate(tile_data%dconv) - deallocate(tile_data%dtcool) - deallocate(tile_data%qrain) - deallocate(tile_data%tref) - deallocate(tile_data%w0) - deallocate(tile_data%wd) - deallocate(tile_data%xs) - deallocate(tile_data%xt) - deallocate(tile_data%xtts) - deallocate(tile_data%xu) - deallocate(tile_data%xv) - deallocate(tile_data%xz) - deallocate(tile_data%xzts) - deallocate(tile_data%zc) - endif - -!------------------------------------------------------------------------------ -! Write gaussian data to either netcdf or nemsio file. -!------------------------------------------------------------------------------ - - if (netcdf_out) then - call write_sfc_data_netcdf - else - call write_sfc_data_nemsio - endif - - deallocate(gaussian_data%orog) - deallocate(gaussian_data%t2m) - deallocate(gaussian_data%tisfc) - deallocate(gaussian_data%q2m) - deallocate(gaussian_data%stype) - deallocate(gaussian_data%snwdph) - deallocate(gaussian_data%slope) - deallocate(gaussian_data%shdmax) - deallocate(gaussian_data%shdmin) - deallocate(gaussian_data%snoalb) - deallocate(gaussian_data%slmask) - deallocate(gaussian_data%tg3) - deallocate(gaussian_data%alvsf) - deallocate(gaussian_data%alvwf) - deallocate(gaussian_data%alnsf) - deallocate(gaussian_data%alnwf) - deallocate(gaussian_data%facsf) - deallocate(gaussian_data%facwf) - deallocate(gaussian_data%ffhh) - deallocate(gaussian_data%ffmm) - deallocate(gaussian_data%sheleg) - deallocate(gaussian_data%canopy) - deallocate(gaussian_data%vfrac) - deallocate(gaussian_data%vtype) - deallocate(gaussian_data%zorl) - deallocate(gaussian_data%tsea) - deallocate(gaussian_data%f10m) - deallocate(gaussian_data%tprcp) - deallocate(gaussian_data%uustar) - deallocate(gaussian_data%fice) - deallocate(gaussian_data%hice) - deallocate(gaussian_data%srflag) - deallocate(gaussian_data%slc) - deallocate(gaussian_data%smc) - deallocate(gaussian_data%stc) - - if (trim(donst) == "yes" .or. trim(donst) == "YES") then - deallocate(gaussian_data%c0) - deallocate(gaussian_data%cd) - deallocate(gaussian_data%dconv) - deallocate(gaussian_data%dtcool) - deallocate(gaussian_data%land) - deallocate(gaussian_data%qrain) - deallocate(gaussian_data%tref) - deallocate(gaussian_data%w0) - deallocate(gaussian_data%wd) - deallocate(gaussian_data%xs) - deallocate(gaussian_data%xt) - deallocate(gaussian_data%xtts) - deallocate(gaussian_data%xu) - deallocate(gaussian_data%xv) - deallocate(gaussian_data%xz) - deallocate(gaussian_data%xzts) - deallocate(gaussian_data%zc) - endif - - print* - print*,'- NORMAL TERMINATION' - - call w3tage('GAUSSIAN_SFCANL') - - end program main - -!------------------------------------------------------------------------------------------- -! Write gaussian surface data to netcdf file. -!------------------------------------------------------------------------------------------- - - subroutine write_sfc_data_netcdf - - use netcdf - use io - - implicit none - - character(len=50) :: outfile - character(len=31) :: date_string - character(len=4) :: year - character(len=2) :: mon, day, hour - - integer :: header_buffer_val = 16384 - integer :: i, error, ncid, dim_xt, dim_yt, dim_time - integer :: id_xt, id_yt, id_lon, id_lat, id_time - integer :: n - -! noah variables - integer, parameter :: num_noah=44 - character(len=30) :: noah_var(num_noah) - character(len=70) :: noah_name(num_noah) - character(len=30) :: noah_units(num_noah) - -! nst variables - integer, parameter :: num_nst=16 - character(len=30) :: nst_var(num_nst) - character(len=70) :: nst_name(num_nst) - character(len=30) :: nst_units(num_nst) - -! variables to be output - integer :: num_vars - character(len=30), allocatable :: var(:) - character(len=70), allocatable :: name(:) - character(len=30), allocatable :: units(:) - integer, allocatable :: id_var(:) - - real, parameter :: missing = 9.99e20 - - real(kind=4), allocatable :: dummy(:,:), slat(:), wlat(:) - -! define noah fields - - data noah_var /"alnsf", & - "alnwf", & - "alvsf", & - "alvwf", & - "cnwat", & - "crain",& - "f10m", & - "facsf", & - "facwf", & - "ffhh", & - "ffmm", & - "fricv", & - "icec", & - "icetk", & - "land", & - "orog", & - "sfcr", & - "shdmax", & - "shdmin", & - "sltyp", & - "snoalb", & - "snod", & - "soill1", & - "soill2", & - "soill3", & - "soill4", & - "soilt1", & - "soilt2", & - "soilt3", & - "soilt4", & - "soilw1", & - "soilw2", & - "soilw3", & - "soilw4", & - "sotyp", & - "spfh2m", & - "tg3" , & - "tisfc", & - "tmp2m", & - "tmpsfc", & - "tprcp", & - "veg", & - "vtype", & - "weasd" / - - data noah_name /"mean nir albedo with strong cosz dependency", & - "mean nir albedo with weak cosz dependency", & - "mean vis albedo with strong cosz dependency", & - "mean vis albedo with weak cosz dependency", & - "canopy water (cnwat in gfs data)" , & - "instantaneous categorical rain", & - "10-meter wind speed divided by lowest model wind speed", & - "fractional coverage with strong cosz dependency", & - "fractional coverage with weak cosz dependency", & - "fh parameter from PBL scheme" , & - "fm parameter from PBL scheme" , & - "uustar surface frictional wind", & - "surface ice concentration (ice=1; no ice=0)", & - "sea ice thickness (icetk in gfs_data)", & - "sea-land-ice mask (0-sea, 1-land, 2-ice)", & - "surface geopotential height", & - "surface roughness", & - "maximum fractional coverage of green vegetation", & - "minimum fractional coverage of green vegetation", & - "surface slope type" , & - "maximum snow albedo in fraction", & - "surface snow depth", & - "liquid soil moisture at layer-1", & - "liquid soil moisture at layer-2", & - "liquid soil moisture at layer-3", & - "liquid soil moisture at layer-4", & - "soil temperature 0-10cm", & - "soil temperature 10-40cm", & - "soil temperature 40-100cm", & - "soil temperature 100-200cm", & - "volumetric soil moisture 0-10cm", & - "volumetric soil moisture 10-40cm", & - "volumetric soil moisture 40-100cm", & - "volumetric soil moisture 100-200cm", & - "soil type in integer", & - "2m specific humidity" , & - "deep soil temperature" , & - "surface temperature over ice fraction", & - "2m temperature", & - "surface temperature", & - "total precipitation" , & - "vegetation fraction", & - "vegetation type in integer", & - "surface snow water equivalent" / - - data noah_units /"%", & - "%", & - "%", & - "%", & - "XXX", & - "number", & - "N/A", & - "XXX", & - "XXX", & - "XXX", & - "XXX", & - "XXX", & - "fraction", & - "XXX", & - "numerical", & - "gpm", & - "m", & - "XXX", & - "XXX", & - "XXX", & - "XXX", & - "m", & - "XXX", & - "XXX", & - "XXX", & - "XXX", & - "K", & - "K", & - "K", & - "K", & - "fraction", & - "fraction", & - "fraction", & - "fraction", & - "number", & - "kg/kg", & - "K", & - "K", & - "K", & - "K", & - "kg/m**2", & - "fraction", & - "number" , & - "kg/m**2" / - -! define nst fields - - data nst_var /"c0", & - "cd", & - "dconv", & - "dtcool", & - "qrain", & - "tref", & - "w0", & - "wd", & - "xs", & - "xt", & - "xtts", & - "xu", & - "xv", & - "xz", & - "xzts", & - "zc" / - - data nst_name /"nsst coefficient1 to calculate d(tz)/d(ts)", & - "nsst coefficient2 to calculate d(tz)/d(ts)", & - "nsst thickness of free convection layer", & - "nsst sub-layer cooling amount", & - "nsst sensible heat flux due to rainfall", & - "nsst reference or foundation temperature", & - "nsst coefficient3 to calculate d(tz)/d(ts)", & - "nsst coefficient4 to calculate d(tz)/d(ts)", & - "nsst salinity content in diurnal thermocline layer", & - "nsst heat content in diurnal thermocline layer", & - "nsst d(xt)/d(ts)", & - "nsst u-current content in diurnal thermocline layer", & - "nsst v-current content in diurnal thermocline layer", & - "nsst diurnal thermocline layer thickness", & - "nsst d(xt)/d(ts)", & - "nsst sub-layer cooling thickness"/ - - data nst_units /"numerical", & - "n/a", & - "m", & - "k", & - "w/m2", & - "K", & - "n/a", & - "n/a", & - "n/a", & - "k*m", & - "m", & - "m2/s", & - "m2/s", & - "m", & - "m/k", & - "m"/ - - outfile = "./sfc.gaussian.analysis.file" - - print*,"- WRITE SURFACE DATA TO NETCDF FILE: ", trim(outfile) - - error = nf90_create(outfile, cmode=IOR(IOR(NF90_CLOBBER,NF90_NETCDF4),NF90_CLASSIC_MODEL), ncid=ncid) - call netcdf_err(error, 'CREATING NETCDF FILE') - -! dimensions - - error = nf90_def_dim(ncid, 'grid_xt', igaus, dim_xt) - call netcdf_err(error, 'DEFINING GRID_XT DIMENSION') - - error = nf90_def_dim(ncid, 'grid_yt', jgaus, dim_yt) - call netcdf_err(error, 'DEFINING GRID_YT DIMENSION') - - error = nf90_def_dim(ncid, 'time', 1, dim_time) - call netcdf_err(error, 'DEFINING TIME DIMENSION') - -! global attributes - - error = nf90_put_att(ncid, nf90_global, 'nsoil', 4) - call netcdf_err(error, 'DEFINING NSOIL ATTRIBUTE') - - error = nf90_put_att(ncid, nf90_global, 'source', "FV3GFS") - call netcdf_err(error, 'DEFINING SOURCE ATTRIBUTE') - - error = nf90_put_att(ncid, nf90_global, 'grid', "gaussian") - call netcdf_err(error, 'DEFINING GRID ATTRIBUTE') - - error = nf90_put_att(ncid, nf90_global, 'im', igaus) - call netcdf_err(error, 'DEFINING IM ATTRIBUTE') - - error = nf90_put_att(ncid, nf90_global, 'jm', jgaus) - call netcdf_err(error, 'DEFINING JM ATTRIBUTE') - -! variables - -! grid_xt - - error = nf90_def_var(ncid, 'grid_xt', NF90_DOUBLE, dim_xt, id_xt) - call netcdf_err(error, 'DEFINING GRID_XT') - - error = nf90_put_att(ncid, id_xt, "cartesian_axis", "X") - call netcdf_err(error, 'DEFINING GRID_XT ATTRIBUTE') - - error = nf90_put_att(ncid, id_xt, "long_name", "T-cell longitude") - call netcdf_err(error, 'DEFINING GRID_XT ATTRIBUTE') - - error = nf90_put_att(ncid, id_xt, "units", "degrees_E") - call netcdf_err(error, 'DEFINING GRID_XT ATTRIBUTE') - -! lon - - error = nf90_def_var(ncid, 'lon', NF90_DOUBLE, (/dim_xt,dim_yt/), id_lon) - call netcdf_err(error, 'DEFINING LON') - - error = nf90_put_att(ncid, id_lon, "long_name", "T-cell longitude") - call netcdf_err(error, 'DEFINING LON ATTRIBUTE') - - error = nf90_put_att(ncid, id_lon, "units", "degrees_E") - call netcdf_err(error, 'DEFINING LON ATTRIBUTE') - -! grid_yt - - error = nf90_def_var(ncid, 'grid_yt', NF90_DOUBLE, dim_yt, id_yt) - call netcdf_err(error, 'DEFINING GRID_YT') - - error = nf90_put_att(ncid, id_yt, "cartesian_axis", "Y") - call netcdf_err(error, 'DEFINING GRID_YT ATTRIBUTE') - - error = nf90_put_att(ncid, id_yt, "long_name", "T-cell latitude") - call netcdf_err(error, 'DEFINING GRID_YT ATTRIBUTE') - - error = nf90_put_att(ncid, id_yt, "units", "degrees_N") - call netcdf_err(error, 'DEFINING GRID_YT ATTRIBUTE') - -! lat - - error = nf90_def_var(ncid, 'lat', NF90_DOUBLE, (/dim_xt,dim_yt/), id_lat) - call netcdf_err(error, 'DEFINING LAT') - - error = nf90_put_att(ncid, id_lat, "long_name", "T-cell latitude") - call netcdf_err(error, 'DEFINING LAT ATTRIBUTE') - - error = nf90_put_att(ncid, id_lat, "units", "degrees_N") - call netcdf_err(error, 'DEFINING LAT ATTRIBUTE') - -! time - - error = nf90_def_var(ncid, 'time', NF90_DOUBLE, dim_time, id_time) - call netcdf_err(error, 'DEFINING TIME') - - error = nf90_put_att(ncid, id_time, "long_name", "time") - call netcdf_err(error, 'DEFINING TIME ATTRIBUTE') - - write(year, "(i4)") idate(1) - write(mon, "(i2.2)") idate(2) - write(day, "(i2.2)") idate(3) - write(hour, "(i2.2)") idate(4) - - date_string="hours since " // year // "-" // mon // "-" // day // " " // hour // ":00:00" - - error = nf90_put_att(ncid, id_time, "units", date_string) - call netcdf_err(error, 'DEFINING TIME ATTRIBUTE') - - error = nf90_put_att(ncid, id_time, "cartesian_axis", "T") - call netcdf_err(error, 'DEFINING TIME ATTRIBUTE') - - error = nf90_put_att(ncid, id_time, "calendar_type", "JULIAN") - call netcdf_err(error, 'DEFINING TIME ATTRIBUTE') - - error = nf90_put_att(ncid, id_time, "calendar", "JULIAN") - call netcdf_err(error, 'DEFINING TIME ATTRIBUTE') - -!------------------------------------------------------------------------------------------- -! Determine what variables to output (noah, or noah plus nst). -!------------------------------------------------------------------------------------------- - - if (trim(donst) == "yes" .or. trim(donst) == "YES") then - num_vars = num_noah + num_nst - else - num_vars = num_noah - endif - - allocate(var(num_vars)) - allocate(name(num_vars)) - allocate(units(num_vars)) - allocate(id_var(num_vars)) - - var(1:num_noah) = noah_var - name(1:num_noah) = noah_name - units(1:num_noah) = noah_units - - if (trim(donst) == "yes" .or. trim(donst) == "YES") then - do n = 1, num_nst - var(n+num_noah) = nst_var(n) - name(n+num_noah) = nst_name(n) - units(n+num_noah) = nst_units(n) - enddo - endif - -!------------------------------------------------------------------------------------------- -! Define variables in netcdf file. -!------------------------------------------------------------------------------------------- - - do n = 1, num_vars - - print*,'- DEFINE VARIABLE ',trim(var(n)) - error = nf90_def_var(ncid, trim(var(n)), NF90_FLOAT, (/dim_xt,dim_yt,dim_time/), id_var(n)) - call netcdf_err(error, 'DEFINING variable') - error = nf90_def_var_deflate(ncid, id_var(n), 1, 1, 1) - call netcdf_err(error, 'DEFINING variable with compression') - - error = nf90_put_att(ncid, id_var(n), "long_name", trim(name(n))) - call netcdf_err(error, 'DEFINING name ATTRIBUTE') - - error = nf90_put_att(ncid, id_var(n), "units", trim(units(n))) - call netcdf_err(error, 'DEFINING units ATTRIBUTE') - - error = nf90_put_att(ncid, id_var(n), "missing", missing) - call netcdf_err(error, 'DEFINING missing ATTRIBUTE') - - error = nf90_put_att(ncid, id_var(n), "cell_methods", "time: point") - call netcdf_err(error, 'DEFINING cell method ATTRIBUTE') - - error = nf90_put_att(ncid, id_var(n), "output_file", "sfc") - call netcdf_err(error, 'DEFINING out file ATTRIBUTE') - - enddo - -! end variable defs - - error = nf90_enddef(ncid, header_buffer_val,4,0,4) - call netcdf_err(error, 'DEFINING HEADER') - -!------------------------------------------------------------------------------------------- -! Write variables to netcdf file. -!------------------------------------------------------------------------------------------- - - allocate(dummy(igaus,jgaus)) - do i = 1, igaus - dummy(i,:) = real((i-1),4) * 360.0_4 / real(igaus,4) - enddo - - error = nf90_put_var(ncid, id_xt, dummy(:,1)) - call netcdf_err(error, 'WRITING GRID_XT') - - error = nf90_put_var(ncid, id_lon, dummy) - call netcdf_err(error, 'WRITING LON') - - allocate(slat(jgaus)) - allocate(wlat(jgaus)) - call splat(4, jgaus, slat, wlat) - - do i = (jgaus/2+1), jgaus - dummy(:,i) = 90.0 - (acos(slat(i)) * 180.0 / (4.0*atan(1.0))) - enddo - - do i = 1, (jgaus/2) - dummy(:,i) = -(dummy(:,(jgaus-i+1))) - enddo - - deallocate(slat, wlat) - - error = nf90_put_var(ncid, id_yt, dummy(1,:)) - call netcdf_err(error, 'WRITING GRID_YT') - - error = nf90_put_var(ncid, id_lat, dummy) - call netcdf_err(error, 'WRITING LAT') - - error = nf90_put_var(ncid, id_time, 0) - call netcdf_err(error, 'WRITING TIME') - - do n = 1, num_vars - print*,'- WRITE VARIABLE ',trim(var(n)) - call get_netcdf_var(var(n), dummy) - error = nf90_put_var(ncid, id_var(n), dummy, start=(/1,1,1/), count=(/igaus,jgaus,1/)) - call netcdf_err(error, 'WRITING variable') - enddo - - deallocate (dummy) - - error = nf90_close(ncid) - - end subroutine write_sfc_data_netcdf - -!------------------------------------------------------------------------------------------- -! Retrieve variable based on its netcdf identifier. -!------------------------------------------------------------------------------------------- - - subroutine get_netcdf_var(var, dummy) - - use io - - implicit none - - character(len=*), intent(in) :: var - - real(kind=4), intent(out) :: dummy(igaus,jgaus) - - select case (var) - case ('alnsf') - dummy = reshape(gaussian_data%alnsf, (/igaus,jgaus/)) - case ('alnwf') - dummy = reshape(gaussian_data%alnwf, (/igaus,jgaus/)) - case ('alvsf') - dummy = reshape(gaussian_data%alvsf, (/igaus,jgaus/)) - case ('alvwf') - dummy = reshape(gaussian_data%alvwf, (/igaus,jgaus/)) - case ('cnwat') - dummy = reshape(gaussian_data%canopy, (/igaus,jgaus/)) - case ('f10m') - dummy = reshape(gaussian_data%f10m, (/igaus,jgaus/)) - case ('facsf') - dummy = reshape(gaussian_data%facsf, (/igaus,jgaus/)) - case ('facwf') - dummy = reshape(gaussian_data%facwf, (/igaus,jgaus/)) - case ('ffhh') - dummy = reshape(gaussian_data%ffhh, (/igaus,jgaus/)) - case ('ffmm') - dummy = reshape(gaussian_data%ffmm, (/igaus,jgaus/)) - case ('fricv') - dummy = reshape(gaussian_data%uustar, (/igaus,jgaus/)) - case ('land') - dummy = reshape(gaussian_data%slmask, (/igaus,jgaus/)) - case ('orog') - dummy = reshape(gaussian_data%orog, (/igaus,jgaus/)) - case ('sltyp') - dummy = reshape(gaussian_data%slope, (/igaus,jgaus/)) - case ('icec') - dummy = reshape(gaussian_data%fice, (/igaus,jgaus/)) - case ('icetk') - dummy = reshape(gaussian_data%hice, (/igaus,jgaus/)) - case ('snoalb') - dummy = reshape(gaussian_data%snoalb, (/igaus,jgaus/)) - case ('shdmin') - dummy = reshape(gaussian_data%shdmin, (/igaus,jgaus/)) - case ('shdmax') - dummy = reshape(gaussian_data%shdmax, (/igaus,jgaus/)) - case ('snod') - dummy = reshape(gaussian_data%snwdph, (/igaus,jgaus/)) / 1000.0 - case ('weasd') - dummy = reshape(gaussian_data%sheleg, (/igaus,jgaus/)) - case ('veg') - dummy = reshape(gaussian_data%vfrac, (/igaus,jgaus/)) * 100.0 - case ('sfcr') - dummy = reshape(gaussian_data%zorl, (/igaus,jgaus/)) / 100.0 - case ('crain') - dummy = reshape(gaussian_data%srflag, (/igaus,jgaus/)) - case ('sotyp') - dummy = reshape(gaussian_data%stype, (/igaus,jgaus/)) - case ('spfh2m') - dummy = reshape(gaussian_data%q2m, (/igaus,jgaus/)) - case ('tmp2m') - dummy = reshape(gaussian_data%t2m, (/igaus,jgaus/)) - case ('tmpsfc') - dummy = reshape(gaussian_data%tsea, (/igaus,jgaus/)) - case ('tg3') - dummy = reshape(gaussian_data%tg3, (/igaus,jgaus/)) - case ('tisfc') - dummy = reshape(gaussian_data%tisfc, (/igaus,jgaus/)) - case ('tprcp') - dummy = reshape(gaussian_data%tprcp, (/igaus,jgaus/)) - case ('vtype') - dummy = reshape(gaussian_data%vtype, (/igaus,jgaus/)) - case ('soill1') - dummy = reshape(gaussian_data%slc(:,1), (/igaus,jgaus/)) - where (dummy > 0.99) dummy = 0.0 ! replace flag value at water/landice - case ('soill2') - dummy = reshape(gaussian_data%slc(:,2), (/igaus,jgaus/)) - where (dummy > 0.99) dummy = 0.0 ! replace flag value at water/landice - case ('soill3') - dummy = reshape(gaussian_data%slc(:,3), (/igaus,jgaus/)) - where (dummy > 0.99) dummy = 0.0 ! replace flag value at water/landice - case ('soill4') - dummy = reshape(gaussian_data%slc(:,4), (/igaus,jgaus/)) - where (dummy > 0.99) dummy = 0.0 ! replace flag value at water/landice - case ('soilt1') - dummy = reshape(gaussian_data%stc(:,1), (/igaus,jgaus/)) - case ('soilt2') - dummy = reshape(gaussian_data%stc(:,2), (/igaus,jgaus/)) - case ('soilt3') - dummy = reshape(gaussian_data%stc(:,3), (/igaus,jgaus/)) - case ('soilt4') - dummy = reshape(gaussian_data%stc(:,4), (/igaus,jgaus/)) - case ('soilw1') - dummy = reshape(gaussian_data%smc(:,1), (/igaus,jgaus/)) - case ('soilw2') - dummy = reshape(gaussian_data%smc(:,2), (/igaus,jgaus/)) - case ('soilw3') - dummy = reshape(gaussian_data%smc(:,3), (/igaus,jgaus/)) - case ('soilw4') - dummy = reshape(gaussian_data%smc(:,4), (/igaus,jgaus/)) - case ('c0') - dummy = reshape(gaussian_data%c0, (/igaus,jgaus/)) - case ('cd') - dummy = reshape(gaussian_data%cd, (/igaus,jgaus/)) - case ('dconv') - dummy = reshape(gaussian_data%dconv, (/igaus,jgaus/)) - case ('dtcool') - dummy = reshape(gaussian_data%dtcool, (/igaus,jgaus/)) - case ('qrain') - dummy = reshape(gaussian_data%qrain, (/igaus,jgaus/)) - case ('tref') - dummy = reshape(gaussian_data%tref, (/igaus,jgaus/)) - case ('w0') - dummy = reshape(gaussian_data%w0, (/igaus,jgaus/)) - case ('wd') - dummy = reshape(gaussian_data%wd, (/igaus,jgaus/)) - case ('xs') - dummy = reshape(gaussian_data%xs, (/igaus,jgaus/)) - case ('xt') - dummy = reshape(gaussian_data%xt, (/igaus,jgaus/)) - case ('xtts') - dummy = reshape(gaussian_data%xtts, (/igaus,jgaus/)) - case ('xu') - dummy = reshape(gaussian_data%xu, (/igaus,jgaus/)) - case ('xv') - dummy = reshape(gaussian_data%xv, (/igaus,jgaus/)) - case ('xz') - dummy = reshape(gaussian_data%xz, (/igaus,jgaus/)) - case ('xzts') - dummy = reshape(gaussian_data%xzts, (/igaus,jgaus/)) - case ('zc') - dummy = reshape(gaussian_data%zc, (/igaus,jgaus/)) - case default - print*,'- FATAL ERROR: UNKNOWN VAR IN GET_VAR: ', var - call errexit(67) - end select - - end subroutine get_netcdf_var - -!------------------------------------------------------------------------------------------- -! Write gaussian surface data to nemsio file. -!------------------------------------------------------------------------------------------- - - subroutine write_sfc_data_nemsio - - use nemsio_module - use io - - implicit none - - integer(nemsio_intkind), parameter :: nrec_all=60 - integer(nemsio_intkind), parameter :: nmetaaryi=1 - integer(nemsio_intkind), parameter :: nmetavari=4 - integer(nemsio_intkind), parameter :: nmetavarr=1 - integer(nemsio_intkind), parameter :: nmetavarc=2 - - character(nemsio_charkind) :: recname_all(nrec_all) - character(nemsio_charkind) :: reclevtyp_all(nrec_all) - character(nemsio_charkind) :: aryiname(nmetaaryi) - character(nemsio_charkind) :: variname(nmetavari) - character(nemsio_charkind) :: varrname(nmetavarr) - character(nemsio_charkind) :: varcname(nmetavarc) - character(nemsio_charkind) :: varcval(nmetavarc) - character(nemsio_charkind), allocatable :: recname(:) - character(nemsio_charkind), allocatable :: reclevtyp(:) - - integer(nemsio_intkind) :: iret, version, nrec - integer(nemsio_intkind) :: reclev_all(nrec_all) - integer(nemsio_intkind) :: aryival(jgaus,nmetaaryi) - integer(nemsio_intkind) :: aryilen(nmetaaryi) - integer(nemsio_intkind) :: varival(nmetavari) - integer :: i, k, n, nvcoord, levs_vcoord - integer(nemsio_intkind), allocatable :: reclev(:) - - real(nemsio_realkind), allocatable :: the_data(:) - real(nemsio_realkind) :: varrval(nmetavarr) - real(nemsio_realkind), allocatable :: lat(:), lon(:) - real(kind=4), allocatable :: dummy(:,:), slat(:), wlat(:) - real(nemsio_realkind), allocatable :: vcoord(:,:,:) - - type(nemsio_gfile) :: gfileo - - data recname_all /'alnsf', 'alnwf', 'alvsf', 'alvwf', & - 'cnwat', 'crain', 'f10m', 'facsf', & - 'facwf', 'ffhh', 'ffmm', 'fricv', & - 'icec', 'icetk', 'land', 'orog', & - 'snoalb', 'sfcr', 'shdmax', 'shdmin', & - 'soill', 'soill', 'soill', 'soill', & - 'sltyp', 'soilw', 'soilw', 'soilw', & - 'soilw', 'snod', 'sotyp', 'spfh', & - 'tmp', 'tmp', 'tmp', 'tmp', & - 'tg3', 'ti', 'tmp', 'tmp', & - 'tprcp', 'veg', 'vtype', 'weasd', & - 'c0', 'cd', 'dconv', 'dtcool', & - 'qrain', 'tref', & - 'w0', 'wd', 'xs', 'xt', & - 'xtts', 'xu', 'xv', 'xz', & - 'xzts', 'zc'/ - - data reclevtyp_all /'sfc', 'sfc', 'sfc', 'sfc', & - 'sfc', 'sfc', '10 m above gnd', 'sfc', & - 'sfc', 'sfc', 'sfc', 'sfc', & - 'sfc', 'sfc', 'sfc', 'sfc', & - 'sfc', 'sfc', 'sfc', 'sfc', & - '0-10 cm down', '10-40 cm down', '40-100 cm down', '100-200 cm down', & - 'sfc', '0-10 cm down', '10-40 cm down', '40-100 cm down', & - '100-200 cm down', 'sfc', 'sfc', '2 m above gnd', & - '0-10 cm down', '10-40 cm down', '40-100 cm down', '100-200 cm down', & - 'sfc', 'sfc', '2 m above gnd', 'sfc', & - 'sfc', 'sfc', 'sfc', 'sfc', & - 'sfc', 'sfc', 'sfc', 'sfc', & - 'sfc', 'sfc', 'sfc', & - 'sfc', 'sfc', 'sfc', 'sfc', & - 'sfc', 'sfc', 'sfc', 'sfc', & - 'sfc'/ - - data reclev_all /1, 1, 1, 1, 1, & - 1, 1, 1, 1, 1, 1, & - 1, 1, 1, 1, 1, 1, & - 1, 1, 1, 1, 1, 1, & - 1, 1, 1, 1, 1, 1, & - 1, 1, 1, 1, 1, 1, & - 1, 1, 1, 1, 1, 1, & - 1, 1, 1, 1, 1, 1, & - 1, 1, 1, 1, 1, 1, & - 1, 1, 1, 1, 1, 1, 1/ - - data aryiname /'lpl'/ - - data variname /'fhzero', 'ncld', 'nsoil', 'imp_physics'/ - - data varival /6, 5, 4, 11/ - - data varrname /'dtp'/ - - data varrval /225.0/ - - data varcname /"y-direction", "z-direction"/ - - data varcval /"north2south", "bottom2top"/ - - version = 200809 - - aryival = igaus ! reduced grid definition - aryilen = jgaus - - allocate(dummy(igaus,jgaus)) - do i = 1, igaus - dummy(i,:) = float(i-1) * 360.0 / float(igaus) - enddo - - allocate(lon(igaus*jgaus)) - lon = reshape (dummy, (/igaus*jgaus/) ) - -! Call 4-byte version of splib to match latitudes in history files. - - allocate(slat(jgaus)) - allocate(wlat(jgaus)) - call splat(4, jgaus, slat, wlat) - - do i = (jgaus/2+1), jgaus - dummy(:,i) = 90.0 - (acos(slat(i)) * 180.0 / (4.0*atan(1.0))) - enddo - - do i = 1, (jgaus/2) - dummy(:,i) = -(dummy(:,(jgaus-i+1))) - enddo - - deallocate(slat, wlat) - - allocate(lat(igaus*jgaus)) - lat = reshape (dummy, (/igaus*jgaus/) ) - - deallocate(dummy) - - print* - print*, "- OPEN VCOORD FILE." - open(14, file="vcoord.txt", form='formatted', iostat=iret) - if (iret /= 0) goto 43 - - print*, "- READ VCOORD FILE." - read(14, *, iostat=iret) nvcoord, levs_vcoord - if (iret /= 0) goto 43 - - allocate(vcoord(levs_vcoord,3,2)) - vcoord = 0.0 - read(14, *, iostat=iret) ((vcoord(n,k,1), k=1,nvcoord), n=1,levs_vcoord) - if (iret /= 0) goto 43 - - close (14) - - if (trim(donst) == "yes" .or. trim(donst) == "YES") then - nrec = nrec_all - allocate(recname(nrec)) - recname = recname_all - allocate(reclevtyp(nrec)) - reclevtyp = reclevtyp_all - allocate(reclev(nrec)) - reclev = reclev_all - else - nrec = 44 - allocate(recname(nrec)) - recname = recname_all(1:nrec) - allocate(reclevtyp(nrec)) - reclevtyp = reclevtyp_all(1:nrec) - allocate(reclev(nrec)) - reclev = reclev_all(1:nrec) - endif - - call nemsio_init(iret=iret) - - print* - print*,"- OPEN GAUSSIAN NEMSIO SURFACE FILE" - - call nemsio_open(gfileo, "sfc.gaussian.analysis.file", 'write', & - modelname="FV3GFS", gdatatype="bin4", version=version, & - nmeta=8, nrec=nrec, dimx=igaus, dimy=jgaus, dimz=(levs_vcoord-1), & - nframe=0, nsoil=4, ntrac=8, jcap=-9999, & - ncldt=5, idvc=-9999, idsl=-9999, idvm=-9999, & - idrt=4, lat=lat, lon=lon, vcoord=vcoord, & - nfhour=0, nfminute=0, nfsecondn=0, & - nfsecondd=1, nfday=0, idate=idate, & - recname=recname, reclevtyp=reclevtyp, & - reclev=reclev, extrameta=.true., & - nmetavari=nmetavari, variname=variname, varival=varival, & - nmetavarr=nmetavarr, varrname=varrname, varrval=varrval, & - nmetavarc=nmetavarc, varcname=varcname, varcval=varcval, & - nmetaaryi=nmetaaryi, aryiname=aryiname, & - aryival=aryival, aryilen=aryilen, iret=iret) - if (iret /= 0) goto 44 - - deallocate (lat, lon, vcoord, recname, reclevtyp, reclev) - - allocate(the_data(igaus*jgaus)) - - print*,"- WRITE GAUSSIAN NEMSIO SURFACE FILE" - - print*,"- WRITE ALNSF" - the_data = gaussian_data%alnsf - call nemsio_writerec(gfileo, 1, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE ALNWF" - the_data = gaussian_data%alnwf - call nemsio_writerec(gfileo, 2, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE ALVSF" - the_data = gaussian_data%alvsf - call nemsio_writerec(gfileo, 3, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE ALVWF" - the_data = gaussian_data%alvwf - call nemsio_writerec(gfileo, 4, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE CANOPY" - the_data = gaussian_data%canopy - call nemsio_writerec(gfileo, 5, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE CRAIN (SRFLAG)" - the_data = gaussian_data%srflag - call nemsio_writerec(gfileo, 6, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE F10M" - the_data = gaussian_data%f10m - call nemsio_writerec(gfileo, 7, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE FACSF" - the_data = gaussian_data%facsf - call nemsio_writerec(gfileo, 8, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE FACWF" - the_data = gaussian_data%facwf - call nemsio_writerec(gfileo, 9, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE FFHH" - the_data = gaussian_data%ffhh - call nemsio_writerec(gfileo, 10, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE FFMM" - the_data = gaussian_data%ffmm - call nemsio_writerec(gfileo, 11, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE UUSTAR" - the_data = gaussian_data%uustar - call nemsio_writerec(gfileo, 12, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE FICE" - the_data = gaussian_data%fice - call nemsio_writerec(gfileo, 13, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE HICE" - the_data = gaussian_data%hice - call nemsio_writerec(gfileo, 14, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE SLMSK" - the_data = gaussian_data%slmask - call nemsio_writerec(gfileo, 15, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE OROG" - the_data = gaussian_data%orog - call nemsio_writerec(gfileo, 16, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE SNOALB" - the_data = gaussian_data%snoalb - call nemsio_writerec(gfileo, 17, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE ZORL" - the_data = gaussian_data%zorl * 0.01 ! meters - call nemsio_writerec(gfileo, 18, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE SHDMAX" - the_data = gaussian_data%shdmax - call nemsio_writerec(gfileo, 19, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE SHDMIN" - the_data = gaussian_data%shdmin - call nemsio_writerec(gfileo, 20, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE SLC" - the_data = gaussian_data%slc(:,1) - call nemsio_writerec(gfileo, 21, the_data, iret=iret) - if (iret /= 0) goto 44 - - the_data = gaussian_data%slc(:,2) - call nemsio_writerec(gfileo, 22, the_data, iret=iret) - if (iret /= 0) goto 44 - - the_data = gaussian_data%slc(:,3) - call nemsio_writerec(gfileo, 23, the_data, iret=iret) - if (iret /= 0) goto 44 - - the_data = gaussian_data%slc(:,4) - call nemsio_writerec(gfileo, 24, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE SLOPE" - the_data = gaussian_data%slope - call nemsio_writerec(gfileo, 25, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE SMC" - the_data = gaussian_data%smc(:,1) - call nemsio_writerec(gfileo, 26, the_data, iret=iret) - if (iret /= 0) goto 44 - - the_data = gaussian_data%smc(:,2) - call nemsio_writerec(gfileo, 27, the_data, iret=iret) - if (iret /= 0) goto 44 - - the_data = gaussian_data%smc(:,3) - call nemsio_writerec(gfileo, 28, the_data, iret=iret) - if (iret /= 0) goto 44 - - the_data = gaussian_data%smc(:,4) - call nemsio_writerec(gfileo, 29, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE SNWDPH" - the_data = gaussian_data%snwdph * 0.001 ! meters - call nemsio_writerec(gfileo, 30, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE STYPE" - the_data = gaussian_data%stype - call nemsio_writerec(gfileo, 31, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE Q2M" - the_data = gaussian_data%q2m - call nemsio_writerec(gfileo, 32, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE STC" - the_data = gaussian_data%stc(:,1) - call nemsio_writerec(gfileo, 33, the_data, iret=iret) - if (iret /= 0) goto 44 - - the_data = gaussian_data%stc(:,2) - call nemsio_writerec(gfileo, 34, the_data, iret=iret) - if (iret /= 0) goto 44 - - the_data = gaussian_data%stc(:,3) - call nemsio_writerec(gfileo, 35, the_data, iret=iret) - if (iret /= 0) goto 44 - - the_data = gaussian_data%stc(:,4) - call nemsio_writerec(gfileo, 36, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE TG3" - the_data = gaussian_data%tg3 - call nemsio_writerec(gfileo, 37, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE TISFC" - the_data = gaussian_data%tisfc - call nemsio_writerec(gfileo, 38, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE T2M" - the_data = gaussian_data%t2m - call nemsio_writerec(gfileo, 39, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE TSEA" - the_data = gaussian_data%tsea - call nemsio_writerec(gfileo, 40, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE TPRCP" - the_data = gaussian_data%tprcp - call nemsio_writerec(gfileo, 41, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE VFRAC" - the_data = gaussian_data%vfrac * 100.0 ! whole percent - call nemsio_writerec(gfileo, 42, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE VTYPE" - the_data = gaussian_data%vtype - call nemsio_writerec(gfileo, 43, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE SHELEG" - the_data = gaussian_data%sheleg - call nemsio_writerec(gfileo, 44, the_data, iret=iret) - if (iret /= 0) goto 44 - - if (trim(donst) == "yes" .or. trim(donst) == "YES") then - - print*,"- WRITE C0" - the_data = gaussian_data%c0 - call nemsio_writerec(gfileo, 45, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE CD" - the_data = gaussian_data%cd - call nemsio_writerec(gfileo, 46, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE DCONV" - the_data = gaussian_data%dconv - call nemsio_writerec(gfileo, 47, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE DTCOOL" - the_data = gaussian_data%dtcool - call nemsio_writerec(gfileo, 48, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE QRAIN" - the_data = gaussian_data%qrain - call nemsio_writerec(gfileo, 49, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE TREF" - the_data = gaussian_data%tref - call nemsio_writerec(gfileo, 50, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE W0" - the_data = gaussian_data%w0 - call nemsio_writerec(gfileo, 51, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE WD" - the_data = gaussian_data%wd - call nemsio_writerec(gfileo, 52, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE XS" - the_data = gaussian_data%xs - call nemsio_writerec(gfileo, 53, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE XT" - the_data = gaussian_data%xt - call nemsio_writerec(gfileo, 54, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE XTTS" - the_data = gaussian_data%xtts - call nemsio_writerec(gfileo, 55, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE XU" - the_data = gaussian_data%xu - call nemsio_writerec(gfileo, 56, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE XV" - the_data = gaussian_data%xv - call nemsio_writerec(gfileo, 57, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE XZ" - the_data = gaussian_data%xz - call nemsio_writerec(gfileo, 58, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE XZTS" - the_data = gaussian_data%xzts - call nemsio_writerec(gfileo, 59, the_data, iret=iret) - if (iret /= 0) goto 44 - - print*,"- WRITE ZC" - the_data = gaussian_data%zc - call nemsio_writerec(gfileo, 60, the_data, iret=iret) - if (iret /= 0) goto 44 - - endif - - call nemsio_close(gfileo,iret=iret) - - call nemsio_finalize() - - deallocate(the_data) - - return - - 43 continue - print*,"- ** FATAL ERROR OPENING/READING VCOORD FILE." - print*,"- IRET IS: ", iret - call errexit(17) - stop - - 44 continue - print*,"- ** FATAL ERROR WRITING GAUSSIAN NEMSIO FILE." - print*,"- IRET IS: ", iret - call errexit(15) - stop - - end subroutine write_sfc_data_nemsio - -!------------------------------------------------------------------------------------------- -! Read tile data. -!------------------------------------------------------------------------------------------- - - subroutine read_data_anl - - use netcdf - use io - - implicit none - - integer :: ijtile, id_dim, id_var - integer :: error, tile, ncid - integer :: istart, iend - - real(kind=8), allocatable :: dummy(:,:), dummy3d(:,:,:) - -!------------------------------------------------------------------------------------------- -! Get tile dimensions from the first analysis file. -!------------------------------------------------------------------------------------------- - - error=nf90_open("./anal.tile1.nc",nf90_nowrite,ncid) - error=nf90_inq_dimid(ncid, 'xaxis_1', id_dim) - call netcdf_err(error, 'READING xaxis_1' ) - error=nf90_inquire_dimension(ncid,id_dim,len=itile) - call netcdf_err(error, 'READING xaxis_1' ) - - error=nf90_inq_dimid(ncid, 'yaxis_1', id_dim) - call netcdf_err(error, 'READING yaxis_1' ) - error=nf90_inquire_dimension(ncid,id_dim,len=jtile) - call netcdf_err(error, 'READING yaxis_1' ) - - error = nf90_close(ncid) - - ijtile = itile*jtile - - allocate(dummy(itile,jtile)) - allocate(dummy3d(itile,jtile,4)) - - allocate(tile_data%orog(ijtile*num_tiles)) - allocate(tile_data%canopy(ijtile*num_tiles)) - allocate(tile_data%slmask(ijtile*num_tiles)) - allocate(tile_data%tg3(ijtile*num_tiles)) - allocate(tile_data%alvsf(ijtile*num_tiles)) - allocate(tile_data%alvwf(ijtile*num_tiles)) - allocate(tile_data%alnsf(ijtile*num_tiles)) - allocate(tile_data%alnwf(ijtile*num_tiles)) - allocate(tile_data%facsf(ijtile*num_tiles)) - allocate(tile_data%facwf(ijtile*num_tiles)) - allocate(tile_data%ffhh(ijtile*num_tiles)) - allocate(tile_data%ffmm(ijtile*num_tiles)) - allocate(tile_data%fice(ijtile*num_tiles)) - allocate(tile_data%hice(ijtile*num_tiles)) - allocate(tile_data%sheleg(ijtile*num_tiles)) - allocate(tile_data%stype(ijtile*num_tiles)) - allocate(tile_data%vfrac(ijtile*num_tiles)) - allocate(tile_data%vtype(ijtile*num_tiles)) - allocate(tile_data%zorl(ijtile*num_tiles)) - allocate(tile_data%tsea(ijtile*num_tiles)) - allocate(tile_data%f10m(ijtile*num_tiles)) - allocate(tile_data%q2m(ijtile*num_tiles)) - allocate(tile_data%shdmax(ijtile*num_tiles)) - allocate(tile_data%shdmin(ijtile*num_tiles)) - allocate(tile_data%slope(ijtile*num_tiles)) - allocate(tile_data%snoalb(ijtile*num_tiles)) - allocate(tile_data%srflag(ijtile*num_tiles)) - allocate(tile_data%snwdph(ijtile*num_tiles)) - allocate(tile_data%t2m(ijtile*num_tiles)) - allocate(tile_data%tisfc(ijtile*num_tiles)) - allocate(tile_data%tprcp(ijtile*num_tiles)) - allocate(tile_data%uustar(ijtile*num_tiles)) - allocate(tile_data%slc(ijtile*num_tiles,4)) - allocate(tile_data%smc(ijtile*num_tiles,4)) - allocate(tile_data%stc(ijtile*num_tiles,4)) -! nst - if (trim(donst) == "yes" .or. trim(donst) == "YES") then - allocate(tile_data%c0(ijtile*num_tiles)) - allocate(tile_data%cd(ijtile*num_tiles)) - allocate(tile_data%dconv(ijtile*num_tiles)) - allocate(tile_data%dtcool(ijtile*num_tiles)) - allocate(tile_data%land(ijtile*num_tiles)) - allocate(tile_data%qrain(ijtile*num_tiles)) - allocate(tile_data%tref(ijtile*num_tiles)) - allocate(tile_data%w0(ijtile*num_tiles)) - allocate(tile_data%wd(ijtile*num_tiles)) - allocate(tile_data%xs(ijtile*num_tiles)) - allocate(tile_data%xt(ijtile*num_tiles)) - allocate(tile_data%xtts(ijtile*num_tiles)) - allocate(tile_data%xu(ijtile*num_tiles)) - allocate(tile_data%xv(ijtile*num_tiles)) - allocate(tile_data%xz(ijtile*num_tiles)) - allocate(tile_data%xzts(ijtile*num_tiles)) - allocate(tile_data%zc(ijtile*num_tiles)) - endif - - do tile = 1, 6 - - print* - print*, "- READ INPUT SFC DATA FOR TILE: ", tile - - istart = (ijtile) * (tile-1) + 1 - iend = istart + ijtile - 1 - - if (tile==1) error=nf90_open("./anal.tile1.nc",nf90_nowrite,ncid) - if (tile==2) error=nf90_open("./anal.tile2.nc",nf90_nowrite,ncid) - if (tile==3) error=nf90_open("./anal.tile3.nc",nf90_nowrite,ncid) - if (tile==4) error=nf90_open("./anal.tile4.nc",nf90_nowrite,ncid) - if (tile==5) error=nf90_open("./anal.tile5.nc",nf90_nowrite,ncid) - if (tile==6) error=nf90_open("./anal.tile6.nc",nf90_nowrite,ncid) - - call netcdf_err(error, 'OPENING FILE' ) - - error=nf90_inq_varid(ncid, "slmsk", id_var) - call netcdf_err(error, 'READING slmsk ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING slmsk' ) - print*,'- SLMSK: ',maxval(dummy),minval(dummy) - tile_data%slmask(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "tsea", id_var) - call netcdf_err(error, 'READING tsea ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING tsea' ) - print*,'- TSEA: ',maxval(dummy),minval(dummy) - tile_data%tsea(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "sheleg", id_var) - call netcdf_err(error, 'READING sheleg ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING sheleg' ) - print*,'- SHELEG: ',maxval(dummy),minval(dummy) - tile_data%sheleg(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "tg3", id_var) - call netcdf_err(error, 'READING tg3 ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING tg3' ) - print*,'- TG3: ',maxval(dummy),minval(dummy) - tile_data%tg3(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "zorl", id_var) - call netcdf_err(error, 'READING zorl ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING zorl' ) - print*,'- ZORL: ',maxval(dummy),minval(dummy) - tile_data%zorl(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "alvsf", id_var) - call netcdf_err(error, 'READING alvsf ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING alvsf' ) - print*,'- ALVSF: ',maxval(dummy),minval(dummy) - tile_data%alvsf(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "alvwf", id_var) - call netcdf_err(error, 'READING alvwf ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING alvwf' ) - print*,'- ALVWF: ',maxval(dummy),minval(dummy) - tile_data%alvwf(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "alnsf", id_var) - call netcdf_err(error, 'READING alnsf ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING alnsf' ) - print*,'- ALNSF: ',maxval(dummy),minval(dummy) - tile_data%alnsf(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "alnwf", id_var) - call netcdf_err(error, 'READING alnwf ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING alnwf' ) - print*,'- ALNWF: ',maxval(dummy),minval(dummy) - tile_data%alnwf(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "facsf", id_var) - call netcdf_err(error, 'READING facsf ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING facsf' ) - print*,'- FACSF: ',maxval(dummy),minval(dummy) - tile_data%facsf(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "facwf", id_var) - call netcdf_err(error, 'READING facwf ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING facwf' ) - print*,'- FACWF: ',maxval(dummy),minval(dummy) - tile_data%facwf(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "vfrac", id_var) - call netcdf_err(error, 'READING vfrac ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING vfrac' ) - print*,'- VFRAC: ',maxval(dummy),minval(dummy) - tile_data%vfrac(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "canopy", id_var) - call netcdf_err(error, 'READING canopy ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING canopy' ) - print*,'- CANOPY: ',maxval(dummy),minval(dummy) - tile_data%canopy(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "f10m", id_var) - call netcdf_err(error, 'READING f10m ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING f10m' ) - print*,'- F10M: ',maxval(dummy),minval(dummy) - tile_data%f10m(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "t2m", id_var) - call netcdf_err(error, 'READING t2m ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING t2m' ) - print*,'- T2M: ',maxval(dummy),minval(dummy) - tile_data%t2m(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "q2m", id_var) - call netcdf_err(error, 'READING q2m ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING q2m' ) - print*,'- Q2M: ',maxval(dummy),minval(dummy) - tile_data%q2m(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "vtype", id_var) - call netcdf_err(error, 'READING vtype ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING vtype' ) - print*,'- VTYPE: ',maxval(dummy),minval(dummy) - tile_data%vtype(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "stype", id_var) - call netcdf_err(error, 'READING stype ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING stype' ) - print*,'- STYPE: ',maxval(dummy),minval(dummy) - tile_data%stype(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "uustar", id_var) - call netcdf_err(error, 'READING uustar ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING uustar' ) - print*,'- UUSTAR: ',maxval(dummy),minval(dummy) - tile_data%uustar(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "ffmm", id_var) - call netcdf_err(error, 'READING ffmm ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING ffmm' ) - print*,'- FFMM: ',maxval(dummy),minval(dummy) - tile_data%ffmm(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "ffhh", id_var) - call netcdf_err(error, 'READING ffhh ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING ffhh' ) - print*,'- FFHH: ',maxval(dummy),minval(dummy) - tile_data%ffhh(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "hice", id_var) - call netcdf_err(error, 'READING hice ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING hice' ) - print*,'- HICE: ',maxval(dummy),minval(dummy) - tile_data%hice(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "fice", id_var) - call netcdf_err(error, 'READING fice ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING fice' ) - print*,'- FICE: ',maxval(dummy),minval(dummy) - tile_data%fice(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "tisfc", id_var) - call netcdf_err(error, 'READING tisfc ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING tisfc' ) - print*,'- TISFC: ',maxval(dummy),minval(dummy) - tile_data%tisfc(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "tprcp", id_var) - call netcdf_err(error, 'READING tprcp ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING tprcp' ) - print*,'- TPRCP: ',maxval(dummy),minval(dummy) - tile_data%tprcp(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "srflag", id_var) - call netcdf_err(error, 'READING srflag ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING srfalg' ) - print*,'- SRFLAG: ',maxval(dummy),minval(dummy) - tile_data%srflag(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "snwdph", id_var) - call netcdf_err(error, 'READING snwdph ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING snwdph' ) - print*,'- SNWDPH: ',maxval(dummy),minval(dummy) - tile_data%snwdph(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "shdmin", id_var) - call netcdf_err(error, 'READING shdmin ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING shdmin' ) - print*,'- SHDMIN: ',maxval(dummy),minval(dummy) - tile_data%shdmin(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "shdmax", id_var) - call netcdf_err(error, 'READING shdmax ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING shdmax' ) - print*,'- SHDMAX: ',maxval(dummy),minval(dummy) - tile_data%shdmax(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "slope", id_var) - call netcdf_err(error, 'READING slope ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING slope' ) - print*,'- SLOPE: ',maxval(dummy),minval(dummy) - tile_data%slope(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "snoalb", id_var) - call netcdf_err(error, 'READING snoalb ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING snoalb' ) - print*,'- SNOALB: ',maxval(dummy),minval(dummy) - tile_data%snoalb(istart:iend) = reshape(dummy, (/ijtile/)) - - if (trim(donst) == "yes" .or. trim(donst) == "YES") then - - error=nf90_inq_varid(ncid, "c_0", id_var) - call netcdf_err(error, 'READING c_0 ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING c_0' ) - print*,'- C_0: ',maxval(dummy),minval(dummy) - tile_data%c0(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "c_d", id_var) - call netcdf_err(error, 'READING c_d ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING c_d' ) - print*,'- C_D: ',maxval(dummy),minval(dummy) - tile_data%cd(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "d_conv", id_var) - call netcdf_err(error, 'READING d_conv ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING d_conv' ) - print*,'- D_CONV: ',maxval(dummy),minval(dummy) - tile_data%dconv(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "dt_cool", id_var) - call netcdf_err(error, 'READING dt_cool ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING dt_cool' ) - print*,'- DT_COOL: ',maxval(dummy),minval(dummy) - tile_data%dtcool(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "qrain", id_var) - call netcdf_err(error, 'READING qrain ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING qrain' ) - print*,'- QRAIN: ',maxval(dummy),minval(dummy) - tile_data%qrain(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "tref", id_var) - call netcdf_err(error, 'READING tref ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING tref' ) - print*,'- TREF: ',maxval(dummy),minval(dummy) - tile_data%tref(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "w_0", id_var) - call netcdf_err(error, 'READING w_0 ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING w_0' ) - print*,'- W_0: ',maxval(dummy),minval(dummy) - tile_data%w0(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "w_d", id_var) - call netcdf_err(error, 'READING w_d ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING w_d' ) - print*,'- W_D: ',maxval(dummy),minval(dummy) - tile_data%wd(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "xs", id_var) - call netcdf_err(error, 'READING xs ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING xs' ) - print*,'- XS: ',maxval(dummy),minval(dummy) - tile_data%xs(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "xt", id_var) - call netcdf_err(error, 'READING xt ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING xt' ) - print*,'- XT: ',maxval(dummy),minval(dummy) - tile_data%xt(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "xtts", id_var) - call netcdf_err(error, 'READING xtts ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING xtts' ) - print*,'- XTTS: ',maxval(dummy),minval(dummy) - tile_data%xtts(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "xzts", id_var) - call netcdf_err(error, 'READING xzts ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING xzts' ) - print*,'- XZTS: ',maxval(dummy),minval(dummy) - tile_data%xzts(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "xu", id_var) - call netcdf_err(error, 'READING xu ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING xu' ) - print*,'- XU: ',maxval(dummy),minval(dummy) - tile_data%xu(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "xv", id_var) - call netcdf_err(error, 'READING xv ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING xv' ) - print*,'- XV: ',maxval(dummy),minval(dummy) - tile_data%xv(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "xz", id_var) - call netcdf_err(error, 'READING xz ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING xz' ) - print*,'- XZ: ',maxval(dummy),minval(dummy) - tile_data%xz(istart:iend) = reshape(dummy, (/ijtile/)) - - error=nf90_inq_varid(ncid, "z_c", id_var) - call netcdf_err(error, 'READING z_c ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING z_c' ) - print*,'- Z_C: ',maxval(dummy),minval(dummy) - tile_data%zc(istart:iend) = reshape(dummy, (/ijtile/)) - - endif ! nst fields - - error=nf90_inq_varid(ncid, "smc", id_var) - call netcdf_err(error, 'READING smc ID' ) - error=nf90_get_var(ncid, id_var, dummy3d) - call netcdf_err(error, 'READING smc' ) - print*,'- SMC: ',maxval(dummy3d),minval(dummy3d) - tile_data%smc(istart:iend,1:4) = reshape(dummy3d, (/ijtile,4/)) - - error=nf90_inq_varid(ncid, "stc", id_var) - call netcdf_err(error, 'READING stc ID' ) - error=nf90_get_var(ncid, id_var, dummy3d) - call netcdf_err(error, 'READING stc' ) - print*,'- STC: ',maxval(dummy3d),minval(dummy3d) - tile_data%stc(istart:iend,1:4) = reshape(dummy3d, (/ijtile,4/)) - - error=nf90_inq_varid(ncid, "slc", id_var) - call netcdf_err(error, 'READING slc ID' ) - error=nf90_get_var(ncid, id_var, dummy3d) - call netcdf_err(error, 'READING slc' ) - print*,'- SLC: ',maxval(dummy3d),minval(dummy3d) - tile_data%slc(istart:iend,1:4) = reshape(dummy3d, (/ijtile,4/)) - - error = nf90_close(ncid) - - print* - print*, "- READ INPUT OROG DATA FOR TILE: ",tile - - if (tile==1) error=nf90_open("./orog.tile1.nc",nf90_nowrite,ncid) - if (tile==2) error=nf90_open("./orog.tile2.nc",nf90_nowrite,ncid) - if (tile==3) error=nf90_open("./orog.tile3.nc",nf90_nowrite,ncid) - if (tile==4) error=nf90_open("./orog.tile4.nc",nf90_nowrite,ncid) - if (tile==5) error=nf90_open("./orog.tile5.nc",nf90_nowrite,ncid) - if (tile==6) error=nf90_open("./orog.tile6.nc",nf90_nowrite,ncid) - - call netcdf_err(error, 'OPENING FILE' ) - - error=nf90_inq_varid(ncid, "orog_raw", id_var) - call netcdf_err(error, 'READING orog_raw ID' ) - error=nf90_get_var(ncid, id_var, dummy) - call netcdf_err(error, 'READING orog_raw' ) - print*,'- OROG: ',maxval(dummy),minval(dummy) - tile_data%orog(istart:iend) = reshape(dummy, (/ijtile/)) - - error = nf90_close(ncid) - - enddo - - deallocate (dummy, dummy3d) - - end subroutine read_data_anl - -!------------------------------------------------------------------------------------------- -! Netcdf error routine. -!------------------------------------------------------------------------------------------- - - subroutine netcdf_err(err, string) - - use netcdf - - implicit none - - character(len=*), intent(in) :: string - integer, intent(in) :: err - - character(len=256) :: errmsg - - if( err.eq.nf90_noerr )return - - errmsg = nf90_strerror(err) - print*,'' - print*,'** FATAL ERROR: ', trim(string), ': ', trim(errmsg) - print*,'STOP.' - call errexit(22) - - return - end subroutine netcdf_err diff --git a/sorc/gaussian_sfcanl.fd/makefile.sh b/sorc/gaussian_sfcanl.fd/makefile.sh deleted file mode 100755 index b1c5adefde..0000000000 --- a/sorc/gaussian_sfcanl.fd/makefile.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -export FFLAGS="-O3 -fp-model precise -g -r8 -i4" -# for debugging -#export FFLAGS="-g -r8 -i4 -warn unused -check bounds" - -export NETCDF_INCLUDE="-I${NETCDF}/include" -export NETCDF_LDFLAGS_F="-L${NETCDF}/lib -lnetcdf -lnetcdff -L${HDF5}/lib -lhdf5 " - -make clean -make build -err=$? -if [ $err -ne 0 ]; then - echo ERROR BUILDING GAUSSIAN_SFCANL - exit 2 -fi -make install - -exit diff --git a/sorc/gaussian_sfcanl.fd/weight_gen/README b/sorc/gaussian_sfcanl.fd/weight_gen/README deleted file mode 100644 index 304c6f0e0e..0000000000 --- a/sorc/gaussian_sfcanl.fd/weight_gen/README +++ /dev/null @@ -1,23 +0,0 @@ -Creates the ESMF integration weight files to transform from cubed-sphere grids -to comparable (in resolution) global gaussian grids. - -First, compile the program that creates the 'scrip' files for the -global gaussian grids. For each resolution, two grids are created: -one normal grid and one grid with two extra rows for the N/S poles. -To compile, cd to ./scrip.fd and type 'make.sh'. Currently, only -compiles/runs on Theia. - -Then, run the 'run.theia.ksh' script for the resolution desired. -Script first calls the 'scrip' program, then calls ESMF utility -'RegridWeightGen' to create the interpolation weight files. - -Weight files for the following transforms are created: - -C48 => 192x94 and 192x96 gaussian -C96 => 384x192 and 384x194 gaussian -C128 => 512x256 and 512x258 gaussian -C192 => 768x384 and 768x386 gaussian -C384 => 1536x768 and 1536x770 gaussian -C768 => 3072x1536 and 3072x1538 gaussian -C1152 => 4608x2304 and 4608x2406 gaussian -C3072 => 12288x6144 and 12288x6146 gaussian diff --git a/sorc/gaussian_sfcanl.fd/weight_gen/run.theia.sh b/sorc/gaussian_sfcanl.fd/weight_gen/run.theia.sh deleted file mode 100755 index c1673fd655..0000000000 --- a/sorc/gaussian_sfcanl.fd/weight_gen/run.theia.sh +++ /dev/null @@ -1,152 +0,0 @@ -#!/bin/sh - -#------------------------------------------------------------------------ -# Run the "RegridWeightGen" step on Theia to create interpolation -# weight files to transform from cubed-sphere tiles to global -# gaussian. -# -# First, create the 'scrip' files for the gaussian grids. Two -# grids are created - the normal gaussian grid, and one with -# two extra rows at the N/S poles. The program to create the -# script files is in ./scrip.fd. To compile, type 'make.sh'. -# Then, run the RegridWeightGen step to create the interpolation -# weight files. -#------------------------------------------------------------------------ - -#PBS -l nodes=1:ppn=1 -#PBS -l walltime=0:30:00 -#PBS -A fv3-cpu -#PBS -q debug -#PBS -N fv3_wgtgen -#PBS -o ./log -#PBS -e ./log - -set -x - -CRES=C48 # run with one mpi task -#CRES=C96 # run with one mpi task -#CRES=C128 # run with one mpi task -#CRES=C192 # run with one mpi task -#CRES=C384 # run with one mpi task -#CRES=C768 # run with 4 mpi tasks -#CRES=C1152 # run with 8 mpi tasks -#CRES=C3072 # run on two nodes, 8 tasks per node - -WORK=/scratch3/NCEPDEV/stmp1/$LOGNAME/weight_gen -rm -fr $WORK -mkdir -p $WORK -cd $WORK - -source /apps/lmod/lmod/init/sh -module purge -module load intel/15.1.133 -module load impi/5.0.1.035 -module use /scratch4/NCEPDEV/nems/noscrub/emc.nemspara/soft/modulefiles -module load esmf/7.1.0r -module load netcdf/4.3.0 -module load hdf5/1.8.14 - -#------------------------------------------------------------------------ -# The RegridWeightGen program. -#------------------------------------------------------------------------ - -RWG=/scratch4/NCEPDEV/nems/noscrub/emc.nemspara/soft/esmf/7.1.0r/bin/ESMF_RegridWeightGen - -#------------------------------------------------------------------------ -# Path to the 'mosaic' and 'grid' files for each cubed-sphere -# resolution. -#------------------------------------------------------------------------ - -FIX_DIR=/scratch4/NCEPDEV/global/save/glopara/svn/fv3gfs/fix/fix_fv3_gmted2010/$CRES - -#------------------------------------------------------------------------ -# Create 'scrip' files for two gaussian grids. One normal grid -# and one with two extra rows at the N/S poles. -#------------------------------------------------------------------------ - -${PBS_O_WORKDIR}/scrip.fd/scrip.exe $CRES - -if [[ $? -ne 0 ]]; then - echo "ERROR CREATING SCRIP FILE" - exit 2 -fi - -#------------------------------------------------------------------------ -# Create weight files. -#------------------------------------------------------------------------ - -case $CRES in - "C48" ) - LONB="192" - LATB="94" - LATB2="96" - ;; - "C96" ) - LONB="384" - LATB="192" - LATB2="194" - ;; - "C128" ) - LONB="512" - LATB="256" - LATB2="258" - ;; - "C192" ) - LONB="768" - LATB="384" - LATB2="386" - ;; - "C384" ) - LONB="1536" - LATB="768" - LATB2="770" - ;; - "C768" ) - LONB="3072" - LATB="1536" - LATB2="1538" - ;; - "C1152" ) - LONB="4608" - LATB="2304" - LATB2="2306" - ;; - "C3072" ) - LONB="12288" - LATB="6144" - LATB2="6146" - ;; - * ) - echo "GRID NOT SUPPORTED" - exit 3 - ;; -esac - -np=$PBS_NP - -mpirun -np $np $RWG -d ./gaussian.${LONB}.${LATB}.nc -s $FIX_DIR/${CRES}_mosaic.nc \ - -w fv3_SCRIP_${CRES}_GRIDSPEC_lon${LONB}_lat${LATB}.gaussian.neareststod.nc \ - -m neareststod --64bit_offset --tilefile_path $FIX_DIR - -mpirun -np $np $RWG -d ./gaussian.${LONB}.${LATB}.nc -s $FIX_DIR/${CRES}_mosaic.nc \ - -w fv3_SCRIP_${CRES}_GRIDSPEC_lon${LONB}_lat${LATB}.gaussian.bilinear.nc \ - -m bilinear --64bit_offset --tilefile_path $FIX_DIR - -mpirun -np $np $RWG -d ./gaussian.${LONB}.${LATB2}.nc -s $FIX_DIR/${CRES}_mosaic.nc \ - -w fv3_SCRIP_${CRES}_GRIDSPEC_lon${LONB}_lat${LATB2}.gaussian.neareststod.nc \ - -m neareststod --64bit_offset --tilefile_path $FIX_DIR - -#------------------------------------------------------------------------ -# Could not get this C3072 bilinear option to work. This grid is -# so big we are pushing the limits of the utility. -#------------------------------------------------------------------------ - -if [[ $CRES == "C3072" ]]; then - exit 0 -fi - -mpirun -np $np $RWG -d ./gaussian.${LONB}.${LATB2}.nc -s $FIX_DIR/${CRES}_mosaic.nc \ - -w fv3_SCRIP_${CRES}_GRIDSPEC_lon${LONB}_lat${LATB2}.gaussian.bilinear.nc \ - -m bilinear --64bit_offset --tilefile_path $FIX_DIR - -exit diff --git a/sorc/gaussian_sfcanl.fd/weight_gen/scrip.fd/make.sh b/sorc/gaussian_sfcanl.fd/weight_gen/scrip.fd/make.sh deleted file mode 100755 index 12ed3eefd9..0000000000 --- a/sorc/gaussian_sfcanl.fd/weight_gen/scrip.fd/make.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/sh - -set -x - -mac=$(hostname -f) - -case $mac in - -#--------------------------------------------------------------------------------- -# BUILD PROGRAM ON WCOSS Phase 1/2. -#--------------------------------------------------------------------------------- - -g????.ncep.noaa.gov | t????.ncep.noaa.gov) - - echo "WCOSS PHASE 1/2 BUILD NOT ADDED YET" - exit 1 ;; - -#--------------------------------------------------------------------------------- -# BUILD PROGRAM ON WCOSS CRAY. -#--------------------------------------------------------------------------------- - -llogin? | slogin?) - - echo "WCOSS CRAY BUILD NOT ADDED YET" - exit 1 ;; - -#--------------------------------------------------------------------------------- -# BUILD PROGRAM ON HERA. -#--------------------------------------------------------------------------------- - -hfe??) - - source /apps/lmod/lmod/init/sh - module purge - - module load intel/18.0.5.274 - - export FCOMP=ifort - export FFLAGS="-O0 -g -traceback -r8 -i4 -convert big_endian -check bounds" - - module load netcdf/4.7.0 - module load hdf5/1.10.5 - export NETCDF_INCLUDE="-I${NETCDF}/include" - export NETCDF_LDFLAGS_F="-L${NETCDF}/lib -lnetcdf -lnetcdff -L${HDF5}/lib -lhdf5 -lhdf5_fortran" - - module use -a /scratch2/NCEPDEV/nwprod/NCEPLIBS/modulefiles - module load sp/2.0.2 - - make clean - make - rc=$? ;; - -*) - - echo "DOES NOT BUILD ON THIS MACHINE." - exit 1 ;; - -esac - -exit diff --git a/sorc/gaussian_sfcanl.fd/weight_gen/scrip.fd/makefile b/sorc/gaussian_sfcanl.fd/weight_gen/scrip.fd/makefile deleted file mode 100755 index 74949b96bb..0000000000 --- a/sorc/gaussian_sfcanl.fd/weight_gen/scrip.fd/makefile +++ /dev/null @@ -1,14 +0,0 @@ -SHELL= /bin/sh - -CMD= scrip.exe - -OBJS = scrip.o - -$(CMD): $(OBJS) - $(FCOMP) $(FFLAGS) $(NETCDF_INCLUDE) -o $(CMD) $(OBJS) $(NETCDF_LDFLAGS_F) $(SP_LIBd) - -scrip.o: scrip.f90 - $(FCOMP) $(FFLAGS) $(NETCDF_INCLUDE) -c scrip.f90 - -clean: - rm -f *.o *.mod ${CMD} *.exe.* diff --git a/sorc/gaussian_sfcanl.fd/weight_gen/scrip.fd/scrip.f90 b/sorc/gaussian_sfcanl.fd/weight_gen/scrip.fd/scrip.f90 deleted file mode 100644 index 5c4d2a4221..0000000000 --- a/sorc/gaussian_sfcanl.fd/weight_gen/scrip.fd/scrip.f90 +++ /dev/null @@ -1,350 +0,0 @@ - program scrip - -!---------------------------------------------------------------------- -! Create "scrip" files that describes a gaussian grid. -! Two files are created: the normal gaussian grid and one with -! two extra rows for the N/S poles. -!---------------------------------------------------------------------- - - implicit none - - character(len=128) :: outfile - character(len=20) :: title - character(len=5) :: idim_ch, jdim_ch, jdimp_ch - character(len=6) :: cres - - integer :: header_buffer_val = 16384 - integer :: fsize=65536, inital = 0 - integer :: error, ncid - integer :: i, j, idim, jdim, ijdim - integer :: jdimp - integer :: dim_size, dim_corners, dim_rank - integer :: id_dims, id_center_lat, id_center_lon - integer :: id_imask, id_corner_lat, id_corner_lon - integer :: num_corners = 4 - integer :: rank = 2 - integer(kind=4), allocatable :: mask(:) - - real(kind=8) :: corner_lon_src - real(kind=8) :: dx_src, lat_edge - real(kind=8), allocatable :: lats(:,:), lons(:,:), dum1d(:) - real(kind=8), allocatable :: dum2d(:,:), latsp(:,:), lonsp(:,:) - real(kind=8), allocatable :: lats_corner(:,:,:), lons_corner(:,:,:) - real(kind=8), allocatable :: latsp_corner(:,:,:), lonsp_corner(:,:,:) - real(kind=8), allocatable :: slat(:), wlat(:) - - include "netcdf.inc" - - call getarg(1, cres) - - select case (trim(cres)) - case ("c48","C48") - idim = 192 ! cres * 4 - jdim = 94 ! cres * 2 - jdimp = 96 ! include two rows for the poles - idim_ch = "192" - jdim_ch = "94" - jdimp_ch = "96" - case ("c96","C96") - idim = 384 ! cres * 4 - jdim = 192 ! cres * 2 - jdimp = 194 ! include two rows for the poles - idim_ch = "384" - jdim_ch = "192" - jdimp_ch = "194" - case ("c128","C128") - idim = 512 ! cres * 4 - jdim = 256 ! cres * 2 - jdimp = 258 ! include two rows for the poles - idim_ch = "512" - jdim_ch = "256" - jdimp_ch = "258" - case ("c192","C192") - idim = 768 ! cres * 4 - jdim = 384 ! cres * 2 - jdimp = 386 ! include two rows for the poles - idim_ch = "768" - jdim_ch = "384" - jdimp_ch = "386" - case ("c384","C384") - idim = 1536 ! cres * 4 - jdim = 768 ! cres * 2 - jdimp = 770 ! include two rows for the poles - idim_ch = "1536" - jdim_ch = "768" - jdimp_ch = "770" - case ("c768","C768") - idim = 3072 ! cres * 4 - jdim = 1536 ! cres * 2 - jdimp = 1538 ! include two rows for the poles - idim_ch = "3072" - jdim_ch = "1536" - jdimp_ch = "1538" - case ("c1152","C1152") - idim = 4608 ! cres * 4 - jdim = 2304 ! cres * 2 - jdimp = 2306 ! include two rows for the poles - idim_ch = "4608" - jdim_ch = "2304" - jdimp_ch = "2306" - case ("c3072","C3072") - idim = 12288 ! cres * 4 - jdim = 6144 ! cres * 2 - jdimp = 6146 ! include two rows for the poles - idim_ch = "12288" - jdim_ch = "6144" - jdimp_ch = "6146" - case default - print*,'- Resolution not supported ', trim(cres) - stop 3 - end select - - corner_lon_src = 0.0 - dx_src = 360.0 / float(idim) - ijdim = idim*jdim - - allocate(slat(jdim)) - allocate(wlat(jdim)) - - call splat(4, jdim, slat, wlat) - - allocate(lats(idim,jdim)) - allocate(lats_corner(num_corners,idim,jdim)) - allocate(lons(idim,jdim)) - allocate(lons_corner(num_corners,idim,jdim)) - - do j = 1, jdim - lats(:,j) = 90.0 - (acos(slat(j))* 180.0 / (4.*atan(1.))) - enddo - - deallocate(slat, wlat) - -!---------------------------------------------------------------- -! First, output file without poles. -!---------------------------------------------------------------- - -!---------------------------------------------------------------- -! Set corners in counter-clockwise order -! -! 2 1 -! -! C -! -! 3 4 -!---------------------------------------------------------------- - - lats_corner(1,:,1) = 90.0 - lats_corner(2,:,1) = 90.0 - - lats_corner(3,:,jdim) = -90.0 - lats_corner(4,:,jdim) = -90.0 - - do j = 1, jdim - 1 - lat_edge = (lats(1,j) + lats(1,j+1)) / 2.0 - lats_corner(3,:,j) = lat_edge - lats_corner(4,:,j) = lat_edge - lats_corner(1,:,j+1) = lat_edge - lats_corner(2,:,j+1) = lat_edge - enddo - - do i = 1, idim - lons(i,:) = corner_lon_src + float(i-1)*dx_src - lons_corner(1,i,:) = lons(i,:) + (dx_src*0.5) - lons_corner(2,i,:) = lons(i,:) - (dx_src*0.5) - lons_corner(3,i,:) = lons(i,:) - (dx_src*0.5) - lons_corner(4,i,:) = lons(i,:) + (dx_src*0.5) - enddo - - i = 1 - j = 1 - print*,'center ',lats(i,j),lons(i,j) - print*,'corner 1 ',lats_corner(1,i,j),lons_corner(1,i,j) - print*,'corner 2 ',lats_corner(2,i,j),lons_corner(2,i,j) - print*,'corner 3 ',lats_corner(3,i,j),lons_corner(3,i,j) - print*,'corner 4 ',lats_corner(4,i,j),lons_corner(4,i,j) - - i = 1 - j = 2 - print*,'center ',lats(i,j),lons(i,j) - print*,'corner 1 ',lats_corner(1,i,j),lons_corner(1,i,j) - print*,'corner 2 ',lats_corner(2,i,j),lons_corner(2,i,j) - print*,'corner 3 ',lats_corner(3,i,j),lons_corner(3,i,j) - print*,'corner 4 ',lats_corner(4,i,j),lons_corner(4,i,j) - - i = 1 - j = jdim - print*,'center ',lats(i,j),lons(i,j) - print*,'corner 1 ',lats_corner(1,i,j),lons_corner(1,i,j) - print*,'corner 2 ',lats_corner(2,i,j),lons_corner(2,i,j) - print*,'corner 3 ',lats_corner(3,i,j),lons_corner(3,i,j) - print*,'corner 4 ',lats_corner(4,i,j),lons_corner(4,i,j) - - i = 1 - j = jdim-1 - print*,'center ',lats(i,j),lons(i,j) - print*,'corner 1 ',lats_corner(1,i,j),lons_corner(1,i,j) - print*,'corner 2 ',lats_corner(2,i,j),lons_corner(2,i,j) - print*,'corner 3 ',lats_corner(3,i,j),lons_corner(3,i,j) - print*,'corner 4 ',lats_corner(4,i,j),lons_corner(4,i,j) - - allocate(mask(ijdim)) - mask = 1 - -! output file without pole. - - outfile = " " - outfile = "./gaussian." // trim(idim_ch) // "." // trim(jdim_ch) // ".nc" - title = " " - title = "gaussian." // trim(idim_ch) // "." // trim(jdim_ch) - -!--- open the file - error = NF__CREATE(outfile, IOR(NF_NETCDF4,NF_CLASSIC_MODEL), inital, fsize, ncid) - print*, 'error after open ', error - -!--- define dimension - error = nf_def_dim(ncid, 'grid_size', ijdim, dim_size) - error = nf_def_dim(ncid, 'grid_corners', num_corners, dim_corners) - error = nf_def_dim(ncid, 'grid_rank', rank, dim_rank) - -!--- define field - error = nf_def_var(ncid, 'grid_dims', NF_INT, 1, (/dim_rank/), id_dims) - error = nf_def_var(ncid, 'grid_center_lat', NF_DOUBLE, 1, (/dim_size/), id_center_lat) - error = nf_put_att_text(ncid, id_center_lat, "units", 7, "degrees") - error = nf_def_var(ncid, 'grid_center_lon', NF_DOUBLE, 1, (/dim_size/), id_center_lon) - error = nf_put_att_text(ncid, id_center_lon, "units", 7, "degrees") - error = nf_def_var(ncid, 'grid_imask', NF_INT, 1, (/dim_size/), id_imask) - error = nf_put_att_text(ncid, id_imask, "units", 8, "unitless") - error = nf_def_var(ncid, 'grid_corner_lat', NF_DOUBLE, 2, (/dim_corners,dim_size/), id_corner_lat) - error = nf_put_att_text(ncid, id_corner_lat, "units", 7, "degrees") - error = nf_def_var(ncid, 'grid_corner_lon', NF_DOUBLE, 2, (/dim_corners,dim_size/), id_corner_lon) - error = nf_put_att_text(ncid, id_corner_lon, "units", 7, "degrees") - error = nf_put_att_text(ncid, NF_GLOBAL, "title", 20, trim(title)) - error = nf__enddef(ncid, header_buffer_val,4,0,4) - -!--- set fields - error = nf_put_var_int( ncid, id_dims, (/idim,jdim/)) - - allocate(dum1d(ijdim)) - dum1d = reshape(lats, (/ijdim/)) - error = nf_put_var_double( ncid, id_center_lat, dum1d) - dum1d = reshape(lons, (/ijdim/)) - error = nf_put_var_double( ncid, id_center_lon, dum1d) - deallocate(dum1d) - - error = nf_put_var_int( ncid, id_imask, mask) - deallocate(mask) - - allocate(dum2d(num_corners,ijdim)) - dum2d = reshape (lats_corner, (/num_corners,ijdim/)) - error = nf_put_var_double( ncid, id_corner_lat, dum2d) - - dum2d = reshape (lons_corner, (/num_corners,ijdim/)) - error = nf_put_var_double( ncid, id_corner_lon, dum2d) - deallocate(dum2d) - - error = nf_close(ncid) - -!---------------------------------------------------------------- -! output file with poles. -!---------------------------------------------------------------- - - outfile = " " - outfile = "./gaussian." // trim(idim_ch) // "." // trim(jdimp_ch) // ".nc" - title = " " - title = "gaussian." // trim(idim_ch) // "." // trim(jdimp_ch) - - ijdim = idim*jdimp - - allocate(latsp(idim,jdimp)) - allocate(lonsp(idim,jdimp)) - - do j = 2, jdim+1 - latsp(:,j) = lats(:,j-1) - lonsp(:,j) = lons(:,j-1) - enddo - - latsp(:,1) = 90.0_8 - lonsp(:,1) = 0.0_8 - - latsp(:,jdimp) = -90.0_8 - lonsp(:,jdimp) = 0.0_8 - - deallocate(lats, lons) - - allocate(latsp_corner(num_corners,idim,jdimp)) - allocate(lonsp_corner(num_corners,idim,jdimp)) - - latsp_corner(:,:,1) = 89.5_8 - latsp_corner(:,:,jdimp) = -89.5_8 - - lonsp_corner(1,:,1) = 0.0_8 - lonsp_corner(2,:,1) = 90.0_8 - lonsp_corner(3,:,1) = 180.0_8 - lonsp_corner(4,:,1) = 270.0_8 - - lonsp_corner(1,:,jdimp) = 0.0_8 - lonsp_corner(2,:,jdimp) = 90.0_8 - lonsp_corner(3,:,jdimp) = 180.0_8 - lonsp_corner(4,:,jdimp) = 270.0_8 - - do j = 2, jdim+1 - latsp_corner(:,:,j) = lats_corner(:,:,j-1) - lonsp_corner(:,:,j) = lons_corner(:,:,j-1) - enddo - - deallocate(lats_corner, lons_corner) - -!--- open the file - error = NF__CREATE(outfile, IOR(NF_NETCDF4,NF_CLASSIC_MODEL), inital, fsize, ncid) - print*, 'error after open ', error - -!--- define dimension - error = nf_def_dim(ncid, 'grid_size', ijdim, dim_size) - error = nf_def_dim(ncid, 'grid_corners', num_corners, dim_corners) - error = nf_def_dim(ncid, 'grid_rank', rank, dim_rank) - -!--- define field - error = nf_def_var(ncid, 'grid_dims', NF_INT, 1, (/dim_rank/), id_dims) - error = nf_def_var(ncid, 'grid_center_lat', NF_DOUBLE, 1, (/dim_size/), id_center_lat) - error = nf_put_att_text(ncid, id_center_lat, "units", 7, "degrees") - error = nf_def_var(ncid, 'grid_center_lon', NF_DOUBLE, 1, (/dim_size/), id_center_lon) - error = nf_put_att_text(ncid, id_center_lon, "units", 7, "degrees") - error = nf_def_var(ncid, 'grid_imask', NF_INT, 1, (/dim_size/), id_imask) - error = nf_put_att_text(ncid, id_imask, "units", 8, "unitless") - error = nf_def_var(ncid, 'grid_corner_lat', NF_DOUBLE, 2, (/dim_corners,dim_size/), id_corner_lat) - error = nf_put_att_text(ncid, id_corner_lat, "units", 7, "degrees") - error = nf_def_var(ncid, 'grid_corner_lon', NF_DOUBLE, 2, (/dim_corners,dim_size/), id_corner_lon) - error = nf_put_att_text(ncid, id_corner_lon, "units", 7, "degrees") - error = nf_put_att_text(ncid, NF_GLOBAL, "title", 20, trim(title)) - error = nf__enddef(ncid, header_buffer_val,4,0,4) - -!--- set fields - error = nf_put_var_int( ncid, id_dims, (/idim,jdimp/)) - - allocate(dum1d(ijdim)) - dum1d = reshape(latsp, (/ijdim/)) - error = nf_put_var_double( ncid, id_center_lat, dum1d) - dum1d = reshape(lonsp, (/ijdim/)) - error = nf_put_var_double( ncid, id_center_lon, dum1d) - deallocate(dum1d) - - allocate(mask(ijdim)) - mask = 1 - error = nf_put_var_int( ncid, id_imask, mask) - deallocate(mask) - - allocate(dum2d(num_corners,ijdim)) - dum2d = reshape (latsp_corner, (/num_corners,ijdim/)) - print*,'lat corner check ',maxval(dum2d),minval(dum2d) - error = nf_put_var_double( ncid, id_corner_lat, dum2d) - deallocate(latsp_corner) - - dum2d = reshape (lonsp_corner, (/num_corners,ijdim/)) - error = nf_put_var_double( ncid, id_corner_lon, dum2d) - deallocate(dum2d, lonsp_corner) - - error = nf_close(ncid) - - print*,'- DONE.' - - end program scrip diff --git a/sorc/gfs_bufr.fd/bfrhdr.f b/sorc/gfs_bufr.fd/bfrhdr.f deleted file mode 100755 index 8bab3043bc..0000000000 --- a/sorc/gfs_bufr.fd/bfrhdr.f +++ /dev/null @@ -1,174 +0,0 @@ - SUBROUTINE BFRHDR ( luntbl, cseqn, prfflg, clist, np, iret ) -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: PROGRAM NAME (up to 20 characters) -C PRGMMR: YOUR NAME ORG: W/NMCXX DATE: YY-MM-DD -C -C ABSTRACT: START ABSTRACT HERE AND INDENT TO COLUMN 5 ON THE -C FOLLOWING LINES. PLEASE PROVIDE A BRIEF DESCRIPTION OF -C WHAT THE SUBPROGRAM DOES. -C -C PROGRAM HISTORY LOG: -C YY-MM-DD ORIGINAL PROGRAMMER'S NAME HERE -C YY-MM-DD MODIFIER1 DESCRIPTION OF CHANGE -C YY-MM-DD MODIFIER2 DESCRIPTION OF CHANGE -C -C USAGE: CALL PROGRAM-NAME(INARG1, INARG2, WRKARG, OUTARG1, ... ) -C INPUT ARGUMENT LIST: -C INARG1 - GENERIC DESCRIPTION, INCLUDING CONTENT, UNITS, -C INARG2 - TYPE. EXPLAIN FUNCTION IF CONTROL VARIABLE. -C -C OUTPUT ARGUMENT LIST: (INCLUDING WORK ARRAYS) -C WRKARG - GENERIC DESCRIPTION, ETC., AS ABOVE. -C OUTARG1 - EXPLAIN COMPLETELY IF ERROR RETURN -C ERRFLAG - EVEN IF MANY LINES ARE NEEDED -C -C INPUT FILES: (DELETE IF NO INPUT FILES IN SUBPROGRAM) -C -C OUTPUT FILES: (DELETE IF NO OUTPUT FILES IN SUBPROGRAM) -C -C REMARKS: LIST CAVEATS, OTHER HELPFUL HINTS OR INFORMATION -C -C ATTRIBUTES: -C LANGUAGE: INDICATE EXTENSIONS, COMPILER OPTIONS -C MACHINE: IBM SP -C -C$$$ -C*********************************************************************** -C* BFRHDR -C* -C* This subroutine reads a Jack Woollen BUFR encoding table file to -C* get the string of parameters to be written. This subroutine is -C* given the sequence nmemonic and returns the list associated with it. -C* This list is a character string and is used as the last input to -C* UFBINT. -C* -C* -C* BFRHDR ( LUNTBL, CSEQN, PRFFLG, CLIST, NP, IRET ) -C* -C* Input parameters: -C* LUNTBL INTEGER Unit number of BUFR Table file -C* CSEQN CHAR* Sequence mnemonic -C* PRFFLG LOGICAL Flag for profile parms -C* = .true. for multi-level parms -C* -C* Output parameters: -C* CLIST CHAR* String of parm names -C* NP INTEGER Number of parm names in string -C* IRET INTEGER Return code -C* 0 = normal return -C* -1 = Improper table file -C* -2 = Sequence not found -C** -C* Log: -C* K. Brill/NMC 05/94 -C*********************************************************************** -C* - CHARACTER*(*) cseqn, clist - LOGICAL prfflg -C* - LOGICAL found - CHARACTER*80 sbuf -C -C* Set starting column number of parameter list in the table. -C - DATA istart / 14 / -C----------------------------------------------------------------------- - iret = 0 -C -C* Count the number of lines to end of file (used to reposition -C* pointer to original line at the end). -C - found = .true. - lcnt = 1 - DO WHILE ( found ) - READ ( luntbl, 1000, IOSTAT=ios ) sbuf -1000 FORMAT (A) - IF ( ios .ne. 0 ) THEN - found = .false. - ELSE - lcnt = lcnt + 1 - END IF - END DO -C -C* Read from the file for positioning. -C - REWIND luntbl - found = .false. - DO WHILE ( .not. found ) - READ (luntbl, 1000, IOSTAT=ios ) sbuf - IF ( ios .ne. 0 ) THEN - iret = -1 - RETURN - END IF - iq1 = INDEX ( sbuf, '| REFERENCE' ) - iq2 = INDEX ( sbuf, '| UNITS' ) - iq = iq1 * iq2 - IF ( iq .ne. 0 ) found = .true. - END DO -C -C* Get length of sequence mnemonic string. -C - lc = LEN ( cseqn ) - DO WHILE ( cseqn ( lc:lc ) .eq. ' ' ) - lc = lc-1 - END DO -C -C* Start searching backward for the sequence mnemonic. -C - found = .false. - lenc=0 - DO WHILE ( .not. found ) - BACKSPACE luntbl - READ ( luntbl, 1000, IOSTAT=ios ) sbuf - IF ( ios .ne. 0 .or. sbuf (1:2) .eq. '.-' ) THEN - iret = -2 - RETURN - END IF - BACKSPACE luntbl - iq = INDEX ( sbuf ( 1:14 ), cseqn ( 1:lc ) ) - IF ( iq .ne. 0 ) THEN - found = .true. -C -C* Find the last character of last parameter. -C - i = 79 - DO WHILE ( sbuf ( i:i ) .eq. ' ' ) - i = i - 1 - END DO - clist = ' ' - clist = sbuf ( istart:i ) -C -C* Count the number of entries in CLIST. -C - lenc = i - istart + 1 - nspcs = 0 - np = 0 - DO j = 1, lenc - IF ( clist ( j:j ) .eq. ' ' ) nspcs = nspcs + 1 - END DO - np = nspcs + 1 -C -C* Handle profile sequence. -C - IF ( prfflg ) THEN -C sbuf = cseqn ( 1:lc ) // '^ ' // clist ( 1:lenc ) - sbuf = clist ( 1:lenc ) - clist = sbuf - END IF - END IF - END DO -C -C* Reposition file to original record. -C - found = .true. - DO WHILE ( found ) - READ ( luntbl, 1000, IOSTAT=ios ) sbuf - IF ( ios .ne. 0 ) found = .false. - END DO - DO k = 1, lcnt - BACKSPACE luntbl - END DO -C* - RETURN - END diff --git a/sorc/gfs_bufr.fd/bfrize.f b/sorc/gfs_bufr.fd/bfrize.f deleted file mode 100755 index 1183c62f34..0000000000 --- a/sorc/gfs_bufr.fd/bfrize.f +++ /dev/null @@ -1,241 +0,0 @@ - SUBROUTINE BFRIZE ( luntbl, lunbfr, sbset, iyr, imn, idy, ihr, - + seqnam, seqflg, nseq, lvlwise, data, nlvl, - + clist, npp, wrkd, iret ) -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: PROGRAM NAME (up to 20 characters) -C PRGMMR: YOUR NAME ORG: W/NMCXX DATE: YY-MM-DD -C -C ABSTRACT: START ABSTRACT HERE AND INDENT TO COLUMN 5 ON THE -C FOLLOWING LINES. PLEASE PROVIDE A BRIEF DESCRIPTION OF -C WHAT THE SUBPROGRAM DOES. -C -C PROGRAM HISTORY LOG: -C YY-MM-DD ORIGINAL PROGRAMMER'S NAME HERE -C YY-MM-DD MODIFIER1 DESCRIPTION OF CHANGE -C YY-MM-DD MODIFIER2 DESCRIPTION OF CHANGE -C -C USAGE: CALL PROGRAM-NAME(INARG1, INARG2, WRKARG, OUTARG1, ... ) -C INPUT ARGUMENT LIST: -C INARG1 - GENERIC DESCRIPTION, INCLUDING CONTENT, UNITS, -C INARG2 - TYPE. EXPLAIN FUNCTION IF CONTROL VARIABLE. -C -C OUTPUT ARGUMENT LIST: (INCLUDING WORK ARRAYS) -C WRKARG - GENERIC DESCRIPTION, ETC., AS ABOVE. -C OUTARG1 - EXPLAIN COMPLETELY IF ERROR RETURN -C ERRFLAG - EVEN IF MANY LINES ARE NEEDED -C -C INPUT FILES: (DELETE IF NO INPUT FILES IN SUBPROGRAM) -C -C OUTPUT FILES: (DELETE IF NO OUTPUT FILES IN SUBPROGRAM) -C -C REMARKS: LIST CAVEATS, OTHER HELPFUL HINTS OR INFORMATION -C -C ATTRIBUTES: -C LANGUAGE: INDICATE EXTENSIONS, COMPILER OPTIONS -C MACHINE: IBM SP -C -C$$$ -C*********************************************************************** -C* BFRIZE -C* -C* This subroutine calls Jack Woollen's BUFR encoding routines to -C* write a BUFR message to an output file. SBSET is the Mnemonic -C* for the TABLE A entry associated with this message. It appears -C* in the table referenced by LUNTBL. If LUNTBL = 0, the output -C* BUFR file is closed. -C* -C* The data in the array DATA are ordered according to the individual -C* elements of the Sequences given in SEQNAM. The contents of SEQNAM -C* and SEQFLG and, consequently of DATA, are determined by the BUFR -C* table file referenced by LUNTBL. Each entry in SEQNAM has a list of -C* parameters associated with it in the table. This list is read from -C* the table and the number of parameters is determined. This -C* information is stored in CLIST and NPP for future calls to BFRIZE. -C* If the parameters associated with the entry in SEQNAM exist on NLVL -C* levels, the corresponding array element of SEQFLG must be .true.; -C* otherwise, it is .false. -C* -C* Profile data in array DATA may be stored such that contiguous -C* elements are values of different parameters on the same level -C* (parameter-wise storage) or the same parameter on different levels -C* (level-wise storage). If LVLWISE=.false. parameter-wise storage -C* is assumed; otherwise, LVLWISE=.true. and level-wise storage is -C* assumed. -C* -C* The example below shows the contents of SEQNAM, SEQFLG, and DATA -C* for a case when NLVL=3, LVLWISE=.true., and the table file has the -C* following entries for the Mnemonic Sequences: -C* -C* MNEMONIC | SEQUENCE -C* -C* MODELOUT | HDR {PROF} SFC -C* HDR | RLAT RLON -C* PROF | PRES TMPK -C* SFC | PMSL PRCP -C* -C* SEQNAM and SEQFLG have the following assigned entries: -C* -C* INDEX SEQNAM SEQFLG -C* 1 HDR .false. -C* 2 PROF .true. -C* 3 SFC .false. -C* -C* DATA must contain the following values in this order: -C* -C* DATA (1) = rlat DATA (6) = tmpk (1) -C* DATA (2) = rlon DATA (7) = tmpk (2) -C* DATA (3) = pres (1) DATA (8) = tmpk (3) -C* DATA (4) = pres (2) DATA (9) = pmsl -C* DATA (5) = pres (3) DATA (10) = prcp -C* -C* The lower-case names above signify numerical values of the -C* parameters. The values of multiple level parameters are stored -C* contiguously. -C* -C* To add a new output parameter, update the table file by adding the -C* Mnemonic for the parameter to an existing Sequence or by adding -C* a new Sequence. If a new Sequence has been added, SEQNAM and -C* SEQFLG must be updated accordingly. In any case, the new output -C* parameter value must be placed in the correct position within the -C* array DATA. -C* -C* CLIST contains the lists of parameter names for each element of -C* SEQNAM. If CLIST (1) is blank, BFRHDR is called with SEQNAM and -C* SEQFLG as inputs to load the names of the parameters into CLIST; -C* otherwise, the names in CLIST are used. For every element of -C* SEQNAM there is a corresponding element of CLIST. For each element -C* of CLIST, there is a corresponding element of NPP giving the number -C* of parameter names in the list. -C* -C* DATA (i) = 10.E+10 is the missing value. -C* -C* WRKD is a scratch array and should be dimensioned the same size as -C* data. WRKD is not used if LVLWISE=.false. -C* -C* BFRIZE ( LUNTBL, LUNBFR, SBSET, IYR, IMN, IDY, IHR, -C* SEQNAM, SEQFLG, NSEQ, LVLWISE, DATA, NLVL, CLIST, NPP, -C* WRKD, IRET ) -C* -C* Input parameters: -C* LUNTBL INTEGER Unit number of BUFR Table file -C* LUNBFR INTEGER Unit number of BUFR data file -C* SBSET CHAR* BUFR subset name -C* IYR INTEGER 4-digit year -C* IMN INTEGER 2-digit month -C* IDY INTEGER 2-digit day -C* IHR INTEGER 2-digit cycle hour -C* SEQNAM (NSEQ) CHAR* Mnemonic Sequence names -C* SEQFLG (NSEQ) LOGICAL Multi-level flag -C* NSEQ INTEGER Number of Sequence names & flags -C* LVLWISE LOGICAL Level-wise profile data flag -C* DATA (*) REAL Data array -C* NLVL INTEGER Number of levels -C* -C* Input and Output parameters: -C* CLIST (NSEQ) CHAR* Parameter name lists -C* NPP (NSEQ) INTEGER Number of parameter names -C* -C* Output parameters: -C* WRKD (*) REAL Array of reordered profile data -C* IRET INTEGER Return code -C* 0 = normal return -C** -C* Log: -C* K. Brill/NMC 05/94 -C* K. Brill/NMC 06/94 Added LVLWISE, CLIST, NPP, WRKD -C 98-08-28 ROZWODOSKI MADE CHANGES FOR Y2K COMPLIANCE. -C*********************************************************************** - REAL*8 data (*) - INTEGER npp (*), nlvl (*) - CHARACTER*(*) seqnam (*), sbset - LOGICAL seqflg (*), lvlwise - CHARACTER*(*) clist (*) - REAL*8 wrkd (*) -C----------------------------------------------------------------------- - iret = 0 -c print*,'Bufriz.f is creating bufr file' - -C -C* Close BUFR file if LUNTBL = 0. -C - IF ( luntbl .eq. 0 ) THEN - CALL CLOSBF ( lunbfr ) - RETURN - END IF -C -C* Check the status of the output BUFR file. -C - CALL STATUS ( lunbfr, lun, iopn, imm ) - IF ( iopn .eq. 0 ) THEN - CALL SETBLOCK(1) - CALL OPENBF ( lunbfr, 'OUT', luntbl ) - CALL DATELEN ( 10 ) - END IF -C -C* Open a new message. -C - idate = iyr * 1000000 + imn * 10000 + idy * 100 + ihr -c print *, 'Bufriz idate = ', idate - CALL OPENMB ( lunbfr, sbset, idate ) -C -C* Create the parameter name lists if CLIST (1) is blank. -C -c print *, 'clist (1) = ', clist(1) -c print *, 'npp (1) = ', npp(1) -c print *, 'seqnam (1) = ', seqnam(1) -c print *, 'seqflg (1) = ', seqflg(1) -c print *, 'nseq = ', nseq - IF ( clist (1) .eq. ' ' ) THEN - DO is = 1, nseq - CALL BFRHDR ( luntbl, seqnam (is), seqflg (is), - + clist (is), npp (is), iret ) - IF ( iret .ne. 0 ) RETURN - END DO - END IF -C -C* Load the sequences. -C - idpntr = 1 - indxlv = 0 - DO is = 1, nseq - np = npp (is) - IF ( seqflg (is) ) THEN - indxlv = indxlv + 1 - IF ( lvlwise ) THEN -C -C* This is level-wise multi-level data. -C - istrt = idpntr - indx = 0 - DO k = 1, nlvl (indxlv) - DO ip = 1, np - indx = indx + 1 - wrkd ( indx ) = - + data ( istrt + (ip-1) * nlvl (indxlv) ) - END DO - istrt = istrt + 1 - END DO - CALL UFBINT ( lunbfr, wrkd, np, nlvl (indxlv), - + irtrn, clist (is) ) - ELSE -C -C* This is parameter-wise multi-level data. -C - CALL UFBINT ( lunbfr, data (idpntr), np, - + nlvl (indxlv), irtrn, clist (is) ) - END IF - idpntr = idpntr + np * nlvl (indxlv) - ELSE -C -C* This is single-level data. -C - CALL UFBINT ( lunbfr, data (idpntr), - + np, 1, irtrn, clist (is) ) - idpntr = idpntr + np - END IF - END DO - CALL WRITSB ( lunbfr ) -C* - RETURN - END diff --git a/sorc/gfs_bufr.fd/buff.f b/sorc/gfs_bufr.fd/buff.f deleted file mode 100755 index 5441fbf5a8..0000000000 --- a/sorc/gfs_bufr.fd/buff.f +++ /dev/null @@ -1,92 +0,0 @@ - subroutine buff(nint1,nend1,nint3,nend3,npoint,idate,jdate,levs, - & dird,lss,istat,sbset,seqflg,clist,npp,wrkd) - character*150 dird, fnbufr, fmto -!! integer nint, nend, npoint, idate(4), levs, jdate - integer nint1, nend1, nint3, nend3 - integer npoint, idate(4), levs, jdate - real*8 data(6*levs+25), wrkd(1) - integer idtln, nf, nfile, np - integer lss, istat(npoint), ios - CHARACTER*150 FILESEQ - CHARACTER*8 SBSET - LOGICAL SEQFLG(4) - CHARACTER*80 CLIST(4) - INTEGER NPP(4) - CHARACTER*8 SEQNAM(4) - FMTO = '(A,".",I6.6,".",I10)' - idtln = 8 - nfile = 20 -C print *, 'inside buff.f nint1,nend1,nint3,nend3,jdate=' -C print *, nint1,nend1,nint3,nend3,jdate - do nf = 0, nend1, nint1 - nfile = nfile + 1 - rewind nfile - enddo - do nf = nend1+nint3, nend3, nint3 - nfile = nfile + 1 - rewind nfile - enddo - do np = 1, npoint -C OPEN BUFR OUTPUT FILE. - write(fnbufr,fmto) dird(1:lss),istat(np),jdate - print *, ' fnbufr =', fnbufr - open(unit=19,file=fnbufr,form='unformatted', - & status='new', iostat=ios) - IF ( ios .ne. 0 ) THEN - WRITE (6,*) ' CANNOT open ', 19 - STOP - END IF - CALL OPENBF ( 19, 'OUT', 1 ) - nfile = 20 - do nf = 0, nend1, nint1 - nfile = nfile + 1 - read(nfile) data - if(np.eq.1) then - print *, ' creating bufr file for np, nfile =', - & np, nfile - endif -CC WRITE DATA MESSAGE TO BUFR OUTPUT FILE. -CC LUNTBL=-9 BECAUSE BUFR TABLE FILE NOT USED HERE. -CC SEQNAM=XXXXXX BECAUSE MNEMONIC SEQUENCE NAMES NOT USED HERE. - CALL BFRIZE ( -9, 19, SBSET, - & idate(4), iDATE(2), - & iDATE(3), iDATE(1), - & 'XXXXXX', SEQFLG, 4, .FALSE., DATA, levs, - & CLIST, NPP, WRKD, IRET ) - IF ( IRET .NE. 0 ) THEN - PRINT *,' BFRIZE FAILED ' - ENDIF -c 300 continue - enddo -C 3hourly output starts here -!! print *, 'buff.f nfile,nend1+nint3,nend3,nint3=' -!! print *, nfile,nend1+nint3,nend3,nint3 - do nf = nend1+nint3, nend3, nint3 - nfile = nfile + 1 - read(nfile) data - if(np.eq.1) then - print *, ' creating bufr file for np, nfile =', - & np, nfile - endif -C print *, 'read2 in fort(nfile) =', nfile -CC WRITE DATA MESSAGE TO BUFR OUTPUT FILE. -CC LUNTBL=-9 BECAUSE BUFR TABLE FILE NOT USED HERE. -CC SEQNAM=XXXXXX BECAUSE MNEMONIC SEQUENCE NAMES NOT USED HERE. - CALL BFRIZE ( -9, 19, SBSET, - & idate(4), iDATE(2), - & iDATE(3), iDATE(1), - & 'XXXXXX', SEQFLG, 4, .FALSE., DATA, levs, - & CLIST, NPP, WRKD, IRET ) - IF ( IRET .NE. 0 ) THEN - PRINT *,' BFRIZE FAILED ' - ENDIF - enddo - CALL BFRIZE ( 0, 19, SBSET, - & IDATE(4), IDATE(2), - & IDATE(3), IDATE(1), - & 'XXXXXX', SEQFLG, 4, .FALSE., DATA, levs, - & CLIST, NPP, WRKD, IRET ) - call closbf(19) - enddo - return - end diff --git a/sorc/gfs_bufr.fd/calpreciptype.f b/sorc/gfs_bufr.fd/calpreciptype.f deleted file mode 100644 index 2307231337..0000000000 --- a/sorc/gfs_bufr.fd/calpreciptype.f +++ /dev/null @@ -1,1616 +0,0 @@ -SUBROUTINE CALPRECIPTYPE(kdt,nrcm,im,ix,lm,lp1,randomno, & - xlat,xlon, & - gt0,gq0,prsl,prsi,PREC, & !input - phii,n3dfercld,TSKIN,SR,phy_f3d, & !input - DOMR,DOMZR,DOMIP,DOMS) !output -! SUBROUTINE CALPRECIPTYPE(nrcm,randomno,im,lm,lp1,T,Q,PMID,PINT,PREC, & !input -! ZINT,n3dfercld,TSKIN,SR,F_RimeF, & !input -! DOMR,DOMZR,DOMIP,DOMS) !output -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! . . . -! SUBPROGRAM: CALPRECIPTYPE COMPUTE DOMINANT PRECIP TYPE -! PRGRMMR: CHUANG ORG: W/NP2 DATE: 2008-05-28 -! -! -! ABSTRACT: -! THIS ROUTINE COMPUTES PRECIPITATION TYPE. -! . It is adopted from post but was made into a column to used by GFS model -! -! -! use vrbls3d -! use vrbls2d -! use soil -! use masks -! use params_mod -! use ctlblk_mod -! use rqstfld_mod - USE FUNCPHYS, ONLY : gfuncphys,fpvs,ftdp,fpkap,ftlcl,stma,fthe - USE PHYSCONS -!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none -! -! INCLUDE "mpif.h" -! -! IN NGM SUBROUTINE OUTPUT WE FIND THE FOLLOWING COMMENT. -! "IF THE FOLLOWING THRESHOLD VALUES ARE CHANGED, CONTACT -! TDL/SYNOPTIC-SCALE TECHNIQUES BRANCH (PAUL DALLAVALLE -! AND JOHN JENSENIUS). THEY MAY BE USING IT IN ONE OF -! THEIR PACKING CODES." THE THRESHOLD VALUE IS 0.01 INCH -! OR 2.54E-4 METER. PRECIPITATION VALUES LESS THAN THIS -! THRESHOLD ARE SET TO MINUS ONE TIMES THIS THRESHOLD. - - real,PARAMETER :: PTHRESH = 0.0 -! -! SET CELCIUS TO KELVIN AND SECOND TO HOUR CONVERSION. - integer,PARAMETER :: NALG = 5 -! -! DECLARE VARIABLES. -! - integer,intent(in) :: kdt,nrcm,im,ix,lm,lp1,n3dfercld - real,intent(in) :: xlat(im),xlon(im) - real,dimension(im),intent(in) :: PREC,SR,TSKIN - real,intent(in) :: randomno(ix,nrcm) - real,dimension(ix,LM),intent(in) :: gt0,gq0,prsl,phy_f3d - real,dimension(ix,lp1),intent(in) :: prsi,phii - real,dimension(im),intent(out) :: DOMR,DOMZR,DOMIP,DOMS - INTEGER :: IWX1,IWX4,IWX5 - REAL :: IWX2,IWX3 - REAL :: ES,QC - REAL :: SLEET(NALG),RAIN(NALG),FREEZR(NALG),SNOW(NALG) - real,dimension(LM) :: T,Q,PMID,F_RimeF - real,dimension(lp1) :: pint,zint - REAL, ALLOCATABLE :: RH(:) - REAL(kind=kind_phys), ALLOCATABLE :: TD8(:) - integer :: I,IWX,ISNO,IIP,IZR,IRAIN,k,k1 - real :: time_vert,time_ncep,time_ramer,time_bourg,time_revised,& - time_dominant,btim,timef - real(kind=kind_phys) :: pv8,pr8,pk8,tr8,tdpd8,tlcl8,thelcl8 - real(kind=kind_phys) :: qwet8,t8(lm) - real(kind=kind_phys),allocatable :: twet8(:) - -! convert geopotential to height -! do l=1,lp1 -! zint(l)=zint(l)/con_g -! end do -! DON'T FORGET TO FLIP 3D ARRAYS AROUND BECAUSE GFS COUNTS FROM BOTTOM UP - - ALLOCATE ( RH(LM),TD8(LM),TWET8(LM) ) - -! Create look up table - call gfuncphys - - time_vert = 0. - time_ncep = 0. - time_ramer = 0. - time_bourg = 0. - time_revised = 0. - - do i=1,im -! print *, 'in calprecip xlat/xlon=', xlat(im),xlon(im),'levs=',lm - do k=1,lm - k1 = lm-k+1 - t8(k1) = gt0(i,k) - q(k1) = gq0(i,k) - pmid(k1) = prsl(i,k) - f_rimef(k1) = phy_f3d(i,k) - pv8 = pmid(k1)*q(k1)/(con_eps-con_epsm1*q(k1)) - td8(k1) = ftdp(pv8) - tdpd8 = t8(k1)-td8(k1) - if(pmid(k1)>=50000.)then ! only compute twet below 500mb to save time - if(tdpd8.gt.0.) then - pr8 = pmid(k1) - tr8 = t8(k1) - pk8 = fpkap(pr8) - tlcl8 = ftlcl(tr8,tdpd8) - thelcl8 = fthe(tlcl8,pk8*tlcl8/tr8) - call stma(thelcl8,pk8,twet8(k1),qwet8) - else - twet8(k1)=t8(k1) - endif - endif - ES = FPVS(T8(k1)) - ES = MIN(ES,PMID(k1)) - QC = CON_EPS*ES/(PMID(k1)+CON_EPSM1*ES) - RH(k1) = MAX(con_epsq,Q(k1))/QC - k1 = lp1-k+1 - pint(k1) = prsi(i,k) - zint(k1) = phii(i,k) !height in meters - enddo - pint(1) = prsi(i,lp1) - zint(1) = phii(i,lp1) - -! print*,'debug in calpreciptype: i,im,lm,lp1,xlon,xlat,prec,tskin,sr,nrcm,randomno,n3dfercld ', & -! i,im,lm,lp1,xlon(i)*57.29578,xlat(i)*57.29578,prec(i),tskin(i),sr(i), & -! nrcm,randomno(i,1:nrcm),n3dfercld -! do l=1,lm -! print*,'debug in calpreciptype: l,t,q,p,pint,z,twet', & -! l,t(l),q(l), & -! pmid(l),pint(l),zint(l),twet(l) -! end do -! print*,'debug in calpreciptype: lp1,pint,z ', lp1,pint(lp1),zint(lp1) -! end if -! end debug print statement - - CALL CALWXT(lm,lp1,T8(1),Q(1),PMID(1),PINT(1),PREC(i), & - PTHRESH,con_fvirt,con_rog,con_epsq, & - ZINT(1),IWX1,TWET8(1)) - IWX = IWX1 - ISNO = MOD(IWX,2) - IIP = MOD(IWX,4)/2 - IZR = MOD(IWX,8)/4 - IRAIN = IWX/8 - SNOW(1) = ISNO*1.0 - SLEET(1) = IIP*1.0 - FREEZR(1) = IZR*1.0 - RAIN(1) = IRAIN*1.0 -! print *, 'inside calprecip after calwxt iwx =',iwx -! DOMINANT PRECIPITATION TYPE -!GSM IF DOMINANT PRECIP TYPE IS REQUESTED, 4 MORE ALGORITHMS -!GSM WILL BE CALLED. THE TALLIES ARE THEN SUMMED IN -!GSM CALWXT_DOMINANT - - -! write(0,*)' i=',i,' lm=',lm,' lp1=',lp1,' T=',T(1),q(1),pmid(1) & -! &,' pint=',pint(1),' prec=',prec(i),' pthresh=',pthresh - - CALL CALWXT_RAMER(lm,lp1,T8(1),Q(1),PMID(1),RH(1),TD8(1), & - PINT(1),PREC(i),PTHRESH,IWX2) -! - IWX = NINT(IWX2) - ISNO = MOD(IWX,2) - IIP = MOD(IWX,4)/2 - IZR = MOD(IWX,8)/4 - IRAIN = IWX/8 - SNOW(2) = ISNO*1.0 - SLEET(2) = IIP*1.0 - FREEZR(2) = IZR*1.0 - RAIN(2) = IRAIN*1.0 -! print *, 'inside calprecip after ramer iwx=',iwx -! BOURGOUIN ALGORITHM - CALL CALWXT_BOURG(LM,LP1,randomno(i,1),con_g,PTHRESH, & - & T8(1),Q(1),PMID(1),PINT(1),PREC(i),ZINT(1),IWX3) - -! - IWX = NINT(IWX3) - ISNO = MOD(IWX,2) - IIP = MOD(IWX,4)/2 - IZR = MOD(IWX,8)/4 - IRAIN = IWX/8 - SNOW(3) = ISNO*1.0 - SLEET(3) = IIP*1.0 - FREEZR(3) = IZR*1.0 - RAIN(3) = IRAIN*1.0 -! print *, 'inside calprecip after bourg iwx=',iwx - -! REVISED NCEP ALGORITHM - CALL CALWXT_REVISED(LM,LP1,T8(1),Q(1),PMID(1),PINT(1),PREC(i),PTHRESH, & - con_fvirt,con_rog,con_epsq,ZINT(1),TWET8(1),IWX4) - -! - IWX = IWX4 - ISNO = MOD(IWX,2) - IIP = MOD(IWX,4)/2 - IZR = MOD(IWX,8)/4 - IRAIN = IWX/8 - SNOW(4) = ISNO*1.0 - SLEET(4) = IIP*1.0 - FREEZR(4) = IZR*1.0 - RAIN(4) = IRAIN*1.0 -! print *, 'inside calprecip after revised iwx=',iwx -! EXPLICIT ALGORITHM (UNDER 18 NOT ADMITTED WITHOUT PARENT -! OR GUARDIAN) - - IF(n3dfercld == 3) then ! Ferrier's scheme - CALL CALWXT_EXPLICIT(LM,PTHRESH, & - TSKIN(i),PREC(i),SR(i),F_RimeF(1),IWX5) - else - IWX5 = 0 - endif -! - IWX = IWX5 - ISNO = MOD(IWX,2) - IIP = MOD(IWX,4)/2 - IZR = MOD(IWX,8)/4 - IRAIN = IWX/8 - SNOW(5) = ISNO*1.0 - SLEET(5) = IIP*1.0 - FREEZR(5) = IZR*1.0 - RAIN(5) = IRAIN*1.0 -! - CALL CALWXT_DOMINANT(NALG,PREC(i),PTHRESH,RAIN(1),FREEZR(1),SLEET(1), & - SNOW(1),DOMR(i),DOMZR(i),DOMIP(i),DOMS(i)) - -! if (DOMS(i).eq.1.) then -! print *, 'Found SNOW at xlat/xlon',xlat,xlon -! elseif (DOMR(i).eq.1.) then -! print *, 'Found RAIN at xlat/xlon',xlat,xlon -! elseif(DOMZR(i).eq.1.) then -! print *, 'Found FREEZING RAIN at xlat/xlon',xlat,xlon -! elseif(DOMIP(i).eq.1.) then -! print *, 'Found ICE at xlat/xlon',xlat,xlon -! endif -! print *, 'In calpre DOMS,DOMR,DOMZR,DOMIP =', int(DOMS),int(DOMR),int(DOMZR),int(DOMIP) - - enddo ! end loop for i - - DEALLOCATE (TWET8,RH,TD8) - RETURN - END -! -!&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& -! - SUBROUTINE CALWXT(lm,lp1,T,Q,PMID,PINT,PREC, & - PTHRESH,D608,ROG,EPSQ, & - ZINT,IWX,TWET) -! -! FILE: CALWXT.f -! WRITTEN: 11 NOVEMBER 1993, MICHAEL BALDWIN -! REVISIONS: -! 30 SEPT 1994-SETUP NEW DECISION TREE (M BALDWIN) -! 12 JUNE 1998-CONVERSION TO 2-D (T BLACK) -! 01-10-25 H CHUANG - MODIFIED TO PROCESS HYBRID MODEL OUTPUT -! 02-01-15 MIKE BALDWIN - WRF VERSION -! -! -! ROUTINE TO COMPUTE PRECIPITATION TYPE USING A DECISION TREE -! APPROACH THAT USES VARIABLES SUCH AS INTEGRATED WET BULB TEMP -! BELOW FREEZING AND LOWEST LAYER TEMPERATURE -! -! SEE BALDWIN AND CONTORNO PREPRINT FROM 13TH WEATHER ANALYSIS -! AND FORECASTING CONFERENCE FOR MORE DETAILS -! (OR BALDWIN ET AL, 10TH NWP CONFERENCE PREPRINT) -! -! use params_mod -! use ctlblk_mod -!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none -! -! INPUT: -! T,Q,PMID,HTM,LMH,PREC,ZINT -! - integer,intent(in):: lm,lp1 -! real,intent(in):: pthresh - real,dimension(LM),intent(in) :: Q,PMID - real*8,dimension(LM),intent(in) :: T,TWET - real,dimension(LP1),intent(in) :: ZINT,PINT - integer,intent(out) :: IWX - real,intent(in) :: PREC,PTHRESH,D608,ROG,EPSQ -! real,intent(out) :: ZWET - - -! OUTPUT: -! IWX - INSTANTANEOUS WEATHER TYPE. -! ACTS LIKE A 4 BIT BINARY -! 1111 = RAIN/FREEZING RAIN/ICE PELLETS/SNOW -! WHERE THE ONE'S DIGIT IS FOR SNOW -! THE TWO'S DIGIT IS FOR ICE PELLETS -! THE FOUR'S DIGIT IS FOR FREEZING RAIN -! AND THE EIGHT'S DIGIT IS FOR RAIN -! -! INTERNAL: -! -! REAL, ALLOCATABLE :: TWET(:) - real, parameter :: D00=0.0 - integer KARR,LICEE - real TCOLD,TWARM - -! SUBROUTINES CALLED: -! WETBULB -! -! -! INITIALIZE WEATHER TYPE ARRAY TO ZERO (IE, OFF). -! WE DO THIS SINCE WE WANT IWX TO REPRESENT THE -! INSTANTANEOUS WEATHER TYPE ON RETURN. -! -! -! ALLOCATE LOCAL STORAGE -! - - integer L,LICE,IWRML,IFRZL - real PSFCK,TDCHK,A,TDKL,TDPRE,TLMHK,TWRMK,AREAS8,AREAP4, & - SURFW,SURFC,DZKL,AREA1,PINTK1,PINTK2,PM150,PKL,TKL,QKL - -! ALLOCATE ( TWET(LM) ) -! -!!$omp parallel do - IWX = 0 -! ZWET=SPVAL -! -!!$omp parallel do -!!$omp& private(a,pkl,psfck,qkl,tdchk,tdkl,tdpre,tkl) - -! -! SKIP THIS POINT IF NO PRECIP THIS TIME STEP -! - IF (PREC.LE.PTHRESH) GOTO 800 -! -! FIND COLDEST AND WARMEST TEMPS IN SATURATED LAYER BETWEEN -! 70 MB ABOVE GROUND AND 500 MB -! ALSO FIND HIGHEST SATURATED LAYER IN THAT RANGE -! -!meb - PSFCK=PINT(LM+1) -!meb - TDCHK=2.0 - 760 TCOLD=T(LM) - TWARM=T(LM) - LICEE=LM -! - DO 775 L=1,LM - QKL=Q(L) - QKL=MAX(EPSQ,QKL) - TKL=T(L) - PKL=PMID(L) -! -! SKIP PAST THIS IF THE LAYER IS NOT BETWEEN 70 MB ABOVE GROUND -! AND 500 MB -! - IF (PKL.LT.50000.0.OR.PKL.GT.PSFCK-7000.0) GOTO 775 - A=LOG(QKL*PKL/(6.1078*(0.378*QKL+0.622))) - TDKL=(237.3*A)/(17.269-A)+273.15 - TDPRE=TKL-TDKL - IF (TDPRE.LT.TDCHK.AND.TKL.LT.TCOLD) TCOLD=TKL - IF (TDPRE.LT.TDCHK.AND.TKL.GT.TWARM) TWARM=TKL - IF (TDPRE.LT.TDCHK.AND.L.LT.LICEE) LICEE=L - 775 CONTINUE -! -! IF NO SAT LAYER AT DEW POINT DEP=TDCHK, INCREASE TDCHK -! AND START AGAIN (BUT DON'T MAKE TDCHK > 6) -! - IF (TCOLD==T(LM).AND.TDCHK<6.0) THEN - TDCHK=TDCHK+2.0 - GOTO 760 - ENDIF - 800 CONTINUE -! -! LOWEST LAYER T -! - KARR=0 - IF (PREC.LE.PTHRESH) GOTO 850 - TLMHK=T(LM) -! -! DECISION TREE TIME -! - IF (TCOLD>269.15) THEN - IF (TLMHK.LE.273.15) THEN -! TURN ON THE FLAG FOR -! FREEZING RAIN = 4 -! IF ITS NOT ON ALREADY -! IZR=MOD(IWX(I,J),8)/4 -! IF (IZR.LT.1) IWX(I,J)=IWX(I,J)+4 - IWX=IWX+4 - GOTO 850 - ELSE -! TURN ON THE FLAG FOR -! RAIN = 8 -! IF ITS NOT ON ALREADY -! IRAIN=IWX(I,J)/8 -! IF (IRAIN.LT.1) IWX(I,J)=IWX(I,J)+8 - IWX=IWX+8 - GOTO 850 - ENDIF - ENDIF - KARR=1 - 850 CONTINUE -! -! COMPUTE WET BULB ONLY AT POINTS THAT NEED IT -! -! CALL WETBULB(lm,T,Q,PMID,KARR,TWET) -! CALL WETFRZLVL(TWET,ZWET) -! -!!$omp parallel do -!!$omp& private(area1,areap4,areas8,dzkl,ifrzl,iwrml,lice, -!!$omp& lmhk,pintk1,pintk2,pm150,psfck,surfc,surfw, -!!$omp& tlmhk,twrmk) - - IF(KARR.GT.0)THEN - LICE=LICEE -!meb - PSFCK=PINT(LM+1) -!meb - TLMHK=T(LM) - TWRMK=TWARM -! -! TWET AREA VARIABLES -! CALCULATE ONLY WHAT IS NEEDED -! FROM GROUND TO 150 MB ABOVE SURFACE -! FROM GROUND TO TCOLD LAYER -! AND FROM GROUND TO 1ST LAYER WHERE WET BULB T < 0.0 -! -! PINTK1 IS THE PRESSURE AT THE BOTTOM OF THE LAYER -! PINTK2 IS THE PRESSURE AT THE TOP OF THE LAYER -! -! AREAP4 IS THE AREA OF TWET ABOVE -4 C BELOW HIGHEST SAT LYR -! - AREAS8=D00 - AREAP4=D00 - SURFW =D00 - SURFC =D00 -! - DO 1945 L=LM,LICE,-1 - DZKL=ZINT(L)-ZINT(L+1) - AREA1=(TWET(L)-269.15)*DZKL - IF (TWET(L).GE.269.15) AREAP4=AREAP4+AREA1 - 1945 CONTINUE -! - IF (AREAP4.LT.3000.0) THEN -! TURN ON THE FLAG FOR -! SNOW = 1 -! IF ITS NOT ON ALREADY -! ISNO=MOD(IWX(I,J),2) -! IF (ISNO.LT.1) IWX(I,J)=IWX(I,J)+1 - IWX=IWX+1 - GO TO 1900 - ENDIF -! -! AREAS8 IS THE NET AREA OF TWET W.R.T. FREEZING IN LOWEST 150MB -! - PINTK1=PSFCK - PM150=PSFCK-15000. -! - DO 1955 L=LM,1,-1 - PINTK2=PINT(L) - IF(PINTK1.LT.PM150)GO TO 1950 - DZKL=ZINT(L)-ZINT(L+1) -! -! SUM PARTIAL LAYER IF IN 150 MB AGL LAYER -! - IF(PINTK2.LT.PM150) & - DZKL=T(L)*(Q(L)*D608+1.0)*ROG*LOG(PINTK1/PM150) - AREA1=(TWET(L)-273.15)*DZKL - AREAS8=AREAS8+AREA1 - 1950 PINTK1=PINTK2 - 1955 CONTINUE -! -! SURFW IS THE AREA OF TWET ABOVE FREEZING BETWEEN THE GROUND -! AND THE FIRST LAYER ABOVE GROUND BELOW FREEZING -! SURFC IS THE AREA OF TWET BELOW FREEZING BETWEEN THE GROUND -! AND THE WARMEST SAT LAYER -! - IFRZL=0 - IWRML=0 -! - DO 2050 L=LM,1,-1 - IF (IFRZL.EQ.0.AND.T(L).LT.273.15) IFRZL=1 - IF (IWRML.EQ.0.AND.T(L).GE.TWRMK) IWRML=1 -! - IF (IWRML.EQ.0.OR.IFRZL.EQ.0) THEN -! if(pmid(l) < 50000.)print*,'need twet above 500mb' - DZKL=ZINT(L)-ZINT(L+1) - AREA1=(TWET(L)-273.15)*DZKL - IF(IFRZL.EQ.0.AND.TWET(L).GE.273.15)SURFW=SURFW+AREA1 - IF(IWRML.EQ.0.AND.TWET(L).LE.273.15)SURFC=SURFC+AREA1 - ENDIF - 2050 CONTINUE - IF(SURFC.LT.-3000.0.OR. & - (AREAS8.LT.-3000.0.AND.SURFW.LT.50.0)) THEN -! TURN ON THE FLAG FOR -! ICE PELLETS = 2 -! IF ITS NOT ON ALREADY -! IIP=MOD(IWX(I,J),4)/2 -! IF (IIP.LT.1) IWX(I,J)=IWX(I,J)+2 - IWX=IWX+2 - GOTO 1900 - ENDIF -! - IF(TLMHK.LT.273.15) THEN -! TURN ON THE FLAG FOR -! FREEZING RAIN = 4 -! IF ITS NOT ON ALREADY -! IZR=MOD(IWX(K),8)/4 -! IF (IZR.LT.1) IWX(K)=IWX(K)+4 - IWX=IWX+4 - ELSE -! TURN ON THE FLAG FOR -! RAIN = 8 -! IF ITS NOT ON ALREADY -! IRAIN=IWX(K)/8 -! IF (IRAIN.LT.1) IWX(K)=IWX(K)+8 - IWX=IWX+8 - ENDIF - ENDIF - 1900 CONTINUE -!--------------------------------------------------------- -! DEALLOCATE (TWET) - - RETURN - END -! -! -!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -! -! DoPhase is a subroutine written and provided by Jim Ramer at NOAA/FSL -! -! Ramer, J, 1993: An empirical technique for diagnosing precipitation -! type from model output. Preprints, 5th Conf. on Aviation -! Weather Systems, Vienna, VA, Amer. Meteor. Soc., 227-230. -! -! CODE ADAPTED FOR WRF POST 24 AUGUST 2005 G MANIKIN -!ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -! - SUBROUTINE CALWXT_RAMER(lm,lp1, & - T,Q,PMID,RH,TD,PINT,PREC,PTHRESH,PTYP) - -! SUBROUTINE dophase(pq, ! input pressure sounding mb -! + t, ! input temperature sounding K -! + pmid, ! input pressure -! + pint, ! input interface pressure -! + q, ! input spec humidityfraction -! + lmh, ! input number of levels in sounding -! + prec, ! input amount of precipitation -! + ptyp) ! output(2) phase 2=Rain, 3=Frzg, 4=Solid, -! 6=IP JC 9/16/99 -! use params_mod -! use CTLBLK_mod -!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none -! - real,PARAMETER :: twice=266.55,rhprcp=0.80,deltag=1.02, & - & emelt=0.045,rlim=0.04,slim=0.85 - real,PARAMETER :: twmelt=273.15,tz=273.15,efac=1.0 ! specify in params now -! - INTEGER*4 i, k1, lll, k2, toodry -! - REAL xxx ,mye, icefrac - integer,intent(in) :: lm,lp1 - real,DIMENSION(LM),intent(in) :: Q,PMID,RH - real*8,DIMENSION(LM),intent(in) :: T,TD - real,DIMENSION(LP1),intent(in) :: PINT - real,intent(in) :: PREC,PTHRESH - real,intent(out) :: PTYP -! - real,DIMENSION(LM) :: TQ,PQ,RHQ - real,DIMENSION(LM) :: TWQ -! - integer J,L,LEV,ii - real RHMAX,TWMAX,PTOP,dpdrh,twtop,rhtop,wgt1,wgt2, & - rhavg,dtavg,dpk,ptw,pbot -! real b,qtmp,rate,qc - real,external :: xmytw -! -! Initialize. - icefrac = -9999. -! - - PTYP = 0 - DO L = 1,LM - LEV = LP1 - L -! P(L)=PMID(L) -! QC=PQ0/P(L) * EXP(A2*(T(L)-A3)/(T(L)-A4)) -!GSM forcing Q (QTMP) to be positive to deal with negative Q values -! causing problems later in this subroutine -! QTMP=MAX(H1M12,Q(L)) -! RHQTMP(LEV)=QTMP/QC - RHQ(LEV) = RH(L) - PQ(LEV) = PMID(L) * 0.01 - TQ(LEV) = T(L) - enddo - - -! -! SKIP THIS POINT IF NO PRECIP THIS TIME STEP -! - IF (PREC <= PTHRESH) return - -! -!CC RATE RESTRICTION REMOVED BY JOHN CORTINAS 3/16/99 -! -! Construct wet-bulb sounding, locate generating level. - twmax = -999.0 - rhmax = 0.0 - k1 = 0 ! top of precip generating layer - k2 = 0 ! layer of maximum rh -! - IF (rhq(1) < rhprcp) THEN - toodry = 1 - ELSE - toodry = 0 - END IF -! - pbot = pq(1) -! NQ=LM - DO L = 1, lm -! xxx = tdofesat(esat(tq(L))*rhq(L)) - xxx = td(l) !HC: use TD consistent with GFS ice physics - if (xxx < -500.) return - twq(L) = xmytw(tq(L),xxx,pq(L)) - twmax = max(twq(L),twmax) - IF (pq(L) >= 400.0) THEN - IF (rhq(L) > rhmax) THEN - rhmax = rhq(L) - k2 = L - END IF -! - IF (L /= 1) THEN - IF (rhq(L) >= rhprcp .or. toodry == 0) THEN - IF (toodry /= 0) THEN - dpdrh = log(pq(L)/pq(L-1)) / (rhq(L)-RHQ(L-1)) - pbot = exp(log(pq(L))+(rhprcp-rhq(L))*dpdrh) -! - ptw = pq(L) - toodry = 0 - ELSE IF (rhq(L)>= rhprcp) THEN - ptw = pq(L) - ELSE - toodry = 1 - dpdrh = log(pq(L)/pq(L-1)) / (rhq(L)-rhq(L-1)) - ptw = exp(log(pq(L))+(rhprcp-rhq(L))*dpdrh) - -!lin dpdrh = (Pq(i)-Pq(i-1))/(Rhq(i)-Rhq(i-1)) -!lin ptw = Pq(i)+(rhprcp-Rhq(i))*dpdrh -! - END IF -! - IF (pbot/ptw >= deltag) THEN -!lin If (pbot-ptw.lt.deltag) Goto 2003 - k1 = L - ptop = ptw - END IF - END IF - END IF - END IF - enddo -! -! Gross checks for liquid and solid precip which dont require generating level. -! - IF (twq(1) >= 273.15+2.0) THEN - ptyp = 8 ! liquid - icefrac = 0.0 - return - END IF -! - IF (twmax <= twice) THEN - icefrac = 1.0 - ptyp = 1 ! solid - return - END IF -! -! Check to see if we had no success with locating a generating level. -! - IF (k1 == 0) return -! - IF (ptop == pq(k1)) THEN - twtop = twq(k1) - rhtop = rhq(k1) - k2 = k1 - k1 = k1 - 1 - ELSE - k2 = k1 - k1 = k1 - 1 - wgt1 = log(ptop/pq(k2)) / log(pq(k1)/pq(k2)) - wgt2 = 1.0 - wgt1 - twtop = twq(k1) * wgt1 + twq(k2) * wgt2 - rhtop = rhq(k1) * wgt1 + rhq(k2) * wgt2 - END IF -! -! Calculate temp and wet-bulb ranges below precip generating level. - DO L = 1, k1 - twmax = max(twq(l),twmax) - enddo -! -! Gross check for solid precip, initialize ice fraction. -! IF (i.eq.1.and.j.eq.1) WRITE (*,*) 'twmax=',twmax,twice,'twtop=',twtop - - IF (twtop <= twice) THEN - icefrac = 1.0 - IF (twmax <= twmelt) THEN ! gross check for solid precip. - ptyp = 1 ! solid precip - return - END IF - lll = 0 - ELSE - icefrac = 0.0 - lll = 1 - END IF -! -! Loop downward through sounding from highest precip generating level. - 30 CONTINUE -! - IF (icefrac >= 1.0) THEN ! starting as all ice - IF (twq(k1) < twmelt) GO TO 40 ! cannot commence melting - IF (twq(k1) == twtop) GO TO 40 ! both equal twmelt, nothing h - wgt1 = (twmelt-twq(k1)) / (twtop-twq(k1)) - rhavg = rhq(k1) + wgt1 * (rhtop-rhq(k1)) * 0.5 - dtavg = (twmelt-twq(k1)) * 0.5 - dpk = wgt1 * log(pq(k1)/ptop) !lin dpk=wgt1*(Pq(k1)-Ptop) -! mye=emelt*(1.0-(1.0-Rhavg)*efac) - mye = emelt * rhavg ** efac - icefrac = icefrac + dpk * dtavg / mye - ELSE IF (icefrac <= 0.0) THEN ! starting as all liquid - lll = 1 -! Goto 1020 - IF (twq(k1) > twice) GO TO 40 ! cannot commence freezing - IF (twq(k1) == twtop) THEN - wgt1 = 0.5 - ELSE - wgt1 = (twice-twq(k1)) / (twtop-twq(k1)) - END IF - rhavg = rhq(k1) + wgt1 * (rhtop-rhq(k1)) * 0.5 - dtavg = twmelt - (twq(k1)+twice) * 0.5 - dpk = wgt1 * log(pq(k1)/ptop) !lin dpk=wgt1*(Pq(k1)-Ptop) -! mye = emelt*(1.0-(1.0-Rhavg)*efac) - mye = emelt * rhavg ** efac - icefrac = icefrac + dpk * dtavg / mye - ELSE IF ((twq(k1) <= twmelt).and.(twq(k1) < twmelt)) THEN ! mix - rhavg = (rhq(k1)+rhtop) * 0.5 - dtavg = twmelt - (twq(k1)+twtop) * 0.5 - dpk = log(pq(k1)/ptop) !lin dpk=Pq(k1)-Ptop -! mye = emelt*(1.0-(1.0-Rhavg)*efac) - mye = emelt * rhavg ** efac - icefrac = icefrac + dpk * dtavg / mye - ELSE ! mix where Tw curve crosses twmelt in layer - IF (twq(k1) == twtop) GO TO 40 ! both equal twmelt, nothing h - wgt1 = (twmelt-twq(k1)) / (twtop-twq(k1)) - wgt2 = 1.0 - wgt1 - rhavg = rhtop + wgt2 * (rhq(k1)-rhtop) * 0.5 - dtavg = (twmelt-twtop) * 0.5 - dpk = wgt2 * log(pq(k1)/ptop) !lin dpk=wgt2*(Pq(k1)-Ptop) -! mye = emelt*(1.0-(1.0-Rhavg)*efac) - mye = emelt * rhavg ** efac - icefrac = icefrac + dpk * dtavg / mye - icefrac = min(1.0,max(icefrac,0.0)) - IF (icefrac <= 0.0) THEN -! Goto 1020 - IF (twq(k1) > twice) GO TO 40 ! cannot commence freezin - wgt1 = (twice-twq(k1)) / (twtop-twq(k1)) - dtavg = twmelt - (twq(k1)+twice) * 0.5 - ELSE - dtavg = (twmelt-twq(k1)) * 0.5 - END IF - rhavg = rhq(k1) + wgt1 * (rhtop-rhq(k1)) * 0.5 - dpk = wgt1 * log(pq(k1)/ptop) !lin dpk=wgt1*(Pq(k1)-Ptop) -! mye = emelt*(1.0-(1.0-Rhavg)*efac) - mye = emelt * rhavg ** efac - icefrac = icefrac + dpk * dtavg / mye - END IF -! - icefrac = min(1.0,max(icefrac,0.0)) - -! IF (i.eq.1.and.j.eq.1) WRITE (*,*) 'NEW ICEFRAC:', icefrac, icefrac -! -! Get next level down if there is one, loop back. - 40 continue - IF (k1 > 1) THEN - twtop = twq(k1) - ptop = pq(k1) - rhtop = rhq(k1) - k1 = k1 - 1 - GO TO 30 - END IF -! -! Determine precip type based on snow fraction and surface wet-bulb. -! - IF (icefrac >= slim) THEN - IF (lll /= 0) THEN - ptyp = 2 ! Ice Pellets JC 9/16/99 - ELSE - ptyp = 1 ! Snow - END IF - ELSE IF (icefrac <= rlim) THEN - IF (twq(1).lt.tz) THEN - ptyp = 4 ! Freezing Precip - ELSE - ptyp = 8 ! Rain - END IF - ELSE - IF (twq(1) < tz) THEN -!GSM not sure what to do when 'mix' is predicted; In previous -!GSM versions of this code for which I had to have an answer, -!GSM I chose sleet. Here, though, since we have 4 other -!GSM algorithms to provide an answer, I will not declare a -!GSM type from the Ramer in this situation and allow the -!GSM other algorithms to make the call. - - ptyp = 0 ! don't know -! ptyp = 5 ! Mix - ELSE -! ptyp = 5 ! Mix - ptyp = 0 ! don't know - END IF - END IF - - RETURN -! - END -! -! -!-------------------------------------------------------------------------- -! REAL*4 FUNCTION mytw(t,td,p) - FUNCTION xmytw(t,td,p) -! - IMPLICIT NONE -! - INTEGER*4 cflag, l -! REAL*4 f, c0, c1, c2, k, kd, kw, ew, t, td, p, ed, fp, s, & - REAL f, c0, c1, c2, k, kd, kw, ew, t, td, p, ed, fp, s, & - & de, xmytw - DATA f, c0, c1, c2 /0.0006355, 26.66082, 0.0091379024, 6106.3960/ -! -! - xmytw = (t+td) / 2 - IF (td.ge.t) RETURN -! - IF (t.lt.100.0) THEN - k = t + 273.15 - kd = td + 273.15 - IF (kd.ge.k) RETURN - cflag = 1 - ELSE - k = t - kd = td - cflag = 0 - END IF -! - ed = c0 - c1 * kd - c2 / kd - IF (ed.lt.-14.0.or.ed.gt.7.0) RETURN - ed = exp(ed) - ew = c0 - c1 * k - c2 / k - IF (ew.lt.-14.0.or.ew.gt.7.0) RETURN - ew = exp(ew) - fp = p * f - s = (ew-ed) / (k-kd) - kw = (k*fp+kd*s) / (fp+s) -! - DO 10 l = 1, 5 - ew = c0 - c1 * kw - c2 / kw - IF (ew.lt.-14.0.or.ew.gt.7.0) RETURN - ew = exp(ew) - de = fp * (k-kw) + ed - ew - IF (abs(de/ew).lt.1E-5) GO TO 20 - s = ew * (c1-c2/(kw*kw)) - fp - kw = kw - de / s - 10 CONTINUE - 20 CONTINUE -! -! print *, 'kw ', kw - IF (cflag.ne.0) THEN - xmytw = kw - 273.15 - ELSE - xmytw = kw - END IF -! - RETURN - END -! -! -!$$$ Subprogram documentation block -! -! Subprogram: calwxt_bourg Calculate precipitation type (Bourgouin) -! Prgmmr: Baldwin Org: np22 Date: 1999-07-06 -! -! Abstract: This routine computes precipitation type -! using a decision tree approach that uses the so-called -! "energy method" of Bourgouin of AES (Canada) 1992 -! -! Program history log: -! 1999-07-06 M Baldwin -! 1999-09-20 M Baldwin make more consistent with bourgouin (1992) -! 2005-08-24 G Manikin added to wrf post -! 2007-06-19 M Iredell mersenne twister, best practices -! 2008-03-03 G Manikin added checks to prevent stratospheric warming -! episodes from being seen as "warm" layers -! impacting precip type -! -! Usage: call calwxt_bourg(im,jm,jsta_2l,jend_2u,jsta,jend,lm,lp1, & -! & iseed,g,pthresh, & -! & t,q,pmid,pint,lmh,prec,zint,ptype) -! Input argument list: -! im integer i dimension -! jm integer j dimension -! jsta_2l integer j dimension start point (including haloes) -! jend_2u integer j dimension end point (including haloes) -! jsta integer j dimension start point (excluding haloes) -! jend integer j dimension end point (excluding haloes) -! lm integer k dimension -! lp1 integer k dimension plus 1 -! iseed integer random number seed -! g real gravity (m/s**2) -! pthresh real precipitation threshold (m) -! t real(im,jsta_2l:jend_2u,lm) mid layer temp (K) -! q real(im,jsta_2l:jend_2u,lm) specific humidity (kg/kg) -! pmid real(im,jsta_2l:jend_2u,lm) mid layer pressure (Pa) -! pint real(im,jsta_2l:jend_2u,lp1) interface pressure (Pa) -! lmh real(im,jsta_2l:jend_2u) max number of layers -! prec real(im,jsta_2l:jend_2u) precipitation (m) -! zint real(im,jsta_2l:jend_2u,lp1) interface height (m) -! Output argument list: -! ptype real(im,jm) instantaneous weather type () -! acts like a 4 bit binary -! 1111 = rain/freezing rain/ice pellets/snow -! where the one's digit is for snow -! the two's digit is for ice pellets -! the four's digit is for freezing rain -! and the eight's digit is for rain -! in other words... -! ptype=1 snow -! ptype=2 ice pellets/mix with ice pellets -! ptype=4 freezing rain/mix with freezing rain -! ptype=8 rain -! -! Modules used: -! mersenne_twister pseudo-random number generator -! -! Subprograms called: -! random_number pseudo-random number generator -! -! Attributes: -! Language: Fortran 90 -! -! Remarks: vertical order of arrays must be layer 1 = top -! and layer lmh = bottom -! -!$$$ - subroutine calwxt_bourg(lm,lp1,rn,g,pthresh, & - & t,q,pmid,pint,prec,zint,ptype) -! use mersenne_twister - implicit none -! -! input: - integer,intent(in):: lm,lp1 -! integer,intent(in):: iseed - real,intent(in):: g,pthresh,rn - real*8,intent(in):: t(lm) - real,intent(in):: q(lm) - real,intent(in):: pmid(lm) - real,intent(in):: pint(lp1) - real,intent(in):: prec - real,intent(in):: zint(lp1) -! -! output: - real,intent(out):: ptype -! - integer ifrzl,iwrml,l,lhiwrm - real pintk1,areane,tlmhk,areape,pintk2,surfw,area1,dzkl,psfck -! -! initialize weather type array to zero (ie, off). -! we do this since we want ptype to represent the -! instantaneous weather type on return. -! -!!$omp parallel do - - ptype = 0 - -! -! call random_number(rn,iseed) -! -!!$omp parallel do -!!$omp& private(a,tlmhk,iwrml,psfck,lhiwrm,pintk1,pintk2,area1, -!!$omp& areape,dzkl,surfw,r1,r2) - - psfck=pint(lm+1) -! -! skip this point if no precip this time step -! - if (prec.le.pthresh) return -! find the depth of the warm layer based at the surface -! this will be the cut off point between computing -! the surface based warm air and the warm air aloft -! -! -! lowest layer t -! - tlmhk = t(lm) - iwrml = lm + 1 - if (tlmhk.ge.273.15) then - do l = lm, 2, -1 - if (t(l).ge.273.15.and.t(l-1).lt.273.15.and. & - & iwrml.eq.lm+1) iwrml = l - end do - end if -! -! now find the highest above freezing level -! - lhiwrm = lm + 1 - do l = lm, 1, -1 -! gsm added 250 mb check to prevent stratospheric warming situations -! from counting as warm layers aloft - if (t(l).ge.273.15 .and. pmid(l).gt.25000.) lhiwrm = l - end do - -! energy variables -! surfw is the positive energy between the ground -! and the first sub-freezing layer above ground -! areane is the negative energy between the ground -! and the highest layer above ground -! that is above freezing -! areape is the positive energy "aloft" -! which is the warm energy not based at the ground -! (the total warm energy = surfw + areape) -! -! pintk1 is the pressure at the bottom of the layer -! pintk2 is the pressure at the top of the layer -! dzkl is the thickness of the layer -! ifrzl is a flag that tells us if we have hit -! a below freezing layer -! - pintk1 = psfck - ifrzl = 0 - areane = 0.0 - areape = 0.0 - surfw = 0.0 - - do l = lm, 1, -1 - if (ifrzl.eq.0.and.t(l).le.273.15) ifrzl = 1 - pintk2=pint(l) - dzkl=zint(l)-zint(l+1) - area1 = log(t(l)/273.15) * g * dzkl - if (t(l).ge.273.15.and. pmid(l).gt.25000.) then - if (l.lt.iwrml) areape = areape + area1 - if (l.ge.iwrml) surfw = surfw + area1 - else - if (l.gt.lhiwrm) areane = areane + abs(area1) - end if - pintk1 = pintk2 - end do - -! -! decision tree time -! - if (areape.lt.2.0) then -! very little or no positive energy aloft, check for -! positive energy just above the surface to determine rain vs. snow - if (surfw.lt.5.6) then -! not enough positive energy just above the surface -! snow = 1 - ptype = 1 - else if (surfw.gt.13.2) then -! enough positive energy just above the surface -! rain = 8 - ptype = 8 - else -! transition zone, assume equally likely rain/snow -! picking a random number, if <=0.5 snow - if (rn.le.0.5) then -! snow = 1 - ptype = 1 - else -! rain = 8 - ptype = 8 - end if - end if -! - else -! some positive energy aloft, check for enough negative energy -! to freeze and make ice pellets to determine ip vs. zr - if (areane.gt.66.0+0.66*areape) then -! enough negative area to make ip, -! now need to check if there is enough positive energy -! just above the surface to melt ip to make rain - if (surfw.lt.5.6) then -! not enough energy at the surface to melt ip -! ice pellets = 2 - ptype = 2 - else if (surfw.gt.13.2) then -! enough energy at the surface to melt ip -! rain = 8 - ptype = 8 - else -! transition zone, assume equally likely ip/rain -! picking a random number, if <=0.5 ip - if (rn.le.0.5) then -! ice pellets = 2 - ptype = 2 - else -! rain = 8 - ptype = 8 - end if - end if - else if (areane.lt.46.0+0.66*areape) then -! not enough negative energy to refreeze, check surface temp -! to determine rain vs. zr - if (tlmhk.lt.273.15) then -! freezing rain = 4 - ptype = 4 - else -! rain = 8 - ptype = 8 - end if - else -! transition zone, assume equally likely ip/zr -! picking a random number, if <=0.5 ip - if (rn.le.0.5) then -! still need to check positive energy -! just above the surface to melt ip vs. rain - if (surfw.lt.5.6) then -! ice pellets = 2 - ptype = 2 - else if (surfw.gt.13.2) then -! rain = 8 - ptype = 8 - else -! transition zone, assume equally likely ip/rain -! picking a random number, if <=0.5 ip - if (rn.le.0.25) then -! ice pellets = 2 - ptype = 2 - else -! rain = 8 - ptype = 8 - end if - end if - else -! not enough negative energy to refreeze, check surface temp -! to determine rain vs. zr - if (tlmhk.lt.273.15) then -! freezing rain = 4 - ptype = 4 - else -! rain = 8 - ptype = 8 - end if - end if - end if - end if -! end do -! end do - return - end -! -! - SUBROUTINE CALWXT_REVISED(LM,LP1,T,Q,PMID,PINT,PREC, & - PTHRESH,D608,ROG,EPSQ, & - & ZINT,TWET,IWX) -! -! FILE: CALWXT.f -! WRITTEN: 11 NOVEMBER 1993, MICHAEL BALDWIN -! REVISIONS: -! 30 SEPT 1994-SETUP NEW DECISION TREE (M BALDWIN) -! 12 JUNE 1998-CONVERSION TO 2-D (T BLACK) -! 01-10-25 H CHUANG - MODIFIED TO PROCESS HYBRID MODEL OUTPUT -! 02-01-15 MIKE BALDWIN - WRF VERSION -! 05-07-07 BINBIN ZHOU - ADD PREC FOR RSM -! 05-08-24 GEOFF MANIKIN - MODIFIED THE AREA REQUIREMENTS -! TO MAKE AN ALTERNATE ALGORITHM -! -! -! ROUTINE TO COMPUTE PRECIPITATION TYPE USING A DECISION TREE -! APPROACH THAT USES VARIABLES SUCH AS INTEGRATED WET BULB TEMP -! BELOW FREEZING AND LOWEST LAYER TEMPERATURE -! -! SEE BALDWIN AND CONTORNO PREPRINT FROM 13TH WEATHER ANALYSIS -! AND FORECASTING CONFERENCE FOR MORE DETAILS -! (OR BALDWIN ET AL, 10TH NWP CONFERENCE PREPRINT) -! -! SINCE THE ORIGINAL VERSION OF THE ALGORITHM HAS A HIGH BIAS -! FOR FREEZING RAIN AND SLEET, THE GOAL IS TO BALANCE THAT BIAS -! WITH A VERSION MORE LIKELY TO PREDICT SNOW -! -! use params_mod -! use ctlblk_mod -!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none -! -! LIST OF VARIABLES NEEDED -! PARAMETERS: -! D608,ROG,H1,D00 -!HC PARAMETER(D608=0.608,ROG=287.04/9.8,H1=1.0,D00=0.0) -! -! INPUT: -! T,Q,PMID,HTM,LMH,PREC,ZINT - integer,intent(in):: lm,lp1 - REAL,dimension(LM),intent(in) :: Q,PMID - REAL*8,dimension(LM),intent(in) :: T,TWET - REAL,dimension(LP1),intent(in) :: PINT,ZINT - REAL,intent(in) :: PREC,PTHRESH,D608,ROG,EPSQ -! OUTPUT: -! IWX - INSTANTANEOUS WEATHER TYPE. -! ACTS LIKE A 4 BIT BINARY -! 1111 = RAIN/FREEZING RAIN/ICE PELLETS/SNOW -! WHERE THE ONE'S DIGIT IS FOR SNOW -! THE TWO'S DIGIT IS FOR ICE PELLETS -! THE FOUR'S DIGIT IS FOR FREEZING RAIN -! AND THE EIGHT'S DIGIT IS FOR RAIN - integer, intent(out) :: IWX -! INTERNAL: -! - real, parameter :: D00=0.0 - integer KARR,LICEE - real TCOLD,TWARM -! - integer L,LMHK,LICE,IWRML,IFRZL - real PSFCK,TDCHK,A,TDKL,TDPRE,TLMHK,TWRMK,AREAS8,AREAP4,AREA1, & - SURFW,SURFC,DZKL,PINTK1,PINTK2,PM150,QKL,TKL,PKL,AREA0, & - AREAP0 - -! SUBROUTINES CALLED: -! WETBULB -! -! -! INITIALIZE WEATHER TYPE ARRAY TO ZERO (IE, OFF). -! WE DO THIS SINCE WE WANT IWX TO REPRESENT THE -! INSTANTANEOUS WEATHER TYPE ON RETURN. -! -! -! ALLOCATE LOCAL STORAGE -! -! -!!$omp parallel do - IWX = 0 - -!!$omp parallel do -!!$omp& private(a,lmhk,pkl,psfck,qkl,tdchk,tdkl,tdpre,tkl) - - LMHK=LM -! -! SKIP THIS POINT IF NO PRECIP THIS TIME STEP -! - IF (PREC.LE.PTHRESH) GOTO 800 -! -! FIND COLDEST AND WARMEST TEMPS IN SATURATED LAYER BETWEEN -! 70 MB ABOVE GROUND AND 500 MB -! ALSO FIND HIGHEST SATURATED LAYER IN THAT RANGE -! -!meb - PSFCK=PINT(LP1) -!meb - TDCHK=2.0 - 760 TCOLD=T(LMHK) - TWARM=T(LMHK) - LICEE=LMHK -! - DO 775 L=1,LMHK - QKL=Q(L) - QKL=MAX(EPSQ,QKL) - TKL=T(L) - PKL=PMID(L) -! -! SKIP PAST THIS IF THE LAYER IS NOT BETWEEN 70 MB ABOVE GROUND -! AND 500 MB -! - IF (PKL.LT.50000.0.OR.PKL.GT.PSFCK-7000.0) GOTO 775 - A=LOG(QKL*PKL/(6.1078*(0.378*QKL+0.622))) - TDKL=(237.3*A)/(17.269-A)+273.15 - TDPRE=TKL-TDKL - IF (TDPRE.LT.TDCHK.AND.TKL.LT.TCOLD) TCOLD=TKL - IF (TDPRE.LT.TDCHK.AND.TKL.GT.TWARM) TWARM=TKL - IF (TDPRE.LT.TDCHK.AND.L.LT.LICEE) LICEE=L - 775 CONTINUE -! -! IF NO SAT LAYER AT DEW POINT DEP=TDCHK, INCREASE TDCHK -! AND START AGAIN (BUT DON'T MAKE TDCHK > 6) -! - IF (TCOLD.EQ.T(LMHK).AND.TDCHK.LT.6.0) THEN - TDCHK=TDCHK+2.0 - GOTO 760 - ENDIF - 800 CONTINUE -! -! LOWEST LAYER T -! - KARR=0 - IF (PREC.LE.PTHRESH) GOTO 850 - LMHK=LM - TLMHK=T(LMHK) -! -! DECISION TREE TIME -! - IF (TCOLD.GT.269.15) THEN - IF (TLMHK.LE.273.15) THEN -! TURN ON THE FLAG FOR -! FREEZING RAIN = 4 -! IF ITS NOT ON ALREADY -! IZR=MOD(IWX,8)/4 -! IF (IZR.LT.1) IWX=IWX+4 - IWX=IWX+4 - GOTO 850 - ELSE -! TURN ON THE FLAG FOR -! RAIN = 8 -! IF ITS NOT ON ALREADY -! IRAIN=IWX/8 -! IF (IRAIN.LT.1) IWX=IWX+8 - IWX=IWX+8 - GOTO 850 - ENDIF - ENDIF - KARR=1 - 850 CONTINUE -! -!!$omp parallel do -!!$omp& private(area1,areap4,areap0,areas8,dzkl,ifrzl,iwrml,lice, -!!$omp& lmhk,pintk1,pintk2,pm150,psfck,surfc,surfw, -!!$omp& tlmhk,twrmk) - - IF(KARR.GT.0)THEN - LMHK=LM - LICE=LICEE -!meb - PSFCK=PINT(LP1) -!meb - TLMHK=T(LMHK) - TWRMK=TWARM -! -! TWET AREA VARIABLES -! CALCULATE ONLY WHAT IS NEEDED -! FROM GROUND TO 150 MB ABOVE SURFACE -! FROM GROUND TO TCOLD LAYER -! AND FROM GROUND TO 1ST LAYER WHERE WET BULB T < 0.0 -! -! PINTK1 IS THE PRESSURE AT THE BOTTOM OF THE LAYER -! PINTK2 IS THE PRESSURE AT THE TOP OF THE LAYER -! -! AREAP4 IS THE AREA OF TWET ABOVE -4 C BELOW HIGHEST SAT LYR -! AREAP0 IS THE AREA OF TWET ABOVE 0 C BELOW HIGHEST SAT LYR -! - AREAS8=D00 - AREAP4=D00 - AREAP0=D00 - SURFW =D00 - SURFC =D00 - -! - DO 1945 L=LMHK,LICE,-1 - DZKL=ZINT(L)-ZINT(L+1) - AREA1=(TWET(L)-269.15)*DZKL - AREA0=(TWET(L)-273.15)*DZKL - IF (TWET(L).GE.269.15) AREAP4=AREAP4+AREA1 - IF (TWET(L).GE.273.15) AREAP0=AREAP0+AREA0 - 1945 CONTINUE -! -! IF (AREAP4.LT.3000.0) THEN -! TURN ON THE FLAG FOR -! SNOW = 1 -! IF ITS NOT ON ALREADY -! ISNO=MOD(IWX,2) -! IF (ISNO.LT.1) IWX=IWX+1 -! IWX=IWX+1 -! GO TO 1900 -! ENDIF - IF (AREAP0.LT.350.0) THEN -! TURN ON THE FLAG FOR -! SNOW = 1 - IWX=IWX+1 - GOTO 1900 - ENDIF -! -! AREAS8 IS THE NET AREA OF TWET W.R.T. FREEZING IN LOWEST 150MB -! - PINTK1=PSFCK - PM150=PSFCK-15000. -! - DO 1955 L=LMHK,1,-1 - PINTK2=PINT(L) - IF(PINTK1.LT.PM150)GO TO 1950 - DZKL=ZINT(L)-ZINT(L+1) -! -! SUM PARTIAL LAYER IF IN 150 MB AGL LAYER -! - IF(PINTK2.LT.PM150) & - DZKL=T(L)*(Q(L)*D608+1.0)*ROG* & - LOG(PINTK1/PM150) - AREA1=(TWET(L)-273.15)*DZKL - AREAS8=AREAS8+AREA1 - 1950 PINTK1=PINTK2 - 1955 CONTINUE -! -! SURFW IS THE AREA OF TWET ABOVE FREEZING BETWEEN THE GROUND -! AND THE FIRST LAYER ABOVE GROUND BELOW FREEZING -! SURFC IS THE AREA OF TWET BELOW FREEZING BETWEEN THE GROUND -! AND THE WARMEST SAT LAYER -! - IFRZL=0 - IWRML=0 -! - DO 2050 L=LMHK,1,-1 - IF (IFRZL.EQ.0.AND.T(L).LT.273.15) IFRZL=1 - IF (IWRML.EQ.0.AND.T(L).GE.TWRMK) IWRML=1 -! - IF (IWRML.EQ.0.OR.IFRZL.EQ.0) THEN -! if(pmid(l) .lt. 50000.)print*,'twet needed above 500mb' - DZKL=ZINT(L)-ZINT(L+1) - AREA1=(TWET(L)-273.15)*DZKL - IF(IFRZL.EQ.0.AND.TWET(L).GE.273.15)SURFW=SURFW+AREA1 - IF(IWRML.EQ.0.AND.TWET(L).LE.273.15)SURFC=SURFC+AREA1 - ENDIF - 2050 CONTINUE - IF(SURFC.LT.-3000.0.OR. & - & (AREAS8.LT.-3000.0.AND.SURFW.LT.50.0)) THEN -! TURN ON THE FLAG FOR -! ICE PELLETS = 2 -! IF ITS NOT ON ALREADY -! IIP=MOD(IWX,4)/2 -! IF (IIP.LT.1) IWX=IWX+2 - IWX=IWX+2 - GOTO 1900 - ENDIF -! - IF(TLMHK.LT.273.15) THEN -! TURN ON THE FLAG FOR -! FREEZING RAIN = 4 -! IF ITS NOT ON ALREADY -! IZR=MOD(IWX(K),8)/4 -! IF (IZR.LT.1) IWX(K)=IWX(K)+4 - IWX=IWX+4 - ELSE -! TURN ON THE FLAG FOR -! RAIN = 8 -! IF ITS NOT ON ALREADY -! IRAIN=IWX(K)/8 -! IF (IRAIN.LT.1) IWX(K)=IWX(K)+8 - IWX=IWX+8 - ENDIF - ENDIF - 1900 CONTINUE -! print *, 'revised check ', IWX(500,800) - - RETURN - END -! -! - SUBROUTINE CALWXT_EXPLICIT(LM,PTHRESH,TSKIN,PREC,SR,F_RIMEF,IWX) -! -! FILE: CALWXT.f -! WRITTEN: 24 AUGUST 2005, G MANIKIN and B FERRIER -! -! ROUTINE TO COMPUTE PRECIPITATION TYPE USING EXPLICIT FIELDS -! FROM THE MODEL MICROPHYSICS - -! use params_mod -! use ctlblk_mod -!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none -! -! LIST OF VARIABLES NEEDED -! PARAMETERS: -! -! INPUT: - integer, intent(in):: lm - real,intent(in):: TSKIN, PREC, SR,PTHRESH - REAL,intent(in):: F_RimeF(LM) - integer,intent(out) :: IWX - real SNOW -! real PSFC -! -! ALLOCATE LOCAL STORAGE -! -!!$omp parallel do - IWX = 0 - -!GSM THE RSM IS CURRENTLY INCOMPATIBLE WITH THIS ROUTINE -!GSM ACCORDING TO B FERRIER, THERE MAY BE A WAY TO WRITE -!GSM A VERSION OF THIS ALGORITHM TO WORK WITH THE RSM -!GSM MICROPHYSICS, BUT IT DOESN'T EXIST AT THIS TIME -!!$omp parallel do -!!$omp& private(psfc,tskin) - -! SKIP THIS POINT IF NO PRECIP THIS TIME STEP -! - IF (PREC.LE.PTHRESH) GOTO 800 -! -! A SNOW RATIO LESS THAN 0.5 ELIMINATES SNOW AND SLEET -! USE THE SKIN TEMPERATURE TO DISTINGUISH RAIN FROM FREEZING RAIN -! NOTE THAT 2-M TEMPERATURE MAY BE A BETTER CHOICE IF THE MODEL -! HAS A COLD BIAS FOR SKIN TEMPERATURE -! - IF (SR.LT.0.5) THEN -! SURFACE (SKIN) POTENTIAL TEMPERATURE AND TEMPERATURE. -! PSFC=PMID(LM) -! TSKIN=THS*(PSFC/P1000)**CAPA - - IF (TSKIN.LT.273.15) THEN -! FREEZING RAIN = 4 - IWX=IWX+4 - ELSE -! RAIN = 8 - IWX=IWX+8 - ENDIF - ELSE -! -! DISTINGUISH SNOW FROM SLEET WITH THE RIME FACTOR -! - IF(F_RimeF(LM).GE.10) THEN -! SLEET = 2 - IWX=IWX+2 - ELSE - SNOW = 1 - IWX=IWX+1 - ENDIF - ENDIF - 800 CONTINUE - 810 RETURN - END -! -! - SUBROUTINE CALWXT_DOMINANT(NALG,PREC,PTHRESH,RAIN,FREEZR,SLEET,SNOW, & - & DOMR,DOMZR,DOMIP,DOMS) -! -! WRITTEN: 24 AUGUST 2005, G MANIKIN -! -! THIS ROUTINE TAKES THE PRECIP TYPE SOLUTIONS FROM DIFFERENT -! ALGORITHMS AND SUMS THEM UP TO GIVE A DOMINANT TYPE -! -! use params_mod -! use ctlblk_mod -!- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - implicit none -! -! INPUT: - integer,intent(in) :: NALG - REAL, intent(in) :: PREC,PTHRESH - real,intent(out) :: DOMS,DOMR,DOMZR,DOMIP - real,DIMENSION(NALG),intent(in) :: RAIN,SNOW,SLEET,FREEZR - integer L - real TOTSN,TOTIP,TOTR,TOTZR -!-------------------------------------------------------------------------- -! write(6,*) 'into dominant' -!!$omp parallel do - DOMR = 0. - DOMS = 0. - DOMZR = 0. - DOMIP = 0. -! -!!$omp parallel do -!!$omp& private(totsn,totip,totr,totzr) -! SKIP THIS POINT IF NO PRECIP THIS TIME STEP - IF (PREC.LE.PTHRESH) GOTO 800 - TOTSN = 0. - TOTIP = 0. - TOTR = 0. - TOTZR = 0. -! LOOP OVER THE NUMBER OF DIFFERENT ALGORITHMS THAT ARE USED - DO 820 L = 1, NALG - IF (RAIN(L).GT. 0) THEN - TOTR = TOTR + 1 - GOTO 830 - ENDIF - - IF (SNOW(L).GT. 0) THEN - TOTSN = TOTSN + 1 - GOTO 830 - ENDIF - - IF (SLEET(L).GT. 0) THEN - TOTIP = TOTIP + 1 - GOTO 830 - ENDIF - - IF (FREEZR(L).GT. 0) THEN - TOTZR = TOTZR + 1 - GOTO 830 - ENDIF - 830 CONTINUE - 820 CONTINUE -! print *, 'Calprecip Total Rain, snow, sleet, freeze= ', & -! TOTR,TOTSN,TOTIP,TOTZR - -! TIES ARE BROKEN TO FAVOR THE MOST DANGEROUS FORM OF PRECIP -! FREEZING RAIN > SNOW > SLEET > RAIN - IF (TOTSN .GT. TOTIP) THEN - IF (TOTSN .GT. TOTZR) THEN - IF (TOTSN .GE. TOTR) THEN - DOMS = 1 - GOTO 800 - ELSE - DOMR = 1 - GOTO 800 - ENDIF - ELSE IF (TOTZR .GE. TOTR) THEN - DOMZR = 1 - GOTO 800 - ELSE - DOMR = 1 - GOTO 800 - ENDIF - ELSE IF (TOTIP .GT. TOTZR) THEN - IF (TOTIP .GE. TOTR) THEN - DOMIP = 1 - GOTO 800 - ELSE - DOMR = 1 - GOTO 800 - ENDIF - ELSE IF (TOTZR .GE. TOTR) THEN - DOMZR = 1 - GOTO 800 - ELSE - DOMR = 1 - GOTO 800 - ENDIF - 800 CONTINUE - RETURN - END - - - - - diff --git a/sorc/gfs_bufr.fd/calwxt_gfs_baldwin.f b/sorc/gfs_bufr.fd/calwxt_gfs_baldwin.f deleted file mode 100755 index 217dbbcc0c..0000000000 --- a/sorc/gfs_bufr.fd/calwxt_gfs_baldwin.f +++ /dev/null @@ -1,294 +0,0 @@ - SUBROUTINE CALWXT(T,Q,td,twet,P,PINT,LMH,IWX,nd) -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: PROGRAM NAME (up to 20 characters) -C PRGMMR: YOUR NAME ORG: W/NMCXX DATE: YY-MM-DD -C -C ABSTRACT: START ABSTRACT HERE AND INDENT TO COLUMN 5 ON THE -C FOLLOWING LINES. PLEASE PROVIDE A BRIEF DESCRIPTION OF -C WHAT THE SUBPROGRAM DOES. -C -C PROGRAM HISTORY LOG: -C YY-MM-DD ORIGINAL PROGRAMMER'S NAME HERE -C YY-MM-DD MODIFIER1 DESCRIPTION OF CHANGE -C YY-MM-DD MODIFIER2 DESCRIPTION OF CHANGE -C -C USAGE: CALL PROGRAM-NAME(INARG1, INARG2, WRKARG, OUTARG1, ... ) -C INPUT ARGUMENT LIST: -C INARG1 - GENERIC DESCRIPTION, INCLUDING CONTENT, UNITS, -C INARG2 - TYPE. EXPLAIN FUNCTION IF CONTROL VARIABLE. -C -C OUTPUT ARGUMENT LIST: (INCLUDING WORK ARRAYS) -C WRKARG - GENERIC DESCRIPTION, ETC., AS ABOVE. -C OUTARG1 - EXPLAIN COMPLETELY IF ERROR RETURN -C ERRFLAG - EVEN IF MANY LINES ARE NEEDED -C -C INPUT FILES: (DELETE IF NO INPUT FILES IN SUBPROGRAM) -C -C OUTPUT FILES: (DELETE IF NO OUTPUT FILES IN SUBPROGRAM) -C -C REMARKS: LIST CAVEATS, OTHER HELPFUL HINTS OR INFORMATION -C -C ATTRIBUTES: -C LANGUAGE: INDICATE EXTENSIONS, COMPILER OPTIONS -C MACHINE: IBM SP -C -C$$$ -C -C FILE: CALWXT.f -C WRITTEN: 11 NOVEMBER 1993, MICHAEL BALDWIN -C REVISIONS: 4 April 94 - 1-d version intended for obs soundings -C 16 Sept 94 - compute all variables for possible -C future decsion tree modifications -C 14 Oct 94 - clean up 1-d version, use new -C decision tree -C -C ROUTINE TO COMPUTE PRECIPITATION TYPE USING A DECISION TREE -C APPROACH THAT USES VARIABLES SUCH AS INTEGRATED WET BULB TEMP -C BELOW FREEZING AND LOWEST LAYER TEMPERATURE -C -C SEE BALDWIN AND CONTORNO PREPRINT FROM 13TH WEATHER ANALYSIS -C AND FORECASTING CONFERENCE FOR MORE DETAILS -C - PARAMETER (LM=99) - PARAMETER (H1M12=1.E-12) -C -C LIST OF VARIABLES NEEDED -C PARAMETERS: -C D608,ROG,H1,D00 - PARAMETER(D608=0.608,ROG=287.04/9.8,H1=1.0,D00=0.0) -C -C INPUT: -C T,Q,td,twet,P,PINT,LMH -C -C T - Mid layer temp (K) -C Q - Mid layer spec hum (g/g) -C TD - Mid layer dew point temp (K) -C TWET - Mid layer wet bulb temp (K) -C P - Mid layer pressure (Pa) (linear average of interfacial -C pressures in log P) -C PINT - Interfacial pressure (Pa) -C LMH - Number of layers -c nd - 0 .. no print 1 .. print -C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -C NOTE: VERTICAL ORDER OF ARRAYS MUST BE LAYER 1 = TOP -C ---- . -C . -C . -C LAYER LMH = BOTTOM -C (JUST LIKE IN THE ETA MODEL) -C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -C -C INTERNAL: -C -C -C OUTPUT: -C IWX - INSTANTANEOUS WEATHER TYPE. -C ACTS LIKE A 4 BIT BINARY -C 1111 = RAIN/FREEZING RAIN/ICE PELLETS/SNOW -C WHERE THE ONE'S DIGIT IS FOR SNOW -C THE TWO'S DIGIT IS FOR ICE PELLETS -C THE FOUR'S DIGIT IS FOR FREEZING RAIN -C AND THE EIGHT'S DIGIT IS FOR RAIN -C -C------------------------------------------------------------- -C IN OTHER WORDS... -C -C IWX=1 SNOW -C IWX=2 ICE PELLETS/MIX WITH ICE PELLETS -C IWX=4 FREEZING RAIN/MIX WITH FREEZING RAIN -C IWX=8 RAIN -C------------------------------------------------------------- -C -C -C SUBROUTINES CALLED: -C WETBLB -C -C -C INITIALIZE WEATHER TYPE ARRAY TO ZERO (IE, OFF). -C WE DO THIS SINCE WE WANT IWX TO REPRESENT THE -C INSTANTANEOUS WEATHER TYPE ON RETURN. -C - DIMENSION T(LM+1),Q(LM),P(LM),PINT(LM+1),TWET(LM),TD(LM) -C - IWX = 0 - AREAS8=D00 - AREAN8=D00 - AREAPI=D00 - AREAP4=D00 - SURFW =D00 - SURFC =D00 -C -C NUMBER OF LEVELS -C - LMHK=LMH -C -C COMPUTE DEW POINTS, -C FIND COLDEST TEMP IN SATURATED LAYER BETWEEN -C 70 MB ABOVE GROUND AND 500 MB, -C AND FIND THE HIGHEST SAT LAYER, 'TIS THE ICE NUCL LEVEL. -C -C - PSFCK=PINT(LMHK+1) - TDCHK=2.0 - 1960 TCOLD=T(LMHK) - TWARM=T(LMHK) - LICE=LMHK - DO 1915 L=1,LMHK - QKL=Q(L) - QKL=AMAX1(H1M12,QKL) - TKL=T(L) - PKL=P(L) - tdkl = td(l) -C -C SKIP PAST THIS IF THE LAYER IS NOT BETWEEN 70 MB ABOVE GROUND -C AND 500 MB -C - IF (PKL.LT.50000.0.OR.PKL.GT.PSFCK-7000.0) GOTO 1915 - TDPRE=TKL-TDKL -C -C ALSO FIND THE HIGHEST SAT LAYER-USE FOR AREAPI,AREAP4 -C - IF (TDPRE.LT.TDCHK.AND.P(L).LT.P(LICE)) LICE=L - IF (TDPRE.LT.TDCHK.AND.TKL.GT.TWARM) TWARM=TKL - IF (TDPRE.LT.TDCHK.AND.TKL.LT.TCOLD) TCOLD=TKL - 1915 CONTINUE -C -C IF WE DONT HAVE A LAYER WITH DEW POINT DEP OF TDCHK OR LESS -C INCREASE TDCHK (UP TO 6 MAX) -C - IF (TCOLD.EQ.T(LMHK+1).AND.TDCHK.LT.6.0) THEN - TDCHK=TDCHK+2.0 - GOTO 1960 - ENDIF -C -C LOWEST LAYER T -C - TLMHK=T(LMHK+1) -C -C TWET AREA VARIABLES -C FROM GROUND TO 150 MB ABOVE SURFACE -C FROM GROUND TO TCOLD LAYER -C FROM GROUND TO 1ST LAYER WHERE T < 0.0 -C FROM GROUND TO TWARM LAYER -C -C PINTK1 IS THE PRESSURE AT THE BOTTOM OF THE LAYER -C PINTK2 IS THE PRESSURE AT THE TOP OF THE LAYER -C -C AREAPI IS THE AREA OF TWET ABOVE FREEZING BELOW TCOLD LYR -C AREAP4 IS THE AREA OF TWET ABOVE -4 C BELOW TCOLD LYR -C - PINTK1=PSFCK - DO 1945 L=LMHK,LICE,-1 - PINTK2=PINT(L) - DZKL=T(L)*(Q(L)*D608+H1)*ROG* - 1 ALOG(PINTK1/PINTK2) - AREA1=(TWET(L)-273.15)*DZKL - AREA2=(TWET(L)-269.15)*DZKL - IF (TWET(L).GE.273.15) AREAPI=AREAPI+AREA1 - IF (TWET(L).GE.269.15) AREAP4=AREAP4+AREA2 - PINTK1=PINTK2 - 1945 CONTINUE -C -C AREAS8 IS THE NET AREA OF TWET W.R.T. FREEZING IN LOWEST 150MB -C AREAN8 IS THE NET AREA OF TWET < FREEZING IN LOWEST 150MB -C - PINTK1=PSFCK - PM150=PSFCK-15000. - DO 1955 L=LMHK,1,-1 - PINTK2=PINT(L) - IF (PINTK1.LT.PM150) GOTO 1950 - DZKL=T(L)*(Q(L)*D608+H1)*ROG* - 1 ALOG(PINTK1/PINTK2) -C -C SUM PARTIAL LAYER IF IN 150 MB AGL LAYER -C - IF (PINTK2.LT.PM150) - & DZKL=T(L)*(Q(L)*D608+H1)*ROG* - 1 ALOG(PINTK1/PM150) - AREA1=(TWET(L)-273.15)*DZKL - AREAS8=AREAS8+AREA1 - IF(AREA1.LT.0.) AREAN8=AREAN8+AREA1 - 1950 PINTK1=PINTK2 - 1955 CONTINUE -C -C SURFW IS THE AREA OF TWET ABOVE FREEZING BETWEEN THE GROUND -C AND THE FIRST LAYER ABOVE GROUND BELOW FREEZING -C SURFC IS THE AREA OF TWET BELOW FREEZING BETWEEN THE GROUND -C AND THE TWARM LAYER -C - PINTK1=PSFCK - IFRZL=0 - IWRML=0 - DO 2050 L=LMHK,1,-1 - IF (IFRZL.EQ.0.AND.T(L).LE.273.15) IFRZL=1 - IF (IWRML.EQ.0.AND.T(L).GE.TWARM) IWRML=1 - PINTK2=PINT(L) - DZKL=T(L)*(Q(L)*D608+H1)*ROG* - 1 ALOG(PINTK1/PINTK2) - AREA1=(TWET(L)-273.15)*DZKL - IF (IFRZL.EQ.0) THEN - IF (TWET(L).GE.273.15) SURFW=SURFW+AREA1 - ENDIF - IF (IWRML.EQ.0) THEN - IF (TWET(L).LE.273.15) SURFC=SURFC+AREA1 - ENDIF - PINTK1=PINTK2 - 2050 CONTINUE -C -C DECISION TREE TIME -C - if(nd.eq.1) then - print *, ' tcold =', tcold - print *, ' tlmhk =', tlmhk - print *, ' areap4 =', areap4 - print *, ' areas8 =', areas8 - print *, ' surfw =', surfw - print *, ' surfc =', surfc -c print *, ' temp= ' -c print *, (t(k),k=1,lmhk+1) -c print *, ' tdew =' -c print *, (td(k),k=1,lmhk) -c print *, ' twet =' -c print *, (twet(k),k=1,lmhk) - endif - IF (TCOLD.GT.269.15) THEN - IF (TLMHK.LE.273.15) THEN -C TURN ON THE FLAG FOR -C FREEZING RAIN = 4 - IWX=4 - GOTO 1900 - ELSE -C TURN ON THE FLAG FOR -C RAIN = 8 - IWX=8 - GOTO 1900 - ENDIF - ENDIF -C - IF (AREAP4.LT.3000.0) THEN -C TURN ON THE FLAG FOR -C SNOW = 1 - IWX=1 - GOTO 1900 - ENDIF -C - IF (SURFC.LE.-3000.0.OR. - & (AREAS8.LE.-3000.0.AND.SURFW.LT.50.0)) THEN -C TURN ON THE FLAG FOR -C ICE PELLETS = 2 - IWX=2 - GOTO 1900 - ENDIF - IF (TLMHK.LT.273.15) THEN -C TURN ON THE FLAG FOR -C FREEZING RAIN = 4 - IWX=4 - ELSE -C TURN ON THE FLAG FOR -C RAIN = 8 - IWX=8 - ENDIF - 1900 CONTINUE - RETURN - END diff --git a/sorc/gfs_bufr.fd/calwxt_gfs_ramer.f b/sorc/gfs_bufr.fd/calwxt_gfs_ramer.f deleted file mode 100755 index 1faabf6214..0000000000 --- a/sorc/gfs_bufr.fd/calwxt_gfs_ramer.f +++ /dev/null @@ -1,364 +0,0 @@ -Cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -C -C DoPhase is a subroutine written and provided by Jim Ramer at NOAA/FSL -C -C Ramer, J, 1993: An empirical technique for diagnosing precipitation -C type from model output. Preprints, 5th Conf. on Aviation -C Weather Systems, Vienna, VA, Amer. Meteor. Soc., 227-230. -C -Cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -C - SUBROUTINE CALWXT1(pq,tq,qq,twq,tdq,nq,lm,ppt,ptyp,trace) -c SUBROUTINE dophase(pq, ! input pressure sounding mb -c + tq, ! input temperature sounding K -c + pq, | input pressure -c + qq, ! input spec humidityfraction -c + twq, ! input wet-bulb temperature -c + nq, ! input number of levels in sounding -c + twq, ! output wet-bulb sounding K -c + icefrac, ! output ice fraction -c + ptyp) ! output(2) phase 2=Rain, 3=Frzg, 4=Solid, -C 6=IP JC 9/16/99 - LOGICAL trace -c PARAMETER (trace = .false.) - PARAMETER (A2=17.2693882,A3=273.16,A4=35.86,PQ0=379.90516) - PARAMETER (G=9.80665,CP=1004.686,RCP=0.2857141,LECP=1572.5) - PARAMETER (twice=266.55,rhprcp=0.80,deltag=1.02,prcpmin=0.3, - * emelt=0.045,rlim=0.04,slim=0.85) - PARAMETER (twmelt=273.15,tz=273.15,efac=1.0,PTHRES=0.25) -c pthres is in unit of mm and is equivalent to .01 inch -C - INTEGER*4 i, k1, lll, k2, toodry, iflag, nq -C - INTEGER ptyp -C - REAL rcp, flg, flag, xxx, pq(lm), tq(lm), twq(lm), rhq(lm), mye, - * qq(lm), icefrac, tqtmp(lm), pqtmp(lm), rhqtmp(lm) - * ,twtmp(lm),qqtmp(lm),tdqtmp(lm),tdq(lm) -C - COMMON /flagflg/ flag, flg - DATA iflag / -9/ -C -C Initialize. - IF (trace) print *, '******* NEW STATION ******' - IF (trace) print *, 'Twmelt,Twice,rhprcp,Emelt' - IF (trace) print *, twmelt, twice, rhprcp, emelt - icefrac = flag - ptyp = 0 -c IF (PPT.LE.PTHRES) RETURN -C -C GSM compute RH, convert pressure to mb, and reverse order - - DO 88 i = 1, nq - LEV=NQ-I+1 -c QC=PQ0/PQ(I) * EXP(A2*(TQ(I)-A3)/(TQ(I)-A4)) - call svp(qc,es,pq(i),tq(i)) - RHQTMP(LEV)=QQ(I)/QC - PQTMP(LEV)=PQ(I)/100. - TQTMP(LEV)=TQ(I) - TWTMP(LEV)=TWQ(I) - QQTMP(LEV)=QQ(I) - TDQTMP(LEV)=TDQ(I) - 88 CONTINUE - - do 92 i=1,nq - TQ(I)=TQTMP(I) - PQ(I)=PQTMP(I) - RHQ(I)=RHQTMP(I) - TWQ(I)=TWTMP(I) - QQ(I)=QQTMP(I) - TDQ(I)=TDQTMP(I) - 92 continue - - -C See if there was too little precip reported. -C -CCC RATE RESTRICTION REMOVED BY JOHN CORTINAS 3/16/99 -C -C Construct wet-bulb sounding, locate generating level. - twmax = -999.0 - rhmax = 0.0 - k1 = 0 ! top of precip generating layer - k2 = 0 ! layer of maximum rh -C - IF (trace) WRITE (20,*) 'rhq(1)', rhq(1) - IF (rhq(1).lt.rhprcp) THEN - toodry = 1 - ELSE - toodry = 0 - END IF -C -C toodry=((Rhq(1).lt.rhprcp).and.1) - pbot = pq(1) - DO 10 i = 1, nq -c xxx = tdofesat(esat(tq(i))*rhq(i)) -c call tdew(xxx,tq(i),qq(i),pq(i)*100.) - xxx = tdq(i) - IF (trace) print *, 'T,Rh,Td,P,nq ', tq(i), rhq(i), xxx, - + pq(i), nq -c twq(i) = xmytw(tq(i),xxx,pq(i)) - IF (trace) print *, 'Twq(i),i ', twq(i), i - twmax = amax1(twq(i),twmax) - IF (trace) print *, 'Tw,Rh,P ', twq(i) - 273.15, rhq(i), - + pq(i) - IF (pq(i).ge.400.0) THEN - IF (rhq(i).gt.rhmax) THEN - rhmax = rhq(i) - k2 = i - IF (trace) print *, 'rhmax,k2,i', rhmax, k2, i - END IF -C - IF (i.ne.1) THEN - IF (trace) print *, 'ME: toodry,i', toodry, i - IF (rhq(i).ge.rhprcp.or.toodry.eq.0) THEN - IF (toodry.ne.0) THEN - dpdrh = alog(pq(i)/pq(i-1)) / (rhq(i)- - + rhq(i-1)) - pbot = exp(alog(pq(i))+(rhprcp-rhq(i))*dpdrh) -C -Clin dpdrh=(Pq(i)-Pq(i-1))/(Rhq(i)-Rhq(i-1)) -Clin pbot=Pq(i)+(rhprcp-Rhq(i))*dpdrh - ptw = pq(i) - toodry = 0 - IF (trace) print *, 'dpdrh,pbot,rhprcp-rhq - +(i),i,ptw, toodry', dpdrh, pbot, rhprcp - rhq(i), i, ptw, - + toodry - ELSE IF (rhq(i).ge.rhprcp) THEN - ptw = pq(i) - IF (trace) print *, 'HERE1: ptw,toodry', - + ptw, toodry - ELSE - toodry = 1 - dpdrh = alog(pq(i)/pq(i-1)) / (rhq(i)- - + rhq(i-1)) - ptw = exp(alog(pq(i))+(rhprcp-rhq(i))*dpdrh) - IF (trace) print *, - + 'HERE2:dpdrh,pbot,i,ptw,toodry', dpdrh, - + pbot, i, ptw, toodry -Clin dpdrh=(Pq(i)-Pq(i-1))/(Rhq(i)-Rhq(i-1)) -Clin ptw=Pq(i)+(rhprcp-Rhq(i))*dpdrh -C - END IF -C - IF (trace) print *, 'HERE3:pbot,ptw,deltag', - + pbot, ptw, deltag - IF (pbot/ptw.ge.deltag) THEN -Clin If (pbot-ptw.lt.deltag) Goto 2003 - k1 = i - ptop = ptw - END IF - END IF - END IF - END IF -C - 10 CONTINUE -C -C Gross checks for liquid and solid precip which dont require generating level. -C -c print *, 'twq1 ', twq(1) - IF (twq(1).ge.273.15+2.0) THEN - ptyp = 8 ! liquid - IF (trace) PRINT *, 'liquid' - icefrac = 0.0 - RETURN - END IF -C - print *, 'twmax ', twmax - IF (twmax.le.twice) THEN - icefrac = 1.0 - ptyp = 1 ! solid - RETURN - END IF -C -C Check to see if we had no success with locating a generating level. -C - IF (trace) print *, 'HERE6: k1,ptyp', k1, ptyp - IF (k1.eq.0) THEN - rate = flag - RETURN - END IF -C - IF (ptop.eq.pq(k1)) THEN - twtop = twq(k1) - rhtop = rhq(k1) - k2 = k1 - k1 = k1 - 1 - ELSE - k2 = k1 - k1 = k1 - 1 - wgt1 = alog(ptop/pq(k2)) / alog(pq(k1)/pq(k2)) -Clin wgt1=(ptop-Pq(k2))/(Pq(k1)-Pq(k2)) - wgt2 = 1.0 - wgt1 - twtop = twq(k1) * wgt1 + twq(k2) * wgt2 - rhtop = rhq(k1) * wgt1 + rhq(k2) * wgt2 - END IF -C - IF (trace) print *, - + 'HERE7: ptop,k1,pq(k1),twtop,rhtop,k2,wgt1, wgt2', ptop, - + k1, pq(k1), twtop, rhtop, k2, wgt1, wgt2 -C -C Calculate temp and wet-bulb ranges below precip generating level. - DO 20 i = 1, k1 - twmax = amax1(twq(i),twmax) - 20 CONTINUE -C -C Gross check for solid precip, initialize ice fraction. - IF (trace) print *, twmax - IF (twtop.le.twice) THEN - icefrac = 1.0 - IF (twmax.le.twmelt) THEN ! gross check for solid precip. - IF (trace) PRINT *, 'solid' - ptyp = 1 ! solid precip - RETURN - END IF - lll = 0 - ELSE - icefrac = 0.0 - lll = 1 - END IF -C -C Loop downward through sounding from highest precip generating level. - 30 CONTINUE -C - IF (trace) PRINT *, ptop, twtop - 273.15, icefrac - IF (trace) print *, 'P,Tw,frac,twq(k1)', ptop, twtop - 273.15, - + icefrac, twq(k1) - IF (icefrac.ge.1.0) THEN ! starting as all ice - IF (trace) print *, 'ICEFRAC=1', icefrac - print *, 'twq twmwelt twtop ', twq(k1), twmelt, twtop - IF (twq(k1).lt.twmelt) GO TO 40 ! cannot commence melting - IF (twq(k1).eq.twtop) GO TO 40 ! both equal twmelt, nothing h - wgt1 = (twmelt-twq(k1)) / (twtop-twq(k1)) - rhavg = rhq(k1) + wgt1 * (rhtop-rhq(k1)) / 2 - dtavg = (twmelt-twq(k1)) / 2 - dpk = wgt1 * alog(pq(k1)/ptop) !lin dpk=wgt1*(Pq(k1)-Ptop) -C mye=emelt*(1.0-(1.0-Rhavg)*efac) - mye = emelt * rhavg ** efac - icefrac = icefrac + dpk * dtavg / mye - IF (trace) print *, - + 'HERE8: wgt1,rhavg,dtavg,dpk,mye,icefrac', wgt1, rhavg, - + dtavg, dpk, mye, icefrac - ELSE IF (icefrac.le.0.0) THEN ! starting as all liquid - IF (trace) print *, 'HERE9: twtop,twq(k1),k1,lll', twtop, - + twq(k1), k1, lll - lll = 1 -C If (Twq(k1).le.Twice) icefrac=1.0 ! autoconvert -C Goto 1020 - IF (twq(k1).gt.twice) GO TO 40 ! cannot commence freezing - IF (twq(k1).eq.twtop) THEN - wgt1 = 0.5 - ELSE - wgt1 = (twice-twq(k1)) / (twtop-twq(k1)) - END IF - rhavg = rhq(k1) + wgt1 * (rhtop-rhq(k1)) / 2 - dtavg = twmelt - (twq(k1)+twice) / 2 - dpk = wgt1 * alog(pq(k1)/ptop) !lin dpk=wgt1*(Pq(k1)-Ptop) -C mye=emelt*(1.0-(1.0-Rhavg)*efac) - mye = emelt * rhavg ** efac - icefrac = icefrac + dpk * dtavg / mye - IF (trace) print *, 'HERE10: wgt1,rhtop,rhq(k1),dtavg', - + wgt1, rhtop, rhq(k1), dtavg - ELSE IF ((twq(k1).le.twmelt).and.(twq(k1).lt.twmelt)) THEN ! mix - rhavg = (rhq(k1)+rhtop) / 2 - dtavg = twmelt - (twq(k1)+twtop) / 2 - dpk = alog(pq(k1)/ptop) !lin dpk=Pq(k1)-Ptop -C mye=emelt*(1.0-(1.0-Rhavg)*efac) - mye = emelt * rhavg ** efac - icefrac = icefrac + dpk * dtavg / mye - - IF (trace) print *, 'HERE11: twq(K1),twtop', twq(k1), - + twtop - ELSE ! mix where Tw curve crosses twmelt in layer - IF (twq(k1).eq.twtop) GO TO 40 ! both equal twmelt, nothing h - wgt1 = (twmelt-twq(k1)) / (twtop-twq(k1)) - wgt2 = 1.0 - wgt1 - rhavg = rhtop + wgt2 * (rhq(k1)-rhtop) / 2 - dtavg = (twmelt-twtop) / 2 - dpk = wgt2 * alog(pq(k1)/ptop) !lin dpk=wgt2*(Pq(k1)-Ptop) -C mye=emelt*(1.0-(1.0-Rhavg)*efac) - mye = emelt * rhavg ** efac - icefrac = icefrac + dpk * dtavg / mye - icefrac = amin1(1.0,amax1(icefrac,0.0)) - IF (trace) print *, 'HERE12: twq(k1),twtop,icefrac,wgt1,wg - +t2,rhavg,rhtop,rhq(k1),dtavg,k1', twq(k1), twtop, icefrac, wgt1, - + wgt2, rhavg, rhtop, rhq(k1), dtavg, k1 - IF (icefrac.le.0.0) THEN -C If (Twq(k1).le.Twice) icefrac=1.0 ! autoconvert -C Goto 1020 - IF (twq(k1).gt.twice) GO TO 40 ! cannot commence freezin - wgt1 = (twice-twq(k1)) / (twtop-twq(k1)) - dtavg = twmelt - (twq(k1)+twice) / 2 - IF (trace) WRITE (20,*) 'IN IF' - ELSE - dtavg = (twmelt-twq(k1)) / 2 - IF (trace) WRITE (20,*) 'IN ELSE' - END IF - IF (trace) print *, 'NEW ICE FRAC CALC' - rhavg = rhq(k1) + wgt1 * (rhtop-rhq(k1)) / 2 - dpk = wgt1 * alog(pq(k1)/ptop) !lin dpk=wgt1*(Pq(k1)-Ptop) -C mye=emelt*(1.0-(1.0-Rhavg)*efac) - mye = emelt * rhavg ** efac - icefrac = icefrac + dpk * dtavg / mye - IF (trace) print *, 'HERE13: icefrac,k1,dtavg,rhavg', - + icefrac, k1, dtavg, rhavg - END IF -C - icefrac = amin1(1.0,amax1(icefrac,0.0)) - IF (trace) print *, 'NEW ICEFRAC:', icefrac, icefrac -C -C Get next level down if there is one, loop back. - 40 IF (k1.gt.1) THEN - IF (trace) WRITE (20,*) 'LOOPING BACK' - twtop = twq(k1) - ptop = pq(k1) - rhtop = rhq(k1) - k1 = k1 - 1 - GO TO 30 - END IF -C -C -C Determine precip type based on snow fraction and surface wet-bulb. -C If (trace) Print *,Pq(k1),Twq(k1)-273.15,icefrac -C - IF (trace) print *, 'P,Tw,frac,lll', pq(k1), twq(k2) - 273.15, - + icefrac, lll -C -c print *, 'icefrac ', icefrac - IF (icefrac.ge.slim) THEN - IF (lll.ne.0) THEN - ptyp = 2 ! Ice Pellets JC 9/16/99 - IF (trace) print *, 'frozen' - ELSE - ptyp = 1 ! Snow - print *, 'snow' - IF (trace) print *, 'snow' - END IF - ELSE IF (icefrac.le.rlim) THEN - IF (twq(1).lt.tz) THEN - print *, 'aha! frz' - ptyp = 4 ! Freezing Precip - IF (trace) print *, 'freezing' - ELSE - ptyp = 8 ! Rain - print *, 'rain' - IF (trace) print *, 'liquid' - END IF - ELSE - IF (trace) print *, 'Mix' - IF (twq(1).lt.tz) THEN - IF (trace) print *, 'freezing' -cGSM not sure what to do when 'mix' is predicted; I chose sleet as -cGSK a shaky best option - - ptyp = 2 ! Ice Pellets -c ptyp = 5 ! Mix - ELSE -c ptyp = 5 ! Mix - ptyp = 2 ! Ice Pellets - END IF - END IF - IF (trace) print *, "Returned ptyp is:ptyp,lll ", ptyp, lll - IF (trace) print *, "Returned icefrac is: ", icefrac - RETURN -C - END diff --git a/sorc/gfs_bufr.fd/funcphys.f b/sorc/gfs_bufr.fd/funcphys.f deleted file mode 100755 index fd30d1568f..0000000000 --- a/sorc/gfs_bufr.fd/funcphys.f +++ /dev/null @@ -1,2899 +0,0 @@ -!------------------------------------------------------------------------------- -module funcphys -!$$$ Module Documentation Block -! -! Module: funcphys API for basic thermodynamic physics -! Author: Iredell Org: W/NX23 Date: 1999-03-01 -! -! Abstract: This module provides an Application Program Interface -! for computing basic thermodynamic physics functions, in particular -! (1) saturation vapor pressure as a function of temperature, -! (2) dewpoint temperature as a function of vapor pressure, -! (3) equivalent potential temperature as a function of temperature -! and scaled pressure to the kappa power, -! (4) temperature and specific humidity along a moist adiabat -! as functions of equivalent potential temperature and -! scaled pressure to the kappa power, -! (5) scaled pressure to the kappa power as a function of pressure, and -! (6) temperature at the lifting condensation level as a function -! of temperature and dewpoint depression. -! The entry points required to set up lookup tables start with a "g". -! All the other entry points are functions starting with an "f" or -! are subroutines starting with an "s". These other functions and -! subroutines are elemental; that is, they return a scalar if they -! are passed only scalars, but they return an array if they are passed -! an array. These other functions and subroutines can be inlined, too. -! -! Program History Log: -! 1999-03-01 Mark Iredell -! 1999-10-15 Mark Iredell SI unit for pressure (Pascals) -! 2001-02-26 Mark Iredell Ice phase changes of Hong and Moorthi -! -! Public Variables: -! krealfp Integer parameter kind or length of reals (=kind_phys) -! -! Public Subprograms: -! gpvsl Compute saturation vapor pressure over liquid table -! -! fpvsl Elementally compute saturation vapor pressure over liquid -! function result Real(krealfp) saturation vapor pressure in Pascals -! t Real(krealfp) temperature in Kelvin -! -! fpvslq Elementally compute saturation vapor pressure over liquid -! function result Real(krealfp) saturation vapor pressure in Pascals -! t Real(krealfp) temperature in Kelvin -! -! fpvslx Elementally compute saturation vapor pressure over liquid -! function result Real(krealfp) saturation vapor pressure in Pascals -! t Real(krealfp) temperature in Kelvin -! -! gpvsi Compute saturation vapor pressure over ice table -! -! fpvsi Elementally compute saturation vapor pressure over ice -! function result Real(krealfp) saturation vapor pressure in Pascals -! t Real(krealfp) temperature in Kelvin -! -! fpvsiq Elementally compute saturation vapor pressure over ice -! function result Real(krealfp) saturation vapor pressure in Pascals -! t Real(krealfp) temperature in Kelvin -! -! fpvsix Elementally compute saturation vapor pressure over ice -! function result Real(krealfp) saturation vapor pressure in Pascals -! t Real(krealfp) temperature in Kelvin -! -! gpvs Compute saturation vapor pressure table -! -! fpvs Elementally compute saturation vapor pressure -! function result Real(krealfp) saturation vapor pressure in Pascals -! t Real(krealfp) temperature in Kelvin -! -! fpvsq Elementally compute saturation vapor pressure -! function result Real(krealfp) saturation vapor pressure in Pascals -! t Real(krealfp) temperature in Kelvin -! -! fpvsx Elementally compute saturation vapor pressure -! function result Real(krealfp) saturation vapor pressure in Pascals -! t Real(krealfp) temperature in Kelvin -! -! gtdpl Compute dewpoint temperature over liquid table -! -! ftdpl Elementally compute dewpoint temperature over liquid -! function result Real(krealfp) dewpoint temperature in Kelvin -! pv Real(krealfp) vapor pressure in Pascals -! -! ftdplq Elementally compute dewpoint temperature over liquid -! function result Real(krealfp) dewpoint temperature in Kelvin -! pv Real(krealfp) vapor pressure in Pascals -! -! ftdplx Elementally compute dewpoint temperature over liquid -! function result Real(krealfp) dewpoint temperature in Kelvin -! pv Real(krealfp) vapor pressure in Pascals -! -! ftdplxg Elementally compute dewpoint temperature over liquid -! function result Real(krealfp) dewpoint temperature in Kelvin -! t Real(krealfp) guess dewpoint temperature in Kelvin -! pv Real(krealfp) vapor pressure in Pascals -! -! gtdpi Compute dewpoint temperature table over ice -! -! ftdpi Elementally compute dewpoint temperature over ice -! function result Real(krealfp) dewpoint temperature in Kelvin -! pv Real(krealfp) vapor pressure in Pascals -! -! ftdpiq Elementally compute dewpoint temperature over ice -! function result Real(krealfp) dewpoint temperature in Kelvin -! pv Real(krealfp) vapor pressure in Pascals -! -! ftdpix Elementally compute dewpoint temperature over ice -! function result Real(krealfp) dewpoint temperature in Kelvin -! pv Real(krealfp) vapor pressure in Pascals -! -! ftdpixg Elementally compute dewpoint temperature over ice -! function result Real(krealfp) dewpoint temperature in Kelvin -! t Real(krealfp) guess dewpoint temperature in Kelvin -! pv Real(krealfp) vapor pressure in Pascals -! -! gtdp Compute dewpoint temperature table -! -! ftdp Elementally compute dewpoint temperature -! function result Real(krealfp) dewpoint temperature in Kelvin -! pv Real(krealfp) vapor pressure in Pascals -! -! ftdpq Elementally compute dewpoint temperature -! function result Real(krealfp) dewpoint temperature in Kelvin -! pv Real(krealfp) vapor pressure in Pascals -! -! ftdpx Elementally compute dewpoint temperature -! function result Real(krealfp) dewpoint temperature in Kelvin -! pv Real(krealfp) vapor pressure in Pascals -! -! ftdpxg Elementally compute dewpoint temperature -! function result Real(krealfp) dewpoint temperature in Kelvin -! t Real(krealfp) guess dewpoint temperature in Kelvin -! pv Real(krealfp) vapor pressure in Pascals -! -! gthe Compute equivalent potential temperature table -! -! fthe Elementally compute equivalent potential temperature -! function result Real(krealfp) equivalent potential temperature in Kelvin -! t Real(krealfp) LCL temperature in Kelvin -! pk Real(krealfp) LCL pressure over 1e5 Pa to the kappa power -! -! ftheq Elementally compute equivalent potential temperature -! function result Real(krealfp) equivalent potential temperature in Kelvin -! t Real(krealfp) LCL temperature in Kelvin -! pk Real(krealfp) LCL pressure over 1e5 Pa to the kappa power -! -! fthex Elementally compute equivalent potential temperature -! function result Real(krealfp) equivalent potential temperature in Kelvin -! t Real(krealfp) LCL temperature in Kelvin -! pk Real(krealfp) LCL pressure over 1e5 Pa to the kappa power -! -! gtma Compute moist adiabat tables -! -! stma Elementally compute moist adiabat temperature and moisture -! the Real(krealfp) equivalent potential temperature in Kelvin -! pk Real(krealfp) pressure over 1e5 Pa to the kappa power -! tma Real(krealfp) parcel temperature in Kelvin -! qma Real(krealfp) parcel specific humidity in kg/kg -! -! stmaq Elementally compute moist adiabat temperature and moisture -! the Real(krealfp) equivalent potential temperature in Kelvin -! pk Real(krealfp) pressure over 1e5 Pa to the kappa power -! tma Real(krealfp) parcel temperature in Kelvin -! qma Real(krealfp) parcel specific humidity in kg/kg -! -! stmax Elementally compute moist adiabat temperature and moisture -! the Real(krealfp) equivalent potential temperature in Kelvin -! pk Real(krealfp) pressure over 1e5 Pa to the kappa power -! tma Real(krealfp) parcel temperature in Kelvin -! qma Real(krealfp) parcel specific humidity in kg/kg -! -! stmaxg Elementally compute moist adiabat temperature and moisture -! tg Real(krealfp) guess parcel temperature in Kelvin -! the Real(krealfp) equivalent potential temperature in Kelvin -! pk Real(krealfp) pressure over 1e5 Pa to the kappa power -! tma Real(krealfp) parcel temperature in Kelvin -! qma Real(krealfp) parcel specific humidity in kg/kg -! -! gpkap Compute pressure to the kappa table -! -! fpkap Elementally raise pressure to the kappa power. -! function result Real(krealfp) p over 1e5 Pa to the kappa power -! p Real(krealfp) pressure in Pascals -! -! fpkapq Elementally raise pressure to the kappa power. -! function result Real(krealfp) p over 1e5 Pa to the kappa power -! p Real(krealfp) pressure in Pascals -! -! fpkapo Elementally raise pressure to the kappa power. -! function result Real(krealfp) p over 1e5 Pa to the kappa power -! p Real(krealfp) surface pressure in Pascals -! -! fpkapx Elementally raise pressure to the kappa power. -! function result Real(krealfp) p over 1e5 Pa to the kappa power -! p Real(krealfp) pressure in Pascals -! -! grkap Compute pressure to the 1/kappa table -! -! frkap Elementally raise pressure to the 1/kappa power. -! function result Real(krealfp) pressure in Pascals -! pkap Real(krealfp) p over 1e5 Pa to the 1/kappa power -! -! frkapq Elementally raise pressure to the kappa power. -! function result Real(krealfp) pressure in Pascals -! pkap Real(krealfp) p over 1e5 Pa to the kappa power -! -! frkapx Elementally raise pressure to the kappa power. -! function result Real(krealfp) pressure in Pascals -! pkap Real(krealfp) p over 1e5 Pa to the kappa power -! -! gtlcl Compute LCL temperature table -! -! ftlcl Elementally compute LCL temperature. -! function result Real(krealfp) temperature at the LCL in Kelvin -! t Real(krealfp) temperature in Kelvin -! tdpd Real(krealfp) dewpoint depression in Kelvin -! -! ftlclq Elementally compute LCL temperature. -! function result Real(krealfp) temperature at the LCL in Kelvin -! t Real(krealfp) temperature in Kelvin -! tdpd Real(krealfp) dewpoint depression in Kelvin -! -! ftlclo Elementally compute LCL temperature. -! function result Real(krealfp) temperature at the LCL in Kelvin -! t Real(krealfp) temperature in Kelvin -! tdpd Real(krealfp) dewpoint depression in Kelvin -! -! ftlclx Elementally compute LCL temperature. -! function result Real(krealfp) temperature at the LCL in Kelvin -! t Real(krealfp) temperature in Kelvin -! tdpd Real(krealfp) dewpoint depression in Kelvin -! -! gfuncphys Compute all physics function tables -! -! Attributes: -! Language: Fortran 90 -! -!$$$ - use machine,only:kind_phys - use physcons - implicit none - private -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! Public Variables -! integer,public,parameter:: krealfp=selected_real_kind(15,45) - integer,public,parameter:: krealfp=kind_phys -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! Private Variables - real(krealfp),parameter:: psatb=con_psat*1.e-5 - integer,parameter:: nxpvsl=7501 - real(krealfp) c1xpvsl,c2xpvsl,tbpvsl(nxpvsl) - integer,parameter:: nxpvsi=7501 - real(krealfp) c1xpvsi,c2xpvsi,tbpvsi(nxpvsi) - integer,parameter:: nxpvs=7501 - real(krealfp) c1xpvs,c2xpvs,tbpvs(nxpvs) - integer,parameter:: nxtdpl=5001 - real(krealfp) c1xtdpl,c2xtdpl,tbtdpl(nxtdpl) - integer,parameter:: nxtdpi=5001 - real(krealfp) c1xtdpi,c2xtdpi,tbtdpi(nxtdpi) - integer,parameter:: nxtdp=5001 - real(krealfp) c1xtdp,c2xtdp,tbtdp(nxtdp) - integer,parameter:: nxthe=241,nythe=151 - real(krealfp) c1xthe,c2xthe,c1ythe,c2ythe,tbthe(nxthe,nythe) - integer,parameter:: nxma=151,nyma=121 - real(krealfp) c1xma,c2xma,c1yma,c2yma,tbtma(nxma,nyma),tbqma(nxma,nyma) -! integer,parameter:: nxpkap=5501 - integer,parameter:: nxpkap=11001 - real(krealfp) c1xpkap,c2xpkap,tbpkap(nxpkap) - integer,parameter:: nxrkap=5501 - real(krealfp) c1xrkap,c2xrkap,tbrkap(nxrkap) - integer,parameter:: nxtlcl=151,nytlcl=61 - real(krealfp) c1xtlcl,c2xtlcl,c1ytlcl,c2ytlcl,tbtlcl(nxtlcl,nytlcl) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! Public Subprograms - public gpvsl,fpvsl,fpvslq,fpvslx - public gpvsi,fpvsi,fpvsiq,fpvsix - public gpvs,fpvs,fpvsq,fpvsx - public gtdpl,ftdpl,ftdplq,ftdplx,ftdplxg - public gtdpi,ftdpi,ftdpiq,ftdpix,ftdpixg - public gtdp,ftdp,ftdpq,ftdpx,ftdpxg - public gthe,fthe,ftheq,fthex - public gtma,stma,stmaq,stmax,stmaxg - public gpkap,fpkap,fpkapq,fpkapo,fpkapx - public grkap,frkap,frkapq,frkapx - public gtlcl,ftlcl,ftlclq,ftlclo,ftlclx - public gfuncphys -contains -!------------------------------------------------------------------------------- - subroutine gpvsl -!$$$ Subprogram Documentation Block -! -! Subprogram: gpvsl Compute saturation vapor pressure table over liquid -! Author: N Phillips W/NMC2X2 Date: 30 dec 82 -! -! Abstract: Computes saturation vapor pressure table as a function of -! temperature for the table lookup function fpvsl. -! Exact saturation vapor pressures are calculated in subprogram fpvslx. -! The current implementation computes a table with a length -! of 7501 for temperatures ranging from 180. to 330. Kelvin. -! -! Program History Log: -! 91-05-07 Iredell -! 94-12-30 Iredell expand table -! 1999-03-01 Iredell f90 module -! -! Usage: call gpvsl -! -! Subprograms called: -! (fpvslx) inlinable function to compute saturation vapor pressure -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - integer jx - real(krealfp) xmin,xmax,xinc,x,t -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xmin=180.0_krealfp - xmax=330.0_krealfp - xinc=(xmax-xmin)/(nxpvsl-1) -! c1xpvsl=1.-xmin/xinc - c2xpvsl=1./xinc - c1xpvsl=1.-xmin*c2xpvsl - do jx=1,nxpvsl - x=xmin+(jx-1)*xinc - t=x - tbpvsl(jx)=fpvslx(t) - enddo -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end subroutine -!------------------------------------------------------------------------------- - elemental function fpvsl(t) -!$$$ Subprogram Documentation Block -! -! Subprogram: fpvsl Compute saturation vapor pressure over liquid -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute saturation vapor pressure from the temperature. -! A linear interpolation is done between values in a lookup table -! computed in gpvsl. See documentation for fpvslx for details. -! Input values outside table range are reset to table extrema. -! The interpolation accuracy is almost 6 decimal places. -! On the Cray, fpvsl is about 4 times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell expand table -! 1999-03-01 Iredell f90 module -! -! Usage: pvsl=fpvsl(t) -! -! Input argument list: -! t Real(krealfp) temperature in Kelvin -! -! Output argument list: -! fpvsl Real(krealfp) saturation vapor pressure in Pascals -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) fpvsl - real(krealfp),intent(in):: t - integer jx - real(krealfp) xj -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xpvsl+c2xpvsl*t,1._krealfp),real(nxpvsl,krealfp)) - jx=min(xj,nxpvsl-1._krealfp) - fpvsl=tbpvsl(jx)+(xj-jx)*(tbpvsl(jx+1)-tbpvsl(jx)) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function fpvslq(t) -!$$$ Subprogram Documentation Block -! -! Subprogram: fpvslq Compute saturation vapor pressure over liquid -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute saturation vapor pressure from the temperature. -! A quadratic interpolation is done between values in a lookup table -! computed in gpvsl. See documentation for fpvslx for details. -! Input values outside table range are reset to table extrema. -! The interpolation accuracy is almost 9 decimal places. -! On the Cray, fpvslq is about 3 times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell quadratic interpolation -! 1999-03-01 Iredell f90 module -! -! Usage: pvsl=fpvslq(t) -! -! Input argument list: -! t Real(krealfp) temperature in Kelvin -! -! Output argument list: -! fpvslq Real(krealfp) saturation vapor pressure in Pascals -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) fpvslq - real(krealfp),intent(in):: t - integer jx - real(krealfp) xj,dxj,fj1,fj2,fj3 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xpvsl+c2xpvsl*t,1._krealfp),real(nxpvsl,krealfp)) - jx=min(max(nint(xj),2),nxpvsl-1) - dxj=xj-jx - fj1=tbpvsl(jx-1) - fj2=tbpvsl(jx) - fj3=tbpvsl(jx+1) - fpvslq=(((fj3+fj1)/2-fj2)*dxj+(fj3-fj1)/2)*dxj+fj2 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function fpvslx(t) -!$$$ Subprogram Documentation Block -! -! Subprogram: fpvslx Compute saturation vapor pressure over liquid -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Exactly compute saturation vapor pressure from temperature. -! The water model assumes a perfect gas, constant specific heats -! for gas and liquid, and neglects the volume of the liquid. -! The model does account for the variation of the latent heat -! of condensation with temperature. The ice option is not included. -! The Clausius-Clapeyron equation is integrated from the triple point -! to get the formula -! pvsl=con_psat*(tr**xa)*exp(xb*(1.-tr)) -! where tr is ttp/t and other values are physical constants. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell exact computation -! 1999-03-01 Iredell f90 module -! -! Usage: pvsl=fpvslx(t) -! -! Input argument list: -! t Real(krealfp) temperature in Kelvin -! -! Output argument list: -! fpvslx Real(krealfp) saturation vapor pressure in Pascals -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) fpvslx - real(krealfp),intent(in):: t - real(krealfp),parameter:: dldt=con_cvap-con_cliq - real(krealfp),parameter:: heat=con_hvap - real(krealfp),parameter:: xpona=-dldt/con_rv - real(krealfp),parameter:: xponb=-dldt/con_rv+heat/(con_rv*con_ttp) - real(krealfp) tr -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tr=con_ttp/t - fpvslx=con_psat*(tr**xpona)*exp(xponb*(1.-tr)) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - subroutine gpvsi -!$$$ Subprogram Documentation Block -! -! Subprogram: gpvsi Compute saturation vapor pressure table over ice -! Author: N Phillips W/NMC2X2 Date: 30 dec 82 -! -! Abstract: Computes saturation vapor pressure table as a function of -! temperature for the table lookup function fpvsi. -! Exact saturation vapor pressures are calculated in subprogram fpvsix. -! The current implementation computes a table with a length -! of 7501 for temperatures ranging from 180. to 330. Kelvin. -! -! Program History Log: -! 91-05-07 Iredell -! 94-12-30 Iredell expand table -! 1999-03-01 Iredell f90 module -! 2001-02-26 Iredell ice phase -! -! Usage: call gpvsi -! -! Subprograms called: -! (fpvsix) inlinable function to compute saturation vapor pressure -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - integer jx - real(krealfp) xmin,xmax,xinc,x,t -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xmin=180.0_krealfp - xmax=330.0_krealfp - xinc=(xmax-xmin)/(nxpvsi-1) -! c1xpvsi=1.-xmin/xinc - c2xpvsi=1./xinc - c1xpvsi=1.-xmin*c2xpvsi - do jx=1,nxpvsi - x=xmin+(jx-1)*xinc - t=x - tbpvsi(jx)=fpvsix(t) - enddo -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end subroutine -!------------------------------------------------------------------------------- - elemental function fpvsi(t) -!$$$ Subprogram Documentation Block -! -! Subprogram: fpvsi Compute saturation vapor pressure over ice -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute saturation vapor pressure from the temperature. -! A linear interpolation is done between values in a lookup table -! computed in gpvsi. See documentation for fpvsix for details. -! Input values outside table range are reset to table extrema. -! The interpolation accuracy is almost 6 decimal places. -! On the Cray, fpvsi is about 4 times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell expand table -! 1999-03-01 Iredell f90 module -! 2001-02-26 Iredell ice phase -! -! Usage: pvsi=fpvsi(t) -! -! Input argument list: -! t Real(krealfp) temperature in Kelvin -! -! Output argument list: -! fpvsi Real(krealfp) saturation vapor pressure in Pascals -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) fpvsi - real(krealfp),intent(in):: t - integer jx - real(krealfp) xj -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xpvsi+c2xpvsi*t,1._krealfp),real(nxpvsi,krealfp)) - jx=min(xj,nxpvsi-1._krealfp) - fpvsi=tbpvsi(jx)+(xj-jx)*(tbpvsi(jx+1)-tbpvsi(jx)) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function fpvsiq(t) -!$$$ Subprogram Documentation Block -! -! Subprogram: fpvsiq Compute saturation vapor pressure over ice -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute saturation vapor pressure from the temperature. -! A quadratic interpolation is done between values in a lookup table -! computed in gpvsi. See documentation for fpvsix for details. -! Input values outside table range are reset to table extrema. -! The interpolation accuracy is almost 9 decimal places. -! On the Cray, fpvsiq is about 3 times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell quadratic interpolation -! 1999-03-01 Iredell f90 module -! 2001-02-26 Iredell ice phase -! -! Usage: pvsi=fpvsiq(t) -! -! Input argument list: -! t Real(krealfp) temperature in Kelvin -! -! Output argument list: -! fpvsiq Real(krealfp) saturation vapor pressure in Pascals -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) fpvsiq - real(krealfp),intent(in):: t - integer jx - real(krealfp) xj,dxj,fj1,fj2,fj3 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xpvsi+c2xpvsi*t,1._krealfp),real(nxpvsi,krealfp)) - jx=min(max(nint(xj),2),nxpvsi-1) - dxj=xj-jx - fj1=tbpvsi(jx-1) - fj2=tbpvsi(jx) - fj3=tbpvsi(jx+1) - fpvsiq=(((fj3+fj1)/2-fj2)*dxj+(fj3-fj1)/2)*dxj+fj2 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function fpvsix(t) -!$$$ Subprogram Documentation Block -! -! Subprogram: fpvsix Compute saturation vapor pressure over ice -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Exactly compute saturation vapor pressure from temperature. -! The water model assumes a perfect gas, constant specific heats -! for gas and ice, and neglects the volume of the ice. -! The model does account for the variation of the latent heat -! of condensation with temperature. The liquid option is not included. -! The Clausius-Clapeyron equation is integrated from the triple point -! to get the formula -! pvsi=con_psat*(tr**xa)*exp(xb*(1.-tr)) -! where tr is ttp/t and other values are physical constants. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell exact computation -! 1999-03-01 Iredell f90 module -! 2001-02-26 Iredell ice phase -! -! Usage: pvsi=fpvsix(t) -! -! Input argument list: -! t Real(krealfp) temperature in Kelvin -! -! Output argument list: -! fpvsix Real(krealfp) saturation vapor pressure in Pascals -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) fpvsix - real(krealfp),intent(in):: t - real(krealfp),parameter:: dldt=con_cvap-con_csol - real(krealfp),parameter:: heat=con_hvap+con_hfus - real(krealfp),parameter:: xpona=-dldt/con_rv - real(krealfp),parameter:: xponb=-dldt/con_rv+heat/(con_rv*con_ttp) - real(krealfp) tr -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tr=con_ttp/t - fpvsix=con_psat*(tr**xpona)*exp(xponb*(1.-tr)) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - subroutine gpvs -!$$$ Subprogram Documentation Block -! -! Subprogram: gpvs Compute saturation vapor pressure table -! Author: N Phillips W/NMC2X2 Date: 30 dec 82 -! -! Abstract: Computes saturation vapor pressure table as a function of -! temperature for the table lookup function fpvs. -! Exact saturation vapor pressures are calculated in subprogram fpvsx. -! The current implementation computes a table with a length -! of 7501 for temperatures ranging from 180. to 330. Kelvin. -! -! Program History Log: -! 91-05-07 Iredell -! 94-12-30 Iredell expand table -! 1999-03-01 Iredell f90 module -! 2001-02-26 Iredell ice phase -! -! Usage: call gpvs -! -! Subprograms called: -! (fpvsx) inlinable function to compute saturation vapor pressure -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - integer jx - real(krealfp) xmin,xmax,xinc,x,t -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xmin=180.0_krealfp - xmax=330.0_krealfp - xinc=(xmax-xmin)/(nxpvs-1) -! c1xpvs=1.-xmin/xinc - c2xpvs=1./xinc - c1xpvs=1.-xmin*c2xpvs - do jx=1,nxpvs - x=xmin+(jx-1)*xinc - t=x - tbpvs(jx)=fpvsx(t) - enddo -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end subroutine -!------------------------------------------------------------------------------- - elemental function fpvs(t) -!$$$ Subprogram Documentation Block -! -! Subprogram: fpvs Compute saturation vapor pressure -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute saturation vapor pressure from the temperature. -! A linear interpolation is done between values in a lookup table -! computed in gpvs. See documentation for fpvsx for details. -! Input values outside table range are reset to table extrema. -! The interpolation accuracy is almost 6 decimal places. -! On the Cray, fpvs is about 4 times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell expand table -! 1999-03-01 Iredell f90 module -! 2001-02-26 Iredell ice phase -! -! Usage: pvs=fpvs(t) -! -! Input argument list: -! t Real(krealfp) temperature in Kelvin -! -! Output argument list: -! fpvs Real(krealfp) saturation vapor pressure in Pascals -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) fpvs - real(krealfp),intent(in):: t - integer jx - real(krealfp) xj -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xpvs+c2xpvs*t,1._krealfp),real(nxpvs,krealfp)) - jx=min(xj,nxpvs-1._krealfp) - fpvs=tbpvs(jx)+(xj-jx)*(tbpvs(jx+1)-tbpvs(jx)) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function fpvsq(t) -!$$$ Subprogram Documentation Block -! -! Subprogram: fpvsq Compute saturation vapor pressure -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute saturation vapor pressure from the temperature. -! A quadratic interpolation is done between values in a lookup table -! computed in gpvs. See documentation for fpvsx for details. -! Input values outside table range are reset to table extrema. -! The interpolation accuracy is almost 9 decimal places. -! On the Cray, fpvsq is about 3 times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell quadratic interpolation -! 1999-03-01 Iredell f90 module -! 2001-02-26 Iredell ice phase -! -! Usage: pvs=fpvsq(t) -! -! Input argument list: -! t Real(krealfp) temperature in Kelvin -! -! Output argument list: -! fpvsq Real(krealfp) saturation vapor pressure in Pascals -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) fpvsq - real(krealfp),intent(in):: t - integer jx - real(krealfp) xj,dxj,fj1,fj2,fj3 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xpvs+c2xpvs*t,1._krealfp),real(nxpvs,krealfp)) - jx=min(max(nint(xj),2),nxpvs-1) - dxj=xj-jx - fj1=tbpvs(jx-1) - fj2=tbpvs(jx) - fj3=tbpvs(jx+1) - fpvsq=(((fj3+fj1)/2-fj2)*dxj+(fj3-fj1)/2)*dxj+fj2 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function fpvsx(t) -!$$$ Subprogram Documentation Block -! -! Subprogram: fpvsx Compute saturation vapor pressure -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Exactly compute saturation vapor pressure from temperature. -! The saturation vapor pressure over either liquid and ice is computed -! over liquid for temperatures above the triple point, -! over ice for temperatures 20 degress below the triple point, -! and a linear combination of the two for temperatures in between. -! The water model assumes a perfect gas, constant specific heats -! for gas, liquid and ice, and neglects the volume of the condensate. -! The model does account for the variation of the latent heat -! of condensation and sublimation with temperature. -! The Clausius-Clapeyron equation is integrated from the triple point -! to get the formula -! pvsl=con_psat*(tr**xa)*exp(xb*(1.-tr)) -! where tr is ttp/t and other values are physical constants. -! The reference for this computation is Emanuel(1994), pages 116-117. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell exact computation -! 1999-03-01 Iredell f90 module -! 2001-02-26 Iredell ice phase -! -! Usage: pvs=fpvsx(t) -! -! Input argument list: -! t Real(krealfp) temperature in Kelvin -! -! Output argument list: -! fpvsx Real(krealfp) saturation vapor pressure in Pascals -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) fpvsx - real(krealfp),intent(in):: t - real(krealfp),parameter:: tliq=con_ttp - real(krealfp),parameter:: tice=con_ttp-20.0 - real(krealfp),parameter:: dldtl=con_cvap-con_cliq - real(krealfp),parameter:: heatl=con_hvap - real(krealfp),parameter:: xponal=-dldtl/con_rv - real(krealfp),parameter:: xponbl=-dldtl/con_rv+heatl/(con_rv*con_ttp) - real(krealfp),parameter:: dldti=con_cvap-con_csol - real(krealfp),parameter:: heati=con_hvap+con_hfus - real(krealfp),parameter:: xponai=-dldti/con_rv - real(krealfp),parameter:: xponbi=-dldti/con_rv+heati/(con_rv*con_ttp) - real(krealfp) tr,w,pvl,pvi -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tr=con_ttp/t - if(t.ge.tliq) then - fpvsx=con_psat*(tr**xponal)*exp(xponbl*(1.-tr)) - elseif(t.lt.tice) then - fpvsx=con_psat*(tr**xponai)*exp(xponbi*(1.-tr)) - else - w=(t-tice)/(tliq-tice) - pvl=con_psat*(tr**xponal)*exp(xponbl*(1.-tr)) - pvi=con_psat*(tr**xponai)*exp(xponbi*(1.-tr)) - fpvsx=w*pvl+(1.-w)*pvi - endif -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - subroutine gtdpl -!$$$ Subprogram Documentation Block -! -! Subprogram: gtdpl Compute dewpoint temperature over liquid table -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute dewpoint temperature table as a function of -! vapor pressure for inlinable function ftdpl. -! Exact dewpoint temperatures are calculated in subprogram ftdplxg. -! The current implementation computes a table with a length -! of 5001 for vapor pressures ranging from 1 to 10001 Pascals -! giving a dewpoint temperature range of 208 to 319 Kelvin. -! -! Program History Log: -! 91-05-07 Iredell -! 94-12-30 Iredell expand table -! 1999-03-01 Iredell f90 module -! -! Usage: call gtdpl -! -! Subprograms called: -! (ftdplxg) inlinable function to compute dewpoint temperature over liquid -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - integer jx - real(krealfp) xmin,xmax,xinc,t,x,pv -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xmin=1 - xmax=10001 - xinc=(xmax-xmin)/(nxtdpl-1) - c1xtdpl=1.-xmin/xinc - c2xtdpl=1./xinc - t=208.0 - do jx=1,nxtdpl - x=xmin+(jx-1)*xinc - pv=x - t=ftdplxg(t,pv) - tbtdpl(jx)=t - enddo -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end subroutine -!------------------------------------------------------------------------------- - elemental function ftdpl(pv) -!$$$ Subprogram Documentation Block -! -! Subprogram: ftdpl Compute dewpoint temperature over liquid -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute dewpoint temperature from vapor pressure. -! A linear interpolation is done between values in a lookup table -! computed in gtdpl. See documentation for ftdplxg for details. -! Input values outside table range are reset to table extrema. -! The interpolation accuracy is better than 0.0005 Kelvin -! for dewpoint temperatures greater than 250 Kelvin, -! but decreases to 0.02 Kelvin for a dewpoint around 230 Kelvin. -! On the Cray, ftdpl is about 75 times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell expand table -! 1999-03-01 Iredell f90 module -! -! Usage: tdpl=ftdpl(pv) -! -! Input argument list: -! pv Real(krealfp) vapor pressure in Pascals -! -! Output argument list: -! ftdpl Real(krealfp) dewpoint temperature in Kelvin -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) ftdpl - real(krealfp),intent(in):: pv - integer jx - real(krealfp) xj -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xtdpl+c2xtdpl*pv,1._krealfp),real(nxtdpl,krealfp)) - jx=min(xj,nxtdpl-1._krealfp) - ftdpl=tbtdpl(jx)+(xj-jx)*(tbtdpl(jx+1)-tbtdpl(jx)) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function ftdplq(pv) -!$$$ Subprogram Documentation Block -! -! Subprogram: ftdplq Compute dewpoint temperature over liquid -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute dewpoint temperature from vapor pressure. -! A quadratic interpolation is done between values in a lookup table -! computed in gtdpl. see documentation for ftdplxg for details. -! Input values outside table range are reset to table extrema. -! the interpolation accuracy is better than 0.00001 Kelvin -! for dewpoint temperatures greater than 250 Kelvin, -! but decreases to 0.002 Kelvin for a dewpoint around 230 Kelvin. -! On the Cray, ftdplq is about 60 times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell quadratic interpolation -! 1999-03-01 Iredell f90 module -! -! Usage: tdpl=ftdplq(pv) -! -! Input argument list: -! pv Real(krealfp) vapor pressure in Pascals -! -! Output argument list: -! ftdplq Real(krealfp) dewpoint temperature in Kelvin -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) ftdplq - real(krealfp),intent(in):: pv - integer jx - real(krealfp) xj,dxj,fj1,fj2,fj3 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xtdpl+c2xtdpl*pv,1._krealfp),real(nxtdpl,krealfp)) - jx=min(max(nint(xj),2),nxtdpl-1) - dxj=xj-jx - fj1=tbtdpl(jx-1) - fj2=tbtdpl(jx) - fj3=tbtdpl(jx+1) - ftdplq=(((fj3+fj1)/2-fj2)*dxj+(fj3-fj1)/2)*dxj+fj2 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function ftdplx(pv) -!$$$ Subprogram Documentation Block -! -! Subprogram: ftdplx Compute dewpoint temperature over liquid -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: exactly compute dewpoint temperature from vapor pressure. -! An approximate dewpoint temperature for function ftdplxg -! is obtained using ftdpl so gtdpl must be already called. -! See documentation for ftdplxg for details. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell exact computation -! 1999-03-01 Iredell f90 module -! -! Usage: tdpl=ftdplx(pv) -! -! Input argument list: -! pv Real(krealfp) vapor pressure in Pascals -! -! Output argument list: -! ftdplx Real(krealfp) dewpoint temperature in Kelvin -! -! Subprograms called: -! (ftdpl) inlinable function to compute dewpoint temperature over liquid -! (ftdplxg) inlinable function to compute dewpoint temperature over liquid -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) ftdplx - real(krealfp),intent(in):: pv - real(krealfp) tg -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tg=ftdpl(pv) - ftdplx=ftdplxg(tg,pv) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function ftdplxg(tg,pv) -!$$$ Subprogram Documentation Block -! -! Subprogram: ftdplxg Compute dewpoint temperature over liquid -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Exactly compute dewpoint temperature from vapor pressure. -! A guess dewpoint temperature must be provided. -! The water model assumes a perfect gas, constant specific heats -! for gas and liquid, and neglects the volume of the liquid. -! The model does account for the variation of the latent heat -! of condensation with temperature. The ice option is not included. -! The Clausius-Clapeyron equation is integrated from the triple point -! to get the formula -! pvs=con_psat*(tr**xa)*exp(xb*(1.-tr)) -! where tr is ttp/t and other values are physical constants. -! The formula is inverted by iterating Newtonian approximations -! for each pvs until t is found to within 1.e-6 Kelvin. -! This function can be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell exact computation -! 1999-03-01 Iredell f90 module -! -! Usage: tdpl=ftdplxg(tg,pv) -! -! Input argument list: -! tg Real(krealfp) guess dewpoint temperature in Kelvin -! pv Real(krealfp) vapor pressure in Pascals -! -! Output argument list: -! ftdplxg Real(krealfp) dewpoint temperature in Kelvin -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) ftdplxg - real(krealfp),intent(in):: tg,pv - real(krealfp),parameter:: terrm=1.e-6 - real(krealfp),parameter:: dldt=con_cvap-con_cliq - real(krealfp),parameter:: heat=con_hvap - real(krealfp),parameter:: xpona=-dldt/con_rv - real(krealfp),parameter:: xponb=-dldt/con_rv+heat/(con_rv*con_ttp) - real(krealfp) t,tr,pvt,el,dpvt,terr - integer i -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - t=tg - do i=1,100 - tr=con_ttp/t - pvt=con_psat*(tr**xpona)*exp(xponb*(1.-tr)) - el=heat+dldt*(t-con_ttp) - dpvt=el*pvt/(con_rv*t**2) - terr=(pvt-pv)/dpvt - t=t-terr - if(abs(terr).le.terrm) exit - enddo - ftdplxg=t -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - subroutine gtdpi -!$$$ Subprogram Documentation Block -! -! Subprogram: gtdpi Compute dewpoint temperature over ice table -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute dewpoint temperature table as a function of -! vapor pressure for inlinable function ftdpi. -! Exact dewpoint temperatures are calculated in subprogram ftdpixg. -! The current implementation computes a table with a length -! of 5001 for vapor pressures ranging from 0.1 to 1000.1 Pascals -! giving a dewpoint temperature range of 197 to 279 Kelvin. -! -! Program History Log: -! 91-05-07 Iredell -! 94-12-30 Iredell expand table -! 1999-03-01 Iredell f90 module -! 2001-02-26 Iredell ice phase -! -! Usage: call gtdpi -! -! Subprograms called: -! (ftdpixg) inlinable function to compute dewpoint temperature over ice -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - integer jx - real(krealfp) xmin,xmax,xinc,t,x,pv -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xmin=0.1 - xmax=1000.1 - xinc=(xmax-xmin)/(nxtdpi-1) - c1xtdpi=1.-xmin/xinc - c2xtdpi=1./xinc - t=197.0 - do jx=1,nxtdpi - x=xmin+(jx-1)*xinc - pv=x - t=ftdpixg(t,pv) - tbtdpi(jx)=t - enddo -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end subroutine -!------------------------------------------------------------------------------- - elemental function ftdpi(pv) -!$$$ Subprogram Documentation Block -! -! Subprogram: ftdpi Compute dewpoint temperature over ice -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute dewpoint temperature from vapor pressure. -! A linear interpolation is done between values in a lookup table -! computed in gtdpi. See documentation for ftdpixg for details. -! Input values outside table range are reset to table extrema. -! The interpolation accuracy is better than 0.0005 Kelvin -! for dewpoint temperatures greater than 250 Kelvin, -! but decreases to 0.02 Kelvin for a dewpoint around 230 Kelvin. -! On the Cray, ftdpi is about 75 times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell expand table -! 1999-03-01 Iredell f90 module -! 2001-02-26 Iredell ice phase -! -! Usage: tdpi=ftdpi(pv) -! -! Input argument list: -! pv Real(krealfp) vapor pressure in Pascals -! -! Output argument list: -! ftdpi Real(krealfp) dewpoint temperature in Kelvin -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) ftdpi - real(krealfp),intent(in):: pv - integer jx - real(krealfp) xj -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xtdpi+c2xtdpi*pv,1._krealfp),real(nxtdpi,krealfp)) - jx=min(xj,nxtdpi-1._krealfp) - ftdpi=tbtdpi(jx)+(xj-jx)*(tbtdpi(jx+1)-tbtdpi(jx)) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function ftdpiq(pv) -!$$$ Subprogram Documentation Block -! -! Subprogram: ftdpiq Compute dewpoint temperature over ice -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute dewpoint temperature from vapor pressure. -! A quadratic interpolation is done between values in a lookup table -! computed in gtdpi. see documentation for ftdpixg for details. -! Input values outside table range are reset to table extrema. -! the interpolation accuracy is better than 0.00001 Kelvin -! for dewpoint temperatures greater than 250 Kelvin, -! but decreases to 0.002 Kelvin for a dewpoint around 230 Kelvin. -! On the Cray, ftdpiq is about 60 times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell quadratic interpolation -! 1999-03-01 Iredell f90 module -! 2001-02-26 Iredell ice phase -! -! Usage: tdpi=ftdpiq(pv) -! -! Input argument list: -! pv Real(krealfp) vapor pressure in Pascals -! -! Output argument list: -! ftdpiq Real(krealfp) dewpoint temperature in Kelvin -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) ftdpiq - real(krealfp),intent(in):: pv - integer jx - real(krealfp) xj,dxj,fj1,fj2,fj3 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xtdpi+c2xtdpi*pv,1._krealfp),real(nxtdpi,krealfp)) - jx=min(max(nint(xj),2),nxtdpi-1) - dxj=xj-jx - fj1=tbtdpi(jx-1) - fj2=tbtdpi(jx) - fj3=tbtdpi(jx+1) - ftdpiq=(((fj3+fj1)/2-fj2)*dxj+(fj3-fj1)/2)*dxj+fj2 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function ftdpix(pv) -!$$$ Subprogram Documentation Block -! -! Subprogram: ftdpix Compute dewpoint temperature over ice -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: exactly compute dewpoint temperature from vapor pressure. -! An approximate dewpoint temperature for function ftdpixg -! is obtained using ftdpi so gtdpi must be already called. -! See documentation for ftdpixg for details. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell exact computation -! 1999-03-01 Iredell f90 module -! 2001-02-26 Iredell ice phase -! -! Usage: tdpi=ftdpix(pv) -! -! Input argument list: -! pv Real(krealfp) vapor pressure in Pascals -! -! Output argument list: -! ftdpix Real(krealfp) dewpoint temperature in Kelvin -! -! Subprograms called: -! (ftdpi) inlinable function to compute dewpoint temperature over ice -! (ftdpixg) inlinable function to compute dewpoint temperature over ice -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) ftdpix - real(krealfp),intent(in):: pv - real(krealfp) tg -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tg=ftdpi(pv) - ftdpix=ftdpixg(tg,pv) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function ftdpixg(tg,pv) -!$$$ Subprogram Documentation Block -! -! Subprogram: ftdpixg Compute dewpoint temperature over ice -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Exactly compute dewpoint temperature from vapor pressure. -! A guess dewpoint temperature must be provided. -! The water model assumes a perfect gas, constant specific heats -! for gas and ice, and neglects the volume of the ice. -! The model does account for the variation of the latent heat -! of sublimation with temperature. The liquid option is not included. -! The Clausius-Clapeyron equation is integrated from the triple point -! to get the formula -! pvs=con_psat*(tr**xa)*exp(xb*(1.-tr)) -! where tr is ttp/t and other values are physical constants. -! The formula is inverted by iterating Newtonian approximations -! for each pvs until t is found to within 1.e-6 Kelvin. -! This function can be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell exact computation -! 1999-03-01 Iredell f90 module -! 2001-02-26 Iredell ice phase -! -! Usage: tdpi=ftdpixg(tg,pv) -! -! Input argument list: -! tg Real(krealfp) guess dewpoint temperature in Kelvin -! pv Real(krealfp) vapor pressure in Pascals -! -! Output argument list: -! ftdpixg Real(krealfp) dewpoint temperature in Kelvin -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) ftdpixg - real(krealfp),intent(in):: tg,pv - real(krealfp),parameter:: terrm=1.e-6 - real(krealfp),parameter:: dldt=con_cvap-con_csol - real(krealfp),parameter:: heat=con_hvap+con_hfus - real(krealfp),parameter:: xpona=-dldt/con_rv - real(krealfp),parameter:: xponb=-dldt/con_rv+heat/(con_rv*con_ttp) - real(krealfp) t,tr,pvt,el,dpvt,terr - integer i -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - t=tg - do i=1,100 - tr=con_ttp/t - pvt=con_psat*(tr**xpona)*exp(xponb*(1.-tr)) - el=heat+dldt*(t-con_ttp) - dpvt=el*pvt/(con_rv*t**2) - terr=(pvt-pv)/dpvt - t=t-terr - if(abs(terr).le.terrm) exit - enddo - ftdpixg=t -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - subroutine gtdp -!$$$ Subprogram Documentation Block -! -! Subprogram: gtdp Compute dewpoint temperature table -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute dewpoint temperature table as a function of -! vapor pressure for inlinable function ftdp. -! Exact dewpoint temperatures are calculated in subprogram ftdpxg. -! The current implementation computes a table with a length -! of 5001 for vapor pressures ranging from 0.5 to 1000.5 Pascals -! giving a dewpoint temperature range of 208 to 319 Kelvin. -! -! Program History Log: -! 91-05-07 Iredell -! 94-12-30 Iredell expand table -! 1999-03-01 Iredell f90 module -! 2001-02-26 Iredell ice phase -! -! Usage: call gtdp -! -! Subprograms called: -! (ftdpxg) inlinable function to compute dewpoint temperature -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - integer jx - real(krealfp) xmin,xmax,xinc,t,x,pv -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xmin=0.5 - xmax=10000.5 - xinc=(xmax-xmin)/(nxtdp-1) - c1xtdp=1.-xmin/xinc - c2xtdp=1./xinc - t=208.0 - do jx=1,nxtdp - x=xmin+(jx-1)*xinc - pv=x - t=ftdpxg(t,pv) - tbtdp(jx)=t - enddo -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end subroutine -!------------------------------------------------------------------------------- - elemental function ftdp(pv) -!$$$ Subprogram Documentation Block -! -! Subprogram: ftdp Compute dewpoint temperature -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute dewpoint temperature from vapor pressure. -! A linear interpolation is done between values in a lookup table -! computed in gtdp. See documentation for ftdpxg for details. -! Input values outside table range are reset to table extrema. -! The interpolation accuracy is better than 0.0005 Kelvin -! for dewpoint temperatures greater than 250 Kelvin, -! but decreases to 0.02 Kelvin for a dewpoint around 230 Kelvin. -! On the Cray, ftdp is about 75 times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell expand table -! 1999-03-01 Iredell f90 module -! 2001-02-26 Iredell ice phase -! -! Usage: tdp=ftdp(pv) -! -! Input argument list: -! pv Real(krealfp) vapor pressure in Pascals -! -! Output argument list: -! ftdp Real(krealfp) dewpoint temperature in Kelvin -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) ftdp - real(krealfp),intent(in):: pv - integer jx - real(krealfp) xj -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xtdp+c2xtdp*pv,1._krealfp),real(nxtdp,krealfp)) - jx=min(xj,nxtdp-1._krealfp) - ftdp=tbtdp(jx)+(xj-jx)*(tbtdp(jx+1)-tbtdp(jx)) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function ftdpq(pv) -!$$$ Subprogram Documentation Block -! -! Subprogram: ftdpq Compute dewpoint temperature -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute dewpoint temperature from vapor pressure. -! A quadratic interpolation is done between values in a lookup table -! computed in gtdp. see documentation for ftdpxg for details. -! Input values outside table range are reset to table extrema. -! the interpolation accuracy is better than 0.00001 Kelvin -! for dewpoint temperatures greater than 250 Kelvin, -! but decreases to 0.002 Kelvin for a dewpoint around 230 Kelvin. -! On the Cray, ftdpq is about 60 times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell quadratic interpolation -! 1999-03-01 Iredell f90 module -! 2001-02-26 Iredell ice phase -! -! Usage: tdp=ftdpq(pv) -! -! Input argument list: -! pv Real(krealfp) vapor pressure in Pascals -! -! Output argument list: -! ftdpq Real(krealfp) dewpoint temperature in Kelvin -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) ftdpq - real(krealfp),intent(in):: pv - integer jx - real(krealfp) xj,dxj,fj1,fj2,fj3 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xtdp+c2xtdp*pv,1._krealfp),real(nxtdp,krealfp)) - jx=min(max(nint(xj),2),nxtdp-1) - dxj=xj-jx - fj1=tbtdp(jx-1) - fj2=tbtdp(jx) - fj3=tbtdp(jx+1) - ftdpq=(((fj3+fj1)/2-fj2)*dxj+(fj3-fj1)/2)*dxj+fj2 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function ftdpx(pv) -!$$$ Subprogram Documentation Block -! -! Subprogram: ftdpx Compute dewpoint temperature -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: exactly compute dewpoint temperature from vapor pressure. -! An approximate dewpoint temperature for function ftdpxg -! is obtained using ftdp so gtdp must be already called. -! See documentation for ftdpxg for details. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell exact computation -! 1999-03-01 Iredell f90 module -! 2001-02-26 Iredell ice phase -! -! Usage: tdp=ftdpx(pv) -! -! Input argument list: -! pv Real(krealfp) vapor pressure in Pascals -! -! Output argument list: -! ftdpx Real(krealfp) dewpoint temperature in Kelvin -! -! Subprograms called: -! (ftdp) inlinable function to compute dewpoint temperature -! (ftdpxg) inlinable function to compute dewpoint temperature -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) ftdpx - real(krealfp),intent(in):: pv - real(krealfp) tg -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tg=ftdp(pv) - ftdpx=ftdpxg(tg,pv) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function ftdpxg(tg,pv) -!$$$ Subprogram Documentation Block -! -! Subprogram: ftdpxg Compute dewpoint temperature -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Exactly compute dewpoint temperature from vapor pressure. -! A guess dewpoint temperature must be provided. -! The saturation vapor pressure over either liquid and ice is computed -! over liquid for temperatures above the triple point, -! over ice for temperatures 20 degress below the triple point, -! and a linear combination of the two for temperatures in between. -! The water model assumes a perfect gas, constant specific heats -! for gas, liquid and ice, and neglects the volume of the condensate. -! The model does account for the variation of the latent heat -! of condensation and sublimation with temperature. -! The Clausius-Clapeyron equation is integrated from the triple point -! to get the formula -! pvsl=con_psat*(tr**xa)*exp(xb*(1.-tr)) -! where tr is ttp/t and other values are physical constants. -! The reference for this decision is Emanuel(1994), pages 116-117. -! The formula is inverted by iterating Newtonian approximations -! for each pvs until t is found to within 1.e-6 Kelvin. -! This function can be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell exact computation -! 1999-03-01 Iredell f90 module -! 2001-02-26 Iredell ice phase -! -! Usage: tdp=ftdpxg(tg,pv) -! -! Input argument list: -! tg Real(krealfp) guess dewpoint temperature in Kelvin -! pv Real(krealfp) vapor pressure in Pascals -! -! Output argument list: -! ftdpxg Real(krealfp) dewpoint temperature in Kelvin -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) ftdpxg - real(krealfp),intent(in):: tg,pv - real(krealfp),parameter:: terrm=1.e-6 - real(krealfp),parameter:: tliq=con_ttp - real(krealfp),parameter:: tice=con_ttp-20.0 - real(krealfp),parameter:: dldtl=con_cvap-con_cliq - real(krealfp),parameter:: heatl=con_hvap - real(krealfp),parameter:: xponal=-dldtl/con_rv - real(krealfp),parameter:: xponbl=-dldtl/con_rv+heatl/(con_rv*con_ttp) - real(krealfp),parameter:: dldti=con_cvap-con_csol - real(krealfp),parameter:: heati=con_hvap+con_hfus - real(krealfp),parameter:: xponai=-dldti/con_rv - real(krealfp),parameter:: xponbi=-dldti/con_rv+heati/(con_rv*con_ttp) - real(krealfp) t,tr,w,pvtl,pvti,pvt,ell,eli,el,dpvt,terr - integer i -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - t=tg - do i=1,100 - tr=con_ttp/t - if(t.ge.tliq) then - pvt=con_psat*(tr**xponal)*exp(xponbl*(1.-tr)) - el=heatl+dldtl*(t-con_ttp) - dpvt=el*pvt/(con_rv*t**2) - elseif(t.lt.tice) then - pvt=con_psat*(tr**xponai)*exp(xponbi*(1.-tr)) - el=heati+dldti*(t-con_ttp) - dpvt=el*pvt/(con_rv*t**2) - else - w=(t-tice)/(tliq-tice) - pvtl=con_psat*(tr**xponal)*exp(xponbl*(1.-tr)) - pvti=con_psat*(tr**xponai)*exp(xponbi*(1.-tr)) - pvt=w*pvtl+(1.-w)*pvti - ell=heatl+dldtl*(t-con_ttp) - eli=heati+dldti*(t-con_ttp) - dpvt=(w*ell*pvtl+(1.-w)*eli*pvti)/(con_rv*t**2) - endif - terr=(pvt-pv)/dpvt - t=t-terr - if(abs(terr).le.terrm) exit - enddo - ftdpxg=t -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - subroutine gthe -!$$$ Subprogram Documentation Block -! -! Subprogram: gthe Compute equivalent potential temperature table -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute equivalent potential temperature table -! as a function of LCL temperature and pressure over 1e5 Pa -! to the kappa power for function fthe. -! Equivalent potential temperatures are calculated in subprogram fthex -! the current implementation computes a table with a first dimension -! of 241 for temperatures ranging from 183.16 to 303.16 Kelvin -! and a second dimension of 151 for pressure over 1e5 Pa -! to the kappa power ranging from 0.04**rocp to 1.10**rocp. -! -! Program History Log: -! 91-05-07 Iredell -! 94-12-30 Iredell expand table -! 1999-03-01 Iredell f90 module -! -! Usage: call gthe -! -! Subprograms called: -! (fthex) inlinable function to compute equiv. pot. temperature -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - integer jx,jy - real(krealfp) xmin,xmax,ymin,ymax,xinc,yinc,x,y,pk,t -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xmin=con_ttp-90._krealfp - xmax=con_ttp+30._krealfp - ymin=0.04_krealfp**con_rocp - ymax=1.10_krealfp**con_rocp - xinc=(xmax-xmin)/(nxthe-1) - c1xthe=1.-xmin/xinc - c2xthe=1./xinc - yinc=(ymax-ymin)/(nythe-1) - c1ythe=1.-ymin/yinc - c2ythe=1./yinc - do jy=1,nythe - y=ymin+(jy-1)*yinc - pk=y - do jx=1,nxthe - x=xmin+(jx-1)*xinc - t=x - tbthe(jx,jy)=fthex(t,pk) - enddo - enddo -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end subroutine -!------------------------------------------------------------------------------- - elemental function fthe(t,pk) -!$$$ Subprogram Documentation Block -! -! Subprogram: fthe Compute equivalent potential temperature -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute equivalent potential temperature at the LCL -! from temperature and pressure over 1e5 Pa to the kappa power. -! A bilinear interpolation is done between values in a lookup table -! computed in gthe. see documentation for fthex for details. -! Input values outside table range are reset to table extrema, -! except zero is returned for too cold or high LCLs. -! The interpolation accuracy is better than 0.01 Kelvin. -! On the Cray, fthe is almost 6 times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell expand table -! 1999-03-01 Iredell f90 module -! -! Usage: the=fthe(t,pk) -! -! Input argument list: -! t Real(krealfp) LCL temperature in Kelvin -! pk Real(krealfp) LCL pressure over 1e5 Pa to the kappa power -! -! Output argument list: -! fthe Real(krealfp) equivalent potential temperature in Kelvin -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) fthe - real(krealfp),intent(in):: t,pk - integer jx,jy - real(krealfp) xj,yj,ftx1,ftx2 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(c1xthe+c2xthe*t,real(nxthe,krealfp)) - yj=min(c1ythe+c2ythe*pk,real(nythe,krealfp)) - if(xj.ge.1..and.yj.ge.1.) then - jx=min(xj,nxthe-1._krealfp) - jy=min(yj,nythe-1._krealfp) - ftx1=tbthe(jx,jy)+(xj-jx)*(tbthe(jx+1,jy)-tbthe(jx,jy)) - ftx2=tbthe(jx,jy+1)+(xj-jx)*(tbthe(jx+1,jy+1)-tbthe(jx,jy+1)) - fthe=ftx1+(yj-jy)*(ftx2-ftx1) - else - fthe=0. - endif -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function ftheq(t,pk) -!$$$ Subprogram Documentation Block -! -! Subprogram: ftheq Compute equivalent potential temperature -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute equivalent potential temperature at the LCL -! from temperature and pressure over 1e5 Pa to the kappa power. -! A biquadratic interpolation is done between values in a lookup table -! computed in gthe. see documentation for fthex for details. -! Input values outside table range are reset to table extrema, -! except zero is returned for too cold or high LCLs. -! The interpolation accuracy is better than 0.0002 Kelvin. -! On the Cray, ftheq is almost 3 times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell quadratic interpolation -! 1999-03-01 Iredell f90 module -! -! Usage: the=ftheq(t,pk) -! -! Input argument list: -! t Real(krealfp) LCL temperature in Kelvin -! pk Real(krealfp) LCL pressure over 1e5 Pa to the kappa power -! -! Output argument list: -! ftheq Real(krealfp) equivalent potential temperature in Kelvin -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) ftheq - real(krealfp),intent(in):: t,pk - integer jx,jy - real(krealfp) xj,yj,dxj,dyj - real(krealfp) ft11,ft12,ft13,ft21,ft22,ft23,ft31,ft32,ft33 - real(krealfp) ftx1,ftx2,ftx3 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(c1xthe+c2xthe*t,real(nxthe,krealfp)) - yj=min(c1ythe+c2ythe*pk,real(nythe,krealfp)) - if(xj.ge.1..and.yj.ge.1.) then - jx=min(max(nint(xj),2),nxthe-1) - jy=min(max(nint(yj),2),nythe-1) - dxj=xj-jx - dyj=yj-jy - ft11=tbthe(jx-1,jy-1) - ft12=tbthe(jx-1,jy) - ft13=tbthe(jx-1,jy+1) - ft21=tbthe(jx,jy-1) - ft22=tbthe(jx,jy) - ft23=tbthe(jx,jy+1) - ft31=tbthe(jx+1,jy-1) - ft32=tbthe(jx+1,jy) - ft33=tbthe(jx+1,jy+1) - ftx1=(((ft31+ft11)/2-ft21)*dxj+(ft31-ft11)/2)*dxj+ft21 - ftx2=(((ft32+ft12)/2-ft22)*dxj+(ft32-ft12)/2)*dxj+ft22 - ftx3=(((ft33+ft13)/2-ft23)*dxj+(ft33-ft13)/2)*dxj+ft23 - ftheq=(((ftx3+ftx1)/2-ftx2)*dyj+(ftx3-ftx1)/2)*dyj+ftx2 - else - ftheq=0. - endif -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- -! elemental function fthex(t,pk) - function fthex(t,pk) -!$$$ Subprogram Documentation Block -! -! Subprogram: fthex Compute equivalent potential temperature -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Exactly compute equivalent potential temperature at the LCL -! from temperature and pressure over 1e5 Pa to the kappa power. -! Equivalent potential temperature is constant for a saturated parcel -! rising adiabatically up a moist adiabat when the heat and mass -! of the condensed water are neglected. Ice is also neglected. -! The formula for equivalent potential temperature (Holton) is -! the=t*(pd**(-rocp))*exp(el*eps*pv/(cp*t*pd)) -! where t is the temperature, pv is the saturated vapor pressure, -! pd is the dry pressure p-pv, el is the temperature dependent -! latent heat of condensation hvap+dldt*(t-ttp), and other values -! are physical constants defined in parameter statements in the code. -! Zero is returned if the input values make saturation impossible. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell exact computation -! 1999-03-01 Iredell f90 module -! -! Usage: the=fthex(t,pk) -! -! Input argument list: -! t Real(krealfp) LCL temperature in Kelvin -! pk Real(krealfp) LCL pressure over 1e5 Pa to the kappa power -! -! Output argument list: -! fthex Real(krealfp) equivalent potential temperature in Kelvin -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) fthex - real(krealfp),intent(in):: t,pk - real(krealfp) p,tr,pv,pd,el,expo -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - p=pk**con_cpor - tr=con_ttp/t - pv=psatb*(tr**con_xpona)*exp(con_xponb*(1.-tr)) - pd=p-pv - if(pd.gt.pv) then - el=con_hvap+con_dldt*(t-con_ttp) - expo=el*con_eps*pv/(con_cp*t*pd) - fthex=t*pd**(-con_rocp)*exp(expo) - else - fthex=0. - endif -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - subroutine gtma -!$$$ Subprogram Documentation Block -! -! Subprogram: gtma Compute moist adiabat tables -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute temperature and specific humidity tables -! as a function of equivalent potential temperature and -! pressure over 1e5 Pa to the kappa power for subprogram stma. -! Exact parcel temperatures are calculated in subprogram stmaxg. -! The current implementation computes a table with a first dimension -! of 151 for equivalent potential temperatures ranging from 200 to 500 -! Kelvin and a second dimension of 121 for pressure over 1e5 Pa -! to the kappa power ranging from 0.01**rocp to 1.10**rocp. -! -! Program History Log: -! 91-05-07 Iredell -! 94-12-30 Iredell expand table -! 1999-03-01 Iredell f90 module -! -! Usage: call gtma -! -! Subprograms called: -! (stmaxg) inlinable subprogram to compute parcel temperature -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - integer jx,jy - real(krealfp) xmin,xmax,ymin,ymax,xinc,yinc,x,y,pk,the,t,q,tg -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xmin=200._krealfp - xmax=500._krealfp - ymin=0.01_krealfp**con_rocp - ymax=1.10_krealfp**con_rocp - xinc=(xmax-xmin)/(nxma-1) - c1xma=1.-xmin/xinc - c2xma=1./xinc - yinc=(ymax-ymin)/(nyma-1) - c1yma=1.-ymin/yinc - c2yma=1./yinc - do jy=1,nyma - y=ymin+(jy-1)*yinc - pk=y - tg=xmin*y - do jx=1,nxma - x=xmin+(jx-1)*xinc - the=x - call stmaxg(tg,the,pk,t,q) - tbtma(jx,jy)=t - tbqma(jx,jy)=q - tg=t - enddo - enddo -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end subroutine -!------------------------------------------------------------------------------- - elemental subroutine stma(the,pk,tma,qma) -!$$$ Subprogram Documentation Block -! -! Subprogram: stma Compute moist adiabat temperature -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute temperature and specific humidity of a parcel -! lifted up a moist adiabat from equivalent potential temperature -! at the LCL and pressure over 1e5 Pa to the kappa power. -! Bilinear interpolations are done between values in a lookup table -! computed in gtma. See documentation for stmaxg for details. -! Input values outside table range are reset to table extrema. -! The interpolation accuracy is better than 0.01 Kelvin -! and 5.e-6 kg/kg for temperature and humidity, respectively. -! On the Cray, stma is about 35 times faster than exact calculation. -! This subprogram should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell expand table -! 1999-03-01 Iredell f90 module -! -! Usage: call stma(the,pk,tma,qma) -! -! Input argument list: -! the Real(krealfp) equivalent potential temperature in Kelvin -! pk Real(krealfp) pressure over 1e5 Pa to the kappa power -! -! Output argument list: -! tma Real(krealfp) parcel temperature in Kelvin -! qma Real(krealfp) parcel specific humidity in kg/kg -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp),intent(in):: the,pk - real(krealfp),intent(out):: tma,qma - integer jx,jy - real(krealfp) xj,yj,ftx1,ftx2,qx1,qx2 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xma+c2xma*the,1._krealfp),real(nxma,krealfp)) - yj=min(max(c1yma+c2yma*pk,1._krealfp),real(nyma,krealfp)) - jx=min(xj,nxma-1._krealfp) - jy=min(yj,nyma-1._krealfp) - ftx1=tbtma(jx,jy)+(xj-jx)*(tbtma(jx+1,jy)-tbtma(jx,jy)) - ftx2=tbtma(jx,jy+1)+(xj-jx)*(tbtma(jx+1,jy+1)-tbtma(jx,jy+1)) - tma=ftx1+(yj-jy)*(ftx2-ftx1) - qx1=tbqma(jx,jy)+(xj-jx)*(tbqma(jx+1,jy)-tbqma(jx,jy)) - qx2=tbqma(jx,jy+1)+(xj-jx)*(tbqma(jx+1,jy+1)-tbqma(jx,jy+1)) - qma=qx1+(yj-jy)*(qx2-qx1) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end subroutine -!------------------------------------------------------------------------------- - elemental subroutine stmaq(the,pk,tma,qma) -!$$$ Subprogram Documentation Block -! -! Subprogram: stmaq Compute moist adiabat temperature -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute temperature and specific humidity of a parcel -! lifted up a moist adiabat from equivalent potential temperature -! at the LCL and pressure over 1e5 Pa to the kappa power. -! Biquadratic interpolations are done between values in a lookup table -! computed in gtma. See documentation for stmaxg for details. -! Input values outside table range are reset to table extrema. -! the interpolation accuracy is better than 0.0005 Kelvin -! and 1.e-7 kg/kg for temperature and humidity, respectively. -! On the Cray, stmaq is about 25 times faster than exact calculation. -! This subprogram should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell quadratic interpolation -! 1999-03-01 Iredell f90 module -! -! Usage: call stmaq(the,pk,tma,qma) -! -! Input argument list: -! the Real(krealfp) equivalent potential temperature in Kelvin -! pk Real(krealfp) pressure over 1e5 Pa to the kappa power -! -! Output argument list: -! tmaq Real(krealfp) parcel temperature in Kelvin -! qma Real(krealfp) parcel specific humidity in kg/kg -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp),intent(in):: the,pk - real(krealfp),intent(out):: tma,qma - integer jx,jy - real(krealfp) xj,yj,dxj,dyj - real(krealfp) ft11,ft12,ft13,ft21,ft22,ft23,ft31,ft32,ft33 - real(krealfp) ftx1,ftx2,ftx3 - real(krealfp) q11,q12,q13,q21,q22,q23,q31,q32,q33,qx1,qx2,qx3 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xma+c2xma*the,1._krealfp),real(nxma,krealfp)) - yj=min(max(c1yma+c2yma*pk,1._krealfp),real(nyma,krealfp)) - jx=min(max(nint(xj),2),nxma-1) - jy=min(max(nint(yj),2),nyma-1) - dxj=xj-jx - dyj=yj-jy - ft11=tbtma(jx-1,jy-1) - ft12=tbtma(jx-1,jy) - ft13=tbtma(jx-1,jy+1) - ft21=tbtma(jx,jy-1) - ft22=tbtma(jx,jy) - ft23=tbtma(jx,jy+1) - ft31=tbtma(jx+1,jy-1) - ft32=tbtma(jx+1,jy) - ft33=tbtma(jx+1,jy+1) - ftx1=(((ft31+ft11)/2-ft21)*dxj+(ft31-ft11)/2)*dxj+ft21 - ftx2=(((ft32+ft12)/2-ft22)*dxj+(ft32-ft12)/2)*dxj+ft22 - ftx3=(((ft33+ft13)/2-ft23)*dxj+(ft33-ft13)/2)*dxj+ft23 - tma=(((ftx3+ftx1)/2-ftx2)*dyj+(ftx3-ftx1)/2)*dyj+ftx2 - q11=tbqma(jx-1,jy-1) - q12=tbqma(jx-1,jy) - q13=tbqma(jx-1,jy+1) - q21=tbqma(jx,jy-1) - q22=tbqma(jx,jy) - q23=tbqma(jx,jy+1) - q31=tbqma(jx+1,jy-1) - q32=tbqma(jx+1,jy) - q33=tbqma(jx+1,jy+1) - qx1=(((q31+q11)/2-q21)*dxj+(q31-q11)/2)*dxj+q21 - qx2=(((q32+q12)/2-q22)*dxj+(q32-q12)/2)*dxj+q22 - qx3=(((q33+q13)/2-q23)*dxj+(q33-q13)/2)*dxj+q23 - qma=(((qx3+qx1)/2-qx2)*dyj+(qx3-qx1)/2)*dyj+qx2 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end subroutine -!------------------------------------------------------------------------------- - elemental subroutine stmax(the,pk,tma,qma) -!$$$ Subprogram Documentation Block -! -! Subprogram: stmax Compute moist adiabat temperature -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Exactly compute temperature and humidity of a parcel -! lifted up a moist adiabat from equivalent potential temperature -! at the LCL and pressure over 1e5 Pa to the kappa power. -! An approximate parcel temperature for subprogram stmaxg -! is obtained using stma so gtma must be already called. -! See documentation for stmaxg for details. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell exact computation -! 1999-03-01 Iredell f90 module -! -! Usage: call stmax(the,pk,tma,qma) -! -! Input argument list: -! the Real(krealfp) equivalent potential temperature in Kelvin -! pk Real(krealfp) pressure over 1e5 Pa to the kappa power -! -! Output argument list: -! tma Real(krealfp) parcel temperature in Kelvin -! qma Real(krealfp) parcel specific humidity in kg/kg -! -! Subprograms called: -! (stma) inlinable subprogram to compute parcel temperature -! (stmaxg) inlinable subprogram to compute parcel temperature -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp),intent(in):: the,pk - real(krealfp),intent(out):: tma,qma - real(krealfp) tg,qg -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - call stma(the,pk,tg,qg) - call stmaxg(tg,the,pk,tma,qma) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end subroutine -!------------------------------------------------------------------------------- - elemental subroutine stmaxg(tg,the,pk,tma,qma) -!$$$ Subprogram Documentation Block -! -! Subprogram: stmaxg Compute moist adiabat temperature -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: exactly compute temperature and humidity of a parcel -! lifted up a moist adiabat from equivalent potential temperature -! at the LCL and pressure over 1e5 Pa to the kappa power. -! A guess parcel temperature must be provided. -! Equivalent potential temperature is constant for a saturated parcel -! rising adiabatically up a moist adiabat when the heat and mass -! of the condensed water are neglected. Ice is also neglected. -! The formula for equivalent potential temperature (Holton) is -! the=t*(pd**(-rocp))*exp(el*eps*pv/(cp*t*pd)) -! where t is the temperature, pv is the saturated vapor pressure, -! pd is the dry pressure p-pv, el is the temperature dependent -! latent heat of condensation hvap+dldt*(t-ttp), and other values -! are physical constants defined in parameter statements in the code. -! The formula is inverted by iterating Newtonian approximations -! for each the and p until t is found to within 1.e-4 Kelvin. -! The specific humidity is then computed from pv and pd. -! This subprogram can be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell exact computation -! 1999-03-01 Iredell f90 module -! -! Usage: call stmaxg(tg,the,pk,tma,qma) -! -! Input argument list: -! tg Real(krealfp) guess parcel temperature in Kelvin -! the Real(krealfp) equivalent potential temperature in Kelvin -! pk Real(krealfp) pressure over 1e5 Pa to the kappa power -! -! Output argument list: -! tma Real(krealfp) parcel temperature in Kelvin -! qma Real(krealfp) parcel specific humidity in kg/kg -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp),intent(in):: tg,the,pk - real(krealfp),intent(out):: tma,qma - real(krealfp),parameter:: terrm=1.e-4 - real(krealfp) t,p,tr,pv,pd,el,expo,thet,dthet,terr - integer i -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - t=tg - p=pk**con_cpor - do i=1,100 - tr=con_ttp/t - pv=psatb*(tr**con_xpona)*exp(con_xponb*(1.-tr)) - pd=p-pv - el=con_hvap+con_dldt*(t-con_ttp) - expo=el*con_eps*pv/(con_cp*t*pd) - thet=t*pd**(-con_rocp)*exp(expo) - dthet=thet/t*(1.+expo*(con_dldt*t/el+el*p/(con_rv*t*pd))) - terr=(thet-the)/dthet - t=t-terr - if(abs(terr).le.terrm) exit - enddo - tma=t - tr=con_ttp/t - pv=psatb*(tr**con_xpona)*exp(con_xponb*(1.-tr)) - pd=p-pv - qma=con_eps*pv/(pd+con_eps*pv) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end subroutine -!------------------------------------------------------------------------------- - subroutine gpkap -!$$$ Subprogram documentation block -! -! Subprogram: gpkap Compute coefficients for p**kappa -! Author: Phillips org: w/NMC2X2 Date: 29 dec 82 -! -! Abstract: Computes pressure to the kappa table as a function of pressure -! for the table lookup function fpkap. -! Exact pressure to the kappa values are calculated in subprogram fpkapx. -! The current implementation computes a table with a length -! of 5501 for pressures ranging up to 110000 Pascals. -! -! Program History Log: -! 94-12-30 Iredell -! 1999-03-01 Iredell f90 module -! 1999-03-24 Iredell table lookup -! -! Usage: call gpkap -! -! Subprograms called: -! fpkapx function to compute exact pressure to the kappa -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - integer jx - real(krealfp) xmin,xmax,xinc,x,p -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xmin=0._krealfp - xmax=110000._krealfp - xinc=(xmax-xmin)/(nxpkap-1) - c1xpkap=1.-xmin/xinc - c2xpkap=1./xinc - do jx=1,nxpkap - x=xmin+(jx-1)*xinc - p=x - tbpkap(jx)=fpkapx(p) - enddo -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end subroutine -!------------------------------------------------------------------------------- - elemental function fpkap(p) -!$$$ Subprogram Documentation Block -! -! Subprogram: fpkap raise pressure to the kappa power. -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Raise pressure over 1e5 Pa to the kappa power. -! A linear interpolation is done between values in a lookup table -! computed in gpkap. See documentation for fpkapx for details. -! Input values outside table range are reset to table extrema. -! The interpolation accuracy ranges from 9 decimal places -! at 100000 Pascals to 5 decimal places at 1000 Pascals. -! On the Cray, fpkap is over 5 times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell standardized kappa, -! increased range and accuracy -! 1999-03-01 Iredell f90 module -! 1999-03-24 Iredell table lookup -! -! Usage: pkap=fpkap(p) -! -! Input argument list: -! p Real(krealfp) pressure in Pascals -! -! Output argument list: -! fpkap Real(krealfp) p over 1e5 Pa to the kappa power -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) fpkap - real(krealfp),intent(in):: p - integer jx - real(krealfp) xj -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xpkap+c2xpkap*p,1._krealfp),real(nxpkap,krealfp)) - jx=min(xj,nxpkap-1._krealfp) - fpkap=tbpkap(jx)+(xj-jx)*(tbpkap(jx+1)-tbpkap(jx)) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function fpkapq(p) -!$$$ Subprogram Documentation Block -! -! Subprogram: fpkapq raise pressure to the kappa power. -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Raise pressure over 1e5 Pa to the kappa power. -! A quadratic interpolation is done between values in a lookup table -! computed in gpkap. see documentation for fpkapx for details. -! Input values outside table range are reset to table extrema. -! The interpolation accuracy ranges from 12 decimal places -! at 100000 Pascals to 7 decimal places at 1000 Pascals. -! On the Cray, fpkap is over 4 times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell standardized kappa, -! increased range and accuracy -! 1999-03-01 Iredell f90 module -! 1999-03-24 Iredell table lookup -! -! Usage: pkap=fpkapq(p) -! -! Input argument list: -! p Real(krealfp) pressure in Pascals -! -! Output argument list: -! fpkapq Real(krealfp) p over 1e5 Pa to the kappa power -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) fpkapq - real(krealfp),intent(in):: p - integer jx - real(krealfp) xj,dxj,fj1,fj2,fj3 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xpkap+c2xpkap*p,1._krealfp),real(nxpkap,krealfp)) - jx=min(max(nint(xj),2),nxpkap-1) - dxj=xj-jx - fj1=tbpkap(jx-1) - fj2=tbpkap(jx) - fj3=tbpkap(jx+1) - fpkapq=(((fj3+fj1)/2-fj2)*dxj+(fj3-fj1)/2)*dxj+fj2 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - function fpkapo(p) -!$$$ Subprogram documentation block -! -! Subprogram: fpkapo raise surface pressure to the kappa power. -! Author: Phillips org: w/NMC2X2 Date: 29 dec 82 -! -! Abstract: Raise surface pressure over 1e5 Pa to the kappa power -! using a rational weighted chebyshev approximation. -! The numerator is of order 2 and the denominator is of order 4. -! The pressure range is 40000-110000 Pa and kappa is defined in fpkapx. -! The accuracy of this approximation is almost 8 decimal places. -! On the Cray, fpkap is over 10 times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell standardized kappa, -! increased range and accuracy -! 1999-03-01 Iredell f90 module -! -! Usage: pkap=fpkapo(p) -! -! Input argument list: -! p Real(krealfp) surface pressure in Pascals -! p should be in the range 40000 to 110000 -! -! Output argument list: -! fpkapo Real(krealfp) p over 1e5 Pa to the kappa power -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) fpkapo - real(krealfp),intent(in):: p - integer,parameter:: nnpk=2,ndpk=4 - real(krealfp):: cnpk(0:nnpk)=(/3.13198449e-1,5.78544829e-2,& - 8.35491871e-4/) - real(krealfp):: cdpk(0:ndpk)=(/1.,8.15968401e-2,5.72839518e-4,& - -4.86959812e-7,5.24459889e-10/) - integer n - real(krealfp) pkpa,fnpk,fdpk -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - pkpa=p*1.e-3_krealfp - fnpk=cnpk(nnpk) - do n=nnpk-1,0,-1 - fnpk=pkpa*fnpk+cnpk(n) - enddo - fdpk=cdpk(ndpk) - do n=ndpk-1,0,-1 - fdpk=pkpa*fdpk+cdpk(n) - enddo - fpkapo=fnpk/fdpk -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function fpkapx(p) -!$$$ Subprogram documentation block -! -! Subprogram: fpkapx raise pressure to the kappa power. -! Author: Phillips org: w/NMC2X2 Date: 29 dec 82 -! -! Abstract: raise pressure over 1e5 Pa to the kappa power. -! Kappa is equal to rd/cp where rd and cp are physical constants. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 94-12-30 Iredell made into inlinable function -! 1999-03-01 Iredell f90 module -! -! Usage: pkap=fpkapx(p) -! -! Input argument list: -! p Real(krealfp) pressure in Pascals -! -! Output argument list: -! fpkapx Real(krealfp) p over 1e5 Pa to the kappa power -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) fpkapx - real(krealfp),intent(in):: p -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - fpkapx=(p/1.e5_krealfp)**con_rocp -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - subroutine grkap -!$$$ Subprogram documentation block -! -! Subprogram: grkap Compute coefficients for p**(1/kappa) -! Author: Phillips org: w/NMC2X2 Date: 29 dec 82 -! -! Abstract: Computes pressure to the 1/kappa table as a function of pressure -! for the table lookup function frkap. -! Exact pressure to the 1/kappa values are calculated in subprogram frkapx. -! The current implementation computes a table with a length -! of 5501 for pressures ranging up to 110000 Pascals. -! -! Program History Log: -! 94-12-30 Iredell -! 1999-03-01 Iredell f90 module -! 1999-03-24 Iredell table lookup -! -! Usage: call grkap -! -! Subprograms called: -! frkapx function to compute exact pressure to the 1/kappa -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - integer jx - real(krealfp) xmin,xmax,xinc,x,p -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xmin=0._krealfp - xmax=fpkapx(110000._krealfp) - xinc=(xmax-xmin)/(nxrkap-1) - c1xrkap=1.-xmin/xinc - c2xrkap=1./xinc - do jx=1,nxrkap - x=xmin+(jx-1)*xinc - p=x - tbrkap(jx)=frkapx(p) - enddo -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end subroutine -!------------------------------------------------------------------------------- - elemental function frkap(pkap) -!$$$ Subprogram Documentation Block -! -! Subprogram: frkap raise pressure to the 1/kappa power. -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Raise pressure over 1e5 Pa to the 1/kappa power. -! A linear interpolation is done between values in a lookup table -! computed in grkap. See documentation for frkapx for details. -! Input values outside table range are reset to table extrema. -! The interpolation accuracy is better than 7 decimal places. -! On the IBM, fpkap is about 4 times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell standardized kappa, -! increased range and accuracy -! 1999-03-01 Iredell f90 module -! 1999-03-24 Iredell table lookup -! -! Usage: p=frkap(pkap) -! -! Input argument list: -! pkap Real(krealfp) p over 1e5 Pa to the kappa power -! -! Output argument list: -! frkap Real(krealfp) pressure in Pascals -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) frkap - real(krealfp),intent(in):: pkap - integer jx - real(krealfp) xj -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xrkap+c2xrkap*pkap,1._krealfp),real(nxrkap,krealfp)) - jx=min(xj,nxrkap-1._krealfp) - frkap=tbrkap(jx)+(xj-jx)*(tbrkap(jx+1)-tbrkap(jx)) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function frkapq(pkap) -!$$$ Subprogram Documentation Block -! -! Subprogram: frkapq raise pressure to the 1/kappa power. -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Raise pressure over 1e5 Pa to the 1/kappa power. -! A quadratic interpolation is done between values in a lookup table -! computed in grkap. see documentation for frkapx for details. -! Input values outside table range are reset to table extrema. -! The interpolation accuracy is better than 11 decimal places. -! On the IBM, fpkap is almost 4 times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 94-12-30 Iredell standardized kappa, -! increased range and accuracy -! 1999-03-01 Iredell f90 module -! 1999-03-24 Iredell table lookup -! -! Usage: p=frkapq(pkap) -! -! Input argument list: -! pkap Real(krealfp) p over 1e5 Pa to the kappa power -! -! Output argument list: -! frkapq Real(krealfp) pressure in Pascals -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) frkapq - real(krealfp),intent(in):: pkap - integer jx - real(krealfp) xj,dxj,fj1,fj2,fj3 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xrkap+c2xrkap*pkap,1._krealfp),real(nxrkap,krealfp)) - jx=min(max(nint(xj),2),nxrkap-1) - dxj=xj-jx - fj1=tbrkap(jx-1) - fj2=tbrkap(jx) - fj3=tbrkap(jx+1) - frkapq=(((fj3+fj1)/2-fj2)*dxj+(fj3-fj1)/2)*dxj+fj2 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function frkapx(pkap) -!$$$ Subprogram documentation block -! -! Subprogram: frkapx raise pressure to the 1/kappa power. -! Author: Phillips org: w/NMC2X2 Date: 29 dec 82 -! -! Abstract: raise pressure over 1e5 Pa to the 1/kappa power. -! Kappa is equal to rd/cp where rd and cp are physical constants. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 94-12-30 Iredell made into inlinable function -! 1999-03-01 Iredell f90 module -! -! Usage: p=frkapx(pkap) -! -! Input argument list: -! pkap Real(krealfp) p over 1e5 Pa to the kappa power -! -! Output argument list: -! frkapx Real(krealfp) pressure in Pascals -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) frkapx - real(krealfp),intent(in):: pkap -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - frkapx=pkap**(1/con_rocp)*1.e5_krealfp -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - subroutine gtlcl -!$$$ Subprogram Documentation Block -! -! Subprogram: gtlcl Compute equivalent potential temperature table -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute lifting condensation level temperature table -! as a function of temperature and dewpoint depression for function ftlcl. -! Lifting condensation level temperature is calculated in subprogram ftlclx -! The current implementation computes a table with a first dimension -! of 151 for temperatures ranging from 180.0 to 330.0 Kelvin -! and a second dimension of 61 for dewpoint depression ranging from -! 0 to 60 Kelvin. -! -! Program History Log: -! 1999-03-01 Iredell f90 module -! -! Usage: call gtlcl -! -! Subprograms called: -! (ftlclx) inlinable function to compute LCL temperature -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - integer jx,jy - real(krealfp) xmin,xmax,ymin,ymax,xinc,yinc,x,y,tdpd,t -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xmin=180._krealfp - xmax=330._krealfp - ymin=0._krealfp - ymax=60._krealfp - xinc=(xmax-xmin)/(nxtlcl-1) - c1xtlcl=1.-xmin/xinc - c2xtlcl=1./xinc - yinc=(ymax-ymin)/(nytlcl-1) - c1ytlcl=1.-ymin/yinc - c2ytlcl=1./yinc - do jy=1,nytlcl - y=ymin+(jy-1)*yinc - tdpd=y - do jx=1,nxtlcl - x=xmin+(jx-1)*xinc - t=x - tbtlcl(jx,jy)=ftlclx(t,tdpd) - enddo - enddo -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end subroutine -!------------------------------------------------------------------------------- - elemental function ftlcl(t,tdpd) -!$$$ Subprogram Documentation Block -! -! Subprogram: ftlcl Compute LCL temperature -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute temperature at the lifting condensation level -! from temperature and dewpoint depression. -! A bilinear interpolation is done between values in a lookup table -! computed in gtlcl. See documentation for ftlclx for details. -! Input values outside table range are reset to table extrema. -! The interpolation accuracy is better than 0.0005 Kelvin. -! On the Cray, ftlcl is ? times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 1999-03-01 Iredell f90 module -! -! Usage: tlcl=ftlcl(t,tdpd) -! -! Input argument list: -! t Real(krealfp) LCL temperature in Kelvin -! tdpd Real(krealfp) dewpoint depression in Kelvin -! -! Output argument list: -! ftlcl Real(krealfp) temperature at the LCL in Kelvin -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) ftlcl - real(krealfp),intent(in):: t,tdpd - integer jx,jy - real(krealfp) xj,yj,ftx1,ftx2 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xtlcl+c2xtlcl*t,1._krealfp),real(nxtlcl,krealfp)) - yj=min(max(c1ytlcl+c2ytlcl*tdpd,1._krealfp),real(nytlcl,krealfp)) - jx=min(xj,nxtlcl-1._krealfp) - jy=min(yj,nytlcl-1._krealfp) - ftx1=tbtlcl(jx,jy)+(xj-jx)*(tbtlcl(jx+1,jy)-tbtlcl(jx,jy)) - ftx2=tbtlcl(jx,jy+1)+(xj-jx)*(tbtlcl(jx+1,jy+1)-tbtlcl(jx,jy+1)) - ftlcl=ftx1+(yj-jy)*(ftx2-ftx1) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function ftlclq(t,tdpd) -!$$$ Subprogram Documentation Block -! -! Subprogram: ftlclq Compute LCL temperature -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute temperature at the lifting condensation level -! from temperature and dewpoint depression. -! A biquadratic interpolation is done between values in a lookup table -! computed in gtlcl. see documentation for ftlclx for details. -! Input values outside table range are reset to table extrema. -! The interpolation accuracy is better than 0.000003 Kelvin. -! On the Cray, ftlclq is ? times faster than exact calculation. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 1999-03-01 Iredell f90 module -! -! Usage: tlcl=ftlclq(t,tdpd) -! -! Input argument list: -! t Real(krealfp) LCL temperature in Kelvin -! tdpd Real(krealfp) dewpoint depression in Kelvin -! -! Output argument list: -! ftlcl Real(krealfp) temperature at the LCL in Kelvin -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) ftlclq - real(krealfp),intent(in):: t,tdpd - integer jx,jy - real(krealfp) xj,yj,dxj,dyj - real(krealfp) ft11,ft12,ft13,ft21,ft22,ft23,ft31,ft32,ft33 - real(krealfp) ftx1,ftx2,ftx3 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xj=min(max(c1xtlcl+c2xtlcl*t,1._krealfp),real(nxtlcl,krealfp)) - yj=min(max(c1ytlcl+c2ytlcl*tdpd,1._krealfp),real(nytlcl,krealfp)) - jx=min(max(nint(xj),2),nxtlcl-1) - jy=min(max(nint(yj),2),nytlcl-1) - dxj=xj-jx - dyj=yj-jy - ft11=tbtlcl(jx-1,jy-1) - ft12=tbtlcl(jx-1,jy) - ft13=tbtlcl(jx-1,jy+1) - ft21=tbtlcl(jx,jy-1) - ft22=tbtlcl(jx,jy) - ft23=tbtlcl(jx,jy+1) - ft31=tbtlcl(jx+1,jy-1) - ft32=tbtlcl(jx+1,jy) - ft33=tbtlcl(jx+1,jy+1) - ftx1=(((ft31+ft11)/2-ft21)*dxj+(ft31-ft11)/2)*dxj+ft21 - ftx2=(((ft32+ft12)/2-ft22)*dxj+(ft32-ft12)/2)*dxj+ft22 - ftx3=(((ft33+ft13)/2-ft23)*dxj+(ft33-ft13)/2)*dxj+ft23 - ftlclq=(((ftx3+ftx1)/2-ftx2)*dyj+(ftx3-ftx1)/2)*dyj+ftx2 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - function ftlclo(t,tdpd) -!$$$ Subprogram documentation block -! -! Subprogram: ftlclo Compute LCL temperature. -! Author: Phillips org: w/NMC2X2 Date: 29 dec 82 -! -! Abstract: Compute temperature at the lifting condensation level -! from temperature and dewpoint depression. the formula used is -! a polynomial taken from Phillips mstadb routine which empirically -! approximates the original exact implicit relationship. -! (This kind of approximation is customary (inman, 1969), but -! the original source for this particular one is not yet known. -MI) -! Its accuracy is about 0.03 Kelvin for a dewpoint depression of 30. -! This function should be expanded inline in the calling routine. -! -! Program History Log: -! 91-05-07 Iredell made into inlinable function -! 1999-03-01 Iredell f90 module -! -! Usage: tlcl=ftlclo(t,tdpd) -! -! Input argument list: -! t Real(krealfp) temperature in Kelvin -! tdpd Real(krealfp) dewpoint depression in Kelvin -! -! Output argument list: -! ftlclo Real(krealfp) temperature at the LCL in Kelvin -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) ftlclo - real(krealfp),intent(in):: t,tdpd - real(krealfp),parameter:: clcl1= 0.954442e+0,clcl2= 0.967772e-3,& - clcl3=-0.710321e-3,clcl4=-0.270742e-5 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ftlclo=t-tdpd*(clcl1+clcl2*t+tdpd*(clcl3+clcl4*t)) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - elemental function ftlclx(t,tdpd) -!$$$ Subprogram documentation block -! -! Subprogram: ftlclx Compute LCL temperature. -! Author: Iredell org: w/NMC2X2 Date: 25 March 1999 -! -! Abstract: Compute temperature at the lifting condensation level -! from temperature and dewpoint depression. A parcel lifted -! adiabatically becomes saturated at the lifting condensation level. -! The water model assumes a perfect gas, constant specific heats -! for gas and liquid, and neglects the volume of the liquid. -! The model does account for the variation of the latent heat -! of condensation with temperature. The ice option is not included. -! The Clausius-Clapeyron equation is integrated from the triple point -! to get the formulas -! pvlcl=con_psat*(trlcl**xa)*exp(xb*(1.-trlcl)) -! pvdew=con_psat*(trdew**xa)*exp(xb*(1.-trdew)) -! where pvlcl is the saturated parcel vapor pressure at the LCL, -! pvdew is the unsaturated parcel vapor pressure initially, -! trlcl is ttp/tlcl and trdew is ttp/tdew. The adiabatic lifting -! of the parcel is represented by the following formula -! pvdew=pvlcl*(t/tlcl)**(1/kappa) -! This formula is inverted by iterating Newtonian approximations -! until tlcl is found to within 1.e-6 Kelvin. Note that the minimum -! returned temperature is 180 Kelvin. -! -! Program History Log: -! 1999-03-25 Iredell -! -! Usage: tlcl=ftlclx(t,tdpd) -! -! Input argument list: -! t Real(krealfp) temperature in Kelvin -! tdpd Real(krealfp) dewpoint depression in Kelvin -! -! Output argument list: -! ftlclx Real(krealfp) temperature at the LCL in Kelvin -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none - real(krealfp) ftlclx - real(krealfp),intent(in):: t,tdpd - real(krealfp),parameter:: terrm=1.e-4,tlmin=180.,tlminx=tlmin-5. - real(krealfp) tr,pvdew,tlcl,ta,pvlcl,el,dpvlcl,terr - integer i -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - tr=con_ttp/(t-tdpd) - pvdew=con_psat*(tr**con_xpona)*exp(con_xponb*(1.-tr)) - tlcl=t-tdpd - do i=1,100 - tr=con_ttp/tlcl - ta=t/tlcl - pvlcl=con_psat*(tr**con_xpona)*exp(con_xponb*(1.-tr))*ta**(1/con_rocp) - el=con_hvap+con_dldt*(tlcl-con_ttp) - dpvlcl=(el/(con_rv*t**2)+1/(con_rocp*tlcl))*pvlcl - terr=(pvlcl-pvdew)/dpvlcl - tlcl=tlcl-terr - if(abs(terr).le.terrm.or.tlcl.lt.tlminx) exit - enddo - ftlclx=max(tlcl,tlmin) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end function -!------------------------------------------------------------------------------- - subroutine gfuncphys -!$$$ Subprogram Documentation Block -! -! Subprogram: gfuncphys Compute all physics function tables -! Author: N Phillips w/NMC2X2 Date: 30 dec 82 -! -! Abstract: Compute all physics function tables. Lookup tables are -! set up for computing saturation vapor pressure, dewpoint temperature, -! equivalent potential temperature, moist adiabatic temperature and humidity, -! pressure to the kappa, and lifting condensation level temperature. -! -! Program History Log: -! 1999-03-01 Iredell f90 module -! -! Usage: call gfuncphys -! -! Subprograms called: -! gpvsl compute saturation vapor pressure over liquid table -! gpvsi compute saturation vapor pressure over ice table -! gpvs compute saturation vapor pressure table -! gtdpl compute dewpoint temperature over liquid table -! gtdpi compute dewpoint temperature over ice table -! gtdp compute dewpoint temperature table -! gthe compute equivalent potential temperature table -! gtma compute moist adiabat tables -! gpkap compute pressure to the kappa table -! grkap compute pressure to the 1/kappa table -! gtlcl compute LCL temperature table -! -! Attributes: -! Language: Fortran 90. -! -!$$$ - implicit none -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - call gpvsl - call gpvsi - call gpvs - call gtdpl - call gtdpi - call gtdp - call gthe - call gtma - call gpkap - call grkap - call gtlcl -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - end subroutine -!------------------------------------------------------------------------------- -end module diff --git a/sorc/gfs_bufr.fd/gfsbufr.f b/sorc/gfs_bufr.fd/gfsbufr.f deleted file mode 100755 index 08591b9171..0000000000 --- a/sorc/gfs_bufr.fd/gfsbufr.f +++ /dev/null @@ -1,273 +0,0 @@ - program meteormrf -C$$$ MAIN PROGRAM DOCUMENTATION BLOCK -C -C MAIN PROGRAM: METEOMRF -C PRGMMR: PAN ORG: NP23 DATE: 1999-07-21 -C -C ABSTRACT: Creates BUFR meteogram files for the AVN and MRF. -C -C PROGRAM HISTORY LOG: -C 99-07-21 Hualu Pan -C 16-09-27 HUIYA CHUANG MODIFY TO READ GFS NEMS OUTPUT ON GRID SPACE -C 16-10-15 HUIYA CHUANG: CONSOLIDATE TO READ FLUX FIELDS IN THIS -C PACKAGE TOO AND THIS SPEEDS UP BFS BUFR BY 3X -C 17-02-27 GUANG PING LOU: CHANGE MODEL OUTPUT READ-IN TO HOURLY -C TO 120 HOURS AND 3 HOURLY TO 180 HOURS. -C 19-07-16 GUANG PING LOU: CHANGE FROM NEMSIO TO GRIB2. -C -C -C USAGE: -C INPUT FILES: -C FTxxF001 - UNITS 11 THRU 49 -C PARM - UNIT 5 (STANDARD READ) -C -C OUTPUT FILES: (INCLUDING SCRATCH FILES) -C FTxxF001 - UNITS 51 THRU 79 -C FTxxF001 - UNIT 6 (STANDARD PRINTFILE) -C -C SUBPROGRAMS CALLED: (LIST ALL CALLED FROM ANYWHERE IN CODES) -C UNIQUE: - ROUTINES THAT ACCOMPANY SOURCE FOR COMPILE -C LIBRARY: -C W3LIB - -C -C EXIT STATES: -C COND = 0 - SUCCESSFUL RUN -C =NNNN - TROUBLE OR SPECIAL FLAG - SPECIFY NATURE -C -C REMARKS: LIST CAVEATS, OTHER HELPFUL HINTS OR INFORMATION -C -C ATTRIBUTES: -C LANGUAGE: INDICATE EXTENSIONS, COMPILER OPTIONS -C MACHINE: IBM SP -C -C$$$ - use netcdf - use mpi - use nemsio_module - use sigio_module - implicit none -!! include 'mpif.h' - integer,parameter:: nsta=3000 - integer,parameter:: ifile=11 - integer(sigio_intkind):: irets - type(nemsio_gfile) :: gfile - integer ncfsig, nsig - integer istat(nsta), idate(4), jdate - integer :: levs,nstart,nend,nint,nsfc,levsi,im,jm - integer :: npoint,np,ist,is,iret,lss,nss,nf,nsk,nfile - integer :: ielev - integer :: lsfc - real :: alat,alon,rla,rlo - real :: wrkd(1),dummy - real rlat(nsta), rlon(nsta), elevstn(nsta) - integer iidum(nsta),jjdum(nsta) - integer nint1, nend1, nint3, nend3 - integer landwater(nsta) - character*1 ns, ew - character*4 t3 - character*4 cstat(nsta) - character*32 desc - character*150 dird, fnsig - logical f00, makebufr - CHARACTER*150 FILESEQ - CHARACTER*8 SBSET - LOGICAL SEQFLG(4) - CHARACTER*80 CLIST(4) - INTEGER NPP(4) - CHARACTER*8 SEQNAM(4) - integer ierr, mrank, msize,ntask - integer n0, ntot - integer :: error, ncid, id_var,dimid - character(len=10) :: dim_nam - character(len=6) :: fformat - !added from Cory - integer :: iope, ionproc - integer, allocatable :: iocomms(:) -C - DATA SBSET / 'ABCD1234' / -C - DATA SEQFLG / .FALSE., .TRUE., .FALSE., .FALSE. / -C - DATA SEQNAM / 'HEADR', 'PROFILE', 'CLS1' ,'D10M' / -c DATA SEQNAM / 'HEADR', 'PRES TMDB UWND VWND SPFH OMEG', -c & 'CLS1' ,'D10M' / -C - namelist /nammet/ levs, makebufr, dird, - & nstart, nend, nint, nend1, nint1, - & nint3, nsfc, f00, fformat - - call mpi_init(ierr) - call mpi_comm_rank(MPI_COMM_WORLD,mrank,ierr) - call mpi_comm_size(MPI_COMM_WORLD,msize,ierr) - if(mrank.eq.0) then - CALL W3TAGB('METEOMRF',1999,0202,0087,'NP23') - endif - open(5,file='gfsparm') - read(5,nammet) - write(6,nammet) - npoint = 0 - 99 FORMAT (I6, F6.2,A1, F7.2,A1,1X,A4,1X,I2, A28, I4) - do np = 1, nsta+2 - read(8,99,end=200) IST,ALAT,NS,ALON,EW,T3,lsfc,DESC,IELEV -CC print*," IST,ALAT,NS,ALON,EW,T3,lsfc,DESC,IELEV= " -CC print*, IST,ALAT,NS,ALON,EW,T3,lsfc,DESC,IELEV - if(alat.lt.95.) then - npoint = npoint + 1 - RLA = 9999. - IF (NS .EQ. 'N') RLA = ALAT - IF (NS .EQ. 'S') RLA = -ALAT - RLO = 9999. - IF (EW .EQ. 'E') RLO = ALON - IF (EW .EQ. 'W') RLO = -ALON - rlat(npoint) = rla - rlon(npoint) = rlo - istat(npoint) = ist - cstat(npoint) = T3 - elevstn(npoint) = ielev - - if(lsfc .le. 9) then - landwater(npoint) = 2 !!nearest - else if(lsfc .le. 19) then - landwater(npoint) = 1 !!land - else if(lsfc .ge. 20) then - landwater(npoint) = 0 !!water - endif - endif - enddo - 200 continue - if(npoint.le.0) then - print *, ' station list file is empty, abort program' - call abort - elseif(npoint.gt.nsta) then - print *, ' number of station exceeds nsta, abort program' - call abort - endif -! print*,'npoint= ', npoint -! print*,'np,IST,idum,jdum,rlat(np),rlon(np)= ' - do np = 1, npoint - read(7,98) IST, iidum(np), jjdum(np), ALAT, ALON - enddo - 98 FORMAT (3I6, 2F9.2) - if (mrank.eq.0.and.makebufr) then - REWIND 1 - READ (1,100) SBSET - 100 FORMAT ( ////// 2X, A8 ) - PRINT 120, SBSET - 120 FORMAT ( ' SBSET=#', A8, '#' ) - REWIND 1 -C -C READ PARM NAMES AND NUMBER OF PARM NAMES FROM BUFR TABLE. - DO IS = 1,4 - CALL BFRHDR ( 1, SEQNAM(IS), SEQFLG(IS), - X CLIST(IS), NPP(IS), IRET ) - IF ( IRET .NE. 0 ) THEN - PRINT*, ' CALL BFRHDR IRET=', IRET - ENDIF - ENDDO - lss = len ( dird ) - DO WHILE ( dird (lss:lss) .eq. ' ' ) - lss = lss - 1 - END DO -C - endif - nsig = 11 - nss = nstart + nint - if(f00) nss = nstart -c do nf = nss, nend, nint - ntot = (nend - nss) / nint + 1 - ntask = mrank/(float(msize)/float(ntot)) - nf = ntask * nint + nss - print*,'n0 ntot nint nss mrank msize' - print*, n0,ntot,nint,nss,mrank,msize - print*,'nf, ntask= ', nf, ntask - if(nf .le. nend1) then - nfile = 21 + (nf / nint1) - else - nfile = 21 + (nend1/nint1) + (nf-nend1)/nint3 - endif - print*, 'nf,nint,nfile = ',nf,nint,nfile - if(nf.le.nend) then - if(nf.lt.10) then - fnsig = 'sigf0' - write(fnsig(6:6),'(i1)') nf - ncfsig = 6 - elseif(nf.lt.100) then - fnsig = 'sigf' - write(fnsig(5:6),'(i2)') nf - ncfsig = 6 - else - fnsig = 'sigf' - write(fnsig(5:7),'(i3)') nf - ncfsig = 7 - endif - print *, 'Opening file : ',fnsig - -!! read in either nemsio or NetCDF files - if (fformat == 'netcdf') then - error=nf90_open(trim(fnsig),nf90_nowrite,ncid) - error=nf90_inq_dimid(ncid,"grid_xt",dimid) - error=nf90_inquire_dimension(ncid,dimid,dim_nam,im) - error=nf90_inq_dimid(ncid,"grid_yt",dimid) - error=nf90_inquire_dimension(ncid,dimid,dim_nam,jm) - error=nf90_inq_dimid(ncid,"pfull",dimid) - error=nf90_inquire_dimension(ncid,dimid,dim_nam,levsi) - error=nf90_close(ncid) - print*,'NetCDF file im,jm,lm= ',im,jm,levs,levsi - - else - call nemsio_init(iret=irets) - print *,'nemsio_init, iret=',irets - call nemsio_open(gfile,trim(fnsig),'read',iret=irets) - if ( irets /= 0 ) then - print*,"fail to open nems atmos file";stop - endif - - call nemsio_getfilehead(gfile,iret=irets - & ,dimx=im,dimy=jm,dimz=levsi) - if( irets /= 0 ) then - print*,'error finding model dimensions '; stop - endif - print*,'nemsio file im,jm,lm= ',im,jm,levsi - call nemsio_close(gfile,iret=irets) - endif - allocate (iocomms(0:ntot)) - if (fformat == 'netcdf') then - print*,'iocomms= ', iocomms - call mpi_comm_split(MPI_COMM_WORLD,ntask,0,iocomms(ntask),ierr) - call mpi_comm_rank(iocomms(ntask), iope, ierr) - call mpi_comm_size(iocomms(ntask), ionproc, ierr) - - call meteorg(npoint,rlat,rlon,istat,cstat,elevstn, - & nf,nfile,fnsig,jdate,idate, - & levsi,im,jm,nsfc, - & landwater,nend1, nint1, nint3, iidum,jjdum, - & fformat,iocomms(ntask),iope,ionproc) - call mpi_barrier(iocomms(ntask), ierr) - call mpi_comm_free(iocomms(ntask), ierr) - else -!! For nemsio input - call meteorg(npoint,rlat,rlon,istat,cstat,elevstn, - & nf,nfile,fnsig,jdate,idate, - & levs,im,jm,nsfc, - & landwater,nend1, nint1, nint3, iidum,jjdum, - & fformat,iocomms(ntask),iope,ionproc) - endif - endif - call mpi_barrier(mpi_comm_world,ierr) - call mpi_finalize(ierr) - if(mrank.eq.0) then - print *, ' starting to make bufr files' - print *, ' makebufr= ', makebufr - print *, 'nint1,nend1,nint3,nend= ',nint1,nend1,nint3,nend -!! idate = 0 7 1 2019 -!! jdate = 2019070100 - - if(makebufr) then - nend3 = nend - call buff(nint1,nend1,nint3,nend3, - & npoint,idate,jdate,levs, - & dird,lss,istat,sbset,seqflg,clist,npp,wrkd) - CALL W3TAGE('METEOMRF') - endif - endif - end diff --git a/sorc/gfs_bufr.fd/gslp.f b/sorc/gfs_bufr.fd/gslp.f deleted file mode 100755 index 5b0eca1f51..0000000000 --- a/sorc/gfs_bufr.fd/gslp.f +++ /dev/null @@ -1,92 +0,0 @@ -!$$$ Subprogram documentation block -! -! Subprogram: gslp Compute sea level pressure as in the GFS -! Prgmmr: Iredell Org: np23 Date: 1999-10-18 -! -! Abstract: This subprogram computes sea level pressure from profile data -! using the Shuell method in the GFS. -! -! Program history log: -! 1999-10-18 Mark Iredell -! -! Usage: call gslp(km,hs,ps,p,t,sh,prmsl,h,ho) -! Input argument list: -! km integer number of levels -! hs real surface height (m) -! ps real surface pressure (Pa) -! p real (km) profile pressures (Pa) -! t real (km) profile temperatures (K) -! sh real (km) profile specific humidities (kg/kg) -! Output argument list: -! prmsl real sea level pressure (Pa) -! h real integer-layer height (m) -! ho real integer-layer height at 1000hPa and 500hPa (m) -! -! Modules used: -! physcons physical constants -! -! Attributes: -! Language: Fortran 90 -! -!$$$ -subroutine gslp(km,hs,ps,p,t,sh,prmsl,h,ho) - use physcons - implicit none - integer,intent(in):: km - real,intent(in):: hs,ps - real,intent(in),dimension(km):: p,t,sh - real,intent(out):: prmsl - real,intent(out),dimension(km):: h - real,intent(out),dimension(2):: ho - real,parameter:: gammam=-6.5e-3,zshul=75.,tvshul=290.66 - real,parameter:: pm1=1.e5,tm1=287.45,hm1=113.,hm2=5572.,& - fslp=con_g*(hm2-hm1)/(con_rd*tm1) - integer k,i - real aps,ap(km),tv(km) - real apo(2) - real tvu,tvd,gammas,part - real hfac -! compute model heights - aps=log(ps) - ap(1)=log(p(1)) - tv(1)=t(1)*(1+con_fvirt*sh(1)) - h(1)=hs-con_rog*tv(1)*(ap(1)-aps) - do k=2,km - ap(k)=log(p(k)) - tv(k)=t(k)*(1+con_fvirt*sh(k)) - h(k)=h(k-1)-con_rog*0.5*(tv(k-1)+tv(k))*(ap(k)-ap(k-1)) - enddo -! compute 1000 and 500 mb heights - apo(1)=log(1000.e2) - apo(2)=log(500.e2) - do i=1,2 - if(aps.lt.apo(i)) then - tvu=tv(1) - if(h(1).gt.zshul) then - tvd=tvu-gammam*h(1) - if(tvd.gt.tvshul) then - if(tvu.gt.tvshul) then - tvd=tvshul-5.e-3*(tvu-tvshul)**2 - else - tvd=tvshul - endif - endif - gammas=(tvu-tvd)/h(1) - else - gammas=0. - endif - part=con_rog*(apo(i)-ap(1)) - ho(i)=h(1)-tvu*part/(1.+0.5*gammas*part) - else - do k=1,km - if(ap(k).lt.apo(i)) then - ho(i)=h(k)-con_rog*tv(k)*(apo(i)-ap(k)) - exit - endif - enddo - endif - enddo -! compute sea level pressure - hfac=ho(1)/(ho(2)-ho(1)) - prmsl=pm1*exp(fslp*hfac) -end subroutine diff --git a/sorc/gfs_bufr.fd/lcl.f b/sorc/gfs_bufr.fd/lcl.f deleted file mode 100755 index 5fa4c4719e..0000000000 --- a/sorc/gfs_bufr.fd/lcl.f +++ /dev/null @@ -1,45 +0,0 @@ - SUBROUTINE LCL(TLCL,PLCL,T,P,Q) -C -C LIFTING CONDENSATION LEVEL ROUTINE -C - REAL L0, KAPPA - parameter (dtdp=4.5e-4,kappa=.286,g=9.81) - parameter (cp=1004.6,cl=4185.5,cpv=1846.0) - parameter (rv=461.5,l0=2.500e6,t0=273.16,es0=610.78) - parameter (cps=2106.0,hfus=3.3358e5,rd=287.05) - parameter (fact1=(CPV - CL) / RV,fact1i=(cps-cl)/rv) - parameter (fact2=(L0 + (CL - CPV) * T0) / RV) - parameter (fact2i=(L0 + hfus + (CL - cps) * T0) / RV) - parameter (fact3=1. / T0,eps=rd/rv,tmix=t0-20.) - DESDT(ES,T) = ES * (FACT1 / T + FACT2 / T ** 2) - DESDTi(ES,T) = ES * (FACT1i / T + FACT2i / T ** 2) - ITER = 0 - CALL TDEW(TG,T,Q,P) - 5 CALL SVP(QS,ES,P,TG) - DES = DESDT(ES,TG) - if(tg.ge.t0) then - des = desdt(es,tg) - elseif(tg.lt.tmix) then - des = desdti(es,tg) - else - w = (tg - tmix) / (t0 - tmix) - des = w * desdt(es,tg) + (1.-w) * desdti(es,tg) - endif - FT = P * (TG / T) ** KAPPA - DFT = KAPPA * FT / TG - GT = (EPS + Q * (1. - EPS)) * ES - Q * FT - DGT = (EPS + Q * (1. - EPS)) * DES - Q * DFT - DTG = GT / DGT -c WRITE(6,*) ' ITER, DTG =', ITER, DTG - TG = TG - DTG - IF(ABS(DTG).LT..1) GOTO 10 - ITER = ITER + 1 - IF(ITER.GT.30) THEN - WRITE(6,*) ' LCL ITERATION DIVERGES' - STOP 'ABEND 101' - ENDIF - GOTO 5 - 10 TLCL = TG - PLCL = P * (TLCL / T) ** KAPPA - RETURN - END diff --git a/sorc/gfs_bufr.fd/machine.f b/sorc/gfs_bufr.fd/machine.f deleted file mode 100755 index bec00028ad..0000000000 --- a/sorc/gfs_bufr.fd/machine.f +++ /dev/null @@ -1,15 +0,0 @@ - MODULE MACHINE - - IMPLICIT NONE - SAVE -! Machine dependant constants - integer kind_io4,kind_io8,kind_phys,kind_rad - parameter (kind_rad = selected_real_kind(13,60)) ! the '60' maps to 64-bit real - parameter (kind_phys = selected_real_kind(13,60)) ! the '60' maps to 64-bit real - parameter (kind_io4 = 4) -! parameter (kind_io8 = 8) - parameter (kind_io8 = 4) - integer kint_mpi - parameter (kint_mpi = 4) - - END MODULE MACHINE diff --git a/sorc/gfs_bufr.fd/makefile_module b/sorc/gfs_bufr.fd/makefile_module deleted file mode 100755 index c640d0a927..0000000000 --- a/sorc/gfs_bufr.fd/makefile_module +++ /dev/null @@ -1,79 +0,0 @@ -##################################################################################### -# gfs_bufr using module compile standard -# # 11/08/2019 guang.ping.lou@noaa.gov: Create NetCDF version -# ##################################################################################### -# set -eux -# - -FC = $(myFC) $(myFCFLAGS) -CPP = $(myCPP) $(myCPPFLAGS) - -FFLAGS = -I$(NETCDF_INC) \ - -I$(NEMSIO_INC) \ - -I$(SIGIO_INC4) \ - -I$(W3EMC_INC4) - -LIBS = -L$(NETCDF_LIB) -lnetcdf -lnetcdff \ - -L$(HDF5_LIB) -lhdf5_hl -lhdf5 \ - $(NEMSIO_LIB) \ - $(W3EMC_LIB4) \ - $(W3NCO_LIB4) \ - $(BUFR_LIB4) \ - $(BACIO_LIB4) \ - $(SP_LIB4) \ - $(SIGIO_LIB4) - -SRCM = gfsbufr.f -OBJS = physcons.o funcphys.o meteorg.o bfrhdr.o newsig1.o terp3.o\ - bfrize.o vintg.o buff.o rsearch.o \ - svp.o calpreciptype.o lcl.o mstadb.o tdew.o\ - machine.o gslp.o modstuff1.o read_nemsio.o read_netcdf_p.o - -CMD = ../../exec/gfs_bufr - -$(CMD): $(SRCM) $(OBJS) - $(FC) $(FFLAGS) $(SRCM) $(OBJS) $(LIBS) -o $(CMD) - -machine.o: machine.f - $(FC) $(FFLAGS) -free -c machine.f -physcons.o: physcons.f machine.o - $(FC) $(FFLAGS) -free -c physcons.f -funcphys.o: funcphys.f physcons.o - $(FC) $(FFLAGS) -free -c funcphys.f -gslp.o: gslp.f - $(FC) $(FFLAGS) -free -c gslp.f -modstuff1.o: modstuff1.f - $(FC) $(INC) $(FFLAGS) -free -c modstuff1.f -meteorg.o: meteorg.f physcons.o funcphys.o - $(FC) $(INC) $(FFLAGS) -c meteorg.f -read_netcdf_p.o: read_netcdf_p.f - $(FC) $(INC) $(FFLAGS) -c read_netcdf_p.f -read_nemsio.o: read_nemsio.f - $(FC) $(INC) $(FFLAGS) -c read_nemsio.f -bfrhdr.o: bfrhdr.f - $(FC) $(FFLAGS) -c bfrhdr.f -newsig1.o: newsig1.f - $(FC) $(FFLAGS) -c newsig1.f -terp3.o: terp3.f - $(FC) $(FFLAGS) -c terp3.f -bfrize.o: bfrize.f - $(FC) $(FFLAGS) -c bfrize.f -vintg.o: vintg.f - $(FC) $(FFLAGS) -c vintg.f -buff.o: buff.f - $(FC) $(FFLAGS) -c buff.f -rsearch.o: rsearch.f - $(FC) $(FFLAGS) -c rsearch.f -svp.o: svp.f - $(FC) $(FFLAGS) -c svp.f -calpreciptype.o: calpreciptype.f physcons.o funcphys.o - $(FC) $(FFLAGS) -FR -c calpreciptype.f -lcl.o: lcl.f - $(FC) $(FFLAGS) -c lcl.f -mstadb.o: mstadb.f - $(FC) $(FFLAGS) -c mstadb.f -tdew.o: tdew.f - $(FC) $(FFLAGS) -c tdew.f - -clean: - /bin/rm -f $(OBJS) *.mod gfs_bufr diff --git a/sorc/gfs_bufr.fd/meteorg.f b/sorc/gfs_bufr.fd/meteorg.f deleted file mode 100755 index 82a736b507..0000000000 --- a/sorc/gfs_bufr.fd/meteorg.f +++ /dev/null @@ -1,1275 +0,0 @@ - subroutine meteorg(npoint,rlat,rlon,istat,cstat,elevstn, - & nf,nfile,fnsig,jdate,idate, - & levs,im,jm,kdim, - & landwater,nend1,nint1,nint3,iidum,jjdum, - & fformat,iocomms,iope,ionproc) - -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! . . . . -! SUBPROGRAM: meteorg -! PRGMMR: HUALU PAN ORG: W/NMC23 DATE: 1999-07-21 -! -! ABSTRACT: Creates BUFR meteogram files for the AVN and MRF. -! -! PROGRAM HISTORY LOG: -! 1999-07-21 HUALU PAN -! 2007-02-02 FANGLIN YANG EXPAND FOR HYBRID COORDINATES USING SIGIO -! 2009-07-24 FANGLIN YANG CHANGE OUTPUT PRESSURE TO INTEGER-LAYER -! PRESSURE (line 290) -! CORRECT THE TEMPERATURE ADJUSTMENT (line 238) -! 2014-03-27 DANA CARLIS UNIFY CODE WITH GFS FORECAST MODEL PRECIP -! TYPE CALCULATION -! 2016-09-27 HUIYA CHUANG MODIFY TO READ GFS NEMS OUTPUT ON GRID SPACE -! 2017-02-27 GUANG PING LOU CHANGE OUTPUT PRECIPITATION TO HOURLY AMOUNT -! TO 120 HOURS AND 3 HOURLY TO 180 HOURS. -! 2018-02-01 GUANG PING LOU INGEST FV3GFS NEMSIO ACCUMULATED PRECIPITATION -! AND RECALCULATE HOURLY AND 3 HOURLY OUTPUT DEPENDING -! ON LOGICAL VALUE OF precip_accu. -! 2018-02-08 GUANG PING LOU ADDED READING IN AND USING DZDT AS VERTICAL VELOCITY -! 2018-02-16 GUANG PING LOU ADDED READING IN AND USING MODEL DELP AND DELZ -! 2018-02-21 GUANG PING LOU THIS VERSION IS BACKWARD COMPATIBLE TO GFS MODEL -! 2018-03-27 GUANG PING LOU CHANGE STATION ELEVATION CORRECTION LAPSE RATE FROM 0.01 TO 0.0065 -! 2018-03-28 GUANG PING LOU GENERALIZE TIME INTERVAL -! 2019-07-08 GUANG PING LOU ADDED STATION CHARACTER IDS -! 2019-10-08 GUANG PING LOU MODIFY TO READ IN NetCDF FILES. RETAIN NEMSIO -! RELATED CALLS AND CLEAN UP THE CODE. -! 2020-04-24 GUANG PING LOU Clean up code and remove station height -! adjustment -! -! USAGE: CALL PROGRAM meteorg -! INPUT: -! npoint - number of points -! rlat(npint) - latitude -! rlon(npoint) - longtitude -! istat(npoint) - station id -! elevstn(npoint) - station elevation (m) -! nf - forecast cycle -! fnsig - sigma file name -! idate(4) - date -! levs - input vertical layers -! kdim - sfc file dimension -! -! OUTPUT: -! nfile - output data file channel -! jdate - date YYYYMMDDHH -! -! ATTRIBUTES: -! LANGUAGE: -! MACHINE: IBM SP -! -!$$$ - use netcdf - use nemsio_module - use sigio_module - use physcons - use mersenne_twister - use funcphys - implicit none - include 'mpif.h' - type(nemsio_gfile) :: gfile - type(nemsio_gfile) :: ffile - type(nemsio_gfile) :: ffile2 - integer :: nfile,npoint,levs,kdim - integer :: nfile1 - integer :: i,j,im,jm,kk,idum,jdum,idvc,idsl -! idsl Integer(sigio_intkind) semi-lagrangian id -! idvc Integer(sigio_intkind) vertical coordinate id -! (=1 for sigma, =2 for ec-hybrid, =3 for ncep hybrid) - integer,parameter :: nvcoord=2 - integer :: idate(4),nij,nflx,np,k,l,nf,nfhour,np1 - integer :: idate_nems(7) - integer :: iret,jdate,leveta,lm,lp1 - character*150 :: fnsig,fngrib - real*8 :: data(6*levs+25) - real*8 :: rstat1 - character*8 :: cstat1 - character*4 :: cstat(npoint) - real :: fhour,pp,ppn,qs,qsn,esn,es,psfc,ppi,dtemp,nd - real :: t,q,u,v,td,tlcl,plcl,qw,tw,xlat,xlon - integer,dimension(npoint):: landwater - integer,dimension(im,jm):: lwmask - real,dimension(im,jm):: apcp, cpcp - real,dimension(npoint,2+levs*3):: grids - real,dimension(npoint) :: rlat,rlon,pmsl,ps,psn,elevstn - real,dimension(im*jm) :: dum1d,dum1d2 - real,dimension(im,jm) :: gdlat, hgt, gdlon - real,dimension(im,jm,15) :: dum2d - real,dimension(im,jm,levs) :: t3d, q3d, uh, vh,omega3d - real,dimension(im,jm,levs) :: delpz - real,dimension(im,jm,levs+1) :: pint, zint - real,dimension(npoint,levs) :: gridu,gridv,omega,qnew,zp - real,dimension(npoint,levs) :: p1,pd3,ttnew - real,dimension(npoint,levs) :: z1 - real,dimension(npoint,levs+1) :: pi3 - real :: zp2(2) - real,dimension(kdim,npoint) :: sfc - real,dimension(1,levs+1) :: prsi,phii - real,dimension(1,levs) :: gt0,gq0,prsl,phy_f3d - real :: PREC,TSKIN,SR,randomno(1,2) - real :: DOMR,DOMZR,DOMIP,DOMS - real :: vcoord(levs+1,nvcoord),vdummy(levs+1) - real :: vcoordnems(levs+1,3,2) - real :: rdum - integer :: n3dfercld,iseedl - integer :: istat(npoint) - logical :: trace - logical, parameter :: debugprint=.true. -!! logical, parameter :: debugprint=.false. - character lprecip_accu*3 - real, parameter :: ERAD=6.371E6 - real, parameter :: DTR=3.1415926/180. - real :: ap - integer :: nf1, fint - integer :: nend1, nint1, nint3 - character*150 :: fngrib2 - integer recn_dpres,recn_delz,recn_dzdt - integer :: jrec - equivalence (cstat1,rstat1) - integer iidum(npoint),jjdum(npoint) - integer :: error, ncid, ncid2, id_var,dimid - character(len=100) :: long_name - character(len=6) :: fformat - integer,dimension(8) :: clocking - character(10) :: date - character(12) :: time - character(7) :: zone - character(3) :: Zreverse - character(20) :: VarName,LayName - integer iocomms,iope,ionproc - - nij = 12 - nflx = 6 * levs - recn_dpres = 0 - recn_delz = 0 - recn_dzdt = 0 - jrec = 0 - lprecip_accu='yes' - - idvc=2 - idsl=1 -!read in NetCDF file header info - print*,"fformat= ", fformat -! print*,'meteorg.f, idum,jdum= ' -! do np = 1, npoint -! print*, iidum(np), jjdum(np) -! enddo - - if(fformat .eq. "netcdf") then - print*,'iocomms inside meteorg.f=', iocomms - error=nf90_open(trim(fnsig),ior(nf90_nowrite,nf90_mpiio), - & ncid,comm=iocomms, info = mpi_info_null) - error=nf90_get_att(ncid,nf90_global,"ak",vdummy) - do k = 1, levs+1 - vcoord(k,1)=vdummy(levs-k+1) - enddo - error=nf90_get_att(ncid,nf90_global,"bk",vdummy) - do k = 1, levs+1 - vcoord(k,2)=vdummy(levs-k+1) - enddo - error=nf90_inq_varid(ncid, "time", id_var) - error=nf90_get_var(ncid, id_var, nfhour) - print*, "nfhour:",nfhour - error=nf90_get_att(ncid,id_var,"units",long_name) -!! print*,'time units',' -- ',trim(long_name) - read(long_name(13:16),"(i4)")idate(4) - read(long_name(18:19),"(i2)")idate(2) - read(long_name(21:22),"(i2)")idate(3) - read(long_name(24:25),"(i2)")idate(1) - fhour=float(nfhour) - print*,'date= ', idate - jdate = idate(4)*1000000 + idate(2)*10000+ - & idate(3)*100 + idate(1) - print *, 'jdate = ', jdate - error=nf90_inq_varid(ncid, "lon", id_var) - error=nf90_get_var(ncid, id_var, gdlon) - error=nf90_inq_varid(ncid, "lat", id_var) - error=nf90_get_var(ncid, id_var, gdlat) -!!end read NetCDF hearder info, read nemsio below if necessary - else - - call nemsio_open(gfile,trim(fnsig),'read',iret=iret) - call nemsio_getfilehead(gfile,iret=iret - + ,idate=idate_nems(1:7),nfhour=nfhour - + ,idvc=idvc,idsl=idsl,lat=dum1d,lon=dum1d2 - + ,vcoord=vcoordnems) - - do k=1,levs+1 - vcoord(k,1)=vcoordnems(k,1,1) - vcoord(k,2)=vcoordnems(k,2,1) - end do - idate(1)=idate_nems(4) - idate(2)=idate_nems(2) - idate(3)=idate_nems(3) - idate(4)=idate_nems(1) - fhour=float(nfhour) - print *, ' processing forecast hour ', fhour - print *, ' idate =', idate - jdate = idate(4)*1000000 + idate(2)*10000+ - & idate(3)*100 + idate(1) - print *, 'jdate = ', jdate - print *, 'Total number of stations = ', npoint - ap = 0.0 - do j=1,jm - do i=1,im - gdlat(i,j)=dum1d((j-1)*im+i) - gdlon(i,j)=dum1d2((j-1)*im+i) - end do - end do - - endif !end read in nemsio hearder - - if(debugprint) then - do k=1,levs+1 - print*,'vcoord(k,1)= ', k, vcoord(k,1) - end do - do k=1,levs+1 - print*,'vcoord(k,2)= ', k, vcoord(k,2) - end do - print*,'sample lat= ',gdlat(im/5,jm/4) - + ,gdlat(im/5,jm/3),gdlat(im/5,jm/2) - print*,'sample lon= ',gdlon(im/5,jm/4) - + ,gdlon(im/5,jm/3),gdlon(im/5,jm/2) - endif -! topography - if (fformat == 'netcdf') then - VarName='hgtsfc' - Zreverse='yes' - call read_netcdf_p(ncid,im,jm,1,VarName,hgt,Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'surface hgt not found' - else - VarName='hgt' - LayName='sfc' - call read_nemsio(gfile,im,jm,1,VarName,LayName,hgt, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'surface hgt not found' - endif - if(debugprint)print*,'sample sfc h= ',hgt(im/5,jm/4) - + ,hgt(im/5,jm/3),hgt(im/5,jm/2) - -! surface pressure (Pa) - if (fformat == 'netcdf') then - VarName='pressfc' - Zreverse='yes' - call read_netcdf_p(ncid,im,jm,1,VarName,pint(:,:,1), - & Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'surface pressure not found' - else - VarName='pres' - LayName='sfc' - call read_nemsio(gfile,im,jm,1,VarName, - & LayName,pint(:,:,1),error) - if (error /= 0) print*,'surface pressure not found' - endif - if(debugprint)print*,'sample sfc P= ',pint(im/2,jm/4,1), - + pint(im/2,jm/3,1),pint(im/2,jm/2,1) - -! temperature using NetCDF - if (fformat == 'netcdf') then - VarName='tmp' - Zreverse='yes' - call read_netcdf_p(ncid,im,jm,levs,VarName,t3d,Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'temp not found' - else - VarName='tmp' - LayName='mid layer' - call read_nemsio(gfile,im,jm,levs,VarName,LayName,t3d,error) - if (error /= 0) print*,'temp not found' - endif - if(debugprint) then - print*,'sample T at lev=1 to levs ' - do k = 1, levs - print*,k, t3d(im/2,jm/3,k) - enddo - endif -! specific humidity - if (fformat == 'netcdf') then - VarName='spfh' - Zreverse='yes' - call read_netcdf_p(ncid,im,jm,levs,VarName,q3d,Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'spfh not found' - else - VarName='spfh' - LayName='mid layer' - call read_nemsio(gfile,im,jm,levs,VarName,LayName,q3d,error) - if (error /= 0) print*,'spfh not found' - endif - if(debugprint) then - print*,'sample Q at lev=1 to levs ' - do k = 1, levs - print*,k, q3d(im/2,jm/3,k) - enddo - endif -! U wind - if (fformat == 'netcdf') then - VarName='ugrd' - Zreverse='yes' - call read_netcdf_p(ncid,im,jm,levs,VarName,uh,Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'ugrd not found' - else - VarName='ugrd' - LayName='mid layer' - call read_nemsio(gfile,im,jm,levs,VarName,LayName,uh,error) - if (error /= 0) print*,'ugrd not found' - endif - if(debugprint) then - print*,'sample U at lev=1 to levs ' - do k = 1, levs - print*,k, uh(im/2,jm/3,k) - enddo - endif -! V wind - if (fformat == 'netcdf') then - VarName='vgrd' - Zreverse='yes' - call read_netcdf_p(ncid,im,jm,levs,VarName,vh,Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'vgrd not found' - else - VarName='vgrd' - LayName='mid layer' - call read_nemsio(gfile,im,jm,levs,VarName,LayName,vh,error) - if (error /= 0) print*,'vgrd not found' - endif - if(debugprint) then - print*,'sample V at lev=1 to levs ' - do k = 1, levs - print*,k, vh(im/2,jm/3,k) - enddo - endif -! dzdt !added by Guang Ping Lou for FV3GFS - if (fformat == 'netcdf') then - VarName='dzdt' - Zreverse='yes' - call read_netcdf_p(ncid,im,jm,levs,VarName,omega3d,Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'dzdt not found' - else - VarName='dzdt' - LayName='mid layer' - call read_nemsio(gfile,im,jm,levs,VarName,LayName, - & omega3d,error) - if (error /= 0) print*,'dzdt not found' - endif - if(debugprint) then - print*,'sample dzdt at lev=1 to levs ' - do k = 1, levs - print*,k, omega3d(im/2,jm/3,k) - enddo - endif -! dpres !added by Guang Ping Lou for FV3GFS (interface pressure delta) - if (fformat == 'netcdf') then - VarName='dpres' - Zreverse='no' - call read_netcdf_p(ncid,im,jm,levs,VarName,delpz,Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'dpres not found' - else - VarName='dpres' - LayName='mid layer' - call read_nemsio(gfile,im,jm,levs,VarName,LayName, - & delpz,error) - if (error /= 0) print*,'dpres not found' - endif - if(debugprint) then - print*,'sample delp at lev=1 to levs ' - do k = 1, levs - print*,k, delpz(im/2,jm/3,k) - enddo - endif -! compute interface pressure - if(recn_dpres == -9999) then - do k=2,levs+1 - do j=1,jm - do i=1,im - pint(i,j,k)=vcoord(k,1) - + +vcoord(k,2)*pint(i,j,1) - end do - end do - end do - else -! compute pint using dpres from top down if DZDT is used - if (fformat == 'netcdf') then - do j=1,jm - do i=1,im - pint(i,j,levs+1) = delpz(i,j,1) - end do - end do - do k=levs,2,-1 - kk=levs-k+2 - do j=1,jm - do i=1,im - pint(i,j,k) = pint(i,j,k+1) + delpz(i,j,kk) - end do - end do - end do - else - do k=2,levs+1 - do j=1,jm - do i=1,im - pint(i,j,k) = pint(i,j,k-1) - delpz(i,j,k-1) - end do - end do - end do - endif - if(debugprint) then - print*,'sample interface pressure pint at lev =1 to levs ' - do k = 1, levs+1 - print*,k, pint(im/2,jm/3,k),pint(im/3,jm/8,k) - enddo - endif - endif -! delz !added by Guang Ping Lou for FV3GFS ("height thickness" with unit "meters" bottom up) - if (fformat == 'netcdf') then - VarName='delz' - Zreverse='no' - call read_netcdf_p(ncid,im,jm,levs,VarName,delpz,Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'delz not found' - else - VarName='delz' - LayName='mid layer' - call read_nemsio(gfile,im,jm,levs,VarName,LayName,delpz,error) - if (error /= 0) print*,'delz not found' - endif - if(debugprint) then - print*,'sample delz at lev=1 to levs ' - do k = 1, levs - print*,k, delpz(im/2,jm/3,k) - enddo - endif - -! compute interface height (meter) - if(recn_delz == -9999) then - print*, 'using calculated height' - else -! compute zint using delz from bot up if DZDT is used - if (fformat == 'netcdf') then - do j=1,jm - do i=1,im - zint(i,j,1) = 0.0 - end do - end do - do k=2,levs+1 - kk=levs-k+1 - do j=1,jm - do i=1,im - zint(i,j,k) = zint(i,j,k-1) - delpz(i,j,kk) - end do - end do - end do - else - do k=2,levs+1 - do j=1,jm - do i=1,im - zint(i,j,k) = zint(i,j,k-1) + delpz(i,j,k-1) - end do - end do - end do - endif - if(debugprint) then - print*,'sample interface height zint at lev =1 to levs ' - do k = 1, levs+1 - print*,k, zint(im/2,jm/3,k),zint(im/3,jm/8,k) - enddo - endif - endif - -! close up this NetCDF file - error=nf90_close(ncid) - -! Now open up NetCDF surface files - if ( nf .le. nend1 ) then - nf1 = nf - nint1 - else - nf1 = nf - nint3 - endif - if ( nf == 0 ) nf1=0 - if(nf==0) then - fngrib='flxf00' - elseif(nf.lt.10) then - fngrib='flxf0' - write(fngrib(6:6),'(i1)') nf - elseif(nf.lt.100) then - fngrib='flxf' - write(fngrib(5:6),'(i2)') nf - else - fngrib='flxf' - write(fngrib(5:7),'(i3)') nf - endif - if(nf1==0) then - fngrib2='flxf00' - elseif(nf1.lt.10) then - fngrib2='flxf0' - write(fngrib2(6:6),'(i1)') nf1 - elseif(nf1.lt.100) then - fngrib2='flxf' - write(fngrib2(5:6),'(i2)') nf1 - else - fngrib2='flxf' - write(fngrib2(5:7),'(i3)') nf1 - endif - if (fformat == 'netcdf') then - error=nf90_open(trim(fngrib),nf90_nowrite,ncid) -!open T-nint below - error=nf90_open(trim(fngrib2),nf90_nowrite,ncid2) - if(error /= 0)print*,'file not open',trim(fngrib), trim(fngrib2) - else - call nemsio_open(ffile,trim(fngrib),'read',iret=error) - call nemsio_open(ffile2,trim(fngrib2),'read',iret=error) - if(error /= 0)print*,'file not open',trim(fngrib), trim(fngrib2) - endif -! land water mask - if (fformat == 'netcdf') then - VarName='land' - Zreverse='no' - call read_netcdf_p(ncid,im,jm,1,VarName,lwmask,Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'lwmask not found' - else - VarName='land' - LayName='sfc' - call read_nemsio(ffile,im,jm,1,VarName,LayName,lwmask,error) - if (error /= 0) print*,'lwmask not found' - endif - if(debugprint) - + print*,'sample land mask= ',lwmask(im/2,jm/4), - + lwmask(im/2,jm/3) - -! surface T - if (fformat == 'netcdf') then - VarName='tmpsfc' - Zreverse='no' - call read_netcdf_p(ncid,im,jm,1,VarName,dum2d(:,:,1), - & Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'tmpsfc not found' - else - VarName='tmp' - LayName='sfc' - call read_nemsio(ffile,im,jm,1,VarName,LayName, - & dum2d(:,:,1),error) - if (error /= 0) print*,'tmpsfc not found' - endif - if(debugprint) - + print*,'sample sfc T= ',dum2d(im/2,jm/4,1),dum2d(im/2,jm/3,1), - + dum2d(im/2,jm/2,1) -! 2m T - if (fformat == 'netcdf') then - VarName='tmp2m' - Zreverse='no' - call read_netcdf_p(ncid,im,jm,1,VarName,dum2d(:,:,2), - & Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'tmp2m not found' - else - VarName='tmp' - LayName='2 m above gnd' - call read_nemsio(ffile,im,jm,1,VarName,LayName, - + dum2d(:,:,2),error) - if (error /= 0) print*,'tmp2m not found' - endif - if(debugprint) - + print*,'sample 2m T= ',dum2d(im/2,jm/4,2),dum2d(im/2,jm/3,2), - + dum2d(im/2,jm/2,2) - -! 2m Q - if (fformat == 'netcdf') then - VarName='spfh2m' - Zreverse='no' - call read_netcdf_p(ncid,im,jm,1,VarName,dum2d(:,:,3), - & Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'spfh2m not found' - else - VarName='spfh' - LayName='2 m above gnd' - call read_nemsio(ffile,im,jm,1,VarName,LayName, - + dum2d(:,:,3),error) - if (error /= 0) print*,'spfh2m not found' - endif - if(debugprint) - + print*,'sample 2m Q= ',dum2d(im/2,jm/4,3),dum2d(im/2,jm/3,3), - + dum2d(im/2,jm/2,3) - -! U10 - if (fformat == 'netcdf') then - VarName='ugrd10m' - Zreverse='no' - call read_netcdf_p(ncid,im,jm,1,VarName,dum2d(:,:,4), - & Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'ugrd10m not found' - else - VarName='ugrd' - LayName='10 m above gnd' - call read_nemsio(ffile,im,jm,1,VarName,LayName, - + dum2d(:,:,4),error) - if (error /= 0) print*,'ugrd10m not found' - endif - -! V10 - if (fformat == 'netcdf') then - VarName='vgrd10m' - Zreverse='no' - call read_netcdf_p(ncid,im,jm,1,VarName,dum2d(:,:,5), - & Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'vgrd10m not found' - else - VarName='vgrd' - LayName='10 m above gnd' - call read_nemsio(ffile,im,jm,1,VarName,LayName, - + dum2d(:,:,5),error) - if (error /= 0) print*,'vgrd10m not found' - endif - -! soil T - if (fformat == 'netcdf') then - VarName='soilt1' - Zreverse='no' - call read_netcdf_p(ncid,im,jm,1,VarName,dum2d(:,:,6), - & Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'soilt1 not found' - else - VarName='tmp' - LayName='0-10 cm down' - call read_nemsio(ffile,im,jm,1,VarName,LayName, - + dum2d(:,:,6),error) - if (error /= 0) print*,'soil T not found' - endif - if(debugprint) - + print*,'sample soil T= ',dum2d(im/2,jm/4,6),dum2d(im/2,jm/3,6), - + dum2d(im/2,jm/2,6) - -! snow depth - if (fformat == 'netcdf') then - VarName='snod' - Zreverse='no' - call read_netcdf_p(ncid,im,jm,1,VarName,dum2d(:,:,7), - & Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'snod not found' - else - VarName='snod' - LayName='sfc' - call read_nemsio(ffile,im,jm,1,VarName,LayName, - + dum2d(:,:,7),error) - if (error /= 0) print*,'snod not found' - endif - -! evaporation -!instantaneous surface latent heat net flux - if (fformat == 'netcdf') then - VarName='lhtfl' - Zreverse='no' - call read_netcdf_p(ncid,im,jm,1,VarName,dum2d(:,:,8), - & Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'lhtfl not found' - else - VarName='lhtfl' - LayName='sfc' - call read_nemsio(ffile,im,jm,1,VarName,LayName, - + dum2d(:,:,8),error) - if (error /= 0) print*,'lhtfl not found' - endif - if(debugprint) - + print*,'evaporation latent heat net flux= ', - + dum2d(im/2,jm/4,8),dum2d(im/2,jm/3,8) - if(debugprint) - + print*,'evaporation latent heat net flux stn 000692)= ', - + dum2d(2239,441,8) - -! total precip - if ( nf .le. nend1 ) then - fint = nint1 - else - fint = nint3 - endif -! for accumulated precipitation: - if (fformat == 'netcdf') then - VarName='prate_ave' - Zreverse='no' -!! call read_netcdf_p(ncid,im,jm,1,VarName,apcp,Zreverse,error) !current hour - call read_netcdf_p(ncid,im,jm,1,VarName,apcp,Zreverse, - & iope,ionproc,iocomms,error) -!! call read_netcdf_p(ncid2,im,jm,1,VarName,cpcp,Zreverse,error) !earlier hour - call read_netcdf_p(ncid2,im,jm,1,VarName,cpcp,Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'prate_ave not found' - else - VarName='prate_ave' - LayName='sfc' - call read_nemsio(ffile,im,jm,1,VarName,LayName, - + apcp,error) - call read_nemsio(ffile2,im,jm,1,VarName,LayName, - + cpcp,error) - if (error /= 0) print*,'prate_ave2 not found' - endif - if(debugprint) - & print*,'sample fhour ,3= ', fhour, - & '1sample precip rate= ',apcp(im/2,jm/3),cpcp(im/2,jm/3) - ap=fhour-fint - do j=1,jm - do i=1,im - dum2d(i,j,9) =(apcp(i,j)*fhour-cpcp(i,j)*ap)*3600.0 - end do - end do - - if(debugprint) - & print*,'sample fhour ,5= ', fhour, - & 'sample total precip= ',dum2d(im/2,jm/4,9), - + dum2d(im/2,jm/3,9),dum2d(im/2,jm/2,9) - -! convective precip - if (fformat == 'netcdf') then - VarName='cprat_ave' - Zreverse='no' - call read_netcdf_p(ncid,im,jm,1,VarName,apcp,Zreverse, - & iope,ionproc,iocomms,error) - call read_netcdf_p(ncid2,im,jm,1,VarName,cpcp,Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'cprat_ave not found' - else - VarName='cprat_ave' - LayName='sfc' - call read_nemsio(ffile,im,jm,1,VarName,LayName, - + apcp,error) - call read_nemsio(ffile2,im,jm,1,VarName,LayName, - + cpcp,error) - if (error /= 0) print*,'cprat_ave2 not found' - endif - ap=fhour-fint - do j=1,jm - do i=1,im - dum2d(i,j,10)=(apcp(i,j)*fhour-cpcp(i,j)*ap)*3600.0 - & - end do - end do - -! water equi - if (fformat == 'netcdf') then - VarName='weasd' - Zreverse='no' - call read_netcdf_p(ncid,im,jm,1,VarName,dum2d(:,:,11), - & Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'weasd not found' - else - VarName='weasd' - LayName='sfc' - call read_nemsio(ffile,im,jm,1,VarName,LayName, - + dum2d(:,:,11),error) - if (error /= 0) print*,'weasd not found' - endif - -! low cloud fraction - if (fformat == 'netcdf') then - VarName='tcdc_avelcl' - Zreverse='no' - call read_netcdf_p(ncid,im,jm,1,VarName, - & dum2d(:,:,12),Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'tcdc_avelcl not found' - else - VarName='tcdc_ave' - LayName='low cld lay' - call read_nemsio(ffile,im,jm,1,VarName,LayName, - + dum2d(:,:,12),error) - if (error /= 0) print*,'low cld lay not found' - endif - -! mid cloud fraction - if (fformat == 'netcdf') then - VarName='tcdc_avemcl' - Zreverse='no' - call read_netcdf_p(ncid,im,jm,1,VarName, - & dum2d(:,:,13),Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'tcdc_avemcl not found' - else - VarName='tcdc_ave' - LayName='mid cld lay' - call read_nemsio(ffile,im,jm,1,VarName,LayName, - + dum2d(:,:,13),error) - if (error /= 0) print*,'mid cld lay not found' - endif - -! high cloud fraction - if (fformat == 'netcdf') then - VarName='tcdc_avehcl' - Zreverse='no' - call read_netcdf_p(ncid,im,jm,1,VarName, - & dum2d(:,:,14),Zreverse, - & iope,ionproc,iocomms,error) - if (error /= 0) print*,'tcdc_avehcl not found' - else - VarName='tcdc_ave' - LayName='high cld lay' - call read_nemsio(ffile,im,jm,1,VarName,LayName, - + dum2d(:,:,14),error) - if (error /= 0) print*,'high cld lay not found' - endif - - if(debugprint) - + print*,'sample high cloud frac= ',dum2d(im/2,jm/4,14), - + dum2d(im/2,jm/3,14),dum2d(im/2,jm/2,14) - - if (fformat == 'netcdf') then - error=nf90_close(ncid) - error=nf90_close(ncid2) - else - call nemsio_close(ffile,iret=error) - call nemsio_close(ffile2,iret=error) - endif - call date_and_time(date,time,zone,clocking) -! print *,'10reading surface data end= ', clocking - print *,'10date, time, zone',date, time, zone -! -! get the nearest neighbor i,j from the table -! - np1=0 -! - do np=1, npoint -! use read in predetermined i,j - if (np1==0) then - idum=iidum(np) - jdum=jjdum(np) - - else -! find nearest neighbor - rdum=rlon(np) - if(rdum<0.)rdum=rdum+360. - - do j=1,jm-1 - do i=1,im-1 - if((rdum>=gdlon(i,j) .and. rdum<=gdlon(i+1,j)) .and. - + (rlat(np)<=gdlat(i,j).and.rlat(np)>=gdlat(i,j+1)) ) then - if(landwater(np) == 2)then - idum=i - jdum=j - exit - else if(landwater(np) == lwmask(i,j))then - idum=i - jdum=j !1 - exit - else if(landwater(np) == lwmask(i+1,j))then - idum=i+1 - jdum=j ! 2 - exit - else if(landwater(np) == lwmask(i-1,j))then - idum=i-1 - jdum=j ! 3 - exit - else if(landwater(np) == lwmask(i,j+1))then - idum=i - jdum=j+1 ! 4 - exit - else if(landwater(np) == lwmask(i,j-1))then - idum=i - jdum=j-1 ! 5 - exit - else if(landwater(np) == lwmask(i+1,j-1))then - idum=i+1 - jdum=j-1 ! 6 - exit - else if(landwater(np) == lwmask(i+1,j+1))then - idum=i+1 - jdum=j+1 ! 7 - exit - else if(landwater(np) == lwmask(i-1,j+1))then - idum=i-1 - jdum=j+1 ! 8 - exit - else if(landwater(np) == lwmask(i-1,j-1))then - idum=i-1 - jdum=j-1 ! 9 - exit - else if(landwater(np) == lwmask(i,j+2))then - idum=i - jdum=j+2 ! 10 - exit - else if(landwater(np) == lwmask(i+2,j))then - idum=i+2 - jdum=j !11 - exit - else if(landwater(np) == lwmask(i,j-2))then - idum=i - jdum=j-2 ! 12 - exit - else if(landwater(np) == lwmask(i-2,j))then - idum=i-2 - jdum=j !13 - exit - else if(landwater(np) == lwmask(i-2,j+1))then - idum=i-2 - jdum=j+1 ! 14 - exit - else if(landwater(np) == lwmask(i-1,j+2))then - idum=i-1 - jdum=j+2 !15 - exit - else if(landwater(np) == lwmask(i+1,j+2))then - idum=i+1 - jdum=j+2 !16 - exit - else if(landwater(np) == lwmask(i+2,j+1))then - idum=i+2 - jdum=j+1 !17 - exit - else if(landwater(np) == lwmask(i+2,j-1))then - idum=i+2 - jdum=j-1 !18 - exit - else if(landwater(np) == lwmask(i+1,j-2))then - idum=i+1 - jdum=j-2 !19 - exit - else if(landwater(np) == lwmask(i-1,j-2))then - idum=i-1 - jdum=j-2 !20 - exit - else if(landwater(np) == lwmask(i-2,j-1))then - idum=i-2 - jdum=j-1 !21 - exit - else if(landwater(np) == lwmask(i-2,j-2))then - idum=i-2 - jdum=j-2 !22 - exit - else if(landwater(np) == lwmask(i+2,j-2))then - idum=i+2 - jdum=j-2 !23 - exit - else if(landwater(np) == lwmask(i+2,j+2))then - idum=i+2 - jdum=j+2 !24 - exit - else if(landwater(np) == lwmask(i-2,j+2))then - idum=i-2 - jdum=j+2 !25 - exit - else if(landwater(np) == lwmask(i+3,j))then - idum=i+3 - jdum=j !26 - exit - else if(landwater(np) == lwmask(i-3,j))then - idum=i-3 - jdum=j !27 - exit - else if(landwater(np) == lwmask(i,j+3))then - idum=i - jdum=j+3 !28 - exit - else if(landwater(np) == lwmask(i,j-3))then - idum=i - jdum=j-3 !29 - exit - else -CC print*,'no matching land sea mask np,landwater,i,j,mask= ' -CC print*, np,landwater(np),i,j,lwmask(i,j) -CC print*, ' So it takes i,j ' - idum=i - jdum=j - exit - end if - end if - end do - end do - - idum=max0(min0(idum,im),1) - jdum=max0(min0(jdum,jm),1) - endif !! read in i,j ends here - if (fhour==0.0) then - if(debugprint) then - write(nij,98) np,idum,jdum,rlat(np),rlon(np) - 98 FORMAT (3I6, 2F9.2) - if(elevstn(np)==-999.) elevstn(np)=hgt(idum,jdum) - write(9,99) np,rlat(np),rlon(np),elevstn(np),hgt(idum,jdum) - 99 FORMAT (I6, 4F9.2) - if(np==1 .or.np==100)print*,'nearest neighbor for station ',np - + ,idum,jdum,rlon(np),rlat(np),lwmask(i,j),landwater(np) - endif - endif - - grids(np,1)=hgt(idum,jdum) - grids(np,2)=pint(idum,jdum,1) - - sfc(5,np)=dum2d(idum,jdum,1) - sfc(6,np)=dum2d(idum,jdum,6) - sfc(17,np)=dum2d(idum,jdum,8) - sfc(12,np)=dum2d(idum,jdum,9) - sfc(11,np)=dum2d(idum,jdum,10) - sfc(10,np)=dum2d(idum,jdum,11) - sfc(27,np)=dum2d(idum,jdum,12) - sfc(26,np)=dum2d(idum,jdum,13) - sfc(25,np)=dum2d(idum,jdum,14) - sfc(34,np)=dum2d(idum,jdum,4) - sfc(35,np)=dum2d(idum,jdum,5) - sfc(30,np)=dum2d(idum,jdum,2) - sfc(31,np)=dum2d(idum,jdum,3) - -CC There may be cases where convective precip is greater than total precip -CC due to rounding and interpolation errors, correct it here -G.P. Lou: - if(sfc(11,np) .gt. sfc(12,np)) sfc(11,np)=sfc(12,np) - - do k=1,levs - grids(np,k+2)=t3d(idum,jdum,k) - grids(np,k+2+levs)=q3d(idum,jdum,k) - grids(np,k+2+2*levs)=omega3d(idum,jdum,k) - gridu(np,k)=uh(idum,jdum,k) - gridv(np,k)=vh(idum,jdum,k) - p1(np,k)=pint(idum,jdum,k+1) - z1(np,k)=zint(idum,jdum,k+1) -!! p1(np,k)=0.5*(pint(idum,jdum,k)+pint(idum,jdum,k+1)) -!! z1(np,k)=0.5*(zint(idum,jdum,k)+zint(idum,jdum,k+1)) - - end do - end do - - print*,'finish finding nearest neighbor for each station' - - do np = 1, npoint -! !ps in kPa - ps(np) = grids(np,2)/1000. !! surface pressure - enddo - -! -! ----------------- -! Put topo(1),surf press(2),vir temp(3:66),and specifi hum(67:130) in grids -! for each station -!! if(recn_dzdt == 0 ) then !!DZDT - do k = 1, levs - do np = 1, npoint - omega(np,k) = grids(np,2+levs*2+k) - enddo - enddo - if(debugprint) - + print*,'sample (omega) dzdt ', (omega(3,k),k=1,levs) -! -! move surface pressure to the station surface from the model surface -! - do np = 1, npoint -! -! when the station elevation information in the table says missing, -! use the model elevation -! -! print *, "elevstn = ", elevstn(np) - if(elevstn(np)==-999.) elevstn(np) = grids(np,1) - psn(np) = ps(np) - call sigio_modpr(1,1,levs,nvcoord,idvc, - & idsl,vcoord,iret, - & ps=psn(np)*1000,pd=pd3(np,1:levs)) - grids(np,2) = log(psn(np)) - if(np==11)print*,'station H,grud H,psn,ps,new pm', - & elevstn(np),grids(np,1),psn(np),ps(np) - if(np==11)print*,'pd3= ', pd3(np,1:levs) - enddo -! -!! test removing height adjustments - print*, 'do not do height adjustments' -! -! get sea-level pressure (Pa) and layer geopotential height -! - do k = 1, levs - do np = 1, npoint - ttnew(np,k) = grids(np,k+2) - qnew(np,k) = grids(np,k+levs+2) - enddo - enddo - - do np=1,npoint -!! call gslp(levs,elevstn(np),ps(np)*1000, - call gslp(levs,grids(np,1),ps(np)*1000, - & p1(np,1:levs),ttnew(np,1:levs),qnew(np,1:levs), - & pmsl(np),zp(np,1:levs),zp2(1:2)) - enddo - print *, 'call gslp pmsl= ', (pmsl(np),np=1,20) - if(recn_delz == -9999) then - print*, 'using calculated height ' - else - print*, 'using model height m' - do k = 1, levs - do np=1, npoint - zp(np,k) = z1(np,k) - enddo - enddo - endif - print*,'finish computing MSLP' - print*,'finish computing zp ', (zp(11,k),k=1,levs) - print*,'finish computing zp2(11-12) ', zp2(11),zp2(12) -! -! prepare buffer data -! - do np = 1, npoint - pi3(np,1)=psn(np)*1000 - do k=1,levs - pi3(np,k+1)=pi3(np,k)-pd3(np,k) !layer pressure (Pa) - enddo -!! ==ivalence (cstat1,rstat1) - cstat1=cstat(np) - data(1) = ifix(fhour+.2) * 3600 ! FORECAST TIME (SEC) - data(2) = istat(np) ! STATION NUMBER - data(3) = rstat1 ! STATION CHARACTER ID - data(4) = rlat(np) ! LATITUDE (DEG N) - data(5) = rlon(np) ! LONGITUDE (DEG E) - data(6) = elevstn(np) ! STATION ELEVATION (M) - psfc = 10. * psn(np) ! convert to MB - leveta = 1 - do k = 1, levs -! -! look for the layer above 500 mb for precip type computation -! - if(pi3(np,k).ge.50000.) leveta = k - ppi = pi3(np,k) - t = grids(np,k+2) - q = max(1.e-8,grids(np,2+k+levs)) - u = gridu(np,k) - v = gridv(np,k) - data((k-1)*6+7) = p1(np,k) ! PRESSURE (PA) at integer layer - data((k-1)*6+8) = t ! TEMPERATURE (K) - data((k-1)*6+9) = u ! U WIND (M/S) - data((k-1)*6+10) = v ! V WIND (M/S) - data((k-1)*6+11) = q ! HUMIDITY (KG/KG) - data((k-1)*6+12) = omega(np,k)*100. ! Omega (pa/sec) !changed to dzdt(cm/s) if available - enddo -! -! process surface flux file fields -! - data(8+nflx) = psfc * 100. ! SURFACE PRESSURE (PA) - data(7+nflx) = pmsl(np) -!! dtemp = .0065 * (grids(np,1) - elevstn(np)) -!! dtemp = .0100 * (grids(np,1) - elevstn(np)) -!! sfc(37,np) = data(6+nflx) * .01 - sfc(37,np) = data(7+nflx) * .01 - sfc(39,np) = zp2(2) !500 hPa height -! -! do height correction if there is no snow or if the temp is less than 0 -! G.P.LOU: -! It was decided that no corrctions were needed due to higher model -! resolution. -! -! if(sfc(10,np)==0.) then -! sfc(30,np) = sfc(30,np) + dtemp -! sfc(5,np) = sfc(5,np) + dtemp -! endif -! if(sfc(10,np).gt.0..and.sfc(5,np).lt.273.16) then -! sfc(5,np) = sfc(5,np) + dtemp -! if(sfc(5,np).gt.273.16) then -! dtemp = sfc(5,np) - 273.16 -! sfc(5,np) = 273.16 -! endif -! sfc(30,np) = sfc(30,np) + dtemp -! endif -! -!G.P. Lou 20200501: -!convert instantaneous surface latent heat net flux to surface -!evapolation 1 W m-2 = 0.0864 MJ m-2 day-1 -! and 1 mm day-1 = 2.45 MJ m-2 day-1 -! equivament to 0.0864/2.54 = 0.035265 -! equivament to 2.54/0.0864 = 28.3565 - if(debugprint) - + print*,'evaporation (stn 000692)= ',sfc(17,np) - data(9+nflx) = sfc(5,np) ! tsfc (K) - data(10+nflx) = sfc(6,np) ! 10cm soil temp (K) -!! data(11+nflx) = sfc(17,np)/28.3565 ! evaporation (kg/m**2) from (W m-2) - data(11+nflx) = sfc(17,np)*0.035265 ! evaporation (kg/m**2) from (W m-2) - data(12+nflx) = sfc(12,np) ! total precip (m) - data(13+nflx) = sfc(11,np) ! convective precip (m) - data(14+nflx) = sfc(10,np) ! water equi. snow (m) - data(15+nflx) = sfc(27,np) ! low cloud (%) - data(16+nflx) = sfc(26,np) ! mid cloud - data(17+nflx) = sfc(25,np) ! high cloud - data(18+nflx) = sfc(34,np) ! U10 (m/s) - data(19+nflx) = sfc(35,np) ! V10 (m/s) - data(20+nflx) = sfc(30,np) ! T2 (K) - data(21+nflx) = sfc(31,np) ! Q2 (K) - - data(22+nflx) = 0. - data(23+nflx) = 0. - data(24+nflx) = 0. - data(25+nflx) = 0. - nd = 0 - trace = .false. - DOMS=0. - DOMR=0. - DOMIP=0. - DOMZR=0. - if(np==1.or.np==2) nd = 1 - if(np==1.or.np==2) trace = .true. - - if(sfc(12,np).gt.0.) then !check for precip then calc precip type - do k = 1, leveta+1 - pp = p1(np,k) - ppi = pi3(np,k) - t = grids(np,k+2) - q = max(0.,grids(np,2+k+levs)) - u = gridu(np,k) - v = gridv(np,k) - if(q.gt.1.e-6.and.pp.ge.20000.) then - call tdew(td,t,q,pp) - call lcl(tlcl,plcl,t,pp,q) - call mstadb(qw,tw,pp,q,tlcl,plcl) - else - td = t - 30. - tw = t - 30. - endif -! Calpreciptype input variables - gt0(1,k)= t - gq0(1,k) = q - prsl(1,k) = pp - prsi(1,k)=ppi - phii(1,k)=zp(np,k) !height in meters - enddo -! Use GFS routine calpreciptype.f to calculate precip type - xlat=rlat(np) - xlon=rlon(np) - lm=leveta - lp1=leveta+1 - PREC=data(12+nflx) - n3dfercld=1 !if =3 then use Ferriers Explicit Precip Type - TSKIN=1. !used in Ferriers Explicit Precip Scheme - SR=1. !used in Ferriers Explicit Precip Scheme - iseedl=jdate - call random_setseed(iseedl) - call random_number(randomno) - call calpreciptype(1,1,1,1,lm,lp1,randomno,xlat,xlon, !input - & gt0,gq0,prsl,prsi,PREC,phii,n3dfercld,TSKIN,SR,phy_f3d, !input - & DOMR,DOMZR,DOMIP,DOMS) ! Output vars - endif - data(nflx + 22) = DOMS - data(nflx + 23) = DOMIP - data(nflx + 24) = DOMZR - data(nflx + 25) = DOMR - if(np==1.or.np==100) then - print *, ' surface fields for hour', nf, 'np =', np - print *, (data(l+nflx),l=1,25) - print *, ' temperature sounding' - print 6101, (data((k-1)*6+8),k=1,levs) - print *, ' omega sounding' - print *, (data((k-1)*6+12),k=1,levs) - endif -C print *, 'in meteorg nfile1= ', nfile1 - write(nfile) data - enddo !End loop over stations np - call date_and_time(date,time,zone,clocking) -! print *,'13reading write data end= ', clocking - print *,'13date, time, zone',date, time, zone - print *, 'in meteorg nf,nfile,nfhour= ', nf,nfile,nfhour - print *, 'Finished writing bufr data file' - 6101 format(2x,6f12.3) - 6102 format(2x,6f12.5) - 6103 format(2x,6f12.5) -! - close(unit=nfile) - return - 910 print *, ' error reading surface flux file' - end - -!----------------------------------------------------------------------- diff --git a/sorc/gfs_bufr.fd/modstuff1.f b/sorc/gfs_bufr.fd/modstuff1.f deleted file mode 100755 index 95d4138334..0000000000 --- a/sorc/gfs_bufr.fd/modstuff1.f +++ /dev/null @@ -1,75 +0,0 @@ - subroutine modstuff(km,idvc,idsl,nvcoord,vcoord,ps,psx,psy,d,u,v,& - pd,pm,om) -! pd,pi,pm,aps,apm,os,om,px,py) -!$$$ Subprogram documentation block -! -! Subprogram: modstuff Compute model coordinate dependent functions -! Prgmmr: Iredell Org: np23 Date: 1999-10-18 -! -! Abstract: This subprogram computes fields which depend on the model coordinate -! such as pressure thickness and vertical velocity. -! -! Program history log: -! 1999-10-18 Mark Iredell -! -! Usage: call modstuff(km,idvc,idsl,nvcoord,vcoord,ps,psx,psy,d,u,v,& -! pd,pi,pm,aps,apm,os,om,px,py) -! Input argument list: -! km integer number of levels -! idvc integer vertical coordinate id (1 for sigma and 2 for hybrid) -! idsl integer type of sigma structure (1 for phillips or 2 for mean) -! nvcoord integer number of vertical coordinates -! vcoord real (km+1,nvcoord) vertical coordinates -! ps real surface pressure (Pa) -! psx real log surface pressure x-gradient (1/m) -! psy real log surface pressure y-gradient (1/m) -! d real (km) wind divergence (1/s) -! u real (km) x-component wind (m/s) -! v real (km) y-component wind (m/s) -! Output argument list: -! pd real (km) pressure thickness (Pa) -! pi real (km+1) interface pressure (Pa) -! pm real (km) mid-layer pressure (Pa) -! aps real log surface pressure () -! apm real (km+1) log mid-layer pressure () -! os real (km) surface pressure tendency (Pa/s) -! om real (km) vertical velocity (Pa/s) -! px real (km) mid-layer pressure x-gradient (Pa/m) -! py real (km) mid-layer pressure y-gradient (Pa/m) -! -! Attributes: -! Language: Fortran 90 -! -!$$$ - use sigio_module - implicit none - integer,intent(in):: km,idvc,idsl,nvcoord - real,intent(in):: vcoord(km+1,nvcoord) - real,intent(in):: ps,psx,psy - real,intent(in):: u(km),v(km),d(km) - real,intent(out) :: pd(km),pm(km),om(km) - real aps,apm(km),os,pi(km+1),px(km),py(km) - real dpmdps(km),dpddps(km),dpidps(km+1),vgradp - integer k,iret -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - call sigio_modpr(1,1,km,nvcoord,idvc,idsl,vcoord,iret,& - ps=(/ps/),& - pm=pm,pd=pd,dpmdps=dpmdps,dpddps=dpddps) - pi(1)=ps - dpidps(1)=1. - do k=1,km - pi(k+1)=pi(k)-pd(k) - dpidps(k+1)=dpidps(k)-dpddps(k) - enddo - aps=log(ps) - apm=log(pm) - os=0 - do k=km,1,-1 - vgradp=u(k)*psx+v(k)*psy - os=os-vgradp*ps*(dpmdps(k)-dpidps(k+1))-d(k)*(pm(k)-pi(k+1)) - om(k)=vgradp*ps*dpmdps(k)+os - os=os-vgradp*ps*(dpidps(k)-dpmdps(k))-d(k)*(pi(k)-pm(k)) - enddo - px=ps*dpmdps*psx - py=ps*dpmdps*psy - end subroutine diff --git a/sorc/gfs_bufr.fd/mstadb.f b/sorc/gfs_bufr.fd/mstadb.f deleted file mode 100755 index e9b01e09c6..0000000000 --- a/sorc/gfs_bufr.fd/mstadb.f +++ /dev/null @@ -1,49 +0,0 @@ - SUBROUTINE MSTADB(Q2,T2,P2,Q1,T1,P1) -C -C THIS ROUTINE PROVIDES T2 AND QSAT AT T2 AT PRESSUE P2 THAT -C GIVES THE SAME EQUIVALENT POTENTIAL TEMPERATURE AS THE POINT -C ( T1, P1). FOR EASE OF COMPUTATION, Q1 IS REQUESTED -C - REAL L0, KAPPA - parameter (dtdp=4.5e-4,kappa=.286,g=9.81) - parameter (cp=1004.6,cl=4185.5,cpv=1846.0) - parameter (rv=461.5,l0=2.500e6,t0=273.16,es0=610.78) - parameter (cps=2106.0,hfus=3.3358e5,rd=287.05) - parameter (fact1=(CPV - CL) / RV,fact1i=(cps-cl)/rv) - parameter (fact2=(L0 + (CL - CPV) * T0) / RV) - parameter (fact2i=(L0 + hfus + (CL - cps) * T0) / RV) - parameter (fact3=1. / T0,eps=rd/rv,tmix=t0-20.) - FUNC(QS,T) = EXP(L0 * QS / (CP * T)) - DESDT(ES,T) = ES * (FACT1 / T + FACT2 / T ** 2) - DESDTi(ES,T) = ES * (FACT1i / T + FACT2i / T ** 2) -C FIRST GUESS OF T2 - T2 = T1 + DTDP * (P2 - P1) - PFACT = (1.E5 / P2) ** KAPPA - CONST = T1 * (1.E5 / P1) ** KAPPA * FUNC(Q1,T1) - ITER = 0 -C ITERATION STARTS - 10 CALL SVP(Q2,E2,P2,T2) - FACT4 = FUNC(Q2,T2) - F = T2 * PFACT * FACT4 - CONST - if(t2.ge.t0) then - desdt2 = desdt(e2,t2) - elseif(t2.lt.tmix) then - desdt2 = desdti(e2,t2) - else - w = (t2 - tmix) / (t0 - tmix) - desdt2 = w * desdt(e2,t2) + (1.-w) * desdti(e2,t2) - endif - DQSDT = (Q2 / E2) * (P2 / (P2 - (1.-EPS) * E2)) * DESDT2 - DFDT = PFACT * FACT4 + PFACT * FACT4 * (L0 * DQSDT / CP - & - L0 * Q2 / (CP * T2)) - DT = - F / DFDT - T2 = T2 + DT - IF(ABS(DT).LT..1) GOTO 100 - ITER = ITER + 1 - IF(ITER.LT.50) GOTO 10 - WRITE(6,*) ' MSTADB ITERATION DIVERGED, PROGRAM STOPPED' - STOP 'ABEND 240' - 100 CONTINUE - CALL SVP(Q2,E2,P2,T2) - RETURN - END diff --git a/sorc/gfs_bufr.fd/newsig1.f b/sorc/gfs_bufr.fd/newsig1.f deleted file mode 100755 index 2b0b9ccb99..0000000000 --- a/sorc/gfs_bufr.fd/newsig1.f +++ /dev/null @@ -1,65 +0,0 @@ -C----------------------------------------------------------------------- - SUBROUTINE NEWSIG(NSIL,IDVC,LEVS,NVCOORD,VCOORD,IRET) -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C -C SUBPROGRAM: NEWSIG GET NEW SIGMA STRUCTURE -C PRGMMR: IREDELL ORG: W/NMC23 DATE: 98-04-03 -C -C ABSTRACT: READ IN INTERFACE SIGMA VALUES (OR USE OLD VALUES) -C AND COMPUTE FULL SIGMA VALUES. - -C PROGRAM HISTORY LOG: -C 98-04-03 IREDELL -C -C USAGE: CALL NEWSIG(NSIL,IDVC,LEVS,NVCOORD,VCOORD,IRET) -C INPUT ARGUMENTS: -C NSIL INTEGER UNIT NUMBER OF NEW SIGMA INTERFACE VALUES -C IDVC INTEGER VERTICAL COORDINATE ID -C LEVS INTEGER NEW NUMBER OF LEVELS -C NVCOORD INTEGER NEW NUMBER OF VERTICAL COORDINATES -C OUTPUT ARGUMENTS: -C VCOORD REAL (LEVS+1,NVCOORD) NEW VERTICAL COORDINATES -C IRET INTEGER RETURN CODE -C -C ATTRIBUTES: -C LANGUAGE: FORTRAN -C -C$$$ - REAL VCOORD(LEVS+1,NVCOORD) -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -C READ VERTICAL COORDINATES - READ(NSIL,*,IOSTAT=IRET) IDVCI,LEVSI,NVCOORDI - IF(IRET.EQ.0) THEN -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - READ(NSIL,*,IOSTAT=IRET) ((VCOORD(K,N),N=1,NVCOORD),K=1,LEVS+1) - IF(IRET.NE.0) RETURN - IF(IDVCI.NE.IDVC.OR.LEVSI.NE.LEVS) IRET=28 - IF(NVCOORDI.NE.NVCOORD) IRET=28 - IF(IRET.NE.0) RETURN -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -C READ INTERFACE HYBRID VALUES - ELSE - REWIND NSIL - READ(NSIL,*,IOSTAT=IRET) IDVCI - REWIND NSIL - IF(IRET.EQ.0.AND.(IDVCI.EQ.2.OR.IDVCI.EQ.3)) THEN - READ(NSIL,*,IOSTAT=IRET) IDVCI,LEVSI - READ(NSIL,*,IOSTAT=IRET) (VCOORD(K,1),VCOORD(K,2),K=1,LEVS+1) - IF(IRET.NE.0) RETURN - IF(IDVCI.NE.IDVC.OR.LEVSI.NE.LEVS) IRET=28 - IF(IRET.NE.0) RETURN -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -C READ INTERFACE SIGMA VALUES - ELSE - VCOORD(1,1)=1. - VCOORD(LEVS+1,1)=0. - READ(NSIL,*,IOSTAT=IRET) LEVSI - READ(NSIL,*,IOSTAT=IRET) (VCOORD(K,1),K=2,LEVS) - IF(IRET.NE.0) RETURN - IF(LEVSI.NE.LEVS) IRET=28 - IF(IRET.NE.0) RETURN - ENDIF -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ENDIF - IRET=0 - END diff --git a/sorc/gfs_bufr.fd/physcons.f b/sorc/gfs_bufr.fd/physcons.f deleted file mode 100755 index 03a0a8001d..0000000000 --- a/sorc/gfs_bufr.fd/physcons.f +++ /dev/null @@ -1,40 +0,0 @@ -module physcons - use machine,only:kind_phys -! Physical constants as set in NMC handbook from Smithsonian tables. -! Physical constants are given to 5 places. -! 1990/04/30: g and rd are made consistent with NWS usage. -! 2001/10/22: g made consistent with SI usage. -! Math constants - real(kind=kind_phys),parameter:: con_pi =3.141593e+0 ! pi - real(kind=kind_phys),parameter:: con_sqrt2 =1.414214e+0 ! square root of 2 - real(kind=kind_phys),parameter:: con_sqrt3 =1.732051e+0 ! square root of 3 -! Primary constants - real(kind=kind_phys),parameter:: con_rerth =6.3712e+6 ! radius of earth (m) - real(kind=kind_phys),parameter:: con_g =9.80665e+0! gravity (m/s2) - real(kind=kind_phys),parameter:: con_omega =7.2921e-5 ! ang vel of earth (1/s) - real(kind=kind_phys),parameter:: con_rd =2.8705e+2 ! gas constant air (J/kg/K) - real(kind=kind_phys),parameter:: con_rv =4.6150e+2 ! gas constant H2O (J/kg/K) - real(kind=kind_phys),parameter:: con_cp =1.0046e+3 ! spec heat air @p (J/kg/K) - real(kind=kind_phys),parameter:: con_cv =7.1760e+2 ! spec heat air @v (J/kg/K) - real(kind=kind_phys),parameter:: con_cvap =1.8460e+3 ! spec heat H2O gas (J/kg/K) - real(kind=kind_phys),parameter:: con_cliq =4.1855e+3 ! spec heat H2O liq (J/kg/K) - real(kind=kind_phys),parameter:: con_csol =2.1060e+3 ! spec heat H2O ice (J/kg/K) - real(kind=kind_phys),parameter:: con_hvap =2.5000e+6 ! lat heat H2O cond (J/kg) - real(kind=kind_phys),parameter:: con_hfus =3.3358e+5 ! lat heat H2O fusion (J/kg) - real(kind=kind_phys),parameter:: con_psat =6.1078e+2 ! pres at H2O 3pt (Pa) - real(kind=kind_phys),parameter:: con_sbc =5.6730e-8 ! stefan-boltzmann (W/m2/K4) - real(kind=kind_phys),parameter:: con_solr =1.3533e+3 ! solar constant (W/m2) - real(kind=kind_phys),parameter:: con_t0c =2.7315e+2 ! temp at 0C (K) - real(kind=kind_phys),parameter:: con_ttp =2.7316e+2 ! temp at H2O 3pt (K) - real(kind=kind_phys),parameter:: con_epsq =1.0E-12 ! min q for computing precip type -! Secondary constants - real(kind=kind_phys),parameter:: con_rocp =con_rd/con_cp - real(kind=kind_phys),parameter:: con_cpor =con_cp/con_rd - real(kind=kind_phys),parameter:: con_rog =con_rd/con_g - real(kind=kind_phys),parameter:: con_fvirt =con_rv/con_rd-1. - real(kind=kind_phys),parameter:: con_eps =con_rd/con_rv - real(kind=kind_phys),parameter:: con_epsm1 =con_rd/con_rv-1. - real(kind=kind_phys),parameter:: con_dldt =con_cvap-con_cliq - real(kind=kind_phys),parameter:: con_xpona =-con_dldt/con_rv - real(kind=kind_phys),parameter:: con_xponb =-con_dldt/con_rv+con_hvap/(con_rv*con_ttp) -end module diff --git a/sorc/gfs_bufr.fd/read_nemsio.f b/sorc/gfs_bufr.fd/read_nemsio.f deleted file mode 100644 index d1262e7974..0000000000 --- a/sorc/gfs_bufr.fd/read_nemsio.f +++ /dev/null @@ -1,55 +0,0 @@ - subroutine read_nemsio(gfile,im,jm,levs, - & VarName,LayName,Varout,iret) -!! This subroutine reads either 2d or 3d nemsio data -!! 12/12/2019 Guang Ping Lou - - use nemsio_module - implicit none - include 'mpif.h' - type(nemsio_gfile) :: gfile - character(len=20) :: VarName,LayName - integer,intent(in) :: im,jm,levs - real,intent(out) :: Varout(im,jm,levs) - real,dimension(im*jm) :: dum1d - integer :: iret,i,j,k,jj - - print*,'read_nemsio,im,jm,levs' - print*, im,jm,levs - print*,'VarName=',trim(VarName) - print*,'LayName=',trim(LayName) - if(levs > 1) then - do k =1, levs - call nemsio_readrecvw34(gfile,trim(VarName), - & trim(LayName),k,data=dum1d,iret=iret) - !print*,"VarName,k= ",trim(VarName), k - if (iret /= 0) then - print*,trim(VarName)," not found" - else - do j=1,jm - jj= (j-1)*im - do i=1,im - Varout(i,j,k) = dum1d(jj+i) - end do - end do - end if - enddo - - else - call nemsio_readrecvw34(gfile,trim(VarName), - & trim(LayName),1,data=dum1d,iret=iret) - !print*,"VarName= ",trim(VarName) - if (iret /= 0) then - print*,trim(VarName)," not found" - else - do j=1,jm - jj= (j-1)*im - do i=1,im - Varout(i,j,1) = dum1d(jj+i) - end do - end do - endif - - end if - - end subroutine read_nemsio - diff --git a/sorc/gfs_bufr.fd/read_netcdf.f b/sorc/gfs_bufr.fd/read_netcdf.f deleted file mode 100644 index a024323b31..0000000000 --- a/sorc/gfs_bufr.fd/read_netcdf.f +++ /dev/null @@ -1,55 +0,0 @@ - subroutine read_netcdf(ncid,im,jm,levs, - & VarName,Varout,Zreverse,iret) -!! This subroutine reads either 2d or 3d NetCDF data -!! 12/12/2019 Guang Ping Lou - - use netcdf - implicit none - include 'mpif.h' - character(len=20),intent(in) :: VarName - character(len=3),intent(in) :: Zreverse - integer,intent(in) :: ncid,im,jm,levs - real,intent(out) :: Varout(im,jm,levs) - real :: dummy3d(im,jm,levs) - integer :: iret,i,j,k,id_var,kk - - if(levs > 1) then - iret = nf90_inq_varid(ncid,trim(VarName),id_var) - !print*,stat,varname,id_var - iret = nf90_get_var(ncid,id_var,dummy3d) - if (iret /= 0) then - print*,VarName," not found" - else -!For FV3GFS NetCDF output, vertical layers need to be reversed - if(Zreverse == "yes" ) then - do k = 1, levs - kk=levs-k+1 - do j=1, jm - do i=1, im - Varout(i,j,k) = dummy3d(i,j,kk) - enddo - enddo - enddo - else - do k = 1, levs - do j=1, jm - do i=1, im - Varout(i,j,k) = dummy3d(i,j,k) - enddo - enddo - enddo - endif - endif - - else - iret = nf90_inq_varid(ncid,trim(VarName),id_var) - !print*,stat,varname,id_var - iret = nf90_get_var(ncid,id_var,Varout(:,:,1)) - if (iret /= 0) then - print*,VarName," not found" - endif - - end if - - end subroutine read_netcdf - diff --git a/sorc/gfs_bufr.fd/read_netcdf_p.f b/sorc/gfs_bufr.fd/read_netcdf_p.f deleted file mode 100644 index 4bfa8507be..0000000000 --- a/sorc/gfs_bufr.fd/read_netcdf_p.f +++ /dev/null @@ -1,113 +0,0 @@ - subroutine read_netcdf_p(ncid,im,jm,levs, - & VarName,Varout,Zreverse,iope,ionproc, - & iocomms,iret) -!! This subroutine reads either 2d or 3d NetCDF data in parallel -!! 02/08/2020 Guang Ping Lou - - use netcdf - use mpi - implicit none -!! include 'mpif.h' - character(len=20),intent(in) :: VarName - character(len=3),intent(in) :: Zreverse - integer,intent(in) :: ncid,im,jm,levs - real,intent(out) :: Varout(im,jm,levs) - real :: dummy3d(im,jm,levs) - integer :: iret,i,j,k,id_var,kk - integer :: iope,ionproc,iocomms - integer :: chunksize,ionproc1 - real, allocatable :: dummy(:,:,:) - integer start(3), count(3) - integer nskip - integer, allocatable :: starts(:) - integer, allocatable :: counts(:) - integer, allocatable :: chunksizes(:) - integer, allocatable :: rdispls(:) - integer, allocatable :: ii(:) - - if(levs > 1) then - nskip = int(levs/ionproc) + 1 - k=ionproc*nskip - if(k > levs) then - kk=(k-levs)/nskip - ionproc1=ionproc - kk - else - ionproc1=ionproc - endif - iret = nf90_inq_varid(ncid,trim(VarName),id_var) - allocate(starts(ionproc1), counts(ionproc1),ii(ionproc1)) - allocate(chunksizes(ionproc1)) - allocate(rdispls(ionproc1)) - print*,'ionproc,ionproc1,nskip= ',ionproc,ionproc1, nskip - print*,'trim(VarName)in read= ',trim(VarName) - starts(1) = 1 - ii(1) = 1 - do i = 2, ionproc1 - starts(i) = 1 + (i-1)*nskip - ii(i)= ii(i-1) + 1 - end do - do i=1, ionproc1 - 1 - counts(i) = starts(i+1) - starts(i) - end do - counts(ionproc1) = levs - starts(ionproc1)+1 - print*,'starts= ',starts - print*, 'counts= ', counts - k=ii(iope+1) - start = (/1,1,starts(k)/) - count = (/im,jm,counts(k)/) - chunksizes(:) = im * jm * counts(:) - rdispls(:) = im * jm * (starts(:)-1) - print*, 'iope,k,start,count= ',iope,k,start(3),count(3) - print*, 'chunksizes= ', chunksizes - print*, 'rdispls= ', rdispls - allocate (dummy(im,jm,count(3))) - iret=nf90_get_var(ncid,id_var,dummy, - & start=start,count=count) - if (iret /= 0) then - print*,VarName," not found" - endif - print*,'start(3),st(3):cnt(3)-1=',start(3),(start(3)+count(3)-1) - print*,'dummy(im/2,jm/2,:)= ', dummy(im/2,jm/2,:) - call mpi_allgatherv(dummy,chunksizes(k),mpi_real,dummy3d, - & chunksizes, rdispls, mpi_real, iocomms, iret) - print*,'VarName= ', VarName - print*,'dummy3d(im/2,jm/2,:)= ', dummy3d(im/2,jm/2,:) -!! call mpi_alltoallv(dummy, chunksizes, sdispls, mpi_real, dummy3d, -!! & chunksizes, rdispls, mpi_real, iocomms, iret) - -! enddo -!For FV3GFS NetCDF output, vertical layers need to be reversed - if(Zreverse == "yes" ) then - do k = 1, levs - kk=levs-k+1 - do j=1, jm - do i=1, im - Varout(i,j,k) = dummy3d(i,j,kk) - enddo - enddo - enddo - else - do k = 1, levs - do j=1, jm - do i=1, im - Varout(i,j,k) = dummy3d(i,j,k) - enddo - enddo - enddo - endif - deallocate(starts, counts,ii) - deallocate(chunksizes) - deallocate(rdispls) - deallocate (dummy) - - else - iret = nf90_inq_varid(ncid,trim(VarName),id_var) - print*,'trim(VarName)in read= ',trim(VarName) - iret = nf90_get_var(ncid,id_var,Varout(:,:,1)) - if (iret /= 0) then - print*,VarName," not found" - endif - - end if - end subroutine read_netcdf_p - diff --git a/sorc/gfs_bufr.fd/rsearch.f b/sorc/gfs_bufr.fd/rsearch.f deleted file mode 100755 index 73141facf5..0000000000 --- a/sorc/gfs_bufr.fd/rsearch.f +++ /dev/null @@ -1,145 +0,0 @@ -C----------------------------------------------------------------------- - SUBROUTINE RSEARCH(IM,KM1,IXZ1,KXZ1,Z1,KM2,IXZ2,KXZ2,Z2,IXL2,KXL2, - & L2) -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C -C SUBPROGRAM: RSEARCH SEARCH FOR A SURROUNDING REAL INTERVAL -C PRGMMR: IREDELL ORG: W/NMC23 DATE: 98-05-01 -C -C ABSTRACT: THIS SUBPROGRAM SEARCHES MONOTONIC SEQUENCES OF REAL NUMBERS -C FOR INTERVALS THAT SURROUND A GIVEN SEARCH SET OF REAL NUMBERS. -C THE SEQUENCES MAY BE MONOTONIC IN EITHER DIRECTION; THE REAL NUMBERS -C MAY BE SINGLE OR DOUBLE PRECISION; THE INPUT SEQUENCES AND SETS -C AND THE OUTPUT LOCATIONS MAY BE ARBITRARILY DIMENSIONED. -C -C PROGRAM HISTORY LOG: -C 1999-01-05 MARK IREDELL -C -C USAGE: CALL RSEARCH(IM,KM1,IXZ1,KXZ1,Z1,KM2,IXZ2,KXZ2,Z2,IXL2,KXL2, -C & L2) -C INPUT ARGUMENT LIST: -C IM INTEGER NUMBER OF SEQUENCES TO SEARCH -C KM1 INTEGER NUMBER OF POINTS IN EACH SEQUENCE -C IXZ1 INTEGER SEQUENCE SKIP NUMBER FOR Z1 -C KXZ1 INTEGER POINT SKIP NUMBER FOR Z1 -C Z1 REAL (1+(IM-1)*IXZ1+(KM1-1)*KXZ1) -C SEQUENCE VALUES TO SEARCH -C (Z1 MUST BE MONOTONIC IN EITHER DIRECTION) -C KM2 INTEGER NUMBER OF POINTS TO SEARCH FOR -C IN EACH RESPECTIVE SEQUENCE -C IXZ2 INTEGER SEQUENCE SKIP NUMBER FOR Z2 -C KXZ2 INTEGER POINT SKIP NUMBER FOR Z2 -C Z2 REAL (1+(IM-1)*IXZ2+(KM2-1)*KXZ2) -C SET OF VALUES TO SEARCH FOR -C (Z2 NEED NOT BE MONOTONIC) -C IXL2 INTEGER SEQUENCE SKIP NUMBER FOR L2 -C KXL2 INTEGER POINT SKIP NUMBER FOR L2 -C -C OUTPUT ARGUMENT LIST: -C L2 INTEGER (1+(IM-1)*IXL2+(KM2-1)*KXL2) -C INTERVAL LOCATIONS HAVING VALUES FROM 0 TO KM1 -C (Z2 WILL BE BETWEEN Z1(L2) AND Z1(L2+1)) -C -C SUBPROGRAMS CALLED: -C SBSRCH ESSL BINARY SEARCH -C DBSRCH ESSL BINARY SEARCH -C -C REMARKS: -C IF THE ARRAY Z1 IS DIMENSIONED (IM,KM1), THEN THE SKIP NUMBERS ARE -C IXZ1=1 AND KXZ1=IM; IF IT IS DIMENSIONED (KM1,IM), THEN THE SKIP -C NUMBERS ARE IXZ1=KM1 AND KXZ1=1; IF IT IS DIMENSIONED (IM,JM,KM1), -C THEN THE SKIP NUMBERS ARE IXZ1=1 AND KXZ1=IM*JM; ETCETERA. -C SIMILAR EXAMPLES APPLY TO THE SKIP NUMBERS FOR Z2 AND L2. -C -C RETURNED VALUES OF 0 OR KM1 INDICATE THAT THE GIVEN SEARCH VALUE -C IS OUTSIDE THE RANGE OF THE SEQUENCE. -C -C IF A SEARCH VALUE IS IDENTICAL TO ONE OF THE SEQUENCE VALUES -C THEN THE LOCATION RETURNED POINTS TO THE IDENTICAL VALUE. -C IF THE SEQUENCE IS NOT STRICTLY MONOTONIC AND A SEARCH VALUE IS -C IDENTICAL TO MORE THAN ONE OF THE SEQUENCE VALUES, THEN THE -C LOCATION RETURNED MAY POINT TO ANY OF THE IDENTICAL VALUES. -C -C TO BE EXACT, FOR EACH I FROM 1 TO IM AND FOR EACH K FROM 1 TO KM2, -C Z=Z2(1+(I-1)*IXZ2+(K-1)*KXZ2) IS THE SEARCH VALUE AND -C L=L2(1+(I-1)*IXL2+(K-1)*KXL2) IS THE LOCATION RETURNED. -C IF L=0, THEN Z IS LESS THAN THE START POINT Z1(1+(I-1)*IXZ1) -C FOR ASCENDING SEQUENCES (OR GREATER THAN FOR DESCENDING SEQUENCES). -C IF L=KM1, THEN Z IS GREATER THAN OR EQUAL TO THE END POINT -C Z1(1+(I-1)*IXZ1+(KM1-1)*KXZ1) FOR ASCENDING SEQUENCES -C (OR LESS THAN OR EQUAL TO FOR DESCENDING SEQUENCES). -C OTHERWISE Z IS BETWEEN THE VALUES Z1(1+(I-1)*IXZ1+(L-1)*KXZ1) AND -C Z1(1+(I-1)*IXZ1+(L-0)*KXZ1) AND MAY EQUAL THE FORMER. -C -C ATTRIBUTES: -C LANGUAGE: FORTRAN -C -C$$$ - IMPLICIT NONE - INTEGER,INTENT(IN):: IM,KM1,IXZ1,KXZ1,KM2,IXZ2,KXZ2,IXL2,KXL2 - REAL,INTENT(IN):: Z1(1+(IM-1)*IXZ1+(KM1-1)*KXZ1) - REAL,INTENT(IN):: Z2(1+(IM-1)*IXZ2+(KM2-1)*KXZ2) - INTEGER,INTENT(OUT):: L2(1+(IM-1)*IXL2+(KM2-1)*KXL2) - INTEGER(4) INCX,N,INCY,M,INDX(KM2),RC(KM2),IOPT - INTEGER I,K1,K2,CT -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -C FIND THE SURROUNDING INPUT INTERVAL FOR EACH OUTPUT POINT. - print*, IM,KM1,KM2,INCX,INCY - DO I=1,IM - IF(Z1(1+(I-1)*IXZ1).LE.Z1(1+(I-1)*IXZ1+(KM1-1)*KXZ1)) THEN -C INPUT COORDINATE IS MONOTONICALLY ASCENDING. - INCX=KXZ2 - N=KM2 - INCY=KXZ1 - M=KM1 - IOPT=1 -! IF(DIGITS(1.).LT.DIGITS(1._8)) THEN -! CALL SBSRCH(Z2(1+(I-1)*IXZ2),INCX,N, -! & Z1(1+(I-1)*IXZ1),INCY,M,INDX,RC,IOPT) -! ELSE -! CALL DBSRCH(Z2(1+(I-1)*IXZ2),INCX,N, -! & Z1(1+(I-1)*IXZ1),INCY,M,INDX,RC,IOPT) -! ENDIF -! DO K2=1,KM2 -! L2(1+(I-1)*IXL2+(K2-1)*KXL2)=INDX(K2)-RC(K2) -! ENDDO - DO K2=1,KM2 - L2(K2)=KM1 - DO K1=(1+(I-1)*IXZ1),(1+(I-1)*IXZ1+(KM1-1)*KXZ1)-1 - IF(Z1(K1)>=Z2(K2).AND.Z1(K1+1)>Z2(K2)) THEN - L2(K2)=K1 - EXIT - ENDIF - ENDDO - ENDDO - ELSE -C INPUT COORDINATE IS MONOTONICALLY DESCENDING. - INCX=KXZ2 - N=KM2 - INCY=-KXZ1 - M=KM1 - IOPT=0 -! IF(DIGITS(1.).LT.DIGITS(1._8)) THEN -! CALL SBSRCH(Z2(1+(I-1)*IXZ2),INCX,N, -! & Z1(1+(I-1)*IXZ1),INCY,M,INDX,RC,IOPT) -! ELSE -! CALL DBSRCH(Z2(1+(I-1)*IXZ2),INCX,N, -! & Z1(1+(I-1)*IXZ1),INCY,M,INDX,RC,IOPT) -! ENDIF -! DO K2=1,KM2 -! L2(1+(I-1)*IXL2+(K2-1)*KXL2)=KM1+1-INDX(K2) -! ENDDO - DO K2=1,KM2 - L2(K2)=KM1 - CT=0 - DO K1=(1+(I-1)*IXZ1+(KM1-1)*KXZ1),(1+(I-1)*IXZ1)+1,-1 - CT=CT+1 - IF(Z2(K2)<=Z1(K1).AND.Z2(K2)/dev/null 2>&1 && pwd )" +TRACE=NO source "${HOMEgfs}/ush/preamble.sh" + +function usage() { + cat << EOF +Builds all of the global-workflow components by calling the individual build + scripts in sequence. + +Usage: ${BASH_SOURCE[0]} [-h][-o] + -h: + Print this help message and exit + -o: + Configure for NCO (copy instead of link) +EOF + exit 1 +} + +RUN_ENVIR="emc" + +# Reset option counter in case this script is sourced +OPTIND=1 +while getopts ":ho" option; do + case "${option}" in + h) usage ;; + o) + echo "-o option received, configuring for NCO" + RUN_ENVIR="nco";; + :) + echo "[${BASH_SOURCE[0]}]: ${option} requires an argument" + usage + ;; + *) + echo "[${BASH_SOURCE[0]}]: Unrecognized option: ${option}" + usage + ;; + esac +done +shift $((OPTIND-1)) + +# LINK is always ln, LINK_OR_COPY can be ln or cp depending on RUN_ENVIR being emc or nco, respectively +LINK="ln -fs" +if [[ "${RUN_ENVIR}" == "nco" ]]; then + LINK_OR_COPY="cp -rp" +else + LINK_OR_COPY="ln -fs" +fi + +# shellcheck disable=SC1091 +COMPILER="intel" source "${HOMEgfs}/sorc/gfs_utils.fd/ush/detect_machine.sh" # (sets MACHINE_ID) +# shellcheck disable= +machine=$(echo "${MACHINE_ID}" | cut -d. -f1) + +#------------------------------ +#--Set up build.ver and run.ver +#------------------------------ +${LINK_OR_COPY} "${HOMEgfs}/versions/build.${machine}.ver" "${HOMEgfs}/versions/build.ver" +${LINK_OR_COPY} "${HOMEgfs}/versions/run.${machine}.ver" "${HOMEgfs}/versions/run.ver" + +#------------------------------ +#--model fix fields +#------------------------------ +case "${machine}" in + "wcoss2") FIX_DIR="/lfs/h2/emc/global/noscrub/emc.global/FIX/fix" ;; + "hera") FIX_DIR="/scratch1/NCEPDEV/global/glopara/fix" ;; + "orion") FIX_DIR="/work/noaa/global/glopara/fix" ;; + "hercules") FIX_DIR="/work/noaa/global/glopara/fix" ;; + "jet") FIX_DIR="/lfs4/HFIP/hfv3gfs/glopara/git/fv3gfs/fix" ;; + "s4") FIX_DIR="/data/prod/glopara/fix" ;; + *) + echo "FATAL: Unknown target machine ${machine}, couldn't set FIX_DIR" + exit 1 + ;; +esac + +# Source fix version file +source "${HOMEgfs}/versions/fix.ver" + +# Link wxflow in ush/python, workflow and ci/scripts +# TODO: This will be unnecessary when wxflow is part of the virtualenv +cd "${HOMEgfs}/ush/python" || exit 1 +[[ -s "wxflow" ]] && rm -f wxflow +${LINK} "${HOMEgfs}/sorc/wxflow/src/wxflow" . +cd "${HOMEgfs}/workflow" || exit 1 +[[ -s "wxflow" ]] && rm -f wxflow +${LINK} "${HOMEgfs}/sorc/wxflow/src/wxflow" . +cd "${HOMEgfs}/ci/scripts" || exit 1 +[[ -s "wxflow" ]] && rm -f wxflow +${LINK} "${HOMEgfs}/sorc/wxflow/src/wxflow" . + + +# Link fix directories +if [[ -n "${FIX_DIR}" ]]; then + if [[ ! -d "${HOMEgfs}/fix" ]]; then mkdir "${HOMEgfs}/fix" || exit 1; fi +fi +cd "${HOMEgfs}/fix" || exit 1 +for dir in aer \ + am \ + chem \ + cice \ + cpl \ + datm \ + gsi \ + lut \ + mom6 \ + orog \ + reg2grb2 \ + sfc_climo \ + ugwd \ + verif \ + wave +do + if [[ -d "${dir}" ]]; then + [[ "${RUN_ENVIR}" == "nco" ]] && chmod -R 755 "${dir}" + rm -rf "${dir}" + fi + fix_ver="${dir}_ver" + ${LINK_OR_COPY} "${FIX_DIR}/${dir}/${!fix_ver}" "${dir}" +done + + +if [[ -d "${HOMEgfs}/sorc/ufs_utils.fd" ]]; then + cd "${HOMEgfs}/sorc/ufs_utils.fd/fix" || exit 1 + ./link_fixdirs.sh "${RUN_ENVIR}" "${machine}" 2> /dev/null +fi + + +#--------------------------------------- +#--add files from external repositories +#--------------------------------------- +#--copy/link NoahMp table form ccpp-physics repository +cd "${HOMEgfs}/parm/ufs" || exit 1 +${LINK_OR_COPY} "${HOMEgfs}/sorc/ufs_model.fd/FV3/ccpp/physics/physics/noahmptable.tbl" . + +cd "${HOMEgfs}/parm/post" || exit 1 +for file in postxconfig-NT-GEFS-ANL.txt postxconfig-NT-GEFS-F00.txt postxconfig-NT-GEFS.txt postxconfig-NT-GFS-ANL.txt \ + postxconfig-NT-GFS-F00-TWO.txt postxconfig-NT-GFS-F00.txt postxconfig-NT-GFS-FLUX-F00.txt postxconfig-NT-GFS-FLUX.txt \ + postxconfig-NT-GFS-GOES.txt postxconfig-NT-GFS-TWO.txt \ + postxconfig-NT-GFS.txt postxconfig-NT-gefs-aerosol.txt postxconfig-NT-gefs-chem.txt params_grib2_tbl_new \ + post_tag_gfs128 post_tag_gfs65 nam_micro_lookup.dat \ + AEROSOL_LUTS.dat optics_luts_DUST.dat optics_luts_SALT.dat optics_luts_SOOT.dat optics_luts_SUSO.dat optics_luts_WASO.dat +do + ${LINK_OR_COPY} "${HOMEgfs}/sorc/upp.fd/parm/${file}" . +done + +cd "${HOMEgfs}/scripts" || exit 8 +${LINK_OR_COPY} "${HOMEgfs}/sorc/ufs_utils.fd/scripts/exemcsfc_global_sfc_prep.sh" . +cd "${HOMEgfs}/ush" || exit 8 +for file in emcsfc_ice_blend.sh global_cycle_driver.sh emcsfc_snow.sh global_cycle.sh; do + ${LINK_OR_COPY} "${HOMEgfs}/sorc/ufs_utils.fd/ush/${file}" . +done +for file in finddate.sh make_ntc_bull.pl make_NTC_file.pl make_tif.sh month_name.sh ; do + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gfs_utils.fd/ush/${file}" . +done + +# TODO: Link these ufs.configure templates from ufs-weather-model +#cd "${HOMEgfs}/parm/ufs" || exit 1 +#declare -a ufs_configure_files=("ufs.configure.atm.IN" \ +# "ufs.configure.atm_aero.IN" \ +# "ufs.configure.atmw.IN" \ +# "ufs.configure.blocked_atm_wav_2way.IN" \ +# "ufs.configure.blocked_atm_wav.IN" \ +# "ufs.configure.cpld_agrid.IN" \ +# "ufs.configure.cpld_esmfthreads.IN" \ +# "ufs.configure.cpld.IN" \ +# "ufs.configure.cpld_noaero.IN" \ +# "ufs.configure.cpld_noaero_nowave.IN" \ +# "ufs.configure.cpld_noaero_outwav.IN" \ +# "ufs.configure.leapfrog_atm_wav.IN") +#for file in "${ufs_configure_files[@]}"; do +# [[ -s "${file}" ]] && rm -f "${file}" +# ${LINK_OR_COPY} "${HOMEgfs}/sorc/ufs_model.fd/tests/parm/${file}" . +#done + +cd "${HOMEgfs}/ush" || exit 1 +[[ -s "atparse.bash" ]] && rm -f "atparse.bash" +${LINK_OR_COPY} "${HOMEgfs}/sorc/ufs_model.fd/tests/atparse.bash" . + + +#------------------------------ +#--add GDASApp fix directory +#------------------------------ +if [[ -d "${HOMEgfs}/sorc/gdas.cd" ]]; then + cd "${HOMEgfs}/fix" || exit 1 + [[ ! -d gdas ]] && mkdir -p gdas + cd gdas || exit 1 + for gdas_sub in fv3jedi gsibec; do + if [[ -d "${gdas_sub}" ]]; then + rm -rf "${gdas_sub}" + fi + fix_ver="gdas_${gdas_sub}_ver" + ${LINK_OR_COPY} "${FIX_DIR}/gdas/${gdas_sub}/${!fix_ver}" "${gdas_sub}" + done +fi + +#------------------------------ +#--add GDASApp files +#------------------------------ +if [[ -d "${HOMEgfs}/sorc/gdas.cd" ]]; then + cd "${HOMEgfs}/ush" || exit 1 + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gdas.cd/ush/ufsda" . + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gdas.cd/ush/jediinc2fv3.py" . + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gdas.cd/ush/ioda/bufr2ioda/run_bufr2ioda.py" . + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gdas.cd/build/bin/imsfv3_scf2ioda.py" . + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gdas.cd/scripts/exglobal_prep_ocean_obs.py" . +fi + + +#------------------------------ +#--add DA Monitor file (NOTE: ensure to use correct version) +#------------------------------ +if [[ -d "${HOMEgfs}/sorc/gsi_monitor.fd" ]]; then + + cd "${HOMEgfs}/parm" || exit 1 + [[ -d monitor ]] && rm -rf monitor + mkdir -p monitor + cd monitor || exit 1 + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gsi_monitor.fd/src/Minimization_Monitor/nwprod/gdas/fix/gdas_minmon_cost.txt" . + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gsi_monitor.fd/src/Minimization_Monitor/nwprod/gdas/fix/gdas_minmon_gnorm.txt" . + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gsi_monitor.fd/src/Minimization_Monitor/nwprod/gfs/fix/gfs_minmon_cost.txt" . + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gsi_monitor.fd/src/Minimization_Monitor/nwprod/gfs/fix/gfs_minmon_gnorm.txt" . + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gsi_monitor.fd/src/Ozone_Monitor/nwprod/gdas_oznmon/fix/gdas_oznmon_base.tar" . + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gsi_monitor.fd/src/Ozone_Monitor/nwprod/gdas_oznmon/fix/gdas_oznmon_satype.txt" . + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gsi_monitor.fd/src/Radiance_Monitor/nwprod/gdas_radmon/fix/gdas_radmon_base.tar" . + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gsi_monitor.fd/src/Radiance_Monitor/nwprod/gdas_radmon/fix/gdas_radmon_satype.txt" . + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gsi_monitor.fd/src/Radiance_Monitor/nwprod/gdas_radmon/fix/gdas_radmon_scaninfo.txt" . + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gsi_monitor.fd/src/Radiance_Monitor/nwprod/gdas_radmon/parm/gdas_radmon.parm" da_mon.parm + # ${LINK_OR_COPY} "${HOMEgfs}/sorc/gsi_monitor.fd/src/Minimization_Monitor/nwprod/gdas/parm/gdas_minmon.parm" . + # ${LINK_OR_COPY} "${HOMEgfs}/sorc/gsi_monitor.fd/src/Minimization_Monitor/nwprod/gfs/parm/gfs_minmon.parm" . + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gsi_monitor.fd/src/Ozone_Monitor/nwprod/gdas_oznmon/parm/gdas_oznmon.parm" . + # ${LINK_OR_COPY} "${HOMEgfs}/sorc/gsi_monitor.fd/src/Radiance_Monitor/nwprod/gdas_radmon/parm/gdas_radmon.parm" . +fi + +#------------------------------ +#--link executables +#------------------------------ + +if [[ ! -d "${HOMEgfs}/exec" ]]; then mkdir "${HOMEgfs}/exec" || exit 1 ; fi +cd "${HOMEgfs}/exec" || exit 1 + +for utilexe in fbwndgfs.x gaussian_sfcanl.x gfs_bufr.x supvit.x syndat_getjtbul.x \ + syndat_maksynrc.x syndat_qctropcy.x tocsbufr.x overgridid.x \ + mkgfsawps.x enkf_chgres_recenter_nc.x tave.x vint.x reg2grb2.x +do + [[ -s "${utilexe}" ]] && rm -f "${utilexe}" + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gfs_utils.fd/install/bin/${utilexe}" . +done + +[[ -s "ufs_model.x" ]] && rm -f ufs_model.x +${LINK_OR_COPY} "${HOMEgfs}/sorc/ufs_model.fd/tests/ufs_model.x" . + +[[ -s "upp.x" ]] && rm -f upp.x +${LINK_OR_COPY} "${HOMEgfs}/sorc/upp.fd/exec/upp.x" . + +for ufs_utilsexe in emcsfc_ice_blend emcsfc_snow2mdl global_cycle; do + [[ -s "${ufs_utilsexe}" ]] && rm -f "${ufs_utilsexe}" + ${LINK_OR_COPY} "${HOMEgfs}/sorc/ufs_utils.fd/exec/${ufs_utilsexe}" . +done + +# GSI +if [[ -d "${HOMEgfs}/sorc/gsi_enkf.fd" ]]; then + for gsiexe in enkf.x gsi.x; do + [[ -s "${gsiexe}" ]] && rm -f "${gsiexe}" + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gsi_enkf.fd/install/bin/${gsiexe}" . + done +fi + +# GSI Utils +if [[ -d "${HOMEgfs}/sorc/gsi_utils.fd" ]]; then + for exe in calc_analysis.x calc_increment_ens_ncio.x calc_increment_ens.x \ + getsfcensmeanp.x getsigensmeanp_smooth.x getsigensstatp.x \ + interp_inc.x recentersigp.x + do + [[ -s "${exe}" ]] && rm -f "${exe}" + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gsi_utils.fd/install/bin/${exe}" . + done +fi + +# GSI Monitor +if [[ -d "${HOMEgfs}/sorc/gsi_monitor.fd" ]]; then + for exe in oznmon_horiz.x oznmon_time.x radmon_angle.x \ + radmon_bcoef.x radmon_bcor.x radmon_time.x + do + [[ -s "${exe}" ]] && rm -f "${exe}" + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gsi_monitor.fd/install/bin/${exe}" . + done +fi + +# GDASApp +if [[ -d "${HOMEgfs}/sorc/gdas.cd" ]]; then + declare -a JEDI_EXE=("fv3jedi_addincrement.x" \ + "fv3jedi_diffstates.x" \ + "fv3jedi_ensvariance.x" \ + "fv3jedi_hofx.x" \ + "fv3jedi_var.x" \ + "fv3jedi_convertincrement.x" \ + "fv3jedi_dirac.x" \ + "fv3jedi_error_covariance_training.x" \ + "fv3jedi_letkf.x" \ + "fv3jedi_convertstate.x" \ + "fv3jedi_eda.x" \ + "fv3jedi_forecast.x" \ + "fv3jedi_plot_field.x" \ + "fv3jedi_data_checker.py" \ + "fv3jedi_enshofx.x" \ + "fv3jedi_hofx_nomodel.x" \ + "fv3jedi_testdata_downloader.py" \ + "soca_convertincrement.x" \ + "soca_error_covariance_training.x" \ + "soca_setcorscales.x" \ + "soca_gridgen.x" \ + "soca_var.x" \ + "bufr2ioda.x" \ + "calcfIMS.exe" \ + "apply_incr.exe" ) + for gdasexe in "${JEDI_EXE[@]}"; do + [[ -s "${gdasexe}" ]] && rm -f "${gdasexe}" + ${LINK_OR_COPY} "${HOMEgfs}/sorc/gdas.cd/build/bin/${gdasexe}" . + done +fi + +#------------------------------ +#--link source code directories +#------------------------------ +cd "${HOMEgfs}/sorc" || exit 8 +if [[ -d ufs_model.fd ]]; then + [[ -d upp.fd ]] && rm -rf upp.fd + ${LINK} ufs_model.fd/FV3/upp upp.fd +fi + +if [[ -d gsi_enkf.fd ]]; then + [[ -d gsi.fd ]] && rm -rf gsi.fd + ${LINK} gsi_enkf.fd/src/gsi gsi.fd + + [[ -d enkf.fd ]] && rm -rf enkf.fd + ${LINK} gsi_enkf.fd/src/enkf enkf.fd +fi + +if [[ -d gsi_utils.fd ]]; then + [[ -d calc_analysis.fd ]] && rm -rf calc_analysis.fd + ${LINK} gsi_utils.fd/src/netcdf_io/calc_analysis.fd . + + [[ -d calc_increment_ens.fd ]] && rm -rf calc_increment_ens.fd + ${LINK} gsi_utils.fd/src/EnKF/gfs/src/calc_increment_ens.fd . + + [[ -d calc_increment_ens_ncio.fd ]] && rm -rf calc_increment_ens_ncio.fd + ${LINK} gsi_utils.fd/src/EnKF/gfs/src/calc_increment_ens_ncio.fd . + + [[ -d getsfcensmeanp.fd ]] && rm -rf getsfcensmeanp.fd + ${LINK} gsi_utils.fd/src/EnKF/gfs/src/getsfcensmeanp.fd . + + [[ -d getsigensmeanp_smooth.fd ]] && rm -rf getsigensmeanp_smooth.fd + ${LINK} gsi_utils.fd/src/EnKF/gfs/src/getsigensmeanp_smooth.fd . + + [[ -d getsigensstatp.fd ]] && rm -rf getsigensstatp.fd + ${LINK} gsi_utils.fd/src/EnKF/gfs/src/getsigensstatp.fd . + + [[ -d recentersigp.fd ]] && rm -rf recentersigp.fd + ${LINK} gsi_utils.fd/src/EnKF/gfs/src/recentersigp.fd . + + [[ -d interp_inc.fd ]] && rm -rf interp_inc.fd + ${LINK} gsi_utils.fd/src/netcdf_io/interp_inc.fd . +fi + +if [[ -d gsi_monitor.fd ]] ; then + [[ -d oznmon_horiz.fd ]] && rm -rf oznmon_horiz.fd + ${LINK} gsi_monitor.fd/src/Ozone_Monitor/nwprod/oznmon_shared/sorc/oznmon_horiz.fd . + + [[ -d oznmon_time.fd ]] && rm -rf oznmon_time.fd + ${LINK} gsi_monitor.fd/src/Ozone_Monitor/nwprod/oznmon_shared/sorc/oznmon_time.fd . + + [[ -d radmon_angle.fd ]] && rm -rf radmon_angle.fd + ${LINK} gsi_monitor.fd/src/Radiance_Monitor/nwprod/radmon_shared/sorc/verf_radang.fd radmon_angle.fd + + [[ -d radmon_bcoef.fd ]] && rm -rf radmon_bcoef.fd + ${LINK} gsi_monitor.fd/src/Radiance_Monitor/nwprod/radmon_shared/sorc/verf_radbcoef.fd radmon_bcoef.fd + + [[ -d radmon_bcor.fd ]] && rm -rf radmon_bcor.fd + ${LINK} gsi_monitor.fd/src/Radiance_Monitor/nwprod/radmon_shared/sorc/verf_radbcor.fd radmon_bcor.fd + + [[ -d radmon_time.fd ]] && rm -rf radmon_time.fd + ${LINK} gsi_monitor.fd/src/Radiance_Monitor/nwprod/radmon_shared/sorc/verf_radtime.fd radmon_time.fd +fi + +for prog in global_cycle.fd emcsfc_ice_blend.fd emcsfc_snow2mdl.fd ;do + [[ -d "${prog}" ]] && rm -rf "${prog}" + ${LINK} "ufs_utils.fd/sorc/${prog}" "${prog}" +done + +for prog in enkf_chgres_recenter_nc.fd \ + fbwndgfs.fd \ + gaussian_sfcanl.fd \ + gfs_bufr.fd \ + mkgfsawps.fd \ + overgridid.fd \ + rdbfmsua.fd \ + reg2grb2.fd \ + supvit.fd \ + syndat_getjtbul.fd \ + syndat_maksynrc.fd \ + syndat_qctropcy.fd \ + tave.fd \ + tocsbufr.fd \ + vint.fd \ + webtitle.fd +do + if [[ -d "${prog}" ]]; then rm -rf "${prog}"; fi + ${LINK_OR_COPY} "gfs_utils.fd/src/${prog}" . +done + +exit 0 diff --git a/sorc/machine-setup.sh b/sorc/machine-setup.sh deleted file mode 100644 index 2dbe6abd7e..0000000000 --- a/sorc/machine-setup.sh +++ /dev/null @@ -1,186 +0,0 @@ -# Create a test function for sh vs. bash detection. The name is -# randomly generated to reduce the chances of name collision. -__ms_function_name="setup__test_function__$$" -eval "$__ms_function_name() { /bin/true ; }" - -# Determine which shell we are using -__ms_ksh_test=$( eval '__text="text" ; if [[ $__text =~ ^(t).* ]] ; then printf "%s" ${.sh.match[1]} ; fi' 2> /dev/null | cat ) -__ms_bash_test=$( eval 'if ( set | grep '$__ms_function_name' | grep -v name > /dev/null 2>&1 ) ; then echo t ; fi ' 2> /dev/null | cat ) - -if [[ ! -z "$__ms_ksh_test" ]] ; then - __ms_shell=ksh -elif [[ ! -z "$__ms_bash_test" ]] ; then - __ms_shell=bash -else - # Not bash or ksh, so assume sh. - __ms_shell=sh -fi - -target="" -USERNAME=`echo $LOGNAME | awk '{ print tolower($0)'}` -##--------------------------------------------------------------------------- -export hname=`hostname | cut -c 1,1` -if [[ -d /scratch1 ]] ; then - # We are on NOAA Hera - if ( ! eval module help > /dev/null 2>&1 ) ; then - echo load the module command 1>&2 - source /apps/lmod/lmod/init/$__ms_shell - fi - target=hera - module purge - module load intel - module load impi - export NCEPLIBS=/scratch2/NCEPDEV/nwprod/NCEPLIBS - module use $NCEPLIBS/modulefiles - #export WRFPATH=$NCEPLIBS/wrf.shared.new/v1.1.1/src - export myFC=mpiifort - export FCOMP=mpiifort - -##--------------------------------------------------------------------------- -elif [[ -d /gpfs/hps && -e /etc/SuSE-release ]] ; then - # We are on NOAA Luna or Surge - if ( ! eval module help > /dev/null 2>&1 ) ; then - echo load the module command 1>&2 - source /opt/modules/default/init/$__ms_shell - fi - - target=wcoss_cray - # Silence the "module purge" to avoid the expected error messages - # related to modules that load modules. - module purge > /dev/null 2>&1 - module use /usrx/local/prod/modulefiles - module use /gpfs/hps/nco/ops/nwprod/lib/modulefiles - module use /gpfs/hps/nco/ops/nwprod/modulefiles - module use /opt/cray/alt-modulefiles - module use /opt/cray/craype/default/alt-modulefiles - module use /opt/cray/ari/modulefiles - module use /opt/modulefiles - module purge > /dev/null 2>&1 - # Workaround until module issues are fixed: - #unset _LMFILES_ - #unset LOADEDMODULES - echo y 2> /dev/null | module clear > /dev/null 2>&1 - module use /usrx/local/prod/modulefiles - module use /gpfs/hps/nco/ops/nwprod/lib/modulefiles - module use /gpfs/hps/nco/ops/nwprod/modulefiles - module use /opt/cray/alt-modulefiles - module use /opt/cray/craype/default/alt-modulefiles - module use /opt/cray/ari/modulefiles - module use /opt/modulefiles - module load modules - -##--------------------------------------------------------------------------- -elif [[ -L /usrx && "$( readlink /usrx 2> /dev/null )" =~ dell ]] ; then - # We are on NOAA Venus or Mars - if ( ! eval module help > /dev/null 2>&1 ) ; then - echo load the module command 1>&2 - source /usrx/local/prod/lmod/lmod/init/$__ms_shell - fi - target=wcoss_dell_p3 - module purge - -##--------------------------------------------------------------------------- - -elif [[ -d /dcom && -d /hwrf ]] ; then - # We are on NOAA Tide or Gyre - if ( ! eval module help > /dev/null 2>&1 ) ; then - echo load the module command 1>&2 - source /usrx/local/Modules/default/init/$__ms_shell - fi - target=wcoss - module purge - -##--------------------------------------------------------------------------- -elif [[ -d /glade ]] ; then - # We are on NCAR Yellowstone - if ( ! eval module help > /dev/null 2>&1 ) ; then - echo load the module command 1>&2 - . /usr/share/Modules/init/$__ms_shell - fi - target=yellowstone - module purge - -##--------------------------------------------------------------------------- -elif [[ -d /lustre && -d /ncrc ]] ; then - # We are on GAEA. - # We are on GAEA. - echo gaea - if ( ! eval module help > /dev/null 2>&1 ) ; then - # We cannot simply load the module command. The GAEA - # /etc/profile modifies a number of module-related variables - # before loading the module command. Without those variables, - # the module command fails. Hence we actually have to source - # /etc/profile here. - source /etc/profile - __ms_source_etc_profile=yes - else - __ms_source_etc_profile=no - fi - module purge - module purge -# clean up after purge - unset _LMFILES_ - unset _LMFILES_000 - unset _LMFILES_001 - unset LOADEDMODULES - module load modules - if [[ -d /opt/cray/ari/modulefiles ]] ; then - module use -a /opt/cray/ari/modulefiles - fi - if [[ -d /opt/cray/pe/ari/modulefiles ]] ; then - module use -a /opt/cray/pe/ari/modulefiles - fi - if [[ -d /opt/cray/pe/craype/default/modulefiles ]] ; then - module use -a /opt/cray/pe/craype/default/modulefiles - fi - if [[ -s /etc/opt/cray/pe/admin-pe/site-config ]] ; then - source /etc/opt/cray/pe/admin-pe/site-config - fi - export NCEPLIBS=/lustre/f1/pdata/ncep_shared/NCEPLIBS/lib - if [[ -d "$NCEPLIBS" ]] ; then - module use $NCEPLIBS/modulefiles - fi - if [[ "$__ms_source_etc_profile" == yes ]] ; then - source /etc/profile - unset __ms_source_etc_profile - fi - -target=gaea - -# GWV ADD -module load craype -module load intel -export NCEPLIBS=/lustre/f2/dev/ncep/George.Vandenberghe/NEWCOPY/l508/lib/ -module use $NCEPLIBS/modulefiles -export myFC=ftn -export WRFPATH=$NCEPLIBS/wrf.shared.new/v1.1.1/src -export FCOMP=ftn -# END GWV ADD - -##--------------------------------------------------------------------------- -elif [[ -d /lfs3 ]] ; then - # We are on NOAA Jet - if ( ! eval module help > /dev/null 2>&1 ) ; then - echo load the module command 1>&2 - source /apps/lmod/lmod/init/$__ms_shell - fi - target=jet - module purge -module load intel/15.0.3.187 -module load impi -#export NCEPLIBS=/mnt/lfs3/projects/hfv3gfs/gwv/ljtjet/lib - export NCEPLIBS=/mnt/lfs3/projects/hfv3gfs/gwv/ljtjet/lib -export NCEPLIBS=/mnt/lfs3/projects/hfv3gfs/gwv/NCEPLIBS.15X - module use $NCEPLIBS/modulefiles -export WRFPATH=$NCEPLIBS/wrf.shared.new/v1.1.1/src -export myFC=mpiifort - -else - echo WARNING: UNKNOWN PLATFORM 1>&2 -fi - -unset __ms_shell -unset __ms_ksh_test -unset __ms_bash_test -unset $__ms_function_name -unset __ms_function_name diff --git a/sorc/ncl.setup b/sorc/ncl.setup index c848fb9887..b4981689db 100644 --- a/sorc/ncl.setup +++ b/sorc/ncl.setup @@ -1,28 +1,12 @@ -if [ $target == wcoss_dell_p3 ] -then -module load NCL/6.4.0 -fi - -if [ $target == wcoss_cray ] -then -module load gcc/4.9.2 -module load NCL-gnu-haswell/6.3.0 -fi - -if [ $target == wcoss ] -then -module load ncarg/v6.1.0 -fi - -if [ $target == jet ] -then -module load ncl/6.5.0 -export NCARG_LIB=$NCARG_ROOT/lib -fi - -if [ $target == hera ] -then -module load ncl/6.5.0 -export NCARG_LIB=$NCARG_ROOT/lib -fi - +#!/bin/bash + +set +x +case ${target} in + 'jet'|'hera') + module load ncl/6.5.0 + export NCARG_LIB=${NCARG_ROOT}/lib + ;; + *) + echo "[${BASH_SOURCE[0]}]: unknown ${target}" + ;; +esac diff --git a/sorc/partial_build.sh b/sorc/partial_build.sh index f61e0639c4..34b8b557ce 100755 --- a/sorc/partial_build.sh +++ b/sorc/partial_build.sh @@ -1,189 +1,199 @@ +#! /usr/bin/env bash # # define the array of the name of build program # - declare -a Build_prg=("Build_libs" "Build_fv3gfs" \ - "Build_gsi" \ - "Build_gldas" \ - "Build_ncep_post" \ - "Build_ufs_utils" \ - "Build_gldas" \ - "Build_gfs_wafs" \ - "Build_gaussian_sfcanl" \ - "Build_tropcy" \ - "Build_enkf_chgres_recenter" \ - "Build_enkf_chgres_recenter_nc" \ - "Build_gfs_fbwndgfs" \ - "Build_gfs_bufrsnd" \ - "Build_fv3nc2nemsio" \ - "Build_regrid_nemsio" \ - "Build_gfs_util") +declare -a Build_prg=("Build_ufs_model" \ + "Build_ww3prepost" \ + "Build_gsi_enkf" \ + "Build_gsi_utils" \ + "Build_gsi_monitor" \ + "Build_gdas" \ + "Build_upp" \ + "Build_ufs_utils" \ + "Build_gfs_utils") # # function parse_cfg: read config file and retrieve the values # - parse_cfg() { - declare -i n - declare -i num_args - declare -i total_args - declare -a all_prg - total_args=$# - num_args=$1 - (( num_args == 0 )) && return 0 - config=$2 - [[ ${config,,} == "--verbose" ]] && config=$3 - all_prg=() - for (( n = num_args + 2; n <= total_args; n++ )); do - all_prg+=( ${!n} ) - done +parse_cfg() { + declare -i n + declare -i num_args + declare -i total_args + declare -a all_prg + total_args=$# + num_args=$1 + (( num_args == 0 )) && return 0 + config=$2 + [[ ${config,,} == "--verbose" ]] && config=$3 + all_prg=() + for (( n = num_args + 2; n <= total_args; n++ )); do + all_prg+=( "${!n}" ) + done + + if [[ ${config^^} == ALL ]]; then + # + # set all values to true + # + for var in "${Build_prg[@]}"; do + eval "${var}=true" + done + elif [[ ${config} == config=* ]]; then + # + # process config file + # + cfg_file=${config#config=} + ${verbose} && echo "INFO: settings in config file: ${cfg_file}" + while read -r cline; do + # remove leading white space + clean_line="${cline#"${cline%%[![:space:]]*}"}" + { [[ -z "${clean_line}" ]] || [[ "${clean_line:0:1}" == "#" ]]; } || { + ${verbose} && echo "${clean_line}" + first9=${clean_line:0:9} + [[ ${first9,,} == "building " ]] && { + # No shellcheck, this can't be replaced by a native bash substitute + # because it uses a regex + # shellcheck disable=SC2001 + short_prg=$(sed -e 's/.*(\(.*\)).*/\1/' <<< "${clean_line}") + # shellcheck disable= + # remove trailing white space + clean_line="${cline%"${cline##*[![:space:]]}"}" + build_action=true + last5=${clean_line: -5} + [[ ${last5,,} == ". yes" ]] && build_action=true + last4=${clean_line: -4} + [[ ${last4,,} == ". no" ]] && build_action=false + found=false + for prg in "${all_prg[@]}"; do + [[ ${prg} == "Build_${short_prg}" ]] && { + found=true + eval "${prg}=${build_action}" + break + } + done + ${found} || { + echo "*** Unrecognized line in config file \"${cfg_file}\":" 2>&1 + echo "${cline}" 2>&1 + exit 3 + } + } + } + done < "${cfg_file}" + elif [[ ${config} == select=* ]]; then + # + # set all values to (default) false + # + for var in "${Build_prg[@]}"; do + eval "${var}=false" + done + # + # read command line partial build setting + # + del="" + sel_prg=${config#select=} + for separator in " " "," ";" ":" "/" "|"; do + [[ "${sel_prg/${separator}}" == "${sel_prg}" ]] || { + del=${separator} + sel_prg=${sel_prg//${del}/ } + } + done + if [[ ${del} == "" ]]; then + { + short_prg=${sel_prg} + found=false + for prg in "${all_prg[@]}"; do + [[ ${prg} == "Build_${short_prg}" ]] && { + found=true + eval "${prg}=true" + break + } + done + ${found} || { + echo "*** Unrecognized program name \"${short_prg}\" in command line" 2>&1 + exit 4 + } + } || { + for short_prg in ${sel_prg}; do + found=false + for prg in "${all_prg[@]}"; do + [[ ${prg} == "Build_${short_prg}" ]] && { + found=true + eval "${prg}=true" + break + } + done + ${found} || { + echo "*** Unrecognized program name \"${short_prg}\" in command line" 2>&1 + exit 5 + } + done + } + fi + else + echo "*** Unrecognized command line option \"${config}\"" 2>&1 + exit 6 + fi +} + + +usage() { + cat << EOF 2>&1 +Usage: ${BASH_SOURCE[0]} [-c config_file][-h][-v] + -h: + Print this help message and exit + -v: + Turn on verbose mode + -c config_file: + Override default config file to determine whether to build each program [default: gfs_build.cfg] +EOF +} - if [[ ${config^^} == ALL ]]; then -# -# set all values to true -# - for var in "${Build_prg[@]}"; do - eval "$var=true" - done - elif [[ $config == config=* ]]; then -# -# process config file -# - cfg_file=${config#config=} - $verbose && echo "INFO: settings in config file: $cfg_file" - while read cline; do -# remove leading white space - clean_line="${cline#"${cline%%[![:space:]]*}"}" - ( [[ -z "$clean_line" ]] || [[ "${clean_line:0:1}" == "#" ]] ) || { - $verbose && echo $clean_line - first9=${clean_line:0:9} - [[ ${first9,,} == "building " ]] && { - short_prg=$(sed -e 's/.*(\(.*\)).*/\1/' <<< "$clean_line") -# remove trailing white space - clean_line="${cline%"${cline##*[![:space:]]}"}" - build_action=true - last5=${clean_line: -5} - [[ ${last5,,} == ". yes" ]] && build_action=true - last4=${clean_line: -4} - [[ ${last4,,} == ". no" ]] && build_action=false - found=false - for prg in ${all_prg[@]}; do - [[ $prg == "Build_"$short_prg ]] && { - found=true - eval "$prg=$build_action" - break - } - done - $found || { - echo "*** Unrecognized line in config file \"$cfg_file\":" 2>&1 - echo "$cline" 2>&1 - exit 3 - } - } - } - done < $cfg_file - elif [[ $config == select=* ]]; then -# -# set all values to (default) false -# - for var in "${Build_prg[@]}"; do - eval "$var=false" - done -# -# read command line partial build setting -# - del="" - sel_prg=${config#select=} - for separator in " " "," ";" ":" "/" "|"; do - [[ "${sel_prg/$separator}" == "$sel_prg" ]] || { - del=$separator - sel_prg=${sel_prg//$del/ } - } - done - [[ $del == "" ]] && { - short_prg=$sel_prg - found=false - for prg in ${all_prg[@]}; do - [[ $prg == "Build_"$short_prg ]] && { - found=true - eval "$prg=true" - break - } - done - $found || { - echo "*** Unrecognized program name \"$short_prg\" in command line" 2>&1 - exit 4 - } - } || { - for short_prg in $(echo ${sel_prg}); do - found=false - for prg in ${all_prg[@]}; do - [[ $prg == "Build_"$short_prg ]] && { - found=true - eval "$prg=true" - break - } - done - $found || { - echo "*** Unrecognized program name \"$short_prg\" in command line" 2>&1 - exit 5 - } - done - } - else - echo "*** Unrecognized command line option \"$config\"" 2>&1 - exit 6 - fi - } # # read command line arguments; processing config file # - verbose=false - num_arg=$# - (( num_arg > 1 )) && { - [[ ${1,,} == "--verbose" ]] && { - verbose=true - } || { - echo "Usage: $0 [ALL|config=config_file|[select=][prog1[,prog2[,...]]]" 2>&1 - exit 1 - } - } - (( num_arg == 1 )) && { - ( [[ $1 == "-h" ]] || [[ $1 == "--help" ]] ) && { - echo "Usage: $0 [ALL|config=config_file|[select=][prog1[,prog2[,...]]]" 2>&1 - exit 2 - } - ( [[ $1 == "-v" ]] || [[ ${1,,} == "--verbose" ]] ) && { - verbose=true - num_arg=0 - } || { - echo "Usage: $0 [ALL|config=config_file|[select=][prog1[,prog2[,...]]]" 2>&1 - exit 3 - } - } +declare -a parse_argv=() +verbose=false +config_file="gfs_build.cfg" +# Reset option counter for when this script is sourced +OPTIND=1 +while getopts ":c:h:v" option; do + case "${option}" in + c) config_file="${OPTARG}";; + h) usage;; + v) + verbose=true + parse_argv+=( "--verbose" ) + ;; + :) + echo "[${BASH_SOURCE[0]}]: ${option} requires an argument" + usage + ;; + *) + echo "[${BASH_SOURCE[0]}]: Unrecognized option: ${option}" + usage + ;; + esac +done - if (( num_arg == 0 )); then -# -# set default values for partial build -# - parse_cfg 1 "config=fv3gfs_build.cfg" ${Build_prg[@]} - else +shift $((OPTIND-1)) + +parse_argv+=( "config=${config_file}" ) # # call arguments retriever/config parser # - parse_cfg $num_arg "$@" ${Build_prg[@]} - fi +parse_cfg ${#parse_argv[@]} "${parse_argv[@]}" "${Build_prg[@]}" # # print values of build array # - $verbose && { - echo "INFO: partial build settings:" - for var in "${Build_prg[@]}"; do - echo -n " $var: " - ${!var} && echo True || echo False - done - } +${verbose} && { + echo "INFO: partial build settings:" + for var in "${Build_prg[@]}"; do + echo -n " ${var}: " + "${!var}" && echo True || echo False + done +} - echo "=== end of partial build setting ===" > /dev/null +echo "=== end of partial build setting ===" > /dev/null diff --git a/sorc/regrid_nemsio.fd/Makefile b/sorc/regrid_nemsio.fd/Makefile deleted file mode 100644 index c5bfb0ed1c..0000000000 --- a/sorc/regrid_nemsio.fd/Makefile +++ /dev/null @@ -1,159 +0,0 @@ -#============================================================================== -# -# REGRID_NEMSIO Makefile -# -#============================================================================== - -#----------------------------------------------------------------------------- -# -- Parent make (calls child make) -- -#----------------------------------------------------------------------------- - -# ------------- -# General Rules -# ------------- - -SHELL=/bin/sh - -RM = /bin/rm -f -MKDIR = /bin/mkdir -p - -#------------ -# Include machine dependent compile & load options -#------------ - -MAKE_CONF = -include $(MAKE_CONF) - -# ------------- -# This makefile -# ------------- - -MAKE_FILE = Makefile - -# ----------- -# Load module -# ----------- - -EXE_FILE = regrid_nemsio - -# -------------------- -# Installing directory -# -------------------- - -INSTALL_DIR = ../../exec/ - -# -------- -# Log file -# -------- - -LOG_FILE = log.make.$(EXE_FILE) - -# --------------- -# Call child make -# --------------- - -"" : - @$(MAKE) -f $(MAKE_FILE) all - -# ------------ -# Make install -# ------------ - -install: - @echo - @echo '==== INSTALL =================================================' - @if [ -e $(INSTALL_DIR) ]; then \ - if [ ! -d $(INSTALL_DIR) ]; then \ - echo '### Fail to create installing directory ###' ;\ - echo '### Stop the installation ###' ;\ - exit ;\ - fi ;\ - else \ - echo " mkdir -p $(INSTALL_DIR)" ;\ - mkdir -p $(INSTALL_DIR) ;\ - fi - cp $(EXE_FILE) $(INSTALL_DIR) - @cd $(INSTALL_DIR) ; ls -l `pwd`/$(EXE_FILE) - -#----------- -# Make clean -# ---------- - -clean: - @echo - @echo '==== CLEAN ===================================================' - - $(RM) $(EXE_FILE) *.o *.mod - - $(RM) log.make.$(EXE_FILE) - -#----------------------------------------------------------------------------- -# -- Child make -- -#----------------------------------------------------------------------------- - -# --------- -# Libraries -# --------- - -INCS = $(NETCDF_INCLUDE) -I$(NEMSIO_INC) -LIBS = $(NEMSIO_LIB) $(BACIO_LIB4) $(W3NCO_LIBd) $(SP_LIB4) $(NETCDF_LDFLAGS) - -# ------------ -# Source files -# ------------ - -SRCSF90 = \ - kinds.f90 \ - constants.f90 \ - physcons.f90 \ - mpi_interface.f90 \ - namelist_def.f90 \ - variable_interface.f90 \ - netcdfio_interface.f90 \ - interpolation_interface.f90 \ - gfs_nems_interface.f90 \ - fv3_interface.f90 - -SRCS = $(SRCSF77) $(SRCSF90) - -# ------------ -# Object files -# ------------ - -OBJS = ${SRCSF90:.f90=.o} ${SRCSF77:.f=.o} - -# ------------ -# Dependencies -# ------------ -MAKE_DEPEND = Makefile.dependency -include $(MAKE_DEPEND) - -# ----------------------- -# Default compiling rules -# ----------------------- - -.SUFFIXES : -.SUFFIXES : .F90 .f90 .f .c .o - -.f90.o : - @echo - @echo '---> Compiling $<' - $(F90) $(FCFFLAGS) $(INCS) $(OPTIMIZATION) $(DEBUG) -c $< - -.f.o : - @echo - @echo '---> Compiling $<' - $(F77) $(FCFFLAGS) $(OPTIMIZATION) $(DEBUG) -c $< - -# ------------------------ -# Call compiler and linker -# ------------------------ - -all: REGRID_NEMSIO - -REGRID_NEMSIO: $(OBJS) - $(LD) $(LDFLAGS) $(OBJS) $(INCS) main.f90 $(LIBS) -o $(EXE_FILE) > $(LOG_FILE) - -help: - @ echo "Available targets:" - @ echo " make creates executable" - @ echo " make install creates exec & places it in bin" - @ echo " make clean cleans objects, exec, and alien files" diff --git a/sorc/regrid_nemsio.fd/Makefile.dependency b/sorc/regrid_nemsio.fd/Makefile.dependency deleted file mode 100644 index 52f6e80077..0000000000 --- a/sorc/regrid_nemsio.fd/Makefile.dependency +++ /dev/null @@ -1,9 +0,0 @@ -kinds.o: kinds.f90 -constants.o: constants.f90 kinds.o -physcons.o: physcons.f90 kinds.o -variable_interface.o: variable_interface.f90 namelist_def.o physcons.o constants.o kinds.o -namelist_def.o: namelist_def.f90 mpi_interface.o kinds.o -netcdfio_interface.o: netcdfio_interface.f90 kinds.o -interpolation_interface.o: interpolation_interface.f90 constants.o kinds.o namelist_def.o netcdfio_interface.o -gfs_nems_interface.o: gfs_nems_interface.f90 variable_interface.o constants.o kinds.o mpi_interface.o namelist_def.o -fv3_interface.o: fv3_interface.f90 variable_interface.o interpolation_interface.o constants.o kinds.o mpi_interface.o namelist_def.o netcdfio_interface.o gfs_nems_interface.o diff --git a/sorc/regrid_nemsio.fd/constants.f90 b/sorc/regrid_nemsio.fd/constants.f90 deleted file mode 100644 index 8627358e2d..0000000000 --- a/sorc/regrid_nemsio.fd/constants.f90 +++ /dev/null @@ -1,314 +0,0 @@ -! this module was extracted from the GSI version operational -! at NCEP in Dec. 2007. -module constants -!$$$ module documentation block -! . . . . -! module: constants -! prgmmr: treadon org: np23 date: 2003-09-25 -! -! abstract: This module contains the definition of various constants -! used in the gsi code -! -! program history log: -! 2003-09-25 treadon - original code -! 2004-03-02 treadon - allow global and regional constants to differ -! 2004-06-16 treadon - update documentation -! 2004-10-28 treadon - replace parameter tiny=1.e-12 with tiny_r_kind -! and tiny_single -! 2004-11-16 treadon - add huge_single, huge_r_kind parameters -! 2005-01-27 cucurull - add ione -! 2005-08-24 derber - move cg_term to constants from qcmod -! 2006-03-07 treadon - add rd_over_cp_mass -! 2006-05-18 treadon - add huge_i_kind -! 2006-06-06 su - add var-qc wgtlim, change value to 0.25 (ECMWF) -! 2006-07-28 derber - add r1000 -! -! Subroutines Included: -! sub init_constants - compute derived constants, set regional/global constants -! -! Variable Definitions: -! see below -! -! attributes: -! language: f90 -! machine: ibm RS/6000 SP -! -!$$$ - use kinds, only: r_single,r_kind,i_kind - implicit none - -! Declare constants - integer(i_kind) izero,ione - real(r_kind) rearth,grav,omega,rd,rv,cp,cv,cvap,cliq - real(r_kind) csol,hvap,hfus,psat,t0c,ttp,jcal,cp_mass,cg_term - real(r_kind) fv,deg2rad,rad2deg,pi,tiny_r_kind,huge_r_kind,huge_i_kind - real(r_kind) ozcon,rozcon,tpwcon,rd_over_g,rd_over_cp,g_over_rd - real(r_kind) amsua_clw_d1,amsua_clw_d2,constoz,zero,one,two,four - real(r_kind) one_tenth,quarter,three,five,rd_over_cp_mass - real(r_kind) rearth_equator,stndrd_atmos_ps,r1000,stndrd_atmos_lapse - real(r_kind) semi_major_axis,semi_minor_axis,n_a,n_b - real(r_kind) eccentricity,grav_polar,grav_ratio - real(r_kind) grav_equator,earth_omega,grav_constant - real(r_kind) flattening,eccentricity_linear,somigliana - real(r_kind) dldt,dldti,hsub,psatk,tmix,xa,xai,xb,xbi - real(r_kind) eps,epsm1,omeps,wgtlim - real(r_kind) elocp,cpr,el2orc,cclimit,climit,epsq - real(r_kind) pcpeff0,pcpeff1,pcpeff2,pcpeff3,rcp,c0,delta - real(r_kind) h1000,factor1,factor2,rhcbot,rhctop,dx_max,dx_min,dx_inv - real(r_kind) h300,half,cmr,cws,ke2,row,rrow - real(r_single) zero_single,tiny_single,huge_single - real(r_single) rmw_mean_distance, roic_mean_distance - logical :: constants_initialized = .true. - - -! Define constants common to global and regional applications -! name value description units -! ---- ----- ----------- ----- - parameter(rearth_equator= 6.37813662e6_r_kind) ! equatorial earth radius (m) - parameter(omega = 7.2921e-5_r_kind) ! angular velocity of earth (1/s) - parameter(cp = 1.0046e+3_r_kind) ! specific heat of air @pressure (J/kg/K) - parameter(cvap = 1.8460e+3_r_kind) ! specific heat of h2o vapor (J/kg/K) - parameter(csol = 2.1060e+3_r_kind) ! specific heat of solid h2o (ice)(J/kg/K) - parameter(hvap = 2.5000e+6_r_kind) ! latent heat of h2o condensation (J/kg) - parameter(hfus = 3.3358e+5_r_kind) ! latent heat of h2o fusion (J/kg) - parameter(psat = 6.1078e+2_r_kind) ! pressure at h2o triple point (Pa) - parameter(t0c = 2.7315e+2_r_kind) ! temperature at zero celsius (K) - parameter(ttp = 2.7316e+2_r_kind) ! temperature at h2o triple point (K) - parameter(jcal = 4.1855e+0_r_kind) ! joules per calorie () - parameter(stndrd_atmos_ps = 1013.25e2_r_kind) ! 1976 US standard atmosphere ps (Pa) - -! Numeric constants - parameter(izero = 0) - parameter(ione = 1) - parameter(zero_single = 0.0_r_single) - parameter(zero = 0.0_r_kind) - parameter(one_tenth = 0.10_r_kind) - parameter(quarter= 0.25_r_kind) - parameter(one = 1.0_r_kind) - parameter(two = 2.0_r_kind) - parameter(three = 3.0_r_kind) - parameter(four = 4.0_r_kind) - parameter(five = 5.0_r_kind) - parameter(r1000 = 1000.0_r_kind) - -! Constants for gps refractivity - parameter(n_a=77.6_r_kind) !K/mb - parameter(n_b=3.73e+5_r_kind) !K^2/mb - -! Parameters below from WGS-84 model software inside GPS receivers. - parameter(semi_major_axis = 6378.1370e3_r_kind) ! (m) - parameter(semi_minor_axis = 6356.7523142e3_r_kind) ! (m) - parameter(grav_polar = 9.8321849378_r_kind) ! (m/s2) - parameter(grav_equator = 9.7803253359_r_kind) ! (m/s2) - parameter(earth_omega = 7.292115e-5_r_kind) ! (rad/s) - parameter(grav_constant = 3.986004418e14_r_kind) ! (m3/s2) - -! Derived geophysical constants - parameter(flattening = (semi_major_axis-semi_minor_axis)/semi_major_axis)!() - parameter(somigliana = & - (semi_minor_axis/semi_major_axis) * (grav_polar/grav_equator) - one)!() - parameter(grav_ratio = (earth_omega*earth_omega * & - semi_major_axis*semi_major_axis * semi_minor_axis) / grav_constant) !() - -! Derived thermodynamic constants - parameter ( dldti = cvap-csol ) - parameter ( hsub = hvap+hfus ) - parameter ( psatk = psat*0.001_r_kind ) - parameter ( tmix = ttp-20._r_kind ) - parameter ( elocp = hvap/cp ) - parameter ( rcp = one/cp ) - -! Constants used in GFS moist physics - parameter ( h300 = 300._r_kind ) - parameter ( half = 0.5_r_kind ) - parameter ( cclimit = 0.001_r_kind ) - parameter ( climit = 1.e-20_r_kind) - parameter ( epsq = 2.e-12_r_kind ) - parameter ( h1000 = 1000.0_r_kind) - parameter ( rhcbot=0.85_r_kind ) - parameter ( rhctop=0.85_r_kind ) - parameter ( dx_max=-8.8818363_r_kind ) - parameter ( dx_min=-5.2574954_r_kind ) - parameter ( dx_inv=one/(dx_max-dx_min) ) - parameter ( c0=0.002_r_kind ) - parameter ( delta=0.6077338_r_kind ) - parameter ( pcpeff0=1.591_r_kind ) - parameter ( pcpeff1=-0.639_r_kind ) - parameter ( pcpeff2=0.0953_r_kind ) - parameter ( pcpeff3=-0.00496_r_kind ) - parameter ( cmr = one/0.0003_r_kind ) - parameter ( cws = 0.025_r_kind ) - parameter ( ke2 = 0.00002_r_kind ) - parameter ( row = 1000._r_kind ) - parameter ( rrow = one/row ) - -! Constant used to process ozone - parameter ( constoz = 604229.0_r_kind) - -! Constants used in cloud liquid water correction for AMSU-A -! brightness temperatures - parameter ( amsua_clw_d1 = 0.754_r_kind ) - parameter ( amsua_clw_d2 = -2.265_r_kind ) - -! Constants used for variational qc - parameter ( wgtlim = 0.25_r_kind) ! Cutoff weight for concluding that obs has been - ! rejected by nonlinear qc. This limit is arbitrary - ! and DOES NOT affect nonlinear qc. It only affects - ! the printout which "counts" the number of obs that - ! "fail" nonlinear qc. Observations counted as failing - ! nonlinear qc are still assimilated. Their weight - ! relative to other observations is reduced. Changing - ! wgtlim does not alter the analysis, only - ! the nonlinear qc data "count" - -! Constants describing the Extended Best-Track Reanalysis [Demuth et -! al., 2008] tropical cyclone (TC) distance for regions relative to TC -! track position; units are in kilometers - - parameter (rmw_mean_distance = 64.5479412) - parameter (roic_mean_distance = 338.319656) - -contains - subroutine init_constants_derived -!$$$ subprogram documentation block -! . . . . -! subprogram: init_constants_derived set derived constants -! prgmmr: treadon org: np23 date: 2004-12-02 -! -! abstract: This routine sets derived constants -! -! program history log: -! 2004-12-02 treadon -! 2005-03-03 treadon - add implicit none -! -! input argument list: -! -! output argument list: -! -! attributes: -! language: f90 -! machine: ibm rs/6000 sp -! -!$$$ - implicit none - -! Trigonometric constants - pi = acos(-one) - deg2rad = pi/180.0_r_kind - rad2deg = one/deg2rad - cg_term = (sqrt(two*pi))/two ! constant for variational qc - tiny_r_kind = tiny(zero) - huge_r_kind = huge(zero) - tiny_single = tiny(zero_single) - huge_single = huge(zero_single) - huge_i_kind = huge(izero) - -! Geophysical parameters used in conversion of geopotential to -! geometric height - eccentricity_linear = sqrt(semi_major_axis**2 - semi_minor_axis**2) - eccentricity = eccentricity_linear / semi_major_axis - constants_initialized = .true. - - return - end subroutine init_constants_derived - - subroutine init_constants(regional) -!$$$ subprogram documentation block -! . . . . -! subprogram: init_constants set regional or global constants -! prgmmr: treadon org: np23 date: 2004-03-02 -! -! abstract: This routine sets constants specific to regional or global -! applications of the gsi -! -! program history log: -! 2004-03-02 treadon -! 2004-06-16 treadon, documentation -! 2004-10-28 treadon - use intrinsic TINY function to set value -! for smallest machine representable positive -! number -! 2004-12-03 treadon - move derived constants to init_constants_derived -! 2005-03-03 treadon - add implicit none -! -! input argument list: -! regional - if .true., set regional gsi constants; -! otherwise (.false.), use global constants -! -! output argument list: -! -! attributes: -! language: f90 -! machine: ibm rs/6000 sp -! -!$$$ - implicit none - logical regional - real(r_kind) reradius,g,r_d,r_v,cliq_wrf - - stndrd_atmos_lapse = 0.0065 - -! Define regional constants here - if (regional) then - -! Name given to WRF constants - reradius = one/6370.e03_r_kind - g = 9.81_r_kind - r_d = 287.04_r_kind - r_v = 461.6_r_kind - cliq_wrf = 4190.0_r_kind - cp_mass = 1004.67_r_kind - -! Transfer WRF constants into unified GSI constants - rearth = one/reradius - grav = g - rd = r_d - rv = r_v - cv = cp-r_d - cliq = cliq_wrf - rd_over_cp_mass = rd / cp_mass - -! Define global constants here - else - rearth = 6.3712e+6_r_kind - grav = 9.80665e+0_r_kind - rd = 2.8705e+2_r_kind - rv = 4.6150e+2_r_kind - cv = 7.1760e+2_r_kind - cliq = 4.1855e+3_r_kind - cp_mass= zero - rd_over_cp_mass = zero - endif - - -! Now define derived constants which depend on constants -! which differ between global and regional applications. - -! Constants related to ozone assimilation - ozcon = grav*21.4e-9_r_kind - rozcon= one/ozcon - -! Constant used in vertical integral for precipitable water - tpwcon = 100.0_r_kind/grav - -! Derived atmospheric constants - fv = rv/rd-one ! used in virtual temperature equation - dldt = cvap-cliq - xa = -(dldt/rv) - xai = -(dldti/rv) - xb = xa+hvap/(rv*ttp) - xbi = xai+hsub/(rv*ttp) - eps = rd/rv - epsm1 = rd/rv-one - omeps = one-eps - factor1 = (cvap-cliq)/rv - factor2 = hvap/rv-factor1*t0c - cpr = cp*rd - el2orc = hvap*hvap/(rv*cp) - rd_over_g = rd/grav - rd_over_cp = rd/cp - g_over_rd = grav/rd - - return - end subroutine init_constants - -end module constants diff --git a/sorc/regrid_nemsio.fd/fv3_interface.f90 b/sorc/regrid_nemsio.fd/fv3_interface.f90 deleted file mode 100644 index bbe558e428..0000000000 --- a/sorc/regrid_nemsio.fd/fv3_interface.f90 +++ /dev/null @@ -1,779 +0,0 @@ -module fv3_interface - - !======================================================================= - - ! Define associated modules and subroutines - - !----------------------------------------------------------------------- - - use constants - - !----------------------------------------------------------------------- - - use gfs_nems_interface - use interpolation_interface - use mpi_interface - use namelist_def - use netcdfio_interface - use variable_interface - use nemsio_module - - !----------------------------------------------------------------------- - - implicit none - - !----------------------------------------------------------------------- - - ! Define all data and structure types for routine; these variables - ! are variables required by the subroutines within this module - - type analysis_grid - character(len=500) :: filename - character(len=500) :: filename2d - integer :: nx - integer :: ny - integer :: nz - integer :: ntime - end type analysis_grid ! type analysis_grid - - ! Define global variables - - integer n2dvar,n3dvar,ntvars,nrecs,nvvars - real(nemsio_realkind), dimension(:,:,:,:), allocatable :: fv3_var_3d - real(nemsio_realkind), dimension(:,:,:), allocatable :: fv3_var_2d - - !----------------------------------------------------------------------- - - ! Define interfaces and attributes for module routines - - private - public :: fv3_regrid_nemsio - - !----------------------------------------------------------------------- - -contains - - !----------------------------------------------------------------------- - - subroutine fv3_regrid_nemsio() - - ! Define variables computed within routine - - implicit none - type(analysis_grid) :: anlygrd(ngrids) - type(varinfo), allocatable, dimension(:) :: var_info,var_info2d,var_info3d - type(gfs_grid) :: gfs_grid - type(gridvar) :: invar,invar2 - type(gridvar) :: outvar,outvar2 - type(nemsio_meta) :: meta_nemsio2d, meta_nemsio3d - - type(esmfgrid) :: grid_bilin - type(esmfgrid) :: grid_nn - - character(len=20) :: var_name - character(len=20) :: nems_name - character(len=20) :: nems_levtyp - character(len=20) :: itrptyp - logical :: itrp_bilinear - logical :: itrp_nrstnghbr - real(nemsio_realkind), dimension(:,:), allocatable :: workgrid - real(nemsio_realkind), dimension(:), allocatable :: pk - real(nemsio_realkind), dimension(:), allocatable :: bk - real, dimension(:), allocatable :: sendbuffer,recvbuffer - integer :: fhour - integer :: ncoords - integer nems_lev,ndims,istatus,ncol,levs_fix - logical clip - - ! Define counting variables - - integer :: i, j, k, l,nlev,k2,k3,nrec - - !===================================================================== - - ! Define local variables - - call init_constants_derived() - call gfs_grid_initialize(gfs_grid) - - ! Loop through local variables - - if(mpi_procid .eq. mpi_masternode) then - print *,'variable table' - print *,'--------------' - open(912,file=trim(variable_table),form='formatted') - ntvars=0; n2dvar=0; n3dvar=0 - nrecs = 0 - loop_read: do while (istatus == 0) - read(912,199,iostat=istatus) var_name,nems_name,nems_levtyp,nems_lev,itrptyp,clip,ndims - if( istatus /= 0 ) exit loop_read - nrecs = nrecs + 1 - if(var_name(1:1) .ne. "#") then - ntvars = ntvars + 1 - ntvars = ntvars + 1 - if (ndims == 2) then - n2dvar = n2dvar+1 - else if (ndims == 3) then - n3dvar = n3dvar+1 - else - print *,'ndims must be 2 or 3 in variable_table.txt' - call mpi_abort(mpi_comm_world,-91,mpi_ierror) - stop - endif - !print *,'ntvars,n2dvar,n3dvar',ntvars,n2dvar,n3dvar - !write(6,199) var_name, nems_name,nems_levtyp,nems_lev,itrptyp,clip,ndims - endif - enddo loop_read - close(912) - print *,'nrecs,ntvars,n2dvar,n3dvar',nrecs,ntvars,n2dvar,n3dvar - endif - call mpi_bcast(nrecs,1,mpi_integer,mpi_masternode,mpi_comm_world,mpi_ierror) - call mpi_bcast(n2dvar,1,mpi_integer,mpi_masternode,mpi_comm_world,mpi_ierror) - call mpi_bcast(n3dvar,1,mpi_integer,mpi_masternode,mpi_comm_world,mpi_ierror) - call mpi_bcast(ntvars,1,mpi_integer,mpi_masternode,mpi_comm_world,mpi_ierror) - if (ntvars == 0) then - print *,'empty variable_table.txt!' - call mpi_interface_terminate() - stop - endif - allocate(var_info(ntvars)) - open(912,file=trim(variable_table),form='formatted') - k = 0 - nvvars = 0 ! number of vector variables - do nrec = 1, nrecs - read(912,199,iostat=istatus) var_name,nems_name,nems_levtyp,nems_lev,itrptyp,clip,ndims - if (var_name(1:1) .ne. "#") then - k = k + 1 - var_info(k)%var_name = var_name - var_info(k)%nems_name = nems_name - var_info(k)%nems_levtyp = nems_levtyp - var_info(k)%nems_lev = nems_lev - var_info(k)%itrptyp = itrptyp - if (itrptyp.EQ.'vector') then - nvvars=nvvars+1 - endif - var_info(k)%clip = clip - var_info(k)%ndims = ndims - if(mpi_procid .eq. mpi_masternode) then - write(6,199) var_info(k)%var_name, var_info(k)%nems_name,var_info(k)%nems_levtyp, & - var_info(k)%nems_lev,var_info(k)%itrptyp,var_info(k)%clip,var_info(k)%ndims - endif - endif - end do ! do k = 1, ntvars - ! assume vectors are in pairs - nvvars=nvvars/2 - call mpi_bcast(nvvars,1,mpi_integer,mpi_masternode,mpi_comm_world,mpi_ierror) - close(912) -199 format(a20,1x,a20,1x,a20,1x,i1,1x,a20,1x,l1,1x,i1) - allocate(var_info3d(n3dvar+2)) - allocate(var_info2d(n2dvar)) - k2 = 0 - k3 = 0 - do k=1,ntvars - if (var_info(k)%ndims == 2) then - k2 = k2 + 1 - var_info2d(k2) = var_info(k) - endif - if (var_info(k)%ndims == 3 .or. & - trim(var_info(k)%nems_name) == 'pres' .or. & - trim(var_info(k)%nems_name) == 'orog') then - k3 = k3 + 1 - var_info3d(k3) = var_info(k) - ! orography called 'hgt' in 3d file, not 'orog' - if (trim(var_info(k)%nems_name) == 'orog') then - var_info3d(k3)%nems_name = 'hgt ' - endif - endif - enddo - - - do i = 1, ngrids - anlygrd(i)%filename = analysis_filename(i) - anlygrd(i)%filename2d = analysis_filename2d(i) - call fv3_regrid_initialize(anlygrd(i)) - end do ! do i = 1, ngrids - - ! Define local variables - - ncxdim = anlygrd(1)%nx - ncydim = anlygrd(1)%ny - if (n3dvar > 0) then - nczdim = anlygrd(1)%nz - else - nczdim = 0 - endif - nctdim = anlygrd(1)%ntime - ncoords = ncxdim*ncydim - invar%ncoords = ncoords*ngrids - invar2%ncoords = ncoords*ngrids - outvar%ncoords = gfs_grid%ncoords - outvar2%ncoords = gfs_grid%ncoords - call interpolation_initialize_gridvar(invar) - call interpolation_initialize_gridvar(invar2) - call interpolation_initialize_gridvar(outvar) - call interpolation_initialize_gridvar(outvar2) - meta_nemsio3d%modelname = 'GFS' - meta_nemsio3d%version = 200509 - meta_nemsio3d%nrec = 2 + nczdim*n3dvar - meta_nemsio3d%nmeta = 5 - meta_nemsio3d%nmetavari = 3 - meta_nemsio3d%nmetaaryi = 1 - meta_nemsio3d%dimx = gfs_grid%nlons - meta_nemsio3d%dimy = gfs_grid%nlats - meta_nemsio3d%dimz = nczdim - meta_nemsio3d%jcap = ntrunc - meta_nemsio3d%nsoil = 4 - meta_nemsio3d%nframe = 0 - meta_nemsio3d%ntrac = 3 - meta_nemsio3d%idrt = 4 - meta_nemsio3d%ncldt = 3 - meta_nemsio3d%idvc = 2 - meta_nemsio3d%idvm = 2 - meta_nemsio3d%idsl = 1 - meta_nemsio3d%idate(1:6) = 0 - meta_nemsio3d%idate(7) = 1 - read(forecast_timestamp(9:10),'(i2)') meta_nemsio3d%idate(4) - read(forecast_timestamp(7:8), '(i2)') meta_nemsio3d%idate(3) - read(forecast_timestamp(5:6), '(i2)') meta_nemsio3d%idate(2) - read(forecast_timestamp(1:4), '(i4)') meta_nemsio3d%idate(1) - meta_nemsio2d = meta_nemsio3d - meta_nemsio2d%nrec = n2dvar - call mpi_barrier(mpi_comm_world,mpi_ierror) - call gfs_nems_meta_initialization(meta_nemsio2d,var_info2d,gfs_grid) - call gfs_nems_meta_initialization(meta_nemsio3d,var_info3d,gfs_grid) - - ! Allocate memory for local variables - - if(.not. allocated(fv3_var_2d) .and. n2dvar > 0) & - & allocate(fv3_var_2d(ngrids,ncxdim,ncydim)) - if (mpi_nprocs /= nczdim+1) then - call mpi_barrier(mpi_comm_world, mpi_ierror) - if (mpi_procid .eq. mpi_masternode) then - print *,'number of mpi tasks must be equal to number of levels + 1' - print *,'mpi procs = ',mpi_nprocs,' levels = ',nczdim - endif - call mpi_interface_terminate() - stop - endif - !print *,'allocate fv3_var_3d',ngrids,ncxdim,ncydim,nczdim,mpi_procid - if(.not. allocated(fv3_var_3d) .and. n3dvar > 0) & - & allocate(fv3_var_3d(ngrids,ncxdim,ncydim,nczdim)) - !print *,'done allocating fv3_var_3d',ngrids,ncxdim,ncydim,nczdim,mpi_procid - - ! Check local variable and proceed accordingly - - call mpi_barrier(mpi_comm_world,mpi_ierror) - if(mpi_procid .eq. mpi_masternode) then - - ! Allocate memory for local variables - - if (n3dvar > 0) then - if(.not. allocated(pk)) allocate(pk(nczdim+1)) - if(.not. allocated(bk)) allocate(bk(nczdim+1)) - - ! Define local variables - - if (trim(gfs_hyblevs_filename) == 'NOT USED' ) then - call netcdfio_values_1d(anlygrd(1)%filename,'pk',pk) - call netcdfio_values_1d(anlygrd(1)%filename,'bk',bk) - else - open(913,file=trim(gfs_hyblevs_filename),form='formatted') - read(913,*) ncol, levs_fix - if (levs_fix /= (nczdim+1) ) then - call mpi_barrier(mpi_comm_world, mpi_ierror) - print *,'levs in ', trim(gfs_hyblevs_filename), ' not equal to',(nczdim+1) - call mpi_interface_terminate() - stop - endif - do k=nczdim+1,1,-1 - read(913,*) pk(k),bk(k) - enddo - close(913) - endif - if (minval(pk) < -1.e10 .or. minval(bk) < -1.e10) then - print *,'pk,bk not found in netcdf file..' - meta_nemsio3d%vcoord = -9999._nemsio_realkind - else - ! Loop through local variable - - do k = 1, nczdim + 1 - - ! Define local variables - - meta_nemsio3d%vcoord((nczdim + 1) - k + 1,1,1) = pk(k) - meta_nemsio3d%vcoord((nczdim + 1) - k + 1,2,1) = bk(k) - - end do ! do k = 1, nczdim + 1 - endif - endif - - end if ! if(mpi_procid .eq. mpi_masternode) - - ! initialize/read in interpolation weight - - grid_bilin%filename = esmf_bilinear_filename - call interpolation_initialize_esmf(grid_bilin) - - grid_nn%filename = esmf_neareststod_filename - call interpolation_initialize_esmf(grid_nn) - - do l = 1, nctdim - - ncrec = l ! time level to read from netcdf file - - ! Define local variables - - call fv3_grid_fhour(anlygrd(1),meta_nemsio2d%nfhour) - call fv3_grid_fhour(anlygrd(1),meta_nemsio3d%nfhour) - meta_nemsio3d%nfminute = int(0.0) - meta_nemsio3d%nfsecondn = int(0.0) - meta_nemsio3d%nfsecondd = int(1.0) - meta_nemsio3d%fhour = meta_nemsio3d%nfhour - meta_nemsio2d%nfminute = int(0.0) - meta_nemsio2d%nfsecondn = int(0.0) - meta_nemsio2d%nfsecondd = int(1.0) - meta_nemsio2d%fhour = meta_nemsio2d%nfhour - - ! initialize nemsio file. - if(mpi_procid .eq. mpi_masternode) then - call gfs_nems_initialize(meta_nemsio2d, meta_nemsio3d) - end if - - ! wait here. - call mpi_barrier(mpi_comm_world,mpi_ierror) - - ! Loop through local variables - k2=1 - do k = 1, ntvars - nvvars - - ! Define local variables - - itrp_bilinear = .false. - itrp_nrstnghbr = .false. - - ! Do 2D variables. - - if(var_info(k2)%ndims .eq. 2) then - - ! Check local variable and proceed accordingly - - if(mpi_procid .eq. mpi_masternode) then - - ! Check local variable and proceed accordingly - - call fv3_grid_read(anlygrd(1:ngrids), var_info(k2)%var_name,.true.,.false.) - - call interpolation_define_gridvar(invar,ncxdim,ncydim, ngrids,fv3_var_2d) - if (trim(var_info(k2)%nems_name) == 'pres') then - ! interpolate in exner(pressure) - invar%var = (invar%var/stndrd_atmos_ps)**(rd_over_g*stndrd_atmos_lapse) - end if - - if(var_info(k2)%itrptyp .eq. 'bilinear') then - call interpolation_esmf(invar,outvar,grid_bilin, .false.) - end if - - if(var_info(k2)%itrptyp .eq. 'nrstnghbr') then - call interpolation_esmf(invar,outvar,grid_nn, .true.) - end if - - if (trim(var_info(k2)%nems_name) == 'pres') then - outvar%var = stndrd_atmos_ps*(outvar%var**(g_over_rd/stndrd_atmos_lapse)) - end if - - if(var_info(k2)%itrptyp .eq. 'vector') then - ! read in u winds - call fv3_grid_read(anlygrd(1:ngrids), var_info(k2)%var_name,.true.,.false.) - call interpolation_define_gridvar(invar,ncxdim,ncydim,ngrids,fv3_var_2d) - ! read in v winds - call fv3_grid_read(anlygrd(1:ngrids), var_info(k2+1)%var_name,.true.,.false.) - call interpolation_define_gridvar(invar2,ncxdim,ncydim,ngrids,fv3_var_2d) - call interpolation_esmf_vect(invar,invar2,grid_bilin,outvar,outvar2) - end if - - ! Clip variable to zero if desired. - if(var_info(k2)%clip) call variable_clip(outvar%var) - - ! Write to NEMSIO file. - call gfs_nems_write('2d',real(outvar%var), & - var_info(k2)%nems_name,var_info(k2)%nems_levtyp,var_info(k2)%nems_lev) - if (trim(var_info(k2)%nems_name) == 'pres' .or. & - trim(var_info(k2)%nems_name) == 'orog' .or. & - trim(var_info(k2)%nems_name) == 'hgt') then - ! write surface height and surface pressure to 3d file. - ! (surface height called 'orog' in nemsio bin4, 'hgt' in - ! grib) - if (trim(var_info(k2)%nems_name) == 'orog') then - call gfs_nems_write('3d',real(outvar%var), & - 'hgt ',var_info(k2)%nems_levtyp,1) - else - call gfs_nems_write('3d',real(outvar%var), & - var_info(k2)%nems_name,var_info(k2)%nems_levtyp,1) - endif - endif - if(var_info(k2)%itrptyp .eq. 'vector') then ! write v winds - call gfs_nems_write('2d',real(outvar2%var), & - var_info(k2+1)%nems_name,var_info(k2+1)%nems_levtyp,var_info(k2+1)%nems_lev) - endif - end if ! if(mpi_procid .eq. mpi_masternode) - - ! Define local variables - call mpi_barrier(mpi_comm_world,mpi_ierror) - - end if ! if(var_info(k2)%ndims .eq. 2) - - ! Do 3D variables. - - if(var_info(k2)%ndims .eq. 3) then - - ! read 3d grid on master node, send to other tasks - if(mpi_procid .eq. mpi_masternode) then - call fv3_grid_read(anlygrd(1:ngrids), var_info(k2)%var_name,.false.,.true.) - do nlev=1,nczdim - call mpi_send(fv3_var_3d(1,1,1,nlev),ngrids*ncxdim*ncydim,mpi_real,& - nlev,1,mpi_comm_world,mpi_errorstatus,mpi_ierror) - enddo - if(trim(adjustl(var_info(k2)%itrptyp)) .eq. 'vector') then ! winds - call mpi_barrier(mpi_comm_world,mpi_ierror) - call fv3_grid_read(anlygrd(1:ngrids), var_info(k2+1)%var_name,.false.,.true.) - do nlev=1,nczdim - call mpi_send(fv3_var_3d(1,1,1,nlev),ngrids*ncxdim*ncydim,mpi_real,& - nlev,1,mpi_comm_world,mpi_errorstatus,mpi_ierror) - enddo - endif - else if (mpi_procid .le. nczdim) then - ! do interpolation, one level on each task. - call mpi_recv(fv3_var_3d(1,1,1,mpi_procid),ngrids*ncxdim*ncydim,mpi_real,& - 0,1,mpi_comm_world,mpi_errorstatus,mpi_ierror) - - call interpolation_define_gridvar(invar,ncxdim,ncydim, ngrids,fv3_var_3d(:,:,:,mpi_procid)) - - if(var_info(k2)%itrptyp .eq. 'bilinear') then - call interpolation_esmf(invar,outvar,grid_bilin, .false.) - end if ! if(var_info(k2)%itrptyp .eq. 'bilinear') - - if(var_info(k2)%itrptyp .eq. 'nrstnghbr') then - call interpolation_esmf(invar,outvar,grid_nn, .true.) - end if ! if(var_info(k2)%itrptyp .eq. 'nrstnghbr') - - if(trim(adjustl(var_info(k2)%itrptyp)) .eq. 'vector') then ! winds - call mpi_barrier(mpi_comm_world,mpi_ierror) - call mpi_recv(fv3_var_3d(1,1,1,mpi_procid),ngrids*ncxdim*ncydim,mpi_real,& - 0,1,mpi_comm_world,mpi_errorstatus,mpi_ierror) - call interpolation_define_gridvar(invar2,ncxdim,ncydim,ngrids,fv3_var_3d(:,:,:,mpi_procid)) - call interpolation_esmf_vect(invar,invar2,grid_bilin,outvar,outvar2) - endif - - if(var_info(k2)%clip) call variable_clip(outvar%var(:)) - - end if ! if(mpi_procid .ne. mpi_masternode .and. & - ! mpi_procid .le. nczdim) - - ! gather results back on root node to write out. - - if (mpi_procid == mpi_masternode) then - ! receive one level of interpolated data on root task. - if (.not. allocated(workgrid)) allocate(workgrid(gfs_grid%ncoords,nczdim)) - if (.not. allocated(recvbuffer)) allocate(recvbuffer(gfs_grid%ncoords)) - do nlev=1,nczdim - call mpi_recv(recvbuffer,gfs_grid%ncoords,mpi_real,& - nlev,1,mpi_comm_world,mpi_errorstatus,mpi_ierror) - workgrid(:,nlev) = recvbuffer - enddo - deallocate(recvbuffer) - else - ! send one level of interpolated data to root task. - if (.not. allocated(sendbuffer)) allocate(sendbuffer(gfs_grid%ncoords)) - sendbuffer(:) = outvar%var(:) - call mpi_send(sendbuffer,gfs_grid%ncoords,mpi_real,& - 0,1,mpi_comm_world,mpi_errorstatus,mpi_ierror) - endif - - ! Write to NEMSIO file. - - if(mpi_procid .eq. mpi_masternode) then - - ! Loop through local variable - - do j = 1, nczdim - - ! Define local variables - - call gfs_nems_write('3d',workgrid(:,nczdim - j + 1), & - & var_info(k2)%nems_name,var_info(k2)%nems_levtyp, & - & j) - - end do ! do j = 1, nczdim - - end if ! if(mpi_procid .eq. mpi_masternode) - - if(trim(adjustl(var_info(k2)%itrptyp)) .eq. 'vector') then ! winds - if (mpi_procid == mpi_masternode) then - ! receive one level of interpolated data on root task. - if (.not. allocated(workgrid)) allocate(workgrid(gfs_grid%ncoords,nczdim)) - if (.not. allocated(recvbuffer)) allocate(recvbuffer(gfs_grid%ncoords)) - do nlev=1,nczdim - call mpi_recv(recvbuffer,gfs_grid%ncoords,mpi_real,& - nlev,1,mpi_comm_world,mpi_errorstatus,mpi_ierror) - workgrid(:,nlev) = recvbuffer - enddo - deallocate(recvbuffer) - else - ! send one level of interpolated data to root task. - if (.not. allocated(sendbuffer)) allocate(sendbuffer(gfs_grid%ncoords)) - sendbuffer(:) = outvar2%var(:) - call mpi_send(sendbuffer,gfs_grid%ncoords,mpi_real,& - 0,1,mpi_comm_world,mpi_errorstatus,mpi_ierror) - endif - - ! Write to NEMSIO file. - - if(mpi_procid .eq. mpi_masternode) then - - do j = 1, nczdim - - call gfs_nems_write('3d',workgrid(:,nczdim - j + 1), & - & var_info(k2+1)%nems_name,var_info(k2+1)%nems_levtyp, & - & j) - end do ! do j = 1, nczdim - - end if ! if(mpi_procid .eq. mpi_masternode) - endif - - ! wait here - - call mpi_barrier(mpi_comm_world,mpi_ierror) - - end if ! if(var_info(k2)%ndims .eq. 3) - if(var_info(k2)%itrptyp .eq. 'vector') then ! skip v record here - k2=k2+1 - endif - k2=k2+1 - end do ! do k = 1, ntvars - - ! Wait here. - - call mpi_barrier(mpi_comm_world,mpi_ierror) - - ! Finalize and cleanup - - if(mpi_procid .eq. mpi_masternode) then - call gfs_nems_finalize() - end if - call mpi_barrier(mpi_comm_world,mpi_ierror) - if(allocated(workgrid)) deallocate(workgrid) - - end do ! do l = 1, nctdim - - -!===================================================================== - - end subroutine fv3_regrid_nemsio - - !======================================================================= - - ! fv3_regrid_initialize.f90: - - !----------------------------------------------------------------------- - - subroutine fv3_regrid_initialize(grid) - - ! Define variables passed to routine - - implicit none - type(analysis_grid) :: grid - - !===================================================================== - - ! Define local variables - - call netcdfio_dimension(grid%filename,'grid_xt',grid%nx) - call netcdfio_dimension(grid%filename,'grid_yt',grid%ny) - if (n3dvar > 0) then - call netcdfio_dimension(grid%filename,'pfull',grid%nz) - else - grid%nz = 0 - endif - call netcdfio_dimension(grid%filename,'time',grid%ntime) - - !===================================================================== - - end subroutine fv3_regrid_initialize - - !======================================================================= - - ! fv3_grid_read.f90: - - !----------------------------------------------------------------------- - - subroutine fv3_grid_read(anlygrd,varname,is_2d,is_3d) - - ! Define variables passed to subroutine - - type(analysis_grid) :: anlygrd(ngrids) - character(len=20) :: varname - logical :: is_2d - logical :: is_3d - - ! Define counting variables - - integer :: i, j, k - - !===================================================================== - - ! Loop through local variable - - do k = 1, ngrids - - ! Check local variable and proceed accordingly - - if(debug) write(6,500) ncrec, k - if(is_2d) then - - ! Define local variables - - ! orog and psfc are in 3d file. - if (trim(varname) == 'orog' .or. trim(varname) == 'psfc') then - call netcdfio_values_2d(anlygrd(k)%filename,varname, & - & fv3_var_2d(k,:,:)) - else - call netcdfio_values_2d(anlygrd(k)%filename2d,varname, & - & fv3_var_2d(k,:,:)) - endif - - end if ! if(is_2d) - - ! Check local variable and proceed accordingly - - if(is_3d) then - - ! Define local variables - - call netcdfio_values_3d(anlygrd(k)%filename,varname, & - & fv3_var_3d(k,:,:,:)) - - end if ! if(is_3d) - - end do ! do k = 1, ngrids - - !===================================================================== - - ! Define format statements - -500 format('FV3_GRID_READ: Time record = ', i6, '; Cubed sphere face = ', & - & i1,'.') - - !===================================================================== - - end subroutine fv3_grid_read - - !======================================================================= - - ! fv3_grid_fhour.f90: - - !----------------------------------------------------------------------- - - subroutine fv3_grid_fhour(grid,fhour) - - ! Define variables passed to routine - - implicit none - type(analysis_grid) :: grid - integer :: fhour - - ! Define variables computed within routine - - real(nemsio_realkind) :: workgrid(grid%ntime) - real(nemsio_realkind) :: start_jday - real(nemsio_realkind) :: fcst_jday - integer :: year - integer :: month - integer :: day - integer :: hour - integer :: minute - integer :: second, iw3jdn - character(len=80) timeunits - - !===================================================================== - - ! Define local variables - - read(forecast_timestamp(1:4), '(i4)') year - read(forecast_timestamp(5:6), '(i2)') month - read(forecast_timestamp(7:8), '(i2)') day - read(forecast_timestamp(9:10),'(i2)') hour - minute = 0; second = 0 - - ! Compute local variables - - ! 'flux day' (days since dec 31 1900) - !call date2wnday(start_jday,year,month,day) - ! same as above, but valid after 2099 - start_jday=real(iw3jdn(year,month,day)-iw3jdn(1900,12,31)) - start_jday = start_jday + real(hour)/24.0 + real(minute)/1440.0 + & - & real(second)/86400.0 - - ! Define local variables - - call netcdfio_values_1d(grid%filename,'time',workgrid) - call netcdfio_variable_attr(grid%filename,'time','units',timeunits) - - ! Compute local variables - - ! ncrec is a global variable in the netcdfio-interface module - if (timeunits(1:4) == 'days') then - fcst_jday = start_jday + workgrid(ncrec) - else if (timeunits(1:5) == 'hours') then - fcst_jday = start_jday + workgrid(ncrec)/24. - else if (timeunits(1:7) == 'seconds') then - fcst_jday = start_jday + workgrid(ncrec)/86400.0 - else - print *,'unrecognized time units',trim(timeunits) - call mpi_interface_terminate() - stop - endif - fhour = nint((86400*(fcst_jday - start_jday))/3600.0) - - !===================================================================== - - end subroutine fv3_grid_fhour - -! SUBROUTINE DATE2WNDAY(WDAY, IYR,MON,IDY) -! IMPLICIT NONE -! INTEGER IYR,MON,IDY -! REAL WDAY -!! -!!********** -!!* -!! 1) CONVERT DATE INTO 'FLUX DAY'. -!! -!! 2) THE 'FLUX DAY' IS THE NUMBER OF DAYS SINCE 001/1901 (WHICH IS -!! FLUX DAY 1.0). -!! FOR EXAMPLE: -!! A) IYR=1901,MON=1,IDY=1, REPRESENTS 0000Z HRS ON 01/01/1901 -!! SO WDAY WOULD BE 1.0. -!! A) IYR=1901,MON=1,IDY=2, REPRESENTS 0000Z HRS ON 02/01/1901 -!! SO WDAY WOULD BE 2.0. -!! YEAR MUST BE NO LESS THAN 1901.0, AND NO GREATER THAN 2099.0. -!! NOTE THAT YEAR 2000 IS A LEAP YEAR (BUT 1900 AND 2100 ARE NOT). -!! -!! 3) ALAN J. WALLCRAFT, NAVAL RESEARCH LABORATORY, JULY 2002. -!!* -!!********** -!! -! INTEGER NLEAP -! REAL WDAY1 -! REAL MONTH(13) -! DATA MONTH / 0, 31, 59, 90, 120, 151, 181, & -! 212, 243, 273, 304, 334, 365 / -!! FIND THE RIGHT YEAR. -! NLEAP = (IYR-1901)/4 -! WDAY = 365.0*(IYR-1901) + NLEAP + MONTH(MON) + IDY -! IF (MOD(IYR,4).EQ.0 .AND. MON.GT.2) THEN -! WDAY = WDAY + 1.0 -! ENDIF -! END SUBROUTINE DATE2WNDAY - - !======================================================================= - -end module fv3_interface diff --git a/sorc/regrid_nemsio.fd/gfs_nems_interface.f90 b/sorc/regrid_nemsio.fd/gfs_nems_interface.f90 deleted file mode 100644 index aa1305dc01..0000000000 --- a/sorc/regrid_nemsio.fd/gfs_nems_interface.f90 +++ /dev/null @@ -1,595 +0,0 @@ -module gfs_nems_interface - - !======================================================================= - - ! Define associated modules and subroutines - - !----------------------------------------------------------------------- - - use constants - use kinds - - !----------------------------------------------------------------------- - - use interpolation_interface - use mpi_interface - use namelist_def - use nemsio_module - use netcdfio_interface - use variable_interface - - !----------------------------------------------------------------------- - - implicit none - - !----------------------------------------------------------------------- - - ! Define all data and structure types for routine; these variables - ! are variables required by the subroutines within this module - - type gfs_grid - real(r_kind), dimension(:,:), allocatable :: rlon - real(r_kind), dimension(:,:), allocatable :: rlat - integer :: ncoords - integer :: nlons - integer :: nlats - integer :: nz - end type gfs_grid ! type gfs_grid - - type nemsio_meta - character(nemsio_charkind), dimension(:), allocatable :: recname - character(nemsio_charkind), dimension(:), allocatable :: reclevtyp - character(nemsio_charkind), dimension(:), allocatable :: variname - character(nemsio_charkind), dimension(:), allocatable :: varr8name - character(nemsio_charkind), dimension(:), allocatable :: aryiname - character(nemsio_charkind), dimension(:), allocatable :: aryr8name - character(nemsio_charkind8) :: gdatatype - character(nemsio_charkind8) :: modelname - real(nemsio_realkind), dimension(:,:,:), allocatable :: vcoord - real(nemsio_realkind), dimension(:), allocatable :: lon - real(nemsio_realkind), dimension(:), allocatable :: lat - integer(nemsio_intkind), dimension(:,:), allocatable :: aryival - integer(nemsio_intkind), dimension(:), allocatable :: reclev - integer(nemsio_intkind), dimension(:), allocatable :: varival - integer(nemsio_intkind), dimension(:), allocatable :: aryilen - integer(nemsio_intkind), dimension(:), allocatable :: aryr8len - integer(nemsio_intkind) :: idate(7) - integer(nemsio_intkind) :: version - integer(nemsio_intkind) :: nreo_vc - integer(nemsio_intkind) :: nrec - integer(nemsio_intkind) :: nmeta - integer(nemsio_intkind) :: nmetavari - integer(nemsio_intkind) :: nmetaaryi - integer(nemsio_intkind) :: nfhour - integer(nemsio_intkind) :: nfminute - integer(nemsio_intkind) :: nfsecondn - integer(nemsio_intkind) :: nfsecondd - integer(nemsio_intkind) :: jcap - integer(nemsio_intkind) :: dimx - integer(nemsio_intkind) :: dimy - integer(nemsio_intkind) :: dimz - integer(nemsio_intkind) :: nframe - integer(nemsio_intkind) :: nsoil - integer(nemsio_intkind) :: ntrac - integer(nemsio_intkind) :: ncldt - integer(nemsio_intkind) :: idvc - integer(nemsio_intkind) :: idsl - integer(nemsio_intkind) :: idvm - integer(nemsio_intkind) :: idrt - integer(nemsio_intkind) :: fhour - end type nemsio_meta ! type nemsio_meta - - !----------------------------------------------------------------------- - - ! Define global variables - - type(nemsio_gfile) :: gfile2d,gfile3d - integer :: nemsio_iret - - !----------------------------------------------------------------------- - - ! Define interfaces and attributes for module routines - - private - public :: gfs_grid_initialize - public :: gfs_grid_cleanup - public :: gfs_grid - public :: gfs_nems_meta_initialization - public :: gfs_nems_meta_cleanup - public :: gfs_nems_initialize - public :: gfs_nems_finalize - public :: gfs_nems_write - public :: nemsio_meta - -contains - - !======================================================================= - - ! gfs_nems_write.f90: - - !----------------------------------------------------------------------- - - subroutine gfs_nems_write(c2dor3d,nems_data,nems_varname,nems_levtyp,nems_lev) - - ! Define variables passed to routine - - character(nemsio_charkind) :: nems_varname - character(nemsio_charkind) :: nems_levtyp - real(nemsio_realkind) :: nems_data(:) - integer(nemsio_intkind) :: nems_lev - character(len=2) :: c2dor3d - - !===================================================================== - - ! Define local variables - - if (c2dor3d == '2d') then - call nemsio_writerecv(gfile2d,trim(adjustl(nems_varname)),levtyp= & - & trim(adjustl(nems_levtyp)),lev=nems_lev,data=nems_data, & - & iret=nemsio_iret) - else if (c2dor3d == '3d') then - call nemsio_writerecv(gfile3d,trim(adjustl(nems_varname)),levtyp= & - & trim(adjustl(nems_levtyp)),lev=nems_lev,data=nems_data, & - & iret=nemsio_iret) - else - nemsio_iret=-99 - endif - - ! Check local variable and proceed accordingly - - if(debug) write(6,500) c2dor3d,trim(adjustl(nems_varname)), nemsio_iret, & - & nems_lev, minval(nems_data), maxval(nems_data) - - !===================================================================== - - ! Define format statements - -500 format('GFS_NEMS_WRITE',a2,': NEMS I/O name = ', a, '; writerecv return ', & - & 'code = ', i5,'; level = ', i3, '; (min,max) = (', f13.5,f13.5, & - & ').') - if (nemsio_iret /= 0) then - print *,'nemsio_writerecv failed, stopping...' - call mpi_interface_terminate() - stop - endif - - !===================================================================== - - end subroutine gfs_nems_write - - !======================================================================= - - ! gfs_nems_meta_initialization.f90: - - !----------------------------------------------------------------------- - - subroutine gfs_nems_meta_initialization(meta_nemsio,var_info,grid) - - ! Define variables passed to routine - - type(nemsio_meta) :: meta_nemsio - type(varinfo) :: var_info(:) - type(gfs_grid) :: grid - - ! Define variables computed within routine - - integer :: offset - integer :: n2dvar - integer :: n3dvar - - ! Define counting variables - - integer :: i, j, k - - !===================================================================== - - ! Allocate memory for local variables - - if(.not. allocated(meta_nemsio%recname)) & - & allocate(meta_nemsio%recname(meta_nemsio%nrec)) - if(.not. allocated(meta_nemsio%reclevtyp)) & - & allocate(meta_nemsio%reclevtyp(meta_nemsio%nrec)) - if(.not. allocated(meta_nemsio%reclev)) & - & allocate(meta_nemsio%reclev(meta_nemsio%nrec)) - if(.not. allocated(meta_nemsio%variname)) & - & allocate(meta_nemsio%variname(meta_nemsio%nmetavari)) - if(.not. allocated(meta_nemsio%varival)) & - & allocate(meta_nemsio%varival(meta_nemsio%nmetavari)) - if(.not. allocated(meta_nemsio%aryiname)) & - & allocate(meta_nemsio%aryiname(meta_nemsio%nmetaaryi)) - if(.not. allocated(meta_nemsio%aryilen)) & - & allocate(meta_nemsio%aryilen(meta_nemsio%nmetaaryi)) - if(.not. allocated(meta_nemsio%vcoord)) & - & allocate(meta_nemsio%vcoord(meta_nemsio%dimz+1,3,2)) - if(.not. allocated(meta_nemsio%aryival)) & - & allocate(meta_nemsio%aryival(grid%nlats/2, & - & meta_nemsio%nmetaaryi)) - if(.not. allocated(meta_nemsio%lon)) & - & allocate(meta_nemsio%lon(grid%ncoords)) - if(.not. allocated(meta_nemsio%lat)) & - & allocate(meta_nemsio%lat(grid%ncoords)) - meta_nemsio%vcoord(:,:,:)=0.0 - ! Define local variables - - meta_nemsio%lon = & - & reshape(grid%rlon,(/grid%ncoords/)) - meta_nemsio%lat = & - & reshape(grid%rlat,(/grid%ncoords/)) - meta_nemsio%aryilen(1) = grid%nlats/2 - meta_nemsio%aryiname(1) = 'lpl' - meta_nemsio%aryival(1:grid%nlats/2,1) = grid%nlons - k = 0 - - ! Loop through local variable - offset = 0 - n3dvar = 0 - n2dvar = 0 - - - do i = 1, size(var_info) - - ! Check local variable and proceed accordingly - - if(var_info(i)%ndims .eq. 2) then - - ! Define local variables - - k = k + 1 - meta_nemsio%reclev(k) = var_info(i)%nems_lev - meta_nemsio%recname(k) = trim(adjustl(var_info(i)%nems_name)) - meta_nemsio%reclevtyp(k) = trim(adjustl(var_info(i)%nems_levtyp)) - n2dvar = k - - else if(var_info(i)%ndims .eq. 3) then - - ! Loop through local variable - - meta_nemsio%variname(1) = 'LEVS' - meta_nemsio%varival(1) = meta_nemsio%dimz - meta_nemsio%variname(2) = 'NVCOORD' - meta_nemsio%varival(2) = 2 - meta_nemsio%variname(3) = 'IVS' - meta_nemsio%varival(3) = 200509 - do k = 1, meta_nemsio%dimz - - ! Define local variables - - meta_nemsio%reclev(k+n2dvar+offset) = k - meta_nemsio%recname(k+n2dvar+offset) = & - & trim(adjustl(var_info(i)%nems_name)) - meta_nemsio%reclevtyp(k+n2dvar+offset) = & - & trim(adjustl(var_info(i)%nems_levtyp)) - - end do ! do k = 1, nczdim - - ! Define local variables - - n3dvar = n3dvar + 1 - offset = nczdim*n3dvar - - end if ! if(var_info(i)%ndims .eq. 3) - - end do ! do i = 1, size(var_info) - - !===================================================================== - - end subroutine gfs_nems_meta_initialization - - !======================================================================= - - ! gfs_nems_meta_cleanup.f90: - - !----------------------------------------------------------------------- - - subroutine gfs_nems_meta_cleanup(meta_nemsio2d,meta_nemsio3d) - - ! Define variables passed to routine - - type(nemsio_meta) :: meta_nemsio2d,meta_nemsio3d - - !===================================================================== - - ! Deallocate memory for local variables - - if(allocated(meta_nemsio2d%recname)) & - & deallocate(meta_nemsio2d%recname) - if(allocated(meta_nemsio2d%reclevtyp)) & - & deallocate(meta_nemsio2d%reclevtyp) - if(allocated(meta_nemsio2d%reclev)) & - & deallocate(meta_nemsio2d%reclev) - if(allocated(meta_nemsio2d%variname)) & - & deallocate(meta_nemsio2d%variname) - if(allocated(meta_nemsio2d%aryiname)) & - & deallocate(meta_nemsio2d%aryiname) - if(allocated(meta_nemsio2d%aryival)) & - & deallocate(meta_nemsio2d%aryival) - if(allocated(meta_nemsio2d%aryilen)) & - & deallocate(meta_nemsio2d%aryilen) - if(allocated(meta_nemsio2d%vcoord)) & - & deallocate(meta_nemsio2d%vcoord) - if(allocated(meta_nemsio2d%lon)) & - & deallocate(meta_nemsio2d%lon) - if(allocated(meta_nemsio2d%lat)) & - & deallocate(meta_nemsio2d%lat) - if(allocated(meta_nemsio3d%recname)) & - & deallocate(meta_nemsio3d%recname) - if(allocated(meta_nemsio3d%reclevtyp)) & - & deallocate(meta_nemsio3d%reclevtyp) - if(allocated(meta_nemsio3d%reclev)) & - & deallocate(meta_nemsio3d%reclev) - if(allocated(meta_nemsio3d%variname)) & - & deallocate(meta_nemsio3d%variname) - if(allocated(meta_nemsio3d%aryiname)) & - & deallocate(meta_nemsio3d%aryiname) - if(allocated(meta_nemsio3d%aryival)) & - & deallocate(meta_nemsio3d%aryival) - if(allocated(meta_nemsio3d%aryilen)) & - & deallocate(meta_nemsio3d%aryilen) - if(allocated(meta_nemsio3d%vcoord)) & - & deallocate(meta_nemsio3d%vcoord) - if(allocated(meta_nemsio3d%lon)) & - & deallocate(meta_nemsio3d%lon) - if(allocated(meta_nemsio3d%lat)) & - & deallocate(meta_nemsio3d%lat) - - !===================================================================== - - end subroutine gfs_nems_meta_cleanup - - !======================================================================= - - ! gfs_nems_initialize.f90: - - !----------------------------------------------------------------------- - - subroutine gfs_nems_initialize(meta_nemsio2d, meta_nemsio3d) - - ! Define variables passed to routine - - type(nemsio_meta) :: meta_nemsio2d,meta_nemsio3d - character(len=500) :: filename - character(len=7) :: suffix - - !===================================================================== - - ! Define local variables - - call nemsio_init(iret=nemsio_iret) - write(suffix,500) meta_nemsio2d%nfhour - filename = trim(adjustl(datapathout2d))//suffix - meta_nemsio2d%gdatatype = trim(adjustl(nemsio_opt2d)) - meta_nemsio3d%gdatatype = trim(adjustl(nemsio_opt3d)) - call nemsio_open(gfile2d,trim(adjustl(filename)),'write', & - & iret=nemsio_iret, & - & modelname=trim(adjustl(meta_nemsio2d%modelname)), & - & version=meta_nemsio2d%version, & - & gdatatype=meta_nemsio2d%gdatatype, & - & jcap=meta_nemsio2d%jcap, & - & dimx=meta_nemsio2d%dimx, & - & dimy=meta_nemsio2d%dimy, & - & dimz=meta_nemsio2d%dimz, & - & idate=meta_nemsio2d%idate, & - & nrec=meta_nemsio2d%nrec, & - & nframe=meta_nemsio2d%nframe, & - & idrt=meta_nemsio2d%idrt, & - & ncldt=meta_nemsio2d%ncldt, & - & idvc=meta_nemsio2d%idvc, & - & idvm=meta_nemsio2d%idvm, & - & idsl=meta_nemsio2d%idsl, & - & nfhour=meta_nemsio2d%fhour, & - & nfminute=meta_nemsio2d%nfminute, & - & nfsecondn=meta_nemsio2d%nfsecondn, & - & nfsecondd=meta_nemsio2d%nfsecondd, & - & extrameta=.true., & - & nmetaaryi=meta_nemsio2d%nmetaaryi, & - & recname=meta_nemsio2d%recname, & - & reclevtyp=meta_nemsio2d%reclevtyp, & - & reclev=meta_nemsio2d%reclev, & - & aryiname=meta_nemsio2d%aryiname, & - & aryilen=meta_nemsio2d%aryilen, & - & aryival=meta_nemsio2d%aryival, & - & vcoord=meta_nemsio2d%vcoord) - write(suffix,500) meta_nemsio3d%nfhour - filename = trim(adjustl(datapathout3d))//suffix - call nemsio_open(gfile3d,trim(adjustl(filename)),'write', & - & iret=nemsio_iret, & - & modelname=trim(adjustl(meta_nemsio3d%modelname)), & - & version=meta_nemsio3d%version, & - & gdatatype=meta_nemsio3d%gdatatype, & - & jcap=meta_nemsio3d%jcap, & - & dimx=meta_nemsio3d%dimx, & - & dimy=meta_nemsio3d%dimy, & - & dimz=meta_nemsio3d%dimz, & - & idate=meta_nemsio3d%idate, & - & nrec=meta_nemsio3d%nrec, & - & nframe=meta_nemsio3d%nframe, & - & idrt=meta_nemsio3d%idrt, & - & ncldt=meta_nemsio3d%ncldt, & - & idvc=meta_nemsio3d%idvc, & - & idvm=meta_nemsio3d%idvm, & - & idsl=meta_nemsio3d%idsl, & - & nfhour=meta_nemsio3d%fhour, & - & nfminute=meta_nemsio3d%nfminute, & - & nfsecondn=meta_nemsio3d%nfsecondn, & - & nfsecondd=meta_nemsio3d%nfsecondd, & - & extrameta=.true., & - & nmetaaryi=meta_nemsio3d%nmetaaryi, & - & recname=meta_nemsio3d%recname, & - & reclevtyp=meta_nemsio3d%reclevtyp, & - & reclev=meta_nemsio3d%reclev, & - & aryiname=meta_nemsio3d%aryiname, & - & aryilen=meta_nemsio3d%aryilen, & - & aryival=meta_nemsio3d%aryival, & - & variname=meta_nemsio3d%variname, & - & varival=meta_nemsio3d%varival, & - & nmetavari=meta_nemsio3d%nmetavari, & - & vcoord=meta_nemsio3d%vcoord) - - !===================================================================== - - ! Define format statements - -500 format('.fhr',i3.3) - - !===================================================================== - - end subroutine gfs_nems_initialize - - !======================================================================= - - ! gfs_nems_finalize.f90: - - !----------------------------------------------------------------------- - - subroutine gfs_nems_finalize() - - !===================================================================== - - ! Define local variables - - call nemsio_close(gfile2d,iret=nemsio_iret) - call nemsio_close(gfile3d,iret=nemsio_iret) - - !===================================================================== - - end subroutine gfs_nems_finalize - - !======================================================================= - - ! gfs_grid_initialize.f90: - - !----------------------------------------------------------------------- - - subroutine gfs_grid_initialize(grid) - - ! Define variables passed to routine - - type(gfs_grid) :: grid - - ! Define variables computed within routine - - real(r_kind), dimension(:), allocatable :: slat - real(r_kind), dimension(:), allocatable :: wlat - real(r_kind), dimension(:), allocatable :: workgrid - - ! Define counting variables - - integer :: i, j, k - - !===================================================================== - - ! Check local variable and proceed accordingly - - if(mpi_procid .eq. mpi_masternode) then - - ! Define local variables - - call init_constants_derived() - - ! Check local variable and proceed accordingly - - ! Define local variables - - grid%nlons = nlons - grid%nlats = nlats - - end if ! if(mpi_procid .eq. mpi_masternode) - - ! Define local variables - - call mpi_barrier(mpi_comm_world,mpi_ierror) - - ! Broadcast all necessary variables to compute nodes - - call mpi_bcast(grid%nlons,1,mpi_integer,mpi_masternode,mpi_comm_world, & - & mpi_ierror) - call mpi_bcast(grid%nlats,1,mpi_integer,mpi_masternode,mpi_comm_world, & - & mpi_ierror) - - ! Allocate memory for local variables - - if(.not. allocated(grid%rlon)) & - & allocate(grid%rlon(grid%nlons,grid%nlats)) - if(.not. allocated(grid%rlat)) & - & allocate(grid%rlat(grid%nlons,grid%nlats)) - - ! Check local variable and proceed accordingly - - if(mpi_procid .eq. mpi_masternode) then - - ! Allocate memory for local variables - - if(.not. allocated(slat)) allocate(slat(grid%nlats)) - if(.not. allocated(wlat)) allocate(wlat(grid%nlats)) - if(.not. allocated(workgrid)) allocate(workgrid(grid%nlats)) - - ! Compute local variables - - grid%ncoords = grid%nlons*grid%nlats - call splat(grid%nlats,slat,wlat) - workgrid = acos(slat) - pi/2.0 - - ! Loop through local variable - - do j = 1, grid%nlats - - ! Loop through local variable - - do i = 1, grid%nlons - - ! Compute local variables - - grid%rlon(i,j) = (i-1)*(360./grid%nlons)*deg2rad - grid%rlat(i,j) = workgrid(grid%nlats - j + 1) - - end do ! do i = 1, grid%nlons - - end do ! do j = 1, grid%nlats - - ! Deallocate memory for local variables - - if(allocated(slat)) deallocate(slat) - if(allocated(wlat)) deallocate(wlat) - if(allocated(workgrid)) deallocate(workgrid) - - endif ! if(mpi_procid .eq. mpi_masternode) - - ! Broadcast all necessary variables to compute nodes - - call mpi_bcast(grid%ncoords,1,mpi_integer,mpi_masternode, & - & mpi_comm_world,mpi_ierror) - call mpi_bcast(grid%rlon,grid%ncoords,mpi_real,mpi_masternode, & - & mpi_comm_world,mpi_ierror) - call mpi_bcast(grid%rlat,grid%ncoords,mpi_real,mpi_masternode, & - & mpi_comm_world,mpi_ierror) - - !===================================================================== - - end subroutine gfs_grid_initialize - - !======================================================================= - - ! gfs_grid_cleanup.f90: - - !----------------------------------------------------------------------- - - subroutine gfs_grid_cleanup(grid) - - ! Define variables passed to routine - - type(gfs_grid) :: grid - - !===================================================================== - - ! Deallocate memory for local variables - - if(allocated(grid%rlon)) deallocate(grid%rlon) - if(allocated(grid%rlat)) deallocate(grid%rlat) - - !===================================================================== - - end subroutine gfs_grid_cleanup - - !======================================================================= - -end module gfs_nems_interface diff --git a/sorc/regrid_nemsio.fd/interpolation_interface.f90 b/sorc/regrid_nemsio.fd/interpolation_interface.f90 deleted file mode 100644 index 775d1a7cc3..0000000000 --- a/sorc/regrid_nemsio.fd/interpolation_interface.f90 +++ /dev/null @@ -1,335 +0,0 @@ -module interpolation_interface - - !======================================================================= - - ! Define associated modules and subroutines - - !----------------------------------------------------------------------- - - use constants - use kinds - - !----------------------------------------------------------------------- - - use namelist_def - use netcdf - use netcdfio_interface - use mpi_interface - - !----------------------------------------------------------------------- - - implicit none - - !----------------------------------------------------------------------- - - ! Define interfaces and attributes for module routines - - private - public :: interpolation_initialize_gridvar - public :: interpolation_initialize_esmf - public :: interpolation_define_gridvar - public :: interpolation_define_gridvar_out - public :: interpolation_esmf - public :: interpolation_esmf_vect - public :: gridvar - public :: esmfgrid - - !----------------------------------------------------------------------- - - ! Define all data and structure types for routine; these variables - ! are variables required by the subroutines within this module - - type esmfgrid - character(len=500) :: filename - real(r_double), dimension(:), allocatable :: s - integer, dimension(:), allocatable :: col - integer, dimension(:), allocatable :: row - real(r_double), dimension(:), allocatable :: inlats - real(r_double), dimension(:), allocatable :: inlons - real(r_double), dimension(:), allocatable :: outlats - real(r_double), dimension(:), allocatable :: outlons - integer :: n_s,n_a,n_b - end type esmfgrid ! type esmfgrid - - type gridvar - logical, dimension(:), allocatable :: check - real(r_double), dimension(:), allocatable :: var - integer :: ncoords - integer :: nx - integer :: ny - end type gridvar ! type gridvar - - ! Define global variables - - integer :: ncfileid - integer :: ncvarid - integer :: ncdimid - integer :: ncstatus - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - subroutine interpolation_define_gridvar(grid,xdim,ydim,ngrid,input) -! collapses the cubed grid into a 1-d array -! Define variables passed to routine - - use nemsio_module, only: nemsio_realkind - integer,intent(in) :: ngrid - integer,intent(in) :: xdim,ydim - type(gridvar),intent(inout) :: grid - real(nemsio_realkind),intent(in) :: input(ngrid,xdim,ydim) - -! locals - integer :: i,j,k,ncount - - ncount = 1 - do k = 1, ngrid - do j = 1, ydim - do i = 1, xdim - grid%var(ncount) = input(k,i,j) - ncount = ncount + 1 - end do - end do - end do - - - end subroutine interpolation_define_gridvar - -!======================================================================= - - - subroutine interpolation_define_gridvar_out(grid,xdim,ydim,output) -! make a 2-d array for output - ! Define variables passed to routine - - integer,intent(in) :: xdim,ydim - type(gridvar),intent(in) :: grid - real(r_double),intent(out) :: output(xdim,ydim) - -! locals - integer :: i,j,ncount - - ncount = 1 - do j = 1, ydim - do i = 1, xdim - output(j,i) = grid%var(ncount) - ncount = ncount + 1 - enddo - enddo - - end subroutine interpolation_define_gridvar_out - - !======================================================================= - - subroutine interpolation_initialize_gridvar(grid) - - ! Define variables passed to routine - - type(gridvar) :: grid - - allocate(grid%var(grid%ncoords)) - - end subroutine interpolation_initialize_gridvar - - -!======================================================================= - - subroutine interpolation_initialize_esmf(grid) - - ! Define variables passed to routine - - type(esmfgrid) :: grid - - !===================================================================== - - ! Define local variables - - ncstatus = nf90_open(path=trim(adjustl(grid%filename)),mode= & - & nf90_nowrite,ncid=ncfileid) - ncstatus = nf90_inq_dimid(ncfileid,'n_s',ncdimid) - ncstatus = nf90_inquire_dimension(ncfileid,ncdimid,len=grid%n_s) - ncstatus = nf90_inq_dimid(ncfileid,'n_a',ncdimid) - ncstatus = nf90_inquire_dimension(ncfileid,ncdimid,len=grid%n_a) - ncstatus = nf90_inq_dimid(ncfileid,'n_b',ncdimid) - ncstatus = nf90_inquire_dimension(ncfileid,ncdimid,len=grid%n_b) - - - ! Allocate memory for local variables - - allocate(grid%s(grid%n_s)) - allocate(grid%row(grid%n_s)) - allocate(grid%col(grid%n_s)) - - allocate(grid%inlats(grid%n_a)) - allocate(grid%inlons(grid%n_a)) - allocate(grid%outlats(grid%n_b)) - allocate(grid%outlons(grid%n_b)) - - ncstatus = nf90_inq_varid(ncfileid,'col',ncvarid) - ncstatus = nf90_get_var(ncfileid,ncvarid,grid%col) - ncstatus = nf90_inq_varid(ncfileid,'row',ncvarid) - ncstatus = nf90_get_var(ncfileid,ncvarid,grid%row) - ncstatus = nf90_inq_varid(ncfileid,'S',ncvarid) - ncstatus = nf90_get_var(ncfileid,ncvarid,grid%s) - ncstatus = nf90_inq_varid(ncfileid,'yc_a',ncvarid) - ncstatus = nf90_get_var(ncfileid,ncvarid,grid%inlats) - ncstatus = nf90_inq_varid(ncfileid,'xc_a',ncvarid) - ncstatus = nf90_get_var(ncfileid,ncvarid,grid%inlons) - where(grid%inlons .LT. 0.0) - grid%inlons=360+grid%inlons - endwhere - ncstatus = nf90_inq_varid(ncfileid,'yc_b',ncvarid) - ncstatus = nf90_get_var(ncfileid,ncvarid,grid%outlats) - ncstatus = nf90_inq_varid(ncfileid,'xc_b',ncvarid) - ncstatus = nf90_get_var(ncfileid,ncvarid,grid%outlons) - ncstatus = nf90_close(ncfileid) - - !===================================================================== - - end subroutine interpolation_initialize_esmf - - -!======================================================================= - - - subroutine interpolation_esmf(invar,outvar,grid,is_nrstnghbr) - - ! Define variables passed to routine - - type(gridvar) :: invar - type(gridvar) :: outvar - logical :: is_nrstnghbr - - type(esmfgrid) :: grid - - integer :: i, j, k, l - - outvar%var = dble(0.0) - - if(is_nrstnghbr) then - do i = 1, grid%n_s - outvar%var(grid%row(i)) = invar%var(grid%col(i)) - enddo - else - do i = 1, grid%n_s - outvar%var(grid%row(i)) = outvar%var(grid%row(i)) + grid%s(i)*invar%var(grid%col(i)) - end do - end if - - end subroutine interpolation_esmf -!===================================================================== - - subroutine interpolation_esmf_vect(invaru,invarv,grid,outvaru,outvarv) - - ! Define variables passed to routine - - type(gridvar) :: invaru,invarv - type(gridvar) :: outvaru,outvarv - type(esmfgrid) :: grid - - integer :: i, j, k, l - real(r_double) :: cxy,sxy,urot,vrot - - - outvaru%var = dble(0.0) - outvarv%var = dble(0.0) - - do i = 1, grid%n_s - CALL MOVECT(grid%inlats(grid%col(i)),grid%inlons(grid%col(i)),& - grid%outlats(grid%row(i)),grid%outlons(grid%row(i)),& - cxy,sxy) - urot=cxy*invaru%var(grid%col(i))-sxy*invarv%var(grid%col(i)) - vrot=sxy*invaru%var(grid%col(i))+cxy*invarv%var(grid%col(i)) - outvaru%var(grid%row(i)) = outvaru%var(grid%row(i)) + grid%s(i)*urot - outvarv%var(grid%row(i)) = outvarv%var(grid%row(i)) + grid%s(i)*vrot - - end do - - end subroutine interpolation_esmf_vect - -!===================================================================== - - SUBROUTINE MOVECT(FLAT,FLON,TLAT,TLON,CROT,SROT) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! -! SUBPROGRAM: MOVECT MOVE A VECTOR ALONG A GREAT CIRCLE -! PRGMMR: IREDELL ORG: W/NMC23 DATE: 96-04-10 -! -! ABSTRACT: THIS SUBPROGRAM PROVIDES THE ROTATION PARAMETERS -! TO MOVE A VECTOR ALONG A GREAT CIRCLE FROM ONE -! POSITION TO ANOTHER WHILE CONSERVING ITS ORIENTATION -! WITH RESPECT TO THE GREAT CIRCLE. THESE ROTATION -! PARAMETERS ARE USEFUL FOR VECTOR INTERPOLATION. -! -! PROGRAM HISTORY LOG: -! 96-04-10 IREDELL -! 1999-04-08 IREDELL GENERALIZE PRECISION -! -! USAGE: CALL MOVECT(FLAT,FLON,TLAT,TLON,CROT,SROT) -! -! INPUT ARGUMENT LIST: -! FLAT - REAL LATITUDE IN DEGREES FROM WHICH TO MOVE THE VECTOR -! FLON - REAL LONGITUDE IN DEGREES FROM WHICH TO MOVE THE VECTOR -! TLAT - REAL LATITUDE IN DEGREES TO WHICH TO MOVE THE VECTOR -! TLON - REAL LONGITUDE IN DEGREES TO WHICH TO MOVE THE VECTOR -! -! OUTPUT ARGUMENT LIST: -! CROT - REAL CLOCKWISE VECTOR ROTATION COSINE -! SROT - REAL CLOCKWISE VECTOR ROTATION SINE -! (UTO=CROT*UFROM-SROT*VFROM; -! VTO=SROT*UFROM+CROT*VFROM) -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN 90 -! -!$$$ - IMPLICIT NONE -! - INTEGER, PARAMETER :: KD=SELECTED_REAL_KIND(15,45) -! - REAL(KIND=r_double), INTENT(IN ) :: FLAT, FLON - REAL(KIND=r_double), INTENT(IN ) :: TLAT, TLON - REAL(KIND=r_double), INTENT( OUT) :: CROT, SROT -! - REAL(KIND=r_double), PARAMETER :: CRDLIM=0.9999999 - REAL(KIND=r_double), PARAMETER :: PI=3.14159265358979 - REAL(KIND=r_double), PARAMETER :: DPR=180./PI -! - REAL(KIND=r_double) :: CTLAT,STLAT,CFLAT,SFLAT - REAL(KIND=r_double) :: CDLON,SDLON,CRD - REAL(KIND=r_double) :: SRD2RN,STR,CTR,SFR,CFR -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! COMPUTE COSINE OF THE RADIAL DISTANCE BETWEEN THE POINTS. - CTLAT=COS(TLAT/DPR) - STLAT=SIN(TLAT/DPR) -CFLAT=COS(FLAT/DPR) - SFLAT=SIN(FLAT/DPR) - CDLON=COS((FLON-TLON)/DPR) - SDLON=SIN((FLON-TLON)/DPR) - CRD=STLAT*SFLAT+CTLAT*CFLAT*CDLON -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! COMPUTE ROTATIONS AT BOTH POINTS WITH RESPECT TO THE GREAT CIRCLE -! AND COMBINE THEM TO GIVE THE TOTAL VECTOR ROTATION PARAMETERS. - IF(ABS(CRD).LE.CRDLIM) THEN - SRD2RN=-1/(1-CRD**2) - STR=CFLAT*SDLON - CTR=CFLAT*STLAT*CDLON-SFLAT*CTLAT - SFR=CTLAT*SDLON - CFR=CTLAT*SFLAT*CDLON-STLAT*CFLAT - CROT=SRD2RN*(CTR*CFR-STR*SFR) - SROT=SRD2RN*(CTR*SFR+STR*CFR) -! USE A DIFFERENT APPROXIMATION FOR NEARLY COINCIDENT POINTS. -! MOVING VECTORS TO ANTIPODAL POINTS IS AMBIGUOUS ANYWAY. - ELSE - CROT=CDLON - SROT=SDLON*STLAT - ENDIF -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - END SUBROUTINE MOVECT - - !======================================================================= - -end module interpolation_interface diff --git a/sorc/regrid_nemsio.fd/kinds.f90 b/sorc/regrid_nemsio.fd/kinds.f90 deleted file mode 100644 index 11c93b98e0..0000000000 --- a/sorc/regrid_nemsio.fd/kinds.f90 +++ /dev/null @@ -1,107 +0,0 @@ -! this module was extracted from the GSI version operational -! at NCEP in Dec. 2007. -module kinds -!$$$ module documentation block -! . . . . -! module: kinds -! prgmmr: treadon org: np23 date: 2004-08-15 -! -! abstract: Module to hold specification kinds for variable declaration. -! This module is based on (copied from) Paul vanDelst's -! type_kinds module found in the community radiative transfer -! model -! -! module history log: -! 2004-08-15 treadon -! -! Subroutines Included: -! -! Functions Included: -! -! remarks: -! The numerical data types defined in this module are: -! i_byte - specification kind for byte (1-byte) integer variable -! i_short - specification kind for short (2-byte) integer variable -! i_long - specification kind for long (4-byte) integer variable -! i_llong - specification kind for double long (8-byte) integer variable -! r_single - specification kind for single precision (4-byte) real variable -! r_double - specification kind for double precision (8-byte) real variable -! r_quad - specification kind for quad precision (16-byte) real variable -! -! i_kind - generic specification kind for default integer -! r_kind - generic specification kind for default floating point -! -! -! attributes: -! language: f90 -! machine: ibm RS/6000 SP -! -!$$$ end documentation block - implicit none - private - -! Integer type definitions below - -! Integer types - integer, parameter, public :: i_byte = selected_int_kind(1) ! byte integer - integer, parameter, public :: i_short = selected_int_kind(4) ! short integer - integer, parameter, public :: i_long = selected_int_kind(8) ! long integer - integer, parameter, private :: llong_t = selected_int_kind(16) ! llong integer - integer, parameter, public :: i_llong = max( llong_t, i_long ) - -! Expected 8-bit byte sizes of the integer kinds - integer, parameter, public :: num_bytes_for_i_byte = 1 - integer, parameter, public :: num_bytes_for_i_short = 2 - integer, parameter, public :: num_bytes_for_i_long = 4 - integer, parameter, public :: num_bytes_for_i_llong = 8 - -! Define arrays for default definition - integer, parameter, private :: num_i_kinds = 4 - integer, parameter, dimension( num_i_kinds ), private :: integer_types = (/ & - i_byte, i_short, i_long, i_llong /) - integer, parameter, dimension( num_i_kinds ), private :: integer_byte_sizes = (/ & - num_bytes_for_i_byte, num_bytes_for_i_short, & - num_bytes_for_i_long, num_bytes_for_i_llong /) - -! Default values -! **** CHANGE THE FOLLOWING TO CHANGE THE DEFAULT INTEGER TYPE KIND *** - integer, parameter, public :: default_integer = 3 ! 1=byte, - ! 2=short, - ! 3=long, - ! 4=llong - integer, parameter, public :: i_kind = integer_types( default_integer ) - integer, parameter, public :: num_bytes_for_i_kind = & - integer_byte_sizes( default_integer ) - - -! Real definitions below - -! Real types - integer, parameter, public :: r_single = selected_real_kind(6) ! single precision - integer, parameter, public :: r_double = selected_real_kind(15) ! double precision - integer, parameter, private :: quad_t = selected_real_kind(20) ! quad precision - integer, parameter, public :: r_quad = max( quad_t, r_double ) - -! Expected 8-bit byte sizes of the real kinds - integer, parameter, public :: num_bytes_for_r_single = 4 - integer, parameter, public :: num_bytes_for_r_double = 8 - integer, parameter, public :: num_bytes_for_r_quad = 16 - -! Define arrays for default definition - integer, parameter, private :: num_r_kinds = 3 - integer, parameter, dimension( num_r_kinds ), private :: real_kinds = (/ & - r_single, r_double, r_quad /) - integer, parameter, dimension( num_r_kinds ), private :: real_byte_sizes = (/ & - num_bytes_for_r_single, num_bytes_for_r_double, & - num_bytes_for_r_quad /) - -! Default values -! **** CHANGE THE FOLLOWING TO CHANGE THE DEFAULT REAL TYPE KIND *** - integer, parameter, public :: default_real = 1 ! 1=single, - ! 2=double, - ! 3=quad - integer, parameter, public :: r_kind = real_kinds( default_real ) - integer, parameter, public :: num_bytes_for_r_kind = & - real_byte_sizes( default_real ) - -end module kinds diff --git a/sorc/regrid_nemsio.fd/main.f90 b/sorc/regrid_nemsio.fd/main.f90 deleted file mode 100644 index f3dfe4ef09..0000000000 --- a/sorc/regrid_nemsio.fd/main.f90 +++ /dev/null @@ -1,92 +0,0 @@ -program regrid_nemsio_main - - !===================================================================== - - !$$$ PROGRAM DOCUMENTATION BLOCK - ! - ! ABSTRACT: - ! - ! This routine provides an interface between the National Oceanic - ! and Atmospheric Administration (NOAA) National Centers for - ! Environmental Prediction (NCEP) implemented NOAA Environmental - ! Modeling System (NEMS) input/output file format and the native - ! FV3 cubed sphere grid. - ! - ! NOTES: - ! - ! * Uses interpolation weights generated by - ! Earth-System Modeling Framework (ESMF) remapping utilities. - ! - ! PRGMMR: Winterbottom - ! ORG: ESRL/PSD1 - ! DATE: 2016-02-02 - ! - ! PROGRAM HISTORY LOG: - ! - ! 2016-02-02 Initial version. Henry R. Winterbottom - ! 2016-11-01 Modifed by Jeff Whitaker. - ! - !$$$ - - !===================================================================== - - ! Define associated modules and subroutines - - !--------------------------------------------------------------------- - - use kinds - - !--------------------------------------------------------------------- - - use mpi_interface - use fv3_interface - use namelist_def - use constants - - !--------------------------------------------------------------------- - - implicit none - - !===================================================================== - - ! Define variables computed within routine - - real(r_kind) :: exectime_start - real(r_kind) :: exectime_finish - - !===================================================================== - - ! Define local variables - - call mpi_interface_initialize() - call init_constants(.false.) - - if(mpi_procid .eq. mpi_masternode) then - - call cpu_time(exectime_start) - - end if - call mpi_barrier(mpi_comm_world,mpi_ierror) - - call namelistparams() - call fv3_regrid_nemsio() - - - if(mpi_procid .eq. mpi_masternode) then - - call cpu_time(exectime_finish) - write(6,500) exectime_finish - exectime_start - - end if ! if(mpi_procid .eq. mpi_masternode) - - call mpi_barrier(mpi_comm_world,mpi_ierror) - call mpi_interface_terminate() - - !===================================================================== - ! Define format statements - -500 format('MAIN: Execution time: ', f13.5, ' seconds.') - - !===================================================================== - -end program regrid_nemsio_main diff --git a/sorc/regrid_nemsio.fd/mpi_interface.f90 b/sorc/regrid_nemsio.fd/mpi_interface.f90 deleted file mode 100644 index 2e6c5c7a94..0000000000 --- a/sorc/regrid_nemsio.fd/mpi_interface.f90 +++ /dev/null @@ -1,89 +0,0 @@ -module mpi_interface - - !======================================================================= - - use kinds - - !----------------------------------------------------------------------- - - implicit none - - !----------------------------------------------------------------------- - - ! Define necessary include files - - include "mpif.h" - - !----------------------------------------------------------------------- - - ! Define global variables - - character :: mpi_nodename(mpi_max_processor_name) - character :: mpi_noderequest - logical :: abort_mpi - integer(kind=4), dimension(:), allocatable :: mpi_ranks - integer(kind=4) :: mpi_errorstatus(mpi_status_size) - integer(kind=4) :: mpi_masternode - integer(kind=4) :: mpi_slavenode - integer(kind=4) :: mpi_ierror - integer(kind=4) :: mpi_ierrorcode - integer(kind=4) :: mpi_procid - integer(kind=4) :: mpi_nprocs - integer(kind=4) :: mpi_node_source - integer(kind=4) :: mpi_node_destination - integer(kind=4) :: mpi_loopcount - integer(kind=4) :: mpi_request - integer(kind=4) :: mpi_group_user - integer(kind=4) :: mpi_group_nprocs - integer(kind=4) :: mpi_group_procid - integer(kind=4) :: mpi_group_begin - integer(kind=4) :: mpi_group_end - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! mpi_interface_initialize.f90: - - !----------------------------------------------------------------------- - - subroutine mpi_interface_initialize() - - !===================================================================== - - ! Define local variables - - call mpi_init(mpi_ierror) - call mpi_comm_rank(mpi_comm_world,mpi_procid,mpi_ierror) - call mpi_comm_size(mpi_comm_world,mpi_nprocs,mpi_ierror) - mpi_masternode = 0 - abort_mpi = .false. - - !===================================================================== - - end subroutine mpi_interface_initialize - - !======================================================================= - - ! mpi_interface_terminate.f90: - - !----------------------------------------------------------------------- - - subroutine mpi_interface_terminate() - - !===================================================================== - - ! Define local variables - - !call mpi_abort(mpi_comm_world,ierror_code,mpi_ierror) - call mpi_finalize(mpi_ierror) - - !===================================================================== - - end subroutine mpi_interface_terminate - - !======================================================================= - -end module mpi_interface diff --git a/sorc/regrid_nemsio.fd/namelist_def.f90 b/sorc/regrid_nemsio.fd/namelist_def.f90 deleted file mode 100644 index ff15a335f5..0000000000 --- a/sorc/regrid_nemsio.fd/namelist_def.f90 +++ /dev/null @@ -1,181 +0,0 @@ -module namelist_def - - !======================================================================= - - ! Define associated modules and subroutines - - !----------------------------------------------------------------------- - - use kinds - - !----------------------------------------------------------------------- - - use mpi_interface - - !----------------------------------------------------------------------- - - implicit none - - !----------------------------------------------------------------------- - - ! Define global variables - - integer, parameter :: max_ngrids = 12 - character(len=500) :: analysis_filename(max_ngrids) = 'NOT USED' - character(len=500) :: analysis_filename2d(max_ngrids) = 'NOT USED' - character(len=500) :: gfs_hyblevs_filename = 'NOT USED' - character(len=500) :: esmf_neareststod_filename = 'NOT USED' - character(len=500) :: esmf_bilinear_filename = 'NOT USED' - character(len=500) :: variable_table = 'NOT USED' - character(len=500) :: datapathout2d = './' - character(len=500) :: datapathout3d = './' - character(len=19) :: forecast_timestamp = '0000-00-00_00:00:00' - character(len=4) :: nemsio_opt = 'bin4' - character(len=4) :: nemsio_opt2d = 'none' - character(len=4) :: nemsio_opt3d = 'none' - logical :: is_ugrid2sgrid = .false. - logical :: debug = .false. - integer :: nlons = 0 - integer :: nlats = 0 - integer :: ntrunc = 0 - integer :: ngrids = 0 - namelist /share/ debug, nlons,nlats,ntrunc,datapathout2d,datapathout3d, & - analysis_filename, forecast_timestamp, nemsio_opt, nemsio_opt2d, nemsio_opt3d, & - analysis_filename2d, variable_table - - namelist /interpio/ esmf_bilinear_filename, esmf_neareststod_filename, gfs_hyblevs_filename - - !--------------------------------------------------------------------- - -contains - - !===================================================================== - - ! namelistparams.f90: - - !--------------------------------------------------------------------- - - subroutine namelistparams() - - ! Define variables computed within routine - - logical :: is_it_there - integer :: unit_nml - - ! Define counting variables - - integer :: i, j, k - - !=================================================================== - - ! Define local variables - - unit_nml = 9 - is_it_there = .false. - inquire(file='regrid-nemsio.input',exist = is_it_there) - - ! Check local variable and proceed accordingly - - if(is_it_there) then - - ! Define local variables - - open(file = 'regrid-nemsio.input', & - unit = unit_nml , & - status = 'old' , & - form = 'formatted' , & - action = 'read' , & - access = 'sequential' ) - read(unit_nml,NML = share) - read(unit_nml,NML = interpio) - close(unit_nml) - if (nemsio_opt2d == 'none') nemsio_opt2d=nemsio_opt - if (nemsio_opt3d == 'none') nemsio_opt3d=nemsio_opt - - ! Loop through local variable - - do i = 1, max_ngrids - - ! Check local variable and proceed accordingly - - if(analysis_filename(i) .ne. 'NOT USED') then - - ! Define local variables - - ngrids = ngrids + 1 - - end if ! if(analysis_filename(i) .ne. 'NOT USED') - - end do ! do i = 1, max_ngrids - - else ! if(is_it_there) - - ! Define local variables - - if(mpi_procid .eq. mpi_masternode) write(6,500) - call mpi_barrier(mpi_comm_world,mpi_ierror) - call mpi_interface_terminate() - - end if ! if(.not. is_it_there) - - !=================================================================== - - ! Check local variable and proceed accordingly - - if(mpi_procid .eq. mpi_masternode) then - - ! Define local variables - - write(6,*) '&SHARE' - write(6,*) 'DEBUG = ', debug - write(6,*) 'ANALYSIS_FILENAME = ' - do k = 1, ngrids - write(6,*) trim(adjustl(analysis_filename(k))) - ! if analysis_filename2d not specified, set to analysis_filename - if (trim(analysis_filename2d(k)) == 'NOT USED') then - analysis_filename2d(k) = analysis_filename(k) - endif - end do ! do k = 1, ngrids - write(6,*) 'ANALYSIS_FILENAME2D = ' - do k = 1, ngrids - write(6,*) trim(adjustl(analysis_filename2d(k))) - end do ! do k = 1, ngrids - write(6,*) 'VARIABLE_TABLE = ', & - & trim(adjustl(variable_table)) - write(6,*) 'FORECAST_TIMESTAMP = ', forecast_timestamp - write(6,*) 'OUTPUT DATAPATH (2d) = ', & - & trim(adjustl(datapathout2d)) - write(6,*) 'OUTPUT DATAPATH (3d) = ', & - & trim(adjustl(datapathout3d)) - write(6,*) 'NEMSIO_OPT (2d) = ', nemsio_opt2d - write(6,*) 'NEMSIO_OPT (3d) = ', nemsio_opt3d - write(6,*) '/' - write(6,*) '&INTERPIO' - write(6,*) 'ESMF_BILINEAR_FILENAME = ', & - & trim(adjustl(esmf_bilinear_filename)) - write(6,*) 'ESMF_NEARESTSTOD_FILENAME = ', & - & trim(adjustl(esmf_neareststod_filename)) - write(6,*) 'GFS_HYBLEVS_FILENAME = ', & - & trim(adjustl(gfs_hyblevs_filename)) - write(6,*) '/' - - end if ! if(mpi_procid .eq. mpi_masternode) - - ! Define local variables - - call mpi_barrier(mpi_comm_world,mpi_ierror) - - !=================================================================== - - ! Define format statements - -500 format('NAMELISTPARAMS: regrid-nemsio.input not found in the', & - & ' current working directory. ABORTING!!!!') - - !=================================================================== - - end subroutine namelistparams - - !===================================================================== - -end module namelist_def diff --git a/sorc/regrid_nemsio.fd/netcdfio_interface.f90 b/sorc/regrid_nemsio.fd/netcdfio_interface.f90 deleted file mode 100644 index 473b765c50..0000000000 --- a/sorc/regrid_nemsio.fd/netcdfio_interface.f90 +++ /dev/null @@ -1,592 +0,0 @@ -module netcdfio_interface - - !======================================================================= - - ! Define associated modules and subroutines - - !----------------------------------------------------------------------- - - use kinds - - !----------------------------------------------------------------------- - - use namelist_def - use netcdf - use mpi_interface - - !----------------------------------------------------------------------- - - implicit none - - !----------------------------------------------------------------------- - - ! Define global variables - - logical :: ncstatic - integer :: ncrec - integer :: ncxdim - integer :: ncydim - integer :: nczdim - integer :: nctdim - integer :: ncfileid - integer :: ncvarid - integer :: ncdimid - integer :: ncstatus - - !----------------------------------------------------------------------- - - ! Define interfaces and attributes for module routines - - private - interface netcdfio_values_1d - module procedure netcdfio_values_1d_dblepr - module procedure netcdfio_values_1d_realpr - module procedure netcdfio_values_1d_intepr - end interface ! interface netcdfio_values_2d - interface netcdfio_values_2d - module procedure netcdfio_values_2d_dblepr - module procedure netcdfio_values_2d_realpr - module procedure netcdfio_values_2d_intepr - end interface ! interface netcdfio_values_2d - interface netcdfio_values_3d - module procedure netcdfio_values_3d_dblepr - module procedure netcdfio_values_3d_realpr - module procedure netcdfio_values_3d_intepr - end interface ! interface netcdfio_values_3d - interface netcdfio_global_attr - module procedure netcdfio_global_attr_char - end interface ! interface netcdfio_global_attr - interface netcdfio_variable_attr - module procedure netcdfio_variable_attr_char - end interface ! interface netcdfio_variable_attr - public :: netcdfio_values_1d - public :: netcdfio_values_2d - public :: netcdfio_values_3d - public :: netcdfio_dimension - public :: netcdfio_global_attr - public :: netcdfio_variable_attr - public :: ncrec - public :: ncxdim - public :: ncydim - public :: nczdim - public :: nctdim - public :: ncstatic - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! netcdfio_global_attr.f90: - - !----------------------------------------------------------------------- - - subroutine netcdfio_global_attr_char(filename,varname,varvalue) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=*) :: varname - character(len=*) :: varvalue - - !===================================================================== - - ! Define local variables - - ncstatus = nf90_open(path=trim(adjustl(filename)),mode=nf90_nowrite, & - & ncid=ncfileid) - ncstatus = nf90_get_att(ncfileid,nf90_global,trim(adjustl(varname)), & - & varvalue) - ncstatus = nf90_close(ncfileid) - - !===================================================================== - - end subroutine netcdfio_global_attr_char - - subroutine netcdfio_variable_attr_char(filename,varname,attribute,varvalue) - - implicit none - - !======================================================================= - - ! Define variables passed to subroutine - - character(len=500),intent(in) :: filename - character(len=*),intent(in) :: attribute - character(len=*),intent(in) :: varname - - ! Define variables returned by subroutine - - character(len=80),intent(out) :: varvalue - - ! Define variables for decoding netCDF data - - integer ncid, varid, ncstatus - - ncstatus = nf90_open(path=trim(adjustl(filename)),mode=nf90_nowrite,ncid=ncid) - ncstatus = nf90_inq_varid(ncid,trim(adjustl(varname)),varid) - ncstatus = nf90_get_att(ncid,varid,trim(adjustl(attribute)),varvalue) - ncstatus = nf90_close(ncfileid) - - !===================================================================== - - end subroutine netcdfio_variable_attr_char - - !======================================================================= - - ! netcdfio_values_1d_dblepr.f90: - - !----------------------------------------------------------------------- - - subroutine netcdfio_values_1d_dblepr(filename,varname,varvalue) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=*) :: varname - real(r_double) :: varvalue(:) - - !===================================================================== - - ! Define local variables - - ncstatus = nf90_open(path=trim(adjustl(filename)),mode=nf90_nowrite, & - & ncid=ncfileid) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - if (ncstatus /= 0) then - varvalue = -1.e30 - else - ncstatus = nf90_get_var(ncfileid,ncvarid,varvalue) - if (ncstatus .ne. 0) then - print *,'fv3 read failed for ',trim(adjustl(varname)) - call mpi_interface_terminate() - stop - endif - endif - ncstatus = nf90_close(ncfileid) - - !===================================================================== - - end subroutine netcdfio_values_1d_dblepr - - !======================================================================= - - ! netcdfio_values_2d_dblepr.f90: - - !----------------------------------------------------------------------- - - subroutine netcdfio_values_2d_dblepr(filename,varname,varvalue) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=*) :: varname - real(r_double), dimension(ncxdim,ncydim) :: varvalue - - ! Define variables computed within routine - - integer, dimension(3) :: start - integer, dimension(3) :: count - - !===================================================================== - - ! Define local variables - - ncstatus = nf90_open(path=trim(adjustl(filename)),mode=nf90_nowrite, & - & ncid=ncfileid) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - if (ncstatus .ne. 0) then - print *,'fv3 read failed for ',trim(adjustl(varname)) - call mpi_interface_terminate() - stop - endif - if(ncstatic) start = (/1,1,1/) - if(.not. ncstatic) start = (/1,1,ncrec/) - count = (/ncxdim,ncydim,1/) - ncstatus = nf90_get_var(ncfileid,ncvarid,varvalue,start,count) - if (ncstatus .ne. 0) then - print *,'fv3 read failed for ',trim(adjustl(varname)) - call mpi_interface_terminate() - stop - endif - if(debug) write(6,500) trim(adjustl(varname)), minval(varvalue), & - & maxval(varvalue) - ncstatus = nf90_close(ncfileid) - - !===================================================================== - - ! Define format statements - -500 format('NETCDFIO_VALUES_2D: Variable name = ', a, '; (min,max) = (', & - & f13.5,',',f13.5,').') - - !===================================================================== - - end subroutine netcdfio_values_2d_dblepr - - !======================================================================= - - ! netcdfio_values_3d_dblepr.f90: - - !----------------------------------------------------------------------- - - subroutine netcdfio_values_3d_dblepr(filename,varname,varvalue) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=*) :: varname - real(r_double), dimension(ncxdim,ncydim,nczdim) :: varvalue - - ! Define variables computed within routine - - integer, dimension(4) :: start - integer, dimension(4) :: count - - !===================================================================== - - ! Define local variables - - ncstatus = nf90_open(path=trim(adjustl(filename)),mode=nf90_nowrite, & - & ncid=ncfileid) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - if (ncstatus .ne. 0) then - print *,'fv3 read failed for ',trim(adjustl(varname)) - call mpi_interface_terminate() - stop - endif - if(ncstatic) start = (/1,1,1,1/) - if(.not. ncstatic) start = (/1,1,1,ncrec/) - count = (/ncxdim,ncydim,nczdim,1/) - ncstatus = nf90_get_var(ncfileid,ncvarid,varvalue,start,count) - if (ncstatus .ne. 0) then - print *,'fv3 read failed for ',trim(adjustl(varname)) - call mpi_interface_terminate() - stop - endif - if(debug) write(6,500) trim(adjustl(varname)), minval(varvalue), & - & maxval(varvalue) - ncstatus = nf90_close(ncfileid) - - !===================================================================== - - ! Define format statements - -500 format('NETCDFIO_VALUES_3D: Variable name = ', a, '; (min,max) = (', & - & f13.5,',',f13.5,').') - - !===================================================================== - - end subroutine netcdfio_values_3d_dblepr - - !======================================================================= - - ! netcdfio_values_1d_realpr.f90: - - !----------------------------------------------------------------------- - - subroutine netcdfio_values_1d_realpr(filename,varname,varvalue) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=*) :: varname - real(r_kind) :: varvalue(:) - - !===================================================================== - - ! Define local variables - - ncstatus = nf90_open(path=trim(adjustl(filename)),mode=nf90_nowrite, & - & ncid=ncfileid) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - if (ncstatus .ne. 0) then - print *,'fv3 read failed for ',trim(adjustl(varname)) - call mpi_interface_terminate() - stop - endif - if (ncstatus /= 0) then - varvalue = -1.e30 - else - ncstatus = nf90_get_var(ncfileid,ncvarid,varvalue) - if (ncstatus .ne. 0) then - print *,'fv3 read failed for ',trim(adjustl(varname)) - call mpi_interface_terminate() - stop - endif - endif - ncstatus = nf90_close(ncfileid) - - !===================================================================== - - end subroutine netcdfio_values_1d_realpr - - !======================================================================= - - ! netcdfio_values_2d_realpr.f90: - - !----------------------------------------------------------------------- - - subroutine netcdfio_values_2d_realpr(filename,varname,varvalue) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=*) :: varname - real(r_kind), dimension(ncxdim,ncydim) :: varvalue - - ! Define variables computed within routine - - integer, dimension(3) :: start - integer, dimension(3) :: count - - !===================================================================== - - ! Define local variables - - ncstatus = nf90_open(path=trim(adjustl(filename)),mode=nf90_nowrite, & - & ncid=ncfileid) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - if (ncstatus .ne. 0) then - print *,'fv3 read failed for ',trim(adjustl(varname)) - call mpi_interface_terminate() - stop - endif - if(ncstatic) start = (/1,1,1/) - if(.not. ncstatic) start = (/1,1,ncrec/) - count = (/ncxdim,ncydim,1/) - ncstatus = nf90_get_var(ncfileid,ncvarid,varvalue,start,count) - if (ncstatus .ne. 0) then - print *,'fv3 read failed for ',trim(adjustl(varname)) - call mpi_interface_terminate() - stop - endif - if(debug) write(6,500) trim(adjustl(varname)), minval(varvalue), & - & maxval(varvalue) - ncstatus = nf90_close(ncfileid) - - !===================================================================== - - ! Define format statements - -500 format('NETCDFIO_VALUES_2D: Variable name = ', a, '; (min,max) = (', & - & f13.5,',',f13.5,').') - - !===================================================================== - - end subroutine netcdfio_values_2d_realpr - - !======================================================================= - - ! netcdfio_values_3d_realpr.f90: - - !----------------------------------------------------------------------- - - subroutine netcdfio_values_3d_realpr(filename,varname,varvalue) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=*) :: varname - real(r_kind), dimension(ncxdim,ncydim,nczdim) :: varvalue - - ! Define variables computed within routine - - integer, dimension(4) :: start - integer, dimension(4) :: count - - !===================================================================== - - ! Define local variables - - ncstatus = nf90_open(path=trim(adjustl(filename)),mode=nf90_nowrite, & - & ncid=ncfileid) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - if (ncstatus .ne. 0) then - print *,'fv3 read failed for ',trim(adjustl(varname)) - call mpi_interface_terminate() - stop - endif - if(ncstatic) start = (/1,1,1,1/) - if(.not. ncstatic) start = (/1,1,1,ncrec/) - count = (/ncxdim,ncydim,nczdim,1/) - ncstatus = nf90_get_var(ncfileid,ncvarid,varvalue,start,count) - if (ncstatus .ne. 0) then - print *,'fv3 read failed for ',trim(adjustl(varname)) - call mpi_interface_terminate() - stop - endif - if(debug) write(6,500) trim(adjustl(varname)), minval(varvalue), & - & maxval(varvalue) - ncstatus = nf90_close(ncfileid) - - !===================================================================== - - ! Define format statements - -500 format('NETCDFIO_VALUES_3D: Variable name = ', a, '; (min,max) = (', & - & f13.5,',',f13.5,').') - - !===================================================================== - - end subroutine netcdfio_values_3d_realpr - - !======================================================================= - - ! netcdfio_values_1d_intepr.f90: - - !----------------------------------------------------------------------- - - subroutine netcdfio_values_1d_intepr(filename,varname,varvalue) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=*) :: varname - integer :: varvalue(:) - - !===================================================================== - - ! Define local variables - - ncstatus = nf90_open(path=trim(adjustl(filename)),mode=nf90_nowrite, & - & ncid=ncfileid) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - if (ncstatus /= 0) then - varvalue = -9999 - else - ncstatus = nf90_get_var(ncfileid,ncvarid,varvalue) - endif - ncstatus = nf90_close(ncfileid) - - !===================================================================== - - end subroutine netcdfio_values_1d_intepr - - !======================================================================= - - ! netcdfio_values_2d_intepr.f90: - - !----------------------------------------------------------------------- - - subroutine netcdfio_values_2d_intepr(filename,varname,varvalue) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=*) :: varname - integer, dimension(ncxdim,ncydim) :: varvalue - - ! Define variables computed within routine - - integer, dimension(3) :: start - integer, dimension(3) :: count - - !===================================================================== - - ! Define local variables - - ncstatus = nf90_open(path=trim(adjustl(filename)),mode=nf90_nowrite, & - & ncid=ncfileid) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - if(ncstatic) start = (/1,1,1/) - if(.not. ncstatic) start = (/1,1,ncrec/) - count = (/ncxdim,ncydim,1/) - ncstatus = nf90_get_var(ncfileid,ncvarid,varvalue,start,count) - if(debug) write(6,500) trim(adjustl(varname)), minval(varvalue), & - & maxval(varvalue) - ncstatus = nf90_close(ncfileid) - - !===================================================================== - - ! Define format statements - -500 format('NETCDFIO_VALUES_2D: Variable name = ', a, '; (min,max) = (', & - & f13.5,',',f13.5,').') - - !===================================================================== - - end subroutine netcdfio_values_2d_intepr - - !======================================================================= - - ! netcdfio_values_3d_intepr.f90: - - !----------------------------------------------------------------------- - - subroutine netcdfio_values_3d_intepr(filename,varname,varvalue) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=*) :: varname - integer, dimension(ncxdim,ncydim,nczdim) :: varvalue - - ! Define variables computed within routine - - integer, dimension(4) :: start - integer, dimension(4) :: count - - !===================================================================== - - ! Define local variables - - ncstatus = nf90_open(path=trim(adjustl(filename)),mode=nf90_nowrite, & - & ncid=ncfileid) - ncstatus = nf90_inq_varid(ncfileid,trim(adjustl(varname)),ncvarid) - if (ncstatus .ne. 0) then - print *,'fv3 read failed for ',trim(adjustl(varname)) - call mpi_interface_terminate() - stop - endif - if(ncstatic) start = (/1,1,1,1/) - if(.not. ncstatic) start = (/1,1,1,ncrec/) - count = (/ncxdim,ncydim,nczdim,1/) - ncstatus = nf90_get_var(ncfileid,ncvarid,varvalue,start,count) - if(debug) write(6,500) trim(adjustl(varname)), minval(varvalue), & - & maxval(varvalue) - ncstatus = nf90_close(ncfileid) - - !===================================================================== - - ! Define format statements - -500 format('NETCDFIO_VALUES_3D: Variable name = ', a, '; (min,max) = (', & - & f13.5,',',f13.5,').') - - !===================================================================== - - end subroutine netcdfio_values_3d_intepr - - !======================================================================= - - ! netcdfio_dimension.f90: - - !----------------------------------------------------------------------- - - subroutine netcdfio_dimension(filename,dimname,dimvalue) - - ! Define variables passed to routine - - character(len=500) :: filename - character(len=*) :: dimname - integer :: dimvalue - - !===================================================================== - - ! Define local variables - - ncstatus = nf90_open(path=trim(adjustl(filename)),mode=nf90_nowrite, & - & ncid=ncfileid) - ncstatus = nf90_inq_dimid(ncfileid,trim(adjustl(dimname)),ncdimid) - ncstatus = nf90_inquire_dimension(ncfileid,ncdimid,len=dimvalue) - ncstatus = nf90_close(ncfileid) - - !===================================================================== - - end subroutine netcdfio_dimension - - !======================================================================= - -end module netcdfio_interface diff --git a/sorc/regrid_nemsio.fd/physcons.f90 b/sorc/regrid_nemsio.fd/physcons.f90 deleted file mode 100644 index 4e69dca337..0000000000 --- a/sorc/regrid_nemsio.fd/physcons.f90 +++ /dev/null @@ -1,77 +0,0 @@ -! this module contains some the most frequently used math and ! -! physics constatns for gcm models. ! -! ! -! references: ! -! as set in NMC handbook from Smithsonian tables. ! -! ! - module physcons -! - use kinds, only : r_kind -! - implicit none -! - public - -! --- ... Math constants - - real(r_kind),parameter:: con_pi =3.1415926535897931 ! pi - real(r_kind),parameter:: con_sqrt2 =1.414214e+0 ! square root of 2 - real(r_kind),parameter:: con_sqrt3 =1.732051e+0 ! square root of 3 - -! --- ... Geophysics/Astronomy constants - - real(r_kind),parameter:: con_rerth =6.3712e+6 ! radius of earth (m) - real(r_kind),parameter:: con_g =9.80665e+0 ! gravity (m/s2) - real(r_kind),parameter:: con_omega =7.2921e-5 ! ang vel of earth (1/s) - real(r_kind),parameter:: con_p0 =1.01325e5 ! std atms pressure (pa) - real(r_kind),parameter:: con_solr =1.3660e+3 ! solar constant (W/m2)-liu(2002) - -! --- ... Thermodynamics constants - - real(r_kind),parameter:: con_rgas =8.314472 ! molar gas constant (J/mol/K) - real(r_kind),parameter:: con_rd =2.8705e+2 ! gas constant air (J/kg/K) - real(r_kind),parameter:: con_rv =4.6150e+2 ! gas constant H2O (J/kg/K) - real(r_kind),parameter:: con_cp =1.0046e+3 ! spec heat air @p (J/kg/K) - real(r_kind),parameter:: con_cv =7.1760e+2 ! spec heat air @v (J/kg/K) - real(r_kind),parameter:: con_cvap =1.8460e+3 ! spec heat H2O gas (J/kg/K) - real(r_kind),parameter:: con_cliq =4.1855e+3 ! spec heat H2O liq (J/kg/K) - real(r_kind),parameter:: con_csol =2.1060e+3 ! spec heat H2O ice (J/kg/K) - real(r_kind),parameter:: con_hvap =2.5000e+6 ! lat heat H2O cond (J/kg) - real(r_kind),parameter:: con_hfus =3.3358e+5 ! lat heat H2O fusion (J/kg) - real(r_kind),parameter:: con_psat =6.1078e+2 ! pres at H2O 3pt (Pa) - real(r_kind),parameter:: con_t0c =2.7315e+2 ! temp at 0C (K) - real(r_kind),parameter:: con_ttp =2.7316e+2 ! temp at H2O 3pt (K) - real(r_kind),parameter:: con_tice =2.7120e+2 ! temp freezing sea (K) - real(r_kind),parameter:: con_jcal =4.1855E+0 ! joules per calorie () - real(r_kind),parameter:: con_rhw0 =1022.0 ! sea water reference density (kg/m^3) - real(r_kind),parameter:: con_epsq =1.0E-12 ! min q for computing precip type - -! Secondary constants - - real(r_kind),parameter:: con_rocp =con_rd/con_cp - real(r_kind),parameter:: con_cpor =con_cp/con_rd - real(r_kind),parameter:: con_rog =con_rd/con_g - real(r_kind),parameter:: con_fvirt =con_rv/con_rd-1. - real(r_kind),parameter:: con_eps =con_rd/con_rv - real(r_kind),parameter:: con_epsm1 =con_rd/con_rv-1. - real(r_kind),parameter:: con_dldt =con_cvap-con_cliq - real(r_kind),parameter:: con_xpona =-con_dldt/con_rv - real(r_kind),parameter:: con_xponb =-con_dldt/con_rv+con_hvap/(con_rv*con_ttp) - -! --- ... Other Physics/Chemistry constants (source: 2002 CODATA) - - real(r_kind),parameter:: con_c =2.99792458e+8 ! speed of light (m/s) - real(r_kind),parameter:: con_plnk =6.6260693e-34 ! planck constatn (J/s) - real(r_kind),parameter:: con_boltz =1.3806505e-23 ! boltzmann constant (J/K) - real(r_kind),parameter:: con_sbc =5.670400e-8 ! stefan-boltzmann (W/m2/K4) - real(r_kind),parameter:: con_avgd =6.0221415e23 ! avogadro constant (1/mol) - real(r_kind),parameter:: con_gasv =22413.996e-6 ! vol of ideal gas at 273.15k, 101.325kpa (m3/mol) - real(r_kind),parameter:: con_amd =28.9644 ! molecular wght of dry air (g/mol) - real(r_kind),parameter:: con_amw =18.0154 ! molecular wght of water vapor (g/mol) - real(r_kind),parameter:: con_amo3 =47.9982 ! molecular wght of o3 (g/mol) - real(r_kind),parameter:: con_amco2 =44.011 ! molecular wght of co2 (g/mol) - real(r_kind),parameter:: con_amo2 =31.9999 ! molecular wght of o2 (g/mol) - real(r_kind),parameter:: con_amch4 =16.043 ! molecular wght of ch4 (g/mol) - real(r_kind),parameter:: con_amn2o =44.013 ! molecular wght of n2o (g/mol) - -end module physcons diff --git a/sorc/regrid_nemsio.fd/regrid_nemsio_interface.f90 b/sorc/regrid_nemsio.fd/regrid_nemsio_interface.f90 deleted file mode 100644 index 9ab5597af8..0000000000 --- a/sorc/regrid_nemsio.fd/regrid_nemsio_interface.f90 +++ /dev/null @@ -1,50 +0,0 @@ -module regrid_nemsio_interface - - !======================================================================= - - ! Define associated modules and subroutines - - !----------------------------------------------------------------------- - - use constants - use kinds - - !----------------------------------------------------------------------- - - use fv3_interface - use gfs_nems_interface - use namelist_def - - !----------------------------------------------------------------------- - - implicit none - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - ! regrid_nemsio.f90: - - !----------------------------------------------------------------------- - - subroutine regrid_nemsio() - - !===================================================================== - - ! Define local variables - - call namelistparams() - - ! Check local variable and proceed accordingly - - call fv3_regrid_nemsio() - - !===================================================================== - - end subroutine regrid_nemsio - - !======================================================================= - -end module regrid_nemsio_interface diff --git a/sorc/regrid_nemsio.fd/variable_interface.f90 b/sorc/regrid_nemsio.fd/variable_interface.f90 deleted file mode 100644 index d0d568429d..0000000000 --- a/sorc/regrid_nemsio.fd/variable_interface.f90 +++ /dev/null @@ -1,66 +0,0 @@ -module variable_interface - - !======================================================================= - - ! Define associated modules and subroutines - - !----------------------------------------------------------------------- - - use kinds - use physcons, only: rgas => con_rd, cp => con_cp, grav => con_g, & - & rerth => con_rerth, rocp => con_rocp, & - & pi => con_pi, con_rog - - !----------------------------------------------------------------------- - - use mpi_interface - use namelist_def - - !----------------------------------------------------------------------- - - implicit none - - !----------------------------------------------------------------------- - - ! Define interfaces and attributes for module routines - - private - public :: varinfo - !public :: variable_lookup - public :: variable_clip - - !----------------------------------------------------------------------- - - ! Define all data and structure types for routine; these variables - ! are variables required by the subroutines within this module - - type varinfo - character(len=20) :: var_name - character(len=20) :: nems_name - character(len=20) :: nems_levtyp - integer :: nems_lev - character(len=20) :: itrptyp - logical :: clip - integer :: ndims - end type varinfo ! type varinfo - - !----------------------------------------------------------------------- - -contains - - !======================================================================= - - subroutine variable_clip(grid) - - - real(r_double) :: grid(:) - real(r_double) :: clip - - clip = tiny(grid(1)) - where(grid .le. dble(0.0)) grid = clip - - end subroutine variable_clip - - !======================================================================= - -end module variable_interface diff --git a/sorc/relocate_mv_nvortex.fd/BOUND.f b/sorc/relocate_mv_nvortex.fd/BOUND.f deleted file mode 100755 index 6475438373..0000000000 --- a/sorc/relocate_mv_nvortex.fd/BOUND.f +++ /dev/null @@ -1,28 +0,0 @@ - SUBROUTINE BOUND(NMX,XR,ro) -C - PARAMETER (IMX=41 , JMX=41) -C - DIMENSION XR(NMX),ro(nmx) - COMMON /XXX/ XF(IMX,JMX),XC,YC,DX,DY - COMMON /POSIT/ XOLD,YOLD - PI = 4.*ATAN(1.0) -c fact=cos(yold*pi/180.) - fact=1.0 - DO 10 I=1,NMX - THETA= 2.*PI*FLOAT(I-1)/FLOAT(NMX) - X=RO(i)/fact*COS(THETA)+XC +1. - Y=RO(i)*SIN(THETA)+YC +1. - IX=INT(X/DX) - IY=INT(Y/DY) - IX1=IX+1 - IY1=IY+1 - P=X/DX-FLOAT(IX) - Q=Y/DY-FLOAT(IY) - XR(I)=(1.-P)*(1.-Q)*XF(IX,IY) +(1.-P)*Q*XF(IX,IY+1) - 1 + (1.-Q)*P*XF(IX+1,IY) + P*Q*XF(IX+1,IY+1) -c write(6,*) 'QLIU TEST, BOUND=',XR(I),XF(IX,IY),XF(IX,IY+1), -c 2 XF(IX+1,IY),XF(IX+1,IY+1),I - -10 CONTINUE - RETURN - END diff --git a/sorc/relocate_mv_nvortex.fd/FDUMP.f b/sorc/relocate_mv_nvortex.fd/FDUMP.f deleted file mode 100755 index 644e933fdb..0000000000 --- a/sorc/relocate_mv_nvortex.fd/FDUMP.f +++ /dev/null @@ -1,24 +0,0 @@ - SUBROUTINE FDUMP -C***BEGIN PROLOGUE FDUMP -C***DATE WRITTEN 790801 (YYMMDD) -C***REVISION DATE 820801 (YYMMDD) -C***CATEGORY NO. Z -C***KEYWORDS ERROR,XERROR PACKAGE -C***AUTHOR JONES, R. E., (SNLA) -C***PURPOSE Symbolic dump (should be locally written). -C***DESCRIPTION -C ***Note*** Machine Dependent Routine -C FDUMP is intended to be replaced by a locally written -C version which produces a symbolic dump. Failing this, -C it should be replaced by a version which prints the -C subprogram nesting list. Note that this dump must be -C printed on each of up to five files, as indicated by the -C XGETUA routine. See XSETUA and XGETUA for details. -C -C Written by Ron Jones, with SLATEC Common Math Library Subcommittee -C Latest revision --- 23 May 1979 -C***ROUTINES CALLED (NONE) -C***END PROLOGUE FDUMP -C***FIRST EXECUTABLE STATEMENT FDUMP - RETURN - END diff --git a/sorc/relocate_mv_nvortex.fd/H12.f b/sorc/relocate_mv_nvortex.fd/H12.f deleted file mode 100755 index 3a3323436f..0000000000 --- a/sorc/relocate_mv_nvortex.fd/H12.f +++ /dev/null @@ -1,137 +0,0 @@ - SUBROUTINE H12(MODE,LPIVOT,L1,M,U,IUE,UP,C,ICE,ICV,NCV) -C***BEGIN PROLOGUE H12 -C***REFER TO HFTI,LSEI,WNNLS -C -C SUBROUTINE H12 (MODE,LPIVOT,L1,M,U,IUE,UP,C,ICE,ICV,NCV) -C -C C.L.Lawson and R.J.Hanson, Jet Propulsion Laboratory, 1973 Jun 12 -C to appear in 'Solving Least Squares Problems', Prentice-Hall, 1974 -C -C Modified at SANDIA LABS, May 1977, to -- -C -C 1) Remove double precision accumulation, and -C 2) Include usage of the Basic Linear Algebra Package for -C vectors longer than a particular threshold. -C -C Construction and/or application of a single -C Householder transformation.. Q = I + U*(U**T)/B -C -C MODE = 1 or 2 to select algorithm H1 or H2 . -C LPIVOT is the index of the pivot element. -C L1,M If L1 .LE. M the transformation will be constructed to -C zero elements indexed from L1 through M. If L1 GT. M -C THE SUBROUTINE DOES AN IDENTITY TRANSFORMATION. -C U(),IUE,UP On entry to H1 U() contains the pivot vector. -C IUE is the storage increment between elements. -C On exit from H1 U() and UP -C contain quantities defining the vector U of the -C Householder transformation. On entry to H2 U() -C and UP should contain quantities previously computed -C by H1. These will not be modified by H2. -C C() On entry to H1 or H2 C() contains a matrix which will be -C regarded as a set of vectors to which the Householder -C transformation is to be applied. On exit C() contains the -C set of transformed vectors. -C ICE Storage increment between elements of vectors in C(). -C ICV Storage increment between vectors in C(). -C NCV Number of vectors in C() to be transformed. If NCV .LE. 0 -C no operations will be done on C(). -C***ROUTINES CALLED SAXPY,SDOT,SSWAP -C***END PROLOGUE H12 -c - USE setparms -c - DIMENSION U(IUE,M), C(1) -C***FIRST EXECUTABLE STATEMENT H12 - ONE=1. -C - IF (0.GE.LPIVOT.OR.LPIVOT.GE.L1.OR.L1.GT.M) RETURN - CL=ABS(U(1,LPIVOT)) - IF (MODE.EQ.2) GO TO 60 -C ****** CONSTRUCT THE TRANSFORMATION. ****** - DO 10 J=L1,M - 10 CL=AMAX1(ABS(U(1,J)),CL) - IF (CL) 130,130,20 - 20 CLINV=ONE/CL - SM=(U(1,LPIVOT)*CLINV)**2 - DO 30 J=L1,M - 30 SM=SM+(U(1,J)*CLINV)**2 - CL=CL*SQRT(SM) - IF (U(1,LPIVOT)) 50,50,40 - 40 CL=-CL - 50 UP=U(1,LPIVOT)-CL - U(1,LPIVOT)=CL - GO TO 70 -C ****** APPLY THE TRANSFORMATION I+U*(U**T)/B TO C. ****** -C - 60 IF (CL) 130,130,70 - 70 IF (NCV.LE.0) RETURN - B=UP*U(1,LPIVOT) -C B MUST BE NONPOSITIVE HERE. IF B = 0., RETURN. -C - IF (B) 80,130,130 - 80 B=ONE/B - MML1P2=M-L1+2 - IF (MML1P2.GT.20) GO TO 140 - I2=1-ICV+ICE*(LPIVOT-1) - INCR=ICE*(L1-LPIVOT) - DO 120 J=1,NCV - I2=I2+ICV - I3=I2+INCR - I4=I3 - SM=C(I2)*UP - DO 90 I=L1,M - SM=SM+C(I3)*U(1,I) - 90 I3=I3+ICE - IF (SM) 100,120,100 - 100 SM=SM*B - C(I2)=C(I2)+SM*UP - DO 110 I=L1,M - C(I4)=C(I4)+SM*U(1,I) - 110 I4=I4+ICE - 120 CONTINUE - 130 RETURN - 140 CONTINUE - L1M1=L1-1 - KL1=1+(L1M1-1)*ICE - KL2=KL1 - KLP=1+(LPIVOT-1)*ICE - UL1M1=U(1,L1M1) - U(1,L1M1)=UP - IF (LPIVOT.EQ.L1M1) GO TO 150 - if (kind(C) == real_single) then - CALL SSWAP(NCV,C(KL1),ICV,C(KLP),ICV) - else if (kind(C) == real_double) then - CALL DSWAP(NCV,C(KL1),ICV,C(KLP),ICV) - endif - - 150 CONTINUE - - if (kind(U) == real_single .and. kind(C) == real_single) then - do J=1,NCV - SM=SDOT(MML1P2,U(1,L1M1),IUE,C(KL1),ICE) - SM=SM*B - CALL SAXPY (MML1P2,SM,U(1,L1M1),IUE,C(KL1),ICE) - KL1=KL1+ICV - enddo - else if (kind(U) == real_double .and. kind(C) == real_double) then - do J=1,NCV - SM=DDOT(MML1P2,U(1,L1M1),IUE,C(KL1),ICE) - SM=SM*B - CALL DAXPY (MML1P2,SM,U(1,L1M1),IUE,C(KL1),ICE) - KL1=KL1+ICV - enddo - endif - - U(1,L1M1)=UL1M1 - IF (LPIVOT.EQ.L1M1) RETURN - KL1=KL2 - - if (kind(C) == real_single) then - CALL SSWAP(NCV,C(KL1),ICV,C(KLP),ICV) - else if (kind(C) == real_double) then - CALL DSWAP(NCV,C(KL1),ICV,C(KLP),ICV) - endif - - RETURN - END diff --git a/sorc/relocate_mv_nvortex.fd/I1MACH.f b/sorc/relocate_mv_nvortex.fd/I1MACH.f deleted file mode 100755 index 09dd15ae6b..0000000000 --- a/sorc/relocate_mv_nvortex.fd/I1MACH.f +++ /dev/null @@ -1,108 +0,0 @@ - INTEGER FUNCTION I1MACH(I) -C***BEGIN PROLOGUE I1MACH -C***DATE WRITTEN 750101 (YYMMDD) -C***REVISION DATE 910131 (YYMMDD) -C***CATEGORY NO. R1 -C***KEYWORDS MACHINE CONSTANTS -C***AUTHOR FOX, P. A., (BELL LABS) -C HALL, A. D., (BELL LABS) -C SCHRYER, N. L., (BELL LABS) -C***PURPOSE Returns integer machine dependent constants -C***DESCRIPTION -C -C This is the CMLIB version of I1MACH, the integer machine -C constants subroutine originally developed for the PORT library. -C -C I1MACH can be used to obtain machine-dependent parameters -C for the local machine environment. It is a function -C subroutine with one (input) argument, and can be called -C as follows, for example -C -C K = I1MACH(I) -C -C where I=1,...,16. The (output) value of K above is -C determined by the (input) value of I. The results for -C various values of I are discussed below. -C -C I/O unit numbers. -C I1MACH( 1) = the standard input unit. -C I1MACH( 2) = the standard output unit. -C I1MACH( 3) = the standard punch unit. -C I1MACH( 4) = the standard error message unit. -C -C Words. -C I1MACH( 5) = the number of bits per integer storage unit. -C I1MACH( 6) = the number of characters per integer storage unit. -C -C Integers. -C assume integers are represented in the S-digit, base-A form -C -C sign ( X(S-1)*A**(S-1) + ... + X(1)*A + X(0) ) -C -C where 0 .LE. X(I) .LT. A for I=0,...,S-1. -C I1MACH( 7) = A, the base. -C I1MACH( 8) = S, the number of base-A digits. -C I1MACH( 9) = A**S - 1, the largest magnitude. -C -C Floating-Point Numbers. -C Assume floating-point numbers are represented in the T-digit, -C base-B form -C sign (B**E)*( (X(1)/B) + ... + (X(T)/B**T) ) -C -C where 0 .LE. X(I) .LT. B for I=1,...,T, -C 0 .LT. X(1), and EMIN .LE. E .LE. EMAX. -C I1MACH(10) = B, the base. -C -C Single-Precision -C I1MACH(11) = T, the number of base-B digits. -C I1MACH(12) = EMIN, the smallest exponent E. -C I1MACH(13) = EMAX, the largest exponent E. -C -C Double-Precision -C I1MACH(14) = T, the number of base-B digits. -C I1MACH(15) = EMIN, the smallest exponent E. -C I1MACH(16) = EMAX, the largest exponent E. -C -C To alter this function for a particular environment, -C the desired set of DATA statements should be activated by -C removing the C from column 1. Also, the values of -C I1MACH(1) - I1MACH(4) should be checked for consistency -C with the local operating system. -C***REFERENCES FOX P.A., HALL A.D., SCHRYER N.L.,*FRAMEWORK FOR A -C PORTABLE LIBRARY*, ACM TRANSACTIONS ON MATHEMATICAL -C SOFTWARE, VOL. 4, NO. 2, JUNE 1978, PP. 177-188. -C***ROUTINES CALLED (NONE) -C***END PROLOGUE I1MACH -C - INTEGER IMACH(16),OUTPUT - EQUIVALENCE (IMACH(4),OUTPUT) -C -C MACHINE CONSTANTS FOR THE IBM RS 6000 -C USING THE 32 BIT INTEGER COMPILER OPTION -C -C === MACHINE = 1 .32-BIT-INTEGER - DATA IMACH( 1) / 5 / - DATA IMACH( 2) / 6 / - DATA IMACH( 3) / 6 / - DATA IMACH( 4) / 0 / - DATA IMACH( 5) / 32 / - DATA IMACH( 6) / 4 / - DATA IMACH( 7) / 2 / - DATA IMACH( 8) / 31 / - DATA IMACH( 9) / 2147483647 / - DATA IMACH(10) / 2 / - DATA IMACH(11) / 24 / - DATA IMACH(12) / -125 / - DATA IMACH(13) / 128 / - DATA IMACH(14) / 53 / - DATA IMACH(15) / -1021 / - DATA IMACH(16) / 1024 / -c -C***FIRST EXECUTABLE STATEMENT I1MACH - IF (I .LT. 1 .OR. I .GT. 16) - 1 CALL XERROR ( 'I1MACH -- I OUT OF BOUNDS',25,1,2) -C - I1MACH=IMACH(I) - RETURN -C - END diff --git a/sorc/relocate_mv_nvortex.fd/J4SAVE.f b/sorc/relocate_mv_nvortex.fd/J4SAVE.f deleted file mode 100644 index 630238cda8..0000000000 --- a/sorc/relocate_mv_nvortex.fd/J4SAVE.f +++ /dev/null @@ -1,51 +0,0 @@ - FUNCTION J4SAVE(IWHICH,IVALUE,ISET) -C***BEGIN PROLOGUE J4SAVE -C***REFER TO XERROR -C Abstract -C J4SAVE saves and recalls several global variables needed -C by the library error handling routines. -C -C Description of Parameters -C --Input-- -C IWHICH - Index of item desired. -C = 1 Refers to current error number. -C = 2 Refers to current error control flag. -C = 3 Refers to current unit number to which error -C messages are to be sent. (0 means use standard.) -C = 4 Refers to the maximum number of times any -C message is to be printed (as set by XERMAX). -C = 5 Refers to the total number of units to which -C each error message is to be written. -C = 6 Refers to the 2nd unit for error messages -C = 7 Refers to the 3rd unit for error messages -C = 8 Refers to the 4th unit for error messages -C = 9 Refers to the 5th unit for error messages -C IVALUE - The value to be set for the IWHICH-th parameter, -C if ISET is .TRUE. . -C ISET - If ISET=.TRUE., the IWHICH-th parameter will BE -C given the value, IVALUE. If ISET=.FALSE., the -C IWHICH-th parameter will be unchanged, and IVALUE -C is a dummy parameter. -C --Output-- -C The (old) value of the IWHICH-th parameter will be returned -C in the function value, J4SAVE. -C -C Written by Ron Jones, with SLATEC Common Math Library Subcommittee -C Adapted from Bell Laboratories PORT Library Error Handler -C Latest revision --- 23 MAY 1979 -C***REFERENCES JONES R.E., KAHANER D.K., "XERROR, THE SLATEC ERROR-" -C HANDLING PACKAGE", SAND82-0800, SANDIA LABORATORIES," -C 1982. -C***ROUTINES CALLED (NONE) -C***END PROLOGUE J4SAVE - LOGICAL ISET - INTEGER IPARAM(9) - SAVE IPARAM - DATA IPARAM(1),IPARAM(2),IPARAM(3),IPARAM(4)/0,2,0,10/ - DATA IPARAM(5)/1/ - DATA IPARAM(6),IPARAM(7),IPARAM(8),IPARAM(9)/0,0,0,0/ -C***FIRST EXECUTABLE STATEMENT J4SAVE - J4SAVE = IPARAM(IWHICH) - IF (ISET) IPARAM(IWHICH) = IVALUE - RETURN - END diff --git a/sorc/relocate_mv_nvortex.fd/SEPAR.f b/sorc/relocate_mv_nvortex.fd/SEPAR.f deleted file mode 100755 index 8d7a444ec4..0000000000 --- a/sorc/relocate_mv_nvortex.fd/SEPAR.f +++ /dev/null @@ -1,146 +0,0 @@ - SUBROUTINE SEPAR(XD,XM) -C -C SEPERATES A FIELD INTO HURRICANE COMPONENT AND REMAINDER -C - - PARAMETER( NMX=24,nmx1=nmx+1,nmx2=nmx*2,nmx6=nmx*6) - PARAMETER (IMX=41 , JMX=41) - DIMENSION XR(NMX),XD(IMX,JMX) -CC - COMMON /POSIT/ XOLD,YOLD,XCORN,YCORN - COMMON /XXX/ XF(IMX,JMX),XC,YC,DX,DY - dimension XM(IMX,JMX) -C -c new arrays - dimension b(nmx),w(nmx),ab(nmx,nmx1),ipvt(nmx) - 1 ,wrk(nmx6),iwrk(nmx2) - common /matrix/ a(nmx,nmx),capd2 - common /vect/rovect(nmx),xvect(nmx),yvect(nmx) -c - DATA XR/24*0./ -C -C XC,YC ARE HURRICANE COORDINATES -C RO IS RADIUS AT WHICH HURRICANE COMPONENT OF FIELD GOES TO ZERO -C XR ARRAY CONTAINS THE FIELD VALUES OF 12 EQUALLY SPACED POINTS -C ON CIRCLE OF RADIUS RO CENTERED AT XC,YC -C -c set ro to be max value of rovect -c - ro=0. - do 22 i=1,nmx - ro=amax1(ro,rovect(i)) -22 continue - PI = 4.*ATAN(1.0) - PI180 = 4.*ATAN(1.0)/180. -c qliu FACT = COS(YOLD*PI180) - FACT = 1.0 -c DDEL=1.0*PI180 -c DTHA=1.0*PI180 -CC -CC XC IS THE I POSITION OF THE CENTER OF THE OLD VORTEX -CC YC IS THE J POSITION OF THE CENTER OF THE OLD VORTEX -CC DDEL IS THE LONG. IN RADIANS OF THE OUTER NEST -CC DTHA IS THE LAT. IN RADIANS OF THE OUTER NEST -CC -c no fact here -c DX=FACT*DDEL/PI180 -c -c dx=ddel/pi180 -c DY=DTHA/PI180 - dx=1.0 - DY=1.0 -cc - XC = (XOLD-XCORN)*DX - YC = (YOLD-YCORN)*DY - IS=INT((XC-RO/fact)/DX) +1. - IE=INT((XC+RO/fact)/DX + 1.) - JS=INT((YC-RO)/DY) +1. - JE=INT((YC+RO)/DY + 1.) -C - DO 1 J = 1 , JMX - DO 1 I = 1 , IMX - XF(I,J) = XD(I,J) -1 CONTINUE -C -C SUBROUTINE BOUND COMPUTES FIELD VALUES OF ARRAY XR USING -C BILINEAR INTERPOLATION -C -c - CALL BOUND(NMX,XR,rovect) - -C -c xrop(nmx) are the interpolated values of the disturbance -c field at the rovect pts -c -c romax is the maximum value in rovect(nmx). Within the loop a local -c ro is computed for use in the separation. At the start of the loop -c ro is again set to romax to define the domain. -c -c -c - w=0. - romax=ro -C - DO 10 IX=IS,IE - DO 11 JY=JS,JE - ro=romax -c X=XC-RO +DX*(IX-IS) -c Y=YC-RO +DY*(JY-JS) - X= DX*float(IX) -1. - Y= DY*float(JY) -1. - delx=(x-xc)*fact - dely=(y-yc) - DR=SQRT((delx)**2 +(dely)**2) - IF(DR.GT.RO)GOTO11 - IF(delx.ne.0.) THETA=ATAN((dely)/(delx)) - if(delx.eq.0..and.dely.lt.0.)theta=270.*pi180 - if(delx.eq.0..and.dely.gt.0.)theta=90. *pi180 - IF(delx.LT.0.)THETA=THETA+PI - IF(THETA.LT.0.)THETA=2.*PI+THETA - N1=INT(THETA*NMX/(2.*PI)) - IF(N1.GT.nmx)write(6,*)N1,THETA*57.296 - IF(N1.LT.0)write(6,*) N1,THETA*57.296 - N2=N1+2 - IF(N2.GT.NMX)N2=N2-NMX - DELTH=THETA- 2.*PI*FLOAT(N1)/FLOAT(NMX) -c - ro=delth*float(nmx)/(2.*pi)*(rovect(n2)-rovect(n1+1)) - 1 +rovect(n1+1) - IF(DR.GT.ro)GOTO11 - XRO=DELTH*FLOAT(NMX)/(2.*PI)*(XR(N2)-XR(N1+1)) +XR(N1+1) -CC -c Now add new code to compute distance from each gridpt. to rovect pts -c - do 12 ip=1,nmx - dpij= (fact*(x-xvect(ip)))**2 +(y-yvect(ip))**2 - b(ip)=exp(-dpij/capd2) -12 continue -c -c - do 44 ip=1,nmx - do 43 jp=1,nmx -43 ab(ip,jp)=a(ip,jp) - ab(ip,nmx1)=b(ip) -44 continue -c -c solve system using constrained least squares method -c - call wnnls(ab,nmx,0,nmx,nmx,0,1.,w,rnm,md,iwrk,wrk) -c - temp=0. - do 20 ip=1,nmx - temp=temp +w(ip)*xr(ip) -20 continue -c xh(ix,jy)=xf(ix,jy)-temp -c qliu xd(ix,jy)=temp - xm(ix,jy)=temp -11 CONTINUE -10 CONTINUE -c write(6,*) 'qliu test2' - do j=1,jmx - do i=1,imx -c write(6,*) xf(i,j),xd(i,j),xf(i,j)-xd(i,j),i,j - end do - end do - RETURN - END diff --git a/sorc/relocate_mv_nvortex.fd/WNLIT.f b/sorc/relocate_mv_nvortex.fd/WNLIT.f deleted file mode 100755 index 16c218215f..0000000000 --- a/sorc/relocate_mv_nvortex.fd/WNLIT.f +++ /dev/null @@ -1,437 +0,0 @@ - SUBROUTINE WNLIT(W,MDW,M,N,L,IPIVOT,ITYPE,H,SCALE,RNORM,IDOPE, - 1 DOPE,DONE) -C***BEGIN PROLOGUE WNLIT -C***REFER TO WNNLS -C -C This is a companion subprogram to WNNLS( ). -C The documentation for WNNLS( ) has more complete -C usage instructions. -C -C Note The M by (N+1) matrix W( , ) contains the rt. hand side -C B as the (N+1)st col. -C -C Triangularize L1 by L1 subsystem, where L1=MIN(M,L), with -C col interchanges. -C Revised March 4, 1982. -C***ROUTINES CALLED H12,ISAMAX,SCOPY,SROTM,SROTMG,SSCAL,SSWAP -C***END PROLOGUE WNLIT -C -C THE EDITING REQUIRED TO CONVERT THIS SUBROUTINE FROM SINGLE TO -C DOUBLE PRECISION INVOLVES THE FOLLOWING CHARACTER STRING CHANGES. -C USE AN EDITING COMMAND (CHANGE) /STRING-1/(TO)STRING-2/. -C (BEGIN CHANGES AT LINE WITH C++ IN COLS. 1-3.) -C /REAL (12 BLANKS)/DOUBLE PRECISION/,/SCOPY/DCOPY/,/SROTM/DROTM/, -C /SSCAL/DSCAL/, -C /SSWAP/DSWAP/,/AMAX1/DMAX1/,/ISAMAX/IDAMAX/,/.E-/.D-/,/E0/D0/ -C -C++ - USE setparms -c - REAL W(MDW,1), H(1), SCALE(1), DOPE(4), SPARAM(5) - REAL ALSQ, AMAX, EANORM, FAC, FACTOR, HBAR, ONE, RN - REAL RNORM, SN, T, TAU, TENM3, ZERO - REAL AMAX1 - INTEGER ITYPE(1), IPIVOT(1), IDOPE(8) - integer(kind = int_single) ISAMAX,IDAMAX - LOGICAL INDEP, DONE, RECALC - DATA TENM3 /1.E-3/, ZERO /0.E0/, ONE /1.E0/ -C -C***FIRST EXECUTABLE STATEMENT WNLIT - ME = IDOPE(1) - MEP1 = IDOPE(2) - KRANK = IDOPE(3) - KRP1 = IDOPE(4) - NSOLN = IDOPE(5) - NIV = IDOPE(6) - NIV1 = IDOPE(7) - L1 = IDOPE(8) -C - ALSQ = DOPE(1) - EANORM = DOPE(2) - FAC = DOPE(3) - TAU = DOPE(4) - NP1 = N + 1 - LB = MIN0(M-1,L) - RECALC = .TRUE. - RNORM = ZERO - KRANK = 0 -C WE SET FACTOR=1.E0 SO THAT THE HEAVY WEIGHT ALAMDA WILL BE -C INCLUDED IN THE TEST FOR COL INDEPENDENCE. - FACTOR = 1.E0 - I = 1 - IP1 = 2 - LEND = L - 10 IF (.NOT.(I.LE.LB)) GO TO 150 -C -C SET IR TO POINT TO THE I-TH ROW. - IR = I - MEND = M - ASSIGN 20 TO IGO996 - GO TO 460 -C -C UPDATE-COL-SS-AND-FIND-PIVOT-COL - 20 ASSIGN 30 TO IGO993 - GO TO 560 -C -C PERFORM-COL-INTERCHANGE -C -C SET IC TO POINT TO I-TH COL. - 30 IC = I - ASSIGN 40 TO IGO990 - GO TO 520 -C -C TEST-INDEP-OF-INCOMING-COL - 40 IF (.NOT.(INDEP)) GO TO 110 -C -C ELIMINATE I-TH COL BELOW DIAG. USING MOD. GIVENS TRANSFORMATIONS -C APPLIED TO (A B). - J = M - DO 100 JJ=IP1,M - JM1 = J - 1 - JP = JM1 -C WHEN OPERATING NEAR THE ME LINE, USE THE LARGEST ELT. -C ABOVE IT AS THE PIVOT. - IF (.NOT.(J.EQ.MEP1)) GO TO 80 - IMAX = ME - AMAX = SCALE(ME)*W(ME,I)**2 - 50 IF (.NOT.(JP.GE.I)) GO TO 70 - T = SCALE(JP)*W(JP,I)**2 - IF (.NOT.(T.GT.AMAX)) GO TO 60 - IMAX = JP - AMAX = T - 60 JP = JP - 1 - GO TO 50 - 70 JP = IMAX - 80 IF (.NOT.(W(J,I).NE.ZERO)) GO TO 90 - CALL SROTMG(SCALE(JP), SCALE(J), W(JP,I), W(J,I), SPARAM) - W(J,I) = ZERO - CALL SROTM(NP1-I, W(JP,IP1), MDW, W(J,IP1), MDW, SPARAM) - 90 J = JM1 - 100 CONTINUE - GO TO 140 - 110 CONTINUE - IF (.NOT.(LEND.GT.I)) GO TO 130 -C -C COL I IS DEPENDENT. SWAP WITH COL LEND. - MAX = LEND -C -C PERFORM-COL-INTERCHANGE - ASSIGN 120 TO IGO993 - GO TO 560 - 120 CONTINUE - LEND = LEND - 1 -C -C FIND COL IN REMAINING SET WITH LARGEST SS. - if (kind(H) == real_single) then - MAX = ISAMAX(LEND-I+1,H(I),1) + I - 1 - else if (kind(H) == real_double) then - MAX = IDAMAX(LEND-I+1,H(I),1) + I - 1 - endif - HBAR = H(MAX) - GO TO 30 - 130 CONTINUE - KRANK = I - 1 - GO TO 160 - 140 I = IP1 - IP1 = IP1 + 1 - GO TO 10 - 150 KRANK = L1 - 160 CONTINUE - KRP1 = KRANK + 1 - IF (.NOT.(KRANK.LT.ME)) GO TO 290 - FACTOR = ALSQ - DO 170 I=KRP1,ME - IF (L.GT.0) W(I,1) = ZERO - if (kind(W) == real_single) then - CALL SCOPY(L, W(I,1), 0, W(I,1), MDW) - else if (kind(W) == real_double) then - CALL DCOPY(L, W(I,1), 0, W(I,1), MDW) - endif - 170 CONTINUE -C -C DETERMINE THE RANK OF THE REMAINING EQUALITY CONSTRAINT -C EQUATIONS BY ELIMINATING WITHIN THE BLOCK OF CONSTRAINED -C VARIABLES. REMOVE ANY REDUNDANT CONSTRAINTS. - LP1 = L + 1 - RECALC = .TRUE. - LB = MIN0(L+ME-KRANK,N) - I = LP1 - IP1 = I + 1 - 180 IF (.NOT.(I.LE.LB)) GO TO 280 - IR = KRANK + I - L - LEND = N - MEND = ME - ASSIGN 190 TO IGO996 - GO TO 460 -C -C UPDATE-COL-SS-AND-FIND-PIVOT-COL - 190 ASSIGN 200 TO IGO993 - GO TO 560 -C -C PERFORM-COL-INTERCHANGE -C -C ELIMINATE ELEMENTS IN THE I-TH COL. - 200 J = ME - 210 IF (.NOT.(J.GT.IR)) GO TO 230 - JM1 = J - 1 - IF (.NOT.(W(J,I).NE.ZERO)) GO TO 220 - CALL SROTMG(SCALE(JM1), SCALE(J), W(JM1,I), W(J,I), SPARAM) - W(J,I) = ZERO - CALL SROTM(NP1-I, W(JM1,IP1), MDW, W(J,IP1), MDW, SPARAM) - 220 J = JM1 - GO TO 210 -C -C SET IC=I=COL BEING ELIMINATED - 230 IC = I - ASSIGN 240 TO IGO990 - GO TO 520 -C -C TEST-INDEP-OF-INCOMING-COL - 240 IF (INDEP) GO TO 270 -C -C REMOVE ANY REDUNDANT OR DEPENDENT EQUALITY CONSTRAINTS. - JJ = IR - 250 IF (.NOT.(IR.LE.ME)) GO TO 260 - W(IR,1) = ZERO - - if (kind(W) == real_single) then - CALL SCOPY(N, W(IR,1), 0, W(IR,1), MDW) - else if (kind(W) == real_double) then - CALL DCOPY(N, W(IR,1), 0, W(IR,1), MDW) - endif - - RNORM = RNORM + (SCALE(IR)*W(IR,NP1)/ALSQ)*W(IR,NP1) - W(IR,NP1) = ZERO - SCALE(IR) = ONE -C RECLASSIFY THE ZEROED ROW AS A LEAST SQUARES EQUATION. - ITYPE(IR) = 1 - IR = IR + 1 - GO TO 250 -C -C REDUCE ME TO REFLECT ANY DISCOVERED DEPENDENT EQUALITY -C CONSTRAINTS. - 260 CONTINUE - ME = JJ - 1 - MEP1 = ME + 1 - GO TO 300 - 270 I = IP1 - IP1 = IP1 + 1 - GO TO 180 - 280 CONTINUE - 290 CONTINUE - 300 CONTINUE - IF (.NOT.(KRANK.LT.L1)) GO TO 420 -C -C TRY TO DETERMINE THE VARIABLES KRANK+1 THROUGH L1 FROM THE -C LEAST SQUARES EQUATIONS. CONTINUE THE TRIANGULARIZATION WITH -C PIVOT ELEMENT W(MEP1,I). -C - RECALC = .TRUE. -C -C SET FACTOR=ALSQ TO REMOVE EFFECT OF HEAVY WEIGHT FROM -C TEST FOR COL INDEPENDENCE. - FACTOR = ALSQ - KK = KRP1 - I = KK - IP1 = I + 1 - 310 IF (.NOT.(I.LE.L1)) GO TO 410 -C -C SET IR TO POINT TO THE MEP1-ST ROW. - IR = MEP1 - LEND = L - MEND = M - ASSIGN 320 TO IGO996 - GO TO 460 -C -C UPDATE-COL-SS-AND-FIND-PIVOT-COL - 320 ASSIGN 330 TO IGO993 - GO TO 560 -C -C PERFORM-COL-INTERCHANGE -C -C ELIMINATE I-TH COL BELOW THE IR-TH ELEMENT. - 330 IRP1 = IR + 1 - J = M - DO 350 JJ=IRP1,M - JM1 = J - 1 - IF (.NOT.(W(J,I).NE.ZERO)) GO TO 340 - CALL SROTMG(SCALE(JM1), SCALE(J), W(JM1,I), W(J,I), SPARAM) - W(J,I) = ZERO - CALL SROTM(NP1-I, W(JM1,IP1), MDW, W(J,IP1), MDW, SPARAM) - 340 J = JM1 - 350 CONTINUE -C -C TEST IF NEW PIVOT ELEMENT IS NEAR ZERO. IF SO, THE COL IS -C DEPENDENT. - T = SCALE(IR)*W(IR,I)**2 - INDEP = T.GT.TAU**2*EANORM**2 - IF (.NOT.INDEP) GO TO 380 -C -C COL TEST PASSED. NOW MUST PASS ROW NORM TEST TO BE CLASSIFIED -C AS INDEPENDENT. - RN = ZERO - DO 370 I1=IR,M - DO 360 J1=IP1,N - RN = AMAX1(RN,SCALE(I1)*W(I1,J1)**2) - 360 CONTINUE - 370 CONTINUE - INDEP = T.GT.TAU**2*RN -C -C IF INDEPENDENT, SWAP THE IR-TH AND KRP1-ST ROWS TO MAINTAIN THE -C TRIANGULAR FORM. UPDATE THE RANK INDICATOR KRANK AND THE -C EQUALITY CONSTRAINT POINTER ME. - 380 IF (.NOT.(INDEP)) GO TO 390 - if (kind(W) == real_single) then - CALL SSWAP(NP1, W(KRP1,1), MDW, W(IR,1), MDW) - else if (kind(W) == real_double) then - CALL DSWAP(NP1, W(KRP1,1), MDW, W(IR,1), MDW) - endif - if (kind(SCALE) == real_single) then - CALL SSWAP(1, SCALE(KRP1), 1, SCALE(IR), 1) - else if (kind(SCALE) == real_double) then - CALL DSWAP(1, SCALE(KRP1), 1, SCALE(IR), 1) - endif -C RECLASSIFY THE LEAST SQ. EQUATION AS AN EQUALITY CONSTRAINT AND -C RESCALE IT. - ITYPE(IR) = 0 - T = SQRT(SCALE(KRP1)) - - if (kind(W) == real_single) then - CALL SSCAL(NP1, T, W(KRP1,1), MDW) - else if (kind(W) == real_double) then - CALL DSCAL(NP1, T, W(KRP1,1), MDW) - endif - - SCALE(KRP1) = ALSQ - ME = MEP1 - MEP1 = ME + 1 - KRANK = KRP1 - KRP1 = KRANK + 1 - GO TO 400 - 390 GO TO 430 - 400 I = IP1 - IP1 = IP1 + 1 - GO TO 310 - 410 CONTINUE - 420 CONTINUE - 430 CONTINUE -C -C IF PSEUDORANK IS LESS THAN L, APPLY HOUSEHOLDER TRANS. -C FROM RIGHT. - IF (.NOT.(KRANK.LT.L)) GO TO 450 - DO 440 I=1,KRANK - J = KRP1 - I - CALL H12(1, J, KRP1, L, W(J,1), MDW, H(J), W, MDW, 1, J-1) - 440 CONTINUE - 450 NIV = KRANK + NSOLN - L - NIV1 = NIV + 1 - IF (L.EQ.N) DONE = .TRUE. -C -C END OF INITIAL TRIANGULARIZATION. - IDOPE(1) = ME - IDOPE(2) = MEP1 - IDOPE(3) = KRANK - IDOPE(4) = KRP1 - IDOPE(5) = NSOLN - IDOPE(6) = NIV - IDOPE(7) = NIV1 - IDOPE(8) = L1 - RETURN - 460 CONTINUE -C -C TO UPDATE-COL-SS-AND-FIND-PIVOT-COL -C -C THE COL SS VECTOR WILL BE UPDATED AT EACH STEP. WHEN -C NUMERICALLY NECESSARY, THESE VALUES WILL BE RECOMPUTED. -C - IF (.NOT.(IR.NE.1 .AND. (.NOT.RECALC))) GO TO 480 -C UPDATE COL SS =SUM OF SQUARES. - DO 470 J=I,LEND - H(J) = H(J) - SCALE(IR-1)*W(IR-1,J)**2 - 470 CONTINUE -C -C TEST FOR NUMERICAL ACCURACY. - if (kind(H) == real_single) then - MAX = ISAMAX(LEND-I+1,H(I),1) + I - 1 - else if (kind(H) == real_double) then - MAX = IDAMAX(LEND-I+1,H(I),1) + I - 1 - endif - RECALC = HBAR + TENM3*H(MAX).EQ.HBAR -C -C IF REQUIRED, RECALCULATE COL SS, USING ROWS IR THROUGH MEND. - 480 IF (.NOT.(RECALC)) GO TO 510 - DO 500 J=I,LEND - H(J) = ZERO - DO 490 K=IR,MEND - H(J) = H(J) + SCALE(K)*W(K,J)**2 - 490 CONTINUE - 500 CONTINUE -C -C FIND COL WITH LARGEST SS. - if (kind(H) == real_single) then - MAX = ISAMAX(LEND-I+1,H(I),1) + I - 1 - else if (kind(H) == real_double) then - MAX = IDAMAX(LEND-I+1,H(I),1) + I - 1 - endif - - HBAR = H(MAX) - 510 GO TO 600 - 520 CONTINUE -C -C TO TEST-INDEP-OF-INCOMING-COL -C -C TEST THE COL IC TO DETERMINE IF IT IS LINEARLY INDEPENDENT -C OF THE COLS ALREADY IN THE BASIS. IN THE INIT TRI -C STEP, WE USUALLY WANT THE HEAVY WEIGHT ALAMDA TO -C BE INCLUDED IN THE TEST FOR INDEPENDENCE. IN THIS CASE THE -C VALUE OF FACTOR WILL HAVE BEEN SET TO 1.E0 BEFORE THIS -C PROCEDURE IS INVOKED. IN THE POTENTIALLY RANK DEFICIENT -C PROBLEM, THE VALUE OF FACTOR WILL HAVE BEEN -C SET TO ALSQ=ALAMDA**2 TO REMOVE THE EFFECT OF THE HEAVY WEIGHT -C FROM THE TEST FOR INDEPENDENCE. -C -C WRITE NEW COL AS PARTITIONED VECTOR -C (A1) NUMBER OF COMPONENTS IN SOLN SO FAR = NIV -C (A2) M-NIV COMPONENTS -C AND COMPUTE SN = INVERSE WEIGHTED LENGTH OF A1 -C RN = INVERSE WEIGHTED LENGTH OF A2 -C CALL THE COL INDEPENDENT WHEN RN .GT. TAU*SN - SN = ZERO - RN = ZERO - DO 550 J=1,MEND - T = SCALE(J) - IF (J.LE.ME) T = T/FACTOR - T = T*W(J,IC)**2 - IF (.NOT.(J.LT.IR)) GO TO 530 - SN = SN + T - GO TO 540 - 530 RN = RN + T - 540 CONTINUE - 550 CONTINUE - INDEP = RN.GT.TAU**2*SN - GO TO 590 - 560 CONTINUE -C -C TO PERFORM-COL-INTERCHANGE -C - IF (.NOT.(MAX.NE.I)) GO TO 570 -C EXCHANGE ELEMENTS OF PERMUTED INDEX VECTOR AND PERFORM COL -C INTERCHANGES. - ITEMP = IPIVOT(I) - IPIVOT(I) = IPIVOT(MAX) - IPIVOT(MAX) = ITEMP - - if (kind(W) == real_single) then - CALL SSWAP(M, W(1,MAX), 1, W(1,I), 1) - else if (kind(W) == real_double) then - CALL DSWAP(M, W(1,MAX), 1, W(1,I), 1) - endif - - T = H(MAX) - H(MAX) = H(I) - H(I) = T - 570 GO TO 580 - 580 GO TO IGO993, (30, 200, 330, 120) - 590 GO TO IGO990, (40, 240) - 600 GO TO IGO996, (20, 190, 320) - END diff --git a/sorc/relocate_mv_nvortex.fd/WNLSM.f b/sorc/relocate_mv_nvortex.fd/WNLSM.f deleted file mode 100755 index 2f039d70c6..0000000000 --- a/sorc/relocate_mv_nvortex.fd/WNLSM.f +++ /dev/null @@ -1,822 +0,0 @@ - SUBROUTINE WNLSM(W,MDW,MME,MA,N,L,PRGOPT,X,RNORM,MODE,IPIVOT, - 1 ITYPE,WD,H,SCALE,Z,TEMP,D) -C***BEGIN PROLOGUE WNLSM -C***REFER TO WNNLS -C -C This is a companion subprogram to WNNLS( ). -C The documentation for WNNLS( ) has more complete -C usage instructions. -C -C Written by Karen H. Haskell, Sandia Laboratories, -C with the help of R.J. Hanson, Sandia Laboratories, -C December 1976 - January 1978. -C Revised March 4, 1982. -C -C In addition to the parameters discussed in the prologue to -C subroutine WNNLS, the following work arrays are used in -C subroutine WNLSM (they are passed through the calling -C sequence from WNNLS for purposes of variable dimensioning). -C Their contents will in general be of no interest to the user. -C -C IPIVOT(*) -C An array of length N. Upon completion it contains the -C pivoting information for the cols of W(*,*). -C -C ITYPE(*) -C An array of length M which is used to keep track -C of the classification of the equations. ITYPE(I)=0 -C denotes equation I as an equality constraint. -C ITYPE(I)=1 denotes equation I as a least squares -C equation. -C -C WD(*) -C An array of length N. Upon completion it contains the -C dual solution vector. -C -C H(*) -C An array of length N. Upon completion it contains the -C pivot scalars of the Householder transformations performed -C in the case KRANK.LT.L. -C -C SCALE(*) -C An array of length M which is used by the subroutine -C to store the diagonal matrix of weights. -C These are used to apply the modified Givens -C transformations. -C -C Z(*),TEMP(*) -C Working arrays of length N. -C -C D(*) -C An array of length N that contains the -C column scaling for the matrix (E). -C (A) -C***ROUTINES CALLED H12,ISAMAX,SASUM,SAXPY,SCOPY,SNRM2,SROTM,SROTMG, -C SSCAL,SSWAP,WNLIT,XERROR -C***END PROLOGUE WNLSM -C -C THE EDITING REQUIRED TO CONVERT THIS SUBROUTINE FROM SINGLE TO -C DOUBLE PRECISION INVOLVES THE FOLLOWING CHARACTER STRING CHANGES. -C USE AN EDITING COMMAND (CHANGE) /STRING-1/(TO)STRING-2/. -C (BEGIN CHANGES AT LINE WITH C++ IN COLS. 1-3.) -C /REAL (12 BLANKS)/DOUBLE PRECISION/,/SASUM/DASUM/,/SROTMG/DROTMG/, -C /SNRM2/DNRM2/,/ SQRT/ DSQRT/,/SROTM/DROTM/,/AMAX1/DMAX1/, -C /SCOPY/DCOPY/,/SSCAL/DSCAL/,/SAXPY/DAXPY/,/E0/D0/,/SSWAP/DSWAP/, -C /ISAMAX/IDAMAX/,/SRELPR/DRELPR/ -C -C SUBROUTINE WNLSM (W,MDW,MME,MA,N,L,PRGOPT,X,RNORM,MODE, -C 1 IPIVOT,ITYPE,WD,H,SCALE,Z,TEMP,D) -C++ - USE setparms -c - REAL W(MDW,1), X(1), WD(1), H(1), SCALE(1), DOPE(4) - REAL Z(1), TEMP(1), PRGOPT(1), D(1), SPARAM(5) - REAL ALAMDA, ALPHA, ALSQ, AMAX, BNORM, EANORM - REAL SRELPR, FAC, ONE, BLOWUP - REAL RNORM, SM, T, TAU, TWO, WMAX, ZERO, ZZ, Z2 - REAL AMAX1, SQRT, SNRM2, SASUM, DNRM2, DASUM - - INTEGER IPIVOT(1), ITYPE(1), IDOPE(8) - integer(kind = int_single) ISAMAX,IDAMAX - LOGICAL HITCON, FEASBL, DONE, POS - DATA ZERO /0.E0/, ONE /1.E0/, TWO /2.E0/, SRELPR /0.E0/ -C -C INITIALIZE-VARIABLES -C***FIRST EXECUTABLE STATEMENT WNLSM - ASSIGN 10 TO IGO998 - GO TO 180 -C -C PERFORM INITIAL TRIANGULARIZATION IN THE SUBMATRIX -C CORRESPONDING TO THE UNCONSTRAINED VARIABLES USING -C THE PROCEDURE INITIALLY-TRIANGULARIZE. - 10 ASSIGN 20 TO IGO995 - GO TO 280 -C -C PERFORM WNNLS ALGORITHM USING THE FOLLOWING STEPS. -C -C UNTIL(DONE) -C -C COMPUTE-SEARCH-DIRECTION-AND-FEASIBLE-POINT -C -C WHEN (HITCON) ADD-CONSTRAINTS -C -C ELSE PERFORM-MULTIPLIER-TEST-AND-DROP-A-CONSTRAINT -C -C FIN -C -C COMPUTE-FINAL-SOLUTION -C - 20 IF (DONE) GO TO 80 -C - ASSIGN 30 TO IGO991 - GO TO 300 -C -C COMPUTE-SEARCH-DIRECTION-AND-FEASIBLE-POINT -C - 30 IF (.NOT.(HITCON)) GO TO 50 - ASSIGN 40 TO IGO986 - GO TO 370 - 40 GO TO 70 -C -C WHEN (HITCON) ADD-CONSTRAINTS -C - 50 ASSIGN 60 TO IGO983 - GO TO 640 - 60 CONTINUE -C -C ELSE PERFORM-MULTIPLIER-TEST-AND-DROP-A-CONSTRAINT -C - 70 GO TO 20 -C - 80 ASSIGN 90 TO IGO980 - GO TO 1000 -C -C COMPUTE-FINAL-SOLUTION -C - 90 RETURN - 100 CONTINUE -C -C TO PROCESS-OPTION-VECTOR - FAC = 1.E-4 -C -C THE NOMINAL TOLERANCE USED IN THE CODE, - TAU = SQRT(SRELPR) -C -C THE NOMINAL BLOW-UP FACTOR USED IN THE CODE. - BLOWUP = TAU -C -C THE NOMINAL COLUMN SCALING USED IN THE CODE IS -C THE IDENTITY SCALING. - D(1) = ONE - if (kind(D) == real_single) then - CALL SCOPY(N, D, 0, D, 1) - else if (kind(D) == real_double) then - CALL DCOPY(N, D, 0, D, 1) - endif -C -C DEFINE BOUND FOR NUMBER OF OPTIONS TO CHANGE. - NOPT = 1000 -C -C DEFINE BOUND FOR POSITIVE VALUE OF LINK. - NLINK = 100000 - NTIMES = 0 - LAST = 1 - LINK = PRGOPT(1) - IF (.NOT.(LINK.LE.0 .OR. LINK.GT.NLINK)) GO TO 110 - NERR = 3 - IOPT = 1 - CALL XERROR( 'WNNLS( ) THE OPTION VECTOR IS UNDEFINED', 39, NERR, - 1 IOPT) - MODE = 2 - RETURN - 110 IF (.NOT.(LINK.GT.1)) GO TO 160 - NTIMES = NTIMES + 1 - IF (.NOT.(NTIMES.GT.NOPT)) GO TO 120 - NERR = 3 - IOPT = 1 - CALL XERROR( 'WNNLS( ). THE LINKS IN THE OPTION VECTOR ARE CYCLING - 1.', 53, NERR, IOPT) - MODE = 2 - RETURN - 120 KEY = PRGOPT(LAST+1) - IF (.NOT.(KEY.EQ.6 .AND. PRGOPT(LAST+2).NE.ZERO)) GO TO 140 - - if (kind(W) == real_single) then - do J=1,N - T = SNRM2(M,W(1,J),1) - IF (T.NE.ZERO) T = ONE/T - D(J) = T - enddo - else if (kind(W) == real_double) then - do J=1,N - T = DNRM2(M,W(1,J),1) - IF (T.NE.ZERO) T = ONE/T - D(J) = T - enddo - endif - - 140 IF (KEY.EQ.7) then - if (kind(PRGOPT) == real_single) then - CALL SCOPY(N, PRGOPT(LAST+2), 1, D, 1) - else if (kind(PRGOPT) == real_double) then - CALL DCOPY(N, PRGOPT(LAST+2), 1, D, 1) - endif - endif - IF (KEY.EQ.8) TAU = AMAX1(SRELPR,PRGOPT(LAST+2)) - IF (KEY.EQ.9) BLOWUP = AMAX1(SRELPR,PRGOPT(LAST+2)) - NEXT = PRGOPT(LINK) - IF (.NOT.(NEXT.LE.0 .OR. NEXT.GT.NLINK)) GO TO 150 - NERR = 3 - IOPT = 1 - CALL XERROR( 'WNNLS( ) THE OPTION VECTOR IS UNDEFINED', 39, NERR, - 1 IOPT) - MODE = 2 - RETURN - 150 LAST = LINK - LINK = NEXT - GO TO 110 - - 160 if (kind(W) == real_single) then - do J=1,N - CALL SSCAL(M, D(J), W(1,J), 1) - enddo - else if (kind(W) == real_double) then - do J=1,N - CALL DSCAL(M, D(J), W(1,J), 1) - enddo - endif - - GO TO 1260 - 180 CONTINUE -C -C TO INITIALIZE-VARIABLES -C -C SRELPR IS THE PRECISION FOR THE PARTICULAR MACHINE -C BEING USED. THIS LOGIC AVOIDS RECOMPUTING IT EVERY ENTRY. - IF (.NOT.(SRELPR.EQ.ZERO)) GO TO 210 -c*** changed back by BROSS -c*** changed by RF Boisvert, 19-Feb-92 (fails on HP 9000 Series 300) -cross srelpr = r1mach(4) - SRELPR = ONE - 190 IF (ONE+SRELPR.EQ.ONE) GO TO 200 - SRELPR = SRELPR/TWO - GO TO 190 - 200 SRELPR = SRELPR*TWO -cross - 210 M = MA + MME - ME = MME - MEP1 = ME + 1 - ASSIGN 220 TO IGO977 - GO TO 100 -C -C PROCESS-OPTION-VECTOR - 220 DONE = .FALSE. - ITER = 0 - ITMAX = 3*(N-L) - MODE = 0 - LP1 = L + 1 - NSOLN = L - NSP1 = NSOLN + 1 - NP1 = N + 1 - NM1 = N - 1 - L1 = MIN0(M,L) -C -C COMPUTE SCALE FACTOR TO APPLY TO EQUAL. CONSTRAINT EQUAS. - - if (kind(W) == real_single) then - do J=1,N - WD(J) = SASUM(M,W(1,J),1) - enddo - IMAX = ISAMAX(N,WD,1) - EANORM = WD(IMAX) - BNORM = SASUM(M,W(1,NP1),1) - else if (kind(W) == real_double) then - do J=1,N - WD(J) = DASUM(M,W(1,J),1) - enddo - IMAX = IDAMAX(N,WD,1) - EANORM = WD(IMAX) - BNORM = DASUM(M,W(1,NP1),1) - endif - - ALAMDA = EANORM/(SRELPR*FAC) -C -C DEFINE SCALING DIAG MATRIX FOR MOD GIVENS USAGE AND -C CLASSIFY EQUATION TYPES. - ALSQ = ALAMDA**2 - DO 260 I=1,M -C -C WHEN EQU I IS HEAVILY WEIGHTED ITYPE(I)=0, ELSE ITYPE(I)=1. - IF (.NOT.(I.LE.ME)) GO TO 240 - T = ALSQ - ITEMP = 0 - GO TO 250 - 240 T = ONE - ITEMP = 1 - 250 SCALE(I) = T - ITYPE(I) = ITEMP - 260 CONTINUE -C -C SET THE SOLN VECTOR X(*) TO ZERO AND THE COL INTERCHANGE -C MATRIX TO THE IDENTITY. - X(1) = ZERO - if (kind(X) == real_single) then - CALL SCOPY(N, X, 0, X, 1) - else if (kind(X) == real_double) then - CALL DCOPY(N, X, 0, X, 1) - endif - DO 270 I=1,N - IPIVOT(I) = I - 270 CONTINUE - GO TO 1230 - 280 CONTINUE -C -C TO INITIALLY-TRIANGULARIZE -C -C SET FIRST L COMPS. OF DUAL VECTOR TO ZERO BECAUSE -C THESE CORRESPOND TO THE UNCONSTRAINED VARIABLES. - IF (.NOT.(L.GT.0)) GO TO 290 - WD(1) = ZERO - if (kind(WD) == real_single) then - CALL SCOPY(L, WD, 0, WD, 1) - else if (kind(WD) == real_double) then - CALL DCOPY(L, WD, 0, WD, 1) - endif -C -C THE ARRAYS IDOPE(*) AND DOPE(*) ARE USED TO PASS -C INFORMATION TO WNLIT(). THIS WAS DONE TO AVOID -C A LONG CALLING SEQUENCE OR THE USE OF COMMON. - 290 IDOPE(1) = ME - IDOPE(2) = MEP1 - IDOPE(3) = 0 - IDOPE(4) = 1 - IDOPE(5) = NSOLN - IDOPE(6) = 0 - IDOPE(7) = 1 - IDOPE(8) = L1 -C - DOPE(1) = ALSQ - DOPE(2) = EANORM - DOPE(3) = FAC - DOPE(4) = TAU - CALL WNLIT(W, MDW, M, N, L, IPIVOT, ITYPE, H, SCALE, RNORM, - 1 IDOPE, DOPE, DONE) - ME = IDOPE(1) - MEP1 = IDOPE(2) - KRANK = IDOPE(3) - KRP1 = IDOPE(4) - NSOLN = IDOPE(5) - NIV = IDOPE(6) - NIV1 = IDOPE(7) - L1 = IDOPE(8) - GO TO 1240 - 300 CONTINUE -C -C TO COMPUTE-SEARCH-DIRECTION-AND-FEASIBLE-POINT -C -C SOLVE THE TRIANGULAR SYSTEM OF CURRENTLY NON-ACTIVE -C VARIABLES AND STORE THE SOLUTION IN Z(*). -C -C SOLVE-SYSTEM - ASSIGN 310 TO IGO958 - GO TO 1110 -C -C INCREMENT ITERATION COUNTER AND CHECK AGAINST MAX. NUMBER -C OF ITERATIONS. - 310 ITER = ITER + 1 - IF (.NOT.(ITER.GT.ITMAX)) GO TO 320 - MODE = 1 - DONE = .TRUE. -C -C CHECK TO SEE IF ANY CONSTRAINTS HAVE BECOME ACTIVE. -C IF SO, CALCULATE AN INTERPOLATION FACTOR SO THAT ALL -C ACTIVE CONSTRAINTS ARE REMOVED FROM THE BASIS. - 320 ALPHA = TWO - HITCON = .FALSE. - IF (.NOT.(L.LT.NSOLN)) GO TO 360 - DO 350 J=LP1,NSOLN - ZZ = Z(J) - IF (.NOT.(ZZ.LE.ZERO)) GO TO 340 - T = X(J)/(X(J)-ZZ) - IF (.NOT.(T.LT.ALPHA)) GO TO 330 - ALPHA = T - JCON = J - 330 HITCON = .TRUE. - 340 CONTINUE - 350 CONTINUE - 360 GO TO 1220 - 370 CONTINUE -C -C TO ADD-CONSTRAINTS -C -C USE COMPUTED ALPHA TO INTERPOLATE BETWEEN LAST -C FEASIBLE SOLUTION X(*) AND CURRENT UNCONSTRAINED -C (AND INFEASIBLE) SOLUTION Z(*). - IF (.NOT.(LP1.LE.NSOLN)) GO TO 390 - DO 380 J=LP1,NSOLN - X(J) = X(J) + ALPHA*(Z(J)-X(J)) - 380 CONTINUE - 390 FEASBL = .FALSE. - GO TO 410 - 400 IF (FEASBL) GO TO 610 -C -C REMOVE COL JCON AND SHIFT COLS JCON+1 THROUGH N TO THE -C LEFT. SWAP COL JCON INTO THE N-TH POSITION. THIS ACHIEVES -C UPPER HESSENBERG FORM FOR THE NONACTIVE CONSTRAINTS AND -C LEAVES AN UPPER HESSENBERG MATRIX TO RETRIANGULARIZE. - 410 DO 420 I=1,M - T = W(I,JCON) -! if (kind(W) == real_single) then -! CALL SCOPY(N-JCON, W(I,JCON+1), MDW, W(I,JCON), MDW) -! else if (kind(W) == real_double) then -! CALL DCOPY(N-JCON, W(I,JCON+1), MDW, W(I,JCON), MDW) -! endif - do j=jcon,n-1 - w(i,j)=w(i,j+1) - end do - W(I,N) = T - 420 CONTINUE -C -C UPDATE PERMUTED INDEX VECTOR TO REFLECT THIS SHIFT AND SWAP. - ITEMP = IPIVOT(JCON) - IF (.NOT.(JCON.LT.N)) GO TO 440 - DO 430 I=JCON,NM1 - IPIVOT(I) = IPIVOT(I+1) - 430 CONTINUE - 440 IPIVOT(N) = ITEMP -C -C SIMILARLY REPERMUTE X(*) VECTOR. -! if (kind(X) == real_single) then -! CALL SCOPY(N-JCON, X(JCON+1), 1, X(JCON), 1) -! else if (kind(X) == real_double) then -! CALL DCOPY(N-JCON, X(JCON+1), 1, X(JCON), 1) -! endif - do j=jcon,n-1 - X(j)=X(J+1) - end do - - X(N) = ZERO - NSP1 = NSOLN - NSOLN = NSOLN - 1 - NIV1 = NIV - NIV = NIV - 1 -C -C RETRIANGULARIZE UPPER HESSENBERG MATRIX AFTER ADDING CONSTRAINTS. - J = JCON - I = KRANK + JCON - L - 450 IF (.NOT.(J.LE.NSOLN)) GO TO 570 - IF (.NOT.(ITYPE(I).EQ.0 .AND. ITYPE(I+1).EQ.0)) GO TO 470 - ASSIGN 460 TO IGO938 - GO TO 620 -C -C (ITYPE(I).EQ.0 .AND. ITYPE(I+1).EQ.0) ZERO-IP1-TO-I-IN-COL-J - 460 GO TO 560 - 470 IF (.NOT.(ITYPE(I).EQ.1 .AND. ITYPE(I+1).EQ.1)) GO TO 490 - ASSIGN 480 TO IGO938 - GO TO 620 -C -C (ITYPE(I).EQ.1 .AND. ITYPE(I+1).EQ.1) ZERO-IP1-TO-I-IN-COL-J - 480 GO TO 560 - 490 IF (.NOT.(ITYPE(I).EQ.1 .AND. ITYPE(I+1).EQ.0)) GO TO 510 - if (kind(W) == real_single) then - CALL SSWAP(NP1, W(I,1), MDW, W(I+1,1), MDW) - else if (kind(W) == real_double) then - CALL DSWAP(NP1, W(I,1), MDW, W(I+1,1), MDW) - endif - if (kind(SCALE) == real_single) then - CALL SSWAP(1, SCALE(I), 1, SCALE(I+1), 1) - else if (kind(SCALE) == real_double) then - CALL DSWAP(1, SCALE(I), 1, SCALE(I+1), 1) - endif - ITEMP = ITYPE(I+1) - ITYPE(I+1) = ITYPE(I) - ITYPE(I) = ITEMP -C -C SWAPPED ROW WAS FORMERLY A PIVOT ELT., SO IT WILL -C BE LARGE ENOUGH TO PERFORM ELIM. - ASSIGN 500 TO IGO938 - GO TO 620 -C -C ZERO-IP1-TO-I-IN-COL-J - 500 GO TO 560 - 510 IF (.NOT.(ITYPE(I).EQ.0 .AND. ITYPE(I+1).EQ.1)) GO TO 550 - T = SCALE(I)*W(I,J)**2/ALSQ - IF (.NOT.(T.GT.TAU**2*EANORM**2)) GO TO 530 - ASSIGN 520 TO IGO938 - GO TO 620 - 520 GO TO 540 - 530 if (kind(W) == real_single) then - CALL SSWAP(NP1, W(I,1), MDW, W(I+1,1), MDW) - else if (kind(W) == real_double) then - CALL DSWAP(NP1, W(I,1), MDW, W(I+1,1), MDW) - endif - if (kind(SCALE) == real_single) then - CALL SSWAP(1, SCALE(I), 1, SCALE(I+1), 1) - else if (kind(SCALE) == real_double) then - CALL DSWAP(1, SCALE(I), 1, SCALE(I+1), 1) - endif - - ITEMP = ITYPE(I+1) - ITYPE(I+1) = ITYPE(I) - ITYPE(I) = ITEMP - W(I+1,J) = ZERO - 540 CONTINUE - 550 CONTINUE - 560 I = I + 1 - J = J + 1 - GO TO 450 -C -C SEE IF THE REMAINING COEFFS IN THE SOLN SET ARE FEASIBLE. THEY -C SHOULD BE BECAUSE OF THE WAY ALPHA WAS DETERMINED. IF ANY ARE -C INFEASIBLE IT IS DUE TO ROUNDOFF ERROR. ANY THAT ARE NON- -C POSITIVE WILL BE SET TO ZERO AND REMOVED FROM THE SOLN SET. - 570 IF (.NOT.(LP1.LE.NSOLN)) GO TO 590 - DO 580 JCON=LP1,NSOLN - IF (X(JCON).LE.ZERO) GO TO 600 - 580 CONTINUE - 590 FEASBL = .TRUE. - 600 CONTINUE - GO TO 400 - 610 GO TO 1200 - 620 CONTINUE -C -C TO ZERO-IP1-TO-I-IN-COL-J - IF (.NOT.(W(I+1,J).NE.ZERO)) GO TO 630 - CALL SROTMG(SCALE(I), SCALE(I+1), W(I,J), W(I+1,J), SPARAM) - W(I+1,J) = ZERO - CALL SROTM(NP1-J, W(I,J+1), MDW, W(I+1,J+1), MDW, SPARAM) - 630 GO TO 1290 - 640 CONTINUE -C -C TO PERFORM-MULTIPLIER-TEST-AND-DROP-A-CONSTRAINT - if (kind(Z) == real_single) then - CALL SCOPY(NSOLN, Z, 1, X, 1) - else if (kind(Z) == real_double) then - CALL DCOPY(NSOLN, Z, 1, X, 1) - endif - - IF (.NOT.(NSOLN.LT.N)) GO TO 650 - X(NSP1) = ZERO - if (kind(X) == real_single) then - CALL SCOPY(N-NSOLN, X(NSP1), 0, X(NSP1), 1) - else if (kind(X) == real_double) then - CALL DCOPY(N-NSOLN, X(NSP1), 0, X(NSP1), 1) - endif - - 650 I = NIV1 - 660 IF (.NOT.(I.LE.ME)) GO TO 690 -C -C RECLASSIFY LEAST SQUARES EQATIONS AS EQUALITIES AS -C NECESSARY. - IF (.NOT.(ITYPE(I).EQ.0)) GO TO 670 - I = I + 1 - GO TO 680 - 670 if (kind(W) == real_single) then - CALL SSWAP(NP1, W(I,1), MDW, W(ME,1), MDW) - else if (kind(W) == real_double) then - CALL DSWAP(NP1, W(I,1), MDW, W(ME,1), MDW) - endif - if (kind(SCALE) == real_single) then - CALL SSWAP(1, SCALE(I), 1, SCALE(ME), 1) - else if (kind(SCALE) == real_double) then - CALL DSWAP(1, SCALE(I), 1, SCALE(ME), 1) - endif - - ITEMP = ITYPE(I) - ITYPE(I) = ITYPE(ME) - ITYPE(ME) = ITEMP - MEP1 = ME - ME = ME - 1 - 680 GO TO 660 -C -C FORM INNER PRODUCT VECTOR WD(*) OF DUAL COEFFS. - 690 IF (.NOT.(NSP1.LE.N)) GO TO 730 - DO 720 J=NSP1,N - SM = ZERO - IF (.NOT.(NSOLN.LT.M)) GO TO 710 - DO 700 I=NSP1,M - SM = SM + SCALE(I)*W(I,J)*W(I,NP1) - 700 CONTINUE - 710 WD(J) = SM - 720 CONTINUE - 730 GO TO 750 - 740 IF (POS .OR. DONE) GO TO 970 -C -C FIND J SUCH THAT WD(J)=WMAX IS MAXIMUM. THIS DETERMINES -C THAT THE INCOMING COL J WILL REDUCE THE RESIDUAL VECTOR -C AND BE POSITIVE. - 750 WMAX = ZERO - IWMAX = NSP1 - IF (.NOT.(NSP1.LE.N)) GO TO 780 - DO 770 J=NSP1,N - IF (.NOT.(WD(J).GT.WMAX)) GO TO 760 - WMAX = WD(J) - IWMAX = J - 760 CONTINUE - 770 CONTINUE - 780 IF (.NOT.(WMAX.LE.ZERO)) GO TO 790 - DONE = .TRUE. - GO TO 960 -C -C SET DUAL COEFF TO ZERO FOR INCOMING COL. - 790 WD(IWMAX) = ZERO -C -C WMAX .GT. ZERO, SO OKAY TO MOVE COL IWMAX TO SOLN SET. -C PERFORM TRANSFORMATION TO RETRIANGULARIZE, AND TEST -C FOR NEAR LINEAR DEPENDENCE. -C SWAP COL IWMAX INTO NSOLN-TH POSITION TO MAINTAIN UPPER -C HESSENBERG FORM OF ADJACENT COLS, AND ADD NEW COL TO -C TRIANGULAR DECOMPOSITION. - NSOLN = NSP1 - NSP1 = NSOLN + 1 - NIV = NIV1 - NIV1 = NIV + 1 - IF (.NOT.(NSOLN.NE.IWMAX)) GO TO 800 - if (kind(W) == real_single) then - CALL SSWAP(M, W(1,NSOLN), 1, W(1,IWMAX), 1) - else if (kind(W) == real_double) then - CALL DSWAP(M, W(1,NSOLN), 1, W(1,IWMAX), 1) - endif - WD(IWMAX) = WD(NSOLN) - WD(NSOLN) = ZERO - ITEMP = IPIVOT(NSOLN) - IPIVOT(NSOLN) = IPIVOT(IWMAX) - IPIVOT(IWMAX) = ITEMP -C -C REDUCE COL NSOLN SO THAT THE MATRIX OF NONACTIVE -C CONSTRAINTS VARIABLES IS TRIANGULAR. - 800 J = M - 810 IF (.NOT.(J.GT.NIV)) GO TO 870 - JM1 = J - 1 - JP = JM1 -C -C WHEN OPERATING NEAR THE ME LINE, TEST TO SEE IF THE PIVOT ELT. -C IS NEAR ZERO. IF SO, USE THE LARGEST ELT. ABOVE IT AS THE PIVOT. -C THIS IS TO MAINTAIN THE SHARP INTERFACE BETWEEN WEIGHTED AND -C NON-WEIGHTED ROWS IN ALL CASES. - IF (.NOT.(J.EQ.MEP1)) GO TO 850 - IMAX = ME - AMAX = SCALE(ME)*W(ME,NSOLN)**2 - 820 IF (.NOT.(JP.GE.NIV)) GO TO 840 - T = SCALE(JP)*W(JP,NSOLN)**2 - IF (.NOT.(T.GT.AMAX)) GO TO 830 - IMAX = JP - AMAX = T - 830 JP = JP - 1 - GO TO 820 - 840 JP = IMAX - 850 IF (.NOT.(W(J,NSOLN).NE.ZERO)) GO TO 860 - CALL SROTMG(SCALE(JP), SCALE(J), W(JP,NSOLN), W(J,NSOLN), SPARAM) - W(J,NSOLN) = ZERO - CALL SROTM(NP1-NSOLN, W(JP,NSP1), MDW, W(J,NSP1), MDW, SPARAM) - 860 J = JM1 - GO TO 810 -C -C SOLVE FOR Z(NSOLN)=PROPOSED NEW VALUE FOR X(NSOLN). -C TEST IF THIS IS NONPOSITIVE OR TOO LARGE. -C IF THIS WAS TRUE OR IF THE PIVOT TERM WAS ZERO REJECT -C THE COL AS DEPENDENT. - 870 IF (.NOT.(W(NIV,NSOLN).NE.ZERO)) GO TO 890 - ISOL = NIV - ASSIGN 880 TO IGO897 - GO TO 980 -C -C TEST-PROPOSED-NEW-COMPONENT - 880 GO TO 940 - 890 IF (.NOT.(NIV.LE.ME .AND. W(MEP1,NSOLN).NE.ZERO)) GO TO 920 -C -C TRY TO ADD ROW MEP1 AS AN ADDITIONAL EQUALITY CONSTRAINT. -C CHECK SIZE OF PROPOSED NEW SOLN COMPONENT. -C REJECT IT IF IT IS TOO LARGE. - ISOL = MEP1 - ASSIGN 900 TO IGO897 - GO TO 980 -C -C TEST-PROPOSED-NEW-COMPONENT - 900 IF (.NOT.(POS)) GO TO 910 -C -C SWAP ROWS MEP1 AND NIV, AND SCALE FACTORS FOR THESE ROWS. - - if (kind(W) == real_single) then - CALL SSWAP(NP1, W(MEP1,1), MDW, W(NIV,1), MDW) - else if (kind(W) == real_double) then - CALL DSWAP(NP1, W(MEP1,1), MDW, W(NIV,1), MDW) - endif - if (kind(SCALE) == real_single) then - CALL SSWAP(1, SCALE(MEP1), 1, SCALE(NIV), 1) - else if (kind(SCALE) == real_double) then - CALL DSWAP(1, SCALE(MEP1), 1, SCALE(NIV), 1) - endif - - ITEMP = ITYPE(MEP1) - ITYPE(MEP1) = ITYPE(NIV) - ITYPE(NIV) = ITEMP - ME = MEP1 - MEP1 = ME + 1 - 910 GO TO 930 - 920 POS = .FALSE. - 930 CONTINUE - 940 IF (POS) GO TO 950 - NSP1 = NSOLN - NSOLN = NSOLN - 1 - NIV1 = NIV - NIV = NIV - 1 - 950 CONTINUE - 960 GO TO 740 - 970 GO TO 1250 - 980 CONTINUE -C -C TO TEST-PROPOSED-NEW-COMPONENT - Z2 = W(ISOL,NP1)/W(ISOL,NSOLN) - Z(NSOLN) = Z2 - POS = Z2.GT.ZERO - IF (.NOT.(Z2*EANORM.GE.BNORM .AND. POS)) GO TO 990 - POS = .NOT.(BLOWUP*Z2*EANORM.GE.BNORM) - 990 GO TO 1280 - 1000 CONTINUE -C TO COMPUTE-FINAL-SOLUTION -C -C SOLVE SYSTEM, STORE RESULTS IN X(*). -C - ASSIGN 1010 TO IGO958 - GO TO 1110 -C SOLVE-SYSTEM - 1010 if (kind(Z) == real_single) then - CALL SCOPY(NSOLN, Z, 1, X, 1) - else if (kind(Z) == real_double) then - CALL DCOPY(NSOLN, Z, 1, X, 1) - endif -C -C APPLY HOUSEHOLDER TRANSFORMATIONS TO X(*) IF KRANK.LT.L - IF (.NOT.(0.LT.KRANK .AND. KRANK.LT.L)) GO TO 1030 - DO 1020 I=1,KRANK - CALL H12(2, I, KRP1, L, W(I,1), MDW, H(I), X, 1, 1, 1) - 1020 CONTINUE -C -C FILL IN TRAILING ZEROES FOR CONSTRAINED VARIABLES NOT IN SOLN. - 1030 IF (.NOT.(NSOLN.LT.N)) GO TO 1040 - X(NSP1) = ZERO - if (kind(X) == real_single) then - CALL SCOPY(N-NSOLN, X(NSP1), 0, X(NSP1), 1) - else if (kind(X) == real_double) then - CALL DCOPY(N-NSOLN, X(NSP1), 0, X(NSP1), 1) - endif -C -C REPERMUTE SOLN VECTOR TO NATURAL ORDER. - 1040 DO 1070 I=1,N - J = I - 1050 IF (IPIVOT(J).EQ.I) GO TO 1060 - J = J + 1 - GO TO 1050 - 1060 IPIVOT(J) = IPIVOT(I) - IPIVOT(I) = J - if (kind(X) == real_single) then - CALL SSWAP(1, X(J), 1, X(I), 1) - else if (kind(X) == real_double) then - CALL DSWAP(1, X(J), 1, X(I), 1) - endif - 1070 CONTINUE -C -C RESCALE THE SOLN USING THE COL SCALING. - DO 1080 J=1,N - X(J) = X(J)*D(J) - 1080 CONTINUE - IF (.NOT.(NSOLN.LT.M)) GO TO 1100 - DO 1090 I=NSP1,M - T = W(I,NP1) - IF (I.LE.ME) T = T/ALAMDA - T = (SCALE(I)*T)*T - RNORM = RNORM + T - 1090 CONTINUE - 1100 RNORM = SQRT(RNORM) - GO TO 1210 -C -C TO SOLVE-SYSTEM -C - 1110 CONTINUE - IF (.NOT.(DONE)) GO TO 1120 - ISOL = 1 - GO TO 1130 - 1120 ISOL = LP1 - 1130 IF (.NOT.(NSOLN.GE.ISOL)) GO TO 1190 -C -C COPY RT. HAND SIDE INTO TEMP VECTOR TO USE OVERWRITING METHOD. - if (kind(W) == real_single) then - CALL SCOPY(NIV, W(1,NP1), 1, TEMP, 1) - else if (kind(W) == real_double) then - CALL DCOPY(NIV, W(1,NP1), 1, TEMP, 1) - endif - - DO 1180 JJ=ISOL,NSOLN - J = NSOLN - JJ + ISOL - IF (.NOT.(J.GT.KRANK)) GO TO 1140 - I = NIV - JJ + ISOL - GO TO 1150 - 1140 I = J - 1150 IF (.NOT.(J.GT.KRANK .AND. J.LE.L)) GO TO 1160 - Z(J) = ZERO - GO TO 1170 - 1160 Z(J) = TEMP(I)/W(I,J) - - if (kind(W) == real_single .and. kind(TEMP) == real_single) - & then - CALL SAXPY(I-1, -Z(J), W(1,J), 1, TEMP, 1) - else if (kind(W) == real_double .and. kind(TEMP) == real_double) - & then - CALL DAXPY(I-1, -Z(J), W(1,J), 1, TEMP, 1) - endif - - 1170 CONTINUE - 1180 CONTINUE - 1190 GO TO 1270 - 1200 GO TO IGO986, (40) - 1210 GO TO IGO980, (90) - 1220 GO TO IGO991, (30) - 1230 GO TO IGO998, (10) - 1240 GO TO IGO995, (20) - 1250 GO TO IGO983, (60) - 1260 GO TO IGO977, (220) - 1270 GO TO IGO958, (310, 1010) - 1280 GO TO IGO897, (880, 900) - 1290 GO TO IGO938, (460, 480, 500, 520) - END diff --git a/sorc/relocate_mv_nvortex.fd/WNNLS.f b/sorc/relocate_mv_nvortex.fd/WNNLS.f deleted file mode 100755 index eadec53d79..0000000000 --- a/sorc/relocate_mv_nvortex.fd/WNNLS.f +++ /dev/null @@ -1,356 +0,0 @@ - SUBROUTINE WNNLS(W,MDW,ME,MA,N,L,PRGOPT,X,RNORM,MODE,IWORK,WORK) -C***BEGIN PROLOGUE WNNLS -C***DATE WRITTEN 790701 (YYMMDD) -C***REVISION DATE 820801 (YYMMDD) -C***CATEGORY NO. K1A2A -C***KEYWORDS CONSTRAINED LEAST SQUARES,CURVE FITTING,DATA FITTING, -C EQUALITY CONSTRAINTS,INEQUALITY CONSTRAINTS, -C NONNEGATIVITY CONSTRAINTS,QUADRATIC PROGRAMMING -C***AUTHOR HANSON, R. J., (SNLA) -C HASKELL, K. H., (SNLA) -C***PURPOSE Solve a linearly constrained least squares problem with -C equality constraints and nonnegativity constraints on -C selected variables. -C***DESCRIPTION -C -C DIMENSION W(MDW,N+1),PRGOPT(*),X(N),IWORK(M+N),WORK(M+5*N) -C -C Written by Karen H. Haskell, Sandia Laboratories, -C and R.J. Hanson, Sandia Laboratories. -C -C Abstract -C -C This subprogram solves a linearly constrained least squares -C problem. Suppose there are given matrices E and A of -C respective dimensions ME by N and MA by N, and vectors F -C and B of respective lengths ME and MA. This subroutine -C solves the problem -C -C EX = F, (equations to be exactly satisfied) -C -C AX = B, (equations to be approximately satisfied, -C in the least squares sense) -C -C subject to components L+1,...,N nonnegative -C -C Any values ME.GE.0, MA.GE.0 and 0.LE. L .LE.N are permitted. -C -C The problem is reposed as problem WNNLS -C -C (WT*E)X = (WT*F) -C ( A) ( B), (least squares) -C subject to components L+1,...,N nonnegative. -C -C The subprogram chooses the heavy weight (or penalty parameter) WT. -C -C The parameters for WNNLS are -C -C INPUT.. -C -C W(*,*),MDW, The array W(*,*) is double subscripted with first -C ME,MA,N,L dimensioning parameter equal to MDW. For this -C discussion let us call M = ME + MA. Then MDW -C must satisfy MDW.GE.M. The condition MDW.LT.M -C is an error. -C -C The array W(*,*) contains the matrices and vectors -C -C (E F) -C (A B) -C -C in rows and columns 1,...,M and 1,...,N+1 -C respectively. Columns 1,...,L correspond to -C unconstrained variables X(1),...,X(L). The -C remaining variables are constrained to be -C nonnegative. The condition L.LT.0 or L.GT.N is -C an error. -C -C PRGOPT(*) This real-valued array is the option vector. -C If the user is satisfied with the nominal -C subprogram features set -C -C PRGOPT(1)=1 (or PRGOPT(1)=1.0) -C -C Otherwise PRGOPT(*) is a linked list consisting of -C groups of data of the following form -C -C LINK -C KEY -C DATA SET -C -C The parameters LINK and KEY are each one word. -C The DATA SET can be comprised of several words. -C The number of items depends on the value of KEY. -C The value of LINK points to the first -C entry of the next group of data within -C PRGOPT(*). The exception is when there are -C no more options to change. In that -C case LINK=1 and the values KEY and DATA SET -C are not referenced. The general layout of -C PRGOPT(*) is as follows. -C -C ...PRGOPT(1)=LINK1 (link to first entry of next group) -C . PRGOPT(2)=KEY1 (key to the option change) -C . PRGOPT(3)=DATA VALUE (data value for this change) -C . . -C . . -C . . -C ...PRGOPT(LINK1)=LINK2 (link to the first entry of -C . next group) -C . PRGOPT(LINK1+1)=KEY2 (key to the option change) -C . PRGOPT(LINK1+2)=DATA VALUE -C ... . -C . . -C . . -C ...PRGOPT(LINK)=1 (no more options to change) -C -C Values of LINK that are nonpositive are errors. -C A value of LINK.GT.NLINK=100000 is also an error. -C This helps prevent using invalid but positive -C values of LINK that will probably extend -C beyond the program limits of PRGOPT(*). -C Unrecognized values of KEY are ignored. The -C order of the options is arbitrary and any number -C of options can be changed with the following -C restriction. To prevent cycling in the -C processing of the option array a count of the -C number of options changed is maintained. -C Whenever this count exceeds NOPT=1000 an error -C message is printed and the subprogram returns. -C -C OPTIONS.. -C -C KEY=6 -C Scale the nonzero columns of the -C entire data matrix -C (E) -C (A) -C to have length one. The DATA SET for -C this option is a single value. It must -C be nonzero if unit length column scaling is -C desired. -C -C KEY=7 -C Scale columns of the entire data matrix -C (E) -C (A) -C with a user-provided diagonal matrix. -C The DATA SET for this option consists -C of the N diagonal scaling factors, one for -C each matrix column. -C -C KEY=8 -C Change the rank determination tolerance from -C the nominal value of SQRT(SRELPR). This quantity -C can be no smaller than SRELPR, The arithmetic- -C storage precision. The quantity used -C here is internally restricted to be at -C least SRELPR. The DATA SET for this option -C is the new tolerance. -C -C KEY=9 -C Change the blow-up parameter from the -C nominal value of SQRT(SRELPR). The reciprocal of -C this parameter is used in rejecting solution -C components as too large when a variable is -C first brought into the active set. Too large -C means that the proposed component times the -C reciprocal of the parameter is not less than -C the ratio of the norms of the right-side -C vector and the data matrix. -C This parameter can be no smaller than SRELPR, -C the arithmetic-storage precision. -C -C For example, suppose we want to provide -C a diagonal matrix to scale the problem -C matrix and change the tolerance used for -C determining linear dependence of dropped col -C vectors. For these options the dimensions of -C PRGOPT(*) must be at least N+6. The FORTRAN -C statements defining these options would -C be as follows. -C -C PRGOPT(1)=N+3 (link to entry N+3 in PRGOPT(*)) -C PRGOPT(2)=7 (user-provided scaling key) -C -C CALL SCOPY(N,D,1,PRGOPT(3),1) (copy the N -C scaling factors from a user array called D(*) -C into PRGOPT(3)-PRGOPT(N+2)) -C -C PRGOPT(N+3)=N+6 (link to entry N+6 of PRGOPT(*)) -C PRGOPT(N+4)=8 (linear dependence tolerance key) -C PRGOPT(N+5)=... (new value of the tolerance) -C -C PRGOPT(N+6)=1 (no more options to change) -C -C -C IWORK(1), The amounts of working storage actually allocated -C IWORK(2) for the working arrays WORK(*) and IWORK(*), -C respectively. These quantities are compared with -C the actual amounts of storage needed for WNNLS( ). -C Insufficient storage allocated for either WORK(*) -C or IWORK(*) is considered an error. This feature -C was included in WNNLS( ) because miscalculating -C the storage formulas for WORK(*) and IWORK(*) -C might very well lead to subtle and hard-to-find -C execution errors. -C -C The length of WORK(*) must be at least -C -C LW = ME+MA+5*N -C This test will not be made if IWORK(1).LE.0. -C -C The length of IWORK(*) must be at least -C -C LIW = ME+MA+N -C This test will not be made if IWORK(2).LE.0. -C -C OUTPUT.. -C -C X(*) An array dimensioned at least N, which will -C contain the N components of the solution vector -C on output. -C -C RNORM The residual norm of the solution. The value of -C RNORM contains the residual vector length of the -C equality constraints and least squares equations. -C -C MODE The value of MODE indicates the success or failure -C of the subprogram. -C -C MODE = 0 Subprogram completed successfully. -C -C = 1 Max. number of iterations (equal to -C 3*(N-L)) exceeded. Nearly all problems -C should complete in fewer than this -C number of iterations. An approximate -C solution and its corresponding residual -C vector length are in X(*) and RNORM. -C -C = 2 Usage error occurred. The offending -C condition is noted with the error -C processing subprogram, XERROR( ). -C -C User-designated -C Working arrays.. -C -C WORK(*) A real-valued working array of length at least -C M + 5*N. -C -C IWORK(*) An integer-valued working array of length at least -C M+N. -C***REFERENCES K.H. HASKELL AND R.J. HANSON, *AN ALGORITHM FOR -C LINEAR LEAST SQUARES PROBLEMS WITH EQUALITY AND -C NONNEGATIVITY CONSTRAINTS*, SAND77-0552, JUNE 1978. -C K.H. HASKELL AND R.J. HANSON, *SELECTED ALGORITHMS FOR -C THE LINEARLY CONSTRAINED LEAST SQUARES PROBLEM-- -C A USERS GUIDE*, SAND78-1290, AUGUST 1979. -C K.H. HASKELL AND R.H. HANSON, *AN ALGORITHM FOR -C LINEAR LEAST SQUARES PROBLEMS WITH EQUALITY AND -C NONNEGATIVITY CONSTRAINTS*, MATH. PROG. 21 (1981), -C PP. 98-118. -C R.J. HANSON AND K.H. HASKELL, *TWO ALGORITHMS FOR THE -C LINEARLY CONSTRAINED LEAST SQUARES PROBLEM*, ACM -C TRANS. ON MATH. SOFTWARE, SEPT. 1982. -C***ROUTINES CALLED WNLSM,XERROR,XERRWV -C***END PROLOGUE WNNLS -C -C THE EDITING REQUIRED TO CONVERT THIS SUBROUTINE FROM SINGLE TO -C DOUBLE PRECISION INVOLVES THE FOLLOWING CHARACTER STRING CHANGES. -C USE AN EDITING COMMAND (CHANGE) /STRING-1/(TO)STRING-2/. -C (START AT LINE WITH C++ IN COLS. 1-3.) -C /REAL (12 BLANKS)/DOUBLE PRECISION/,/, DUMMY/,SNGL(DUMMY)/ -C -C WRITTEN BY KAREN H. HASKELL, SANDIA LABORATORIES, -C AND R.J. HANSON, SANDIA LABORATORIES. -C REVISED FEB.25, 1982. -C -C SUBROUTINES CALLED BY WNNLS( ) -C -C++ -C WNLSM COMPANION SUBROUTINE TO WNNLS( ), WHERE -C MOST OF THE COMPUTATION TAKES PLACE. -C -C XERROR,XERRWV FROM SLATEC ERROR PROCESSING PACKAGE. -C THIS IS DOCUMENTED IN SANDIA TECH. REPT., -C SAND78-1189. -C -C REFERENCES -C -C 1. SOLVING LEAST SQUARES PROBLEMS, BY C.L. LAWSON -C AND R.J. HANSON. PRENTICE-HALL, INC. (1974). -C -C 2. BASIC LINEAR ALGEBRA SUBPROGRAMS FOR FORTRAN USAGE, BY -C C.L. LAWSON, R.J. HANSON, D.R. KINCAID, AND F.T. KROGH. -C TOMS, V. 5, NO. 3, P. 308. ALSO AVAILABLE AS -C SANDIA TECHNICAL REPORT NO. SAND77-0898. -C -C 3. AN ALGORITHM FOR LINEAR LEAST SQUARES WITH EQUALITY -C AND NONNEGATIVITY CONSTRAINTS, BY K.H. HASKELL AND -C R.J. HANSON. AVAILABLE AS SANDIA TECHNICAL REPORT NO. -C SAND77-0552, AND MATH. PROGRAMMING, VOL. 21, (1981), P. 98-118. -C -C 4. SLATEC COMMON MATH. LIBRARY ERROR HANDLING -C PACKAGE. BY R. E. JONES. AVAILABLE AS SANDIA -C TECHNICAL REPORT SAND78-1189. -C - REAL DUMMY, W(MDW,1), PRGOPT(1), X(1), WORK(1), RNORM - INTEGER IWORK(*) -C -C -C***FIRST EXECUTABLE STATEMENT WNNLS - MODE = 0 - iwork(1)=mdw*6 - iwork(2)=mdw*2 - IF (MA+ME.LE.0 .OR. N.LE.0) RETURN - IF (.NOT.(IWORK(1).GT.0)) GO TO 20 - LW = ME + MA + 5*N - IF (.NOT.(IWORK(1).LT.LW)) GO TO 10 - NERR = 2 - IOPT = 1 - write(6,*) 'work array',iwork(1),lw - CALL XERRWV( 'WNNLS( ), INSUFFICIENT STORAGE ALLOCATED FOR WORK(*) - 1, NEED LW=I1 BELOW', 70, NERR, IOPT, 1, LW, 0, 0, DUMMY, DUMMY) - MODE = 2 - RETURN - 10 CONTINUE - 20 IF (.NOT.(IWORK(2).GT.0)) GO TO 40 - LIW = ME + MA + N - IF (.NOT.(IWORK(2).LT.LIW)) GO TO 30 - NERR = 2 - IOPT = 1 - CALL XERRWV( 'WNNLS( ), INSUFFICIENT STORAGE ALLOCATED FOR IWORK(* - 1), NEED LIW=I1 BELOW', 72, NERR, IOPT, 1, LIW, 0, 0, DUMMY, DUMMY) - MODE = 2 - RETURN - 30 CONTINUE - 40 IF (.NOT.(MDW.LT.ME+MA)) GO TO 50 - NERR = 1 - IOPT = 1 - CALL XERROR( 'WNNLS( ), THE VALUE MDW.LT.ME+MA IS AN ERROR', 44, - 1 NERR, IOPT) - MODE = 2 - RETURN - 50 IF (0.LE.L .AND. L.LE.N) GO TO 60 - NERR = 2 - IOPT = 1 - CALL XERROR( 'WNNLS( ), L.LE.0.AND.L.LE.N IS REQUIRED', 39, NERR, - 1 IOPT) - MODE = 2 - RETURN -C -C THE PURPOSE OF THIS SUBROUTINE IS TO BREAK UP THE ARRAYS -C WORK(*) AND IWORK(*) INTO SEPARATE WORK ARRAYS -C REQUIRED BY THE MAIN SUBROUTINE WNLSM( ). -C - 60 L1 = N + 1 - L2 = L1 + N - L3 = L2 + ME + MA - L4 = L3 + N - L5 = L4 + N -C - CALL WNLSM(W, MDW, ME, MA, N, L, PRGOPT, X, RNORM, MODE, IWORK, - 1 IWORK(L1), WORK(1), WORK(L1), WORK(L2), WORK(L3), WORK(L4), - 2 WORK(L5)) - RETURN - END diff --git a/sorc/relocate_mv_nvortex.fd/XERABT.f b/sorc/relocate_mv_nvortex.fd/XERABT.f deleted file mode 100755 index 95990ae709..0000000000 --- a/sorc/relocate_mv_nvortex.fd/XERABT.f +++ /dev/null @@ -1,31 +0,0 @@ - SUBROUTINE XERABT(MESSG,NMESSG) -C***BEGIN PROLOGUE XERABT -C***DATE WRITTEN 790801 (YYMMDD) -C***REVISION DATE 820801 (YYMMDD) -C***CATEGORY NO. R3C -C***KEYWORDS ERROR,XERROR PACKAGE -C***AUTHOR JONES, R. E., (SNLA) -C***PURPOSE Aborts program execution and prints error message. -C***DESCRIPTION -C Abstract -C ***Note*** machine dependent routine -C XERABT aborts the execution of the program. -C The error message causing the abort is given in the calling -C sequence, in case one needs it for printing on a dayfile, -C for example. -C -C Description of Parameters -C MESSG and NMESSG are as in XERROR, except that NMESSG may -C be zero, in which case no message is being supplied. -C -C Written by Ron Jones, with SLATEC Common Math Library Subcommittee -C Latest revision --- 19 MAR 1980 -C***REFERENCES JONES R.E., KAHANER D.K., "XERROR, THE SLATEC ERROR-" -C HANDLING PACKAGE", SAND82-0800, SANDIA LABORATORIES," -C 1982. -C***ROUTINES CALLED (NONE) -C***END PROLOGUE XERABT - CHARACTER*(*) MESSG -C***FIRST EXECUTABLE STATEMENT XERABT - STOP - END diff --git a/sorc/relocate_mv_nvortex.fd/XERCTL.f b/sorc/relocate_mv_nvortex.fd/XERCTL.f deleted file mode 100755 index 6020d55588..0000000000 --- a/sorc/relocate_mv_nvortex.fd/XERCTL.f +++ /dev/null @@ -1,47 +0,0 @@ - SUBROUTINE XERCTL(MESSG1,NMESSG,NERR,LEVEL,KONTRL) -C***BEGIN PROLOGUE XERCTL -C***DATE WRITTEN 790801 (YYMMDD) -C***REVISION DATE 820801 (YYMMDD) -C***CATEGORY NO. R3C -C***KEYWORDS ERROR,XERROR PACKAGE -C***AUTHOR JONES, R. E., (SNLA) -C***PURPOSE Allows user control over handling of individual errors. -C***DESCRIPTION -C Abstract -C Allows user control over handling of individual errors. -C Just after each message is recorded, but before it is -C processed any further (i.e., before it is printed or -C a decision to abort is made), a call is made to XERCTL. -C If the user has provided his own version of XERCTL, he -C can then override the value of KONTROL used in processing -C this message by redefining its value. -C KONTRL may be set to any value from -2 to 2. -C The meanings for KONTRL are the same as in XSETF, except -C that the value of KONTRL changes only for this message. -C If KONTRL is set to a value outside the range from -2 to 2, -C it will be moved back into that range. -C -C Description of Parameters -C -C --Input-- -C MESSG1 - the first word (only) of the error message. -C NMESSG - same as in the call to XERROR or XERRWV. -C NERR - same as in the call to XERROR or XERRWV. -C LEVEL - same as in the call to XERROR or XERRWV. -C KONTRL - the current value of the control flag as set -C by a call to XSETF. -C -C --Output-- -C KONTRL - the new value of KONTRL. If KONTRL is not -C defined, it will remain at its original value. -C This changed value of control affects only -C the current occurrence of the current message. -C***REFERENCES JONES R.E., KAHANER D.K., "XERROR, THE SLATEC ERROR-" -C HANDLING PACKAGE", SAND82-0800, SANDIA LABORATORIES," -C 1982. -C***ROUTINES CALLED (NONE) -C***END PROLOGUE XERCTL - CHARACTER*20 MESSG1 -C***FIRST EXECUTABLE STATEMENT XERCTL - RETURN - END diff --git a/sorc/relocate_mv_nvortex.fd/XERPRT.f b/sorc/relocate_mv_nvortex.fd/XERPRT.f deleted file mode 100755 index 6370bc017a..0000000000 --- a/sorc/relocate_mv_nvortex.fd/XERPRT.f +++ /dev/null @@ -1,34 +0,0 @@ - SUBROUTINE XERPRT(MESSG,NMESSG) -C***BEGIN PROLOGUE XERPRT -C***DATE WRITTEN 790801 (YYMMDD) -C***REVISION DATE 820801 (YYMMDD) -C***CATEGORY NO. Z -C***KEYWORDS ERROR,XERROR PACKAGE -C***AUTHOR JONES, R. E., (SNLA) -C***PURPOSE Prints error messages. -C***DESCRIPTION -C Abstract -C Print the Hollerith message in MESSG, of length NMESSG, -C on each file indicated by XGETUA. -C Latest revision --- 19 MAR 1980 -C***REFERENCES JONES R.E., KAHANER D.K., "XERROR, THE SLATEC ERROR-" -C HANDLING PACKAGE", SAND82-0800, SANDIA LABORATORIES," -C 1982. -C***ROUTINES CALLED I1MACH,S88FMT,XGETUA -C***END PROLOGUE XERPRT - INTEGER LUN(5) - CHARACTER*(*) MESSG -C OBTAIN UNIT NUMBERS AND WRITE LINE TO EACH UNIT -C***FIRST EXECUTABLE STATEMENT XERPRT - CALL XGETUA(LUN,NUNIT) - LENMES = LEN(MESSG) - DO 20 KUNIT=1,NUNIT - IUNIT = LUN(KUNIT) - IF (IUNIT.EQ.0) IUNIT = I1MACH(4) - DO 10 ICHAR=1,LENMES,72 - LAST = MIN0(ICHAR+71 , LENMES) - WRITE (IUNIT,'(1X,A)') MESSG(ICHAR:LAST) - 10 CONTINUE - 20 CONTINUE - RETURN - END diff --git a/sorc/relocate_mv_nvortex.fd/XERROR.f b/sorc/relocate_mv_nvortex.fd/XERROR.f deleted file mode 100755 index 56b0f98000..0000000000 --- a/sorc/relocate_mv_nvortex.fd/XERROR.f +++ /dev/null @@ -1,51 +0,0 @@ - SUBROUTINE XERROR(MESSG,NMESSG,NERR,LEVEL) -C***BEGIN PROLOGUE XERROR -C***DATE WRITTEN 790801 (YYMMDD) -C***REVISION DATE 820801 (YYMMDD) -C***CATEGORY NO. R3C -C***KEYWORDS ERROR,XERROR PACKAGE -C***AUTHOR JONES, R. E., (SNLA) -C***PURPOSE Processes an error (diagnostic) message. -C***DESCRIPTION -C Abstract -C XERROR processes a diagnostic message, in a manner -C determined by the value of LEVEL and the current value -C of the library error control flag, KONTRL. -C (See subroutine XSETF for details.) -C -C Description of Parameters -C --Input-- -C MESSG - the Hollerith message to be processed, containing -C no more than 72 characters. -C NMESSG- the actual number of characters in MESSG. -C NERR - the error number associated with this message. -C NERR must not be zero. -C LEVEL - error category. -C =2 means this is an unconditionally fatal error. -C =1 means this is a recoverable error. (I.e., it is -C non-fatal if XSETF has been appropriately called.) -C =0 means this is a warning message only. -C =-1 means this is a warning message which is to be -C printed at most once, regardless of how many -C times this call is executed. -C -C Examples -C CALL XERROR('SMOOTH -- NUM WAS ZERO.',23,1,2) -C CALL XERROR('INTEG -- LESS THAN FULL ACCURACY ACHIEVED.', -C 43,2,1) -C CALL XERROR('ROOTER -- ACTUAL ZERO OF F FOUND BEFORE INTERVAL F -C 1ULLY COLLAPSED.',65,3,0) -C CALL XERROR('EXP -- UNDERFLOWS BEING SET TO ZERO.',39,1,-1) -C -C Latest revision --- 19 MAR 1980 -C Written by Ron Jones, with SLATEC Common Math Library Subcommittee -C***REFERENCES JONES R.E., KAHANER D.K., "XERROR, THE SLATEC ERROR-" -C HANDLING PACKAGE", SAND82-0800, SANDIA LABORATORIES," -C 1982. -C***ROUTINES CALLED XERRWV -C***END PROLOGUE XERROR - CHARACTER*(*) MESSG -C***FIRST EXECUTABLE STATEMENT XERROR - CALL XERRWV(MESSG,NMESSG,NERR,LEVEL,0,0,0,0,0.,0.) - RETURN - END diff --git a/sorc/relocate_mv_nvortex.fd/XERRWV.f b/sorc/relocate_mv_nvortex.fd/XERRWV.f deleted file mode 100755 index 7dfa412675..0000000000 --- a/sorc/relocate_mv_nvortex.fd/XERRWV.f +++ /dev/null @@ -1,153 +0,0 @@ - SUBROUTINE XERRWV(MESSG,NMESSG,NERR,LEVEL,NI,I1,I2,NR,R1,R2) -C***BEGIN PROLOGUE XERRWV -C***DATE WRITTEN 800319 (YYMMDD) -C***REVISION DATE 820801 (YYMMDD) -C***CATEGORY NO. R3C -C***KEYWORDS ERROR,XERROR PACKAGE -C***AUTHOR JONES, R. E., (SNLA) -C***PURPOSE Processes error message allowing 2 integer and two real -C values to be included in the message. -C***DESCRIPTION -C Abstract -C XERRWV processes a diagnostic message, in a manner -C determined by the value of LEVEL and the current value -C of the library error control flag, KONTRL. -C (See subroutine XSETF for details.) -C In addition, up to two integer values and two real -C values may be printed along with the message. -C -C Description of Parameters -C --Input-- -C MESSG - the Hollerith message to be processed. -C NMESSG- the actual number of characters in MESSG. -C NERR - the error number associated with this message. -C NERR must not be zero. -C LEVEL - error category. -C =2 means this is an unconditionally fatal error. -C =1 means this is a recoverable error. (I.e., it is -C non-fatal if XSETF has been appropriately called.) -C =0 means this is a warning message only. -C =-1 means this is a warning message which is to be -C printed at most once, regardless of how many -C times this call is executed. -C NI - number of integer values to be printed. (0 to 2) -C I1 - first integer value. -C I2 - second integer value. -C NR - number of real values to be printed. (0 to 2) -C R1 - first real value. -C R2 - second real value. -C -C Examples -C CALL XERRWV('SMOOTH -- NUM (=I1) WAS ZERO.',29,1,2, -C 1 1,NUM,0,0,0.,0.) -C CALL XERRWV('QUADXY -- REQUESTED ERROR (R1) LESS THAN MINIMUM ( -C 1R2).,54,77,1,0,0,0,2,ERRREQ,ERRMIN) -C -C Latest revision --- 19 MAR 1980 -C Written by Ron Jones, with SLATEC Common Math Library Subcommittee -C***REFERENCES JONES R.E., KAHANER D.K., "XERROR, THE SLATEC ERROR-" -C HANDLING PACKAGE", SAND82-0800, SANDIA LABORATORIES," -C 1982. -C***ROUTINES CALLED FDUMP,I1MACH,J4SAVE,XERABT,XERCTL,XERPRT,XERSAV, -C XGETUA -C***END PROLOGUE XERRWV - CHARACTER*(*) MESSG - CHARACTER*20 LFIRST - CHARACTER*37 FORM - DIMENSION LUN(5) -C GET FLAGS -C***FIRST EXECUTABLE STATEMENT XERRWV - LKNTRL = J4SAVE(2,0,.FALSE.) - MAXMES = J4SAVE(4,0,.FALSE.) -C CHECK FOR VALID INPUT - IF ((NMESSG.GT.0).AND.(NERR.NE.0).AND. - 1 (LEVEL.GE.(-1)).AND.(LEVEL.LE.2)) GO TO 10 - IF (LKNTRL.GT.0) CALL XERPRT('FATAL ERROR IN...',17) - CALL XERPRT('XERROR -- INVALID INPUT',23) - IF (LKNTRL.GT.0) CALL FDUMP - IF (LKNTRL.GT.0) CALL XERPRT('JOB ABORT DUE TO FATAL ERROR.', - 1 29) - IF (LKNTRL.GT.0) CALL XERSAV(' ',0,0,0,KDUMMY) - CALL XERABT('XERROR -- INVALID INPUT',23) - RETURN - 10 CONTINUE -C RECORD MESSAGE - JUNK = J4SAVE(1,NERR,.TRUE.) - CALL XERSAV(MESSG,NMESSG,NERR,LEVEL,KOUNT) -C LET USER OVERRIDE - LFIRST = MESSG - LMESSG = NMESSG - LERR = NERR - LLEVEL = LEVEL - CALL XERCTL(LFIRST,LMESSG,LERR,LLEVEL,LKNTRL) -C RESET TO ORIGINAL VALUES - LMESSG = NMESSG - LERR = NERR - LLEVEL = LEVEL - LKNTRL = MAX0(-2,MIN0(2,LKNTRL)) - MKNTRL = IABS(LKNTRL) -C DECIDE WHETHER TO PRINT MESSAGE - IF ((LLEVEL.LT.2).AND.(LKNTRL.EQ.0)) GO TO 100 - IF (((LLEVEL.EQ.(-1)).AND.(KOUNT.GT.MIN0(1,MAXMES))) - 1.OR.((LLEVEL.EQ.0) .AND.(KOUNT.GT.MAXMES)) - 2.OR.((LLEVEL.EQ.1) .AND.(KOUNT.GT.MAXMES).AND.(MKNTRL.EQ.1)) - 3.OR.((LLEVEL.EQ.2) .AND.(KOUNT.GT.MAX0(1,MAXMES)))) GO TO 100 - IF (LKNTRL.LE.0) GO TO 20 - CALL XERPRT(' ',1) -C INTRODUCTION - IF (LLEVEL.EQ.(-1)) CALL XERPRT - 1('WARNING MESSAGE...THIS MESSAGE WILL ONLY BE PRINTED ONCE.',57) - IF (LLEVEL.EQ.0) CALL XERPRT('WARNING IN...',13) - IF (LLEVEL.EQ.1) CALL XERPRT - 1 ('RECOVERABLE ERROR IN...',23) - IF (LLEVEL.EQ.2) CALL XERPRT('FATAL ERROR IN...',17) - 20 CONTINUE -C MESSAGE - CALL XERPRT(MESSG,LMESSG) - CALL XGETUA(LUN,NUNIT) - ISIZEI = LOG10(FLOAT(I1MACH(9))) + 1.0 - ISIZEF = LOG10(FLOAT(I1MACH(10))**I1MACH(11)) + 1.0 - DO 50 KUNIT=1,NUNIT - IUNIT = LUN(KUNIT) - IF (IUNIT.EQ.0) IUNIT = I1MACH(4) - DO 22 I=1,MIN(NI,2) - WRITE (FORM,21) I,ISIZEI - 21 FORMAT ('(11X,21HIN ABOVE MESSAGE, I',I1,'=,I',I2,') ') - IF (I.EQ.1) WRITE (IUNIT,FORM) I1 - IF (I.EQ.2) WRITE (IUNIT,FORM) I2 - 22 CONTINUE - DO 24 I=1,MIN(NR,2) - WRITE (FORM,23) I,ISIZEF+10,ISIZEF - 23 FORMAT ('(11X,21HIN ABOVE MESSAGE, R',I1,'=,E', - 1 I2,'.',I2,')') - IF (I.EQ.1) WRITE (IUNIT,FORM) R1 - IF (I.EQ.2) WRITE (IUNIT,FORM) R2 - 24 CONTINUE - IF (LKNTRL.LE.0) GO TO 40 -C ERROR NUMBER - WRITE (IUNIT,30) LERR - 30 FORMAT (15H ERROR NUMBER =,I10) - 40 CONTINUE - 50 CONTINUE -C TRACE-BACK - IF (LKNTRL.GT.0) CALL FDUMP - 100 CONTINUE - IFATAL = 0 - IF ((LLEVEL.EQ.2).OR.((LLEVEL.EQ.1).AND.(MKNTRL.EQ.2))) - 1IFATAL = 1 -C QUIT HERE IF MESSAGE IS NOT FATAL - IF (IFATAL.LE.0) RETURN - IF ((LKNTRL.LE.0).OR.(KOUNT.GT.MAX0(1,MAXMES))) GO TO 120 -C PRINT REASON FOR ABORT - IF (LLEVEL.EQ.1) CALL XERPRT - 1 ('JOB ABORT DUE TO UNRECOVERED ERROR.',35) - IF (LLEVEL.EQ.2) CALL XERPRT - 1 ('JOB ABORT DUE TO FATAL ERROR.',29) -C PRINT ERROR SUMMARY - CALL XERSAV(' ',-1,0,0,KDUMMY) - 120 CONTINUE -C ABORT - IF ((LLEVEL.EQ.2).AND.(KOUNT.GT.MAX0(1,MAXMES))) LMESSG = 0 - CALL XERABT(MESSG,LMESSG) - RETURN - END diff --git a/sorc/relocate_mv_nvortex.fd/XERSAV.f b/sorc/relocate_mv_nvortex.fd/XERSAV.f deleted file mode 100755 index 89a88ade9b..0000000000 --- a/sorc/relocate_mv_nvortex.fd/XERSAV.f +++ /dev/null @@ -1,104 +0,0 @@ - SUBROUTINE XERSAV(MESSG,NMESSG,NERR,LEVEL,ICOUNT) -C***BEGIN PROLOGUE XERSAV -C***DATE WRITTEN 800319 (YYMMDD) -C***REVISION DATE 820801 (YYMMDD) -C***CATEGORY NO. Z -C***KEYWORDS ERROR,XERROR PACKAGE -C***AUTHOR JONES, R. E., (SNLA) -C***PURPOSE Records that an error occurred. -C***DESCRIPTION -C Abstract -C Record that this error occurred. -C -C Description of Parameters -C --Input-- -C MESSG, NMESSG, NERR, LEVEL are as in XERROR, -C except that when NMESSG=0 the tables will be -C dumped and cleared, and when NMESSG is less than zero the -C tables will be dumped and not cleared. -C --Output-- -C ICOUNT will be the number of times this message has -C been seen, or zero if the table has overflowed and -C does not contain this message specifically. -C When NMESSG=0, ICOUNT will not be altered. -C -C Written by Ron Jones, with SLATEC Common Math Library Subcommittee -C Latest revision --- 19 Mar 1980 -C***REFERENCES JONES R.E., KAHANER D.K., "XERROR, THE SLATEC ERROR-" -C HANDLING PACKAGE", SAND82-0800, SANDIA LABORATORIES," -C 1982. -C***ROUTINES CALLED I1MACH,S88FMT,XGETUA -C***END PROLOGUE XERSAV - INTEGER LUN(5) - CHARACTER*(*) MESSG - CHARACTER*20 MESTAB(10),MES - DIMENSION NERTAB(10),LEVTAB(10),KOUNT(10) - SAVE MESTAB,NERTAB,LEVTAB,KOUNT,KOUNTX -C NEXT TWO DATA STATEMENTS ARE NECESSARY TO PROVIDE A BLANK -C ERROR TABLE INITIALLY - DATA KOUNT(1),KOUNT(2),KOUNT(3),KOUNT(4),KOUNT(5), - 1 KOUNT(6),KOUNT(7),KOUNT(8),KOUNT(9),KOUNT(10) - 2 /0,0,0,0,0,0,0,0,0,0/ - DATA KOUNTX/0/ -C***FIRST EXECUTABLE STATEMENT XERSAV - IF (NMESSG.GT.0) GO TO 80 -C DUMP THE TABLE - IF (KOUNT(1).EQ.0) RETURN -C PRINT TO EACH UNIT - CALL XGETUA(LUN,NUNIT) - DO 60 KUNIT=1,NUNIT - IUNIT = LUN(KUNIT) - IF (IUNIT.EQ.0) IUNIT = I1MACH(4) -C PRINT TABLE HEADER - WRITE (IUNIT,10) - 10 FORMAT (32H0 ERROR MESSAGE SUMMARY/ - 1 51H MESSAGE START NERR LEVEL COUNT) -C PRINT BODY OF TABLE - DO 20 I=1,10 - IF (KOUNT(I).EQ.0) GO TO 30 - WRITE (IUNIT,15) MESTAB(I),NERTAB(I),LEVTAB(I),KOUNT(I) - 15 FORMAT (1X,A20,3I10) - 20 CONTINUE - 30 CONTINUE -C PRINT NUMBER OF OTHER ERRORS - IF (KOUNTX.NE.0) WRITE (IUNIT,40) KOUNTX - 40 FORMAT (41H0OTHER ERRORS NOT INDIVIDUALLY TABULATED=,I10) - WRITE (IUNIT,50) - 50 FORMAT (1X) - 60 CONTINUE - IF (NMESSG.LT.0) RETURN -C CLEAR THE ERROR TABLES - DO 70 I=1,10 - 70 KOUNT(I) = 0 - KOUNTX = 0 - RETURN - 80 CONTINUE -C PROCESS A MESSAGE... -C SEARCH FOR THIS MESSG, OR ELSE AN EMPTY SLOT FOR THIS MESSG, -C OR ELSE DETERMINE THAT THE ERROR TABLE IS FULL. - MES = MESSG - DO 90 I=1,10 - II = I - IF (KOUNT(I).EQ.0) GO TO 110 - IF (MES.NE.MESTAB(I)) GO TO 90 - IF (NERR.NE.NERTAB(I)) GO TO 90 - IF (LEVEL.NE.LEVTAB(I)) GO TO 90 - GO TO 100 - 90 CONTINUE -C THREE POSSIBLE CASES... -C TABLE IS FULL - KOUNTX = KOUNTX+1 - ICOUNT = 1 - RETURN -C MESSAGE FOUND IN TABLE - 100 KOUNT(II) = KOUNT(II) + 1 - ICOUNT = KOUNT(II) - RETURN -C EMPTY SLOT FOUND FOR NEW MESSAGE - 110 MESTAB(II) = MES - NERTAB(II) = NERR - LEVTAB(II) = LEVEL - KOUNT(II) = 1 - ICOUNT = 1 - RETURN - END diff --git a/sorc/relocate_mv_nvortex.fd/XGETUA.f b/sorc/relocate_mv_nvortex.fd/XGETUA.f deleted file mode 100755 index 2f0e5f6f7f..0000000000 --- a/sorc/relocate_mv_nvortex.fd/XGETUA.f +++ /dev/null @@ -1,46 +0,0 @@ - SUBROUTINE XGETUA(IUNITA,N) -C***BEGIN PROLOGUE XGETUA -C***DATE WRITTEN 790801 (YYMMDD) -C***REVISION DATE 820801 (YYMMDD) -C***CATEGORY NO. R3C -C***KEYWORDS ERROR,XERROR PACKAGE -C***AUTHOR JONES, R. E., (SNLA) -C***PURPOSE Returns unit number(s) to which error messages are being -C sent. -C***DESCRIPTION -C Abstract -C XGETUA may be called to determine the unit number or numbers -C to which error messages are being sent. -C These unit numbers may have been set by a call to XSETUN, -C or a call to XSETUA, or may be a default value. -C -C Description of Parameters -C --Output-- -C IUNIT - an array of one to five unit numbers, depending -C on the value of N. A value of zero refers to the -C default unit, as defined by the I1MACH machine -C constant routine. Only IUNIT(1),...,IUNIT(N) are -C defined by XGETUA. The values of IUNIT(N+1),..., -C IUNIT(5) are not defined (for N .LT. 5) or altered -C in any way by XGETUA. -C N - the number of units to which copies of the -C error messages are being sent. N will be in the -C range from 1 to 5. -C -C Latest revision --- 19 MAR 1980 -C Written by Ron Jones, with SLATEC Common Math Library Subcommittee -C***REFERENCES JONES R.E., KAHANER D.K., "XERROR, THE SLATEC ERROR-" -C HANDLING PACKAGE", SAND82-0800, SANDIA LABORATORIES," -C 1982. -C***ROUTINES CALLED J4SAVE -C***END PROLOGUE XGETUA - DIMENSION IUNITA(5) -C***FIRST EXECUTABLE STATEMENT XGETUA - N = J4SAVE(5,0,.FALSE.) - DO 30 I=1,N - INDEX = I+4 - IF (I.EQ.1) INDEX = 3 - IUNITA(I) = J4SAVE(INDEX,0,.FALSE.) - 30 CONTINUE - RETURN - END diff --git a/sorc/relocate_mv_nvortex.fd/amatrix.f b/sorc/relocate_mv_nvortex.fd/amatrix.f deleted file mode 100755 index 0e84ed95e5..0000000000 --- a/sorc/relocate_mv_nvortex.fd/amatrix.f +++ /dev/null @@ -1,21 +0,0 @@ - subroutine amatrix - parameter(nmx=24) - common /matrix/ a(nmx,nmx),capd2 - COMMON /POSIT/ XOLD,YOLD,XCORN,YCORN - common /vect/rovect(nmx),xvect(nmx),yvect(nmx) -c - PI180 = 4.*ATAN(1.0)/180. - yo=yold*pi180 -c qliu fact=cos(yo) - fact=1.0 -c capd2=(3.15)*(3.15) - capd2=(2.25)*(2.25) - do 10 ip=1,nmx - do 10 jp=ip,nmx - dpij=(fact*(xvect(ip)-xvect(jp)))**2 +(yvect(ip)-yvect(jp))**2 - a(ip,jp)= exp(-dpij/capd2) - a(jp,ip)= a(ip,jp) -10 continue -100 format(5f8.4) - return - end diff --git a/sorc/relocate_mv_nvortex.fd/fft99.f b/sorc/relocate_mv_nvortex.fd/fft99.f deleted file mode 100755 index 3fcdedc7ed..0000000000 --- a/sorc/relocate_mv_nvortex.fd/fft99.f +++ /dev/null @@ -1,1126 +0,0 @@ -C - SUBROUTINE FFT99(A,WORK,TRIGS,IFAX,INC,JUMP,N,LOT,ISIGN) -C -C PURPOSE PERFORMS MULTIPLE FAST FOURIER TRANSFORMS. THIS PACKAGE -C WILL PERFORM A NUMBER OF SIMULTANEOUS REAL/HALF-COMPLEX -C PERIODIC FOURIER TRANSFORMS OR CORRESPONDING INVERSE -C TRANSFORMS, I.E. GIVEN A SET OF REAL DATA VECTORS, THE -C PACKAGE RETURNS A SET OF 'HALF-COMPLEX' FOURIER -C COEFFICIENT VECTORS, OR VICE VERSA. THE LENGTH OF THE -C TRANSFORMS MUST BE AN EVEN NUMBER GREATER THAN 4 THAT HAS -C NO OTHER FACTORS EXCEPT POSSIBLY POWERS OF 2, 3, AND 5. -C THIS IS AN ALL FORTRAN VERSION OF THE CRAYLIB PACKAGE -C THAT IS MOSTLY WRITTEN IN CAL. -C -C THE PACKAGE FFT99F CONTAINS SEVERAL USER-LEVEL ROUTINES: -C -C SUBROUTINE FFTFAX -C AN INITIALIZATION ROUTINE THAT MUST BE CALLED ONCE -C BEFORE A SEQUENCE OF CALLS TO THE FFT ROUTINES -C (PROVIDED THAT N IS NOT CHANGED). -C -C SUBROUTINES FFT99 AND FFT991 -C TWO FFT ROUTINES THAT RETURN SLIGHTLY DIFFERENT -C ARRANGEMENTS OF THE DATA IN GRIDPOINT SPACE. -C -C -C ACCESS THIS FORTRAN VERSION MAY BE ACCESSED WITH -C -C *FORTRAN,P=XLIB,SN=FFT99F -C -C TO ACCESS THE CRAY OBJECT CODE, CALLING THE USER ENTRY -C POINTS FROM A CRAY PROGRAM IS SUFFICIENT. THE SOURCE -C FORTRAN AND CAL CODE FOR THE CRAYLIB VERSION MAY BE -C ACCESSED USING -C -C FETCH P=CRAYLIB,SN=FFT99 -C FETCH P=CRAYLIB,SN=CAL99 -C -C USAGE LET N BE OF THE FORM 2**P * 3**Q * 5**R, WHERE P .GE. 1, -C Q .GE. 0, AND R .GE. 0. THEN A TYPICAL SEQUENCE OF -C CALLS TO TRANSFORM A GIVEN SET OF REAL VECTORS OF LENGTH -C N TO A SET OF 'HALF-COMPLEX' FOURIER COEFFICIENT VECTORS -C OF LENGTH N IS -C -C DIMENSION IFAX(13),TRIGS(3*N/2+1),A(M*(N+2)), -C + WORK(M*(N+1)) -C -C CALL FFTFAX (N, IFAX, TRIGS) -C CALL FFT99 (A,WORK,TRIGS,IFAX,INC,JUMP,N,M,ISIGN) -C -C SEE THE INDIVIDUAL WRITE-UPS FOR FFTFAX, FFT99, AND -C FFT991 BELOW, FOR A DETAILED DESCRIPTION OF THE -C ARGUMENTS. -C -C HISTORY THE PACKAGE WAS WRITTEN BY CLIVE TEMPERTON AT ECMWF IN -C NOVEMBER, 1978. IT WAS MODIFIED, DOCUMENTED, AND TESTED -C FOR NCAR BY RUSS REW IN SEPTEMBER, 1980. -C -C----------------------------------------------------------------------- -C -C SUBROUTINE FFTFAX (N,IFAX,TRIGS) -C -C PURPOSE A SET-UP ROUTINE FOR FFT99 AND FFT991. IT NEED ONLY BE -C CALLED ONCE BEFORE A SEQUENCE OF CALLS TO THE FFT -C ROUTINES (PROVIDED THAT N IS NOT CHANGED). -C -C ARGUMENT IFAX(13),TRIGS(3*N/2+1) -C DIMENSIONS -C -C ARGUMENTS -C -C ON INPUT N -C AN EVEN NUMBER GREATER THAN 4 THAT HAS NO PRIME FACTOR -C GREATER THAN 5. N IS THE LENGTH OF THE TRANSFORMS (SEE -C THE DOCUMENTATION FOR FFT99 AND FFT991 FOR THE -C DEFINITIONS OF THE TRANSFORMS). -C -C IFAX -C AN INTEGER ARRAY. THE NUMBER OF ELEMENTS ACTUALLY USED -C WILL DEPEND ON THE FACTORIZATION OF N. DIMENSIONING -C IFAX FOR 13 SUFFICES FOR ALL N LESS THAN A MILLION. -C -C TRIGS -C A FLOATING POINT ARRAY OF DIMENSION 3*N/2 IF N/2 IS -C EVEN, OR 3*N/2+1 IF N/2 IS ODD. -C -C ON OUTPUT IFAX -C CONTAINS THE FACTORIZATION OF N/2. IFAX(1) IS THE -C NUMBER OF FACTORS, AND THE FACTORS THEMSELVES ARE STORED -C IN IFAX(2),IFAX(3),... IF FFTFAX IS CALLED WITH N ODD, -C OR IF N HAS ANY PRIME FACTORS GREATER THAN 5, IFAX(1) -C IS SET TO -99. -C -C TRIGS -C AN ARRAY OF TRIGNOMENTRIC FUNCTION VALUES SUBSEQUENTLY -C USED BY THE FFT ROUTINES. -C -C----------------------------------------------------------------------- -C -C SUBROUTINE FFT991 (A,WORK,TRIGS,IFAX,INC,JUMP,N,M,ISIGN) -C AND -C SUBROUTINE FFT99 (A,WORK,TRIGS,IFAX,INC,JUMP,N,M,ISIGN) -C -C PURPOSE PERFORM A NUMBER OF SIMULTANEOUS REAL/HALF-COMPLEX -C PERIODIC FOURIER TRANSFORMS OR CORRESPONDING INVERSE -C TRANSFORMS, USING ORDINARY SPATIAL ORDER OF GRIDPOINT -C VALUES (FFT991) OR EXPLICIT CYCLIC CONTINUITY IN THE -C GRIDPOINT VALUES (FFT99). GIVEN A SET -C OF REAL DATA VECTORS, THE PACKAGE RETURNS A SET OF -C 'HALF-COMPLEX' FOURIER COEFFICIENT VECTORS, OR VICE -C VERSA. THE LENGTH OF THE TRANSFORMS MUST BE AN EVEN -C NUMBER THAT HAS NO OTHER FACTORS EXCEPT POSSIBLY POWERS -C OF 2, 3, AND 5. THESE VERSION OF FFT991 AND FFT99 ARE -C OPTIMIZED FOR USE ON THE CRAY-1. -C -C ARGUMENT A(M*(N+2)), WORK(M*(N+1)), TRIGS(3*N/2+1), IFAX(13) -C DIMENSIONS -C -C ARGUMENTS -C -C ON INPUT A -C AN ARRAY OF LENGTH M*(N+2) CONTAINING THE INPUT DATA -C OR COEFFICIENT VECTORS. THIS ARRAY IS OVERWRITTEN BY -C THE RESULTS. -C -C WORK -C A WORK ARRAY OF DIMENSION M*(N+1) -C -C TRIGS -C AN ARRAY SET UP BY FFTFAX, WHICH MUST BE CALLED FIRST. -C -C IFAX -C AN ARRAY SET UP BY FFTFAX, WHICH MUST BE CALLED FIRST. -C -C INC -C THE INCREMENT (IN WORDS) BETWEEN SUCCESSIVE ELEMENTS OF -C EACH DATA OR COEFFICIENT VECTOR (E.G. INC=1 FOR -C CONSECUTIVELY STORED DATA). -C -C JUMP -C THE INCREMENT (IN WORDS) BETWEEN THE FIRST ELEMENTS OF -C SUCCESSIVE DATA OR COEFFICIENT VECTORS. ON THE CRAY-1, -C TRY TO ARRANGE DATA SO THAT JUMP IS NOT A MULTIPLE OF 8 -C (TO AVOID MEMORY BANK CONFLICTS). FOR CLARIFICATION OF -C INC AND JUMP, SEE THE EXAMPLES BELOW. -C -C N -C THE LENGTH OF EACH TRANSFORM (SEE DEFINITION OF -C TRANSFORMS, BELOW). -C -C M -C THE NUMBER OF TRANSFORMS TO BE DONE SIMULTANEOUSLY. -C -C ISIGN -C = +1 FOR A TRANSFORM FROM FOURIER COEFFICIENTS TO -C GRIDPOINT VALUES. -C = -1 FOR A TRANSFORM FROM GRIDPOINT VALUES TO FOURIER -C COEFFICIENTS. -C -C ON OUTPUT A -C IF ISIGN = +1, AND M COEFFICIENT VECTORS ARE SUPPLIED -C EACH CONTAINING THE SEQUENCE: -C -C A(0),B(0),A(1),B(1),...,A(N/2),B(N/2) (N+2 VALUES) -C -C THEN THE RESULT CONSISTS OF M DATA VECTORS EACH -C CONTAINING THE CORRESPONDING N+2 GRIDPOINT VALUES: -C -C FOR FFT991, X(0), X(1), X(2),...,X(N-1),0,0. -C FOR FFT99, X(N-1),X(0),X(1),X(2),...,X(N-1),X(0). -C (EXPLICIT CYCLIC CONTINUITY) -C -C WHEN ISIGN = +1, THE TRANSFORM IS DEFINED BY: -C X(J)=SUM(K=0,...,N-1)(C(K)*EXP(2*I*J*K*PI/N)) -C WHERE C(K)=A(K)+I*B(K) AND C(N-K)=A(K)-I*B(K) -C AND I=SQRT (-1) -C -C IF ISIGN = -1, AND M DATA VECTORS ARE SUPPLIED EACH -C CONTAINING A SEQUENCE OF GRIDPOINT VALUES X(J) AS -C DEFINED ABOVE, THEN THE RESULT CONSISTS OF M VECTORS -C EACH CONTAINING THE CORRESPONDING FOURIER COFFICIENTS -C A(K), B(K), 0 .LE. K .LE N/2. -C -C WHEN ISIGN = -1, THE INVERSE TRANSFORM IS DEFINED BY: -C C(K)=(1/N)*SUM(J=0,...,N-1)(X(J)*EXP(-2*I*J*K*PI/N)) -C WHERE C(K)=A(K)+I*B(K) AND I=SQRT(-1) -C -C A CALL WITH ISIGN=+1 FOLLOWED BY A CALL WITH ISIGN=-1 -C (OR VICE VERSA) RETURNS THE ORIGINAL DATA. -C -C NOTE: THE FACT THAT THE GRIDPOINT VALUES X(J) ARE REAL -C IMPLIES THAT B(0)=B(N/2)=0. FOR A CALL WITH ISIGN=+1, -C IT IS NOT ACTUALLY NECESSARY TO SUPPLY THESE ZEROS. -C -C EXAMPLES GIVEN 19 DATA VECTORS EACH OF LENGTH 64 (+2 FOR EXPLICIT -C CYCLIC CONTINUITY), COMPUTE THE CORRESPONDING VECTORS OF -C FOURIER COEFFICIENTS. THE DATA MAY, FOR EXAMPLE, BE -C ARRANGED LIKE THIS: -C -C FIRST DATA A(1)= . . . A(66)= A(70) -C VECTOR X(63) X(0) X(1) X(2) ... X(63) X(0) (4 EMPTY LOCATIONS) -C -C SECOND DATA A(71)= . . . A(140) -C VECTOR X(63) X(0) X(1) X(2) ... X(63) X(0) (4 EMPTY LOCATIONS) -C -C AND SO ON. HERE INC=1, JUMP=70, N=64, M=19, ISIGN=-1, -C AND FFT99 SHOULD BE USED (BECAUSE OF THE EXPLICIT CYCLIC -C CONTINUITY). -C -C ALTERNATIVELY THE DATA MAY BE ARRANGED LIKE THIS: -C -C FIRST SECOND LAST -C DATA DATA DATA -C VECTOR VECTOR VECTOR -C -C A(1)= A(2)= A(19)= -C -C X(63) X(63) . . . X(63) -C A(20)= X(0) X(0) . . . X(0) -C A(39)= X(1) X(1) . . . X(1) -C . . . -C . . . -C . . . -C -C IN WHICH CASE WE HAVE INC=19, JUMP=1, AND THE REMAINING -C PARAMETERS ARE THE SAME AS BEFORE. IN EITHER CASE, EACH -C COEFFICIENT VECTOR OVERWRITES THE CORRESPONDING INPUT -C DATA VECTOR. -C -C----------------------------------------------------------------------- - DIMENSION A(N),WORK(N),TRIGS(N),IFAX(1) -C -C SUBROUTINE "FFT99" - MULTIPLE FAST REAL PERIODIC TRANSFORM -C CORRESPONDING TO OLD SCALAR ROUTINE FFT9 -C PROCEDURE USED TO CONVERT TO HALF-LENGTH COMPLEX TRANSFORM -C IS GIVEN BY COOLEY, LEWIS AND WELCH (J. SOUND VIB., VOL. 12 -C (1970), 315-337) -C -C A IS THE ARRAY CONTAINING INPUT AND OUTPUT DATA -C WORK IS AN AREA OF SIZE (N+1)*LOT -C TRIGS IS A PREVIOUSLY PREPARED LIST OF TRIG FUNCTION VALUES -C IFAX IS A PREVIOUSLY PREPARED LIST OF FACTORS OF N/2 -C INC IS THE INCREMENT WITHIN EACH DATA 'VECTOR' -C (E.G. INC=1 FOR CONSECUTIVELY STORED DATA) -C JUMP IS THE INCREMENT BETWEEN THE START OF EACH DATA VECTOR -C N IS THE LENGTH OF THE DATA VECTORS -C LOT IS THE NUMBER OF DATA VECTORS -C ISIGN = +1 FOR TRANSFORM FROM SPECTRAL TO GRIDPOINT -C = -1 FOR TRANSFORM FROM GRIDPOINT TO SPECTRAL -C -C ORDERING OF COEFFICIENTS: -C A(0),B(0),A(1),B(1),A(2),B(2),...,A(N/2),B(N/2) -C WHERE B(0)=B(N/2)=0; (N+2) LOCATIONS REQUIRED -C -C ORDERING OF DATA: -C X(N-1),X(0),X(1),X(2),...,X(N),X(0) -C I.E. EXPLICIT CYCLIC CONTINUITY; (N+2) LOCATIONS REQUIRED -C -C VECTORIZATION IS ACHIEVED ON CRAY BY DOING THE TRANSFORMS IN -C PARALLEL -C -C *** N.B. N IS ASSUMED TO BE AN EVEN NUMBER -C -C DEFINITION OF TRANSFORMS: -C ------------------------- -C -C ISIGN=+1: X(J)=SUM(K=0,...,N-1)(C(K)*EXP(2*I*J*K*PI/N)) -C WHERE C(K)=A(K)+I*B(K) AND C(N-K)=A(K)-I*B(K) -C -C ISIGN=-1: A(K)=(1/N)*SUM(J=0,...,N-1)(X(J)*COS(2*J*K*PI/N)) -C B(K)=-(1/N)*SUM(J=0,...,N-1)(X(J)*SIN(2*J*K*PI/N)) -C -C -C THE FOLLOWING CALL IS FOR MONITORING LIBRARY USE AT NCAR -C CALL Q8QST4 ( 4HXLIB, 6HFFT99F, 5HFFT99, 10HVERSION 01) - NFAX=IFAX(1) - NX=N+1 - NH=N/2 - INK=INC+INC - IF (ISIGN.EQ.+1) GO TO 30 -C -C IF NECESSARY, TRANSFER DATA TO WORK AREA - IGO=50 - IF (MOD(NFAX,2).EQ.1) GOTO 40 - IBASE=INC+1 - JBASE=1 - DO 20 L=1,LOT - I=IBASE - J=JBASE -CDIR$ IVDEP - DO 10 M=1,N - WORK(J)=A(I) - I=I+INC - J=J+1 - 10 CONTINUE - IBASE=IBASE+JUMP - JBASE=JBASE+NX - 20 CONTINUE -C - IGO=60 - GO TO 40 -C -C PREPROCESSING (ISIGN=+1) -C ------------------------ -C - 30 CONTINUE - CALL FFT99A(A,WORK,TRIGS,INC,JUMP,N,LOT) - IGO=60 -C -C COMPLEX TRANSFORM -C ----------------- -C - 40 CONTINUE - IA=INC+1 - LA=1 - DO 80 K=1,NFAX - IF (IGO.EQ.60) GO TO 60 - 50 CONTINUE - CALL VPASSM(A(IA),A(IA+INC),WORK(1),WORK(2),TRIGS, - * INK,2,JUMP,NX,LOT,NH,IFAX(K+1),LA) - IGO=60 - GO TO 70 - 60 CONTINUE - CALL VPASSM(WORK(1),WORK(2),A(IA),A(IA+INC),TRIGS, - * 2,INK,NX,JUMP,LOT,NH,IFAX(K+1),LA) - IGO=50 - 70 CONTINUE - LA=LA*IFAX(K+1) - 80 CONTINUE -C - IF (ISIGN.EQ.-1) GO TO 130 -C -C IF NECESSARY, TRANSFER DATA FROM WORK AREA - IF (MOD(NFAX,2).EQ.1) GO TO 110 - IBASE=1 - JBASE=IA - DO 100 L=1,LOT - I=IBASE - J=JBASE -CDIR$ IVDEP - DO 90 M=1,N - A(J)=WORK(I) - I=I+1 - J=J+INC - 90 CONTINUE - IBASE=IBASE+NX - JBASE=JBASE+JUMP - 100 CONTINUE -C -C FILL IN CYCLIC BOUNDARY POINTS - 110 CONTINUE - IA=1 - IB=N*INC+1 -CDIR$ IVDEP - DO 120 L=1,LOT - A(IA)=A(IB) - A(IB+INC)=A(IA+INC) - IA=IA+JUMP - IB=IB+JUMP - 120 CONTINUE - GO TO 140 -C -C POSTPROCESSING (ISIGN=-1): -C -------------------------- -C - 130 CONTINUE - CALL FFT99B(WORK,A,TRIGS,INC,JUMP,N,LOT) -C - 140 CONTINUE - RETURN - END - SUBROUTINE FFT99A(A,WORK,TRIGS,INC,JUMP,N,LOT) - DIMENSION A(N),WORK(N),TRIGS(N) -C -C SUBROUTINE FFT99A - PREPROCESSING STEP FOR FFT99, ISIGN=+1 -C (SPECTRAL TO GRIDPOINT TRANSFORM) -C - NH=N/2 - NX=N+1 - INK=INC+INC -C -C A(0) AND A(N/2) - IA=1 - IB=N*INC+1 - JA=1 - JB=2 -CDIR$ IVDEP - DO 10 L=1,LOT - WORK(JA)=A(IA)+A(IB) - WORK(JB)=A(IA)-A(IB) - IA=IA+JUMP - IB=IB+JUMP - JA=JA+NX - JB=JB+NX - 10 CONTINUE -C -C REMAINING WAVENUMBERS - IABASE=2*INC+1 - IBBASE=(N-2)*INC+1 - JABASE=3 - JBBASE=N-1 -C - DO 30 K=3,NH,2 - IA=IABASE - IB=IBBASE - JA=JABASE - JB=JBBASE - C=TRIGS(N+K) - S=TRIGS(N+K+1) -CDIR$ IVDEP - DO 20 L=1,LOT - WORK(JA)=(A(IA)+A(IB))- - * (S*(A(IA)-A(IB))+C*(A(IA+INC)+A(IB+INC))) - WORK(JB)=(A(IA)+A(IB))+ - * (S*(A(IA)-A(IB))+C*(A(IA+INC)+A(IB+INC))) - WORK(JA+1)=(C*(A(IA)-A(IB))-S*(A(IA+INC)+A(IB+INC)))+ - * (A(IA+INC)-A(IB+INC)) - WORK(JB+1)=(C*(A(IA)-A(IB))-S*(A(IA+INC)+A(IB+INC)))- - * (A(IA+INC)-A(IB+INC)) - IA=IA+JUMP - IB=IB+JUMP - JA=JA+NX - JB=JB+NX - 20 CONTINUE - IABASE=IABASE+INK - IBBASE=IBBASE-INK - JABASE=JABASE+2 - JBBASE=JBBASE-2 - 30 CONTINUE -C - IF (IABASE.NE.IBBASE) GO TO 50 -C WAVENUMBER N/4 (IF IT EXISTS) - IA=IABASE - JA=JABASE -CDIR$ IVDEP - DO 40 L=1,LOT - WORK(JA)=2.0*A(IA) - WORK(JA+1)=-2.0*A(IA+INC) - IA=IA+JUMP - JA=JA+NX - 40 CONTINUE -C - 50 CONTINUE - RETURN - END - SUBROUTINE FFT99B(WORK,A,TRIGS,INC,JUMP,N,LOT) - DIMENSION WORK(N),A(N),TRIGS(N) -C -C SUBROUTINE FFT99B - POSTPROCESSING STEP FOR FFT99, ISIGN=-1 -C (GRIDPOINT TO SPECTRAL TRANSFORM) -C - NH=N/2 - NX=N+1 - INK=INC+INC -C -C A(0) AND A(N/2) - SCALE=1.0/FLOAT(N) - IA=1 - IB=2 - JA=1 - JB=N*INC+1 -CDIR$ IVDEP - DO 10 L=1,LOT - A(JA)=SCALE*(WORK(IA)+WORK(IB)) - A(JB)=SCALE*(WORK(IA)-WORK(IB)) - A(JA+INC)=0.0 - A(JB+INC)=0.0 - IA=IA+NX - IB=IB+NX - JA=JA+JUMP - JB=JB+JUMP - 10 CONTINUE -C -C REMAINING WAVENUMBERS - SCALE=0.5*SCALE - IABASE=3 - IBBASE=N-1 - JABASE=2*INC+1 - JBBASE=(N-2)*INC+1 -C - DO 30 K=3,NH,2 - IA=IABASE - IB=IBBASE - JA=JABASE - JB=JBBASE - C=TRIGS(N+K) - S=TRIGS(N+K+1) -CDIR$ IVDEP - DO 20 L=1,LOT - A(JA)=SCALE*((WORK(IA)+WORK(IB)) - * +(C*(WORK(IA+1)+WORK(IB+1))+S*(WORK(IA)-WORK(IB)))) - A(JB)=SCALE*((WORK(IA)+WORK(IB)) - * -(C*(WORK(IA+1)+WORK(IB+1))+S*(WORK(IA)-WORK(IB)))) - A(JA+INC)=SCALE*((C*(WORK(IA)-WORK(IB))-S*(WORK(IA+1)+WORK(IB+1))) - * +(WORK(IB+1)-WORK(IA+1))) - A(JB+INC)=SCALE*((C*(WORK(IA)-WORK(IB))-S*(WORK(IA+1)+WORK(IB+1))) - * -(WORK(IB+1)-WORK(IA+1))) - IA=IA+NX - IB=IB+NX - JA=JA+JUMP - JB=JB+JUMP - 20 CONTINUE - IABASE=IABASE+2 - IBBASE=IBBASE-2 - JABASE=JABASE+INK - JBBASE=JBBASE-INK - 30 CONTINUE -C - IF (IABASE.NE.IBBASE) GO TO 50 -C WAVENUMBER N/4 (IF IT EXISTS) - IA=IABASE - JA=JABASE - SCALE=2.0*SCALE -CDIR$ IVDEP - DO 40 L=1,LOT - A(JA)=SCALE*WORK(IA) - A(JA+INC)=-SCALE*WORK(IA+1) - IA=IA+NX - JA=JA+JUMP - 40 CONTINUE -C - 50 CONTINUE - RETURN - END - SUBROUTINE FFT991(A,WORK,TRIGS,IFAX,INC,JUMP,N,LOT,ISIGN) - DIMENSION A(N),WORK(N),TRIGS(N),IFAX(1) -C -C SUBROUTINE "FFT991" - MULTIPLE REAL/HALF-COMPLEX PERIODIC -C FAST FOURIER TRANSFORM -C -C SAME AS FFT99 EXCEPT THAT ORDERING OF DATA CORRESPONDS TO -C THAT IN MRFFT2 -C -C PROCEDURE USED TO CONVERT TO HALF-LENGTH COMPLEX TRANSFORM -C IS GIVEN BY COOLEY, LEWIS AND WELCH (J. SOUND VIB., VOL. 12 -C (1970), 315-337) -C -C A IS THE ARRAY CONTAINING INPUT AND OUTPUT DATA -C WORK IS AN AREA OF SIZE (N+1)*LOT -C TRIGS IS A PREVIOUSLY PREPARED LIST OF TRIG FUNCTION VALUES -C IFAX IS A PREVIOUSLY PREPARED LIST OF FACTORS OF N/2 -C INC IS THE INCREMENT WITHIN EACH DATA 'VECTOR' -C (E.G. INC=1 FOR CONSECUTIVELY STORED DATA) -C JUMP IS THE INCREMENT BETWEEN THE START OF EACH DATA VECTOR -C N IS THE LENGTH OF THE DATA VECTORS -C LOT IS THE NUMBER OF DATA VECTORS -C ISIGN = +1 FOR TRANSFORM FROM SPECTRAL TO GRIDPOINT -C = -1 FOR TRANSFORM FROM GRIDPOINT TO SPECTRAL -C -C ORDERING OF COEFFICIENTS: -C A(0),B(0),A(1),B(1),A(2),B(2),...,A(N/2),B(N/2) -C WHERE B(0)=B(N/2)=0; (N+2) LOCATIONS REQUIRED -C -C ORDERING OF DATA: -C X(0),X(1),X(2),...,X(N-1) -C -C VECTORIZATION IS ACHIEVED ON CRAY BY DOING THE TRANSFORMS IN -C PARALLEL -C -C *** N.B. N IS ASSUMED TO BE AN EVEN NUMBER -C -C DEFINITION OF TRANSFORMS: -C ------------------------- -C -C ISIGN=+1: X(J)=SUM(K=0,...,N-1)(C(K)*EXP(2*I*J*K*PI/N)) -C WHERE C(K)=A(K)+I*B(K) AND C(N-K)=A(K)-I*B(K) -C -C ISIGN=-1: A(K)=(1/N)*SUM(J=0,...,N-1)(X(J)*COS(2*J*K*PI/N)) -C B(K)=-(1/N)*SUM(J=0,...,N-1)(X(J)*SIN(2*J*K*PI/N)) -C -C THE FOLLOWING CALL IS FOR MONITORING LIBRARY USE AT NCAR -C CALL Q8QST4 ( 4HXLIB, 6HFFT99F, 6HFFT991, 10HVERSION 01) - NFAX=IFAX(1) - NX=N+1 - NH=N/2 - INK=INC+INC - IF (ISIGN.EQ.+1) GO TO 30 -C -C IF NECESSARY, TRANSFER DATA TO WORK AREA - IGO=50 - IF (MOD(NFAX,2).EQ.1) GOTO 40 - IBASE=1 - JBASE=1 - DO 20 L=1,LOT - I=IBASE - J=JBASE -CDIR$ IVDEP - DO 10 M=1,N - WORK(J)=A(I) - I=I+INC - J=J+1 - 10 CONTINUE - IBASE=IBASE+JUMP - JBASE=JBASE+NX - 20 CONTINUE -C - IGO=60 - GO TO 40 -C -C PREPROCESSING (ISIGN=+1) -C ------------------------ -C - 30 CONTINUE - CALL FFT99A(A,WORK,TRIGS,INC,JUMP,N,LOT) - IGO=60 -C -C COMPLEX TRANSFORM -C ----------------- -C - 40 CONTINUE - IA=1 - LA=1 - DO 80 K=1,NFAX - IF (IGO.EQ.60) GO TO 60 - 50 CONTINUE - CALL VPASSM(A(IA),A(IA+INC),WORK(1),WORK(2),TRIGS, - * INK,2,JUMP,NX,LOT,NH,IFAX(K+1),LA) - IGO=60 - GO TO 70 - 60 CONTINUE - CALL VPASSM(WORK(1),WORK(2),A(IA),A(IA+INC),TRIGS, - * 2,INK,NX,JUMP,LOT,NH,IFAX(K+1),LA) - IGO=50 - 70 CONTINUE - LA=LA*IFAX(K+1) - 80 CONTINUE -C - IF (ISIGN.EQ.-1) GO TO 130 -C -C IF NECESSARY, TRANSFER DATA FROM WORK AREA - IF (MOD(NFAX,2).EQ.1) GO TO 110 - IBASE=1 - JBASE=1 - DO 100 L=1,LOT - I=IBASE - J=JBASE -CDIR$ IVDEP - DO 90 M=1,N - A(J)=WORK(I) - I=I+1 - J=J+INC - 90 CONTINUE - IBASE=IBASE+NX - JBASE=JBASE+JUMP - 100 CONTINUE -C -C FILL IN ZEROS AT END - 110 CONTINUE - IB=N*INC+1 -CDIR$ IVDEP - DO 120 L=1,LOT - A(IB)=0.0 - A(IB+INC)=0.0 - IB=IB+JUMP - 120 CONTINUE - GO TO 140 -C -C POSTPROCESSING (ISIGN=-1): -C -------------------------- -C - 130 CONTINUE - CALL FFT99B(WORK,A,TRIGS,INC,JUMP,N,LOT) -C - 140 CONTINUE - RETURN - END - SUBROUTINE FFTFAX(N,IFAX,TRIGS) - DIMENSION IFAX(13),TRIGS(1) -C -C MODE 3 IS USED FOR REAL/HALF-COMPLEX TRANSFORMS. IT IS POSSIBLE -C TO DO COMPLEX/COMPLEX TRANSFORMS WITH OTHER VALUES OF MODE, BUT -C DOCUMENTATION OF THE DETAILS WERE NOT AVAILABLE WHEN THIS ROUTINE -C WAS WRITTEN. -C - DATA MODE /3/ - CALL FAX (IFAX, N, MODE) - I = IFAX(1) - IF (IFAX(I+1) .GT. 5 .OR. N .LE. 4) IFAX(1) = -99 - IF (IFAX(1) .LE. 0 ) WRITE(6,1) N - IF (IFAX(1) .LE. 0 ) STOP 999 - CALL FFTRIG (TRIGS, N, MODE) - 1 FORMAT(//5X, ' FFTFAX -- INVALID N =', I5,/) - RETURN - END - SUBROUTINE FAX(IFAX,N,MODE) - DIMENSION IFAX(10) - NN=N - IF (IABS(MODE).EQ.1) GO TO 10 - IF (IABS(MODE).EQ.8) GO TO 10 - NN=N/2 - IF ((NN+NN).EQ.N) GO TO 10 - IFAX(1)=-99 - RETURN - 10 K=1 -C TEST FOR FACTORS OF 4 - 20 IF (MOD(NN,4).NE.0) GO TO 30 - K=K+1 - IFAX(K)=4 - NN=NN/4 - IF (NN.EQ.1) GO TO 80 - GO TO 20 -C TEST FOR EXTRA FACTOR OF 2 - 30 IF (MOD(NN,2).NE.0) GO TO 40 - K=K+1 - IFAX(K)=2 - NN=NN/2 - IF (NN.EQ.1) GO TO 80 -C TEST FOR FACTORS OF 3 - 40 IF (MOD(NN,3).NE.0) GO TO 50 - K=K+1 - IFAX(K)=3 - NN=NN/3 - IF (NN.EQ.1) GO TO 80 - GO TO 40 -C NOW FIND REMAINING FACTORS - 50 L=5 - INC=2 -C INC ALTERNATELY TAKES ON VALUES 2 AND 4 - 60 IF (MOD(NN,L).NE.0) GO TO 70 - K=K+1 - IFAX(K)=L - NN=NN/L - IF (NN.EQ.1) GO TO 80 - GO TO 60 - 70 L=L+INC - INC=6-INC - GO TO 60 - 80 IFAX(1)=K-1 -C IFAX(1) CONTAINS NUMBER OF FACTORS - NFAX=IFAX(1) -C SORT FACTORS INTO ASCENDING ORDER - IF (NFAX.EQ.1) GO TO 110 - DO 100 II=2,NFAX - ISTOP=NFAX+2-II - DO 90 I=2,ISTOP - IF (IFAX(I+1).GE.IFAX(I)) GO TO 90 - ITEM=IFAX(I) - IFAX(I)=IFAX(I+1) - IFAX(I+1)=ITEM - 90 CONTINUE - 100 CONTINUE - 110 CONTINUE - RETURN - END - SUBROUTINE FFTRIG(TRIGS,N,MODE) - DIMENSION TRIGS(1) - PI=2.0*ASIN(1.0) - IMODE=IABS(MODE) - NN=N - IF (IMODE.GT.1.AND.IMODE.LT.6) NN=N/2 - DEL=(PI+PI)/FLOAT(NN) - L=NN+NN - DO 10 I=1,L,2 - ANGLE=0.5*FLOAT(I-1)*DEL - TRIGS(I)=COS(ANGLE) - TRIGS(I+1)=SIN(ANGLE) - 10 CONTINUE - IF (IMODE.EQ.1) RETURN - IF (IMODE.EQ.8) RETURN - DEL=0.5*DEL - NH=(NN+1)/2 - L=NH+NH - LA=NN+NN - DO 20 I=1,L,2 - ANGLE=0.5*FLOAT(I-1)*DEL - TRIGS(LA+I)=COS(ANGLE) - TRIGS(LA+I+1)=SIN(ANGLE) - 20 CONTINUE - IF (IMODE.LE.3) RETURN - DEL=0.5*DEL - LA=LA+NN - IF (MODE.EQ.5) GO TO 40 - DO 30 I=2,NN - ANGLE=FLOAT(I-1)*DEL - TRIGS(LA+I)=2.0*SIN(ANGLE) - 30 CONTINUE - RETURN - 40 CONTINUE - DEL=0.5*DEL - DO 50 I=2,N - ANGLE=FLOAT(I-1)*DEL - TRIGS(LA+I)=SIN(ANGLE) - 50 CONTINUE - RETURN - END - SUBROUTINE VPASSM(A,B,C,D,TRIGS,INC1,INC2,INC3,INC4,LOT,N,IFAC,LA) - DIMENSION A(N),B(N),C(N),D(N),TRIGS(N) -C -C SUBROUTINE "VPASSM" - MULTIPLE VERSION OF "VPASSA" -C PERFORMS ONE PASS THROUGH DATA -C AS PART OF MULTIPLE COMPLEX FFT ROUTINE -C A IS FIRST REAL INPUT VECTOR -C B IS FIRST IMAGINARY INPUT VECTOR -C C IS FIRST REAL OUTPUT VECTOR -C D IS FIRST IMAGINARY OUTPUT VECTOR -C TRIGS IS PRECALCULATED TABLE OF SINES " COSINES -C INC1 IS ADDRESSING INCREMENT FOR A AND B -C INC2 IS ADDRESSING INCREMENT FOR C AND D -C INC3 IS ADDRESSING INCREMENT BETWEEN A"S & B"S -C INC4 IS ADDRESSING INCREMENT BETWEEN C"S & D"S -C LOT IS THE NUMBER OF VECTORS -C N IS LENGTH OF VECTORS -C IFAC IS CURRENT FACTOR OF N -C LA IS PRODUCT OF PREVIOUS FACTORS -C - DATA SIN36/0.587785252292473/,COS36/0.809016994374947/, - * SIN72/0.951056516295154/,COS72/0.309016994374947/, - * SIN60/0.866025403784437/ -C - M=N/IFAC - IINK=M*INC1 - JINK=LA*INC2 - JUMP=(IFAC-1)*JINK - IBASE=0 - JBASE=0 - IGO=IFAC-1 - IF (IGO.GT.4) RETURN - GO TO (10,50,90,130),IGO -C -C CODING FOR FACTOR 2 -C - 10 IA=1 - JA=1 - IB=IA+IINK - JB=JA+JINK - DO 20 L=1,LA - I=IBASE - J=JBASE -CDIR$ IVDEP - DO 15 IJK=1,LOT - C(JA+J)=A(IA+I)+A(IB+I) - D(JA+J)=B(IA+I)+B(IB+I) - C(JB+J)=A(IA+I)-A(IB+I) - D(JB+J)=B(IA+I)-B(IB+I) - I=I+INC3 - J=J+INC4 - 15 CONTINUE - IBASE=IBASE+INC1 - JBASE=JBASE+INC2 - 20 CONTINUE - IF (LA.EQ.M) RETURN - LA1=LA+1 - JBASE=JBASE+JUMP - DO 40 K=LA1,M,LA - KB=K+K-2 - C1=TRIGS(KB+1) - S1=TRIGS(KB+2) - DO 30 L=1,LA - I=IBASE - J=JBASE -CDIR$ IVDEP - DO 25 IJK=1,LOT - C(JA+J)=A(IA+I)+A(IB+I) - D(JA+J)=B(IA+I)+B(IB+I) - C(JB+J)=C1*(A(IA+I)-A(IB+I))-S1*(B(IA+I)-B(IB+I)) - D(JB+J)=S1*(A(IA+I)-A(IB+I))+C1*(B(IA+I)-B(IB+I)) - I=I+INC3 - J=J+INC4 - 25 CONTINUE - IBASE=IBASE+INC1 - JBASE=JBASE+INC2 - 30 CONTINUE - JBASE=JBASE+JUMP - 40 CONTINUE - RETURN -C -C CODING FOR FACTOR 3 -C - 50 IA=1 - JA=1 - IB=IA+IINK - JB=JA+JINK - IC=IB+IINK - JC=JB+JINK - DO 60 L=1,LA - I=IBASE - J=JBASE -CDIR$ IVDEP - DO 55 IJK=1,LOT - C(JA+J)=A(IA+I)+(A(IB+I)+A(IC+I)) - D(JA+J)=B(IA+I)+(B(IB+I)+B(IC+I)) - C(JB+J)=(A(IA+I)-0.5*(A(IB+I)+A(IC+I)))-(SIN60*(B(IB+I)-B(IC+I))) - C(JC+J)=(A(IA+I)-0.5*(A(IB+I)+A(IC+I)))+(SIN60*(B(IB+I)-B(IC+I))) - D(JB+J)=(B(IA+I)-0.5*(B(IB+I)+B(IC+I)))+(SIN60*(A(IB+I)-A(IC+I))) - D(JC+J)=(B(IA+I)-0.5*(B(IB+I)+B(IC+I)))-(SIN60*(A(IB+I)-A(IC+I))) - I=I+INC3 - J=J+INC4 - 55 CONTINUE - IBASE=IBASE+INC1 - JBASE=JBASE+INC2 - 60 CONTINUE - IF (LA.EQ.M) RETURN - LA1=LA+1 - JBASE=JBASE+JUMP - DO 80 K=LA1,M,LA - KB=K+K-2 - KC=KB+KB - C1=TRIGS(KB+1) - S1=TRIGS(KB+2) - C2=TRIGS(KC+1) - S2=TRIGS(KC+2) - DO 70 L=1,LA - I=IBASE - J=JBASE -CDIR$ IVDEP - DO 65 IJK=1,LOT - C(JA+J)=A(IA+I)+(A(IB+I)+A(IC+I)) - D(JA+J)=B(IA+I)+(B(IB+I)+B(IC+I)) - C(JB+J)= - * C1*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))-(SIN60*(B(IB+I)-B(IC+I)))) - * -S1*((B(IA+I)-0.5*(B(IB+I)+B(IC+I)))+(SIN60*(A(IB+I)-A(IC+I)))) - D(JB+J)= - * S1*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))-(SIN60*(B(IB+I)-B(IC+I)))) - * +C1*((B(IA+I)-0.5*(B(IB+I)+B(IC+I)))+(SIN60*(A(IB+I)-A(IC+I)))) - C(JC+J)= - * C2*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))+(SIN60*(B(IB+I)-B(IC+I)))) - * -S2*((B(IA+I)-0.5*(B(IB+I)+B(IC+I)))-(SIN60*(A(IB+I)-A(IC+I)))) - D(JC+J)= - * S2*((A(IA+I)-0.5*(A(IB+I)+A(IC+I)))+(SIN60*(B(IB+I)-B(IC+I)))) - * +C2*((B(IA+I)-0.5*(B(IB+I)+B(IC+I)))-(SIN60*(A(IB+I)-A(IC+I)))) - I=I+INC3 - J=J+INC4 - 65 CONTINUE - IBASE=IBASE+INC1 - JBASE=JBASE+INC2 - 70 CONTINUE - JBASE=JBASE+JUMP - 80 CONTINUE - RETURN -C -C CODING FOR FACTOR 4 -C - 90 IA=1 - JA=1 - IB=IA+IINK - JB=JA+JINK - IC=IB+IINK - JC=JB+JINK - ID=IC+IINK - JD=JC+JINK - DO 100 L=1,LA - I=IBASE - J=JBASE -CDIR$ IVDEP - DO 95 IJK=1,LOT - C(JA+J)=(A(IA+I)+A(IC+I))+(A(IB+I)+A(ID+I)) - C(JC+J)=(A(IA+I)+A(IC+I))-(A(IB+I)+A(ID+I)) - D(JA+J)=(B(IA+I)+B(IC+I))+(B(IB+I)+B(ID+I)) - D(JC+J)=(B(IA+I)+B(IC+I))-(B(IB+I)+B(ID+I)) - C(JB+J)=(A(IA+I)-A(IC+I))-(B(IB+I)-B(ID+I)) - C(JD+J)=(A(IA+I)-A(IC+I))+(B(IB+I)-B(ID+I)) - D(JB+J)=(B(IA+I)-B(IC+I))+(A(IB+I)-A(ID+I)) - D(JD+J)=(B(IA+I)-B(IC+I))-(A(IB+I)-A(ID+I)) - I=I+INC3 - J=J+INC4 - 95 CONTINUE - IBASE=IBASE+INC1 - JBASE=JBASE+INC2 - 100 CONTINUE - IF (LA.EQ.M) RETURN - LA1=LA+1 - JBASE=JBASE+JUMP - DO 120 K=LA1,M,LA - KB=K+K-2 - KC=KB+KB - KD=KC+KB - C1=TRIGS(KB+1) - S1=TRIGS(KB+2) - C2=TRIGS(KC+1) - S2=TRIGS(KC+2) - C3=TRIGS(KD+1) - S3=TRIGS(KD+2) - DO 110 L=1,LA - I=IBASE - J=JBASE -CDIR$ IVDEP - DO 105 IJK=1,LOT - C(JA+J)=(A(IA+I)+A(IC+I))+(A(IB+I)+A(ID+I)) - D(JA+J)=(B(IA+I)+B(IC+I))+(B(IB+I)+B(ID+I)) - C(JC+J)= - * C2*((A(IA+I)+A(IC+I))-(A(IB+I)+A(ID+I))) - * -S2*((B(IA+I)+B(IC+I))-(B(IB+I)+B(ID+I))) - D(JC+J)= - * S2*((A(IA+I)+A(IC+I))-(A(IB+I)+A(ID+I))) - * +C2*((B(IA+I)+B(IC+I))-(B(IB+I)+B(ID+I))) - C(JB+J)= - * C1*((A(IA+I)-A(IC+I))-(B(IB+I)-B(ID+I))) - * -S1*((B(IA+I)-B(IC+I))+(A(IB+I)-A(ID+I))) - D(JB+J)= - * S1*((A(IA+I)-A(IC+I))-(B(IB+I)-B(ID+I))) - * +C1*((B(IA+I)-B(IC+I))+(A(IB+I)-A(ID+I))) - C(JD+J)= - * C3*((A(IA+I)-A(IC+I))+(B(IB+I)-B(ID+I))) - * -S3*((B(IA+I)-B(IC+I))-(A(IB+I)-A(ID+I))) - D(JD+J)= - * S3*((A(IA+I)-A(IC+I))+(B(IB+I)-B(ID+I))) - * +C3*((B(IA+I)-B(IC+I))-(A(IB+I)-A(ID+I))) - I=I+INC3 - J=J+INC4 - 105 CONTINUE - IBASE=IBASE+INC1 - JBASE=JBASE+INC2 - 110 CONTINUE - JBASE=JBASE+JUMP - 120 CONTINUE - RETURN -C -C CODING FOR FACTOR 5 -C - 130 IA=1 - JA=1 - IB=IA+IINK - JB=JA+JINK - IC=IB+IINK - JC=JB+JINK - ID=IC+IINK - JD=JC+JINK - IE=ID+IINK - JE=JD+JINK - DO 140 L=1,LA - I=IBASE - J=JBASE -CDIR$ IVDEP - DO 135 IJK=1,LOT - C(JA+J)=A(IA+I)+(A(IB+I)+A(IE+I))+(A(IC+I)+A(ID+I)) - D(JA+J)=B(IA+I)+(B(IB+I)+B(IE+I))+(B(IC+I)+B(ID+I)) - C(JB+J)=(A(IA+I)+COS72*(A(IB+I)+A(IE+I))-COS36*(A(IC+I)+A(ID+I))) - * -(SIN72*(B(IB+I)-B(IE+I))+SIN36*(B(IC+I)-B(ID+I))) - C(JE+J)=(A(IA+I)+COS72*(A(IB+I)+A(IE+I))-COS36*(A(IC+I)+A(ID+I))) - * +(SIN72*(B(IB+I)-B(IE+I))+SIN36*(B(IC+I)-B(ID+I))) - D(JB+J)=(B(IA+I)+COS72*(B(IB+I)+B(IE+I))-COS36*(B(IC+I)+B(ID+I))) - * +(SIN72*(A(IB+I)-A(IE+I))+SIN36*(A(IC+I)-A(ID+I))) - D(JE+J)=(B(IA+I)+COS72*(B(IB+I)+B(IE+I))-COS36*(B(IC+I)+B(ID+I))) - * -(SIN72*(A(IB+I)-A(IE+I))+SIN36*(A(IC+I)-A(ID+I))) - C(JC+J)=(A(IA+I)-COS36*(A(IB+I)+A(IE+I))+COS72*(A(IC+I)+A(ID+I))) - * -(SIN36*(B(IB+I)-B(IE+I))-SIN72*(B(IC+I)-B(ID+I))) - C(JD+J)=(A(IA+I)-COS36*(A(IB+I)+A(IE+I))+COS72*(A(IC+I)+A(ID+I))) - * +(SIN36*(B(IB+I)-B(IE+I))-SIN72*(B(IC+I)-B(ID+I))) - D(JC+J)=(B(IA+I)-COS36*(B(IB+I)+B(IE+I))+COS72*(B(IC+I)+B(ID+I))) - * +(SIN36*(A(IB+I)-A(IE+I))-SIN72*(A(IC+I)-A(ID+I))) - D(JD+J)=(B(IA+I)-COS36*(B(IB+I)+B(IE+I))+COS72*(B(IC+I)+B(ID+I))) - * -(SIN36*(A(IB+I)-A(IE+I))-SIN72*(A(IC+I)-A(ID+I))) - I=I+INC3 - J=J+INC4 - 135 CONTINUE - IBASE=IBASE+INC1 - JBASE=JBASE+INC2 - 140 CONTINUE - IF (LA.EQ.M) RETURN - LA1=LA+1 - JBASE=JBASE+JUMP - DO 160 K=LA1,M,LA - KB=K+K-2 - KC=KB+KB - KD=KC+KB - KE=KD+KB - C1=TRIGS(KB+1) - S1=TRIGS(KB+2) - C2=TRIGS(KC+1) - S2=TRIGS(KC+2) - C3=TRIGS(KD+1) - S3=TRIGS(KD+2) - C4=TRIGS(KE+1) - S4=TRIGS(KE+2) - DO 150 L=1,LA - I=IBASE - J=JBASE -CDIR$ IVDEP - DO 145 IJK=1,LOT - C(JA+J)=A(IA+I)+(A(IB+I)+A(IE+I))+(A(IC+I)+A(ID+I)) - D(JA+J)=B(IA+I)+(B(IB+I)+B(IE+I))+(B(IC+I)+B(ID+I)) - C(JB+J)= - * C1*((A(IA+I)+COS72*(A(IB+I)+A(IE+I))-COS36*(A(IC+I)+A(ID+I))) - * -(SIN72*(B(IB+I)-B(IE+I))+SIN36*(B(IC+I)-B(ID+I)))) - * -S1*((B(IA+I)+COS72*(B(IB+I)+B(IE+I))-COS36*(B(IC+I)+B(ID+I))) - * +(SIN72*(A(IB+I)-A(IE+I))+SIN36*(A(IC+I)-A(ID+I)))) - D(JB+J)= - * S1*((A(IA+I)+COS72*(A(IB+I)+A(IE+I))-COS36*(A(IC+I)+A(ID+I))) - * -(SIN72*(B(IB+I)-B(IE+I))+SIN36*(B(IC+I)-B(ID+I)))) - * +C1*((B(IA+I)+COS72*(B(IB+I)+B(IE+I))-COS36*(B(IC+I)+B(ID+I))) - * +(SIN72*(A(IB+I)-A(IE+I))+SIN36*(A(IC+I)-A(ID+I)))) - C(JE+J)= - * C4*((A(IA+I)+COS72*(A(IB+I)+A(IE+I))-COS36*(A(IC+I)+A(ID+I))) - * +(SIN72*(B(IB+I)-B(IE+I))+SIN36*(B(IC+I)-B(ID+I)))) - * -S4*((B(IA+I)+COS72*(B(IB+I)+B(IE+I))-COS36*(B(IC+I)+B(ID+I))) - * -(SIN72*(A(IB+I)-A(IE+I))+SIN36*(A(IC+I)-A(ID+I)))) - D(JE+J)= - * S4*((A(IA+I)+COS72*(A(IB+I)+A(IE+I))-COS36*(A(IC+I)+A(ID+I))) - * +(SIN72*(B(IB+I)-B(IE+I))+SIN36*(B(IC+I)-B(ID+I)))) - * +C4*((B(IA+I)+COS72*(B(IB+I)+B(IE+I))-COS36*(B(IC+I)+B(ID+I))) - * -(SIN72*(A(IB+I)-A(IE+I))+SIN36*(A(IC+I)-A(ID+I)))) - C(JC+J)= - * C2*((A(IA+I)-COS36*(A(IB+I)+A(IE+I))+COS72*(A(IC+I)+A(ID+I))) - * -(SIN36*(B(IB+I)-B(IE+I))-SIN72*(B(IC+I)-B(ID+I)))) - * -S2*((B(IA+I)-COS36*(B(IB+I)+B(IE+I))+COS72*(B(IC+I)+B(ID+I))) - * +(SIN36*(A(IB+I)-A(IE+I))-SIN72*(A(IC+I)-A(ID+I)))) - D(JC+J)= - * S2*((A(IA+I)-COS36*(A(IB+I)+A(IE+I))+COS72*(A(IC+I)+A(ID+I))) - * -(SIN36*(B(IB+I)-B(IE+I))-SIN72*(B(IC+I)-B(ID+I)))) - * +C2*((B(IA+I)-COS36*(B(IB+I)+B(IE+I))+COS72*(B(IC+I)+B(ID+I))) - * +(SIN36*(A(IB+I)-A(IE+I))-SIN72*(A(IC+I)-A(ID+I)))) - C(JD+J)= - * C3*((A(IA+I)-COS36*(A(IB+I)+A(IE+I))+COS72*(A(IC+I)+A(ID+I))) - * +(SIN36*(B(IB+I)-B(IE+I))-SIN72*(B(IC+I)-B(ID+I)))) - * -S3*((B(IA+I)-COS36*(B(IB+I)+B(IE+I))+COS72*(B(IC+I)+B(ID+I))) - * -(SIN36*(A(IB+I)-A(IE+I))-SIN72*(A(IC+I)-A(ID+I)))) - D(JD+J)= - * S3*((A(IA+I)-COS36*(A(IB+I)+A(IE+I))+COS72*(A(IC+I)+A(ID+I))) - * +(SIN36*(B(IB+I)-B(IE+I))-SIN72*(B(IC+I)-B(ID+I)))) - * +C3*((B(IA+I)-COS36*(B(IB+I)+B(IE+I))+COS72*(B(IC+I)+B(ID+I))) - * -(SIN36*(A(IB+I)-A(IE+I))-SIN72*(A(IC+I)-A(ID+I)))) - I=I+INC3 - J=J+INC4 - 145 CONTINUE - IBASE=IBASE+INC1 - JBASE=JBASE+INC2 - 150 CONTINUE - JBASE=JBASE+JUMP - 160 CONTINUE - RETURN - END -C ALTERNATE NAME - SUBROUTINE RFFTMLT(A,WORK,TRIGS,IFAX,INC,JUMP,N,LOT,ISIGN) - DIMENSION A(N),WORK(N),TRIGS(N),IFAX(1) - CALL FFT991(A,WORK,TRIGS,IFAX,INC,JUMP,N,LOT,ISIGN) - END diff --git a/sorc/relocate_mv_nvortex.fd/landcmsk.f b/sorc/relocate_mv_nvortex.fd/landcmsk.f deleted file mode 100755 index 7256bd51cf..0000000000 --- a/sorc/relocate_mv_nvortex.fd/landcmsk.f +++ /dev/null @@ -1,39 +0,0 @@ - subroutine landcmsk(IK,JK,GLON,GLAT,ZDATG,IFLAG,lsflag,kst) -cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -c -cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -c parameter (IK=384,JK=190,ijdim=IK*JK,NSG=24000,NST=10) - parameter (NSG=54000,NST=10) - DIMENSION ZDATG(IK,JK),GLON(IK,JK),GLAT(IK,JK) - DIMENSION ING(NSG),JNG(NSG) - CHARACTER ST_NAME(NST)*3 - COMMON /TR/ING,JNG,IB - COMMON /NHC2/MDX,MDY - COMMON /NHC3/AMDX,AMDY - COMMON /STNAME/ST_NAME - COMMON /CHEN/KUNIT,ITIM -c - lsflag = 1 - - DO I = 1,IB - IW = ING(I) - JW = JNG(I) - IF(ZDATG(IW,JW).gt.500.)then - iflag = 1 -cnew MDX=0 -cnew MDY=0 -cnew AMDX=0. -cnew AMDY=0. - write(6,*)' Filter domain topography height > 500 m' - 1 ,', storm name = ', ST_NAME(KST), - 2 ', forecast time = ',ITIM,'h', - 3 ', only wind field is relocated' - go to 50 - END IF - END DO - - 50 continue - - - end - diff --git a/sorc/relocate_mv_nvortex.fd/makefile b/sorc/relocate_mv_nvortex.fd/makefile deleted file mode 100755 index bd8c3725b6..0000000000 --- a/sorc/relocate_mv_nvortex.fd/makefile +++ /dev/null @@ -1,37 +0,0 @@ -SHELL= /bin/sh - -##LIBDIR= /contrib/nceplibs/nwprod/lib -##LIBS_REL= -L$(LIBDIR) -lw3nco_v2.0.6_4 -lsigio_v1.0.1_4 -lbacio_v2.0.1_4 /contrib/nceplibs/dev/lib/libsp_v2.0.2_d-12.0.a -##LIBS_SIG= $(LIBDIR)/incmod/sigio_v1.0.1 - -SRCS= modules.f mv_nvortex.f BOUND.f sig_p_convt1.f SEPAR.f \ - WNLIT.f FDUMP.f H12.f I1MACH.f J4SAVE.f XGETUA.f WNLSM.f \ - WNNLS.f XERABT.f XERCTL.f XERPRT.f XERROR.f XERRWV.f XERSAV.f\ - srotm.f srotmg.f amatrix.f rodist.f landcmsk.f w3tagb.f - -OBJS= modules.o mv_nvortex.o BOUND.o sig_p_convt1.o SEPAR.o \ - WNLIT.o FDUMP.o H12.o I1MACH.o J4SAVE.o XGETUA.o WNLSM.o \ - WNNLS.o XERABT.o XERCTL.o XERPRT.o XERROR.o XERRWV.o XERSAV.o \ - srotm.o srotmg.o amatrix.o rodist.o landcmsk.o w3tagb.o - -##FC = ifort - -CMD = relocate_mv_nvortex - -##FFLAGS= -openmp -O3 -g -traceback -r8 -I ${LIBS_SIG} -LDFLAGS= -mkl -lmpi -openmp - -all: $(CMD) - -$(CMD): $(OBJS) - $(FC) $(FFLAGS) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS_REL) - -clean: - -rm -f *.o *.mod - -clobber: clean - -rm -f $(CMD) $(CMD).prof - -install: - mv $(CMD) ../../exec/$(CMD) - diff --git a/sorc/relocate_mv_nvortex.fd/makefile_cray b/sorc/relocate_mv_nvortex.fd/makefile_cray deleted file mode 100755 index dab4eaeb7e..0000000000 --- a/sorc/relocate_mv_nvortex.fd/makefile_cray +++ /dev/null @@ -1,38 +0,0 @@ -SHELL= /bin/sh - -##LIBDIR= /contrib/nceplibs/nwprod/lib -##LIBS_REL= -L$(LIBDIR) -lw3nco_v2.0.6_4 -lsigio_v1.0.1_4 -lbacio_v2.0.1_4 /contrib/nceplibs/dev/lib/libsp_v2.0.2_d-12.0.a -##LIBS_SIG= $(LIBDIR)/incmod/sigio_v1.0.1 - -SRCS= modules.f mv_nvortex.f BOUND.f sig_p_convt1.f SEPAR.f \ - WNLIT.f FDUMP.f H12.f I1MACH.f J4SAVE.f XGETUA.f WNLSM.f \ - WNNLS.f XERABT.f XERCTL.f XERPRT.f XERROR.f XERRWV.f XERSAV.f\ - srotm.f srotmg.f amatrix.f rodist.f landcmsk.f w3tagb.f - -OBJS= modules.o mv_nvortex.o BOUND.o sig_p_convt1.o SEPAR.o \ - WNLIT.o FDUMP.o H12.o I1MACH.o J4SAVE.o XGETUA.o WNLSM.o \ - WNNLS.o XERABT.o XERCTL.o XERPRT.o XERROR.o XERRWV.o XERSAV.o \ - srotm.o srotmg.o amatrix.o rodist.o landcmsk.o w3tagb.o - -##FC = ifort - -CMD = relocate_mv_nvortex - -##FFLAGS= -openmp -O3 -g -traceback -r8 -I ${LIBS_SIG} -#LDFLAGS= -mkl --openmp -LDFLAGS= -openmp - -all: $(CMD) - -$(CMD): $(OBJS) - $(FC) $(FFLAGS) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS_REL) - -clean: - -rm -f *.o *.mod - -clobber: clean - -rm -f $(CMD) $(CMD).prof - -install: - mv $(CMD) ../../exec/$(CMD) - diff --git a/sorc/relocate_mv_nvortex.fd/makefile_theia b/sorc/relocate_mv_nvortex.fd/makefile_theia deleted file mode 100755 index c1679c532b..0000000000 --- a/sorc/relocate_mv_nvortex.fd/makefile_theia +++ /dev/null @@ -1,38 +0,0 @@ -SHELL= /bin/sh - -##LIBDIR= /contrib/nceplibs/nwprod/lib -##LIBS_REL= -L$(LIBDIR) -lw3nco_v2.0.6_4 -lsigio_v1.0.1_4 -lbacio_v2.0.1_4 /contrib/nceplibs/dev/lib/libsp_v2.0.2_d-12.0.a -##LIBS_SIG= $(LIBDIR)/incmod/sigio_v1.0.1 - -SRCS= modules.f mv_nvortex.f BOUND.f sig_p_convt1.f SEPAR.f \ - WNLIT.f FDUMP.f H12.f I1MACH.f J4SAVE.f XGETUA.f WNLSM.f \ - WNNLS.f XERABT.f XERCTL.f XERPRT.f XERROR.f XERRWV.f XERSAV.f\ - srotm.f srotmg.f amatrix.f rodist.f landcmsk.f w3tagb.f - -OBJS= modules.o mv_nvortex.o BOUND.o sig_p_convt1.o SEPAR.o \ - WNLIT.o FDUMP.o H12.o I1MACH.o J4SAVE.o XGETUA.o WNLSM.o \ - WNNLS.o XERABT.o XERCTL.o XERPRT.o XERROR.o XERRWV.o XERSAV.o \ - srotm.o srotmg.o amatrix.o rodist.o landcmsk.o w3tagb.o - -##FC = ifort - -CMD = relocate_mv_nvortex - -##FFLAGS= -openmp -O3 -g -traceback -r8 -I ${LIBS_SIG} -#LDFLAGS= -mkl -lmpi -openmp -LDFLAGS= -mkl -mt_mpi -openmp - -all: $(CMD) - -$(CMD): $(OBJS) - $(FC) $(FFLAGS) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS_REL) - -clean: - -rm -f *.o *.mod - -clobber: clean - -rm -f $(CMD) $(CMD).prof - -install: - mv $(CMD) ../../exec/$(CMD) - diff --git a/sorc/relocate_mv_nvortex.fd/makefile_wcoss b/sorc/relocate_mv_nvortex.fd/makefile_wcoss deleted file mode 100755 index bd8c3725b6..0000000000 --- a/sorc/relocate_mv_nvortex.fd/makefile_wcoss +++ /dev/null @@ -1,37 +0,0 @@ -SHELL= /bin/sh - -##LIBDIR= /contrib/nceplibs/nwprod/lib -##LIBS_REL= -L$(LIBDIR) -lw3nco_v2.0.6_4 -lsigio_v1.0.1_4 -lbacio_v2.0.1_4 /contrib/nceplibs/dev/lib/libsp_v2.0.2_d-12.0.a -##LIBS_SIG= $(LIBDIR)/incmod/sigio_v1.0.1 - -SRCS= modules.f mv_nvortex.f BOUND.f sig_p_convt1.f SEPAR.f \ - WNLIT.f FDUMP.f H12.f I1MACH.f J4SAVE.f XGETUA.f WNLSM.f \ - WNNLS.f XERABT.f XERCTL.f XERPRT.f XERROR.f XERRWV.f XERSAV.f\ - srotm.f srotmg.f amatrix.f rodist.f landcmsk.f w3tagb.f - -OBJS= modules.o mv_nvortex.o BOUND.o sig_p_convt1.o SEPAR.o \ - WNLIT.o FDUMP.o H12.o I1MACH.o J4SAVE.o XGETUA.o WNLSM.o \ - WNNLS.o XERABT.o XERCTL.o XERPRT.o XERROR.o XERRWV.o XERSAV.o \ - srotm.o srotmg.o amatrix.o rodist.o landcmsk.o w3tagb.o - -##FC = ifort - -CMD = relocate_mv_nvortex - -##FFLAGS= -openmp -O3 -g -traceback -r8 -I ${LIBS_SIG} -LDFLAGS= -mkl -lmpi -openmp - -all: $(CMD) - -$(CMD): $(OBJS) - $(FC) $(FFLAGS) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS_REL) - -clean: - -rm -f *.o *.mod - -clobber: clean - -rm -f $(CMD) $(CMD).prof - -install: - mv $(CMD) ../../exec/$(CMD) - diff --git a/sorc/relocate_mv_nvortex.fd/makefile_wcoss_dell_p3 b/sorc/relocate_mv_nvortex.fd/makefile_wcoss_dell_p3 deleted file mode 100755 index 7cc284ef0c..0000000000 --- a/sorc/relocate_mv_nvortex.fd/makefile_wcoss_dell_p3 +++ /dev/null @@ -1,37 +0,0 @@ -SHELL= /bin/sh - -##LIBDIR= /contrib/nceplibs/nwprod/lib -##LIBS_REL= -L$(LIBDIR) -lw3nco_v2.0.6_4 -lsigio_v1.0.1_4 -lbacio_v2.0.1_4 /contrib/nceplibs/dev/lib/libsp_v2.0.2_d-12.0.a -##LIBS_SIG= $(LIBDIR)/incmod/sigio_v1.0.1 - -SRCS= modules.f mv_nvortex.f BOUND.f sig_p_convt1.f SEPAR.f \ - WNLIT.f FDUMP.f H12.f I1MACH.f J4SAVE.f XGETUA.f WNLSM.f \ - WNNLS.f XERABT.f XERCTL.f XERPRT.f XERROR.f XERRWV.f XERSAV.f\ - srotm.f srotmg.f amatrix.f rodist.f landcmsk.f w3tagb.f - -OBJS= modules.o mv_nvortex.o BOUND.o sig_p_convt1.o SEPAR.o \ - WNLIT.o FDUMP.o H12.o I1MACH.o J4SAVE.o XGETUA.o WNLSM.o \ - WNNLS.o XERABT.o XERCTL.o XERPRT.o XERROR.o XERRWV.o XERSAV.o \ - srotm.o srotmg.o amatrix.o rodist.o landcmsk.o w3tagb.o - -FC = mpiifort - -CMD = relocate_mv_nvortex - -##FFLAGS= -openmp -O3 -g -traceback -r8 -I ${LIBS_SIG} -LDFLAGS= -mkl -lmpi -qopenmp - -all: $(CMD) - -$(CMD): $(OBJS) - $(FC) $(FFLAGS) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS_REL) - -clean: - -rm -f *.o *.mod - -clobber: clean - -rm -f $(CMD) $(CMD).prof - -install: - mv $(CMD) ../../exec/$(CMD) - diff --git a/sorc/relocate_mv_nvortex.fd/modules.f b/sorc/relocate_mv_nvortex.fd/modules.f deleted file mode 100755 index 92b6d910e5..0000000000 --- a/sorc/relocate_mv_nvortex.fd/modules.f +++ /dev/null @@ -1,6 +0,0 @@ - module setparms - integer :: real_single, real_double - integer :: int_single, int_double - parameter (real_single = 4, real_double = real_single * 2) - parameter (int_single = 4, int_double = int_single * 2) - end module setparms diff --git a/sorc/relocate_mv_nvortex.fd/mv_nvortex.f b/sorc/relocate_mv_nvortex.fd/mv_nvortex.f deleted file mode 100644 index 712855531c..0000000000 --- a/sorc/relocate_mv_nvortex.fd/mv_nvortex.f +++ /dev/null @@ -1,3848 +0,0 @@ -C$$$ MAIN PROGRAM DOCUMENTATION BLOCK -C -C MAIN PROGRAM: RELOCATE_MV_NVORTEX -C PROGMMR: QINGFU LIU ORG: NP23 DATE: 2013-03-15 -C -C ABSTRACT: RELOCATES HURRICANE VORTEX IN GLOBAL MODEL. -C THIS PROGRAM CONTAINS THE FOLLOWING STEPS: -C 1) CONVERTS THE GLOBAL SPECTRAL COEFS TO GAUSSIAN GRID -C AND DEFINES A 40x40 DEG AREAS AROUND THE REPORTED HURRICANES. -C 2) USING GFDL PROCEDURE SEPARATES THE HURRICANE DISTURBANCE FROM -C THE ENVIRONMENTAL FIELD AND MOVE THE HURRICANE DISTURBANCE TO -C THE OBSERVATIONAL LOCATION. -C 3) CONVERTS THE GAUSSIAN GRID TO GLOBAL SPECTRAL COEFS. -C -C PROGRAM HISTORY LOG: -C 2000-04-25 QINGFU LIU -C 2000-06-14 DENNIS KEYSER -- ADDED CALLS TO W3TAGB AND W3TAGE -C AND CALLS TO ERREXIT FOR NON-ZERO STOP CONDITIONS. -C 2005 Mark Iredell -- Generailzed to sigma-P coordinate -C 2007-10-01 S. Moorthi -- include enthalpy and more prognostic variables -C 2010-09-01 Fanglin Yang -- add threading -C 2012 J. Woollen -- converted to MPI in order to process multiple -C backgrouds in the same run -C 2012-12-01 J. Woollen -- transitioned to WCOSS -C 2013-03-15 D. Stokes -- added/modified some informational print or write -C statements to aid tracing of the output stream. -C 2014-02-10 James Taft -- Speed up the excutable: -C provide a new SPLIB, and also initialize the -C working array wk_s1 with a threading initialization. -C 2014-02-10 Eugene Mirvis -- add threading to the makefile -C 2014-03-20 Qingfu Liu -- Reduce memory usage and speed up the code: -C Remove some working arrays, and change a few working -C arrays from real(8) to real(4). Increase the size of some working -C arrays to accommodate high resolution model. -C -C USAGE: -C INPUT FILES: -C -C UNIT 11 THE CURRENT TC VITAL FILE -C UNIT 20 THE SIGMA FILE AT TIME t-3 -C UNIT 21 THE SIGMA FILE AT (CURRENT) TIME t -C UNIT 22 THE SIGMA FILE AT TIME t+3 -C UNIT 30 MODEL VORTEX CENTER LOCATION AT TIME t-3,t,t+3 -C -C SUBPROGRAMS CALLED: -C UNIQUE - modules BOUND_QLIU fft99 sig_p_convt1 -C SEPAR_QLIU WNLIT FDUMP H12 -C I1MACH J4SAVE XGETUA WNLSM -C WNNLS XERABT XERCTL XERPRT -C XERROR XERRWV XERSAV srotm -C srotmg rodist_qliu amatrix_qliu -C LIBRARY: -C W3LIB - W3TAGB W3TAGE ERREXIT -C -C -C EXIT STATES: -C COND = 0 - SUCCESSFUL RUN -C COND = 56 - NO TC VITAL DATA (OR TC VITAL IS EMPTY) -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C LANGUAGE: FORTRAN 90 -C MACHINE: IBM-SP -C -C$$$ -C -C234567890123456789012345678901234567890123456789012345678901234567890 -C - - PROGRAM RELOCATE_MV_NVORTEX - - use sigio_module - use nemsio_module - use nemsio_gfs - - integer, parameter :: IRX=41, JRX=41, NST=10 - - COMMON/SMTH/ CLAT,CLON - COMMON/CNT/ SLON,SLAT - COMMON /NHC/ KSTM,IC_N(NST),JC_N(NST) - COMMON /NHC1/SLON_N(NST),SLAT_N(NST),CLON_N(NST),CLAT_N(NST) - - COMMON /HDAT1/NWRT1,NRED1,NWT1 - COMMON /HDAT3/NWRT2,NRED2 -C ! NST is the max storm num - CHARACTER ST_NAME(NST)*3,TCVT(NST)*95 - COMMON /STNAME/ST_NAME - COMMON /TCVIT/TCVT - COMMON /CHEN/KUNIT,ITIM,NTIM - - REAL, ALLOCATABLE :: GLAT(:),GLON(:) - REAL, ALLOCATABLE :: COLRAD(:),WGT(:),WGTCS(:),RCS2(:) - - REAL, ALLOCATABLE :: PSL(:,:),PS2(:),PS3(:,:) - REAL, ALLOCATABLE :: ZG(:,:),PSFC(:,:),PSLB(:,:),T00(:,:) - -! REAL, ALLOCATABLE :: HDAT(:,:,:,:),HDATA(:,:,:),PDAT(:,:,:) - REAL, ALLOCATABLE :: HDAT(:,:,:,:),PDAT(:,:,:) - REAL(4),ALLOCATABLE :: HDATA(:,:,:) - - REAL(4),ALLOCATABLE :: WRK1_4(:,:,:), WRK2_4(:,:,:,:) - REAL, ALLOCATABLE :: WORK_8(:) - REAL, ALLOCATABLE :: WK_S1(:,:),WK_G1(:,:,:) - REAL(4),ALLOCATABLE :: WK_G(:,:,:),WK_G2(:,:,:) - REAL, ALLOCATABLE :: WR_S1(:),WR_S2(:) - REAL, ALLOCATABLE :: WR_G1(:,:),WR_G2(:,:) - REAL, ALLOCATABLE :: U8501(:,:),V8501(:,:) - - REAL(4),ALLOCATABLE :: SLREF(:),VCRD(:,:), tref(:) - REAL(4),ALLOCATABLE :: cpi(:), vcrd4(:,:,:) - - integer * 4 iret, iret1, irets, imjm4, km4, idvm, ntrac - integer * 4 idvc, idsl, nvcd - integer * 4 idrt, idate7(7) - integer * 4 nfhour,nfminute,nfsecondn,nfsecondd - integer inptyp - integer * 4 dimx, dimy, dimz - integer iunit, mtv, mtv1, mtv2, mtv3, maxwv, maxwv2 - integer imax, jmax, mwave, kmax, maxwv22 - real, allocatable :: thref(:),tki(:,:),pdn(:,:),pup(:,:) - real, allocatable :: pupk(:,:),pdnk(:,:) - real,parameter :: p0=100000.0,p0i=1.0/p0,zero4=0.0, - & rkappa=2.8705e+2/1.0046e+3, - & rk=rkappa, rk1=rk+1.0, rkr=1.0/rk - real tkrt0,xcp,sumq - integer i,k - integer BKGFREQ - character*30 flname - - REAL(4) PSREF(1) - - REAL STRPSF(NST) - -! real(8) get_memory,xmem - - REAL(4) FHOUR -! REAL(4) FHOUR,DUMMY(245) -! REAL DUMMY8(245) - -! CHARACTER*8 LAB(4) - DIMENSION IDATE(4) - - CHARACTER cfile*7,kfile*7,ciunit*2,ckunit*2 - character(80) parm,outp - logical nopdpvv - -! COMMON /COEF1/LAB -! COMMON /COEF2/IDATE -! COMMON /COEF3/FHOUR,DUMMY -! COMMON /COEF3/nvcd,idvc,idsl,vcrd -! COMMON /COEF5/NCNT,NCNT2 - - - type(sigio_head) head - type(sigio_data):: data1 - - type(nemsio_gfile) :: gfile - type(nemsio_head) :: ghead - type(nemsio_headv) :: gheadv - type(nemsio_data) :: gdata - - include "mpif.h" - -!-------------------------------------------------------------------------- - call mpi_init(ierr) - call mpi_comm_rank(MPI_COMM_WORLD,myid,ierr) - call mpi_comm_size(MPI_COMM_WORLD,nprc,ierr) - write(parm,'("parm.",i1)')myid; open(5,file=parm) - write(outp,'("stdo.",i1)')myid; open(6,file=outp,recl=132) - read(5,*) itim,imax,jmax,BKGFREQ -!-------------------------------------------------------------------------- - - CALL W3TAGB('RELOCATE_MV_NVORTEX',2013,0074,0000,'NP23') - -! the following are prints rather than write statements to send the info to stdout. -! writes to unit 6 will be diverted to individual files for each process. - if(myid.eq.0)then - print '(/,a,a)','*** A single call to this MPI version of ' - $ ,'relocate_mv_nvortex spawns multiple processes.' - print '(a,a,/)','*** W3TAGB/E are called for each ' - $ ,'background field to be processed.' - endif - print '(a,i0,a,i0,a,i0/a,a,i0,a/)', - $ 'In task ',myid,' of relocate_mv_nvortex for fhr ',itim - $ ,', writes to unit 6 are being diverted to file stdo.',myid - $ ,'Select output from w3tagb/e (start/end times and resource ' - $ ,'stats) may be diverted to file stdo.',myid - $ ,' or stdout, depending on the version of w3tagb/e used.' -! end block of informational print statements - - WRITE(6,*) '===> WELCOME TO RELOCATE_MV_NVORTEX - MPI VERSION ', - $ '02-22-2013' - write(6,*)' ' - write(6,*)' FORECAST HOUR= ', ITIM - write(6,*)' IMAX, JMAX= ', IMAX,JMAX - write(6,*)' ' - write(6,'(a,a,/)') 'Informational output from multiple storms ' - $ ,'relocated for one background field might be interspersed' - - if ( BKGFREQ == 1 ) then - NTIM = 7 - IUNIT = 19+ITIM-2 - else if ( BKGFREQ == 3 ) then - NTIM = 3 - IUNIT = 19+ITIM/3 - endif - KUNIT = 50+ITIM - - NRED1 = 0 - NWRT1 = 0 - NRED2 = 0 - NWRT2 = 0 - - write(ciunit,'(I2)')iunit - cfile='fort.'//ciunit - - write(ckunit,'(I2)')KUNIT - kfile='fort.'//ckunit - -! write(6,*)cfile,kfile - - call nemsio_init() - - call sigio_sropen(IUNIT,cfile,iret) - call sigio_srhead(IUNIT,head,iret) - - inptyp = 1 ! default - - if (iret == 0) then - inptyp = 2 ! Spectral GFS input file - - call sigio_swopen(KUNIT,kfile,iret) - call sigio_swhead(KUNIT,head,iret) - - call sigio_aldata(head,data1,iret) - call sigio_srdata(IUNIT,head,data1,iret) - if (iret.ne.0) write(6,*)'sigio_srdata failed,iret=',iret -! - idvc = head%idvc !idvc=2 for hybrid, idvc=1 for sigma files - idsl = head%idsl - idvm = head%idvm - ntrac = head%ntrac - - MWAVE = head%jcap - KMAX = head%levs - latb = head%latb - lonb = head%lonb - IDATE = head%idate - FHOUR = head%fhour - - write(6,*)' idvm= ', idvm - write(6,*)' LONB, LATB, KMAX, MWAVE= ', LONB,LATB,KMAX,MWAVE - if(imax<=lonb.or.jmax<=latb) then - imax=lonb;jmax=latb - write(6,*),'imax,jmax reset to sigma header values=',imax,jmax - endif - - if (mod(idvm/10,10) == 3 .and. idvc == 3) then - allocate ( cpi(ntrac+1) ) - cpi = head%cpi - endif - - nvcd=head%nvcoord - allocate ( vcrd(KMAX+1,nvcd) ) - vcrd=head%vcoord - - print*,' complete reading data, inptyp=', inptyp - - else - - nopdpvv=.true. - call nemsio_gfsgrd_open(gfile,trim(cfile),'read',nopdpvv, - & ghead,gheadv,iret=ios) - print *,'in mv_relocat,nemsio file,',trim(cfile),' ios=',ios - if (ios == 0) then - inptyp = 1 ! nemsio GFS input file - else - if (ios /= 0) print *,'nemsio_open failed,ios=',ios - endif - - print *,'dim=',ghead%dimx,ghead%dimy,ghead%dimz, - & ghead%ntrac,'nrec=',ghead%nrec - - print *,'datatype=',ghead%gdatatype - print *,'recname=',gheadv%recname(1:3) - - idsl=ghead%idsl - mwave=ghead%jcap - idvm=ghead%idvm - if (mod(idvm,10)==2)idvm=11 - ntrac=ghead%ntrac - idvc=ghead%idvc - if(imax<=ghead%dimx.or.jmax<=ghead%dimy) then - imax=ghead%dimx;jmax=ghead%dimy - write(6,*),'imax,jmax reset to header values=',imax,jmax - endif - kmax=ghead%dimz - idate7=ghead%IDATE - NFHOUR=ghead%NFHOUR - NFMINUTE=ghead%NFMINUTE - NFSECONDN=ghead%NFSECONDN - NFSECONDD=ghead%NFSECONDD - idate(1)=idate7(4) - idate(2:3)=idate7(2:3) - idate(4)=idate7(1) - print *,'in mv_nreloc,idsl=',idsl,'nwave=',mwave,'idvm=',idvm, - & 'idvc=',idvc,'ntrac=',ntrac,'kmax=',kmax,'idate=',idate - - allocate ( vcrd4(kmax+1,3,2) ) - allocate ( cpi(ntrac+1) ) - call nemsio_getfilehead(gfile,iret=iret,vcoord=vcrd4,cpi=cpi) -! - FHOUR=real(NFHOUR,8)+real(NFMINUTE/60.,8)+ - & real(nfsecondn*1./(nfsecondd*360.),8) - print *,' idate=',idate(:),' fhour=',fhour,nfhour,nfminute, - & nfsecondn,nfsecondd,'idrt=',ghead%idrt,'cpi=',cpi -! - print*,'test QL' - NVCD=3 - vcrd3_max=0. - vcrd3_min=0. - vcrd2_max=0. - vcrd2_min=0. - do k=1,kmax+1 - print*,'k,vcrd4=',vcrd4(k,3,1),vcrd4(k,2,1) - if(vcrd3_max.lt.vcrd4(k,3,1))vcrd3_max=vcrd4(k,3,1) - if(vcrd3_min.gt.vcrd4(k,3,1))vcrd3_min=vcrd4(k,3,1) - if(vcrd2_max.lt.vcrd4(k,2,1))vcrd2_max=vcrd4(k,2,1) - if(vcrd2_min.gt.vcrd4(k,2,1))vcrd2_min=vcrd4(k,2,1) - end do - - print*,'max,min=',vcrd3_max,vcrd3_min,vcrd2_max,vcrd2_min - - IF(abs(vcrd3_max).lt.1.e-10.and.abs(vcrd3_min).lt.1.e-10) - & then - NVCD=2 - ELSEIF(abs(vcrd2_max).lt.1.e-10.and. - & abs(vcrd2_min).lt.1.e-10)then - NVCD=1 - ENDIF - - print*,' NVCD=',NVCD - - allocate ( vcrd(KMAX+1,nvcd) ) - vcrd(:,:)=vcrd4(1:KMAX+1,1:nvcd,1) -! vcrd(1:KMAX+1,1:nvcd)=vcrd4(1:KMAX+1,1:nvcd,1) -!read data - print*,' start reading data' - - call nemsio_gfs_algrd(imax,jmax,kmax,ntrac,gdata,nopdpvv) - call nemsio_gfs_rdgrd(gfile,gdata,iret=ios) - - print*,' complete reading data, inptyp=', inptyp - - endif - - WRITE(6,210) (IDATE(I),I=1,4),FHOUR -c 1 ,(DUMMY(K),K=1,2*KMAX+1) -210 FORMAT(5X,' INPUT DATE AND FCST HOUR ',4I5,F7.1/(2X,G13.6)) - - MAXWV=(MWAVE+1)*(MWAVE+2)/2 - MAXWV2=2*MAXWV - MAXWV22=MAXWV2+1 - - JHF=JMAX/2 - -! MTV = KMAX*(3+ntrac) + 2 - MTV = KMAX*4 + 2 - MTV1 = KMAX*5 + 2 - MTV2 = KMAX*6 + 3 - MTV3 = (2*KMAX+1)*6 + 3 - - ALLOCATE ( GLAT(JMAX),GLON(IMAX),T00(IMAX,JMAX) ) - ALLOCATE ( COLRAD(JHF), WGT(JHF),WGTCS(JHF),RCS2(JHF) ) - ALLOCATE ( ZG(IMAX,JMAX),PSFC(IMAX,JMAX),PSLB(IMAX,JMAX) ) - ALLOCATE ( PSL(IMAX,JMAX),PS2(MAXWV2),PS3(IMAX,JMAX) ) - - if(inptyp==2) then - ALLOCATE ( WORK_8(MAXWV22) ) - ALLOCATE ( WR_S1(MAXWV2),WR_S2(MAXWV2) ) - ALLOCATE ( WK_S1(MAXWV2,KMAX) ) -c$omp parallel do - do k=1,kmax - do i=1,maxwv2 - wk_s1(i,k)=0.0 - enddo - enddo - end if - T00=0. - - ALLOCATE ( WK_G1(IMAX,JMAX,KMAX) ) - ALLOCATE ( WK_G(IMAX,JMAX,KMAX),WK_G2(IMAX,JMAX,KMAX) ) - ALLOCATE ( WR_G1(IMAX,JMAX),WR_G2(IMAX,JMAX) ) - ALLOCATE ( U8501(IMAX,JMAX),V8501(IMAX,JMAX) ) - - ALLOCATE ( SLREF(KMAX), TREF(KMAX) ) - - ALLOCATE ( HDAT(IRX,JRX,MTV2,NST) ) - ALLOCATE ( HDATA(IMAX,JMAX,MTV) ) - ALLOCATE ( PDAT(IRX,JRX,MTV3) ) - - CALL GLATS(JHF,COLRAD,WGT,WGTCS,RCS2) - - PI = ASIN(1.)*2 - RDR = 180./PI -! - DO LL = 1,JHF - LLS = JMAX+1 - LL - GLAT(LL) = 90. - COLRAD(LL)*RDR - GLAT(LLS) = -GLAT(LL) - ENDDO - -! DO LL=1,JMAX -! write(6,*)'GLAT(LL)=',LL,GLAT(LL) -! END DO -! - DLN = 360.0/FLOAT(IMAX) - DO LN = 1,IMAX - GLON(LN) = (LN-1) * DLN - ENDDO - - PSREF = 1.E5 - tref = 270.0 - - CALL sigio_modpr(1,1,KMAX,nvcd,idvc,idsl,vcrd,iret, - & ps=PSREF,t=tref,pm=SLREF) - - SLREF = SLREF/1.E5 - - do k=1,kmax - write(6,*)'k,SLREF=',k,SLREF(k) - end do - - CALL HURR_MESS(IMAX,JMAX,GLON,GLAT,STRPSF) - -!------ for sigio file: -! - if (inptyp == 2) then - - DO NW=1,MAXWV2 - WORK_8(NW) = data1%hs(NW) - END DO - call SPTEZ(0,MWAVE,4,IMAX,JMAX,WORK_8,WK_G1(1,1,1),+1) - - WR_G1(:,:)=WK_G1(:,:,1) - print *,'hgt=',maxval(WR_G1),minval(WR_G1),WR_G1(1,1) - - elseif (inptyp == 1) then - -! wk_G1(:,:,1) = gdata%zs(1:IMAX,1:JMAX)/9.8 - wk_G1(:,:,1) = gdata%zs(1:IMAX,1:JMAX) - call maxmin(wk_G1(1,1,1),IMAX*JMAX,1,1,1,'zs in gbl') - - WR_G1(:,:)=WK_G1(:,:,1) - print *,'hgt=',maxval(WR_G1),minval(WR_G1),WR_G1(1,1) - - endif - - CALL SPC2G(IMAX,JMAX,GLON,GLAT,ZG,PSFC,PSLB,T00, - 1 MTV,MTV2,HDAT,HDATA,WK_G1(1,1,1),1,idvm) - - if (inptyp == 2) then - - DO NW=1,MAXWV2 - WORK_8(NW) = data1%ps(NW) - END DO - call SPTEZ(0,MWAVE,4,IMAX,JMAX,WORK_8,WK_G1(1,1,1),+1) - - WR_G1(:,:)=WK_G1(:,:,1) - print *,'pres=',maxval(WR_G1),minval(WR_G1),WR_G1(1,1) - - elseif (inptyp == 1) then - -! if (mod(idvm,10)==2)then -! wk_G1(:,:,1)=gdata%ps(1:IMAX,1:JMAX)*0.001 -! else - wk_G1(:,:,1) = LOG(gdata%ps(1:IMAX,1:JMAX)*0.001) -! end if - - WR_G1(:,:)=WK_G1(:,:,1) - print *,'pres=',maxval(WR_G1),minval(WR_G1),WR_G1(1,1) - print *,'pres2=',maxval(gdata%ps), - & minval(gdata%ps),gdata%ps(1,1) - - end if -! - CALL SPC2G(IMAX,JMAX,GLON,GLAT,ZG,PSFC,PSLB,T00, - 1 MTV,MTV2,HDAT,HDATA,WK_G1(1,1,1),2,idvm) - -! write(6,*)' after SPC2G for PSFC' - - if (inptyp == 2) then - - DO K=1,KMAX - DO NW=1,MAXWV2 - WK_S1(NW,K) = data1%t(NW,k) - END DO - END DO - - CALL SPTEZM(0,MWAVE,4,IMAX,JMAX,KMAX,WK_S1,WK_G1,+1) - - DO K=1,KMAX - WR_G1(:,:)=WK_G1(:,:,K) - print *,'K,tmp= ',K,maxval(WR_G1),minval(WR_G1),WR_G1(1,1) - END DO - - WK_G(:,:,:)=WK_G1(:,:,:) - DO K=1,KMAX - DO NW=1,MAXWV2 - WK_S1(NW,K) = data1%q(NW,K,1) - END DO - END DO - - CALL SPTEZM(0,MWAVE,4,IMAX,JMAX,KMAX,WK_S1,WK_G1,+1) - - WK_G2(:,:,:)=WK_G1(:,:,:) - - if (mod(idvm/10,10) == 3 .and. idvc == 3) then - - ALLOCATE ( WRK1_4(IMAX,JMAX,KMAX) ) - ALLOCATE ( WRK2_4(IMAX,JMAX,KMAX,ntrac) ) - - do nt=2,ntrac - DO K=1,KMAX - DO NW=1,MAXWV2 - WK_S1(NW,K) = data1%q(NW,K,nt) - END DO - ENDDO - CALL SPTEZM(0,MWAVE,4,IMAX,JMAX,KMAX,WK_S1,WK_G1,+1) - wrk2_4(:,:,:,nt) = wk_g1 - ENDDO - imjm4 = imax*jmax ; km4 = kmax - -! write(6,*)' imjm4=',imjm4,' km4=',km4,' ntrac=',ntrac -! &,' cpi=',head%cpi - wrk1_4 = wk_g - wrk2_4(:,:,:,1) = wk_g2 - -! write(6,*)' bef cnvtdv wrk1_4=',wrk1_4(1,90,:) - call sigio_cnvtdv(imjm4, imjm4, km4, idvc - &, idvm, ntrac, iret, wrk1_4 - &, wrk2_4, head%cpi,1) -! write(6,*)' iret=',iret,' after cnvtdv','wrk2_4=',wrk2_4(1,90,:) - if (iret /= 0) then - write(6,*)'return code from cnvtdv=',iret,'job stopping' - stop 444 - endif - - wk_g = wrk1_4 * (1.+(461.50/287.05-1)*wrk2_4(:,:,:,1)) - if(allocated(wrk1_4)) deallocate(wrk1_4) - if(allocated(wrk2_4)) deallocate(wrk2_4) - endif - -! xmem = get_memory() -! write(6,234) ' before SPTEZMV ',xmem - - WK_G1(:,:,:)=WK_G(:,:,:) - - elseif (inptyp == 1) then - - wk_G(:,:,:) = gdata%t(1:IMAX,1:JMAX,1:KMAX) - WK_G2(:,:,:) = gdata%q(1:IMAX,1:JMAX,1:KMAX,1) - wk_G1(:,:,:) = wk_g(:,:,:)*(1.+(461.50/287.05-1)* - & WK_G2(:,:,:)) - - DO K=1,KMAX - WR_G1(:,:)=WK_G1(:,:,K) - print *,'K,tmp= ',K,maxval(WR_G1),minval(WR_G1),WR_G1(1,1) - END DO - -! DO K=1,KMAX -! WR_G1(:,:)=WK_G2(:,:,K) -! print *,'K,spfh= ',K,maxval(WR_G1),minval(WR_G1),WR_G1(1,1) -! END DO - - end if - - DO K=1,KMAX - IDX=10 - IF(K.EQ.1)IDX=3 -! Virtual Temperature - CALL SPC2G(IMAX,JMAX,GLON,GLAT,ZG,PSFC,PSLB,T00, - 1 MTV,MTV2,HDAT,HDATA,WK_G1(1,1,K),IDX,idvm) - ENDDO - - IDX = 10 -! - if (inptyp == 2) then - - DO K=1,KMAX - DO NW=1,MAXWV2 - WK_S1(NW,K) = data1%d(NW,K) - END DO - ENDDO - CALL SPTEZM(0,MWAVE,4,IMAX,JMAX,KMAX,WK_S1,WK_G1,+1) - WK_G(:,:,:)=WK_G1(:,:,:) - DO K=1,KMAX - DO NW=1,MAXWV2 - WK_S1(NW,K) = data1%z(NW,K) - END DO - ENDDO - CALL SPTEZM(0,MWAVE,4,IMAX,JMAX,KMAX,WK_S1,WK_G1,+1) - WK_G2(:,:,:)=WK_G1(:,:,:) - - elseif (inptyp == 1) then - - WK_G(:,:,:) = gdata%u(1:IMAX,1:JMAX,1:KMAX) - WK_G2(:,:,:) = gdata%v(1:IMAX,1:JMAX,1:KMAX) - - DO K=1,KMAX - WR_G1(:,:)=gdata%u(:,:,K) -! print *,'K,u2= ',K,maxval(WR_G1),minval(WR_G1),WR_G1(1,1) - END DO - DO K=1,KMAX - WR_G1(:,:)=gdata%v(:,:,K) -! print *,'K,v2= ',K,maxval(WR_G1),minval(WR_G1),WR_G1(1,1) - END DO - - end if - -C.. CALCULATE U, V at ~850 mb - -! K850=3+KMAX+(KMAX/4)*4+1 - K8501=1 - DIST2=ABS(SLREF(1)-0.85) - DO K=1,KMAX - DIST1=ABS(SLREF(K)-0.85) - IF(DIST1.LT.DIST2)THEN - K8501=K - DIST2=DIST1 - END IF - END DO - - print*,'K8501=',K8501 - - K=K8501 - - if (inptyp == 2) then - - DO NW=1,MAXWV2 - WR_S1(NW) = data1%d(NW,K) - WR_S2(NW) = data1%z(NW,K) - END DO - - CALL SPTEZV(0,MWAVE,4,IMAX,JMAX,WR_S1,WR_S2, - & U8501,V8501,+1) - - deallocate(work_8,wk_s1) - deallocate(wr_s1,wr_s2) - - print *,'u8501=',maxval(U8501),minval(U8501),U8501(1,1) - print *,'v8501=',maxval(V8501),minval(V8501),V8501(1,1) - - elseif (inptyp == 1) then - - U8501(:,:) = gdata%u(1:IMAX,1:JMAX,K8501) - V8501(:,:) = gdata%v(1:IMAX,1:JMAX,K8501) - - print *,'u8501=',maxval(U8501),minval(U8501),U8501(1,1) - print *,'v8501=',maxval(V8501),minval(V8501),V8501(1,1) - print *,'ugrd=',maxval(gdata%u),minval(gdata%u),gdata%u(1,1,1) - print *,'vgrd=',maxval(gdata%v),minval(gdata%v),gdata%v(1,1,1) - - end if - - deallocate(wk_g1) - -! xmem = get_memory() -! write(6,234) ' after SPTEZMV ',xmem - - IDX=10 - DO K=1,KMAX - WR_G1(:,:)=WK_G(:,:,K) - WR_G2(:,:)=WK_G2(:,:,K) - CALL SPC2G(IMAX,JMAX,GLON,GLAT,ZG,PSFC,PSLB,T00, - 1 MTV,MTV2,HDAT,HDATA,WR_G1(1,1),IDX,idvm) - CALL SPC2G(IMAX,JMAX,GLON,GLAT,ZG,PSFC,PSLB,T00, - 1 MTV,MTV2,HDAT,HDATA,WR_G2(1,1),IDX,idvm) -! -!.. CONVERT DI, ZE TO U,V and U,V TO DI ZE again for confirm -! - CALL SPC2G(IMAX,JMAX,GLON,GLAT,ZG,PSFC,PSLB,T00, - 1 MTV,MTV2,HDAT,HDATA,U8501(1,1),100,idvm) - CALL SPC2G(IMAX,JMAX,GLON,GLAT,ZG,PSFC,PSLB,T00, - 1 MTV,MTV2,HDAT,HDATA,V8501(1,1),101,idvm) - ENDDO -! Specific Humidity - -! deallocate(wk_g,wk_g2,WR_G1,WR_G2,U8501,V8501) - deallocate(wk_g,wk_g2,WR_G2,U8501,V8501) - - ALLOCATE ( WK_G1(IMAX,JMAX,KMAX) ) - - if (inptyp == 2) then - - ALLOCATE ( WK_S1(MAXWV2,KMAX) ) - -c$omp parallel do - do k=1,kmax - do i=1,maxwv2 - wk_s1(i,k)=0.0 - enddo - enddo - - DO K=1,KMAX - DO NW=1,MAXWV2 - WK_S1(NW,K) = data1%q(NW,K,1) - END DO - END DO - - CALL SPTEZM(0,MWAVE,4,IMAX,JMAX,KMAX,WK_S1,WK_G1,+1) - - DEALLOCATE ( WK_S1 ) - - elseif (inptyp == 1) then - - WK_G1(:,:,:) = gdata%q(1:IMAX,1:JMAX,1:KMAX,1) - - end if - - DO K=1,KMAX - CALL SPC2G(IMAX,JMAX,GLON,GLAT,ZG,PSFC,PSLB,T00, - 1 MTV,MTV2,HDAT,HDATA,WK_G1(1,1,K),IDX,idvm) - ENDDO -! - DEALLOCATE ( COLRAD, WGT, WGTCS, RCS2 ) - DEALLOCATE ( ZG, PSFC ) -! DEALLOCATE ( WORK_8, WK_S1, WK_S2, WK_G ) -! DEALLOCATE ( WK_G2 ) - DEALLOCATE ( WK_G1 ) - -! DO K=1,MTV -! write(6,*)'HDATA,K=',K -! WR_G1(:,:)=HDATA(:,:,K) -! call maxmin(WR_G1,IMAX*JMAX,1,1,1,'HDATA') -! END DO - - DEALLOCATE ( WR_G1 ) - - CALL HURR_REL(inptyp,MWAVE,IMAX,JMAX,KMAX,MAXWV2, - 1 JHF,MTV,MTV1,MTV2,MTV3, - 2 HDAT,HDATA,PDAT,PSL,PS3,PSLB,T00,SLREF, - 3 nvcd,idvc,idsl,vcrd,idvm,ntrac, - 4 STRPSF) - - - if (inptyp == 2) then - - ALLOCATE ( WK_S1(MAXWV2,KMAX) ) - ALLOCATE ( WK_G1(IMAX,JMAX,KMAX) ) - -c$omp parallel do - do k=1,kmax - do i=1,maxwv2 - wk_s1(i,k)=0.0 - enddo - enddo - - CALL G2SPC(KUNIT,MWAVE,MAXWV2,IMAX,JMAX,PS3,PS2) - - DO I=1,MAXWV2 - data1%ps(I) = PS2(I) - END DO -! - if (mod(idvm/10,10) == 3 .and. idvc == 3) then - ALLOCATE ( WRK1_4(IMAX,JMAX,KMAX) ) - ALLOCATE ( WRK2_4(IMAX,JMAX,KMAX,ntrac) ) - imjm4 = imax*jmax ; km4 = kmax -! write(6,*)' imjm4=',imjm4,' km4=',km4,' ntrac=',ntrac -! &,' cpi=',head%cpi,' in HURR_REL' - wrk1_4 = hdata(:,:,3:kmax+2) - & / (1.+(461.50/287.05-1)*HDATA(:,:,3+3*kmax:2+4*kmax)) - call sigio_cnvtdv(imjm4, imjm4, km4, idvc - &, idvm, ntrac, iret, wrk1_4 - &, wrk2_4, head%cpi,-1) -! write(6,*)' iret=',iret,' 2after cnvtdv','wrk2_4=',wrk1_4(1,1,1) - if (iret /= 0) then - write(6,*)' return code from cnvtdv = ',iret,' job stopping' - stop 777 - endif - hdata(:,:,3:2+kmax) = wrk1_4 - if(allocated(wrk1_4)) deallocate(wrk1_4) - if(allocated(wrk2_4)) deallocate(wrk2_4) -! - endif - - DO K=1,KMAX - DO J=1,JMAX - DO I=1,IMAX - WK_G1(I,J,K) = HDATA(I,J,2+K) - END DO - END DO - END DO - - CALL SPTEZM(0,MWAVE,4,IMAX,JMAX,KMAX,WK_S1, - & WK_G1,-1) -! & HDATA(1,1,3),-1) - - DO K=1,KMAX - DO I=1,MAXWV2 - data1%t(I,K)=WK_S1(I,K) - END DO - END DO - - DO K=1,KMAX - DO J=1,JMAX - DO I=1,IMAX - WK_G1(I,J,K) = HDATA(I,J,KMAX+1+2*K) - END DO - END DO - END DO - - CALL SPTEZM(0,MWAVE,4,IMAX,JMAX,KMAX,WK_S1,WK_G1,-1) - - DO K=1,KMAX - DO I=1,MAXWV2 - data1%d(I,K) = WK_S1(I,K) - END DO - END DO - - DO K=1,KMAX - DO J=1,JMAX - DO I=1,IMAX - WK_G1(I,J,K) = HDATA(I,J,KMAX+2+2*K) - END DO - END DO - END DO - - CALL SPTEZM(0,MWAVE,4,IMAX,JMAX,KMAX,WK_S1,WK_G1,-1) - - DO K=1,KMAX - DO I=1,MAXWV2 - data1%z(I,K) = WK_S1(I,K) - END DO - END DO - - DO K=1,KMAX - DO J=1,JMAX - DO I=1,IMAX - WK_G1(I,J,K) = HDATA(I,J,3*KMAX+2+K) - END DO - END DO - END DO - - CALL SPTEZM(0,MWAVE,4,IMAX,JMAX,KMAX,WK_S1, - & WK_G1,-1) -! & HDATA(1,1,3+3*KMAX),-1) - - DO K=1,KMAX - DO I=1,MAXWV2 - data1%q(I,K,1)=WK_S1(I,K) - END DO - END DO -C - DEALLOCATE ( WK_S1, WK_G1, PS2 ) -! - DO K=1,KMAX - data1%d(1,K) = 0.0 - data1%z(1,K) = 0.0 - END DO - - CALL sigio_swdata(KUNIT,head,data1,iret) - - write(6,*) 'jcap= ',head%jcap,MWAVE - - elseif(inptyp==1) then !--- output nemsio file - - PSL=PS3 ! assign surface pressure -! ! ps in pascal - PSL=exp(psl) - gdata%ps = psl*1000. - print *,'pres2=',maxval(gdata%ps),minval(gdata%ps),gdata%ps(1,1) -! print *,'in nemsio out,ps=',maxval(gdata%ps),minval(gdata%ps) -! ! seniable tmp - gdata%t(:,:,1:kmax) = hdata(:,:,3:kmax+2) - & / (1.+(461.50/287.05-1)*HDATA(:,:,3+3*kmax:2+4*kmax)) - -! print *,'in nemsio out,t=',maxval(gdata%t),minval(gdata%t) -! ! q - gdata%q(:,:,1:kmax,1) = HDATA(:,:,3+3*KMAX:2+4*KMAX) - - if (nopdpvv) then - print*,'no p and dp in input/output data' - else -!recompute dpres and pres from T: -! first, to be consistent with model, compute enthalpy or tv from T - - if( (ghead%idvm/10) == 3 .and. idvc == 3) then - ALLOCATE ( WK_G(IMAX,JMAX,KMAX) ) - do k=1,kmax - do j=1,jmax - do i=1,imax - xcp = 0.0 - sumq = 0.0 - do n=1,ghead%ntrac - if( cpi(n+1) .ne. 0.0) then - xcp = xcp + gdata%q(i,j,k,n) * cpi(n+1) - sumq = sumq + gdata%q(i,j,k,n) - endif - enddo - xcp = (1.-sumq)*cpi(1) + sumq ! Mean Cp - wk_g(i,j,k) = gdata%t(i,j,k)*xcp - enddo - enddo - enddo - endif - do k=1,kmax - print *,'in nemsio in,k=',k,'dp=',maxval(gdata%dp(:,:,k)), - & minval(gdata%dp(:,:,k)),'vcrd=',vcrd(k,1:2),vcrd(k+1,1:2) - print *,'in nemsio in,k=',k,'p=',maxval(gdata%p(:,:,k)), - & minval(gdata%p(:,:,k)) - end do -! now compute dp - if ((ghead%idvm/10) == 3 .and. idvc == 3) then - allocate(thref(KMAX),tki(IMAX,KMAX)) - thref(:) = 300.0 - tki(:,1) = 0.0 - tki(:,KMAX+1) = 0.0 - do j=1,jmax -! - do k=2,Kmax - do i=1,IMAX - tkrt0 = (wk_g(i,j,k-1)+wk_g(i,j,k)) - & / (thref(k-1)+thref(k)) - tki (i,k) = vcrd(k,3)/1000.*tkrt0**rkappa - enddo - enddo - do k=1,Kmax - do i=1,IMAX - gdata%dp(i,j,k) = (vcrd(k,1)-vcrd(k+1,1))/1000.+ - & (vcrd(k,2)-vcrd(k+1,2)) - & * psl(i,j) + tki(i,k) - tki(i,k+1) - gdata%dp(i,j,k)=gdata%dp(i,j,k)*1000. - enddo - enddo -! -! if(j==1)print *,'in mv,dp(1,1,1)=',gdata%dp(1,1,1), -! & 'tki=',tki(1,1:5),'vcd=',vcrd(1:3,1:3),'psl=', -! & psl(1,1) - enddo - deallocate(thref,tki,wk_g) -! print *,'in nemsio out,dp=',maxval(gdata%dp(:,:,1)), -! & minval(gdata%dp(:,:,1)) -! - elseif (idvc == 2) then - do k=1,Kmax - kk = kmax - k + 1 - gdata%dp(:,:,k) = (vcrd(k,1)-vcrd(k+1,1))*0.001 - & + (vcrd(k,2)-vcrd(k+1,2)) * psl(:,:) - gdata%dp(:,:,k) = gdata%dp(:,:,k)*1000. - print *,'in nemsio out,k=',k,'dp=',maxval(gdata%dp(:,:,k)), - & minval(gdata%dp(:,:,k)),'vcrd=',vcrd(k,1:2),vcrd(k+1,1:2), - & 'psl=', psl(1,1) - enddo - elseif (idvc == 1) then - do k=1,Kmax - gdata%dp(:,:,k) = ((vcrd(k,1) - vcrd(k+1,1)) * psl(:,:)) - enddo - endif -!pres - allocate(pdn(IMAX,JMAX),pup(IMAX,JMAX)) - allocate(pdnk(IMAX,JMAX),pupk(IMAX,JMAX)) - pdn(:,:) = gdata%ps(:,:) - pdnk = (pdn*p0i) ** rk - do k=1,Kmax - pup(:,:) = max(pdn(:,:)-gdata%dp(:,:,k),zero4) - if (idvc == 3 ) then - gdata%p(:,:,k) = 0.5*(pup(:,:)+pdn(:,:)) - pdn(:,:) = pup(:,:) - else - do j=1,jmax - do i=1,imax - pupk(i,j) = (pup(i,j)*p0i) ** rk - gdata%p(i,j,k) = p0*((pdnk(i,j)*pdn(i,j)- - & pupk(i,j)*pup(i,j)) /(rk1*(pdn(i,j)-pup(i,j)))) ** rkr - pdn(i,j) = pup(i,j) - pdnk(i,j) = pupk(i,j) - enddo - enddo - endif - print *,'in nemsio out,k=',k,'p=',maxval(gdata%p(:,:,k)), - & minval(gdata%p(:,:,k)) - enddo - - endif ! nopdpvv -!u/v - DO K=1,KMAX - DO J=1,JMAX - DO I=1,IMAX - gdata%u(I,J,K) = HDATA(I,J,KMAX+1+2*K) - END DO - END DO - END DO - - DO K=1,KMAX - DO J=1,JMAX - DO I=1,IMAX - gdata%v(I,J,K) = HDATA(I,J,KMAX+2+2*K) - END DO - END DO - END DO - -! print *,'aft set gdata u,v,u=',maxval(gdata%u),minval(gdata%u) -! -!--open nemsio file -! gfileo = gfile -! ghead%gdatatype='grib' -! ghead%gdatatype='bin4' - print *,'datatype2=',ghead%gdatatype - print *,'recname2=',gheadv%recname(1:3) - - print *,'wrt size(vcoord)=',size(gheadv%vcoord,1), - & size(gheadv%vcoord,2),size(gheadv%vcoord,3) - call nemsio_gfsgrd_open(gfile,trim(kfile), - & 'write',nopdpvv,ghead,gheadv,iret=ios) - if (iret /= 0) print *,'open nemsio write file,',trim(kfile) - &, 'iret=',iret - print *,'aft open, ios=',ios - call nemsio_gfs_wrtgrd(gfile,gdata,iret=ios) - print *,'aft write, ios=',ios - if (iret /=0 ) print *,'nemsio write grd,ret=',iret - print*,' complete reading data, inptyp=', inptyp - print *,'hgt=',maxval(gdata%zs),minval(gdata%zs),gdata%zs(1,1) - print *,'pres=',maxval(gdata%ps),minval(gdata%ps),gdata%ps(1,1) - print *,'tmp=',maxval(gdata%t),minval(gdata%t),gdata%t(1,1,1) - print *,'ugrd=',maxval(gdata%u),minval(gdata%u),gdata%u(1,1,1) - print *,'vgrd=',maxval(gdata%v),minval(gdata%v),gdata%v(1,1,1) - print *,'spfh=',maxval(gdata%q(:,:,:,1)),minval(gdata%q(:,:,:,1)) - print *,'o3mr=',maxval(gdata%q(:,:,:,2)),minval(gdata%q(:,:,:,2)) - print *,'clwmr=',maxval(gdata%q(:,:,:,3)),minval(gdata%q(:,:,:,3)) - - ALLOCATE ( WR_G1(IMAX,JMAX) ) - DO K=1,KMAX - WR_G1(:,:)=gdata%t(:,:,K) - print *,'K,tmp= ',K,maxval(WR_G1),minval(WR_G1),WR_G1(1,1) - END DO - DO K=1,KMAX - WR_G1(:,:)=gdata%u(:,:,K) -! print *,'K,u2= ',K,maxval(WR_G1),minval(WR_G1),WR_G1(1,1) - END DO - DO K=1,KMAX - WR_G1(:,:)=gdata%v(:,:,K) -! print *,'K,v2= ',K,maxval(WR_G1),minval(WR_G1),WR_G1(1,1) - END DO -! DO K=1,KMAX -! WR_G1(:,:)=gdata%q(:,:,K,1) -! print *,'K,spfh2= ',K,maxval(WR_G1),minval(WR_G1),WR_G1(1,1) -! END DO - - DEALLOCATE ( WR_G1 ) - - call nemsio_close(gfile) -! - endif - - call nemsio_finalize() - -! xmem = get_memory() -! write(6,234) 'after sigio_swdata ',xmem - 234 format(a30,' mem ',g13.6,' MB') - - CALL W3TAGE('RELOCATE_MV_NVORTEX') - call mpi_finalize(ierr) -C - STOP - END -C - SUBROUTINE GLATS(LGGHAF,COLRAD,WGT,WGTCS,RCS2) -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: GLATS COMPUTES LOCATION OF GAUSSIAN LATITUDES. -C PRGMMR: JOSEPH SELA ORG: W/NMC23 DATE: 88-04-05 -C -C ABSTRACT: COMPUTES THE LOCATION OF THE GAUSSIAN LATITUDES FOR THE -C INPUT LGGHAF. THE LATITUDES ARE DETERMINED BY FINDING -C THE ZEROS OF THE LEGENDRE POLYNOMIALS. -C -C PROGRAM HISTORY LOG: -C 88-04-05 JOSEPH SELA -C -C USAGE: CALL GLATS (LGGHAF, COLRAD, WGT, WGTCS, RCS2) -C INPUT ARGUMENT LIST: -C LGGHAF - NUMBER OF GAUSSIAN LATITUDES IN A HEMISPHERE. -C -C OUTPUT ARGUMENT LIST: -C COLRAD - ARRAY OF COLATITUDE OF GAUSSIAN LATITUDES -C IN NORTHERN HEMISPHERE. -C WGT - ARRAY OF WEIGHTS AT EACH GAUSSIAN LATITUDE -C REQUIRED FOR GAUSSIAN QUADRATURE. -C WGTCS - ARRAY OF GAUSSIAN WEIGHT/SIN OF COLATITUDE SQUARED. -C RCS2 - ARRAY OF RECIPROCAL OF SIN OF COLATITUDE SQUARED. -C -C OUTPUT FILES: -C OUTPUT - write(6,*)OUT FILE. -C -C ATTRIBUTES: -C LANGUAGE: FORTRAN 200. -C MACHINE: CYBER 205. -C -C$$$ - implicit none - REAL(8) EPS,SI,RL2,PI,DRADZ,RAD,DRAD,P1,P2,PHI,X,W,SCALE,SN,RC - REAL COLRAD(LGGHAF),WGT(LGGHAF),WGTCS(LGGHAF),RCS2(LGGHAF) - INTEGER L2,LGGHAF,K1,K,ITER - EPS=1.E-12 -C write(6,*) 101 -C101 FORMAT ('0 I COLAT COLRAD WGT', 12X, 'WGTCS', -CCCC 1 10X, 'ITER RES') - SI = 1.0 - L2=2*LGGHAF - RL2=L2 - SCALE = 2.0/(RL2*RL2) - K1=L2-1 - PI = ATAN(SI)*4.E+00 - DRADZ = PI / 360./10. - RAD = 0.0 - DO 1000 K=1,LGGHAF - ITER=0 - DRAD=DRADZ -1 CALL POLY(L2,RAD,P2) -2 P1 =P2 - ITER=ITER+1 - RAD=RAD+DRAD - CALL POLY(L2,RAD,P2) - IF(SIGN(SI,P1).EQ.SIGN(SI,P2)) GO TO 2 - IF(DRAD.LT.EPS)GO TO 3 - RAD=RAD-DRAD - DRAD = DRAD * 0.25 - GO TO 1 -3 CONTINUE - COLRAD(K)=RAD - PHI = RAD * 180 / PI - CALL POLY(K1,RAD,P1) - X = COS(RAD) - W = SCALE * (1.0 - X*X)/ (P1*P1) - WGT(K) = W - SN = SIN(RAD) - W=W/(SN*SN) - WGTCS(K) = W - RC=1./(SN*SN) - RCS2(K) = RC - CALL POLY(L2,RAD,P1) -C write(6,*) 102,K,PHI,COLRAD(K),WGT(K),WGTCS(K),ITER,P1 -C102 FORMAT(1H ,I2,2X,F6.2,2X,F10.7,2X,E13.7,2X,E13.7,2X,I4,2X,D13.7) -1000 CONTINUE - RETURN - END - SUBROUTINE POLY(N,RAD,P) -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: POLY EVALUATES LEGENDRE POLYNOMIAL. -C PRGMMR: JOSEPH SELA ORG: W/NMC23 DATE: 88-04-01 -C -C ABSTRACT: EVALUATES THE UNNORMALIZED LEGENDRE POLYNOMIAL -C OF SPECIFIED DEGREE AT A GIVEN COLATITUDE USING A STANDARD -C RECURSION FORMULA. REAL ARITHMETIC IS USED. -C -C PROGRAM HISTORY LOG: -C 88-04-01 JOSEPH SELA -C -C USAGE: CALL POLY (N, RAD, P) -C INPUT ARGUMENT LIST: -C N - DEGREE OF LEGENDRE POLYNOMIAL. -C RAD - REAL COLATITUDE IN RADIANS. -C -C OUTPUT ARGUMENT LIST: -C P - REAL VALUE OF LEGENDRE POLYNOMIAL. -C -C ATTRIBUTES: -C LANGUAGE: FORTRAN 200. -C MACHINE: CYBER 205. -C -C$$$ - implicit none - REAL(8) X,RAD,Y1,Y2,Y3,G,P - INTEGER I,N - X = COS(RAD) - Y1 = 1.0 - Y2=X - DO 1 I=2,N - G=X*Y2 - Y3=G-Y1+G-(G-Y1)/FLOAT(I) - Y1=Y2 - Y2=Y3 -1 CONTINUE - P=Y3 - RETURN - END - - subroutine maxmin(a,len,k,k1,k2,ch) - dimension a(len,k) - character ch*(*) -c - do 100 j=k1,k2 - aamax = a(1,j) - aamin = a(1,j) - do 10 m=1,len - aamax = max( aamax, a(m,j) ) - aamin = min( aamin, a(m,j) ) -10 continue - write(6,*)ch,' has max=',aamax,' min=',aamin -100 continue - return - end -C - SUBROUTINE PMSL2PS(IMAX,JMAX,GLON,GLAT, - 1 IUT,MTV2,DUMM,HDAT,ZN,TN) - - real, parameter :: G=9.8, R=287.05, GAMMA=6.7*0.001 - PARAMETER (IRX=41,JRX=41,NST=10) - REAL GLON(IMAX),GLAT(JMAX),DUMM(IMAX,JMAX) - REAL TN(IRX,JRX) - REAL ZN(IRX,JRX),PSN(IRX,JRX),PSFCN(IRX,JRX) - - - COMMON /HDAT1/NWRT1,NRED1,NWT1 - REAL HDAT(IRX,JRX,MTV2,NST) - - CALL CUT_DM(IMAX,JMAX,GLON,GLAT,PSN,DUMM,1) - -C.. Using interpolated MSLP, Make surface pressure - -!$omp parallel do -!$omp& private(I,J,A,B,C,DD,D1) - DO I=1,IRX - DO J=1,JRX -! PSN(I,J) = LOG(PSN(I,J)) -! A = (GAMMA * ZN(I,J)) / TN(I,J) -! B = LOG(1+A) -! C = (G*B)/(R*GAMMA) -! DD = PSN(I,J) - C -! D1 = EXP(DD)/1000. -! PSFCN(I,J) = LOG(D1) -! PSN(I,J) = EXP(PSN(I,J)) - DD = TN(I,J)+0.0065*ZN(I,J) - D1 = 1.-0.0065*ZN(I,J)/DD - PSFCN(I,J) = LOG(PSN(I,J)*0.001)+5.257*LOG(D1) - ENDDO - ENDDO - -C write(6,*)'MSLP at Hurricane center ',psn(31,21)/100. -c call maxmin(psn,41*41,1,1,1,'sea-level pressure in reg') -c call maxmin(psfcn,41*41,1,1,1,'sfc pressure in reg (hPa)') -c call maxmin(dum1,41*41,1,1,1,'sfc pressure in reg(ln(cb))') -c call maxmin(zn,41*41,1,1,1,'terraine in reg') -c call maxmin(tn,41*41,1,1,1,'temperature at k=1 in reg') -c write(6,*)'============================' -C -c write(6,*)'write sfc press' -c WRITE(IUT) ((PSFCN(I,J),I=1,IRX),J=JRX,1,-1) - CALL WRIT1(IUT,NWT1,NWRT1,MTV2,PSFCN,HDAT) -c write(6,*)'write MSLP' -c WRITE(IUT) ((PSN(I,J),I=1,IRX),J=JRX,1,-1) - CALL WRIT1(IUT,NWT1,NWRT1,MTV2,PSN,HDAT) -c write(6,*)'write t1' -c WRITE(IUT) ((TN(I,J),I=1,IRX),J=JRX,1,-1) - CALL WRIT1(IUT,NWT1,NWRT1,MTV2,TN,HDAT) - RETURN - END -C - SUBROUTINE SPC2G(IMAX,JMAX,GLON,GLAT,ZG,PSFC,PSLB,T00, - 1 MTV,MTV2,HDAT,HDATA,DUM,IDX,idvm) -CCCCC MEMBER HALF -c SAVE -C - PARAMETER ( IRX= 41,JRX= 41, NST=10 ) - real, parameter :: G=9.8, R=287.05, GAMMA=6.7*0.001 - - integer * 4 idvm - COMMON/SMTH/ CLAT,CLON - REAL GLON(IMAX),GLAT(JMAX) - COMMON /NHC/ KSTM,IC_N(NST),JC_N(NST) - COMMON /NHC1/ SLON_N(NST),SLAT_N(NST),CLON_N(NST),CLAT_N(NST) - COMMON/CNT/ SLON,SLAT - COMMON /CHEN/KUNIT,ITIM -! - REAL HDAT(IRX,JRX,MTV2,NST) - REAL(4) HDATA(IMAX,JMAX,MTV) - REAL DUM(IMAX,JMAX) - - COMMON /HDAT1/NWRT1,NRED1,NWT1 - COMMON /HDAT3/NWRT2,NRED2 - - REAL ZG(IMAX,JMAX),PSFC(IMAX,JMAX),PSLB(IMAX,JMAX) - REAL T1(IMAX,JMAX),T00(IMAX,JMAX) - REAL PS(IMAX,JMAX),DUMM(IMAX,JMAX),PSL(IMAX,JMAX) - - REAL ZN(IRX,JRX),TN(IRX,JRX),NEW(IRX,JRX) -! -!.. Global coefficent to Gaussian grid -! -! call SPTEZ(0,MWAVE,4,IMAX,JMAX,DO,DUM,+1) - - IF(IDX.NE.100.AND.IDX.NE.101) THEN -! WRITE(66) DUM - - NWRT2 = NWRT2+1 - DO J=1,JMAX - DO I=1,IMAX - HDATA(I,J,NWRT2) = DUM(I,J) - END DO - END DO -! write(6,*)'WRIT2 COUNT = ',NWRT2,' hdata=',hdata(1,jmax/2,nwrt2) -! &,' idx=',idx - -! CALL WRIT2(DUM) -! write(6,*)'=====IDX ',IDX -! call maxmin(DUM,IMAX*JMAX,1,1,1,'DUM in gbl') - -! test qliu -! READ(66) DUM -! CALL G2SPC(DUM) -! end qliu - -! IF(IDX.EQ.1) write(6,*)'TERRAIN AT 289, 80 ',DUM(289,80) - ENDIF -! - IF(IDX.EQ.1) THEN - DO I=1,IMAX - DO J=1,JMAX - ZG(I,J) = DUM(I,J) - ENDDO - ENDDO - ELSEIF(IDX.EQ.2) THEN - DO I=1,IMAX - DO J=1,JMAX - PSFC(I,J) = DUM(I,J) - ENDDO - ENDDO - ELSEIF(IDX.EQ.3) THEN - DO I=1,IMAX - DO J=1,JMAX - T1(I,J) = DUM(I,J) - ENDDO - ENDDO - ENDIF -! - IF(IDX.EQ.2)call maxmin(PSFC,IMAX*JMAX,1,1,1,'psfc in gbl') - IF(IDX.EQ.3)call maxmin(T1,IMAX*JMAX,1,1,1,'T1 in gbl') - - IF(IDX.EQ.3)THEN - if (mod(idvm,10)==2)then -!$omp parallel do -!$omp& private(I,J) - DO I=1,IMAX - DO J=1,JMAX - PS(i,j)=PSFC(I,J)*1000. - PSFC(I,J) = LOG(PS(i,j)) - ENDDO - ENDDO - else -!$omp parallel do -!$omp& private(I,J) - DO I=1,IMAX - DO J=1,JMAX - PS(i,j)=EXP(PSFC(I,J))*1000. - PSFC(I,J) = LOG(PS(i,j)) - ENDDO - ENDDO - end if - call maxmin(ps,IMAX*JMAX,1,1,1,'sfc press in gbl') -! -!.. Calculate MSLP from SFC Pressure -! -!$omp parallel do -!$omp& private(I,J,A,B,C) - DO I=1,IMAX - DO J=1,JMAX -! A = (GAMMA * ZG(I,J)) / T1(I,J) -! B = LOG(1+A) -! C = (G*B)/(R*GAMMA) -! PSL(I,J) = PSFC(I,J) + C - T00(I,J)=T1(I,J)+0.0065*ZG(I,J) - C = 5.257*LOG(1.-0.0065*ZG(I,J)/T00(I,J)) - PSL(I,J) = PSFC(I,J) - C - DUMM(I,J) = EXP(PSL(I,J)) - ENDDO - ENDDO - - call maxmin(DUMM,IMAX*JMAX,1,1,1,'MSLP in gbl') -! write(70)DUMM - PSLB = DUMM - ENDIF - - DO K=1,KSTM - - IUT=K - -! NWRT1 = 0 - NWT1=0 - - SLON = SLON_N(K) - SLAT = SLAT_N(K) - CLON = CLON_N(K) - CLAT = CLAT_N(K) - IC = IC_N(K) - JC = JC_N(K) -! - IF (IDX.EQ.1) THEN - CALL CUT_DM(IMAX,JMAX,GLON,GLAT,ZN,DUM,2) -! WRITE(IUT) ((ZN(I,J),I=1,IRX),J=JRX,1,-1) - CALL WRIT1(IUT,NWT1,NWRT1,MTV2,ZN,HDAT) - write(6,222)K,ITIM,SLON,SLAT,CLON,CLAT,IC,JC - 222 FORMAT(/' STORM ',I2,', FORECAST HOUR ',I4/, - 1 ' SLON,SLAT,CLON,CLAT,IC,JC=',4F10.3,2x,2I5/) -! write(6,*)'write zn' - ENDIF - IF (IDX.EQ.3) THEN - DO I=1,41 - DO J=1,41 - ZN(I,J)=HDAT(I,J,1,IUT) - END DO - END DO - END IF - IF (IDX.EQ.3) CALL CUT_DM(IMAX,JMAX,GLON,GLAT,TN,DUM,3) - IF(IDX.NE.1.AND.IDX.NE.3.AND.IDX.LT.100) THEN - CALL CUT_DM(IMAX,JMAX,GLON,GLAT,NEW,DUM,3) - ELSEIF(IDX.GE.100) THEN - CALL CUT_DM(IMAX,JMAX,GLON,GLAT,NEW,DUM,IDX) - ENDIF - -! IF(IDX.LE.3)write(6,*)'===at sub SPC2G just bfr call PMSL2PS ===' -! IF(IDX.EQ.1)call maxmin(zg,IMAX*JMAX,1,1,1,'terrain in gbl') -! IF(IDX.EQ.1)call maxmin(zn,41*41,1,1,1,'terrain in reg') -! IF(IDX.EQ.2)call maxmin(psfc,IMAX*JMAX,1,1,1,'sfc pres in gbl') -! IF(IDX.EQ.2)call maxmin(new,41*41,1,1,1,'sfc pres in reg') -! IF(IDX.EQ.3)call maxmin(t1,IMAX*JMAX,1,1,1,'temp at k=1 in gbl') -! IF(IDX.EQ.3)call maxmin(tn,41*41,1,1,1,'temp at k=1 in reg') -! IF(IDX.LE.3)write(6,*)'=======================================' -! - IF(IDX.EQ.3) CALL PMSL2PS(IMAX,JMAX,GLON,GLAT, - 1 IUT,MTV2,DUMM,HDAT,ZN,TN) -131 FORMAT(1x,'TERRAIN') -121 FORMAT(1x,20F5.0) - -! - IF(IDX.GT.3) THEN -! WRITE(IUT)((NEW(I,J),I=1,IRX),J=JRX,1,-1) - CALL WRIT1(IUT,NWT1,NWRT1,MTV2,NEW,HDAT) - ENDIF - - IF(K.LT.KSTM)NWRT1=NWRT1-NWT1 - - ENDDO -! - RETURN - END -C - SUBROUTINE DECVAR(ISTART,IEND,IVALUE,IERDEC,FMT,BUFF) -C - PARAMETER (NCHLIN=130) -C - CHARACTER FMT*(*),BUFF*(*),OUTLIN*1 -C -c SAVE -C - DIMENSION OUTLIN(NCHLIN) -C -c && 2 comments -CC WRITE(6,1) FMT,BUFF -CC 1 FORMAT(/'...FMT=',A10,/,' ...BUFF=',A100) -C - READ(BUFF(ISTART:IEND),FMT,ERR=10) IVALUE - IERDEC=0 - RETURN -C - 10 CONTINUE -C - OUTLIN=' ' -C - IERDEC=10 - OUTLIN(ISTART:IEND)='*' -C - WRITE(6,31) (OUTLIN(ICH1),ICH1=1,NCHLIN) - WRITE(6,32) BUFF - 31 FORMAT(/'******ERROR DECODING, BUFF=',/,130A1) - 32 FORMAT(A130) -C - RETURN - END - - - SUBROUTINE HURR_MESS(IMAX,JMAX,GLON,GLAT,STRPSF) - - PARAMETER (IRX=41,JRX=41,NST=10) - PARAMETER (MAXVIT=15) - - COMMON/SMTH/ CLAT,CLON - REAL GLAT(JMAX),GLON(IMAX) - REAL STRPSF(NST) - COMMON /NHC/ KSTM,IC_N(NST),JC_N(NST) - COMMON /NHC1/ SLON_N(NST),SLAT_N(NST),CLON_N(NST),CLAT_N(NST) - DIMENSION STMDIR(NST),STMSPD(NST) -c CHARACTER ST_NAME(NST)*3,TCVT(NST)*95 - CHARACTER ST_NAME(10)*3,STMNAME(10)*3,TCVT(10)*95 - COMMON /STNAME/ST_NAME - COMMON /TCVIT/TCVT - COMMON /CHEN/KUNIT,ITIM,NTIM - - CHARACTER BUFIN(95)*1,BUFY2K(95)*1,STMNAM(NST)*12,STMNMZ*9 - CHARACTER FMTVIT(MAXVIT)*6,BUFINZ*100,LATNS*1,LONEW*1 - - DIMENSION IVTVAR(MAXVIT),VITVAR(MAXVIT),VITFAC(MAXVIT), - 1 ISTVAR(MAXVIT),IENVAR(MAXVIT) - - DIMENSION ISTMCX1(NTIM,NST),ISTMCY1(NTIM,NST), - 1 STMCX(NST),STMCY(NST) - - DATA ISTVAR/20,29,34,39,45,49,53,58,63,68,71,75,80,85,90/ - DATA IENVAR/27,32,36,42,47,51,56,61,66,69,73,78,83,88,93/ - DATA VITFAC/2*1.0,2*0.1,1.0,0.1,9*1.0/ - DATA FMTVIT/'(I8.8)','(I4.4)','(I3.3)','(I4.4)',2*'(I3.3)', - 1 3*'(I4.4)','(I2.2)','(I3.3)',4*'(I4.4)'/ - - EQUIVALENCE (BUFIN(37),LATNS),(BUFIN(43),LONEW), - 1 (BUFIN(10),STMNMZ),(BUFIN(1),BUFINZ) -C EQUIVALENCE (IVTVAR(1),IDATEZ),(IVTVAR(2),IUTCZ) -C - EQUIVALENCE (VITVAR( 3),STMLTZ),(VITVAR( 4),STMLNZ), - 1 (VITVAR( 5),STMDRZ),(VITVAR( 6),STMSPZ), - 1 (VITVAR( 9),RMPSFZ) -C - ONEDEG=360./(2.*3.1415926*6.37E6) -C - DO I=1,10 - SLON_N(I)=0. - SLAT_N(I)=0. - CLON_N(I)=0. - CLAT_N(I)=0. - IC_N(I)=0 - JC_N(I)=0 - END DO - - 90 REWIND 11 - KREC=0 - KSTORM=0 - NERROR=0 -C -C Get the hurricane center from the hurricane message made by NHC -C -C READ A RECORD INTO BUFFER -C - 100 CONTINUE - READ(11,101,ERR=990,END=200) (BUFIN(NCH),NCH=1,95) - 101 FORMAT(95A1) - - if(BUFIN(35).eq.'N' .or. BUFIN(35).eq.'S') then - - write(6,*) ' ' - write(6,*) '==> RECORD from tcvitals file contains a', - $ ' 2-digit year "' - write(6,*) ' ' - - BUFY2K(1:19) = BUFIN(1:19) - IF(BUFIN(20)//BUFIN(21).GT.'20') THEN - BUFY2K(20) = '1' - BUFY2K(21) = '9' - ELSE - BUFY2K(20) = '2' - BUFY2K(21) = '0' - ENDIF - BUFY2K(22:95) = BUFIN(20:93) - BUFIN = BUFY2K - - write(6,*) ' ' - write(6,*) '==> 2-digit year converted to 4-digit year "' - write(6,*) ' ' - - else if(BUFIN(37).eq.'N' .or. BUFIN(37).eq.'S') then - - write(6,*) ' ' - write(6,*) '==> RECORD from tcvitals file -- contains a', - $ ' 4-digit year "' - write(6,*) ' ' - - else - - write(6,*) ' ' - write(6,*) '***** Cannot determine if this record contains ', - $ 'a 2-digit year or a 4-digit year - skip it and try reading ', - $ 'the next record' - write(6,*) ' ' - go to 100 - - end if - -C -C DECODE DATE AND TIME -C - DO 110 IV=1,2 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 BUFINZ) - - 110 CONTINUE - - DO 140 IV=3,MAXVIT - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 BUFINZ) - VITVAR(IV)=REAL(IVTVAR(IV))*VITFAC(IV) - 140 CONTINUE - -C ***************************************************** -C ***************************************************** -C **** IMPORTANT NOTES: **** -C **** **** -C **** ALL STORM LONGITUDES CONVERTED TO **** -C **** 0-360 DEGREES, POSITIVE EASTWARD !!! **** -C **** **** -C **** ALL STORM SPEEDS ARE IN M/SEC **** -C **** **** -C **** ALL DISTANCE DATA ARE IN KM **** -C **** **** -C **** ALL PRESSURE DATA ARE IN HPA (MB) **** -C ***************************************************** -C ***************************************************** -C -C SIGN OF LATITUDE AND CONVERT LONGITUDE -C - IF(LATNS .EQ. 'S') THEN - STMLTZ=-STMLTZ - ELSE IF(LATNS .NE. 'N') THEN - WRITE(6,153) STMLTZ,STMLNZ,LATNS - 153 FORMAT('******ERROR DECODING LATNS, ERROR RECOVERY NEEDED.', - 1 ' STMLTZ,STMLNZ,LATNS=',2F12.2,2X,A1) - GO TO 100 - ENDIF -C - IF(LONEW .EQ. 'W') THEN - STMLNZ=360.-STMLNZ - ELSE IF(LONEW .NE. 'E') THEN - WRITE(6,157) STMLTZ,STMLNZ,LATNS - 157 FORMAT('******ERROR DECODING LONEW, ERROR RECOVERY NEEDED.', - 1 ' STMLTZ,STMLNZ,LATNS=',2F12.2,2X,A1) - ENDIF - - IF(STMLNZ.gt.345..or.STMLNZ.lt.15.)go to 100 - - KREC=KREC+1 - - DO I=1,3 - ST_NAME(KREC)(I:I)=BUFIN(I+5) - END DO - DO I=1,95 - TCVT(KREC)(I:I)=BUFIN(I) - END DO -C - IF(KSTORM .LT. 10) THEN - KSTORM=KSTORM+1 - CLAT_N(KSTORM)=STMLTZ - CLON_N(KSTORM)=STMLNZ - STMDIR(KSTORM)=STMDRZ - STMSPD(KSTORM)=STMSPZ - STMNAM(KSTORM)=STMNMZ - STRPSF(KSTORM)=RMPSFZ - GO TO 100 -C - ELSE - - 300 WRITE(6,301) KSTORM - 301 FORMAT(/'******KSTORM EXCEEDS AVAILABLE SPACE, KSTORM=',I5 - 1 ,/,' Results may have serious problem') - GO TO 200 - - ENDIF - - 200 IF(KSTORM .GT. 0) THEN - WRITE(6,201)KSTORM,KREC - 201 FORMAT(/'...FOUND STORM IN VITALS FILE.',/,4X,I5, - 2 ' TOTAL NUMBER OF RECORDS READ=',I7) - ELSE - WRITE(6,202) - 202 FORMAT(/'NO STORM FOUND IN VITALS FILE.') - CALL W3TAGE('RELOCATE_MV_NVORTEX') - CALL ERREXIT(56) - END IF -C -c Correct to the storm center position - - PI=ATAN(1.0)*4.E+00 - PI180 = PI/180. - DT=(float(ITIM)-6.)*3600. ! Second - ONEDEG=360./(2.*PI*6.37E6) ! Degree/Meter - FACT=DT*ONEDEG - - KSTM=KSTORM - -c WRITE(12, 233) KSTM -c 233 FORMAT(2x,I5) - - DO I=1,KSTM - - write(6,430)STMNAM(I),CLAT_N(I),CLON_N(I),STMDIR(I),STMSPD(I) - 430 FORMAT(/' STORM NAME: ',A12,/, ' READIN STORM CENTER=',2F12.4, - 1 /,' STORM DIR and SPEED: ',2F12.4) - - write(6,*)'RAD OUTMOST CLOSED ISOBAR= ',STRPSF(I),' km' - - STRPSF(I)=STRPSF(I)*1000.*ONEDEG - - write(6,*)'RAD OUTMOST CLOSED ISOBAR= ',STRPSF(I),' degree' - -cnew USTM=STMSPD(I)*SIN(PI180*STMDIR(I)) -cnew VSTM=STMSPD(I)*COS(PI180*STMDIR(I)) -cnew CLON_N(I)=CLON_N(I)+USTM*FACT/COS(PI180*CLAT_N(I)) -cnew CLAT_N(I)=CLAT_N(I)+VSTM*FACT - -cnew write(6,*) 'CORRECTED STORM CENTER AT TIME HOUR ',ITIM,' =', -cnew 1 CLON_N(I),CLAT_N(I) - - END DO - - IF ( NTIM == 3 ) THEN - INDX1=ITIM/3 - ELSE IF ( NTIM == 7 )THEN - INDX1=ITIM-2 - ENDIF - - K1STM=0 - DO I=1,10 - STMCX(I)=0. - STMCY(I)=0. - STMNAME(I)='NUL' - IF ( NTIM == 3 ) THEN - READ(30,442,end=436) - & (ISTMCY1(J,I),ISTMCX1(J,I),J=1,NTIM),STMNAME(I) - ELSEIF ( NTIM == 7 ) THEN - READ(30,443,end=436) - & (ISTMCY1(J,I),ISTMCX1(J,I),J=1,NTIM),STMNAME(I) - ENDIF - IFWRT=0 - DO J=1,NTIM - IF(ISTMCY1(J,I).EQ.0.and.ISTMCX1(J,I).EQ.0)THEN - IFWRT=1 - END IF - END DO - IF(IFWRT.EQ.1)THEN -! STMNAME(I)='NUL' - DO J=1,NTIM - ISTMCY1(J,I)=0. - ISTMCX1(J,I)=0. - END DO - END IF - STMCX(I)=360.-ISTMCX1(INDX1,I)*0.1 - STMCY(I)=ISTMCY1(INDX1,I)*0.1 - K1STM=K1STM+1 - write(6,*)' CT STORM Model CENTER at ',ITIM,'h = ', - & STMNAME(I),STMCX(I),STMCY(I) - END DO - 442 FORMAT(22x,6i4,25x,A3) - 443 FORMAT(14x,14i4,1x,A3) - 436 CONTINUE - - REWIND 30 - - DO I=1,KSTM - DO K=1,K1STM - IF(STMNAME(K).EQ.ST_NAME(I))THEN - IFWRT=0 - DO J=1,NTIM - IF(ISTMCY1(J,K).EQ.0.and.ISTMCX1(J,K).EQ.0)THEN - IFWRT=1 - END IF - END DO - IF(IFWRT.EQ.0)THEN - XDIST6H=CLON_N(I)-(360.-ISTMCX1((NTIM+1)/2,K)*0.1) - YDIST6H=CLAT_N(I)-ISTMCY1((NTIM+1)/2,K)*0.1 - CLON_N(I)=STMCX(K)+XDIST6H - CLAT_N(I)=STMCY(K)+YDIST6H - ELSE - USTM=STMSPD(I)*SIN(PI180*STMDIR(I)) - VSTM=STMSPD(I)*COS(PI180*STMDIR(I)) - CLON_N(I)=CLON_N(I)+USTM*FACT/COS(PI180*CLAT_N(I)) - CLAT_N(I)=CLAT_N(I)+VSTM*FACT - END IF - write(6,*) ' CT STORM OBS. CENTER at ',ITIM,'h = ', - & STMNAME(K),CLON_N(I),CLAT_N(I) - END IF - END DO - END DO - - - DO 900 I=1,KSTM - - CLON=CLON_N(I) - CLAT=CLAT_N(I) - - AMN = 500. - DO 10 ILA = 1,JMAX - DMN = ABS (GLAT(ILA) - CLAT) - IF (DMN.LE.AMN) THEN - AMN = DMN - JC = ILA - ENDIF -10 CONTINUE -C - BMN = 500. - DO 20 ILO = 1,IMAX - OMN = ABS (GLON(ILO) - CLON) - IF (OMN.LE.BMN) THEN - BMN = OMN - IC = ILO - ENDIF -20 CONTINUE - - IC_N(I)=IC - JC_N(I)=JC -C - write(6,*)' ' -c write(6,*)'==========AT SUB HURR_MESS=============' -c write(6,*)'... 1st guess ... center of hurricane' -c write(6,*)'===IC,JC=== ',IC,JC,GLON(IC),GLAT(JC) -c write(6,*)'==DIST OF CLON AND IC===',BMN -c write(6,*)'==DIST OF CLAT AND JC===',AMN - - SLON_N(I) = IFIX(GLON(IC)+0.5 - IRX/2) - SLAT_N(I) = IFIX(GLAT(JC)+0.5 - JRX/2) - write(6,*)' ' -c write(6,*)'==========================================' -c write(6,*)'SLAT, SLON = ', SLAT_N(I),SLON_N(I) -c WRITE(12,123)SLON_N(I),SLAT_N(I),CLON_N(I),CLAT_N(I) -c123 FORMAT(1x,4F10.3) - write(6,*)'==========================================' - - 900 CONTINUE - - RETURN - - 990 WRITE(6,991) BUFIN - 991 FORMAT('******ERROR READING STORM RECORD. BUFIN IS:',/, - 1 ' ******',A95,'******') - call mpi_finalize(iret) !!!GO TO 100 - RETURN - - END -C - - SUBROUTINE CUT_DM(IMAX,JMAX,GLON,GLAT,NEW,OLD,IV) -C - PARAMETER (IRX=41,JRX=41) - - COMMON/SMTH/ CLAT,CLON - REAL GLAT(JMAX),GLON(IMAX),OLD(IMAX,JMAX) - COMMON/CNT/ SLON,SLAT - REAL NEW(IRX,JRX) -C - X=360./FLOAT(IMAX) - -!!$OMP PARALLEL DO DEFAULT(PRIVATE) -!!$OMP+ SHARED(IMAX,JMAX,GLON,GLAT,NEW,OLD,IV) -!!$OMP+ SHARED(CLAT,CLON,SLON,SLAT,X) - DO 10 J=1,JRX - BLA = 90. - SLAT - (J-1) - DO 10 I=1,IRX - BLO = SLON + (I-1) - IF(BLO.GT.360.)BLO=BLO-360. -C - DO 20 IG=IMAX,1,-1 - DON = BLO - GLON(IG) - IF (DON.GE.0) THEN - DX = DON - IX = IG - GO TO 1 - ENDIF -20 CONTINUE -C -1 DO 30 JG=JMAX,1,-1 - GLA = 90 - GLAT(JG) - DAT = BLA - GLA - IF (DAT.GE.0) THEN - DY = DAT - IY = JG - Y = GLAT(JG)-GLAT(JG+1) - GO TO 2 - ENDIF -30 CONTINUE -C -2 IF (IV.EQ.2) THEN - DD1 = SQRT(DX**2.+DY**2.) - DD2 = SQRT(DX**2.+(Y-DY)**2.) - DD3 = SQRT((X-DX)**2.+DY**2.) - DD4 = SQRT((X-DX)**2.+(Y-DY)**2.) - IF(DD1.LE.0.2) THEN - NEW(I,J) = OLD(IX,IY) - GO TO 10 - ENDIF - IF(DD2.LE.0.2) THEN - NEW(I,J) = OLD(IX,IY+1) - GO TO 10 - ENDIF - IF(DD3.LE.0.2) THEN - NEW(I,J) = OLD(IX+1,IY) - GO TO 10 - ENDIF - IF(DD4.LE.0.2) THEN - NEW(I,J) = OLD(IX+1,IY+1) - GO TO 10 - ENDIF - ENDIF -C - X1 = ( DY*OLD(IX ,IY+1) + (Y-DY)*OLD(IX ,IY) ) / Y - X2 = ( DY*OLD(IX+1,IY+1) + (Y-DY)*OLD(IX+1,IY) ) / Y - Y1 = ( DX*OLD(IX+1,IY ) + (X-DX)*OLD(IX,IY ) ) / X - Y2 = ( DX*OLD(IX+1,IY+1) + (X-DX)*OLD(IX,IY+1) ) / X - XX = (DX*X2 + (X-DX)*X1)/X - YY = (DY*Y2 + (Y-DY)*Y1)/Y - NEW(I,J) = (XX+YY)/2. -c xxxxx=0.25*(OLD(IX,IY)+OLD(IX+1,IY)+ -c & OLD(IX,IY+1)+OLD(IX+1,IY+1)) -C -c IF(IV.GE.100) THEN -C -c IF(I.LE.30.AND.J.EQ.20)THEN -c write(6,*)'OLD 1,2,3,4 ', -c 1 OLD(IX,IY),OLD(IX+1,IY),OLD(IX,IY+1),OLD(IX+1,IY+1) -c write(6,*)'X,Y,DX,DY ',X,Y,DX,DY -c write(6,*)'X1,X2,Y1,Y2 ',x1,x2,y1,y2 -c write(6,*)'XX, YY ',XX,YY -c write(6,*)'NEW ',NEW(I,J) -c write(6,*)'LAT, LON at SM Domain ',SLAT+(J-1),SLON+(I-1) -c write(6,*)'LAT, LON at Gauss grid ',GLAT(IY),GLON(IX) -c write(6,*)'IX,IY ',IX,IY -c write(6,*)'BLA, BLO, GLA, GLO ',BLA, BLO, GLA, GLON(IX) -c ENDIF -c ENDIF -C -10 CONTINUE -!!$OMP END PARALLEL DO -C - RETURN - END - - - SUBROUTINE WRIT1(IUT,NWT1,NWRT1,MTV2,DIN,HDAT) - PARAMETER (IRX=41,JRX=41,NST=10) - REAL DIN(IRX,JRX),HDAT(IRX,JRX,MTV2,NST) - NWRT1 = NWRT1 + 1 - NWT1 = NWT1 + 1 -! write(6,*)'WRIT1 COUNT = ',NWRT1,NWT1,IUT - DO J=1,JRX - DO I=1,IRX - HDAT(I,J,NWRT1,IUT) = DIN(I,J) - END DO - END DO -! write(6,*)' inwrit1 hdat=',hdat(41,41,nwrt1,iut),' nwrt1=',nwrt1 -! &,' iut=',iut - return - END - - SUBROUTINE READ1(IUT,NRED1,MTV3,DOUT,PDAT) - PARAMETER (IRX=41,JRX=41) - REAL DOUT(IRX,JRX),PDAT(IRX,JRX,MTV3) - NRED1=NRED1+1 -! write(6,*)'READ1 COUNT = ',NRED1 - DO J=1,JRX - DO I=1,IRX - DOUT(I,J)=PDAT(I,J,NRED1) - END DO - END DO - END - - SUBROUTINE WRIT2(IMAX,JMAX,NWRT2,MTV,DIN,HDATA) - REAL DIN(IMAX,JMAX) - REAL(4) HDATA(IMAX,JMAX,MTV) - NWRT2=NWRT2+1 -c write(6,*)'WRIT2 COUNT = ',NWRT2 -c call maxmin(DIN,IMAX*JMAX,1,1,1,'DIN in gbl') - DO J=1,JMAX - DO I=1,IMAX - HDATA(I,J,NWRT2)=DIN(I,J) - END DO - END DO - END - - SUBROUTINE READ2(IMAX,JMAX,NRED2,MTV,DOUT,HDATA) - REAL DOUT(IMAX,JMAX) - REAL(4) HDATA(IMAX,JMAX,MTV) - NRED2=NRED2+1 -c write(6,*)'READ2 COUNT = ',NRED2 - DO J=1,JMAX - DO I=1,IMAX - DOUT(I,J)=HDATA(I,J,NRED2) - END DO - END DO - END - - - SUBROUTINE HURR_REL(inptyp,MWAVE,IMAX,JMAX,KMAX,MAXWV2, - 1 JHF,MTV,MTV1,MTV2,MTV3, - 2 HDAT,HDATA,PDAT,PSL,PS3,PSLB,T00,SL, - 3 nvcd,idvc,idsl,vcrd,idvm,ntrac, - 4 STRPSF) - -c SUBROUTINE HURR_REL(MWAVE,KMAX,MAXWV2, -c 1 MTV,MTV1,MTV2,MTV3, -c 2 HDAT,HDATA,PDAT,PSLB) - -C -C SEPARATE HURRICANE VORTEX FROM ENVIRONMENTAL FIELD, THEN -C RELOCATE THE HURRICANCE VORTEX TO NEW LOCATION -C REF, Kurihara et al 1992, 1995. MWR -C - - use sigio_module -! use sigio_r_module - - - PARAMETER (IX=41,JX=41,NF=11,IT=24,IR=120,IJ=IX*JX) - PARAMETER (NSG=54000) - PARAMETER (NST=10) - PARAMETER (NSG5=NSG/3) -c PARAMETER (IMAX=384,JMAX=190,NSG=24000) -c PARAMETER (JHF=JMAX/2,NST=10) -C - integer inptyp - integer MWAVE,IMAX,JMAX,KMAX,MAXWV2, - & JHF,MTV,MTV1,MTV2,MTV3 - integer * 4 nvcd,idvc,idsl,idvm,ntrac - &, imjm4, km4, iret - DIMENSION U(IX,JX),V(IX,JX),UD(IX,JX),US(IX,JX),VS(IX,JX) - DIMENSION SKIP(IX,JX),M(11),FK(NF),TW(IT,IR) - DIMENSION VD(IX,JX),XTU(IX,NF),XTV(IX,NF),DKY(IX,JX) - DIMENSION YTU(IX,JX),YTV(IX,JX),RS(IT),R0(IT),RF(IT) -! DIMENSION INP(IJ),JNP(IJ),CM(IJ),DIST(IJ) - DIMENSION ALAT(JX),ALON(IX),ZG(IX,JX),DATG(IMAX,JMAX) - DIMENSION GLON(IMAX,JMAX),GLAT(IMAX,JMAX),ZDATG(IMAX,JMAX) - DIMENSION ING(NSG),JNG(NSG) - - DIMENSION ING5(NSG5),JNG5(NSG5) - DIMENSION ING6(NSG5),JNG6(NSG5) - DIMENSION RRIJ(NSG5) - - REAL COLRAD(JHF), WGT(JHF),WGTCS(JHF),RCS2(JHF) - COMMON /ST/ALON,ALAT - - COMMON /NHC/ KSTM1,IC_N(NST),JC_N(NST) - COMMON /NHC1/SLON_N(NST),SLAT_N(NST),CLON_N(NST),CLAT_N(NST) - - COMMON /NHC2/MDX,MDY - COMMON /NHC3/AMDX,AMDY - COMMON /POSIT/CLON_NEW,CLAT_NEW,SLON,SLAT,CLON,CLAT,RAD - COMMON /vect/R0,XVECT(IT),YVECT(IT) - COMMON /TR/ING,JNG,IB -c COMMON /TR/ZDATG,GLON,GLAT,ING,JNG,IB - COMMON /CHNL/IUT,KSTM - - COMMON /HDAT1/NWRT1,NRED1,NWT1 - COMMON /HDAT3/NWRT2,NRED2 - REAL PSLB(IMAX,JMAX),T00(IMAX,JMAX) - REAL(4) SL(KMAX) - REAL HDAT(IX,JX,MTV2,NST) - REAL(4) HDATA(IMAX,JMAX,MTV) - REAL PDAT(IX,JX,MTV3) - REAL HSIG(IX,JX,KMAX),HP(IX,JX,2*KMAX+1) - - REAL STRPSF(NST) - - REAL STMCX(NST),STMCY(NST) - CHARACTER ST_NAME(NST)*3,STMNAME(NST)*3,TCVT(NST)*95 - COMMON /STNAME/ST_NAME - COMMON /TCVIT/TCVT - COMMON /CHEN/KUNIT,ITIM,NTIM - - INTEGER ISTMCX1(NTIM,NST),ISTMCY1(NTIM,NST) - -! REAL(4) FHOUR,DUMMY(245) -! CHARACTER*8 LAB(4) -! DIMENSION IDATE(4) - DIMENSION DKM(IX,JX) - DIMENSION ENV(IX,JX,MTV2),ENV1(IX,JX,MTV3) - - real (4) vcrd(KMAX+1,nvcd) -cc - REAL PSL(IMAX,JMAX),PS3(IMAX,JMAX) - REAL(4), ALLOCATABLE :: HDATA30(:,:,:) - REAL, ALLOCATABLE :: PDAT30(:,:,:),PSL30(:,:),PS30(:,:) - REAL, ALLOCATABLE :: HSIG30(:,:,:),HP30(:,:,:),PDAT301(:,:,:) - REAL, ALLOCATABLE :: GLON30(:,:),GLAT30(:,:) -! REAL, ALLOCATABLE :: WK_S1(:,:),WK_S2(:,:),WK_G(:,:,:) -! REAL, ALLOCATABLE :: WK_S1(:,:),WK_G1(:,:,:) - -! COMMON /COEF1/LAB -! COMMON /COEF2/IDATE -! COMMON /COEF3/FHOUR,DUMMY -! COMMON /COEF5/NCNT,NCNT2 -C - DATA M/2,3,4,2,5,6,7,2,8,9,2/ -C - -! NCNT2 = 0 - - DO LO = 1,NSG - ING(LO) = 0 - JNG(LO) = 0 - ENDDO -C - CALL GLATS(JHF,COLRAD,WGT,WGTCS,RCS2) -C - PI=ASIN(1.)*2 - RAD=PI/180. -C - DO I = 1,IMAX - DO LL = 1,JHF - LLS = JMAX+1 - LL - GLAT(I,LL) = 90. - COLRAD(LL)/RAD - GLAT(I,LLS) = -GLAT(I,LL) - ENDDO - ENDDO -C - DLN = 360.0/FLOAT(IMAX) - DO J = 1,JMAX - DO LN = 1,IMAX - GLON(LN,J) = (LN-1) * DLN - ENDDO - ENDDO -C -c REWIND 12 -c REWIND 20 - -cql READ(20)LAB -c WRITE(6,124) LAB -124 FORMAT(4A8) -!1111 WRITE(KUNIT) LAB -! WRITE(6,210) (IDATE(I),I=1,4) -c 1 ,FHOUR,(DUMMY(K),K=1,2*KMAX+1) -!210 FORMAT(5X,' INPUT DATE AND FCST HOUR ',4I5,F7.1/(2X,G13.6)) -!1111 WRITE(KUNIT)FHOUR,(IDATE(I),I=1,4),DUMMY - -c WRITE(KUNIT)(SKIP2(NW),NW=1,MAXWV2) -C - DO I=1,NF - FK(I)=0.5/(1-COS(2.*PI/M(I))) - ENDDO -C -c READ(12, 233) KSTM -c 233 FORMAT(2x,I5) - KSTM = KSTM1 - - write(6,244) KSTM - 244 FORMAT('NUMBER OF STORMS: ',I5) - - IF ( NTIM == 3 ) THEN - INDX1=ITIM/3 - ELSE IF ( NTIM == 7 )THEN - INDX1=ITIM-2 - ENDIF - - K1STM=0 - DO I=1,NST - STMCX(I)=0. - STMCY(I)=0. - STMNAME(I)='NUL' - IF ( NTIM == 3 ) then - READ(30,442,end=436) - & (ISTMCY1(J,I),ISTMCX1(J,I),J=1,NTIM),STMNAME(I) - ELSEIF ( NTIM == 7 ) then - READ(30,443,end=436) - & (ISTMCY1(J,I),ISTMCX1(J,I),J=1,NTIM),STMNAME(I) - ENDIF - IFWRT=0 - DO J=1,NTIM - IF(ISTMCY1(J,I).EQ.0.and.ISTMCX1(J,I).EQ.0)THEN - IFWRT=1 - END IF - END DO - IF(IFWRT.EQ.1)THEN -! STMNAME(I)='NUL' - DO J=1,NTIM - ISTMCY1(J,I)=0. - ISTMCX1(J,I)=0. - END DO - END IF - STMCX(I)=360.-ISTMCX1(INDX1,I)*0.1 - STMCY(I)=ISTMCY1(INDX1,I)*0.1 - K1STM=K1STM+1 -c write(6,*)'QLIU test=',STMNAME(I),STMCX(I),STMCY(I) - END DO - 442 FORMAT(22x,6i4,25x,A3) - 443 FORMAT(14x,14i4,1x,A3) - 436 CONTINUE - - DO 788 KST=1,KSTM - -c IUT=89+KST - IUT=KST -C - DO K=1,MTV2 - DO J=1,JX - DO I=1,IX - ENV(I,J,K)=HDAT(I,J,K,KST) - END DO - END DO -! write(6,*)'data new K,KST = ',K,KST -! call maxmin(ENV(1,1,K),IX*JX,1,1,1,'ENV(I,J,K)') - END DO - -! write(6,*)' ENV=',ENV(41,41,1:67) - - PSC_MX=0. - DO J=1,JX - DO I=1,IX - IF(PSC_MX.LT.ENV(I,J,2))PSC_MX=ENV(I,J,2) - END DO - END DO - PSC_MX1=EXP(PSC_MX)*1000.+500.0 - write(6,*)'MAX SFC PRESS=',PSC_MX1 - - CALL SIG2P(KMAX,MTV2,MTV3,ENV(1,1,1),PDAT(1,1,1), - & PSC_MX1,HSIG,HP,KST,nvcd,idvc,idsl,vcrd) - - - NWRT1 = 0 - NWRT2 = 0 - NRED1 = 0 - NRED2 = 0 - - CALL READ2(IMAX,JMAX,NRED2,MTV,ZDATG,HDATA) - -c WRIT2(NWRT2,MTV,ZDATG,HDATA) - NWRT2 = 1 - - CALL READ1(IUT,NRED1,MTV3,ZG,PDAT) - - call maxmin(zg,ix*jx,1,1,1,'regional terrain') - IFLAG=0 -cnew DO J=1,JX -cnew DO I=1,IX -cnew IF(ZG(I,J).GT.200.)THEN -cnew IFLAG=1 -c write(6,*)'Max Terrain Height > 200 m' -cnew GO TO 443 -cnew END IF -cnew END DO -cnew END DO -cnew 443 CONTINUE -C - -C.. READ U, V at ~850 mb - -! K850=3+KMAX+(KMAX/4)*4+1 - K8501=1 - DIST2=ABS(SL(1)-0.85) - DO K=1,KMAX - DIST1=ABS(SL(K)-0.85) - IF(DIST1.LT.DIST2)THEN - K8501=K - DIST2=DIST1 - END IF - END DO - -! Be consistent with 2001 operational model for KMAX=42 -! set K8501=K8501+1 - IF(KMAX.EQ.42) K8501=K8501+1 - - K850=3+KMAX+4*(K8501-1)+1 - - IF(K8501.LT.1.OR.K8501.GT.KMAX)THEN - write(6,*)'K8501 is out of bound' - STOP - END IF - - write(6,*)'QLIUQLIU test',K850 - - NRED1 = NRED1 + K850 - DO J=1,JX - DO I=1,IX - U(I,J)=HDAT(I,J,K850+2,KST) - V(I,J)=HDAT(I,J,K850+3,KST) - END DO - END DO - -! call maxmin(U(1,1),IX*JX,1,1,1,'U(I,J)') -! call maxmin(V(1,1),IX*JX,1,1,1,'V(I,J)') -C -c qliu -c get Hurricane Center -c READ(12,123)SLON,SLAT,CLON_NHC,CLAT_NHC -c123 FORMAT(1X,4F10.2) - SLON = SLON_N(KST) - SLAT = SLAT_N(KST) - CLON_NHC = CLON_N(KST) - CLAT_NHC = CLAT_N(KST) - - RR1=1.E20 - DO J=1,JMAX - DO I=1,IMAX - A=GLON(I,J)-CLON_NHC - B=GLAT(I,J)-CLAT_NHC -! A=GLON(I,J)-CLON_NEW -! B=GLAT(I,J)-CLAT_NEW - RR2=A*A+B*B - IF(RR1.GT.RR2)THEN - RR1=RR2 - I30C=I - J30C=J - END IF - END DO - END DO - - NX30=((30./DLN)/2)*2+1 - NY30=((30./(GLAT(I30C,J30C-1)-GLAT(I30C,J30C)))/2)*2+1 - - print*,'I30C,J30C,NX30,NY30=',I30C,J30C,NX30,NY30 - print*,'CLON_NEW,CLAT_NEW,CLON_NHC,CLAT_NHC=', - & CLON_NEW,CLAT_NEW,CLON_NHC,CLAT_NHC - - I30S=I30C-(NX30-1)/2 - J30S=J30C-(NY30-1)/2 - I30E=I30S+NX30-1 - J30E=J30S+NY30-1 - - print*,'I30S,J30S,I30E,J30E=',I30S,J30S,I30E,J30E - - ALLOCATE ( HDATA30(NX30,NY30,MTV) ) - ALLOCATE ( PSL30(NX30,NY30),PS30(NX30,NY30) ) - ALLOCATE ( PDAT30(NX30,NY30,MTV3),PDAT301(NX30,NY30,MTV3) ) - ALLOCATE ( HSIG30(NX30,NY30,KMAX),HP30(NX30,NY30,2*KMAX+1) ) - ALLOCATE ( GLON30(NX30,NY30),GLAT30(NX30,NY30) ) - - DO J=J30S,J30E - JJ1=J-J30S+1 - DO I=I30S,I30E - II1=I-I30S+1 - PSL30(II1,JJ1)=PSLB(I,J) - PS30(II1,JJ1)=HDATA(I,J,2) - GLON30(II1,JJ1)=GLON(I,J) - GLAT30(II1,JJ1)=GLAT(I,J) - DO K=1,MTV - HDATA30(II1,JJ1,K)=HDATA(I,J,K) - END DO - END DO - END DO - - print*,'before CALL SIG2P30' -! print*,'test9997',PSL30(185,78) - - CALL SIG2P30(NX30,NY30,KMAX,MTV,MTV3,HDATA30(1,1,1), - & PDAT30(1,1,1),PSL30,PSC_MX1,HSIG30,HP30, - & KST,nvcd,idvc,idsl,vcrd) - - print*,'after CALL SIG2P30' -! print*,'test9998',PSL30(185,78) - - PDAT301=PDAT30 - - Z_MAX1=0. - DO J=1,NY30 - DO I=1,NX30 - if(PDAT30(I,J,1).gt.Z_MAX1)then - I_z1=I - J_z1=J - Z_MAX1=PDAT30(I,J,1) - end if - END DO - END DO - -! print*,'I,J,z_max1=',I_z1,J_z1,Z_MAX1 -! print*,'ql test333,PDAT301,PDAT30,1=',PDAT301(1,1,1),PDAT30(1,1,1) -! print*,'ql test333,PDAT301,PDAT30,2=',PDAT301(1,1,2),PDAT30(1,1,2) -! print*,'ql test333,PDAT301,PDAT30,3=',PDAT301(1,1,3),PDAT30(1,1,3) - -! DO K=4,MTV3 -! print*,'ql test333,PDAT301,PDAT30,k=',k,PDAT301(1,1,k), -! & PDAT30(1,1,k) -! END DO - CLON = SLON+20. - CLAT = SLAT+20. -c write(6,*)'CLON, CLAT, SLON, SLAT=',CLON, CLAT, SLON, SLAT -c write(6,*)'CLON_NHC,CLAT_NHC=',CLON_NHC,CLAT_NHC -c fact=cos(CLAT*rad) - fact=1.0 - do j=1,jx - do i=1,ix -! East-West wind in new coordinate (phi,theta) -! this conversion only affects Hurrican Center determination and R0 - U(I,J)=U(I,J)/fact - end do - end do -C.. DO ZONAL FILTER -C -!$omp parallel do -!$omp& private(I,J,N,XTU,XTV) - CYC_100: DO J=1,JX !DO 100 J=1,JX - DO N=1,NF - XTU(1,N) = U(1,J) - XTU(IX,N) = U(IX,J) - XTV(1,N) = V(1,J) - XTV(IX,N) = V(IX,J) - ENDDO -C - DO I=2,IX-1 - XTU(I,1) = U(I,J)+FK(1)*(U(I-1,J)+U(I+1,J)-2.*U(I,J)) - XTV(I,1) = V(I,J)+FK(1)*(V(I-1,J)+V(I+1,J)-2.*V(I,J)) - ENDDO -C - DO N=2,NF - DO I=2,IX-1 - XTU(I,N)=XTU(I,N-1)+FK(N)*(XTU(I-1,N-1)+XTU(I+1,N-1)-2. - 1 *XTU(I,N-1)) - XTV(I,N)=XTV(I,N-1)+FK(N)*(XTV(I-1,N-1)+XTV(I+1,N-1)-2. - 1 *XTV(I,N-1)) - ENDDO - ENDDO -C - DO I=1,IX - US(I,J) = XTU(I,NF) - VS(I,J) = XTV(I,NF) - ENDDO -C - ENDDO CYC_100 -!100 CONTINUE -C -C.. DO MERIDIONAL FILTER -C -!$omp parallel do -!$omp& private(I,J,N,YTU,YTV) - CYC_200: DO I=1,IX ! DO 200 I=1,IX -C - DO N=1,NF - YTU(1,N) = US(I,1) - YTU(JX,N) = US(I,JX) - YTV(1,N) = VS(I,1) - YTV(JX,N) = VS(I,JX) - ENDDO -C - DO J = 2 , JX-1 - YTU(J,1) = US(I,J) + FK(1)*(US(I,J-1) + US(I,J+1) - * -2.*US(I,J)) - YTV(J,1) = VS(I,J) + FK(1)*(VS(I,J-1) + VS(I,J+1) - * -2.*VS(I,J)) - ENDDO -CC - DO N = 2 , NF - DO J = 2 , JX-1 - YTU(J,N) = YTU(J,N-1) + FK(N)*(YTU(J-1,N-1) + - * YTU(J+1,N-1) - 2.*YTU(J,N-1)) - YTV(J,N) = YTV(J,N-1) + FK(N)*(YTV(J-1,N-1) + - * YTV(J+1,N-1) - 2.*YTV(J,N-1)) - ENDDO - ENDDO -C - DO J = 1 , JX - US(I,J) = YTU(J,NF) - VS(I,J) = YTV(J,NF) - ENDDO - ENDDO CYC_200 -!200 CONTINUE -C -C.. GET THE DISTURBANCE FIELD -C - DO I=1,IX - DO J=1,JX - UD(I,J) = U(I,J) - US(I,J) - VD(I,J) = V(I,J) - VS(I,J) - ENDDO - ENDDO -c WRITE(39) ((U(I,J),I=1,IX),J=Jx,1,-1) -c WRITE(39) ((V(I,J),I=1,IX),J=Jx,1,-1) -c WRITE(39) ((US(I,J),I=1,IX),J=Jx,1,-1) -c WRITE(39) ((VS(I,J),I=1,IX),J=Jx,1,-1) -c WRITE(39) ((UD(I,J),I=1,IX),J=Jx,1,-1) -c WRITE(39) ((VD(I,J),I=1,IX),J=Jx,1,-1) -C -C.. FIND NEW VORTEX CENTER -C - DO I=1,IX - ALON(I)=SLON+(I-1) - END DO - DO J=1,JX - ALAT(J)=SLAT+(J-1) - END DO - -c CALL FIND_NEWCT1(UD,VD) - CALL FIND_NEWCT(UD,VD) - - ICHEK=0 - CLON_TIM=0. - CLAT_TIM=0. - DO I=1,K1STM - IF(STMNAME(I).EQ.ST_NAME(KST))THEN - CLON_TIM=STMCX(I) - CLAT_TIM=STMCY(I) - ICHEK=1 - GO TO 446 - END IF - END DO - 446 CONTINUE - IF((ICHEK.EQ.1).AND.(ABS(CLON_TIM).LT.359.5))THEN - CLON_NEW=CLON_TIM - CLAT_NEW=CLAT_TIM - ELSE - write(6,*)'GFDL CENTER= ',ITIM,'h ',CLON_NEW,CLAT_NEW - CLON_NEW=CLON_NHC - CLAT_NEW=CLAT_NHC - ENDIF - -C -C.. CALCULATE TANGENTIAL WIND AROUND CIRCLE -C 24 DIRECTION, RADIALLY 0.1DEG INTERVAL -C - CALL TWIND(UD,VD,TW) -C -C.. CALCULATE STARTING POINT AT EACH DIRECTION -C - CALL STRT_PT(RS,TW,RFAVG) -C -C.. DETERMINE FILTER DOMAIN D0 (=1.25*Rf) -C - CALL FILTER(RS,TW,RF,RFAVG,STRPSF,KST) - - AMDX=CLON_NHC-CLON_NEW - AMDY=CLAT_NHC-CLAT_NEW - MDX=IFIX((CLON_NHC-CLON_NEW)/DLN) - - IF(ITIM.EQ.6)THEN - WRITE(62,65)TCVT(KST)(1:32), - & CLON_NHC,CLAT_NHC,CLON_NEW, - & CLAT_NEW,CLON_TIM,CLAT_TIM,AMDX,AMDY, - & SQRT(AMDX*AMDX+AMDY*AMDY) - 65 FORMAT(/'STORM NAME: ',A32, - & /' OBSERVED CENTER POSITION: ',2F10.2, - & /' MODEL CENTER POSITION : ',2F10.2, - & /' MODEL CENTER POSITION (TIM): ',2F10.2, - & /' RELOCATION DISTANCE (DEGREE): ',3F10.2) - DO I=1,K1STM - IF(STMNAME(I).EQ.ST_NAME(KST))THEN - IFWRT=0 - DO J=1,NTIM - IF(ISTMCY1(J,I).EQ.0.and.ISTMCX1(J,I).EQ.0)THEN - IFWRT=1 - END IF - END DO - IF(IFWRT.EQ.1)THEN - WRITE(62,76)TCVT(KST)(1:32) - ELSE - WRITE(62,77)TCVT(KST)(1:32) - END IF - 76 FORMAT(/' STORM: ',A32,10x,' is bogused') - 77 FORMAT(/' STORM: ',A32,10x) - WRITE(62,79) - & (ISTMCY1(J,I),ISTMCX1(J,I),J=1,NTIM),STMNAME(I) - 79 FORMAT(/' TRACKER OUTPUT: ',i4,5x,A3) - END IF - END DO - END IF - -c test by qliu -c MDX=MDX+50 -c AMDX=AMDX+50*DLN - - DO J=1,JMAX-1 - IF(CLAT_NHC.LT.GLAT(1,J).and. - & CLAT_NHC.GE.GLAT(1,J+1))THEN - MNHC=J - IF(CLAT_NHC.LT.0.5*(GLAT(1,J)+GLAT(1,J+1)))MNHC=J+1 - GO TO 566 - END IF - END DO - 566 CONTINUE - DO J=1,JMAX-1 - IF(CLAT_NEW.LT.GLAT(1,J).and. - & CLAT_NEW.GE.GLAT(1,J+1))THEN - MNEW=J - IF(CLAT_NEW.LT.0.5*(GLAT(1,J)+GLAT(1,J+1)))MNEW=J+1 - GO TO 577 - END IF - END DO - 577 CONTINUE - MDY=MNHC-MNEW - write(6,*)'MDX,MDY,MNHC,MNEW=',MDX,MDY,MNHC,MNEW - write(6,*)'AMDX,AMDY=',AMDX,AMDY - write(6,*)'CLON_NHC,CLAT_NHC=',CLON_NHC,CLAT_NHC - write(6,*)'CLON_NEW,CLAT_NEW=',CLON_NEW,CLAT_NEW - RDIST2=AMDX*AMDX+AMDY*AMDY - IF(RDIST2.LE.0.02)THEN - write(6,*)' ' - write(6,*)' FORECAST TIME= ',ITIM,'h ', - 1 ', STORM NAME= ',ST_NAME(KST) - write(6,*)' CENTER DISTANCE is less than 15 km', - 1 ', storm is not relocated' - AMDX=0. - AMDY=0. - MDX=0 - MDY=0 -c IF(KST.NE.KSTM)THEN -c DO I=1,113 -c READ(IUT1) DATG -c WRITE(IUT2) DATG -c END DO -c GO TO 788 -c END IF - ELSE - write(6,*)' ' - write(6,*)' FORECAST TIME= ',ITIM,'h', - 1 ' STORM NAME= ',ST_NAME(KST) - write(6,*)' Center Distance = ',SQRT(RDIST2),' Deg.', - 3 ', relocation starts ...... ' - - END IF -c - IB=0 - IB5=0 - ING5=0 - JNG5=0 - - IB6=0 - ING6=0 - JNG6=0 - - RRIJ=0. -C - DO J=1,JMAX - DO I=1,IMAX - A = GLON(I,J) - CLON_NEW - B = GLAT(I,J) - CLAT_NEW - R = SQRT(A**2. + B**2.) - IF(R.EQ.0.) GO TO 444 - TH = ACOS(A/R) / RAD - IF(B.LT.0.) TH = 360-TH -C - IF(TH.LE.7.5 .OR. TH.GT.352.5 ) IC = 1 - DO M2=2,24 - IF((TH.GT.(15.*(M2-1)-7.5)).and. - & (TH.LE.(15.*M2-7.5)))IC=M2 - END DO -C - IF(R.LT.R0(IC)) THEN - IB = IB+1 - ING(IB) = I - JNG(IB) = J - ENDIF -C - IF((R.LT.R0(IC)).and.R.GT.(R0(IC)-0.6))THEN - IB5=IB5+1 - ING5(IB5)=I - JNG5(IB5)=J - WT2=min(1.0,(R0(IC)-R)/0.6) - RRIJ(IB5)=WT2*WT2*(3.-2.*WT2) - END IF - - IF((R.LT.R0(IC)).and.R.GT.(R0(IC)-0.5))THEN - IB6=IB6+1 - ING6(IB6)=I - JNG6(IB6)=J - END IF - - - - GO TO 22 -C -444 IB = IB+1 - ING(IB) = I - JNG(IB) = J -22 CONTINUE - ENDDO - ENDDO -C - CALL landcmsk(IMAX,JMAX,GLON,GLAT,ZDATG,IFLAG,lsflag,kst) - -c temp relocation turned on -c IFLAG = 0 - -c Check if the syndata need to be called - - IF(ITIM.EQ.3)THEN - DO I=1,K1STM - IF(STMNAME(I).EQ.ST_NAME(KST))THEN - IFWRT=0 - DO J=1,NTIM - IF(ISTMCY1(J,I).EQ.0.and.ISTMCX1(J,I).EQ.0)THEN - IFWRT=1 - END IF - END DO - IF(IFWRT.EQ.1)THEN - WRITE(65,101) TCVT(KST) - END IF - 101 FORMAT(A95) - END IF - END DO - END IF - - - write(6,*)'GAUSSIAN GRID # WITHIN R0 ',IB -! DO I = 1,IB -! write(6,*)'GAUSSIAN GRID WITHIN R0, LAT,LON ',ING(I), -! 1 JNG(I),GLAT(ING(I),JNG(I)),GLON(ING(I),JNG(I)) -! write(6,*)'GAUSSIAN GRID WITHIN R0 ',ING(I),JNG(I) -! ENDDO - -C.. SETTING VALUE for xvect, yvect, a(,), capd2 - - call rodist - - call amatrix -c -c REWIND IUT - - KMP=2*KMAX+1 - KDIV1=3+KMP - KQ1=KDIV1+4*KMP - - NRED1 = 0 - - IG = 0 - DO 777 IV = 1,MTV3 - - IREM = -22 -C - CALL READ1(IUT,NRED1,MTV3,SKIP,PDAT) -C - DO J=1,JX - DO I=1,IX - ENV1(I,J,IV) = SKIP(I,J) - ENDDO - ENDDO - -! write(6,*)'pressure data new K = ',IV -! call maxmin(ENV1(1,1,IV),IX*JX,1,1,1,'ENV1(I,J,K)') - - IF(IV.GT.KDIV1.AND.IV.LE.KQ1)IREM=MOD(IV-KDIV1,4) - IF((IV.GE.3.AND.IV.LE.KDIV1).OR.(IV.GT.KQ1).OR. - 1 (IREM.EQ.1.OR.IREM.EQ.2)) THEN - IG = IG+1 -! write(6,*)'ORIGINAL VARIABLE # IS ',IV -! write(6,*)'VARIABLE # IS ',IG - -c added by Qingfu Liu -c obtain the disturbance field - - DO J=1,JX - DO I=1,IX - U(I,J)=SKIP(I,J) - END DO - END DO -c -c First smooth in east-west direction -c -!$omp parallel do -!$omp& private(I,J,N,XTU) - CYC_107: DO J=1,JX ! DO 107 J=1,JX - DO N=1,NF - XTU(1,N) = U(1,J) - XTU(IX,N) = U(IX,J) - ENDDO -C - DO I=2,IX-1 - XTU(I,1) = U(I,J)+FK(1)*(U(I-1,J)+U(I+1,J)-2.*U(I,J)) - ENDDO -C - DO N=2,NF - DO I=2,IX-1 - XTU(I,N)=XTU(I,N-1)+FK(N)*(XTU(I-1,N-1)+XTU(I+1,N-1)-2. - 1 *XTU(I,N-1)) - ENDDO - ENDDO -C - DO I=1,IX - US(I,J) = XTU(I,NF) - ENDDO -C - ENDDO CYC_107 -! 107 CONTINUE -C -C.. DO MERIDIONAL FILTER -C -!$omp parallel do -!$omp& private(I,J,N,YTU) - CYC_207: DO I=1,IX ! DO 207 I=1,IX -C - DO N=1,NF - YTU(1,N) = US(I,1) - YTU(JX,N) = US(I,JX) - ENDDO -C - DO J = 2 , JX-1 - YTU(J,1) = US(I,J) + FK(1)*(US(I,J-1) + US(I,J+1) - * -2.*US(I,J)) - ENDDO -CC - DO N = 2 , NF - DO J = 2 , JX-1 - YTU(J,N) = YTU(J,N-1) + FK(N)*(YTU(J-1,N-1) + - * YTU(J+1,N-1) - 2.*YTU(J,N-1)) - ENDDO - ENDDO -C - DO J = 1 , JX - US(I,J) = YTU(J,NF) - ENDDO - ENDDO CYC_207 -! 207 CONTINUE -C -C.. GET THE DISTURBANCE FIELD -C - DO I=1,IX - DO J=1,JX - DKY(I,J) = U(I,J) - US(I,J) - ENDDO - ENDDO - - DKM=DKY - CALL SEPAR(DKY,DKM) - - DO J=1,JX - DO I=1,IX - SKIP(I,J)=DKM(I,J) -c SKIP(I,J)=U(I,J) - DKY(I,J) = DKM(I,J) + US(I,J) -c DKY(I,J) = U(I,J) - ENDDO - ENDDO - - - DO J=1,JX - DO I=1,IX - ENV1(I,J,IV) = DKY(I,J) -! ENV1(I,J,IV) = DKY(I,J)-PDAT(I,J,IV) - ENDDO - ENDDO - - ENDIF - - 777 CONTINUE - -! ENV=0. - -! CALL P2SIG(KMAX,MTV2,MTV3,ENV(1,1,1),ENV1(1,1,1), -! & PDAT(1,1,1),HDAT(1,1,1,KST),PSC_MX1,HSIG,HP,KST, -! & nvcd,idvc,idsl,vcrd) - -cnew K=1,2 and the U,V field was doubled here, but never used later -! DO K=1,MTV2 -! DO J=1,JX -! DO I=1,IX -! ENV(I,J,K)=ENV(I,J,K)+HDAT(I,J,K,KST) -! END DO -! END DO -! write(6,*)'test new K,KST = ',K,KST -! call maxmin(ENV(1,1,K),IX*JX,1,1,1,'ENV(I,J,K)') -! call maxmin(HDAT(1,1,K,KST),IX*JX,1,1,1,'HDAT(I,J,K,KST)') -! END DO -cnew - - KDIV2=3+KMAX - KQ2=KDIV2+4*KMAX - - IG = 0 - DO 781 IV = 1,MTV3 - - IREM = -22 -C - IF(IV.GT.KDIV1.AND.IV.LE.KQ1)IREM=MOD(IV-KDIV1,4) - IF((IV.GE.3.AND.IV.LE.KDIV1).OR.(IV.GT.KQ1).OR. - 1 (IREM.EQ.1.OR.IREM.EQ.2)) THEN -! IF(IV.GT.KDIV2.AND.IV.LE.KQ2)IREM=MOD(IV-KDIV2,4) -! IF((IV.GE.3.AND.IV.LE.KDIV2).OR.(IV.GT.KQ2).OR. -! 1 (IREM.EQ.1.OR.IREM.EQ.2)) THEN -!! IG = IG+1 - IG = IV - - DO J=1,JX - DO I=1,IX - DKY(I,J) = ENV1(I,J,IV) - ENDDO - ENDDO - -! print*,'IV,KST=',IV,KST - -! if(IV.LT.5)then -! print*,'ql test444,PDAT301,ENV1,IV=',IV, -! $ PDAT301(1,1,IV),DKY(1,1) !,PSL30(185,78),PS30(185,78) -! end if -! call maxmin(PDAT301(1,1,IV),IX*JX,1,1,1,'PDAT301(I,J,IV)') - - CALL GMOVE3(KST,KMAX,IMAX,JMAX,NX30,NY30,MTV3,I30S,J30S,T00, - 1 PDAT301,DKY,IG,IV,IFLAG,PSLB,ZDATG,GLON30,GLAT30,PSL30,PS30, - 2 idvm,inptyp,NSG5,IB5,IB6,ING5,JNG5,ING6,JNG6,RRIJ) - -c CALL GMOVE(KST,MWAVE,MAXWV2,MTV,MTV1,HDATA,SKIP2,DKY, -c 1 IG,IFLAG,PSLB) - -! if(IV.LT.5)then -! print*,'ql test444,PDAT301,PS30,IV=',IV, -! $ PDAT301(1,1,IV) !,PS30(185,78),PSL30(185,78),PSLB(1,1) -! end if -! call maxmin(PDAT301(1,1,IV),IX*JX,1,1,1,'PDAT301(I,J,IV)') - - ENDIF - - 781 CONTINUE - - DO J=1,NY30 - DO I=1,NX30 - PDAT301(i,j,2)=PS30(i,j) - PDAT30(i,j,2)=PS30(i,j) - P_TEMP1=PDAT301(i,j,3)-PDAT30(i,j,3) - PDAT30(i,j,3)=PDAT301(i,j,3) - PDAT301(i,j,3)=P_TEMP1 - END DO - END DO - print*,'ql test111,PDAT301,PDAT30,1=',PDAT301(1,1,1),PDAT30(1,1,1) - print*,'ql test111,PDAT301,PDAT30,2=',PDAT301(1,1,2),PDAT30(1,1,2) - print*,'ql test111,PDAT301,PDAT30,3=',PDAT301(1,1,3),PDAT30(1,1,3) - DO K=4,MTV3 - DO J=1,NY30 - DO I=1,NX30 - PDAT301(i,j,k)=PDAT301(i,j,k)-PDAT30(i,j,k) - END DO - END DO -! print*,'ql test111,PDAT301,PDAT30,k=',k,PDAT301(1,1,k), -! & PDAT30(1,1,k) - END DO - -! print*,'call before P2SIG30' - - CALL P2SIG30(NX30,NY30,KMAX,MTV,MTV3, - & PDAT301(1,1,1),PDAT30(1,1,1),HDATA30(1,1,1),PSL30, - & PSC_MX1,HSIG30,HP30,KST,nvcd,idvc,idsl,vcrd) - -! print*,'call after P2SIG30' - - DO K=1,MTV -! if(k.lt.4)print*,'ql test222,HDATA,HDATA30,k=',k, -! & HDATA(I30S,J30S,k),HDATA30(1,1,k) - DO J=J30S,J30E - JJ1=J-J30S+1 - DO I=I30S,I30E - II1=I-I30S+1 - HDATA(I,J,K)=HDATA30(II1,JJ1,K) - END DO - END DO - END DO - - DO J=1,JMAX - DO I=1,IMAX - PS3(I,J)=HDATA(I,J,2) - END DO - END DO - DO J=J30S,J30E - JJ1=J-J30S+1 - DO I=I30S,I30E - II1=I-I30S+1 - PS3(I,J)=PS30(II1,JJ1) - PSLB(I,J)=PSL30(II1,JJ1) - END DO - END DO - -! print*,'ql test888,HDATA,PS30,PS3,,2=',HDATA(I30S,J30S,2), -! & PS30(1,1),PS3(1,1) - - deallocate (HDATA30,PSL30,PS30,PDAT30,PDAT301,HSIG30,HP30) - deallocate (GLON30,GLAT30) - - 788 CONTINUE - -C - RDIST2 = AMDX*AMDX + AMDY*AMDY - IF(RDIST2.LE.0.02)THEN - write(6,*)'TIME= ',ITIM,'h, Model Center is not relocated' - ELSE - write(6,*)'TIME= ',ITIM,'h, vortex relocation is completed' - END IF - - RETURN - END -C - SUBROUTINE FIND_NEWCT(UD,VD) - PARAMETER (IR=15,IT=24,IX=41,JX=41,ID=7,JD=7) - DIMENSION TNMX(ID,JD),UD(IX,JX),VD(IX,JX) - DIMENSION WTM(IR),R0(IT) - COMMON /POSIT/CLON_NEW,CLAT_NEW,SLON,SLAT,CLON,CLAT,RAD - COMMON /vect/R0,XVECT(IT),YVECT(IT) -c COMMON /CT/SLON,SLAT,CLON,CLAT,RAD -c COMMON /GA/CLON_NEW,CLAT_NEW,R0 -C - PI=ASIN(1.)*2. - RAD=PI/180. -C - XLAT = CLAT-3. - XLON = CLON-3. -c write(6,*)'STARTING LAT, LON AT FIND NEW CENTER ',XLAT,XLON -C - DO I=1,ID - DO J=1,JD - TNMX(I,J) = 0. - BLON = XLON + (I-1) - BLAT = XLAT + (J-1) -C -C.. CALCULATE TANGENTIAL WIND EVERY 1 deg INTERVAL -C.. 7*7 deg AROUND 1ST 1ST GUESS VORTEX CENTER -C - DO 10 JL=1,IR - WTS= 0. - DO 20 IL=1,IT - DR = JL - DD = (IL-1)*15*RAD - DLON = DR*COS(DD) - DLAT = DR*SIN(DD) - TLON = BLON + DLON - TLAT = BLAT + DLAT -C.. INTERPOLATION U, V AT TLON,TLAT AND CLACULATE TANGENTIAL WIND - IDX = IFIX(TLON) - SLON + 1 - IDY = IFIX(TLAT) - SLAT + 1 - DXX = TLON - IFIX(TLON) - DYY = TLAT - IFIX(TLAT) -C - X1 = UD(IDX ,IDY+1)*DYY + UD(IDX ,IDY)*(1-DYY) - X2 = UD(IDX+1,IDY+1)*DYY + UD(IDX+1,IDY)*(1-DYY) - Y1 = UD(IDX+1,IDY )*DXX + UD(IDX,IDY )*(1-DXX) - Y2 = UD(IDX+1,IDY+1)*DXX + UD(IDX,IDY+1)*(1-DXX) - UT = (X1*(1-DXX)+X2*DXX + Y1*(1-DYY)+Y2*DYY)/2. - IF(IL.EQ.0.OR.IL.EQ.13) UT = Y1 - IF(IL.EQ.7.OR.IL.EQ.19) UT = X1 -C - X1 = VD(IDX ,IDY+1)*DYY + VD(IDX ,IDY)*(1-DYY) - X2 = VD(IDX+1,IDY+1)*DYY + VD(IDX+1,IDY)*(1-DYY) - Y1 = VD(IDX+1,IDY )*DXX + VD(IDX,IDY )*(1-DXX) - Y2 = VD(IDX+1,IDY+1)*DXX + VD(IDX,IDY+1)*(1-DXX) - VT = (X1*(1-DXX)+X2*DXX + Y1*(1-DYY)+Y2*DYY)/2. - IF(IL.EQ.0.OR.IL.EQ.13) VT = Y1 - IF(IL.EQ.7.OR.IL.EQ.19) VT = X1 -C.. TANGENTIAL WIND - WT = -SIN(DD)*UT + COS(DD)*VT - WTS = WTS+WT -20 CONTINUE - WTM(JL) = WTS/24. -10 CONTINUE -C -C Southern Hemisphere - IF(CLAT_NEW.LT.0)THEN - DO JL=1,IR - WTM(JL)=-WTM(JL) - END DO - END IF -C EnD SH - - TX = -10000000. - DO KL = 1,IR - IF(WTM(KL).GE.TX) THEN - TX = WTM(KL) - ENDIF - ENDDO -C - TNMX(I,J) = TX - ENDDO - ENDDO - - -C.. FIND NEW CENTER - TTX = -1000000. - DO I=1,ID - DO J=1,JD - IF(TNMX(I,J).GE.TTX) THEN - TTX = TNMX(I,J) - NIC = I - NJC = J - ENDIF - ENDDO - ENDDO -C - CLAT_NEW = XLAT + (NJC-1) - CLON_NEW = XLON + (NIC-1) -C - write(6,*)'NEW CENTER, I, J IS ',NIC,NJC - write(6,*)'NEW CENTER, LAT,LON IS ',CLAT_NEW,CLON_NEW - write(6,*)'MAX TAN. WIND AT NEW CENTER IS ',TTX -C - RETURN - END -C - SUBROUTINE TWIND(UD,VD,TW) -C - PARAMETER (IX=41,JX=41,NF=11,IT=24,IR=120) - DIMENSION UD(IX,JX),VD(IX,JX),TW(IT,IR),R0(IT) - COMMON /POSIT/CLON_NEW,CLAT_NEW,SLON,SLAT,CLON,CLAT,RAD - COMMON /vect/R0,XVECT(IT),YVECT(IT) -c COMMON /CT/SLON,SLAT,CLON,CLAT,RAD -c COMMON /GA/CLON_NEW,CLAT_NEW,R0 -C -!$omp parallel do -!$omp& private(I,J,DR,DD,DLON,DLAT,TLON,TLAT,IDX, -!$omp& IDY,DXX,DYY,X1,X2,Y1,Y2,UT,VT) - DO J=1,IR - DO I=1,IT -C.. DETERMINE LAT, LON AREOUND CIRCLE - DR = 0.1*J - DD = (I-1)*15.*RAD - DLON = DR*COS(DD) - DLAT = DR*SIN(DD) - TLON = CLON_NEW + DLON - TLAT = CLAT_NEW + DLAT -C.. INTERPOLATION U, V AT TLON,TLAT AND CLACULATE TANGENTIAL WIND - IDX = IFIX(TLON) - SLON + 1 - IDY = IFIX(TLAT) - SLAT + 1 - DXX = TLON - IFIX(TLON) - DYY = TLAT - IFIX(TLAT) -C - X1 = UD(IDX ,IDY+1)*DYY + UD(IDX ,IDY)*(1-DYY) - X2 = UD(IDX+1,IDY+1)*DYY + UD(IDX+1,IDY)*(1-DYY) - Y1 = UD(IDX+1,IDY )*DXX + UD(IDX,IDY )*(1-DXX) - Y2 = UD(IDX+1,IDY+1)*DXX + UD(IDX,IDY+1)*(1-DXX) - UT = (X1*(1-DXX)+X2*DXX + Y1*(1-DYY)+Y2*DYY)/2. - IF(I.EQ.0.OR.I.EQ.13) UT = Y1 - IF(I.EQ.7.OR.I.EQ.19) UT = X1 -C - X1 = VD(IDX ,IDY+1)*DYY + VD(IDX ,IDY)*(1-DYY) - X2 = VD(IDX+1,IDY+1)*DYY + VD(IDX+1,IDY)*(1-DYY) - Y1 = VD(IDX+1,IDY )*DXX + VD(IDX,IDY )*(1-DXX) - Y2 = VD(IDX+1,IDY+1)*DXX + VD(IDX,IDY+1)*(1-DXX) - VT = (X1*(1-DXX)+X2*DXX + Y1*(1-DYY)+Y2*DYY)/2. - IF(I.EQ.0.OR.I.EQ.13) VT = Y1 - IF(I.EQ.7.OR.I.EQ.19) VT = X1 -C.. TANGENTIAL WIND - TW(I,J) = -SIN(DD)*UT + COS(DD)*VT -C - ENDDO - ENDDO -C SH - IF(CLAT_NEW.LT.0)THEN - DO J=1,IR - DO I=1,IT - TW(I,J)=-TW(I,J) - ENDDO - ENDDO - END IF -C End SH -C - RETURN - END -C - SUBROUTINE STRT_PT(RMX,TW,RFAVG) -C - PARAMETER (IX=41,JX=41,NF=11,IT=24,IR=120) - DIMENSION TW(IT,IR),TWM(IR),TMXX(IT),RMX(IT) - REAL JMX -C - DO I=1,IR - TWM(I) = 0. - ENDDO -C -C.. CALCULATE MEAN TANGENTIAL WIND -C - DO 10 J=1,IR - TM=0. - DO 20 I=1,IT - TM = TM + TW(I,J) -20 CONTINUE - TWM(J) = TM/24. -c write(6,*)'MEAN TANGENTIAL WIND ',J,TWM(J) -10 CONTINUE -C -C.. FIND MAXIMUM TANGENTIAL WIND RADIUS -C - TMX=-100000000000. - DO J=1,IR - IF(TWM(J).GE.TMX) THEN - TMX=TWM(J) - JMX = J*0.1 - ENDIF - ENDDO -C - write(6,*)'MAXIMUM TANGENTIAL WIND RADIUS ',JMX - JJ=IFIX(JMX*10.) - write(6,*)'MAXIMUM TANGENTIAL WIND SPEED ',TWM(JJ) -C - JXX = 15 * JMX -c write(6,*)'JXX, 15*JMX is ',JXX -C - ICK = 1 - CNT = 0.000004 -c write(6,*)'CNT ',CNT -C - DO 30 K=JXX,120 - IF(TWM(K).GE.6..OR.TWM(K).LT.3.) GO TO 30 - DXX = 10000. - DV = TWM(K) - TWM(min(K+1,ir)) - DVDR = DV/DXX - IF(DVDR.LT.CNT) ICK = ICK+1 - IF(ICK.EQ.3) THEN - RF=K*0.1 - GO TO 40 - ENDIF -30 CONTINUE -C -40 CONTINUE - IF(ICK.NE.3) THEN - DO IK=JXX,120 - IF(TWM(IK).LE.3) THEN - RF = IK*0.1 - ICK=3 - GO TO 50 - ENDIF - ENDDO - ENDIF -C -50 CONTINUE - IF(ICK.NE.3) RF = 12. -C - RFAVG = RF -c -C.. CALCULATE Ra, Rb.. REF. KURIHARA ET AL. 1995 -C - RA = IFIX((0.5 * JMX)*10.)/10. - RB = IFIX((0.75 * JMX + 0.25 * RF)*10.)/10. - IRA = IFIX(RA*10.+0.5) - IRB = IFIX(RB*10.+0.5) -C -c write(6,*)'Ra, Rb, Rf ', RA,RB,RF -C -C.. DETERMINE STARTING POINT FOR EVERY 24 DIRECTION -C - DO I=1,IT - TMXX(I) = -100000000. - DO J=1,IR - IF(TW(I,J).GE.TMXX(I)) THEN - TMXX(I) = TW(I,J) - RMX(I) = J*0.1*1.1 - ENDIF - ENDDO - ENDDO -C -c DO I=1,IT -c write(6,*)'I, MX TANGENTIAL WIND RADIUS ',I,RMX(I),TMXX(I) -c ENDDO -C - DO I=1,IT - IF (RMX(I).GT.RB.OR.RMX(I).LT.RA) THEN - TMX = -10000000. - DO KK=IRA,IRB - IF(TW(I,KK).GE.TMX) RM = KK * 0.1 * 1.1 - ENDDO - MR = IFIX(RM*10. + 0.5) - ICL=0 - DO LL = MR,IRB - IF(TW(I,LL).LT.0.) ICL=ICL+1 - ENDDO - IF(ICL.EQ.0) RMX(I) = RM*1.1 - ENDIF - ENDDO -C -c DO I=1,IT -c write(6,*)'I, RST ',I,RMX(I) -c ENDDO -C - RETURN - END -C - SUBROUTINE FILTER(RS,TW,RF,RFAVG,STRPSF,KST) - PARAMETER (IX=41,JX=41,IT=24,IR=120,NST=10) -C - DIMENSION RS(IT),TW(IT,IR),RF(IT),R0(IT),IST(IT) - REAL STRPSF(NST) - COMMON /vect/R0,XVECT(IT),YVECT(IT) -c COMMON /GA/CLON_NEW,CLAT_NEW,R0 -C - ICK = 1 - CNT = 0.000004 -c write(6,*)'CNT ',CNT -C - DO I=1,IT - IST(I) = IFIX(RS(I)*10) -c write(6,*)'STARTING POINT ',I,IST(I) - ENDDO -C - DO 100 I=1,IT - IS = IST(I) -C - DO 30 K=IS,IR - IF(TW(I,K).GE.6..OR.TW(I,K).LT.3.) GO TO 30 - DXX = 10000. - DV = TW(I,K) - TW(I,min(K+1,ir)) - DVDR = DV/DXX - IF(DVDR.LT.CNT) THEN - ICK = ICK+1 - ENDIF - IF(ICK.EQ.3) THEN - RF(I)=K*0.1 + 0.0000001 -c write(6,*)'1st Catagory ',I - GO TO 100 - ENDIF -30 CONTINUE -C -40 CONTINUE - DO IK=IS,IR - IF(TW(I,IK).LE.3) THEN - RF(I) = IK*0.1 + 0.00000001 -c write(6,*)'2nd Catagory ',I - GO TO 100 - ENDIF - ENDDO -C -50 CONTINUE -c write(6,*)'3rd Catagory ',I - RF(I) = 12. -100 CONTINUE -C -c RMAX=0. - DO I=1,IT - R0(I) = 1.25 * RF(I) -!! NEW -! IF(R0(I).LT.2.0)R0(I)=2.0 - IF(R0(I).LT.3.0)R0(I)=3.0 - IF(R0(I).LT.(1.2*STRPSF(KST)))R0(I)=1.2*STRPSF(KST) - IF(R0(I).GT.(1.5*STRPSF(KST)))R0(I)=1.5*STRPSF(KST) - IF(R0(I).GT.11.0)R0(I)=11.0 -c IF(RMAX.LT.R0(I))RMAX=R0(I) - write(6,*)'R0,Rf AT EACH DIRECTION ',I,R0(I),RF(I) - ENDDO -C test for circular domain -c DO I=1,IT -c R0(I)=RMAX -cc R0(I) = RFAVG*1.25 -c write(6,*)'R0,Rf AT EACH DIRECTION ',I,R0(I),RF(I) -c ENDDO -C - RETURN - END -C - SUBROUTINE GMOVE3(KST,KMAX,IMAX,JMAX,IGU,JGU,MTV3,I30S,J30S,T00, - 1 PDAT30,DM1,IS1,IV,IFLAG,PSLB,ZDATG,GLON30,GLAT30,PSL30,PS30, - 2 idvm,inptyp,NSG5,IB5,IB6,ING5,JNG5,ING6,JNG6,RRIJ) - -c SUBROUTINE GMOVE(KST,MWAVE,MAXWV2,MTV,MTV1,HDATA,DM1, -c 1 IS1,IFLAG,PSLB) -c PARAMETER (IX=41,JX=41,IGU=384,JGU=190) - PARAMETER (IX=41,JX=41) - PARAMETER (IT=24,NSG=54000) -C - integer inptyp - integer * 4 idvm - DIMENSION DMM(IX,JX),DATG(IGU,JGU),DDAT(IGU,JGU) - DIMENSION DATS(IGU,JGU) - DIMENSION ZDATG(IMAX,JMAX) - REAL T00(IMAX,JMAX) - DIMENSION DM1(IX,JX),T1(IGU,JGU) - DIMENSION R0(IT),GLAT30(IGU,JGU),GLON30(IGU,JGU),ING(NSG),JNG(NSG) - DIMENSION ING5(NSG5),JNG5(NSG5) - DIMENSION ING6(NSG5),JNG6(NSG5) - DIMENSION RRIJ(NSG5) - DIMENSION ALAT(JX),ALON(IX) - COMMON /POSIT/CLON_NEW,CLAT_NEW,SLON,SLAT,CLON,CLAT,RAD - COMMON /vect/R0,XVECT(IT),YVECT(IT) - COMMON /ST/ALON,ALAT - COMMON /NHC2/MDX,MDY - COMMON /NHC3/AMDX,AMDY - COMMON /CHNL/IUT,KSTM -c COMMON /CT/SLON,SLAT,CLON,CLAT,RAD -c COMMON /GA/CLON_NEW,CLAT_NEW,R0 - COMMON /TR/ING,JNG,IB -c COMMON /TR/ZDATG,GLON,GLAT,ING,JNG,IB - - COMMON /HDAT3/NWRT2,NRED2 - REAL PDAT30(IGU,JGU,MTV3) - REAL PSLB(IMAX,JMAX) - COMMON /CHEN/KUNIT,ITIM - - DIMENSION DATG2(IGU,JGU) - - REAL PSL30(IGU,JGU),PS30(IGU,JGU) - -! COMMON /COEF5/NCNT,NCNT2 -C -C.. SETTING BASIC VARIABLES FOR INTERPOLATING GAUSSIAN GRID -C - NMAX=2*KMAX+1 - - ISE = IS1 - DO I=1,IX - DO J=1,JX - DMM(I,J) = DM1(I,J) - ENDDO - ENDDO - -! print*,'qingfu test new, ISE = ', ISE - -! call maxmin(DMM,ix*jx,1,1,1,'DMM(I,J)') -C -C.. INTERPOLATE TO GAUSSIAN GRID -C -! CALL READ2(IGU,JGU,NRED2,MTV,DATG,HDATA) - DO I=1,IGU - DO J=1,JGU - DATG(I,J)=PDAT30(I,J,IS1) - ENDDO - ENDDO -c - DO I=1,IGU - DO J=1,JGU - DATG2(I,J)=DATG(I,J) - DDAT(I,J)=0. - ENDDO - ENDDO - -! call maxmin(DATG2,IGU*JGU,1,1,1,'DATG2(I,J)') -C - RDIST2=AMDX*AMDX+AMDY*AMDY - IF(RDIST2.GT.0.02)THEN -cc test -!$omp parallel do -!$omp& private(I,IW,JW,IW1,JW1,HLA,HLO,II,JJ,LX,LY,DXX,DYY,X1,X2,Y1,Y2) - CYC_555: DO I = 1,IB - IW = ING(I) - JW = JNG(I) - IW1 = IW-I30S+1 - JW1 = JW-J30S+1 - - IF(IW1*JW1.le.0)print*,'IW,JW,IW1,JW1=',I,IW,JW,IW1,JW1,I30S,J30 - -c DO IW = 1, IGU -c DO JW = 1, JGU - HLA = GLAT30(IW1,JW1) - HLO = GLON30(IW1,JW1) -C - DO II=1,IX-1 - IF(HLO.GT.ALON(II).and.HLO.LE.ALON(II+1))THEN - DO JJ=1,JX-1 - IF(HLA.GT.ALAT(JJ).and.HLA.LE.ALAT(JJ+1))THEN - LX=II - LY=JJ - - DXX = HLO-ALON(LX) - DYY = HLA-ALAT(LY) -C - X1 = DMM(LX ,LY+1)*DYY + DMM(LX ,LY )*(1-DYY) - X2 = DMM(LX+1,LY+1)*DYY + DMM(LX+1,LY )*(1-DYY) - Y1 = DMM(LX+1,LY )*DXX + DMM(LX ,LY )*(1-DXX) - Y2 = DMM(LX+1,LY+1)*DXX + DMM(LX ,LY+1)*(1-DXX) - DATG(IW1,JW1)=(X1*(1-DXX)+X2*DXX + Y1*(1-DYY)+Y2*DYY)/2. - -! IF(ISE.GE.2) DDAT(IW1,JW1)=DATG2(IW1,JW1)-DATG(IW1,JW1) - CYCLE CYC_555 ! GO TO 555 - - END IF - END DO - END IF - END DO -! 555 CONTINUE -c ENDDO -c ENDDO - ENDDO CYC_555 - - if(inptyp.eq.1.and.ISE.GT.(NMAX+3).and.ISE.LE.(5*NMAX+3))then - -! DO I=1,IGU -! DO J=1,JGU -! DATS(I,J)=DATG(I,J) -! ENDDO -! ENDDO -!!$omp parallel do -!!$omp& private(I,IW,JW) -! DO I = 1,IB6 -! IW = ING6(I) -! JW = JNG6(I) -! DATG(IW,JW)=0.2*(DATS(IW-1,JW)+DATS(IW+1,JW) -! & +DATS(IW,JW-1)+DATS(IW,JW+1)+DATS(IW,JW)) -! END DO - - DO I=1,IGU - DO J=1,JGU - DATS(I,J)=DATG(I,J) - ENDDO - ENDDO -!$omp parallel do -!$omp& private(I,IW,JW) - DO I = 1,IB5 - IW = ING5(I)-I30S+1 - JW = JNG5(I)-J30S+1 -! DATG(IW,JW)=DATS(IW,JW) - DATG(IW,JW)=DATS(IW,JW)*RRIJ(I) - & +DATG2(IW,JW)*(1.-RRIJ(I)) - END DO - - end if - -! IF(ISE.GE.2)THEN - IF(ISE.GE.4)THEN - DDAT=0. - DO I = 1,IB - IW = ING(I)-I30S+1 - JW = JNG(I)-J30S+1 - DDAT(IW,JW)=DATG2(IW,JW)-DATG(IW,JW) -! IF(I.LT.5)print*,'ISE,IW,JW,DATG2,DATG=', -! & ISE,IW,JW,DATG2(IW,JW),DATG(IW,JW) - END DO - END IF - - END IF -c end test - - IF(ISE.EQ.3) THEN -c -c READ(70) PSL -! PSL=PSLB - -! DO I=1,IGU -! I1=I+I30S-1 -! DO J=1,JGU -! J1=J+J30S-1 -! PSL30(I,J)=PSLB(I1,J1) -! ENDDO -! ENDDO - -! print*,'test9991,PSL30=',PSL30(185,78) - - DDAT=0. - DO I = 1,IB - IW = ING(I)-I30S+1 - JW = JNG(I)-J30S+1 - DDAT(IW,JW)=PSL30(IW,JW)-DATG(IW,JW) - PSL30(IW,JW)=DATG(IW,JW) - END DO - -! print*,'test9992,PSL30=',PSL30(185,78) -c -c Move vortex - -cc DO I = 1,IB -cc IW = ING(I) -cc JW = JNG(I) -cc IWX=IW+MDX -cc JWY=JW+MDY -cc IF(IWX.GT.IGU)IWX=IWX-IGU -cc IF(IWX.LT.1)IWX=IWX+IGU -CQLIUC -cc PSL(IWX,JWY) = PSL(IWX,JWY)+DDAT(IW,JW) -cc ENDDO - -! print*,'test9993,PSL30=',PSL30(185,78) - - CALL MOVETX(IGU,JGU,I30S,J30S,GLON30,GLAT30,PSL30,DDAT) - - DO I=1,IGU - I1=I+I30S-1 - DO J=1,JGU - J1=J+J30S-1 - PSLB(I1,J1)=PSL30(I,J) - ENDDO - ENDDO - -! print*,'test9994,PSL30=',PSL30(185,78) - -! PSLB = PSL - -! CALL WRIT2(IGU,JGU,NWRT2,MTV,PSL,HDATA) - DO I=1,IGU - DO J=1,JGU - PDAT30(I,J,IV) = PSL30(I,J) - ENDDO - ENDDO -c - ELSEIF(ISE.EQ.4) THEN -cyc REWIND 36 -cyc READ(36) PSL -! PSL = PSLB - DO I=1,IGU - I1=I+I30S-1 - DO J=1,JGU - J1=J+J30S-1 - PSL30(I,J)=PSLB(I1,J1) - ENDDO - ENDDO - - IF(IFLAG.EQ.1)THEN - DO I=1,IGU - DO J=1,JGU - T1(I,J) = DATG2(I,J) - ENDDO - ENDDO - ELSE - DO I=1,IGU - DO J=1,JGU - T1(I,J) = DATG(I,J) - ENDDO - ENDDO - END IF -! IF(KST.EQ.KSTM)THEN - CALL SLP2SP3(IMAX,JMAX,IGU,JGU,I30S,J30S,ZDATG,KUNIT, - & T00,T1,PSL30,PS30,idvm) -! END IF - -! print*,'test9995,PSL30=',PSL30(185,78),PS30(185,78) - - END IF - -c temperature field -c qliu - - IF(ISE.GE.4.and.ISE.LE.(NMAX+3))then - IF(IFLAG.EQ.1)THEN -cold IF(KST.EQ.KSTM) THEN -cql READ(20)SKIP2 -cold NCNT2 = NCNT2 + 1 -cold WRITE(KUNIT)(SKIP2(NW,NCNT2),NW=1,MAXWV2) -cold END IF -! CALL WRIT2(IGU,JGU,NWRT2,MTV,DATG2,HDATA) - DO I=1,IGU - DO J=1,JGU - PDAT30(I,J,IV) = DATG2(I,J) - ENDDO - ENDDO - ELSE - -c Move vortex -cc DO I = 1,IB -cc IW = ING(I) -cc JW = JNG(I) -cc IWX=IW+MDX -cc JWY=JW+MDY -cc IF(IWX.GT.IGU)IWX=IWX-IGU -cc IF(IWX.LT.1)IWX=IWX+IGU -CQLIUC -cc DATG(IWX,JWY) = DATG(IWX,JWY)+DDAT(IW,JW) -cc ENDDO - - CALL MOVETX(IGU,JGU,I30S,J30S,GLON30,GLAT30,DATG,DDAT) - -cnew IF(KST.EQ.KSTM) THEN -cql READ(20)SKIP2 -cnew NCNT2 = NCNT2 + 1 -cnew CALL G2SPC(DATG) -cnew END IF - -! CALL WRIT2(IGU,JGU,NWRT2,MTV,DATG,HDATA) - DO I=1,IGU - DO J=1,JGU - PDAT30(I,J,IV) = DATG(I,J) - ENDDO - ENDDO - - END IF - END IF -C - IF(ISE.GT.(NMAX+3).and.ISE.LE.(5*NMAX+3))THEN -c Move vortex - -cc DO I = 1,IB -cc IW = ING(I) -cc JW = JNG(I) -cc IWX=IW+MDX -cc JWY=JW+MDY -cc IF(IWX.GT.IGU)IWX=IWX-IGU -cc IF(IWX.LT.1)IWX=IWX+IGU -CQLIUC -cc DATG(IWX,JWY) = DATG(IWX,JWY)+DDAT(IW,JW) -cc ENDDO - -! CALL MOVETX1(IGU,JGU,GLON,GLAT,DATG,DDAT) - CALL MOVETX(IGU,JGU,I30S,J30S,GLON30,GLAT30,DATG,DDAT) -C -cnew IF(KST.EQ.KSTM) THEN -cnew CALL G2SPC(DATG) -cnew END IF - -! CALL WRIT2(IGU,JGU,NWRT2,MTV,DATG,HDATA) - DO I=1,IGU - DO J=1,JGU - PDAT30(I,J,IV) = DATG(I,J) - ENDDO - ENDDO - - ENDIF - - IF(ISE.GT.(5*NMAX+3))THEN - IF(IFLAG.EQ.1)THEN -cold IF(KST.EQ.KSTM) THEN -cold CALL G2SPC(KUNIT,MWAVE,IGU,JGU,DATG2) -cold END IF -! CALL WRIT2(IGU,JGU,NWRT2,MTV,DATG2,HDATA) - DO I=1,IGU - DO J=1,JGU - PDAT30(I,J,IV) = DATG(I,J) - ENDDO - ENDDO - ELSE - -c Move vortex -cc DO I = 1,IB -cc IW = ING(I) -cc JW = JNG(I) -cc IWX=IW+MDX -cc JWY=JW+MDY -cc IF(IWX.GT.IGU)IWX=IWX-IGU -cc IF(IWX.LT.1)IWX=IWX+IGU -CQLIUC -cc DATG(IWX,JWY) = DATG(IWX,JWY)+DDAT(IW,JW) -cc ENDDO - - CALL MOVETX(IGU,JGU,I30S,J30S,GLON30,GLAT30,DATG,DDAT) - -cnew IF(KST.EQ.KSTM) THEN -cnew CALL G2SPC(DATG) -cnew END IF - -! CALL WRIT2(IGU,JGU,NWRT2,MTV,DATG,HDATA) - DO I=1,IGU - DO J=1,JGU - PDAT30(I,J,IV) = DATG(I,J) - ENDDO - ENDDO - END IF - - ENDIF - -C - RETURN - END -C - SUBROUTINE SLP2SP3(IMAX,JMAX,IGU,JGU,I30S,J30S,ZDATG,KUNIT, - & T00,T1,PSL30,PS30,idvm) -c PARAMETER (IGU=384,JGU=190) -C - integer *4 idvm - real, parameter :: G=9.8, R=287.05, GAMMA=6.7*0.001 -! - DIMENSION T1(IGU,JGU) - REAL PSL30(IGU,JGU),PS30(IGU,JGU) - DIMENSION ZDATG(IMAX,JMAX) - REAL T00(IMAX,JMAX) -c COMMON /TR/ZDATG,GLON,GLAT,ING,JNG,IB -! -!.. MAKE SFC PRESSURE FROM MSLP -! -!$omp parallel do -!$omp& private(IH,JH,PMSL,A,B,C,DD) - DO JH=1,JGU - JH1=JH+J30S-1 - DO IH=1,IGU - IH1=IH+I30S-1 -! PMSL = LOG(PSL30(IH,JH)) -! A = (GAMMA * ZDATG(IH1,JH1)) / T1(IH,JH) -! B = LOG(1+A) -! C = (G*B)/(R*GAMMA) -! DD = PMSL - C -! PS30(IH,JH) = EXP(DD)/1000. - A = 1.-0.0065*ZDATG(IH1,JH1)/T00(IH1,JH1) - DD = LOG(PSL30(IH,JH))+5.257*LOG(A) - PS30(IH,JH) = EXP(DD)/1000. -! IF (PSL(IH,JH).LE.10.) write(6,*)'SP is Less than 100mb at ', -! & IH,JH,D1 - ENDDO - ENDDO - if (mod(idvm, 10) /= 2) then - PS30 = LOG(PS30) - endif - print*,'test666,PSL30,PS30=',PSL30(1,1),PS30(1,1) -! write(6,*)' in SLP2SP PSL=',PSL(1,90) -C -C.. GAUSSIAN GRID TO SPECTRAL COEFFEICENT -C - call maxmin(psl,igu*jgu,1,1,1,'global SLP at SLP after int') - call maxmin(t1,igu*jgu,1,1,1,'global T1 at SLP after int') -C - RETURN - END -C - SUBROUTINE G2SPC(KUNIT,MWAVE,MAXWV2,IMAX,JMAX,Q1,PS2) -! - REAL Q1(IMAX,JMAX) - REAL PS2(MAXWV2) - - REAL, ALLOCATABLE :: DN(:) - -!moor MAXWV2 = (MWAVE+1)*(MWAVE+2) - MAXWV22 = MAXWV2 + 1 - - ALLOCATE ( DN(MAXWV22) ) -! -! call maxmin(dn,MAXWV2,1,1,1,'surface pressure after making') - - call SPTEZ(0,MWAVE,4,IMAX,JMAX,DN,Q1,-1) - - DO I=1,MAXWV2 - PS2(I) = DN(I) - END DO -! - DEALLOCATE (DN) - - RETURN - END - -C----------------------------------------------------------------------- - SUBROUTINE MODPR(IM,IX,KM,IDVC,IDSL,SI,AK,BK,PS,PI,PM) -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C -C SUBPROGRAM: MODPR COMPUTE MODEL PRESSURES -C PRGMMR: IREDELL ORG: W/NMC23 DATE: 92-10-31 -C -C ABSTRACT: COMPUTE MODEL PRESSURES. -C -C PROGRAM HISTORY LOG: -C 2001-07-25 MARK IREDELL -C -C USAGE: CALL MODPR(IM,IX,KM,IDVC,IDSL,SI,AK,BK,PS,PI,PM) -C INPUT ARGUMENT LIST: -C IM INTEGER NUMBER OF POINTS TO COMPUTE -C IX INTEGER FIRST DIMENSION -C KM INTEGER NUMBER OF LEVELS -C IDVC INTEGER VERTICAL COORDINATE ID -C (1 FOR SIGMA AND 2 FOR HYBRID) -C IDSL INTEGER TYPE OF SIGMA STRUCTURE -C (1 FOR PHILLIPS OR 2 FOR MEAN) -C SI REAL (KM+1) SIGMA INTERFACE VALUES (IDVC=1) -C AK REAL (KM+1) HYBRID INTERFACE A (IDVC=2) -C BK REAL (KM+1) HYBRID INTERFACE B (IDVC=2) -C PS REAL (IX) SURFACE PRESSURE (PA) -C OUTPUT ARGUMENT LIST: -C PI REAL (IX,KM+1) INTERFACE PRESSURE (PA) -C PM REAL (IX,KM) MID-LAYER PRESSURE (PA) -C -C ATTRIBUTES: -C LANGUAGE: FORTRAN -C -C$$$ - REAL SI(KM+1),AK(KM+1),BK(KM+1),PS(IX),PI(IX,KM),PM(IX,KM) -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IF(IDVC.EQ.2) THEN - DO K=1,KM+1 - PI(1:IM,K)=AK(K)+BK(K)*PS - ENDDO -! write(6,*)'idvc=',idvc -! write(6,*)'ak=',ak -! write(6,*)'bk=',bk -! write(6,*)'ps(1)=',ps(1) -! write(6,*)'pi(1,:)=',pi(1,:) - ELSE - DO K=1,KM+1 - PI(1:IM,K)=SI(K)*PS - ENDDO - ENDIF -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IF(IDSL.EQ.2) THEN - DO K=1,KM - PM(1:IM,K)=(PI(1:IM,K)+PI(1:IM,K+1))/2 - ENDDO - ELSE - ROCP=287.05/1004.6 - ROCP1=ROCP+1 - ROCPR=1/ROCP -!$omp parallel do -!$omp& private(K) - DO K=1,KM - PM(1:IM,K)=((PI(1:IM,K)**ROCP1-PI(1:IM,K+1)**ROCP1)/ - & (ROCP1*(PI(1:IM,K)-PI(1:IM,K+1))))**ROCPR - ENDDO -! write(6,*)'pm(1,:)=',pm(1,:) - ENDIF -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - END diff --git a/sorc/relocate_mv_nvortex.fd/rodist.f b/sorc/relocate_mv_nvortex.fd/rodist.f deleted file mode 100755 index 339f7a552b..0000000000 --- a/sorc/relocate_mv_nvortex.fd/rodist.f +++ /dev/null @@ -1,25 +0,0 @@ - subroutine rodist - parameter(nmx=24) - common /vect/rovect(nmx),xvect(nmx),yvect(nmx) - COMMON /POSIT/ XOLD,YOLD,XCORN,YCORN -c -c write(6,*) 'rovect',rovect - pi=4.0*atan(1.0) - PI180 = 4.*ATAN(1.0)/180. - yo=yold*pi180 -c qliu fact=cos(yo) - fact=1.0 - xc=xold-xcorn - yc=yold-ycorn -c - do 10 ip=1,nmx -c - theta=float(ip-1)/float(nmx)*2.*pi - r=rovect(ip) -c - xvect(ip)=r*cos(theta)/fact +xc - yvect(ip)=r*sin(theta) +yc -10 continue -c - return - end diff --git a/sorc/relocate_mv_nvortex.fd/sedr_omp b/sorc/relocate_mv_nvortex.fd/sedr_omp deleted file mode 100755 index c23ed6884c..0000000000 --- a/sorc/relocate_mv_nvortex.fd/sedr_omp +++ /dev/null @@ -1,8 +0,0 @@ -set -euax - -for file in mv_nvortex.f sig_p_convt1.f -do -sed -e "s/\$OMP/!\$OMP/" $file >tmpout; mv tmpout $file -done - - diff --git a/sorc/relocate_mv_nvortex.fd/sig_p_convt1.f b/sorc/relocate_mv_nvortex.fd/sig_p_convt1.f deleted file mode 100644 index 16bf50b617..0000000000 --- a/sorc/relocate_mv_nvortex.fd/sig_p_convt1.f +++ /dev/null @@ -1,1640 +0,0 @@ - - SUBROUTINE SIG2P(KMAX,MTV2,MTV3,HDAT,PDAT,PSFCM,H,HP,KST, - & nvcd,idvc,idsl,vcrd) -c -c subprogram: -c prgmmr: Qingfu Liu date: 2000-04-25 -c Fanglin Yang: add OpenMP date: 2010-09-01 -c -c abstract: -c Convert data from SIG surface to P surface. -c -c usage: call -c Input: HDAT - DATA at SIG surface -c KST: not used -C Ouput: PDAT - DATA at P surface - - use sigio_module - use sigio_r_module - - implicit none - integer mtv2, mtv3, kst - integer * 4 nvcd, idvc, idsl, kmax - - integer, PARAMETER :: IX=41, JX=41 - - REAL HDAT(IX,JX,MTV2),PDAT(IX,JX,MTV3) - REAL ZS(IX,JX),APS(IX,JX) - REAL H(IX,JX,KMAX),HP(IX,JX,2*KMAX+1) - - REAL(4) PS(IX,JX) - -c REAL(4) FHOUR,X(160),SI(KMAX+1),SL(KMAX) -! REAL*4 FHOUR,DUMMY(245) -! COMMON /COEF3/FHOUR,DUMMY -! REAL DUMMY8(245) - - REAL, ALLOCATABLE :: TV(:,:,:), DIV(:,:,:), VORT(:,:,:), - & U(:,:,:), V(:,:,:), SH(:,:,:) - REAL, ALLOCATABLE :: RH(:,:,:), APG(:,:,:), T(:,:,:) - REAL, ALLOCATABLE :: P(:),AP(:) - REAL, ALLOCATABLE :: DIVP(:,:,:), VORTP(:,:,:), UP(:,:,:), - & VP(:,:,:), RHP(:,:,:), SHP(:,:,:), - & TP(:,:,:) - - REAL(4), ALLOCATABLE :: PSIG(:,:,:), TV4(:,:,:) - REAL(4), ALLOCATABLE :: SIREF(:),SLREF(:),PD1(:), tref(:) - REAL(4) vcrd(KMAX+1,nvcd),PSREF(1) -! - real, parameter :: COEF1=461.5/287.05-1.0 - &, COEF2=287.05/9.8 - &, GAMA=6.5E-3, COEF3=COEF2*GAMA -! - integer kmax1, nmax, i, j, k, l, n - integer * 4 iret, ixjx4 - real es, shs, w, dtemp, tvu, tvd, tdry, psfcm, w1 - - KMAX1=KMAX+1 - NMAX=2*KMAX+1 - - write(6,*)' KMAX=',KMAX,' KMAX1=',KMAX1,' NMAX=',NMAX - - ALLOCATE ( SIREF(KMAX1),SLREF(KMAX),PD1(KMAX),tref(kmax) ) - -! DUMMY8=DUMMY -! IDVC=DUMMY(220) -! IDSL=DUMMY(219) -! CALL MODPR(1,1,KMAX,IDVC,IDSL, -! & DUMMY8(1),DUMMY8(1),DUMMY8(KMAX+2),1.E5, -! & SIREF,SLREF) - - PSREF = 1.E5 - tref = 270.0 - - CALL sigio_modpr(1,1,KMAX,nvcd,idvc,idsl,vcrd,iret, - & ps=PSREF,t=tref,pd=pd1,pm=SLREF) - - SIREF(1)=1.E5 - do k=1,KMAX - SIREF(k+1)=SIREF(k)-pd1(k) -! write(6,*)'SIREF test=',K+1,SIREF(k+1),SLREF(k) - end do - - SIREF = SIREF/1.E5 - SLREF = SLREF/1.E5 - - ALLOCATE ( TV(IX,JX,KMAX), DIV(IX,JX,KMAX), - & VORT(IX,JX,KMAX),U(IX,JX,KMAX), - & V(IX,JX,KMAX),SH(IX,JX,KMAX) ) - ALLOCATE ( TV4(IX,JX,KMAX)) - - ALLOCATE ( PSIG(IX,JX,KMAX),RH(IX,JX,KMAX), - & APG(IX,JX,KMAX+1),T(IX,JX,KMAX) ) - - ALLOCATE ( P(NMAX),AP(NMAX) ) - ALLOCATE ( DIVP(IX,JX,NMAX),VORTP(IX,JX,NMAX), - & UP(IX,JX,NMAX), VP(IX,JX,NMAX), - & RHP(IX,JX,NMAX),SHP(IX,JX,NMAX), - & TP(IX,JX,NMAX) ) - -! Surface Height and Surface Press -!$omp parallel do -!$omp& private(I,J) - DO J=1,JX - DO I=1,IX - ZS(I,J) = HDAT(I,J,1) - PS(I,J) = EXP(HDAT(I,J,2))*1000. - APS(I,J) = ALOG(1.*PS(I,J)) - END DO - END DO - -! DIV, VORT, U, V, T and Specific Humidity at Sigma Level -!$omp parallel do -!$omp& private(I,J,K) - DO K=1,KMAX - DO J=1,JX - DO I=1,IX - DIV(I,J,K) = HDAT(I,J,KMAX+4+4*(K-1)) - VORT(I,J,K) = HDAT(I,J,KMAX+5+4*(K-1)) - U(I,J,K) = HDAT(I,J,KMAX+6+4*(K-1)) - V(I,J,K) = HDAT(I,J,KMAX+7+4*(K-1)) - SH(I,J,K) = HDAT(I,J,KMAX*5+3+K) - TV(I,J,K) = HDAT(I,J,3+K) - T(I,J,K) = TV(I,J,K)/(1.+COEF1*SH(I,J,K)) - END DO - END DO - END DO -! write(6,*)' coef1=',coef1 -! write(6,*)' SH=',SH(16,37,:) - -! Press at Sigma-Level -! write(6,*)'IX,JX,KMAX,IDVC,IDSL=',IX,JX,KMAX,IDVC,IDSL -! CALL MODPR(IX*JX,IX*JX,KMAX,IDVC,IDSL, -! & DUMMY8(1),DUMMY8(1),DUMMY8(KMAX+2),PS, -! & APG,PSIG) - - ixjx4 = ix * jx - tv4 = tv -! write(6,*)' tv4=',tv4(16,37,:) -! write(6,*)' ps=',ps(16,37) - CALL sigio_modpr(IXJX4,IXJX4,KMAX,nvcd,idvc,idsl,vcrd,iret, - & ps=PS,t=tv4,pm=PSIG) - deallocate (tv4) - -! write(6,*)'PSIG(1,1,1)=',PSIG(1,1,1) - -!$omp parallel do -!$omp& private(I,J,K) - DO K=1,KMAX - DO J=1,JX - DO I=1,IX - APG(I,J,K)=ALOG(1.*PSIG(I,J,K)) - END DO - END DO - END DO - - DO J=1,JX - DO I=1,IX - TVD = TV(I,J,1) - H(I,J,1) = ZS(I,J)-COEF2*TVD*(APG(I,J,1)-APS(I,J)) - DO K=2,KMAX - TVU = TV(I,J,K) - H(I,J,K) = H(I,J,K-1)- - & COEF2*0.5*(TVD+TVU)*(APG(I,J,K)-APG(I,J,K-1)) - TVD = TVU - END DO - END DO - END DO - -! Const. P-Level - DO K=1,KMAX - P(2*K-1) = SIREF(K)*PSFCM - P(2*K) = SLREF(K)*PSFCM - END DO - P(NMAX) = SLREF(KMAX)*0.5*PSFCM - DO N=1,NMAX - AP(N) = ALOG(P(N)) - END DO - -! write(6,*)' P=',P - -!!$omp parallel do -!!$omp& private(I,J,N,K) - DO J=1,JX - DO I=1,IX -! if( i == 16 .and. j == 37) write(6,*)' T=',T(i,j,1),t(i,j,kmax) -! &,' h=',h(i,j,1),' P=',P(1),p(nmax),' psig=',psig(i,j,1) -! &,psig(i,j,kmax) - DO N=1,NMAX - IF(P(N).GE.PSIG(I,J,1))THEN - HP(I,J,N)=H(I,J,1)+ - & TV(I,J,1)/GAMA*(1.-(P(N)/PSIG(I,J,1))**COEF3) - ELSE IF((P(N).LT.PSIG(I,J,1)).AND. - & (P(N).GT.PSIG(I,J,KMAX)))THEN - DO K=1,KMAX-1 - IF((P(N).LT.PSIG(I,J,L)).AND. - & (P(N).GE.PSIG(I,J,L+1)))THEN - HP(I,J,N)=H(I,J,K)+ - & TV(I,J,K)/GAMA*(1.-(P(N)/PSIG(I,J,K))**COEF3) - END IF - END DO - ELSE IF(P(N).LE.PSIG(I,J,KMAX))THEN - HP(I,J,N)=H(I,J,KMAX)+ - & TV(I,J,KMAX)/GAMA*(1.-(P(N)/PSIG(I,J,KMAX))**COEF3) - ELSE - write(6,*)'SOMETHING IS WRONG' - END IF - END DO - END DO - END DO - -c RH at K=1 (Sigma=0.995) -! DO K=1,KMAX - K=1 -!$omp parallel do -!$omp& private(I,J,DTEMP,ES,SHS) - DO J=1,JX - DO I=1,IX - DTEMP = T(I,J,K)-273.15 - ES = 611.2*EXP(17.67*DTEMP/(DTEMP+243.5)) - SHS = 0.622*ES/(PSIG(I,J,K)-0.378*ES) - RH(I,J,K) = MIN(MAX(SH(I,J,K)/SHS,0.),1.0) - END DO - END DO -! END DO - -! Interpolate to Const. Press Level. -!$omp parallel do -!$omp& private(I,J,N,L,TDRY,DTEMP,ES,SHS,W,W1) - DO J=1,JX - DO I=1,IX - CYC_123: DO N=1,NMAX -! if( i == 16 .and. j == 37) -! &write(6,*)' i=',i,' j=',j,' n=',n,' p=',p(n),' psig=',psig(i,j,1) -! &,' T=',t(i,j,1),' gama=',gama,'hp=',hp(i,j,n),' h=',h(i,j,1) - IF(P(N).GE.PSIG(I,J,1))THEN -! below SIGMA K=1 - DIVP(I,J,N)=DIV(I,J,1) - VORTP(I,J,N)=VORT(I,J,1) - UP(I,J,N)=U(I,J,1) - VP(I,J,N)=V(I,J,1) - RHP(I,J,N)=RH(I,J,1) ! RH at SIGMA K=1 - TDRY=T(I,J,1)-GAMA*(HP(I,J,N)-H(I,J,1)) - DTEMP=TDRY-273.15 - ES=611.2*EXP(17.67*DTEMP/(DTEMP+243.5)) -! if( i == 16 .and. j == 37) -! &write(6,*)' es=',es,' pn=',p(n),0.378*es - SHS=0.622*ES/(P(N)-0.378*ES) - SHP(I,J,N)=RHP(I,J,N)*SHS - TP(I,J,N)=TDRY*(1.+COEF1*SHP(I,J,N)) -! within domain - ELSE IF((P(N).LT.PSIG(I,J,1)).AND. - & (P(N).GT.PSIG(I,J,KMAX)))THEN - DO L=1,KMAX-1 - IF((P(N).LT.PSIG(I,J,L)).AND. - & (P(N).GE.PSIG(I,J,L+1)))THEN - W=(AP(N)-APG(I,J,L))/(APG(I,J,L+1)-APG(I,J,L)) -c W1=(P(N)-PSIG(I,J,L))/(PSIG(I,J,L+1)-PSIG(I,J,L)) - DIVP(I,J,N)=DIV(I,J,L)+ - & W*(DIV(I,J,L+1)-DIV(I,J,L)) - VORTP(I,J,N)=VORT(I,J,L)+ - & W*(VORT(I,J,L+1)-VORT(I,J,L)) - UP(I,J,N)=U(I,J,L)+W*(U(I,J,L+1)-U(I,J,L)) - VP(I,J,N)=V(I,J,L)+W*(V(I,J,L+1)-V(I,J,L)) - TP(I,J,N)=TV(I,J,L)+W*(TV(I,J,L+1)-TV(I,J,L)) - SHP(I,J,N)=SH(I,J,L)+W*(SH(I,J,L+1)-SH(I,J,L)) - CYCLE CYC_123 !GO TO 123 - END IF - END DO -! 123 CONTINUE -! above top - ELSE IF(P(N).LE.PSIG(I,J,KMAX))THEN - DIVP(I,J,N)=DIV(I,J,KMAX) - VORTP(I,J,N)=VORT(I,J,KMAX) - UP(I,J,N)=U(I,J,KMAX) - VP(I,J,N)=V(I,J,KMAX) - TDRY=T(I,J,KMAX)-GAMA*(HP(I,J,N)-H(I,J,KMAX)) - SHP(I,J,N)=SH(I,J,KMAX) - TP(I,J,N)=TDRY*(1.+COEF1*SHP(I,J,N)) - ELSE - write(6,*)'SOMETHING IS WRONG' - END IF - - END DO CYC_123 - END DO - END DO - -!!$omp parallel do -!!$omp& private(I,J,N) - DO J=1,JX - DO I=1,IX - PDAT(I,J,1) = HDAT(I,J,1) - PDAT(I,J,2) = HDAT(I,J,2) - PDAT(I,J,3) = HDAT(I,J,3) - DO N=1,NMAX - PDAT(I,J,NMAX+4+4*(N-1)) = DIVP(I,J,N) - PDAT(I,J,NMAX+5+4*(N-1)) = VORTP(I,J,N) - PDAT(I,J,NMAX+6+4*(N-1)) = UP(I,J,N) - PDAT(I,J,NMAX+7+4*(N-1)) = VP(I,J,N) - PDAT(I,J,NMAX*5+3+N) = SHP(I,J,N) - PDAT(I,J,3+N) = TP(I,J,N) - END DO - END DO - END DO - - DEALLOCATE ( SIREF,SLREF,PD1,tref ) - DEALLOCATE ( T, TV, DIV, VORT, U, V, SH ) - DEALLOCATE ( PSIG, RH, APG ) - DEALLOCATE ( P, AP ) - DEALLOCATE ( DIVP, VORTP, UP, VP, RHP, SHP, TP ) - - END - - SUBROUTINE SIG2P30(IX,JX,KMAX,MTV,MTV3,HDAT,PDAT,PSL,PSFCM, - & H,HP,KST,nvcd,idvc,idsl,vcrd) -c -c subprogram: -c prgmmr: Qingfu Liu date: 2000-04-25 -c Fanglin Yang: add OpenMP date: 2010-09-01 -c -c abstract: -c Convert data from SIG surface to P surface. -c -c usage: call -c Input: HDAT - DATA at SIG surface -c KST: not used -C Ouput: PDAT - DATA at P surface - - use sigio_module - use sigio_r_module - - implicit none - integer ix, jx, mtv, mtv3, kst - integer * 4 nvcd, idvc, idsl, kmax - -! integer, PARAMETER :: IX=41, JX=41 - - REAL PDAT(IX,JX,MTV3) - REAL ZS(IX,JX),APS(IX,JX),PSL(IX,JX) - REAL H(IX,JX,KMAX),HP(IX,JX,2*KMAX+1) - - REAL(4) HDAT(IX,JX,MTV),PS(IX,JX) - -c REAL(4) FHOUR,X(160),SI(KMAX+1),SL(KMAX) -! REAL*4 FHOUR,DUMMY(245) -! COMMON /COEF3/FHOUR,DUMMY -! REAL DUMMY8(245) - - REAL, ALLOCATABLE :: TV(:,:,:), DIV(:,:,:), VORT(:,:,:), - & SH(:,:,:) - REAL, ALLOCATABLE :: RH(:,:,:), APG(:,:,:), T(:,:,:) - REAL, ALLOCATABLE :: P(:),AP(:) - REAL, ALLOCATABLE :: DIVP(:,:,:), VORTP(:,:,:), - & RHP(:,:,:), SHP(:,:,:), - & TP(:,:,:) - - REAL(4), ALLOCATABLE :: PSIG(:,:,:), TV4(:,:,:) - REAL(4), ALLOCATABLE :: SIREF(:),SLREF(:),PD1(:), tref(:) - REAL(4) vcrd(KMAX+1,nvcd),PSREF(1) -! - real, parameter :: COEF1=461.5/287.05-1.0 - &, COEF2=287.05/9.8 - &, GAMA=6.5E-3, COEF3=COEF2*GAMA -! - integer kmax1, nmax, i, j, k, l, n - integer * 4 iret, ixjx4 - real es, shs, w, dtemp, tvu, tvd, tdry, psfcm, w1 - - KMAX1=KMAX+1 - NMAX=2*KMAX+1 - - write(6,*)' IX=',IX,' JX=',JX - write(6,*)' KMAX=',KMAX,' KMAX1=',KMAX1,' NMAX=',NMAX - - ALLOCATE ( SIREF(KMAX1),SLREF(KMAX),PD1(KMAX),tref(kmax) ) - -! DUMMY8=DUMMY -! IDVC=DUMMY(220) -! IDSL=DUMMY(219) -! CALL MODPR(1,1,KMAX,IDVC,IDSL, -! & DUMMY8(1),DUMMY8(1),DUMMY8(KMAX+2),1.E5, -! & SIREF,SLREF) - - PSREF = 1.E5 - tref = 270.0 - - CALL sigio_modpr(1,1,KMAX,nvcd,idvc,idsl,vcrd,iret, - & ps=PSREF,t=tref,pd=pd1,pm=SLREF) - - SIREF(1)=1.E5 - do k=1,KMAX - SIREF(k+1)=SIREF(k)-pd1(k) -! write(6,*)'SIREF test=',K+1,SIREF(k+1),SLREF(k) - end do - - SIREF = SIREF/1.E5 - SLREF = SLREF/1.E5 - - ALLOCATE ( TV(IX,JX,KMAX), DIV(IX,JX,KMAX), - & VORT(IX,JX,KMAX),SH(IX,JX,KMAX) ) - ALLOCATE ( TV4(IX,JX,KMAX)) - - ALLOCATE ( PSIG(IX,JX,KMAX),RH(IX,JX,KMAX), - & APG(IX,JX,KMAX+1),T(IX,JX,KMAX) ) - - ALLOCATE ( P(NMAX),AP(NMAX) ) - ALLOCATE ( DIVP(IX,JX,NMAX),VORTP(IX,JX,NMAX), - & RHP(IX,JX,NMAX),SHP(IX,JX,NMAX), - & TP(IX,JX,NMAX) ) - -! Surface Height and Surface Press -!$omp parallel do -!$omp& private(I,J) - DO J=1,JX - DO I=1,IX - ZS(I,J) = HDAT(I,J,1) - PS(I,J) = EXP(HDAT(I,J,2))*1000. - APS(I,J) = ALOG(1.*PS(I,J)) - END DO - END DO - - print*,'ql test5549' - print*,'mtv,mtv3=',mtv,mtv3 -! DIV, VORT, U, V, T and Specific Humidity at Sigma Level -!!!$omp parallel do -!!!$omp& private(I,J,K) - DO K=1,KMAX - DO J=1,JX - DO I=1,IX - DIV(I,J,K) = HDAT(I,J,KMAX+3+2*(K-1)) - VORT(I,J,K) = HDAT(I,J,KMAX+4+2*(K-1)) - SH(I,J,K) = HDAT(I,J,KMAX*3+2+K) - TV(I,J,K) = HDAT(I,J,2+K) - T(I,J,K) = TV(I,J,K)/(1.+COEF1*SH(I,J,K)) -! if(i.eq.1.and.j.eq.1)print*,i,j,k,DIV(I,J,K), -! & VORT(I,J,K),SH(I,J,K), TV(I,J,K),T(I,J,K) -! if(k.ge.(kmax-1))print*,i,j,k - END DO - END DO - END DO -! print*,'ql test5550' -! write(6,*)' coef1=',coef1 -! write(6,*)' SH=',SH(16,37,:) - -! Press at Sigma-Level -! write(6,*)'IX,JX,KMAX,IDVC,IDSL=',IX,JX,KMAX,IDVC,IDSL -! CALL MODPR(IX*JX,IX*JX,KMAX,IDVC,IDSL, -! & DUMMY8(1),DUMMY8(1),DUMMY8(KMAX+2),PS, -! & APG,PSIG) - - ixjx4 = ix * jx - tv4 = tv -! write(6,*)' tv4=',tv4(16,37,:) -! write(6,*)' ps=',ps(16,37) - CALL sigio_modpr(IXJX4,IXJX4,KMAX,nvcd,idvc,idsl,vcrd,iret, - & ps=PS,t=tv4,pm=PSIG) - deallocate (tv4) - -! print*,'ql test5551' -! write(6,*)'PSIG(1,1,1)=',PSIG(1,1,1) - -!$omp parallel do -!$omp& private(I,J,K) - DO K=1,KMAX - DO J=1,JX - DO I=1,IX - APG(I,J,K)=ALOG(1.*PSIG(I,J,K)) - END DO - END DO - END DO - - DO J=1,JX - DO I=1,IX - TVD = TV(I,J,1) - H(I,J,1) = ZS(I,J)-COEF2*TVD*(APG(I,J,1)-APS(I,J)) - DO K=2,KMAX - TVU = TV(I,J,K) - H(I,J,K) = H(I,J,K-1)- - & COEF2*0.5*(TVD+TVU)*(APG(I,J,K)-APG(I,J,K-1)) - TVD = TVU - END DO - END DO - END DO - -! Const. P-Level - DO K=1,KMAX - P(2*K-1) = SIREF(K)*PSFCM - P(2*K) = SLREF(K)*PSFCM - END DO - P(NMAX) = SLREF(KMAX)*0.5*PSFCM - DO N=1,NMAX - AP(N) = ALOG(P(N)) - END DO - -! print*,'ql test5552' - -! write(6,*)' P=',P - -!!$omp parallel do -!!$omp& private(I,J,N,K) - DO J=1,JX - DO I=1,IX -! if( i == 16 .and. j == 37) write(6,*)' T=',T(i,j,1),t(i,j,kmax) -! &,' h=',h(i,j,1),' P=',P(1),p(nmax),' psig=',psig(i,j,1) -! &,psig(i,j,kmax) - DO N=1,NMAX - IF(P(N).GE.PSIG(I,J,1))THEN - HP(I,J,N)=H(I,J,1)+ - & TV(I,J,1)/GAMA*(1.-(P(N)/PSIG(I,J,1))**COEF3) - ELSE IF((P(N).LT.PSIG(I,J,1)).AND. - & (P(N).GT.PSIG(I,J,KMAX)))THEN - DO K=1,KMAX-1 - IF((P(N).LT.PSIG(I,J,L)).AND. - & (P(N).GE.PSIG(I,J,L+1)))THEN - HP(I,J,N)=H(I,J,K)+ - & TV(I,J,K)/GAMA*(1.-(P(N)/PSIG(I,J,K))**COEF3) - END IF - END DO - ELSE IF(P(N).LE.PSIG(I,J,KMAX))THEN - HP(I,J,N)=H(I,J,KMAX)+ - & TV(I,J,KMAX)/GAMA*(1.-(P(N)/PSIG(I,J,KMAX))**COEF3) - ELSE - write(6,*)'SOMETHING IS WRONG' - END IF - END DO - END DO - END DO - -c RH at K=1 (Sigma=0.995) -! DO K=1,KMAX - K=1 -!$omp parallel do -!$omp& private(I,J,DTEMP,ES,SHS) - DO J=1,JX - DO I=1,IX - DTEMP = T(I,J,K)-273.15 - ES = 611.2*EXP(17.67*DTEMP/(DTEMP+243.5)) - SHS = 0.622*ES/(PSIG(I,J,K)-0.378*ES) - RH(I,J,K) = MIN(MAX(SH(I,J,K)/SHS,0.),1.0) - END DO - END DO -! END DO - -! print*,'ql test5553' - -! Interpolate to Const. Press Level. -!$omp parallel do -!$omp& private(I,J,N,L,TDRY,DTEMP,ES,SHS,W,W1) - DO J=1,JX - DO I=1,IX - CYC_123: DO N=1,NMAX -! if( i == 16 .and. j == 37) -! &write(6,*)' i=',i,' j=',j,' n=',n,' p=',p(n),' psig=',psig(i,j,1) -! &,' T=',t(i,j,1),' gama=',gama,'hp=',hp(i,j,n),' h=',h(i,j,1) - IF(P(N).GE.PSIG(I,J,1))THEN -! below SIGMA K=1 - DIVP(I,J,N)=DIV(I,J,1) - VORTP(I,J,N)=VORT(I,J,1) - RHP(I,J,N)=RH(I,J,1) ! RH at SIGMA K=1 - TDRY=T(I,J,1)-GAMA*(HP(I,J,N)-H(I,J,1)) - DTEMP=TDRY-273.15 - ES=611.2*EXP(17.67*DTEMP/(DTEMP+243.5)) -! if( i == 16 .and. j == 37) -! &write(6,*)' es=',es,' pn=',p(n),0.378*es - SHS=0.622*ES/(P(N)-0.378*ES) - SHP(I,J,N)=RHP(I,J,N)*SHS - TP(I,J,N)=TDRY*(1.+COEF1*SHP(I,J,N)) -! within domain - ELSE IF((P(N).LT.PSIG(I,J,1)).AND. - & (P(N).GT.PSIG(I,J,KMAX)))THEN - DO L=1,KMAX-1 - IF((P(N).LT.PSIG(I,J,L)).AND. - & (P(N).GE.PSIG(I,J,L+1)))THEN - W=(AP(N)-APG(I,J,L))/(APG(I,J,L+1)-APG(I,J,L)) -c W1=(P(N)-PSIG(I,J,L))/(PSIG(I,J,L+1)-PSIG(I,J,L)) - DIVP(I,J,N)=DIV(I,J,L)+ - & W*(DIV(I,J,L+1)-DIV(I,J,L)) - VORTP(I,J,N)=VORT(I,J,L)+ - & W*(VORT(I,J,L+1)-VORT(I,J,L)) - TP(I,J,N)=TV(I,J,L)+W*(TV(I,J,L+1)-TV(I,J,L)) - SHP(I,J,N)=SH(I,J,L)+W*(SH(I,J,L+1)-SH(I,J,L)) - CYCLE CYC_123 !GO TO 123 - END IF - END DO -! 123 CONTINUE -! above top - ELSE IF(P(N).LE.PSIG(I,J,KMAX))THEN - DIVP(I,J,N)=DIV(I,J,KMAX) - VORTP(I,J,N)=VORT(I,J,KMAX) - TDRY=T(I,J,KMAX)-GAMA*(HP(I,J,N)-H(I,J,KMAX)) - SHP(I,J,N)=SH(I,J,KMAX) - TP(I,J,N)=TDRY*(1.+COEF1*SHP(I,J,N)) - ELSE - write(6,*)'SOMETHING IS WRONG' - END IF - - END DO CYC_123 - END DO - END DO - -! print*,'ql test5554' - -!!$omp parallel do -!!$omp& private(I,J,N) - DO J=1,JX - DO I=1,IX - PDAT(I,J,1) = HDAT(I,J,1) - PDAT(I,J,2) = HDAT(I,J,2) - PDAT(I,J,3) = PSL(I,J) - DO N=1,NMAX - PDAT(I,J,NMAX+4+4*(N-1)) = DIVP(I,J,N) - PDAT(I,J,NMAX+5+4*(N-1)) = VORTP(I,J,N) - PDAT(I,J,NMAX+6+4*(N-1)) = 0. - PDAT(I,J,NMAX+7+4*(N-1)) = 0. - PDAT(I,J,NMAX*5+3+N) = SHP(I,J,N) - PDAT(I,J,3+N) = TP(I,J,N) - END DO - END DO - END DO - -!! call maxmin(HDAT(1,1,2),IX*JX,1,1,1,'surface pressure') -!! call maxmin(PSL,IX*JX,1,1,1,'sea level pressure') -! print*,'ql test5555' - - DEALLOCATE ( SIREF,SLREF,PD1,tref ) - DEALLOCATE ( T, TV, DIV, VORT, SH ) - DEALLOCATE ( PSIG, RH, APG ) - DEALLOCATE ( P, AP ) - DEALLOCATE ( DIVP, VORTP, RHP, SHP, TP ) - - END - - SUBROUTINE P2SIG(KMAX,MTV2,MTV3,HDPB,PDPB,PDAT,HDAT, - & PSFCM,H,HP,KST,nvcd,idvc,idsl,vcrd) - -c P to SIG conversion -c -c Input: HDPB (perturbation part), PDPB (perturbation part) -c Input: PDAT (total field), PDPB+PDAT = ENV part -C Ouput: HDPB (the value at the top most level kmax is not changed) -c KST: not used - - use sigio_module - use sigio_r_module - - implicit none - integer kmax, mtv2, mtv3, kst - integer * 4 nvcd, idvc, idsl - integer, PARAMETER :: IX=41, JX=41 - - REAL HDPB(IX,JX,MTV2),HDAT(IX,JX,MTV2) - REAL PDPB(IX,JX,MTV3),PDAT(IX,JX,MTV3) - REAL ZS(IX,JX),APS(IX,JX) - REAL H(IX,JX,KMAX),HP(IX,JX,2*KMAX+1) - - REAL(4) PS(IX,JX) - -c REAL(4) FHOUR,X(160),SI(KMAX+1),SL(KMAX) -! REAL*4 FHOUR,DUMMY(245) -! COMMON /COEF3/FHOUR,DUMMY -! REAL DUMMY8(245) - - REAL, ALLOCATABLE :: TV(:,:,:),DIV(:,:,:),VORT(:,:,:), - & U(:,:,:),V(:,:,:),SH(:,:,:) - REAL, ALLOCATABLE :: RH(:,:,:), - & APG(:,:,:) - REAL, ALLOCATABLE :: P(:),AP(:) - REAL, ALLOCATABLE :: DIVP(:,:,:),VORTP(:,:,:),UP(:,:,:), - & VP(:,:,:),RHP(:,:,:) - REAL, ALLOCATABLE :: TVP(:,:,:),TVP_E(:,:,:) - REAL, ALLOCATABLE :: TP_E(:,:,:) - REAL, ALLOCATABLE :: SHP(:,:,:),SHP_E(:,:,:) - REAL, ALLOCATABLE :: HT_T(:,:,:),HSH_T(:,:,:) - - REAL(4), ALLOCATABLE :: PSIG(:,:,:), TVP_E4(:,:,:) - - REAL(4), ALLOCATABLE :: SIREF(:),SLREF(:),PD1(:),tref(:) - - REAL(4) vcrd(KMAX+1,nvcd),PSREF(1) -! - real, parameter :: COEF1=461.5/287.05-1.0 - &, COEF2=287.05/9.8 - &, GAMA=6.5E-3, COEF3=COEF2*GAMA -! - integer kmax1, nmax, i, j, k, l, n, ntrac, iret - real es, shs, w, dtemp, tdry, psfcm, sh_e, w1, tvd, tvu - - KMAX1 = KMAX+1 - NMAX = 2*KMAX+1 - - ALLOCATE ( SIREF(KMAX1),SLREF(KMAX),PD1(KMAX), tref(kmax) ) - -! DUMMY8=DUMMY -! IDVC=DUMMY(220) -! IDSL=DUMMY(219) -! CALL MODPR(1,1,KMAX,IDVC,IDSL, -! & DUMMY8(1),DUMMY8(1),DUMMY8(KMAX+2),1.E5, - - PSREF = 1.E5 - tref = 270.0 - - CALL sigio_modpr(1,1,KMAX,nvcd,idvc,idsl,vcrd,iret, - & ps=PSREF,t=tref,pd=pd1,pm=SLREF) - - SIREF(1)=1.E5 - do k=1,KMAX - SIREF(k+1)=SIREF(k)-pd1(k) - end do - - SIREF = SIREF/1.E5 - SLREF = SLREF/1.E5 - - ALLOCATE ( TV(IX,JX,KMAX), DIV(IX,JX,KMAX), - & VORT(IX,JX,KMAX),U(IX,JX,KMAX), - & V(IX,JX,KMAX),SH(IX,JX,KMAX) ) - - ALLOCATE ( PSIG(IX,JX,KMAX),RH(IX,JX,KMAX), - & APG(IX,JX,KMAX+1) ) - - ALLOCATE ( HT_T(IX,JX,KMAX),HSH_T(IX,JX,KMAX) ) - - ALLOCATE ( TVP(IX,JX,NMAX),TVP_E(IX,JX,NMAX), - & SHP(IX,JX,NMAX),SHP_E(IX,JX,NMAX), - & TP_E(IX,JX,NMAX), TVP_E4(IX,JX,NMAX) ) - - ALLOCATE ( P(NMAX),AP(NMAX) ) - ALLOCATE ( DIVP(IX,JX,NMAX),VORTP(IX,JX,NMAX), - & UP(IX,JX,NMAX), VP(IX,JX,NMAX), - & RHP(IX,JX,NMAX) ) - -c Surface Height and Surface Press -!$omp parallel do -!$omp& private(I,J) - DO J=1,JX - DO I=1,IX - ZS(I,J) = PDPB(I,J,1) ! Full field - PS(I,J) = EXP(PDPB(I,J,2))*1000. ! FULL field - APS(I,J) = ALOG(1.*PS(I,J)) - END DO - END DO - -c DIV, VORT, U, V, T and Specific Humidity at P-Level -!$omp parallel do -!$omp& private(I,J,N) - DO J=1,JX - DO I=1,IX - DO N=1,NMAX - DIVP(I,J,N) = PDPB(I,J,NMAX+4+4*(N-1)) - VORTP(I,J,N) = PDPB(I,J,NMAX+5+4*(N-1)) - UP(I,J,N) = PDPB(I,J,NMAX+6+4*(N-1)) - VP(I,J,N) = PDPB(I,J,NMAX+7+4*(N-1)) - SHP(I,J,N) = PDPB(I,J,NMAX*5+3+N) - SHP_E(I,J,N) = SHP(I,J,N)+PDAT(I,J,NMAX*5+3+N) - TVP(I,J,N) = PDPB(I,J,3+N) - TVP_E(I,J,N) = TVP(I,J,N)+PDAT(I,J,3+N) - TP_E(I,J,N) = TVP_E(I,J,N)/(1.+COEF1*SHP_E(I,J,N)) - END DO - END DO - END DO - -!$omp parallel do -!$omp& private(I,J,K) - DO J=1,JX - DO I=1,IX - DO K=1,KMAX-1 - HSH_T(I,J,K) = HDAT(I,J,KMAX*5+3+K) ! Specific Hum. - HT_T(I,J,K) = HDAT(I,J,3+K) - END DO - END DO - END DO - -c Const. P-Level - DO K=1,KMAX - P(2*K-1) = SIREF(K)*PSFCM - P(2*K) = SLREF(K)*PSFCM - END DO - P(NMAX) = SLREF(KMAX)*0.5*PSFCM - DO N=1,NMAX - AP(N) = ALOG(P(N)) - END DO - -! DO J=1,JX -! DO I=1,IX -! TVD=TVP_E(I,J,1) -! HP(I,J,1)=ZS(I,J)- -! & TP_E(I,J,1)/GAMA*(1.-(PS(I,J)/P(1))**COEF3) -! DO N=2,NMAX -! TVU=TVP_E(I,J,N) -! HP(I,J,N)=HP(I,J,N-1)- -! & COEF2*0.5*(TVD+TVU)*(AP(N)-AP(N-1)) -! TVD=TVU -! END DO -! END DO -! END DO - -c Press at Sigma-Level - - tvp_e4 = tvp_e - CALL sigio_modpr(IX*JX,IX*JX,KMAX,nvcd,idvc,idsl,vcrd,iret, - & ps=PS,t=tvp_e4,pm=PSIG) - -!$omp parallel do -!$omp& private(I,J,K) - DO K=1,KMAX - DO J=1,JX - DO I=1,IX - APG(I,J,K) = ALOG(1.*PSIG(I,J,K)) - END DO - END DO - END DO - - -! DO K=1,KMAX -! N=2*K -! DO J=1,JX -! DO I=1,IX -! H(I,J,K)=HP(I,J,N)+ -! & TP_E(I,J,N)/GAMA*(1.-(PSIG(I,J,K)/P(N))**COEF3) -! END DO -! END DO -! END DO - - DO N=1,NMAX - K=(N-1)/2+1 -c write(6,*)'Press=',N,P(N)/100. -c write(6,*)'Press2=',N,K,P(N),HP(20,20,N),H(20,20,K) - END DO - -c RH at Press level -! DO N=1,NMAX - N=1 -!$omp parallel do -!$omp& private(I,J,DTEMP,ES,SHS) - DO J=1,JX - DO I=1,IX - DTEMP=TP_E(I,J,N)-273.15 - ES=611.2*EXP(17.67*DTEMP/(DTEMP+243.5)) - SHS=0.622*ES/(P(N)-0.378*ES) - RHP(I,J,N)=MIN(MAX(SHP_E(I,J,N)/SHS,0.),1.0) - END DO - END DO -! END DO - -! Interpolate to Sigma Level. -!$omp parallel do -!$omp& private(I,J,K,L,TDRY,DTEMP,ES,SHS,SH_E,W,W1) - DO J=1,JX - DO I=1,IX - CYC_123: DO K=1,KMAX - IF(PSIG(I,J,K).GE.P(1))THEN -! below Press K=1 - DIV(I,J,K)=DIVP(I,J,1) - VORT(I,J,K)=VORTP(I,J,1) - U(I,J,K)=UP(I,J,1) - V(I,J,K)=VP(I,J,1) - RH(I,J,K)=RHP(I,J,1) ! RH at SIGMA K=1 - TDRY=TP_E(I,J,1)-GAMA*(H(I,J,K)-HP(I,J,1)) - DTEMP=TDRY-273.15 - ES=611.2*EXP(17.67*DTEMP/(DTEMP+243.5)) - SHS=0.622*ES/(PSIG(I,J,K)-0.378*ES) - SH_E=RH(I,J,K)*SHS - SH(I,J,K)=SH_E-HSH_T(I,J,K) ! Pert. Part - TV(I,J,K)=TDRY*(1.+COEF1*SH_E)-HT_T(I,J,K) -! write(6,*)'LLL2=',SHP(I,J,1),SHP_E(I,J,K) -! write(6,*)' ',SH(I,J,K),SH_E -! within domain - ELSE IF((PSIG(I,J,K).LT.P(1)).AND. - & (PSIG(I,J,K).GT.P(NMAX)))THEN - DO L=1,NMAX-1 - IF((PSIG(I,J,K).LT.P(L)).AND. - & (PSIG(I,J,K).GE.P(L+1)))THEN - W = (APG(I,J,K)-AP(L))/(AP(L+1)-AP(L)) -c W1=(PSIG(I,J,K)-P(L))/(P(L+1)-P(L)) - DIV(I,J,K) = DIVP(I,J,L)+ - & W*(DIVP(I,J,L+1)-DIVP(I,J,L)) - VORT(I,J,K) = VORTP(I,J,L)+ - & W*(VORTP(I,J,L+1)-VORTP(I,J,L)) - U(I,J,K) = UP(I,J,L)+W*(UP(I,J,L+1)-UP(I,J,L)) - V(I,J,K) = VP(I,J,L)+W*(VP(I,J,L+1)-VP(I,J,L)) - TV(I,J,K) = TVP(I,J,L)+W*(TVP(I,J,L+1)-TVP(I,J,L)) - SH(I,J,K) = SHP(I,J,L)+W*(SHP(I,J,L+1)-SHP(I,J,L)) - CYCLE CYC_123 ! GO TO 123 - END IF - END DO -! 123 CONTINUE -! above top - ELSE IF(PSIG(I,J,K).LE.P(NMAX))THEN - DIV(I,J,K) = DIVP(I,J,NMAX) - VORT(I,J,K) = VORTP(I,J,NMAX) - U(I,J,K) = UP(I,J,NMAX) - V(I,J,K) = VP(I,J,NMAX) - TDRY = TP_E(I,J,NMAX)-GAMA*(H(I,J,K)-HP(I,J,NMAX)) - SH(I,J,K) = SHP(I,J,NMAX) - SH_E = SH(I,J,K)+HSH_T(I,J,K) - TV(I,J,K) = TDRY*(1.+COEF1*SH_E)-HT_T(I,J,K) - ELSE - write(6,*)'SOMETHING IS WRONG' - END IF - - END DO CYC_123 - END DO - END DO - -!!$omp parallel do -!!$omp& private(I,J,K) - DO J=1,JX - DO I=1,IX - HDPB(I,J,1) = PDPB(I,J,1) - HDPB(I,J,2) = PDPB(I,J,2) - HDPB(I,J,3) = PDPB(I,J,3) - DO K=1,KMAX-1 - HDPB(I,J,KMAX+4+4*(K-1)) = DIV(I,J,K) - HDPB(I,J,KMAX+5+4*(K-1)) = VORT(I,J,K) - HDPB(I,J,KMAX+6+4*(K-1)) = U(I,J,K) - HDPB(I,J,KMAX+7+4*(K-1)) = V(I,J,K) - HDPB(I,J,KMAX*5+3+K) = SH(I,J,K) - HDPB(I,J,3+K) = TV(I,J,K) - END DO - END DO - END DO - - DEALLOCATE ( SIREF,SLREF,PD1,tref ) - DEALLOCATE ( TV, DIV, VORT, U, V, SH ) - DEALLOCATE ( PSIG, RH, APG ) - DEALLOCATE ( P, AP ) - DEALLOCATE ( DIVP, VORTP, UP, VP, RHP, SHP ) - DEALLOCATE ( TVP, TVP_E, TP_E, SHP_E, HT_T, HSH_T, TVP_E4) - - END - - SUBROUTINE P2SIG30(IX,JX,KMAX,MTV,MTV3,PDPB,PDAT,HDAT,PSL, - & PSFCM,H,HP,KST,nvcd,idvc,idsl,vcrd) - -c P to SIG conversion -c -c Input: PDPB (perturbation part) -c Input: PDAT (total field), PDPB+PDAT = ENV part -C Ouput: HDAT (the value at the top most level kmax is not changed) -c KST: not used - - use sigio_module - use sigio_r_module - - implicit none - integer ix, jx, kmax, mtv, mtv3, kst - integer * 4 nvcd, idvc, idsl -! integer, PARAMETER :: IX=41, JX=41 - - REAL(4) HDAT(IX,JX,MTV) - REAL PDPB(IX,JX,MTV3),PDAT(IX,JX,MTV3) - REAL ZS(IX,JX),APS(IX,JX),PSL(IX,JX) - REAL H(IX,JX,KMAX),HP(IX,JX,2*KMAX+1) - REAL HDPB1,HDPB2,HDPB3,HDPB4 - - REAL(4) PS(IX,JX) - -c REAL(4) FHOUR,X(160),SI(KMAX+1),SL(KMAX) -! REAL*4 FHOUR,DUMMY(245) -! COMMON /COEF3/FHOUR,DUMMY -! REAL DUMMY8(245) - - REAL, ALLOCATABLE :: TV(:,:,:),DIV(:,:,:),VORT(:,:,:), - & SH(:,:,:) - REAL, ALLOCATABLE :: RH(:,:,:), - & APG(:,:,:) - REAL, ALLOCATABLE :: P(:),AP(:) - REAL, ALLOCATABLE :: DIVP(:,:,:),VORTP(:,:,:), - & RHP(:,:,:) - REAL, ALLOCATABLE :: TVP(:,:,:),TVP_E(:,:,:) - REAL, ALLOCATABLE :: TP_E(:,:,:) - REAL, ALLOCATABLE :: SHP(:,:,:),SHP_E(:,:,:) - REAL, ALLOCATABLE :: HT_T(:,:,:),HSH_T(:,:,:) - - REAL(4), ALLOCATABLE :: PSIG(:,:,:), TVP_E4(:,:,:) - - REAL(4), ALLOCATABLE :: SIREF(:),SLREF(:),PD1(:),tref(:) - - REAL(4) vcrd(KMAX+1,nvcd),PSREF(1) -! - real, parameter :: COEF1=461.5/287.05-1.0 - &, COEF2=287.05/9.8 - &, GAMA=6.5E-3, COEF3=COEF2*GAMA -! - integer kmax1, nmax, i, j, k, l, n, ntrac, iret - real es, shs, w, dtemp, tdry, psfcm, sh_e, w1, tvd, tvu - - KMAX1 = KMAX+1 - NMAX = 2*KMAX+1 - - ALLOCATE ( SIREF(KMAX1),SLREF(KMAX),PD1(KMAX), tref(kmax) ) - -! DUMMY8=DUMMY -! IDVC=DUMMY(220) -! IDSL=DUMMY(219) -! CALL MODPR(1,1,KMAX,IDVC,IDSL, -! & DUMMY8(1),DUMMY8(1),DUMMY8(KMAX+2),1.E5, - - PSREF = 1.E5 - tref = 270.0 - - CALL sigio_modpr(1,1,KMAX,nvcd,idvc,idsl,vcrd,iret, - & ps=PSREF,t=tref,pd=pd1,pm=SLREF) - - SIREF(1)=1.E5 - do k=1,KMAX - SIREF(k+1)=SIREF(k)-pd1(k) - end do - - SIREF = SIREF/1.E5 - SLREF = SLREF/1.E5 - - ALLOCATE ( TV(IX,JX,KMAX), DIV(IX,JX,KMAX), - & VORT(IX,JX,KMAX),SH(IX,JX,KMAX) ) - - ALLOCATE ( PSIG(IX,JX,KMAX),RH(IX,JX,KMAX), - & APG(IX,JX,KMAX+1) ) - - ALLOCATE ( HT_T(IX,JX,KMAX),HSH_T(IX,JX,KMAX) ) - - ALLOCATE ( TVP(IX,JX,NMAX),TVP_E(IX,JX,NMAX), - & SHP(IX,JX,NMAX),SHP_E(IX,JX,NMAX), - & TP_E(IX,JX,NMAX), TVP_E4(IX,JX,NMAX) ) - - ALLOCATE ( P(NMAX),AP(NMAX) ) - ALLOCATE ( DIVP(IX,JX,NMAX),VORTP(IX,JX,NMAX), - & RHP(IX,JX,NMAX) ) - -c Surface Height and Surface Press -!$omp parallel do -!$omp& private(I,J) - DO J=1,JX - DO I=1,IX - ZS(I,J) = PDPB(I,J,1) ! Full field - PS(I,J) = EXP(PDPB(I,J,2))*1000. ! FULL field - APS(I,J) = ALOG(1.*PS(I,J)) - END DO - END DO - -! print*,'test 44444' - -c DIV, VORT, U, V, T and Specific Humidity at P-Level -!$omp parallel do -!$omp& private(I,J,N) - DO J=1,JX - DO I=1,IX - DO N=1,NMAX - DIVP(I,J,N) = PDPB(I,J,NMAX+4+4*(N-1)) - VORTP(I,J,N) = PDPB(I,J,NMAX+5+4*(N-1)) - SHP(I,J,N) = PDPB(I,J,NMAX*5+3+N) - SHP_E(I,J,N) = SHP(I,J,N)+PDAT(I,J,NMAX*5+3+N) - TVP(I,J,N) = PDPB(I,J,3+N) - TVP_E(I,J,N) = TVP(I,J,N)+PDAT(I,J,3+N) - TP_E(I,J,N) = TVP_E(I,J,N)/(1.+COEF1*SHP_E(I,J,N)) - END DO - END DO - END DO - -! print*,'test 44445' - -!$omp parallel do -!$omp& private(I,J,K) - DO J=1,JX - DO I=1,IX - DO K=1,KMAX-1 - HSH_T(I,J,K) = HDAT(I,J,KMAX*3+2+K) ! Specific Hum. - HT_T(I,J,K) = HDAT(I,J,2+K) - END DO - END DO - END DO - -c Const. P-Level - DO K=1,KMAX - P(2*K-1) = SIREF(K)*PSFCM - P(2*K) = SLREF(K)*PSFCM - END DO - P(NMAX) = SLREF(KMAX)*0.5*PSFCM - DO N=1,NMAX - AP(N) = ALOG(P(N)) - END DO - - DO J=1,JX - DO I=1,IX - TVD=TVP_E(I,J,1) - HP(I,J,1)=ZS(I,J)- - & TP_E(I,J,1)/GAMA*(1.-(PS(I,J)/P(1))**COEF3) - DO N=2,NMAX - TVU=TVP_E(I,J,N) - HP(I,J,N)=HP(I,J,N-1)- - & COEF2*0.5*(TVD+TVU)*(AP(N)-AP(N-1)) - TVD=TVU - END DO - END DO - END DO - -! print*,'test 44446' - -c Press at Sigma-Level - - tvp_e4 = tvp_e - CALL sigio_modpr(IX*JX,IX*JX,KMAX,nvcd,idvc,idsl,vcrd,iret, - & ps=PS,t=tvp_e4,pm=PSIG) - -!$omp parallel do -!$omp& private(I,J,K) - DO K=1,KMAX - DO J=1,JX - DO I=1,IX - APG(I,J,K) = ALOG(1.*PSIG(I,J,K)) - END DO - END DO - END DO - - -!!$omp parallel do -!!$omp& private(I,J,K,L) - DO J=1,JX - DO I=1,IX - DO K=1,KMAX - IF(PSIG(I,J,K).GE.P(1))THEN - H(I,J,K)=HP(I,J,1)+ - & TP_E(I,J,1)/GAMA*(1.-(PSIG(I,J,K)/P(1))**COEF3) - ELSE IF((PSIG(I,J,K).LT.P(1)).AND. - & (PSIG(I,J,K).GT.P(NMAX)))THEN - DO L=1,NMAX-1 - IF((PSIG(I,J,K).LT.P(L)).AND. - & (PSIG(I,J,K).GE.P(L+1)))THEN - H(I,J,K)=HP(I,J,L)+ - & TP_E(I,J,L)/GAMA*(1.-(PSIG(I,J,K)/P(L))**COEF3) - END IF - END DO - ELSE IF(PSIG(I,J,K).LE.P(NMAX))THEN - H(I,J,K)=HP(I,J,NMAX)+ - & TP_E(I,J,NMAX)/GAMA*(1.-(PSIG(I,J,K)/P(NMAX))**COEF3) - ELSE - write(6,*)'SOMETHING IS WRONG' - END IF - END DO - END DO - END DO - - DO N=1,NMAX - K=(N-1)/2+1 -c write(6,*)'Press=',N,P(N)/100. -c write(6,*)'Press2=',N,K,P(N),HP(20,20,N),H(20,20,K) - END DO - -c RH at Press level -! DO N=1,NMAX - N=1 -!$omp parallel do -!$omp& private(I,J,DTEMP,ES,SHS) - DO J=1,JX - DO I=1,IX - DTEMP=TP_E(I,J,N)-273.15 - ES=611.2*EXP(17.67*DTEMP/(DTEMP+243.5)) - SHS=0.622*ES/(P(N)-0.378*ES) - RHP(I,J,N)=MIN(MAX(SHP_E(I,J,N)/SHS,0.),1.0) - END DO - END DO -! END DO - -! print*,'test 44447' - -! Interpolate to Sigma Level. -!$omp parallel do -!$omp& private(I,J,K,L,TDRY,DTEMP,ES,SHS,SH_E,W,W1) - DO J=1,JX - DO I=1,IX - CYC_123: DO K=1,KMAX - IF(PSIG(I,J,K).GE.P(1))THEN -! below Press K=1 - DIV(I,J,K)=DIVP(I,J,1) - VORT(I,J,K)=VORTP(I,J,1) - RH(I,J,K)=RHP(I,J,1) ! RH at SIGMA K=1 - TDRY=TP_E(I,J,1)-GAMA*(H(I,J,K)-HP(I,J,1)) - DTEMP=TDRY-273.15 - ES=611.2*EXP(17.67*DTEMP/(DTEMP+243.5)) - SHS=0.622*ES/(PSIG(I,J,K)-0.378*ES) - SH_E=RH(I,J,K)*SHS - SH(I,J,K)=SH_E-HSH_T(I,J,K) ! Pert. Part - TV(I,J,K)=TDRY*(1.+COEF1*SH_E)-HT_T(I,J,K) -! write(6,*)'LLL2=',SHP(I,J,1),SHP_E(I,J,K) -! write(6,*)' ',SH(I,J,K),SH_E -! within domain - ELSE IF((PSIG(I,J,K).LT.P(1)).AND. - & (PSIG(I,J,K).GT.P(NMAX)))THEN - DO L=1,NMAX-1 - IF((PSIG(I,J,K).LT.P(L)).AND. - & (PSIG(I,J,K).GE.P(L+1)))THEN - W = (APG(I,J,K)-AP(L))/(AP(L+1)-AP(L)) -c W1=(PSIG(I,J,K)-P(L))/(P(L+1)-P(L)) - DIV(I,J,K) = DIVP(I,J,L)+ - & W*(DIVP(I,J,L+1)-DIVP(I,J,L)) - VORT(I,J,K) = VORTP(I,J,L)+ - & W*(VORTP(I,J,L+1)-VORTP(I,J,L)) - TV(I,J,K) = TVP(I,J,L)+W*(TVP(I,J,L+1)-TVP(I,J,L)) - SH(I,J,K) = SHP(I,J,L)+W*(SHP(I,J,L+1)-SHP(I,J,L)) - CYCLE CYC_123 ! GO TO 123 - END IF - END DO -! 123 CONTINUE -! above top - ELSE IF(PSIG(I,J,K).LE.P(NMAX))THEN - DIV(I,J,K) = DIVP(I,J,NMAX) - VORT(I,J,K) = VORTP(I,J,NMAX) - TDRY = TP_E(I,J,NMAX)-GAMA*(H(I,J,K)-HP(I,J,NMAX)) - SH(I,J,K) = SHP(I,J,NMAX) - SH_E = SH(I,J,K)+HSH_T(I,J,K) - TV(I,J,K) = TDRY*(1.+COEF1*SH_E)-HT_T(I,J,K) - ELSE - write(6,*)'SOMETHING IS WRONG' - END IF - - END DO CYC_123 - END DO - END DO - -! print*,'test 44448' - -!!$omp parallel do -!!$omp& private(I,J,K,HDPB1,HDPB2,HDPB3,HDPB4) - DO J=1,JX - DO I=1,IX - HDAT(I,J,1) = PDPB(I,J,1) - HDAT(I,J,2) = PDPB(I,J,2) - PSL(I,J) = PDAT(I,J,3)+PDPB(I,J,3) -! HDAT(I,J,3) = HDAT(I,J,3)+PDPB(I,J,3) - DO K=1,KMAX - HDPB1 = HDAT(I,J,KMAX+3+2*(K-1)) + DIV(I,J,K) - HDAT(I,J,KMAX+3+2*(K-1)) = HDPB1 - HDPB2 = HDAT(I,J,KMAX+4+2*(K-1)) + VORT(I,J,K) - HDAT(I,J,KMAX+4+2*(K-1)) = HDPB2 - HDPB3 = HDAT(I,J,KMAX*3+2+K) + SH(I,J,K) - HDAT(I,J,KMAX*3+2+K) = HDPB3 - HDPB4 = HDAT(I,J,2+K) + TV(I,J,K) - HDAT(I,J,2+K) = HDPB4 - END DO - END DO - END DO - -! print*,'test 44449' - - DEALLOCATE ( SIREF,SLREF,PD1,tref ) - DEALLOCATE ( TV, DIV, VORT, SH ) - DEALLOCATE ( PSIG, RH, APG ) - DEALLOCATE ( P, AP ) - DEALLOCATE ( DIVP, VORTP, RHP, SHP ) - DEALLOCATE ( TVP, TVP_E, TP_E, SHP_E, HT_T, HSH_T, TVP_E4) - - END - - - - SUBROUTINE MOVETX1(IGU,JGU,GLON,GLAT,DATG,DDAT) - - PARAMETER (IX=41,JX=41,NSG=54000) - - DIMENSION DATG(IGU,JGU),DDAT(IGU,JGU) - DIMENSION GLAT(IGU,JGU),GLON(IGU,JGU) - DIMENSION ING(NSG),JNG(NSG) - - COMMON /TR/ING,JNG,IB - COMMON /NHC2/MDX,MDY - COMMON /NHC3/AMDX,AMDY - - RDIST2=AMDX*AMDX+AMDY*AMDY - IF(RDIST2.LE.0.02)THEN - DO I = 1,IB - IW = ING(I) - JW = JNG(I) - DATG(IW,JW)=DATG(IW,JW)+DDAT(IW,JW) - END DO - RETURN - END IF - - IWMAX=0 - IWMIN=10000 - JWMAX=0 - JWMIN=10000 - DO I = 1,IB - IW = ING(I) - JW = JNG(I) - IF(IWMAX.LT.IW)IWMAX=IW - IF(IWMIN.GT.IW)IWMIN=IW - IF(JWMAX.LT.JW)JWMAX=JW - IF(JWMIN.GT.JW)JWMIN=JW - END DO - IWMAX2=IWMAX+1 - IWMIN2=IWMIN-1 - JWMAX2=JWMAX+1 - JWMIN2=JWMIN-1 - -! write(6,*)'qliu=',IWMAX2,IWMIN2,JWMAX2,JWMIN2 - -!$omp parallel do -!$omp& private(II,JJ,IW1,JW1,IW,JW,HLA,HLO,HLO1,HLO2,HLA1,HLA2, -!$omp& LX,LY,DXX,DYY,X1,X2,Y1,Y2,DATT) - DO IW1 = IWMIN2,IWMAX2 - CYC_555: DO JW1 = JWMIN2,JWMAX2 - IW=IW1+MDX - JW=JW1+MDY - IF(IW.GT.IGU)IW=IW-IGU - IF(IW.LT.1)IW=IW+IGU - HLA = GLAT(IW,JW) - HLO = GLON(IW,JW) -C - DO II=1,IGU-1 - HLO1 = GLON(II,10)+AMDX - HLO2 = GLON(II+1,10)+AMDX - IF(HLO1.GT.360.)HLO1=HLO1-360. - IF(HLO1.LT.0.)HLO1=HLO1+360. - IF(HLO2.GT.360.)HLO2=HLO2-360. - IF(HLO2.LT.0.)HLO2=HLO2+360. - IF((HLO.GT.HLO1.and.HLO.LE.HLO2).OR. - & (HLO.LE.HLO1.and.HLO.GT.HLO2))THEN - DO JJ=1,JGU-1 - HLA1=GLAT(10,JJ)+AMDY - HLA2=GLAT(10,JJ+1)+AMDY - IF(HLA.LT.HLA1.and.HLA.GE.HLA2)THEN - LX=II - LY=JJ+1 - - DXX = (HLO-HLO1)/(HLO2-HLO1) - IF(HLO1.GT.HLO2)DXX=1.-(HLO-HLO2)/(HLO1-HLO2) - DYY = (HLA-HLA2)/(HLA1-HLA2) -C - X1 = DDAT(LX ,LY-1)*DYY + DDAT(LX ,LY )*(1-DYY) - X2 = DDAT(LX+1,LY-1)*DYY + DDAT(LX+1,LY )*(1-DYY) - Y1 = DDAT(LX+1,LY )*DXX + DDAT(LX ,LY )*(1-DXX) - Y2 = DDAT(LX+1,LY-1)*DXX + DDAT(LX ,LY-1)*(1-DXX) - DATT=(X1*(1.-DXX)+X2*DXX + Y1*(1.-DYY)+Y2*DYY)/2. - DATG(IW,JW)=DATG(IW,JW)+DATT -c write(6,*)'tttest=',DATT,DATG(IW,JW),LX,LY - CYCLE CYC_555 ! GO TO 555 - END IF - END DO - - END IF - END DO -! 555 CONTINUE - - ENDDO CYC_555 - ENDDO - END - - - SUBROUTINE MOVETX(IGU,JGU,I30S,J30S,GLON,GLAT,DATG,DDAT) - - PARAMETER (IX=41,JX=41,NSG=54000) - - DIMENSION DATG(IGU,JGU),DDAT(IGU,JGU) - DIMENSION GLAT(IGU,JGU),GLON(IGU,JGU) - DIMENSION ING(NSG),JNG(NSG) - DIMENSION HLON(300),HLAT(300) - DIMENSION DTT(300,300),DTT2(300,300) -c DIMENSION TEST(IGU,JGU) - - COMMON /TR/ING,JNG,IB - COMMON /NHC2/MDX,MDY - COMMON /NHC3/AMDX,AMDY - - - RDIST2=AMDX*AMDX+AMDY*AMDY - IF(RDIST2.LE.0.02)THEN - DO I = 1,IB - IW = ING(I)-I30S+1 - JW = JNG(I)-J30S+1 - DATG(IW,JW)=DATG(IW,JW)+DDAT(IW,JW) - END DO - RETURN - END IF - -c TEST=DATG -c CALL MOVETX1(TEST,DDAT) - - IWMAX=0 - IWMIN=10000 - JWMAX=0 - JWMIN=10000 - DO I = 1,IB - IW = ING(I)-I30S+1 - JW = JNG(I)-J30S+1 - IF(IWMAX.LT.IW)IWMAX=IW - IF(IWMIN.GT.IW)IWMIN=IW - IF(JWMAX.LT.JW)JWMAX=JW - IF(JWMIN.GT.JW)JWMIN=JW - END DO - IWMAX1=IWMAX+1 - IWMIN1=IWMIN-1 - JWMAX1=JWMAX+1 - JWMIN1=JWMIN-1 - -c write(6,*)'qliu=',IWMAX1,IWMIN1,JWMAX1,JWMIN1 - - IIM=IWMAX-IWMIN+5 - JJM=JWMAX-JWMIN+5 - DO II=1,IIM - II1=II+IWMIN-3 - IF(II1.GT.IGU)II1=II1-IGU - IF(II1.LT.1)II1=II1+IGU - HLON(II) = GLON(II1,10)+AMDX - DO JJ=1,JJM - JJ1=JJ+JWMIN-3 - HLAT(JJ)=90.-(GLAT(10,JJ1)+AMDY) - DTT(II,JJ)=DDAT(II1,JJ1) - END DO - END DO - - CALL splie2(HLON,HLAT,DTT,IIM,JJM,DTT2) - -!$omp parallel do -!$omp& private(IW1,JW1,IW,JW,HLA,HLO,DATT) - DO IW1 = IWMIN1,IWMAX1 - DO JW1 = JWMIN1,JWMAX1 - IW=IW1+MDX - JW=JW1+MDY - IF(IW.GT.IGU)IW=IW-IGU - IF(IW.LT.1)IW=IW+IGU - HLA = 90.-GLAT(IW,JW) - HLO = GLON(IW,JW) -C - CALL splin2(HLON,HLAT,DTT,DTT2,IIM,JJM,HLO,HLA,DATT) - DATG(IW,JW)=DATG(IW,JW)+DATT - -c DIFF=TEST(IW,JW)-DATG(IW,JW) -c DIFF1=ABS(DIFF/(ABS(TEST(IW,JW))+1.E-15)) -c IF(DIFF1.GT.0.2)THEN -c write(6,*)'QQQQ=',DIFF,TEST(IW,JW),DATG(IW,JW) -c END IF - ENDDO - ENDDO - END - - - SUBROUTINE splie2(x1a,x2a,ya,m,n,y2a) - INTEGER m,n,NN - PARAMETER (NN=300) - REAL x1a(NN),x2a(NN),y2a(NN,NN),ya(NN,NN) - INTEGER j,k - REAL y2tmp(NN),ytmp(NN) -!$omp parallel do -!$omp& private(j,k,ytmp,y2tmp) - do j=1,m - do k=1,n - ytmp(k)=ya(j,k) - end do - call spline(x2a,ytmp,n,1.e30,1.e30,y2tmp) - do k=1,n - y2a(j,k)=y2tmp(k) - end do - end do - return - END - - SUBROUTINE splin2(x1a,x2a,ya,y2a,m,n,x1,x2,y) - INTEGER m,n,NN - PARAMETER (NN=300) - REAL x1,x2,y,x1a(NN),x2a(NN) - REAL y2a(NN,NN),ya(NN,NN) - INTEGER j,k - REAL y2tmp(NN),ytmp(NN),yytmp(NN) - do j=1,m - do k=1,n - ytmp(k)=ya(j,k) - y2tmp(k)=y2a(j,k) - end do - call splint(x2a,ytmp,y2tmp,n,x2,yytmp(j)) - end do - call spline(x1a,yytmp,m,1.e30,1.e30,y2tmp) - call splint(x1a,yytmp,y2tmp,m,x1,y) - return - END - - - SUBROUTINE splint(xa,ya,y2a,n,x,y) - INTEGER n,NN - PARAMETER (NN=300) - REAL x,y,xa(NN),y2a(NN),ya(NN) - INTEGER k,khi,klo - REAL a,b,h - klo=1 - khi=n - 1 if((khi-klo).gt.1)then - k=(khi+klo)/2 - if(xa(k).gt.x)then - khi=k - else - klo=k - end if - go to 1 - end if - h=xa(khi)-xa(klo) - if(h.eq.0.)pause 'bad xa input in splint' - a=(xa(khi)-x)/h - b=(x-xa(klo))/h - y=a*ya(klo)+b*ya(khi)+ - * ((a**3-a)*y2a(klo)+(b**3-b)*y2a(khi))*(h**2)/6. - return - END - - SUBROUTINE spline(x,y,n,yp1,ypn,y2) - INTEGER n,NN,NMAX - PARAMETER (NN=300,NMAX=2000) - REAL yp1,ypn,x(NN),y(NN),y2(NN) - INTEGER i,k - REAL p,qn,sig,un,u(NMAX) - if(yp1.gt..99e30)then - y2(1)=0. - u(1)=0. - else - y2(1)=-0.5 - u(1)=(3./(x(2)-x(1)))*((y(2)-y(1))/(x(2)-x(1))-yp1) - end if - do i=2,n-1 - sig=(x(i)-x(i-1))/(x(i+1)-x(i-1)) - p=sig*y2(i-1)+2. - y2(i)=(sig-1.)/p - u(i)=(6.*((y(i+1)-y(i))/(x(i+1)-x(i))-(y(i)-y(i-1)) - * /(x(i)-x(i-1)))/(x(i+1)-x(i-1))-sig*u(i-1))/p - end do - if(ypn.gt..99e30)then - qn=0. - un=0. - else - qn=0.5 - un=(3./(x(n)-x(n-1)))*(ypn-(y(n)-y(n-1))/(x(n)-x(n-1))) - end if - y2(n)=(un-qn*u(n-1))/(qn*y2(n-1)+1.) - do k=n-1,1,-1 - y2(k)=y2(k)*y2(k+1)+u(k) - end do - return - END - -C - SUBROUTINE FIND_NEWCT1(UD,VD) - PARAMETER (IR=15,IT=24,IX=41,JX=41) - PARAMETER (ID=41,JD=41,DTX=0.2,DTY=0.2) ! Search x-Domain (ID-1)*DTX - DIMENSION TNMX(ID,JD),UD(IX,JX),VD(IX,JX) - DIMENSION WTM(IR),R0(IT) - COMMON /POSIT/CLON_NEW,CLAT_NEW,SLON,SLAT,CLON,CLAT,RAD - - COMMON /vect/R0,XVECT(IT),YVECT(IT) -c COMMON /CT/SLON,SLAT,CLON,CLAT,RAD -c COMMON /GA/CLON_NEW,CLAT_NEW,R0 -C - PI=ASIN(1.)*2. - RAD=PI/180. -C - XLAT = CLAT-(JD-1)*DTY/2. - XLON = CLON-(ID-1)*DTX/2. -c write(6,*)'STARTING LAT, LON AT FIND NEW CENTER ',XLAT,XLON -C - DO I=1,ID - DO J=1,JD - TNMX(I,J) = 0. - BLON = XLON + (I-1)*DTX - BLAT = XLAT + (J-1)*DTY -C -C.. CALCULATE TANGENTIAL WIND EVERY 1 deg INTERVAL -C.. 10*10 deg AROUND 1ST 1ST GUESS VORTEX CENTER -C - DO 10 JL=1,IR - WTS= 0. - DO 20 IL=1,IT - DR = JL - DD = (IL-1)*15*RAD - DLON = DR*COS(DD) - DLAT = DR*SIN(DD) - TLON = BLON + DLON - TLAT = BLAT + DLAT -C.. INTERPOLATION U, V AT TLON,TLAT AND CLACULATE TANGENTIAL WIND - IDX = IFIX(TLON) - SLON + 1 - IDY = IFIX(TLAT) - SLAT + 1 - DXX = TLON - IFIX(TLON) - DYY = TLAT - IFIX(TLAT) -C - X1 = UD(IDX ,IDY+1)*DYY + UD(IDX ,IDY)*(1-DYY) - X2 = UD(IDX+1,IDY+1)*DYY + UD(IDX+1,IDY)*(1-DYY) - Y1 = UD(IDX+1,IDY )*DXX + UD(IDX,IDY )*(1-DXX) - Y2 = UD(IDX+1,IDY+1)*DXX + UD(IDX,IDY+1)*(1-DXX) - UT = (X1*(1-DXX)+X2*DXX + Y1*(1-DYY)+Y2*DYY)/2. - IF(IL.EQ.0.OR.IL.EQ.13) UT = Y1 - IF(IL.EQ.7.OR.IL.EQ.19) UT = X1 -C - X1 = VD(IDX ,IDY+1)*DYY + VD(IDX ,IDY)*(1-DYY) - X2 = VD(IDX+1,IDY+1)*DYY + VD(IDX+1,IDY)*(1-DYY) - Y1 = VD(IDX+1,IDY )*DXX + VD(IDX,IDY )*(1-DXX) - Y2 = VD(IDX+1,IDY+1)*DXX + VD(IDX,IDY+1)*(1-DXX) - VT = (X1*(1-DXX)+X2*DXX + Y1*(1-DYY)+Y2*DYY)/2. - IF(IL.EQ.0.OR.IL.EQ.13) VT = Y1 - IF(IL.EQ.7.OR.IL.EQ.19) VT = X1 -C.. TANGENTIAL WIND - WT = -SIN(DD)*UT + COS(DD)*VT - WTS = WTS+WT -20 CONTINUE - WTM(JL) = WTS/24. -10 CONTINUE -C -C Southern Hemisphere - IF(CLAT_NEW.LT.0)THEN - DO JL=1,IR - WTM(JL)=-WTM(JL) - END DO - END IF -C EnD SH - - TX = -10000000. - DO KL = 1,IR - IF(WTM(KL).GE.TX) THEN - TX = WTM(KL) - ENDIF - ENDDO -C - TNMX(I,J) = TX - ENDDO - ENDDO - - -C.. FIND NEW CENTER - TTX = -1000000. - DO I=1,ID - DO J=1,JD - IF(TNMX(I,J).GE.TTX) THEN - TTX = TNMX(I,J) - NIC = I - NJC = J - ENDIF - ENDDO - ENDDO -C - CLAT_NEW = XLAT + (NJC-1)*DTY - CLON_NEW = XLON + (NIC-1)*DTX -C - write(6,*)'NEW CENTER, I, J IS ',NIC,NJC - write(6,*)'NEW CENTER, LAT,LON IS ',CLAT_NEW,CLON_NEW - write(6,*)'MAX TAN. WIND AT NEW CENTER IS ',TTX -C - RETURN - END - diff --git a/sorc/relocate_mv_nvortex.fd/sptranf.f b/sorc/relocate_mv_nvortex.fd/sptranf.f deleted file mode 100755 index 211808d5a4..0000000000 --- a/sorc/relocate_mv_nvortex.fd/sptranf.f +++ /dev/null @@ -1,170 +0,0 @@ -C----------------------------------------------------------------------- - SUBROUTINE SPTRANF(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX, - & IP,IS,JN,JS,KW,KG,JB,JE,JC, - & WAVE,GRIDN,GRIDS,IDIR) -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C -C SUBPROGRAM: SPTRAN PERFORM A SCALAR SPHERICAL TRANSFORM -C PRGMMR: IREDELL ORG: W/NMC23 DATE: 96-02-29 -C -C ABSTRACT: THIS SUBPROGRAM PERFORMS A SPHERICAL TRANSFORM -C BETWEEN SPECTRAL COEFFICIENTS OF SCALAR QUANTITIES -C AND FIELDS ON A GLOBAL CYLINDRICAL GRID. -C THE WAVE-SPACE CAN BE EITHER TRIANGULAR OR RHOMBOIDAL. -C THE GRID-SPACE CAN BE EITHER AN EQUALLY-SPACED GRID -C (WITH OR WITHOUT POLE POINTS) OR A GAUSSIAN GRID. -C THE WAVE AND GRID FIELDS MAY HAVE GENERAL INDEXING, -C BUT EACH WAVE FIELD IS IN SEQUENTIAL 'IBM ORDER', -C I.E. WITH ZONAL WAVENUMBER AS THE SLOWER INDEX. -C TRANSFORMS ARE DONE IN LATITUDE PAIRS FOR EFFICIENCY; -C THUS GRID ARRAYS FOR EACH HEMISPHERE MUST BE PASSED. -C IF SO REQUESTED, JUST A SUBSET OF THE LATITUDE PAIRS -C MAY BE TRANSFORMED IN EACH INVOCATION OF THE SUBPROGRAM. -C THE TRANSFORMS ARE ALL MULTIPROCESSED OVER LATITUDE EXCEPT -C THE TRANSFORM FROM FOURIER TO SPECTRAL IS MULTIPROCESSED -C OVER ZONAL WAVENUMBER TO ENSURE REPRODUCIBILITY. -C TRANSFORM SEVERAL FIELDS AT A TIME TO IMPROVE VECTORIZATION. -C SUBPROGRAM CAN BE CALLED FROM A MULTIPROCESSING ENVIRONMENT. -C -C PROGRAM HISTORY LOG: -C 96-02-29 IREDELL -C 1998-12-15 IREDELL GENERIC FFT USED -C OPENMP DIRECTIVES INSERTED -C -C USAGE: CALL SPTRANF(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX, -C & IP,IS,JN,JS,KW,KG,JB,JE,JC, -C & WAVE,GRIDN,GRIDS,IDIR) -C INPUT ARGUMENTS: -C IROMB - INTEGER SPECTRAL DOMAIN SHAPE -C (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL) -C MAXWV - INTEGER SPECTRAL TRUNCATION -C IDRT - INTEGER GRID IDENTIFIER -C (IDRT=4 FOR GAUSSIAN GRID, -C IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES, -C IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES) -C IMAX - INTEGER EVEN NUMBER OF LONGITUDES. -C JMAX - INTEGER NUMBER OF LATITUDES. -C KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM. -C IP - INTEGER LONGITUDE INDEX FOR THE PRIME MERIDIAN -C IS - INTEGER SKIP NUMBER BETWEEN LONGITUDES -C JN - INTEGER SKIP NUMBER BETWEEN N.H. LATITUDES FROM NORTH -C JS - INTEGER SKIP NUMBER BETWEEN S.H. LATITUDES FROM SOUTH -C KW - INTEGER SKIP NUMBER BETWEEN WAVE FIELDS -C KG - INTEGER SKIP NUMBER BETWEEN GRID FIELDS -C JB - INTEGER LATITUDE INDEX (FROM POLE) TO BEGIN TRANSFORM -C JE - INTEGER LATITUDE INDEX (FROM POLE) TO END TRANSFORM -C JC - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS -C WAVE - REAL (*) WAVE FIELDS IF IDIR>0 -C GRIDN - REAL (*) N.H. GRID FIELDS (STARTING AT JB) IF IDIR<0 -C GRIDS - REAL (*) S.H. GRID FIELDS (STARTING AT JB) IF IDIR<0 -C IDIR - INTEGER TRANSFORM FLAG -C (IDIR>0 FOR WAVE TO GRID, IDIR<0 FOR GRID TO WAVE) -C OUTPUT ARGUMENTS: -C WAVE - REAL (*) WAVE FIELDS IF IDIR<0 -C GRIDN - REAL (*) N.H. GRID FIELDS (STARTING AT JB) IF IDIR>0 -C GRIDS - REAL (*) S.H. GRID FIELDS (STARTING AT JB) IF IDIR>0 -C -C SUBPROGRAMS CALLED: -C SPTRANF0 SPTRANF SPECTRAL INITIALIZATION -C SPTRANF1 SPTRANF SPECTRAL TRANSFORM -C -C REMARKS: MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL: -C DIMENSION LINEAR QUADRATIC -C ----------------------- --------- ------------- -C IMAX 2*MAXWV+2 3*MAXWV/2*2+2 -C JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1 -C JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1 -C JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3 -C JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3 -C JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1 -C JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1 -C ----------------------- --------- ------------- -C -C ATTRIBUTES: -C LANGUAGE: FORTRAN 77 -C -C$$$ - REAL WAVE(*),GRIDN(*),GRIDS(*) - REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1) - REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2) - REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2) - REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1) - REAL(8) AFFT(2*(50000+4*IMAX)) - REAL CLAT(JB:JE),SLAT(JB:JE),WLAT(JB:JE) - REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2,JB:JE) - REAL PLNTOP(MAXWV+1,JB:JE) - REAL WTOP(2*(MAXWV+1)) - REAL G(IMAX,2) -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MP=0 - - CALL SPTRANF0(IROMB,MAXWV,IDRT,IMAX,JMAX,JB,JE, - & EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP, - & AFFT,CLAT,SLAT,WLAT,PLN,PLNTOP) - -!$OMP PARALLEL DO PRIVATE(KWS,WTOP,G,IJKN,IJKS),FIRSTPRIVATE(AFFT) - - DO K=1,KMAX - -C TRANSFORM WAVE TO GRID -C ---------------------- - IF(IDIR.GT.0) THEN - KWS=(K-1)*KW - WTOP=0 - DO J=JB,JE - CALL SPTRANF1(IROMB,MAXWV,IDRT,IMAX,JMAX,J,J, - & EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP, - & AFFT,CLAT(J),SLAT(J),WLAT(J), - & PLN(1,J),PLNTOP(1,J),MP, - & WAVE(KWS+1),WTOP,G,IDIR) - IF(IP.EQ.1.AND.IS.EQ.1) THEN - DO I=1,IMAX - IJKN=I+(J-JB)*JN+(K-1)*KG - IJKS=I+(J-JB)*JS+(K-1)*KG - GRIDN(IJKN)=G(I,1) - GRIDS(IJKS)=G(I,2) - ENDDO - ELSE - DO I=1,IMAX - IJKN=MOD(I+IP-2,IMAX)*IS+(J-JB)*JN+(K-1)*KG+1 - IJKS=MOD(I+IP-2,IMAX)*IS+(J-JB)*JS+(K-1)*KG+1 - GRIDN(IJKN)=G(I,1) - GRIDS(IJKS)=G(I,2) - ENDDO - ENDIF - ENDDO - -C TRANSFORM GRID TO WAVE -C ---------------------- - - ELSE - KWS=(K-1)*KW - WTOP=0 - DO J=JB,JE - IF(WLAT(J).GT.0.) THEN - IF(IP.EQ.1.AND.IS.EQ.1) THEN - DO I=1,IMAX - IJKN=I+(J-JB)*JN+(K-1)*KG - IJKS=I+(J-JB)*JS+(K-1)*KG - G(I,1)=GRIDN(IJKN) - G(I,2)=GRIDS(IJKS) - ENDDO - ELSE - DO I=1,IMAX - IJKN=MOD(I+IP-2,IMAX)*IS+(J-JB)*JN+(K-1)*KG+1 - IJKS=MOD(I+IP-2,IMAX)*IS+(J-JB)*JS+(K-1)*KG+1 - G(I,1)=GRIDN(IJKN) - G(I,2)=GRIDS(IJKS) - ENDDO - ENDIF - CALL SPTRANF1(IROMB,MAXWV,IDRT,IMAX,JMAX,J,J, - & EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP, - & AFFT,CLAT(J),SLAT(J),WLAT(J), - & PLN(1,J),PLNTOP(1,J),MP, - & WAVE(KWS+1),WTOP,G,IDIR) - ENDIF - ENDDO - ENDIF - ENDDO - END diff --git a/sorc/relocate_mv_nvortex.fd/sptranfv.f b/sorc/relocate_mv_nvortex.fd/sptranfv.f deleted file mode 100755 index bf7fe6fbe1..0000000000 --- a/sorc/relocate_mv_nvortex.fd/sptranfv.f +++ /dev/null @@ -1,211 +0,0 @@ -C----------------------------------------------------------------------- - SUBROUTINE SPTRANFV(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX, - & IP,IS,JN,JS,KW,KG,JB,JE,JC, - & WAVED,WAVEZ,GRIDUN,GRIDUS,GRIDVN,GRIDVS,IDIR) -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C -C SUBPROGRAM: SPTRANFV PERFORM A VECTOR SPHERICAL TRANSFORM -C PRGMMR: IREDELL ORG: W/NMC23 DATE: 96-02-29 -C -C ABSTRACT: THIS SUBPROGRAM PERFORMS A SPHERICAL TRANSFORM -C BETWEEN SPECTRAL COEFFICIENTS OF DIVERGENCES AND CURLS -C AND VECTOR FIELDS ON A GLOBAL CYLINDRICAL GRID. -C THE WAVE-SPACE CAN BE EITHER TRIANGULAR OR RHOMBOIDAL. -C THE GRID-SPACE CAN BE EITHER AN EQUALLY-SPACED GRID -C (WITH OR WITHOUT POLE POINTS) OR A GAUSSIAN GRID. -C THE WAVE AND GRID FIELDS MAY HAVE GENERAL INDEXING, -C BUT EACH WAVE FIELD IS IN SEQUENTIAL 'IBM ORDER', -C I.E. WITH ZONAL WAVENUMBER AS THE SLOWER INDEX. -C TRANSFORMS ARE DONE IN LATITUDE PAIRS FOR EFFICIENCY; -C THUS GRID ARRAYS FOR EACH HEMISPHERE MUST BE PASSED. -C IF SO REQUESTED, JUST A SUBSET OF THE LATITUDE PAIRS -C MAY BE TRANSFORMED IN EACH INVOCATION OF THE SUBPROGRAM. -C THE TRANSFORMS ARE ALL MULTIPROCESSED OVER LATITUDE EXCEPT -C THE TRANSFORM FROM FOURIER TO SPECTRAL IS MULTIPROCESSED -C OVER ZONAL WAVENUMBER TO ENSURE REPRODUCIBILITY. -C TRANSFORM SEVERAL FIELDS AT A TIME TO IMPROVE VECTORIZATION. -C SUBPROGRAM CAN BE CALLED FROM A MULTIPROCESSING ENVIRONMENT. -C -C PROGRAM HISTORY LOG: -C 96-02-29 IREDELL -C 1998-12-15 IREDELL GENERIC FFT USED -C OPENMP DIRECTIVES INSERTED -C -C USAGE: CALL SPTRANFV(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX, -C & IP,IS,JN,JS,KW,KG,JB,JE,JC, -C & WAVED,WAVEZ,GRIDUN,GRIDUS,GRIDVN,GRIDVS,IDIR) -C INPUT ARGUMENTS: -C IROMB - INTEGER SPECTRAL DOMAIN SHAPE -C (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL) -C MAXWV - INTEGER SPECTRAL TRUNCATION -C IDRT - INTEGER GRID IDENTIFIER -C (IDRT=4 FOR GAUSSIAN GRID, -C IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES, -C IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES) -C IMAX - INTEGER EVEN NUMBER OF LONGITUDES. -C JMAX - INTEGER NUMBER OF LATITUDES. -C KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM. -C IP - INTEGER LONGITUDE INDEX FOR THE PRIME MERIDIAN -C IS - INTEGER SKIP NUMBER BETWEEN LONGITUDES -C JN - INTEGER SKIP NUMBER BETWEEN N.H. LATITUDES FROM NORTH -C JS - INTEGER SKIP NUMBER BETWEEN S.H. LATITUDES FROM SOUTH -C KW - INTEGER SKIP NUMBER BETWEEN WAVE FIELDS -C KG - INTEGER SKIP NUMBER BETWEEN GRID FIELDS -C JB - INTEGER LATITUDE INDEX (FROM POLE) TO BEGIN TRANSFORM -C JE - INTEGER LATITUDE INDEX (FROM POLE) TO END TRANSFORM -C JC - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS -C WAVED - REAL (*) WAVE DIVERGENCE FIELDS IF IDIR>0 -C WAVEZ - REAL (*) WAVE VORTICITY FIELDS IF IDIR>0 -C GRIDUN - REAL (*) N.H. GRID U-WINDS (STARTING AT JB) IF IDIR<0 -C GRIDUS - REAL (*) S.H. GRID U-WINDS (STARTING AT JB) IF IDIR<0 -C GRIDVN - REAL (*) N.H. GRID V-WINDS (STARTING AT JB) IF IDIR<0 -C GRIDVS - REAL (*) S.H. GRID V-WINDS (STARTING AT JB) IF IDIR<0 -C IDIR - INTEGER TRANSFORM FLAG -C (IDIR>0 FOR WAVE TO GRID, IDIR<0 FOR GRID TO WAVE) -C OUTPUT ARGUMENTS: -C WAVED - REAL (*) WAVE DIVERGENCE FIELDS IF IDIR<0 -C [WAVED=(D(GRIDU)/DLAM+D(CLAT*GRIDV)/DPHI)/(CLAT*RERTH)] -C WAVEZ - REAL (*) WAVE VORTICITY FIELDS IF IDIR<0 -C [WAVEZ=(D(GRIDV)/DLAM-D(CLAT*GRIDU)/DPHI)/(CLAT*RERTH)] -C GRIDUN - REAL (*) N.H. GRID U-WINDS (STARTING AT JB) IF IDIR>0 -C GRIDUS - REAL (*) S.H. GRID U-WINDS (STARTING AT JB) IF IDIR>0 -C GRIDVN - REAL (*) N.H. GRID V-WINDS (STARTING AT JB) IF IDIR>0 -C GRIDVS - REAL (*) S.H. GRID V-WINDS (STARTING AT JB) IF IDIR>0 -C -C SUBPROGRAMS CALLED: -C SPTRANF0 SPTRANF SPECTRAL INITIALIZATION -C SPTRANF1 SPTRANF SPECTRAL TRANSFORM -C SPDZ2UV COMPUTE WINDS FROM DIVERGENCE AND VORTICITY -C SPUV2DZ COMPUTE DIVERGENCE AND VORTICITY FROM WINDS -C -C REMARKS: MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL: -C DIMENSION LINEAR QUADRATIC -C ----------------------- --------- ------------- -C IMAX 2*MAXWV+2 3*MAXWV/2*2+2 -C JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1 -C JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1 -C JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3 -C JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3 -C JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1 -C JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1 -C ----------------------- --------- ------------- -C -C ATTRIBUTES: -C LANGUAGE: FORTRAN 77 -C -C$$$ - REAL WAVED(*),WAVEZ(*),GRIDUN(*),GRIDUS(*),GRIDVN(*),GRIDVS(*) - REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1) - REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2) - REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2) - REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1) - REAL(8) AFFT(2*(50000+4*IMAX)) - REAL CLAT(JB:JE),SLAT(JB:JE),WLAT(JB:JE) - REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2,JB:JE) - REAL PLNTOP(MAXWV+1,JB:JE) - INTEGER MP(2) - REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2,2) - REAL WTOP(2*(MAXWV+1),2) - REAL G(IMAX,2,2) - REAL WINC((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2,2) -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -C SET PARAMETERS - MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2 - MP=1 - CALL SPTRANF0(IROMB,MAXWV,IDRT,IMAX,JMAX,JB,JE, - & EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP, - & AFFT,CLAT,SLAT,WLAT,PLN,PLNTOP) -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -C TRANSFORM WAVE TO GRID - IF(IDIR.GT.0) THEN -!$OMP PARALLEL DO PRIVATE(KWS,W,WTOP,G,IJKN,IJKS), -!$OMP+firstprivate(afft) - DO K=1,KMAX - KWS=(K-1)*KW -! write(6,*) ' k=',k,' kws=',kws - CALL SPDZ2UV(IROMB,MAXWV,ENN1,ELONN1,EON,EONTOP, - & WAVED(KWS+1),WAVEZ(KWS+1), - & W(1,1),W(1,2),WTOP(1,1),WTOP(1,2)) - DO J=JB,JE - CALL SPTRANF1(IROMB,MAXWV,IDRT,IMAX,JMAX,J,J, - & EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP, - & AFFT,CLAT(J),SLAT(J),WLAT(J), - & PLN(1,J),PLNTOP(1,J),MP, - & W(1,1),WTOP(1,1),G(1,1,1),IDIR) - CALL SPTRANF1(IROMB,MAXWV,IDRT,IMAX,JMAX,J,J, - & EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP, - & AFFT,CLAT(J),SLAT(J),WLAT(J), - & PLN(1,J),PLNTOP(1,J),MP, - & W(1,2),WTOP(1,2),G(1,1,2),IDIR) - IF(IP.EQ.1.AND.IS.EQ.1) THEN - DO I=1,IMAX - IJKN=I+(J-JB)*JN+(K-1)*KG - IJKS=I+(J-JB)*JS+(K-1)*KG - GRIDUN(IJKN)=G(I,1,1) - GRIDUS(IJKS)=G(I,2,1) - GRIDVN(IJKN)=G(I,1,2) - GRIDVS(IJKS)=G(I,2,2) - ENDDO - ELSE - DO I=1,IMAX - IJKN=MOD(I+IP-2,IMAX)*IS+(J-JB)*JN+(K-1)*KG+1 - IJKS=MOD(I+IP-2,IMAX)*IS+(J-JB)*JS+(K-1)*KG+1 - GRIDUN(IJKN)=G(I,1,1) - GRIDUS(IJKS)=G(I,2,1) - GRIDVN(IJKN)=G(I,1,2) - GRIDVS(IJKS)=G(I,2,2) - ENDDO - ENDIF - ENDDO - ENDDO -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -C TRANSFORM GRID TO WAVE - ELSE -!$OMP PARALLEL DO PRIVATE(KWS,W,WTOP,G,IJKN,IJKS,WINC), -!$OMP+firstprivate(afft) - DO K=1,KMAX - KWS=(K-1)*KW - W=0 - WTOP=0 - DO J=JB,JE - IF(WLAT(J).GT.0.) THEN - IF(IP.EQ.1.AND.IS.EQ.1) THEN - DO I=1,IMAX - IJKN=I+(J-JB)*JN+(K-1)*KG - IJKS=I+(J-JB)*JS+(K-1)*KG - G(I,1,1)=GRIDUN(IJKN)/CLAT(J)**2 - G(I,2,1)=GRIDUS(IJKS)/CLAT(J)**2 - G(I,1,2)=GRIDVN(IJKN)/CLAT(J)**2 - G(I,2,2)=GRIDVS(IJKS)/CLAT(J)**2 - ENDDO - ELSE - DO I=1,IMAX - IJKN=MOD(I+IP-2,IMAX)*IS+(J-JB)*JN+(K-1)*KG+1 - IJKS=MOD(I+IP-2,IMAX)*IS+(J-JB)*JS+(K-1)*KG+1 - G(I,1,1)=GRIDUN(IJKN)/CLAT(J)**2 - G(I,2,1)=GRIDUS(IJKS)/CLAT(J)**2 - G(I,1,2)=GRIDVN(IJKN)/CLAT(J)**2 - G(I,2,2)=GRIDVS(IJKS)/CLAT(J)**2 - ENDDO - ENDIF - CALL SPTRANF1(IROMB,MAXWV,IDRT,IMAX,JMAX,J,J, - & EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP, - & AFFT,CLAT(J),SLAT(J),WLAT(J), - & PLN(1,J),PLNTOP(1,J),MP, - & W(1,1),WTOP(1,1),G(1,1,1),IDIR) - CALL SPTRANF1(IROMB,MAXWV,IDRT,IMAX,JMAX,J,J, - & EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP, - & AFFT,CLAT(J),SLAT(J),WLAT(J), - & PLN(1,J),PLNTOP(1,J),MP, - & W(1,2),WTOP(1,2),G(1,1,2),IDIR) - ENDIF - ENDDO - CALL SPUV2DZ(IROMB,MAXWV,ENN1,ELONN1,EON,EONTOP, - & W(1,1),W(1,2),WTOP(1,1),WTOP(1,2), - & WINC(1,1),WINC(1,2)) - WAVED(KWS+1:KWS+2*MX)=WAVED(KWS+1:KWS+2*MX)+WINC(1:2*MX,1) - WAVEZ(KWS+1:KWS+2*MX)=WAVEZ(KWS+1:KWS+2*MX)+WINC(1:2*MX,2) - ENDDO - ENDIF -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - END diff --git a/sorc/relocate_mv_nvortex.fd/srotm.f b/sorc/relocate_mv_nvortex.fd/srotm.f deleted file mode 100755 index 50bac19fa0..0000000000 --- a/sorc/relocate_mv_nvortex.fd/srotm.f +++ /dev/null @@ -1,106 +0,0 @@ - SUBROUTINE SROTM (N,SX,INCX,SY,INCY,SPARAM) -C -C APPLY THE MODIFIED GIVENS TRANSFORMATION, H, TO THE 2 BY N MATRIX -C -C (SX**T) , WHERE **T INDICATES TRANSPOSE. THE ELEMENTS OF SX ARE IN -C (DX**T) -C -C SX(LX+I*INCX), I = 0 TO N-1, WHERE LX = 1 IF INCX .GE. 0, ELSE -C LX = (-INCX)*N, AND SIMILARLY FOR SY USING USING LY AND INCY. -C WITH SPARAM(1)=SFLAG, H HAS ONE OF THE FOLLOWING FORMS.. -C -C SFLAG=-1.E0 SFLAG=0.E0 SFLAG=1.E0 SFLAG=-2.E0 -C -C (SH11 SH12) (1.E0 SH12) (SH11 1.E0) (1.E0 0.E0) -C H=( ) ( ) ( ) ( ) -C (SH21 SH22), (SH21 1.E0), (-1.E0 SH22), (0.E0 1.E0). -C SEE SROTMG FOR A DESCRIPTION OF DATA STORAGE IN SPARAM. -C - DIMENSION SX(1),SY(1),SPARAM(5) - DATA ZERO,TWO/0.E0,2.E0/ -C - SFLAG=SPARAM(1) - IF(N .LE. 0 .OR.(SFLAG+TWO.EQ.ZERO)) GO TO 140 - IF(.NOT.(INCX.EQ.INCY.AND. INCX .GT.0)) GO TO 70 -C - NSTEPS=N*INCX - IF(SFLAG) 50,10,30 - 10 CONTINUE - SH12=SPARAM(4) - SH21=SPARAM(3) - DO 20 I=1,NSTEPS,INCX - W=SX(I) - Z=SY(I) - SX(I)=W+Z*SH12 - SY(I)=W*SH21+Z - 20 CONTINUE - GO TO 140 - 30 CONTINUE - SH11=SPARAM(2) - SH22=SPARAM(5) - DO 40 I=1,NSTEPS,INCX - W=SX(I) - Z=SY(I) - SX(I)=W*SH11+Z - SY(I)=-W+SH22*Z - 40 CONTINUE - GO TO 140 - 50 CONTINUE - SH11=SPARAM(2) - SH12=SPARAM(4) - SH21=SPARAM(3) - SH22=SPARAM(5) - DO 60 I=1,NSTEPS,INCX - W=SX(I) - Z=SY(I) - SX(I)=W*SH11+Z*SH12 - SY(I)=W*SH21+Z*SH22 - 60 CONTINUE - GO TO 140 - 70 CONTINUE - KX=1 - KY=1 - IF(INCX .LT. 0) KX=1+(1-N)*INCX - IF(INCY .LT. 0) KY=1+(1-N)*INCY -C - IF(SFLAG)120,80,100 - 80 CONTINUE - SH12=SPARAM(4) - SH21=SPARAM(3) - DO 90 I=1,N - W=SX(KX) - Z=SY(KY) - SX(KX)=W+Z*SH12 - SY(KY)=W*SH21+Z - KX=KX+INCX - KY=KY+INCY - 90 CONTINUE - GO TO 140 - 100 CONTINUE - SH11=SPARAM(2) - SH22=SPARAM(5) - DO 110 I=1,N - W=SX(KX) - Z=SY(KY) - SX(KX)=W*SH11+Z - SY(KY)=-W+SH22*Z - KX=KX+INCX - KY=KY+INCY - 110 CONTINUE - GO TO 140 - 120 CONTINUE - SH11=SPARAM(2) - SH12=SPARAM(4) - SH21=SPARAM(3) - SH22=SPARAM(5) - DO 130 I=1,N - W=SX(KX) - Z=SY(KY) - SX(KX)=W*SH11+Z*SH12 - SY(KY)=W*SH21+Z*SH22 - KX=KX+INCX - KY=KY+INCY - 130 CONTINUE - 140 CONTINUE - RETURN - END diff --git a/sorc/relocate_mv_nvortex.fd/srotmg.f b/sorc/relocate_mv_nvortex.fd/srotmg.f deleted file mode 100755 index 24243a13c9..0000000000 --- a/sorc/relocate_mv_nvortex.fd/srotmg.f +++ /dev/null @@ -1,166 +0,0 @@ - SUBROUTINE SROTMG (SD1,SD2,SX1,SY1,SPARAM) -C -C CONSTRUCT THE MODIFIED GIVENS TRANSFORMATION MATRIX H WHICH ZEROS -C THE SECOND COMPONENT OF THE 2-VECTOR (SQRT(SD1)*SX1,SQRT(SD2)* -C SY2)**T. -C WITH SPARAM(1)=SFLAG, H HAS ONE OF THE FOLLOWING FORMS.. -C -C SFLAG=-1.E0 SFLAG=0.E0 SFLAG=1.E0 SFLAG=-2.E0 -C -C (SH11 SH12) (1.E0 SH12) (SH11 1.E0) (1.E0 0.E0) -C H=( ) ( ) ( ) ( ) -C (SH21 SH22), (SH21 1.E0), (-1.E0 SH22), (0.E0 1.E0). -C LOCATIONS 2-4 OF SPARAM CONTAIN SH11,SH21,SH12, AND SH22 -C RESPECTIVELY. (VALUES OF 1.E0, -1.E0, OR 0.E0 IMPLIED BY THE -C VALUE OF SPARAM(1) ARE NOT STORED IN SPARAM.) -C -C THE VALUES OF GAMSQ AND RGAMSQ SET IN THE DATA STATEMENT MAY BE -C INEXACT. THIS IS OK AS THEY ARE ONLY USED FOR TESTING THE SIZE -C OF SD1 AND SD2. ALL ACTUAL SCALING OF DATA IS DONE USING GAM. -C - DIMENSION SPARAM(5) -C - DATA ZERO,ONE,TWO /0.E0,1.E0,2.E0/ - DATA GAM,GAMSQ,RGAMSQ/4096.E0,1.67772E7,5.96046E-8/ - IF(.NOT. SD1 .LT. ZERO) GO TO 10 -C GO ZERO-H-D-AND-SX1.. - GO TO 60 - 10 CONTINUE -C CASE-SD1-NONNEGATIVE - SP2=SD2*SY1 - IF(.NOT. SP2 .EQ. ZERO) GO TO 20 - SFLAG=-TWO - GO TO 260 -C REGULAR-CASE.. - 20 CONTINUE - SP1=SD1*SX1 - SQ2=SP2*SY1 - SQ1=SP1*SX1 -C - IF(.NOT. ABS(SQ1) .GT. ABS(SQ2)) GO TO 40 - SH21=-SY1/SX1 - SH12=SP2/SP1 -C - SU=ONE-SH12*SH21 -C - IF(.NOT. SU .LE. ZERO) GO TO 30 -C GO ZERO-H-D-AND-SX1.. - GO TO 60 - 30 CONTINUE - SFLAG=ZERO - SD1=SD1/SU - SD2=SD2/SU - SX1=SX1*SU -C GO SCALE-CHECK.. - GO TO 100 - 40 CONTINUE - IF(.NOT. SQ2 .LT. ZERO) GO TO 50 -C GO ZERO-H-D-AND-SX1.. - GO TO 60 - 50 CONTINUE - SFLAG=ONE - SH11=SP1/SP2 - SH22=SX1/SY1 - SU=ONE+SH11*SH22 - STEMP=SD2/SU - SD2=SD1/SU - SD1=STEMP - SX1=SY1*SU -C GO SCALE-CHECK - GO TO 100 -C PROCEDURE..ZERO-H-D-AND-SX1.. - 60 CONTINUE - SFLAG=-ONE - SH11=ZERO - SH12=ZERO - SH21=ZERO - SH22=ZERO -C - SD1=ZERO - SD2=ZERO - SX1=ZERO -C RETURN.. - GO TO 220 -C PROCEDURE..FIX-H.. - 70 CONTINUE - IF(.NOT. SFLAG .GE. ZERO) GO TO 90 -C - IF(.NOT. SFLAG .EQ. ZERO) GO TO 80 - SH11=ONE - SH22=ONE - SFLAG=-ONE - GO TO 90 - 80 CONTINUE - SH21=-ONE - SH12=ONE - SFLAG=-ONE - 90 CONTINUE - GO TO IGO,(120,150,180,210) -C PROCEDURE..SCALE-CHECK - 100 CONTINUE - 110 CONTINUE - IF(.NOT. SD1 .LE. RGAMSQ) GO TO 130 - IF(SD1 .EQ. ZERO) GO TO 160 - ASSIGN 120 TO IGO -C FIX-H.. - GO TO 70 - 120 CONTINUE - SD1=SD1*GAM**2 - SX1=SX1/GAM - SH11=SH11/GAM - SH12=SH12/GAM - GO TO 110 - 130 CONTINUE - 140 CONTINUE - IF(.NOT. SD1 .GE. GAMSQ) GO TO 160 - ASSIGN 150 TO IGO -C FIX-H.. - GO TO 70 - 150 CONTINUE - SD1=SD1/GAM**2 - SX1=SX1*GAM - SH11=SH11*GAM - SH12=SH12*GAM - GO TO 140 - 160 CONTINUE - 170 CONTINUE - IF(.NOT. ABS(SD2) .LE. RGAMSQ) GO TO 190 - IF(SD2 .EQ. ZERO) GO TO 220 - ASSIGN 180 TO IGO -C FIX-H.. - GO TO 70 - 180 CONTINUE - SD2=SD2*GAM**2 - SH21=SH21/GAM - SH22=SH22/GAM - GO TO 170 - 190 CONTINUE - 200 CONTINUE - IF(.NOT. ABS(SD2) .GE. GAMSQ) GO TO 220 - ASSIGN 210 TO IGO -C FIX-H.. - GO TO 70 - 210 CONTINUE - SD2=SD2/GAM**2 - SH21=SH21*GAM - SH22=SH22*GAM - GO TO 200 - 220 CONTINUE - IF(SFLAG)250,230,240 - 230 CONTINUE - SPARAM(3)=SH21 - SPARAM(4)=SH12 - GO TO 260 - 240 CONTINUE - SPARAM(2)=SH11 - SPARAM(5)=SH22 - GO TO 260 - 250 CONTINUE - SPARAM(2)=SH11 - SPARAM(3)=SH21 - SPARAM(4)=SH12 - SPARAM(5)=SH22 - 260 CONTINUE - SPARAM(1)=SFLAG - RETURN - END diff --git a/sorc/relocate_mv_nvortex.fd/w3tagb.f b/sorc/relocate_mv_nvortex.fd/w3tagb.f deleted file mode 100755 index 75822951ee..0000000000 --- a/sorc/relocate_mv_nvortex.fd/w3tagb.f +++ /dev/null @@ -1,121 +0,0 @@ - SUBROUTINE W3TAGB(PROG,KYR,JD,LF,ORG) -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C -C SUBPROGRAM: W3TAGB OPERATIONAL JOB IDENTIFIER -C PRGMMR: FARLEY ORG: NP11 DATE: 1998-03-17 -C -C ABSTRACT: PRINTS IDENTIFYING INFORMATION FOR OPERATIONAL -C codes. CALLED AT THE BEGINNING OF A code, W3TAGB PRINTS -C THE program NAME, THE YEAR AND JULIAN DAY OF ITS -C COMPILATION, AND THE RESPONSIBLE ORGANIZATION. ON A 2ND -C LINE IT PRINTS THE STARTING DATE-TIME. CALLED AT THE -C END OF A JOB, entry routine, W3TAGE PRINTS A LINE WITH THE -C ENDING DATE-TIME AND A 2ND LINE STATING THE program name -C AND THAT IT HAS ENDED. -C -C PROGRAM HISTORY LOG: -C 85-10-29 J.NEWELL -C 89-10-20 R.E.JONES CONVERT TO CRAY CFT77 FORTRAN -C 91-03-01 R.E.JONES ADD MACHINE NAME TO ENDING LINE -C 92-12-02 R.E.JONES ADD START-ENDING TIME-DATE -C 93-11-16 R.E.JONES ADD DAY OF YEAR, DAY OF WEEK, AND JULIAN DAY -C NUMBER. -C 97-12-24 M.FARLEY PRINT STATEMENTS MODIFIED FOR 4-DIGIT YR -C 98-03-17 M.FARLEY REPLACED DATIMX WITH CALLS TO W3LOCDAT/W3DOXDAT -C 99-01-29 B. VUONG CONVERTED TO IBM RS/6000 SP -C -C 99-06-17 A. Spruill ADJUSTED THE SIZE OF PROGRAM NAME TO ACCOMMODATE -C THE 20 CHARACTER NAME CONVENTION ON THE IBM SP. -C 1999-08-24 Gilbert added call to START() in W3TAGB and a call -C to SUMMARY() in W3TAGE to print out a -C resource summary list for the program using -C W3TAGs. -C 2012-10-18 Vuong REMOVE PRINT STATEMENT 604 -C 2013-02-06 Vuong MODIFIED PRINT STATEMENT 604 -C -C USAGE: CALL W3TAGB(PROG, KYR, JD, LF, ORG) -C CALL W3TAGE(PROG) -C -C INPUT VARIABLES: -C NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES -C ------ --------- ----------------------------------------------- -C PROG ARG LIST PROGRAM NAME CHARACTER*1 -C KYR ARG LIST YEAR OF COMPILATION INTEGER -C JD ARG LIST JULIAN DAY OF COMPILATION INTEGER -C LF ARG LIST HUNDRETHS OF JULIAN DAY OF COMPILATION -C INTEGER (RANGE IS 0 TO 99 INCLUSIVE) -C ORG ARG LIST ORGANIZATION CODE (SUCH AS WD42) -C CHARACTER*1 -C -C OUTPUT VARIABLES: -C NAMES INTERFACE DESCRIPTION OF VARIABLES AND TYPES -C ---------------------------------------------------------------- -C DDATE PRINT YEAR AND JULIAN DAY (NEAREST HUNDRETH) -C FILE OF COMPILATION REAL -C -C SUBPROGRAMS CALLED: CLOCK, DATE -C -C REMARKS: FULL WORD USED IN ORDER TO HAVE AT LEAST -C SEVEN DECIMAL DIGITS ACCURACY FOR VALUE OF DDATE. -C SUBPROGRAM CLOCK AND DATE MAY DIFFER FOR EACH TYPE -C COMPUTER. YOU MAY HAVE TO CHANGE THEM FOR ANOTHER -C TYPE OF COMPUTER. -C -C ATTRIBUTES: -C LANGUAGE: FORTRAN 90 -C -C$$$ -C - CHARACTER *(*) PROG,ORG - CHARACTER * 3 JMON(12) - CHARACTER * 3 DAYW(7) -C - INTEGER IDAT(8), JDOW, JDOY, JDAY -C - SAVE -C - DATA DAYW/'SUN','MON','TUE','WEN','THU','FRI','SAT'/ - DATA JMON /'JAN','FEB','MAR','APR','MAY','JUN', - & 'JUL','AUG','SEP','OCT','NOV','DEC'/ -C - CALL START() - - DYR = KYR - DYR = 1.0E+03 * DYR - DJD = JD - DLF = LF - DLF = 1.0E-02 * DLF - DDATE = DYR + DJD + DLF - write(6,600) - 600 FORMAT(//,10('* . * . ')) - write(6,601) PROG, DDATE, ORG - 601 FORMAT(5X,'PROGRAM ',A,' HAS BEGUN. COMPILED ',F10.2, - & 5X, 'ORG: ',A) -C - CALL W3LOCDAT(IDAT) - CALL W3DOXDAT(IDAT,JDOW,JDOY,JDAY) - write(6,602) JMON(IDAT(2)),IDAT(3),IDAT(1),IDAT(5),IDAT(6), - & IDAT(7),IDAT(8),JDOY,DAYW(JDOW),JDAY - 602 FORMAT(5X,'STARTING DATE-TIME ',A3,1X,I2.2,',', - & I4.4,2X,2(I2.2,':'),I2.2,'.',I3.3,2X,I3,2X,A3,2X,I8,//) - RETURN -C - ENTRY W3TAGE(PROG) -C - CALL W3LOCDAT(IDAT) - CALL W3DOXDAT(IDAT,JDOW,JDOY,JDAY) - write(6,603) JMON(IDAT(2)),IDAT(3),IDAT(1),IDAT(5),IDAT(6), - & IDAT(7),IDAT(8),JDOY,DAYW(JDOW),JDAY - 603 FORMAT(//,5X,'ENDING DATE-TIME ',A3,1X,I2.2,',', - & I4.4,2X,2(I2.2,':'),I2.2,'.',I3.3,2X,I3,2X,A3,2X,I8) - write(6,604) PROG - 604 FORMAT(5X,'PROGRAM ',A,' HAS ENDED.') -C 604 FORMAT(5X,'PROGRAM ',A,' HAS ENDED. CRAY J916/2048') -C 604 FORMAT(5X,'PROGRAM ',A,' HAS ENDED. CRAY Y-MP EL2/256') - write(6,605) - 605 FORMAT(10('* . * . ')) - - CALL SUMMARY() -C - RETURN - END diff --git a/sorc/supvit.fd/makefile b/sorc/supvit.fd/makefile deleted file mode 100644 index 288e42beff..0000000000 --- a/sorc/supvit.fd/makefile +++ /dev/null @@ -1,31 +0,0 @@ -SHELL= /bin/sh -ISIZE = 4 -RSIZE = 8 -COMP= ifort -##LIBS_SUP= -L/contrib/nceplibs/nwprod/lib -lw3emc_d -lw3nco_d -lg2_d -lbacio_4 -ljasper -lpng -lz -LDFLAGS= -##ccs FFLAGS= -O -qflttrap=ov:zero:inv:enable -qcheck -qextchk -qwarn64 -qintsize=$(ISIZE) -qrealsize=$(RSIZE) -# FFLAGS= -O2 -check bounds -check format -xHost -fpe0 -# DEBUG= -check bounds -check format -FFLAGS= -O2 -g -i$(ISIZE) -r$(RSIZE) - -supvit: supvit_main.f supvit_modules.o - @echo " " - @echo " Compiling program that sorts and updates vitals records...." - $(COMP) $(FFLAGS) $(LDFLAGS) supvit_modules.o supvit_main.f $(LIBS_SUP) -o supvit - @echo " " - -supvit_modules.o: supvit_modules.f - @echo " " - @echo " Compiling the modules....." - $(COMP) -c supvit_modules.f -o supvit_modules.o - @echo " " - -CMD = supvit - -clean: - -rm -f *.o *.mod - -install: - mv $(CMD) ../../exec/$(CMD) - diff --git a/sorc/supvit.fd/supvit_main.f b/sorc/supvit.fd/supvit_main.f deleted file mode 100644 index 1484e4efeb..0000000000 --- a/sorc/supvit.fd/supvit_main.f +++ /dev/null @@ -1,865 +0,0 @@ - program sort_and_update_vitals -c -c$$$ MAIN PROGRAM DOCUMENTATION BLOCK -c -c Main Program: SUPVIT Sort and Update Vitals File -C PRGMMR: MARCHOK ORG: NP22 DATE: 1999-04-14 -c -c ABSTRACT: This program searches through the TC Vitals file and reads -c the records for a particular dtg. It contains logic to eliminate -c duplicate records and only keep the most recent one (see further -c documentation below). It also searches to see if a storm was -c included in the Vitals file 6 hours earlier (or 3 hours earlier -c if we're tracking with the off-synoptic-time SREF) but is missing -c from the current Vitals records. In this case, the program assumes -c that the regional forecasting center was late in reporting the -c current position, and it includes the old Vitals record with -c the current Vitals records. This program will also take the -c position and heading from that old vitals record and extrapolate the -c information to get a current first guess estimate of the storm's -c position. By the way, if a storm was found 3 or 6 hours earlier, -c logic is also included to eliminate any duplicate records of that -c storm in those old records. Finally, if it turns out that the -c reason an old vitals is no longer on the current records is that -c the storm has dissipated, don't worry about including it to be -c passed into the tracking program; the tracking program will not be -c able to track it and that'll be the end of it. -c -c Program history log: -c 98-03-26 Marchok - Original operational version. -c 99-04-01 Marchok - Modified code to be able to read the year off -c of the TC Vitals card as a 4-digit integer, -c instead of as a 2-digit integer. -c 00-06-13 Marchok - Modified code to be able to read vitals from 6h -c ahead (this is for use in the GDAS tropical -c cyclone relocation system). -c 04-05-27 Marchok - Modified code to be able to read vitals from 3h -c ago. This is for tracking with the 09z and 21z -c SREF ensemble. Since there are no vitals at -c these offtimes, we need to update vitals from -c the synoptic times 3h earlier. -c -c Input files: -c unit 31 Text file containing all vitals (including duplicates) -c for current time and time from 3 or 6 hours ago and -c 3 or 6 hours ahead. -c Output files: -c unit 51 Text file containing sorted, updated vitals (without -c any duplicates) valid at the current time only. -c -c Subprograms called: -c read_nlists Read input namelists for input dates -c read_tcv_file Read TC vitals file to get initial storm positions -c delete_dups Delete duplicate TC vitals records from current time -c delete_old Delete records from 6h ago if current record exists -c delete_old_dups Delete duplicate records from 6h ago time -c update_old_vits Update position of storms from 6h ago positions -c output Output 1 record for each updated vitals record -c -c Attributes: -c Language: Fortran_90 -c -c$$$ -c -c------- -c -c - USE def_vitals; USE set_max_parms; USE inparms; USE date_checks - USE trig_vals -c - type (tcvcard) storm(maxstorm) - type (datecard) dnow, dold, dfuture - - logical okstorm(maxstorm) - integer vit_hr_incr -c - call w3tagb('SUPVIT ',1999,0104,0058,'NP22 ') -c - okstorm = .FALSE. -c - pi = 4. * atan(1.) ! pi, dtr and rtd were declared in module - dtr = pi/180.0 ! trig_vals, but were not yet defined. - rtd = 180.0/pi -c -c ----------------------------------------- -c Read namelists to get date information -c - call read_nlists (dnow,dold,dfuture,vit_hr_incr) -c -c ----------------------------------------------------------- -c Read in storm cards for current time and delete duplicates -c - - inowct = 0 - call read_tcv_file (storm,ymd_now,hhmm_now,inowct,okstorm) - - if (inowct > 0) then - call delete_dups (storm,inowct,okstorm) - else - print *,' ' - print *,'!!! No storms on tcv card for current time.' - print *,'!!! A check will be made for old tcv storm cards,' - print *,'!!! and if any exist, the positions will be updated' - print *,'!!! (extrapolated) to get a first guess position for' - print *,'!!! the current time.' - print *,'!!! Current forecast time = ',ymd_now,hhmm_now - print *,'!!! Old forecast time = ',ymd_old,hhmm_old - endif -c -c ----------------------------------------------------------- -c Read in storm cards for 3h or 6h ago and delete duplicates -c - rewind (31) - itempct = inowct - call read_tcv_file (storm,ymd_old,hhmm_old,itempct,okstorm) - ioldct = itempct - inowct - - if (ioldct > 0) then - if (inowct > 0) then - call delete_old (storm,inowct,ioldct,okstorm) - endif - call delete_old_dups (storm,inowct,ioldct,okstorm) - endif - -c ---------------------------------------------------------------- -c Now update any vitals records left from 3h or 6h ago by -c extrapolating their positions ahead to the current time. - - if (ioldct > 0) then - call update_old_vits (storm,inowct,ioldct,okstorm,vit_hr_incr) - endif - - -c -------------------------------------------------------------- -c Read in storm cards for 3h or 6h ahead and delete duplicates. -c This is used for Qingfu's vortex relocation purposes. If he is -c doing the analysis/relocation for, say, 12z, he looks at the -c first guess files from the 06z cycle and tracks from there. -c But suppose there is a storm whose first tcvitals card is -c issued at 12z; then we would have no tcvitals card at 06z for -c the tracker to use. So this next part reads the vitals from -c the cycle 6h ahead and, if it finds any vitals that were not -c included with the current time's vitals, then it extrapolates -c those vitals from the next cycle *backwards* to the current -c time. By the way, itempct is input/output for the read -c routine. Going in, it contains the count of the number of -c records read in so far. In that read routine, itempct is -c incremented for every valid record read for the input time. - - rewind (31) - iprevct = inowct + ioldct - call read_tcv_file (storm,ymd_future,hhmm_future,itempct,okstorm) - ifuturect = itempct - iprevct - - print *,'before d6a if, ifuturect = ',ifuturect,' iprevct= ' - & ,iprevct - print *,'before d6a if, inowct = ',inowct,' ioldct= ',ioldct - - if (ifuturect > 0) then - if (iprevct > 0) then - call delete_future (storm,iprevct,ifuturect,okstorm) - endif - call delete_future_dups (storm,iprevct,ifuturect,okstorm) - endif - -c ---------------------------------------------------------------- -c Now update any vitals records not filtered out from 3h or 6h -c ahead by extrapolating their future positions *backwards* to -c the current time. - - if (ifuturect > 0) then - call update_future_vits (storm,iprevct,ifuturect,okstorm - & ,vit_hr_incr) - endif - - -c --------------------------------------------------------- -c Now output all of the sorted, updated TC Vitals records - - itotalct = inowct + ioldct + ifuturect - call output (storm,itotalct,okstorm) -c - call w3tage('SUPVIT ') - stop - end -c -c--------------------------------------------------------------------- -c -c--------------------------------------------------------------------- - subroutine read_tcv_file (storm,ymd,hhmm,ict,okstorm) -c -c ABSTRACT: This routine reads in the TC Vitals file, and stores -c into an array those records that match the input ymd and hhmm. -c -c INPUT: -c -c ict Tells at what index in the storm array to begin reading -c the input records into. This is important because this -c subroutine is called twice; the first time the data are -c for the current time and are just started at ict = 0, -c but the second time it's called we're getting the 6h ago -c data, and they have to be added onto the end of the -c array, so we need to know where the current time's data -c ends so we know what index to start the 6h ago data. -c - USE def_vitals; USE set_max_parms -c - type (tcvcard) storm(maxstorm), ts -c - integer ymd,hhmm - logical okstorm(maxstorm) -c - lucard = 31 - - print *,' ' - print '(a26,i6.6,a8,i4.4)',' IN READ_TCV_FILE: , ymd= ',ymd - & ,' hhmm= ',hhmm - print *,' ' - - - do while (.true.) - read (lucard,21,END=801,ERR=891) ts - if (ts%tcv_yymmdd == ymd .and. ts%tcv_hhmm == hhmm) then - ict = ict + 1 - storm(ict) = ts - okstorm(ict) = .TRUE. - write (6,23) ' !!! MATCH, ict= ',ict,storm(ict) - endif - enddo - 801 continue - - 21 format (a4,1x,a3,1x,a9,1x,i2,i6,1x,i4,1x,i3,a1,1x,i4,a1,1x,i3,1x - & ,i3,a85) - 23 format (a18,i3,2x,a4,1x,a3,1x,a9,1x,i2,i6.6,1x,i4.4,1x,i3,a1,1x,i4 - & ,a1,1x,i3,1x,i3,a85) - - iret = 0 - return - - 891 print *,'!!! ERROR in program sort_and_update_vitals. Error ' - print *,'!!! occurred in read_tcv_file while reading unit ',lucard - iret = 98 - - return - end -c -c--------------------------------------------------------------------- -c -c--------------------------------------------------------------------- - subroutine output (storm,itotalct,okstorm) -c - USE def_vitals; USE set_max_parms; USE inparms -c - type (tcvcard) storm(maxstorm) - type (datecard) dnow, dold, dfuture - - logical okstorm(maxstorm) -c - lunvit = 51 - - ist = 1 - do while (ist <= itotalct) - - if (okstorm(ist)) then - if (storm(ist)%tcv_stdir == -99 .or. - & storm(ist)%tcv_stspd == -99) then - write (lunvit,23,ERR=891) storm(ist) - else - write (lunvit,21,ERR=891) storm(ist) - endif - endif - - ist = ist + 1 - - enddo - - 21 format (a4,1x,a3,1x,a9,1x,i2.2,i6.6,1x,i4.4,1x,i3.3,a1,1x,i4.4 - & ,a1,1x,i3.3,1x,i3.3,a85) - 23 format (a4,1x,a3,1x,a9,1x,i2.2,i6.6,1x,i4.4,1x,i3.3,a1,1x,i4.4 - & ,a1,1x,i3,1x,i3,a85) - - iret = 0 - return - - 891 print *,'!!! ERROR in program sort_and_update_vitals. Error ' - print *,'!!! occurred in output while writing new vitals file ' - print *,'!!! to unit number',lunvit - iret = 98 - - return - end -c -c--------------------------------------------------------------------- -c -c--------------------------------------------------------------------- - subroutine update_old_vits (storm,inowct,ioldct,okstorm - & ,vit_hr_incr) -c -c ABSTRACT: This subroutine updates the vitals from 3h or 6h ago. -c It uses the heading and direction values listed in the vitals -c record (see Module def_vitals for specfics on where to find -c heading & direction in the vitals record) to get a new -c position for the current time by extrapolating out 3h or 6h. -c - USE def_vitals; USE set_max_parms; USE inparms; USE date_checks - USE trig_vals -c - type (tcvcard) storm(maxstorm) - type (datecard) dnow, dold - - logical okstorm(maxstorm) - integer vit_hr_incr -c - ist = inowct + 1 - iend = inowct + ioldct - do while (ist <= iend) - - if (okstorm(ist) .and. storm(ist)%tcv_yymmdd == ymd_old .and. - & storm(ist)%tcv_hhmm == hhmm_old) then - - rlat = float(storm(ist)%tcv_lat) / 10. - rlon = float(storm(ist)%tcv_lon) / 10. - rhdg = float(storm(ist)%tcv_stdir) - rspd = float(storm(ist)%tcv_stspd) / 10. - -c ------------------------------------------ -c This first part updates the positions by simply -c extrapolating the current motion along the current -c heading at the current speed for 3h or 6h. Be -c careful with adding and subtracting these distances -c in the different hemispheres (see the if statements). -c Remember: In the storm message file, there are NO -c negative signs to distinguish between hemispheres, -c so a southern hemisphere latitude will be POSITIVE, -c but will be distinguished by the 'S'. - - strmucomp = rspd * sin(dtr*rhdg) - strmvcomp = rspd * cos(dtr*rhdg) -c - vdistdeg = (strmvcomp * secphr * vit_hr_incr) / dtk - if (storm(ist)%tcv_latns == 'N') then - rnewlat = rlat + vdistdeg - else - rnewlat = rlat - vdistdeg - endif -c - avglat = 0.5 * (rlat + rnewlat) - cosfac = cos(dtr * avglat) - udistdeg = (strmucomp * secphr * vit_hr_incr) / (dtk * cosfac) - if (storm(ist)%tcv_lonew == 'W') then - rnewlon = rlon - udistdeg - else - rnewlon = rlon + udistdeg - endif - -c ------------------------------------------ -c This part updates the E/W and N/S characters -c in the event that a storm changes hemisphere. -c (N to S and S to N is not really possible, but -c we'll include the code anyway). If a storm -c does change hemisphere, say from W to E at 180, -c we need to also adjust the new longitude value -c from say 186W to 174E. Have to include this -c code since storm messages contain longitudes on -c a 0-180 basis (E&W), NOT 0-360. - - if (storm(ist)%tcv_latns == 'N') then - if (rnewlat < 0.) then - storm(ist)%tcv_latns = 'S' - rnewlat = -1. * rnewlat - endif - else - if (rnewlat < 0.) then - storm(ist)%tcv_latns = 'N' - rnewlat = -1. * rnewlat - endif - endif -c - if (storm(ist)%tcv_lonew == 'W') then - if (rnewlon > 180.) then - storm(ist)%tcv_lonew = 'E' - rnewlon = 180. - abs(rnewlon - 180.) - endif - else - if (rnewlon > 180.) then - storm(ist)%tcv_lonew = 'W' - rnewlon = 180. - abs(rnewlon - 180.) - endif - endif - - storm(ist)%tcv_lat = int ((rnewlat + 0.05) * 10.) - storm(ist)%tcv_lon = int ((rnewlon + 0.05) * 10.) - storm(ist)%tcv_yymmdd = ymd_now - storm(ist)%tcv_hhmm = hhmm_now - - endif - - ist = ist + 1 - - enddo -c - return - end - -c -c--------------------------------------------------------------------- -c -c--------------------------------------------------------------------- - subroutine update_future_vits (storm,iprevct,ifuturect,okstorm - & ,vit_hr_incr) -c -c ABSTRACT: This subroutine updates the vitals from 3h or 6h ahead. -c It uses the heading and direction values listed in the vitals -c record (see Module def_vitals for specfics on where to find -c heading & direction in the vitals record) to get a new -c position for the current time by extrapolating *BACKWARDS* -c 3h or 6h to the current time. -c - USE def_vitals; USE set_max_parms; USE inparms; USE date_checks - USE trig_vals -c - type (tcvcard) storm(maxstorm) - type (datecard) dnow, dold, dfuture - - logical okstorm(maxstorm) - integer vit_hr_incr -c - ist = iprevct + 1 - iend = iprevct + ifuturect - do while (ist <= iend) - - if (okstorm(ist) .and. storm(ist)%tcv_yymmdd == ymd_future .and. - & storm(ist)%tcv_hhmm == hhmm_future) then - - rlat = float(storm(ist)%tcv_lat) / 10. - rlon = float(storm(ist)%tcv_lon) / 10. - rhdg = float(storm(ist)%tcv_stdir) - rspd = float(storm(ist)%tcv_stspd) / 10. - -c IMPORTANT NOTE: Since we are extrapolating *BACKWARDS* in -c time in this routine, we have to take that value of the -c storm heading in rhdg and switch it by 180 degrees so that -c we will be pointing back in the direction the storm came -c from.... - - if (rhdg >= 0. .and. rhdg <= 180.) then - rhdg = rhdg + 180. - else - rhdg = rhdg - 180. - endif - -c ------------------------------------------ -c This first part updates the positions by simply -c extrapolating the current motion along the REVERSE of -c the current heading at the current speed for 6 hours. -c Be careful with adding and subtracting these distances -c in the different hemispheres (see the if statements). -c Remember: In the storm message file, there are NO -c negative signs to distinguish between hemispheres, -c so a southern hemisphere latitude will be POSITIVE, -c but will be distinguished by the 'S'. - - strmucomp = rspd * sin(dtr*rhdg) - strmvcomp = rspd * cos(dtr*rhdg) -c - vdistdeg = (strmvcomp * secphr * vit_hr_incr) / dtk - if (storm(ist)%tcv_latns == 'N') then - rnewlat = rlat + vdistdeg - else - rnewlat = rlat - vdistdeg - endif -c - avglat = 0.5 * (rlat + rnewlat) - cosfac = cos(dtr * avglat) - udistdeg = (strmucomp * secphr * vit_hr_incr) / (dtk * cosfac) - if (storm(ist)%tcv_lonew == 'W') then - rnewlon = rlon - udistdeg - else - rnewlon = rlon + udistdeg - endif - -c ------------------------------------------ -c This part updates the E/W and N/S characters -c in the event that a storm changes hemisphere. -c (N to S and S to N is not really possible, but -c we'll include the code anyway). If a storm -c does change hemisphere, say from W to E at 180, -c we need to also adjust the new longitude value -c from say 186W to 174E. Have to include this -c code since storm messages contain longitudes on -c a 0-180 basis (E&W), NOT 0-360. - - if (storm(ist)%tcv_latns == 'N') then - if (rnewlat < 0.) then - storm(ist)%tcv_latns = 'S' - rnewlat = -1. * rnewlat - endif - else - if (rnewlat < 0.) then - storm(ist)%tcv_latns = 'N' - rnewlat = -1. * rnewlat - endif - endif -c - if (storm(ist)%tcv_lonew == 'W') then - if (rnewlon > 180.) then - storm(ist)%tcv_lonew = 'E' - rnewlon = 180. - abs(rnewlon - 180.) - endif - else - if (rnewlon > 180.) then - storm(ist)%tcv_lonew = 'W' - rnewlon = 180. - abs(rnewlon - 180.) - endif - endif - - storm(ist)%tcv_lat = int ((rnewlat + 0.05) * 10.) - storm(ist)%tcv_lon = int ((rnewlon + 0.05) * 10.) - storm(ist)%tcv_yymmdd = ymd_now - storm(ist)%tcv_hhmm = hhmm_now - - endif - - ist = ist + 1 - - enddo -c - return - end - -c -c--------------------------------------------------------------------- -c -c--------------------------------------------------------------------- - subroutine delete_old_dups (storm,inowct,ioldct,okstorm) -c -c ABSTRACT: The purpose of this subroutine is to loop through the -c list of storms for the dtg from 3h or 6h ago to eliminate any -c duplicates. Be sure to sort based on storm identifier (e.g., -c 13L) instead of storm name, since the name may change (e.g., -c from "THIRTEEN" to "IRIS") for an upgrade in intensity, but the -c storm number identifier will remain the same. -c -c ict Total number of storm card entries for this dtg -c - USE def_vitals; USE set_max_parms -c - type (tcvcard) storm(maxstorm) - logical okstorm(maxstorm) - character found_dup*1 -c - ist = inowct + 1 - iend = inowct + ioldct - do while (ist < iend) - - isortnum = ist + 1 - found_dup = 'n' - if (okstorm(ist)) then - - do while (isortnum <= iend .and. found_dup == 'n') - - if (storm(ist)%tcv_storm_id == storm(isortnum)%tcv_storm_id) - & then - found_dup = 'y' - endif - isortnum = isortnum + 1 - - enddo - - endif - - if (found_dup == 'y') then - okstorm(ist) = .FALSE. - endif - - ist = ist + 1 - - enddo - -c NOTE: The last member of the array to be checked is okay, -c since all potential duplicates for this record were eliminated -c in the previous sort while loop just completed, and, further, -c the last member of this array is either already FALSE (from -c being checked off in delete_old), or it's TRUE because it -c didn't get checked off in delete_old, so keep it. - - return - end -c -c--------------------------------------------------------------------- -c -c--------------------------------------------------------------------- - subroutine delete_old (storm,inowct,ioldct,okstorm) -c -c ABSTRACT: This subroutine compares the list of storm card entries -c from 3h or 6h ago to those from the current time to eliminate -c any matching storms (i.e., if we've got a current record for a -c storm, we obviously don't need the old one). -c - USE def_vitals; USE set_max_parms -c - type (tcvcard) storm(maxstorm) -c - logical okstorm(maxstorm) - character found_dup*1 -c - ist = inowct + 1 - iend = inowct + ioldct - do while (ist <= iend) - - isortnum = 1 - found_dup = 'n' - do while (isortnum <= inowct .and. found_dup == 'n') - - if (storm(ist)%tcv_storm_id == storm(isortnum)%tcv_storm_id) - & then - found_dup = 'y' - endif - isortnum = isortnum + 1 - - enddo - - if (found_dup == 'y') then - okstorm(ist) = .FALSE. - endif - - ist = ist + 1 - - enddo - - return - end - -c--------------------------------------------------------------------- -c -c--------------------------------------------------------------------- - subroutine delete_future (storm,iprevct,ifuturect,okstorm) -c -c ABSTRACT: This subroutine compares the list of storm card entries -c from 3h or 6h ahead to those from the current time and from 3h or -c 6h ago to eliminate any matching storms (i.e., we only need the -c record for the future time if we don't have either a current time -c record or an old record that we've updated). -c - USE def_vitals; USE set_max_parms -c - type (tcvcard) storm(maxstorm) -c - logical okstorm(maxstorm) - character found_dup*1 -c - ist = iprevct + 1 - iend = iprevct + ifuturect - do while (ist <= iend) - - isortnum = 1 - found_dup = 'n' - do while (isortnum <= iprevct .and. found_dup == 'n') - - if (storm(ist)%tcv_storm_id == storm(isortnum)%tcv_storm_id) - & then - found_dup = 'y' - endif - isortnum = isortnum + 1 - - enddo - - if (found_dup == 'y') then - okstorm(ist) = .FALSE. - endif - - ist = ist + 1 - - enddo - - return - end - -c -c--------------------------------------------------------------------- -c -c--------------------------------------------------------------------- - subroutine delete_future_dups (storm,iprevct,ifuturect,okstorm) -c -c ABSTRACT: The purpose of this subroutine is to loop through the -c list of storms for the dtg from 3h or 6h ahead to eliminate any -c duplicates. Be sure to sort based on storm identifier (e.g., -c 13L) instead of storm name, since the name may change (e.g., -c from "THIRTEEN" to "IRIS") for an upgrade in intensity, but the -c storm number identifier will remain the same. -c -c ict Total number of storm card entries for this dtg -c - USE def_vitals; USE set_max_parms -c - type (tcvcard) storm(maxstorm) - logical okstorm(maxstorm) - character found_dup*1 -c - ist = iprevct + 1 - iend = iprevct + ifuturect - do while (ist < iend) - - isortnum = ist + 1 - found_dup = 'n' - if (okstorm(ist)) then - - do while (isortnum <= iend .and. found_dup == 'n') - - if (storm(ist)%tcv_storm_id == storm(isortnum)%tcv_storm_id) - & then - found_dup = 'y' - endif - isortnum = isortnum + 1 - - enddo - - endif - - if (found_dup == 'y') then - okstorm(ist) = .FALSE. - endif - - ist = ist + 1 - - enddo - -c NOTE: The last member of the array to be checked is okay, -c since all potential duplicates for this record were eliminated -c in the previous sort while loop just completed, and, further, -c the last member of this array is either already FALSE (from -c being checked off in delete_future), or it's TRUE because it -c didn't get checked off in delete_future, so keep it. - - return - end -c -c--------------------------------------------------------------------- -c -c--------------------------------------------------------------------- - subroutine delete_dups (storm,ict,okstorm) -c -c ABSTRACT: The purpose of this subroutine is to loop through the -c list of storms for the current dtg to eliminate any duplicates. -c Be sure to sort based on storm identifier (e.g.,13L) instead of -c storm name, since the name may change (e.g., from "THIRTEEN" to -c "IRIS") for an upgrade in intensity, but the storm number -c identifier will remain the same. -c -c ict Total number of storm card entries for this dtg -c - USE def_vitals; USE set_max_parms -c - type (tcvcard) storm(maxstorm) - logical okstorm(maxstorm) - character found_dup*1 -c - ist = 1 - do while (ist < ict) - - isortnum = ist + 1 - found_dup = 'n' - do while (isortnum <= ict .and. found_dup == 'n') - - if (storm(ist)%tcv_storm_id == storm(isortnum)%tcv_storm_id) - & then - found_dup = 'y' - endif - isortnum = isortnum + 1 - - enddo - - if (found_dup == 'y') then - okstorm(ist) = .FALSE. - endif - - ist = ist + 1 - - enddo - -c Now set the last member of the array to be checked as okay, -c since all potential duplicates for this record were eliminated -c in the previous sort while loop just completed. - - okstorm(ict) = .TRUE. -c - return - end -c -c--------------------------------------------------------------------- -c -c--------------------------------------------------------------------- - subroutine read_nlists (dnow,dold,dfuture,vit_hr_incr) -c -c ABSTRACT: Read in the namelists that contain the date for the -c current time, the time from 3h or 6h ago, and the time from 3h -c or 6h ahead . It also converts the input dates for the current -c time, the old time and the future time into a format that can -c be easily compared against the dates in the TC Vitals file. -c - USE inparms; USE date_checks -c - type (datecard) dnow,dold,dfuture -c - integer vit_hr_incr -c - namelist/datenowin/dnow - namelist/dateoldin/dold - namelist/datefuturein/dfuture - namelist/hourinfo/vit_hr_incr -c - read (5,NML=datenowin,END=801) - 801 continue - read (5,NML=dateoldin,END=803) - 803 continue - read (5,NML=datefuturein,END=805) - 805 continue - read (5,NML=hourinfo,END=807) - 807 continue -c - ymd_now = dnow%yy * 10000 + dnow%mm * 100 + dnow%dd - hhmm_now = dnow%hh * 100 - ymd_old = dold%yy * 10000 + dold%mm * 100 + dold%dd - hhmm_old = dold%hh * 100 - ymd_future = dfuture%yy * 10000 + dfuture%mm * 100 + dfuture%dd - hhmm_future = dfuture%hh * 100 -c - return - end -c -c---------------------------------------------------------------------- -c -c---------------------------------------------------------------------- - integer function char2int (charnum) -c -c This function takes as input a character numeral and -c returns the integer equivalent -c - character*1 charnum,cx(10) - data cx/'0','1','2','3','4','5','6','7','8','9'/ -c - do i=1,10 - if (charnum.eq.cx(i)) char2int = i-1 - enddo -c - return - end -c -c---------------------------------------------------------------------- -c -c---------------------------------------------------------------------- - character function int2char (inum) -c -c This function takes as input an integer and -c returns the character numeral equivalent -c - character*1 cx(10) - data cx/'0','1','2','3','4','5','6','7','8','9'/ -c - do i=1,10 - ihold=i-1 - if (ihold.eq.inum) int2char = cx(i) - enddo -c - return - end diff --git a/sorc/supvit.fd/supvit_modules.f b/sorc/supvit.fd/supvit_modules.f deleted file mode 100755 index 9172af58db..0000000000 --- a/sorc/supvit.fd/supvit_modules.f +++ /dev/null @@ -1,52 +0,0 @@ - module def_vitals - type tcvcard ! Define a new type for a TC Vitals card - character*4 tcv_center ! Hurricane Center Acronym - character*3 tcv_storm_id ! Storm Identifier (03L, etc) - character*9 tcv_storm_name ! Storm name - integer tcv_century ! 2-digit century id (19 or 20) - integer tcv_yymmdd ! Date of observation - integer tcv_hhmm ! Time of observation (UTC) - integer tcv_lat ! Storm Lat (*10), always >0 - character*1 tcv_latns ! 'N' or 'S' - integer tcv_lon ! Storm Lon (*10), always >0 - character*1 tcv_lonew ! 'E' or 'W' - integer tcv_stdir ! Storm motion vector (in degr) - integer tcv_stspd ! Spd of storm movement (m/s*10) - character*85 tcv_chunk ! Remainder of vitals record; - ! will just be read & written - end type tcvcard - end module def_vitals -c - module inparms - type datecard ! Define a new type for the input namelist parms - sequence - integer yy ! Beginning yy of date to search for - integer mm ! Beginning mm of date to search for - integer dd ! Beginning dd of date to search for - integer hh ! Beginning hh of date to search for - end type datecard - end module inparms -c - module date_checks - integer, save :: ymd_now,hhmm_now,ymd_old,hhmm_old - & ,ymd_future,hhmm_future - end module date_checks -c - module set_max_parms - integer, parameter :: maxstorm=400 ! max # of storms pgm can - ! handle - end module set_max_parms -c - module trig_vals - real, save :: pi, dtr, rtd - real, save :: dtk = 111194.9 ! Dist (m) over 1 deg lat - ! using erad=6371.0e+3 - real, save :: erad = 6371.0e+3 ! Earth's radius (m) - real, save :: ecircum = 40030200 ! Earth's circumference - ! (m) using erad=6371.e3 - real, save :: omega = 7.292e-5 - real, save :: secphr = 3600. - end module trig_vals -c -c------------------------------------------------------ -c diff --git a/sorc/syndat_getjtbul.fd/getjtbul.f b/sorc/syndat_getjtbul.fd/getjtbul.f deleted file mode 100755 index c6e93f752b..0000000000 --- a/sorc/syndat_getjtbul.fd/getjtbul.f +++ /dev/null @@ -1,248 +0,0 @@ -C$$$ MAIN PROGRAM DOCUMENTATION BLOCK -C -C MAIN PROGRAM: SYNDAT_GETJTBUL RETRIEVES JTWC BULLETINS FROM TANK -C PRGMMR: STOKES ORG: NP23 DATE: 2013-02-22 -C -C ABSTRACT: RETRIEVES TROPICAL CYCLONE POSITION AND INTENSITY -C INFORMATION FROM JOINT TYPHOON WARNING CENTER/FNMOC. THESE -C BULLETINS COME IN TWO PIECES. THIS PROGRAM READS THEM AND -C JOINS THEM TOGETHER. THIS ALLOWS THE DOWNSTREAM PROGRAM -C QCTROPCY TO PROCESS THEM. -C -C PROGRAM HISTORY LOG: -C 1997-06-23 S. J. LORD ---- ORIGINAL AUTHOR -C 1998-11-24 D. A. KEYSER -- FORTRAN 90/Y2K COMPLIANT -C 1998-12-30 D. A. KEYSER -- MODIFIED TO ALWAYS OUTPUT RECORDS -C CONTAINING A 4-DIGIT YEAR (REGARDLESS OF INPUT) -C 2000-03-09 D. A. KEYSER -- MODIFIED TO RUN ON IBM-SP; CORRECTED -C PROBLEM FROM EARLIER CRAY VERSION WHICH RESULTED -C IN AN INCORRECT JOINING OF PIECES IF THE SAME -C 2-PIECE BULLETIN IS DUPLICATED IN THE ORIGINAL FILE -C THAT IS READ IN BY THIS PROGRAM -C 2013-02-22 D. C. STOKES -- MINOR DOC CHANGES. (WCOSS TRANSIITON) -C -C USAGE: -C INPUT FILES: -C UNIT 11 - FILE CONTAINING JTWC/FNMOC BULLETINS -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C UNIT 51 - FILE CONTAINING JTWC/FNMOC BULLETINS NOW JOINED -C TOGETHER -C -C SUBPROGRAMS CALLED: -C UNIQUE: - NONE -C LIBRARY: -C W3NCO - W3TAGB W3TAGE ERREXIT -C -C EXIT STATES: -C COND = 0 - SUCCESSFUL RUN, DATA RETRIEVED -C = 1 - SUCCESSFUL RUN -- NO DATA RETRIEVED -C = 20 - TROUBLE - EITHER READ ERROR WITHIN PROGRAM OR -C NUMBER OF RECORDS IN INPUT FILE EXCEEDS PROGRAM -C LIMIT. -C -C REMARKS: THE Y2K-COMPLIANT VERSION IS SET-UP TO READ RECORDS WITH -C EITHER A 2-DIGIT YEAR STARTING IN COLUMN 20 OR A 4-DIGIT -C YEAR STARTING IN COLUMN 20. THIS WILL ALLOW THIS PROGRAM -C TO RUN PROPERLY WHEN JTWC/FNMOC TRANSITIONS RECORDS TO -C A 4-DIGIT YEAR. -C -C ATTRIBUTES: -C LANGUAGE FORTRAN 90 -C MACHINE: IBM SP and IBM iDataPlex -C -C$$$ - PROGRAM SYNDAT_GETJTBUL - - PARAMETER (NBULS=200) - - CHARACTER*1 INL1(80) - CHARACTER*9 STNAME - CHARACTER*18 HEAD(NBULS),CHEKHED - CHARACTER*37 ENDMSG - CHARACTER*80 INL,INLS(NBULS) - CHARACTER*80 DUMY2K - CHARACTER*95 OUTL - - INTEGER LINE(NBULS) - - EQUIVALENCE (INL1,INL) - - DATA IIN/11/,IOUT/51/,LINE/NBULS*0/ - - CALL W3TAGB('SYNDAT_GETJTBUL',2013,0053,0050,'NP23 ') - - WRITE(6,*) ' ' - WRITE(6,*) '===> WELCOME TO SYNDAT_GETJTBUL - F90/Y2K VERSION ', - $ '02-22-2013' - WRITE(6,*) ' ' - WRITE(6,*) ' ' - - NLINE = 0 - - DO N=1,NBULS - INL1=' ' - READ(IIN,2,END=100,ERR=200) INL - 2 FORMAT(A80) - NLINE = N - -C AT THIS POINT WE DO NOT KNOW IF A 2-DIGIT YEAR BEGINS IN COLUMN 20 -c OF THE RECORD (OLD NON-Y2K COMPLIANT FORM) OR IF A 4-DIGIT YEAR -c BEGINS IN COLUMN 20 (NEW Y2K COMPLIANT FORM) - TEST ON LOCATION OF -c LATITUDE BLANK CHARACTER TO FIND OUT ... - - IF(INL1(26).EQ.' ') THEN - -c ... THIS RECORD STILL CONTAINS THE OLD 2-DIGIT FORM OF THE YEAR - -c ... THIS PROGRAM WILL NOW CONVERT THE RECORD TO A 4-DIGIT YEAR USING -c THE "WINDOWING" TECHNIQUE SINCE SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT *, '==> This is an old-format record with a 2-digit ', - $ 'year "',INL(20:21),'"' - PRINT *, ' ' - DUMY2K(1:19) = INL(1:19) - IF(INL(20:21).GT.'20') then - DUMY2K(20:21) = '19' - ELSE - DUMY2K(20:21) = '20' - ENDIF - DUMY2K(22:80) = INL(20:80) - INL= DUMY2K - PRINT *, ' ' - PRINT *, '==> 2-digit year converted to 4-digit year "', - $ INL(20:23),'" via windowing technique' - PRINT *, ' ' - - ELSE - -c ... THIS RECORD CONTAINS THE NEW 4-DIGIT FORM OF THE YEAR -c ... NO CONVERSION NECESSARY SINCE THIS SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT *, '==> This is an new-format record with a 4-digit ', - $ 'year "',INL(20:23),'"' - PRINT *, ' ' - PRINT *, '==> No conversion necessary' - PRINT *, ' ' - end if - - WRITE(6,3) NLINE,INL - 3 FORMAT(' ...Bulletin line number',I4,' is....',A80,'...') - INLS(NLINE)=INL - HEAD(NLINE)=INL(1:18) - WRITE(6,4) NLINE,HEAD(NLINE) - 4 FORMAT(' ... Header for line number',I4,' is ...',A18,'...') - ENDDO - -C Come here if no. of records in input file exceeds pgm limit ("NBULS") -C --------------------------------------------------------------------- - - WRITE(6,301) NBULS - 301 FORMAT(' **** Number of records in input File exceeds program ', - $ 'limit of',I4,'. Abort') - ICODE=20 - ENDMSG='SYNDAT_GETJTBUL TERMINATED ABNORMALLY' - GO TO 900 - - 100 CONTINUE - -C All records read in -C ------------------- - - IF(NLINE.EQ.0) THEN - -C Come here if ZERO records were read from input file -C --------------------------------------------------- - - ICODE=1 - WRITE(6,101) - 101 FORMAT(' ...No Bulletins available.') - ENDMSG='SYNDAT_GETJTBUL TERMINATED NORMALLY ' - GO TO 900 - ENDIF - - IF(MOD(NLINE,2).NE.0) THEN - -C Come here if number of records read was not even -C ------------------------------------------------ - - WRITE(6,111) NLINE - 111 FORMAT(' **** Number of records read in (=',I4,') is not ', - $ 'even. Abort') - ICODE=20 - ENDMSG='SYNDAT_GETJTBUL TERMINATED ABNORMALLY' - GO TO 900 - ENDIF - - PRINT *, ' ' - PRINT *, ' ' - NBULT=NLINE/2 - NBUL=0 - LOOP1: DO NL=1,NLINE - IF(LINE(NL).EQ.1) CYCLE LOOP1 - CHEKHED=HEAD(NL) - IFND = 0 - LOOP1n1: DO NB=NL+1,NLINE - IF(LINE(NB).EQ.1) CYCLE LOOP1n1 - NBSAV=NB - WRITE(6,11) CHEKHED,INLS(NB)(1:18) - 11 FORMAT(' ...message parts are ...',A18,'...',A18,'...') - IF(CHEKHED .EQ. INLS(NB)(1:18)) THEN - LINE(NL) = 1 - LINE(NB) = 1 - IFND = 1 - EXIT LOOP1n1 - ENDIF - ENDDO LOOP1n1 - IF(IFND.EQ.1) THEN - WRITE(6,131) INLS(NL)(10:10) - 131 FORMAT(' ...inls(nl)(10:10)=',A1,'...') - IF(INLS(NL)(10:10).eq.' ') THEN - LOOP 1n2: DO IB=11,18 - IS=IB - IF(INLS(NL)(IS:IS).NE.' ') EXIT LOOP 1n2 - ENDDO LOOP 1n2 - STNAME=' ' - STNAME=INLS(NL)(IS:18) - INLS(NL)(10:18)=STNAME - ENDIF - OUTL=INLS(NL)(1:66)//INLS(NBSAV)(33:61) - WRITE(6,145) OUTL - 145 FORMAT(' ...Complete bulletin is ...',A95,'...') - WRITE(IOUT,22) OUTL - 22 FORMAT(A95) - NBUL=NBUL+1 - ENDIF - IF(NBUL .EQ. NBULT) GO TO 150 - ENDDO LOOP1 - - 150 CONTINUE - WRITE(6,151) NBUL - 151 FORMAT(' ...',I4,' bulletins have been made.') - ICODE=0 - ENDMSG='SYNDAT_GETJTBUL TERMINATED NORMALLY ' - GO TO 900 - - 200 continue - -C Come here if error reading a record from input file -C --------------------------------------------------- - - WRITE(6,201) - 201 FORMAT(' **** ERROR READING RECORD FROM INPUT FILE. ABORT') - ICODE=20 - ENDMSG='SYNDAT_GETJTBUL TERMINATED ABNORMALLY' - - 900 CONTINUE - - WRITE(6,*) ENDMSG - - CALL W3TAGE('SYNDAT_GETJTBUL') - - IF(ICODE.GT.0) CALL ERREXIT(ICODE) - - STOP - - END diff --git a/sorc/syndat_getjtbul.fd/makefile b/sorc/syndat_getjtbul.fd/makefile deleted file mode 100755 index 3ac5730f31..0000000000 --- a/sorc/syndat_getjtbul.fd/makefile +++ /dev/null @@ -1,23 +0,0 @@ -SHELL= /bin/sh -#LIBS= -L/nwprod/lib -lw3nco_v2.0.5_4 -#LIBS= -L/contrib/nceplibs/nwprod/lib -lw3nco_v2.0.5_4 -FC= ifort -#DEBUG = -ftrapuv -check all -fp-stack-check -fstack-protector -##DEBUG = -ftrapuv -fp-stack-check -fstack-protector -FFLAGS= -O3 -g -traceback -assume noold_ldout_format $(DEBUG) -LDFLAGS= -SRCS= getjtbul.f -OBJS= getjtbul.o -CMD= syndat_getjtbul - -all: $(CMD) - -$(CMD): $(OBJS) - $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS_SYN_GET) - -clean: - -rm -f $(OBJS) - -install: - -mv $(CMD) ../../exec/$(CMD) - diff --git a/sorc/syndat_maksynrc.fd/makefile b/sorc/syndat_maksynrc.fd/makefile deleted file mode 100755 index 9adcb17e26..0000000000 --- a/sorc/syndat_maksynrc.fd/makefile +++ /dev/null @@ -1,21 +0,0 @@ -SHELL= /bin/sh -#LIBS= -L/nwprod/lib -lw3nco_v2.0.5_4 -lbacio_v2.0.1_4 -##LIBS_SYN_MAK= -L/contrib/nceplibs/nwprod/lib -lw3nco_v2.0.5_4 -lbacio_v2.0.1_4 -FC= ifort -#DEBUG = -ftrapuv -check all -check nooutput_conversion -fp-stack-check -fstack-protector -FFLAGS= -O3 -g -traceback -assume noold_ldout_format $(DEBUG) -LDFLAGS= -SRCS= maksynrc.f -OBJS= maksynrc.o -CMD= syndat_maksynrc - -all: $(CMD) - -$(CMD): $(OBJS) - $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS_SYN_MAK) - -clean: - -rm -f $(OBJS) - -install: - mv $(CMD) ../../exec/$(CMD) diff --git a/sorc/syndat_maksynrc.fd/maksynrc.f b/sorc/syndat_maksynrc.fd/maksynrc.f deleted file mode 100755 index dca5de2575..0000000000 --- a/sorc/syndat_maksynrc.fd/maksynrc.f +++ /dev/null @@ -1,472 +0,0 @@ -C$$$ MAIN PROGRAM DOCUMENTATION BLOCK -C -C MAIN PROGRAM: SYNDAT_MAKSYNRC MAKE SYNDAT RECORD FROM HUMAN INPUT -C PRGMMR: STOKES ORG: NP23 DATE: 2013-03-15 -C -C ABSTRACT: QUERIES HUMAN INPUT FOR INFORMATION TO CONSTRUCT TROPICAL -C CYCLONE SYNTHETIC DATA RECORD AND WRITES RECORD TO FORTRAN -C UNIT 51 -C -C PROGRAM HISTORY LOG: -C 1997-06-26 S. J. LORD ---- ORIGINAL AUTHOR -C 1998-11-23 D. A. KEYSER -- FORTRAN 90 AND Y2K COMPLIANT -C 1998-12-30 D. A. KEYSER -- MODIFIED TO OUTPUT RECORDS CONTAINING A -C 4-DIGIT YEAR -C 2000-03-03 D. A. KEYSER -- CONVERTED TO RUN ON IBM-SP MACHINE -C 2013-03-15 D. C. STOKES -- Modified some stdout writes to display -C cleanly as part of WCOSS transition. -C -C USAGE: -C INPUT FILES: -C UNIT 05 - INPUT FILE FOR HUMAN (KEYBOARD ENTRY) -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C UNIT 51 - SYNTHETIC DATA RECORD (ONE PER RUN) -C -C SUBPROGRAMS CALLED: -C UNIQUE: - BEGINE ENDE MAKVIT NSEW -C LIBRARY: -C W3LIB: - W3TAGB W3TAGE -C -C EXIT STATES: -C COND = 0 - SUCCESSFUL RUN -C -C REMARKS: -C -C ATTRIBUTES: -C LANGUAGE FORTRAN 90 -C MACHINE: IBM-SP, IBM-iDataPlex -C -C$$$ - program SYNDAT_MAKSYNRC - logical fstflg - character rsmc*4,stmnam*9,stmid*3 - data iuntvi/51/,fstflg/.false./ - - CALL W3TAGB('SYNDAT_MAKSYNRC',2013,0074,0000,'NP23 ') - - write(6,*) "Welcome to the Synthetic Data Record Maker" - write(6,*) "+++ FORTRAN 90 / Y2K VERSION +++" - write(6,*) "+++ 03 March 2000 +++" - write(6,*) "Please follow all directions carefully, paying" - write(6,*) "careful attention to the Units as units" - write(6,*) "conversions are hardwired" - - call begine - write(6,*) 'Enter Storm Name (UPPER CASE)' - read(5,1) stmnam - 1 format(a) - write(6,2) stmnam - 2 format(' Storm name is:',a9) - call ende - - call begine - write(6,*) 'Enter Storm Identifier (e.g. 03P)' - read(5,11) stmid - 11 format(a) - write(6,12) stmid - 12 format(' Storm Identifier is:',a3) - call ende - - call begine - write(6,*) 'Enter Organization ID (e.g. NHC, JTWC)' - read(5,11) rsmc - write(6,13) rsmc - 13 format(' Organization Identifier is:',a4) - call ende - - call begine - write(6,*) 'Enter date (yyyymmdd)' - read(5,*) idate - write(6,*) 'Date is: ',idate - call ende - - call begine - write(6,*) 'Enter hour (hh)' - read(5,*) ihour - iutc=ihour*100 - write(6,*) 'Hour is: ',ihour - call ende - - call begine - write(6,*) 'Enter storm latitude (negative for south)' - read(5,*) stmlat - write(6,'(x,a,f5.1)') 'Storm latitude is: ',stmlat - call ende - - call begine - write(6,*) 'Enter storm longitude (DEG EAST)' - read(5,*) stmlon - write(6,'(x,a,f5.1)') 'Storm longitude is: ',stmlon - call ende - - call begine - write(6,*) 'Enter storm direction (DEG FROM NORTH)' - read(5,*) stmdir - write(6,'(x,a,f4.0)') 'Storm direction is: ',stmdir - call ende - - call begine - write(6,*) 'Enter storm speed (KNOTS)' - read(5,*) stmspd - write(6,'(x,a,f6.2)') 'Storm speed is: ',stmspd - stmspd=stmspd/1.94 - call ende - - call begine - write(6,*) 'Enter storm central pressure (MB)' - read(5,*) pcen - write(6,'(x,a,f5.0)') 'Storm central pressure is: ',pcen - call ende - - call begine - write(6,*) 'Enter storm environmental pressure (MB)' - read(5,*) penv - write(6,'(x,a,f5.0)') 'Storm environmental pressure is: ',penv - call ende - - call begine - write(6,*) 'Enter estimated maximum wind (KNOTS)' - read(5,*) vmax - write(6,'(x,a,f4.0)') 'Estimated maximum wind (KNOTS) is: ',vmax - vmax=vmax/1.94 - call ende - - call begine - write(6,*) 'Enter estimated radius of outermost closed ', - 1'isobar (ROCI), i.e. size of the storm circulation (KM)' - read(5,*) rmax - write(6,'(x,a,f5.0)') 'Estimated ROCI (KM) is: ',rmax - call ende - - call begine - write(6,*) 'Enter estimated radius of maximum wind (KM)' - read(5,*) rmw - write(6,'(x,a,f5.0)') - 1 'Estimated radius of maximum wind (KM) is: ',rmw - call ende - - call begine - call nsew - write(6,*) 'Enter estimated radius of 15 m/s (35 knot) winds (KM)' - write(6,*) - 1 'in each each of the following quadrants (e.g. 290 222 200 180)' - write(6,*) 'Note: numbers must be separated by blanks' - write(6,*) 'Note: numbers must be in the order NE SE SW NW and be' - 1 ,' separated by blanks' - write(6,*) 'Note: enter all negative numbers to denote no ', - 1'estimate' - read(5,*) r15ne,r15se,r15sw,r15nw - write(6,'(x,a,4f8.0)') - 1 'Estimated radius of 15 m/s (35 knot) winds is: ', - 2 r15ne,r15se,r15sw,r15nw - call ende - - call begine - call nsew - write(6,*) 'Enter estimated radius of 26 m/s (55 knot) winds (KM)' - write(6,*) - 1 'in each each of the following quadrants (e.g. 50 50 50 50)' - write(6,*) 'Note: numbers must be separated by blanks' - write(6,*) 'Note: numbers must be in the order NE SE SW NW and be' - 1'separated by blanks' - write(6,*) 'Note: enter all negative numbers to denote no ', - 1'estimate' - read(5,*) r26ne,r26se,r26sw,r26nw - write(6,'(x,a,4f8.0)') - 1 'Estimated radius of 26 m/s (35 knot) winds is: ', - 2 r26ne,r26se,r26sw,r26nw - call ende - - call begine - write(6,*) 'Enter estimated top of cyclonic circulation (mb)' - read(5,*) ptop - write(6,'(x,a,f7.1)') - 1 'Estimated top of cyclonic circulation (mb) is: ',ptop - call ende - - call begine - write(6,*) 'Enter estimated latitude at maximum forecast time ' - write(6,*) '(negative for south)' - write(6,*) 'Note: enter -99.0 to denote no estimate' - read(5,*) fclat - write(6,'(x,a,f5.1)') - 1 'Estimated latitude at maximum forecast time is: ', fclat - call ende - - call begine - write(6,*) 'Enter estimated longitude at maximum forecast time ' - write(6,*) '(DEG EAST)' - write(6,*) 'Note: enter a negative number to denote no estimate' - read(5,*) fclon - write(6,'(x,a,f5.1)') - 1 'Estimated longitude at maximum forecast time is: ', fclon - call ende - - call begine - write(6,*) 'Enter maximum forecast time (hours, e.g. 72)' - write(6,*) 'Note: enter a negative number to denote no estimate' - read(5,*) fcstp - write(6,'(x,a,f4.0)') 'Maximum forecast time is: ',fcstp - call ende - - CALL MAKVIT(IUNTVI,IDATE,IUTC,STMLAT,STMLON,STMDIR,STMSPD, - 1 PCEN,PENV,RMAX,VMAX,RMW,R15NE,R15SE,R15SW, - 2 R15NW,PTOP,STMNAM,STMID,RSMC,FSTFLG,r26ne, - 3 r26se,r26sw,r26nw,fcstp,fclat,fclon) - - CALL W3TAGE('SYNDAT_MAKSYNRC') - stop - end - SUBROUTINE BEGINE - write(6,1) - 1 format(' ') - write(6,11) - 11 format(' *******************************************************') - return - end - - SUBROUTINE ENDE - write(6,1) - 1 format(' *******************************************************') - write(6,11) - 11 format(' ') - return - end -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: MAKVIT CREATES TROP. CYCLONE VITAL. STAT. DATA -C PRGMMR: D. A. KEYSER ORG: NP22 DATE: 1998-12-30 -C -C ABSTRACT: CREATES TROPICAL CYCLONE VITAL STATISTICS RECORDS FROM -C RAW INFORMATION SUCH AS LATITUDE, LONGITUDE, MAX. WINDS ETC. -C -C PROGRAM HISTORY LOG: -C 1991-06-06 S. J. LORD ---- ORIGINAL AUTHOR -C 1998-11-23 D. A. KEYSER -- FORTRAN 90 AND Y2K COMPLIANT -C 1998-12-30 D. A. KEYSER -- MODIFIED TO OUTPUT RECORDS CONTAINING A -C 4-DIGIT YEAR -C -C USAGE: CALL PGM-NAME(INARG1, INARG2, WRKARG, OUTARG1, ... ) -C INPUT ARGUMENT LIST: -C INARG1 - GENERIC DESCRIPTION, INCLUDING CONTENT, UNITS, -C INARG2 - TYPE. EXPLAIN FUNCTION IF CONTROL VARIABLE. -C -C OUTPUT ARGUMENT LIST: (INCLUDING WORK ARRAYS) -C WRKARG - GENERIC DESCRIPTION, ETC., AS ABOVE. -C OUTARG1 - EXPLAIN COMPLETELY IF ERROR RETURN -C ERRFLAG - EVEN IF MANY LINES ARE NEEDED -C -C INPUT FILES: (DELETE IF NO INPUT FILES IN SUBPROGRAM) -C DDNAME1 - GENERIC NAME & CONTENT -C -C OUTPUT FILES: (DELETE IF NO OUTPUT FILES IN SUBPROGRAM) -C DDNAME2 - GENERIC NAME & CONTENT AS ABOVE -C FT06F001 - INCLUDE IF ANY PRINTOUT -C -C REMARKS: LIST CAVEATS, OTHER HELPFUL HINTS OR INFORMATION -C -C ATTRIBUTES: -C LANGUAGE: FORTRAN 90 -C MACHINE: CRAY, SGI -C -C$$$ - SUBROUTINE MAKVIT(IUNTVI,IDATE,IUTC,STMLAT,STMLON,STMDIR,STMSPD, - 1 PCEN,PENV,RMAX,VMAX,RMW,R15NE,R15SE,R15SW, - 2 R15NW,PTOP,STMNAM,STMID,RSMC,FSTFLG,r26ne, - 3 r26se,r26sw,r26nw,fcstp,fclat,fclon) -C - SAVE -C - CHARACTER *(*) RSMC,STMNAM,STMID - LOGICAL FSTFLG -C - PARAMETER (MAXCHR=129) - PARAMETER (MAXVIT=22) - PARAMETER (MAXTPC= 3) -C - CHARACTER BUFIN*1,RSMCZ*4,STMIDZ*3,STMNMZ*9,FSTFLZ*1,STMDPZ*1, - 1 SHALO*1,MEDIUM*1, - 2 DEEP*1,LATNS*1,LONEW*1,FMTVIT*6,FMTMIS*4,BUFINZ*129, - 3 RELOCZ*1,STMTPC*1,EXE*1, - 7 latnsf,lonewf -C - DIMENSION IVTVAR(MAXVIT),VITVAR(MAXVIT),VITFAC(MAXVIT), - 1 ISTVAR(MAXVIT),IENVAR(MAXVIT),STMTOP(0:MAXTPC) -C - DIMENSION BUFIN(MAXCHR),STMTPC(0:MAXTPC),FMTVIT(MAXVIT), - 1 MISSNG(MAXVIT),FMTMIS(MAXVIT) -C - EQUIVALENCE (BUFIN(1),RSMCZ),(BUFIN(5),RELOCZ),(BUFIN(6),STMIDZ), - 1 (BUFIN(10),STMNMZ),(BUFIN(19),FSTFLZ), - 2 (BUFIN(37),LATNS),(BUFIN(43),LONEW), - 3 (BUFIN(95),STMDPZ),(BUFIN(1),BUFINZ), - 4 (BUFIN(123),LATNSF),(BUFIN(129),LONEWF) -C - EQUIVALENCE (IVTVAR(1),IDATEZ),(IVTVAR(2),IUTCZ) -C - EQUIVALENCE (VITVAR( 3),STMLTZ),(VITVAR( 4),STMLNZ), - 1 (VITVAR( 5),STMDRZ),(VITVAR( 6),STMSPZ), - 2 (VITVAR( 7),PCENZ), (VITVAR( 8),PENVZ), - 3 (VITVAR( 9),RMAXZ), (VITVAR(10),VMAXZ), - 4 (VITVAR(11),RMWZ), (VITVAR(12),R15NEZ), - 5 (VITVAR(13),R15SEZ),(VITVAR(14),R15SWZ), - 6 (VITVAR(15),R15NWZ),(VITVAR(16),R26NEZ), - 7 (VITVAR(17),R26SEZ),(VITVAR(18),R26SWZ), - 8 (VITVAR(19),R26NWZ),(VITVAR(20),FCSTPZ), - 9 (VITVAR(21),FCLATZ),(VITVAR(22),FCLONZ) -C - EQUIVALENCE (STMTPC(0), EXE),(STMTPC(1),SHALO),(STMTPC(2),MEDIUM), - 1 (STMTPC(3),DEEP) -C - DATA SHALO/'S'/,MEDIUM/'M'/,DEEP/'D'/,EXE/'X'/, - 2 VITFAC/2*1.0,2*0.1,1.0,0.1,14*1.0,2*0.1/, - 3 FMTVIT/'(I8.8)','(I4.4)','(I3.3)','(I4.4)',2*'(I3.3)', - 4 3*'(I4.4)','(I2.2)','(I3.3)',8*'(I4.4)','(I2.2)', - 5 '(I3.3)','(I4.4)'/, - 6 FMTMIS/'(I8)','(I4)','(I3)','(I4)',2*'(I3)',3*'(I4)', - 7 '(I2)','(I3)',8*'(I4)','(I2)','(I3)','(I4)'/, - 8 MISSNG/-9999999,-999,-99,-999,2*-99,3*-999,-9,-99,8*-999,-9, - 9 -99,-999/, - O ISTVAR/20,29,34,39,45,49,53,58,63,68,71,75,80,85,90, 97,102, - O 107,112,117,120,125/, - 1 IENVAR/27,32,36,42,47,51,56,61,66,69,73,78,83,88,93,100,105, - 1 110,115,118,122,128/, - 3 STMTOP/-99.0,700.,400.,200./ -C - BUFINZ=' ' - RSMCZ=RSMC -cvvvvvy2k - -C NOTE: This program OUTPUTS a record containing a 4-digit year - for -C example: - -C NHC 13L MITCH 19981028 1800 164N 0858W 270 010 0957 1008 0371 51 019 0278 0278 0185 0185 D -C 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345 ... -C 1 2 3 4 5 6 7 8 9 ... - -C This program will truncate the integer work containing the -C date in the form yyyymmdd to the form yymmdd prior to writing -C it into the output record. -cppppp - print *, ' ' - print *, ' ' - print *, '==> tcvitals file can now contain a 4-digit year, so ', - $ 'no conversion is necessary since 4-digit year is input' - print *, ' ' - print *, ' ' -cppppp -caaaaay2k - IDATEZ=IDATE - IUTCZ=IUTC - STMNMZ=STMNAM - STMIDZ=STMID - STMLTZ=STMLAT -C - IF(STMLTZ .GE. 0.0) THEN - LATNS='N' - ELSE - LATNS='S' - STMLTZ=ABS(STMLTZ) - ENDIF -C - IF(STMLON .GE. 180.) THEN - STMLNZ=360.-STMLON - LONEW='W' -C - ELSE - STMLNZ=STMLON - LONEW='E' - ENDIF -C - IF(fclat .GE. 0.0) THEN - fclatz=fclat - latnsf='N' - ELSE if (fclat .gt. -90.) then - latnsf='S' - fclatz=ABS(fclat) -c - else - latnsf='S' - fclatz=-99.9 - ENDIF -C - IF(fclon .GE. 180.) THEN - fclonz=360.-fclon - lonewf='W' -C - ELSE if (fclon .gt. 0.) then - fclonz=fclon - lonewf='E' -c - else - fclonz=-999.9 - lonewf='E' - ENDIF -C - STMDRZ=STMDIR - STMSPZ=STMSPD - PCENZ =PCEN - PENVZ =PENV - RMAXZ =RMAX - VMAXZ =VMAX - RMWZ =RMW - R15NEZ=R15NE - R15SEZ=R15SE - R15SWZ=R15SW - R15NWZ=R15NW - r26nez=r26ne - r26sez=r26se - r26swz=r26sw - r26nwz=r26nw - fcstpz=fcstp -C - FSTFLZ=' ' - IF(FSTFLG) FSTFLZ=':' -C - DO IV=1,2 - IF(IVTVAR(IV) .GE. 0) THEN - WRITE(BUFINZ(ISTVAR(IV):IENVAR(IV)),FMTVIT(IV)) IVTVAR(IV) - ELSE - WRITE(BUFINZ(ISTVAR(IV):IENVAR(IV)),FMTMIS(IV)) MISSNG(IV) - ENDIF - ENDDO -C - DO IV=3,MAXVIT - IF(VITVAR(IV) .GE. 0) THEN - IVTVAR(IV)=NINT(VITVAR(IV)/VITFAC(IV)) - WRITE(BUFINZ(ISTVAR(IV):IENVAR(IV)),FMTVIT(IV)) IVTVAR(IV) - ELSE - WRITE(BUFINZ(ISTVAR(IV):IENVAR(IV)),FMTMIS(IV)) MISSNG(IV) - ENDIF - ENDDO -C - DO ITOP=0,MAXTPC - IF(PTOP .EQ. STMTOP(ITOP)) THEN - STMDPZ=STMTPC(ITOP) - GO TO 31 - ENDIF - ENDDO - - 31 CONTINUE -C - IF(IUNTVI .GT. 0) THEN - WRITE(IUNTVI,41) BUFINZ - 41 FORMAT(A) - WRITE(6,43) BUFINZ - 43 FORMAT(' ...',A,'...') - ELSE - WRITE(6,43) BUFINZ - ENDIF -C - RETURN - END - - SUBROUTINE NSEW - write(6,*) ' Quadrants' - write(6,*) ' NW : NE' - write(6,*) '----------- Order of quadrants: NE SE SW NW' - write(6,*) ' SW : SE' - return - end diff --git a/sorc/syndat_qctropcy.fd/makefile b/sorc/syndat_qctropcy.fd/makefile deleted file mode 100755 index d667c26cbe..0000000000 --- a/sorc/syndat_qctropcy.fd/makefile +++ /dev/null @@ -1,23 +0,0 @@ -SHELL= /bin/sh -#LIBS= -L/nwprod/lib -lw3nco_v2.0.5_8 -##LIBS= -L/contrib/nceplibs/nwprod/lib -lw3nco_v2.0.5_8 -FC= ifort -#DEBUG = -ftrapuv -check all -check noarg_temp_created -fp-stack-check -fstack-protector -## if '-check all' enabled, include '-check noarg_temp_created' to avoid warning msgs indicating -## slight performance hit due to chosen method of passing array arguments to w3difdat -FFLAGS= -O3 -g -traceback -r8 -i8 -assume byterecl -assume noold_ldout_format $(DEBUG) -LDFLAGS= -SRCS= qctropcy.f -OBJS= qctropcy.o -CMD= syndat_qctropcy - -all: $(CMD) - -$(CMD): $(OBJS) - $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS_SYN_QCT) - -clean: - -rm -f $(OBJS) - -install: - mv $(CMD) ../../exec/$(CMD) diff --git a/sorc/syndat_qctropcy.fd/qctropcy.f b/sorc/syndat_qctropcy.fd/qctropcy.f deleted file mode 100755 index f0fae79aa0..0000000000 --- a/sorc/syndat_qctropcy.fd/qctropcy.f +++ /dev/null @@ -1,12043 +0,0 @@ -C$$$ MAIN PROGRAM DOCUMENTATION BLOCK -C -C MAIN PROGRAM: SYNDAT_QCTROPCY PERFORMS QC ON TROP. CYCLONE BULLETINS -C PRGMMR: KEYSER ORG: NP22 DATE: 2008-07-10 -C -C ABSTRACT: PERFORMS QUALITY CONTROL ON TROPICAL CYCLONE POSITION -C AND INTENSITY INFORMATION (T. C. VITAL STATISTICS). CHECKS -C PERFORMED ARE: DUPLICATE RECORDS, APPROPRIATE DATE/TIME, PROPER -C RECORD STRUCTURE (BLANKS IN PROPER PLACE AND NO IMPROPER NON- -C INTEGER NUMBERS), STORM NAME/ID NUMBER, RECORDS FROM MULTIPLE -C INSTITUTIONS, SECONDARY VARIABLES (E.G. CENTRAL PRESSURE), -C STORM POSITION AND DIRECTION/SPEED. EMPHASIS IS ON INTERNAL -C CONSISTENCY BETWEEN REPORTED STORM LOCATION AND PRIOR MOTION. -C -C PROGRAM HISTORY LOG: -C 1991-03-27 S. J. LORD -C 1991-07-18 S. J. LORD ADDED ROUTINE FSTSTM, MODIFIED ADFSTF -C 1992-01-22 S. J. LORD CHANGED W3FS12,W3FS13 CALLS TO W3FS19, W3FS17 -C 1992-02-19 S. J. LORD ADDED MULTIPLE RSMC CHECK -C 1992-04-09 S. J. LORD CHANGED SLMASK TO T126 FROM T80 -C 1992-05-20 S. J. LORD CORRECTED BUG IN SELACK CALL -C 1992-06-09 J. JOHNSON CHANGED COND=10 TO COND=4 FOR SUCCESSFUL RUN -C BUT WITH EMPTY INPUT FILES -C 1992-07-01 S. J. LORD ADDED DATE CHECK AND REVISED RITCUR -C 1992-07-10 S. J. LORD REVISED STIDCK TO DISMANTLE CONSISTENCY -C CHECKS IN THE CASE OF NUMBERED DEPRESSIONS -C 1992-07-16 S. J. LORD FIXED SOME BUGS IN RSMCCK -C 1992-08-20 S. J. LORD ADDED THE JTWC MEMORIAL SWITCH CHECK -C 1992-08-20 S. J. LORD MODIFIED DUPCHK TO ADD A NEW INPUT UNIT -C 1992-09-04 S. J. LORD ADDED PRESSURE WIND RELATIONSHIP TO SECVCK -C 1992-09-09 S. J. LORD ADDED CENTRAL PACIFIC NAMES AND NAME CHECK -C 1992-09-18 S. J. LORD ADDED CHECK FOR CORRECT MISSING DATA IN READCK -C 1992-10-28 S. J. LORD ADDED GREEK ALPHABET STORM NAMES -C 1992-12-14 S. J. LORD MODIFIED CONSOLE MESSAGE FOR ISTOP=4 -C 1993-03-05 S. J. LORD IMPLEMENTED STORM CATALOG (RCNCIL) -C 1993-03-31 S. J. LORD IMPLEMENTED READING STORM NAMES FROM EXTERNAL -C FILE IN STIDCK -C 1993-04-08 S. J. LORD IMPLEMENTED WEST PACIFIC CLIPER -C 1993-08-25 S. J. LORD ADDER RETURN CODE OF 10 FOR RCNCIL LOGICAL -C ERROR -C 1993-08-25 S. J. LORD UPGRADED STORM ID CHECKING FOR STORMS CHANGING -C 1994-06-20 S. J. LORD MODIFIED MAXCHK FOR THE GFDL FORMAT -C 1996-04-12 S. J. LORD REMOVED CALL TO DRSPCK -C 1997-06-24 S. J. LORD ADDED NEW UNIT FOR MANUALLY ENTERED MESSAGES -C 1998-03-24 S. J. LORD MODIFIED VITDATN.INC AND VITFMTN.INC TO -C RECOGNIZE RSMC ID "NWOC" (THIS HAD BEEN UNRECOGNIZED -C AND HAD CAUSED THE PROGRAM TO STOP 20); REMOVED -C UNINITIALIZED VARIABLES THAT WERE CAUSING COMPILER -C WARNINGS -C 1998-06-05 D.A. KEYSER - FORTRAN 90 AND Y2K COMPLIANT -C 1998-06-18 S.J. LORD - FORTRAN 90 AND Y2K COMPLIANT (vitfmt.inc) -C 1998-08-16 S.J. LORD - FORTRAN 90 AND Y2K COMPLIANT (completed) -C 1998-12-14 D. A. KEYSER - Y2K/F90 COMPLIANCE, STREAMLINED CODE; -C 2000-03-03 D. A. KEYSER - CONVERTED TO RUN ON IBM-SP MACHINE -C 2001-02-07 D. A. KEYSER - EXPANDED TEST STORM ID RANGE FROM 90-99 -C TO 80-99 AT REQUEST FOR JIM GROSS AT TPC {NOTE: IF THIS -C EVER HAS TO BE DONE AGAIN, THE ONLY LINES THAT NEED TO -C BE CHANGED ARE COMMENTED AS "CHG. TESTID" - ALSO MUST -C CHANGE PROGRAM bulls_bufrcyc WHICH GENERATES GTS -C MESSAGES, CHANGE UTILITY PROGRAM trpsfcmv WHICH -C GENERATES CHARTS FOR THE TROPICS (although technically -C trpsfcmv reads in q-c'd tcvitals files output by this -C program and thus they should not have test storms in -C them), and changes scripts: util/ush/extrkr.sh and -C ush/relocate_extrkr.sh} -C 2004-06-08 D. A. KEYSER - WHEN INTEGER VALUES ARE DECODED FROM -C CHARACTER-BASED RECORD VIA INTERNAL READ IN SUBR. DECVAR, -C IF BYTE IN UNITS DIGIT LOCATION IS ERRONEOUSLY CODED AS -C BLANK (" "), IT IS REPLACED WITH A "5" IN ORDER TO -C PREVENT INVALID VALUE FROM BEING RETURNED (I.E., IF -C "022 " WAS READ, IT WAS DECODED AS "22", IT IS NOW -C DECODED AS "225" - THIS HAPPENED FOR VALUE OF RADIUS OF -C LAST CLOSED ISOBAR FOR JTWC RECORDS FROM 13 JULY 2000 -C THROUGH FNMOC FIX ON 26 MAY 2004 - THE VALUE WAS REPLACED -C BY CLIMATOLOGY BECAUSE IT FAILED A GROSS CHECK, HAD THIS -C CHANGE BEEN IN PLACE THE DECODED VALUE WOULD HAVE BEEN -C W/I 0.5 KM OF THE ACTUAL VALUE) -C 2008-07-10 D. A. KEYSER - CORRECTED MEMORY CLOBBERING CONDITION -C IN SUBR. STIDCK RELATED TO ATTEMPTED STORAGE OF MORE WEST -C PACIFIC STORM NAMES FROM FILE syndat_stmnames (144) THAN -C ALLOCATED BY PROGRAM AND IN syndat_stmnames (140), THIS -C LED TO OVERWRITING OF FIRST FOUR syndat_stmnames STORM -C NAMES IN ATLANTIC BASIN FOR 2002, 2008, 2014 CYCLE - -C DISCOVERED BECAUSE 2008 STORM BERTHA (STORM #2 IN -C ATLANTIC BASIN LIST IN syndat_stmnames) WAS NOT BEING -C RECOGNIZED AND THUS NOT PROCESSED INTO OUTPUT TCVITALS -C FILE - CORRECTED BY LIMITING STORAGE OF WEST PACIFIC -C STORM NAMES TO EXACTLY THE MAXIMUM IN PROGRAM (AND NUMBER -C IN syndat_stmnames) (CURRENTLY 140), ALSO GENERALIZED -C CODE TO ENSURE THAT IS WILL NEVER CLOBBER MEMORY READING -C AND STORING STORM NAMES IN ANY OF THE BASINS EVEN IF THE -C NUMBER OF STORM NAMES IN syndat_stmnames INCREASE (AS -C LONG AS THE MAXIMUM VALUE IS .GE. TO THE NUMBER OF STORM -C NAMES FOR THE BASIN IN FILE syndat_stmnames) -C 2013-03-17 D. C. STOKES - CHANGED SOME LIST DIRECTED OUTPUT TO -C FORMATTED TO PREVENT UNNDECSSARY WRAPPING ON WCOSS. -C 2013-03-24 D. C. STOKES - INITIALIZE VARIABLES THAT WERE NOT GETTING -C SET WHEN THERE ARE NO RECORDS TO PROCESS. -C 2013-10-10 D. C. STOKES - ADDED NON-HYPHNATED CARDINAL NUMBERS IN -C ORDER TO RECOGNIZE SUCH NAMED STORMS IN BASINS L, E, C, W, -C AND TO RECOGNIZE NAME CHANGES OF SUCH IN THE OTHER BASINS. -C ALSO EXTENDED THAT LIST (FROM 36 TO 39). -C -C -C INPUT FILES: -C (Note: These need to be double checked) -C UNIT 03 - TEXT FILE ASSOCIATING UNIT NUMBERS WITH FILE NAMES -C UNIT 05 - NAMELIST: VARIABLES APPROPRIATE TO THIS Q/C PROGRAM: -C MAXUNT: NUMBER OF INPUT FILES -C FILES: LOGICAL VARIABLE CONTROLLING FINAL -C COPYING OF RECORDS AND FILE MANIPULATION. -C FOR NORMAL OPERATIONAL USAGE, SHOULD BE TRUE. -C WHEN TRUE, INPUT FILES (UNIT 30, UNIT 31, -C ETC) WILL ZEROED OUT. FOR MULTIPLE RUNS -C OVER THE SAME INPUT DATA SET, FILES MUST BE -C FALSE. FOR DEBUGGING, IT IS HIGHLY -C RECOMMENDED THAT FILES BE SET TO FALSE. -C LNDFIL: TRUE IF RECORDS OF STORMS OVER COASTAL -C POINTS ARE NOT COPIED TO THE FILE OF -C CURRENT QUALITY CONTROLLED RECORDS. -C RUNID: RUN IDENTIFIER (e.g., 'GDAS_TM00_00'). -C WINCUR: TIME WINDOW FOR WRITING CURRENT FILE -C NVSBRS: NUMBER OF VARIABLES ALLOWED FOR SUBSTITUTION -C IVSBRS: INDICES OF VARIABLES ALLOW FOR SUBSTITUTION -C UNIT 11 - APPROPRIATE T126 32-BIT GLOBAL SEA/LAND MASK FILE ON -C GAUSSIAN GRID -C UNIT 12 - RUN DATE FILE ('YYYYMMDDHH') -C UNIT 14 - DATA FILE CONTAINING STORM NAMES -C UNIT 20 - SCRATCH FILE CONTAINING PRELIMINARY Q/C RECORDS -C UNIT 21 - ORIGINAL SHORT-TERM HISTORY, CONTAINS ORIGINAL RECORDS -C BACK A GIVEN NUMBER (WINMIN) DAYS FROM PRESENT -C UNIT 22 - ALIASED SHORT-TERM HISTORY, CONTAINS ALIAS RECORDS -C BACK A GIVEN NUMBER (WINMIN) DAYS FROM PRESENT -C UNIT 25 - ALIAS FILE CONTAINING EQUIVALENT STORM IDS -C FOR STORMS THAT HAVE BEEN REPORTED BY MULTIPLE RSMC'S -C UNIT 26 - NEW ALIAS FILE CONTAINING EQUIVALENT STORM IDS -C FOR STORMS THAT HAVE BEEN REPORTED BY MULTIPLE RSMC'S -C NOTE: UCL SHOULD COPY THIS FILE TO UNIT 22 (THE OLD -C ALIAS FILE) AT THE END OF EXECUTION. -C UNIT 30 - STARTING POINT FOR FILES CONTAINING NEW RECORDS TO BE -C etc. QUALITY CONTROLLED. ADDITIONAL INPUT FILES ARE UNIT -C 31, UNIT 32 ETC. THE NUMBER OF THESE FILES IS -C CONTROLLED BY THE NAMELIST INPUT VARIABLE "MAXUNT" -C MENTIONED UNDER UNIT 05 ABOVE. AN EXAMPLE OF AN INPUT -C FILE IS: /tpcprd/atcf/ncep/tcvitals. THIS FILE IS -C WRITTEN BY A REMOTE JOB ENTRY (RJE) AT MIAMI AFTER ALL -C TROPICAL CYCLONE FIXES ARE ESTABLISHED FOR THE ATLANTIC -C AND EAST PACIFIC BY NHC(TPC). THIS FILE IS TYPICALLY -C UPDATED (cat'ed) AT 0230, 0830, 1430, AND 2030 UTC -C (I.E. 2.5 HOURS AFTER SYNOPTIC TIME), 4 TIMES DAILY. -C RECORDS APPROPRIATE TO A FUTURE CYCLE ARE WRITTEN BACK -C TO THE APPROPRIATE FILE. -C -C OUTPUT FILES: -C (Note: These need to be double checked) -C UNIT 06 - STANDARD OUTPUT PRINT -C UNIT 20 - SCRATCH FILE CONTAINING PRELIMINARY Q/C RECORDS -C UNIT 21 - SHORT-TERM HISTORY, RECORDS BACK 4 DAYS FROM PRESENT -C UNIT 22 - NEW ALIAS FILE CONTAINING EQUIVALENT STORM IDS -C FOR STORMS THAT HAVE BEEN REPORTED BY MULTIPLE RSMC'S -C UNIT 27 - STORM CATALOG FILE CONTAINING STORM NAME, ALIAS INFO -C FIRST AND LAST DATA OBSERVED -C UNIT 28 - SCRATCH FILE CONTAINING TEMPORARY CATALOG -C UNIT 30 - SEE INPUT FILES ABOVE. RECORDS APPROPRIATE TO A FUTURE -C etc. CYCLE ARE WRITTEN BACK TO THE APPROPRIATE FILE -C UNIT 54 - RUN DATE FILE FOR DATE CHECK ('YYYYMMDDHH') -C UNIT 60 - FILE CONTAINING QUALITY CONTROLLED RECORDS -C UNIT 61 - CONTAINS HISTORY OF ALL RECORDS THAT ARE OPERATED ON BY -C THIS PROGRAM -C -C SUBPROGRAMS CALLED: -C UNIQUE: - RSMCCK BASNCK AKASUB TCCLIM RCNCIL -C MNMXDA SCLIST AKLIST STCATI STCATN -C ADFSTF FSTSTM RITCUR RITSTH RITHIS -C FNLCPY CPYREC DUPCHK BLNKCK READCK -C DTCHK SETMSK STIDCK FIXDUP FIXNAM -C SECVCK WRNING F1 F2 SLDATE -C FIXSLM GAULAT BSSLZ1 TRKSUB NEWVIT -C DECVAR TIMSUB YTIME SORTRL DS2UV -C ATAN2D SIND COSD DISTSP AVGSUB -C ABORT1 OFILE0 -C LIBRARY: -C COMMON - IARGC GETARG INDEX -C W3LIB - W3TAGB W3TAGE W3DIFDAT W3MOVDAT W3UTCDAT -C - ERREXIT -C -C EXIT STATES: -C COND = 0 - SUCCESSFUL RUN. NO RECORDS WITH ERRORS -C = 1 - SUCCESSFUL RUN. FOUND RECORDS WITH STORM ID>=80 -C CHG. TESTID -C = 2 - SUCCESSFUL RUN. FOUND RECORDS WITH ERRORS -C = 3 - BOTH 1 AND 2 ABOVE -C = 4 - SUCCESSFUL RUN, BUT NO INPUT RECORDS FOUND -C = 5 - PROGRAM HAS BEEN RUN PREVIOUSLY -C =10 - LOGICAL INCONSISTENCY IN SUBROUTINE RCNCIL (??) -C =20 - FATAL ERROR (SEE STDOUT PRINT FOR MORE DETAILS) -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - PROGRAM SYNDAT_QCTROPCY - - PARAMETER (MAXCHR=95) - PARAMETER (MAXREC=1000) - PARAMETER (MAXCKS=8) - PARAMETER (MAXRC=MAXREC*(MAXCKS+1)) - PARAMETER (MAXTBP=20) - PARAMETER (MAXFIL=99) - PARAMETER (IVSBMX=14,IVSBM1=IVSBMX+1) - - CHARACTER FILNAM*128 - - DIMENSION FILNAM(0:MAXFIL) - - CHARACTER TSTREC(0:MAXREC)*100,OKAREC(MAXREC)*100, - 1 BADREC(MAXREC)*100,DUMREC*100,SCRREC(0:MAXREC)*9, - 2 XXXREC*27,ZZZREC*100,NNNREC*100,TBPREC(MAXTBP)*100, - 3 SCRATC(MAXREC)*100 - - DIMENSION IEFAIL(MAXREC,0:MAXCKS),NUMOKA(MAXREC),NUMBAD(MAXREC), - 1 NUMTST(MAXREC),NUMTBP(MAXTBP),IDUPID(MAXREC), - 2 IUNTIN(MAXREC) - -C IUNTSL: UNIT NUMBER FOR READING T126 32-BIT SEA-LAND MASK -C ON GAUSSIAN GRID -C IUNTDT: UNIT NUMBER FOR READING RUN DATE ('YYYYMMDDHH') -C IUNTDC: UNIT NUMBER FOR RUN DATE ('YYYYMMDDHH') CHECK -C IUNTOK: UNIT NUMBER FOR PRELIMINARY QUALITY-CONTROLLED -C RECORDS. ***NOTE: AT THE END OF THIS PROGRAM, -C IUNTOK CONTAINS THE SHORT-TERM -C HISTORICAL RECORDS FOR THE NEXT -C INPUT TIME. -C IUNTAL: UNIT NUMBER FOR ALIAS FILE WHICH CONTAINS STORM IDS -C FOR STORMS THAT HAVE BEEN REPORTED BY MULTIPLE RSMC'S -C IUNTAN: UNIT NUMBER FOR NEW ALIAS FILE -C IUNTCA: UNIT NUMBER FOR STORM CATALOG FILE WHICH CONTAINS -C CURRENT LISTING OF ALL STORMS, THEIR NAMES, DATES -C IDS AND ALIASES -C IUNTCN: UNIT NUMBER FOR SCRATCH STORM CATALOG -C IUNTCU: UNIT NUMBER FOR FINAL QUALITY-CONTROLLED RECORDS -C (CURRENT FILE) -C IUNTHO: UNIT NUMBER FOR THE SHORT-TERM HISTORICAL (ORIGINAL) -C VITAL STATISTICS RECORDS. LENGTH OF HISTORY -C CONTROLLED BY WINMIN. THESE ARE ORIGINAL RECORDS AND -C NOT ALIASED RECORDS! -C IUNTHA: UNIT NUMBER FOR THE SHORT-TERM HISTORICAL (ALIAS) -C VITAL STATISTICS RECORDS. LENGTH OF HISTORY -C CONTROLLED BY WINMIN. THESE ARE ALIAS RECORDS IF -C MULTIPLE OBSERVERS FOR A GIVEN STORM ARE PRESENT! -C IUNTHL: UNIT NUMBER FOR THE LONG-TERM HISTORICAL (PREVIOUS) -C VITAL STATISTICS RECORDS. ALL RECORDS, AND QUALITY -C CONTROL FLAGS ARE PUT INTO THIS FILE. -C IUNTVI: UNIT NUMBER FOR RAW VITAL STATISTICS FILE (NEITHER -C QUALITY CONTROLLED NOR CHECKED FOR DUPLICATES) -C WINMIN: WINDOW FOR SHORT-TERM HISTORY FILE (FRACTIONAL DAYS) -C WINMX1: WINDOW FOR MAXIMUM ACCEPTABLE DATE (FRACTIONAL DAYS) -C FOR RECORD PROCESSING -C WINCUR: WINDOW FOR WRITING CURRENT FILE (FRACTIONAL DAYS) -C FILES: TRUE IF NEW SHORT-TERM HISTORY FILE IS CREATED AND -C ALL NEW RECORD FILES ARE ZEROED OUT -C LNDFIL: TRUE IF RECORDS OF STORMS OVER COASTAL POINTS ARE -C NOT COPIED TO THE FILE OF CURRENT QUALITY CONTROLLED -C RECORDS. - - DIMENSION RINC(5) - - DIMENSION IVSBRS(0:IVSBMX) - LOGICAL FILES,LNDFIL - CHARACTER RUNID*12 - - NAMELIST/INPUT/IDATEZ,IUTCZ,RUNID,FILES,LNDFIL,MAXUNT,WINMIN, - 1 NVSBRS,IVSBRS,WINCUR - - DATA IUNTSL/11/,IUNTDT/12/,IUNTDC/54/,IUNTOK/20/,IUNTHO/21/, - 1 IUNTVI/30/,MAXUNT/2/,IUNTCU/60/,IUNTHL/61/,WINMIN/4./, - 2 WINMX1/0.0833333/,IEFAIL/MAXRC*0/,LNDFIL/.TRUE./,IUNTOP/3/, - 3 IUNTHA/22/,IUNTAL/25/,IUNTAN/26/,NVSBRS/0/,IVSBRS/IVSBM1*0/, - 4 WINCUR/0.25/,FIVMIN/3.4722E-3/,FILES/.FALSE./,IUNTCA/27/, - 5 IUNTCN/28/,IUNTSN/14/ - DATA NNNREC/'12345678901234567890123456789012345678901234567890123 - 1456789012345678901234567890123456789012345*****'/ - DATA ZZZREC/'RSMC#SID#NAMEZZZZZ#YYYYMMDD#HHMM#LATZ#LONGZ#DIR#SPD#P - 1CEN#PENV#RMAX#VM#RMW#15NE#15SE#15SW#15NW#D*****'/ - DATA - 1 XXXREC/' FL BL RD DT LL ID MR SV DS'/ - - CALL W3TAGB('SYNDAT_QCTROPCY',2013,0053,0050,'NP22 ') - -C INITIALIZE SOME VARIABLES THAT MIGHT GET USED BEFORE GETTING SET -C UNDER CERTAIN CONDITIONS - IERCHK=0 - IERRCN=0 - NTBP=0 - -C OPEN FILES - - filnam(0)='fildef.vit' - CALL OFILE0(IUNTOP,MAXFIL,NFTOT,FILNAM) - -C READ RUN DATE AND CONVERT TO FLOATING POINT DATE. -C THE RUN DATE ACCEPTANCE WINDOW IS NOT SYMMETRIC ABOUT -C THE CURRENT RUN DATE - - READ(5,INPUT) - WRITE(6,INPUT) - -C GET CURRENT RUN DATE AND OFFSET IN SJL FORMAT -C OFFSET ROUNDED TO THE NEAREST HOUR FROM W3 CALLS - - IOFFTM = 0 - - IF(IDATEZ .LT. 0) THEN - CALL SLDATE(IUNTDC,IDATCK,IUTCCK,IOFFTM) - CALL SLDATE(IUNTDT,IDATEZ,IUTCZ,IOFFTM) - IF(FILES .AND. IDATCK .EQ. IDATEZ .AND. IUTCCK .EQ. IUTCZ) THEN - WRITE(6,1) FILES,IDATCK,IUTCCK - 1 FORMAT(/'######WITH FILES=',L2,' THIS PROGRAM HAS RUN PREVIOUSLY', - 1 ' FOR DATE,TIME=',I9,I5) - ISTOP=5 - GO TO 1000 - ENDIF - ENDIF - - CALL ZTIME(IDATEZ,IUTCZ,IYR,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,DAY0) - HROFF =IOFFTM*.01 - CYCOFF=(1.0+HROFF)/24. - IF(HROFF .GT. 24.) HROFF=-99.99 - - WRITE(6,2) IOFFTM,CYCOFF - 2 FORMAT(/'...OFFTIM,CYCOFF=',I12,F12.5) - -C THE MINIMUM WINDOW DETERMINES THE OLDEST RECORD THAT CAN -C BE PROCESSED BY QUALITY CONTROL. IT IS ALSO THE TIME COVERED -C BY THE SHORT-TERM HISTORICAL STORMS IN THE WORKING FILE. - -C THERE ARE TWO MAXIMUM WINDOWS: THE SHORT ONE (DAYMX1=2 HR) IS -C FOR PROCESSING RECORDS NO LATER THAN THE CYCLE TIME. THE -C LARGER ONE (DAYMX2) EXTENDS TO THE CURRENT TIME (THE TIME AT -C WHICH THIS PROGRAM IS RUN) PLUS 1 HOUR. RECORDS LATER THAN -C DAYMX1 BUT EARLIER THAN DAYMX2 WILL BE "THROWN BACK INTO -C THE POND" AND WILL BE PROCESSED AT THE NEXT CYCLE. - - DAYMIN=DAY0-WINMIN - DAYMX1=DAY0+WINMX1 - DAYMX2=DAY0+CYCOFF - DAYCUR=DAY0-WINCUR - DAYOFF=0.0 - - DAYMX1=DAYMX1+DAYOFF - - WRITE(6,3) WINMIN,WINMX1,DAYMIN,DAYMX1,DAYMX2 - 3 FORMAT(/'...WINMIN,WINMX1,DAYMIN,DAYMX1,DAYMX2=',/,4X,5F12.3) - - WRITE(6,5) IDATEZ,IUTCZ,DAY0,RUNID,LNDFIL,FILES - 5 FORMAT(20X,'***********************************************'/ - 1 20X,'***********************************************'/ - 2 20X,'**** WELCOME TO SYNDAT_QCTROPCY ****'/ - 3 20X,'**** Y2K/F90 VERSION - 17 MARCH 2013 ****'/ - 4 20X,'**** ****'/ - 5 20X,'**** VITAL STATISTICS RECORD CHECKER ****'/ - 6 20X,'**** FOR DATE=',I8,' UTC=',I4.4,10X,'****'/ - 7 20X,'**** JULIAN DAY=',F10.3,16X,'****'/ - 8 20X,'**** RUNID=',A12,' LNDFIL=',L1,' FILES=',L1,4X,'****'/ - 9 20X,'**** 1) INPUT RECORDS ARE CHECKED FOR ****'/ - O 20X,'**** EXACT DUPLICATES ****'/ - 1 20X,'**** 2) QUALITY CONTROL CHECKS. ****'/ - 2 20X,'**** FIRST: PRIMARY INFORMATION ****'/ - 3 20X,'**** (RECOVERY IS ESSENTIAL) ****'/ - 4 20X,'**** A) ALL COLUMNS ****'/ - 5 20X,'**** B) DATE/TIME ****'/ - 6 20X,'**** C) POSITION ****'/ - 7 20X,'**** SECOND: SECONDARY INFO. ****') - WRITE(6,6) - 6 FORMAT(20X,'**** (RECOVERY FROM PERSIS.) ****'/ - 1 20X,'**** D) DIRECTION/SPEED ****'/ - 2 20X,'**** E) RMAX, PENV, PCEN, STM DEPTH ****'/ - 3 20X,'**** THIRD: TERTIARY INFORMATION ****'/ - 4 20X,'**** (RECOVERY DESIRABLE) ****'/ - 5 20X,'**** F) VMAX, RMW ****'/ - 6 20X,'**** G) R15 NE, SE, SW, NW ****'/ - 7 20X,'**** ****'/ - 8 20X,'***********************************************'/ - 9 20X,'***********************************************'/) - - WRITE(6,7) IUNTSL,IUNTDT,IUNTSN,IUNTOK,IUNTCU,IUNTAL,IUNTAN, - 1 IUNTCA,IUNTCN,IUNTHO,IUNTHA,IUNTHL,IUNTVI - 7 FORMAT(20X,'I/O UNITS ARE:'/ - 1 22X,'SEA/LAND MASK =IUNTSL =',I3/ - 2 22X,'RUN DATE (YYYYMMDDHH) =IUNTDT =',I3/ - 3 22X,'STORM NAMES =IUNTSN =',I3/ - 4 22X,'PRELIMINARY Q/C RECORDS =IUNTOK =',I3/ - 5 22X,'FINAL Q/C RECORDS =IUNTCU =',I3/ - 6 22X,'STORM ID ALIAS =IUNTAL =',I3/ - 7 22X,'NEW STORM ID ALIAS =IUNTAN =',I3/ - 8 22X,'STORM CATALOG =IUNTCA =',I3/ - 9 22X,'SCRATCH STORM CATALOG =IUNTCN =',I3/ - O 22X,'SHORT TERM HIST. (ORIG.)=IUNTHO =',I3/ - 1 22X,'SHORT TERM HIST. (ALIAS)=IUNTHA =',I3/ - 2 22X,'LONG TERM HIST. =IUNTHL =',I3/ - 3 22X,'NEW RECORDS =IUNTVI>=',I3) - -C SET UP THE T126 32-BIT SEA-LAND MASK ON GAUSSIAN GRID -C NTEST,NOKAY,NBAD ARE ALL MEANINGLESS NUMBERS AT THIS POINT - - NTEST=1 - NOKAY=1 - NBAD =1 - CALL SETMSK(IUNTSL,NTEST,NOKAY,NBAD,IECOST,IEFAIL(1:MAXREC,4), - 1 NUMTST,NUMOKA,NUMBAD,ZZZREC,NNNREC,TSTREC,BADREC, - 2 OKAREC) - -C INITIAL CHECKS ARE FOR EXACT DUPLICATES AND BLANKS IN THE -C CORRECT SPOT - - NOKAY=0 - NBAD=0 - CALL DUPCHK(IUNTVI,MAXUNT,MAXREC,IERCHK,NTEST,IEFAIL(1:MAXREC,0), - 1 NUMTST,DUMREC,TSTREC,BADREC,*500) - -C SAVE THE INPUT UNIT NUMBERS FOR ALL RECORDS - - IUNTIN(1:NTEST)=IEFAIL(1:NTEST,0) -C - CALL BLNKCK(NTEST,NOKAY,NBAD,IEFAIL(1:MAXREC,1),NUMTST,NUMOKA, - 1 NUMBAD,ZZZREC,NNNREC,TSTREC,BADREC,OKAREC) - -C RELOAD THE TEST RECORDS - - NTEST=NOKAY - NUMTST(1:NOKAY)=NUMOKA(1:NOKAY) - TSTREC(1:NOKAY)=OKAREC(1:NOKAY) - NOKAY=0 - - CALL READCK(NTEST,NOKAY,NBAD,IEFAIL(1:MAXREC,2),NUMTST,NUMOKA, - 1 NUMBAD,ZZZREC,NNNREC,TSTREC,BADREC,OKAREC) - -C RELOAD THE TEST RECORDS AGAIN - - NTEST=NOKAY - NUMTST(1:NOKAY)=NUMOKA(1:NOKAY) - TSTREC(1:NOKAY)=OKAREC(1:NOKAY) - NOKAY=0 - NTBP=MAXTBP -C - CALL DTCHK(NTEST,NOKAY,NBAD,NTBP,IEFAIL(1:MAXREC,3),NUMTST,NUMOKA, - 1 NUMBAD,NUMTBP,DAYMIN,DAYMX1,DAYMX2,DAYOFF,TSTREC, - 2 BADREC,OKAREC,TBPREC) - -C ENCORE, UNE FOIS - - NTEST=NOKAY - NUMTST(1:NOKAY)=NUMOKA(1:NOKAY) - TSTREC(1:NOKAY)=OKAREC(1:NOKAY) - NOKAY=0 - - CALL LLCHK(IUNTSL,NTEST,NOKAY,NBAD,IEFAIL(1:MAXREC,4),NUMTST, - 1 NUMOKA,NUMBAD,ZZZREC,NNNREC,TSTREC,BADREC,OKAREC) - -C ONE MORE TIME (POUR CEUX QUI NE PARLE PAS FRANCAIS) - - NTEST=NOKAY - NUMTST(1:NOKAY)=NUMOKA(1:NOKAY) - TSTREC(1:NOKAY)=OKAREC(1:NOKAY) - NOKAY=0 - - CALL STIDCK(IUNTHO,IUNTSN,IUNTCA,NTEST,IYR,MAXREC,NOKAY,NBAD, - 1 IEFAIL(1:MAXREC,5),IDUPID,NUMTST,NUMOKA,NUMBAD,ZZZREC, - 2 NNNREC,TSTREC,BADREC,OKAREC,SCRATC) - - -C ***************************************************************** -C ***************************************************************** -C **** **** -C **** END OF THE FIRST PHASE OF ERROR CHECKING. FROM NOW **** -C **** ON, THE ORIGINAL RECORD SHORT-TERM HISTORY FILE IS **** -C **** CLOSED AND THE ALIAS SHORT-TERM HISTORY FILE IS OPEN. **** -C **** SOME INPUT RECORDS MAY BE CHANGED DUE TO SUBSTITUTION **** -C **** OF MISSING VALUES OR AVERAGING OF MULTIPLE STORM **** -C **** REPORTS. **** -C **** **** -C ***************************************************************** -C ***************************************************************** - -C MULTIPLE RSMC CHECK: SAME STORM REPORTED BY MORE THAN ONE -C TROPICAL CYCLONE WARNING CENTER. - -C CHECK FOR: -C 1) MULTIPLE STORM REPORTS BY DIFFERENT RSMC'S AT THE SAME TIME -C 2) TIME SERIES OF REPORTS ON THE SAME STORM BY DIFFERENT RSMC'S -C RECONCILE THE ABOVE: -C 1) ASSIGN A COMMON STORM ID -C 2) REMOVE MULTIPLE REPORTS IN FAVOR OF A SINGLE REPORT WITH THE -C COMMON STORM ID AND COMBINED (AVERAGED) PARAMETERS IF -C NECESSARY - -CCCC NTEST=NOKAY -CCCC WRITE(6,61) XXXREC -CCC61 FORMAT(///'...THE FOLLOWING ACCEPTABLE RECORDS ARE ELIGIBLE FOR ', -CCCC 1 'THE MULTIPLE RSMC CHECK.'/4X,'ERROR CODES ARE:'/21X, -CCCC 2 '=0: NO ERRORS OCCURRED'/21X,'<0: SUCCESSFUL ERROR ', -CCCC 3 'RECOVERY',55X,A/) - -CCCC DO NOK=1,NOKAY -CCCC NUMTST(NOK)=NUMOKA(NOK) -CCCC TSTREC(NOK)=OKAREC(NOK) -CCCC WRITE(6,67) NOK,OKAREC(NOK)(1:MAXCHR),(IEFAIL(NUMOKA(NOK),ICK), -CCCC 1 ICK=0,MAXCKS) - 67 FORMAT('...',I3,'...',A,'...',I2,8I3) -CCCC ENDDO -CCCC NOKAY=0 -CCCC REWIND IUNTOK - -c Stopgap measure is to not allow records to be written into -c the alias short-term history file (17 Sept. 1998) - NRCOVR=0 -CCCC CALL RSMCCK(IUNTHO,IUNTHA,IUNTAL,IUNTAN,IUNTCA,IUNTOK,NVSBRS, -CCCC 1 IVSBRS,MAXREC,NTEST,NOKAY,NBAD,NRCOVR, -CCCC 2 IEFAIL(1:MAXREC,6),NUMTST,NUMOKA,NUMBAD,IDUPID,TSTREC, -CCCC 3 BADREC,OKAREC,SCRATC) - -C COPY ALIAS SHORT-TERM HISTORY RECORDS FROM THE PRELIMINARY -C (SCRATCH) FILE TO THE ALIAS SHORT-TERM HISTORY FILE ONLY -C WHEN WE WISH TO UPDATE THE SHORT-TERM HISTORY FILE. - - IF(FILES) THEN - ICALL=1 - REWIND IUNTHA - WRITE(6,93) - 93 FORMAT(/'...THE FOLLOWING RECORDS WILL BE COPIED FROM THE ', - 1 'PRELIMINARY QUALITY CONTROLLED FILE TO THE ALIAS ', - 2 'SHORT-TERM HISTORICAL FILE:') - - CALL CPYREC(ICALL,IUNTOK,IUNTHA,NOKAY,DAYMIN,DUMREC,OKAREC) - ENDIF - -C BEGIN CHECKS FOR SECONDARY STORM INFORMATION WHICH INCLUDES: -C 1) DIRECTION, SPEED -C 2) PCEN, PENV, RMAX, STORM DEPTH -C THESE NUMBERS ARE NEEDED BY YOGI. IF MISSING, WE TRY TO -C FILL THEM IN BY PERSISTENCE. - -C FIRST, COPY HISTORICAL RECORDS TO THE PRELIMINARY QUALITY -C CONTROLLED FILE AND THEN COPY THE RECORDS FROM THE CURRENT FILE. - -C COPY HISTORICAL RECORDS TO PRELIMINARY FILE, CHECK FOR DUPLICATES - - REWIND IUNTOK - IF(FILES) THEN - ICALL=3 - WRITE(6,95) DAYMIN,ICALL - 95 FORMAT(/'...THE FOLLOWING RECORDS, HAVING DATES GREATER THAN ', - 1 'OR EQUAL TO DAY',F10.3,', WILL BE CHECKED FOR EXACT ', - 2 'AND PARTIAL DUPLICATES '/4X,'(ICALL=',I2,')', - 3 'AND COPIED FROM THE ALIAS SHORT-TERM HISTORICAL FILE ', - 4 'TO THE PRELIMINARY QUALITY CONTROLLED FILE WHICH NOW ', - 5 'WILL CONTAIN '/4X,'ALIAS RECORDS:'/) - - CALL CPYREC(ICALL,IUNTHA,IUNTOK,NOKAY,DAYMIN,DUMREC,OKAREC) - - ELSE - WRITE(6,97) - 97 FORMAT(/'...THE FOLLOWING RECORDS WILL BE COPIED FROM THE ', - 1 'SCRATCH ARRAY TO THE PRELIMINARY QUALITY CONTROLLED ', - 2 'FILE:') - DO NRC=1,NRCOVR - WRITE(6,105) SCRATC(NRC) - 105 FORMAT(' ...',A,'...') - WRITE(IUNTOK,107) SCRATC(NRC) - 107 FORMAT(A) - ENDDO - ENDIF - -C OH NO, NOT AGAIN!!! - - NTEST=NOKAY - write(6,1011) ntest - 1011 format(/'***debug ntest=nokay=',i4/) - WRITE(6,111) - 111 FORMAT(/'...IN PREPARATION FOR SECONDARY VARIABLE CHECKING, THE ', - 1 'FOLLOWING ACCEPTABLE RECORDS WILL BE '/4X,'ADDED TO THE', - 2 ' PRELIMINARY,QUALITY CONTROLLED FILE:'/) - DO NOK=1,NOKAY - NUMTST(NOK)=NUMOKA(NOK) - TSTREC(NOK)=OKAREC(NOK) - WRITE(6,113) NOK,NUMOKA(NOK),OKAREC(NOK) - 113 FORMAT(' ...',I4,'...',I4,'...',A) - WRITE(IUNTOK,119) OKAREC(NOK) - 119 FORMAT(A) - ENDDO - - NOKAY=0 - CALL SECVCK(IUNTOK,NTEST,NOKAY,NBAD,NUMTST,NUMOKA,NUMBAD,DAY0, - 1 DAYMIN,DAYMX1,DAYOFF,IEFAIL(1:MAXREC,7),ZZZREC,NNNREC, - 2 SCRREC,TSTREC,BADREC,OKAREC) - -C COPY HISTORICAL RECORDS TO PRELIMINARY FILE, CHECK FOR DUPLICATES - - REWIND IUNTOK - IF(FILES) THEN - ICALL=3 - WRITE(6,95) DAYMIN,ICALL - CALL CPYREC(ICALL,IUNTHA,IUNTOK,NOKAY,DAYMIN,DUMREC,OKAREC) - - ELSE - WRITE(6,97) - DO NRC=1,NRCOVR - WRITE(6,105) SCRATC(NRC) - WRITE(IUNTOK,107) SCRATC(NRC) - ENDDO - ENDIF - - NTEST=NOKAY - WRITE(6,201) - 201 FORMAT(//'...THE FOLLOWING ACCEPTABLE RECORDS WILL BE ADDED TO ', - 1 'THE PRELIMINARY QUALITY CONTROLLED FILE '/4X,'IN ', - 2 'PREPARATION FOR DIRECTION/SPEED CHECKING.'/) - DO NOK=1,NOKAY - NUMTST(NOK)=NUMOKA(NOK) - TSTREC(NOK)=OKAREC(NOK) - WRITE(6,203) NOK,OKAREC(NOK) - 203 FORMAT(' ...',I4,'...',A) - WRITE(IUNTOK,207) OKAREC(NOK) - 207 FORMAT(A) - ENDDO - - NOKAY=0 - -C SEA/LAND MASK CHECK - - CALL SELACK(NTEST,NOKAY,NBAD,IECOST,IEFAIL(1:MAXREC,4),NUMTST, - 1 NUMOKA,NUMBAD,LNDFIL,ZZZREC,NNNREC,TSTREC,BADREC, - 2 OKAREC) - - WRITE(6,301) XXXREC - 301 FORMAT(/'...THE SECONDARY VARIABLE, DIR/SPD AND SEA/LAND ', - 1 'CHECKING HAVE CONCLUDED. ERROR CHECKING HAS ENDED.'/4X, - 2 'OKAY RECORDS AND ERROR CODES ARE:',69X,A/) - - DO NOK=1,NOKAY - WRITE(6,67) NOK,OKAREC(NOK)(1:MAXCHR),IEFAIL(NUMOKA(NOK),0), - 1 (-IABS(IEFAIL(NUMOKA(NOK),ICK)), - 1 ICK=1,MAXCKS) - ENDDO - - WRITE(6,311) XXXREC - 311 FORMAT(/'...BAD RECORDS AND ERROR CODES ARE:',71X,A/) - - DO NBA=1,NBAD - WRITE(6,67) NBA,BADREC(NBA)(1:MAXCHR),IEFAIL(NUMBAD(NBA),0), - 1 (IEFAIL(NUMBAD(NBA),ICK),ICK=1,MAXCKS) - - ENDDO - -C RECONCILE THE STORM IDS WITH THE STORM CATALOG - -C LET'S PRETEND WE'RE NOT GOING TO DO IT, BUT DO IT ANYWAY - - NTEST=NOKAY+NBAD - WRITE(6,401) XXXREC - 401 FORMAT(///'...THE FOLLOWING ACCEPTABLE RECORDS WILL BE ', - 1 'RECONCILED WITH THE STORM CATALOG.'/4X,'ERROR CODES ', - 2 'ARE:'/21X,'=0: NO ERRORS OCCURRED'/21X,'<0: ', - 3 'SUCCESSFUL ERROR RECOVERY',56X,A/) - - DO NOK=1,NOKAY - NUMTST(NOK)=NUMOKA(NOK) - TSTREC(NOK)=OKAREC(NOK) - WRITE(6,67) NOK,OKAREC(NOK)(1:MAXCHR),IEFAIL(NUMOKA(NOK),0), - 1 (IEFAIL(NUMOKA(NOK),ICK),ICK=1,MAXCKS) - ENDDO - WRITE(6,411) XXXREC - 411 FORMAT(//'...THE FOLLOWING BAD RECORDS WILL BE RECONCILED WITH ', - 1 'THE STORM CATALOG FOR OVERLAND OR OVERLAPPING STORM ', - 2 'CASES.'/4X,'ERROR CODES ARE:'/21X,'>0: ERROR FOUND',70X, - 3 A/) - DO NBA=1,NBAD - NUMTST(NOKAY+NBA)=NUMBAD(NBA) - TSTREC(NOKAY+NBA)=BADREC(NBA) - IF(IEFAIL(NUMBAD(NBA),4) .EQ. 5 .OR. - 1 IEFAIL(NUMBAD(NBA),4) .EQ. 6 .OR. - 2 IEFAIL(NUMBAD(NBA),6) .EQ. 22) THEN - WRITE(6,67) NBA+NOKAY,BADREC(NBA)(1:MAXCHR),IEFAIL(NUMBAD(NBA),0), - 1 (IEFAIL(NUMBAD(NBA),ICK),ICK=1,MAXCKS) - ENDIF - ENDDO - - call rcncil(iuntca,iuntcn,iuntal,ntest,nokay,nbad,maxrec,maxcks, - 1 iefail,ierrcn,idupid,numtst,numoka,numbad,tstrec, - 2 badrec,okarec) - -C CLEAR OUT THE TEMPORARY ALIAS FILE; AKAVIT IS IN ITS FINAL FORM. - - REWIND IUNTAN - END FILE IUNTAN - -C ERROR CHECKING HAS FINALLY ENDED - - 500 WRITE(6,501) XXXREC - 501 FORMAT(//'...THE FINAL ERROR CHECKING HAS ENDED. BAD RECORDS ', - 1 'AND ERROR CODES ARE:',36X,A/) - ISTP90=0 - ISTPBR=0 - DO NBA=1,NBAD - DO NCK=1,MAXCKS - -C SELECT APPROPRIATE CONDITION CODE FOR STOP - - IF(IEFAIL(NUMBAD(NBA),NCK) .EQ. 2 .AND. NCK .EQ. 5) THEN - ISTP90=1 - ELSE IF(IEFAIL(NUMBAD(NBA),NCK) .NE. 0) THEN - ISTPBR=2 - ENDIF - ENDDO - - WRITE(6,543) NBA,BADREC(NBA)(1:MAXCHR),(IEFAIL(NUMBAD(NBA),ICK), - 1 ICK=0,MAXCKS) - 543 FORMAT(' ...',I3,'...',A,'...',I2,8I3) - ENDDO - ISTOP=ISTP90+ISTPBR - IF(IERCHK .EQ. 161) ISTOP=04 - IF(IERRCN .NE. 0) ISTOP=10 - WRITE(6,551) ISTP90,ISTPBR,IERRCN,ISTOP - 551 FORMAT(/'...STOP CODES ARE: ISTP90,ISTPBR,IERRCN,ISTOP=',4I3) - -C ADD FIRST OCCURRENCE FLAGS BY CHECKING THE SHORT-TERM HISTORY -C FILE - - CALL ADFSTF(IUNTHA,NOKAY,NBAD,MAXREC,MAXCKS,IECOST,NUMBAD,IEFAIL, - 1 DUMREC,OKAREC,BADREC) - -C WRITE THE RESULTS OF THE Q/C PROGRAM TO A LONG-TERM HISTORICAL -C FILE - - NRTOT=NOKAY+NBAD - CALL RITHIS(-IUNTHL,IEFAIL,NRTOT,IDATEZ,IUTCZ,NUMOKA,NOKAY,MAXREC, - 1 MAXCKS,HROFF,WINCUR,RUNID,LNDFIL,FILES,OKAREC,ZZZREC, - 2 XXXREC) - CALL RITHIS(IUNTHL,IEFAIL,NRTOT,IDATEZ,IUTCZ,NUMBAD,NBAD,MAXREC, - 1 MAXCKS,HROFF,WINCUR,RUNID,LNDFIL,FILES,BADREC,ZZZREC, - 2 ZZZREC) - -C UPDATE THE SHORT-TERM HISTORY FILES. -C **** IMPORTANT NOTE: ALL INFORMATION FROM TSTREC,OKAREC,BADREC, -C NUMTST,NUMOKA,NUMBAD WILL BE LOST **** -C **** PRENEZ GARDE **** - - IF(FILES) THEN - CALL RITSTH(IUNTHA,IUNTHO,IUNTOK,NOKAY,NBAD,DAYMIN,IECOST,MAXCKS, - 1 MAXREC,NUMBAD,IEFAIL,DUMREC,OKAREC,BADREC) - - CALL FNLCPY(IUNTVI,MAXUNT,IUNTOK,IUNTHA,MAXREC,NTBP,NUMTBP,IUNTIN, - 1 TBPREC,DUMREC) - NTEST=0 - NOKAY=0 - IUNTRD=IUNTOK - -C NOPE: SORRY, ONE LAST TIME, BUT ONLY FOR FILES=.FALSE. - - ELSE - NTEST=NOKAY - IUNTRD=IUNTHA - NUMTST(1:NOKAY)=NUMOKA(1:NOKAY) - TSTREC(1:NOKAY)=OKAREC(1:NOKAY) - NOKAY=0 - - ENDIF - -C WRITE THE FILE CONTAINING ALL CURRENT QUALITY CONTROLLED RECORDS - - CALL YTIME(IYR,DAYCUR+FIVMIN,IDATCU,JUTCCU) - CALL RITCUR(IUNTRD,IUNTCU,NTEST,NOKAY,NBAD,IDATCU,JUTCCU,DAYCUR, - 1 MAXREC,IEFAIL(1:MAXREC,4),NUMTST,NUMOKA,NUMBAD,FILES, - 2 LNDFIL,ZZZREC,NNNREC,DUMREC,SCRREC,TSTREC,OKAREC, - 3 BADREC) - -C CLEAN OUT THE SCRATCH FILE - - REWIND IUNTOK - END FILE IUNTOK - - 1000 CONTINUE - IF(FILES) CALL SLDTCK(IUNTDC) - - WRITE(6,1115) - 1115 FORMAT(////20X,'*******************************************' - 1 /20X,'*******************************************' - 2 /20X,'**** ****' - 3 /20X,'**** SUCCESSFUL COMPLETION OF ****' - 4 /20X,'**** SYNDAT_QCTROPCY ****' - 5 /20X,'**** ****' - 6 /20X,'*******************************************' - 7 /20X,'*******************************************') - - CALL W3TAGE('SYNDAT_QCTROPCY') - -ccccc IF(ISTOP .EQ. 0) THEN - STOP -ccccc ELSE IF(ISTOP .EQ. 1) THEN -ccccc call ERREXIT (1) -ccccc ELSE IF(ISTOP .EQ. 2) THEN -ccccc call ERREXIT (2) -ccccc ELSE IF(ISTOP .EQ. 3) THEN -ccccc call ERREXIT (3) -ccccc ELSE IF(ISTOP .EQ. 04) THEN -ccccc call ERREXIT (4) -ccccc ELSE IF(ISTOP .EQ. 05) THEN -ccccc call ERREXIT (5) -ccccc ELSE IF(ISTOP .EQ. 10) THEN -ccccc call ERREXIT (10) -ccccc ENDIF - - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: RSMCCK CHECKS FOR MULTIPLE STORM REPORTS -C PRGMMR: S. LORD ORG: NP22 DATE: 1992-02-19 -C -C ABSTRACT: INPUT RECORDS ARE CHECKED FOR MULTIPLE REPORTS ON THE SAME -C STORM FROM DIFFERENT RSMC'S. THE FOLLOWING ACTIONS ARE -C TAKEN: -C 1) MULTIPLE STORM REPORTS BY DIFFERENT RSMC'S AT THE SAME -C TIME ARE REMOVED -C 2) TIME SERIES OF REPORTS ON THE SAME STORM BY DIFFERENT -C RSMC'S ARE DISCOVERED -C TO RECONCILE THE ABOVE: -C 1) A COMMON STORM ID IS ASSIGNED -C 2) MULTIPLE REPORTS ARE REMOVED IN FAVOR OF A SINGLE -C REPORT WITH THE COMMON STORM ID AND COMBINED -C (AVERAGED) PARAMETERS IF NECESSARY -C -C PROGRAM HISTORY LOG: -C 1992-02-19 S. LORD -C 1992-07-16 S. LORD FIXED SOME BUGS (390); ADDED RETURN CODE 2. -C 1993-03-09 S. LORD ADDED CODE FOR COMPATIBILITY WITH RCNCIL -C 2013-10-10 D. C. STOKES - ADDED NON-HYPHNATED CARDINAL NUMBER NAMES -C ALSO EXTENDED THAT LIST (FROM 36 TO 39). -C -C USAGE: CALL RSMCCK(IUNTHO,IUNTHA,IUNTAL,IUNTAN,IUNTOK,NVSBRS,IVSBRS, -C MAXOVR,NTEST,NOKAY,NBAD,NRCOVR,IFRSMC,NUMTST, -C NUMOKA,NUMBAD,IOVRLP,TSTREC,BADREC,OKAREC,OVRREC) -C INPUT ARGUMENT LIST: -C IUNTHO - UNIT NUMBER FOR SHORT-TERM HISTORY FILE OF ORIGINAL -C - RECORDS. -C IUNTHA - UNIT NUMBER FOR SHORT-TERM HISTORY FILE OF ALIASED -C - RECORDS. -C IUNTAL - UNIT NUMBER FOR ALIAS FILE. -C IUNTAN - UNIT NUMBER FOR NEW ALIAS FILE. -C IUNTOK - UNIT NUMBER FOR SCRATCH FILE. -C NVSBRS - NUMBER OF ALLOWABLE VARIABLES FOR SUBSTITUTION. -C IVSBRS - INDEX OF ALLOWABLE VARIABLES FOR SUBSTITUTION. -C MAXOVR - DIMENSION FOR SCRATCH SPACE. -C NTEST - NUMBER OF CURRENT RECORDS TO BE TESTED. -C NUMTST - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH RECORD -C - TO BE TESTED. -C IOVRLP - SCRATCH ARRAY. -C TSTREC - CHARACTER ARRAY CONTAINING RECORDS TO BE TESTED. -C -C OUTPUT ARGUMENT LIST: -C NOKAY - NUMBER OF RECORDS THAT PASSED THE RSMC CHECK. -C NBAD - NUMBER OF RECORDS THAT FAILED THE RSMC CHECK. -C NRCOVR - NUBER OF RECORDS RETURNED IN OVRREC. THESE CONTAIN -C - UPDATED ALIAS SHORT-TERM HISTORY RECORDS FOR USE WHEN -C - FILES=F. -C IFRSMC - INTEGER ARRAY CONTAINING ERROR CODE FOR EACH INPUT -C - RECORD. SEE COMMENTS IN PGM FOR KEY TO ERROR CODES. -C NUMOKA - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH GOOD -C - RECORD. -C NUMBAD - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH BAD -C - RECORD. -C BADREC - CHARACTER ARRAY CONTAINING BAD RECORDS THAT FAILED -C - THE RSMC CHECK. -C OKAREC - CHARACTER ARRAY CONTAINING ALL RECORDS THAT PASSED -C - THE RSMC CHECK. -C OVRREC - CHARACTER ARRAY CONTAINING UPDATED ALIAS SHORT-TERM -C - HISTORY RECORDS. -C -C INPUT FILES: -C UNIT 20 - SCRATCH FILE CONTAINING SHORT-TERM HISTORY RECORDS -C UNIT 21 - ORIGINAL SHORT-TERM HISTORY FILE CONTAINING RECORDS -C PROCESSED BY THIS PROGRAM FOR THE LAST SEVERAL DAYS. -C IN THIS FILE, THE ORIGINAL RSMC AND STORM ID ARE KEPT. -C UNIT 22 - ALIAS SHORT-TERM HISTORY FILE CONTAINING RECORDS -C PROCESSED BY THIS PROGRAM FOR THE LAST SEVERAL DAYS. -C IN THIS FILE, THE RSMC AND STORM ID HAVE BEEN UNIFIED. -C UNIT 25 - ALIAS FILE CONTAINING EQUIVALENT STORM IDS -C - FOR STORMS THAT HAVE BEEN REPORTED BY MULTIPLE RSMC'S -C - DCB: LRECL=255, BLKSIZE=23400, RECFM=VB -C UNIT 26 - NEW ALIAS FILE CONTAINING EQUIVALENT STORM IDS -C - FOR STORMS THAT HAVE BEEN REPORTED BY MULTIPLE RSMC'S -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C UNIT 20 - SCRATCH FILE CONTAINING SHORT-TERM HISTORY RECORDS -C UNIT 25 - ALIAS FILE CONTAINING EQUIVALENT STORM IDS -C - FOR STORMS THAT HAVE BEEN REPORTED BY MULTIPLE RSMC'S -C - DCB: LRECL=255, BLKSIZE=23400, RECFM=VB -C UNIT 26 - NEW ALIAS FILE CONTAINING EQUIVALENT STORM IDS -C - FOR STORMS THAT HAVE BEEN REPORTED BY MULTIPLE RSMC'S -C - NOTE: UCL SHOULD COPY THIS FILE TO FT22F001 (THE OLD -C - ALIAS FILE) AT THE END OF EXECUTION. -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE RSMCCK(IUNTHO,IUNTHA,IUNTAL,IUNTAN,IUNTCA,IUNTOK, - 1 NVSBRS,IVSBRS,MAXOVR,NTEST,NOKAY,NBAD,NRCOVR, - 2 IFRSMC,NUMTST,NUMOKA,NUMBAD,IOVRLP,TSTREC, - 3 BADREC,OKAREC,OVRREC) - - PARAMETER (NERCRS=10) - PARAMETER (MAXSTM=70) - PARAMETER (NOVRMX=MAXSTM) - PARAMETER (NADDMX=10) - PARAMETER (MAXREC=1000) - - SAVE - - CHARACTER*(*) TSTREC(0:NTEST),BADREC(MAXREC),OKAREC(NTEST), - 1 ERCRS(NERCRS)*60,OVRREC(MAXOVR) - CHARACTER*100 DUMY2K - - PARAMETER (MAXCHR=95) - PARAMETER (MAXVIT=15) - PARAMETER (NBASIN=11) - PARAMETER (NRSMCX=4) - PARAMETER (NRSMCW=2) - PARAMETER (NCRDMX=57) - - CHARACTER BUFIN*1,RSMCZ*4,STMIDZ*3,STMNMZ*9,FSTFLZ*1,STMDPZ*1, - 1 LATNS*1,LONEW*1,FMTVIT*6,BUFINZ*100,RELOCZ*1,NAMVAR*5, - 2 IDBASN*1,NABASN*16,RSMCID*4,RSMCAP*1,CARDNM*9 - - DIMENSION IVTVAR(MAXVIT),VITVAR(MAXVIT),VITFAC(MAXVIT), - 1 ISTVAR(MAXVIT),IENVAR(MAXVIT) - - DIMENSION NAMVAR(MAXVIT+1),IDBASN(NBASIN),NABASN(NBASIN), - 1 BUFIN(MAXCHR),FMTVIT(MAXVIT), - 2 RSMCID(NRSMCX),RSMCAP(NRSMCX),RSMCPR(NBASIN), - 3 RSMCWT(NRSMCW),CARDNM(NCRDMX) - - EQUIVALENCE (BUFIN(1),RSMCZ),(BUFIN(5),RELOCZ),(BUFIN(6),STMIDZ), - 1 (BUFIN(10),STMNMZ),(BUFIN(19),FSTFLZ), - 2 (BUFIN(37),LATNS),(BUFIN(43),LONEW), - 3 (BUFIN(95),STMDPZ),(BUFIN(1),BUFINZ) - - EQUIVALENCE (IVTVAR(1),IDATEZ),(IVTVAR(2),IUTCZ) - - EQUIVALENCE (VITVAR( 3),STMLTZ),(VITVAR( 4),STMLNZ), - 1 (VITVAR( 5),STMDRZ),(VITVAR( 6),STMSPZ), - 2 (VITVAR( 7),PCENZ), (VITVAR( 8),PENVZ), - 3 (VITVAR( 9),RMAXZ) - - CHARACTER STMNAM*9,STMID*3,RSMC*4 - - DIMENSION STMNAM(MAXSTM),STMLAT(MAXSTM),STMLON(MAXSTM), - 1 IDATE(MAXSTM),IUTC(MAXSTM),RMAX(MAXSTM),PENV(MAXSTM), - 2 PCEN(MAXSTM),RSMC(MAXSTM),STMID(MAXSTM) - - DIMENSION IFRSMC(MAXREC),NUMOKA(NTEST),NUMBAD(MAXREC), - 1 NUMTST(NTEST),IOVRLP(MAXOVR),IVSBRS(0:NVSBRS) - - DIMENSION IVTVRX(MAXVIT),VITVRX(MAXVIT) - - DIMENSION IPRIOR(NOVRMX),AVWT(NOVRMX),RSMCAL(NOVRMX), - 1 STIDAL(NOVRMX),STNMAD(NOVRMX),IRSMC(4),SRTDAY(NOVRMX), - 2 IDASRT(NOVRMX),INDSAM(NOVRMX),DAYZAD(NADDMX), - 3 RSMCOV(NOVRMX),STIDOV(NOVRMX), - 4 RSMCAD(NADDMX),STIDAD(NADDMX) - - DIMENSION RINC(5) - - CHARACTER BUFCK(MAXCHR)*1,RSMCX*4,RELOCX*1,STMIDX*3,BUFINX*100, - 1 STMNMX*9,LATNSX*1,LONEWX*1,BSCOFL*2,RPCOFL*2,STNMAL*9, - 2 RSMCAL*4,STIDAL*3,STNMAD*9,RSMCOV*4,STIDOV*3,STNMOV*9, - 3 STIDAD*3,RSMCAD*4,STHCH*21 - - LOGICAL OSTHFL - - EQUIVALENCE (BUFCK(1),RSMCX),(BUFCK(5),RELOCX),(BUFCK(6),STMIDX), - 1 (BUFCK(1),BUFINX),(BUFCK(10),STMNMX), - 2 (BUFCK(35),LATNSX),(BUFCK(41),LONEWX) - - EQUIVALENCE (IVTVRX(1),IDATEX),(IVTVRX(2),IUTCX), - 1 (VITVRX(3),STMLTX),(VITVRX(4),STMLNX), - 2 (VITVRX(5),STMDRX),(VITVRX(6),STMSPX), - 3 (VITVRX(7),PCENX), (VITVRX(8),PENVX), - 4 (VITVRX(9),RMAXX) - - DATA VITFAC/2*1.0,2*0.1,1.0,0.1,9*1.0/, - 1 FMTVIT/'(I8.8)','(I4.4)','(I3.3)','(I4.4)',2*'(I3.3)', - 2 3*'(I4.4)','(I2.2)','(I3.3)',4*'(I4.4)'/, - 3 ISTVAR/20,29,34,39,45,49,53,58,63,68,71,75,80,85,90/, - 4 IENVAR/27,32,36,42,47,51,56,61,66,69,73,78,83,88,93/ - - DATA IDBASN/'L','E','C','W','O','T','U','P','S','B','A'/ - - DATA NABASN/'ATLANTIC ','EAST PACIFIC ', - 1 'CENTRAL PACIFIC ','WEST PACIFIC ', - 2 'SOUTH CHINA SEA ','EAST CHINA SEA ', - 3 'AUSTRALIA ','SOUTH PACIFIC ', - 4 'SOUTH INDIAN OCN','BAY OF BENGAL ', - 5 'NRTH ARABIAN SEA'/ - - DATA RSMCID/'NHC ','JTWC','ADRM','JMA '/, - 1 RSMCAP/'N','W','A','J'/,RSMCPR/3*1,3*2,3,4*2/, - 2 RSMCWT/1.0,0.25/ - - DATA NAMVAR/'DATE ','TIME ','LAT. ','LONG.','DIR ','SPEED', - 1 'PCEN ','PENV ','RMAX ','VMAX ','RMW ','R15NE', - 2 'R15SE','R15SW','R15NW','DEPTH'/ - -C CARDINAL NUMBER STORM NAMES FOR UNNAMED ATLANTIC AND EAST PACIFIC -C STORMS - - DATA CARDNM/'ONE ','TWO ','THREE ', - 1 'FOUR ','FIVE ','SIX ', - 2 'SEVEN ','EIGHT ','NINE ', - 3 'TEN ','ELEVEN ','TWELVE ', - 4 'THIRTEEN ','FOURTEEN ','FIFTEEN ', - 5 'SIXTEEN ','SEVENTEEN','EIGHTEEN ', - 6 'NINETEEN ','TWENTY ','TWENTY-ON', - 7 'TWENTY-TW','TWENTY-TH','TWENTY-FO', - 8 'TWENTY-FI','TWENTY-SI','TWENTY-SE', - 9 'TWENTY-EI','TWENTY-NI','THIRTY ', - O 'THIRTY-ON','THIRTY-TW','THIRTY-TH', - 1 'THIRTY-FO','THIRTY-FI','THIRTY-SI', - 2 'THIRTY-SE','THIRTY-EI','THIRTY-NI', - 3 'TWENTYONE','TWENTYTWO','TWENTYTHR', - 4 'TWENTYFOU','TWENTYFIV','TWENTYSIX', - 5 'TWENTYSEV','TWENTYEIG','TWENTYNIN', - 6 'THIRTYONE','THIRTYTWO','THIRTYTHR', - 7 'THIRTYFOU','THIRTYFIV','THIRTYSIX', - 8 'THIRTYSEV','THIRTYEIG','THIRTYNIN'/ - -C BUFZON: BUFFER ZONE REQUIRED BY SYNTHETIC DATA PROGRAM (SYNDATA) -C DEGLAT: ONE DEGREE LATITUDE IN KM -C RMAXMN: MINIMUM ALLOWABLE VALUE OF RMAX -C DTOVR : MINIMUM WINDOWN (FRACTIONAL DAYS) FOR OVERLAPPING STORMS -C EXTRAPOLATED TO A COMMON TIME. -C IPRT : CONTROLS PRINTOUT IN SUBROUTINE BASNCK -C FACSPD: CONVERSION FACTOR FOR R(DEG LAT)=V(M/S)*T(FRAC DAY)* -C FACSPD - - DATA BUFZON/1.0/,DEGLAT/111.1775/,RMAXMN/100./,DTOVR/1.0/, - 1 IPRT/0/,FIVMIN/3.4722E-3/,FACSPD/0.77719/ - - DATA ERCRS - 1 /' 1: CANNOT RESOLVE: SAME RSMC REPORTED OVERLAPPING STORMS ', - 2 '10: RESOLVED: SAME RSMC REPORTED OVERLAPPING STORMS ', - 3 ' 2: CANNOT RESOLVE: DIFF. RSMCS REPORTED DIFF. OVERL. STMS.', - 4 '21: DIFFERENT RSMCS REPORTED SAME OVERLAPPING STORMS (CUR) ', - 5 '22: DIFFERENT RSMCS REPORTED SAME OVERLAPPING STORMS (OSTH)', - 6 '30: UNIFIED RECORD CREATED FOR SINGLY OBSERVED STORM ', - 7 ' 3: STORM IS NOT IN A BASIN DEFINED BY BASNCK ', - 8 ' 4: RSMC IS NOT AMONG LISTED CENTERS (NO ERROR RECOVERY) ', - 9 ' 5: DIFFERENT RSMCS REPORTED DIFFERENT OVERLAPPING STORMS ', - O ' 6: SINGLE RSMC HAS TWO STORM IDS FOR THE SAME STORM '/ - -C ERROR CODES FOR BAD RECORDS RETURNED IN IFRSMC ARE AS FOLLOWS: -C 1: CANNOT RESOLVE: SAME RSMC REPORTED OVERLAPPING STORMS -C 10: RESOLVED: SAME RSMC REPORTED OVERLAPPING STORMS -C 2: CANNOT RESOLVE: DIFF. RSMCS REPORTED DIFF. OVERL. STMS. -C 21: DIFFERENT RSMCS REPORTED SAME OVERLAPPING STORMS (CUR) -C 22: DIFFERENT RSMCS REPORTED SAME OVERLAPPING STORMS (OSTH) -C 30: UNIFIED RECORD CREATED FOR SINGLY OBSERVED STORM -C 3: STORM IS NOT IN A BASIN DEFINED BY BASNCK -C 4: RSMC IS NOT AMONG LISTED CENTERS (NO ERROR RECOVERY) -C 5: TWO DIFFERENT RSMCS REPORT DIFFERENT OVERLAPPING STORMS -C 6: SINGLE RSMC HAS TWO STORM IDS FOR THE SAME STORM - - WRITE(6,1) NTEST,NOKAY,NBAD - 1 FORMAT(//'...ENTERING RSMCCK, LOOKING FOR MULTIPLE STORM ', - 1 'REPORTS. NTEST,NOKAY,NBAD=',3I5/) - - CALL WRNING('RSMCCK') - WRITE(6,3) NVSBRS,(NAMVAR(IVSBRS(NV)),NV=1,NVSBRS) - 3 FORMAT(/'...NUMBER OF ALLOWABLE VARIABLES FOR SUBSTITUTION ', - 1 'IS:',I3,' VARIABLES ARE:'/4X,10(A,1X)) - - NADD=0 - NSUBR=0 - NUNIFY=0 - NALADD=0 - REWIND IUNTAN - OVRREC(1:NTEST)=' ' - IOVRLP(1:NTEST)=0 - IFRSMC(NUMTST(1:NTEST))=0 - -C FOR COMPLETE COTEMPORANEOUS CHECKS, WE MUST MAKE AVAILABLE THE -C ORIGINAL SHORT-TERM HISTORY RECORDS. WE STORE THEM AT THE END -C OF THE OVRREC ARRAY. - - REWIND IUNTHO - NRECHO=0 - WRITE(6,13) IUNTHO - 13 FORMAT(/'...READING FROM ORIGINAL SHORT-TERM HISTORY FILE ', - 1 '(UNIT',I3,') INTO SCRATCH SPACE: RECORD #, STORAGE ', - 2 'INDEX, RECORD=') - - 20 CONTINUE - - READ(IUNTHO,21,END=25) OVRREC(MAXOVR-NRECHO) - 21 FORMAT(A) - -C AT THIS POINT WE DO NOT KNOW IF A 2-DIGIT YEAR BEGINS IN COLUMN 20 -C OF THE RECORD (OLD NON-Y2K COMPLIANT FORM) OR IF A 4-DIGIT YEAR -C BEGINS IN COLUMN 20 (NEW Y2K COMPLIANT FORM) - TEST ON LOCATION OF -C LATITUDE N/S INDICATOR TO FIND OUT ... - - if(OVRREC(MAXOVR-NRECHO)(35:35).eq.'N' .or. - 1 OVRREC(MAXOVR-NRECHO)(35:35).eq.'S') then - -C ... THIS RECORD STILL CONTAINS THE OLD 2-DIGIT FORM OF THE YEAR - -C ... THIS PROGRAM WILL CONVERT THE RECORD TO A 4-DIGIT YEAR USING THE -C "WINDOWING" TECHNIQUE SINCE SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT *, '==> Read in RECORD from tcvitals file -- contains a', - $ ' 2-digit year "',OVRREC(MAXOVR-NRECHO)(20:21),'"' - PRINT *, ' ' - PRINT *, 'From unit ',iuntho,'; OVRREC(MAXOVR-NRECHO)-2: ', - $ OVRREC(MAXOVR-NRECHO) - PRINT *, ' ' - DUMY2K(1:19) = OVRREC(MAXOVR-NRECHO)(1:19) - IF(OVRREC(MAXOVR-NRECHO)(20:21).GT.'20') THEN - DUMY2K(20:21) = '19' - ELSE - DUMY2K(20:21) = '20' - ENDIF - DUMY2K(22:100) = OVRREC(MAXOVR-NRECHO)(20:100) - OVRREC(MAXOVR-NRECHO) = DUMY2K - PRINT *, ' ' - PRINT *, '==> 2-digit year converted to 4-digit year "', - $ OVRREC(MAXOVR-NRECHO)(20:23),'" via windowing technique' - PRINT *, ' ' - PRINT *, 'From unit ',iuntho,'; OVRREC(MAXOVR-NRECHO)-2: ', - $ OVRREC(MAXOVR-NRECHO) - PRINT *, ' ' - - ELSE IF(OVRREC(MAXOVR-NRECHO)(37:37).eq.'N' .OR. - 1 OVRREC(MAXOVR-NRECHO)(37:37).eq.'S') THEN - -C ... THIS RECORD CONTAINS THE NEW 4-DIGIT FORM OF THE YEAR -C ... NO CONVERSION NECESSARY SINCE THIS SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT '(a,a,a)', '==> Read in RECORD from tcvitals file -- ', - $ ' contains a 4-digit year "',OVRREC(MAXOVR-NRECHO)(20:23),'"' - PRINT *, ' ' - PRINT '(a,i,a,a)', - $ 'From unit ',iuntho,'; OVRREC(MAXOVR-NRECHO)-2: ', - $ OVRREC(MAXOVR-NRECHO) - PRINT *, ' ' - PRINT *, '==> No conversion necessary' - PRINT *, ' ' - - ELSE - - PRINT *, ' ' - PRINT *, '***** Cannot determine if this record contains ', - $ 'a 2-digit year or a 4-digit year - skip it and try reading ', - $ 'the next record' - PRINT *, ' ' - GO TO 20 - - END IF - - WRITE(6,23) NTEST+NRECHO+1,MAXOVR-NRECHO,OVRREC(MAXOVR-NRECHO) - 23 FORMAT(' ...',I4,'...',I4,'...',A) - NRECHO=NRECHO+1 - - IF(NRECHO .GE. MAXOVR-NTEST) THEN - WRITE(6,24) NRECHO,MAXOVR,NTEST - 24 FORMAT(/'******INSUFFICIENT SCRATCH SPACE TO STORE ORIGINAL ', - 1 'SHORT-TERM HISTORICAL RECORDS IN OVRREC. NRECHO,', - 2 'MAXOVR,NTEST=',3I3) - CALL ABORT1(' RSMCCK',24) - ENDIF - - GO TO 20 - 25 CONTINUE - WRITE(6,26) NRECHO - 26 FORMAT(' ...',I3,' RECORDS READ FROM ORIGINAL SHORT-TERM ', - 1 'HISTORY FILE.') - -C PART I: -C CHECK COTEMPORANEOUS RECORDS FOR STORMS WITHIN EACH OTHER'S RMAX - - WRITE(6,27) - 27 FORMAT(//'...BEGINNING RSMCCK PART I: COTEMPORANEOUS CHECKS FOR ', - 1 'OVERLAPPING STORMS.') - - DO NREC=1,NTEST - - IETYP=0 - IEROVR=0 - NOVRLP=1 - NRECSV=NREC - -C RECORDS THAT WERE PROCESSED AS COTEMPORANEOUS OVERLAPS PREVIOUSLY -C DO NOT GET FURTHER PROCESSING - - IF(IFRSMC(NUMTST(NREC)) .NE. 0) GO TO 400 - -C RECOVER DATE, UTC, LAT/LON AND RMAX - - BUFINZ=TSTREC(NREC) - - DO IV=1,MAX(9,IVSBRS(NVSBRS)) - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 TSTREC(NREC)) - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 BUFINZ) - ENDDO - - VITVAR(3:MAX(9,IVSBRS(NVSBRS)))= - $ REAL(IVTVAR(3:MAX(9,IVSBRS(NVSBRS))))* - $ VITFAC(3:MAX(9,IVSBRS(NVSBRS))) - IF(LATNS .EQ. 'S') STMLTZ=-STMLTZ - IF(LONEW .EQ. 'W') STMLNZ=360.-STMLNZ - -C STORE NEEDED VARIABLES FOR LATER REFERENCE - - STMNAM(1)=STMNMZ - STMID (1)=STMIDZ - RSMC (1)=RSMCZ - STMLAT(1)=STMLTZ - STMLON(1)=STMLNZ - RMAX (1)=RMAXZ - PCEN (1)=PCENZ - PENV (1)=PENVZ - IOVRLP(1)=NREC - OVRREC(1)=BUFINZ - CALL ZTIME(IDATEZ,IUTCZ,IYR,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,DAYZ) - - IF(RMAXZ .LT. 0.0) THEN - DO NBA=1,NBASIN - IF(STMIDZ(3:3) .EQ. IDBASN(NBA)) THEN - IBASN=NBA - GO TO 46 - ENDIF - ENDDO - 46 CONTINUE - RMAXZ=TCCLIM(9,IBASN) - WRITE(6,47) NREC,RMAXZ,NABASN(IBASN) - 47 FORMAT(' ###RMAXZ MISSING FOR COTEMPORANEOUS CHECK ON RECORD',I3, - 1 '.'/4X,'REPLACEMENT VALUE WILL BE A CLIMATOLOGICAL ', - 2 'GUESS OF ',F6.1,' KM FOR BASIN ',A,'.') - ENDIF - -C NOW COMPARE WITH ALL REMAINING STORM REPORTS THAT HAVE NOT BEEN -C MARKED OFF AS ERRONEOUS - - NRECHZ=-1 - DO NTST=NREC+1,NTEST+NRECHO - - IF(NTST .LE. NTEST .AND. IFRSMC(NUMTST(NTST)) .NE. 0) GO TO 100 - - IF(NTST .LE. NTEST) THEN - INDTST=NTST - BUFINX=TSTREC(NTST) - OSTHFL=.FALSE. - ELSE - NRECHZ=NRECHZ+1 - INDTST=MAXOVR-NRECHZ - BUFINX=OVRREC(INDTST) - OSTHFL=.TRUE. - ENDIF - - DO IV=1,MAX(9,IVSBRS(NVSBRS)) - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVRX(IV),IERDEC,FMTVIT(IV), - 1 BUFINX) - ENDDO - - VITVRX(3:MAX(9,IVSBRS(NVSBRS)))= - $ REAL(IVTVRX(3:MAX(9,IVSBRS(NVSBRS))))* - $ VITFAC(3:MAX(9,IVSBRS(NVSBRS))) - - IF(LATNSX .EQ. 'S') STMLTX=-STMLTX - IF(LONEWX .EQ. 'W') STMLNX=360.-STMLNX - -C COTEMPORANEOUS CHECK - - IF(IDATEX .EQ. IDATEZ .AND. IUTCX .EQ. IUTCZ) THEN - - RMAXSV=RMAXX - IF(RMAXX .LT. 0.0) THEN - DO NBA=1,NBASIN - IF(STMIDX(3:3) .EQ. IDBASN(NBA)) THEN - IBASN=NBA - GO TO 66 - ENDIF - ENDDO - 66 CONTINUE - RMAXX=TCCLIM(9,IBASN) - WRITE(6,75) NTST,RMAXX,NABASN(IBASN) - 75 FORMAT(' ###RMAXX MISSING FOR COTEMPORANEOUS CHECK ON RECORD',I3, - 1 '.'/4X,'REPLACEMENT VALUE WILL BE A CLIMATOLOGICAL ', - 2 'GUESS OF ',F6.1,' KM FOR BASIN ',A,'.') - ENDIF - - DISTZ=DISTSP(STMLTZ,STMLNZ,STMLTX,STMLNX)*1.E-3 - -C OVERLAP CHECK. BUFFER ZONE CORRESPONDS TO SYNDATA CONDITION - - IF(DISTZ .LE. RMAXZ+RMAXX+BUFZON*DEGLAT) THEN - -C IF THE MATCHING RECORD IS FROM THE SAME RSMC AND THE STORM -C ID IS THE SAME AND THE RECORD WAS IN THE ORIGINAL SHORT-TERM -C HISTORY FILE, WE ASSUME THE RECORD (NREC) IS AN UPDATE TO THE -C EARLIER RECORD. THE ERROR FLAG IS RESET TO INDICATE NO ERROR. - - IF(RSMCZ .EQ. RSMCX .AND. - 1 STMIDZ .EQ. STMIDX .AND. OSTHFL) THEN - WRITE(6,76) NREC,INDTST,NREC,BUFINZ,INDTST,BUFINX - 76 FORMAT(/'###RECORD IN ORIGINAL SHORT-TERM HISTORY FILE HAS ', - 1 'PROBABLY BEEN UPDATED . NREC,INDTST=',2I4, - 2 '. RECORDS ARE:'/2(4X,'...',I4,'...',A/)) - GO TO 100 - - ELSE - -C STORE NEEDED VARIABLES FOR LATER REFERENCE. DON'T USE THE -C CLIMATOLOGICAL VALUE! - - NOVRLP=NOVRLP+1 - IOVRLP(NOVRLP)=NTST - OVRREC(NOVRLP)=BUFINX - STMNAM(NOVRLP)=STMNMX - STMID (NOVRLP)=STMIDX - RSMC (NOVRLP)=RSMCX - STMLAT(NOVRLP)=STMLTX - STMLON(NOVRLP)=STMLNX - RMAX (NOVRLP)=RMAXSV - PCEN (NOVRLP)=PCENX - PENV (NOVRLP)=PENVX - - WRITE(6,77) DISTZ,NREC,NTST,INDTST,BUFINZ,BUFINX - 77 FORMAT(//'...TWO STORMS REPORTED AT THE SAME DATE/TIME WITHIN ', - 1 'THE OTHERS CIRCULATION. DISTZ,NREC,NTST,INDTST=',F7.1,2 - 2 I4,I5/2(4X,'...',A,'...'/)) - -C SAME OR DIFFERENT RSMC? - - IF(RSMCZ .EQ. RSMCX) THEN - IETYP=1 - ELSE - IETYP=2 - ENDIF - - IF(NOVRLP .EQ. 2) THEN - IEROVR=IETYP - - ELSE - IF(IETYP .NE. IEROVR) THEN - IOVRLP(NOVRLP)=-IABS(IOVRLP(NOVRLP)) - WRITE(6,71) NREC,NTST - 71 FORMAT(' ###WARNING: MULTIPLE OVERLAP TYPES FOR NREC=',I3/4X, - 1 'ERROR RECOVERY CURRENTLY WORKS ON A SINGLE OVERLAP TYPE ', - 2 'SO THIS RECORD=#',I3,' WILL BE AUTOMATICALLY DISCARDED.') - ENDIF - ENDIF - - ENDIF - ENDIF - ENDIF - 100 CONTINUE - ENDDO - IF(IETYP .EQ. 0) GO TO 390 - -C ERROR RECOVERY FOR PART I: - - WRITE(6,103) NREC,IEROVR,NOVRLP-1,(IOVRLP(NOVR),NOVR=2,NOVRLP) - 103 FORMAT(' ...SUMMARY OF OVERLAPS FOR NREC=',I3,'. OVERLAP ', - 1 'TYPE=',I3,' AND NUMBER OF OVERLAPS=',I3, - 2 ' OVERLAP INDICES ARE:'/4X,'(NEGATIVE OVERLAP ', - 3 'INDICES MEAN THAT THE OVERLAP TYPE DIFFERS FROM ', - 4 'THE PRIMARY ONE WHICH IS IEROVR)'/4X,10I3) - -C **************************************************** -C **************************************************** -C **** **** -C **** MULTIPLE REPORTS BY THE SAME INSTITUTION **** -C **** **** -C **************************************************** -C **************************************************** - - IF(IEROVR .EQ. 1) THEN - IVR=9 - WRITE(6,107) IETYP - 107 FORMAT(' ******STORMS ARE REPORTED BY THE SAME RSMC, WHICH ', - 1 'IS A LOGICAL ERROR. IETYP=',I2/4X,'WE PROCEED TO ', - 2 'RECOVER THIS ERROR BY REDUCING THE RMAX OF THE LARGEST ', - 3 'STORM SO THAT OVERLAP WILL NOT OCCUR.') - - IF(NOVRLP .GT. 2) WRITE(6,109) - 109 FORMAT(' ###WARNING, NOVRLP > 2 SO THAT PROCESSING WILL ', - 1 'OCCUR FOR ONLY THE LARGEST AND SMALLEST STORMS. ', - 2 'OTHERS WILL BE AUTOMATICALLY MARKED ERRONEOUS.') - -C PICK OUT THE LARGEST AND SMALLEST STORMS - - INDXZ=1 - INDXX=1 - RMAXZ=RMAX(1) - RMAXX=RMAX(1) - DO NOVR=2,NOVRLP - IF(IOVRLP(NOVR) .GT. 0) THEN - IF(RMAX(NOVR) .GT. RMAXZ) THEN - RMAXZ=RMAX(NOVR) - INDXZ=NOVR - ENDIF - IF(RMAX(NOVR) .LT. RMAXX) THEN - RMAXX=RMAX(NOVR) - INDXX=NOVR - ENDIF - ENDIF - ENDDO - - DISTZX=DISTSP(STMLAT(INDXZ),STMLON(INDXZ), - 1 STMLAT(INDXX),STMLON(INDXX))*1.E-3 - EXCESS=RMAXZ+RMAXX+BUFZON*DEGLAT-DISTZX - WRITE(6,121) INDXZ,INDXX,STMID(INDXZ),RMAXZ,STMID(INDXX),RMAXX, - 1 DISTZX,EXCESS - 121 FORMAT('...INDXZ,INDXX,STMID(INDXZ),RMAX(INDXZ),STMID(INDXX),', - 1 'RMAX(INDXX)=',2I3,2(1X,A,F7.1),' DISTZX,EXCESS=',2F9.1) - RMAXZT=RMAXZ-EXCESS - -C RECOVERY METHOD 1: SUBTRACT EXCESS FROM LARGEST RMAX BUT MAINTAIN -C RELATIVE SIZE - - IF(RMAXZT .GT. RMAXX) THEN - WRITE(OVRREC(INDXZ)(ISTVAR(IVR):IENVAR(IVR)),FMTVIT(IVR)) - 1 NINT(RMAXZT) - OVRREC(INDXZ)(ISTVAR(IVR)-1:ISTVAR(IVR)-1)='O' - OVRREC(INDXX)=TSTREC(IOVRLP(INDXX)) - WRITE(6,123) IOVRLP(INDXZ),RMAXZ,RMAXZT,INDXZ,OVRREC(INDXZ) - 123 FORMAT(' ###IMPORTANT NOTE: FOR RECORD',I3,' RMAXZ=',F7.1, - 1 ' WILL BE SUBSTITUTED BY RMAXZT=',F7.1,' FOR INDXZ=',I3, - 2 '. AFTER SUBSTITUTION, OVRREC='/4X,A) - IETYP=-10 - -C RECOVERY METHOD 2: SUBTRACT HALF THE EXCESS FROM EACH RMAX - - ELSE - WRITE(6,125) - 125 FORMAT('...UNABLE TO MAINTAIN RMAXZ>RMAXX. HALF THE ', - 1 'EXCESS WILL BE SUBTRACTED FROM EACH REPORT.') - RMAXZT=RMAXZ-0.5*EXCESS - RMAXXT=RMAXX-0.5*EXCESS - IF(RMAXZT .GE. RMAXMN .AND. RMAXXT .GE. RMAXMN) THEN - WRITE(OVRREC(INDXZ)(ISTVAR(IVR):IENVAR(IVR)),FMTVIT(IVR)) - 1 NINT(RMAXZT) - WRITE(OVRREC(INDXX)(ISTVAR(IVR):IENVAR(IVR)),FMTVIT(IVR)) - 1 NINT(RMAXXT) - OVRREC(INDXX)(ISTVAR(IVR)-1:ISTVAR(IVR)-1)='O' - WRITE(6,123) IOVRLP(INDXZ),RMAXZ,RMAXZT,INDXZ,OVRREC(INDXZ) - WRITE(6,127) IOVRLP(INDXX),RMAXX,RMAXXT,IOVRLP(INDXX), - 1 OVRREC(INDXX) - 127 FORMAT(' ###IMPORTANT NOTE: FOR RECORD',I3,' RMAXX=',F7.1, - 1 ' WILL BE SUBSTITUTED BY RMAXXT=',F7.1,' FOR INDXX=',I3, - 2 '. AFTER SUBSTITUTION, OVRREC='/4X,A) - IETYP=-10 - - ELSE - WRITE(6,129) RMAXZT,RMAXXT,RMAXMN - 129 FORMAT(' ******RMAXZ AND RMAXX REDUCTION METHODS HAVE FAILED. ', - 1 'RMAXZT,RMAXXT=',2F7.1,' < RMAXMN=',F7.1) - ENDIF - ENDIF - - DO NOVR=1,NOVRLP - -C ASSIGN ERROR FLAGS AND UPDATE RECORDS FOR THE TWO RECORDS -C THAT WE TRIED TO CORRECT - - IF(NOVR .EQ. INDXZ .OR. NOVR .EQ. INDXX) THEN - IFRSMC(NUMTST(IOVRLP(NOVR)))=IETYP - IF(IETYP .GT. 0) THEN - NADD=NADD+1 - NUMBAD(NADD+NBAD)=NUMTST(IOVRLP(NOVR)) - BADREC(NADD+NBAD)=TSTREC(IOVRLP(NOVR)) - ELSE - NOKAY=NOKAY+1 - NUMOKA(NOKAY)=NUMTST(IOVRLP(NOVR)) - OKAREC(NOKAY)=OVRREC(NOVR) - ENDIF - -C ASSIGN ERROR FLAGS TO ALL OTHER RECORDS - - ELSE - IFRSMC(NUMTST(IOVRLP(NOVR)))=IETYP - NADD=NADD+1 - NUMBAD(NADD+NBAD)=NUMTST(IOVRLP(NOVR)) - BADREC(NADD+NBAD)=TSTREC(IOVRLP(NOVR)) - ENDIF - ENDDO - GO TO 400 - -C *************************************************** -C *************************************************** -C **** **** -C **** MULTIPLE REPORTS BY TWO DIFFERENT RSMCS **** -C **** **** -C *************************************************** -C *************************************************** - - ELSE IF(IEROVR .EQ. 2) THEN - WRITE(6,201) IETYP - 201 FORMAT('...STORMS ARE REPORTED BY DIFFERENT RSMCS. ', - 1 'WE PROCEED TO SEE IF THEY ARE THE SAME STORM BY ', - 2 'COMPARING NAMES.'/4X,'THEN WE CONSTRUCT A COMMON ', - 3 'STORM ID. PRELIMINARY IETYP=',I2) - - BUFINZ=OVRREC(1) - - NERROR=0 - DO NOVR=2,NOVRLP - IF(STMNAM(NOVR) .EQ. 'NAMELESS' .AND. - 1 STMNMZ .EQ. 'NAMELESS') THEN - WRITE(6,202) STMIDZ,RSMCZ,STMID(NOVR),RSMC(NOVR) - 202 FORMAT(' ###OVERLAPPING NAMELESS STORMS HAVE IDS AND RSMCS=', - 1 2(2(A,1X),2X)) - - ELSE IF(STMNAM(NOVR) .EQ. STMNMZ) THEN - WRITE(6,203) STMNAM(NOVR),NOVR - 203 FORMAT('...STORM NAME=',A,' FOR NOVR=',I3,' MATCHES FIRST ', - 1 'REPORT. THE STORMS ARE THE SAME.') - - ELSE - -C IF ONE RSMC REPORTS A NAMELESS STORM AND THE OTHER RSMCS REPORT -C A NAME, TRANSFER THE STORM NAME TO THE NAMELESS RECORD. - - IF(STMNMZ .EQ. 'NAMELESS') THEN - WRITE(6,205) STMNAM(NOVR),NOVR - 205 FORMAT('...STMNMZ IS NAMELESS. COPYING STMNAM(NOVR)=',A,' TO ', - 1 'STMNMZ. NOVR=',I3) - STMNAM(1)=STMNAM(NOVR) - STMNMZ=STMNAM(NOVR) - OVRREC(1)=BUFINZ - - IF(IOVRLP(1) .LE. NTEST) TSTREC(IOVRLP(1))=BUFINZ - - ELSE IF(STMNAM(NOVR) .EQ. 'NAMELESS') THEN - WRITE(6,207) STMNMZ,NOVR - 207 FORMAT('...STMNAM(NOVR) IS NAMELESS. COPYING STMNMZ=',A,' TO ', - 1 'STMNAM(NOVR). NOVR=',I3) - STMNAM(NOVR)=STMNMZ - BUFINX=OVRREC(NOVR) - STMNMX=STMNMZ - OVRREC(NOVR)=BUFINX - - IF(IOVRLP(NOVR) .LE. NTEST) TSTREC(IOVRLP(NOVR))=BUFINX - -C THERE ARE TWO NAMES, NEITHER OF WHICH IS NAMELESS. THUS THERE IS -C AN UNTREATABLE ERROR - - ELSE - IETYP=5 - NERROR=NERROR+1 - IOVRLP(NOVR)=-IABS(IOVRLP(NOVR)) - WRITE(6,209) NOVR,STMNAM(NOVR),STMNMZ,IETYP - 209 FORMAT(/'******FOR NOVR=',I3,' STORM NAME=',A,' DOES NOT MATCH ', - 1 'NAME FOR THE FIRST REPORT=',A,'.'/4X,' THERE IS NO ', - 2 'ERROR RECOVERY AT THIS TIME. IETYP=',I3) - -C ERROR MARKING OFF ON THE FLY HERE - - IFRSMC(NUMTST(IABS(IOVRLP(NOVR))))=IETYP - NADD=NADD+1 - NUMBAD(NADD+NBAD)=NUMTST(IABS(IOVRLP(NOVR))) - BADREC(NADD+NBAD)=TSTREC(IABS(IOVRLP(NOVR))) - IETYP=IEROVR - ENDIF - ENDIF - ENDDO - -C IF AN ERROR HAS OCCURRED IN THE PREVIOUS PROCESSING REMOVE -C THE ERRONEOUS RECORD FROM THE OVERLAP LIST AND CONTINUE - - IF(NERROR .NE. 0) THEN - NOVRZ=0 - WRITE(6,213) NERROR - 213 FORMAT(' ******',I3,' ERRORS FOUND DURING STORM NAME MATCHING.') - DO NOVR=1,NOVRLP - IF(IOVRLP(NOVR) .GE. 0 .AND. IOVRLP(NOVR) .LE. NTEST) THEN - NOVRZ=NOVRZ+1 - IOVRLP(NOVRZ)=IOVRLP(NOVR) - OVRREC(NOVRZ)=OVRREC(NOVR) - STMNAM(NOVRZ)=STMNAM(NOVR) - STMID (NOVRZ)=STMID(NOVR) - RSMC (NOVRZ)=RSMC(NOVR) - STMLAT(NOVRZ)=STMLAT(NOVR) - STMLON(NOVRZ)=STMLON(NOVR) - RMAX (NOVRZ)=RMAX(NOVR) - PCEN (NOVRZ)=PCEN(NOVR) - PENV (NOVRZ)=PENV(NOVR) - ENDIF - ENDDO - NOVRLP=NOVRZ - IF(NOVRLP .EQ. 1) GO TO 390 - ENDIF - - WRITE(6,221) - 221 FORMAT(' ...THE OBSERVING RSMCS, THEIR ABBREVIATIONS, ', - 1 'PRIORITIES, INDICES AND REPORTED BASINS ARE:'/11X, - 2 'RSMC',3X,'RSMCAP',3X,'PRIORITY',3X,'INDEX',3X,'BASIN',3X, - 3 'BSCOFL',3X,'RPCOFL') - - NERROR=0 - DO NOVR=1,NOVRLP - -C WHICH BASIN ARE WE IN? - - CALL BASNCK(STMID(NOVR),STMLAT(NOVR),STMLON(NOVR),NBA,IPRT,IER) - IF(IER .EQ. 11) THEN - BSCOFL='IB' - ELSE - BSCOFL='CB' - ENDIF - - IF(IER .EQ. 3) THEN - IETYP=IER - NERROR=NERROR+1 - IOVRLP(NOVR)=-IABS(IOVRLP(NOVR)) - -C AGAIN, ERROR MARKING OFF ON THE FLY - - IFRSMC(NUMTST(IABS(IOVRLP(NOVR))))=IETYP - NADD=NADD+1 - NUMBAD(NADD+NBAD)=NUMTST(IABS(IOVRLP(NOVR))) - BADREC(NADD+NBAD)=TSTREC(IABS(IOVRLP(NOVR))) - IETYP=IEROVR - ENDIF - - IF(NOVR .EQ. 1) THEN - NBASV=NBA - RPCOFL='CR' - ELSE - IF(NBA .NE. NBASV) THEN - RPCOFL='IR' - NBA=NBASV - ENDIF - ENDIF - -C IS THIS A REPORT BY THE PRIORITY RSMC FOR THIS BASIN? THE -C PRIORITY FLAG IS TWO DIGITS. THE FIRST DIGIT IS PRIORITY -C (=1 IF THE RSMC IS THE PRIORITY RSMC, =2 OTHERWISE). THE -C SECOND DIGIT IS THE RSMC INDEX - - NRSPRI=RSMCPR(NBA) - NRSMC=-1 - DO NRSZ=1,NRSMCX - IF(RSMCID(NRSZ) .EQ. RSMC(NOVR)) THEN - NRSMC=NRSZ - IF(NRSMC .EQ. NRSPRI) THEN - IPRIOR(NOVR)=10+NRSMC - AVWT(NOVR)=RSMCWT(1) - BUFINZ=OVRREC(NOVR) - ELSE - IPRIOR(NOVR)=20+NRSMC - AVWT(NOVR)=RSMCWT(2) - ENDIF - GO TO 231 - ENDIF - ENDDO - 231 CONTINUE - - IF(NRSMC .GE. 0) THEN - WRITE(6,233) NOVR,RSMC(NOVR),RSMCAP(NRSMC),IPRIOR(NOVR),NRSMC, - 1 NBA,BSCOFL,RPCOFL - 233 FORMAT(' ',5X,I3,2X,A,6X,A,8X,I2,5X,I4,5X,I3,2(7X,A)) - - ELSE - IETYP=4 - NERROR=NERROR+1 - IOVRLP(NOVR)=-IABS(IOVRLP(NOVR)) - WRITE(6,235) RSMC(NOVR),NOVR,IETYP - 235 FORMAT('0******RSMC=',A,' COULD NOT BE FOUND IN RSMCCK. THIS ', - 1 'RECORD IS ERRONEOUS. NOVR=',I3,', IETYP=',I3) - -C AGAIN, ERROR MARKING OFF ON THE FLY - - IFRSMC(NUMTST(IABS(IOVRLP(NOVR))))=IETYP - NADD=NADD+1 - NUMBAD(NADD+NBAD)=NUMTST(IABS(IOVRLP(NOVR))) - BADREC(NADD+NBAD)=TSTREC(IABS(IOVRLP(NOVR))) - ENDIF - - ENDDO - -C IF AN ERROR HAS OCCURRED IN THE PREVIOUS PROCESSING REMOVE -C THE ERRONEOUS RECORD FROM THE OVERLAP LIST AND CONTINUE - - IF(NERROR .NE. 0) THEN - WRITE(6,243) NERROR - 243 FORMAT(' ******',I3,' ERRORS FOUND DURING RSMC VERIFICATION.') - NOVRZ=0 - DO NOVR=1,NOVRLP - IF(IOVRLP(NOVR) .GE. 0 .AND. IOVRLP(NOVR) .LE. NTEST) THEN - NOVRZ=NOVRZ+1 - IOVRLP(NOVRZ)=IOVRLP(NOVR) - IPRIOR(NOVRZ)=IPRIOR(NOVR) - OVRREC(NOVRZ)=OVRREC(NOVR) - STMNAM(NOVRZ)=STMNAM(NOVR) - STMID (NOVRZ)=STMID(NOVR) - RSMC (NOVRZ)=RSMC(NOVR) - STMLAT(NOVRZ)=STMLAT(NOVR) - STMLON(NOVRZ)=STMLON(NOVR) - RMAX (NOVRZ)=RMAX(NOVR) - PCEN (NOVRZ)=PCEN(NOVR) - PENV (NOVRZ)=PENV(NOVR) - AVWT (NOVRZ)=AVWT(NOVR) - ENDIF - ENDDO - NOVRLP=NOVRZ - IF(NOVRLP .EQ. 1) GO TO 390 - ENDIF - - WRITE(6,251) NOVRLP - 251 FORMAT(6X,'KEY: BSCOFL=IB IF REPORTED LAT/LON AND BASIN ', - 1 'ID FROM STORM ID ARE INCONSISTENT.'/18X,'=CB IF ', - 2 'LAT/LON AND BASIN ID ARE CONSISTENT.'/12X,'RPCOFL=', - 3 'CR IF REPORTED BASIN IS THE SAME AS THE FIRST RECORD.' - 4 /18X,'=IR IF REPORTED BASIN IS DIFFERENT FROM THE FIRST ', - 5 'RECORD.'/4X,I3,' OVERLAPPING STORMS HAVE BEEN FOUND.') - -C CHECK THE ALIAS FILE FOR REPORTS UNDER OTHER NAMES - - DO NOVR=1,NOVRLP - NALIAS=0 - NALREC=0 - REWIND IUNTAL - WRITE(6,257) STMNAM(NOVR),STMID(NOVR) - 257 FORMAT(/'...CHECKING THE ALIAS FILE TRYING TO FIND STORM NAME ', - 1 'ID AND RSMC THAT MATCH',3(1X,A)) - - 260 READ(IUNTAL,261,END=300) NALMX,STMNMX,(RSMCAL(NAL),STIDAL(NAL), - 1 NAL=1,MIN(NALMX,NOVRMX)) - 261 FORMAT(I1,1X,A9,10(1X,A4,1X,A3)) - NALREC=NALREC+1 - IF(NOVR .EQ. 1) WRITE(6,267) NALREC,RSMCAL(1),STIDAL(1), - 1 NALMX-1,STMNMX,(RSMCAL(NAL),STIDAL(NAL),NAL=2,MIN(NALMX,NOVRMX)) - 267 FORMAT('...ALIAS RECORD',I3,'=',2(A,1X),' HAS ',I3,' OBSERVERS ', - 1 'AND NAME=',A,' OBSERVERS ARE:'/(14X,2(A,1X))) - -C WRITE(6,293) STMID(NOVR),STIDAL(NAL) -C 293 FORMAT('...CHECKING STORM IDS VERSUS ALIAS FILE. STMID(NOVR),', -C 1 'STIDAL(NAL)=',2(A,1X)) - - IFNDAL=0 - IF(STMNMX .NE. 'NAMELESS' .AND. STMNAM(NOVR) .EQ. STMNMX .AND. - 1 STMID(NOVR)(3:3) .EQ. STIDAL(1)(3:3)) THEN - IFNDAL=1 - WRITE(6,294) STMNMX,STIDAL(1)(3:3) - 294 FORMAT('...EXACT NAME AND BASIN MATCH FOR NAMED STORM=',A,' IN ', - 1 'BASIN ',A,' IN THE ALIAS FILE.') - - ELSE - DO NALZZ=2,MIN(NALMX,NOVRMX) - IF(STMID(NOVR) .EQ. STIDAL(NALZZ) .AND. - 1 RSMC(NOVR) .EQ. RSMCAL(NALZZ)) THEN - IFNDAL=1 - WRITE(6,295) STMNMX,STIDAL(NALZZ),RSMC(NALZZ) - 295 FORMAT('...STORM ID AND RSMC MATCH FOR STORM=',A,' IN THE ', - 1 'ALIAS FILE. ID,RSMC=',2(A,1X)) - ENDIF - ENDDO - ENDIF - - IF(IFNDAL .EQ. 1) THEN - NALIAS=NALMX-1 - -C CHECK THAT THE OBSERVING RSMCS IN THE ALIAS FILE ARE AT LEAST -C THOSE OBSERVING FOR THIS CASE - - NOFIND=0 - DO NOVRZ=1,NOVRLP - DO NALZ=2,MIN(NALMX,NOVRMX) - IF(RSMC(NOVRZ) .EQ. RSMCAL(NALZ)) THEN - NOFIND=0 - GO TO 2294 - ELSE - NOFIND=NOFIND+1 - ENDIF - ENDDO - 2294 CONTINUE - IF(NOFIND .GT. 0) GO TO 2298 - ENDDO - - 2298 IF(NOFIND .EQ. 0) THEN - RSMCZ=RSMCAL(1) - STMIDZ=STIDAL(1) - -C RESET NALIAS TO FORCE A NEW COMBINED RSMC IF THE OBSERVING -C RSMCS AREN'T ON THE ALIAS FILE - - ELSE - WRITE(6,297) - 297 FORMAT('...RESETTING NALIAS=0 TO FORCE NEW ALIAS RECORD ', - 1 'BECAUSE A NEW RSMC HAS OBSERVED THIS STORM.') - NALIAS=0 - ENDIF - GO TO 301 - ENDIF - GO TO 260 - 300 CONTINUE - ENDDO - 301 CONTINUE - -C CONSTRUCT AND WRITE A NEW COMBINED RSMC IF NECESSARY - - IF(NALIAS .EQ. 0) THEN - IF(NALREC .EQ. 0) WRITE(6,303) - 303 FORMAT(/'...THE ALIAS FILE IS EMPTY. WE WILL ADD A NEW ALIAS.') - - IF(IFNDAL .EQ. 0) THEN - RSMCZ='!'//RSMCAP(NRSPRI) - WRITE(6,343) NRSPRI,RSMCAP(NRSPRI),RSMCZ - 343 FORMAT('...CONSTRUCTING NEW COMBINED RSMC FROM PRIORITY RSMC. ', - 1 'NRSPRI,','RSMCAP(NRSPRI),RSMCZ=',I4,2(1X,'...',A,'...')) - NSUB=0 - DO NOVZ=1,MIN0(NOVRLP,3) - IF(IPRIOR(NOVZ)/10 .NE. 1) THEN - NSUB=NSUB+1 - RSMCZ(2+NSUB:2+NSUB)=RSMCAP(IPRIOR(NOVZ)-10*(IPRIOR(NOVZ)/10)) - WRITE(6,349) RSMCZ(2+NSUB:2+NSUB),RSMCZ - 349 FORMAT('...ADDING RSMCAP=',A,', RSMCZ=',A) - ENDIF - ENDDO - - NSUB=1 - DO NOVZ=1,MIN(NOVRLP,NOVRMX-1) - NSUB=NSUB+1 - RSMCAL(NSUB)=RSMC(NOVZ) - STIDAL(NSUB)=STMID(NOVZ) - IF(IPRIOR(NOVZ)/10 .EQ. 1) THEN - RSMCAL(1)=RSMCZ - STIDAL(1)=STMIDZ - ENDIF - ENDDO - NOVRAD=NOVRLP+1 - -C CHECK THE CHOICE OF STORM ID VERSUS THE CATALOG. MAKE ANOTHER -C CHOICE IF THE FIRST CHOICE IS TAKEN. - - WRITE(6,361) STIDAL(1),(STMID(NOVZ),RSMC(NOVZ),NOVZ=1,NOVRLP) - 361 FORMAT('...CHECKING THE CATALOG TO SEE THE IF STORM IS IN ', - 1 'THERE. FIRST CHOICE IS: ',A/4X, - 2 'POSSIBLE IDS AND RSMCS ARE:'/(14X,2(A,2X))) - - read(stidal(1)(1:2),3333) minid - 3333 format(i2.2) - write(6,3334) minid - 3334 FORMAT('...ID OF FIRST CHOICE STORM ID=',I3) - - do novz=1,novrlp - call stcati(iuntca,stmid(novz),rsmc(novz),stmidx,ifnd) - if(ifnd .eq. 1) then - stidal(1)=stmidx - write(6,3335) stidal(1) - 3335 format('...Eureka, this storm is in the catalog with id=',a) - go to 3341 - - else - -c Pick out the maximum storm id from the priority basin - - if(stmid(novz)(3:3) .eq. stidal(1)(3:3)) then - read(stmid(novz)(1:2),3333) minidz - minid=max0(minid,minidz) - endif - - endif - enddo - 3341 continue - - if(ifnd .eq. 0) then - write(stidal(1)(1:2),3333) minid - write(6,3351) stidal(1) - 3351 format('...This storm is not in the catalog. Assign a unique ', - 1 'id that is the smallest for the overlapping storms=',a) - endif - stmidz=stidal(1) - - ELSE - WRITE(6,3357) RSMCAL(1),STIDAL(1),NALMX,(RSMCAL(NN), - 1 STIDAL(NN),NN=2,NALMX) - 3357 FORMAT('...COPYING RSMC =(',A,') AND STORM ID =(',A,') FROM ', - 1 'ALIAS FILE AND ADDING NEW RSMCS.'/4X,'NEW RSMCS AND ', - 2 'STORM IDS WILL NOW BE ADDED. CURRENT NUMBER IS',I3, - 3 ' OTHER RSMCS, STORM IDS ARE:'/(10X,2(A,1X))) - -C ADD NEW RSMCS AND ALIASES AS APPROPRIATE - - NADDRS=0 - - DO NOVR=1,NOVRLP - - DO NRSZA=1,NRSMCX - IF(RSMCID(NRSZA) .EQ. RSMC(NOVR)) THEN - NRSAPA=NRSZA - WRITE(6,3359) NOVR,RSMC(NOVR),NRSAPA - 3359 FORMAT('...FOR OVERLAP RECORD',I3,' RSMC AND INDEX ARE ',A,I4) - GO TO 3361 - ENDIF - ENDDO - 3361 CONTINUE - - IADRMS=1 - LNRSMC=INDEX(RSMCAL(1),' ')-1 - DO LENG=2,LNRSMC - WRITE(6,3377) LENG,RSMCAL(1)(LENG:LENG),RSMCAP(NRSAPA) - 3377 FORMAT('...TRYING TO MATCH RSMC ON ALIAS RECORD WITH OVERLAP ', - 1 'RECORD, LENG,RSMCAL,RSMCAP=',I3,2(1X,A)) - IF(RSMCAL(1)(LENG:LENG) .EQ. RSMCAP(NRSAPA)) THEN - IADRMS=0 - ENDIF - ENDDO - - IF(IADRMS .GT. 0) THEN - NADDRS=NADDRS+1 - RSMCAL(1)(LNRSMC+NADDRS:LNRSMC+NADDRS)=RSMCAP(NRSAPA) - STIDAL(NALMX+NADDRS)=STMID(NOVR) - RSMCAL(NALMX+NADDRS)=RSMC(NOVR) - WRITE(6,3391) NADDRS,NALMX+NADDRS,RSMCAL(1) - 3391 FORMAT('...ADDING RSMC, NADDRS,NALMX+NADDRS,RSMCAL(1)=', - 1 2I4,1X,A) - ENDIF - ENDDO - NOVRAD=NALMX+NADDRS - STMIDZ=STIDAL(1) - RSMCZ=RSMCAL(1) - ENDIF - -C WRITE A NEW RECORD TO THE ALIAS FILE IF THERE ISN'T AN EARLIER -C ONE IN THE NEW ALIAS FILE ALREADY - - IFND=0 - DO NADDZ=1,NALADD - IF(STNMAD(NADDZ) .EQ. STMNAM(NOVR) .OR. - 1 (STIDAD(NADDZ) .EQ. STIDAL(1) .AND. - 2 RSMCAD(NADDZ) .EQ. RSMCAL(1)) .AND. - 3 DAYZ .GE. DAYZAD(NADDZ)) THEN - IFND=1 - GO TO 3661 - ENDIF - ENDDO - 3661 CONTINUE - - IF(IFND .EQ. 0) THEN - WRITE(6,3401) NOVRAD,NADDRS,RSMCAL(1),STIDAL(1),(RSMCAL(NN), - 1 STIDAL(NN),NN=2,NOVRAD) - 3401 FORMAT('...READY TO ADD MODIFIED ALIAS RECORD: NOVRAD,NADDRS,', - 1 'PRIMARY RSMC,STORM ID=',2I4,2(1X,A),' SECONDARY ', - 2 'RSMC, ID:'/(10X,2(A,1X))) - NALADD=NALADD+1 - STNMAD(NALADD)=STMNAM(1) - STIDAD(NALADD)=STIDAL(1) - RSMCAD(NALADD)=RSMCAL(1) - DAYZAD(NALADD)=DAYZ - NAKA=MIN(NOVRAD,NOVRMX) - CALL AKASAV(NALADD,NAKA,DAYZ,STNMAD(NALADD),RSMCAL,STIDAL) - ENDIF - - ENDIF - -C CALCULATE AVERAGE LAT/LON, RMAX -C THEN SUBSTITUTE THE STORM ID, RSMC, LAT/LON, RMAX - - WRITE(6,362) (NO,STMLAT(NO),STMLON(NO),RMAX(NO),PCEN(NO), - 1 PENV(NO),NO=1,NOVRLP) - 362 FORMAT(/'...READY FOR AVERAGING OVER COTEMPORANEOUS STORMS. ', - 1 9X,'LAT',5X,'LON',4X,'RMAX',4X,'PCEN',4X,'PENV ARE:' - 2 /(54X,I3,5F8.1)) - - CALL WTAVRG(STMLAT,AVWT,NOVRLP,STMLTZ) - CALL WTAVRG(STMLON,AVWT,NOVRLP,STMLNZ) - CALL WTAVGP(RMAX,AVWT,NOVRLP,RMAXZ) - CALL WTAVGP(PCEN,AVWT,NOVRLP,PCENZ) - CALL WTAVGP(PENV,AVWT,NOVRLP,PENVZ) - IF(STMLTZ .GE. 0) THEN - LATNS='N' - ELSE - LATNS='S' - STMLTZ=ABS(STMLTZ) - ENDIF - IF(STMLNZ .GT. 180.) THEN - LONEW='W' - ELSE - LONEW='E' - ENDIF - WRITE(6,363) LATNS,LONEW,STMLTZ,STMLNZ,RMAXZ,PCENZ,PENVZ - 363 FORMAT('...AVERAGE STORM VALUES ARE:',2X,'(LATNS,LONEW=',2A2,')' - 1 /57X,5F8.1) - - IF(NVSBRS .NE. 0) THEN - - DO IVR=1,NVSBRS - IVSB=IVSBRS(IVR) - IVTVAR(IVSB)=NINT(VITVAR(IVSB)/VITFAC(IVSB)) - ENDDO - - ELSE - WRITE(6,3364) - 3364 FORMAT(' ###THESE AVERAGE VALUES WILL NOT BE SUBSTITUTED.') - ENDIF - - WRITE(6,365) STMIDZ,RSMCZ - 365 FORMAT(' ...SUBSTITUTING COMBINED STORM ID=',A,' AND RSMC=',A, - 1 ' INTO OVERLAP RECORDS.',/,4X,'AFTER SUBSTITUTION, ', - 2 'INDEX, INPUT RECORD#, RECORD ARE : (~~ INDICATES ', - 3 'RECORD FROM ORIGINAL SHORT-TERM HISTORY FILE)') - ICURR=0 - DO NOVR=1,NOVRLP -C WRITE(6,367) NOVR,STMIDZ,RSMCZ,OVRREC(NOVR) -C 367 FORMAT('...BEFORE SUBSTITUTION,NOVR,STMIDZ,RSMCZ,OVRREC=', -C 1 I3,2(1X,A)/4X,A,'...') - -C COUNT THE NUMBER OF CURRENT OVERLAPPING RECORDS - - IF(IOVRLP(NOVR) .LE. NTEST) THEN - ICURR=ICURR+1 - STHCH=' ' - ELSE - STHCH='~~' - ENDIF - - BUFINX=OVRREC(NOVR) - STMIDX=STMIDZ - RSMCX=RSMCZ - LATNSX=LATNS - LONEWX=LONEW - OVRREC(NOVR)=BUFINX - DO IVR=1,NVSBRS - IVSB=IVSBRS(IVR) - WRITE(OVRREC(NOVR)(ISTVAR(IVSB):IENVAR(IVSB)),FMTVIT(IVSB)) - 1 IVTVAR(IVSB) - OVRREC(NOVR)(ISTVAR(IVSB)-1:ISTVAR(IVSB)-1)='A' - ENDDO - WRITE(6,369) NOVR,IOVRLP(NOVR),STHCH,OVRREC(NOVR) - 369 FORMAT(' ...',2I3,'...',A,'...',A,'...') - ENDDO - -C FINAL ASSIGNMENT OF ERROR CODE: -C =21 IF ALL OVERLAPPING RECORDS ARE CURRENT -C =22 IF ONE OF THE OVERLAPPING RECORDS WAS FROM THE ORIGINAL -C SHORT TERM HISTORY FILE. IN THIS CASE ITS TOO LATE TO USE -C THE CURRENT RECORD ANYWAY. - - IF(ICURR .EQ. NOVRLP) THEN - IETYP=IETYP*10+1 - ELSE - IETYP=IETYP*10+2 - ENDIF - -C ONLY RECORDS FROM THE CURRENT TEST ARRAY CAN BE SPLIT INTO OKAY -C AND BAD RECORDS. - - DO NOVR=1,NOVRLP - IF(IOVRLP(NOVR) .LE. NTEST) THEN - IFRSMC(NUMTST(IOVRLP(NOVR)))=IETYP - NADD=NADD+1 - NUMBAD(NADD+NBAD)=NUMTST(IOVRLP(NOVR)) - BADREC(NADD+NBAD)=TSTREC(IOVRLP(NOVR)) - IF(IETYP .NE. 0 .AND. IPRIOR(NOVR)/10 .EQ. 1) THEN - NSUBR=NSUBR+1 - NOKAY=NOKAY+1 - NUMOKA(NOKAY)=NUMTST(IOVRLP(NOVR)) - OKAREC(NOKAY)=OVRREC(NOVR) - ENDIF - ENDIF - ENDDO - - GO TO 400 - ENDIF - -C OTHER ERROR PROCESSING - - 390 CONTINUE - - IFRSMC(NUMTST(NRECSV))=IETYP - IF(IETYP .GT. 0) THEN - NADD=NADD+1 - NUMBAD(NADD+NBAD)=NUMTST(NRECSV) - BADREC(NADD+NBAD)=TSTREC(NRECSV) - ELSE - NOKAY=NOKAY+1 - NUMOKA(NOKAY)=NUMTST(NRECSV) - OKAREC(NOKAY)=TSTREC(NRECSV) - ENDIF - - 400 CONTINUE - ENDDO - -C DUMP ALIAS RECORDS TO NEW ALIAS FILE - - CALL AKADMP(IUNTAN) - - WRITE(6,401) - 401 FORMAT(//'...BEGINNING RSMCCK PART II: UNIFY STORM ID ACROSS ALL', - 1 ' CURRENT AND HISTORICAL OCCURRENCES.') - -C COPY ALIAS FILE (AKAVIT) TO NEW ALIAS FILE. DON'T COPY RECORDS -C THAT ALREADY EXIST IN NEW ALIAS FILE. - - REWIND IUNTAL - CALL AKACPY(IUNTAL,IUNTAN) - -C CHECK ALL RECORDS IN THE ALIAS SHORT-TERM HISTORY FILE VERSUS -C RECORDS THAT ARE OK SO FAR. FIRST, COPY ALL OKAY RECORDS -C INTO WORKING SPACE. - - NCHECK=NOKAY+1 - REWIND IUNTHA - WRITE(6,503) - 503 FORMAT(/'...COPYING OKAY RECORDS TO OVRREC ARRAY: RECORD #, ', - 1 'RECORD=') - DO NOK=1,NOKAY - IOVRLP(NOK)=0 - OVRREC(NOK)=OKAREC(NOK) - WRITE(6,505) NOK,OVRREC(NOK) - 505 FORMAT('...',I3,'...',A,'...') - ENDDO - WRITE(6,511) NOKAY - 511 FORMAT('...',I3,' OKAY RECORDS HAVE BEEN COPIED.') - - WRITE(6,513) IUNTHA - 513 FORMAT(/'...READING FROM ALIAS SHORT-TERM HISTORY FILE (UNIT',I3, - 1 ') INTO OVRREC ARRAY: RECORD #, RECORD='/4X,A) - - 520 CONTINUE - - READ(IUNTHA,521,END=540) OVRREC(NCHECK) - 521 FORMAT(A) - -C AT THIS POINT WE DO NOT KNOW IF A 2-DIGIT YEAR BEGINS IN COLUMN 20 -C OF THE RECORD (OLD NON-Y2K COMPLIANT FORM) OR IF A 4-DIGIT YEAR -C BEGINS IN COLUMN 20 (NEW Y2K COMPLIANT FORM) - TEST ON LOCATION OF -C LATITUDE N/S INDICATOR TO FIND OUT ... - - IF(OVRREC(NCHECK)(35:35).EQ.'N' .OR. - 1 OVRREC(NCHECK)(35:35).EQ.'S') THEN - -C ... THIS RECORD STILL CONTAINS THE OLD 2-DIGIT FORM OF THE YEAR - -C ... THIS PROGRAM WILL CONVERT THE RECORD TO A 4-DIGIT YEAR USING THE -C "WINDOWING" TECHNIQUE SINCE SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT *, '==> Read in RECORD from tcvitals file -- contains a', - $ ' 2-digit year "',OVRREC(NCHECK)(20:21),'"' - PRINT *, ' ' - PRINT *, 'From unit ',iuntha,'; OVRREC(NCHECK)-3: ', - $ OVRREC(NCHECK) - PRINT *, ' ' - DUMY2K(1:19) = OVRREC(NCHECK)(1:19) - IF(OVRREC(NCHECK)(20:21).GT.'20') THEN - DUMY2K(20:21) = '19' - ELSE - DUMY2K(20:21) = '20' - ENDIF - DUMY2K(22:100) = OVRREC(NCHECK)(20:100) - OVRREC(NCHECK) = DUMY2K - PRINT *, ' ' - PRINT *, '==> 2-digit year converted to 4-digit year "', - $ OVRREC(NCHECK)(20:23),'" via windowing technique' - PRINT *, ' ' - PRINT *, 'From unit ',iuntha,'; OVRREC(NCHECK)-3: ', - $ OVRREC(NCHECK) - PRINT *, ' ' - - ELSE IF(OVRREC(NCHECK)(37:37).EQ.'N' .OR. - 1 OVRREC(NCHECK)(37:37).EQ.'S') THEN - -C ... THIS RECORD CONTAINS THE NEW 4-DIGIT FORM OF THE YEAR -C ... NO CONVERSION NECESSARY SINCE THIS SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT *, '==> Read in RECORD from tcvitals file -- contains a', - $ ' 4-digit year "',OVRREC(NCHECK)(20:23),'"' - PRINT *, ' ' - PRINT *, 'From unit ',iuntha,'; OVRREC(NCHECK)-3: ', - $ OVRREC(NCHECK) - PRINT *, ' ' - PRINT *, '==> No conversion necessary' - PRINT *, ' ' - - ELSE - - PRINT *, ' ' - PRINT *, '***** Cannot determine if this record contains ', - $ 'a 2-digit year or a 4-digit year - skip it and try reading ', - $ 'the next record' - PRINT *, ' ' - GO TO 520 - - END IF - - IOVRLP(NCHECK)=0 - WRITE(6,505) NCHECK,OVRREC(NCHECK) - NCHECK=NCHECK+1 - GO TO 520 - - 540 CONTINUE - NCHECK=NCHECK-1 - WRITE(6,541) NCHECK-NOKAY - 541 FORMAT('...',I3,' SHORT-TERM HISTORY RECORDS HAVE BEEN READ.') - - REWIND IUNTAL - NALADD=0 - DO NOK=1,NOKAY - -C DO ONLY RECORDS THAT HAVE NOT BEEN PROCESSED PREVIOUSLY - - IF(IOVRLP(NOK) .LT. 0) GO TO 700 - BUFINZ=OKAREC(NOK) - WRITE(6,543) NOK,STMNMZ,STMIDZ,RSMCZ - 543 FORMAT(//'...READY TO CHECK OKAY RECORD',I3,' WITH STMNAM,ID,', - 1 'RSMC=',3(1X,A)) - DO IV=1,2 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 BUFINZ) - ENDDO - CALL ZTIME(IDATEZ,IUTCZ,IYR,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,DAYZ) - - IBANG=0 - NSAME=1 - STMID(NSAME)=STMIDZ - STMNAM(NSAME)=STMNMZ - RSMC (NSAME)=RSMCZ - IOVRLP(NOK)=-NOK - INDSAM(NSAME)=NOK - IDATE(NSAME)=IDATEZ - IUTC(NSAME)=IUTCZ - IDASRT(NSAME)=NSAME - SRTDAY(NSAME)=DAYZ - IF(RSMC(NSAME)(1:1) .EQ. '!') IBANG=NSAME - -C LOOK IN THE ALIAS FILE TO SEE IF THIS STORM HAS BEEN ALIASED -C BEFORE. - - NALSAV=NOVRMX - CALL AKAFND(IUNTAN,STMNMZ,RSMCZ,STMIDZ,NALSAV,STNMAL,RSMCAL, - 1 STIDAL,IFNDAL) - - IF(IFNDAL .NE. 0) THEN - NALMX=NALSAV - WRITE(6,557) STMNMZ,STMIDZ,NALMX - 557 FORMAT('...STORM NAME,ID=',2(1X,A),' HAS BEEN ASSIGNED AN ALIAS ', - 1 'NAME PREVIOUSLY.',I3,' ALIASES EXIST.') - ELSE - NALMX=1 - WRITE(6,559) STMNMZ - 559 FORMAT('...STORM ',A,' CANNOT BE FOUND IN THE ALIAS FILE.') - ENDIF - -C ACCUMULATE ALL OBSERVATIONAL REPORTS FOR THIS STORM. - - DO NCK=NOK+1,NCHECK - IF(IOVRLP(NCK) .GE. 0) THEN - IFNDX=0 - BUFINX=OVRREC(NCK) - -C NO MATCH FOR BOTH STORMS THAT ARE NAMED. - - IF(STMNMZ .NE. 'NAMELESS' .AND. STMNMX .NE. 'NAMELESS') THEN - IF(STMNMX .EQ. STMNMZ) then - if(STMIDX(3:3) .EQ. STMIDZ(3:3)) then - IFNDX=1 - else - icmat=0 - do nc=1,ncrdmx - if(stmnmx .eq. cardnm(nc)) icmat=1 - enddo - if(icmat .eq. 0) ifndx=1 - endif - endif - -C POSSIBLE MATCH REMAINS: MATCH STORM ID FOR THE SAME RSMC. IF -C STORM WAS IN ALIAS FILE, TRY TO MATCH ANY OF ITS ALIASES. IF -C STORM WAS NOT IN ALIAS FILE, TRY TO MATCH STORM ID AND RSMC. -C WARNING: THIS IS NOT A COMPLETE TEST!!! - - ELSE - IF(IFNDAL .NE. 0) THEN - - DO NAL=1,NALMX - IF(RSMCX .EQ. RSMCAL(NAL) .AND. STMIDX .EQ. STIDAL(NAL)) THEN - IFNDX=1 - GO TO 561 - ENDIF - ENDDO - - ELSE - IF(RSMCX .EQ. RSMCZ .AND. STMIDX .EQ. STMIDZ) THEN - IFNDX=1 - GO TO 561 - ENDIF - - ENDIF - - 561 CONTINUE - ENDIF - -C CONTINUE PROCESSING IF SAME STORM HAS BEEN FOUND. - - IF(IFNDX .NE. 0) THEN - - DO IV=1,2 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVRX(IV),IERDEC,FMTVIT(IV), - 1 BUFINX) - ENDDO - CALL ZTIME(IDATEX,IUTCX,IYR,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,DAYX) - -C CHECK FOR RECORDS THAT HAVE THE SAME DATE/TIME - - DO NSZ=1,NSAME - IF(ABS(DAYX-SRTDAY(NSZ)) .LT. FIVMIN) THEN - WRITE(6,567) NSZ,INDSAM(NSZ),BUFINX - 567 FORMAT('###RECORD HAS SAME DATE/TIME AS RECORD #',I3,' WHICH ', - 1 'IS INDEX#',I3,'. IT WILL NOT BE SAVED.',/,4X,A) - IOVRLP(NCK)=-999 - GO TO 570 - ENDIF - ENDDO - - NSAME=NSAME+1 - IDATE(NSAME)=IDATEX - IUTC(NSAME)=IUTCX - IOVRLP(NCK)=-NCK - INDSAM(NSAME)=NCK - STMID(NSAME)=STMIDX - STMNAM(NSAME)=STMNMX - RSMC (NSAME)=RSMCX - IDASRT(NSAME)=NSAME - SRTDAY(NSAME)=DAYX - IF(RSMC(NSAME)(1:1) .EQ. '!') IBANG=NSAME - - ENDIF - ENDIF - 570 CONTINUE - ENDDO - - WRITE(6,571) NSAME-1,STMNMZ,STMIDZ,(INDSAM(NS),NS=2,NSAME) - 571 FORMAT(/'...',I3,' MATCHING STORMS WERE FOUND FOR ',A,' WITH ', - 1 'ID=',A,' BY NAME OR STORM ID MATCHING. INDICES OF ', - 2 'MATCHING STORMS ARE:'/(4X,30I4)) - -C FINAL CHECK: FIND THE CLOSEST STORMS TO EACH OF THE STORMS -C THAT WERE DETERMINED TO BE THE SAME USING THE ABOVE PROCEDURE. -C COMPARE POSITIONS EXTRAPOLATED TO THE COMMON TIMES. - - NSVSAM=NSAME - DO NS=1,NSVSAM - ISAME=0 - DISTMN=1.E10 - -C RECOVER DATE, UTC, LAT/LON, STORM MOTION FOR SUBJECT STORM - - BUFINZ=OVRREC(INDSAM(NS)) - - DO IV=1,9 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 BUFINZ) - VITVAR(IV)=REAL(IVTVAR(IV))*VITFAC(IV) - ENDDO - IF(LATNS .EQ. 'S') STMLTZ=-STMLTZ - IF(LONEW .EQ. 'W') STMLNZ=360.-STMLNZ - DAYZ=SRTDAY(NS) - WRITE(6,1521) NS,NCHECK,STMNMZ,STMIDZ,IDATEZ,IUTCZ,STMLTZ, - 1 STMLNZ,STMDRZ,STMSPZ,DAYZ,RMAXZ - 1521 FORMAT(/'...BEGINNING PROXIMITY CHECK WITH INDEX=',I3,' AND ', - 1 'NUMBER OF STORMS TO COMPARE=',I3/4X,'STORM=',A,'WITH ID', - 2 '=',A,'. IDATEZ,IUTCZ,STMLTZ,STMLNZ,STMDRZ,STMSPZ,DAYZ,', - 3 'RMAXZ='/3X,I9,I5,6F12.3) - - DO 1580 NCK=1,NCHECK - -C PICK ONLY STORMS THAT HAVEN'T YET BEEN RECOGNIZED AS BEING THE -C SAME AND THAT ARE NOT THEMSELVES. - - IF(IOVRLP(NCK) .LT. 0 .OR. NCK .EQ. INDSAM(NS)) GO TO 1580 - -C RECOVER DATE, UTC, LAT/LON, STORM MOTION AND RMAX FOR COMPARISON -C STORM - - BUFINX=OVRREC(NCK) - DO IV=1,9 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVRX(IV),IERDEC,FMTVIT(IV), - 1 BUFINX) - VITVRX(IV)=REAL(IVTVRX(IV))*VITFAC(IV) - ENDDO - IF(LATNSX .EQ. 'S') STMLTX=-STMLTX - IF(LONEWX .EQ. 'W') STMLNX=360.-STMLNX - CALL ZTIME(IDATEX,IUTCX,IYR,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,DAYX) - -C PICK ONLY STORMS THAT ARE NOT COTEMPORANEOUS. - - IF(ABS(DAYX-SRTDAY(NS)) .LT. FIVMIN) THEN -C WRITE(6,1553) NCK,INDSAM(NS) -C1553 FORMAT('###RECORD ',I3,' HAS SAME DATE/TIME AS RECORD #',I3,'. ', -C 1 'IT SHOULD HAVE BEEN TREATED BY THE COTEMPORANEOUS CHECK.') - GO TO 1580 - ENDIF - - IF(STMNMZ .NE. 'NAMELESS' .AND. STMNMX .NE. 'NAMELESS') THEN -C WRITE(6,1557) NCK,INDSAM(NS) -C1557 FORMAT('###RECORDS ',I3,' AND',I3,' BOTH HAVE NAMES. THEY ', -C 1 'SHOULD HAVE BEEN TREATED BY THE PREVIOUS MATCHING CHECK.') - GO TO 1580 - ENDIF - -C CAN THEY CAN BE DEFINITIVELY PROVEN NOT TO BE THE SAME STORM? -C IF THEY ARE BOTH BANG STORMS OR BOTH NOT BANG STORMS, THE RSMCS -C AND STORMS IDS CAN BE COMPARED DIRECTLY. OTHERWISE, WE MUST LOOK -C IN THE ALIAS FILE TO SEE IF THE SAME RSMC HAS OBSERVED EACH. - - IF(RSMCZ .EQ. RSMCX .AND. STMIDZ .NE. STMIDX) THEN -C WRITE(6,2551) RSMCZ,STMIDZ,STMIDX -C2551 FORMAT('...DIRECT COMPARISON OF STORM IDS FOR THE SAME RSMC ', -C 1 'GIVES UNAMBIGUOUSLY DIFFERENT STORMS, RSMC,STORM IDS=', -C 2 3(A,1X)) - GO TO 1580 - ENDIF - -C LOOK IN THE ALIAS FILE - - IFNDOV=0 - IRECOV=0 - REWIND IUNTAN - 2552 READ(IUNTAN,261,END=2560) NALOV,STNMOV,(RSMCOV(NAL),STIDOV(NAL), - 1 NAL=1,NALOV) - IRECOV=IRECOV+1 - - DO NALX=1,NALOV - IF((RSMCX(1:1) .EQ. '!' .AND. STMIDX .EQ. STIDOV(NALX)) .OR. - 1 (RSMCX(1:1) .NE. '!' .AND. - 2 RSMCX .EQ. RSMCOV(NALX) .AND. STMIDX .EQ. STIDOV(NALX))) THEN - IFNDOV=1 - DO NALZ=2,NALOV - IF(RSMCZ .EQ. RSMCOV(NALZ) .AND. STMIDZ .NE. STIDOV(NALZ)) THEN -C WRITE(6,2553) IRECOV,RSMCX,STMIDX,NALZ,RSMCOV(NALZ),STIDOV(NALZ) -C 1 STMIDZ -C 2553 FORMAT('###ALIAS RECORD',I3,' MATCHES POTENTIAL OVERLAPPING ', -C 1 'STORM WITH RSMC,ID=',2(A,1X,)/4X,'BUT FOR ALIAS #',I3, -C 2 ' RSMC=',A,' IS THE SAME BUT STORM IDS=',2(A,1X),' ARE ', -C 3 'DIFFERENT.') - GO TO 1580 - ENDIF - ENDDO - ENDIF - ENDDO - GO TO 2552 - - 2560 CONTINUE - - IF(IFNDOV .EQ. 0 .AND. RSMCX(1:1) .EQ. '!') THEN - WRITE(6,2561) STMNMX,RSMCX,STMIDX - 2561 FORMAT('...STORM ',A,' WITH RSMC AND ID=',2(A,1X),' WAS NOT ', - 1 'FOUND IN THE ALIAS FILE. ABORT1') - CALL ABORT1(' RSMCCK',2561) - ENDIF - - ISAME=ISAME+1 - DISTZX=DISTSP(STMLTZ,STMLNZ,STMLTX,STMLNX)*1.E-3 - -C WRITE(6,1571) STMNMX,STMIDX,NCK,IDATEX,IUTCX,STMLTX,STMLNX, -C 1 STMDRX,STMSPX,DAYX,DISTZX,RMAXX -C1571 FORMAT('...BEGINNING COMPARISON WITH STORM=',A,'WITH ID=',A,'. ', -C 1 'INDEX,IDATEX,IUTCX,STMLTX,STMLNX,STMDRX,STMSPX,DAYX,', -C 2 'DISTZX,RMAXX='/4X,I3,I10,I5,7F12.3) - IF(DISTZX .LT. DISTMN) THEN - DISTMN=DISTZX - NCLOSE=NCK - DAYSAV=DAYX - IUTCSV=IUTCX - IDATSV=IDATEX - STLTSV=STMLTX - STLNSV=STMLNX - STDRSV=STMDRX - STSPSV=STMSPX - RMAXSV=RMAXX - ENDIF - 1580 CONTINUE - - IF(ISAME .GT. 0) THEN - WRITE(6,1581) NS,NCLOSE,DISTMN,OVRREC(INDSAM(NS)),OVRREC(NCLOSE) - 1581 FORMAT(/'...FOR NS=',I3,', CLOSEST STORM IS INDEX=',I3,' WITH ', - 1 'DISTANCE=',F8.1,' KM. RECORDS ARE:'/4X,'Z...',A/4X, - 2 'X...',A/) - - BUFINX=OVRREC(NCLOSE) - - IF(RMAXZ .LT. 0.0) THEN - DO NBA=1,NBASIN - IF(STMIDZ(3:3) .EQ. IDBASN(NBA)) THEN - IBASN=NBA - GO TO 1546 - ENDIF - ENDDO - 1546 CONTINUE - RMAXZ=TCCLIM(9,IBASN) - WRITE(6,1583) NREC,RMAXZ,NABASN(IBASN) - 1583 FORMAT('###RMAXZ MISSING FOR PROXIMITY CHECK ON RECORD',I3,'.'/4X, - 1 'REPLACEMENT VALUE WILL BE A CLIMATOLOGICAL GUESS OF ', - 2 F6.1,' KM FOR BASIN ',A,'.') - ENDIF - - IF(RMAXSV .LT. 0.0) THEN - DO NBA=1,NBASIN - IF(STMIDX(3:3) .EQ. IDBASN(NBA)) THEN - IBASN=NBA - GO TO 1556 - ENDIF - ENDDO - 1556 CONTINUE - RMAXSV=TCCLIM(9,IBASN) - WRITE(6,1584) NREC,RMAXSV,NABASN(IBASN) - 1584 FORMAT('###RMAXSV MISSING FOR PROXIMITY CHECK ON RECORD',I3,'. ', - 1 'REPLACEMENT VALUE WILL BE A CLIMATOLOGICAL GUESS '/4X, - 2 'OF ',F6.1,' KM FOR BASIN ',A,'.') - ENDIF - - DTXZ=DAYSAV-DAYZ - DSTFAC=DTXZ*FACSPD - CALL DS2UV(USTMZ,VSTMZ,STMDRZ,STMSPZ) - CALL DS2UV(USTMX,VSTMX,STDRSV,STSPSV) - EXTLTZ=STMLTZ+VSTMZ*DSTFAC - EXTLNZ=STMLNZ+USTMZ*DSTFAC/COSD(EXTLTZ) - EXTLTX=STLTSV-VSTMX*DSTFAC - EXTLNX=STLNSV-USTMX*DSTFAC/COSD(EXTLTX) - DSTX2Z=DISTSP(STMLTZ,STMLNZ,EXTLTX,EXTLNX)*1.E-3 - DSTZ2X=DISTSP(STLTSV,STLNSV,EXTLTZ,EXTLNZ)*1.E-3 - -C LAST CRITERION FOR FINDING THE SAME STORM IS DISTANCE - - DSTOLP=RMAXZ+RMAXSV - IF(DSTZ2X .GE. DSTOLP .OR. DSTX2Z .GE. DSTOLP) THEN -C WRITE(6,1585) -C1585 FORMAT(/'...STORMS ARE NOT CONSIDERED THE SAME SINCE NO ', -C 1 'OVERLAPPING IS PRESENT AT A COMMON EXTRAPOLATED TIME.') - - ELSE - WRITE(6,1587) DAYZ,DAYX,DTXZ,DISTMN,STMNMZ,STMIDZ,STMLTZ,EXTLTZ, - 1 STMLNZ,EXTLNZ,DSTZ2X,RMAXZ,STMNMX,STMIDX,STLTSV, - 2 EXTLTX,STLNSV,EXTLNX,DSTX2Z,RMAXSV - 1587 FORMAT(/'...EXTRAPOLATION TABLE TO COMMON TIMES: DAYX,DAYZ,DTXZ', - 1 ',DISTMN=',4F12.3/20X,'SUBJECT (Z) STORM & ID',6X, - 2 'T=0LAT',6X,'T=XLAT',6X,'T=0LON',6X,'T=XLON',2X, - 3 'DISTANCE TO X',3X,'RMAXZ'/2(25X,A,2X,A,3X,6F12.3/),20X, - 4 'COMPARISON (X) STORM & ID',3X, - 5 'T=0LAT',6X,'T=ZLAT',6X,'T=0LON',6X,'T=ZLON',2X, - 6 'DISTANCE TO Z',3X,'RMAXX') - WRITE(6,1589) - 1589 FORMAT(/'###STORMS ARE OVERLAPPED AT A COMMON EXTRAPOLATED TIME.', - 1 ' THEY ARE ASSUMED TO BE THE SAME.###') - - BUFINX=OVRREC(NCLOSE) - NSAME=NSAME+1 - IDATE(NSAME)=IDATSV - IUTC(NSAME)=IUTCSV - IOVRLP(NCLOSE)=-NCLOSE - INDSAM(NSAME)=NCLOSE - STMID(NSAME)=STMIDX - STMNAM(NSAME)=STMNMX - RSMC (NSAME)=RSMCX - IDASRT(NSAME)=NSAME - SRTDAY(NSAME)=DAYSAV - IF(RSMC(NSAME)(1:1) .EQ. '!') IBANG=NSAME - - ENDIF - ENDIF - ENDDO - -C PROCESS ALL RECORDS FOR THE SAME STORM - - IF(NSAME .GT. 1) THEN - BUFINZ=OKAREC(NOK) - WRITE(6,577) NSAME,STMNMZ,STMIDZ,(NS,IDATE(NS),IUTC(NS), - 1 RSMC(NS),STMID(NS),STMNAM(NS),NS=1,NSAME) - 577 FORMAT('...',I3,' RECORDS APPEAR TO BE THE SAME STORM WITH NAME,', - 1 ' ID=',2(1X,A),' AND MUST BE UNIFIED.'/10X,' DATE ', - 2 'UTC RSMC STMID NAME ARE:'/(4X,I3,I10,2X,I5,2X,2(3X, - 3 A),4X,A)) - -c Sort the records by time - - CALL SORTRL(SRTDAY(1:NSAME),IDASRT(1:NSAME),NSAME) - -C LOOK IN THE ALIAS FILE TO SEE WHICH STORM ALIASES CORRESPOND -C TO THE BANG STORM. - - IF(IBANG .NE. 0) THEN - STMIDX=STMID(IBANG) - STMNMX=STMNAM(IBANG) - RSMCX=RSMC (IBANG) - - REWIND IUNTAN - NRECAL=0 - 552 READ(IUNTAN,261,END=555) NALMX,STNMAL,(RSMCAL(NAL),STIDAL(NAL), - 1 NAL=1,NALMX) - NRECAL=NRECAL+1 - -C NO MATCH FOR BOTH STORMS THAT ARE NAMED. - - IF(STMNMX .NE. 'NAMELESS' .AND. - 1 STNMAL .NE. 'NAMELESS' .AND. - 2 STNMAL .NE. STMNMX) GO TO 552 - -C POSSIBLE MATCH REMAINS: MATCH STORM ID ONLY IN THIS CASE SINCE -C THEY ARE BOTH BANG STORMS. - - DO NAL=1,NALMX - IF(STMIDX .EQ. STIDAL(NAL)) THEN - IFNDAL=NRECAL - GO TO 555 - ENDIF - ENDDO - GO TO 552 - - 555 CONTINUE - - IF(IFNDAL .EQ. 0) THEN - WRITE(6,5571) IBANG,STMNMX,RSMCX,STMIDX - 5571 FORMAT('******BANG STORM WITH INDEX=',I3,', NAME,RSMC,ID=', - 1 3(A,1X),' CANNOT BE FOUND IN THE ALIAS FILE. ABORT1') - CALL ABORT1(' RSMCCK',5571) - - ELSE - WRITE(6,5573) IBANG,STMNMX,RSMCX,STMIDX,IFNDAL - 5573 FORMAT('...BANG STORM WITH INDEX=',I3,', NAME,RSMC,ID=',3(A,1X), - 1 ' WAS FOUND AS RECORD#',I4,' IN THE ALIAS FILE. ') - ENDIF - ENDIF - -C LOOK FOR ALL THE RSMCS THAT HAVE OBSERVED THIS STORM SO FAR - - NRSMC=NALMX-1 - NALMXZ=NALMX - -C LOAD RSMCS FROM THE ALIAS FILE, IF ANY - - DO NRS=2,NALMX - DO NRSZ=1,NRSMCX - IF(RSMCAL(NRS) .EQ. RSMCID(NRSZ)) THEN - NRSMCF=NRSZ - ENDIF - ENDDO - IRSMC(NRS-1)=NRSMCF - WRITE(6,6633) NRS-1,RSMCID(NRSMCF) - 6633 FORMAT('...STORING ALIAS #',I3,' WHICH IS ',A) - ENDDO - - DO NS=1,NSAME - - IF(RSMC(NS) (1:1) .EQ. '!') THEN - NPS=2 - NPE=4 - ELSE - NPS=1 - NPE=1 - ENDIF - - DO NP=NPS,NPE - -C COMBINED RSMC CASE - - IF(RSMC(NS) (1:1) .EQ. '!') THEN - DO NRSZ=1,NRSMCX - IF(RSMC(NS)(NP:NP) .EQ. RSMCAP(NRSZ)) THEN - NRSMCF=NRSZ - GO TO 591 - ENDIF - ENDDO - -C INDIVIDUAL RSMC CASE - - ELSE - DO NRSZ=1,NRSMCX - IF(RSMC(NS) .EQ. RSMCID(NRSZ)) THEN - NRSMCF=NRSZ - GO TO 591 - ENDIF - ENDDO - ENDIF - 591 CONTINUE - - - ISAV=0 - DO NRSMS=1,NRSMC - IF(IRSMC(NRSMS) .EQ. NRSMCF) ISAV=ISAV+1 - ENDDO - - IF(ISAV .EQ. 0) THEN - NRSMC=NRSMC+1 - IRSMC(NRSMC)=NRSMCF - -C STORE A NEW RSMC IF NECESSARY. - - IADDAL=0 - DO NAL=2,NALMXZ - IF(RSMCAL(NAL) .EQ. RSMCID(NRSMCF)) IADDAL=IADDAL+1 -C WRITE(6,6441) NAL,RSMCAL(NAL),RSMCID(NRSMCF),IADDAL -C6441 FORMAT('...DEBUGGING, NAL,RSMCAL(NAL),RSMCID(NRSMCF),IADDAL=', -C 1 I3,2(1X,A),I3) - ENDDO - - IF(IADDAL .EQ. 0) THEN - WRITE(6,641) RSMCID(NRSMCF),STMID(NS) - 641 FORMAT('...THE LIST OF OBSERVERS WILL INCLUDE RSMC=',A,' FOR ', - 1 'STORM ID=',A) - NALMXZ=NALMXZ+1 - STIDAL(NALMXZ)=STMID(NS) - RSMCAL(NALMXZ)=RSMCID(NRSMCF) - - ELSE - WRITE(6,643) RSMCID(NRSMCF),STMNMZ - 643 FORMAT('...RSMC=',A,' IS ALREADY IN THE LIST OF OBSERVERS FOR ',A) - ENDIF - - ENDIF - - ENDDO - ENDDO - WRITE(6,651) STMNMZ,STMIDZ,NRSMC,(RSMCID(IRSMC(NRS)),NRS=1,NRSMC) - 651 FORMAT(/'...SUMMARY OF ALL OBSERVING RSMCS FOR STORM WITH NAME,', - 1 'ID=',2(1X,A),'. NUMBER OF RSMCS=',I3/4X,10(A,2X)) - -C IF MORE THAN ONE RSMC HAS OBSERVED STORM, UNIFY THE STORM ID -C AND RSMC IF ANY NEW RSMCS HAVE BEEN ADDED. - - IF(NRSMC .GT. 1 .OR. IFNDAL .NE. 0) THEN - - IF(NALMX .EQ. NALMXZ) THEN - -C NO NEW RSMC NEED BE ADDED. COPY STORM ID AND RSMC FROM A BANG -C RECORD. - - IRITAL=0 - - IF(IFNDAL .NE. 0) THEN - WRITE(6,6653) STMNMZ,STMIDZ,STNMAL,STIDAL(1),RSMCAL(1) - 6653 FORMAT(/'...STORM WITH NAME, ID=',2(1X,A),' WAS FOUND IN ALIAS ', - 1 'FILE WITH NAME=',A,'. ID,RSMC=',2(A,1X)) - STMIDZ=STIDAL(1) - RSMCZ=RSMCAL(1) - STMNMZ=STNMAL - - ELSE IF(IBANG .NE. 0) THEN - WRITE(6,653) - 653 FORMAT('...STORM NOT FOUND IN ALIAS FILE AND NO NEW RSMC HAS ', - 1 'BEEN ADDED. STORE RSMC AND STORM ID FROM A BANG RECORD.') - STMIDZ=STMID(IBANG) - RSMCZ=RSMC(IBANG) - - ELSE - WRITE(6,655) STMNMZ,STMIDZ - 655 FORMAT(/'******STORM WITH NAME, ID=',2(1X,A),' IS NOT LISTED AS ', - 1 'A BANG STORM, CANNOT BE FOUND IN THE ALIAS FILE,'/7X, - 2 'HAS MORE THAN ONE RSMC BUT NONE ARE TO BE ADDED. ABORT1') - CALL ABORT1(' RSMCCK',655) - ENDIF - - ELSE - -C ADD A NEW RSMC. COPY RSMC FROM THE BANG STORM RECORD. THEN ADD -C NEW RSMCS. IF THERE IS NO BANG RECORD, MAKE UP A NEW RSMC -C AND STORM ID BASED ON THE EARLIEST RECORD. - - IRITAL=1 - - NWRSMC=NALMXZ-NALMX - WRITE(6,6657) NWRSMC - 6657 FORMAT('...',I3,' NEW RSMCS WILL BE ADDED.') - -c Mark a relocation flag for the record in which a new -c rsmc has observed storm - - do ns=2,nsame - if(rsmc(idasrt(ns)) .ne. rsmc(idasrt(1))) then - write(6,6679) ns,idasrt(1),rsmc(idasrt(1)),idasrt(ns), - 1 rsmc(idasrt(ns)),nsame - 6679 format('...For ns=',i3,' a new observing rsmc has been detected.', - 1 ' Index,rsmc (first,new)=',2(i3,1x,a)/4x,'Total number ', - 2 'of observed records=',i3,' We insert a relocation flag ', - 3 'in the new record.') - bufinx=ovrrec(indsam(idasrt(ns))) - relocx='R' - ovrrec(indsam(idasrt(ns)))=bufinx - write(6,5509) indsam(idasrt(ns)),bufinx - 5509 format('...Record index and corrected record are:',i3/4x,a) - endif - enddo - - IF(IBANG .NE. 0) THEN - STMIDZ=STMID(IBANG) - RSMCZ=RSMC(IBANG) - LNRSMC=INDEX(RSMCZ,' ')-1 - WRITE(6,657) LNRSMC - 657 FORMAT('...BANG STORM EXISTS: STORE RSMC AND STORM ID FROM A ', - 1 'BANG RECORD, LENGTH IS:',I2) - - NWSLOT=0 - DO NAD=1,NWRSMC - NWSLOT=NWSLOT+1 - - IF(LNRSMC+NWSLOT .LE. 4) THEN - DO NRSZ=1,NRSMCX - IF(RSMCAL(NALMX+NAD) .EQ. RSMCID(NRSZ)) THEN -c write(6,6541) nad,nalmx,nwslot,lnrsmc+nwslot,nrsz, -c 1 rsmcal(nalmx+nad),rsmcid(nrsz) -c6541 format('...debugging, nad,nalmx,nwslot,lnrsmc+nwslot,nrsz,', -c 1 'rsmcal(nalmx+nad),rsmcid(nrsz)'/4x,5i4,2(1x,a)) - NRSMCF=NRSZ - GO TO 6561 - ENDIF - ENDDO - 6561 CONTINUE - RSMCZ(LNRSMC+NWSLOT:LNRSMC+NWSLOT)=RSMCAP(NRSMCF) - WRITE(6,6563) RSMCAP(NRSMCF),RSMCZ - 6563 FORMAT('...ADDING RSMC=',A,' TO AN ALREADY DEFINED BANG STORM ', - 1 'RSMC. UPDATED RSMC=',A) - - ELSE - WRITE(6,6567) NWSLOT,LNRSMC,NWRSMC - 6567 FORMAT('###INSUFFICIENT SPACE TO ADD NEW RSMC, NWSLOT,LNRSMC,', - 1 'NWRSMC=',3I3) - ENDIF - ENDDO - - ELSE - -C IN THIS CASE, NO OBSERVERS ARE BANG RECORDS AND THE STORM IS -C NOT IN THE ALIAS FILE. AN ALIAS RECORD MUST BE CREATED AND -C WRITTEN TO THE ALIAS FILE - - WRITE(6,659) IDASRT(1),STMID(IDASRT(1)),STMNAM(IDASRT(1)) - 659 FORMAT(/'...NO BANG STORMS EXIST. EARLIEST RECORD IS:',I3, - 1 '. STORM ID IS: ',A,' STORM NAME IS: ',A) - -C SUBSTITUTE THE ID OF THE FIRST OBSERVING RSMC AND CONSTRUCT -C A UNIFIED RSMC. SUBSTITUTE STORM NAME IF FIRST OBSERVATION -C DOES NOT HAVE NAMELESS AS A STORM NAME. - - RSMCZ=RSMC(IDASRT(1)) - STMIDZ=STMID(IDASRT(1)) - STMNMZ=STMNAM(IDASRT(1)) - -C FIRST TWO RSMC SLOTS - - IF(RSMCZ(1:1) .EQ. '!') THEN - WRITE(6,663) RSMC(IDASRT(1))(1:2) - 663 FORMAT('...THIS RECORD IS A MULTIPLY OBSERVED STORM. COPY THE ', - 1 'RSMCAP AND BANG FROM THIS RECORD=',A) - RSMCZ(1:2)=RSMC(IDASRT(1))(1:2) - DO NRSZ=1,NRSMCX - IF(RSMC(IDASRT(1))(2:2) .EQ. RSMCAP(NRSZ)) THEN - NRSST=NRSZ - GO TO 661 - ENDIF - ENDDO - 661 CONTINUE - - ELSE - WRITE(6,667) - 667 FORMAT('...THIS RECORD IS A SINGLY OBSERVED STORM. COPY THE ', - 1 'RSMC FROM THIS RECORD.') - RSMCZ(1:1)='!' - DO NRSZ=1,NRSMCX - IF(RSMC(IDASRT(1)) .EQ. RSMCID(NRSZ)) THEN - NRSST=NRSZ - GO TO 671 - ENDIF - ENDDO - 671 CONTINUE - RSMCZ(2:2)=RSMCAP(NRSST) - ENDIF - -C REMAINING RSMC SLOTS - - NID=2 - RSMCZ(3:4)=' ' - DO NRS=1,NRSMC - IF(RSMCID(IRSMC(NRS)) .NE. RSMCID(NRSST)) THEN - NID=NID+1 - IF(NID .GT. 4) GO TO 680 - RSMCZ(NID:NID)=RSMCAP(IRSMC(NRS)) - WRITE(6,679) RSMCAP(IRSMC(NRS)),IRSMC(NRS),NID,RSMCZ - 679 FORMAT('...ADDING RSMCAP ',A,' FOR RSMC ',I2,' IN SLOT ',I3, - 1 ' RSMCZ=',A) - ENDIF - 680 CONTINUE - ENDDO - - ENDIF - - ENDIF - -C HAS THE STORM BEEN NAMED BY SOMEONE OVER ITS HISTORY? IF SO, -C SUBSTITUTE THE NAME FOR THE ALIAS FILE. - - IF(STMNMZ .EQ. 'NAMELESS') THEN - DO NS=1,NSAME - IF(STMNAM(NS) .NE. 'NAMELESS') THEN - STMNMZ=STMNAM(NS) - WRITE(6,6689) STMNAM(NS),NS - 6689 FORMAT('###STORM NAMELESS WILL BE RENAMED ',A,' IN THE ALIAS ', - 1 'FILE. INDEX OF NAMED STORM=',I3) - IRITAL=1 - GO TO 6691 - ENDIF - ENDDO - 6691 CONTINUE - ENDIF - -C IF NECESSARY, WRITE ALIAS RECORD AND SUBSTITUTE UNIFIED RSMC AND -C STORM ID. - - IF(IRITAL .EQ. 1) THEN - WRITE(6,681) STMNMZ,STMIDZ,RSMCZ - 681 FORMAT(/'...WRITING A UNIFIED ALIAS RECORD FOR STORM NAME=',A, - 1 '. STORM ID AND UNIFIED RSMC ARE:',2(1X,A)) - NALADD=NALADD+1 - STIDAL(1)=STMIDZ - RSMCAL(1)=RSMCZ - DAYZ=-999.0 - CALL AKASAV(NALADD,NALMXZ,DAYZ,STMNMZ,RSMCAL,STIDAL) - ENDIF - - DO NS=1,NSAME - BUFINX=OVRREC(INDSAM(NS)) -C WRITE(6,683) NS,INDSAM(NS),BUFINX -C 683 FORMAT('...SUBSTITUTING UNIFIED RSMC AND STMID. NS,INDSAM,RECORD', -C 1 ' ARE:',2I3/' ...',A) - STMIDX=STMIDZ - RSMCX=RSMCZ - OVRREC(INDSAM(NS))=BUFINX -C WRITE(6,683) NS,INDSAM(NS),BUFINX - ENDDO - - ELSE - WRITE(6,693) - 693 FORMAT(/'...ONLY 1 RSMC HAS OBSERVED STORM. THERE IS NO NEED TO', - 1 ' UNIFY THE RSMC AND STORM ID IF STORM IDS ARE THE SAME.' - 2 /4X,'WE PROCEED TO CHECK STORM ID CONSISTENCY.') - - ISAME=0 - DO NS=2,NSAME - IF(STMID(NS) .NE. STMIDZ) THEN - IF(ABS(SRTDAY(NS)-SRTDAY(1)) .LE. DTOVR) THEN - ISAME=ISAME+1 - IETYP=6 - WRITE(6,1683) DTOVR,INDSAM(NS),INDSAM(1),STMID(NS),STMIDZ, - 1 STMNAM(NS),STMNMZ,SRTDAY(NS),SRTDAY(1), - 2 OVRREC(INDSAM(NS)),OVRREC(INDSAM(1)) - 1683 FORMAT(/'###TWO STORMS OBSERVED BY THE SAME RSMC WITH TIMES ', - 1 'DIFFERING BY LESS THAN ',F5.1,' DAYS AND DIFFERENT ', - 2 'STORM ID.'/4X,'THESE ARE PROBABLY THE SAME STORM. IN ', - 3 'ORDER (NS,1), INDEX, STORM ID, STORM NAME, DAY AND ', - 4 'RECORD ARE:'/10X,2I5,4(2X,A),2F12.3/2(4X,A/)) - ELSE - WRITE(6,1687) DTOVR,INDSAM(NS),INDSAM(1),STMID(NS),STMIDZ, - 1 STMNAM(NS),STMNMZ,SRTDAY(NS),SRTDAY(1), - 2 OVRREC(INDSAM(NS)),OVRREC(INDSAM(1)) - 1687 FORMAT(/'###TWO STORMS OBSERVED BY THE SAME RSMC WITH TIMES ', - 1 'DIFFERING BY MORE THAN ',F5.1,' DAYS AND DIFFERENT ', - 2 'STORM ID.'/4X,'THESE ARE PROBABLY NOT THE SAME STORM.', - 3 ' IN ORDER (NS,1), INDEX, STORM ID, STORM NAME, DAY ', - 4 'AND RECORD ARE:'/10X,2I5,4(2X,A),2F12.3/2(4X,A/)) - ENDIF - ENDIF - ENDDO - -C STORMS HAVE ALREADY BEEN SORTED IN CHRONOLOGICAL ORDER SO -C SUBSTITUTE THE STORM ID OF THE EARLIEST STORM. - - IF(ISAME .NE. 0) THEN - - WRITE(6,1695) IDASRT(1),STMID(IDASRT(1)),STMNAM(IDASRT(1)) - 1695 FORMAT(/'...EARLIEST RECORD IS:',I3,'. STORM ID IS: ',A,' STORM ', - 1 'NAME IS: ',A/4X,'THIS STORM ID AND RSMC WILL BE COPIED ', - 2 'TO THE FOLLOWING STORMS:') - DO NS=1,NSAME - BUFINX=OVRREC(INDSAM(NS)) - STMIDX=STMID(IDASRT(1)) - RSMCX =RSMC (IDASRT(1)) - OVRREC(INDSAM(NS))=BUFINX - IF(INDSAM(NS) .LE. NOKAY) IFRSMC(NUMOKA(INDSAM(NS)))=-IETYP - WRITE(6,1697) NS,INDSAM(NS),OVRREC(INDSAM(NS)) - 1697 FORMAT('...',I3,'...',I3,'...',A) - ENDDO - ENDIF - - ENDIF - - ELSE - WRITE(6,697) NOK,OKAREC(NOK) - 697 FORMAT('...OKAY RECORD ',I3,' IS UNIQUE AMONG OKAY AND SHORT-', - 1 'TERM HISTORY RECORDS. NO FURTHER PROCESSING WILL BE ', - 2 'DONE. RECORD IS:'/4X,'...',A,'...') - ENDIF - - 700 CONTINUE - ENDDO - CALL AKADMP(IUNTAL) - -C SAVE AS BAD RECORDS THOSE ORIGINAL RECORDS THAT HAVE BEEN -C UNIFIED, BUT NOT MULTIPLY OBSERVED, SO THAT THEY CAN BE -C COPIED TO THE ORIGINAL SHORT-TERM HISTORY FILE LATER BY RITSTH. - - DO NOK=1,NOKAY - - IF(OKAREC(NOK)(1:1) .NE. '!' .AND. - 1 OVRREC(NOK)(1:1) .EQ. '!') THEN - IETYP=30 - IFRSMC(NUMOKA(NOK))=IETYP - NADD=NADD+1 - NUNIFY=NUNIFY+1 - NUMBAD(NADD+NBAD)=NUMOKA(NOK) - BADREC(NADD+NBAD)=OKAREC(NOK) - ENDIF - - OKAREC(NOK)=OVRREC(NOK) - ENDDO - - WRITE(6,711) IUNTOK - 711 FORMAT(/'...WE HAVE UNIFIED ALL RECORDS AND ARE WRITING THEM TO ', - 1 'THE SCRATCH FILE.'/4X,'THEY WILL BE WRITTEN TO THE ', - 2 'ALIAS SHORT-TERM HISTORY FILE IF UPDATING IS REQUIRED.'/ - 3 4X,'OLD ALIAS SHORT-TERM HISTORY RECORDS WRITTEN TO ', - 4 'IUNTOK=',I3,' ARE:') - NRCOVR=0 - DO NHA=NOKAY+1,NCHECK - IF(IOVRLP(NHA) .NE. -999) THEN - NRCOVR=NRCOVR+1 - WRITE(IUNTOK,521) OVRREC(NHA) - WRITE(6,719) NRCOVR,OVRREC(NHA) - 719 FORMAT('...',I3,'...',A,'...') - OVRREC(NRCOVR)=OVRREC(NHA) - ENDIF - ENDDO - WRITE(6,721) NRCOVR - 721 FORMAT(/'...IMPORTANT NOTE: THE UPDATED OLD ALIAS SHORT-TERM ', - 1 'HISTORY RECORDS ARE RETURNED TO THE MAIN PROGRAM IN ', - 2 'OVRREC.'/4X,'THEY WILL BE COPIED INTO THE SCRATCH FILE ', - 3 '(INSTEAD OF USING CPYREC) WHEN FILES=F.'/4X,'THE NUMBER', - 4 ' OF RECORDS RETURNED IS:',I4) - -C COPY NEW ALIAS FILE TO AKAVIT. DON'T COPY RECORDS -C THAT ALREADY EXIST IN AKAVIT. - - REWIND IUNTAN - CALL AKACPY(IUNTAN,IUNTAL) - -C DO NOT CLEAR OUT THE NEW ALIAS FILE; AKAVIT MAY BE CHANGED BY -C RCNCIL LATER - - WRITE(6,1001) NOKAY,-NSUBR,-NUNIFY,NADD,NTEST, - 1 (ERCRS(NER),NER=1,NERCRS) - 1001 FORMAT(//'...RESULTS OF THE MULTIPLE RSMC CHECK ARE: NOKAY=',I4, - 1 ' NSUBR=',I4,' NUNIFY=',I4,' AND NADD=',I4,' FOR A ', - 2 'TOTAL OF ',I4,' RECORDS.'//4X,'ERROR CODES ARE:'/(6X,A)) - WRITE(6,1003) - 1003 FORMAT(/'...OKAY RECORDS ARE:',100X,'ERC'/) - DO NOK=1,NOKAY - WRITE(6,1009) NOK,NUMOKA(NOK),OKAREC(NOK),-IFRSMC(NUMOKA(NOK)) - 1009 FORMAT(3X,I4,'...',I4,'...',A,'...',I3) - ENDDO - IF(NADD .GT. 0) WRITE(6,1011) (NBAD+NBA,NUMBAD(NBAD+NBA), - 1 BADREC(NBAD+NBA), - 2 IFRSMC(NUMBAD(NBAD+NBA)), - 3 NBA=1,NADD) - 1011 FORMAT(/' ADDED BAD RECORDS ARE:',95X,'ERC'/(3X,I4,'...',I4, - 1 '...',A,'...',I3)) - NBAD=NBAD+NADD - - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: BASNCK CHECKS FOR PROPERLY IDENTIFIED BASINS -C PRGMMR: S. LORD ORG: NP22 DATE: 1992-02-24 -C -C ABSTRACT: INPUT RECORDS ARE CHECKED FOR PROPERLY IDENTIFIED BASINS. -C THE INPUT LATIDUDE AND LONGITUDE ARE CHECKED AGAINST -C TABULATED MIN AND MAX LATITUDES AND LONGITUDES FOR THE -C SPECIFIED BASIN. INCONSISTENCIES ARE FLAGGED. -C -C PROGRAM HISTORY LOG: -C 1992-02-19 S. LORD -C -C USAGE: CALL BASNCK(STMIDX,RLTSTM,RLNSTM,NBA,IPRT,IER) -C INPUT ARGUMENT LIST: -C STMIDX - 3 CHARACTER STORM ID. THIRD CHARACTER CARRIES BASIN -C IDENTIFIER -C IPRT - PRINT LEVEL. =1 FOR PRINTOUT; =0 FOR NO PRINTOUT -C -C OUTPUT ARGUMENT LIST: -C NBA - BASIN NUMBER CORRESPONDING TO THE INPUT LAT/LON -C IER - ERROR RETURN CODE: -C 3: STORM IS NOT IN A BASIN DEFINED BY THE TABULATED -C MINIMUM AND MAXIMUM LAT/LON -C 11: BASIN AND BASIN BOUNDARIES DO NOT MATCH. THIS DOES -C NOT NECESSARILY MEAN THERE IS AN ERROR SINCE THE -C STORM COULD HAVE ORIGINATED IN THAT BASIN AND MOVED -C TO ANOTHER -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE BASNCK(STMIDX,RLTSTM,RLNSTM,NBA,IPRT,IER) - - SAVE - - CHARACTER*(*) STMIDX - - PARAMETER (NBASIN=11) - - CHARACTER IDBASN*1 - - DIMENSION IDBASN(NBASIN),BSLTMN(NBASIN),BSLTMX(NBASIN), - 1 BSLNMN(NBASIN),BSLNMX(NBASIN) - - DATA IDBASN/'L','E','C','W','O','T','U','P','S','B','A'/ - -C BASIN BOUNDARIES: MIN AND MAX LATITUDES; MIN AND MAX LONGITUDES -C NOTE: SOME BOUNDARIES MAY OVERLAP, BUT SCANNING IS IN ORDER OF -C DECREASING PRIORITY SO BASINS SHOULD BE CAPTURED PROPERLY - - DATA BSLTMN/3*-20.,2*0.0,20.,3*-50.,2*0.0/, - 1 BSLTMX/4*60.,25.,40.,3*0.0,2*30./, - 2 BSLNMN/260.,220.,180.,2*100.,110.,90.,160.,40.,75.,40./, - 3 BSLNMX/350.,260.,220.,180.,125.,140.,160.,290.,90.,100.,75./ - - - IER=0 - -C RECOVER BASIN NUMBER FROM STORM ID -C WE ASSUME ALL BASIN IDS ARE VALID HERE - - DO NB=1,NBASIN - IF(STMIDX(3:3) .EQ. IDBASN(NB)) THEN - NBA=NB - GO TO 11 - ENDIF - ENDDO - 11 CONTINUE - - IF(RLTSTM .LT. BSLTMN(NBA) .OR. RLTSTM .GT. BSLTMX(NBA) .OR. - 1 RLNSTM .LT. BSLNMN(NBA) .OR. RLNSTM .GT. BSLNMX(NBA)) THEN - IF(IPRT .EQ. 1) WRITE(6,21) STMIDX,NBA,RLTSTM,RLNSTM,BSLTMN(NBA), - 1 BSLTMX(NBA),BSLNMN(NBA),BSLNMX(NBA) - 21 FORMAT(/'******BASIN IDENTIFIER AND LAT/LON ARE INCONSISTENT. A ', - 1 'POSSIBLE ERROR EXISTS OR THE STORM ORIGINATED IN A ', - 2 'DIFFERENT BASIN.'/4X,'STMIDX,NBA,RLTSTM,RLNSTM,BSLTMN(', - 3 'NBA),BSLTMX(NBA),BSLNMN(NBA),BSLNMX(NBA)='/4X,A,I3,6F8.1) - IER=11 - -C IN WHICH BASIN IS THE STORM REALLY LOCATED? - - DO NB=1,NBASIN - IF(RLTSTM .GE. BSLTMN(NB) .AND. RLTSTM .LE. BSLTMX(NB) .AND. - 1 RLNSTM .GE. BSLNMN(NB) .AND. RLNSTM .LE. BSLNMX(NB)) THEN - NBA=NB - RETURN - ENDIF - ENDDO - IER=3 - WRITE(6,51) STMIDX,NBA,RLTSTM,RLNSTM,BSLTMN(NBA), - 1 BSLTMX(NBA),BSLNMN(NBA),BSLNMX(NBA) - 51 FORMAT(/'******STORM=',A,' IS NOT IN A DEFINED BASIN. NBA,', - 1 'RLTSTM,RLNSTM,BSLTMN(NBA),BSLTMX(NBA),BSLNMN(NBA),', - 2 'BSLNMX(NBA)='/I3,6F8.1) - ENDIF - - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: AKASUB HANDLES STORAGE AND WRITING ALIAS RECORDS -C PRGMMR: S. LORD ORG: NP22 DATE: 1992-03-05 -C -C ABSTRACT: STORES ALIAS RECORDS UNTIL THEY ARE READY TO BE DUMPED TO -C DISK. DUMPING TO DISK INVOLVES FINDING THE ONE RECORD FOR -C EACH STORM THAT HAS THE EARLIEST DATE. COPYING FROM ONE -C UNIT TO ANOTHER ALSO INVOLVES FINDING THE EARLIEST DATE. -C FUNCTIONS ARE PERFORMED BY 3 SEPARATE ENTRIES AS SHOWN -C BELOW. AKASUB IS JUST A DUMMY HEADING. -C -C PROGRAM HISTORY LOG: -C 1992-03-05 S. LORD -C -C USAGE: CALL AKASUB(IUNITI,IUNITO,NAKREC,NAKA,DAYZ,AKANAM,AKRSMC, -C AKSTID) -C CALL AKASAV(NAKREC,NAKA,DAYZ,AKANAM,AKRSMC,AKSTID): STORES -C RECORDS -C CALL AKADMP(IUNITO): DUMPS RECORDS TO DISK -C CALL AKACPY(IUNITI,IUNITO): COPIES RECORDS FROM IUNITI TO -C IUNITO -C INPUT ARGUMENT LIST: -C IUNITI - INPUT UNIT NUMBER. FILE POSITIONING MUST BE HANDLED -C - OUTSIDE THIS ROUTINE. -C IUNITO - OUTPUT UNIT NUMBER. FILE POSITIONING MUST BE HANDLED -C - OUTSIDE THIS ROUTINE. -C NAKREC - RECORD NUMBER, FIRST RECORD IS 1 AND SO ON. -C NAKA - NUMBER OF ALIASES IN EACH RECORD. FIRST ALIAS IS -C - USUALLY A COMBINED OR UNIFIED ALIAS BEGINNING WITH A !. -C DAYZ - FRACTIONAL DAY FOR EACH RECORD -C AKANAM - STORM NAME (CHARACTER*9) -C AKRSMC - ARRAY CONTAINING ALL RSMCS (CHARACTER*4) -C AKSTID - ARRAY CONTAINING ALL STORM IDS (CHARACTER*3) -C -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE AKASUB(IUNITI,IUNITO,NAKREC,NAKA,DAYZ,AKANAM,AKRSMC, - 1 AKSTID,ICSTNM,ICRSMC,ICSTID,IFAKA) - - PARAMETER (MAXSTM=70) - PARAMETER (NOVRMX=MAXSTM) - PARAMETER (MAXAKA=10) - - SAVE - - DIMENSION NUMSAV(MAXSTM),SAVNAM(MAXSTM),SAVRSM(MAXSTM,MAXAKA), - 1 SAVID(MAXSTM,MAXAKA),SAVDAY(MAXSTM),INDSAM(MAXSTM) - - DIMENSION AKRSMC(NOVRMX),AKSTID(NOVRMX),RSMCCP(MAXAKA), - 1 STIDCP(MAXAKA) - - CHARACTER SAVNAM*9,SAVRSM*4,SAVID*3,STMNMX*9,RSMCCP*4,STIDCP*3 - CHARACTER*(*) AKANAM,AKRSMC,AKSTID,ICSTNM,ICRSMC,ICSTID - - LOGICAL FOUND - -C----------------------------------------------------------------------- -C THIS ENTRY STORES ALIAS ENTRIES - - ENTRY AKASAV(NAKREC,NAKA,DAYZ,AKANAM,AKRSMC,AKSTID) - - WRITE(6,1) NAKREC - 1 FORMAT(/'...ENTERING AKASAV TO STORE RECORD #',I3,'. RECORD IS:') - - NAKSAV=NAKREC - NUMSAV(NAKSAV)=NAKA - SAVNAM(NAKSAV)=AKANAM - SAVDAY(NAKSAV)=DAYZ - - SAVRSM(NAKSAV,1:NAKA)=AKRSMC(1:NAKA) - SAVID (NAKSAV,1:NAKA)=AKSTID(1:NAKA) - WRITE(6,11) NAKA,AKANAM,(AKRSMC(NAL),AKSTID(NAL),NAL=1,NAKA) - 11 FORMAT('...',I1,1X,A9,10(1X,A4,1X,A3)) - - RETURN - -C----------------------------------------------------------------------- -C THIS ENTRY DUMPS ALIAS ENTRIES. ONLY THE EARLIEST ENTRY FOR -C EACH STORM IS SAVED. - - ENTRY AKADMP(IUNITO) - - WRITE(6,21) IUNITO - 21 FORMAT(/'...ENTERING AKADMP TO WRITE EARLIEST UNIQUE ALIAS ', - 1 'RECORDS TO UNIT',I3,'. STORED RECORDS ARE:'/10X,'NAL', - 2 4X,'NAME',12X,'JDAY',5X,'RSMC',2X,'STMID') - DO NAK=1,NAKSAV - WRITE(6,23) NAK,NUMSAV(NAK),SAVNAM(NAK),SAVDAY(NAK), - 1 (SAVRSM(NAK,NS),SAVID(NAK,NS),NS=1,NUMSAV(NAK)) - 23 FORMAT(3X,I3,2X,I3,4X,A,3X,F12.3,10(3X,A)) - ENDDO - - NREC=0 - DO NAK=1,NAKSAV - IF(NUMSAV(NAK) .GT. 0) THEN - IFND=1 - INDSAM(IFND)=NAK - WRITE(6,27) NAK,IFND,SAVNAM(NAK),SAVDAY(NAK),(SAVRSM(NAK,NSAV), - 1 SAVID(NAK,NSAV),NSAV=1,NUMSAV(NAK)) - 27 FORMAT(/'...LOOKING FOR MATCHING STORM NAMES FOR INDEX=',I3, - 1 ', IFND=',I3,' STORM NAME= ',A,' WITH DAY=',F12.3/4X, - 2 'ALIASES ARE: ',10(A,1X,A,'; ')) - WRITE(6,29) - 29 FORMAT('...IMPORTANT NOTE: ALIAS RECORDS WITH DATE=-999.0 WILL ', - 1 'ALWAYS BE COPIED.') - - DO NSAME=NAK+1,NAKSAV - IF(NUMSAV(NSAME) .GT. 0) THEN - FOUND=.FALSE. - -C SAME STORM NAME IF NOT NAMELESS - - IF(SAVNAM(NAK) .NE. 'NAMELESS' .AND. - 1 SAVNAM(NSAME) .NE. 'NAMELESS' .AND. - 2 SAVNAM(NAK) .EQ. SAVNAM(NSAME)) THEN - FOUND=.TRUE. - -C DIRECT COMPARISON OF STORM IDS FOR THE SAME RSMC - - ELSE - DO NAL2=1,NUMSAV(NAK) - DO NAL1=1,NUMSAV(NSAME) - IF(SAVRSM(NSAME,NAL1) .EQ. SAVRSM(NAK,NAL2) .AND. - 1 SAVID (NSAME,NAL1) .EQ. SAVID (NAK,NAL2)) FOUND=.TRUE. - ENDDO - ENDDO - ENDIF - - IF(FOUND) THEN - NUMSAV(NSAME)=-IABS(NUMSAV(NSAME)) - IFND=IFND+1 - INDSAM(IFND)=NSAME - WRITE(6,59) NSAME,IFND,SAVDAY(NSAME) - 59 FORMAT(/'...STORM NAME FOR INDEX=',I3,' MATCHES. IFND=',I3,' AND', - 1 ' DAY=',F12.3) - ENDIF - ENDIF - ENDDO - -C SINGLE OCCURRENCE - - IF(IFND .EQ. 1) THEN - NW=NAK - DAYMNZ=SAVDAY(NAK) - STMNMX=SAVNAM(NAK) - WRITE(6,61) NW,SAVNAM(NAK),SAVID(NAK,1) - 61 FORMAT('...INDEX',I3,' WITH NAME=',A,' AND ID=',A,' HAS ONLY A ', - 1 'SINGLE OCCURRENCE.') - -C IF THERE ARE MULTIPLE OCCURRENCES, WRITE ONLY THE EARLIEST RECORD, -C BUT SUBSTITUTE IN THE STORM NAME IF IT IS NOT NAMELESS. - - ELSE - WRITE(6,63) SAVNAM(NAK),SAVID(NAK,1) - 63 FORMAT('...STORM NAME=',A,' AND ID=',A,' HAS MULTIPLE ', - 1 'OCCURRENCES. WE LOOK FOR THE FIRST OCCURRENCE.') - DAYMNZ=1.E10 - STMNMX='NAMELESS' - DO IF=1,IFND - IF(STMNMX .EQ. 'NAMELESS' .AND. - 1 SAVNAM(INDSAM(IF)) .NE. 'NAMELESS') - 1 STMNMX=SAVNAM(INDSAM(IF)) - IF(SAVDAY(INDSAM(IF)) .LT. DAYMNZ) THEN - DAYMNZ=SAVDAY(INDSAM(IF)) - NW=INDSAM(IF) - ENDIF - ENDDO - ENDIF - -C WRITE THE RECORD - - NREC=NREC+1 - WRITE(IUNITO,81) IABS(NUMSAV(NW)),STMNMX,(SAVRSM(NW,NAL), - 1 SAVID(NW,NAL),NAL=1,IABS(NUMSAV(NW))) - 81 FORMAT(I1,1X,A9,10(1X,A4,1X,A3)) - WRITE(6,83) NREC,DAYMNZ,NW,IUNITO,STMNMX, - 1 IABS(NUMSAV(NW))-1,(SAVRSM(NW,NAL),SAVID(NW,NAL), - 2 NAL=1,IABS(NUMSAV(NW))) - 83 FORMAT('...ADDING NEW ALIAS RECORD ',I3,' WITH DATE=',F12.3, - 1 ' AND INDEX',I3,' TO UNIT ',I3,' FOR STORM NAME=',A,'.'/4X, - 2 'NUMBER OF OBSERVERS IS:',I2,' RSMC, STORM IDS ARE:'/10X, - 3 10(1X,A4,1X,A3)) - - ENDIF - ENDDO - WRITE(6,91) NREC,IUNITO - 91 FORMAT(/'...',I3,' RECORDS HAVE BEEN WRITTEN TO UNIT',I3) - - RETURN - -C----------------------------------------------------------------------- - - ENTRY AKACPY(IUNITI,IUNITO) - - NCPYAL=0 - WRITE(6,101) IUNITI,IUNITO - 101 FORMAT(/'...ENTERING AKACPY TO COPY ALIAS RECORDS FROM IUNITI=', - 1 I3,' TO IUNITO=',I3,':') - - 110 READ(IUNITI,81,END=180) NALMX,STMNMX,(RSMCCP(NAL),STIDCP(NAL), - 1 NAL=1,NALMX) - - DO NALZ=1,NAKSAV - FOUND=.FALSE. - -C SAME STORM NAME IF NOT NAMELESS - - IF(STMNMX .NE. 'NAMELESS' .AND. - 1 SAVNAM(NALZ) .NE. 'NAMELESS' .AND. - 2 STMNMX .EQ. SAVNAM(NALZ)) THEN - FOUND=.TRUE. - GO TO 171 - -C DIRECT COMPARISON OF STORM IDS FOR THE SAME RSMC - - ELSE - DO NAL2=1,NALMX - DO NAL1=1,NUMSAV(NALZ) - IF(SAVRSM(NALZ,NAL1) .EQ. RSMCCP(NAL2) .AND. - 1 SAVID (NALZ,NAL1) .EQ. STIDCP(NAL2)) FOUND=.TRUE. - ENDDO - ENDDO - ENDIF - - ENDDO - 171 CONTINUE - - IF(.NOT. FOUND) THEN - NCPYAL=NCPYAL+1 - WRITE(IUNITO,81) NALMX,STMNMX,(RSMCCP(NAL),STIDCP(NAL), - 1 NAL=1,NALMX) - WRITE(6,175) NALMX,STMNMX,(RSMCCP(NAL),STIDCP(NAL), - 1 NAL=1,NALMX) - 175 FORMAT('...',I1,1X,A9,10(1X,A4,1X,A3)) - - ELSE - WRITE(6,177) STMNMX - 177 FORMAT('...STORM ',A,' IS ALREADY IN OUTPUT ALIAS FILE. IT WILL ', - 1 'NOT BE COPIED.') - ENDIF - - GO TO 110 - - 180 CONTINUE - WRITE(6,181) NCPYAL,IUNITI,IUNITO - 181 FORMAT('...',I3,' RECORDS COPIED FROM UNIT',I3,' TO UNIT ',I3,'.') - - RETURN - -C----------------------------------------------------------------------- - - ENTRY AKAFND(IUNITI,ICSTNM,ICRSMC,ICSTID,NAKA,AKANAM,AKRSMC, - 1 AKSTID,IFAKA) - - ifaka=0 - irec=0 - rewind iuniti - 210 read(iuniti,81,end=240) nalmx,stmnmx,(rsmccp(nal),stidcp(nal), - 1 nal=1,min(nalmx,maxaka)) - irec=irec+1 - do nal=1,nalmx - if(icrsmc .eq. rsmccp(nal) .and. - 1 icstid .eq. stidcp(nal)) then - ifaka=irec - go to 240 - endif - enddo - go to 210 - 240 continue - - if(ifaka .gt. 0) then - - if(nalmx .gt. naka) then - write(6,241) nalmx,naka - 241 format('******Insufficient storage to return aliases. nalmx,', - 1 'naka=',2i5,' Abort.') - call abort1(' AKAFND',241) - endif - - naka=nalmx - akanam=stmnmx - akrsmc(1:nalmx)=rsmccp(1:nalmx) - akstid(1:nalmx)=stidcp(1:nalmx) -c write(6,251) naka,ifaka,icstnm,icrsmc,icstid,akanam, -c 1 (akrsmc(nal),akstid(nal),nal=1,naka) -c 251 format('...akafnd results: # of aliases=',i4,' matching alias ', -c 1 'record #=',i4,' input storm name,rsmc,id=',3(a,1x)/4x, -c 2 'matched name,rsmc,id=',a/(4x,10(1x,a4,1x,a3))) - - else -c write(6,271) icstnm,icrsmc,icstid -c 271 format('###Storm not found in akavit file, storm name,rsmc,', -c 1 'id are:',3(a,1x)) - endif - return - -C----------------------------------------------------------------------- - - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: TCCLIM TROPICAL CYCLONE CLIMATOLOGICAL VALUES -C PRGMMR: S. LORD ORG: NP22 DATE: 1992-04-07 -C -C ABSTRACT: RETURNS CLIMATOLOGICAL VALUES FOR SOME TROPICAL CYCLONE -C PROPERTIES. PROPERTIES ARE: CENTRAL PRESSURE OF STORM; -C ENVIRONMENTAL PRESSURE ON THAT ISOBAR RADIUS OF THE OUTERMOST -C CLOSED ISOBAR A SECOND ENTRY CONTAINS PRESSURE-WIND TABLES FOR -C THE ATLANTIC, EAST AND CENTRAL PACIFIC AND WEST PACIFIC BASINS. -C -C PROGRAM HISTORY LOG: -C 1992-04-07 S. LORD -C 1992-09-04 S. LORD ADDED PRESSURE WIND RELATIONSHIP -C -C USAGE: VALUE=TCCLIM(IVAR,IBASN) OR VALUE=TCPWTB(PRES,IBASN) -C INPUT ARGUMENT LIST: -C IVAR - VARIABLE NUMBER (7: CENTRAL PRESSURE) -C - (8: ENVIRONMENTAL PRESSURE) -C - (9: RADIUS OF OUTERMOST CLOSED ISOBAR) -C IBASN - BASIN NUMBER -C PRES - PRESSURE IN MB -C -C -C REMARKS: IVAR VALUES OF 7,8,9 ONLY ARE ALLOWED. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - FUNCTION TCCLIM(IVAR,IBASN) - - PARAMETER (NPRMAX=9) - - PARAMETER (NBASIN=11) - PARAMETER (ISECVR= 5,ITERVR=10) - PARAMETER (NSECVR=ITERVR-ISECVR) - - DIMENSION SECVCL(NBASIN,NSECVR-2),PRTABL(NBASIN,0:NPRMAX+1), - 1 VMTABL(NBASIN,0:NPRMAX+1) - - DATA SECVCL/3*940.0,3*930.0,2*970.0,3*960.0, - 1 3*1010.0,5*1008.0,3*1010.0, - 2 6*400.0,5*300.0/ - - DATA PRTABL/2*1020.,9*1020., 2*987.,9*976., - 2 2*979.,9*966., 2*970.,9*954., - 2 2*960.,9*941., 2*948.,9*927., - 3 2*935.,9*914., 2*921.,9*898., - 4 2*906.,9*879., 2*890.,9*858., - 5 2*850.,9*850./ - - DATA VMTABL/11*12.5,11*33.5,11*39.7,11*46.4,11*52.6,11*59.3, - 1 11*65.5,11*72.2,11*80.0,11*87.6,11*110./ - - ITABL=IVAR-(ISECVR+2)+1 - TCCLIM=SECVCL(IBASN,ITABL) - - RETURN - -C----------------------------------------------------------------------- - - ENTRY TCPWTB(PRESR,IBASN) - - DO IPR=1,NPRMAX - IF(PRESR .LE. PRTABL(IBASN,IPR-1) .AND. - 1 PRESR .GT. PRTABL(IBASN,IPR)) THEN - IPRZ=IPR - GO TO 11 - ENDIF - ENDDO - IPRZ=NPRMAX+1 - 11 CONTINUE - TCPWTB=VMTABL(IBASN,IPRZ-1)+ - 1 (VMTABL(IBASN,IPRZ)-VMTABL(IBASN,IPRZ-1))* - 2 (PRESR-PRTABL(IBASN,IPRZ-1))/ - 3 (PRTABL(IBASN,IPRZ)-PRTABL(IBASN,IPRZ-1)) - - RETURN - -C----------------------------------------------------------------------- - - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: RCNCIL MANAGES STORM CATALOG -C PRGMMR: S. LORD ORG: NP22 DATE: 1993-03-05 -C -C ABSTRACT: STORM RECORDS ARE CHECKED FOR PRESENCE IN THE STORM -C CATALOG UPDATED AND ADDED IF NECESSARY. -C -C PROGRAM HISTORY LOG: -C 1992-03-25 S. LORD -C 1992-08-25 S. LORD ADDED IER RETURN CODE -C -C USAGE: CALL RCNCIL(IUNTCA,IUNTCN,IUNTAL,NTEST,NOKAY,NBAD,MAXREC, -C MAXCKS,IEFAIL,IER,IECAT,NUMTST,NUMOKA,NUMBAD, -C TSTREC,BADREC,OKAREC) -C INPUT ARGUMENT LIST: -C IUNTCA - UNIT NUMBER FOR THE STORM CATALOG. -C -C IUNTCN - UNIT NUMBER FOR THE TEMPORARY CATALOG -C -C IUNTAL - UNIT NUMBER FOR ALIAS FILE. -C NTEST - NUMBER OF CURRENT RECORDS TO BE TESTED. -C MAXREC - MAXIMUM NUMBER OF RECORDS (STORAGE FOR ARRAYS) -C MAXCKS - MAXIMUM NUMBER OF ERROR CHECKS (STORAGE FOR ARRAYS) -C IEFAIL - ARRAY CONTAINING ERROR CODES FOR ERROR CHECKS -C NUMTST - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH RECORD -C - TO BE TESTED. -C IOVRLP - SCRATCH ARRAY. -C TSTREC - CHARACTER ARRAY CONTAINING RECORDS TO BE TESTED. -C -C OUTPUT ARGUMENT LIST: -C NOKAY - NUMBER OF RECORDS THAT PASSED THE RSMC CHECK. -C NBAD - NUMBER OF RECORDS THAT FAILED THE RSMC CHECK. -C IER - ERROR RETURN CODE. 0 EXCEPT IF LOGICAL INCONSISTENCY -C FOUND. -C IECAT - INTEGER ARRAY CONTAINING ERROR CODE FOR EACH INPUT -C - RECORD. SEE COMMENTS IN PGM FOR KEY TO ERROR CODES. -C NUMOKA - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH GOOD -C - RECORD. -C NUMBAD - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH BAD -C - RECORD. -C BADREC - CHARACTER ARRAY CONTAINING BAD RECORDS THAT FAILED -C - THE RSMC CHECK. -C OKAREC - CHARACTER ARRAY CONTAINING ALL RECORDS THAT PASSED -C - THE RSMC CHECK. -C -C INPUT FILES: -C UNIT 25 - ALIAS FILE CONTAINING EQUIVALENT STORM IDS -C - FOR STORMS THAT HAVE BEEN REPORTED BY MULTIPLE RSMC'S -C - DCB: LRECL=255, BLKSIZE=23400, RECFM=VB -C UNIT 26 - NEW ALIAS FILE CONTAINING EQUIVALENT STORM IDS -C - FOR STORMS THAT HAVE BEEN REPORTED BY MULTIPLE RSMC'S -C UNIT 27 - STORM CATALOG FILE -C - DCB: LRECL=255, BLKSIZE=23400, RECFM=VB -C UNIT 28 - SCRATCH STORM CATALOG FILE -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C UNIT 27 - SAME AS ABOVE -C UNIT 28 - SAME AS ABOVE -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE RCNCIL(IUNTCA,IUNTCN,IUNTAL,NTEST,NOKAY,NBAD,MAXREC, - 1 MAXCKS,IEFAIL,IER,IECAT,NUMTST,NUMOKA,NUMBAD, - 2 TSTREC,BADREC,OKAREC) - - PARAMETER (NERCRC=3) - PARAMETER (MAXSTM=70) - PARAMETER (NOVRMX=MAXSTM) - PARAMETER (NADDMX=10) - - CHARACTER*(*) TSTREC(0:NTEST),BADREC(MAXREC),OKAREC(NOKAY), - 1 ERCRCN(NERCRC)*60 - character stnmal*9,stidal*3,rsmcal*4,stnmca*9,stidca*3,rsmcca*4, - 1 stidad*3,rsmcad*4 - - PARAMETER (MAXCHR=95) - PARAMETER (MAXVIT=15) - PARAMETER (NBASIN=11) - PARAMETER (NRSMCX=4) - - CHARACTER BUFIN*1,RSMCZ*4,STMIDZ*3,STMNMZ*9,FSTFLZ*1,STMDPZ*1, - 1 LATNS*1,LONEW*1,FMTVIT*6,BUFINZ*100,RELOCZ*1,IDBASN*1, - 2 RSMCID*4,RSMCAP*1 - - DIMENSION IVTVAR(MAXVIT),ISTVAR(MAXVIT),IENVAR(MAXVIT) - - DIMENSION BUFIN(MAXCHR),IDBASN(NBASIN), - 1 FMTVIT(MAXVIT),RSMCID(NRSMCX),RSMCAP(NRSMCX) - - EQUIVALENCE (BUFIN(1),RSMCZ),(BUFIN(5),RELOCZ),(BUFIN(6),STMIDZ), - 1 (BUFIN(10),STMNMZ),(BUFIN(19),FSTFLZ), - 2 (BUFIN(37),LATNS),(BUFIN(43),LONEW), - 3 (BUFIN(95),STMDPZ),(BUFIN(1),BUFINZ) - - EQUIVALENCE (IVTVAR(1),IDATEZ),(IVTVAR(2),IUTCZ) - - DIMENSION IVTVRX(MAXVIT) - - DIMENSION RINC(5) - - CHARACTER BUFCK(MAXCHR)*1,RSMCX*4,RELOCX*1,STMIDX*3,BUFINX*100, - 1 STMNMX*9,LATNSX*1,LONEWX*1 - - DIMENSION IEFAIL(MAXREC,0:MAXCKS),IECAT(MAXREC),NUMOKA(NOKAY), - 1 NUMBAD(MAXREC),NUMTST(NTEST),MAXNO(NBASIN) - - dimension rsmcal(novrmx),stidal(novrmx), - 1 rsmcca(novrmx),stidca(novrmx), - 2 rsmcad(naddmx),stidad(naddmx) - - EQUIVALENCE (BUFCK(1),RSMCX),(BUFCK(5),RELOCX),(BUFCK(6),STMIDX), - 1 (BUFCK(1),BUFINX),(BUFCK(10),STMNMX), - 2 (BUFCK(35),LATNSX),(BUFCK(41),LONEWX) - - EQUIVALENCE (IVTVRX(1),IDATEX),(IVTVRX(2),IUTCX) - - DATA FMTVIT/'(I8.8)','(I4.4)','(I3.3)','(I4.4)',2*'(I3.3)', - 1 3*'(I4.4)','(I2.2)','(I3.3)',4*'(I4.4)'/, - 2 ISTVAR/20,29,34,39,45,49,53,58,63,68,71,75,80,85,90/, - 3 IENVAR/27,32,36,42,47,51,56,61,66,69,73,78,83,88,93/ - - DATA IDBASN/'L','E','C','W','O','T','U','P','S','B','A'/ - - DATA RSMCID/'NHC ','JTWC','ADRM','JMA '/, - 1 RSMCAP/'N','W','A','J'/ - - data maxno/nbasin*0/,minday/-1/,maxday/1/ - - DATA ERCRCN - 1 /'10: NEW STORM, ADD TO CATALOG ', - 2 '20: DUP. STORM ID IN CATALOG. CREATE NEW ID, APPEND CATALOG ', - 3 '30: STORM FOUND IN CATALOG, UPDATE CATALOG ENTRY '/ - - write(6,1) nokay - 1 format(//'...Entering rcncil to reconcile catalog, alias file ', - 1 'and new records. Number of okay records=',i4/4x,'Codes', - 2 ' are:'/10x,'1: No catalog entry'/13x,'Action: Append ', - 3 'catalog (first time appearance), record unchanged'/10x, - 4 '2: Duplicate storm id to primary catalog id'/13x, - 5 'Action: Find new, unique id which is one more than the', - 6 'largest id for that basin, modify record, append to ', - 7 'catalog'/10x,'3: Storm found in catalog,'/13x,'Action:', - 8 'update catalog entry') - rewind iuntca - rewind iuntcn - ncat=0 - ipack=10*maxrec - nadd=0 - ier=0 - - write(6,3) - 3 format(/'...Input records are:') - - do iec=1,ntest - iecat(iec)=ipack - write(6,5) iec,numtst(iec),tstrec(iec) - 5 format('...',i4,'...',i5,'...',a) - - enddo - - call sclist(iuntca) - call aklist(iuntal) - -c First pass through catalog to determine what should be done - - 20 continue - READ(IUNTCA,21,END=90) NALCA,STNMCA,IYMDMN,IUTCMN,IYMDMX,IUTCMX, - 1 (RSMCCA(NAL),STIDCA(NAL), - 2 NAL=1,MIN(NALCA,NOVRMX)) - 21 FORMAT(I1,1X,A9,2(1X,I8,1X,I4.4),10(1X,A4,1X,A3)) - ncat=ncat+1 - -c Determine maximum storm id in each basin from the catalog - - read(stidca(1)(1:2),23) idno - 23 format(i2) - do nb=1,nbasin - if(stidca(1)(3:3) .eq. idbasn(nb)) then - maxno(nb)=max0(maxno(nb),idno) - go to 31 - endif - enddo - 31 continue - -c Determine the catalog code for each record -c Codes and actions are: - -c Code 1: No catalog entry -c Action: Append catalog (first time appearance), record unchanged - -c Code 2: Duplicate storm id to primary catalog id, storm not -c found in catalog -c Action: Find new, unique id which is one more than the largest -c id for that basin, modify record, append to catalog - -c Code 3: Storm found in catalog -c Action: Update catalog date and other entries if necessary - -c Notes: codes from 1-3 are in order of increasing priority so that -c a code of 2 can be overridden by a code of 3 -c A final check on the consistency between the catalog and the alias -c (akavit) file is made. Any inconsistency is resolved in favor of t -c catalog but is flagged by a positive error code even though the -c record is retained. - -c Codes are packed so that the appropriate record number in the -c catalog is recoverable. Packing depends on maxrec, which -c should be a 4 digit number (1000 should work fine). - - do 80 nrec=1,ntest - -c Look at okay records and bad records with overland error codes. -c An error code for the rsmcck of 22 forces a look at the -c alias file since an entry has been made already. - - if(nrec .le. nokay .or. - 1 (nrec .gt. nokay .and. (iefail(numtst(nrec),4) .eq. 5 .or. - 2 iefail(numtst(nrec),4) .eq. 6 .or. - 3 iefail(numtst(nrec),6) .eq. 22))) then - - bufinz=tstrec(nrec) - - if(rsmcz(1:1) .ne. '!' .and. iefail(numtst(nrec),6) .ne. 22) - 1 then - nalsav=1 - stnmal=stmnmz - rsmcal(1)=rsmcz - stidal(1)=stmidz - - else -c write(6,35) nrec,stmnmz,rsmcz,stmidz -c 35 format('...Calling akafnd for record',i4,' with storm name,', -c 1 'rsmc,id=',3(a,1x),' to find all aliases.') - nalsav=novrmx - call akafnd(iuntal,stmnmz,rsmcz,stmidz,nalsav,stnmal,rsmcal, - 1 stidal,ifnd) - - if(ifnd .eq. 0) then - write(6,37) stmnmz,stmidz,rsmcz - 37 format('******Bang or overlapped storm not found in akavit file ', - 1 'when finding aliases. stmnmz,stmidz,rsmcz=',3(1x,a), - 2 ' abort') -c call abort1(' RCNCIL',37) - endif - - endif - - do nal=1,nalsav - -c Code 3: - -c if the record is nameless the entire storm id and rsmc -c must match - - IF(STMNMZ .NE. 'NAMELESS') THEN - - if(stnmca .eq. stnmal .and. - 1 stidca(1)(3:3) .eq. stidal(nal)(3:3)) then - iecat(nrec)=3*ipack+ncat - write(6,43) nrec,stnmal,stidal(nal),rsmcal(nal),iecat(nrec) - 43 format('...For nrec=',i5,' storm named=',a,' with id,rsmc=', - 1 2(a,1x),' is in catalog, iecat=',i6) - go to 80 - endif - ENDIF - - do nca=1,nalca - if(rsmcal(nal) .eq. rsmcca(nca) .and. - 1 stidal(nal) .eq. stidca(nca)) then - iecat(nrec)=3*ipack+ncat - write(6,47) nrec,nca,stnmal,stidal(nal),rsmcal(nal),iecat(nrec) - 47 format('...For nrec,nca=',2i5,' storm named=',a,' with id,rsmc=', - 1 2(a,1x),' is in catalog, iecat=',i6) - go to 80 - endif - enddo - enddo - - -c Code 2: now there is no exact match to the catalog - make sure the -c won't be a duplicate storm id - -c Possibilities are: -c 1) If both record and catalog are bang, RSMCCK may have changed th -c rsmc (e.g. added a new observing rsmc). We assume the storm is -c in the catalog (code 3). -c 2) If the catalog is a bang, and the record is not, the record is -c new storm (code 2) or the records has been processed by rsmcc -c but not yet by rcncil. Check the AKAVIT file and adjust the -c code accordingly. -c 3) Neither record or catalog entry is a bang (code 2). - - if(stmidz .eq. stidca(1)) then - - if(rsmcz(1:1) .eq. '!' .and. - 1 rsmcca(1)(1:1) .eq. '!') then - iecatz=3 - write(6,71) nrec,stmidz,ncat,rsmcz,rsmcca(1) - 71 format(/'...For nrec=',i5,' only storm id=',a,' matches catalog ', - 1 'entry',i5,'. Record and catalog rsmcs are both bang:', - 2 2(1x,a)/4x,'###This case should never happen!') - - else if(rsmcz(1:1) .ne. '!' .and. - 1 rsmcca(1)(1:1) .eq. '!') then - - write(6,73) nrec,stmidz,rsmcz,rsmcca(1),stmnmz,rsmcz,stmidz - - 73 format('...For nrec=',i5,' only storm id=',a,' matches catalog ', - 1 'entry.'/4x,'...Record rsmc (',a,') is not bang but ', - 2 'catalog rsmc is (',a,').'/4x,'...Calling akafnd with ', - 3 'storm name, rsmc, id=',3(a,1x),' to find all aliases.') - - nalsav=novrmx - call akafnd(iuntal,stmnmz,rsmcz,stmidz,nalsav,stnmal,rsmcal, - 1 stidal,ifnd) - if(ifnd .eq. 1) then - write(6,75) - 75 format(3x,'...Record found in alias file. Code 3 assigned.') - iecatz=3 - - else - write(6,77) - 77 format(3x,'...Record not found in alias file. Code 2 retained.') - iecatz=2 - endif - - else - iecatz=2 - write(6,79) nrec,stmidz,ncat,rsmcz,rsmcca(1) - 79 format(/'...For nrec=',i5,' only storm id=',a,' matches catalog ', - 1 'entry',i5,'. Rsmcs are:',2(1x,a)/4x,' ###Probable new ', - 2 'storm with a duplicate storm id') - endif - - iecat(nrec)=max0(iecat(nrec)/ipack,iecatz)*ipack+ncat - endif - - endif - 80 continue - -c Write to the scratch catalog - - WRITE(IUNTCN,21) NALCA,STNMCA,IYMDMN,IUTCMN,IYMDMX,IUTCMX, - 1 (RSMCCA(NAL),STIDCA(NAL), - 2 NAL=1,MIN(NALCA,NOVRMX)) - go to 20 - 90 continue - - if(ncat .eq. 0) then - write(6,91) - 91 format(/'...There are no catalog entries. All input records will', - 1 ' be assigned code 1.') - iecat(1:ntest)=ipack - - endif - - write(6,131) - 131 format('...Summary of catalog codes for first scan:') - do nrec=1,ntest - if(nrec .le. nokay .or. - 1 (nrec .gt. nokay .and. (iefail(numtst(nrec),4) .eq. 5 .or. - 2 iefail(numtst(nrec),4) .eq. 6 .or. - 3 iefail(numtst(nrec),6) .eq. 22))) then - write(6,133) nrec,iecat(nrec),tstrec(nrec) - 133 format(4x,2i6,1x,'...',a,'...') - if(iabs(iefail(numtst(nrec),5)) .le. 9) then - iefail(numtst(nrec),5)=-(iabs(iefail(numtst(nrec),5))+ - 1 iabs(iecat(nrec))/ipack*10) - endif - endif - enddo - write(6,143) (nb,idbasn(nb),maxno(nb),nb=1,nbasin) - 143 format('...Summary of maximum storm ids for each basin:'/(4x,i3, - 1 1x,a,i4)) - -c Second pass: copy back from the scratch catalog and update -c each entry as needed - - rewind iuntca - rewind iuntcn - ncat=0 - - 201 continue - READ(IUNTCN,21,END=300) NALCA,STNMCA,IYMDMN,IUTCMN,IYMDMX,IUTCMX, - 1 (RSMCCA(NAL),STIDCA(NAL), - 2 NAL=1,MIN(NALCA,NOVRMX)) - ncat=ncat+1 - -c *********************** -c **** Code 3 errors **** -c *********************** - - do nrec=1,ntest - - if(nrec .le. nokay .or. - 1 (nrec .gt. nokay .and. (iefail(numtst(nrec),4) .eq. 5 .or. - 2 iefail(numtst(nrec),4) .eq. 6 .or. - 3 iefail(numtst(nrec),6) .eq. 22))) then - - bufinz=tstrec(nrec) - ietyp=iecat(nrec)/ipack - ircat=iecat(nrec)-ietyp*ipack - - if(ircat .eq. ncat .and. ietyp .eq. 3) then - - write(6,213) nrec,bufinz,NALCA,STNMCA,IYMDMN,IUTCMN,IYMDMX,IUTCMX, - 1 (RSMCCA(NAL),STIDCA(NAL), - 2 NAL=1,MIN(NALCA,NOVRMX)) - 213 format(/'...Preparing to reconcile code 3 errors for nrec=',i3, - 1 ' record, catalog entry are:'/4x,a,'...'/4x,i1,1x,a9,2(1x, - 2 i8,1x,i4.4),10(1x,a4,1x,a3)) - - IF(STMNMZ .NE. 'NAMELESS' .AND. STNMCA .EQ. 'NAMELESS') THEN - write(6,217) stnmca,ncat,stmnmz,nrec - 217 format('...',a,' storm with catalog entry=',i4,' will have name=', - 1 a,' assigned, nrec=',i4) - STNMCA=STMNMZ - ENDIF - - do iv=1,2 - call decvar(istvar(iv),ienvar(iv),ivtvar(iv),ierdec,fmtvit(iv), - 1 bufinz) - enddo - - call mnmxda(iymdmn,iutcmn,idatez,iutcz,dayz,minday) - call mnmxda(iymdmx,iutcmx,idatez,iutcz,dayz,maxday) - daysav=dayz - ilate=nrec - -c Do all records identified as the same storm - - do nchk=nrec+1,ntest - - if(nchk .le. nokay .or. - 1 (nchk .gt. nokay .and. (iefail(numtst(nchk),4) .eq. 5 .or. - 2 iefail(numtst(nchk),4) .eq. 6 .or. - 3 iefail(numtst(nchk),6) .eq. 22))) then - - bufinx=tstrec(nchk) - ietypx=iecat(nchk)/ipack - ircatx=iecat(nchk)-ietyp*ipack - - if(ircatx .eq. ncat .and. ietypx .eq. 3) then - - IF(STMNMX .NE. 'NAMELESS' .AND. STNMCA .EQ. 'NAMELESS') THEN - write(6,227) stnmca,ncat,stmnmx,nchk - 227 format('...',a,' storm with catalog entry=',i4,' will have name=', - 1 a,' assigned, nchk=',i4) - STNMCA=STMNMX - ENDIF - - do iv=1,2 - call decvar(istvar(iv),ienvar(iv),ivtvrx(iv),ierdec,fmtvit(iv), - 1 bufinx) - enddo - -c write(6,231) nchk,iymdmn,iutcmn,idatex,iutcx,bufinx -c 231 format('...calling mnmxda with nchk,iymdmn,iutcmn,idatex,iutcx,' -c 1 'bufinx=',i4,i9,i6,i7,i6/4x,a) - call mnmxda(iymdmn,iutcmn,idatex,iutcx,dayz,minday) - call mnmxda(iymdmx,iutcmx,idatex,iutcx,dayz,maxday) - if(dayz .gt. daysav) then - daysav=dayz - ilate=nchk - endif - - iecat(nchk)=-iabs(iecat(nchk)) - endif - endif - enddo - -c Look in akavit for the storm. If it is there, extract -c latest pertinent information that will be transferred to the -c storm catalog - - write(6,243) ilate,stmnmz,rsmcz,stmidz - 243 format('...Look in akavit for appropriate information. Latest ', - 1 'record has index=',i5,' storm name,rsmc,id=',3(a,1x)) - - nalsav=novrmx - call akafnd(iuntal,stmnmz,rsmcz,stmidz,nalsav,stnmca,rsmcal, - 1 stidal,ifnd) - - if(ifnd .eq. 0) then - if(rsmcz(1:1) .eq. '!') then - write(6,271) stmnmz,stmidz,rsmcz - 271 format('******Storm not found in akavit file. stmnmz,stmidz,', - 1 'rsmcz=',3(1x,a),' abort') - call abort1(' RCNCIL',271) - - else - write(6,273) ilate - 273 format('...Storm is not multiply observed. We copy the latest ', - 1 'record (#',i5,') to get the latest information.') - bufinx=tstrec(ilate) - nalca=1 - rsmcca(1)=rsmcx - stidca(1)=stmidx - if(stmnmx .ne. 'NAMELESS') stnmca=stmnmx - endif - - else - write(6,277) - 277 format('...Storm is multiply observed. We copy the alias record ', - 1 'to get the latest information.') - -c Do not copy the storm id if there is already a catalog entry - - nalca=nalsav - rsmcca(1)=rsmcal(1) - rsmcca(2:nalca)=rsmcal(2:nalca) - stidca(2:nalca)=stidal(2:nalca) - endif - - iecat(nrec)=-iabs(iecat(nrec)) - - endif - endif - enddo - -c write to the updated catalog - - WRITE(IUNTCA,21) NALCA,STNMCA,IYMDMN,IUTCMN,IYMDMX,IUTCMX, - 1 (RSMCCA(NAL),STIDCA(NAL), - 2 NAL=1,MIN(NALCA,NOVRMX)) - WRITE(6,293) NCAT,NALCA,STNMCA,IYMDMN,IUTCMN,IYMDMX,IUTCMX, - 1 (RSMCCA(NAL),STIDCA(NAL), - 2 NAL=1,MIN(NALCA,NOVRMX)) - 293 format(/'...CATALOG RECORD ',I3,' WRITTEN. RECORD IS:',I1,1X,A9, - 1 2(1X,I8,1X,I4.4),10(1X,A4,1X,A3)) - go to 201 - - 300 continue - -c **************************** -c **** Code 1 or 2 errors **** -c **************************** - -c Add new storms to the catalog or storms that have duplicate -c ids - - nadcat=0 -c** naladd=0 - do nrec=1,ntest - - if(nrec .le. nokay .or. - 1 (nrec .gt. nokay .and. (iefail(numtst(nrec),4) .eq. 5 .or. - 2 iefail(numtst(nrec),4) .eq. 6 .or. - 3 iefail(numtst(nrec),6) .eq. 22))) then - - bufinz=tstrec(nrec) - ietyp=iecat(nrec)/ipack - - if(ietyp .eq. 1 .or. ietyp .eq. 2) then - write(6,303) nrec,ietyp,bufinz - 303 format(//'...Ready to add new storm to catalog. nrec,ietyp,', - 1 'record are:',2i4/4x,a) - -c Default entry for catalog is a copy of the candidate record or the -c entry from the alias (akavit) file. These entries may be -c updated by records with a later date, entries from the -c alias file, and the need to create a new, unique storm id. - - if(rsmcz(1:1) .ne. '!') then - nalca=1 - stnmca=stmnmz - rsmcca(1)=rsmcz - stidca(1)=stmidz - - else - write(6,305) nrec,stmnmz,rsmcz,stmidz - 305 format('...Calling akafnd for record',i4,' with storm name,', - 1 'rsmc,id=',3(a,1x),' to produce default catalog entries.') - nalsav=novrmx - call akafnd(iuntal,stmnmz,rsmcz,stmidz,nalsav,stnmca,rsmcca, - 1 stidca,ifnd) - nalca=nalsav - - if(ifnd .eq. 0) then - write(6,307) stmnmz,stmidz,rsmcz - 307 format('******Storm not found in akavit file. stmnmz,stmidz,', - 1 'rsmcz=',3(1x,a),' abort') - call abort1(' RCNCIL',307) - endif - endif - - read(stmidz(1:2),23) idno - do nb=1,nbasin - if(stmidz(3:3) .eq. idbasn(nb)) then - nbasav=nb - go to 311 - endif - enddo - 311 continue - - istidn=0 - if(idno .le. maxno(nbasav)) then - istidn=1 - write(6,313) idno,maxno(nbasav) - 313 format('###Storm id number=',i3,' is not larger than catalog ', - 1 'maximum. A new number and storm id must be created=',i4) - endif - - do naddc=1,nadcat - if(stmidz .eq. stidad(naddc)) then - istidn=1 - write(6,315) stmidz - 315 format('...Current storm id has already been added to catalog. A', - 1 ' unique one must be created.') - endif - enddo - -c Create added storm id and rsmc in advance to guarantee uniqueness -c or transfer new storm id to the catalog record. -c istidn=0 : no uniqueness problem has been detected -c istidn=1 : uniqueness problem detected and new id will -c be created -c The new id will be transferred to all records. It must be a bang -c record with only one observing rsmc. It must also be entered int -c the alias file. - - istidn=0 ! Qingfu added to skip the changes of storm ID number - - if(istidn .eq. 1) then - - if(rsmcz(1:1) .eq. '!') then - write(6,331) stmidz,rsmcz,bufinz - 331 format('###Storm with id, rsmc=',2(a,1x),'is a duplicate to a ', - 1 'catalog entry as well as being a bang storm. Record is:'/ - 2 4x,a) - write(6,333) - 333 format('******This problem is not yet coded. Abort') - call abort1(' rcncil',333) - - else - idnomx=-1 - do naddc=1,nadcat - read(stidad(naddc)(1:2),23) idno - if(stidad(naddc)(3:3) .eq. idbasn(nbasav)) - 1 idnomx=max0(idnomx,idno) - enddo - stidad(nadcat+1)(3:3)=idbasn(nbasav) - - if(idnomx .ge. 0) then - write(stidad(nadcat+1)(1:2),3401) idnomx+1 - 3401 format(i2.2) - write(6,341) idbasn(nbasav),stidad(nadcat+1) - 341 format('...Previous storms have been added for basin ',a,' storm', - 1 ' id set to one more than the maximum already added to ', - 2 'the catalog=',a) - else - write(stidad(nadcat+1)(1:2),3401) maxno(nbasav)+1 - write(6,343) idbasn(nbasav),stidad(nadcat+1) - 343 format('...No previous storms added for basin ',a,'. Storm id ', - 1 'set to one more than the maximum already in the catalog=', - 2 a) - endif - -c Create a bang record with one observing rsmc - -c** naladd=naladd+1 - do nrsz=1,nrsmcx - if(rsmcid(nrsz) .eq. rsmcz) then - nrsmc=nrsz - go to 351 - endif - enddo - 351 continue - nalca=2 - rsmcad(nadcat+1)='!'//rsmcap(nrsmc) - stidca(1)=stidad(nadcat+1) - rsmcca(1)=rsmcad(nadcat+1) - stidca(2)=stmidz - rsmcca(2)=rsmcz -c** write(6,355) naladd,(stidca(nca),rsmcca(nca),nca=1,nalca) - write(6,355) nadcat+1,(stidca(nca),rsmcca(nca),nca=1,nalca) - 355 format('...New bang storm (#',i2,') created with unique id. Id, ', - 1 'rsmc are:'/(4x,2(a,3x))) -c** call akasav(naladd,nalca,dayz,stmnmz,rsmcca,stidca) - - endif - - endif - - do iv=1,2 - call decvar(istvar(iv),ienvar(iv),ivtvar(iv),ierdec,fmtvit(iv), - 1 bufinz) - enddo - idatmn=idatez - iutcmn=iutcz - idatmx=idatez - iutcmx=iutcz - call ztime(idatez,iutcz,iyr,imo,ida,ihr,imin) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - call flday(jdy,ihr,imin,daysav) - ilate=nrec - -C####################################################################### - -c Do all records identified as the same storm - - do nchk=nrec+1,ntest - -C----------------------------------------------------------------------- - if(nchk .le. nokay .or. - 1 (nchk .gt. nokay .and. (iefail(numtst(nchk),4) .eq. 5 .or. - 2 iefail(numtst(nchk),4) .eq. 6 .or. - 3 iefail(numtst(nchk),6) .eq. 22))) then - - imatch=0 - - bufinx=tstrec(nchk) - ietypx=iecat(nchk)/ipack - -C....................................................................... - if(ietypx .eq. 1 .or. ietypx .eq. 2) then - - ifnd=0 - -c Storms are obviously the same - - if(stmidz .eq. stmidx .and. rsmcz .eq. rsmcx) then - write(6,371) nchk,nrec,nrec,bufinz,nchk,bufinx - 371 format('...Record',i5,' has the same storm id and rsmc as the ', - 1 'candidate record (#',i5,'). Records are:'/4x,i4,1x,a/4x, - 2 i4,1x,a) - ifnd=-1 - -c Last resort: look in akavit for the storm - - else - write(6,373) nchk,stmnmx,rsmcx,stmidx - 373 format('...calling akafnd for record',i4,' with storm name,rsmc,', - 1 'id=',3(a,1x)) - nalsav=novrmx - call akafnd(iuntal,stmnmx,rsmcx,stmidx,nalsav,stnmal, - 1 rsmcal,stidal,ifnd) - - if(ifnd .eq. 0) then - - if(rsmcx(1:1) .eq. '!') then - write(6,381) stmnmx,stmidx,rsmcx - 381 format('******Storm not found in akavit file. stmnmx,stmidx,', - 1 'rsmcx=',3(1x,a),' abort') - call abort1(' RCNCIL',381) - else -c write(6,383) -c 383 format('...Storm does not have a bang rsmc. It is therefore not ', -c 1 'required to find a match.') - endif - - else - write(6,405) ifnd - 405 format('...Storm found in akavit file at record #',i3) - do nal=1,nalsav - if(rsmcz .eq. rsmcal(nal) .and. - 1 stmidz .eq. stidal(nal)) then - imatch=1 - go to 411 - endif - enddo - 411 continue - endif - - endif - - if(imatch .eq. 1 .or. ifnd .eq. -1) then - write(6,413) ifnd,imatch - 413 format('...Storm matches exactly or by catalog association, ', - 1 'ifnd,imatch=',2i3) - do iv=1,2 - call decvar(istvar(iv),ienvar(iv),ivtvrx(iv),ierdec, - 1 fmtvit(iv),bufinx) - enddo - -c write(6,231) nchk,idatmn,iutcmn,idatex,iutcx,bufinx - call mnmxda(idatmn,iutcmn,idatex,iutcx,dayz,minday) - call mnmxda(idatmx,iutcmx,idatex,iutcx,dayz,maxday) - if(dayz .gt. daysav) then - daysav=dayz - ilate=nchk - endif - - if(istidn .eq. 1) then - tstrec(nchk)=bufinx - nadd=nadd+1 - badrec(nbad+nadd)=bufinx - numbad(nbad+nadd)=numtst(nchk) - iefail(numbad(nbad+nadd),5)= - 1 -iabs(iefail(numtst(nchk),5)) - stmidx=stidad(nadcat+1) - rsmcx =rsmcad(nadcat+1) - write(6,473) stmidx,bufinx,nadd,badrec(nbad+nadd) - 473 format('...Record same as candidate record to be added to ', - 1 'catalog. New storm id=',a,' is assigned. Modified ', - 2 'record is:'/4x,a/4x,'Bad record #',i3,' added is:'/4x,a) - endif - - iecat(nchk)=-iabs(iecat(nchk)) - if(nchk .le. nokay) then - okarec(nchk)=bufinx - else - badrec(nchk-nokay)=bufinx - endif - - endif -C....................................................................... - -c Exact match: substitute storm name if it is not nameless - - if(ifnd .eq. -1) then - - if(stmnmx.ne.'NAMELESS' .and. stmnmz.eq.'NAMELESS') then - stnmca=stmnmx - write(6,475) stnmca - 475 format('...NAMELESS candidate record is renamed to ',a,'from a ', - 1 'matching record.') - endif - -c Match through the alias file: copy alias information for the -c catalog entry - - else if(imatch .eq. 1) then - if(stmnmz.eq.'NAMELESS' .and. stnmal.ne.'NAMELESS') then - stnmca=stnmal - write(6,477) stnmca - 477 format('...NAMELESS candidate record is renamed to ',a,'from a ', - 1 'matching alias record.') - endif - - nalca=nalsav - rsmcca(1:nalca)=rsmcal(1:nalca) - stidca(1:nalca)=stidal(1:nalca) - - else - write(6,491) ifnd,imatch - 491 format('...Storm does not match exactly or by catalog ', - 1 'association, ifnd,imatch=',2i3) - endif - - endif - endif -C----------------------------------------------------------------------- - enddo -C####################################################################### - - if(iecat(nrec) .gt. 0) then - nadcat=nadcat+1 - - if(nadcat .gt. naddmx) then - write(6,505) nadcat,naddmx - 505 format('******Trying to add too many storms to the catalog,', - 1 ' nadcat,naddmx=',2i3) - call abort1(' RCNCIL',505) - endif - - if(istidn .eq. 1) then - nadd=nadd+1 - badrec(nbad+nadd)=bufinz - numbad(nbad+nadd)=numtst(nrec) - iefail(numbad(nbad+nadd),5)=-iabs(iefail(numtst(nrec),5)) - write(6,511) nadd,nrec,nbad+nadd,numtst(nrec) - 511 format(/'...Adding a new bad record due to duplicate storm id, ', - 1 'nadd,nrec,nbad+nadd,numtst=',4i4) - - stmidz=stidad(nadcat) - rsmcz =rsmcad(nadcat) - write(6,513) stidca(1),nalca,bufinz - 513 format('...Id for storm added to catalog =',a,' is new and ', - 1 'unique. nalca=',i3,' Record is:'/4x,a) - - else - stidad(nadcat)=stidca(1) - write(6,515) stidad(nadcat) - 515 format('...Id for storm added to catalog =',a,' has been ', - 1 'recorded to prevent duplication.') - endif - - WRITE(IUNTCA,21) NALCA,STNMCA,IDATMN,IUTCMN,IDATMX,IUTCMX, - 1 (RSMCCA(NAL),STIDCA(NAL), - 2 NAL=1,MIN(NALCA,NOVRMX)) - WRITE(6,293) NCAT+NADCAT,NALCA,STNMCA,IDATMN,IUTCMN,IDATMX, - 1 IUTCMX,(RSMCCA(NAL),STIDCA(NAL), - 2 NAL=1,MIN(NALCA,NOVRMX)) - endif - - if(nrec .le. nokay) then - okarec(nrec)=bufinz - else - badrec(nrec-nokay)=bufinz - endif - - iecat(nrec)=-iabs(iecat(nrec)) - endif - endif - - enddo -c** write(6,601) nadcat,naladd -c 601 format('...',i3,' new storms added to catalog. ',i3,' bang ', -c 1 'storms added to temporary alias file.'/4x,'Dump alias ' -c 2 'records to temporary alias file if necessary (naladd>0).' - write(6,601) nadcat - 601 format('...',i3,' new storms added to catalog.') - -c Finally, storm catalog and alias file (akavit) reconciliation. -c We force the alias file to be a direct subset of the storm -c catalog. - -c write(6,703) -c 703 format(/'...Storm catalog and alias file reconciliation. '/4x, -c 1 'Copy temporary alias file records to the new alias file', -c 2 ' if necessary.') - - iuntaw=iuntal - rewind iuntca - rewind iuntaw - - 720 read(iuntca,21,end=830) nalca,stmnmz,iymdmn,iutcmn,iymdca,iutcca, - 1 (rsmcca(nca),stidca(nca), - 2 nca=1,min(nalca,novrmx)) - if(rsmcca(1)(1:1) .eq. '!') write(iuntaw,711) nalca,stmnmz, - 1 (rsmcca(nca),stidca(nca), - 2 nca=1,min(nalca,novrmx)) - 711 format(i1,1x,a9,10(1x,a4,1x,a3)) - -c** ifndca=0 - -c if(stmnmz .eq. stnmal .and. -c 1 stidca(1) .eq. stidal(1)) then -c ifndz=0 -c write(6,801) stmnmz,stidca(1) -c 801 format('...Alias file and catalog have the same storm and basin ', -c 1 'id=',a,1x,a) - -c do nc=1,nalca -c if(rsmcal(nc) .eq. rsmcca(nc) .and. -c 1 stidal(nc) .eq. stidca(nc)) then -c ifndz=ifndz+1 -c endif -c enddo - -c if(ifndz .eq. nalca) then -c ifndca=1 -c go to 831 -c endif -c** endif - - go to 720 - 830 continue -cc831 continue - -c** if(ifndca .eq. 0) then -c write(6,833) nalca,stmnmz,(rsmcca(nca),stidca(nca), -c 1 nca=1,min(nalca,novrmx)) -c write(6,835) nalmx,stnmal,(rsmcal(nal),stidal(nal), -c 3 nal=1,min(nalmx,novrmx)) -c 833 format('******Storm in alias file but different or not in ', -c 1 'catalog. Catalog entry is:'/4x,i1,1x,a9,10(1x,a4,1x,a3) -c 835 format('Alias entry is:'/4x,i1,1x,a9,10(1x,a4,1x,a3)) -c call abort1(' RCNCIL',835) - -c else -c write(6,841) nalmx,stnmal,(rsmcal(nal),stidal(nal), -c 1 nal=1,min(nalmx,novrmx)) -c 841 format('...Alias file entry is identical to catalog. Entry is:'/ -c 1 4x,i1,1x,a9,10(1x,a4,1x,a3)) -c endif -c** go to 710 - -c Error summary - - write(6,901) nokay,ntest,nadd,(ercrcn(ner),ner=1,nercrc) - 901 format(//'...Results of the catalog reconciliation check are: ', - 1 'nokay=',i4,', ntest=',i4,', nadd=',i3//4x,'Error codes ', - 2 'are:'/(6x,a)) - write(6,903) - 903 format(/'...Okay records are:',100x,'erc'/) - do nok=1,nokay - write(6,909) nok,numoka(nok),okarec(nok),iefail(numoka(nok),5) - 909 format(3x,i4,'...',i4,'...',a,'...',i3) - enddo - - write(6,913) - 913 format(/'...Updated overland or overlapped (bad) records are:', - 1 68x,'erc') - do nba=1,nbad - if(iefail(numbad(nba),4) .eq. 5 .or. - 1 iefail(numbad(nba),4) .eq. 6 .or. - 2 iefail(numbad(nba),6) .eq. 22) then - write(6,919) nba,numbad(nba),badrec(nba),iefail(numbad(nba),5) - 919 format(3x,i4,'...',i4,'...',a,'...',i3) - endif - enddo - - write(6,923) - 923 format(/'...Added records due to duplicate storm id are:',73x, - 1 'erc'/) - do nad=1,nadd - write(6,929) nad,numbad(nbad+nad),badrec(nbad+nad), - 1 iabs(iefail(numbad(nbad+nad),5)) - 929 format(3x,i4,'...',i4,'...',a,'...',i3) - enddo - nbad=nbad+nadd - - return - end - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: MNMXDA SUBSTITUTES MIN OR MAX DATE -C PRGMMR: S. LORD ORG: NP22 DATE: 1993-06-01 -C -C ABSTRACT: SUBSTITUTES MIN OR MAX DATE -C -C PROGRAM HISTORY LOG: -C 1993-06-01 S. LORD -C -C USAGE: CALL MNMXDA(IYMDNX,IUTCNX,IYMDZ,IUTCZ,DAYZ,MINMAX) -C INPUT ARGUMENT LIST: -C IYMDNX - MINIMUM YEAR,MONTH,DAY. -C -C IUTCNX - MINIMUM HOUR (UTC). -C IYMDZ - INPUT YEAR,MONTH,DAY. -C -C IUTCZ - INPUT HOUR (UTC). -C -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - subroutine mnmxda(iymdnx,iutcnx,iymdz,iutcz,dayz,minmax) - - DIMENSION RINC(5) - -c in minmax<0, minimum is returned -c in minmax>0, minimum is returned - - call ztime(iymdnx,iutcnx,iyr,imo,ida,ihr,imin) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - call flday(jdy,ihr,imin,daynx) - - call ztime(iymdz,iutcz,iyr,imo,ida,ihr,imin) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - call flday(jdy,ihr,imin,dayz) - - if(minmax .gt. 0) then - if(dayz .gt. daynx) then - write(6,11) iymdnx,iutcnx,iymdz,iutcz - 11 format('...Substituting maximum date. iymdnx,iutcnx,iymdz,iutcz=', - 1 2(i9,i6.4)) - iymdnx=iymdz - iutcnx=iutcz - else -c write(6,13) iymdnx,iutcnx,iymdz,iutcz -c 13 format('...No substitution of maximum date. iymdnx,iutcnx,iymdz,', -c 1 'iutcz=',2(i9,i6.4)) - endif - - else if(minmax .lt. 0) then - if(dayz .lt. daynx) then - write(6,21) iymdnx,iutcnx,iymdz,iutcz - 21 format('...Substituting minimum date. iymdnx,iutcnx,iymdz,iutcz=', - 1 2(i9,i6.4)) - iymdnx=iymdz - iutcnx=iutcz - else -c write(6,23) iymdnx,iutcnx,iymdz,iutcz -c 23 format('...No substitution of minimum date. iymdnx,iutcnx,iymdz,', -c 1 'iutcz=',2(i9,i6.4)) - endif - - else - write(6,31) minmax - 31 format('******minmax value=',i5,' is improper. abort.') - CALL ABORT1(' MNMXDA',31) - endif - - return - end - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: SCLIST LISTS STORM CATALOG -C PRGMMR: S. LORD ORG: NP22 DATE: 1993-06-01 -C -C ABSTRACT: LISTS STORM CATALOG -C -C PROGRAM HISTORY LOG: -C 1993-06-01 S. LORD -C -C USAGE: CALL SCLIST(IUNTCA) -C INPUT ARGUMENT LIST: -C IUNTCA - UNIT NUMBER FOR CATALOG. -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - subroutine sclist(iuntca) - parameter (novrmx=70) - - character stnmca*9,stidca*3,rsmcca*4 - dimension stidca(novrmx),rsmcca(novrmx) - - rewind iuntca - nrec=0 - - write(6,1) iuntca - 1 format(/'...Storm catalog list for unit ',i3) - 10 continue - READ(IUNTCA,21,END=90) NALCA,STNMCA,IYMDMN,IUTCMN,IYMDMX,IUTCMX, - 1 (RSMCCA(NAL),STIDCA(NAL), - 2 NAL=1,MIN(NALCA,NOVRMX)) - nrec=nrec+1 - 21 FORMAT(I1,1X,A9,2(1X,I8,1X,I4.4),10(1X,A4,1X,A3)) - write(6,23) nrec,NALCA,STNMCA,IYMDMN,IUTCMN,IYMDMX,IUTCMX, - 1 (RSMCCA(NAL),STIDCA(NAL), - 2 NAL=1,MIN(NALCA,NOVRMX)) - 23 FORMAT(3x,i4,2x,I1,1X,A9,2(1X,I8,1X,I4.4),10(1X,A4,1X,A3)) - go to 10 - - 90 continue - write(6,91) - 91 format('...End of storm catalog list.'/) - rewind iuntca - return - end - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: AKLIST LISTS ALIAS FILE -C PRGMMR: S. LORD ORG: NP22 DATE: 1993-06-01 -C -C ABSTRACT: LISTS ALIAS FILE -C -C PROGRAM HISTORY LOG: -C 1993-06-01 S. LORD -C -C USAGE: CALL AKLIST(IUNTAL) -C INPUT ARGUMENT LIST: -C IUNTAL - UNIT NUMBER FOR ALIAS FILE. -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - subroutine aklist(iuntal) - parameter (novrmx=70) - - character stnmal*9,stidal*3,rsmcal*4 - dimension stidal(novrmx),rsmcal(novrmx) - - rewind iuntal - nrec=0 - - write(6,1) iuntal - 1 format(/'...Storm alias list for unit ',i3) - 10 continue - READ(IUNTAL,21,END=90) NALAL,STNMAL,(RSMCAL(NAL),STIDAL(NAL), - - 1 NAL=1,MIN(NALAL,NOVRMX)) - nrec=nrec+1 - 21 FORMAT(I1,1X,A9,10(1X,A4,1X,A3)) - write(6,23) nrec,NALAL,STNMAL,(RSMCAL(NAL),STIDAL(NAL), - 1 NAL=1,MIN(NALAL,NOVRMX)) - 23 FORMAT(3x,i4,2x,I1,1X,A9,10(1X,A4,1X,A3)) - go to 10 - - 90 continue - write(6,91) - 91 format('...End of storm alias list.'/) - rewind iuntal - return - end - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: STCATI GETS STORM ID FROM CATALOG -C PRGMMR: S. LORD ORG: NP22 DATE: 1993-06-01 -C -C ABSTRACT: LOOKS FOR GIVEN STORM ID AND RSMC IN CATALOG -C -C PROGRAM HISTORY LOG: -C 1993-06-01 S. LORD -C -C USAGE: CALL STCATI(IUNTCA,STMIDZ,RSMCZ,STMIDX,IFND) -C INPUT ARGUMENT LIST: -C IUNTCA - UNIT NUMBER FOR STORM CATALOG. -C -C STMIDZ - REQUESTED STORM ID. -C RSMCZ - REQUESTED RSMC. -C -C OUTPUT ARGUMENT LIST: -C STMIDX - CATALOGED STORM ID. -C IFND - 1 IF FOUND. -C - THE RSMC CHECK. -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - subroutine stcati(iuntca,stmidz,rsmcz,stmidx,ifnd) - - parameter (novrmx=70) - - dimension rsmcca(novrmx),stidca(novrmx) - - character stmidz*(*),stmidx*(*),rsmcz*(*) - character stnmca*9,stidca*3,rsmcca*4 - - ifnd=0 - rewind iuntca - write(6,1) stmidz,rsmcz - 1 format('...Entering stcati looking for storm id,rsmc=',2(a,2x)) - 10 continue - READ(IUNTCA,21,END=90) NALCA,STNMCA,IYMDMN,IUTCMN,IYMDMX,IUTCMX, - 1 (RSMCCA(NCA),STIDCA(NCA), - 2 NCA=1,MIN(NALCA,NOVRMX)) - 21 FORMAT(I1,1X,A9,2(1X,I8,1X,I4.4),10(1X,A4,1X,A3)) - do nca=1,min(nalca,novrmx) - if(stmidz .eq. stidca(nca) .and. rsmcz .eq. rsmcca(nca)) then - ifnd=1 - stmidx=stidca(1) - rewind iuntca - return - endif - enddo - go to 10 - - 90 continue - - rewind iuntca - return - end - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: STCATN GETS STORM NAME AND LAST DATE FROM CATLG -C PRGMMR: S. LORD ORG: NP22 DATE: 1993-08-25 -C -C ABSTRACT: LOOKS FOR GIVEN STORM ID AND RSMC IN CATALOG -C -C PROGRAM HISTORY LOG: -C 1993-08-25 S. LORD -C -C USAGE: CALL STCATN(IUNTCA,STMNMZ,IDATEZ,IUTCZ,IFND) -C INPUT ARGUMENT LIST: -C IUNTCA - UNIT NUMBER FOR STORM CATALOG. -C STMNMZ - REQUESTED STORM NAME. -C -C OUTPUT ARGUMENT LIST: -C IDATEZ - LATEST DATE FOUND FOR NAMED STORM. -C IUTCZ - LATEST HHMM FOUND FOR NAMED STORM. -C IFND - 1 IF FOUND. -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE STCATN(IUNTCA,STMNMZ,IDATEZ,IUTCZ,IFND) - - character STMNMZ*(*) - character stnmca*9 - - ifnd=0 - IDATEZ=-999999 - IUTCZ=-999 - rewind iuntca - write(6,1) STMNMZ - 1 format('...Entering stcatn looking for storm name=',a) - 10 continue - READ(IUNTCA,21,END=90) NALCA,STNMCA,IYMDMN,IUTCMN,IYMDMX,IUTCMX - 21 FORMAT(I1,1X,A9,2(1X,I8,1X,I4.4)) - if(STNMCA .eq. STMNMZ) then - ifnd=1 - IDATEZ=IYMDMX - IUTCZ=IUTCMX - endif - go to 10 - - 90 continue - - rewind iuntca - return - end - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: ADFSTF ADDS FIRST OCCURRENCE FLAGS TO RECORDS -C PRGMMR: S. J. LORD ORG: NP22 DATE: 1991-06-07 -C -C ABSTRACT: ADDS FIRST OCCURRENCE FLAGS TO RECORDS AS APPROPRIATE, -C EVEN IF A FLAG HAS BEEN CLASSIFIED AS A BAD RECORD. -C -C PROGRAM HISTORY LOG: -C 1991-06-07 S. J. LORD -C 1991-06-07 S. J. LORD DISABLED FIRST FLAGS FOR RELOCATED STORMS -C -C USAGE: CALL ADFSTF(IUNTHA,NOKAY,NBAD,MAXREC,MAXCKS,IECOST,NUMBAD, -c IEFAIL,DUMREC,OKAREC,BADREC) -C INPUT ARGUMENT LIST: -C IUNTHA - UNIT NUMBER FOR THE ALIAS SHORT-TERM HISTORY FILE -C NOKAY - LENGTH OF ARRAY OKAREC -C NBAD - LENGTH OF ARRAY BADREC AND NUMBAD -C MAXREC - LENGTH OF FIRST DIMENSION OF ARRAY IEFAIL -C MAXCKS - LENGTH OF SECOND DIMENSION OF ARRAY IEFAIL -C IECOST - ERROR CODE FOR OVERLAND (COASTAL) TROPICAL CYCLONE -C - POSITIONS -C NUMBAD - ARRAY CONTAINING INDEX NUMBER OF EACH BAD RECORD -C IEFAIL - 2-D ARRAY OF ERROR CODES FOR ALL RECORDS -C DUMREC - DUMMY CHARACTER VARIABLE FOR READING SHORT-TERM -C - HISTORY RECORDS -C OKAREC - CHARACTER ARRAY OF OK RECORDS, RECORDS THAT HAVE -C - PASSES ALL Q/C CHECKS SO FAR -C BADREC - CHARACTER ARRAY OF BAD RECORDS, RECORDS THAT HAVE -C - FAILED AT LEAST ONE Q/C CHECK SO FAR -C -C OUTPUT ARGUMENT LIST: -C DUMREC - DESCRIPTION AS ABOVE -C OKAREC - SAME AS INPUT, EXCEPT FIRST OCCURENCE FLAG MAY HAVE -C - BEEN ADDED -C BADREC - SAME AS INPUT, EXCEPT FIRST OCCURENCE FLAG MAY HAVE -C - BEEN ADDED IN THE CASE OF OVER-LAND (COASTAL) STORMS -C -C INPUT FILES: -C UNIT "IUNTHA" - SHORT-TERM HISTORY FILE -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE ADFSTF(IUNTHA,NOKAY,NBAD,MAXREC,MAXCKS,IECOST,NUMBAD, - 1 IEFAIL,DUMREC,OKAREC,BADREC) - - SAVE - - LOGICAL FOUNDO,FOUNDB - - CHARACTER*(*) DUMREC,OKAREC(NOKAY),BADREC(NBAD) - CHARACTER*100 DUMY2K - - PARAMETER (MAXCHR=95) - PARAMETER (MAXVIT=15) - - CHARACTER BUFIN*1,RSMCZ*4,STMIDZ*3,STMNMZ*9,FSTFLZ*1,STMDPZ*1, - 1 LATNS*1,LONEW*1,FMTVIT*6,BUFINZ*100,RELOCZ*1 - - DIMENSION IVTVAR(MAXVIT),ISTVAR(MAXVIT),IENVAR(MAXVIT) - - DIMENSION BUFIN(MAXCHR),FMTVIT(MAXVIT) - - EQUIVALENCE (BUFIN(1),RSMCZ),(BUFIN(5),RELOCZ),(BUFIN(6),STMIDZ), - 1 (BUFIN(10),STMNMZ),(BUFIN(19),FSTFLZ), - 2 (BUFIN(37),LATNS),(BUFIN(43),LONEW), - 3 (BUFIN(95),STMDPZ),(BUFIN(1),BUFINZ) - - EQUIVALENCE (IVTVAR(1),IDATEZ),(IVTVAR(2),IUTCZ) - - DIMENSION IEFAIL(MAXREC,0:MAXCKS),NUMBAD(NBAD) - - DATA FMTVIT/'(I8.8)','(I4.4)','(I3.3)','(I4.4)',2*'(I3.3)', - 1 3*'(I4.4)','(I2.2)','(I3.3)',4*'(I4.4)'/, - 2 ISTVAR/20,29,34,39,45,49,53,58,63,68,71,75,80,85,90/, - 3 IENVAR/27,32,36,42,47,51,56,61,66,69,73,78,83,88,93/, - 4 IFSTFL/19/,ISTID/6/,IENID/8/ - - DATA NUM/1/ - - WRITE(6,1) NOKAY,NBAD,IECOST - 1 FORMAT(/'...ENTERING ADFSTF WITH NOKAY,NBAD,IECOST=',3I4/4X, - 1 'WARNING: FIRST OCCURRENCE FLAGS (FOF) MAY OR MAY NOT BE', - 2 ' PRESENT IN THE ORIGINAL SHORT-TERM ALIAS FILE DUE TO ', - 3 'THIS ROUTINE.'/4X,'RELIABLE FOFS ARE PRESENT ONLY IN ', - 4 'THE ALIAS SHORT-TERM HISTORY FILE.') - -C CHECK EACH ALIAS SHORT-TERM HISTORY RECORD FIRST VERSUS THE -C "OKAY" RECORDS AND SECOND VERSUS THE "BAD" RECORDS THAT -C HAVE ONLY AN OVER COAST ERROR - - DO NOK=1,NOKAY - BUFINZ=OKAREC(NOK) - FOUNDO=.FALSE. - REWIND IUNTHA - NREC=0 - - 10 CONTINUE - - READ(IUNTHA,11,END=90) DUMREC - 11 FORMAT(A) - -C AT THIS POINT WE DO NOT KNOW IF A 2-DIGIT YEAR BEGINS IN COLUMN 20 -C OF THE RECORD (OLD NON-Y2K COMPLIANT FORM) OR IF A 4-DIGIT YEAR -C BEGINS IN COLUMN 20 (NEW Y2K COMPLIANT FORM) - TEST ON LOCATION OF -C LATITUDE N/S INDICATOR TO FIND OUT ... - - IF(DUMREC(35:35).EQ.'N' .OR. DUMREC(35:35).EQ.'S') THEN - -C ... THIS RECORD STILL CONTAINS THE OLD 2-DIGIT FORM OF THE YEAR - -C ... THIS PROGRAM WILL CONVERT THE RECORD TO A 4-DIGIT YEAR USING THE -C "WINDOWING" TECHNIQUE SINCE SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT *, '==> Read in RECORD from tcvitals file -- contains a', - $ ' 2-digit year "',DUMREC(20:21),'"' - PRINT *, ' ' - PRINT '(a,i0,a,a)', 'From unit ',iuntha,'; DUMREC-4: ',dumrec - PRINT *, ' ' - DUMY2K(1:19) = DUMREC(1:19) - IF(DUMREC(20:21).GT.'20') THEN - DUMY2K(20:21) = '19' - ELSE - DUMY2K(20:21) = '20' - ENDIF - DUMY2K(22:100) = DUMREC(20:100) - DUMREC = DUMY2K - PRINT *, ' ' - PRINT *, '==> 2-digit year converted to 4-digit year "', - $ DUMREC(20:23),'" via windowing technique' - PRINT *, ' ' - PRINT '(a,i0,a,a)', 'From unit ',iuntha,'; DUMREC-4: ',dumrec - PRINT *, ' ' - - ELSE IF(DUMREC(37:37).EQ.'N' .OR. DUMREC(37:37).EQ.'S') THEN - -C ... THIS RECORD CONTAINS THE NEW 4-DIGIT FORM OF THE YEAR -C ... NO CONVERSION NECESSARY SINCE THIS SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT *, '==> Read in RECORD from tcvitals file -- contains a', - $ ' 4-digit year "',DUMREC(20:23),'"' - PRINT *, ' ' - PRINT '(a,i0,a,a)', 'From unit ',iuntha,'; DUMREC-4: ',dumrec - PRINT *, ' ' - PRINT *, '==> No conversion necessary' - PRINT *, ' ' - - ELSE - - PRINT *, ' ' - PRINT *, '***** Cannot determine if this record contains ', - $ 'a 2-digit year or a 4-digit year - skip it and try reading ', - $ 'the next record' - PRINT *, ' ' - GO TO 10 - - END IF - - NREC=NREC+1 - IF(STMIDZ .EQ. DUMREC(ISTID:IENID) .AND. - 1 DUMREC(IFSTFL:IFSTFL) .NE. '*') THEN - DO IV=1,2 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 DUMREC) - ENDDO - IDTDUM=IDATEZ - IUTDUM=IUTCZ - DO IV=1,2 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 OKAREC(NOK)) - ENDDO - -C IF THERE ARE DUPLICATE DATES, THEN WE ASSUME THE OKAY RECORD -C IS AN UPDATED RECORD AND WE TRANSFER THE FIRST OCCURRENCE -C FLAG TO THE UPDATED RECORD. THIS CREATES A PARTIAL -C DUPLICATE RECORD THAT WILL BE DEALT WITH IN RITSTH. - - IF(IDATEZ .EQ. IDTDUM .AND. IUTCZ .EQ. IUTDUM) THEN - OKAREC(NOK)(IFSTFL:IFSTFL)=DUMREC(IFSTFL:IFSTFL) - ELSE - FOUNDO=.TRUE. - ENDIF - ENDIF - -C WRITE(6,87) NOK,FOUNDO,DUMREC,OKAREC(NOK) -C 87 FORMAT('...CHECKING FOR FIRST OCCURRENCE, NOK,FOUNDO,DUMREC,', -C 1 'OKAREC=',I3,1X,L1/4X,A/4X,A) - GO TO 10 - - 90 CONTINUE - -C IF THERE ARE NO MATCHING STORMS IN THE SHORT-TERM HISTORY FILE, -C FIND THE EARLIEST STORM IN THE OKAY RECORDS - - IF(.NOT. FOUNDO) THEN - CALL FSTSTM(NOKAY,NOK,NFIRST,OKAREC) - OKAREC(NFIRST)(IFSTFL:IFSTFL)=':' - ENDIF - - ENDDO - - DO NBA=1,NBAD - - IF(IEFAIL(NUMBAD(NBA),4) .EQ. IECOST) THEN - - DO NCK=1,MAXCKS - IF(NCK .NE. 4 .AND. IEFAIL(NUMBAD(NBA),NCK) .GT. 0) GO TO 200 - ENDDO - - BUFINZ=BADREC(NBA) - REWIND IUNTHA - FOUNDB=.FALSE. - NREC=0 - - 160 CONTINUE - - READ(IUNTHA,11,END=190) DUMREC - NREC=NREC+1 - -C AT THIS POINT WE DO NOT KNOW IF A 2-DIGIT YEAR BEGINS IN COLUMN 20 -C OF THE RECORD (OLD NON-Y2K COMPLIANT FORM) OR IF A 4-DIGIT YEAR -C BEGINS IN COLUMN 20 (NEW Y2K COMPLIANT FORM) - TEST ON LOCATION OF -C LATITUDE N/S INDICATOR TO FIND OUT ... - - IF(DUMREC(35:35).EQ.'N' .OR. DUMREC(35:35).EQ.'S') THEN - -C ... THIS RECORD STILL CONTAINS THE OLD 2-DIGIT FORM OF THE YEAR - -C ... THIS PROGRAM WILL CONVERT THE RECORD TO A 4-DIGIT YEAR USING THE -C "WINDOWING" TECHNIQUE SINCE SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT *, '==> Read in RECORD from tcvitals file -- contains a', - $ ' 2-digit year "',DUMREC(20:21),'"' - PRINT *, ' ' - PRINT '(a,i0,a,a)', 'From unit ',iuntha,'; DUMREC-5: ',dumrec - PRINT *, ' ' - DUMY2K(1:19) = DUMREC(1:19) - IF(DUMREC(20:21).GT.'20') THEN - DUMY2K(20:21) = '19' - ELSE - DUMY2K(20:21) = '20' - ENDIF - DUMY2K(22:100) = DUMREC(20:100) - DUMREC = DUMY2K - PRINT *, ' ' - PRINT *, '==> 2-digit year converted to 4-digit year "', - $ DUMREC(20:23),'" via windowing technique' - PRINT *, ' ' - PRINT '(a,i0,a,a)', 'From unit ',iuntha,'; DUMREC-5: ',dumrec - PRINT *, ' ' - - ELSE IF(DUMREC(37:37).EQ.'N' .OR. DUMREC(37:37).EQ.'S') THEN - -C ... THIS RECORD CONTAINS THE NEW 4-DIGIT FORM OF THE YEAR -C ... NO CONVERSION NECESSARY SINCE THIS SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT *, '==> Read in RECORD from tcvitals file -- contains a', - $ ' 4-digit year "',DUMREC(20:23),'"' - PRINT *, ' ' - PRINT '(a,i0,a,a)', 'From unit ',iuntha,'; DUMREC-5: ',dumrec - PRINT *, ' ' - PRINT *, '==> No conversion necessary' - PRINT *, ' ' - - ELSE - - PRINT *, ' ' - PRINT *, '***** Cannot determine if this record contains ', - $ 'a 2-digit year or a 4-digit year - skip it and try reading ', - $ 'the next record' - PRINT *, ' ' - GO TO 160 - - END IF - - IF(STMIDZ .EQ. DUMREC(ISTID:IENID) .AND. - 1 DUMREC(IFSTFL:IFSTFL) .NE. '*') THEN - DO IV=1,2 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 DUMREC) - ENDDO - IDTDUM=IDATEZ - IUTDUM=IUTCZ - DO IV=1,2 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 BADREC(NBA)) - ENDDO - -C IF THERE ARE DUPLICATE DATES, THEN WE ASSUME THE BAD RECORD -C IS AN UPDATED RECORD AND WE TRANSFER THE FIRST OCCURRENCE -C FLAG TO THE UPDATED RECORD. THIS CREATES A PARTIAL -C DUPLICATE RECORD THAT WILL BE DEALT WITH IN RITSTH. - - IF(IDATEZ .EQ. IDTDUM .AND. IUTCZ .EQ. IUTDUM) THEN - BADREC(NBA)(IFSTFL:IFSTFL)=DUMREC(IFSTFL:IFSTFL) - ELSE - FOUNDB=.TRUE. - ENDIF - ENDIF - -C WRITE(6,187) NBA,DUMREC,BADREC(NBA) -C 187 FORMAT('...CHECKING FOR FIRST OCCURRENCE, NBA,DUMREC,BADREC=',I3/ -C 1 4X,A/4X,A) - GO TO 160 - - 190 CONTINUE - -C IF THERE ARE NO MATCHING STORMS IN THE SHORT-TERM HISTORY FILE, -C FIND THE EARLIEST STORM IN THE BAD RECORDS - - IF(.NOT. FOUNDB) THEN - CALL FSTSTM(NBAD,NBA,NFIRST,BADREC) - BADREC(NFIRST)(IFSTFL:IFSTFL)='*' - ENDIF - - ENDIF - 200 CONTINUE - ENDDO - -C IF THERE ARE NO RECORDS IN THE SHORT-TERM HISTORY FILE, -C WE MUST ASSIGN A FIRST OCCURRENCE FLAG TO EACH STORM - - IF(NREC .EQ. 0) THEN - DO NOK=1,NOKAY - CALL FSTSTM(NOKAY,NOK,NFIRST,OKAREC) - OKAREC(NFIRST)(IFSTFL:IFSTFL)=':' - ENDDO - ENDIF - -C ADD FIRST OCCURRENCE FLAGS FOR RELOCATED STORMS -C DISABLED 4-9-93 - -C DO NOK=1,NOKAY -C BUFINZ=OKAREC(NOK) -C IF(RELOCZ .EQ. 'R') OKAREC(NOK)(IFSTFL:IFSTFL)=':' -C ENDDO - -C VERY SPECIAL CASE: NO RECORDS IN THE SHORT-TERM HISTORY FILE -C AND A RECORD HAS AN OVER LAND ERROR - - IF(NREC .EQ. 0) THEN - DO NBA=1,NBAD - - IF(IEFAIL(NUMBAD(NBA),4) .EQ. IECOST) THEN - - DO NCK=1,MAXCKS - IF(NCK .NE. 4 .AND. IEFAIL(NUMBAD(NBA),NCK) .GT. 0) GO TO 400 - ENDDO - - BADREC(NBA)(IFSTFL:IFSTFL)='*' - - ENDIF - 400 CONTINUE - ENDDO - ENDIF - - WRITE(6,401) NOKAY,NBAD,NREC - 401 FORMAT(/'...LEAVING ADFSTF, NOKAY, NBAD=',2I4/4X,I3,' RECORDS ', - 1 'READ FROM ALIAS SHORT-TERM HISTORY FILE.') - - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: FSTSTM FINDS FIRST OCCURRENCE FOR A STORM -C PRGMMR: S. J. LORD ORG: NP22 DATE: 1991-07-18 -C -C ABSTRACT: FINDS FIRST OCCURRENCE OF A PARTICULAR STORM BY PICKING -C OUT THE MINIMUM TIME. -C -C PROGRAM HISTORY LOG: -C 1991-07-18 S. J. LORD -C -C USAGE: CALL FSTSTM(NRCMX,NRCSTM,NFIRST,DUMREC) -C INPUT ARGUMENT LIST: -C NRCMX - LENGTH OF ARRAY DUMREC -C NRCSTM - INDEX OF THE RECORD CONTAINING THE DESIRED STORM -C DUMREC - ARRAY OF INPUT RECORDS -C -C OUTPUT ARGUMENT LIST: -C NFIRST - INDEX OF THE FIRST RECORD FOR THE DESIRED STORM -C DUMREC - DESCRIPTION AS ABOVE -C -C REMARKS: NONE -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE FSTSTM(NRCMX,NRCSTM,NFIRST,DUMREC) - - CHARACTER*(*) DUMREC(NRCMX) - - DIMENSION RINC(5) - - SAVE - - PARAMETER (MAXCHR=95) - PARAMETER (MAXVIT=15) - - CHARACTER BUFIN*1,RSMCZ*4,STMIDZ*3,STMNMZ*9,FSTFLZ*1,STMDPZ*1, - 1 LATNS*1,LONEW*1,FMTVIT*6,BUFINZ*100,RELOCZ*1 - - DIMENSION IVTVAR(MAXVIT),ISTVAR(MAXVIT),IENVAR(MAXVIT) - - DIMENSION BUFIN(MAXCHR),FMTVIT(MAXVIT) - - EQUIVALENCE (BUFIN(1),RSMCZ),(BUFIN(5),RELOCZ),(BUFIN(6),STMIDZ), - 1 (BUFIN(10),STMNMZ),(BUFIN(19),FSTFLZ), - 2 (BUFIN(37),LATNS),(BUFIN(43),LONEW), - 3 (BUFIN(95),STMDPZ),(BUFIN(1),BUFINZ) - - EQUIVALENCE (IVTVAR(1),IDATEZ),(IVTVAR(2),IUTCZ) - - DATA FMTVIT/'(I8.8)','(I4.4)','(I3.3)','(I4.4)',2*'(I3.3)', - 1 3*'(I4.4)','(I2.2)','(I3.3)',4*'(I4.4)'/, - 2 ISTVAR/20,29,34,39,45,49,53,58,63,68,71,75,80,85,90/, - 3 IENVAR/27,32,36,42,47,51,56,61,66,69,73,78,83,88,93/, - 4 ISTID/6/,IENID/8/ - - DATA NUM/1/ - -C WRITE(6,1) NRCMX,NRCSTM -C 1 FORMAT(/'...ENTERING FSTSTM WITH NRCMX,NRCSTM=',2I4) - - DAYFST=1.0E10 - -C PICK OUT THE RECORD WITH THE MINIMUM DATE FOR THE CHOSEN STORM - - DO NCOM=1,NRCMX - BUFINZ=DUMREC(NCOM) - IF(STMIDZ .EQ. DUMREC(NRCSTM)(ISTID:IENID)) THEN - DO IV=1,2 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 BUFINZ) - ENDDO - CALL ZTIME(IDATEZ,IUTCZ,IYR,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,DAYZ) - IF(DAYZ .LE. DAYFST) THEN - NFIRST=NCOM - DAYFST=DAYZ - ENDIF - ENDIF - ENDDO - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: RITCUR WRITES Q/C RECORDS TO CURRENT DATA FILE -C PRGMMR: S. LORD ORG: NP22 DATE: 1990-11-01 -C -C ABSTRACT: WRITES CURRENT QUALITY CONTROLLED RECORDS TO THE CURRENT -C FILE (UNIT 60). -C -C PROGRAM HISTORY LOG: -C 1990-11-01 S. LORD -C 1991-07-22 S. LORD ADDED IDATEZ,IUTCZ TO ARGUMENT LIST -C 1992-07-01 S. LORD REVISION FOR TIME WINDOW -C -C USAGE: CALL RITCUR(IUNTRD,IUNTCU,NTEST,NOKAY,NBAD,IDATCU,JUTCCU,DAY0, -C MAXREC,IFLLCK,NUMTST,NUMOKA,NUMBAD,FILES,LNDFIL, -C ZZZREC,NNNREC,DUMREC,SCRREC,TSTREC,OKAREC,BADREC) -C INPUT ARGUMENT LIST: -C IUNTRD - UNIT NUMBER FOR READING RECORDS -C IUNTCU - UNIT NUMBER FOR CURRENT DATA FILE -C NTEST - NUMBER OF INPUT RECORDS (>0 FOR FILES=FALSE OPTION, -C - =0 FOR FILES=TRUE OPTION) -C IDATCU - DATE (YYYYMMDD) FOR ACCEPTANCE WINDOW -C JUTCCU - UTC (HHMMSS) FOR ACCEPTANCE WINDOW -C DAY0 - DATE OF ACCEPTANCE WINDOW -C MAXREC - DIMENSION OF INPUT ARRAYS -C FILES - LOGICAL VARIABLE, TRUE IF UPDATED SHORT-TERM HISTORY -C FILE HAS BEEN CREATED -C LNDFIL - LOGICAL VARIABLE, TRUE IF OVER-LAND FILTER SHOULD BE -C APPLIED TO CURRENT RECORDS. -C RECORDS TO THE CURRENT FILE -C DUMREC - CHARACTER VARIABLE -C TSTREC - CHARACTER ARRAY (LENGTH MAXREC) OF INPUT RECORDS. ONLY -C - THE FIRST NTEST ARE VALID IN THE CASE OF FILES=.FALSE. -C NUMTST - INDEX FOR ARRAY TSTREC -C ZZZREC - CHARACTER VARIABLE CONTAINING HEADER INFO -C NNNREC - CHARACTER VARIABLE CONTAINING COLUMN INFO -C -C OUTPUT ARGUMENT LIST: -C OKAREC - CONTAINS CANDIDATE QUALITY CONTROLLED RECORDS COPIED -C - TO THE CURRENT FILE -C NOKAY - NUMBER OF OKAY RECORDS -C NBAD - NUMBER OF RECORDS THAT FAILED THE OVERLAND CHECK -C IFLLCK - CONTAINS FAILURE CODE OF BAD RECORDS -C BADREC - ARRAY CONTAINING BAD RECORDS -C SCRREC - SCRATCH ARRAY CONTAINING STORM IDS AND NAMES -C NUMOKA - ARRAY CONTAINING INDICES OF OKAY RECORDS -C NUMBAD - ARRAY CONTAINING INDICES OF BAD RECORDS -C -C INPUT FILES: -C UNIT 20 - SCRATCH FILE CONTAINING QUALITY CONTROLLED RECORDS -C - IUNTRD POINTS TO THIS FILE WHEN FILES=.TRUE. -C UNIT 22 - ALIAS SHORT-TERM HISTORY FILE CONTAINING RECORDS -C - PROCESSED BY THIS PROGRAM FOR THE LAST SEVERAL DAYS. -C - IUNTRD POINTS TO THIS FILE WHEN FILES=.FALSE. -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C UNIT 60 - QUALITY CONTROLLED RECORDS (IUNTCU) -C -C REMARKS: IF LENGTH OF OUTPUT RECORDS (MAXCHR) EXCEEDS THE DESIGNATED -C RECORD LENGTH FOR THE FILE (MAXSPC), THIS SUBROUTINE WILL -C PRINT A NASTY MESSAGE AND CALL AN ABORT1 PROGRAM THAT GIVES -C A RETURN CODE OF 20 FOR THIS PROGRAM EXECUTION. UNDER -C THE FILES=TRUE OPTION, RECORDS ARE READ FROM THE SCRATCH -C FILE, DATE CHECKED, CHECKED FOR OVERLAND POSITIONS IF NEED -C BE, AND THEN WRITTEN TO THE CURRENT FILE. UNDER THE FILES= -C FALSE OPTION, ALL RECORDS PROCESSED BY THE PRESENT RUN OF -C THIS PROGRAM MAY BE WRITTEN IN ADDITION TO SOME RECORDS FROM -C THE ALIAS SHORT-TERM HISTORY FILE. IN BOTH OPTIONS, ONLY THE -C LATEST STORM RECORD IS WRITTEN. ALL RECORDS LIE IN A TIME -C WINDOW GIVEN BY DAY0. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE RITCUR(IUNTRD,IUNTCU,NTEST,NOKAY,NBAD,IDATCU,JUTCCU, - 1 DAY0,MAXREC,IFLLCK,NUMTST,NUMOKA,NUMBAD,FILES, - 2 LNDFIL,ZZZREC,NNNREC,DUMREC,SCRREC,TSTREC, - 3 OKAREC,BADREC) - - PARAMETER (MAXSPC=100) - - SAVE - - LOGICAL FIRST,FILES,LNDFIL,FOUND - - CHARACTER*(*) TSTREC(0:MAXREC),OKAREC(MAXREC),BADREC(MAXREC), - 1 ZZZREC,NNNREC,DUMREC,SCRREC(0:MAXREC) - CHARACTER*100 DUMY2K - - PARAMETER (MAXCHR=95) - PARAMETER (MAXVIT=15) - - CHARACTER FMTVIT*6 - - DIMENSION IVTVAR(MAXVIT),ISTVAR(MAXVIT),IENVAR(MAXVIT) - - DIMENSION FMTVIT(MAXVIT) - - EQUIVALENCE (IVTVAR(1),IDATEZ),(IVTVAR(2),IUTCZ) - - DIMENSION IFLLCK(MAXREC),NUMTST(MAXREC),NUMOKA(MAXREC), - 1 NUMBAD(MAXREC) - - DIMENSION RINC(5) - - DATA FMTVIT/'(I8.8)','(I4.4)','(I3.3)','(I4.4)',2*'(I3.3)', - 2 3*'(I4.4)','(I2.2)','(I3.3)',4*'(I4.4)'/, - 3 ISTVAR/20,29,34,39,45,49,53,58,63,68,71,75,80,85,90/, - 4 IENVAR/27,32,36,42,47,51,56,61,66,69,73,78,83,88,93/, - 5 ISTID/6/,IENID/8/ - - DATA FIRST/.TRUE./,NUM/1/,FIVMIN/3.4722E-3/ - - WRITE(6,1) IUNTRD,IUNTCU,FILES,LNDFIL,IDATCU,JUTCCU,DAY0 - 1 FORMAT(/'...ENTERING RITCUR WITH IUNTRD,IUNTCU,FILES,LNDFIL,', - 1 'IDATCU,JUTCCU,DAY0',2I3,2L2,I9,I7,F10.3) - - IF(FIRST) THEN - FIRST=.FALSE. - IF(MAXCHR .GT. MAXSPC) THEN - WRITE(6,5) MAXCHR,MAXSPC - 5 FORMAT(/'******INSUFFICIENT SPACE ALLOCATED FOR CURRENT HISTORY ', - 1 'FILE.'/7X,'MAXCHR, AVAILABLE SPACE ARE:',2I4) - CALL ABORT1(' RITCUR',1) - ENDIF - - ENDIF - -C RITCUR USES EITHER OF TWO POSSIBLE SOURCES FOR CURRENT RECORDS: -C 1) IF FILES=.TRUE., THE SCRATCH FILE (IUNTOK) CONTAINS -C ALL THE CURRENT RECORDS, INCLUDING THOSE PROCESSED BY A -C PREVIOUS RUN OF THIS PROGRAM. HOWEVER, A POSSIBILITY -C EXISTS THAT A CURRENT COASTAL RECORD MAY BE IN THE -C SCRATCH FILE. THEREFORE, THERE IS AN OPTIONAL FILTER -C (LNDFIL) BY USING A CALL TO SELACK TO WEED OUT THESE -C RECORDS. - -C 2) IF FILES=.FALSE., THE CURRENT RECORDS ARE THOSE -C PROCESSED BY THE PRESENT RUN OF THIS PROGRAM (OKAREC) -C AND CANDIDATES FROM THE ALIAS SHORT-TERM HISTORY FILE. - -C IN EITHER CASE, ONLY THE LATEST RECORD FOR EACH STORM IS -C WRITTEN. - - REWIND IUNTCU - REWIND IUNTRD - NUNIQ=0 - SCRREC(NUNIQ)='ZZZ' - print *, ' ' - print *, ' ' - - 10 CONTINUE - - READ(IUNTRD,11,END=100) DUMREC - 11 FORMAT(A) - -C AT THIS POINT WE DO NOT KNOW IF A 2-DIGIT YEAR BEGINS IN COLUMN 20 -C OF THE RECORD (OLD NON-Y2K COMPLIANT FORM) OR IF A 4-DIGIT YEAR -C BEGINS IN COLUMN 20 (NEW Y2K COMPLIANT FORM) - TEST ON LOCATION OF -C LATITUDE N/S INDICATOR TO FIND OUT ... - - IF(DUMREC(35:35).EQ.'N' .OR. DUMREC(35:35).EQ.'S') THEN - -C ... THIS RECORD STILL CONTAINS THE OLD 2-DIGIT FORM OF THE YEAR - -C ... THIS PROGRAM WILL CONVERT THE RECORD TO A 4-DIGIT YEAR USING THE -C "WINDOWING" TECHNIQUE SINCE SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT *, '==> Read in RECORD from tcvitals file -- contains a', - $ ' 2-digit year "',DUMREC(20:21),'"' - PRINT *, ' ' - PRINT '(a,i0,a,a)', 'From unit ',iuntrd,'; DUMREC-6: ',dumrec - PRINT *, ' ' - DUMY2K(1:19) = DUMREC(1:19) - IF(DUMREC(20:21).GT.'20') THEN - DUMY2K(20:21) = '19' - ELSE - DUMY2K(20:21) = '20' - ENDIF - DUMY2K(22:100) = DUMREC(20:100) - DUMREC = DUMY2K - PRINT *, ' ' - PRINT *, '==> 2-digit year converted to 4-digit year "', - $ DUMREC(20:23),'" via windowing technique' - PRINT *, ' ' - PRINT '(a,i0,a,a)', 'From unit ',iuntrd,'; DUMREC-6: ',dumrec - PRINT *, ' ' - - ELSE IF(DUMREC(37:37).EQ.'N' .OR. DUMREC(37:37).EQ.'S') THEN - -C ... THIS RECORD CONTAINS THE NEW 4-DIGIT FORM OF THE YEAR -C ... NO CONVERSION NECESSARY SINCE THIS SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT *, '==> Read in RECORD from tcvitals file -- contains a', - $ ' 4-digit year "',DUMREC(20:23),'"' - PRINT *, ' ' - PRINT '(a,i0,a,a)', 'From unit ',iuntrd,'; DUMREC-6: ',dumrec - PRINT *, ' ' - PRINT *, '==> No conversion necessary' - PRINT *, ' ' - - ELSE - - PRINT *, ' ' - PRINT *, '***** Cannot determine if this record contains ', - $ 'a 2-digit year or a 4-digit year - skip it and try reading ', - $ 'the next record' - PRINT *, ' ' - GO TO 10 - - END IF - - DO IV=1,2 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 DUMREC) - ENDDO - CALL ZTIME(IDATEZ,IUTCZ,IYR,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,DAYZ) - - IF(DAYZ .GE. DAY0-FIVMIN) THEN - NTEST=NTEST+1 - TSTREC(NTEST)=DUMREC - NUMTST(NTEST)=NTEST -C WRITE(6,33) NTEST,DUMREC -C 33 FORMAT('...READING FROM SCRATCH FILE'/4X,I4,'...',A,'...') - ENDIF - GO TO 10 - - 100 CONTINUE - - IF(NTEST .GT. 0) THEN - IF(LNDFIL .AND. FILES) THEN - WRITE(6,103) NTEST,NOKAY,NBAD - 103 FORMAT(/'...IN RITCUR, CALLING SELACK IN RITCUR TO CHECK FOR ', - 1 'OVERLAND POSITIONS.'/4X,'NTEST,NOKAY,NBAD=',3I4) - - CALL SELACK(NTEST,NOKAY,NBAD,IECOST,IFLLCK,NUMTST,NUMOKA,NUMBAD, - 1 LNDFIL,ZZZREC,NNNREC,TSTREC,BADREC,OKAREC) - - ELSE - DO NOK=1,NTEST - OKAREC(NOK)=TSTREC(NOK) - NUMOKA(NOK)=NOK - ENDDO - NOKAY=NTEST - ENDIF - -C PICK OUT THE UNIQUE STORMS - - DO NOK=1,NOKAY - FOUND=.FALSE. - DO NUNI=1,NUNIQ - IF(OKAREC(NOK)(ISTID:IENID) .EQ. SCRREC(NUNI)(1:IENID-ISTID+1)) - 1 FOUND=.TRUE. - ENDDO - IF(.NOT. FOUND) THEN - NUNIQ=NUNIQ+1 - SCRREC(NUNIQ)(1:IENID-ISTID+1)=OKAREC(NOK)(ISTID:IENID) - ENDIF - ENDDO - WRITE(6,151) NUNIQ - 151 FORMAT(/'...THE NUMBER OF UNIQUE STORMS IS',I4) - -C SCAN THROUGH RECORDS AND PICK OUT THE LATEST STORM RECORD FOR -C EACH UNIQUE STORM. - - WRITE(6,157) - 157 FORMAT(/'...THE FOLLOWING LATEST RECORDS FOR EACH STORM ARE ', - 1 'BEING WRITTEN TO THE CURRENT FILE:') - - DO NUNI=1,NUNIQ - DAYCHK=-1.E10 - INDXZ=-99 - DO NOK=1,NOKAY - IF(OKAREC(NOK)(ISTID:IENID) .EQ. SCRREC(NUNI)(1:IENID-ISTID+1)) - 1 THEN - DO IV=1,2 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 OKAREC(NOK)) - ENDDO - CALL ZTIME(IDATEZ,IUTCZ,IYR,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,DAYZ) - IF(DAYZ .GT. DAYCHK) THEN - INDXZ=NOK - DAYCHK=DAYZ - ENDIF - ENDIF - ENDDO - IF(INDXZ .GT. 0) THEN - WRITE(6,173) INDXZ,OKAREC(INDXZ)(1:MAXCHR) - WRITE(IUNTCU,177) OKAREC(INDXZ)(1:MAXCHR) - 173 FORMAT('...',I3,'...',A,'...') - 177 FORMAT(A) - - ELSE - WRITE(6,181) SCRREC(NUNI)(1:IENID-ISTID+1) - 181 FORMAT(/'###STORM ID=',A,' CANNOT BE FOUND. ABORT1') - CALL ABORT1(' RITCUR',181) - ENDIF - ENDDO - WRITE(6,221) NUNIQ,IUNTCU - 221 FORMAT(/'...',I4,' RECORDS HAVE BEEN COPIED TO THE CURRENT FILE ', - 1 '(UNIT',I3,').') - - ELSE - WRITE(6,231) - 231 FORMAT(/'...NO CURRENT RECORDS WILL BE WRITTEN.') - END FILE IUNTCU - ENDIF - - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: RITSTH WRITES SHORT-TERM HISTORY FILE -C PRGMMR: S. LORD ORG: NP22 DATE: 1990-11-01 -C -C ABSTRACT: WRITES ALL INPUT RECORDS AND QUALITY CONTROL MARKS -C ASSIGNED BY THIS PROGRAM TO A SCRATCH FILE THAT -C CONTAINS ALL RECENT HISTORICAL RECORDS FOR EACH STORM. -C -C PROGRAM HISTORY LOG: -C 1990-11-01 S. LORD -C -C USAGE: CALL RITSTH(IUNTHA,IUNTHO,IUNTOK,NOKAY,NBAD,DAYMIN,IECOST, -C MAXCKS,MAXREC,NUMBAD,IEFAIL,DUMREC,OKAREC,BADREC) -C INPUT ARGUMENT LIST: -C IUNTHA - UNIT NUMBER FOR THE ALIAS SHORT-TERM HISTORY FILE. -C IUNTHO - UNIT NUMBER FOR THE ORIGINAL SHORT-TERM HISTORY FILE. -C IUNTOK - UNIT NUMBER FOR THE SCRATCH FILE CONTAINING RECORDS -C - WRITTEN TO THE SHORT-TERM HISTORY FILE. -C NOKAY - NUMBER OF RECORDS THAT PASSED ALL Q/C CHECKS. -C NBAD - NUMBER OF RECORDS THAT HAVE AT LEAST ONE ERROR. -C DAYMIN - EARLIEST (MINIMUM) DATE FOR RECORDS THAT WILL BE -C - COPIED TO THE SHORT-TERM HISTORICAL FILE. -C - UNITS ARE DDD.FFF, WHERE DDD=JULIAN DAY, FFF=FRAC- -C - TIONAL DAY (E.G. .5=1200 UTC). -C IECOST - ERROR CODE FOR AN OVERLAND (COASTAL) RECORD. -C MAXCKS - NUMBER OF QUALITY CONTROL CHECKS. SECOND DIMENSION OF -C - ARRAY IEFAIL IS (0:MAXCKS). -C MAXREC - FIRST DIMENSION OF ARRAY IEFAIL. -C NUMBAD - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH BAD -C - RECORD. -C IEFAIL - INTEGER ARRAY CONTAINING QUALITY MARKS. INDEXING -C - IS ACCORDING TO ARRAY NUMBAD. -C DUMREC - CHARACTER VARIABLE LONG ENOUGH TO HOLD VITAL -C - STATISTICS RECORD. -C OKAREC - CHARACTER ARRAY CONTAINING ALL RECORDS THAT HAVE -C - PASSED ALL Q/C CHECKS -C BADREC - CHARACTER ARRAY CONTAINING ALL RECORDS THAT HAVE -C - FAILED AT LEAST ONE Q/C CHECK -C -C INPUT FILES: -C UNIT 22 - ALIAS SHORT=TERM HISTORY FILE -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C UNIT 20 - SCRATCH FILE -C UNIT 21 - ORIGINAL SHORT-TERM HISTORY FILE -C -C REMARKS: RECORDS ARE COPIED FROM THE CURRENT ALIAS SHORT-TERM HISTORY -C FILE TO THE SCRATCH FILE IUNTOK. THE CONTENTS OF IUNTOK -C WILL BE FINALLY BE COPIED TO THE SHORT-TERM HISTORY FILE -C BY ROUTINE FNLCPY. ORIGINAL RECORDS THAT CONTRIBUTED TO -C MAKING ALIAS RECORDS ARE COPIED TO THE ORIGINAL SHORT-TERM -C SHORT-TERM HISTORY FILE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE RITSTH(IUNTHA,IUNTHO,IUNTOK,NOKAY,NBAD,DAYMIN,IECOST, - 1 MAXCKS,MAXREC,NUMBAD,IEFAIL,DUMREC,OKAREC,BADREC) - - SAVE - - CHARACTER*(*) DUMREC,OKAREC(NOKAY),BADREC(NBAD) - - DIMENSION IEFAIL(MAXREC,0:MAXCKS),NUMBAD(NBAD) - - ICALL=2 - - REWIND IUNTOK - -C COPY ALL RECORDS FROM THE CURRENT ORIGINAL SHORT-TERM HISTORY -C FILE TO A SCRATCH FILE (IUNTOK) FOR TEMPORARY STORAGE. - - WRITE(6,1) DAYMIN,ICALL - 1 FORMAT(/'...THE FOLLOWING RECORDS, HAVING DATES GREATER THAN OR ', - 1 'EQUAL TO DAY',F10.3,', WILL BE CHECKED FOR EXACT AND ', - 2 'PARTIAL DUPLICATES '/4X,'(ICALL=',I2,') AND WILL BE ', - 3 'COPIED FROM THE ORIGINAL SHORT-TERM HISTORICAL FILE TO ', - 4 'THE PRELIMINARY QUALITY CONTROLLED FILE'/4X,'(SCRATCH ', - 5 'FILE) FOR TEMPORARY STORAGE:') - - CALL CPYREC(ICALL,IUNTHO,IUNTOK,NOKAY,DAYMIN,DUMREC,OKAREC) - -C NOW ADD THE CURRENT RECORDS. - - WRITE(6,21) - 21 FORMAT(//'...THE FOLLOWING ACCEPTABLE ORIGINAL RECORDS WILL BE ', - 1 'ADDED TO THE NEW ORIGINAL SHORT-TERM HISTORY FILE:'/) - DO NOK=1,NOKAY - IF(OKAREC(NOK)(1:1) .NE. '!') THEN - WRITE(6,23) NOK,OKAREC(NOK) - 23 FORMAT('...',I4,'...',A) - WRITE(IUNTOK,27) OKAREC(NOK) - 27 FORMAT(A) - ENDIF - ENDDO - -C NOW WE APPEND THE SCRATCH FILE WITH RECORDS THAT CONTRIBUTED -C TO ALIAS RECORDS. - - WRITE(6,101) - 101 FORMAT(/'...THE FOLLOWING (BAD) RECORDS WITH RSMCCK OR RCNCIL ', - 1 'ERRORS WILL BE ADDED TO THE SHORT-TERM ORIGINAL'/4X, - 2 'HISTORY FILE:'/) - - DO NBA=1,NBAD - - IF(IEFAIL(NUMBAD(NBA),6) .EQ. 10 .OR. - 1 IEFAIL(NUMBAD(NBA),6) .GE. 21 .OR. - 1 IABS(IEFAIL(NUMBAD(NBA),5)) .EQ. 20) THEN - - DO NCK=1,MAXCKS - IF(NCK .NE. 6 .AND. NCK .NE. 5 .AND. - 1 IEFAIL(NUMBAD(NBA),NCK) .GT. 0) GO TO 150 - ENDDO - - WRITE(6,131) NBA,BADREC(NBA) - 131 FORMAT('...',I4,'...',A) - WRITE(IUNTOK,133) BADREC(NBA) - 133 FORMAT(A) - - ENDIF - 150 CONTINUE - ENDDO - -C COPY RECORDS THAT ARE MORE RECENT THAN DAYMIN FROM THE -C SCRATCH FILE (IUNTOK) TO THE ORIGINAL SHORT-TERM -C HISTORY FILE - - ICALL=1 - REWIND IUNTOK - REWIND IUNTHO - WRITE(6,151) - 151 FORMAT(/'...THE FOLLOWING RECORDS WILL BE COPIED FROM THE ', - 1 'SCRATCH FILE TO THE NEW ORIGINAL SHORT-TERM HISTORICAL ', - 2 'FILE:') - - CALL CPYREC(ICALL,IUNTOK,IUNTHO,NOKAY,DAYMIN,DUMREC,OKAREC) - - ICALL=3 - - REWIND IUNTOK - -C COPY RECORDS THAT ARE MORE RECENT THAN DAYMIN FROM THE -C CURRENT ALIAS SHORT-TERM HISTORY FILE TO A SCRATCH FILE -C (IUNTOK). THEN ADD THE CURRENT RECORDS. - - CALL CPYREC(ICALL,IUNTHA,IUNTOK,NOKAY,DAYMIN,DUMREC,OKAREC) - - WRITE(6,211) - 211 FORMAT(//'...THE FOLLOWING ACCEPTABLE RECORDS WILL BE ADDED TO ', - 1 'THE NEW ALIAS SHORT-TERM HISTORY FILE:'/) - DO NOK=1,NOKAY - WRITE(6,213) NOK,OKAREC(NOK) - 213 FORMAT('...',I4,'...',A) - WRITE(IUNTOK,217) OKAREC(NOK) - 217 FORMAT(A) - ENDDO - -C ADD RECORDS THAT HAVE OVERLAND POSITIONS TO THE SHORT-TERM -C HISTORY FILE, PROVIDED THEY HAVE NO OTHER ERRORS - - WRITE(6,41) - 41 FORMAT(/'...THE FOLLOWING (BAD) RECORDS WITH COASTAL OVERLAND ', - 1 'POSITIONS WILL BE ADDED TO THE NEW ALIAS SHORT-TERM '/4X, - 2 'HISTORY FILE FOR FUTURE TRACK CHECKS:'/) - - DO NBA=1,NBAD - - IF(IEFAIL(NUMBAD(NBA),4) .EQ. IECOST) THEN - - DO NCK=1,MAXCKS - IF(NCK .NE. 4 .AND. IEFAIL(NUMBAD(NBA),NCK) .GT. 0) GO TO 300 - ENDDO - - WRITE(6,261) NBA,BADREC(NBA) - 261 FORMAT('...',I4,'...',A) - WRITE(IUNTOK,263) BADREC(NBA) - 263 FORMAT(A) - - ENDIF - 300 CONTINUE - ENDDO - -C THE SCRATCH FILE (IUNTOK) NOW CONTAINS ALL RECORDS THAT WILL -C BE IN THE NEW ALIAS SHORT-TERM HISTORY FILE. SUBROUTINE FNLCPY -C WILL COPY THIS SCRATCH FILE TO THE NEW ALIAS SHORT-TERM HISTORY -C FILE. - - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: RITHIS WRITES RECORDS AND Q/C MARKS TO FILE -C PRGMMR: S. LORD ORG: NP22 DATE: 1990-11-01 -C -C ABSTRACT: WRITES ALL INPUT RECORDS AND QUALITY CONTROL MARKS -C ASSIGNED BY THIS PROGRAM TO A LONG-TERM HISTORY FILE. -C -C PROGRAM HISTORY LOG: -C 1990-11-01 S. LORD -C -C USAGE: CALL RITHIS(IUNTHI,IEFAIL,NRTOT,IDATE,IUTC,NUMREC,NREC, -C MAXREC,MAXCKS,HROFF,WINCUR,RUNID,LNDFIL,FILES, -C RECORD,ZZZREC,XXXREC) -C INPUT ARGUMENT LIST: -C IUNTHI - UNIT NUMBER FOR THE OUTPUT FILE. NOTE: SIGN OF THE -C - QUALITY MARKS IS ATTACHED TO THIS NUMBER! -C IEFAIL - INTEGER ARRAY CONTAINING QUALITY MARKS. INDEXING -C - IS ACCORDING TO ARRAY NUMREC. SIGN OF THIS NUMBER IS -C - ATTACHED TO IUNTHI! -C NRTOT - TOTAL NUMBER OF RECORDS WRITTEN INTO THE FILE. NREC -C - IS THE NUMBER WRITTEN FOR EACH CALL OF THE ROUTINE. -C IDATE - YYYYMMDD FOR WHICH THE PROGRAM IS BEING RUN. -C IUTC - HHMM FOR WHICH THE PROGRAM IS BEING RUN. -C NUMREC - ARRAY OF RECORD NUMBERS CORRESPONDING TO THE QUALITY -C - MARKS STORED IN ARRAY IEFAIL. -C NREC - NUMBER OF RECORDS TO BE WRITTEN TO THE OUTPUT FILE. -C MAXREC - FIRST DIMENSION OF ARRAY IEFAIL. -C MAXCKS - NUMBER OF QUALITY CONTROL CHECKS. SECOND DIMENSION OF -C - ARRAY IEFAIL IS (0:MAXCKS). -C HROFF - OFFSET (FRACTIONAL HOURS) BETWEEN TIME PROGRAM IS -C - RUN AND THE VALID CYCLE TIME -C WINCUR - TIME WINDOW FOR ADDING RECORDS TO CURRENT FILE -C RUNID - CHARACTER VARIABLE IDENTIFYING RUN -C LNDFIL - LOGICAL VARIABLE, TRUE IF OVER LAND POSITIONS ARE -C - NOT WRITTEN TO CURRENT FILE -C FILES - LOGICAL VARIABLE: TRUE IF SHORT-TERM HISTORY FILES ARE -C - UPDATED. -C RECORD - CHARACTER ARRAY CONTAINING OUTPUT RECORDS. -C ZZZREC - COLUMN HEADER RECORD. -C XXXREC - COLUMN HEADER RECORD. -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C UNIT 61 - CONTAINS HISTORY OF ALL RECORDS THAT ARE OPERATED ON -C - BY THIS PROGRAM -C -C REMARKS: THE HEADER RECORD IS WRITTEN ON THE FIRST CALL OF THIS -C ROUTINE. IT CONSISTS OF IDATE,IUTC,NRTOT,NREC,ZZZREC -C AND XXXREC. FOR THE FIRST CALL, NREC CORRESPONDS TO THE -C NUMBER OF RECORDS THAT PASSED THE Q/C CHECKS. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE RITHIS(IUNTHI,IEFAIL,NRTOT,IDATE,IUTC,NUMREC,NREC, - 1 MAXREC,MAXCKS,HROFF,WINCUR,RUNID,LNDFIL,FILES, - 2 RECORD,ZZZREC,XXXREC) - - PARAMETER (MAXSPH=131) - - SAVE - - LOGICAL FIRST,LNDFIL,FILES - - CHARACTER*(*) RUNID,RECORD(NREC),ZZZREC,XXXREC - - PARAMETER (MAXCHR=95) - - DIMENSION IEFAIL(MAXREC,0:MAXCKS),NUMREC(NREC) - - DATA FIRST/.TRUE./ - - IF(FIRST) THEN - FIRST=.FALSE. - IF(MAXCHR+1+3*(MAXCKS+1) .GT. MAXSPH) THEN - WRITE(6,1) MAXCHR,MAXCKS,MAXCHR+1+3*(MAXCKS+1),MAXSPH - 1 FORMAT(/'******INSUFFICIENT SPACE ALLOCATED FOR LONG-TERM ', - 1 'HISTORY FILE.'/7X,'MAXCHR,MAXCK,(REQUIRED,AVAILABLE) ', - 2 ' SPACE ARE:',4I4) - CALL ABORT1(' RITHIS',1) - ENDIF - - NROKAY=NREC - WRITE(IABS(IUNTHI),3) IDATE,IUTC,NRTOT,NROKAY,HROFF,RUNID,LNDFIL, - 1 FILES,WINCUR,ZZZREC(1:MAXCHR),XXXREC - 3 FORMAT('IDATE=',I8,' IUTC=',I4,' NRTOT=',I4,' NROKAY=',I4, - 1 ' HROFF=',F6.2,' RUNID=',A12,' LNDFIL=',L1,' FILES=',L1, - 2 ' WINCUR=',F6.3/A,1X,A) - ENDIF - -C OUTPUT UNIT NUMBER IS NEGATIVE FOR OKAY RECORDS (ERROR CODES ARE -C ALWAYS NEGATIVE). OUTPUT UNIT NUMBER IS POSITIVE FOR BAD -C RECORDS, WHICH MAY HAVE A MIXTURE OF POSITIVE AND NEGATIVE -C ERROR CODES. - - IF(IUNTHI .LT. 0) THEN - DO NR=1,NREC - WRITE(IABS(IUNTHI),5) RECORD(NR)(1:MAXCHR),IEFAIL(NUMREC(NR),0), - 1 (-IABS(IEFAIL(NUMREC(NR),ICK)),ICK=1,MAXCKS) - 5 FORMAT(A,1X,I3,8I3) - ENDDO - - ELSE - DO NR=1,NREC - WRITE(IABS(IUNTHI),5) RECORD(NR)(1:MAXCHR),IEFAIL(NUMREC(NR),0), - 1 (IEFAIL(NUMREC(NR),ICK),ICK=1,MAXCKS) - ENDDO - ENDIF - - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: FNLCPY RESETS FILES FOR THE NEXT INPUT CYCLE -C PRGMMR: S. LORD ORG: NP22 DATE: 1990-11-01 -C -C ABSTRACT: RESETS THE FILES CONTAINING THE INPUT RECORDS FOR THE -C NEXT RUN OF THE PROGRAM. THE SHORT-TERM HISTORY FILE IS UPDATED -C AND ALL INPUT FILES ARE FLUSHED, RECORDS THAT BELONG TO A FUTURE -C CYCLE ARE REINSERTED INTO THE INPUT FILES. -C -C PROGRAM HISTORY LOG: -C 1990-11-01 S. LORD -C -C USAGE: CALL FNLCPY(IUNTVZ,MAXUNT,IUNTOK,IUNTHA,MAXREC,NTBP,NUMTBP, -C IUNTIN,TBPREC,DUMREC) -C INPUT ARGUMENT LIST: -C IUNTVZ - UNIT NUMBER FOR FIRST INPUT FILE -C MAXUNT - NUMBER OF INPUT FILES TO BE RESET -C IUNTOK - UNIT NUMBER FOR TEMPORARY HISTORY FILE, WHICH CONTAINS -C - QUALITY CONTROLLED RECORDS, INCLUDING THOSE JUST -C - PROCESSED. -C IUNTHA - UNIT NUMBER FOR THE ALIAS SHORT TERM HISTORY FILE. -C RECORDS ARE COPIED FROM IUNTOK TO IUNTHA. -C MAXREC - MAXIMUM NUMBER OF RECORDS, DIMENSION OF IUNTIN. -C NTBP - NUMBER OF RECORDS FOR THE NEXT CYCLE THAT WILL BE -C - PUT BACK INTO THE INPUT FILES (THROWN BACK INTO THE -C - POND). -C NUMTBP - INTEGER ARRAY CONTAINING INDICES OF RECORDS THAT WILL -C - THROWN BACK INTO THE POND. INDICES REFER TO POSITION -C - IN ARRAY IUNTIN. -C IUNTIN - INTEGER ARRAY CONTAINING UNIT NUMBERS FOR RECORDS -C - THAT WILL BE THROWN BACK INTO THE POND. -C TBPREC - CHARACTER ARRAY CONTAINING RECORDS THAT WILL BE -C - THROWN BACK INTO THE POND. -C DUMREC - CHARACTER VARIABLE FOR COPYING RECORDS TO THE -C - SHORT-TERM HISTORY FILE. -C -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C UNIT 10 - SCRATCH FILE -C UNIT 22 - SHORT-TERM HISTORY, RECORDS BACK 4 DAYS FROM PRESENT -C UNIT 30 - FILE(S) CONTAINING NEW RECORDS TO BE QUALITY -C - CONTROLLED. RECORDS APPROPRIATE TO A FUTURE CYCLE ARE -C - WRITTEN BACK TO THIS FILE -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE FNLCPY(IUNTVZ,MAXUNT,IUNTOK,IUNTHA,MAXREC,NTBP,NUMTBP, - 1 IUNTIN,TBPREC,DUMREC) - - SAVE - - CHARACTER DUMREC*(*),TBPREC(NTBP)*(*) - CHARACTER*100 DUMY2K - - DIMENSION NUMTBP(NTBP),IUNTIN(MAXREC) - -C FINAL COPYING BACK TO SHORT TERM HISTORY FILE AND ZEROING ALL -C FILES THAT WILL CONTAIN NEW RECORDS FOR THE NEXT CYCLE - - NREC=0 - REWIND IUNTOK - REWIND IUNTHA - - 10 CONTINUE - - READ(IUNTOK,11,END=20) DUMREC - 11 FORMAT(A) - -C AT THIS POINT WE DO NOT KNOW IF A 2-DIGIT YEAR BEGINS IN COLUMN 20 -C OF THE RECORD (OLD NON-Y2K COMPLIANT FORM) OR IF A 4-DIGIT YEAR -C BEGINS IN COLUMN 20 (NEW Y2K COMPLIANT FORM) - TEST ON LOCATION OF -C LATITUDE N/S INDICATOR TO FIND OUT ... - - IF(DUMREC(35:35).EQ.'N' .OR. DUMREC(35:35).EQ.'S') THEN - -C ... THIS RECORD STILL CONTAINS THE OLD 2-DIGIT FORM OF THE YEAR - -C ... THIS PROGRAM WILL CONVERT THE RECORD TO A 4-DIGIT YEAR USING THE -C "WINDOWING" TECHNIQUE SINCE SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT *, '==> Read in RECORD from tcvitals file -- contains a', - $ ' 2-digit year "',DUMREC(20:21),'"' - PRINT *, ' ' - PRINT '(a,i0,a,a)', 'From unit ',iuntok,'; DUMREC-7: ',dumrec - PRINT *, ' ' - DUMY2K(1:19) = DUMREC(1:19) - IF(DUMREC(20:21).GT.'20') THEN - DUMY2K(20:21) = '19' - ELSE - DUMY2K(20:21) = '20' - ENDIF - DUMY2K(22:100) = DUMREC(20:100) - DUMREC = DUMY2K - PRINT *, ' ' - PRINT *, '==> 2-digit year converted to 4-digit year "', - $ DUMREC(20:23),'" via windowing technique' - PRINT *, ' ' - PRINT '(a,i0,a,a)', 'From unit ',iuntok,'; DUMREC-7: ',dumrec - PRINT *, ' ' - - ELSE IF(DUMREC(37:37).EQ.'N' .OR. DUMREC(37:37).EQ.'S') THEN - -C ... THIS RECORD CONTAINS THE NEW 4-DIGIT FORM OF THE YEAR -C ... NO CONVERSION NECESSARY SINCE THIS SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT *, '==> Read in RECORD from tcvitals file -- contains a', - $ ' 4-digit year "',DUMREC(20:23),'"' - PRINT *, ' ' - PRINT '(a,i0,a,a)', 'From unit ',iuntok,'; DUMREC-7: ',dumrec - PRINT *, ' ' - PRINT *, '==> No conversion necessary' - PRINT *, ' ' - - ELSE - - PRINT *, ' ' - PRINT *, '***** Cannot determine if this record contains ', - $ 'a 2-digit year or a 4-digit year - skip it and try reading ', - $ 'the next record' - PRINT *, ' ' - GO TO 10 - - END IF - - NREC=NREC+1 - WRITE(IUNTHA,11) DUMREC - GO TO 10 - - 20 CONTINUE - WRITE(6,21) NREC,IUNTHA - 21 FORMAT(/'...',I3,' RECORDS HAVE BEEN COPIED TO THE FUTURE ALIAS ', - 1 'SHORT-TERM HISTORY FILE, UNIT=',I3) - - IUNTVI=IUNTVZ - DO NFILE=1,MAXUNT - REWIND IUNTVI - - IF(NTBP .EQ. 0) THEN - - END FILE IUNTVI - WRITE(6,23) IUNTVI - 23 FORMAT(/'...UNIT',I3,' HAS BEEN ZEROED FOR THE NEXT CYCLE.') - -C THROW RECORDS FOR THE NEXT CYCLE BACK INTO THE POND - - ELSE - - WRITE(6,27) IUNTVI - 27 FORMAT(/'...THE FOLLOWING RECORDS WILL BE THROWN BACK INTO THE ', - 1 'POND = UNIT',I3,':') - - DO NTB=1,NTBP - IF(IUNTIN(NUMTBP(NTB)) .EQ. IUNTVI) THEN - WRITE(IUNTVI,11) TBPREC(NTB) - WRITE(6,29) NTB,NUMTBP(NTB),TBPREC(NTB) - 29 FORMAT(3X,I4,'...',I4,'...',A,'...') - ENDIF - ENDDO - - ENDIF - - IUNTVI=IUNTVI+1 - - ENDDO - - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: CPYREC COPIES RECORDS CHECKS DATES & DUPLICATES -C PRGMMR: S. LORD ORG: NP22 DATE: 1990-11-01 -C -C ABSTRACT: RECORDS ARE CHECKED FOR DATE AND EXACT AND PARTIAL -C DUPLICATES AND COPIED FROM ONE FILE TO A SECOND FILE. -C -C PROGRAM HISTORY LOG: -C 1990-11-01 S. LORD -C 1992-03-10 S. LORD - ADDED FILTERS. -C -C USAGE: CALL CPYREC(ICALL,IUNTRD,IUNTWT,NOKAY,DAYMN,DUMREC,OKAREC) -C INPUT ARGUMENT LIST: -C ICALL - TOGGLE FOR FILTER. 1: NO FILTER (STRAIGHT COPY) -C 2: DATE/TIME, STORM ID & NAME -C 3: #2 ABOVE PLUS RSMC (PARTIAL -C DUPLICATE) -C IUNTRD - UNIT NUMBER FOR RECORDS TO BE COPIED -C IUNTWT - RECORDS COPIED TO THIS UNIT NUMBER -C NOKAY - LENGTH OF ARRAY OKAREC -C DAYMN - RECORDS WITH DATES PRIOR TO THIS DAY WILL NOT BE -C - COPIED. DAYMN HAS UNITS OF DDD.FFF, WHERE DDD= -C - JULIAN DAY, FFF=FRACTIONAL DAY (E.G. .5 IS 1200 UTC.) -C DUMREC - CHARACTER VARIABLE LONG ENOUGH TO HOLD COPIED RECORD. -C OKAREC - CHARACTER ARRAY CONTAINING RECORDS AGAINST WHICH -C - EACH COPIED RECORD WILL BE CHECKED FOR EXACT OR -C - PARTIAL DUPLICATES. A PARTIAL DUPLICATE IS ONE WITH -C - THE SAME RSMC, DATE/TIME AND STORM NAME/ID. -C -C INPUT FILES: -C UNIT 20 - SHORT TERM HISTORY -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C UNIT 22 - PRELIMINARY QUALITY CONTROLLED FILE -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE CPYREC(ICALL,IUNTRD,IUNTWT,NOKAY,DAYMN,DUMREC,OKAREC) - - SAVE - - CHARACTER*(*) DUMREC,OKAREC(NOKAY) - CHARACTER*100 DUMY2K - - DIMENSION RINC(5) - - PARAMETER (MAXVIT=15) - - CHARACTER FMTVIT*6 - - DIMENSION IVTVAR(MAXVIT),ISTVAR(MAXVIT),IENVAR(MAXVIT) - - DIMENSION FMTVIT(MAXVIT) - - EQUIVALENCE (IVTVAR(1),IDATEZ),(IVTVAR(2),IUTCZ) - - DATA FMTVIT/'(I8.8)','(I4.4)','(I3.3)','(I4.4)',2*'(I3.3)', - 1 3*'(I4.4)','(I2.2)','(I3.3)',4*'(I4.4)'/, - 2 ISTVAR/20,29,34,39,45,49,53,58,63,68,71,75,80,85,90/, - 3 IENVAR/27,32,36,42,47,51,56,61,66,69,73,78,83,88,93/ - - DATA NUM/1/,FIVMIN/3.4722E-3/ - - NREC=0 - REWIND IUNTRD - - 10 CONTINUE - - READ(IUNTRD,11,END=100) DUMREC - 11 FORMAT(A) - -C AT THIS POINT WE DO NOT KNOW IF A 2-DIGIT YEAR BEGINS IN COLUMN 20 -C OF THE RECORD (OLD NON-Y2K COMPLIANT FORM) OR IF A 4-DIGIT YEAR -C BEGINS IN COLUMN 20 (NEW Y2K COMPLIANT FORM) - TEST ON LOCATION OF -C LATITUDE N/S INDICATOR TO FIND OUT ... - - IF(DUMREC(35:35).EQ.'N' .OR. DUMREC(35:35).EQ.'S') THEN - -C ... THIS RECORD STILL CONTAINS THE OLD 2-DIGIT FORM OF THE YEAR - -C ... THIS PROGRAM WILL CONVERT THE RECORD TO A 4-DIGIT YEAR USING THE -C "WINDOWING" TECHNIQUE SINCE SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT *, '==> Read in RECORD from tcvitals file -- contains a', - $ ' 2-digit year "',DUMREC(20:21),'"' - PRINT *, ' ' - PRINT '(a,i0,a,a)', 'From unit ',iuntrd,'; DUMREC-8: ',dumrec - PRINT *, ' ' - DUMY2K(1:19) = DUMREC(1:19) - IF(DUMREC(20:21).GT.'20') THEN - DUMY2K(20:21) = '19' - ELSE - DUMY2K(20:21) = '20' - ENDIF - DUMY2K(22:100) = DUMREC(20:100) - DUMREC = DUMY2K - PRINT *, ' ' - PRINT *, '==> 2-digit year converted to 4-digit year "', - $ DUMREC(20:23),'" via windowing technique' - PRINT *, ' ' - PRINT '(a,i0,a,a)', 'From unit ',iuntrd,'; DUMREC-8: ',dumrec - PRINT *, ' ' - - ELSE IF(DUMREC(37:37).EQ.'N' .OR. DUMREC(37:37).EQ.'S') THEN - -C ... THIS RECORD CONTAINS THE NEW 4-DIGIT FORM OF THE YEAR -C ... NO CONVERSION NECESSARY SINCE THIS SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT *, '==> Read in RECORD from tcvitals file -- contains a', - $ ' 4-digit year "',DUMREC(20:23),'"' - PRINT *, ' ' - PRINT '(a,i0,a,a)', 'From unit ',iuntrd,'; DUMREC-8: ',dumrec - PRINT *, ' ' - PRINT *, '==> No conversion necessary' - PRINT *, ' ' - - ELSE - - PRINT *, ' ' - PRINT *, '***** Cannot determine if this record contains ', - $ 'a 2-digit year or a 4-digit year - skip it and try reading ', - $ 'the next record' - PRINT *, ' ' - GO TO 10 - - END IF - - IF(ICALL .GT. 1) THEN - DO IV=1,2 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 DUMREC) - ENDDO - CALL ZTIME(IDATEZ,IUTCZ,IYR,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,DAYZ) -C WRITE(6,21) IDATEZ,IUTCZ,DAYZ,DAYMN -C 21 FORMAT(/'...CHECKING DATE,TIME FOR COPYING HISTORICAL RECORDS',I9, -C I5,2F10.2) - - IF(DAYZ .GE. DAYMN-FIVMIN) THEN - - DO NOK=1,NOKAY - IF(DUMREC .EQ. OKAREC(NOK)) THEN - WRITE(6,27) DUMREC - 27 FORMAT(/'...EXACT DUPLICATE FOUND IN THE NEW AND HISTORICAL ', - 1 'FILES. THE HISTORICAL RECORD WILL NOT BE COPIED.'/8X, - 2 '...',A/) - GO TO 10 - ENDIF - -C CHECK FOR VARIOUS PARTIAL DUPLICATES: -C ICALL = 2: DATE/TIME, STORM ID, STORM NAME FILTER -C ICALL = 3: #2 ABOVE PLUS RSMC, I.E. A PARTIAL DUPLICATE - - IF(ICALL .EQ. 2 .AND. DUMREC(6:ISTVAR(3)-1) .EQ. - 1 OKAREC(NOK)(6:ISTVAR(3)-1)) THEN - WRITE(6,59) DUMREC,OKAREC(NOK) - 59 FORMAT(/'...PARTIAL DUPLICATE IN STORM ID & NAME, DATE AND TIME ', - 1 'FOUND IN THE NEW AND HISTORICAL FILES.'/4X,'THE ', - 2 'HISTORICAL RECORD WILL NOT BE COPIED.'/5X,'HIS...',A/5X, - 3 'NEW...',A/) - GO TO 10 - ENDIF - - IF(ICALL .GE. 3 .AND. DUMREC(1:ISTVAR(3)-1) .EQ. - 1 OKAREC(NOK)(1:ISTVAR(3)-1)) THEN - WRITE(6,69) DUMREC,OKAREC(NOK) - 69 FORMAT(/'...PARTIAL DUPLICATE IN RSMC, STORM ID & NAME, DATE AND', - 1 ' TIME FOUND IN THE NEW AND HISTORICAL FILES.'/4X,'THE ', - 2 'HISTORICAL RECORD WILL NOT BE COPIED.'/5X,'HIS...',A/5X, - 3 'NEW...',A/) - GO TO 10 - ENDIF - - ENDDO - - NREC=NREC+1 - WRITE(6,83) NREC,DUMREC - 83 FORMAT(3X,I4,'...',A,'...') - - WRITE(IUNTWT,11) DUMREC - ENDIF - - ELSE - NREC=NREC+1 - WRITE(6,83) NREC,DUMREC - WRITE(IUNTWT,11) DUMREC - ENDIF - - GO TO 10 - - 100 WRITE(6,101) NREC,IUNTRD,IUNTWT - 101 FORMAT(/'...',I4,' RECORDS HAVE BEEN COPIED FROM UNIT',I3,' TO ', - 1 'UNIT',I3,'.') - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: DUPCHK READS INPUT RECORDS, DUPLICATE CHECKS -C PRGMMR: S. LORD ORG: NP22 DATE: 1990-11-01 -C -C ABSTRACT: READS INPUT RECORDS FROM ALL SPECIFIED FILES. CHECKS FOR -C EXACT DUPLICATES. RETURNS ALL RECORDS TO BE QUALITY CONTROLLED. -C -C PROGRAM HISTORY LOG: -C 1990-11-01 S. LORD -C 1992-08-20 S. LORD ADDED NEW UNIT FOR GTS BUFR MESSAGES -C 1997-06-24 S. LORD ADDED NEW UNIT FOR MANUALLY ENTERED MESSAGES -C -C USAGE: CALL DUPCHK(IUNTIN,MAXUNT,MAXREC,IERCHK,NUNI,IFILE, -C NUMOKA,DUMREC,UNIREC,DUPREC,*) -C INPUT ARGUMENT LIST: -C IUNTIN - THE INPUT UNIT NUMBER FOR THE FIRST FILE TO BE READ. -C MAXUNT - NUMBER OF INPUT FILES. -C MAXREC - MAXIMUM NUMBER OF INPUT RECORDS. SUBROUTINE -C - RETURNS WITH CONDITION CODE=51 OR 53 WHEN NUMBER OF -C - UNIQUE OR DUPLICATE RECORDS EXCEEDS MAXREC. -C -C OUTPUT ARGUMENT LIST: -C IERCHK - ERROR INDICATOR. -C NUNI - NUMBER OF UNIQUE RECORDS TO BE QUALITY CONTROLLED -C IFILE - INTEGER ARRAY CONTAINING THE UNIT NUMBER FROM WHICH -C - EACH INPUT RECORD WAS READ. -C NUMOKA - INDEX NUMBER FOR EACH UNIQUE RECORD. INDEX NUMBER -C - IS SIMPLY THE ORDINAL NUMBER OF EACH RECORD READ -C - THAT IS UNIQUE, I.E. NOT A DUPLICATE. -C DUMREC - DUMMY CHARACTER VARIABLE LARGE ENOUGH TO READ A RECORD. -C UNIREC - CHARACTER ARRAY HOLDING ALL INPUT RECORDS. -C DUPREC - CHARACTER ARRAY HOLDING ALL DUPLICATE RECORDS. -C * - ALTERNATE RETURN IF NO INPUT RECORDS ARE FOUND. -C - SUBROUTINE RETURNS WITH IERCHK=161. -C -C INPUT FILES: -C UNIT 30 - FILES CONTAINING NEW RECORDS TO BE QUALITY CONTROLLED. -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE DUPCHK(IUNTIN,MAXUNT,MAXREC,IERCHK,NUNI,IFILE,NUMOKA, - 1 DUMREC,UNIREC,DUPREC,*) - - PARAMETER (MAXFIL=5) - - SAVE - - LOGICAL UNIQUE - CHARACTER*(*) DUMREC,UNIREC(0:MAXREC),DUPREC(MAXREC) - CHARACTER INPFIL(MAXFIL)*4 - CHARACTER*100 DUMY2K - - DIMENSION NUMOKA(MAXREC),IFILE(MAXREC) - - DATA INPFIL/'NHC ','FNOC','GBTB','GBFR','HBTB'/ - - IF(MAXUNT .GT. MAXFIL) THEN - WRITE(6,1) MAXUNT,MAXFIL - 1 FORMAT(/'******MAXIMUM NUMBER OF UNITS TO BE READ=',I3,' EXCEEDS', - 1 ' EXPECTATIONS. NUMBER WILL BE REDUCED TO',I3) - MAXUNT=MAXFIL - ENDIF - - IUNTVI=IUNTIN - IERCHK=0 - NUNI=0 - NDUP=0 - NSTART=0 - NALREC=0 - NRFILE=0 - UNIREC(0)='ZZZZZZZ' - - WRITE(6,3) MAXREC,IUNTVI,MAXUNT,(INPFIL(IFFF), - 1 IUNTIN+IFFF-1,IFFF=1,MAXUNT) - 3 FORMAT(//'...ENTERING DUPCHK: READING FILE AND LOOKING FOR EXACT', - 1 ' DUPLICATES. MAXREC=',I4,'.'/4X,'INITIAL UNIT NUMBER=', - 2 I4,' AND',I3,' UNITS WILL BE READ'/4X,'FILES AND UNIT ', - 3 'NUMBERS ARE:'/(6X,A,':',I3)) - - 10 CONTINUE - - DO NREC=1,MAXREC - READ(IUNTVI,11,END=130) DUMREC - 11 FORMAT(A) - -C AT THIS POINT WE DO NOT KNOW IF A 2-DIGIT YEAR BEGINS IN COLUMN 20 -C OF THE RECORD (OLD NON-Y2K COMPLIANT FORM) OR IF A 4-DIGIT YEAR -C BEGINS IN COLUMN 20 (NEW Y2K COMPLIANT FORM) - TEST ON LOCATION OF -C LATITUDE N/S INDICATOR TO FIND OUT ... - - IF(DUMREC(35:35).EQ.'N' .OR. DUMREC(35:35).EQ.'S') THEN - -C ... THIS RECORD STILL CONTAINS THE OLD 2-DIGIT FORM OF THE YEAR - -C FOR EXAMPLE: - -C NHC 13L MITCH 981028 1800 164N 0858W 270 010 0957 1008 0371 51 019 0278 0278 0185 0185 D -C 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123 -C 1 2 3 4 5 6 7 8 9 - -C ... THIS PROGRAM WILL CONVERT THE RECORD TO A 4-DIGIT YEAR USING THE -C "WINDOWING" TECHNIQUE SINCE SUBSEQUENT LOGIC EXPECTS THIS - FOR -C EXAMPLE, THE ABOVE RECORD IS CONVERTED TO: - -C NHC 13L MITCH 19981028 1800 164N 0858W 270 010 0957 1008 0371 51 019 0278 0278 0185 0185 D -C 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345 -C 1 2 3 4 5 6 7 8 9 - - PRINT *, ' ' - PRINT *, '==> Read in RECORD from tcvitals file -- contains a', - $ ' 2-digit year "',DUMREC(20:21),'"' - PRINT *, ' ' - PRINT '(a,i0,a,a)', 'From unit ',iuntvi,'; DUMREC-1: ',dumrec - PRINT *, ' ' - DUMY2K(1:19) = DUMREC(1:19) - IF(DUMREC(20:21).GT.'20') THEN - DUMY2K(20:21) = '19' - ELSE - DUMY2K(20:21) = '20' - ENDIF - DUMY2K(22:100) = DUMREC(20:100) - DUMREC = DUMY2K - PRINT *, ' ' - PRINT *, '==> 2-digit year converted to 4-digit year "', - $ DUMREC(20:23),'" via windowing technique' - PRINT *, ' ' - PRINT '(a,i0,a,a)', 'From unit ',iuntvi,'; DUMREC-1: ',dumrec - PRINT *, ' ' - - ELSE IF(DUMREC(37:37).EQ.'N' .OR. DUMREC(37:37).EQ.'S') THEN - -C ... THIS RECORD CONTAINS THE NEW 4-DIGIT FORM OF THE YEAR - -C FOR EXAMPLE: - -C NHC 13L MITCH 19981028 1800 164N 0858W 270 010 0957 1008 0371 51 019 0278 0278 0185 0185 D -C 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345 -C 1 2 3 4 5 6 7 8 9 - -C ... NO CONVERSION NECESSARY SINCE THIS SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT *, '==> Read in RECORD from tcvitals file -- contains a', - $ ' 4-digit year "',DUMREC(20:23),'"' - PRINT *, ' ' - PRINT '(a,i0,a,a)', 'From unit ',iuntvi,'; DUMREC-1: ',dumrec - PRINT *, ' ' - PRINT *, '==> No conversion necessary' - PRINT *, ' ' - - ELSE - - PRINT *, ' ' - PRINT '(a,a,a)', '***** Cannot determine if this record ', - $ 'contains a 2-digit year or a 4-digit year - skip it and ', - $ 'try reading the next record' - PRINT *, ' ' - GO TO 100 - - END IF - - NALREC=NALREC+1 - NRFILE=NRFILE+1 - - UNIQUE=.TRUE. - DO NR=NSTART,NUNI - IF(DUMREC .EQ. UNIREC(NR)) UNIQUE=.FALSE. - ENDDO - - IF(UNIQUE) THEN - - IF(NUNI .EQ. MAXREC) THEN - WRITE(6,51) MAXREC - 51 FORMAT('******INSUFFICIENT STORAGE FOR ALL VITAL ', - 1 'STATISTICS RECORDS, MAXREC=',I5) - IERCHK=51 - RETURN - ELSE - NUNI=NUNI+1 - NUMOKA(NUNI)=NUNI - UNIREC(NUNI)=DUMREC - IFILE(NUNI)=IUNTVI - ENDIF - - ELSE - - IF(NDUP .EQ. MAXREC) THEN - WRITE(6,51) MAXREC - IERCHK=53 - RETURN - ELSE - NDUP=NDUP+1 - DUPREC(NDUP)=DUMREC - ENDIF - ENDIF - NSTART=1 - - 100 continue - - ENDDO - - 130 CONTINUE - -C LOOP FOR MORE FILES IF REQUESTED - - IF(NRFILE .EQ. 0) WRITE(6,133) INPFIL(IUNTVI-29) - 133 FORMAT(/'###',A,' FILE IS EMPTY.') - - IUNTVI=IUNTVI+1 - IF(IUNTVI-IUNTIN .LT. MAXUNT) THEN - NRFILE=0 - WRITE(6,141) IUNTVI,MAXUNT - 141 FORMAT(/'...LOOPING TO READ UNIT NUMBER',I3,'. MAXUNT=',I3) - GO TO 10 - ENDIF - - WRITE(6,151) NALREC - 151 FORMAT(//'...TOTAL NUMBER OF RECORDS=',I4) - WRITE(6,153) NUNI,(NUMOKA(NR),UNIREC(NR),NR=1,NUNI) - 153 FORMAT(/'...',I4,' RECORDS ARE UNIQUE, BUT NOT ERROR CHECKED.'// - 1 (' ...',I4,'...',A)) - WRITE(6,157) NDUP,(NR,DUPREC(NR),NR=1,NDUP) - 157 FORMAT(/'...',I4,' RECORDS ARE EXACT DUPLICATES:'//(' ...',I4, - 1 '...',A)) - - IF(NUNI .EQ. 0) THEN - WRITE(6,161) - 161 FORMAT(/'###THERE ARE NO RECORDS TO BE READ. THIS PROGRAM ', - 1 'WILL COMPLETE FILE PROCESSING AND LEAVE AN EMPTY ', - 2 ' "CURRENT" FILE!!') - IERCHK=161 - RETURN 1 - ENDIF - - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: BLNKCK CHECKS FOR PROPER COLUMNAR FORMAT -C PRGMMR: S. LORD ORG: NP22 DATE: 1990-11-01 -C -C ABSTRACT: CHECKS ALL INPUT RECORDS FOR PROPER COLUMNAR FORMAT. -C THE TABULAR INPUT RECORD HAS SPECIFIED BLANK COLUMNS. IF -C NONBLANK CHARACTERS ARE FOUND IN SPECIFIED BLANK COLUMNS, -C AN OBVIOUS ERROR HAS OCCURRED. THE RECORD IS REJECTED IN THIS -C CASE. -C -C PROGRAM HISTORY LOG: -C 1990-11-01 S. LORD -C 1994-06-20 S. LORD MODIFIED MAXCHK FOR THE GFDL FORMAT -C -C USAGE: CALL BLNKCK(NTEST,NOKAY,NBAD,IFBLNK,NUMTST,NUMOKA,NUMBAD, -C ZZZREC,NNNREC,TSTREC,BADREC,OKAREC) -C INPUT ARGUMENT LIST: -C NTEST - NUMBER OF RECORDS TO BE TESTED. -C NUMTST - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH RECORD -C - TO BE TESTED. -C ZZZREC - CHARACTER VARIABLE CONTAINING VARIABLE NAMES. -C NNNREC - CHARACTER VARIABLE CONTAINING COLUMN NUMBERS. -C TSTREC - CHARACTER ARRAY CONTAINING RECORDS TO BE TESTED. -C -C OUTPUT ARGUMENT LIST: -C NOKAY - NUMBER OF RECORDS THAT PASSED THE BLANK CHECK. -C NBAD - NUMBER OF RECORDS THAT FAILED THE BLANK CHECK. -C IFBLNK - INTEGER ARRAY CONTAINING ERROR CODE FOR EACH INPUT -C - RECORD. SEE COMMENTS IN PGM FOR KEY TO ERROR CODES. -C NUMOKA - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH GOOD -C - RECORD. -C NUMBAD - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH BAD -C - RECORD. -C BADREC - CHARACTER ARRAY CONTAINING BAD RECORDS THAT FAILED -C - THE BLANK CHECK. -C OKAREC - CHARACTER ARRAY CONTAINING ALL RECORDS THAT PASSED -C - THE BLANK CHECK. -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE BLNKCK(NTEST,NOKAY,NBAD,IFBLNK,NUMTST,NUMOKA,NUMBAD, - 1 ZZZREC,NNNREC,TSTREC,BADREC,OKAREC) - - PARAMETER (MAXCHK=95) - PARAMETER (NERCBL=3) - PARAMETER (MAXREC=1000) - - SAVE - - CHARACTER*(*) ZZZREC,NNNREC,TSTREC(0:NTEST),BADREC(MAXREC), - 1 OKAREC(NTEST) - CHARACTER ERCBL(NERCBL)*60 - - PARAMETER (MAXCHR=95) - PARAMETER (MAXVIT=15) - - CHARACTER NAMVAR*5 - - DIMENSION ISTVAR(MAXVIT) - - DIMENSION NAMVAR(MAXVIT+1) - - DIMENSION IFBLNK(MAXREC),NUMOKA(NTEST),NUMBAD(MAXREC), - 1 NUMTST(NTEST) - - DATA ISTVAR/20,29,34,39,45,49,53,58,63,68,71,75,80,85,90/, - 1 LENHED/18/ - - DATA NAMVAR/'DATE ','TIME ','LAT. ','LONG.','DIR ','SPEED', - 1 'PCEN ','PENV ','RMAX ','VMAX ','RMW ','R15NE', - 2 'R15SE','R15SW','R15NW','DEPTH'/ - - DATA ERCBL - 1 /'1 : LAST NON-BLANK CHARACTER IS IN THE WRONG COLUMN ', - 2 '18 : FIRST 18 COLUMNS ARE BLANK ', - 3 '19-87: FIRST NON-BLANK CHARACTER FOUND IN THIS COLUMN '/ - -C ERROR CODES FOR BAD RECORDS RETURNED IN IFBLNK ARE AS FOLLOWS: -C 1: LAST NON-BLANK CHARACTER IS IN THE WRONG COLUMN -C 18 : FIRST 18 COLUMNS ARE BLANK -C 19-87: NON-BLANK CHARACTER FOUND IN A BLANK COLUMN. ERROR -C CODE GIVES COLUMN OF LEFT-MOST OCCURRENCE - -C SET COUNTERS FOR INITIAL SORTING OF ALL RECORDS. ALL SUBSEQUENT -C CALLS TO THIS ROUTINE SHOULD BE FOR SINGLE RECORDS - - WRITE(6,1) NTEST - 1 FORMAT(//'...ENTERING BLNKCK, LOOKING FOR WRONGLY POSITIONED ', - 1 ' BLANKS. NTEST=',I4//) - - NADD=0 - IF(NREC .GT. 0) THEN - NOKAY=0 - NBAD =0 - ENDIF - -C DO ALL RECORDS - - DO NREC=1,NTEST - IETYP=0 - -C FIND THE RIGHT-MOST NON-BLANK CHARACTER: IT SHOULD CORRESPOND -C TO THE MAXIMUM NUMBER OF CHARACTERS IN THE MESSAGE (MAXCHR) - - DO ICH=MAXCHK,1,-1 - IF(TSTREC(NREC)(ICH:ICH) .NE. ' ') THEN - IBLANK=ICH - GO TO 31 - ENDIF - ENDDO - 31 CONTINUE -C WRITE(6,3311) IBLANK,TSTREC(NREC)(1:IBLANK) -C3311 FORMAT(/'...TESTING LENGTH OF RECORD, IBLANK,TSTREC=',I4/4X,'...', -C 1 A,'...') -C - IF(IBLANK .NE. MAXCHR) THEN - IETYP=1 - WRITE(6,33) NREC,IBLANK,NNNREC,ZZZREC,TSTREC(NREC) - 33 FORMAT(/'...RECORD #',I3,' HAS RIGHT-MOST NON-BLANK CHARACTER ', - 1 'AT POSITION',I4/2(1X,'@@@',A,'@@@'/),4X,A) - GO TO 41 - ENDIF - -C CHECK FOR BLANKS IN THE HEADER SECTION (THE FIRST 18 COLUMNS) - - IF(TSTREC(NREC)(1:LENHED) .EQ. ' ') THEN - IETYP=LENHED - WRITE(6,35) NREC,NNNREC,ZZZREC,TSTREC(NREC) - 35 FORMAT(/'...RECORD #',I3,' HAS BLANK HEADER SECTION.'/2(1X,'@@@', - 1 A,'@@@'/),4X,A) - ENDIF - -C CHECK COLUMN BLANKS STARTING TO THE LEFT OF THE YYMMDD GROUP - - DO IBL=1,MAXVIT - IF(TSTREC(NREC)(ISTVAR(IBL)-1:ISTVAR(IBL)-1) .NE. ' ') THEN - IETYP=ISTVAR(IBL)-1 - WRITE(6,39) TSTREC(NREC)(ISTVAR(IBL)-1:ISTVAR(IBL)-1), - 1 ISTVAR(IBL)-1,NAMVAR(IBL),NNNREC,ZZZREC,TSTREC(NREC) - 39 FORMAT(/'...NONBLANK CHARACTER ',A1,' AT POSITION ',I3, - 1 ' PRECEEDING VARIABLE',1X,A/2(1X,'@@@',A,'@@@'/),4X,A) - GO TO 41 - ENDIF - ENDDO - - 41 IFBLNK(NUMTST(NREC))=IETYP - IF(IETYP .GT. 0) THEN - NADD=NADD+1 - NUMBAD(NADD+NBAD)=NUMTST(NREC) - BADREC(NADD+NBAD)=TSTREC(NREC) - ELSE - NOKAY=NOKAY+1 - NUMOKA(NOKAY)=NUMTST(NREC) - OKAREC(NOKAY)=TSTREC(NREC) - ENDIF - - ENDDO - - print *, ' ' - IF(NTEST .GT. 1) THEN - WRITE(6,101) NOKAY,NADD,NTEST,(ERCBL(NER),NER=1,NERCBL) - 101 FORMAT(/'...RESULTS OF THE GLOBAL BLANK CHECK ARE: NOKAY=',I4, - 1 ' AND NADD=',I4,' FOR A TOTAL OF ',I4,' RECORDS.'//4X, - 2 'ERROR CODES ARE:'/(6X,A)) - WRITE(6,103) - 103 FORMAT(/'...OKAY RECORDS ARE:',100X,'ERC'/) - DO NOK=1,NOKAY - WRITE(6,109) NOK,NUMOKA(NOK),OKAREC(NOK),IFBLNK(NUMOKA(NOK)) - 109 FORMAT(3X,I4,'...',I4,'...',A,'...',I3) - ENDDO - IF(NADD .GT. 0) WRITE(6,111) (NBAD+NBA,NUMBAD(NBAD+NBA), - 1 BADREC(NBAD+NBA), - 2 IFBLNK(NUMBAD(NBAD+NBA)), - 3 NBA=1,NADD) - 111 FORMAT(/' ADDED BAD RECORDS ARE:',95X,'ERC'/(3X,I4,'...',I4, - 1 '...',A,'...',I3)) - NBAD=NBAD+NADD - ELSE - WRITE(6,113) IETYP,TSTREC(NTEST),NOKAY - 113 FORMAT(/'...BLANK TEST FOR SINGLE RECORD, BLANK ERROR CODE=',I2, - 1 ' RECORD IS:'/4X,'...',A/4X,'NOKAY=',I2) - ENDIF - - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: READCK CHECKS READABILITY OF EACH RECORD -C PRGMMR: S. LORD ORG: NP22 DATE: 1990-11-01 -C -C ABSTRACT: CHECKS READABILITY OF EACH RECORD. SINCE THE INPUT -C RECORD FORMAT CONTAINS ONLY NUMBERS AND LETTERS, -C -C PROGRAM HISTORY LOG: -C 1990-11-01 S. LORD -C 1992-09-18 S. J. LORD ADDED CHECK FOR CORRECT MISSING DATA IN READCK -C -C USAGE: CALL READCK(NTEST,NOKAY,NBAD,IFREAD,NUMTST,NUMOKA,NUMBAD, -C ZZZREC,NNNREC,TSTREC,BADREC,OKAREC) -C INPUT ARGUMENT LIST: -C NTEST - NUMBER OF RECORDS TO BE TESTED. -C NUMTST - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH RECORD -C - TO BE TESTED. -C ZZZREC - CHARACTER VARIABLE CONTAINING VARIABLE NAMES. -C NNNREC - CHARACTER VARIABLE CONTAINING COLUMN NUMBERS. -C TSTREC - CHARACTER ARRAY CONTAINING RECORDS TO BE TESTED. -C -C OUTPUT ARGUMENT LIST: -C NOKAY - NUMBER OF RECORDS THAT PASSED THE BLANK CHECK. -C NBAD - NUMBER OF RECORDS THAT FAILED THE BLANK CHECK. -C IFREAD - INTEGER ARRAY CONTAINING ERROR CODE FOR EACH INPUT -C - RECORD. SEE COMMENTS IN PGM FOR KEY TO ERROR CODES. -C NUMOKA - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH GOOD -C - RECORD. -C NUMBAD - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH BAD -C - RECORD. -C BADREC - CHARACTER ARRAY CONTAINING BAD RECORDS THAT FAILED -C - THE BLANK CHECK. -C OKAREC - CHARACTER ARRAY CONTAINING ALL RECORDS THAT PASSED -C - THE BLANK CHECK. -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE READCK(NTEST,NOKAY,NBAD,IFREAD,NUMTST,NUMOKA,NUMBAD, - 1 ZZZREC,NNNREC,TSTREC,BADREC,OKAREC) - - PARAMETER (NERCRD=2) - PARAMETER (MAXREC=1000) - - SAVE - - CHARACTER*(*) ZZZREC,NNNREC,TSTREC(0:NTEST),BADREC(MAXREC), - 1 OKAREC(NTEST),ERCRD(NERCRD)*60 - - PARAMETER (MAXVIT=15) - PARAMETER (ITERVR=10) - - CHARACTER FMTVIT*6,NAMVAR*5 - - DIMENSION IVTVAR(MAXVIT),ISTVAR(MAXVIT),IENVAR(MAXVIT) - - DIMENSION NAMVAR(MAXVIT+1),FMTVIT(MAXVIT),MISSNG(MAXVIT) - - DIMENSION IFREAD(MAXREC),NUMOKA(NTEST),NUMBAD(MAXREC), - 1 NUMTST(NTEST) - - DATA FMTVIT/'(I8.8)','(I4.4)','(I3.3)','(I4.4)',2*'(I3.3)', - 1 3*'(I4.4)','(I2.2)','(I3.3)',4*'(I4.4)'/, - 2 MISSNG/-9999999,-999,-99,-999,2*-99,3*-999,-9,-99,4*-999/, - 3 ISTVAR/20,29,34,39,45,49,53,58,63,68,71,75,80,85,90/, - 4 IENVAR/27,32,36,42,47,51,56,61,66,69,73,78,83,88,93/ - - DATA NAMVAR/'DATE ','TIME ','LAT. ','LONG.','DIR ','SPEED', - 1 'PCEN ','PENV ','RMAX ','VMAX ','RMW ','R15NE', - 2 'R15SE','R15SW','R15NW','DEPTH'/ - - DATA NUM/1/ - - DATA ERCRD - 1 /'N: INDEX OF THE FIRST UNREADABLE RECORD ', - 2 '20-N: WRONG MISSING CODE '/ - -C ERROR CODE FOR UNREADABLE RECORD IS THE INDEX OF THE FIRST -C UNREADABLE RECORD. -C ***NOTE: THERE MAY BE ADDITIONAL UNREADABLE RECORDS TO THE -C RIGHT. - - WRITE(6,1) NTEST - 1 FORMAT(//'...ENTERING READCK, LOOKING FOR UNREADABLE (NOT ', - 1 ' CONTAINING INTEGERS) PRIMARY AND SECONDARY VARIABLES,', - 2 ' NTEST=',I4//) - - NADD=0 - -C DO ALL RECORDS - - DO NREC=1,NTEST - IETYP=0 - - DO IV=1,ITERVR - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 TSTREC(NREC)) - IF(IERDEC .NE. 0) THEN - IETYP=IV - WRITE(6,7) NREC,ISTVAR(IV),NAMVAR(IV),NNNREC,ZZZREC,TSTREC(NREC) - 7 FORMAT(/'...RECORD #',I3,' IS UNREADABLE AT POSITION',I3, - 1 ' FOR VARIABLE ',A,'.'/2(1X,'@@@',A,'@@@'/),4X,A) - GO TO 11 - ENDIF - ENDDO - 11 CONTINUE - - DO IV=1,ITERVR - IF(IVTVAR(IV) .LT. 0 .AND. IVTVAR(IV) .NE. MISSNG(IV)) THEN - IETYP=20-IV - WRITE(TSTREC(NREC) (ISTVAR(IV):IENVAR(IV)),FMTVIT(IV))MISSNG(IV) - ENDIF - ENDDO - - IFREAD(NUMTST(NREC))=IETYP - IF(IETYP .GT. 0) THEN - NADD=NADD+1 - NUMBAD(NADD+NBAD)=NUMTST(NREC) - BADREC(NADD+NBAD)=TSTREC(NREC) - ELSE - NOKAY=NOKAY+1 - NUMOKA(NOKAY)=NUMTST(NREC) - OKAREC(NOKAY)=TSTREC(NREC) - ENDIF - - ENDDO - - WRITE(6,101) NOKAY,NADD,NTEST,(ERCRD(NER),NER=1,NERCRD) - 101 FORMAT(//'...RESULTS OF THE READABILITY CHECK ARE: NOKAY=',I4, - 1 ' AND NADD=',I4,' FOR A TOTAL OF ',I4,' RECORDS.'//4X, - 2 'ERROR CODES ARE:'/(6X,A)) - WRITE(6,103) - 103 FORMAT(/'...OKAY RECORDS ARE:',100X,'ERC'/) - DO NOK=1,NOKAY - WRITE(6,109) NOK,NUMOKA(NOK),OKAREC(NOK),IFREAD(NUMOKA(NOK)) - 109 FORMAT(3X,I4,'...',I4,'...',A,'...',I3) - ENDDO - IF(NADD .GT. 0) WRITE(6,111) (NBAD+NBA,NUMBAD(NBAD+NBA), - 1 BADREC(NBAD+NBA), - 2 IFREAD(NUMBAD(NBAD+NBA)), - 3 NBA=1,NADD) - 111 FORMAT(/' ADDED BAD RECORDS ARE:',95X,'ERC'/(3X,I4,'...',I4, - 1 '...',A,'...',I3)) - NBAD=NBAD+NADD - - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: DTCHK CHECK FOR VALID DATE FOR ALL RECORDS -C PRGMMR: S. LORD ORG: NP22 DATE: 1990-11-01 -C -C ABSTRACT: CHECKS FOR VALID DATE IN ALL RECORDS. -C -C PROGRAM HISTORY LOG: -C 1990-11-01 S. LORD -C -C USAGE: CALL DTCHK(NTEST,NOKAY,NBAD,NTBP,IFDTCK,NUMTST,NUMOKA, -C NUMBAD,NUMTBP,DAYMN,DAYMX1,DAYMX2,DAYOFF,TSTREC, -C BADREC,OKAREC,TBPREC) -C INPUT ARGUMENT LIST: -C NTEST - NUMBER OF RECORDS TO BE TESTED. -C NUMTST - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH RECORD -C - TO BE TESTED. -C DAYMN - EARLIEST (MINIMUM) DATE FOR ACCEPTANCE OF A RECORD. -C - UNITS ARE DDD.FFF, WHERE DDD=JULIAN DAY, FFF=FRAC- -C - TIONAL DAY (E.G. .5=1200 UTC). -C DAYMX1 - LATEST (MAXIMUM) DATE FOR ACCEPTANCE OF A RECORD. -C - UNITS ARE FRACTIONAL JULIAN DAYS AS IN DAYMN ABOVE. -C DAYMX2 - EARLIEST (MINIMUM) DATE FOR REJECTION OF A RECORD. -C - RECORDS WITH DATES BETWEEN DAYMX1 AND DAYMX2 ARE -C - ASSUMED TO BELONG TO A FUTURE CYCLE AND ARE THROWN -C - BACK INTO THE POND, I.E. NEITHER REJECTED OR ACCEPTED. -C - UNITS ARE FRACTIONAL JULIAN DAYS AS IN DAYMN ABOVE. -C DAYOFF - OFFSET DAYS WHEN ACCEPTANCE WINDOW CROSSES YEAR -C BOUNDARY -C TSTREC - CHARACTER ARRAY CONTAINING RECORDS TO BE TESTED. -C -C OUTPUT ARGUMENT LIST: -C NOKAY - NUMBER OF RECORDS THAT PASSED THE BLANK CHECK. -C NBAD - NUMBER OF RECORDS THAT FAILED THE BLANK CHECK. -C NTBP - NUMBER OF RECORDS THAT ARE TO BE RESTORED TO THE -C - INPUT FILES (THROWN BACK INTO THE POND). -C IFDTCK - INTEGER ARRAY CONTAINING ERROR CODE FOR EACH INPUT -C - RECORD. SEE COMMENTS IN PGM FOR KEY TO ERROR CODES. -C NUMOKA - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH GOOD -C - RECORD. -C NUMBAD - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH BAD -C - RECORD. -C NUMTBP - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH RECORD -C - TO BE THROWN BACK INTO THE POND. -C BADREC - CHARACTER ARRAY CONTAINING BAD RECORDS THAT FAILED -C - THE BLANK CHECK. -C OKAREC - CHARACTER ARRAY CONTAINING ALL RECORDS THAT PASSED -C - THE BLANK CHECK. -C TBPREC - CHARACTER ARRAY CONTAINING ALL RECORDS THAT ARE TO -C - BE THROWN BACK INTO THE POND. -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE DTCHK(NTEST,NOKAY,NBAD,NTBP,IFDTCK,NUMTST,NUMOKA, - 1 NUMBAD,NUMTBP,DAYMN,DAYMX1,DAYMX2,DAYOFF,TSTREC, - 2 BADREC,OKAREC,TBPREC) - - PARAMETER (NERCDT=8) - PARAMETER (MAXREC=1000) - PARAMETER (MAXTBP=20) - - SAVE - - CHARACTER*(*) TSTREC(0:NTEST),BADREC(MAXREC),OKAREC(NTEST), - 1 TBPREC(MAXTBP),ERCDT(NERCDT)*60 - - PARAMETER (MAXVIT=15) - - CHARACTER FMTVIT*6 - - DIMENSION IVTVAR(MAXVIT),ISTVAR(MAXVIT),IENVAR(MAXVIT) - - DIMENSION FMTVIT(MAXVIT) - - EQUIVALENCE (IVTVAR(1),IDATEZ),(IVTVAR(2),IUTCZ) - - DIMENSION RINC(5) - - DIMENSION IFDTCK(MAXREC),NUMOKA(NTEST),NUMBAD(MAXREC), - 1 NUMTST(NTEST),NUMTBP(MAXTBP),IDAMX(12) - - DATA FMTVIT/'(I8.8)','(I4.4)','(I3.3)','(I4.4)',2*'(I3.3)', - 1 3*'(I4.4)','(I2.2)','(I3.3)',4*'(I4.4)'/, - 2 ISTVAR/20,29,34,39,45,49,53,58,63,68,71,75,80,85,90/, - 3 IENVAR/27,32,36,42,47,51,56,61,66,69,73,78,83,88,93/ - - DATA NUM/1/,IYRMN/0/,IYRMX/9999/,IMOMN/1/,IMOMX/12/,IDAMN/1/, - 1 IDAMX/31,29,31,30,31,30,31,31,30,31,30,31/,IHRMN/0/, - 2 IHRMX/23/,IMINMN/0/,IMINMX/59/ - - DATA ERCDT - 1 /' 1: YEAR OUT OF RANGE ', - 2 ' 2: MONTH OUT OF RANGE ', - 3 ' 3: DAY OUT OF RANGE ', - 4 ' 4: HOUR OUT OF RANGE ', - 5 ' 5: MINUTE OUT OF RANGE ', - 6 ' 6: DATE/TIME LESS THAN ALLOWED WINDOW ', - 7 ' 7: DATE/TIME GREATER THAN ALLOWED MAXIMUM WINDOW ', - 8 '-8: DATE/TIME PROBABLY VALID AT LATER CYCLE TIME (TBIP) '/ - -C ERROR CODES FOR BAD RECORDS RETURNED IN IFDTCK ARE AS FOLLOWS: -C 1: YEAR OUT OF RANGE -C 2: MONTH OUT OF RANGE -C 3: DAY OUT OF RANGE -C 4: HOUR OUT OF RANGE -C 5: MINUTE OUT OF RANGE -C 6: DATE/TIME LESS THAN ALLOWED WINDOW -C 7: DATE/TIME GREATER THAN ALLOWED WINDOW -C -8: DATE/TIME PROBABLY VALID AT LATER CYCLE TIME (THROWN BACK -C INTO THE POND) - - WRITE(6,1) NTEST,NOKAY,NBAD,DAYMN,DAYMX1,DAYMX2 - 1 FORMAT(//'...ENTERING DTCHK, LOOKING FOR BAD DATE/TIME GROUPS. ', - 1 'NTEST,NOKAY,NBAD=',3I4,'.'/4X,'DAYMN,DAYMX1,DAYMX2=', - 2 3F12.4//) - - NADD=0 - NTBPZ=0 - DO NREC=1,NTEST - - IETYP=0 - DO IV=1,2 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 TSTREC(NREC)) - ENDDO - -C CONVERT DATE/TIME TO FLOATING POINT DATE - - CALL ZTIME(IDATEZ,IUTCZ,IYR,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,DAYZ) - - IF(IYR .LT. IYRMN .OR. IYR .GT. IYRMX) THEN - IETYP=1 - WRITE(6,21) IYR,IYRMN,IYRMX,TSTREC(NREC) - 21 FORMAT(/'******DECODED YEAR OUT OF ALLOWED BOUNDS, IYR,IYRMN,', - 1 'IYRMX,RECORD=',3I9/8X,A) - ENDIF - - IF(IMO .LT. IMOMN .OR. IMO .GT. IMOMX) THEN - IETYP=2 - WRITE(6,31) IMO,IMOMN,IMOMX,TSTREC(NREC) - 31 FORMAT(/'******DECODED MONTH OUT OF ALLOWED BOUNDS, IMO,IMOMN,', - 1 'IMOMX,RECORD=',3I9/8X,A/5X,'...(DAY WILL NOT BE CHECKED)') - - ELSE - IF(IDA .LT. IDAMN .OR. IDA .GT. IDAMX(IMO)) THEN - IETYP=3 - WRITE(6,41) IDA,IDAMN,IDAMX,TSTREC(NREC) - 41 FORMAT(/'******DECODED DAY OUT OF ALLOWED BOUNDS, IDA,IDAMN,', - 1 'IDAMX,RECORD=',3I9/8X,A) - ENDIF - ENDIF - - IF(IHR .LT. IHRMN .OR. IHR .GT. IHRMX) THEN - IETYP=4 - WRITE(6,51) IHR,IHRMN,IHRMX,TSTREC(NREC) - 51 FORMAT(/'******DECODED HOUR OUT OF ALLOWED BOUNDS, IHR,IHRMN,', - 1 'IHRMX,RECORD=',3I9/8X,A) - ENDIF - - IF(IMIN .LT. IMINMN .OR. IMIN .GT. IMINMX) THEN - IETYP=5 - WRITE(6,61) IMIN,IMINMN,IMINMX,TSTREC(NREC) - 61 FORMAT(/'******DECODED MINUTE OUT OF ALLOWED BOUNDS, IMIN,', - 1 'IMINMN,IMINMX,RECORD=',3I9/8X,A) - ENDIF - - IF(IETYP .EQ. 0 .AND. DAYZ+DAYOFF .LT. DAYMN) THEN - IETYP=6 - WRITE(6,71) DAYZ,DAYMN,TSTREC(NREC) - 71 FORMAT(/'******DECODED DAY LESS THAN MINIMUM WINDOW, DAYZ,DAYMN,', - 1 'RECORD=',2F12.4/8X,A) - ENDIF - - IF(IETYP .EQ. 0 .AND. DAYZ+DAYOFF .GT. DAYMX2) THEN - IETYP=7 - WRITE(6,73) DAYZ,DAYMX2,TSTREC(NREC) - 73 FORMAT(/'******DECODED DAY EXCEEDS MAXIMUM WINDOW, DAYZ,DAYMX2,', - 1 'RECORD=',2F12.4/8X,A) - ENDIF - - IF(IETYP .EQ. 0 .AND. DAYZ .GT. DAYMX1) THEN - IETYP=-8 - WRITE(6,77) DAYZ,DAYMX1,TSTREC(NREC) - 77 FORMAT(/'###DECODED DAY PROBABLY VALID AT FUTURE CYCLE TIME. ', - 1 'DAYZ,DAYMX1,RECORD=',2F12.4/8X,A/4X, 'THIS RECORD WILL ', - 2 'BE THROWN BACK IN THE POND.') - ENDIF - - IFDTCK(NUMTST(NREC))=IETYP - IF(IETYP .GT. 0) THEN - NADD=NADD+1 - NUMBAD(NADD+NBAD)=NUMTST(NREC) - BADREC(NADD+NBAD)=TSTREC(NREC) - ELSE IF(IETYP .EQ. 0) THEN - NOKAY=NOKAY+1 - NUMOKA(NOKAY)=NUMTST(NREC) - OKAREC(NOKAY)=TSTREC(NREC) - ELSE - NTBPZ=NTBPZ+1 - NUMTBP(NTBPZ)=NUMTST(NREC) - TBPREC(NTBPZ)=TSTREC(NREC) - ENDIF - - ENDDO - - NTBP=NTBPZ - WRITE(6,101) NOKAY,NADD,NTBP,NTEST,(ERCDT(NER),NER=1,NERCDT) - 101 FORMAT(//'...RESULTS OF THE DATE/TIME CHECK ARE: NOKAY=',I4, - 1 ' ,NADD=',I4,' AND NTBP=',I4,' FOR A TOTAL OF',I4, - 2 ' RECORDS.'//4X,'ERROR CODES ARE:'/(6X,A)) - - WRITE(6,103) - 103 FORMAT(/'...OKAY RECORDS ARE:',100X,'ERC'/) - DO NOK=1,NOKAY - WRITE(6,109) NOK,NUMOKA(NOK),OKAREC(NOK),IFDTCK(NUMOKA(NOK)) - 109 FORMAT(3X,I4,'...',I4,'...',A,'...',I3) - ENDDO - - WRITE(6,113) - 113 FORMAT(/'...RECORDS THAT WILL BE RETURNED TO THE INPUT FILES ', - 1 '(THROWN BACK INTO THE POND) ARE:',36X,'ERC'/) - DO NTB=1,NTBP - WRITE(6,119) NTB,NUMTBP(NTB),TBPREC(NTB), - 1 IFDTCK(NUMTBP(NTB)) - 119 FORMAT(3X,I4,'...',I4,'...',A,'...',I3) - ENDDO - - IF(NADD .GT. 0) WRITE(6,131) (NBAD+NBA,NUMBAD(NBAD+NBA), - 1 BADREC(NBAD+NBA), - 2 IFDTCK(NUMBAD(NBAD+NBA)), - 3 NBA=1,NADD) - 131 FORMAT(/' ADDED BAD RECORDS ARE:',95X,'ERC'/(3X,I4,'...',I4, - 1 '...',A,'...',I3)) - NBAD=NBAD+NADD - - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: SETMSK CHECKS ALL RECORDS FOR CORRECT LAT/LON -C PRGMMR: S. LORD ORG: NP22 DATE: 1990-11-01 -C -C ABSTRACT: INPUT RECORDS ARE CHECKED FOR PHYSICALLY REALISTIC -C LATITUDE AND LONGITUDE (-70 Read in RECORD from tcvitals file -- contains a', - $ ' 2-digit year "',SCRATC(NCHECK)(20:21),'"' - PRINT *, ' ' - PRINT *, 'From unit ',iuntho,'; SCRATC(NCHECK)-9: ', - $ scratc(ncheck) - PRINT *, ' ' - DUMY2K(1:19) = SCRATC(NCHECK)(1:19) - IF(SCRATC(NCHECK)(20:21).GT.'20') THEN - DUMY2K(20:21) = '19' - ELSE - DUMY2K(20:21) = '20' - ENDIF - DUMY2K(22:100) = SCRATC(NCHECK)(20:100) - SCRATC(NCHECK) = DUMY2K - PRINT *, ' ' - PRINT *, '==> 2-digit year converted to 4-digit year "', - $ SCRATC(NCHECK)(20:23),'" via windowing technique' - PRINT *, ' ' - PRINT *, 'From unit ',IUNTHo,'; SCRATC(NCHECK)-9: ', - $ scratc(ncheck) - PRINT *, ' ' - - ELSE IF(SCRATC(NCHECK)(37:37).EQ.'N' .OR. - 1 SCRATC(NCHECK)(37:37).EQ.'S') THEN - -C ... THIS RECORD CONTAINS THE NEW 4-DIGIT FORM OF THE YEAR -C ... NO CONVERSION NECESSARY SINCE THIS SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT *, '==> Read in RECORD from tcvitals file -- contains a', - $ ' 4-digit year "',SCRATC(NCHECK)(20:23),'"' - PRINT *, ' ' - PRINT *, 'From unit ',iuntho,'; SCRATC(NCHECK)-9: ', - $ SCRATC(NCHECK) - PRINT *, ' ' - PRINT *, '==> No conversion necessary' - PRINT *, ' ' - - ELSE - - PRINT *, ' ' - PRINT *, '***** Cannot determine if this record contains ', - $ 'a 2-digit year or a 4-digit year - skip it and try reading ', - $ 'the next record' - PRINT *, ' ' - GO TO 30 - - END IF - - WRITE(6,19) NCHECK,SCRATC(NCHECK) - NCPY=NCPY+1 - NCHECK=NCHECK+1 - GO TO 30 - - 40 CONTINUE - NCHECK=NCHECK-1 - WRITE(6,41) NCPY,NCHECK - 41 FORMAT('...',I3,' RECORDS COPIED FOR A TOTAL OF ',I4,' TO BE ', - 1 'CHECKED.') - - NADD=0 - DO NREC=1,NTEST - -C INITIALIZE THE CHARACTER STRING AND ERROR CODE - - BUFINZ=TSTREC(NREC) - IETYP=0 - NDUP =0 - -C SET THE FLAG FOR ERROR TYPE=4 (PREVIOUS RECORD WITH DUPLICATE -C RSMC, DATE/TIME AND STORM ID APPEARS TO BE VALID) - -C RECORDS THAT WERE MARKED ERRONEOUS EARLIER DO NOT RECEIVE -C FURTHER PROCESSING WITH THIS VERSION OF THE CODE. - - IF(IDUPID(NREC) .GT. 0) THEN - IETYP=IDUPID(NREC) - GO TO 190 - ENDIF - -C BASIN CHECK - - NIDBSN=999 - DO NBA=1,NBASIN - IF(STMIDZ(3:3) .EQ. IDBASN(NBA)) THEN - NIDBSN=NBA - ENDIF - ENDDO - - IF(NIDBSN .GT. 130) THEN - IETYP=1 - WRITE(6,51) NREC,STMIDZ(3:3),(IDBASN(NBA),NBA=1,NBASIN),NNNREC, - 1 ZZZREC,TSTREC(NREC) - 51 FORMAT(/'******RECORD #',I3,' HAS BAD BASIN CODE=',A1,'. ALLOWED', - 2 ' CODES ARE:',1X,11(A1,1X)/2(1X,'@@@',A,'@@@'/),4X,A) - -C CHECK THAT THE LAT/LON CORRESPONDS TO A VALID BASIN - - ELSE - DO IV=3,4 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 TSTREC(NREC)) - VITVAR(IV)=REAL(IVTVAR(IV))*VITFAC(IV) - ENDDO - IF(LATNS .EQ. 'S') STMLTZ=-STMLTZ - IF(LONEW .EQ. 'W') STMLNZ=360.-STMLNZ - CALL BASNCK(STMIDZ,STMLTZ,STMLNZ,NBAZ,IPRT,IER) - IF(IER .EQ. 3) THEN - IETYP=6 - WRITE(6,61) NREC,STMIDZ,STMLTZ,STMLNZ,IETYP,NNNREC,ZZZREC, - 1 TSTREC(NREC) - 61 FORMAT(/'******RECORD #',I3,' WITH STMID=',A,' HAS LAT/LON ', - 1 'OUTSIDE BASIN LIMITS. LAT/LON=',2F9.1,' IETYP=',I3/ - 2 2(1X,'@@@',A,'@@@'/),4X,A) - ENDIF - ENDIF - - IF(IETYP .EQ. 0) THEN - -C CHECK CODED STORM ID NUMBER: ID NUMBERS GREATER >= 80 ARE -C CONSIDERED ERRONEOUS. ! CHG. TESTID - - CALL DECVAR(ISTIDC,ISTIDC+ITWO-1,KSTORM,IERDEC,'(I2.2)', - 1 STMIDZ) - IF(KSTORM .LT. 1 .OR. KSTORM .GE. ISTMAX .OR. IERDEC .NE. 0) THEN - IETYP=2 - IF(KSTORM .GE. ISTMAX .AND. KSTORM .LT. 100) THEN - WRITE(6,94) NREC,STMIDZ(ISTIDC:ISTIDC+ITWO-1),NNNREC,ZZZREC, - 1 TSTREC(NREC) - 94 FORMAT(/'******RECORD #',I3,' HAS TEST STORM NUMBER=',A2, - 1 ' -- CONSIDER IT BAD'/2(1X,'@@@',A,'@@@'/),4X,A) - ELSE - WRITE(6,63) NREC,STMIDZ(ISTIDC:ISTIDC+ITWO-1),NNNREC,ZZZREC, - 1 TSTREC(NREC) - 63 FORMAT(/'******RECORD #',I3,' HAS BAD STORM NUMBER=',A2/ - 1 2(1X,'@@@',A,'@@@'/),4X,A) - END IF - ENDIF - -C CHECK CONSISTENCY BETWEEN STORM NAME AND STORM ID, PRESENT AND -C PAST. FIRST, CHECK FOR EXACT DUPLICATES IN THE INPUT AND -C SHORT-TERM HISTORY FILES. - - IF(IETYP .EQ. 0) THEN - DO NCK=NCHECK,NREC+1,-1 - BUFINX=SCRATC(NCK) - - IF(NCK .GT. NTEST .AND. BUFINZ(1:IFSTFL-1) .EQ. - 1 BUFINX(1:IFSTFL-1) .AND. - 2 BUFINZ(IFSTFL+1:MAXCHR) .EQ. - 3 BUFINX(IFSTFL+1:MAXCHR)) THEN - IETYP=9 - WRITE(6,64) NREC,NCK,NNNREC,ZZZREC,TSTREC(NREC),SCRATC(NCK) - 64 FORMAT(/'******RECORD #',I3,' IS IDENTICAL TO RECORD #',I3, - 1 ' WHICH IS FROM THE ORIGINAL SHORT-TERM HISTORY FILE.'/4X, - 2 'RECORDS ARE:'/2(1X,'@@@',A,'@@@'/),2(4X,A/)) - GO TO 71 - ENDIF - - IF(RSMCX .EQ. RSMCZ) THEN - -C DISABLE THE FOLLOWING TWO CHECKS IN THE CASE OF A CARDINAL -C TROPICAL STORM IDENTIFIER - - DO NCARD=1,NCRDMX - IF(STMNMZ(1:ICRDCH(NCARD)) .EQ. CARDNM(NCARD)(1:ICRDCH(NCARD)) - 1 .OR. - 2 STMNMX(1:ICRDCH(NCARD)) .EQ. CARDNM(NCARD)(1:ICRDCH(NCARD))) - 3 THEN - WRITE(6,1147) STMNMZ(1:ICRDCH(NCARD)), - 1 STMNMX(1:ICRDCH(NCARD)),NCARD,ICRDCH(NCARD) - 1147 FORMAT(/'...WE HAVE FOUND A MATCHING NAME FOR "',A,'" OR "',A, - 1 '" AT CARDINAL INDEX',I3,', FOR CHARACTERS 1-',I2,'.'/4X, - 2 'NAME CHECKING IS HEREBY DISABLED.') - GO TO 71 - ENDIF - ENDDO - -C SAME NAME BUT DIFFERENT ID - - IF(STMNMZ .NE. 'NAMELESS' .AND. - 1 STMNMZ .EQ. STMNMX .AND. STMIDZ .NE. STMIDX) THEN - IETYP=7 - IF(NCK .GT. NTEST) WRITE(6,65) NREC,STMNMZ,STMIDZ,NCK,STMIDX, - 1 NNNREC,ZZZREC,TSTREC(NREC),SCRATC(NCK) - 65 FORMAT(/'******RECORD #',I3,' HAS NAME=',A,' AND ID=',A,', BUT ', - 1 'ID IS DIFFERENT FROM VALIDATED ORIGINAL SHORT-TERM ', - 2 'HISTORY RECORD',I3/4X,' WHICH IS ',A,'. RECORDS ARE:'/ - 3 2(1X,'@@@',A,'@@@'/),2(4X,A/)) - IF(NCK .LE. NTEST) WRITE(6,66) NREC,STMNMZ,STMIDZ,NCK,STMIDX, - 1 NNNREC,ZZZREC,TSTREC(NREC),SCRATC(NCK) - 66 FORMAT(/'******RECORD #',I3,' HAS NAME=',A,' AND ID=',A,', BUT ', - 1 'ID IS DIFFERENT FROM TEST RECORD WITH LARGER INDEX',I3, - 2 ' WHICH IS ',A,'.'/4X,'RECORDS ARE:'/2(1X,'@@@',A,'@@@'/), - 3 2(4X,A/)) - IF(RSMCZ .EQ. 'JTWC' .AND. STMIDZ(1:2) .EQ. STMIDX(1:2)) THEN - IETYP=-7 - WRITE(6,165) - 165 FORMAT('###OBSERVER IS JTWC. BASIN NOT GUARANTEED TO BE ', - 1 'CONSISTENT. IETYP=-7.') - ENDIF - IF(IETYP .GT. 0) GO TO 71 - ENDIF - -C SAME ID BUT DIFFERENT NAME: NEITHER IS NAMELESS - - IF(STMNMZ .NE. 'NAMELESS' .AND. STMNMX .NE. 'NAMELESS') THEN - IF(STMIDZ .EQ. STMIDX .AND. STMNMZ .NE. STMNMX .AND. - 1 RELOCZ .EQ. ' ' .AND. RELOCX .EQ. ' ') THEN - IETYP=8 - IF(NCK .GT. NTEST) WRITE(6,67) NREC,STMIDZ,STMNMZ,NCK,STMIDX, - 1 NNNREC,ZZZREC,TSTREC(NREC),SCRATC(NCK) - 67 FORMAT(/'******RECORD #',I3,' HAS ID=',A,' AND NAME=',A,', BUT ', - 1 'NAME IS DIFFERENT FROM VALIDATED ORIGINAL'/7X,'SHORT-', - 2 'TERM HISTORY RECORD',I3,' WHICH IS ',A,'.'/7X,'RECORDS ', - 3 'ARE:'/2(1X,'@@@',A,'@@@'/),2(4X,A/)) - IF(NCK .LE. NTEST) WRITE(6,68) NREC,STMIDZ,STMNMZ,NCK,STMIDX, - 1 NNNREC,ZZZREC,TSTREC(NREC),SCRATC(NCK) - 68 FORMAT(/'******RECORD #',I3,' HAS ID=',A,' AND NAME=',A,', BUT ', - 1 'NAME IS DIFFERENT FROM TEST RECORD WITH LARGER INDEX',I3, - 2 ' WHICH IS ',A,'.'/4X,'RECORDS ARE:'/2(1X,'@@@',A,'@@@'/), - 3 2(4X,A/)) - GO TO 71 - ENDIF - ENDIF - - ENDIF - ENDDO - 71 CONTINUE - ENDIF - -C CHECK FOR RECORDS WITH IDENTICAL RSMC, DATE/TIME GROUP AND -C STORM ID. SINCE THE CURRENT RECORD IS FIRST, WE WILL SUPERCEDE -C IT WITH THE LATER RECORD - - IF(IETYP .EQ. 0) THEN - DO NCK=NREC+1,NTEST - BUFINX=TSTREC(NCK) - CALL DECVAR(ISTIDC,ISTIDC+ITWO-1,KSTMX,IERDEC,'(I2.2)', - 1 STMIDX) - DO IV=1,2 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 TSTREC(NREC)) - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVRX(IV),IERDEC,FMTVIT(IV), - 1 TSTREC(NCK )) - ENDDO - - DO NBA=1,NBASIN - IF(STMIDX(3:3) .EQ. IDBASN(NBA)) THEN - NIDBSX=NBA - GO TO 91 - ENDIF - ENDDO - - 91 IF(RSMCX .EQ. RSMCZ .AND. - 1 IDATEX .EQ. IDATEZ .AND. - 2 IUTCX .EQ. IUTCZ .AND. - 3 NIDBSX .EQ. NIDBSN .AND. - 4 KSTMX .EQ. KSTORM) THEN - -C ACCUMULATE ALL RECORDS THAT HAVE THE SAME RSMC, DATE/TIME AND -C STORM ID FOR PROCESSING - - IF(NDUP .LT. NDUPMX) THEN - NDUP=NDUP+1 - INDXDP(NDUP)=NCK - - ELSE - WRITE(6,93) RSMCZ,IDATEZ,IUTCZ,STMIDZ,NDUPMX - 93 FORMAT(/'******NUMBER OF RECORDS WITH SAME RSMC=',A,', DATE=',I9, - 1 ', TIME=',I5,' AND STORM ID=',A/7X,'EXCEEDS THE MAXIMUM=', - 2 I3,'. THE PROGRAM WILL TERMINATE!!') - CALL ABORT1('STIDCK ',53) - ENDIF - - ENDIF - ENDDO - - IF(NDUP .GT. 0) THEN - CALL FIXDUP(IUNTHO,NTEST,NREC,NDUP,INDXDP,TSTREC,ZZZREC,NNNREC, - 1 IETYP) - IF(IETYP .EQ. 4) THEN - DO NDU=1,NDUP - WRITE(6,109) NDU,IABS(INDXDP(NDU)),IETYP - 109 FORMAT(/'...DUPLICATE RECORD',I3,' WITH INDEX=',I3,' HAS ', - 1 'PROBABLE DATE/TIME ERROR=',I3) - IF(INDXDP(NDU) .LT. 0) IDUPID(IABS(INDXDP(NDU)))=IETYP - ENDDO - -C CLEAR THE ERROR FLAG FOR THE CURRENT RECORD!!! - - IETYP=0 - ENDIF - ENDIF - - ENDIF - - IF(IETYP .EQ. 0) THEN - -C SKIP STORM NAME CHECK IF STORM NAME='NAMELESS' OR BASIN IS -C NEITHER ATLANTIC OR EAST PACIFIC - - IF(STMNMZ .EQ. 'NAMELESS') THEN - WRITE(6,113) STMNMZ - 113 FORMAT(/'...STORM NAME IS ',A9,' SO NO NAME CHECKING WILL BE ', - 1 'DONE') - GO TO 190 - ENDIF - - IF(NIDBSN .LE. 4) THEN - IF(NIDBSN .LE. 2) THEN - NSTBSN=-1 - DO NST=1,NSTMAX - IF(STMNMZ .EQ. STBASN(NST,NIDBSN,IYRNAM)) THEN -C WRITE(6,117) STMNMZ,NST,NIDBSN,IYRNAM -C 117 FORMAT(/'...WE HAVE FOUND MATCHING NAME FOR ',A,' AT INDEX=',I4, -C 1 ', FOR NIDBSN,IYRNAM=',2I4) - NSTBSN=NST - GO TO 171 - ENDIF - ENDDO - -C FOR EAST PACIFIC STORM IDS, CHECK THAT THEY MAY HAVE BEEN NAMED -C IN THE CENTRAL PACIFIC - - IF(NIDBSN .EQ. 2) THEN - NSTBSN=-1 - DO NST=1,NSMXCP - IF(STMNMZ .EQ. STBACP(NST)) THEN - NSTBSN=NST - GO TO 171 - ENDIF - ENDDO - ENDIF - - ELSE IF(NIDBSN .EQ. 3) THEN - NSTBSN=-1 - DO NST=1,NSMXCP - IF(STMNMZ .EQ. STBACP(NST)) THEN - NSTBSN=NST - GO TO 171 - ENDIF - ENDDO - - ELSE IF(NIDBSN .EQ. 4) THEN - NSTBSN=-1 - DO NST=1,NSMXWP - IF(STMNMZ .EQ. STBAWP(NST)) THEN - NSTBSN=NST - GO TO 171 - ENDIF - ENDDO - ENDIF - -C CHECK FOR CARDINAL NUMBER IDENTIFIER FOR AS YET UNNAMED STORMS - - DO NCARD=1,NCRDMX - IF(STMNMZ(1:ICRDCH(NCARD)) .EQ. CARDNM(NCARD)(1:ICRDCH(NCARD))) - 1 THEN - WRITE(6,147) STMNMZ(1:ICRDCH(NCARD)),NCARD,ICRDCH(NCARD) - 147 FORMAT(/'...WE HAVE FOUND MATCHING NAME FOR "',A,'" AT CARDINAL ', - 1 'INDEX',I3,', FOR CHARACTERS 1-',I2,'.') - NSTBSN=NCARD - GO TO 171 - ENDIF - ENDDO - -C CHECK FOR GREEK NAMES - - DO NGRK=1,NGRKMX - IF(STMNMZ(1:IGRKCH(NGRK)) .EQ. GREKNM(NGRK)(1:IGRKCH(NGRK))) - 1 THEN - WRITE(6,157) STMNMZ(1:IGRKCH(NGRK)),NGRK,IGRKCH(NGRK) - 157 FORMAT(/'...WE HAVE FOUND MATCHING GREEK NAME FOR "',A,'" AT ', - 1 'GREEK INDEX',I3,', FOR CHARACTERS 1-',I2,'.') - NSTBSN=NGRK - GO TO 171 - ENDIF - ENDDO - - 171 IF(NSTBSN .LT. 0) THEN - IETYP=5 - WRITE(6,173) NREC,STMNMZ,NIDBSN,IYRNAM,NNNREC,ZZZREC,TSTREC(NREC) - 173 FORMAT(/'+++RECORD #',I3,' HAS BAD STORM NAME=',A9,'. NIDBSN,', - 1 'IYRNAM=',2I4/4X,'ERROR RECOVERY WILL BE CALLED FOR THIS', - 2 ' RECORD:'/2(1X,'@@@',A,'@@@'/),4X,A) - - CALL FIXNAM(IUNTCA,NIDBSN,IYR,IETYP,STMNMZ,TSTREC(NREC)) - - ENDIF - - ELSE - WRITE(6,181) IDBASN(NIDBSN),STMNMZ - 181 FORMAT('...VALID BASIN ID=',A1,' DOES NOT ALLOW STORM NAME CHECK', - 1 ' AT THIS TIME. NAME=',A9) - ENDIF - - ENDIF - - ENDIF - - 190 IFSTCK(NUMTST(NREC))=IETYP - IF(IETYP .GT. 0) THEN - NADD=NADD+1 - NUMBAD(NADD+NBAD)=NUMTST(NREC) - BADREC(NADD+NBAD)=TSTREC(NREC) - ELSE - NOKAY=NOKAY+1 - NUMOKA(NOKAY)=NUMTST(NREC) - OKAREC(NOKAY)=TSTREC(NREC) - ENDIF - - ENDDO - - WRITE(6,201) NOKAY,NADD,NTEST,(ERCID(NER),NER=1,NERCID) - 201 FORMAT(//'...RESULTS OF THE STORM ID CHECK ARE: NOKAY=',I4,' AND', - 1 ' NADD=',I4,' FOR A TOTAL OF ',I4,' RECORDS.'//4X, - 2 'ERROR CODES ARE:'/(6X,A)) - WRITE(6,203) - 203 FORMAT(/'...OKAY RECORDS ARE:',100X,'ERC'/) - DO NOK=1,NOKAY - WRITE(6,209) NOK,NUMOKA(NOK),OKAREC(NOK),IFSTCK(NUMOKA(NOK)) - 209 FORMAT(3X,I4,'...',I4,'...',A,'...',I3) - ENDDO - IF(NADD .GT. 0) WRITE(6,211) (NBAD+NBA,NUMBAD(NBAD+NBA), - 1 BADREC(NBAD+NBA), - 2 IFSTCK(NUMBAD(NBAD+NBA)), - 3 NBA=1,NADD) - 211 FORMAT(/' ADDED BAD RECORDS ARE:',95X,'ERC'/(3X,I4,'...',I4, - 1 '...',A,'...',I3)) - NBAD=NBAD+NADD - - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: FIXDUP ERROR RECOVERY FOR PARTIAL DUPLICATE RECS -C PRGMMR: S. LORD ORG: NP22 DATE: 1990-11-01 -C -C ABSTRACT: ERROR RECOVERY FOR PARTIAL DUPLICATE RECORDS. PARTIAL -C DUPLICATE RECORDS ARE DEFINED AS THOSE WITH IDENTICAL RSMC, STORM -C ID & NAME, AND DATE/TIME. THE ERROR RECOVERY PROCEDURE BEGINS BY -C TRYING TO FIND A PREVIOUS RECORD FOR THE TARGET RECORD, WHICH IS -C DEFINED AS THE FIRST OF THE DUPLICATE RECORDS (ALL SUBSEQUENT -C RECORDS ARE DEFINED AS "DUPLICATES"). THE CURRENT RECORDS ARE -C SEARCHED FIRST, THEN THE SHORT-TERM HISTORY FILE IS SEARCHED. -C IF NO PREVIOUS RECORDS ARE FOUND ANYWHERE, THE DEFAULT DECISION IS -C TO KEEP THE LAST OF THE DUPLICATES, UNDER THE ASSSUMPTION THAT -C THE DUPLICATE RECORDS ARE UPDATE RECORDS FOR THE SAME STORM. -C IF A PREVIOUS RECORD IS FOUND, ITS EXTRAPOLATED POSITION IS COMPARED -C WITH THE TARGET RECORD AND THE DUPLICATE RECORDS. IF THE TARGET -C POSITION ERROR IS GREATER THAN THE DUPLICATE POSITION, THE -C TARGET RECORD IS CONSIDERED ERROREOUS. IF THE TARGET POSITION ERROR -C IS LESS THAN THE DUPLICATE POSITION ERROR, THE DUPLICATE POSITION -C IS CHECKED AGAINST AN EXTRAPOLATED FUTURE POSITION. IF THAT ERROR -C IS LESS THAN FOR THE CURRENT POSITION, IT IS ASSUMED THAT THE -C DUPLICATE RECORD HAS A DATE/TIME ERROR. IF THE DUPLICATE POSITION -C ERROR IS LARGER FOR THE FUTURE TIME, IT IS ASSUMED THAT THE -C DUPLICATE RECORD IS AN UPDATE RECORD WHICH SUPERCEDES THE TARGET. -C -C PROGRAM HISTORY LOG: -C 1990-11-01 S. LORD -C -C USAGE: CALL FIXDUP(IUNTHO,NTEST,NREC,NDUP,INDXDP,TSTREC,ZZZREC, -C NNNREC,IETYP) -C INPUT ARGUMENT LIST: -C IUNTHO - UNIT NUMBER FOR SHORT-TERM HISTORY FILE. -C NTEST - TOTAL NUMBER OF RECORDS AVAILABLE (DIMENSION OF TSTREC) -C NREC - INDEX NUMBER OF TARGET RECORD -C NDUP - NUMBER OF DUPLICATE RECORDS -C INDXDP - INTEGER ARRAY CONTAINING INDEX NUMBERS OF -C - DUPLICATE RECORDS -C TSTREC - CHARACTER ARRAY OF INPUT RECORDS. -C ZZZREC - CHARACTER VARIABLE CONTAINING VARIABLE NAMES. -C NNNREC - CHARACTER VARIABLE CONTAINING COLUMN NUMBERS. -C -C OUTPUT ARGUMENT LIST: -C IETYP - ERROR CODE -C -C INPUT FILES: -C UNIT 21 - SHORT-TERM HISTORY FILE -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE FIXDUP(IUNTHO,NTEST,NREC,NDUP,INDXDP,TSTREC,ZZZREC, - 1 NNNREC,IETYP) - - PARAMETER (MAXSTM=70) - - SAVE - - CHARACTER*(*) TSTREC(0:NTEST),ZZZREC,NNNREC - - DIMENSION INDXDP(NDUP) - - DIMENSION RINC(5) - - CHARACTER STMNAM*9,STMID*3,RSMC*4 - - LOGICAL FSTFLG - - DIMENSION STMNAM(MAXSTM),STMLAT(MAXSTM),STMLON(MAXSTM), - 1 STMDIR(MAXSTM),STMSPD(MAXSTM),IDATE(MAXSTM), - 2 IUTC(MAXSTM),RMAX(MAXSTM),PENV(MAXSTM),PCEN(MAXSTM), - 3 PTOP(MAXSTM),RSMC(MAXSTM),RMW(MAXSTM),VMAX(MAXSTM), - 4 R15NW(MAXSTM),R15NE(MAXSTM),R15SE(MAXSTM),R15SW(MAXSTM), - 5 STMID(MAXSTM),FSTFLG(MAXSTM) - - PARAMETER (MAXCHR=95) - PARAMETER (MAXVIT=15) - PARAMETER (NBASIN=11) - - CHARACTER BUFIN*1,RSMCZ*4,STMIDZ*3,STMNMZ*9,FSTFLZ*1,STMDPZ*1, - 1 LATNS*1,LONEW*1,FMTVIT*6,BUFINZ*100,RELOCZ*1,IDBASN*1 - - DIMENSION IVTVAR(MAXVIT),VITVAR(MAXVIT),VITFAC(MAXVIT), - 1 ISTVAR(MAXVIT),IENVAR(MAXVIT) - - DIMENSION IDBASN(NBASIN),BUFIN(MAXCHR),FMTVIT(MAXVIT) - - EQUIVALENCE (BUFIN(1),RSMCZ),(BUFIN(5),RELOCZ),(BUFIN(6),STMIDZ), - 1 (BUFIN(10),STMNMZ),(BUFIN(19),FSTFLZ), - 2 (BUFIN(37),LATNS),(BUFIN(43),LONEW), - 3 (BUFIN(95),STMDPZ),(BUFIN(1),BUFINZ) - - EQUIVALENCE (IVTVAR(1),IDATEZ),(IVTVAR(2),IUTCZ) - - EQUIVALENCE (VITVAR( 3),STMLTZ),(VITVAR( 4),STMLNZ), - 1 (VITVAR( 5),STMDRZ),(VITVAR( 6),STMSPZ) - - DIMENSION IVTVRX(MAXVIT),VITVRX(MAXVIT) - - CHARACTER BUFCK(MAXCHR)*1,RSMCX*4,RELOCX*1,STMIDX*3,LATNSX*1, - 1 LONEWX*1,BUFINX*100 - - EQUIVALENCE (BUFCK(1),RSMCX),(BUFCK(5),RELOCX),(BUFCK(6),STMIDX), - 1 (BUFCK(35),LATNSX),(BUFCK(41),LONEWX), - 2 (BUFCK(1),BUFINX) - - EQUIVALENCE (IVTVRX(1),IDATEX),(IVTVRX(2),IUTCX), - 1 (VITVRX(3),STMLTX),(VITVRX(4),STMLNX), - 2 (VITVRX(5),STMDRX),(VITVRX(6),STMSPX) - - DATA VITFAC/2*1.0,2*0.1,1.0,0.1,9*1.0/, - 1 FMTVIT/'(I8.8)','(I4.4)','(I3.3)','(I4.4)',2*'(I3.3)', - 2 3*'(I4.4)','(I2.2)','(I3.3)',4*'(I4.4)'/, - 3 ISTVAR/20,29,34,39,45,49,53,58,63,68,71,75,80,85,90/, - 4 IENVAR/27,32,36,42,47,51,56,61,66,69,73,78,83,88,93/ - - DATA IDBASN/'L','E','C','W','O','T','U','P','S','B','A'/ - -C IPRNT : CONTROLS PRINTING IN SUBROUTINE NEWVIT -C FACSPD: CONVERSION FACTOR FOR R(DEG LAT)=V(M/S)*T(FRAC DAY)* -C FACSPD - - DATA NUM/1/,ITWO/2/,ISTIDC/1/,IPRNT/0/,FACSPD/0.77719/, - 1 IHRWIN/0/ - - WRITE(6,1) NDUP,NTEST,NREC - 1 FORMAT(/'...ENTERING FIXDUP WITH ',I3,' DUPLICATE RECORDS AND',I4, - 1 ' TOTAL RECORDS. TARGET RECORD TO BE CHECKED HAS INDEX=', - 2 I3) - -C RECOVER STORM ID, DATE,TIME ETC FROM THE TARGET RECORD - - BUFINZ=TSTREC(NREC) - CALL DECVAR(ISTIDC,ISTIDC+ITWO-1,KSTORM,IERDEC,'(I2.2)', - 1 STMIDZ) - DO IV=1,6 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 BUFINZ) - VITVAR(IV)=IVTVAR(IV)*VITFAC(IV) - ENDDO - IF(LATNS .EQ. 'S') STMLTZ=-STMLTZ - IF(LONEW .EQ. 'W') STMLNZ=360.-STMLNZ - CALL ZTIME(IDATEZ,IUTCZ,IYR,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,DAYZ) - - WRITE(6,7) BUFINZ,(INDXDP(ND),TSTREC(INDXDP(ND)),ND=1,NDUP) - 7 FORMAT('...TARGET RECORD FOR COMPARISON IS:'/10X,A/4X, - 1 'DUPLICATE RECORDS ARE:'/(4X,I4,2X,A)) -C WRITE(6,9) STMLTZ,STMLNZ,STMDRZ,STMSPZ -C 9 FORMAT('...LAT/LON, DIR/SPD OF TARGET RECORD ARE ',4F10.3) - -C CHECK IF THERE ARE ANY PREVIOUS RECORDS IN TSTREC - - INDCLO=-99 - DTCLO=1.E10 - DO NCK=1,NTEST - BUFINX=TSTREC(NCK) - CALL DECVAR(ISTIDC,ISTIDC+ITWO-1,KSTMX,IERDEC,'(I2.2)', - 1 STMIDX) - DO IV=1,2 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVRX(IV),IERDEC,FMTVIT(IV), - 1 TSTREC(NCK)) - ENDDO - - DO NBA=1,NBASIN - IF(STMIDX(3:3) .EQ. IDBASN(NBA)) NIDBSX=NBA - IF(STMIDZ(3:3) .EQ. IDBASN(NBA)) NIDBSN=NBA - ENDDO - - IF(RSMCX .EQ. RSMCZ .AND. - 1 NIDBSX .EQ. NIDBSN .AND. - 2 KSTMX .EQ. KSTORM .AND. - 3 NCK .NE. NREC ) THEN - CALL ZTIME(IDATEX,IUTCX,IYR,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,DAYX) -C WRITE(6,53) NCK,IDATEX,IUTCX,DAYX -C 53 FORMAT('...INDEX,DATE,TIME OF SAME STORM ARE:',I3,I9,I5,F10.3) - - IF(DAYX .LT. DAYZ .AND. DAYZ-DAYX .LT. DTCLO) THEN - INDCLO=NCK - DTCLO=DAYZ-DAYX - ENDIF - - ENDIF - - ENDDO - - IF(INDCLO .GT. 0) THEN - BUFINX=TSTREC(INDCLO) - DO IV=3,6 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVRX(IV),IERDEC,FMTVIT(IV), - 1 BUFINX) - VITVRX(IV)=IVTVRX(IV)*VITFAC(IV) - ENDDO - IF(LATNSX .EQ. 'S') STMLTX=-STMLTX - IF(LONEWX .EQ. 'W') STMLNX=360.-STMLNX - CALL DS2UV(USTM,VSTM,STMDRX,STMSPX) - - ELSE - WRITE(6,77) IUNTHO - 77 FORMAT(/'...PREVIOUS STORM RECORD COULD NOT BE FOUND IN CURRENT ', - 1 'RECORDS. WE WILL LOOK IN THE SHORT-TERM HISTORY FILE, ', - 2 'UNIT=',I3) - -C SCAN HISTORICAL FILE FOR ALL OCCURRENCES OF EACH STORM. -C SAVE THE LATEST TIME FOR USE LATER. - - IOPT=5 - IDTREQ=IDATEZ - STMID(1)=STMIDZ - CALL NEWVIT(IUNTHO,IPRNT,IOPT,IERVIT,MAXSTM,KSTORM,IDTREQ,IHRREQ, - 1 IHRWIN,IDATE,IUTC,STMLAT,STMLON,STMDIR,STMSPD, - 2 PCEN,PENV,RMAX,VMAX,RMW,R15NE,R15SE,R15SW,R15NW, - 3 PTOP,FSTFLG,STMNAM,STMID,RSMC) - - IF(KSTORM .GT. 0) THEN - DO KST=1,KSTORM - CALL ZTIME(IDATE(KST),IUTC(KST),IYR,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,DAYX) -C WRITE(6,79) KST,DAYX,DAYZ -C 79 FORMAT('...INDEX,DAYX, DAYZ FROM ST. TERM HIST. FILE=',I3,2F10.3) - IF(DAYZ-DAYX .LT. DTCLO) THEN - INDCLO=KST - DTCLO=DAYZ-DAYX - ENDIF - ENDDO - - CALL DS2UV(USTM,VSTM,STMDIR(INDCLO),STMSPD(INDCLO)) - STMLTX=STMLAT(INDCLO) - STMLNX=STMLON(INDCLO) - - ELSE - WRITE(6,97) - 97 FORMAT('###PREVIOUS RECORD COULD NOT BE FOUND ANYWHERE. ', - 1 'THEREFORE, WE MAKE THE ARBITRARY, BUT NECESSARY DECISION'/ - 2 4X,'TO RETAIN THE LAST DUPLICATE RECORD.') - - IETYP=3 - WRITE(6,99) NREC,INDXDP(NDUP),NNNREC,ZZZREC,TSTREC(NREC), - 1 TSTREC(INDXDP(NDUP)) - 99 FORMAT(/'******RECORD #',I3,' WILL BE SUPERCEDED BY RECORD #',I3, - 1 ', WHICH ARRIVED LATER AND HAS IDENTICAL RSMC, DATE/TIME', - 2 ' AND STORM ID'/2(1X,'@@@',A,'@@@'/),2(4X,A/)) - RETURN - ENDIF - - ENDIF - -C SAVE THE PREVIOUS FIX POSITION AND EXTRAPOLATE IT -C TO THE CURRENT TIME - - PRVLAT=STMLTX - PRVLON=STMLNX - EXTLAT=PRVLAT+VSTM*DTCLO*FACSPD - EXTLON=PRVLON+USTM*DTCLO*FACSPD - - EXTERZ=DISTSP(STMLTZ,STMLNZ,EXTLAT,EXTLON)*1.E-3 - WRITE(6,95) STMLTZ,STMLNZ,EXTERZ - 95 FORMAT(/'...LAT/LON,EXTRAPOLATION ERROR FOR RECORDS ARE:'/4X, - 1 'TARGET:',9X,3F10.3) - - DO NDU=1,NDUP - BUFINX=TSTREC(INDXDP(NDU)) - DO IV=3,4 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVRX(IV),IERDEC,FMTVIT(IV), - 1 BUFINX) - VITVRX(IV)=IVTVRX(IV)*VITFAC(IV) - ENDDO - IF(LATNSX .EQ. 'S') STMLTX=-STMLTX - IF(LONEWX .EQ. 'W') STMLNX=360.-STMLNX - EXTERD=DISTSP(STMLTX,STMLNX,EXTLAT,EXTLON)*1.E-3 - WRITE(6,111) NDU,STMLTX,STMLNX,EXTERD - 111 FORMAT('...DUP. RECORD:',I4,3F10.3) - - IF(EXTERD .GT. EXTERZ) THEN - EXTLT2=PRVLAT+VSTM*DTCLO*FACSPD*2.0 - EXTLN2=PRVLON+USTM*DTCLO*FACSPD*2.0 - EXTER2=DISTSP(STMLTX,STMLNX,EXTLT2,EXTLN2)*1.E-3 - WRITE(6,113) NDU,EXTLT2,EXTLN2,EXTER2 - 113 FORMAT('...2XDT EXTRAP:',I4,3F10.3) - -C IF THE DIFFERENCE BETWEEN THE DUPLICATE POSITION AND -C AN EXTRAPOLATED POSITION TO A FUTURE CYCLE IS LESS -C THAN THE DIFFERENCE AT THE CURRENT TIME, WE ASSUME -C THAT THE DUPLICATE HAS A BAD DATE/TIME, I.E. THAT IT -C IS VALID A A LATER TIME. CURRENTLY THERE IS NO ERROR -C RETRIEVAL FOR THE DATE/TIME GROUP SO THAT THIS RECORD -C IS MARKED TO BE IN ERROR BY MAKING THE INDEX NEGATIVE. - - IF(EXTER2 .LT. EXTERD) THEN - IETYP=4 - INDXDP(NDU)=-INDXDP(NDU) - WRITE(6,117) IETYP,INDXDP(NDU) - 117 FORMAT(/'...DUPLICATE HAS DIFFERENCE WITH EXTRAPOLATED POSITION ', - 1 'TO FUTURE TIME THAT IS LESS THAN FOR CURRENT TIME.'/4X, - 2 'THEREFORE, WE CONCLUDE THAT THERE IS A DATE/TIME ERROR ', - 3 'IN THE DUPLICATE RECORD (IETYP=',I3,').'/4X,'THE INDEX=', - 4 I3,' IS MARKED NEGATIVE TO INDICATE AN ERROR.') - - ELSE - IETYP=3 - WRITE(6,119) NREC,INDXDP(NDUP),NNNREC,ZZZREC,TSTREC(NREC), - 1 TSTREC(INDXDP(NDUP)) - 119 FORMAT(/'...DUPLICATE HAS DIFFERENCE WITH EXTRAPOLATED FUTURE ', - 1 'POSITION GREATER THAN THAT FOR CURRENT POSITION.'/ - 2 ' ******RECORD #',I3,' WILL BE SUPERCEDED BY RECORD #',I3, - 3 ', WHICH ARRIVED LATER AND HAS IDENTICAL RSMC, DATE/TIME', - 4 ' AND STORM ID'/2(1X,'@@@',A,'@@@'/),2(4X,A/)) - ENDIF - - ELSE - IETYP=3 - WRITE(6,121) NREC,INDXDP(NDUP),NNNREC,ZZZREC,TSTREC(NREC), - 1 TSTREC(INDXDP(NDUP)) - 121 FORMAT(/'...DUPLICATE HAS DIFFERENCE WITH EXTRAPOLATED PAST ', - 1 'POSITION LESS THAN OR EQUAL TO THAT FOR TARGET.'/ - 2 ' ******RECORD #',I3,' WILL BE SUPERCEDED BY RECORD #',I3, - 3 ', WHICH ARRIVED LATER AND HAS IDENTICAL RSMC, DATE/TIME', - 4 ' AND STORM ID'/2(1X,'@@@',A,'@@@'/),2(4X,A/)) - ENDIF - - ENDDO - - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: FIXNAM NAME RECOVERY FOR SYNDAT_QCTROPCY -C PRGMMR: S. LORD ORG: NP22 DATE: 1990-11-01 -C -C ABSTRACT: ERRONEOUS STORM NAMES ARE CHECKED FOR OLD (RETIRED) STORM -C NAMES (ATLANTIC BASIN ONLY). IF A RETIRED NAME MATCHES THE -C INPUT STORM NAME, ERROR RECOVERY IS SUCCESSFUL. SEE REMARKS BELOW. -C -C PROGRAM HISTORY LOG: -C 1990-11-01 S. LORD -C 1993-08-25 S. LORD ADDED CATALOG CHECKING FOR STORM IDS -C -C USAGE: CALL FIXNAM(IUNTCA,NIDBSN,IYRN,IETYP,STMNAM,DUMREC) -C INPUT ARGUMENT LIST: -C IUNTCA - STORM CATALOG UNIT NUMBER -C NIDBSN - BASIN INDEX -C IYRN - 4 DIGIT YEAR OF STORM (YYYY) -C IETYP - INPUT ERROR CODE (SHOULD BE POSITIVE) -C STMNAM - CHARACTER VARIABLE CONTAINING ERRONEOUS STORM NAME -C -C OUTPUT ARGUMENT LIST: -C IETYP - SIGN OF INPUT IETYP IS CHANGED TO NEGATIVE IF -C - RECOVERY IS SUCCESSFUL -C DUMREC - CHARACTER VARIABLE CONTAINING ENTIRE INPUT DATA RECORD -C - WITH CORRECTED NAME. -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE FIXNAM(IUNTCA,NIDBSN,IYRN,IETYP,STMNAM,DUMREC) - - PARAMETER (NRETIR= 7) - - SAVE - - CHARACTER*(*) STMNAM,DUMREC - - PARAMETER (MAXCHR=95) - PARAMETER (MAXVIT=15) - PARAMETER (NBASIN=11) - - CHARACTER BUFIN*1,RSMCZ*4,STMIDZ*3,STMNMZ*9,FSTFLZ*1,STMDPZ*1, - 1 LATNS*1,LONEW*1,FMTVIT*6,BUFINZ*100,RELOCZ*1,NABASN*16 - - DIMENSION IVTVAR(MAXVIT),ISTVAR(MAXVIT),IENVAR(MAXVIT) - - DIMENSION NABASN(NBASIN),BUFIN(MAXCHR),FMTVIT(MAXVIT) - - EQUIVALENCE (BUFIN(1),RSMCZ),(BUFIN(5),RELOCZ),(BUFIN(6),STMIDZ), - 1 (BUFIN(10),STMNMZ),(BUFIN(19),FSTFLZ), - 2 (BUFIN(37),LATNS),(BUFIN(43),LONEW), - 3 (BUFIN(95),STMDPZ),(BUFIN(1),BUFINZ) - - EQUIVALENCE (IVTVAR(1),IDATEZ),(IVTVAR(2),IUTCZ) - - CHARACTER RETNAM(NRETIR,NBASIN)*9 - DIMENSION IRETYR(NRETIR,NBASIN),NUMRET(NBASIN) - - DIMENSION RINC(5) - - DATA FMTVIT/'(I8.8)','(I4.4)','(I3.3)','(I4.4)',2*'(I3.3)', - 1 3*'(I4.4)','(I2.2)','(I3.3)',4*'(I4.4)'/, - 2 ISTVAR/20,29,34,39,45,49,53,58,63,68,71,75,80,85,90/, - 3 IENVAR/27,32,36,42,47,51,56,61,66,69,73,78,83,88,93/ - - DATA NABASN/'ATLANTIC ','EAST PACIFIC ', - 1 'CENTRAL PACIFIC ','WEST PACIFIC ', - 2 'SOUTH CHINA SEA ','EAST CHINA SEA ', - 3 'AUSTRALIA ','SOUTH PACIFIC ', - 4 'SOUTH INDIAN OCN','BAY OF BENGAL ', - 5 'NRTH ARABIAN SEA'/ - - DATA RETNAM/'GILBERT ','JOAN ','HUGO ','GLORIA ', - 1 'DIANA ','BOB ','ANDREW ',70*' '/ - - DATA IRETYR/1988,1988,1989,1985,1990,1991,1992, - 1 70*00/ - - DATA NUMRET/7,1,9*0/,DYSPMX/2.0/ - - RETNAM(1,2)='INIKI' - IRETYR(1,2)=1992 - - BUFINZ=DUMREC - DO INUM=1,NUMRET(NIDBSN) - IF(STMNAM .EQ. RETNAM(INUM,NIDBSN) .AND. - 1 IYRN .EQ. IRETYR(INUM,NIDBSN)) THEN - WRITE(6,3) NABASN(NIDBSN),STMNAM,IYRN - 3 FORMAT(/'...SUCESSFUL RECOVERY OF STORM NAME FROM RETIRED STORM ', - 1 'NAMES OF THE ',A,'. NAME, YEAR=',A,1X,I5) - STMNMZ=STMNAM - DUMREC=BUFINZ - IETYP=-IETYP - RETURN - ENDIF - ENDDO - -C LOOK FOR NAME IN STORM CATALOG. IF THERE, CHECK THAT IT IS A -C RECENT STORM. IF SO, ASSUME THAT THE STORM ID IS OK. - - CALL STCATN(IUNTCA,STMNAM,IDATCA,IUTCCA,IFND) - IF(IFND .EQ. 0) THEN - WRITE(6,101) STMNAM - 101 FORMAT(/'...UNSUCESSFUL ATTEMPT TO RECOVER STORM NAME ...',A, - 1 '... HAS OCCURRED.') - ELSE - -C NOW CHECK DATE VERSUS SUBJECT RECORD - - do iv=1,2 - call decvar(istvar(iv),ienvar(iv),ivtvar(iv),ierdec,fmtvit(iv), - 1 bufinz) - enddo - CALL ZTIME(IDATEZ,IUTCZ,IYR,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,DAYZ) - - CALL ZTIME(IDATCA,IUTCCA,IYR,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,DAYCA) - WRITE(6,133) IDATEZ,IUTCZ,IDATCA,IUTCCA,DAYZ,DAYCA - 133 FORMAT('...COMPARING DATES BETWEEN RECORD AND CATALOG. IDATEZ, ', - 1 'IUTCZ=',I9,I5,' IDATCA,IUTCCA=',I9,I5/4X,'DAYZ,DAYCA=', - 2 2F12.3) - IF(ABS(DAYZ-DAYCA) .GT. DYSPMX) RETURN - IETYP=-IETYP - WRITE(6,201) STMNAM - 201 FORMAT(/'...SUCESSFUL ATTEMPT TO RECOVER STORM NAME ...',A, - 1 '... HAS OCCURRED.') - ENDIF - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: SECVCK SECONDARY VARIABLE Q/C CHECKING -C PRGMMR: S. LORD ORG: NP22 DATE: 1990-11-01 -C -C ABSTRACT: SECONDARY VARIABLES ARE: STORM DIRECTION AND SPEED, -C PCEN (CENTRAL PRESSURE), RMAX (RADIUS OF THE OUTERMOST CLOSED -C ISOBAR), PENV (PRESSURE AT RMAX), AND VMAX (MAXIMUM WIND SPEED). -C THIS ROUTINE CHECKS FOR MISSING AND OUT OF BOUNDS VALUES. -C FOR RMAX, PENV, AND VMAX, VALUES ARE SUBSTITUTED FROM THE LATEST -C HISTORICAL Q/C CHECKED RECORD IF THAT RECORD IS NO MORE THAN 12 -C HOURS OLD. -C -C PROGRAM HISTORY LOG: -C 1990-11-01 S. LORD -C 1991-11-17 S. LORD REVISED FOR MULTIPLE ERRORS -C 1992-08-20 S. LORD ADDED THE JTWC MEMORIAL SWITCH CHECK -C 1992-09-04 S. LORD ADDED PRESSURE WIND RELATIONSHIP -C -C USAGE: CALL SECVCK(IUNTOK,NTEST,NOKAY,NBAD,NUMTST,NUMOKA,NUMBAD, -C DAY0,DAYMIN,DAYMX1,DAYOFF,IFSECV,ZZZREC,NNNREC, -C SCRREC,TSTREC,BADREC,OKAREC) -C INPUT ARGUMENT LIST: -C IUNTOK - UNIT NUMBER FOR PRELIMINARY QUALITY CONTROLLED FILE. -C NTEST - NUMBER OF RECORDS TO BE TESTED. -C NUMTST - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH RECORD -C - TO BE TESTED. -C DAY0 - DATE AT WHICH THIS Q/C CHECK IS BEING MADE. -C - UNITS ARE DDD.FFF, WHERE DDD=JULIAN DAY, FFF=FRAC- -C - TIONAL DAY (E.G. .5=1200 UTC). -C DAYMIN - EARLIEST (MINIMUM) DATE FOR CONSTRUCTION OF A -C - HISTORICAL TRACK FOR EACH STORM. -C - UNITS SAME AS DAY0 ABOVE. -C DAYMX1 - LATEST (MAXIMUM) DATE FOR CONSTRUCTION OF HISTORICAL -C - TRACK FOR EACH STORM. UNITS ARE SAME AS DAY0 ABOVE. -C DAYOFF - OFFSET ADDED TO DAYMX1 IF DAYMIN REFERS TO THE YEAR -C - BEFORE DAYMX1. -C ZZZREC - CHARACTER VARIABLE CONTAINING VARIABLE NAMES. -C NNNREC - CHARACTER VARIABLE CONTAINING COLUMN NUMBERS. -C TSTREC - CHARACTER ARRAY CONTAINING RECORDS TO BE TESTED. -C -C OUTPUT ARGUMENT LIST: -C NOKAY - NUMBER OF RECORDS THAT PASSED THE SEC. VAR. CHECK. -C NBAD - NUMBER OF RECORDS THAT FAILED THE SEC. VAR. CHECK. -C IFSECV - INTEGER ARRAY CONTAINING ERROR CODE FOR EACH INPUT -C - RECORD. SEE COMMENTS IN PGM FOR KEY TO ERROR CODES. -C SCRREC - SCRATCH CHARACTER*9 ARRAY -C NUMOKA - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH GOOD -C - RECORD. -C NUMBAD - INTEGER ARRAY CONTAINING INDEX NUMBER OF EACH BAD -C - RECORD. -C BADREC - CHARACTER ARRAY CONTAINING BAD RECORDS THAT FAILED -C - THE SEC. VAR. CHECK. -C OKAREC - CHARACTER ARRAY CONTAINING ALL RECORDS THAT PASSED -C - THE SEC. VAR. CHECK. -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C -C REMARKS: WARNING: RECORDS WITH CORRECT FORMAT BUT MISSING OR -C ERRONEOUS DATA MAY BE MODIFIED BY THIS ROUTINE!! -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE SECVCK(IUNTOK,NTEST,NOKAY,NBAD,NUMTST,NUMOKA,NUMBAD, - 1 DAY0,DAYMIN,DAYMX1,DAYOFF,IFSECV,ZZZREC,NNNREC, - 2 SCRREC,TSTREC,BADREC,OKAREC) - - PARAMETER (NPRVMX=61) - PARAMETER (MAXSTM=70) - PARAMETER (NERCSV=9) - PARAMETER (MAXREC=1000) - - SAVE - - CHARACTER*(*) ZZZREC,NNNREC,SCRREC(0:NTEST),TSTREC(0:NTEST), - 1 BADREC(MAXREC),OKAREC(NTEST),ERCSV(NERCSV)*60, - 2 STDPTP(-NPRVMX:-1)*1,SUBTOP*1,SUBFLG*1 - - LOGICAL NEWSTM - - DIMENSION NUMOKA(NTEST),IFSECV(MAXREC),NUMBAD(MAXREC), - 1 NUMTST(NTEST) - - DIMENSION NUMSTM(MAXSTM),INDXST(MAXSTM,MAXSTM),IOPSTM(MAXSTM), - 1 SRTDAY(MAXSTM,MAXSTM),IDASRT(MAXSTM) - - DIMENSION STLATP(-NPRVMX:-1),STLONP(-NPRVMX:-1), - 1 STDAYP(-NPRVMX: 0),STVMXP(-NPRVMX:-1), - 2 STDIRP(-NPRVMX:-1),STSPDP(-NPRVMX:-1), - 3 STPCNP(-NPRVMX:-1),STPENP(-NPRVMX:-1), - 4 STRMXP(-NPRVMX:-1) - - PARAMETER (MAXCHR=95) - PARAMETER (MAXVIT=15) - PARAMETER (MAXTPC= 3) - PARAMETER (NBASIN=11) - PARAMETER (ISECVR= 5,ITERVR=10) - PARAMETER (NSECVR=ITERVR-ISECVR) - PARAMETER (NTERVR=MAXVIT-ITERVR+1) - - CHARACTER BUFIN*1,RSMCZ*4,STMIDZ*3,STMNMZ*9,FSTFLZ*1,STMDPZ*1, - 1 SHALO*1,MEDIUM*1,DEEP*1,LATNS*1,LONEW*1,FMTVIT*6, - 2 BUFINZ*100,STMREQ*9,RELOCZ*1,STMTPC*1,EXE*1,NAMVAR*5, - 3 IDBASN*1,NABASN*16 - - DIMENSION IVTVAR(MAXVIT),VITVAR(MAXVIT),VITFAC(MAXVIT), - 1 ISTVAR(MAXVIT),IENVAR(MAXVIT) - - DIMENSION NAMVAR(MAXVIT+1),IDBASN(NBASIN),NABASN(NBASIN), - 1 BUFIN(MAXCHR),STMTPC(0:MAXTPC),FMTVIT(MAXVIT) - - EQUIVALENCE (BUFIN(1),RSMCZ),(BUFIN(5),RELOCZ),(BUFIN(6),STMIDZ), - 1 (BUFIN(10),STMNMZ),(BUFIN(19),FSTFLZ), - 2 (BUFIN(37),LATNS),(BUFIN(43),LONEW), - 3 (BUFIN(95),STMDPZ),(BUFIN(1),BUFINZ) - - EQUIVALENCE (IVTVAR(1),IDATEZ),(IVTVAR(2),IUTCZ) - - EQUIVALENCE (VITVAR( 3),STMLTZ),(VITVAR( 4),STMLNZ), - 1 (VITVAR( 5),STMDRZ),(VITVAR( 6),STMSPZ), - 2 (VITVAR( 7),PCENZ) - - EQUIVALENCE (STMTPC(0), EXE),(STMTPC(1),SHALO),(STMTPC(2),MEDIUM), - 1 (STMTPC(3),DEEP) - -C **** NOTE: SECBND AND PRVSVR ARE DIMENSIONED NSECVR+1 TO CARRY -C SPACE FOR VMAX, WHICH IS NOT STRICTLY A SECONDARY VARIABLE. -C THEREFORE, WE DO NOT ALLOW MISSING OR ERRONEOUS VALUES -C OF VMAX TO CAUSE RECORDS TO BE REJECTED. - -C ****NOTE: DEPTH OF CYCLONIC CIRCULATION IS CLASSIFIED AS A -C SECONDARY VARIABLE - - DIMENSION RINC(5) - - DIMENSION SECBND(NSECVR+1,2),PRVSVR(NSECVR+1,-NPRVMX:-1), - 1 TERBND(NTERVR,2),IERROR(NSECVR+2) - - EQUIVALENCE (DIRMN ,SECBND(1,1)),(DIRMX ,SECBND(1,2)), - 1 (SPDMN ,SECBND(2,1)),(SPDMX ,SECBND(2,2)), - 2 (PCENMN,SECBND(3,1)),(PCENMX,SECBND(3,2)), - 3 (PENVMN,SECBND(4,1)),(PENVMX,SECBND(4,2)), - 4 (RMAXMN,SECBND(5,1)),(RMAXMX,SECBND(5,2)), - 5 (VMAXMN,TERBND(1,1)),(VMAXMX,TERBND(1,2)) - - DATA SHALO/'S'/,MEDIUM/'M'/,DEEP/'D'/,EXE/'X'/, - 1 VITFAC/2*1.0,2*0.1,1.0,0.1,9*1.0/, - 2 FMTVIT/'(I8.8)','(I4.4)','(I3.3)','(I4.4)',2*'(I3.3)', - 3 3*'(I4.4)','(I2.2)','(I3.3)',4*'(I4.4)'/, - 4 ISTVAR/20,29,34,39,45,49,53,58,63,68,71,75,80,85,90/, - 5 IENVAR/27,32,36,42,47,51,56,61,66,69,73,78,83,88,93/ - - DATA IDBASN/'L','E','C','W','O','T','U','P','S','B','A'/ - - DATA NABASN/'ATLANTIC ','EAST PACIFIC ', - 1 'CENTRAL PACIFIC ','WEST PACIFIC ', - 2 'SOUTH CHINA SEA ','EAST CHINA SEA ', - 3 'AUSTRALIA ','SOUTH PACIFIC ', - 4 'SOUTH INDIAN OCN','BAY OF BENGAL ', - 5 'NRTH ARABIAN SEA'/ - - DATA NAMVAR/'DATE ','TIME ','LAT. ','LONG.','DIR ','SPEED', - 1 'PCEN ','PENV ','RMAX ','VMAX ','RMW ','R15NE', - 2 'R15SE','R15SW','R15NW','DEPTH'/ - -C RMISPR: MISSING CODE FOR RMAX, PCEN AND PENV -C RMISV: MISSING CODE FOR MAX. TANGENTIAL WIND (VMAX) -C EPSMIS: TOLERANCE FOR MISSING VMAX -C FIVMIN: FIVE MINUTES IN UNITS OF FRACTIONAL DAYS -C DTPERS: MAXIMUM TIME SEPARATION FOR SUBSTITUTION OF MISSING -C SECONDARY INFORMATION USING PERSISTENCE (12 HOURS) -C BOUNDS FOR SECONDARY VARIABLES: -C DIRMN =0.0 DEG DIRMX =360 DEG -C SPDMN =0.0 M/S SPDMX =30 M/S -C PCENMN=880 MB PCENMX=1020 MB -C PENVMN=970 MB PENVMX=1050 MB -C RMAXMN=100 KM RMAXMX=999 KM -C VMAXMN=7.7 M/S VMAXMX=100 M/S - - DATA RMISV/-9.0/,RMISPR/-999.0/,EPSMIS/1.E-1/,NUM/1/, - 1 FIVMIN/3.4722E-3/,DTPERS/0.5/ - - DATA DIRMN/0.0/,DIRMX/360./,SPDMN/0.0/,SPDMX/30./, - 1 PCENMN/880./,PCENMX/1020./,PENVMN/970./,PENVMX/1050./, - 2 RMAXMN/100./,RMAXMX/999.0/,VMAXMN/7.7 /,VMAXMX/100./ - - DATA ERCSV - 1 /'1: UNPHYSICAL OR MISSING DIRECTION (OUTSIDE BOUNDS) ', - 2 '2: UNPHYSICAL OR MISSING SPEED (OUTSIDE BOUNDS) ', - 3 '3: UNPHYSICAL OR MISSING CENTRAL PRESSURE (OUTSIDE BOUNDS) ', - 4 '4: UNPHYSICAL OR MISSING ENV. PRESSURE (OUTSIDE BOUNDS) ', - 5 '5: UNPHYSICAL OR MISSING RMAX (OUTSIDE BOUNDS) ', - 6 '6: UNPHYSICAL OR MISSING VMAX (OUTSIDE BOUNDS) ', - 7 '7: MISSING OR UNINTERPRETABLE DEPTH OF CYCLONE CIRCULATION ', - 8 '8: COMBINATION OF TWO OF THE ERROR TYPES 1-6 ', - 9 '9: COMBINATION OF THREE OR MORE OF THE ERROR TYPES 1-6 '/ - -C ERROR CODES FOR DIRECTION/SPEED GROUP CHECK ARE AS FOLLOWS: -C NEGATIVE NUMBERS INDICATE THAT AN ERRONEOUS OR MISSING VALUE -C WAS SUBSTITUTED USING PERSISTENCE OVER THE TIME DTPERS (12 H) -C MULTIPLE ERRORS ARE HANDLED AS FOLLOWS: -C THE FIRST ERROR OCCUPIES THE LEFT-MOST DIGIT -C THE SECOND ERROR OCCUPIES THE RIGHT-MOST DIGIT -C THREE OR MORE ERRORS REVERTS TO ERROR CODE=9 - -C 1: UNPHYSICAL DIRECTION (OUTSIDE BOUNDS) -C 2: UNPHYSICAL SPEED (OUTSIDE BOUNDS) -C 3: UNPHYSICAL CENTRAL PRESSURE (OUTSIDE BOUNDS) -C 4: UNPHYSICAL ENVIRONMENTAL PRESSURE (OUTSIDE BOUNDS) -C 5: UNPHYSICAL RMAX (OUTSIDE BOUNDS) -C 6: UNPHYSICAL VMAX (OUTSIDE BOUNDS) -C 7: MISSING OR UNINTERPRETABLE DEPTH OF CYCLONE CIRCULATION -C 8: COMBINATION OF TWO OF THE ERROR TYPES 1-6 -C 9: COMBINATION OF THREE OR MORE OF THE ERROR TYPES 1-6 - - NADD=0 - WRITE(6,1) NTEST,NOKAY,NBAD,DAY0,DAYMIN,DAYMX1, - 1 DAYOFF - 1 FORMAT(//'...ENTERING SECVCK TO CHECK SECONDARY VARIABLE ERRORS.', - 1 ' NTEST,NOKAY,NBAD=',3I4/4X,'TIME PARAMETERS ARE: DAY0,', - 2 'DAYMIN,DAYMX1,DAYOFF=',4F11.3///) - - CALL WRNING('SECVCK') - -C INITIALIZE SOME VARIABLES - - NUNI=0 - NSTART=0 - SCRREC(0)='ZZZZZ' - STDAYP(0)=-999.0 - SECBND(6,1:2)=TERBND(1,1:2) - - NUMSTM(1:MAXSTM)=0 - INDXST(1:MAXSTM,1:MAXSTM)=0 - -C FOR THE READABLE RECORDS, FIND THE UNIQUE STORMS AND SAVE THE -C INDEX FOR EACH STORM - - WRITE(6,31) - 31 FORMAT(/'...RECORDS THAT WILL BE CHECKED ARE:'/) - DO NREC=1,NTEST - - BUFINZ=TSTREC(NREC) - WRITE(6,33) NREC,NUMTST(NREC),BUFINZ - 33 FORMAT('...',I4,'...',I4,'...',A) - -C DECODE DATE FOR SORTING PURPOSES - - DO IV=1,2 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 BUFINZ) - ENDDO - CALL ZTIME(IDATEZ,IUTCZ,IYR,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,DAYZ) - -C CATEGORIZE ALL STORMS BY THEIR STORM ID - - IOPT=5 - STMREQ=STMIDZ - -C ENDIF - - NEWSTM=.TRUE. - DO NR=NSTART,NUNI - IF(STMREQ .EQ. SCRREC(NR)) THEN - NEWSTM=.FALSE. - INDX=NR - GO TO 85 - ENDIF - ENDDO - - 85 NSTART=1 - IF(NEWSTM) THEN - NUNI=NUNI+1 - SCRREC(NUNI)=STMREQ - IOPSTM(NUNI)=IOPT - INDX=NUNI - ENDIF - - NUMSTM(INDX)=NUMSTM(INDX)+1 - INDXST(NUMSTM(INDX),INDX)=NREC - SRTDAY(NUMSTM(INDX),INDX)=DAYZ - - ENDDO - - WRITE(6,101) NUNI - 101 FORMAT(/'...NUMBER OF UNIQUE STORMS=',I4) - -C CHECK SECONDARY VARIABLES DIRECTION,SPEED, PCEN, PENV, RMAX -C VMAX AND STORM DEPTH FOR MISSING AND OUT OF BOUNDS VALUES - - DO NUNIQ=1,NUNI - - BUFINZ=TSTREC(INDXST(1,NUNIQ)) - CALL DECVAR(ISTVAR(1),IENVAR(1),IVTVAR(1),IERDEC,FMTVIT(1), - 1 BUFINZ) - - print *, ' ' - print *, ' ' - IDTTRK=-IDATEZ - CALL SETTRK(IUNTOK,IOPSTM(NUNIQ),IDTTRK,DAY0,DAYMIN, - 1 DAYMX1,DAYOFF,STMDRZ,STMSPZ,STMLTZ,STMLNZ, - 2 SCRREC(NUNIQ),IERSET) - CALL PRVSTM(STLATP,STLONP,STDIRP,STSPDP,STDAYP, - 1 STRMXP,STPCNP,STPENP,STVMXP,STDPTP,KSTPRV) - PRVSVR(1,-1:-KSTPRV:-1)=STDIRP(-1:-KSTPRV:-1) - PRVSVR(2,-1:-KSTPRV:-1)=STSPDP(-1:-KSTPRV:-1) - PRVSVR(3,-1:-KSTPRV:-1)=STPCNP(-1:-KSTPRV:-1) - PRVSVR(4,-1:-KSTPRV:-1)=STPENP(-1:-KSTPRV:-1) - PRVSVR(5,-1:-KSTPRV:-1)=STRMXP(-1:-KSTPRV:-1) - PRVSVR(6,-1:-KSTPRV:-1)=STVMXP(-1:-KSTPRV:-1) - -C SORT ALL RECORDS BY TIME FOR EACH STORM SO THAT WE CAN TAKE -C THEM IN CHRONOLOGICAL ORDER - - CALL SORTRL(SRTDAY(1:NUMSTM(NUNIQ),NUNIQ),IDASRT(1:NUMSTM(NUNIQ)), - 1 NUMSTM(NUNIQ)) - - WRITE(6,107) KSTPRV,SCRREC(NUNIQ) - 107 FORMAT(/'...READY FOR ERROR CHECK WITH KSTPRV, STMID=',I3,1X,A) - - DO NUMST=1,NUMSTM(NUNIQ) - -C INITIALIZE ERROR COUNTERS - - NTOTER=0 - NPOSER=0 - IERROR(1:NSECVR+2)=0 - - NREC=INDXST(IDASRT(NUMST),NUNIQ) - BUFINZ=TSTREC(NREC) - -C GET DATE/TIME, STORM LAT/LON, AND THE SECONDARY -C VARIABLES DIRECTION/SPEED, PCEN, PENV, RMAX -C ****NOTE: ALTHOUGH NOT STRICTLY A SECONDARY VARIABLE, VMAX -C IS CHECKED HERE SINCE IT IS NEEDED FOR CLIPER. - - DO IV=1,ITERVR - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 BUFINZ) - VITVAR(IV)=REAL(IVTVAR(IV))*VITFAC(IV) - ENDDO - - CALL ZTIME(IDATEZ,IUTCZ,IYR,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,DAYZ) - JDY=IFIX(DAYZ) - - INDX00=99 - DO NP=-1,-KSTPRV,-1 - IF(ABS(STDAYP(NP)-DAYZ) .LE. FIVMIN) INDX00=NP - ENDDO - IF(ABS(DAYZ-DAY0) .LT. FIVMIN) INDX00=0 - - IF(INDX00 .EQ. 99) THEN - WRITE(6,133) INDX00 - 133 FORMAT(/'******AN INDEXING ERROR HAS OCCURRED IN SECVCK, INDX00=', - 1 I4) - CALL ABORT1('SECVCK ',133) - ENDIF - -C ERROR RECOVERY FROM PERSISTENCE IS ALWAYS POSSIBLE. RECOVERY -C FROM CLIMATOLOGY IS POSSIBLE FOR ENVIRONMENTAL PRESSURE AND -C STORM SIZE. - -C THE JMA MEMORIAL DIRECTION/SPEED CHECK IS NOW IMPLEMENTED: -C IF BOTH DIRECTION AND SPEED ARE ZERO, AND THE RSMC IS JMA, -C WE TRY TO RECOVER A BETTER DIRECTION/SPEED. - - DO IV=ISECVR,ITERVR - - RMISVR=RMISPR - SUBVAR=-99.0 - IF(IV .EQ. ITERVR) RMISVR=RMISV - IF(ABS(VITVAR(IV)-RMISVR) .LE. EPSMIS .OR. - 1 VITVAR(IV) .LT. SECBND(IV-ISECVR+1,1) .OR. - 2 VITVAR(IV) .GT. SECBND(IV-ISECVR+1,2) .OR. - 3 (IV-ISECVR+1 .LE. 2 .AND. VITVAR(5) .EQ. 0.0 .AND. - 4 VITVAR(6) .EQ. 0.0 .AND. (RSMCZ .EQ. 'JMA' .OR. - 5 RSMCZ .EQ. '!WJ' .OR. RSMCZ .EQ. '!JW'))) THEN - - NTOTER=NTOTER+1 - IF(IV-ISECVR+1 .EQ. 3) THEN - NPOSER=NPOSER+1 - IERROR(NTOTER)=IABS(IV-ISECVR+1) - ELSE - IERROR(NTOTER)=-IABS(IV-ISECVR+1) - ENDIF - - WRITE(6,141) NUNIQ,NUMST,INDX00,DAYZ,NTOTER,IERROR(NTOTER), - 1 NAMVAR(IV),VITVAR(IV),RMISVR,SECBND(IV-ISECVR+1,1), - 2 SECBND(IV-ISECVR+1,2),NNNREC,ZZZREC,TSTREC(NREC) - 141 FORMAT(//'...ERROR CHECKING NUNIQ,NUMST,INDX00,DAYZ,NTOTER,', - 1 'IERROR=',3I4,F11.3,2I4/4X,'HAS FOUND SECONDARY ', - 2 'VARIABLE ',A,' WITH VALUE=',F7.1,' MISSING OR ', - 3 'EXCEEDING BOUNDS. RMISVR,MINVAL,MAXVAL=',3F7.1/2(1X, - 4 '@@@',A,'@@@'/),4X,A) - -C NEGATE THE ERROR FLAG SO THAT IT SERVES ONLY AS A REMINDER THAT -C AN ERROR IS PRESENT - - IF(IV-ISECVR+1 .LE. 2 .AND. - 1 ((VITVAR(5) .NE. 0.0 .OR. - 2 VITVAR(6) .NE. 0.0) .OR. (RSMCZ .NE. 'JMA' .AND. - 3 RSMCZ .NE. '!WJ' .AND. RSMCZ .NE. '!JW'))) THEN - - WRITE(6,151) NAMVAR(IV),IERROR(NTOTER) - 151 FORMAT('...ERROR RECOVERY FOR ',A,' WILL BE DELAYED UNTIL DRSPCK', - 1 ' (NO LONGER CALLED).'/4X,'THE ERROR TYPE ',I3,' IS MADE ', - 2 'NEGATIVE AS A REMINDER THAT AN ERROR HAS OCCURRED.') - - ELSE - -C FOR ALL OTHER VARIABLES, IS THERE A PREVIOUS HISTORY? - - IF(KSTPRV .GT. 0) THEN - INDPER=0 - DO NP=INDX00-1,-KSTPRV,-1 - IF(ABS(PRVSVR(IV-ISECVR+1,NP)-RMISVR) .GT. EPSMIS .AND. - 1 PRVSVR(IV-ISECVR+1,NP) .GE. SECBND(IV-ISECVR+1,1) .AND. - 2 PRVSVR(IV-ISECVR+1,NP) .LE. SECBND(IV-ISECVR+1,2)) THEN - -c Because of the JMA memorial problem, we are not allowed to use -c a motionless storm as a persistence value - - if(iv-isecvr+1 .le. 2 .and. prvsvr(1,np) .eq. 0 .and. - 1 prvsvr(2,np) .eq. 0) then - ipers=0 - - else - INDPER=NP - IPERS=1 -C WRITE(6,161) INDPER,DAYZ,STDAYP(INDPER), -C 1 PRVSVR(IV-ISECVR+1,INDPER) -C 161 FORMAT(/'...INDPER,DAYZ,STDAYP(INDPER),PRVSVR(IV-ISECVR+1, -C 1 'INDPER)=',I3,3F10.3) - GO TO 221 - ENDIF - ENDIF - ENDDO - 221 CONTINUE - -C IS PERSISTENCE SUBSTITUTION POSSIBLE? - - IF(DAYZ-STDAYP(INDPER) .LE. DTPERS .AND. IPERS .EQ. 1) THEN - SUBVAR=PRVSVR(IV-ISECVR+1,INDPER) - SUBFLG='P' - IF(NPOSER .GT. 0) NPOSER=NPOSER-1 - IERROR(NTOTER)=-IABS(IERROR(NTOTER)) - WRITE(6,223) SUBVAR - 223 FORMAT('...THE MISSING OR ERRONEOUS VALUE WILL BE REPLACED BY ', - 1 'A PERSISTENCE VALUE OF ',F7.1) - -C PERSISTENCE SUBSTITUTION NOT POSSIBLE - - ELSE - IF(IV-ISECVR+1 .LE. 3) THEN - SUBVAR=0.0 - WRITE(6,224) NAMVAR(IV),DAYZ,STDAYP(INDPER),DTPERS - 224 FORMAT(/'...TIME INTERVAL TO THE CLOSEST PREVIOUS RECORD WITH ', - 1 'A NON-MISSING ',A,' EXCEEDS DTPERS OR A '/4X,'NON-', - 2 'MISSING VALUE CANNOT BE FOUND. DAYZ,PREVIOUS DAY,', - 3 'DTPERS=',3F10.3,'.'/4X,'NO RECOVERY POSSIBLE FOR THIS', - 4 ' VARIABLE.') - - ELSE - WRITE(6,225) NAMVAR(IV),DAYZ,STDAYP(INDPER),DTPERS - 225 FORMAT(/'...TIME INTERVAL TO THE CLOSEST PREVIOUS RECORD WITH ', - 1 'A NON-MISSING ',A,' EXCEEDS DTPERS OR A '/4X,'NON-', - 2 'MISSING VALUE CANNOT BE FOUND. DAYZ,PREVIOUS DAY,', - 3 'DTPERS=',3F10.3/4X,'WE WILL SUBSTITUTE A ', - 4 'CLIMATOLOGICAL VALUE.') - ENDIF - ENDIF - -C NO PRIOR HISTORY - - ELSE - IF(IV-ISECVR+1 .LE. 3) THEN - SUBVAR=0.0 - WRITE(6,226) KSTPRV - 226 FORMAT(/'...KSTPRV=',I2,' SO THERE IS NO PRIOR HISTORY AND NO ', - 1 'CHECKING. NO RECOVERY POSSIBLE FOR THIS VARIABLE.') - - ELSE - WRITE(6,227) KSTPRV - 227 FORMAT(/'...KSTPRV=',I2,' SO THERE IS NO PRIOR HISTORY AND NO ', - 1 'CHECKING. CLIMATOLOGICAL VALUES WILL BE SUBSTITUTED.') - ENDIF - ENDIF - -C CLIMATOLOGICAL VARIABLE SUBSTITUTION - - IF(SUBVAR .EQ. -99.0) THEN - DO NBA=1,NBASIN - IF(STMIDZ(3:3) .EQ. IDBASN(NBA)) THEN - IBASN=NBA - GO TO 2228 - ENDIF - ENDDO - 2228 CONTINUE - -C SUBSTITUTE A PRESSURE-WIND RELATIONSHIP FOR MAX WIND - - IF(IV .EQ. ITERVR) THEN - SUBVAR=TCPWTB(VITVAR(7),IBASN) - ELSE - SUBVAR=TCCLIM(IV,IBASN) - ENDIF - SUBFLG='C' - WRITE(6,229) NAMVAR(IV),SUBVAR,NABASN(IBASN) - 229 FORMAT(/'...FOR VARIABLE ',A,', THE CLIMATOLOGICAL VALUE IS',F7.1, - 1 ' IN THE ',A,' BASIN.') - ENDIF - - IF(SUBVAR .NE. 0.0) THEN - WRITE(TSTREC(NREC)(ISTVAR(IV):IENVAR(IV)),FMTVIT(IV)) - 1 NINT(SUBVAR/VITFAC(IV)) - TSTREC(NREC)(ISTVAR(IV)-1:ISTVAR(IV)-1)=SUBFLG - WRITE(6,2219) TSTREC(NREC) - 2219 FORMAT('...AFTER SUBSTITUTION, THE RECORD IS:'/4X,A) - BUFINZ=TSTREC(NREC) - -c Only update vitvar after direction errors have been corrected -c in the rare case for a JMA report with 0000 direction and -c 0000 speed - - if(iv-isecvr+1 .ge. 2) then - DO IVZ=1,ITERVR - CALL DECVAR(ISTVAR(IVZ),IENVAR(IVZ),IVTVAR(IVZ),IERDEC, - 1 FMTVIT(IVZ),BUFINZ) - VITVAR(IVZ)=REAL(IVTVAR(IVZ))*VITFAC(IVZ) - ENDDO - endif - ENDIF - - ENDIF - ENDIF - -C THE JTWC MEMORIAL PRESSURE SWITCHING CHECK -C IV=7 IS PCEN -C IV=8 IS PENV - - IF(IV-ISECVR+1 .EQ. 3) THEN - IF(VITVAR(IV) .GE. VITVAR(IV+1)) THEN - NTOTER=NTOTER+1 - WRITE(6,2301) VITVAR(IV),VITVAR(IV+1) - 2301 FORMAT(/'...UNPHYSICAL PCEN=',F7.1,' >= PENV=',F7.1) - IF(SUBVAR .GT. 0.0) THEN - NPOSER=NPOSER+1 - IERROR(NTOTER)=IABS(IV-ISECVR+1) - WRITE(6,2303) - 2303 FORMAT('...WE CANNOT RECOVER THIS ERROR SINCE SUBSTITUTION HAS ', - 1 'GIVEN UNPHYSICAL RESULTS.') - ELSE - IF(VITVAR(IV) .NE. RMISVR .AND. VITVAR(IV+1) .NE. RMISVR) THEN - SUBFLG='Z' - SUBVR1=VITVAR(IV) - SUBVR2=VITVAR(IV+1)-1.0 - WRITE(TSTREC(NREC)(ISTVAR(IV):IENVAR(IV)),FMTVIT(IV)) - 1 NINT(SUBVR2/VITFAC(IV)) - WRITE(TSTREC(NREC)(ISTVAR(IV+1):IENVAR(IV+1)),FMTVIT(IV+1)) - 1 NINT(SUBVR1/VITFAC(IV+1)) - TSTREC(NREC)(ISTVAR(IV)-1:ISTVAR(IV)-1)=SUBFLG - TSTREC(NREC)(ISTVAR(IV+1)-1:ISTVAR(IV+1)-1)=SUBFLG - WRITE(6,2219) TSTREC(NREC) - BUFINZ=TSTREC(NREC) - DO IVZ=1,ITERVR - CALL DECVAR(ISTVAR(IVZ),IENVAR(IVZ),IVTVAR(IVZ),IERDEC, - 1 FMTVIT(IVZ),BUFINZ) - VITVAR(IVZ)=REAL(IVTVAR(IVZ))*VITFAC(IVZ) - ENDDO - ENDIF - ENDIF - ENDIF - ENDIF - ENDDO - -C CHECK FOR MISSING DEPTH OF THE CYCLONIC CIRCULATION - - ITPC=0 - DO KTPC=1,MAXTPC - IF(STMDPZ .EQ. STMTPC(KTPC)) THEN - ITPC=KTPC -C WRITE(6,239) NUMST,STMDPZ -C 239 FORMAT('...RECORD ',I3,' HAS A PROPER CODE=',A,' FOR DEPTH OF ', -C 'THE CYCLONIC CIRCULATION.') - ENDIF - ENDDO - - IF(ITPC .EQ. 0) THEN - - SUBTOP=EXE - NTOTER=NTOTER+1 - IERROR(NTOTER)=-7 - - WRITE(6,241) NUNIQ,NUMST,INDX00,DAYZ,NTOTER,IERROR(NTOTER), - 1 STMDPZ,NNNREC,ZZZREC,TSTREC(NREC) - 241 FORMAT(//'...ERROR CHECKING NUNIQ,NUMST,INDX00,DAYZ,NTOTER,', - 1 'IERROR=',3I4,F11.3,2I4/4X,'HAS FOUND MISSING OR BAD ', - 2 'CODE=',A,' FOR DEPTH OF THE CYCLONIC CIRCULATION. ', - 3 'RECORD='/2(1X,'@@@',A,'@@@'/),4X,A) - - IF(KSTPRV .GT. 0) THEN - INDPER=0 - DO NP=INDX00-1,-KSTPRV,-1 - DO ITPC=1,MAXTPC - IF(STDPTP(NP) .EQ. STMTPC(ITPC)) THEN - INDPER=NP - SUBTOP=STDPTP(NP) - SUBFLG='P' - WRITE(6,243) INDPER,DAYZ,STDAYP(INDPER),SUBTOP - 243 FORMAT(/'...INDPER,DAYZ,STDAYP(INDPER),SUBTOP=',I3,2F10.3,1X,A) - GO TO 261 - ENDIF - ENDDO - - ENDDO - - 261 CONTINUE - IF(DAYZ-STDAYP(INDPER) .LE. DTPERS) THEN - WRITE(6,263) NAMVAR(MAXVIT+1),SUBTOP - 263 FORMAT('...THE MISSING OR ERRONEOUS VALUE OF ',A,' WILL BE ', - 1 'REPLACED BY A PERSISTENCE VALUE OF ',A) - - ELSE - - WRITE(6,273) DAYZ,STDAYP(INDPER),DTPERS - 273 FORMAT(/'...TIME INTERVAL TO THE CLOSEST PREVIOUS RECORD WITH ', - 1 'A PROPER STORM DEPTH CODE EXCEEDS DTPERS OR AN '/4X, - 2 'ACCEPTABLE VALUE CANNOT BE FOUND. ', - 3 'DAYZ,PREVIOUS DAY,DTPERS=',3F10.3/,4X,'WE WILL ', - 4 'SUBSTITUTE A CLIMATOLOGICAL VALUE.') - ENDIF - - ELSE - WRITE(6,277) KSTPRV - 277 FORMAT(/'...KSTPRV=',I2,' SO THERE IS NO PRIOR HISTORY AND NO ', - 1 'CHECKING. CLIMATOLOGICAL VALUES WILL BE SUBSTITUTED.') - ENDIF - -C DETERMINE CLIMATOLOGICAL VALUE IF NECESSARY - - IF(SUBTOP .EQ. EXE) THEN - IF(PCENZ .LE. 980.0) THEN - SUBTOP=DEEP - WRITE(6,279) PCENZ,SUBTOP - 279 FORMAT('...CLIMATOLOGICAL SUBSTITUTION OF STORM DEPTH: PCEN, ', - 1 'DEPTH=',F7.1,1X,A) - ELSE IF(PCENZ .LE. 1000.0) THEN - SUBTOP=MEDIUM - WRITE(6,279) PCENZ,SUBTOP - ELSE - SUBTOP=SHALO - WRITE(6,279) PCENZ,SUBTOP - ENDIF - SUBFLG='C' - ENDIF - - WRITE(TSTREC(NREC)(MAXCHR:MAXCHR),'(A)') SUBTOP - TSTREC(NREC)(MAXCHR-1:MAXCHR-1)=SUBFLG - WRITE(6,269) TSTREC(NREC) - 269 FORMAT('...AFTER SUBSTITUTION, THE RECORD IS:'/4X,A) - ENDIF - -C ASSIGN SUMMARY ERROR CODE - -C NO ERRORS - - IF(NTOTER .EQ. 0) THEN - IETYP=0 - ISGNER=1 - -C IF ALL ERRORS HAVE BEEN FIXED, SUMMARY CODE IS NEGATIVE - - ELSE - IF(NPOSER .EQ. 0) THEN - ISGNER=-1 - ELSE - ISGNER=1 - ENDIF - -C ADD CODE FOR DEPTH OF THE CYCLONIC CIRCULATION FIRST - - NERZ=0 - NALLER=NTOTER - IF(IABS(IERROR(NTOTER)) .EQ. 7) THEN - NERZ=1 - IETYP=7 - NALLER=NTOTER-1 - ENDIF - -C ALL OTHER ERRORS. PICK OUT ONLY ALL ERRORS THAT REMAIN OR -C ALL ERRORS THAT HAVE BEEN FIXED IF THERE ARE NO REMAINING -C ERRORS. DO NOTHING WITH OTHER ERRORS. - - DO NER=1,NALLER - IF((ISGNER .LT. 0 .AND. IERROR(NER) .LT. 0) .OR. - 1 (ISGNER .GT. 0 .AND. IERROR(NER) .GT. 0)) THEN - NERZ=NERZ+1 - - ELSE - GO TO 280 - ENDIF - - IF(NERZ .EQ. 1) THEN - IETYP=IABS(IERROR(NER)) - - ELSE IF(NERZ .EQ. 2) THEN - IETYP=IABS(IETYP)*10+IABS(IERROR(NER)) - - ELSE IF(NERZ .EQ. 3) THEN - IF(IABS(IERROR(NTOTER)) .EQ. 7) THEN - IETYP=78 - ELSE - IETYP=9 - ENDIF - - ELSE - IF(IABS(IERROR(NTOTER)) .EQ. 7) THEN - IETYP=79 - ELSE - IETYP=9 - ENDIF - ENDIF - - 280 CONTINUE - ENDDO - ENDIF - IETYP=SIGN(IETYP,ISGNER) - - WRITE(6,281) SCRREC(NUNIQ),NUMST,NUMSTM(NUNIQ),NTOTER,NPOSER, - 1 ISGNER,IETYP,(IERROR(NER),NER=1,NTOTER) - 281 FORMAT(/'...ERROR SUMMARY FOR STMID,NUMST,NUMSTM=',A,2I3,':'/4X, - 1 'NTOTER,NPOSER,ISGNER,IETYP,IERROR=',4I4/(4X,10I4)) - -C WRITE(6,287) NREC,IETYP,NUMTST(NREC),NUMST,NUNIQ,BUFINZ -C 287 FORMAT(/'...DEBUGGING, NREC,IETYP,NUMTST(NREC),NUMST,NUNIQ,', -C 1 'BUFINZ=',5I4/4X,A) - IFSECV(NUMTST(NREC))=IETYP - IF(IETYP .GT. 0) THEN - NADD=NADD+1 - NUMBAD(NADD+NBAD)=NUMTST(NREC) - BADREC(NADD+NBAD)=TSTREC(NREC) - ELSE - NOKAY=NOKAY+1 - NUMOKA(NOKAY)=NUMTST(NREC) - OKAREC(NOKAY)=TSTREC(NREC) - ENDIF - - ENDDO - - ENDDO - - WRITE(6,301) NOKAY,NADD,NTEST,(ERCSV(NER),NER=1,NERCSV) - 301 FORMAT(//'...RESULTS OF THE SECONDARY VARIABLE ERROR CHECK ARE: ', - 1 'NOKAY=',I4,' AND NADD=',I4,' FOR A TOTAL OF ',I4, - 2 ' RECORDS.'//4X,'ERROR CODES ARE:'/(6X,A)) - WRITE(6,303) - 303 FORMAT(/'...NOTES: NEGATIVE ERROR CODES (EXCEPT DIR/SPD) INDICATE' - 1 ,' SUCCESSFUL RECOVERY FROM MISSING OR ERRONEOUS DATA'/11X - 2 ,'BY SUBSTITUTION FROM PERSISTENCE.'/11X,'A NEGATIVE ERR', - 3 'OR CODE FOR DIR/SPD INDICATES THAT ERROR RECOVERY WILL ', - 4 'BE POSTPONED UNTIL THE DIR/SPD CHECK.'/11X,'MULTIPLE ', - 5 'ERRORS ARE HANDLED AS FOLLOWS:'/13X,'THE FIRST SECONDARY' - 6 ,' ERROR OCCUPIES THE LEFT-MOST DIGIT.'/13X,'THE NEXT ', - 7 'SECONDARY ERROR OCCUPIES THE RIGHT-MOST DIGIT.'/13X, - 8 'THREE OR MORE ERRORS REVERTS TO ERROR CODE=7, ETC.'/13X, - 9 'ERRORS FOR THE DEPTH OF THE CYCLONIC CIRCULATION ARE ', - A 'COUNTED SEPARATELY.'//3X,'OKAY RECORDS ARE:',100X,'ERC'/) - - DO NOK=1,NOKAY - WRITE(6,309) NOK,NUMOKA(NOK),OKAREC(NOK),IFSECV(NUMOKA(NOK)) - 309 FORMAT(3X,I4,'...',I4,'...',A,'...',I3) - ENDDO - IF(NADD .GT. 0) WRITE(6,311) (NBAD+NBA,NUMBAD(NBAD+NBA), - 1 BADREC(NBAD+NBA), - 2 IFSECV(NUMBAD(NBAD+NBA)), - 3 NBA=1,NADD) - 311 FORMAT(/' ADDED BAD RECORDS ARE:',95X,'ERC'/(3X,I4,'...',I4, - 1 '...',A,'...',I3)) - NBAD=NBAD+NADD - - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: WRNING WRITES WARNING MESSAGE ABOUT RECORD MODS -C PRGMMR: S. LORD ORG: NP22 DATE: 1992-02-21 -C -C ABSTRACT: WRITES SIMPLE WARNING MESSAGE. -C -C PROGRAM HISTORY LOG: -C 1992-02-21 S. LORD -C -C USAGE: CALL WRNING(IDSUB) -C INPUT ARGUMENT LIST: -C IDSUB - SUBROUTINE NAME -C -C REMARKS: SEE REMARKS IN CODE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE WRNING(IDSUB) - - CHARACTER*6 IDSUB - - WRITE(6,1) IDSUB - 1 FORMAT(21X,'***********************************************'/ - 1 21X,'***********************************************'/ - 2 21X,'**** ****'/ - 3 21X,'**** WARNING: RECORDS WITH CORRECT FORMAT ****'/ - 4 21X,'**** BUT MISSING OR ERRONEOUS ****'/ - 5 21X,'**** DATA MAY BE MODIFIED BY ****'/ - 6 21X,'**** THIS ROUTINE=',A6,'!!! ****'/ - 7 21X,'**** ****'/ - 8 21X,'**** TYPES OF SUBSTITUTIONS ARE: ****'/ - 9 21X,'**** CLIMATOLOGICAL SUBSTITUTION: C ****'/ - O 21X,'**** RSMC AVERAGING: A ****'/ - 1 21X,'**** PERSISTENCE SUBSTITUTION: P ****'/ - 2 21X,'**** OVERLAP MODIFICATION: O ****'/ - 3 21X,'**** DIRECTION/SPEED SUBSTITUTION: S ****'/ - 4 21X,'**** LATITUDE/LONGITUDE SUBSTITUTION: L ****'/ - 4 21X,'**** SWITCHED PCEN-PENV SUBSTITUTION: Z ****'/ - 8 21X,'**** ****'/ - 6 21X,'***********************************************'/ - 7 21X,'***********************************************') - - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: F1 RECALCULATES LONGITUDES -C PRGMMR: S. LORD ORG: NP22 DATE: 1993-05-01 -C -C ABSTRACT: SEE COMMENTS IN PROGRAM. ORIGINALLY WRITTEN BY C. J. NEWMANN -C -C PROGRAM HISTORY LOG: -C 1993-05-01 S. LORD INSTALLED PROGRAM -C -C USAGE: CALL F1(ALON) -C INPUT ARGUMENT LIST: SEE COMMENTS IN PROGRAM -C -C OUTPUT ARGUMENT LIST: -C SEE COMMENTS IN PROGRAM -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - FUNCTION F1(ALON) - -C CONVERT FROM E LONGITUDE TO THOSE ACCEPTABLE IN AL TAYLOR ROUTINES - - IF(ALON.GT.180.)F1=360.-ALON - IF(ALON.LE.180.)F1=-ALON - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: F2 CALCULATES DATES -C PRGMMR: D. A. KEYSER ORG: NP22 DATE: 1998-06-05 -C -C ABSTRACT: SEE COMMENTS IN PROGRAM. ORIGINALLY WRITTEN BY C. J. -C NEWMANN -C -C PROGRAM HISTORY LOG: -C 1993-05-01 S. LORD INSTALLED PROGRAM -C 1998-06-05 D. A. KEYSER - Y2K, FORTRAN 90 COMPLIANT -C -C USAGE: CALL F2(IDATIM) -C INPUT ARGUMENT LIST: -C IDATIM - 10-DIGIT DATE IN FORM YYYYDDMMHH -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - FUNCTION F2(IDATIM) - -C OBTAIN JULIAN DAY NUMBER -C 0000UTC ON 1 JAN IS SET TO DAY NUMBER 0 AND 1800UTC ON 31 DEC IS SET -C TO DAY NUMBER 364.75. LEAP YEARS ARE IGNORED. - - CHARACTER*10 ALFA - WRITE(ALFA,'(I10)')IDATIM - READ(ALFA,'(I4,3I2)')KYR,MO,KDA,KHR - MON=MO - IF(MON.EQ.13)MON=1 - DANBR=3055*(MON+2)/100-(MON+10)/13*2-91+KDA - F2=DANBR-1.+REAL(KHR/6)*0.25 - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: SLDATE RETRIEVES DATE FROM SYSTEM AND DATE FILE -C PRGMMR: D. A. KEYSER ORG: NP22 DATE: 1998-06-05 -C -C ABSTRACT: RETRIEVES DATE FROM SYSTEM AND FROM A DATE FILE, AND -C OBTAINS THE DIFFERENCE BETWEEN THE TWO. CONSTRUCTS DATE -C IN FORM YYYYMMDD AND HHMM. -C -C PROGRAM HISTORY LOG: -C 1991-06-06 S. J. LORD -C 1998-06-05 D. A. KEYSER - Y2K/F90 COMPLIANCE -C -C USAGE: CALL SLDATE(IUNTDT,IDATEZ,IUTCZ,IOFFTM) -C INPUT ARGUMENT LIST: -C IUNTDT - UNIT NUMBER FOR FILE CONTAINING RUN DATE -C -C OUTPUT ARGUMENT LIST: -C IDATEZ - DATE IN FORM YYYYMMDD -C IUTCZ - DATE IN FORM HHMM -C IOFFTM - OFFSET (HOURS *100) BETWEEN SYSTEM DATE AND -C - FILE DATE (SYSTEM DATE MINUS FILE DATE) -C -C INPUT FILES: -C UNIT "IUNTDT" - FILE CONTAINING RUN DATE IN I4,3I2 FORMAT -C - ('YYYYMMDDHH') -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE SLDATE(IUNTDT,IDATEZ,IUTCZ,IOFFTM) - - CHARACTER USRDAT*10 - - SAVE - - DIMENSION IDAT(8),JDAT(6),RINC(5) - - EQUIVALENCE (IDAT(1),JW3YR),(IDAT(2),JW3MO),(IDAT(3),JW3DA), - 2 (IDAT(5),JW3HR),(IDAT(6),JW3MIN),(IDAT(7),JW3SEC) - - READ(IUNTDT,1) USRDAT - 1 FORMAT(A10) - WRITE(6,3) USRDAT - 3 FORMAT(/'...',A10,'...') - -C OBTAIN CURRENT SYSTEM DATE - IDAT (UTC) - - CALL W3UTCDAT(IDAT) - -C DECODE THE DATE LABEL INTO JDAT (UTC) - - READ(USRDAT(1: 4),'(I4)') JDAT(1) - READ(USRDAT(5: 6),'(I2)') JDAT(2) - READ(USRDAT(7: 8),'(I2)') JDAT(3) - READ(USRDAT(9:10),'(I2)') JDAT(5) - -C THIS IS THE TIME ZONE OFFSET (SAME AS FOR IDAT) - JDAT(4) = IDAT(4) - - JDAT(6) = 0 - -C COMBINE YEAR, MONTH, DAY, HOUR, MINUTE TO FORM YYYYMMDD - - IDATEZ=JDAT(1)*10000+JDAT(2)*100+JDAT(3) - IUTCZ =JDAT(5)*100+JDAT(6) - -C OBTAIN TIME DIFFERENCE (CURRENT TIME - LABEL TIME) IN HOURS * 100 - - CALL W3DIFDAT(IDAT,(/JDAT(1),JDAT(2),JDAT(3),JDAT(4),JDAT(5), - $ JDAT(6),0,0/),2,RINC) - IOFFTM=NINT(RINC(2)*100.) - - WRITE(6,5) JW3YR,JW3MO,JW3DA,JW3HR,JW3MIN,JW3SEC,IOFFTM - 5 FORMAT(/'...CURRENT DATE/TIME FROM W3UTCDAT CALL IS:'/'JW3YR=',I5, - 1 ' JW3MO=',I3,' JW3DA=',I3,' JW3HR=',I5,' JW3MIN=',I5, - 2 ' JW3SEC=',I5,' OFFTIM=',I8) - - WRITE(6,13) IDATEZ,IUTCZ - 13 FORMAT('...IN SLDATE, IDATEZ,IUTCZ=',I10,2X,I4) - - RETURN - -C----------------------------------------------------------------------- - ENTRY SLDTCK(IUNTDT) - - REWIND IUNTDT - WRITE(6,21) IUNTDT - 21 FORMAT('...WRITING USRDAT TO UNIT',I3) - WRITE(IUNTDT,1) USRDAT - - RETURN - -C----------------------------------------------------------------------- - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: FIXSLM MODIFIES SEA-LAND MASK -C PRGMMR: S. J. LORD ORG: NP22 DATE: 1991-06-06 -C -C ABSTRACT: MODIFIES NCEP T126 GAUSSIAN GRID SEA-LAND MASK. CONVERTS -C SOME SMALL ISLANDS TO OCEAN POINTS. PROGRAM IS DEPENDENT -C ON MODEL RESOLUTION. -C -C PROGRAM HISTORY LOG: -C 1991-06-06 S. J. LORD -C 1992-04-08 S. J. LORD CONVERTED TO T126 FROM T80 -C -C USAGE: CALL FIXSLM(LONF,LATG2,RLON,RLAT,SLMASK) -C INPUT ARGUMENT LIST: -C LONF - NUMBER OF LONGITUDINAL POINTS, FIRST INDEX OF SLMASK -C LATG2 - NUMBER OF LATITUDINAL POINTS, SECOND INDEX OF SLMASK -C RLON - LONGITUDES -C RLAT - LATITUDES -C SLMASK - T162 SEA-LAND MASK ON GAUSSIAN GRID -C -C OUTPUT ARGUMENT LIST: -C SLMASK - MODIFIED T162 SEA-LAND MASK ON GAUSSIAN GRID -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE FIXSLM(LONF,LATG2,RLON,RLAT,SLMASK) - - PARAMETER (MAXSLM=35) - - SAVE - - DIMENSION RLAT(LATG2),RLON(LONF),SLMASK(LONF,LATG2),IPT(MAXSLM), - 1 JPT(MAXSLM) - - DATA NOCEAN/21/, - -C INDONESIAN ARCHIPELAGO,NEW CALEDONIA - - 1 IPT/133,135,129,177, - -C YUCATAN - - 2 290,291,292,289,290,291,289,290,291, - -C CUBA - - 3 299,300,301,302,303,303,304,305,14*0.0/, - -C INDONESIAN ARCHIPELAGO,NEW CALEDONIA - - 1 JPT/106,105,106,118, - -C YUCATAN - - 2 3*73,3*74,3*75, - -C CUBA - - 3 3*72,2*73,3*74,14*0.0/ - -C WRITE(6,7) -C 7 FORMAT('...CONVERTING LAND TO OCEAN, NPT,IPT,RLON,JPT,RLAT=') - DO NPT=1,NOCEAN - SLMASK(IPT(NPT),JPT(NPT))=0.0 -C WRITE(6,9) NPT,IPT(NPT),RLON(IPT(NPT)),JPT(NPT),RLAT(JPT(NPT)) -C 9 FORMAT(4X,2I5,F10.3,I5,F10.3) - ENDDO - - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: GAULAT CALCULATES GAUSSIAN GRID LATITUDES -C PRGMMR: S. J. LORD ORG: NP22 DATE: 1991-06-06 -C -C ABSTRACT: CALCULATES GAUSSIAN GRID LATITUDES -C -C PROGRAM HISTORY LOG: -C 1991-06-06 S. J. LORD - COPIED FROM KANAMITSU LIBRARY -C -C USAGE: CALL PGM-NAME(INARG1, INARG2, WRKARG, OUTARG1, ... ) -C INPUT ARGUMENT LIST: -C INARG1 - GENERIC DESCRIPTION, INCLUDING CONTENT, UNITS, -C INARG2 - TYPE. EXPLAIN FUNCTION IF CONTROL VARIABLE. -C -C OUTPUT ARGUMENT LIST: (INCLUDING WORK ARRAYS) -C WRKARG - GENERIC DESCRIPTION, ETC., AS ABOVE. -C OUTARG1 - EXPLAIN COMPLETELY IF ERROR RETURN -C ERRFLAG - EVEN IF MANY LINES ARE NEEDED -C -C INPUT FILES: (DELETE IF NO INPUT FILES IN SUBPROGRAM) -C DDNAME1 - GENERIC NAME & CONTENT -C -C OUTPUT FILES: (DELETE IF NO OUTPUT FILES IN SUBPROGRAM) -C DDNAME2 - GENERIC NAME & CONTENT AS ABOVE -C FT06F001 - INCLUDE IF ANY PRINTOUT -C -C REMARKS: LIST CAVEATS, OTHER HELPFUL HINTS OR INFORMATION -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE GAULAT(GAUL,K) - - IMPLICIT REAL(8) (A-H,O-Z) - DIMENSION A(500) - REAL GAUL(1) - - SAVE - - ESP=1.D-14 - C=(1.D0-(2.D0/3.14159265358979D0)**2)*0.25D0 - FK=K - KK=K/2 - CALL BSSLZ1(A,KK) - DO IS=1,KK - XZ=COS(A(IS)/SQRT((FK+0.5D0)**2+C)) - ITER=0 - 10 PKM2=1.D0 - PKM1=XZ - ITER=ITER+1 - IF(ITER.GT.10) GO TO 70 - DO N=2,K - FN=N - PK=((2.D0*FN-1.D0)*XZ*PKM1-(FN-1.D0)*PKM2)/FN - PKM2=PKM1 - PKM1=PK - ENDDO - PKM1=PKM2 - PKMRK=(FK*(PKM1-XZ*PK))/(1.D0-XZ**2) - SP=PK/PKMRK - XZ=XZ-SP - AVSP=ABS(SP) - IF(AVSP.GT.ESP) GO TO 10 - A(IS)=XZ - ENDDO - IF(K.EQ.KK*2) GO TO 50 - A(KK+1)=0.D0 - PK=2.D0/FK**2 - DO N=2,K,2 - FN=N - PK=PK*FN**2/(FN-1.D0)**2 - ENDDO - 50 CONTINUE - DO N=1,KK - L=K+1-N - A(L)=-A(N) - ENDDO - - RADI=180./(4.*ATAN(1.)) - GAUL(1:K)=ACOS(A(1:K))*RADI -C PRINT *,'GAUSSIAN LAT (DEG) FOR JMAX=',K -C PRINT *,(GAUL(N),N=1,K) - - RETURN - 70 WRITE(6,6000) - 6000 FORMAT(//5X,14HERROR IN GAUAW//) - CALL ABORT1(' GAULAT',6000) - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: BSSLZ1 CALCULATES BESSEL FUNCTIONS -C PRGMMR: S. J. LORD ORG: NP22 DATE: 1991-06-06 -C -C ABSTRACT: CALCULATES BESSEL FUNCTIONS -C -C PROGRAM HISTORY LOG: -C 1991-06-06 S. J. LORD - COPIED FROM KANAMITSU LIBRARY -C -C USAGE: CALL PGM-NAME(INARG1, INARG2, WRKARG, OUTARG1, ... ) -C INPUT ARGUMENT LIST: -C INARG1 - GENERIC DESCRIPTION, INCLUDING CONTENT, UNITS, -C INARG2 - TYPE. EXPLAIN FUNCTION IF CONTROL VARIABLE. -C -C OUTPUT ARGUMENT LIST: (INCLUDING WORK ARRAYS) -C WRKARG - GENERIC DESCRIPTION, ETC., AS ABOVE. -C OUTARG1 - EXPLAIN COMPLETELY IF ERROR RETURN -C ERRFLAG - EVEN IF MANY LINES ARE NEEDED -C -C INPUT FILES: (DELETE IF NO INPUT FILES IN SUBPROGRAM) -C DDNAME1 - GENERIC NAME & CONTENT -C -C OUTPUT FILES: (DELETE IF NO OUTPUT FILES IN SUBPROGRAM) -C DDNAME2 - GENERIC NAME & CONTENT AS ABOVE -C FT06F001 - INCLUDE IF ANY PRINTOUT -C -C REMARKS: LIST CAVEATS, OTHER HELPFUL HINTS OR INFORMATION -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE BSSLZ1(BES,N) - - IMPLICIT REAL(8) (A-H,O-Z) - DIMENSION BES(N) - DIMENSION BZ(50) - - DATA PI/3.14159265358979D0/ - DATA BZ / 2.4048255577D0, 5.5200781103D0, - $ 8.6537279129D0,11.7915344391D0,14.9309177086D0,18.0710639679D0, - $ 21.2116366299D0,24.3524715308D0,27.4934791320D0,30.6346064684D0, - $ 33.7758202136D0,36.9170983537D0,40.0584257646D0,43.1997917132D0, - $ 46.3411883717D0,49.4826098974D0,52.6240518411D0,55.7655107550D0, - $ 58.9069839261D0,62.0484691902D0,65.1899648002D0,68.3314693299D0, - $ 71.4729816036D0,74.6145006437D0,77.7560256304D0,80.8975558711D0, - $ 84.0390907769D0,87.1806298436D0,90.3221726372D0,93.4637187819D0, - $ 96.6052679510D0,99.7468198587D0,102.888374254D0,106.029930916D0, - $ 109.171489649D0,112.313050280D0,115.454612653D0,118.596176630D0, - $ 121.737742088D0,124.879308913D0,128.020877005D0,131.162446275D0, - $ 134.304016638D0,137.445588020D0,140.587160352D0,143.728733573D0, - $ 146.870307625D0,150.011882457D0,153.153458019D0,156.295034268D0/ - NN=N - IF(N.LE.50) GO TO 12 - BES(50)=BZ(50) - BES(51:N)=BES(50:N-1)+PI - NN=49 - 12 CONTINUE - BES(1:NN)=BZ(1:NN) - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: TRKSUB DETERMINES OBS. TROP. CYCLONE TRACKS -C PRGMMR: S. J. LORD ORG: NP22 DATE: 1991-06-06 -C -C ABSTRACT: CONTAINS VARIOUS ENTRY POINTS TO DETERMINE TROPICAL -C CYCLONE TRACKS, CALCULATE STORM RELATIVE COORDINATE, DETERMINES -C FIRST OCCURRENCE OF A PARTICULAR STORM. -C -C PROGRAM HISTORY LOG: -C 1991-06-06 S. J. LORD -C -C USAGE: CALL TRKSUB(IOVITL,IOPTZ,IDATTK,DAY0,DAYMN,DAYMX,DAYOFF, -C 1 STMDR0,STMSP0,STLAT0,STLON0,IERSET, -C 3 STLATP,STLONP,STDIRP,STSPDP,STDAYP, -C 4 STRMXP,STPCNP,STPENP,STVMXP,KSTPZ, -C 5 STDPTP,STMNTK) -C CALL SETTRK(IOVITL,IOPTZ,IDATTK,DAY0,DAYMN,DAYMX,DAYOFF, -C 1 STMDR0,STMSP0,STLAT0,STLON0,STMNTK,IERSET) -C INPUT ARGUMENT LIST: -C DAY0 - FRACTIONAL NUMBER OF DAYS SINCE 12/31/1899 -C DAYMX - FRACTIONAL NUMBER OF DAYS SINCE 12/31/1899 (MAX) -C DAYMN - FRACTIONAL NUMBER OF DAYS SINCE 12/31/1899 (MIN) -C -C OUTPUT ARGUMENT LIST: (INCLUDING WORK ARRAYS) -C WRKARG - GENERIC DESCRIPTION, ETC., AS ABOVE. -C OUTARG1 - EXPLAIN COMPLETELY IF ERROR RETURN -C ERRFLAG - EVEN IF MANY LINES ARE NEEDED -C -C INPUT FILES: (DELETE IF NO INPUT FILES IN SUBPROGRAM) -C DDNAME1 - GENERIC NAME & CONTENT -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C -C REMARKS: LIST CAVEATS, OTHER HELPFUL HINTS OR INFORMATION -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE TRKSUB(IOVITL,IOPTZ,IDATTK,DAY0,DAYMN,DAYMX,DAYOFF, - 1 STMDR0,STMSP0,STLAT0,STLON0,IERSET,STLATP, - 2 STLONP,STDIRP,STSPDP,STDAYP,STRMXP,STPCNP, - 3 STPENP,STVMXP,KSTPZ,STDPTP,STMNTK) - - PARAMETER (MAXSTM=70) - PARAMETER (NSTM=MAXSTM,NSTM1=NSTM+1) - PARAMETER (NPRVMX=61) - - LOGICAL NOMIN,NOMAX,EXTRPB,EXTRPF - CHARACTER STMNTK*(*),STDPTP*1 - - SAVE - - DIMENSION STDPTP(-NPRVMX:-1) - - DIMENSION RINC(5) - - CHARACTER STMNAM*9,STMID*3,RSMC*4 - - LOGICAL FSTFLG - - DIMENSION STMNAM(MAXSTM),STMLAT(MAXSTM),STMLON(MAXSTM), - 1 STMDIR(MAXSTM),STMSPD(MAXSTM),IDATE(MAXSTM), - 2 IUTC(MAXSTM),RMAX(MAXSTM),PENV(MAXSTM),PCEN(MAXSTM), - 3 PTOP(MAXSTM),RSMC(MAXSTM),RMW(MAXSTM),VMAX(MAXSTM), - 4 R15NW(MAXSTM),R15NE(MAXSTM),R15SE(MAXSTM),R15SW(MAXSTM), - 5 STMID(MAXSTM),FSTFLG(MAXSTM) - - PARAMETER (MAXTPC= 3) - - CHARACTER SHALO*1,MEDIUM*1,DEEP*1,STMTPC*1,EXE*1 - - DIMENSION STMTOP(0:MAXTPC) - - DIMENSION STMTPC(0:MAXTPC) - - EQUIVALENCE (STMTPC(0), EXE),(STMTPC(1),SHALO),(STMTPC(2),MEDIUM), - 1 (STMTPC(3),DEEP) - - DIMENSION TRKLTZ(0:NSTM1),TRKLNZ(0:NSTM1), - 1 TRKDRZ(0:NSTM1),TRKSPZ(0:NSTM1), - 2 TRKRMX(0:NSTM1),TRKPCN(0:NSTM1), - 3 TRKPEN(0:NSTM1),TRKVMX(0:NSTM1), - 4 TRKDPT(0:NSTM1) - - DIMENSION STMDAY(0:NSTM1),SRTDAY(NSTM),IDASRT(0:NSTM1), - 1 SRTLAT(NSTM),SRTLON(NSTM),SRTDIR(NSTM),SRTSPD(NSTM), - 2 ISRTDA(NSTM),ISRTUT(NSTM),SRTRMX(NSTM),SRTPCN(NSTM), - 3 SRTPEN(NSTM),SRTVMX(NSTM),SRTDPT(NSTM) - - DIMENSION STLATP(-NPRVMX:-1),STLONP(-NPRVMX:-1), - 1 STDIRP(-NPRVMX:-1),STSPDP(-NPRVMX:-1), - 1 STDAYP(-NPRVMX: 0),STRMXP(-NPRVMX:-1), - 1 STPCNP(-NPRVMX:-1),STPENP(-NPRVMX:-1), - 2 STVMXP(-NPRVMX:-1) - - EQUIVALENCE (TRKLTZ(1),STMLAT(1)),(TRKLNZ(1),STMLON(1)), - 1 (TRKDRZ(1),STMDIR(1)),(TRKSPZ(1),STMSPD(1)), - 2 (TRKRMX(1),RMAX (1)),(TRKPCN(1),PCEN (1)), - 3 (TRKPEN(1),PENV (1)),(TRKVMX(1),VMAX (1)), - 4 (TRKDPT(1),PTOP (1)) - - DATA SHALO/'S'/,MEDIUM/'M'/,DEEP/'D'/,EXE/'X'/, - 1 STMTOP/-99.0,700.,400.,200./ - -C FIVMIN IS FIVE MINUTES IN UNITS OF FRACTIONAL DAYS -C FACSPD IS CONVERSION FACTOR FOR R(DEG LAT)=V(M/S)*T(FRAC DAY)* - - DATA IPRNT/0/,FIVMIN/3.4722E-3/,FACSPD/0.77719/ - -C----------------------------------------------------------------------- - - ENTRY SETTRK(IOVITL,IOPTZ,IDATTK,DAY0,DAYMN,DAYMX,DAYOFF, - 1 STMDR0,STMSP0,STLAT0,STLON0,STMNTK,IERSET) - - IERSET=0 - IOPT=IOPTZ - IDTREQ=IDATTK - IF(IOPT .EQ. 5) THEN - STMID (1)=STMNTK(1:3) - ELSE IF(IOPT .EQ. 6) THEN - STMNAM(1)=STMNTK(1:9) - ELSE - WRITE(6,1) IOPT - 1 FORMAT(/'******ILLEGAL OPTION IN SETTRK=',I4) - IERSET=1 - RETURN - ENDIF - - WRITE(6,6) IOPT,STMNTK,DAY0,DAYMN,DAYMX,IDTREQ,IHRREQ - 6 FORMAT(/'...ENTERING SETTRK, WITH IOPT=',I2,'. LOOKING FOR ALL ', - 1 'FIXES FOR ',A,' WITH CENTRAL TIME=',F12.2,/4X,' MIN/MAX', - 2 ' TIMES=',2F12.2,' AND REQUESTED DATE/TIME=',2I10) - - CALL NEWVIT(IOVITL,IPRNT,IOPT,IERVIT,MAXSTM,KSTORM,IDTREQ,IHRREQ, - 1 IHRWIN,IDATE,IUTC,STMLAT,STMLON,STMDIR,STMSPD, - 2 PCEN,PENV,RMAX,VMAX,RMW,R15NE,R15SE,R15SW,R15NW, - 3 PTOP,FSTFLG,STMNAM,STMID,RSMC) - -C CONVERT FIX TIMES TO FLOATING POINT JULIAN DAY - - DO KST=1,KSTORM - CALL ZTIME(IDATE(KST),IUTC(KST),IYR,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/), - $ 1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,STMDAY(KST)) - STMDAY(KST)=STMDAY(KST)+DAYOFF - -c WRITE(6,16) IDATE(KST),IUTC(KST),IYR,IMO,IDA,IHR,IMIN,JDY, -c 1 STMDAY(KST) -c 16 FORMAT('...STORM FIX TIMES ARE: IDATE,IUTC,IYR,IMO,IDA,IHR,IMIN,', -c 1 'JDY,STMDAY'/4X,8I8,F15.5) - - ENDDO - - CALL SORTRL(STMDAY(1:KSTORM),IDASRT(1:KSTORM),KSTORM) - -c WRITE(6,26) (STMDAY(KST),IDASRT(KST),KST=1,KSTORM) -c 26 FORMAT(/'...SORTED STORM DAYS AND INDEX ARE:'/(5X,F15.5,I6)) - -C PICK OUT TIMES AND LOCATIONS FROM SORTED LIST OF STORM DAYS - - NOMIN=.TRUE. - NOMAX=.TRUE. - EXTRPB=.FALSE. - EXTRPF=.FALSE. - KSRTMN=-1 - KSRTMX=-1 - - DO KSRT=1,KSTORM - - IF(STMDAY(KSRT) .GT. DAYMN .AND. NOMIN) THEN - NOMIN=.FALSE. - KSRTMN=KSRT-1 - ENDIF - - IF(STMDAY(KSRT) .GT. DAYMX .AND. NOMAX) THEN - NOMAX=.FALSE. - KSRTMX=KSRT - ENDIF - - ENDDO - - IF(KSRTMN .LE. 0) THEN - -C WE HAVENT'T BEEN ABLE TO FIND A STMDAY THAT IS LESS THAN 8 HOURS -C EARLIER THAN THE TIME WINDOW. EITHER THIS IS THE FIRST TIME -C THIS STORM HAS BEEN RUN OR THERE MAY BE AN ERROR. IN EITHER -C CASE, WE ALLOW EXTRAPOLATION OF THE OBSERVED MOTION BACK -C IN TIME, BUT SET AN ERROR FLAG. THE SAME METHOD IS -C USED FOR THE LAST RUN OF A PARTICULAR STORM. - - DT=STMDAY(1)-DAYMN - IF(DT .LE. 0.333333) THEN - WRITE(6,41) KSTORM,KSRT,DAYMN,(STMDAY(KST),KST=1,KSTORM) - 41 FORMAT(/'######CANNOT FIND STORM RECORDS LESS THAN 8 HOURS ', - 1 'BEFORE WINDOW MINIMUM.'/7X,'THIS IS THE FIRST RECORD ', - 2 'FOR THIS STORM OR THERE MAY BE AN ERROR. KSTORM,KSRT,', - 3 'DAYMN,STMDAY=',2I4,F10.3/(5X,10F12.3)) - IERSET=41 - ENDIF - - EXTRPB=.TRUE. - KSRTMN=0 - ISRT=IDASRT(1) - IDASRT(KSRTMN)=0 - STMDAY(KSRTMN)=DAYMN - TRKDRZ(KSRTMN)=STMDIR(ISRT) - TRKSPZ(KSRTMN)=STMSPD(ISRT) - CALL DS2UV(USTM,VSTM,STMDIR(ISRT),STMSPD(ISRT)) - TRKLTZ(KSRTMN)=STMLAT(ISRT)-VSTM*DT*FACSPD - TRKLNZ(KSRTMN)=STMLON(ISRT)-USTM*DT*FACSPD/COSD(STMLAT(ISRT)) - TRKRMX(KSRTMN)=RMAX(ISRT) - TRKPCN(KSRTMN)=PCEN(ISRT) - TRKPEN(KSRTMN)=PENV(ISRT) - TRKVMX(KSRTMN)=VMAX(ISRT) - TRKDPT(KSRTMN)=PTOP(ISRT) - WRITE(6,39) ISRT,KSRTMN,STMDAY(KSRTMN),TRKDRZ(KSRTMN), - 1 TRKSPZ(KSRTMN),USTM,VSTM,DT,TRKLTZ(KSRTMN), - 2 TRKLNZ(KSRTMN),STMLAT(ISRT),STMLON(ISRT) - 39 FORMAT(/'...EXTRAPOLATING FIX BACKWARDS IN TIME: ISRT,KSRTMN,', - 1 '(STMDAY,TRKDRZ,TRKSPZ(KSRTMN)),USTM,VSTM,DT,'/41X, - 2 '(TRKLTZ,TRKLNZ(KSRTMN)),(STMLAT,STMLON(ISRT))='/40X, - 3 2I3,6F12.3/43X,4F12.3) - ENDIF - - IF(KSRTMX .LE. 0) THEN - DT=DAYMX-STMDAY(KSTORM) - IF(DT .LE. 0.333333) THEN - WRITE(6,51) KSTORM,KSRT,DAYMX,(STMDAY(KST),KST=1,KSTORM) - 51 FORMAT(/'######CANNOT FIND STORM RECORDS MORE THAN 8 HOURS ', - 1 'AFTER WINDOW MAXIMUM.'/7X,'THIS IS THE LAST RECORD ', - 2 'FOR THIS STORM OR THERE MAY BE AN ERROR. KSTORM,KSRT,', - 3 'DAYMX,STMDAY=',2I4,F10.3/(5X,10F12.3)) - IERSET=51 - ENDIF - - EXTRPF=.TRUE. - KSRTMX=KSTORM+1 - ISRT=IDASRT(KSTORM) - IDASRT(KSRTMX)=KSTORM+1 - STMDAY(KSRTMX)=DAYMX - TRKDRZ(KSRTMX)=STMDIR(ISRT) - TRKSPZ(KSRTMX)=STMSPD(ISRT) - CALL DS2UV(USTM,VSTM,TRKDRZ(ISRT),TRKSPZ(ISRT)) - TRKLTZ(KSRTMX)=STMLAT(ISRT)+VSTM*DT*FACSPD - TRKLNZ(KSRTMX)=STMLON(ISRT)+USTM*DT*FACSPD/COSD(STMLAT(ISRT)) - TRKRMX(KSRTMX)=RMAX(ISRT) - TRKPCN(KSRTMX)=PCEN(ISRT) - TRKPEN(KSRTMX)=PENV(ISRT) - TRKVMX(KSRTMX)=VMAX(ISRT) - TRKDPT(KSRTMX)=PTOP(ISRT) - WRITE(6,49) ISRT,STMDAY(KSRTMX),TRKDRZ(KSRTMX),TRKSPZ(KSRTMX), - 1 USTM,VSTM,DT,TRKLTZ(KSRTMX),TRKLNZ(KSRTMX), - 2 STMLAT(ISRT),STMLON(ISRT) - 49 FORMAT(/'...EXTRAPOLATING FIX FORWARDS IN TIME: ISRT,(STMDAY,', - 1 'TRKDIR,TRKSPD(KSRTMX)),USTM,VSTM,DT,'/41X,'(TRKLTZ,', - 2 'TRKLNZ(KSRTMX)),(STMLAT,STMLON(ISRT))='/40X,I3,6F12.3/ - 3 43X,4F12.3) - - ENDIF - - KK=1 - KST0=-1 - TIMMIN=1.E10 - -C PUT ALL FIXES THAT DEFINE THE TIME WINDOW INTO ARRAYS SORTED -C BY TIME. FIRST, ELIMINATE RECORDS WITH DUPLICATE TIMES. -C OUR ARBITRARY CONVENTION IS TO KEEP THE LATEST RECORD. ANY -C FIX TIME WITHIN 5 MINUTES OF ITS PREDECESSOR IN THE SORTED -C LIST IS CONSIDERED DUPLICATE. - - DO KST=KSRTMN,KSRTMX - IF(KST .GT. KSRTMN) THEN - IF(STMDAY(KST)-SRTDAY(KK) .LT. FIVMIN) THEN - WRITE(6,53) KST,KK,STMDAY(KST),SRTDAY(KK) - 53 FORMAT(/'...TIME SORTED FIX RECORDS SHOW A DUPLICATE, KST,KK,', - 1 'STMDAY(KST),SRTDAY(KK)=',2I5,2F12.3) - ELSE - KK=KK+1 - ENDIF - ENDIF - -C STORE SORTED LAT/LON, DIRECTION, SPEED FOR FUTURE USE. - - SRTLAT(KK)=TRKLTZ(IDASRT(KST)) - SRTLON(KK)=TRKLNZ(IDASRT(KST)) - SRTDIR(KK)=TRKDRZ(IDASRT(KST)) - SRTSPD(KK)=TRKSPZ(IDASRT(KST)) - SRTDAY(KK)=STMDAY(KST) - SRTRMX(KK)=TRKRMX(IDASRT(KST)) - SRTPCN(KK)=TRKPCN(IDASRT(KST)) - SRTPEN(KK)=TRKPEN(IDASRT(KST)) - SRTVMX(KK)=TRKVMX(IDASRT(KST)) - SRTDPT(KK)=TRKDPT(IDASRT(KST)) - -c fixit?? - to avoid subscript zero warning on next two lines, I did -c the following .... -cdak ISRTDA(KK)=IDATE(IDASRT(KST)) -cdak ISRTUT(KK)=IUTC (IDASRT(KST)) - if(IDASRT(KST).ne.0) then - ISRTDA(KK)=IDATE(IDASRT(KST)) - ISRTUT(KK)=IUTC (IDASRT(KST)) - else - ISRTDA(KK)=0 - ISRTUT(KK)=0 - end if - - IF(ABS(SRTDAY(KK)-DAY0) .LT. TIMMIN) THEN - IF(ABS(SRTDAY(KK)-DAY0) .LT. FIVMIN) KST0=KK - KSTZ=KK - TIMMIN=ABS(SRTDAY(KK)-DAY0) - ENDIF - ENDDO - - KSTMX=KK - -C ZERO OUT EXTRAPOLATED DATE AND TIME AS A REMINDER - - IF(EXTRPF) THEN - ISRTDA(KSTMX)=0 - ISRTUT(KSTMX)=0 - ENDIF - - IF(EXTRPB) THEN - ISRTDA(1)=0 - ISRTUT(1)=0 - ENDIF - - IF(KSTZ .EQ. KSTMX .AND. .NOT. (EXTRPB .OR. EXTRPF)) THEN - WRITE(6,61) KSTZ,KSTMX,(SRTDAY(KST),KST=1,KSTMX) - 61 FORMAT(/'******THE REFERENCE STORM INDEX IS THE MAXIMUM ALLOWED ', - 1 'A PROBABLE ERROR HAS OCCURRED'/8X,'KSTZ,KSTMX,SRTDAY=', - 2 2I5/(5X,10F12.3)) - CALL ABORT1(' SETTRK',61) - ENDIF - - IF(KST0 .LE. 0) THEN - WRITE(6,72) DAY0,KST0,(SRTDAY(KST),KST=1,KSTMX) - 72 FORMAT(/'******THERE IS NO FIX AT THE ANALYSIS TIME, AN ', - 1 'INTERPOLATED POSITION WILL BE CALCULATED'/5X,'DAY0,', - 2 'KST0,SRTDAY=',F12.3,I6/(5X,10F12.3)) - IF(DAY0-SRTDAY(KSTZ) .GT. 0.0) THEN - RATIO=(DAY0-SRTDAY(KSTZ))/(SRTDAY(KSTZ+1)-SRTDAY(KSTZ)) - STLAT0=SRTLAT(KSTZ)+(SRTLAT(KSTZ+1)-SRTLAT(KSTZ))*RATIO - STLON0=SRTLON(KSTZ)+(SRTLON(KSTZ+1)-SRTLON(KSTZ))*RATIO - STMDR0=SRTDIR(KSTZ)+(SRTDIR(KSTZ+1)-SRTDIR(KSTZ))*RATIO - STMSP0=SRTSPD(KSTZ)+(SRTSPD(KSTZ+1)-SRTSPD(KSTZ))*RATIO - STDAY0=DAY0 - ELSE - RATIO=(DAY0-SRTDAY(KSTZ-1))/(SRTDAY(KSTZ)-SRTDAY(KSTZ-1)) - STLAT0=SRTLAT(KSTZ-1)+(SRTLAT(KSTZ)-SRTLAT(KSTZ-1))*RATIO - STLON0=SRTLON(KSTZ-1)+(SRTLON(KSTZ)-SRTLON(KSTZ-1))*RATIO - STMDR0=SRTDIR(KSTZ-1)+(SRTDIR(KSTZ)-SRTDIR(KSTZ-1))*RATIO - STMSP0=SRTSPD(KSTZ-1)+(SRTSPD(KSTZ)-SRTSPD(KSTZ-1))*RATIO - STDAY0=DAY0 - ENDIF - - ELSE - STLAT0=SRTLAT(KST0) - STLON0=SRTLON(KST0) - STMDR0=SRTDIR(KST0) - STMSP0=SRTSPD(KST0) - STDAY0=SRTDAY(KST0) - ENDIF - - WRITE(6,77) (KSRT,ISRTDA(KSRT),ISRTUT(KSRT), - 1 SRTDAY(KSRT),SRTLAT(KSRT),SRTLON(KSRT), - 2 SRTDIR(KSRT),SRTSPD(KSRT), - 3 SRTPCN(KSRT),SRTPEN(KSRT),SRTRMX(KSRT), - 4 SRTVMX(KSRT),SRTDPT(KSRT),KSRT=1,KSTMX) - 77 FORMAT(/'...FINAL SORTED LIST IS:'/6X,'YYYYMMDD',2X,'HHMM',4X, - 1 'RJDAY',7X,'LAT',7X,'LON',6X,'DIR',7X,'SPEED',4X,' PCEN', - 2 26X,'PENV',6X,'RMAX',5X,'VMAX',4X,'PTOP'/(1X,I3,2X,I8,2X, - 3 I4,8F10.2,2(3X,F5.1))) - - WRITE(6,79) STDAY0,STLAT0,STLON0,STMDR0,STMSP0 - 79 FORMAT(/'...THE REFERENCE TIME, LATITUDE, LONGITUDE, DIRECTION ', - 1 'AND SPEED ARE:',5F12.3) - - WRITE(6,89) - 89 FORMAT(/'...END SETTRK') - - RETURN - -C----------------------------------------------------------------------- - - ENTRY PRVSTM(STLATP,STLONP,STDIRP,STSPDP,STDAYP, - 1 STRMXP,STPCNP,STPENP,STVMXP,STDPTP,KSTPZ) - -C THIS ENTRY IS CURRENTLY SET UP TO RETURN THE TWO PREVIOUS -C SETS OF STORM LAT/LON, DIR/SPD, TIME. FOR CASES IN WHICH -C INSUFFICIENT STORM RECORDS HAVE BEEN FOUND, THE SLOTS ARE -C FILLED WITH -99.0 OR A DASH - -C KSTPZ IS THE NUMBER OF PREVIOUS, NON-EXTRAPOLATED, STORM RECORDS - - KSTPZ=MIN0(MAX0(KSTZ-1,0),NPRVMX) - STLATP(-NPRVMX:-1)=-99.0 - STLONP(-NPRVMX:-1)=-99.0 - STDIRP(-NPRVMX:-1)=-99.0 - STSPDP(-NPRVMX:-1)=-99.0 - STDAYP(-NPRVMX:-1)=-99.0 - STRMXP(-NPRVMX:-1)=-99.0 - STPCNP(-NPRVMX:-1)=-99.0 - STPENP(-NPRVMX:-1)=-99.0 - STVMXP(-NPRVMX:-1)=-99.0 - STDPTP(-NPRVMX:-1)='-' - - DO KSTP=1,KSTPZ - STLATP(-KSTP)=SRTLAT(KSTZ-KSTP) - STLONP(-KSTP)=SRTLON(KSTZ-KSTP) - STDIRP(-KSTP)=SRTDIR(KSTZ-KSTP) - STSPDP(-KSTP)=SRTSPD(KSTZ-KSTP) - STDAYP(-KSTP)=SRTDAY(KSTZ-KSTP) - STRMXP(-KSTP)=SRTRMX(KSTZ-KSTP) - STPCNP(-KSTP)=SRTPCN(KSTZ-KSTP) - STPENP(-KSTP)=SRTPEN(KSTZ-KSTP) - STVMXP(-KSTP)=SRTVMX(KSTZ-KSTP) - -C RECODE PRESSURE STORM DEPTH INTO A CHARACTER - - KTPC=0 - DO KTOP=1,MAXTPC - IF(SRTDPT(KSTZ-KSTP) .EQ. STMTOP(KTOP)) KTPC=KTOP - ENDDO - STDPTP(-KSTP)=STMTPC(KTPC) - - ENDDO - IF(EXTRPB .AND. KSTZ-KSTPZ .LE. 1) KSTPZ=KSTPZ-1 - - IF(KSTPZ .EQ. 0) THEN - WRITE(6,97) - 97 FORMAT(/'...NO STORM RECORDS PRECEEDING THE REFERENCE TIME HAVE ', - 1 'BEEN FOUND BY PRVSTM.') - - ELSE - WRITE(6,98) KSTPZ,NPRVMX,STDAYP(-1) - 98 FORMAT(/'...PRVSTM HAS FOUND',I3,' STORM RECORDS PRECEEDING THE ', - 1 'REFERENCE TIME (MAX ALLOWED=',I2,').'/4X,'THE TIME ', - 2 'CORRESPONDING TO INDEX -1 IS',F12.3,'.') - ENDIF - -C WRITE(6,99) KSTZ,KSTPZ,(STLATP(KK),STLONP(KK),STDIRP(KK), -C 1 STSPDP(KK),STDAYP(KK),STRMXP(KK),STPCNP(KK), -C 2 STPENP(KK),STVMXP(KK),KK=-1,-NPRVMX,-1) -C 99 FORMAT(/'...FROM PRVSTM, KSTZ,KSTPZ,STLATP,STLONP,STDIRP,STSPDP,', -C 1 'STDAYP,STRMXP,STPCNP,STPENP,STVMXP=',2I3/(5X,9F10.2)) - RETURN - -C----------------------------------------------------------------------- - - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: NEWVIT READS TROPICAL CYCLONE VITAL STAT. FILE -C PRGMMR: S. J. LORD ORG: NP22 DATE: 1991-06-06 -C -C ABSTRACT: GENERAL FILE READER FOR TROPICAL CYCLONE VITAL STATISTICS -C FILE. CAN FIND ALL STORMS OF A PARTICULAR NAME OR ID, ALL -C STORMS ON A PARTICULAR DATE/TIME AND VARIOUS COMBINATIONS OF -C THE ABOVE. -C -C PROGRAM HISTORY LOG: -C 1991-06-06 S. J. LORD -C -C USAGE: CALL PGM-NAME(INARG1, INARG2, WRKARG, OUTARG1, ... ) -C INPUT ARGUMENT LIST: -C INARG1 - GENERIC DESCRIPTION, INCLUDING CONTENT, UNITS, -C INARG2 - TYPE. EXPLAIN FUNCTION IF CONTROL VARIABLE. -C -C OUTPUT ARGUMENT LIST: (INCLUDING WORK ARRAYS) -C WRKARG - GENERIC DESCRIPTION, ETC., AS ABOVE. -C OUTARG1 - EXPLAIN COMPLETELY IF ERROR RETURN -C ERRFLAG - EVEN IF MANY LINES ARE NEEDED -C -C INPUT FILES: (DELETE IF NO INPUT FILES IN SUBPROGRAM) -C DDNAME1 - GENERIC NAME & CONTENT -C -C OUTPUT FILES: (DELETE IF NO OUTPUT FILES IN SUBPROGRAM) -C DDNAME2 - GENERIC NAME & CONTENT AS ABOVE -C FT06F001 - INCLUDE IF ANY PRINTOUT -C -C REMARKS: LIST CAVEATS, OTHER HELPFUL HINTS OR INFORMATION -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE NEWVIT(IOVITL,IPRNT,IOPT,IERVIT,MAXSTM,KSTORM,IDTREQ, - 1 IHRREQ,IHRWIN,IDATE,IUTC,STMLAT,STMLON,STMDIR,STMSPD, - 2 PCEN,PENV,RMAX,VMAX,RMW,R15NE,R15SE,R15SW,R15NW, - 3 PTOP,FSTFLG,STMNAM,STMID,RSMC) - - SAVE - - DIMENSION RINC(5) - - CHARACTER STMNAM*9,STMID*3,RSMC*4 - - LOGICAL FSTFLG - - DIMENSION STMNAM(MAXSTM),STMLAT(MAXSTM),STMLON(MAXSTM), - 1 STMDIR(MAXSTM),STMSPD(MAXSTM),IDATE(MAXSTM), - 2 IUTC(MAXSTM),RMAX(MAXSTM),PENV(MAXSTM),PCEN(MAXSTM), - 3 PTOP(MAXSTM),RSMC(MAXSTM),RMW(MAXSTM),VMAX(MAXSTM), - 4 R15NW(MAXSTM),R15NE(MAXSTM),R15SE(MAXSTM),R15SW(MAXSTM), - 5 STMID(MAXSTM),FSTFLG(MAXSTM) - - PARAMETER (MAXCHR=95) - PARAMETER (MAXVIT=15) - PARAMETER (MAXTPC= 3) - - CHARACTER BUFIN*1,RSMCZ*4,STMIDZ*3,STMNMZ*9,FSTFLZ*1,STMDPZ*1, - 1 LATNS*1,LONEW*1,FMTVIT*6,BUFINZ*100,STMREQ*9,RELOCZ*1 - CHARACTER BUFY2K*1 - - DIMENSION IVTVAR(MAXVIT),VITVAR(MAXVIT),VITFAC(MAXVIT), - 1 ISTVAR(MAXVIT),IENVAR(MAXVIT),STMTOP(0:MAXTPC) - - DIMENSION BUFIN(MAXCHR),FMTVIT(MAXVIT) - DIMENSION BUFY2K(MAXCHR) - - EQUIVALENCE (BUFIN(1),RSMCZ),(BUFIN(5),RELOCZ),(BUFIN(6),STMIDZ), - 1 (BUFIN(10),STMNMZ),(BUFIN(19),FSTFLZ), - 2 (BUFIN(37),LATNS),(BUFIN(43),LONEW), - 3 (BUFIN(95),STMDPZ),(BUFIN(1),BUFINZ) - - EQUIVALENCE (IVTVAR(1),IDATEZ),(IVTVAR(2),IUTCZ) - - EQUIVALENCE (VITVAR( 3),STMLTZ),(VITVAR( 4),STMLNZ), - 1 (VITVAR( 5),STMDRZ),(VITVAR( 6),STMSPZ), - 2 (VITVAR( 7),PCENZ), (VITVAR( 8),PENVZ), - 3 (VITVAR( 9),RMAXZ), (VITVAR(10),VMAXZ), - 4 (VITVAR(11),RMWZ), (VITVAR(12),R15NEZ), - 5 (VITVAR(13),R15SEZ),(VITVAR(14),R15SWZ), - 6 (VITVAR(15),R15NWZ) - - DATA VITFAC/2*1.0,2*0.1,1.0,0.1,9*1.0/, - 1 FMTVIT/'(I8.8)','(I4.4)','(I3.3)','(I4.4)',2*'(I3.3)', - 2 3*'(I4.4)','(I2.2)','(I3.3)',4*'(I4.4)'/, - 3 ISTVAR/20,29,34,39,45,49,53,58,63,68,71,75,80,85,90/, - 4 IENVAR/27,32,36,42,47,51,56,61,66,69,73,78,83,88,93/, - 5 STMTOP/-99.0,700.,400.,200./ - -C FIVMIN IS FIVE MINUTES IN UNITS OF FRACTIONAL DAYS - - DATA FIVMIN/3.4722E-3/,IRDERM/20/,NUM/1/ - -C THIS SUBROUTINE READS A GLOBAL VITAL STATISTICS FILE FOR -C TROPICAL CYCLONES. THERE ARE A NUMBER OF OPTIONS (IOPT) -C UNDER WHICH THIS ROUTINE WILL OPERATE: -C 1) FIND ALL STORMS ON A SPECIFIED DATE/TIME (+WINDOW) -C 2) FIND A PARTICULAR STORM NAME ON A SPECIFIED DATE/TIME -C (+WINDOW) -C 3) FIND ALL OCCURRENCES OF A PARTICULAR STORM NAME -C 4) SAME AS OPTION 2, EXCEPT FOR A PARTICULAR STORM ID -C 5) SAME AS OPTION 3, EXCEPT FOR A PARTICULAR STORM ID -C 6) ALL OCCURRENCES OF A PARTICULAR STORM NAME, EVEN -C BEFORE IT HAD A NAME (FIND FIRST OCCURRENCE OF -C STORM NAME, SUBSTITUE STORM ID, REWIND, THEN -C EXECUTE OPTION 5 - -C STORM ID POSITON CONTAINS THE BASIN IDENTIFIER IN THE -C LAST CHARACTER. THESE ABBREVIATIONS ARE: -C NORTH ATLANTIC: L -C EAST PACIFIC: E -C CENTRAL PACIFIC: C -C WEST PACIFIC: W -C AUSTRALIAN: U -C SOUTH INDIAN: S -C SOUTH PACIFIC P -C N ARABIAN SEA A -C BAY OF BENGAL B -C SOUTH CHINA SEA O -C EAST CHINA SEA T - -C CHECK INPUT ARGUMENTS ACCORDING TO OPTION. ALSO DO OVERHEAD -C CHORES IF NECESSARY - - IERVIT=0 - STMREQ=' ' - IYRREQ=-9999 - - IF(IOPT .LE. 2 .OR. IOPT .EQ. 4) THEN - IF(IDTREQ .LE. 0) THEN - WRITE(6,11) IOPT,IDTREQ,IHRREQ,IHRWIN,MAXSTM,STMNAM(1),STMID(1) - 11 FORMAT(/'****** ILLEGAL DATE IN NEWVIT, IOPT,IDTREQ,IHRREQ,', - 1 'IHRWIN,MAXSTM,STMNAM,STMID='/9X,5I10,2X,A9,2X,A3) - IERVIT=10 - ENDIF - - IF(IHRREQ .LT. 0) THEN - WRITE(6,21) IOPT,IDTREQ,IHRREQ,IHRWIN,MAXSTM,STMNAM(1),STMID(1) - 21 FORMAT(/'****** ILLEGAL HOUR IN NEWVIT, IOPT,IDTREQ,IHRREQ,', - 1 'IHRWIN,MAXSTM,STMNAM,STMID='/9X,5I10,2X,A9,2X,A3) - IERVIT=20 - ENDIF - - IF(IHRWIN .LT. 0) THEN - WRITE(6,31) IOPT,IDTREQ,IHRREQ,IHRWIN,MAXSTM,STMNAM(1),STMID(1) - 31 FORMAT(/'****** ILLEGAL WINDOW IN NEWVIT, IOPT,IDTREQ,IHRREQ,', - 1 'IHRWIN,MAXSTM,STMNAM,STMID='/9X,5I10,2X,A9,2X,A3) - IERVIT=30 - -C SET UP PARAMETERS FOR TIME WINDOW - - ELSE IF(IHRWIN .GT. 0) THEN - CALL ZTIME(IDTREQ,IHRREQ,IYRWIN,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYRWIN,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0, - $ 0/),1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,DAY0) - -C NORMAL CASE - - WINDOW=REAL(IHRWIN)/24. - DAYPLS=DAY0+WINDOW+FIVMIN - DAYMNS=DAY0-WINDOW-FIVMIN - ENDIF - ENDIF - - IF(IOPT .EQ. 2 .OR. IOPT .EQ. 3 .OR. IOPT .EQ. 6) THEN - IF(STMNAM(1) .EQ. ' ') THEN - WRITE(6,41) IOPT,IDTREQ,IHRREQ,IHRWIN,MAXSTM,STMNAM(1),STMID(1) - 41 FORMAT(/'****** ILLEGAL STMNAM IN NEWVIT, IOPT,IDTREQ,IHRREQ,', - 1 'IHRWIN,MAXSTM,STMNAM,STMID='/9X,5I10,2X,A9,2X,A3) - IERVIT=40 - - ELSE - STMREQ=STMNAM(1) - ENDIF - - ELSE IF(IOPT .EQ. 4 .OR. IOPT .EQ. 5) THEN - IF(STMID(1) .EQ. ' ') THEN - WRITE(6,51) IOPT,IDTREQ,IHRREQ,IHRWIN,MAXSTM,STMNAM(1),STMID(1) - 51 FORMAT(/'****** ILLEGAL STMID IN NEWVIT, IOPT,IDTREQ,IHRREQ,', - 1 'IHRWIN,MAXSTM,STMNAM,STMID='/9X,5I10,2X,A9,2X,A3) - IERVIT=50 - - ELSE - STMREQ=STMID(1) - ENDIF - - ELSE IF(IOPT .NE. 1) THEN - WRITE(6,61) IOPT,IDTREQ,IHRREQ,IHRWIN,MAXSTM,STMNAM(1),STMID(1) - 61 FORMAT(/'****** ILLEGAL OPTION IN NEWVIT, IOPT,IDTREQ,IHRREQ,', - 1 'IHRWIN,MAXSTM,STMNAM,STMID='/9X,5I10,2X,A9,2X,A3) - IERVIT=60 - ENDIF - -C FOR OPTIONS 3, 5, 6 (ALL OCCURRENCES OPTIONS), SEARCH IS -C RESTRICTED TO A SPECIFIC YEAR when idtreq is positive - - IF(IOPT .EQ. 3 .OR. IOPT .EQ. 5 .OR. IOPT .EQ. 6) - 1 IYRREQ=IDTREQ/10000 - -C ****** ERROR EXIT ****** - - IF(IERVIT .GT. 0) RETURN - -C INITIALIZE FILE AND COUNTERS - - 90 REWIND IOVITL - KREC=0 - KSTORM=0 - NERROR=0 - -C READ A RECORD INTO BUFFER - - 100 CONTINUE - - READ(IOVITL,101,ERR=990,END=200) (BUFIN(NCH),NCH=1,MAXCHR) - 101 FORMAT(95A1) - -C AT THIS POINT WE DO NOT KNOW IF A 2-DIGIT YEAR BEGINS IN COLUMN 20 -C OF THE RECORD (OLD NON-Y2K COMPLIANT FORM) OR IF A 4-DIGIT YEAR -C BEGINS IN COLUMN 20 (NEW Y2K COMPLIANT FORM) - TEST ON LOCATION OF -C LATITUDE N/S INDICATOR TO FIND OUT ... - - IF(BUFIN(35).EQ.'N' .OR. BUFIN(35).EQ.'S') THEN - -C ... THIS RECORD STILL CONTAINS THE OLD 2-DIGIT FORM OF THE YEAR -C ... THIS PROGRAM WILL CONVERT THE RECORD TO A 4-DIGIT YEAR USING THE -C "WINDOWING" TECHNIQUE SINCE SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT *, '==> Read in RECORD from tcvitals file -- contains a', - $ ' 2-digit year "',BUFIN(20:21),'"' - PRINT *, ' ' - PRINT '(a,i0,a,a)', 'From unit ',iovitl,'; BUFIN-10: ',bufin - PRINT *, ' ' - BUFY2K(1:19) = BUFIN(1:19) - IF(BUFIN(20)//BUFIN(21).GT.'20') THEN - BUFY2K(20) = '1' - BUFY2K(21) = '9' - ELSE - BUFY2K(20) = '2' - BUFY2K(21) = '0' - ENDIF - BUFY2K(22:95) = BUFIN(20:93) - BUFIN = BUFY2K - PRINT *, ' ' - PRINT *, '==> 2-digit year converted to 4-digit year "', - $ BUFIN(20:23),'" via windowing technique' - PRINT *, ' ' - PRINT *, 'From unit ',iovitl,'; BUFIN-10: ',bufin - PRINT *, ' ' - - ELSE IF(BUFIN(37).EQ.'N' .OR. BUFIN(37).EQ.'S') THEN - -C ... THIS RECORD CONTAINS THE NEW 4-DIGIT FORM OF THE YEAR -C ... NO CONVERSION NECESSARY SINCE THIS SUBSEQUENT LOGIC EXPECTS THIS - - PRINT *, ' ' - PRINT *, '==> Read in RECORD from tcvitals file -- contains a', - $ ' 4-digit year "',BUFIN(20:23),'"' - PRINT *, ' ' - PRINT *, 'From unit ',iovitl,'; BUFIN-10: ',bufin - PRINT *, ' ' - PRINT *, '==> No conversion necessary' - PRINT *, ' ' - - ELSE - - PRINT *, ' ' - PRINT *, '***** Cannot determine if this record contains ', - $ 'a 2-digit year or a 4-digit year - skip it and try reading ', - $ 'the next record' - PRINT *, ' ' - GO TO 100 - - END IF - - KREC=KREC+1 - -C DECODE DATE AND TIME - - DO IV=1,2 - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 BUFINZ) -c WRITE(6,109) IV,ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC, -c 1 FMTVIT(IV) -c 109 FORMAT(/'...DECODING VARIABLE #',I2,' ISTART,IEND,IVALUE,IER,', -c 1 'FMT=',2I4,I10,I3,2X,A10) - ENDDO - -C FILTER OUT RECORDS THAT ARE NOT GATHERED BY CURRENT OPTION - -C FIRST: DATE/TIME/WINDOW FILTER - - IF(IOPT .LE. 2 .OR. IOPT .EQ. 4) THEN - -C EXACT DATE/UTC ARE SPECIFIED - - IF(IHRWIN .EQ. 0) THEN -C WRITE(6,117) IDATEZ,IUTCZ -C 117 FORMAT(/'...NO WINDOW OPTION: IDATEZ,IUTCZ=',2I10) - IF(IDTREQ .NE. IDATEZ) GO TO 100 - IF(IHRREQ .NE. IUTCZ ) GO TO 100 - - ELSE - CALL ZTIME(IDATEZ,IUTCZ,IYR,IMO,IDA,IHR,IMIN) - CALL W3DIFDAT((/IYR,IMO,IDA,0,0,0,0,0/),(/1899,12,31,0,0,0,0,0/) - $ ,1,RINC) - JDY = NINT(RINC(1)) - CALL FLDAY(JDY,IHR,IMIN,DAYZ) - -C WRITE(6,119) IYR,IMO,IDA,IHR,IMIN,JDY,DAYZ,DAYMNS,DAYPLS,IYRMNS -C 119 FORMAT('...DEBUGGING WINDOW TIME SELECTION: IYR,IMO,IDA,IHR,', -C 1 'IMIN,JDY,DAYZ,DAYMNS,DAYPLS,IYRMNS='/15X,6I5,3F12.4,I5) - -C YEAR WINDOW, THEN FRACTIONAL JULIAN DAY WINDOW - - IF(IYR .NE. IYRWIN) GO TO 100 - IF(DAYZ .LT. DAYMNS .OR. DAYZ .GT. DAYPLS) GO TO 100 - ENDIF - ENDIF - -C SECOND: STORM NAME FILTER - - IF(IOPT .EQ. 2 .OR. IOPT .EQ. 3 .OR. IOPT .EQ. 6) THEN - IF(IPRNT .GT. 0) WRITE(6,123) STMNMZ,STMREQ - 123 FORMAT('...STORM NAME FILTER, STMNMZ,STMREQ=',A9,2X,A9) - IF(STMNMZ .NE. STMREQ) GO TO 100 - IF(IOPT .EQ. 3 .OR. IOPT .EQ. 6) then - if(iyrreq .gt. 0 .and. IDATEZ/10000 .NE. IYRREQ) go to 100 - endif - -C FOR OPTION 6, BRANCH BACK TO LOOK FOR STORM ID INSTEAD OF -C STORM NAME - - IF(IOPT .EQ. 6) THEN - IOPT=5 - STMREQ=STMIDZ - GO TO 90 - ENDIF - - ENDIF - -C THIRD: STORM ID FILTER - - IF(IOPT .EQ. 4 .AND. STMIDZ .NE. STMREQ) GO TO 100 - IF(IOPT .EQ. 5 .AND. (STMIDZ .NE. STMREQ .OR. (iyrreq .gt. 0 - 1 .and. IDATEZ/10000 .NE. IYRREQ))) GO TO 100 - -C EUREKA - - IF(IPRNT .GT. 0) WRITE(6,137) STMREQ,KREC - 137 FORMAT('...REQUESTED STORM FOUND, NAME/ID=',A9,' AT RECORD #',I6) - - DO IV=3,MAXVIT - CALL DECVAR(ISTVAR(IV),IENVAR(IV),IVTVAR(IV),IERDEC,FMTVIT(IV), - 1 BUFINZ) - VITVAR(IV)=REAL(IVTVAR(IV))*VITFAC(IV) - ENDDO - -C DEPTH OF CYCLONIC CIRCULATION - - IF(STMDPZ .EQ. 'S') THEN - PTOPZ=STMTOP(1) - ELSE IF(STMDPZ .EQ. 'M') THEN - PTOPZ=STMTOP(2) - ELSE IF(STMDPZ .EQ. 'D') THEN - PTOPZ=STMTOP(3) - ELSE IF(STMDPZ .EQ. 'X') THEN - PTOPZ=-99.0 -C WRITE(6,141) STMDPZ -C 141 FORMAT('******DEPTH OF CYCLONIC CIRCULATION HAS MISSING CODE=',A, -C 1 '.') - ELSE - WRITE(6,143) STMDPZ - 143 FORMAT('******ERROR DECODING DEPTH OF CYCLONIC CIRCULATION, ', - 1 'STMDPZ=',A1,'. ERROR RECOVERY NEEDED.') - ENDIF - -C ***************************************************** -C ***************************************************** -C **** IMPORTANT NOTES: **** -C **** **** -C **** ALL STORM LONGITUDES CONVERTED TO **** -C **** 0-360 DEGREES, POSITIVE EASTWARD !!! **** -C **** **** -C **** ALL STORM SPEEDS ARE IN M/SEC **** -C **** **** -C **** ALL DISTANCE DATA ARE IN KM **** -C **** **** -C **** ALL PRESSURE DATA ARE IN HPA (MB) **** -C ***************************************************** -C ***************************************************** - -C SIGN OF LATITUDE AND CONVERT LONGITUDE - - IF(LATNS .EQ. 'S') THEN - STMLTZ=-STMLTZ - ELSE IF(LATNS .NE. 'N') THEN - WRITE(6,153) STMLTZ,STMLNZ,LATNS - 153 FORMAT('******ERROR DECODING LATNS, ERROR RECOVERY NEEDED. ', - 1 'STMLTZ,STMLNZ,LATNS=',2F12.2,2X,A1) - GO TO 100 - ENDIF - - IF(LONEW .EQ. 'W') THEN - STMLNZ=360.-STMLNZ - ELSE IF(LONEW .NE. 'E') THEN - WRITE(6,157) STMLTZ,STMLNZ,LATNS - 157 FORMAT('******ERROR DECODING LONEW, ERROR RECOVERY NEEDED. ', - 1 'STMLTZ,STMLNZ,LATNS=',2F12.2,2X,A1) - ENDIF - - IF(IPRNT .EQ. 1) - 1 WRITE(6,161) IDATEZ,IUTCZ,STMLTZ,STMLNZ,STMDRZ,STMSPZ,PENVZ, - 2 PCENZ,RMAXZ,VMAXZ,RMWZ,R15NEZ,R15SEZ,R15SWZ,R15NWZ - 161 FORMAT('...ALL STORM DATA CALCULATED: IDATEZ,IUTCZ,STMLTZ,', - 1 'STMLNZ,STMDRZ,STMSPZ,PENVZ,PCENZ,RMAXZ,VMAXZ,RMWZ,', - 2 'R15NEZ,R15SEZ,R15SWZ,R15NWZ='/5X,2I10,13F8.2) - - IF(KSTORM .LT. MAXSTM) THEN - KSTORM=KSTORM+1 - IDATE(KSTORM)=IDATEZ - IUTC(KSTORM)=IUTCZ - PTOP(KSTORM)=PTOPZ - STMLAT(KSTORM)=STMLTZ - STMLON(KSTORM)=STMLNZ - STMDIR(KSTORM)=STMDRZ - STMSPD(KSTORM)=STMSPZ - STMNAM(KSTORM)=STMNMZ - STMID (KSTORM)=STMIDZ - RSMC (KSTORM)=RSMCZ - RMAX(KSTORM)=RMAXZ - PENV(KSTORM)=PENVZ - PCEN(KSTORM)=PCENZ - VMAX(KSTORM)=VMAXZ - RMW(KSTORM)=RMWZ - R15NE(KSTORM)=R15NEZ - R15SE(KSTORM)=R15SEZ - R15SW(KSTORM)=R15SWZ - R15NW(KSTORM)=R15NWZ - -C SET THE FIRST OCCURRENCE FLAG IF PRESENT - - IF(FSTFLZ .EQ. ':') THEN - FSTFLG(KSTORM)=.TRUE. - ELSE - FSTFLG(KSTORM)=.FALSE. - ENDIF - - GO TO 100 - - ELSE - GO TO 300 - ENDIF - - 200 CONTINUE - - IF(KSTORM .GT. 0) THEN - -C NORMAL RETURN HAVING FOUND REQUESTED STORM (S) AT DATE/TIME/WINDOW - - IF(IPRNT .EQ. 1) WRITE(6,201) STMREQ,IDTREQ,IHRREQ,KSTORM,KREC - 201 FORMAT(/'...FOUND STORM NAME/ID ',A12,' AT DATE, TIME=',I9,'/', - 1 I5,' UTC IN VITALS FILE.'/4X,I5,' RECORDS FOUND. ', - 2 'TOTAL NUMBER OF RECORDS READ=',I7) - RETURN - -C UNABLE TO FIND REQUESTED STORM AT DATE/TIME/WINDOW - - ELSE - IF(IOPT .EQ. 1) STMREQ='ALLSTORMS' - WRITE(6,207) IOPT,STMREQ,STMNMZ - 207 FORMAT(/'**** OPTION=',I3,' CANNOT FIND STORM NAME/ID=',A9, - 1 '... LAST STORM FOUND=',A9) - - WRITE(6,209) IDATEZ,IDTREQ,IUTCZ,IHRREQ - 209 FORMAT('**** CANNOT FIND REQUESTED DATE/TIME, (FOUND, ', - 1 'REQUESTED) (DATE/TIME)=',4I10/) - IERVIT=210 - RETURN - - ENDIF - - 300 WRITE(6,301) KSTORM - 301 FORMAT(/'******KSTORM EXCEEDS AVAILABLE SPACE, KSTORM=',I5) - RETURN - - 990 WRITE(6,991) BUFIN - 991 FORMAT('******ERROR READING STORM RECORD. BUFIN IS:'/' ******',A, - 1 '******') - NERROR=NERROR+1 - IF(NERROR .LE. IRDERM) GO TO 100 - IERVIT=990 - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: DECVAR DECODES VARIALES -C PRGMMR: D. A. KEYSER ORG: NP22 DATE: 2004-06-08 -C -C ABSTRACT: DECODES A PARTICULAR INTEGER VARIABLE FROM AN INPUT -C CHARACTER- BASED RECORD IN THE TROPICAL CYCLONE VITAL STATISTICS -C FILE. THIS IS DONE THROUGH AN INTERNAL READ. -C -C PROGRAM HISTORY LOG: -C 1991-06-06 S. J. LORD -C 2004-06-08 D. A. KEYSER - WHEN INTEGER VALUES ARE DECODED FROM -C CHARACTER-BASED RECORD VIA INTERNAL READ IN THIS SUBR., -C IF BYTE IN UNITS DIGIT LOCATION IS ERRONEOUSLY CODED AS -C BLANK (" "), IT IS REPLACED WITH A "5" IN ORDER TO -C PREVENT INVALID VALUE FROM BEING RETURNED (I.E., IF -C "022 " WAS READ, IT WAS DECODED AS "22", IT IS NOW -C DECODED AS "225" - THIS HAPPENED FOR VALUE OF RADIUS OF -C LAST CLOSED ISOBAR FOR JTWC RECORDS FROM 13 JULY 2000 -C THROUGH FNMOC FIX ON 26 MAY 2004 - THE VALUE WAS REPLACED -C BY CLIMATOLOGY BECAUSE IT FAILED A GROSS CHECK, HAD THIS -C CHANGE BEEN IN PLACE THE DECODED VALUE WOULD HAVE BEEN -C W/I 0.5 KM OF THE ACTUAL VALUE) -C -C USAGE: CALL DECVAR(ISTART,IEND,IVALUE,IERDEC,FMT,BUFF) -C INPUT ARGUMENT LIST: -C ISTART - INTEGER BYTE IN BUFF FROM WHICH TO BEGIN INTERNAL READ -C IEND - INTEGER BYTE IN BUFF FROM WHICH TO END INTERNAL READ -C FMT - CHARACTER*(*) FORMAT TO USE FOR INTERNAL READ -C BUFF - CHARACTER*(*) TROPICAL CYCLONE RECORD -C -C OUTPUT ARGUMENT LIST: -C IVALUE - INTEGER VALUE DECODED FROM BUFF -C IERDEC - ERROR RETURN CODE (= 0 - SUCCESSFUL DECODE, -C =10 - DECODE ERROR) -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C -C REMARKS: IF IERDEC = 10, IVALUE IS RETURNED AS -9, -99, -999 -C OR -9999999 DEPENDING UPON THE VALUE OF FMT. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE DECVAR(ISTART,IEND,IVALUE,IERDEC,FMT,BUFF) - - PARAMETER (NCHLIN=130) - - CHARACTER FMT*(*),BUFF*(*),BUFF_save*130,OUTLIN*1 - - SAVE - - DIMENSION OUTLIN(NCHLIN) - DIMENSION MISSNG(2:8) - - DATA MISSNG/-9,-99,-999,-9999,-99999,-999999,-9999999/ - -C WRITE(6,1) FMT,ISTART,IEND,BUFF -C 1 FORMAT(/'...FMT,ISTART,IEND=',A10,2I5/' ...BUFF=',A,'...') - - IF(BUFF(IEND:IEND).EQ.' ') THEN - BUFF_save = BUFF - BUFF(IEND:IEND) = '5' - WRITE(6,888) IEND - 888 FORMAT(/' ++++++DECVAR: WARNING -- BLANK (" ") CHARACTER READ IN', - 1 ' UNITS DIGIT IN BYTE',I4,' OF RECORD - CHANGE TO "5" ', - 2 'AND CONTINUE DECODE'/) - OUTLIN=' ' - OUTLIN(IEND:IEND)='5' - WRITE(6,'(130A1)') OUTLIN - WRITE(6,'(A130/)') BUFF_save(1:130) - ENDIF - - READ(BUFF(ISTART:IEND),FMT,ERR=10) IVALUE - - IERDEC=0 - - RETURN - - 10 CONTINUE - - OUTLIN=' ' - OUTLIN(ISTART:IEND)='*' - - IVALUE = -9999999 - K = IEND - ISTART + 1 - IF(K.GT.1 .AND. K.LT.9) IVALUE = MISSNG(K) - - WRITE(6,31) OUTLIN - WRITE(6,32) BUFF(1:130),IVALUE - 31 FORMAT(/' ******DECVAR: ERROR DECODING, BUFF='/130A1) - 32 FORMAT(A130/7X,'VALUE RETURNED AS ',I9/) - - IERDEC=10 - - RETURN - - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: TIMSUB PERFORMS TIME CHORES -C PRGMMR: D. A. KEYSER ORG: NP22 DATE: 1998-06-05 -C -C ABSTRACT: VARIOUS ENTRIES CONVERT 8 DIGIT YYYYMMDD INTO YEAR, MONTH -C AND DAY, AND FRACTIONAL JULIAN DAY FROM INTEGER JULIAN DAY, HOUR -C AND MINUTE. -C -C PROGRAM HISTORY LOG: -C 1991-06-06 S. J. LORD -C 1998-06-05 D. A. KEYSER - Y2K/F90 COMPLIANCE -C -C USAGE: CALL TIMSUB(IDATE,IUTC,IYR,IMO,IDA,IHR,IMIN,JDY,DAY) -C CALL FLDAY(JDY,IHR,IMIN,DAY) -C INPUT ARGUMENT LIST: -C IDATE - DATE IN FORM YYYYMMDD -C JDY - NUMBER OF DAYS SINCE 12/31/1899 -C -C OUTPUT ARGUMENT LIST: -C IYR - YEAR IN FORM YYYY -C IMO - MONTH OF YEAR -C IDA - DAY OF MONTH -C IHR - HOUR OF DAY -C IMIN - MINUTE OF HOUR -C DAY - FRACTIONAL NUMBER OF DAYS SINCE 12/31/1899 -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE TIMSUB(IDATE,IUTC,IYR,IMO,IDA,IHR,IMIN,JDY,DAY) - -C----------------------------------------------------------------------- - - ENTRY ZTIME(IDATE,IUTC,IYR,IMO,IDA,IHR,IMIN) - -C PARSE 8 DIGIT YYYYMMDD INTO YEAR MONTH AND DAY - - IYR = IDATE/10000 - IMO =(IDATE-IYR*10000)/100 - IDA = IDATE-IYR*10000-IMO*100 - IHR =IUTC/100 - IMIN=IUTC-IHR*100 - RETURN - -C----------------------------------------------------------------------- -C THIS ENTRY CALCULATES THE FRACTIONAL JULIAN DAY FROM INTEGERS -C JULIAN DAY, HOUR AND MINUTE (ACUALLY, JDY HERE IS NO. OF DAYS -C SINCE 12/31/1899) - - ENTRY FLDAY(JDY,IHR,IMIN,DAY) - DAY=REAL(JDY)+(REAL(IHR)*60.+REAL(IMIN))/1440. - RETURN - -C----------------------------------------------------------------------- - - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: YTIME GETS INTEGER YYYY, YYYYMMDD, HHMM -C PRGMMR: D. A. KEYSER ORG: NP22 DATE: 1998-10-29 -C -C ABSTRACT: CALCULATES 8-DIGIT INTEGER YYYYMMDD, 4-DIGIT INTEGER YYYY, -C AND 6-DIGIT INTEGER HHMMSS FROM FRACTIONAL NUMBER OF DAYS SINCE -C 12/31/1899 -C -C PROGRAM HISTORY LOG: -C 1991-06-06 S. J. LORD -C 1998-10-29 D. A. KEYSER - Y2K/F90 COMPLIANCE -C -C USAGE: CALL YTIME(IYR,DAYZ,IDATE,JUTC) -C INPUT ARGUMENT LIST: -C DAYZ - FRACTIONAL NUMBER OF DAYS SINCE 12/31/1899 -C -C OUTPUT ARGUMENT LIST: -C IYR - YEAR (YYYY) -C IDATEZ - DATE IN FORM YYYYMMDD -C JUTC - DATE IN FORM HHMMSS -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE YTIME(IYR,DAYZ,IDATE,JUTC) - DIMENSION JDAT(8) - - CALL W3MOVDAT((/DAYZ,0.,0.,0.,0./),(/1899,12,31,0,0,0,0,0/),JDAT) - IYR = JDAT(1) - IMO = JDAT(2) - IDA = JDAT(3) - IHR = JDAT(5) - IMN = JDAT(6) - ISC = JDAT(7) - - IDATE=IDA+(100*IMO)+(10000*IYR) - JUTC =ISC+100*IMN+10000*IHR - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: SORTRL SORTS REAL NUMBERS -C PRGMMR: S. J. LORD ORG: NP22 DATE: 1991-06-04 -C -C ABSTRACT: SORTS REAL NUMBERS. OUTPUT ARRAY IS THE INDEX OF -C THE INPUT VALUES THAT ARE SORTED. -C -C PROGRAM HISTORY LOG: -C 1991-06-04 S. J. LORD (MODIFIED FROM NCAR CODE) -C -C USAGE: CALL SORTRL(A,LA,NL) -C INPUT ARGUMENT LIST: -C A - ARRAY OF ELEMENTS TO BE SORTED. -C NL - NUMBER OF ELEMENTS TO BE SORTED. -C -C OUTPUT ARGUMENT LIST: -C LA - INTEGER ARRAY CONTAINING THE INDEX OF THE SORTED -C - ELEMENTS. SORTING IS FROM SMALL TO LARGE. E.G. -C - LA(1) CONTAINS THE INDEX OF THE SMALLEST ELEMENT IN -C - ARRAY. LA(NL) CONTAINS THE INDEX OF THE LARGEST. -C -C -C REMARKS: NONE -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE SORTRL(A,LA,NL) - -C ENTRY SORTRL(A,LA,NL) SORT UP REAL NUMBERS -C ** REVISED (6/13/84) FOR THE USE IN VAX-11 -C ARGUMENTS ... -C A INPUT ARRAY OF NL ELEMENTS TO BE SORTED OR RE-ORDERED -C LA OUTPUT ARRAY OF NL ELEMENTS IN WHICH THE ORIGINAL LOCATION -C OF THE SORTED ELEMENTS OF A ARE SAVED, OR -C INPUT ARRAY TO SPECIFY THE REORDERING OF ARRAY A BY SORTED -C NL THE NUMBER OF ELEMENTS TO BE TREATED - - SAVE - - DIMENSION A(NL),LA(NL),LS1(64),LS2(64) - DATA NSX/64/ - -C SET THE ORIGINAL ORDER IN LA - - DO L=1,NL - LA(L)=L - ENDDO - -C SEPARATE NEGATIVES FROM POSITIVES - - L = 0 - M = NL + 1 - 12 L = L + 1 - IF(L.GE.M) GO TO 19 - IF(A(L)) 12,15,15 - 15 M = M - 1 - IF(L.GE.M) GO TO 19 - IF(A(M)) 18,15,15 - 18 AZ = A(M) - A(M) = A(L) - A(L) = AZ - LZ = LA(M) - LA(M) = LA(L) - LA(L) = LZ - GO TO 12 - 19 L = L - 1 - -C NOTE THAT MIN AND MAX FOR INTERVAL (1,NL) HAVE NOT BEEN DETERMINED - - LS1(1) = 0 - L2 = NL + 1 - NS = 1 - -C STEP UP - - 20 LS1(NS) = LS1(NS) + 1 - LS2(NS) = L - NS = NS + 1 - IF(NS.GT.NSX) GO TO 80 - L1 = L + 1 - LS1(NS) = L1 - L2 = L2 - 1 - GO TO 40 - -C STEP DOWN - - 30 NS=NS-1 - IF (NS.LE.0) GO TO 90 - L1 = LS1(NS) - L2 = LS2(NS) - 40 IF(L2.LE.L1) GO TO 30 - -C FIND MAX AND MIN OF THE INTERVAL (L1,L2) - - IF (A(L1)-A(L2) .LE. 0) GO TO 52 - AN = A(L2) - LN = L2 - AX = A(L1) - LX = L1 - GO TO 54 - 52 AN = A(L1) - LN = L1 - AX = A(L2) - LX = L2 - 54 L1A = L1 + 1 - L2A = L2 - 1 - IF(L1A.GT.L2A) GO TO 60 - - DO L=L1A,L2A - IF (A(L)-AX .GT. 0) GO TO 56 - IF (A(L)-AN .GE. 0) GO TO 58 - AN = A(L) - LN = L - GO TO 58 - 56 AX = A(L) - LX = L - 58 CONTINUE - ENDDO - -C IF ALL ELEMENTS ARE EQUAL (AN=AX), STEP DOWN - - 60 IF (AN .EQ. AX) GO TO 30 - -C PLACE MIN AT L1, AND MAX AT L2 -C IF EITHER LN=L2 OR LX=L1, FIRST EXCHANGE L1 AND L2 - - IF(LN.EQ.L2.OR.LX.EQ.L1) GO TO 62 - GO TO 64 - 62 AZ=A(L1) - A(L1)=A(L2) - A(L2)=AZ - LZ=LA(L1) - LA(L1)=LA(L2) - LA(L2)=LZ - -C MIN TO L1, IF LN IS NOT AT EITHER END - - 64 IF(LN.EQ.L1.OR.LN.EQ.L2) GO TO 66 - A(LN)=A(L1) - A(L1)=AN - LZ=LA(LN) - LA(LN)=LA(L1) - LA(L1)=LZ - -C MAX TO L2, IF LX IS NOT AT EITHER END - - 66 IF(LX.EQ.L2.OR.LX.EQ.L1) GO TO 68 - A(LX)=A(L2) - A(L2)=AX - LZ=LA(LX) - LA(LX)=LA(L2) - LA(L2)=LZ - -C IF ONLY THREE ELEMENTS IN (L1,L2), STEP DOWN. - - 68 IF(L1A.GE.L2A) GO TO 30 - -C SET A CRITERION TO SPLIT THE INTERVAL (L1A,L2A) -C AC IS AN APPROXIMATE ARITHMETIC AVERAGE OF AX AND AN, -C PROVIDED THAT AX IS GREATER THAN AN. (IT IS THE CASE, HERE) -C ** IF A IS DISTRIBUTED EXPONENTIALLY, GEOMETRIC MEAN MAY -C BE MORE EFFICIENT - - AC = (AX+AN)/2 - -C MIN AT L1 AND MAX AT L2 ARE OUTSIDE THE INTERVAL - - L = L1 - M = L2 - 72 L = L + 1 - IF(L.GE.M) GO TO 78 -cc 73 CONTINUE - IF (A(L)-AC .LE. 0) GO TO 72 - 75 M = M - 1 - IF(L.GE.M) GO TO 78 -cc 76 CONTINUE - IF (A(M)-AC .GT. 0) GO TO 75 - AZ = A(M) - A(M) = A(L) - A(L) = AZ - LZ = LA(M) - LA(M) = LA(L) - LA(L) = LZ - GO TO 72 - -C SINCE 75 IS ENTERED ONLY IF 73 IS FALSE, 75 IS NOT TENTATIVE -C BUT 72 IS TENTATIVE, AND MUST BE CORRECTED IF NO FALSE 76 OCCURS - - 78 L = L - 1 - GO TO 20 - 80 WRITE(6,85) NSX - 85 FORMAT(/' === SORTING INCOMPLETE. SPLIT EXCEEDED',I3,' ==='/) - 90 RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: DS2UV CONVERTS DIRECTION/SPEED TO U/V MOTION -C PRGMMR: S. J. LORD ORG: NP22 DATE: 1991-06-06 -C -C ABSTRACT: CONVERTS DIRECTION AND SPEED TO ZONAL AND MERIDIONAL -C MOTION. -C -C PROGRAM HISTORY LOG: -C 1991-06-06 S. J. LORD -C -C USAGE: CALL PGM-NAME(INARG1, INARG2, WRKARG, OUTARG1, ... ) -C INPUT ARGUMENT LIST: -C INARG1 - GENERIC DESCRIPTION, INCLUDING CONTENT, UNITS, -C INARG2 - TYPE. EXPLAIN FUNCTION IF CONTROL VARIABLE. -C -C OUTPUT ARGUMENT LIST: (INCLUDING WORK ARRAYS) -C WRKARG - GENERIC DESCRIPTION, ETC., AS ABOVE. -C OUTARG1 - EXPLAIN COMPLETELY IF ERROR RETURN -C ERRFLAG - EVEN IF MANY LINES ARE NEEDED -C -C INPUT FILES: (DELETE IF NO INPUT FILES IN SUBPROGRAM) -C DDNAME1 - GENERIC NAME & CONTENT -C -C OUTPUT FILES: (DELETE IF NO OUTPUT FILES IN SUBPROGRAM) -C DDNAME2 - GENERIC NAME & CONTENT AS ABOVE -C FT06F001 - INCLUDE IF ANY PRINTOUT -C -C REMARKS: LIST CAVEATS, OTHER HELPFUL HINTS OR INFORMATION -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE DS2UV(UZ,VZ,DIRZ,SPDZ) - -C THIS SUBROUTINE PRODUCES U, V CARTESIAN WINDS FROM DIRECTION,SPEED -C ****** IMPORTANT NOTE: DIRECTION IS DIRECTION WIND IS -C BLOWING, THE OPPOSITE OF METEOROLOGICAL CONVENTION *** - - UZ=SPDZ*SIND(DIRZ) - VZ=SPDZ*COSD(DIRZ) - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: ATAN2D ARC TAN FUNCTION FROM DEGREES INPUT -C PRGMMR: S. J. LORD ORG: NP22 DATE: 1991-06-06 -C -C ABSTRACT: ARC TAN FUNCTION FROM DEGREES INPUT. -C -C PROGRAM HISTORY LOG: -C 1991-06-06 S. J. LORD -C -C USAGE: CALL PGM-NAME(INARG1, INARG2, WRKARG, OUTARG1, ... ) -C INPUT ARGUMENT LIST: -C INARG1 - GENERIC DESCRIPTION, INCLUDING CONTENT, UNITS, -C INARG2 - TYPE. EXPLAIN FUNCTION IF CONTROL VARIABLE. -C -C OUTPUT ARGUMENT LIST: (INCLUDING WORK ARRAYS) -C WRKARG - GENERIC DESCRIPTION, ETC., AS ABOVE. -C OUTARG1 - EXPLAIN COMPLETELY IF ERROR RETURN -C ERRFLAG - EVEN IF MANY LINES ARE NEEDED -C -C INPUT FILES: (DELETE IF NO INPUT FILES IN SUBPROGRAM) -C DDNAME1 - GENERIC NAME & CONTENT -C -C OUTPUT FILES: (DELETE IF NO OUTPUT FILES IN SUBPROGRAM) -C DDNAME2 - GENERIC NAME & CONTENT AS ABOVE -C FT06F001 - INCLUDE IF ANY PRINTOUT -C -C REMARKS: LIST CAVEATS, OTHER HELPFUL HINTS OR INFORMATION -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - FUNCTION ATAN2D(ARG1,ARG2) - -C DEGRAD CONVERTS DEGREES TO RADIANS - - DATA DEGRAD/0.017453/ - IF(ARG1 .EQ. 0.0 .AND. ARG2 .EQ. 0.0) THEN - ATAN2D=0.0 - ELSE - ATAN2D=ATAN2(ARG1,ARG2)/DEGRAD - ENDIF - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: SIND SINE FUNCTION FROM DEGREES INPUT -C PRGMMR: S. J. LORD ORG: NP22 DATE: 1991-06-06 -C -C ABSTRACT: SINE FUNCTION FROM DEGREES INPUT. -C -C PROGRAM HISTORY LOG: -C 1991-06-06 S. J. LORD -C -C USAGE: CALL PGM-NAME(INARG1, INARG2, WRKARG, OUTARG1, ... ) -C INPUT ARGUMENT LIST: -C INARG1 - GENERIC DESCRIPTION, INCLUDING CONTENT, UNITS, -C INARG2 - TYPE. EXPLAIN FUNCTION IF CONTROL VARIABLE. -C -C OUTPUT ARGUMENT LIST: (INCLUDING WORK ARRAYS) -C WRKARG - GENERIC DESCRIPTION, ETC., AS ABOVE. -C OUTARG1 - EXPLAIN COMPLETELY IF ERROR RETURN -C ERRFLAG - EVEN IF MANY LINES ARE NEEDED -C -C INPUT FILES: (DELETE IF NO INPUT FILES IN SUBPROGRAM) -C DDNAME1 - GENERIC NAME & CONTENT -C -C OUTPUT FILES: (DELETE IF NO OUTPUT FILES IN SUBPROGRAM) -C DDNAME2 - GENERIC NAME & CONTENT AS ABOVE -C FT06F001 - INCLUDE IF ANY PRINTOUT -C -C REMARKS: LIST CAVEATS, OTHER HELPFUL HINTS OR INFORMATION -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - FUNCTION SIND(ARG) - -C DEGRAD CONVERTS DEGREES TO RADIANS - - DATA DEGRAD/0.017453/ - SIND=SIN(ARG*DEGRAD) - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: COSD COSINE FUNCTION FROM DEGREES INPUT -C PRGMMR: S. J. LORD ORG: NP22 DATE: 1991-06-06 -C -C ABSTRACT: RETURNS COSINE FUNCTION FROM DEGREES INPUT -C -C PROGRAM HISTORY LOG: -C 1991-06-06 S. J. LORD -C -C USAGE: CALL PGM-NAME(INARG1, INARG2, WRKARG, OUTARG1, ... ) -C INPUT ARGUMENT LIST: -C INARG1 - GENERIC DESCRIPTION, INCLUDING CONTENT, UNITS, -C INARG2 - TYPE. EXPLAIN FUNCTION IF CONTROL VARIABLE. -C -C OUTPUT ARGUMENT LIST: (INCLUDING WORK ARRAYS) -C WRKARG - GENERIC DESCRIPTION, ETC., AS ABOVE. -C OUTARG1 - EXPLAIN COMPLETELY IF ERROR RETURN -C ERRFLAG - EVEN IF MANY LINES ARE NEEDED -C -C INPUT FILES: (DELETE IF NO INPUT FILES IN SUBPROGRAM) -C DDNAME1 - GENERIC NAME & CONTENT -C -C OUTPUT FILES: (DELETE IF NO OUTPUT FILES IN SUBPROGRAM) -C DDNAME2 - GENERIC NAME & CONTENT AS ABOVE -C FT06F001 - INCLUDE IF ANY PRINTOUT -C -C REMARKS: LIST CAVEATS, OTHER HELPFUL HINTS OR INFORMATION -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - FUNCTION COSD(ARG) - -C DEGRAD CONVERTS DEGREES TO RADIANS - - DATA DEGRAD/0.017453/ - COSD=COS(ARG*DEGRAD) - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: DISTSP DISTANCE ON GREAT CIRCLE -C PRGMMR: S. J. LORD ORG: NP22 DATE: 1991-06-06 -C -C ABSTRACT: CALCULATES DISTANCE ON GREAT CIRCLE BETWEEN TWO LAT/LON -C POINTS. -C -C PROGRAM HISTORY LOG: -C 1991-06-06 S. J. LORD -C -C USAGE: DXY=DISTSP(DLAT1,DLON1,DLAT2,DLON2) -C INPUT ARGUMENT LIST: -C DLAT1 - LATITUDE OF POINT 1 (-90<=LAT<=90) -C DLON1 - LONGITUDE OF POINT 1 (-180 TO 180 OR 0 TO 360) -C DLAT2 - LATITUDE OF POINT 2 (-90<=LAT<=90) -C DLON1 - LONGITUDE OF POINT 2 -C -C -C REMARKS: DISTANCE IS IN METERS -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - FUNCTION DISTSP(DLAT1,DLON1,DLAT2,DLON2) - DATA REARTH/6.37E6/ - - XXD=COSD(DLON1-DLON2)*COSD(DLAT1)*COSD(DLAT2)+ - 1 SIND(DLAT1)*SIND(DLAT2) - - XXM=AMIN1(1.0,AMAX1(-1.0,XXD)) - - DISTSP=ACOS(XXM)*REARTH - RETURN - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: AVGSUB CALCULATES AVERAGES -C PRGMMR: S. J. LORD ORG: NP22 DATE: 1991-06-06 -C -C ABSTRACT: CALCULATES AVERAGES WEIGHTED AND UNWEIGHTED FOR ALL -C INPUT NUMBERS OR JUST POSITIVE ONES. -C -C PROGRAM HISTORY LOG: -C 1991-06-06 S. J. LORD -C -C USAGE: CALL PGM-NAME(INARG1, INARG2, WRKARG, OUTARG1, ... ) -C INPUT ARGUMENT LIST: -C INARG1 - GENERIC DESCRIPTION, INCLUDING CONTENT, UNITS, -C INARG2 - TYPE. EXPLAIN FUNCTION IF CONTROL VARIABLE. -C -C OUTPUT ARGUMENT LIST: (INCLUDING WORK ARRAYS) -C WRKARG - GENERIC DESCRIPTION, ETC., AS ABOVE. -C OUTARG1 - EXPLAIN COMPLETELY IF ERROR RETURN -C ERRFLAG - EVEN IF MANY LINES ARE NEEDED -C -C INPUT FILES: (DELETE IF NO INPUT FILES IN SUBPROGRAM) -C DDNAME1 - GENERIC NAME & CONTENT -C -C OUTPUT FILES: (DELETE IF NO OUTPUT FILES IN SUBPROGRAM) -C DDNAME2 - GENERIC NAME & CONTENT AS ABOVE -C FT06F001 - INCLUDE IF ANY PRINTOUT -C -C REMARKS: LIST CAVEATS, OTHER HELPFUL HINTS OR INFORMATION -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE AVGSUB(XX,WT,LX,AVX) - - DIMENSION XX(LX),WT(LX) - - AVX=0.0 - N=0 - DO L=1,LX - AVX=AVX+XX(L) - N=N+1 - ENDDO - AVX=AVX/REAL(N) - RETURN - -C----------------------------------------------------------------------- - - ENTRY WTAVRG(XX,WT,LX,AVX) - - AVX=0.0 - W=0.0 - DO L=1,LX - AVX=AVX+XX(L)*WT(L) - W=W+WT(L) - ENDDO - AVX=AVX/W - RETURN - -C----------------------------------------------------------------------- - - ENTRY WTAVGP(XX,WT,LX,AVX) - - AVX=0.0 - W=0.0 - DO L=1,LX - IF(XX(L) .GE. 0.0) THEN - AVX=AVX+XX(L)*WT(L) - W=W+WT(L) - ENDIF - ENDDO - IF(W .NE. 0.0) THEN - AVX=AVX/W - ELSE - AVX=XX(1) - ENDIF - RETURN - -C----------------------------------------------------------------------- - - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: ABORT1 ERROR EXIT ROUTINE -C PRGMMR: S. J. LORD ORG: NP22 DATE: 1991-06-05 -C -C ABSTRACT: ERROR TERMINATION ROUTINE THAT LISTS ROUTINE WHERE -C ERROR OCCURRED AND THE NEAREST STATEMENT NUMBER. -C -C PROGRAM HISTORY LOG: -C 1991-06-05 S. J. LORD -C -C USAGE: CALL ABORT1(ME(KENTRY,ISTMT) -C INPUT ARGUMENT LIST: -C KENTRY - CHARACTER VARIABLE (*7) GIVING PROGRAM OR SUBROUTINE -C - WHERE ERROR OCCURRED. -C ISTMT - STATEMENT NUMBER NEAR WHERE ERROR OCCURRED. -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C -C REMARKS: THIS ROUTINE IS CALLED WHENEVER AN INTERNAL PROBLEM -C TO THE CODE IS FOUND. EXAMPLES ARE CALLING PARAMETERS THAT -C WILL OVERFLOW ARRAY BOUNDARIES AND OBVIOUS INCONSISTENCIES -C IN NUMBERS GENERATED BY THE CODE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE ABORT1(KENTRY,ISTMT) - CHARACTER*7 KENTRY - WRITE(6,10) KENTRY,ISTMT - 10 FORMAT(//21X,'*********************************************'/ - 1 21X,'*********************************************'/ - 2 21X,'**** PROGRAM FAILED DUE TO FATAL ERROR ****'/ - 3 21X,'**** IN ROUTINE ',A,' NEAR ****'/ - 4 21X,'**** STATEMENT NUMBER',I5,'. ****'/ - 5 21X,'*********************************************'/ - 6 21X,'*********************************************') - CALL W3TAGE('SYNDAT_QCTROPCY') - call ERREXIT (20) - END - -C$$$ SUBPROGRAM DOCUMENTATION BLOCK -C . . . . -C SUBPROGRAM: OFILE0 OPENS ALL DATA FILES LISTED IN TEXT FILE -C PRGMMR: S. J. LORD ORG: NP22 DATE: 1991-06-07 -C -C ABSTRACT: OPENS ALL OF THE DATA FILES READ FROM A LIST IN A TEXT -C FILE. -C -C PROGRAM HISTORY LOG: -C 1991-06-07 S. J. LORD -C -C USAGE: CALL OFILE0(IUNTOP,NFILMX,NFTOT,FILNAM) -C INPUT ARGUMENT LIST: -C IUNTOP - UNIT NUMBER OF TEXT FILE ASSOCIATING UNIT NUMBERS -C - WITH FILE NAMES -C FILNAM - FILE NAMES (UPON INPUT ONLY ELEMENT 0 STORED - -C - THE FILE NAME ASSOCIATED WITH UNIT IUNTOP) -C NFILMX - THE MAXIMUM NUMBER OF FILES THAT CAN BE OPENED IN -C - THIS SUBROUTINE -C -C OUTPUT ARGUMENT LIST: -C NFTOT - NUMBER OF DATA FILES OPENED IN THIS SUBROUTINE -C -C INPUT FILES: -C UNIT "IUNTOP" -C - TEXT FILE ASSOCIATING UNIT NUMBERS WITH FILE NAMES -C MANY - READ FROM LIST IN UNIT IUNTOP -C -C OUTPUT FILES: -C UNIT 06 - STANDARD OUTPUT PRINT -C -C REMARKS: NONE. -C -C ATTRIBUTES: -C MACHINE: IBM-SP -C LANGUAGE: FORTRAN 90 -C -C$$$ - SUBROUTINE OFILE0(IUNTOP,NFILMX,NFTOT,FILNAM) - - PARAMETER (IDGMAX=7) - - SAVE - - CHARACTER FILNAM*(*),CFORM*11,CSTAT*7,CACCES*10,MACHIN*10, - 1 CFZ*1,CSTZ*1,CACZ*1,CPOS*10 - - DIMENSION IUNIT(NFILMX),CFORM(NFILMX),CSTAT(NFILMX), - 1 CACCES(NFILMX),CPOS(NFILMX) - DIMENSION FILNAM(0:NFILMX) - - INTEGER(4) IARGC,NDEF - - NF=0 - -C DEFAULT FILENAME IS SPECIFIED BY THE CALLING PROGRAM. -C RUNNING THE PROGRAM WITH ARGUMENTS ALLOWS -C YOU TO SPECIFY THE FILENAM AS FOLLOWS: - - NDEF=IARGC() - - IF(NDEF .LT. 0) CALL GETARG(1_4,FILNAM(0)) - - LENG0=INDEX(FILNAM(0),' ')-1 - WRITE(6,5) NDEF,FILNAM(0)(1:LENG0) - 5 FORMAT(/'...SETTING UP TO READ I/O FILENAMES AND OPEN PARMS.', - 1 ' NDEF,FILNAM(0)=',I2,1X,'...',A,'...') - - OPEN(UNIT=IUNTOP,FORM='FORMATTED',STATUS='OLD',ACCESS= - 1 'SEQUENTIAL',FILE=FILNAM(0)(1:leng0),ERR=95,IOSTAT=IOS) - - READ(IUNTOP,11,ERR=90) MACHIN - 11 FORMAT(A) - WRITE(6,13) MACHIN - 13 FORMAT('...READY TO READ FILES TO OPEN ON MACHINE ',A) - - DO IFILE=1,NFILMX - NF=NF+1 - READ(IUNTOP,21,END=50,ERR=90,IOSTAT=IOS) IUNIT(NF), - 1 CFZ,CSTZ,CACZ,FILNAM(NF) - 21 FORMAT(I2,3(1X,A1),1X,A) - - LENGTH=INDEX(FILNAM(NF),' ')-1 - WRITE(6,23) NF,IUNIT(NF),CFZ,CSTZ,CACZ,FILNAM(NF)(1:LENGTH) - 23 FORMAT('...FOR FILE #',I3,', READING IUNIT, ABBREVIATIONS CFZ', - 1 ',CSTZ,CACZ='/4X,I3,3(1X,A,1X),5x,'...FILENAME=',A,'...') - -c Interpret the abbreviations - - if(CFZ .eq. 'f' .or. CFZ .eq. 'F') then - cform(nf)='FORMATTED' - else if(CFZ .eq. 'u' .or. CFZ .eq. 'U') then - cform(nf)='UNFORMATTED' - else - write(6,25) CFZ - 25 format('******option ',a,' for format is not allowed. Abort') - call abort1(' OFILE0',25) - endif - - if(CSTZ .eq. 'o' .or. CSTZ .eq. 'O') then - cstat(nf)='OLD' - else if(CSTZ .eq. 'n' .or. CSTZ .eq. 'N') then - cstat(nf)='NEW' - else if(CSTZ .eq. 'k' .or. CSTZ .eq. 'K') then - cstat(nf)='UNKNOWN' - else if(CSTZ .eq. 's' .or. CSTZ .eq. 'S') then - cstat(nf)='SCRATCH' - else - write(6,27) CSTZ - 27 format('******option ',a,' for status is not allowed. Abort') - call abort1(' OFILE0',27) - endif - - cpos(nf)=' ' - if(CACZ .eq. 'd' .or. CACZ .eq. 'D') then - cacces(nf)='DIRECT' - else if(CACZ .eq. 'q' .or. CACZ .eq. 'Q') then - cacces(nf)='SEQUENTIAL' - else if(CACZ .eq. 'a' .or. CACZ .eq. 'A') then - cacces(nf)='APPEND' - else if(CACZ .eq. 's' .or. CACZ .eq. 'S') then - cacces(nf)='SEQUENTIAL' - cpos(nf)='APPEND' - else if(CACZ .eq. 't' .or. CACZ .eq. 'T') then - cacces(nf)='DIRECT' - cpos(nf)='APPEND' - else - write(6,29) CACZ - 29 format('******option ',a,' for access is not allowed. Abort') - call abort1(' OFILE0',29) - endif - - IF(CACCES(NF) .NE. 'DIRECT') THEN - if(cpos(nf) .eq. ' ') then - OPEN(UNIT=IUNIT(NF),FORM=cform(nf),STATUS=cstat(nf), - 1 ACCESS=cacces(nf),FILE=FILNAM(NF)(1:LENGTH), - 2 ERR=95,IOSTAT=IOS) - else - open(unit=iunit(nf),form=cform(nf),status=cstat(nf), - 1 access=cacces(nf),position=cpos(nf), - 2 file=filnam(nf)(1:length),err=95,iostat=ios) - endif - ELSE - read(filnam(nf)(length+2:length+2+idgmax-1),37) lrec - 37 format(i7) - write(6,39) lrec - 39 format('...Direct access record length:',i7,'...') - if(cpos(nf) .eq. ' ') then - OPEN(UNIT=IUNIT(NF),FORM=CFORM(NF),STATUS=CSTAT(NF), - 1 ACCESS=CACCES(NF),FILE=FILNAM(NF)(1:LENGTH), - 2 ERR=95,IOSTAT=IOS,RECL=lrec) - else - open(unit=iunit(nf),form=cform(nf),status=cstat(nf), - 1 access=cacces(nf),file=filnam(nf)(1:length), - 2 position=cpos(nf),err=95,iostat=ios,recl=lrec) - endif - ENDIF - ENDDO - - WRITE(6,391) NFILMX - 391 FORMAT('******NUMBER OF FILES TO BE OPENED MEETS OR EXCEEDS ', - 1 'MAXIMUM SET BY PROGRAM (=',I3) - CALL ABORT1(' OFILE0',50) - - 50 CONTINUE - -C WE HAVE DEFINED AND OPENED ALL FILES - - NFTOT=NF-1 - WRITE(6,51) NFTOT,MACHIN - 51 FORMAT(/'...SUCCESSFULLY OPENED ',I3,' FILES ON ',A) - RETURN - - 90 CONTINUE - WRITE(6,91) FILNAM(0)(1:leng0),ios - 91 FORMAT('******ERROR READING OPEN FILE=',A,' error=',i4) - CALL ABORT1(' OFILE0',91) - - 95 CONTINUE - WRITE(6,96) NF,IOS - 96 FORMAT('******ERROR UPON OPENING FILE, NF,IOS=',2I5) - CALL ABORT1(' OFILE0',96) - - END diff --git a/sorc/tave.fd/makefile b/sorc/tave.fd/makefile deleted file mode 100755 index 3ccaf4b87b..0000000000 --- a/sorc/tave.fd/makefile +++ /dev/null @@ -1,25 +0,0 @@ -SHELL= /bin/sh -ISIZE = 4 -RSIZE = 8 -COMP= ifort -##INC = /contrib/nceplibs/nwprod/lib/incmod/g2_d -##LIBS= -L/contrib/nceplibs/nwprod/lib -lw3emc_d -lw3nco_d -lg2_d -lbacio_4 -ljasper -lpng -lz -LDFLAGS= -# DEBUG= -check all -debug all -traceback -FFLAGS= -O2 -g -traceback -I $(INC) -i$(ISIZE) -r$(RSIZE) -# FFLAGS= -O3 -I $(INC) -i$(ISIZE) -r$(RSIZE) - -tave: tave.f - @echo " " - @echo " Compiling the interpolation program....." - $(COMP) $(FFLAGS) $(LDFLAGS) tave.f $(LIBS) -o tave.x - @echo " " - -CMD = tave.x - -clean: - -rm -f *.o *.mod - -install: - mv $(CMD) ../../exec/$(CMD) - diff --git a/sorc/tave.fd/tave.f b/sorc/tave.fd/tave.f deleted file mode 100755 index bbf5263463..0000000000 --- a/sorc/tave.fd/tave.f +++ /dev/null @@ -1,1083 +0,0 @@ - program tave -c -c ABSTRACT: This program averages the temperatures from an input -c grib file and produces an output grib file containing the mean -c temperature in the 300-500 mb layer. For each model and each -c lead time, there will need to be data from 300 to 500 mb in -c 50 mb increments, such that all 5 of these layers then get -c averaged together. -c -c Written by Tim Marchok - - USE params - USE grib_mod - - implicit none - - type(gribfield) :: holdgfld - integer, parameter :: lugb=11,lulv=16,lugi=31,lout=51 - integer, parameter :: nlevsout=1,nlevsin=5 - integer kpds(200),kgds(200) - integer iriret,iogret,kf,iggret,igdret,iidret,gribver,g2_jpdtn - integer iha,iho,iva,irfa,iodret,ifcsthour,iia,iparm - integer ilevs(nlevsin) - real, allocatable :: xinptmp(:,:),xouttmp(:) - logical(1), allocatable :: valid_pt(:),readflag(:) - real xoutlev - - namelist/timein/ifcsthour,iparm,gribver,g2_jpdtn -c - data ilevs /300, 350, 400, 450, 500/ - xoutlev = 401. -c - read (5,NML=timein,END=201) - 201 continue - print *,' ' - print *,'*---------------------------------------------*' - print *,' ' - print *,' +++ Top of tave +++ ' - print *,' ' - print *,'After tave namelist read, input forecast hour= ' - & ,ifcsthour - print *,' input GRIB parm= ',iparm - print *,' GRIB version= ',gribver - print *,' GRIB2 JPDTN= g2_jpdtn= ' - & ,g2_jpdtn - -c ilevs = -999 -c call read_input_levels (lulv,nlevsin,ilevs,iriret) -c -c if (iriret /= 0) then -c print *,' ' -c print *,'!!! RETURN CODE FROM read_input_levels /= 0' -c print *,'!!! RETURN CODE = iriret = ',iriret -c print *,'!!! EXITING....' -c print *,' ' -c goto 899 -c endif - - call open_grib_files (lugb,lugi,lout,gribver,iogret) - if (iogret /= 0) then - print '(/,a35,a5,i4,/)','!!! ERROR: in tave open_grib_files,' - & ,' rc= ',iogret - goto 899 - endif - call getgridinfo (lugb,lugi,kf,kpds,kgds,holdgfld,ifcsthour,iparm - & ,gribver,g2_jpdtn,iggret) - - allocate (xinptmp(kf,nlevsin),stat=iha) - allocate (xouttmp(kf),stat=iho) - allocate (valid_pt(kf),stat=iva) - allocate (readflag(nlevsin),stat=irfa) - if (iha /= 0 .or. iho /= 0 .or. iva /= 0 .or. irfa /= 0) then - print *,' ' - print *,'!!! ERROR in tave allocating arrays.' - print *,'!!! ERROR allocating the xinptmp, readflag, or the' - print *,'!!! valid_pt array, iha= ',iha,' iva= ',iva - print *,'!!! irfa= ',irfa,' iho= ',iho - print *,' ' - goto 899 - endif - - call getdata (lugb,lugi,kf,valid_pt,nlevsin,ilevs - & ,readflag,xinptmp,ifcsthour,iparm,gribver - & ,g2_jpdtn,igdret) - - call average_data (kf,valid_pt,nlevsin,ilevs,readflag - & ,xinptmp,xouttmp,iidret) - - call output_data (lout,kf,kpds,kgds,holdgfld,xouttmp,valid_pt - & ,xoutlev,nlevsout,gribver,ifcsthour,iodret) - - deallocate (xinptmp) - deallocate (xouttmp) - deallocate (valid_pt) - deallocate (readflag) - - 899 continue -c - stop - end -c -c--------------------------------------------------------------------- -c -c--------------------------------------------------------------------- - subroutine read_input_levels (lulv,nlevsin,ilevs,iriret) -c -c ABSTRACT: This subroutine reads in a text file that contains -c the number of input pressure levels for a given model. The -c format of the file goes like this, from upper levels to -c lower, for example: -c -c 1 200 -c 2 400 -c 3 500 -c 4 700 -c 5 850 -c 6 925 -c 7 1000 -c -c - implicit none - - integer lulv,nlevsin,iriret,inplev,ict,lvix - integer ilevs(nlevsin) -c - iriret=0 - ict = 0 - do while (.true.) - - print *,'Top of while loop in tave read_input_levels' - - read (lulv,85,end=130) lvix,inplev - - if (inplev > 0 .and. inplev <= 1000) then - ict = ict + 1 - ilevs(ict) = inplev - else - print *,' ' - print *,'!!! ERROR: Input level not between 0 and 1000' - print *,'!!! in tave. inplev= ',inplev - print *,'!!! STOPPING EXECUTION' - STOP 91 - endif - - print *,'tave readloop, ict= ',ict,' inplev= ',inplev - - enddo - - 85 format (i4,1x,i4) - 130 continue - - nlevsin = ict - - print *,' ' - print *,'Total number of tave levels read in = ',nlevsin -c - return - end - -c--------------------------------------------------------------------- -c -c--------------------------------------------------------------------- - subroutine getgridinfo (lugb,lugi,kf,kpds,kgds,holdgfld,ifcsthour - & ,iparm,gribver,g2_jpdtn,iggret) -c -c ABSTRACT: The purpose of this subroutine is just to get the max -c values of i and j and the dx and dy grid spacing intervals for the -c grid to be used in the rest of the program. So just read the -c grib file to get the lon and lat data. Also, get the info for -c the data grids boundaries. This boundary information will be -c used later in the tracking algorithm, and is accessed via Module -c grid_bounds. -c -C INPUT: -C lugb The Fortran unit number for the GRIB data file -C lugi The Fortran unit number for the GRIB index file -c ifcsthour input forecast hour to search for -c iparm input grib parm to search for -c gribver integer (1 or 2) to indicate if using GRIB1 / GRIB2 -c g2_jpdtn If GRIB2 data being read, this is the value for JPDTN -c that is input to getgb2. -C -C OUTPUT: -c kf Number of gridpoints on the grid -c kpds pds array for a GRIB1 record -c kgds gds array for a GRIB1 record -c holdgfld info for a GRIB2 record -c -C iggret The return code from this subroutine -c - USE params - USE grib_mod - - implicit none -c - CHARACTER(len=8) :: ctemp - CHARACTER(len=80) :: ftemplate - type(gribfield) :: gfld,prevfld,holdgfld - integer,dimension(200) :: jids,jpdt,jgdt - logical(1), allocatable :: lb(:) - integer, parameter :: jf=4000000 - integer jpds(200),jgds(200) - integer kpds(200),kgds(200) - integer :: listsec1(13) - integer ila,ifa,iret,ifcsthour,imax,jmax,jskp,jdisc - integer lugb,lugi,kf,j,k,iggret,iparm,gribver,g2_jpdtn - integer jpdtn,jgdtn,npoints,icount,ipack,krec - integer :: listsec0(2)=(/0,2/) - integer :: igds(5)=(/0,0,0,0,0/),previgds(5) - integer :: idrstmpl(200) - integer :: currlen=1000000 - logical :: unpack=.true. - logical :: open_grb=.false. - real, allocatable :: f(:) - real dx,dy -c - iggret = 0 - - allocate (lb(jf),stat=ila) - allocate (f(jf),stat=ifa) - if (ila /= 0 .or. ifa /= 0) then - print *,' ' - print *,'!!! ERROR in tave.' - print *,'!!! ERROR in getgridinfo allocating either lb or f' - print *,'!!! ila = ',ila,' ifa= ',ifa - iggret = 97 - return - endif - - if (gribver == 2) then - - ! Search for a record from a GRIB2 file - - ! - ! --- Initialize Variables --- - ! - - gfld%idsect => NULL() - gfld%local => NULL() - gfld%list_opt => NULL() - gfld%igdtmpl => NULL() - gfld%ipdtmpl => NULL() - gfld%coord_list => NULL() - gfld%idrtmpl => NULL() - gfld%bmap => NULL() - gfld%fld => NULL() - - jdisc=0 ! Meteorological products - jids=-9999 - jpdtn=g2_jpdtn ! 0 = analysis or forecast; 1 = ens fcst - jgdtn=0 ! lat/lon grid - jgdt=-9999 - jpdt=-9999 - - npoints=0 - icount=0 - jskp=0 - -c Search for Temperature by production template 4.0 - - JPDT(1:15)=(/ -9999,-9999,-9999,-9999,-9999,-9999,-9999,-9999 - & ,-9999,-9999,-9999,-9999,-9999,-9999,-9999/) - - call getgb2(lugb,lugi,jskp,jdisc,jids,jpdtn,jpdt,jgdtn,jgdt - & ,unpack,krec,gfld,iret) - if ( iret.ne.0) then - print *,' ' - print *,' ERROR: getgb2 error in getgridinfo = ',iret - endif - -c Determine packing information from GRIB2 file -c The default packing is 40 JPEG 2000 - - ipack = 40 - - print *,' gfld%idrtnum = ', gfld%idrtnum - - ! Set DRT info ( packing info ) - if ( gfld%idrtnum.eq.0 ) then ! Simple packing - ipack = 0 - elseif ( gfld%idrtnum.eq.2 ) then ! Complex packing - ipack = 2 - elseif ( gfld%idrtnum.eq.3 ) then ! Complex & spatial packing - ipack = 31 - elseif ( gfld%idrtnum.eq.40.or.gfld%idrtnum.eq.15 ) then - ! JPEG 2000 packing - ipack = 40 - elseif ( gfld%idrtnum.eq.41 ) then ! PNG packing - ipack = 41 - endif - - print *,'After check of idrtnum, ipack= ',ipack - - print *,'Number of gridpts= gfld%ngrdpts= ',gfld%ngrdpts - print *,'Number of elements= gfld%igdtlen= ',gfld%igdtlen - print *,'PDT num= gfld%ipdtnum= ',gfld%ipdtnum - print *,'GDT num= gfld%igdtnum= ',gfld%igdtnum - - imax = gfld%igdtmpl(8) - jmax = gfld%igdtmpl(9) - dx = float(gfld%igdtmpl(17))/1.e6 - dy = float(gfld%igdtmpl(17))/1.e6 - kf = gfld%ngrdpts - - holdgfld = gfld - - else - - ! Search for a record from a GRIB1 file - - jpds = -1 - jgds = -1 - - j=0 - - jpds(5) = iparm ! Get a temperature record - jpds(6) = 100 ! Get a record on a standard pressure level - jpds(14) = ifcsthour - - call getgb(lugb,lugi,jf,j,jpds,jgds, - & kf,k,kpds,kgds,lb,f,iret) - - if (iret.ne.0) then - print *,' ' - print *,'!!! ERROR in tave getgridinfo calling getgb' - print *,'!!! Return code from getgb = iret = ',iret - iggret = iret - return - else - iggret=0 - imax = kgds(2) - jmax = kgds(3) - dx = float(kgds(9))/1000. - dy = float(kgds(10))/1000. - endif - - endif - - print *,' ' - print *,'In getgridinfo, grid dimensions follow:' - print *,'imax= ',imax,' jmax= ',jmax - print *,' dx= ',dx,' dy= ',dy - print *,'number of gridpoints = ',kf - - deallocate (lb); deallocate(f) - - return - end - -c--------------------------------------------------------------------- -c -c--------------------------------------------------------------------- - subroutine getdata (lugb,lugi,kf,valid_pt,nlevsin,ilevs - & ,readflag,xinptmp,ifcsthour,iparm,gribver - & ,g2_jpdtn,igdret) -c -c ABSTRACT: This subroutine reads the input GRIB file for the -c tracked parameters. - - USE params - USE grib_mod - - implicit none -c - type(gribfield) :: gfld,prevfld - CHARACTER(len=8) :: ctemp,pabbrev - CHARACTER(len=80) :: ftemplate - integer,dimension(200) :: jids,jpdt,jgdt - integer, parameter :: jf=4000000 - integer ilevs(nlevsin) - integer jpds(200),jgds(200),kpds(200),kgds(200) - integer lugb,lugi,kf,nlevsin,igdret,iparm,jskp,jdisc - integer jpdtn,jgdtn,npoints,icount,ipack,krec - integer i,j,k,ict,np,lev,ifcsthour,iret,gribver,g2_jpdtn - integer pdt_4p0_vert_level,pdt_4p0_vtime,mm - integer :: listsec0(2)=(/0,2/) - integer :: listsec1(13) - integer :: igds(5)=(/0,0,0,0,0/),previgds(5) - integer :: idrstmpl(200) - integer :: currlen=1000000 - logical :: unpack=.true. - logical :: open_grb=.false. - logical(1) valid_pt(kf),lb(kf),readflag(nlevsin) - real f(kf),xinptmp(kf,nlevsin),xtemp(kf) - real dmin,dmax,firstval,lastval -c - igdret=0 - ict = 0 - - print *,'At top of getdata, ifcsthour= ',ifcsthour - - level_loop: do lev = 1,nlevsin - - print *,' ' - print *,'------------------------------------------------' - print *,'In tave getdata read loop, lev= ',lev,' level= ' - & ,ilevs(lev) - - if (gribver == 2) then - - ! - ! --- Initialize Variables --- - ! - - gfld%idsect => NULL() - gfld%local => NULL() - gfld%list_opt => NULL() - gfld%igdtmpl => NULL() - gfld%ipdtmpl => NULL() - gfld%coord_list => NULL() - gfld%idrtmpl => NULL() - gfld%bmap => NULL() - gfld%fld => NULL() - - jdisc=0 ! Meteorological products - jids=-9999 - jpdtn=g2_jpdtn ! 0 = analysis or forecast; 1 = ens fcst - jgdtn=0 ! lat/lon grid - jgdt=-9999 - jpdt=-9999 - - npoints=0 - icount=0 - jskp=0 - -c Search for input parameter by production template 4.0. This -c tave program is used primarily for temperature, but still we -c will leave that as a variable and not-hard wire it in case we -c choose to average something else in the future. - - if (iparm == 11) then - - ! Set defaults for JPDT, then override in array - ! assignments below... - - JPDT(1:15)=(/ -9999,-9999,-9999,-9999,-9999,-9999,-9999 - & ,-9999,-9999,-9999,-9999,-9999,-9999,-9999,-9999/) - JPDT(1) = 0 ! Param category from Table 4.1 - JPDT(2) = 0 ! Param number from Table 4.2 - JPDT(9) = ifcsthour - JPDT(10) = 100 ! Isobaric surface requested (Table 4.5) - JPDT(12) = ilevs(lev) * 100 ! value of specific level - - print *,'In getdata, just set JPDT inputs....' - - endif - - print *,'before getgb2 call, value of unpack = ',unpack - - do mm = 1,15 - print *,'tave getdata mm= ',mm,' JPDT(mm)= ',JPDT(mm) - enddo - - call getgb2(lugb,lugi,jskp,jdisc,jids,jpdtn,jpdt,jgdtn,jgdt - & ,unpack,krec,gfld,iret) - - print *,'iret from getgb2 in getdata = ',iret - - print *,'after getgb2 call, value of unpacked = ' - & ,gfld%unpacked - - print *,'after getgb2 call, gfld%ndpts = ',gfld%ndpts - print *,'after getgb2 call, gfld%ibmap = ',gfld%ibmap - - if ( iret == 0) then - -c Determine packing information from GRIB2 file -c The default packing is 40 JPEG 2000 - - ipack = 40 - - print *,' gfld%idrtnum = ', gfld%idrtnum - - ! Set DRT info ( packing info ) - if ( gfld%idrtnum.eq.0 ) then ! Simple packing - ipack = 0 - elseif ( gfld%idrtnum.eq.2 ) then ! Complex packing - ipack = 2 - elseif ( gfld%idrtnum.eq.3 ) then ! Complex & spatial - & ! packing - ipack = 31 - elseif ( gfld%idrtnum.eq.40.or.gfld%idrtnum.eq.15 ) then - ! JPEG 2000 packing - ipack = 40 - elseif ( gfld%idrtnum.eq.41 ) then ! PNG packing - ipack = 41 - endif - - print *,'After check of idrtnum, ipack= ',ipack - - print *,'Number of gridpts= gfld%ngrdpts= ',gfld%ngrdpts - print *,'Number of elements= gfld%igdtlen= ',gfld%igdtlen - print *,'GDT num= gfld%igdtnum= ',gfld%igdtnum - - kf = gfld%ndpts ! Number of gridpoints returned from read - - do np = 1,kf - xinptmp(np,lev) = gfld%fld(np) - xtemp(np) = gfld%fld(np) - if (gfld%ibmap == 0) then - valid_pt(np) = gfld%bmap(np) - else - valid_pt(np) = .true. - endif - enddo - - readflag(lev) = .TRUE. -c call bitmapchk(kf,gfld%bmap,gfld%fld,dmin,dmax) - call bitmapchk(kf,valid_pt,xtemp,dmin,dmax) - - if (ict == 0) then -c do np = 1,kf -c valid_pt(np) = gfld%bmap(np) -c enddo - ict = ict + 1 - endif - - firstval=gfld%fld(1) - lastval=gfld%fld(kf) - - print *,' ' - print *,' SECTION 0: discipl= ',gfld%discipline - & ,' gribver= ',gfld%version - - print *,' ' - print *,' SECTION 1: ' - - do j = 1,gfld%idsectlen - print *,' sect1, j= ',j,' gfld%idsect(j)= ' - & ,gfld%idsect(j) - enddo - - if ( associated(gfld%local).AND.gfld%locallen.gt.0) then - print *,' ' - print *,' SECTION 2: ',gfld%locallen,' bytes' - else - print *,' ' - print *,' SECTION 2 DOES NOT EXIST IN THIS RECORD' - endif - - print *,' ' - print *,' SECTION 3: griddef= ',gfld%griddef - print *,' ngrdpts= ',gfld%ngrdpts - print *,' numoct_opt= ',gfld%numoct_opt - print *,' interp_opt= ',gfld%interp_opt - print *,' igdtnum= ',gfld%igdtnum - print *,' igdtlen= ',gfld%igdtlen - - print *,' ' - print '(a17,i3,a2)',' GRID TEMPLATE 3.',gfld%igdtnum,': ' - do j=1,gfld%igdtlen - print *,' j= ',j,' gfld%igdtmpl(j)= ',gfld%igdtmpl(j) - enddo - - print *,' ' - print *,' PDT num (gfld%ipdtnum) = ',gfld%ipdtnum - print *,' ' - print '(a20,i3,a2)',' PRODUCT TEMPLATE 4.',gfld%ipdtnum,': ' - do j=1,gfld%ipdtlen - print *,' sect 4 j= ',j,' gfld%ipdtmpl(j)= ' - & ,gfld%ipdtmpl(j) - enddo - -c Print out values for data representation type - - print *,' ' - print '(a21,i3,a2)',' DATA REP TEMPLATE 5.',gfld%idrtnum - & ,': ' - do j=1,gfld%idrtlen - print *,' sect 5 j= ',j,' gfld%idrtmpl(j)= ' - & ,gfld%idrtmpl(j) - enddo - - pdt_4p0_vtime = gfld%ipdtmpl(9) - pdt_4p0_vert_level = gfld%ipdtmpl(12) - -c Get parameter abbrev for record that was retrieved - - pabbrev=param_get_abbrev(gfld%discipline,gfld%ipdtmpl(1) - & ,gfld%ipdtmpl(2)) - - print *,' ' - write (6,131) - 131 format (' rec# param level byy bmm bdd bhh ' - & ,'fhr npts firstval lastval minval ' - & ,' maxval') - print '(i5,3x,a8,2x,6i5,2x,i8,4g12.4)' - & ,krec,pabbrev,pdt_4p0_vert_level/100,gfld%idsect(6) - & ,gfld%idsect(7),gfld%idsect(8),gfld%idsect(9) - & ,pdt_4p0_vtime,gfld%ndpts,firstval,lastval,dmin,dmax - -c do np = 1,kf -c xinptmp(np,lev) = gfld%fld(np) -c enddo - - else - - print *,' ' - print *,'!!! ERROR: GRIB2 TAVE READ IN GETDATA FAILED FOR ' - & ,'LEVEL LEV= ',LEV - print *,' ' - - readflag(lev) = .FALSE. - - do np = 1,kf - xinptmp(np,lev) = -99999.0 - enddo - - endif - - else - - ! Reading a GRIB1 file.... - - jpds = -1 - jgds = -1 - j=0 - - jpds(5) = iparm ! parameter id for temperature - jpds(6) = 100 ! level id to indicate a pressure level - jpds(7) = ilevs(lev) ! actual level of the layer - jpds(14) = ifcsthour ! lead time to search for - - call getgb (lugb,lugi,jf,j,jpds,jgds, - & kf,k,kpds,kgds,lb,f,iret) - - print *,' ' - print *,'After tave getgb call, j= ',j,' k= ',k,' level= ' - & ,ilevs(lev),' iret= ',iret - - if (iret == 0) then - - readflag(lev) = .TRUE. - call bitmapchk(kf,lb,f,dmin,dmax) - - if (ict == 0) then - do np = 1,kf - valid_pt(np) = lb(np) - enddo - ict = ict + 1 - endif - - write (6,31) - 31 format (' rec# parm# levt lev byy bmm bdd bhh fhr ' - & ,'npts minval maxval') - print '(i4,2x,8i5,i8,2g12.4)', - & k,(kpds(i),i=5,11),kpds(14),kf,dmin,dmax - - do np = 1,kf - xinptmp(np,lev) = f(np) - enddo - - else - - print *,' ' - print *,'!!! ERROR: TAVE READ FAILED FOR LEVEL LEV= ',LEV - print *,' ' - - readflag(lev) = .FALSE. - - do np = 1,kf - xinptmp(np,lev) = -99999.0 - enddo - - endif - - endif - - enddo level_loop -c - return - end -c -c----------------------------------------------------------------------- -c -c----------------------------------------------------------------------- - subroutine average_data (kf,valid_pt,nlevsin,ilevs,readflag - & ,xinptmp,xouttmp,iidret) -c -c ABSTRACT: This routine averages data between 300 and 500 mb to get -c a mean temperature at 400 mb. The input data should be at 50 mb -c resolution, giving 5 input levels in total. - - implicit none - - logical(1) valid_pt(kf),readflag(nlevsin) - integer ilevs(nlevsin) - integer nlevsin,kf,k,n,iidret - real xinptmp(kf,nlevsin),xouttmp(kf) - real xinlevs_p(nlevsin),xinlevs_lnp(nlevsin) - real xsum -c - iidret=0 - print *,'*----------------------------------------------*' - print *,' Top of average data routine' - print *,'*----------------------------------------------*' - print *,' ' - - do n = 1,kf - xsum = 0.0 -c print *,' ' - do k = 1,nlevsin - xsum = xsum + xinptmp(n,k) -c print *,'n= ',n,' k= ',k,' xsum= ',xsum - enddo - xouttmp(n) = xsum / float(nlevsin) -c print *,'n= ',n,' mean= ',xouttmp(n) - enddo -c - return - end -c -c---------------------------------------------------------------------- -c -c---------------------------------------------------------------------- - subroutine output_data (lout,kf,kpds,kgds,holdgfld,xouttmp - & ,valid_pt,xoutlev,nlevsout,gribver,ifcsthour,iodret) -c -c ABSTRACT: This routine writes out the output data on the -c specified output pressure levels. - - USE params - USE grib_mod - - implicit none - - CHARACTER(len=1),pointer,dimension(:) :: cgrib -c CHARACTER(len=1),pointer,allocatable :: cgrib(:) - type(gribfield) :: holdgfld - logical(1) valid_pt(kf),bmap(kf) - integer lout,kf,lugb,lugi,iodret,nlevsout,igoret,ipret,lev - integer gribver,ierr,ipack,lengrib,npoints,newlen,idrsnum - integer numcoord,ica,n,j,ifcsthour - integer :: idrstmpl(200) - integer :: currlen=1000000 - integer :: listsec0(2)=(/0,2/) - integer :: igds(5)=(/0,0,0,0,0/),previgds(5) - integer kpds(200),kgds(200) - integer(4), parameter::idefnum=1 - integer(4) ideflist(idefnum),ibmap - real xouttmp(kf),xoutlev,coordlist -c - iodret=0 - call baopenw (lout,"fort.51",igoret) - print *,'baopenw: igoret= ',igoret - - if (igoret /= 0) then - print *,' ' - print *,'!!! ERROR in sub output_data opening' - print *,'!!! **OUTPUT** grib file. baopenw return codes:' - print *,'!!! grib file 1 return code = igoret = ',igoret - STOP 95 - return - endif - - if (gribver == 2) then - - ! Write data out as a GRIB2 message.... - - allocate(cgrib(currlen),stat=ica) - if (ica /= 0) then - print *,' ' - print *,'ERROR in output_data allocating cgrib' - print *,'ica= ',ica - iodret=95 - return - endif - - - ! Ensure that cgrib array is large enough - - if (holdgfld%ifldnum == 1 ) then ! start new GRIB2 message - npoints=holdgfld%ngrdpts - else - npoints=npoints+holdgfld%ngrdpts - endif - newlen=npoints*4 - if ( newlen.gt.currlen ) then -ccc if (allocated(cgrib)) deallocate(cgrib) - if (associated(cgrib)) deallocate(cgrib) - allocate(cgrib(newlen),stat=ierr) -c call realloc (cgrib,currlen,newlen,ierr) - if (ierr == 0) then - print *,' ' - print *,'re-allocate for large grib msg: ' - print *,' currlen= ',currlen - print *,' newlen= ',newlen - currlen=newlen - else - print *,'ERROR returned from 2nd allocate cgrib = ',ierr - stop 95 - endif - endif - - ! Create new GRIB Message - listsec0(1)=holdgfld%discipline - listsec0(2)=holdgfld%version - - print *,'output, holdgfld%idsectlen= ',holdgfld%idsectlen - do j = 1,holdgfld%idsectlen - print *,' sect1, j= ',j,' holdgfld%idsect(j)= ' - & ,holdgfld%idsect(j) - enddo - - call gribcreate(cgrib,currlen,listsec0,holdgfld%idsect,ierr) - if (ierr.ne.0) then - write(6,*) ' ERROR creating new GRIB2 field (gribcreate)= ' - & ,ierr - stop 95 - endif - - previgds=igds - igds(1)=holdgfld%griddef - igds(2)=holdgfld%ngrdpts - igds(3)=holdgfld%numoct_opt - igds(4)=holdgfld%interp_opt - igds(5)=holdgfld%igdtnum - - if (igds(3) == 0) then - ideflist = 0 - endif - - call addgrid (cgrib,currlen,igds,holdgfld%igdtmpl - & ,holdgfld%igdtlen,ideflist,idefnum,ierr) - - if (ierr.ne.0) then - write(6,*) ' ERROR from addgrid adding GRIB2 grid = ',ierr - stop 95 - endif - - - holdgfld%ipdtmpl(12) = int(xoutlev) * 100 - - ipack = 40 - idrsnum = ipack - idrstmpl = 0 - - idrstmpl(2)= holdgfld%idrtmpl(2) - idrstmpl(3)= holdgfld%idrtmpl(3) - idrstmpl(6)= 0 - idrstmpl(7)= 255 - - numcoord=0 - coordlist=0.0 ! Only needed for hybrid vertical coordinate, - ! not here, so set it to 0.0 - - ! 0 - A bit map applies to this product and is specified in - ! this section - ! 255 - A bit map does not apply to this product - ibmap=255 ! Bitmap indicator (see Code Table 6.0) - - print *,' ' - print *,'output, holdgfld%ipdtlen= ',holdgfld%ipdtlen - do n = 1,holdgfld%ipdtlen - print *,'output, n= ',n,' holdgfld%ipdtmpl= ' - & ,holdgfld%ipdtmpl(n) - enddo - - print *,'output, kf= ',kf - -c if (ifcsthour < 6) then -c do n = 1,kf -cc print *,'output, n= ',n,' xouttmp(n)= ',xouttmp(n) -c write (92,151) n,xouttmp(n) -c 151 format (1x,'n= ',i6,' xouttmp(n)= ',f10.4) -c enddo -c endif - - call addfield (cgrib,currlen,holdgfld%ipdtnum,holdgfld%ipdtmpl - & ,holdgfld%ipdtlen,coordlist - & ,numcoord - & ,idrsnum,idrstmpl,200 - & ,xouttmp,kf,ibmap,bmap,ierr) - - if (ierr /= 0) then - write(6,*) ' ERROR from addfield adding GRIB2 data = ',ierr - stop 95 - endif - -! Finalize GRIB message after all grids -! and fields have been added. It adds the End Section ( "7777" ) - - call gribend(cgrib,currlen,lengrib,ierr) - call wryte(lout,lengrib,cgrib) - - if (ierr == 0) then - print *,' ' - print *,'+++ GRIB2 write successful. ' - print *,' Len of message = currlen= ',currlen - print *,' Len of entire GRIB2 message = lengrib= ',lengrib - else - print *,' ERROR from gribend writing GRIB2 msg = ',ierr - stop 95 - endif - - else - - ! Write data out as a GRIB1 message.... - - kpds(6) = 100 - - do lev = 1,nlevsout - - kpds(7) = int(xoutlev) - - print *,'tave: just before call to putgb, kf= ',kf - - print *,'output, kf= ',kf -c do n = 1,kf -c print *,'output, n= ',n,' xouttmp(n)= ',xouttmp(n) -c enddo - - if (ifcsthour < 6) then - do n = 1,kf -c print *,'output, n= ',n,' xouttmp(n)= ',xouttmp(n) - write (91,161) n,xouttmp(n) - 161 format (1x,'n= ',i6,' xouttmp(n)= ',f10.4) - enddo - endif - - call putgb (lout,kf,kpds,kgds,valid_pt,xouttmp,ipret) - print *,'tave: just after call to putgb, kf= ',kf - if (ipret == 0) then - print *,' ' - print *,'+++ IPRET = 0 after call to putgb' - print *,' ' - else - print *,' ' - print *,'!!!!!! ERROR in tave' - print *,'!!!!!! ERROR: IPRET NE 0 AFTER CALL TO PUTGB !!!' - print *,'!!!!!! Level index= ',lev - print *,'!!!!!! pressure= ',xoutlev - print *,' ' - endif - - write(*,980) kpds(1),kpds(2) - write(*,981) kpds(3),kpds(4) - write(*,982) kpds(5),kpds(6) - write(*,983) kpds(7),kpds(8) - write(*,984) kpds(9),kpds(10) - write(*,985) kpds(11),kpds(12) - write(*,986) kpds(13),kpds(14) - write(*,987) kpds(15),kpds(16) - write(*,988) kpds(17),kpds(18) - write(*,989) kpds(19),kpds(20) - write(*,990) kpds(21),kpds(22) - write(*,991) kpds(23),kpds(24) - write(*,992) kpds(25) - write(*,880) kgds(1),kgds(2) - write(*,881) kgds(3),kgds(4) - write(*,882) kgds(5),kgds(6) - write(*,883) kgds(7),kgds(8) - write(*,884) kgds(9),kgds(10) - write(*,885) kgds(11),kgds(12) - write(*,886) kgds(13),kgds(14) - write(*,887) kgds(15),kgds(16) - write(*,888) kgds(17),kgds(18) - write(*,889) kgds(19),kgds(20) - write(*,890) kgds(21),kgds(22) - - enddo - - 980 format(' kpds(1) = ',i7,' kpds(2) = ',i7) - 981 format(' kpds(3) = ',i7,' kpds(4) = ',i7) - 982 format(' kpds(5) = ',i7,' kpds(6) = ',i7) - 983 format(' kpds(7) = ',i7,' kpds(8) = ',i7) - 984 format(' kpds(9) = ',i7,' kpds(10) = ',i7) - 985 format(' kpds(11) = ',i7,' kpds(12) = ',i7) - 986 format(' kpds(13) = ',i7,' kpds(14) = ',i7) - 987 format(' kpds(15) = ',i7,' kpds(16) = ',i7) - 988 format(' kpds(17) = ',i7,' kpds(18) = ',i7) - 989 format(' kpds(19) = ',i7,' kpds(20) = ',i7) - 990 format(' kpds(21) = ',i7,' kpds(22) = ',i7) - 991 format(' kpds(23) = ',i7,' kpds(24) = ',i7) - 992 format(' kpds(25) = ',i7) - 880 format(' kgds(1) = ',i7,' kgds(2) = ',i7) - 881 format(' kgds(3) = ',i7,' kgds(4) = ',i7) - 882 format(' kgds(5) = ',i7,' kgds(6) = ',i7) - 883 format(' kgds(7) = ',i7,' kgds(8) = ',i7) - 884 format(' kgds(9) = ',i7,' kgds(10) = ',i7) - 885 format(' kgds(11) = ',i7,' kgds(12) = ',i7) - 886 format(' kgds(13) = ',i7,' kgds(14) = ',i7) - 887 format(' kgds(15) = ',i7,' kgds(16) = ',i7) - 888 format(' kgds(17) = ',i7,' kgds(18) = ',i7) - 889 format(' kgds(19) = ',i7,' kgds(20) = ',i7) - 890 format(' kgds(20) = ',i7,' kgds(22) = ',i7) - - endif -c - return - end -c -c----------------------------------------------------------------------- -c -c----------------------------------------------------------------------- - subroutine open_grib_files (lugb,lugi,lout,gribver,iret) - -C ABSTRACT: This subroutine must be called before any attempt is -C made to read from the input GRIB files. The GRIB and index files -C are opened with a call to baopenr. This call to baopenr was not -C needed in the cray version of this program (the files could be -C opened with a simple Cray assign statement), but the GRIB-reading -C utilities on the SP do require calls to this subroutine (it has -C something to do with the GRIB I/O being done in C on the SP, and -C the C I/O package needs an explicit open statement). -C -C INPUT: -C lugb The Fortran unit number for the GRIB data file -C lugi The Fortran unit number for the GRIB index file -C lout The Fortran unit number for the output grib file -c gribver integer (1 or 2) to indicate if using GRIB1 / GRIB2 -C -C OUTPUT: -C iret The return code from this subroutine - - implicit none - - character fnameg*7,fnamei*7,fnameo*7 - integer iret,gribver,lugb,lugi,lout,igoret,iioret,iooret - - iret=0 - fnameg(1:5) = "fort." - fnamei(1:5) = "fort." - fnameo(1:5) = "fort." - write(fnameg(6:7),'(I2)') lugb - write(fnamei(6:7),'(I2)') lugi - write(fnameo(6:7),'(I2)') lout - call baopenr (lugb,fnameg,igoret) - call baopenr (lugi,fnamei,iioret) - call baopenw (lout,fnameo,iooret) - - print *,' ' - print *,'tave baopen: igoret= ',igoret,' iioret= ',iioret - & ,' iooret= ',iooret - - if (igoret /= 0 .or. iioret /= 0 .or. iooret /= 0) then - print *,' ' - print *,'!!! ERROR in tave' - print *,'!!! ERROR in sub open_grib_files opening grib file' - print *,'!!! or grib index file. baopen return codes:' - print *,'!!! grib file return code = igoret = ',igoret - print *,'!!! index file return code = iioret = ',iioret - print *,'!!! output file return code = iooret = ',iooret - iret = 93 - return - endif - - return - end -c -c------------------------------------------------------------------- -c -c------------------------------------------------------------------- - subroutine bitmapchk (n,ld,d,dmin,dmax) -c -c This subroutine checks the bitmap for non-existent data values. -c Since the data from the regional models have been interpolated -c from either a polar stereographic or lambert conformal grid -c onto a lat/lon grid, there will be some gridpoints around the -c edges of this lat/lon grid that have no data; these grid -c points have been bitmapped out by Mark Iredell's interpolater. -c To provide another means of checking for invalid data points -c later in the program, set these bitmapped data values to a -c value of -999.0. The min and max of this array are also -c returned if a user wants to check for reasonable values. -c - logical(1) ld - dimension ld(n),d(n) -c - dmin=1.E15 - dmax=-1.E15 -c - do i=1,n - if (ld(i)) then - dmin=min(dmin,d(i)) - dmax=max(dmax,d(i)) - else - d(i) = -999.0 - endif - enddo -c - return - end diff --git a/sorc/tocsbufr.fd/makefile_module b/sorc/tocsbufr.fd/makefile_module deleted file mode 100755 index b6310ff765..0000000000 --- a/sorc/tocsbufr.fd/makefile_module +++ /dev/null @@ -1,82 +0,0 @@ -SHELL=/bin/sh -# -# This makefile was produced by /usr/bin/fmgen at 11:21:07 AM on 10/28/94 -# If it is invoked by the command line -# make -f makefile -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable named a.out. -# -# If it is invoked by the command line -# make -f makefile a.out.prof -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable which profiles -# named a.out.prof. -# -# To remove all the objects but leave the executables use the command line -# make -f makefile clean -# -# To remove everything but the source files use the command line -# make -f makefile clobber -# -# To remove the source files created by /usr/bin/fmgen and this makefile -# use the command line -# make -f makefile void -# -# The parameters SRCS and OBJS should not need to be changed. If, however, -# you need to add a new module add the name of the source module to the -# SRCS parameter and add the name of the resulting object file to the OBJS -# parameter. The new modules are not limited to fortran, but may be C, YACC, -# LEX, or CAL. An explicit rule will need to be added for PASCAL modules. -# -SRCS= tocsbufr.f - -OBJS= tocsbufr.o - -# Tunable parameters -# -# FC Name of the fortran compiling system to use -# LDFLAGS Flags to the loader -# LIBS List of libraries -# CMD Name of the executable -# PROFLIB Library needed for profiling -# -FC = $(myFC) -LDFLAGS = $(myFCFLAGS) -LIBS = $(W3EMC_LIB4) \ - $(W3NCO_LIB4) \ - $(BUFR_LIB4) \ - $(BACIO_LIB4) \ - $(SP_LIB4) \ - $(SIGIO_LIB4) -CMD = ../../exec/tocsbufr -PROFLIB = -lprof - -# To perform the default compilation, use the first line -# To compile with flowtracing turned on, use the second line -# To compile giving profile additonal information, use the third line -# WARNING: SIMULTANEOUSLY PROFILING AND FLOWTRACING IS NOT RECOMMENDED -FFLAGS = $(FFLAGSM) -#FFLAGS = -F -#FFLAGS = -Wf"-ez" - -# Lines from here on down should not need to be changed. They are the -# actual rules which make uses to build a.out. -# -all: $(CMD) - -$(CMD): $(OBJS) - $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS) - -# Make the profiled version of the command and call it a.out.prof -# -$(CMD).prof: $(OBJS) - $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(PROFLIB) $(LIBS) - -clean: - -rm -f $(OBJS) - -clobber: clean - -rm -f $(CMD) $(CMD).prof - -void: clobber - -rm -f $(SRCS) makefile diff --git a/sorc/tocsbufr.fd/tocsbufr.f b/sorc/tocsbufr.fd/tocsbufr.f deleted file mode 100755 index 0f1914cd1a..0000000000 --- a/sorc/tocsbufr.fd/tocsbufr.f +++ /dev/null @@ -1,272 +0,0 @@ - PROGRAM TOCSBUFR -C$$$ MAIN PROGRAM DOCUMENTATION BLOCK -C . . . . -C MAIN PROGRAM: TOCSBUFR -C PRGMMR: GILBERT ORG: NP11 DATE: 2004-02-23 -C -C ABSTRACT: Reads each BUFR message from a standard fortran blocked (f77) -C file and adds a TOC -C Flag Field separator block and WMO Header in front of each BUFR -C field, and writes them out to a new file. The output file -C is in the format required for TOC's FTP Input Service, which -C can be used to disseminate the BUFR messages. -C This service is described at http://weather.gov/tg/ftpingest.html. -C -C TOCSBUFR contains two options that are selected using -C a namelist on unit 5 ( see INPUT FILES below ): -C 1) The specified WMO HEADER can be added to each BUFR -C message in the file OR once at the beginning of the -C file. -C 2) The BUFR messages can be used "as is", or if they -C in NCEP format they can be "standardized" for external -C users. -C -C PROGRAM HISTORY LOG: -C 2001-03-01 Gilbert modified from WMOGRIB -C 2004-02-23 Gilbert modified from WMOBUFR to write out BUFR -C messages in the NTC/FTP Input Service format -C instead of the old STATFILE format. -C 2005-04-07 Gilbert This version was created from original program -C TOCBUFR. A new more thorough "standardizing" -C routine is being used to create WMO standard -C BUFR messages for AWIPS. -C 2009-06-16 J. Ator The program was modified in response to BUFRLIB -C changes, including a change to the WRITSA call -C sequence. Also added a call to MAXOUT to stop -C BUFR messages larger than 10k bytes from being -C truncated when standardizing. The program can -C now standardize BUFR messages as large as the -C MAXOUT limit without any loss of data. -C 2012-12-06 J. Ator modified for WCOSS -C -C USAGE: -C INPUT FILES: -C 5 - STANDARD INPUT - NAMELIST /INPUT/. -C BULHED = "TTAAII" part of WMO Header (CHAR*6) -C KWBX = "CCCC" orig center part of WMO Header (CHAR*4) -C NCEP2STD = .true. - will convert NCEP format -C BUFR messages to standard WMO -C format. -C = .false. - No conversion done to BUFR -C messages. -C SEPARATE = .true. - Add Flag Field Separator and WMO -C Header to each BUFR message in -C file. -C = .false. - Add Flag Field Separator and WMO -C Header once at beginning of -C output file. -C MAXFILESIZE = Max size of output file in bytes. -C Used only when SEPARATE = .false. -C 11 - INPUT BUFR FILE -C -C OUTPUT FILES: (INCLUDING SCRATCH FILES) -C 6 - STANDARD FORTRAN PRINT FILE -C 51 - AWIPS BUFR FILE WITH WMO HEADERS ADDED -C -C SUBPROGRAMS CALLED: (LIST ALL CALLED FROM ANYWHERE IN CODES) -C UNIQUE: - makwmo mkfldsep -C LIBRARY: -C W3LIB - W3TAGB W3UTCDAT -C W3TAGE -C -C EXIT STATES: -C COND = 0 - SUCCESSFUL RUN -C 19 - ERROR READING COMMAND LINE ARGS FOR WMOHEADER -C 20 - Error opening output BUFR transmission file -C 30 - NO BUFR MESSSAGES FOUND -C -C REMARKS: This utility was written for the ETA BUFR sounding -C collectives, and assumes all BUFR messages in the input -C file require the same WMO Header. -C -C ATTRIBUTES: -C LANGUAGE: FORTRAN 90 -C MACHINE: WCOSS -C -C$$$ -C - PARAMETER (MXSIZE=500000,MXSIZED4=MXSIZE/4) - INTEGER,PARAMETER :: INBUFR=11,OUTBUFR=51,TMPBUFR=91,iopt=2 -C - INTEGER,dimension(8):: ITIME=(/0,0,0,-500,0,0,0,0/) - INTEGER,dimension(MXSIZED4):: MBAY - INTEGER NBUL - INTEGER iday,hour - INTEGER :: MAXFILESIZE=1000000 -C - CHARACTER * 80 fileo - CHARACTER * 11 envvar - CHARACTER * 8 SUBSET - CHARACTER * 6 :: BULHED="CHEK12" - CHARACTER * 1 BUFR(MXSIZE) - CHARACTER * 4 :: ctemp,KWBX="OUTT" - CHARACTER * 1 CSEP(80) - integer,parameter :: lenhead=21 - CHARACTER * 1 WMOHDR(lenhead) - character*1,allocatable :: filebuf(:) - LOGICAL :: NCEP2STD=.false.,SEPARATE=.true. -C - EQUIVALENCE (BUFR(1), MBAY(1)) -C - NAMELIST /INPUT/ BULHED,KWBX,NCEP2STD,SEPARATE,MAXFILESIZE -C - CALL W3TAGB('TOCSBUFR',2012,0341,0083,'NP12') -C -C Read input values from namelist -C - READ(5,INPUT) - - PRINT * - PRINT *,'- Adding WMO Header: ',BULHED,' ',KWBX - IF (NCEP2STD) then - print *,'- Convert BUFR messages from NCEP format to standard', - & ' BUFR Format.' - else - print *,'- No conversion of BUFR messages will be done.' - endif - IF (SEPARATE) then - print *,'- Add Flag Field Separator and WMO Header to each ', - & 'BUFR message in file.' - else - print *,'- Add Flag Field Separator and WMO Header once at', - & ' beginning of file.' - allocate(filebuf(MAXFILESIZE)) - endif - PRINT * - -C -C Read output BUFR file name from FORT -C environment variable, and open file. -C - envvar='FORT ' - write(envvar(5:6),fmt='(I2)') outbufr - call get_environment_variable(envvar,fileo) - call baopenw(outbufr,fileo,iret1) - if ( iret1 .ne. 0 ) then - write(6,fmt='(" Error opening BUFR file: ",A80)') fileo - write(6,fmt='(" baopenw error = ",I5)') iret1 - stop 20 - endif -C -C Open input NCEP formatted BUFR file, if NCEP2STD = .true. -C - if (NCEP2STD) then - call OPENBF(INBUFR,'IN',INBUFR) - CALL MAXOUT(0) - call OPENBF(TMPBUFR,'NUL',INBUFR) - CALL STDMSG('Y') - endif - -C -C Get system date and time -C - call w3utcdat(itime) -C -C loop through input control records. -C - NBUL = 0 - nrec = 0 - itot = 0 - foreachbufrmessage: do - - if (NCEP2STD) then - if ( IREADMG (INBUFR,SUBSET,JDATE) .ne. 0 ) exit - if ( NMSUB(INBUFR) .gt. 0 ) then - nrec = nrec + 1 - CALL OPENMG (TMPBUFR,SUBSET,JDATE) - DO WHILE ( ICOPYSB(INBUFR,TMPBUFR) .eq. 0 ) - CONTINUE - END DO - CALL WRITSA( (-1)*TMPBUFR, MXSIZED4, MBAY, LMBAY) - else - cycle - endif - else - read(INBUFR,iostat=ios) BUFR -C print *,'Error reading message from input BUFR file.', -C & ' iostat = ',ios - if ( ios .le. 0 ) then - exit - endif - nrec = nrec + 1 - endif -C -C Extract BUFR edition number - ied = iupbs01(MBAY,'BEN') -C Calculate length of BUFR message - if (ied.le.1) then - call getlens(MBAY,5,len0,len1,len2,len3,len4,len5) - ILEN = len0+len1+len2+len3+len4+len5 - else - ILEN = iupbs01(MBAY,'LENM') - endif -C Check ending 7777 to see if we have a complete BUFR message - ctemp=BUFR(ILEN-3)//BUFR(ILEN-2)//BUFR(ILEN-1)//BUFR(ILEN) - if ( ctemp.ne.'7777') then - print *,' INVALID BUFR MESSAGE FOUND...SKIPPING ' - exit - endif -C -C MAKE WMO HEADER -C - iday=ITIME(3) - hour=ITIME(5) - CALL MAKWMO (BULHED,iday,hour,KWBX,WMOHDR) -C - NBUL = NBUL + 1 -C - IF (SEPARATE) THEN -C -C ADD Flag Field Separator AND WMO HEADERS -C TO BUFR MESSAGE. WRITE BUFR MESSAGE IN FILE -C - call mkfldsep(csep,iopt,insize,ilen+lenhead,lenout) - call wryte(outbufr,lenout,csep) - call wryte(outbufr,lenhead,WMOHDR) - call wryte(outbufr,ilen,bufr) - ELSE -C -C APPEND NEW BUFR MESSAGE TO filebuf ARRAY -C - if ((itot+ilen).lt.(MAXFILESIZE-101)) then - filebuf(itot+1:itot+ilen)=BUFR(1:ilen) - itot=itot+ilen - else - print *,' Internal Buffer of ',MAXFILESIZE,' bytes is ', - & 'full. Increase MAXFILESIZE in NAMELIST.' - exit - endif - ENDIF -C - enddo foreachbufrmessage -C - IF (.not.SEPARATE) THEN -C -C ADD Flag Field Separator AND WMO HEADERS -C TO BUFR MESSAGE. WRITE BUFR MESSAGE IN FILE -C - call mkfldsep(csep,iopt,insize,itot+lenhead,lenout) - call wryte(outbufr,lenout,csep) - call wryte(outbufr,lenhead,WMOHDR) - call wryte(outbufr,itot,filebuf) - deallocate(filebuf) - ENDIF -C -C* CLOSING SECTION -C - IF (NBUL .EQ. 0 ) THEN - WRITE (6,FMT='('' SOMETHING WRONG WITH INPUT BUFR FILE...'', - & ''NOTHING WAS PROCESSED'')') - CALL W3TAGE('TOCSBUFR') - call errexit(30) - ELSE - CALL BACLOSE (OUTBUFR,iret) - WRITE (6,FMT='(//,'' ******** RECAP OF THIS EXECUTION '', - & ''********'',/,5X,''READ '',I6,'' BUFR MESSAGES'', - & /,5X,''WROTE '',I6,'' BULLETINS OUT FOR TRANSMISSION'', - & //)') NREC, NBUL - ENDIF -C - CALL W3TAGE('TOCSBUFR') - STOP - END diff --git a/sorc/vint.fd/makefile b/sorc/vint.fd/makefile deleted file mode 100755 index 06647d1fc6..0000000000 --- a/sorc/vint.fd/makefile +++ /dev/null @@ -1,27 +0,0 @@ -SHELL= /bin/sh -ISIZE = 4 -RSIZE = 8 -COMP= ifort -##INC = /contrib/nceplibs/nwprod/lib/incmod/g2_d -##LIBS= -L/contrib/nceplibs/nwprod/lib -lw3emc_d -lw3nco_d -lg2_d -lbacio_4 -ljasper -lpng -lz -LDFLAGS= -# FFLAGS= -O3 -I $(INC) -i$(ISIZE) -r$(RSIZE) -# DEBUG= -check all -debug all -traceback -FFLAGS= -O2 -g -traceback -I $(INC) -i$(ISIZE) -r$(RSIZE) - -vint: vint.f - @echo " " - @echo " Compiling the interpolation program....." - $(COMP) $(FFLAGS) $(LDFLAGS) vint.f $(LIBS) -o vint.x - @echo " " - -.PHONY: clean - -CMD = vint.x - -clean: - -rm -f *.o *.mod - -install: - mv $(CMD) ../../exec/$(CMD) - diff --git a/sorc/vint.fd/vint.f b/sorc/vint.fd/vint.f deleted file mode 100755 index e4d6db807c..0000000000 --- a/sorc/vint.fd/vint.f +++ /dev/null @@ -1,1239 +0,0 @@ - program vint -c -c ABSTRACT: This program interpolates from various pressure levels -c onto regularly-spaced, 50-mb vertical levels. The intent is that -c we can use data with relatively coarse vertical resolution to -c get data on the necessary 50-mb intervals that we need for Bob -c Hart's cyclone phase space. For each model, we will need to read -c in a control file that contains the levels that we are -c interpolating from. -c -c Written by Tim Marchok - - USE params - USE grib_mod - - implicit none - - type(gribfield) :: holdgfld - integer, parameter :: lugb=11,lulv=16,lugi=31,lout=51,maxlev=200 - integer kpds(200),kgds(200) - integer nlevsin,iriret,iogret,kf,iggret,igdret,iidret,ixo,k,n - integer iha,iho,iva,irfa,iodret,ifcsthour,iia,iparm,nlevsout - integer gribver,g2_jpdtn - integer ilevs(maxlev) - real, allocatable :: xinpdat(:,:),xoutdat(:,:),xoutlevs_p(:) - logical(1), allocatable :: valid_pt(:),readflag(:) - - namelist/timein/ifcsthour,iparm,gribver,g2_jpdtn -c - read (5,NML=timein,END=201) - 201 continue - print *,' ' - print *,'*----------------------------------------------------*' - print *,' ' - print *,' +++ Top of vint +++' - print *,' ' - print *,'After namelist read, input forecast hour = ',ifcsthour - print *,' input grib parm = ',iparm - print *,' GRIB version= ',gribver - print *,' GRIB2 JPDTN= g2_jpdtn= ' - & ,g2_jpdtn - - if (iparm == 7 .or. iparm == 156) then - nlevsout = 13 ! dealing with height - else - nlevsout = 5 ! dealing with temperature - endif - - allocate (xoutlevs_p(nlevsout),stat=ixo) - if (ixo /= 0) then - print *,' ' - print *,'!!! ERROR in vint allocating the xoutlevs_p array.' - print *,'!!! ixo= ',ixo - print *,' ' - goto 899 - endif - - do k = 1,nlevsout - xoutlevs_p(k) = 300. + float((k-1)*50) - enddo - - ilevs = -999 - call read_input_levels (lulv,maxlev,nlevsin,ilevs,iriret) - - if (iriret /= 0) then - print *,' ' - print *,'!!! ERROR in vint. ' - print *,'!!! RETURN CODE FROM read_input_levels /= 0' - print *,'!!! RETURN CODE = iriret = ',iriret - print *,'!!! EXITING....' - print *,' ' - goto 899 - endif - - call open_grib_files (lugb,lugi,lout,gribver,iogret) - - if (iogret /= 0) then - print '(/,a45,i4,/)','!!! ERROR: in vint open_grib_files, rc= ' - & ,iogret - goto 899 - endif - - call getgridinfo (lugb,lugi,kf,kpds,kgds,holdgfld,ifcsthour,iparm - & ,gribver,g2_jpdtn,iggret) - - allocate (xinpdat(kf,nlevsin),stat=iha) - allocate (xoutdat(kf,nlevsout),stat=iho) - allocate (valid_pt(kf),stat=iva) - allocate (readflag(nlevsin),stat=irfa) - if (iha /= 0 .or. iho /= 0 .or. iva /= 0 .or. irfa /= 0) then - print *,' ' - print *,'!!! ERROR in vint.' - print *,'!!! ERROR allocating the xinpdat, readflag, or the' - print *,'!!! valid_pt array, iha= ',iha,' iva= ',iva - print *,'!!! irfa= ',irfa,' iho= ',iho - print *,' ' - goto 899 - endif - - print *,'hold check, holdgfld%ipdtlen = ',holdgfld%ipdtlen - do n = 1,holdgfld%ipdtlen - print *,'hold check, n= ',n,' holdgfld%ipdtmpl= ' - & ,holdgfld%ipdtmpl(n) - enddo - - call getdata (lugb,lugi,kf,valid_pt,nlevsin,ilevs,maxlev - & ,readflag,xinpdat,ifcsthour,iparm,gribver,g2_jpdtn - & ,igdret) - - call interp_data (kf,valid_pt,nlevsin,ilevs,maxlev,readflag - & ,xinpdat,xoutdat,xoutlevs_p,nlevsout,iidret) - - call output_data (lout,kf,kpds,kgds,holdgfld,xoutdat,valid_pt - & ,xoutlevs_p,nlevsout,gribver,iodret) - - deallocate (xinpdat) - deallocate (xoutdat) - deallocate (valid_pt) - deallocate (readflag) - deallocate (xoutlevs_p) - - 899 continue -c - stop - end -c -c--------------------------------------------------------------------- -c -c--------------------------------------------------------------------- - subroutine read_input_levels (lulv,maxlev,nlevsin,ilevs,iriret) -c -c ABSTRACT: This subroutine reads in a text file that contains -c the number of input pressure levels for a given model. The -c format of the file goes like this, from upper levels to -c lower, for example: -c -c 1 200 -c 2 400 -c 3 500 -c 4 700 -c 5 850 -c 6 925 -c 7 1000 -c -c - implicit none - - integer lulv,nlevsin,maxlev,iriret,inplev,ict,lvix - integer ilevs(maxlev) -c - iriret=0 - ict = 0 - do while (.true.) - - print *,'Top of while loop in vint read_input_levels' - - read (lulv,85,end=130) lvix,inplev - - if (inplev > 0 .and. inplev <= 1000) then - ict = ict + 1 - ilevs(ict) = inplev - else - print *,' ' - print *,'!!! ERROR: Input level not between 0 and 1000' - print *,'!!! in vint. inplev= ',inplev - print *,'!!! STOPPING EXECUTION' - STOP 91 - endif - - print *,'vint readloop, ict= ',ict,' inplev= ',inplev - - enddo - - 85 format (i4,1x,i4) - 130 continue - - nlevsin = ict - - print *,' ' - print *,'Total number of vint levels read in = ',nlevsin -c - return - end - -c--------------------------------------------------------------------- -c -c--------------------------------------------------------------------- - subroutine getgridinfo (lugb,lugi,kf,kpds,kgds,holdgfld,ifcsthour - & ,iparm,gribver,g2_jpdtn,iggret) -c -c ABSTRACT: The purpose of this subroutine is just to get the max -c values of i and j and the dx and dy grid spacing intervals for the -c grid to be used in the rest of the program. So just read the -c grib file to get the lon and lat data. Also, get the info for -c the data grid's boundaries. This boundary information will be -c used later in the tracking algorithm, and is accessed via Module -c grid_bounds. -c -C INPUT: -C lugb The Fortran unit number for the GRIB data file -C lugi The Fortran unit number for the GRIB index file -c ifcsthour input forecast hour to search for -c iparm input grib parm to search for -c gribver integer (1 or 2) to indicate if using GRIB1 / GRIB2 -c g2_jpdtn If GRIB2 data being read, this is the value for JPDTN -c that is input to getgb2. -C -C OUTPUT: -c kf Number of gridpoints on the grid -c kpds pds array for a GRIB1 record -c kgds gds array for a GRIB1 record -c holdgfld info for a GRIB2 record -c -C iggret The return code from this subroutine -c - USE params - USE grib_mod - - implicit none -c - type(gribfield) :: gfld,prevfld,holdgfld - integer,dimension(200) :: jids,jpdt,jgdt - logical(1), allocatable :: lb(:) - integer, parameter :: jf=4000000 - integer jpds(200),jgds(200) - integer kpds(200),kgds(200) - integer :: listsec1(13) - integer ila,ifa,iret,ifcsthour,imax,jmax,jskp,jdisc - integer lugb,lugi,kf,j,k,iggret,iparm,gribver,g2_jpdtn - integer jpdtn,jgdtn,npoints,icount,ipack,krec - integer :: listsec0(2)=(/0,2/) - integer :: igds(5)=(/0,0,0,0,0/),previgds(5) - integer :: idrstmpl(200) - integer :: currlen=1000000 - logical :: unpack=.true. - logical :: open_grb=.false. - real, allocatable :: f(:) - real dx,dy -c - iggret = 0 - - allocate (lb(jf),stat=ila) - allocate (f(jf),stat=ifa) - if (ila /= 0 .or. ifa /= 0) then - print *,' ' - print *,'!!! ERROR in vint.' - print *,'!!! ERROR in getgridinfo allocating either lb or f' - print *,'!!! ila = ',ila,' ifa= ',ifa - iggret = 97 - return - endif - - if (gribver == 2) then - - ! Search for a record from a GRIB2 file - - ! - ! --- Initialize Variables --- - ! - - gfld%idsect => NULL() - gfld%local => NULL() - gfld%list_opt => NULL() - gfld%igdtmpl => NULL() - gfld%ipdtmpl => NULL() - gfld%coord_list => NULL() - gfld%idrtmpl => NULL() - gfld%bmap => NULL() - gfld%fld => NULL() - - jdisc=0 ! meteorological products - jids=-9999 - jpdtn=g2_jpdtn ! 0 = analysis or forecast; 1 = ens fcst - jgdtn=0 ! lat/lon grid - jgdt=-9999 - jpdt=-9999 - - npoints=0 - icount=0 - jskp=0 - -c Search for Temperature or GP Height by production template.... - - JPDT(1:15)=(/-9999,-9999,-9999,-9999,-9999,-9999,-9999,-9999 - & ,-9999,-9999,-9999,-9999,-9999,-9999,-9999/) - - if (iparm == 7) then ! GP Height - jpdt(1) = 3 ! Param category from Table 4.1 - jpdt(2) = 5 ! Param number from Table 4.2-0-3 - elseif (iparm == 11) then ! Temperature - jpdt(1) = 0 ! Param category from Table 4.1 - jpdt(2) = 0 ! Param category from Table 4.2 - endif - - jpdt(9) = ifcsthour - - call getgb2(lugb,lugi,jskp,jdisc,jids,jpdtn,jpdt,jgdtn,jgdt - & ,unpack,krec,gfld,iret) - if ( iret.ne.0) then - print *,' ' - print *,' ERROR: getgb2 error in getgridinfo = ',iret - endif - -c Determine packing information from GRIB2 file -c The default packing is 40 JPEG 2000 - - ipack = 40 - - print *,' gfld%idrtnum = ', gfld%idrtnum - - ! Set DRT info ( packing info ) - if ( gfld%idrtnum.eq.0 ) then ! Simple packing - ipack = 0 - elseif ( gfld%idrtnum.eq.2 ) then ! Complex packing - ipack = 2 - elseif ( gfld%idrtnum.eq.3 ) then ! Complex & spatial packing - ipack = 31 - elseif ( gfld%idrtnum.eq.40.or.gfld%idrtnum.eq.15 ) then - ! JPEG 2000 packing - ipack = 40 - elseif ( gfld%idrtnum.eq.41 ) then ! PNG packing - ipack = 41 - endif - - print *,'After check of idrtnum, ipack= ',ipack - - print *,'Number of gridpts= gfld%ngrdpts= ',gfld%ngrdpts - print *,'Number of elements= gfld%igdtlen= ',gfld%igdtlen - print *,'PDT num= gfld%ipdtnum= ',gfld%ipdtnum - print *,'GDT num= gfld%igdtnum= ',gfld%igdtnum - - imax = gfld%igdtmpl(8) - print *,'at A' - jmax = gfld%igdtmpl(9) - print *,'at B' - dx = float(gfld%igdtmpl(17))/1.e6 - print *,'at C' - dy = float(gfld%igdtmpl(17))/1.e6 - print *,'at D' - kf = gfld%ngrdpts - print *,'at E' - - holdgfld = gfld - - else - - ! Search for a record from a GRIB1 file - - jpds = -1 - jgds = -1 - - j=0 - - jpds(5) = iparm ! Get a record for the input parm selected - jpds(6) = 100 ! Get a record on a standard pressure level - jpds(14) = ifcsthour - - call getgb(lugb,lugi,jf,j,jpds,jgds, - & kf,k,kpds,kgds,lb,f,iret) - - if (iret.ne.0) then - print *,' ' - print *,'!!! ERROR in vint getgridinfo calling getgb' - print *,'!!! Return code from getgb = iret = ',iret - iggret = iret - return - else - iggret=0 - imax = kgds(2) - jmax = kgds(3) - dx = float(kgds(9))/1000. - dy = float(kgds(10))/1000. - endif - - endif - - print *,' ' - print *,'In vint getgridinfo, grid dimensions follow:' - print *,'imax= ',imax,' jmax= ',jmax - print *,' dx= ',dx,' dy= ',dy - print *,'number of gridpoints = ',kf - - deallocate (lb); deallocate(f) - - return - end - -c--------------------------------------------------------------------- -c -c--------------------------------------------------------------------- - subroutine getdata (lugb,lugi,kf,valid_pt,nlevsin,ilevs,maxlev - & ,readflag,xinpdat,ifcsthour,iparm,gribver,g2_jpdtn - & ,igdret) -c -c ABSTRACT: This subroutine reads the input GRIB file for the -c tracked parameters. - - USE params - USE grib_mod - - implicit none -c - type(gribfield) :: gfld,prevfld - CHARACTER(len=8) :: pabbrev - integer,dimension(200) :: jids,jpdt,jgdt - logical(1) valid_pt(kf),lb(kf),readflag(nlevsin) - integer, parameter :: jf=4000000 - integer ilevs(maxlev) - integer jpds(200),jgds(200),kpds(200),kgds(200) - integer lugb,lugi,kf,nlevsin,maxlev,igdret,jskp,jdisc - integer i,j,k,ict,np,lev,ifcsthour,iret,iparm,gribver,g2_jpdtn - integer jpdtn,jgdtn,npoints,icount,ipack,krec - integer pdt_4p0_vert_level,pdt_4p0_vtime,mm - integer :: listsec0(2)=(/0,2/) - integer :: listsec1(13) - integer :: igds(5)=(/0,0,0,0,0/),previgds(5) - integer :: idrstmpl(200) - integer :: currlen=1000000 - logical :: unpack=.true. - logical :: open_grb=.false. - real f(kf),xinpdat(kf,nlevsin),xtemp(kf) - real dmin,dmax,firstval,lastval -c - igdret=0 - ict = 0 - - level_loop: do lev = 1,nlevsin - - print *,' ' - print *,'In vint getdata read loop, lev= ',lev,' level= ' - & ,ilevs(lev) - - if (gribver == 2) then - - ! - ! --- Initialize Variables --- - ! - - gfld%idsect => NULL() - gfld%local => NULL() - gfld%list_opt => NULL() - gfld%igdtmpl => NULL() - gfld%ipdtmpl => NULL() - gfld%coord_list => NULL() - gfld%idrtmpl => NULL() - gfld%bmap => NULL() - gfld%fld => NULL() - - jdisc=0 ! meteorological products - jids=-9999 - jpdtn=g2_jpdtn ! 0 = analysis or forecast; 1 = ens fcst - jgdtn=0 ! lat/lon grid - jgdt=-9999 - jpdt=-9999 - - npoints=0 - icount=0 - jskp=0 - -c Search for input parameter by production template 4.0. This -c vint program is used primarily for temperature, but still we -c will leave that as a variable and not-hard wire it in case we -c choose to average something else in the future. - - ! We are looking for Temperature or GP Height here. This - ! block of code, or even the smaller subset block of code that - ! contains the JPDT(1) and JPDT(2) assignments, can of course - ! be modified if this program is to be used for interpolating - ! other variables.... - - ! Set defaults for JPDT, then override in array - ! assignments below... - - JPDT(1:15)=(/-9999,-9999,-9999,-9999,-9999,-9999,-9999,-9999 - & ,-9999,-9999,-9999,-9999,-9999,-9999,-9999/) - - print *,' ' - print *,'In getdata vint, iparm= ',iparm - - if (iparm == 7) then ! GP Height - jpdt(1) = 3 ! Param category from Table 4.1 - jpdt(2) = 5 ! Param number from Table 4.2-0-3 - elseif (iparm == 11) then ! Temperature - jpdt(1) = 0 ! Param category from Table 4.1 - jpdt(2) = 0 ! Param category from Table 4.2 - endif - - JPDT(9) = ifcsthour - JPDT(10) = 100 ! Isobaric surface requested (Table 4.5) - JPDT(12) = ilevs(lev) * 100 ! value of specific level - - print *,'before getgb2 call, value of unpack = ',unpack - - do mm = 1,15 - print *,'VINT getdata mm= ',mm,' JPDT(mm)= ',JPDT(mm) - enddo - - call getgb2(lugb,lugi,jskp,jdisc,jids,jpdtn,jpdt,jgdtn,jgdt - & ,unpack,krec,gfld,iret) - - print *,'iret from getgb2 in getdata = ',iret - - print *,'after getgb2 call, value of unpacked = ' - & ,gfld%unpacked - - print *,'after getgb2 call, gfld%ndpts = ',gfld%ndpts - print *,'after getgb2 call, gfld%ibmap = ',gfld%ibmap - - if ( iret == 0) then - -c Determine packing information from GRIB2 file -c The default packing is 40 JPEG 2000 - - ipack = 40 - - print *,' gfld%idrtnum = ', gfld%idrtnum - - ! Set DRT info ( packing info ) - if ( gfld%idrtnum.eq.0 ) then ! Simple packing - ipack = 0 - elseif ( gfld%idrtnum.eq.2 ) then ! Complex packing - ipack = 2 - elseif ( gfld%idrtnum.eq.3 ) then ! Complex & spatial - & ! packing - ipack = 31 - elseif ( gfld%idrtnum.eq.40.or.gfld%idrtnum.eq.15 ) then - ! JPEG 2000 packing - ipack = 40 - elseif ( gfld%idrtnum.eq.41 ) then ! PNG packing - ipack = 41 - endif - - print *,'After check of idrtnum, ipack= ',ipack - - print *,'Number of gridpts= gfld%ngrdpts= ',gfld%ngrdpts - print *,'Number of elements= gfld%igdtlen= ',gfld%igdtlen - print *,'GDT num= gfld%igdtnum= ',gfld%igdtnum - - kf = gfld%ndpts ! Number of gridpoints returned from read - - do np = 1,kf - xinpdat(np,lev) = gfld%fld(np) - xtemp(np) = gfld%fld(np) - if (gfld%ibmap == 0) then - valid_pt(np) = gfld%bmap(np) - else - valid_pt(np) = .true. - endif - enddo - - readflag(lev) = .TRUE. -c call bitmapchk(kf,gfld%bmap,gfld%fld,dmin,dmax) - call bitmapchk(kf,valid_pt,xtemp,dmin,dmax) - - if (ict == 0) then -c do np = 1,kf -c valid_pt(np) = gfld%bmap(np) -c enddo - ict = ict + 1 - endif - - firstval=gfld%fld(1) - lastval=gfld%fld(kf) - - print *,' ' - print *,' SECTION 0: discipl= ',gfld%discipline - & ,' gribver= ',gfld%version - print *,' ' - print *,' SECTION 1: ' - - do j = 1,gfld%idsectlen - print *,' sect1, j= ',j,' gfld%idsect(j)= ' - & ,gfld%idsect(j) - enddo - - if ( associated(gfld%local).AND.gfld%locallen.gt.0) then - print *,' ' - print *,' SECTION 2: ',gfld%locallen,' bytes' - else - print *,' ' - print *,' SECTION 2 DOES NOT EXIST IN THIS RECORD' - endif - - print *,' ' - print *,' SECTION 3: griddef= ',gfld%griddef - print *,' ngrdpts= ',gfld%ngrdpts - print *,' numoct_opt= ',gfld%numoct_opt - print *,' interp_opt= ',gfld%interp_opt - print *,' igdtnum= ',gfld%igdtnum - print *,' igdtlen= ',gfld%igdtlen - - print *,' ' - print '(a17,i3,a2)',' GRID TEMPLATE 3.',gfld%igdtnum,': ' - do j=1,gfld%igdtlen - print *,' j= ',j,' gfld%igdtmpl(j)= ',gfld%igdtmpl(j) - enddo - - print *,' ' - print *,' PDT num (gfld%ipdtnum) = ',gfld%ipdtnum - print *,' ' - print '(a20,i3,a2)',' PRODUCT TEMPLATE 4.',gfld%ipdtnum,': ' - do j=1,gfld%ipdtlen - print *,' sect 4 j= ',j,' gfld%ipdtmpl(j)= ' - & ,gfld%ipdtmpl(j) - enddo - -c Print out values for data representation type - - print *,' ' - print '(a21,i3,a2)',' DATA REP TEMPLATE 5.',gfld%idrtnum - & ,': ' - do j=1,gfld%idrtlen - print *,' sect 5 j= ',j,' gfld%idrtmpl(j)= ' - & ,gfld%idrtmpl(j) - enddo - -c Get parameter abbrev for record that was retrieved - - pdt_4p0_vtime = gfld%ipdtmpl(9) - pdt_4p0_vert_level = gfld%ipdtmpl(12) - - pabbrev=param_get_abbrev(gfld%discipline,gfld%ipdtmpl(1) - & ,gfld%ipdtmpl(2)) - - print *,' ' - write (6,131) - 131 format (' rec# param level byy bmm bdd bhh ' - & ,'fhr npts firstval lastval minval ' - & ,' maxval') - print '(i5,3x,a8,2x,6i5,2x,i8,4g12.4)' - & ,krec,pabbrev,pdt_4p0_vert_level/100,gfld%idsect(6) - & ,gfld%idsect(7),gfld%idsect(8),gfld%idsect(9) - & ,pdt_4p0_vtime,gfld%ndpts,firstval,lastval,dmin,dmax - - do np = 1,kf - xinpdat(np,lev) = gfld%fld(np) - enddo - - else - - print *,' ' - print *,'!!! ERROR: GRIB2 VINT READ IN GETDATA FAILED FOR ' - & ,'LEVEL LEV= ',LEV - print *,' ' - - readflag(lev) = .FALSE. - - do np = 1,kf - xinpdat(np,lev) = -99999.0 - enddo - - endif - - else - - ! Reading a GRIB1 file.... - - jpds = -1 - jgds = -1 - j=0 - - jpds(5) = iparm ! grib parameter id to read in - jpds(6) = 100 ! level id to indicate a pressure level - jpds(7) = ilevs(lev) ! actual level of the layer - jpds(14) = ifcsthour ! lead time to search for - - call getgb (lugb,lugi,jf,j,jpds,jgds, - & kf,k,kpds,kgds,lb,f,iret) - - print *,' ' - print *,'After vint getgb call, j= ',j,' k= ',k,' level= ' - & ,ilevs(lev),' iret= ',iret - - if (iret == 0) then - - readflag(lev) = .TRUE. - call bitmapchk(kf,lb,f,dmin,dmax) - - if (ict == 0) then - do np = 1,kf - valid_pt(np) = lb(np) - enddo - ict = ict + 1 - endif - - write (6,31) - 31 format (' rec# parm# levt lev byy bmm bdd bhh fhr ' - & ,'npts minval maxval') - print '(i4,2x,8i5,i8,2g12.4)', - & k,(kpds(i),i=5,11),kpds(14),kf,dmin,dmax - - do np = 1,kf - xinpdat(np,lev) = f(np) - enddo - - else - - print *,' ' - print *,'!!! ERROR: VINT READ FAILED FOR LEVEL LEV= ',LEV - print *,' ' - - readflag(lev) = .FALSE. - - do np = 1,kf - xinpdat(np,lev) = -99999.0 - enddo - - endif - - endif - - enddo level_loop -c - return - end -c -c----------------------------------------------------------------------- -c -c----------------------------------------------------------------------- - subroutine interp_data (kf,valid_pt,nlevsin,ilevs,maxlev,readflag - & ,xinpdat,xoutdat,xoutlevs_p,nlevsout,iidret) -c -c ABSTRACT: This routine interpolates data in between available -c pressure levels to get data resolution at the 50-mb -c resolution that we need for the cyclone phase space -c diagnostics. - - implicit none - - logical(1) valid_pt(kf),readflag(nlevsin) - integer ilevs(maxlev) - integer nlevsin,nlevsout,maxlev,kf,kout,kin,k,n,kup,klo - integer iidret - real xinpdat(kf,nlevsin),xoutdat(kf,nlevsout) - real xoutlevs_p(nlevsout),xoutlevs_lnp(nlevsout) - real xinlevs_p(nlevsin),xinlevs_lnp(nlevsin) - real pdiff,pdiffmin,xu,xo,xl,yu,yl -c - iidret=0 - print *,' ' - print *,'*----------------------------------------------*' - print *,' Listing of standard output levels follows....' - print *,'*----------------------------------------------*' - print *,' ' - - do k = 1,nlevsout - xoutlevs_lnp(k) = log(xoutlevs_p(k)) - write (6,81) k,xoutlevs_p(k),xoutlevs_lnp(k) - enddo - 81 format (1x,'k= ',i3,' p= ',f6.1,' ln(p)= ',f9.6) - - do k = 1,nlevsin - xinlevs_p(k) = float(ilevs(k)) - xinlevs_lnp(k) = log(xinlevs_p(k)) - enddo - -c ----------------------------------------------------------------- -c We want to loop through for all the *output* levels that we need. -c We may have some input levels that match perfectly, often at -c least the standard levels like 500, 700, 850. For these levels, -c just take the data directly from the input file. For other -c output levels that fall between the input levels, we need to -c find the nearest upper and lower levels. - - output_loop: do kout = 1,nlevsout - - print *,' ' - print *,'+------------------------------------------------+' - print *,'Top of vint output_loop, kout= ',kout,' pressure= ' - & ,xoutlevs_p(kout) - - ! Loop through all of the input levels and find the level - ! that is closest to the output level from the *upper* side. - ! And again, in this upper loop, if we hit a level that - ! exactly matches a needed output level, just copy that data - ! and then cycle back to the top of output_loop. - - kup = -999 - klo = -999 - - pdiffmin = 9999.0 - - inp_loop_up: do kin = 1,nlevsin - if (xinlevs_p(kin) == xoutlevs_p(kout)) then - print *,' ' - print *,'+++ Exact level found. kout= ',kout - print *,'+++ level= ',xoutlevs_p(kout) - print *,'+++ Data copied. No interpolation needed.' - if (readflag(kin)) then - do n = 1,kf - xoutdat(n,kout) = xinpdat(n,kin) - enddo - cycle output_loop - else - print *,' ' - print *,'!!! ERROR: readflag is FALSE in interp_data for' - print *,'!!! level kin= ',kin,', which is a level that ' - print *,'!!! exactly matches a required output level, and' - print *,'!!! the user has identified as being an input ' - print *,'!!! level with valid data for this model. We ' - print *,'!!! will get the data from a different level.' - endif - else - pdiff = xoutlevs_p(kout) - xinlevs_p(kin) - if (pdiff > 0.) then ! We have a level higher than outlev - if (pdiff < pdiffmin) then - pdiffmin = pdiff - kup = kin - endif - endif - endif - enddo inp_loop_up - - pdiffmin = 9999.0 - - inp_loop_lo: do kin = 1,nlevsin - pdiff = xinlevs_p(kin) - xoutlevs_p(kout) - if (pdiff > 0.) then ! We have a level lower than outlev - if (pdiff < pdiffmin) then - pdiffmin = pdiff - klo = kin - endif - endif - enddo inp_loop_lo - - if (kup == -999 .or. klo == -999) then - print *,' ' - print *,'!!! ERROR: While interpolating, could not find ' - print *,'!!! either an upper or lower input level to use' - print *,'!!! for interpolating *from*.' - print *,'!!! kup= ',kup,' klo= ',klo - print *,' ' - print *,'!!! STOPPING....' - stop 91 - endif - - if (.not. readflag(kup) .or. .not. readflag(klo)) then - print *,' ' - print *,'!!! ERROR: In interp_data, either the upper or the' - print *,'!!! lower input level closest to the target output' - print *,'!!! level did not have valid data read in.' - print *,'!!! ' - write (6,91) ' upper level k= ',kup,xinlevs_p(kup) - & ,xinlevs_lnp(kup) - write (6,101) xoutlevs_p(kout),xoutlevs_lnp(kout) - write (6,91) ' lower level k= ',klo,xinlevs_p(klo) - & ,xinlevs_lnp(klo) - print *,'!!! readflag upper = ',readflag(kup) - print *,'!!! readflag lower = ',readflag(klo) - print *,'!!! EXITING....' - stop 92 - endif - - print *,' ' - write (6,91) ' upper level k= ',kup,xinlevs_p(kup) - & ,xinlevs_lnp(kup) - write (6,101) xoutlevs_p(kout),xoutlevs_lnp(kout) - write (6,91) ' lower level k= ',klo,xinlevs_p(klo) - & ,xinlevs_lnp(klo) - - 91 format (1x,a17,1x,i3,' pressure= ',f6.1,' ln(p)= ',f9.6) - 101 format (13x,'Target output pressure= ',f6.1,' ln(p)= ',f9.6) - - !-------------------------------------------------------------- - ! Now perform the linear interpolation. Here is the notation - ! used in the interpolation: - ! - ! xu = ln of pressure at upper level - ! xo = ln of pressure at output level - ! xl = ln of pressure at lower level - ! yu = data value at upper level - ! yl = data value at lower level - !-------------------------------------------------------------- - - xu = xinlevs_lnp(kup) - xo = xoutlevs_lnp(kout) - xl = xinlevs_lnp(klo) - - do n = 1,kf - yu = xinpdat(n,kup) - yl = xinpdat(n,klo) - xoutdat(n,kout) = ((yl * (xo - xu)) - (yu * (xo - xl))) - & / (xl - xu) - enddo - - enddo output_loop -c - return - end -c -c---------------------------------------------------------------------- -c -c---------------------------------------------------------------------- - subroutine output_data (lout,kf,kpds,kgds,holdgfld,xoutdat - & ,valid_pt,xoutlevs_p,nlevsout,gribver,iodret) -c -c ABSTRACT: This routine writes out the output data on the -c specified output pressure levels. - - USE params - USE grib_mod - - implicit none - - CHARACTER(len=1),pointer,dimension(:) :: cgrib - type(gribfield) :: holdgfld - logical(1) valid_pt(kf),bmap(kf) - integer lout,kf,lugb,lugi,iodret,nlevsout,igoret,ipret,lev - integer gribver,ierr,ipack,lengrib,npoints,newlen,idrsnum - integer numcoord,ica,n,j - integer :: idrstmpl(200) - integer :: currlen=1000000 - integer :: listsec0(2)=(/0,2/) - integer :: igds(5)=(/0,0,0,0,0/),previgds(5) - integer kpds(200),kgds(200) - integer(4), parameter::idefnum=1 - integer(4) ideflist(idefnum),ibmap - real coordlist - real xoutdat(kf,nlevsout),xoutlevs_p(nlevsout) -c - iodret=0 - call baopenw (lout,"fort.51",igoret) - print *,'baopenw: igoret= ',igoret - - if (igoret /= 0) then - print *,' ' - print *,'!!! ERROR in vint in sub output_data opening' - print *,'!!! **OUTPUT** grib file. baopenw return codes:' - print *,'!!! grib file 1 return code = igoret = ',igoret - STOP 95 - return - endif - - levloop: do lev = 1,nlevsout - - if (gribver == 2) then - - ! Write data out as a GRIB2 message.... - - allocate(cgrib(currlen),stat=ica) - if (ica /= 0) then - print *,' ' - print *,'ERROR in output_data allocating cgrib' - print *,'ica= ',ica - iodret=95 - return - endif - - ! Ensure that cgrib array is large enough - - if (holdgfld%ifldnum == 1 ) then ! start new GRIB2 message - npoints=holdgfld%ngrdpts - else - npoints=npoints+holdgfld%ngrdpts - endif - newlen=npoints*4 - if ( newlen.gt.currlen ) then -ccc if (allocated(cgrib)) deallocate(cgrib) - if (associated(cgrib)) deallocate(cgrib) - allocate(cgrib(newlen),stat=ierr) -c call realloc (cgrib,currlen,newlen,ierr) - if (ierr == 0) then - print *,' ' - print *,'re-allocate for large grib msg: ' - print *,' currlen= ',currlen - print *,' newlen= ',newlen - currlen=newlen - else - print *,'ERROR returned from 2nd allocate cgrib = ',ierr - stop 95 - endif - endif - - ! Create new GRIB Message - listsec0(1)=holdgfld%discipline - listsec0(2)=holdgfld%version - - print *,'output, holdgfld%idsectlen= ',holdgfld%idsectlen - do j = 1,holdgfld%idsectlen - print *,' sect1, j= ',j,' holdgfld%idsect(j)= ' - & ,holdgfld%idsect(j) - enddo - - call gribcreate(cgrib,currlen,listsec0,holdgfld%idsect,ierr) - if (ierr.ne.0) then - write(6,*) ' ERROR creating new GRIB2 field (gribcreate)= ' - & ,ierr - stop 95 - endif - - previgds=igds - igds(1)=holdgfld%griddef - igds(2)=holdgfld%ngrdpts - igds(3)=holdgfld%numoct_opt - igds(4)=holdgfld%interp_opt - igds(5)=holdgfld%igdtnum - - if (igds(3) == 0) then - ideflist = 0 - endif - - call addgrid (cgrib,currlen,igds,holdgfld%igdtmpl - & ,holdgfld%igdtlen,ideflist,idefnum,ierr) - - if (ierr.ne.0) then - write(6,*) ' ERROR from addgrid adding GRIB2 grid = ',ierr - stop 95 - endif - - holdgfld%ipdtmpl(12) = int(xoutlevs_p(lev)) * 100 - - ipack = 40 - idrsnum = ipack - idrstmpl = 0 - - idrstmpl(2)= holdgfld%idrtmpl(2) - idrstmpl(3)= holdgfld%idrtmpl(3) - idrstmpl(6)= 0 - idrstmpl(7)= 255 - - numcoord=0 - coordlist=0.0 ! Only needed for hybrid vertical coordinate, - ! not here, so set it to 0.0 - - ! 0 - A bit map applies to this product and is specified in - ! this section - ! 255 - A bit map does not apply to this product - ibmap=255 ! Bitmap indicator (see Code Table 6.0) - - print *,' ' - print *,'output, holdgfld%ipdtlen= ',holdgfld%ipdtlen - do n = 1,holdgfld%ipdtlen - print *,'output, n= ',n,' holdgfld%ipdtmpl= ' - & ,holdgfld%ipdtmpl(n) - enddo - - print *,'output, kf= ',kf -c do n = 1,kf -c print *,'output, n= ',n,' xoutdat(n)= ',xoutdat(n) -c enddo - - call addfield (cgrib,currlen,holdgfld%ipdtnum,holdgfld%ipdtmpl - & ,holdgfld%ipdtlen,coordlist - & ,numcoord - & ,idrsnum,idrstmpl,200 - & ,xoutdat(1,lev),kf,ibmap,bmap,ierr) - - if (ierr /= 0) then - write(6,*) ' ERROR from addfield adding GRIB2 data = ',ierr - stop 95 - endif - -! Finalize GRIB message after all grids -! and fields have been added. It adds the End Section ( "7777" ) - - call gribend(cgrib,currlen,lengrib,ierr) - call wryte(lout,lengrib,cgrib) - - if (ierr == 0) then - print *,' ' - print *,'+++ GRIB2 write successful. ' - print *,' Len of message = currlen= ',currlen - print *,' Len of entire GRIB2 message = lengrib= ' - & ,lengrib - else - print *,' ERROR from gribend writing GRIB2 msg = ',ierr - stop 95 - endif - - else - - ! Write data out as a GRIB1 message.... - - kpds(7) = int(xoutlevs_p(lev)) - - print *,'In vint, just before call to putgb, kf= ',kf - call putgb (lout,kf,kpds,kgds,valid_pt,xoutdat(1,lev),ipret) - print *,'In vint, just after call to putgb, kf= ',kf - if (ipret == 0) then - print *,' ' - print *,'+++ IPRET = 0 after call to putgb in vint' - print *,' ' - else - print *,' ' - print *,'!!!!!! ERROR in vint.' - print *,'!!!!!! ERROR: IPRET NE 0 AFTER CALL TO PUTGB !!!' - print *,'!!!!!! Level index= ',lev - print *,'!!!!!! pressure= ',xoutlevs_p(lev) - print *,' ' - endif - - write(*,980) kpds(1),kpds(2) - write(*,981) kpds(3),kpds(4) - write(*,982) kpds(5),kpds(6) - write(*,983) kpds(7),kpds(8) - write(*,984) kpds(9),kpds(10) - write(*,985) kpds(11),kpds(12) - write(*,986) kpds(13),kpds(14) - write(*,987) kpds(15),kpds(16) - write(*,988) kpds(17),kpds(18) - write(*,989) kpds(19),kpds(20) - write(*,990) kpds(21),kpds(22) - write(*,991) kpds(23),kpds(24) - write(*,992) kpds(25) - write(*,880) kgds(1),kgds(2) - write(*,881) kgds(3),kgds(4) - write(*,882) kgds(5),kgds(6) - write(*,883) kgds(7),kgds(8) - write(*,884) kgds(9),kgds(10) - write(*,885) kgds(11),kgds(12) - write(*,886) kgds(13),kgds(14) - write(*,887) kgds(15),kgds(16) - write(*,888) kgds(17),kgds(18) - write(*,889) kgds(19),kgds(20) - write(*,890) kgds(21),kgds(22) - - 980 format(' kpds(1) = ',i7,' kpds(2) = ',i7) - 981 format(' kpds(3) = ',i7,' kpds(4) = ',i7) - 982 format(' kpds(5) = ',i7,' kpds(6) = ',i7) - 983 format(' kpds(7) = ',i7,' kpds(8) = ',i7) - 984 format(' kpds(9) = ',i7,' kpds(10) = ',i7) - 985 format(' kpds(11) = ',i7,' kpds(12) = ',i7) - 986 format(' kpds(13) = ',i7,' kpds(14) = ',i7) - 987 format(' kpds(15) = ',i7,' kpds(16) = ',i7) - 988 format(' kpds(17) = ',i7,' kpds(18) = ',i7) - 989 format(' kpds(19) = ',i7,' kpds(20) = ',i7) - 990 format(' kpds(21) = ',i7,' kpds(22) = ',i7) - 991 format(' kpds(23) = ',i7,' kpds(24) = ',i7) - 992 format(' kpds(25) = ',i7) - 880 format(' kgds(1) = ',i7,' kgds(2) = ',i7) - 881 format(' kgds(3) = ',i7,' kgds(4) = ',i7) - 882 format(' kgds(5) = ',i7,' kgds(6) = ',i7) - 883 format(' kgds(7) = ',i7,' kgds(8) = ',i7) - 884 format(' kgds(9) = ',i7,' kgds(10) = ',i7) - 885 format(' kgds(11) = ',i7,' kgds(12) = ',i7) - 886 format(' kgds(13) = ',i7,' kgds(14) = ',i7) - 887 format(' kgds(15) = ',i7,' kgds(16) = ',i7) - 888 format(' kgds(17) = ',i7,' kgds(18) = ',i7) - 889 format(' kgds(19) = ',i7,' kgds(20) = ',i7) - 890 format(' kgds(20) = ',i7,' kgds(22) = ',i7) - - endif - - enddo levloop -c - return - end -c -c----------------------------------------------------------------------- -c -c----------------------------------------------------------------------- - subroutine open_grib_files (lugb,lugi,lout,gribver,iret) - -C ABSTRACT: This subroutine must be called before any attempt is -C made to read from the input GRIB files. The GRIB and index files -C are opened with a call to baopenr. This call to baopenr was not -C needed in the cray version of this program (the files could be -C opened with a simple Cray assign statement), but the GRIB-reading -C utilities on the SP do require calls to this subroutine (it has -C something to do with the GRIB I/O being done in C on the SP, and -C the C I/O package needs an explicit open statement). -C -C INPUT: -C lugb The Fortran unit number for the GRIB data file -C lugi The Fortran unit number for the GRIB index file -C lout The Fortran unit number for the output grib file -c gribver integer (1 or 2) to indicate if using GRIB1 / GRIB2 -C -C OUTPUT: -C iret The return code from this subroutine - - implicit none - - character fnameg*7,fnamei*7,fnameo*7 - integer iret,gribver,lugb,lugi,lout,igoret,iioret,iooret - - iret=0 - fnameg(1:5) = "fort." - fnamei(1:5) = "fort." - fnameo(1:5) = "fort." - write(fnameg(6:7),'(I2)') lugb - write(fnamei(6:7),'(I2)') lugi - write(fnameo(6:7),'(I2)') lout - call baopenr (lugb,fnameg,igoret) - call baopenr (lugi,fnamei,iioret) - call baopenw (lout,fnameo,iooret) - - print *,' ' - print *,'vint: baopen: igoret= ',igoret,' iioret= ',iioret - & ,' iooret= ',iooret - - if (igoret /= 0 .or. iioret /= 0 .or. iooret /= 0) then - print *,' ' - print *,'!!! ERROR in vint.' - print *,'!!! ERROR in sub open_grib_files opening grib file' - print *,'!!! or grib index file. baopen return codes:' - print *,'!!! grib file return code = igoret = ',igoret - print *,'!!! index file return code = iioret = ',iioret - print *,'!!! output file return code = iooret = ',iooret - iret = 93 - return - endif - - return - end -c -c------------------------------------------------------------------- -c -c------------------------------------------------------------------- - subroutine bitmapchk (n,ld,d,dmin,dmax) -c -c This subroutine checks the bitmap for non-existent data values. -c Since the data from the regional models have been interpolated -c from either a polar stereographic or lambert conformal grid -c onto a lat/lon grid, there will be some gridpoints around the -c edges of this lat/lon grid that have no data; these grid -c points have been bitmapped out by Mark Iredell's interpolater. -c To provide another means of checking for invalid data points -c later in the program, set these bitmapped data values to a -c value of -999.0. The min and max of this array are also -c returned if a user wants to check for reasonable values. -c - logical(1) ld - dimension ld(n),d(n) -c - dmin=1.E15 - dmax=-1.E15 -c - do i=1,n - if (ld(i)) then - dmin=min(dmin,d(i)) - dmax=max(dmax,d(i)) - else - d(i) = -999.0 - endif - enddo -c - return - end diff --git a/test/README.md b/test/README.md new file mode 100644 index 0000000000..8d9d273ce2 --- /dev/null +++ b/test/README.md @@ -0,0 +1,115 @@ +# Global workflow comparison tools +A collection of tools to compare two different global workflow experiments for bitwise identicality. + +## Disclaimer + +These tools are still a work-in-progress. Use at your own risk. There is no guarantee every relevant file will be compared (but feel free to make a pull request adding more). + +# Usage + +## Quick start +### To compare two UFS run directories +``` +./diff_UFS_rundir.sh dirA dirB +``` +Where `dirA` and `dirB` are the two UFS run directories. + + +### To compare two ROTDIRs +``` +./diff_ROTDIR.sh dirA dirB +``` +Where `dirA` and `dirB` are the two cycle directories (`.../gfs.YYYYMMDD/HH/`) + +OR + +``` +./diff_ROTDIR.sh rotdir cdate expA expB +``` + +Where: +- `rotdir` is the root of your rotdirs (the portion of path the experiments share) +- `cdate` is the datetime of the cycle in YYYMMDDHH format +- `expA` and `expB` are the experiment names ($PSLOT) of each experiment + +## Description + +There are currently two tools included in this package: +* `diff_UFS_rundir.sh` will compare two UFS run directories (must have retained them by setting `KEEPDATA` to `NO` in config.base) +* `diff_ROTDIR.sh` will compare entire ROTDIRs + +Both scripts work similarly. You will need two experiments to compare. Typically this means a "baseline" experiment using the current develop and whatever feature you are working on. Experiments need to be for the same cycle and use all the same settings, otherwise there is no chance of them matching. Except for specific text files, file lists are constructed by globbing the first experiment directory, so if the second experiment contains files that would otherwise be included, they will be skipped. + +There are three classes of files compared: +- Text files, by simple posix diff +- GRiB2 files, using correaltion from `wgrib2` +- NetCDF files, using NetCDF Operators (nco) + +Text and grib2 files are processed first and complete quickly. NetCDF processing is currently a lot slower. + +Any variables listed in the coordinates.lst file will be ignored when comparing NetCDFs. This is because coordinate variables are not differenced, so when iterating through the variables of the difference they will be non-zero. + +## Output + +Output will appear like this: +``` +=== === + + +``` + +For text files, it will be the ouput of posix diff, which is just an empty string when identical: +``` +... + +=== field_table === + + +=== input.nml === +310,313c310,313 +< FNGLAC = '/scratch2/NCEPDEV/ensemble/save/Walter.Kolczynski/global-workflow/develop/fix/fix_am/global_glacier.2x2.grb' +< FNMXIC = '/scratch2/NCEPDEV/ensemble/save/Walter.Kolczynski/global-workflow/develop/fix/fix_am/global_maxice.2x2.grb' +< FNTSFC = '/scratch2/NCEPDEV/ensemble/save/Walter.Kolczynski/global-workflow/develop/fix/fix_am/RTGSST.1982.2012.monthly.clim.grb' +< FNSNOC = '/scratch2/NCEPDEV/ensemble/save/Walter.Kolczynski/global-workflow/develop/fix/fix_am/global_snoclim.1.875.grb' +--- +> FNGLAC = '/scratch2/NCEPDEV/ensemble/save/Walter.Kolczynski/global-workflow/add_preamble/fix/fix_am/global_glacier.2x2.grb' +> FNMXIC = '/scratch2/NCEPDEV/ensemble/save/Walter.Kolczynski/global-workflow/add_preamble/fix/fix_am/global_maxice.2x2.grb' +> FNTSFC = '/scratch2/NCEPDEV/ensemble/save/Walter.Kolczynski/global-workflow/add_preamble/fix/fix_am/RTGSST.1982.2012.monthly.clim.grb' +> FNSNOC = '/scratch2/NCEPDEV/ensemble/save/Walter.Kolczynski/global-workflow/add_preamble/fix/fix_am/global_snoclim.1.875.grb' + +... +``` +(Text diffs have two extra blank line to separate the output.) + +Grib files will look like this if they are identical: +``` +=== GFSFLX.GrbF00 === +All fields are identical! +=== GFSFLX.GrbF03 === +All fields are identical! +=== GFSFLX.GrbF06 === +All fields are identical! +=== GFSFLX.GrbF09 === +All fields are identical! +=== GFSFLX.GrbF12 === +All fields are identical! + +... + +``` + +And NetCDFs will look like this: +``` +=== atmf000.nc === +0 differences found +=== atmf003.nc === +0 differences found +=== atmf006.nc === +0 differences found +=== atmf009.nc === +0 differences found + +... +``` + +If any variables in a grib or NetCDF do not match, they will be listed instead. diff --git a/test/coordinates.lst b/test/coordinates.lst new file mode 100644 index 0000000000..f175c2f047 --- /dev/null +++ b/test/coordinates.lst @@ -0,0 +1,8 @@ +grid_xt +grid_yt +lat +lon +pfull +phalf +time +time_iso diff --git a/test/diff_ROTDIR.sh b/test/diff_ROTDIR.sh new file mode 100755 index 0000000000..3a864f5f09 --- /dev/null +++ b/test/diff_ROTDIR.sh @@ -0,0 +1,162 @@ +#! /bin/env bash + +# +# Differences relevant output files in two different experiment ROTDIRs. +# Text files are compared via posix diff. GRiB files are compared via +# correlation reported by wgrib2. NetCDF files are compared by using +# NetCDF operators to calculate a diff then make sure all non-coordinate +# variable differences are zero. File lists are created by globbing key +# directories under the first experiment given. +# +# Syntax: +# diff_ROTDIR.sh [-c coord_file][-h] rotdir cdate expA expB +# +# OR +# +# diff_ROTDIR.sh [-c coord_file][-h] dirA dirB +# +# Arguments: +# rotdir: root rotdir where ROTDIRS are held +# cdate: experiment date/cycle in YYYYMMDDHH format +# expA, expB: experiment ids (PSLOT) to compare +# +# dirA, dirB: full paths to the cycle directories to be compared +# (${rotdir}/${exp}/gfs.${YYYYMMDD}/${cyc}) +# +# Options: +# -c coord_file: file containing a list of coordinate variables +# -h: print usage message and exit +# + +set -eu + +usage() { + # + # Print usage statement + # + echo <<- 'EOF' + Differences relevant output files in two different experiment ROTDIRs. + Text files are compared via posix diff. GRiB files are compared via + correlation reported by wgrib2. NetCDF files are compared by using + NetCDF operators to calculate a diff then make sure all non-coordinate + variable differences are zero. File lists are created by globbing key + directories under the first experiment given. + + Syntax: + diff_ROTDIR.sh [-c coord_file][-h] rotdir cdate expA expB + + OR + + diff_ROTDIR.sh [-c coord_file][-h] dirA dirB + + Arguments: + rotdir: root rotdir where ROTDIRS are held + cdate: experiment date/cycle in YYYYMMDDHH format + expA, expB: experiment ids (PSLOT) to compare + + dirA, dirB: full paths to the cycle directories to be compared + (${rotdir}/${exp}/gfs.${YYYYMMDD}/${cyc}) + + Options: + -c coord_file: file containing a list of coordinate variables + -h: print usage message and exit + EOF +} + +while getopts ":c:h" option; do + case "${option}" in + c) coord_file=${OPTARG} ;; + h) usage; exit 0 ;; + *) echo "Unknown option ${option}"; exit 1 ;; + esac +done + +num_args=$# +case $num_args in + 2) # Direct directory paths + dirA=$1 + dirB=$2 + ;; + 4) # Derive directory paths + rotdir=$1 + date=$2 + expA=$3 + expB=$4 + + YYYYMMDD=$(echo $date | cut -c1-8) + cyc=$(echo $date | cut -c9-10) + dirA="$rotdir/$expA/gfs.${YYYYMMDD}/${cyc}" + dirB="$rotdir/$expB/gfs.${YYYYMMDD}/${cyc}" + ;; + *) # Unknown option + echo "${num_args} is not a valid number of arguments, use 2 or 4" + usage + exit 1 + ;; +esac + +temp_file=".diff.nc" + +# Contains a bunch of NetCDF Operator shortcuts (will load nco module) +source ./netcdf_op_functions.sh +source ./test_utils.sh + +coord_file="${coord_file:-./coordinates.lst}" + +## Text files +files="" +files="${files} atmos/input.nml" # This file will be different because of the fix paths +files="${files} $(basename_list 'atmos/' "$dirA/atmos/storms.*" "$dirA/atmos/trak.*")" +if [[ -d $dirA/ice ]]; then + files="${files} ice/ice_in" +fi +if [[ -d $dirA/ocean ]]; then + files="${files} ocean/MOM_input" +fi +# if [[ -d $dirA/wave ]]; then +# files="${files} $(basename_list 'wave/station/' "$dirA/wave/station/*bull_tar")" +# fi + +for file in $files; do + echo "=== ${file} ===" + fileA="$dirA/$file" + fileB="$dirB/$file" + diff $fileA $fileB || : +done + +## GRiB files + +module load wgrib2/2.0.8 + +files="" +files="${files} $(basename_list 'atmos/' $dirA/atmos/*grb2* $dirA/atmos/*.flux.*)" +if [[ -d $dirA/wave ]]; then + files="${files} $(basename_list 'wave/gridded/' $dirA/wave/gridded/*.grib2)" +fi +if [[ -d $dirA/ocean ]]; then + files="${files} $(basename_list 'ocean/' $dirA/ocean/*grb2)" +fi + +for file in $files; do + echo "=== ${file} ===" + fileA="$dirA/$file" + fileB="$dirB/$file" + ./diff_grib_files.py $fileA $fileB +done + +## NetCDF Files +files="" +files="${files} $(basename_list 'atmos/' $dirA/atmos/*.nc)" +if [[ -d $dirA/ice ]]; then + files="${files} $(basename_list 'ice/' $dirA/ice/*.nc)" +fi +if [[ -d $dirA/ocean ]]; then + files="${files} $(basename_list 'ocean/' $dirA/ocean/*.nc)" +fi + +for file in $files; do + echo "=== ${file} ===" + fileA="$dirA/$file" + fileB="$dirB/$file" + nccmp -q $fileA $fileB $coord_file +done diff --git a/test/diff_UFS_rundir.sh b/test/diff_UFS_rundir.sh new file mode 100755 index 0000000000..a305497ef3 --- /dev/null +++ b/test/diff_UFS_rundir.sh @@ -0,0 +1,110 @@ +#! /bin/env bash + +# +# Differences relevant output files in two UFS model directories. GRiB files +# are compared via correlation reported by wgrib2. NetCDF files are compared +# by using NetCDF operators to calculate a diff then make sure all non- +# coordinate variable differences are zero. +# +# Syntax: +# diff_UFS_rundir.sh [-c coord_file][-h] dirA dirB +# +# Arguments: +# dirA, dirB: full paths to the UFS run directories to be compared +# +# Options: +# -c coord_file: file containing a list of coordinate variables +# -h: print usage message and exit +# + +set -eu + +usage() { + # + # Print usage statement + # + echo <<- 'EOF' + Differences relevant output files in two UFS model directories. GRiB files + are compared via correlation reported by wgrib2. NetCDF files are compared + by using NetCDF operators to calculate a diff then make sure all non- + coordinate variable differences are zero. + + Syntax: + diff_UFS_rundir.sh [-c coord_file][-h] dirA dirB + + Arguments: + dirA, dirB: full paths to the UFS run directories to be compared + + Options: + -c coord_file: file containing a list of coordinate variables + -h: print usage message and exit + EOF +} + +while getopts ":c:h" option; do + case "${option}" in + c) coord_file=${OPTARG} ;; + h) usage; exit 0 ;; + *) echo "Unknown option ${option}"; exit 1 ;; + esac +done + +num_args=$# +case $num_args in + 2) # Direct directory paths + dirA=$1 + dirB=$2 + ;; + *) # Unknown option + echo "${num_args} is not a valid number of arguments, use 2" + usage + exit 1 + ;; +esac + +source ./netcdf_op_functions.sh +source ./test_utils.sh + +temp_file=".diff.nc" +coord_file="${coord_file:-./coordinates.lst}" + +# Input files +files="data_table diag_table fd_ufs.yaml field_table ice_in input.nml med_modelio.nml \ + model_configure ufs.configure pio_in ww3_multi.inp ww3_shel.inp" + +for file in $files; do + echo "=== ${file} ===" + fileA="$dirA/$file" + fileB="$dirB/$file" + if [[ -f "$fileA" ]]; then + diff $fileA $fileB || : + else + echo ; echo; +done + +# GRiB files +files="$(basename_list '' $dirA/GFSFLX.Grb*)" + +module load wgrib2/2.0.8 + +for file in $files; do + echo "=== ${file} ===" + fileA="$dirA/$file" + fileB="$dirB/$file" + ./diff_grib_files.py $fileA $fileB +done + +# NetCDF Files +files="" +files="${files} $(basename_list '' $dirA/atmf*.nc $dirA/sfcf*.nc)" +if [[ -d "$dirA/history" ]]; then + files="$(basename_list 'history/' $dirA/history/*.nc)" +fi + +for file in $files; do + echo "=== ${file} ===" + fileA="$dirA/$file" + fileB="$dirB/$file" + nccmp -q $fileA $fileB $coord_file +done + diff --git a/test/diff_grib_files.py b/test/diff_grib_files.py new file mode 100755 index 0000000000..9c01afbb18 --- /dev/null +++ b/test/diff_grib_files.py @@ -0,0 +1,76 @@ +#! /bin/env python3 +''' +Compares two grib2 files and print any variables that have a + non-identity correlation. + +Syntax +------ +diff_grib_files.py fileA fileB + +Parameters +---------- +fileA: string + Path to the first grib2 file +fileB: string + Path to the second grib2 file + +''' +import re +import sys +import subprocess + +# TODO - Update to also check the min just in case the grib files have a constant offset + + +def count_nonid_corr(test_string: str, quiet=False): + ''' + Scan a wgrib2 print of the correlation between two values and count + how many variables have a non-identity correlation. Any such variables + are printed. + + wgrib2 is assumed to be invoked by the following command: + wgrib2 {fileA} -var -rpn 'sto_1' -import_grib {fileB} -rpn 'rcl_1:print_corr' + + Parameters + ---------- + test_string: str + STDOUT from wgrib2 call. + + quiet: bool, optional + Whether to suppress print messages of non-identy variables and summary. + + Returns + ------- + int + Number of non-identify correlations represented in the string. + + + ''' + pattern = re.compile(r"(\d+:\d+:)(?P.*):rpn_corr=(?P.*)") + matches = [m.groupdict() for m in pattern.finditer(test_string)] + + count = 0 + for match in matches: + if float(match['corr']) != 1.0: + count = count + 1 + if not quiet: + print(f"{match['var']}: corr={match['corr']}") + + if not quiet: + if count == 0: + print("All fields are identical!") + else: + print(f"{count} variables are different") + + return count + + +if __name__ == '__main__': + fileA = sys.argv[0] + fileB = sys.argv[1] + + wgrib2_cmd = f"wgrib2 {fileA} -var -rpn 'sto_1' -import_grib {fileB} -rpn 'rcl_1:print_corr'" + + string = subprocess.run(wgrib2_cmd, shell=True, stdout=subprocess.PIPE).stdout.decode("utf-8") + + count_nonid_corr(string) diff --git a/test/netcdf_op_functions.sh b/test/netcdf_op_functions.sh new file mode 100644 index 0000000000..0085855ea3 --- /dev/null +++ b/test/netcdf_op_functions.sh @@ -0,0 +1,177 @@ +#! /bin/env bash + +if [ -t 0 ]; then + module load nco/4.9.3 +fi + +## NetCDF operator shortcuts +# From nco.sourceforge.net/nco.html#Filters-for-ncks +# ncattget $att_nm $var_nm $fl_nm : What attributes does variable have? +function ncattget { ncks --trd -M -m ${3} | grep -E -i "^${2} attribute [0-9]+: ${1}" | cut -f 11- -d ' ' | sort ; } +# ncunits $att_val $fl_nm : Which variables have given units? +function ncunits { ncks --trd -m ${2} | grep -E -i " attribute [0-9]+: units.+ ${1}" | cut -f 1 -d ' ' | sort ; } +# ncavg $var_nm $fl_nm : What is mean of variable? +function ncavg { + temp_file=${PTMP:-$HOME}/foo.nc + ncwa -y avg -O -C -v ${1} ${2} ${temp_file} + ncks --trd -H -C -v ${1} ${temp_file} | cut -f 3- -d ' ' + rm ${temp_file} +} +# ncavg $var_nm $fl_nm : What is mean of variable? +function ncavg { + temp_file=${PTMP:-$HOME}/foo.nc + ncap2 -O -C -v -s "foo=${1}.avg();print(foo)" ${2} ${temp_file} | cut -f 3- -d ' ' + rm ${temp_file} +} +# ncdmnlst $fl_nm : What dimensions are in file? +function ncdmnlst { ncks --cdl -m ${1} | cut -d ':' -f 1 | cut -d '=' -s -f 1 ; } +# ncvardmnlst $var_nm $fl_nm : What dimensions are in a variable? +function ncvardmnlst { ncks --trd -m -v ${1} ${2} | grep -E -i "^${1} dimension [0-9]+: " | cut -f 4 -d ' ' | sed 's/,//' ; } +# ncvardmnlatlon $var_nm $fl_nm : Does variable contain both lat and lon dimensions? +# function ncvardmnlatlon { flg=$(ncks -C -v ${1} -m ${2} | grep -E -i "${1}\(" | grep -E "lat.*lon|lon.*lat") ; [[ ! -z "$flg" ]] && echo "Yes, ${1} has both lat and lon dimensions" || echo "No, ${1} does not have both lat and lon dimensions" } +# ncdmnsz $dmn_nm $fl_nm : What is dimension size? +function ncdmnsz { ncks --trd -m -M ${2} | grep -E -i ": ${1}, size =" | cut -f 7 -d ' ' | uniq ; } +# ncgrplst $fl_nm : What groups are in file? +function ncgrplst { ncks -m ${1} | grep 'group:' | cut -d ':' -f 2 | cut -d ' ' -f 2 | sort ; } +# ncvarlst $fl_nm : What variables are in file? +function ncvarlst { ncks --trd -m ${1} | grep -E ': type' | cut -f 1 -d ' ' | sed 's/://' | sort ; } +# ncmax $var_nm $fl_nm : What is maximum of variable? +function ncmax { + temp_file=${PTMP:-$HOME}/foo.nc + ncwa -y max -O -C -v ${1} ${2} ${temp_file} + ncks --trd -H -C -v ${1} ${temp_file} | cut -f 3- -d ' ' + rm ${temp_file} +} +# ncmax $var_nm $fl_nm : What is maximum of variable? +function ncmax { + temp_file=${PTMP:-$HOME}/foo.nc + ncap2 -O -C -v -s "foo=${1}.max();print(foo)" ${2} ${temp_file} | cut -f 3- -d ' ' + rm ${temp_file} +} +# ncmdn $var_nm $fl_nm : What is median of variable? +function ncmdn { + temp_file=${PTMP:-$HOME}/foo.nc + ncap2 -O -C -v -s "foo=gsl_stats_median_from_sorted_data(${1}.sort());print(foo)" ${2} ${temp_file} | cut -f 3- -d ' ' + rm ${temp_file} +} +# ncmin $var_nm $fl_nm : What is minimum of variable? +function ncmin { + temp_file=${PTMP:-$HOME}/foo.nc + ncap2 -O -C -v -s "foo=${1}.min();print(foo)" ${2} ${temp_file} | cut -f 3- -d ' ' + rm ${temp_file} +} +# ncrng $var_nm $fl_nm : What is range of variable? +function ncrng { + temp_file=${PTMP:-$HOME}/foo.nc + ncap2 -O -C -v -s "foo_min=${1}.min();foo_max=${1}.max();print(foo_min,\"%f\");print(\" to \");print(foo_max,\"%f\")" ${2} ${temp_file} + rm ${temp_file} +} +# ncmode $var_nm $fl_nm : What is mode of variable? +function ncmode { + temp_file=${PTMP:-$HOME}/foo.nc + ncap2 -O -C -v -s "foo=gsl_stats_median_from_sorted_data(${1}.sort());print(foo)" ${2} ${temp_file} | cut -f 3- -d ' ' + rm ${temp_file} +} +# ncrecsz $fl_nm : What is record dimension size? +function ncrecsz { ncks --trd -M ${1} | grep -E -i "^Root record dimension 0:" | cut -f 10- -d ' ' ; } +# nctypget $var_nm $fl_nm : What type is variable? +function nctypget { ncks --trd -m -v ${1} ${2} | grep -E -i "^${1}: type" | cut -f 3 -d ' ' | cut -f 1 -d ',' ; } + +function nccorr() { + temp_file=${PTMP:-$HOME}/foo.nc + ncap2 -O -C -v -s "foo_min=${1}.min();foo_max=${1}.max();print(foo_min,\"%f\");print(\" to \");print(foo_max,\"%f\")" ${2} ${temp_file} + rm ${temp_file} +} + +# Heavily modified from original +function nccmp() { + # + # Compare two netcdf files + # + # Uses ncdiff to create a difference of two NetCDFs, then checks to + # make sure all non-coordinate fields of the diff are zero. + # + # Syntax: + # nccmp [-q][-z] fileA fileB coord_file + # + # Arguments: + # fileA, fileB: NetCDFs to be compared + # coord_file: File containing coordinate variables + # + # Options: + # -q: quiet mode (implies -z) + # -z: suppress displaying fields with zero difference + # + # Notes: + # Will create a temporary file .diff in the $PTMP directory + # if PTMP is defined, otherwise .diff is created in the + # current directory. + # + + local OPTIND + suppress_msg="" + hide_zeros="NO" + quiet="NO" + while getopts ":qz" option; do + case "${option}" in + q) quiet="YES" ;& + z) suppress_msg=" (Suppressing zero difference fields)" + hide_zeros="YES" + ;; + *) echo "Unknown option ${option}" + ;; + esac + done + shift "$((OPTIND-1))" + fileA="${1}" + fileB="${2}" + coord_file="${3:-/dev/null}" + temp_file="${PTMP:-$(pwd)}/.diff" + if [[ ${quiet} == "NO" ]]; then + echo + echo "Comparing ${fileA} and ${fileB}" + fi + # Create diff of the files + ncdiff ${fileA} ${fileB} ${temp_file} --overwrite + if [[ ${quiet} == "NO" ]]; then + echo "Difference report:${suppress_msg}" + echo "(Coordinate variables will always be non-zero)" + fi + count=0 + # Check each variable + for var in $(ncvarlst ${temp_file}); do + if [[ $(egrep -o "^${var}\$" ${coord_file} | wc -l) == 0 ]]; then + # Variable is not in coordinate list + max=$(ncmax $var $temp_file 2> /dev/null) + if [[ -z $max ]]; then + echo "Error reading max of ${var}" + count=$((count + 1)) + continue + fi + min=$(ncmin $var $temp_file 2> /dev/null) + if [[ -z $min ]]; then + echo "Error reading min of ${var}" + count=$((count + 1)) + continue + fi + if [[ ${hide_zeros} == "NO" ]] || (( $(echo "$max != 0 || $min != 0" | bc) )); then + # Min/max is not zero or we are not hiding zeros + echo "${var}: ${min}..${max}" + count=$((count + 1)) + fi + else + # + # ncdiff doesn't difference coordinate variables. Instead coordinates + # are just placed in the diff file. While this is generally what we + # want, when checking for equivilence we need to ignore them. + # + if [[ ${quiet} == "NO" ]]; then + echo "$Coordinate ${var} ignored" + fi + fi + done + rm $temp_file + echo "${count} differences found" +} + + diff --git a/test/test_utils.sh b/test/test_utils.sh new file mode 100644 index 0000000000..b00e1d49cf --- /dev/null +++ b/test/test_utils.sh @@ -0,0 +1,26 @@ +#! /bin/env bash + +basename_list() { + # + # Take a list of paths, determines the base name, then + # prepends it to a base path. + # + # Syntax: + # basename_list base file_in* + # + # Arguments: + # base: Common root directory of all paths in list + # file_in: List of paths relative to $base/ + # + # Returns: + # List of paths constructed by prepending $base to each + # item in $file_in + # + base="${1}" + list="" + + for file_in in "${@:2}"; do + list="$list ${base}$(basename $file_in)" + done + echo $list +} diff --git a/ush/WAM_XML_to_ASCII.pl b/ush/WAM_XML_to_ASCII.pl old mode 100644 new mode 100755 index 3c7a9ff631..8eb5dedfe8 --- a/ush/WAM_XML_to_ASCII.pl +++ b/ush/WAM_XML_to_ASCII.pl @@ -1,4 +1,4 @@ -#! /usr/bin/env perl +#!/usr/bin/env perl use strict; use warnings; @@ -14,20 +14,20 @@ # write XML Data to file -open (MYFILE, ">", "wam_input.asc") +open (MYFILE, ">", "wam_input.asc") or die "Can't Open MYFILE: $!"; - + print MYFILE "Issue Date ", $data->{'issue-date'}, "\n"; print MYFILE "F10 81 Day Avg ", $data->{'f10-81-avg-currentday'}, " \n"; print MYFILE "Flags: 0=Forecast, 1=Estimated, 2=Observed \n\n"; - + printf MYFILE " Date_Time F10 Kp F10Flag KpFlag \n"; printf MYFILE "----------------------------------------------------------------------- \n"; - + my $counter = 0; while ($counter < 56) { - printf MYFILE "%s%12g%12g%12g%12g \n", + printf MYFILE "%s%12g%12g%12g%12g \n", $data->{'data-item'}->[$counter]->{'time-tag'}, $data->{'data-item'}->[$counter]->{'f10'}, $data->{'data-item'}->[$counter]->{'kp'}, @@ -36,6 +36,5 @@ $counter +=1; } -close (MYFILE); - +close (MYFILE); diff --git a/ush/calcanl_gfs.py b/ush/calcanl_gfs.py new file mode 100755 index 0000000000..a325ec35b3 --- /dev/null +++ b/ush/calcanl_gfs.py @@ -0,0 +1,365 @@ +#!/usr/bin/env python +# calcanl_gfs.py +# cory.r.martin@noaa.gov +# 2019-10-11 +# script to run executables to produce netCDF analysis +# on GFS gaussian grid for downstream users +import os +import shutil +import subprocess +import sys +import gsi_utils +from collections import OrderedDict +import datetime + + +# function to calculate analysis from a given increment file and background +def calcanl_gfs(DoIAU, l4DEnsVar, Write4Danl, ComOut, APrefix, + ComIn_Ges, GPrefix, + FixDir, atmges_ens_mean, RunDir, NThreads, NEMSGet, IAUHrs, + ExecCMD, ExecCMDMPI, ExecAnl, ExecChgresInc, Cdump): + print('calcanl_gfs beginning at: ', datetime.datetime.utcnow()) + + IAUHH = IAUHrs + + # copy and link files + if DoIAU and l4DEnsVar and Write4Danl: + for fh in IAUHH: + if fh == 6: + # for full res analysis + CalcAnlDir = RunDir + '/calcanl_' + format(fh, '02') + if not os.path.exists(CalcAnlDir): + gsi_utils.make_dir(CalcAnlDir) + gsi_utils.copy_file(ExecAnl, CalcAnlDir + '/calc_anl.x') + gsi_utils.link_file(RunDir + '/siginc.nc', CalcAnlDir + '/siginc.nc.06') + gsi_utils.link_file(RunDir + '/sigf06', CalcAnlDir + '/ges.06') + gsi_utils.link_file(RunDir + '/siganl', CalcAnlDir + '/anl.06') + gsi_utils.copy_file(ExecChgresInc, CalcAnlDir + '/chgres_inc.x') + # for ensemble res analysis + if Cdump in ["gdas", "gfs"]: + CalcAnlDir = RunDir + '/calcanl_ensres_' + format(fh, '02') + if not os.path.exists(CalcAnlDir): + gsi_utils.make_dir(CalcAnlDir) + gsi_utils.copy_file(ExecAnl, CalcAnlDir + '/calc_anl.x') + gsi_utils.link_file(RunDir + '/siginc.nc', CalcAnlDir + '/siginc.nc.06') + gsi_utils.link_file(ComOut + '/' + APrefix + 'atmanl.ensres.nc', CalcAnlDir + '/anl.ensres.06') + gsi_utils.link_file(ComIn_Ges + '/' + GPrefix + 'atmf006.ensres.nc', CalcAnlDir + '/ges.ensres.06') + gsi_utils.link_file(RunDir + '/sigf06', CalcAnlDir + '/ges.06') + else: + if os.path.isfile('sigi' + format(fh, '02') + '.nc'): + # for full res analysis + CalcAnlDir = RunDir + '/calcanl_' + format(fh, '02') + CalcAnlDir6 = RunDir + '/calcanl_' + format(6, '02') + if not os.path.exists(CalcAnlDir): + gsi_utils.make_dir(CalcAnlDir) + if not os.path.exists(CalcAnlDir6): + gsi_utils.make_dir(CalcAnlDir6) + gsi_utils.link_file(ComOut + '/' + APrefix + 'atma' + format(fh, '03') + '.nc', + CalcAnlDir6 + '/anl.' + format(fh, '02')) + gsi_utils.link_file(RunDir + '/siga' + format(fh, '02'), + CalcAnlDir6 + '/anl.' + format(fh, '02')) + gsi_utils.link_file(RunDir + '/sigi' + format(fh, '02') + '.nc', + CalcAnlDir + '/siginc.nc.' + format(fh, '02')) + gsi_utils.link_file(CalcAnlDir6 + '/inc.fullres.' + format(fh, '02'), + CalcAnlDir + '/inc.fullres.' + format(fh, '02')) + gsi_utils.link_file(RunDir + '/sigf' + format(fh, '02'), + CalcAnlDir6 + '/ges.' + format(fh, '02')) + gsi_utils.link_file(RunDir + '/sigf' + format(fh, '02'), + CalcAnlDir + '/ges.' + format(fh, '02')) + gsi_utils.copy_file(ExecChgresInc, CalcAnlDir + '/chgres_inc.x') + # for ensemble res analysis + CalcAnlDir = RunDir + '/calcanl_ensres_' + format(fh, '02') + CalcAnlDir6 = RunDir + '/calcanl_ensres_' + format(6, '02') + if not os.path.exists(CalcAnlDir): + gsi_utils.make_dir(CalcAnlDir) + if not os.path.exists(CalcAnlDir6): + gsi_utils.make_dir(CalcAnlDir6) + gsi_utils.link_file(ComOut + '/' + APrefix + 'atma' + format(fh, '03') + '.ensres.nc', + CalcAnlDir6 + '/anl.ensres.' + format(fh, '02')) + gsi_utils.link_file(RunDir + '/sigi' + format(fh, '02') + '.nc', + CalcAnlDir6 + '/siginc.nc.' + format(fh, '02')) + gsi_utils.link_file(ComIn_Ges + '/' + GPrefix + 'atmf' + format(fh, '03') + '.ensres.nc', + CalcAnlDir6 + '/ges.ensres.' + format(fh, '02')) + + else: + # for full res analysis + CalcAnlDir = RunDir + '/calcanl_' + format(6, '02') + if not os.path.exists(CalcAnlDir): + gsi_utils.make_dir(CalcAnlDir) + gsi_utils.copy_file(ExecAnl, CalcAnlDir + '/calc_anl.x') + gsi_utils.link_file(RunDir + '/siginc.nc', CalcAnlDir + '/siginc.nc.06') + gsi_utils.link_file(RunDir + '/sigf06', CalcAnlDir + '/ges.06') + gsi_utils.link_file(RunDir + '/siganl', CalcAnlDir + '/anl.06') + gsi_utils.copy_file(ExecChgresInc, CalcAnlDir + '/chgres_inc.x') + # for ensemble res analysis + CalcAnlDir = RunDir + '/calcanl_ensres_' + format(6, '02') + if not os.path.exists(CalcAnlDir): + gsi_utils.make_dir(CalcAnlDir) + gsi_utils.copy_file(ExecAnl, CalcAnlDir + '/calc_anl.x') + gsi_utils.link_file(RunDir + '/siginc.nc', CalcAnlDir + '/siginc.nc.06') + gsi_utils.link_file(ComOut + '/' + APrefix + 'atmanl.ensres.nc', CalcAnlDir + '/anl.ensres.06') + gsi_utils.link_file(ComIn_Ges + '/' + GPrefix + 'atmf006.ensres.nc', CalcAnlDir + '/ges.ensres.06') + + # get dimension information from background and increment files + AnlDims = gsi_utils.get_ncdims('siginc.nc') + GesDims = gsi_utils.get_ncdims('sigf06') + + levs = AnlDims['lev'] + LonA = AnlDims['lon'] + LatA = AnlDims['lat'] + LonB = GesDims['grid_xt'] + LatB = GesDims['grid_yt'] + + # vertical coordinate info + levs2 = levs + 1 + siglevel = FixDir + '/global_hyblev.l' + str(levs2) + '.txt' + + # determine how many forecast hours to process + nFH = 0 + for fh in IAUHH: + # first check to see if increment file exists + CalcAnlDir = RunDir + '/calcanl_' + format(fh, '02') + if (os.path.isfile(CalcAnlDir + '/siginc.nc.' + format(fh, '02'))): + print('will process increment file: ' + CalcAnlDir + '/siginc.nc.' + format(fh, '02')) + nFH += 1 + else: + print('Increment file: ' + CalcAnlDir + '/siginc.nc.' + format(fh, '02') + ' does not exist. Skipping.') + + sys.stdout.flush() + # need to gather information about runtime environment + ExecCMD = ExecCMD.replace("$ncmd", "1") + os.environ['OMP_NUM_THREADS'] = str(NThreads) + os.environ['ncmd'] = str(nFH) + ExecCMDMPI1 = ExecCMDMPI.replace("$ncmd", str(1)) + ExecCMDMPI = ExecCMDMPI.replace("$ncmd", str(nFH)) + ExecCMDLevs = ExecCMDMPI.replace("$ncmd", str(levs)) + ExecCMDMPI10 = ExecCMDMPI.replace("$ncmd", str(10)) + + # are we using mpirun with lsf, srun, or aprun with Cray? + launcher = ExecCMDMPI.split(' ')[0] + if launcher == 'mpirun': + hostfile = os.getenv('LSB_DJOB_HOSTFILE', '') + with open(hostfile) as f: + hosts_tmp = f.readlines() + hosts_tmp = [x.strip() for x in hosts_tmp] + hosts = [] + [hosts.append(x) for x in hosts_tmp if x not in hosts] + nhosts = len(hosts) + ExecCMDMPI_host = 'mpirun -np ' + str(nFH) + ' --hostfile hosts' + tasks = int(os.getenv('LSB_DJOB_NUMPROC', 1)) + if levs > tasks: + ExecCMDMPILevs_host = 'mpirun -np ' + str(tasks) + ' --hostfile hosts' + ExecCMDMPILevs_nohost = 'mpirun -np ' + str(tasks) + else: + ExecCMDMPILevs_host = 'mpirun -np ' + str(levs) + ' --hostfile hosts' + ExecCMDMPILevs_nohost = 'mpirun -np ' + str(levs) + ExecCMDMPI1_host = 'mpirun -np 1 --hostfile hosts' + ExecCMDMPI10_host = 'mpirun -np 10 --hostfile hosts' + elif launcher == 'mpiexec': + hostfile = os.getenv('PBS_NODEFILE', '') + with open(hostfile) as f: + hosts_tmp = f.readlines() + hosts_tmp = [x.strip() for x in hosts_tmp] + hosts = [] + [hosts.append(x) for x in hosts_tmp if x not in hosts] + nhosts = len(hosts) + ExecCMDMPI_host = 'mpiexec -l -n ' + str(nFH) + tasks = int(os.getenv('ntasks', 1)) + print('nhosts,tasks=', nhosts, tasks) + if levs > tasks: + ExecCMDMPILevs_host = 'mpiexec -l -n ' + str(tasks) + ExecCMDMPILevs_nohost = 'mpiexec -l -n ' + str(tasks) + else: + ExecCMDMPILevs_host = 'mpiexec -l -n ' + str(levs) + ExecCMDMPILevs_nohost = 'mpiexec -l -n ' + str(levs) + ExecCMDMPI1_host = 'mpiexec -l -n 1 --cpu-bind depth --depth ' + str(NThreads) + ExecCMDMPI10_host = 'mpiexec -l -n 10 --cpu-bind depth --depth ' + str(NThreads) + elif launcher == 'srun': + nodes = os.getenv('SLURM_JOB_NODELIST', '') + hosts_tmp = subprocess.check_output('scontrol show hostnames ' + nodes, shell=True) + if (sys.version_info > (3, 0)): + hosts_tmp = hosts_tmp.decode('utf-8') + hosts_tmp = str(hosts_tmp).splitlines() + hosts_tmp = [x.strip() for x in hosts_tmp] + else: + hosts_tmp = hosts_tmp.strip() + hosts_tmp = str(hosts_tmp).splitlines() + hosts_tmp = [x.strip() for x in hosts_tmp] + hosts = [] + [hosts.append(x) for x in hosts_tmp if x not in hosts] + nhosts = len(hosts) + ExecCMDMPI_host = 'srun -n ' + str(nFH) + ' --verbose --export=ALL -c 1 --distribution=arbitrary --cpu-bind=cores' + # need to account for when fewer than LEVS tasks are available + tasks = int(os.getenv('SLURM_NPROCS', 1)) + if levs > tasks: + ExecCMDMPILevs_host = 'srun -n ' + str(tasks) + ' --verbose --export=ALL -c 1 --distribution=arbitrary --cpu-bind=cores' + ExecCMDMPILevs_nohost = 'srun -n ' + str(tasks) + ' --verbose --export=ALL' + else: + ExecCMDMPILevs_host = 'srun -n ' + str(levs) + ' --verbose --export=ALL -c 1 --distribution=arbitrary --cpu-bind=cores' + ExecCMDMPILevs_nohost = 'srun -n ' + str(levs) + ' --verbose --export=ALL' + ExecCMDMPI1_host = 'srun -n 1 --verbose --export=ALL -c 1 --distribution=arbitrary --cpu-bind=cores' + ExecCMDMPI10_host = 'srun -n 10 --verbose --export=ALL -c 1 --distribution=arbitrary --cpu-bind=cores' + elif launcher == 'aprun': + hostfile = os.getenv('LSB_DJOB_HOSTFILE', '') + with open(hostfile) as f: + hosts_tmp = f.readlines() + hosts_tmp = [x.strip() for x in hosts_tmp] + hosts = [] + [hosts.append(x) for x in hosts_tmp if x not in hosts] + nhosts = len(hosts) + ExecCMDMPI_host = 'aprun -l hosts -d ' + str(NThreads) + ' -n ' + str(nFH) + ExecCMDMPILevs_host = 'aprun -l hosts -d ' + str(NThreads) + ' -n ' + str(levs) + ExecCMDMPILevs_nohost = 'aprun -d ' + str(NThreads) + ' -n ' + str(levs) + ExecCMDMPI1_host = 'aprun -l hosts -d ' + str(NThreads) + ' -n 1' + ExecCMDMPI10_host = 'aprun -l hosts -d ' + str(NThreads) + ' -n 10' + else: + print('unknown MPI launcher. Failure.') + sys.exit(1) + + # generate the full resolution analysis + ihost = 0 + # interpolate increment to full background resolution + for fh in IAUHH: + # first check to see if increment file exists + CalcAnlDir = RunDir + '/calcanl_' + format(fh, '02') + if (os.path.isfile(CalcAnlDir + '/siginc.nc.' + format(fh, '02'))): + print('Interpolating increment for f' + format(fh, '03')) + # set up the namelist + namelist = OrderedDict() + namelist["setup"] = {"lon_out": LonB, + "lat_out": LatB, + "lev": levs, + "infile": "'siginc.nc." + format(fh, '02') + "'", + "outfile": "'inc.fullres." + format(fh, '02') + "'", + } + gsi_utils.write_nml(namelist, CalcAnlDir + '/fort.43') + + if ihost >= nhosts: + ihost = 0 + with open(CalcAnlDir + '/hosts', 'w') as hostfile: + hostfile.write(hosts[ihost] + '\n') + if launcher == 'srun': # need to write host per task not per node for slurm + # For xjet, each instance of chgres_inc must run on two nodes each + if os.getenv('SLURM_JOB_PARTITION', '') == 'xjet': + for a in range(0, 4): + hostfile.write(hosts[ihost] + '\n') + ihost += 1 + for a in range(0, 5): + hostfile.write(hosts[ihost] + '\n') + for a in range(0, 9): # need 9 more of the same host for the 10 tasks for chgres_inc + hostfile.write(hosts[ihost] + '\n') + if launcher == 'srun': + os.environ['SLURM_HOSTFILE'] = CalcAnlDir + '/hosts' + print('interp_inc', fh, namelist) + job = subprocess.Popen(ExecCMDMPI10_host + ' ' + CalcAnlDir + '/chgres_inc.x', shell=True, cwd=CalcAnlDir) + print(ExecCMDMPI10_host + ' ' + CalcAnlDir + '/chgres_inc.x submitted on ' + hosts[ihost]) + sys.stdout.flush() + ec = job.wait() + if ec != 0: + print('Error with chgres_inc.x at forecast hour: f' + format(fh, '03')) + print('Error with chgres_inc.x, exit code=' + str(ec)) + print(locals()) + sys.exit(ec) + ihost += 1 + else: + print('f' + format(fh, '03') + ' is in $IAUFHRS but increment file is missing. Skipping.') + + # generate analysis from interpolated increment + CalcAnlDir6 = RunDir + '/calcanl_' + format(6, '02') + # set up the namelist + namelist = OrderedDict() + namelist["setup"] = {"datapath": "'./'", + "analysis_filename": "'anl'", + "firstguess_filename": "'ges'", + "increment_filename": "'inc.fullres'", + "fhr": 6, + } + + gsi_utils.write_nml(namelist, CalcAnlDir6 + '/calc_analysis.nml') + + # run the executable + if ihost >= nhosts - 1: + ihost = 0 + if launcher == 'srun': + del os.environ['SLURM_HOSTFILE'] + print('fullres_calc_anl', namelist) + fullres_anl_job = subprocess.Popen(ExecCMDMPILevs_nohost + ' ' + CalcAnlDir6 + '/calc_anl.x', shell=True, cwd=CalcAnlDir6) + print(ExecCMDMPILevs_nohost + ' ' + CalcAnlDir6 + '/calc_anl.x submitted') + + sys.stdout.flush() + exit_fullres = fullres_anl_job.wait() + sys.stdout.flush() + if exit_fullres != 0: + print('Error with calc_analysis.x for deterministic resolution, exit code=' + str(exit_fullres)) + print(locals()) + sys.exit(exit_fullres) + + # compute determinstic analysis on ensemble resolution + if Cdump in ["gdas", "gfs"]: + chgres_jobs = [] + for fh in IAUHH: + # first check to see if guess file exists + CalcAnlDir6 = RunDir + '/calcanl_ensres_06' + print(CalcAnlDir6 + '/ges.ensres.' + format(fh, '02')) + if (os.path.isfile(CalcAnlDir6 + '/ges.ensres.' + format(fh, '02'))): + print('Calculating analysis on ensemble resolution for f' + format(fh, '03')) + # generate ensres analysis from interpolated background + # set up the namelist + namelist = OrderedDict() + namelist["setup"] = {"datapath": "'./'", + "analysis_filename": "'anl.ensres'", + "firstguess_filename": "'ges.ensres'", + "increment_filename": "'siginc.nc'", + "fhr": fh, + } + + gsi_utils.write_nml(namelist, CalcAnlDir6 + '/calc_analysis.nml') + + # run the executable + if ihost > nhosts - 1: + ihost = 0 + print('ensres_calc_anl', namelist) + ensres_anl_job = subprocess.Popen(ExecCMDMPILevs_nohost + ' ' + CalcAnlDir6 + '/calc_anl.x', shell=True, cwd=CalcAnlDir6) + print(ExecCMDMPILevs_nohost + ' ' + CalcAnlDir6 + '/calc_anl.x submitted') + + sys.stdout.flush() + # check on analysis steps + exit_ensres = ensres_anl_job.wait() + if exit_ensres != 0: + print('Error with calc_analysis.x for ensemble resolution, exit code=' + str(exit_ensres)) + print(locals()) + sys.exit(exit_ensres) + else: + print('f' + format(fh, '03') + ' is in $IAUFHRS but ensemble resolution guess file is missing. Skipping.') + + print('calcanl_gfs successfully completed at: ', datetime.datetime.utcnow()) + print(locals()) + + +# run the function if this script is called from the command line +if __name__ == '__main__': + DoIAU = gsi_utils.isTrue(os.getenv('DOIAU', 'NO')) + l4DEnsVar = gsi_utils.isTrue(os.getenv('l4densvar', 'NO')) + Write4Danl = gsi_utils.isTrue(os.getenv('lwrite4danl', 'NO')) + ComIn_Ges = os.getenv('COM_ATMOS_HISTORY_PREV', './') + GPrefix = os.getenv('GPREFIX', './') + ComOut = os.getenv('COM_ATMOS_ANALYSIS', './') + APrefix = os.getenv('APREFIX', '') + NThreads = os.getenv('NTHREADS_CHGRES', 1) + FixDir = os.getenv('FIXgsm', './') + atmges_ens_mean = os.getenv('ATMGES_ENSMEAN', './atmges_ensmean') + RunDir = os.getenv('DATA', './') + ExecCMD = os.getenv('APRUN_CALCANL', '') + ExecCMDMPI = os.getenv('APRUN_CALCINC', '') + ExecAnl = os.getenv('CALCANLEXEC', './calc_analysis.x') + ExecChgresInc = os.getenv('CHGRESINCEXEC', './interp_inc.x') + NEMSGet = os.getenv('NEMSIOGET', 'nemsio_get') + IAUHrs = list(map(int, os.getenv('IAUFHRS', '6').split(','))) + Cdump = os.getenv('CDUMP', 'gdas') + + print(locals()) + calcanl_gfs(DoIAU, l4DEnsVar, Write4Danl, ComOut, APrefix, + ComIn_Ges, GPrefix, + FixDir, atmges_ens_mean, RunDir, NThreads, NEMSGet, IAUHrs, + ExecCMD, ExecCMDMPI, ExecAnl, ExecChgresInc, + Cdump) diff --git a/ush/calcinc_gfs.py b/ush/calcinc_gfs.py new file mode 100755 index 0000000000..cb334ac836 --- /dev/null +++ b/ush/calcinc_gfs.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python +# calcinc_gfs.py +# cory.r.martin@noaa.gov +# 2019-10-10 +# script to run calc_increment_ens.x to produce +# increment from background and analysis file difference +import os +import shutil +import subprocess +import sys +import gsi_utils +from collections import OrderedDict + +# main function + + +def calcinc_gfs(DoIAU, l4DEnsVar, Write4Danl, ComOut, APrefix, IAUHrs, + NThreads, IMP_Physics, Inc2Zero, RunDir, Exec, ExecCMD): + # run the calc_increment_ens executable + + # copy and link files + if DoIAU and l4DEnsVar and Write4Danl: + nFH = 0 + for fh in IAUHrs: + nFH += 1 + if fh == 6: + gsi_utils.link_file('sigf06', 'atmges_mem' + format(nFH, '03')) + gsi_utils.link_file('siganl', 'atmanl_mem' + format(nFH, '03')) + gsi_utils.link_file(ComOut + '/' + APrefix + 'atminc.nc', 'atminc_mem' + format(nFH, '03')) + else: + gsi_utils.link_file('sigf' + format(fh, '02'), 'atmges_mem' + format(nFH, '03')) + gsi_utils.link_file('siga' + format(fh, '02'), 'atmanl_mem' + format(nFH, '03')) + gsi_utils.link_file(ComOut + '/' + APrefix + 'atmi' + format(fh, '03') + '.nc', 'atminc_mem' + format(nFH, '03')) + else: + nFH = 1 + gsi_utils.link_file('sigf06', 'atmges_mem001') + gsi_utils.link_file('siganl', 'atmanl_mem001') + gsi_utils.link_file(ComOut + '/' + APrefix + 'atminc', 'atminc_mem001') + os.environ['OMP_NUM_THREADS'] = str(NThreads) + os.environ['ncmd'] = str(nFH) + shutil.copy(Exec, RunDir + '/calc_inc.x') + ExecCMD = ExecCMD.replace("$ncmd", str(nFH)) + + # set up the namelist + namelist = OrderedDict() + namelist["setup"] = {"datapath": "'./'", + "analysis_filename": "'atmanl'", + "firstguess_filename": "'atmges'", + "increment_filename": "'atminc'", + "debug": ".false.", + "nens": str(nFH), + "imp_physics": str(IMP_Physics)} + + namelist["zeroinc"] = {"incvars_to_zero": Inc2Zero} + + gsi_utils.write_nml(namelist, RunDir + '/calc_increment.nml') + + # run the executable + try: + err = subprocess.check_call(ExecCMD + ' ' + RunDir + '/calc_inc.x', shell=True) + print(locals()) + except subprocess.CalledProcessError as e: + print('Error with calc_inc.x, exit code=' + str(e.returncode)) + print(locals()) + sys.exit(e.returncode) + + +# run the function if this script is called from the command line +if __name__ == '__main__': + DoIAU = gsi_utils.isTrue(os.getenv('DOIAU', 'NO')) + l4DEnsVar = gsi_utils.isTrue(os.getenv('l4densvar', 'NO')) + Write4Danl = gsi_utils.isTrue(os.getenv('lwrite4danl', 'NO')) + ComOut = os.getenv('COM_ATMOS_ANALYSIS', './') + APrefix = os.getenv('APREFIX', '') + NThreads = os.getenv('NTHREADS_CALCINC', 1) + IMP_Physics = os.getenv('imp_physics', 11) + RunDir = os.getenv('DATA', './') + ExecNC = os.getenv('CALCINCNCEXEC', './calc_increment_ens_ncio.x') + Inc2Zero = os.getenv('INCREMENTS_TO_ZERO', '"NONE"') + ExecCMD = os.getenv('APRUN_CALCINC', '') + IAUHrs = list(map(int, os.getenv('IAUFHRS', '6').split(','))) + + Exec = ExecNC + + print(locals()) + calcinc_gfs(DoIAU, l4DEnsVar, Write4Danl, ComOut, APrefix, IAUHrs, + NThreads, IMP_Physics, Inc2Zero, RunDir, Exec, ExecCMD) diff --git a/ush/compare_f90nml.py b/ush/compare_f90nml.py new file mode 100755 index 0000000000..f3c5573a92 --- /dev/null +++ b/ush/compare_f90nml.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python3 + +import json +import f90nml +from typing import Dict +from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter + + +def get_dict_from_nml(filename: str) -> Dict: + """ + Read a F90 namelist and convert to a dictionary. + This method uses json to convert OrderedDictionary into regular dictionary + Parameters + ---------- + filename: str + Name of the F90 namelist + Returns + ------- + dictionary: Dict + F90 namelist returned as a dictionary + """ + return json.loads(json.dumps(f90nml.read(filename).todict())) + + +def compare_dicts(dict1: Dict, dict2: Dict, path: str = "") -> None: + """ + Compare 2 dictionaries. + This is done by looping over keys in dictionary 1 and searching for them + in dictionary 2. + If a matching key is found, the values are compared. + If a matching key is not found, it is set to as UNDEFINED. + Note: A reverse match is not performed in this method. For reverse matching, use the -r option in the main driver. + Note: This is a recursive method to handle nested dictionaries. + Parameters + ---------- + dict1: Dict + First dictionary + dict2: Dict + Second dictionary + path: str (optional) + default: "" + key (if nested dictionary) + Returns + ------- + None + """ + + result = dict() + for kk in dict1.keys(): # Loop over all keys of first dictionary + if kk in dict2.keys(): # kk is present in dict2 + if isinstance(dict1[kk], dict): # nested dictionary, go deeper + compare_dicts(dict1[kk], dict2[kk], path=kk) + else: + if dict1[kk] != dict2[kk]: + if path not in result: + result[path] = dict() + result[path][kk] = [dict1[kk], dict2[kk]] + else: # kk is *not* present in dict2 + tt = path if path else kk + if tt not in result: + result[tt] = dict() + result[tt][kk] = [dict1[kk], 'UNDEFINED'] + + def _print_diffs(diff_dict: Dict) -> None: + """ + Print the differences between the two dictionaries to stdout + Parameters + ---------- + diff_dict: Dict + Dictionary containing differences + Returns + ------- + None + """ + for path in diff_dict.keys(): + print(f"{path}:") + max_len = len(max(diff_dict[path], key=len)) + for kk in diff_dict[path].keys(): + items = diff_dict[path][kk] + print( + f"{kk:>{max_len+2}} : {' | '.join(map(str, diff_dict[path][kk]))}") + + _print_diffs(result) + + +if __name__ == "__main__": + + parser = ArgumentParser( + description=("Compare two Fortran namelists and display differences (left_namelist - right_namelist)"), + formatter_class=ArgumentDefaultsHelpFormatter) + parser.add_argument('left_namelist', type=str, help="Left namelist to compare") + parser.add_argument('right_namelist', type=str, help="Right namelist to compare") + parser.add_argument('-r', '--reverse', help='reverse diff (right_namelist - left_namelist)', + action='store_true', required=False) + args = parser.parse_args() + + nml1, nml2 = args.left_namelist, args.right_namelist + if args.reverse: + nml2, nml1 = nml1, nml2 + + dict1 = get_dict_from_nml(nml1) + dict2 = get_dict_from_nml(nml2) + + msg = f"comparing: {nml1} | {nml2}" + print(msg) + print("-" * len(msg)) + compare_dicts(dict1, dict2) diff --git a/ush/detect_machine.sh b/ush/detect_machine.sh new file mode 100755 index 0000000000..afeb01830b --- /dev/null +++ b/ush/detect_machine.sh @@ -0,0 +1,87 @@ +#!/bin/bash + +# First detect w/ hostname +case $(hostname -f) in + + adecflow0[12].acorn.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### acorn + alogin0[12].acorn.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### acorn + clogin0[1-9].cactus.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### cactus01-9 + clogin10.cactus.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### cactus10 + dlogin0[1-9].dogwood.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### dogwood01-9 + dlogin10.dogwood.wcoss2.ncep.noaa.gov) MACHINE_ID=wcoss2 ;; ### dogwood10 + + gaea9) MACHINE_ID=gaea ;; ### gaea9 + gaea1[0-6]) MACHINE_ID=gaea ;; ### gaea10-16 + gaea9.ncrc.gov) MACHINE_ID=gaea ;; ### gaea9 + gaea1[0-6].ncrc.gov) MACHINE_ID=gaea ;; ### gaea10-16 + + hfe0[1-9]) MACHINE_ID=hera ;; ### hera01-9 + hfe1[0-2]) MACHINE_ID=hera ;; ### hera10-12 + hecflow01) MACHINE_ID=hera ;; ### heraecflow01 + + s4-submit.ssec.wisc.edu) MACHINE_ID=s4 ;; ### s4 + + fe[1-8]) MACHINE_ID=jet ;; ### jet01-8 + tfe[12]) MACHINE_ID=jet ;; ### tjet1-2 + + Orion-login-[1-4].HPC.MsState.Edu) MACHINE_ID=orion ;; ### orion1-4 + + hercules-login-[1-4].hpc.msstate.edu) MACHINE_ID=hercules ;; ### hercules1-4 + + cheyenne[1-6].cheyenne.ucar.edu) MACHINE_ID=cheyenne ;; ### cheyenne1-6 + cheyenne[1-6].ib0.cheyenne.ucar.edu) MACHINE_ID=cheyenne ;; ### cheyenne1-6 + chadmin[1-6].ib0.cheyenne.ucar.edu) MACHINE_ID=cheyenne ;; ### cheyenne1-6 + + login[1-4].stampede2.tacc.utexas.edu) MACHINE_ID=stampede ;; ### stampede1-4 + + login0[1-2].expanse.sdsc.edu) MACHINE_ID=expanse ;; ### expanse1-2 + + discover3[1-5].prv.cube) MACHINE_ID=discover ;; ### discover31-35 + *) MACHINE_ID=UNKNOWN ;; # Unknown platform +esac + +if [[ ${MACHINE_ID} == "UNKNOWN" ]]; then + case ${PW_CSP:-} in + "aws" | "google" | "azure") MACHINE_ID=noaacloud ;; + *) PW_CSP="UNKNOWN" + esac +fi + +# Overwrite auto-detect with MACHINE if set +MACHINE_ID=${MACHINE:-${MACHINE_ID}} + +# If MACHINE_ID is no longer UNKNNOWN, return it +if [[ "${MACHINE_ID}" != "UNKNOWN" ]]; then + return +fi + +# Try searching based on paths since hostname may not match on compute nodes +if [[ -d /lfs/f1 ]] ; then + # We are on NOAA Cactus or Dogwood + MACHINE_ID=wcoss2 +elif [[ -d /mnt/lfs1 ]] ; then + # We are on NOAA Jet + MACHINE_ID=jet +elif [[ -d /scratch1 ]] ; then + # We are on NOAA Hera + MACHINE_ID=hera +elif [[ -d /work ]] ; then + # We are on MSU Orion or Hercules + if [[ -d /apps/other ]] ; then + # We are on Hercules + MACHINE_ID=hercules + else + MACHINE_ID=orion + fi +elif [[ -d /glade ]] ; then + # We are on NCAR Yellowstone + MACHINE_ID=cheyenne +elif [[ -d /lustre && -d /ncrc ]] ; then + # We are on GAEA. + MACHINE_ID=gaea +elif [[ -d /data/prod ]] ; then + # We are on SSEC's S4 + MACHINE_ID=s4 +else + echo WARNING: UNKNOWN PLATFORM 1>&2 +fi diff --git a/ush/drive_makeprepbufr.sh b/ush/drive_makeprepbufr.sh deleted file mode 100755 index ad36904724..0000000000 --- a/ush/drive_makeprepbufr.sh +++ /dev/null @@ -1,138 +0,0 @@ -#!/bin/sh -x -############################################################### -# < next few lines under version control, D O N O T E D I T > -# $Date$ -# $Revision$ -# $Author$ -# $Id$ -############################################################### - -############################################################### -## Author: Rahul Mahajan Org: NCEP/EMC Date: April 2017 - -## Abstract: -## Prepare for analysis driver script -## EXPDIR : /full/path/to/config/files -## CDATE : current analysis date (YYYYMMDDHH) -## CDUMP : cycle name (gdas / gfs) -############################################################### - -############################################################### -# Source relevant configs -configs="base prep prepbufr" -for config in $configs; do - . $EXPDIR/config.${config} - status=$? - [[ $status -ne 0 ]] && exit $status -done - -############################################################### -# Source machine runtime environment -. $BASE_ENV/${machine}.env prepbufr -status=$? -[[ $status -ne 0 ]] && exit $status - -############################################################### -KEEPDATA=${KEEPDATA:-"NO"} -DO_RELOCATE=${DO_RELOCATE:-"NO"} -DONST=${DONST:-"NO"} - -############################################################### -# Set script and dependency variables -export COMPONENT=${COMPONENT:-atmos} - -GDATE=$($NDATE -$assim_freq $CDATE) - -cymd=$(echo $CDATE | cut -c1-8) -chh=$(echo $CDATE | cut -c9-10) -gymd=$(echo $GDATE | cut -c1-8) -ghh=$(echo $GDATE | cut -c9-10) - -OPREFIX="${CDUMP}.t${chh}z." -OSUFFIX=".bufr_d" -GPREFIX="gdas.t${ghh}z." -GSUFFIX=${GSUFFIX:-$SUFFIX} -APREFIX="${CDUMP}.t${chh}z." -ASUFFIX=${ASUFFIX:-$SUFFIX} - -COMIN_OBS=${COMIN_OBS:-"$DMPDIR/${CDUMP}${DUMP_SUFFIX}.${PDY}/${cyc}"} -COMIN_GES=${COMIN_GES:-"$ROTDIR/gdas.$gymd/$ghh/$COMPONENT"} -COMOUT=${COMOUT:-"$ROTDIR/$CDUMP.$cymd/$chh/$COMPONENT"} -[[ ! -d $COMOUT ]] && mkdir -p $COMOUT -export DATA="$RUNDIR/$CDATE/$CDUMP/prepbufr" -[[ -d $DATA ]] && rm -rf $DATA -mkdir -p $DATA -cd $DATA - -############################################################### -# MAKEPREPBUFRSH environment specific variables -export NEMSIO_IN=".true." -export COMSP="$DATA/" -export NET=$CDUMP - -############################################################### -# Link observation files in BUFRLIST -for bufrname in $BUFRLIST; do - $NLN $COMIN_OBS/${OPREFIX}${bufrname}.tm00$OSUFFIX ${bufrname}.tm00$OSUFFIX -done - -# Link first guess files -$NLN $COMIN_GES/${GPREFIX}atmf003${GSUFFIX} ./atmgm3$GSUFFIX -$NLN $COMIN_GES/${GPREFIX}atmf006${GSUFFIX} ./atmges$GSUFFIX -$NLN $COMIN_GES/${GPREFIX}atmf009${GSUFFIX} ./atmgp3$GSUFFIX - -[[ -f $COMIN_GES/${GPREFIX}atmf004${GSUFFIX} ]] && $NLN $COMIN_GES/${GPREFIX}atmf004${GSUFFIX} ./atmgm2$GSUFFIX -[[ -f $COMIN_GES/${GPREFIX}atmf005${GSUFFIX} ]] && $NLN $COMIN_GES/${GPREFIX}atmf005${GSUFFIX} ./atmgm1$GSUFFIX -[[ -f $COMIN_GES/${GPREFIX}atmf007${GSUFFIX} ]] && $NLN $COMIN_GES/${GPREFIX}atmf007${GSUFFIX} ./atmgp1$GSUFFIX -[[ -f $COMIN_GES/${GPREFIX}atmf008${GSUFFIX} ]] && $NLN $COMIN_GES/${GPREFIX}atmf008${GSUFFIX} ./atmgp2$GSUFFIX - -# If relocation is turned off: these files don't exist, touch them -if [ $DO_RELOCATE = "NO" ]; then - touch $DATA/tcvitals.relocate.tm00 - touch $DATA/tropcy_relocation_status.tm00 - echo "RECORDS PROCESSED" >> $DATA/tropcy_relocation_status.tm00 -fi - -############################################################### -# if PREPDATA is YES and -# 1. the aircft bufr file is not found, set PREPACQC to NO -# 2. the ****** bufr file is not found, set ******** to NO -if [ $PREPDATA = "YES" ]; then - [[ ! -s aircft.tm00$OSUFFIX ]] && export PREPACQC="NO" -fi - -############################################################### -# Execute MAKEPREPBUFRSH - -echo $(date) EXECUTING $MAKEPREPBUFRSH $CDATE >&2 -$MAKEPREPBUFRSH $CDATE -status=$? -echo $(date) EXITING $MAKEPREPBUFRSH with return code $status >&2 -[[ $status -ne 0 ]] && exit $status - -############################################################### -# Create nsstbufr file -if [ $DONST = "YES" ]; then - SFCSHPBF=${SFCSHPBF:-$COMIN_OBS/sfcshp.$CDUMP.$CDATE} - TESACBF=${TESACBF:-$COMIN_OBS/tesac.$CDUMP.$CDATE} - BATHYBF=${BATHYBF:-$COMIN_OBS/bathy.$CDUMP.$CDATE} - TRKOBBF=${TRKOBBF:-$COMIN_OBS/trkob.$CDUMP.$CDATE} - NSSTBF=${NSSTBF:-$COMOUT/${APREFIX}nsstbufr} - - cat $SFCSHPBF $TESACBF $BATHYBF $TRKOBBF > $NSSTBF - status=$? - echo $(date) CREATE $NSSTBF with return code $status >&2 - - # NSST bufr file must be restricted since it contains unmasked ship ids - chmod 640 $NSSTBF - $CHGRP_CMD $NSSTBF -fi -############################################################### -# Copy prepbufr and prepbufr.acft_profiles to COMOUT -$NCP $DATA/prepda.t${chh}z $COMOUT/${APREFIX}prepbufr -$NCP $DATA/prepbufr.acft_profiles $COMOUT/${APREFIX}prepbufr.acft_profiles - -############################################################### -# Exit out cleanly -if [ $KEEPDATA = "NO" ] ; then rm -rf $DATA ; fi -exit 0 diff --git a/ush/file_utils.sh b/ush/file_utils.sh new file mode 100644 index 0000000000..544a270b0a --- /dev/null +++ b/ush/file_utils.sh @@ -0,0 +1,27 @@ +#! /usr/bin/env bash + +nb_copy() { + # + # TODO - Extend this to take multiple arguments for file_in (like cp) + # + # Copy a file if it exists, print a warning otherwise but don't + # error. + # + # Syntax + # nb_copy file_in file_out + # + # Arguments + # file_in: the file to copy + # file_out: the destination of the copy + # + # Environment variables + # NCP: Command to use to copy (default: cp) + # + local file_in="${1}" + local file_out="${2}" + if [[ -f ${file_in} ]]; then + ${NCP:-cp} ${file_in} ${file_out} + else + echo "WARNING: No file ${file_in} found (pwd: $(pwd))" + fi +} diff --git a/ush/forecast_det.sh b/ush/forecast_det.sh new file mode 100755 index 0000000000..bf1b94ca8c --- /dev/null +++ b/ush/forecast_det.sh @@ -0,0 +1,121 @@ +#! /usr/bin/env bash + +##### +## "forecast_det.sh" +## This script sets value of all variables +## +## This is the child script of ex-global forecast, +## This script is a definition of functions. +##### + +# For all non-evironment variables +# Cycling and forecast hour specific parameters + +FV3_det(){ + echo "SUB ${FUNCNAME[0]}: Run type determination for FV3" + #------------------------------------------------------- + # warm start? + warm_start=${EXP_WARM_START:-".false."} + read_increment=${read_increment:-".false."} + res_latlon_dynamics="''" + + # Determine if this is a warm start or cold start + if [[ -f "${COM_ATMOS_RESTART_PREV}/${sPDY}.${scyc}0000.coupler.res" ]]; then + warm_start=".true." + fi + + # turn IAU off for cold start + DOIAU_coldstart=${DOIAU_coldstart:-"NO"} + if [ "${DOIAU}" = "YES" -a "${warm_start}" = ".false." ] || [ "${DOIAU_coldstart}" = "YES" -a "${warm_start}" = ".true." ]; then + echo "turning off IAU since this is a cold-start" + DOIAU="NO" + DOIAU_coldstart="YES" + # Ignore "not used" warning + # shellcheck disable=SC2034 + IAU_OFFSET=0 + sCDATE=${current_cycle} + sPDY=${current_cycle:0:8} + scyc=${current_cycle:8:2} + tPDY=${sPDY} + tcyc=${scyc} + fi + + #------------------------------------------------------- + # determine if restart IC exists to continue from a previous forecast run attempt + + RERUN=${RERUN:-"NO"} + # Get a list of all YYYYMMDD.HH0000.coupler.res files from the atmos restart directory + mapfile -t file_array < <(find "${COM_ATMOS_RESTART:-/dev/null}" -name "????????.??0000.coupler.res") + if [[ ( "${RUN}" = "gfs" || "${RUN}" = "gefs" ) \ + && "${#file_array[@]}" -gt 0 ]]; then + + # Look in reverse order of file_array to determine available restart times + for ((ii=${#file_array[@]}-1; ii>=0; ii--)); do + + local filepath="${file_array[ii]}" + local filename + filename=$(basename "${filepath}") # Strip path from YYYYMMDD.HH0000.coupler.res + PDYS=${filename:0:8} # match YYYYMMDD of YYYYMMDD.HH0000.coupler.res + cycs=${filename:9:2} # match HH of YYYYMMDD.HH0000.coupler.res + + # Assume all is well; all restarts are available + local fv3_rst_ok="YES" + local mom6_rst_ok="YES" + local cice6_rst_ok="YES" + local cmeps_rst_ok="YES" + local ww3_rst_ok="YES" + + # Check for availability of FV3 restarts + if [[ -f "${COM_ATMOS_RESTART}/${PDYS}.${cycs}0000.coupler.res" ]]; then + mv "${COM_ATMOS_RESTART}/${PDYS}.${cycs}.coupler.res" "${COM_ATMOS_RESTART}/${PDYS}.${cycs}.coupler.res.old" + else + local fv3_rst_ok="NO" + fi + + # Check for availability of MOM6 restarts # TODO + # Check for availability of CICE6 restarts # TODO + # Check for availability of CMEPS restarts # TODO + + # Check for availability of WW3 restarts + if [[ "${cplwav}" = ".true." ]]; then + for ww3_grid in ${waveGRD} ; do + if [[ ! -f "${COM_WAVE_RESTART}/${PDYS}.${cycs}0000.restart.${ww3_grid}" ]]; then + local ww3_rst_ok="NO" + fi + done + fi + + # Collective check + if [[ "${fv3_rst_ok}" = "YES" ]] \ + && [[ "${mom6_rst_ok}" = "YES" ]] \ + && [[ "${cice6_rst_ok}" = "YES" ]] \ + && [[ "${cmeps_rst_ok}" = "YES" ]] \ + && [[ "${ww3_rst_ok}" = "YES" ]]; then + + if [[ -f "${COM_ATMOS_RESTART}/coupler.res" ]]; then + mv "${COM_ATMOS_RESTART}/coupler.res" "${COM_ATMOS_RESTART}/coupler.res.old" + fi + + SDATE="${PDYS}${cycs}" + CDATE_RST="${SDATE}" + RERUN="YES" + echo "Restarts have been found for CDATE_RST=${CDATE_RST}, returning with 'RERUN=YES'" + break + fi + + done + fi + #------------------------------------------------------- +} + +WW3_det(){ + echo "SUB ${FUNCNAME[0]}: Run type determination for WW3" +} + +CICE_det(){ + echo "SUB ${FUNCNAME[0]}: Run type determination for CICE" +} + +MOM6_det(){ + echo "SUB ${FUNCNAME[0]}: Run type determination for MOM6" +} diff --git a/ush/forecast_postdet.sh b/ush/forecast_postdet.sh new file mode 100755 index 0000000000..7b94b2167e --- /dev/null +++ b/ush/forecast_postdet.sh @@ -0,0 +1,1065 @@ +#! /usr/bin/env bash + +##### +## This script defines functions for data I/O and namelist. +## different applications could share the same function +## or have their own. +## +## This is a child script of modular +## forecast script. This script is function definition. +## need to call these functions in the parent script +## for execution. +##### + +FV3_postdet(){ + echo "SUB ${FUNCNAME[0]}: Entering for RUN = ${RUN}" + + echo "warm_start = ${warm_start}" + echo "RERUN = ${RERUN}" + + #------------------------------------------------------- + if [[ "${warm_start}" = ".true." ]] || [[ "${RERUN}" = "YES" ]]; then + #------------------------------------------------------- + #............................. + if [[ ${RERUN} = "NO" ]]; then + #............................. + + # Link all restart files from previous cycle + for file in "${COM_ATMOS_RESTART_PREV}/${sPDY}.${scyc}0000."*.nc; do + file2=$(echo $(basename "${file}")) + file2=$(echo "${file2}" | cut -d. -f3-) # remove the date from file + fsuf=$(echo "${file2}" | cut -d. -f1) + ${NLN} "${file}" "${DATA}/INPUT/${file2}" + done + + # Replace sfc_data with sfcanl_data restart files from current cycle (if found) + if [[ "${MODE}" = "cycled" ]] && [[ "${CCPP_SUITE}" = "FV3_GFS_v16" ]]; then # TODO: remove if statement when global_cycle can handle NOAHMP + for file in "${COM_ATMOS_RESTART}/${sPDY}.${scyc}0000."*.nc; do + file2=$(basename "${file}") + file2=$(echo "${file2}" | cut -d. -f3-) # remove the date from file + fsufanl=$(echo "${file2}" | cut -d. -f1) + file2=$(echo "${file2}" | sed -e "s/sfcanl_data/sfc_data/g") + rm -f "${DATA}/INPUT/${file2}" + ${NLN} "${file}" "${DATA}/INPUT/${file2}" + done + fi + + # Need a coupler.res when doing IAU + if [[ ${DOIAU} = "YES" ]]; then + rm -f "${DATA}/INPUT/coupler.res" + cat >> "${DATA}/INPUT/coupler.res" << EOF + 2 (Calendar: no_calendar=0, thirty_day_months=1, julian=2, gregorian=3, noleap=4) + ${gPDY:0:4} ${gPDY:4:2} ${gPDY:6:2} ${gcyc} 0 0 Model start time: year, month, day, hour, minute, second + ${sPDY:0:4} ${sPDY:4:2} ${sPDY:6:2} ${scyc} 0 0 Current model time: year, month, day, hour, minute, second +EOF + fi + + # Link increments + if [[ ${DOIAU} = "YES" ]]; then + for i in $(echo "${IAUFHRS}" | sed "s/,/ /g" | rev); do + incfhr=$(printf %03i "${i}") + if [[ ${incfhr} = "006" ]]; then + increment_file="${COM_ATMOS_ANALYSIS}/${RUN}.t${cyc}z.${PREFIX_ATMINC}atminc.nc" + else + increment_file="${COM_ATMOS_ANALYSIS}/${RUN}.t${cyc}z.${PREFIX_ATMINC}atmi${incfhr}.nc" + fi + if [[ ! -f ${increment_file} ]]; then + echo "ERROR: DOIAU = ${DOIAU}, but missing increment file for fhr ${incfhr} at ${increment_file}" + echo "Abort!" + exit 1 + fi + ${NLN} "${increment_file}" "${DATA}/INPUT/fv_increment${i}.nc" + IAU_INC_FILES="'fv_increment${i}.nc',${IAU_INC_FILES:-}" + done + read_increment=".false." + res_latlon_dynamics="" + else + increment_file="${COM_ATMOS_ANALYSIS}/${RUN}.t${cyc}z.${PREFIX_ATMINC}atminc.nc" + if [[ -f ${increment_file} ]]; then + ${NLN} "${increment_file}" "${DATA}/INPUT/fv3_increment.nc" + read_increment=".true." + res_latlon_dynamics="fv3_increment.nc" + fi + fi + + #............................. + else ##RERUN + export warm_start=".true." + PDYT="${CDATE_RST:0:8}" + cyct="${CDATE_RST:8:2}" + for file in "${COM_ATMOS_RESTART}/${PDYT}.${cyct}0000."*; do + file2=$(basename "${file}") + file2=$(echo "${file2}" | cut -d. -f3-) + ${NLN} "${file}" "${DATA}/INPUT/${file2}" + done + + local hour_rst=$(nhour "${CDATE_RST}" "${current_cycle}") + IAU_FHROT=$((IAU_OFFSET+hour_rst)) + if [[ ${DOIAU} = "YES" ]]; then + IAUFHRS=-1 + # Ignore "not used" warning + # shellcheck disable=SC2034 + IAU_DELTHRS=0 + IAU_INC_FILES="''" + fi + fi + #............................. + + else ## cold start + for file in "${COM_ATMOS_INPUT}/"*.nc; do + file2=$(basename "${file}") + fsuf="${file2:0:3}" + if [[ "${fsuf}" = "gfs" ]] || [[ "${fsuf}" = "sfc" ]]; then + ${NLN} "${file}" "${DATA}/INPUT/${file2}" + fi + done + + fi + + nfiles=$(ls -1 "${DATA}/INPUT/"* | wc -l) + if [[ ${nfiles} -le 0 ]]; then + echo SUB "${FUNCNAME[0]}": Initial conditions must exist in "${DATA}/INPUT", ABORT! + exit 1 + fi + + # If doing IAU, change forecast hours + if [[ "${DOIAU}" = "YES" ]]; then + FHMAX=$((FHMAX+6)) + if [[ ${FHMAX_HF} -gt 0 ]]; then + FHMAX_HF=$((FHMAX_HF+6)) + fi + fi + + #-------------------------------------------------------------------------- + # Grid and orography data + + if [[ ${cplflx} = ".false." ]] ; then + ${NLN} "${FIX_DIR}/orog/${CASE}/${CASE}_mosaic.nc" "${DATA}/INPUT/grid_spec.nc" + else + ${NLN} "${FIX_DIR}/orog/${CASE}/${CASE}_mosaic.nc" "${DATA}/INPUT/${CASE}_mosaic.nc" + fi + + OROFIX=${OROFIX:-"${FIX_DIR}/orog/${CASE}.mx${OCNRES}_frac"} + FIX_SFC=${FIX_SFC:-"${OROFIX}/sfc"} + for n in $(seq 1 "${ntiles}"); do + ${NLN} "${OROFIX}/oro_${CASE}.mx${OCNRES}.tile${n}.nc" "${DATA}/INPUT/oro_data.tile${n}.nc" + ${NLN} "${OROFIX}/${CASE}_grid.tile${n}.nc" "${DATA}/INPUT/${CASE}_grid.tile${n}.nc" + done + + _suite_file="${HOMEgfs}/sorc/ufs_model.fd/FV3/ccpp/suites/suite_${CCPP_SUITE}.xml" + if [[ ! -f ${_suite_file} ]]; then + echo "FATAL: CCPP Suite file ${_suite_file} does not exist!" + exit 2 + fi + + # Scan suite file to determine whether it uses Noah-MP + if [[ $(grep noahmpdrv "${_suite_file}" | wc -l ) -gt 0 ]]; then + lsm="2" + lheatstrg=".false." + landice=".false." + iopt_dveg=${iopt_dveg:-"4"} + iopt_crs=${iopt_crs:-"2"} + iopt_btr=${iopt_btr:-"1"} + iopt_run=${iopt_run:-"1"} + iopt_sfc=${iopt_sfc:-"1"} + iopt_frz=${iopt_frz:-"1"} + iopt_inf=${iopt_inf:-"1"} + iopt_rad=${iopt_rad:-"3"} + iopt_alb=${iopt_alb:-"1"} + iopt_snf=${iopt_snf:-"4"} + iopt_tbot=${iopt_tbot:-"2"} + iopt_stc=${iopt_stc:-"3"} + IALB=${IALB:-2} + IEMS=${IEMS:-2} + else + lsm="1" + lheatstrg=".true." + landice=".true." + iopt_dveg=${iopt_dveg:-"1"} + iopt_crs=${iopt_crs:-"1"} + iopt_btr=${iopt_btr:-"1"} + iopt_run=${iopt_run:-"1"} + iopt_sfc=${iopt_sfc:-"1"} + iopt_frz=${iopt_frz:-"1"} + iopt_inf=${iopt_inf:-"1"} + iopt_rad=${iopt_rad:-"1"} + iopt_alb=${iopt_alb:-"2"} + iopt_snf=${iopt_snf:-"4"} + iopt_tbot=${iopt_tbot:-"2"} + iopt_stc=${iopt_stc:-"1"} + IALB=${IALB:-1} + IEMS=${IEMS:-1} + fi + + # NoahMP table + local noahmptablefile="${HOMEgfs}/parm/ufs/noahmptable.tbl" + if [[ ! -f ${noahmptablefile} ]]; then + echo "FATAL ERROR: missing noahmp table file ${noahmptablefile}" + exit 1 + else + ${NLN} "${noahmptablefile}" "${DATA}/noahmptable.tbl" + fi + + # Files for GWD + OROFIX_ugwd=${OROFIX_ugwd:-"${FIX_DIR}/ugwd"} + ${NLN} "${OROFIX_ugwd}/ugwp_limb_tau.nc" "${DATA}/ugwp_limb_tau.nc" + for n in $(seq 1 "${ntiles}"); do + ${NLN} "${OROFIX_ugwd}/${CASE}/${CASE}_oro_data_ls.tile${n}.nc" "${DATA}/INPUT/oro_data_ls.tile${n}.nc" + ${NLN} "${OROFIX_ugwd}/${CASE}/${CASE}_oro_data_ss.tile${n}.nc" "${DATA}/INPUT/oro_data_ss.tile${n}.nc" + done + + # GFS standard input data + + ISOL=${ISOL:-2} + IAER=${IAER:-1011} + ICO2=${ICO2:-2} + + if [[ ${new_o3forc:-YES} = YES ]]; then + O3FORC=ozprdlos_2015_new_sbuvO3_tclm15_nuchem.f77 + else + O3FORC=global_o3prdlos.f77 + fi + H2OFORC=${H2OFORC:-"global_h2o_pltc.f77"} + #### + # Copy CCN_ACTIVATE.BIN for Thompson microphysics + # Thompson microphysics used when CCPP_SUITE set to FV3_GSD_v0 or FV3_GSD_noah + # imp_physics should be 8: + #### + if [[ ${imp_physics} -eq 8 ]]; then + ${NLN} "${FIX_DIR}/am/CCN_ACTIVATE.BIN" "${DATA}/CCN_ACTIVATE.BIN" + ${NLN} "${FIX_DIR}/am/freezeH2O.dat" "${DATA}/freezeH2O.dat" + ${NLN} "${FIX_DIR}/am/qr_acr_qgV2.dat" "${DATA}/qr_acr_qgV2.dat" + ${NLN} "${FIX_DIR}/am/qr_acr_qsV2.dat" "${DATA}/qr_acr_qsV2.dat" + fi + + ${NLN} "${FIX_DIR}/am/${O3FORC}" "${DATA}/global_o3prdlos.f77" + ${NLN} "${FIX_DIR}/am/${H2OFORC}" "${DATA}/global_h2oprdlos.f77" + ${NLN} "${FIX_DIR}/am/global_solarconstant_noaa_an.txt" "${DATA}/solarconstant_noaa_an.txt" + ${NLN} "${FIX_DIR}/am/global_sfc_emissivity_idx.txt" "${DATA}/sfc_emissivity_idx.txt" + + ## merra2 aerosol climo + if [[ ${IAER} -eq "1011" ]]; then + for month in $(seq 1 12); do + MM=$(printf %02d "${month}") + ${NLN} "${FIX_DIR}/aer/merra2.aerclim.2003-2014.m${MM}.nc" "aeroclim.m${MM}.nc" + done + ${NLN} "${FIX_DIR}/lut/optics_BC.v1_3.dat" "${DATA}/optics_BC.dat" + ${NLN} "${FIX_DIR}/lut/optics_OC.v1_3.dat" "${DATA}/optics_OC.dat" + ${NLN} "${FIX_DIR}/lut/optics_DU.v15_3.dat" "${DATA}/optics_DU.dat" + ${NLN} "${FIX_DIR}/lut/optics_SS.v3_3.dat" "${DATA}/optics_SS.dat" + ${NLN} "${FIX_DIR}/lut/optics_SU.v1_3.dat" "${DATA}/optics_SU.dat" + fi + + ${NLN} "${FIX_DIR}/am/global_co2historicaldata_glob.txt" "${DATA}/co2historicaldata_glob.txt" + ${NLN} "${FIX_DIR}/am/co2monthlycyc.txt" "${DATA}/co2monthlycyc.txt" + if [[ ${ICO2} -gt 0 ]]; then + for file in $(ls "${FIX_DIR}/am/fix_co2_proj/global_co2historicaldata"*) ; do + ${NLN} "${file}" "${DATA}/$(basename "${file//global_}")" + done + fi + + ${NLN} "${FIX_DIR}/am/global_climaeropac_global.txt" "${DATA}/aerosol.dat" + if [[ ${IAER} -gt 0 ]] ; then + for file in $(ls "${FIX_DIR}/am/global_volcanic_aerosols"*) ; do + ${NLN} "${file}" "${DATA}/$(basename "${file//global_}")" + done + fi + + # inline post fix files + if [[ ${WRITE_DOPOST} = ".true." ]]; then + ${NLN} "${PARM_POST}/post_tag_gfs${LEVS}" "${DATA}/itag" + ${NLN} "${FLTFILEGFS:-${PARM_POST}/postxconfig-NT-GFS-TWO.txt}" "${DATA}/postxconfig-NT.txt" + ${NLN} "${FLTFILEGFSF00:-${PARM_POST}/postxconfig-NT-GFS-F00-TWO.txt}" "${DATA}/postxconfig-NT_FH00.txt" + ${NLN} "${POSTGRB2TBL:-${PARM_POST}/params_grib2_tbl_new}" "${DATA}/params_grib2_tbl_new" + fi + + #------------------------------------------------------------------ + # changeable parameters + # dycore definitions + res="${CASE:1}" + resp=$((res+1)) + npx=${resp} + npy=${resp} + npz=$((LEVS-1)) + io_layout="1,1" + #ncols=$(( (${npx}-1)*(${npy}-1)*3/2 )) + + # spectral truncation and regular grid resolution based on FV3 resolution + JCAP_CASE=$((2*res-2)) + LONB_CASE=$((4*res)) + LATB_CASE=$((2*res)) + + JCAP=${JCAP:-${JCAP_CASE}} + LONB=${LONB:-${LONB_CASE}} + LATB=${LATB:-${LATB_CASE}} + + LONB_IMO=${LONB_IMO:-${LONB_CASE}} + LATB_JMO=${LATB_JMO:-${LATB_CASE}} + + # Fix files + FNGLAC=${FNGLAC:-"${FIX_DIR}/am/global_glacier.2x2.grb"} + FNMXIC=${FNMXIC:-"${FIX_DIR}/am/global_maxice.2x2.grb"} + FNTSFC=${FNTSFC:-"${FIX_DIR}/am/RTGSST.1982.2012.monthly.clim.grb"} + FNSNOC=${FNSNOC:-"${FIX_DIR}/am/global_snoclim.1.875.grb"} + FNZORC=${FNZORC:-"igbp"} + FNAISC=${FNAISC:-"${FIX_DIR}/am/IMS-NIC.blended.ice.monthly.clim.grb"} + FNALBC2=${FNALBC2:-"${FIX_SFC}/${CASE}.mx${OCNRES}.facsf.tileX.nc"} + FNTG3C=${FNTG3C:-"${FIX_SFC}/${CASE}.mx${OCNRES}.substrate_temperature.tileX.nc"} + FNVEGC=${FNVEGC:-"${FIX_SFC}/${CASE}.mx${OCNRES}.vegetation_greenness.tileX.nc"} + FNMSKH=${FNMSKH:-"${FIX_DIR}/am/global_slmask.t1534.3072.1536.grb"} + FNVMNC=${FNVMNC:-"${FIX_SFC}/${CASE}.mx${OCNRES}.vegetation_greenness.tileX.nc"} + FNVMXC=${FNVMXC:-"${FIX_SFC}/${CASE}.mx${OCNRES}.vegetation_greenness.tileX.nc"} + FNSLPC=${FNSLPC:-"${FIX_SFC}/${CASE}.mx${OCNRES}.slope_type.tileX.nc"} + FNALBC=${FNALBC:-"${FIX_SFC}/${CASE}.mx${OCNRES}.snowfree_albedo.tileX.nc"} + FNVETC=${FNVETC:-"${FIX_SFC}/${CASE}.mx${OCNRES}.vegetation_type.tileX.nc"} + FNSOTC=${FNSOTC:-"${FIX_SFC}/${CASE}.mx${OCNRES}.soil_type.tileX.nc"} + FNSOCC=${FNSOCC:-"${FIX_SFC}/${CASE}.mx${OCNRES}.soil_color.tileX.nc"} + FNABSC=${FNABSC:-"${FIX_SFC}/${CASE}.mx${OCNRES}.maximum_snow_albedo.tileX.nc"} + FNSMCC=${FNSMCC:-"${FIX_DIR}/am/global_soilmgldas.statsgo.t${JCAP}.${LONB}.${LATB}.grb"} + + # If the appropriate resolution fix file is not present, use the highest resolution available (T1534) + [[ ! -f ${FNSMCC} ]] && FNSMCC="${FIX_DIR}/am/global_soilmgldas.statsgo.t1534.3072.1536.grb" + + # NSST Options + # nstf_name contains the NSST related parameters + # nstf_name(1) : NST_MODEL (NSST Model) : 0 = OFF, 1 = ON but uncoupled, 2 = ON and coupled + # nstf_name(2) : NST_SPINUP : 0 = OFF, 1 = ON, + # nstf_name(3) : NST_RESV (Reserved, NSST Analysis) : 0 = OFF, 1 = ON + # nstf_name(4) : ZSEA1 (in mm) : 0 + # nstf_name(5) : ZSEA2 (in mm) : 0 + # nst_anl : .true. or .false., NSST analysis over lake + NST_MODEL=${NST_MODEL:-0} + NST_SPINUP=${NST_SPINUP:-0} + NST_RESV=${NST_RESV-0} + ZSEA1=${ZSEA1:-0} + ZSEA2=${ZSEA2:-0} + nstf_name=${nstf_name:-"${NST_MODEL},${NST_SPINUP},${NST_RESV},${ZSEA1},${ZSEA2}"} + nst_anl=${nst_anl:-".false."} + + # blocking factor used for threading and general physics performance + #nyblocks=$(expr \( $npy - 1 \) \/ $layout_y ) + #nxblocks=$(expr \( $npx - 1 \) \/ $layout_x \/ 32) + #if [ $nxblocks -le 0 ]; then nxblocks=1 ; fi + blocksize=${blocksize:-32} + + # the pre-conditioning of the solution + # =0 implies no pre-conditioning + # >0 means new adiabatic pre-conditioning + # <0 means older adiabatic pre-conditioning + na_init=${na_init:-1} + [[ ${warm_start} = ".true." ]] && na_init=0 + + # variables for controlling initialization of NCEP/NGGPS ICs + filtered_terrain=${filtered_terrain:-".true."} + gfs_dwinds=${gfs_dwinds:-".true."} + + # various debug options + no_dycore=${no_dycore:-".false."} + dycore_only=${adiabatic:-".false."} + chksum_debug=${chksum_debug:-".false."} + print_freq=${print_freq:-6} + + if [[ ${TYPE} = "nh" ]]; then # non-hydrostatic options + hydrostatic=".false." + phys_hydrostatic=".false." # enable heating in hydrostatic balance in non-hydrostatic simulation + use_hydro_pressure=".false." # use hydrostatic pressure for physics + if [[ ${warm_start} = ".true." ]]; then + make_nh=".false." # restarts contain non-hydrostatic state + else + make_nh=".true." # re-initialize non-hydrostatic state + fi + + else # hydrostatic options + hydrostatic=".true." + phys_hydrostatic=".false." # ignored when hydrostatic = T + use_hydro_pressure=".false." # ignored when hydrostatic = T + make_nh=".false." # running in hydrostatic mode + fi + + # Conserve total energy as heat globally + consv_te=${consv_te:-1.} # range 0.-1., 1. will restore energy to orig. val. before physics + + # time step parameters in FV3 + k_split=${k_split:-2} + n_split=${n_split:-5} + + if [[ "${MONO:0:4}" = "mono" ]]; then # monotonic options + d_con=${d_con_mono:-"0."} + do_vort_damp=".false." + if [[ ${TYPE} = "nh" ]]; then # non-hydrostatic + hord_mt=${hord_mt_nh_mono:-"10"} + hord_xx=${hord_xx_nh_mono:-"10"} + else # hydrostatic + hord_mt=${hord_mt_hydro_mono:-"10"} + hord_xx=${hord_xx_hydro_mono:-"10"} + fi + + else # non-monotonic options + d_con=${d_con_nonmono:-"1."} + do_vort_damp=".true." + if [[ ${TYPE} = "nh" ]]; then # non-hydrostatic + hord_mt=${hord_mt_nh_nonmono:-"5"} + hord_xx=${hord_xx_nh_nonmono:-"5"} + else # hydrostatic + hord_mt=${hord_mt_hydro_nonmono:-"10"} + hord_xx=${hord_xx_hydro_nonmono:-"10"} + fi + fi + + if [[ "${MONO:0:4}" != "mono" ]] && [[ "${TYPE}" = "nh" ]]; then + vtdm4=${vtdm4_nh_nonmono:-"0.06"} + else + vtdm4=${vtdm4:-"0.05"} + fi + + if [[ ${warm_start} = ".true." ]]; then # warm start from restart file + nggps_ic=".false." + ncep_ic=".false." + external_ic=".false." + mountain=".true." + if [[ ${read_increment} = ".true." ]]; then # add increment on the fly to the restarts + res_latlon_dynamics="fv3_increment.nc" + else + res_latlon_dynamics='""' + fi + + else # CHGRES'd GFS analyses + nggps_ic=${nggps_ic:-".true."} + ncep_ic=${ncep_ic:-".false."} + external_ic=".true." + mountain=".false." + read_increment=".false." + res_latlon_dynamics='""' + fi + + # Stochastic Physics Options + if [[ ${SET_STP_SEED:-"YES"} = "YES" ]]; then + ISEED_SKEB=$((current_cycle*1000 + MEMBER*10 + 1)) + ISEED_SHUM=$((current_cycle*1000 + MEMBER*10 + 2)) + ISEED_SPPT=$((current_cycle*1000 + MEMBER*10 + 3)) + ISEED_CA=$(( (current_cycle*1000 + MEMBER*10 + 4) % 2147483647 )) + ISEED_LNDP=$(( (current_cycle*1000 + MEMBER*10 + 5) % 2147483647 )) + else + ISEED=${ISEED:-0} + fi + if [[ ${DO_SKEB} = "YES" ]]; then + do_skeb=".true." + fi + if [[ ${DO_SPPT} = "YES" ]]; then + do_sppt=".true." + fi + if [[ ${DO_SHUM} = "YES" ]]; then + do_shum=".true." + fi + if [[ ${DO_LAND_PERT} = "YES" ]]; then + lndp_type=${lndp_type:-2} + LNDP_TAU=${LNDP_TAU:-21600} + LNDP_SCALE=${LNDP_SCALE:-500000} + ISEED_LNDP=${ISEED_LNDP:-${ISEED}} + lndp_var_list=${lndp_var_list:-"'smc', 'vgf',"} + lndp_prt_list=${lndp_prt_list:-"0.2,0.1"} + n_var_lndp=$(echo "${lndp_var_list}" | wc -w) + fi + JCAP_STP=${JCAP_STP:-${JCAP_CASE}} + LONB_STP=${LONB_STP:-${LONB_CASE}} + LATB_STP=${LATB_STP:-${LATB_CASE}} + cd "${DATA}" || exit 1 + if [[ ! -d ${COM_ATMOS_HISTORY} ]]; then mkdir -p "${COM_ATMOS_HISTORY}"; fi + if [[ ! -d ${COM_ATMOS_MASTER} ]]; then mkdir -p "${COM_ATMOS_MASTER}"; fi + if [[ "${QUILTING}" = ".true." ]] && [[ "${OUTPUT_GRID}" = "gaussian_grid" ]]; then + for fhr in ${FV3_OUTPUT_FH}; do + local FH3=$(printf %03i "${fhr}") + local FH2=$(printf %02i "${fhr}") + ${NLN} "${COM_ATMOS_HISTORY}/${RUN}.t${cyc}z.atmf${FH3}.nc" "atmf${FH3}.nc" + ${NLN} "${COM_ATMOS_HISTORY}/${RUN}.t${cyc}z.sfcf${FH3}.nc" "sfcf${FH3}.nc" + ${NLN} "${COM_ATMOS_HISTORY}/${RUN}.t${cyc}z.atm.logf${FH3}.txt" "log.atm.f${FH3}" + if [[ ${WRITE_DOPOST} = ".true." ]]; then + ${NLN} "${COM_ATMOS_MASTER}/${RUN}.t${cyc}z.master.grb2f${FH3}" "GFSPRS.GrbF${FH2}" + ${NLN} "${COM_ATMOS_MASTER}/${RUN}.t${cyc}z.sfluxgrbf${FH3}.grib2" "GFSFLX.GrbF${FH2}" + fi + done + else # TODO: Is this even valid anymore? + for n in $(seq 1 "${ntiles}"); do + ${NLN} "nggps2d.tile${n}.nc" "${COM_ATMOS_HISTORY}/nggps2d.tile${n}.nc" + ${NLN} "nggps3d.tile${n}.nc" "${COM_ATMOS_HISTORY}/nggps3d.tile${n}.nc" + ${NLN} "grid_spec.tile${n}.nc" "${COM_ATMOS_HISTORY}/grid_spec.tile${n}.nc" + ${NLN} "atmos_static.tile${n}.nc" "${COM_ATMOS_HISTORY}/atmos_static.tile${n}.nc" + ${NLN} "atmos_4xdaily.tile${n}.nc" "${COM_ATMOS_HISTORY}/atmos_4xdaily.tile${n}.nc" + done + fi +} + +FV3_nml(){ + # namelist output for a certain component + echo "SUB ${FUNCNAME[0]}: Creating name lists and model configure file for FV3" + # Call child scripts in current script directory + source "${HOMEgfs}/ush/parsing_namelists_FV3.sh" + FV3_namelists + echo "SUB ${FUNCNAME[0]}: FV3 name lists and model configure file created" +} + +FV3_out() { + echo "SUB ${FUNCNAME[0]}: copying output data for FV3" + + # Copy FV3 restart files + if [[ ${RUN} =~ "gdas" ]]; then + cd "${DATA}/RESTART" + mkdir -p "${COM_ATMOS_RESTART}" + local idate=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} + ${restart_interval} hours" +%Y%m%d%H) + while [[ ${idate} -le ${forecast_end_cycle} ]]; do + for file in "${idate:0:8}.${idate:8:2}0000."*; do + ${NCP} "${file}" "${COM_ATMOS_RESTART}/${file}" + done + local idate=$(date --utc -d "${idate:0:8} ${idate:8:2} + ${restart_interval} hours" +%Y%m%d%H) + done + else + # No need to copy FV3 restart files when RUN=gfs or gefs + ${NCP} "${DATA}/input.nml" "${COM_CONF}/ufs.input.nml" + ${NCP} "${DATA}/model_configure" "${COM_CONF}/ufs.model_configure" + ${NCP} "${DATA}/ufs.configure" "${COM_CONF}/ufs.ufs.configure" + ${NCP} "${DATA}/diag_table" "${COM_CONF}/ufs.diag_table" + fi + echo "SUB ${FUNCNAME[0]}: Output data for FV3 copied" +} + +WW3_postdet() { + echo "SUB ${FUNCNAME[0]}: Linking input data for WW3" + COMPONENTwave=${COMPONENTwave:-${RUN}wave} + + #Link mod_def files for wave grids + if [[ ${waveMULTIGRID} = ".true." ]]; then + local array=(${WAVECUR_FID} ${WAVEICE_FID} ${WAVEWND_FID} ${waveuoutpGRD} ${waveGRD} ${waveesmfGRD}) + echo "Wave Grids: ${WAVECUR_FID} ${WAVEICE_FID} ${WAVEWND_FID} ${waveuoutpGRD} ${waveGRD} ${waveesmfGRD}" + local grdALL=$(printf "%s\n" "${array[@]}" | sort -u | tr '\n' ' ') + + for wavGRD in ${grdALL}; do + ${NCP} "${COM_WAVE_PREP}/${COMPONENTwave}.mod_def.${wavGRD}" "${DATA}/mod_def.${wavGRD}" + done + else + #if shel, only 1 waveGRD which is linked to mod_def.ww3 + ${NCP} "${COM_WAVE_PREP}/${COMPONENTwave}.mod_def.${waveGRD}" "${DATA}/mod_def.ww3" + fi + + + #if wave mesh is not the same as the ocn/ice mesh, linkk it in the file + local comparemesh=${MESH_OCN_ICE:-"mesh.mx${ICERES}.nc"} + if [[ "${MESH_WAV}" = "${comparemesh}" ]]; then + echo "Wave is on same mesh as ocean/ice" + else + ${NLN} "${FIXwave}/${MESH_WAV}" "${DATA}/" + fi + + export wavprfx=${RUNwave}${WAV_MEMBER:-} + + #Copy initial condition files: + for wavGRD in ${waveGRD} ; do + if [[ "${warm_start}" = ".true." ]] || [[ "${RERUN}" = "YES" ]]; then + if [[ ${RERUN} = "NO" ]]; then + local waverstfile="${COM_WAVE_RESTART_PREV}/${sPDY}.${scyc}0000.restart.${wavGRD}" + else + local waverstfile="${COM_WAVE_RESTART}/${PDYT}.${cyct}0000.restart.${wavGRD}" + fi + else + local waverstfile="${COM_WAVE_RESTART}/${sPDY}.${scyc}0000.restart.${wavGRD}" + fi + if [[ ! -f ${waverstfile} ]]; then + if [[ ${RERUN} = "NO" ]]; then + echo "WARNING: NON-FATAL ERROR wave IC is missing, will start from rest" + else + echo "ERROR: Wave IC is missing in RERUN, exiting." + exit 1 + fi + else + if [[ ${waveMULTIGRID} = ".true." ]]; then + ${NLN} "${waverstfile}" "${DATA}/restart.${wavGRD}" + else + ${NLN} "${waverstfile}" "${DATA}/restart.ww3" + fi + fi + done + + if [[ ${waveMULTIGRID} = ".true." ]]; then + for wavGRD in ${waveGRD} ; do + ${NLN} "${COM_WAVE_HISTORY}/${wavprfx}.log.${wavGRD}.${PDY}${cyc}" "log.${wavGRD}" + done + else + ${NLN} "${COM_WAVE_HISTORY}/${wavprfx}.log.${waveGRD}.${PDY}${cyc}" "log.ww3" + fi + + if [[ "${WW3ICEINP}" = "YES" ]]; then + local wavicefile="${COM_WAVE_PREP}/${RUNwave}.${WAVEICE_FID}.${cycle}.ice" + if [[ ! -f ${wavicefile} ]]; then + echo "ERROR: WW3ICEINP = ${WW3ICEINP}, but missing ice file" + echo "Abort!" + exit 1 + fi + ${NLN} "${wavicefile}" "${DATA}/ice.${WAVEICE_FID}" + fi + + if [[ "${WW3CURINP}" = "YES" ]]; then + local wavcurfile="${COM_WAVE_PREP}/${RUNwave}.${WAVECUR_FID}.${cycle}.cur" + if [[ ! -f ${wavcurfile} ]]; then + echo "ERROR: WW3CURINP = ${WW3CURINP}, but missing current file" + echo "Abort!" + exit 1 + fi + ${NLN} "${wavcurfile}" "${DATA}/current.${WAVECUR_FID}" + fi + + if [[ ! -d ${COM_WAVE_HISTORY} ]]; then mkdir -p "${COM_WAVE_HISTORY}"; fi + + # Link output files + cd "${DATA}" + if [[ ${waveMULTIGRID} = ".true." ]]; then + ${NLN} "${COM_WAVE_HISTORY}/${wavprfx}.log.mww3.${PDY}${cyc}" "log.mww3" + fi + + # Loop for gridded output (uses FHINC) + local fhr vdate FHINC wavGRD + fhr=${FHMIN_WAV} + while [[ ${fhr} -le ${FHMAX_WAV} ]]; do + vdate=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} + ${fhr} hours" +%Y%m%d%H) + if [[ ${waveMULTIGRID} = ".true." ]]; then + for wavGRD in ${waveGRD} ; do + ${NLN} "${COM_WAVE_HISTORY}/${wavprfx}.out_grd.${wavGRD}.${vdate:0:8}.${vdate:8:2}0000" "${DATA}/${vdate:0:8}.${vdate:8:2}0000.out_grd.${wavGRD}" + done + else + ${NLN} "${COM_WAVE_HISTORY}/${wavprfx}.out_grd.${waveGRD}.${vdate:0:8}.${vdate:8:2}0000" "${DATA}/${vdate:0:8}.${vdate:8:2}0000.out_grd.ww3" + fi + FHINC=${FHOUT_WAV} + if (( FHMAX_HF_WAV > 0 && FHOUT_HF_WAV > 0 && fhr < FHMAX_HF_WAV )); then + FHINC=${FHOUT_HF_WAV} + fi + fhr=$((fhr+FHINC)) + done + + # Loop for point output (uses DTPNT) + fhr=${FHMIN_WAV} + while [[ ${fhr} -le ${FHMAX_WAV} ]]; do + vdate=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} + ${fhr} hours" +%Y%m%d%H) + if [[ ${waveMULTIGRID} = ".true." ]]; then + ${NLN} "${COM_WAVE_HISTORY}/${wavprfx}.out_pnt.${waveuoutpGRD}.${vdate:0:8}.${vdate:8:2}0000" "${DATA}/${vdate:0:8}.${vdate:8:2}0000.out_pnt.${waveuoutpGRD}" + else + ${NLN} "${COM_WAVE_HISTORY}/${wavprfx}.out_pnt.${waveuoutpGRD}.${vdate:0:8}.${vdate:8:2}0000" "${DATA}/${vdate:0:8}.${vdate:8:2}0000.out_pnt.ww3" + fi + + FHINC=${FHINCP_WAV} + fhr=$((fhr+FHINC)) + done +} + +WW3_nml() { + echo "SUB ${FUNCNAME[0]}: Copying input files for WW3" + WAV_MOD_TAG=${RUN}wave${waveMEMB} + if [[ "${USE_WAV_RMP:-YES}" = "YES" ]]; then + if (( $( ls -1 "${FIXwave}/rmp_src_to_dst_conserv_"* 2> /dev/null | wc -l) > 0 )); then + for file in $(ls "${FIXwave}/rmp_src_to_dst_conserv_"*) ; do + ${NLN} "${file}" "${DATA}/" + done + else + echo 'FATAL ERROR : No rmp precomputed nc files found for wave model' + exit 4 + fi + fi + source "${HOMEgfs}/ush/parsing_namelists_WW3.sh" + WW3_namelists +} + +WW3_out() { + echo "SUB ${FUNCNAME[0]}: Copying output data for WW3" +} + + +CPL_out() { + echo "SUB ${FUNCNAME[0]}: Copying output data for general cpl fields" + if [[ "${esmf_profile:-}" = ".true." ]]; then + ${NCP} "${DATA}/ESMF_Profile.summary" "${COM_ATMOS_HISTORY}/ESMF_Profile.summary" + fi +} + +MOM6_postdet() { + echo "SUB ${FUNCNAME[0]}: MOM6 after run type determination" + + # Copy MOM6 ICs + ${NLN} "${COM_OCEAN_RESTART_PREV}/${sPDY}.${scyc}0000.MOM.res.nc" "${DATA}/INPUT/MOM.res.nc" + case ${OCNRES} in + "025") + for nn in $(seq 1 4); do + if [[ -f "${COM_OCEAN_RESTART_PREV}/${sPDY}.${scyc}0000.MOM.res_${nn}.nc" ]]; then + ${NLN} "${COM_OCEAN_RESTART_PREV}/${sPDY}.${scyc}0000.MOM.res_${nn}.nc" "${DATA}/INPUT/MOM.res_${nn}.nc" + fi + done + ;; + esac + + # Link increment + if [[ "${DO_JEDIOCNVAR:-NO}" = "YES" ]]; then + if [[ ! -f "${COM_OCEAN_ANALYSIS}/${RUN}.t${cyc}z.ocninc.nc" ]]; then + echo "FATAL ERROR: Ocean increment not found, ABORT!" + exit 111 + fi + ${NLN} "${COM_OCEAN_ANALYSIS}/${RUN}.t${cyc}z.ocninc.nc" "${DATA}/INPUT/mom6_increment.nc" + fi + + # Copy MOM6 fixed files + ${NCP} "${FIXmom}/${OCNRES}/"* "${DATA}/INPUT/" + + # Copy coupled grid_spec + spec_file="${FIX_DIR}/cpl/a${CASE}o${OCNRES}/grid_spec.nc" + if [[ -s ${spec_file} ]]; then + ${NCP} "${spec_file}" "${DATA}/INPUT/" + else + echo "FATAL ERROR: grid_spec file '${spec_file}' does not exist" + exit 3 + fi + + # Copy mediator restart files to RUNDIR # TODO: mediator should have its own CMEPS_postdet() function + if [[ ${warm_start} = ".true." ]]; then + local mediator_file="${COM_MED_RESTART}/${PDY}.${cyc}0000.ufs.cpld.cpl.r.nc" + if [[ -f "${mediator_file}" ]]; then + ${NCP} "${mediator_file}" "${DATA}/ufs.cpld.cpl.r.nc" + rm -f "${DATA}/rpointer.cpl" + touch "${DATA}/rpointer.cpl" + echo "ufs.cpld.cpl.r.nc" >> "${DATA}/rpointer.cpl" + else + # We have a choice to make here. + # Either we can FATAL ERROR out, or we can let the coupling fields initialize from zero + # cmeps_run_type is determined based on the availability of the mediator restart file + echo "WARNING: ${mediator_file} does not exist for warm_start = .true., initializing!" + #echo "FATAL ERROR: ${mediator_file} must exist for warm_start = .true. and does not, ABORT!" + #exit 4 + fi + else + # This is a cold start, so initialize the coupling fields from zero + export cmeps_run_type="startup" + fi + + # If using stochatic parameterizations, create a seed that does not exceed the + # largest signed integer + if [[ "${DO_OCN_SPPT}" = "YES" ]] || [[ "${DO_OCN_PERT_EPBL}" = "YES" ]]; then + if [[ ${SET_STP_SEED:-"YES"} = "YES" ]]; then + ISEED_OCNSPPT=$(( (current_cycle*1000 + MEMBER*10 + 6) % 2147483647 )) + ISEED_EPBL=$(( (current_cycle*1000 + MEMBER*10 + 7) % 2147483647 )) + else + ISEED=${ISEED:-0} + fi + fi + + # Create COMOUTocean + [[ ! -d ${COM_OCEAN_HISTORY} ]] && mkdir -p "${COM_OCEAN_HISTORY}" + + # Link output files + if [[ "${RUN}" =~ "gfs" || "${RUN}" =~ "gefs" ]]; then + # Link output files for RUN = gfs + + # TODO: get requirements on what files need to be written out and what these dates here are and what they mean + + if [[ ! -d ${COM_OCEAN_HISTORY} ]]; then mkdir -p "${COM_OCEAN_HISTORY}"; fi + + # Looping over FV3 output hours + # TODO: Need to define MOM6_OUTPUT_FH and control at some point for issue #1629 + for fhr in ${FV3_OUTPUT_FH}; do + if [[ -z ${last_fhr:-} ]]; then + local last_fhr=${fhr} + continue + fi + (( interval = fhr - last_fhr )) + (( midpoint = last_fhr + interval/2 )) + + local vdate=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} + ${fhr} hours" +%Y%m%d%H) + local vdate_mid=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} + ${midpoint} hours" +%Y%m%d%H) + + + # Native model output uses window midpoint in the filename, but we are mapping that to the end of the period for COM + local source_file="ocn_${vdate_mid:0:4}_${vdate_mid:4:2}_${vdate_mid:6:2}_${vdate_mid:8:2}.nc" + local dest_file="ocn${vdate}.${ENSMEM}.${current_cycle}.nc" + ${NLN} "${COM_OCEAN_HISTORY}/${dest_file}" "${DATA}/${source_file}" + + local source_file="ocn_daily_${vdate:0:4}_${vdate:4:2}_${vdate:6:2}.nc" + local dest_file=${source_file} + if [[ ! -a "${DATA}/${source_file}" ]]; then + ${NLN} "${COM_OCEAN_HISTORY}/${dest_file}" "${DATA}/${source_file}" + fi + + local last_fhr=${fhr} + done + + elif [[ "${RUN}" =~ "gdas" ]]; then + # Link output files for RUN = gdas + + # Save MOM6 backgrounds + for fhr in ${FV3_OUTPUT_FH}; do + local idatestr=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} + ${fhr} hours" +%Y_%m_%d_%H) + local fhr3=$(printf %03i "${fhr}") + ${NLN} "${COM_OCEAN_HISTORY}/${RUN}.t${cyc}z.ocnf${fhr3}.nc" "${DATA}/ocn_da_${idatestr}.nc" + done + fi + + mkdir -p "${COM_OCEAN_RESTART}" + + # Link ocean restarts from DATA to COM + # Coarser than 1/2 degree has a single MOM restart + ${NLN} "${COM_OCEAN_RESTART}/${forecast_end_cycle:0:8}.${forecast_end_cycle:8:2}0000.MOM.res.nc" "${DATA}/MOM6_RESTART/" + # 1/4 degree resolution has 4 additional restarts + case ${OCNRES} in + "025") + for nn in $(seq 1 4); do + ${NLN} "${COM_OCEAN_RESTART}/${forecast_end_cycle:0:8}.${forecast_end_cycle:8:2}0000.MOM.res_${nn}.nc" "${DATA}/MOM6_RESTART/" + done + ;; + *) + ;; + esac + + # Loop over restart_interval frequency and link restarts from DATA to COM + local idate=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} + ${restart_interval} hours" +%Y%m%d%H) + while [[ ${idate} -lt ${forecast_end_cycle} ]]; do + local idatestr=$(date +%Y-%m-%d-%H -d "${idate:0:8} ${idate:8:2}") + ${NLN} "${COM_OCEAN_RESTART}/${idate:0:8}.${idate:8:2}0000.MOM.res.nc" "${DATA}/MOM6_RESTART/" + case ${OCNRES} in + "025") + for nn in $(seq 1 4); do + ${NLN} "${COM_OCEAN_RESTART}/${idate:0:8}.${idate:8:2}0000.MOM.res_${nn}.nc" "${DATA}/MOM6_RESTART/" + done + ;; + esac + local idate=$(date --utc -d "${idate:0:8} ${idate:8:2} + ${restart_interval} hours" +%Y%m%d%H) + done + + # TODO: mediator should have its own CMEPS_postdet() function + # Link mediator restarts from DATA to COM + # DANGER DANGER DANGER - Linking mediator restarts to COM causes the model to fail with a message like this below: + # Abort with message NetCDF: File exists && NC_NOCLOBBER in file pio-2.5.7/src/clib/pioc_support.c at line 2173 + # Instead of linking, copy the mediator files after the model finishes + #local COMOUTmed="${ROTDIR}/${RUN}.${PDY}/${cyc}/med" + #mkdir -p "${COMOUTmed}/RESTART" + #local idate=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} + ${restart_interval} hours" +%Y%m%d%H) + #while [[ ${idate} -le ${forecast_end_cycle} ]]; do + # local seconds=$(to_seconds ${idate:8:2}0000) # use function to_seconds from forecast_predet.sh to convert HHMMSS to seconds + # local idatestr="${idate:0:4}-${idate:4:2}-${idate:6:2}-${seconds}" + # ${NLN} "${COMOUTmed}/RESTART/${idate:0:8}.${idate:8:2}0000.ufs.cpld.cpl.r.nc" "${DATA}/RESTART/ufs.cpld.cpl.r.${idatestr}.nc" + # local idate=$(date --utc -d "${idate:0:8} ${idate:8:2} + ${restart_interval} hours" +%Y%m%d%H) + #done + + echo "SUB ${FUNCNAME[0]}: MOM6 input data linked/copied" + +} + +MOM6_nml() { + echo "SUB ${FUNCNAME[0]}: Creating name list for MOM6" + source "${HOMEgfs}/ush/parsing_namelists_MOM6.sh" + MOM6_namelists +} + +MOM6_out() { + echo "SUB ${FUNCNAME[0]}: Copying output data for MOM6" + + # Copy MOM_input from DATA to COM_OCEAN_INPUT after the forecast is run (and successfull) + if [[ ! -d ${COM_OCEAN_INPUT} ]]; then mkdir -p "${COM_OCEAN_INPUT}"; fi + ${NCP} "${DATA}/INPUT/MOM_input" "${COM_CONF}/ufs.MOM_input" + + # TODO: mediator should have its own CMEPS_out() function + # Copy mediator restarts from DATA to COM + # Linking mediator restarts to COM causes the model to fail with a message. + # See MOM6_postdet() function for error message + mkdir -p "${COM_MED_RESTART}" + local idate=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} + ${restart_interval} hours" +%Y%m%d%H) + while [[ ${idate} -le ${forecast_end_cycle} ]]; do + local seconds=$(to_seconds "${idate:8:2}"0000) # use function to_seconds from forecast_predet.sh to convert HHMMSS to seconds + local idatestr="${idate:0:4}-${idate:4:2}-${idate:6:2}-${seconds}" + local mediator_file="${DATA}/RESTART/ufs.cpld.cpl.r.${idatestr}.nc" + if [[ -f ${mediator_file} ]]; then + ${NCP} "${DATA}/RESTART/ufs.cpld.cpl.r.${idatestr}.nc" "${COM_MED_RESTART}/${idate:0:8}.${idate:8:2}0000.ufs.cpld.cpl.r.nc" + else + echo "Mediator restart ${mediator_file} not found." + fi + local idate=$(date --utc -d "${idate:0:8} ${idate:8:2} + ${restart_interval} hours" +%Y%m%d%H) + done +} + +CICE_postdet() { + echo "SUB ${FUNCNAME[0]}: CICE after run type determination" + + # TODO: These settings should be elevated to config.ice + histfreq_n=${histfreq_n:-6} + dumpfreq_n=${dumpfreq_n:-1000} # Set this to a really large value, as cice, mom6 and cmeps restart interval is controlled by ufs.configure + dumpfreq=${dumpfreq:-"y"} # "h","d","m" or "y" for restarts at intervals of "hours", "days", "months" or "years" + + if [[ "${RUN}" =~ "gdas" ]]; then + cice_hist_avg=".false., .false., .false., .false., .false." # DA needs instantaneous + else + cice_hist_avg=".true., .true., .true., .true., .true." # P8 wants averaged over histfreq_n + fi + + FRAZIL_FWSALT=${FRAZIL_FWSALT:-".true."} + ktherm=${ktherm:-2} + tfrz_option=${tfrz_option:-"'mushy'"} + tr_pond_lvl=${tr_pond_lvl:-".true."} # Use level melt ponds tr_pond_lvl=true + + # restart_pond_lvl (if tr_pond_lvl=true): + # -- if true, initialize the level ponds from restart (if runtype=continue) + # -- if false, re-initialize level ponds to zero (if runtype=initial or continue) + restart_pond_lvl=${restart_pond_lvl:-".false."} + + ice_grid_file=${ice_grid_file:-"grid_cice_NEMS_mx${ICERES}.nc"} + ice_kmt_file=${ice_kmt_file:-"kmtu_cice_NEMS_mx${ICERES}.nc"} + export MESH_OCN_ICE=${MESH_OCN_ICE:-"mesh.mx${ICERES}.nc"} + + # Copy CICE ICs + echo "Link CICE ICs" + cice_restart_file="${COM_ICE_RESTART_PREV}/${sPDY}.${scyc}0000.cice_model.res.nc" + if [[ ! -f "${cice_restart_file}" ]]; then + echo "FATAL ERROR: CICE restart file not found at '${cice_restart_file}', ABORT!" + exit 112 + else + ${NLN} "${cice_restart_file}" "${DATA}/cice_model.res.nc" + fi + rm -f "${DATA}/ice.restart_file" + echo "${DATA}/cice_model.res.nc" > "${DATA}/ice.restart_file" + + echo "Link CICE fixed files" + ${NLN} "${FIXcice}/${ICERES}/${ice_grid_file}" "${DATA}/" + ${NLN} "${FIXcice}/${ICERES}/${ice_kmt_file}" "${DATA}/" + ${NLN} "${FIXcice}/${ICERES}/${MESH_OCN_ICE}" "${DATA}/" + + # Link CICE output files + if [[ ! -d "${COM_ICE_HISTORY}" ]]; then mkdir -p "${COM_ICE_HISTORY}"; fi + mkdir -p "${COM_ICE_RESTART}" + + if [[ "${RUN}" =~ "gfs" || "${RUN}" =~ "gefs" ]]; then + # Link output files for RUN = gfs + + # TODO: make these forecast output files consistent w/ GFS output + # TODO: Work w/ NB to determine appropriate naming convention for these files + + # TODO: consult w/ NB on how to improve on this. Gather requirements and more information on what these files are and how they are used to properly catalog them + local vdate seconds vdatestr fhr last_fhr + for fhr in ${FV3_OUTPUT_FH}; do + vdate=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} + ${fhr} hours" +%Y%m%d%H) + seconds=$(to_seconds "${vdate:8:2}0000") # convert HHMMSS to seconds + vdatestr="${vdate:0:4}-${vdate:4:2}-${vdate:6:2}-${seconds}" + + if [[ 10#${fhr} -eq 0 ]]; then + ${NLN} "${COM_ICE_HISTORY}/iceic${vdate}.${ENSMEM}.${current_cycle}.nc" "${DATA}/CICE_OUTPUT/iceh_ic.${vdatestr}.nc" + else + (( interval = fhr - last_fhr )) # Umm.. isn't this histfreq_n? + ${NLN} "${COM_ICE_HISTORY}/ice${vdate}.${ENSMEM}.${current_cycle}.nc" "${DATA}/CICE_OUTPUT/iceh_$(printf "%0.2d" "${interval}")h.${vdatestr}.nc" + fi + last_fhr=${fhr} + done + + elif [[ "${RUN}" =~ "gdas" ]]; then + + # Link CICE generated initial condition file from DATA/CICE_OUTPUT to COMOUTice + # This can be thought of as the f000 output from the CICE model + local seconds vdatestr + seconds=$(to_seconds "${current_cycle:8:2}0000") # convert HHMMSS to seconds + vdatestr="${current_cycle:0:4}-${current_cycle:4:2}-${current_cycle:6:2}-${seconds}" + ${NLN} "${COM_ICE_HISTORY}/${RUN}.t${cyc}z.iceic.nc" "${DATA}/CICE_OUTPUT/iceh_ic.${vdatestr}.nc" + + # Link instantaneous CICE forecast output files from DATA/CICE_OUTPUT to COMOUTice + local vdate vdatestr seconds fhr fhr3 + fhr="${FHOUT}" + while [[ "${fhr}" -le "${FHMAX}" ]]; do + vdate=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} + ${fhr} hours" +%Y%m%d%H) + seconds=$(to_seconds "${vdate:8:2}0000") # convert HHMMSS to seconds + vdatestr="${vdate:0:4}-${vdate:4:2}-${vdate:6:2}-${seconds}" + fhr3=$(printf %03i "${fhr}") + ${NLN} "${COM_ICE_HISTORY}/${RUN}.t${cyc}z.icef${fhr3}.nc" "${DATA}/CICE_OUTPUT/iceh_inst.${vdatestr}.nc" + fhr=$((fhr + FHOUT)) + done + + fi + + # Link CICE restarts from CICE_RESTART to COMOUTice/RESTART + # Loop over restart_interval and link restarts from DATA to COM + local vdate vdatestr seconds + vdate=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} + ${restart_interval} hours" +%Y%m%d%H) + while [[ ${vdate} -le ${forecast_end_cycle} ]]; do + seconds=$(to_seconds "${vdate:8:2}0000") # convert HHMMSS to seconds + vdatestr="${vdate:0:4}-${vdate:4:2}-${vdate:6:2}-${seconds}" + ${NLN} "${COM_ICE_RESTART}/${vdate:0:8}.${vdate:8:2}0000.cice_model.res.nc" "${DATA}/CICE_RESTART/cice_model.res.${vdatestr}.nc" + vdate=$(date --utc -d "${vdate:0:8} ${vdate:8:2} + ${restart_interval} hours" +%Y%m%d%H) + done +} + +CICE_nml() { + echo "SUB ${FUNCNAME[0]}: Creating name list for CICE" + source "${HOMEgfs}/ush/parsing_namelists_CICE.sh" + CICE_namelists +} + +CICE_out() { + echo "SUB ${FUNCNAME[0]}: Copying output data for CICE" + + # Copy ice_in namelist from DATA to COMOUTice after the forecast is run (and successfull) + if [[ ! -d "${COM_ICE_INPUT}" ]]; then mkdir -p "${COM_ICE_INPUT}"; fi + ${NCP} "${DATA}/ice_in" "${COM_CONF}/ufs.ice_in" +} + +GOCART_rc() { + echo "SUB ${FUNCNAME[0]}: Linking input data and copying config files for GOCART" + # set input directory containing GOCART input data and configuration files + # this variable is platform-dependent and should be set via a YAML file + + # link directory containing GOCART input dataset, if provided + if [[ ! -z "${AERO_INPUTS_DIR}" ]]; then + ${NLN} "${AERO_INPUTS_DIR}" "${DATA}/ExtData" + status=$? + [[ ${status} -ne 0 ]] && exit "${status}" + fi + + # copying GOCART configuration files + if [[ ! -z "${AERO_CONFIG_DIR}" ]]; then + ${NCP} "${AERO_CONFIG_DIR}"/*.rc "${DATA}" + status=$? + [[ ${status} -ne 0 ]] && exit "${status}" + # attempt to generate ExtData configuration file if not provided + if [[ ! -f "${DATA}/AERO_ExtData.rc" ]]; then + { \ + echo "PrimaryExports%%" ; \ + cat "${AERO_CONFIG_DIR}/ExtData.other" ; \ + cat "${AERO_CONFIG_DIR}/ExtData.${AERO_EMIS_FIRE:-none}" ; \ + echo "%%" ; \ + } > "${DATA}/AERO_ExtData.rc" + status=$? + if (( status != 0 )); then exit "${status}"; fi + fi + fi +} + +GOCART_postdet() { + echo "SUB ${FUNCNAME[0]}: Linking output data for GOCART" + + if [[ ! -d "${COM_CHEM_HISTORY}" ]]; then mkdir -p "${COM_CHEM_HISTORY}"; fi + + for fhr in ${FV3_OUTPUT_FH}; do + local vdate=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} + ${fhr} hours" +%Y%m%d%H) + + # Temporarily delete existing files due to noclobber in GOCART + if [[ -e "${COM_CHEM_HISTORY}/gocart.inst_aod.${vdate:0:8}_${vdate:8:2}00z.nc4" ]]; then + rm -f "${COM_CHEM_HISTORY}/gocart.inst_aod.${vdate:0:8}_${vdate:8:2}00z.nc4" + fi + + #To Do: Temporarily removing this as this will crash gocart, adding copy statement at the end + #${NLN} "${COM_CHEM_HISTORY}/gocart.inst_aod.${vdate:0:8}_${vdate:8:2}00z.nc4" \ + # "${DATA}/gocart.inst_aod.${vdate:0:8}_${vdate:8:2}00z.nc4" + done +} + +GOCART_out() { + echo "SUB ${FUNCNAME[0]}: Copying output data for GOCART" + + # Copy gocart.inst_aod after the forecast is run (and successfull) + # TO DO: this should be linked but there were issues where gocart was crashing if it was linked + local fhr + local vdate + for fhr in ${FV3_OUTPUT_FH}; do + if (( fhr == 0 )); then continue; fi + vdate=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} + ${fhr} hours" +%Y%m%d%H) + ${NCP} "${DATA}/gocart.inst_aod.${vdate:0:8}_${vdate:8:2}00z.nc4" \ + "${COM_CHEM_HISTORY}/gocart.inst_aod.${vdate:0:8}_${vdate:8:2}00z.nc4" + done + + +} diff --git a/ush/forecast_predet.sh b/ush/forecast_predet.sh new file mode 100755 index 0000000000..84d377019a --- /dev/null +++ b/ush/forecast_predet.sh @@ -0,0 +1,254 @@ +#! /usr/bin/env bash + +##### +## "forecast_predet.sh" +## This script sets value of all variables +## +## This is the child script of ex-global forecast, +## This script is a definition of functions. +##### + +# For all non-evironment variables +# Cycling and forecast hour specific parameters + +to_seconds() { + # Function to convert HHMMSS to seconds since 00Z + local hhmmss=${1:?} + local hh=${hhmmss:0:2} + local mm=${hhmmss:2:2} + local ss=${hhmmss:4:2} + local seconds=$((10#${hh}*3600+10#${mm}*60+10#${ss})) + local padded_seconds=$(printf "%05d" "${seconds}") + echo "${padded_seconds}" +} + +middle_date(){ + # Function to calculate mid-point date in YYYYMMDDHH between two dates also in YYYYMMDDHH + local date1=${1:?} + local date2=${2:?} + local date1s=$(date --utc -d "${date1:0:8} ${date1:8:2}:00:00" +%s) + local date2s=$(date --utc -d "${date2:0:8} ${date2:8:2}:00:00" +%s) + local dtsecsby2=$(( $((date2s - date1s)) / 2 )) + local mid_date=$(date --utc -d "${date1:0:8} ${date1:8:2} + ${dtsecsby2} seconds" +%Y%m%d%H%M%S) + echo "${mid_date:0:10}" +} + +nhour(){ + # Function to calculate hours between two dates (This replicates prod-util NHOUR) + local date1=${1:?} + local date2=${2:?} + # Convert dates to UNIX timestamps + seconds1=$(date --utc -d "${date1:0:8} ${date1:8:2}:00:00" +%s) + seconds2=$(date --utc -d "${date2:0:8} ${date2:8:2}:00:00" +%s) + hours=$(( $((seconds1 - seconds2)) / 3600 )) # Calculate the difference in seconds and convert to hours + echo "${hours}" +} + +common_predet(){ + echo "SUB ${FUNCNAME[0]}: Defining variables for shared through model components" + # Ignore "not used" warning + # shellcheck disable=SC2034 + pwd=$(pwd) + CDUMP=${CDUMP:-gdas} + CASE=${CASE:-C768} + CDATE=${CDATE:-2017032500} + ENSMEM=${ENSMEM:-000} + + FCSTEXECDIR=${FCSTEXECDIR:-${HOMEgfs}/exec} + FCSTEXEC=${FCSTEXEC:-ufs_model.x} + + # Directories. + FIX_DIR=${FIX_DIR:-${HOMEgfs}/fix} + + # Model specific stuff + PARM_POST=${PARM_POST:-${HOMEgfs}/parm/post} + + # Define significant cycles + current_cycle=${CDATE} + previous_cycle=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} - ${assim_freq} hours" +%Y%m%d%H) + # ignore errors that variable isn't used + # shellcheck disable=SC2034 + next_cycle=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} + ${assim_freq} hours" +%Y%m%d%H) + forecast_end_cycle=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} + ${FHMAX} hours" +%Y%m%d%H) + + # IAU options + IAU_OFFSET=${IAU_OFFSET:-0} + DOIAU=${DOIAU:-"NO"} + if [[ "${DOIAU}" = "YES" ]]; then + sCDATE=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} - 3 hours" +%Y%m%d%H) + sPDY="${sCDATE:0:8}" + scyc="${sCDATE:8:2}" + tPDY=${previous_cycle:0:8} + tcyc=${previous_cycle:8:2} + else + sCDATE=${current_cycle} + sPDY=${current_cycle:0:8} + scyc=${current_cycle:8:2} + tPDY=${sPDY} + tcyc=${scyc} + fi + + mkdir -p "${COM_CONF}" + cd "${DATA}" || ( echo "FATAL ERROR: Unable to 'cd ${DATA}', ABORT!"; exit 8 ) +} + +FV3_predet(){ + echo "SUB ${FUNCNAME[0]}: Defining variables for FV3" + FHMIN=${FHMIN:-0} + FHMAX=${FHMAX:-9} + FHOUT=${FHOUT:-3} + FHZER=${FHZER:-6} + FHCYC=${FHCYC:-24} + FHMAX_HF=${FHMAX_HF:-0} + FHOUT_HF=${FHOUT_HF:-1} + NSOUT=${NSOUT:-"-1"} + FDIAG=${FHOUT} + if (( FHMAX_HF > 0 && FHOUT_HF > 0 )); then FDIAG=${FHOUT_HF}; fi + WRITE_DOPOST=${WRITE_DOPOST:-".false."} + restart_interval=${restart_interval:-${FHMAX}} + # restart_interval = 0 implies write restart at the END of the forecast i.e. at FHMAX + if [[ ${restart_interval} -eq 0 ]]; then + restart_interval=${FHMAX} + fi + + # Convert output settings into an explicit list for FV3 + # NOTE: FV3_OUTPUT_FH is also currently used in other components + # TODO: Have a seperate control for other components to address issue #1629 + FV3_OUTPUT_FH="" + local fhr=${FHMIN} + if (( FHOUT_HF > 0 && FHMAX_HF > 0 )); then + for (( fh = FHMIN; fh < FHMAX_HF; fh = fh + FHOUT_HF )); do + FV3_OUTPUT_FH="${FV3_OUTPUT_FH} ${fh}" + done + fhr=${FHMAX_HF} + fi + for (( fh = fhr; fh <= FHMAX; fh = fh + FHOUT )); do + FV3_OUTPUT_FH="${FV3_OUTPUT_FH} ${fh}" + done + + + # Model resolution specific parameters + DELTIM=${DELTIM:-225} + layout_x=${layout_x:-8} + layout_y=${layout_y:-16} + LEVS=${LEVS:-65} + + # Other options + MEMBER=${MEMBER:-"-1"} # -1: control, 0: ensemble mean, >0: ensemble member $MEMBER + ENS_NUM=${ENS_NUM:-1} # Single executable runs multiple members (e.g. GEFS) + PREFIX_ATMINC=${PREFIX_ATMINC:-""} # allow ensemble to use recentered increment + + # IAU options + IAUFHRS=${IAUFHRS:-0} + IAU_DELTHRS=${IAU_DELTHRS:-0} + + # Model config options + ntiles=6 + + TYPE=${TYPE:-"nh"} # choices: nh, hydro + MONO=${MONO:-"non-mono"} # choices: mono, non-mono + + QUILTING=${QUILTING:-".true."} + OUTPUT_GRID=${OUTPUT_GRID:-"gaussian_grid"} + WRITE_NEMSIOFLIP=${WRITE_NEMSIOFLIP:-".true."} + WRITE_FSYNCFLAG=${WRITE_FSYNCFLAG:-".true."} + + rCDUMP=${rCDUMP:-${CDUMP}} + + mkdir -p "${DATA}/INPUT" + + #------------------------------------------------------------------ + # changeable parameters + # dycore definitions + res="${CASE:1}" + resp=$((res+1)) + npx=${resp} + npy=${resp} + npz=$((LEVS-1)) + io_layout="1,1" + #ncols=$(( (${npx}-1)*(${npy}-1)*3/2 )) + + # spectral truncation and regular grid resolution based on FV3 resolution + JCAP_CASE=$((2*res-2)) + LONB_CASE=$((4*res)) + LATB_CASE=$((2*res)) + + JCAP=${JCAP:-${JCAP_CASE}} + LONB=${LONB:-${LONB_CASE}} + LATB=${LATB:-${LATB_CASE}} + + LONB_IMO=${LONB_IMO:-${LONB_CASE}} + LATB_JMO=${LATB_JMO:-${LATB_CASE}} + + # NSST Options + # nstf_name contains the NSST related parameters + # nstf_name(1) : NST_MODEL (NSST Model) : 0 = OFF, 1 = ON but uncoupled, 2 = ON and coupled + # nstf_name(2) : NST_SPINUP : 0 = OFF, 1 = ON, + # nstf_name(3) : NST_RESV (Reserved, NSST Analysis) : 0 = OFF, 1 = ON + # nstf_name(4) : ZSEA1 (in mm) : 0 + # nstf_name(5) : ZSEA2 (in mm) : 0 + # nst_anl : .true. or .false., NSST analysis over lake + NST_MODEL=${NST_MODEL:-0} + NST_SPINUP=${NST_SPINUP:-0} + NST_RESV=${NST_RESV-0} + ZSEA1=${ZSEA1:-0} + ZSEA2=${ZSEA2:-0} + nstf_name=${nstf_name:-"${NST_MODEL},${NST_SPINUP},${NST_RESV},${ZSEA1},${ZSEA2}"} + nst_anl=${nst_anl:-".false."} + + + # blocking factor used for threading and general physics performance + #nyblocks=$(expr \( $npy - 1 \) \/ $layout_y ) + #nxblocks=$(expr \( $npx - 1 \) \/ $layout_x \/ 32) + #if [ $nxblocks -le 0 ]; then nxblocks=1 ; fi + blocksize=${blocksize:-32} + + # variables for controlling initialization of NCEP/NGGPS ICs + filtered_terrain=${filtered_terrain:-".true."} + gfs_dwinds=${gfs_dwinds:-".true."} + + # various debug options + no_dycore=${no_dycore:-".false."} + dycore_only=${adiabatic:-".false."} + chksum_debug=${chksum_debug:-".false."} + print_freq=${print_freq:-6} + + #------------------------------------------------------- + if [[ ${RUN} =~ "gfs" || ${RUN} = "gefs" ]]; then + if [[ ! -d ${COM_ATMOS_RESTART} ]]; then mkdir -p "${COM_ATMOS_RESTART}" ; fi + ${NLN} "${COM_ATMOS_RESTART}" RESTART + # The final restart written at the end doesn't include the valid date + # Create links that keep the same name pattern for these files + files="coupler.res fv_core.res.nc" + for n in $(seq 1 "${ntiles}"); do + for base in ca_data fv_core.res fv_srf_wnd.res fv_tracer.res phy_data sfc_data; do + files="${files} ${base}.tile${n}.nc" + done + done + for file in ${files}; do + ${NLN} "${file}" "${COM_ATMOS_RESTART}/${forecast_end_cycle:0:8}.${forecast_end_cycle:8:2}0000.${file}" + done + else + mkdir -p "${DATA}/RESTART" + fi + + echo "SUB ${FUNCNAME[0]}: pre-determination variables set" +} + +WW3_predet(){ + echo "SUB ${FUNCNAME[0]}: WW3 before run type determination" + if [[ ! -d "${COM_WAVE_RESTART}" ]]; then mkdir -p "${COM_WAVE_RESTART}" ; fi + ${NLN} "${COM_WAVE_RESTART}" "restart_wave" +} + +CICE_predet(){ + echo "SUB ${FUNCNAME[0]}: CICE before run type determination" + if [[ ! -d "${DATA}/CICE_OUTPUT" ]]; then mkdir -p "${DATA}/CICE_OUTPUT"; fi + if [[ ! -d "${DATA}/CICE_RESTART" ]]; then mkdir -p "${DATA}/CICE_RESTART"; fi +} + +MOM6_predet(){ + echo "SUB ${FUNCNAME[0]}: MOM6 before run type determination" + if [[ ! -d "${DATA}/MOM6_OUTPUT" ]]; then mkdir -p "${DATA}/MOM6_OUTPUT"; fi + if [[ ! -d "${DATA}/MOM6_RESTART" ]]; then mkdir -p "${DATA}/MOM6_RESTART"; fi +} diff --git a/ush/fv3gfs_nc2nemsio.sh b/ush/fv3gfs_nc2nemsio.sh deleted file mode 100755 index cdecf56b8c..0000000000 --- a/ush/fv3gfs_nc2nemsio.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/ksh -set -x -#---------------------------------------------------------------------------- -#--Fanglin Yang, October 2016: convert FV3 NetCDF files to NEMSIO format. -# Note FV3 lat-lon grid is located at the center of each grid box, -# starting from south to north and from east to west. -# For example, for a 0.5-deg uniform grid, nlon=720, nlat=360 -# X(1,1)=[0.25E,89.75S], X(nlon,nlat)=[359.75E,89.75N] -#--------------------------------------------------------------------------- - -export CDATE=${CDATE:-"2016100300"} -export GG=${master_grid:-"0p25deg"} # 1deg 0p5deg 0p25deg 0p125deg -export FHZER=${FHZER:-6} # accumulation bucket in hours -export fdiag=${fdiag:-"none"} # specified forecast output hours - -pwd=$(pwd) -export DATA=${DATA:-$pwd} -export NWPROD=${NWPROD:-$pwd} -export HOMEgfs=${HOMEgfs:-$NWPROD} -export NC2NEMSIOEXE=${NC2NEMSIOEXE:-$HOMEgfs/exec/fv3nc2nemsio.x} - -cycn=`echo $CDATE | cut -c 9-10` -export TCYC=${TCYC:-".t${cycn}z."} -export CDUMP=${CDUMP:-gfs} - -export PREFIX=${PREFIX:-${CDUMP}${TCYC}} -export SUFFIX=${SUFFIX:-".nemsio"} - -#-------------------------------------------------- -cd $DATA || exit 8 - -input_dir=$DATA -output_dir=$DATA - -in_3d=${PREFIX}nggps3d.${GG}.nc -in_2d=${PREFIX}nggps2d.${GG}.nc -if [ ! -s $in_3d -o ! -s $in_2d ]; then - echo "$in_3d and $in_2d are missing. exit" - exit 1 -fi - -#--check if the output is from non-hydrostatic case -nhrun=$(ncdump -c $in_3d | grep nhpres) -nhcase=$? - -# If no information on the time interval is given, deduce from the netCDF file -[[ $fdiag = "none" ]] && fdiag=$(ncks -H -s "%g " -C -v time $in_3d) - -#--------------------------------------------------- -nt=0 -err=0 -for fhour in $(echo $fdiag | sed "s/,/ /g"); do - nt=$((nt+1)) - ifhour=$(printf "%09d" $fhour) # convert to integer - fhzh=$(( (ifhour/FHZER-1)*FHZER )) # bucket accumulation starting hour - [[ $fhzh -lt 0 ]] && fhzh=0 - - fhr=$(printf "%03d" $fhour) - outfile=${PREFIX}atmf${fhr}${SUFFIX} - - $NC2NEMSIOEXE $CDATE $nt $fhzh $fhour $input_dir $in_2d $in_3d $output_dir $outfile $nhcase - rc=$? - ((err+=rc)) - - [[ ! -f $outfile ]] && ((err+=1)) - -done - -#--------------------------------------------------- -echo $(date) EXITING $0 with return code $err >&2 -exit $err diff --git a/ush/fv3gfs_regrid_nemsio.sh b/ush/fv3gfs_regrid_nemsio.sh deleted file mode 100755 index d4c38ccc95..0000000000 --- a/ush/fv3gfs_regrid_nemsio.sh +++ /dev/null @@ -1,128 +0,0 @@ -#!/bin/sh - -################################################################################ -# UNIX Script Documentation Block -# Script name: fv3gfs_regrid_nemsio.sh -# Script description: Remap FV3 forecasts on six tile in NetCDF to global Gaussian -# grid with NEMSIO output -# -# $Id$ -# -# Author: Fanglin Yang Org: NCEP/EMC Date: 2016-12-01 -# Abstract: regrid_nemsio.fd provided by Jeffrey.S.Whitaker OAR/ESRL -# -# Script history log: -# 2016-12-01 Fanglin Yang -# 2017-02-13 Rahul Mahajan -# -# Attributes: -# Language: Portable Operating System Interface (POSIX) Shell -# Machine: WCOSS-CRAY, Theia -################################################################################ - -# Set environment. -VERBOSE=${VERBOSE:-"YES"} -if [ $VERBOSE = YES ] ; then - echo $(date) EXECUTING $0 $* >&2 - set -x -fi - -#------------------------------------------------------- -# Directories and paths -pwd=$(pwd) -DATA=${DATA:-$pwd} -NWPROD=${NWPROD:-$pwd} -HOMEgfs=${HOMEgfs:-$NWPROD} -FIX_DIR=${FIX_DIR:-$HOMEgfs/fix} -FIX_AM=${FIX_AM:-$FIX_DIR/fix_am} -FIXfv3=${FIXfv3:-$FIX_DIR/fix_fv3_gmted2010} -REGRID_NEMSIO_EXEC=${REGRID_NEMSIO_EXEC:-$HOMEgfs/exec/regrid_nemsio} -REGRID_NEMSIO_TBL=${REGRID_NEMSIO_TBL:-$HOMEgfs/parm/parm_fv3diag/variable_table.txt} - -CDATE=${CDATE:-2017011500} -CDUMP=${CDUMP:-"gdas"} -CASE=${CASE:-C768} -LEVS=${LEVS:-65} -GG=${GG:-gaussian} # gaussian or regular lat-lon -res=$(echo $CASE | cut -c2-) -JCAP=${JCAP:-$((res*2-2))} -LATB=${LATB:-$((res*2))} -LONB=${LONB:-$((res*4))} - -NEMSIO_OUT2DNAME=${NEMSIO_OUT2DNAME:-sfc.$CDATE} -NEMSIO_OUT3DNAME=${NEMSIO_OUT3DNAME:-atm.$CDATE} -DEBUG=${REGRID_NEMSIO_DEBUG:-".true."} - -APRUN_REGRID_NEMSIO=${APRUN_REGRID_NEMSIO:-${APRUN:-""}} -NTHREADS_REGRID_NEMSIO=${NTHREADS_REGRID_NEMSIO:-${NTHREADS:-1}} - -NMV=${NMV:-"/bin/mv"} - -#------------------------------------------------------- -# IO specific parameters and error traps -ERRSCRIPT=${ERRSCRIPT:-'eval [[ $err = 0 ]]'} - -#-------------------------------------------------- -# ESMF regrid weights and output variable table -weight_bilinear=${weight_bilinear:-$FIXfv3/$CASE/fv3_SCRIP_${CASE}_GRIDSPEC_lon${LONB}_lat${LATB}.${GG}.bilinear.nc} -weight_neareststod=${weight_neareststod:-$FIXfv3/$CASE/fv3_SCRIP_${CASE}_GRIDSPEC_lon${LONB}_lat${LATB}.${GG}.neareststod.nc} - -#------------------------------------------------------- -# Go to the directory where the history files are -cd $DATA || exit 8 - -#------------------------------------------------------- -# Create namelist -rm -f regrid-nemsio.input - -cat > regrid-nemsio.input << EOF -&share - debug=$DEBUG, - ntrunc=$JCAP, - nlons=$LONB, - nlats=$LATB, - datapathout2d='$NEMSIO_OUT2DNAME', - datapathout3d='$NEMSIO_OUT3DNAME', - analysis_filename='fv3_history.tile1.nc','fv3_history.tile2.nc','fv3_history.tile3.nc','fv3_history.tile4.nc','fv3_history.tile5.nc','fv3_history.tile6.nc', - analysis_filename2d='fv3_history2d.tile1.nc','fv3_history2d.tile2.nc','fv3_history2d.tile3.nc','fv3_history2d.tile4.nc','fv3_history2d.tile5.nc','fv3_history2d.tile6.nc', - forecast_timestamp='${CDATE}', - variable_table='$REGRID_NEMSIO_TBL', - nemsio_opt3d='bin4', - nemsio_opt2d='bin4' -/ - -&interpio - esmf_bilinear_filename='$weight_bilinear', - esmf_neareststod_filename='$weight_neareststod', - gfs_hyblevs_filename='$FIX_AM/global_hyblev.l$LEVS.txt' -/ -EOF - -#------------------------------------------------------------------ -export OMP_NUM_THREADS=$NTHREADS_REGRID_NEMSIO -$APRUN_REGRID_NEMSIO $REGRID_NEMSIO_EXEC - -export ERR=$? -export err=$ERR -$ERRSCRIPT || exit $err - -rm -f regrid-nemsio.input - -#------------------------------------------------------------------ -PDY=`echo $CDATE | cut -c1-8` -cyc=`echo $CDATE | cut -c9-10` -PREFIX=${PREFIX:-"${CDUMP}.t${cyc}z."} -SUFFIX=${SUFFIX:-".nemsio"} -for ftype in atm sfc; do - for file in `ls -1 ${ftype}.${CDATE}.fhr*`; do - fhrchar=`echo $file | cut -d. -f3 | cut -c4-` - $NMV $file ${PREFIX}${ftype}f${fhrchar}${SUFFIX} - done -done - -#------------------------------------------------------------------ -set +x -if [ $VERBOSE = "YES" ] ; then - echo $(date) EXITING $0 with return code $err >&2 -fi -exit $err diff --git a/ush/fv3gfs_remap.sh b/ush/fv3gfs_remap.sh index b2335401ca..430e96c868 100755 --- a/ush/fv3gfs_remap.sh +++ b/ush/fv3gfs_remap.sh @@ -1,25 +1,25 @@ -#!/bin/ksh -set -ax +#! /usr/bin/env bash #-------------------------------------- #-- remap FV3 6 tiles to global array #-- Fanglin Yang, October 2016 #-------------------------------------- +source "$HOMEgfs/ush/preamble.sh" + export CDATE=${CDATE:-"2016100300"} export CASE=${CASE:-"C192"} # C48 C96 C192 C384 C768 C1152 C3072 export GG=${master_grid:-"0p25deg"} # 1deg 0p5deg 0p25deg 0p125deg pwd=$(pwd) export DATA=${DATA:-$pwd} -export NWPROD=${NWPROD:-$pwd} -export HOMEgfs=${HOMEgfs:-$NWPROD} +export HOMEgfs=${HOMEgfs:-$PACKAGEROOT} export FIX_DIR=${FIX_DIR:-$HOMEgfs/fix} -export FIXfv3=${FIXfv3:-$FIX_DIR/fix_fv3_gmted2010} +export FIXfv3=${FIXfv3:-$FIX_DIR/orog} export REMAPEXE=${REMAPEXE:-$HOMEgfs/exec/fregrid_parallel} export IPD4=${IPD4:-"YES"} -cycn=`echo $CDATE | cut -c 9-10` +cycn=$(echo $CDATE | cut -c 9-10) export TCYC=${TCYC:-".t${cycn}z."} export CDUMP=${CDUMP:-gfs} export PREFIX=${PREFIX:-${CDUMP}${TCYC}} @@ -114,6 +114,5 @@ for type in atmos_4xdaily nggps2d nggps3d ; do done -echo $(date) EXITING $0 with return code $err >&2 exit $err diff --git a/ush/fv3gfs_remap_weights.sh b/ush/fv3gfs_remap_weights.sh index a4140a7c88..15dfc73e3f 100755 --- a/ush/fv3gfs_remap_weights.sh +++ b/ush/fv3gfs_remap_weights.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#! /usr/bin/env bash #BSUB -L /bin/sh #BSUB -P FV3GFS-T2O #BSUB -oo log.weights diff --git a/ush/gaussian_sfcanl.sh b/ush/gaussian_sfcanl.sh index 866cd6d255..1e68ca0186 100755 --- a/ush/gaussian_sfcanl.sh +++ b/ush/gaussian_sfcanl.sh @@ -1,4 +1,5 @@ -#!/bin/ksh +#! /usr/bin/env bash + ################################################################################ #### UNIX Script Documentation Block # . . @@ -27,9 +28,9 @@ # HOMEgfs Directory for gfs version. Default is # $BASEDIR/gfs_ver.v15.0.0} # FIXam Directory for the global fixed climatology files. -# Defaults to $HOMEgfs/fix/fix_am +# Defaults to $HOMEgfs/fix/am # FIXfv3 Directory for the model grid and orography netcdf -# files. Defaults to $HOMEgfs/fix/fix_fv3_gmted2010 +# files. Defaults to $HOMEgfs/fix/orog # FIXWGTS Weight file to use for interpolation # EXECgfs Directory of the program executable. Defaults to # $HOMEgfs/exec @@ -41,7 +42,7 @@ # defaults to current working directory # XC Suffix to add to executables. Defaults to none. # GAUSFCANLEXE Program executable. -# Defaults to $EXECgfs/gaussian_sfcanl.exe +# Defaults to $EXECgfs/gaussian_sfcanl.x # INISCRIPT Preprocessing script. Defaults to none. # LOGSCRIPT Log posting script. Defaults to none. # ERRSCRIPT Error processing script @@ -86,11 +87,11 @@ # $FIXWGTS # $FIXam/global_hyblev.l65.txt # -# input data : $COMOUT/RESTART/${PDY}.${cyc}0000.sfcanl_data.tile*.nc +# input data : ${COM_ATMOS_RESTART}/${PDY}.${cyc}0000.sfcanl_data.tile*.nc # # output data: $PGMOUT # $PGMERR -# $COMOUT/${APREFIX}sfcanl${ASUFFIX} +# $COMOUT/${APREFIX}sfcanl.nc # # Remarks: # @@ -109,12 +110,7 @@ # ################################################################################ -# Set environment. -VERBOSE=${VERBOSE:-"NO"} -if [[ "$VERBOSE" = "YES" ]] ; then - echo $(date) EXECUTING $0 $* >&2 - set -x -fi +source "$HOMEgfs/ush/preamble.sh" CASE=${CASE:-C768} res=$(echo $CASE | cut -c2-) @@ -125,27 +121,19 @@ LATB_SFC=${LATB_SFC:-$LATB_CASE} DONST=${DONST:-"NO"} LEVS=${LEVS:-64} LEVSP1=$(($LEVS+1)) -OUTPUT_FILE=${OUTPUT_FILE:-"nemsio"} -if [ $OUTPUT_FILE = "netcdf" ]; then - export NETCDF_OUT=".true." -else - export NETCDF_OUT=".false." -fi - # Directories. -gfs_ver=${gfs_ver:-v15.0.0} -BASEDIR=${BASEDIR:-${NWROOT:-/nwprod2}} -HOMEgfs=${HOMEgfs:-$BASEDIR/gfs_ver.${gfs_ver}} +gfs_ver=${gfs_ver:-v16.3.0} +BASEDIR=${BASEDIR:-${PACKAGEROOT:-/lfs/h1/ops/prod/packages}} +HOMEgfs=${HOMEgfs:-$BASEDIR/gfs.${gfs_ver}} EXECgfs=${EXECgfs:-$HOMEgfs/exec} -FIXfv3=${FIXfv3:-$HOMEgfs/fix/fix_fv3_gmted2010} -FIXam=${FIXam:-$HOMEgfs/fix/fix_am} +FIXfv3=${FIXfv3:-$HOMEgfs/fix/orog} +FIXam=${FIXam:-$HOMEgfs/fix/am} FIXWGTS=${FIXWGTS:-$FIXfv3/$CASE/fv3_SCRIP_${CASE}_GRIDSPEC_lon${LONB_SFC}_lat${LATB_SFC}.gaussian.neareststod.nc} DATA=${DATA:-$(pwd)} -COMOUT=${COMOUT:-$(pwd)} # Filenames. -XC=${XC} -GAUSFCANLEXE=${GAUSFCANLEXE:-$EXECgfs/gaussian_sfcanl.exe} +XC=${XC:-} +GAUSFCANLEXE=${GAUSFCANLEXE:-$EXECgfs/gaussian_sfcanl.x} SIGLEVEL=${SIGLEVEL:-$FIXam/global_hyblev.l${LEVSP1}.txt} CDATE=${CDATE:?} @@ -160,7 +148,7 @@ export REDERR=${REDERR:-'2>'} # Set defaults ################################################################################ # Preprocessing -$INISCRIPT +${INISCRIPT:-} pwd=$(pwd) if [[ -d $DATA ]] then @@ -170,7 +158,8 @@ else mkdata=YES fi cd $DATA||exit 99 -[[ -d $COMOUT ]]||mkdir -p $COMOUT +[[ -d "${COM_ATMOS_ANALYSIS}" ]] || mkdir -p "${COM_ATMOS_ANALYSIS}" +[[ -d "${COM_ATMOS_RESTART}" ]] || mkdir -p "${COM_ATMOS_RESTART}" cd $DATA ################################################################################ @@ -179,12 +168,10 @@ export PGM=$GAUSFCANLEXE export pgm=$PGM $LOGSCRIPT -PDY=$(echo $CDATE | cut -c1-8) -cyc=$(echo $CDATE | cut -c9-10) -iy=$(echo $CDATE | cut -c1-4) -im=$(echo $CDATE | cut -c5-6) -id=$(echo $CDATE | cut -c7-8) -ih=$(echo $CDATE | cut -c9-10) +iy=${PDY:0:4} +im=${PDY:4:2} +id=${PDY:6:2} +ih=${cyc} export OMP_NUM_THREADS=${OMP_NUM_THREADS_SFC:-1} @@ -192,12 +179,12 @@ export OMP_NUM_THREADS=${OMP_NUM_THREADS_SFC:-1} $NLN $FIXWGTS ./weights.nc # input analysis tiles (with nst records) -$NLN $COMOUT/RESTART/${PDY}.${cyc}0000.sfcanl_data.tile1.nc ./anal.tile1.nc -$NLN $COMOUT/RESTART/${PDY}.${cyc}0000.sfcanl_data.tile2.nc ./anal.tile2.nc -$NLN $COMOUT/RESTART/${PDY}.${cyc}0000.sfcanl_data.tile3.nc ./anal.tile3.nc -$NLN $COMOUT/RESTART/${PDY}.${cyc}0000.sfcanl_data.tile4.nc ./anal.tile4.nc -$NLN $COMOUT/RESTART/${PDY}.${cyc}0000.sfcanl_data.tile5.nc ./anal.tile5.nc -$NLN $COMOUT/RESTART/${PDY}.${cyc}0000.sfcanl_data.tile6.nc ./anal.tile6.nc +${NLN} "${COM_ATMOS_RESTART}/${PDY}.${cyc}0000.sfcanl_data.tile1.nc" "./anal.tile1.nc" +${NLN} "${COM_ATMOS_RESTART}/${PDY}.${cyc}0000.sfcanl_data.tile2.nc" "./anal.tile2.nc" +${NLN} "${COM_ATMOS_RESTART}/${PDY}.${cyc}0000.sfcanl_data.tile3.nc" "./anal.tile3.nc" +${NLN} "${COM_ATMOS_RESTART}/${PDY}.${cyc}0000.sfcanl_data.tile4.nc" "./anal.tile4.nc" +${NLN} "${COM_ATMOS_RESTART}/${PDY}.${cyc}0000.sfcanl_data.tile5.nc" "./anal.tile5.nc" +${NLN} "${COM_ATMOS_RESTART}/${PDY}.${cyc}0000.sfcanl_data.tile6.nc" "./anal.tile6.nc" # input orography tiles $NLN $FIXfv3/$CASE/${CASE}_oro_data.tile1.nc ./orog.tile1.nc @@ -210,19 +197,21 @@ $NLN $FIXfv3/$CASE/${CASE}_oro_data.tile6.nc ./orog.tile6.nc $NLN $SIGLEVEL ./vcoord.txt # output gaussian global surface analysis files -$NLN $COMOUT/${APREFIX}sfcanl${ASUFFIX} ./sfc.gaussian.analysis.file +${NLN} "${COM_ATMOS_ANALYSIS}/${APREFIX}sfcanl.nc" "./sfc.gaussian.analysis.file" + +# Namelist uses booleans now +if [[ ${DONST} == "YES" ]]; then do_nst='.true.'; else do_nst='.false.'; fi # Executable namelist cat < fort.41 &setup - yy=$iy, - mm=$im, - dd=$id, - hh=$ih, - igaus=$LONB_SFC, - jgaus=$LATB_SFC, - donst=$DONST, - netcdf_out=$NETCDF_OUT + yy=${iy}, + mm=${im}, + dd=${id}, + hh=${ih}, + igaus=${LONB_SFC}, + jgaus=${LATB_SFC}, + donst=${do_nst}, / EOF @@ -236,10 +225,5 @@ $ERRSCRIPT||exit 2 # Postprocessing cd $pwd [[ $mkdata = YES ]]&&rmdir $DATA -$ENDSCRIPT -set +x -if [[ "$VERBOSE" = "YES" ]] -then - echo $(date) EXITING $0 with return code $err >&2 -fi -exit $err + +exit ${err} diff --git a/ush/getdump.sh b/ush/getdump.sh index 3766914f14..462ca5e755 100755 --- a/ush/getdump.sh +++ b/ush/getdump.sh @@ -1,12 +1,13 @@ -#!/bin/ksh -set -x +#! /usr/bin/env bash -export COMPONENT=${COMPONENT:-atmos} +source "$HOMEgfs/ush/preamble.sh" + +COMPONENT=${COMPONENT:-atmos} CDATE=${1:-""} CDUMP=${2:-""} -SOURCE_DIR=${3:-$DMPDIR/${CDUMP}${DUMP_SUFFIX}.${PDY}/${cyc}} -TARGET_DIR=${4:-$ROTDIR/${CDUMP}.${PDY}/$cyc/$COMPONENT} +SOURCE_DIR=${3:-$DMPDIR/${CDUMP}${DUMP_SUFFIX}.${PDY}/${cyc}/${COMPONENT}} +TARGET_DIR=${4:-$ROTDIR/${CDUMP}.${PDY}/${cyc}/${COMPONENT}} DUMP_SUFFIX=${DUMP_SUFFIX:-""} @@ -22,14 +23,14 @@ if [ ! -s $TARGET_DIR ]; then mkdir -p $TARGET_DIR ;fi # Set file prefix -cyc=`echo $CDATE |cut -c 9-10` +cyc=$(echo $CDATE |cut -c 9-10) prefix="$CDUMP.t${cyc}z." # Link dump files from SOURCE_DIR to TARGET_DIR cd $SOURCE_DIR if [ -s ${prefix}updated.status.tm00.bufr_d ]; then - for file in `ls ${prefix}*`; do + for file in $(ls ${prefix}*); do ln -fs $SOURCE_DIR/$file $TARGET_DIR/$file done else @@ -38,6 +39,3 @@ else fi exit 0 - - - diff --git a/ush/getges.sh b/ush/getges.sh index 62ce0eea3f..2fb54fccc7 100755 --- a/ush/getges.sh +++ b/ush/getges.sh @@ -1,4 +1,5 @@ -#!/bin/ksh +#! /usr/bin/env bash + ################################################################################ # # Name: getges.sh Author: Mark Iredell @@ -74,6 +75,9 @@ # ################################################################################ #------------------------------------------------------------------------------- + +source "$HOMEgfs/ush/preamble.sh" + # Set some default parameters. fhbeg=03 # hour to begin searching backward for guess fhinc=03 # hour to increment backward in search @@ -151,7 +155,7 @@ if [[ $gfile = '?' || $# -gt 1 || $err -ne 0 || -z $valid ||\ fi exit 1 fi -[[ $quiet = NO ]]&&set -x + if [[ $envir != prod && $envir != test && $envir != para && $envir != dump && $envir != pr? && $envir != dev ]];then netwk=$envir envir=prod @@ -1345,8 +1349,9 @@ while [[ $fh -le $fhend ]];do ghp2=$fhp2;[[ $ghp2 -lt 100 ]]&&ghp2=0$ghp2 ghp3=$fhp3;[[ $ghp3 -lt 100 ]]&&ghp3=0$ghp3 id=$($NDATE -$fh $valid) - typeset -L8 day=$id - typeset -R2 cyc=$id + + day=$(echo $id | xargs | cut -c8) + cyc=$(echo $id | xargs | rev | cut -c1-2 | rev) eval list=\$getlist$fh [[ -z "$list" ]]&&list=${geslist} for ges_var in $list;do @@ -1369,8 +1374,10 @@ fi # Either copy guess to a file or write guess name to standard output. if [[ -z "$gfile" ]];then echo $ges - exit $? + err=$? else cp $ges $gfile - exit $? + err=$? fi + +exit ${err} diff --git a/ush/getgfsnctime b/ush/getgfsnctime new file mode 100755 index 0000000000..d493339292 --- /dev/null +++ b/ush/getgfsnctime @@ -0,0 +1,34 @@ +#!/usr/bin/env python +# getgfsnctime +# cory.r.martin@noaa.gov +# 2019-10-17 +# script to return initial and valid time +# for specified netCDF file +import argparse +import gsi_utils +import datetime + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description='Get initial/valid time information from a FV3GFS netCDF file') + parser.add_argument('ncfile', help='path to input netCDF file', + type=str) + parser.add_argument('-i','--init', action='store_true', default=False, + help='option to print out initialized time YYYYMMDDHHMM') + parser.add_argument('-v','--valid', action='store_true', default=False, + help='option to print out valid time YYYYMMDDHHMM') + parser.add_argument('-f','--fhour', action='store_true', default=False, + help='option to print out forecast hour') + args = parser.parse_args() + inittime, validtime, nfhour = gsi_utils.get_timeinfo(args.ncfile) + if args.init: + print(inittime.strftime("%Y%m%d%H%M")) + elif args.valid: + print(validtime.strftime("%Y%m%d%H%M")) + elif args.fhour: + print(nfhour) + else: + print(args.ncfile) + print('Initial time: '+inittime.strftime("%Y-%m-%d %H:%M")) + print('Valid time: '+validtime.strftime("%Y-%m-%d %H:%M")) + print('Forecast hour: '+str(nfhour)) diff --git a/ush/getncdimlen b/ush/getncdimlen new file mode 100755 index 0000000000..fcf231947b --- /dev/null +++ b/ush/getncdimlen @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +# getncdimlen +# cory.r.martin@noaa.gov +# 2019-10-17 +# script to return length of requested dimension +# for specified netCDF file +import argparse +import gsi_utils + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description='Get length of dimension specified from a FV3GFS netCDF file') + parser.add_argument('ncfile', help='path to input netCDF file', type=str) + parser.add_argument('dimname', help='name of dimension (ex: grid_xt)', type=str) + args = parser.parse_args() + FileDims = gsi_utils.get_ncdims(args.ncfile) + print(FileDims[args.dimname]) diff --git a/ush/gfs_bfr2gpk.sh b/ush/gfs_bfr2gpk.sh index 1b77237cf6..add68536ec 100755 --- a/ush/gfs_bfr2gpk.sh +++ b/ush/gfs_bfr2gpk.sh @@ -1,4 +1,5 @@ -#!/bin/sh +#! /usr/bin/env bash + ######################################################################### # # # Script: gfs_bfr2gpk # @@ -9,7 +10,7 @@ # Log: # # K. Brill/HPC 04/12/05 # ######################################################################### -set -x +source "${HOMEgfs}/ush/preamble.sh" # Set GEMPAK paths. @@ -17,32 +18,19 @@ set -x # Go to a working directory. -cd $DATA - -# Set input directory name. - -#BPATH=$COMIN/bufr.t${cyc}z -BPATH=$COMOUT/bufr.t${cyc}z -export BPATH +cd "${DATA}" || exit 2 # Set output directory: - -COMAWP=${COMAWP:-$COMOUT/gempak} -OUTDIR=$COMAWP -if [ ! -d $OUTDIR ]; then mkdir -p $OUTDIR; fi +if [[ ! -d "${COM_ATMOS_GEMPAK}" ]]; then mkdir -p "${COM_ATMOS_GEMPAK}"; fi outfilbase=gfs_${PDY}${cyc} # Get the list of individual station files. date -##filelist=`/bin/ls -1 $BPATH | grep bufr` -##rm -f bufr.combined -##for file in $filelist; do -## cat $BPATH/$file >> bufr.combined -##done - cat $BPATH/bufr.*.${PDY}${cyc} > bufr.combined +cat "${COM_ATMOS_BUFR}/bufr."*".${PDY}${cyc}" > bufr.combined date + namsnd << EOF > /dev/null SNBUFR = bufr.combined SNOUTF = ${outfilbase}.snd @@ -54,20 +42,20 @@ r ex EOF + date -/bin/rm *.nts +/bin/rm ./*.nts snd=${outfilbase}.snd sfc=${outfilbase}.sfc -cp $snd $OUTDIR/.$snd -cp $sfc $OUTDIR/.$sfc -mv $OUTDIR/.$snd $OUTDIR/$snd -mv $OUTDIR/.$sfc $OUTDIR/$sfc - -if [ $SENDDBN = "YES" ] -then - $DBNROOT/bin/dbn_alert MODEL GFS_PTYP_SFC $job $OUTDIR/$sfc - $DBNROOT/bin/dbn_alert MODEL GFS_PTYP_SND $job $OUTDIR/$snd +cp "${snd}" "${COM_ATMOS_GEMPAK}/.${snd}" +cp "${sfc}" "${COM_ATMOS_GEMPAK}/.${sfc}" +mv "${COM_ATMOS_GEMPAK}/.${snd}" "${COM_ATMOS_GEMPAK}/${snd}" +mv "${COM_ATMOS_GEMPAK}/.${sfc}" "${COM_ATMOS_GEMPAK}/${sfc}" + +if [[ ${SENDDBN} == "YES" ]]; then + "${DBNROOT}/bin/dbn_alert" MODEL GFS_PTYP_SFC "${job}" "${COM_ATMOS_GEMPAK}/${sfc}" + "${DBNROOT}/bin/dbn_alert" MODEL GFS_PTYP_SND "${job}" "${COM_ATMOS_GEMPAK}/${snd}" fi -echo done > $DATA/gembufr.done +echo "done" > "${DATA}/gembufr.done" diff --git a/ush/gfs_bufr.sh b/ush/gfs_bufr.sh index 439e405b8c..5ed05f9beb 100755 --- a/ush/gfs_bufr.sh +++ b/ush/gfs_bufr.sh @@ -1,4 +1,5 @@ -#!/bin/ksh +#! /usr/bin/env bash + # # UTILITY SCRIPT NAME : gfsbufr.sh # AUTHOR : Hua-Lu Pan @@ -16,33 +17,20 @@ # 2018-05-22 Guang Ping Lou: Making it work for both GFS and FV3GFS # 2018-05-30 Guang Ping Lou: Make sure all files are available. # 2019-10-10 Guang Ping Lou: Read in NetCDF files -echo "History: February 2003 - First implementation of this utility script" +# echo "History: February 2003 - First implementation of this utility script" # +source "${HOMEgfs:?}/ush/preamble.sh" -set -ax - -if test "$F00FLAG" = "YES" -then +if [[ "${F00FLAG}" == "YES" ]]; then f00flag=".true." else f00flag=".false." fi -hh=$FSTART -while test $hh -le $FEND -do - hh=` expr $hh + $FINT ` - if test $hh -lt 10 - then - hh=0$hh - fi -done - -export pgm=gfs_bufr +export pgm="gfs_bufr.x" #. prep_step -if test "$MAKEBUFR" = "YES" -then +if [[ "${MAKEBUFR}" == "YES" ]]; then bufrflag=".true." else bufrflag=".false." @@ -51,65 +39,55 @@ fi ##fformat="nc" ##fformat="nemsio" - CLASS="class1fv3" +CLASS="class1fv3" cat << EOF > gfsparm &NAMMET - levs=$LEVS,makebufr=$bufrflag, - dird="$COMOUT/bufr.${cycle}/bufr", - nstart=$FSTART,nend=$FEND,nint=$FINT, - nend1=$NEND1,nint1=$NINT1,nint3=$NINT3, - nsfc=80,f00=$f00flag,fformat=$fformat + levs=${LEVS},makebufr=${bufrflag}, + dird="${COM_ATMOS_BUFR}/bufr", + nstart=${FSTART},nend=${FEND},nint=${FINT}, + nend1=${NEND1},nint1=${NINT1},nint3=${NINT3}, + nsfc=80,f00=${f00flag},fformat=${fformat},np1=0 / EOF -hh=$FSTART - if test $hh -lt 100 - then - hh1=`echo "${hh#"${hh%??}"}"` - hh=$hh1 - fi -while test $hh -le $FEND -do - if test $hh -lt 100 - then - hh2=0$hh - else - hh2=$hh - fi +for (( hr = 10#${FSTART}; hr <= 10#${FEND}; hr = hr + 10#${FINT} )); do + hh2=$(printf %02i "${hr}") + hh3=$(printf %03i "${hr}") -#--------------------------------------------------------- -# Make sure all files are available: + #--------------------------------------------------------- + # Make sure all files are available: ic=0 - while [ $ic -lt 1000 ] - do - if [ ! -f $COMIN/${RUN}.${cycle}.logf${hh2}.${logfm} ] - then + while (( ic < 1000 )); do + if [[ ! -f "${COM_ATMOS_HISTORY}/${RUN}.${cycle}.atm.logf${hh3}.${logfm}" ]]; then sleep 10 - ic=`expr $ic + 1` + ic=$((ic + 1)) else break fi - if [ $ic -ge 360 ] - then - err_exit "COULD NOT LOCATE logf${hh2} file AFTER 1 HOUR" + if (( ic >= 360 )); then + echo "FATAL: COULD NOT LOCATE logf${hh3} file AFTER 1 HOUR" + exit 2 fi done -#------------------------------------------------------------------ - ln -sf $COMIN/${RUN}.${cycle}.atmf${hh2}.${atmfm} sigf${hh} - ln -sf $COMIN/${RUN}.${cycle}.sfcf${hh2}.${atmfm} flxf${hh} - - hh=` expr $hh + $FINT ` - if test $hh -lt 10 - then - hh=0$hh - fi -done + #------------------------------------------------------------------ + ln -sf "${COM_ATMOS_HISTORY}/${RUN}.${cycle}.atmf${hh3}.${atmfm}" "sigf${hh2}" + ln -sf "${COM_ATMOS_HISTORY}/${RUN}.${cycle}.sfcf${hh3}.${atmfm}" "flxf${hh2}" +done # define input BUFR table file. -ln -sf $PARMbufrsnd/bufr_gfs_${CLASS}.tbl fort.1 -ln -sf ${STNLIST:-$PARMbufrsnd/bufr_stalist.meteo.gfs} fort.8 -ln -sf $PARMbufrsnd/bufr_ij13km.txt fort.7 +ln -sf "${PARMbufrsnd}/bufr_gfs_${CLASS}.tbl" fort.1 +ln -sf "${STNLIST:-${PARMbufrsnd}/bufr_stalist.meteo.gfs}" fort.8 +ln -sf "${PARMbufrsnd}/bufr_ij13km.txt" fort.7 + +${APRUN_POSTSND} "${EXECbufrsnd}/${pgm}" < gfsparm > "out_gfs_bufr_${FEND}" +export err=$? + +if [ $err -ne 0 ]; then + echo "GFS postsnd job error, Please check files " + echo "${COM_ATMOS_HISTORY}/${RUN}.${cycle}.atmf${hh2}.${atmfm}" + echo "${COM_ATMOS_HISTORY}/${RUN}.${cycle}.sfcf${hh2}.${atmfm}" + err_chk +fi -${APRUN_POSTSND} $EXECbufrsnd/gfs_bufr < gfsparm > out_gfs_bufr_$FEND -export err=$?;err_chk +exit ${err} diff --git a/ush/gfs_bufr_netcdf.sh b/ush/gfs_bufr_netcdf.sh index 2237ce7793..b358c6b69a 100755 --- a/ush/gfs_bufr_netcdf.sh +++ b/ush/gfs_bufr_netcdf.sh @@ -1,4 +1,5 @@ -#!/bin/ksh +#! /usr/bin/env bash + # # UTILITY SCRIPT NAME : gfsbufr.sh # AUTHOR : Hua-Lu Pan @@ -16,10 +17,9 @@ # 2018-05-22 Guang Ping Lou: Making it work for both GFS and FV3GFS # 2018-05-30 Guang Ping Lou: Make sure all files are available. # 2019-10-10 Guang Ping Lou: Read in NetCDF files -echo "History: February 2003 - First implementation of this utility script" +# echo "History: February 2003 - First implementation of this utility script" # - -set -ax +source "$HOMEgfs/ush/preamble.sh" if test "$F00FLAG" = "YES" then @@ -31,14 +31,14 @@ fi hh=$FSTART while test $hh -le $FEND do - hh=` expr $hh + $FINT ` + hh=$( expr $hh + $FINT ) if test $hh -lt 10 then hh=0$hh fi done -export pgm=gfs_bufr +export pgm="gfs_bufr.x" #. prep_step if test "$MAKEBUFR" = "YES" @@ -48,10 +48,8 @@ else bufrflag=".false." fi -fformat="nc" - - SFCF="sfc" - CLASS="class1fv3" +SFCF="sfc" +CLASS="class1fv3" cat << EOF > gfsparm &NAMMET levs=$LEVS,makebufr=$bufrflag, @@ -65,7 +63,7 @@ EOF hh=$FSTART if test $hh -lt 100 then - hh1=`echo "${hh#"${hh%??}"}"` + hh1=$(echo "${hh#"${hh%??}"}") hh=$hh1 fi while test $hh -le $FEND @@ -82,10 +80,10 @@ do ic=0 while [ $ic -lt 1000 ] do - if [ ! -f $COMIN/${RUN}.${cycle}.logf${hh2}.${fformat} ] + if [ ! -f $COMIN/${RUN}.${cycle}.logf${hh2}.txt ] then sleep 10 - ic=`expr $ic + 1` + ic=$(expr $ic + 1) else break fi @@ -96,10 +94,10 @@ do fi done #------------------------------------------------------------------ - ln -sf $COMIN/${RUN}.${cycle}.atmf${hh2}.${fformat} sigf${hh} - ln -sf $COMIN/${RUN}.${cycle}.${SFCF}f${hh2}.${fformat} flxf${hh} + ln -sf $COMIN/${RUN}.${cycle}.atmf${hh2}.nc sigf${hh} + ln -sf $COMIN/${RUN}.${cycle}.${SFCF}f${hh2}.nc flxf${hh} - hh=` expr $hh + $FINT ` + hh=$( expr $hh + $FINT ) if test $hh -lt 10 then hh=0$hh @@ -111,5 +109,7 @@ ln -sf $PARMbufrsnd/bufr_gfs_${CLASS}.tbl fort.1 ln -sf ${STNLIST:-$PARMbufrsnd/bufr_stalist.meteo.gfs} fort.8 ln -sf $PARMbufrsnd/bufr_ij13km.txt fort.7 -${APRUN_POSTSND} $EXECbufrsnd/gfs_bufr < gfsparm > out_gfs_bufr_$FEND -export err=$?;err_chk +${APRUN_POSTSND} "${EXECbufrsnd}/${pgm}" < gfsparm > "out_gfs_bufr_${FEND}" +export err=$? + +exit ${err} diff --git a/ush/gfs_sndp.sh b/ush/gfs_sndp.sh index 5ac720dc4c..99c5c68fa3 100755 --- a/ush/gfs_sndp.sh +++ b/ush/gfs_sndp.sh @@ -1,4 +1,5 @@ -#!/bin/ksh +#! /usr/bin/env bash + ################################################################ # Script Name: gfs_sndp.sh # Script Description: Format GFS BUFR sounding files for AWIPS @@ -6,7 +7,7 @@ # 1) 2004-09-10 Steve Gilbert First Implementation ################################################################ -set -x +source "$HOMEgfs/ush/preamble.sh" # Create "collectives" consisting of groupings of the soundings # into files designated by geographical region. Each input @@ -29,16 +30,14 @@ cd $DATA/$m WMOHEAD=JUSX4$m fi - for stn in `cat $file_list` + for stn in $(cat $file_list) do - cp ${COMOUT}/bufr.${cycle}/bufr.$stn.$PDY$cyc $DATA/${m}/bufrin - export pgm=tocsbufr + cp "${COM_ATMOS_BUFR}/bufr.${stn}.${PDY}${cyc}" "${DATA}/${m}/bufrin" + export pgm=tocsbufr.x #. prep_step export FORT11=$DATA/${m}/bufrin export FORT51=./bufrout - # JY - Turn off the startmsg to reduce the update on jlogfile in this loop - # startmsg - $EXECbufrsnd/tocsbufr << EOF + ${EXECbufrsnd}/${pgm} << EOF &INPUT BULHED="$WMOHEAD",KWBX="$CCCC", NCEP2STD=.TRUE., @@ -46,12 +45,11 @@ cd $DATA/$m MAXFILESIZE=600000 / EOF - # JY export err=$?; err_chk - export err=$?; #err_chk - if [ $err -ne 0 ] - then - echo "ERROR in $pgm" + export err=$?; + if (( err != 0 )); then + echo "FATAL ERROR in ${pgm}" err_chk + exit 3 fi cat $DATA/${m}/bufrout >> $DATA/${m}/gfs_collective$m.fil @@ -59,18 +57,10 @@ EOF rm $DATA/${m}/bufrout done -# if test $SENDCOM = 'NO' - if test $SENDCOM = 'YES' - then - if [ $SENDDBN = 'YES' ] ; then - cp $DATA/${m}/gfs_collective$m.fil $pcom/gfs_collective$m.postsnd_$cyc - $DBNROOT/bin/dbn_alert NTC_LOW BUFR $job $pcom/gfs_collective$m.postsnd_$cyc - fi - cp $DATA/${m}/gfs_collective$m.fil ${COMOUT}/bufr.${cycle}/. + if [[ ${SENDDBN} == 'YES' ]] ; then + cp "${DATA}/${m}/gfs_collective${m}.fil" "${COM_ATMOS_WMO}/gfs_collective${m}.postsnd_${cyc}" + "${DBNROOT}/bin/dbn_alert" NTC_LOW BUFR "${job}" \ + "${COM_ATMOS_WMO}/gfs_collective${m}.postsnd_${cyc}" fi + cp "${DATA}/${m}/gfs_collective${m}.fil" "${COM_ATMOS_BUFR}/." -## let "m=m+1" - -## done - -#exit diff --git a/ush/gfs_truncate_enkf.sh b/ush/gfs_truncate_enkf.sh index 8d9e2b959c..0a7d6fc0dd 100755 --- a/ush/gfs_truncate_enkf.sh +++ b/ush/gfs_truncate_enkf.sh @@ -1,6 +1,6 @@ -#!/bin/ksh +#! /usr/bin/env bash -set -x +source "$HOMEgfs/ush/preamble.sh" member=$1 export SIGINP=$2 @@ -14,7 +14,7 @@ mkdir -p $DATATMP cd $DATATMP export LEVS=${LEVS_LORES:-64} -export FIXam=${FIXam:-$HOMEgfs/fix/fix_am} +export FIXam=${FIXam:-$HOMEgfs/fix/am} export CHGRESSH=${CHGRESSH:-${USHgfs}/global_chgres.sh} export CHGRESEXEC=${CHGRESEXEC-${EXECgfs}/global_chgres} @@ -45,12 +45,11 @@ export APRUNC=${APRUNC:-""} export VERBOSE=YES echo "execute $CHGRESSH for $member" -eval "$CHGRESSH" +$CHGRESSH rc=$? export ERR=$rc export err=$ERR -echo EXITING $0 with return code $err exit $err diff --git a/ush/global_extrkr.sh b/ush/global_extrkr.sh deleted file mode 100755 index 12bb61af80..0000000000 --- a/ush/global_extrkr.sh +++ /dev/null @@ -1,1703 +0,0 @@ -#!/bin/ksh - -#module load ics -export PS4='+t+$SECONDS extrkr.sh:$LINENO -- ' - -userid=$LOGNAME - -set +x -############################################################################## -cat<${DATA}/tmpsynvit.${atcfout}.${PDY}${CYL} - grep "${current_str}" ${synvitdir}/${synvitfile} \ - >>${DATA}/tmpsynvit.${atcfout}.${PDY}${CYL} - grep "${future_str}" ${synvitfuture_dir}/${synvitfuture_file} \ - >>${DATA}/tmpsynvit.${atcfout}.${PDY}${CYL} -else - set +x - echo " " - echo " There is no (synthetic) TC vitals file for ${CYL}z in ${synvitdir}," - echo " nor is there a TC vitals file for ${old_hh}z in ${synvitold_dir}." - echo " nor is there a TC vitals file for ${future_hh}z in ${synvitfuture_dir}," - echo " Checking the raw TC Vitals file ....." - echo " " - set -x -fi - -# Take the vitals from Steve Lord's /com/gfs/prod tcvitals file, -# and cat them with the NHC-only vitals from the raw, original -# /com/arch/prod/synda_tcvitals file. Do this because the nwprod -# tcvitals file is the original tcvitals file, and Steve runs a -# program that ignores the vitals for a storm that's over land or -# even just too close to land, and for tracking purposes for the -# US regional models, we need these locations. Only include these -# "inland" storm vitals for NHC (we're not going to track inland -# storms that are outside of NHC's domain of responsibility -- we -# don't need that info). -# UPDATE 5/12/98 MARCHOK: awk logic is added to screen NHC -# vitals such as "89E TEST", since TPC -# does not want tracks for such storms. - -grep "${old_str}" ${archsyndir}/syndat_tcvitals.${CENT}${syy} | \ - grep -v TEST | awk 'substr($0,6,1) !~ /8/ {print $0}' \ - >${DATA}/tmprawvit.${atcfout}.${PDY}${CYL} -grep "${current_str}" ${archsyndir}/syndat_tcvitals.${CENT}${syy} | \ - grep -v TEST | awk 'substr($0,6,1) !~ /8/ {print $0}' \ - >>${DATA}/tmprawvit.${atcfout}.${PDY}${CYL} -grep "${future_str}" ${archsyndir}/syndat_tcvitals.${CENT}${syy} | \ - grep -v TEST | awk 'substr($0,6,1) !~ /8/ {print $0}' \ - >>${DATA}/tmprawvit.${atcfout}.${PDY}${CYL} - - -# IMPORTANT: When "cat-ing" these files, make sure that the vitals -# files from the "raw" TC vitals files are first in order and Steve's -# TC vitals files second. This is because Steve's vitals file has -# been error-checked, so if we have a duplicate tc vitals record in -# these 2 files (very likely), program supvit.x below will -# only take the last vitals record listed for a particular storm in -# the vitals file (all previous duplicates are ignored, and Steve's -# error-checked vitals records are kept). - -cat ${DATA}/tmprawvit.${atcfout}.${PDY}${CYL} ${DATA}/tmpsynvit.${atcfout}.${PDY}${CYL} \ - >${DATA}/vitals.${atcfout}.${PDY}${CYL} - -#--------------------------------------------------------------# -# Now run a fortran program that will read all the TC vitals -# records for the current dtg and the dtg from 6h ago, and -# sort out any duplicates. If the program finds a storm that -# was included in the vitals file 6h ago but not for the current -# dtg, this program updates the 6h-old first guess position -# and puts these updated records as well as the records from -# the current dtg into a temporary vitals file. It is this -# temporary vitals file that is then used as the input for the -# tracking program. -#--------------------------------------------------------------# - -oldymdh=` ${NDATE:?} -${vit_incr} ${PDY}${CYL}` -oldyy=${oldymdh:2:2} -oldmm=${oldymdh:4:2} -olddd=${oldymdh:6:2} -oldhh=${oldymdh:8:2} -oldymd=${oldyy}${oldmm}${olddd} - -futureymdh=` ${NDATE:?} 6 ${PDY}${CYL}` -futureyy=${futureymdh:2:2} -futuremm=${futureymdh:4:2} -futuredd=${futureymdh:6:2} -futurehh=${futureymdh:8:2} -futureymd=${futureyy}${futuremm}${futuredd} - -cat<${DATA}/suv_input.${atcfout}.${PDY}${CYL} -&datenowin dnow%yy=${syy}, dnow%mm=${smm}, - dnow%dd=${sdd}, dnow%hh=${CYL}/ -&dateoldin dold%yy=${oldyy}, dold%mm=${oldmm}, - dold%dd=${olddd}, dold%hh=${oldhh}/ -&datefuturein dfuture%yy=${futureyy}, dfuture%mm=${futuremm}, - dfuture%dd=${futuredd}, dfuture%hh=${futurehh}/ -&hourinfo vit_hr_incr=${vit_incr}/ -EOF - - -numvitrecs=`cat ${DATA}/vitals.${atcfout}.${PDY}${CYL} | wc -l` -if [ ${numvitrecs} -eq 0 ] -then - - if [ ${trkrtype} = 'tracker' ] - then - set +x - echo " " - echo "!!! NOTE -- There are no vitals records for this time period." - echo "!!! File ${DATA}/vitals.${atcfout}.${PDY}${CYL} is empty." - echo "!!! It could just be that there are no storms for the current" - echo "!!! time. Please check the dates and submit this job again...." - echo " " - set -x - exit 1 - fi - -fi - -# For tcgen cases, filter to use only vitals from the ocean -# basin of interest.... - -if [ ${trkrtype} = 'tcgen' ] - then - - if [ ${numvitrecs} -gt 0 ] - then - - fullvitfile=${DATA}/vitals.${atcfout}.${PDY}${CYL} - cp $fullvitfile ${DATA}/vitals.all_basins.${atcfout}.${PDY}${CYL} - basin=` echo $regtype | cut -c1-2` - - if [ ${basin} = 'al' ]; then - cat $fullvitfile | awk '{if (substr($0,8,1) == "L") print $0}' \ - >${DATA}/vitals.tcgen_al_only.${atcfout}.${PDY}${CYL} - cp ${DATA}/vitals.tcgen_al_only.${atcfout}.${PDY}${CYL} \ - ${DATA}/vitals.${atcfout}.${PDY}${CYL} - fi - if [ ${basin} = 'ep' ]; then - cat $fullvitfile | awk '{if (substr($0,8,1) == "E") print $0}' \ - >${DATA}/vitals.tcgen_ep_only.${atcfout}.${PDY}${CYL} - cp ${DATA}/vitals.tcgen_ep_only.${atcfout}.${PDY}${CYL} \ - ${DATA}/vitals.${atcfout}.${PDY}${CYL} - fi - if [ ${basin} = 'wp' ]; then - cat $fullvitfile | awk '{if (substr($0,8,1) == "W") print $0}' \ - >${DATA}/vitals.tcgen_wp_only.${atcfout}.${PDY}${CYL} - cp ${DATA}/vitals.tcgen_wp_only.${atcfout}.${PDY}${CYL} \ - ${DATA}/vitals.${atcfout}.${PDY}${CYL} - fi - - cat ${DATA}/vitals.${atcfout}.${PDY}${CYL} - - fi - -fi - -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Before running the program to read, sort and update the vitals, -# first run the vitals through some awk logic, the purpose of -# which is to convert all the 2-digit years into 4-digit years. -# We need this logic to ensure that all the vitals going -# into supvit.f have uniform, 4-digit years in their records. -# -# 1/8/2000: sed code added by Tim Marchok due to the fact that -# some of the vitals were getting past the syndata/qctropcy -# error-checking with a colon in them; the colon appeared -# in the character immediately to the left of the date, which -# was messing up the "(length($4) == 8)" statement logic. -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -sed -e "s/\:/ /g" ${DATA}/vitals.${atcfout}.${PDY}${CYL} > ${DATA}/tempvit -mv ${DATA}/tempvit ${DATA}/vitals.${atcfout}.${PDY}${CYL} - -awk ' -{ - yycheck = substr($0,20,2) - if ((yycheck == 20 || yycheck == 19) && (length($4) == 8)) { - printf ("%s\n",$0) - } - else { - if (yycheck >= 0 && yycheck <= 50) { - printf ("%s20%s\n",substr($0,1,19),substr($0,20)) - } - else { - printf ("%s19%s\n",substr($0,1,19),substr($0,20)) - } - } -} ' ${DATA}/vitals.${atcfout}.${PDY}${CYL} >${DATA}/vitals.${atcfout}.${PDY}${CYL}.y4 - -mv ${DATA}/vitals.${atcfout}.${PDY}${CYL}.y4 ${DATA}/vitals.${atcfout}.${PDY}${CYL} - -if [ ${numvitrecs} -gt 0 ] -then - - export pgm=supvit - . $prep_step - - ln -s -f ${DATA}/vitals.${atcfout}.${PDY}${CYL} fort.31 - ln -s -f ${DATA}/vitals.upd.${atcfout}.${PDY}${CYL} fort.51 - - msg="$pgm start for $atcfout at ${CYL}z" - $postmsg "$jlogfile" "$msg" - - ${exectrkdir}/supvit <${DATA}/suv_input.${atcfout}.${PDY}${CYL} - suvrcc=$? - - if [ ${suvrcc} -eq 0 ] - then - msg="$pgm end for $atcfout at ${CYL}z completed normally" - $postmsg "$jlogfile" "$msg" - else - set +x - echo " " - echo "!!! ERROR -- An error occurred while running supvit.x, " - echo "!!! which is the program that updates the TC Vitals file." - echo "!!! Return code from supvit.x = ${suvrcc}" - echo "!!! model= ${atcfout}, forecast initial time = ${PDY}${CYL}" - echo "!!! Exiting...." - echo " " - set -x - err_exit " FAILED ${jobid} - ERROR RUNNING SUPVIT IN TRACKER SCRIPT- ABNORMAL EXIT" - fi - -else - - touch ${DATA}/vitals.upd.${atcfout}.${PDY}${CYL} - -fi - -#----------------------------------------------------------------- -# In this section, check to see if the user requested the use of -# operational TC vitals records for the initial time only. This -# option might be used for a retrospective medium range forecast -# in which the user wants to initialize with the storms that are -# currently there, but then let the model do its own thing for -# the next 10 or 14 days.... - -#------------------------------------------------------------------# -# Now select all storms to be processed, that is, process every -# storm that's listed in the updated vitals file for the current -# forecast hour. If there are no storms for the current time, -# then exit. -#------------------------------------------------------------------# - -numvitrecs=`cat ${DATA}/vitals.upd.${atcfout}.${PDY}${CYL} | wc -l` -if [ ${numvitrecs} -eq 0 ] -then - if [ ${trkrtype} = 'tracker' ] - then - set +x - echo " " - echo "!!! NOTE -- There are no vitals records for this time period " - echo "!!! in the UPDATED vitals file." - echo "!!! It could just be that there are no storms for the current" - echo "!!! time. Please check the dates and submit this job again...." - echo " " - set -x - exit 1 - fi -fi - -set +x -echo " " -echo " *--------------------------------*" -echo " | STORM SELECTION |" -echo " *--------------------------------*" -echo " " -set -x - -ict=1 -while [ $ict -le 15 ] -do - stormflag[${ict}]=3 - let ict=ict+1 -done - -dtg_current="${symd} ${CYL}00" -stormmax=` grep "${dtg_current}" ${DATA}/vitals.upd.${atcfout}.${PDY}${CYL} | wc -l` - -if [ ${stormmax} -gt 15 ] -then - stormmax=15 -fi - -sct=1 -while [ ${sct} -le ${stormmax} ] -do - stormflag[${sct}]=1 - let sct=sct+1 -done - - -#---------------------------------------------------------------# -# -# -------- "Genesis" Vitals processing -------- -# -# May 2006: This entire genesis tracking system is being -# upgraded to more comprehensively track and categorize storms. -# One thing that has been missing from the tracking system is -# the ability to keep track of storms from one analysis cycle -# to the next. That is, the current system has been very -# effective at tracking systems within a forecast, but we have -# no methods in place for keeping track of storms across -# difference initial times. For example, if we are running -# the tracker on today's 00z GFS analysis, we will get a -# position for various storms at the analysis time. But then -# if we go ahead and run again at 06z, we have no way of -# telling the tracker that we know about the 00z position of -# this storm. We now address that problem by creating -# "genesis" vitals, that is, when a storm is found at an -# analysis time, we not only produce "atcfunix" output to -# detail the track & intensity of a found storm, but we also -# produce a vitals record that will be used for the next -# run of the tracker script. These "genesis vitals" records -# will be of the format: -# -# YYYYMMDDHH_AAAH_LLLLX_TYP -# -# Where: -# -# YYYYMMDDHH = Date the storm was FIRST identified -# by the tracker. -# AAA = Abs(Latitude) * 10; integer value -# H = 'N' for norther hem, 'S' for southern hem -# LLLL = Abs(Longitude) * 10; integer value -# X = 'E' for eastern hem, 'W' for western hem -# TYP = Tropical cyclone storm id if this is a -# tropical cyclone (e.g., "12L", or "09W", etc). -# If this is one that the tracker instead "Found -# On the Fly (FOF)", we simply put those three -# "FOF" characters in there. - -d6ago_ymdh=` ${NDATE:?} -6 ${PDY}${CYL}` -d6ago_4ymd=` echo ${d6ago_ymdh} | cut -c1-8` -d6ago_ymd=` echo ${d6ago_ymdh} | cut -c3-8` -d6ago_hh=` echo ${d6ago_ymdh} | cut -c9-10` -d6ago_str="${d6ago_ymd} ${d6ago_hh}00" - -d6ahead_ymdh=` ${NDATE:?} 6 ${PDY}${CYL}` -d6ahead_4ymd=` echo ${d6ahead_ymdh} | cut -c1-8` -d6ahead_ymd=` echo ${d6ahead_ymdh} | cut -c3-8` -d6ahead_hh=` echo ${d6ahead_ymdh} | cut -c9-10` -d6ahead_str="${d6ahead_ymd} ${d6ahead_hh}00" - -syyyym6=` echo ${d6ago_ymdh} | cut -c1-4` -smmm6=` echo ${d6ago_ymdh} | cut -c5-6` -sddm6=` echo ${d6ago_ymdh} | cut -c7-8` -shhm6=` echo ${d6ago_ymdh} | cut -c9-10` - -syyyyp6=` echo ${d6ahead_ymdh} | cut -c1-4` -smmp6=` echo ${d6ahead_ymdh} | cut -c5-6` -sddp6=` echo ${d6ahead_ymdh} | cut -c7-8` -shhp6=` echo ${d6ahead_ymdh} | cut -c9-10` - -set +x -echo " " -echo " d6ago_str= --->${d6ago_str}<---" -echo " current_str= --->${current_str}<---" -echo " d6ahead_str= --->${d6ahead_str}<---" -echo " " -echo " for the times 6h ago, current and 6h ahead:" -echo " " -echo " " -set -x - - touch ${DATA}/genvitals.upd.${cmodel}.${atcfout}.${PDY}${CYL} - - -#-----------------------------------------------------------------# -# -# ------ CUT APART INPUT GRIB FILES ------- -# -# For the selected model, cut apart the GRIB input files in order -# to pull out only the variables that we need for the tracker. -# Put these selected variables from all forecast hours into 1 big -# GRIB file that we'll use as input for the tracker. -# -#-----------------------------------------------------------------# - -set +x -echo " " -echo " -----------------------------------------" -echo " NOW CUTTING APART INPUT GRIB FILES TO " -echo " CREATE 1 BIG GRIB INPUT FILE " -echo " -----------------------------------------" -echo " " -set -x - -#gix=$NWPROD/util/exec/grbindex -#g2ix=$NWPROD/util/exec/grb2index -#cgb=$NWPROD/util/exec/copygb -#cgb2=$NWPROD/util/exec/copygb2 - -regflag=`grep NHC ${DATA}/vitals.upd.${atcfout}.${PDY}${CYL} | wc -l` - -# ---------------------------------------------------------------------- -find_gfile() { - # This subroutine finds an input file from a list of possible - # input filenames, and calls err_exit if no file is found. The - # first file found is returned. - - # Calling conventions: - # find_gfile GFS 30 /path/to/file1.master.pgrbq30.grib2 /path/to/file2.master.pgrbq030.grib2 ... - nicename="$1" - nicehour="$2" - shift 2 - gfile=none - echo "Searching for input $nicename data for forecast hour $nicehour" - set -x - now=$( date +%s ) - later=$(( now + wait_max_time )) - # Note: the loop has only one iteration if --wait-max-time is - # unspecified. That is because later=now - while [[ ! ( "$now" -gt "$later" ) ]] ; do - for gfile in "$@" ; do - if [[ ! -e "$gfile" ]] ; then - set +x - echo "$gfile: does not exist" - set -x - gfile=none - elif [[ ! -s "$gfile" ]] ; then - set +x - echo "$gfile: exists, but is empty" - set -x - gfile=none - else - set +x - echo "$gfile: exists, is non-empty, so I will use this file" - set -x - return 0 - fi - done - now=$( date +%s ) - if [[ "$gfile" == none ]] ; then - if [[ ! ( "$now" -lt "$later" ) ]] ; then - set +x - echo " " - echo " " - echo " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - echo " !!! $nicename missing for hour $nicehour" - echo " !!! Check for the existence of these file:" - for gfile in "$@" ; do - echo " !!! $nicename File: $gfile" - done - echo " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - echo " " - set -x - err_exit "ERROR: mandatory input GFS file for hour $nicehour is missing or empty. Aborting. Checked for these files: $*" - continue - else - set +x - echo " " - echo " !!! Mandatory input $nicename missing for hour $nicehour" - echo " !!! Will retry after $sleep_time second sleep." - echo " !!! Checked these files:" - for gfile in "$@" ; do - echo " !!! $nicename File: $gfile" - done - echo " " - set -x - sleep $sleep_time - fi - fi - done -} - -# -------------------------------------------------- -# Process GFS or GDAS data -# -------------------------------------------------- -if [[ ${model} -eq 1 || $model == 8 ]] ; then - - export nest_type="fixed" - export trkrebd=360.0 - export trkrwbd=0.0 - export trkrnbd=85.0 - export trkrsbd=-85.0 - rundescr="xxxx" - atcfdescr="xxxx" - - - if [ $loopnum -eq 1 ] - then - - if [ -s ${DATA}/gfsgribfile.${PDY}${CYL} ] - then - rm ${DATA}/gfsgribfile.${PDY}${CYL} - fi - - rm ${DATA}/master.gfsgribfile.${PDY}${CYL}.f* - rm ${DATA}/gfsgribfile.${PDY}${CYL}.f* - >${DATA}/gfsgribfile.${PDY}${CYL} - - set +x - echo " " - echo "Time before gfs wgrib loop is `date`" - echo " " - set -x - - if [[ "$model" -eq 8 ]] ; then - name=gdas - name1=gdas - nicename=GDAS - else # not model 8, so assume GFS - name=gfs - name1=gfs - nicename=GFS - fi - - for fhour in ${fcsthrs} ; do - fhour=$( echo "$fhour" | bc ) - - if [ ${fhour} -eq $bad_hour ] - then - continue - fi - - fhour00=$( printf %02d "$fhour" ) - fhour000=$( printf %03d "$fhour" ) - fhour0000=$( printf %03d "$fhour" ) - - if [[ "$gribver" == 1 ]] ; then - - find_gfile "$nicename" "$fhour" \ - ${gfsdir}/$name1.t${CYL}z.${flag_pgb}$fhour00 \ - ${gfsdir}/$name1.t${CYL}z.${flag_pgb}$fhour000 \ - ${gfsdir}/pgb${flag_pgb}$fhour00.$name.${symdh} \ - ${gfsdir}/pgrb${flag_pgb}$fhour00.$name.${symdh} - ${WGRIB:?} -s $gfile >gfs.ix - - for parm in ${wgrib_parmlist} - do - case ${parm} in - "SurfaceU") grep "UGRD:10 m " gfs.ix ;; - "SurfaceV") grep "VGRD:10 m " gfs.ix ;; - *) grep "${parm}" gfs.ix ;; - esac - done | ${WGRIB:?} -s $gfile -i -grib -append \ - -o ${DATA}/master.gfsgribfile.${PDY}${CYL}.f${fhour000} - - gfs_master_file=${DATA}/master.gfsgribfile.${PDY}${CYL}.f${fhour000} - gfs_converted_file=${DATA}/gfsgribfile.${PDY}${CYL}.f${fhour000} - gfs_cat_file=${DATA}/gfsgribfile.${PDY}${CYL} -# $cgb -g4 -i2 -x ${gfs_master_file} ${gfs_converted_file} -# cat ${gfs_converted_file} >>${gfs_cat_file} - cat ${gfs_master_file} >>${gfs_cat_file} - - else # gribver is not 1, so assume GRIB2 - - find_gfile "$nicename" "$fhour" \ - ${gfsdir}/$name1.t${CYL}z.pgrb2.0p25.f${fhour000} \ - ${gfsdir}/$name1.t${CYL}z.pgrb2.0p25.f${fhour00} \ - ${gfsdir}/pgb${flag_pgb}$fhour00.$name.${symdh}.grib2 \ - ${gfsdir}/pgrb${flag_pgb}${fhour000}.$name.${symdh}.grib2 - ${WGRIB2:?} -s $gfile >gfs.ix - - for parm in ${wgrib_parmlist} - do - case ${parm} in - "SurfaceU") grep "UGRD:10 m " gfs.ix ;; - "SurfaceV") grep "VGRD:10 m " gfs.ix ;; - *) grep "${parm}" gfs.ix ;; - esac - done | ${WGRIB2:?} -i $gfile -append -grib \ - ${DATA}/master.gfsgribfile.${PDY}${CYL}.f${fhour000} - - gfs_master_file=${DATA}/master.gfsgribfile.${PDY}${CYL}.f${fhour000} - gfs_converted_file=${DATA}/gfsgribfile.${PDY}${CYL}.f${fhour000} - gfs_cat_file=${DATA}/gfsgribfile.${PDY}${CYL} - - ${GRB2INDEX:?} ${gfs_master_file} ${gfs_master_file}.ix - - g1=${gfs_master_file} - x1=${gfs_master_file}.ix - -# grid4="0 6 0 0 0 0 0 0 720 361 0 0 90000000 0 48 -90000000 359500000 500000 500000 0" -# $cgb2 -g "${grid4}" ${g1} ${x1} ${gfs_converted_file} -# cat ${gfs_converted_file} >>${gfs_cat_file} - - cat ${gfs_master_file} >>${gfs_cat_file} - - fi - - done - - if [ ${gribver} -eq 1 ]; then - ${GRBINDEX:?} ${DATA}/gfsgribfile.${PDY}${CYL} ${DATA}/gfsixfile.${PDY}${CYL} - else - ${GRB2INDEX:?} ${DATA}/gfsgribfile.${PDY}${CYL} ${DATA}/gfsixfile.${PDY}${CYL} - fi - -# -------------------------------------------- - - if [[ "$PhaseFlag" == y ]] ; then - - catfile=${DATA}/gfs.${PDY}${CYL}.catfile - >${catfile} - - for fhour in ${fcsthrs} - do - - - fhour=$( echo "$fhour" | bc ) - - if [ ${fhour} -eq $bad_hour ] - then - continue - fi - - fhour00=$( printf %02d "$fhour" ) - fhour000=$( printf %03d "$fhour" ) - fhour0000=$( printf %03d "$fhour" ) - - set +x - echo " " - echo "Date in interpolation for model= $cmodel and fhour= $fhour000 before = `date`" - echo " " - set -x - - gfile=${DATA}/gfsgribfile.${PDY}${CYL} - ifile=${DATA}/gfsixfile.${PDY}${CYL} - - if [ ${gribver} -eq 1 ]; then - ${GRBINDEX:?} $gfile $ifile - else - ${GRB2INDEX:?} $gfile $ifile - fi - - gparm=7 - namelist=${DATA}/vint_input.${PDY}${CYL}.z - echo "&timein ifcsthour=${fhour000}," >${namelist} - echo " iparm=${gparm}," >>${namelist} - echo " gribver=${gribver}," >>${namelist} - echo " g2_jpdtn=${g2_jpdtn}/" >>${namelist} - - ln -s -f ${gfile} fort.11 - ln -s -f ${FIXRELO}/gfs_hgt_levs.txt fort.16 - ln -s -f ${ifile} fort.31 - ln -s -f ${DATA}/${cmodel}.${PDY}${CYL}.z.f${fhour000} fort.51 - - ${exectrkdir}/vint.x <${namelist} - rcc1=$? - - - gparm=11 - namelist=${DATA}/vint_input.${PDY}${CYL}.t - echo "&timein ifcsthour=${fhour000}," >${namelist} - echo " iparm=${gparm}," >>${namelist} - echo " gribver=${gribver}," >>${namelist} - echo " g2_jpdtn=${g2_jpdtn}/" >>${namelist} - - ln -s -f ${gfile} fort.11 - ln -s -f ${FIXRELO}/gfs_tmp_levs.txt fort.16 - ln -s -f ${ifile} fort.31 - ln -s -f ${DATA}/${cmodel}.${PDY}${CYL}.t.f${fhour000} fort.51 - - ${exectrkdir}/vint.x <${namelist} - rcc2=$? - - namelist=${DATA}/tave_input.${PDY}${CYL} - echo "&timein ifcsthour=${fhour000}," >${namelist} - echo " iparm=${gparm}," >>${namelist} - echo " gribver=${gribver}," >>${namelist} - echo " g2_jpdtn=${g2_jpdtn}/" >>${namelist} - - ffile=${DATA}/${cmodel}.${PDY}${CYL}.t.f${fhour000} - ifile=${DATA}/${cmodel}.${PDY}${CYL}.t.f${fhour000}.i - - if [ ${gribver} -eq 1 ]; then - ${GRBINDEX:?} ${ffile} ${ifile} - else - ${GRB2INDEX:?} ${ffile} ${ifile} - fi - - ln -s -f ${ffile} fort.11 - ln -s -f ${ifile} fort.31 - ln -s -f ${DATA}/${cmodel}.tave.${PDY}${CYL}.f${fhour000} fort.51 - ln -s -f ${DATA}/${cmodel}.tave92.${PDY}${CYL}.f${fhour000} fort.92 - - ${exectrkdir}/tave.x <${namelist} - rcc3=$? - - if [ $rcc1 -eq 0 -a $rcc2 -eq 0 -a $rcc3 -eq 0 ]; then - echo " " - else - mailfile=${rundir}/errmail.${cmodel}.${PDY}${CYL} - echo "CPS/WC interp failure for $cmodel ${PDY}${CYL}" >${mailfile} - mail -s "GFS Failure (CPS/WC int) $cmodel ${PDY}${CYL}" ${userid} <${mailfile} - exit 8 - fi - - tavefile=${DATA}/${cmodel}.tave.${PDY}${CYL}.f${fhour000} - zfile=${DATA}/${cmodel}.${PDY}${CYL}.z.f${fhour000} - cat ${zfile} ${tavefile} >>${catfile} -## rm $tavefile $zfile - - set +x - echo " " - echo "Date in interpolation for cmodel= $cmodel and fhour= $fhour000 after = `date`" - echo " " - set -x - - done - fi # end of "If PhaseFlag is on" - fi # end of "If loopnum is 1" - - gfile=${DATA}/gfsgribfile.${PDY}${CYL} - ifile=${DATA}/gfsixfile.${PDY}${CYL} - - if [[ "$PhaseFlag" == y ]] ; then - cat ${catfile} >>${gfile} - if [ ${gribver} -eq 1 ]; then - ${GRBINDEX:?} ${gfile} ${ifile} - else - ${GRB2INDEX:?} ${gfile} ${ifile} - fi - fi - - # File names for input to tracker: - gribfile=${DATA}/gfsgribfile.${PDY}${CYL} - ixfile=${DATA}/gfsixfile.${PDY}${CYL} -fi - -$postmsg "$jlogfile" "SUCCESS: have all inputs needed to run tracker. Will now run the tracker." - -#------------------------------------------------------------------------# -# Now run the tracker # -#------------------------------------------------------------------------# - -ist=1 -while [ $ist -le 15 ] -do - if [ ${stormflag[${ist}]} -ne 1 ] - then - set +x; echo "Storm number $ist NOT selected for processing"; set -x - else - set +x; echo "Storm number $ist IS selected for processing...."; set -x - fi - let ist=ist+1 -done - -namelist=${DATA}/input.${atcfout}.${PDY}${CYL} -ATCFNAME=` echo "${atcfname}" | tr '[a-z]' '[A-Z]'` - -if [ ${cmodel} = 'sref' ]; then - export atcfymdh=` ${NDATE:?} -3 ${scc}${syy}${smm}${sdd}${shh}` -else - export atcfymdh=${scc}${syy}${smm}${sdd}${shh} -fi - -contour_interval=100.0 -write_vit=n -want_oci=.TRUE. - -cat < ${namelist} -&datein inp%bcc=${scc},inp%byy=${syy},inp%bmm=${smm}, - inp%bdd=${sdd},inp%bhh=${shh},inp%model=${model}, - inp%modtyp='${modtyp}', - inp%lt_units='${lead_time_units}', - inp%file_seq='${file_sequence}', - inp%nesttyp='${nest_type}'/ -&atcfinfo atcfnum=${atcfnum},atcfname='${ATCFNAME}', - atcfymdh=${atcfymdh},atcffreq=${atcffreq}/ -&trackerinfo trkrinfo%westbd=${trkrwbd}, - trkrinfo%eastbd=${trkrebd}, - trkrinfo%northbd=${trkrnbd}, - trkrinfo%southbd=${trkrsbd}, - trkrinfo%type='${trkrtype}', - trkrinfo%mslpthresh=${mslpthresh}, - trkrinfo%v850thresh=${v850thresh}, - trkrinfo%gridtype='${modtyp}', - trkrinfo%contint=${contour_interval}, - trkrinfo%want_oci=${want_oci}, - trkrinfo%out_vit='${write_vit}', - trkrinfo%gribver=${gribver}, - trkrinfo%g2_jpdtn=${g2_jpdtn}/ -&phaseinfo phaseflag='${PHASEFLAG}', - phasescheme='${PHASE_SCHEME}', - wcore_depth=${WCORE_DEPTH}/ -&structinfo structflag='${STRUCTFLAG}', - ikeflag='${IKEFLAG}'/ -&fnameinfo gmodname='${atcfname}', - rundescr='${rundescr}', - atcfdescr='${atcfdescr}'/ -&verbose verb=3/ -&waitinfo use_waitfor='n', - wait_min_age=10, - wait_min_size=100, - wait_max_wait=1800, - wait_sleeptime=5, - per_fcst_command=''/ -EOF - -export pgm=gettrk -. $prep_step - -ln -s -f ${gribfile} fort.11 -ln -s -f ${DATA}/vitals.upd.${atcfout}.${PDY}${shh} fort.12 -ln -s -f ${DATA}/genvitals.upd.${cmodel}.${atcfout}.${PDY}${CYL} fort.14 -ihour=1 -for fhour in ${fcsthrs} ; do - fhour=$( echo "$fhour" | bc ) # strip leading zeros - printf "%4d %5d\n" $ihour $(( fhour * 60 )) - let ihour=ihour+1 -done > leadtimes.txt -ln -s -f leadtimes.txt fort.15 -#ln -s -f ${FIXRELO}/${cmodel}.tracker_leadtimes fort.15 -ln -s -f ${ixfile} fort.31 - -if [[ -z "$atcfout" ]] ; then - err_exit 'ERROR: exgfs_trkr script forgot to set $atcfout variable' -fi - -track_file_path=nowhere - -if [ ${trkrtype} = 'tracker' ]; then - if [ ${atcfout} = 'gfdt' -o ${atcfout} = 'gfdl' -o \ - ${atcfout} = 'hwrf' -o ${atcfout} = 'hwft' ]; then - ln -s -f ${DATA}/trak.${atcfout}.all.${stormenv}.${PDY}${CYL} fort.61 - ln -s -f ${DATA}/trak.${atcfout}.atcf.${stormenv}.${PDY}${CYL} fort.62 - ln -s -f ${DATA}/trak.${atcfout}.radii.${stormenv}.${PDY}${CYL} fort.63 - ln -s -f ${DATA}/trak.${atcfout}.atcf_gen.${stormenv}.${PDY}${CYL} fort.66 - ln -s -f ${DATA}/trak.${atcfout}.atcf_sink.${stormenv}.${PDY}${CYL} fort.68 - ln -s -f ${DATA}/trak.${atcfout}.atcf_hfip.${stormenv}.${PDY}${CYL} fort.69 - track_file_path=${DATA}/trak.${atcfout}.atcfunix.${stormenv}.${PDY}${CYL} - else - ln -s -f ${DATA}/trak.${atcfout}.all.${PDY}${CYL} fort.61 - ln -s -f ${DATA}/trak.${atcfout}.atcf.${PDY}${CYL} fort.62 - ln -s -f ${DATA}/trak.${atcfout}.radii.${PDY}${CYL} fort.63 - ln -s -f ${DATA}/trak.${atcfout}.atcf_gen.${PDY}${CYL} fort.66 - ln -s -f ${DATA}/trak.${atcfout}.atcf_sink.${PDY}${CYL} fort.68 - ln -s -f ${DATA}/trak.${atcfout}.atcf_hfip.${PDY}${CYL} fort.69 - track_file_path=${DATA}/trak.${atcfout}.atcfunix.${PDY}${CYL} - fi -else - ln -s -f ${DATA}/trak.${atcfout}.all.${regtype}.${PDY}${CYL} fort.61 - ln -s -f ${DATA}/trak.${atcfout}.atcf.${regtype}.${PDY}${CYL} fort.62 - ln -s -f ${DATA}/trak.${atcfout}.radii.${regtype}.${PDY}${CYL} fort.63 - ln -s -f ${DATA}/trak.${atcfout}.atcf_gen.${regtype}.${PDY}${CYL} fort.66 - ln -s -f ${DATA}/trak.${atcfout}.atcf_sink.${regtype}.${PDY}${CYL} fort.68 - ln -s -f ${DATA}/trak.${atcfout}.atcf_hfip.${regtype}.${PDY}${CYL} fort.69 - track_file_path=${DATA}/trak.${atcfout}.atcfunix.${regtype}.${PDY}${CYL} -fi - -if [[ "$track_file_path" == nowhere ]] ; then - err_exit 'ERROR: exgfs_trkr script forgot to set $track_file_path variable' -fi - -ln -s -f $track_file_path fort.64 - -if [ ${atcfname} = 'aear' ] -then - ln -s -f ${DATA}/trak.${atcfout}.initvitl.${PDY}${CYL} fort.65 -fi - -if [ ${write_vit} = 'y' ] -then - ln -s -f ${DATA}/output_genvitals.${atcfout}.${PDY}${shh} fort.67 -fi - -if [ ${PHASEFLAG} = 'y' ]; then - if [ ${atcfout} = 'gfdt' -o ${atcfout} = 'gfdl' -o \ - ${atcfout} = 'hwrf' -o ${atcfout} = 'hwft' ]; then - ln -s -f ${DATA}/trak.${atcfout}.cps_parms.${stormenv}.${PDY}${CYL} fort.71 - else - ln -s -f ${DATA}/trak.${atcfout}.cps_parms.${PDY}${CYL} fort.71 - fi -fi - -if [ ${STRUCTFLAG} = 'y' ]; then - if [ ${atcfout} = 'gfdt' -o ${atcfout} = 'gfdl' -o \ - ${atcfout} = 'hwrf' -o ${atcfout} = 'hwft' ]; then - ln -s -f ${DATA}/trak.${atcfout}.structure.${stormenv}.${PDY}${CYL} fort.72 - ln -s -f ${DATA}/trak.${atcfout}.fractwind.${stormenv}.${PDY}${CYL} fort.73 - ln -s -f ${DATA}/trak.${atcfout}.pdfwind.${stormenv}.${PDY}${CYL} fort.76 - else - ln -s -f ${DATA}/trak.${atcfout}.structure.${PDY}${CYL} fort.72 - ln -s -f ${DATA}/trak.${atcfout}.fractwind.${PDY}${CYL} fort.73 - ln -s -f ${DATA}/trak.${atcfout}.pdfwind.${PDY}${CYL} fort.76 - fi -fi - -if [ ${IKEFLAG} = 'y' ]; then - if [ ${atcfout} = 'gfdt' -o ${atcfout} = 'gfdl' -o \ - ${atcfout} = 'hwrf' -o ${atcfout} = 'hwft' ]; then - ln -s -f ${DATA}/trak.${atcfout}.ike.${stormenv}.${PDY}${CYL} fort.74 - else - ln -s -f ${DATA}/trak.${atcfout}.ike.${PDY}${CYL} fort.74 - fi -fi - -if [ ${trkrtype} = 'midlat' -o ${trkrtype} = 'tcgen' ]; then - ln -s -f ${DATA}/trkrmask.${atcfout}.${regtype}.${PDY}${CYL} fort.77 -fi - - -set +x -echo " " -echo " -----------------------------------------------" -echo " NOW EXECUTING TRACKER......" -echo " -----------------------------------------------" -echo " " -set -x - -msg="$pgm start for $atcfout at ${CYL}z" -$postmsg "$jlogfile" "$msg" - -set +x -echo "+++ TIMING: BEFORE gettrk ---> `date`" -set -x - -set +x -echo " " -echo "TIMING: Before call to gettrk at `date`" -echo " " -set -x - -##/usrx/local/bin/getrusage -a /hwrf/save/Qingfu.Liu/trak/para/exec/gettrk <${namelist} - -${exectrkdir}/gettrk <${namelist} | tee gettrk.log -gettrk_rcc=$? - -set +x -echo " " -echo "TIMING: After call to gettrk at `date`" -echo " " -set -x - -set +x -echo "+++ TIMING: AFTER gettrk ---> `date`" -set -x - -#--------------------------------------------------------------# -# Send a message to the jlogfile for each storm that used -# tcvitals for hour 0 track/intensity info. -#--------------------------------------------------------------# - -pcount=0 -cat gettrk.log | grep -a 'NOTE: TCVITALS_USED_FOR_ATCF_F00' | \ -while read line -do - echo "line is [$line]" - if [[ ! ( "$pcount" -lt 30 ) ]] ; then - $postmsg "$jlogfile" "Hit maximum number of postmsg commands for tcvitals usage at hour 0. Will stop warning about that, to avoid spamming jlogfile." - break - fi - $postmsg "$jlogfile" "$line" - pcount=$(( pcount + 1 )) -done - -#--------------------------------------------------------------# -# Now copy the output track files to different directories -#--------------------------------------------------------------# - -set +x -echo " " -echo " -----------------------------------------------" -echo " NOW COPYING OUTPUT TRACK FILES TO COM " -echo " -----------------------------------------------" -echo " " -set -x - -if [[ ! -e "$track_file_path" ]] ; then - $postmsg "$jlogfile" "WARNING: tracker output file does not exist. This is probably an error. File: $track_file_path" - $postmsg "$jlogfile" "WARNING: exgfs_trkr will create an empty track file and deliver that." - cat /dev/null > $track_file_path -elif [[ ! -s "$track_file_path" ]] ; then - $postmsg "$jlogfile" "WARNING: tracker output file is empty. That is only an error if there are storms or genesis cases somewhere in the world. File: $track_file_path" -else - $postmsg "$jlogfile" "SUCCESS: Track file exists and is non-empty: $track_file" - if [[ "$PHASEFLAG" == n ]] ; then - echo "Phase information was disabled. I will remove the empty phase information from the track file before delivery." - cp -p $track_file_path $track_file_path.orig - cut -c1-112 < $track_file_path.orig > $track_file_path - if [[ ! -s "$track_file_path" ]] ; then - $postmsg "$jlogfile" "WARNING: Something went wrong with \"cut\" command to remove phase information. Will deliver original file." - /bin/mv -f $track_file_path.orig $track_file_path - else - $postmsg "$jlogfile" "SUCCESS: Removed empty phase information because phase information is disabled." - fi - fi -fi - -#mkdir /global/save/Qingfu.Liu/gfspara_track/gfs.${PDY}${CYL} -#cp /ptmpp1/Qingfu.Liu/trakout2/${PDY}${CYL}/gfs/trak.gfso.atcf* /global/save/Qingfu.Liu/gfspara_track/gfs.${PDY}${CYL}/. -#rm -rf /ptmpp1/Qingfu.Liu/trakout2/${PDY}${CYL}/gfs/* - -if [ ${gettrk_rcc} -eq 0 ]; then - - if [ -s ${DATA}/output_genvitals.${atcfout}.${PDY}${shh} ]; then - cat ${DATA}/output_genvitals.${atcfout}.${PDY}${shh} >>${genvitfile} - fi - - if [ ${PARAFLAG} = 'YES' ] - then - - if [[ ! -s "$track_file_path" ]] ; then - $postmsg "$jlogfile" "WARNING: delivering empty track file to rundir." - fi - - cp $track_file_path ../. - cat $track_file_path >> \ - ${rundir}/${cmodel}.atcfunix.${syyyy} - if [ ${cmodel} = 'gfs' ]; then - cat ${rundir}/${cmodel}.atcfunix.${syyyy} | sed -e "s/ GFSO/ AVNO/g" >>${rundir}/avn.atcfunix.${syyyy} - fi -# cp ${DATA}/trak.${atcfout}.atcf_sink.${regtype}.${PDY}${CYL} ../. -# cp ${DATA}/trak.${atcfout}.atcf_gen.${regtype}.${PDY}${CYL} ../. - fi - - msg="$pgm end for $atcfout at ${CYL}z completed normally" - $postmsg "$jlogfile" "$msg" - -# Now copy track files into various archives.... - - if [ ${SENDCOM} = 'YES' ] - then - - if [[ ! -s "$track_file_path" ]] ; then - $postmsg "$jlogfile" "WARNING: delivering an empty track file to COM." - return - fi - - glatuxarch=${glatuxarch:-${gltrkdir}/tracks.atcfunix.${syy}} - - cat $track_file_path >>${glatuxarch} - if [ ${cmodel} = 'gfs' ]; then - cat $track_file_path | sed -e "s/ GFSO/ AVNO/g" >>${glatuxarch} - fi - - if [ ${PARAFLAG} = 'YES' ] - then - echo " " - tmatuxarch=${tmatuxarch:-/gpfs/gd2/emc/hwrf/save/${userid}/trak/prod/tracks.atcfunix.${syy}} - cat $track_file_path >>${tmatuxarch} - if [ ${cmodel} = 'gfs' ]; then - cat $track_file_path | sed -e "s/ GFSO/ AVNO/g" >>${tmatuxarch} - fi - else - - if [ ${cmodel} = 'gfdl' ] - then - cp $track_file_path ${COM}/${stormenv}.${PDY}${CYL}.trackeratcfunix - else - cp $track_file_path ${COM}/${atcfout}.t${CYL}z.cyclone.trackatcfunix - if [ ${cmodel} = 'gfs' ]; then - cat $track_file_path | sed -e "s/ GFSO/ AVNO/g" >${COM}/avn.t${CYL}z.cyclone.trackatcfunix - fi - fi - - tmscrdir=/gpfs/gd2/emc/hwrf/save/${userid}/trak/prod - - tmtrakstat=${tmscrdir}/tracker.prod.status - echo "${atcfout} tracker completed okay for ${PDY}${CYL}" >>${tmtrakstat} - - export SENDDBN=${SENDDBN:-YES} - if [ ${SENDDBN} = 'YES' ] - then - if [ ${cmodel} = 'gfdl' ] - then - $DBNROOT/bin/dbn_alert ATCFUNIX GFS_NAVY $job ${COM}/${stormenv}.${PDY}${CYL}.trackeratcfunix - else - $DBNROOT/bin/dbn_alert ATCFUNIX GFS_NAVY $job ${COM}/${atcfout}.t${CYL}z.cyclone.trackatcfunix - if [ ${cmodel} = 'gfs' ]; then - $DBNROOT/bin/dbn_alert ATCFUNIX GFS_NAVY $job ${COM}/avn.t${CYL}z.cyclone.trackatcfunix - fi - fi - fi - - if [[ "$SENDNHC" == YES ]] ; then - # We need to parse apart the atcfunix file and distribute the forecasts to - # the necessary directories. To do this, first sort the atcfunix records - # by forecast hour (k6), then sort again by ocean basin (k1), storm number (k2) - # and then quadrant radii wind threshold (k12). Once you've got that organized - # file, break the file up by putting all the forecast records for each storm - # into a separate file. Then, for each file, find the corresponding atcfunix - # file in the /nhc/com/prod/atcf directory and dump the atcfunix records for that - # storm in there. - - if [ ${cmodel} = 'gfdl' ] - then - auxfile=${COM}/${stormenv}.${PDY}${CYL}.trackeratcfunix - else - auxfile=$track_file_path - fi - - sort -k6 ${auxfile} | sort -k1 -k2 -k12 >atcfunix.sorted - - old_string="XX, XX" - - ict=0 - while read unixrec - do - storm_string=` echo "${unixrec}" | cut -c1-6` - if [ "${storm_string}" = "${old_string}" ] - then - echo "${unixrec}" >>atcfunix_file.${ict} - else - let ict=ict+1 - echo "${unixrec}" >atcfunix_file.${ict} - old_string="${storm_string}" - fi - done >${ATCFdir}/${at}${NO}${syyyy}/a${at}${NO}${syyyy}.dat - cat atcfunix_file.$mct >>${ATCFdir}/${at}${NO}${syyyy}/a${at}${NO}${syyyy}.dat - cat atcfunix_file.$mct >>${ATCFdir}/${at}${NO}${syyyy}/ncep_a${at}${NO}${syyyy}.dat - if [ ${cmodel} = 'gfs' ]; then - cat atcfunix_file.$mct | sed -e "s/ GFSO/ AVNO/g" >>${ATCFdir}/${at}${NO}${syyyy}/a${at}${NO}${syyyy}.dat - cat atcfunix_file.$mct | sed -e "s/ GFSO/ AVNO/g" >>${ATCFdir}/${at}${NO}${syyyy}/ncep_a${at}${NO}${syyyy}.dat - fi - set +x - echo " " - echo "+++ Adding records to TPC ATCFUNIX directory: /tpcprd/atcf_unix/${at}${NO}${syyyy}" - echo " " - set -x - else - set +x - echo " " - echo "There is no TPC ATCFUNIX directory for: /tpcprd/atcf_unix/${at}${NO}${syyyy}" - set -x - fi - done - fi - fi - fi - - fi - -else - - if [ ${PARAFLAG} = 'YES' ] - then - echo " " - else - tmtrakstat=/gpfs/gd2/emc/hwrf/save/${userid}/trak/prod/tracker.prod.status - echo "ERROR: ${atcfout} tracker FAILED for ${PDY}${CYL}" >>${tmtrakstat} - fi - - set +x - echo " " - echo "!!! ERROR -- An error occurred while running gettrk.x, " - echo "!!! which is the program that actually gets the track." - echo "!!! Return code from gettrk.x = ${gettrk_rcc}" - echo "!!! model= ${atcfout}, forecast initial time = ${PDY}${CYL}" - echo "!!! Exiting...." - echo " " - set -x - err_exit " FAILED ${jobid} - ERROR RUNNING GETTRK IN TRACKER SCRIPT- ABNORMAL EXIT" - -fi diff --git a/ush/global_savefits.sh b/ush/global_savefits.sh index 9efbf778af..f26132dd8a 100755 --- a/ush/global_savefits.sh +++ b/ush/global_savefits.sh @@ -1,9 +1,10 @@ -#!/bin/ksh -set -xeua +#! /usr/bin/env bash ######################################################## # save fit and horiz files for all analysis cycles ######################################################## +source "$HOMEgfs/ush/preamble.sh" + export FIT_DIR=${FIT_DIR:-$COMOUT/fits} export HORZ_DIR=${HORZ_DIR:-$COMOUT/horiz} export fh1=06 diff --git a/ush/gsi_utils.py b/ush/gsi_utils.py new file mode 100644 index 0000000000..8088cb7233 --- /dev/null +++ b/ush/gsi_utils.py @@ -0,0 +1,137 @@ +# gsi_utils.py +# a collection of functions, classes, etc. +# used for the GSI global analysis + + +def isTrue(str_in): + """ isTrue(str_in) + - function to translate shell variables to python logical variables + + input: str_in - string (should be like 'YES', 'TRUE', etc.) + returns: status (logical True or False) + + """ + str_in = str_in.upper() + if str_in in ['YES', '.TRUE.']: + status = True + else: + status = False + return status + + +def link_file(from_file, to_file): + """ link_file(from_file, to_file) + - function to check if a path exists, and if not, make a symlink + input: from_file - string path + to_file - string path + """ + import os + if not os.path.exists(to_file): + if not os.path.islink(to_file): + os.symlink(from_file, to_file) + else: + print(to_file + " exists, unlinking.") + os.unlink(to_file) + os.symlink(from_file, to_file) + print("ln -s " + from_file + " " + to_file) + + +def copy_file(from_file, to_file): + import shutil + shutil.copy(from_file, to_file) + print("cp " + from_file + " " + to_file) + + +def make_dir(directory): + import os + os.makedirs(directory) + print("mkdir -p " + directory) + + +def write_nml(nml_dict, nml_file): + """ write_nml(nml_dict, nml_file) + - function to write out namelist dictionary nml_dict to file nml_file + input: nml_dict - dictionary of dictionaries + first dictionary is &nml, second is nmlvar='value' + NOTE: this shoudl be an OrderedDict or else it might fail + nml_file - string path to write namelist file to + """ + nfile = open(nml_file, 'w') + + for nml, nmlvars in nml_dict.items(): + nfile.write('&' + nml + '\n') + for var, val in nmlvars.items(): + nfile.write(' ' + str(var) + ' = ' + str(val) + '\n') + nfile.write('/\n\n') + nfile.close() + + +def get_ncdims(ncfile): + """ get_ncdims(ncfile) + - function to return dictionary of netCDF file dimensions and their lengths + input: ncfile - string to path to netCDF file + output: ncdims - dictionary where key is the name of a dimension and the + value is the length of that dimension + + ex: ncdims['pfull'] = 127 + """ + try: + import netCDF4 as nc + except ImportError as err: + raise ImportError(f"Unable to import netCDF4 module") + ncf = nc.Dataset(ncfile) + ncdims = {} + for d in ncf.dimensions.keys(): + ncdims[d] = int(len(ncf.dimensions[d])) + ncf.close() + + return ncdims + + +def get_nemsdims(nemsfile, nemsexe): + """ get_nemsdims(nemsfile,nemsexe) + - function to return dictionary of NEMSIO file dimensions for use + input: nemsfile - string to path nemsio file + nemsexe - string to path nemsio_get executable + output: nemsdims - dictionary where key is the name of a dimension and the + value is the length of that dimension + ex: nemsdims['pfull'] = 127 + """ + import subprocess + ncdims = { + 'dimx': 'grid_xt', + 'dimy': 'grid_yt', + 'dimz': 'pfull', + } + nemsdims = {} + for dim in ['dimx', 'dimy', 'dimz']: + out = subprocess.Popen([nemsexe, nemsfile, dim], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + stdout, stderr = out.communicate() + nemsdims[ncdims[dim]] = int(stdout.split(' ')[-1].rstrip()) + return nemsdims + + +def get_timeinfo(ncfile): + """ get_timeinfo(ncfile) + - function to return datetime objects of initialized time and valid time + input: ncfile - string to path to netCDF file + returns: inittime, validtime - datetime objects + nfhour - integer forecast hour + """ + try: + import netCDF4 as nc + except ImportError as err: + raise ImportError(f"Unable to import netCDF4 module\n{err}") + import datetime as dt + import re + ncf = nc.Dataset(ncfile) + time_units = ncf['time'].units + date_str = time_units.split('since ')[1] + date_str = re.sub("[^0-9]", "", date_str) + initstr = date_str[0:10] + inittime = dt.datetime.strptime(initstr, "%Y%m%d%H") + nfhour = int(ncf['time'][0]) + validtime = inittime + dt.timedelta(hours=nfhour) + ncf.close() + + return inittime, validtime, nfhour diff --git a/ush/hpssarch_gen.sh b/ush/hpssarch_gen.sh index 02d460d9f9..0a027c7537 100755 --- a/ush/hpssarch_gen.sh +++ b/ush/hpssarch_gen.sh @@ -1,28 +1,25 @@ -#!/bin/ksh -set -x +#! /usr/bin/env bash ################################################### # Fanglin Yang, 20180318 # --create bunches of files to be archived to HPSS ################################################### - +source "${HOMEgfs}/ush/preamble.sh" type=${1:-gfs} ##gfs, gdas, enkfgdas or enkfggfs -CDATE=${CDATE:-2018010100} -PDY=$(echo $CDATE | cut -c 1-8) -cyc=$(echo $CDATE | cut -c 9-10) -OUTPUT_FILE=${OUTPUT_FILE:-"netcdf"} -OUTPUT_HISTORY=${OUTPUT_HISTORY:-".true."} -SUFFIX=${SUFFIX:-".nc"} -if [ $SUFFIX = ".nc" ]; then - format="netcdf" -else - format="nemsio" +ARCH_GAUSSIAN=${ARCH_GAUSSIAN:-"YES"} +ARCH_GAUSSIAN_FHMAX=${ARCH_GAUSSIAN_FHMAX:-36} +ARCH_GAUSSIAN_FHINC=${ARCH_GAUSSIAN_FHINC:-6} + +# Set whether to archive downstream products +DO_DOWN=${DO_DOWN:-"NO"} +if [[ ${DO_BUFRSND} = "YES" ]]; then + export DO_DOWN="YES" fi #----------------------------------------------------- -if [ $type = "gfs" ]; then +if [[ ${type} = "gfs" ]]; then #----------------------------------------------------- FHMIN_GFS=${FHMIN_GFS:-0} FHMAX_GFS=${FHMAX_GFS:-384} @@ -30,133 +27,281 @@ if [ $type = "gfs" ]; then FHMAX_HF_GFS=${FHMAX_HF_GFS:-120} FHOUT_HF_GFS=${FHOUT_HF_GFS:-1} + rm -f "${DATA}/gfsa.txt" + rm -f "${DATA}/gfsb.txt" + rm -f "${DATA}/gfs_restarta.txt" + touch "${DATA}/gfsa.txt" + touch "${DATA}/gfsb.txt" + touch "${DATA}/gfs_restarta.txt" + + if [[ ${ARCH_GAUSSIAN} = "YES" ]]; then + rm -f "${DATA}/gfs_pgrb2b.txt" + rm -f "${DATA}/gfs_netcdfb.txt" + rm -f "${DATA}/gfs_flux.txt" + touch "${DATA}/gfs_pgrb2b.txt" + touch "${DATA}/gfs_netcdfb.txt" + touch "${DATA}/gfs_flux.txt" + + if [[ ${MODE} = "cycled" ]]; then + rm -f "${DATA}/gfs_netcdfa.txt" + touch "${DATA}/gfs_netcdfa.txt" + fi + fi - rm -f gfsa.txt - rm -f gfsb.txt - rm -f gfs_pgrb2b.txt - rm -f gfs_flux.txt - rm -f gfs_${format}a.txt - rm -f gfs_${format}b.txt - rm -f gfs_restarta.txt - touch gfsa.txt - touch gfsb.txt - touch gfs_pgrb2b.txt - touch gfs_flux.txt - touch gfs_${format}a.txt - touch gfs_${format}b.txt - touch gfs_restarta.txt - - dirpath="gfs.${PDY}/${cyc}/atmos/" - dirname="./${dirpath}" + if [[ ${DO_DOWN} = "YES" ]]; then + rm -f "${DATA}/gfs_downstream.txt" + touch "${DATA}/gfs_downstream.txt" + fi head="gfs.t${cyc}z." - #.................. - echo "${dirname}${head}pgrb2b.0p25.anl " >>gfs_pgrb2b.txt - echo "${dirname}${head}pgrb2b.0p25.anl.idx " >>gfs_pgrb2b.txt - echo "${dirname}${head}pgrb2b.0p50.anl " >>gfs_pgrb2b.txt - echo "${dirname}${head}pgrb2b.0p50.anl.idx " >>gfs_pgrb2b.txt - - echo "${dirname}${head}gsistat " >>gfsa.txt - echo "${dirname}${head}nsstbufr " >>gfsa.txt - echo "${dirname}${head}prepbufr " >>gfsa.txt - echo "${dirname}${head}prepbufr_pre-qc " >>gfsa.txt - echo "${dirname}${head}prepbufr.acft_profiles " >>gfsa.txt - echo "${dirname}${head}pgrb2.0p25.anl " >>gfsa.txt - echo "${dirname}${head}pgrb2.0p25.anl.idx " >>gfsa.txt - echo "${dirname}avno.t${cyc}z.cyclone.trackatcfunix " >>gfsa.txt - echo "${dirname}avnop.t${cyc}z.cyclone.trackatcfunix " >>gfsa.txt - echo "${dirname}trak.gfso.atcfunix.${PDY}${cyc} " >>gfsa.txt - echo "${dirname}trak.gfso.atcfunix.altg.${PDY}${cyc} " >>gfsa.txt - echo "${dirname}storms.gfso.atcf_gen.${PDY}${cyc} " >>gfsa.txt - echo "${dirname}storms.gfso.atcf_gen.altg.${PDY}${cyc} " >>gfsa.txt - echo "${dirname}gempak/gfs_${PDY}${cyc}.sfc " >>gfsa.txt - echo "${dirname}gempak/gfs_${PDY}${cyc}.snd " >>gfsa.txt - echo "${dirname}bufr.t${cyc}z " >>gfsa.txt - echo "./logs/${CDATE}/gfs*.log " >>gfsa.txt - - echo "${dirname}${head}pgrb2.0p50.anl " >>gfsb.txt - echo "${dirname}${head}pgrb2.0p50.anl.idx " >>gfsb.txt - echo "${dirname}${head}pgrb2.1p00.anl " >>gfsb.txt - echo "${dirname}${head}pgrb2.1p00.anl.idx " >>gfsb.txt + if [[ ${ARCH_GAUSSIAN} = "YES" ]]; then + { + echo "${COM_ATMOS_GRIB_0p25/${ROTDIR}\//}/${head}pgrb2b.0p25.anl" + echo "${COM_ATMOS_GRIB_0p25/${ROTDIR}\//}/${head}pgrb2b.0p25.anl.idx" + echo "${COM_ATMOS_GRIB_1p00/${ROTDIR}\//}/${head}pgrb2b.1p00.anl" + echo "${COM_ATMOS_GRIB_1p00/${ROTDIR}\//}/${head}pgrb2b.1p00.anl.idx" + } >> "${DATA}/gfs_pgrb2b.txt" + + if [[ ${MODE} = "cycled" ]]; then + { + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}atmanl.nc" + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}sfcanl.nc" + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}atmi*.nc" + gsida_files=("dtfanl.nc" + "loginc.txt") + for file in "${gsida_files[@]}"; do + [[ -s ${COM_ATMOS_ANALYSIS}/${head}${file} ]] && echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}${file}" + done + } >> "${DATA}/gfs_netcdfa.txt" + fi + fh=0 + while (( fh <= ARCH_GAUSSIAN_FHMAX )); do + fhr=$(printf %03i "${fh}") + { + echo "${COM_ATMOS_HISTORY/${ROTDIR}\//}/${head}atmf${fhr}.nc" + echo "${COM_ATMOS_HISTORY/${ROTDIR}\//}/${head}sfcf${fhr}.nc" + } >> "${DATA}/gfs_netcdfb.txt" + fh=$((fh+ARCH_GAUSSIAN_FHINC)) + done + fi - fh=0 - while [ $fh -le $FHMAX_GFS ]; do - fhr=$(printf %03i $fh) - echo "${dirname}${head}pgrb2b.0p25.f${fhr} " >>gfs_pgrb2b.txt - echo "${dirname}${head}pgrb2b.0p25.f${fhr}.idx " >>gfs_pgrb2b.txt - if [ -s $ROTDIR/${dirpath}${head}pgrb2b.0p50.f${fhr} ]; then - echo "${dirname}${head}pgrb2b.0p50.f${fhr} " >>gfs_pgrb2b.txt - echo "${dirname}${head}pgrb2b.0p50.f${fhr}.idx " >>gfs_pgrb2b.txt + #.................. + # Exclude the gfsarch.log file, which will change during the tar operation + # This uses the bash extended globbing option + { + echo "./logs/${PDY}${cyc}/gfs!(arch).log" + echo "${COM_ATMOS_HISTORY/${ROTDIR}\//}/input.nml" + + if [[ ${MODE} = "cycled" ]]; then + if [[ -s "${COM_ATMOS_ANALYSIS}/${head}gsistat" ]]; then + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}gsistat" + fi + gsiob_files=("nsstbufr" + "prepbufr" + "prepbufr.acft_profiles") + for file in "${gsiob_files[@]}"; do + [[ -s ${COM_OBS}/${head}${file} ]] && echo "${COM_OBS/${ROTDIR}\//}/${head}${file}" + done + if [[ -s "${COM_ATMOS_ANALYSIS}/${head}atmvar.yaml" ]]; then + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}atmvar.yaml" + fi + if [[ -s "${COM_ATMOS_ANALYSIS}/${head}atmstat" ]]; then + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}atmstat" + fi fi - echo "${dirname}${head}sfluxgrbf${fhr}.grib2 " >>gfs_flux.txt - echo "${dirname}${head}sfluxgrbf${fhr}.grib2.idx " >>gfs_flux.txt + echo "${COM_ATMOS_GRIB_0p25/${ROTDIR}\//}/${head}pgrb2.0p25.anl" + echo "${COM_ATMOS_GRIB_0p25/${ROTDIR}\//}/${head}pgrb2.0p25.anl.idx" + + #Only generated if there are cyclones to track + cyclone_files=("avno.t${cyc}z.cyclone.trackatcfunix" + "avnop.t${cyc}z.cyclone.trackatcfunix" + "trak.gfso.atcfunix.${PDY}${cyc}" + "trak.gfso.atcfunix.altg.${PDY}${cyc}") + + for file in "${cyclone_files[@]}"; do + [[ -s ${COM_ATMOS_TRACK}/${file} ]] && echo "${COM_ATMOS_TRACK/${ROTDIR}\//}/${file}" + done + + genesis_files=("storms.gfso.atcf_gen.${PDY}${cyc}" + "storms.gfso.atcf_gen.altg.${PDY}${cyc}") + for file in "${genesis_files[@]}"; do + [[ -s ${COM_ATMOS_GENESIS}/${file} ]] && echo "${COM_ATMOS_GENESIS/${ROTDIR}\//}/${file}" + done + + # GSI Monitor job output + + if [[ ${DO_VMINMON} = "YES" ]]; then + echo "${COM_ATMOS_MINMON/${ROTDIR}\//}/${PDY}${cyc}.costs.txt" + echo "${COM_ATMOS_MINMON/${ROTDIR}\//}/${PDY}${cyc}.cost_terms.txt" + echo "${COM_ATMOS_MINMON/${ROTDIR}\//}/${PDY}${cyc}.gnorms.ieee_d" + echo "${COM_ATMOS_MINMON/${ROTDIR}\//}/${PDY}${cyc}.reduction.ieee_d" + echo "${COM_ATMOS_MINMON/${ROTDIR}\//}/gnorm_data.txt" + fi - echo "${dirname}${head}pgrb2.0p25.f${fhr} " >>gfsa.txt - echo "${dirname}${head}pgrb2.0p25.f${fhr}.idx " >>gfsa.txt - echo "${dirname}${head}logf${fhr}.txt " >>gfsa.txt + } >> "${DATA}/gfsa.txt" - if [ -s $ROTDIR/${dirpath}${head}pgrb2.0p50.f${fhr} ]; then - echo "${dirname}${head}pgrb2.0p50.f${fhr} " >>gfsb.txt - echo "${dirname}${head}pgrb2.0p50.f${fhr}.idx " >>gfsb.txt - fi - if [ -s $ROTDIR/${dirpath}${head}pgrb2.1p00.f${fhr} ]; then - echo "${dirname}${head}pgrb2.1p00.f${fhr} " >>gfsb.txt - echo "${dirname}${head}pgrb2.1p00.f${fhr}.idx " >>gfsb.txt + { + if [[ ${DO_DOWN} = "YES" ]]; then + if [[ ${DO_BUFRSND} = "YES" ]]; then + echo "${COM_ATMOS_GEMPAK/${ROTDIR}\//}/gfs_${PDY}${cyc}.sfc" + echo "${COM_ATMOS_GEMPAK/${ROTDIR}\//}/gfs_${PDY}${cyc}.snd" + echo "${COM_ATMOS_WMO/${ROTDIR}\//}/gfs_collective*.postsnd_${cyc}" + echo "${COM_ATMOS_BUFR/${ROTDIR}\//}/bufr.t${cyc}z" + echo "${COM_ATMOS_BUFR/${ROTDIR}\//}/gfs.t${cyc}z.bufrsnd.tar.gz" + fi fi + } >> "${DATA}/gfs_downstream.txt" + + { + echo "${COM_ATMOS_GRIB_0p50/${ROTDIR}\//}/${head}pgrb2.0p50.anl" + echo "${COM_ATMOS_GRIB_0p50/${ROTDIR}\//}/${head}pgrb2.0p50.anl.idx" + echo "${COM_ATMOS_GRIB_1p00/${ROTDIR}\//}/${head}pgrb2.1p00.anl" + echo "${COM_ATMOS_GRIB_1p00/${ROTDIR}\//}/${head}pgrb2.1p00.anl.idx" + } >> "${DATA}/gfsb.txt" - inc=$FHOUT_GFS - if [ $FHMAX_HF_GFS -gt 0 -a $FHOUT_HF_GFS -gt 0 -a $fh -lt $FHMAX_HF_GFS ]; then - inc=$FHOUT_HF_GFS + + fh=0 + while (( fh <= FHMAX_GFS )); do + fhr=$(printf %03i "${fh}") + if [[ ${ARCH_GAUSSIAN} = "YES" ]]; then + { + echo "${COM_ATMOS_MASTER/${ROTDIR}\//}/${head}sfluxgrbf${fhr}.grib2" + echo "${COM_ATMOS_MASTER/${ROTDIR}\//}/${head}sfluxgrbf${fhr}.grib2.idx" + } >> "${DATA}/gfs_flux.txt" + + { + echo "${COM_ATMOS_GRIB_0p25/${ROTDIR}\//}/${head}pgrb2b.0p25.f${fhr}" + echo "${COM_ATMOS_GRIB_0p25/${ROTDIR}\//}/${head}pgrb2b.0p25.f${fhr}.idx" + if [[ -s "${COM_ATMOS_GRIB_1p00}/${head}pgrb2b.1p00.f${fhr}" ]]; then + echo "${COM_ATMOS_GRIB_1p00/${ROTDIR}\//}/${head}pgrb2b.1p00.f${fhr}" + echo "${COM_ATMOS_GRIB_1p00/${ROTDIR}\//}/${head}pgrb2b.1p00.f${fhr}.idx" + fi + } >> "${DATA}/gfs_pgrb2b.txt" fi - fh=$((fh+inc)) - done + { + echo "${COM_ATMOS_GRIB_0p25/${ROTDIR}\//}/${head}pgrb2.0p25.f${fhr}" + echo "${COM_ATMOS_GRIB_0p25/${ROTDIR}\//}/${head}pgrb2.0p25.f${fhr}.idx" + echo "${COM_ATMOS_HISTORY/${ROTDIR}\//}/${head}atm.logf${fhr}.txt" + } >> "${DATA}/gfsa.txt" - #.................. - echo "${dirname}${head}atmanl${SUFFIX} " >>gfs_${format}a.txt - echo "${dirname}${head}sfcanl${SUFFIX} " >>gfs_${format}a.txt - echo "${dirname}${head}atmi*.nc " >>gfs_${format}a.txt - echo "${dirname}${head}dtfanl.nc " >>gfs_${format}a.txt - echo "${dirname}${head}loginc.txt " >>gfs_${format}a.txt + { + if [[ -s "${COM_ATMOS_GRIB_0p50}/${head}pgrb2.0p50.f${fhr}" ]]; then + echo "${COM_ATMOS_GRIB_0p50/${ROTDIR}\//}/${head}pgrb2.0p50.f${fhr}" + echo "${COM_ATMOS_GRIB_0p50/${ROTDIR}\//}/${head}pgrb2.0p50.f${fhr}.idx" + fi + if [[ -s "${COM_ATMOS_GRIB_1p00}/${head}pgrb2.1p00.f${fhr}" ]]; then + echo "${COM_ATMOS_GRIB_1p00/${ROTDIR}\//}/${head}pgrb2.1p00.f${fhr}" + echo "${COM_ATMOS_GRIB_1p00/${ROTDIR}\//}/${head}pgrb2.1p00.f${fhr}.idx" + fi + } >> "${DATA}/gfsb.txt" - #.................. - if [ $OUTPUT_HISTORY = ".true." ]; then - fh=0 - while [ $fh -le 36 ]; do - fhr=$(printf %03i $fh) - echo "${dirname}${head}atmf${fhr}${SUFFIX} " >>gfs_${format}b.txt - echo "${dirname}${head}sfcf${fhr}${SUFFIX} " >>gfs_${format}b.txt - fh=$((fh+6)) + inc=${FHOUT_GFS} + if (( FHMAX_HF_GFS > 0 && FHOUT_HF_GFS > 0 && fh < FHMAX_HF_GFS )); then + inc=${FHOUT_HF_GFS} + fi + + fh=$((fh+inc)) done - fi #.................. - echo "${dirname}RESTART/*0000.sfcanl_data.tile1.nc " >>gfs_restarta.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile2.nc " >>gfs_restarta.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile3.nc " >>gfs_restarta.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile4.nc " >>gfs_restarta.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile5.nc " >>gfs_restarta.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile6.nc " >>gfs_restarta.txt + { + if [[ ${MODE} = "cycled" ]]; then + echo "${COM_ATMOS_RESTART/${ROTDIR}\//}/*0000.sfcanl_data.tile1.nc" + echo "${COM_ATMOS_RESTART/${ROTDIR}\//}/*0000.sfcanl_data.tile2.nc" + echo "${COM_ATMOS_RESTART/${ROTDIR}\//}/*0000.sfcanl_data.tile3.nc" + echo "${COM_ATMOS_RESTART/${ROTDIR}\//}/*0000.sfcanl_data.tile4.nc" + echo "${COM_ATMOS_RESTART/${ROTDIR}\//}/*0000.sfcanl_data.tile5.nc" + echo "${COM_ATMOS_RESTART/${ROTDIR}\//}/*0000.sfcanl_data.tile6.nc" + elif [[ ${MODE} = "forecast-only" ]]; then + echo "${COM_ATMOS_INPUT/${ROTDIR}\//}/gfs_ctrl.nc" + echo "${COM_ATMOS_INPUT/${ROTDIR}\//}/gfs_data.tile1.nc" + echo "${COM_ATMOS_INPUT/${ROTDIR}\//}/gfs_data.tile2.nc" + echo "${COM_ATMOS_INPUT/${ROTDIR}\//}/gfs_data.tile3.nc" + echo "${COM_ATMOS_INPUT/${ROTDIR}\//}/gfs_data.tile4.nc" + echo "${COM_ATMOS_INPUT/${ROTDIR}\//}/gfs_data.tile5.nc" + echo "${COM_ATMOS_INPUT/${ROTDIR}\//}/gfs_data.tile6.nc" + echo "${COM_ATMOS_INPUT/${ROTDIR}\//}/sfc_data.tile1.nc" + echo "${COM_ATMOS_INPUT/${ROTDIR}\//}/sfc_data.tile2.nc" + echo "${COM_ATMOS_INPUT/${ROTDIR}\//}/sfc_data.tile3.nc" + echo "${COM_ATMOS_INPUT/${ROTDIR}\//}/sfc_data.tile4.nc" + echo "${COM_ATMOS_INPUT/${ROTDIR}\//}/sfc_data.tile5.nc" + echo "${COM_ATMOS_INPUT/${ROTDIR}\//}/sfc_data.tile6.nc" + fi + } >> "${DATA}/gfs_restarta.txt" - #.................. - if [ $DO_WAVE = "YES" ]; then - rm -rf gfswave.txt - touch gfswave.txt + #.................. + if [[ ${DO_WAVE} = "YES" ]]; then - dirpath="gfs.${PDY}/${cyc}/wave/" - dirname="./${dirpath}" + rm -rf "${DATA}/gfswave.txt" + touch "${DATA}/gfswave.txt" head="gfswave.t${cyc}z." #........................... - echo "${dirname}gridded/${head}* " >>gfswave.txt - echo "${dirname}station/${head}* " >>gfswave.txt + { + echo "${COM_WAVE_HISTORY/${ROTDIR}\//}/ww3_multi*" + echo "${COM_WAVE_GRID/${ROTDIR}\//}/${head}*" + echo "${COM_WAVE_STATION/${ROTDIR}\//}/${head}*" + } >> "${DATA}/gfswave.txt" + fi + + if [[ ${DO_OCN} = "YES" ]]; then + + head="gfs.t${cyc}z." + + rm -f "${DATA}/gfs_flux_1p00.txt" + rm -f "${DATA}/ocn_ice_grib2_0p5.txt" + rm -f "${DATA}/ocn_ice_grib2_0p25.txt" + rm -f "${DATA}/ocn_2D.txt" + rm -f "${DATA}/ocn_3D.txt" + rm -f "${DATA}/ocn_xsect.txt" + rm -f "${DATA}/ocn_daily.txt" + touch "${DATA}/gfs_flux_1p00.txt" + touch "${DATA}/ocn_ice_grib2_0p5.txt" + touch "${DATA}/ocn_ice_grib2_0p25.txt" + touch "${DATA}/ocn_2D.txt" + touch "${DATA}/ocn_3D.txt" + touch "${DATA}/ocn_xsect.txt" + touch "${DATA}/ocn_daily.txt" + echo "${COM_OCEAN_INPUT/${ROTDIR}\//}/MOM_input" >> "${DATA}/ocn_2D.txt" + echo "${COM_OCEAN_2D/${ROTDIR}\//}/ocn_2D*" >> "${DATA}/ocn_2D.txt" + echo "${COM_OCEAN_3D/${ROTDIR}\//}/ocn_3D*" >> "${DATA}/ocn_3D.txt" + echo "${COM_OCEAN_XSECT/${ROTDIR}\//}/ocn*EQ*" >> "${DATA}/ocn_xsect.txt" + echo "${COM_OCEAN_HISTORY/${ROTDIR}\//}/ocn_daily*" >> "${DATA}/ocn_daily.txt" + echo "${COM_OCEAN_GRIB_0p50/${ROTDIR}\//}/ocn_ice*0p5x0p5.grb2" >> "${DATA}/ocn_ice_grib2_0p5.txt" + echo "${COM_OCEAN_GRIB_0p25/${ROTDIR}\//}/ocn_ice*0p25x0p25.grb2" >> "${DATA}/ocn_ice_grib2_0p25.txt" + + # Also save fluxes from atmosphere + { + echo "${COM_ATMOS_GRIB_1p00/${ROTDIR}\//}/${head}flux.1p00.f???" + echo "${COM_ATMOS_GRIB_1p00/${ROTDIR}\//}/${head}flux.1p00.f???.idx" + } >> "${DATA}/gfs_flux_1p00.txt" + fi + + if [[ ${DO_ICE} = "YES" ]]; then + head="gfs.t${cyc}z." + rm -f "${DATA}/ice.txt" + touch "${DATA}/ice.txt" + { + echo "${COM_ICE_INPUT/${ROTDIR}\//}/ice_in" + echo "${COM_ICE_HISTORY/${ROTDIR}\//}/ice*nc" + } >> "${DATA}/ice.txt" + fi + + if [[ ${DO_AERO} = "YES" ]]; then + head="gocart" + + rm -f "${DATA}/chem.txt" + touch "${DATA}/chem.txt" + + echo "${COM_CHEM_HISTORY/${ROTDIR}\//}/${head}*" >> "${DATA}/chem.txt" fi #----------------------------------------------------- @@ -166,126 +311,245 @@ fi ##end of gfs #----------------------------------------------------- -if [ $type = "gdas" ]; then +if [[ ${type} == "gdas" ]]; then #----------------------------------------------------- - rm -f gdas.txt - rm -f gdas_restarta.txt - rm -f gdas_restartb.txt - touch gdas.txt - touch gdas_restarta.txt - touch gdas_restartb.txt + rm -f "${DATA}/gdas.txt" + rm -f "${DATA}/gdas_restarta.txt" + rm -f "${DATA}/gdas_restartb.txt" + touch "${DATA}/gdas.txt" + touch "${DATA}/gdas_restarta.txt" + touch "${DATA}/gdas_restartb.txt" - dirpath="gdas.${PDY}/${cyc}/atmos/" - dirname="./${dirpath}" head="gdas.t${cyc}z." #.................. - echo "${dirname}${head}gsistat " >>gdas.txt - echo "${dirname}${head}pgrb2.0p25.anl " >>gdas.txt - echo "${dirname}${head}pgrb2.0p25.anl.idx " >>gdas.txt - echo "${dirname}${head}pgrb2.1p00.anl " >>gdas.txt - echo "${dirname}${head}pgrb2.1p00.anl.idx " >>gdas.txt - echo "${dirname}${head}atmanl${SUFFIX} " >>gdas.txt - echo "${dirname}${head}sfcanl${SUFFIX} " >>gdas.txt - if [ -s $ROTDIR/${dirpath}${head}atmanl.ensres${SUFFIX} ]; then - echo "${dirname}${head}atmanl.ensres${SUFFIX} " >>gdas.txt - fi - if [ -s $ROTDIR/${dirpath}${head}atma003.ensres${SUFFIX} ]; then - echo "${dirname}${head}atma003.ensres${SUFFIX} " >>gdas.txt - fi - if [ -s $ROTDIR/${dirpath}${head}atma009.ensres${SUFFIX} ]; then - echo "${dirname}${head}atma009.ensres${SUFFIX} " >>gdas.txt - fi - if [ -s $ROTDIR/${dirpath}${head}cnvstat ]; then - echo "${dirname}${head}cnvstat " >>gdas.txt - fi - if [ -s $ROTDIR/${dirpath}${head}oznstat ]; then - echo "${dirname}${head}oznstat " >>gdas.txt - fi - if [ -s $ROTDIR/${dirpath}${head}radstat ]; then - echo "${dirname}${head}radstat " >>gdas.txt - fi - for fstep in prep anal gldas fcst vrfy radmon minmon oznmon; do - if [ -s $ROTDIR/logs/${CDATE}/gdas${fstep}.log ]; then - echo "./logs/${CDATE}/gdas${fstep}.log " >>gdas.txt - fi - done - echo "./logs/${CDATE}/gdaspost*.log " >>gdas.txt + { + echo "${COM_ATMOS_GRIB_0p25/${ROTDIR}\//}/${head}pgrb2.0p25.anl" + echo "${COM_ATMOS_GRIB_0p25/${ROTDIR}\//}/${head}pgrb2.0p25.anl.idx" + echo "${COM_ATMOS_GRIB_1p00/${ROTDIR}\//}/${head}pgrb2.1p00.anl" + echo "${COM_ATMOS_GRIB_1p00/${ROTDIR}\//}/${head}pgrb2.1p00.anl.idx" + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}atmanl.nc" + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}sfcanl.nc" + if [[ -s "${COM_ATMOS_ANALYSIS}/${head}atmvar.yaml" ]]; then + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}atmvar.yaml" + fi + if [[ -s "${COM_ATMOS_ANALYSIS}/${head}atmstat" ]]; then + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}atmstat" + fi + if [[ -s "${COM_ATMOS_ANALYSIS}/${head}gsistat" ]]; then + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}gsistat" + fi + if [[ -s "${COM_ATMOS_ANALYSIS}/${head}atmanl.ensres.nc" ]]; then + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}atmanl.ensres.nc" + fi + if [[ -s "${COM_ATMOS_ANALYSIS}/${head}atma003.ensres.nc" ]]; then + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}atma003.ensres.nc" + fi + if [[ -s "${COM_ATMOS_ANALYSIS}/${head}atma009.ensres.nc" ]]; then + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}atma009.ensres.nc" + fi + if [[ -s "${COM_ATMOS_ANALYSIS}/${head}cnvstat" ]]; then + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}cnvstat" + fi + if [[ -s "${COM_ATMOS_ANALYSIS}/${head}oznstat" ]]; then + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}oznstat" + fi + if [[ -s "${COM_CHEM_ANALYSIS}/${head}aerostat" ]]; then + echo "${COM_CHEM_ANALYSIS/${ROTDIR}\//}/${head}aerostat" + fi + if [[ -s "${COM_ATMOS_ANALYSIS}/${head}radstat" ]]; then + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}radstat" + fi + for fstep in prep anal fcst verfozn verfrad vminmon; do + if [[ -s "${ROTDIR}/logs/${PDY}${cyc}/gdas${fstep}.log" ]]; then + echo "./logs/${PDY}${cyc}/gdas${fstep}.log" + fi + done + echo "./logs/${PDY}${cyc}/gdaspost*.log" + + fh=0 + while [[ ${fh} -le 9 ]]; do + fhr=$(printf %03i "${fh}") + echo "${COM_ATMOS_MASTER/${ROTDIR}\//}/${head}sfluxgrbf${fhr}.grib2" + echo "${COM_ATMOS_MASTER/${ROTDIR}\//}/${head}sfluxgrbf${fhr}.grib2.idx" + echo "${COM_ATMOS_GRIB_0p25/${ROTDIR}\//}/${head}pgrb2.0p25.f${fhr}" + echo "${COM_ATMOS_GRIB_0p25/${ROTDIR}\//}/${head}pgrb2.0p25.f${fhr}.idx" + echo "${COM_ATMOS_GRIB_1p00/${ROTDIR}\//}/${head}pgrb2.1p00.f${fhr}" + echo "${COM_ATMOS_GRIB_1p00/${ROTDIR}\//}/${head}pgrb2.1p00.f${fhr}.idx" + echo "${COM_ATMOS_HISTORY/${ROTDIR}\//}/${head}atm.logf${fhr}.txt" + echo "${COM_ATMOS_HISTORY/${ROTDIR}\//}/${head}atmf${fhr}.nc" + echo "${COM_ATMOS_HISTORY/${ROTDIR}\//}/${head}sfcf${fhr}.nc" + fh=$((fh+3)) + done + flist="001 002 004 005 007 008" + for fhr in ${flist}; do + file="${COM_ATMOS_MASTER/${ROTDIR}\//}/${head}sfluxgrbf${fhr}.grib2" + if [[ -s "${file}" ]]; then + echo "${file}" + echo "${file}.idx" + fi + done + + # GSI Monitor jobs output + + if [[ ${DO_VERFOZN} = "YES" ]]; then + for type in horiz time; do + if [[ ${type} = "horiz" ]]; then + suffix=".gz" + elif [[ ${type} = "time" ]]; then + suffix="" + echo "${COM_ATMOS_OZNMON/${ROTDIR}\//}/${type}/bad_cnt.${PDY}${cyc}" + echo "${COM_ATMOS_OZNMON/${ROTDIR}\//}/${type}/bad_diag.${PDY}${cyc}" + echo "${COM_ATMOS_OZNMON/${ROTDIR}\//}/${type}/bad_pen.${PDY}${cyc}" + fi + subtyplist="gome_metop-b omi_aura ompslp_npp ompsnp_n20 ompsnp_npp ompstc8_n20 ompstc8_npp sbuv2_n19" + for subtype in ${subtyplist}; do + echo "${COM_ATMOS_OZNMON/${ROTDIR}\//}/${type}/${subtype}.anl.${PDY}${cyc}.ieee_d${suffix}" + echo "${COM_ATMOS_OZNMON/${ROTDIR}\//}/${type}/${subtype}.anl.ctl" + echo "${COM_ATMOS_OZNMON/${ROTDIR}\//}/${type}/${subtype}.ges.${PDY}${cyc}.ieee_d${suffix}" + echo "${COM_ATMOS_OZNMON/${ROTDIR}\//}/${type}/${subtype}.ges.ctl" + done + echo "${COM_ATMOS_OZNMON/${ROTDIR}\//}/${type}/stdout.${type}.tar.gz" + done + fi - fh=0 - while [ $fh -le 9 ]; do - fhr=$(printf %03i $fh) - echo "${dirname}${head}sfluxgrbf${fhr}.grib2 " >>gdas.txt - echo "${dirname}${head}sfluxgrbf${fhr}.grib2.idx " >>gdas.txt - echo "${dirname}${head}pgrb2.0p25.f${fhr} " >>gdas.txt - echo "${dirname}${head}pgrb2.0p25.f${fhr}.idx " >>gdas.txt - echo "${dirname}${head}pgrb2.1p00.f${fhr} " >>gdas.txt - echo "${dirname}${head}pgrb2.1p00.f${fhr}.idx " >>gdas.txt - echo "${dirname}${head}logf${fhr}.txt " >>gdas.txt - echo "${dirname}${head}atmf${fhr}${SUFFIX} " >>gdas.txt - echo "${dirname}${head}sfcf${fhr}${SUFFIX} " >>gdas.txt - fh=$((fh+3)) - done - flist="001 002 004 005 007 008" - for fhr in $flist; do - echo "${dirname}${head}sfluxgrbf${fhr}.grib2 " >>gdas.txt - echo "${dirname}${head}sfluxgrbf${fhr}.grib2.idx " >>gdas.txt - done - + if [[ ${DO_VERFRAD} = "YES" ]]; then + echo "${COM_ATMOS_RADMON/${ROTDIR}\//}/bad_diag.${PDY}${cyc}" + echo "${COM_ATMOS_RADMON/${ROTDIR}\//}/bad_pen.${PDY}${cyc}" + echo "${COM_ATMOS_RADMON/${ROTDIR}\//}/low_count.${PDY}${cyc}" + echo "${COM_ATMOS_RADMON/${ROTDIR}\//}/radmon_angle.tar.gz" + echo "${COM_ATMOS_RADMON/${ROTDIR}\//}/radmon_bcoef.tar.gz" + echo "${COM_ATMOS_RADMON/${ROTDIR}\//}/radmon_bcor.tar.gz" + echo "${COM_ATMOS_RADMON/${ROTDIR}\//}/radmon_time.tar.gz" + echo "${COM_ATMOS_RADMON/${ROTDIR}\//}/warning.${PDY}${cyc}" + fi + + if [[ ${DO_VMINMON} = "YES" ]]; then + echo "${COM_ATMOS_MINMON/${ROTDIR}\//}/${PDY}${cyc}.costs.txt" + echo "${COM_ATMOS_MINMON/${ROTDIR}\//}/${PDY}${cyc}.cost_terms.txt" + echo "${COM_ATMOS_MINMON/${ROTDIR}\//}/${PDY}${cyc}.gnorms.ieee_d" + echo "${COM_ATMOS_MINMON/${ROTDIR}\//}/${PDY}${cyc}.reduction.ieee_d" + echo "${COM_ATMOS_MINMON/${ROTDIR}\//}/gnorm_data.txt" + fi + } >> "${DATA}/gdas.txt" #.................. - if [ -s $ROTDIR/${dirpath}${head}cnvstat ]; then - echo "${dirname}${head}cnvstat " >>gdas_restarta.txt + if [[ -s "${COM_ATMOS_ANALYSIS}/${head}cnvstat" ]]; then + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}cnvstat" >> "${DATA}/gdas_restarta.txt" fi - if [ -s $ROTDIR/${dirpath}${head}radstat ]; then - echo "${dirname}${head}radstat " >>gdas_restarta.txt + if [[ -s "${COM_ATMOS_ANALYSIS}/${head}radstat" ]]; then + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}radstat" >> "${DATA}/gdas_restarta.txt" fi - echo "${dirname}${head}nsstbufr " >>gdas_restarta.txt - echo "${dirname}${head}prepbufr " >>gdas_restarta.txt - echo "${dirname}${head}prepbufr_pre-qc " >>gdas_restarta.txt - echo "${dirname}${head}prepbufr.acft_profiles " >>gdas_restarta.txt - echo "${dirname}${head}abias " >>gdas_restarta.txt - echo "${dirname}${head}abias_air " >>gdas_restarta.txt - echo "${dirname}${head}abias_int " >>gdas_restarta.txt - echo "${dirname}${head}abias_pc " >>gdas_restarta.txt - echo "${dirname}${head}atmi*nc " >>gdas_restarta.txt - echo "${dirname}${head}dtfanl.nc " >>gdas_restarta.txt - echo "${dirname}${head}loginc.txt " >>gdas_restarta.txt - - echo "${dirname}RESTART/*0000.sfcanl_data.tile1.nc " >>gdas_restarta.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile2.nc " >>gdas_restarta.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile3.nc " >>gdas_restarta.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile4.nc " >>gdas_restarta.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile5.nc " >>gdas_restarta.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile6.nc " >>gdas_restarta.txt + { + gsiob_files=("nsstbufr" + "prepbufr" + "prepbufr.acft_profiles") + for file in "${gsiob_files[@]}"; do + [[ -s ${COM_OBS}/${head}${file} ]] && echo "${COM_OBS/${ROTDIR}\//}/${head}${file}" + done + + gsida_files=("abias" + "abias_air" + "abias_int" + "abias_pc" + "dtfanl.nc" + "loginc.txt") + for file in "${gsida_files[@]}"; do + [[ -s ${COM_ATMOS_ANALYSIS}/${head}${file} ]] && echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}${file}" + done + + ufsda_files=("amsua_n19.satbias.nc4" + "amsua_n19.satbias_cov.nc4" + "amsua_n19.tlapse.txt") + for file in "${ufsda_files[@]}"; do + [[ -s ${COM_ATMOS_ANALYSIS}/${head}${file} ]] && echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}${file}" + done + + echo "${COM_ATMOS_ANALYSIS/${ROTDIR}\//}/${head}atmi*nc" + + echo "${COM_ATMOS_RESTART/${ROTDIR}\//}/*0000.sfcanl_data.tile1.nc" + echo "${COM_ATMOS_RESTART/${ROTDIR}\//}/*0000.sfcanl_data.tile2.nc" + echo "${COM_ATMOS_RESTART/${ROTDIR}\//}/*0000.sfcanl_data.tile3.nc" + echo "${COM_ATMOS_RESTART/${ROTDIR}\//}/*0000.sfcanl_data.tile4.nc" + echo "${COM_ATMOS_RESTART/${ROTDIR}\//}/*0000.sfcanl_data.tile5.nc" + echo "${COM_ATMOS_RESTART/${ROTDIR}\//}/*0000.sfcanl_data.tile6.nc" + } >> "${DATA}/gdas_restarta.txt" #.................. - echo "${dirname}RESTART " >>gdas_restartb.txt + echo "${COM_ATMOS_RESTART/${ROTDIR}\//}" >> "${DATA}/gdas_restartb.txt" #.................. - if [ $DO_WAVE = "YES" ]; then - - rm -rf gdaswave.txt - touch gdaswave.txt - rm -rf gdaswave_restart.txt - touch gdaswave_restart.txt + if [[ ${DO_WAVE} = "YES" ]]; then - dirpath="gdas.${PDY}/${cyc}/wave/" - dirname="./${dirpath}" + rm -rf "${DATA}/gdaswave.txt" + touch "${DATA}/gdaswave.txt" + rm -rf "${DATA}/gdaswave_restart.txt" + touch "${DATA}/gdaswave_restart.txt" head="gdaswave.t${cyc}z." #........................... - echo "${dirname}gridded/${head}* " >>gdaswave.txt - echo "${dirname}station/${head}* " >>gdaswave.txt + { + echo "${COM_WAVE_GRID/${ROTDIR}\//}/${head}*" + echo "${COM_WAVE_STATION/${ROTDIR}\//}/${head}*" + } >> "${DATA}/gdaswave.txt" + + echo "${COM_WAVE_RESTART/${ROTDIR}\//}/*" >> "${DATA}/gdaswave_restart.txt" + + fi - echo "${dirname}restart/* " >>gdaswave_restart.txt + #.................. + if [[ ${DO_OCN} = "YES" ]]; then + + rm -rf "${DATA}/gdasocean.txt" + touch "${DATA}/gdasocean.txt" + rm -rf "${DATA}/gdasocean_restart.txt" + touch "${DATA}/gdasocean_restart.txt" + + head="gdas.t${cyc}z." + + #........................... + { + echo "${COM_OCEAN_HISTORY/${ROTDIR}\//}/${head}*" + echo "${COM_OCEAN_INPUT/${ROTDIR}\//}" + } >> "${DATA}/gdasocean.txt" + + { + echo "${COM_OCEAN_RESTART/${ROTDIR}\//}/*" + echo "${COM_MED_RESTART/${ROTDIR}\//}/*" + } >> "${DATA}/gdasocean_restart.txt" + + { + echo "${COM_OCEAN_ANALYSIS/${ROTDIR}\//}/${head}*" + echo "${COM_OCEAN_ANALYSIS/${ROTDIR}\//}/gdas.t??z.ocngrid.nc" + echo "${COM_OCEAN_ANALYSIS/${ROTDIR}\//}/diags" + echo "${COM_OCEAN_ANALYSIS/${ROTDIR}\//}/yaml" + } >> "${DATA}/gdasocean_analysis.txt" fi + if [[ ${DO_ICE} = "YES" ]]; then + + rm -rf "${DATA}/gdasice.txt" + touch "${DATA}/gdasice.txt" + rm -rf "${DATA}/gdasice_restart.txt" + touch "${DATA}/gdasice_restart.txt" + + head="gdas.t${cyc}z." + + #........................... + { + echo "${COM_ICE_HISTORY/${ROTDIR}\//}/${head}*" + echo "${COM_ICE_INPUT/${ROTDIR}\//}/ice_in" + } >> "${DATA}/gdasice.txt" + + echo "${COM_ICE_RESTART/${ROTDIR}\//}/*" >> "${DATA}/gdasice_restart.txt" + + fi + #----------------------------------------------------- fi ##end of gdas @@ -293,159 +557,185 @@ fi ##end of gdas #----------------------------------------------------- -if [ $type = "enkfgdas" -o $type = "enkfgfs" ]; then +if [[ ${type} == "enkfgdas" || ${type} == "enkfgfs" ]]; then #----------------------------------------------------- IAUFHRS_ENKF=${IAUFHRS_ENKF:-6} lobsdiag_forenkf=${lobsdiag_forenkf:-".false."} - nfhrs=`echo $IAUFHRS_ENKF | sed 's/,/ /g'` - NMEM_ENKF=${NMEM_ENKF:-80} + IFS=',' read -ra nfhrs <<< ${IAUFHRS_ENKF} + NMEM_ENS=${NMEM_ENS:-80} NMEM_EARCGRP=${NMEM_EARCGRP:-10} ##number of ens memebers included in each tarball - NTARS=$((NMEM_ENKF/NMEM_EARCGRP)) - [[ $NTARS -eq 0 ]] && NTARS=1 - [[ $((NTARS*NMEM_EARCGRP)) -lt $NMEM_ENKF ]] && NTARS=$((NTARS+1)) -##NTARS2=$((NTARS/2)) # number of earc groups to include analysis/increments - NTARS2=$NTARS + NTARS=$((NMEM_ENS/NMEM_EARCGRP)) + [[ ${NTARS} -eq 0 ]] && NTARS=1 + [[ $((NTARS*NMEM_EARCGRP)) -lt ${NMEM_ENS} ]] && NTARS=$((NTARS+1)) + ##NTARS2=$((NTARS/2)) # number of earc groups to include analysis/increments + NTARS2=${NTARS} - dirpath="enkf${CDUMP}.${PDY}/${cyc}/atmos/" - dirname="./${dirpath}" - head="${CDUMP}.t${cyc}z." + head="${RUN}.t${cyc}z." #.................. - rm -f enkf${CDUMP}.txt - touch enkf${CDUMP}.txt - - echo "${dirname}${head}enkfstat " >>enkf${CDUMP}.txt - echo "${dirname}${head}gsistat.ensmean " >>enkf${CDUMP}.txt - if [ -s $ROTDIR/${dirpath}${head}cnvstat.ensmean ]; then - echo "${dirname}${head}cnvstat.ensmean " >>enkf${CDUMP}.txt - fi - if [ -s $ROTDIR/${dirpath}${head}oznstat.ensmean ]; then - echo "${dirname}${head}oznstat.ensmean " >>enkf${CDUMP}.txt - fi - if [ -s $ROTDIR/${dirpath}${head}radstat.ensmean ]; then - echo "${dirname}${head}radstat.ensmean " >>enkf${CDUMP}.txt - fi - for FHR in $nfhrs; do # loop over analysis times in window - if [ $FHR -eq 6 ]; then - if [ -s $ROTDIR/${dirpath}${head}atmanl.ensmean${SUFFIX} ]; then - echo "${dirname}${head}atmanl.ensmean${SUFFIX} " >>enkf${CDUMP}.txt - fi - if [ -s $ROTDIR/${dirpath}${head}atminc.ensmean${SUFFIX} ]; then - echo "${dirname}${head}atminc.ensmean${SUFFIX} " >>enkf${CDUMP}.txt + rm -f "${DATA}/${RUN}.txt" + touch "${DATA}/${RUN}.txt" + + { + gsida_files=("enkfstat" + "gsistat.ensmean" + "cnvstat.ensmean" + "oznstat.ensmean" + "radstat.ensmean") + for file in "${gsida_files[@]}"; do + [[ -s ${COM_ATMOS_ANALYSIS_ENSSTAT}/${head}${file} ]] && echo "${COM_ATMOS_ANALYSIS_ENSSTAT/${ROTDIR}\//}/${head}${file}" + done + + ufsda_files=("atmens.yaml" + "atmensstat") + for file in "${ufsda_files[@]}"; do + [[ -s ${COM_ATMOS_ANALYSIS_ENSSTAT}/${head}${file} ]] && echo "${COM_ATMOS_ANALYSIS_ENSSTAT/${ROTDIR}\//}/${head}${file}" + done + + for FHR in "${nfhrs[@]}"; do # loop over analysis times in window + if [[ ${FHR} -eq 6 ]]; then + if [[ -s "${COM_ATMOS_ANALYSIS_ENSSTAT}/${head}atmanl.ensmean.nc" ]]; then + echo "${COM_ATMOS_ANALYSIS_ENSSTAT/${ROTDIR}\//}/${head}atmanl.ensmean.nc" fi - else - if [ -s $ROTDIR/${dirpath}${head}atma00${FHR}.ensmean${SUFFIX} ]; then - echo "${dirname}${head}atma00${FHR}.ensmean${SUFFIX} " >>enkf${CDUMP}.txt + if [[ -s "${COM_ATMOS_ANALYSIS_ENSSTAT}/${head}atminc.ensmean.nc" ]]; then + echo "${COM_ATMOS_ANALYSIS_ENSSTAT/${ROTDIR}\//}/${head}atminc.ensmean.nc" fi - if [ -s $ROTDIR/${dirpath}${head}atmi00${FHR}.ensmean${SUFFIX} ]; then - echo "${dirname}${head}atmi00${FHR}.ensmean${SUFFIX} " >>enkf${CDUMP}.txt + else + if [[ -s "${COM_ATMOS_ANALYSIS_ENSSTAT}/${head}atma00${FHR}.ensmean.nc" ]]; then + echo "${COM_ATMOS_ANALYSIS_ENSSTAT/${ROTDIR}\//}/${head}atma00${FHR}.ensmean.nc" + fi + if [[ -s "${COM_ATMOS_ANALYSIS_ENSSTAT}/${head}atmi00${FHR}.ensmean.nc" ]]; then + echo "${COM_ATMOS_ANALYSIS_ENSSTAT/${ROTDIR}\//}/${head}atmi00${FHR}.ensmean.nc" fi - fi - done # loop over FHR - for fstep in eobs eomg ecen esfc eupd efcs epos ; do - echo "logs/${CDATE}/${CDUMP}${fstep}*.log " >>enkf${CDUMP}.txt - done - - -# Ensemble spread file only available with netcdf output - fh=3 - while [ $fh -le 9 ]; do - fhr=$(printf %03i $fh) - echo "${dirname}${head}atmf${fhr}.ensmean${SUFFIX} " >>enkf${CDUMP}.txt - echo "${dirname}${head}sfcf${fhr}.ensmean${SUFFIX} " >>enkf${CDUMP}.txt - if [ $OUTPUT_FILE = "netcdf" ]; then - if [ -s $ROTDIR/${dirpath}${head}atmf${fhr}.ensspread${SUFFIX} ]; then - echo "${dirname}${head}atmf${fhr}.ensspread${SUFFIX} " >>enkf${CDUMP}.txt - fi fi - fh=$((fh+3)) - done + done # loop over FHR + for fstep in eobs ecen esfc eupd efcs epos ; do + echo "logs/${PDY}${cyc}/${RUN}${fstep}*.log" + done + + # eomg* are optional jobs + for log in "${ROTDIR}/logs/${PDY}${cyc}/${RUN}eomg"*".log"; do + if [[ -s "${log}" ]]; then + echo "logs/${PDY}${cyc}/${RUN}eomg*.log" + fi + break + done + + # Ensemble spread file only available with netcdf output + fh=3 + while [ $fh -le 9 ]; do + fhr=$(printf %03i $fh) + echo "${COM_ATMOS_HISTORY_ENSSTAT/${ROTDIR}\//}/${head}atmf${fhr}.ensmean.nc" + echo "${COM_ATMOS_HISTORY_ENSSTAT/${ROTDIR}\//}/${head}sfcf${fhr}.ensmean.nc" + if [[ -s "${COM_ATMOS_HISTORY_ENSSTAT}/${head}atmf${fhr}.ensspread.nc" ]]; then + echo "${COM_ATMOS_HISTORY_ENSSTAT/${ROTDIR}\//}/${head}atmf${fhr}.ensspread.nc" + fi + fh=$((fh+3)) + done + } >> "${DATA}/${RUN}.txt" #........................... n=1 - while [ $n -le $NTARS ]; do - #........................... + while (( n <= NTARS )); do + #........................... - rm -f enkf${CDUMP}_grp${n}.txt - rm -f enkf${CDUMP}_restarta_grp${n}.txt - rm -f enkf${CDUMP}_restartb_grp${n}.txt - touch enkf${CDUMP}_grp${n}.txt - touch enkf${CDUMP}_restarta_grp${n}.txt - touch enkf${CDUMP}_restartb_grp${n}.txt - - m=1 - while [ $m -le $NMEM_EARCGRP ]; do - nm=$(((n-1)*NMEM_EARCGRP+m)) - mem=$(printf %03i $nm) - dirpath="enkf${CDUMP}.${PDY}/${cyc}/atmos/mem${mem}/" - dirname="./${dirpath}" - head="${CDUMP}.t${cyc}z." - - #--- - for FHR in $nfhrs; do # loop over analysis times in window - if [ $FHR -eq 6 ]; then - if [ $n -le $NTARS2 ]; then - if [ -s $ROTDIR/${dirpath}${head}atmanl${SUFFIX} ] ; then - echo "${dirname}${head}atmanl${SUFFIX} " >>enkf${CDUMP}_grp${n}.txt + rm -f "${DATA}/${RUN}_grp${n}.txt" + rm -f "${DATA}/${RUN}_restarta_grp${n}.txt" + rm -f "${DATA}/${RUN}_restartb_grp${n}.txt" + touch "${DATA}/${RUN}_grp${n}.txt" + touch "${DATA}/${RUN}_restarta_grp${n}.txt" + touch "${DATA}/${RUN}_restartb_grp${n}.txt" + + m=1 + while (( m <= NMEM_EARCGRP )); do + nm=$(((n-1)*NMEM_EARCGRP+m)) + mem=$(printf %03i ${nm}) + head="${RUN}.t${cyc}z." + + MEMDIR="mem${mem}" YMD=${PDY} HH=${cyc} generate_com \ + COM_ATMOS_ANALYSIS_MEM:COM_ATMOS_ANALYSIS_TMPL \ + COM_ATMOS_RESTART_MEM:COM_ATMOS_RESTART_TMPL \ + COM_ATMOS_HISTORY_MEM:COM_ATMOS_HISTORY_TMPL + + #--- + for FHR in "${nfhrs[@]}"; do # loop over analysis times in window + if [ "${FHR}" -eq 6 ]; then + { + if (( n <= NTARS2 )); then + if [[ -s "${COM_ATMOS_ANALYSIS_MEM}/${head}atmanl.nc" ]] ; then + echo "${COM_ATMOS_ANALYSIS_MEM/${ROTDIR}\//}/${head}atmanl.nc" + fi + if [[ -s "${COM_ATMOS_ANALYSIS_MEM}/${head}ratminc.nc" ]] ; then + echo "${COM_ATMOS_ANALYSIS_MEM/${ROTDIR}\//}/${head}ratminc.nc" + fi fi - if [ -s $ROTDIR/${dirpath}${head}ratminc${SUFFIX} ] ; then - echo "${dirname}${head}ratminc${SUFFIX} " >>enkf${CDUMP}_grp${n}.txt - fi - fi - if [ -s $ROTDIR/${dirpath}${head}ratminc${SUFFIX} ] ; then - echo "${dirname}${head}ratminc${SUFFIX} " >>enkf${CDUMP}_restarta_grp${n}.txt - fi + } >> "${DATA}/${RUN}_grp${n}.txt" - else - if [ $n -le $NTARS2 ]; then - if [ -s $ROTDIR/${dirpath}${head}atma00${FHR}${SUFFIX} ] ; then - echo "${dirname}${head}atma00${FHR}${SUFFIX} " >>enkf${CDUMP}_grp${n}.txt - fi - if [ -s $ROTDIR/${dirpath}${head}ratmi00${FHR}${SUFFIX} ] ; then - echo "${dirname}${head}ratmi00${FHR}${SUFFIX} " >>enkf${CDUMP}_grp${n}.txt + if [[ -s "${COM_ATMOS_ANALYSIS_MEM}/${head}ratminc.nc" ]] ; then + echo "${COM_ATMOS_ANALYSIS_MEM/${ROTDIR}\//}/${head}ratminc.nc" \ + >> "${DATA}/${RUN}_restarta_grp${n}.txt" + fi + + else + { + if (( n <= NTARS2 )); then + if [[ -s "${COM_ATMOS_ANALYSIS_MEM}/${head}atma00${FHR}.nc" ]] ; then + echo "${COM_ATMOS_ANALYSIS_MEM/${ROTDIR}\//}/${head}atma00${FHR}.nc" + fi + if [[ -s "${COM_ATMOS_ANALYSIS_MEM}/${head}ratmi00${FHR}.nc" ]] ; then + echo "${COM_ATMOS_ANALYSIS_MEM/${ROTDIR}\//}/${head}ratmi00${FHR}.nc" + fi fi - fi - if [ -s $ROTDIR/${dirpath}${head}ratmi00${FHR}${SUFFIX} ] ; then - echo "${dirname}${head}ratmi00${FHR}${SUFFIX} " >>enkf${CDUMP}_restarta_grp${n}.txt - fi - - fi - echo "${dirname}${head}atmf00${FHR}${SUFFIX} " >>enkf${CDUMP}_grp${n}.txt - if [ $FHR -eq 6 ]; then - echo "${dirname}${head}sfcf00${FHR}${SUFFIX} " >>enkf${CDUMP}_grp${n}.txt + } >> "${DATA}/${RUN}_grp${n}.txt" + if [[ -s "${COM_ATMOS_ANALYSIS_MEM}/${head}ratmi00${FHR}.nc" ]] ; then + echo "${COM_ATMOS_ANALYSIS_MEM/${ROTDIR}\//}/${head}ratmi00${FHR}.nc" \ + >> "${DATA}/${RUN}_restarta_grp${n}.txt" + fi + fi + { + echo "${COM_ATMOS_HISTORY_MEM/${ROTDIR}\//}/${head}atmf00${FHR}.nc" + if (( FHR == 6 )); then + echo "${COM_ATMOS_HISTORY_MEM/${ROTDIR}\//}/${head}sfcf00${FHR}.nc" + fi + } >> "${DATA}/${RUN}_grp${n}.txt" + done # loop over FHR + + if [[ ${lobsdiag_forenkf} == ".false." ]] ; then + { + echo "${COM_ATMOS_RESTART_MEM/${ROTDIR}\//}/${head}gsistat" + if [[ -s "${COM_ATMOS_RESTART_MEM}/${head}cnvstat" ]] ; then + echo "${COM_ATMOS_RESTART_MEM/${ROTDIR}\//}/${head}cnvstat" + fi + } >> "${DATA}/${RUN}_grp${n}.txt" + + { + if [[ -s "${COM_ATMOS_RESTART_MEM}/${head}radstat" ]]; then + echo "${COM_ATMOS_RESTART_MEM/${ROTDIR}\//}/${head}radstat" + fi + if [[ -s "${COM_ATMOS_RESTART_MEM}/${head}cnvstat" ]]; then + echo "${COM_ATMOS_RESTART_MEM/${ROTDIR}\//}/${head}cnvstat" + fi + echo "${COM_ATMOS_RESTART_MEM/${ROTDIR}\//}/${head}abias" + echo "${COM_ATMOS_RESTART_MEM/${ROTDIR}\//}/${head}abias_air" + echo "${COM_ATMOS_RESTART_MEM/${ROTDIR}\//}/${head}abias_int" + echo "${COM_ATMOS_RESTART_MEM/${ROTDIR}\//}/${head}abias_pc" + } >> "${DATA}/${RUN}_restarta_grp${n}.txt" fi - done # loop over FHR - - if [[ lobsdiag_forenkf = ".false." ]] ; then - echo "${dirname}${head}gsistat " >>enkf${CDUMP}_grp${n}.txt - if [ -s $ROTDIR/${dirpath}${head}cnvstat ] ; then - echo "${dirname}${head}cnvstat " >>enkf${CDUMP}_grp${n}.txt - fi - if [ -s $ROTDIR/${dirpath}${head}radstat ]; then - echo "${dirname}${head}radstat " >>enkf${CDUMP}_restarta_grp${n}.txt - fi - if [ -s $ROTDIR/${dirpath}${head}cnvstat ]; then - echo "${dirname}${head}cnvstat " >>enkf${CDUMP}_restarta_grp${n}.txt - fi - echo "${dirname}${head}abias " >>enkf${CDUMP}_restarta_grp${n}.txt - echo "${dirname}${head}abias_air " >>enkf${CDUMP}_restarta_grp${n}.txt - echo "${dirname}${head}abias_int " >>enkf${CDUMP}_restarta_grp${n}.txt - echo "${dirname}${head}abias_pc " >>enkf${CDUMP}_restarta_grp${n}.txt - fi - #--- - echo "${dirname}RESTART/*0000.sfcanl_data.tile1.nc " >>enkf${CDUMP}_restarta_grp${n}.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile2.nc " >>enkf${CDUMP}_restarta_grp${n}.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile3.nc " >>enkf${CDUMP}_restarta_grp${n}.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile4.nc " >>enkf${CDUMP}_restarta_grp${n}.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile5.nc " >>enkf${CDUMP}_restarta_grp${n}.txt - echo "${dirname}RESTART/*0000.sfcanl_data.tile6.nc " >>enkf${CDUMP}_restarta_grp${n}.txt - - #--- - echo "${dirname}RESTART " >>enkf${CDUMP}_restartb_grp${n}.txt - - m=$((m+1)) - done + #--- + { + echo "${COM_ATMOS_RESTART_MEM/${ROTDIR}\//}/*0000.sfcanl_data.tile1.nc" + echo "${COM_ATMOS_RESTART_MEM/${ROTDIR}\//}/*0000.sfcanl_data.tile2.nc" + echo "${COM_ATMOS_RESTART_MEM/${ROTDIR}\//}/*0000.sfcanl_data.tile3.nc" + echo "${COM_ATMOS_RESTART_MEM/${ROTDIR}\//}/*0000.sfcanl_data.tile4.nc" + echo "${COM_ATMOS_RESTART_MEM/${ROTDIR}\//}/*0000.sfcanl_data.tile5.nc" + echo "${COM_ATMOS_RESTART_MEM/${ROTDIR}\//}/*0000.sfcanl_data.tile6.nc" + } >> "${DATA}/${RUN}_restarta_grp${n}.txt" + #--- + echo "${COM_ATMOS_RESTART_MEM/${ROTDIR}\//}" >> "${DATA}/${RUN}_restartb_grp${n}.txt" + + m=$((m+1)) + done #........................... diff --git a/ush/icepost.ncl b/ush/icepost.ncl new file mode 100755 index 0000000000..ad102971c4 --- /dev/null +++ b/ush/icepost.ncl @@ -0,0 +1,382 @@ +;------------------------------------------------------------------ +; Denise.Worthen@noaa.gov (Feb 2019) +; +; This script will remap CICE5 output on the tripole grid to +; a set of rectilinear grids using pre-computed ESMF weights to remap +; the listed fields to the destination grid and write the results +; to a new netCDF file +; +; See ocnpost.ncl for a complete description +; +; Bin.Li@noaa.gov (May 2019) +; This script is revised to be used in the coupled workflow. +; Revised parts are marked by + + load "$NCARG_ROOT/lib/ncarg/nclscripts/esmf/ESMF_regridding.ncl" + +;---------------------------------------------------------------------- +begin + +;************************************************ +; specify parameters +;************************************************ +; + + output_masks = False + ; destination grid sizes and name + dsttype = (/"rect."/) + ;dstgrds = (/"1p0", "0p5", "0p25"/) +; + + ; specify a location to use + ; nemsrc = "/scratch4/NCEPDEV/ocean/save/Denise.Worthen/NEMS_INPUT0.1/ocnicepost/" + ; interpolation methods + methods = (/"bilinear" ,"conserve"/) + ; ocean model output location + ;dirsrc = "/scratch3/NCEPDEV/stmp2/Denise.Worthen/BM1_ice/" + + + ; variables to be regridded with the native tripole stagger location + + varlist = (/ (/ "hi_h", "Ct", "bilinear"/) \ + ,(/ "hs_h", "Ct", "bilinear"/) \ + ,(/ "Tsfc_h", "Ct", "bilinear"/) \ + ,(/ "aice_h", "Ct", "bilinear"/) \ + ,(/ "sst_h", "Ct", "bilinear"/) \ + /) + dims = dimsizes(varlist) + nvars = dims(0) + delete(dims) + ;print(varlist) + + ; vectors to be regridded with the native tripole stagger location + ; and dimensionality + ; note: vectors are always unstaggered using bilinear weights, but can + ; be remapped using conservative + nvpairs = 1 + veclist = new( (/nvpairs,3,2/),"string") + veclist = (/ (/ (/"uvel_h", "vvel_h"/), (/"Bu", "Bu"/), (/"bilinear", "bilinear"/) /) \ + /) + ;print(veclist) + + begTime = get_cpu_time() +;---------------------------------------------------------------------- +; make a list of the directories and files from the run +;---------------------------------------------------------------------- +; idate = "20120101" +; icefilelist = systemfunc("ls "+dirsrc+"gfs."+idate+"/00/"+"ice*.nc") +; icef = addfiles(icefilelist,"r") +; nfiles = dimsizes(icefilelist) +; + + ; get the rotation angle + angleT = icef[0]->ANGLET + + ; get a 2 dimensional fields for creating the interpolation mask + ; the mask2d contain 1's on land and 0's at valid points. + mask2d = where(ismissing(icef[0]->sst_h), 1.0, 0.0) + ;printVarSummary(mask2d) + + ; create conformed rotation arrays to make vector rotations cleaner + angleT2d=conform_dims(dimsizes(mask2d),angleT,(/1,2/)) + +;---------------------------------------------------------------------- +; loop over the output resolutions +;---------------------------------------------------------------------- + + jj = 1 + ii = 0 + + do jj = 0,dimsizes(dstgrds)-1 + ;outres = "_"+dstgrds(jj)+"x"+dstgrds(jj) + outres = dstgrds(jj)+"x"+dstgrds(jj) + outgrid = dstgrds(jj) + + ; regrid a field to obtain the output xy dimensions + wgtsfile = nemsrc+"/"+"tripole.mx025.Ct.to."+dsttype+dstgrds(jj)+".bilinear.nc" + tt = ESMF_regrid_with_weights(angleT,wgtsfile,False) + tt!0 = "lat" + tt!1 = "lon" + lat = tt&lat + lon = tt&lon + dims = dimsizes(tt) + nlat = dims(0) + nlon = dims(1) + print("fields will be remapped to destination grid size "\ + +nlon+" "+nlat) + + delete(tt) + delete(dims) + + ; regrid the masks to obtain the interpolation masks. + ; the mask2d contain 1's on land and 0's at valid points. + ; when remapped, any mask value > 0 identifies land values that + ; have crept into the field. remapped model fields are then + ; masked with this interpolation mask + + wgtsfile = nemsrc+"/"+"tripole.mx025.Ct.to."+dsttype+dstgrds(jj)+".bilinear.nc" + rgmask2d = ESMF_regrid_with_weights(mask2d, wgtsfile,False) + + if(output_masks)then + testfile = "masks_"+dstgrds(jj)+".nc" + system("/bin/rm -f "+testfile) + ; create + testcdf = addfile(testfile,"c") + testcdf->rgmask2d = rgmask2d + ; close + delete(testcdf) + end if + + ; create the interpolation mask + rgmask2d = where(rgmask2d .gt. 0.0, rgmask2d@_FillValue, 1.0) + +;---------------------------------------------------------------------- +; loop over each file in the icefilelist +;---------------------------------------------------------------------- +; + ; retrieve the time stamp + time = icef[0]->time + delete(time@bounds) + +;---------------------------------------------------------------------- +; set up the output netcdf file +;---------------------------------------------------------------------- +; system("/bin/rm -f " + outfile) ; remove if exists +; outcdf = addfile (outfile, "c") ; open output file +; +; + + ; explicitly declare file definition mode. Improve efficiency. + setfileoption(outcdf,"DefineMode",True) + + ; create global attributes of the file + fAtt = True ; assign file attributes + fAtt@creation_date = systemfunc ("date") + fAtt@source_file = infile + fileattdef( outcdf, fAtt ) ; copy file attributes + + ; predefine the coordinate variables and their dimensionality + dimNames = (/"time", "lat", "lon"/) + dimSizes = (/ -1 , nlat, nlon/) + dimUnlim = (/ True , False, False/) + filedimdef(outcdf,dimNames,dimSizes,dimUnlim) + + ; predefine the the dimensionality of the variables to be written out + filevardef(outcdf, "time", typeof(time), getvardims(time)) + filevardef(outcdf, "lat", typeof(lat), getvardims(lat)) + filevardef(outcdf, "lon", typeof(lon), getvardims(lon)) + + ; Copy attributes associated with each variable to the file + filevarattdef(outcdf, "time", time) + filevarattdef(outcdf, "lat", lat) + filevarattdef(outcdf, "lon", lon) + + ; predefine variables + do nv = 0,nvars-1 + varname = varlist(nv,0) + odims = (/"time", "lat", "lon"/) + ;print("creating variable "+varname+" in file") + filevardef(outcdf, varname, "float", odims) + delete(odims) + end do + + do nv = 0,nvpairs-1 + do nn = 0,1 + vecname = veclist(nv,0,nn) + odims = (/"time", "lat", "lon"/) + ;print("creating variable "+vecname+" in file") + filevardef(outcdf, vecname, "float", odims) + delete(odims) + end do + end do + + ; explicitly exit file definition mode. + setfileoption(outcdf,"DefineMode",False) + + lat=lat(::-1) + ; write the dimensions to the file + outcdf->time = (/time/) + outcdf->lat = (/lat/) + outcdf->lon = (/lon/) + +;---------------------------------------------------------------------- +; loop over nvars variables +;---------------------------------------------------------------------- + + ;nv = 1 + do nv = 0,nvars-1 + varname = varlist(nv,0) + vargrid = varlist(nv,1) + varmeth = varlist(nv,2) + + ;print(nv+" "+varname+" "+vargrid+" "+varmeth) + icevar = icef[ii]->$varname$ + ndims = dimsizes(dimsizes(icevar)) + ;print(ndims+" "+dimsizes(icevar)) + + if(vargrid .ne. "Ct")then + ; print error if the variable is not on the Ct grid + print("Variable is not on Ct grid") + exit + end if + + ; regrid to dsttype+dstgrd with method + ;print("remapping "+varname+" to grid "+dsttype+dstgrds(jj)) + wgtsfile = nemsrc+"/"+"tripole.mx025.Ct.to."+dsttype+dstgrds(jj)+"."+varmeth+".nc" + + rgtt = ESMF_regrid_with_weights(icevar,wgtsfile,False) + rgtt = where(ismissing(rgmask2d),icevar@_FillValue,rgtt) + rgtt=rgtt(:,::-1,:) + + ; enter file definition mode to add variable attributes + setfileoption(outcdf,"DefineMode",True) + filevarattdef(outcdf, varname, rgtt) + setfileoption(outcdf,"DefineMode",False) + + + outcdf->$varname$ = (/rgtt/) + + delete(icevar) + delete(rgtt) + + ; nv, loop over number of variables + end do + +;---------------------------------------------------------------------- +; +;---------------------------------------------------------------------- + + ;nv = 0 + do nv = 0,nvpairs-1 + vecnames = veclist(nv,0,:) + vecgrids = veclist(nv,1,:) + vecmeth = veclist(nv,2,:) + ;print(nv+" "+vecnames+" "+vecgrids+" "+vecmeth) + + ; create a vector pair list + vecpairs = NewList("fifo") + n = 0 + uvel = icef[ii]->$vecnames(n)$ + vecfld = where(ismissing(uvel),0.0,uvel) + copy_VarAtts(uvel,vecfld) + ;print("unstagger "+vecnames(n)+" from "+vecgrids(n)+" to Ct") + wgtsfile = nemsrc+"/"+"tripole.mx025."+vecgrids(n)+".to.Ct.bilinear.nc" + ut = ESMF_regrid_with_weights(vecfld,wgtsfile,False) + delete(ut@remap) + + n = 1 + vvel = icef[ii]->$vecnames(n)$ + vecfld = where(ismissing(vvel),0.0,vvel) + copy_VarAtts(vvel,vecfld) + ;print("unstagger "+vecnames(n)+" from "+vecgrids(n)+" to Ct") + wgtsfile = nemsrc+"/"+"tripole.mx025."+vecgrids(n)+".to.Ct.bilinear.nc" + vt = ESMF_regrid_with_weights(vecfld,wgtsfile,False) + delete(vt@remap) + + ListAppend(vecpairs,ut) + ListAppend(vecpairs,vt) + ;print(vecpairs) + + ; rotate + ; first copy Metadata + urot = vecpairs[0] + vrot = vecpairs[1] + urot = cos(angleT2d)*ut - sin(angleT2d)*vt + vrot = sin(angleT2d)*ut + cos(angleT2d)*vt + + ; change attribute to indicate these are now rotated velocities + urot@long_name=str_sub_str(urot@long_name,"(x)","zonal") + vrot@long_name=str_sub_str(vrot@long_name,"(y)","meridional") + ; copy back + vecpairs[0] = urot + vecpairs[1] = vrot + delete([/urot, vrot/]) + + ; remap + do n = 0,1 + vecfld = vecpairs[n] + ; regrid to dsttype+dstgrd with method + ;print("remapping "+vecnames(n)+" to grid "+dsttype+dstgrds(jj)) + wgtsfile = nemsrc+"/"+"tripole.mx025.Ct.to."+dsttype+dstgrds(jj)+"."+vecmeth(n)+".nc" + + rgtt = ESMF_regrid_with_weights(vecfld,wgtsfile,False) + rgtt = where(ismissing(rgmask2d),vecfld@_FillValue,rgtt) + rgtt=rgtt(:,::-1,:) + + ; enter file definition mode to add variable attributes + setfileoption(outcdf,"DefineMode",True) + filevarattdef(outcdf, vecnames(n), rgtt) + setfileoption(outcdf,"DefineMode",False) + + outcdf->$vecnames(n)$ = (/rgtt/) + delete(rgtt) + end do + delete([/uvel,vvel,ut,vt,vecfld,vecpairs/]) + delete([/vecnames,vecgrids,vecmeth/]) + ; nv, loop over number of vector pairs + end do + +;---------------------------------------------------------------------- +; close the outcdf and continue through filelist +;---------------------------------------------------------------------- + + delete(outcdf) + + ; ii, loop over files + ;end do + ;jj, loop over destination grids + delete([/lat,lon,nlon,nlat/]) + delete([/rgmask2d/]) + end do + print("One complete ice file in " + (get_cpu_time() - begTime) + " seconds") +exit +end diff --git a/ush/interp_atmos_master.sh b/ush/interp_atmos_master.sh new file mode 100755 index 0000000000..0abc6ad185 --- /dev/null +++ b/ush/interp_atmos_master.sh @@ -0,0 +1,59 @@ +#! /usr/bin/env bash + +# This script takes in a master grib file and creates products at various interpolated resolutions +# Generate 0.25 / 0.5 / 1 degree interpolated grib2 files for each input grib2 file +# trim's RH and tweaks sea-ice cover + +source "${HOMEgfs}/ush/preamble.sh" + +input_file=${1:-"pgb2file_in"} # Input pressure grib2 file +output_file_prefix=${2:-"pgb2file_out"} # Prefix for output grib2 file; the prefix is appended by resolution e.g. _0p25 +grid_string=${3:-"0p25"} # Target grids; e.g. "0p25" or "0p25:0p50"; If multiple, they need to be ":" seperated + +WGRIB2=${WGRIB2:-${wgrib2_ROOT}/bin/wgrib2} + +# wgrib2 options for regridding +defaults="-set_grib_type same -set_bitmap 1 -set_grib_max_bits 16" +interp_winds="-new_grid_winds earth" +interp_bilinear="-new_grid_interpolation bilinear" +interp_neighbor="-if :(CSNOW|CRAIN|CFRZR|CICEP|ICSEV): -new_grid_interpolation neighbor -fi" +interp_budget="-if :(APCP|ACPCP|PRATE|CPRAT|DZDT): -new_grid_interpolation budget -fi" +increased_bits="-if :(APCP|ACPCP|PRATE|CPRAT): -set_grib_max_bits 25 -fi" + +# interpolated target grids +# shellcheck disable=SC2034 +grid0p25="latlon 0:1440:0.25 90:721:-0.25" +# shellcheck disable=SC2034 +grid0p50="latlon 0:720:0.5 90:361:-0.5" +# shellcheck disable=SC2034 +grid1p00="latlon 0:360:1.0 90:181:-1.0" + +# "Import" functions used in this script +source "${HOMEgfs}/ush/product_functions.sh" + +# Transform the input ${grid_string} into an array for processing +IFS=':' read -ra grids <<< "${grid_string}" + +output_grids="" +for grid in "${grids[@]}"; do + gridopt="grid${grid}" + output_grids="${output_grids} -new_grid ${!gridopt} ${output_file_prefix}_${grid}" +done + +#shellcheck disable=SC2086 +${WGRIB2} "${input_file}" ${defaults} \ + ${interp_winds} \ + ${interp_bilinear} \ + ${interp_neighbor} \ + ${interp_budget} \ + ${increased_bits} \ + ${output_grids} +export err=$?; err_chk + +# trim and mask for all grids +for grid in "${grids[@]}"; do + trim_rh "${output_file_prefix}_${grid}"; export err=$?; err_chk + mod_icec "${output_file_prefix}_${grid}"; export err=$?; err_chk +done + +exit 0 diff --git a/ush/interp_atmos_sflux.sh b/ush/interp_atmos_sflux.sh new file mode 100755 index 0000000000..516a2f5e4a --- /dev/null +++ b/ush/interp_atmos_sflux.sh @@ -0,0 +1,49 @@ +#! /usr/bin/env bash + +# This script takes in a master flux file and creates interpolated flux files at various interpolated resolutions +# Generate 0.25 / 0.5 / 1 degree interpolated grib2 flux files for each input sflux grib2 file + +source "${HOMEgfs}/ush/preamble.sh" + +input_file=${1:-"sfluxfile_in"} # Input sflux grib2 file +output_file_prefix=${2:-"sfluxfile_out"} # Prefix for output sflux grib2 file; the prefix is appended by resolution e.g. _0p25 +grid_string=${3:-"1p00"} # Target grids; e.g. "0p25" or "0p25:0p50"; If multiple, they need to be ":" seperated + +WGRIB2=${WGRIB2:-${wgrib2_ROOT}/bin/wgrib2} + +# wgrib2 options for regridding +defaults="-set_grib_type same -set_bitmap 1 -set_grib_max_bits 16" +interp_winds="-new_grid_winds earth" +interp_bilinear="-new_grid_interpolation bilinear" +interp_neighbor="-if :(LAND|CSNOW|CRAIN|CFRZR|CICEP|ICSEV): -new_grid_interpolation neighbor -fi" +interp_budget="-if :(APCP|ACPCP|PRATE|CPRAT|DZDT): -new_grid_interpolation budget -fi" +increased_bits="-if :(APCP|ACPCP|PRATE|CPRAT): -set_grib_max_bits 25 -fi" + +# interpolated target grids +# shellcheck disable=SC2034 +grid0p25="latlon 0:1440:0.25 90:721:-0.25" +# shellcheck disable=SC2034 +grid0p50="latlon 0:720:0.5 90:361:-0.5" +# shellcheck disable=SC2034 +grid1p00="latlon 0:360:1.0 90:181:-1.0" + +# Transform the input ${grid_string} into an array for processing +IFS=':' read -ra grids <<< "${grid_string}" + +output_grids="" +for grid in "${grids[@]}"; do + gridopt="grid${grid}" + output_grids="${output_grids} -new_grid ${!gridopt} ${output_file_prefix}_${grid}" +done + +#shellcheck disable=SC2086 +${WGRIB2} "${input_file}" ${defaults} \ + ${interp_winds} \ + ${interp_bilinear} \ + ${interp_neighbor} \ + ${interp_budget} \ + ${increased_bits} \ + ${output_grids} +export err=$?; err_chk + +exit 0 \ No newline at end of file diff --git a/ush/jjob_header.sh b/ush/jjob_header.sh new file mode 100644 index 0000000000..45fa6402ae --- /dev/null +++ b/ush/jjob_header.sh @@ -0,0 +1,115 @@ +#! /usr/bin/env bash +# +# Universal header for global j-jobs +# +# Sets up and completes actions common to all j-jobs: +# - Creates and moves to $DATA after removing any +# existing one unless $WIPE_DATA is set to "NO" +# - Runs `setpdy.sh` +# - Sources configs provided as arguments +# - Sources machine environment script +# - Defines a few other variables +# +# The job name for the environment files should be passed +# in using the `-e` option (required). Any config files +# to be sourced should be passed in as an argument to +# the `-c` option. For example: +# ``` +# jjob_header.sh -e "fcst" -c "base fcst" +# ``` +# Will source `config.base` and `config.fcst`, then pass +# `fcst` to the ${machine}.env script. +# +# Script requires the following variables to already be +# defined in the environment: +# - $HOMEgfs +# - $DATAROOT (unless $DATA is overriden) +# - $jobid +# - $PDY +# - $cyc +# - $machine +# +# Additionally, there are a couple of optional settings that +# can be set before calling the script: +# - $EXPDIR : Override the default $EXPDIR +# [default: ${HOMEgfs}/parm/config] +# - $DATA : Override the default $DATA location +# [default: ${DATAROOT}/${jobid}] +# - $WIPE_DATA : Set whether to delete any existing $DATA +# [default: "YES"] +# - $pid : Override the default process id +# [default: $$] +# + +OPTIND=1 +while getopts "c:e:" option; do + case "${option}" in + c) read -ra configs <<< "${OPTARG}" ;; + e) env_job=${OPTARG} ;; + :) + echo "FATAL [${BASH_SOURCE[0]}]: ${option} requires an argument" + exit 1 + ;; + *) + echo "FATAL [${BASH_SOURCE[0]}]: Unrecognized option: ${option}" + exit 1 + ;; + esac +done +shift $((OPTIND-1)) + +if [[ -z ${env_job} ]]; then + echo "FATAL [${BASH_SOURCE[0]}]: Must specify a job name with -e" + exit 1 +fi + +############################################## +# make temp directory +############################################## +export DATA=${DATA:-"${DATAROOT}/${jobid}"} +if [[ ${WIPE_DATA:-YES} == "YES" ]]; then + rm -rf "${DATA}" +fi +mkdir -p "${DATA}" +cd "${DATA}" || ( echo "FATAL [${BASH_SOURCE[0]}]: ${DATA} does not exist"; exit 1 ) + + +############################################## +# Run setpdy and initialize PDY variables +############################################## +export cycle="t${cyc}z" +setpdy.sh +source ./PDY + + +############################################## +# Determine Job Output Name on System +############################################## +export pid="${pid:-$$}" +export pgmout="OUTPUT.${pid}" +export pgmerr=errfile + + +############################# +# Source relevant config files +############################# +export EXPDIR="${EXPDIR:-${HOMEgfs}/parm/config}" +for config in "${configs[@]:-''}"; do + source "${EXPDIR}/config.${config}" + status=$? + if (( status != 0 )); then + echo "FATAL [${BASH_SOURCE[0]}]: Unable to load config config.${config}" + exit "${status}" + fi +done + + +########################################## +# Source machine runtime environment +########################################## +source "${HOMEgfs}/env/${machine}.env" "${env_job}" +status=$? +if (( status != 0 )); then + echo "FATAL [${BASH_SOURCE[0]}]: Error while sourcing machine environment ${machine}.env for job ${env_job}" + exit "${status}" +fi diff --git a/ush/link_crtm_fix.sh b/ush/link_crtm_fix.sh new file mode 100755 index 0000000000..0d4d8dc55b --- /dev/null +++ b/ush/link_crtm_fix.sh @@ -0,0 +1,37 @@ +#! /usr/bin/env bash + +source "$HOMEgfs/ush/preamble.sh" + +# Get CRTM fix directory from (in this order): +# 1. First argument to script, or +# 2. $FIXCRTM environment variable, or +# 3. Nowhere. Give up. Whine. +FIXCRTM="${1:-${FIXCRTM:-MISSING}}" + +if [[ "$FIXCRTM" == "MISSING" ]] ; then + echo "Please specify CRTM fix location. Giving up." 1>&2 + exit 19 +fi +if [[ ! -d "$FIXCRTM" ]] ; then + echo "$FIXCRTM: \$FIXCRTM is not a directory. Giving up." 1>&2 + exit 38 +fi + +for what in "amsre_aqua" "imgr_g11" "imgr_g12" "imgr_g13" \ + "imgr_g15" "imgr_mt1r" "imgr_mt2" "seviri_m10" \ + "ssmi_f13" "ssmi_f14" "ssmi_f15" "ssmis_f16" \ + "ssmis_f17" "ssmis_f18" "ssmis_f19" "ssmis_f20" \ + "tmi_trmm" "v.seviri_m10" "imgr_insat3d" "abi_gr" "ahi_himawari8" ; do + ln -s "$FIXCRTM/$what.TauCoeff.bin" . + ln -s "$FIXCRTM/$what.SpcCoeff.bin" . +done + +for what in 'Aerosol' 'Cloud' ; do + ln -s "$FIXCRTM/${what}Coeff.bin" . +done + +for what in $FIXCRTM/*Emis* ; do + ln -s $what . +done + +exit 0 diff --git a/ush/load_fv3gfs_modules.sh b/ush/load_fv3gfs_modules.sh index 8972b65753..b4f23fa331 100755 --- a/ush/load_fv3gfs_modules.sh +++ b/ush/load_fv3gfs_modules.sh @@ -1,42 +1,62 @@ -#!/bin/sh -#set -x +#! /usr/bin/env bash ############################################################### +if [[ "${DEBUG_WORKFLOW:-NO}" == "NO" ]]; then + echo "Loading modules quietly..." + set +x +fi + # Setup runtime environment by loading modules ulimit_s=$( ulimit -S -s ) -ulimit -S -s 10000 # Find module command and purge: -source "$HOMEgfs/modulefiles/module-setup.sh.inc" +source "${HOMEgfs}/modulefiles/module-setup.sh.inc" + +# Source versions file for runtime +source "${HOMEgfs}/versions/run.ver" # Load our modules: -module use "$HOMEgfs/modulefiles" +module use "${HOMEgfs}/modulefiles" -if [[ -d /lfs3 ]] ; then - # We are on NOAA Jet - module load module_base.jet +if [[ -d /lfs/f1 ]]; then + # We are on WCOSS2 (Cactus or Dogwood) + module load module_base.wcoss2 +elif [[ -d /mnt/lfs1 ]] ; then + # We are on NOAA Jet + module load module_base.jet elif [[ -d /scratch1 ]] ; then - # We are on NOAA Hera - module load module_base.hera -elif [[ -d /gpfs/hps && -e /etc/SuSE-release ]] ; then - # We are on NOAA Luna or Surge - module load module_base.wcoss_c -elif [[ -L /usrx && "$( readlink /usrx 2> /dev/null )" =~ dell ]] ; then - # We are on NOAA Mars or Venus - module load module_base.wcoss_dell_p3 -elif [[ -d /dcom && -d /hwrf ]] ; then - # We are on NOAA Tide or Gyre - module load module_base.wcoss + # We are on NOAA Hera + module load module_base.hera +elif [[ -d /work ]] ; then + # We are on MSU Orion or Hercules + if [[ -d /apps/other ]] ; then + # Hercules + module load module_base.hercules + else + # Orion + module load module_base.orion + fi elif [[ -d /glade ]] ; then - # We are on NCAR Yellowstone - module load module_base.cheyenne + # We are on NCAR Yellowstone + module load module_base.cheyenne elif [[ -d /lustre && -d /ncrc ]] ; then - # We are on GAEA. - module load module_base.gaea + # We are on GAEA. + module load module_base.gaea +elif [[ -d /data/prod ]] ; then + # We are on SSEC S4 + module load module_base.s4 else - echo WARNING: UNKNOWN PLATFORM + echo WARNING: UNKNOWN PLATFORM fi +module list + # Restore stack soft limit: -ulimit -S -s "$ulimit_s" +ulimit -S -s "${ulimit_s}" unset ulimit_s + +# If this function exists in the environment, run it; else do not +ftype=$(type -t set_trace || echo "") +if [[ "${ftype}" == "function" ]]; then + set_trace +fi diff --git a/ush/load_ufsda_modules.sh b/ush/load_ufsda_modules.sh new file mode 100755 index 0000000000..da8e2d8096 --- /dev/null +++ b/ush/load_ufsda_modules.sh @@ -0,0 +1,85 @@ +#! /usr/bin/env bash + +############################################################### +if [[ "${DEBUG_WORKFLOW:-NO}" == "NO" ]]; then + echo "Loading modules quietly..." + set +x +fi + +# Read optional module argument, default is to use GDAS +MODS="GDAS" +if [[ $# -gt 0 ]]; then + case "$1" in + --eva) + MODS="EVA" + ;; + --gdas) + MODS="GDAS" + ;; + *) + echo "Invalid option: $1" >&2 + exit 1 + ;; + esac +fi + +# Setup runtime environment by loading modules +ulimit_s=$( ulimit -S -s ) + +# Find module command and purge: +source "${HOMEgfs}/modulefiles/module-setup.sh.inc" + +# Load our modules: +module use "${HOMEgfs}/sorc/gdas.cd/modulefiles" + +if [[ -d /lfs/f1 ]]; then + # We are on WCOSS2 (Cactus or Dogwood) + echo WARNING: UFSDA NOT SUPPORTED ON THIS PLATFORM +elif [[ -d /lfs3 ]] ; then + # We are on NOAA Jet + echo WARNING: UFSDA NOT SUPPORTED ON THIS PLATFORM +elif [[ -d /scratch1 ]] ; then + # We are on NOAA Hera + module load "${MODS}/hera" + # set NETCDF variable based on ncdump location + NETCDF=$( which ncdump ) + export NETCDF + # prod_util stuff, find a better solution later... + module use /scratch2/NCEPDEV/nwprod/hpc-stack/libs/hpc-stack/modulefiles/compiler/intel/2022.1.2/ + module load prod_util +elif [[ -d /work ]] ; then + # We are on MSU Orion + # prod_util stuff, find a better solution later... + #module use /apps/contrib/NCEP/hpc-stack/libs/hpc-stack/modulefiles/compiler/intel/2022.1.2/ + #module load prod_util + export UTILROOT=/work2/noaa/da/python/opt/intel-2022.1.2/prod_util/1.2.2 + export MDATE=/work2/noaa/da/python/opt/intel-2022.1.2/prod_util/1.2.2/bin/mdate + export NDATE=/work2/noaa/da/python/opt/intel-2022.1.2/prod_util/1.2.2/bin/ndate + export NHOUR=/work2/noaa/da/python/opt/intel-2022.1.2/prod_util/1.2.2/bin/nhour + export FSYNC=/work2/noaa/da/python/opt/intel-2022.1.2/prod_util/1.2.2/bin/fsync_file + module load "${MODS}/orion" + # set NETCDF variable based on ncdump location + ncdump=$( which ncdump ) + NETCDF=$( echo "${ncdump}" | cut -d " " -f 3 ) + export NETCDF +elif [[ -d /glade ]] ; then + # We are on NCAR Yellowstone + echo WARNING: UFSDA NOT SUPPORTED ON THIS PLATFORM +elif [[ -d /lustre && -d /ncrc ]] ; then + # We are on GAEA. + echo WARNING: UFSDA NOT SUPPORTED ON THIS PLATFORM +elif [[ -d /data/prod ]] ; then + # We are on SSEC S4 + echo WARNING: UFSDA NOT SUPPORTED ON THIS PLATFORM +else + echo WARNING: UNKNOWN PLATFORM +fi + +module list +pip list + +# Restore stack soft limit: +ulimit -S -s "${ulimit_s}" +unset ulimit_s + +set_trace diff --git a/ush/load_ufswm_modules.sh b/ush/load_ufswm_modules.sh new file mode 100755 index 0000000000..da3ab61818 --- /dev/null +++ b/ush/load_ufswm_modules.sh @@ -0,0 +1,67 @@ +#! /usr/bin/env bash + +############################################################### +if [[ "${DEBUG_WORKFLOW:-NO}" == "NO" ]]; then + echo "Loading modules quietly..." + set +x +fi + +# Setup runtime environment by loading modules +ulimit_s=$( ulimit -S -s ) + +source "${HOMEgfs}/ush/detect_machine.sh" +source "${HOMEgfs}/ush/module-setup.sh" +if [[ "${MACHINE_ID}" != "noaacloud" ]]; then + module use "${HOMEgfs}/sorc/ufs_model.fd/tests" + module load modules.ufs_model.lua + module load prod_util + if [[ "${MACHINE_ID}" = "wcoss2" ]]; then + module load cray-pals + module load cfp + module load libjpeg + module load craype-network-ucx + module load cray-mpich-ucx + else + export UTILROOT=${prod_util_ROOT} + fi + module load wgrib2 + export WGRIB2=wgrib2 +fi +if [[ "${MACHINE_ID}" == "noaacloud" ]]; then + if [[ "${PW_CSP:-}" = "aws" ]]; then + + # TODO: This can be cleaned-up; most of this is a hack for now. + module use "/contrib/spack-stack/envs/ufswm/install/modulefiles/Core" + module load "stack-intel" + module load "stack-intel-oneapi-mpi" + module use -a "/contrib/spack-stack/miniconda/modulefiles/miniconda/" + module load "py39_4.12.0" + module load "ufs-weather-model-env/1.0.0" + export NETCDF="/contrib/spack-stack/miniconda/apps/miniconda/py39_4.12.0" + # TODO: Are there plans for EPIC to maintain this package or should GW provide support? + export UTILROOT="/contrib/global-workflow/NCEPLIBS-prod_util" + export PATH="${PATH}:/contrib/global-workflow/bin" + ndate_path="$(command -v ndate)" + export NDATE="${ndate_path}" + fi +fi + +module list +unset MACHINE_ID + +############################################################### +# exglobal_forecast.py requires the following in PYTHONPATH +# This will be moved to a module load when ready +wxflowPATH="${HOMEgfs}/ush/python:${HOMEgfs}/ush/python/wxflow/src:${HOMEgfs}/ush/python/pygfs" +PYTHONPATH="${PYTHONPATH:+${PYTHONPATH}:}${wxflowPATH}" +export PYTHONPATH + +# Restore stack soft limit: +ulimit -S -s "${ulimit_s}" +unset ulimit_s + +# If this function exists in the environment, run it; else do not +ftype=$(type -t set_trace || echo "") +if [[ "${ftype}" == "function" ]]; then + set_trace +fi diff --git a/ush/merge_fv3_aerosol_tile.py b/ush/merge_fv3_aerosol_tile.py new file mode 100755 index 0000000000..decf6e9cba --- /dev/null +++ b/ush/merge_fv3_aerosol_tile.py @@ -0,0 +1,189 @@ +#!/usr/bin/env python3 +""" +Appends tracer data from one NetCDF file to another and updates the tracer +count. + +usage: merge_fv3_chem_tile.py [-h] atm_file chem_file core_file ctrl_file rest_file variable_file [out_file] + +Appends tracer data from one NetCDF file to another and updates the tracer +count. + +positional arguments: + atm_file File containing the atmospheric initial conditions data + chem_file File containing the chemistry tracer data to be added + core_file File containing the dycore sigma level coefficients + ctrl_file File containing the sigma level coefficients for atmospheric IC data + rest_file File containing the pressure level thickness for the restart state + variable_file File containing list of tracer variable_names in the chem_file + to add to the atm_file, one tracer per line + out_file Name of file to create. If none is specified, the atm_file will be + edited in place. New file will be a copy of atm_file with the + specificed tracers listed in variable_file appended from chem_file + and ntracers updated. + +optional arguments: + -h, --help show this help message and exit + +""" +import os +import sys +import subprocess +from typing import List +from functools import partial +from shutil import copyfile +import argparse +import numpy as np +import netCDF4 + +# Make sure print statements are flushed immediately, otherwise +# print statments may be out-of-order with subprocess output +print = partial(print, flush=True) + + +def merge_tile(base_file_name: str, ctrl_file_name: str, core_file_name: str, rest_file_name: str, append_file_name: str, tracers_to_append: List[str]) -> None: + if not os.path.isfile(base_file_name): + print("FATAL ERROR: Atmosphere file " + base_file_name + " does not exist!") + sys.exit(102) + + if not os.path.isfile(ctrl_file_name): + print("FATAL ERROR: Atmosphere control file " + ctrl_file_name + " does not exist!") + sys.exit(103) + + if not os.path.isfile(core_file_name): + print("FATAL ERROR: Dycore file " + core_file_name + " does not exist!") + sys.exit(104) + + if not os.path.isfile(rest_file_name): + print("FATAL ERROR: Atmosphere restart file " + rest_file_name + " does not exist!") + sys.exit(105) + + if not os.path.isfile(append_file_name): + print("FATAL ERROR: Chemistry file " + append_file_name + " does not exist!") + sys.exit(106) + + append_file = netCDF4.Dataset(append_file_name, "r") + base_file = netCDF4.Dataset(base_file_name, "r+") + core_file = netCDF4.Dataset(core_file_name, "r") + ctrl_file = netCDF4.Dataset(ctrl_file_name, "r") + rest_file = netCDF4.Dataset(rest_file_name, "r") + + # read pressure layer thickness from restart file + delp = rest_file["delp"][0, :] + # read a, b coefficients to generate sigma levels + ak = core_file["ak"][0, :] + bk = core_file["bk"][0, :] + + # read surface pressure from initial conditions file + psfc = base_file["ps"][:, :] + # read sigma-level a, b coefficients from initial conditions control file + ai = ctrl_file["vcoord"][0, 1:] + bi = ctrl_file["vcoord"][1, 1:] + + # IC sigma levels must match model restart sigma levels + if ak.size != ai.size: + print("FATAL ERROR: Inconsistent size of A(k) arrays: src=", ak.size, ", dst=", ai.size) + sys.exit(107) + + if bk.size != bi.size: + print("FATAL ERROR: Inconsistent size of B(k) arrays: src=", bk.size, ", dst=", bi.size) + sys.exit(108) + + if not np.array_equal(ak, ai): + print("FATAL ERROR: A(k) coefficients must be identical") + sys.exit(109) + + if not np.array_equal(bk, bi): + print("FATAL ERROR: B(k) coefficients must be identical") + sys.exit(110) + + dp = np.zeros(delp.shape) + for k in range(0, dp.shape[0]): + dp[k, :, :] = ak[k + 1] - ak[k] + psfc * (bk[k + 1] - bk[k]) + + scale_factor = delp / dp + + # print(base_file) + # print(base_file.dimensions["ntracer"]) + + old_ntracer = base_file.dimensions["ntracer"].size + new_ntracer = old_ntracer + + print("Adding the following variables to " + base_file_name + ":\n") + + print(" Name | Total mass (restart) | Total mass (IC) | Max column abs. diff.") + print("-" * 8 + "+" + "-" * 22 + "+" + "-" * 22 + "+" + "-" * 24) + for variable_name in tracers_to_append: + variable = append_file[variable_name] + if variable_name not in base_file.variables.keys(): + new_ntracer = new_ntracer + 1 + base_file.createVariable(variable_name, variable.datatype, base_file["sphum"].dimensions) + base_file[variable_name][0, :, :] = 0. + base_file[variable_name][1:, :, :] = scale_factor * variable[0, :, :, :] + base_file[variable_name].setncatts(variable.__dict__) + mass_src = variable * delp + mass_dst = base_file[variable_name][1:, :, :] * dp + mass_err_max = np.max(np.abs(mass_src - mass_dst)) + total_mass_src = np.sum(mass_src) + total_mass_dst = np.sum(mass_dst) + print(f' {variable_name:6} {total_mass_src:20} {total_mass_dst:20} {mass_err_max:22}') + # print("Done adding " + variable_name) + + print("-" * 79 + "\n") + + base_file.close() + + if new_ntracer != old_ntracer: + print("Updating ntracer") + + # Use ncks to rewrite file without ntracer so we can define it anew + subprocess.run(["ncks", "-x", "-v", "ntracer", "-O", base_file_name, base_file_name], check=True) + + base_file = netCDF4.Dataset(base_file_name, "r+") + base_file.createDimension("ntracer", new_ntracer) + # print(base_file.dimensions["ntracer"]) + base_file.close() + + # Remove checksum + subprocess.run(["ncatted", "-a", "checksum,,d,,", base_file_name], check=True) + + +def main() -> None: + parser = argparse.ArgumentParser( + description="Appends tracer data from one NetCDF file to another and updates the tracer count.") + parser.add_argument('atm_file', type=str, help="File containing the atmospheric initial conditions data") + parser.add_argument('chem_file', type=str, help="File containing the chemistry tracer data to be added") + parser.add_argument('core_file', type=str, help="File containing the dycore sigma level coefficients") + parser.add_argument('ctrl_file', type=str, help="File containing the sigma level coefficients for atmospheric IC data") + parser.add_argument('rest_file', type=str, help="File containing the pressure level thickness for the restart state") + parser.add_argument('variable_file', type=str, help="File with list of tracer variable_names in the chem_file to add to the atm_file, one tracer per line") + parser.add_argument('out_file', type=str, nargs="?", help="Name of file to create") + + args = parser.parse_args() + + atm_file_name = args.atm_file + chem_file_name = args.chem_file + core_file_name = args.core_file + ctrl_file_name = args.ctrl_file + rest_file_name = args.rest_file + variable_file = args.variable_file + out_file_name = args.out_file + + if out_file_name is None: + print("INFO: No out_file specified, will edit atm_file in-place") + out_file_name = atm_file_name + else: + if os.path.isfile(out_file_name): + print("WARNING: Specified out file " + out_file_name + " exists and will be overwritten") + copyfile(atm_file_name, out_file_name) + + variable_file = open(variable_file) + variable_names = variable_file.read().splitlines() + variable_file.close() + + merge_tile(out_file_name, ctrl_file_name, core_file_name, rest_file_name, chem_file_name, variable_names) + + # print(variable_names) + + +if __name__ == "__main__": + main() diff --git a/ush/minmon_xtrct_costs.pl b/ush/minmon_xtrct_costs.pl new file mode 100755 index 0000000000..502032da80 --- /dev/null +++ b/ush/minmon_xtrct_costs.pl @@ -0,0 +1,231 @@ +#!/usr/bin/env perl + +#--------------------------------------------------------------------------- +# minmon_xtrct_costs.pl +# +# Extract cost data from gsistat file and load into cost +# and cost term files. +#--------------------------------------------------------------------------- + +use strict; +use warnings; + +#---------------------------------------------- +# subroutine to trim white space from strings +#---------------------------------------------- +sub trim { my $s = shift; $s =~ s/^\s+|\s+$//g; return $s }; + + +#--------------------------- +# +# Main routine begins here +# +#--------------------------- + +if ($#ARGV != 4 ) { + print "usage: minmon_xtrct_costs.pl SUFFIX PDY cyc infile jlogfile\n"; + exit; +} +my $suffix = $ARGV[0]; + +my $pdy = $ARGV[1]; +my $cyc = $ARGV[2]; +my $infile = $ARGV[3]; +my $jlogfile = $ARGV[4]; + +my $use_costterms = 0; +my $no_data = 0.00; + +my $scr = "minmon_xtrct_costs.pl"; +print "$scr has started\n"; + + +my $rc = 0; +my $cdate = sprintf '%s%s', $pdy, $cyc; + +if( (-e $infile) ) { + + my $found_cost = 0; + my $found_costterms = 0; + my @cost_array; + my @jb_array; + my @jo_array; + my @jc_array; + my @jl_array; + my @term_array; + my @all_cost_terms; + + my $cost_target; + my $cost_number; + my $costterms_target; + my $jb_number = 5; + my $jo_number = 6; + my $jc_number = 7; + my $jl_number = 8; + + my $costfile = $ENV{"mm_costfile"}; + + if( (-e $costfile) ) { + open( COSTFILE, "<${costfile}" ) or die "Can't open ${costfile}: $!\n"; + my $line; + + while( $line = ) { + if( $line =~ /cost_target/ ) { + my @termsline = split( /:/, $line ); + $cost_target = $termsline[1]; + } elsif( $line =~ /cost_number/ ) { + my @termsline = split( /:/, $line ); + $cost_number = $termsline[1]; + } elsif( $line =~ /costterms_target/ ){ + my @termsline = split( /:/, $line ); + $costterms_target = $termsline[1]; + } + } + close( COSTFILE ); + } else { + $rc = 2; + } + + #------------------------------------------------------------------------ + # Open the infile and search for the $costterms_target and $cost_target + # strings. If found, parse out the cost information and push into + # holding arrays. + #------------------------------------------------------------------------ + if( $rc == 0 ) { + open( INFILE, "<${infile}" ) or die "Can't open ${infile}: $!\n"; + + my $line; + my $term_ctr=0; + + while( $line = ) { + + if( $line =~ /$costterms_target/ ) { + my @termsline = split( / +/, $line ); + push( @jb_array, $termsline[$jb_number] ); + push( @jo_array, $termsline[$jo_number] ); + push( @jc_array, $termsline[$jc_number] ); + push( @jl_array, $termsline[$jl_number] ); + $use_costterms = 1; + } + + if( $line =~ /$cost_target/ ) { + my @costline = split( / +/, $line ); + push( @cost_array, $costline[$cost_number] ); + } + + if( $term_ctr > 0 ) { + my @termline = split( / +/, $line ); + + if ( $term_ctr < 10 ) { + push( @term_array, trim($termline[1]) ); + push( @term_array, trim($termline[2]) ); + push( @term_array, trim($termline[3]) ); + $term_ctr++; + } else { + push( @term_array, trim($termline[1]) ); + push( @term_array, trim($termline[2]) ); + $term_ctr = 0; + } + + }elsif ( $line =~ "J=" && $line !~ "EJ=" ) { + my @termline = split( / +/, $line ); + push( @term_array, trim($termline[2]) ); + push( @term_array, trim($termline[3]) ); + push( @term_array, trim($termline[4]) ); + $term_ctr = 1; + } + } + + close( INFILE ); + + + #---------------------------------------------- + # move cost_array into all_costs by iteration + #---------------------------------------------- + my @all_costs; + for my $i (0 .. $#cost_array) { + my $iterline; + if( $use_costterms == 1 ){ + $iterline = sprintf ' %d,%e,%e,%e,%e,%e%s', + $i, $cost_array[$i], $jb_array[$i], $jo_array[$i], + $jc_array[$i], $jl_array[$i], "\n"; + } + else { + $iterline = sprintf ' %d,%e,%e,%e,%e,%e%s', + $i, $cost_array[$i], $no_data, $no_data, + $no_data, $no_data, "\n"; + } + + push( @all_costs, $iterline ); + } + + #--------------------------------------------------- + # move term_array into all_cost_terms by iteration + #--------------------------------------------------- + if( @term_array > 0 ) { + my $nterms = 32; + my $max_iter = ($#term_array+1)/$nterms; + my $niter = $max_iter -1; + + for my $iter (0 .. $niter ) { + my $step = $iter * $nterms; + my $iterline = sprintf '%d, %e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e,%e%s', + $iter, $term_array[$step], $term_array[$step+1], $term_array[$step+2], + $term_array[$step+3], $term_array[$step+4], $term_array[$step+5], + $term_array[$step+6], $term_array[$step+7], $term_array[$step+8], + $term_array[$step+9], $term_array[$step+10], $term_array[$step+11], + $term_array[$step+12], $term_array[$step+13], $term_array[$step+14], + $term_array[$step+15], $term_array[$step+16], $term_array[$step+17], + $term_array[$step+18], $term_array[$step+19], $term_array[$step+20], + $term_array[$step+21], $term_array[$step+22], $term_array[$step+23], + $term_array[$step+24], $term_array[$step+25], $term_array[$step+26], + $term_array[$step+27], $term_array[$step+28], $term_array[$step+29], + $term_array[$step+30], $term_array[$step+31], "\n"; + push( @all_cost_terms, $iterline ); + } + } + + #------------------------------------------ + # write all_costs array to costs.txt file + #------------------------------------------ + my $filename2 = "${cdate}.costs.txt"; + if( @all_costs > 0 ) { + open( OUTFILE, ">$filename2" ) or die "Can't open ${filename2}: $!\n"; + print OUTFILE @all_costs; + close( OUTFILE ); + } + + #----------------------------------------------------- + # write all_cost_terms array to costs_terms.txt file + #----------------------------------------------------- + my $filename3 = "${cdate}.cost_terms.txt"; + if( @all_cost_terms > 0 ) { + open( OUTFILE, ">$filename3" ) or die "Can't open ${filename3}: $!\n"; + print OUTFILE @all_cost_terms; + close( OUTFILE ); + } + + #-------------------------- + # move files to $M_TANKverf + #-------------------------- + my $tankdir = $ENV{"M_TANKverf"}; + if(! -d $tankdir) { + system( "mkdir -p $tankdir" ); + } + + if( -e $filename2 ) { + my $newfile2 = "${tankdir}/${filename2}"; + system("cp -f $filename2 $newfile2"); + } + if( -e $filename3 ) { + my $newfile3 = "${tankdir}/${filename3}"; + system("cp -f $filename3 $newfile3"); + } + + } # $rc still == 0 after reading gmon_cost.txt +} +else { # $infile does not exist + $rc = 1; +} + +print "$scr has ended, return code = $rc \n" diff --git a/ush/minmon_xtrct_gnorms.pl b/ush/minmon_xtrct_gnorms.pl new file mode 100755 index 0000000000..0125c58ac8 --- /dev/null +++ b/ush/minmon_xtrct_gnorms.pl @@ -0,0 +1,442 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use List::MoreUtils 'true'; +use List::MoreUtils 'first_index'; +use List::MoreUtils 'last_index'; + +#--------------------------------------------------------------------------- +# minmon_xtrct_gnorms.pl +# +# Update the gnorm_data.txt file with data from a new cycle. Add +# this new data to the last line of the gnorm_data.txt file. +# +# Note: If the gnorm_data.txt file does not exist, it will be created. +# +# The gnorm_data.txt file is used plotted directly by the javascript on +# the GSI stats page. +#--------------------------------------------------------------------------- +sub updateGnormData { + my $cycle = $_[0]; + my $igrad = $_[1]; + my $fgnorm = $_[2]; + my $avg_gnorm = $_[3]; + my $min_gnorm = $_[4]; + my $max_gnorm = $_[5]; + my $suffix = $_[6]; + + my $rc = 0; + my @filearray; + + my $gdfile = "gnorm_data.txt"; + + my $outfile = "new_gnorm_data.txt"; + my $yr = substr( $cycle, 0, 4); + my $mon = substr( $cycle, 4, 2); + my $day = substr( $cycle, 6, 2); + my $hr = substr( $cycle, 8, 2); + + my $newln = sprintf ' %04d,%02d,%02d,%02d,%e,%e,%e,%e,%e%s', + $yr, $mon, $day, $hr, $igrad, $fgnorm, + $avg_gnorm, $min_gnorm, $max_gnorm, "\n"; + + #------------------------------------------------------------- + # attempt to locate the latest $gdfile and copy it locally + # + if( -e $gdfile ) { + open( INFILE, "<${gdfile}" ) or die "Can't open ${gdfile}: $!\n"; + + @filearray = ; + +# This is the mechanism that limits the data to 30 days worth. Should I +# keep it or let the transfer script(s) truncate? 6/12/16 -- I'm going to keep +# it. I can add this as a later change once I add a user mechanism to vary the +# amount of data plotted (on the fly). + + my $cyc_interval = $ENV{'CYCLE_INTERVAL'}; + if( $cyc_interval eq "" ) { + $cyc_interval = 6; + } + + my $max_cyc = 119; # default 30 days worth of data = 120 cycles + # If CYCLE_INTERVAL is other than "" or 6 + # then set the $max_cyc using that interval + if( $cyc_interval != 6 && $cyc_interval != 0 ) { + my $cyc_per_day = 24 / $cyc_interval; + $max_cyc = (30 * $cyc_per_day) - 1; + } + + while( $#filearray > $max_cyc ) { + shift( @filearray ); + } + close( INFILE ); + } + + # Here is the problem Russ encountered after re-running the MinMon: + # If the cycle time in $newln is the same as an existing record in + # *.gnorm_data.txt then we end up with 2+ rows for the same cycle time. + # In that case $newln should replace the first existing line + # in @filearray and all other lines that might match should be deleted. + # Else when the cycle time doesn't already exist (the expected condition) + # it should be pushed into @filearray. + + # algorithm: + # ========= + # Establish $count of matches on "$yr,$mon,$day,$hr" + # if $count > 0 + # while $count > 1 + # get last_index and remove with splice + # replace first_index with $newln + # else + # push $newln + # + my $srch_strng = "$yr,$mon,$day,$hr"; + my $count = true { /$srch_strng/ } @filearray; + + if( $count > 0 ) { + while( $count > 1 ) { + my $l_index = last_index { /$srch_strng/ } @filearray; + splice @filearray, $l_index, 1; + $count = true { /$srch_strng/ } @filearray; + } + my $f_index = first_index { /$srch_strng/ } @filearray; + splice @filearray, $f_index, 1, $newln; + } + else { + push( @filearray, $newln ); + } + + open( OUTFILE, ">$outfile" ) or die "Can't open ${$outfile}: $!\n"; + print OUTFILE @filearray; + close( OUTFILE ); + + system("cp -f $outfile $gdfile"); + +} + +#--------------------------------------------------------------------------- +# makeErrMsg +# +# Apply a gross check on the final value of the gnorm for a specific +# cycle. If the final_gnorm value is greater than the gross_check value +# then put that in the error message file. Also check for resets or a +# premature halt, and journal those events to the error message file too. +# +# Note to self: reset_iter array is passed by reference +#--------------------------------------------------------------------------- +sub makeErrMsg { + my $suffix = $_[0]; + my $cycle = $_[1]; + my $final_gnorm = $_[2]; + my $stop_flag = $_[3]; + my $stop_iter = $_[4]; + my $reset_flag = $_[5]; + my $reset_iter = $_[6]; #reset iteration array + my $infile = $_[7]; + my $gross_check = $_[8]; + + my $mail_msg =""; + my $out_file = "${cycle}.errmsg.txt"; + + + if( $stop_flag > 0 ) { + my $stop_msg = " Gnorm check detected premature iteration stop: suffix = $suffix, cycle = $cycle, iteration = $stop_iter"; + $mail_msg .= $stop_msg; + } + + if( $reset_flag > 0 ) { + my $ctr=0; + my $reset_msg = "\n Gnorm check detected $reset_flag reset(s): suffix = $suffix, cycle = $cycle"; + $mail_msg .= $reset_msg; + $mail_msg .= "\n"; + $mail_msg .= " Reset(s) detected in iteration(s): @{$reset_iter}[$ctr] \n"; + + my $arr_size = @{$reset_iter}; + for( $ctr=1; $ctr < $arr_size; $ctr++ ) { + $mail_msg .= " @{$reset_iter}[$ctr]\n"; + } + } + + if( $final_gnorm >= $gross_check ){ + my $gnorm_msg = " Final gnorm gross check failure: suffix = $suffix, cycle = $cycle, final gnorm = $final_gnorm "; + + $mail_msg .= $gnorm_msg; + } + + if( length $mail_msg > 0 ){ + my $file_msg = " File source for report is: $infile"; + $mail_msg .= $file_msg; + } + + if( length $mail_msg > 0 ){ + my $mail_link = "http://www.emc.ncep.noaa.gov/gmb/gdas/gsi_stat/index.html?src=$suffix&typ=gnorm&cyc=$cycle"; + open( OUTFILE, ">$out_file" ) or die "Can't open ${$out_file}: $!\n"; + print OUTFILE $mail_msg; + print OUTFILE "\n\n $mail_link"; + close( OUTFILE ); + } +} + + +#--------------------------------------------------------------------------- +# +# Main routine begins here +# +#--------------------------------------------------------------------------- + +if ($#ARGV != 4 ) { + print "usage: minmon_xtrct_gnorms.pl SUFFIX pdy cyc infile jlogfile\n"; + exit; +} + + +my $suffix = $ARGV[0]; +my $pdy = $ARGV[1]; +my $cyc = $ARGV[2]; +my $infile = $ARGV[3]; +my $jlogfile = $ARGV[4]; + + +my $scr = "minmon_xtrct_gnorms.pl"; +print "$scr Has Started\n"; + +# +# This needs to be redesigned to get the gnorm value from the gsistat file +# using the line that starts "cost,grad,step,b,step?:". The line formerly +# used for the gnorm and reduction values may not be available if the the +# verbose output flag is set to FALSE. +# +# So, using the grad value on that line: +# gnorm[i] = (grad[i]**)/(grad[0]**) +# reduct[i] = sqrt(gnorm) + +my $igrad_target; +my $igrad_number; +my $expected_gnorms; +my $gross_check_val; + +my $rc = 0; +my $cdate = sprintf '%s%s', $pdy, $cyc; + +my $gnormfile = $ENV{"mm_gnormfile"}; + + +if( (-e $gnormfile) ) { + open( GNORMFILE, "<${gnormfile}" ) or die "Can't open ${gnormfile}: $!\n"; + my $line; + + while( $line = ) { + if( $line =~ /igrad_target/ ) { + my @termsline = split( /:/, $line ); + $igrad_target = $termsline[1]; + } elsif( $line =~ /igrad_number/ ) { + my @termsline = split( /:/, $line ); + $igrad_number = $termsline[1]; + } elsif( $line =~ /expected_gnorms/ ){ + my @termsline = split( /:/, $line ); + $expected_gnorms = $termsline[1]; + } elsif( $line =~ /gross_check_val/ ){ + my @termsline = split( /:/, $line ); + $gross_check_val = $termsline[1]; + } + } + close( GNORMFILE ); +} else { + $rc = 4; +} + +if( $rc == 0 ) { + if( (-e $infile) ) { + open( INFILE, "<${infile}" ) or die "Can't open ${infile}: $!\n"; + + my $found_igrad = 0; + my $final_gnorm = 0.0; + my $igrad = 0.0; + my $header = 4; + my $header2 = 0; + my @gnorm_array; + my @last_10_gnorm; + + my $reset_flag = 0; + my $stop_flag = 0; + my $warn_str = "WARNING"; + my $stop_str = "Stopping"; + my $stop_iter = ""; + my $reset_str = "Reset"; + my @reset_iter; # reset iteration array + + my $stop_iter_flag = 0; + my $reset_iter_flag = 0; + my $line; + while( $line = ) { + + ############################################## + # if the reset_iter_flag is 1 then record the + # current outer & inner iteration number + ############################################## + if( $reset_iter_flag == 1 ) { + if( $line =~ /${igrad_target}/ ) { + my @iterline = split( / +/, $line ); + my $iter_str = $iterline[2] . "," . $iterline[3]; + push( @reset_iter, $iter_str); + $reset_iter_flag = 0; + } + } + + + if( $line =~ /${igrad_target}/ ) { + my @gradline = split( / +/, $line ); + + my $grad = $gradline[$igrad_number]; + + if( $found_igrad == 0 ){ + $igrad = $grad; + $found_igrad = 1; + } + + my $igrad_sqr = $igrad**2; + my $grad_sqr = $grad**2; + my $gnorm = $grad_sqr/$igrad_sqr; + + push( @gnorm_array, $gnorm ); + } + + + if( $line =~ /${warn_str}/ ) { + if( $line =~ /${stop_str}/ ) { + $stop_flag++; + $stop_iter_flag=1; + } + elsif( $line =~ /${reset_str}/ ){ + $reset_flag++; + $reset_iter_flag = 1; + } + } + + } + close( INFILE ); + + ######################################################################## + # If the stop_flag is >0 then record the last outer & inner + # iteration number. The trick is that it's the last iteration in the + # log file and we just passed it when we hit the stop warning message, + # so we have to reopen the file and get the last iteration number. + ######################################################################## + if( $stop_flag > 0 ) { + open( INFILE, "<${infile}" ) or die "Can't open ${infile}: $!\n"; + + my @lines = reverse ; + foreach $line (@lines) { + if( $line =~ /${igrad_target}/ ){ + my @iterline = split( / +/, $line ); + $stop_iter = $iterline[2] . "," . $iterline[3]; + last; + } + } + close( INFILE ); + } + + + my @all_gnorm = @gnorm_array; + + ############################################################################## + ## + ## If the iterations were halted due to error then the @all_gnorm array won't + ## be the expected size. In that case we need to pad the array out with + ## RMISS values so GrADS won't choke when it tries to read the data file. + ## + ## Note that we're padding @all_gnorm. The @gnorm_array is examined below + ## and we don't want to pad that and mess up the min/max calculation. + ## + ############################################################################### + my $arr_size = @all_gnorm; + + if( $arr_size < $expected_gnorms ) { + for( my $ctr = $arr_size; $ctr < $expected_gnorms; $ctr++ ) { + push( @all_gnorm, -999.0 ); + } + } + + my $sum_10_gnorm = 0.0; + my $min_gnorm = 9999999.0; + my $max_gnorm = -9999999.0; + my $avg_gnorm = 0.0; + + for( my $ctr = 9; $ctr >= 0; $ctr-- ) { + my $new_gnorm = pop( @gnorm_array ); + $sum_10_gnorm = $sum_10_gnorm + $new_gnorm; + if( $new_gnorm > $max_gnorm ) { + $max_gnorm = $new_gnorm; + } + if( $new_gnorm < $min_gnorm ) { + $min_gnorm = $new_gnorm; + } + if( $ctr == 9 ) { + $final_gnorm = $new_gnorm; + } + } + + $avg_gnorm = $sum_10_gnorm / 10; + + + ##################################################################### + # Update the gnorm_data.txt file with information on the + # initial gradient, final gnorm, and avg/min/max for the last 10 + # iterations. + ##################################################################### + updateGnormData( $cdate,$igrad,$final_gnorm,$avg_gnorm,$min_gnorm,$max_gnorm,$suffix ); + + + ##################################################################### + # Call makeErrMsg to build the error message file to record any + # abnormalities in the minimization. This file can be mailed by + # a calling script. + ##################################################################### + makeErrMsg( $suffix, $cdate, $final_gnorm, $stop_flag, $stop_iter, $reset_flag, \@reset_iter, $infile, $gross_check_val ); + + + ######################################################### + # write to GrADS ready output data file + # + # Note: this uses pack to achieve the same results as + # an unformatted binary Fortran file. + ######################################################### + my $filename2 = "${cdate}.gnorms.ieee_d"; + + open( OUTFILE, ">$filename2" ) or die "Can't open ${filename2}: $!\n"; + binmode OUTFILE; + + print OUTFILE pack( 'f*', @all_gnorm); + + close( OUTFILE ); + + #-------------------------- + # move files to $M_TANKverf + #-------------------------- + my $tankdir = $ENV{"M_TANKverf"}; + if(! -d $tankdir) { + system( "mkdir -p $tankdir" ); + } + + if( -e $filename2 ) { + system("cp -f $filename2 ${tankdir}/."); + } + + my $gdfile = "gnorm_data.txt"; + if( -e $gdfile ) { + system("cp -f $gdfile ${tankdir}/."); + } + + my $errmsg = "${cdate}.errmsg.txt"; + if( -e $errmsg ) { + system("cp -f $errmsg ${tankdir}/."); + } + + } # $rc still == 0 after reading gmon_gnorm.txt + +}else { # $infile does not exist + $rc = 3; +} + +print "$scr has ended, return code = $rc \n" diff --git a/ush/minmon_xtrct_reduct.pl b/ush/minmon_xtrct_reduct.pl new file mode 100755 index 0000000000..1b8186b6ad --- /dev/null +++ b/ush/minmon_xtrct_reduct.pl @@ -0,0 +1,89 @@ +#!/usr/bin/env perl + +use strict; + +#--------------------------------------------------------------------------- +# minmon_xtrct_reduct.pl +# +# Extract the reduction stats for a GSI minimization run and store in +# reduction.ieee_d files ready for GrADS use. +#--------------------------------------------------------------------------- + +if ($#ARGV != 4 ) { + print "usage: minmon_xtrct_reduct.pl SUFFIX pdy cyc infile jlogfile\n"; + print " suffix is data source identifier\n"; + print " pdy is YYYYMMDD of the cycle to be processed\n"; + print " cyc is HH of the cycle to be processed\n"; + print " infile is the data file containing the reduction stats\n"; + print " jlogfile is the job log file\n"; + exit; +} +my $suffix = $ARGV[0]; +my $pdy = $ARGV[1]; +my $cyc = $ARGV[2]; +my $infile = $ARGV[3]; +my $jlogfile = $ARGV[4]; + +my $scr = "minmon_xtrct_reduct.pl"; +print "$scr has started\n"; + +my $rc = 0; +my $cdate = sprintf '%s%s', $pdy, $cyc; +my $initial_gradient = -999.0; +my $iter_gradient; + +if( (-e $infile) ) { + + my $reduct_target = "cost,grad,step,b,step?"; + my $gradient_num = 5; + my $reduct; + + open( INFILE, "<${infile}" ) or die "Can't open ${infile}: $!\n"; + + my @reduct_array; + + while( my $line = ) { + if( $line =~ /$reduct_target/ ) { + my @reduct_ln = split( / +/, $line ); + $iter_gradient = $reduct_ln[$gradient_num]; + if( $initial_gradient == -999.0 ){ + $initial_gradient = $iter_gradient; + } + + $reduct = $iter_gradient / $initial_gradient; + + push( @reduct_array, $reduct ); + } + } + + close( INFILE ); + + + ################################# + # write reduct_array to outfile + ################################# + my $outfile = "${cdate}.reduction.ieee_d"; + open( OUTFILE, ">$outfile" ) or die "Can't open ${outfile}: $!\n"; + binmode OUTFILE; + + print OUTFILE pack( 'f*', @reduct_array); + close( OUTFILE ); + + #---------------------------- + # copy outfile to $M_TANKverf + #---------------------------- + my $tankdir = $ENV{"M_TANKverf"}; + if(! -d $tankdir) { + system( "mkdir -p $tankdir" ); + } + + if( -e $outfile ) { + my $newfile = "${tankdir}/${outfile}"; + system("cp -f $outfile $newfile"); + } + +} else { # $infile does not exist + $rc = 5; +} + +print "$scr has ended, return code = $rc \n" diff --git a/ush/module-setup.sh b/ush/module-setup.sh new file mode 100755 index 0000000000..fd656966bf --- /dev/null +++ b/ush/module-setup.sh @@ -0,0 +1,137 @@ +#!/bin/bash +set -u + +if [[ ${MACHINE_ID} = jet* ]] ; then + # We are on NOAA Jet + if ( ! eval module help > /dev/null 2>&1 ) ; then + source /apps/lmod/lmod/init/bash + fi + export LMOD_SYSTEM_DEFAULT_MODULES=contrib + module reset + +elif [[ ${MACHINE_ID} = hera* ]] ; then + # We are on NOAA Hera + if ( ! eval module help > /dev/null 2>&1 ) ; then + source /apps/lmod/lmod/init/bash + fi + export LMOD_SYSTEM_DEFAULT_MODULES=contrib + set +u + module reset + set -u + +elif [[ ${MACHINE_ID} = hercules* ]] ; then + # We are on Hercules + if ( ! eval module help > /dev/null 2>&1 ) ; then + source /apps/other/lmod/lmod/init/bash + fi + export LMOD_SYSTEM_DEFAULT_MODULES=contrib + set +u + module reset + set -u + +elif [[ ${MACHINE_ID} = orion* ]] ; then + # We are on Orion + if ( ! eval module help > /dev/null 2>&1 ) ; then + source /apps/lmod/lmod/init/bash + fi + export LMOD_SYSTEM_DEFAULT_MODULES=contrib + set +u + module reset + set -u + +elif [[ ${MACHINE_ID} = s4* ]] ; then + # We are on SSEC Wisconsin S4 + if ( ! eval module help > /dev/null 2>&1 ) ; then + source /usr/share/lmod/lmod/init/bash + fi + export LMOD_SYSTEM_DEFAULT_MODULES=license_intel + module reset + +elif [[ ${MACHINE_ID} = wcoss2 ]]; then + # We are on WCOSS2 + module reset + +elif [[ ${MACHINE_ID} = cheyenne* ]] ; then + # We are on NCAR Cheyenne + if ( ! eval module help > /dev/null 2>&1 ) ; then + source /glade/u/apps/ch/modulefiles/default/localinit/localinit.sh + fi + module purge + +elif [[ ${MACHINE_ID} = stampede* ]] ; then + # We are on TACC Stampede + if ( ! eval module help > /dev/null 2>&1 ) ; then + source /opt/apps/lmod/lmod/init/bash + fi + module purge + +elif [[ ${MACHINE_ID} = gaea* ]] ; then + # We are on GAEA. + if ( ! eval module help > /dev/null 2>&1 ) ; then + # We cannot simply load the module command. The GAEA + # /etc/profile modifies a number of module-related variables + # before loading the module command. Without those variables, + # the module command fails. Hence we actually have to source + # /etc/profile here. + source /etc/profile + __ms_source_etc_profile=yes + else + __ms_source_etc_profile=no + fi + module purge + # clean up after purge + unset _LMFILES_ + unset _LMFILES_000 + unset _LMFILES_001 + unset LOADEDMODULES + module load modules + if [[ -d /opt/cray/ari/modulefiles ]] ; then + module use -a /opt/cray/ari/modulefiles + fi + if [[ -d /opt/cray/pe/ari/modulefiles ]] ; then + module use -a /opt/cray/pe/ari/modulefiles + fi + if [[ -d /opt/cray/pe/craype/default/modulefiles ]] ; then + module use -a /opt/cray/pe/craype/default/modulefiles + fi + if [[ -s /etc/opt/cray/pe/admin-pe/site-config ]] ; then + source /etc/opt/cray/pe/admin-pe/site-config + fi + if [[ "${__ms_source_etc_profile}" == yes ]] ; then + source /etc/profile + unset __ms_source_etc_profile + fi + +elif [[ ${MACHINE_ID} = expanse* ]]; then + # We are on SDSC Expanse + if ( ! eval module help > /dev/null 2>&1 ) ; then + source /etc/profile.d/modules.sh + fi + module purge + module load slurm/expanse/20.02.3 + +elif [[ ${MACHINE_ID} = discover* ]]; then + # We are on NCCS discover + export SPACK_ROOT=/discover/nobackup/mapotts1/spack + export PATH=${PATH}:${SPACK_ROOT}/bin + . "${SPACK_ROOT}"/share/spack/setup-env.sh + +# TODO: This can likely be made more general once other cloud +# platforms come online. +elif [[ ${MACHINE_ID} = "noaacloud" ]]; then + + export SPACK_ROOT=/contrib/global-workflow/spack-stack/spack + export PATH=${PATH}:${SPACK_ROOT}/bin + . "${SPACK_ROOT}"/share/spack/setup-env.sh + +else + echo WARNING: UNKNOWN PLATFORM 1>&2 +fi + +# If this function exists in the environment, run it; else do not +ftype=$(type -t set_strict || echo "") +if [[ "${ftype}" == "function" ]]; then + set_strict +else + set +u +fi diff --git a/ush/ocnpost.ncl b/ush/ocnpost.ncl new file mode 100755 index 0000000000..27e60b0edf --- /dev/null +++ b/ush/ocnpost.ncl @@ -0,0 +1,588 @@ +;------------------------------------------------------------------ +; Denise.Worthen@noaa.gov (Feb 2019) +; +; This script will remap MOM6 ocean output on the tripole grid to +; a set of rectilinear grids using pre-computed ESMF weights to remap +; the listed fields to the destination grid and write the results +; to a new netCDF file +; +; Prior to running this script, files containing the conservative +; and bilinear regridding weights must be generated. These weights +; are created using the generate_iceocnpost_weights.ncl script. +; +; Note: the descriptive text below assumes fortran type indexing +; where the variables are indexed as (i,j) and indices start at 1 +; NCL indices are (j,i) and start at 0 +; +; The post involves these steps +; +; a) unstaggering velocity points +; MOM6 is on an Arakawa C grid. MOM6 refers to these +; locations as "Ct" for the centers and "Cu", "Cv" +; "Bu" for the left-right, north-south and corner +; points, respectively. +; +; The indexing scheme in MOM6 is as follows: +; +; Cv@i,j +; ----X------X Bu@i,j +; | +; | +; Ct@i,j | +; X X Cu@i,j +; | +; | +; | +; +; CICE5 is on an Arakawa B grid. CICE5 refers to these +; locations as TLAT,TLON for the centers and ULAT,ULON +; for the corners +; +; In UFS, the CICE5 grid has been created using the MOM6 +; supergrid file. Therefore, all grid points are consistent +; between the two models. +; +; In the following, MOM6's nomenclature will be followed, +; so that CICE5's U-grid will be referred to as "Bu". +; +; b) rotation of tripole vectors to East-West +; MOM6 and CICE6 both output velocties on their native +; velocity points. For MOM6, that is u-velocities on the +; Cu grid and v-velocites on the Cv grid. For CICE5, it is +; both u and v-velocities on the Bu grid. +; +; The rotation angle for both models are defined at center +; grid points; therefore the velocities need to be first +; unstaggered before rotation. MOM6 and CICE5 also define +; opposite directions for the rotations. Finally, while the +; grid points are identical between the two models, CICE5 +; calculates the rotation angle at center grid points by +; averaging the four surrounding B grid points. MOM6 derives +; the rotation angle at the center directly from the latitude +; and longitude of the center grid points. The angles are therefor +; not identical between the two grids. +; +; c) conservative regridding of some fields +; Fields such as ice concentration or fluxes which inherently +; area area-weighted require conservative regridding. Most other +; variables are state variables and can be regridded using +; bilinear weighting. +; +; An efficient way to accomplish the unstaggering of velocities +; is to use the bilinear interpolation weights between grid +; points of the Arakawa C grid and the center grid points (for example +; Cu->Ct). These weights are generated by the weight generation script +; +; Remapping from the tripole to rectilinear uses either the bilinear +; or conservative weights from the weight generation script. Bilinear weights +; generated for the first vertical level can be used on other levels +; (where the masking changes) by utilizing the correct masking procedure. +; Set output_masks to true to examine the interpolation masks. +; +; Intermediate file output can easily be generated for debugging by +; follwing the example in the output_masks logical +; +; Bin.Li@noaa.gov (May 2019) +; The scripts is revised for use in the coupled workflow. +; + load "$NCARG_ROOT/lib/ncarg/nclscripts/esmf/ESMF_regridding.ncl" + +;---------------------------------------------------------------------- +begin +; + + ; warnings (generated by int2p_n_Wrap) can be supressed by + ; the following (comment out to get the warnings) + err = NhlGetErrorObjectId() + setvalues err +; "errLevel" : "Fatal" ; only report Fatal errors + "errLevel" : "Verbose" + end setvalues + + output_masks = False + + ; specify a location to use + ; nemsrc = "/scratch4/NCEPDEV/ocean/save/Denise.Worthen/NEMS_INPUT0.1/ocnicepost/" + ; interpolation methods + methods = (/"bilinear" ,"conserve"/) + ; ocean model output location + ;dirsrc = "/scratch3/NCEPDEV/stmp2/Denise.Worthen/BM1_ocn/" + + ; destination grid sizes and name + dsttype = (/"rect."/) + ;dstgrds = (/"1p0", "0p5", "0p25"/) + ;dstgrds = (/"0p5"/) + dstgrds = (/"0p25"/) + + ; variables to be regridded with the native tripole stagger location + ; and dimensionality + ; first BM contained only field "mld", which was actually ePBL + ; the remaining BMs contain ePBL, MLD_003 and MLD_0125 + ; the following NCO command will be issued at the end + ; to rename the variable mld to ePBL if the variable mld is found + ; ncocmd = "ncrename -O -v mld,ePBL " + ncocmd = "ncrename -O -v MLD_003,mld" + + varlist = (/ (/ "SSH", "Ct", "bilinear", "2"/) \ + ,(/ "SST", "Ct", "bilinear", "2"/) \ + ,(/ "SSS", "Ct", "bilinear", "2"/) \ + ,(/ "speed", "Ct", "bilinear", "2"/) \ + ,(/ "temp", "Ct", "bilinear", "3"/) \ + ,(/ "so", "Ct", "bilinear", "3"/) \ + ,(/ "latent", "Ct", "conserve", "2"/) \ + ,(/ "sensible", "Ct", "conserve", "2"/) \ + ,(/ "SW", "Ct", "conserve", "2"/) \ + ,(/ "LW", "Ct", "conserve", "2"/) \ + ,(/ "evap", "Ct", "conserve", "2"/) \ + ,(/ "lprec", "Ct", "conserve", "2"/) \ + ,(/ "fprec", "Ct", "conserve", "2"/) \ + ,(/"LwLatSens", "Ct", "conserve", "2"/) \ + ,(/ "Heat_PmE", "Ct", "conserve", "2"/) \ +; ,(/ "mld", "Ct", "bilinear", "2"/) \ + ,(/ "ePBL", "Ct", "bilinear", "2"/) \ + ,(/ "MLD_003", "Ct", "bilinear", "2"/) \ + ,(/ "MLD_0125", "Ct", "bilinear", "2"/) \ + /) + dims = dimsizes(varlist) + nvars = dims(0) + delete(dims) + ;print(varlist) + + ; vectors to be regridded with the native tripole stagger location + ; and dimensionality + ; note: vectors are always unstaggered using bilinear weights, but can + ; be remapped using conservative + nvpairs = 3 + veclist = new( (/nvpairs,4,2/),"string") + veclist = (/ (/ (/ "SSU", "SSV"/), (/"Cu", "Cv"/), (/"bilinear", "bilinear"/), (/"2", "2"/) /) \ + , (/ (/ "uo", "vo"/), (/"Cu", "Cv"/), (/"bilinear", "bilinear"/), (/"3", "3"/) /) \ + , (/ (/ "taux", "tauy"/), (/"Cu", "Cv"/), (/"conserve", "conserve"/), (/"2", "2"/) /) \ + /) + ;print(veclist) + + begTime = get_cpu_time() +;---------------------------------------------------------------------- +; make a list of the directories and files from the run +;---------------------------------------------------------------------- + +; idate = "20120101" + +; ocnfilelist = systemfunc("ls "+dirsrc+"gfs."+idate+"/00/"+"ocn*.nc") +; ocnf = addfiles(ocnfilelist,"r") +; nfiles = dimsizes(ocnfilelist) +; + + ; get the rotation angles and vertical grid from the first file + ; two different name were used for the angles, either sinrot,cosrot + ; or sin_rot,cos_rot + if(isfilevar(ocnf[0],"sin_rot"))then + sinrot = ocnf[0]->sin_rot + else + sinrot = ocnf[0]->sinrot + end if + if(isfilevar(ocnf[0],"cos_rot"))then + cosrot = ocnf[0]->cos_rot + else + cosrot = ocnf[0]->cosrot + end if + z_l = ocnf[0]->z_l + z_i = ocnf[0]->z_i + nlevs = dimsizes(z_l) + + ; get a 2 and 3 dimensional fields for creating the interpolation masks + ; the mask2d,mask3d contain 1's on land and 0's at valid points. + mask2d = where(ismissing(ocnf[0]->SST), 1.0, 0.0) + mask3d = where(ismissing(ocnf[0]->temp), 1.0, 0.0) + ;printVarSummary(mask2d) + ;printVarSummary(mask3d) + + ; create conformed rotation arrays to make vector rotations cleaner + sinrot2d=conform_dims(dimsizes(mask2d),sinrot,(/1,2/)) + cosrot2d=conform_dims(dimsizes(mask2d),cosrot,(/1,2/)) + + sinrot3d=conform_dims(dimsizes(mask3d),sinrot,(/2,3/)) + cosrot3d=conform_dims(dimsizes(mask3d),cosrot,(/2,3/)) + + ; check for variables in file. this is only required because + ; of the missing/misnamed MLD variables in the first BM + ; only the varlist is checked, since it is assumed there are + ; no other variables missing after the first benchmark + valid = new((/nvars/),"logical") + valid = False + do nv = 0,nvars-1 + varname = varlist(nv,0) + if(isfilevar(ocnf[0],varname))then + valid(nv) = True + end if + print(varlist(nv,0)+" "+valid(nv)) + end do + +;---------------------------------------------------------------------- +; loop over the output resolutions +;---------------------------------------------------------------------- + + jj = 1 + ii = 0 + + do jj = 0,dimsizes(dstgrds)-1 + ;outres = "_"+dstgrds(jj)+"x"+dstgrds(jj) + outres = dstgrds(jj)+"x"+dstgrds(jj) + outgrid = dstgrds(jj) + + ; regrid a field to obtain the output xy dimensions + wgtsfile = nemsrc+"/"+"tripole.mx025.Ct.to."+dsttype+dstgrds(jj)+".bilinear.nc" + tt = ESMF_regrid_with_weights(sinrot,wgtsfile,False) + tt!0 = "lat" + tt!1 = "lon" + lat = tt&lat + lon = tt&lon + dims = dimsizes(tt) + nlat = dims(0) + nlon = dims(1) + + print("fields will be remapped to destination grid size "\ + +nlon+" "+nlat) + + delete(tt) + delete(dims) + + ; regrid the masks to obtain the interpolation masks. + ; the mask2d,mask3d contain 1's on land and 0's at valid points. + ; when remapped, any mask value > 0 identifies land values that + ; have crept into the field. remapped model fields are then + ; masked with this interpolation mask + + wgtsfile = nemsrc+"/"+"tripole.mx025.Ct.to."+dsttype+dstgrds(jj)+".bilinear.nc" + rgmask2d = ESMF_regrid_with_weights(mask2d, wgtsfile,False) + rgmask3d = ESMF_regrid_with_weights(mask3d, wgtsfile,False) + + if(output_masks)then + testfile = "masks_"+dstgrds(jj)+".nc" + system("/bin/rm -f "+testfile) + ; create + testcdf = addfile(testfile,"c") + testcdf->rgmask2d = rgmask2d + testcdf->rgmask3d = rgmask3d + ; close + delete(testcdf) + end if + + ; create the interpolation mask + rgmask2d = where(rgmask2d .gt. 0.0, rgmask2d@_FillValue, 1.0) + rgmask3d = where(rgmask3d .gt. 0.0, rgmask3d@_FillValue, 1.0) + + ; conformed depth array + depth = conform_dims(dimsizes(mask3d), z_l, (/1/)) + ;print(dimsizes(depth)) + +;---------------------------------------------------------------------- +; loop over each file in the ocnfilelist +;---------------------------------------------------------------------- +; + + ; retrieve the time stamp + time = ocnf[0]->time + delete(time@bounds) + +;---------------------------------------------------------------------- +; set up the output netcdf file +;---------------------------------------------------------------------- +; system("/bin/rm -f " + outfile) ; remove if exists +; outcdf = addfile (outfile, "c") ; open output file +; specify output file information and open file for output + FILENAME_REGRID = DATA_TMP+"/ocnr"+VDATE+"."+ENSMEM+"."+IDATE+"_"+outres+"_MOM6.nc" + if (isfilepresent(FILENAME_REGRID)) then + system("rm -f "+FILENAME_REGRID) + end if + outcdf = addfile(FILENAME_REGRID,"c") + outfile=FILENAME_REGRID + + ; explicitly declare file definition mode. Improve efficiency. + setfileoption(outcdf,"DefineMode",True) + + ; create global attributes of the file + fAtt = True ; assign file attributes + fAtt@creation_date = systemfunc ("date") + fAtt@source_file = infile + fileattdef( outcdf, fAtt ) ; copy file attributes + + ; predefine the coordinate variables and their dimensionality + ; dimNames = (/"time", "z_l", "z_i", "z_T", "lat", "lon"/) + dimNames = (/"time", "z_l", "z_i", "lat", "lon"/) + ;dimSizes = (/ -1 , nlevs, nlevs+1, nTd, nlat, nlon/) + dimSizes = (/ -1 , nlevs, nlevs+1, nlat, nlon/) + ;dimUnlim = (/ True , False, False, False, False, False/) + dimUnlim = (/ True , False, False, False, False/) + filedimdef(outcdf,dimNames,dimSizes,dimUnlim) + + ; predefine the the dimensionality of the variables to be written out + filevardef(outcdf, "time", typeof(time), getvardims(time)) + filevardef(outcdf, "z_l", typeof(z_l), getvardims(z_l)) + filevardef(outcdf, "z_i", typeof(z_i), getvardims(z_i)) + ;filevardef(outcdf, "z_T", typeof(z_T), getvardims(z_T)) + filevardef(outcdf, "lat", typeof(lat), getvardims(lat)) + filevardef(outcdf, "lon", typeof(lon), getvardims(lon)) + + ; Copy attributes associated with each variable to the file + filevarattdef(outcdf, "time", time) + filevarattdef(outcdf, "z_l", z_l) + filevarattdef(outcdf, "z_i", z_i) + ;filevarattdef(outcdf, "z_T", z_T) + filevarattdef(outcdf, "lat", lat) + filevarattdef(outcdf, "lon", lon) + + ; predefine variables + do nv = 0,nvars-1 + varname = varlist(nv,0) + vardims = varlist(nv,3) + if(valid(nv))then + if(vardims .eq. "2")then + odims = (/"time", "lat", "lon"/) + else + odims = (/"time", "z_l", "lat", "lon"/) + end if + ;print("creating variable "+varname+" in file") + filevardef(outcdf, varname, "float", odims) + delete(odims) + end if + end do + + do nv = 0,nvpairs-1 + do nn = 0,1 + vecname = veclist(nv,0,nn) + vecdims = veclist(nv,3,nn) + if(vecdims .eq. "2")then + odims = (/"time", "lat", "lon"/) + else + odims = (/"time", "z_l", "lat", "lon"/) + end if + ;print("creating variable "+vecname+" in file") + filevardef(outcdf, vecname, "float", odims) + delete(odims) + delete(vecdims) + end do + end do + + ; explicitly exit file definition mode. + setfileoption(outcdf,"DefineMode",False) + + ; write the dimensions to the file + outcdf->time = (/time/) + outcdf->z_l = (/z_l/) + outcdf->z_i = (/z_i/) +; outcdf->z_T = (/z_T/) +; + outcdf->lat = (/lat/) + outcdf->lon = (/lon/) + +;---------------------------------------------------------------------- +; loop over nvars variables +;---------------------------------------------------------------------- + + do nv = 0,nvars-1 + varname = varlist(nv,0) + vargrid = varlist(nv,1) + varmeth = varlist(nv,2) + vardims = varlist(nv,3) + + if(valid(nv))then + ;print(nv+" "+varname+" "+vargrid+" "+varmeth) + ocnvar = ocnf[ii]->$varname$ + ndims = dimsizes(dimsizes(ocnvar)) + ;print(ndims+" "+dimsizes(ocnvar)) + + if(vargrid .ne. "Ct")then + ; print error if the variable is not on the Ct grid + print("Variable is not on Ct grid") + exit + end if + + ; regrid to dsttype+dstgrd with method + ;print("remapping "+varname+" to grid "+dsttype+dstgrds(jj)) + wgtsfile = nemsrc+"/"+"tripole.mx025.Ct.to."+dsttype+dstgrds(jj)+"."+varmeth+".nc" + + rgtt = ESMF_regrid_with_weights(ocnvar,wgtsfile,False) + if(vardims .eq. "2")then + rgtt = where(ismissing(rgmask2d),ocnvar@_FillValue,rgtt) + rgtt=rgtt(:,::-1,:) + else + rgtt = where(ismissing(rgmask3d),ocnvar@_FillValue,rgtt) + rgtt=rgtt(:,:,::-1,:) + end if + + ; enter file definition mode to add variable attributes + setfileoption(outcdf,"DefineMode",True) + filevarattdef(outcdf, varname, rgtt) + setfileoption(outcdf,"DefineMode",False) + + outcdf->$varname$ = (/rgtt/) + + delete(ocnvar) + delete(rgtt) + + ; variable exists + end if + ; nv, loop over number of variables + end do + +;---------------------------------------------------------------------- +; +;---------------------------------------------------------------------- + + ;nv = 2 + do nv = 0,nvpairs-1 + vecnames = veclist(nv,0,:) + vecgrids = veclist(nv,1,:) + vecmeth = veclist(nv,2,:) + vecdims = veclist(nv,3,:) + ;print(nv+" "+vecnames+" "+vecgrids+" "+vecmeth) + + ; create a vector pair list + vecpairs = NewList("fifo") + n = 0 + uvel = ocnf[ii]->$vecnames(n)$ + vecfld = where(ismissing(uvel),0.0,uvel) + copy_VarAtts(uvel,vecfld) + ;print("unstagger "+vecnames(n)+" from "+vecgrids(n)+" to Ct") + wgtsfile = nemsrc+"/"+"tripole.mx025."+vecgrids(n)+".to.Ct.bilinear.nc" + ut = ESMF_regrid_with_weights(vecfld,wgtsfile,False) + delete(ut@remap) + + n = 1 + vvel = ocnf[ii]->$vecnames(n)$ + vecfld = where(ismissing(vvel),0.0,vvel) + copy_VarAtts(vvel,vecfld) + ;print("unstagger "+vecnames(n)+" from "+vecgrids(n)+" to Ct") + wgtsfile = nemsrc+"/"+"tripole.mx025."+vecgrids(n)+".to.Ct.bilinear.nc" + vt = ESMF_regrid_with_weights(vecfld,wgtsfile,False) + delete(vt@remap) + + ListAppend(vecpairs,ut) + ListAppend(vecpairs,vt) + ;print(vecpairs) + + ; rotate + ; first copy Metadata + urot = vecpairs[0] + vrot = vecpairs[1] + if(vecdims(0) .eq. "2")then + urot = ut*cosrot2d + vt*sinrot2d + vrot = vt*cosrot2d - ut*sinrot2d + else + urot = ut*cosrot3d + vt*sinrot3d + vrot = vt*cosrot3d - ut*sinrot3d + end if + ; change attribute to indicate these are now rotated velocities + urot@long_name=str_sub_str(urot@long_name,"X","Zonal") + vrot@long_name=str_sub_str(vrot@long_name,"Y","Meridional") + ; copy back + vecpairs[0] = urot + vecpairs[1] = vrot + delete([/urot, vrot/]) + + ; remap + do n = 0,1 + vecfld = vecpairs[n] + ; regrid to dsttype+dstgrd with method + ;print("remapping "+vecnames(n)+" to grid "+dsttype+dstgrds(jj)) + wgtsfile = nemsrc+"/"+"tripole.mx025.Ct.to."+dsttype+dstgrds(jj)+"."+vecmeth(n)+".nc" + + rgtt = ESMF_regrid_with_weights(vecfld,wgtsfile,False) + if(vecdims(n) .eq. "2")then + rgtt = where(ismissing(rgmask2d),vecfld@_FillValue,rgtt) + rgtt=rgtt(:,::-1,:) + else + rgtt = where(ismissing(rgmask3d),vecfld@_FillValue,rgtt) + rgtt=rgtt(:,:,::-1,:) + end if + + ; enter file definition mode to add variable attributes + setfileoption(outcdf,"DefineMode",True) + filevarattdef(outcdf, vecnames(n), rgtt) + setfileoption(outcdf,"DefineMode",False) + + outcdf->$vecnames(n)$ = (/rgtt/) + delete(rgtt) + end do + delete([/uvel,vvel,ut,vt,vecfld,vecpairs/]) + delete([/vecnames,vecgrids,vecmeth,vecdims/]) + ; nv, loop over number of vector pairs + end do + +;---------------------------------------------------------------------- +; close the outcdf and continue through filelist +;---------------------------------------------------------------------- + + delete(outcdf) + ; rename mld to ePBL if required + do nv = 0,nvars-1 + varname = varlist(nv,0) + ; if(varname .eq. "mld" .and. valid(nv))then + if(varname .eq. "MLD_003" .and. valid(nv))then + print("Renaming MLD_003 to mld") + ;print(ncocmd+" "+outfile) + system(ncocmd+" "+outfile) + end if + end do + + ; ii, loop over files +; + ;jj, loop over destination grids + delete([/lat,lon,nlon,nlat/]) + delete([/rgmask2d,rgmask3d/]) + end do + print("One complete ocn file in " + (get_cpu_time() - begTime) + " seconds") +exit +end diff --git a/ush/ozn_xtrct.sh b/ush/ozn_xtrct.sh new file mode 100755 index 0000000000..57ff87be5f --- /dev/null +++ b/ush/ozn_xtrct.sh @@ -0,0 +1,254 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +#------------------------------------------------------------------ +# ozn_xtrct.sh +# +# This script performs the data extraction from the oznstat +# diagnostic files. The resulting data (*.ieee_d) files, GrADS +# control files and stdout files will be moved to the +# $TANKverf_ozn. +# +# Calling scripts must define: +# $TANKverf_ozn +# $PDY +# $cyc +# +# Return values are +# 0 = normal +# 2 = unable to generate satype list; may indicate no diag +# files found in oznstat file +#------------------------------------------------------------------ + +#-------------------------------------------------- +# check_diag_files +# +# Compare $satype (which contains the contents of +# gdas_oznmon_satype.txt to $avail_satype which is +# determined by the contents of the oznstat file. +# Report any missing diag files in a file named +# bad_diag.$PDY$cyc +# +check_diag_files() { + pdate=$1 + found_satype=$2 + avail_satype=$3 + + out_file="bad_diag.${pdate}" + + echo ""; echo ""; echo "--> check_diag_files" + + for type in ${found_satype}; do + len_check=$(echo "${avail_satype}" | grep "${type}" | wc -c) + + if [[ ${len_check} -le 1 ]]; then + echo "missing diag file -- diag_${type}_ges.${pdate}.gz not found" >> "./${out_file}" + fi + done + + echo "<-- check_diag_files"; echo ""; echo "" +} + + +iret=0 +export NCP=${NCP:-/bin/cp} +VALIDATE_DATA=${VALIDATE_DATA:-0} +nregion=${nregion:-6} +DO_DATA_RPT=${DO_DATA_RPT:-0} + +netcdf_boolean=".false." +if [[ ${OZNMON_NETCDF} -eq 1 ]]; then + netcdf_boolean=".true." +fi + +OZNMON_NEW_HDR=${OZNMON_NEW_HDR:-0} +new_hdr="F" +if [[ ${OZNMON_NEW_HDR} -eq 1 ]]; then + new_hdr="T" +fi + +#------------------------------------------------------------------ +# if VALIDATE_DATA then locate and untar base file +# +validate=".FALSE." +if [[ ${VALIDATE_DATA} -eq 1 ]]; then + if [[ ! -e ${ozn_val_file} && ! -h ${ozn_val_file} ]]; then + echo "WARNING: VALIDATE_DATA set to 1, but unable to locate ${ozn_val_file}" + echo " Setting VALIDATE_DATA to 0/OFF" + VALIDATE_DATA=0 + else + validate=".TRUE." + val_file=$(basename "${ozn_val_file}") + ${NCP} "${ozn_val_file}" "${val_file}" + tar -xvf "${val_file}" + fi +fi +echo "VALIDATE_DATA, validate = ${VALIDATE_DATA}, ${validate} " + + + +#------------------------------------------------------------------ +# ozn_ptype here is the processing type which is intended to be "ges" +# or "anl". Default is "ges". +# +ozn_ptype=${ozn_ptype:-"ges anl"} + + +#--------------------------------------------------------------------------- +# Build satype list from the available diag files. +# +# An empty satype list means there are no diag files to process. That's +# a problem, reported by an iret value of 2 +# + +avail_satype=$(ls -1 d*ges* | sed -e 's/_/ /g;s/\./ /' | gawk '{ print $2 "_" $3 }') + +if [[ ${DO_DATA_RPT} -eq 1 ]]; then + if [[ -e ${SATYPE_FILE} ]]; then + satype=$(cat "${SATYPE_FILE}") + check_diag_files "${PDY}${cyc}" "${satype}" "${avail_satype}" + else + echo "WARNING: missing ${SATYPE_FILE}" + fi +fi + +len_satype=$(echo -n "${satype}" | wc -c) + +if [[ ${len_satype} -le 1 ]]; then + satype=${avail_satype} +fi + +echo "${satype}" + + +len_satype=$(echo -n "${satype}" | wc -c) + +if [[ ${DO_DATA_RPT} -eq 1 && ${len_satype} -lt 1 ]]; then + iret=2 + +else + + #-------------------------------------------------------------------- + # Copy extraction programs to working directory + # + ${NCP} "${HOMEgfs}/exec/oznmon_time.x" ./oznmon_time.x + if [[ ! -e oznmon_time.x ]]; then + iret=2 + exit ${iret} + fi + ${NCP} "${HOMEgfs}/exec/oznmon_horiz.x" ./oznmon_horiz.x + if [[ ! -e oznmon_horiz.x ]]; then + iret=3 + exit ${iret} + fi + + + #--------------------------------------------------------------------------- + # Outer loop over $ozn_ptype (default values 'ges', 'anl') + # + for ptype in ${ozn_ptype}; do + + iyy="${PDY:0:4}" + imm="${PDY:4:2}" + idd="${PDY:6:2}" + ihh=${cyc} + + for type in ${avail_satype}; do + if [[ -f "diag_${type}_${ptype}.${PDY}${cyc}.gz" ]]; then + mv "diag_${type}_${ptype}.${PDY}${cyc}.gz" "${type}.${ptype}.gz" + gunzip "./${type}.${ptype}.gz" + + echo "processing ptype, type: ${ptype}, ${type}" + rm -f input + +cat << EOF > input + &INPUT + satname='${type}', + iyy=${iyy}, + imm=${imm}, + idd=${idd}, + ihh=${ihh}, + idhh=-720, + incr=6, + nregion=${nregion}, + region(1)='global', rlonmin(1)=-180.0,rlonmax(1)=180.0,rlatmin(1)=-90.0,rlatmax(1)= 90.0, + region(2)='70N-90N', rlonmin(2)=-180.0,rlonmax(2)=180.0,rlatmin(2)= 70.0,rlatmax(2)= 90.0, + region(3)='20N-70N', rlonmin(3)=-180.0,rlonmax(3)=180.0,rlatmin(3)= 20.0,rlatmax(3)= 70.0, + region(4)='20S-20N', rlonmin(4)=-180.0,rlonmax(4)=180.0,rlatmin(4)=-20.0,rlatmax(4)= 20.0, + region(5)='20S-70S', rlonmin(5)=-180.0,rlonmax(5)=180.0,rlatmin(5)=-70.0,rlatmax(5)=-20.0, + region(6)='70S-90S', rlonmin(6)=-180.0,rlonmax(6)=180.0,rlatmin(6)=-90.0,rlatmax(6)=-70.0, + validate=${validate}, + new_hdr=${new_hdr}, + ptype=${ptype}, + netcdf=${netcdf_boolean} + / +EOF + + + echo "oznmon_time.x HAS STARTED ${type}" + + ./oznmon_time.x < input > "stdout.time.${type}.${ptype}" + + echo "oznmon_time.x HAS ENDED ${type}" + + if [[ ! -d ${TANKverf_ozn}/time ]]; then + mkdir -p "${TANKverf_ozn}/time" + fi + ${NCP} "${type}.${ptype}.ctl" "${TANKverf_ozn}/time/" + ${NCP} "${type}.${ptype}.${PDY}${cyc}.ieee_d" "${TANKverf_ozn}/time/" + + ${NCP} bad* "${TANKverf_ozn}/time/" + + rm -f input + +cat << EOF > input + &INPUT + satname='${type}', + iyy=${iyy}, + imm=${imm}, + idd=${idd}, + ihh=${ihh}, + idhh=-18, + incr=6, + new_hdr=${new_hdr}, + ptype=${ptype}, + netcdf=${netcdf_boolean} + / +EOF + + echo "oznmon_horiz.x HAS STARTED ${type}" + + ./oznmon_horiz.x < input > "stdout.horiz.${type}.${ptype}" + + echo "oznmon_horiz.x HAS ENDED ${type}" + + if [[ ! -d ${TANKverf_ozn}/horiz ]]; then + mkdir -p "${TANKverf_ozn}/horiz" + fi + ${NCP} "${type}.${ptype}.ctl" "${TANKverf_ozn}/horiz/" + + ${COMPRESS} "${type}.${ptype}.${PDY}${cyc}.ieee_d" + ${NCP} "${type}.${ptype}.${PDY}${cyc}.ieee_d.${Z}" "${TANKverf_ozn}/horiz/" + + + echo "finished processing ptype, type: ${ptype}, ${type}" + + else + echo "diag file for ${type}.${ptype} not found" + fi + + done # type in satype + + done # ptype in $ozn_ptype + + tar -cvf stdout.horiz.tar stdout.horiz* + ${COMPRESS} stdout.horiz.tar + ${NCP} "stdout.horiz.tar.${Z}" "${TANKverf_ozn}/horiz/" + + tar -cvf stdout.time.tar stdout.time* + ${COMPRESS} stdout.time.tar + ${NCP} "stdout.time.tar.${Z}" "${TANKverf_ozn}/time/" +fi + +exit ${iret} diff --git a/ush/parse-storm-type.pl b/ush/parse-storm-type.pl index 332deb5353..3f1a362f65 100755 --- a/ush/parse-storm-type.pl +++ b/ush/parse-storm-type.pl @@ -5,7 +5,7 @@ while(defined($_=<>)) { chomp; - /^((?:NHC |JTWC) [0-59]\d[A-Z]) (\S+)\s+(.*\d\d\d\d\d\d\d\d \d\d\d\d.{34} .. .*)/ or do { + /^((?:NHC |JTWC) [0-589]\d[A-Z]) (\S+)\s+(.*\d\d\d\d\d\d\d\d \d\d\d\d.{34} .. .*)/ or do { warn "Ignoring invalid line: \"$_\"\n"; next; }; @@ -19,7 +19,8 @@ if(length($line)>=152) { $tctype=substr($_,150,2); } else { - warn "MISSING STORM TYPE (ASSUME XX): $_\n"; + # warn "MISSING STORM TYPE (ASSUME XX): $_\n"; + warn "NO STORM TYPE: $_\n"; } if($tctype =~ /DB|EX|LO|WV|XX/i) { warn "Ignoring line due to TC type $tctype: $_"; diff --git a/ush/parsing_model_configure_DATM.sh b/ush/parsing_model_configure_DATM.sh new file mode 100755 index 0000000000..ecd3fa6dd6 --- /dev/null +++ b/ush/parsing_model_configure_DATM.sh @@ -0,0 +1,38 @@ +#! /usr/bin/env bash + +##### +## "parsing_model_configure_DATM.sh" +## This script writes model configure file +## for DATM model +## +## This is the child script of ex-global forecast, +## writing model configure file for DATM +## This script is a direct execution. +##### + +DATM_model_configure(){ + +rm -f model_configure +cat > model_configure <> model_configure < ice_in <> diag_table + + +# copy data table +${NCP} "${DATA_TABLE}" data_table + +# build field_table +if [[ -n "${AERO_FIELD_TABLE:-}" ]]; then + nrec=$(wc -l < "${FIELD_TABLE}") + prec=${nrec} + if (( dnats > 0 )); then + prec=$( grep -F -n TRACER "${FIELD_TABLE}" 2> /dev/null | tail -n "${dnats}" | head -1 | cut -d: -f1 ) + prec=${prec:-0} + prec=$(( prec > 0 ? prec - 1 : prec )) + fi + { \ + head -n "${prec}" "${FIELD_TABLE}" ; \ + cat "${AERO_FIELD_TABLE}" ; \ + tail -n $(( nrec - prec )) "${FIELD_TABLE}" ; \ + } > field_table + # add non-prognostic tracers from additional table + dnats=$(( dnats + dnats_aero )) +else + ${NCP} "${FIELD_TABLE}" field_table +fi + +cat > input.nml <> input.nml << EOF + oz_phys = .false. + oz_phys_2015 = .true. +EOF + ;; + "FV3_GSD_v0") + cat >> input.nml << EOF + iovr = ${iovr:-"3"} + ltaerosol = ${ltaerosol:-".false."} + lradar = ${lradar:-".false."} + ttendlim = ${ttendlim:-0.005} + oz_phys = ${oz_phys:-".false."} + oz_phys_2015 = ${oz_phys_2015:-".true."} + lsoil_lsm = ${lsoil_lsm:-"4"} + do_mynnedmf = ${do_mynnedmf:-".false."} + do_mynnsfclay = ${do_mynnsfclay:-".false."} + icloud_bl = ${icloud_bl:-"1"} + bl_mynn_edmf = ${bl_mynn_edmf:-"1"} + bl_mynn_tkeadvect=${bl_mynn_tkeadvect:-".true."} + bl_mynn_edmf_mom=${bl_mynn_edmf_mom:-"1"} + min_lakeice = ${min_lakeice:-"0.15"} + min_seaice = ${min_seaice:-"0.15"} + use_cice_alb = ${use_cice_alb:-".false."} +EOF + ;; + FV3_GFS_v16_coupled*) + cat >> input.nml << EOF + iovr = ${iovr:-"3"} + ltaerosol = ${ltaerosol:-".false."} + lradar = ${lradar:-".false."} + ttendlim = ${ttendlim:-"0.005"} + oz_phys = ${oz_phys:-".false."} + oz_phys_2015 = ${oz_phys_2015:-".true."} + do_mynnedmf = ${do_mynnedmf:-".false."} + do_mynnsfclay = ${do_mynnsfclay:-".false."} + icloud_bl = ${icloud_bl:-"1"} + bl_mynn_edmf = ${bl_mynn_edmf:-"1"} + bl_mynn_tkeadvect = ${bl_mynn_tkeadvect:-".true."} + bl_mynn_edmf_mom = ${bl_mynn_edmf_mom:-"1"} + min_lakeice = ${min_lakeice:-"0.15"} + min_seaice = ${min_seaice:-"0.15"} +EOF + ;; + FV3_GFS_v16*) + cat >> input.nml << EOF + iovr = ${iovr:-"3"} + ltaerosol = ${ltaerosol:-".false."} + lradar = ${lradar:-".false."} + ttendlim = ${ttendlim:-"0.005"} + oz_phys = ${oz_phys:-".false."} + oz_phys_2015 = ${oz_phys_2015:-".true."} + lsoil_lsm = ${lsoil_lsm:-"4"} + do_mynnedmf = ${do_mynnedmf:-".false."} + do_mynnsfclay = ${do_mynnsfclay:-".false."} + icloud_bl = ${icloud_bl:-"1"} + bl_mynn_edmf = ${bl_mynn_edmf:-"1"} + bl_mynn_tkeadvect = ${bl_mynn_tkeadvect:-".true."} + bl_mynn_edmf_mom = ${bl_mynn_edmf_mom:-"1"} + min_lakeice = ${min_lakeice:-"0.15"} + min_seaice = ${min_seaice:-"0.15"} +EOF + ;; + FV3_GFS_v17*) + local default_dt_inner=$(( DELTIM/2 )) + cat >> input.nml << EOF + iovr = ${iovr:-"3"} + ltaerosol = ${ltaerosol:-".false."} + lradar = ${lradar:-".false."} + ttendlim = ${ttendlim:-"-999"} + dt_inner = ${dt_inner:-"${default_dt_inner}"} + sedi_semi = ${sedi_semi:-".true."} + decfl = ${decfl:-"10"} + oz_phys = ${oz_phys:-".false."} + oz_phys_2015 = ${oz_phys_2015:-".true."} + lsoil_lsm = ${lsoil_lsm:-"4"} + do_mynnedmf = ${do_mynnedmf:-".false."} + do_mynnsfclay = ${do_mynnsfclay:-".false."} + icloud_bl = ${icloud_bl:-"1"} + bl_mynn_edmf = ${bl_mynn_edmf:-"1"} + bl_mynn_tkeadvect = ${bl_mynn_tkeadvect:-".true."} + bl_mynn_edmf_mom = ${bl_mynn_edmf_mom:-"1"} + do_ugwp = ${do_ugwp:-".false."} + do_tofd = ${do_tofd:-".false."} + gwd_opt = ${gwd_opt:-"2"} + do_ugwp_v0 = ${do_ugwp_v0:-".false."} + do_ugwp_v1 = ${do_ugwp_v1:-".true."} + do_ugwp_v0_orog_only = ${do_ugwp_v0_orog_only:-".false."} + do_ugwp_v0_nst_only = ${do_ugwp_v0_nst_only:-".false."} + do_gsl_drag_ls_bl = ${do_gsl_drag_ls_bl:-".true."} + do_gsl_drag_ss = ${do_gsl_drag_ss:-".true."} + do_gsl_drag_tofd = ${do_gsl_drag_tofd:-".true."} + do_ugwp_v1_orog_only = ${do_ugwp_v1_orog_only:-".false."} + min_lakeice = ${min_lakeice:-"0.15"} + min_seaice = ${min_seaice:-"0.15"} + use_cice_alb = ${use_cice_alb:-".false."} +EOF + ;; + *) + cat >> input.nml << EOF + iovr = ${iovr:-"3"} +EOF + ;; +esac + +cat >> input.nml <> input.nml << EOF + fscav_aero = ${fscav_aero:-'*:0.0'} +EOF +fi + +cat >> input.nml <> input.nml << EOF + iaufhrs = ${IAUFHRS} + iau_delthrs = ${IAU_DELTHRS} + iau_inc_files= ${IAU_INC_FILES} + iau_drymassfixer = .false. + iau_filter_increments = ${IAU_FILTER_INCREMENTS:-".false."} +EOF +fi + +if [[ ${DO_CA:-"NO"} = "YES" ]]; then + cat >> input.nml << EOF + do_ca = .true. + ca_global = ${ca_global:-".false."} + ca_sgs = ${ca_sgs:-".true."} + nca = ${nca:-"1"} + ncells = ${ncells:-"5"} + nlives = ${nlives:-"12"} + nseed = ${nseed:-"1"} + nfracseed = ${nfracseed:-"0.5"} + nthresh = ${nthresh:-"18"} + ca_trigger = ${ca_trigger:-".true."} + nspinup = ${nspinup:-"1"} + iseed_ca = ${ISEED_CA:-"12345"} +EOF +fi + +if [[ ${DO_LAND_PERT:-"NO"} = "YES" ]]; then + cat >> input.nml << EOF + lndp_type = ${lndp_type:-2} + n_var_lndp = ${n_var_lndp:-0} +EOF +fi + +# Close &gfs_physics_nml section +cat >> input.nml << EOF +/ +EOF + +if [[ ${knob_ugwp_version} -eq 0 ]]; then + cat >> input.nml << EOF +&cires_ugwp_nml + knob_ugwp_solver = ${knob_ugwp_solver:-2} + knob_ugwp_source = ${knob_ugwp_source:-1,1,0,0} + knob_ugwp_wvspec = ${knob_ugwp_wvspec:-1,25,25,25} + knob_ugwp_azdir = ${knob_ugwp_azdir:-2,4,4,4} + knob_ugwp_stoch = ${knob_ugwp_stoch:-0,0,0,0} + knob_ugwp_effac = ${knob_ugwp_effac:-1,1,1,1} + knob_ugwp_doaxyz = ${knob_ugwp_doaxyz:-1} + knob_ugwp_doheat = ${knob_ugwp_doheat:-1} + knob_ugwp_dokdis = ${knob_ugwp_dokdis:-1} + knob_ugwp_ndx4lh = ${knob_ugwp_ndx4lh:-1} + knob_ugwp_version = ${knob_ugwp_version:-0} + launch_level = ${launch_level:-54} +/ +EOF +fi + +if [[ ${knob_ugwp_version} -eq 1 ]]; then + cat >> input.nml << EOF +&cires_ugwp_nml + knob_ugwp_solver = ${knob_ugwp_solver:-2} + knob_ugwp_source = ${knob_ugwp_source:-1,1,0,0} + knob_ugwp_wvspec = ${knob_ugwp_wvspec:-1,25,25,25} + knob_ugwp_azdir = ${knob_ugwp_azdir:-2,4,4,4} + knob_ugwp_stoch = ${knob_ugwp_stoch:-0,0,0,0} + knob_ugwp_effac = ${knob_ugwp_effac:-1,1,1,1} + knob_ugwp_doaxyz = ${knob_ugwp_doaxyz:-1} + knob_ugwp_doheat = ${knob_ugwp_doheat:-1} + knob_ugwp_dokdis = ${knob_ugwp_dokdis:-2} + knob_ugwp_ndx4lh = ${knob_ugwp_ndx4lh:-4} + knob_ugwp_version = ${knob_ugwp_version:-1} + knob_ugwp_palaunch = ${knob_ugwp_palaunch:-275.0e2} + knob_ugwp_nslope = ${knob_ugwp_nslope:-1} + knob_ugwp_lzmax = ${knob_ugwp_lzmax:-15.750e3} + knob_ugwp_lzmin = ${knob_ugwp_lzmin:-0.75e3} + knob_ugwp_lzstar = ${knob_ugwp_lzstar:-2.0e3} + knob_ugwp_taumin = ${knob_ugwp_taumin:-0.25e-3} + knob_ugwp_tauamp = ${knob_ugwp_tauamp:-3.0e-3} + knob_ugwp_lhmet = ${knob_ugwp_lhmet:-200.0e3} + knob_ugwp_orosolv = ${knob_ugwp_orosolv:-'pss-1986'} +/ +EOF +fi + +echo "" >> input.nml + +cat >> input.nml <> input.nml +#if [ $MEMBER -gt 0 ]; then +if [[ "${DO_SPPT}" = "YES" || "${DO_SHUM}" = "YES" || "${DO_SKEB}" = "YES" || "${DO_LAND_PERT}" = "YES" ]]; then + + cat >> input.nml << EOF +&nam_stochy +EOF + + if [[ ${DO_SKEB} = "YES" ]]; then + cat >> input.nml << EOF + skeb = ${SKEB} + iseed_skeb = ${ISEED_SKEB:-${ISEED}} + skeb_tau = ${SKEB_TAU:-"-999."} + skeb_lscale = ${SKEB_LSCALE:-"-999."} + skebnorm = ${SKEBNORM:-"1"} + skeb_npass = ${SKEB_nPASS:-"30"} + skeb_vdof = ${SKEB_VDOF:-"5"} +EOF + fi + + if [[ ${DO_SHUM} = "YES" ]]; then + cat >> input.nml << EOF + shum = ${SHUM} + iseed_shum = ${ISEED_SHUM:-${ISEED}} + shum_tau = ${SHUM_TAU:-"-999."} + shum_lscale = ${SHUM_LSCALE:-"-999."} +EOF + fi + + if [[ ${DO_SPPT} = "YES" ]]; then + cat >> input.nml << EOF + sppt = ${SPPT} + iseed_sppt = ${ISEED_SPPT:-${ISEED}} + sppt_tau = ${SPPT_TAU:-"-999."} + sppt_lscale = ${SPPT_LSCALE:-"-999."} + sppt_logit = ${SPPT_LOGIT:-".true."} + sppt_sfclimit = ${SPPT_SFCLIMIT:-".true."} + use_zmtnblck = ${use_zmtnblck:-".true."} +EOF + fi + + cat >> input.nml << EOF + ${nam_stochy_nml:-} +/ +EOF + + if [[ ${DO_LAND_PERT} = "YES" ]]; then + cat >> input.nml << EOF +&nam_sfcperts + lndp_type = ${lndp_type} + LNDP_TAU = ${LNDP_TAU} + LNDP_SCALE = ${LNDP_SCALE} + ISEED_LNDP = ${ISEED_LNDP:-${ISEED}} + lndp_var_list = ${lndp_var_list} + lndp_prt_list = ${lndp_prt_list} + ${nam_sfcperts_nml:-} +/ +EOF + else + cat >> input.nml << EOF +&nam_sfcperts + ${nam_sfcperts_nml:-} +/ +EOF + fi + +else + + cat >> input.nml << EOF +&nam_stochy +/ +&nam_sfcperts +/ +EOF + +fi + +# Echo out formatted "input.nml" +echo "====================================" +echo "FV3_namelists(): 'input.nml'" +cat input.nml +echo "====================================" +} diff --git a/ush/parsing_namelists_MOM6.sh b/ush/parsing_namelists_MOM6.sh new file mode 100755 index 0000000000..8059096363 --- /dev/null +++ b/ush/parsing_namelists_MOM6.sh @@ -0,0 +1,91 @@ +#! /usr/bin/env bash + +MOM6_namelists(){ + +# MOM6 namelists generation + +if [[ "${cplwav}" == ".true." ]] ; then + local MOM6_USE_WAVES='True' +else + local MOM6_USE_WAVES='False' +fi + +cat >> input.nml <> input.nml <> input.nml <> input.nml < "${DATA}/INPUT/MOM_input" +rm "${DATA}/INPUT/MOM_input_template_${OCNRES}" + +#data table for runoff: +DATA_TABLE=${DATA_TABLE:-${HOMEgfs}/parm/ufs/fv3/data_table} +${NCP} "${DATA_TABLE}" "${DATA}/data_table_template" +sed -e "s/@\[FRUNOFF\]/${FRUNOFF}/g" "${DATA}/data_table_template" > "${DATA}/data_table" +rm "${DATA}/data_table_template" + +} diff --git a/ush/parsing_namelists_WW3.sh b/ush/parsing_namelists_WW3.sh new file mode 100755 index 0000000000..9b0a94695c --- /dev/null +++ b/ush/parsing_namelists_WW3.sh @@ -0,0 +1,326 @@ +#! /usr/bin/env bash + +WW3_namelists(){ + +# WW3 namelists/input generation + + FHMAX_WAV=${FHMAX_WAV:-384} + + # Date and time stuff + + # Beginning time for outpupt may differ from SDATE if DOIAU=YES + export date=$PDY + export YMDH=${PDY}${cyc} + # Roll back $IAU_FHROT hours of DOIAU=YES + if [ "$DOIAU" = "YES" ] + then + WAVHINDH=$(( WAVHINDH + IAU_FHROT )) + fi + # Set time stamps for model start and output + # For special case when IAU is on but this is an initial half cycle + if [ $IAU_OFFSET = 0 ]; then + ymdh_beg=$YMDH + else + ymdh_beg=$($NDATE -$WAVHINDH $YMDH) + fi + time_beg="$(echo $ymdh_beg | cut -c1-8) $(echo $ymdh_beg | cut -c9-10)0000" + ymdh_end=$($NDATE $FHMAX_WAV $YMDH) + time_end="$(echo $ymdh_end | cut -c1-8) $(echo $ymdh_end | cut -c9-10)0000" + ymdh_beg_out=$YMDH + time_beg_out="$(echo $ymdh_beg_out | cut -c1-8) $(echo $ymdh_beg_out | cut -c9-10)0000" + + # Restart file times (already has IAU_FHROT in WAVHINDH) + RSTOFFSET=$(( ${WAVHCYC} - ${WAVHINDH} )) + # Update restart time is added offset relative to model start + RSTOFFSET=$(( ${RSTOFFSET} + ${RSTIOFF_WAV} )) + ymdh_rst_ini=$($NDATE ${RSTOFFSET} $YMDH) + RST2OFFSET=$(( DT_2_RST_WAV / 3600 )) + ymdh_rst2_ini=$($NDATE ${RST2OFFSET} $YMDH) # DT2 relative to first-first-cycle restart file + # First restart file for cycling + time_rst_ini="$(echo $ymdh_rst_ini | cut -c1-8) $(echo $ymdh_rst_ini | cut -c9-10)0000" + if [ ${DT_1_RST_WAV} = 1 ]; then + time_rst1_end=${time_rst_ini} + else + RST1OFFSET=$(( DT_1_RST_WAV / 3600 )) + ymdh_rst1_end=$($NDATE $RST1OFFSET $ymdh_rst_ini) + time_rst1_end="$(echo $ymdh_rst1_end | cut -c1-8) $(echo $ymdh_rst1_end | cut -c9-10)0000" + fi + # Second restart file for checkpointing + if [ "${RSTTYPE_WAV}" = "T" ]; then + time_rst2_ini="$(echo $ymdh_rst2_ini | cut -c1-8) $(echo $ymdh_rst2_ini | cut -c9-10)0000" + time_rst2_end=$time_end + # Condition for gdas run or any other run when checkpoint stamp is > ymdh_end + if [ $ymdh_rst2_ini -ge $ymdh_end ]; then + ymdh_rst2_ini=$($NDATE 3 $ymdh_end) + time_rst2_ini="$(echo $ymdh_rst2_ini | cut -c1-8) $(echo $ymdh_rst2_ini | cut -c9-10)0000" + time_rst2_end=$time_rst2_ini + fi + else + time_rst2_ini="$" + time_rst2_end= + DT_2_RST_WAV= + fi + + + set +x + echo ' ' + echo 'Times in wave model format :' + echo '----------------------------' + echo " date / cycle : $date $cycle" + echo " starting time : $time_beg" + echo " ending time : $time_end" + echo ' ' + set_trace + + + +# --------------------------------------------------------------------------- # +# Create ww3_multi/shel.inp + + if [ $waveMULTIGRID = ".true." ]; then + # ww3_multi template + if [ -f $PARMwave/ww3_multi.inp.tmpl ]; then + cp $PARMwave/ww3_multi.inp.tmpl ww3_multi.inp.tmpl + fi + if [ ! -f ww3_multi.inp.tmpl ]; then + echo "ABNORMAL EXIT: NO TEMPLATE FOR WW3 MULTI INPUT FILE" + exit 11 + fi + else + # ww3_multi template + if [ -f $PARMwave/ww3_shel.inp.tmpl ]; then + cp $PARMwave/ww3_shel.inp.tmpl ww3_shel.inp.tmpl + fi + if [ ! -f ww3_shel.inp.tmpl ]; then + echo "ABNORMAL EXIT: NO TEMPLATE FOR WW3 SHEL INPUT FILE" + exit 12 + fi + fi + +# Buoy location file + + if [ -f $PARMwave/wave_${NET}.buoys ] + then + cp $PARMwave/wave_${NET}.buoys buoy.loc + fi + + if [ -f buoy.loc ] + then + set +x + echo " buoy.loc copied ($PARMwave/wave_${NET}.buoys)." + set_trace + else + echo " FATAL ERROR : buoy.loc ($PARMwave/wave_${NET}.buoys) NOT FOUND" + exit 12 + fi + + + +if [ $waveMULTIGRID = ".true." ]; then +#multi + +# Initialize inp file parameters + NFGRIDS=0 + NMGRIDS=0 + CPLILINE='$' + ICELINE='$' + ICEFLAG='no' + CURRLINE='$' + CURRFLAG='no' + WINDLINE='$' + WINDFLAG='no' + UNIPOINTS='$' + +# Check for required inputs and coupling options + if [ $waveuoutpGRD ] + then + UNIPOINTS="'$waveuoutpGRD'" + fi + +# Check if waveesmfGRD is set + if [ ${waveesmfGRD} ] + then + NFGRIDS=$(expr $NFGRIDS + 1) + fi + + case ${WW3ATMINP} in + 'YES' ) + NFGRIDS=$(expr $NFGRIDS + 1) + WINDLINE=" '$WAVEWND_FID' F F T F F F F F F" + WINDFLAG="$WAVEWND_FID" + ;; + 'CPL' ) + WNDIFLAG='T' + if [ ${waveesmfGRD} ] + then + WINDFLAG="CPL:${waveesmfGRD}" + CPLILINE=" '${waveesmfGRD}' F F T F F F F F F" + else + WINDFLAG="CPL:native" + fi + ;; + esac + + case ${WW3ICEINP} in + 'YES' ) + NFGRIDS=$(expr $NFGRIDS + 1) + ICEIFLAG='T' + ICELINE=" '$WAVEICE_FID' F F F T F F F F F" + ICEFLAG="$WAVEICE_FID" + ;; + 'CPL' ) + ICEIFLAG='T' + if [ ${waveesmfGRD} ] + then + ICEFLAG="CPL:${waveesmfGRD}" + CPLILINE=" '${waveesmfGRD}' F F ${WNDIFLAG} T F F F F F" + else + ICEFLAG="CPL:native" + fi + ;; + esac + + case ${WW3CURINP} in + 'YES' ) + if [ "$WAVECUR_FID" != "$WAVEICE_FID" ]; then + NFGRIDS=$(expr $NFGRIDS + 1) + CURRLINE=" '$WAVECUR_FID' F T F F F F F F F" + CURRFLAG="$WAVECUR_FID" + else # cur fields share the same grid as ice grid + ICELINE=" '$WAVEICE_FID' F T F ${ICEIFLAG} F F F F F" + CURRFLAG="$WAVEICE_FID" + fi + ;; + 'CPL' ) + CURIFLAG='T' + if [ ${waveesmfGRD} ] + then + CURRFLAG="CPL:${waveesmfGRD}" + CPLILINE=" '${waveesmfGRD}' F T ${WNDIFLAG} ${ICEFLAG} F F F F F" + else + CURRFLAG="CPL:native" + fi + ;; + esac + + unset agrid + agrid= + gline= + GRDN=0 +# grdGRP=1 # Single group for now + for grid in ${waveGRD} + do + GRDN=$(expr ${GRDN} + 1) + agrid=( ${agrid[*]} ${grid} ) + NMGRIDS=$(expr $NMGRIDS + 1) + gridN=$(echo $waveGRDN | awk -v i=$GRDN '{print $i}') + gridG=$(echo $waveGRDG | awk -v i=$GRDN '{print $i}') + gline="${gline}'${grid}' 'no' 'CURRFLAG' 'WINDFLAG' 'ICEFLAG' 'no' 'no' 'no' 'no' 'no' ${gridN} ${gridG} 0.00 1.00 F\n" + done + gline="${gline}\$" + echo $gline + + sed -e "s/NFGRIDS/$NFGRIDS/g" \ + -e "s/NMGRIDS/${NMGRIDS}/g" \ + -e "s/FUNIPNT/${FUNIPNT}/g" \ + -e "s/IOSRV/${IOSRV}/g" \ + -e "s/FPNTPROC/${FPNTPROC}/g" \ + -e "s/FGRDPROC/${FGRDPROC}/g" \ + -e "s/OUTPARS/${OUTPARS_WAV}/g" \ + -e "s/CPLILINE/${CPLILINE}/g" \ + -e "s/UNIPOINTS/${UNIPOINTS}/g" \ + -e "s/GRIDLINE/${gline}/g" \ + -e "s/ICELINE/$ICELINE/g" \ + -e "s/CURRLINE/$CURRLINE/g" \ + -e "s/WINDLINE/$WINDLINE/g" \ + -e "s/ICEFLAG/$ICEFLAG/g" \ + -e "s/CURRFLAG/$CURRFLAG/g" \ + -e "s/WINDFLAG/$WINDFLAG/g" \ + -e "s/RUN_BEG/$time_beg/g" \ + -e "s/RUN_END/$time_end/g" \ + -e "s/OUT_BEG/$time_beg_out/g" \ + -e "s/OUT_END/$time_end/g" \ + -e "s/DTFLD/ $DTFLD_WAV/g" \ + -e "s/FLAGMASKCOMP/ $FLAGMASKCOMP/g" \ + -e "s/FLAGMASKOUT/ $FLAGMASKOUT/g" \ + -e "s/GOFILETYPE/ $GOFILETYPE/g" \ + -e "s/POFILETYPE/ $POFILETYPE/g" \ + -e "s/DTPNT/ $DTPNT_WAV/g" \ + -e "/BUOY_FILE/r buoy.loc" \ + -e "s/BUOY_FILE/DUMMY/g" \ + -e "s/RST_BEG/$time_rst_ini/g" \ + -e "s/RSTTYPE/$RSTTYPE_WAV/g" \ + -e "s/RST_2_BEG/$time_rst2_ini/g" \ + -e "s/DTRST/$DT_1_RST_WAV/g" \ + -e "s/DT_2_RST/$DT_2_RST_WAV/g" \ + -e "s/RST_END/$time_rst1_end/g" \ + -e "s/RST_2_END/$time_rst2_end/g" \ + ww3_multi.inp.tmpl | \ + sed -n "/DUMMY/!p" > ww3_multi.inp + + rm -f ww3_multi.inp.tmpl buoy.loc + + cat ww3_multi.inp + +else + #ww3_shel + +# Initialize inp file parameters + ICELINE='F F' + CURRLINE='F F' + WINDLINE='F F' + + case ${WW3ATMINP} in + 'YES' ) + WINDLINE="T F";; + 'CPL' ) + WINDLINE="C F";; + esac + + case ${WW3ICEINP} in + 'YES' ) + ICELINE="T F";; + 'CPL' ) + ICELINE="C F";; + esac + + case ${WW3CURINP} in + 'YES' ) + CURRLINE="T F";; + 'CPL' ) + CURRLINE="C F";; + esac + + sed -e "s/IOSRV/${IOSRV}/g" \ + -e "s/OUTPARS/${OUTPARS_WAV}/g" \ + -e "s/ICELINE/$ICELINE/g" \ + -e "s/CURRLINE/$CURRLINE/g" \ + -e "s/WINDLINE/$WINDLINE/g" \ + -e "s/RUN_BEG/$time_beg/g" \ + -e "s/RUN_END/$time_end/g" \ + -e "s/OUT_BEG/$time_beg_out/g" \ + -e "s/OUT_END/$time_end/g" \ + -e "s/DTFLD/ $DTFLD_WAV/g" \ + -e "s/GOFILETYPE/ $GOFILETYPE/g" \ + -e "s/POFILETYPE/ $POFILETYPE/g" \ + -e "s/DTPNT/ $DTPNT_WAV/g" \ + -e "s/DTPNT/ $DTPNT_WAV/g" \ + -e "/BUOY_FILE/r buoy.loc" \ + -e "s/BUOY_FILE/DUMMY/g" \ + -e "s/RST_BEG/$time_rst_ini/g" \ + -e "s/RSTTYPE/$RSTTYPE_WAV/g" \ + -e "s/RST_2_BEG/$time_rst2_ini/g" \ + -e "s/DTRST/$DT_1_RST_WAV/g" \ + -e "s/DT_2_RST/$DT_2_RST_WAV/g" \ + -e "s/RST_END/$time_rst1_end/g" \ + -e "s/RST_2_END/$time_rst2_end/g" \ + ww3_shel.inp.tmpl | \ + sed -n "/DUMMY/!p" > ww3_shel.inp + + rm -f ww3_shel.inp.tmpl buoy.loc + + cat ww3_shel.inp + +fi + +} diff --git a/ush/preamble.sh b/ush/preamble.sh new file mode 100644 index 0000000000..be64684aa8 --- /dev/null +++ b/ush/preamble.sh @@ -0,0 +1,157 @@ +#! /usr/bin/env bash + +####### +# Preamble script to be SOURCED at the beginning of every script. Sets +# useful PS4 and optionally turns on set -x and set -eu. Also sets up +# crude script timing and provides a postamble that runs on exit. +# +# Syntax: +# preamble.sh [id] +# +# Aruguments: +# id: Optional identifier string. Use when running the same script +# multiple times in the same job (e.g. MPMD) +# +# Input environment variables: +# TRACE (YES/NO): Whether to echo every command (set -x) [default: "YES"] +# STRICT (YES/NO): Whether to exit immediately on error or undefined variable +# (set -eu) [default: "YES"] +# +####### +set +x +if (( $# > 0 )); then + id="(${1})" +else + id="" +fi + +# Record the start time so we can calculate the elapsed time later +start_time=$(date +%s) + +# Get the base name of the calling script +_calling_script=$(basename "${BASH_SOURCE[1]}") + +# Announce the script has begun +start_time_human=$(date -d"@${start_time}" -u) +echo "Begin ${_calling_script} at ${start_time_human}" + +declare -rx PS4='+ $(basename ${BASH_SOURCE[0]:-${FUNCNAME[0]:-"Unknown"}})[${LINENO}]'"${id}: " + +set_strict() { + if [[ ${STRICT:-"YES"} == "YES" ]]; then + # Exit on error and undefined variable + set -eu + fi +} + +set_trace() { + # Print the script name and line number of each command as it is + # executed when using trace. + if [[ ${TRACE:-"YES"} == "YES" ]]; then + set -x + fi +} + +postamble() { + # + # Commands to execute when a script ends. + # + # Syntax: + # postamble script start_time rc + # + # Arguments: + # script: name of the script ending + # start_time: start time of script (in seconds) + # rc: the exit code of the script + # + + set +x + script="${1}" + start_time="${2}" + rc="${3}" + + # Calculate the elapsed time + end_time=$(date +%s) + end_time_human=$(date -d@"${end_time}" -u +%H:%M:%S) + elapsed_sec=$((end_time - start_time)) + elapsed=$(date -d@"${elapsed_sec}" -u +%H:%M:%S) + + # Announce the script has ended, then pass the error code up + echo "End ${script} at ${end_time_human} with error code ${rc:-0} (time elapsed: ${elapsed})" + exit "${rc}" +} + +# Place the postamble in a trap so it is always called no matter how the script exits +# Shellcheck: Turn off warning about substitions at runtime instead of signal time +# shellcheck disable=SC2064 +trap "postamble ${_calling_script} ${start_time} \$?" EXIT +# shellcheck disable= + +function generate_com() { + # + # Generate a list COM variables from a template by substituting in env variables. + # + # Each argument must have a corresponding template with the name ${ARG}_TMPL. Any + # variables in the template are replaced with their values. Undefined variables + # are just removed without raising an error. + # + # Accepts as options `-r` and `-x`, which do the same thing as the same options in + # `declare`. Variables are automatically marked as `-g` so the variable is visible + # in the calling script. + # + # Syntax: + # generate_com [-rx] $var1[:$tmpl1] [$var2[:$tmpl2]] [...]] + # + # options: + # -r: Make variable read-only (same as `decalre -r`) + # -x: Mark variable for export (same as `declare -x`) + # var1, var2, etc: Variable names whose values will be generated from a template + # and declared + # tmpl1, tmpl2, etc: Specify the template to use (default is "${var}_TMPL") + # + # Examples: + # # Current cycle and RUN, implicitly using template COM_ATMOS_ANALYSIS_TMPL + # YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_ANALYSIS + # + # # Previous cycle and gdas using an explicit template + # RUN=${GDUMP} YMD=${gPDY} HH=${gcyc} generate_com -rx \ + # COM_ATMOS_HISTORY_PREV:COM_ATMOS_HISTORY_TMPL + # + # # Current cycle and COM for first member + # MEMDIR='mem001' YMD=${PDY} HH=${cyc} generate_com -rx COM_ATMOS_HISTORY + # + if [[ ${DEBUG_WORKFLOW:-"NO"} == "NO" ]]; then set +x; fi + local opts="-g" + local OPTIND=1 + while getopts "rx" option; do + opts="${opts}${option}" + done + shift $((OPTIND-1)) + + for input in "$@"; do + IFS=':' read -ra args <<< "${input}" + local com_var="${args[0]}" + local template + local value + if (( ${#args[@]} > 1 )); then + template="${args[1]}" + else + template="${com_var}_TMPL" + fi + if [[ ! -v "${template}" ]]; then + echo "FATAL ERROR in generate_com: Requested template ${template} not defined!" + exit 2 + fi + value=$(echo "${!template}" | envsubst) + # shellcheck disable=SC2086 + declare ${opts} "${com_var}"="${value}" + echo "generate_com :: ${com_var}=${value}" + done + set_trace +} +# shellcheck disable= +declare -xf generate_com + +# Turn on our settings +set_strict +set_trace diff --git a/ush/product_functions.sh b/ush/product_functions.sh new file mode 100755 index 0000000000..05b23fbee2 --- /dev/null +++ b/ush/product_functions.sh @@ -0,0 +1,40 @@ +#! /usr/bin/env bash + +function trim_rh() { + # trim RH values larger than 100. + local filename=$1 + ${WGRIB2} "${filename}" \ + -not_if ':RH:' -grib "${filename}.new" \ + -if ':RH:' -rpn "10:*:0.5:+:floor:1000:min:10:/" -set_grib_type same \ + -set_scaling -1 0 -grib_out "${filename}.new" + rc=$? + if (( rc == 0 )); then mv "${filename}.new" "${filename}"; fi + return "${rc}" +} + +function mod_icec() { + # modify icec based on land-sea mask + local filename=$1 + ${WGRIB2} "${filename}" \ + -if 'LAND' -rpn 'sto_1' -fi \ + -if 'ICEC' -rpn 'rcl_1:0:==:*' -fi \ + -set_grib_type same \ + -set_scaling same same \ + -grib_out "${filename}.new" + rc=$? + if (( rc == 0 )); then mv "${filename}.new" "${filename}"; fi + return "${rc}" +} + +function scale_dec() { + # change the scaling for temperature, precipitable water, and water-equivalent accumlated snow depth + local filename=$1 + ${WGRIB2} "${filename}" -not_if ':(TMP|PWAT|WEASD):' -grib "${filename}.new" \ + -if ':(TMP|PWAT):' -set_grib_type same \ + -set_scaling -1 0 -grib_out "${filename}.new" \ + -if ':(WEASD):' -set_grib_type same \ + -set_scaling 0 0 -grib_out "${filename}.new" + rc=$? + if (( rc == 0 )); then mv "${filename}.new" "${filename}"; fi + return "${rc}" +} diff --git a/parm/parm_fv3diag/data_table b/ush/python/pygfs/__init__.py similarity index 100% rename from parm/parm_fv3diag/data_table rename to ush/python/pygfs/__init__.py diff --git a/ush/python/pygfs/task/__init__.py b/ush/python/pygfs/task/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ush/python/pygfs/task/aero_analysis.py b/ush/python/pygfs/task/aero_analysis.py new file mode 100644 index 0000000000..0e515a0df4 --- /dev/null +++ b/ush/python/pygfs/task/aero_analysis.py @@ -0,0 +1,319 @@ +#!/usr/bin/env python3 + +import os +import glob +import gzip +import tarfile +from logging import getLogger +from typing import Dict, List, Any + +from wxflow import (AttrDict, + FileHandler, + add_to_datetime, to_fv3time, to_timedelta, + chdir, + to_fv3time, + YAMLFile, parse_yamltmpl, parse_j2yaml, save_as_yaml, + logit, + Executable, + WorkflowException) +from pygfs.task.analysis import Analysis + +logger = getLogger(__name__.split('.')[-1]) + + +class AerosolAnalysis(Analysis): + """ + Class for global aerosol analysis tasks + """ + @logit(logger, name="AerosolAnalysis") + def __init__(self, config): + super().__init__(config) + + _res = int(self.config['CASE'][1:]) + _res_anl = int(self.config['CASE_ANL'][1:]) + _window_begin = add_to_datetime(self.runtime_config.current_cycle, -to_timedelta(f"{self.config['assim_freq']}H") / 2) + _fv3jedi_yaml = os.path.join(self.runtime_config.DATA, f"{self.runtime_config.CDUMP}.t{self.runtime_config['cyc']:02d}z.aerovar.yaml") + + # Create a local dictionary that is repeatedly used across this class + local_dict = AttrDict( + { + 'npx_ges': _res + 1, + 'npy_ges': _res + 1, + 'npz_ges': self.config.LEVS - 1, + 'npz': self.config.LEVS - 1, + 'npx_anl': _res_anl + 1, + 'npy_anl': _res_anl + 1, + 'npz_anl': self.config['LEVS'] - 1, + 'AERO_WINDOW_BEGIN': _window_begin, + 'AERO_WINDOW_LENGTH': f"PT{self.config['assim_freq']}H", + 'aero_bkg_fhr': map(int, self.config['aero_bkg_times'].split(',')), + 'OPREFIX': f"{self.runtime_config.CDUMP}.t{self.runtime_config.cyc:02d}z.", # TODO: CDUMP is being replaced by RUN + 'APREFIX': f"{self.runtime_config.CDUMP}.t{self.runtime_config.cyc:02d}z.", # TODO: CDUMP is being replaced by RUN + 'GPREFIX': f"gdas.t{self.runtime_config.previous_cycle.hour:02d}z.", + 'fv3jedi_yaml': _fv3jedi_yaml, + } + ) + + # task_config is everything that this task should need + self.task_config = AttrDict(**self.config, **self.runtime_config, **local_dict) + + @logit(logger) + def initialize(self: Analysis) -> None: + """Initialize a global aerosol analysis + + This method will initialize a global aerosol analysis using JEDI. + This includes: + - staging CRTM fix files + - staging FV3-JEDI fix files + - staging B error files + - staging model backgrounds + - generating a YAML file for the JEDI executable + - creating output directories + """ + super().initialize() + + # stage CRTM fix files + crtm_fix_list_path = os.path.join(self.task_config['HOMEgfs'], 'parm', 'gdas', 'aero_crtm_coeff.yaml') + logger.debug(f"Staging CRTM fix files from {crtm_fix_list_path}") + crtm_fix_list = parse_j2yaml(crtm_fix_list_path, self.task_config) + FileHandler(crtm_fix_list).sync() + + # stage fix files + jedi_fix_list_path = os.path.join(self.task_config['HOMEgfs'], 'parm', 'gdas', 'aero_jedi_fix.yaml') + logger.debug(f"Staging JEDI fix files from {jedi_fix_list_path}") + jedi_fix_list = parse_j2yaml(jedi_fix_list_path, self.task_config) + FileHandler(jedi_fix_list).sync() + + # stage berror files + # copy BUMP files, otherwise it will assume ID matrix + if self.task_config.get('STATICB_TYPE', 'identity') in ['bump']: + FileHandler(self.get_berror_dict(self.task_config)).sync() + + # stage backgrounds + FileHandler(self.get_bkg_dict(AttrDict(self.task_config, **self.task_config))).sync() + + # generate variational YAML file + logger.debug(f"Generate variational YAML file: {self.task_config.fv3jedi_yaml}") + varda_yaml = parse_j2yaml(self.task_config['AEROVARYAML'], self.task_config) + save_as_yaml(varda_yaml, self.task_config.fv3jedi_yaml) + logger.info(f"Wrote variational YAML to: {self.task_config.fv3jedi_yaml}") + + # need output dir for diags and anl + logger.debug("Create empty output [anl, diags] directories to receive output from executable") + newdirs = [ + os.path.join(self.task_config['DATA'], 'anl'), + os.path.join(self.task_config['DATA'], 'diags'), + ] + FileHandler({'mkdir': newdirs}).sync() + + @logit(logger) + def execute(self: Analysis) -> None: + + chdir(self.task_config.DATA) + + exec_cmd = Executable(self.task_config.APRUN_AEROANL) + exec_name = os.path.join(self.task_config.DATA, 'fv3jedi_var.x') + exec_cmd.add_default_arg(exec_name) + exec_cmd.add_default_arg(self.task_config.fv3jedi_yaml) + + try: + logger.debug(f"Executing {exec_cmd}") + exec_cmd() + except OSError: + raise OSError(f"Failed to execute {exec_cmd}") + except Exception: + raise WorkflowException(f"An error occured during execution of {exec_cmd}") + + pass + + @logit(logger) + def finalize(self: Analysis) -> None: + """Finalize a global aerosol analysis + + This method will finalize a global aerosol analysis using JEDI. + This includes: + - tarring up output diag files and place in ROTDIR + - copying the generated YAML file from initialize to the ROTDIR + - copying the guess files to the ROTDIR + - applying the increments to the original RESTART files + - moving the increment files to the ROTDIR + + """ + # ---- tar up diags + # path of output tar statfile + aerostat = os.path.join(self.task_config.COM_CHEM_ANALYSIS, f"{self.task_config['APREFIX']}aerostat") + + # get list of diag files to put in tarball + diags = glob.glob(os.path.join(self.task_config['DATA'], 'diags', 'diag*nc4')) + + # gzip the files first + for diagfile in diags: + with open(diagfile, 'rb') as f_in, gzip.open(f"{diagfile}.gz", 'wb') as f_out: + f_out.writelines(f_in) + + # open tar file for writing + with tarfile.open(aerostat, "w") as archive: + for diagfile in diags: + diaggzip = f"{diagfile}.gz" + archive.add(diaggzip, arcname=os.path.basename(diaggzip)) + + # copy full YAML from executable to ROTDIR + src = os.path.join(self.task_config['DATA'], f"{self.task_config['CDUMP']}.t{self.runtime_config['cyc']:02d}z.aerovar.yaml") + dest = os.path.join(self.task_config.COM_CHEM_ANALYSIS, f"{self.task_config['CDUMP']}.t{self.runtime_config['cyc']:02d}z.aerovar.yaml") + yaml_copy = { + 'mkdir': [self.task_config.COM_CHEM_ANALYSIS], + 'copy': [[src, dest]] + } + FileHandler(yaml_copy).sync() + + # ---- copy RESTART fv_tracer files for future reference + if self.task_config.DOIAU: + bkgtime = self.task_config.AERO_WINDOW_BEGIN + else: + bkgtime = self.task_config.current_cycle + template = '{}.fv_tracer.res.tile{}.nc'.format(to_fv3time(bkgtime), '{tilenum}') + bkglist = [] + for itile in range(1, self.task_config.ntiles + 1): + tracer = template.format(tilenum=itile) + src = os.path.join(self.task_config.COM_ATMOS_RESTART_PREV, tracer) + dest = os.path.join(self.task_config.COM_CHEM_ANALYSIS, f'aeroges.{tracer}') + bkglist.append([src, dest]) + FileHandler({'copy': bkglist}).sync() + + # ---- add increments to RESTART files + logger.info('Adding increments to RESTART files') + self._add_fms_cube_sphere_increments() + + # ---- move increments to ROTDIR + logger.info('Moving increments to ROTDIR') + template = f'aeroinc.{to_fv3time(self.task_config.current_cycle)}.fv_tracer.res.tile{{tilenum}}.nc' + inclist = [] + for itile in range(1, self.task_config.ntiles + 1): + tracer = template.format(tilenum=itile) + src = os.path.join(self.task_config.DATA, 'anl', tracer) + dest = os.path.join(self.task_config.COM_CHEM_ANALYSIS, tracer) + inclist.append([src, dest]) + FileHandler({'copy': inclist}).sync() + + def clean(self): + super().clean() + + @logit(logger) + def _add_fms_cube_sphere_increments(self: Analysis) -> None: + """This method adds increments to RESTART files to get an analysis + """ + if self.task_config.DOIAU: + bkgtime = self.task_config.AERO_WINDOW_BEGIN + else: + bkgtime = self.task_config.current_cycle + # only need the fv_tracer files + restart_template = f'{to_fv3time(bkgtime)}.fv_tracer.res.tile{{tilenum}}.nc' + increment_template = f'{to_fv3time(self.task_config.current_cycle)}.fv_tracer.res.tile{{tilenum}}.nc' + inc_template = os.path.join(self.task_config.DATA, 'anl', 'aeroinc.' + increment_template) + bkg_template = os.path.join(self.task_config.COM_ATMOS_RESTART_PREV, restart_template) + # get list of increment vars + incvars_list_path = os.path.join(self.task_config['HOMEgfs'], 'parm', 'gdas', 'aeroanl_inc_vars.yaml') + incvars = YAMLFile(path=incvars_list_path)['incvars'] + super().add_fv3_increments(inc_template, bkg_template, incvars) + + @logit(logger) + def get_bkg_dict(self, task_config: Dict[str, Any]) -> Dict[str, List[str]]: + """Compile a dictionary of model background files to copy + + This method constructs a dictionary of FV3 RESTART files (coupler, core, tracer) + that are needed for global aerosol DA and returns said dictionary for use by the FileHandler class. + + Parameters + ---------- + task_config: Dict + a dictionary containing all of the configuration needed for the task + + Returns + ---------- + bkg_dict: Dict + a dictionary containing the list of model background files to copy for FileHandler + """ + # NOTE for now this is FV3 RESTART files and just assumed to be fh006 + + # get FV3 RESTART files, this will be a lot simpler when using history files + rst_dir = task_config.COM_ATMOS_RESTART_PREV + run_dir = os.path.join(task_config['DATA'], 'bkg') + + # Start accumulating list of background files to copy + bkglist = [] + + # if using IAU, we can use FGAT + bkgtimes = [] + begintime = task_config.previous_cycle + for fcsthr in task_config.aero_bkg_fhr: + bkgtimes.append(add_to_datetime(begintime, to_timedelta(f"{fcsthr}H"))) + + # now loop over background times + for bkgtime in bkgtimes: + # aerosol DA needs coupler + basename = f'{to_fv3time(bkgtime)}.coupler.res' + bkglist.append([os.path.join(rst_dir, basename), os.path.join(run_dir, basename)]) + + # aerosol DA only needs core/tracer + for ftype in ['core', 'tracer']: + template = f'{to_fv3time(bkgtime)}.fv_{ftype}.res.tile{{tilenum}}.nc' + for itile in range(1, task_config.ntiles + 1): + basename = template.format(tilenum=itile) + bkglist.append([os.path.join(rst_dir, basename), os.path.join(run_dir, basename)]) + + bkg_dict = { + 'mkdir': [run_dir], + 'copy': bkglist, + } + return bkg_dict + + @logit(logger) + def get_berror_dict(self, config: Dict[str, Any]) -> Dict[str, List[str]]: + """Compile a dictionary of background error files to copy + + This method will construct a dictionary of BUMP background error files + for global aerosol DA and return said dictionary for use by the FileHandler class. + This dictionary contains coupler and fv_tracer files + for correlation and standard deviation as well as NICAS localization. + + Parameters + ---------- + config: Dict + a dictionary containing all of the configuration needed + + Returns + ---------- + berror_dict: Dict + a dictionary containing the list of background error files to copy for FileHandler + """ + # aerosol static-B needs nicas, cor_rh, cor_rv and stddev files. + b_dir = config.BERROR_DATA_DIR + b_datestr = to_fv3time(config.BERROR_DATE) + berror_list = [] + + for ftype in ['stddev']: + coupler = f'{b_datestr}.{ftype}.coupler.res' + berror_list.append([ + os.path.join(b_dir, coupler), os.path.join(config.DATA, 'berror', coupler) + ]) + template = f'{b_datestr}.{ftype}.fv_tracer.res.tile{{tilenum}}.nc' + for itile in range(1, config.ntiles + 1): + tracer = template.format(tilenum=itile) + berror_list.append([ + os.path.join(b_dir, tracer), os.path.join(config.DATA, 'berror', tracer) + ]) + radius = 'cor_aero_universe_radius' + berror_list.append([ + os.path.join(b_dir, radius), os.path.join(config.DATA, 'berror', radius) + ]) + nproc = config.ntiles * config.layout_x * config.layout_y + for nn in range(1, nproc + 1): + berror_list.append([ + os.path.join(b_dir, f'nicas_aero_nicas_local_{nproc:06}-{nn:06}.nc'), + os.path.join(config.DATA, 'berror', f'nicas_aero_nicas_local_{nproc:06}-{nn:06}.nc') + ]) + berror_dict = { + 'mkdir': [os.path.join(config.DATA, 'berror')], + 'copy': berror_list, + } + return berror_dict diff --git a/ush/python/pygfs/task/analysis.py b/ush/python/pygfs/task/analysis.py new file mode 100644 index 0000000000..cfd1fb2206 --- /dev/null +++ b/ush/python/pygfs/task/analysis.py @@ -0,0 +1,328 @@ +#!/usr/bin/env python3 + +import os +import glob +import tarfile +from logging import getLogger +from netCDF4 import Dataset +from typing import List, Dict, Any, Union + +from wxflow import (parse_j2yaml, FileHandler, rm_p, logit, + Task, Executable, WorkflowException, to_fv3time, to_YMD, + Template, TemplateConstants) + +logger = getLogger(__name__.split('.')[-1]) + + +class Analysis(Task): + """Parent class for GDAS tasks + + The Analysis class is the parent class for all + Global Data Assimilation System (GDAS) tasks + directly related to peforming an analysis + """ + + def __init__(self, config: Dict[str, Any]) -> None: + super().__init__(config) + self.config.ntiles = 6 + + def initialize(self) -> None: + super().initialize() + # all analyses need to stage observations + obs_dict = self.get_obs_dict() + FileHandler(obs_dict).sync() + + # some analyses need to stage bias corrections + bias_dict = self.get_bias_dict() + FileHandler(bias_dict).sync() + + # link jedi executable to run directory + self.link_jediexe() + + @logit(logger) + def get_obs_dict(self) -> Dict[str, Any]: + """Compile a dictionary of observation files to copy + + This method uses the OBS_LIST configuration variable to generate a dictionary + from a list of YAML files that specify what observation files are to be + copied to the run directory from the observation input directory + + Parameters + ---------- + + Returns + ---------- + obs_dict: Dict + a dictionary containing the list of observation files to copy for FileHandler + """ + logger.debug(f"OBS_LIST: {self.task_config['OBS_LIST']}") + obs_list_config = parse_j2yaml(self.task_config["OBS_LIST"], self.task_config) + logger.debug(f"obs_list_config: {obs_list_config}") + # get observers from master dictionary + observers = obs_list_config['observers'] + copylist = [] + for ob in observers: + obfile = ob['obs space']['obsdatain']['engine']['obsfile'] + basename = os.path.basename(obfile) + copylist.append([os.path.join(self.task_config['COM_OBS'], basename), obfile]) + obs_dict = { + 'mkdir': [os.path.join(self.runtime_config['DATA'], 'obs')], + 'copy': copylist + } + return obs_dict + + @logit(logger) + def get_bias_dict(self) -> Dict[str, Any]: + """Compile a dictionary of observation files to copy + + This method uses the OBS_LIST configuration variable to generate a dictionary + from a list of YAML files that specify what observation bias correction files + are to be copied to the run directory from the observation input directory + + Parameters + ---------- + + Returns + ---------- + bias_dict: Dict + a dictionary containing the list of observation bias files to copy for FileHandler + """ + logger.debug(f"OBS_LIST: {self.task_config['OBS_LIST']}") + obs_list_config = parse_j2yaml(self.task_config["OBS_LIST"], self.task_config) + logger.debug(f"obs_list_config: {obs_list_config}") + # get observers from master dictionary + observers = obs_list_config['observers'] + copylist = [] + for ob in observers: + if 'obs bias' in ob.keys(): + obfile = ob['obs bias']['input file'] + obdir = os.path.dirname(obfile) + basename = os.path.basename(obfile) + prefix = '.'.join(basename.split('.')[:-2]) + for file in ['satbias.nc4', 'satbias_cov.nc4', 'tlapse.txt']: + bfile = f"{prefix}.{file}" + copylist.append([os.path.join(self.task_config.COM_ATMOS_ANALYSIS_PREV, bfile), os.path.join(obdir, bfile)]) + + bias_dict = { + 'mkdir': [os.path.join(self.runtime_config.DATA, 'bc')], + 'copy': copylist + } + return bias_dict + + @logit(logger) + def add_fv3_increments(self, inc_file_tmpl: str, bkg_file_tmpl: str, incvars: List) -> None: + """Add cubed-sphere increments to cubed-sphere backgrounds + + Parameters + ---------- + inc_file_tmpl : str + template of the FV3 increment file of the form: 'filetype.tile{tilenum}.nc' + bkg_file_tmpl : str + template of the FV3 background file of the form: 'filetype.tile{tilenum}.nc' + incvars : List + List of increment variables to add to the background + """ + + for itile in range(1, self.config.ntiles + 1): + inc_path = inc_file_tmpl.format(tilenum=itile) + bkg_path = bkg_file_tmpl.format(tilenum=itile) + with Dataset(inc_path, mode='r') as incfile, Dataset(bkg_path, mode='a') as rstfile: + for vname in incvars: + increment = incfile.variables[vname][:] + bkg = rstfile.variables[vname][:] + anl = bkg + increment + rstfile.variables[vname][:] = anl[:] + try: + rstfile.variables[vname].delncattr('checksum') # remove the checksum so fv3 does not complain + except (AttributeError, RuntimeError): + pass # checksum is missing, move on + + @logit(logger) + def get_bkg_dict(self, task_config: Dict[str, Any]) -> Dict[str, List[str]]: + """Compile a dictionary of model background files to copy + + This method is a placeholder for now... will be possibly made generic at a later date + + Parameters + ---------- + task_config: Dict + a dictionary containing all of the configuration needed for the task + + Returns + ---------- + bkg_dict: Dict + a dictionary containing the list of model background files to copy for FileHandler + """ + bkg_dict = {'foo': 'bar'} + return bkg_dict + + @logit(logger) + def get_berror_dict(self, config: Dict[str, Any]) -> Dict[str, List[str]]: + """Compile a dictionary of background error files to copy + + This method is a placeholder for now... will be possibly made generic at a later date + + Parameters + ---------- + config: Dict + a dictionary containing all of the configuration needed + + Returns + ---------- + berror_dict: Dict + a dictionary containing the list of background error files to copy for FileHandler + """ + berror_dict = {'foo': 'bar'} + return berror_dict + + @logit(logger) + def link_jediexe(self) -> None: + """Compile a dictionary of background error files to copy + + This method links a JEDI executable to the run directory + + Parameters + ---------- + Task: GDAS task + + Returns + ---------- + None + """ + exe_src = self.task_config.JEDIEXE + + # TODO: linking is not permitted per EE2. Needs work in JEDI to be able to copy the exec. + logger.info(f"Link executable {exe_src} to DATA/") + logger.warn("Linking is not permitted per EE2.") + exe_dest = os.path.join(self.task_config.DATA, os.path.basename(exe_src)) + if os.path.exists(exe_dest): + rm_p(exe_dest) + os.symlink(exe_src, exe_dest) + + return + + @staticmethod + @logit(logger) + def get_fv3ens_dict(config: Dict[str, Any]) -> Dict[str, Any]: + """Compile a dictionary of ensemble member restarts to copy + + This method constructs a dictionary of ensemble FV3 restart files (coupler, core, tracer) + that are needed for global atmens DA and returns said dictionary for use by the FileHandler class. + + Parameters + ---------- + config: Dict + a dictionary containing all of the configuration needed + + Returns + ---------- + ens_dict: Dict + a dictionary containing the list of ensemble member restart files to copy for FileHandler + """ + # NOTE for now this is FV3 restart files and just assumed to be fh006 + + # define template + template_res = config.COM_ATMOS_RESTART_TMPL + prev_cycle = config.previous_cycle + tmpl_res_dict = { + 'ROTDIR': config.ROTDIR, + 'RUN': config.RUN, + 'YMD': to_YMD(prev_cycle), + 'HH': prev_cycle.strftime('%H'), + 'MEMDIR': None + } + + # construct ensemble member file list + dirlist = [] + enslist = [] + for imem in range(1, config.NMEM_ENS + 1): + memchar = f"mem{imem:03d}" + + # create directory path for ensemble member restart + dirlist.append(os.path.join(config.DATA, config.dirname, f'mem{imem:03d}')) + + # get FV3 restart files, this will be a lot simpler when using history files + tmpl_res_dict['MEMDIR'] = memchar + rst_dir = Template.substitute_structure(template_res, TemplateConstants.DOLLAR_CURLY_BRACE, tmpl_res_dict.get) + run_dir = os.path.join(config.DATA, config.dirname, memchar) + + # atmens DA needs coupler + basename = f'{to_fv3time(config.current_cycle)}.coupler.res' + enslist.append([os.path.join(rst_dir, basename), os.path.join(config.DATA, config.dirname, memchar, basename)]) + + # atmens DA needs core, srf_wnd, tracer, phy_data, sfc_data + for ftype in ['fv_core.res', 'fv_srf_wnd.res', 'fv_tracer.res', 'phy_data', 'sfc_data']: + template = f'{to_fv3time(config.current_cycle)}.{ftype}.tile{{tilenum}}.nc' + for itile in range(1, config.ntiles + 1): + basename = template.format(tilenum=itile) + enslist.append([os.path.join(rst_dir, basename), os.path.join(run_dir, basename)]) + + ens_dict = { + 'mkdir': dirlist, + 'copy': enslist, + } + return ens_dict + + @staticmethod + @logit(logger) + def execute_jediexe(workdir: Union[str, os.PathLike], aprun_cmd: str, jedi_exec: str, jedi_yaml: str) -> None: + """ + Run a JEDI executable + + Parameters + ---------- + workdir : str | os.PathLike + Working directory where to run containing the necessary files and executable + aprun_cmd : str + Launcher command e.g. mpirun -np or srun, etc. + jedi_exec : str + Name of the JEDI executable e.g. fv3jedi_var.x + jedi_yaml : str | os.PathLike + Name of the yaml file to feed the JEDI executable e.g. fv3jedi_var.yaml + + Raises + ------ + OSError + Failure due to OS issues + WorkflowException + All other exceptions + """ + + os.chdir(workdir) + + exec_cmd = Executable(aprun_cmd) + exec_cmd.add_default_arg([os.path.join(workdir, jedi_exec), jedi_yaml]) + + logger.info(f"Executing {exec_cmd}") + try: + exec_cmd() + except OSError: + logger.exception(f"FATAL ERROR: Failed to execute {exec_cmd}") + raise OSError(f"{exec_cmd}") + except Exception: + logger.exception(f"FATAL ERROR: Error occured during execution of {exec_cmd}") + raise WorkflowException(f"{exec_cmd}") + + @staticmethod + @logit(logger) + def tgz_diags(statfile: str, diagdir: str) -> None: + """tar and gzip the diagnostic files resulting from a JEDI analysis. + + Parameters + ---------- + statfile : str | os.PathLike + Path to the output .tar.gz .tgz file that will contain the diag*.nc4 files e.g. atmstat.tgz + diagdir : str | os.PathLike + Directory containing JEDI diag files + """ + + # get list of diag files to put in tarball + diags = glob.glob(os.path.join(diagdir, 'diags', 'diag*nc4')) + + logger.info(f"Compressing {len(diags)} diag files to {statfile}") + + # Open tar.gz file for writing + with tarfile.open(statfile, "w:gz") as tgz: + # Add diag files to tarball + for diagfile in diags: + tgz.add(diagfile, arcname=os.path.basename(diagfile)) diff --git a/ush/python/pygfs/task/atm_analysis.py b/ush/python/pygfs/task/atm_analysis.py new file mode 100644 index 0000000000..da41574fc9 --- /dev/null +++ b/ush/python/pygfs/task/atm_analysis.py @@ -0,0 +1,446 @@ +#!/usr/bin/env python3 + +import os +import glob +import gzip +import tarfile +from logging import getLogger +from typing import Dict, List, Any + +from wxflow import (AttrDict, + FileHandler, + add_to_datetime, to_fv3time, to_timedelta, to_YMDH, + chdir, + parse_yamltmpl, parse_j2yaml, save_as_yaml, + logit, + Executable, + WorkflowException) +from pygfs.task.analysis import Analysis + +logger = getLogger(__name__.split('.')[-1]) + + +class AtmAnalysis(Analysis): + """ + Class for global atm analysis tasks + """ + @logit(logger, name="AtmAnalysis") + def __init__(self, config): + super().__init__(config) + + _res = int(self.config.CASE[1:]) + _res_anl = int(self.config.CASE_ANL[1:]) + _window_begin = add_to_datetime(self.runtime_config.current_cycle, -to_timedelta(f"{self.config.assim_freq}H") / 2) + _fv3jedi_yaml = os.path.join(self.runtime_config.DATA, f"{self.runtime_config.CDUMP}.t{self.runtime_config.cyc:02d}z.atmvar.yaml") + + # Create a local dictionary that is repeatedly used across this class + local_dict = AttrDict( + { + 'npx_ges': _res + 1, + 'npy_ges': _res + 1, + 'npz_ges': self.config.LEVS - 1, + 'npz': self.config.LEVS - 1, + 'npx_anl': _res_anl + 1, + 'npy_anl': _res_anl + 1, + 'npz_anl': self.config.LEVS - 1, + 'ATM_WINDOW_BEGIN': _window_begin, + 'ATM_WINDOW_LENGTH': f"PT{self.config.assim_freq}H", + 'OPREFIX': f"{self.runtime_config.CDUMP}.t{self.runtime_config.cyc:02d}z.", # TODO: CDUMP is being replaced by RUN + 'APREFIX': f"{self.runtime_config.CDUMP}.t{self.runtime_config.cyc:02d}z.", # TODO: CDUMP is being replaced by RUN + 'GPREFIX': f"gdas.t{self.runtime_config.previous_cycle.hour:02d}z.", + 'fv3jedi_yaml': _fv3jedi_yaml, + } + ) + + # task_config is everything that this task should need + self.task_config = AttrDict(**self.config, **self.runtime_config, **local_dict) + + @logit(logger) + def initialize(self: Analysis) -> None: + """Initialize a global atm analysis + + This method will initialize a global atm analysis using JEDI. + This includes: + - staging CRTM fix files + - staging FV3-JEDI fix files + - staging B error files + - staging model backgrounds + - generating a YAML file for the JEDI executable + - creating output directories + """ + super().initialize() + + # stage CRTM fix files + crtm_fix_list_path = os.path.join(self.task_config.HOMEgfs, 'parm', 'gdas', 'atm_crtm_coeff.yaml') + logger.debug(f"Staging CRTM fix files from {crtm_fix_list_path}") + crtm_fix_list = parse_j2yaml(crtm_fix_list_path, self.task_config) + FileHandler(crtm_fix_list).sync() + + # stage fix files + jedi_fix_list_path = os.path.join(self.task_config.HOMEgfs, 'parm', 'gdas', 'atm_jedi_fix.yaml') + logger.debug(f"Staging JEDI fix files from {jedi_fix_list_path}") + jedi_fix_list = parse_j2yaml(jedi_fix_list_path, self.task_config) + FileHandler(jedi_fix_list).sync() + + # stage static background error files, otherwise it will assume ID matrix + logger.debug(f"Stage files for STATICB_TYPE {self.task_config.STATICB_TYPE}") + FileHandler(self.get_berror_dict(self.task_config)).sync() + + # stage ensemble files for use in hybrid background error + if self.task_config.DOHYBVAR: + logger.debug(f"Stage ensemble files for DOHYBVAR {self.task_config.DOHYBVAR}") + localconf = AttrDict() + keys = ['COM_ATMOS_RESTART_TMPL', 'previous_cycle', 'ROTDIR', 'RUN', + 'NMEM_ENS', 'DATA', 'current_cycle', 'ntiles'] + for key in keys: + localconf[key] = self.task_config[key] + localconf.RUN = 'enkf' + self.task_config.RUN + localconf.dirname = 'ens' + FileHandler(self.get_fv3ens_dict(localconf)).sync() + + # stage backgrounds + FileHandler(self.get_bkg_dict(AttrDict(self.task_config))).sync() + + # generate variational YAML file + logger.debug(f"Generate variational YAML file: {self.task_config.fv3jedi_yaml}") + varda_yaml = parse_j2yaml(self.task_config.ATMVARYAML, self.task_config) + save_as_yaml(varda_yaml, self.task_config.fv3jedi_yaml) + logger.info(f"Wrote variational YAML to: {self.task_config.fv3jedi_yaml}") + + # need output dir for diags and anl + logger.debug("Create empty output [anl, diags] directories to receive output from executable") + newdirs = [ + os.path.join(self.task_config.DATA, 'anl'), + os.path.join(self.task_config.DATA, 'diags'), + ] + FileHandler({'mkdir': newdirs}).sync() + + @logit(logger) + def execute(self: Analysis) -> None: + + chdir(self.task_config.DATA) + + exec_cmd = Executable(self.task_config.APRUN_ATMANL) + exec_name = os.path.join(self.task_config.DATA, 'fv3jedi_var.x') + exec_cmd.add_default_arg(exec_name) + exec_cmd.add_default_arg(self.task_config.fv3jedi_yaml) + + try: + logger.debug(f"Executing {exec_cmd}") + exec_cmd() + except OSError: + raise OSError(f"Failed to execute {exec_cmd}") + except Exception: + raise WorkflowException(f"An error occured during execution of {exec_cmd}") + + pass + + @logit(logger) + def finalize(self: Analysis) -> None: + """Finalize a global atm analysis + + This method will finalize a global atm analysis using JEDI. + This includes: + - tar output diag files and place in ROTDIR + - copy the generated YAML file from initialize to the ROTDIR + - copy the updated bias correction files to ROTDIR + - write UFS model readable atm incrment file + + """ + # ---- tar up diags + # path of output tar statfile + atmstat = os.path.join(self.task_config.COM_ATMOS_ANALYSIS, f"{self.task_config.APREFIX}atmstat") + + # get list of diag files to put in tarball + diags = glob.glob(os.path.join(self.task_config.DATA, 'diags', 'diag*nc4')) + + logger.info(f"Compressing {len(diags)} diag files to {atmstat}.gz") + + # gzip the files first + logger.debug(f"Gzipping {len(diags)} diag files") + for diagfile in diags: + with open(diagfile, 'rb') as f_in, gzip.open(f"{diagfile}.gz", 'wb') as f_out: + f_out.writelines(f_in) + + # open tar file for writing + logger.debug(f"Creating tar file {atmstat} with {len(diags)} gzipped diag files") + with tarfile.open(atmstat, "w") as archive: + for diagfile in diags: + diaggzip = f"{diagfile}.gz" + archive.add(diaggzip, arcname=os.path.basename(diaggzip)) + + # copy full YAML from executable to ROTDIR + logger.info(f"Copying {self.task_config.fv3jedi_yaml} to {self.task_config.COM_ATMOS_ANALYSIS}") + src = os.path.join(self.task_config.DATA, f"{self.task_config.CDUMP}.t{self.task_config.cyc:02d}z.atmvar.yaml") + dest = os.path.join(self.task_config.COM_ATMOS_ANALYSIS, f"{self.task_config.CDUMP}.t{self.task_config.cyc:02d}z.atmvar.yaml") + logger.debug(f"Copying {src} to {dest}") + yaml_copy = { + 'mkdir': [self.task_config.COM_ATMOS_ANALYSIS], + 'copy': [[src, dest]] + } + FileHandler(yaml_copy).sync() + + # copy bias correction files to ROTDIR + logger.info("Copy bias correction files from DATA/ to COM/") + biasdir = os.path.join(self.task_config.DATA, 'bc') + biasls = os.listdir(biasdir) + biaslist = [] + for bfile in biasls: + src = os.path.join(biasdir, bfile) + dest = os.path.join(self.task_config.COM_ATMOS_ANALYSIS, bfile) + biaslist.append([src, dest]) + + gprefix = f"{self.task_config.GPREFIX}" + gsuffix = f"{to_YMDH(self.task_config.previous_cycle)}" + ".txt" + aprefix = f"{self.task_config.APREFIX}" + asuffix = f"{to_YMDH(self.task_config.current_cycle)}" + ".txt" + + logger.info(f"Copying {gprefix}*{gsuffix} from DATA/ to COM/ as {aprefix}*{asuffix}") + obsdir = os.path.join(self.task_config.DATA, 'obs') + obsls = os.listdir(obsdir) + for ofile in obsls: + if ofile.endswith(".txt"): + src = os.path.join(obsdir, ofile) + tfile = ofile.replace(gprefix, aprefix) + tfile = tfile.replace(gsuffix, asuffix) + dest = os.path.join(self.task_config.COM_ATMOS_ANALYSIS, tfile) + biaslist.append([src, dest]) + + bias_copy = { + 'mkdir': [self.task_config.COM_ATMOS_ANALYSIS], + 'copy': biaslist, + } + FileHandler(bias_copy).sync() + + # Create UFS model readable atm increment file from UFS-DA atm increment + logger.info("Create UFS model readable atm increment file from UFS-DA atm increment") + self.jedi2fv3inc() + + def clean(self): + super().clean() + + @logit(logger) + def get_bkg_dict(self, task_config: Dict[str, Any]) -> Dict[str, List[str]]: + """Compile a dictionary of model background files to copy + + This method constructs a dictionary of FV3 restart files (coupler, core, tracer) + that are needed for global atm DA and returns said dictionary for use by the FileHandler class. + + Parameters + ---------- + task_config: Dict + a dictionary containing all of the configuration needed for the task + + Returns + ---------- + bkg_dict: Dict + a dictionary containing the list of model background files to copy for FileHandler + """ + # NOTE for now this is FV3 restart files and just assumed to be fh006 + + # get FV3 restart files, this will be a lot simpler when using history files + rst_dir = os.path.join(task_config.COM_ATMOS_RESTART_PREV) # for now, option later? + run_dir = os.path.join(task_config.DATA, 'bkg') + + # Start accumulating list of background files to copy + bkglist = [] + + # atm DA needs coupler + basename = f'{to_fv3time(task_config.current_cycle)}.coupler.res' + bkglist.append([os.path.join(rst_dir, basename), os.path.join(run_dir, basename)]) + + # atm DA needs core, srf_wnd, tracer, phy_data, sfc_data + for ftype in ['core', 'srf_wnd', 'tracer']: + template = f'{to_fv3time(self.task_config.current_cycle)}.fv_{ftype}.res.tile{{tilenum}}.nc' + for itile in range(1, task_config.ntiles + 1): + basename = template.format(tilenum=itile) + bkglist.append([os.path.join(rst_dir, basename), os.path.join(run_dir, basename)]) + + for ftype in ['phy_data', 'sfc_data']: + template = f'{to_fv3time(self.task_config.current_cycle)}.{ftype}.tile{{tilenum}}.nc' + for itile in range(1, task_config.ntiles + 1): + basename = template.format(tilenum=itile) + bkglist.append([os.path.join(rst_dir, basename), os.path.join(run_dir, basename)]) + + bkg_dict = { + 'mkdir': [run_dir], + 'copy': bkglist, + } + return bkg_dict + + @logit(logger) + def get_berror_dict(self, config: Dict[str, Any]) -> Dict[str, List[str]]: + """Compile a dictionary of background error files to copy + + This method will construct a dictionary of either bump of gsibec background + error files for global atm DA and return said dictionary for use by the + FileHandler class. + + Parameters + ---------- + config: Dict + a dictionary containing all of the configuration needed + + Returns + ---------- + berror_dict: Dict + a dictionary containing the list of atm background error files to copy for FileHandler + """ + SUPPORTED_BERROR_STATIC_MAP = {'identity': self._get_berror_dict_identity, + 'bump': self._get_berror_dict_bump, + 'gsibec': self._get_berror_dict_gsibec} + + try: + berror_dict = SUPPORTED_BERROR_STATIC_MAP[config.STATICB_TYPE](config) + except KeyError: + raise KeyError(f"{config.STATICB_TYPE} is not a supported background error type.\n" + + f"Currently supported background error types are:\n" + + f'{" | ".join(SUPPORTED_BERROR_STATIC_MAP.keys())}') + + return berror_dict + + @staticmethod + @logit(logger) + def _get_berror_dict_identity(config: Dict[str, Any]) -> Dict[str, List[str]]: + """Identity BE does not need any files for staging. + + This is a private method and should not be accessed directly. + + Parameters + ---------- + config: Dict + a dictionary containing all of the configuration needed + Returns + ---------- + berror_dict: Dict + Empty dictionary [identity BE needs not files to stage] + """ + logger.info(f"Identity background error does not use staged files. Return empty dictionary") + return {} + + @staticmethod + @logit(logger) + def _get_berror_dict_bump(config: Dict[str, Any]) -> Dict[str, List[str]]: + """Compile a dictionary of atm bump background error files to copy + + This method will construct a dictionary of atm bump background error + files for global atm DA and return said dictionary to the parent + + This is a private method and should not be accessed directly. + + Parameters + ---------- + config: Dict + a dictionary containing all of the configuration needed + + Returns + ---------- + berror_dict: Dict + a dictionary of atm bump background error files to copy for FileHandler + """ + # BUMP atm static-B needs nicas, cor_rh, cor_rv and stddev files. + b_dir = config.BERROR_DATA_DIR + b_datestr = to_fv3time(config.BERROR_DATE) + berror_list = [] + for ftype in ['cor_rh', 'cor_rv', 'stddev']: + coupler = f'{b_datestr}.{ftype}.coupler.res' + berror_list.append([ + os.path.join(b_dir, coupler), os.path.join(config.DATA, 'berror', coupler) + ]) + + template = '{b_datestr}.{ftype}.fv_tracer.res.tile{{tilenum}}.nc' + for itile in range(1, config.ntiles + 1): + tracer = template.format(tilenum=itile) + berror_list.append([ + os.path.join(b_dir, tracer), os.path.join(config.DATA, 'berror', tracer) + ]) + + nproc = config.ntiles * config.layout_x * config.layout_y + for nn in range(1, nproc + 1): + berror_list.append([ + os.path.join(b_dir, f'nicas_aero_nicas_local_{nproc:06}-{nn:06}.nc'), + os.path.join(config.DATA, 'berror', f'nicas_aero_nicas_local_{nproc:06}-{nn:06}.nc') + ]) + + # create dictionary of background error files to stage + berror_dict = { + 'mkdir': [os.path.join(config.DATA, 'berror')], + 'copy': berror_list, + } + return berror_dict + + @staticmethod + @logit(logger) + def _get_berror_dict_gsibec(config: Dict[str, Any]) -> Dict[str, List[str]]: + """Compile a dictionary of atm gsibec background error files to copy + + This method will construct a dictionary of atm gsibec background error + files for global atm DA and return said dictionary to the parent + + This is a private method and should not be accessed directly. + + Parameters + ---------- + config: Dict + a dictionary containing all of the configuration needed + + Returns + ---------- + berror_dict: Dict + a dictionary of atm gsibec background error files to copy for FileHandler + """ + # GSI atm static-B needs namelist and coefficient files. + b_dir = os.path.join(config.HOMEgfs, 'fix', 'gdas', 'gsibec', config.CASE_ANL) + berror_list = [] + for ftype in ['gfs_gsi_global.nml', 'gsi-coeffs-gfs-global.nc4']: + berror_list.append([ + os.path.join(b_dir, ftype), + os.path.join(config.DATA, 'berror', ftype) + ]) + + # create dictionary of background error files to stage + berror_dict = { + 'mkdir': [os.path.join(config.DATA, 'berror')], + 'copy': berror_list, + } + return berror_dict + + @logit(logger) + def jedi2fv3inc(self: Analysis) -> None: + """Generate UFS model readable analysis increment + + This method writes a UFS DA atm increment in UFS model readable format. + This includes: + - write UFS-DA atm increments using variable names expected by UFS model + - compute and write delp increment + - compute and write hydrostatic delz increment + + Please note that some of these steps are temporary and will be modified + once the modle is able to directly read atm increments. + + """ + # Select the atm guess file based on the analysis and background resolutions + # Fields from the atm guess are used to compute the delp and delz increments + case_anl = int(self.task_config.CASE_ANL[1:]) + case = int(self.task_config.CASE[1:]) + + file = f"{self.task_config.GPREFIX}" + "atmf006" + f"{'' if case_anl == case else '.ensres'}" + ".nc" + atmges_fv3 = os.path.join(self.task_config.COM_ATMOS_HISTORY_PREV, file) + + # Set the path/name to the input UFS-DA atm increment file (atminc_jedi) + # and the output UFS model atm increment file (atminc_fv3) + cdate = to_fv3time(self.task_config.current_cycle) + cdate_inc = cdate.replace('.', '_') + atminc_jedi = os.path.join(self.task_config.DATA, 'anl', f'atminc.{cdate_inc}z.nc4') + atminc_fv3 = os.path.join(self.task_config.COM_ATMOS_ANALYSIS, f"{self.task_config.CDUMP}.t{self.task_config.cyc:02d}z.atminc.nc") + + # Reference the python script which does the actual work + incpy = os.path.join(self.task_config.HOMEgfs, 'ush/jediinc2fv3.py') + + # Execute incpy to create the UFS model atm increment file + cmd = Executable(incpy) + cmd.add_default_arg(atmges_fv3) + cmd.add_default_arg(atminc_jedi) + cmd.add_default_arg(atminc_fv3) + logger.debug(f"Executing {cmd}") + cmd(output='stdout', error='stderr') diff --git a/ush/python/pygfs/task/atmens_analysis.py b/ush/python/pygfs/task/atmens_analysis.py new file mode 100644 index 0000000000..9cf84c07c7 --- /dev/null +++ b/ush/python/pygfs/task/atmens_analysis.py @@ -0,0 +1,295 @@ +#!/usr/bin/env python3 + +import os +import glob +import gzip +import tarfile +from logging import getLogger +from typing import Dict, List + +from wxflow import (AttrDict, + FileHandler, + add_to_datetime, to_fv3time, to_timedelta, to_YMDH, to_YMD, + chdir, + parse_yamltmpl, parse_j2yaml, save_as_yaml, + logit, + Executable, + WorkflowException, + Template, TemplateConstants) +from pygfs.task.analysis import Analysis + +logger = getLogger(__name__.split('.')[-1]) + + +class AtmEnsAnalysis(Analysis): + """ + Class for global atmens analysis tasks + """ + @logit(logger, name="AtmEnsAnalysis") + def __init__(self, config): + super().__init__(config) + + _res = int(self.config.CASE_ENS[1:]) + _window_begin = add_to_datetime(self.runtime_config.current_cycle, -to_timedelta(f"{self.config.assim_freq}H") / 2) + _fv3jedi_yaml = os.path.join(self.runtime_config.DATA, f"{self.runtime_config.CDUMP}.t{self.runtime_config.cyc:02d}z.atmens.yaml") + + # Create a local dictionary that is repeatedly used across this class + local_dict = AttrDict( + { + 'npx_ges': _res + 1, + 'npy_ges': _res + 1, + 'npz_ges': self.config.LEVS - 1, + 'npz': self.config.LEVS - 1, + 'ATM_WINDOW_BEGIN': _window_begin, + 'ATM_WINDOW_LENGTH': f"PT{self.config.assim_freq}H", + 'OPREFIX': f"{self.config.EUPD_CYC}.t{self.runtime_config.cyc:02d}z.", # TODO: CDUMP is being replaced by RUN + 'APREFIX': f"{self.runtime_config.CDUMP}.t{self.runtime_config.cyc:02d}z.", # TODO: CDUMP is being replaced by RUN + 'GPREFIX': f"gdas.t{self.runtime_config.previous_cycle.hour:02d}z.", + 'fv3jedi_yaml': _fv3jedi_yaml, + } + ) + + # task_config is everything that this task should need + self.task_config = AttrDict(**self.config, **self.runtime_config, **local_dict) + + @logit(logger) + def initialize(self: Analysis) -> None: + """Initialize a global atmens analysis + + This method will initialize a global atmens analysis using JEDI. + This includes: + - staging CRTM fix files + - staging FV3-JEDI fix files + - staging model backgrounds + - generating a YAML file for the JEDI executable + - creating output directories + + Parameters + ---------- + Analysis: parent class for GDAS task + + Returns + ---------- + None + """ + super().initialize() + + # Make member directories in DATA for background and in DATA and ROTDIR for analysis files + # create template dictionary for output member analysis directories + template_inc = self.task_config.COM_ATMOS_ANALYSIS_TMPL + tmpl_inc_dict = { + 'ROTDIR': self.task_config.ROTDIR, + 'RUN': self.task_config.RUN, + 'YMD': to_YMD(self.task_config.current_cycle), + 'HH': self.task_config.current_cycle.strftime('%H') + } + dirlist = [] + for imem in range(1, self.task_config.NMEM_ENS + 1): + dirlist.append(os.path.join(self.task_config.DATA, 'bkg', f'mem{imem:03d}')) + dirlist.append(os.path.join(self.task_config.DATA, 'anl', f'mem{imem:03d}')) + + # create output directory path for member analysis + tmpl_inc_dict['MEMDIR'] = f"mem{imem:03d}" + incdir = Template.substitute_structure(template_inc, TemplateConstants.DOLLAR_CURLY_BRACE, tmpl_inc_dict.get) + dirlist.append(incdir) + + FileHandler({'mkdir': dirlist}).sync() + + # stage CRTM fix files + crtm_fix_list_path = os.path.join(self.task_config.HOMEgfs, 'parm', 'gdas', 'atm_crtm_coeff.yaml') + logger.debug(f"Staging CRTM fix files from {crtm_fix_list_path}") + crtm_fix_list = parse_j2yaml(crtm_fix_list_path, self.task_config) + FileHandler(crtm_fix_list).sync() + + # stage fix files + jedi_fix_list_path = os.path.join(self.task_config.HOMEgfs, 'parm', 'gdas', 'atm_jedi_fix.yaml') + logger.debug(f"Staging JEDI fix files from {jedi_fix_list_path}") + jedi_fix_list = parse_j2yaml(jedi_fix_list_path, self.task_config) + FileHandler(jedi_fix_list).sync() + + # stage backgrounds + logger.debug(f"Stage ensemble member background files") + localconf = AttrDict() + keys = ['COM_ATMOS_RESTART_TMPL', 'previous_cycle', 'ROTDIR', 'RUN', + 'NMEM_ENS', 'DATA', 'current_cycle', 'ntiles'] + for key in keys: + localconf[key] = self.task_config[key] + localconf.dirname = 'bkg' + FileHandler(self.get_fv3ens_dict(localconf)).sync() + + # generate ensemble da YAML file + logger.debug(f"Generate ensemble da YAML file: {self.task_config.fv3jedi_yaml}") + ensda_yaml = parse_j2yaml(self.task_config.ATMENSYAML, self.task_config) + save_as_yaml(ensda_yaml, self.task_config.fv3jedi_yaml) + logger.info(f"Wrote ensemble da YAML to: {self.task_config.fv3jedi_yaml}") + + # need output dir for diags and anl + logger.debug("Create empty output [anl, diags] directories to receive output from executable") + newdirs = [ + os.path.join(self.task_config.DATA, 'anl'), + os.path.join(self.task_config.DATA, 'diags'), + ] + FileHandler({'mkdir': newdirs}).sync() + + @logit(logger) + def execute(self: Analysis) -> None: + """Execute a global atmens analysis + + This method will execute a global atmens analysis using JEDI. + This includes: + - changing to the run directory + - running the global atmens analysis executable + + Parameters + ---------- + Analysis: parent class for GDAS task + + Returns + ---------- + None + """ + chdir(self.task_config.DATA) + + exec_cmd = Executable(self.task_config.APRUN_ATMENSANL) + exec_name = os.path.join(self.task_config.DATA, 'fv3jedi_letkf.x') + exec_cmd.add_default_arg(exec_name) + exec_cmd.add_default_arg(self.task_config.fv3jedi_yaml) + + try: + logger.debug(f"Executing {exec_cmd}") + exec_cmd() + except OSError: + raise OSError(f"Failed to execute {exec_cmd}") + except Exception: + raise WorkflowException(f"An error occured during execution of {exec_cmd}") + + pass + + @logit(logger) + def finalize(self: Analysis) -> None: + """Finalize a global atmens analysis + + This method will finalize a global atmens analysis using JEDI. + This includes: + - tar output diag files and place in ROTDIR + - copy the generated YAML file from initialize to the ROTDIR + - write UFS model readable atm incrment file + + Parameters + ---------- + Analysis: parent class for GDAS task + + Returns + ---------- + None + """ + # ---- tar up diags + # path of output tar statfile + atmensstat = os.path.join(self.task_config.COM_ATMOS_ANALYSIS_ENS, f"{self.task_config.APREFIX}atmensstat") + + # get list of diag files to put in tarball + diags = glob.glob(os.path.join(self.task_config.DATA, 'diags', 'diag*nc4')) + + logger.info(f"Compressing {len(diags)} diag files to {atmensstat}.gz") + + # gzip the files first + logger.debug(f"Gzipping {len(diags)} diag files") + for diagfile in diags: + with open(diagfile, 'rb') as f_in, gzip.open(f"{diagfile}.gz", 'wb') as f_out: + f_out.writelines(f_in) + + # open tar file for writing + logger.debug(f"Creating tar file {atmensstat} with {len(diags)} gzipped diag files") + with tarfile.open(atmensstat, "w") as archive: + for diagfile in diags: + diaggzip = f"{diagfile}.gz" + archive.add(diaggzip, arcname=os.path.basename(diaggzip)) + + # copy full YAML from executable to ROTDIR + logger.info(f"Copying {self.task_config.fv3jedi_yaml} to {self.task_config.COM_ATMOS_ANALYSIS_ENS}") + src = os.path.join(self.task_config.DATA, f"{self.task_config.CDUMP}.t{self.task_config.cyc:02d}z.atmens.yaml") + dest = os.path.join(self.task_config.COM_ATMOS_ANALYSIS_ENS, f"{self.task_config.CDUMP}.t{self.task_config.cyc:02d}z.atmens.yaml") + logger.debug(f"Copying {src} to {dest}") + yaml_copy = { + 'mkdir': [self.task_config.COM_ATMOS_ANALYSIS_ENS], + 'copy': [[src, dest]] + } + FileHandler(yaml_copy).sync() + + # Create UFS model readable atm increment file from UFS-DA atm increment + logger.info("Create UFS model readable atm increment file from UFS-DA atm increment") + self.jedi2fv3inc() + + def clean(self): + super().clean() + + @logit(logger) + def jedi2fv3inc(self: Analysis) -> None: + """Generate UFS model readable analysis increment + + This method writes a UFS DA atm increment in UFS model readable format. + This includes: + - write UFS-DA atm increments using variable names expected by UFS model + - compute and write delp increment + - compute and write hydrostatic delz increment + + Please note that some of these steps are temporary and will be modified + once the modle is able to directly read atm increments. + + Parameters + ---------- + Analysis: parent class for GDAS task + + Returns + ---------- + None + """ + # Select the atm guess file based on the analysis and background resolutions + # Fields from the atm guess are used to compute the delp and delz increments + cdate = to_fv3time(self.task_config.current_cycle) + cdate_inc = cdate.replace('.', '_') + + # Reference the python script which does the actual work + incpy = os.path.join(self.task_config.HOMEgfs, 'ush/jediinc2fv3.py') + + # create template dictionaries + template_inc = self.task_config.COM_ATMOS_ANALYSIS_TMPL + tmpl_inc_dict = { + 'ROTDIR': self.task_config.ROTDIR, + 'RUN': self.task_config.RUN, + 'YMD': to_YMD(self.task_config.current_cycle), + 'HH': self.task_config.current_cycle.strftime('%H') + } + + template_ges = self.task_config.COM_ATMOS_HISTORY_TMPL + tmpl_ges_dict = { + 'ROTDIR': self.task_config.ROTDIR, + 'RUN': self.task_config.RUN, + 'YMD': to_YMD(self.task_config.previous_cycle), + 'HH': self.task_config.previous_cycle.strftime('%H') + } + + # loop over ensemble members + for imem in range(1, self.task_config.NMEM_ENS + 1): + memchar = f"mem{imem:03d}" + + # create output path for member analysis increment + tmpl_inc_dict['MEMDIR'] = memchar + incdir = Template.substitute_structure(template_inc, TemplateConstants.DOLLAR_CURLY_BRACE, tmpl_inc_dict.get) + + # rewrite UFS-DA atmens increments + tmpl_ges_dict['MEMDIR'] = memchar + gesdir = Template.substitute_structure(template_ges, TemplateConstants.DOLLAR_CURLY_BRACE, tmpl_ges_dict.get) + atmges_fv3 = os.path.join(gesdir, f"{self.task_config.CDUMP}.t{self.task_config.previous_cycle.hour:02d}z.atmf006.nc") + atminc_jedi = os.path.join(self.task_config.DATA, 'anl', memchar, f'atminc.{cdate_inc}z.nc4') + atminc_fv3 = os.path.join(incdir, f"{self.task_config.CDUMP}.t{self.task_config.cyc:02d}z.atminc.nc") + + # Execute incpy to create the UFS model atm increment file + # TODO: use MPMD or parallelize with mpi4py + # See https://github.com/NOAA-EMC/global-workflow/pull/1373#discussion_r1173060656 + cmd = Executable(incpy) + cmd.add_default_arg(atmges_fv3) + cmd.add_default_arg(atminc_jedi) + cmd.add_default_arg(atminc_fv3) + logger.debug(f"Executing {cmd}") + cmd(output='stdout', error='stderr') diff --git a/ush/python/pygfs/task/gfs_forecast.py b/ush/python/pygfs/task/gfs_forecast.py new file mode 100644 index 0000000000..1aa550fd62 --- /dev/null +++ b/ush/python/pygfs/task/gfs_forecast.py @@ -0,0 +1,34 @@ +import os +import logging +from typing import Dict, Any + +from wxflow import logit, Task +from pygfs.ufswm.gfs import GFS + +logger = logging.getLogger(__name__.split('.')[-1]) + + +class GFSForecast(Task): + """ + UFS-weather-model forecast task for the GFS + """ + + @logit(logger, name="GFSForecast") + def __init__(self, config: Dict[str, Any], *args, **kwargs): + """ + Parameters + ---------- + config : Dict + dictionary object containing configuration from environment + + *args : tuple + Additional arguments to `Task` + + **kwargs : dict, optional + Extra keyword arguments to `Task` + """ + + super().__init__(config, *args, **kwargs) + + # Create and initialize the GFS variant of the UFS + self.gfs = GFS(config) diff --git a/ush/python/pygfs/task/land_analysis.py b/ush/python/pygfs/task/land_analysis.py new file mode 100644 index 0000000000..4bec65be5f --- /dev/null +++ b/ush/python/pygfs/task/land_analysis.py @@ -0,0 +1,582 @@ +#!/usr/bin/env python3 + +import os +from logging import getLogger +from typing import Dict, List +from pprint import pformat +import numpy as np +from netCDF4 import Dataset + +from wxflow import (AttrDict, + FileHandler, + to_fv3time, to_YMD, to_YMDH, to_timedelta, add_to_datetime, + rm_p, + parse_j2yaml, parse_yamltmpl, save_as_yaml, + Jinja, + logit, + Executable, + WorkflowException) +from pygfs.task.analysis import Analysis + +logger = getLogger(__name__.split('.')[-1]) + + +class LandAnalysis(Analysis): + """ + Class for global land analysis tasks + """ + + NMEM_LANDENS = 2 # The size of the land ensemble is fixed at 2. Does this need to be a variable? + + @logit(logger, name="LandAnalysis") + def __init__(self, config): + super().__init__(config) + + _res = int(self.config['CASE'][1:]) + _window_begin = add_to_datetime(self.runtime_config.current_cycle, -to_timedelta(f"{self.config['assim_freq']}H") / 2) + _letkfoi_yaml = os.path.join(self.runtime_config.DATA, f"{self.runtime_config.RUN}.t{self.runtime_config['cyc']:02d}z.letkfoi.yaml") + + # Create a local dictionary that is repeatedly used across this class + local_dict = AttrDict( + { + 'npx_ges': _res + 1, + 'npy_ges': _res + 1, + 'npz_ges': self.config.LEVS - 1, + 'npz': self.config.LEVS - 1, + 'LAND_WINDOW_BEGIN': _window_begin, + 'LAND_WINDOW_LENGTH': f"PT{self.config['assim_freq']}H", + 'OPREFIX': f"{self.runtime_config.RUN}.t{self.runtime_config.cyc:02d}z.", + 'APREFIX': f"{self.runtime_config.RUN}.t{self.runtime_config.cyc:02d}z.", + 'jedi_yaml': _letkfoi_yaml + } + ) + + # task_config is everything that this task should need + self.task_config = AttrDict(**self.config, **self.runtime_config, **local_dict) + + @logit(logger) + def prepare_GTS(self) -> None: + """Prepare the GTS data for a global land analysis + + This method will prepare GTS data for a global land analysis using JEDI. + This includes: + - processing GTS bufr snow depth observation data to IODA format + + Parameters + ---------- + Analysis: parent class for GDAS task + + Returns + ---------- + None + """ + + # create a temporary dict of all keys needed in this method + localconf = AttrDict() + keys = ['HOMEgfs', 'DATA', 'current_cycle', 'COM_OBS', 'COM_ATMOS_RESTART_PREV', + 'OPREFIX', 'CASE', 'ntiles'] + for key in keys: + localconf[key] = self.task_config[key] + + # Read and render the GTS_OBS_LIST yaml + logger.info(f"Reading {self.task_config.GTS_OBS_LIST}") + prep_gts_config = parse_j2yaml(self.task_config.GTS_OBS_LIST, localconf) + logger.debug(f"{self.task_config.GTS_OBS_LIST}:\n{pformat(prep_gts_config)}") + + # copy the GTS obs files from COM_OBS to DATA/obs + logger.info("Copying GTS obs for bufr2ioda.x") + FileHandler(prep_gts_config.gtsbufr).sync() + + logger.info("Link BUFR2IODAX into DATA/") + exe_src = self.task_config.BUFR2IODAX + exe_dest = os.path.join(localconf.DATA, os.path.basename(exe_src)) + if os.path.exists(exe_dest): + rm_p(exe_dest) + os.symlink(exe_src, exe_dest) + + # Create executable instance + exe = Executable(self.task_config.BUFR2IODAX) + + def _gtsbufr2iodax(exe, yaml_file): + if not os.path.isfile(yaml_file): + logger.exception(f"{yaml_file} not found") + raise FileNotFoundError(yaml_file) + + logger.info(f"Executing {exe}") + try: + exe(yaml_file) + except OSError: + raise OSError(f"Failed to execute {exe} {yaml_file}") + except Exception: + raise WorkflowException(f"An error occured during execution of {exe} {yaml_file}") + + # Loop over entries in prep_gts_config.bufr2ioda keys + # 1. generate bufr2ioda YAML files + # 2. execute bufr2ioda.x + for name in prep_gts_config.bufr2ioda.keys(): + gts_yaml = os.path.join(self.runtime_config.DATA, f"bufr_{name}_snow.yaml") + logger.info(f"Generate BUFR2IODA YAML file: {gts_yaml}") + temp_yaml = parse_j2yaml(prep_gts_config.bufr2ioda[name], localconf) + save_as_yaml(temp_yaml, gts_yaml) + logger.info(f"Wrote bufr2ioda YAML to: {gts_yaml}") + + # execute BUFR2IODAX to convert {name} bufr data into IODA format + _gtsbufr2iodax(exe, gts_yaml) + + # Ensure the IODA snow depth GTS file is produced by the IODA converter + # If so, copy to COM_OBS/ + try: + FileHandler(prep_gts_config.gtsioda).sync() + except OSError as err: + logger.exception(f"{self.task_config.BUFR2IODAX} failed to produce GTS ioda files") + raise OSError(err) + + @logit(logger) + def prepare_IMS(self) -> None: + """Prepare the IMS data for a global land analysis + + This method will prepare IMS data for a global land analysis using JEDI. + This includes: + - staging model backgrounds + - processing raw IMS observation data and prepare for conversion to IODA + - creating IMS snowdepth data in IODA format. + + Parameters + ---------- + Analysis: parent class for GDAS task + + Returns + ---------- + None + """ + + # create a temporary dict of all keys needed in this method + localconf = AttrDict() + keys = ['DATA', 'current_cycle', 'COM_OBS', 'COM_ATMOS_RESTART_PREV', + 'OPREFIX', 'CASE', 'ntiles'] + for key in keys: + localconf[key] = self.task_config[key] + + # stage backgrounds + logger.info("Staging backgrounds") + FileHandler(self.get_bkg_dict(localconf)).sync() + + # Read and render the IMS_OBS_LIST yaml + logger.info(f"Reading {self.task_config.IMS_OBS_LIST}") + prep_ims_config = parse_j2yaml(self.task_config.IMS_OBS_LIST, localconf) + logger.debug(f"{self.task_config.IMS_OBS_LIST}:\n{pformat(prep_ims_config)}") + + # copy the IMS obs files from COM_OBS to DATA/obs + logger.info("Copying IMS obs for CALCFIMSEXE") + FileHandler(prep_ims_config.calcfims).sync() + + logger.info("Create namelist for CALCFIMSEXE") + nml_template = self.task_config.FIMS_NML_TMPL + nml_data = Jinja(nml_template, localconf).render + logger.debug(f"fims.nml:\n{nml_data}") + + nml_file = os.path.join(localconf.DATA, "fims.nml") + with open(nml_file, "w") as fho: + fho.write(nml_data) + + logger.info("Link CALCFIMSEXE into DATA/") + exe_src = self.task_config.CALCFIMSEXE + exe_dest = os.path.join(localconf.DATA, os.path.basename(exe_src)) + if os.path.exists(exe_dest): + rm_p(exe_dest) + os.symlink(exe_src, exe_dest) + + # execute CALCFIMSEXE to calculate IMS snowdepth + exe = Executable(self.task_config.APRUN_CALCFIMS) + exe.add_default_arg(os.path.join(localconf.DATA, os.path.basename(exe_src))) + logger.info(f"Executing {exe}") + try: + exe() + except OSError: + raise OSError(f"Failed to execute {exe}") + except Exception: + raise WorkflowException(f"An error occured during execution of {exe}") + + # Ensure the snow depth IMS file is produced by the above executable + input_file = f"IMSscf.{to_YMD(localconf.current_cycle)}.{localconf.CASE}_oro_data.nc" + if not os.path.isfile(f"{os.path.join(localconf.DATA, input_file)}"): + logger.exception(f"{self.task_config.CALCFIMSEXE} failed to produce {input_file}") + raise FileNotFoundError(f"{os.path.join(localconf.DATA, input_file)}") + + # Execute imspy to create the IMS obs data in IODA format + logger.info("Create IMS obs data in IODA format") + + output_file = f"ims_snow_{to_YMDH(localconf.current_cycle)}.nc4" + if os.path.isfile(f"{os.path.join(localconf.DATA, output_file)}"): + rm_p(output_file) + + exe = Executable(self.task_config.IMS2IODACONV) + exe.add_default_arg(["-i", f"{os.path.join(localconf.DATA, input_file)}"]) + exe.add_default_arg(["-o", f"{os.path.join(localconf.DATA, output_file)}"]) + try: + logger.debug(f"Executing {exe}") + exe() + except OSError: + raise OSError(f"Failed to execute {exe}") + except Exception: + raise WorkflowException(f"An error occured during execution of {exe}") + + # Ensure the IODA snow depth IMS file is produced by the IODA converter + # If so, copy to COM_OBS/ + if not os.path.isfile(f"{os.path.join(localconf.DATA, output_file)}"): + logger.exception(f"{self.task_config.IMS2IODACONV} failed to produce {output_file}") + raise FileNotFoundError(f"{os.path.join(localconf.DATA, output_file)}") + else: + logger.info(f"Copy {output_file} to {self.task_config.COM_OBS}") + FileHandler(prep_ims_config.ims2ioda).sync() + + @logit(logger) + def initialize(self) -> None: + """Initialize method for Land analysis + This method: + - creates artifacts in the DATA directory by copying fix files + - creates the JEDI LETKF yaml from the template + - stages backgrounds, observations and ensemble members + + Parameters + ---------- + self : Analysis + Instance of the LandAnalysis object + """ + + super().initialize() + + # create a temporary dict of all keys needed in this method + localconf = AttrDict() + keys = ['DATA', 'current_cycle', 'COM_OBS', 'COM_ATMOS_RESTART_PREV', + 'OPREFIX', 'CASE', 'ntiles'] + for key in keys: + localconf[key] = self.task_config[key] + + # Make member directories in DATA for background + dirlist = [] + for imem in range(1, LandAnalysis.NMEM_LANDENS + 1): + dirlist.append(os.path.join(localconf.DATA, 'bkg', f'mem{imem:03d}')) + FileHandler({'mkdir': dirlist}).sync() + + # stage fix files + jedi_fix_list_path = os.path.join(self.task_config.HOMEgfs, 'parm', 'gdas', 'land_jedi_fix.yaml') + logger.info(f"Staging JEDI fix files from {jedi_fix_list_path}") + jedi_fix_list = parse_yamltmpl(jedi_fix_list_path, self.task_config) + FileHandler(jedi_fix_list).sync() + + # stage backgrounds + logger.info("Staging ensemble backgrounds") + FileHandler(self.get_ens_bkg_dict(localconf)).sync() + + # generate letkfoi YAML file + logger.info(f"Generate JEDI LETKF YAML file: {self.task_config.jedi_yaml}") + letkfoi_yaml = parse_j2yaml(self.task_config.JEDIYAML, self.task_config) + save_as_yaml(letkfoi_yaml, self.task_config.jedi_yaml) + logger.info(f"Wrote letkfoi YAML to: {self.task_config.jedi_yaml}") + + # need output dir for diags and anl + logger.info("Create empty output [anl, diags] directories to receive output from executable") + newdirs = [ + os.path.join(localconf.DATA, "anl"), + os.path.join(localconf.DATA, "diags"), + ] + FileHandler({'mkdir': newdirs}).sync() + + @logit(logger) + def execute(self) -> None: + """Run a series of tasks to create Snow analysis + This method: + - creates an 2 member ensemble + - runs the JEDI LETKF executable to produce increments + - creates analysis from increments + + Parameters + ---------- + self : Analysis + Instance of the LandAnalysis object + """ + + # create a temporary dict of all keys needed in this method + localconf = AttrDict() + keys = ['HOMEgfs', 'DATA', 'current_cycle', + 'COM_ATMOS_RESTART_PREV', 'COM_LAND_ANALYSIS', 'APREFIX', + 'SNOWDEPTHVAR', 'BESTDDEV', 'CASE', 'ntiles', + 'APRUN_LANDANL', 'JEDIEXE', 'jedi_yaml', + 'APPLY_INCR_NML_TMPL', 'APPLY_INCR_EXE', 'APRUN_APPLY_INCR'] + for key in keys: + localconf[key] = self.task_config[key] + + logger.info("Creating ensemble") + self.create_ensemble(localconf.SNOWDEPTHVAR, + localconf.BESTDDEV, + AttrDict({key: localconf[key] for key in ['DATA', 'ntiles', 'current_cycle']})) + + logger.info("Running JEDI LETKF") + self.execute_jediexe(localconf.DATA, + localconf.APRUN_LANDANL, + os.path.basename(localconf.JEDIEXE), + localconf.jedi_yaml) + + logger.info("Creating analysis from backgrounds and increments") + self.add_increments(localconf) + + @logit(logger) + def finalize(self) -> None: + """Performs closing actions of the Land analysis task + This method: + - tar and gzip the output diag files and place in COM/ + - copy the generated YAML file from initialize to the COM/ + - copy the analysis files to the COM/ + - copy the increment files to the COM/ + + Parameters + ---------- + self : Analysis + Instance of the LandAnalysis object + """ + + logger.info("Create diagnostic tarball of diag*.nc4 files") + statfile = os.path.join(self.task_config.COM_LAND_ANALYSIS, f"{self.task_config.APREFIX}landstat.tgz") + self.tgz_diags(statfile, self.task_config.DATA) + + logger.info("Copy full YAML to COM") + src = os.path.join(self.task_config['DATA'], f"{self.task_config.APREFIX}letkfoi.yaml") + dest = os.path.join(self.task_config.COM_CONF, f"{self.task_config.APREFIX}letkfoi.yaml") + yaml_copy = { + 'mkdir': [self.task_config.COM_CONF], + 'copy': [[src, dest]] + } + FileHandler(yaml_copy).sync() + + logger.info("Copy analysis to COM") + template = f'{to_fv3time(self.task_config.current_cycle)}.sfc_data.tile{{tilenum}}.nc' + anllist = [] + for itile in range(1, self.task_config.ntiles + 1): + filename = template.format(tilenum=itile) + src = os.path.join(self.task_config.DATA, 'anl', filename) + dest = os.path.join(self.task_config.COM_LAND_ANALYSIS, filename) + anllist.append([src, dest]) + FileHandler({'copy': anllist}).sync() + + logger.info('Copy increments to COM') + template = f'landinc.{to_fv3time(self.task_config.current_cycle)}.sfc_data.tile{{tilenum}}.nc' + inclist = [] + for itile in range(1, self.task_config.ntiles + 1): + filename = template.format(tilenum=itile) + src = os.path.join(self.task_config.DATA, 'anl', filename) + dest = os.path.join(self.task_config.COM_LAND_ANALYSIS, filename) + inclist.append([src, dest]) + FileHandler({'copy': inclist}).sync() + + @staticmethod + @logit(logger) + def get_bkg_dict(config: Dict) -> Dict[str, List[str]]: + """Compile a dictionary of model background files to copy + + This method constructs a dictionary of FV3 RESTART files (coupler, sfc_data) + that are needed for global land DA and returns said dictionary for use by the FileHandler class. + + Parameters + ---------- + config: Dict + Dictionary of key-value pairs needed in this method + Should contain the following keys: + COM_ATMOS_RESTART_PREV + DATA + current_cycle + ntiles + + Returns + ---------- + bkg_dict: Dict + a dictionary containing the list of model background files to copy for FileHandler + """ + # NOTE for now this is FV3 RESTART files and just assumed to be fh006 + + # get FV3 sfc_data RESTART files, this will be a lot simpler when using history files + rst_dir = os.path.join(config.COM_ATMOS_RESTART_PREV) # for now, option later? + run_dir = os.path.join(config.DATA, 'bkg') + + # Start accumulating list of background files to copy + bkglist = [] + + # land DA needs coupler + basename = f'{to_fv3time(config.current_cycle)}.coupler.res' + bkglist.append([os.path.join(rst_dir, basename), os.path.join(run_dir, basename)]) + + # land DA only needs sfc_data + for ftype in ['sfc_data']: + template = f'{to_fv3time(config.current_cycle)}.{ftype}.tile{{tilenum}}.nc' + for itile in range(1, config.ntiles + 1): + basename = template.format(tilenum=itile) + bkglist.append([os.path.join(rst_dir, basename), os.path.join(run_dir, basename)]) + + bkg_dict = { + 'mkdir': [run_dir], + 'copy': bkglist + } + return bkg_dict + + @staticmethod + @logit(logger) + def get_ens_bkg_dict(config: Dict) -> Dict: + """Compile a dictionary of model background files to copy for the ensemble + Note that a "Fake" 2-member ensemble backgroud is being created by copying FV3 RESTART files (coupler, sfc_data) + from the deterministic background to DATA/bkg/mem001, 002. + + Parameters + ---------- + config: Dict + Dictionary of key-value pairs needed in this method + Should contain the following keys: + COM_ATMOS_RESTART_PREV + DATA + current_cycle + ntiles + + Returns + ---------- + bkg_dict: Dict + a dictionary containing the list of model background files to copy for FileHandler + """ + + dirlist = [] + bkglist = [] + + # get FV3 sfc_data RESTART files; Note an ensemble is being created + rst_dir = os.path.join(config.COM_ATMOS_RESTART_PREV) + + for imem in range(1, LandAnalysis.NMEM_LANDENS + 1): + memchar = f"mem{imem:03d}" + + run_dir = os.path.join(config.DATA, 'bkg', memchar, 'RESTART') + dirlist.append(run_dir) + + # Land DA needs coupler + basename = f'{to_fv3time(config.current_cycle)}.coupler.res' + bkglist.append([os.path.join(rst_dir, basename), os.path.join(run_dir, basename)]) + + # Land DA only needs sfc_data + for ftype in ['sfc_data']: + template = f'{to_fv3time(config.current_cycle)}.{ftype}.tile{{tilenum}}.nc' + for itile in range(1, config.ntiles + 1): + basename = template.format(tilenum=itile) + bkglist.append([os.path.join(rst_dir, basename), os.path.join(run_dir, basename)]) + + bkg_dict = { + 'mkdir': dirlist, + 'copy': bkglist + } + + return bkg_dict + + @staticmethod + @logit(logger) + def create_ensemble(vname: str, bestddev: float, config: Dict) -> None: + """Create a 2-member ensemble for Snow Depth analysis by perturbing snow depth with a prescribed variance. + Additionally, remove glacier locations + + Parameters + ---------- + vname : str + snow depth variable to perturb: "snodl" + bestddev : float + Background Error Standard Deviation to perturb around to create ensemble + config: Dict + Dictionary of key-value pairs needed in this method. It must contain the following keys: + DATA + current_cycle + ntiles + """ + + # 2 ens members + offset = bestddev / np.sqrt(LandAnalysis.NMEM_LANDENS) + + logger.info(f"Creating ensemble for LETKFOI by offsetting with {offset}") + + workdir = os.path.join(config.DATA, 'bkg') + + sign = [1, -1] + ens_dirs = ['mem001', 'mem002'] + + for (memchar, value) in zip(ens_dirs, sign): + logger.debug(f"creating ensemble member {memchar} with sign {value}") + for tt in range(1, config.ntiles + 1): + logger.debug(f"perturbing tile {tt}") + # open file + out_netcdf = os.path.join(workdir, memchar, 'RESTART', f"{to_fv3time(config.current_cycle)}.sfc_data.tile{tt}.nc") + logger.debug(f"creating member {out_netcdf}") + with Dataset(out_netcdf, "r+") as ncOut: + slmsk_array = ncOut.variables['slmsk'][:] + vtype_array = ncOut.variables['vtype'][:] + slmsk_array[vtype_array == 15] = 0 # remove glacier locations + var_array = ncOut.variables[vname][:] + var_array[slmsk_array == 1] = var_array[slmsk_array == 1] + value * offset + ncOut.variables[vname][0, :, :] = var_array[:] + + @staticmethod + @logit(logger) + def add_increments(config: Dict) -> None: + """Executes the program "apply_incr.exe" to create analysis "sfc_data" files by adding increments to backgrounds + + Parameters + ---------- + config: Dict + Dictionary of key-value pairs needed in this method + Should contain the following keys: + HOMEgfs + COM_ATMOS_RESTART_PREV + DATA + current_cycle + CASE + ntiles + APPLY_INCR_NML_TMPL + APPLY_INCR_EXE + APRUN_APPLY_INCR + + Raises + ------ + OSError + Failure due to OS issues + WorkflowException + All other exceptions + """ + + # need backgrounds to create analysis from increments after LETKF + logger.info("Copy backgrounds into anl/ directory for creating analysis from increments") + template = f'{to_fv3time(config.current_cycle)}.sfc_data.tile{{tilenum}}.nc' + anllist = [] + for itile in range(1, config.ntiles + 1): + filename = template.format(tilenum=itile) + src = os.path.join(config.COM_ATMOS_RESTART_PREV, filename) + dest = os.path.join(config.DATA, "anl", filename) + anllist.append([src, dest]) + FileHandler({'copy': anllist}).sync() + + logger.info("Create namelist for APPLY_INCR_EXE") + nml_template = config.APPLY_INCR_NML_TMPL + nml_data = Jinja(nml_template, config).render + logger.debug(f"apply_incr_nml:\n{nml_data}") + + nml_file = os.path.join(config.DATA, "apply_incr_nml") + with open(nml_file, "w") as fho: + fho.write(nml_data) + + logger.info("Link APPLY_INCR_EXE into DATA/") + exe_src = config.APPLY_INCR_EXE + exe_dest = os.path.join(config.DATA, os.path.basename(exe_src)) + if os.path.exists(exe_dest): + rm_p(exe_dest) + os.symlink(exe_src, exe_dest) + + # execute APPLY_INCR_EXE to create analysis files + exe = Executable(config.APRUN_APPLY_INCR) + exe.add_default_arg(os.path.join(config.DATA, os.path.basename(exe_src))) + logger.info(f"Executing {exe}") + try: + exe() + except OSError: + raise OSError(f"Failed to execute {exe}") + except Exception: + raise WorkflowException(f"An error occured during execution of {exe}") diff --git a/ush/python/pygfs/task/upp.py b/ush/python/pygfs/task/upp.py new file mode 100644 index 0000000000..7db50e1582 --- /dev/null +++ b/ush/python/pygfs/task/upp.py @@ -0,0 +1,263 @@ +#!/usr/bin/env python3 + +import os +from logging import getLogger +from typing import Dict, Any, Union +from pprint import pformat + +from wxflow import (AttrDict, + parse_j2yaml, + FileHandler, + Jinja, + logit, + Task, + add_to_datetime, to_timedelta, + WorkflowException, + Executable, which) + +logger = getLogger(__name__.split('.')[-1]) + + +class UPP(Task): + """Unified Post Processor Task + """ + + VALID_UPP_RUN = ['analysis', 'forecast', 'goes', 'wafs'] + + @logit(logger, name="UPP") + def __init__(self, config: Dict[str, Any]) -> None: + """Constructor for the UPP task + The constructor is responsible for resolving the "UPP_CONFIG" based in the run-type "upp_run" + Sections of upp.yaml outside of the `upp` block are all valid `upp_run` options + E.g. "upp_run" sections are: + analysis: process analysis output + forecast: process UFS-weather-model forecast output + goes: process UFS-weather-model forecast output for simulated satellite imagery + wafs: process UFS-weather-model forecast output for WAFS products + + Parameters + ---------- + config : Dict[str, Any] + Incoming configuration for the task from the environment + + Returns + ------- + None + """ + super().__init__(config) + + if self.config.UPP_RUN not in self.VALID_UPP_RUN: + raise NotImplementedError(f'{self.config.UPP_RUN} is not a valid UPP run type.\n' + + 'Valid UPP_RUN values are:\n' + + f'{", ".join(self.VALID_UPP_RUN)}') + + valid_datetime = add_to_datetime(self.runtime_config.current_cycle, to_timedelta(f"{self.config.FORECAST_HOUR}H")) + + localdict = AttrDict( + {'upp_run': self.config.UPP_RUN, + 'forecast_hour': self.config.FORECAST_HOUR, + 'valid_datetime': valid_datetime, + 'atmos_filename': f"atm_{valid_datetime.strftime('%Y%m%d%H%M%S')}.nc", + 'flux_filename': f"sfc_{valid_datetime.strftime('%Y%m%d%H%M%S')}.nc" + } + ) + self.task_config = AttrDict(**self.config, **self.runtime_config, **localdict) + + # Read the upp.yaml file for common configuration + logger.info(f"Read the UPP configuration yaml file {self.config.UPP_CONFIG}") + self.task_config.upp_yaml = parse_j2yaml(self.config.UPP_CONFIG, self.task_config) + logger.debug(f"upp_yaml:\n{pformat(self.task_config.upp_yaml)}") + + @staticmethod + @logit(logger) + def initialize(upp_yaml: Dict) -> None: + """Initialize the work directory by copying all the common fix data + + Parameters + ---------- + upp_yaml: Dict + Fully resolved upp.yaml dictionary + """ + + # Copy static data to run directory + logger.info("Copy static data to run directory") + FileHandler(upp_yaml.upp.fix_data).sync() + + @staticmethod + @logit(logger) + def configure(upp_dict: Dict, upp_yaml: Dict) -> None: + """Configure the artifacts in the work directory. + Copy run specific data to run directory + Create namelist 'itag' from template + + Parameters + ---------- + upp_dict : Dict + Task specific keys e.g. upp_run + upp_yaml : Dict + Fully resolved upp.yaml dictionary + """ + + # Copy "upp_run" specific data to run directory + logger.info(f"Copy '{upp_dict.upp_run}' data to run directory") + FileHandler(upp_yaml[upp_dict.upp_run].data_in).sync() + + # Make a localconf with the upp_run specific configuration + # First make a shallow copy for local use + localconf = upp_dict.copy() + # Update 'config' part of the 'run' + localconf.update(upp_yaml.upp.config) + localconf.update(upp_yaml[localconf.upp_run].config) + logger.debug(f"Updated localconf with upp_run='{localconf.upp_run}':\n{pformat(localconf)}") + + # Configure the namelist and write to file + logger.info("Create namelist for upp.x") + nml_template = os.path.join(localconf.DATA, "itag.jinja") + nml_data = Jinja(nml_template, localconf).render + logger.debug(f"itag:\n{nml_data}") + nml_file = os.path.join(localconf.DATA, "itag") + with open(nml_file, "w") as fho: + fho.write(nml_data) + + @staticmethod + @logit(logger) + def execute(workdir: Union[str, os.PathLike], aprun_cmd: str, forecast_hour: int = 0) -> None: + """Run the UPP executable and index the output master and flux files + + Parameters + ---------- + workdir : str | os.PathLike + work directory with the staged data, parm files, namelists, etc. + aprun_cmd : str + launcher command for UPP.x + forecast_hour : int + default: 0 + forecast hour being processed + + Returns + ------- + None + """ + + # Run the UPP executable + UPP.run(workdir, aprun_cmd) + + # Index the output grib2 file + UPP.index(workdir, forecast_hour) + + @classmethod + @logit(logger) + def run(cls, workdir: Union[str, os.PathLike], aprun_cmd: str, exec_name: str = 'upp.x') -> None: + """ + Run the UPP executable + + Parameters + ---------- + workdir : str | os.PathLike + Working directory where to run containing the necessary files and executable + aprun_cmd : str + Launcher command e.g. mpirun -np or srun, etc. + exec_name : str + Name of the UPP executable e.g. upp.x + + Returns + ------- + None + """ + os.chdir(workdir) + + exec_cmd = Executable(aprun_cmd) + exec_cmd.add_default_arg(os.path.join(workdir, exec_name)) + + UPP._call_executable(exec_cmd) + + @classmethod + @logit(logger) + def index(cls, workdir: Union[str, os.PathLike], forecast_hour: int) -> None: + """ + Index the grib2file + + Parameters + ---------- + workdir : str | os.PathLike + Working directory where to run containing the necessary files and executable + forecast_hour : int + forecast hour to index + + Environment Parameters + ---------------------- + GRB2INDEX : str (optional) + path to executable "grb2index" + Typically set in the modulefile + + Returns + ------- + None + """ + os.chdir(workdir) + logger.info("Generate index file") + + grb2index_cmd = os.environ.get("GRB2INDEX", None) + + template = f"GFS{{file_type}}.GrbF{forecast_hour:02d}" + + for ftype in ['PRS', 'FLX']: + grbfile = template.format(file_type=ftype) + grbfidx = f"{grbfile}.idx" + + if not os.path.exists(grbfile): + logger.info(f"No {grbfile} to process, skipping ...") + continue + + logger.info(f"Creating index file for {grbfile}") + exec_cmd = which("grb2index") if grb2index_cmd is None else Executable(grb2index_cmd) + exec_cmd.add_default_arg(os.path.join(workdir, grbfile)) + exec_cmd.add_default_arg(os.path.join(workdir, grbfidx)) + + UPP._call_executable(exec_cmd) + + @staticmethod + @logit(logger) + def _call_executable(exec_cmd: Executable) -> None: + """Internal method to call executable + + Parameters + ---------- + exec_cmd : Executable + Executable to run + + Raises + ------ + OSError + Failure due to OS issues + WorkflowException + All other exceptions + """ + + logger.info(f"Executing {exec_cmd}") + try: + exec_cmd() + except OSError: + logger.exception(f"FATAL ERROR: Failed to execute {exec_cmd}") + raise OSError(f"{exec_cmd}") + except Exception: + logger.exception(f"FATAL ERROR: Error occurred during execution of {exec_cmd}") + raise WorkflowException(f"{exec_cmd}") + + @staticmethod + @logit(logger) + def finalize(upp_run: Dict, upp_yaml: Dict) -> None: + """Perform closing actions of the task. + Copy data back from the DATA/ directory to COM/ + + Parameters + ---------- + upp_run: str + Run type of UPP + upp_yaml: Dict + Fully resolved upp.yaml dictionary + """ + + # Copy "upp_run" specific generated data to COM/ directory + logger.info(f"Copy '{upp_run}' processed data to COM/ directory") + FileHandler(upp_yaml[upp_run].data_out).sync() diff --git a/ush/python/pygfs/ufswm/__init__.py b/ush/python/pygfs/ufswm/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/ush/python/pygfs/ufswm/gfs.py b/ush/python/pygfs/ufswm/gfs.py new file mode 100644 index 0000000000..2ed6cd0c08 --- /dev/null +++ b/ush/python/pygfs/ufswm/gfs.py @@ -0,0 +1,20 @@ +import copy +import logging + +from wxflow import logit +from pygfs.ufswm.ufs import UFS + +logger = logging.getLogger(__name__.split('.')[-1]) + + +class GFS(UFS): + + @logit(logger, name="GFS") + def __init__(self, config): + + super().__init__("GFS", config) + + # Start putting fixed properties of the GFS + self.ntiles = 6 + + # Determine coupled/uncoupled from config and define as appropriate diff --git a/ush/python/pygfs/ufswm/ufs.py b/ush/python/pygfs/ufswm/ufs.py new file mode 100644 index 0000000000..e9836e0b75 --- /dev/null +++ b/ush/python/pygfs/ufswm/ufs.py @@ -0,0 +1,57 @@ +import re +import copy +import logging +from typing import Dict, Any + +from wxflow import logit, Template, TemplateConstants + +logger = logging.getLogger(__name__.split('.')[-1]) + +UFS_VARIANTS = ['GFS'] + + +class UFS: + + @logit(logger, name="UFS") + def __init__(self, model_name: str, config: Dict[str, Any]): + """Initialize the UFS-weather-model generic class and check if the model_name is a valid variant + + Parameters + ---------- + model_name: str + UFS variant + config : Dict + Incoming configuration dictionary + """ + + # First check if this is a valid variant + if model_name not in UFS_VARIANTS: + logger.warn(f"{model_name} is not a valid UFS variant") + raise NotImplementedError(f"{model_name} is not yet implemented") + + # Make a deep copy of incoming config for caching purposes. _config should not be updated + self._config = copy.deepcopy(config) + + @logit(logger) + def parse_ufs_templates(input_template, output_file, ctx: Dict) -> None: + """ + This method parses UFS-weather-model templates of the pattern @[VARIABLE] + drawing the value from ctx['VARIABLE'] + """ + + with open(input_template, 'r') as fhi: + file_in = fhi.read() + file_out = Template.substitute_structure( + file_in, TemplateConstants.AT_SQUARE_BRACES, ctx.get) + + # If there are unrendered bits, find out what they are + pattern = r"@\[.*?\]+" + matches = re.findall(pattern, file_out) + if matches: + logger.warn(f"{input_template} was rendered incompletely") + logger.warn(f"The following variables were not substituted") + print(matches) # TODO: improve the formatting of this message + # TODO: Should we abort here? or continue to write output_file? + + with open(output_file, 'w') as fho: + fho.write(file_out) diff --git a/ush/radmon_diag_ck.sh b/ush/radmon_diag_ck.sh new file mode 100755 index 0000000000..8c4f54bba5 --- /dev/null +++ b/ush/radmon_diag_ck.sh @@ -0,0 +1,174 @@ +#!/bin/bash + +#---------------------------------------------------------------- +# Check the contents of the radstat file and compare to +# the ${run}_radmon_satype.txt file. Report any missing +# or zero sized diag files. +# + + function usage { + echo "Usage: radmon_diag_ck.sh -rad radstat --sat satype --out output " + echo "" + echo " -r,--rad radstat file (required)" + echo " File name or path to radstat file." + echo "" + echo " -s,--sat satype file (required)" + echo " File name or path to satype file." + echo "" + echo " -o,--out output file name (required)" + echo " File name for missing diag file report." + } + + +echo "--> radmon_diag_ck.sh" + + +#-------------------------- +# Process input arguments +# + nargs=$# + if [[ ${nargs} -ne 6 ]]; then + usage + exit 1 + fi + + while [[ $# -ge 1 ]] + do + key="$1" + echo "${key}" + + case ${key} in + -r|--rad) + radstat_file="$2" + shift # past argument + ;; + -s|--sat) + satype_file="$2" + shift # past argument + ;; + -o|--out) + output_file="$2" + shift # past argument + ;; + *) + #unspecified key + echo " unsupported key = ${key}" + ;; + esac + + shift + done + +# set -ax + + echo " radstat_file = ${radstat_file}" + echo " satype_file = ${satype_file}" + echo " output_file = ${output_file}" + + missing_diag="" + zero_len_diag="" + + #--------------------------------------------- + # get list of diag files in the radstat file + # + radstat_contents=`tar -tf "${radstat_file}" | grep '_ges' | + gawk -F"diag_" '{print $2}' | + gawk -F"_ges" '{print $1}'` + + + #--------------------------------------------- + # load contents of satype_file into an array + # + satype_contents=$(cat "${satype_file}") + + + #------------------------------------------------- + # compare $satype_contents and $radstat_contents + # report anything missing + # + for sat in ${satype_contents}; do + content_count=$(echo "${radstat_contents}" | grep -c "${sat}") + + if (( content_count <= 0 )); then + missing_diag="${missing_diag} ${sat}" + fi + + done + + echo "" + echo "missing_diag = ${missing_diag}" + echo "" + + + #--------------------------------------------------------- + # Check for zero sized diag files. The diag files in + # the radstat file (which is a tar file) are gzipped. + # I find that 0 sized, gzipped file has a size of ~52 + # (I assume that's for header and block size). + # + # So for this check we'll assume anything in the radstat + # file with a size of > 1000 bytes is suspect. (That's + # overkill, 100 is probably sufficient, but I'm the + # nervous type.) So we'll extract, uncompress, and check + # the actual file size of those. Anything with an + # uncompressed size of 0 goes on the zero_len_diag list. + # + + # TODO Rewrite these array parsing commands to avoid using Bash's sloppy word splitting + # File sizes contain only digits and immediately precede the date + # shellcheck disable=SC2207 + sizes=($(tar -vtf "${radstat_file}" --wildcards '*_ges*' | grep -P -o '(\d)+(?= \d{4}-\d{2}-\d{2})')) + # Filenames are the last group of non-whitespace characters + # shellcheck disable=SC2207 + filenames=($(tar -vtf "${radstat_file}" --wildcards '*_ges*' | grep -P -o '\S+$')) + # shellcheck disable= + + + for file_num in "${!filenames[@]}"; do + file_name="${filenames[${file_num}]}" + file_size="${sizes[${file_num}]}" + + if (( file_size <= 1000 )); then + tar -xf "${radstat_file}" "${file_name}" + gunzip "${file_name}" + uz_file_name="${file_name%.*}" + uz_file_size=$(stat -c "%s" "${uz_file_name}") + + + if (( uz_file_size <= 0 )); then + # Remove leading diag_ + sat=${uz_file_name#diag_} + # Remove trailing _ges* + sat=${sat%_ges*} + + zero_len_diag="${zero_len_diag} ${sat}" + fi + + rm -f "${uz_file_name}" + fi + + done + + echo "" + echo "zero_len_diag = ${zero_len_diag}" + echo "" + + + #----------------------------------------- + # Write results to $output_file + # + if [[ ${#zero_len_diag} -gt 0 ]]; then + for zld in ${zero_len_diag}; do + echo " Zero Length diagnostic file: ${zld}" >> "${output_file}" + done + fi + + if [[ ${#missing_diag} -gt 0 ]]; then + for md in ${missing_diag}; do + echo " Missing diagnostic file : ${md}" >> "${output_file}" + done + fi + + +echo "<-- radmon_diag_ck.sh" +exit diff --git a/ush/radmon_err_rpt.sh b/ush/radmon_err_rpt.sh new file mode 100755 index 0000000000..6ae6505624 --- /dev/null +++ b/ush/radmon_err_rpt.sh @@ -0,0 +1,194 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: radmon_err_rpt.sh +# Script description: Compare the contents of error files from two different +# cycles. +# +# Author: Ed Safford Org: NP23 Date: 2012-02-02 +# +# Abstract: This script compares the contents of two error files from two different +# sets of radiance diagnostic files (which are an output from GSI runs). +# All unique satellite instrument/channel/region combinations that appear +# in both files are reported. +# +# This script is run as a child script of radmon_verf_time.sh. The parent +# script creates/copies the error files into a temporary working +# directory before invoking this script. +# +# +# Usage: radmon_err_rpt.sh file1 file2 type cycle1 cycle2 diag_rpt outfile +# +# Input script positional parameters: +# file1 obs, penalty, or channel error file +# required +# file2 obs, penalty, or channel error file +# required +# type type of error file +# choices are obs, pen, chan, or cnt; required +# cycle1 first cycle processing date +# yyyymmddcc format; required +# cycle2 second cycle processing date +# yyyymmddcc format; required +# diag_rpt diagnostic report text file +# required +# outfile output file name +# required +# +# Remarks: +# +# Condition codes +# 0 - no problem encountered +# >0 - some problem encountered +#################################################################### + +# Command line arguments. +file1=${1:-${file1:?}} +file2=${2:-${file2:?}} +type=${3:-${type:?}} +cycle1=${4:-${cycle1:?}} +cycle2=${5:-${cycle2:?}} +diag_rpt=${6:-${diag_rpt:?}} +outfile=${7:-${outfile:?}} + +# Directories +HOMEradmon=${HOMEradmon:-$(pwd)} + +# Other variables +err=0 +RADMON_SUFFIX=${RADMON_SUFFIX} + +have_diag_rpt=0 +if [[ -s "${diag_rpt}" ]]; then + have_diag_rpt=1 +else + err=1 +fi +echo "have_diag_rpt = ${have_diag_rpt}" + +#----------------------------------------------------------------------------- +# read each line in the $file1 +# search $file2 for the same satname, channel, and region +# if same combination is in both files, add the values to the output file +# +{ while read myline; do + echo "myline = ${myline}" + bound="" + + echo "${myline}" + satname=$(echo "${myline}" | gawk '{print $1}') + channel=$(echo "${myline}" | gawk '{print $3}') + region=$(echo "${myline}" | gawk '{print $5}') + value1=$(echo "${myline}" | gawk '{print $7}') + bound=$(echo "${myline}" | gawk '{print $9}') + +# +# Check findings against diag_report. If the satellite/instrument is on the +# diagnostic report it means the diagnostic file file for the +# satelite/instrument is missing for this cycle, so skip any additional +# error checking for that source. Otherwise, evaluate as per normal. +# + + diag_match="" + diag_match_len=0 + + if [[ ${have_diag_rpt} == 1 ]]; then + diag_match=$(gawk "/${satname}/" "${diag_rpt}") + diag_match_len=$(echo ${#diag_match}) + fi + + + if [[ ${diag_match_len} == 0 ]]; then + + if [[ ${type} == "chan" ]]; then + echo "looking for match for ${satname} and ${channel}" + { while read myline2; do + satname2=$(echo "${myline2}" | gawk '{print $1}') + channel2=$(echo "${myline2}" | gawk '{print $3}') + + if [[ ${satname} == ${satname2} && ${channel} == ${channel2} ]]; then + match="${satname} channel= ${channel}" + echo "match from gawk = ${match}" + break; + else + match="" + fi + + done } < "${file2}" + + + else + match=$(gawk "/${satname}/ && /channel= ${channel} / && /region= ${region} /" "${file2}") + echo match = "${match}" + + match_len=$(echo ${#match}) + if (( match_len > 0 )); then + channel2=$(echo "${match}" | gawk '{print $3}') + + if [[ ${channel2} != ${channel} ]]; then + match="" + fi + fi + + fi + match_len=$(echo ${#match}) + + if (( match_len > 0 )); then + + value2=$(echo "${match}" | gawk '{print $7}') + bound2=$(echo "${match}" | gawk '{print $9}') + + if [[ ${type} == "chan" ]]; then + tmpa=" ${satname} channel= ${channel}" + tmpb="" + + elif [[ ${type} == "pen" ]]; then + tmpa="${satname} channel= ${channel} region= ${region}" + tmpb="${cycle1} ${value1} ${bound}" + + elif [[ ${type} == "cnt" ]]; then + tmpa="${satname} channel= ${channel} region= ${region}" + tmpb="${cycle1} ${value1} ${bound}" + + else + tmpa="${satname} channel= ${channel} region= ${region}" + tmpb="${cycle1}: ${type}= ${value1}" + fi + + line1="${tmpa} ${tmpb}" + echo "${line1}" >> "${outfile}" + + if [[ ${type} != "chan" ]]; then + tmpc=$(echo "${tmpa}" |sed 's/[a-z]/ /g' | sed 's/[0-9]/ /g' | sed 's/=/ /g' | sed 's/_/ /g' | sed 's/-/ /g') + + if [[ ${type} == "pen" || ${type} == "cnt" ]]; then + line2=" ${tmpc} ${cycle2} ${value2} ${bound2}" + else + line2=" ${tmpc} ${cycle2}: ${type}= ${value2}" + fi + + echo "${line2}" >> "${outfile}" + fi + + #----------------------------------------- + # add hyperlink to warning entry + # + line3=" http://www.emc.ncep.noaa.gov/gmb/gdas/radiance/es_rad/${RADMON_SUFFIX}/index.html?sat=${satname}®ion=${region}&channel=${channel}&stat=${type}" + if [[ ${channel} -gt 0 ]]; then + echo "${line3}" >> "${outfile}" + echo "" >> "${outfile}" + fi + fi + fi +done } < "${file1}" + + +################################################################################ +# Post processing + +exit ${err} + diff --git a/ush/radmon_verf_angle.sh b/ush/radmon_verf_angle.sh new file mode 100755 index 0000000000..f68d7c88cc --- /dev/null +++ b/ush/radmon_verf_angle.sh @@ -0,0 +1,228 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: radmon_verf_angle.sh +# Script description: Extract angle dependent data from radiance +# diagnostic files. +# +# Author: Ed Safford Org: NP23 Date: 2012-02-02 +# +# Abstract: This script extracts angle dependent data from radiance +# diagnostic files (which are an output from GSI runs), +# storing the extracted data in small binary files. +# +# This script is a child script of exgdas_vrfyrad.sh.sms. The parent +# script opens and uncompresses the radiance diagnostic file and copies +# other supporting files into a temporary working directory. +# +# +# Usage: radmon_verf_angle.sh +# +# Input script positional parameters: +# PDYcyc processing date +# yyyymmddcc format; required +# +# Imported Shell Variables: +# RADMON_SUFFIX data source suffix +# defauls to opr +# EXECgfs executable directory +# PARMmonitor parm directory +# RAD_AREA global or regional flag +# defaults to global +# TANKverf_rad data repository +# defaults to current directory +# SATYPE list of satellite/instrument sources +# defaults to none +# VERBOSE Verbose flag (YES or NO) +# defaults to NO +# LITTLE_ENDIAN flag to indicate LE machine +# defaults to 0 (big endian) +# USE_ANL use analysis files as inputs in addition to +# the ges files. Default is 0 (ges only) +# +# Modules and files referenced: +# scripts : +# +# programs : $NCP +# $angle_exec +# +# fixed data : $scaninfo +# +# input data : $data_file +# +# output data: $angle_file +# $angle_ctl +# $pgmout +# +# Remarks: +# +# Condition codes +# 0 - no problem encountered +# >0 - some problem encountered +# +#################################################################### + +# Command line arguments. +RAD_AREA=${RAD_AREA:-glb} +REGIONAL_RR=${REGIONAL_RR:-0} # rapid refresh model flag +rgnHH=${rgnHH:-} +rgnTM=${rgnTM:-} + +echo " REGIONAL_RR, rgnHH, rgnTM = ${REGIONAL_RR}, ${rgnHH}, ${rgnTM}" +netcdf_boolean=".false." +if [[ ${RADMON_NETCDF} -eq 1 ]]; then + netcdf_boolean=".true." +fi +echo " RADMON_NETCDF, netcdf_boolean = ${RADMON_NETCDF}, ${netcdf_boolean}" + +which prep_step +which startmsg + +# File names +export pgmout=${pgmout:-${jlogfile}} +touch "${pgmout}" + +# Other variables +SATYPE=${SATYPE:-} +VERBOSE=${VERBOSE:-NO} +LITTLE_ENDIAN=${LITTLE_ENDIAN:-0} +USE_ANL=${USE_ANL:-0} + + +if [[ ${USE_ANL} -eq 1 ]]; then + gesanl="ges anl" +else + gesanl="ges" +fi + +err=0 +angle_exec=radmon_angle.x +shared_scaninfo="${shared_scaninfo:-${PARMmonitor}/gdas_radmon_scaninfo.txt}" +scaninfo=scaninfo.txt + +#-------------------------------------------------------------------- +# Copy extraction program and supporting files to working directory + +${NCP} "${EXECgfs}/${angle_exec}" ./ +${NCP} "${shared_scaninfo}" ./${scaninfo} + +if [[ ! -s ./${angle_exec} || ! -s ./${scaninfo} ]]; then + err=2 +else +#-------------------------------------------------------------------- +# Run program for given time + + export pgm=${angle_exec} + + iyy="${PDY:0:4}" + imm="${PDY:4:2}" + idd="${PDY:6:2}" + ihh=${cyc} + + ctr=0 + fail=0 + touch "./errfile" + + for type in ${SATYPE}; do + + if [[ ! -s ${type} ]]; then + echo "ZERO SIZED: ${type}" + continue + fi + + for dtype in ${gesanl}; do + + echo "pgm = ${pgm}" + echo "pgmout = ${pgmout}" + prep_step + + ctr=$((ctr + 1)) + + if [[ ${dtype} == "anl" ]]; then + data_file="${type}_anl.${PDY}${cyc}.ieee_d" + ctl_file=${type}_anl.ctl + angl_ctl=angle.${ctl_file} + else + data_file="${type}.${PDY}${cyc}.ieee_d" + ctl_file=${type}.ctl + angl_ctl=angle.${ctl_file} + fi + + angl_file="" + if [[ ${REGIONAL_RR} -eq 1 ]]; then + angl_file=${rgnHH}.${data_file}.${rgnTM} + fi + + + if [[ -f input ]]; then rm input; fi + + nchanl=-999 +cat << EOF > input + &INPUT + satname='${type}', + iyy=${iyy}, + imm=${imm}, + idd=${idd}, + ihh=${ihh}, + idhh=-720, + incr=${CYCLE_INTERVAL}, + nchanl=${nchanl}, + suffix='${RADMON_SUFFIX}', + gesanl='${dtype}', + little_endian=${LITTLE_ENDIAN}, + rad_area='${RAD_AREA}', + netcdf=${netcdf_boolean}, + / +EOF + + startmsg + ./${angle_exec} < input >> "${pgmout}" 2>>errfile + export err=$?; err_chk + if [[ ${err} -ne 0 ]]; then + fail=$(( fail + 1 )) + fi + + if [[ -s ${angl_file} ]]; then + ${COMPRESS} -f "${angl_file}" + fi + + if [[ -s ${angl_ctl} ]]; then + ${COMPRESS} -f "${angl_ctl}" + fi + + + done # for dtype in ${gesanl} loop + + done # for type in ${SATYPE} loop + + + "${USHgfs}/rstprod.sh" + + tar_file=radmon_angle.tar + if compgen -G "angle*.ieee_d*" > /dev/null || compgen -G "angle*.ctl*" > /dev/null; then + tar -cf "${tar_file}" angle*.ieee_d* angle*.ctl* + ${COMPRESS} ${tar_file} + mv "${tar_file}.${Z}" "${TANKverf_rad}/." + + if [[ ${RAD_AREA} = "rgn" ]]; then + cwd=$(pwd) + cd "${TANKverf_rad}" + tar -xf "${tar_file}.${Z}" + rm "${tar_file}.${Z}" + cd "${cwd}" + fi + fi + + if [[ ${ctr} -gt 0 && ${fail} -eq ${ctr} || ${fail} -gt ${ctr} ]]; then + err=3 + fi +fi + +################################################################################ +# Post processing + +exit ${err} diff --git a/ush/radmon_verf_bcoef.sh b/ush/radmon_verf_bcoef.sh new file mode 100755 index 0000000000..ab1058711e --- /dev/null +++ b/ush/radmon_verf_bcoef.sh @@ -0,0 +1,222 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: radmon_verf_bcoef.sh +# Script description: Extract bias correction coefficients data from radiance +# diagnostic files. +# +# Author: Ed Safford Org: NP23 Date: 2012-02-02 +# +# Abstract: This script extracts bias correction coefficient related data from +# radiance diagnostic files (which are an output from GSI runs), +# storing the extracted data in small binary files. +# +# This script is a child script of exgdas_vrfyrad.sh.sms. The parent +# script opens and uncompresses the radiance diagnostic file and copies +# other supporting files into a temporary working directory. +# +# +# Usage: radmon_verf_bcoef.sh +# +# Input script positional parameters: +# PDYcyc processing date +# yyyymmddcc format; required +# +# Imported Shell Variables: +# RADMON_SUFFIX data source suffix +# defauls to opr +# EXECgfs executable directory +# RAD_AREA global or regional flag +# defaults to global +# TANKverf_rad data repository +# SATYPE list of satellite/instrument sources +# defaults to none +# LITTLE_ENDIAN flag for LE machine +# defaults to 0 (big endian) +# USE_ANL use analysis files as inputs in addition to +# the ges files. Default is 0 (ges only) +# +# Modules and files referenced: +# scripts : +# +# programs : $NCP +# $bcoef_exec +# +# fixed data : $biascr +# +# input data : $data_file +# +# output data: $bcoef_file +# $bcoef_ctl +# $pgmout +# +# Remarks: +# +# Condition codes +# 0 - no problem encountered +# >0 - some problem encountered +# +#################################################################### + +netcdf_boolean=".false." +if [[ ${RADMON_NETCDF} -eq 1 ]]; then + netcdf_boolean=".true." +fi +echo " RADMON_NETCDF, netcdf_boolean = ${RADMON_NETCDF}, ${netcdf_boolean}" + +# File names +pgmout=${pgmout:-${jlogfile}} +touch "${pgmout}" + +# Other variables +RAD_AREA=${RAD_AREA:-glb} +REGIONAL_RR=${REGIONAL_RR:-0} +rgnHH=${rgnHH:-} +rgnTM=${rgnTM:-} +SATYPE=${SATYPE:-} +LITTLE_ENDIAN=${LITTLE_ENDIAN:-0} +USE_ANL=${USE_ANL:-0} + + +err=0 +bcoef_exec=radmon_bcoef.x + +if [[ ${USE_ANL} -eq 1 ]]; then + gesanl="ges anl" +else + gesanl="ges" +fi + +#-------------------------------------------------------------------- +# Copy extraction program and supporting files to working directory + +${NCP} "${EXECgfs}/${bcoef_exec}" ./${bcoef_exec} +${NCP} "${biascr}" ./biascr.txt + +if [[ ! -s ./${bcoef_exec} || ! -s ./biascr.txt ]]; then + err=4 +else + + +#-------------------------------------------------------------------- +# Run program for given time + + export pgm=${bcoef_exec} + + iyy="${PDY:0:4}" + imm="${PDY:4:2}" + idd="${PDY:6:2}" + ihh=${cyc} + + ctr=0 + fail=0 + + nchanl=-999 + npredr=5 + + for type in ${SATYPE}; do + + if [[ ! -s ${type} ]]; then + echo "ZERO SIZED: ${type}" + continue + fi + + for dtype in ${gesanl}; do + + prep_step + + ctr=$(( ctr + 1 )) + + if [[ ${dtype} == "anl" ]]; then + data_file="${type}_anl.${PDY}${cyc}.ieee_d" + ctl_file=${type}_anl.ctl + bcoef_ctl=bcoef.${ctl_file} + else + data_file="${type}.${PDY}${cyc}.ieee_d" + ctl_file=${type}.ctl + bcoef_ctl=bcoef.${ctl_file} + fi + + if [[ ${REGIONAL_RR} -eq 1 ]]; then + bcoef_file=${rgnHH}.bcoef.${data_file}.${rgnTM} + else + bcoef_file=bcoef.${data_file} + fi + + + if [[ -f input ]]; then rm input; fi + + +cat << EOF > input + &INPUT + satname='${type}', + npredr=${npredr}, + nchanl=${nchanl}, + iyy=${iyy}, + imm=${imm}, + idd=${idd}, + ihh=${ihh}, + idhh=-720, + incr=${CYCLE_INTERVAL}, + suffix='${RADMON_SUFFIX}', + gesanl='${dtype}', + little_endian=${LITTLE_ENDIAN}, + netcdf=${netcdf_boolean}, + / +EOF + startmsg + ./${bcoef_exec} < input >>"${pgmout}" 2>>errfile + export err=$?; err_chk + if [[ ${err} -ne 0 ]]; then + fail=$(( fail + 1 )) + fi + + +#------------------------------------------------------------------- +# move data, control, and stdout files to $TANKverf_rad and compress +# + + if [[ -s ${bcoef_file} ]]; then + ${COMPRESS} "${bcoef_file}" + fi + + if [[ -s ${bcoef_ctl} ]]; then + ${COMPRESS} "${bcoef_ctl}" + fi + + + done # dtype in $gesanl loop + done # type in $SATYPE loop + + + "${USHgfs}/rstprod.sh" + + if compgen -G "bcoef*.ieee_d*" > /dev/null || compgen -G "bcoef*.ctl*" > /dev/null; then + tar_file=radmon_bcoef.tar + tar -cf ${tar_file} bcoef*.ieee_d* bcoef*.ctl* + ${COMPRESS} ${tar_file} + mv "${tar_file}.${Z}" "${TANKverf_rad}" + + if [[ ${RAD_AREA} = "rgn" ]]; then + cwd=$(pwd) + cd "${TANKverf_rad}" + tar -xf "${tar_file}.${Z}" + rm "${tar_file}.${Z}" + cd "${cwd}" + fi + fi + + if [[ ${ctr} -gt 0 && ${fail} -eq ${ctr} || ${fail} -gt ${ctr} ]]; then + err=5 + fi +fi + + +################################################################################ +# Post processing + +exit ${err} diff --git a/ush/radmon_verf_bcor.sh b/ush/radmon_verf_bcor.sh new file mode 100755 index 0000000000..f1f97c247e --- /dev/null +++ b/ush/radmon_verf_bcor.sh @@ -0,0 +1,219 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: radmon_verf_bcor.sh +# Script description: Extract bias correction data from radiance diagnostic +# files. +# +# Author: Ed Safford Org: NP23 Date: 2012-02-02 +# +# Abstract: This script extracts bias correction related data from radiance +# diagnostic files (which are an output from GSI runs), storing the +# extracted data in small binary files. +# +# This script is a child script of exgdas_vrfyrad.sh.sms. The parent +# script opens and uncompresses the radiance diagnostic file and copies +# other supporting files into a temporary working directory. +# +# +# Usage: radmon_verf_bcor.sh +# +# Input script positional parameters: +# PDYcyc processing date +# yyyymmddcc format; required +# +# Imported Shell Variables: +# RADMON_SUFFIX data source suffix +# defauls to opr +# EXECgfs executable directory +# defaults to current directory +# RAD_AREA global or regional flag +# defaults to global +# TANKverf_rad data repository +# defaults to current directory +# SATYPE list of satellite/instrument sources +# defaults to none +# LITTLE_ENDIAN flag for little endian machine +# defaults to 0 (big endian) +# USE_ANL use analysis files as inputs in addition to +# the ges files. Default is 0 (ges only) +# +# Modules and files referenced: +# scripts : +# +# programs : $NCP +# $bcor_exec +# +# fixed data : none +# +# input data : $data_file +# +# output data: $bcor_file +# $bcor_ctl +# $pgmout +# +# Remarks: +# +# Condition codes +# 0 - no problem encountered +# >0 - some problem encountered +# +#################################################################### + +# File names +pgmout=${pgmout:-${jlogfile}} +touch "${pgmout}" + +# Other variables +RAD_AREA=${RAD_AREA:-glb} +SATYPE=${SATYPE:-} +LITTLE_ENDIAN=${LITTLE_ENDIAN:-0} +USE_ANL=${USE_ANL:-0} + +bcor_exec=radmon_bcor.x +err=0 + +netcdf_boolean=".false." +if [[ ${RADMON_NETCDF} -eq 1 ]]; then + netcdf_boolean=".true." +fi + +if [[ ${USE_ANL} -eq 1 ]]; then + gesanl="ges anl" +else + gesanl="ges" +fi + + +#-------------------------------------------------------------------- +# Copy extraction program to working directory + +${NCP} "${EXECgfs}/${bcor_exec}" ./${bcor_exec} + +if [[ ! -s ./${bcor_exec} ]]; then + err=6 +else + + +#-------------------------------------------------------------------- +# Run program for given time + + export pgm=${bcor_exec} + + iyy="${PDY:0:4}" + imm="${PDY:4:2}" + idd="${PDY:6:2}" + ihh=${cyc} + + ctr=0 + fail=0 + touch "./errfile" + + for type in ${SATYPE}; do + + for dtype in ${gesanl}; do + + prep_step + + ctr=$(( ctr + 1 )) + + if [[ ${dtype} == "anl" ]]; then + data_file="${type}_anl.${PDY}${cyc}.ieee_d" + bcor_file=bcor.${data_file} + ctl_file=${type}_anl.ctl + bcor_ctl=bcor.${ctl_file} + stdout_file=stdout.${type}_anl + bcor_stdout=bcor.${stdout_file} + input_file=${type}_anl + else + data_file="${type}.${PDY}${cyc}.ieee_d" + bcor_file=bcor.${data_file} + ctl_file=${type}.ctl + bcor_ctl=bcor.${ctl_file} + stdout_file=stdout.${type} + bcor_stdout=bcor.${stdout_file} + input_file=${type} + fi + + if [[ -f input ]]; then rm input; fi + + # Check for 0 length input file here and avoid running + # the executable if $input_file doesn't exist or is 0 bytes + # + if [[ -s "${input_file}" ]]; then + nchanl=-999 + +cat << EOF > input + &INPUT + satname='${type}', + iyy=${iyy}, + imm=${imm}, + idd=${idd}, + ihh=${ihh}, + idhh=-720, + incr=6, + nchanl=${nchanl}, + suffix='${RADMON_SUFFIX}', + gesanl='${dtype}', + little_endian=${LITTLE_ENDIAN}, + rad_area='${RAD_AREA}', + netcdf=${netcdf_boolean}, + / +EOF + + startmsg + ./${bcor_exec} < input >> "${pgmout}" 2>>errfile + export err=$?; err_chk + if [[ $? -ne 0 ]]; then + fail=$(( fail + 1 )) + fi + + +#------------------------------------------------------------------- +# move data, control, and stdout files to $TANKverf_rad and compress +# + + if [[ -s ${bcor_file} ]]; then + ${COMPRESS} "${bcor_file}" + fi + + if [[ -s ${bcor_ctl} ]]; then + ${COMPRESS} "${bcor_ctl}" + fi + + fi + done # dtype in $gesanl loop + done # type in $SATYPE loop + + + "${USHgfs}/rstprod.sh" + tar_file=radmon_bcor.tar + + if compgen -G "bcor*.ieee_d*" > /dev/null || compgen -G "bcor*.ctl*" > /dev/null; then + tar -cf "${tar_file}" bcor*.ieee_d* bcor*.ctl* + ${COMPRESS} ${tar_file} + mv "${tar_file}.${Z}" "${TANKverf_rad}/." + + if [[ ${RAD_AREA} = "rgn" ]]; then + cwd=$(pwd) + cd "${TANKverf_rad}" + tar -xf "${tar_file}.${Z}" + rm "${tar_file}.${Z}" + cd "${cwd}" + fi + fi + + if [[ ${ctr} -gt 0 && ${fail} -eq ${ctr} || ${fail} -gt ${ctr} ]]; then + err=7 + fi +fi + +################################################################################ +# Post processing + +exit ${err} + diff --git a/ush/radmon_verf_time.sh b/ush/radmon_verf_time.sh new file mode 100755 index 0000000000..7f98407ec5 --- /dev/null +++ b/ush/radmon_verf_time.sh @@ -0,0 +1,554 @@ +#! /usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +################################################################################ +#### UNIX Script Documentation Block +# . . +# Script name: radmon_verf_time.sh +# Script description: Extract time data from radiance diagnostic files, +# perform data integrity checks. +# +# Author: Ed Safford Org: NP23 Date: 2012-02-02 +# +# Abstract: This script extracts time related data from radiance diagnostic +# files (which are an output from GSI runs), storing the extracted +# data in small binary files. Data integrity checks are performed +# on the data and mail messages are sent if potential errors are +# detected. +# +# This script is a child script of exgdas_vrfyrad.sh.sms. The parent +# script opens and uncompresses the radiance diagnostic file and copies +# other supporting files into a temporary working directory. +# +# +# Usage: radmon_verf_time.sh ${PDY}${cyc} +# +# Input script positional parameters: +# PDYcyc processing date +# yyyymmddcc format; required +# +# Imported Shell Variables: +# DO_DATA_RPT switch to build the data report +# defaults to 1 (on) +# RADMON_SUFFIX data source suffix +# defauls to opr +# EXECgfs executable directory +# PARMmonitor parm data directory +# RAD_AREA global or regional flag +# defaults to global +# TANKverf_rad data repository +# SATYPE list of satellite/instrument sources +# defaults to none +# VERBOSE Verbose flag (YES or NO) +# defaults to NO +# LITTLE_ENDIAN flag for little endian machine +# defaults to 0 (big endian) +# USE_ANL use analysis files as inputs in addition to +# the ges files. Default is 0 (ges only) +# +# Modules and files referenced: +# scripts : +# +# programs : $NCP +# $time_exec +# +# fixed data : gdas_radmon_base.tar +# +# input data : $data_file +# +# output data: $time_file +# $time_ctl +# $pgmout +# $bad_pen +# $bad_chan +# $report +# $diag_report +# +# +# Remarks: +# +# Condition codes +# 0 - no problem encountered +# >0 - some problem encountered +# +#################################################################### + +# File names +#pgmout=${pgmout:-${jlogfile}} +#touch $pgmout + +radmon_err_rpt=${radmon_err_rpt:-${USHgfs}/radmon_err_rpt.sh} +base_file=${base_file:-${PARMmonitor}/gdas_radmon_base.tar} +report=report.txt +disclaimer=disclaimer.txt + +diag_report=diag_report.txt +diag_hdr=diag_hdr.txt +diag=diag.txt + +obs_err=obs_err.txt +obs_hdr=obs_hdr.txt +pen_err=pen_err.txt +pen_hdr=pen_hdr.txt + +chan_err=chan_err.txt +chan_hdr=chan_hdr.txt +count_hdr=count_hdr.txt +count_err=count_err.txt + +netcdf_boolean=".false." +if [[ ${RADMON_NETCDF} -eq 1 ]]; then + netcdf_boolean=".true." +fi + +DO_DATA_RPT=${DO_DATA_RPT:-1} +RADMON_SUFFIX=${RADMON_SUFFIX:-opr} +RAD_AREA=${RAD_AREA:-glb} +REGIONAL_RR=${REGIONAL_RR:-0} +rgnHH=${rgnHH:-} +rgnTM=${rgnTM:-} +SATYPE=${SATYPE:-} +VERBOSE=${VERBOSE:-NO} +LITTLE_ENDIAN=${LITTLE_ENDIAN:-0} + +time_exec=radmon_time.x +USE_ANL=${USE_ANL:-0} +err=0 + +if [[ ${USE_ANL} -eq 1 ]]; then + gesanl="ges anl" +else + gesanl="ges" +fi + + +#-------------------------------------------------------------------- +# Copy extraction program and base files to working directory +#------------------------------------------------------------------- +${NCP} "${EXECgfs}/${time_exec}" ./ +if [[ ! -s ./${time_exec} ]]; then + err=8 +fi + +iyy="${PDY:0:4}" +imm="${PDY:4:2}" +idd="${PDY:6:2}" +ihh=${cyc} + +local_base="local_base" +if [[ ${DO_DATA_RPT} -eq 1 ]]; then + + if [[ -e ${base_file}.${Z} ]]; then + ${NCP} "${base_file}.${Z}" "./${local_base}.${Z}" + ${UNCOMPRESS} "${local_base}.${Z}" + else + ${NCP} "${base_file}" ./${local_base} + fi + + if [[ ! -s ./${local_base} ]]; then + echo "RED LIGHT: local_base file not found" + else + echo "Confirming local_base file is good = ${local_base}" + tar -xf ./${local_base} + echo "local_base is untarred" + fi +fi + +if [[ ${err} -eq 0 ]]; then + ctr=0 + fail=0 + + export pgm=${time_exec} +#-------------------------------------------------------------------- +# Loop over each entry in SATYPE +#-------------------------------------------------------------------- + for type in ${SATYPE}; do + + if [[ ! -s ${type} ]]; then + echo "ZERO SIZED: ${type}" + continue + fi + + ctr=$(( ctr + 1 )) + + for dtype in ${gesanl}; do + + if [[ -f input ]]; then rm input; fi + + if [[ ${dtype} == "anl" ]]; then + data_file="${type}_anl.${PDY}${cyc}.ieee_d" + ctl_file=${type}_anl.ctl + time_ctl=time.${ctl_file} + else + data_file="${type}.${PDY}${cyc}.ieee_d" + ctl_file=${type}.ctl + time_ctl=time.${ctl_file} + fi + + if [[ ${REGIONAL_RR} -eq 1 ]]; then + time_file=${rgnHH}.time.${data_file}.${rgnTM} + else + time_file=time.${data_file} + fi + +#-------------------------------------------------------------------- +# Run program for given satellite/instrument +#-------------------------------------------------------------------- + nchanl=-999 +cat << EOF > input + &INPUT + satname='${type}', + iyy=${iyy}, + imm=${imm}, + idd=${idd}, + ihh=${ihh}, + idhh=-720, + incr=${CYCLE_INTERVAL}, + nchanl=${nchanl}, + suffix='${RADMON_SUFFIX}', + gesanl='${dtype}', + little_endian=${LITTLE_ENDIAN}, + rad_area='${RAD_AREA}', + netcdf=${netcdf_boolean}, + / +EOF + + ./${time_exec} < input >> stdout."${type}" 2>>errfile + + if [[ ${err} -ne 0 ]]; then + fail=$(( fail + 1 )) + fi + +#------------------------------------------------------------------- +# move data, control, and stdout files to $TANKverf_rad and compress +#------------------------------------------------------------------- + cat "stdout.${type}" >> stdout.time + + if [[ -s ${time_file} ]]; then + ${COMPRESS} "${time_file}" + fi + + if [[ -s ${time_ctl} ]]; then + ${COMPRESS} "${time_ctl}" + fi + + done + done + + + "${USHgfs}/rstprod.sh" + + if compgen -G "time*.ieee_d*" > /dev/null || compgen -G "time*.ctl*" > /dev/null; then + tar_file=radmon_time.tar + tar -cf "${tar_file}" time*.ieee_d* time*.ctl* + ${COMPRESS} ${tar_file} + mv "${tar_file}.${Z}" "${TANKverf_rad}/." + + if [[ ${RAD_AREA} = "rgn" ]]; then + cwd=$(pwd) + cd "${TANKverf_rad}" + tar -xf "${tar_file}.${Z}" + rm "${tar_file}.${Z}" + cd "${cwd}" + fi + fi + + if [[ ${ctr} -gt 0 && ${fail} -eq ${ctr} || ${fail} -gt ${ctr} ]]; then + echo "fail, ctr = ${fail}, ${ctr}" + err=10 + fi + +fi + + + +#################################################################### +#------------------------------------------------------------------- +# Begin error analysis and reporting +#------------------------------------------------------------------- +#################################################################### + +if [[ ${DO_DATA_RPT} -eq 1 ]]; then + +#--------------------------- +# build report disclaimer +# + cat << EOF > ${disclaimer} + + +*********************** WARNING *************************** +THIS IS AN AUTOMATED EMAIL. REPLIES TO SENDER WILL NOT BE +RECEIVED. PLEASE DIRECT REPLIES TO edward.safford@noaa.gov +*********************** WARNING *************************** +EOF + + +#------------------------------------------------------------------- +# Check for missing diag files +# + tmp_satype="./tmp_satype.txt" + echo "${SATYPE}" > ${tmp_satype} + "${USHgfs}/radmon_diag_ck.sh" --rad "${radstat}" --sat "${tmp_satype}" --out "${diag}" + + if [[ -s ${diag} ]]; then + cat << EOF > ${diag_hdr} + + Problem Reading Diagnostic File + + + Problems were encountered reading the diagnostic file for + the following sources: + +EOF + + cat ${diag_hdr} >> ${diag_report} + cat ${diag} >> ${diag_report} + + echo >> ${diag_report} + + rm ${diag_hdr} + fi + +#------------------------------------------------------------------- +# move warning notification to TANKverf +# + if [[ -s ${diag} ]]; then + lines=$(wc -l <${diag}) + echo "lines in diag = ${lines}" + + if [[ ${lines} -gt 0 ]]; then + cat ${diag_report} + cp ${diag} "${TANKverf_rad}/bad_diag.${PDY}${cyc}" + else + rm ${diag_report} + fi + fi + + + + #---------------------------------------------------------------- + # Identify bad_pen and bad_chan files for this cycle and + # previous cycle + + bad_pen=bad_pen.${PDY}${cyc} + bad_chan=bad_chan.${PDY}${cyc} + low_count=low_count.${PDY}${cyc} + + qdate=$(date --utc +%Y%m%d%H -d "${PDY} ${cyc} - ${assim_freq} hours") + pday="${qdate:0:8}" + + prev_bad_pen=bad_pen.${qdate} + prev_bad_chan=bad_chan.${qdate} + prev_low_count=low_count.${qdate} + + prev_bad_pen=${TANKverf_radM1}/${prev_bad_pen} + prev_bad_chan=${TANKverf_radM1}/${prev_bad_chan} + prev_low_count=${TANKverf_radM1}/${prev_low_count} + + if [[ -s ${bad_pen} ]]; then + echo "pad_pen = ${bad_pen}" + fi + if [[ -s ${prev_bad_pen} ]]; then + echo "prev_pad_pen = ${prev_bad_pen}" + fi + + if [[ -s ${bad_chan} ]]; then + echo "bad_chan = ${bad_chan}" + fi + if [[ -s ${prev_bad_chan} ]]; then + echo "prev_bad_chan = ${prev_bad_chan}" + fi + if [[ -s ${low_count} ]]; then + echo "low_count = ${low_count}" + fi + if [[ -s ${prev_low_count} ]]; then + echo "prev_low_count = ${prev_low_count}" + fi + + do_pen=0 + do_chan=0 + do_cnt=0 + + if [[ -s ${bad_pen} && -s ${prev_bad_pen} ]]; then + do_pen=1 + fi + + if [[ -s ${low_count} && -s ${prev_low_count} ]]; then + do_cnt=1 + fi + + #-------------------------------------------------------------------- + # avoid doing the bad_chan report for REGIONAL_RR sources -- because + # they run hourly they often have 0 count channels for off-hour runs. + # + if [[ -s ${bad_chan} && -s ${prev_bad_chan} && REGIONAL_RR -eq 0 ]]; then + do_chan=1 + fi + + #-------------------------------------------------------------------- + # Remove extra spaces in new bad_pen & low_count files + # + if [[ -s ${bad_pen} ]]; then + gawk '{$1=$1}1' "${bad_pen}" > tmp.bad_pen + mv -f tmp.bad_pen "${bad_pen}" + fi + if [[ -s ${low_count} ]]; then + gawk '{$1=$1}1' "${low_count}" > tmp.low_count + mv -f tmp.low_count "${low_count}" + fi + + echo " do_pen, do_chan, do_cnt = ${do_pen}, ${do_chan}, ${do_cnt}" + echo " diag_report = ${diag_report} " + if [[ ${do_pen} -eq 1 || ${do_chan} -eq 1 || ${do_cnt} -eq 1 || -s ${diag_report} ]]; then + + if [[ ${do_pen} -eq 1 ]]; then + + echo "calling radmon_err_rpt for pen" + ${radmon_err_rpt} "${prev_bad_pen}" "${bad_pen}" pen "${qdate}" \ + "${PDY}${cyc}" ${diag_report} ${pen_err} + fi + + if [[ ${do_chan} -eq 1 ]]; then + + echo "calling radmon_err_rpt for chan" + ${radmon_err_rpt} "${prev_bad_chan}" "${bad_chan}" chan "${qdate}" \ + "${PDY}${cyc}" ${diag_report} ${chan_err} + fi + + if [[ ${do_cnt} -eq 1 ]]; then + + echo "calling radmon_err_rpt for cnt" + ${radmon_err_rpt} "${prev_low_count}" "${low_count}" cnt "${qdate}" \ + "${PDY}${cyc}" ${diag_report} ${count_err} + fi + + #------------------------------------------------------------------- + # put together the unified error report with any obs, chan, and + # penalty problems and mail it + + if [[ -s ${obs_err} || -s ${pen_err} || -s ${chan_err} || -s ${count_err} || -s ${diag_report} ]]; then + + echo DOING ERROR REPORTING + + + cat << EOF > ${report} +Radiance Monitor warning report + + Net: ${RADMON_SUFFIX} + Run: ${RUN} + Cycle: ${PDY}${cyc} + +EOF + + if [[ -s ${diag_report} ]]; then + echo OUTPUTING DIAG_REPORT + cat ${diag_report} >> ${report} + fi + + if [[ -s ${chan_err} ]]; then + + echo OUTPUTING CHAN_ERR + + cat << EOF > ${chan_hdr} + + The following channels report 0 observational counts over the past two cycles: + + Satellite/Instrument Channel + ==================== ======= + +EOF + + cat ${chan_hdr} >> ${report} + cat ${chan_err} >> ${report} + + fi + + if [[ -s ${count_err} ]]; then + + cat << EOF > ${count_hdr} + + + + The following channels report abnormally low observational counts in the latest 2 cycles: + +Satellite/Instrument Obs Count Avg Count +==================== ========= ========= + +EOF + + cat ${count_hdr} >> ${report} + cat ${count_err} >> ${report} + fi + + + if [[ -s ${pen_err} ]]; then + + cat << EOF > ${pen_hdr} + + + Penalty values outside of the established normal range were found + for these sensor/channel/regions in the past two cycles: + + Questionable Penalty Values + ============ ======= ====== Cycle Penalty Bound + ----- ------- ----- +EOF + cat ${pen_hdr} >> ${report} + cat ${pen_err} >> ${report} + rm -f ${pen_hdr} + rm -f ${pen_err} + fi + + echo >> ${report} + cat ${disclaimer} >> ${report} + echo >> ${report} + fi + + #------------------------------------------------------------------- + # dump report to log file + # + if [[ -s ${report} ]]; then + lines=$(wc -l <${report}) + if [[ ${lines} -gt 2 ]]; then + cat ${report} + + ${NCP} ${report} "${TANKverf_rad}/warning.${PDY}${cyc}" + fi + fi + + + fi + + #------------------------------------------------------------------- + # copy new bad_pen, bad_chan, and low_count files to $TANKverf_rad + # + if [[ -s ${bad_chan} ]]; then + mv "${bad_chan}" "${TANKverf_rad}/." + fi + + if [[ -s ${bad_pen} ]]; then + mv "${bad_pen}" "${TANKverf_rad}/." + fi + + if [[ -s ${low_count} ]]; then + mv "${low_count}" "${TANKverf_rad}/." + fi + + +fi + + for type in ${SATYPE}; do + rm -f "stdout.${type}" + done + +################################################################################ +#------------------------------------------------------------------- +# end error reporting section +#------------------------------------------------------------------- +################################################################################ + +################################################################################ +# Post processing + +exit ${err} diff --git a/ush/rocoto/.gitignore b/ush/rocoto/.gitignore deleted file mode 100644 index 7f98f9b45c..0000000000 --- a/ush/rocoto/.gitignore +++ /dev/null @@ -1,47 +0,0 @@ -# Compiled source # -################### -*.com -*.class -*.dll -*.exe -*.o -*.mod -*.so -*.pyc - -# Temporary files # -################### -*.swp -*.swo -*~ - -# Packages # -############ -*.7z -*.dmg -*.gz -*.iso -*.jar -*.rar -*.tar -*.zip - -# Logs and databases # -###################### -*.log -*.sql -*.sqlite - -# OS generated files # -###################### -.DS_Store* -ehthumbs.db -Icon? -Thumbs.db - -*.lock -package-lock.json - -# Subversion and Git directories -.svn -.git diff --git a/ush/rocoto/fv3gfs_workflow.sh b/ush/rocoto/fv3gfs_workflow.sh deleted file mode 100755 index 7331b646f7..0000000000 --- a/ush/rocoto/fv3gfs_workflow.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/sh - -# Checkout, build, setup and execute the workflow - -set -ex - -fv3gfs_tag="https://svnemc.ncep.noaa.gov/projects/fv3gfs/trunk" - -pslot="fv3test" -expdir="/path/to/expdir" -comrot="/path/to/comrot" -fv3gfs="/path/to/fv3gfs_tag/checkout" -idate="2017073118" -edate="2017080112" - -###################################### -# USER NEED NOT MODIFY BELOW THIS LINE -###################################### - -if [ -d /gpfs/hps3 ]; then - machine="cray" - icsdir="/gpfs/hps3/emc/global/noscrub/emc.glopara/ICS" -else - echo "Unknown machine $machine, ABORT!" - exit -1 -fi - -[[ -d $expdir/$pslot ]] && rm -rf $expdir/$pslot -[[ -d $comrot/$pslot ]] && rm -rf $comrot/$pslot -[[ -d $fv3gfs/$pslot ]] && rm -rf $fv3gfs/$pslot - -gfs_ver=v15.0.0 -mkdir -p $fv3gfs -cd $fv3gfs -git clone --recursive gerrit:fv3gfs gfs.${gfs_ver} - -cd $fv3gfs/gfs.${gfs_ver}/sorc -sh checkout.sh -sh build_all.sh $machine -sh link_fv3gfs.sh emc $machine - -cd $fv3gfs/gfs.${gfs_ver}/ush/rocoto -python setup_expt.py --pslot $pslot --comrot $comrot --expdir $expdir --idate $idate --edate $edate --icsdir $icsdir --configdir ../parm/config -python setup_workflow.py --expdir $expdir/$pslot - -cd $expdir/$pslot -crontab $pslot.crontab - -exit diff --git a/ush/rocoto/rocoto.py b/ush/rocoto/rocoto.py deleted file mode 100755 index 77ea659709..0000000000 --- a/ush/rocoto/rocoto.py +++ /dev/null @@ -1,342 +0,0 @@ -#!/usr/bin/env python - -''' - MODULE: - rocoto.py - - ABOUT: - Helper module to create tasks, metatasks, and dependencies - - AUTHOR: - Rahul.Mahajan - rahul.mahajan@noaa.gov -''' - -def create_metatask(task_dict, metatask_dict): - ''' - create a Rocoto metatask given a dictionary containing task and metatask information - :param metatask_dict: metatask key-value parameters - :type metatask_dict: dict - :param task_dict: task key-value parameters - :type task_dict: dict - :return: Rocoto metatask - :rtype: list - ''' - - # Grab metatask info from the metatask_dict - metataskname = metatask_dict.get('metataskname', 'demometatask') - varname = metatask_dict.get('varname', 'demovar') - varval = metatask_dict.get('varval', 1) - vardict = metatask_dict.get('vardict', None) - - strings = [] - - strings.append('\n' % metataskname) - strings.append('\n') - strings.append('\t%s\n' % (varname, str(varval))) - if vardict is not None: - for key in vardict.keys(): - value = str(vardict[key]) - strings.append('\t%s\n' % (key, value)) - strings.append('\n') - tasklines = create_task(task_dict) - for tl in tasklines: - strings.append('%s' % tl) if tl == '\n' else strings.append('\t%s' % tl) - strings.append('\n') - strings.append('\n') - - return strings - - -def create_task(task_dict): - ''' - create a Rocoto task given a dictionary containing task information - :param task_dict: task key-value parameters - :type task_dict: dict - :return: Rocoto task - :rtype: list - ''' - - # Grab task info from the task_dict - taskname = task_dict.get('taskname', 'demotask') - cycledef = task_dict.get('cycledef', 'democycle') - maxtries = task_dict.get('maxtries', 3) - final = task_dict.get('final', False) - command = task_dict.get('command', 'sleep 10') - jobname = task_dict.get('jobname', 'demojob') - account = task_dict.get('account', 'batch') - queue = task_dict.get('queue', 'debug') - partition = task_dict.get('partition', None) - walltime = task_dict.get('walltime', '00:01:00') - log = task_dict.get('log', 'demo.log') - native = task_dict.get('native', None) - memory = task_dict.get('memory', None) - resources = task_dict.get('resources', None) - envar = task_dict.get('envar', None) - dependency = task_dict.get('dependency', None) - - str_maxtries = str(maxtries) - str_final = ' final="true"' if final else '' - envar = envar if isinstance(envar, list) else [envar] - - strings = [] - - strings.append('\n' % \ - (taskname, cycledef, str_maxtries, str_final)) - strings.append('\n') - strings.append('\t%s\n' % command) - strings.append('\n') - strings.append('\t%s\n' % jobname) - strings.append('\t%s\n' % account) - strings.append('\t%s\n' % queue) - if partition is not None: - strings.append('\t%s\n' % partition) - if resources is not None: - strings.append('\t%s\n' % resources) - strings.append('\t%s\n' % walltime) - if memory is not None: - strings.append('\t%s\n' % memory) - if native is not None: - strings.append('\t%s\n' % native) - strings.append('\n') - strings.append('\t%s\n' % log) - strings.append('\n') - - if envar[0] is not None: - for e in envar: - strings.append('\t%s\n' % e) - strings.append('\n') - - if dependency is not None: - strings.append('\t\n') - for d in dependency: - strings.append('\t\t%s\n' % d) - strings.append('\t\n') - strings.append('\n') - - strings.append('\n') - - return strings - - -def add_dependency(dep_dict): - ''' - create a simple Rocoto dependency given a dictionary with dependency information - :param dep_dict: dependency key-value parameters - :type dep_dict: dict - :return: Rocoto simple dependency - :rtype: str - ''' - - dep_condition = dep_dict.get('condition', None) - dep_type = dep_dict.get('type', None) - - if dep_type in ['task', 'metatask']: - - string = add_task_tag(dep_dict) - - elif dep_type in ['data']: - - string = add_data_tag(dep_dict) - - elif dep_type in ['cycleexist']: - - string = add_cycle_tag(dep_dict) - - elif dep_type in ['streq', 'strneq']: - - string = add_streq_tag(dep_dict) - - else: - - msg = 'Unknown dependency type %s' % dep_dict['type'] - raise KeyError(msg) - - if dep_condition is not None: - string = '<%s>%s' % (dep_condition, string, dep_condition) - - return string - - -def add_task_tag(dep_dict): - ''' - create a simple task or metatask tag - :param dep_dict: dependency key-value parameters - :type dep_dict: dict - :return: Rocoto simple task or metatask dependency - :rtype: str - ''' - - dep_type = dep_dict.get('type', None) - dep_name = dep_dict.get('name', None) - dep_offset = dep_dict.get('offset', None) - - if dep_name is None: - msg = 'a %s name is necessary for %s dependency' % (dep_type, dep_type) - raise KeyError(msg) - - string = '<' - string += '%sdep %s="%s"' % (dep_type, dep_type, dep_name) - if dep_offset is not None: - string += ' cycle_offset="%s"' % dep_offset - string += '/>' - - return string - -def add_data_tag(dep_dict): - ''' - create a simple data tag - :param dep_dict: dependency key-value parameters - :type dep_dict: dict - :return: Rocoto simple task or metatask dependency - :rtype: str - ''' - - dep_type = dep_dict.get('type', None) - dep_data = dep_dict.get('data', None) - dep_offset = dep_dict.get('offset', None) - - if dep_data is None: - msg = 'a data value is necessary for %s dependency' % dep_type - raise KeyError(msg) - - if dep_offset is None: - if '@' in dep_data: - offset_string_b = '' - offset_string_e = '' - else: - offset_string_b = '' - offset_string_e = '' - else: - offset_string_b = '' % dep_offset - offset_string_e = '' - - string = '' - string += '%s%s%s' % (offset_string_b, dep_data, offset_string_e) - string += '' - - return string - -def add_cycle_tag(dep_dict): - ''' - create a simple cycle exist tag - :param dep_dict: dependency key-value parameters - :type dep_dict: dict - :return: Rocoto simple task or metatask dependency - :rtype: str - ''' - - dep_type = dep_dict.get('type', None) - dep_offset = dep_dict.get('offset', None) - - if dep_offset is None: - msg = 'an offset value is necessary for %s dependency' % dep_type - raise KeyError(msg) - - string = '' % dep_offset - - return string - -def add_streq_tag(dep_dict): - ''' - create a simple string comparison tag - :param dep_dict: dependency key-value parameters - :type dep_dict: dict - :return: Rocoto simple task or metatask dependency - :rtype: str - ''' - - dep_type = dep_dict.get('type', None) - dep_left = dep_dict.get('left', None) - dep_right = dep_dict.get('right', None) - - fail = False - msg = '' - if dep_left is None: - msg += 'a left value is necessary for %s dependency' % dep_type - fail = True - if dep_right is None: - if fail: - msg += '\n' - msg += 'a right value is necessary for %s dependency' % dep_type - fail = True - if fail: - raise KeyError(msg) - - string = '<%s>%s%s' % (dep_type, dep_left, dep_right, dep_type) - - return string - - -def _traverse(o, tree_types=(list, tuple)): - ''' - Traverse through a list of lists or tuples and yeild the value - Objective is to flatten a list of lists or tuples - :param o: list of lists or not - :type o: list, tuple, scalar - :param tree_types: trees to travers - :type tree_types: tuple - :return: value in the list or tuple - :rtype: scalar - ''' - - if isinstance(o, tree_types): - for value in o: - for subvalue in _traverse(value, tree_types): - yield subvalue - else: - yield o - - -def create_dependency(dep_condition=None, dep=None): - ''' - create a compound dependency given a list of dependendies, and compounding condition - the list of dependencies are created using add_dependency - :param dep_condition: dependency condition - :type dep_condition: boolean e.g. and, or, true, false - :param dep: dependency - :type dep: str or list - :return: Rocoto compound dependency - :rtype: list - ''' - - dep = dep if isinstance(dep, list) else [dep] - - strings = [] - - if dep_condition is not None: - strings.append('<%s>' % dep_condition) - - if dep[0] is not None: - for d in dep: - if dep_condition is None: - strings.append('%s' % d) - else: - for e in _traverse(d): - strings.append('\t%s' % e) - - if dep_condition is not None: - strings.append('' % dep_condition) - - return strings - - -def create_envar(name=None,value=None): - ''' - create an Rocoto environment variable given name and value - returns the environment variable as a string - :param name: name of the environment variable - :type name: str - :param value: value of the environment variable - :type value: str or float or int or unicode - :return: Rocoto environment variable key-value pair - :rtype: str - ''' - - string = '' - string += '' - string += '%s' % name - string += '%s' % str(value) - string += '' - - return string diff --git a/ush/rocoto/rocoto_viewer.py b/ush/rocoto/rocoto_viewer.py deleted file mode 100755 index 8dfad7286e..0000000000 --- a/ush/rocoto/rocoto_viewer.py +++ /dev/null @@ -1,2384 +0,0 @@ -#!/usr/bin/env python -# -##@namespace rocoto_viewer -# @brief A Curses based terminal viewer to interact and display the status of a Rocoto Workflow in real time. -# -# @anchor rocoto_viewer -## This Python script allows users to see and interact with a running Rocoto Workflow in real time. -# \image html pythonCurses.jpeg "Rocoto Viewer for Displaying Real-time Status of Workflow" -# -# To launch this viewer simply give it the database and the XML files being used by the \b Rocoto system for your experiment: -# -# rocoto_viewer.py -w my_gfs-workflow.xml -d my_database.db -# -# The script is located in the directory para/exp/rocoto/rocotoviewers/rocotoviewer_curses/rocoto_viewer.py -# The view will continuously update every four minutes and reflect the current status of your workflow. You may use your mouse or arrow keys to select a particular task and view its status details by pressing the key \p c as indicated as \b \ (which runs \b rocotocheck) or perform a \b rocotorewind by pressing \b \ to restart the workflow at that point. Running \b rocotorewind causes the state information of that task to be cleared from the database and resubmits the job to the scheduler. -# -# Tasks marked with the \b \< symbol are \b metatasks and can be expanded by highlight that task with the mouse, and then clicking on the \b \< symbol which then changes to \b \> . You can then click on the \b \> symbol to collapse it again. Alternatively, you can select the 'x' to expand and collapse metatasks when selected. -# -##@cond ROCOTO_VIEWER_CURSES - -from __future__ import division - -import curses - -import os, sys, getpass, getopt, signal, tempfile -from os.path import basename -import subprocess -from math import * - -from __builtin__ import any as b_any -from os.path import realpath, normpath, dirname, getsize -from io import StringIO -from itertools import groupby -from time import time -from multiprocessing import Process, Queue -import time as std_time -from datetime import datetime, timedelta -import uuid -import shutil - -import sqlite3,datetime,collections -import xml.etree.ElementTree as ET -import cPickle - -try: - from dateutil.relativedelta import relativedelta -except ImportError: - #print 'dateutil which uses relativedelta to increment monthly (used by UGCS) is not supported with this version of python. Use Anaconda the native version in /user/bin' - #sys.exit(1) - pass - -# Global Variables -database_file_agmented = None -use_performance_metrics = False -default_column_length = 125 -stat_read_time_delay = 3*60 -temp_workflow_file = '' -header_string = '' -format_string = "jobid slots submit_time start_time cpu_used run_time delimiter=';'" - -ccs_html=''' - - - - - - -''' -bottom_message_scroll = 'heck oot ewind un (->) Next Cycle (<-) Previous Cycle p own elp uit' -bottom_message = 'heck oot ewind un (->) Next Cycle (<-) Previous Cycle elp uit' - -#Global Variables -#================ -list_tasks = False -html_output = False -html_output_file = None -rzdm_path = '' -only_check_point = False -save_checkfile_path = None -use_multiprocessing = True -get_user = getpass.getuser() - -screen_resized = False -debug = None - -mlines = 0 -mcols = 0 - -def sigwinch_handler(signum, frame): - global screen_resized - global mlines - global mcols - term_size = subprocess.Popen(['stty', 'size'], stdout=subprocess.PIPE) - try: - get_term_size, err = term_size.communicate() - except: - return - mlines,mcols = map(int,get_term_size.split()) - screen_resized = True - -def usage(message=None): - curses.endwin() - print>>sys.stderr, ''' -Usage: rocoto_status_viewer.py -w workflow.xml -d database.db [--listtasks]\n [--html=filename.html]\n [--perfmetrics={True,False}] - -Mandatory arguments: - -w workflow.xml - -d database.db -Optional arguments: - --listtasks --- print out a list of all tasks - --html=filename.html --- creates an HTML document of status - --perfmetrics=True --- turn on/off extra columns for performance metrics - --help --- print this usage message''' - - if message is not None: - print>>sys.stderr,'\n'+str(message).rstrip()+'\n' - sys.exit(-1) - -def augment_SQLite3(filename): - - connection=sqlite3.connect(filename) - c=connection.cursor() - #qinfo=c.execute("DROP TABLE IF EXISTS jobs_augment;") - qinfo=c.execute("PRAGMA table_info(jobs_augment)").fetchall() - if any('qtime' in element for element in qinfo): - c.close() - return 'is_already_augmented' - else: - sql_create_augment_table = "CREATE TABLE jobs_augment AS SELECT * FROM jobs;" - q=c.execute(sql_create_augment_table) - q=c.execute("alter table jobs_augment add column qtime integer;") - q=c.execute("alter table jobs_augment add column cputime integer;") - q=c.execute("alter table jobs_augment add column runtime integer;") - q=c.execute("alter table jobs_augment add column slots integer;") - connection.commit() - - c.close() - database_file = filename - return 'now_augmented' - -def isSQLite3(filename): - from produtil.fileop import check_file - from produtil.fileop import deliver_file - if not check_file(filename): - return False - if getsize(filename) < 100: - return False - with open(filename, 'rb') as fd: - header = fd.read(100) - fd.close() - if not header[:16] == 'SQLite format 3\x00': - return False - else: - return True - -def isRocotoWorkflow(filename): - from produtil.fileop import check_file - if not check_file(filename): - return False - with open(filename, 'r') as input: - for line in input: - if 'DOCTYPE workflow' in line: - input.close() - return True - return False - - -def load_produtil_pythonpath(): - - try: - import produtil.cluster - return True - except ImportError: - pass - - PRODUTIL = collections.defaultdict(list) - PRODUTIL['hera'] = '/scratch1/NCEPDEV/global/glopara/svn/nceplibs/produtil/trunk/ush' - PRODUTIL['luna'] = '/gpfs/hps3/emc/global/noscrub/emc.glopara/svn/nceplibs/produtil/trunk/ush' - PRODUTIL['surge'] = '/gpfs/hps3/emc/global/noscrub/emc.glopara/svn/nceplibs/produtil/trunk/ush' - PRODUTIL['mars'] = '/gpfs/dell2/emc/modeling/noscrub/emc.glopara/svn/nceplibs/produtil/trunk/ush' - PRODUTIL['venus'] = '/gpfs/dell2/emc/modeling/noscrub/emc.glopara/svn/nceplibs/produtil/trunk/ush' - try_clusters = ('hera','luna','surge','mars','venus') - - for cluster in try_clusters: - sys.path.append(PRODUTIL[cluster]) - try: - import produtil.cluster - return True - except ImportError: - pass - return False - -def get_arguments(): - from produtil.fileop import check_file - short_opts = "w:d:f:" - long_opts = ["checkfile=","workfolw=","database=","html=","listtasks","onlycheckpoint","help","perfmetrics="] - try: - opts, args = getopt.getopt(sys.argv[1:], short_opts, long_opts) - except getopt.GetoptError as err: - print str(err) - print - usage('SCRIPT IS ABORTING DUE TO UNRECOGNIZED ARGUMENT') - - global save_checkfile_path - global use_performance_metrics - workflow_file = None - database_file = None - perfmetrics_on = None - for k, v in opts: - if k in ('-w', '--workflow'): - workflow_file = v - elif k in ('-d','--database'): - database_file = v - elif k in ('-f','--checkfile'): - save_checkfile_path = v - elif k in ('--perfmetrics'): - perfmetrics_on = v - elif k in ('--listtasks'): - global list_tasks - list_tasks = True - elif k in ('--onlycheckpoint'): - global only_check_point - only_check_point = True - elif k in ('--html'): - global html_output - global rzdm_path - global send_html_to_rzdm - send_html_to_rzdm = True - rzdm_path = v - html_output = True - elif k in ('--help'): - usage('') - else: - pass - #usage('OPTION NOT REGOGNIZED') - - if perfmetrics_on is None: - use_performance_metrics = False - elif perfmetrics_on.lower() == 'true': - use_performance_metrics = True - elif perfmetrics_on.lower() == 'false': - use_performance_metrics = False - elif perfmetrics_on is not None: - usage('perfmetrics must be either set to true or false (e.g. --perfmetrics=True') - - send_html_to_rzdm = False - if len(rzdm_path) != 0: - if ':' not in rzdm_path or '@' not in rzdm_path: - print 'No user name or path found for sending html directory to server, no files will be sent to rzdm' - print 'Creating html folder in: %s'%rzdm_path - else: - send_html_to_rzdm = True - - if list_tasks and workflow_file is None: - usage('In order to list tasks you must supply the XML worflow-file') - - if only_check_point and (workflow_file is None or database_file is None or save_checkfile_path is None): - usage('To use the check point output you must specify the workflow, data base, and the specific name of the checkpoint file') - - if (not list_tasks) and (workflow_file is None or database_file is None): - usage('Booth database-file and workflow-file must be specified') - - if (not list_tasks) and (workflow_file is not None and database_file is not None): - #debug.write('database_file_agmented: '+database_file_agmented+'\n') - if not isSQLite3( database_file ): - usage('%s is not SQLite3 database file'%database_file) - if not isRocotoWorkflow( workflow_file ): - usage('%s is not an Rocoto XML file'%workflow_file) - - #global use_multiprocessing - #if getsize(database_file) < 104857600: - # use_multiprocessing = True - #else: - # use_multiprocessing = True - - return (workflow_file,database_file ) - - -def get_entity_values( workflow_file ): - - entity_values = collections.defaultdict(list) - with open( workflow_file, 'rw' ) as f: - for line in f: - split_line = line.split() - if ']>' in line: - break - if 'ENTITY' in line: - if 'SYSTEM' in line: - value = split_line[3] - else: - value = split_line[2] - entity_values[ split_line[1] ] = value[:-1].replace('"','') - return entity_values - -def timedelta_total_seconds(timedelta): - return ( - timedelta.microseconds + 0.0 + - (timedelta.seconds + timedelta.days * 24 * 3600) * 10 ** 6) / 10 ** 6 - -def get_aug_perf_values( username ): - from produtil.run import run,runstr, batchexe - global html_ouput - global format_keys - cmd = batchexe('which') ['bjobs'] - try: - which_bjobs = runstr(cmd).strip() - except Exception,e: - return None - bjobs = collections.defaultdict(dict) - aug_perf = collections.defaultdict(dict) - cmd = batchexe( which_bjobs )['-a','-o',format_string,'-u',username] - bjobs_line = runstr(cmd) - if 'No job found' in bjobs_line: - return None - bjobs_lines = bjobs_line.split('\n') - for l,line in enumerate(bjobs_lines): - split_line = line.split(';') - if l == 0: - format_keys = split_line - continue - for i, value in enumerate(split_line): - if i == 0: - key = value - else: - if format_keys[i] in ('RUN_TIME','CPU_USED'): - value_list = value.split() - if len(value_list) > 1: - value = value_list[0] - bjobs[key][format_keys[i]] = value - sub_time_string = '' - year = str(datetime.datetime.now().year)+' ' - sub_time = None - bstart_time = None - for jobid,keys in bjobs.iteritems(): - #debug.write(jobid+'\n') - for key in keys: - #debug.write(' '+key+":"+bjobs[jobid][key]+'\n') - try: - int_key = int(bjobs[jobid][key].strip()) - str_key = str(int_key) - except: - str_key = bjobs[jobid][key].strip() - - if key == 'SUBMIT_TIME': - sub_time_string = str_key - try: - sub_time = datetime.datetime.strptime( year+sub_time_string, '%Y %b %d %H:%M' ) - except: - sub_time = None - continue - elif key == 'START_TIME': - bstart_time_string = str_key - try: - bstart_time = datetime.datetime.strptime( year+bstart_time_string, '%Y %b %d %H:%M' ) - except: - bstart_time = None - continue - elif key == 'RUN_TIME': - aug_perf[jobid]['runtime'] = str_key - elif key == 'CPU_USED': - aug_perf[jobid]['cputime'] = str_key - elif key == 'SLOTS': - aug_perf[jobid]['slots'] = str_key - - if bstart_time_string == sub_time_string: - aug_perf[jobid]['qtime'] = '0' - elif sub_time is not None and bstart_time is None : - try: - aug_perf[jobid]['qtime'] = str(int(( datetime.datetime.now() - sub_time ).total_seconds())) - except AttributeError: - aug_perf[jobid]['qtime'] = str(int(timedelta_total_seconds( datetime.datetime.now() - sub_time ))) - - elif sub_time is not None and bstart_time is not None: - try: - aug_perf[jobid]['qtime'] = str(int((bstart_time - sub_time).total_seconds())) - except AttributeError: - aug_perf[jobid]['qtime'] = str(int(timedelta_total_seconds(bstart_time - sub_time))) - else: - aug_perf[jobid]['qtime'] = '-' - - return aug_perf - -def help_screen( screen ): - - max_row = 25 - box_cols = 60 - box = curses.newwin( max_row, box_cols , 5, 32 ) - box.box() - box.border(0) - box.addstr( 0 , 23, ' when done', curses.A_BOLD ) - helpstr= [ 'heck : run rocotocheck on selected task(s)', - 'oot : run rocotoboot on selected task(s)', - 'ewind : run rocotorewind on selected task(s)', - 'un : run rocotorun on selected task(s)', - ' ', - '(->) Next Cycle own (or) Page-dwn to scroll', - '(<-) Previous Cycle own (or) Page-up to scroll ', - ' ', - ' + Arrow Up to selected multiple tasks', - ' + Arrow Down for using with rocoto utils', - 'Double-Click or to expand/collapse metatasks', - ' ', - ' Selects a task for list or opens meta-task list', - ' ', - ' When a meta-task list is open for selection:', - ' Double-Click (or) to select the begining', - ' of a range for selection and repeate to complete', - ' the desired selected list.', - '', - 'oads and renews status data (no rocotorun)', - 'inds the last cycle with a running task', - 'nloads and clears all previously seleted tasks', - 'makes a symlink of log file of highlited task'] - - for i in range(0,len(helpstr)): - box.addstr( 1+i ,2, helpstr[i] ) - x = screen.getch() - while x != ord('q'): - x = screen.getch() - box.refresh() - -def list_selector( screen, selected_strings, strings ): - - global screen_resized - global mlines - global mcols - global highlightText - global highlightSelectedText - global normalText - - def define_box(): - - if len( strings ) < mlines: - max_row = len( strings ) - else: - max_row = mlines - 12 - max_mcols = max(18,len(max( strings, key=len ))) - if max_mcols + 8 < mcols: - box_cols = max_mcols + 8 - else: - box_cols = mcols - 3 - box = curses.newwin( max_row + 6, box_cols , 4, 5 ) - box.box() - box.border(0) - - return box, max_row, box_cols - - strings_selected = selected_strings - string_ctr_selected = '' - - box, max_row, box_cols = define_box() - row_num = len( strings ) - pages = int( ceil( row_num / max_row ) ) - position = 1 - page = 1 - for i in range( 1, max_row+1 ): - if row_num == 0: - box.addstr( 1, 1, "There aren't strings", highlightText ) - else: - print_string = ' '+strings[ i - 1 ]+' ' - if (i == position): - box.addstr( i+1, 2, print_string, highlightText ) - else: - box.addstr( i+1, 2, print_string, normalText ) - if i == row_num: - break - - screen_resized = False - - range_selected = False - string_ctr_selected_prior = '' - - x = screen.getch() - while x != ord('q'): - - if screen_resized: - - screen_resized = False - curses.resizeterm(mlines, mcols) - screen.refresh() - box.clear() - box.erase() - - box, max_row, box_cols = define_box() - - box.border( 0 ) - box.refresh() - - if x in ( curses.KEY_SF, curses.KEY_DOWN): - if x == curses.KEY_SF: - string_selected = strings[ position - 1 ] - if string_selected in strings_selected: - string_ctr_selected = '' - try: - if len(strings_selected) > 0: - strings_selected.remove( string_selected ) - except ValueError: - pass - else: - strings_selected.append( string_selected ) - if page == 1: - if position < i: - position = position + 1 - else: - if pages > 1: - page = page + 1 - position = 1 + ( max_row * ( page - 1 ) ) - elif page == pages: - if position < row_num: - position = position + 1 - else: - if position < max_row + ( max_row * ( page - 1 ) ): - position = position + 1 - else: - box.erase() - box.border(0) - page = page + 1 - position = 1 + ( max_row * ( page - 1 ) ) - if x in ( curses.KEY_SR, curses.KEY_UP): - if x == curses.KEY_SR: - string_selected = strings[ position - 1 ] - if string_selected in strings_selected: - try: - if len(strings_selected) > 0: - strings_selected.remove( string_selected ) - except ValueError: - pass - else: - strings_selected.append( string_selected ) - if page == 1: - if position > 1: - position = position - 1 - else: - if position > ( 1 + ( max_row * ( page - 1 ) ) ): - position = position - 1 - else: - box.erase() - box.border(0) - page = page - 1 - position = max_row + ( max_row * ( page - 1 ) ) - - if x == curses.KEY_PPAGE: - box.erase() - box.border( 0 ) - if page > 1: - page = page - 1 - position = 1 + ( max_row * ( page - 1 ) ) - - if x == curses.KEY_NPAGE: - box.erase() - box.border( 0 ) - #screen.refresh() - if page < pages: - page = page + 1 - position = ( 1 + ( max_row * ( page - 1 ) ) ) - - if x in ( curses.KEY_MOUSE, ord('s') ): - mouse_id, mouse_x, mouse_y, mouse_z, button_state = (0,0,0,0,0) - index_prior_selected = 0 - if x == curses.KEY_MOUSE: - mouse_id, mouse_x, mouse_y, mouse_z, button_state = curses.getmouse() - box.erase() - box.border( 0 ) - pos = mouse_y-5 - if page == 1: - position = pos - else: - position = max_row*(page-1)+pos - - if x == ord('s') or (button_state & curses.BUTTON1_DOUBLE_CLICKED): - string_ctr_selected = strings[ position - 1 ] - if range_selected: - range_selected = False - string_ctr_selected = '' - if string_ctr_selected != string_ctr_selected_prior: - index_prior_selected = strings.index(string_ctr_selected_prior) - if position < index_prior_selected: - first = position-1 - last = index_prior_selected+1 - else: - first = index_prior_selected - last = position - for i in range( first, last ): - if strings[i] in strings_selected: - strings_selected.remove(strings[i]) - else: - strings_selected.append( strings[i] ) - string_ctr_selected_prior = '' - else: - range_selected = True - string_ctr_selected_prior = string_ctr_selected - - if x in (curses.KEY_ENTER, 10, 13) and row_num != 0: - box.border( 0 ) - string_selected = strings[ position - 1 ] - if string_ctr_selected_prior == string_selected: - string_ctr_selected_prior = '' - range_selected = False - if string_selected in strings_selected: - try: - if len(strings_selected) > 0: - strings_selected.remove( string_selected ) - except ValueError: - pass - else: - strings_selected.append( string_selected ) - - if x == ord('U'): - for each_sting in strings: - if each_sting in strings_selected: - if len(strings_selected) > 0: - strings_selected.remove(each_sting) - - for i in range( 1 + ( max_row * ( page - 1 ) ), max_row + 1 + ( max_row * ( page - 1 ) ) ): - if row_num == 0: - box.addstr( 1, 1, "There aren't strings", highlightText ) - else: - if strings[ i - 1 ] == string_ctr_selected_prior: - string_print = '* '+strings[ i - 1 ]+' ' - else: - string_print = ' '+strings[ i - 1 ]+' ' - - start_pos = i - ( max_row * ( page - 1 ) ) + 1 - if ( i + ( max_row * ( page - 1 ) ) == position + ( max_row * ( page - 1 ) ) ): - box.addstr( start_pos, 2, string_print, highlightText ) - else: - box.addstr( start_pos, 2, string_print, normalText ) - if strings[ i - 1 ] in strings_selected: - box.addstr( start_pos, 2, string_print[:1] ) - box.addstr( start_pos, 4, string_print[2:-1], highlightSelectedText | curses.A_DIM ) - if i == row_num: - break - - box.addstr( max_row+3 , 2, 'Select with or' ) - box.addstr( max_row+4 , 2, ' + ' ) - box.addstr( 0 , 7, ' when done', curses.A_BOLD ) - box.refresh() - x = screen.getch() - - return strings_selected - - -def get_rocoto_check(params, queue_check): - from produtil.run import run,runstr, batchexe, exe - workflow_file, database_file, task, cycle, process = params - cmd=batchexe('rocotocheck')['-v',10,'-w',workflow_file,'-d',database_file,'-c',cycle,'-t',task] - check=runstr(cmd) - if check is None: - curses.endwin() - print 'rcotocheck falied: %d'%stat - sys.exit(-1) - queue_check.put(check) - -def rocoto_boot(params): - from produtil.run import run,runstr, batchexe, exe - workflow_file, database_file, cycle, metatask_list, task_list = params - run( exe('yes') | exe('head')['-1'] > '.yes.txt') - if len(task_list) == 0 and len(metatask_list) != 0: - cmd=batchexe('rocotoboot')['--workflow', workflow_file,'--database',database_file,'--cycles',cycle,'--metatasks', metatask_list] < '.yes.txt' - elif len(task_list) != 0 and len(metatask_list) == 0: - cmd=batchexe('rocotoboot')['--workflow', workflow_file,'--database',database_file,'--cycles',cycle,'--tasks', task_list ] < '.yes.txt' - elif len(task_list) != 0 and len(metatask_list) != 0: - cmd=batchexe('rocotoboot')['--workflow', workflow_file,'--database',database_file,'--cycles',cycle,'--tasks', task_list, '--metatasks', metatask_list ] < '.yes.txt' - else: - return 'Warning: No metatasks or tasks where selected when rocotboot was called' - stat=runstr(cmd) - if stat is None: - display_results( 'rcotoboot falied!!','') - return stat - -def rocoto_rewind(params): - from produtil.run import run,runstr, batchexe - workflow_file, database_file, cycle, process = params - cmd=batchexe('rocotorewind')['-w',workflow_file,'-d',database_file,'-c',cycle,process] - stat=runstr(cmd) - if stat is None: - display_results('rcotorewind falied!!','') - return stat - -def rocoto_run(params): - from produtil.run import run,runstr, batchexe - workflow_file, database_file = params - cmd=batchexe('rocotorun')['-w',workflow_file,'-d',database_file] - stat=runstr(cmd ) - stat = '' - if stat is None: - curses.endwin() - print 'rcotorun falied: %d'%stat - sys.exit(-1) - return stat - -def get_tasklist(workflow_file): - import produtil.run, produtil.numerics - tasks_ordered = [] - metatask_list = collections.defaultdict(list) - tree = ET.parse(workflow_file) - root = tree.getroot() - cycledef_group_cycles = collections.defaultdict(list) - if list_tasks: - curses.endwin() - print - cycle_noname = 'default_cycle' - for child in root: - if child.tag == 'cycledef': - if len(child.attrib) != 0: - cycle_def_name = child.attrib['group'] - else: - cycle_def_name = cycle_noname - cycle_string = child.text.split() - - ucgs_is_cron = None - if PACKAGE.lower() == 'ugcs': - start_cycle = produtil.numerics.to_datetime ( entity_values['SDATE'] ) - end_cycle = produtil.numerics.to_datetime ( entity_values['EDATE'] ) - #inc_cycle = produtil.numerics.to_timedelta( entity_values['INC_MONTHS'] ) - #NOTE: this is for the special case when cycle for every month - inc_cycle = int(entity_values['INC_MONTHS']) - if inc_cycle == 0: - inc_cycle = produtil.numerics.to_timedelta( cycle_string[2] ) - ucgs_is_cron = False - else: - ucgs_is_cron = True - only_once_ugcs = True - else: - start_cycle = produtil.numerics.to_datetime ( cycle_string[0] ) - end_cycle = produtil.numerics.to_datetime ( cycle_string[1] ) - inc_cycle = produtil.numerics.to_timedelta( cycle_string[2] ) - - while start_cycle <= end_cycle: - cycledef_group_cycles[cycle_def_name].append(start_cycle.strftime("%Y%m%d%H%M")) - if PACKAGE.lower() == 'ugcs' and ucgs_is_cron: - try: - start_cycle = start_cycle + relativedelta(months=+inc_cycle) - except AttributeError: - curses.endwin() - print;print - print 'dateutil which uses relativedelta to increment monthly (used by UGCS) is not supported with this version of python.\nUse Anaconda the native version in /user/bin' - sys.exit(-1) - else: - start_cycle = start_cycle + inc_cycle - #if list_tasks: - #print 'cycledef=%s number of cycles %s inc: %s'%(cycle_def_name, len(cycledef_group_cycles[cycle_def_name]),inc_cycle) - #print 'contails cycles',cycledef_group_cycles[cycle_def_name] - if child.tag == 'task': - task_name = child.attrib['name'] - log_file = child.find('join').find('cyclestr').text.replace( '@Y@m@d@H','CYCLE' ) - #if len(log_file) != 0: - # print 'LOG: %s %s'%( task_name, log_file ) - if 'cycledefs' in child.attrib: - task_cycledefs = child.attrib['cycledefs'] - #if list_tasks: - # print 'task_cycledefs:',task_cycledefs - else: - task_cycledefs = cycle_noname - if list_tasks: - print task_name,task_cycledefs - #dependancies = child.getiterator('dependency') - #for dependency in dependancies: - # for them in dependency.getchildren(): - # print them.attrib - tasks_ordered.append((task_name,task_cycledefs,log_file)) - elif child.tag == 'metatask': - all_metatasks_iterator = child.getiterator('metatask') - all_vars = dict() ; all_tasks = [] - for i,metatasks in enumerate(all_metatasks_iterator): - metatask_name = 'NO_NAME' - try: - metatask_name = metatasks.attrib['name'] - except: - pass - if list_tasks: - print ' '*i+'metatask:',metatask_name - all_vars_list = metatasks.findall('var') - all_tasks_list = metatasks.findall('task') - for var in all_vars_list: - var_list_values = var.text.split() - #print ' '+' '*i+'(%d) var name:'%i,var.attrib['name'],var_list_values - all_vars[var.attrib['name']] = var_list_values - for task in all_tasks_list: - task_name = task.attrib['name'] - task_log = task.find('join').find('cyclestr').text.replace( '@Y@m@d@H','CYCLE' ) - #if len(task_log) != 0: - # print 'LOG: %s %s'%( task_name, task_log) - #print ' '+' '*i+'(%d) task name:'%i,task.attrib['name'] - if 'cycledefs' in task.attrib: - task_cycledefs = task.attrib['cycledefs'] - #if list_tasks: - # print 'task_cycledefs (meta):',task_cycledefs - else: - task_cycledefs = cycle_noname - all_tasks.append((task_name,task_cycledefs,task_log)) - add_task = [] - for task_name in all_tasks: - first_task_resolved = False - first_task_resolved_name = '' - add_task[:] = [] - add_task.append(task_name) - for name,vars in all_vars.iteritems(): - replace_var = '#'+name+'#' - #print 'TASK_NAME: %s | %s'%(task_name,replace_var) - for each_task_name in add_task: - #for each_task_name in all_tasks: - if replace_var in each_task_name[0]: - for var in vars: - new_task_name = each_task_name[0].replace(replace_var, var) - new_task_log = each_task_name[2].replace(replace_var, var) - add_task.append((new_task_name,each_task_name[1],new_task_log)) - for task in add_task: - if '#' not in task[0]: - if task[0] not in [ j[0] for j in tasks_ordered]: - tasks_ordered.append(task) - if not first_task_resolved: - first_task_resolved = True - first_task_resolved_name = task[0] - if metatask_name == 'NO_NAME': - metatask_list[task[0]].append(task[0]) - else: - metatask_list[task[0]].append(metatask_name) - metatask_list[task[0]].append(task[0]) - else: - metatask_list[first_task_resolved_name].append(task[0]) - if list_tasks: - print ' '+' '*i+task[0],task[1],'LOG:',task[2] - - # Default expantion of metatasks True = collapsed - #for metatask,metatasks in metatask_list.iteritems(): - # metatask_list[metatask].append(True) - - return tasks_ordered,metatask_list,cycledef_group_cycles - -def get_rocoto_stat(params, queue_stat): - workflow_file, database_file, tasks_ordered, metatask_list, cycledef_group_cycles = params - - global temp_workflow_file - global database_file_agmented - if len(tasks_ordered) == 0 or len(metatask_list) == 0 or len(cycledef_group_cycles) == 0 or list_tasks: - tasks_ordered, metatask_list,cycledef_group_cycles = get_tasklist(temp_workflow_file) - - if use_performance_metrics: - aug_perf = get_aug_perf_values(get_user) - else: - aug_perf = None - - info=collections.defaultdict(list) - cycles=set() - - connection=sqlite3.connect(database_file) - c=connection.cursor() - - if use_performance_metrics: - q=c.execute("DROP TABLE IF EXISTS jobs_augment_tmp;") - sql_create_augment_table = "CREATE TABLE jobs_augment_tmp AS SELECT * FROM jobs;" - q=c.execute(sql_create_augment_table) - q=c.execute("alter table jobs_augment_tmp add column qtime integer;") - q=c.execute("alter table jobs_augment_tmp add column cputime integer;") - q=c.execute("alter table jobs_augment_tmp add column runtime integer;") - q=c.execute("alter table jobs_augment_tmp add column slots integer;") - - sq_command = '' - column_updates = ('qtime','cputime','runtime','slots') - sqlite_merge_command = "%s=(SELECT jobs_augment.%s FROM jobs_augment WHERE jobs_augment.id=jobs_augment_tmp.id)" - for column in column_updates: - sq_command += sqlite_merge_command%(column,column)+',' - sq_command=';'.join(sq_command.rsplit(',', 1)) - sq_command = 'UPDATE jobs_augment_tmp SET '+sq_command - q=c.execute(sq_command) - - sq_command = 'UPDATE jobs_augment_tmp SET ' - sqlite_update_command = "%s = '%s' WHERE jobs_augment_tmp.jobid = %s" - #debug.write('WRITING TO DATABASE'+'\n') - for perf_jobid,perf_values in aug_perf.iteritems(): - for name,each_value in perf_values.iteritems(): - q=c.execute(sq_command+sqlite_update_command%(name,each_value,perf_jobid)) - #debug.write('SQL: '+sq_command+sqlite_update_command%(name,each_value,perf_jobid+'\n')) - - qinfo=c.execute("DROP TABLE IF EXISTS jobs_augment;") - qinfo=c.execute("ALTER TABLE jobs_augment_tmp RENAME TO jobs_augment;") - - cycledifitions = [] - q=c.execute('SELECT id, groupname, cycledef FROM cycledef') - for row in q: - (theid, groupname, cycledef) = row - cycledifitions.append( (theid, groupname, cycledef) ) - - cycle_done_stat = dict() - q=c.execute('SELECT id,cycle,done FROM cycles') - for row in q: - (theid,cycle,done)=row - cycles.add(cycle) - cycle_done_stat[cycle]=done - - if use_performance_metrics: - q=c.execute('SELECT id,jobid,taskname,cycle,state,exit_status,duration,tries,qtime,cputime,runtime,slots FROM jobs_augment') - else: - q=c.execute('SELECT id,jobid,taskname,cycle,state,exit_status,duration,tries FROM jobs') - - q_get = [] - entered_jobids = [] - last_task_index = 0 - for row in q: - row = tuple('-' if x is None else x for x in row) - if use_performance_metrics: - (theid, jobid,taskname,cycle,state,exit_status,duration,tries,qtime,cputime,runtime,slots)=row - else: - (theid, jobid,taskname,cycle,state,exit_status,duration,tries,)=row - if jobid in entered_jobids: - continue - else: - if taskname in tasks_ordered: - task_index = [x[0] for x in task_ordered].index(taskname) - #task_index = tasks_ordered.index(taskname) - last_task_index = task_index - else: - task_index = last_task_index - - if use_performance_metrics: - q_get.append( (theid,jobid,task_index,taskname,cycle,state,exit_status,duration,tries,qtime,cputime,runtime,slots) ) - else: - q_get.append( (theid,jobid,task_index,taskname,cycle,state,exit_status,duration,tries) ) - entered_jobids.append(jobid) - - q_get.sort( key=lambda x: x[2] ) - - connection.commit() - c.close() - - for row in q_get: - if use_performance_metrics: - (theid,jobid,task_order,taskname,cycle,state,exit_status,duration,tries,qtime,cputime,runtime,slots)=row - else: - (theid,jobid,task_order,taskname,cycle,state,exit_status,duration,tries)=row - if jobid != '-': - if use_performance_metrics: - line = '%s %s %s %s %s %s %s %s %s %s %s'%(datetime.datetime.fromtimestamp(cycle).strftime('%Y%m%d%H%M'),taskname,str(jobid),str(state),str(exit_status),str(tries),str(duration).split('.')[0],str(slots),str(qtime),str(cputime).split('.')[0],str(runtime)) - else: - line = '%s %s %s %s %s %s %s'%(datetime.datetime.fromtimestamp(cycle).strftime('%Y%m%d%H%M'),taskname,str(jobid),str(state),str(exit_status),str(tries),str(duration).split('.')[0]) - #debug.write('LINE: '+line+'\n') - info[cycle].append(line) - - for every_cycle in cycles: - if len(info[every_cycle]) == 0: - info[every_cycle].append('place holder') - - new_info=collections.defaultdict(list) - job_ids = [] - job_id = '' - for each_cycle,lines_in_cycle in info.iteritems(): - for task in tasks_ordered: - skip_task = False - for each_line in lines_in_cycle: - if task[0] == each_line.split()[1]: - #if task[0]+' ' in each_line: - job_id = each_line.split()[2] - if job_id in job_ids: - break - cycle_string = datetime.datetime.fromtimestamp(each_cycle).strftime('%Y%m%d%H%M') - #print 'TESTB:', len(task), task[0],task[1] - cycledefs = task[1].split(',') - if len(cycledefs) > 1: - #print 'Checking if %s for %s is in a gfs cycle:'%(task[0],cycle_string) - for each_cycledef in cycledefs: - #print 'group:', each_cycledef, cycledef_group_cycles[each_cycledef] - if cycle_string in cycledef_group_cycles[each_cycledef]: - #print 'Found:', task[0],'with cycle',cycle_string - new_info[each_cycle].append(each_line) - job_ids.append(job_id) - skip_task = True - break - elif cycle_string in cycledef_group_cycles[task[1]]: - new_info[each_cycle].append(each_line) - job_ids.append(job_id) - skip_task = True - break - if skip_task: - continue - line = datetime.datetime.fromtimestamp(each_cycle).strftime('%Y%m%d%H%M')+' '*7+task[0]+' - - - - -' - cycle_string = datetime.datetime.fromtimestamp(each_cycle).strftime('%Y%m%d%H%M') - cycledefs = task[1].split(',') - if len(cycledefs) > 1: - for each_cycledef in cycledefs: - if cycle_string in cycledef_group_cycles[each_cycledef]: - new_info[each_cycle].append(line) - skip_task = True - break - elif cycle_string in cycledef_group_cycles[task[1]]: - new_info[each_cycle].append(line) - skip_task = True - if skip_task: - continue - - rocoto_stat = [] - for cycle in sorted(cycles): - if len(new_info[cycle]) != 0: - rocoto_stat.append(new_info[cycle]) - - if save_checkfile_path is not None: - stat_update_time = str(datetime.datetime.now()).rsplit(':',1)[0] - with open(save_checkfile_path, 'w') as savefile: - rocoto_data_and_time = (rocoto_stat, tasks_ordered, metatask_list,cycledef_group_cycles, stat_update_time) - cPickle.dump(rocoto_data_and_time, savefile) - if only_check_point: - sys.exit(0) - - if use_multiprocessing: - queue_stat.put((rocoto_stat, tasks_ordered, metatask_list, cycledef_group_cycles)) - else: - return (rocoto_stat, tasks_ordered, metatask_list, cycledef_group_cycles) - - -def display_results(results,screen,params): - from produtil.fileop import check_file - results_lines = results.split('\n') - num_lines,num_columns = (len(results_lines)+3,len(max(results_lines, key=len))+1) - pad_pos = 0 - force_load_stat = False - global mlines - global mcols - while True: - screen.clear() - screen.refresh() - results_pad = curses.newpad(num_lines,num_columns) - for results_line in results_lines: - results_pad.addstr(results_line+'\n') - results_pad.refresh( pad_pos, 0, 0,0, mlines-3,mcols-1) - extra_1 = extra_2 = '' - if pad_pos < num_lines-mlines-2 or pad_pos > 0: - extra_1 = '/ Scroll' - if len(params) != 0: - extra_2 = 'ave results to a file' - screen.addstr(mlines-1,0,' Return %s %s'%(extra_1,extra_2),curses.A_BOLD) - event = screen.getch() - if event == curses.KEY_RESIZE: - screen.refresh() - elif event in ( curses.KEY_PPAGE, ord('u') ): - if pad_pos < num_lines-mlines-2: - pad_pos += 1 - elif event in ( curses.KEY_NPAGE, ord('d') ): - if pad_pos != 0: - pad_pos -= 1 - elif event == curses.KEY_ENTER or event == 10: - screen.clear() - break - elif event == ord('s'): - strg = [] - strg.append(PSLOT) - for i in range(2,5): - try: - if ' ' not in basename(params[i]): - strg.append(basename(params[i]).split('.')[0]) - except: - pass - if len(strg) == 0: - strg = 'rocotoviewer_outout_file' - save_results_file = '_'.join(strg)+'.txt' - inc_int = 0 - while check_file(save_results_file): - if '(%d)'%inc_int in save_results_file: - save_results_file = save_results_file.replace('(%d)'%inc_int,'(%d)'%(inc_int+1)) - inc_int += 1 - else: - save_results_file = basename(save_results_file.split('.')[0])+'(%d)'%inc_int+'.txt' - out_file = open(save_results_file,'w') - out_file.write(results) - out_file.close() - screen.addstr(mlines-1,0,'Saved file %s'%save_results_file+' '*10) - screen.refresh() - std_time.sleep(0.5) - - return - -def main(screen): - - global mlines - global mcols - global default_column_length - global use_multiprocessing - global highlightText - global highlightSelectedText - global normalText - global PSLOT - global PACKAGE - global entity_values - - event = 10 - - if not sys.stdin.isatty(): - if screen != 'dummy': - print 'There seems to be a problem with the curses init' - sys.exit(-1) - else: - mlines = 100 - else: - mlines, mcols = screen.getmaxyx() - - #global debug - #PWD = os.getcwd() - #debug = open(PWD+'/debug.log','a',0) - - (workflow_file,database_file) = get_arguments() - - if not load_produtil_pythonpath(): - curses.endwin() - print '\n\nCRITICAL ERROR: The produtil package could not be loaded from your system' - sys.exit(-1) - - if html_output: - if sys.stdin.isatty(): - curses.endwin() - print '\nPreparing to write out an html folder' - use_multiprocessing = False - - import produtil.run, produtil.numerics - from produtil.run import run,runstr, batchexe - from produtil.fileop import check_file, makedirs, deliver_file, remove_file, make_symlinks_in - from produtil.prog import shbackslash - - header_string = ' CYCLE TASK JOBID STATE EXIT TRIES DURATION' - header_string_under = '========(updated:tttttttttttttttt)========== PSLOT: pslot ===========================' - - global use_performance_metrics - aug_perf = collections.defaultdict(dict) - if use_performance_metrics: - result = augment_SQLite3( database_file ) - aug_perf = get_aug_perf_values(get_user) - header_string += ' SLOTS QTIME CPU RUN\n' - header_string_under += '=============================\n' - header_string += header_string_under - default_column_length = 122 - else: - aug_perf = None - header_string = header_string+'\n'+header_string_under+'\n' - default_column_length = 91 - - html_output_dir = None - entity_values = get_entity_values( workflow_file ) - workflow_name = 'gfs_workflow' - if 'ROTDIR' in entity_values: - ROTDIR = entity_values['ROTDIR'] - else: - ROTDIR = 'no_rotdir' - if 'PSLOT' in entity_values: - PSLOT = entity_values['PSLOT'] - else: - PSLOT = 'no_name' - if 'PACKAGE' in entity_values: - PACKAGE = entity_values['PACKAGE'] - if PACKAGE == 'ugcs': - workflow_name = 'ugcs_workflow' - if PACKAGE == 'gfs': - workflow_name = 'gfs_workflow' - else: - PACKAGE = 'none' - if 'EXPDIR' in entity_values: - EXPDIR = entity_values['EXPDIR'] - else: - EXPDIR = '.' - - if html_output: - html_ptr = None - if not send_html_to_rzdm and len(rzdm_path) != 0: - html_output_dir = shbackslash(rzdm_path) - else: - html_output_dir = shbackslash('%s/pr%s'%(workflow_name,PSLOT)) - print 'writing html to directory:',html_output_dir - html_output_file = shbackslash( html_output_dir+'/index.html' ) - html_header_line = '\n' - if use_performance_metrics: - html_header_line = html_header_line+''+'\n' - else: - html_header_line = html_header_line+'\n' - print 'Generating html folder html: %s ...'%html_output_file - cmd = batchexe('rm') ['-Rf', html_output_dir ] - stat=runstr(cmd) - makedirs( html_output_dir ) - html_ptr = open(html_output_file,'w') - html_ptr.write(ccs_html) - break_file = False - stat_update_time = str(datetime.datetime.now()).rsplit(':',1)[0] - html_discribe_line = '\n
CYCLETASKJOBIDSTATEEXITTRIESDURATIONSLOTSQTIMECPURUN
\n\n\n'%(stat_update_time,PSLOT) - html_discribe_line += '\n\n
ExpandRefreshed: %sPSLOT: %s
ROTDIR: %sTurn Around Times
\n
\n'%(workflow_name,ROTDIR,PSLOT) - html_discribe_line += html_header_line - html_ptr.write( html_discribe_line ) - else: - curses.start_color() - curses.use_default_colors() - screen.refresh() - curses.mousemask(1) - curses.noecho() - for i in range(0, curses.COLORS): - curses.init_pair(i + 1, i,curses.COLOR_BLACK) - if i == 4: - curses.init_pair(i + 1, i,curses.COLOR_WHITE) - curses.init_pair(8, 0, -1) - - curses.mousemask(curses.ALL_MOUSE_EVENTS) - #curses.init_pair(6,curses.COLOR_BLACK, curses.COLOR_CYAN) - highlightText = curses.A_STANDOUT - highlightSelectedText = curses.color_pair(5) - normalText = curses.A_NORMAL - - cmd = batchexe('which') ['rocotorun'] - try: - which_rocoto = runstr(cmd).strip() - except Exception,e: - curses.endwin() - print '\n\nCRITICAL ERROR: rocotorun is not in your path, user "module load rocoto"' - sys.exit(0) - - os.environ['TZ']='UTC' - std_time.tzset() - - #stdout_buff = StringIO() - #stderr_buff = StringIO() - #sys.stdout = stdout_buff - #sys.stderr = stderr_buff - - HOME = os.environ['HOME'] - rocoto_temp = HOME+'/.rocoto/tmp' - makedirs( rocoto_temp ) - - global temp_workflow_file - workflow_basename = basename(workflow_file)+'.' - temp_file= tempfile.NamedTemporaryFile(prefix=workflow_basename, dir=rocoto_temp, delete=False) - temp_workflow_file = temp_file.name - old = open(workflow_file) - temp = [] - for line in old: - if '&ENV_VARS;' not in line: - temp.append(line) - - for line in temp: - temp_file.write(line) - - temp_file.close() - old.close() - - tasks_ordered = [] - metatask_list = collections.defaultdict(list) - cycledef_group_cycles = collections.defaultdict(list) - - queue_stat = Queue() - queue_check = Queue() - - if only_check_point: - curses.endwin() - sys.stdout = os.fdopen(0,'w',0) - print 'Creating check point file ...' - params = (workflow_file, database_file, tasks_ordered, metatask_list, cycledef_group_cycles ) - get_rocoto_stat( params, queue_stat ) - - stat_update_time = '' - params_check = '' - header = None - - process_get_rocoto_stat = None - process_get_rocoto_check = None - - cycle = 0 - if html_output: - mlines = 100 - mcols = 125 - if not html_output and mcols < default_column_length: - curses.endwin() - print - print 'Your terminal is only %d characters must be at least %d to display workflow status'%(mcols,default_column_length) - sys.exit(-1) - if not html_output: - screen.refresh() - rocoto_stat_params = '' - rocoto_stat_params_tmp = '' - step = 0.0 ; i = 0 - dots = ('. ','.. ','... ','.... ','.....',' ....',' ...',' .') - dot_stat = 0 ; dot_check = 0 - current_time = time() - meta_tasklist = collections.defaultdict(list) - - if save_checkfile_path is not None and check_file(save_checkfile_path): - with open(save_checkfile_path) as savefile: - rocoto_data_and_time = cPickle.load(savefile) - rocoto_stat, tasks_ordered, metatask_list,cycledef_group_cycles, stat_update_time = rocoto_data_and_time - start_time = time() - stat_read_time_delay - 10 - header = header_string - header = header.replace('t'*16,stat_update_time) - if PACKAGE.lower() == 'ugcs': - header = header.replace(' PSLOT: pslot ','==== UGCS ====') - elif PSLOT.lower() == 'no_name': - header = header.replace(' PSLOT: pslot ','==============') - reduce_header_size = 0 - else: - header = header.replace(' PSLOT: pslot ','==== UGCS ====') - reduce_header_size = 0 - if reduce_header_size > 0: - header = header[:-reduce_header_size] - header = header[reduce_header_size:] - if list_tasks: - params = (workflow_file, database_file, tasks_ordered, metatask_list, cycledef_group_cycles ) - get_rocoto_stat( params, Queue() ) - curses.endwin() - sys.stdout = os.fdopen(0,'w',0) - sys.exit(0) - - - if save_checkfile_path is None or (save_checkfile_path is not None and not check_file(save_checkfile_path)): - params = (workflow_file, database_file, tasks_ordered, metatask_list,cycledef_group_cycles) - if use_multiprocessing: - process_get_rocoto_stat = Process( target=get_rocoto_stat, args=[params, queue_stat] ) - process_get_rocoto_stat.start() - screen.addstr(mlines-2,0,'No checkpoint file, must get rocoto stats please wait',curses.A_BOLD) - screen.addstr(mlines-1,0,'Running rocotostat ',curses.A_BOLD) - else: - (rocoto_stat, tasks_ordered, metatask_list,cycledef_group_cycles) = get_rocoto_stat( params, Queue() ) - header = header_string - stat_update_time = str(datetime.datetime.now()).rsplit(':',1)[0] - header = header.replace('t'*16,stat_update_time) - if PSLOT.lower() == 'no_name': - header = header.replace(' PSLOT: pslot ','==============') - reduce_header_size = 0 - elif PACKAGE.lower() == 'ugcs': - header = header.replace(' PSLOT: pslot ','==== UGCS ====') - reduce_header_size = 0 - else: - header = header.replace('pslot',PSLOT) - reduce_header_size = int((len(PSLOT)-len('PSLOT'))/2) - if reduce_header_size > 0: - header = header[:-reduce_header_size] - header = header[reduce_header_size:] - - while use_multiprocessing: - if mcols < default_column_length: - curses.endwin() - print - print 'Your terminal is only %d characters must be at least %d to display workflow status'%(mcols,default_column_length) - sys.exit(-1) - step += 0.001 - if step > 100: - step = 0.0 - i = (0 if i == len(dots)-1 else i+1 ) - curses.curs_set(0) - screen.addstr(mlines-1,19,dots[i],curses.A_BOLD) - screen.refresh() - try: - rocoto_stat_params = queue_stat.get_nowait() - except: - pass - if len(rocoto_stat_params) != 0: - (rocoto_stat, tasks_ordered, metatask_list,cycledef_group_cycles) = rocoto_stat_params - if use_multiprocessing: - process_get_rocoto_stat.join() - process_get_rocoto_stat.terminate() - stat_update_time = str(datetime.datetime.now()).rsplit(':',1)[0] - header = header_string - header = header.replace('t'*16,stat_update_time) - if PSLOT.lower() == 'no_name': - header = header.replace(' PSLOT: pslot ','==============') - reduce_header_size = 0 - elif PACKAGE.lower() == 'ugcs': - header = header.replace(' PSLOT: pslot ','==== UGCS ====') - reduce_header_size = 0 - else: - header = header.replace('pslot',PSLOT) - reduce_header_size = int((len(PSLOT)-len('PSLOT'))/2) - if reduce_header_size > 0: - header = header[:-reduce_header_size] - header = header[reduce_header_size:] - break - - start_time = time() - - num_cycle = len(rocoto_stat) - time_to_load = (time()- current_time)/60.0 - - pad_pos = 0 - update_pad = True - task = 0 ; execute_task = '' ; execute_cycle = '' - loading_stat = False - loading_check = False - find_next = 0 - check_task = '' ; check_cycle = '' - rocoto_check = '' - break_twice = False - search_string = '' - - meta_tasks = [] - metatasks_state_cycle = [] - metatasks_state_string_cycle = [] - - metatask_list_copy = collections.defaultdict(list) - metatask_name = collections.defaultdict(list) - for each_metatask in metatask_list: - metatask_name[each_metatask] = metatask_list[each_metatask][0] - del metatask_list[each_metatask][0] - - tasks_in_cycle = [] - for each_cycle in rocoto_stat: - list_of_tasks_per_cycle = [] - meta_tasks_in_cycle = [] - for each_line in each_cycle: - line_has_metatask = False - for check_metatask, check_metatask_list in metatask_list.iteritems(): - if check_metatask in each_line: - meta_tasks_in_cycle.append( (check_metatask, True, check_metatask_list ) ) - line_has_metatask = True - continue - else: - for every_meta_task in check_metatask_list: - each_element_in_line = each_line.split() - if every_meta_task != check_metatask: - for item in each_element_in_line: - if every_meta_task == item: - meta_tasks_in_cycle.append((every_meta_task, False, check_metatask) ) - line_has_metatask = True - if not line_has_metatask: - if '---' not in each_line.split()[1]: - list_of_tasks_per_cycle.append(each_line.split()[1]) - meta_tasks_in_cycle.append(('False',False,'False')) - - tasks_in_cycle.append(list_of_tasks_per_cycle) - - meta_tasks_state = dict() - meta_tasks_state_string = dict() - for check_metatask, check_metatask_list in metatask_list.iteritems(): - meta_tasks_state[check_metatask] = True - meta_tasks_state_string[check_metatask] = '' - meta_tasks_state['False'] = False - - meta_tasks.append(meta_tasks_in_cycle) - metatasks_state_cycle.append(meta_tasks_state) - metatasks_state_string_cycle.append(meta_tasks_state_string) - - update_metatask_state_status_message = True - ''' -# This lists each metatask and its elements -# for the first cycle for code edification - curses.endwin() - print - for each_metatask in meta_tasks[0]: - if each_metatask[1]: - print metatask_name[each_metatask[2][0]] - for task in each_metatask[2]: - print '',task - sys.exit(0) - ''' - - metatask_list_per_cycle = [] - metatask_list_by_name = collections.defaultdict(dict) - for each_cycle in meta_tasks: - list_of_metatasks_in_cycle = [] - for each_metatask in each_cycle: - if each_metatask[1]: - tasks_in_metatask_list = [] - for task in each_metatask[2]: - tasks_in_metatask_list.append( task ) - metatask_list_by_name[ metatask_name[each_metatask[2][0]] ] = tasks_in_metatask_list - list_of_metatasks_in_cycle.append( metatask_name[each_metatask[2][0]] ) - metatask_list_per_cycle.append(list_of_metatasks_in_cycle) - - found = False - end_found = False - found_cycle = 0 - found_end_cycle = 0 - for find_cycle in range(0,len(rocoto_stat)): - for lines in rocoto_stat[find_cycle]: - if not found and any(x in lines for x in ['RUNNING', 'QUEUED']): - found = True - found_cycle = find_cycle - if found and not any(x in lines for x in ['RUNNING', 'QUEUED']): - end_found = True - found_end_cycle = find_cycle - break - - get_number_of_stats = 0 - if found: - cycle = found_cycle - else: - get_number_of_stats = 2 - if len(rocoto_stat) > 2: - cycle = len(rocoto_stat) - 2 - else: cycle = 0 - - if html_output: - if cycle > 2: - cycle -= 2 - html_start_cycle = cycle - - html_output_firstpass = True - #debug.write('num cycles: %s\n'%str(len(rocoto_stat))) - while True: - num_columns = default_column_length - mlines = 90; mcols = 125 - if header is None: - header = ' ' - if update_pad is True: - #debug.write('cycle: %s\n'%str(cycle)) - num_lines = len(rocoto_stat[cycle]) - #debug.write('len rocoto_stat[cycle]: %s\n'%str(num_lines)) - line_correction = 0 - for count_meta_tasks in meta_tasks[cycle]: - if count_meta_tasks[1] and metatasks_state_cycle[cycle][ count_meta_tasks[0] ]: - line_correction += len(count_meta_tasks[2]) - 1 - num_lines -= line_correction - update_pad = False - line_number = -1 - colapsed_metatask = False - for line_num,line in enumerate(rocoto_stat[cycle]): - columns = line.split() - count_columns = line.split(' ') - spaces = [] - for c,sub_group in groupby(count_columns): - if c != '': continue - spaces.append(' '*len(list(sub_group))) - spaces.append('') - text_color = {'SUCCEEDED':3,'QUEUED':4,'DEAD':2,'FAILED':2,'RUNNING':6} - skip_task = False - - if not meta_tasks[cycle][line_num][1] and metatasks_state_cycle[cycle][ meta_tasks[cycle][line_num][2] ] : - skip_task = True - else: - line_number +=1 - html_line = '' - if use_performance_metrics and len(columns) == 7: - for i in range(0,4): - columns.append('-') - for i,column in enumerate(columns): - if skip_task: continue - if not use_performance_metrics and i > 7: continue - execute_cycle = columns[0] - if i == 0: - if meta_tasks[cycle][line_num][1]: - if metatasks_state_cycle[cycle][columns[1]]: - colapsed_metatask = True - if update_metatask_state_status_message or len(metatasks_state_string_cycle[cycle][ columns[1] ])==0: - get_state_list = [] - total_numer_of_tasks = len(meta_tasks[cycle][line_num][2]) - for check_metatask_line in rocoto_stat[cycle]: - split_check_metatask_line = check_metatask_line.split() - for each_metatask in meta_tasks[cycle][line_num][2]: - if each_metatask == split_check_metatask_line[1]: - get_state_list.append(split_check_metatask_line[3]) - metatask_state = columns[3] - if 'SUCCEEDED' in get_state_list: - metatask_state = '(%d/%d) SUCCEEDED'%(get_state_list.count('SUCCEEDED'),total_numer_of_tasks) - if 'QUEUED' in get_state_list: - metatask_state = '(%d/%d) QUEUED'%(get_state_list.count('QUEUED'),total_numer_of_tasks) - if 'RUNNING' in get_state_list: - metatask_state = '(%d/%d) RUNNING'%(get_state_list.count('RUNNING'),total_numer_of_tasks) - if 'DEAD' in get_state_list: - metatask_state = '(%d/%d) DEAD'%(get_state_list.count('DEAD'),total_numer_of_tasks) - metatasks_state_string_cycle[cycle][ columns[1] ] = metatask_state - html_line += ''+column+'' - elif i == 1: - save_column = column - if colapsed_metatask: - colapsed_metatask = False - column = metatask_name[column] - display_column = (column if len(column) < 40 else column[:40]) - if line_number == task: - execute_task = save_column - if html_output: - log_file = '' - for find_task in tasks_ordered: - if find_task[0] == column: - log_file = find_task[2].replace('CYCLE', execute_cycle[:-2] ) - if check_file(shbackslash( log_file )): - deliver_file( log_file, html_output_dir ) - log_file_base = os.path.basename(log_file) - html_line += ''%log_file_base+display_column+'' - else: - html_line += ''+display_column+'' - elif i == 2: - if len(column) > 7: - column = column[:7] - html_line += ''+column+'' - elif i == 3: - if meta_tasks[cycle][line_num][1] and len(metatasks_state_string_cycle[cycle][ columns[1] ].split())!=1 and metatasks_state_cycle[cycle][columns[1]]: - column = metatasks_state_string_cycle[cycle][ columns[1] ] - if len(column)>15: - if column.split()[1] == 'SUCCEEDED': - html_line += ''+column[:15]+'' - elif column.split()[1] == 'QUEUED': - html_line += ''+column[:15]+'' - elif column.split()[1] in('DEAD','FAILED'): - html_line += ''+column[:15]+'' - elif column.split()[1] == 'RUNNING': - html_line += ''+column[:15]+'' - else: - html_line += ''+column[:15]+'' - else: - if column.split()[1] == 'SUCCEEDED': - html_line += ''+column+'' - elif column.split()[1] == 'QUEUED': - html_line += ''+column+'' - elif column.split()[1] in('DEAD','FAILED'): - html_line += ''+column+'' - elif column.split()[1] == 'RUNNING': - html_line += ''+column+'' - else: - html_line += ''+column+'' - elif column in text_color: - if column == 'SUCCEEDED': - html_line += ''+column+'' - elif column == 'QUEUED': - html_line += ''+column+'' - elif column in('DEAD','FAILED'): - html_line += ''+column+'' - elif column == 'RUNNING': - html_line += ''+column+'' - else: - html_line += ''+column+'' - else: - html_line += ''+column+'' - else: - if len(column)<6: - html_line += ''+column+'' - else: - html_line += ''+column+'' - if not skip_task: - html_line += '\n' - html_ptr.write(html_line) - - update_metatask_state_status_message = False - - found_still_running = False - cycle += 1 - update_pad = True - for find_cycle in range(cycle,len(rocoto_stat)): - for lines in rocoto_stat[find_cycle]: - if 'RUNNING' in lines: - found_still_running = True - break - break - if get_number_of_stats >= 0: - found_still_running = True - if cycle < len(rocoto_stat) or found_still_running: - html_line = '\n' - html_line += '\n
\n\n' - html_line += html_header_line - html_ptr.write(html_line) - get_number_of_stats -= 1 - else: - html_line = '\n' - html_line += '\n' - html_line += '\n' - html_ptr.write(html_line) - html_ptr.close() - if html_output_firstpass: - for meta_cycle in range(0,len(rocoto_stat)): - for execute_task in metatasks_state_cycle[meta_cycle]: - metatasks_state_cycle[meta_cycle][execute_task] = False - html_output_file = shbackslash( html_output_dir+'/index_exp.html' ) - html_ptr = open(html_output_file,'w') - html_ptr.write(ccs_html) - stat_update_time = str(datetime.datetime.now()).rsplit(':',1)[0] - html_discribe_line = '\n\n\n\n'%(stat_update_time,PSLOT) - html_discribe_line += '\n\n
CollapseRefreshed: %sPSLOT: %s
ROTDIR: %sTurn Around Times
\n
\n'%(workflow_name,ROTDIR,PSLOT) - html_discribe_line += html_header_line - html_ptr.write( html_discribe_line ) - html_output_firstpass = False - #cycle = html_start_cycle - if not html_output_firstpass: - if send_html_to_rzdm: - print 'sending html files to rzdm using rsync ...' - cmd=batchexe('rsync')['-avzr','--delete', html_output_dir, rzdm_path] - stat=runstr(cmd) - if stat is None: - print 'warning rsync to %s failed'%html_output_dir - sys.exit(-1) - else: - print 'done' - sys.exit(0) - else: - - # Main Curses Screen Loop - # Write to curses screen when HTML is not outputted - highlight_CYCLE = False - highlight_WORKFLOW = False - get_execute_task_track = False - screen.clear() - global screen_resized - selected_tasks = collections.defaultdict(list) - selected_meta_tasks = collections.defaultdict(list) - execute_metatask = None - colapsed_metatask = None - task = 0 - while True: - if not check_file(workflow_file) or not check_file(database_file): - curses.endwin() - print;print - print 'rocoto_viwer quit because the Rocoto database or XML file used by this session when missing' - sys.exit(-1) - job_id = None - curses.noecho() - num_columns = default_column_length - if header is None: - header = ' ' - if highlight_WORKFLOW: - header_split = header.split('\n') - screen.addstr(0,0,header_split[0]+'\n') - screen.addstr(header_split[1],curses.A_STANDOUT) - else: - screen.addstr(0,0,header) - if update_pad is True: - num_lines = len(rocoto_stat[cycle]) - line_correction = 0 - for count_meta_tasks in meta_tasks[cycle]: - if count_meta_tasks[1] and metatasks_state_cycle[cycle][ count_meta_tasks[0] ]: - line_correction += len(count_meta_tasks[2]) - 1 - num_lines -= line_correction - update_pad = False - if mlines > num_lines: - pad = curses.newpad(mlines ,num_columns) - else: - pad = curses.newpad(num_lines+1 ,num_columns) - line_number = -1 - for line_num,line in enumerate(rocoto_stat[cycle]): - #debug.write('DISPLAY LINE: '+line+'\n') - colapsed_metatask = False - columns = line.split() - count_columns = line.split(' ') - spaces = [] - for c,sub_group in groupby(count_columns): - if c != '': continue - spaces.append(' '*len(list(sub_group))) - spaces.append('') - text_color = {'SUCCEEDED':3,'QUEUED':4,'DEAD':2,'FAILED':2,'RUNNING':6} - skip_task = False - - if not meta_tasks[cycle][line_num][1] and metatasks_state_cycle[cycle][ meta_tasks[cycle][line_num][2] ] : - skip_task = True - else: - line_number +=1 - if use_performance_metrics and len(columns) == 7: - for i in range(0,4): - columns.append('-') - for i,column in enumerate(columns): - if skip_task: continue - if not use_performance_metrics and i > 7: continue - execute_cycle = columns[0] - if i == 0: - if meta_tasks[cycle][line_num][1]: - if metatasks_state_cycle[cycle][columns[1]]: - if highlight_CYCLE: - pad.addstr(column, curses.A_STANDOUT) - else: - pad.addstr(column) - pad.addstr(' < ') - colapsed_metatask = True - if update_metatask_state_status_message or len(metatasks_state_string_cycle[cycle][ columns[1] ])==0: - get_state_list = [] - total_numer_of_tasks = len(meta_tasks[cycle][line_num][2]) - for check_metatask_line in rocoto_stat[cycle]: - split_check_metatask_line = check_metatask_line.split() - for each_metatask in meta_tasks[cycle][line_num][2]: - if each_metatask == split_check_metatask_line[1]: - get_state_list.append(split_check_metatask_line[3]) - red_override = False - metatask_state = columns[3] - if 'SUCCEEDED' in get_state_list: - metatask_state = '(%d/%d) SUCCEEDED'%(get_state_list.count('SUCCEEDED'),total_numer_of_tasks) - if 'QUEUED' in get_state_list: - metatask_state = '(%d/%d) QUEUED'%(get_state_list.count('QUEUED'),total_numer_of_tasks) - if 'RUNNING' in get_state_list: - metatask_state = '(%d/%d) RUNNING'%(get_state_list.count('RUNNING'),total_numer_of_tasks) - if 'FAILED' in get_state_list: - metatask_state = '(%d/%d) FAILED'%(get_state_list.count('FAILED'),total_numer_of_tasks) - red_override = True - if 'DEAD' in get_state_list: - red_override = True - metatask_state = '(%d/%d) DEAD'%(get_state_list.count('DEAD'),total_numer_of_tasks) - metatasks_state_string_cycle[cycle][ columns[1] ] = metatask_state - else: - if highlight_CYCLE: - pad.addstr(column, curses.A_STANDOUT) - else: - pad.addstr(column) - pad.addstr(' > ') - else: - if highlight_CYCLE: - pad.addstr(column,curses.A_STANDOUT) - pad.addstr(' ') - else: - pad.addstr(column+' ') - elif i == 1: - save_column = column - if colapsed_metatask: - column = metatask_name[column] - display_column = (column if len(column) < 19 else column[:19]) - if line_number == task and not highlight_CYCLE and not highlight_WORKFLOW : - pad.addstr(display_column,curses.A_STANDOUT) - execute_task_track = save_column - if colapsed_metatask: - execute_metatask_check = True - execute_metatask = column - metatask_list_of_selected_metatask = meta_tasks[cycle][line_num][2] - else: - execute_metatask_check = False - execute_metatask = None - metatask_list_of_selected_metatask = None - execute_task = column - else: - #if column in metatask_list_by_name[metatask_name[column]]: - # display_column = ' '+display_column - if column in selected_tasks[execute_cycle]: - pad.addstr(display_column, highlightSelectedText ) - elif column in selected_meta_tasks[execute_cycle]: - pad.addstr(display_column, highlightSelectedText ) - else: - pad.addstr(display_column) - pad.addstr(' '*(21-len(display_column))) - elif i == 2: - job_id = column.strip() - if len(job_id) > 9: - job_id = job_id[:9] - if job_id == '-': - pad.addstr(job_id+' '*9) - else: - pad.addstr(job_id+' '*(10-len(job_id))) - elif i == 3: - if meta_tasks[cycle][line_num][1] and len(metatasks_state_string_cycle[cycle][ columns[1] ].split())!=1 and metatasks_state_cycle[cycle][columns[1]]: - column = metatasks_state_string_cycle[cycle][ columns[1] ] - if red_override: - the_text_color = 2 - else: - the_text_color = text_color[column.split()[1]] - - if len(column) >= 15: - pad.addstr( column[:15],curses.color_pair(the_text_color)|curses.A_STANDOUT) - column = column[:15] - else: - pad.addstr( column,curses.color_pair(the_text_color)|curses.A_STANDOUT) - elif column in text_color: - pad.addstr(column, curses.color_pair(text_color[column])|curses.A_STANDOUT) - else: - pad.addstr(column) - pad.addstr(' '*(16-len(column)),curses.color_pair(8)) - elif i in (4,5,6,7,8,9,10): - if len(column) < 8: - pad.addstr(column+' '*(8-len(column))) - else: - pad.addstr(column.strip()+' ') - - if not skip_task: - pad.addstr('\n') - - update_metatask_state_status_message = False - pad.refresh( pad_pos, 0, 2,0, mlines-4,mcols) - - entire_workflow = 'Hit to open cycle based information page (implementation pending)' - entire_cycle = '********* The ENTIRE CYCLE has been selected for an action **********' - - try: - if highlight_WORKFLOW: - screen.addstr(mlines-2,0,entire_workflow,curses.A_BOLD) - else: - screen.addstr(mlines-2,0,' '*len(entire_workflow)) - if highlight_CYCLE: - screen.addstr(mlines-2,0,entire_cycle,curses.A_BOLD) - elif not highlight_WORKFLOW: - screen.addstr(mlines-2,0,' '*len(entire_cycle)) - if pad_pos < num_lines-mlines+4 or pad_pos > 0: - screen.addstr(mlines-1,0,' '*len(bottom_message_scroll)) - screen.addstr(mlines-1,0,bottom_message_scroll,curses.A_BOLD) - else: - screen.addstr(mlines-1,0,' '*len(bottom_message_scroll)) - screen.addstr(mlines-1,0,bottom_message,curses.A_BOLD) - except: - std_time.sleep(1) - pass - - if num_columns > mcols: - curses.endwin() - print - print 'Your terminal is only %s characters must be at least %s to display workflow status'%(str(mcols),str(num_columns)) - sys.exit(-1) - - if loading_stat: - dot_stat = (0 if dot_stat == len(dots)-1 else dot_stat+1 ) - screen.addstr(mlines-2,0,'Running rocotostat ') - screen.addstr(mlines-2,20,dots[dot_stat]) - try: - rocoto_stat_tmp = queue_stat.get_nowait() - except: - rocoto_stat_tmp = '' - if len(rocoto_stat_tmp) != 0: - (rocoto_stat, tasks_ordered, metatask_list,cycledef_group_cycles) = rocoto_stat_tmp - process_get_rocoto_stat.join() - process_get_rocoto_stat.terminate() - update_pad = True - loading_stat = False - rocoto_stat_tmp = '' - stat_update_time = str(datetime.datetime.now()).rsplit(':',1)[0] - header = header_string - header = header.replace('t'*16,stat_update_time) - header = header.replace('pslot',PSLOT) - reduce_header_size = int((len(PSLOT)-len('PSLOT'))/2) - if reduce_header_size > 0: - header = header[:-reduce_header_size] - header = header[reduce_header_size:] - screen.addstr(mlines-2,0,'Updated new rocotostatus: %s'%stat_update_time+' '*48) - screen.refresh() - std_time.sleep(0.5) - screen.addstr(mlines-2,0,' '*100) - screen.refresh() - - if loading_check: - if time() - current_check_time > 5: - dot_check = (0 if dot_check == len(dots)-1 else dot_check+1 ) - loc = (0 if not loading_stat else 27) - screen.addstr(mlines-2,loc,'Running rocotocheck ') - screen.addstr(mlines-2,loc+20,dots[dot_check]) - try: - rocoto_check = queue_check.get_nowait() - except: - pass - if len(rocoto_check) != 0: - process_get_rocoto_check.join() - process_get_rocoto_check.terminate() - loading_check = False - if time() - current_check_time > 5: - event = screen.getch() - time_inc = 0.0 - while event != curses.KEY_ENTER and event != 10: - message_string = 'rocotocheck for %s %s is ready for vieweing'%(params_check[2],params_check[3]) - message_string = (message_string if len(message_string) < mcols else message_string[:mcols-1]) - time_inc += 1 - if time_inc > 4: - screen.addstr(mlines-2,0, message_string) - screen.addstr(mlines-2,len(message_string),' ') - time_inc = 0.0 - else: - screen.addstr(mlines-2,0,message_string) - screen.addstr(mlines-2,len(message_string),' ',curses.A_BOLD) - event = screen.getch() - display_results(rocoto_check,screen,params_check) - rocoto_check = '' - - curses.curs_set(0) - curses.halfdelay(2) - screen.keypad(1) - event = screen.getch() - - if event in (curses.KEY_LEFT, curses.KEY_RIGHT): - highlight_CYCLE = False - highlight_WORKFLOW = False - if event == curses.KEY_LEFT: - pad_pos = 0 - #debug.write('KEY_LEFT %s\n'%pad_pos) - if cycle - 1 >= 0: - cycle -= 1 - elif event == curses.KEY_RIGHT: - pad_pos = 0 - #debug.write('KEY_RIGHT %s\n'%pad_pos) - if cycle + 1 < num_cycle: - cycle += 1 - num_lines = len(rocoto_stat[cycle]) - line_correction = 0 - for count_meta_tasks in meta_tasks[cycle]: - if count_meta_tasks[1] and metatasks_state_cycle[cycle][ count_meta_tasks[0] ]: - line_correction += len(count_meta_tasks[2])-1 - num_lines -= line_correction - if task > num_lines-1: - task = num_lines-1 - update_pad = True - if event == ord('Q'): - break - if get_execute_task_track: - get_execute_task_track = False - if execute_task_track in metatasks_state_cycle[cycle]: - metatasks_state_cycle[cycle][execute_task_track] = not metatasks_state_cycle[cycle][execute_task_track] - update_metatask_state_status_message = True - update_pad = True - if event == curses.KEY_MOUSE: - mouse_id, mouse_x, mouse_y, mouse_z, button_state = curses.getmouse() - task_mouse_pos = pad_pos+mouse_y-2 - if task_mouse_pos >= 0 and task_mouse_pos < num_lines: - task = task_mouse_pos - update_pad = True - if button_state & curses.BUTTON1_DOUBLE_CLICKED and mouse_x in range(12,15): - get_execute_task_track = True - if event == ord('x'): - if execute_task_track in metatasks_state_cycle[cycle]: - metatasks_state_cycle[cycle][execute_task_track] = not metatasks_state_cycle[cycle][execute_task_track] - update_metatask_state_status_message = True - update_pad = True - if screen_resized: - screen.erase() - screen.refresh() - update_pad = True - task = pad_pos - screen_resized = False - curses.resizeterm(mlines, mcols) - #debug.write('SCREEN RESIZED %s (%d,%d)\n'%(pad_pos,mlines,mcols)) - if mcols < default_column_length: - curses.endwin() - print - print 'Your terminal is only %d characters must be at least %d to display workflow status'%(mcols,default_column_length) - sys.exit(-1) - elif event in ( curses.KEY_NPAGE, ord('d') ): - highlight_CYCLE = False - highlight_WORKFLOW = False - if pad_pos + mlines < num_lines-mlines+5: - pad_pos += mlines - 5 - task += mlines - 5 - else: - pad_pos = num_lines-mlines+5 - task = num_lines-1 - update_pad = True - elif event in ( curses.KEY_PPAGE, ord('u') ): - highlight_CYCLE = False - highlight_WORKFLOW = False - if pad_pos != 0: - if pad_pos - mlines > 0: - pad_pos -= mlines - 5 - if task > pad_pos+mlines-6: - task -= mlines - 5 - else: - pad_pos = 0 - task = 0 - update_pad = True - elif event in (curses.KEY_UP, curses.KEY_SR): - if task == 0: - if highlight_CYCLE: - highlight_CYCLE = False - highlight_WORKFLOW = True - if not highlight_WORKFLOW: - highlight_CYCLE = True - if task != pad_pos: - update_pad = True - task -= 1 - elif pad_pos != 0: - pad_pos -= 1 - task -= 1 - if event == curses.KEY_SR: - if execute_metatask_check: - if execute_metatask in selected_meta_tasks[execute_cycle]: - if len(selected_meta_tasks[execute_cycle]) > 0: - selected_meta_tasks[execute_cycle].remove(execute_metatask) - else: - selected_meta_tasks[execute_cycle].append(execute_metatask) - else: - if execute_task in selected_tasks[execute_cycle]: - if len(selected_tasks[execute_cycle]) > 0: - selected_tasks[execute_cycle].remove(execute_task) - else: - selected_tasks[execute_cycle].append(execute_task) - update_pad = True - elif event in ( curses.KEY_DOWN, curses.KEY_SF ): - if highlight_CYCLE or highlight_WORKFLOW: - task = -1 - highlight_CYCLE = False - highlight_WORKFLOW = False - if task != num_lines-1 and task < pad_pos+mlines-6: - task += 1 - elif pad_pos < num_lines-mlines+5: - pad_pos += 1 - task += 1 - if event == curses.KEY_SF: - if execute_metatask_check: - if execute_metatask in selected_meta_tasks[execute_cycle]: - if len(selected_meta_tasks[execute_cycle]): - selected_meta_tasks[execute_cycle].remove(execute_metatask) - else: - selected_meta_tasks[execute_cycle].append(execute_metatask) - else: - if execute_task in selected_tasks[execute_cycle]: - if len(selected_tasks[execute_cycle]) > 0: - selected_tasks[execute_cycle].remove(execute_task) - else: - selected_tasks[execute_cycle].append(execute_task) - update_pad = True - elif event == ord('c'): - if loading_check == True: - screen.addstr(mlines-2,0,'rocotocheck is all reading running ') - screen.refresh() - std_time.sleep(0.5) - screen.addstr(mlines-2,0,' '*100) - screen.refresh() - else: - loc = (0 if not loading_stat else 27) - screen.addstr(mlines-2,loc,'Running rocotocheck ') - screen.refresh() - params_check = (workflow_file, database_file, execute_task, execute_cycle, 'check') - process_get_rocoto_check = Process( target=get_rocoto_check, args=[params_check, queue_check] ) - process_get_rocoto_check.start() - loading_check = True - current_check_time = time() - elif event == ord('f'): - log_file = '' - for find_task in tasks_ordered: - if find_task[0] == execute_task: - log_file = find_task[2].replace('CYCLE', execute_cycle[:-2] ) - if check_file(log_file): - links = [] - links.append(log_file) - try: - make_symlinks_in(links,EXPDIR,force=True) - except: - pass - elif event in (curses.KEY_ENTER, 10, 13): - - if execute_metatask_check: - selected_tasks[execute_cycle] = list_selector( screen, selected_tasks[execute_cycle], metatask_list_of_selected_metatask ) - screen.erase() - else: - if execute_task in selected_tasks[execute_cycle]: - if len(selected_tasks[execute_cycle]) > 0: - selected_tasks[execute_cycle].remove(execute_task) - else: - selected_tasks[execute_cycle].append(execute_task) - - elif event == ord('r'): - screen.clear() - process = '' - if highlight_CYCLE: - screen.addstr('Are you sure you want to rewind all the tasks in the cycle %s by running:\n\n'%execute_cycle) - process = '-a' - #highlight_WORKFLOW = False - elif execute_metatask_check and len(selected_tasks[execute_cycle]) == 0: - for tasks in metatask_list_of_selected_metatask: - process += '-t ' + tasks+' ' - screen.addstr('Are you sure you want to rewind all the tasks in the metatask (%s) by running:\n\n'%execute_task) - elif len(selected_tasks[execute_cycle]) != 0 or len(selected_meta_tasks[execute_cycle]) != 0: - if len(selected_tasks[execute_cycle]) != 0: - selected_tasks_string = '' - screen.addstr('Selected tasks:\n\n') - for tasks in selected_tasks[execute_cycle]: - selected_tasks_string += tasks+'\t' - process += '-t ' + tasks+' ' - screen.addstr(selected_tasks_string+'\n\n') - if len(selected_meta_tasks[execute_cycle]) != 0: - selected_tasks_string = '' - screen.addstr('Selected %d entire meta-tasks and their tasks:\n\n'%len( selected_meta_tasks[execute_cycle])) - for meta_task_selected in selected_meta_tasks[execute_cycle]: - for tasks in metatask_list_by_name[meta_task_selected]: - selected_tasks_string += tasks+'\t' - process += '-t ' + tasks+' ' - screen.addstr(selected_tasks_string+'\n\n') - screen.addstr('\nAre you sure you want to rewind all these seleted tasks by running:\n\n') - elif len(selected_tasks[execute_cycle]) == 0: - process = '-t '+ execute_task - screen.addstr('Are you sure you want to rewind the single task %s by running:\n\n'%execute_task) - screen.addstr('rocotorewind -c %s -d %s -w %s %s\n\n'%(execute_cycle,basename(database_file),basename(workflow_file),process)) - screen.addstr('Enter: es or o',curses.A_BOLD) - while True: - event = screen.getch() - if event == ord('y') or event == ord('Y'): - params = (workflow_file, database_file, execute_cycle,process) - results = rocoto_rewind(params) - results_params = ('','','rewind',execute_cycle,'tasks') - try: - display_results(results,screen,results_params) - except: - screen.addstr('\n\nRewind of this job was successful but displaying of the stdout failed\n') - screen.addstr('Output has been written out to the file rocotorewind_output.log\n') - screen.addstr('Press to continue') - with open('rocotorewind_output.log','a') as rocotorewind_logfile: - rocotorewind_logfile.write('\n\n'+results) - while True: - event = screen.getch() - if event in (curses.KEY_ENTER, 10, 13): - break - selected_tasks[execute_cycle] = [] - break - elif event == ord('n') or event == ord('N'): - break - screen.clear() - update_pad = True - elif event == ord('U'): - selected_tasks[execute_cycle] = [] - selected_meta_tasks[execute_cycle] = [] - update_pad = True - elif event == ord('b'): - process = '' - screen.clear() - list_meta_tasks = '' - list_of_tasks = '' - boot_task_list = '' ; tasks_to_boot = [] - boot_metatask_list = '' ; metatasks_to_boot = [] - if highlight_CYCLE: - screen.addstr('You have selected to boot the entire cycle %s:\n\n'%execute_cycle,curses.A_BOLD) - metatasks_to_boot = metatask_list_per_cycle[cycle] - tasks_to_boot = tasks_in_cycle[cycle] - elif len(selected_tasks[execute_cycle]) != 0 or len(selected_meta_tasks[execute_cycle]) != 0: - screen.addstr('You have a list selected tasks and/or metatasks to boot:\n\n',curses.A_BOLD) - metatasks_to_boot = selected_tasks[execute_cycle] - tasks_to_boot = selected_tasks[execute_cycle] - elif execute_metatask_check: - screen.addstr('Are you sure you want boot the entire meta task %s by running:\n\n'%execute_metatask) - metatasks_to_boot.append(execute_metatask) - elif len(selected_tasks[execute_cycle]) == 0: - tasks_to_boot.append(execute_task) - screen.addstr('Are you sure you want boot the task %s by running rocotoboot with:'%execute_task) - else: - update_pad = True - continue - - if len(metatasks_to_boot) > 0: - list_meta_tasks = ' ' - screen.addstr('Metatasks selected in cycle:\n\n',curses.A_BOLD) - for meta_task in metatasks_to_boot: - list_meta_tasks += meta_task+' ' - boot_metatask_list += meta_task+',' - boot_metatask_list = boot_metatask_list[:-1] - screen.addstr( list_meta_tasks ) - if len(tasks_to_boot) > 0: - list_of_tasks = ' ' - screen.addstr('\n\nTasks selected in cycle:\n\n',curses.A_BOLD) - for a_task in tasks_to_boot: - list_of_tasks += a_task+' ' - boot_task_list += a_task+',' - boot_task_list = boot_task_list[:-1] - screen.addstr( list_of_tasks ) - - screen.addstr('\n\nAre you sure you want to boot all the tasks and/or metatasks in the cycle %s by running:\n\n'%execute_cycle,curses.A_BOLD) - if len(boot_metatask_list) != 0: - list_meta_tasks = '--metatasks '+"'"+boot_metatask_list+"'" - if len(boot_task_list) != 0: - list_of_tasks = ' --tasks '+"'"+boot_task_list+"'" - screen.addstr('rocotoboot -d %s -w %s %s\n\n'%(basename(database_file),basename(workflow_file),list_meta_tasks+list_of_tasks)) - screen.addstr('Enter: es or o',curses.A_BOLD) - - while True: - event = screen.getch() - if event == ord('y') or event == ord('Y'): - params = (workflow_file, database_file, execute_cycle, boot_metatask_list, boot_task_list) - results = rocoto_boot(params) - display_results(results,screen,('','',execute_cycle,'rocotoboot_output')) - break - elif event == ord('n') or event == ord('N'): - break - screen.clear() - update_pad = True - elif event == ord('R'): - screen.addstr(mlines-2,0,'Running rocotorun and rocotostat ...'+' '*60,curses.A_BOLD) - params = (workflow_file, database_file) - rocoto_run(params) - update_pad = True - screen.clear() - if loading_stat == True: - screen.addstr(mlines-2,0,'rocotostat is all reading running'+' '*60) - screen.refresh() - std_time.sleep(0.5) - else: - start_time = 0 - elif event == ord('/'): - curses.echo() - find_next = 1 - screen.addstr(mlines-3,0,' '*100) - screen.refresh() - screen.addstr(mlines-3,0,'/') - screen.refresh() - search_string = screen.getstr(mlines-3,1,50) - break_twice = False - screen.addstr(mlines-3,0,' '*100) - screen.refresh() - for every_cycle in range(0,len(rocoto_stat)): - for line_number,line in enumerate(rocoto_stat[every_cycle]): - if search_string in line: - task = line_number - if num_lines < mlines: - pad_pos = 0 - else: - pad_pos = task - update_pad = True - cycle = every_cycle - break_twice = True - break - if break_twice: - screen.clear() - break - else: - find_next = 1 - elif (event == ord('n') or event == ord('N')) and len(search_string) != 0: - if event == ord('n'): - find_next += 1 - else: - if find_next - 1 >= 1: - find_next -= 1 - found_next = 0 - break_twice = False - for every_cycle in range(0,len(rocoto_stat)): - for line_number,line in enumerate(rocoto_stat[every_cycle]): - if search_string in line: - found_next += 1 - if find_next == found_next: - task = line_number - if num_lines < mlines: - pad_pos = 0 - else: - pad_pos = task - update_pad = True - cycle = every_cycle - break_twice = True - break - if break_twice: - screen.clear() - break - if not break_twice: - find_next = 1 - - elif event == ord('F'): - for find_cycle in range(0,len(rocoto_stat)): - for lines in rocoto_stat[find_cycle]: - if 'RUNNING' in line: - break - break - if find_cycle > 1: - cycle = find_cycle - 2 - update_pad = True - elif event == ord('l'): - start_time -= stat_read_time_delay - elif event == ord('h'): - update_pad = True - help_screen(screen) - screen.clear() - current_time = time() - diff = current_time - start_time - if diff > stat_read_time_delay and not loading_stat: - start_time = current_time - if not use_multiprocessing: - params = (workflow_file, database_file, tasks_ordered, metatask_list,cycledef_group_cycles) - (rocoto_stat, tasks_ordered, metatask_list,cycledef_group_cycles) = get_rocoto_stat( params, Queue() ) - stat_update_time = str(datetime.datetime.now()).rsplit(':',1)[0] - header = header_string - header = header.replace('t'*16,stat_update_time) - header = header.replace('pslot',PSLOT) - reduce_header_size = int((len(PSLOT)-len('PSLOT'))/2) - if reduce_header_size > 0: - header = header[:-reduce_header_size] - header = header[reduce_header_size:] - update_pad = True - screen.clear() - else: - loading_stat = True - screen.addstr(mlines-2,0,'Running rocotostat ') - params = (workflow_file, database_file, tasks_ordered, metatask_list,cycledef_group_cycles) - process_get_rocoto_stat = Process( target=get_rocoto_stat, args=[params, queue_stat] ) - process_get_rocoto_stat.start() - - if use_multiprocessing: - if process_get_rocoto_stat is not None: - if process_get_rocoto_stat.is_alive(): - process_get_rocoto_stat.terminate() - if process_get_rocoto_check is not None: - if process_get_rocoto_check.is_alive(): - process_get_rocoto_check.terminate() - - #debug.close() - -if __name__ == '__main__': - if not load_produtil_pythonpath(): - print '\n\nCRITICAL ERROR: The produtil package could not be loaded from your system' - sys.exit(-1) - from produtil.fileop import remove_file - try: - signal.signal(signal.SIGWINCH, sigwinch_handler) - sys.stdout = sys.__stdout__ - sys.stderr = sys.__stderr__ - if sys.stdin.isatty(): - curses.wrapper(main) - else: - screen = 'dummy' - main(screen) - remove_file(temp_workflow_file) - except KeyboardInterrupt: - print "Got KeyboardInterrupt exception. Exiting..." - sys.exit(-1) diff --git a/ush/rocoto/setup_expt.py b/ush/rocoto/setup_expt.py deleted file mode 100755 index 2abab60b4c..0000000000 --- a/ush/rocoto/setup_expt.py +++ /dev/null @@ -1,246 +0,0 @@ -#!/usr/bin/env python - -############################################################### -# < next few lines under version control, D O N O T E D I T > -# $Date$ -# $Revision$ -# $Author$ -# $Id$ -############################################################### - -import os -import sys -import glob -import shutil -import socket -from datetime import datetime -from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter -import workflow_utils as wfu - -global expdir, configdir, comrot, pslot, resdet, resens, nens, cdump, idate, edate, gfs_cyc - - -def makedirs_if_missing(d): - if not os.path.exists(d): - os.makedirs(d) - - -def create_EXPDIR(): - - makedirs_if_missing(expdir) - configs = glob.glob('%s/config.*' % configdir) - if len(configs) == 0: - msg = 'no config files found in %s' % configdir - raise IOError(msg) - for config in configs: - shutil.copy(config, expdir) - - return - - -def create_COMROT(): - - idatestr = idate.strftime('%Y%m%d%H') - cymd = idate.strftime('%Y%m%d') - chh = idate.strftime('%H') - - makedirs_if_missing(comrot) - - # Link ensemble member initial conditions - enkfdir = 'enkf%s.%s/%s' % (cdump, cymd, chh) - makedirs_if_missing(os.path.join(comrot, enkfdir)) - for i in range(1, nens + 1): - makedirs_if_missing(os.path.join(comrot, enkfdir, 'mem%03d' % i)) - os.symlink(os.path.join(icsdir, idatestr, 'C%d' % resens, 'mem%03d' % i, 'INPUT'), - os.path.join(comrot, enkfdir, 'mem%03d' % i, 'INPUT')) - - # Link deterministic initial conditions - detdir = '%s.%s/%s' % (cdump, cymd, chh) - makedirs_if_missing(os.path.join(comrot, detdir)) - os.symlink(os.path.join(icsdir, idatestr, 'C%d' % resdet, 'control', 'INPUT'), - os.path.join(comrot, detdir, 'INPUT')) - - # Link bias correction and radiance diagnostics files - for fname in ['abias', 'abias_pc', 'abias_air', 'radstat']: - os.symlink(os.path.join(icsdir, idatestr, '%s.t%sz.%s' % (cdump, chh, fname)), - os.path.join(comrot, detdir, '%s.t%sz.%s' % (cdump, chh, fname))) - - return - - -def edit_baseconfig(): - - base_config = '%s/config.base' % expdir - - here = os.path.dirname(__file__) - top = os.path.abspath(os.path.join( - os.path.abspath(here), '../..')) - - if os.path.exists(base_config): - os.unlink(base_config) - - print '\nSDATE = %s\nEDATE = %s' % (idate, edate) - with open(base_config + '.emc.dyn', 'rt') as fi: - with open(base_config, 'wt') as fo: - for line in fi: - line = line.replace('@MACHINE@', machine.upper()) \ - .replace('@PSLOT@', pslot) \ - .replace('@SDATE@', idate.strftime('%Y%m%d%H')) \ - .replace('@EDATE@', edate.strftime('%Y%m%d%H')) \ - .replace('@CASEENS@', 'C%d' % resens) \ - .replace('@CASECTL@', 'C%d' % resdet) \ - .replace('@NMEM_ENKF@', '%d' % nens) \ - .replace('@HOMEgfs@', top) \ - .replace('@BASE_GIT@', base_git) \ - .replace('@DMPDIR@', dmpdir) \ - .replace('@NWPROD@', nwprod) \ - .replace('@COMROOT@', comroot) \ - .replace('@HOMEDIR@', homedir) \ - .replace('@STMP@', stmp) \ - .replace('@PTMP@', ptmp) \ - .replace('@NOSCRUB@', noscrub) \ - .replace('@ACCOUNT@', account) \ - .replace('@QUEUE@', queue) \ - .replace('@QUEUE_ARCH@', queue_arch) \ - .replace('@gfs_cyc@', '%d' % gfs_cyc) - if expdir is not None: - line = line.replace('@EXPDIR@', os.path.dirname(expdir)) - if comrot is not None: - line = line.replace('@ROTDIR@', os.path.dirname(comrot)) - if 'ICSDIR' in line: - continue - fo.write(line) - - print '' - print 'EDITED: %s/config.base as per user input.' % expdir - print 'DEFAULT: %s/config.base.emc.dyn is for reference only.' % expdir - print 'Please verify and delete the default file before proceeding.' - print '' - - return - - -if __name__ == '__main__': - - description = '''Setup files and directories to start a GFS parallel. -Create EXPDIR, copy config files -Create COMROT experiment directory structure, -link initial condition files from $ICSDIR to $COMROT''' - - parser = ArgumentParser(description=description, formatter_class=ArgumentDefaultsHelpFormatter) - parser.add_argument('--pslot', help='parallel experiment name', type=str, required=False, default='test') - parser.add_argument('--resdet', help='resolution of the deterministic model forecast', type=int, required=False, default=384) - parser.add_argument('--resens', help='resolution of the ensemble model forecast', type=int, required=False, default=192) - parser.add_argument('--comrot', help='full path to COMROT', type=str, required=False, default=None) - parser.add_argument('--expdir', help='full path to EXPDIR', type=str, required=False, default=None) - parser.add_argument('--idate', help='starting date of experiment, initial conditions must exist!', type=str, required=True) - parser.add_argument('--edate', help='end date experiment', type=str, required=True) - parser.add_argument('--icsdir', help='full path to initial condition directory', type=str, required=False) - parser.add_argument('--configdir', help='full path to directory containing the config files', type=str, required=False, default=None) - parser.add_argument('--nens', help='number of ensemble members', type=int, required=False, default=20) - parser.add_argument('--cdump', help='CDUMP to start the experiment', type=str, required=False, default='gdas') - parser.add_argument('--gfs_cyc', help='GFS cycles to run', type=int, choices=[0, 1, 2, 4], default=1, required=False) - parser.add_argument('--partition', help='partition on machine', type=str, required=False, default=None) - - args = parser.parse_args() - - machine = wfu.detectMachine() - - configdir = args.configdir - if not configdir: - configdir = os.path.abspath(os.path.dirname(__file__) + '/../parm/config') - - pslot = args.pslot - idate = datetime.strptime(args.idate, '%Y%m%d%H') - edate = datetime.strptime(args.edate, '%Y%m%d%H') - icsdir = args.icsdir - resdet = args.resdet - resens = args.resens - comrot = args.comrot if args.comrot is None else os.path.join(args.comrot, pslot) - expdir = args.expdir if args.expdir is None else os.path.join(args.expdir, pslot) - nens = args.nens - cdump = args.cdump - gfs_cyc = args.gfs_cyc - partition = args.partition - - # Set machine defaults - if machine == 'WCOSS_DELL_P3': - base_git = '/gpfs/dell2/emc/modeling/noscrub/emc.glopara/git' - base_svn = '/gpfs/dell2/emc/modeling/noscrub/emc.glopara/git' - dmpdir = '/gpfs/dell3/emc/global/dump' - nwprod = '${NWROOT:-"/gpfs/dell1/nco/ops/nwprod"}' - comroot = '${COMROOT:-"/gpfs/dell1/nco/ops/com"}' - homedir = '/gpfs/dell2/emc/modeling/noscrub/$USER' - stmp = '/gpfs/dell3/stmp/$USER' - ptmp = '/gpfs/dell3/ptmp/$USER' - noscrub = '/gpfs/dell2/emc/modeling/noscrub/$USER' - account = 'GFS-DEV' - queue = 'dev' - queue_arch = 'dev_transfer' - if partition in ['3p5']: - queue = 'dev2' - queue_arch = 'dev2_transfer' - elif machine == 'WCOSS_C': - base_git = '/gpfs/hps3/emc/global/noscrub/emc.glopara/git' - base_svn = '/gpfs/hps3/emc/global/noscrub/emc.glopara/svn' - dmpdir = '/gpfs/dell3/emc/global/dump' - nwprod = '${NWROOT:-"/gpfs/hps/nco/ops/nwprod"}' - comroot = '${COMROOT:-"/gpfs/hps/nco/ops/com"}' - homedir = '/gpfs/hps3/emc/global/noscrub/$USER' - stmp = '/gpfs/hps2/stmp/$USER' - ptmp = '/gpfs/hps2/ptmp/$USER' - noscrub = '/gpfs/hps3/emc/global/noscrub/$USER' - account = 'GFS-DEV' - queue = 'dev' - queue_arch = 'dev_transfer' - elif machine == 'HERA': - base_git = '/scratch1/NCEPDEV/global/glopara/git' - base_svn = '/scratch1/NCEPDEV/global/glopara/svn' - dmpdir = '/scratch1/NCEPDEV/global/glopara/dump' - nwprod = '/scratch1/NCEPDEV/global/glopara/nwpara' - comroot = '/scratch1/NCEPDEV/rstprod/com' - homedir = '/scratch1/NCEPDEV/global/$USER' - stmp = '/scratch1/NCEPDEV/stmp2/$USER' - ptmp = '/scratch1/NCEPDEV/stmp4/$USER' - noscrub = '$HOMEDIR' - account = 'fv3-cpu' - queue = 'batch' - queue_arch = 'service' - - if args.icsdir is not None and not os.path.exists(icsdir): - msg = 'Initial conditions do not exist in %s' % icsdir - raise IOError(msg) - - # COMROT directory - if args.icsdir is None: - create_comrot = False - else: - create_comrot = True - if os.path.exists(comrot): - print - print 'COMROT already exists in %s' % comrot - print - overwrite_comrot = raw_input('Do you wish to over-write COMROT [y/N]: ') - create_comrot = True if overwrite_comrot in ['y', 'yes', 'Y', 'YES'] else False - if create_comrot: - shutil.rmtree(comrot) - - if create_comrot: - create_COMROT() - - # EXP directory - create_expdir = True - if os.path.exists(expdir): - print - print 'EXPDIR already exists in %s' % expdir - print - overwrite_expdir = raw_input('Do you wish to over-write EXPDIR [y/N]: ') - create_expdir = True if overwrite_expdir in ['y', 'yes', 'Y', 'YES'] else False - if create_expdir: - shutil.rmtree(expdir) - - if create_expdir: - create_EXPDIR() - edit_baseconfig() - - sys.exit(0) diff --git a/ush/rocoto/setup_expt_fcstonly.py b/ush/rocoto/setup_expt_fcstonly.py deleted file mode 100755 index 65236719da..0000000000 --- a/ush/rocoto/setup_expt_fcstonly.py +++ /dev/null @@ -1,205 +0,0 @@ -#!/usr/bin/env python - -############################################################### -# < next few lines under version control, D O N O T E D I T > -# $Date$ -# $Revision$ -# $Author$ -# $Id$ -############################################################### - -import os -import sys -import glob -import shutil -import socket -from datetime import datetime -from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter -import workflow_utils as wfu - -global expdir, configdir, comrot, pslot, res, idate, edate, gfs_cyc - - -def makedirs_if_missing(d): - if not os.path.exists(d): - os.makedirs(d) - - -def create_EXPDIR(): - - makedirs_if_missing(expdir) - configs = glob.glob('%s/config.*' % configdir) - if len(configs) == 0: - msg = 'no config files found in %s' % configdir - raise IOError(msg) - for config in configs: - shutil.copy(config, expdir) - - return - - -def create_COMROT(): - - makedirs_if_missing(comrot) - - return - - -def edit_baseconfig(): - - base_config = '%s/config.base' % expdir - - here = os.path.dirname(__file__) - top = os.path.abspath(os.path.join(os.path.abspath(here), '../..')) - - # make a copy of the default before editing - shutil.copy(base_config, base_config + '.default') - - print '\nSDATE = %s\nEDATE = %s' % (idate, edate) - with open(base_config + '.default', 'rt') as fi: - with open(base_config + '.new', 'wt') as fo: - for line in fi: - line = line.replace('@MACHINE@', machine.upper()) \ - .replace('@PSLOT@', pslot) \ - .replace('@SDATE@', idate.strftime('%Y%m%d%H')) \ - .replace('@EDATE@', edate.strftime('%Y%m%d%H')) \ - .replace('@CASECTL@', 'C%d' % res) \ - .replace('@HOMEgfs@', top) \ - .replace('@BASE_GIT@', base_git) \ - .replace('@DMPDIR@', dmpdir) \ - .replace('@NWPROD@', nwprod) \ - .replace('@COMROOT@', comroot) \ - .replace('@HOMEDIR@', homedir) \ - .replace('@STMP@', stmp) \ - .replace('@PTMP@', ptmp) \ - .replace('@NOSCRUB@', noscrub) \ - .replace('@ACCOUNT@', account) \ - .replace('@QUEUE@', queue) \ - .replace('@QUEUE_ARCH@', queue_arch) \ - .replace('@gfs_cyc@', '%d' % gfs_cyc) - if expdir is not None: - line = line.replace('@EXPDIR@', os.path.dirname(expdir)) - if comrot is not None: - line = line.replace('@ROTDIR@', os.path.dirname(comrot)) - line = line.replace('@ICSDIR@', os.path.join(os.path.dirname(comrot), 'FV3ICS')) - fo.write(line) - os.unlink(base_config) - os.rename(base_config + '.new', base_config) - - print '' - print 'EDITED: %s/config.base as per user input.' % expdir - print 'DEFAULT: %s/config.base.default is for reference only.' % expdir - print 'Please verify and delete the default file before proceeding.' - print '' - - return - - -if __name__ == '__main__': - - description = '''Setup files and directories to start a GFS parallel. -Create EXPDIR, copy config files -Create COMROT experiment directory structure''' - - parser = ArgumentParser(description=description, formatter_class=ArgumentDefaultsHelpFormatter) - parser.add_argument('--pslot', help='parallel experiment name', type=str, required=False, default='test') - parser.add_argument('--res', help='resolution of the model forecast', type=int, required=False, default=192) - parser.add_argument('--comrot', help='full path to COMROT', type=str, required=False, default=None) - parser.add_argument('--expdir', help='full path to EXPDIR', type=str, required=False, default=None) - parser.add_argument('--idate', help='starting date of experiment, initial conditions must exist!', type=str, required=True) - parser.add_argument('--edate', help='end date experiment', type=str, required=True) - parser.add_argument('--configdir', help='full path to directory containing the config files', type=str, required=False, default=None) - parser.add_argument('--gfs_cyc', help='GFS cycles to run', type=int, choices=[0, 1, 2, 4], default=1, required=False) - parser.add_argument('--partition', help='partition on machine', type=str, required=False, default=None) - - args = parser.parse_args() - - machine = wfu.detectMachine() - - configdir = args.configdir - if not configdir: - configdir = os.path.abspath(os.path.dirname(__file__) + '/../parm/config') - - pslot = args.pslot - idate = datetime.strptime(args.idate, '%Y%m%d%H') - edate = datetime.strptime(args.edate, '%Y%m%d%H') - res = args.res - comrot = args.comrot if args.comrot is None else os.path.join(args.comrot, pslot) - expdir = args.expdir if args.expdir is None else os.path.join(args.expdir, pslot) - gfs_cyc = args.gfs_cyc - partition = args.partition - - # Set machine defaults - if machine == 'WCOSS_DELL_P3': - base_git = '/gpfs/dell2/emc/modeling/noscrub/emc.glopara/git' - base_svn = '/gpfs/dell2/emc/modeling/noscrub/emc.glopara/git' - dmpdir = '/gpfs/dell3/emc/global/dump' - nwprod = '${NWROOT:-"/gpfs/dell1/nco/ops/nwprod"}' - comroot = '${COMROOT:-"/gpfs/dell1/nco/ops/com"}' - homedir = '/gpfs/dell2/emc/modeling/noscrub/$USER' - stmp = '/gpfs/dell3/stmp/$USER' - ptmp = '/gpfs/dell3/ptmp/$USER' - noscrub = '/gpfs/dell2/emc/modeling/noscrub/$USER' - account = 'GFS-DEV' - queue = 'dev' - queue_arch = 'dev_transfer' - if partition in ['3p5']: - queue = 'dev2' - queue_arch = 'dev2_transfer' - elif machine == 'WCOSS_C': - base_git = '/gpfs/hps3/emc/global/noscrub/emc.glopara/git' - base_svn = '/gpfs/hps3/emc/global/noscrub/emc.glopara/svn' - dmpdir = '/gpfs/dell3/emc/global/dump' - nwprod = '${NWROOT:-"/gpfs/hps/nco/ops/nwprod"}' - comroot = '${COMROOT:-"/gpfs/hps/nco/ops/com"}' - homedir = '/gpfs/hps3/emc/global/noscrub/$USER' - stmp = '/gpfs/hps2/stmp/$USER' - ptmp = '/gpfs/hps2/ptmp/$USER' - noscrub = '/gpfs/hps3/emc/global/noscrub/$USER' - account = 'GFS-DEV' - queue = 'dev' - queue_arch = 'dev_transfer' - elif machine == 'HERA': - base_git = '/scratch1/NCEPDEV/global/glopara/git' - base_svn = '/scratch1/NCEPDEV/global/glopara/svn' - dmpdir = '/scratch1/NCEPDEV/global/glopara/dump' - nwprod = '/scratch1/NCEPDEV/global/glopara/nwpara' - comroot = '/scratch1/NCEPDEV/rstprod/com' - homedir = '/scratch1/NCEPDEV/global/$USER' - stmp = '/scratch1/NCEPDEV/stmp2/$USER' - ptmp = '/scratch1/NCEPDEV/stmp4/$USER' - noscrub = '$HOMEDIR' - account = 'fv3-cpu' - queue = 'batch' - queue_arch = 'service' - - # COMROT directory - create_comrot = True - if os.path.exists(comrot): - print - print 'COMROT already exists in %s' % comrot - print - overwrite_comrot = raw_input('Do you wish to over-write COMROT [y/N]: ') - create_comrot = True if overwrite_comrot in ['y', 'yes', 'Y', 'YES'] else False - if create_comrot: - shutil.rmtree(comrot) - - if create_comrot: - create_COMROT() - - # EXP directory - create_expdir = True - if os.path.exists(expdir): - print - print 'EXPDIR already exists in %s' % expdir - print - overwrite_expdir = raw_input('Do you wish to over-write EXPDIR [y/N]: ') - create_expdir = True if overwrite_expdir in ['y', 'yes', 'Y', 'YES'] else False - if create_expdir: - shutil.rmtree(expdir) - - if create_expdir: - create_EXPDIR() - edit_baseconfig() - - sys.exit(0) diff --git a/ush/rocoto/setup_workflow.py b/ush/rocoto/setup_workflow.py deleted file mode 100755 index 7d3b184be7..0000000000 --- a/ush/rocoto/setup_workflow.py +++ /dev/null @@ -1,1244 +0,0 @@ -#!/usr/bin/env python - -''' - PROGRAM: - Create the ROCOTO workflow given the configuration of the GFS parallel - - AUTHOR: - Rahul.Mahajan - rahul.mahajan@noaa.gov - - FILE DEPENDENCIES: - 1. config files for the parallel; e.g. config.base, config.fcst[.gfs], etc. - Without these dependencies, the script will fail - - OUTPUT: - 1. PSLOT.xml: XML workflow - 2. PSLOT.crontab: crontab for ROCOTO run command -''' - -import os -import sys -import re -import numpy as np -from datetime import datetime, timedelta -from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter -from collections import OrderedDict -import rocoto -import workflow_utils as wfu - -def main(): - parser = ArgumentParser(description='Setup XML workflow and CRONTAB for a GFS parallel.', formatter_class=ArgumentDefaultsHelpFormatter) - parser.add_argument('--expdir', help='full path to experiment directory containing config files', type=str, required=False, default=os.environ['PWD']) - args = parser.parse_args() - - configs = wfu.get_configs(args.expdir) - - _base = wfu.config_parser([wfu.find_config('config.base', configs)]) - - if not os.path.samefile(args.expdir, _base['EXPDIR']): - print 'MISMATCH in experiment directories!' - print 'config.base: EXPDIR = %s' % repr(_base['EXPDIR']) - print 'input arg: --expdir = %s' % repr(args.expdir) - sys.exit(1) - - gfs_steps = ['prep', 'anal', 'analdiag', 'analcalc', 'gldas', 'fcst', 'postsnd', 'post', 'vrfy', 'arch'] - gfs_steps_gempak = ['gempak'] - gfs_steps_awips = ['awips'] - gfs_steps_wafs = ['wafs', 'wafsgrib2', 'wafsblending', 'wafsgcip', 'wafsgrib20p25', 'wafsblending0p25'] - #hyb_steps = ['eobs', 'eomg', 'eupd', 'ecen', 'efcs', 'epos', 'earc'] - metp_steps = ['metp'] - wav_steps = ['waveinit', 'waveprep', 'wavepostsbs'] - #Implement additional wave jobs at later date - #wav_steps = ['waveinit', 'waveprep', 'wavepostsbs', 'wavepost', 'wavestat'] - wav_steps_gempak = ['wavegempak'] - wav_steps_awips = ['waveawipsbulls', 'waveawipsgridded'] -# From gfsv16b latest -# gfs_steps = ['prep', 'anal', 'gldas', 'fcst', 'postsnd', 'post', 'awips', 'gempak', 'vrfy', 'metp', 'arch'] - hyb_steps = ['eobs', 'ediag', 'eomg', 'eupd', 'ecen', 'esfc', 'efcs', 'echgres', 'epos', 'earc'] - - steps = gfs_steps + hyb_steps if _base.get('DOHYBVAR', 'NO') == 'YES' else gfs_steps - steps = steps + metp_steps if _base.get('DO_METP', 'NO') == 'YES' else steps - steps = steps + gfs_steps_gempak if _base.get('DO_GEMPAK', 'NO') == 'YES' else steps - steps = steps + gfs_steps_awips if _base.get('DO_AWIPS', 'NO') == 'YES' else steps - steps = steps + gfs_steps_wafs if _base.get('WAFSF', 'NO') == 'YES' else steps - steps = steps + wav_steps if _base.get('DO_WAVE', 'NO') == 'YES' else steps - steps = steps + wav_steps_gempak if _base.get('DO_GEMPAK', 'NO') == 'YES' else steps - steps = steps + wav_steps_awips if _base.get('DO_AWIPS', 'NO') == 'YES' else steps - - dict_configs = wfu.source_configs(configs, steps) - - # Check and set gfs_cyc specific variables - if dict_configs['base']['gfs_cyc'] != 0: - dict_configs['base'] = get_gfs_cyc_dates(dict_configs['base']) - - # First create workflow XML - create_xml(dict_configs) - - # Next create the crontab - wfu.create_crontab(dict_configs['base']) - - return - - -def get_gfs_cyc_dates(base): - ''' - Generate GFS dates from experiment dates and gfs_cyc choice - ''' - - base_out = base.copy() - - gfs_cyc = base['gfs_cyc'] - sdate = base['SDATE'] - edate = base['EDATE'] - - interval_gfs = wfu.get_gfs_interval(gfs_cyc) - - # Set GFS cycling dates - hrdet = 0 - if gfs_cyc == 1: - hrinc = 24 - sdate.hour - hrdet = edate.hour - elif gfs_cyc == 2: - if sdate.hour in [0, 12]: - hrinc = 12 - elif sdate.hour in [6, 18]: - hrinc = 6 - if edate.hour in [6, 18]: - hrdet = 6 - elif gfs_cyc == 4: - hrinc = 6 - sdate_gfs = sdate + timedelta(hours=hrinc) - edate_gfs = edate - timedelta(hours=hrdet) - if sdate_gfs > edate: - print 'W A R N I N G!' - print 'Starting date for GFS cycles is after Ending date of experiment' - print 'SDATE = %s, EDATE = %s' % (sdate.strftime('%Y%m%d%H'), edate.strftime('%Y%m%d%H')) - print 'SDATE_GFS = %s, EDATE_GFS = %s' % (sdate_gfs.strftime('%Y%m%d%H'), edate_gfs.strftime('%Y%m%d%H')) - gfs_cyc = 0 - - base_out['gfs_cyc'] = gfs_cyc - base_out['SDATE_GFS'] = sdate_gfs - base_out['EDATE_GFS'] = edate_gfs - base_out['INTERVAL_GFS'] = interval_gfs - - fhmax_gfs = {} - for hh in ['00', '06', '12', '18']: - fhmax_gfs[hh] = base.get('FHMAX_GFS_%s' % hh, 'FHMAX_GFS_00') - base_out['FHMAX_GFS'] = fhmax_gfs - - return base_out - - -def get_preamble(): - ''' - Generate preamble for XML - ''' - - strings = [] - - strings.append('\n') - strings.append('\n') - - return ''.join(strings) - - -def get_definitions(base): - ''' - Create entities related to the experiment - ''' - - machine = base.get('machine', wfu.detectMachine()) - scheduler = wfu.get_scheduler(machine) - - strings = [] - - strings.append('\n') - strings.append('\t\n') - strings.append('\t\n' % base['PSLOT']) - strings.append('\t\n' % base['SDATE'].strftime('%Y%m%d%H%M')) - strings.append('\t\n' % base['EDATE'].strftime('%Y%m%d%H%M')) - - if base['gfs_cyc'] != 0: - strings.append(get_gfs_dates(base)) - strings.append('\n') - - strings.append('\t\n') - strings.append('\t\n' % base['RUN_ENVIR']) - strings.append('\n') - strings.append('\t\n') - strings.append('\t\n' % base['EXPDIR']) - strings.append('\t\n' % base['ROTDIR']) - strings.append('\n') - strings.append('\t\n') - strings.append('\t\n' % base['HOMEgfs']) - strings.append('\t\n' % base['BASE_JOB']) - strings.append('\t\n' % base['DMPDIR']) - strings.append('\n') - strings.append('\t\n') - strings.append('\t\n' % base['ACCOUNT']) - - strings.append('\t\n' % base['QUEUE']) - strings.append('\t\n' % base['QUEUE_ARCH']) - if scheduler in ['slurm']: - strings.append('\t\n' % base['QUEUE_ARCH']) - strings.append('\t\n' % scheduler) - strings.append('\n') - strings.append('\t\n') - strings.append('\t\n') - strings.append('\n') - strings.append('\t\n') - strings.append('\t\n') - strings.append('\t\n') - strings.append('\t\n') - strings.append('\n') - - return ''.join(strings) - - -def get_gfs_dates(base): - ''' - Generate GFS dates entities - ''' - - strings = [] - - strings.append('\n') - strings.append('\t\n') - strings.append('\t\n' % base['SDATE_GFS'].strftime('%Y%m%d%H%M')) - strings.append('\t\n' % base['EDATE_GFS'].strftime('%Y%m%d%H%M')) - strings.append('\t\n' % base['INTERVAL_GFS']) - - return ''.join(strings) - - -def get_gdasgfs_resources(dict_configs, cdump='gdas'): - ''' - Create GDAS or GFS resource entities - ''' - - base = dict_configs['base'] - machine = base.get('machine', wfu.detectMachine()) - scheduler = wfu.get_scheduler(machine) - do_bufrsnd = base.get('DO_BUFRSND', 'NO').upper() - do_gempak = base.get('DO_GEMPAK', 'NO').upper() - do_awips = base.get('DO_AWIPS', 'NO').upper() - do_wafs = base.get('WAFSF', 'NO').upper() - do_metp = base.get('DO_METP', 'NO').upper() - do_gldas = base.get('DO_GLDAS', 'NO').upper() - do_wave = base.get('DO_WAVE', 'NO').upper() - do_waveprdgen = base.get('DO_WAVEPRDGEN', 'NO').upper() - do_wave_cdump = base.get('WAVE_CDUMP', 'BOTH').upper() - reservation = base.get('RESERVATION', 'NONE').upper() - - #tasks = ['prep', 'anal', 'fcst', 'post', 'vrfy', 'arch'] - tasks = ['prep', 'anal', 'analcalc'] - - if cdump in ['gdas']: - tasks += ['analdiag'] - if cdump in ['gdas'] and do_gldas in ['Y', 'YES']: - tasks += ['gldas'] - if cdump in ['gdas'] and do_wave in ['Y', 'YES'] and do_wave_cdump in ['GDAS', 'BOTH']: - #tasks += ['waveinit', 'waveprep', 'wavepostsbs', 'wavepost', 'wavestat'] - tasks += ['waveinit', 'waveprep', 'wavepostsbs'] - - tasks += ['fcst', 'post', 'vrfy', 'arch'] - - if cdump in ['gfs'] and do_wave in ['Y', 'YES'] and do_wave_cdump in ['GFS', 'BOTH']: - #tasks += ['waveinit', 'waveprep', 'wavepostsbs', 'wavepost', 'wavestat'] - tasks += ['waveinit', 'waveprep', 'wavepostsbs'] - if cdump in ['gfs'] and do_bufrsnd in ['Y', 'YES']: - tasks += ['postsnd'] - if cdump in ['gfs'] and do_gempak in ['Y', 'YES']: - tasks += ['gempak'] - if cdump in ['gfs'] and do_wave in ['Y', 'YES'] and do_gempak in ['Y', 'YES']: - tasks += ['wavegempak'] - if cdump in ['gfs'] and do_awips in ['Y', 'YES']: - tasks += ['awips'] - if cdump in ['gfs'] and do_wafs in ['Y', 'YES']: - tasks += ['wafs', 'wafsgrib2', 'wafsblending', 'wafsgcip', 'wafsgrib20p25', 'wafsblending0p25'] - if cdump in ['gfs'] and do_metp in ['Y', 'YES']: - tasks += ['metp'] - if cdump in ['gfs'] and do_wave in ['Y', 'YES'] and do_awips in ['Y', 'YES']: - tasks += ['waveawipsbulls', 'waveawipsgridded'] - - dict_resources = OrderedDict() - - for task in tasks: - - cfg = dict_configs[task] - - wtimestr, resstr, queuestr, memstr, natstr = wfu.get_resources(machine, cfg, task, reservation, cdump=cdump) - taskstr = '%s_%s' % (task.upper(), cdump.upper()) - - strings = [] - strings.append('\t\n' % (taskstr, queuestr)) - if scheduler in ['slurm'] and task in ['arch']: - strings.append('\t\n' % taskstr ) - strings.append('\t\n' % (taskstr, wtimestr)) - strings.append('\t\n' % (taskstr, resstr)) - if len(memstr) != 0: - strings.append('\t\n' % (taskstr, memstr)) - strings.append('\t\n' % (taskstr, natstr)) - - dict_resources['%s%s' % (cdump, task)] = ''.join(strings) - - return dict_resources - - -def get_hyb_resources(dict_configs): - ''' - Create hybrid resource entities - ''' - - base = dict_configs['base'] - machine = base.get('machine', wfu.detectMachine()) - scheduler = wfu.get_scheduler(machine) - lobsdiag_forenkf = base.get('lobsdiag_forenkf', '.false.').upper() - eupd_cyc= base.get('EUPD_CYC', 'gdas').upper() - reservation = base.get('RESERVATION', 'NONE').upper() - - dict_resources = OrderedDict() - - # These tasks can be run in either or both cycles - if lobsdiag_forenkf in ['.T.', '.TRUE.']: - tasks1 = ['eobs', 'ediag', 'eupd', 'echgres'] - else: - tasks1 = ['eobs', 'eomg', 'eupd', 'echgres'] - - if eupd_cyc in ['BOTH']: - cdumps = ['gfs', 'gdas'] - elif eupd_cyc in ['GFS']: - cdumps = ['gfs'] - elif eupd_cyc in ['GDAS']: - cdumps = ['gdas'] - - for cdump in cdumps: - for task in tasks1: - - cfg = dict_configs['eobs'] if task in ['eomg'] else dict_configs[task] - - wtimestr, resstr, queuestr, memstr, natstr = wfu.get_resources(machine, cfg, task, reservation, cdump=cdump) - - taskstr = '%s_%s' % (task.upper(), cdump.upper()) - - strings = [] - - strings.append('\t\n' % (taskstr, queuestr)) - strings.append('\t\n' % (taskstr, wtimestr)) - strings.append('\t\n' % (taskstr, resstr)) - if len(memstr) != 0: - strings.append('\t\n' % (taskstr, memstr)) - strings.append('\t\n' % (taskstr, natstr)) - - dict_resources['%s%s' % (cdump, task)] = ''.join(strings) - - - # These tasks are always run as part of the GDAS cycle - cdump = 'gdas' - tasks2 = ['ecen', 'esfc', 'efcs', 'epos', 'earc'] - for task in tasks2: - - cfg = dict_configs[task] - - wtimestr, resstr, queuestr, memstr, natstr = wfu.get_resources(machine, cfg, task, reservation, cdump=cdump) - - taskstr = '%s_%s' % (task.upper(), cdump.upper()) - - strings = [] - strings.append('\t\n' % (taskstr, queuestr)) - if scheduler in ['slurm'] and task in ['earc']: - strings.append('\t\n' % taskstr ) - strings.append('\t\n' % (taskstr, wtimestr)) - strings.append('\t\n' % (taskstr, resstr)) - if len(memstr) != 0: - strings.append('\t\n' % (taskstr, memstr)) - strings.append('\t\n' % (taskstr, natstr)) - - dict_resources['%s%s' % (cdump, task)] = ''.join(strings) - - return dict_resources - - -def get_gdasgfs_tasks(dict_configs, cdump='gdas'): - ''' - Create GDAS or GFS tasks - ''' - - envars = [] - if wfu.get_scheduler(wfu.detectMachine()) in ['slurm']: - envars.append(rocoto.create_envar(name='SLURM_SET', value='YES')) - envars.append(rocoto.create_envar(name='RUN_ENVIR', value='&RUN_ENVIR;')) - envars.append(rocoto.create_envar(name='HOMEgfs', value='&HOMEgfs;')) - envars.append(rocoto.create_envar(name='EXPDIR', value='&EXPDIR;')) - envars.append(rocoto.create_envar(name='CDATE', value='@Y@m@d@H')) - envars.append(rocoto.create_envar(name='CDUMP', value='%s' % cdump)) - envars.append(rocoto.create_envar(name='PDY', value='@Y@m@d')) - envars.append(rocoto.create_envar(name='cyc', value='@H')) - - base = dict_configs['base'] - gfs_cyc = base.get('gfs_cyc', 0) - gldas_cyc = base.get('gldas_cyc', 0) - dohybvar = base.get('DOHYBVAR', 'NO').upper() - eupd_cyc = base.get('EUPD_CYC', 'gdas').upper() - do_bufrsnd = base.get('DO_BUFRSND', 'NO').upper() - do_gempak = base.get('DO_GEMPAK', 'NO').upper() - do_awips = base.get('DO_AWIPS', 'NO').upper() - do_wafs = base.get('WAFSF', 'NO').upper() - do_metp = base.get('DO_METP', 'NO').upper() - do_gldas = base.get('DO_GLDAS', 'NO').upper() - do_wave = base.get('DO_WAVE', 'NO').upper() - do_wave_cdump = base.get('WAVE_CDUMP', 'BOTH').upper() - dumpsuffix = base.get('DUMP_SUFFIX', '') - gridsuffix = base.get('SUFFIX', '') - - dict_tasks = OrderedDict() - - # prep - deps = [] - dep_dict = {'type': 'metatask', 'name': '%spost' % 'gdas', 'offset': '-06:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ROTDIR;/gdas.@Y@m@d/@H/atmos/gdas.t@Hz.atmf009%s' % (gridsuffix) - dep_dict = {'type': 'data', 'data': data, 'offset': '-06:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&DMPDIR;/%s%s.@Y@m@d/@H/%s.t@Hz.updated.status.tm00.bufr_d' % (cdump, dumpsuffix, cdump) - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - - gfs_enkf = True if eupd_cyc in ['BOTH', 'GFS'] and dohybvar in ['Y', 'YES'] else False - - if gfs_enkf and cdump in ['gfs']: - if gfs_cyc == 4: - task = wfu.create_wf_task('prep', cdump=cdump, envar=envars, dependency=dependencies) - else: - task = wfu.create_wf_task('prep', cdump=cdump, envar=envars, dependency=dependencies, cycledef='gdas') - - else: - task = wfu.create_wf_task('prep', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks['%sprep' % cdump] = task - - # wave tasks in gdas or gfs or both - if do_wave_cdump in ['BOTH']: - cdumps = ['gfs', 'gdas'] - elif do_wave_cdump in ['GFS']: - cdumps = ['gfs'] - elif do_wave_cdump in ['GDAS']: - cdumps = ['gdas'] - - # waveinit - if do_wave in ['Y', 'YES'] and cdump in cdumps: - deps = [] - dep_dict = {'type': 'task', 'name': '%sprep' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': '-06:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='or', dep=deps) - task = wfu.create_wf_task('waveinit', cdump=cdump, envar=envars, dependency=dependencies) - dict_tasks['%swaveinit' % cdump] = task - - # waveprep - if do_wave in ['Y', 'YES'] and cdump in cdumps: - deps = [] - dep_dict = {'type': 'task', 'name': '%swaveinit' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('waveprep', cdump=cdump, envar=envars, dependency=dependencies) - dict_tasks['%swaveprep' % cdump] = task - - # anal - deps = [] - dep_dict = {'type': 'task', 'name': '%sprep' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - if dohybvar in ['y', 'Y', 'yes', 'YES']: - dep_dict = {'type': 'metatask', 'name': '%sepmn' % 'gdas', 'offset': '-06:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - else: - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('anal', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks['%sanal' % cdump] = task - - # analcalc - deps = [] - data = '&ROTDIR;/%s.@Y@m@d/@H/atmos/%s.t@Hz.loginc.txt' % (cdump, cdump) - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': '%sanal' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - if dohybvar in ['y', 'Y', 'yes', 'YES'] and cdump == 'gdas': - dep_dict = {'type': 'task', 'name': '%sechgres' % 'gdas', 'offset': '-06:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - else: - dependencies = rocoto.create_dependency(dep_condition='or', dep=deps) - task = wfu.create_wf_task('analcalc', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks['%sanalcalc' % cdump] = task - - # analdiag - if cdump in ['gdas']: - deps = [] - data = '&ROTDIR;/%s.@Y@m@d/@H/atmos/%s.t@Hz.loginc.txt' % (cdump, cdump) - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': '%sanal' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='or', dep=deps) - task = wfu.create_wf_task('analdiag', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks['%sanaldiag' % cdump] = task - - # gldas - if cdump in ['gdas'] and do_gldas in ['Y', 'YES']: - deps = [] - data = '&ROTDIR;/%s.@Y@m@d/@H/atmos/%s.t@Hz.loginc.txt' % (cdump, cdump) - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': '%sanal' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='or', dep=deps) - task = wfu.create_wf_task('gldas', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks['%sgldas' % cdump] = task - - # fcst - deps = [] - #data = '&ROTDIR;/%s.@Y@m@d/@H/atmos/%s.t@Hz.loginc.txt' % (cdump, cdump) - #dep_dict = {'type': 'data', 'data': data} -# #deps.append(rocoto.add_dependency(dep_dict)) - if do_wave in ['Y', 'YES'] and cdump in cdumps: - dep_dict = {'type': 'task', 'name': '%swaveprep' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - if cdump in ['gdas']: - if do_gldas in ['Y', 'YES']: - dep_dict = {'type': 'task', 'name': '%sgldas' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - else: - dep_dict = {'type': 'task', 'name': '%sanalcalc' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - # dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': '-06:00:00'} - # deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='or',dep=deps) - elif cdump in ['gfs']: - dep_dict = {'type': 'task', 'name': '%sanal' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and',dep=deps) - task = wfu.create_wf_task('fcst', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks['%sfcst' % cdump] = task - - # post - deps = [] - data = '&ROTDIR;/%s.@Y@m@d/@H/atmos/%s.t@Hz.log#dep#.txt' % (cdump, cdump) - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': '%sfcst' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='or', dep=deps) - fhrgrp = rocoto.create_envar(name='FHRGRP', value='#grp#') - fhrlst = rocoto.create_envar(name='FHRLST', value='#lst#') - ROTDIR = rocoto.create_envar(name='ROTDIR', value='&ROTDIR;') - postenvars = envars + [fhrgrp] + [fhrlst] + [ROTDIR] - varname1, varname2, varname3 = 'grp', 'dep', 'lst' - varval1, varval2, varval3 = get_postgroups(dict_configs['post'], cdump=cdump) - vardict = {varname2: varval2, varname3: varval3} - task = wfu.create_wf_task('post', cdump=cdump, envar=postenvars, dependency=dependencies, - metatask='post', varname=varname1, varval=varval1, vardict=vardict) - - dict_tasks['%spost' % cdump] = task - - # wavepostsbs - if do_wave in ['Y', 'YES'] and cdump in cdumps: - deps = [] - data = '&ROTDIR;/%s.@Y@m@d/@H/wave/rundata/%swave.out_grd.gnh_10m.@Y@m@d.@H0000' % (cdump,cdump) - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ROTDIR;/%s.@Y@m@d/@H/wave/rundata/%swave.out_grd.aoc_9km.@Y@m@d.@H0000' % (cdump,cdump) - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ROTDIR;/%s.@Y@m@d/@H/wave/rundata/%swave.out_grd.gsh_15m.@Y@m@d.@H0000' % (cdump,cdump) - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('wavepostsbs', cdump=cdump, envar=envars, dependency=dependencies) - dict_tasks['%swavepostsbs' % cdump] = task - - # wavegempak - if do_wave in ['Y', 'YES'] and do_gempak in ['Y', 'YES'] and cdump in ['gfs']: - deps = [] - dep_dict = {'type':'task', 'name':'%swavepostsbs' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('wavegempak', cdump=cdump, envar=envars, dependency=dependencies) - dict_tasks['%swavegempak' % cdump] = task - - # waveawipsgridded - if do_wave in ['Y', 'YES'] and do_awips in ['Y', 'YES'] and cdump in ['gfs']: - deps = [] - dep_dict = {'type':'task', 'name':'%swavepostsbs' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('waveawipsgridded', cdump=cdump, envar=envars, dependency=dependencies) - dict_tasks['%swaveawipsgridded' % cdump] = task - - # waveawipsbulls - if do_wave in ['Y', 'YES'] and do_awips in ['Y', 'YES'] and cdump in ['gfs']: - deps = [] - dep_dict = {'type':'task', 'name':'%swavepostsbs' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('waveawipsbulls', cdump=cdump, envar=envars, dependency=dependencies) - dict_tasks['%swaveawipsbulls' % cdump] = task - - # wavestat - #if do_wave in ['Y', 'YES'] and cdump in cdumps: - # deps = [] - # dep_dict = {'type':'task', 'name':'%swavepost' % cdump} - # deps.append(rocoto.add_dependency(dep_dict)) - # dependencies = rocoto.create_dependency(dep=deps) - # task = wfu.create_wf_task('wavestat', cdump=cdump, envar=envars, dependency=dependencies) - # dict_tasks['%swavestat' % cdump] = task - - # vrfy - deps = [] - dep_dict = {'type': 'metatask', 'name': '%spost' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('vrfy', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks['%svrfy' % cdump] = task - - # metp - if cdump in ['gfs'] and do_metp in ['Y', 'YES']: - deps = [] - dep_dict = {'type':'metatask', 'name':'%spost' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type':'task', 'name':'%sarch' % cdump, 'offset':'-&INTERVAL_GFS;'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - metpcase = rocoto.create_envar(name='METPCASE', value='#metpcase#') - metpenvars = envars + [metpcase] - varname1 = 'metpcase' - varval1 = 'g2g1 g2o1 pcp1' - task = wfu.create_wf_task('metp', cdump=cdump, envar=metpenvars, dependency=dependencies, - metatask='metp', varname=varname1, varval=varval1) - dict_tasks['%smetp' % cdump] = task - - #postsnd - if cdump in ['gfs'] and do_bufrsnd in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'task', 'name': '%sfcst' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('postsnd', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks['%spostsnd' % cdump] = task - - # awips - if cdump in ['gfs'] and do_awips in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'metatask', 'name': '%spost' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('awips', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks['%sawips' % cdump] = task - - # gempak - if cdump in ['gfs'] and do_gempak in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'metatask', 'name': '%spost' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('gempak', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks['%sgempak' % cdump] = task - - # wafs - if cdump in ['gfs'] and do_wafs in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'metatask', 'name': '%spost' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('wafs', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks['%swafs' % cdump] = task - - # wafsgcip - if cdump in ['gfs'] and do_wafs in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'metatask', 'name': '%spost' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('wafsgcip', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks['%swafsgcip' % cdump] = task - - # wafsgrib2 - if cdump in ['gfs'] and do_wafs in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'metatask', 'name': '%spost' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('wafsgrib2', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks['%swafsgrib2' % cdump] = task - - # wafsgrib20p25 - if cdump in ['gfs'] and do_wafs in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'metatask', 'name': '%spost' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('wafsgrib20p25', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks['%swafsgrib20p25' % cdump] = task - - # wafsblending - if cdump in ['gfs'] and do_wafs in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'task', 'name': '%swafsgrib2' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('wafsblending', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks['%swafsblending' % cdump] = task - - # wafsblending0p25 - if cdump in ['gfs'] and do_wafs in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'task', 'name': '%swafsgrib20p25' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('wafsblending0p25', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks['%swafsblending0p25' % cdump] = task - - # arch - deps = [] - dep_dict = {'type': 'task', 'name': '%svrfy' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'streq', 'left': '&ARCHIVE_TO_HPSS;', 'right': 'YES'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('arch', cdump=cdump, envar=envars, dependency=dependencies) - - dict_tasks['%sarch' % cdump] = task - - return dict_tasks - - -def get_hyb_tasks(dict_configs, cycledef='enkf'): - ''' - Create Hybrid tasks - ''' - - # Determine groups based on ensemble size and grouping - base = dict_configs['base'] - nens = base['NMEM_ENKF'] - lobsdiag_forenkf = base.get('lobsdiag_forenkf', '.false.').upper() - eupd_cyc = base.get('EUPD_CYC', 'gdas').upper() - - eobs = dict_configs['eobs'] - nens_eomg = eobs['NMEM_EOMGGRP'] - neomg_grps = nens / nens_eomg - EOMGGROUPS = ' '.join(['%02d' % x for x in range(1, neomg_grps + 1)]) - - efcs = dict_configs['efcs'] - nens_efcs = efcs['NMEM_EFCSGRP'] - nefcs_grps = nens / nens_efcs - EFCSGROUPS = ' '.join(['%02d' % x for x in range(1, nefcs_grps + 1)]) - - earc = dict_configs['earc'] - nens_earc = earc['NMEM_EARCGRP'] - nearc_grps = nens / nens_earc - EARCGROUPS = ' '.join(['%02d' % x for x in range(0, nearc_grps + 1)]) - - envars = [] - if wfu.get_scheduler(wfu.detectMachine()) in ['slurm']: - envars.append(rocoto.create_envar(name='SLURM_SET', value='YES')) - envars.append(rocoto.create_envar(name='RUN_ENVIR', value='&RUN_ENVIR;')) - envars.append(rocoto.create_envar(name='HOMEgfs', value='&HOMEgfs;')) - envars.append(rocoto.create_envar(name='EXPDIR', value='&EXPDIR;')) - envars.append(rocoto.create_envar(name='CDATE', value='@Y@m@d@H')) - #envars.append(rocoto.create_envar(name='CDUMP', value='%s' % cdump)) - envars.append(rocoto.create_envar(name='PDY', value='@Y@m@d')) - envars.append(rocoto.create_envar(name='cyc', value='@H')) - - ensgrp = rocoto.create_envar(name='ENSGRP', value='#grp#') - - dict_tasks = OrderedDict() - - if eupd_cyc in ['BOTH']: - cdumps = ['gfs', 'gdas'] - elif eupd_cyc in ['GFS']: - cdumps = ['gfs'] - elif eupd_cyc in ['GDAS']: - cdumps = ['gdas'] - - for cdump in cdumps: - - envar_cdump = rocoto.create_envar(name='CDUMP', value='%s' % cdump) - envars1 = envars + [envar_cdump] - - # eobs - deps = [] - dep_dict = {'type': 'task', 'name': '%sprep' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': '%sepmn' % 'gdas', 'offset': '-06:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('eobs', cdump=cdump, envar=envars1, dependency=dependencies, cycledef=cycledef) - - dict_tasks['%seobs' % cdump] = task - - # eomn, eomg - if lobsdiag_forenkf in ['.F.', '.FALSE.']: - deps = [] - dep_dict = {'type': 'task', 'name': '%seobs' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - eomgenvars= envars1 + [ensgrp] - task = wfu.create_wf_task('eomg', cdump=cdump, envar=eomgenvars, dependency=dependencies, - metatask='eomn', varname='grp', varval=EOMGGROUPS, cycledef=cycledef) - - dict_tasks['%seomn' % cdump] = task - - # ediag - else: - deps = [] - dep_dict = {'type': 'task', 'name': '%seobs' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('ediag', cdump=cdump, envar=envars1, dependency=dependencies, cycledef=cycledef) - - dict_tasks['%sediag' % cdump] = task - - # eupd - deps = [] - if lobsdiag_forenkf in ['.F.', '.FALSE.']: - dep_dict = {'type': 'metatask', 'name': '%seomn' % cdump} - else: - dep_dict = {'type': 'task', 'name': '%sediag' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('eupd', cdump=cdump, envar=envars1, dependency=dependencies, cycledef=cycledef) - - dict_tasks['%seupd' % cdump] = task - - # All hybrid tasks beyond this point are always executed in the GDAS cycle - cdump = 'gdas' - envar_cdump = rocoto.create_envar(name='CDUMP', value='%s' % cdump) - envars1 = envars + [envar_cdump] - cdump_eupd = 'gfs' if eupd_cyc in ['GFS'] else 'gdas' - - # ecmn, ecen - deps1 = [] - data = '&ROTDIR;/%s.@Y@m@d/@H/atmos/%s.t@Hz.loganl.txt' % (cdump, cdump) - dep_dict = {'type': 'data', 'data': data} - deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': '%sanalcalc' % cdump} - deps1.append(rocoto.add_dependency(dep_dict)) - dependencies1 = rocoto.create_dependency(dep_condition='or', dep=deps1) - - deps2 = [] - deps2 = dependencies1 - dep_dict = {'type': 'task', 'name': '%seupd' % cdump_eupd} - deps2.append(rocoto.add_dependency(dep_dict)) - dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) - - fhrgrp = rocoto.create_envar(name='FHRGRP', value='#grp#') - fhrlst = rocoto.create_envar(name='FHRLST', value='#lst#') - ecenenvars = envars1 + [fhrgrp] + [fhrlst] - varname1, varname2, varname3 = 'grp', 'dep', 'lst' - varval1, varval2, varval3 = get_ecengroups(dict_configs, dict_configs['ecen'], cdump=cdump) - vardict = {varname2: varval2, varname3: varval3} - task = wfu.create_wf_task('ecen', cdump=cdump, envar=ecenenvars, dependency=dependencies2, - metatask='ecmn', varname=varname1, varval=varval1, vardict=vardict) - - dict_tasks['%secmn' % cdump] = task - - # esfc - deps1 = [] - data = '&ROTDIR;/%s.@Y@m@d/@H/atmos/%s.t@Hz.loganl.txt' % (cdump, cdump) - dep_dict = {'type': 'data', 'data': data} - deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': '%sanalcalc' % cdump} - deps1.append(rocoto.add_dependency(dep_dict)) - dependencies1 = rocoto.create_dependency(dep_condition='or', dep=deps1) - - deps2 = [] - deps2 = dependencies1 - dep_dict = {'type': 'task', 'name': '%seupd' % cdump_eupd} - deps2.append(rocoto.add_dependency(dep_dict)) - dependencies2 = rocoto.create_dependency(dep_condition='and', dep=deps2) - task = wfu.create_wf_task('esfc', cdump=cdump, envar=envars1, dependency=dependencies2, cycledef=cycledef) - - dict_tasks['%sesfc' % cdump] = task - - # efmn, efcs - deps1 = [] - dep_dict = {'type': 'metatask', 'name': '%secmn' % cdump} - deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'task', 'name': '%sesfc' % cdump} - deps1.append(rocoto.add_dependency(dep_dict)) - dependencies1 = rocoto.create_dependency(dep_condition='and', dep=deps1) - - deps2 = [] - deps2 = dependencies1 - dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': '-06:00:00'} - deps2.append(rocoto.add_dependency(dep_dict)) - dependencies2 = rocoto.create_dependency(dep_condition='or', dep=deps2) - - efcsenvars = envars1 + [ensgrp] - task = wfu.create_wf_task('efcs', cdump=cdump, envar=efcsenvars, dependency=dependencies2, - metatask='efmn', varname='grp', varval=EFCSGROUPS, cycledef=cycledef) - - dict_tasks['%sefmn' % cdump] = task - - # echgres - deps1 = [] - dep_dict = {'type': 'task', 'name': '%sfcst' % cdump} - deps1.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type': 'metatask', 'name': '%sefmn' % cdump} - deps1.append(rocoto.add_dependency(dep_dict)) - dependencies1 = rocoto.create_dependency(dep_condition='and', dep=deps1) - task = wfu.create_wf_task('echgres', cdump=cdump, envar=envars1, dependency=dependencies1, cycledef=cycledef) - - dict_tasks['%sechgres' % cdump] = task - - # epmn, epos - deps = [] - dep_dict = {'type': 'metatask', 'name': '%sefmn' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - fhrgrp = rocoto.create_envar(name='FHRGRP', value='#grp#') - fhrlst = rocoto.create_envar(name='FHRLST', value='#lst#') - eposenvars = envars1 + [fhrgrp] + [fhrlst] - varname1, varname2, varname3 = 'grp', 'dep', 'lst' - varval1, varval2, varval3 = get_eposgroups(dict_configs['epos'], cdump=cdump) - vardict = {varname2: varval2, varname3: varval3} - task = wfu.create_wf_task('epos', cdump=cdump, envar=eposenvars, dependency=dependencies, - metatask='epmn', varname=varname1, varval=varval1, vardict=vardict) - - dict_tasks['%sepmn' % cdump] = task - - # eamn, earc - deps = [] - dep_dict = {'type': 'metatask', 'name': '%sepmn' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - earcenvars = envars1 + [ensgrp] - task = wfu.create_wf_task('earc', cdump=cdump, envar=earcenvars, dependency=dependencies, - metatask='eamn', varname='grp', varval=EARCGROUPS, cycledef=cycledef) - - dict_tasks['%seamn' % cdump] = task - - return dict_tasks - - -def get_workflow_header(base): - ''' - Create the workflow header block - ''' - - strings = [] - - strings.append('\n') - strings.append(']>\n') - strings.append('\n') - strings.append('\n') - strings.append('\n') - strings.append('\t&EXPDIR;/logs/@Y@m@d@H.log\n') - strings.append('\n') - strings.append('\t\n') - strings.append('\t&SDATE; &SDATE; 06:00:00\n') - strings.append('\t&SDATE; &EDATE; 06:00:00\n') - strings.append('\t&SDATE; &EDATE; 06:00:00\n') - if base['gfs_cyc'] != 0: - strings.append('\t&SDATE_GFS; &EDATE_GFS; &INTERVAL_GFS;\n') - - strings.append('\n') - - return ''.join(strings) - - -def get_workflow_footer(): - ''' - Generate workflow footer - ''' - - strings = [] - strings.append('\n\n') - - return ''.join(strings) - - -def get_postgroups(post, cdump='gdas'): - - fhmin = post['FHMIN'] - fhmax = post['FHMAX'] - fhout = post['FHOUT'] - - # Get a list of all forecast hours - if cdump in ['gdas']: - fhrs = range(fhmin, fhmax+fhout, fhout) - elif cdump in ['gfs']: - fhmax = np.max([post['FHMAX_GFS_00'],post['FHMAX_GFS_06'],post['FHMAX_GFS_12'],post['FHMAX_GFS_18']]) - fhout = post['FHOUT_GFS'] - fhmax_hf = post['FHMAX_HF_GFS'] - fhout_hf = post['FHOUT_HF_GFS'] - fhrs_hf = range(fhmin, fhmax_hf+fhout_hf, fhout_hf) - fhrs = fhrs_hf + range(fhrs_hf[-1]+fhout, fhmax+fhout, fhout) - - npostgrp = post['NPOSTGRP'] - ngrps = npostgrp if len(fhrs) > npostgrp else len(fhrs) - - fhrs = ['f%03d' % f for f in fhrs] - fhrs = np.array_split(fhrs, ngrps) - fhrs = [f.tolist() for f in fhrs] - - fhrgrp = ' '.join(['%03d' % x for x in range(0, ngrps+1)]) - fhrdep = ' '.join(['anl'] + [f[-1] for f in fhrs]) - fhrlst = ' '.join(['anl'] + ['_'.join(f) for f in fhrs]) - - return fhrgrp, fhrdep, fhrlst - -def get_awipsgroups(awips, cdump='gdas'): - - fhmin = awips['FHMIN'] - fhmax = awips['FHMAX'] - fhout = awips['FHOUT'] - - # Get a list of all forecast hours - if cdump in ['gdas']: - fhrs = range(fhmin, fhmax+fhout, fhout) - elif cdump in ['gfs']: - fhmax = np.max([awips['FHMAX_GFS_00'],awips['FHMAX_GFS_06'],awips['FHMAX_GFS_12'],awips['FHMAX_GFS_18']]) - fhout = awips['FHOUT_GFS'] - fhmax_hf = awips['FHMAX_HF_GFS'] - fhout_hf = awips['FHOUT_HF_GFS'] - if fhmax > 240: - fhmax = 240 - if fhmax_hf > 240: - fhmax_hf = 240 - fhrs_hf = range(fhmin, fhmax_hf+fhout_hf, fhout_hf) - fhrs = fhrs_hf + range(fhrs_hf[-1]+fhout, fhmax+fhout, fhout) - - nawipsgrp = awips['NAWIPSGRP'] - ngrps = nawipsgrp if len(fhrs) > nawipsgrp else len(fhrs) - - fhrs = ['f%03d' % f for f in fhrs] - fhrs = np.array_split(fhrs, ngrps) - fhrs = [f.tolist() for f in fhrs] - - fhrgrp = ' '.join(['%03d' % x for x in range(0, ngrps)]) - fhrdep = ' '.join([f[-1] for f in fhrs]) - fhrlst = ' '.join(['_'.join(f) for f in fhrs]) - - return fhrgrp, fhrdep, fhrlst - -def get_ecengroups(dict_configs, ecen, cdump='gdas'): - - base = dict_configs['base'] - - if base.get('DOIAU_ENKF', 'NO') == 'YES' : - fhrs = list(base.get('IAUFHRS','6').split(',')) - ifhrs = ['f00%01s' % f for f in fhrs] - ifhrs0 = ifhrs[0] - nfhrs = len(fhrs) - - ifhrs = ['f00%01s' % f for f in fhrs] - ifhrs0 = ifhrs[0] - nfhrs = len(fhrs) - - necengrp = ecen['NECENGRP'] - ngrps = necengrp if len(fhrs) > necengrp else len(fhrs) - - ifhrs = np.array_split(ifhrs, ngrps) - - fhrgrp = ' '.join(['%03d' % x for x in range(0, ngrps)]) - fhrdep = ' '.join([f[-1] for f in ifhrs]) - fhrlst = ' '.join(['_'.join(f) for f in ifhrs]) - - else: - fhrgrp='000' - fhrdep='f006' - fhrlst='f006' - - return fhrgrp, fhrdep, fhrlst - -def get_eposgroups(epos, cdump='gdas'): - - fhmin = epos['FHMIN_ENKF'] - fhmax = epos['FHMAX_ENKF'] - fhout = epos['FHOUT_ENKF'] - fhrs = range(fhmin, fhmax+fhout, fhout) - - neposgrp = epos['NEPOSGRP'] - ngrps = neposgrp if len(fhrs) > neposgrp else len(fhrs) - - fhrs = ['f%03d' % f for f in fhrs] - fhrs = np.array_split(fhrs, ngrps) - fhrs = [f.tolist() for f in fhrs] - - fhrgrp = ' '.join(['%03d' % x for x in range(0, ngrps)]) - fhrdep = ' '.join([f[-1] for f in fhrs]) - fhrlst = ' '.join(['_'.join(f) for f in fhrs]) - - return fhrgrp, fhrdep, fhrlst - - -def dict_to_strings(dict_in): - - strings = [] - for key in dict_in.keys(): - strings.append(dict_in[key]) - strings.append('\n') - - return ''.join(strings) - - -def create_xml(dict_configs): - ''' - Given an dictionary of sourced config files, - create the workflow XML - ''' - - from __builtin__ import any as b_any - - base = dict_configs['base'] - dohybvar = base.get('DOHYBVAR', 'NO').upper() - gfs_cyc = base.get('gfs_cyc', 0) - eupd_cyc = base.get('EUPD_CYC', 'gdas').upper() - - # Start collecting workflow pieces - preamble = get_preamble() - definitions = get_definitions(base) - workflow_header = get_workflow_header(base) - workflow_footer = get_workflow_footer() - - # Get GDAS related entities, resources, workflow - dict_gdas_resources = get_gdasgfs_resources(dict_configs) - dict_gdas_tasks = get_gdasgfs_tasks(dict_configs) - - # Get hybrid related entities, resources, workflow - if dohybvar in ['Y', 'YES']: - - dict_hyb_resources = get_hyb_resources(dict_configs) - dict_hyb_tasks = get_hyb_tasks(dict_configs) - - # Removes &MEMORY_JOB_DUMP post mortem from hyb tasks - hyp_tasks = {'gdaseobs':'gdaseobs', - 'gdasediag':'gdasediag', - 'gdaseomg':'gdaseomn', - 'gdaseupd':'gdaseupd', - 'gdasecen':'gdasecmn', - 'gdasesfc':'gdasesfc', - 'gdasefcs':'gdasefmn', - 'gdasepos':'gdasepmn', - 'gdasearc':'gdaseamn', - 'gdasechgres':'gdasechgres'} - for each_task, each_resource_string in dict_hyb_resources.iteritems(): - #print each_task,hyp_tasks[each_task] - #print dict_hyb_tasks[hyp_tasks[each_task]] - if 'MEMORY' not in each_resource_string: - if each_task in dict_hyb_tasks: - temp_task_string = [] - for each_line in re.split(r'(\s+)', dict_hyb_tasks[each_task]): - if 'memory' not in each_line: - temp_task_string.append(each_line) - dict_hyb_tasks[each_task] = ''.join(temp_task_string) - if hyp_tasks[each_task] in dict_hyb_tasks: - temp_task_string = [] - for each_line in re.split(r'(\s+)', dict_hyb_tasks[hyp_tasks[each_task]]): - if 'memory' not in each_line: - temp_task_string.append(each_line) - dict_hyb_tasks[hyp_tasks[each_task]] = ''.join(temp_task_string) - - # Get GFS cycle related entities, resources, workflow - dict_gfs_resources = get_gdasgfs_resources(dict_configs, cdump='gfs') - dict_gfs_tasks = get_gdasgfs_tasks(dict_configs, cdump='gfs') - - # Removes &MEMORY_JOB_DUMP post mortem from gdas tasks - for each_task, each_resource_string in dict_gdas_resources.iteritems(): - if each_task not in dict_gdas_tasks: - continue - if 'MEMORY' not in each_resource_string: - temp_task_string = [] - for each_line in re.split(r'(\s+)', dict_gdas_tasks[each_task]): - if 'memory' not in each_line: - temp_task_string.append(each_line) - dict_gdas_tasks[each_task] = ''.join(temp_task_string) - - # Removes &MEMORY_JOB_DUMP post mortem from gfs tasks - for each_task, each_resource_string in dict_gfs_resources.iteritems(): - if each_task not in dict_gfs_tasks: - continue - if 'MEMORY' not in each_resource_string: - temp_task_string = [] - for each_line in re.split(r'(\s+)', dict_gfs_tasks[each_task]): - if 'memory' not in each_line: - temp_task_string.append(each_line) - dict_gfs_tasks[each_task] = ''.join(temp_task_string) - - # Put together the XML file - xmlfile = [] - - xmlfile.append(preamble) - - xmlfile.append(definitions) - - xmlfile.append(dict_to_strings(dict_gdas_resources)) - - if dohybvar in ['Y', 'YES']: - xmlfile.append(dict_to_strings(dict_hyb_resources)) - - if gfs_cyc != 0: - xmlfile.append(dict_to_strings(dict_gfs_resources)) - elif gfs_cyc == 0 and dohybvar in ['Y', 'YES'] and eupd_cyc in ['BOTH', 'GFS']: - xmlfile.append(dict_gfs_resources['gfsprep']) - - xmlfile.append(workflow_header) - - xmlfile.append(dict_to_strings(dict_gdas_tasks)) - - if dohybvar in ['Y', 'YES']: - xmlfile.append(dict_to_strings(dict_hyb_tasks)) - - if gfs_cyc != 0: - xmlfile.append(dict_to_strings(dict_gfs_tasks)) - elif gfs_cyc == 0 and dohybvar in ['Y', 'YES'] and eupd_cyc in ['BOTH', 'GFS']: - xmlfile.append(dict_gfs_tasks['gfsprep']) - xmlfile.append('\n') - - xmlfile.append(wfu.create_firstcyc_task()) - - xmlfile.append(workflow_footer) - - # Write the XML file - fh = open('%s/%s.xml' % (base['EXPDIR'], base['PSLOT']), 'w') - fh.write(''.join(xmlfile)) - fh.close() - - return - - -if __name__ == '__main__': - main() - sys.exit(0) diff --git a/ush/rocoto/setup_workflow_fcstonly.py b/ush/rocoto/setup_workflow_fcstonly.py deleted file mode 100755 index 1b3c91b5c7..0000000000 --- a/ush/rocoto/setup_workflow_fcstonly.py +++ /dev/null @@ -1,585 +0,0 @@ -#!/usr/bin/env python - -''' - PROGRAM: - Create the ROCOTO workflow for a forecast only experiment given the configuration of the GFS parallel - - AUTHOR: - Rahul.Mahajan - rahul.mahajan@noaa.gov - - FILE DEPENDENCIES: - 1. config files for the parallel; e.g. config.base, config.fcst[.gfs], etc. - Without this dependency, the script will fail - - OUTPUT: - 1. PSLOT.xml: XML workflow - 2. PSLOT.crontab: crontab for ROCOTO run command - -''' - -import os -import sys -import re -import numpy as np -from datetime import datetime -from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter -import rocoto -import workflow_utils as wfu - -#taskplan = ['getic', 'fv3ic', 'waveinit', 'waveprep', 'fcst', 'post', 'wavepostsbs', 'wavegempak', 'waveawipsbulls', 'waveawipsgridded', 'wavepost', 'wavestat', 'wafs', 'wafsgrib2', 'wafsblending', 'wafsgcip', 'wafsgrib20p25', 'wafsblending0p25', 'vrfy', 'metp', 'arch'] -taskplan = ['getic', 'fv3ic', 'waveinit', 'waveprep', 'fcst', 'post', 'wavepostsbs', 'wavegempak', 'waveawipsbulls', 'waveawipsgridded', 'wafs', 'wafsgrib2', 'wafsblending', 'wafsgcip', 'wafsgrib20p25', 'wafsblending0p25', 'vrfy', 'metp', 'arch'] - -def main(): - parser = ArgumentParser(description='Setup XML workflow and CRONTAB for a forecast only experiment.', formatter_class=ArgumentDefaultsHelpFormatter) - parser.add_argument('--expdir',help='full path to experiment directory containing config files', type=str, required=False, default=os.environ['PWD']) - parser.add_argument('--cdump',help='cycle to run forecasts', type=str, choices=['gdas', 'gfs'], default='gfs', required=False) - - args = parser.parse_args() - - configs = wfu.get_configs(args.expdir) - - _base = wfu.config_parser([wfu.find_config('config.base', configs)]) - - if not os.path.samefile(args.expdir,_base['EXPDIR']): - print 'MISMATCH in experiment directories!' - print 'config.base: EXPDIR = %s' % repr(_base['EXPDIR']) - print 'input arg: --expdir = %s' % repr(args.expdir) - sys.exit(1) - - dict_configs = wfu.source_configs(configs, taskplan) - - dict_configs['base']['CDUMP'] = args.cdump - - # First create workflow XML - create_xml(dict_configs) - - # Next create the crontab - wfu.create_crontab(dict_configs['base']) - - return - - -def get_preamble(): - ''' - Generate preamble for XML - ''' - - strings = [] - - strings.append('\n') - strings.append('\n') - - return ''.join(strings) - - -def get_definitions(base): - ''' - Create entities related to the experiment - ''' - - machine = base.get('machine', wfu.detectMachine()) - scheduler = wfu.get_scheduler(machine) - - strings = [] - - strings.append('\n') - strings.append('\t\n') - strings.append('\t\n' % base['PSLOT']) - strings.append('\t\n' % base['CDUMP']) - strings.append('\t\n' % base['CASE']) - strings.append('\n') - strings.append('\t\n') - strings.append('\t\n' % base['SDATE'].strftime('%Y%m%d%H%M')) - strings.append('\t\n' % base['EDATE'].strftime('%Y%m%d%H%M')) - if base['INTERVAL'] is None: - print 'cycle INTERVAL cannot be None' - sys.exit(1) - strings.append('\t\n' % base['INTERVAL']) - strings.append('\n') - strings.append('\t\n') - strings.append('\t\n' % base['RUN_ENVIR']) - strings.append('\n') - strings.append('\t\n') - strings.append('\t\n' % base['EXPDIR']) - strings.append('\t\n' % base['ROTDIR']) - strings.append('\t\n' % base['ICSDIR']) - strings.append('\n') - strings.append('\t\n') - strings.append('\t\n' % base['HOMEgfs']) - strings.append('\t\n' % base['BASE_JOB']) - strings.append('\n') - strings.append('\t\n') - strings.append('\t\n' % base['ACCOUNT']) - strings.append('\t\n' % base['QUEUE']) - strings.append('\t\n' % base['QUEUE_ARCH']) - if scheduler in ['slurm']: - strings.append('\t\n' % base['QUEUE_ARCH']) - strings.append('\t\n' % scheduler) - strings.append('\n') - strings.append('\t\n') - strings.append('\t\n') - strings.append('\n') - strings.append('\t\n') - strings.append('\t\n') - strings.append('\t\n') - strings.append('\t\n') - strings.append('\n') - - return ''.join(strings) - - -def get_resources(dict_configs, cdump='gdas'): - ''' - Create resource entities - ''' - - strings = [] - - strings.append('\t\n') - strings.append('\n') - - base = dict_configs['base'] - machine = base.get('machine', wfu.detectMachine()) - reservation = base.get('RESERVATION', 'NONE').upper() - scheduler = wfu.get_scheduler(machine) - - do_wave = base.get('DO_WAVE', 'NO').upper() - do_gempak = base.get('DO_GEMPAK', 'NO').upper() - do_awips = base.get('DO_AWIPS', 'NO').upper() - do_metp = base.get('DO_METP', 'NO').upper() - - for task in taskplan: - - cfg = dict_configs[task] - - wtimestr, resstr, queuestr, memstr, natstr = wfu.get_resources(machine, cfg, task, reservation, cdump=cdump) - - taskstr = '%s_%s' % (task.upper(), cdump.upper()) - - strings.append('\t\n' % (taskstr, queuestr)) - if scheduler in ['slurm'] and task in ['getic', 'arch']: - strings.append('\t\n' % taskstr ) - strings.append('\t\n' % (taskstr, wtimestr)) - strings.append('\t\n' % (taskstr, resstr)) - if len(memstr) != 0: - strings.append('\t\n' % (taskstr, memstr)) - strings.append('\t\n' % (taskstr, natstr)) - - strings.append('\n') - - strings.append('\t\n') - - return ''.join(strings) - - -def get_postgroups(post, cdump='gdas'): - - fhmin = post['FHMIN'] - fhmax = post['FHMAX'] - fhout = post['FHOUT'] - - # Get a list of all forecast hours - if cdump in ['gdas']: - fhrs = range(fhmin, fhmax+fhout, fhout) - elif cdump in ['gfs']: - fhmax = np.max([post['FHMAX_GFS_00'],post['FHMAX_GFS_06'],post['FHMAX_GFS_12'],post['FHMAX_GFS_18']]) - fhout = post['FHOUT_GFS'] - fhmax_hf = post['FHMAX_HF_GFS'] - fhout_hf = post['FHOUT_HF_GFS'] - fhrs_hf = range(fhmin, fhmax_hf+fhout_hf, fhout_hf) - fhrs = fhrs_hf + range(fhrs_hf[-1]+fhout, fhmax+fhout, fhout) - - npostgrp = post['NPOSTGRP'] - ngrps = npostgrp if len(fhrs) > npostgrp else len(fhrs) - - fhrs = ['f%03d' % f for f in fhrs] - fhrs = np.array_split(fhrs, ngrps) - fhrs = [f.tolist() for f in fhrs] - - fhrgrp = ' '.join(['%03d' % x for x in range(1, ngrps+1)]) - fhrdep = ' '.join([f[-1] for f in fhrs]) - fhrlst = ' '.join(['_'.join(f) for f in fhrs]) - - return fhrgrp, fhrdep, fhrlst - - -def get_workflow(dict_configs, cdump='gdas'): - ''' - Create tasks for forecast only workflow - ''' - - envars = [] - envars.append(rocoto.create_envar(name='RUN_ENVIR', value='&RUN_ENVIR;')) - envars.append(rocoto.create_envar(name='HOMEgfs', value='&HOMEgfs;')) - envars.append(rocoto.create_envar(name='EXPDIR', value='&EXPDIR;')) - envars.append(rocoto.create_envar(name='CDATE', value='@Y@m@d@H')) - envars.append(rocoto.create_envar(name='CDUMP', value='&CDUMP;')) - envars.append(rocoto.create_envar(name='PDY', value='@Y@m@d')) - envars.append(rocoto.create_envar(name='cyc', value='@H')) - - base = dict_configs['base'] - do_wave = base.get('DO_WAVE', 'NO').upper() - do_gempak = base.get('DO_GEMPAK', 'NO').upper() - do_awips = base.get('DO_AWIPS', 'NO').upper() - do_wafs = base.get('WAFSF', 'NO').upper() - do_metp = base.get('DO_METP', 'NO').upper() - - tasks = [] - - # getics - deps = [] - data = '&ICSDIR;/@Y@m@d@H/&CDUMP;/&CDUMP;.@Y@m@d/@H/siganl.&CDUMP;.@Y@m@d@H' - dep_dict = {'type':'data', 'data':data} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ICSDIR;/@Y@m@d@H/&CDUMP;/&CDUMP;.@Y@m@d/@H/&CDUMP;.t@Hz.sanl' - dep_dict = {'type':'data', 'data':data} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ICSDIR;/@Y@m@d@H/&CDUMP;/&CDUMP;.@Y@m@d/@H/gfnanl.&CDUMP;.@Y@m@d@H' - dep_dict = {'type':'data', 'data':data} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ICSDIR;/@Y@m@d@H/&CDUMP;/&CDUMP;.@Y@m@d/@H/&CDUMP;.t@Hz.atmanl.nemsio' - dep_dict = {'type':'data', 'data':data} - deps.append(rocoto.add_dependency(dep_dict)) - deps = rocoto.create_dependency(dep_condition='or', dep=deps) - dependencies = rocoto.create_dependency(dep_condition='not', dep=deps) - task = wfu.create_wf_task('getic', cdump=cdump, envar=envars, dependency=dependencies) - tasks.append(task) - tasks.append('\n') - - # chgres fv3ic - deps = [] - data = '&ICSDIR;/@Y@m@d@H/&CDUMP;/&CDUMP;.@Y@m@d/@H/siganl.&CDUMP;.@Y@m@d@H' - dep_dict = {'type':'data', 'data':data} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ICSDIR;/@Y@m@d@H/&CDUMP;/&CDUMP;.@Y@m@d/@H/&CDUMP;.t@Hz.sanl' - dep_dict = {'type':'data', 'data':data} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ICSDIR;/@Y@m@d@H/&CDUMP;/&CDUMP;.@Y@m@d/@H/gfnanl.&CDUMP;.@Y@m@d@H' - dep_dict = {'type':'data', 'data':data} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ICSDIR;/@Y@m@d@H/&CDUMP;/&CDUMP;.@Y@m@d/@H/&CDUMP;.t@Hz.atmanl.nemsio' - dep_dict = {'type':'data', 'data':data} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='or', dep=deps) - - deps = [] - data = '&ICSDIR;/@Y@m@d@H/&CDUMP;/&CASE;/INPUT/gfs_data.tile6.nc' - dep_dict = {'type':'data', 'data':data} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ICSDIR;/@Y@m@d@H/&CDUMP;/&CASE;/INPUT/sfc_data.tile6.nc' - dep_dict = {'type':'data', 'data':data} - deps.append(rocoto.add_dependency(dep_dict)) - deps = rocoto.create_dependency(dep_condition='and', dep=deps) - dependencies2 = rocoto.create_dependency(dep_condition='not', dep=deps) - - deps = [] - deps.append(dependencies) - deps.append(dependencies2) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - - task = wfu.create_wf_task('fv3ic', cdump=cdump, envar=envars, dependency=dependencies) - tasks.append(task) - tasks.append('\n') - - # waveinit - if do_wave in ['Y', 'YES']: - task = wfu.create_wf_task('waveinit', cdump=cdump, envar=envars) - tasks.append(task) - tasks.append('\n') - - # waveprep - if do_wave in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'task', 'name': '%swaveinit' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('waveprep', cdump=cdump, envar=envars, dependency=dependencies) - tasks.append(task) - tasks.append('\n') - - # fcst - deps = [] - data = '&ICSDIR;/@Y@m@d@H/&CDUMP;/&CASE;/INPUT/gfs_data.tile6.nc' - dep_dict = {'type':'data', 'data':data} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ICSDIR;/@Y@m@d@H/&CDUMP;/&CASE;/INPUT/sfc_data.tile6.nc' - dep_dict = {'type':'data', 'data':data} - deps.append(rocoto.add_dependency(dep_dict)) - if do_wave in ['Y', 'YES']: - dep_dict = {'type': 'task', 'name': '%swaveprep' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('fcst', cdump=cdump, envar=envars, dependency=dependencies) - tasks.append(task) - tasks.append('\n') - - # post - deps = [] - data = '&ROTDIR;/%s.@Y@m@d/@H/atmos/%s.t@Hz.log#dep#.txt' % (cdump, cdump) - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - fhrgrp = rocoto.create_envar(name='FHRGRP', value='#grp#') - fhrlst = rocoto.create_envar(name='FHRLST', value='#lst#') - ROTDIR = rocoto.create_envar(name='ROTDIR', value='&ROTDIR;') - postenvars = envars + [fhrgrp] + [fhrlst] + [ROTDIR] - varname1, varname2, varname3 = 'grp', 'dep', 'lst' - varval1, varval2, varval3 = get_postgroups(dict_configs['post'], cdump=cdump) - vardict = {varname2: varval2, varname3: varval3} - task = wfu.create_wf_task('post', cdump=cdump, envar=postenvars, dependency=dependencies, - metatask='post', varname=varname1, varval=varval1, vardict=vardict) - tasks.append(task) - tasks.append('\n') - - # wavepostsbs - if do_wave in ['Y', 'YES']: - deps = [] - data = '&ROTDIR;/%s.@Y@m@d/@H/wave/rundata/%swave.out_grd.gnh_10m.@Y@m@d.@H0000' % (cdump,cdump) - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ROTDIR;/%s.@Y@m@d/@H/wave/rundata/%swave.out_grd.aoc_9km.@Y@m@d.@H0000' % (cdump,cdump) - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - data = '&ROTDIR;/%s.@Y@m@d/@H/wave/rundata/%swave.out_grd.gsh_15m.@Y@m@d.@H0000' % (cdump,cdump) - dep_dict = {'type': 'data', 'data': data} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('wavepostsbs', cdump=cdump, envar=envars, dependency=dependencies) - tasks.append(task) - tasks.append('\n') - - # wavepost - #if do_wave in ['Y', 'YES']: - # deps = [] - # dep_dict = {'type':'task', 'name':'%sfcst' % cdump} - # deps.append(rocoto.add_dependency(dep_dict)) - # dep_dict = {'type':'task', 'name':'%swavepostsbs' % cdump} - # deps.append(rocoto.add_dependency(dep_dict)) - # dependencies = rocoto.create_dependency(dep=deps) - # task = wfu.create_wf_task('wavepost', cdump=cdump, envar=envars, dependency=dependencies) - # tasks.append(task) - # tasks.append('\n') - - # wavestat - #if do_wave in ['Y', 'YES']: - # deps = [] - # dep_dict = {'type':'task', 'name':'%swavepost' % cdump} - # deps.append(rocoto.add_dependency(dep_dict)) - # dependencies = rocoto.create_dependency(dep=deps) - # task = wfu.create_wf_task('wavestat', cdump=cdump, envar=envars, dependency=dependencies) - # tasks.append(task) - # tasks.append('\n') - - # wavegempak - if do_wave in ['Y', 'YES'] and do_gempak in ['Y', 'YES']: - deps = [] - dep_dict = {'type':'task', 'name':'%swavepostsbs' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('wavegempak', cdump=cdump, envar=envars, dependency=dependencies) - tasks.append(task) - tasks.append('\n') - - # waveawipsbulls - if do_wave in ['Y', 'YES'] and do_awips in ['Y', 'YES']: - deps = [] - dep_dict = {'type':'task', 'name':'%swavepostsbs' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('waveawipsbulls', cdump=cdump, envar=envars, dependency=dependencies) - tasks.append(task) - tasks.append('\n') - - # waveawipsgridded - if do_wave in ['Y', 'YES'] and do_awips in ['Y', 'YES']: - deps = [] - dep_dict = {'type':'task', 'name':'%swavepostsbs' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('waveawipsgridded', cdump=cdump, envar=envars, dependency=dependencies) - tasks.append(task) - tasks.append('\n') - - # wafs - if do_wafs in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'metatask', 'name': '%spost' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('wafs', cdump=cdump, envar=envars, dependency=dependencies) - tasks.append(task) - tasks.append('\n') - - # wafsgcip - if do_wafs in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'metatask', 'name': '%spost' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('wafsgcip', cdump=cdump, envar=envars, dependency=dependencies) - tasks.append(task) - tasks.append('\n') - - # wafsgrib2 - if do_wafs in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'metatask', 'name': '%spost' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('wafsgrib2', cdump=cdump, envar=envars, dependency=dependencies) - tasks.append(task) - tasks.append('\n') - - # wafsgrib20p25 - if do_wafs in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'metatask', 'name': '%spost' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('wafsgrib20p25', cdump=cdump, envar=envars, dependency=dependencies) - tasks.append(task) - tasks.append('\n') - - # wafsblending - if do_wafs in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'task', 'name': '%swafsgrib2' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('wafsblending', cdump=cdump, envar=envars, dependency=dependencies) - tasks.append(task) - tasks.append('\n') - - # wafsblending0p25 - if do_wafs in ['Y', 'YES']: - deps = [] - dep_dict = {'type': 'task', 'name': '%swafsgrib20p25' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('wafsblending0p25', cdump=cdump, envar=envars, dependency=dependencies) - tasks.append(task) - tasks.append('\n') - - # vrfy - deps = [] - dep_dict = {'type':'metatask', 'name':'%spost' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep=deps) - task = wfu.create_wf_task('vrfy', cdump=cdump, envar=envars, dependency=dependencies) - tasks.append(task) - tasks.append('\n') - - # metp - if do_metp in ['Y', 'YES']: - deps = [] - dep_dict = {'type':'metatask', 'name':'%spost' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type':'task', 'name':'%sarch' % cdump, 'offset':'-&INTERVAL;'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - metpcase = rocoto.create_envar(name='METPCASE', value='#metpcase#') - metpenvars = envars + [metpcase] - varname1 = 'metpcase' - varval1 = 'g2g1 g2o1 pcp1' - task = wfu.create_wf_task('metp', cdump=cdump, envar=metpenvars, dependency=dependencies, - metatask='metp', varname=varname1, varval=varval1) - tasks.append(task) - tasks.append('\n') - - # arch - deps = [] - dep_dict = {'type':'metatask', 'name':'%spost' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type':'task', 'name':'%svrfy' % cdump} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type':'streq', 'left':'&ARCHIVE_TO_HPSS;', 'right':'YES'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - task = wfu.create_wf_task('arch', cdump=cdump, envar=envars, dependency=dependencies, final=True) - tasks.append(task) - tasks.append('\n') - - return ''.join(tasks) - - -def get_workflow_body(dict_configs, cdump='gdas'): - ''' - Create the workflow body - ''' - - strings = [] - - strings.append('\n') - strings.append(']>\n') - strings.append('\n') - strings.append('\n') - strings.append('\n') - strings.append('\t&EXPDIR;/logs/@Y@m@d@H.log\n') - strings.append('\n') - strings.append('\t\n') - strings.append('\t&SDATE; &EDATE; &INTERVAL;\n' % cdump) - strings.append('\n') - strings.append(get_workflow(dict_configs, cdump=cdump)) - strings.append('\n') - strings.append('\n') - - return ''.join(strings) - - -def create_xml(dict_configs): - ''' - Given an experiment directory containing config files and - XML directory containing XML templates, create the workflow XML - ''' - - - dict_configs['base']['INTERVAL'] = wfu.get_gfs_interval(dict_configs['base']['gfs_cyc']) - base = dict_configs['base'] - - preamble = get_preamble() - definitions = get_definitions(base) - resources = get_resources(dict_configs, cdump=base['CDUMP']) - workflow = get_workflow_body(dict_configs, cdump=base['CDUMP']) - - # Removes &MEMORY_JOB_DUMP post mortem from gdas tasks - temp_workflow = '' - memory_dict = [] - for each_resource_string in re.split(r'(\s+)', resources): - if 'MEMORY' in each_resource_string: - memory_dict.append(each_resource_string) - for each_line in re.split(r'(\s+)', workflow): - if 'MEMORY' not in each_line: - temp_workflow += each_line - else: - if any( substring in each_line for substring in memory_dict): - temp_workflow += each_line - workflow = temp_workflow - - # Start writing the XML file - fh = open('%s/%s.xml' % (base['EXPDIR'], base['PSLOT']), 'w') - - fh.write(preamble) - fh.write(definitions) - fh.write(resources) - fh.write(workflow) - - fh.close() - - return - -if __name__ == '__main__': - main() - sys.exit(0) diff --git a/ush/rocoto/workflow_utils.py b/ush/rocoto/workflow_utils.py deleted file mode 100755 index a13c66a112..0000000000 --- a/ush/rocoto/workflow_utils.py +++ /dev/null @@ -1,396 +0,0 @@ -#!/usr/bin/env python - -''' - Module containing functions all workflow setups require -''' -import random -import re -import os, sys, stat -import socket -import glob -import subprocess -import numpy as np -from distutils.spawn import find_executable -from datetime import datetime, timedelta -import rocoto - -DATE_ENV_VARS=['CDATE','SDATE','EDATE'] -SCHEDULER_MAP={'HERA':'slurm', - 'WCOSS':'lsf', - 'WCOSS_DELL_P3':'lsf', - 'WCOSS_C':'lsfcray'} - -class UnknownMachineError(Exception): pass -class UnknownConfigError(Exception): pass -class ShellScriptException(Exception): - def __init__(self,scripts,errors): - self.scripts = scripts - self.errors = errors - super(ShellScriptException,self).__init__( - str(errors)+ - ': error processing'+ - (' '.join(scripts))) - -def get_shell_env(scripts): - vars=dict() - runme=''.join([ 'source %s ; '%(s,) for s in scripts ]) - magic='--- ENVIRONMENT BEGIN %d ---'%random.randint(0,64**5) - runme+='/bin/echo -n "%s" ; /usr/bin/env -0'%(magic,) - with open('/dev/null','wb+') as null: - env=subprocess.Popen(runme,shell=True,stdin=null.fileno(), - stdout=subprocess.PIPE) - (out,err)=env.communicate() - begin=out.find(magic) - if begin<0: - raise ShellScriptException(scripts,'Cannot find magic string; ' - 'at least one script failed: '+repr(out)) - for entry in out[begin+len(magic):].split('\x00'): - iequal=entry.find('=') - vars[entry[0:iequal]] = entry[iequal+1:] - return vars - -def get_script_env(scripts): - default_env=get_shell_env([]) - and_script_env=get_shell_env(scripts) - vars_just_in_script=set(and_script_env)-set(default_env) - union_env=dict(default_env) - union_env.update(and_script_env) - return dict([ (v,union_env[v]) for v in vars_just_in_script ]) - -def cast_or_not(type,value): - try: - return type(value) - except ValueError: - return value - -def get_configs(expdir): - """ - Given an experiment directory containing config files, - return a list of configs minus the ones ending with ".default" - """ - result=list() - for config in glob.glob('%s/config.*' % expdir): - if not config.endswith('.default'): - result.append(config) - return result - -def find_config(config_name, configs): - - for config in configs: - if config_name == os.path.basename(config): - return config - - raise UnknownConfigError("%s does not exist (known: %s), ABORT!" % ( - config_name,repr(config_name))) - -def source_configs(configs, tasks): - ''' - Given list of config files, source them - and return a dictionary for each task - Every task depends on config.base - ''' - - dict_configs = {} - - # Return config.base as well - dict_configs['base'] = config_parser([find_config('config.base', configs)]) - - # Source the list of input tasks - for task in tasks: - - files = [] - - files.append(find_config('config.base', configs)) - - if task in ['eobs', 'eomg']: - files.append(find_config('config.anal', configs)) - files.append(find_config('config.eobs', configs)) - elif task in ['eupd']: - files.append(find_config('config.anal', configs)) - files.append(find_config('config.eupd', configs)) - elif task in ['efcs']: - files.append(find_config('config.fcst', configs)) - files.append(find_config('config.efcs', configs)) - else: - files.append(find_config('config.%s' % task, configs)) - - print 'sourcing config.%s' % task - dict_configs[task] = config_parser(files) - - return dict_configs - - -def config_parser(files): - """ - Given the name of config file, key-value pair of all variables in the config file is returned as a dictionary - :param files: config file or list of config files - :type files: list or str or unicode - :return: Key value pairs representing the environment variables defined - in the script. - :rtype: dict - """ - if isinstance(files,basestring): - files=[files] - varbles=dict() - for key,value in get_script_env(files).iteritems(): - if key in DATE_ENV_VARS: # likely a date, convert to datetime - varbles[key] = datetime.strptime(value,'%Y%m%d%H') - elif '.' in value: # Likely a number and that too a float - varbles[key] = cast_or_not(float,value) - else: # Still could be a number, may be an integer - varbles[key] = cast_or_not(int,value) - - return varbles - -def detectMachine(): - - machines = ['HERA', 'WCOSS_C', 'WCOSS_DELL_P3'] - - if os.path.exists('/scratch1/NCEPDEV'): - return 'HERA' - elif os.path.exists('/gpfs') and os.path.exists('/etc/SuSE-release'): - return 'WCOSS_C' - elif os.path.exists('/gpfs/dell2'): - return 'WCOSS_DELL_P3' - else: - print 'workflow is currently only supported on: %s' % ' '.join(machines) - raise NotImplementedError('Cannot auto-detect platform, ABORT!') - -def get_scheduler(machine): - try: - return SCHEDULER_MAP[machine] - except KeyError: - raise UnknownMachineError('Unknown machine: %s, ABORT!' % machine) - -def create_wf_task(task, cdump='gdas', cycledef=None, envar=None, dependency=None, \ - metatask=None, varname=None, varval=None, vardict=None, \ - final=False): - - if metatask is None: - taskstr = '%s' % task - else: - taskstr = '%s#%s#' % (task, varname) - metataskstr = '%s%s' % (cdump, metatask) - metatask_dict = {'metataskname': metataskstr, \ - 'varname': '%s' % varname, \ - 'varval': '%s' % varval, \ - 'vardict': vardict} - - taskstr = '%s%s' % (cdump, taskstr) - cycledefstr = cdump if cycledef is None else cycledef - - task_dict = {'taskname': '%s' % taskstr, \ - 'cycledef': '%s' % cycledefstr, \ - 'maxtries': '&MAXTRIES;', \ - 'command': '&JOBS_DIR;/%s.sh' % task, \ - 'jobname': '&PSLOT;_%s_@H' % taskstr, \ - 'account': '&ACCOUNT;', \ - 'queue': '&QUEUE_%s_%s;' % (task.upper(), cdump.upper()), \ - 'walltime': '&WALLTIME_%s_%s;' % (task.upper(), cdump.upper()), \ - 'native': '&NATIVE_%s_%s;' % (task.upper(), cdump.upper()), \ - 'memory': '&MEMORY_%s_%s;' % (task.upper(), cdump.upper()), \ - 'resources': '&RESOURCES_%s_%s;' % (task.upper(), cdump.upper()), \ - 'log': '&ROTDIR;/logs/@Y@m@d@H/%s.log' % taskstr, \ - 'envar': envar, \ - 'dependency': dependency, \ - 'final': final} - - if task in ['getic','arch','earc'] and get_scheduler(detectMachine()) in ['slurm']: - task_dict['partition'] = '&PARTITION_%s_%s;' % (task.upper(),cdump.upper()) - - if metatask is None: - task = rocoto.create_task(task_dict) - else: - task = rocoto.create_metatask(task_dict, metatask_dict) - task = ''.join(task) - - return task - - -def create_firstcyc_task(cdump='gdas'): - ''' - This task is needed to run to finalize the first half cycle - ''' - - task = 'firstcyc' - taskstr = '%s' % task - - deps = [] - data = '&EXPDIR;/logs/@Y@m@d@H.log' - dep_dict = {'type':'data', 'data':data, 'offset':'24:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - dep_dict = {'type':'cycleexist', 'condition':'not', 'offset':'-06:00:00'} - deps.append(rocoto.add_dependency(dep_dict)) - dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) - - task_dict = {'taskname': '%s' % taskstr, \ - 'cycledef': 'first', \ - 'maxtries': '&MAXTRIES;', \ - 'final' : True, \ - 'command': 'sleep 1', \ - 'jobname': '&PSLOT;_%s_@H' % taskstr, \ - 'account': '&ACCOUNT;', \ - 'queue': '&QUEUE_ARCH;', \ - 'walltime': '&WALLTIME_ARCH_%s;' % cdump.upper(), \ - 'native': '&NATIVE_ARCH_%s;' % cdump.upper(), \ - 'resources': '&RESOURCES_ARCH_%s;' % cdump.upper(), \ - 'log': '&ROTDIR;/logs/@Y@m@d@H/%s.log' % taskstr, \ - 'queue': '&QUEUE_ARCH_%s;' % cdump.upper(), \ - 'dependency': dependencies} - - if get_scheduler(detectMachine()) in ['slurm']: - task_dict['queue'] = '&QUEUE;' - task_dict['partition'] = '&PARTITION_ARCH;' - - task = rocoto.create_task(task_dict) - - return ''.join(task) - - -def get_gfs_interval(gfs_cyc): - ''' - return interval in hours based on gfs_cyc - ''' - - # Get interval from cyc_input - if gfs_cyc == 0: - interval = None - if gfs_cyc == 1: - interval = '24:00:00' - elif gfs_cyc == 2: - interval = '12:00:00' - elif gfs_cyc == 4: - interval = '06:00:00' - - return interval - - -def get_resources(machine, cfg, task, reservation, cdump='gdas'): - - scheduler = get_scheduler(machine) - - if cdump in ['gfs'] and 'wtime_%s_gfs' % task in cfg.keys(): - wtimestr = cfg['wtime_%s_gfs' % task] - else: - wtimestr = cfg['wtime_%s' % task] - - ltask = 'eobs' if task in ['eomg'] else task - - memory = cfg.get('memory_%s' % ltask, None) - - if cdump in ['gfs'] and 'npe_%s_gfs' % task in cfg.keys(): - tasks = cfg['npe_%s_gfs' % ltask] - else: - tasks = cfg['npe_%s' % ltask] - - if cdump in ['gfs'] and 'npe_node_%s_gfs' % task in cfg.keys(): - ppn = cfg['npe_node_%s_gfs' % ltask] - else: - ppn = cfg['npe_node_%s' % ltask] - - if machine in [ 'WCOSS_DELL_P3', 'HERA']: - threads = cfg['nth_%s' % ltask] - - nodes = np.int(np.ceil(np.float(tasks) / np.float(ppn))) - - memstr = '' if memory is None else str(memory) - natstr = '' - - if scheduler in ['slurm']: - natstr = '--export=NONE' - - if machine in ['HERA', 'WCOSS_C', 'WCOSS_DELL_P3']: - - if machine in ['HERA']: - resstr = '%d:ppn=%d:tpp=%d' % (nodes, ppn, threads) - else: - resstr = '%d:ppn=%d' % (nodes, ppn) - - if machine in ['WCOSS_C'] and task in ['arch', 'earc', 'getic']: - resstr += '' - - if machine in ['WCOSS_DELL_P3']: - if not reservation in ['NONE']: - natstr = "-U %s -R 'affinity[core(%d)]'" % (reservation, threads) - else: - natstr = "-R 'affinity[core(%d)]'" % (threads) - - if task in ['arch', 'earc', 'getic']: - natstr = "-R 'affinity[core(1)]'" - - - elif machine in ['WCOSS']: - resstr = '%d' % tasks - - if task in ['arch', 'earc', 'getic']: - queuestr = '&QUEUE;' if scheduler in ['slurm'] else '&QUEUE_ARCH;' - else: - queuestr = '&QUEUE;' - - return wtimestr, resstr, queuestr, memstr, natstr - - -def create_crontab(base, cronint=5): - ''' - Create crontab to execute rocotorun every cronint (5) minutes - ''' - - # No point creating a crontab if rocotorun is not available. - rocotoruncmd = find_executable('rocotorun') - if rocotoruncmd is None: - print 'Failed to find rocotorun, crontab will not be created' - return - -# Leaving the code for a wrapper around crontab file if needed again later -# if check_slurm(): -# -# cronintstr = '*/%d * * * *' % cronint -# rocotorunstr = '%s -d %s/%s.db -w %s/%s.xml' % (rocotoruncmd, base['EXPDIR'], base['PSLOT'], base['EXPDIR'], base['PSLOT']) -# -# wrapper_strings = [] -# wrapper_strings.append('#!/bin/env tcsh\n') -# wrapper_strings.append('\n') -# wrapper_strings.append('module load slurm\n') -# wrapper_strings.append('module load rocoto/1.3.0-RC4\n') -# wrapper_strings.append('\n') -# wrapper_strings.append(rocotorunstr) -# -# hostname = 'tfe02' -# script_file = os.path.join(base['EXPDIR'], '%s.sh' % base['PSLOT']) -# -# fh = open(script_file, 'w') -# fh.write(''.join(wrapper_strings)) -# os.chmod(script_file,stat.S_IRWXU|stat.S_IRWXG|stat.S_IRWXO) -# fh.close() -# -# rocotorunstr = 'ssh %s %s/%s.sh' % (socket.gethostname(), base['EXPDIR'], base['PSLOT']) -# -# else: - - rocotorunstr = '%s -d %s/%s.db -w %s/%s.xml' % (rocotoruncmd, base['EXPDIR'], base['PSLOT'], base['EXPDIR'], base['PSLOT']) - cronintstr = '*/%d * * * *' % cronint - - # On WCOSS, rocoto module needs to be loaded everytime cron runs - if base['machine'] in ['WCOSS']: - rocotoloadstr = '. /usrx/local/Modules/default/init/sh; module use -a /usrx/local/emc_rocoto/modulefiles; module load rocoto/20170119-master)' - rocotorunstr = '(%s %s)' % (rocotoloadstr, rocotorunstr) - - try: - REPLYTO = os.environ['REPLYTO'] - except: - REPLYTO = '' - - strings = [] - - strings.append('\n') - strings.append('#################### %s ####################\n' % base['PSLOT']) - strings.append('MAILTO="%s"\n' % REPLYTO) - strings.append('%s %s\n' % (cronintstr, rocotorunstr)) - strings.append('#################################################################\n') - strings.append('\n') - - fh = open(os.path.join(base['EXPDIR'], '%s.crontab' % base['PSLOT']), 'w') - fh.write(''.join(strings)) - fh.close() - - return diff --git a/ush/rstprod.sh b/ush/rstprod.sh new file mode 100755 index 0000000000..acac0340bb --- /dev/null +++ b/ush/rstprod.sh @@ -0,0 +1,19 @@ +#! /usr/bin/env bash + +source "$HOMEgfs/ush/preamble.sh" + +#--------------------------------------------------------- +# rstprod.sh +# +# Restrict data from select sensors and satellites +#--------------------------------------------------------- + +# Restrict select sensors and satellites + +export CHGRP_CMD=${CHGRP_CMD:-"chgrp ${group_name:-rstprod}"} +rlist="saphir abi_g16" +for rtype in $rlist; do + if compgen -G "*${rtype}*" > /dev/null; then + ${CHGRP_CMD} *${rtype}* + fi +done diff --git a/ush/run_mpmd.sh b/ush/run_mpmd.sh new file mode 100755 index 0000000000..24cb3f2656 --- /dev/null +++ b/ush/run_mpmd.sh @@ -0,0 +1,70 @@ +#!/usr/bin/env bash + +source "${HOMEgfs}/ush/preamble.sh" + +cmdfile=${1:?"run_mpmd requires an input file containing commands to execute in MPMD mode"} + +# Determine the number of MPMD processes from incoming ${cmdfile} +nprocs=$(wc -l < "${cmdfile}") + +# Local MPMD file containing instructions to run in CFP +mpmd_cmdfile="${DATA:-}/mpmd_cmdfile" +if [[ -s "${mpmd_cmdfile}" ]]; then rm -f "${mpmd_cmdfile}"; fi + +if [[ "${launcher:-}" =~ ^srun.* ]]; then # srun-based system e.g. Hera, Orion, etc. + + # Slurm requires a counter in front of each line in the script + # Read the incoming cmdfile and create srun usable cmdfile + nm=0 + # shellcheck disable=SC2312 + while IFS= read -r line; do + echo "${nm} ${line}" >> "${mpmd_cmdfile}" + ((nm=nm+1)) + done < "${cmdfile}" + + set +e + # shellcheck disable=SC2086 + ${launcher:-} ${mpmd_opt:-} -n ${nprocs} "${mpmd_cmdfile}" + rc=$? + set_strict + if (( rc == 0 )); then + out_files=$(find . -name 'mpmd.*.*.out') + fi + +elif [[ "${launcher:-}" =~ ^mpiexec.* ]]; then # mpiexec + + # Redirect output from each process to its own stdout + # Read the incoming cmdfile and create mpiexec usable cmdfile + nm=0 + echo "#!/bin/bash" >> "${mpmd_cmdfile}" + # shellcheck disable=SC2312 + while IFS= read -r line; do + echo "${line} > mpmd.${nm}.out" >> "${mpmd_cmdfile}" + ((nm=nm+1)) + done < "${cmdfile}" + + chmod 755 "${mpmd_cmdfile}" + # shellcheck disable=SC2086 + ${launcher:-} -np ${nprocs} ${mpmd_opt:-} "${mpmd_cmdfile}" + rc=$? + if (( rc == 0 )); then + out_files=$(find . -name 'mpmd.*.out') + fi + +else + + echo "FATAL ERROR: CFP is not usable with launcher: '${launcher:-}'" + rc=1 + +fi + +# On success concatenate processor specific output into a single mpmd.out +if (( rc == 0 )); then + rm -f "${mpmd_cmdfile}" + for file in ${out_files}; do + cat "${file}" >> mpmd.out + rm -f "${file}" + done +fi + +exit "${rc}" diff --git a/ush/syndat_getjtbul.sh b/ush/syndat_getjtbul.sh index 278f967a7d..c17067ff72 100755 --- a/ush/syndat_getjtbul.sh +++ b/ush/syndat_getjtbul.sh @@ -1,3 +1,4 @@ +#! /usr/bin/env bash # Script to recover JTWC Bulletins from Tank # $TANK_TROPCY/$ymddir/wtxtbul/tropcyc @@ -25,25 +26,15 @@ # jlogfile - path to job log file (skipped over by this script if not # passed in) - -set -xua +source "$HOMEgfs/ush/preamble.sh" EXECSYND=${EXECSYND:-${HOMESYND}/exec} cd $DATA if [ "$#" -ne '1' ]; then - msg="**NON-FATAL ERROR PROGRAM SYNDAT_GETJTBUL run date not in \ + echo "**NON-FATAL ERROR PROGRAM SYNDAT_GETJTBUL run date not in \ positional parameter 1" - set +x - echo - echo $msg - echo - set -x - echo $msg >> $pgmout - set +u - [ -n "$jlogfile" ] && postmsg "$jlogfile" "$msg" - set -u echo "Leaving sub-shell syndat_getjtbul.sh to recover JTWC Bulletins" \ >> $pgmout @@ -54,14 +45,14 @@ fi CDATE10=$1 -ymd=`echo $CDATE10 | cut -c3-8` -pdy=`echo $CDATE10 | cut -c1-8` -hour=`echo $CDATE10 | cut -c9-10` +ymd=$(echo $CDATE10 | cut -c3-8) +pdy=$(echo $CDATE10 | cut -c1-8) +hour=$(echo $CDATE10 | cut -c9-10) echo $PDYm1 pdym1=$PDYm1 -#pdym1=`sh $utilscript/finddate.sh $pdy d-1` +#pdym1=$(sh $utilscript/finddate.sh $pdy d-1) echo " " >> $pgmout echo "Entering sub-shell syndat_getjtbul.sh to recover JTWC Bulletins" \ @@ -94,7 +85,7 @@ echo " pdym1 is $pdym1" echo echo " ymddir is $ymddir" echo -set -x +set_trace find=$ymd" "$hour echo "looking for string $find in $jtwcdir/tropcyc" >> $pgmout @@ -124,18 +115,15 @@ fi perl -wpi.ORIG -e 's/(^.... ... )(\S{9,9})(\S{1,})/$1$2/' jtwcbul diff jtwcbul.ORIG jtwcbul > jtwcbul_changes.txt if [ -s jtwcbul_changes.txt ]; then - msg="***WARNING: SOME JTWC VITALS SEGMENTS REQUIRED PRELIMINARY MODIFICATION!" - [ -n "$jlogfile" ] && postmsg "$jlogfile" "$msg" - echo -e "\n${msg}. Changes follow:" >> $pgmout - cat jtwcbul_changes.txt >> $pgmout - echo -e "\n" >> $pgmout + echo "***WARNING: SOME JTWC VITALS SEGMENTS REQUIRED PRELIMINARY MODIFICATION!" + cat jtwcbul_changes.txt fi # Execute bulletin processing [ -s jtwcbul ] && echo "Processing JTWC bulletin halfs into tcvitals records" >> $pgmout -pgm=`basename $EXECSYND/syndat_getjtbul` +pgm=$(basename $EXECSYND/syndat_getjtbul.x) export pgm if [ -s prep_step ]; then set +u @@ -143,14 +131,14 @@ if [ -s prep_step ]; then set -u else [ -f errfile ] && rm errfile - unset FORT00 `env | grep "^FORT[0-9]\{1,\}=" | awk -F= '{print $1}'` + unset FORT00 $(env | grep "^FORT[0-9]\{1,\}=" | awk -F= '{print $1}') fi rm -f fnoc export FORT11=jtwcbul export FORT51=fnoc -time -p $EXECSYND/syndat_getjtbul >> $pgmout 2> errfile +time -p ${EXECSYND}/${pgm} >> $pgmout 2> errfile errget=$? ###cat errfile cat errfile >> $pgmout @@ -159,14 +147,14 @@ set +x echo echo 'The foreground exit status for SYNDAT_GETJTBUL is ' $errget echo -set -x +set_trace if [ "$errget" -gt '0' ];then if [ "$errget" -eq '1' ];then msg="No JTWC bulletins in $jtwcdir/tropcyc, no JTWC tcvitals \ available for qctropcy for $CDATE10" if [ "$RUN" = 'gfs' ]; then if [ "$SENDSDM" = 'YES' ]; then - export ecf_family=`echo $ECF_NAME |awk 'BEGIN {FS="/j"} {print $1}'` + export ecf_family=$(echo $ECF_NAME |awk 'BEGIN {FS="/j"} {print $1}') echo $msg > $COMOUT/${NET}_${RUN}.t${cyc}z.emailbody echo "export subject='No JTWC bulletins available for $CDATE10 $RUN run'" >$COMOUT/${NET}_${RUN}.t${cyc}z.emailvar # JY echo "export maillist='sdm@noaa.gov'" >> $COMOUT/${NET}_${RUN}.t${cyc}z.emailvar @@ -175,30 +163,12 @@ available for qctropcy for $CDATE10" fi fi else - msg="**NON-FATAL ERROR PROGRAM SYNDAT_GETJTBUL FOR $CDATE10 \ + echo "**NON-FATAL ERROR PROGRAM SYNDAT_GETJTBUL FOR $CDATE10 \ RETURN CODE $errget" fi - set +x - echo - echo $msg - echo - set -x - echo $msg >> $pgmout - set +u - [ -n "$jlogfile" ] && postmsg "$jlogfile" "$msg" - set -u else - msg="program SYNDAT_GETJTBUL completed normally for $CDATE10, JTWC \ + echo "program SYNDAT_GETJTBUL completed normally for $CDATE10, JTWC \ rec. passed to qctropcy" - set +x - echo - echo $msg - echo - set -x - echo $msg >> $pgmout - set +u - [ -n "$jlogfile" ] && postmsg "$jlogfile" "$msg" - set -u fi set +x echo @@ -206,7 +176,7 @@ echo "----------------------------------------------------------" echo "*********** COMPLETED PROGRAM syndat_getjtbul **********" echo "----------------------------------------------------------" echo -set -x +set_trace if [ "$errget" -eq '0' ];then echo "Completed JTWC tcvitals records are:" >> $pgmout @@ -215,6 +185,6 @@ fi echo "Leaving sub-shell syndat_getjtbul.sh to recover JTWC Bulletins" \ >> $pgmout -echo " " >> $pgmout +echo " " >> "${pgmout}" exit diff --git a/ush/syndat_qctropcy.sh b/ush/syndat_qctropcy.sh index d72e52f9cc..aa98911820 100755 --- a/ush/syndat_qctropcy.sh +++ b/ush/syndat_qctropcy.sh @@ -1,5 +1,4 @@ - -set +x +#! /usr/bin/env bash # SCRIPT NAME : syndat_qctropcy.sh # AUTHOR : Steven Lord/Hua-Lu pan/Dennis Keyser/Diane Stokes @@ -12,19 +11,19 @@ set +x # prediction centers by the executable syndat_qctropcy # # -echo "History: JUN 1997 - First implementation of this utility script" -echo " JUL 1997 - Added tcvitals made manually by SDM; Added " -echo " jtwc/fnoc tcvitals " -echo " MAR 2000 Converted to IBM-SP " -echo " MAR 2013 Converted to WCOSS " -echo " Added option files_override which can set " -echo " namelist var used for logical variable " -echo " FILES in syndat_qctropcy to control final " -echo " copying of records and file manipulation. " -echo " (typically F for testing, otherwise not set)" -echo " Added dateck fallback if archive file misg." -echo " OCT 2013 Remove defaults for parm, exec, fix and ush " -echo " directories. These must now be passed in. " +# echo "History: JUN 1997 - First implementation of this utility script" +# echo " JUL 1997 - Added tcvitals made manually by SDM; Added " +# echo " jtwc/fnoc tcvitals " +# echo " MAR 2000 Converted to IBM-SP " +# echo " MAR 2013 Converted to WCOSS " +# echo " Added option files_override which can set " +# echo " namelist var used for logical variable " +# echo " FILES in syndat_qctropcy to control final " +# echo " copying of records and file manipulation. " +# echo " (typically F for testing, otherwise not set)" +# echo " Added dateck fallback if archive file misg." +# echo " OCT 2013 Remove defaults for parm, exec, fix and ush " +# echo " directories. These must now be passed in. " # # # Positional parameters passed in: @@ -64,29 +63,24 @@ echo " directories. These must now be passed in. " # copy_back - switch to copy updated files back to archive directory and # to tcvitals directory # (Default: YES) -# jlogfile - path to job log file (skipped over by this script if not -# passed in) -# SENDCOM switch copy output files to $COMSP -# (Default: YES) # files_override - switch to override default "files" setting for given run # (Default: not set) # TIMEIT - optional time and resource reporting (Default: not set) -set -xua +source "$HOMEgfs/ush/preamble.sh" ARCHSYND=${ARCHSYND:-$COMROOTp3/gfs/prod/syndat} HOMENHCp1=${HOMENHCp1:-/gpfs/?p1/nhc/save/guidance/storm-data/ncep} HOMENHC=${HOMENHC:-/gpfs/dell2/nhc/save/guidance/storm-data/ncep} TANK_TROPCY=${TANK_TROPCY:-${DCOMROOT}/us007003} -FIXSYND=${FIXSYND:-$HOMEgfs/fix/fix_am} +FIXSYND=${FIXSYND:-$HOMEgfs/fix/am} USHSYND=${USHSYND:-$HOMEgfs/ush} EXECSYND=${EXECSYND:-$HOMEgfs/exec} PARMSYND=${PARMSYND:-$HOMEgfs/parm/relo} slmask=${slmask:-$FIXSYND/syndat_slmask.t126.gaussian} copy_back=${copy_back:-YES} -SENDCOM=${SENDCOM:-YES} files_override=${files_override:-""} cd $DATA @@ -96,11 +90,8 @@ set +x echo echo $msg echo -set -x +set_trace echo $msg >> $pgmout -set +u -[ -n "$jlogfile" ] && postmsg "$jlogfile" "$msg" -set -u if [ "$#" -ne '1' ]; then msg="**NON-FATAL ERROR PROGRAM SYNDAT_QCTROPCY run date not in \ @@ -109,33 +100,27 @@ positional parameter 1" echo echo $msg echo - set -x + set_trace echo $msg >> $pgmout - set +u - [ -n "$jlogfile" ] && postmsg "$jlogfile" "$msg" - set -u msg="**NO TROPICAL CYCLONE tcvitals processed --> non-fatal" set +x echo echo $msg echo - set -x + set_trace echo $msg >> $pgmout - set +u - [ -n "$jlogfile" ] && postmsg "$jlogfile" "$msg" - set -u -# Copy null files into "${COMSP}syndata.tcvitals.$tmmark" and -# "${COMSP}jtwc-fnoc.tcvitals.$tmmark" so later ftp attempts will find and +# Copy null files into "${COM_OBS}/${RUN}.${cycle}.syndata.tcvitals.$tmmark" and +# "${COM_OBS}/${RUN}.${cycle}.jtwc-fnoc.tcvitals.$tmmark" so later ftp attempts will find and # copy the zero-length file and avoid wasting time with multiple attempts # to remote machine(s) # (Note: Only do so if files don't already exist) - if [ $SENDCOM = YES ]; then - [ ! -s ${COMSP}syndata.tcvitals.$tmmark ] && \ - cp /dev/null ${COMSP}syndata.tcvitals.$tmmark - [ ! -s ${COMSP}jtwc-fnoc.tcvitals.$tmmark ] && \ - cp /dev/null ${COMSP}jtwc-fnoc.tcvitals.$tmmark + if [[ ! -s "${COM_OBS}/${RUN}.${cycle}.syndata.tcvitals.${tmmark}" ]]; then + cp "/dev/null" "${COM_OBS}/${RUN}.${cycle}.syndata.tcvitals.${tmmark}" + fi + if [[ ! -s "${COM_OBS}/${RUN}.${cycle}.jtwc-fnoc.tcvitals.${tmmark}" ]]; then + cp "/dev/null" "${COM_OBS}/${RUN}.${cycle}.jtwc-fnoc.tcvitals.${tmmark}" fi exit @@ -147,9 +132,9 @@ set +x echo echo "Run date is $CDATE10" echo -set -x +set_trace -year=`echo $CDATE10 | cut -c1-4` +year=$(echo $CDATE10 | cut -c1-4) # Copy the seasonal statistics from archive directory to local @@ -162,18 +147,15 @@ cp $ARCHSYND/syndat_sthisto sthisto cp $ARCHSYND/syndat_sthista sthista touch dateck -dateck_size=`ls -l dateck | awk '{ print $5 }'` +dateck_size=$(ls -l dateck | awk '{ print $5 }') if [ $dateck_size -lt 10 ]; then msg="***WARNING: Archive run date check file not available or shorter than expected.\ Using dummy date 1900010100 to allow code to continue" echo 1900010100 > dateck set +x echo -e "\n${msg}\n" - set -x + set_trace echo $msg >> $pgmout - set +u - [ -n "$jlogfile" ] && postmsg "$jlogfile" "$msg" - set -u fi @@ -192,7 +174,7 @@ elif [ "$RUN" = 'gdas' ]; then files=T, fi if [ -n "$files_override" ]; then # for testing, typically want FILES=F - files_override=`echo "$files_override" | tr [a-z] [A-Z] | tr -d [.] | cut -c 1` + files_override=$(echo "$files_override" | tr [a-z] [A-Z] | tr -d [.] | cut -c 1) if [ "$files_override" = 'T' -o "$files_override" = 'F' ]; then msg="***WARNING: Variable files setting will be overriden from $files to $files_override. Override expected if testing." files=$files_override @@ -201,11 +183,8 @@ if [ -n "$files_override" ]; then # for testing, typically want FILES=F fi set +x echo -e "\n${msg}\n" - set -x + set_trace echo $msg >> $pgmout - set +u - [ -n "$jlogfile" ] && postmsg "$jlogfile" "$msg" - set -u fi echo " &INPUT RUNID = '${net}_${tmmark}_${cyc}', FILES = $files " > vitchk.inp @@ -266,7 +245,7 @@ cp $slmask slmask.126 # Execute program syndat_qctropcy -pgm=`basename $EXECSYND/syndat_qctropcy` +pgm=$(basename $EXECSYND/syndat_qctropcy.x) export pgm if [ -s prep_step ]; then set +u @@ -274,13 +253,13 @@ if [ -s prep_step ]; then set -u else [ -f errfile ] && rm errfile - unset FORT00 `env | grep "^FORT[0-9]\{1,\}=" | awk -F= '{print $1}'` + unset FORT00 $(env | grep "^FORT[0-9]\{1,\}=" | awk -F= '{print $1}') fi echo "$CDATE10" > cdate10.dat export FORT11=slmask.126 export FORT12=cdate10.dat -$EXECSYND/syndat_qctropcy >> $pgmout 2> errfile +${EXECSYND}/${pgm} >> $pgmout 2> errfile errqct=$? ###cat errfile cat errfile >> $pgmout @@ -289,40 +268,34 @@ set +x echo echo "The foreground exit status for SYNDAT_QCTROPCY is " $errqct echo -set -x +set_trace if [ "$errqct" -gt '0' ];then msg="**NON-FATAL ERROR PROGRAM SYNDAT_QCTROPCY RETURN CODE $errqct" set +x echo echo $msg echo - set -x + set_trace echo $msg >> $pgmout - set +u - [ -n "$jlogfile" ] && postmsg "$jlogfile" "$msg" - set -u msg="**NO TROPICAL CYCLONE tcvitals processed --> non-fatal" set +x echo echo $msg echo - set -x + set_trace echo $msg >> $pgmout - set +u - [ -n "$jlogfile" ] && postmsg "$jlogfile" "$msg" - set -u # In the event of a ERROR in PROGRAM SYNDAT_QCTROPCY, copy null files into -# "${COMSP}syndata.tcvitals.$tmmark" and "${COMSP}jtwc-fnoc.tcvitals.$tmmark" +# "${COM_OBS}/${RUN}.${cycle}.syndata.tcvitals.$tmmark" and "${COM_OBS}/${RUN}.${cycle}.jtwc-fnoc.tcvitals.$tmmark" # so later ftp attempts will find and copy the zero-length file and avoid # wasting time with multiple attempts to remote machine(s) # (Note: Only do so if files don't already exist) - if [ $SENDCOM = YES ]; then - [ ! -s ${COMSP}syndata.tcvitals.$tmmark ] && \ - cp /dev/null ${COMSP}syndata.tcvitals.$tmmark - [ ! -s ${COMSP}jtwc-fnoc.tcvitals.$tmmark ] && \ - cp /dev/null ${COMSP}jtwc-fnoc.tcvitals.$tmmark + if [[ ! -s "${COM_OBS}/${RUN}.${cycle}.syndata.tcvitals.${tmmark}" ]]; then + cp "/dev/null" "${COM_OBS}/${RUN}.${cycle}.syndata.tcvitals.${tmmark}" + fi + if [[ ! -s ${COM_OBS}/${RUN}.${cycle}.jtwc-fnoc.tcvitals.${tmmark} ]]; then + cp "/dev/null" "${COM_OBS}/${RUN}.${cycle}.jtwc-fnoc.tcvitals.${tmmark}" fi exit @@ -333,19 +306,7 @@ echo "----------------------------------------------------------" echo "********** COMPLETED PROGRAM syndat_qctropcy **********" echo "----------------------------------------------------------" echo -set -x - -if [ -s current ]; then - msg="program SYNDAT_QCTROPCY completed normally - tcvitals records \ -processed" -else -msg="no records available for program SYNDAT_QCTROPCY - null tcvitals file \ -produced" -fi -set +u -[ -n "$jlogfile" ] && postmsg "$jlogfile" "$msg" -set -u - +set_trace if [ "$copy_back" = 'YES' ]; then cat lthistry>>$ARCHSYND/syndat_lthistry.$year @@ -390,11 +351,8 @@ $HOMENHC/tcvitals successfully updated by syndat_qctropcy" echo echo $msg echo - set -x + set_trace echo $msg >> $pgmout - set +u - [ -n "$jlogfile" ] && postmsg "$jlogfile" "$msg" - set -u fi else @@ -405,11 +363,8 @@ not changed by syndat_qctropcy" echo echo $msg echo - set -x + set_trace echo $msg >> $pgmout - set +u - [ -n "$jlogfile" ] && postmsg "$jlogfile" "$msg" - set -u fi @@ -417,27 +372,15 @@ fi # This is the file that connects to the later RELOCATE and/or PREP scripts -[ $SENDCOM = YES ] && cp current ${COMSP}syndata.tcvitals.$tmmark +cp current "${COM_OBS}/${RUN}.${cycle}.syndata.tcvitals.${tmmark}" # Create the DBNet alert if [ $SENDDBN = "YES" ] then - $DBNROOT/bin/dbn_alert MODEL GDAS_TCVITALS $job ${COMSP}syndata.tcvitals.$tmmark + "${DBNROOT}/bin/dbn_alert" "MODEL" "GDAS_TCVITALS" "${job}" "${COM_OBS}/${RUN}.${cycle}.syndata.tcvitals.${tmmark}" fi # Write JTWC/FNOC Tcvitals to /com path since not saved anywhere else -[ $SENDCOM = YES ] && cp fnoc ${COMSP}jtwc-fnoc.tcvitals.$tmmark - -msg="TROPICAL CYCLONE TCVITALS QC PROCESSING HAS COMPLETED FOR $CDATE10" -set +x -echo -echo $msg -echo -set -x -echo $msg >> $pgmout -echo " " >> $pgmout -set +u -[ -n "$jlogfile" ] && postmsg "$jlogfile" "$msg" -set -u +cp fnoc "${COM_OBS}/${RUN}.${cycle}.jtwc-fnoc.tcvitals.${tmmark}" exit diff --git a/ush/tropcy_relocate.sh b/ush/tropcy_relocate.sh index 63c471d4f4..01a21bd12c 100755 --- a/ush/tropcy_relocate.sh +++ b/ush/tropcy_relocate.sh @@ -1,4 +1,5 @@ -#!/bin/ksh +#! /usr/bin/env bash + #### UNIX Script Documentation Block # # Script name: tropcy_relocate.sh @@ -79,7 +80,7 @@ # to this script by the parent script -- # # MACHINE String indicating machine on which this job is running -# Default is "`hostname -s | cut -c 1-3`" +# Default is "$(hostname -s | cut -c 1-3)" # envir String indicating environment under which job runs ('prod' # or 'test') # Default is "prod" @@ -123,7 +124,6 @@ # -stdoutmode ordered" # USHGETGES String indicating directory path for GETGES utility ush # file -# Default is "/nwprod/util/ush" # USHRELO String indicating directory path for RELOCATE ush files # Default is "${HOMERELO}/ush" # EXECRELO String indicating directory path for RELOCATE executables @@ -141,14 +141,12 @@ # Default is "$EXECRELO/relocate_mv_nvortex" # SUPVX String indicating executable path for SUPVIT utility # program -# Default is "$EXECUTIL/supvit" +# Default is "$EXECUTIL/supvit.x" # GETTX String indicating executable path for GETTRK utility # program # Default is "$EXECUTIL/gettrk" # BKGFREQ Frequency of background files for relocation # Default is "3" -# SENDCOM String when set to "YES" copies output files to $COMSP -# Default is "YES" # SENDDBN String when set to "YES" alerts output files to $COMSP # NDATE String indicating executable path for NDATE utility program # Default is "$EXECUTIL/ndate" @@ -157,8 +155,6 @@ # be used by the script. If they are not, they will be skipped # over by the script. # -# jlogfile String indicating path to joblog file -# # Exported Shell Variables: # CDATE10 String indicating the center date/time for the relocation # processing @@ -182,9 +178,7 @@ # $USHRELO/tropcy_relocate_extrkr.sh) # $DATA/err_chk (here and in child script # $USHRELO/tropcy_relocate_extrkr.sh) -# NOTE 1: postmsg above is required ONLY if "$jlogfile" is -# present. -# NOTE 2: The last three scripts above are NOT REQUIRED utilities. +# NOTE: The last three scripts above are NOT REQUIRED utilities. # If $DATA/prep_step not found, a scaled down version of it is # executed in-line. If $DATA/err_exit or $DATA/err_chk are not # found and a fatal error has occurred, then the script calling @@ -210,12 +204,11 @@ # #### -set -aux +source "$HOMEgfs/ush/preamble.sh" -MACHINE=${MACHINE:-`hostname -s | cut -c 1-3`} +MACHINE=${MACHINE:-$(hostname -s | cut -c 1-3)} -SENDCOM=${SENDCOM:-YES} -export NWROOT=${NWROOT:-/nwprod2} +export OPSROOT=${OPSROOT:-/lfs/h1/ops/prod} GRIBVERSION=${GRIBVERSION:-"grib2"} if [ ! -d $DATA ] ; then mkdir -p $DATA ;fi @@ -233,7 +226,7 @@ if [ $# -ne 1 ] ; then # cp ${COMROOT}/date/$cycle ncepdate # err0=$? ncepdate=${PDY}${cyc} - CDATE10=`cut -c7-16 ncepdate` + CDATE10=$(cut -c7-16 ncepdate) else err0=1 fi @@ -242,7 +235,7 @@ else if [ "${#CDATE10}" -ne '10' ]; then err0=1 else - cycle=t`echo $CDATE10|cut -c9-10`z + cycle=t$(echo $CDATE10|cut -c9-10)z err0=0 fi fi @@ -255,7 +248,7 @@ then echo "problem with obtaining date record;" echo "ABNORMAL EXIT!!!!!!!!!!!" echo - set -x + set_trace if [ -s $DATA/err_exit ]; then $DATA/err_exit else @@ -265,15 +258,15 @@ then exit 9 fi -pdy=`echo $CDATE10|cut -c1-8` -cyc=`echo $CDATE10|cut -c9-10` -modhr=`expr $cyc % 3` +pdy=$(echo $CDATE10|cut -c1-8) +cyc=$(echo $CDATE10|cut -c9-10) +modhr=$(expr $cyc % 3) set +x echo echo "CENTER DATE/TIME FOR RELOCATION PROCESSING IS $CDATE10" echo -set -x +set_trace #---------------------------------------------------------------------------- @@ -283,13 +276,12 @@ set -x envir=${envir:-prod} if [ $MACHINE != sgi ]; then - HOMEALL=${HOMEALL:-$NWROOT} + HOMEALL=${HOMEALL:-$OPSROOT} else HOMEALL=${HOMEALL:-/disk1/users/snake/prepobs} fi HOMERELO=${HOMERELO:-${shared_global_home}} -#HOMERELO=${HOMERELO:-$NWROOT/tropcy_qc_reloc.${tropcy_qc_reloc_ver}} envir_getges=${envir_getges:-$envir} if [ $modhr -eq 0 ]; then @@ -316,7 +308,7 @@ RELOX=${RELOX:-$EXECRELO/relocate_mv_nvortex} export BKGFREQ=${BKGFREQ:-1} -SUPVX=${SUPVX:-$EXECRELO/supvit} +SUPVX=${SUPVX:-$EXECRELO/supvit.x} GETTX=${GETTX:-$EXECRELO/gettrk} ################################################ @@ -326,11 +318,7 @@ GETTX=${GETTX:-$EXECRELO/gettrk} # attempt to perform tropical cyclone relocation # ---------------------------------------------- -msg="Attempt to perform tropical cyclone relocation for $CDATE10" -set +u -##[ -n "$jlogfile" ] && $DATA/postmsg "$jlogfile" "$msg" -[ -n "$jlogfile" ] && postmsg "$jlogfile" "$msg" -set -u +echo "Attempt to perform tropical cyclone relocation for $CDATE10" if [ $modhr -ne 0 ]; then @@ -343,7 +331,7 @@ if [ $modhr -ne 0 ]; then not a multiple of 3-hrs;" echo "ABNORMAL EXIT!!!!!!!!!!!" echo - set -x + set_trace if [ -s $DATA/err_exit ]; then $DATA/err_exit else @@ -366,14 +354,14 @@ echo " Get TCVITALS file valid for -$fhr hrs relative to center" echo " relocation processing date/time" echo "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" echo - set -x + set_trace $USHGETGES/getges.sh -e $envir_getges -n $network_getges \ -v $CDATE10 -f $fhr -t tcvges tcvitals.m${fhr} set +x echo echo "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" echo - set -x + set_trace fi done @@ -392,7 +380,7 @@ fi for fhr in $( seq -6 $BKGFREQ 3 ) ; do if [ $fhr -lt 0 ]; then - tpref=m`expr $fhr \* -1` + tpref=m$(expr $fhr \* -1) elif [ $fhr -eq 0 ]; then tpref=es elif [ $fhr -gt 0 ]; then @@ -416,7 +404,7 @@ echo " Get global sigma GUESS valid for $fhr hrs relative to center" echo " relocation processing date/time" echo "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" echo - set -x + set_trace $USHGETGES/getges.sh -e $envir_getges -n $network_getges \ -v $CDATE10 -t $stype $sges errges=$? @@ -428,7 +416,7 @@ echo "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" to center relocation date/time;" echo "ABNORMAL EXIT!!!!!!!!!!!" echo - set -x + set_trace if [ -s $DATA/err_exit ]; then $DATA/err_exit else @@ -439,28 +427,28 @@ to center relocation date/time;" fi # For center time sigma guess file obtained via getges, store pathname from -# getges into ${COMSP}sgesprep_pre-relocate_pathname.$tmmark and, for now, -# also in ${COMSP}sgesprep_pathname.$tmmark - if relocation processing stops +# getges into ${COM_OBS}/${RUN}.${cycle}.sgesprep_pre-relocate_pathname.$tmmark and, for now, +# also in ${COM_OBS}/${RUN}.${cycle}.sgesprep_pathname.$tmmark - if relocation processing stops # due to an error or due to no input tcvitals records found, then the center # time sigma guess will not be modified and this getges file will be read in # subsequent PREP processing; if relocation processing continues and the -# center sigma guess is modified, then ${COMSP}sgesprep_pathname.$tmmark will +# center sigma guess is modified, then ${COM_OBS}/${RUN}.${cycle}.sgesprep_pathname.$tmmark will # be removed later in this script {the subsequent PREP step will correctly -# update ${COMSP}sgesprep_pathname.$tmmark to point to the sgesprep file +# update ${COM_OBS}/${RUN}.${cycle}.sgesprep_pathname.$tmmark to point to the sgesprep file # updated here by the relocation} # ---------------------------------------------------------------------------- if [ $fhr = "0" ]; then - $USHGETGES/getges.sh -e $envir_getges -n $network_getges -v $CDATE10 \ - -t $stype > ${COMSP}sgesprep_pre-relocate_pathname.$tmmark - cp ${COMSP}sgesprep_pre-relocate_pathname.$tmmark \ - ${COMSP}sgesprep_pathname.$tmmark + "${USHGETGES}/getges.sh" -e "${envir_getges}" -n "${network_getges}" -v "${CDATE10}" \ + -t "${stype}" > "${COM_OBS}/${RUN}.${cycle}.sgesprep_pre-relocate_pathname.${tmmark}" + cp "${COM_OBS}/${RUN}.${cycle}.sgesprep_pre-relocate_pathname.${tmmark}" \ + "${COM_OBS}/${RUN}.${cycle}.sgesprep_pathname.${tmmark}" fi set +x echo echo "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" echo - set -x + set_trace fi if [ ! -s $pges ]; then set +x @@ -470,7 +458,7 @@ echo " Get global pressure grib GUESS valid for $fhr hrs relative to center" echo " relocation processing date/time" echo "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" echo - set -x + set_trace $USHGETGES/getges.sh -e $envir_getges -n $network_getges \ -v $CDATE10 -t $ptype $pges errges=$? @@ -482,7 +470,7 @@ echo "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" relative to center relocation date/time;" echo "ABNORMAL EXIT!!!!!!!!!!!" echo - set -x + set_trace if [ -s $DATA/err_exit ]; then $DATA/err_exit else @@ -495,14 +483,14 @@ relative to center relocation date/time;" echo echo "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" echo - set -x + set_trace fi done if [ -f ${tstsp}syndata.tcvitals.$tmmark ]; then cp ${tstsp}syndata.tcvitals.$tmmark tcvitals.now else - cp ${COMSP}syndata.tcvitals.$tmmark tcvitals.now + cp "${COM_OBS}/${RUN}.${cycle}.syndata.tcvitals.${tmmark}" "tcvitals.now" fi @@ -512,7 +500,7 @@ fi MP_PULSE=0 MP_TIMEOUT=600 -GDATE10=` ${NDATE:?} -06 ${CDATE10}` +GDATE10=$( ${NDATE:?} -06 ${CDATE10}) # make unique combined tcvitals file for t-12, t-6 and t+0 -- # if tcvitals does not contains record from current time, skip relocation @@ -523,13 +511,10 @@ grep "$pdy $cyc" VITL errgrep=$? > tcvitals if [ $errgrep -ne 0 ] ; then - msg="NO TCVITAL RECORDS FOUND FOR $CDATE10 - EXIT TROPICAL CYCLONE \ + echo "NO TCVITAL RECORDS FOUND FOR $CDATE10 - EXIT TROPICAL CYCLONE \ RELOCATION PROCESSING" - set +u - [ -n "$jlogfile" ] && postmsg "$jlogfile" "$msg" - set -u -# The existence of ${COMSP}tropcy_relocation_status.$tmmark file will tell the +# The existence of ${COM_OBS}/${RUN}.${cycle}.tropcy_relocation_status.$tmmark file will tell the # subsequent PREP processing that RELOCATION processing occurred, echo # "NO RECORDS to process" into it to further tell PREP processing that records # were not processed by relocation and the global sigma guess was NOT @@ -537,14 +522,15 @@ RELOCATION PROCESSING" # found) # Note: When tropical cyclone relocation does run to completion and the # global sigma guess is modified, the parent script to this will echo -# "RECORDS PROCESSED" into ${COMSP}tropcy_relocation_status.$tmmark +# "RECORDS PROCESSED" into ${COM_OBS}/${RUN}.${cycle}.tropcy_relocation_status.$tmmark # assuming it doesn't already exist (meaning "NO RECORDS to process" # was NOT echoed into it here) # ---------------------------------------------------------------------------- - echo "NO RECORDS to process" > ${COMSP}tropcy_relocation_status.$tmmark - [ ! -s ${COMSP}tcvitals.relocate.$tmmark ] && \ - cp /dev/null ${COMSP}tcvitals.relocate.$tmmark + echo "NO RECORDS to process" > "${COM_OBS}/${RUN}.${cycle}.tropcy_relocation_status.${tmmark}" + if [[ ! -s "${COM_OBS}/${RUN}.${cycle}.tcvitals.relocate.${tmmark}" ]]; then + cp "/dev/null" "${COM_OBS}/${RUN}.${cycle}.tcvitals.relocate.${tmmark}" + fi else cat VITL >>tcvitals @@ -567,7 +553,7 @@ else echo "$USHRELO/tropcy_relocate_extrkr.sh failed" echo "ABNORMAL EXIT!!!!!!!!!!!" echo - set -x + set_trace if [ -s $DATA/err_exit ]; then $DATA/err_exit "Script $USHRELO/tropcy_relocate_extrkr.sh failed" else @@ -593,7 +579,7 @@ else for fhr in $( seq -3 $BKGFREQ 3 ) ; do if [ $fhr -lt 0 ]; then - tpref=m`expr $fhr \* -1` + tpref=m$(expr $fhr \* -1) elif [ $fhr -eq 0 ]; then tpref=es elif [ $fhr -gt 0 ]; then @@ -650,7 +636,7 @@ else # check for success # ----------------- - echo; set -x + echo; set_trace if [ "$errSTATUS" -gt '0' ]; then if [ -s $DATA/err_exit ]; then $DATA/err_exit "Script RELOCATE_GES failed" @@ -666,7 +652,7 @@ else for fhr in $( seq -3 $BKGFREQ 3 ) ; do if [ $fhr -lt 0 ]; then - tpref=m`expr $fhr \* -1` + tpref=m$(expr $fhr \* -1) elif [ $fhr -eq 0 ]; then tpref=es elif [ $fhr -gt 0 ]; then @@ -698,44 +684,41 @@ else fi rm -f RELOCATE_GES cmd - if [ "$SENDCOM" = "YES" ]; then - cp rel_inform1 ${COMSP}inform.relocate.$tmmark - cp tcvitals ${COMSP}tcvitals.relocate.$tmmark - if [ "$SENDDBN" = "YES" ]; then - if test "$RUN" = "gdas1" - then - $DBNROOT/bin/dbn_alert MODEL GDAS1_TCI $job ${COMSP}inform.relocate.$tmmark - $DBNROOT/bin/dbn_alert MODEL GDAS1_TCI $job ${COMSP}tcvitals.relocate.$tmmark - fi - if test "$RUN" = "gfs" - then - $DBNROOT/bin/dbn_alert MODEL GFS_TCI $job ${COMSP}inform.relocate.$tmmark - $DBNROOT/bin/dbn_alert MODEL GFS_TCI $job ${COMSP}tcvitals.relocate.$tmmark - fi - fi + + cp "rel_inform1" "${COM_OBS}/${RUN}.${cycle}.inform.relocate.${tmmark}" + cp "tcvitals" "${COM_OBS}/${RUN}.${cycle}.tcvitals.relocate.${tmmark}" + if [ "$SENDDBN" = "YES" ]; then + if test "$RUN" = "gdas1" + then + "${DBNROOT}/bin/dbn_alert" "MODEL" "GDAS1_TCI" "${job}" "${COM_OBS}/${RUN}.${cycle}.inform.relocate.${tmmark}" + "${DBNROOT}/bin/dbn_alert" "MODEL" "GDAS1_TCI" "${job}" "${COM_OBS}/${RUN}.${cycle}.tcvitals.relocate.${tmmark}" + fi + if test "$RUN" = "gfs" + then + "${DBNROOT}/bin/dbn_alert" "MODEL" "GFS_TCI" "${job}" "${COM_OBS}/${RUN}.${cycle}.inform.relocate.${tmmark}" + "${DBNROOT}/bin/dbn_alert" "MODEL" "GFS_TCI" "${job}" "${COM_OBS}/${RUN}.${cycle}.tcvitals.relocate.${tmmark}" + fi fi # -------------------------------------------------------------------------- # Since relocation processing has ended sucessfully (and the center sigma -# guess has been modified), remove ${COMSP}sgesprep_pathname.$tmmark (which +# guess has been modified), remove ${COM_OBS}/${RUN}.${cycle}.sgesprep_pathname.$tmmark (which # had earlier had getges center sigma guess pathname written into it - in # case of error or no input tcvitals records found) - the subsequent PREP -# step will correctly update ${COMSP}sgesprep_pathname.$tmmark to point to +# step will correctly update ${COM_OBS}/${RUN}.${cycle}.sgesprep_pathname.$tmmark to point to # the sgesprep file updated here by the relocation # -------------------------------------------------------------------------- - rm ${COMSP}sgesprep_pathname.$tmmark + rm "${COM_OBS}/${RUN}.${cycle}.sgesprep_pathname.${tmmark}" - msg="TROPICAL CYCLONE RELOCATION PROCESSING SUCCESSFULLY COMPLETED FOR \ + echo "TROPICAL CYCLONE RELOCATION PROCESSING SUCCESSFULLY COMPLETED FOR \ $CDATE10" - set +u - [ -n "$jlogfile" ] && postmsg "$jlogfile" "$msg" - set -u # end GFDL ges manipulation # ------------------------- fi + exit 0 diff --git a/ush/tropcy_relocate_extrkr.sh b/ush/tropcy_relocate_extrkr.sh index 855fe472e4..ede2318c4a 100755 --- a/ush/tropcy_relocate_extrkr.sh +++ b/ush/tropcy_relocate_extrkr.sh @@ -1,8 +1,9 @@ -#!/bin/ksh +#! /usr/bin/env bash + # This script is executed by the script tropcy_relocate.sh # -------------------------------------------------------- -set -aeux +source "$HOMEgfs/ush/preamble.sh" export machine=${machine:-ZEUS} export machine=$(echo $machine|tr '[a-z]' '[A-Z]') @@ -210,12 +211,12 @@ export maxtime=22 # Max number of forecast time levels if [ ! -d ${vdir} ]; then mkdir -p ${vdir}; fi if [ ! -d ${TMPDIR} ]; then mkdir -p ${TMPDIR}; fi -CENT=`echo ${symdh} | cut -c1-2` -scc=`echo ${symdh} | cut -c1-2` -syy=`echo ${symdh} | cut -c3-4` -smm=`echo ${symdh} | cut -c5-6` -sdd=`echo ${symdh} | cut -c7-8` -shh=`echo ${symdh} | cut -c9-10` +CENT=$(echo ${symdh} | cut -c1-2) +scc=$(echo ${symdh} | cut -c1-2) +syy=$(echo ${symdh} | cut -c3-4) +smm=$(echo ${symdh} | cut -c5-6) +sdd=$(echo ${symdh} | cut -c7-8) +shh=$(echo ${symdh} | cut -c9-10) dishh=${shh} symd=${syy}${smm}${sdd} @@ -234,15 +235,15 @@ esac # model ID number to it. #---------------------------------------------------# -cmodel=`echo ${cmodel} | tr "[A-Z]" "[a-z]"` +cmodel=$(echo ${cmodel} | tr "[A-Z]" "[a-z]") case ${cmodel} in - gdas) set +x; echo " "; echo " ++ operational GDAS chosen"; set -x; + gdas) set +x; echo " "; echo " ++ operational GDAS chosen"; set_trace; fcstlen=9 ; fcsthrs="" for fhr in $( seq 0 $BKGFREQ 9); do - fhrchar=`printf %02d $fhr` + fhrchar=$(printf %02d $fhr) fcsthrs="$fcsthrs $fhrchar" done atcfnum=72 ; @@ -271,48 +272,48 @@ case ${cmodel} in # jpdtn=0 for deterministic data. g2_jpdtn=0 model=8;; - gfs) set +x; echo " "; echo " ++ operational GFS chosen"; set -x; + gfs) set +x; echo " "; echo " ++ operational GFS chosen"; set_trace; fcsthrsgfs=' 00 06 12 18 24 30 36 42 48 54 60 66 72 78'; gfsdir=$COMIN; gfsgfile=gfs.t${dishh}z.pgrbf; model=1;; - mrf) set +x; echo " "; echo " ++ operational MRF chosen"; set -x; + mrf) set +x; echo " "; echo " ++ operational MRF chosen"; set_trace; fcsthrsmrf=' 00 12 24 36 48 60 72'; mrfdir=$COMIN; mrfgfile=drfmr.t${dishh}z.pgrbf; model=2;; - ukmet) set +x; echo " "; echo " ++ operational UKMET chosen"; set -x; + ukmet) set +x; echo " "; echo " ++ operational UKMET chosen"; set_trace; fcsthrsukmet=' 00 12 24 36 48 60 72'; ukmetdir=$COMIN; ukmetgfile=ukmet.t${dishh}z.ukmet; model=3;; - ecmwf) set +x; echo " "; echo " ++ operational ECMWF chosen"; set -x; + ecmwf) set +x; echo " "; echo " ++ operational ECMWF chosen"; set_trace; fcsthrsecmwf=' 00 24 48 72'; ecmwfdir=$COMIN; ecmwfgfile=ecmgrb25.t12z; model=4;; - ngm) set +x; echo " "; echo " ++ operational NGM chosen"; set -x; + ngm) set +x; echo " "; echo " ++ operational NGM chosen"; set_trace; fcsthrsngm=' 00 06 12 18 24 30 36 42 48'; ngmdir=$COMIN; ngmgfile=ngm.t${dishh}z.pgrb.f; model=5;; - nam) set +x; echo " "; echo " ++ operational Early NAM chosen"; set -x; + nam) set +x; echo " "; echo " ++ operational Early NAM chosen"; set_trace; fcsthrsnam=' 00 06 12 18 24 30 36 42 48'; namdir=$COMIN; namgfile=nam.t${dishh}z.awip32; model=6;; - ngps) set +x; echo " "; echo " ++ operational NAVGEM chosen"; set -x; + ngps) set +x; echo " "; echo " ++ operational NAVGEM chosen"; set_trace; fcsthrsngps=' 00 12 24 36 48 60 72'; #ngpsdir=/com/hourly/prod/hourly.${CENT}${symd}; ngpsdir=$OMIN; ngpsgfile=fnoc.t${dishh}z; model=7;; other) set +x; echo " "; echo " Model selected by user is ${cmodel}, which is a "; - echo "user-defined model, NOT operational...."; echo " "; set -x; + echo "user-defined model, NOT operational...."; echo " "; set_trace; model=9;; *) set +x; echo " "; echo " !!! Model selected is not recognized."; echo " Model= ---> ${cmodel} <--- ..... Please submit the script again...."; - echo " "; set -x; exit 8;; + echo " "; set_trace; exit 8;; esac @@ -359,11 +360,11 @@ if [ ${cmodel} = 'other' ]; then # pos3= character position immediately after "00" # pos4= character position of last character in name - otherdir=`dirname ${inpfile}` - fname=`basename ${inpfile}` + otherdir=$(dirname ${inpfile}) + fname=$(basename ${inpfile}) - pos2=`echo ${fname} | awk '{ match($0,/XX/); print RSTART }'` - pos4=`echo ${fname} | awk '{ match($0,/$/); print RSTART }'` + pos2=$(echo ${fname} | awk '{ match($0,/XX/); print RSTART }') + pos4=$(echo ${fname} | awk '{ match($0,/$/); print RSTART }') let pos4=pos4-1 let pos1=pos2-1 let pos3=pos2+2 @@ -376,13 +377,13 @@ if [ ${cmodel} = 'other' ]; then echo " replace the forecast hour characters 00 with XX. Please check the" echo " name in the kickoff script and qsub it again. Exiting....." echo " " - set -x + set_trace exit 8 fi - fnamebeg=`echo ${fname} | cut -c1-${pos1}` + fnamebeg=$(echo ${fname} | cut -c1-${pos1}) if [ ${pos4} -ge ${pos3} ]; then - fnameend=`echo ${fname} | cut -c${pos3}-${pos4}` + fnameend=$(echo ${fname} | cut -c${pos3}-${pos4}) else fnameend="" fi @@ -399,7 +400,7 @@ if [ ${cmodel} = 'other' ]; then echo " " echo " !!! Exiting loop, only processing 14 forecast files ...." echo " " - set -x + set_trace break fi @@ -414,7 +415,7 @@ if [ ${cmodel} = 'other' ]; then echo " " echo " +++ Found file ${fnamebeg}${fhour}${fnameend}" echo " " - set -x + set_trace let fhrct=fhrct+1 else fflag='n' @@ -427,14 +428,14 @@ if [ ${cmodel} = 'other' ]; then if [ ! -s ${otherdir}/${fnamebeg}00${fnameend} ]; then set +x echo " " - echo " !!! ERROR in `basename $0`" + echo " !!! ERROR in $(basename $0)" echo " !!! Input analysis file cannot be found." echo " !!! The tracker is looking for this file in: " echo " !!! ----> ${otherdir}/${fnamebeg}00${fnameend}" echo " !!! Please check the directory to make sure the file" echo " !!! is there and then submit this job again." echo " " - set -x + set_trace exit 8 fi @@ -443,7 +444,7 @@ if [ ${cmodel} = 'other' ]; then echo " Max forecast hour is $maxhour" echo " List of forecast hours: $fcsthrsother" echo " " - set -x + set_trace # -------------------------------------------------- # In order for the fortran program to know how many @@ -490,18 +491,18 @@ mv ${vdir}/tempvit.nonameless ${vdir}/vitals.${symd}${dishh} # tracking program. #--------------------------------------------------------------# -ymdh6ago=` ${NDATE:?} -6 ${CENT}${symd}${dishh}` -syy6=`echo ${ymdh6ago} | cut -c3-4` -smm6=`echo ${ymdh6ago} | cut -c5-6` -sdd6=`echo ${ymdh6ago} | cut -c7-8` -shh6=`echo ${ymdh6ago} | cut -c9-10` +ymdh6ago=$( ${NDATE:?} -6 ${CENT}${symd}${dishh}) +syy6=$(echo ${ymdh6ago} | cut -c3-4) +smm6=$(echo ${ymdh6ago} | cut -c5-6) +sdd6=$(echo ${ymdh6ago} | cut -c7-8) +shh6=$(echo ${ymdh6ago} | cut -c9-10) symd6=${syy6}${smm6}${sdd6} -ymdh6ahead=` ${NDATE:?} 6 ${CENT}${symd}${dishh}` -syyp6=`echo ${ymdh6ahead} | cut -c3-4` -smmp6=`echo ${ymdh6ahead} | cut -c5-6` -sddp6=`echo ${ymdh6ahead} | cut -c7-8` -shhp6=`echo ${ymdh6ahead} | cut -c9-10` +ymdh6ahead=$( ${NDATE:?} 6 ${CENT}${symd}${dishh}) +syyp6=$(echo ${ymdh6ahead} | cut -c3-4) +smmp6=$(echo ${ymdh6ahead} | cut -c5-6) +sddp6=$(echo ${ymdh6ahead} | cut -c7-8) +shhp6=$(echo ${ymdh6ahead} | cut -c9-10) symdp6=${syyp6}${smmp6}${sddp6} vit_incr=6 @@ -516,7 +517,7 @@ cat<$TMPDIR/suv_input &hourinfo vit_hr_incr=${vit_incr}/ EOF -numvitrecs=`cat ${vdir}/vitals.${symd}${dishh} | wc -l` +numvitrecs=$(cat ${vdir}/vitals.${symd}${dishh} | wc -l) if [ ${numvitrecs} -eq 0 ]; then set +x echo " " @@ -525,7 +526,7 @@ if [ ${numvitrecs} -eq 0 ]; then echo "!!! It could just be that there are no storms for the current" echo "!!! time. Please check the dates and submit this job again...." echo " " - set -x + set_trace exit 8 fi @@ -569,23 +570,21 @@ mv ${TMPDIR}/vitals.${symd}${dishh}.y4 ${vdir}/vitals.${symd}${dishh} #cp $auxtcvit ${vdir}/vitals.${symd}${dishh} -pgm=`basename $SUPVX` +pgm=$(basename $SUPVX) if [ -s $DATA/prep_step ]; then set +e . $DATA/prep_step - set -e + set_strict else [ -f errfile ] && rm errfile export XLFUNITS=0 - unset `env | grep XLFUNIT | awk -F= '{print $1}'` + unset $(env | grep XLFUNIT | awk -F= '{print $1}') - set +u - if [ -z "$XLFRTEOPTS" ]; then + if [ -z "${XLFRTEOPTS:-}" ]; then export XLFRTEOPTS="unit_vars=yes" else export XLFRTEOPTS="${XLFRTEOPTS}:unit_vars=yes" fi - set -u fi @@ -614,14 +613,14 @@ set +x echo echo 'The foreground exit status for SUPVIT is ' $err echo -set -x +set_trace if [ $err -eq 0 ]; then set +x echo " " echo " Normal end for program supvitql (which updates TC vitals file)." echo " " - set -x + set_trace else set +x echo " " @@ -631,7 +630,7 @@ else echo "!!! model= ${cmodel}, forecast initial time = ${symd}${dishh}" echo "!!! Exiting...." echo " " - set -x + set_trace fi if [ -s $DATA/err_chk ]; then $DATA/err_chk @@ -652,7 +651,7 @@ fi # then exit. #------------------------------------------------------------------# -numvitrecs=`cat ${vdir}/vitals.upd.${cmodel}.${symd}${dishh} | wc -l` +numvitrecs=$(cat ${vdir}/vitals.upd.${cmodel}.${symd}${dishh} | wc -l) if [ ${numvitrecs} -eq 0 ]; then set +x echo " " @@ -661,7 +660,7 @@ if [ ${numvitrecs} -eq 0 ]; then echo "!!! File ${vdir}/vitals.upd.${cmodel}.${symd}${dishh} is empty." echo "!!! Please check the dates and submit this job again...." echo " " - set -x + set_trace exit 8 fi @@ -677,7 +676,7 @@ echo " Below is a list of the storms to be processed: " | tee -a storm_list echo " " | tee -a storm_list cat ${vdir}/vitals.upd.${cmodel}.${symd}${dishh} | tee -a storm_list echo " " | tee -a storm_list -set -x +set_trace set +u [ -n "../$pgmout" ] && cat storm_list >> ../$pgmout @@ -693,7 +692,7 @@ do done dtg_current="${symd} ${dishh}00" -smax=` grep "${dtg_current}" ${vdir}/vitals.upd.${cmodel}.${symd}${dishh} | wc -l` +smax=$( grep "${dtg_current}" ${vdir}/vitals.upd.${cmodel}.${symd}${dishh} | wc -l) sct=1 while [ ${sct} -le ${smax} ] @@ -730,7 +729,7 @@ echo " NOW CUTTING APART INPUT GRIB FILES TO " echo " CREATE 1 BIG GRIB INPUT FILE " echo " -----------------------------------------" echo " " -set -x +set_trace #grid='255 0 151 71 70000 190000 128 0000 340000 1000 1000 64' #grid='255 0 360 181 90000 0000 128 -90000 -1000 1000 1000 64' @@ -757,7 +756,7 @@ if [ ${model} -eq 5 ]; then echo " !!! in the analysis data." echo " *******************************************************************" echo " " - set -x + set_trace fi if [ -s ${vdir}/ngmlatlon.pgrb.${symd}${dishh} ]; then @@ -773,7 +772,7 @@ if [ ${model} -eq 5 ]; then echo " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo " !!! NGM File missing: ${ngmdir}/${ngmgfile}${fhour}" echo " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - set -x + set_trace continue fi if [ -s $TMPDIR/tmpixfile ]; then rm $TMPDIR/tmpixfile; fi @@ -784,7 +783,7 @@ if [ ${model} -eq 5 ]; then echo " " echo " Extracting NGM GRIB data for forecast hour = $fhour" echo " " - set -x + set_trace g1=${ngmdir}/${ngmgfile}${fhour} @@ -808,7 +807,7 @@ if [ ${model} -eq 5 ]; then echo "!!! sure you've allocated enough memory for this job (error 134 using $COPYGB is " echo "!!! typically due to using more memory than you've allocated). Exiting....." echo " " - set -x + set_trace exit 8 fi @@ -847,7 +846,7 @@ if [ ${model} -eq 6 ]; then echo " !!! in the analysis data." echo " *******************************************************************" echo " " - set -x + set_trace fi if [ -s ${vdir}/namlatlon.pgrb.${symd}${dishh} ]; then @@ -863,7 +862,7 @@ if [ ${model} -eq 6 ]; then echo " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo " !!! Early NAM File missing: ${namdir}/${namgfile}${fhour}.tm00" echo " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - set -x + set_trace continue fi if [ -s $TMPDIR/tmpixfile ]; then rm $TMPDIR/tmpixfile; fi @@ -874,7 +873,7 @@ if [ ${model} -eq 6 ]; then echo " " echo " Extracting Early NAM GRIB data for forecast hour = $fhour" echo " " - set -x + set_trace g1=${namdir}/${namgfile}${fhour}.tm00 @@ -899,7 +898,7 @@ if [ ${model} -eq 6 ]; then echo "!!! sure you've allocated enough memory for this job (error 134 using $COPYGB is " echo "!!! typically due to using more memory than you've allocated). Exiting....." echo " " - set -x + set_trace exit 8 fi @@ -947,7 +946,7 @@ if [ ${model} -eq 4 ]; then echo " " echo " !!! Due to missing ECMWF file, execution is ending...." echo " " - set -x + set_trace exit 8 fi @@ -990,7 +989,7 @@ if [ ${model} -eq 1 ]; then echo " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo " !!! GFS File missing: ${gfsdir}/${gfsgfile}${fhour}" echo " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" - set -x + set_trace continue fi @@ -1046,7 +1045,7 @@ if [ ${model} -eq 8 ]; then for fhr in $( seq -6 $BKGFREQ 3 ); do if [ $fhr -lt 0 ]; then - fpref=pgm`expr $fhr \* -1` + fpref=pgm$(expr $fhr \* -1) elif [ $fhr -eq 0 ]; then fpref=pges elif [ $fhr -gt 0 ]; then @@ -1061,7 +1060,7 @@ if [ ${model} -eq 8 ]; then echo " !!! gdas File missing: $gfile" echo " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo " " - set -x + set_trace continue fi @@ -1092,8 +1091,8 @@ if [ ${model} -eq 8 ]; then for fhr in $( seq -6 $BKGFREQ 3 ); do if [ $fhr -lt 0 ]; then - fhour=0`expr $fhr \* -1` - fpref=pgm`expr $fhr \* -1` + fhour=0$(expr $fhr \* -1) + fpref=pgm$(expr $fhr \* -1) elif [ $fhr -eq 0 ]; then fhour=00 fpref=pges @@ -1110,7 +1109,7 @@ if [ ${model} -eq 8 ]; then echo " !!! gdas File missing: $gfile" echo " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo " " - set -x + set_trace continue fi @@ -1165,7 +1164,7 @@ if [ ${model} -eq 2 ]; then echo " !!! MRF File missing: ${mrfdir}/${mrfgfile}${fhour}" echo " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo " " - set -x + set_trace continue fi @@ -1220,7 +1219,7 @@ if [ ${model} -eq 3 ]; then echo " !!! UKMET File missing: ${ukmetdir}/${ukmetgfile}${fhour}" echo " !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo " " - set -x + set_trace continue fi @@ -1261,7 +1260,7 @@ if [ ${model} -eq 7 ]; then echo " " echo " !!! Due to missing NAVGEM file, execution is ending...." echo " " - set -x + set_trace exit 8 fi @@ -1317,8 +1316,8 @@ if [ ${model} -eq 9 ]; then rm ${vdir}/otherlatlon.pgrb.${symdh} fi - gridtyp=`${WGRIB:?} -GDS10 ${otherdir}/${fnamebeg}00${fnameend} | \ - awk -FGDS10= '{print $2}' | awk '{print $6}' | sed -n 1p` + gridtyp=$(${WGRIB:?} -GDS10 ${otherdir}/${fnamebeg}00${fnameend} | \ + awk -FGDS10= '{print $2}' | awk '{print $6}' | sed -n 1p) if [ ${gridtyp} -eq 0 ]; then @@ -1336,7 +1335,7 @@ if [ ${model} -eq 9 ]; then echo "!!! Forecast File missing: ${otherdir}/${fnamebeg}00${fnameend}" echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" echo " " - set -x + set_trace continue fi @@ -1410,7 +1409,7 @@ if [ ${model} -eq 9 ]; then echo "!!! sure you've allocated enough memory for this job (error 134 using $COPYGB is " echo "!!! typically due to using more memory than you've allocated). Exiting....." echo " " - set -x + set_trace exit 8 fi @@ -1441,9 +1440,9 @@ while [ $ist -le 15 ] do if [ ${stormflag[${ist}]} -ne 1 ] then - set +x; echo "Storm number $ist NOT selected for processing"; set -x + set +x; echo "Storm number $ist NOT selected for processing"; set_trace else - set +x; echo "Storm number $ist IS selected for processing...."; set -x + set +x; echo "Storm number $ist IS selected for processing...."; set_trace fi let ist=ist+1 done @@ -1454,12 +1453,12 @@ done ifh=1 while [ $ifh -le ${maxtime} ] do - fh[${ifh}]=` echo ${fcsthrs} | awk '{print $n}' n=$ifh` + fh[${ifh}]=$( echo ${fcsthrs} | awk '{print $n}' n=$ifh) let ifh=ifh+1 done namelist=${vdir}/gettrk.input.${cmodel}.${symdh} -ATCFNAME=` echo "${atcfname}" | tr '[a-z]' '[A-Z]'` +ATCFNAME=$( echo "${atcfname}" | tr '[a-z]' '[A-Z]') export atcfymdh=${scc}${syy}${smm}${sdd}${shh} contour_interval=100.0 @@ -1503,13 +1502,13 @@ echo " wait_max_wait=1800," >>${namelist} echo " wait_sleeptime=5," >>${namelist} echo " per_fcst_command=''/" >>${namelist} -pgm=`basename $GETTX` +pgm=$(basename $GETTX) if [ -s $DATA/prep_step ]; then . $DATA/prep_step else [ -f errfile ] && rm errfile export XLFUNITS=0 - unset `env | grep XLFUNIT | awk -F= '{print $1}'` + unset $(env | grep XLFUNIT | awk -F= '{print $1}') set +u if [ -z "$XLFRTEOPTS" ]; then @@ -1562,7 +1561,7 @@ set +x echo echo 'The foreground exit status for GETTRK is ' $err echo -set -x +set_trace if [ -s $DATA/err_chk ]; then $DATA/err_chk @@ -1581,5 +1580,6 @@ fi cp ${vdir}/trak.${cmodel}.all.${symdh} ${DATA}/model_track.all + exit 0 diff --git a/ush/ufs_configure.sh b/ush/ufs_configure.sh new file mode 100755 index 0000000000..8898d11162 --- /dev/null +++ b/ush/ufs_configure.sh @@ -0,0 +1,107 @@ +#! /usr/bin/env bash + +##### +## This script writes ufs.configure file +## first, select a "*.IN" templates based on +## $confignamevarforufs and parse values based on +## $cpl** switches. +## +## This is a child script of modular +## forecast script. This script is definition only (Is it? There is nothing defined here being used outside this script.) +##### + +# Disable variable not used warnings +# shellcheck disable=SC2034 +writing_ufs_configure() { + +echo "SUB ${FUNCNAME[0]}: ufs.configure.sh begins" + +# Setup ufs.configure +local DumpFields=${NEMSDumpFields:-false} +local cap_dbug_flag=${cap_dbug_flag:-0} +# Determine "cmeps_run_type" based on the availability of the mediator restart file +# If it is a warm_start, we already copied the mediator restart to DATA, if it was present +# If the mediator restart was not present, despite being a "warm_start", we put out a WARNING +# in forecast_postdet.sh +if [[ -f "${DATA}/ufs.cpld.cpl.r.nc" ]]; then + local cmeps_run_type='continue' +else + local cmeps_run_type='startup' +fi + +local esmf_logkind=${esmf_logkind:-"ESMF_LOGKIND_MULTI"} #options: ESMF_LOGKIND_MULTI_ON_ERROR, ESMF_LOGKIND_MULTI, ESMF_LOGKIND_NONE + +# Atm-related +local atm_model="fv3" +local atm_petlist_bounds="0 $(( ATMPETS-1 ))" +local atm_omp_num_threads="${ATMTHREADS}" + +local med_model="cmeps" +local med_petlist_bounds="0 $(( MEDPETS-1 ))" +local med_omp_num_threads="${MEDTHREADS}" + +if [[ "${cpl}" = ".true." ]]; then + local coupling_interval_slow_sec="${CPL_SLOW}" +fi + +if [[ "${cplflx}" = ".true." ]]; then + + local use_coldstart=${use_coldstart:-".false."} + local use_mommesh=${USE_MOMMESH:-"true"} + + local ocn_model="mom6" + local ocn_petlist_bounds="${ATMPETS} $(( ATMPETS+OCNPETS-1 ))" + local ocn_omp_num_threads="${OCNTHREADS}" + local RUNTYPE="${cmeps_run_type}" + local CPLMODE="${cplmode}" + local coupling_interval_fast_sec="${CPL_FAST}" + local RESTART_N="${restart_interval}" + local ocean_albedo_limit=0.06 + local ATMTILESIZE="${CASE:1}" + local ocean_albedo_limit=0.06 +fi + +if [[ "${cplice}" = ".true." ]]; then + + local ice_model="cice6" + local ice_petlist_bounds="$(( ATMPETS+OCNPETS )) $(( ATMPETS+OCNPETS+ICEPETS-1 ))" + local ice_omp_num_threads="${ICETHREADS}" + local MESH_OCN_ICE=${MESH_OCN_ICE:-"mesh.mx${ICERES}.nc"} + local FHMAX="${FHMAX_GFS}" # TODO: How did this get in here hard-wired to FHMAX_GFS? +fi + +if [[ "${cplwav}" = ".true." ]]; then + + local wav_model="ww3" + local wav_petlist_bounds="$(( ATMPETS+OCNPETS+ICEPETS )) $(( ATMPETS+OCNPETS+ICEPETS+WAVPETS-1 ))" + local wav_omp_num_threads="${WAVTHREADS}" + local MULTIGRID="${waveMULTIGRID}" + +fi + +if [[ "${cplchm}" = ".true." ]]; then + + local chm_model="gocart" + local chm_petlist_bounds="0 $(( CHMPETS-1 ))" + local chm_omp_num_threads="${CHMTHREADS}" + local coupling_interval_fast_sec="${CPL_FAST}" + +fi + +# Ensure the template exists +if [[ ! -r "${ufs_configure_template}" ]]; then + echo "FATAL ERROR: template '${ufs_configure_template}' does not exist, ABORT!" + exit 1 +fi + +source "${HOMEgfs}/ush/atparse.bash" +rm -f "${DATA}/ufs.configure" +atparse < "${ufs_configure_template}" >> "${DATA}/ufs.configure" +echo "Rendered ufs.configure:" +cat ufs.configure + +${NCP} "${HOMEgfs}/sorc/ufs_model.fd/tests/parm/fd_ufs.yaml" fd_ufs.yaml + +echo "SUB ${FUNCNAME[0]}: ufs.configure.sh ends for ${ufs_configure_template}" + +} diff --git a/ush/wave_grib2_sbs.sh b/ush/wave_grib2_sbs.sh index 0c04f0fcb2..af28760269 100755 --- a/ush/wave_grib2_sbs.sh +++ b/ush/wave_grib2_sbs.sh @@ -1,5 +1,5 @@ -#!/bin/bash -# +#! /usr/bin/env bash + ################################################################################ # # UNIX Script Documentation Block @@ -17,61 +17,62 @@ # # Attributes: # Language: Bourne-again (BASH) shell -# Machine: WCOSS-DELL-P3 # -# Requirements: -# - wgrib2 with IPOLATES library -# +# Requirements: +# - wgrib2 with IPOLATES library +# ################################################################################ # --------------------------------------------------------------------------- # # 0. Preparations -# 0.a Basic modes of operation - # set execution trace prompt. ${0##*/} adds the script's basename - PS4=" \${SECONDS} ${0##*/} L\${LINENO} + " - set -x +source "${HOMEgfs}/ush/preamble.sh" - # Use LOUD variable to turn on/off trace. Defaults to YES (on). - export LOUD=${LOUD:-YES}; [[ $LOUD = yes ]] && export LOUD=YES - [[ "$LOUD" != YES ]] && set +x +# 0.a Basic modes of operation - cd $GRIBDATA -# postmsg "$jlogfile" "Making GRIB2 Files." # commented to reduce unnecessary output to jlogfile +cd "${GRIBDATA}" || exit 2 - grdID=$1 - gribDIR=${grdID}_grib - rm -rfd ${gribDIR} - mkdir ${gribDIR} - err=$? - if [ $err != 0 ] - then - set +x - echo ' ' - echo '******************************************************************************* ' - echo '*** FATAL ERROR : ERROR IN ww3_grib2 (COULD NOT CREATE TEMP DIRECTORY) *** ' - echo '******************************************************************************* ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : ERROR IN ww3_grib2 (Could not create temp directory)" - exit 1 - fi +alertName=${RUN^^} + +grdID=$1 +gribDIR="${grdID}_grib" +rm -rfd "${gribDIR}" +mkdir "${gribDIR}" +err=$? +if [[ ${err} != 0 ]]; then + set +x + echo ' ' + echo '******************************************************************************* ' + echo '*** FATAL ERROR : ERROR IN ww3_grib2 (COULD NOT CREATE TEMP DIRECTORY) *** ' + echo '******************************************************************************* ' + echo ' ' + set_trace + exit 1 +fi - cd ${gribDIR} +cd "${gribDIR}" || exit 2 # 0.b Define directories and the search path. # The tested variables should be exported by the postprocessor script. - GRIDNR=$2 - MODNR=$3 - ymdh=$4 - fhr=$5 - grdnam=$6 - grdres=$7 - gribflags=$8 - ngrib=1 # only one time slice - dtgrib=3600 # only one time slice +GRIDNR=$2 +MODNR=$3 +ymdh=$4 +fhr=$5 +grdnam=$6 +grdres=$7 +gribflags=$8 +ngrib=1 # only one time slice +dtgrib=3600 # only one time slice # SBS one time slice per file - FH3=$(printf %03i $fhr) +FH3=$(printf %03i "${fhr}") + +# Verify if grib2 file exists from interrupted run +ENSTAG="" +if [[ -n ${waveMEMB} ]]; then ENSTAG=".${membTAG}${waveMEMB}" ; fi +outfile="${WAV_MOD_TAG}.${cycle}${ENSTAG}.${grdnam}.${grdres}.f${FH3}.grib2" + +# Only create file if not present in COM +if [[ ! -s "${COM_WAVE_GRID}/${outfile}.idx" ]]; then set +x echo ' ' @@ -79,157 +80,175 @@ echo '! Make GRIB files |' echo '+--------------------------------+' echo " Model ID : $WAV_MOD_TAG" - [[ "$LOUD" = YES ]] && set -x + set_trace - if [ -z "$CDATE" ] || [ -z "$cycle" ] || [ -z "$EXECwave" ] || \ - [ -z "$COMOUT" ] || [ -z "$WAV_MOD_TAG" ] || [ -z "$SENDCOM" ] || \ - [ -z "$gribflags" ] || \ - [ -z "$GRIDNR" ] || [ -z "$MODNR" ] || [ -z "$SENDDBN" ] - then + if [[ -z "${PDY}" ]] || [[ -z ${cyc} ]] || [[ -z "${cycle}" ]] || [[ -z "${EXECwave}" ]] || \ + [[ -z "${COM_WAVE_GRID}" ]] || [[ -z "${WAV_MOD_TAG}" ]] || [[ -z "${gribflags}" ]] || \ + [[ -z "${GRIDNR}" ]] || [[ -z "${MODNR}" ]] || \ + [[ -z "${SENDDBN}" ]]; then set +x echo ' ' echo '***************************************************' echo '*** EXPORTED VARIABLES IN postprocessor NOT SET ***' echo '***************************************************' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "EXPORTED VARIABLES IN postprocessor NOT SET" + set_trace exit 1 fi -# 0.c Starting time for output + # 0.c Starting time for output - tstart="`echo $ymdh | cut -c1-8` `echo $ymdh | cut -c9-10`0000" + tstart="${ymdh:0:8} ${ymdh:8:2}0000" set +x - echo " Starting time : $tstart" - echo " Time step : Single SBS - echo " Number of times : Single SBS - echo " GRIB field flags : $gribflags" + echo " Starting time : ${tstart}" + echo " Time step : Single SBS" + echo " Number of times : Single SBS" + echo " GRIB field flags : ${gribflags}" echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace -# 0.e Links to working directory + # 0.e Links to working directory - ln -s ${DATA}/mod_def.$grdID mod_def.ww3 - ln -s ${DATA}/output_${ymdh}0000/out_grd.$grdID out_grd.ww3 + ln -s "${DATA}/mod_def.${grdID}" "mod_def.ww3" + ln -s "${DATA}/output_${ymdh}0000/out_grd.${grdID}" "out_grd.ww3" -# --------------------------------------------------------------------------- # -# 1. Generate GRIB file with all data -# 1.a Generate input file for ww3_grib2 -# Template copied in mother script ... + # --------------------------------------------------------------------------- # + # 1. Generate GRIB file with all data + # 1.a Generate input file for ww3_grib2 + # Template copied in mother script ... set +x echo " Generate input file for ww3_grib2" - [[ "$LOUD" = YES ]] && set -x + set_trace - sed -e "s/TIME/$tstart/g" \ - -e "s/DT/$dtgrib/g" \ - -e "s/NT/$ngrib/g" \ - -e "s/GRIDNR/$GRIDNR/g" \ - -e "s/MODNR/$MODNR/g" \ - -e "s/FLAGS/$gribflags/g" \ - ${DATA}/ww3_grib2.${grdID}.inp.tmpl > ww3_grib.inp + sed -e "s/TIME/${tstart}/g" \ + -e "s/DT/${dtgrib}/g" \ + -e "s/NT/${ngrib}/g" \ + -e "s/GRIDNR/${GRIDNR}/g" \ + -e "s/MODNR/${MODNR}/g" \ + -e "s/FLAGS/${gribflags}/g" \ + "${DATA}/ww3_grib2.${grdID}.inp.tmpl" > ww3_grib.inp -# 1.b Run GRIB packing program + + echo "ww3_grib.inp" + cat ww3_grib.inp + + # 1.b Run GRIB packing program set +x echo " Run ww3_grib2" - echo " Executing $EXECwave/ww3_grib" - [[ "$LOUD" = YES ]] && set -x - ENSTAG="" - if [ ${waveMEMB} ]; then ENSTAG=".${membTAG}${waveMEMB}" ; fi - outfile=${WAV_MOD_TAG}.${cycle}${ENSTAG}.${grdnam}.${grdres}.f${FH3}.grib2 - $EXECwave/ww3_grib > grib2_${grdnam}_${FH3}.out 2>&1 - $WGRIB2 gribfile -set_date $CDATE -set_ftime "$fhr hour fcst" -grib ${COMOUT}/gridded/${outfile} - err=$? - - if [ $err != 0 ] - then + echo " Executing ${EXECwave}/ww3_grib" + set_trace + + export pgm=ww3_grib;. prep_step + "${EXECwave}/ww3_grib" > "grib2_${grdnam}_${FH3}.out" 2>&1 + export err=$?;err_chk + + if [ ! -s gribfile ]; then + set +x + echo ' ' + echo '************************************************ ' + echo '*** FATAL ERROR : ERROR IN ww3_grib encoding *** ' + echo '************************************************ ' + echo ' ' + set_trace + exit 3 + fi + + if (( fhr > 0 )); then + ${WGRIB2} gribfile -set_date "${PDY}${cyc}" -set_ftime "${fhr} hour fcst" -grib "${COM_WAVE_GRID}/${outfile}" + err=$? + else + ${WGRIB2} gribfile -set_date "${PDY}${cyc}" -set_ftime "${fhr} hour fcst" \ + -set table_1.4 1 -set table_1.2 1 -grib "${COM_WAVE_GRID}/${outfile}" + err=$? + fi + + if [[ ${err} != 0 ]]; then set +x echo ' ' echo '********************************************* ' echo '*** FATAL ERROR : ERROR IN ww3_grib2 *** ' echo '********************************************* ' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : ERROR IN ww3_grib2" + set_trace exit 3 fi -# Create index - $WGRIB2 -s $COMOUT/gridded/${outfile} > $COMOUT/gridded/${outfile}.idx + # Create index + ${WGRIB2} -s "${COM_WAVE_GRID}/${outfile}" > "${COM_WAVE_GRID}/${outfile}.idx" -# Create grib2 subgrid is this is the source grid - if [ "${grdID}" = "${WAV_SUBGRBSRC}" ]; then + # Create grib2 subgrid is this is the source grid + if [[ "${grdID}" = "${WAV_SUBGRBSRC}" ]]; then for subgrb in ${WAV_SUBGRB}; do - subgrbref=`echo ${!subgrb} | cut -d " " -f 1-20` - subgrbnam=`echo ${!subgrb} | cut -d " " -f 21` - subgrbres=`echo ${!subgrb} | cut -d " " -f 22` + subgrbref=$(echo ${!subgrb} | cut -d " " -f 1-20) + subgrbnam=$(echo ${!subgrb} | cut -d " " -f 21) + subgrbres=$(echo ${!subgrb} | cut -d " " -f 22) subfnam="${WAV_MOD_TAG}.${cycle}${ENSTAG}.${subgrbnam}.${subgrbres}.f${FH3}.grib2" - $COPYGB2 -g "${subgrbref}" -i0 -x ${COMOUT}/gridded/${outfile} ${COMOUT}/gridded/${subfnam} - $WGRIB2 -s $COMOUT/gridded/${subfnam} > $COMOUT/gridded/${subfnam}.idx + ${COPYGB2} -g "${subgrbref}" -i0 -x "${COM_WAVE_GRID}/${outfile}" "${COM_WAVE_GRID}/${subfnam}" + ${WGRIB2} -s "${COM_WAVE_GRID}/${subfnam}" > "${COM_WAVE_GRID}/${subfnam}.idx" done fi -# 1.e Save in /com - - if [ ! -s $COMOUT/gridded/${outfile} ] - then - set +x - echo ' ' - echo '********************************************* ' - echo '*** FATAL ERROR : ERROR IN ww3_grib2 *** ' - echo '********************************************* ' - echo ' ' - echo " Error in moving grib file ${outfile} to com" - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : ERROR IN ww3_grib2" - exit 4 - fi - if [ ! -s $COMOUT/gridded/${outfile} ] - then - set +x - echo ' ' - echo '*************************************************** ' - echo '*** FATAL ERROR : ERROR IN ww3_grib2 INDEX FILE *** ' - echo '*************************************************** ' - echo ' ' - echo " Error in moving grib file ${outfile}.idx to com" - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : ERROR IN creating ww3_grib2 index" - exit 4 - fi - - if [ "$SENDDBN" = 'YES' ] - then - set +x - echo " Alerting GRIB file as $COMOUT/gridded/${outfile}" - echo " Alerting GRIB index file as $COMOUT/gridded/${outfile}.idx" - [[ "$LOUD" = YES ]] && set -x - $DBNROOT/bin/dbn_alert MODEL WAVE_GRIB_GB2 $job $COMOUT/gridded/${outfile} - $DBNROOT/bin/dbn_alert MODEL WAVE_GRIB_GB2_WIDX $job $COMOUT/gridded/${outfile}.idx - fi - - -# --------------------------------------------------------------------------- # -# 3. Clean up the directory + # 1.e Save in /com + + if [[ ! -s "${COM_WAVE_GRID}/${outfile}" ]]; then + set +x + echo ' ' + echo '********************************************* ' + echo '*** FATAL ERROR : ERROR IN ww3_grib2 *** ' + echo '********************************************* ' + echo ' ' + echo " Error in moving grib file ${outfile} to com" + echo ' ' + set_trace + exit 4 + fi + if [[ ! -s "${COM_WAVE_GRID}/${outfile}.idx" ]]; then + set +x + echo ' ' + echo '*************************************************** ' + echo '*** FATAL ERROR : ERROR IN ww3_grib2 INDEX FILE *** ' + echo '*************************************************** ' + echo ' ' + echo " Error in moving grib file ${outfile}.idx to com" + echo ' ' + set_trace + exit 4 + fi + + if [[ "${SENDDBN}" = 'YES' ]] && [[ ${outfile} != *global.0p50* ]]; then + set +x + echo " Alerting GRIB file as ${COM_WAVE_GRID}/${outfile}" + echo " Alerting GRIB index file as ${COM_WAVE_GRID}/${outfile}.idx" + set_trace + "${DBNROOT}/bin/dbn_alert" MODEL "${alertName}_WAVE_GB2" "${job}" "${COM_WAVE_GRID}/${outfile}" + "${DBNROOT}/bin/dbn_alert" MODEL "${alertName}_WAVE_GB2_WIDX" "${job}" "${COM_WAVE_GRID}/${outfile}.idx" + else + echo "${outfile} is global.0p50 or SENDDBN is NO, no alert sent" + fi + + + # --------------------------------------------------------------------------- # + # 3. Clean up the directory rm -f gribfile set +x echo " Removing work directory after success." - [[ "$LOUD" = YES ]] && set -x + set_trace cd ../ - mv -f ${gribDIR} done.${gribDIR} + mv -f "${gribDIR}" "done.${gribDIR}" +else set +x echo ' ' - echo "End of ww3_grib2.sh at" - date - [[ "$LOUD" = YES ]] && set -x + echo " File ${COM_WAVE_GRID}/${outfile} found, skipping generation process" + echo ' ' + set_trace +fi + # End of ww3_grib2.sh -------------------------------------------------- # diff --git a/ush/wave_grid_interp.sh b/ush/wave_grid_interp.sh deleted file mode 100755 index 0d90b9c56c..0000000000 --- a/ush/wave_grid_interp.sh +++ /dev/null @@ -1,210 +0,0 @@ -#!/bin/bash -# -################################################################################ -# -# UNIX Script Documentation Block -# Script name: wave_grid_interp.sh -# Script description: Create grib2 files for the wave component -# -# Author: Arun Chawla Org: NCEP/EMC Date: 2009-07-22 -# Abstract: Creates grib2 files from WW3 binary output -# -# Script history log: -# 2019-11-02 J-Henrique Alves Ported to global-workflow. -# 2020-06-10 J-Henrique Alves Ported to R&D machine Hera -# -# $Id$ -############################################################################### -# --------------------------------------------------------------------------- # -# 0. Preparations -# 0.a Basic modes of operation - - # set execution trace prompt. ${0##*/} adds the script's basename - PS4=" \${SECONDS} ${0##*/} L\${LINENO} + " - set -x - - # Use LOUD variable to turn on/off trace. Defaults to YES (on). - export LOUD=${LOUD:-YES}; [[ $LOUD = yes ]] && export LOUD=YES - [[ "$LOUD" != YES ]] && set +x - - cd $DATA - - grdID=$1 - ymdh=$2 - dt=$3 - nst=$4 - postmsg "$jlogfile" "Making GRID Interpolation Files for $grdID." - rm -rf grint_${grdID}_${ymdh} - mkdir grint_${grdID}_${ymdh} - err=$? - - if [ "$err" != '0' ] - then - set +x - echo ' ' - echo '************************************************************************************* ' - echo '*** FATAL ERROR : ERROR IN ww3_grid_interp (COULD NOT CREATE TEMP DIRECTORY) *** ' - echo '************************************************************************************* ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : ERROR IN ww3_grid_interp (Could not create temp directory)" - exit 1 - fi - - cd grint_${grdID}_${ymdh} - -# 0.b Define directories and the search path. -# The tested variables should be exported by the postprocessor script. - - set +x - echo ' ' - echo '+--------------------------------+' - echo '! Make GRID files |' - echo '+--------------------------------+' - echo " Model ID : $WAV_MOD_TAG" - [[ "$LOUD" = YES ]] && set -x - - if [ -z "$YMDH" ] || [ -z "$cycle" ] || [ -z "$EXECwave" ] || \ - [ -z "$COMOUT" ] || [ -z "$WAV_MOD_TAG" ] || [ -z "$SENDCOM" ] || \ - [ -z "$SENDDBN" ] || [ -z "$waveGRD" ] - then - set +x - echo ' ' - echo '***************************************************' - echo '*** EXPORTED VARIABLES IN postprocessor NOT SET ***' - echo '***************************************************' - echo ' ' - echo "$YMDH $cycle $EXECwave $COMOUT $WAV_MOD_TAG $SENDCOM $SENDDBN $waveGRD" - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "EXPORTED VARIABLES IN postprocessor NOT SET" - exit 1 - fi - -# 0.c Links to files - - rm -f ../out_grd.$grdID - - if [ ! -f ../${grdID}_interp.inp.tmpl ]; then - cp $FIXwave/${grdID}_interp.inp.tmpl ../. - fi - ln -sf ../${grdID}_interp.inp.tmpl . - - for ID in $waveGRD - do - ln -sf ../out_grd.$ID . - done - - for ID in $waveGRD $grdID - do - ln -sf ../mod_def.$ID . - done - -# --------------------------------------------------------------------------- # -# 1. Generate GRID file with all data -# 1.a Generate Input file - - time="`echo $ymdh | cut -c1-8` `echo $ymdh | cut -c9-10`0000" - - sed -e "s/TIME/$time/g" \ - -e "s/DT/$dt/g" \ - -e "s/NSTEPS/$nst/g" ${grdID}_interp.inp.tmpl > ww3_gint.inp - -# Check if there is an interpolation weights file available - - wht_OK='no' - if [ ! -f ${DATA}/WHTGRIDINT.bin.${grdID} ]; then - if [ -f $FIXwave/WHTGRIDINT.bin.${grdID} ] - then - set +x - echo ' ' - echo " Copying $FIXwave/WHTGRIDINT.bin.${grdID} " - [[ "$LOUD" = YES ]] && set -x - cp $FIXwave/WHTGRIDINT.bin.${grdID} ${DATA} - wht_OK='yes' - else - set +x - echo ' ' - echo " Not found: $FIXwave/WHTGRIDINT.bin.${grdID} " - fi - fi -# Check and link weights file - if [ -f ${DATA}/WHTGRIDINT.bin.${grdID} ] - then - ln -s ${DATA}/WHTGRIDINT.bin.${grdID} ./WHTGRIDINT.bin - fi - -# 1.b Run interpolation code - - set +x - echo " Run ww3_gint - echo " Executing $EXECwave/ww3_gint - [[ "$LOUD" = YES ]] && set -x - - $EXECwave/ww3_gint 1> gint.{$grdID}.out 2>&1 - err=$? - -# Write interpolation file to main TEMP dir area if not there yet - if [ "wht_OK" = 'no' ] - then - cp -f ./WHTGRIDINT.bin ${DATA}/WHTGRIDINT.bin.${grdID} - cp -f ./WHTGRIDINT.bin ${FIXwave}/WHTGRIDINT.bin.${grdID} - fi - - - if [ "$err" != '0' ] - then - set +x - echo ' ' - echo '*************************************************** ' - echo '*** FATAL ERROR : ERROR IN ww3_gint interpolation * ' - echo '*************************************************** ' - echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : ERROR IN ww3_gint interpolation" - exit 3 - fi - -# 1.b Clean up - - rm -f grid_interp.inp - rm -f mod_def.* - mv out_grd.$grdID ../out_grd.$grdID - -# 1.c Save in /com - - if [ "$SENDCOM" = 'YES' ] - then - set +x - echo " Saving GRID file as $COMOUT/rundata/$WAV_MOD_TAG.out_grd.$grdID.$PDY$cyc" - [[ "$LOUD" = YES ]] && set -x - cp ../out_grd.$grdID $COMOUT/rundata/$WAV_MOD_TAG.out_grd.$grdID.$PDY$cyc - -# if [ "$SENDDBN" = 'YES' ] -# then -# set +x -# echo " Alerting GRID file as $COMOUT/rundata/$WAV_MOD_TAG.out_grd.$grdID.$PDY$cyc -# [[ "$LOUD" = YES ]] && set -x - -# -# PUT DBNET ALERT HERE .... -# - -# fi - fi - -# --------------------------------------------------------------------------- # -# 2. Clean up the directory - - set +x - echo " Removing work directory after success." - [[ "$LOUD" = YES ]] && set -x - - cd .. - mv -f grint_${grdID}_${ymdh} done.grint_${grdID}_${ymdh} - - set +x - echo ' ' - echo "End of ww3_interp.sh at" - date - -# End of ww3_grid_interp.sh -------------------------------------------- # diff --git a/ush/wave_grid_interp_sbs.sh b/ush/wave_grid_interp_sbs.sh index d810564f9f..c11a75f89d 100755 --- a/ush/wave_grid_interp_sbs.sh +++ b/ush/wave_grid_interp_sbs.sh @@ -1,5 +1,5 @@ -#!/bin/bash -# +#! /usr/bin/env bash + ################################################################################ # # UNIX Script Documentation Block @@ -17,31 +17,25 @@ # # Attributes: # Language: Bourne-again (BASH) shell -# Machine: WCOSS-DELL-P3 # -# Requirements: -# - wgrib2 with IPOLATES library -# +# Requirements: +# - wgrib2 with IPOLATES library +# ################################################################################ # --------------------------------------------------------------------------- # # 0. Preparations -# 0.a Basic modes of operation - # set execution trace prompt. ${0##*/} adds the script's basename - PS4=" \${SECONDS} ${0##*/} L\${LINENO} + " - set -x +source "$HOMEgfs/ush/preamble.sh" - # Use LOUD variable to turn on/off trace. Defaults to YES (on). - export LOUD=${LOUD:-YES}; [[ $LOUD = yes ]] && export LOUD=YES - [[ "$LOUD" != YES ]] && set +x +# 0.a Basic modes of operation cd $GRDIDATA - grdID=$1 + grdID=$1 ymdh=$2 dt=$3 nst=$4 - postmsg "$jlogfile" "Making GRID Interpolation Files for $grdID." + echo "Making GRID Interpolation Files for $grdID." rm -rf grint_${grdID}_${ymdh} mkdir grint_${grdID}_${ymdh} err=$? @@ -54,8 +48,7 @@ echo '*** FATAL ERROR : ERROR IN ww3_grid_interp (COULD NOT CREATE TEMP DIRECTORY) *** ' echo '************************************************************************************* ' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : ERROR IN ww3_grid_interp (Could not create temp directory)" + set_trace exit 1 fi @@ -70,11 +63,11 @@ echo '! Make GRID files |' echo '+--------------------------------+' echo " Model ID : $WAV_MOD_TAG" - [[ "$LOUD" = YES ]] && set -x + set_trace - if [ -z "$CDATE" ] || [ -z "$cycle" ] || [ -z "$EXECwave" ] || \ - [ -z "$COMOUT" ] || [ -z "$WAV_MOD_TAG" ] || [ -z "$SENDCOM" ] || \ - [ -z "$SENDDBN" ] || [ -z "$waveGRD" ] + if [[ -z "${PDY}" ]] || [[ -z "${cyc}" ]] || [[ -z "${cycle}" ]] || [[ -z "${EXECwave}" ]] || \ + [[ -z "${COM_WAVE_PREP}" ]] || [[ -z "${WAV_MOD_TAG}" ]] || [[ -z "${SENDDBN}" ]] || \ + [ -z "${waveGRD}" ] then set +x echo ' ' @@ -82,27 +75,26 @@ echo '*** EXPORTED VARIABLES IN postprocessor NOT SET ***' echo '***************************************************' echo ' ' - echo "$CDATE $cycle $EXECwave $COMOUT $WAV_MOD_TAG $SENDCOM $SENDDBN $waveGRD" - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "EXPORTED VARIABLES IN postprocessor NOT SET" + echo "${PDY}${cyc} ${cycle} ${EXECwave} ${COM_WAVE_PREP} ${WAV_MOD_TAG} ${SENDDBN} ${waveGRD}" + set_trace exit 1 fi # 0.c Links to files rm -f ${DATA}/output_${ymdh}0000/out_grd.$grdID - + if [ ! -f ${DATA}/${grdID}_interp.inp.tmpl ]; then - cp $FIXwave/${grdID}_interp.inp.tmpl ${DATA} + cp $PARMwave/${grdID}_interp.inp.tmpl ${DATA} fi - ln -sf ${DATA}/${grdID}_interp.inp.tmpl . + ln -sf ${DATA}/${grdID}_interp.inp.tmpl . for ID in $waveGRD do ln -sf ${DATA}/output_${ymdh}0000/out_grd.$ID . done - for ID in $waveGRD $grdID + for ID in $waveGRD $grdID do ln -sf ${DATA}/mod_def.$ID . done @@ -111,7 +103,7 @@ # 1. Generate GRID file with all data # 1.a Generate Input file - time="`echo $ymdh | cut -c1-8` `echo $ymdh | cut -c9-10`0000" + time="${ymdh:0:8} ${ymdh:8:2}0000" sed -e "s/TIME/$time/g" \ -e "s/DT/$dt/g" \ @@ -120,25 +112,25 @@ # Check if there is an interpolation weights file available wht_OK='no' - if [ ! -f ${DATA}/WHTGRIDINT.bin.${grdID} ]; then - if [ -f $FIXwave/WHTGRIDINT.bin.${grdID} ] + if [ ! -f ${DATA}/ww3_gint.WHTGRIDINT.bin.${grdID} ]; then + if [ -f $FIXwave/ww3_gint.WHTGRIDINT.bin.${grdID} ] then set +x echo ' ' - echo " Copying $FIXwave/WHTGRIDINT.bin.${grdID} " - [[ "$LOUD" = YES ]] && set -x - cp $FIXwave/WHTGRIDINT.bin.${grdID} ${DATA} + echo " Copying $FIXwave/ww3_gint.WHTGRIDINT.bin.${grdID} " + set_trace + cp $FIXwave/ww3_gint.WHTGRIDINT.bin.${grdID} ${DATA} wht_OK='yes' else set +x echo ' ' - echo " Not found: $FIXwave/WHTGRIDINT.bin.${grdID} " + echo " Not found: $FIXwave/ww3_gint.WHTGRIDINT.bin.${grdID} " fi fi # Check and link weights file - if [ -f ${DATA}/WHTGRIDINT.bin.${grdID} ] + if [ -f ${DATA}/ww3_gint.WHTGRIDINT.bin.${grdID} ] then - ln -s ${DATA}/WHTGRIDINT.bin.${grdID} ./WHTGRIDINT.bin + ln -s ${DATA}/ww3_gint.WHTGRIDINT.bin.${grdID} ./WHTGRIDINT.bin fi # 1.b Run interpolation code @@ -146,18 +138,19 @@ set +x echo " Run ww3_gint echo " Executing $EXECwave/ww3_gint - [[ "$LOUD" = YES ]] && set -x + set_trace + export pgm=ww3_gint;. prep_step $EXECwave/ww3_gint 1> gint.${grdID}.out 2>&1 - err=$? + export err=$?;err_chk # Write interpolation file to main TEMP dir area if not there yet if [ "wht_OK" = 'no' ] then - cp -f ./WHTGRIDINT.bin ${DATA}/WHTGRIDINT.bin.${grdID} - cp -f ./WHTGRIDINT.bin ${FIXwave}/WHTGRIDINT.bin.${grdID} + cp -f ./WHTGRIDINT.bin ${DATA}/ww3_gint.WHTGRIDINT.bin.${grdID} + cp -f ./WHTGRIDINT.bin ${FIXwave}/ww3_gint.WHTGRIDINT.bin.${grdID} fi - + if [ "$err" != '0' ] then @@ -167,8 +160,7 @@ echo '*** FATAL ERROR : ERROR IN ww3_gint interpolation * ' echo '*************************************************** ' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : ERROR IN ww3_gint interpolation" + set_trace exit 3 fi @@ -180,39 +172,27 @@ # 1.c Save in /com - if [ "$SENDCOM" = 'YES' ] - then - set +x - echo " Saving GRID file as $COMOUT/rundata/$WAV_MOD_TAG.out_grd.$grdID.${CDATE}" - [[ "$LOUD" = YES ]] && set -x - cp ${DATA}/output_${ymdh}0000/out_grd.$grdID $COMOUT/rundata/$WAV_MOD_TAG.out_grd.$grdID.${CDATE} + set +x + echo " Saving GRID file as ${COM_WAVE_PREP}/${WAV_MOD_TAG}.out_grd.${grdID}.${PDY}${cyc}" + set_trace + cp "${DATA}/output_${ymdh}0000/out_grd.${grdID}" "${COM_WAVE_PREP}/${WAV_MOD_TAG}.out_grd.${grdID}.${PDY}${cyc}" # if [ "$SENDDBN" = 'YES' ] # then # set +x -# echo " Alerting GRID file as $COMOUT/rundata/$WAV_MOD_TAG.out_grd.$grdID.${CDATE} -# [[ "$LOUD" = YES ]] && set -x +# echo " Alerting GRID file as $COMOUT/rundata/$WAV_MOD_TAG.out_grd.$grdID.${PDY}${cyc} +# set_trace # # PUT DBNET ALERT HERE .... # # fi - fi # --------------------------------------------------------------------------- # # 2. Clean up the directory - set +x - echo " Removing work directory after success." - [[ "$LOUD" = YES ]] && set -x - cd ../ mv -f grint_${grdID}_${ymdh} done.grint_${grdID}_${ymdh} - set +x - echo ' ' - echo "End of ww3_interp.sh at" - date - # End of ww3_grid_interp.sh -------------------------------------------- # diff --git a/ush/wave_grid_moddef.sh b/ush/wave_grid_moddef.sh index 640769f991..5b1b212a16 100755 --- a/ush/wave_grid_moddef.sh +++ b/ush/wave_grid_moddef.sh @@ -1,5 +1,5 @@ -#!/bin/bash -# +#! /usr/bin/env bash + ################################################################################ # # UNIX Script Documentation Block @@ -19,17 +19,12 @@ # # --------------------------------------------------------------------------- # # 0. Preparations -# 0.a Basic modes of operation - # set execution trace prompt. ${0##*/} adds the script's basename - PS4=" \${SECONDS} ${0##*/} L\${LINENO} + " - set -x +source "$HOMEgfs/ush/preamble.sh" - # Use LOUD variable to turn on/off trace. Defaults to YES (on). - export LOUD=${LOUD:-YES}; [[ $LOUD = yes ]] && export LOUD=YES - [[ "$LOUD" != YES ]] && set +x +# 0.a Basic modes of operation - postmsg "$jlogfile" "Generating mod_def file" + echo "Generating mod_def file" mkdir -p moddef_${1} cd moddef_${1} @@ -43,7 +38,7 @@ echo '+--------------------------------+' echo " Grid : $1" echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace # 0.b Check if grid set @@ -55,8 +50,7 @@ echo '*** Grid not identifife in ww3_mod_def.sh ***' echo '**************************************************' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "GRID IN ww3_mod_def.sh NOT SET" + set_trace exit 1 else grdID=$1 @@ -73,8 +67,7 @@ echo '*** EXPORTED VARIABLES IN ww3_mod_def.sh NOT SET ***' echo '*********************************************************' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "EXPORTED VARIABLES IN ww3_mod_def.sh NOT SET" + set_trace exit 2 fi @@ -86,7 +79,7 @@ echo ' Creating mod_def file ...' echo " Executing $EXECwave/ww3_grid" echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace rm -f ww3_grid.inp ln -sf ../ww3_grid.inp.$grdID ww3_grid.inp @@ -102,14 +95,13 @@ echo '*** FATAL ERROR : ERROR IN ww3_grid *** ' echo '******************************************** ' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : ERROR IN ww3_grid" + set_trace exit 3 fi if [ -f mod_def.ww3 ] then - cp mod_def.ww3 $COMOUT/rundata/${CDUMP}wave.mod_def.${grdID} + cp mod_def.ww3 "${COM_WAVE_PREP}/${RUN}wave.mod_def.${grdID}" mv mod_def.ww3 ../mod_def.$grdID else set +x @@ -118,20 +110,14 @@ echo '*** FATAL ERROR : MOD DEF FILE NOT FOUND *** ' echo '******************************************** ' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : Mod def File creation FAILED" + set_trace exit 4 fi # --------------------------------------------------------------------------- # # 3. Clean up - cd .. - rm -rf moddef_$grdID - - set +x - echo ' ' - echo 'End of ww3_mod_def.sh at' - date +cd .. +rm -rf moddef_$grdID # End of ww3_mod_def.sh ------------------------------------------------- # diff --git a/ush/wave_outp_cat.sh b/ush/wave_outp_cat.sh new file mode 100755 index 0000000000..f4bf6b2294 --- /dev/null +++ b/ush/wave_outp_cat.sh @@ -0,0 +1,145 @@ +#! /usr/bin/env bash + +################################################################################ +# +# UNIX Script Documentation Block +# Script name: wave_outp_cat.sh +# Script description: Gathers ASCII data files for all fhr for each buoy +# +# Author: Jessica Meixner Org: NCEP/EMC Date: 2020-08-27 +# Abstract: Cats spec files from each fhr into one for each buoy +# +# Script history log: +# 2020-08-27 Jessica Meixner creation of script +# +# $Id$ +# +# Attributes: +# Language: Bourne-again (BASH) shell +# +################################################################################ +# --------------------------------------------------------------------------- # +# 0. Preparations + +source "$HOMEgfs/ush/preamble.sh" + +# 0.a Basic modes of operation + bloc=$1 + MAXHOUR=$2 + specdir=$3 + +# 0.b Check if buoy location set + + if [ "$#" -lt '1' ] + then + set +x + echo ' ' + echo '***********************************************' + echo '*** LOCATION ID IN ww3_outp_spec.sh NOT SET ***' + echo '***********************************************' + echo ' ' + set_trace + exit 1 + else + buoy=$bloc + fi + +# 0.c Define directories and the search path. +# The tested variables should be exported by the postprocessor script. + + if [ -z "$DTPNT_WAV" ] || [ -z "$FHMIN_WAV" ] || \ + [ -z "$WAV_MOD_TAG" ] || [ -z "${STA_DIR}" ] + then + set +x + echo ' ' + echo '******************************************************' + echo '*** EXPORTED VARIABLES IN ww3_outp_cat.sh NOT SET ***' + echo '******************************************************' + echo ' ' + set_trace + exit 3 + fi + + +# --------------------------------------------------------------------------- # +# 1. Cat for a buoy all fhr into one file + + set +x + echo " Generate input file for ww3_outp." + set_trace + + if [ "$specdir" = "bull" ] + then + outfile=${STA_DIR}/${specdir}/$WAV_MOD_TAG.$buoy.bull + coutfile=${STA_DIR}/c${specdir}/$WAV_MOD_TAG.$buoy.cbull + for f in outfile coutfile; do + if [[ -f ${f} ]]; then rm ${f}; fi + done + else + outfile=${STA_DIR}/${specdir}/$WAV_MOD_TAG.$buoy.spec + if [[ -f ${outfile} ]]; then + rm ${outfile} + fi + fi + + fhr=$FHMIN_WAV + fhrp=$fhr + while [ $fhr -le $MAXHOUR ]; do + + ymdh=$($NDATE $fhr $CDATE) + if [ "$specdir" = "bull" ] + then + outfilefhr=${STA_DIR}/${specdir}fhr/$WAV_MOD_TAG.${ymdh}.$buoy.bull + coutfilefhr=${STA_DIR}/c${specdir}fhr/$WAV_MOD_TAG.${ymdh}.$buoy.cbull + else + outfilefhr=${STA_DIR}/${specdir}fhr/$WAV_MOD_TAG.${ymdh}.$buoy.spec + fi + + if [ -f $outfilefhr ] + then + if [ "$specdir" = "bull" ] + then + cat $outfilefhr >> ${STA_DIR}/${specdir}/$WAV_MOD_TAG.$buoy.bull + cat $coutfilefhr >> ${STA_DIR}/c${specdir}/$WAV_MOD_TAG.$buoy.cbull + rm $outfilefhr $coutfilefhr + else + cat $outfilefhr >> ${STA_DIR}/${specdir}/$WAV_MOD_TAG.$buoy.spec + #rm $outfilefhr + fi + else + set +x + echo ' ' + echo '************************************************************************** ' + echo "*** FATAL ERROR : OUTPUT DATA FILE FOR BOUY $bouy at ${ymdh} NOT FOUND *** " + echo '************************************************************************** ' + echo ' ' + set_trace + err=2; export err;${errchk} + exit $err + fi + + FHINCP=$(( DTPNT_WAV / 3600 )) + if [ $fhr = $fhrp ] + then + fhrp=$((fhr+FHINCP)) + fi + echo $fhrp + + fhr=$fhrp # no gridded output, loop with out_pnt stride + + done + + if [ ! -f ${outfile} ] + then + set +x + echo ' ' + echo '*************************************************** ' + echo " FATAL ERROR : OUTPUTFILE ${outfile} not created " + echo '*************************************************** ' + echo ' ' + set_trace + err=2; export err;${errchk} + exit $err + fi + +# End of ww3_outp_cat.sh ---------------------------------------------------- # diff --git a/ush/wave_outp_spec.sh b/ush/wave_outp_spec.sh index 5ec718efab..5acc0f95ab 100755 --- a/ush/wave_outp_spec.sh +++ b/ush/wave_outp_spec.sh @@ -1,5 +1,5 @@ -#!/bin/bash -# +#! /usr/bin/env bash + ################################################################################ # # UNIX Script Documentation Block @@ -17,28 +17,22 @@ # # Attributes: # Language: Bourne-again (BASH) shell -# Machine: WCOSS-DELL-P3 # ################################################################################ # --------------------------------------------------------------------------- # # 0. Preparations -# 0.a Basic modes of operation - # set execution trace prompt. ${0##*/} adds the script's basename - PS4=" \${SECONDS} ${0##*/} L\${LINENO} + " - set -x +source "$HOMEgfs/ush/preamble.sh" - # Use LOUD variable to turn on/off trace. Defaults to YES (on). - export LOUD=${LOUD:-YES}; [[ $LOUD = yes ]] && export LOUD=YES - [[ "$LOUD" != YES ]] && set +x - +# 0.a Basic modes of operation bloc=$1 ymdh=$2 specdir=$3 + workdir=$4 - YMDHE=`$NDATE $FHMAX_WAV $CDATE` + YMDHE=$($NDATE $FHMAX_WAV_PNT $CDATE) - cd $SPECDATA + cd $workdir rm -rf ${specdir}_${bloc} mkdir ${specdir}_${bloc} @@ -51,8 +45,7 @@ echo '*** FATAL ERROR : ERROR IN ww3_outp_spec (COULD NOT CREATE TEMP DIRECTORY) *** ' echo '****************************************************************************** ' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : ERROR IN ww3_outp_spec (Could not create temp directory)" + set_trace exit 1 fi @@ -64,7 +57,7 @@ echo '! Make spectral file |' echo '+--------------------------------+' echo " Model ID : $WAV_MOD_TAG" - [[ "$LOUD" = YES ]] && set -x + set_trace # 0.b Check if buoy location set @@ -76,23 +69,22 @@ echo '*** LOCATION ID IN ww3_outp_spec.sh NOT SET ***' echo '***********************************************' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "LOCATION ID IN ww3_outp_spec.sh NOT SET" + set_trace exit 1 else buoy=$bloc grep $buoy ${DATA}/buoy_log.ww3 > tmp_list.loc while read line do - buoy_name=`echo $line | awk '{print $2}'` + buoy_name=$(echo $line | awk '{print $2}') if [ $buoy = $buoy_name ] then - point=`echo $line | awk '{ print $1 }'` + point=$(echo $line | awk '{ print $1 }') set +x echo " Location ID/# : $buoy (${point})" echo " Spectral output start time : $ymdh " echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace break fi done < tmp_list.loc @@ -103,8 +95,7 @@ echo '*** LOCATION ID IN ww3_outp_spec.sh NOT RECOGNIZED ***' echo '******************************************************' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "LOCATION ID IN ww3_outp_spec.sh NOT RECOGNIZED" + set_trace exit 2 fi fi @@ -122,20 +113,19 @@ echo '*** EXPORTED VARIABLES IN ww3_outp_spec.sh NOT SET ***' echo '******************************************************' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "EXPORTED VARIABLES IN ww3_outp_spec.sh NOT SET" + set_trace exit 3 fi # 0.d Starting time for output - tstart="`echo $ymdh | cut -c1-8` `echo $ymdh | cut -c9-10`0000" - YMD="`echo $ymdh | cut -c1-8`" - HMS="`echo $ymdh | cut -c9-10`0000" + tstart="$(echo $ymdh | cut -c1-8) $(echo $ymdh | cut -c9-10)0000" + YMD="$(echo $ymdh | cut -c1-8)" + HMS="$(echo $ymdh | cut -c9-10)0000" set +x echo " Output starts at $tstart." echo ' ' - [[ "$LOUD" = YES ]] && set -x + set_trace # 0.e sync important files @@ -145,7 +135,7 @@ # 0.f Links to mother directory - ln -s ${DATA}/mod_def.${waveuoutpGRD} ./mod_def.ww3 + ln -s ${DATA}/output_${ymdh}0000/mod_def.${waveuoutpGRD} ./mod_def.ww3 ln -s ${DATA}/output_${ymdh}0000/out_pnt.${waveuoutpGRD} ./out_pnt.ww3 # --------------------------------------------------------------------------- # @@ -154,12 +144,12 @@ set +x echo " Generate input file for ww3_outp." - [[ "$LOUD" = YES ]] && set -x + set_trace if [ "$specdir" = "bull" ] then - tstart="`echo $ymdh | cut -c1-8` `echo $ymdh | cut -c9-10`0000" - truntime="`echo $CDATE | cut -c1-8` `echo $YMDH | cut -c9-10`0000" + tstart="$(echo $ymdh | cut -c1-8) $(echo $ymdh | cut -c9-10)0000" + truntime="$(echo $CDATE | cut -c1-8) $(echo $CDATE | cut -c9-10)0000" sed -e "s/TIME/$tstart/g" \ -e "s/DT/$dtspec/g" \ -e "s/POINT/$point/g" \ @@ -174,17 +164,19 @@ -e "s/ITYPE/1/g" \ -e "s/FORMAT/F/g" \ ${DATA}/ww3_outp_spec.inp.tmpl > ww3_outp.inp - outfile=ww3.`echo $tstart | cut -c3-8``echo $tstart | cut -c10-11`.spc + outfile=ww3.$(echo $tstart | cut -c3-8)$(echo $tstart | cut -c10-11).spc fi # 2.b Run the postprocessor set +x echo " Executing $EXECwave/ww3_outp" - [[ "$LOUD" = YES ]] && set -x + set_trace + export pgm=ww3_outp;. prep_step $EXECwave/ww3_outp 1> outp_${specdir}_${buoy}.out 2>&1 - err=$? + export err=$?;err_chk + if [ "$err" != '0' ] then @@ -194,8 +186,7 @@ echo '*** FATAL ERROR : ERROR IN ww3_outp *** ' echo '******************************************** ' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : ERROR IN ww3_outp" + set_trace exit 4 fi @@ -209,27 +200,27 @@ then if [ "$specdir" = "bull" ] then - cat $outfile | sed -e '9,$d' >> ${STA_DIR}/${specdir}/$WAV_MOD_TAG.$buoy.bull - cat $coutfile | sed -e '8,$d' >> ${STA_DIR}/c${specdir}/$WAV_MOD_TAG.$buoy.cbull + cat $outfile | sed -e '9,$d' >> ${STA_DIR}/${specdir}fhr/$WAV_MOD_TAG.${ymdh}.$buoy.bull + cat $coutfile | sed -e '8,$d' >> ${STA_DIR}/c${specdir}fhr/$WAV_MOD_TAG.${ymdh}.$buoy.cbull else - cat $outfile >> ${STA_DIR}/${specdir}/$WAV_MOD_TAG.$buoy.spec + cat $outfile >> ${STA_DIR}/${specdir}fhr/$WAV_MOD_TAG.${ymdh}.$buoy.spec fi elif [ "${ymdh}" = "${YMDHE}" ] then if [ "$specdir" = "bull" ] then - cat $outfile | sed -e '1,7d' >> ${STA_DIR}/${specdir}/$WAV_MOD_TAG.$buoy.bull - cat $coutfile | sed -e '1,6d' >> ${STA_DIR}/c${specdir}/$WAV_MOD_TAG.$buoy.cbull + cat $outfile | sed -e '1,7d' >> ${STA_DIR}/${specdir}fhr/$WAV_MOD_TAG.${ymdh}.$buoy.bull + cat $coutfile | sed -e '1,6d' >> ${STA_DIR}/c${specdir}fhr/$WAV_MOD_TAG.${ymdh}.$buoy.cbull else - cat $outfile | sed -n "/^${YMD} ${HMS}$/,\$p" >> ${STA_DIR}/${specdir}/$WAV_MOD_TAG.$buoy.spec + cat $outfile | sed -n "/^${YMD} ${HMS}$/,\$p" >> ${STA_DIR}/${specdir}fhr/$WAV_MOD_TAG.${ymdh}.$buoy.spec fi else if [ "$specdir" = "bull" ] then - cat $outfile | sed -e '1,7d' | sed -e '2,$d' >> ${STA_DIR}/${specdir}/$WAV_MOD_TAG.$buoy.bull - cat $coutfile | sed -e '1,6d' | sed -e '2,$d' >> ${STA_DIR}/c${specdir}/$WAV_MOD_TAG.$buoy.cbull + cat $outfile | sed -e '1,7d' | sed -e '2,$d' >> ${STA_DIR}/${specdir}fhr/$WAV_MOD_TAG.${ymdh}.$buoy.bull + cat $coutfile | sed -e '1,6d' | sed -e '2,$d' >> ${STA_DIR}/c${specdir}fhr/$WAV_MOD_TAG.${ymdh}.$buoy.cbull else - cat $outfile | sed -n "/^${YMD} ${HMS}$/,\$p" >> ${STA_DIR}/${specdir}/$WAV_MOD_TAG.$buoy.spec + cat $outfile | sed -n "/^${YMD} ${HMS}$/,\$p" >> ${STA_DIR}/${specdir}fhr/$WAV_MOD_TAG.${ymdh}.$buoy.spec fi fi else @@ -239,22 +230,13 @@ echo '*** FATAL ERROR : OUTPUT DATA FILE FOR BOUY $bouy NOT FOUND *** ' echo '***************************************************************** ' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : OUTPUT DATA FILE FOR BOUY $bouy NOT FOUND" + set_trace exit 5 fi # 3.b Clean up the rest - rm -f ww3_outp.inp - rm -f mod_def.ww3 out_pnt.ww3 - - cd .. - rm -rf ${specdir}_${bloc} - - set +x - echo ' ' - echo 'End of ww3_outp_spec.sh at' - date +cd .. +rm -rf ${specdir}_${bloc} # End of ww3_outp_spec.sh ---------------------------------------------------- # diff --git a/ush/wave_prnc_cur.sh b/ush/wave_prnc_cur.sh index 4c731e5ddd..6b1ab19db2 100755 --- a/ush/wave_prnc_cur.sh +++ b/ush/wave_prnc_cur.sh @@ -1,5 +1,5 @@ -#!/bin/sh -# +#! /usr/bin/env bash + ################################################################################ # # UNIX Script Documentation Block @@ -12,70 +12,87 @@ # Script history log: # 2019-10-02 J-Henrique Alves: origination, first version # 2019-11-02 J-Henrique Alves Ported to global-workflow. -# 2020-06-10 J-Henrique Alves Ported R&D machine Hera +# 2020-06-10 J-Henrique Alves Ported R&D machine Hera # # $Id$ # # Attributes: # Language: Bourne-again (BASH) shell -# Machine: WCOSS-DELL-P3 # ################################################################################ # -set -x + +source "$HOMEgfs/ush/preamble.sh" ymdh_rtofs=$1 curfile=$2 fhr=$3 -fh3=`printf "%03d" "${fhr#0}"` +flagfirst=$4 +fh3=$(printf "%03d" "${fhr#0}") +fext='f' # Timing has to be made relative to the single 00z RTOFS cycle for that PDY mkdir -p rtofs_${ymdh_rtofs} cd rtofs_${ymdh_rtofs} -ncks -x -v sst,sss,layer_density $curfile cur_uv_${PDY}_${fext}${fh3}.nc -ncks -O -a -h -x -v Layer cur_uv_${PDY}_${fext}${fh3}.nc cur_temp1.nc +ncks -x -v sst,sss,layer_density "${curfile} cur_uv_${PDY}_${fext}${fh3}.nc" +ncks -O -a -h -x -v Layer "cur_uv_${PDY}_${fext}${fh3}.nc" "cur_temp1.nc" ncwa -h -O -a Layer cur_temp1.nc cur_temp2.nc -ncrename -h -O -v MT,time cur_temp2.nc -ncrename -h -O -d MT,time cur_temp2.nc +ncrename -h -O -v MT,time -d MT,time cur_temp2.nc ncks -v u_velocity,v_velocity cur_temp2.nc cur_temp3.nc -mv -f cur_temp3.nc cur_uv_${PDY}_${fext}${fh3}_flat.nc +mv -f "cur_temp3.nc" "cur_uv_${PDY}_${fext}${fh3}_flat.nc" # Convert to regular lat lon file # If weights need to be regenerated due to CDO ver change, use: # $CDO genbil,r4320x2160 rtofs_glo_2ds_f000_3hrly_prog.nc weights.nc cp ${FIXwave}/weights_rtofs_to_r4320x2160.nc ./weights.nc - + # Interpolate to regular 5 min grid -$CDO remap,r4320x2160,weights.nc cur_uv_${PDY}_${fext}${fh3}_flat.nc cur_5min_01.nc +${CDO} remap,r4320x2160,weights.nc "cur_uv_${PDY}_${fext}${fh3}_flat.nc" "cur_5min_01.nc" # Perform 9-point smoothing twice to make RTOFS data less noisy when -# interpolating from 1/12 deg RTOFS grid to 1/6 deg wave grid +# interpolating from 1/12 deg RTOFS grid to 1/6 deg wave grid if [ "WAV_CUR_CDO_SMOOTH" = "YES" ]; then - $CDO -f nc -smooth9 cur_5min_01.nc cur_5min_02.nc - $CDO -f nc -smooth9 cur_5min_02.nc cur_glo_uv_${PDY}_${fext}${fh3}_5min.nc + ${CDO} -f nc -smooth9 "cur_5min_01.nc" "cur_5min_02.nc" + ${CDO} -f nc -smooth9 "cur_5min_02.nc" "cur_glo_uv_${PDY}_${fext}${fh3}_5min.nc" else - mv cur_5min_01.nc cur_glo_uv_${PDY}_${fext}${fh3}_5min.nc + mv "cur_5min_01.nc" "cur_glo_uv_${PDY}_${fext}${fh3}_5min.nc" fi # Cleanup -rm -f cur_temp[123].nc cur_5min_??.nc cur_glo_uv_${PDY}_${fext}${fh3}.nc weights.nc +rm -f cur_temp[123].nc cur_5min_??.nc "cur_glo_uv_${PDY}_${fext}${fh3}.nc weights.nc" -if [ ${fhr} -gt 0 ] +if [ ${flagfirst} = "T" ] then - sed -e "s/HDRFL/F/g" ${FIXwave}/ww3_prnc.cur.${WAVECUR_FID}.inp.tmpl > ww3_prnc.inp + sed -e "s/HDRFL/T/g" ${PARMwave}/ww3_prnc.cur.${WAVECUR_FID}.inp.tmpl > ww3_prnc.inp else - sed -e "s/HDRFL/T/g" ${FIXwave}/ww3_prnc.cur.${WAVECUR_FID}.inp.tmpl > ww3_prnc.inp + sed -e "s/HDRFL/F/g" ${PARMwave}/ww3_prnc.cur.${WAVECUR_FID}.inp.tmpl > ww3_prnc.inp fi rm -f cur.nc -ln -s cur_glo_uv_${PDY}_${fext}${fh3}_5min.nc cur.nc -ln -s ${DATA}/mod_def.${WAVECUR_FID} ./mod_def.ww3 +ln -s "cur_glo_uv_${PDY}_${fext}${fh3}_5min.nc" "cur.nc" +ln -s "${DATA}/mod_def.${WAVECUR_FID}" ./mod_def.ww3 +export pgm=ww3_prnc;. prep_step $EXECwave/ww3_prnc 1> prnc_${WAVECUR_FID}_${ymdh_rtofs}.out 2>&1 +export err=$?; err_chk + +if [ "$err" != '0' ] +then + cat prnc_${WAVECUR_FID}_${ymdh_rtofs}.out + set $setoff + echo ' ' + echo '******************************************** ' + echo '*** WARNING: NON-FATAL ERROR IN ww3_prnc *** ' + echo '******************************************** ' + echo ' ' + set $seton + echo "WARNING: NON-FATAL ERROR IN ww3_prnc." + exit 4 +fi + mv -f current.ww3 ${DATA}/${WAVECUR_DID}.${ymdh_rtofs} cd ${DATA} - diff --git a/ush/wave_prnc_ice.sh b/ush/wave_prnc_ice.sh index 254edc8b03..5ec1d7fc2e 100755 --- a/ush/wave_prnc_ice.sh +++ b/ush/wave_prnc_ice.sh @@ -1,4 +1,5 @@ -#!/bin/sh +#! /usr/bin/env bash + ############################################################################### # # # This script preprocesses ice fields for the ocean wave models. # @@ -25,13 +26,13 @@ # # --------------------------------------------------------------------------- # # 0. Preparations + +source "$HOMEgfs/ush/preamble.sh" + # 0.a Basic modes of operation cd $DATA - seton='-xa' - setoff='+xa' - set $seton - + rm -rf ice mkdir ice cd ice @@ -40,33 +41,32 @@ # 0.b Define directories and the search path. # The tested variables should be exported by the postprocessor script. - set $setoff + set +x echo ' ' echo '+--------------------------------+' echo '! Make ice fields |' echo '+--------------------------------+' echo " Model TAG : $WAV_MOD_TAG" - echo " Model ID : ${CDUMP}wave" + echo " Model ID : ${RUN}wave" echo " Ice grid ID : $WAVEICE_FID" echo " Ice file : $WAVICEFILE" echo ' ' - set $seton - postmsg "$jlogfile" "Making ice fields." - - if [ -z "$YMDH" ] || [ -z "$cycle" ] || \ - [ -z "$COMOUT" ] || [ -z "$FIXwave" ] || [ -z "$EXECwave" ] || \ - [ -z "$WAV_MOD_TAG" ] || [ -z "$WAVEICE_FID" ] || [ -z "$SENDCOM" ] || \ - [ -z "$COMIN_WAV_ICE" ] - then - set $setoff + set_trace + echo "Making ice fields." + + if [[ -z "${YMDH}" ]] || [[ -z "${cycle}" ]] || \ + [[ -z "${COM_WAVE_PREP}" ]] || [[ -z "${FIXwave}" ]] || [[ -z "${EXECwave}" ]] || \ + [[ -z "${WAV_MOD_TAG}" ]] || [[ -z "${WAVEICE_FID}" ]] || [[ -z "${COM_OBS}" ]]; then + + set +x echo ' ' echo '**************************************************' echo '*** EXPORTED VARIABLES IN preprocessor NOT SET ***' echo '**************************************************' echo ' ' - exit 0 - set $seton - postmsg "$jlogfile" "NON-FATAL ERROR - EXPORTED VARIABLES IN preprocessor NOT SET" + exit 1 + set_trace + echo "NON-FATAL ERROR - EXPORTED VARIABLES IN preprocessor NOT SET" fi # 0.c Links to working directory @@ -77,7 +77,7 @@ # 1. Get the necessary files # 1.a Copy the ice data file - file=${COMIN_WAV_ICE}/${WAVICEFILE} + file=${COM_OBS}/${WAVICEFILE} if [ -f $file ] then @@ -86,28 +86,28 @@ if [ -f ice.grib ] then - set $setoff + set +x echo " ice.grib copied ($file)." - set $seton + set_trace else - set $setoff + set +x echo ' ' echo '************************************** ' echo "*** FATAL ERROR: NO ICE FILE $file *** " echo '************************************** ' echo ' ' - set $seton - postmsg "$jlogfile" "FATAL ERROR - NO ICE FILE (GFS GRIB)" - exit 0 + set_trace + echo "FATAL ERROR - NO ICE FILE (GFS GRIB)" + exit 2 fi # --------------------------------------------------------------------------- # # 2. Process the GRIB packed ice file # 2.a Unpack data - set $setoff + set +x echo ' Extracting data from ice.grib ...' - set $seton + set_trace $WGRIB2 ice.grib -netcdf icean_5m.nc 2>&1 > wgrib.out @@ -117,15 +117,15 @@ if [ "$err" != '0' ] then cat wgrib.out - set $setoff + set +x echo ' ' echo '**************************************** ' echo '*** ERROR IN UNPACKING GRIB ICE FILE *** ' echo '**************************************** ' echo ' ' - set $seton - postmsg "$jlogfile" "ERROR IN UNPACKING GRIB ICE FILE." - exit 0 + set_trace + echo "ERROR IN UNPACKING GRIB ICE FILE." + exit 3 fi rm -f wgrib.out @@ -135,28 +135,30 @@ # 2.d Run through preprocessor wave_prep - set $setoff + set +x echo ' Run through preprocessor ...' echo ' ' - set $seton + set_trace cp -f ${DATA}/ww3_prnc.ice.$WAVEICE_FID.inp.tmpl ww3_prnc.inp + export pgm=ww3_prnc;. prep_step + $EXECwave/ww3_prnc 1> prnc_${WAVEICE_FID}_${cycle}.out 2>&1 - err=$? + export err=$?; err_chk if [ "$err" != '0' ] then - cat wave_prep.out - set $setoff + cat prnc_${WAVEICE_FID}_${cycle}.out + set +x echo ' ' - echo '************************* ' - echo '*** ERROR IN waveprep *** ' - echo '************************* ' + echo '******************************************** ' + echo '*** WARNING: NON-FATAL ERROR IN ww3_prnc *** ' + echo '******************************************** ' echo ' ' - set $seton - postmsg "$jlogfile" "NON-FATAL ERROR IN waveprep." - exit 0 + set_trace + echo "WARNING: NON-FATAL ERROR IN ww3_prnc." + exit 4 fi rm -f wave_prep.out ww3_prep.inp ice.raw mod_def.ww3 @@ -172,28 +174,20 @@ icefile=${WAV_MOD_TAG}.${WAVEICE_FID}.$cycle.ice elif [ "${WW3ATMIENS}" = "F" ] then - icefile=${CDUMP}wave.${WAVEICE_FID}.$cycle.ice + icefile=${RUN}wave.${WAVEICE_FID}.$cycle.ice fi - set $setoff - echo " Saving ice.ww3 as $COMOUT/rundata/${icefile}" - set $seton - cp ice.ww3 $COMOUT/rundata/${icefile} + set +x + echo " Saving ice.ww3 as ${COM_WAVE_PREP}/${icefile}" + set_trace + cp ice.ww3 "${COM_WAVE_PREP}/${icefile}" rm -f ice.ww3 # --------------------------------------------------------------------------- # # 4. Clean up the directory - set $setoff - echo " Removing work directory after success." - set $seton +cd .. - cd .. - rm -rf ice - - set $setoff - echo ' ' - echo 'End of waveice.sh at' - date +rm -rf ice # End of waveice.sh --------------------------------------------------------- # diff --git a/ush/wave_tar.sh b/ush/wave_tar.sh index e367a01414..1a8d6d6cc5 100755 --- a/ush/wave_tar.sh +++ b/ush/wave_tar.sh @@ -1,4 +1,5 @@ -#!/bin/bash +#! /usr/bin/env bash + ############################################################################### # # # This script tars the sectral or bulletin files into a single file and # @@ -23,19 +24,15 @@ # # --------------------------------------------------------------------------- # # 0. Preparations -# 0.a Basic modes of operation - # set execution trace prompt. ${0##*/} adds the script's basename - PS4=" \${SECONDS} ${0##*/} L\${LINENO} + " - set -x +source "$HOMEgfs/ush/preamble.sh" - # Use LOUD variable to turn on/off trace. Defaults to YES (on). - export LOUD=${LOUD:-YES}; [[ $LOUD = yes ]] && export LOUD=YES - [[ "$LOUD" != YES ]] && set -x +# 0.a Basic modes of operation cd $DATA - postmsg "$jlogfile" "Making TAR FILE" + echo "Making TAR FILE" + alertName=$(echo $RUN|tr [a-z] [A-Z]) set +x echo ' ' @@ -45,7 +42,7 @@ echo " ID : $1" echo " Type : $2" echo " Number of files : $3" - [[ "$LOUD" = YES ]] && set -x + set_trace # 0.b Check if type set @@ -58,8 +55,7 @@ echo '*** VARIABLES IN ww3_tar.sh NOT SET ***' echo '********************************************' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "TYPE IN ww3_tar.sh NOT SET" + set_trace exit 1 else ID=$1 @@ -69,6 +65,9 @@ filext=$type if [ "$type" = "ibp" ]; then filext='spec'; fi + if [ "$type" = "ibpbull" ]; then filext='bull'; fi + if [ "$type" = "ibpcbull" ]; then filext='cbull'; fi + rm -rf TAR_${filext}_$ID mkdir TAR_${filext}_$ID @@ -77,21 +76,19 @@ # 0.c Define directories and the search path. # The tested variables should be exported by the postprocessor script. - if [ -z "$cycle" ] || [ -z "$COMOUT" ] || [ -z "$WAV_MOD_TAG" ] || \ - [ -z "$SENDCOM" ] || [ -z "$SENDDBN" ] || [ -z "${STA_DIR}" ] - then + if [[ -z "${cycle}" ]] || [[ -z "${COM_WAVE_STATION}" ]] || [[ -z "${WAV_MOD_TAG}" ]] || \ + [[ -z "${SENDDBN}" ]] || [[ -z "${STA_DIR}" ]]; then set +x echo ' ' echo '*****************************************************' echo '*** EXPORTED VARIABLES IN ww3_tar.sh NOT SET ***' echo '*****************************************************' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "EXPORTED VARIABLES IN ww3_tar.sh NOT SET" + set_trace exit 2 fi - cd ${STA_DIR}/${type} + cd ${STA_DIR}/${filext} # --------------------------------------------------------------------------- # # 2. Generate tar file (spectral files are compressed) @@ -99,7 +96,7 @@ set +x echo ' ' echo ' Making tar file ...' - set -x + set_trace count=0 countMAX=5 @@ -108,7 +105,7 @@ while [ "$count" -lt "$countMAX" ] && [ "$tardone" = 'no' ] do - nf=`ls | awk '/'$ID.*.$filext'/ {a++} END {print a}'` + nf=$(ls | awk '/'$ID.*.$filext'/ {a++} END {print a}') nbm2=$(( $nb - 2 )) if [ $nf -ge $nbm2 ] then @@ -123,8 +120,7 @@ echo '*** FATAL ERROR : TAR CREATION FAILED *** ' echo '***************************************** ' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : TAR CREATION FAILED" + set_trace exit 3 fi @@ -135,9 +131,9 @@ else set +x echo ' All files not found for tar. Sleeping 10 seconds and trying again ..' - [[ "$LOUD" = YES ]] && set -x + set_trace sleep 10 - count=`expr $count + 1` + count=$(expr $count + 1) fi done @@ -150,12 +146,11 @@ echo '*** FATAL ERROR : TAR CREATION FAILED *** ' echo '***************************************** ' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : TAR CREATION FAILED" + set_trace exit 3 fi - if [ "$filext" = 'spec' ] + if [ "$type" = 'spec' ] then if [ -s $ID.$cycle.${type}_tar ] then @@ -171,8 +166,7 @@ echo '*** FATAL ERROR : SPECTRAL TAR COMPRESSION FAILED *** ' echo '***************************************************** ' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : SPECTRAL TAR COMPRESSION FAILED" + set_trace exit 4 fi fi @@ -185,10 +179,10 @@ set +x echo ' ' - echo " Moving tar file ${file_name} to $COMOUT ..." - [[ "$LOUD" = YES ]] && set -x + echo " Moving tar file ${file_name} to ${COM_WAVE_STATION} ..." + set_trace - cp ${file_name} $COMOUT/station/. + cp "${file_name}" "${COM_WAVE_STATION}/." exit=$? @@ -200,8 +194,7 @@ echo '*** FATAL ERROR : TAR COPY FAILED *** ' echo '************************************* ' echo ' ' - [[ "$LOUD" = YES ]] && set -x - postmsg "$jlogfile" "FATAL ERROR : TAR COPY FAILED" + set_trace exit 4 fi @@ -209,23 +202,22 @@ then set +x echo ' ' - echo " Alerting TAR file as $COMOUT/station/${file_name}" + echo " Alerting TAR file as ${COM_WAVE_STATION}/${file_name}" echo ' ' - [[ "$LOUD" = YES ]] && set -x - $DBNROOT/bin/dbn_alert MODEL OMBWAVE $job $COMOUT/station/${file_name} + set_trace + "${DBNROOT}/bin/dbn_alert MODEL" "${alertName}_WAVE_TAR" "${job}" \ + "${COM_WAVE_STATION}/${file_name}" fi # --------------------------------------------------------------------------- # # 4. Final clean up - cd $DATA +cd $DATA - set +x; [[ "$LOUD" = YES ]] && set -v +if [[ ${KEEPDATA:-NO} == "NO" ]]; then + set -v rm -rf ${STA_DIR}/${type} set +v - - echo ' ' - echo 'End of ww3_tar.sh at' - date +fi # End of ww3_tar.sh ----------------------------------------------------- # diff --git a/util/modulefiles/gfs_util.hera b/util/modulefiles/gfs_util.hera deleted file mode 100644 index cf880d66b6..0000000000 --- a/util/modulefiles/gfs_util.hera +++ /dev/null @@ -1,29 +0,0 @@ -#%Module##################################################### -## Module file for GFS util -############################################################# -# -# Loading required system modules -# - -module use -a /scratch2/NCEPDEV/nwprod/NCEPLIBS/modulefiles -# Loading Intel Compiler Suite -module load intel/18.0.5.274 - -module load bacio/2.0.3 -module load w3emc/2.3.1 -module load w3nco/2.0.6 -module load ip/3.0.1 -module load sp/2.0.2 -module load bufr/11.3.0 - -module load jasper/1.900.1 -module load png/1.2.44 -module load z/1.2.11 - -module load ncl/6.5.0 -module load gempak/7.4.2 - -module load impi/2018.0.4 - -export GEMINC=/apps/gempak/7.4.2/gempak/include -export GEMOLB=/apps/gempak/7.4.2/os/linux64/lib diff --git a/util/modulefiles/gfs_util.wcoss_cray b/util/modulefiles/gfs_util.wcoss_cray deleted file mode 100755 index ea71687a97..0000000000 --- a/util/modulefiles/gfs_util.wcoss_cray +++ /dev/null @@ -1,26 +0,0 @@ -#%Module##################################################### -## Module file for GFS util -############################################################# -# -# Loading required system modules -# - module load modules - module load craype-sandybridge - module load PrgEnv-intel/5.2.56 - module switch intel/15.0.6.233 - module unload gcc - module load gcc - -# Loading GEMPAK - module unload gempak - module load gempak/6.32.0 - module unload ncarg-intel-sandybridge - module load ncarg-intel-sandybridge/6.1.0 - -# Loading Intel-Compiled NCEP Libraries - module load bacio-intel/2.0.1 - module load w3emc-intel/2.2.0 - module load w3nco-intel/2.0.6 - module load ip-intel/3.0.0 - module load sp-intel/2.0.2 - module load bufr-intel/11.1.0 diff --git a/util/modulefiles/gfs_util.wcoss_dell_p3 b/util/modulefiles/gfs_util.wcoss_dell_p3 deleted file mode 100755 index 95a03482dd..0000000000 --- a/util/modulefiles/gfs_util.wcoss_dell_p3 +++ /dev/null @@ -1,22 +0,0 @@ -#%Module##################################################### -## Module file for GFS util -############################################################# -# -# Loading required system modules -# - module load ips/18.0.1.163 - module load impi/18.0.1 - module load NCL/6.4.0 - -# Loading GEMPAK module - module use -a /gpfs/dell1/nco/ops/nwprod/modulefiles/ - module load gempak/7.3.1 - -# Loading Intel-Compiled NCEP Libraries - module load bacio/2.0.2 - module load w3emc/2.3.0 - module load w3nco/2.0.6 - module load ip/3.0.1 - module load sp/2.0.2 - module load g2/3.1.0 - module load bufr/11.2.0 diff --git a/util/sorc/compile_gfs_util_wcoss.sh b/util/sorc/compile_gfs_util_wcoss.sh deleted file mode 100755 index 26e065a221..0000000000 --- a/util/sorc/compile_gfs_util_wcoss.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/sh - -###################################################################### -# -# Build executable GFS utility for GFS V16.0.0 -# -###################################################################### - -LMOD_EXACT_MATCH=no -source ../../sorc/machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` - -if [ "$target" = "wcoss_dell_p3" ] || [ "$target" = "wcoss_cray" ] || [ "$target" = "hera" ] ; then - echo " " - echo " You are on WCOSS: $target " - echo " " -elif [ "$target" = "wcoss" ] ; then - echo " " - echo " " - echo " You are on WCOSS: $target " - echo " You do not need to build GFS utilities for GFS V16.0.0 " - echo " " - echo " " - exit -else - echo " " - echo " Your machine is $target is not recognized as a WCOSS machine." - echo " The script $0 can not continue. Aborting!" - echo " " - exit -fi -echo " " - -# Load required modules -source ../modulefiles/gfs_util.${target} -module list - -dirlist="overgridid rdbfmsua webtitle mkgfsawps" -set -x - -for dir in $dirlist -do - cd ${dir}.fd - echo "PWD: $PWD" - set +x - echo " " - echo " ### ${dir} ### " - echo " " - set -x - ./compile_${dir}_wcoss.sh - set +x - echo " " - echo " ######################################### " - echo " " - cd .. - echo "BACK TO: $PWD" -done diff --git a/util/sorc/mkgfsawps.fd/compile_mkgfsawps_wcoss.sh b/util/sorc/mkgfsawps.fd/compile_mkgfsawps_wcoss.sh deleted file mode 100755 index 7051909c60..0000000000 --- a/util/sorc/mkgfsawps.fd/compile_mkgfsawps_wcoss.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh -LMOD_EXACT_MATCH=no -source ../../../sorc/machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` - -if [ "$target" = "wcoss_dell_p3" ] || [ "$target" = "wcoss_cray" ] || [ "$target" = "hera" ] ; then - echo " " - echo " You are on WCOSS: $target " - echo " " -elif [ "$target" = "wcoss" ] ; then - echo " " - echo " " - echo " You are on WCOSS: $target " - echo " You do not need to build GFS utilities for GFS V15.0.0 " - echo " " - echo " " - exit -else - echo " " - echo " Your machine is $target is not recognized as a WCOSS machine." - echo " The script $0 can not continue. Aborting!" - echo " " - exit -fi -echo " " - -# Load required modules -source ../../modulefiles/gfs_util.${target} -module list - -set -x - -mkdir -p ../../exec -make -f makefile.$target -make -f makefile.$target clean -mv mkgfsawps ../../exec diff --git a/util/sorc/mkgfsawps.fd/makefile b/util/sorc/mkgfsawps.fd/makefile deleted file mode 100755 index 86f3c417b1..0000000000 --- a/util/sorc/mkgfsawps.fd/makefile +++ /dev/null @@ -1,53 +0,0 @@ -SHELL=/bin/sh -# -SRCS= mkgfsawps.f - -OBJS= mkgfsawps.o - -# Tunable parameters -# -# FC Name of the fortran compiling system to use -# LDFLAGS Flags to the loader -# LIBS List of libraries -# CMD Name of the executable -# PROFLIB Library needed for profiling -# -FC = ifort - -LDFLAGS = -IOMP5_LIB=/usrx/local/prod/intel/2018UP01/lib/intel64/libiomp5.a - -LIBS = -Xlinker --start-group ${W3NCO_LIBd} ${W3NCO_LIBd} ${IP_LIBd} ${SP_LIBd} ${BACIO_LIB4} ${IOMP5_LIB} - -CMD = mkgfsawps -PROFLIB = -lprof - -# To perform the default compilation, use the first line -# To compile with flowtracing turned on, use the second line -# To compile giving profile additonal information, use the third line -# WARNING: SIMULTANEOUSLY PROFILING AND FLOWTRACING IS NOT RECOMMENDED -FFLAGS = -O3 -g -convert big_endian -r8 -i4 -assume noold_ldout_format - -# Lines from here on down should not need to be changed. They are the -# actual rules which make uses to build a.out. -# -all: $(CMD) - -$(CMD): $(OBJS) - $(FC) -o $(LDFLAGS) $(@) $(OBJS) $(LIBS) - rm -f $(OBJS) - -# Make the profiled version of the command and call it a.out.prof -# -$(CMD).prof: $(OBJS) - $(FC) -o $(LDFLAGS) $(@) $(OBJS) $(LIBS) - -rm -f $(OBJS) - -clean: - -rm -f $(OBJS) - -clobber: clean - -rm -f $(CMD) $(CMD).prof - -void: clobber - -rm -f $(SRCS) makefile diff --git a/util/sorc/mkgfsawps.fd/makefile.hera b/util/sorc/mkgfsawps.fd/makefile.hera deleted file mode 100755 index 99052691e7..0000000000 --- a/util/sorc/mkgfsawps.fd/makefile.hera +++ /dev/null @@ -1,53 +0,0 @@ -SHELL=/bin/sh -# -SRCS= mkgfsawps.f - -OBJS= mkgfsawps.o - -# Tunable parameters -# -# FC Name of the fortran compiling system to use -# LDFLAGS Flags to the loader -# LIBS List of libraries -# CMD Name of the executable -# PROFLIB Library needed for profiling -# -FC = ifort - -LDFLAGS = -# IOMP5_LIB=/usrx/local/prod/intel/2018UP01/lib/intel64/libiomp5.a - -LIBS = -qopenmp -Xlinker --start-group ${W3NCO_LIBd} ${W3NCO_LIBd} ${IP_LIBd} ${SP_LIBd} ${BACIO_LIB4} ${IOMP5_LIB} - -CMD = mkgfsawps -PROFLIB = -lprof - -# To perform the default compilation, use the first line -# To compile with flowtracing turned on, use the second line -# To compile giving profile additonal information, use the third line -# WARNING: SIMULTANEOUSLY PROFILING AND FLOWTRACING IS NOT RECOMMENDED -FFLAGS = -O3 -g -convert big_endian -r8 -i4 -assume noold_ldout_format - -# Lines from here on down should not need to be changed. They are the -# actual rules which make uses to build a.out. -# -all: $(CMD) - -$(CMD): $(OBJS) - $(FC) -o $(LDFLAGS) $(@) $(OBJS) $(LIBS) - rm -f $(OBJS) - -# Make the profiled version of the command and call it a.out.prof -# -$(CMD).prof: $(OBJS) - $(FC) -o $(LDFLAGS) $(@) $(OBJS) $(LIBS) - -rm -f $(OBJS) - -clean: - -rm -f $(OBJS) - -clobber: clean - -rm -f $(CMD) $(CMD).prof - -void: clobber - -rm -f $(SRCS) makefile diff --git a/util/sorc/mkgfsawps.fd/makefile.wcoss_cray b/util/sorc/mkgfsawps.fd/makefile.wcoss_cray deleted file mode 100755 index b1bd05f7e9..0000000000 --- a/util/sorc/mkgfsawps.fd/makefile.wcoss_cray +++ /dev/null @@ -1,56 +0,0 @@ -SHELL=/bin/sh -# -SRCS= mkgfsawps.f - -OBJS= mkgfsawps.o - -# Tunable parameters -# -# FC Name of the fortran compiling system to use -# LDFLAGS Flags to the loader -# LIBS List of libraries -# CMD Name of the executable -# PROFLIB Library needed for profiling -# -FC = ifort - -LDFLAGS = -IOMP5_LIB=/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libiomp5.a - -LIBS = -Xlinker --start-group ${W3NCO_LIBd} ${W3NCO_LIBd} ${IP_LIBd} ${SP_LIBd} ${BACIO_LIB4} ${IOMP5_LIB} - -CMD = mkgfsawps -PROFLIB = -lprof - -# To perform the default compilation, use the first line -# To compile with flowtracing turned on, use the second line -# To compile giving profile additonal information, use the third line -# WARNING: SIMULTANEOUSLY PROFILING AND FLOWTRACING IS NOT RECOMMENDED -FFLAGS = -O3 -g -convert big_endian -r8 -i4 -assume noold_ldout_format - -#FFLAGS = -F -#FFLAGS = -Wf"-ez" - -# Lines from here on down should not need to be changed. They are the -# actual rules which make uses to build a.out. -# -all: $(CMD) - -$(CMD): $(OBJS) - $(FC) -o $(LDFLAGS) $(@) $(OBJS) $(LIBS) - rm -f $(OBJS) - -# Make the profiled version of the command and call it a.out.prof -# -$(CMD).prof: $(OBJS) - $(FC) -o $(LDFLAGS) $(@) $(OBJS) $(LIBS) - -rm -f $(OBJS) - -clean: - -rm -f $(OBJS) - -clobber: clean - -rm -f $(CMD) $(CMD).prof - -void: clobber - -rm -f $(SRCS) makefile diff --git a/util/sorc/mkgfsawps.fd/makefile.wcoss_dell_p3 b/util/sorc/mkgfsawps.fd/makefile.wcoss_dell_p3 deleted file mode 100755 index 86f3c417b1..0000000000 --- a/util/sorc/mkgfsawps.fd/makefile.wcoss_dell_p3 +++ /dev/null @@ -1,53 +0,0 @@ -SHELL=/bin/sh -# -SRCS= mkgfsawps.f - -OBJS= mkgfsawps.o - -# Tunable parameters -# -# FC Name of the fortran compiling system to use -# LDFLAGS Flags to the loader -# LIBS List of libraries -# CMD Name of the executable -# PROFLIB Library needed for profiling -# -FC = ifort - -LDFLAGS = -IOMP5_LIB=/usrx/local/prod/intel/2018UP01/lib/intel64/libiomp5.a - -LIBS = -Xlinker --start-group ${W3NCO_LIBd} ${W3NCO_LIBd} ${IP_LIBd} ${SP_LIBd} ${BACIO_LIB4} ${IOMP5_LIB} - -CMD = mkgfsawps -PROFLIB = -lprof - -# To perform the default compilation, use the first line -# To compile with flowtracing turned on, use the second line -# To compile giving profile additonal information, use the third line -# WARNING: SIMULTANEOUSLY PROFILING AND FLOWTRACING IS NOT RECOMMENDED -FFLAGS = -O3 -g -convert big_endian -r8 -i4 -assume noold_ldout_format - -# Lines from here on down should not need to be changed. They are the -# actual rules which make uses to build a.out. -# -all: $(CMD) - -$(CMD): $(OBJS) - $(FC) -o $(LDFLAGS) $(@) $(OBJS) $(LIBS) - rm -f $(OBJS) - -# Make the profiled version of the command and call it a.out.prof -# -$(CMD).prof: $(OBJS) - $(FC) -o $(LDFLAGS) $(@) $(OBJS) $(LIBS) - -rm -f $(OBJS) - -clean: - -rm -f $(OBJS) - -clobber: clean - -rm -f $(CMD) $(CMD).prof - -void: clobber - -rm -f $(SRCS) makefile diff --git a/util/sorc/mkgfsawps.fd/mkgfsawps.f b/util/sorc/mkgfsawps.fd/mkgfsawps.f deleted file mode 100755 index 4e4e57db3c..0000000000 --- a/util/sorc/mkgfsawps.fd/mkgfsawps.f +++ /dev/null @@ -1,511 +0,0 @@ - PROGRAM MKGFSAWPS -C$$$ MAIN PROGRAM DOCUMENTATION BLOCK -C . . . . -C MAIN PROGRAM: MKGFSAWPS -C PRGMMR: VUONG ORG: NP11 DATE: 2004-04-21 -C -C ABSTRACT: PROGRAM READS GRIB FILE FROM SPECTRAL MODEL WITH 0.5 DEGREE -C (GRID 4) OR 1 DEGREE (GRID 3) OR 2.5 DEGREE (GRID 2) RECORDS. -C UNPACKS THEM, AND CAN MAKE AWIPS GRIB GRIDS 201,202, 203, -C 204, 211, 213 and 225. THEN, ADD A TOC FLAG FIELD SEPARATOR -C BLOCK AND WMO HEADER IN FRONT OF EACH GRIB FIELD, AND WRITES -C THEM OUT TO A NEW FILE. THE OUTPUT FILE IS IN THE FORMAT -C REQUIRED FOR TOC'S FTP INPUT SERVICE, WHICH CAN BE USED TO -C DISSEMINATE THE GRIB BULLETINS. -C -C PROGRAM HISTORY LOG: -C 2004-04-21 VUONG -C 2010-05-27 VUONG INCREASED SIZE OF ARRAYS -C -C USAGE: -C INPUT FILES: -C 5 - STANDARD FORTRAN INPUT FILE. -C 11 - GRIB FILE FROM SPECTRAL MODEL WITH GRID 2 OR 3. -C 31 - CRAY GRIB INDEX FILE FOR FILE 11 -C PARM - PASS IN 4 CHARACTERS 'KWBX' WITH PARM FIELD -C -C OUTPUT FILES: (INCLUDING SCRATCH FILES) -C 6 - STANDARD FORTRAN PRINT FILE -C 51 - AWIPS GRIB GRID TYPE 201,202,203,211,213 and 225 RECORDS -C MADE FROM GRIB GRID 2, 3 OR 4 RECORDS. -C -C SUBPROGRAMS CALLED: (LIST ALL CALLED FROM ANYWHERE IN CODES) -C UNIQUE: - MAKWMO -C LIBRARY: -C W3LIB - W3AS00 IW3PDS W3FP11 W3UTCDAT -C W3FI63 W3FI72 W3FI83 W3TAGB GETGB GETGBP -C BACIO - BAREAD BAOPENR BAOPENW BACLOSE -C -C EXIT STATES: -C COND = 0 - SUCCESSFUL RUN -C 10 - ERROR OPENING INPUT GRIB DATA FILE -C 18 - ERROR READING CONTROL CARD FILE -C 19 - ERROR READING CONTROL CARD FILE -C 20 - ERROR OPENING OUTPUT GRIB FILE -C 30 - BULLETINS ARE MISSING -C -C REMARKS: LIST CAVEATS, OTHER HELPFUL HINTS OR INFORMATION -C -C ATTRIBUTES: -C LANGUAGE: FORTRAN 90 -C - PARAMETER (MXSIZE=2000000,MXSIZ3=MXSIZE*3) - PARAMETER (LUGI=31,LUGB=11,LUGO=51) - PARAMETER (LENHEAD=21) -C - REAL FLDI(MXSIZE) - REAL FLDV(MXSIZE) - REAL FLDO(MXSIZE),FLDVO(MXSIZE) - REAL RLAT(MXSIZE),RLON(MXSIZE) - REAL CROT(MXSIZE),SROT(MXSIZE) -C - INTEGER D(20) - INTEGER IFLD(MXSIZE) - INTEGER IBDSFL(12) - INTEGER IBMAP(MXSIZE) - INTEGER IDAWIP(200) - INTEGER JGDS(100) - INTEGER MPDS(25) - INTEGER,DIMENSION(8):: ITIME=(/0,0,0,-500,0,0,0,0/) - INTEGER KGDS(200),KGDSO(200) - INTEGER KPDS(25) - INTEGER MAPNUM(20) - INTEGER NBITS(20) - INTEGER NPARM - INTEGER NBUL - INTEGER PUNUM - INTEGER IPOPT(20) - INTEGER,DIMENSION(28):: HEXPDS -C - CHARACTER * 6 BULHED(20) - CHARACTER * 100 CPARM - CHARACTER * 17 DESC - CHARACTER * 3 EOML - CHARACTER * 1 GRIB(MXSIZ3) - CHARACTER * 1 KBUF(MXSIZ3) - CHARACTER * 4 KWBX - CHARACTER * 2 NGBFLG - CHARACTER * 1 PDS(28),GDS(400) - CHARACTER * 1 PDSL(28) - CHARACTER * 1 PDSAWIP(28) - CHARACTER * 132 TITLE - CHARACTER * 1 WMOHDR(21) - CHARACTER * 1 WFLAG - CHARACTER * 6 ENVVAR - CHARACTER * 80 FIlEB,FILEI,FILEO - CHARACTER * 1 CSEP(80) -C - LOGICAL IW3PDS - LOGICAL*1 KBMS(MXSIZE),KBMSO(MXSIZE) -C - SAVE -C - DATA IBDSFL/ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0/ - DATA IP/0/,IPOPT/1,19*0/ - DATA HEXPDS /28*0/ - DATA KM/1/ -C - CALL W3TAGB('MKGFSAWIPS',2004,0112,0112,'NP11') -C -C READ GRIB DATA AND INDEX FILE NAMES FROM THE FORT -C ENVIRONMENT VARIABLES, AND OPEN THE FILES. -C - ENVVAR='FORT ' - WRITE(ENVVAR(5:6),FMT='(I2)') LUGB - CALL GETENV(ENVVAR,FILEB) - WRITE(ENVVAR(5:6),FMT='(I2)') LUGI - CALL GETENV(ENVVAR,FILEI) - - CALL BAOPENR(LUGB,FILEB,IRET1) - IF ( IRET1 .NE. 0 ) THEN - WRITE(6,FMT='(" ERROR OPENING GRIB FILE: ",A80)') FILEB - WRITE(6,FMT='(" BAOPENR ERROR = ",I5)') IRET1 - STOP 10 - ENDIF - - CALL BAOPENR(LUGI,FILEI,IRET2) - IF ( IRET2 .NE. 0 ) THEN - WRITE(6,FMT='(" ERROR OPENING GRIB FILE: ",A80)') FILEB - WRITE(6,FMT='(" BAOPENR ERROR = ",I5)') IRET2 - STOP 10 - ENDIF -C -C READ OUTPUT GRIB BULLETIN FILE NAME FROM FORT -C ENVIRONMENT VARIABLE, AND OPEN FILE. -C - ENVVAR='FORT ' - WRITE(ENVVAR(5:6),FMT='(I2)') LUGO - CALL GETENV(ENVVAR,FILEO) - CALL BAOPENW(LUGO,FILEO,IRET3) - IF ( IRET3 .NE. 0 ) THEN - WRITE(6,FMT='(" ERROR OPENING OUTPUT GRIB FILE: ",A80)') FILEB - WRITE(6,FMT='(" BAOPENW ERROR = ",I5)') IRET3 - STOP 20 - ENDIF -C -C GET PARM FIELD WITH UP TO 100 CHARACTERS -C - CPARM = ' ' - KWBX = 'KWBC' - CALL W3AS00(NPARM,CPARM,IER) - IF (IER.EQ.0) THEN - IF (NPARM.EQ.0.OR.CPARM(1:4).EQ.' ') THEN - PRINT *,'THERE IS A PARM FIELD BUT IT IS EMPTY' - PRINT *,'OR BLANK, I WILL USE THE DEFAULT KWBC' - ELSE - KWBX(1:4) = CPARM(1:4) - END IF - ELSE IF (IER.EQ.2.OR.IER.EQ.3) THEN - PRINT *,'W3AS00 ERROR = ',IER - PRINT *,'THERE IS NO PARM FIELD, I USED DEFAULT KWBC' - ELSE - PRINT *,'W3AS00 ERROR = ',IER - END IF - PRINT *,'NPARM = ',NPARM - PRINT *,'CPARM = ',CPARM(1:4) - PRINT *,'KWBX = ',KWBX(1:4) -C - IRET = 0 - IOPT = 2 - INSIZE = 19 - NBUL = 0 - NGBSUM = 0 -C - CALL W3UTCDAT (ITIME) -C -C LOOP TO READ UNPACKED GRIB DATA -C 28 BYTE PDS AND 65160 FLOATING POINT NUMBERS -C - NREC = 0 - DO 699 IREAD = 1,1000 - READ (*,66,END=800) (HEXPDS(J),J=1,12), - & (HEXPDS(J),J=17,20), PUNUM, NGBFLG, DESC - 66 FORMAT(3(2X,4Z2),3X,4Z2,6X,I3,1X,A2,1X,A17) -C -C CHARACTERS ON CONTROL CARD NOT 0-9, A-F, OR a-f -C ALL RECORD EXCEPT V-GRD ARE READ INTO ARRAY C -C -C EXIT LOOP, IF NO MORE BULLETINS IN INPUT CARDS -C - PDS=CHAR(HEXPDS) - IF (MOVA2I(PDS(1)) .EQ. 255) EXIT - NREC = NREC + 1 - WRITE (6,FMT='(''**************************************'', - & ''************************************************'')') - PRINT *,'START NEW RECORD NO. = ',NREC - WRITE (6,FMT='('' INPUT PDS, PUNUM, NGBFLG'', - & '' & DESC...DESIRED GRIB MAPS LISTED ON FOLLOWING '', - & ''LINES...'',/,4X,3(2X,4Z2.2),3X,4Z2.2,6X,I3,1X,A2, - & 1X,A17)') (HEXPDS(J),J=1,12), - & (HEXPDS(J),J=17,20), PUNUM, NGBFLG, DESC -C -C READ IN GRIDS TO INTERPOLATE TO -C - NGB = 0 - DO J = 1,20 - READ (*,END=710,FMT='(4X,I3,2X,I2,2X,A6,1X,I3,24X,A3)') - & MAPNUM(J),NBITS(J), BULHED(J), D(J), EOML - WRITE (6,FMT='(4X,I3,2X,I2,2X,A6,1X,I3,24X,A3)') - & MAPNUM(J),NBITS(J), BULHED(J), D(J), EOML - NGB = J - IF (EOML .EQ. 'EOM') EXIT - ENDDO -C - NGBSUM = NGBSUM + NGB - JREW = 0 - MPDS = -1 - JGDS = -1 - MPDS(3) = MOVA2I(PDS(7)) - MPDS(5) = MOVA2I(PDS(9)) - WFLAG = ' ' - IF (MPDS(5).EQ.33) THEN - WFLAG = 'U' - ELSE IF (MPDS(5).EQ.34) THEN - WFLAG = 'V' - END IF - MPDS(6) = MOVA2I(PDS(10)) - MPDS(7) = MOVA2I(PDS(11)) * 256 + MOVA2I(PDS(12)) - IF (MPDS(5).EQ.61.OR.MPDS(5).EQ.62.OR. - & MPDS(5).EQ.63) THEN - MPDS(14) = MOVA2I(PDS(19)) - MPDS(15) = MOVA2I(PDS(20)) - END IF -C -C PRINT *,'CHECK POINT BEFORE GETGB' -C IF YOU GET U-GRD, ALSO READ V-GRD INTO ARRAY FLDV -C ALL RECORD EXCEPT V-GRD ARE READ INTO ARRAY FLDI -C IF YOU GET V-GRD, READ INTO ARRAY FLDV, READ U-GRD INTO FLDI -C - IF (WFLAG.EQ.'V') MPDS(5) = 33 - CALL GETGB(LUGB,LUGI,MXSIZE,JREW,MPDS,JGDS, - & MI,KREW,KPDS,KGDS,KBMS,FLDI,IRET) - CALL GETGBP(LUGB,LUGI,MXSIZ3,KREW-1,MPDS,JGDS, - & KBYTES,KREW,KPDS,KGDS,GRIB,IRET) - IF (IRET.NE.0) THEN - IF (IRET.LT.96) PRINT *,'GETGB-W3FI63: ERROR = ',IRET - IF (IRET.EQ.96) PRINT *,'GETGB: ERROR READING INDEX FILE' - IF (IRET.EQ.97) PRINT *,'GETGB: ERROR READING GRIB FILE' - IF (IRET.EQ.98) THEN - PRINT *,'GETGB ERROR: NUM. OF DATA POINTS GREATER THAN JF' - END IF - IF (IRET.EQ.99) PRINT *,'GETGB ERROR: REQUEST NOT FOUND' - IF (IRET.GT.99) PRINT *,'GETGB ERROR = ',IRET - GO TO 699 - END IF - PDSL(1:28)=GRIB(9:36) - IBI=MOD(KPDS(4)/64,2) - IF (WFLAG.EQ.'U') THEN - CALL W3FP11 (GRIB,PDSL,TITLE,IER) -C -C COMPARE RECORD (GRIB) TO CONTROL CARD (PDS), THEY SHOULD MATCH -C - KEY = 2 - IF (.NOT.IW3PDS(PDSL,PDS,KEY)) THEN - PRINT 2900, IREAD, (MOVA2I(PDSL(J)),J=1,28), - * (MOVA2I(PDS(J)),J=1,28) - GO TO 699 - END IF - END IF -C -C READ V-GRD INTO ARRAY FLDV -C - IF (WFLAG.EQ.'U'.OR.WFLAG.EQ.'V') THEN - MPDS(5) = 34 - CALL GETGB(LUGB,LUGI,MXSIZE,JREW,MPDS,JGDS, - & MI,KREW,KPDS,KGDS,KBMS,FLDV,JRET) - CALL GETGBP(LUGB,LUGI,MXSIZ3,KREW-1,MPDS,JGDS, - & KBYTES,KREW,KPDS,KGDS,GRIB,JRET) - IF (JRET.NE.0) THEN - IF (JRET.LT.96) PRINT *,'GETGB-W3FI63: ERROR = ',JRET - IF (JRET.EQ.96) PRINT *,'GETGB: ERROR READING INDEX FILE' - IF (JRET.EQ.97) PRINT *,'GETGB: ERROR READING GRIB FILE' - IF (JRET.EQ.98) THEN - PRINT *,'GETGB ERROR: NUM. OF DATA POINTS GREATER THAN JF' - END IF - IF (JRET.EQ.99) PRINT *,'GETGB ERROR: REQUEST NOT FOUND' - IF (JRET.GT.99) PRINT *,'GETGB ERROR = ',JRET - GO TO 699 - END IF - IF (WFLAG.EQ.'V') THEN - CALL W3FP11 (GRIB,PDSL,TITLE,IER) - END IF - END IF - PRINT *,'RECORD NO. OF GRIB RECORD IN INPUT FILE = ',KREW -C -C COMPARE RECORD (GRIB) TO CONTROL CARD (PDS), THEY SHOULD MATCH -C - KEY = 2 - IF (WFLAG.EQ.' '.OR.WFLAG.EQ.'V') THEN - PDSL(1:28)=GRIB(9:36) - IF (.NOT.IW3PDS(PDSL,PDS,KEY)) THEN - PRINT 2900, IREAD, (MOVA2I(PDSL(J)),J=1,28), - * (MOVA2I(PDS(J)),J=1,28) -2900 FORMAT ( 1X,I4,' (PDS) IN RECORD DOES NOT MATCH (PDS) IN ', - & 'CONTROL CARD ',/,7(1X,4Z2.2), /,7(1X,4Z2.2)) - GO TO 699 - END IF - END IF -C - PRINT 2, (MOVA2I(PDSL(J)),J=1,28) - 2 FORMAT (' PDS = ',7(4Z2.2,1X)) -C - IF (WFLAG.EQ.' ') THEN - CALL W3FP11 (GRIB,PDSL,TITLE,IER) - END IF - IF (IER.NE.0) PRINT *,'W3FP11 ERROR = ',IER - PRINT *,TITLE(1:86) -C -C MASK OUT ZERO PRECIP GRIDPOINTS BEFORE INTERPOLATION -C - IF (MPDS(5).EQ.61.OR.MPDS(5).EQ.62.OR. - & MPDS(5).EQ.63) THEN - DO J=1,MI - IF ( FLDI(J).EQ.0.0 ) THEN - KBMS(J)=.FALSE. - IBI=1 - ENDIF - ENDDO - END IF -C -C PROCESS EACH GRID -C - DO 690 I = 1,NGB - - CALL MAKGDS(MAPNUM(I),KGDSO,GDS,LENGDS,IRET) - IF ( IRET.NE.0) THEN - PRINT *,' GRID ',MAPNUM(I),' NOT VALID.' - CYCLE - ENDIF - - IF (WFLAG.EQ.' ') THEN - CALL IPOLATES(IP,IPOPT,KGDS,KGDSO,MI,MXSIZE,KM,IBI,KBMS,FLDI, - * IGPTS,RLAT,RLON,IBO,KBMSO,FLDO,IRET) - ELSE - CALL IPOLATEV(IP,IPOPT,KGDS,KGDSO,MI,MXSIZE,KM,IBI,KBMS, - * FLDI,FLDV,IGPTS,RLAT,RLON,CROT,SROT, - * IBO,KBMSO,FLDO,FLDVO,IRET) - ENDIF - - IF (IRET.NE.0) THEN - PRINT *,' INTERPOLATION TO GRID ',MAPNUM(I),' FAILED.' - CYCLE - ENDIF - - IF (WFLAG.EQ.'V') THEN - FLDO=FLDVO - ENDIF -C -C CALL W3FI69 TO UNPACK PDS INTO 25 WORD INTEGER ARRAY -C - CALL W3FI69(PDSL,IDAWIP) -C -C CHANGE MODEL NUMBER AND GRID TYPE -C - IDAWIP(5) = MAPNUM(I) - IF (WFLAG.EQ.'U') IDAWIP(8) = 33 - IF (WFLAG.EQ.'V') IDAWIP(8) = 34 -C -C ZERO PRECIP GRIDPOINTS WHERE MASK WAS APPLIED BEFORE INTERPOLATION -C - IF (IDAWIP(8).EQ.61.OR.IDAWIP(8).EQ.62.OR. - & IDAWIP(8).EQ.63) THEN - IF (IBO.EQ.1) THEN - DO J=1,IGPTS - IF ( .NOT.KBMSO(J) ) THEN - KBMSO(J)=.TRUE. - FLDO(J)=0.0 - ENDIF - ENDDO - END IF - END IF -C -C TEST RELATIVE HUMIDITY FOR GT THAN 100.0 AND LT 0.0 -C IF SO, RESET TO 0.0 AND 100.0 -C - IF (IDAWIP(8).EQ.52) THEN - DO J = 1,IGPTS - IF (FLDO(J).GT.100.0) FLDO(J) = 100.0 - IF (FLDO(J).LT.0.0) FLDO(J) = 0.0 - END DO - END IF -C -C SET ALL NEGATIVE ACUM PCP VALUES TO 0 -C - IF (IDAWIP(8).EQ.61.OR.IDAWIP(8).EQ.62.OR. - & IDAWIP(8).EQ.63) THEN - DO J = 1,IGPTS - IF (FLDO(J).LT.0.0) FLDO(J) = 0.0 - END DO - END IF -C -C COPY OUTPUT BITMAP FROM LOGICAL TO INTEGER ARRAY FOR W3FI72 -C - IF (IBO.EQ.1) THEN - DO J=1,IGPTS - IF (KBMSO(J)) THEN - IBMAP(J)=1 - ELSE - IBMAP(J)=0 - ENDIF - ENDDO - ELSE - IBMAP=1 - ENDIF -C -C IF D VALUE EQUAL ZERO, USE D VALUE IN 1 DEGREE INPUT RECORDS, -C ELSE USE THE D VALUE -C - IF (D(I).NE.0) THEN - IDAWIP(25) = D(I) - END IF -C -C PRINT *,'W3FT69 = ',IDAWIP -C PRINT *,'CHECK POINT AFTER W3FI69' -C - IBITL = NBITS(I) - ITYPE = 0 - IGRID = MAPNUM(I) - IPFLAG = 0 - IGFLAG = 0 - IBFLAG = 0 - ICOMP = 0 - IBLEN = IGPTS - JERR = 0 -C -C GRIB AWIPS GRID 37-44 -C -C PRINT *,'CHECK POINT BEFORE W3FI72' - CALL W3FI72(ITYPE,FLDO,IFLD,IBITL, - & IPFLAG,IDAWIP,PDSAWIP, - & IGFLAG,IGRID,KGDSO,ICOMP, - & IBFLAG,IBMAP,IBLEN, - & IBDSFL, - & NPTS,KBUF,ITOT,JERR) -C PRINT *,'CHECK POINT AFTER W3FI72' - IF (JERR.NE.0) PRINT *,' W3FI72 ERROR = ',JERR - PRINT *,'NPTS, ITOT = ',NPTS,ITOT - PRINT 2, (MOVA2I(PDSAWIP(J)),J=1,28) -C -C PRINT *,'SIZE OF GRIB FIELD = ',ITOT -C -C MAKE FLAG FIELD SEPARATOR BLOCK -C - CALL MKFLDSEP(CSEP,IOPT,INSIZE,ITOT+LENHEAD,LENOUT) -C -C MAKE WMO HEADER -C - CALL MAKWMO (BULHED(I),KPDS(10),KPDS(11),KWBX,WMOHDR) -C -C WRITE OUT SEPARATOR BLOCK, ABBREVIATED WMO HEADING, -C - CALL WRYTE(LUGO,LENOUT,CSEP) - CALL WRYTE(LUGO,LENHEAD,WMOHDR) - CALL WRYTE(LUGO,ITOT,KBUF) - NBUL = NBUL + 1 - 690 CONTINUE -C - 699 CONTINUE -C-------------------------------------------------------------- -C -C CLOSING SECTION -C - 800 CONTINUE - IF (NBUL .EQ. 0 .AND. NUMFLD .EQ. 0) THEN - WRITE (6,FMT='('' SOMETHING WRONG WITH DATA CARDS...'', - & ''NOTHING WAS PROCESSED'')') - CALL W3TAGE('MKGFSAWPS') - STOP 19 - ELSE - CALL BACLOSE (LUGB,IRET) - CALL BACLOSE (LUGI,IRET) - CALL BACLOSE (LUGO,IRET) - WRITE (6,FMT='(//,'' ******** RECAP OF THIS EXECUTION '', - & ''********'',/,5X,''READ '',I6,'' INDIVIDUAL IDS'', - & /,5X,''WROTE '',I6,'' BULLETINS OUT FOR TRANSMISSION'', - & //)') NREC, NBUL -C -C TEST TO SEE IF ANY BULLETINS MISSING -C - MBUL = 0 - MBUL = NGBSUM - NBUL - IF (MBUL.NE.0) THEN - PRINT *,'BULLETINS MISSING = ',MBUL - CALL W3TAGE('MKGFSAWPS') - STOP 30 - END IF -C - CALL W3TAGE('MKGFSAWPS') - STOP - ENDIF -C -C ERROR MESSAGES -C - 710 CONTINUE - WRITE (6,FMT='('' ?*?*? CHECK DATA CARDS... READ IN '', - & ''GRIB PDS AND WAS EXPECTING GRIB MAP CARDS TO FOLLOW.'',/, - & '' MAKE SURE NGBFLG = ZZ OR SUPPLY '', - & ''SOME GRIB MAP DEFINITIONS!'')') - CALL W3TAGE('MKGFSAWPS') - STOP 18 -C - END diff --git a/util/sorc/overgridid.fd/compile_overgridid_wcoss.sh b/util/sorc/overgridid.fd/compile_overgridid_wcoss.sh deleted file mode 100755 index f6800a1943..0000000000 --- a/util/sorc/overgridid.fd/compile_overgridid_wcoss.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh - -###################################################################### -# -# Build executable : GFS utilities -# -###################################################################### - -LMOD_EXACT_MATCH=no -source ../../../sorc/machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` - -if [ "$target" = "wcoss_dell_p3" ] || [ "$target" = "wcoss_cray" ] || [ "$target" = "hera" ] ; then - echo " " - echo " You are on WCOSS: $target " - echo " " -elif [ "$target" = "wcoss" ] ; then - echo " " - echo " " - echo " You are on WCOSS: $target " - echo " You do not need to build GFS utilities for GFS V15.0.0 " - echo " " - echo " " - exit -else - echo " " - echo " Your machine is $target is not recognized as a WCOSS machine." - echo " The script $0 can not continue. Aborting!" - echo " " - exit -fi -echo " " - -# Load required modules -source ../../modulefiles/gfs_util.${target} -module list - -set -x - -mkdir -p ../../exec -make -mv overgridid ../../exec -make clean diff --git a/util/sorc/overgridid.fd/makefile b/util/sorc/overgridid.fd/makefile deleted file mode 100755 index 7141872bc1..0000000000 --- a/util/sorc/overgridid.fd/makefile +++ /dev/null @@ -1,8 +0,0 @@ -LIBS = ${W3NCO_LIB4} ${BACIO_LIB4} -OBJS= overgridid.o -overgridid: overgridid.f - ifort -o overgridid overgridid.f $(LIBS) -clean: - -rm -f $(OBJS) - - diff --git a/util/sorc/overgridid.fd/overgridid.f b/util/sorc/overgridid.fd/overgridid.f deleted file mode 100755 index 29b0080bf6..0000000000 --- a/util/sorc/overgridid.fd/overgridid.f +++ /dev/null @@ -1,59 +0,0 @@ - program overgridid -C$$$ MAIN PROGRAM DOCUMENTATION BLOCK -C -C MAIN PROGRAM: OVERGRIDID REPLACE iGRID ID IN A GRIB FILE -C PRGMMR: VUONG ORG: NP23 DATE: 2014-05-21 -C -C ABSTRACT: THIS PROGRAM READS AN ENTIRE GRIB FILE FROM UNIT 11 -C AND WRITES IT BACK OUT TO UNIT 51, REPLACING THE INTERNAL -C GRID ID WITH THE GRID ID READ IN VIA UNIT 5. -C -C PROGRAM HISTORY LOG: -C 1998-01-01 IREDELL -C 1998-06-17 FARLEY MODIFIED OVERDATE ROUTINE -C 1999-05-24 Gilbert - added calls to BAOPEN. -C 2014-05-21 Vuong - Modified to change grid id in a grib file -C -C INPUT FILES: -C UNIT 5 2-DIGIT MODEL ID (in base 10) -C UNIT 11 INPUT GRIB FILE = "fort.11" -C -C OUTPUT FILES: -C UNIT 51 OUTPUT GRIB FILE = "fort.51" -C -C SUBPROGRAMS CALLED: -C SKGB - Find next GRIB field -C BAREAD - Read GRIB field -C WRYTE - Read GRIB field -C -C REMARKS: -C ANY NON-GRIB INFORMATION IN THE INPUT GRIB FILE WILL BE LOST. -C AN OUTPUT LINE WILL BE WRITTEN FOR EACH GRIB MESSAGE COPIED. -C -C ATTRIBUTES: -C LANGUAGE: FORTRAN 90 -C -C$$$ - parameter(msk1=32000,msk2=4000,mgrib=10000000) - character cgrib(mgrib) -C - read *,id ! grid id, ie 03 for 1.0 deg grib - call baopenr(11,"fort.11",iret1) - call baopenw(51,"fort.51",iret2) -C - n=0 - iseek=0 - call skgb(11,iseek,msk1,lskip,lgrib) - dowhile(lgrib.gt.0.and.lgrib.le.mgrib) - call baread(11,lskip,lgrib,ngrib,cgrib) - if(ngrib.ne.lgrib) call exit(2) - n=n+1 - id0=mova2i(cgrib(8+7)) - cgrib(8+7)=char(id) - call wryte(51,lgrib,cgrib) - print '("msg",i6,4x,"len",i8,4x,"was",i4.2,4x,"now",i4.2)', - & n,lgrib,id0,id - iseek=lskip+lgrib - call skgb(11,iseek,msk2,lskip,lgrib) - enddo - end diff --git a/util/sorc/overgridid.fd/sample.script b/util/sorc/overgridid.fd/sample.script deleted file mode 100755 index fdfd931600..0000000000 --- a/util/sorc/overgridid.fd/sample.script +++ /dev/null @@ -1,13 +0,0 @@ -# THIS SCRIPT READ A FORECAST FILE (UNIT 11), MODIFIES PDS OCTET(8) -# TO CORRECT THE GRIB GRID ID AND RE-WRITES THE FILE TO UNIT 51. - -# STANDARD INPUT IS A 3-DIGIT INTEGER, FOR EXAMPLE 255 (User define grid) - -ln -s master.grbf06 fort.11 - -overgridid << EOF -255 -EOF - -mv fort.51 master.grbf06.new -rm fort.11 diff --git a/util/sorc/rdbfmsua.fd/MAPFILE b/util/sorc/rdbfmsua.fd/MAPFILE deleted file mode 100755 index 19e0decd71..0000000000 --- a/util/sorc/rdbfmsua.fd/MAPFILE +++ /dev/null @@ -1,4045 +0,0 @@ -Archive member included because of file (symbol) - -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flclos.o) - rdbfmsua.o (fl_clos_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flflun.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flclos.o) (fl_flun_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltbop.o) - rdbfmsua.o (fl_tbop_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltdat.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltbop.o) (fl_tdat_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltinq.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltbop.o) (fl_tinq_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stldsp.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltdat.o) (st_ldsp_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stlstr.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltinq.o) (st_lstr_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(strmbl.o) - rdbfmsua.o (st_rmbl_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(strmst.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltinq.o) (st_rmst_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(tbrstn.o) - rdbfmsua.o (tb_rstn_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flbksp.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltdat.o) (fl_bksp_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flinqr.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltinq.o) (fl_inqr_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flpath.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltinq.o) (fl_path_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flsopn.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltbop.o) (fl_sopn_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(ssenvr.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flinqr.o) (ss_envr_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(ssgsym.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(ssenvr.o) (ss_gsym_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stlcuc.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(ssenvr.o) (st_lcuc_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stuclc.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flinqr.o) (st_uclc_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(tbastn.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(tbrstn.o) (tb_astn_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flglun.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flsopn.o) (fl_glun_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libbridge.a(dcbsrh.o) - rdbfmsua.o (dc_bsrh_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ireadns.o) - rdbfmsua.o (ireadns_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) - rdbfmsua.o (openbf_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(posapn.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) (posapn_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(posapx.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) (posapx_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdmsgw.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(posapn.o) (rdmsgw_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readdx.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) (readdx_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readns.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ireadns.o) (readns_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readsb.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readns.o) (readsb_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(status.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) (status_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbint.o) - rdbfmsua.o (ufbint_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbrw.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbint.o) (ufbrw_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upb.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readsb.o) (upb_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wrdlen.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) (wrdlen_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(writdx.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) (writdx_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wtstat.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) (wtstat_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(adn30.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(writdx.o) (adn30_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) (bfrini_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort2.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbint.o) (bort2_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort_exit.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort2.o) (bort_exit_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) (bort_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(conwin.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbrw.o) (conwin_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cpbfdx.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readdx.o) (cpbfdx_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(drstpl.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbrw.o) (drstpl_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(dxinit.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) (dxinit_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(dxmini.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(writdx.o) (dxmini_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(getwin.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbrw.o) (getwin_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ibfms.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbrw.o) (ibfms_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ichkstr.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) (ichkstr_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ifxy.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) (ifxy_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(invcon.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(conwin.o) (invcon_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(invwin.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbrw.o) (invwin_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ipkm.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(writdx.o) (ipkm_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(irev.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upb.o) (irev_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupm.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wrdlen.o) (iupm_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lmsg.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdmsgw.o) (lmsg_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstrpc.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(getwin.o) (lstrpc_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstrps.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbrw.o) (lstrps_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(msgwrt.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(writdx.o) (msgwrt_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(newwin.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbrw.o) (newwin_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nmwrd.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lmsg.o) (nmwrd_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nxtwin.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbrw.o) (nxtwin_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ovrbs1.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(msgwrt.o) (ovrbs1_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(padmsg.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(msgwrt.o) (padmsg_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkb.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(writdx.o) (pkb_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkbs1.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(msgwrt.o) (pkbs1_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkc.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(writdx.o) (pkc_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pktdd.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(dxinit.o) (pktdd_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkvs01.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) (pkvs01_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkvs1.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) (pkvs1_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdbfdx.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readdx.o) (rdbfdx_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdcmps.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readsb.o) (rdcmps_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdtree.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readsb.o) (rdtree_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdusdx.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readdx.o) (rdusdx_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readmg.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readns.o) (readmg_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(seqsdx.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdusdx.o) (seqsdx_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(stndrd.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(msgwrt.o) (stndrd_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(string.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbint.o) (string_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strnum.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(seqsdx.o) (strnum_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strsuc.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strnum.o) (strsuc_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(trybump.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbint.o) (trybump_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upbb.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdtree.o) (upbb_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upc.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdcmps.o) (upc_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(usrtpl.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(conwin.o) (usrtpl_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(capit.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdbfdx.o) (capit_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chrtrna.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ichkstr.o) (chrtrna_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chrtrn.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdbfdx.o) (chrtrn_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cktaba.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readmg.o) (cktaba_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cnved4.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(msgwrt.o) (cnved4_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(digit.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdbfdx.o) (digit_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(elemdx.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdusdx.o) (elemdx_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(getlens.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(msgwrt.o) (getlens_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(gets1loc.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkbs1.o) (gets1loc_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(i4dy.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cktaba.o) (i4dy_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(idn30.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdbfdx.o) (idn30_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(igetdate.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cktaba.o) (igetdate_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(istdesc.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(stndrd.o) (istdesc_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupb.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(msgwrt.o) (iupb_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupbs01.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(msgwrt.o) (iupbs01_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(jstchr.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(elemdx.o) (jstchr_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(jstnum.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(elemdx.o) (jstnum_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstjpb.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(trybump.o) (lstjpb_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(makestab.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdbfdx.o) (makestab_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(mvb.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(stndrd.o) (mvb_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemock.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdusdx.o) (nemock_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtab.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(seqsdx.o) (nemtab_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbax.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cktaba.o) (nemtbax_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nenuaa.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdbfdx.o) (nenuaa_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nenubd.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdbfdx.o) (nenubd_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numbck.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdusdx.o) (numbck_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numtab.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(seqsdx.o) (numtab_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbt.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cktaba.o) (openbt_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parstr.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(seqsdx.o) (parstr_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parusr.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(string.o) (parusr_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parutg.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parusr.o) (parutg_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rcstpl.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdtree.o) (rcstpl_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdmsgb.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readmg.o) (rdmsgb_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(restd.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(stndrd.o) (restd_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rsvfvm.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(seqsdx.o) (rsvfvm_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strcln.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(makestab.o) (strcln_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabsub.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(makestab.o) (tabsub_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(uptdd.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(restd.o) (uptdd_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wrdesc.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(restd.o) (wrdesc_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cadn30.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(restd.o) (cadn30_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chekstab.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(makestab.o) (chekstab_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(inctab.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabsub.o) (inctab_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbb.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(restd.o) (nemtbb_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbd.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabsub.o) (nemtbd_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numtbd.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(restd.o) (numtbd_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabent.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabsub.o) (tabent_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(valx.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbb.o) (valx_) -/gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rjust.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(valx.o) (rjust_) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_init.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/for_main.o (for_rtl_finish_) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_io_util.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_init.o) (for_check_env_name) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open.o) - rdbfmsua.o (for_open) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_preconnected_units_init.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_init.o) (for__preconnected_units_create) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_reentrancy.o) - rdbfmsua.o (for_set_reentrancy) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_secnds.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_init.o) (for_since_epoch_t) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_stop.o) - rdbfmsua.o (for_stop_core) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_vm.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_init.o) (for__set_signal_ops_during_vm) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wint_fmt.o) - rdbfmsua.o (for_write_int_fmt) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq_fmt.o) - rdbfmsua.o (for_write_seq_fmt) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq_lis.o) - rdbfmsua.o (for_write_seq_lis) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_preconnected_units_init.o) (for__aio_lub_table) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open_proc.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open.o) (for__reopen_file) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio_wrap.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio.o) (for__aio_pthread_self) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_text_to_int.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open_proc.o) (cvt_text_to_integer) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_f.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_io_util.o) (cvt_vax_f_to_ieee_single) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_d.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_io_util.o) (cvt_vax_d_to_ieee_double) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_g.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_io_util.o) (cvt_vax_g_to_ieee_double) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cray.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_io_util.o) (cvt_cray_to_ieee_double) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ibm_short.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_io_util.o) (cvt_ibm_short_to_ieee_single) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ibm_long.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_io_util.o) (cvt_ibm_long_to_ieee_double) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ieee_double.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_io_util.o) (cvt_ieee_double_to_cray) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ieee_single.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_io_util.o) (cvt_ieee_single_to_ibm_short) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_close.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open_proc.o) (for__close_default) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_close_proc.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio.o) (for__close_proc) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_default_io_sizes_env_init.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_init.o) (for__default_io_sizes_env_init) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_desc_item.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wint_fmt.o) (for__desc_ret_item) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_diags_intel.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open.o) (for__io_return) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_exit.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_reentrancy.o) (for_exit) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_exit_handler.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_init.o) (for__exit_handler) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_comp.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wint_fmt.o) (for__format_compiler) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_val.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wint_fmt.o) (for__format_value) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_get.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open_proc.o) (for__get_s) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_intrp_fmt.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wint_fmt.o) (for__interp_fmt) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_ldir_wfs.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq_lis.o) (for__wfs_table) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_lub_mgt.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open.o) (for__acquire_lun) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_need_lf.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open_proc.o) (for__add_to_lf_table) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_put.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_stop.o) (for__put_su) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_close_proc.o) (for__finish_ufseq_write) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(tbk_traceback.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_diags_intel.o) (tbk_stack_trace) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt__globals.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ieee_double.o) (vax_c) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_int_to_text.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_val.o) (cvt_integer_to_text) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_data_to_text.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_val.o) (cvt_data_to_text) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_log_to_text.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_val.o) (cvt_boolean_to_text_ex) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_text_to_data.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_val.o) (cvt_text_to_data) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_text_to_log.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_val.o) (cvt_text_to_boolean) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_t.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_val.o) (cvt_ieee_t_to_text_ex) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_s.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_val.o) (cvt_ieee_s_to_text_ex) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_x.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_val.o) (cvt_ieee_x_to_text_ex) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_s.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_s.o) (cvtas_a_to_s) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_t.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_t.o) (cvtas_a_to_t) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_s_to_a.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_s.o) (cvtas_s_to_a) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_t_to_a.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_t.o) (cvtas_t_to_a) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_nan_s.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_s.o) (cvtas__nan_s) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_nan_t.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_t.o) (cvtas__nan_t) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_x.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_x.o) (cvtas_a_to_x) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_x_to_a.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_x.o) (cvtas_x_to_a) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_nan_x.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_x.o) (cvtas__nan_x) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_globals.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_t.o) (cvtas_pten_word) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_pow_ten_53.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_s.o) (cvtas_pten_t) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_pow_ten_64.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_t.o) (cvtas_pten_64) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_pow_ten_128.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_s_to_a.o) (cvtas_pten_128) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(fetestexcept.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_stop.o) (fetestexcept) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_stub.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parusr.o) (lroundf) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_stub.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(trybump.o) (lround) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_ct.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_stub.o) (lround.L) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_ct.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_stub.o) (lroundf.L) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_gen.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_stub.o) (lroundf.A) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_gen.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_stub.o) (lround.A) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(libm_error.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_ct.o) (__libm_error_support) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(matherrf.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(libm_error.o) (matherrf) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(matherrl.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(libm_error.o) (matherrl) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(matherr.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(libm_error.o) (matherr) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ints2q.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_secnds.o) (__jtoq) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(qcomp.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_secnds.o) (__neq) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fp2q.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_secnds.o) (__dtoq) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(q2fp.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_secnds.o) (__qtof) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(tbk_display.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(tbk_traceback.o) (tbk_string_stack_signal_impl) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(tbk_backtrace.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(tbk_display.o) (tbk_getPC) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(cpu_feature_disp.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_stub.o) (__intel_cpu_features_init_x) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemcpy.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_io_util.o) (_intel_fast_memcpy) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemmove.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_init.o) (_intel_fast_memmove) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemset.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_io_util.o) (_intel_fast_memset) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(new_proc_init.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/for_main.o (__intel_new_feature_proc_init) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ia32_addsubq.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_secnds.o) (__addq) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ia32_divq.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_secnds.o) (__divq) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strcpy.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio.o) (__intel_sse2_strcpy) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strncpy.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open.o) (__intel_sse2_strncpy) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strlen.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open.o) (__intel_sse2_strlen) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strchr.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open.o) (__intel_sse2_strchr) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strncmp.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_diags_intel.o) (__intel_sse2_strncmp) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strcat.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open_proc.o) (__intel_sse2_strcat) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strncat.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open_proc.o) (__intel_sse2_strncat) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_memcpy_pp.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemcpy.o) (__intel_new_memcpy) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_memset_pp.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemset.o) (__intel_new_memset) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_memcpy.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemcpy.o) (__intel_ssse3_memcpy) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_rep_memcpy.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemcpy.o) (__intel_ssse3_rep_memcpy) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_memmove.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemmove.o) (__intel_ssse3_memmove) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_rep_memmove.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemmove.o) (__intel_ssse3_rep_memmove) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(irc_msg_support.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(tbk_backtrace.o) (__libirc_get_msg) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_mem_ops.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_memset_pp.o) (__libirc_largest_cache_size) -/opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(proc_init_utils.o) - /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(new_proc_init.o) (__intel_proc_init_ftzdazule) -/usr/lib64/libc_nonshared.a(elf-init.oS) - /usr/lib/../lib64/crt1.o (__libc_csu_fini) -/opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2//libgcc.a(_powidf2.o) - /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdcmps.o) (__powidf2) - -Allocating common symbols -Common symbol size file - -utgprm_ 0x4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parutg.o) -maxcmp_ 0x18 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) -msgstd_ 0x1 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) -thread_count_mutex 0x28 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio.o) -reptab_ 0x64 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) -stbfr_ 0x100 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) -hrdwrd_ 0x2c /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdmsgw.o) -bitbuf_ 0x192dd8 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readsb.o) -usrbit_ 0x27100 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdtree.o) -stcach_ 0x4844c /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(string.o) -bufrmg_ 0xc354 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) -msgcmp_ 0x1 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) -nulbfr_ 0x80 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) -threads_in_flight_mutex - 0x28 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio.o) -usrint_ 0x753080 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbint.o) -acmode_ 0x4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) -s01cm_ 0x7c /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(msgwrt.o) -gmbdta_ 0x1c4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flflun.o) -for__pthread_mutex_unlock_ptr - 0x8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio.o) -for__a_argv 0x8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_init.o) -for__pthread_mutex_init_ptr - 0x8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio.o) -charac_ 0x804 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wrdlen.o) -stords_ 0x1f40 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(string.o) -bufrsr_ 0xc3f8 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) -tabccc_ 0x10 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabsub.o) -unptyp_ 0x80 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readsb.o) -msgfmt_ 0x80 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) -dateln_ 0x4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) -sect01_ 0x7c /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(msgwrt.o) -message_catalog 0x8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_diags_intel.o) -tables_ 0x13d628 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readns.o) -mrgcom_ 0x10 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) -padesc_ 0x14 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) -usrtmp_ 0x16e3600 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rcstpl.o) -dxtab_ 0x300 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(writdx.o) -for__pthread_mutex_lock_ptr - 0x8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio.o) -tababd_ 0xbbe58c /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(writdx.o) -usrstr_ 0xd0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbint.o) -msgcwd_ 0x280 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) -for__l_argc 0x4 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_init.o) -quiet_ 0x4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) -for__aio_lub_table 0x400 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio.o) - -Discarded input sections - - .note.GNU-stack - 0x0000000000000000 0x0 /usr/lib/../lib64/crt1.o - .note.GNU-stack - 0x0000000000000000 0x0 /usr/lib/../lib64/crti.o - .note.GNU-stack - 0x0000000000000000 0x0 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtbegin.o - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/for_main.o - .note.GNU-stack - 0x0000000000000000 0x0 rdbfmsua.o - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flclos.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flflun.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltbop.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltdat.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltinq.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stldsp.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stlstr.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(strmbl.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(strmst.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(tbrstn.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flbksp.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flinqr.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flpath.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flsopn.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(ssenvr.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(ssgsym.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stlcuc.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stuclc.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(tbastn.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flglun.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libbridge.a(dcbsrh.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ireadns.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(posapn.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(posapx.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdmsgw.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readdx.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readns.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readsb.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(status.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbint.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbrw.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upb.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wrdlen.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(writdx.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wtstat.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(adn30.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort2.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort_exit.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(conwin.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cpbfdx.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(drstpl.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(dxinit.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(dxmini.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(getwin.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ibfms.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ichkstr.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ifxy.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(invcon.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(invwin.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ipkm.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(irev.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupm.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lmsg.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstrpc.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstrps.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(msgwrt.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(newwin.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nmwrd.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nxtwin.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ovrbs1.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(padmsg.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkb.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkbs1.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkc.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pktdd.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkvs01.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkvs1.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdbfdx.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdcmps.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdtree.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdusdx.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readmg.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(seqsdx.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(stndrd.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(string.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strnum.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strsuc.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(trybump.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upbb.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upc.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(usrtpl.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(capit.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chrtrna.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chrtrn.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cktaba.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cnved4.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(digit.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(elemdx.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(getlens.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(gets1loc.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(i4dy.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(idn30.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(igetdate.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(istdesc.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupb.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupbs01.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(jstchr.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(jstnum.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstjpb.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(makestab.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(mvb.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemock.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtab.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbax.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nenuaa.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nenubd.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numbck.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numtab.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbt.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parstr.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parusr.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parutg.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rcstpl.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdmsgb.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(restd.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rsvfvm.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strcln.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabsub.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(uptdd.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wrdesc.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cadn30.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chekstab.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(inctab.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbb.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbd.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numtbd.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabent.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(valx.o) - .note.GNU-stack - 0x0000000000000000 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rjust.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_init.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_io_util.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_preconnected_units_init.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_reentrancy.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_secnds.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_stop.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_vm.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wint_fmt.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq_fmt.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq_lis.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open_proc.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio_wrap.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_text_to_int.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_f.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_d.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_g.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cray.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ibm_short.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ibm_long.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ieee_double.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ieee_single.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_close.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_close_proc.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_default_io_sizes_env_init.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_desc_item.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_diags_intel.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_exit.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_exit_handler.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_comp.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_val.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_get.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_intrp_fmt.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_ldir_wfs.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_lub_mgt.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_need_lf.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_put.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(tbk_traceback.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt__globals.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_int_to_text.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_data_to_text.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_log_to_text.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_text_to_data.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_text_to_log.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_t.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_s.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_x.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_s.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_t.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_s_to_a.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_t_to_a.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_nan_s.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_nan_t.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_x.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_x_to_a.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_nan_x.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_globals.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_pow_ten_53.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_pow_ten_64.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_pow_ten_128.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(fetestexcept.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_stub.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_stub.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_ct.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_ct.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_gen.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_gen.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(libm_error.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(matherrf.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(matherrl.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(matherr.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ints2q.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(qcomp.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fp2q.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(q2fp.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(tbk_display.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(tbk_backtrace.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(cpu_feature_disp.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemcpy.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemmove.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemset.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(new_proc_init.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ia32_addsubq.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ia32_divq.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strcpy.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strncpy.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strlen.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strchr.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strncmp.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strcat.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strncat.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_memcpy_pp.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_memset_pp.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_memcpy.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_rep_memcpy.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_memmove.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_rep_memmove.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(irc_msg_support.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_mem_ops.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(proc_init_utils.o) - .note.GNU-stack - 0x0000000000000000 0x0 /usr/lib64/libc_nonshared.a(elf-init.oS) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2//libgcc.a(_powidf2.o) - .note.GNU-stack - 0x0000000000000000 0x0 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtend.o - .note.GNU-stack - 0x0000000000000000 0x0 /usr/lib/../lib64/crtn.o - -Memory Configuration - -Name Origin Length Attributes -*default* 0x0000000000000000 0xffffffffffffffff - -Linker script and memory map - -LOAD /usr/lib/../lib64/crt1.o -LOAD /usr/lib/../lib64/crti.o -LOAD /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtbegin.o -LOAD /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/for_main.o -LOAD rdbfmsua.o -LOAD /gpfs/hps/emc/global/noscrub/Boi.Vuong/lib_sorc/decod_ut/v1.0.0/intel/libdecod_ut_v1.0.0.a -LOAD /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a -LOAD /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libappl.a -LOAD /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libsyslib.a -LOAD /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libcgemlib.a -LOAD /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libbridge.a -LOAD /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a -LOAD /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/../../../../lib64/libgfortran.so -LOAD /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifport.a -LOAD /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a -LOAD /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a -LOAD /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libsvml.a -LOAD /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libm.a -LOAD /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libipgo.a -LOAD /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a -LOAD /usr/lib/../lib64/libpthread.so -START GROUP -LOAD /lib64/libpthread.so.0 -LOAD /usr/lib64/libpthread_nonshared.a -END GROUP -LOAD /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libsvml.a -LOAD /usr/lib/../lib64/libc.so -START GROUP -LOAD /lib64/libc.so.6 -LOAD /usr/lib64/libc_nonshared.a -LOAD /lib64/ld-linux-x86-64.so.2 -END GROUP -LOAD /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2//libgcc.a -LOAD /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/../../../../lib64/libgcc_s.so -LOAD /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc_s.a -LOAD /usr/lib/../lib64/libdl.so -LOAD /usr/lib/../lib64/libc.so -START GROUP -LOAD /lib64/libc.so.6 -LOAD /usr/lib64/libc_nonshared.a -LOAD /lib64/ld-linux-x86-64.so.2 -END GROUP -LOAD /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtend.o -LOAD /usr/lib/../lib64/crtn.o - 0x0000000000400000 PROVIDE (__executable_start, 0x400000) - 0x0000000000400238 . = (0x400000 + SIZEOF_HEADERS) - -.interp 0x0000000000400238 0x1c - *(.interp) - .interp 0x0000000000400238 0x1c /usr/lib/../lib64/crt1.o - -.note.ABI-tag 0x0000000000400254 0x20 - .note.ABI-tag 0x0000000000400254 0x20 /usr/lib/../lib64/crt1.o - -.note.SuSE 0x0000000000400274 0x18 - .note.SuSE 0x0000000000400274 0x18 /usr/lib/../lib64/crt1.o - -.note.gnu.build-id - 0x000000000040028c 0x24 - *(.note.gnu.build-id) - .note.gnu.build-id - 0x000000000040028c 0x24 /usr/lib/../lib64/crt1.o - -.hash 0x00000000004002b0 0x494 - *(.hash) - .hash 0x00000000004002b0 0x494 /usr/lib/../lib64/crt1.o - -.gnu.hash 0x0000000000400748 0x170 - *(.gnu.hash) - .gnu.hash 0x0000000000400748 0x170 /usr/lib/../lib64/crt1.o - -.dynsym 0x00000000004008b8 0xf00 - *(.dynsym) - .dynsym 0x00000000004008b8 0xf00 /usr/lib/../lib64/crt1.o - -.dynstr 0x00000000004017b8 0x87d - *(.dynstr) - .dynstr 0x00000000004017b8 0x87d /usr/lib/../lib64/crt1.o - -.gnu.version 0x0000000000402036 0x140 - *(.gnu.version) - .gnu.version 0x0000000000402036 0x140 /usr/lib/../lib64/crt1.o - -.gnu.version_d 0x0000000000402178 0x0 - *(.gnu.version_d) - .gnu.version_d - 0x0000000000000000 0x0 /usr/lib/../lib64/crt1.o - -.gnu.version_r 0x0000000000402178 0xd0 - *(.gnu.version_r) - .gnu.version_r - 0x0000000000402178 0xd0 /usr/lib/../lib64/crt1.o - -.rela.dyn 0x0000000000402248 0x438 - *(.rela.init) - *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) - .rela.text 0x0000000000000000 0x0 /usr/lib/../lib64/crt1.o - .rela.text.ssse3 - 0x0000000000000000 0x0 /usr/lib/../lib64/crt1.o - *(.rela.fini) - *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) - .rela.rodata 0x0000000000000000 0x0 /usr/lib/../lib64/crt1.o - *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) - .rela.data 0x0000000000000000 0x0 /usr/lib/../lib64/crt1.o - *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) - *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) - *(.rela.ctors) - *(.rela.dtors) - *(.rela.got) - .rela.got 0x0000000000402248 0x3f0 /usr/lib/../lib64/crt1.o - *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) - .rela.bss 0x0000000000402638 0x48 /usr/lib/../lib64/crt1.o - *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) - *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) - *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) - *(.rela.ifunc) - -.rela.plt 0x0000000000402680 0xa80 - *(.rela.plt) - .rela.plt 0x0000000000402680 0xa80 /usr/lib/../lib64/crt1.o - 0x0000000000403100 PROVIDE (__rela_iplt_start, .) - *(.rela.iplt) - .rela.iplt 0x0000000000000000 0x0 /usr/lib/../lib64/crt1.o - 0x0000000000403100 PROVIDE (__rela_iplt_end, .) - -.init 0x0000000000403100 0x18 - *(SORT(.init)) - .init 0x0000000000403100 0x9 /usr/lib/../lib64/crti.o - 0x0000000000403100 _init - .init 0x0000000000403109 0x5 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtbegin.o - .init 0x000000000040310e 0x5 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtend.o - .init 0x0000000000403113 0x5 /usr/lib/../lib64/crtn.o - -.plt 0x0000000000403120 0x710 - *(.plt) - .plt 0x0000000000403120 0x710 /usr/lib/../lib64/crt1.o - 0x0000000000403130 fileno@@GLIBC_2.2.5 - 0x0000000000403140 printf@@GLIBC_2.2.5 - 0x0000000000403150 _gfortran_transfer_character_write@@GFORTRAN_1.4 - 0x0000000000403160 _Unwind_GetRegionStart@@GCC_3.0 - 0x0000000000403170 memset@@GLIBC_2.2.5 - 0x0000000000403180 ftell@@GLIBC_2.2.5 - 0x0000000000403190 snprintf@@GLIBC_2.2.5 - 0x00000000004031a0 _gfortran_st_open@@GFORTRAN_1.0 - 0x00000000004031b0 posix_memalign@@GLIBC_2.2.5 - 0x00000000004031c0 _gfortran_st_write_done@@GFORTRAN_1.0 - 0x00000000004031d0 close@@GLIBC_2.2.5 - 0x00000000004031e0 abort@@GLIBC_2.2.5 - 0x00000000004031f0 ttyname@@GLIBC_2.2.5 - 0x0000000000403200 memchr@@GLIBC_2.2.5 - 0x0000000000403210 strncat@@GLIBC_2.2.5 - 0x0000000000403220 getrusage@@GLIBC_2.2.5 - 0x0000000000403230 isatty@@GLIBC_2.2.5 - 0x0000000000403240 puts@@GLIBC_2.2.5 - 0x0000000000403250 uname@@GLIBC_2.2.5 - 0x0000000000403260 fseek@@GLIBC_2.2.5 - 0x0000000000403270 exit@@GLIBC_2.2.5 - 0x0000000000403280 gettimeofday@@GLIBC_2.2.5 - 0x0000000000403290 _gfortran_st_inquire@@GFORTRAN_1.0 - 0x00000000004032a0 read@@GLIBC_2.2.5 - 0x00000000004032b0 malloc@@GLIBC_2.2.5 - 0x00000000004032c0 fopen@@GLIBC_2.2.5 - 0x00000000004032d0 __libc_start_main@@GLIBC_2.2.5 - 0x00000000004032e0 system@@GLIBC_2.2.5 - 0x00000000004032f0 unlink@@GLIBC_2.2.5 - 0x0000000000403300 siglongjmp@@GLIBC_2.2.5 - 0x0000000000403310 catgets@@GLIBC_2.2.5 - 0x0000000000403320 sysconf@@GLIBC_2.2.5 - 0x0000000000403330 getpid@@GLIBC_2.2.5 - 0x0000000000403340 catclose@@GLIBC_2.2.5 - 0x0000000000403350 fgets@@GLIBC_2.2.5 - 0x0000000000403360 __fxstat64@@GLIBC_2.2.5 - 0x0000000000403370 freopen64@@GLIBC_2.2.5 - 0x0000000000403380 free@@GLIBC_2.2.5 - 0x0000000000403390 strlen@@GLIBC_2.2.5 - 0x00000000004033a0 _gfortran_st_read_done@@GFORTRAN_1.0 - 0x00000000004033b0 vsprintf@@GLIBC_2.2.5 - 0x00000000004033c0 opendir@@GLIBC_2.2.5 - 0x00000000004033d0 __xpg_basename@@GLIBC_2.2.5 - 0x00000000004033e0 mkstemp64@@GLIBC_2.2.5 - 0x00000000004033f0 __ctype_b_loc@@GLIBC_2.3 - 0x0000000000403400 _gfortran_concat_string@@GFORTRAN_1.0 - 0x0000000000403410 sprintf@@GLIBC_2.2.5 - 0x0000000000403420 strrchr@@GLIBC_2.2.5 - 0x0000000000403430 _Unwind_GetIP@@GCC_3.0 - 0x0000000000403440 atol@@GLIBC_2.2.5 - 0x0000000000403450 _Unwind_Backtrace@@GCC_3.3 - 0x0000000000403460 sscanf@@GLIBC_2.2.5 - 0x0000000000403470 _gfortran_transfer_integer@@GFORTRAN_1.0 - 0x0000000000403480 _gfortran_st_close@@GFORTRAN_1.0 - 0x0000000000403490 _gfortran_st_backspace@@GFORTRAN_1.0 - 0x00000000004034a0 kill@@GLIBC_2.2.5 - 0x00000000004034b0 strerror@@GLIBC_2.2.5 - 0x00000000004034c0 open64@@GLIBC_2.2.5 - 0x00000000004034d0 strstr@@GLIBC_2.2.5 - 0x00000000004034e0 sigprocmask@@GLIBC_2.2.5 - 0x00000000004034f0 _gfortran_transfer_array_write@@GFORTRAN_1.4 - 0x0000000000403500 sigaction@@GLIBC_2.2.5 - 0x0000000000403510 strcat@@GLIBC_2.2.5 - 0x0000000000403520 fputs@@GLIBC_2.2.5 - 0x0000000000403530 _Unwind_ForcedUnwind@@GCC_3.0 - 0x0000000000403540 ftruncate64@@GLIBC_2.2.5 - 0x0000000000403550 readlink@@GLIBC_2.2.5 - 0x0000000000403560 _gfortran_transfer_character@@GFORTRAN_1.0 - 0x0000000000403570 memcpy@@GLIBC_2.2.5 - 0x0000000000403580 raise@@GLIBC_2.2.5 - 0x0000000000403590 signal@@GLIBC_2.2.5 - 0x00000000004035a0 _gfortran_getenv@@GFORTRAN_1.0 - 0x00000000004035b0 memmove@@GLIBC_2.2.5 - 0x00000000004035c0 strchr@@GLIBC_2.2.5 - 0x00000000004035d0 vsnprintf@@GLIBC_2.2.5 - 0x00000000004035e0 fread@@GLIBC_2.2.5 - 0x00000000004035f0 setenv@@GLIBC_2.2.5 - 0x0000000000403600 catopen@@GLIBC_2.2.5 - 0x0000000000403610 getenv@@GLIBC_2.2.5 - 0x0000000000403620 _gfortran_transfer_integer_write@@GFORTRAN_1.4 - 0x0000000000403630 _gfortran_st_write@@GFORTRAN_1.0 - 0x0000000000403640 __errno_location@@GLIBC_2.2.5 - 0x0000000000403650 strcmp@@GLIBC_2.2.5 - 0x0000000000403660 getcwd@@GLIBC_2.2.5 - 0x0000000000403670 strcpy@@GLIBC_2.2.5 - 0x0000000000403680 nanosleep@@GLIBC_2.2.5 - 0x0000000000403690 _gfortran_string_index@@GFORTRAN_1.0 - 0x00000000004036a0 dladdr@@GLIBC_2.2.5 - 0x00000000004036b0 __ctype_tolower_loc@@GLIBC_2.3 - 0x00000000004036c0 memcmp@@GLIBC_2.2.5 - 0x00000000004036d0 _gfortran_st_rewind@@GFORTRAN_1.0 - 0x00000000004036e0 _gfortran_st_read@@GFORTRAN_1.0 - 0x00000000004036f0 feof@@GLIBC_2.2.5 - 0x0000000000403700 fclose@@GLIBC_2.2.5 - 0x0000000000403710 strncpy@@GLIBC_2.2.5 - 0x0000000000403720 __xstat64@@GLIBC_2.2.5 - 0x0000000000403730 lseek64@@GLIBC_2.2.5 - 0x0000000000403740 dlsym@@GLIBC_2.2.5 - 0x0000000000403750 closedir@@GLIBC_2.2.5 - 0x0000000000403760 access@@GLIBC_2.2.5 - 0x0000000000403770 sigemptyset@@GLIBC_2.2.5 - 0x0000000000403780 _gfortran_transfer_real@@GFORTRAN_1.0 - 0x0000000000403790 fopen64@@GLIBC_2.2.5 - 0x00000000004037a0 _gfortran_compare_string@@GFORTRAN_1.0 - 0x00000000004037b0 realloc@@GLIBC_2.2.5 - 0x00000000004037c0 perror@@GLIBC_2.2.5 - 0x00000000004037d0 __sigsetjmp@@GLIBC_2.2.5 - 0x00000000004037e0 fprintf@@GLIBC_2.2.5 - 0x00000000004037f0 localtime@@GLIBC_2.2.5 - 0x0000000000403800 write@@GLIBC_2.2.5 - 0x0000000000403810 _gfortran_pow_i4_i4@@GFORTRAN_1.0 - 0x0000000000403820 fcntl@@GLIBC_2.2.5 - *(.iplt) - .iplt 0x0000000000000000 0x0 /usr/lib/../lib64/crt1.o - -.text 0x0000000000403830 0xb2738 - *(.text.unlikely .text.*_unlikely) - .text.unlikely - 0x0000000000403830 0x0 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtbegin.o - .text.unlikely - 0x0000000000403830 0x0 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2//libgcc.a(_powidf2.o) - .text.unlikely - 0x0000000000403830 0x0 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtend.o - *(.text.exit .text.exit.*) - *(.text.startup .text.startup.*) - *(.text.hot .text.hot.*) - *(.text .stub .text.* .gnu.linkonce.t.*) - .text 0x0000000000403830 0x2c /usr/lib/../lib64/crt1.o - 0x0000000000403830 _start - .text 0x000000000040385c 0x17 /usr/lib/../lib64/crti.o - *fill* 0x0000000000403873 0xd - .text 0x0000000000403880 0x116 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtbegin.o - *fill* 0x0000000000403996 0xa - .text 0x00000000004039a0 0x40 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/for_main.o - 0x00000000004039a0 main - .text 0x00000000004039e0 0x1920 rdbfmsua.o - 0x00000000004039e0 MAIN__ - .text 0x0000000000405300 0x82 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flclos.o) - 0x0000000000405300 fl_clos_ - *fill* 0x0000000000405382 0x2 - .text 0x0000000000405384 0x4d /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flflun.o) - 0x0000000000405384 fl_flun_ - *fill* 0x00000000004053d1 0x3 - .text 0x00000000004053d4 0x13e /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltbop.o) - 0x00000000004053d4 fl_tbop_ - *fill* 0x0000000000405512 0x2 - .text 0x0000000000405514 0x155 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltdat.o) - 0x0000000000405514 fl_tdat_ - *fill* 0x0000000000405669 0x3 - .text 0x000000000040566c 0xd4a /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltinq.o) - 0x000000000040566c fl_tinq_ - *fill* 0x00000000004063b6 0x2 - .text 0x00000000004063b8 0x332 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stldsp.o) - 0x00000000004063b8 st_ldsp_ - *fill* 0x00000000004066ea 0x2 - .text 0x00000000004066ec 0x9b /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stlstr.o) - 0x00000000004066ec st_lstr_ - *fill* 0x0000000000406787 0x1 - .text 0x0000000000406788 0x28e /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(strmbl.o) - 0x0000000000406788 st_rmbl_ - *fill* 0x0000000000406a16 0x2 - .text 0x0000000000406a18 0x576 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(strmst.o) - 0x0000000000406a18 st_rmst_ - *fill* 0x0000000000406f8e 0x2 - .text 0x0000000000406f90 0x560 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(tbrstn.o) - 0x0000000000406f90 tb_rstn_ - .text 0x00000000004074f0 0x6a /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flbksp.o) - 0x00000000004074f0 fl_bksp_ - *fill* 0x000000000040755a 0x2 - .text 0x000000000040755c 0x5c5 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flinqr.o) - 0x000000000040755c fl_inqr_ - *fill* 0x0000000000407b21 0x3 - .text 0x0000000000407b24 0x31c /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flpath.o) - 0x0000000000407b24 fl_path_ - .text 0x0000000000407e40 0x230 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flsopn.o) - 0x0000000000407e40 fl_sopn_ - .text 0x0000000000408070 0x78f /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(ssenvr.o) - 0x0000000000408070 ss_envr_ - *fill* 0x00000000004087ff 0x1 - .text 0x0000000000408800 0x13b /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(ssgsym.o) - 0x0000000000408800 ss_gsym_ - *fill* 0x000000000040893b 0x1 - .text 0x000000000040893c 0x146 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stlcuc.o) - 0x000000000040893c st_lcuc_ - *fill* 0x0000000000408a82 0x2 - .text 0x0000000000408a84 0x146 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stuclc.o) - 0x0000000000408a84 st_uclc_ - *fill* 0x0000000000408bca 0x2 - .text 0x0000000000408bcc 0xb03 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(tbastn.o) - 0x0000000000408bcc tb_astn_ - *fill* 0x00000000004096cf 0x1 - .text 0x00000000004096d0 0x89 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flglun.o) - 0x00000000004096d0 fl_glun_ - *fill* 0x0000000000409759 0x3 - .text 0x000000000040975c 0x181 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libbridge.a(dcbsrh.o) - 0x000000000040975c dc_bsrh_ - *fill* 0x00000000004098dd 0x3 - .text 0x00000000004098e0 0x45 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ireadns.o) - 0x00000000004098e0 ireadns_ - *fill* 0x0000000000409925 0x3 - .text 0x0000000000409928 0xe23 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) - 0x0000000000409928 openbf_ - *fill* 0x000000000040a74b 0x1 - .text 0x000000000040a74c 0x10c /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(posapn.o) - 0x000000000040a74c posapn_ - .text 0x000000000040a858 0x135 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(posapx.o) - 0x000000000040a858 posapx_ - *fill* 0x000000000040a98d 0x3 - .text 0x000000000040a990 0x1ff /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdmsgw.o) - 0x000000000040a990 rdmsgw_ - *fill* 0x000000000040ab8f 0x1 - .text 0x000000000040ab90 0x3e9 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readdx.o) - 0x000000000040ab90 readdx_ - *fill* 0x000000000040af79 0x3 - .text 0x000000000040af7c 0x12a /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readns.o) - 0x000000000040af7c readns_ - *fill* 0x000000000040b0a6 0x2 - .text 0x000000000040b0a8 0x390 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readsb.o) - 0x000000000040b0a8 readsb_ - .text 0x000000000040b438 0x223 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(status.o) - 0x000000000040b438 status_ - *fill* 0x000000000040b65b 0x1 - .text 0x000000000040b65c 0xfd2 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbint.o) - 0x000000000040b65c ufbint_ - *fill* 0x000000000040c62e 0x2 - .text 0x000000000040c630 0xab2 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbrw.o) - 0x000000000040c630 ufbrw_ - *fill* 0x000000000040d0e2 0x2 - .text 0x000000000040d0e4 0x1b4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upb.o) - 0x000000000040d0e4 upb_ - .text 0x000000000040d298 0x1276 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wrdlen.o) - 0x000000000040d298 wrdlen_ - *fill* 0x000000000040e50e 0x2 - .text 0x000000000040e510 0xa79 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(writdx.o) - 0x000000000040e510 writdx_ - *fill* 0x000000000040ef89 0x3 - .text 0x000000000040ef8c 0x4ff /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wtstat.o) - 0x000000000040ef8c wtstat_ - *fill* 0x000000000040f48b 0x1 - .text 0x000000000040f48c 0x484 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(adn30.o) - 0x000000000040f48c adn30_ - .text 0x000000000040f910 0x638 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) - 0x000000000040f910 bfrini_ - .text 0x000000000040ff48 0x26d /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort2.o) - 0x000000000040ff48 bort2_ - *fill* 0x00000000004101b5 0x3 - .text 0x00000000004101b8 0xe /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort_exit.o) - 0x00000000004101b8 bort_exit_ - *fill* 0x00000000004101c6 0x2 - .text 0x00000000004101c8 0x1e8 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort.o) - 0x00000000004101c8 bort_ - .text 0x00000000004103b0 0x1f6 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(conwin.o) - 0x00000000004103b0 conwin_ - *fill* 0x00000000004105a6 0x2 - .text 0x00000000004105a8 0x48b /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cpbfdx.o) - 0x00000000004105a8 cpbfdx_ - *fill* 0x0000000000410a33 0x1 - .text 0x0000000000410a34 0x159 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(drstpl.o) - 0x0000000000410a34 drstpl_ - *fill* 0x0000000000410b8d 0x3 - .text 0x0000000000410b90 0xa44 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(dxinit.o) - 0x0000000000410b90 dxinit_ - .text 0x00000000004115d4 0x83e /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(dxmini.o) - 0x00000000004115d4 dxmini_ - *fill* 0x0000000000411e12 0x2 - .text 0x0000000000411e14 0x318 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(getwin.o) - 0x0000000000411e14 getwin_ - .text 0x000000000041212c 0x67 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ibfms.o) - 0x000000000041212c ibfms_ - *fill* 0x0000000000412193 0x1 - .text 0x0000000000412194 0xec /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ichkstr.o) - 0x0000000000412194 ichkstr_ - .text 0x0000000000412280 0x107 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ifxy.o) - 0x0000000000412280 ifxy_ - *fill* 0x0000000000412387 0x1 - .text 0x0000000000412388 0x509 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(invcon.o) - 0x0000000000412388 invcon_ - *fill* 0x0000000000412891 0x3 - .text 0x0000000000412894 0x279 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(invwin.o) - 0x0000000000412894 invwin_ - *fill* 0x0000000000412b0d 0x3 - .text 0x0000000000412b10 0x1cf /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ipkm.o) - 0x0000000000412b10 ipkm_ - *fill* 0x0000000000412cdf 0x1 - .text 0x0000000000412ce0 0x6e /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(irev.o) - 0x0000000000412ce0 irev_ - *fill* 0x0000000000412d4e 0x2 - .text 0x0000000000412d50 0x196 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupm.o) - 0x0000000000412d50 iupm_ - *fill* 0x0000000000412ee6 0x2 - .text 0x0000000000412ee8 0x40 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lmsg.o) - 0x0000000000412ee8 lmsg_ - .text 0x0000000000412f28 0x362 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstrpc.o) - 0x0000000000412f28 lstrpc_ - *fill* 0x000000000041328a 0x2 - .text 0x000000000041328c 0x362 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstrps.o) - 0x000000000041328c lstrps_ - *fill* 0x00000000004135ee 0x2 - .text 0x00000000004135f0 0x995 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(msgwrt.o) - 0x00000000004135f0 msgwrt_ - *fill* 0x0000000000413f85 0x3 - .text 0x0000000000413f88 0x226 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(newwin.o) - 0x0000000000413f88 newwin_ - *fill* 0x00000000004141ae 0x2 - .text 0x00000000004141b0 0x63 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nmwrd.o) - 0x00000000004141b0 nmwrd_ - *fill* 0x0000000000414213 0x1 - .text 0x0000000000414214 0x2ae /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nxtwin.o) - 0x0000000000414214 nxtwin_ - *fill* 0x00000000004144c2 0x2 - .text 0x00000000004144c4 0x331 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ovrbs1.o) - 0x00000000004144c4 ovrbs1_ - *fill* 0x00000000004147f5 0x3 - .text 0x00000000004147f8 0xd6 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(padmsg.o) - 0x00000000004147f8 padmsg_ - *fill* 0x00000000004148ce 0x2 - .text 0x00000000004148d0 0x349 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkb.o) - 0x00000000004148d0 pkb_ - *fill* 0x0000000000414c19 0x3 - .text 0x0000000000414c1c 0x44f /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkbs1.o) - 0x0000000000414c1c pkbs1_ - *fill* 0x000000000041506b 0x1 - .text 0x000000000041506c 0x3d9 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkc.o) - 0x000000000041506c pkc_ - *fill* 0x0000000000415445 0x3 - .text 0x0000000000415448 0x4d3 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pktdd.o) - 0x0000000000415448 pktdd_ - *fill* 0x000000000041591b 0x1 - .text 0x000000000041591c 0x2a8 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkvs01.o) - 0x000000000041591c pkvs01_ - .text 0x0000000000415bc4 0x39d /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkvs1.o) - 0x0000000000415bc4 pkvs1_ - *fill* 0x0000000000415f61 0x3 - .text 0x0000000000415f64 0x14fe /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdbfdx.o) - 0x0000000000415f64 rdbfdx_ - *fill* 0x0000000000417462 0x2 - .text 0x0000000000417464 0x519 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdcmps.o) - 0x0000000000417464 rdcmps_ - *fill* 0x000000000041797d 0x3 - .text 0x0000000000417980 0x40d /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdtree.o) - 0x0000000000417980 rdtree_ - *fill* 0x0000000000417d8d 0x3 - .text 0x0000000000417d90 0x1989 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdusdx.o) - 0x0000000000417d90 rdusdx_ - *fill* 0x0000000000419719 0x3 - .text 0x000000000041971c 0x27f /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readmg.o) - 0x000000000041971c readmg_ - *fill* 0x000000000041999b 0x1 - .text 0x000000000041999c 0x1da9 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(seqsdx.o) - 0x000000000041999c seqsdx_ - *fill* 0x000000000041b745 0x3 - .text 0x000000000041b748 0x984 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(stndrd.o) - 0x000000000041b748 stndrd_ - .text 0x000000000041c0cc 0x7af /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(string.o) - 0x000000000041c0cc string_ - *fill* 0x000000000041c87b 0x1 - .text 0x000000000041c87c 0x36b /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strnum.o) - 0x000000000041c87c strnum_ - *fill* 0x000000000041cbe7 0x1 - .text 0x000000000041cbe8 0x39b /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strsuc.o) - 0x000000000041cbe8 strsuc_ - *fill* 0x000000000041cf83 0x1 - .text 0x000000000041cf84 0x2ef /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(trybump.o) - 0x000000000041cf84 trybump_ - *fill* 0x000000000041d273 0x1 - .text 0x000000000041d274 0x1a0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upbb.o) - 0x000000000041d274 upbb_ - .text 0x000000000041d414 0x11c /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upc.o) - 0x000000000041d414 upc_ - .text 0x000000000041d530 0x1abd /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(usrtpl.o) - 0x000000000041d530 usrtpl_ - *fill* 0x000000000041efed 0x3 - .text 0x000000000041eff0 0xa6 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(capit.o) - 0x000000000041eff0 capit_ - *fill* 0x000000000041f096 0x2 - .text 0x000000000041f098 0x110 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chrtrna.o) - 0x000000000041f098 chrtrna_ - .text 0x000000000041f1a8 0x99 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chrtrn.o) - 0x000000000041f1a8 chrtrn_ - *fill* 0x000000000041f241 0x3 - .text 0x000000000041f244 0xfe6 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cktaba.o) - 0x000000000041f244 cktaba_ - *fill* 0x000000000042022a 0x2 - .text 0x000000000042022c 0x69d /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cnved4.o) - 0x000000000042022c cnved4_ - *fill* 0x00000000004208c9 0x3 - .text 0x00000000004208cc 0x6f /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(digit.o) - 0x00000000004208cc digit_ - *fill* 0x000000000042093b 0x1 - .text 0x000000000042093c 0xadb /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(elemdx.o) - 0x000000000042093c elemdx_ - *fill* 0x0000000000421417 0x1 - .text 0x0000000000421418 0x1e4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(getlens.o) - 0x0000000000421418 getlens_ - .text 0x00000000004215fc 0x57a /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(gets1loc.o) - 0x00000000004215fc gets1loc_ - *fill* 0x0000000000421b76 0x2 - .text 0x0000000000421b78 0x6b /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(i4dy.o) - 0x0000000000421b78 i4dy_ - *fill* 0x0000000000421be3 0x1 - .text 0x0000000000421be4 0x3f3 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(idn30.o) - 0x0000000000421be4 idn30_ - *fill* 0x0000000000421fd7 0x1 - .text 0x0000000000421fd8 0x110 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(igetdate.o) - 0x0000000000421fd8 igetdate_ - .text 0x00000000004220e8 0x14a /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(istdesc.o) - 0x00000000004220e8 istdesc_ - *fill* 0x0000000000422232 0x2 - .text 0x0000000000422234 0x4b /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupb.o) - 0x0000000000422234 iupb_ - *fill* 0x000000000042227f 0x1 - .text 0x0000000000422280 0x26e /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupbs01.o) - 0x0000000000422280 iupbs01_ - *fill* 0x00000000004224ee 0x2 - .text 0x00000000004224f0 0xff /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(jstchr.o) - 0x00000000004224f0 jstchr_ - *fill* 0x00000000004225ef 0x1 - .text 0x00000000004225f0 0x51d /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(jstnum.o) - 0x00000000004225f0 jstnum_ - *fill* 0x0000000000422b0d 0x3 - .text 0x0000000000422b10 0x38b /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstjpb.o) - 0x0000000000422b10 lstjpb_ - *fill* 0x0000000000422e9b 0x1 - .text 0x0000000000422e9c 0x14fe /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(makestab.o) - 0x0000000000422e9c makestab_ - *fill* 0x000000000042439a 0x2 - .text 0x000000000042439c 0x20c /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(mvb.o) - 0x000000000042439c mvb_ - .text 0x00000000004245a8 0xf2 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemock.o) - 0x00000000004245a8 nemock_ - *fill* 0x000000000042469a 0x2 - .text 0x000000000042469c 0x496 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtab.o) - 0x000000000042469c nemtab_ - *fill* 0x0000000000424b32 0x2 - .text 0x0000000000424b34 0x396 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbax.o) - 0x0000000000424b34 nemtbax_ - *fill* 0x0000000000424eca 0x2 - .text 0x0000000000424ecc 0x28a /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nenuaa.o) - 0x0000000000424ecc nenuaa_ - *fill* 0x0000000000425156 0x2 - .text 0x0000000000425158 0x4d2 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nenubd.o) - 0x0000000000425158 nenubd_ - *fill* 0x000000000042562a 0x2 - .text 0x000000000042562c 0x17b /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numbck.o) - 0x000000000042562c numbck_ - *fill* 0x00000000004257a7 0x1 - .text 0x00000000004257a8 0x637 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numtab.o) - 0x00000000004257a8 numtab_ - *fill* 0x0000000000425ddf 0x1 - .text 0x0000000000425de0 0x217 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbt.o) - 0x0000000000425de0 openbt_ - *fill* 0x0000000000425ff7 0x1 - .text 0x0000000000425ff8 0x739 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parstr.o) - 0x0000000000425ff8 parstr_ - *fill* 0x0000000000426731 0x3 - .text 0x0000000000426734 0x1044 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parusr.o) - 0x0000000000426734 parusr_ - .text 0x0000000000427778 0x8d9 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parutg.o) - 0x0000000000427778 parutg_ - *fill* 0x0000000000428051 0x3 - .text 0x0000000000428054 0x8cf /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rcstpl.o) - 0x0000000000428054 rcstpl_ - *fill* 0x0000000000428923 0x1 - .text 0x0000000000428924 0x1ed /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdmsgb.o) - 0x0000000000428924 rdmsgb_ - *fill* 0x0000000000428b11 0x3 - .text 0x0000000000428b14 0x4e2 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(restd.o) - 0x0000000000428b14 restd_ - *fill* 0x0000000000428ff6 0x2 - .text 0x0000000000428ff8 0x7c /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rsvfvm.o) - 0x0000000000428ff8 rsvfvm_ - .text 0x0000000000429074 0x25 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strcln.o) - 0x0000000000429074 strcln_ - *fill* 0x0000000000429099 0x3 - .text 0x000000000042909c 0xe9b /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabsub.o) - 0x000000000042909c tabsub_ - *fill* 0x0000000000429f37 0x1 - .text 0x0000000000429f38 0x227 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(uptdd.o) - 0x0000000000429f38 uptdd_ - *fill* 0x000000000042a15f 0x1 - .text 0x000000000042a160 0xa8 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wrdesc.o) - 0x000000000042a160 wrdesc_ - .text 0x000000000042a208 0x9f /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cadn30.o) - 0x000000000042a208 cadn30_ - *fill* 0x000000000042a2a7 0x1 - .text 0x000000000042a2a8 0x368 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chekstab.o) - 0x000000000042a2a8 chekstab_ - .text 0x000000000042a610 0x2dd /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(inctab.o) - 0x000000000042a610 inctab_ - *fill* 0x000000000042a8ed 0x3 - .text 0x000000000042a8f0 0x86c /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbb.o) - 0x000000000042a8f0 nemtbb_ - .text 0x000000000042b15c 0xaf0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbd.o) - 0x000000000042b15c nemtbd_ - .text 0x000000000042bc4c 0x314 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numtbd.o) - 0x000000000042bc4c numtbd_ - .text 0x000000000042bf60 0x886 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabent.o) - 0x000000000042bf60 tabent_ - *fill* 0x000000000042c7e6 0x2 - .text 0x000000000042c7e8 0x609 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(valx.o) - 0x000000000042c7e8 valx_ - *fill* 0x000000000042cdf1 0x3 - .text 0x000000000042cdf4 0xaf /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rjust.o) - 0x000000000042cdf4 rjust_ - *fill* 0x000000000042cea3 0xd - .text 0x000000000042ceb0 0x2a50 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_init.o) - 0x000000000042ceb0 for__process_start_time - 0x000000000042ced0 for__signal_handler - 0x000000000042de20 for_enable_underflow - 0x000000000042de40 for_get_fpe_ - 0x000000000042e020 for_set_fpe_ - 0x000000000042e3a0 for_fpe_service - 0x000000000042e750 for_get_fpe_counts_ - 0x000000000042e7a0 for_rtl_finish_ - 0x000000000042e7c0 dump_dfil_exception_info - 0x000000000042f6a0 for_rtl_init_ - .text 0x000000000042f900 0x1120 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_io_util.o) - 0x000000000042f900 for__adjust_buffer - 0x000000000042fb50 for__lower_bound_index - 0x000000000042fba0 for__cvt_foreign_read - 0x00000000004300f0 for__cvt_foreign_write - 0x00000000004308f0 for__cvt_foreign_check - 0x0000000000430970 for_check_env_name - .text 0x0000000000430a20 0x5ca0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open.o) - 0x0000000000430a20 SetEndian - 0x0000000000430e20 CheckStreamRecortType - 0x0000000000431300 CheckEndian - 0x0000000000431760 for_open - 0x0000000000432a80 for__update_reopen_keywords - 0x0000000000433a50 for__set_foreign_bits - 0x0000000000434d70 for__open_key - 0x0000000000435020 for__open_args - 0x00000000004357e0 for__find_iomsg - 0x0000000000435880 for__set_terminator_option - 0x0000000000435d80 for__set_conversion_option - 0x0000000000436190 for__is_special_device - 0x0000000000436340 for__open_default - .text 0x00000000004366c0 0x240 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_preconnected_units_init.o) - 0x00000000004366c0 for__preconnected_units_create - .text 0x0000000000436900 0x280 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_reentrancy.o) - 0x0000000000436900 for_set_reentrancy - 0x0000000000436920 for__reentrancy_cleanup - 0x00000000004369b0 for__disable_asynch_deliv_private - 0x00000000004369d0 for__enable_asynch_deliv_private - 0x00000000004369f0 for__once_private - 0x0000000000436a40 for__reentrancy_init - .text 0x0000000000436b80 0x870 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_secnds.o) - 0x0000000000436b80 for_since_epoch - 0x0000000000436c20 for_since_epoch_t - 0x0000000000436cc0 for_since_epoch_x - 0x0000000000436dc0 for_secnds - 0x0000000000436ed0 for_secnds_t - 0x0000000000436fe0 for_secnds_x - 0x0000000000437240 for_cpusec - 0x00000000004372d0 for_cpusec_t - 0x0000000000437350 for_cpusec_x - .text 0x00000000004373f0 0x2b50 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_stop.o) - 0x00000000004373f0 for_abort - 0x0000000000437eb0 for_stop_core_impl - 0x0000000000438a60 for_stop_core - 0x0000000000439590 for_stop - .text 0x0000000000439f40 0x1070 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_vm.o) - 0x0000000000439f40 for__set_signal_ops_during_vm - 0x0000000000439f80 for__get_vm - 0x000000000043a0c0 for__realloc_vm - 0x000000000043a1b0 for__free_vm - 0x000000000043a230 for_allocate - 0x000000000043a5a0 for_alloc_allocatable - 0x000000000043a920 for_deallocate - 0x000000000043aab0 for_dealloc_allocatable - 0x000000000043ac60 for_check_mult_overflow - 0x000000000043ad80 for_check_mult_overflow64 - 0x000000000043af00 for__spec_align_alloc - 0x000000000043afa0 for__spec_align_free - .text 0x000000000043afb0 0x39f0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wint_fmt.o) - 0x000000000043afb0 for_write_int_fmt - 0x000000000043c120 for_write_int_fmt_xmit - .text 0x000000000043e9a0 0x4b60 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq_fmt.o) - 0x000000000043e9a0 for_write_seq_fmt - 0x0000000000440750 for_write_seq_fmt_xmit - 0x0000000000443330 for__write_args - .text 0x0000000000443500 0x6b90 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq_lis.o) - 0x0000000000443500 ensure_one_leading_blank_before_data - 0x0000000000443910 for_write_seq_lis - 0x00000000004454f0 for_write_seq_lis_xmit - .text 0x000000000044a090 0x4f30 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio.o) - 0x000000000044a090 for__aio_acquire_lun_fname - 0x000000000044a360 for__aio_release - 0x000000000044a430 for__aio_acquire_lun - 0x000000000044aca0 for__aio_release_lun - 0x000000000044b2c0 for__aio_destroy - 0x000000000044b760 for_asynchronous - 0x000000000044c7a0 for_waitid - 0x000000000044d640 for_wait - 0x000000000044e390 for__aio_check_unit - 0x000000000044e5d0 for__aio_error_handling - 0x000000000044ee00 for__aio_init - .text 0x000000000044efc0 0x5350 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open_proc.o) - 0x000000000044efc0 fname_from_piped_fd - 0x000000000044f200 for__reopen_file - 0x000000000044f2f0 for__compute_filename - 0x0000000000451a80 for__open_proc - 0x0000000000454300 for__decl_exit_hand - .text 0x0000000000454310 0xb0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio_wrap.o) - 0x0000000000454310 for__aio_pthread_self - 0x0000000000454320 for__aio_pthread_create - 0x0000000000454340 for__aio_pthread_cancel - 0x0000000000454350 for__aio_pthread_detach - 0x0000000000454360 for__aio_pthread_mutex_lock - 0x0000000000454370 for__aio_pthread_mutex_unlock - 0x0000000000454380 for__aio_pthread_cond_wait - 0x0000000000454390 for__aio_pthread_cond_signal - 0x00000000004543a0 for__aio_pthread_mutex_init - 0x00000000004543b0 for__aio_pthread_exit - .text 0x00000000004543c0 0xad0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_text_to_int.o) - 0x00000000004543c0 cvt_text_to_integer - 0x00000000004546e0 cvt_text_to_unsigned - 0x0000000000454910 cvt_text_to_integer64 - 0x0000000000454c40 cvt_text_to_unsigned64 - .text 0x0000000000454e90 0xd20 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_f.o) - 0x0000000000454e90 cvt_vax_f_to_ieee_single_ - 0x00000000004552f0 CVT_VAX_F_TO_IEEE_SINGLE - 0x0000000000455750 cvt_vax_f_to_ieee_single - .text 0x0000000000455bb0 0xf80 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_d.o) - 0x0000000000455bb0 cvt_vax_d_to_ieee_double_ - 0x00000000004560e0 CVT_VAX_D_TO_IEEE_DOUBLE - 0x0000000000456610 cvt_vax_d_to_ieee_double - .text 0x0000000000456b30 0xf20 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_g.o) - 0x0000000000456b30 cvt_vax_g_to_ieee_double_ - 0x0000000000457030 CVT_VAX_G_TO_IEEE_DOUBLE - 0x0000000000457530 cvt_vax_g_to_ieee_double - .text 0x0000000000457a50 0x1f40 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cray.o) - 0x0000000000457a50 cvt_cray_to_ieee_single_ - 0x0000000000457f20 CVT_CRAY_TO_IEEE_SINGLE - 0x00000000004583f0 cvt_cray_to_ieee_single - 0x00000000004588e0 cvt_cray_to_ieee_double_ - 0x0000000000458e60 CVT_CRAY_TO_IEEE_DOUBLE - 0x00000000004593e0 cvt_cray_to_ieee_double - .text 0x0000000000459990 0xd80 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ibm_short.o) - 0x0000000000459990 cvt_ibm_short_to_ieee_single_ - 0x0000000000459e10 CVT_IBM_SHORT_TO_IEEE_SINGLE - 0x000000000045a290 cvt_ibm_short_to_ieee_single - .text 0x000000000045a710 0x1070 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ibm_long.o) - 0x000000000045a710 cvt_ibm_long_to_ieee_double_ - 0x000000000045ac70 CVT_IBM_LONG_TO_IEEE_DOUBLE - 0x000000000045b1d0 cvt_ibm_long_to_ieee_double - .text 0x000000000045b780 0x4080 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ieee_double.o) - 0x000000000045b780 cvt_ieee_double_to_cray_ - 0x000000000045bc00 CVT_IEEE_DOUBLE_TO_CRAY - 0x000000000045c080 cvt_ieee_double_to_cray - 0x000000000045c500 cvt_ieee_double_to_ibm_long_ - 0x000000000045c9c0 CVT_IEEE_DOUBLE_TO_IBM_LONG - 0x000000000045ce80 cvt_ieee_double_to_ibm_long - 0x000000000045d360 cvt_ieee_double_to_vax_d_ - 0x000000000045d730 CVT_IEEE_DOUBLE_TO_VAX_D - 0x000000000045db00 cvt_ieee_double_to_vax_d - 0x000000000045df00 cvt_ieee_double_to_vax_g_ - 0x000000000045e2d0 CVT_IEEE_DOUBLE_TO_VAX_G - 0x000000000045e6a0 cvt_ieee_double_to_vax_g - 0x000000000045eaa0 cvt_ieee_double_to_vax_h_ - 0x000000000045ef10 CVT_IEEE_DOUBLE_TO_VAX_H - 0x000000000045f380 cvt_ieee_double_to_vax_h - .text 0x000000000045f800 0x1fe0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ieee_single.o) - 0x000000000045f800 cvt_ieee_single_to_cray_ - 0x000000000045fba0 CVT_IEEE_SINGLE_TO_CRAY - 0x000000000045ff40 cvt_ieee_single_to_cray - 0x0000000000460300 cvt_ieee_single_to_ibm_short_ - 0x00000000004606f0 CVT_IEEE_SINGLE_TO_IBM_SHORT - 0x0000000000460ae0 cvt_ieee_single_to_ibm_short - 0x0000000000460ef0 cvt_ieee_single_to_vax_f_ - 0x00000000004611f0 CVT_IEEE_SINGLE_TO_VAX_F - 0x00000000004614f0 cvt_ieee_single_to_vax_f - .text 0x00000000004617e0 0x750 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_close.o) - 0x00000000004617e0 for_close - 0x0000000000461ce0 for__close_args - 0x0000000000461e10 for__close_default - .text 0x0000000000461f30 0x6d0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_close_proc.o) - 0x0000000000461f30 for__close_proc - .text 0x0000000000462600 0x220 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_default_io_sizes_env_init.o) - 0x0000000000462600 for__default_io_sizes_env_init - .text 0x0000000000462820 0xbd0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_desc_item.o) - 0x0000000000462820 for__desc_ret_item - 0x0000000000462b30 for__key_desc_ret_item - 0x0000000000462e60 for__desc_test_item - 0x0000000000463080 for__desc_zero_length_item - .text 0x00000000004633f0 0x4a50 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_diags_intel.o) - 0x00000000004633f0 for__this_image_number_or_zero - 0x0000000000463440 for__io_return - 0x0000000000464040 for__issue_diagnostic - 0x00000000004649e0 for__get_msg - 0x0000000000464ce0 for_emit_diagnostic - 0x0000000000464e50 for__message_catalog_close - 0x00000000004655b0 for_errmsg - 0x0000000000465770 for__rtc_uninit_use - 0x0000000000465790 for__rtc_uninit_use_src - 0x00000000004657b0 TRACEBACKQQ - 0x00000000004659f0 tracebackqq_ - 0x0000000000465c30 for_perror_ - 0x0000000000466e20 for_gerror_ - 0x0000000000467bc0 for__establish_user_error_handler - 0x0000000000467c00 for__continue_traceback_ - 0x0000000000467d20 for__continue_traceback - .text 0x0000000000467e40 0x20 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_exit.o) - 0x0000000000467e40 for_exit - .text 0x0000000000467e60 0x2f0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_exit_handler.o) - 0x0000000000467e60 for__fpe_exit_handler - 0x0000000000467f40 for__exit_handler - .text 0x0000000000468150 0x3320 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_comp.o) - 0x0000000000468150 for__format_compiler - .text 0x000000000046b470 0x1810 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_val.o) - 0x000000000046b470 for__format_value - 0x000000000046c1c0 for__cvt_value - .text 0x000000000046cc80 0x2490 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_get.o) - 0x000000000046cc80 for__get_s - 0x000000000046e050 for__read_input - 0x000000000046e170 for__get_d - 0x000000000046e520 for__get_su_fields - 0x000000000046ef30 for__get_more_fields - .text 0x000000000046f110 0xe80 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_intrp_fmt.o) - 0x000000000046f110 for__interp_fmt - .text 0x000000000046ff90 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_ldir_wfs.o) - .text 0x000000000046ff90 0x2540 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_lub_mgt.o) - 0x000000000046ff90 for__acquire_lun - 0x0000000000470e40 for__release_lun - 0x0000000000471160 for__create_lub - 0x0000000000471300 for__deallocate_lub - 0x0000000000471e30 for__get_next_lub - 0x00000000004722a0 for__get_free_newunit - 0x0000000000472470 for__release_newunit - .text 0x00000000004724d0 0x4e0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_need_lf.o) - 0x00000000004724d0 for__add_to_lf_table - 0x0000000000472930 for__rm_from_lf_table - .text 0x00000000004729b0 0x1ec0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_put.o) - 0x00000000004729b0 for__put_su - 0x0000000000473030 for__write_output - 0x0000000000473410 for__put_sf - 0x00000000004744d0 for__put_d - 0x0000000000474760 for__flush_readahead - .text 0x0000000000474870 0x6200 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq.o) - 0x0000000000474870 for_write_seq - 0x0000000000475f70 for_write_seq_xmit - 0x000000000047a610 for__finish_ufseq_write - .text 0x000000000047aa70 0x1360 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(tbk_traceback.o) - 0x000000000047bb70 tbk_stack_trace - .text 0x000000000047bdd0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt__globals.o) - .text 0x000000000047bdd0 0x7d0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_int_to_text.o) - 0x000000000047bdd0 cvt_integer_to_text - 0x000000000047bfc0 cvt_unsigned_to_text - 0x000000000047c1a0 cvt_integer64_to_text - 0x000000000047c3b0 cvt_unsigned64_to_text - .text 0x000000000047c5a0 0x780 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_data_to_text.o) - 0x000000000047c5a0 cvt_data_to_text - 0x000000000047c960 cvt_data64_to_text - .text 0x000000000047cd20 0x8d0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_log_to_text.o) - 0x000000000047cd20 cvt_boolean_to_text - 0x000000000047d020 cvt_boolean_to_text_ex - 0x000000000047d320 cvt_boolean64_to_text - .text 0x000000000047d5f0 0x570 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_text_to_data.o) - 0x000000000047d5f0 cvt_text_to_data - 0x000000000047d8d0 cvt_text_to_data64 - .text 0x000000000047db60 0x220 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_text_to_log.o) - 0x000000000047db60 cvt_text_to_boolean - 0x000000000047dc70 cvt_text_to_boolean64 - .text 0x000000000047dd80 0x2820 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_t.o) - 0x000000000047dd80 cvt_ieee_t_to_text_ex - 0x000000000047f0f0 cvt_ieee_t_to_text - 0x0000000000480410 cvt_text_to_ieee_t_ex - .text 0x00000000004805a0 0x2760 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_s.o) - 0x00000000004805a0 cvt_ieee_s_to_text_ex - 0x00000000004818b0 cvt_ieee_s_to_text - 0x0000000000482b70 cvt_text_to_ieee_s_ex - .text 0x0000000000482d00 0x1610 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_x.o) - 0x0000000000482d00 cvt_ieee_x_to_text - 0x0000000000482d50 cvt_ieee_x_to_text_ex - 0x0000000000484180 cvt_text_to_ieee_x_ex - .text 0x0000000000484310 0x1660 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_s.o) - 0x0000000000484310 cvtas_a_to_s - .text 0x0000000000485970 0x2bb0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_t.o) - 0x0000000000485970 cvtas_a_to_t - .text 0x0000000000488520 0x53f0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_s_to_a.o) - 0x0000000000488520 cvtas_s_to_a - .text 0x000000000048d910 0x5530 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_t_to_a.o) - 0x000000000048d910 cvtas_t_to_a - .text 0x0000000000492e40 0xd0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_nan_s.o) - 0x0000000000492e40 cvtas__nan_s - .text 0x0000000000492f10 0xc0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_nan_t.o) - 0x0000000000492f10 cvtas__nan_t - .text 0x0000000000492fd0 0x5270 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_x.o) - 0x0000000000492fd0 cvtas_a_to_x - .text 0x0000000000498240 0x5750 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_x_to_a.o) - 0x0000000000498240 cvtas_x_to_a - .text 0x000000000049d990 0xf0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_nan_x.o) - 0x000000000049d990 cvtas__nan_x - .text 0x000000000049da80 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_globals.o) - .text 0x000000000049da80 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_pow_ten_53.o) - .text 0x000000000049da80 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_pow_ten_64.o) - .text 0x000000000049da80 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_pow_ten_128.o) - .text 0x000000000049da80 0x30 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(fetestexcept.o) - 0x000000000049da80 fetestexcept - .text 0x000000000049dab0 0x50 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_stub.o) - 0x000000000049dab0 lroundf - .text 0x000000000049db00 0x50 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_stub.o) - 0x000000000049db00 lround - .text 0x000000000049db50 0x170 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_ct.o) - 0x000000000049db50 lround.L - .text 0x000000000049dcc0 0x130 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_ct.o) - 0x000000000049dcc0 lroundf.L - .text 0x000000000049ddf0 0xe0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_gen.o) - 0x000000000049ddf0 lroundf.A - .text 0x000000000049ded0 0xf0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_gen.o) - 0x000000000049ded0 lround.A - .text 0x000000000049dfc0 0x7f0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(libm_error.o) - 0x000000000049e1d0 __libm_copy_value - 0x000000000049e320 __libm_error_support - 0x000000000049e720 __libm_setusermatherrl - 0x000000000049e750 __libm_setusermatherr - 0x000000000049e780 __libm_setusermatherrf - .text 0x000000000049e7b0 0x10 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(matherrf.o) - 0x000000000049e7b0 matherrf - .text 0x000000000049e7c0 0x10 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(matherrl.o) - 0x000000000049e7c0 matherrl - .text 0x000000000049e7d0 0x10 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(matherr.o) - 0x000000000049e7d0 matherr - .text 0x000000000049e7e0 0x1e0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ints2q.o) - 0x000000000049e7e0 __ktoq - 0x000000000049e870 __jtoq - 0x000000000049e920 __itoq - 0x000000000049e980 __utoq - .text 0x000000000049e9c0 0x560 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(qcomp.o) - 0x000000000049e9c0 __eqq - 0x000000000049ea40 __neq - 0x000000000049ead0 __leq - 0x000000000049ebb0 __ltq - 0x000000000049ec90 __geq - 0x000000000049ed70 __gtq - 0x000000000049ee50 __compareq - .text 0x000000000049ef20 0x1d0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fp2q.o) - 0x000000000049ef20 __dtoq - 0x000000000049eff0 __ltoq - 0x000000000049f060 __ftoq - .text 0x000000000049f0f0 0x7e0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(q2fp.o) - 0x000000000049f0f0 __qtod - 0x000000000049f3e0 __qtol - 0x000000000049f620 __qtof - .text 0x000000000049f8d0 0x650 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(tbk_display.o) - 0x000000000049f8d0 tbk_string_stack_signal - 0x000000000049f936 tbk_string_stack_signal_impl - .text 0x000000000049ff20 0x1640 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(tbk_backtrace.o) - 0x000000000049ff20 tbk_getPC - 0x000000000049ff30 tbk_getRetAddr - 0x000000000049ff40 tbk_getFramePtr - 0x000000000049ff50 tbk_getModuleName - 0x00000000004a0270 tbk_get_pc_info - 0x00000000004a0e30 tbk_geterrorstring - 0x00000000004a0fe0 tbk_trace_stack - 0x00000000004a1034 tbk_trace_stack_impl - .text 0x00000000004a1560 0x460 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(cpu_feature_disp.o) - 0x00000000004a1560 __intel_cpu_features_init_x - 0x00000000004a1580 __intel_cpu_features_init - .text 0x00000000004a19c0 0xc0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemcpy.o) - 0x00000000004a19c0 _intel_fast_memcpy.A - 0x00000000004a19d0 _intel_fast_memcpy.J - 0x00000000004a19e0 _intel_fast_memcpy.M - 0x00000000004a19f0 _intel_fast_memcpy.P - 0x00000000004a1a00 _intel_fast_memcpy - .text 0x00000000004a1a80 0x90 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemmove.o) - 0x00000000004a1a80 _intel_fast_memmove.A - 0x00000000004a1a90 _intel_fast_memmove.M - 0x00000000004a1aa0 _intel_fast_memmove.P - 0x00000000004a1ab0 _intel_fast_memmove - .text 0x00000000004a1b10 0x60 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemset.o) - 0x00000000004a1b10 _intel_fast_memset.A - 0x00000000004a1b20 _intel_fast_memset.J - 0x00000000004a1b30 _intel_fast_memset - .text 0x00000000004a1b70 0x360 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(new_proc_init.o) - 0x00000000004a1b70 __intel_new_feature_proc_init - .text 0x00000000004a1ed0 0x3190 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ia32_addsubq.o) - 0x00000000004a31e0 __addq - 0x00000000004a3290 __subq - .text 0x00000000004a5060 0x1c00 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ia32_divq.o) - 0x00000000004a5060 __divq.L - 0x00000000004a5e40 __divq.A - 0x00000000004a6c20 __divq - .text 0x00000000004a6c60 0x130 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strcpy.o) - 0x00000000004a6c60 __intel_sse2_strcpy - .text 0x00000000004a6d90 0x190 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strncpy.o) - 0x00000000004a6d90 __intel_sse2_strncpy - .text 0x00000000004a6f20 0x30 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strlen.o) - 0x00000000004a6f20 __intel_sse2_strlen - .text 0x00000000004a6f50 0x40 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strchr.o) - 0x00000000004a6f50 __intel_sse2_strchr - .text 0x00000000004a6f90 0x2e0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strncmp.o) - 0x00000000004a6f90 __intel_sse2_strncmp - .text 0x00000000004a7270 0x280 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strcat.o) - 0x00000000004a7270 __intel_sse2_strcat - .text 0x00000000004a74f0 0x330 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strncat.o) - 0x00000000004a74f0 __intel_sse2_strncat - .text 0x00000000004a7820 0x17b0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_memcpy_pp.o) - 0x00000000004a7820 __intel_memcpy - 0x00000000004a7820 __intel_new_memcpy - .text 0x00000000004a8fd0 0x11e0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_memset_pp.o) - 0x00000000004a8fd0 __intel_memset - 0x00000000004a8fd0 __intel_new_memset - .text 0x00000000004aa1b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_memcpy.o) - .text.ssse3 0x00000000004aa1b0 0x29c5 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_memcpy.o) - 0x00000000004aa1b0 __intel_ssse3_memcpy - *fill* 0x00000000004acb75 0x3 - .text 0x00000000004acb78 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_rep_memcpy.o) - *fill* 0x00000000004acb78 0x8 - .text.ssse3 0x00000000004acb80 0x2ab6 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_rep_memcpy.o) - 0x00000000004acb80 __intel_ssse3_rep_memcpy - *fill* 0x00000000004af636 0x2 - .text 0x00000000004af638 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_memmove.o) - *fill* 0x00000000004af638 0x8 - .text.ssse3 0x00000000004af640 0x2b76 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_memmove.o) - 0x00000000004af640 __intel_ssse3_memmove - *fill* 0x00000000004b21b6 0x2 - .text 0x00000000004b21b8 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_rep_memmove.o) - *fill* 0x00000000004b21b8 0x8 - .text.ssse3 0x00000000004b21c0 0x2af6 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_rep_memmove.o) - 0x00000000004b21c0 __intel_ssse3_rep_memmove - *fill* 0x00000000004b4cb6 0xa - .text 0x00000000004b4cc0 0x4e0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(irc_msg_support.o) - 0x00000000004b4cc0 __libirc_get_msg - 0x00000000004b4ef0 __libirc_print - .text 0x00000000004b51a0 0xbe0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_mem_ops.o) - 0x00000000004b51a0 __cacheSize - .text 0x00000000004b5d80 0xb0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(proc_init_utils.o) - 0x00000000004b5d80 __intel_proc_init_ftzdazule - .text 0x00000000004b5e30 0x99 /usr/lib64/libc_nonshared.a(elf-init.oS) - 0x00000000004b5e30 __libc_csu_fini - 0x00000000004b5e40 __libc_csu_init - *fill* 0x00000000004b5ec9 0x7 - .text 0x00000000004b5ed0 0x51 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2//libgcc.a(_powidf2.o) - 0x00000000004b5ed0 __powidf2 - *fill* 0x00000000004b5f21 0xf - .text 0x00000000004b5f30 0x36 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtend.o - *fill* 0x00000000004b5f66 0x2 - .text 0x00000000004b5f68 0x0 /usr/lib/../lib64/crtn.o - *(.gnu.warning) - -.fini 0x00000000004b5f68 0x16 - *(SORT(.fini)) - .fini 0x00000000004b5f68 0x10 /usr/lib/../lib64/crti.o - 0x00000000004b5f68 _fini - .fini 0x00000000004b5f78 0x5 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtbegin.o - .fini 0x00000000004b5f7d 0x1 /usr/lib/../lib64/crtn.o - 0x00000000004b5f7e PROVIDE (__etext, .) - 0x00000000004b5f7e PROVIDE (_etext, .) - 0x00000000004b5f7e PROVIDE (etext, .) - -.rodata 0x00000000004b5f80 0x1a5e8 - *(.rodata .rodata.* .gnu.linkonce.r.*) - .rodata.cst4 0x00000000004b5f80 0x4 /usr/lib/../lib64/crt1.o - 0x00000000004b5f80 _IO_stdin_used - *fill* 0x00000000004b5f84 0x4 - .rodata 0x00000000004b5f88 0x240 rdbfmsua.o - .rodata.str1.4 - 0x00000000004b61c8 0x1c2 rdbfmsua.o - 0x208 (size before relaxing) - *fill* 0x00000000004b638a 0x6 - .rodata 0x00000000004b6390 0x50 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flclos.o) - .rodata 0x00000000004b63e0 0x55 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltdat.o) - .rodata 0x00000000004b6435 0x21 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltinq.o) - .rodata 0x00000000004b6456 0x1 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stldsp.o) - *fill* 0x00000000004b6457 0x1 - .rodata 0x00000000004b6458 0xc /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(tbrstn.o) - *fill* 0x00000000004b6464 0x4 - .rodata 0x00000000004b6468 0x50 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flbksp.o) - .rodata 0x00000000004b64b8 0x58 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flinqr.o) - .rodata 0x00000000004b6510 0x1 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flpath.o) - *fill* 0x00000000004b6511 0x7 - .rodata 0x00000000004b6518 0x5d /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flsopn.o) - .rodata 0x00000000004b6575 0x3 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(ssenvr.o) - .rodata 0x00000000004b6578 0xc4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(tbastn.o) - *fill* 0x00000000004b663c 0x4 - .rodata 0x00000000004b6640 0x3a2 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) - *fill* 0x00000000004b69e2 0x6 - .rodata 0x00000000004b69e8 0x76 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(posapn.o) - *fill* 0x00000000004b6a5e 0x2 - .rodata 0x00000000004b6a60 0x3e /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(posapx.o) - *fill* 0x00000000004b6a9e 0x2 - .rodata 0x00000000004b6aa0 0x14 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdmsgw.o) - *fill* 0x00000000004b6ab4 0x4 - .rodata 0x00000000004b6ab8 0x3bb /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readdx.o) - *fill* 0x00000000004b6e73 0x5 - .rodata 0x00000000004b6e78 0x97 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readns.o) - *fill* 0x00000000004b6f0f 0x1 - .rodata 0x00000000004b6f10 0xe8 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readsb.o) - .rodata 0x00000000004b6ff8 0x5c /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(status.o) - *fill* 0x00000000004b7054 0x4 - .rodata 0x00000000004b7058 0x478 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbint.o) - .rodata 0x00000000004b74d0 0x7c /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbrw.o) - *fill* 0x00000000004b754c 0x4 - .rodata 0x00000000004b7550 0x331 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wrdlen.o) - *fill* 0x00000000004b7881 0x7 - .rodata 0x00000000004b7888 0xad /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(writdx.o) - *fill* 0x00000000004b7935 0x3 - .rodata 0x00000000004b7938 0x1fc /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wtstat.o) - *fill* 0x00000000004b7b34 0x4 - .rodata 0x00000000004b7b38 0xe4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(adn30.o) - .rodata 0x00000000004b7c1c 0x2c /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) - .rodata 0x00000000004b7c48 0x41 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort2.o) - *fill* 0x00000000004b7c89 0x7 - .rodata 0x00000000004b7c90 0x41 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort.o) - *fill* 0x00000000004b7cd1 0x3 - .rodata 0x00000000004b7cd4 0x4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cpbfdx.o) - .rodata 0x00000000004b7cd8 0xc /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(drstpl.o) - .rodata 0x00000000004b7ce4 0x8 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(dxinit.o) - *fill* 0x00000000004b7cec 0x4 - .rodata 0x00000000004b7cf0 0xea /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(dxmini.o) - *fill* 0x00000000004b7dda 0x6 - .rodata 0x00000000004b7de0 0x57 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(getwin.o) - *fill* 0x00000000004b7e37 0x9 - .rodata 0x00000000004b7e40 0x10 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ibfms.o) - .rodata 0x00000000004b7e50 0x11 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ifxy.o) - *fill* 0x00000000004b7e61 0x7 - .rodata 0x00000000004b7e68 0x82 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(invcon.o) - *fill* 0x00000000004b7eea 0x6 - .rodata 0x00000000004b7ef0 0x82 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(invwin.o) - *fill* 0x00000000004b7f72 0x6 - .rodata 0x00000000004b7f78 0x86 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ipkm.o) - *fill* 0x00000000004b7ffe 0x2 - .rodata 0x00000000004b8000 0x87 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupm.o) - *fill* 0x00000000004b8087 0x1 - .rodata 0x00000000004b8088 0xd0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstrpc.o) - .rodata 0x00000000004b8158 0xd0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstrps.o) - .rodata 0x00000000004b8228 0x144 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(msgwrt.o) - *fill* 0x00000000004b836c 0x4 - .rodata 0x00000000004b8370 0x82 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(newwin.o) - .rodata 0x00000000004b83f2 0x4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nmwrd.o) - *fill* 0x00000000004b83f6 0x2 - .rodata 0x00000000004b83f8 0x82 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nxtwin.o) - *fill* 0x00000000004b847a 0x6 - .rodata 0x00000000004b8480 0xeb /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ovrbs1.o) - *fill* 0x00000000004b856b 0x5 - .rodata 0x00000000004b8570 0x6c /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(padmsg.o) - *fill* 0x00000000004b85dc 0x4 - .rodata 0x00000000004b85e0 0xc5 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkbs1.o) - *fill* 0x00000000004b86a5 0x3 - .rodata 0x00000000004b86a8 0x8 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkc.o) - .rodata 0x00000000004b86b0 0x11c /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pktdd.o) - *fill* 0x00000000004b87cc 0x4 - .rodata 0x00000000004b87d0 0x80 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkvs01.o) - .rodata 0x00000000004b8850 0xfc /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkvs1.o) - *fill* 0x00000000004b894c 0x4 - .rodata 0x00000000004b8950 0x37b /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdbfdx.o) - *fill* 0x00000000004b8ccb 0x1 - .rodata 0x00000000004b8ccc 0x8 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdcmps.o) - *fill* 0x00000000004b8cd4 0x4 - .rodata 0x00000000004b8cd8 0x494 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdusdx.o) - *fill* 0x00000000004b916c 0x4 - .rodata 0x00000000004b9170 0xde /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readmg.o) - *fill* 0x00000000004b924e 0x2 - .rodata 0x00000000004b9250 0x662 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(seqsdx.o) - *fill* 0x00000000004b98b2 0x6 - .rodata 0x00000000004b98b8 0x24c /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(stndrd.o) - *fill* 0x00000000004b9b04 0x4 - .rodata 0x00000000004b9b08 0xf2 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(string.o) - *fill* 0x00000000004b9bfa 0x6 - .rodata 0x00000000004b9c00 0x84 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strnum.o) - *fill* 0x00000000004b9c84 0x4 - .rodata 0x00000000004b9c88 0xb2 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strsuc.o) - *fill* 0x00000000004b9d3a 0x2 - .rodata 0x00000000004b9d3c 0x8 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(trybump.o) - .rodata 0x00000000004b9d44 0x8 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upc.o) - *fill* 0x00000000004b9d4c 0x4 - .rodata 0x00000000004b9d50 0x4f0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(usrtpl.o) - .rodata 0x00000000004ba240 0x8 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chrtrna.o) - .rodata 0x00000000004ba248 0x274 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cktaba.o) - *fill* 0x00000000004ba4bc 0x4 - .rodata 0x00000000004ba4c0 0xf5 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cnved4.o) - *fill* 0x00000000004ba5b5 0x3 - .rodata 0x00000000004ba5b8 0x14a /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(elemdx.o) - *fill* 0x00000000004ba702 0x2 - .rodata 0x00000000004ba704 0x10 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(getlens.o) - .rodata 0x00000000004ba714 0x4a /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(gets1loc.o) - *fill* 0x00000000004ba75e 0x2 - .rodata 0x00000000004ba760 0x148 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(idn30.o) - .rodata 0x00000000004ba8a8 0x10 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(igetdate.o) - .rodata 0x00000000004ba8b8 0x18 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(istdesc.o) - .rodata 0x00000000004ba8d0 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupbs01.o) - .rodata 0x00000000004ba8f8 0x1 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(jstchr.o) - *fill* 0x00000000004ba8f9 0x7 - .rodata 0x00000000004ba900 0xfa /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(jstnum.o) - *fill* 0x00000000004ba9fa 0x6 - .rodata 0x00000000004baa00 0xd0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstjpb.o) - .rodata 0x00000000004baad0 0x170 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(makestab.o) - .rodata 0x00000000004bac40 0x78 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(mvb.o) - .rodata 0x00000000004bacb8 0x1f /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtab.o) - *fill* 0x00000000004bacd7 0x1 - .rodata 0x00000000004bacd8 0xb0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbax.o) - .rodata 0x00000000004bad88 0xbb /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nenuaa.o) - *fill* 0x00000000004bae43 0x5 - .rodata 0x00000000004bae48 0x16b /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nenubd.o) - .rodata 0x00000000004bafb3 0x13 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numbck.o) - *fill* 0x00000000004bafc6 0x2 - .rodata 0x00000000004bafc8 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numtab.o) - *fill* 0x00000000004bafef 0x1 - .rodata 0x00000000004baff0 0xca /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbt.o) - *fill* 0x00000000004bb0ba 0x6 - .rodata 0x00000000004bb0c0 0x181 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parstr.o) - *fill* 0x00000000004bb241 0x7 - .rodata 0x00000000004bb248 0x363 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parusr.o) - *fill* 0x00000000004bb5ab 0x5 - .rodata 0x00000000004bb5b0 0x1e4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parutg.o) - *fill* 0x00000000004bb794 0x4 - .rodata 0x00000000004bb798 0xf0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rcstpl.o) - .rodata 0x00000000004bb888 0x18 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdmsgb.o) - .rodata 0x00000000004bb8a0 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(restd.o) - *fill* 0x00000000004bb8c7 0x1 - .rodata 0x00000000004bb8c8 0x3f6 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabsub.o) - *fill* 0x00000000004bbcbe 0x2 - .rodata 0x00000000004bbcc0 0x68 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(uptdd.o) - .rodata 0x00000000004bbd28 0x47 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wrdesc.o) - *fill* 0x00000000004bbd6f 0x1 - .rodata 0x00000000004bbd70 0x4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cadn30.o) - *fill* 0x00000000004bbd74 0x4 - .rodata 0x00000000004bbd78 0x10e /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chekstab.o) - *fill* 0x00000000004bbe86 0x2 - .rodata 0x00000000004bbe88 0x6e /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(inctab.o) - *fill* 0x00000000004bbef6 0xa - .rodata 0x00000000004bbf00 0x290 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbb.o) - .rodata 0x00000000004bc190 0x2b7 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbd.o) - .rodata 0x00000000004bc447 0x1 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numtbd.o) - .rodata 0x00000000004bc448 0xb1 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabent.o) - *fill* 0x00000000004bc4f9 0x7 - .rodata 0x00000000004bc500 0x108 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(valx.o) - .rodata 0x00000000004bc608 0x8 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rjust.o) - .rodata.str1.4 - 0x00000000004bc610 0xd0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_init.o) - .rodata 0x00000000004bc6e0 0x160 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_init.o) - .rodata.str1.32 - 0x00000000004bc840 0x1ecd /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_init.o) - 0x1ee0 (size before relaxing) - *fill* 0x00000000004be70d 0x13 - .rodata 0x00000000004be720 0x3c0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_io_util.o) - .rodata.str1.4 - 0x00000000004beae0 0x3 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_io_util.o) - 0x4 (size before relaxing) - *fill* 0x00000000004beae3 0x1 - .rodata.str1.4 - 0x00000000004beae4 0x3cd /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open.o) - 0x3f0 (size before relaxing) - *fill* 0x00000000004beeb1 0xf - .rodata 0x00000000004beec0 0x1980 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open.o) - .rodata.str1.4 - 0x00000000004c0840 0x7 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_preconnected_units_init.o) - 0x8 (size before relaxing) - *fill* 0x00000000004c0847 0x19 - .rodata 0x00000000004c0860 0x80 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_reentrancy.o) - .rodata 0x00000000004c08e0 0x70 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_secnds.o) - .rodata.str1.4 - 0x00000000004c0950 0xb /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_stop.o) - 0x14 (size before relaxing) - *fill* 0x00000000004c095b 0x5 - .rodata 0x00000000004c0960 0x200 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_stop.o) - .rodata.str1.4 - 0x00000000004c0b60 0x53 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wint_fmt.o) - 0x64 (size before relaxing) - *fill* 0x00000000004c0bb3 0xd - .rodata 0x00000000004c0bc0 0x220 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wint_fmt.o) - .rodata.str1.4 - 0x00000000004c0de0 0xf /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq_fmt.o) - 0x24 (size before relaxing) - *fill* 0x00000000004c0def 0x1 - .rodata 0x00000000004c0df0 0x2e0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq_fmt.o) - .rodata 0x00000000004c10d0 0x4b0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq_lis.o) - .rodata.str1.4 - 0x00000000004c1580 0xf /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq_lis.o) - 0x18 (size before relaxing) - *fill* 0x00000000004c158f 0x1 - .rodata.str1.4 - 0x00000000004c1590 0xf2 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio.o) - 0x100 (size before relaxing) - *fill* 0x00000000004c1682 0x2 - .rodata.str1.4 - 0x00000000004c1684 0xb0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open_proc.o) - 0x104 (size before relaxing) - *fill* 0x00000000004c1734 0x4 - .rodata 0x00000000004c1738 0x310 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open_proc.o) - .rodata 0x00000000004c1a48 0x10 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_text_to_int.o) - .rodata 0x00000000004c1a58 0x198 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_f.o) - .rodata 0x00000000004c1bf0 0x198 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_d.o) - .rodata 0x00000000004c1d88 0x198 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_g.o) - .rodata 0x00000000004c1f20 0x330 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cray.o) - .rodata 0x00000000004c2250 0x198 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ibm_short.o) - .rodata 0x00000000004c23e8 0x198 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ibm_long.o) - .rodata 0x00000000004c2580 0x7f8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ieee_double.o) - .rodata 0x00000000004c2d78 0x4c8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ieee_single.o) - .rodata.str1.4 - 0x0000000000000000 0x8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_close.o) - .rodata 0x00000000004c3240 0x48 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_close_proc.o) - .rodata.str1.4 - 0x00000000004c3288 0x66 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_close_proc.o) - 0x68 (size before relaxing) - *fill* 0x00000000004c32ee 0x2 - .rodata.str1.4 - 0x00000000004c32f0 0x43 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_default_io_sizes_env_init.o) - 0x44 (size before relaxing) - *fill* 0x00000000004c3333 0xd - .rodata 0x00000000004c3340 0x200 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_desc_item.o) - 0x00000000004c34a0 for__dsc_itm_table - .rodata.str1.4 - 0x00000000004c3540 0x10 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_desc_item.o) - .rodata.str1.4 - 0x00000000004c3550 0x3c41 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_diags_intel.o) - 0x3cc4 (size before relaxing) - *fill* 0x00000000004c7191 0x7 - .rodata 0x00000000004c7198 0x58 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_diags_intel.o) - *fill* 0x00000000004c71f0 0x10 - .rodata.str1.32 - 0x00000000004c7200 0x1644 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_diags_intel.o) - 0x1660 (size before relaxing) - .rodata.str1.4 - 0x00000000004c8844 0x13 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_exit_handler.o) - 0x14 (size before relaxing) - *fill* 0x00000000004c8857 0x9 - .rodata 0x00000000004c8860 0x3a0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_comp.o) - .rodata.str1.4 - 0x00000000004c8c00 0xf /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_comp.o) - 0x10 (size before relaxing) - *fill* 0x00000000004c8c0f 0x1 - .rodata 0x00000000004c8c10 0x1100 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_val.o) - .rodata 0x00000000004c9d10 0x48 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_get.o) - .rodata.str1.4 - 0x00000000004c9d58 0xa /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_get.o) - 0xc (size before relaxing) - *fill* 0x00000000004c9d62 0x1e - .rodata 0x00000000004c9d80 0xbe0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_intrp_fmt.o) - 0x00000000004ca300 for__oz_fmt_table - 0x00000000004ca360 for__b_fmt_table - 0x00000000004ca400 for__fedg_fmt_table - 0x00000000004ca4e0 for__coerce_data_types - 0x00000000004ca943 for__i_fmt_table - .rodata.str1.4 - 0x00000000004ca960 0x10 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_intrp_fmt.o) - *fill* 0x00000000004ca970 0x10 - .rodata 0x00000000004ca980 0x240 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_ldir_wfs.o) - 0x00000000004ca980 for__wfs_table - 0x00000000004caaa0 for__wfs_msf_table - .rodata 0x00000000004cabc0 0x2d0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_lub_mgt.o) - .rodata.str1.4 - 0x00000000004cae90 0xe /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_lub_mgt.o) - 0x10 (size before relaxing) - .rodata.str1.4 - 0x0000000000000000 0x8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_need_lf.o) - *fill* 0x00000000004cae9e 0x2 - .rodata 0x00000000004caea0 0x60 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_need_lf.o) - .rodata 0x00000000004caf00 0x210 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_put.o) - .rodata.str1.4 - 0x00000000004cb110 0xa /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_put.o) - 0xc (size before relaxing) - *fill* 0x00000000004cb11a 0x2 - .rodata.str1.4 - 0x00000000004cb11c 0xb /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq.o) - 0x14 (size before relaxing) - *fill* 0x00000000004cb127 0x1 - .rodata 0x00000000004cb128 0x248 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq.o) - .rodata.str1.4 - 0x00000000004cb370 0x1ef /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(tbk_traceback.o) - 0x1fc (size before relaxing) - *fill* 0x00000000004cb55f 0x1 - .rodata.str1.32 - 0x00000000004cb560 0xb93 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(tbk_traceback.o) - 0xba0 (size before relaxing) - *fill* 0x00000000004cc0f3 0xd - .rodata 0x00000000004cc100 0x1c0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt__globals.o) - 0x00000000004cc100 vax_c - 0x00000000004cc140 ieee_t - 0x00000000004cc1b0 ieee_s - 0x00000000004cc1e8 ibm_s - 0x00000000004cc204 ibm_l - 0x00000000004cc23c cray - 0x00000000004cc274 int_c - .rodata 0x00000000004cc2c0 0x20 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_int_to_text.o) - .rodata.str1.4 - 0x00000000004cc2e0 0x11 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_int_to_text.o) - 0x14 (size before relaxing) - .rodata.str1.4 - 0x0000000000000000 0x14 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_data_to_text.o) - *fill* 0x00000000004cc2f1 0xf - .rodata 0x00000000004cc300 0x20 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_data_to_text.o) - .rodata 0x00000000004cc320 0x30 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_log_to_text.o) - .rodata 0x00000000004cc350 0x10 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_t.o) - .rodata 0x00000000004cc360 0x10 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_s.o) - .rodata 0x00000000004cc370 0x10 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_x.o) - .rodata 0x00000000004cc380 0x150 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_s.o) - .rodata.str1.4 - 0x00000000004cc4d0 0xd /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_s.o) - 0x10 (size before relaxing) - *fill* 0x00000000004cc4dd 0x3 - .rodata 0x00000000004cc4e0 0x150 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_t.o) - .rodata.str1.4 - 0x0000000000000000 0x10 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_t.o) - .rodata.str1.4 - 0x00000000004cc630 0x20 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_s_to_a.o) - 0x30 (size before relaxing) - .rodata 0x00000000004cc650 0x10 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_s_to_a.o) - .rodata.str1.4 - 0x0000000000000000 0x30 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_t_to_a.o) - .rodata 0x00000000004cc660 0x10 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_t_to_a.o) - .rodata 0x00000000004cc670 0x138 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_x.o) - .rodata.str1.4 - 0x0000000000000000 0x10 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_x.o) - .rodata.str1.4 - 0x0000000000000000 0x30 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_x_to_a.o) - *fill* 0x00000000004cc7a8 0x8 - .rodata 0x00000000004cc7b0 0x10 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_x_to_a.o) - .rodata 0x00000000004cc7c0 0x180 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_globals.o) - 0x00000000004cc7c0 cvtas_pten_word - 0x00000000004cc860 cvtas_globals_t - 0x00000000004cc8c0 cvtas_globals_x - 0x00000000004cc920 cvtas_globals_s - .rodata 0x00000000004cc940 0x4e0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_pow_ten_53.o) - 0x00000000004cc940 cvtas_pten_t - 0x00000000004ccc40 cvtas_tiny_pten_t - 0x00000000004ccce0 cvtas_tiny_pten_t_map - 0x00000000004ccd40 cvtas_huge_pten_t - 0x00000000004ccdc0 cvtas_huge_pten_t_map - .rodata 0x00000000004cce20 0x5e0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_pow_ten_64.o) - 0x00000000004cce20 cvtas_pten_64 - 0x00000000004cd120 cvtas_pten_64_bexp - 0x00000000004cd1e0 cvtas_tiny_pten_64 - 0x00000000004cd260 cvtas_tiny_pten_64_map - 0x00000000004cd2e0 cvtas_huge_pten_64 - 0x00000000004cd360 cvtas_huge_pten_64_map - 0x00000000004cd3ba cvtas_tiny_pten_64_bexp - 0x00000000004cd3d8 cvtas_huge_pten_64_bexp - .rodata 0x00000000004cd400 0x520 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_pow_ten_128.o) - 0x00000000004cd400 cvtas_pten_128 - 0x00000000004cd5c0 cvtas_tiny_tiny_pten_128 - 0x00000000004cd600 cvtas_tiny_pten_128 - 0x00000000004cd6a0 cvtas_tiny_pten_128_map - 0x00000000004cd740 cvtas_huge_huge_pten_128 - 0x00000000004cd780 cvtas_huge_pten_128 - 0x00000000004cd820 cvtas_huge_pten_128_map - 0x00000000004cd8a8 cvtas_pten_128_bexp - 0x00000000004cd8de cvtas_tiny_tiny_pten_128_bexp - 0x00000000004cd8e6 cvtas_tiny_pten_128_bexp - 0x00000000004cd8fa cvtas_huge_huge_pten_128_bexp - 0x00000000004cd902 cvtas_huge_pten_128_bexp - .rodata 0x00000000004cd920 0x20 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_ct.o) - .rodata 0x00000000004cd940 0x20 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_ct.o) - .rodata 0x00000000004cd960 0x20 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_gen.o) - .rodata 0x00000000004cd980 0x20 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_gen.o) - .rodata.str1.4 - 0x00000000004cd9a0 0x45a /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(libm_error.o) - 0x484 (size before relaxing) - *fill* 0x00000000004cddfa 0x6 - .rodata 0x00000000004cde00 0x918 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(libm_error.o) - .rodata 0x00000000004ce718 0x8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(qcomp.o) - .rodata 0x00000000004ce720 0xc /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fp2q.o) - *fill* 0x00000000004ce72c 0x4 - .rodata 0x00000000004ce730 0x28 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(q2fp.o) - .rodata.str1.4 - 0x00000000004ce758 0x113 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(tbk_display.o) - 0x118 (size before relaxing) - *fill* 0x00000000004ce86b 0x15 - .rodata.str1.32 - 0x00000000004ce880 0xa2 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(tbk_display.o) - 0xc0 (size before relaxing) - *fill* 0x00000000004ce922 0x2 - .rodata.str1.4 - 0x00000000004ce924 0x24 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(tbk_backtrace.o) - 0x3c (size before relaxing) - .rodata 0x00000000004ce948 0x24 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(tbk_backtrace.o) - .rodata.str1.4 - 0x00000000004ce96c 0x14b /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(new_proc_init.o) - 0x150 (size before relaxing) - *fill* 0x00000000004ceab7 0x9 - .rodata 0x00000000004ceac0 0xa0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ia32_addsubq.o) - .rodata 0x00000000004ceb60 0x90 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ia32_divq.o) - .rodata.ssse3 0x00000000004cebf0 0x1c0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_memcpy.o) - .rodata.ssse3 0x00000000004cedb0 0x500 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_rep_memcpy.o) - .rodata.ssse3 0x00000000004cf2b0 0x1c0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_memmove.o) - .rodata.ssse3 0x00000000004cf470 0x500 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_rep_memmove.o) - .rodata.str1.4 - 0x00000000004cf970 0x58c /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(irc_msg_support.o) - 0x5b0 (size before relaxing) - *fill* 0x00000000004cfefc 0x4 - .rodata.str1.32 - 0x00000000004cff00 0x660 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(irc_msg_support.o) - .rodata.cst8 0x00000000004d0560 0x8 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2//libgcc.a(_powidf2.o) - -.rodata1 - *(.rodata1) - -.eh_frame_hdr 0x00000000004d0568 0xee4 - *(.eh_frame_hdr) - .eh_frame_hdr 0x00000000004d0568 0xee4 /usr/lib/../lib64/crti.o - -.eh_frame 0x00000000004d1450 0xc694 - *(.eh_frame) - .eh_frame 0x00000000004d1450 0x40 /usr/lib/../lib64/crt1.o - .eh_frame 0x00000000004d1490 0x20 /usr/lib/../lib64/crti.o - 0x38 (size before relaxing) - .eh_frame 0x00000000004d14b0 0x38 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/for_main.o - 0x50 (size before relaxing) - .eh_frame 0x00000000004d14e8 0x158 rdbfmsua.o - .eh_frame 0x00000000004d1640 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flclos.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1660 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flflun.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1680 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltbop.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d16a8 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltdat.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d16c8 0x30 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltinq.o) - 0x48 (size before relaxing) - .eh_frame 0x00000000004d16f8 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stldsp.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1720 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stlstr.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1740 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(strmbl.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1768 0x30 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(strmst.o) - 0x48 (size before relaxing) - .eh_frame 0x00000000004d1798 0x30 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(tbrstn.o) - 0x48 (size before relaxing) - .eh_frame 0x00000000004d17c8 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flbksp.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d17e8 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flinqr.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1810 0x30 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flpath.o) - 0x48 (size before relaxing) - .eh_frame 0x00000000004d1840 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flsopn.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1860 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(ssenvr.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1888 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(ssgsym.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d18b0 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stlcuc.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d18d8 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stuclc.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1900 0x30 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(tbastn.o) - 0x48 (size before relaxing) - .eh_frame 0x00000000004d1930 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flglun.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1950 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libbridge.a(dcbsrh.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1970 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ireadns.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1990 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d19b0 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(posapn.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d19d8 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(posapx.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1a00 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdmsgw.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1a28 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readdx.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1a48 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readns.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1a68 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readsb.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1a88 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(status.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1aa8 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbint.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1ad0 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbrw.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1af8 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upb.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1b18 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wrdlen.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1b38 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(writdx.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1b60 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wtstat.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1b80 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(adn30.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1ba0 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1bc8 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort2.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1be8 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort_exit.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1c08 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1c28 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(conwin.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1c50 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cpbfdx.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1c78 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(drstpl.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1c98 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(dxinit.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1cc0 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(dxmini.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1ce8 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(getwin.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1d08 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ibfms.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1d28 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ichkstr.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1d50 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ifxy.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1d70 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(invcon.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1d90 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(invwin.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1db0 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ipkm.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1dd0 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(irev.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1df0 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupm.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1e10 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lmsg.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1e30 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstrpc.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1e50 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstrps.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1e70 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(msgwrt.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1e98 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(newwin.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1eb8 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nmwrd.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1ed8 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nxtwin.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1ef8 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ovrbs1.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1f18 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(padmsg.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1f40 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkb.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1f68 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkbs1.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1f88 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkc.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1fb0 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pktdd.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d1fd0 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkvs01.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d1ff8 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkvs1.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d2018 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdbfdx.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2040 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdcmps.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2068 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdtree.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2090 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdusdx.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d20b8 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readmg.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d20d8 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(seqsdx.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2100 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(stndrd.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2128 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(string.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2150 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strnum.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2178 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strsuc.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d21a0 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(trybump.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d21c0 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upbb.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d21e0 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upc.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2208 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(usrtpl.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2230 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(capit.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d2250 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chrtrna.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2278 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chrtrn.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d22a0 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cktaba.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d22c8 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cnved4.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d22e8 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(digit.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d2308 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(elemdx.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d2328 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(getlens.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2350 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(gets1loc.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d2370 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(i4dy.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d2390 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(idn30.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d23b8 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(igetdate.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d23d8 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(istdesc.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d23f8 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupb.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d2418 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupbs01.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2440 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(jstchr.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2468 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(jstnum.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2490 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstjpb.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d24b0 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(makestab.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d24d8 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(mvb.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2500 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemock.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d2520 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtab.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2548 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbax.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2570 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nenuaa.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2598 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nenubd.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d25c0 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numbck.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d25e0 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numtab.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2608 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbt.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d2628 0x30 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parstr.o) - 0x48 (size before relaxing) - .eh_frame 0x00000000004d2658 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parusr.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2680 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parutg.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d26a8 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rcstpl.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d26c8 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdmsgb.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d26f0 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(restd.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2718 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rsvfvm.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d2738 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strcln.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d2758 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabsub.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2780 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(uptdd.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d27a0 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wrdesc.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d27c0 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cadn30.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d27e8 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chekstab.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2810 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(inctab.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2838 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbb.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d2858 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbd.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d2880 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numtbd.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d28a8 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabent.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d28c8 0x28 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(valx.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d28f0 0x20 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rjust.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004d2910 0x358 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_init.o) - 0x370 (size before relaxing) - .eh_frame 0x00000000004d2c68 0x1c0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_io_util.o) - 0x1d8 (size before relaxing) - .eh_frame 0x00000000004d2e28 0xa08 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open.o) - 0xa20 (size before relaxing) - .eh_frame 0x00000000004d3830 0x30 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_preconnected_units_init.o) - 0x48 (size before relaxing) - .eh_frame 0x00000000004d3860 0x1d0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_reentrancy.o) - 0x1e8 (size before relaxing) - .eh_frame 0x00000000004d3a30 0x1e8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_secnds.o) - 0x200 (size before relaxing) - .eh_frame 0x00000000004d3c18 0x238 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_stop.o) - 0x250 (size before relaxing) - .eh_frame 0x00000000004d3e50 0x320 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_vm.o) - 0x338 (size before relaxing) - .eh_frame 0x00000000004d4170 0x6e8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wint_fmt.o) - 0x700 (size before relaxing) - .eh_frame 0x00000000004d4858 0x9b0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq_fmt.o) - 0x9c8 (size before relaxing) - .eh_frame 0x00000000004d5208 0xbe8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq_lis.o) - 0xc00 (size before relaxing) - .eh_frame 0x00000000004d5df0 0x758 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio.o) - 0x770 (size before relaxing) - .eh_frame 0x00000000004d6548 0x698 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open_proc.o) - 0x6b0 (size before relaxing) - .eh_frame 0x00000000004d6be0 0x180 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio_wrap.o) - 0x198 (size before relaxing) - .eh_frame 0x00000000004d6d60 0x290 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_text_to_int.o) - 0x2a8 (size before relaxing) - .eh_frame 0x00000000004d6ff0 0xc8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_f.o) - 0xe0 (size before relaxing) - .eh_frame 0x00000000004d70b8 0xc8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_d.o) - 0xe0 (size before relaxing) - .eh_frame 0x00000000004d7180 0xc8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_g.o) - 0xe0 (size before relaxing) - .eh_frame 0x00000000004d7248 0x1e0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cray.o) - 0x1f8 (size before relaxing) - .eh_frame 0x00000000004d7428 0xe0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ibm_short.o) - 0xf8 (size before relaxing) - .eh_frame 0x00000000004d7508 0x108 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ibm_long.o) - 0x120 (size before relaxing) - .eh_frame 0x00000000004d7610 0x508 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ieee_double.o) - 0x520 (size before relaxing) - .eh_frame 0x00000000004d7b18 0x2a8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ieee_single.o) - 0x2c0 (size before relaxing) - .eh_frame 0x00000000004d7dc0 0x220 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_close.o) - 0x238 (size before relaxing) - .eh_frame 0x00000000004d7fe0 0x70 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_close_proc.o) - 0x88 (size before relaxing) - .eh_frame 0x00000000004d8050 0x28 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_default_io_sizes_env_init.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d8078 0x1d8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_desc_item.o) - 0x1f0 (size before relaxing) - .eh_frame 0x00000000004d8250 0x4d8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_diags_intel.o) - 0x4f0 (size before relaxing) - .eh_frame 0x00000000004d8728 0x28 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_exit.o) - 0x40 (size before relaxing) - .eh_frame 0x00000000004d8750 0x60 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_exit_handler.o) - 0x78 (size before relaxing) - .eh_frame 0x00000000004d87b0 0x6a8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_comp.o) - 0x6c0 (size before relaxing) - .eh_frame 0x00000000004d8e58 0xf0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_val.o) - 0x108 (size before relaxing) - .eh_frame 0x00000000004d8f48 0x4c0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_get.o) - 0x4d8 (size before relaxing) - .eh_frame 0x00000000004d9408 0xe8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_intrp_fmt.o) - 0x100 (size before relaxing) - .eh_frame 0x00000000004d94f0 0x430 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_lub_mgt.o) - 0x448 (size before relaxing) - .eh_frame 0x00000000004d9920 0xb0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_need_lf.o) - 0xc8 (size before relaxing) - .eh_frame 0x00000000004d99d0 0x220 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_put.o) - 0x238 (size before relaxing) - .eh_frame 0x00000000004d9bf0 0x9e0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq.o) - 0x9f8 (size before relaxing) - .eh_frame 0x00000000004da5d0 0xa0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(tbk_traceback.o) - 0xb8 (size before relaxing) - .eh_frame 0x00000000004da670 0x100 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_int_to_text.o) - 0x118 (size before relaxing) - .eh_frame 0x00000000004da770 0x180 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_data_to_text.o) - 0x198 (size before relaxing) - .eh_frame 0x00000000004da8f0 0x140 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_log_to_text.o) - 0x158 (size before relaxing) - .eh_frame 0x00000000004daa30 0x150 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_text_to_data.o) - 0x168 (size before relaxing) - .eh_frame 0x00000000004dab80 0x90 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_text_to_log.o) - 0xa8 (size before relaxing) - .eh_frame 0x00000000004dac10 0x2f8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_t.o) - 0x310 (size before relaxing) - .eh_frame 0x00000000004daf08 0x2f8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_s.o) - 0x310 (size before relaxing) - .eh_frame 0x00000000004db200 0x2d8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_x.o) - 0x2f0 (size before relaxing) - .eh_frame 0x00000000004db4d8 0x90 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_s.o) - 0xa8 (size before relaxing) - .eh_frame 0x00000000004db568 0x90 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_t.o) - 0xa8 (size before relaxing) - .eh_frame 0x00000000004db5f8 0x60 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_s_to_a.o) - 0x78 (size before relaxing) - .eh_frame 0x00000000004db658 0x60 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_t_to_a.o) - 0x78 (size before relaxing) - .eh_frame 0x00000000004db6b8 0x18 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_nan_s.o) - 0x30 (size before relaxing) - .eh_frame 0x00000000004db6d0 0x18 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_nan_t.o) - 0x30 (size before relaxing) - .eh_frame 0x00000000004db6e8 0x90 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_x.o) - 0xa8 (size before relaxing) - .eh_frame 0x00000000004db778 0x60 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_x_to_a.o) - 0x78 (size before relaxing) - .eh_frame 0x00000000004db7d8 0x18 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_nan_x.o) - 0x30 (size before relaxing) - .eh_frame 0x00000000004db7f0 0x20 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(fetestexcept.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004db810 0x20 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_ct.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004db830 0x20 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_ct.o) - 0x38 (size before relaxing) - .eh_frame 0x00000000004db850 0x30 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_gen.o) - 0x48 (size before relaxing) - .eh_frame 0x00000000004db880 0x30 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_gen.o) - 0x48 (size before relaxing) - .eh_frame 0x00000000004db8b0 0xe8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(libm_error.o) - 0x100 (size before relaxing) - .eh_frame 0x00000000004db998 0x18 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(matherrf.o) - 0x30 (size before relaxing) - .eh_frame 0x00000000004db9b0 0x18 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(matherrl.o) - 0x30 (size before relaxing) - .eh_frame 0x00000000004db9c8 0x18 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(matherr.o) - 0x30 (size before relaxing) - .eh_frame 0x00000000004db9e0 0x60 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ints2q.o) - 0x78 (size before relaxing) - .eh_frame 0x00000000004dba40 0xa8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(qcomp.o) - 0xc0 (size before relaxing) - .eh_frame 0x00000000004dbae8 0x48 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fp2q.o) - 0x60 (size before relaxing) - .eh_frame 0x00000000004dbb30 0x88 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(q2fp.o) - 0xa0 (size before relaxing) - .eh_frame 0x00000000004dbbb8 0x1e8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(tbk_display.o) - 0x200 (size before relaxing) - .eh_frame 0x00000000004dbda0 0x470 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(tbk_backtrace.o) - 0x488 (size before relaxing) - .eh_frame 0x00000000004dc210 0x1a8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(cpu_feature_disp.o) - 0x1c0 (size before relaxing) - .eh_frame 0x00000000004dc3b8 0x60 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemcpy.o) - 0x78 (size before relaxing) - .eh_frame 0x00000000004dc418 0x48 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemmove.o) - 0x60 (size before relaxing) - .eh_frame 0x00000000004dc460 0x30 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemset.o) - 0x48 (size before relaxing) - .eh_frame 0x00000000004dc490 0x80 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(new_proc_init.o) - 0x98 (size before relaxing) - .eh_frame 0x00000000004dc510 0xb30 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ia32_addsubq.o) - 0xb48 (size before relaxing) - .eh_frame 0x00000000004dd040 0x570 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ia32_divq.o) - 0x588 (size before relaxing) - .eh_frame 0x00000000004dd5b0 0x18 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strcpy.o) - 0x30 (size before relaxing) - .eh_frame 0x00000000004dd5c8 0x18 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strncpy.o) - 0x30 (size before relaxing) - .eh_frame 0x00000000004dd5e0 0x18 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strlen.o) - 0x30 (size before relaxing) - .eh_frame 0x00000000004dd5f8 0x18 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strchr.o) - 0x30 (size before relaxing) - .eh_frame 0x00000000004dd610 0xd8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strncmp.o) - 0xf0 (size before relaxing) - .eh_frame 0x00000000004dd6e8 0x58 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strcat.o) - 0x70 (size before relaxing) - .eh_frame 0x00000000004dd740 0x68 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strncat.o) - 0x80 (size before relaxing) - .eh_frame 0x00000000004dd7a8 0x18 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_memcpy_pp.o) - 0x30 (size before relaxing) - .eh_frame 0x00000000004dd7c0 0x18 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_memset_pp.o) - 0x30 (size before relaxing) - .eh_frame 0x00000000004dd7d8 0x18 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_memcpy.o) - 0x30 (size before relaxing) - .eh_frame 0x00000000004dd7f0 0x18 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_rep_memcpy.o) - 0x30 (size before relaxing) - .eh_frame 0x00000000004dd808 0x18 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_memmove.o) - 0x30 (size before relaxing) - .eh_frame 0x00000000004dd820 0x18 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_rep_memmove.o) - 0x30 (size before relaxing) - .eh_frame 0x00000000004dd838 0x108 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(irc_msg_support.o) - 0x120 (size before relaxing) - .eh_frame 0x00000000004dd940 0xe0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_mem_ops.o) - 0xf8 (size before relaxing) - .eh_frame 0x00000000004dda20 0x68 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(proc_init_utils.o) - 0x80 (size before relaxing) - .eh_frame 0x00000000004dda88 0x40 /usr/lib64/libc_nonshared.a(elf-init.oS) - 0x58 (size before relaxing) - .eh_frame 0x00000000004ddac8 0x18 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2//libgcc.a(_powidf2.o) - 0x30 (size before relaxing) - .eh_frame 0x00000000004ddae0 0x4 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtend.o - -.gcc_except_table - *(.gcc_except_table .gcc_except_table.*) - -.exception_ranges - *(.exception_ranges .exception_ranges*) - 0x00000000004ddae4 . = (ALIGN (0x200000) - ((0x200000 - .) & 0x1fffff)) - 0x00000000006de80c . = DATA_SEGMENT_ALIGN (0x200000, 0x1000) - -.eh_frame - *(.eh_frame) - -.gcc_except_table - *(.gcc_except_table .gcc_except_table.*) - -.exception_ranges - *(.exception_ranges .exception_ranges*) - -.tdata - *(.tdata .tdata.* .gnu.linkonce.td.*) - -.tbss - *(.tbss .tbss.* .gnu.linkonce.tb.*) - *(.tcommon) - -.preinit_array 0x00000000006de80c 0x0 - 0x00000000006de80c PROVIDE (__preinit_array_start, .) - *(.preinit_array) - 0x00000000006de80c PROVIDE (__preinit_array_end, .) - -.init_array 0x00000000006de80c 0x0 - 0x00000000006de80c PROVIDE (__init_array_start, .) - *(SORT(.init_array.*)) - *(.init_array) - 0x00000000006de80c PROVIDE (__init_array_end, .) - -.fini_array 0x00000000006de80c 0x0 - 0x00000000006de80c PROVIDE (__fini_array_start, .) - *(SORT(.fini_array.*)) - *(.fini_array) - 0x00000000006de80c PROVIDE (__fini_array_end, .) - -.ctors 0x00000000006de810 0x18 - *crtbegin.o(.ctors) - .ctors 0x00000000006de810 0x8 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtbegin.o - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - .ctors 0x00000000006de818 0x8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_mem_ops.o) - *(SORT(.ctors.*)) - *(.ctors) - .ctors 0x00000000006de820 0x8 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtend.o - -.dtors 0x00000000006de828 0x10 - *crtbegin.o(.dtors) - .dtors 0x00000000006de828 0x8 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtbegin.o - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - .dtors 0x00000000006de830 0x8 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtend.o - 0x00000000006de830 __DTOR_END__ - -.jcr 0x00000000006de838 0x8 - *(.jcr) - .jcr 0x00000000006de838 0x0 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtbegin.o - .jcr 0x00000000006de838 0x8 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtend.o - -.data.rel.ro 0x00000000006de840 0x480 - *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) - .data.rel.ro.local - 0x00000000006de840 0xa0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(libm_error.o) - .data.rel.ro.local - 0x00000000006de8e0 0x3e0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(irc_msg_support.o) - *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) - -.dynamic 0x00000000006decc0 0x1e0 - *(.dynamic) - .dynamic 0x00000000006decc0 0x1e0 /usr/lib/../lib64/crt1.o - 0x00000000006decc0 _DYNAMIC - -.got 0x00000000006deea0 0x158 - *(.got) - .got 0x00000000006deea0 0x158 /usr/lib/../lib64/crt1.o - *(.igot) - 0x00000000006dffe8 . = DATA_SEGMENT_RELRO_END (., (SIZEOF (.got.plt) >= 0x18)?0x18:0x0) - -.got.plt 0x00000000006df000 0x398 - *(.got.plt) - .got.plt 0x00000000006df000 0x398 /usr/lib/../lib64/crt1.o - 0x00000000006df000 _GLOBAL_OFFSET_TABLE_ - *(.igot.plt) - .igot.plt 0x0000000000000000 0x0 /usr/lib/../lib64/crt1.o - -.data 0x00000000006df3c0 0x3ce0 - *(.data .data.* .gnu.linkonce.d.*) - .data 0x00000000006df3c0 0x4 /usr/lib/../lib64/crt1.o - 0x00000000006df3c0 data_start - 0x00000000006df3c0 __data_start - .data 0x00000000006df3c4 0x0 /usr/lib/../lib64/crti.o - *fill* 0x00000000006df3c4 0x4 - .data 0x00000000006df3c8 0x8 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtbegin.o - 0x00000000006df3c8 __dso_handle - .data 0x00000000006df3d0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/for_main.o - *fill* 0x00000000006df3d0 0x10 - .data 0x00000000006df3e0 0x240 rdbfmsua.o - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flclos.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flflun.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltbop.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltdat.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltinq.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stldsp.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stlstr.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(strmbl.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(strmst.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(tbrstn.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flbksp.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flinqr.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flpath.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flsopn.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(ssenvr.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(ssgsym.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stlcuc.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stuclc.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(tbastn.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flglun.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libbridge.a(dcbsrh.o) - .data 0x00000000006df620 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ireadns.o) - *fill* 0x00000000006df620 0x20 - .data 0x00000000006df640 0xd8 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) - .data 0x00000000006df718 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(posapn.o) - .data 0x00000000006df718 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(posapx.o) - .data 0x00000000006df718 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdmsgw.o) - .data 0x00000000006df718 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readdx.o) - .data 0x00000000006df718 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readns.o) - .data 0x00000000006df718 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readsb.o) - .data 0x00000000006df718 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(status.o) - .data 0x00000000006df718 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbint.o) - .data 0x00000000006df718 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbrw.o) - .data 0x00000000006df718 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upb.o) - .data 0x00000000006df718 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wrdlen.o) - .data 0x00000000006df718 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(writdx.o) - .data 0x00000000006df718 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wtstat.o) - .data 0x00000000006df718 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(adn30.o) - *fill* 0x00000000006df718 0x28 - .data 0x00000000006df740 0x7dc /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) - .data 0x00000000006dff1c 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort2.o) - .data 0x00000000006dff1c 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort_exit.o) - .data 0x00000000006dff1c 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort.o) - .data 0x00000000006dff1c 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(conwin.o) - .data 0x00000000006dff1c 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cpbfdx.o) - .data 0x00000000006dff1c 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(drstpl.o) - *fill* 0x00000000006dff1c 0x24 - .data 0x00000000006dff40 0x128 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(dxinit.o) - .data 0x00000000006e0068 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(dxmini.o) - .data 0x00000000006e0068 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(getwin.o) - .data 0x00000000006e0068 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ibfms.o) - .data 0x00000000006e0068 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ichkstr.o) - .data 0x00000000006e0068 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ifxy.o) - .data 0x00000000006e0068 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(invcon.o) - .data 0x00000000006e0068 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(invwin.o) - .data 0x00000000006e0068 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ipkm.o) - .data 0x00000000006e0068 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(irev.o) - .data 0x00000000006e0068 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupm.o) - .data 0x00000000006e0068 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lmsg.o) - .data 0x00000000006e0068 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstrpc.o) - .data 0x00000000006e0068 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstrps.o) - .data 0x00000000006e0068 0x8 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(msgwrt.o) - .data 0x00000000006e0070 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(newwin.o) - .data 0x00000000006e0070 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nmwrd.o) - .data 0x00000000006e0070 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nxtwin.o) - .data 0x00000000006e0070 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ovrbs1.o) - .data 0x00000000006e0070 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(padmsg.o) - .data 0x00000000006e0070 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkb.o) - .data 0x00000000006e0070 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkbs1.o) - .data 0x00000000006e0070 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkc.o) - .data 0x00000000006e0070 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pktdd.o) - .data 0x00000000006e0070 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkvs01.o) - .data 0x00000000006e0070 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkvs1.o) - *fill* 0x00000000006e0070 0x10 - .data 0x00000000006e0080 0x68 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdbfdx.o) - .data 0x00000000006e00e8 0x8 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdcmps.o) - .data 0x00000000006e00f0 0x8 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdtree.o) - .data 0x00000000006e00f8 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdusdx.o) - .data 0x00000000006e00f8 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readmg.o) - .data 0x00000000006e00f8 0x8 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(seqsdx.o) - .data 0x00000000006e0100 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(stndrd.o) - .data 0x00000000006e0100 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(string.o) - .data 0x00000000006e0100 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strnum.o) - .data 0x00000000006e0100 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strsuc.o) - .data 0x00000000006e0100 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(trybump.o) - .data 0x00000000006e0100 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upbb.o) - .data 0x00000000006e0100 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upc.o) - .data 0x00000000006e0100 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(usrtpl.o) - .data 0x00000000006e0100 0x3a /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(capit.o) - *fill* 0x00000000006e013a 0x2 - .data 0x00000000006e013c 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chrtrna.o) - .data 0x00000000006e013c 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chrtrn.o) - .data 0x00000000006e013c 0xa /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cktaba.o) - *fill* 0x00000000006e0146 0x2 - .data 0x00000000006e0148 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cnved4.o) - .data 0x00000000006e0148 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(digit.o) - .data 0x00000000006e0148 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(elemdx.o) - .data 0x00000000006e0148 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(getlens.o) - .data 0x00000000006e0148 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(gets1loc.o) - .data 0x00000000006e0148 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(i4dy.o) - .data 0x00000000006e0148 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(idn30.o) - .data 0x00000000006e0148 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(igetdate.o) - .data 0x00000000006e0148 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(istdesc.o) - .data 0x00000000006e0148 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupb.o) - .data 0x00000000006e0148 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupbs01.o) - .data 0x00000000006e0148 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(jstchr.o) - .data 0x00000000006e0148 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(jstnum.o) - .data 0x00000000006e0148 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstjpb.o) - .data 0x00000000006e0148 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(makestab.o) - .data 0x00000000006e0148 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(mvb.o) - *fill* 0x00000000006e0148 0x18 - .data 0x00000000006e0160 0x46 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemock.o) - *fill* 0x00000000006e01a6 0x2 - .data 0x00000000006e01a8 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtab.o) - .data 0x00000000006e01a8 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbax.o) - .data 0x00000000006e01a8 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nenuaa.o) - .data 0x00000000006e01a8 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nenubd.o) - .data 0x00000000006e01a8 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numbck.o) - .data 0x00000000006e01a8 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numtab.o) - .data 0x00000000006e01a8 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbt.o) - .data 0x00000000006e01a8 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parstr.o) - .data 0x00000000006e01a8 0xc /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parusr.o) - *fill* 0x00000000006e01b4 0xc - .data 0x00000000006e01c0 0x60 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parutg.o) - .data 0x00000000006e0220 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rcstpl.o) - .data 0x00000000006e0220 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdmsgb.o) - .data 0x00000000006e0220 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(restd.o) - .data 0x00000000006e0220 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rsvfvm.o) - .data 0x00000000006e0220 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strcln.o) - .data 0x00000000006e0220 0x4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabsub.o) - .data 0x00000000006e0224 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(uptdd.o) - .data 0x00000000006e0224 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wrdesc.o) - .data 0x00000000006e0224 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cadn30.o) - .data 0x00000000006e0224 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chekstab.o) - .data 0x00000000006e0224 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(inctab.o) - .data 0x00000000006e0224 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbb.o) - .data 0x00000000006e0224 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbd.o) - .data 0x00000000006e0224 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numtbd.o) - .data 0x00000000006e0224 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabent.o) - .data 0x00000000006e0224 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(valx.o) - .data 0x00000000006e0224 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rjust.o) - *fill* 0x00000000006e0224 0x4 - .data 0x00000000006e0228 0x10 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_init.o) - 0x00000000006e0228 for__segv_default_msg - 0x00000000006e0230 for__l_current_arg - .data 0x00000000006e0238 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_io_util.o) - .data 0x00000000006e0238 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open.o) - .data 0x00000000006e0238 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_preconnected_units_init.o) - *fill* 0x00000000006e0238 0x8 - .data 0x00000000006e0240 0x140 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_reentrancy.o) - 0x00000000006e0240 for__static_threadstor_private - .data 0x00000000006e0380 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_secnds.o) - .data 0x00000000006e0380 0x80 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_stop.o) - .data 0x00000000006e0400 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_vm.o) - .data 0x00000000006e0400 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wint_fmt.o) - .data 0x00000000006e0400 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq_fmt.o) - .data 0x00000000006e0400 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq_lis.o) - .data 0x00000000006e0400 0x4 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio.o) - .data 0x00000000006e0404 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open_proc.o) - .data 0x00000000006e0404 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio_wrap.o) - .data 0x00000000006e0404 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_text_to_int.o) - .data 0x00000000006e0404 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_f.o) - .data 0x00000000006e0404 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_d.o) - .data 0x00000000006e0404 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_g.o) - .data 0x00000000006e0404 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cray.o) - .data 0x00000000006e0404 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ibm_short.o) - .data 0x00000000006e0404 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ibm_long.o) - .data 0x00000000006e0404 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ieee_double.o) - .data 0x00000000006e0404 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ieee_single.o) - .data 0x00000000006e0404 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_close.o) - .data 0x00000000006e0404 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_close_proc.o) - .data 0x00000000006e0404 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_default_io_sizes_env_init.o) - .data 0x00000000006e0404 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_desc_item.o) - *fill* 0x00000000006e0404 0x1c - .data 0x00000000006e0420 0x1e80 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_diags_intel.o) - .data 0x00000000006e22a0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_exit.o) - .data 0x00000000006e22a0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_exit_handler.o) - .data 0x00000000006e22a0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_comp.o) - .data 0x00000000006e22a0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_val.o) - .data 0x00000000006e22a0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_get.o) - .data 0x00000000006e22a0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_intrp_fmt.o) - .data 0x00000000006e22a0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_ldir_wfs.o) - .data 0x00000000006e22a0 0xc /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_lub_mgt.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_need_lf.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_put.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(tbk_traceback.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt__globals.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_int_to_text.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_data_to_text.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_log_to_text.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_text_to_data.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_text_to_log.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_t.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_s.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_x.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_s.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_t.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_s_to_a.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_t_to_a.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_nan_s.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_nan_t.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_x.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_x_to_a.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_nan_x.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_globals.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_pow_ten_53.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_pow_ten_64.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_pow_ten_128.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(fetestexcept.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_stub.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_stub.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_ct.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_ct.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_gen.o) - .data 0x00000000006e22ac 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_gen.o) - *fill* 0x00000000006e22ac 0x14 - .data 0x00000000006e22c0 0x3c0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(libm_error.o) - 0x00000000006e2660 __libm_pmatherrf - 0x00000000006e2668 __libm_pmatherr - 0x00000000006e2670 __libm_pmatherrl - 0x00000000006e267c _LIB_VERSIONIMF - .data 0x00000000006e2680 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(matherrf.o) - .data 0x00000000006e2680 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(matherrl.o) - .data 0x00000000006e2680 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(matherr.o) - .data 0x00000000006e2680 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ints2q.o) - .data 0x00000000006e2680 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(qcomp.o) - .data 0x00000000006e2680 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fp2q.o) - .data 0x00000000006e2680 0x28 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(q2fp.o) - .data 0x00000000006e26a8 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(tbk_display.o) - .data 0x00000000006e26a8 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(tbk_backtrace.o) - .data 0x00000000006e26a8 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(cpu_feature_disp.o) - .data 0x00000000006e26a8 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemcpy.o) - .data 0x00000000006e26a8 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemmove.o) - .data 0x00000000006e26a8 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemset.o) - *fill* 0x00000000006e26a8 0x18 - .data 0x00000000006e26c0 0x160 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(new_proc_init.o) - .data 0x00000000006e2820 0x28 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ia32_addsubq.o) - .data 0x00000000006e2848 0x30 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ia32_divq.o) - .data 0x00000000006e2878 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strcpy.o) - .data 0x00000000006e2878 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strncpy.o) - .data 0x00000000006e2878 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strlen.o) - .data 0x00000000006e2878 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strchr.o) - .data 0x00000000006e2878 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strncmp.o) - .data 0x00000000006e2878 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strcat.o) - .data 0x00000000006e2878 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strncat.o) - .data 0x00000000006e2878 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_memcpy_pp.o) - .data 0x00000000006e2878 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_memset_pp.o) - .data 0x00000000006e2878 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_memcpy.o) - .data 0x00000000006e2878 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_rep_memcpy.o) - .data 0x00000000006e2878 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_memmove.o) - .data 0x00000000006e2878 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_rep_memmove.o) - .data 0x00000000006e2878 0x8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(irc_msg_support.o) - .data 0x00000000006e2880 0x820 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_mem_ops.o) - 0x00000000006e3080 __libirc_largest_cache_size - 0x00000000006e3084 __libirc_largest_cache_size_half - 0x00000000006e3088 __libirc_data_cache_size - 0x00000000006e308c __libirc_data_cache_size_half - .data 0x00000000006e30a0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(proc_init_utils.o) - .data 0x00000000006e30a0 0x0 /usr/lib64/libc_nonshared.a(elf-init.oS) - .data 0x00000000006e30a0 0x0 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2//libgcc.a(_powidf2.o) - .data 0x00000000006e30a0 0x0 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtend.o - .data 0x00000000006e30a0 0x0 /usr/lib/../lib64/crtn.o - -.tm_clone_table - 0x00000000006e30a0 0x0 - .tm_clone_table - 0x00000000006e30a0 0x0 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtbegin.o - .tm_clone_table - 0x00000000006e30a0 0x0 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtend.o - -.data1 - *(.data1) - 0x00000000006e30a0 _edata = . - 0x00000000006e30a0 PROVIDE (edata, .) - 0x00000000006e30a0 . = . - 0x00000000006e30a0 __bss_start = . - -.bss 0x00000000006e30c0 0x2ebcf68 - *(.dynbss) - .dynbss 0x00000000006e30c0 0x18 /usr/lib/../lib64/crt1.o - 0x00000000006e30c0 stdin@@GLIBC_2.2.5 - 0x00000000006e30c8 stderr@@GLIBC_2.2.5 - 0x00000000006e30d0 stdout@@GLIBC_2.2.5 - *(.bss .bss.* .gnu.linkonce.b.*) - .bss 0x00000000006e30d8 0x0 /usr/lib/../lib64/crt1.o - .bss 0x00000000006e30d8 0x0 /usr/lib/../lib64/crti.o - .bss 0x00000000006e30d8 0x10 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtbegin.o - .bss 0x00000000006e30e8 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/for_main.o - *fill* 0x00000000006e30e8 0x18 - .bss 0x00000000006e3100 0x91360 rdbfmsua.o - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flclos.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flflun.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltbop.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltdat.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltinq.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stldsp.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stlstr.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(strmbl.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(strmst.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(tbrstn.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flbksp.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flinqr.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flpath.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flsopn.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(ssenvr.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(ssgsym.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stlcuc.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stuclc.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(tbastn.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flglun.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libbridge.a(dcbsrh.o) - .bss 0x0000000000774460 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ireadns.o) - .bss 0x0000000000774460 0x4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) - *fill* 0x0000000000774464 0x1c - .bss 0x0000000000774480 0xc350 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(posapn.o) - *fill* 0x00000000007807d0 0x30 - .bss 0x0000000000780800 0xc350 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(posapx.o) - .bss 0x000000000078cb50 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdmsgw.o) - .bss 0x000000000078cb50 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readdx.o) - .bss 0x000000000078cb50 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readns.o) - .bss 0x000000000078cb50 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readsb.o) - .bss 0x000000000078cb50 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(status.o) - .bss 0x000000000078cb50 0x8 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbint.o) - .bss 0x000000000078cb58 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbrw.o) - .bss 0x000000000078cb58 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upb.o) - .bss 0x000000000078cb58 0x4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wrdlen.o) - *fill* 0x000000000078cb5c 0x24 - .bss 0x000000000078cb80 0xc350 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(writdx.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wtstat.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(adn30.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort2.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort_exit.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(conwin.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cpbfdx.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(drstpl.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(dxinit.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(dxmini.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(getwin.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ibfms.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ichkstr.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ifxy.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(invcon.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(invwin.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ipkm.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(irev.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupm.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lmsg.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstrpc.o) - .bss 0x0000000000798ed0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstrps.o) - *fill* 0x0000000000798ed0 0x30 - .bss 0x0000000000798f00 0xc350 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(msgwrt.o) - .bss 0x00000000007a5250 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(newwin.o) - .bss 0x00000000007a5250 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nmwrd.o) - .bss 0x00000000007a5250 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nxtwin.o) - .bss 0x00000000007a5250 0x4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ovrbs1.o) - .bss 0x00000000007a5254 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(padmsg.o) - .bss 0x00000000007a5254 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkb.o) - .bss 0x00000000007a5254 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkbs1.o) - .bss 0x00000000007a5254 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkc.o) - .bss 0x00000000007a5254 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pktdd.o) - .bss 0x00000000007a5254 0x4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkvs01.o) - .bss 0x00000000007a5258 0x4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkvs1.o) - *fill* 0x00000000007a525c 0x24 - .bss 0x00000000007a5280 0xc350 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdbfdx.o) - .bss 0x00000000007b15d0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdcmps.o) - *fill* 0x00000000007b15d0 0x30 - .bss 0x00000000007b1600 0x13880 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdtree.o) - .bss 0x00000000007c4e80 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdusdx.o) - .bss 0x00000000007c4e80 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readmg.o) - .bss 0x00000000007c4e80 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(seqsdx.o) - .bss 0x00000000007c4e80 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(stndrd.o) - .bss 0x00000000007c4e80 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(string.o) - .bss 0x00000000007c4e80 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strnum.o) - .bss 0x00000000007c4e80 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strsuc.o) - .bss 0x00000000007c4e80 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(trybump.o) - .bss 0x00000000007c4e80 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upbb.o) - .bss 0x00000000007c4e80 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upc.o) - .bss 0x00000000007c4e80 0x3a980 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(usrtpl.o) - .bss 0x00000000007ff800 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(capit.o) - .bss 0x00000000007ff800 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chrtrna.o) - .bss 0x00000000007ff800 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chrtrn.o) - .bss 0x00000000007ff800 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cktaba.o) - .bss 0x00000000007ff800 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cnved4.o) - .bss 0x00000000007ff800 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(digit.o) - .bss 0x00000000007ff800 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(elemdx.o) - .bss 0x00000000007ff800 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(getlens.o) - .bss 0x00000000007ff800 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(gets1loc.o) - .bss 0x00000000007ff800 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(i4dy.o) - .bss 0x00000000007ff800 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(idn30.o) - .bss 0x00000000007ff800 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(igetdate.o) - .bss 0x00000000007ff800 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(istdesc.o) - .bss 0x00000000007ff800 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupb.o) - .bss 0x00000000007ff800 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupbs01.o) - .bss 0x00000000007ff800 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(jstchr.o) - .bss 0x00000000007ff800 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(jstnum.o) - .bss 0x00000000007ff800 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstjpb.o) - .bss 0x00000000007ff800 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(makestab.o) - .bss 0x00000000007ff800 0x30d40 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(mvb.o) - .bss 0x0000000000830540 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemock.o) - .bss 0x0000000000830540 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtab.o) - .bss 0x0000000000830540 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbax.o) - .bss 0x0000000000830540 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nenuaa.o) - .bss 0x0000000000830540 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nenubd.o) - .bss 0x0000000000830540 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numbck.o) - .bss 0x0000000000830540 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numtab.o) - .bss 0x0000000000830540 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbt.o) - .bss 0x0000000000830540 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parstr.o) - .bss 0x0000000000830540 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parusr.o) - .bss 0x0000000000830540 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parutg.o) - .bss 0x0000000000830540 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rcstpl.o) - .bss 0x0000000000830540 0x186a0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdmsgb.o) - .bss 0x0000000000848be0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(restd.o) - .bss 0x0000000000848be0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rsvfvm.o) - .bss 0x0000000000848be0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strcln.o) - .bss 0x0000000000848be0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabsub.o) - .bss 0x0000000000848be0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(uptdd.o) - .bss 0x0000000000848be0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wrdesc.o) - .bss 0x0000000000848be0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cadn30.o) - .bss 0x0000000000848be0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chekstab.o) - .bss 0x0000000000848be0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(inctab.o) - .bss 0x0000000000848be0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbb.o) - .bss 0x0000000000848be0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbd.o) - .bss 0x0000000000848be0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numtbd.o) - .bss 0x0000000000848be0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabent.o) - .bss 0x0000000000848be0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(valx.o) - .bss 0x0000000000848be0 0x0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rjust.o) - .bss 0x0000000000848be0 0x48 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_init.o) - 0x0000000000848bf0 for__l_excpt_info - 0x0000000000848bfc for__l_fpe_mask - 0x0000000000848c00 for__l_undcnt - 0x0000000000848c04 for__l_ovfcnt - 0x0000000000848c08 for__l_div0cnt - 0x0000000000848c0c for__l_invcnt - 0x0000000000848c10 for__l_inecnt - 0x0000000000848c14 for__l_fmtrecl - 0x0000000000848c18 for__l_ufmtrecl - 0x0000000000848c1c for__l_blocksize - 0x0000000000848c20 for__l_buffercount - .bss 0x0000000000848c28 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_io_util.o) - *fill* 0x0000000000848c28 0x18 - .bss 0x0000000000848c40 0x440 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open.o) - 0x0000000000849060 for__l_exit_hand_decl - .bss 0x0000000000849080 0x15e0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_preconnected_units_init.o) - .bss 0x000000000084a660 0x18 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_reentrancy.o) - 0x000000000084a670 for__reentrancy_mode - 0x000000000084a674 for__reentrancy_initialized - .bss 0x000000000084a678 0x4 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_secnds.o) - .bss 0x000000000084a67c 0x8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_stop.o) - .bss 0x000000000084a684 0x10 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_vm.o) - .bss 0x000000000084a694 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wint_fmt.o) - .bss 0x000000000084a694 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq_fmt.o) - .bss 0x000000000084a694 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq_lis.o) - *fill* 0x000000000084a694 0x4 - .bss 0x000000000084a698 0xd8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio.o) - 0x000000000084a740 for__aio_global_mutex - .bss 0x000000000084a770 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_open_proc.o) - .bss 0x000000000084a770 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio_wrap.o) - .bss 0x000000000084a770 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_text_to_int.o) - .bss 0x000000000084a770 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_f.o) - .bss 0x000000000084a770 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_d.o) - .bss 0x000000000084a770 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_vax_g.o) - .bss 0x000000000084a770 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cray.o) - .bss 0x000000000084a770 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ibm_short.o) - .bss 0x000000000084a770 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ibm_long.o) - .bss 0x000000000084a770 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ieee_double.o) - .bss 0x000000000084a770 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_ieee_single.o) - .bss 0x000000000084a770 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_close.o) - .bss 0x000000000084a770 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_close_proc.o) - .bss 0x000000000084a770 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_default_io_sizes_env_init.o) - .bss 0x000000000084a770 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_desc_item.o) - *fill* 0x000000000084a770 0x10 - .bss 0x000000000084a780 0x260 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_diags_intel.o) - 0x000000000084a9a0 for__user_iomsg_buf - 0x000000000084a9a8 for__user_iomsg_len - .bss 0x000000000084a9e0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_exit.o) - .bss 0x000000000084a9e0 0x4 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_exit_handler.o) - 0x000000000084a9e0 for__l_exit_termination - .bss 0x000000000084a9e4 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_comp.o) - .bss 0x000000000084a9e4 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_fmt_val.o) - .bss 0x000000000084a9e4 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_get.o) - .bss 0x000000000084a9e4 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_intrp_fmt.o) - .bss 0x000000000084a9e4 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_ldir_wfs.o) - *fill* 0x000000000084a9e4 0x1c - .bss 0x000000000084aa00 0x2760 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_lub_mgt.o) - 0x000000000084aa20 for__lub_table - .bss 0x000000000084d160 0x20a0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_need_lf.o) - 0x000000000084d160 for__file_info_hash_table - .bss 0x000000000084f200 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_put.o) - .bss 0x000000000084f200 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_wseq.o) - .bss 0x000000000084f200 0x4 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(tbk_traceback.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt__globals.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_int_to_text.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_data_to_text.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_log_to_text.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_text_to_data.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_text_to_log.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_t.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_s.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvt_cvtas_x.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_s.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_t.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_s_to_a.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_t_to_a.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_nan_s.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_nan_t.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_a_to_x.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_x_to_a.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_nan_x.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_globals.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_pow_ten_53.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_pow_ten_64.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(cvtas_pow_ten_128.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(fetestexcept.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_stub.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_stub.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_ct.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_ct.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_gen.o) - .bss 0x000000000084f204 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_gen.o) - *fill* 0x000000000084f204 0x4 - .bss 0x000000000084f208 0x8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(libm_error.o) - .bss 0x000000000084f210 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(matherrf.o) - .bss 0x000000000084f210 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(matherrl.o) - .bss 0x000000000084f210 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(matherr.o) - .bss 0x000000000084f210 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ints2q.o) - .bss 0x000000000084f210 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(qcomp.o) - .bss 0x000000000084f210 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fp2q.o) - .bss 0x000000000084f210 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(q2fp.o) - .bss 0x000000000084f210 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(tbk_display.o) - *fill* 0x000000000084f210 0x10 - .bss 0x000000000084f220 0x180 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(tbk_backtrace.o) - 0x000000000084f2c0 tbk__jmp_env - .bss 0x000000000084f3a0 0x10 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(cpu_feature_disp.o) - 0x000000000084f3a0 __intel_cpu_feature_indicator - 0x000000000084f3a8 __intel_cpu_feature_indicator_x - .bss 0x000000000084f3b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemcpy.o) - .bss 0x000000000084f3b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemmove.o) - .bss 0x000000000084f3b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemset.o) - .bss 0x000000000084f3b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(new_proc_init.o) - .bss 0x000000000084f3b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ia32_addsubq.o) - .bss 0x000000000084f3b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ia32_divq.o) - .bss 0x000000000084f3b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strcpy.o) - .bss 0x000000000084f3b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strncpy.o) - .bss 0x000000000084f3b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strlen.o) - .bss 0x000000000084f3b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strchr.o) - .bss 0x000000000084f3b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strncmp.o) - .bss 0x000000000084f3b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strcat.o) - .bss 0x000000000084f3b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(sse2_strncat.o) - .bss 0x000000000084f3b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_memcpy_pp.o) - .bss 0x000000000084f3b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_memset_pp.o) - .bss 0x000000000084f3b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_memcpy.o) - .bss 0x000000000084f3b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_rep_memcpy.o) - .bss 0x000000000084f3b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_memmove.o) - .bss 0x000000000084f3b0 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(intel_ssse3_rep_memmove.o) - *fill* 0x000000000084f3b0 0x10 - .bss 0x000000000084f3c0 0x420 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(irc_msg_support.o) - .bss 0x000000000084f7e0 0x60 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fast_mem_ops.o) - 0x000000000084f824 __libirc_mem_ops_method - 0x000000000084f828 __libirc_largest_cachelinesize - .bss 0x000000000084f840 0x0 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(proc_init_utils.o) - .bss 0x000000000084f840 0x0 /usr/lib64/libc_nonshared.a(elf-init.oS) - .bss 0x000000000084f840 0x0 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2//libgcc.a(_powidf2.o) - .bss 0x000000000084f840 0x0 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtend.o - .bss 0x000000000084f840 0x0 /usr/lib/../lib64/crtn.o - *(COMMON) - COMMON 0x000000000084f840 0x1c4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flflun.o) - 0x000000000084f840 gmbdta_ - *fill* 0x000000000084fa04 0x3c - COMMON 0x000000000084fa40 0x484 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) - 0x000000000084fa40 stbfr_ - 0x000000000084fb40 nulbfr_ - 0x000000000084fbc0 msgfmt_ - 0x000000000084fc40 msgcwd_ - 0x000000000084fec0 quiet_ - *fill* 0x000000000084fec4 0x1c - COMMON 0x000000000084fee0 0x2c /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdmsgw.o) - 0x000000000084fee0 hrdwrd_ - *fill* 0x000000000084ff0c 0x34 - COMMON 0x000000000084ff40 0x13d628 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readns.o) - 0x000000000084ff40 tables_ - *fill* 0x000000000098d568 0x18 - COMMON 0x000000000098d580 0x192e80 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readsb.o) - 0x000000000098d580 bitbuf_ - 0x0000000000b20380 unptyp_ - COMMON 0x0000000000b20400 0x753150 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbint.o) - 0x0000000000b20400 usrint_ - 0x0000000001273480 usrstr_ - *fill* 0x0000000001273550 0x30 - COMMON 0x0000000001273580 0x804 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wrdlen.o) - 0x0000000001273580 charac_ - *fill* 0x0000000001273d84 0x3c - COMMON 0x0000000001273dc0 0xbbe88c /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(writdx.o) - 0x0000000001273dc0 dxtab_ - 0x00000000012740c0 tababd_ - *fill* 0x0000000001e3264c 0x34 - COMMON 0x0000000001e32680 0x188d4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) - 0x0000000001e32680 maxcmp_ - 0x0000000001e326a0 msgstd_ - 0x0000000001e326c0 reptab_ - 0x0000000001e32740 bufrmg_ - 0x0000000001e3eaa0 msgcmp_ - 0x0000000001e3eac0 acmode_ - 0x0000000001e3eb00 bufrsr_ - 0x0000000001e4af00 dateln_ - 0x0000000001e4af20 mrgcom_ - 0x0000000001e4af40 padesc_ - *fill* 0x0000000001e4af54 0x2c - COMMON 0x0000000001e4af80 0xfc /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(msgwrt.o) - 0x0000000001e4af80 s01cm_ - 0x0000000001e4b000 sect01_ - *fill* 0x0000000001e4b07c 0x4 - COMMON 0x0000000001e4b080 0x27100 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdtree.o) - 0x0000000001e4b080 usrbit_ - COMMON 0x0000000001e72180 0x4a3c0 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(string.o) - 0x0000000001e72180 stcach_ - 0x0000000001eba600 stords_ - COMMON 0x0000000001ebc540 0x4 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parutg.o) - 0x0000000001ebc540 utgprm_ - *fill* 0x0000000001ebc544 0x3c - COMMON 0x0000000001ebc580 0x16e3600 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rcstpl.o) - 0x0000000001ebc580 usrtmp_ - COMMON 0x000000000359fb80 0x10 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabsub.o) - 0x000000000359fb80 tabccc_ - COMMON 0x000000000359fb90 0xc /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_init.o) - 0x000000000359fb90 for__a_argv - 0x000000000359fb98 for__l_argc - *fill* 0x000000000359fb9c 0x4 - COMMON 0x000000000359fba0 0x480 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_aio.o) - 0x000000000359fba0 thread_count_mutex - 0x000000000359fbc8 threads_in_flight_mutex - 0x000000000359fbf0 for__pthread_mutex_unlock_ptr - 0x000000000359fbf8 for__pthread_mutex_init_ptr - 0x000000000359fc00 for__pthread_mutex_lock_ptr - 0x000000000359fc20 for__aio_lub_table - COMMON 0x00000000035a0020 0x8 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libifcore.a(for_diags_intel.o) - 0x00000000035a0020 message_catalog - 0x00000000035a0028 . = ALIGN ((. != 0x0)?0x8:0x1) - -.lbss - *(.dynlbss) - *(.lbss .lbss.* .gnu.linkonce.lb.*) - *(LARGE_COMMON) - 0x00000000035a0028 . = ALIGN (0x8) - -.lrodata - *(.lrodata .lrodata.* .gnu.linkonce.lr.*) - -.ldata 0x00000000039a0028 0x0 - *(.ldata .ldata.* .gnu.linkonce.l.*) - 0x00000000039a0028 . = ALIGN ((. != 0x0)?0x8:0x1) - 0x00000000039a0028 . = ALIGN (0x8) - 0x00000000039a0028 _end = . - 0x00000000039a0028 PROVIDE (end, .) - 0x00000000039a0028 . = DATA_SEGMENT_END (.) - -.stab - *(.stab) - -.stabstr - *(.stabstr) - -.stab.excl - *(.stab.excl) - -.stab.exclstr - *(.stab.exclstr) - -.stab.index - *(.stab.index) - -.stab.indexstr - *(.stab.indexstr) - -.comment 0x0000000000000000 0x73 - *(.comment) - .comment 0x0000000000000000 0x39 /usr/lib/../lib64/crt1.o - 0x3a (size before relaxing) - .comment 0x0000000000000000 0x3a /usr/lib/../lib64/crti.o - .comment 0x0000000000000039 0x26 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtbegin.o - 0x27 (size before relaxing) - .comment 0x000000000000005f 0x14 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/for_main.o - .comment 0x0000000000000000 0x14 rdbfmsua.o - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flclos.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flflun.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltbop.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltdat.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(fltinq.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stldsp.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stlstr.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(strmbl.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(strmst.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(tbrstn.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flbksp.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flinqr.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flpath.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flsopn.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(ssenvr.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(ssgsym.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stlcuc.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(stuclc.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(tbastn.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libgemlib.a(flglun.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libbridge.a(dcbsrh.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ireadns.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbf.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(posapn.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(posapx.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdmsgw.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readdx.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readns.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readsb.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(status.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbint.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ufbrw.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upb.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wrdlen.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(writdx.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wtstat.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(adn30.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bfrini.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort2.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort_exit.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(bort.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(conwin.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cpbfdx.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(drstpl.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(dxinit.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(dxmini.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(getwin.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ibfms.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ichkstr.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ifxy.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(invcon.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(invwin.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ipkm.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(irev.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupm.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lmsg.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstrpc.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstrps.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(msgwrt.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(newwin.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nmwrd.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nxtwin.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(ovrbs1.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(padmsg.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkb.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkbs1.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkc.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pktdd.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkvs01.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(pkvs1.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdbfdx.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdcmps.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdtree.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdusdx.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(readmg.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(seqsdx.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(stndrd.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(string.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strnum.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strsuc.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(trybump.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upbb.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(upc.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(usrtpl.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(capit.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chrtrna.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chrtrn.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cktaba.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cnved4.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(digit.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(elemdx.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(getlens.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(gets1loc.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(i4dy.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(idn30.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(igetdate.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(istdesc.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupb.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(iupbs01.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(jstchr.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(jstnum.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(lstjpb.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(makestab.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(mvb.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemock.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtab.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbax.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nenuaa.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nenubd.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numbck.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numtab.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(openbt.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parstr.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parusr.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(parutg.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rcstpl.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rdmsgb.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(restd.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rsvfvm.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(strcln.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabsub.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(uptdd.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(wrdesc.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(cadn30.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(chekstab.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(inctab.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbb.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(nemtbd.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(numtbd.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(tabent.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(valx.o) - .comment 0x0000000000000000 0x27 /gpfs/hps/nco/ops/nwprod/gempak.v6.32.0/nawips/os/linux3.0.101_x86_64/lib/libncepBUFR.a(rjust.o) - .comment 0x0000000000000000 0x14 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lroundf_stub.o) - .comment 0x0000000000000000 0x14 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libimf.a(lround_stub.o) - .comment 0x0000000000000000 0x14 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemcpy.o) - .comment 0x0000000000000000 0x14 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemmove.o) - .comment 0x0000000000000000 0x14 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(fastmemset.o) - .comment 0x0000000000000000 0x14 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ia32_addsubq.o) - .comment 0x0000000000000000 0x14 /opt/intel/composer_xe_2015.3.187/compiler/lib/intel64/libirc.a(ia32_divq.o) - .comment 0x0000000000000000 0x27 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2//libgcc.a(_powidf2.o) - .comment 0x0000000000000000 0x27 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2/crtend.o - .comment 0x0000000000000000 0x3a /usr/lib/../lib64/crtn.o - -.debug - *(.debug) - -.line - *(.line) - -.debug_srcinfo - *(.debug_srcinfo) - -.debug_sfnames - *(.debug_sfnames) - -.debug_aranges 0x0000000000000000 0x90 - *(.debug_aranges) - .debug_aranges - 0x0000000000000000 0x30 /usr/lib/../lib64/crt1.o - .debug_aranges - 0x0000000000000030 0x30 /usr/lib64/libc_nonshared.a(elf-init.oS) - .debug_aranges - 0x0000000000000060 0x30 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2//libgcc.a(_powidf2.o) - -.debug_pubnames - 0x0000000000000000 0x5f - *(.debug_pubnames) - .debug_pubnames - 0x0000000000000000 0x25 /usr/lib/../lib64/crt1.o - .debug_pubnames - 0x0000000000000025 0x3a /usr/lib64/libc_nonshared.a(elf-init.oS) - -.debug_info 0x0000000000000000 0x58e - *(.debug_info .gnu.linkonce.wi.*) - .debug_info 0x0000000000000000 0x102 /usr/lib/../lib64/crt1.o - .debug_info 0x0000000000000102 0x130 /usr/lib64/libc_nonshared.a(elf-init.oS) - .debug_info 0x0000000000000232 0x35c /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2//libgcc.a(_powidf2.o) - -.debug_abbrev 0x0000000000000000 0x22d - *(.debug_abbrev) - .debug_abbrev 0x0000000000000000 0x5f /usr/lib/../lib64/crt1.o - .debug_abbrev 0x000000000000005f 0xd4 /usr/lib64/libc_nonshared.a(elf-init.oS) - .debug_abbrev 0x0000000000000133 0xfa /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2//libgcc.a(_powidf2.o) - -.debug_line 0x0000000000000000 0x22c - *(.debug_line) - .debug_line 0x0000000000000000 0x88 /usr/lib/../lib64/crt1.o - .debug_line 0x0000000000000088 0x96 /usr/lib64/libc_nonshared.a(elf-init.oS) - .debug_line 0x000000000000011e 0x10e /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2//libgcc.a(_powidf2.o) - -.debug_frame 0x0000000000000000 0x58 - *(.debug_frame) - .debug_frame 0x0000000000000000 0x58 /usr/lib64/libc_nonshared.a(elf-init.oS) - -.debug_str 0x0000000000000000 0x428 - *(.debug_str) - .debug_str 0x0000000000000000 0x90 /usr/lib/../lib64/crt1.o - 0xd0 (size before relaxing) - .debug_str 0x0000000000000090 0x6a /usr/lib64/libc_nonshared.a(elf-init.oS) - 0xe0 (size before relaxing) - .debug_str 0x00000000000000fa 0x32e /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2//libgcc.a(_powidf2.o) - 0x3ba (size before relaxing) - -.debug_loc 0x0000000000000000 0x1b7 - *(.debug_loc) - .debug_loc 0x0000000000000000 0xfe /usr/lib64/libc_nonshared.a(elf-init.oS) - .debug_loc 0x00000000000000fe 0xb9 /opt/gcc/4.9.2/snos/lib/gcc/x86_64-suse-linux/4.9.2//libgcc.a(_powidf2.o) - -.debug_macinfo - *(.debug_macinfo) - -.debug_weaknames - *(.debug_weaknames) - -.debug_funcnames - *(.debug_funcnames) - -.debug_typenames - *(.debug_typenames) - -.debug_varnames - *(.debug_varnames) - -.debug_pubtypes - *(.debug_pubtypes) - -.debug_ranges 0x0000000000000000 0x50 - *(.debug_ranges) - .debug_ranges 0x0000000000000000 0x50 /usr/lib64/libc_nonshared.a(elf-init.oS) - -.debug_macro - *(.debug_macro) - -.gnu.attributes - *(.gnu.attributes) - -/DISCARD/ - *(.note.GNU-stack) - *(.gnu_debuglink) - *(.gnu.lto_*) -OUTPUT(rdbfmsua elf64-x86-64) diff --git a/util/sorc/rdbfmsua.fd/README b/util/sorc/rdbfmsua.fd/README deleted file mode 100755 index 4128761bcf..0000000000 --- a/util/sorc/rdbfmsua.fd/README +++ /dev/null @@ -1,2 +0,0 @@ -added libgem.a and changed libbufr_4_32 to 64-bit. -also changed -m32 -m64. diff --git a/util/sorc/rdbfmsua.fd/README.new b/util/sorc/rdbfmsua.fd/README.new deleted file mode 100755 index f72a61f38a..0000000000 --- a/util/sorc/rdbfmsua.fd/README.new +++ /dev/null @@ -1,10 +0,0 @@ -added libgem.a and changed libbufr_4_32 to 64-bit. -also changed -m32 -m64. - -# JY - 02/09/2016 -Run the following command before run the "make" - . /nwprod/gempak/.gempak - -# Boi - 09/10/2016 -on CRAY -module load gempak/6.32.0 diff --git a/util/sorc/rdbfmsua.fd/compile_rdbfmsua_wcoss.sh b/util/sorc/rdbfmsua.fd/compile_rdbfmsua_wcoss.sh deleted file mode 100755 index 872434108d..0000000000 --- a/util/sorc/rdbfmsua.fd/compile_rdbfmsua_wcoss.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh - -###################################################################### -# -# Build executable : GFS utilities -# -###################################################################### - -LMOD_EXACT_MATCH=no -source ../../../sorc/machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` - -if [ "$target" = "wcoss_dell_p3" ] || [ "$target" = "wcoss_cray" ] || [ "$target" = "hera" ] ; then - echo " " - echo " You are on WCOSS: $target " - echo " " -elif [ "$target" = "wcoss" ] ; then - echo " " - echo " " - echo " You are on WCOSS: $target " - echo " You do not need to build GFS utilities for GFS V15.0.0 " - echo " " - echo " " - exit -else - echo " " - echo " Your machine is $target is not recognized as a WCOSS machine." - echo " The script $0 can not continue. Aborting!" - echo " " - exit -fi -echo " " - -# Load required modules -source ../../modulefiles/gfs_util.${target} -module list - -set -x - -mkdir -p ../../exec -make -f makefile.$target -make -f makefile.$target clean -mv rdbfmsua ../../exec diff --git a/util/sorc/rdbfmsua.fd/makefile b/util/sorc/rdbfmsua.fd/makefile deleted file mode 100755 index 69d183f394..0000000000 --- a/util/sorc/rdbfmsua.fd/makefile +++ /dev/null @@ -1,84 +0,0 @@ -SHELL=/bin/sh -# -# This makefile was produced by /usr/bin/fmgen at 11:21:07 AM on 10/28/94 -# If it is invoked by the command line -# make -f makefile -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable named a.out. -# -# If it is invoked by the command line -# make -f makefile a.out.prof -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable which profiles -# named a.out.prof. -# -# To remove all the objects but leave the executables use the command line -# make -f makefile clean -# -# To remove everything but the source files use the command line -# make -f makefile clobber -# -# To remove the source files created by /usr/bin/fmgen and this makefile -# use the command line -# make -f makefile void -# -# The parameters SRCS and OBJS should not need to be changed. If, however, -# you need to add a new module add the name of the source module to the -# SRCS parameter and add the name of the resulting object file to the OBJS -# parameter. The new modules are not limited to fortran, but may be C, YACC, -# LEX, or CAL. An explicit rule will need to be added for PASCAL modules. -# -OBJS= rdbfmsua.o - - -# Tunable parameters -# -# FC Name of the fortran compiling system to use -# LDFLAGS Flags to the loader -# LIBS List of libraries -# CMD Name of the executable -# -FC = ifort -# FFLAGS = -O3 -q32 -I${GEMINC} -I${NAWIPS}/os/${NA_OS}/include -# FFLAGS = -I${GEMINC} -I${NAWIPS}/os/${NA_OS}/include -FFLAGS = -I${GEMINC} -I${OS_INC} -# LDFLAGS = -O3 -q32 -s -# LDFLAGS = -Wl,-Map,MAPFILE - -# BRIDGE=/gpfs/dell1/nco/ops/nwpara/gempak.v7.3.1/nawips/os/linux3.10.0_x86_64/lib/libbridge.a -BRIDGE=${GEMOLB}/libbridge.a - -LIBS = ${DECOD_UT_LIB} ${BUFR_LIB4} \ - -L${GEMOLB} -lgemlib -lappl -lsyslib -lcgemlib -lgfortran ${BRIDGE} - -# -L${GEMOLB} -lgemlib -lappl -lsyslib -lcgemlib -lgfortran ${BRIDGE} -# -L/nwprod/gempak/nawips1/os/linux2.6.32_x86_64/lib -lgemlib -lappl -lsyslib -lcgemlib -lbridge -lncepBUFR \ -# -lgfortran - -CMD = rdbfmsua - -# To perform the default compilation, use the first line -# To compile with flowtracing turned on, use the second line -# To compile giving profile additonal information, use the third line -# CFLAGS= -O3 -q32 - -# Lines from here on down should not need to be changed. They are the -# actual rules which make uses to build a.out. -# - -$(CMD): $(OBJS) - $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS) - - -# The following rule reads the required NAWIPS definitions and then recursively -# runs this same makefile with a new target in the spawned shell. -# - -clean: - -rm -f ${OBJS} - -clobber: clean - -rm -f ${CMD} - -void: clobber - -rm -f ${SRCS} makefile diff --git a/util/sorc/rdbfmsua.fd/makefile.hera b/util/sorc/rdbfmsua.fd/makefile.hera deleted file mode 100755 index a1359e6cb8..0000000000 --- a/util/sorc/rdbfmsua.fd/makefile.hera +++ /dev/null @@ -1,88 +0,0 @@ -SHELL=/bin/sh -# -# This makefile was produced by /usr/bin/fmgen at 11:21:07 AM on 10/28/94 -# If it is invoked by the command line -# make -f makefile -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable named a.out. -# -# If it is invoked by the command line -# make -f makefile a.out.prof -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable which profiles -# named a.out.prof. -# -# To remove all the objects but leave the executables use the command line -# make -f makefile clean -# -# To remove everything but the source files use the command line -# make -f makefile clobber -# -# To remove the source files created by /usr/bin/fmgen and this makefile -# use the command line -# make -f makefile void -# -# The parameters SRCS and OBJS should not need to be changed. If, however, -# you need to add a new module add the name of the source module to the -# SRCS parameter and add the name of the resulting object file to the OBJS -# parameter. The new modules are not limited to fortran, but may be C, YACC, -# LEX, or CAL. An explicit rule will need to be added for PASCAL modules. -# -OBJS= rdbfmsua.o - - -# Tunable parameters -# -# FC Name of the fortran compiling system to use -# LDFLAGS Flags to the loader -# LIBS List of libraries -# CMD Name of the executable -# -FC = ifort -# FFLAGS = -O3 -q32 -I${GEMINC} -I${NAWIPS}/os/${NA_OS}/include -# FFLAGS = -I${GEMINC} -I${NAWIPS}/os/${NA_OS}/include -FFLAGS = -I${GEMINC} -I${OS_INC} -# LDFLAGS = -O3 -q32 -s -# LDFLAGS = -Wl,-Map,MAPFILE - -# BRIDGE=/gpfs/dell1/nco/ops/nwpara/gempak.v7.3.1/nawips/os/linux3.10.0_x86_64/lib/libbridge.a -BRIDGE=${GEMOLB}/bridge.a -GFORTRAN=/apps/gcc/6.2.0/lib64 - -LIBS = ${DECOD_UT_LIB} ${BUFR_LIB4} \ - ${GEMLIB}/gemlib.a ${GEMLIB}/appl.a ${GEMLIB}/syslib.a ${GEMLIB}/cgemlib.a -L${GFORTRAN} -lgfortran ${BRIDGE} - -# LIBS = ${DECOD_UT_LIB} ${BUFR_LIB4} \ -# -L${GEMOLB} -lgemlib -lappl -lsyslib -lcgemlib -lgfortran ${BRIDGE} - -# -L${GEMOLB} -lgemlib -lappl -lsyslib -lcgemlib -lgfortran ${BRIDGE} -# -L/nwprod/gempak/nawips1/os/linux2.6.32_x86_64/lib -lgemlib -lappl -lsyslib -lcgemlib -lbridge -lncepBUFR \ -# -lgfortran - -CMD = rdbfmsua - -# To perform the default compilation, use the first line -# To compile with flowtracing turned on, use the second line -# To compile giving profile additonal information, use the third line -# CFLAGS= -O3 -q32 - -# Lines from here on down should not need to be changed. They are the -# actual rules which make uses to build a.out. -# - -$(CMD): $(OBJS) - $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS) - - -# The following rule reads the required NAWIPS definitions and then recursively -# runs this same makefile with a new target in the spawned shell. -# - -clean: - -rm -f ${OBJS} - -clobber: clean - -rm -f ${CMD} - -void: clobber - -rm -f ${SRCS} makefile diff --git a/util/sorc/rdbfmsua.fd/makefile.wcoss_cray b/util/sorc/rdbfmsua.fd/makefile.wcoss_cray deleted file mode 100755 index 69d183f394..0000000000 --- a/util/sorc/rdbfmsua.fd/makefile.wcoss_cray +++ /dev/null @@ -1,84 +0,0 @@ -SHELL=/bin/sh -# -# This makefile was produced by /usr/bin/fmgen at 11:21:07 AM on 10/28/94 -# If it is invoked by the command line -# make -f makefile -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable named a.out. -# -# If it is invoked by the command line -# make -f makefile a.out.prof -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable which profiles -# named a.out.prof. -# -# To remove all the objects but leave the executables use the command line -# make -f makefile clean -# -# To remove everything but the source files use the command line -# make -f makefile clobber -# -# To remove the source files created by /usr/bin/fmgen and this makefile -# use the command line -# make -f makefile void -# -# The parameters SRCS and OBJS should not need to be changed. If, however, -# you need to add a new module add the name of the source module to the -# SRCS parameter and add the name of the resulting object file to the OBJS -# parameter. The new modules are not limited to fortran, but may be C, YACC, -# LEX, or CAL. An explicit rule will need to be added for PASCAL modules. -# -OBJS= rdbfmsua.o - - -# Tunable parameters -# -# FC Name of the fortran compiling system to use -# LDFLAGS Flags to the loader -# LIBS List of libraries -# CMD Name of the executable -# -FC = ifort -# FFLAGS = -O3 -q32 -I${GEMINC} -I${NAWIPS}/os/${NA_OS}/include -# FFLAGS = -I${GEMINC} -I${NAWIPS}/os/${NA_OS}/include -FFLAGS = -I${GEMINC} -I${OS_INC} -# LDFLAGS = -O3 -q32 -s -# LDFLAGS = -Wl,-Map,MAPFILE - -# BRIDGE=/gpfs/dell1/nco/ops/nwpara/gempak.v7.3.1/nawips/os/linux3.10.0_x86_64/lib/libbridge.a -BRIDGE=${GEMOLB}/libbridge.a - -LIBS = ${DECOD_UT_LIB} ${BUFR_LIB4} \ - -L${GEMOLB} -lgemlib -lappl -lsyslib -lcgemlib -lgfortran ${BRIDGE} - -# -L${GEMOLB} -lgemlib -lappl -lsyslib -lcgemlib -lgfortran ${BRIDGE} -# -L/nwprod/gempak/nawips1/os/linux2.6.32_x86_64/lib -lgemlib -lappl -lsyslib -lcgemlib -lbridge -lncepBUFR \ -# -lgfortran - -CMD = rdbfmsua - -# To perform the default compilation, use the first line -# To compile with flowtracing turned on, use the second line -# To compile giving profile additonal information, use the third line -# CFLAGS= -O3 -q32 - -# Lines from here on down should not need to be changed. They are the -# actual rules which make uses to build a.out. -# - -$(CMD): $(OBJS) - $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS) - - -# The following rule reads the required NAWIPS definitions and then recursively -# runs this same makefile with a new target in the spawned shell. -# - -clean: - -rm -f ${OBJS} - -clobber: clean - -rm -f ${CMD} - -void: clobber - -rm -f ${SRCS} makefile diff --git a/util/sorc/rdbfmsua.fd/makefile.wcoss_dell_p3 b/util/sorc/rdbfmsua.fd/makefile.wcoss_dell_p3 deleted file mode 100755 index 69d183f394..0000000000 --- a/util/sorc/rdbfmsua.fd/makefile.wcoss_dell_p3 +++ /dev/null @@ -1,84 +0,0 @@ -SHELL=/bin/sh -# -# This makefile was produced by /usr/bin/fmgen at 11:21:07 AM on 10/28/94 -# If it is invoked by the command line -# make -f makefile -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable named a.out. -# -# If it is invoked by the command line -# make -f makefile a.out.prof -# it will compile the fortran modules indicated by SRCS into the object -# modules indicated by OBJS and produce an executable which profiles -# named a.out.prof. -# -# To remove all the objects but leave the executables use the command line -# make -f makefile clean -# -# To remove everything but the source files use the command line -# make -f makefile clobber -# -# To remove the source files created by /usr/bin/fmgen and this makefile -# use the command line -# make -f makefile void -# -# The parameters SRCS and OBJS should not need to be changed. If, however, -# you need to add a new module add the name of the source module to the -# SRCS parameter and add the name of the resulting object file to the OBJS -# parameter. The new modules are not limited to fortran, but may be C, YACC, -# LEX, or CAL. An explicit rule will need to be added for PASCAL modules. -# -OBJS= rdbfmsua.o - - -# Tunable parameters -# -# FC Name of the fortran compiling system to use -# LDFLAGS Flags to the loader -# LIBS List of libraries -# CMD Name of the executable -# -FC = ifort -# FFLAGS = -O3 -q32 -I${GEMINC} -I${NAWIPS}/os/${NA_OS}/include -# FFLAGS = -I${GEMINC} -I${NAWIPS}/os/${NA_OS}/include -FFLAGS = -I${GEMINC} -I${OS_INC} -# LDFLAGS = -O3 -q32 -s -# LDFLAGS = -Wl,-Map,MAPFILE - -# BRIDGE=/gpfs/dell1/nco/ops/nwpara/gempak.v7.3.1/nawips/os/linux3.10.0_x86_64/lib/libbridge.a -BRIDGE=${GEMOLB}/libbridge.a - -LIBS = ${DECOD_UT_LIB} ${BUFR_LIB4} \ - -L${GEMOLB} -lgemlib -lappl -lsyslib -lcgemlib -lgfortran ${BRIDGE} - -# -L${GEMOLB} -lgemlib -lappl -lsyslib -lcgemlib -lgfortran ${BRIDGE} -# -L/nwprod/gempak/nawips1/os/linux2.6.32_x86_64/lib -lgemlib -lappl -lsyslib -lcgemlib -lbridge -lncepBUFR \ -# -lgfortran - -CMD = rdbfmsua - -# To perform the default compilation, use the first line -# To compile with flowtracing turned on, use the second line -# To compile giving profile additonal information, use the third line -# CFLAGS= -O3 -q32 - -# Lines from here on down should not need to be changed. They are the -# actual rules which make uses to build a.out. -# - -$(CMD): $(OBJS) - $(FC) $(LDFLAGS) -o $(@) $(OBJS) $(LIBS) - - -# The following rule reads the required NAWIPS definitions and then recursively -# runs this same makefile with a new target in the spawned shell. -# - -clean: - -rm -f ${OBJS} - -clobber: clean - -rm -f ${CMD} - -void: clobber - -rm -f ${SRCS} makefile diff --git a/util/sorc/rdbfmsua.fd/rdbfmsua.f b/util/sorc/rdbfmsua.fd/rdbfmsua.f deleted file mode 100755 index c2d5088920..0000000000 --- a/util/sorc/rdbfmsua.fd/rdbfmsua.f +++ /dev/null @@ -1,398 +0,0 @@ - PROGRAM RDBFUA -C$$$ MAIN PROGRAM DOCUMENTATION BLOCK -C -C MAIN PROGRAM: RDBFUA -C PRGMMR: J. ATOR ORG: NP12 DATE: 2007-08-13 -C -C ABSTRACT: Upper Air Plotted Data for levels 1000MB; 925MB; 850MB; 700MB; -C 500MB; 400MB; 300MB; 250MB; 200MB; 150MB, and 100MB for the -C following regions: 1)United States; 2)Canada; 3)Alaska; and, -C the 4)Mexico and Caribbean. Note that Alaska includes eastern -C Russia. Also adding South America, Africa, and the Pacific. -C -C PROGRAM HISTORY LOG: -C -C 2007-08-13 J. ATOR -- ORIGINAL AUTHOR -C 2007-08-20 C. Magee -- Added block 25 (eastern Russia) -C 2007-09-20 S. Lilly -- Changing to read blks 60 thru 91. -C 2007-09-20 C. Magee -- Added code to read upper air and metar stn tables -C 2007-09-25 S. Lilly -- Added logic to write statements in order to put STID, -C STNM and TIME on the same line. -C 2007-09-27 C. Magee -- Change output for stntbl.out. Use st_rmbl to remove -C leading blank from reportid if internal write was -C used to convert integer WMO block/stn number to -C char report id. -C 2012-01-24 J. Cahoon -- Modified from original RDBFUA to include -C significant and standard together in output -C 2012-02-15 B. Mabe -- Changed Program name and output file to reflect -C change to output for sig and man data -C 2016-10-18 B. Vuong -- Removed hardwire '/nwprod/dictionaries/' in CALL FL_TBOP -C 2020-01-15 B. Vuong -- Increased dimensional array r8lvl(6,200) -C -C USAGE: -C INPUT FILES: -C UNIT 40 - adpupa dumpfile (contains data from BUFR tank b002/xx001) -C -C sonde.land.tbl -C metar.tbl -C -C OUTPUT FILES: -C UNIT 51 - rdbfmsua.out - contains ASCII upper air data for the desired -C stations. -C UNIT 52 - stnmstbl.out - contains ASCII station table info for use by -C html generator. -C -C SUBPROGRAMS CALLED: -C UNIQUE: -C LIBRARY: BUFRLIB - OPENBF UFBINT -C GEMLIB - FL_TBOP ST_RMBL TB_RSTN -C BRIDGE - DC_BSRH -C -C EXIT STATES: -C COND = 0 - SUCCESSFUL RUN -C -C REMARKS: -C -C ATTRIBUTES: -C LANGUAGE: FORTRAN 90 -C MACHINE : IBM-SP -C -C$$$ - INCLUDE 'GEMPRM.PRM' - INCLUDE 'BRIDGE.PRM' -C*---------------------------------------------------------------------- -C* Set the name of the output file. -C*---------------------------------------------------------------------- - - CHARACTER*(*) FLO, STNO - - PARAMETER ( FLO = 'rdbfmsua.out' ) - PARAMETER ( STNO = 'sonde.idsms.tbl' ) - - REAL*8 BFMSNG - PARAMETER ( BFMSNG = 10.0E10 ) - - PARAMETER ( GPMSNG = -9999.0 ) - PARAMETER ( MAXSTN = 10000 ) - - REAL*8 r8hdr ( 9, 1 ), r8lvl ( 6, 200 ), r8arr( 1, 1 ) - REAL*8 r8tmp ( 6, 100 ), r8out ( 6, 300 ),swpbuf - REAL*8 r8tmptot ( 6, 300 ) - - CHARACTER*8 cmgtag, reportid - CHARACTER stnnam*32, tbchrs*20, state*2, tabcon*2 - CHARACTER ldcoun( LLSTFL )*2, mtcoun ( MAXSTN )*2 - CHARACTER ldstid ( LLSTFL )*8, mtstid ( MAXSTN )*8 - INTEGER ldstnm ( LLSTFL ), mtstnm ( MAXSTN ), ispri - INTEGER itabnum - REAL slat, slon, selv - LOGICAL nomatch, needHeader - -C*---------------------------------------------------------------------- -C* Open and read the sonde land station table. -C*---------------------------------------------------------------------- - CALL FL_TBOP ( 'sonde.land.tbl', - + 'stns', iunltb, iertop ) - IF ( iertop .ne. 0 ) THEN - print*,' error opening sonde land station table' - END IF - - ii = 1 - ierrst = 0 - DO WHILE ( ( ii .le. LLSTFL ) .and. ( ierrst .eq. 0 ) ) - CALL TB_RSTN ( iunltb, ldstid (ii), stnnam, ldstnm (ii), - + state, ldcoun (ii), slat, slon, - + selv, ispri, tbchrs, ierrst ) - ii = ii + 1 - END DO - IF ( ierrst .eq. -1 ) THEN - numua = ii - 1 - END IF -C*---------------------------------------------------------------------- -C* Close the sonde land station table file. -C*---------------------------------------------------------------------- - CALL FL_CLOS ( iunltb, iercls ) -C*---------------------------------------------------------------------- -C* Open and read the metar station table. -C*---------------------------------------------------------------------- - CALL FL_TBOP ( 'metar_stnm.tbl', - + 'stns', iunmtb, iertop ) - IF ( iertop .ne. 0 ) THEN - print*,' error opening metar station table' - END IF - - jj = 1 - ierrst = 0 - DO WHILE ( ( jj .le. MAXSTN ) .and. ( ierrst .eq. 0 ) ) - CALL TB_RSTN ( iunmtb, mtstid (jj), stnnam, mtstnm (jj), - + state, mtcoun(jj), slat, slon, - + selv, ispri, tbchrs, ierrst ) - jj = jj + 1 - END DO - IF ( ierrst .eq. -1 ) THEN - nummet = jj - 1 - END IF -C*---------------------------------------------------------------------- -C* Close the metar station table file. -C*---------------------------------------------------------------------- - CALL FL_CLOS ( iunmtb, iercls ) -C*---------------------------------------------------------------------- -C* Open and initialize the output files. -C*---------------------------------------------------------------------- - - OPEN ( UNIT = 51, FILE = FLO ) - WRITE ( 51, FMT = '(A)' ) 'PARM=PRES;HGHT;TMPK;DWPK;DRCT;SPED' - OPEN ( UNIT = 52, FILE = STNO) - -C*---------------------------------------------------------------------- -C* Open the BUFR file. -C*---------------------------------------------------------------------- - - CALL OPENBF ( 40, 'IN', 40 ) - -C*---------------------------------------------------------------------- -C* Read a BUFR subset from the BUFR file. -C*---------------------------------------------------------------------- - - DO WHILE ( IREADNS ( 40, cmgtag, imgdt ) .eq. 0 ) - - IF ( cmgtag .eq. 'NC002001' ) THEN - -C*---------------------------------------------------------------------- -C* Unpack the header information from this subset. -C*---------------------------------------------------------------------- - - CALL UFBINT ( 40, r8hdr, 9, 1, nlev, - + 'WMOB WMOS CLAT CLON SELV YEAR MNTH DAYS HOUR' ) - - IF ( ( ( r8hdr(1,1) .ge. 60 ) .and. - + ( r8hdr(1,1) .le. 91 ) ) .or. - + ( r8hdr(1,1) .eq. 25 ) ) THEN - -C*---------------------------------------------------------------------- -C* Unpack the level information from this subset. -C* and replicate for VISG =2,4,and 32 -C*---------------------------------------------------------------------- - levelit = 0 - needHeader = .true. - nlevtot = 0 - DO WHILE ( levelit .le. 2 ) - IF ( levelit .eq. 0 ) THEN - CALL UFBINT ( 40, r8lvl, 6, 50, nlev, - + 'VSIG=2 PRLC GP10 TMDB TMDP WDIR WSPD' ) - ELSE IF ( levelit .eq. 1 ) THEN - CALL UFBINT ( 40, r8lvl, 6, 50, nlev, - + 'VSIG=4 PRLC GP10 TMDB TMDP WDIR WSPD' ) - ELSE IF ( levelit .eq. 2 ) THEN - CALL UFBINT ( 40, r8lvl, 6, 50, nlev, - + 'VSIG=32 PRLC GP10 TMDB TMDP WDIR WSPD' ) - END IF - IF ( nlev .gt. 0 ) THEN -C*---------------------------------------------------------------------- -C* Find the corresponding 3 or 4 character ID -C* in the sonde land station table. Store into -C* reportid only if non-blank. -C*---------------------------------------------------------------------- - iblkstn = NINT( r8hdr(1,1)*1000 + r8hdr(2,1) ) - nomatch = .true. - CALL DC_BSRH ( iblkstn, ldstnm, numua, - + ii, iersrh ) - IF ( iersrh .ge. 0 ) THEN - reportid = ldstid(ii) - tabcon = ldcoun(ii) - itabnum = ldstnm(ii) - IF ( ldstid (ii) .ne. ' ') THEN - nomatch = .false. - END IF - END IF -C*---------------------------------------------------------------------- -C* Either no match in sonde land table or tdstid -C* was found but ldstid was blank, so check metar -C* table for match and non-blank char id. -C*---------------------------------------------------------------------- - IF ( nomatch ) THEN - mblkstn = INT( iblkstn * 10 ) - CALL DC_BSRH ( mblkstn, mtstnm, nummet, - + jj, iersrh ) - IF ( iersrh .ge. 0 ) THEN - reportid = mtstid(jj) - tabcon = mtcoun(jj) - itabnum = mtstnm(jj) - nomatch = .false. - END IF - END IF -C*---------------------------------------------------------------------- -C* If no header, build it -C*---------------------------------------------------------------------- - IF ( needHeader ) THEN -C*---------------------------------------------------------------------- -C* Write the data to the output file. -C*---------------------------------------------------------------------- - IF ( reportid .ne. ' ' ) THEN -C*---------------------------------------------------------------------- -C* 3- or 4-char ID found. -C*---------------------------------------------------------------------- - WRITE ( 51, - + FMT = '(/,A,A5,3X,A,I2,I3.3,3x,A,3I2.2,A,2I2.2)' ) - + 'STID=', reportid(1:5), - + 'STNM=', INT(r8hdr(1,1)), INT(r8hdr(2,1)), - + 'TIME=', MOD(NINT(r8hdr(6,1)),100), - + NINT(r8hdr(7,1)), NINT(r8hdr(8,1)), - + '/', NINT(r8hdr(9,1)), 0 - WRITE ( 51, - + FMT = '(2(A,F7.2,1X),A,F7.1)' ) - + 'SLAT=', r8hdr(3,1), - + 'SLON=', r8hdr(4,1), - + 'SELV=', r8hdr(5,1) - ELSE -C*---------------------------------------------------------------------- -C* write WMO block/station instead -C*---------------------------------------------------------------------- - WRITE ( 51, - + FMT = '(/,A,I2,I3.3,3X,A,I2,I3.3,3x,A,3I2.2,A,2I2.2)' ) - + 'STID=', INT(r8hdr(1,1)), INT(r8hdr(2,1)), - + 'STNM=', INT(r8hdr(1,1)), INT(r8hdr(2,1)), - + 'TIME=', MOD(NINT(r8hdr(6,1)),100), - + NINT(r8hdr(7,1)), NINT(r8hdr(8,1)), - + '/', NINT(r8hdr(9,1)), 0 - WRITE ( 51, - + FMT = '(2(A,F7.2,1X),A,F7.1)' ) - + 'SLAT=', r8hdr(3,1), - + 'SLON=', r8hdr(4,1), - + 'SELV=', r8hdr(5,1) - END IF - - - WRITE ( 51, FMT = '(/,6(A8,1X))' ) - + 'PRES', 'HGHT', 'TMPK', 'DWPK', 'DRCT', 'SPED' - needHeader = .false. - END IF - DO jj = 1, nlev - -C*---------------------------------------------------------------------- -C* Convert pressure to millibars. -C*---------------------------------------------------------------------- - - IF ( r8lvl(1,jj) .lt. BFMSNG ) THEN - r8lvl(1,jj) = r8lvl (1,jj) / 100.0 - ELSE - r8lvl(1,jj) = GPMSNG - END IF - -C*---------------------------------------------------------------------- -C* Convert geopotential to height in meters. -C*---------------------------------------------------------------------- - - IF ( r8lvl(2,jj) .lt. BFMSNG ) THEN - r8lvl (2,jj) = r8lvl (2,jj) / 9.8 - ELSE - r8lvl (2,jj) = GPMSNG - END IF - - DO ii = 3, 6 - IF ( r8lvl(ii,jj) .ge. BFMSNG ) THEN - r8lvl (ii,jj) = GPMSNG - END IF - END DO - END DO -C*---------------------------------------------------------------------- -C* itterate through levels and add to total array -C* ignore -9999 and 0 pressure levels -C*---------------------------------------------------------------------- - IF ( nlevtot .eq. 0 ) THEN - nlevtot = 1 - END IF - DO jj = 1,nlev - IF ( r8lvl(1,jj) .gt. 99 ) THEN - DO ii = 1,6 - r8tmptot(ii,nlevtot) = r8lvl(ii,jj) - END DO - nlevtot = nlevtot + 1 - END IF - END DO - nlevtot = nlevtot - 1 - END IF - levelit = levelit + 1 - END DO -C*--------------------------------------------------------------------- -C* bubble sort so output starts at lowest level of the -C* atmosphere (usu. 1000mb), only if there are available -C* levels -C*--------------------------------------------------------------------- - IF (nlevtot .gt. 0) THEN - istop = nlevtot - 1 - iswflg = 1 - DO WHILE ( ( iswflg .ne. 0 ) .and. - + ( istop .ge. 1 ) ) - iswflg = 0 -C - DO j = 1, istop - IF ( r8tmptot(1,j) .lt. r8tmptot(1,j+1) ) THEN - iswflg = 1 - DO i = 1,6 - swpbuf = r8tmptot (i,j) - r8tmptot (i,j) = r8tmptot (i,j+1) - r8tmptot (i,j+1) = swpbuf - END DO - END IF - END DO - istop = istop-1 - END DO -C*--------------------------------------------------------------------- -C* check for exact or partial dupes and only write -C* one line for each level to output file. -C*--------------------------------------------------------------------- - DO jj = 1,nlevtot - DO ii = 1,6 - r8out(ii,jj) = r8tmptot(ii,jj) - END DO - END DO - - kk = 1 - DO jj = 1,nlevtot-1 - IF ( r8out(1,kk) .eq. r8tmptot(1,jj+1) ) THEN - r8out(1,kk) = r8tmptot(1,jj) - DO ii = 2,6 - IF ( r8out(ii,kk) .lt. r8tmptot(ii,jj+1)) - + THEN - r8out(ii,kk) = r8tmptot(ii,jj+1) - END IF - END DO - ELSE - kk = kk + 1 - r8out(1,kk) = r8tmptot(1,jj+1) - r8out(2,kk) = r8tmptot(2,jj+1) - r8out(3,kk) = r8tmptot(3,jj+1) - r8out(4,kk) = r8tmptot(4,jj+1) - r8out(5,kk) = r8tmptot(5,jj+1) - r8out(6,kk) = r8tmptot(6,jj+1) - END IF - END DO -C*---------------------------------------------------------------------- -C* write pres, hght, temp, dew point, wind dir, -C* and wind speed to output file. -C*---------------------------------------------------------------------- - DO jj = 1,kk - WRITE ( 51, FMT = '(6(F8.2,1X))' ) - + ( r8out (ii,jj), ii = 1,6 ) - END DO -C*---------------------------------------------------------------------- -C* Write info for the current station to new table. -C* Includes reportid, lat, lon, country, and blk/ -C* stn. -C*---------------------------------------------------------------------- - IF ( reportid .eq. ' ') THEN - WRITE ( reportid(1:6),FMT='(I6)') itabnum - CALL ST_RMBL ( reportid,reportid,len,iret ) - END IF - WRITE ( 52, FMT = '(A6,F7.2,1X,F7.2, - + 1X,A2,1x,I6)' ) - + reportid(1:6),r8hdr(3,1),r8hdr(4,1), - + tabcon,itabnum - END IF - END IF - END IF - END DO - - STOP - END diff --git a/util/sorc/rdbfmsua.fd/rdbfmsua.f_org b/util/sorc/rdbfmsua.fd/rdbfmsua.f_org deleted file mode 100755 index 343c985fcb..0000000000 --- a/util/sorc/rdbfmsua.fd/rdbfmsua.f_org +++ /dev/null @@ -1,397 +0,0 @@ - PROGRAM RDBFUA -C$$$ MAIN PROGRAM DOCUMENTATION BLOCK -C -C MAIN PROGRAM: RDBFUA -C PRGMMR: J. ATOR ORG: NP12 DATE: 2007-08-13 -C -C ABSTRACT: Upper Air Plotted Data for levels 1000MB; 925MB; 850MB; 700MB; -C 500MB; 400MB; 300MB; 250MB; 200MB; 150MB, and 100MB for the -C following regions: 1)United States; 2)Canada; 3)Alaska; and, -C the 4)Mexico and Caribbean. Note that Alaska includes eastern -C Russia. Also adding South America, Africa, and the Pacific. -C -C PROGRAM HISTORY LOG: -C -C 2007-08-13 J. ATOR -- ORIGINAL AUTHOR -C 2007-08-20 C. Magee -- Added block 25 (eastern Russia) -C 2007-09-20 S. Lilly -- Changing to read blks 60 thru 91. -C 2007-09-20 C. Magee -- Added code to read upper air and metar stn tables -C 2007-09-25 S. Lilly -- Added logic to write statements in order to put STID, -C STNM and TIME on the same line. -C 2007-09-27 C. Magee -- Change output for stntbl.out. Use st_rmbl to remove -C leading blank from reportid if internal write was -C used to convert integer WMO block/stn number to -C char report id. -C 2012-01-24 J. Cahoon -- Modified from original RDBFUA to include -C significant and standard together in output -C 2012-02-15 B. Mabe -- Changed Program name and output file to reflect -C change to output for sig and man data -C 2016-10-18 B. Vuong -- Removed hardwire '/nwprod/dictionaries/' in CALL FL_TBOP -C -C USAGE: -C INPUT FILES: -C UNIT 40 - adpupa dumpfile (contains data from BUFR tank b002/xx001) -C -C sonde.land.tbl -C metar.tbl -C -C OUTPUT FILES: -C UNIT 51 - rdbfmsua.out - contains ASCII upper air data for the desired -C stations. -C UNIT 52 - stnmstbl.out - contains ASCII station table info for use by -C html generator. -C -C SUBPROGRAMS CALLED: -C UNIQUE: -C LIBRARY: BUFRLIB - OPENBF UFBINT -C GEMLIB - FL_TBOP ST_RMBL TB_RSTN -C BRIDGE - DC_BSRH -C -C EXIT STATES: -C COND = 0 - SUCCESSFUL RUN -C -C REMARKS: -C -C ATTRIBUTES: -C LANGUAGE: FORTRAN 90 -C MACHINE : IBM-SP -C -C$$$ - INCLUDE 'GEMPRM.PRM' - INCLUDE 'BRIDGE.PRM' -C*---------------------------------------------------------------------- -C* Set the name of the output file. -C*---------------------------------------------------------------------- - - CHARACTER*(*) FLO, STNO - - PARAMETER ( FLO = 'rdbfmsua.out' ) - PARAMETER ( STNO = 'sonde.idsms.tbl' ) - - REAL*8 BFMSNG - PARAMETER ( BFMSNG = 10.0E10 ) - - PARAMETER ( GPMSNG = -9999.0 ) - PARAMETER ( MAXSTN = 10000 ) - - REAL*8 r8hdr ( 9, 1 ), r8lvl ( 6, 100 ), r8arr( 1, 1 ) - REAL*8 r8tmp ( 6, 100 ), r8out ( 6, 300 ),swpbuf - REAL*8 r8tmptot ( 6, 300 ) - - CHARACTER*8 cmgtag, reportid - CHARACTER stnnam*32, tbchrs*20, state*2, tabcon*2 - CHARACTER ldcoun( LLSTFL )*2, mtcoun ( MAXSTN )*2 - CHARACTER ldstid ( LLSTFL )*8, mtstid ( MAXSTN )*8 - INTEGER ldstnm ( LLSTFL ), mtstnm ( MAXSTN ), ispri - INTEGER itabnum - REAL slat, slon, selv - LOGICAL nomatch, needHeader - -C*---------------------------------------------------------------------- -C* Open and read the sonde land station table. -C*---------------------------------------------------------------------- - CALL FL_TBOP ( 'sonde.land.tbl', - + 'stns', iunltb, iertop ) - IF ( iertop .ne. 0 ) THEN - print*,' error opening sonde land station table' - END IF - - ii = 1 - ierrst = 0 - DO WHILE ( ( ii .le. LLSTFL ) .and. ( ierrst .eq. 0 ) ) - CALL TB_RSTN ( iunltb, ldstid (ii), stnnam, ldstnm (ii), - + state, ldcoun (ii), slat, slon, - + selv, ispri, tbchrs, ierrst ) - ii = ii + 1 - END DO - IF ( ierrst .eq. -1 ) THEN - numua = ii - 1 - END IF -C*---------------------------------------------------------------------- -C* Close the sonde land station table file. -C*---------------------------------------------------------------------- - CALL FL_CLOS ( iunltb, iercls ) -C*---------------------------------------------------------------------- -C* Open and read the metar station table. -C*---------------------------------------------------------------------- - CALL FL_TBOP ( 'metar_stnm.tbl', - + 'stns', iunmtb, iertop ) - IF ( iertop .ne. 0 ) THEN - print*,' error opening metar station table' - END IF - - jj = 1 - ierrst = 0 - DO WHILE ( ( jj .le. MAXSTN ) .and. ( ierrst .eq. 0 ) ) - CALL TB_RSTN ( iunmtb, mtstid (jj), stnnam, mtstnm (jj), - + state, mtcoun(jj), slat, slon, - + selv, ispri, tbchrs, ierrst ) - jj = jj + 1 - END DO - IF ( ierrst .eq. -1 ) THEN - nummet = jj - 1 - END IF -C*---------------------------------------------------------------------- -C* Close the metar station table file. -C*---------------------------------------------------------------------- - CALL FL_CLOS ( iunmtb, iercls ) -C*---------------------------------------------------------------------- -C* Open and initialize the output files. -C*---------------------------------------------------------------------- - - OPEN ( UNIT = 51, FILE = FLO ) - WRITE ( 51, FMT = '(A)' ) 'PARM=PRES;HGHT;TMPK;DWPK;DRCT;SPED' - OPEN ( UNIT = 52, FILE = STNO) - -C*---------------------------------------------------------------------- -C* Open the BUFR file. -C*---------------------------------------------------------------------- - - CALL OPENBF ( 40, 'IN', 40 ) - -C*---------------------------------------------------------------------- -C* Read a BUFR subset from the BUFR file. -C*---------------------------------------------------------------------- - - DO WHILE ( IREADNS ( 40, cmgtag, imgdt ) .eq. 0 ) - - IF ( cmgtag .eq. 'NC002001' ) THEN - -C*---------------------------------------------------------------------- -C* Unpack the header information from this subset. -C*---------------------------------------------------------------------- - - CALL UFBINT ( 40, r8hdr, 9, 1, nlev, - + 'WMOB WMOS CLAT CLON SELV YEAR MNTH DAYS HOUR' ) - - IF ( ( ( r8hdr(1,1) .ge. 60 ) .and. - + ( r8hdr(1,1) .le. 91 ) ) .or. - + ( r8hdr(1,1) .eq. 25 ) ) THEN - -C*---------------------------------------------------------------------- -C* Unpack the level information from this subset. -C* and replicate for VISG =2,4,and 32 -C*---------------------------------------------------------------------- - levelit = 0 - needHeader = .true. - nlevtot = 0 - DO WHILE ( levelit .le. 2 ) - IF ( levelit .eq. 0 ) THEN - CALL UFBINT ( 40, r8lvl, 6, 50, nlev, - + 'VSIG=2 PRLC GP10 TMDB TMDP WDIR WSPD' ) - ELSE IF ( levelit .eq. 1 ) THEN - CALL UFBINT ( 40, r8lvl, 6, 50, nlev, - + 'VSIG=4 PRLC GP10 TMDB TMDP WDIR WSPD' ) - ELSE IF ( levelit .eq. 2 ) THEN - CALL UFBINT ( 40, r8lvl, 6, 50, nlev, - + 'VSIG=32 PRLC GP10 TMDB TMDP WDIR WSPD' ) - END IF - IF ( nlev .gt. 0 ) THEN -C*---------------------------------------------------------------------- -C* Find the corresponding 3 or 4 character ID -C* in the sonde land station table. Store into -C* reportid only if non-blank. -C*---------------------------------------------------------------------- - iblkstn = NINT( r8hdr(1,1)*1000 + r8hdr(2,1) ) - nomatch = .true. - CALL DC_BSRH ( iblkstn, ldstnm, numua, - + ii, iersrh ) - IF ( iersrh .ge. 0 ) THEN - reportid = ldstid(ii) - tabcon = ldcoun(ii) - itabnum = ldstnm(ii) - IF ( ldstid (ii) .ne. ' ') THEN - nomatch = .false. - END IF - END IF -C*---------------------------------------------------------------------- -C* Either no match in sonde land table or tdstid -C* was found but ldstid was blank, so check metar -C* table for match and non-blank char id. -C*---------------------------------------------------------------------- - IF ( nomatch ) THEN - mblkstn = INT( iblkstn * 10 ) - CALL DC_BSRH ( mblkstn, mtstnm, nummet, - + jj, iersrh ) - IF ( iersrh .ge. 0 ) THEN - reportid = mtstid(jj) - tabcon = mtcoun(jj) - itabnum = mtstnm(jj) - nomatch = .false. - END IF - END IF -C*---------------------------------------------------------------------- -C* If no header, build it -C*---------------------------------------------------------------------- - IF ( needHeader ) THEN -C*---------------------------------------------------------------------- -C* Write the data to the output file. -C*---------------------------------------------------------------------- - IF ( reportid .ne. ' ' ) THEN -C*---------------------------------------------------------------------- -C* 3- or 4-char ID found. -C*---------------------------------------------------------------------- - WRITE ( 51, - + FMT = '(/,A,A5,3X,A,I2,I3.3,3x,A,3I2.2,A,2I2.2)' ) - + 'STID=', reportid(1:5), - + 'STNM=', INT(r8hdr(1,1)), INT(r8hdr(2,1)), - + 'TIME=', MOD(NINT(r8hdr(6,1)),100), - + NINT(r8hdr(7,1)), NINT(r8hdr(8,1)), - + '/', NINT(r8hdr(9,1)), 0 - WRITE ( 51, - + FMT = '(2(A,F7.2,1X),A,F7.1)' ) - + 'SLAT=', r8hdr(3,1), - + 'SLON=', r8hdr(4,1), - + 'SELV=', r8hdr(5,1) - ELSE -C*---------------------------------------------------------------------- -C* write WMO block/station instead -C*---------------------------------------------------------------------- - WRITE ( 51, - + FMT = '(/,A,I2,I3.3,3X,A,I2,I3.3,3x,A,3I2.2,A,2I2.2)' ) - + 'STID=', INT(r8hdr(1,1)), INT(r8hdr(2,1)), - + 'STNM=', INT(r8hdr(1,1)), INT(r8hdr(2,1)), - + 'TIME=', MOD(NINT(r8hdr(6,1)),100), - + NINT(r8hdr(7,1)), NINT(r8hdr(8,1)), - + '/', NINT(r8hdr(9,1)), 0 - WRITE ( 51, - + FMT = '(2(A,F7.2,1X),A,F7.1)' ) - + 'SLAT=', r8hdr(3,1), - + 'SLON=', r8hdr(4,1), - + 'SELV=', r8hdr(5,1) - END IF - - - WRITE ( 51, FMT = '(/,6(A8,1X))' ) - + 'PRES', 'HGHT', 'TMPK', 'DWPK', 'DRCT', 'SPED' - needHeader = .false. - END IF - DO jj = 1, nlev - -C*---------------------------------------------------------------------- -C* Convert pressure to millibars. -C*---------------------------------------------------------------------- - - IF ( r8lvl(1,jj) .lt. BFMSNG ) THEN - r8lvl(1,jj) = r8lvl (1,jj) / 100.0 - ELSE - r8lvl(1,jj) = GPMSNG - END IF - -C*---------------------------------------------------------------------- -C* Convert geopotential to height in meters. -C*---------------------------------------------------------------------- - - IF ( r8lvl(2,jj) .lt. BFMSNG ) THEN - r8lvl (2,jj) = r8lvl (2,jj) / 9.8 - ELSE - r8lvl (2,jj) = GPMSNG - END IF - - DO ii = 3, 6 - IF ( r8lvl(ii,jj) .ge. BFMSNG ) THEN - r8lvl (ii,jj) = GPMSNG - END IF - END DO - END DO -C*---------------------------------------------------------------------- -C* itterate through levels and add to total array -C* ignore -9999 and 0 pressure levels -C*---------------------------------------------------------------------- - IF ( nlevtot .eq. 0 ) THEN - nlevtot = 1 - END IF - DO jj = 1,nlev - IF ( r8lvl(1,jj) .gt. 99 ) THEN - DO ii = 1,6 - r8tmptot(ii,nlevtot) = r8lvl(ii,jj) - END DO - nlevtot = nlevtot + 1 - END IF - END DO - nlevtot = nlevtot - 1 - END IF - levelit = levelit + 1 - END DO -C*--------------------------------------------------------------------- -C* bubble sort so output starts at lowest level of the -C* atmosphere (usu. 1000mb), only if there are available -C* levels -C*--------------------------------------------------------------------- - IF (nlevtot .gt. 0) THEN - istop = nlevtot - 1 - iswflg = 1 - DO WHILE ( ( iswflg .ne. 0 ) .and. - + ( istop .ge. 1 ) ) - iswflg = 0 -C - DO j = 1, istop - IF ( r8tmptot(1,j) .lt. r8tmptot(1,j+1) ) THEN - iswflg = 1 - DO i = 1,6 - swpbuf = r8tmptot (i,j) - r8tmptot (i,j) = r8tmptot (i,j+1) - r8tmptot (i,j+1) = swpbuf - END DO - END IF - END DO - istop = istop-1 - END DO -C*--------------------------------------------------------------------- -C* check for exact or partial dupes and only write -C* one line for each level to output file. -C*--------------------------------------------------------------------- - DO jj = 1,nlevtot - DO ii = 1,6 - r8out(ii,jj) = r8tmptot(ii,jj) - END DO - END DO - - kk = 1 - DO jj = 1,nlevtot-1 - IF ( r8out(1,kk) .eq. r8tmptot(1,jj+1) ) THEN - r8out(1,kk) = r8tmptot(1,jj) - DO ii = 2,6 - IF ( r8out(ii,kk) .lt. r8tmptot(ii,jj+1)) - + THEN - r8out(ii,kk) = r8tmptot(ii,jj+1) - END IF - END DO - ELSE - kk = kk + 1 - r8out(1,kk) = r8tmptot(1,jj+1) - r8out(2,kk) = r8tmptot(2,jj+1) - r8out(3,kk) = r8tmptot(3,jj+1) - r8out(4,kk) = r8tmptot(4,jj+1) - r8out(5,kk) = r8tmptot(5,jj+1) - r8out(6,kk) = r8tmptot(6,jj+1) - END IF - END DO -C*---------------------------------------------------------------------- -C* write pres, hght, temp, dew point, wind dir, -C* and wind speed to output file. -C*---------------------------------------------------------------------- - DO jj = 1,kk - WRITE ( 51, FMT = '(6(F8.2,1X))' ) - + ( r8out (ii,jj), ii = 1,6 ) - END DO -C*---------------------------------------------------------------------- -C* Write info for the current station to new table. -C* Includes reportid, lat, lon, country, and blk/ -C* stn. -C*---------------------------------------------------------------------- - IF ( reportid .eq. ' ') THEN - WRITE ( reportid(1:6),FMT='(I6)') itabnum - CALL ST_RMBL ( reportid,reportid,len,iret ) - END IF - WRITE ( 52, FMT = '(A6,F7.2,1X,F7.2, - + 1X,A2,1x,I6)' ) - + reportid(1:6),r8hdr(3,1),r8hdr(4,1), - + tabcon,itabnum - END IF - END IF - END IF - END DO - - STOP - END diff --git a/util/sorc/terrain.fd/makefile.sh b/util/sorc/terrain.fd/makefile.sh deleted file mode 100755 index d1b5f5bc34..0000000000 --- a/util/sorc/terrain.fd/makefile.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/ksh -set -x - -machine=${machine:-WCOSS} - -if [ $machine = WCOSS ] ; then - CF=ifort - export MP_CORE_FILE_FORMAT=lite - #FFOPTS="-g -O0 -i4 -r8 -check all -ftrapuv -convert big_endian -fp-stack-check -fstack-protector -heap-arrays -recursiv -traceback -openmp" - FFOPTS="-i4 -O3 -r8 -convert big_endian -fp-model precise -openmp" - LDIR=/nwprod/lib - LIBS="-L/$LDIR -lw3emc_d -lw3nco_d -lbacio_4 -lsp_v2.0.1_d" - LDOPTS="-openmp -mkl" -elif [ $machine = WCOSS_C ] ; then - CF=ftn - FFOPTS="-i4 -O3 -r8 -convert big_endian -fp-model precise -openmp" - LIBS="${W3EMC_LIBd} ${W3NCO_LIBd} ${BACIO_LIB4} ${SP_LIBd}" - LDOPTS="-openmp -mkl" -fi - -f=mtnlm7_slm30g.f -x=../../exec/terrain.x -$CF $FFOPTS $f $LIBS $LDOPTS -o $x - -f=mtnlm7_slm30g_oclsm.f -x=../../exec/terrain_oclsm.x -$CF $FFOPTS $f $LIBS $LDOPTS -o $x - - - - - - - diff --git a/util/sorc/terrain.fd/mtnlm7_slm30g.f b/util/sorc/terrain.fd/mtnlm7_slm30g.f deleted file mode 100644 index 0f9c73c507..0000000000 --- a/util/sorc/terrain.fd/mtnlm7_slm30g.f +++ /dev/null @@ -1,2628 +0,0 @@ -!$$$ MAIN PROGRAM DOCUMENTATION BLOCK -! -! MAIN PROGRAM: TERRAIN TERRAIN MAKER FOR GLOBAL SPECTRAL MODEL -! PRGMMR: IREDELL ORG: W/NMC23 DATE: 92-04-16 -! -! ABSTRACT: THIS PROGRAM CREATES 7 TERRAIN-RELATED FILES -! COMPUTED FROM THE NAVY 10-MINUTE TERRAIN DATASET. -! THE MODEL PHYSICS GRID PARAMETERS AND SPECTRAL TRUNCATION -! AND FILTER PARAMETERS ARE READ BY THIS PROGRAM AS INPUT. -! THE 7 FILES PRODUCED ARE RESPECTIVELY: -! 1) SEA-LAND MASK ON MODEL PHYSICS GRID -! 2) GRIDDED OROGRAPHY ON MODEL PHYSICS GRID -! 3) MOUNTAIN STD DEV ON MODEL PHYSICS GRID -! 4) SPECTRAL OROGRAPHY IN SPECTRAL DOMAIN -! 5) UNFILTERED GRIDDED OROGRAPHY ON MODEL PHYSICS GRID -! 6) GRIB SEA-LAND MASK ON MODEL PHYSICS GRID -! 7) GRIB GRIDDED OROGRAPHY ON MODEL PHYSICS GRID -! THE OROGRAPHY IS ONLY FILTERED FOR WAVENUMBERS GREATER THAN NF0. -! FOR WAVENUMBERS N BETWEEN NF0 AND NF1, THE OROGRAPHY IS FILTERED -! BY THE FACTOR 1-((N-NF0)/(NF1-NF0))**2. THE FILTERED OROGRAPHY -! WILL NOT HAVE INFORMATION BEYOND WAVENUMBER NF1. -! -! PROGRAM HISTORY LOG: -! 92-04-16 IREDELL -! 98-02-02 IREDELL FILTER -! 98-05-31 HONG Modified for subgrid orography used in Kim's scheme -! 98-12-31 HONG Modified for high-resolution GTOPO orography -! 99-05-31 HONG Modified for getting OL4 (mountain fraction) -! 00-02-10 Moorthi's modifications including lat/lon grid -! 00-04-11 HONG Modified for reduced grids -! 00-04-12 Iredell Modified for reduced grids -! 02-01-07 (*j*) modified for principal axes of orography -! There are now 14 files, 4 additional for lm mb -! 04-04-04 (*j*) re-Test on IST/ilen calc for sea-land mask(*j*) -! 04-09-04 minus sign here in MAKEOA IST and IEN as in MAKEMT! -! 05-09-05 if test on HK and HLPRIM for GAMMA SQRT -! 07-08-07 replace 8' with 30" incl GICE, conintue w/ S-Y. lake slm -! 08-08-07 All input 30", UMD option, and filter as described below -! --- Quadratic filter applied by default. -! --- NF0 is normally set to an even value beyond the previous truncation, -! --- for example, for jcap=382, NF0=254+2 -! --- NF1 is set as jcap+2 (and/or nearest even), eg., for t382, NF1=382+2=384 -! --- if no filter is desired then NF1=NF0=0 and ORF=ORO -! --- but if no filter but spectral to grid (with gibbs) then NF1=jcap+2, and NF1=jcap+1 -! 11-06-22 S. Moorthi - convert the code to "implicit none" added grib -! output of unfiltered orography -! 13-02-20 S. Moorthi - Added SPTEZJ so that the filter can be applied -! at resolutions t1534 and higher -! Also optimized to code to use less memory -! 13-06-19 S. Moorthi - Made it work on wcoss -! -! -! USAGE: -! -! INPUT FILES: -! UNIT5 - PHYSICS LONGITUDES (IM), PHYSICS LATITUDES (JM), -! SPECTRAL TRUNCATION (NM), RHOMBOIDAL FLAG (NR), -! AND FIRST AND SECOND FILTER PARAMETERS (NF0,NF1). -! RESPECTIVELY READ IN FREE FORMAT. -! UNIT235 - GTOPO 30" AVR for ZAVG elevation -! UNIT10 - 30" UMD land (lake) cover mask see MSKSRC switch -! XUNIT11 - GTOPO AVR -! XUNIT12 - GTOPO STD DEV -! XUNIT13 - GTOPO MAX -! UNIT14 - GTOPO SLM (10' NAVY if switched to get lakes) -! -! OUTPUT FILES: -! UNIT51 - SEA-LAND MASK (IM,JM) -! UNIT52 - GRIDDED OROGRAPHY (IM,JM) -! UNIT53 - MOUNTAIN STD DEV (IM,JM) -! UNIT54 - SPECTRAL OROGRAPHY ((NM+1)*((NR+1)*NM+2)) -! UNIT55 - UNFILTERED GRIDDED OROGRAPHY (IM,JM) -! UNIT56 - GRIB SEA-LAND MASK (IM,JM) -! UNIT57 - GRIB GRIDDED OROGRAPHY (IM,JM) -! UNIT58 - GRIB PRINCIPAL COORD THETA (IM,JM) -! UNIT59 - GRIB PRINCIPAL COORD SIGMA (IM,JM) -! UNIT60 - GRIB PRINCIPAL COORD GAMMA (IM,JM) -! UNIT61 - GRIB MOUNTAIN STD VAR (IM,JM) -! UNIT62 - GRIB MOUNTAIN MAX ELEVATION (IM,JM) -! -! SUBPROGRAMS CALLED: -! UNIQUE: -! TERSUB - MAIN SUBPROGRAM -! read_g - read in 30" elevations -! SPLAT - COMPUTE GAUSSIAN LATITUDES OR EQUALLY-SPACED LATITUDES -! LIBRARY: -! SPTEZ - SPHERICAL TRANSFORM -! SPTEZJ - SPHERICAL TRANSFORM -! GBYTES - UNPACK BITS -! -! REMARKS: FORTRAN 9X EXTENSIONS ARE USED. -! ITOPO determines if the 43200X21600 topo 30" is read in -! from the 30" array record. .DEM tiles are done offline. -! -! ATTRIBUTES: -! CRAY YMP & IBM AIX 3 5 00C88D5D4C00. -!C -!$$$ -!FPP$ NOCONCUR F - implicit none -! - integer MTNRES, IM, JM, NM, NR, NF0, NF1, NW, IMN, JMN, latch - real EFAC,BLAT -! - latch = 1 - READ(5,*) MTNRES,IM,JM,NM,NR,NF0,NF1,EFAC,BLAT - -! --- MTNRES defines the input (highest) elev resolution -! --- =1 is topo30 30" in units of 1/2 minute. -! so MTNRES for old values must be *2. -! =16 is now Song Yu's 8' orog the old ops standard -! --- other possibilities are =8 for 4' and =4 for 2' see -! HJ for T1000 test. Must set to 1 for now. - - MTNRES = 1 - print*, MTNRES,IM,JM,NM,NR,NF0,NF1,EFAC,BLAT - - NW = (NM+1)*((NR+1)*NM+2) - IMN = 360*120/MTNRES - JMN = 180*120/MTNRES - print *, ' Starting terr mtnlm7_slm10.f IMN,JMN:',IMN,JMN - - call start() - - CALL TERSUB(IMN,JMN,IM,JM,NM,NR,NF0,NF1,NW,EFAC,BLAT,latch) - -! call summary() - STOP - END - SUBROUTINE TERSUB(IMN,JMN,IM,JM,NM,NR,NF0,NF1,NW,EFAC,BLAT,latch) - implicit none -! - integer, parameter :: NMT=14 - logical, parameter :: check_nans=.false. -! logical, parameter :: check_nans=.true. -! - integer IMN,JMN,IM,JM,NM,NR,NF0,NF1,NW - real efac, blat - INTEGER ZSLMX(2700,1350) - - INTEGER, allocatable:: ZAVG(:,:),ZSLM(:,:) - REAL(4), allocatable:: GICE(:,:) - integer*1,allocatable:: UMD(:,:) - - integer latch - integer*1 i3save - integer*2 glob(IMN,JMN), i2save - INTEGER KPDS(200),KGDS(200), zsave1,zsave2,itopo,kount - INTEGER kount2, islmx, jslmx, oldslm, msksrc - REAL COSCLT(JM), WGTCLT(JM), RCLT(JM), XLAT(JM),DIFFX(JM/2) - - REAL SLM(IM,JM), ORO(IM,JM), ORS(NW),ORF(IM,JM) - - REAL, allocatable :: VAR(:,:), VAR4(:,:), OA(:,:,:), OL(:,:,:)& - &, THETA(:,:), GAMMA(:,:), SIGMA(:,:) & - &, ELVMAX(:,:) - real oro_s(im,jm) - integer IST(IM,jm), IEN(IM,jm), JST(JM),JEN(JM) - integer, allocatable :: IWORK(:,:,:) - real glat(jmn) - real, allocatable :: work1(:,:),work2(:,:), work3(:,:) & - &, work4(:,:), work5(:,:), work6(:,:), & - & hprime(:,:,:) - - LOGICAL SPECTR, REVLAT, FILTER - integer numi(jm),ios,iosg,latg2,istat - integer maxc3,maxc4,maxc5,maxc6,maxc7,maxc8 - integer lonsperlat(jm/2),itest,jtest, i, j, k - &, it, jt, i1, jn, js, iw, ie, in, inw, ine, m, n, imt - &, is, ise, isw, lb, iret, imb2p1 - real oaa(4), ola(4), sumdif, avedif, alon, alat, pi - &, degrad, rn, rs, slma, oroa, vara, var4a, wgta, xn, xs - &, fff, www, phi, delxn - complex ffj(im/2+1) - - allocate (ZAVG(IMN,JMN)) - allocate (ZSLM(IMN,JMN)) - allocate (GICE(IMN+1,3601)) - allocate (UMD(IMN,JMN)) - allocate (iwork(im,jm,4)) - allocate (work1(im,jm), work2(im,jm), work3(im,jm) & - &, work4(im,jm), work5(im,jm), work6(im,jm) & - &, hprime(im,jm,nmt)) - allocate (VAR(im,jm), VAR4(im,jm), OA(im,jm,4), OL(im,jm,4) & - &, THETA(im,jm), GAMMA(im,jm), SIGMA(im,jm), ELVMAX(im,jm)) - -! -! SET CONSTANTS AND ZERO FIELDS -! - imb2p1 = im/2 + 1 - pi = 4.0 * atan(1.0) - DEGRAD = 180./PI - SPECTR = NM > 0 ! if NM <=0 then grid is assumed to be lat/lon - FILTER = .TRUE. ! Spectr Filter defaults true and set by NF1 & NF0 - - ! MSKSRC=0 navy 10 lake msk, 1 UMD 30, -1 no lakes -! MSKSRC = 0 - MSKSRC = 1 - - REVLAT = BLAT < 0 ! Reverse latitude/longitude for output - ITOPO = 1 ! topo 30" read, otherwise tiles (opt offline) - - write(0,*)' In TERSUB, ITOPO=',itopo -! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! --- old S-Y. files -!- OPEN(UNIT=11,FORM='FORMATTED',ERR=900) ! average -!- OPEN(UNIT=12,FORM='FORMATTED',ERR=900) ! Std Dev -!- OPEN(UNIT=13,FORM='FORMATTED',ERR=900) ! maximum -!- OPEN(UNIT=14,FORM='FORMATTED',ERR=900) ! sea-land-lake-mask -! -! --- READ(11,11) ZAVG -! --- READ(12,11) ZVAR -! --- READ(13,11) ZMAX -! --- 11 FORMAT(20I4) -! -! --- MSKSRC 0 navy 10' lake mask, =1 for 30" UMD lake mask, -! --- MSKSRC internally set if above fails at -1 for no lakes -! --- -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - IF (MSKSRC == 0 ) then - READ(14,12,iostat=ios) ZSLMX - 12 FORMAT(80I1) - if (ios /= 0) then - MSKSRC = -1 - print *,' navy10 lake mask rd fail -- ios,MSKSRC:',ios,MSKSRC - endif - ELSE - write(0,*)' Attempt to open/read UMD 30" slmsk MSKSRC=',MSKSRC -! --- not 0 so MSKSRC=1 and attempt to open/read UMD 30" slmsk - -! open(10,file="/global/noscrub/wx23ja/terrain30/landcover30.fixed -! &", recl=43200*21600, access='direct',iostat=istat) - - open(10,file="landcover30.fixed", recl=43200*21600, - & access='direct',iostat=istat) - IF (istat /= 0) then - MSKSRC = -1 - print *,' UMD lake mask open failed -- ios,MSKSRC:',ios,MSKSRC - ELSE -! - read(10, rec=1,iostat=istat) UMD - - ENDIF -! -------------- - IF (istat /= 0) then ! --- When UMD read fails attempt to read navy 10' - print *,' UMD lake mask rd err -- trying navy 10',istat - MSKSRC = 0 - print *,' ***** MSKSRC set to 0 MSKSRC=',MSKSRC - if (MSKSRC == 0 ) then - rewind 14 - READ(14,12,iostat=ios) ZSLMX - if (ios /= 0) then - MSKSRC = -1 - print *,' navy10 lake mask rd fail - ios,MSKSRC:',ios - &, MSKSRC - endif - endif - ELSE - print *,' UMD lake, UMD(500,500)=',UMD(500,500),MSKSRC - ENDIF -! -------------- -! --- good UMD land cover read and MSKSRC = 1 - ENDIF -! -!- READ_G for global 30" terrain -! - print *,' Read 30" topography or call read_g, ITOPO=',ITOPO - - if (itopo /= 0) then - read(235) glob - rewind(235) -! elseif ( ITOPO /= 0 )then -! call read_g(glob,ITOPO) - endif - -! --- transpose even though glob 30" is from S to N and NCEP std is N to S - - do j=1,jmn/2 - jt = jmn - j + 1 - do I=1,imn - i2save = glob(I,j) - glob(I,j) = glob(I,jt) - glob(I,jt) = i2save - enddo - enddo -! --- transpose glob as USGS 30" is from dateline and NCEP std is 0 - do j=1,jmn - do I=1,imn/2 - it = imn/2 + i - i2save = glob(i,J) - glob(i,J) = glob(it,J) - glob(it,J) = i2save - enddo - enddo - print *,' After read_g, glob(500,500)=',glob(500,500) -! - -! --- IMN,JMN - write(0,*)' IM, JM, NM, NR, NF0, NF1, EFAC, BLAT' - write(0,*) IM,JM,NM,NR,NF0,NF1,EFAC,BLAT - write(0,*)' imn,jmn,glob(imn,jmn)=',imn,jmn,glob(imn,jmn) - write(0,*)' UBOUND ZAVG=',UBOUND(ZAVG) - write(0,*)' UBOUND glob=',UBOUND(glob) - write(0,*)' UBOUND ZSLM=',UBOUND(ZSLM) - write(0,*)' UBOUND GICE=',UBOUND(GICE) - - kount = 0 - kount2 = 0 -! -! --- 0 is ocean and 1 is land for slm -! - ZSLM = 1 - - SELECTCASE(MSKSRC) - - CASE(1) !---- 30" sea land mask. 0 are water (lake or ocean) - ! ---------------------------------------------- - -! --- transpose even though glob 30" is from S to N and NCEP std is N to S - do j=1,jmn/2 - jt = jmn - j + 1 - do I=1,imn - i3save = UMD(I,j) - UMD(I,j) = UMD(I,jt) - UMD(I,jt) = i3save - enddo - enddo -! --- transpose UMD as USGS 30" is from dateline and NCEP std is 0 - do j=1,jmn - do i=1,imn/2 - it = imn/2 + i - i3save = UMD(i,J) - UMD(i,J) = UMD(it,J) - UMD(it,J) = i3save - enddo - enddo -! --- UMD slmsk with 30" lakes and set ZAVG from glob - do j=1,jmn - do i=1,imn - if ( UMD(i,j) == 0 ) ZSLM(i,j) = 0 - ZAVG(i,j) = glob(i,j) - enddo - enddo -! - CASE(0) ! --- When navy 10' mask is set MSKSRC=0 - ! ----------------------------------- - -! --- MSKSRC 0 navy 10' lake mask, =1 for 30" UMD lake mask, -1 no lakes - write(0,*)' NAVY 10 (8) slmsk for lakes, MSKSRC=',MSKSRC - - kount = 0 - kount2 = 0 - do j=1,jmn - oldslm = ZSLM(IMN,j) - do i=1,imn - i1 = i + 1 -! --- slmsk with 10' lakes and set ZAVG from 30" glob - ZAVG(i,j) = glob(i,j) - if ( glob(i,j) == -9999 ) then - ZSLM(i,j) = 0 - kount = kount + 1 - endif - islmx = (i-1)/16 + 1 - jslmx = (j-1)/16 + 1 - if ( ZSLMX(islmx,jslmx) == 0 ) then - if ( j > 8 .and. j < JMN-8 ) then - if (i1 > IMN ) i1 = i1 - IMN -! ----- - if(ZSLM(i,j) == 1 .and. oldslm == 1 - & .and. ZSLM(i1,j) == 1) then -! if (i /= 1) oldslm = ZSLM(i,j) - ZSLM(i,j) = 0 - kount2 = kount2 + 1 - endif -! ----- - endif - endif - enddo - enddo -! --- - CASE(-1) - print *,' **** set ZAVG and slm from 30" glob, MSKSRC=',MSKSRC - kount = 0 - kount2 = 0 - do j=1,jmn - do i=1,imn - i1 = i + 1 -! --- UMD slmsk with 10' lakes and set ZAVG from 30" glob - ZAVG(i,j) = glob(i,j) - if ( glob(i,j) == -9999 ) then - ZSLM(i,j) = 0 - kount = kount + 1 - endif - enddo - enddo - END SELECT -! --- -! --- There was an error in the topo 30" data set at pole (-9999). - do i=1,imn - ZSLM(i,1) = 0 - ZSLM(i,JMN) = 1 - enddo -! - write(0,*)' kount,2,ZAVG(1,1),ZAVG(imn,jmn),ZAVG(500,500)', - & kount,kount2,ZAVG(1,1),ZAVG(imn,jmn),ZAVG(500,500) - -! --- The center of pixel (1,1) is 89.9958333N/179.9958333W with dx/dy -! --- spacing of 1/120 degrees. -! -! READ REDUCED GRID EXTENTS IF GIVEN -! - read(20,*,iostat=ios) latg2,lonsperlat - if (ios /= 0 .or. 2*latg2 /= jm) then - do j=1,jm - numi(j) = im - enddo - write(0,*) ios,latg2,'COMPUTE TERRAIN ON A FULL GAUSSIAN GRID' - else - do j=1,jm/2 - numi(j) = lonsperlat(j) - enddo - do j=jm/2+1,jm - numi(j) = lonsperlat(jm+1-j) - enddo - write(0,*) ios,latg2,'COMPUTE TERRAIN ON A REDUCED GAUSSIAN' - &' GRID', numi -! print *,ios,latg2,'COMPUTE TERRAIN ON A REDUCED GAUSSIAN GRID' - endif - - write(0,*) ios,latg2,'TERRAIN ON GAUSSIAN GRID',numi - -! -! This code assumes that lat runs from north to south for gg! -! - write(0,*)' SPECTR=',SPECTR,' REVLAT=',REVLAT,'** with GICE-07 **' - - IF (SPECTR) THEN - CALL SPLAT(4,JM,COSCLT,WGTCLT) - DO J=1,JM/2 - RCLT(J) = ACOS(COSCLT(J)) - PHI = RCLT(J) * DEGRAD - XLAT(J) = 90. - PHI - XLAT(JM-J+1) = PHI - 90. - ENDDO - ELSE - CALL SPLAT(0,JM,COSCLT,WGTCLT) - DO J=1,JM - RCLT(J) = ACOS(COSCLT(J)) - XLAT(J) = 90.0 - RCLT(J) * DEGRAD - ENDDO - ENDIF -! -! print *,' cosclt=',cosclt - print *,' RCLT(1)=',RCLT(1) - - sumdif = 0. - DO J = JM/2,2,-1 - DIFFX(J) = xlat(J) - XLAT(j-1) - sumdif = sumdif + DIFFX(J) - ENDDO - avedif = sumdif / (float(JM/2)) - - write(0,*)' XLAT= avedif: ',avedif - write (6,107) (xlat(J)-xlat(j-1),J=JM,2,-1) - print *,' XLAT=' - write (6,106) (xlat(J),J=JM,1,-1) - 106 format( 10(f7.3,1x)) - 107 format( 10(f9.5,1x)) -! - DELXN = 360./IMN ! MOUNTAIN DATA RESOLUTION -! - DO J=1,JMN - GLAT(J) = -90. + (J-1) * DELXN + DELXN * 0.5 - ENDDO - - write(0,*)' Before GICE ZAVG(1,2)=',ZAVG(1,2),ZSLM(1,2) - write(0,*)' Before GICE ZAVG(1,12)=',ZAVG(1,12),ZSLM(1,12) - write(0,*)' Before GICE ZAVG(1,52)=',ZAVG(1,52),ZSLM(1,52) - write(0,*)' Before GICE ZAVG(1,112)=',ZAVG(1,JMN-112),ZSLM(1,112) - -! GICE: Grumbine 30" Antarctica orog IMNx3616 from S to N & wraped E-W. -! NB: Zfields are S to N and W-E! - - iosg = 0 - READ(15,iostat=iosg) GICE - if (iosg /= 0 ) then - write(0,*)' *** Err on reading GICE record, iosg=',iosg - write(0,*)' exec continues but NO GICE correction done ' -! stop - else - write(0,*)' GICE 30" Antarctica RAMP orog 43200x3616 read OK' - write(0,*)' Processing! ' - write(0,*)' Processing! ' - write(0,*)' Processing! ' - do j = 1, 3601 - do i = 1, IMN - zsave1 = ZAVG(i,j) - zsave2 = ZSLM(i,j) - if( GICE(i,j) /= -99. .and. GICE(i,j) /= -1.0 ) then - if ( GICE(i,j) > 0.) then - ZAVG(i,j) = int( GICE(i,j) + 0.5 ) -!! --- for GICE values less than or equal to 0 (0, -1, or -99) then -!! --- radar-sat (RAMP) values are not valid and revert back to old orog - ZSLM(i,j) = 1 - endif - endif - ALON = float(i-1) * 360./float(IMN) - ALAT = glat(j) - -! if( ZAVG(i,j) .ne. zsave1 .and. i .lt. 3 ) -! & print *,' antarctica change to ZAVG(i=',i,'j=',j,')=', -! & ZAVG(i,j),ZSLM(i,j),' from originally:',zsave1,zsave2 -! &write(6,151)i,j,ZAVG(i,j),ZSLM(i,j),zsave1,zsave2,ALAT,ALON -! 151 format(1x,'antarctica ZAVG(i=',i3,' j=',i3,')=',i5,i3, -! &' orig:',i5,i3,' Lat=',f8.3,f9.3,'E') - - if( ZAVG(i,j) /= zsave1 ) then - if ( i <= 1201 .and. i > 1200 )then - write(6,152) i,j,ZAVG(i,j),ZSLM(i,j),zsave1,zsave2, - & ALAT,ALON,GICE(i,j) - 152 format(1x,' ZAVG(i=',i4,' j=',i4,')=',i5,i3, - & ' orig:',i5,i4,' Lat=',f7.3,f8.2,'E',' GICE=',f8.1) - endif - endif - enddo - enddo - endif - -! print *, -! & ' After GICE ZAVG(1,2)=',ZAVG(1,2),ZSLM(1,2) -! print *, -! & ' After GICE ZAVG(1,12)=',ZAVG(1,12),ZSLM(1,12) -! print *, -! & ' After GICE ZAVG(1,52)=',ZAVG(1,52),ZSLM(1,52) -! print *, -! & ' After GICE ZAVG(1,112)=',ZAVG(1,112),ZSLM(1,112) -! -! COMPUTE MOUNTAIN DATA : ORO SLM VAR (Std Dev) OC -! - if (numi(1) < im) then - do j=1,jm - do i=numi(j)+1,im - oro(i,j) = 0.0 - slm(i,j) = 0.0 - var(i,j) = 0.0 - var4(i,j) = 0.0 - enddo - enddo - endif -! - CALL MAKEMT(ZAVG,ZSLM,ORO,SLM,VAR,VAR4,GLAT, - & IST,IEN,JST,JEN,IM,JM,IMN,JMN,XLAT,numi) - call minmxj(IM,JM,ORO,' ORO') - call minmxj(IM,JM,SLM,' SLM') - call minmxj(IM,JM,VAR,' VAR') - call minmxj(IM,JM,VAR4,' VAR4') - if (check_nans) then ! --- check for nands in above - call nanc(ORO,IM*JM,"MAKEMT_ORO") - call nanc(SLM,IM*JM,"MAKEMT_SLM") - call nanc(VAR,IM*JM,"MAKEMT_VAR") - call nanc(VAR4,IM*JM,"MAKEMT_VAR4") - endif -! -! check antarctic pole -! DO J = 1,JM -! DO I = 1,numi(j) -! if ( i .le. 100 .and. i .ge. 1 )then -! if (j .ge. JM-1 )then -! if (height .eq. 0.) print *,'I,J,SLM:',I,J,SLM(I,J) -! write(6,153)i,j,ORO(i,j),HEIGHT,SLM(i,j) -! endif -! endif -! ENDDO -! ENDDO - -! write(0,*)' ORO=',oro(:,:) -! -! === Compute mtn principal coord HTENSR: THETA,GAMMA,SIGMA -! - if (numi(1) < im) then - do j=1,jm - do i=numi(j)+1,im - theta(i,j) = 0.0 - gamma(i,j) = 0.0 - sigma(i,j) = 0.0 - enddo - enddo - endif -! - CALL MAKEPC(ZAVG,ZSLM,THETA,GAMMA,SIGMA,GLAT, - 1 IST,IEN,JST,JEN,IM,JM,IMN,JMN,XLAT,numi) - call minmxj(IM,JM,THETA,' THETA') - call minmxj(IM,JM,GAMMA,' GAMMA') - call minmxj(IM,JM,SIGMA,' SIGMA') - if (check_nans) then ! --- check for nands in above - call nanc(THETA,IM*JM,"MAKEPC_THETA") - call nanc(GAMMA,IM*JM,"MAKEPC_GAMMA") - call nanc(SIGMA,IM*JM,"MAKEPC_SIGMA") - endif -! -! COMPUTE MOUNTAIN DATA : OA OL -! - if (numi(1) < im) then - do j=1,jm - do i=numi(j)+1,im - oa(i,j,:) = 0.0 - ol(i,j,:) = 0.0 - elvmax(i,j) = 0.0 - enddo - enddo - endif -! - call minmxj(IM,JM,ORO,' ORO') - CALL MAKEOA(ZAVG,VAR,GLAT,OA,OL,IWORK,ELVMAX,ORO, - & WORK1,WORK2,WORK3,WORK4, - & WORK5,WORK6, - & IST,IEN,JST,JEN,IM,JM,IMN,JMN,XLAT,numi) - call minmxj(IM,JM,OA,' OA') - call minmxj(IM,JM,OL,' OL') - call minmxj(IM,JM,ELVMAX,' ELVMAX') - call minmxj(IM,JM,ORO,' ORO') - if (check_nans) then ! --- check for nands in above -! --- check for nands in above - call nanc(OA(1,1,1), IM*JM,"MAKEOA_OA(1,1,1)") - call nanc(OA(1,1,2), IM*JM,"MAKEOA_OA(1,1,2)") - call nanc(OA(1,1,3), IM*JM,"MAKEOA_OA(1,1,3)") - call nanc(OA(1,1,4), IM*JM,"MAKEOA_OA(1,1,4)") - call nanc(OL(1,1,1), IM*JM,"MAKEOA_OL(1,1,1)") - call nanc(OL(1,1,2), IM*JM,"MAKEOA_OL(1,1,2)") - call nanc(OL(1,1,3), IM*JM,"MAKEOA_OL(1,1,3)") - call nanc(OL(1,1,4), IM*JM,"MAKEOA_OL(1,1,4)") - call nanc(ELVMAX, IM*JM,"MAKEPC_ELVMAX") - endif - - maxc3 = 0 - maxc4 = 0 - maxc5 = 0 - maxc6 = 0 - maxc7 = 0 - maxc8 = 0 - DO J = 1,JM - DO I = 1,numi(j) - if (ELVMAX(I,J) > 3000.) maxc3 = maxc3 +1 - if (ELVMAX(I,J) > 4000.) maxc4 = maxc4 +1 - if (ELVMAX(I,J) > 5000.) maxc5 = maxc5 +1 - if (ELVMAX(I,J) > 6000.) maxc6 = maxc6 +1 - if (ELVMAX(I,J) > 7000.) maxc7 = maxc7 +1 - if (ELVMAX(I,J) > 8000.) maxc8 = maxc8 +1 - ENDDO - ENDDO - write(0,*)' MAXC3:',maxc3,maxc4,maxc5,maxc6,maxc7,maxc8 -! -! itest = 151 -! jtest = 56 -! - write(0,*)' ===> Replacing ELVMAX with ELVMAX-ORO <=== ' - write(0,*)' ===> if ELVMAX<=ORO replace with proxy <=== ' - write(0,*)' ===> the sum of mean orog (ORO) and std dev <=== ' - DO J = 1,JM - DO I = 1,numi(j) - if (ELVMAX(I,J) < ORO(I,J) ) then -!--- subtracting off ORO leaves std dev (this should never happen) - ELVMAX(I,J) = MAX( 3. * VAR(I,J),0.) - else - ELVMAX(I,J) = MAX( ELVMAX(I,J) - ORO(I,J),0.) - endif - ENDDO - ENDDO - maxc3 = 0 - maxc4 = 0 - maxc5 = 0 - maxc6 = 0 - maxc7 = 0 - maxc8 = 0 - DO J = 1,JM - DO I = 1,numi(j) - if (ELVMAX(I,J) > 3000.) maxc3 = maxc3 +1 - if (ELVMAX(I,J) > 4000.) maxc4 = maxc4 +1 - if (ELVMAX(I,J) > 5000.) maxc5 = maxc5 +1 - if (ELVMAX(I,J) > 6000.) maxc6 = maxc6 +1 - if (ELVMAX(I,J) > 7000.) maxc7 = maxc7 +1 - if (ELVMAX(I,J) > 8000.) maxc8 = maxc8 +1 - ENDDO - ENDDO - write(0,*)' after MAXC 3-6 km:',maxc3,maxc4,maxc5,maxc6 -! - call mnmxja(IM,JM,ELVMAX,itest,jtest,' ELVMAX') -! if (JM .gt. 0) stop - - deallocate (ZAVG) - deallocate (ZSLM) - deallocate (UMD) - deallocate (GICE) - deallocate (work3,work4,work5,work6,iwork) -! -! ZERO OVER OCEAN -! - write(0,*)' Testing at point (itest,jtest)=',itest,jtest -! print *,' SLM(itest,jtest)=',slm(itest,jtest) - write(0,*)' ORO(itest,jtest)=',oro(itest,jtest) - - DO J = 1,JM - DO I = 1,numi(j) - IF(SLM(I,J) == 0.0) THEN -! VAR(I,J) = 0. - VAR4(I,J) = 0. - OA(I,J,1) = 0. - OA(I,J,2) = 0. - OA(I,J,3) = 0. - OA(I,J,4) = 0. - OL(I,J,1) = 0. - OL(I,J,2) = 0. - OL(I,J,3) = 0. - OL(I,J,4) = 0. -! THETA(I,J) = 0. -! GAMMA(I,J) = 0. -! SIGMA(I,J) = 0. -! ELVMAX(I,J) = 0. - ENDIF - ENDDO - ENDDO -! -! REMOVE ISOLATED POINTS -! - DO J=2,JM-1 - JN = J - 1 - JS = J + 1 - RN = REAL(NUMI(JN)) / REAL(NUMI(J)) - RS = REAL(NUMI(JS)) / REAL(NUMI(J)) - DO I=1,NUMI(J) - IW = MOD(I+IM-2,IM) + 1 - IE = MOD(I,IM) + 1 - SLMA = SLM(IW,J) + SLM(IE,J) - OROA = ORO(IW,J) + ORO(IE,J) - VARA = VAR(IW,J) + VAR(IE,J) - VAR4A = VAR4(IW,J) + VAR4(IE,J) - DO K=1,4 - OAA(K) = OA(IW,J,K) + OA(IE,J,K) -! --- (*j*) fix typo: August 27, 2012 -! OLA(K) = OA(IW,J,K) + OA(IE,J,K) - OLA(K) = OL(IW,J,K) + OL(IE,J,K) - ENDDO - WGTA = 2 - XN = RN*(I-1) + 1 - IF (ABS(XN-NINT(XN)) < 1.E-2) THEN - IN = MOD(NINT(XN)-1,NUMI(JN)) + 1 - INW = MOD(IN+NUMI(JN)-2,NUMI(JN)) + 1 - INE = MOD(IN,NUMI(JN)) + 1 - SLMA = SLMA + SLM(INW,JN) + SLM(IN,JN) + SLM(INE,JN) - OROA = OROA + ORO(INW,JN) + ORO(IN,JN) + ORO(INE,JN) - VARA = VARA + VAR(INW,JN) + VAR(IN,JN) + VAR(INE,JN) - VAR4A = VAR4A + VAR4(INW,JN) + VAR4(IN,JN) + VAR4(INE,JN) - DO K=1,4 - OAA(K) = OAA(K) + OA(INW,JN,K) + OA(IN,JN,K) + OA(INE,JN,K) - OLA(K) = OLA(K) + OL(INW,JN,K) + OL(IN,JN,K) + OL(INE,JN,K) - ENDDO - WGTA = WGTA + 3 - ELSE - INW = INT(XN) - INE = MOD(INW,NUMI(JN)) + 1 - SLMA = SLMA+SLM(INW,JN) + SLM(INE,JN) - OROA = OROA+ORO(INW,JN) + ORO(INE,JN) - VARA = VARA+VAR(INW,JN) + VAR(INE,JN) - VAR4A = VAR4A+VAR4(INW,JN) + VAR4(INE,JN) - DO K=1,4 - OAA(K) = OAA(K) + OA(INW,JN,K) + OA(INE,JN,K) - OLA(K) = OLA(K) + OL(INW,JN,K) + OL(INE,JN,K) - ENDDO - WGTA = WGTA + 2 - ENDIF - XS = RS*(I-1)+1 - IF(ABS(XS-NINT(XS)) < 1.E-2) THEN - IS = MOD(NINT(XS)-1,NUMI(JS)) + 1 - ISW = MOD(IS+NUMI(JS)-2,NUMI(JS)) + 1 - ISE = MOD(IS,NUMI(JS)) + 1 - SLMA = SLMA + SLM(ISW,JS) + SLM(IS,JS) + SLM(ISE,JS) - OROA = OROA + ORO(ISW,JS) + ORO(IS,JS) + ORO(ISE,JS) - VARA = VARA + VAR(ISW,JS) + VAR(IS,JS) + VAR(ISE,JS) - VAR4A = VAR4A + VAR4(ISW,JS) + VAR4(IS,JS) + VAR4(ISE,JS) - DO K=1,4 - OAA(K) = OAA(K) + OA(ISW,JS,K) + OA(IS,JS,K) + OA(ISE,JS,K) - OLA(K) = OLA(K) + OL(ISW,JS,K) + OL(IS,JS,K) + OL(ISE,JS,K) - ENDDO - WGTA = WGTA + 3 - ELSE - ISW = INT(XS) - ISE = MOD(ISW,NUMI(JS)) + 1 - SLMA = SLMA + SLM(ISW,JS) + SLM(ISE,JS) - OROA = OROA + ORO(ISW,JS) + ORO(ISE,JS) - VARA = VARA + VAR(ISW,JS) + VAR(ISE,JS) - VAR4A = VAR4A + VAR4(ISW,JS) + VAR4(ISE,JS) - DO K=1,4 - OAA(K) = OAA(K) + OA(ISW,JS,K) + OA(ISE,JS,K) - OLA(K) = OLA(K) + OL(ISW,JS,K) + OL(ISE,JS,K) - ENDDO - WGTA = WGTA + 2 - ENDIF - OROA = OROA / WGTA - VARA = VARA / WGTA - VAR4A = VAR4A / WGTA - DO K=1,4 - OAA(K) = OAA(K) / WGTA - OLA(K) = OLA(K) / WGTA - ENDDO - IF(SLM(I,J) == 0..AND.SLMA == WGTA) THEN - PRINT '("SEA ",2F8.0," MODIFIED TO LAND",2F8.0," AT ",2I8)', - & ORO(I,J),VAR(I,J),OROA,VARA,I,J - SLM(I,J) = 1. - ORO(I,J) = OROA - VAR(I,J) = VARA - VAR4(I,J) = VAR4A - DO K=1,4 - OA(I,J,K) = OAA(K) - OL(I,J,K) = OLA(K) - ENDDO - ELSEIF(SLM(I,J) == 1. .AND. SLMA == 0.) THEN - PRINT '("LAND",2F8.0," MODIFIED TO SEA ",2F8.0," AT ",2I8)', - & ORO(I,J),VAR(I,J),OROA,VARA,I,J - SLM(I,J) = 0. - ORO(I,J) = OROA - VAR(I,J) = VARA - VAR4(I,J) = VAR4A - DO K=1,4 - OA(I,J,K) = OAA(K) - OL(I,J,K) = OLA(K) - ENDDO - ENDIF - ENDDO - ENDDO -!--- print for testing after isolated points removed - write(0,*)' after isolated points removed' - - call minmxj(IM,JM,ORO,' ORO') - -! print *,' JM=',JM,' numi=',numi - write(0,*)' ORO(itest,jtest)=',oro(itest,jtest) - write(0,*)' VAR(itest,jtest)=',var(itest,jtest) - write(0,*)' VAR4(itest,jtest)=',var4(itest,jtest) - write(0,*)' OA(itest,jtest,1)=',oa(itest,jtest,1) - write(0,*)' OA(itest,jtest,2)=',oa(itest,jtest,2) - write(0,*)' OA(itest,jtest,3)=',oa(itest,jtest,3) - write(0,*)' OA(itest,jtest,4)=',oa(itest,jtest,4) - write(0,*)' OL(itest,jtest,1)=',ol(itest,jtest,1) - write(0,*)' OL(itest,jtest,2)=',ol(itest,jtest,2) - write(0,*)' OL(itest,jtest,3)=',ol(itest,jtest,3) - write(0,*)' OL(itest,jtest,4)=',ol(itest,jtest,4) - write(0,*)' Testing at point (itest,jtest)=',itest,jtest - write(0,*)' THETA(itest,jtest)=',theta(itest,jtest) - write(0,*)' GAMMA(itest,jtest)=',GAMMA(itest,jtest) - write(0,*)' SIGMA(itest,jtest)=',SIGMA(itest,jtest) - write(0,*)' ELVMAX(itest,jtest)=',ELVMAX(itest,jtest) - write(0,*)' EFAC=',EFAC -! - DO J=1,JM - DO I=1,numi(j) - ORO(I,J) = ORO(I,J) + EFAC*VAR(I,J) - HPRIME(I,J,1) = VAR(I,J) - HPRIME(I,J,2) = VAR4(I,J) - HPRIME(I,J,3) = oa(I,J,1) - HPRIME(I,J,4) = oa(I,J,2) - HPRIME(I,J,5) = oa(I,J,3) - HPRIME(I,J,6) = oa(I,J,4) - HPRIME(I,J,7) = ol(I,J,1) - HPRIME(I,J,8) = ol(I,J,2) - HPRIME(I,J,9) = ol(I,J,3) - HPRIME(I,J,10) = ol(I,J,4) - HPRIME(I,J,11) = THETA(I,J) - HPRIME(I,J,12) = GAMMA(I,J) - HPRIME(I,J,13) = SIGMA(I,J) - HPRIME(I,J,14) = ELVMAX(I,J) - ENDDO - ENDDO -! - deallocate (VAR, VAR4, OA, OL) -! - call mnmxja(IM,JM,ELVMAX,itest,jtest,' ELVMAX') - -! --- Quadratic filter applied by default. -! --- NF0 is normally set to an even value beyond the previous truncation, -! --- for example, for jcap=382, NF0=254+2 -! --- NF1 is set as jcap+2 (and/or nearest even), eg., for t382, NF1=382+2=384 -! --- if no filter is desired then NF1=NF0=0 and ORF=ORO -! --- if no filter but spectral to grid (with gibbs) then NF1=jcap+2, and NF0=jcap+1 -! - oro_s = oro -! - IF ( NF1 - NF0 == 0 ) FILTER = .FALSE. - write(0,*)' NF1, NF0, FILTER=',NF1,NF0,FILTER - - IF (FILTER) THEN ! SPECTRALLY TRUNCATE AND FILTER OROGRAPHY - do j=1,jm - if(numi(j) < im) then - ffj = cmplx(0.,0.) - call spfft1(numi(j),imb2p1,numi(j),1,ffj,oro(1,j),-1) - call spfft1(im, imb2p1,im, 1,ffj,oro(1,j),+1) - endif - enddo - -! write(0,*)' calling sptezj -1 nm=',nm,' nw=',nw,' im=',im -! &,' jm=',jm,' latch=',latch - - CALL SPTEZ(NR,NM,4,IM,JM,ORS,ORO,-1) - -! CALL SPTEZJ(NM,NW,1,4,IM,JM,1,ORS,ORO,latch,-1) -! - FFF = 1./(NF1-NF0)**2 - I = 0 - DO M=0,NM - DO N=M,NM+NR*M - IF(N > NF0) THEN - WWW = MAX(1.-FFF*(N-NF0)**2,0.) - ORS(I+1) = ORS(I+1)*WWW - ORS(I+2) = ORS(I+2)*WWW - ENDIF - I = I + 2 - ENDDO - ENDDO -! -! write(0,*),' calling sptezj +1 nm=',nm,' nw=',nw,' im=',im -! &,' jm=',jm,' latch=',latch - - CALL SPTEZ(NR,NM,4,IM,JM,ORS,ORF,+1) -! CALL SPTEZJ(NM,NW,1,4,IM,JM,1,ORS,ORF,latch,+1) - - do j=1,jm - if(numi(j) < im) then - call spfft1(im, imb2p1,im, 1,ffj,orf(1,j),-1) - call spfft1(numi(j),imb2p1,numi(j),1,ffj,orf(1,j),+1) - endif - enddo - - ELSE - IF (REVLAT) THEN - CALL REVERS(IM, JM, numi, SLM, WORK1) - CALL REVERS(IM, JM, numi, ORO, WORK1) - DO IMT=1,NMT - CALL REVERS(IM, JM, numi, HPRIME(1,1,IMT), WORK1) - ENDDO - ENDIF - ORS = 0. - ORF = ORO - ENDIF - oro = oro_s - call mnmxja(IM,JM,ELVMAX,itest,jtest,' ELVMAX') - - write(0,*)' ELVMAX(',itest,jtest,')=',ELVMAX(itest,jtest) - write(0,*)' after spectral filter is applied' - - call minmxj(IM,JM,ORO,' ORO') - call minmxj(IM,JM,ORF,' ORF') -! -! USE NEAREST NEIGHBOR INTERPOLATION TO FILL FULL GRIDS -! - call rg2gg(im,jm,numi,slm) - call rg2gg(im,jm,numi,oro) - call rg2gg(im,jm,numi,oro_s) - call rg2gg(im,jm,numi,orf) -! --- not apply to new prin coord and ELVMAX (*j*) - do imt=1,nmt - call rg2gg(im,jm,numi,hprime(1,1,imt)) - enddo -! -! write(0,*),' after nearest neighbor interpolation applied ' - call minmxj(IM,JM,ORO,' ORO') - call minmxj(IM,JM,ORF,' ORF') - call mnmxja(IM,JM,ELVMAX,itest,jtest,' ELVMAX') - write(0,*)' ORO,ORF(itest,jtest),itest,jtest:', - & ORO(itest,jtest),ORF(itest,jtest),itest,jtest - write(0,*)' ELVMAX(',itest,jtest,')=',ELVMAX(itest,jtest) -! check antarctic pole - DO J = 1,JM - DO I = 1,numi(j) - if ( i <= min(numi(j),21) .and. i > 0 )then - if (j == JM ) write(6,153)i,j,ORO(i,j),ELVMAX(i,j),SLM(i,j) - 153 format(1x,' ORO,ELVMAX(i=',i4,' j=',i4,')=',2E14.5,f5.1) - endif - ENDDO - ENDDO - -! OUTPUT BINARY FIELDS - - WRITE(51) REAL(SLM,4) - WRITE(52) REAL(ORF,4) - WRITE(53) REAL(HPRIME,4) - WRITE(54) REAL(ORS,4) - WRITE(55) REAL(ORO,4) - WRITE(66) REAL(THETA,4) - WRITE(67) REAL(GAMMA,4) - WRITE(68) REAL(SIGMA,4) -! - call minmxj(IM,JM,ORO,' ORO') - - write(0,*)' IM=',IM,' JM=',JM,' SPECTR=',SPECTR - -!--- Test binary file output: - WRITE(71) REAL(SLM,4) - DO IMT=1,NMT - WRITE(71) REAL(HPRIME(:,:,IMT),4) - print *,' HPRIME(',itest,jtest,imt,')=',HPRIME(itest,jtest,imt) - ENDDO - WRITE(71) REAL(ORO,4) - IF (SPECTR) THEN - WRITE(71) REAL(ORF,4) ! smoothed spectral orography! - ENDIF - -! OUTPUT GRIB FIELDS - - KPDS = 0 - KPDS(1) = 7 - KPDS(2) = 78 - KPDS(3) = 255 - KPDS(4) = 128 - KPDS(5) = 81 - KPDS(6) = 1 - kpds(8) = 2004 - KPDS(9) = 1 - KPDS(10) = 1 - KPDS(13) = 4 - KPDS(15) = 1 - KPDS(16) = 51 - KPDS(17) = 1 - KPDS(18) = 1 - KPDS(19) = 1 - KPDS(21) = 20 - KPDS(22) = 1 - - KGDS = 0 - KGDS(1) = 4 - KGDS(2) = IM - KGDS(3) = JM - KGDS(4) = 90000-180000/PI*RCLT(1) - KGDS(6) = 128 - KGDS(7) = 180000/PI*RCLT(1)-90000 - KGDS(8) = -NINT(360000./IM) - KGDS(9) = NINT(360000./IM) - KGDS(10) = JM/2 - KGDS(20) = 255 - - CALL BAOPENwt(56,'fort.56',IRET) - CALL PUTGB(56,IM*JM,KPDS,KGDS,LB,SLM,IRET) - - write(0,*)' SLM: putgb-KPDS(22,5),iret:',KPDS(22),KPDS(5),IRET - - KPDS(5) = 8 - IF (SPECTR) THEN - CALL BAOPENwt(57,'fort.57',IRET) - CALL PUTGB(57,IM*JM,KPDS,KGDS,LB,ORF,IRET) - write(0,*)' ORF (ORO): putgb-KPDS(22,5),iret:',KPDS(22),KPDS(5) - & ,IRET - CALL BAOPENwt(72,'fort.72',IRET) - CALL PUTGB(72,IM*JM,KPDS,KGDS,LB,ORO_S,IRET) - write(0,*)' ORO_UF (ORO): putgb-KPDS(22,5),iret:',KPDS(22), - & KPDS(5) - & ,IRET -! else ! grib output for lat/lon grid KPD's need to be defined -! CALL BAOPENwt(57,'fort.57',IRET) -! CALL PUTGB(57,IM*JM,KPDS,KGDS,LB,ORO,IRET) -! print *,' ORO (ORO): putgb-KPDS(22,5),iret:',KPDS(22),KPDS(5) -! & ,IRET - ENDIF -! -! === write out theta (angle of land to East) using #101 (wave dir) -! === [radians] and since < 1 scale adjust kpds(22) -! - KPDS(5) = 101 - CALL BAOPENwt(58,'fort.58',IRET) - CALL PUTGB(58,IM*JM,KPDS,KGDS,LB,THETA,IRET) - - write(0,*)' THETA: putgb-KPDS(22,5),iret:',KPDS(22),KPDS(5),IRET -! -! === write out (land aspect ratio or anisotropy) using #102 -! === (as in wind wave hgt) -! - KPDS(22) = 2 - KPDS(5) = 102 - CALL BAOPENwt(60,'fort.60',IRET) - CALL PUTGB(60,IM*JM,KPDS,KGDS,LB,SIGMA,IRET) - write(0,*)' SIGMA: putgb-KPDS(22,5),iret:',KPDS(22),KPDS(5),IRET -! -! === write out (slope parameter sigma) using #9 -! === (as in std hgt) -! - KPDS(22) = 1 - KPDS(5) = 103 - CALL BAOPENwt(59,'fort.59',IRET) - CALL PUTGB(59,IM*JM,KPDS,KGDS,LB,GAMMA,IRET) - - write(0,*)' GAMMA: putgb-KPDS(22,5),iret:',KPDS(22),KPDS(5),IRET -! - KPDS(22) = 1 - KPDS(5) = 9 - CALL BAOPENwt(61,'fort.61',IRET) - CALL PUTGB(61,IM*JM,KPDS,KGDS,LB,HPRIME,IRET) - - write(0,*)' HPRIME: putgb-KPDS(22,5),iret:',KPDS(22),KPDS(5),IRET -! -! - KPDS(22) = 1 - KPDS(5) = 8 - CALL BAOPENwt(62,'fort.62',IRET) - CALL PUTGB(62,IM*JM,KPDS,KGDS,LB,ELVMAX,IRET) - - write(0,*)' ELVMAX: putgb-KPDS(22,5),iret:',KPDS(22),KPDS(5),IRET -! - RETURN - END - SUBROUTINE MAKEMT(ZAVG,ZSLM,ORO,SLM,VAR,VAR4, - & GLAT,IST,IEN,JST,JEN,IM,JM,IMN,JMN,XLAT,numi) -! - implicit none -! - integer im, jm, imn, jmn - INTEGER ZAVG(IMN,JMN),ZSLM(IMN,JMN) - &, IST(IM,jm),IEN(IM,jm),JST(JM),JEN(JM),numi(jm) - real ORO(IM,JM),SLM(IM,JM),VAR(IM,JM),VAR4(IM,JM) - &, GLAT(JMN),XLAT(JM) -! - LOGICAL FLAG, DEBUG -!==== DATA DEBUG/.TRUE./ - DATA DEBUG/.FALSE./ -! - integer i, j, im1, jm1, ii1, i1, j1 - real delx, delxn, faclon, xnsum, xland, xwatr, xl1, xs1 - &, xw1, xw2, xw4, height, xxlat -! - print *,' _____ SUBROUTINE MAKEMT ' -!---- GLOBAL XLAT AND XLON ( DEGREE ) -! - JM1 = JM - 1 - DELXN = 360./IMN ! MOUNTAIN DATA RESOLUTION -! - DO J=1,JMN - GLAT(J) = -90. + (J-1) * DELXN + DELXN * 0.5 - ENDDO -! -!---- FIND THE AVERAGE OF THE MODES IN A GRID BOX -! -! (*j*) for hard wired zero offset (lambda s =0) for terr05 - DO J=1,JM - DO I=1,numi(j) - IM1 = numi(j) - 1 - DELX = 360./numi(j) ! GAUSSIAN GRID RESOLUTION - FACLON = DELX / DELXN - IST(I,j) = FACLON * FLOAT(I-1) - FACLON * 0.5 + 1 - IEN(I,j) = FACLON * FLOAT(I) - FACLON * 0.5 + 1 - -! IST(I,j) = FACLON * FLOAT(I-1) + 1.0001 -! IEN(I,j) = FACLON * FLOAT(I) + 0.0001 -! - IF (IST(I,j) <= 0) IST(I,j) = IST(I,j) + IMN - IF (IEN(I,j) < IST(I,j)) IEN(I,j) = IEN(I,j) + IMN -! -! if ( I .lt. 10 .and. J .ge. JM-1 ) -! 1 PRINT*,' MAKEMT: I j IST IEN ',I,j,IST(I,j),IEN(I,j) - ENDDO -! if ( J .ge. JM-1 ) then -! print *,' *** FACLON=',FACLON, 'numi(j=',j,')=',numi(j) -! endif - ENDDO - print *,' DELX=',DELX,' DELXN=',DELXN - DO J=1,JM-1 - FLAG=.TRUE. - DO J1=1,JMN - XXLAT = (XLAT(J)+XLAT(J+1))*0.5 - IF(FLAG .AND. GLAT(J1) > XXLAT) THEN - JST(J) = J1 - JEN(J+1) = J1 - 1 - FLAG = .FALSE. - ENDIF - ENDDO -!X PRINT*, ' J JST JEN ',J,JST(J),JEN(J),XLAT(J),GLAT(J1) - ENDDO - JST(JM) = MAX(JST(JM-1) - (JEN(JM-1)-JST(JM-1)),1) - JEN(1) = MIN(JEN(2) + (JEN(2)-JST(2)),JMN) - -! PRINT*, ' JM JST JEN=',JST(JM),JEN(JM),XLAT(JM),GLAT(JMN) -! -!...FIRST, AVERAGED HEIGHT -! - DO J=1,JM - DO I=1,numi(j) - ORO(I,J) = 0.0 - VAR(I,J) = 0.0 - VAR4(I,J) = 0.0 - XNSUM = 0.0 - XLAND = 0.0 - XWATR = 0.0 - XL1 = 0.0 - XS1 = 0.0 - XW1 = 0.0 - XW2 = 0.0 - XW4 = 0.0 - DO II1 = 1, IEN(I,J) - IST(I,J) + 1 - I1 = IST(I,J) + II1 - 1 - IF(I1 <= 0) I1 = I1 + IMN - IF(I1 > IMN) I1 = I1 - IMN - -! if ( i .le. 10 .and. i .ge. 1 ) then -! if (j .eq. JM ) -! &print *,' J,JST,JEN,IST,IEN,I1=', -! &J,JST(j),JEN(J),IST(I,j),IEN(I,j),I1 -! endif - - DO J1=JST(J),JEN(J) - XLAND = XLAND + FLOAT(ZSLM(I1,J1)) - XWATR = XWATR + FLOAT(1-ZSLM(I1,J1)) - XNSUM = XNSUM + 1. - HEIGHT = FLOAT(ZAVG(I1,J1)) - IF(HEIGHT < -990.) HEIGHT = 0.0 -!......... - XL1 = XL1 + HEIGHT * FLOAT(ZSLM(I1,J1)) - XS1 = XS1 + HEIGHT * FLOAT(1-ZSLM(I1,J1)) - XW1 = XW1 + HEIGHT - XW2 = XW2 + HEIGHT * HEIGHT - -! check antarctic pole -! if ( i .le. 10 .and. i .ge. 1 )then -! if (j .ge. JM-1 )then -! write(6,153)i,j,ORO(i,j),HEIGHT,SLM(i,j) -!=== degub testing -! print *," I,J,I1,J1,XL1,XS1,XW1,XW2:",I,J,I1,J1,XL1,XS1,XW1,XW2 -! 153 format(1x,' ORO,ELVMAX(i=',i4,' j=',i3,')=',2E14.5,3f5.1) -! endif -! endif - - ENDDO - ENDDO - IF(XNSUM > 1.) THEN - SLM(I,J) = FLOAT(NINT(XLAND/XNSUM)) - IF(SLM(I,J) /= 0.) THEN - if (xland > 0.0) ORO(I,J)= XL1 / XLAND - ELSE - if (xwatr > 0.0) ORO(I,J)= XS1 / XWATR - ENDIF - VAR(I,J) = SQRT(MAX(XW2/XNSUM-(XW1/XNSUM)**2,0.)) - DO II1 = 1, IEN(I,j) - IST(I,J) + 1 - I1 = IST(I,J) + II1 - 1 - IF(I1 <= 0.) I1 = I1 + IMN - IF(I1 > IMN) I1 = I1 - IMN - DO J1=JST(J),JEN(J) - HEIGHT = FLOAT(ZAVG(I1,J1)) - IF(HEIGHT < -990.) HEIGHT = 0.0 - XW4 = XW4 + (HEIGHT-ORO(I,J)) ** 4 - ENDDO - ENDDO - IF(VAR(I,J) > 1.) THEN -! if ( I .lt. 20 .and. J .ge. JM-19 ) then -! print *,'I,J,XW4,XNSUM,VAR(I,J)',I,J,XW4,XNSUM,VAR(I,J) -! endif - VAR4(I,J) = MIN(XW4/XNSUM/VAR(I,J) **4,10.) - ENDIF - ENDIF - ENDDO - ENDDO - - WRITE(6,*) "! MAKEMT ORO SLM VAR VAR4 DONE" -! - - RETURN - END - SUBROUTINE MAKEPC(ZAVG,ZSLM,THETA,GAMMA,SIGMA, - 1 GLAT,IST,IEN,JST,JEN,IM,JM,IMN,JMN,XLAT,numi) -! -!=== PC: principal coordinates of each Z avg orog box for L&M -! - implicit none -! - real, parameter :: REARTH=6.3712E+6 - integer IM,JM,IMN,JMN - INTEGER ZAVG(IMN,JMN),ZSLM(IMN,JMN) - &, IST(IM,jm),IEN(IM,jm),JST(JM),JEN(JM),numi(jm) - real GLAT(JMN),XLAT(JM),DELTAX(JMN) - &, ORO(IM,JM),SLM(IM,JM),HL(IM,JM),HK(IM,JM) - real HX2(IM,JM),HY2(IM,JM),HXY(IM,JM),HLPRIM(IM,JM) - &, THETA(IM,JM),GAMMA(IM,JM),SIGMA2(IM,JM),SIGMA(IM,JM) - LOGICAL FLAG, DEBUG -!=== DATA DEBUG/.TRUE./ - DATA DEBUG/.FALSE./ -! - integer i, j, jm1, ii1, i0, i1, j1, ip1, ijax - real pi, certh, delxn, deltay, delx, faclon, xxlat - &, xnsum, xland, xwatr, xl1, xs1, xfp, yfp, xfpyfp, xfp2 - &, yfp2, height, hi0, hi1, hip1, hijax, hi1j1, hj0, hjp1 -! - PI = 4.0 * ATAN(1.0) - CERTH = PI * REARTH -!---- GLOBAL XLAT AND XLON ( DEGREE ) -! - JM1 = JM - 1 - DELXN = 360./IMN ! MOUNTAIN DATA RESOLUTION - DELTAY = CERTH / FLOAT(JMN) - print *, 'MAKEPC: DELTAY=',DELTAY -! - DO J=1,JMN - GLAT(J) = -90. + (J-1) * DELXN + DELXN * 0.5 - DELTAX(J) = DELTAY * COSD(GLAT(J)) - ENDDO -! -!---- FIND THE AVERAGE OF THE MODES IN A GRID BOX -! - DO J=1,JM - DO I=1,numi(j) -! IM1 = numi(j) - 1 - DELX = 360. / numi(j) ! GAUSSIAN GRID RESOLUTION - FACLON = DELX / DELXN - IST(I,j) = FACLON * FLOAT(I-1) - FACLON * 0.5 - IST(I,j) = IST(I,j) + 1 - IEN(I,j) = FACLON * FLOAT(I) - FACLON * 0.5 - -! if (debug) then -! if ( I < 10 .and. J < 10 ) -! 1 PRINT*, ' I j IST IEN ',I,j,IST(I,j),IEN(I,j) -! endif -! IST(I,j) = FACLON * FLOAT(I-1) + 1.0001 -! IEN(I,j) = FACLON * FLOAT(I) + 0.0001 - - IF (IST(I,j) <= 0) IST(I,j) = IST(I,j) + IMN - IF (IEN(I,j) < IST(I,j)) IEN(I,j) = IEN(I,j) + IMN - if (debug) then - if ( I < 10 .and. J < 10 ) - 1 PRINT*, ' I j IST IEN ',I,j,IST(I,j),IEN(I,j) - endif - IF (IEN(I,j) .LT. IST(I,j)) - 1 print *,' MAKEPC: IEN < IST: I,J,IST(I,J),IEN(I,J)', - 2 I,J,IST(I,J),IEN(I,J) - ENDDO - ENDDO - DO J=1,JM-1 - FLAG=.TRUE. - DO J1=1,JMN - XXLAT = (XLAT(J)+XLAT(J+1))*0.5 - IF(FLAG .AND. GLAT(J1) > XXLAT) THEN - JST(J) = J1 - JEN(J+1) = J1 - 1 - FLAG = .FALSE. - ENDIF - ENDDO - ENDDO - JST(JM) = MAX(JST(JM-1) - (JEN(JM-1)-JST(JM-1)),1) - JEN(1) = MIN(JEN(2) + (JEN(2)-JST(2)),JMN) - if (debug) then - PRINT*, ' IST,IEN(1,1-numi(1,JM))',IST(1,1),IEN(1,1), - 1 IST(numi(JM),JM),IEN(numi(JM),JM), numi(JM) - PRINT*, ' JST,JEN(1,JM) ',JST(1),JEN(1),JST(JM),JEN(JM) - endif -! -!... DERIVITIVE TENSOR OF HEIGHT -! - DO J=1,JM - DO I=1,numi(j) - ORO(I,J) = 0.0 - HX2(I,J) = 0.0 - HY2(I,J) = 0.0 - HXY(I,J) = 0.0 - XNSUM = 0.0 - XLAND = 0.0 - XWATR = 0.0 - XL1 = 0.0 - XS1 = 0.0 - xfp = 0.0 - yfp = 0.0 - xfpyfp = 0.0 - xfp2 = 0.0 - yfp2 = 0.0 - HL(I,J) = 0.0 - HK(I,J) = 0.0 - HLPRIM(I,J) = 0.0 - THETA(I,J) = 0.0 - GAMMA(I,J) = 0. - SIGMA2(I,J) = 0. - SIGMA(I,J) = 0. -! - DO II1 = 1, IEN(I,J) - IST(I,J) + 1 - I1 = IST(I,J) + II1 - 1 - IF(I1.LE.0.) I1 = I1 + IMN - IF(I1.GT.IMN) I1 = I1 - IMN -! -!=== set the rest of the indexs for ave: 2pt staggered derivitive -! - i0 = i1 - 1 - if (i1 - 1 <= 0 ) i0 = i0 + imn - if (i1 - 1 > imn) i0 = i0 - imn - - ip1 = i1 + 1 - if (i1 + 1 <= 0 ) ip1 = ip1 + imn - if (i1 + 1 > imn) ip1 = ip1 - imn -! - DO J1=JST(J),JEN(J) - if (debug) then - if ( I1 == IST(I,J) .and. J1 == JST(J) ) - 1 PRINT*, ' J, J1,IST,JST,DELTAX,GLAT ', - 2 J,J1,IST(I,J),JST(J),DELTAX(J1),GLAT(J1) - if ( I1 .eq. IEN(I,J) .and. J1 .eq. JEN(J) ) - 1 PRINT*, ' J, J1,IEN,JEN,DELTAX,GLAT ', - 2 J,J1,IEN(I,J),JEN(J),DELTAX(J1),GLAT(J1) - endif - XLAND = XLAND + FLOAT(ZSLM(I1,J1)) - XWATR = XWATR + FLOAT(1-ZSLM(I1,J1)) - XNSUM = XNSUM + 1. -! - HEIGHT = FLOAT(ZAVG(I1,J1)) - hi0 = float(zavg(i0,j1)) - hip1 = float(zavg(ip1,j1)) -! - IF(HEIGHT < -990.) HEIGHT = 0.0 - if(hi0 < -990.) hi0 = 0.0 - if(hip1 < -990.) hip1 = 0.0 -!........ xfp = xfp + 0.5 * ( hip1 - hi0 ) / DELTAX(J1) - xfp = 0.5 * ( hip1 - hi0 ) / DELTAX(J1) - xfp2 = xfp2 + 0.25 * ( ( hip1 - hi0 )/DELTAX(J1) )** 2 -! -! --- not at boundaries - if ( J1 /= JST(1) .and. J1 /= JEN(JM) ) then - hj0 = float(zavg(i1,j1-1)) - hjp1 = float(zavg(i1,j1+1)) - if(hj0 < -990.) hj0 = 0.0 - if(hjp1 < -990.) hjp1 = 0.0 -!....... yfp = yfp + 0.5 * ( hjp1 - hj0 ) / DELTAY - yfp = 0.5 * ( hjp1 - hj0 ) / DELTAY - yfp2 = yfp2 + 0.25 * ( ( hjp1 - hj0 )/DELTAY )**2 - -!.............. elseif ( J1 == JST(J) .or. J1 == JEN(JM) ) then -! === the NH pole: NB J1 goes from High at NP to Low toward SP -! - elseif ( J1 == JST(1) ) then - ijax = i1 + imn/2 - if (ijax <= 0 ) ijax = ijax + imn - if (ijax > imn) ijax = ijax - imn -!..... at N pole we stay at the same latitude j1 but cross to opp side - hijax = float(zavg(ijax,j1)) - hi1j1 = float(zavg(i1,j1)) - if(hijax < -990.) hijax = 0.0 - if(hi1j1 < -990.) hi1j1 = 0.0 -!....... yfp = yfp + 0.5 * ( ( 0.5 * ( hijax + hi1j1) ) - hi1j1 )/DELTAY - yfp = 0.5 * ( ( 0.5 * ( hijax - hi1j1 ) ) )/DELTAY - yfp2 = yfp2 + 0.25 * ( ( 0.5 * ( hijax - hi1j1) ) - 1 / DELTAY )**2 -! -! === the SH pole: NB J1 goes from High at NP to Low toward SP -! - elseif ( J1 == JEN(JM) ) then - ijax = i1 + imn/2 - if (ijax <= 0 ) ijax = ijax + imn - if (ijax > imn) ijax = ijax - imn - hijax = float(zavg(ijax,j1)) - hi1j1 = float(zavg(i1,j1)) - if(hijax < -990.) hijax = 0.0 - if(hi1j1 < -990.) hi1j1 = 0.0 - if ( i1 < 5 ) - & print *,' S.Pole i1,j1 :',i1,j1,hijax,hi1j1 -!..... yfp = yfp + 0.5 * (0.5 * ( hijax - hi1j1) )/DELTAY - yfp = 0.5 * (0.5 * ( hijax - hi1j1) )/DELTAY - yfp2 = yfp2 + 0.25 * ( (0.5 * (hijax - hi1j1) ) - 1 / DELTAY )**2 - endif -! -! === The above does an average across the pole for the bndry in j. -!23456789012345678901234567890123456789012345678901234567890123456789012...... -! - xfpyfp = xfpyfp + xfp * yfp - XL1 = XL1 + HEIGHT * FLOAT(ZSLM(I1,J1)) - XS1 = XS1 + HEIGHT * FLOAT(1-ZSLM(I1,J1)) -! -! === average the HX2, HY2 and HXY -! === This will be done over all land -! - ENDDO - ENDDO -! -! === HTENSR -! - IF(XNSUM > 1.) THEN - SLM(I,J) = FLOAT(NINT(XLAND/XNSUM)) - IF(SLM(I,J) /= 0.) THEN - ORO(I,J) = XL1 / XLAND - HX2(I,J) = xfp2 / XLAND - HY2(I,J) = yfp2 / XLAND - HXY(I,J) = xfpyfp / XLAND - ELSE - ORO(I,J) = XS1 / XWATR - ENDIF -!=== degub testing - if (debug) then - print *," I,J,i1,j1,HEIGHT:", I,J,i1,j1,HEIGHT, - 1 XLAND,SLM(i,j) - print *," xfpyfp,xfp2,yfp2:",xfpyfp,xfp2,yfp2 - print *," HX2,HY2,HXY:",HX2(I,J),HY2(I,J),HXY(I,J) - ENDIF -! -! === make the principal axes, theta, and the degree of anisotropy, -! === and sigma2, the slope parameter -! - HK(I,J) = 0.5 * ( HX2(I,J) + HY2(I,J) ) - HL(I,J) = 0.5 * ( HX2(I,J) - HY2(I,J) ) - HLPRIM(I,J) = SQRT(HL(I,J)*HL(I,J) + HXY(I,J)*HXY(I,J)) - IF( HL(I,J) /= 0. .AND. SLM(I,J) /= 0. ) THEN - THETA(I,J) = 0.5 * ATAN2D(HXY(I,J),HL(I,J)) -! === for testing print out in degrees -! THETA(I,J) = 0.5 * ATAN2(HXY(I,J),HL(I,J)) - ENDIF - SIGMA2(I,J) = ( HK(I,J) + HLPRIM(I,J) ) - if (SIGMA2(I,J) >= 0.) then - SIGMA(I,J) = SQRT(SIGMA2(I,J) ) - if (sigma2(i,j) /= 0. .and. HK(I,J) >= HLPRIM(I,J) ) - 1 GAMMA(I,J) = sqrt( (HK(I,J) - HLPRIM(I,J)) / SIGMA2(I,J) ) - else - SIGMA(I,J) = 0. - endif - ENDIF - if (debug) then - print *," I,J,THETA,SIGMA,GAMMA,",I,J,THETA(I,J), - 1 SIGMA(I,J),GAMMA(I,J) - print *," HK,HL,HLPRIM:",HK(I,J),HL(I,J),HLPRIM(I,J) - endif - ENDDO - ENDDO - - WRITE(6,*) "! MAKE Principal Coord DONE" -! - RETURN - END - - SUBROUTINE MAKEOA(ZAVG,VAR,GLAT,OA4,OL,IOA4,ELVMAX, - 1 ORO,oro1,XNSUM,XNSUM1,XNSUM2,XNSUM3,XNSUM4, - 2 IST,IEN,JST,JEN,IM,JM,IMN,JMN,XLAT,numi) -! - implicit none -! - integer IM,JM,IMN,JMN - &, IST(IM,jm),IEN(IM,jm),JST(JM),JEN(JM),numi(jm) - &, ioa4(im,jm,4), ZAVG(IMN,JMN) - real GLAT(JMN),XLAT(JM) - &, ORO(IM,JM),ORO1(IM,JM),ELVMAX(IM,JM),ZMAX(IM,JM) - &, OA4(IM,JM,4) - real XNSUM(IM,JM),XNSUM1(IM,JM),XNSUM2(IM,JM) - &, XNSUM3(IM,JM),XNSUM4(IM,JM) - real VAR(IM,JM),OL(IM,JM,4) - LOGICAL FLAG -! - integer i, j, im1, jm1, i1, ii1, j1, kwd, ii, inci, isttt, jsttt - &, ns0, ns1, ns2, ns3, ns4, ns5, ns6, ieddd, jeddd, incj - real delx, delxn, faclon, xxlat, height, xnpu, xnpd, hc, t - &, tem -! -!---- GLOBAL XLAT AND XLON ( DEGREE ) -! -! --- IM1 = IM - 1 removed (not used in this sub) - JM1 = JM - 1 - DELXN = 360./IMN ! MOUNTAIN DATA RESOLUTION -! - DO J=1,JMN - GLAT(J) = -90. + (J-1) * DELXN + DELXN * 0.5 - ENDDO - - write(0,*)'MAKEOA: IM=',IM,' JM=',JM,' IMN=',IMN,' JMN=',JMN -! -!---- FIND THE AVERAGE OF THE MODES IN A GRID BOX -! - DO j=1,jm - DO I=1,numi(j) - DELX = 360./numi(j) ! GAUSSIAN GRID RESOLUTION - FACLON = DELX / DELXN -! --- minus sign here in IST and IEN as in MAKEMT! - IST(I,j) = FACLON * FLOAT(I-1) - FACLON * 0.5 - IST(I,j) = IST(I,j) + 1 - IEN(I,j) = FACLON * FLOAT(I) - FACLON * 0.5 -! IST(I,j) = FACLON * FLOAT(I-1) + 1.0001 -! IEN(I,j) = FACLON * FLOAT(I) + 0.0001 - IF (IST(I,j) <= 0) IST(I,j) = IST(I,j) + IMN - IF (IEN(I,j) < IST(I,j)) IEN(I,j) = IEN(I,j) + IMN -!x PRINT*, ' I j IST IEN ',I,j,IST(I,j),IEN(I,j) - if ( I .lt. 3 .and. J .lt. 3 ) - 1 PRINT*,' MAKEOA: I j IST IEN ',I,j,IST(I,j),IEN(I,j) - if ( I .lt. 3 .and. J .ge. JM-1 ) - 1 PRINT*,' MAKEOA: I j IST IEN ',I,j,IST(I,j),IEN(I,j) - ENDDO - ENDDO - write(0,*)'MAKEOA: DELXN,DELX,FACLON',DELXN,DELX,FACLON - write(0,*)' ***** ready to start JST JEN section ' -! - DO J=1,JM-1 - FLAG = .TRUE. - DO J1=1,JMN -! --- XXLAT added as in MAKEMT and in next line as well - XXLAT = (XLAT(J)+XLAT(J+1))/2. - IF(FLAG .AND. GLAT(J1) > XXLAT) THEN - JST(J) = J1 -! --- JEN(J+1) = J1 - 1 - FLAG = .FALSE. - if ( J == 1 ) PRINT*,' MAKEOA: XX j JST JEN ',j,JST(j),JEN(j) - ENDIF - ENDDO - if ( J < 3 ) PRINT*,' MAKEOA: j JST JEN ',j,JST(j),JEN(j) - if ( J >= JM-2 ) PRINT*,' MAKEOA: j JST JEN ',j,JST(j),JEN(j) -! FLAG=.TRUE. -! DO J1=JST(J),JMN -! IF(FLAG.AND.GLAT(J1).GT.XLAT(J)) THEN -! JEN(J) = J1 - 1 -! FLAG = .FALSE. -! ENDIF -! ENDDO - ENDDO - JST(JM) = MAX(JST(JM-1) - (JEN(JM-1)-JST(JM-1)),1) - JEN(1) = MIN(JEN(2) + (JEN(2)-JST(2)),JMN) - write(0,*)' ***** JST(1) JEN(1) ',JST(1),JEN(1) - write(0,*)' ***** JST(JM) JEN(JM) ',JST(JM),JEN(JM) -! - DO J=1,JM - DO I=1,numi(j) - XNSUM(I,J) = 0.0 - ELVMAX(I,J) = ORO(I,J) - ZMAX(I,J) = 0.0 - ENDDO - ENDDO -! -! --- # of peaks > ZAVG value and ZMAX(IM,JM) -- ORO is already avg. -! --- to JM or to JM1 - DO J=1,JM -! write(0,*)' J=',j,' in xnsum loop' - DO I=1,numi(j) - DO II1 = 1, IEN(I,J) - IST(I,J) + 1 - I1 = IST(I,J) + II1 - 1 -! --- next line as in makemt (I1 not II1) (*j*) 20070701 - IF(I1 <= 0.) I1 = I1 + IMN - IF (I1 > IMN) I1 = I1 - IMN - DO J1=JST(J),JEN(J) - HEIGHT = FLOAT(ZAVG(I1,J1)) - IF(HEIGHT < -990.) HEIGHT = 0.0 - IF ( HEIGHT > ORO(I,J) ) then - if ( HEIGHT > ZMAX(I,J) ) ZMAX(I,J) = HEIGHT - XNSUM(I,J) = XNSUM(I,J) + 1 - ENDIF - ENDDO - ENDDO - if ( I < 5 .and. J >= JM-5 ) then - write(0,*) ' I,J,ORO(I,J),XNSUM(I,J),ZMAX(I,J):', - 1 I,J,ORO(I,J),XNSUM(I,J),ZMAX(I,J) - endif - ENDDO - ENDDO -! -!.... make ELVMAX ORO from MAKEMT sub -! -! --- this will make work1 array take on oro's values on return - DO J=1,JM - DO I=1,numi(j) - - ORO1(I,J) = ORO(I,J) - ELVMAX(I,J) = ZMAX(I,J) - ENDDO - ENDDO -!........ -! The MAX elev peak (no averaging) -!........ -! DO J=1,JM -! DO I=1,numi(j) -! DO II1 = 1, IEN(I,J) - IST(I,J) + 1 -! I1 = IST(I,J) + II1 - 1 -! IF(I1.LE.0.) I1 = I1 + IMN -! IF(I1.GT.IMN) I1 = I1 - IMN -! DO J1=JST(J),JEN(J) -! if ( ELVMAX(I,J) .lt. ZMAX(I1,J1)) -! 1 ELVMAX(I,J) = ZMAX(I1,J1) -! ENDDO -! ENDDO -! ENDDO -! ENDDO -C -C---- COUNT NUMBER OF MODE. HIGHER THAN THE HC, CRITICAL HEIGHT -C IN A GRID BOX - DO J=1,JM - DO I=1,numi(j) - XNSUM1(I,J) = 0.0 - XNSUM2(I,J) = 0.0 - XNSUM3(I,J) = 0.0 - XNSUM4(I,J) = 0.0 - ENDDO - ENDDO -! --- loop - DO J=1,JM1 - DO I=1,numi(j) - HC = 1116.2 - 0.878 * VAR(I,J) -! print *,' I,J,HC,VAR:',I,J,HC,VAR(I,J) - DO II1 = 1, IEN(I,J) - IST(I,J) + 1 - I1 = IST(I,J) + II1 - 1 -! IF (I1.LE.0.) print *,' I1 less than 0',I1,II1,IST(I,J),IEN(I,J) -! if ( J .lt. 3 .or. J .gt. JM-2 ) then -! IF(I1 .GT. IMN)print *,' I1 > IMN',J,I1,II1,IMN,IST(I,J),IEN(I,J) -! endif - IF(I1.GT.IMN) I1 = I1 - IMN - DO J1=JST(J),JEN(J) - IF(FLOAT(ZAVG(I1,J1)) .GT. HC) - 1 XNSUM1(I,J) = XNSUM1(I,J) + 1 - XNSUM2(I,J) = XNSUM2(I,J) + 1 - ENDDO - ENDDO -! - INCI = NINT((IEN(I,j)-IST(I,j)) * 0.5) - ISTTT = MIN(MAX(IST(I,j)-INCI,1),IMN) - IEDDD = MIN(MAX(IEN(I,j)-INCI,1),IMN) -! - INCJ = NINT((JEN(J)-JST(J)) * 0.5) - JSTTT = MIN(MAX(JST(J)-INCJ,1),JMN) - JEDDD = MIN(MAX(JEN(J)-INCJ,1),JMN) -! if ( J .lt. 3 .or. J .gt. JM-3 ) then -! if(I .lt. 3 .or. I .gt. IM-3) then -! print *,' INCI,ISTTT,IEDDD,INCJ,JSTTT,JEDDD:', -! 1 I,J,INCI,ISTTT,IEDDD,INCJ,JSTTT,JEDDD -! endif -! endif -! - DO I1=ISTTT,IEDDD - DO J1=JSTTT,JEDDD - IF(FLOAT(ZAVG(I1,J1)) .GT. HC) - 1 XNSUM3(I,J) = XNSUM3(I,J) + 1 - XNSUM4(I,J) = XNSUM4(I,J) + 1 - ENDDO - ENDDO -!x print*,' i j hc var ',i,j,hc,var(i,j) -!x print*,'xnsum12 ',xnsum1(i,j),xnsum2(i,j) -!x print*,'xnsum34 ',xnsum3(i,j),xnsum4(i,j) - ENDDO - ENDDO - write(0,*)' IN MAKEOA After XNSUM4' -! -!---- CALCULATE THE 3D OROGRAPHIC ASYMMETRY FOR 4 WIND DIRECTIONS -!---- AND THE 3D OROGRAPHIC SUBGRID OROGRAPHY FRACTION -! (KWD = 1 2 3 4) -! ( WD = W S SW NW) -! -! - DO KWD = 1, 4 - DO J=1,JM - DO I=1,numi(j) - OA4(I,J,KWD) = 0.0 - ENDDO - ENDDO - ENDDO -! - DO J=1,JM-2 - DO I=1,numi(j) - II = I + 1 - IF (II .GT. numi(j)) II = II - numi(j) - XNPU = XNSUM(I,J) + XNSUM(I,J+1) - XNPD = XNSUM(II,J) + XNSUM(II,J+1) - IF (XNPD .NE. XNPU) OA4(II,J+1,1) = 1. - XNPD / MAX(XNPU , 1.) - tem = XNSUM4(I,J+1) + XNSUM4(II,J+1) - if (tem > 0.0) then - OL(II,J+1,1) = (XNSUM3(I,J+1) + XNSUM3(II,J+1)) / tem - endif - if ( I .lt. 20 .and. J .ge. JM-19 ) then - write(0,*)' MAKEOA: I J IST IEN ',I,j,IST(I,J),IEN(I,J) -! PRINT*,' HC VAR ',HC,VAR(i,j) -! PRINT*,' MAKEOA: XNSUM(I,J)=',XNSUM(I,J),XNPU, XNPD -! PRINT*,' MAKEOA: XNSUM3(I,J+1),XNSUM3(II,J+1)', -! 1 XNSUM3(I,J+1),XNSUM3(II,J+1) -! PRINT*,' MAKEOA: II, OA4(II,J+1,1), OL(II,J+1,1):', -! 1 II, OA4(II,J+1,1), OL(II,J+1,1) - endif - ENDDO - ENDDO - write(0,*)' MAKEOA: after OL loop1' - DO J=1,JM-2 - DO I=1,numi(j) - II = I + 1 - IF (II .GT. numi(j)) II = II - numi(j) - XNPU = XNSUM(I,J+1) + XNSUM(II,J+1) - XNPD = XNSUM(I,J) + XNSUM(II,J) - IF (XNPD .NE. XNPU) OA4(II,J+1,2) = 1. - XNPD / MAX(XNPU , 1.) - OL(II,J+1,2) = (XNSUM3(II,J)+XNSUM3(II,J+1))/ - 1 (XNSUM4(II,J)+XNSUM4(II,J+1)) - ENDDO - ENDDO - write(0,*)' MAKEOA: after OL loop2' - DO J=1,JM-2 - DO I=1,numi(j) - II = I + 1 - IF (II .GT. numi(j)) II = II - numi(j) - XNPU = XNSUM(I,J+1) + ( XNSUM(I,J) + XNSUM(II,J+1) )*0.5 - XNPD = XNSUM(II,J) + ( XNSUM(I,J) + XNSUM(II,J+1) )*0.5 - IF (XNPD .NE. XNPU) OA4(II,J+1,3) = 1. - XNPD / MAX(XNPU , 1.) - OL(II,J+1,3) = (XNSUM1(II,J)+XNSUM1(I,J+1))/ - 1 (XNSUM2(II,J)+XNSUM2(I,J+1)) - ENDDO - ENDDO - write(0,*)' MAKEOA: after OL loop3' - DO J=1,JM-2 - DO I=1,numi(j) - II = I + 1 - IF (II .GT. numi(j)) II = II - numi(j) - XNPU = XNSUM(I,J) + ( XNSUM(II,J) + XNSUM(I,J+1) )*0.5 - XNPD = XNSUM(II,J+1) + ( XNSUM(II,J) + XNSUM(I,J+1) )*0.5 - IF (XNPD .NE. XNPU) OA4(II,J+1,4) = 1. - XNPD / MAX(XNPU , 1.) - OL(II,J+1,4) = (XNSUM1(I,J)+XNSUM1(II,J+1))/ - 1 (XNSUM2(I,J)+XNSUM2(II,J+1)) - ENDDO - ENDDO - write(0,*)' MAKEOA: after OL loop4' -! - DO KWD = 1, 4 - DO I=1,numi(j) - OL(I,1,KWD) = OL(I,2,KWD) - OL(I,JM,KWD) = OL(I,JM-1,KWD) - ENDDO - ENDDO -! - write(0,*)' IN MAKEOA Bef OA4' - DO KWD=1,4 - DO J=1,JM - DO I=1,numi(j) - T = OA4(I,J,KWD) - OA4(I,J,KWD) = SIGN( MIN( ABS(T), 1. ), T ) - ENDDO - ENDDO - ENDDO -! - NS0 = 0 - NS1 = 0 - NS2 = 0 - NS3 = 0 - NS4 = 0 - NS5 = 0 - NS6 = 0 - DO KWD=1,4 - DO J=1,JM - DO I=1,numi(j) - T = ABS( OA4(I,J,KWD) ) - IF(T .EQ. 0.) THEN - IOA4(I,J,KWD) = 0 - NS0 = NS0 + 1 - ELSE IF(T .GT. 0. .AND. T .LE. 1.) THEN - IOA4(I,J,KWD) = 1 - NS1 = NS1 + 1 - ELSE IF(T .GT. 1. .AND. T .LE. 10.) THEN - IOA4(I,J,KWD) = 2 - NS2 = NS2 + 1 - ELSE IF(T .GT. 10. .AND. T .LE. 100.) THEN - IOA4(I,J,KWD) = 3 - NS3 = NS3 + 1 - ELSE IF(T .GT. 100. .AND. T .LE. 1000.) THEN - IOA4(I,J,KWD) = 4 - NS4 = NS4 + 1 - ELSE IF(T .GT. 1000. .AND. T .LE. 10000.) THEN - IOA4(I,J,KWD) = 5 - NS5 = NS5 + 1 - ELSE IF(T .GT. 10000.) THEN - IOA4(I,J,KWD) = 6 - NS6 = NS6 + 1 - ENDIF - ENDDO - ENDDO - ENDDO -! - WRITE(6,*) "! MAKEOA EXIT" -! - RETURN - END - SUBROUTINE REVERS(IM, JM, numi, F, WRK) -! - implicit none -! - integer im, jm - REAL F(IM,JM), WRK(IM,JM) - integer numi(jm), i, j, ir, jr, imb2 - real tem -! -! reverse east-west and north-south -!...... fix this routine up to take numi (*j*) -!..... at least have 5 variables ....and keep REVLAT .FALSE. - - imb2 = im / 2 - do j=1,jm - do i=1,im - WRK(i,j) = F(i,j) - enddo - enddo - do j=1,jm - jr = jm - j + 1 - do i=1,im - ir = i + imb2 - if (ir > im) ir = ir - im - f(ir,jr) = WRK(i,j) - enddo - enddo -! - tem = 0.0 - do i=1,im - tem= tem + F(I,1) - enddo - tem = tem / im - do i=1,im - F(I,1) = tem - enddo -! - RETURN - END - - subroutine rg2gg(im,jm,numi,a) -! - implicit none -! - integer,intent(in):: im,jm,numi(jm) - real,intent(inout):: a(im,jm) - integer j,ir,ig - real r,t(im) - do j=1,jm - r = real(numi(j))/real(im) - do ig=1,im - ir = mod(nint((ig-1)*r),numi(j)) + 1 - t(ig) = a(ir,j) - enddo - do ig=1,im - a(ig,j) = t(ig) - enddo - enddo - end subroutine - subroutine gg2rg(im,jm,numi,a) -! - implicit none -! - integer,intent(in):: im,jm,numi(jm) - real,intent(inout):: a(im,jm) - integer j,ir,ig - real r,t(im) - do j=1,jm - r = real(numi(j))/real(im) - do ir=1,numi(j) - ig = nint((ir-1)/r) + 1 - t(ir) = a(ig,j) - enddo - do ir=1,numi(j) - a(ir,j) = t(ir) - enddo - enddo - end subroutine - SUBROUTINE minmxj(IM,JM,A,title) - -! this routine is using real*4 on the sp - - implicit none - - integer im, jm - real A(IM,JM),rmin,rmax - integer i,j - character*8 title - - rmin = 1.e+10 - rmax = -rmin -!sela.................................................... -!sela if(rmin.eq.1.e+10)return -!sela.................................................... - DO j=1,JM - DO i=1,IM - if (A(i,j) >= rmax) rmax = A(i,j) - if (A(i,j) <= rmin) rmin = A(i,j) - ENDDO - ENDDO - write(0,150)rmin,rmax,title -150 format('rmin=',e13.4,2x,'rmax=',e13.4,2x,a8,' ') -! - RETURN - END - SUBROUTINE mnmxja(IM,JM,A,imax,jmax,title) - -! this routine is using real*4 on the sp - - implicit none - - integer im, jm - real A(IM,JM),rmin,rmax - integer i,j,imax,jmax - character*8 title - - rmin = 1.e+10 - rmax = -rmin -!sela.................................................... -!sela if(rmin.eq.1.e+10)return -!sela.................................................... - DO j=1,JM - DO i=1,IM - if (A(i,j) >= rmax) then - rmax = A(i,j) - imax = i - jmax = j - endif - if (A(i,j) <= rmin) rmin = A(i,j) - ENDDO - ENDDO - write(6,150)rmin,rmax,title -150 format('rmin=',e13.4,2x,'rmax=',e13.4,2x,a8,' ') -! - RETURN - END - -!----------------------------------------------------------------------- - SUBROUTINE SPFFT1(IMAX,INCW,INCG,KMAX,W,G,IDIR) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! -! SUBPROGRAM: SPFFT1 PERFORM MULTIPLE FAST FOURIER TRANSFORMS -! PRGMMR: IREDELL ORG: W/NMC23 DATE: 96-02-20 -! -! ABSTRACT: THIS SUBPROGRAM PERFORMS MULTIPLE FAST FOURIER TRANSFORMS -! BETWEEN COMPLEX AMPLITUDES IN FOURIER SPACE AND REAL VALUES -! IN CYCLIC PHYSICAL SPACE. -! SUBPROGRAM SPFFT1 INITIALIZES TRIGONOMETRIC DATA EACH CALL. -! USE SUBPROGRAM SPFFT TO SAVE TIME AND INITIALIZE ONCE. -! THIS VERSION INVOKES THE IBM ESSL FFT. -! -! PROGRAM HISTORY LOG: -! 1998-12-18 IREDELL -! -! USAGE: CALL SPFFT1(IMAX,INCW,INCG,KMAX,W,G,IDIR) -! -! INPUT ARGUMENT LIST: -! IMAX - INTEGER NUMBER OF VALUES IN THE CYCLIC PHYSICAL SPACE -! (SEE LIMITATIONS ON IMAX IN REMARKS BELOW.) -! INCW - INTEGER FIRST DIMENSION OF THE COMPLEX AMPLITUDE ARRAY -! (INCW >= IMAX/2+1) -! INCG - INTEGER FIRST DIMENSION OF THE REAL VALUE ARRAY -! (INCG >= IMAX) -! KMAX - INTEGER NUMBER OF TRANSFORMS TO PERFORM -! W - COMPLEX(INCW,KMAX) COMPLEX AMPLITUDES IF IDIR>0 -! G - REAL(INCG,KMAX) REAL VALUES IF IDIR<0 -! IDIR - INTEGER DIRECTION FLAG -! IDIR>0 TO TRANSFORM FROM FOURIER TO PHYSICAL SPACE -! IDIR<0 TO TRANSFORM FROM PHYSICAL TO FOURIER SPACE -! -! OUTPUT ARGUMENT LIST: -! W - COMPLEX(INCW,KMAX) COMPLEX AMPLITUDES IF IDIR<0 -! G - REAL(INCG,KMAX) REAL VALUES IF IDIR>0 -! -! SUBPROGRAMS CALLED: -! SCRFT IBM ESSL COMPLEX TO REAL FOURIER TRANSFORM -! DCRFT IBM ESSL COMPLEX TO REAL FOURIER TRANSFORM -! SRCFT IBM ESSL REAL TO COMPLEX FOURIER TRANSFORM -! DRCFT IBM ESSL REAL TO COMPLEX FOURIER TRANSFORM -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN 90 -! -! REMARKS: -! THE RESTRICTIONS ON IMAX ARE THAT IT MUST BE A MULTIPLE -! OF 1 TO 25 FACTORS OF TWO, UP TO 2 FACTORS OF THREE, -! AND UP TO 1 FACTOR OF FIVE, SEVEN AND ELEVEN. -! -! THIS SUBPROGRAM IS THREAD-SAFE. -! -!$$$ - IMPLICIT NONE - INTEGER,INTENT(IN):: IMAX,INCW,INCG,KMAX,IDIR - COMPLEX,INTENT(INOUT):: W(INCW,KMAX) - REAL,INTENT(INOUT):: G(INCG,KMAX) - REAL:: AUX1(25000+INT(0.82*IMAX)) - REAL:: AUX2(20000+INT(0.57*IMAX)) - INTEGER:: NAUX1,NAUX2 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NAUX1=25000+INT(0.82*IMAX) - NAUX2=20000+INT(0.57*IMAX) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! FOURIER TO PHYSICAL TRANSFORM. - SELECT CASE(IDIR) - CASE(1:) - SELECT CASE(DIGITS(1.)) - CASE(DIGITS(1._4)) - CALL SCRFT(1,W,INCW,G,INCG,IMAX,KMAX,-1,1., - & AUX1,NAUX1,AUX2,NAUX2,0.,0) - CALL SCRFT(0,W,INCW,G,INCG,IMAX,KMAX,-1,1., - & AUX1,NAUX1,AUX2,NAUX2,0.,0) - CASE(DIGITS(1._8)) - CALL DCRFT(1,W,INCW,G,INCG,IMAX,KMAX,-1,1., - & AUX1,NAUX1,AUX2,NAUX2,0.,0) - CALL DCRFT(0,W,INCW,G,INCG,IMAX,KMAX,-1,1., - & AUX1,NAUX1,AUX2,NAUX2,0.,0) - END SELECT -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! PHYSICAL TO FOURIER TRANSFORM. - CASE(:-1) - SELECT CASE(DIGITS(1.)) - CASE(DIGITS(1._4)) - CALL SRCFT(1,G,INCG,W,INCW,IMAX,KMAX,+1,1./IMAX, - & AUX1,NAUX1,AUX2,NAUX2,0.,0) - CALL SRCFT(0,G,INCG,W,INCW,IMAX,KMAX,+1,1./IMAX, - & AUX1,NAUX1,AUX2,NAUX2,0.,0) - CASE(DIGITS(1._8)) - CALL DRCFT(1,G,INCG,W,INCW,IMAX,KMAX,+1,1./IMAX, - & AUX1,NAUX1,AUX2,NAUX2,0.,0) - CALL DRCFT(0,G,INCG,W,INCW,IMAX,KMAX,+1,1./IMAX, - & AUX1,NAUX1,AUX2,NAUX2,0.,0) - END SELECT - END SELECT - END SUBROUTINE - subroutine read_g(glob,ITOPO) -! -! --- if ITOPO = 1 then read gtopo30_gg.fine 43200X21600 30" file -! --- if ITOPO = 2 then read topo 30" .DEM tile files -! --- in either case, glob will be n Interger*2 array. -! --- This routine write out a grads ctl file for displaying the -! --- tiles in the output working dir. The glob array can not be -! --- acted on with grads, but the tiles can be if lat/lon are reduced slightly -!! - implicit none -!! - integer*2 glob(360*120,180*120) -!! - integer, parameter :: ix=40*120, jx=50*120 - &, ia=60*120, ja=30*120 -!! - integer*2 idat(ix,jx),itopo -!! -!!mr integer*2 m9999 -!!mr data m9999 / -9999 / -!! -!!mr integer i_count(360*120) -!!mr integer j_max_y(360*120) -!! - integer i,j,inttyp -!! - real(kind=8) dloin,dlain,rlon,rlat -!! - read(235) glob - rewind(235) -!! -!! - print*,' ' - call maxmin (glob,360*120*180*120,'global0') -!! -!! - dloin = 1.d0/120.d0 - dlain = 1.d0/120.d0 -!! - rlon = -179.995833333333333333333333d0 - rlat = 89.995833333333333333333333d0 -!! - inttyp =-1 ! average rectangular subset -!!mr inttyp = 1 ! take closest grid point value -!!mr inttyp = 0 ! interpolate from four closest grid point values -!! -! call la2ga_gtopo30(glob,360*120,180*120, -! & dloin,dlain,rlon,rlat,inttyp, -! & .true.,glob, -! & 0,lonf,latg) -!! - return - end - subroutine maxmin(ia,len,tile) -!!mr - implicit none -!!mr - integer len - integer*2 ia(len) - character*7 tile - integer iaamax, iaamin, j, m, ja, kount - integer(8) sum2,std,mean,isum - integer i_count_notset,kount_9 - -! --- missing is -9999 -! - isum = 0 - sum2 = 0 - kount = 0 - kount_9 = 0 - iaamax = -9999999 -!!mr iaamin = 1 - iaamin = 9999999 - i_count_notset = 0 - - do m=1,len - ja=ia(m) -!!mr if ( ja .lt. 0 ) print *,' ja < 0:',ja -!!mr if ( ja .eq. -9999 ) goto 10 - if ( ja .eq. -9999 ) then - kount_9 = kount_9 + 1 - cycle - endif - if ( ja == -12345 ) i_count_notset = i_count_notset + 1 -!!mr if ( ja .eq. 0 ) goto 11 - iaamax = max0( iaamax, ja ) - iaamin = min0( iaamin, ja ) -! iaamax = max0( iaamax, ia(m,j) ) -! iaamin = min0( iaamin, ia(m,j) ) -! 11 continue - kount = kount + 1 - isum = isum + ja -!!mr sum2 = sum2 + ifix( float(ja) * float(ja) ) - sum2 = sum2 + ja*ja - enddo -! - mean = isum/kount - std = ifix(sqrt(float((sum2/(kount))-mean**2))) -! - print*,tile,' max=',iaamax,' min=',iaamin,' sum=',isum, - & ' i_count_notset=',i_count_notset - print*,tile,' mean=',mean,' std.dev=',std, - & ' ko9s=',kount,kount_9,kount+kount_9 - return - end - SUBROUTINE minmaxj(IM,JM,A,title) - -! this routine is using real*4 on the sp - - implicit none - - integer im, jm - real(kind=4) A(IM,JM),rmin,rmax,undef - integer i,j,imax,jmax,imin,jmin,iundef - character*8 title,chara - data chara/' '/ -! - chara = title - rmin = 1.e+10 - rmax = -rmin - imax = 0 - imin = 0 - jmax = 0 - jmin = 0 - iundef = 0 - undef = -9999. -!sela.................................................... -!sela if(rmin.eq.1.e+10)return -!sela.................................................... - DO j=1,JM - DO i=1,IM - if (A(i,j) >= rmax)then - rmax = A(i,j) - imax = i - jmax = j - endif - if (A(i,j) <= rmin)then - if ( A(i,j) .eq. undef ) then - iundef = iundef + 1 - else - rmin = A(i,j) - imin = i - jmin = j - endif - endif - ENDDO - ENDDO - write(6,150)chara,rmin,imin,jmin,rmax,imax,jmax,iundef -150 format(1x,a8,2x,'rmin=',e13.4,2i6,2x,'rmax=',e13.4,3i6) -! - RETURN - END - subroutine nanc(a,l,c) -! compiler opt TRAPS= -qinitauto=FF911299 -qflttrap=ov:zero:inv:en -qsig trap -! or call subroutine below -! subroutine to report NaNS and NaNQ within an address -! range for real*8 words. -! as written the routine prints a single line for each call -! and prints a message and returns to the caller on detection of the FIRST -! NaN in the range. The message is passed in the third -! argument. If no NaN values are found it returns silently. -! A real*4 version can be created by making A real*4 - -! arguments (all are input only) -! -! A real*8 variable or array -! L number of words to scan (length of array) -! C distinctive message set in caller to indicate where -! the routine was called. -! - integer inan1,inan2,inan3,inan4,inaq1,inaq2,inaq3,inaq4 - real word - integer itest - equivalence (itest,word) -! -! signaling NaN - data inan1/x'7F800001'/ - data inan2/x'7FBFFFFF'/ - data inan3/x'FF800001'/ - data inan4/x'FFBFFFFF'/ -! -! quiet NaN -! - data inaq1/x'7FC00000'/ - data inaq2/x'7FFFFFFF'/ - data inaq3/x'FFC00000'/ - data inaq4/x'FFFFFFFF'/ -! - real(kind=8)a(l),rtc,t1,t2 - character*24 cn - character*(*) c - t1=rtc() -!gwv print *, ' nanc call ',c - do k=1,l - word = a(k) - if( (itest .GE. inan1 .AND. itest .LE. inan2) .OR. - * (itest .GE. inan3 .AND. itest .LE. inan4) ) then - print *,' NaNs detected at word',k,' ',c - return - endif - if( (itest .GE. inaq1 .AND. itest .LE. inaq2) .OR. - * (itest .GE. inaq3 .AND. itest .LE. inaq4) ) then - print *,' NaNq detected at word',k,' ',c - return - endif - - 101 format(e20.10) - end do - t2=rtc() -!gwv print 102,l,t2-t1,c - 102 format(' time to check ',i9,' words is ',f10.4,' ',a24) - return - end -C----------------------------------------------------------------------- - - SUBROUTINE SPTEZJ(JCAP,NC,KM,IDRT,LONB,LATB,JC,WAVE,GRID - &, latch,idir) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! -! SUBPROGRAM: SPTEZJ TRANSFORM A SINGLE SPECTRAL FIELD TO GRID -! PRGMMR: MOORTHI ORG: W/NMC23 DATE: 13-02-20 -! -! ABSTRACT: TRANSFORMS A SINGLE SPECTRAL FIELDS TO GRID -! -! PROGRAM HISTORY LOG: -! 13-02-20 S. MOORTHI -! -! USAGE: CALL SPTEZJ(JCAP,NC,KM,IDRT,LONB,LATB,JC,WAVE,GRID,IDIR) -! INPUT ARGUMENT LIST: -! JCAP INTEGER SPECTRAL TRUNCATION -! NC INTEGER FIRST DIMENSION (NC>=(JCAP+1)*(JCAP+2)) -! KM INTEGER NUMBER OF LEVELS -! IDRT INTEGER DATA REPRESENTATION TYPE -! (IDRT=4 FOR GAUSSIAN GRID, -! IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES, -! IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES) -! LONB INTEGER NUMBER OF LONGITUDES -! LATB INTEGER NUMBER OF LATITUDES -! JC INTEGER NUMBER OF CPUS -! WAVE REAL (NC) WAVE FIELD if IDIR>0 -! OUTPUT ARGUMENT LIST: -! GRID REAL (cwLONB,LATB,I,KM) GRID FIELD (E->W, N->S) IF IDIR<0 -! -! IDIR - INTEGER TRANSFORM FLAG -! (IDIR>0 FOR WAVE TO GRID, IDIR<0 FOR GRID TO WAVE) -! LATCH - Latitude chunk used in the transform loop -! SUBPROGRAMS CALLED: -! SPTRAN PERFORM A SCALAR SPHERICAL TRANSFORM -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN -! -!$$$ - implicit none -! - integer jcap, nc, km, idrt, lonb, latb, jc, latch, idir - REAL wave(NC,KM) - REAL GRID(LONB,LATB,KM) -! - real, allocatable :: gridl(:,:) -! - integer lonb2m, i, j, in, is, latbb2, lonb2, j1, j2, jl, ijl, ijn - &, ij, js, jn, ja, jb -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! SPECTRAL TRANSFORMS -! - LATBB2 = (LATB+1)/2 - LONB2 = LONB + LONB - ijn = LONB2 * LATCH - allocate (gridl(ijn,km)) - IN = 1 - IS = 1 + LONB -! -! write(0,*)' lonb=',lonb,' lonb2=',lonb2,' latbb2=',latbb2 -! &, ' latch=',latch,' ijn=',ijn,' idir=',idir,' km=',km -! - if (idir < 0) wave = 0.0 -! - DO J1=1,LATBB2,LATCH - J2 = MIN(J1+LATCH-1,LATBB2) - -! JL = 2*(J2-J1+1) -! IJL = LONB*JL -! IJ = LONB2 * (J2-J1+1) - - if (idir > 0) then -! write(0,*)' waveb=',wave(1:5,1) - CALL SPTRAN(0,JCAP,IDRT,LONB,LATB,KM,1,1,LONB2,LONB2,NC,IJN - &, J1,J2,JC,WAVE,GRIDL(IN,1),GRIDL(IS,1),1) - do j=j1,j2 - jn = j - js = latb+1-j - ja = (J-J1)*lonb2 - jb = ja + lonb - do i=1,lonb - grid(i,jn,:) = gridl(I+ja,:) - grid(i,js,:) = gridl(I+jb,:) - enddo - enddo -! write(0,*)' grida=',grid(lonb/2,jn,:) - else -! write(0,*)' SPTEZJ: j1=',j1,' j2=',j2 - do j=j1,j2 - jn = j - js = latb+1-j - ja = (J-J1)*lonb2 - jb = ja + lonb - do i=1,lonb - gridl(I+ja,:) = grid(i,jn,:) - gridl(I+jb,:) = grid(i,js,:) - enddo - enddo -! write(0,*)' BEF SPTRAN gridlN=',gridl(ja+1:ja+lonb,1),' j=',j -! write(0,*)' BEF SPTRAN gridlS=',gridl(jb+1:jb+lonb,1),' j=',j - CALL SPTRAN(0,JCAP,IDRT,LONB,LATB,KM,1,1,LONB2,LONB2,NC,IJN - &, J1,J2,JC,WAVE,GRIDL(IN,1),GRIDL(IS,1),-1) -! write(0,*)' wave=',wave(1:10,1) - endif -! - ENDDO ! j - loop - deallocate (gridl) -! - END -C----------------------------------------------------------------------- - SUBROUTINE SPLAT0(IDRT,JMAX,SLAT,WLAT) -C SUBPROGRAM DOCUMENTATION BLOCK -C -C SUBPROGRAM: SPLAT COMPUTE LATITUDE FUNCTIONS -C PRGMMR: IREDELL ORG: W/NMC23 DATE: 96-02-20 -C -C ABSTRACT: COMPUTES COSINES OF COLATITUDE AND GAUSSIAN WEIGHTS -C FOR ONE OF THE FOLLOWING SPECIFIC GLOBAL SETS OF LATITUDES. -C GAUSSIAN LATITUDES (IDRT=4) -C EQUALLY-SPACED LATITUDES INCLUDING POLES (IDRT=0) -C EQUALLY-SPACED LATITUDES EXCLUDING POLES (IDRT=256) -C THE GAUSSIAN LATITUDES ARE LOCATED AT THE ZEROES OF THE -C LEGENDRE POLYNOMIAL OF THE GIVEN ORDER. THESE LATITUDES -C ARE EFFICIENT FOR REVERSIBLE TRANSFORMS FROM SPECTRAL SPACE. -C (ABOUT TWICE AS MANY EQUALLY-SPACED LATITUDES ARE NEEDED.) -C THE WEIGHTS FOR THE EQUALLY-SPACED LATITUDES ARE BASED ON -C ELLSAESSER (JAM,1966). (NO WEIGHT IS GIVEN THE POLE POINT.) -C NOTE THAT WHEN ANALYZING GRID TO SPECTRAL IN LATITUDE PAIRS, -C IF AN EQUATOR POINT EXISTS, ITS WEIGHT SHOULD BE HALVED. -C THIS VERSION INVOKES THE IBM ESSL MATRIX SOLVER. -C -C PROGRAM HISTORY LOG: -C 96-02-20 IREDELL -C 97-10-20 IREDELL ADJUST PRECISION -C 98-06-11 IREDELL GENERALIZE PRECISION USING FORTRAN 90 INTRINSIC -C 1998-12-03 IREDELL GENERALIZE PRECISION FURTHER -C 1998-12-03 IREDELL USES AIX ESSL BLAS CALLS -C 2009-12-27 DSTARK updated to switch between ESSL calls on an AIX -C platform, and Numerical Recipies calls elsewise. -C 2010-12-30 SLOVACEK update alignment so preprocessor does not cause -C compilation failure -C 2012-09-01 E.Mirvis & M.Iredell merging & debugging linux errors -C of _d and _8 using generic LU factorization. -C 2012-11-05 E.Mirvis generic FFTPACK and LU lapack were removed -C---------------------------------------------------------------- -C USAGE: CALL SPLAT(IDRT,JMAX,SLAT,WLAT) -C -C INPUT ARGUMENT LIST: -C IDRT - INTEGER GRID IDENTIFIER -C (IDRT=4 FOR GAUSSIAN GRID, -C IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES, -C IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES) -C JMAX - INTEGER NUMBER OF LATITUDES. -C -C OUTPUT ARGUMENT LIST: -C SLAT - REAL (JMAX) SINES OF LATITUDE. -C WLAT - REAL (JMAX) GAUSSIAN WEIGHTS. -C -C SUBPROGRAMS CALLED: -C DGEF MATRIX FACTORIZATION - ESSL -C DGES MATRIX SOLVER - ESSL -C LUDCMP LU factorization - numerical recipies -C LUBKSB Matrix solver - numerical recipies -C -C ATTRIBUTES: -C LANGUAGE: FORTRAN 90 -C -C - REAL SLAT(JMAX),WLAT(JMAX) - INTEGER,PARAMETER:: KD=SELECTED_REAL_KIND(15,45) - REAL(KIND=KD):: PK(JMAX/2),PKM1(JMAX/2),PKM2(JMAX/2) - REAL(KIND=KD):: SLATD(JMAX/2),SP,SPMAX,EPS=10.*EPSILON(SP) - PARAMETER(JZ=50) - REAL BZ(JZ) - DATA BZ / 2.4048255577, 5.5200781103, - $ 8.6537279129, 11.7915344391, 14.9309177086, 18.0710639679, - $ 21.2116366299, 24.3524715308, 27.4934791320, 30.6346064684, - $ 33.7758202136, 36.9170983537, 40.0584257646, 43.1997917132, - $ 46.3411883717, 49.4826098974, 52.6240518411, 55.7655107550, - $ 58.9069839261, 62.0484691902, 65.1899648002, 68.3314693299, - $ 71.4729816036, 74.6145006437, 77.7560256304, 80.8975558711, - $ 84.0390907769, 87.1806298436, 90.3221726372, 93.4637187819, - $ 96.6052679510, 99.7468198587, 102.888374254, 106.029930916, - $ 109.171489649, 112.313050280, 115.454612653, 118.596176630, - $ 121.737742088, 124.879308913, 128.020877005, 131.162446275, - $ 134.304016638, 137.445588020, 140.587160352, 143.728733573, - $ 146.870307625, 150.011882457, 153.153458019, 156.295034268 / - REAL:: DLT,D1=1. - REAL AWORK((JMAX+1)/2,((JMAX+1)/2)),BWORK(((JMAX+1)/2)) - INTEGER:: JHE,JHO,J0=0 - INTEGER IPVT((JMAX+1)/2) - PARAMETER(PI=3.14159265358979,C=(1.-(2./PI)**2)*0.25) -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -C GAUSSIAN LATITUDES - IF(IDRT.EQ.4) THEN - JH=JMAX/2 - JHE=(JMAX+1)/2 - R=1./SQRT((JMAX+0.5)**2+C) - DO J=1,MIN(JH,JZ) - SLATD(J)=COS(BZ(J)*R) - ENDDO - DO J=JZ+1,JH - SLATD(J)=COS((BZ(JZ)+(J-JZ)*PI)*R) - ENDDO - SPMAX=1. - DO WHILE(SPMAX.GT.EPS) - SPMAX=0. - DO J=1,JH - PKM1(J)=1. - PK(J)=SLATD(J) - ENDDO - DO N=2,JMAX - DO J=1,JH - PKM2(J)=PKM1(J) - PKM1(J)=PK(J) - PK(J)=((2*N-1)*SLATD(J)*PKM1(J)-(N-1)*PKM2(J))/N - ENDDO - ENDDO - DO J=1,JH - SP=PK(J)*(1.-SLATD(J)**2)/(JMAX*(PKM1(J)-SLATD(J)*PK(J))) - SLATD(J)=SLATD(J)-SP - SPMAX=MAX(SPMAX,ABS(SP)) - ENDDO - ENDDO -CDIR$ IVDEP - DO J=1,JH - SLAT(J)=SLATD(J) - WLAT(J)=(2.*(1.-SLATD(J)**2))/(JMAX*PKM1(J))**2 - SLAT(JMAX+1-J)=-SLAT(J) - WLAT(JMAX+1-J)=WLAT(J) - ENDDO - IF(JHE.GT.JH) THEN - SLAT(JHE)=0. - WLAT(JHE)=2./JMAX**2 - DO N=2,JMAX,2 - WLAT(JHE)=WLAT(JHE)*N**2/(N-1)**2 - ENDDO - ENDIF -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -C EQUALLY-SPACED LATITUDES INCLUDING POLES - ELSEIF(IDRT.EQ.0) THEN - JH=JMAX/2 - JHE=(JMAX+1)/2 - JHO=JHE-1 - DLT=PI/(JMAX-1) - SLAT(1)=1. - DO J=2,JH - SLAT(J)=COS((J-1)*DLT) - ENDDO - DO JS=1,JHO - DO J=1,JHO - AWORK(JS,J)=COS(2*(JS-1)*J*DLT) - ENDDO - ENDDO - DO JS=1,JHO - BWORK(JS)=-D1/(4*(JS-1)**2-1) - ENDDO -!#if IBM4 || IBM8 -! CALL DGEF(AWORK,JHE,JHO,IPVT) -! CALL DGES(AWORK,JHE,JHO,IPVT,BWORK,J0) -!#endif -!#if LINUX - call ludcmp(awork,jho,jhe,ipvt) - call lubksb(awork,jho,jhe,ipvt,bwork) -!#endif - WLAT(1)=0. - DO J=1,JHO - WLAT(J+1)=BWORK(J) - ENDDO -CDIR$ IVDEP - DO J=1,JH - SLAT(JMAX+1-J)=-SLAT(J) - WLAT(JMAX+1-J)=WLAT(J) - ENDDO - IF(JHE.GT.JH) THEN - SLAT(JHE)=0. - WLAT(JHE)=2.*WLAT(JHE) - ENDIF -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -C EQUALLY-SPACED LATITUDES EXCLUDING POLES - ELSEIF(IDRT.EQ.256) THEN - JH=JMAX/2 - JHE=(JMAX+1)/2 - JHO=JHE - DLT=PI/JMAX - SLAT(1)=1. - DO J=1,JH - SLAT(J)=COS((J-0.5)*DLT) - ENDDO - DO JS=1,JHO - DO J=1,JHO - AWORK(JS,J)=COS(2*(JS-1)*(J-0.5)*DLT) - ENDDO - ENDDO - DO JS=1,JHO - BWORK(JS)=-D1/(4*(JS-1)**2-1) - ENDDO -!#if IBM4 || IBM8 -! CALL DGEF(AWORK,JHE,JHO,IPVT) -! CALL DGES(AWORK,JHE,JHO,IPVT,BWORK,J0) -!#endif -!#if LINUX - call ludcmp(awork,jho,jhe,ipvt,d) - call lubksb(awork,jho,jhe,ipvt,bwork) -!#endif - WLAT(1)=0. - DO J=1,JHO - WLAT(J)=BWORK(J) - ENDDO -CDIR$ IVDEP - DO J=1,JH - SLAT(JMAX+1-J)=-SLAT(J) - WLAT(JMAX+1-J)=WLAT(J) - ENDDO - IF(JHE.GT.JH) THEN - SLAT(JHE)=0. - WLAT(JHE)=2.*WLAT(JHE) - ENDIF - ENDIF -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - RETURN - END diff --git a/util/sorc/terrain.fd/mtnlm7_slm30g_oclsm.f b/util/sorc/terrain.fd/mtnlm7_slm30g_oclsm.f deleted file mode 100644 index 0566d1a48a..0000000000 --- a/util/sorc/terrain.fd/mtnlm7_slm30g_oclsm.f +++ /dev/null @@ -1,2772 +0,0 @@ -!$$$ MAIN PROGRAM DOCUMENTATION BLOCK -! -! MAIN PROGRAM: TERRAIN TERRAIN MAKER FOR GLOBAL SPECTRAL MODEL -! PRGMMR: IREDELL ORG: W/NMC23 DATE: 92-04-16 -! -! ABSTRACT: THIS PROGRAM CREATES 7 TERRAIN-RELATED FILES -! COMPUTED FROM THE NAVY 10-MINUTE TERRAIN DATASET. -! THE MODEL PHYSICS GRID PARAMETERS AND SPECTRAL TRUNCATION -! AND FILTER PARAMETERS ARE READ BY THIS PROGRAM AS INPUT. -! THE 7 FILES PRODUCED ARE RESPECTIVELY: -! 1) SEA-LAND MASK ON MODEL PHYSICS GRID -! 2) GRIDDED OROGRAPHY ON MODEL PHYSICS GRID -! 3) MOUNTAIN STD DEV ON MODEL PHYSICS GRID -! 4) SPECTRAL OROGRAPHY IN SPECTRAL DOMAIN -! 5) UNFILTERED GRIDDED OROGRAPHY ON MODEL PHYSICS GRID -! 6) GRIB SEA-LAND MASK ON MODEL PHYSICS GRID -! 7) GRIB GRIDDED OROGRAPHY ON MODEL PHYSICS GRID -! THE OROGRAPHY IS ONLY FILTERED FOR WAVENUMBERS GREATER THAN NF0. -! FOR WAVENUMBERS N BETWEEN NF0 AND NF1, THE OROGRAPHY IS FILTERED -! BY THE FACTOR 1-((N-NF0)/(NF1-NF0))**2. THE FILTERED OROGRAPHY -! WILL NOT HAVE INFORMATION BEYOND WAVENUMBER NF1. -! -! PROGRAM HISTORY LOG: -! 92-04-16 IREDELL -! 98-02-02 IREDELL FILTER -! 98-05-31 HONG Modified for subgrid orography used in Kim's scheme -! 98-12-31 HONG Modified for high-resolution GTOPO orography -! 99-05-31 HONG Modified for getting OL4 (mountain fraction) -! 00-02-10 Moorthi's modifications including lat/lon grid -! 00-04-11 HONG Modified for reduced grids -! 00-04-12 Iredell Modified for reduced grids -! 02-01-07 (*j*) modified for principal axes of orography -! There are now 14 files, 4 additional for lm mb -! 04-04-04 (*j*) re-Test on IST/ilen calc for sea-land mask(*j*) -! 04-09-04 minus sign here in MAKEOA IST and IEN as in MAKEMT! -! 05-09-05 if test on HK and HLPRIM for GAMMA SQRT -! 07-08-07 replace 8' with 30" incl GICE, conintue w/ S-Y. lake slm -! 08-08-07 All input 30", UMD option, and filter as described below -! --- Quadratic filter applied by default. -! --- NF0 is normally set to an even value beyond the previous truncation, -! --- for example, for jcap=382, NF0=254+2 -! --- NF1 is set as jcap+2 (and/or nearest even), eg., for t382, NF1=382+2=384 -! --- if no filter is desired then NF1=NF0=0 and ORF=ORO -! --- but if no filter but spectral to grid (with gibbs) then NF1=jcap+2, and NF1=jcap+1 -! 11-06-22 S. Moorthi - convert the code to "implicit none" added grib -! output of unfiltered orography -! 13-02-20 S. Moorthi - Added SPTEZJ so that the filter can be applied -! at resolutions t1534 and higher -! Also optimized to code to use less memory -! 13-06-19 S. Moorthi - Made it work on wcoss -! -! -! USAGE: -! -! INPUT FILES: -! UNIT5 - PHYSICS LONGITUDES (IM), PHYSICS LATITUDES (JM), -! SPECTRAL TRUNCATION (NM), RHOMBOIDAL FLAG (NR), -! AND FIRST AND SECOND FILTER PARAMETERS (NF0,NF1). -! RESPECTIVELY READ IN FREE FORMAT. -! UNIT235 - GTOPO 30" AVR for ZAVG elevation -! UNIT10 - 30" UMD land (lake) cover mask see MSKSRC switch -! XUNIT11 - GTOPO AVR -! XUNIT12 - GTOPO STD DEV -! XUNIT13 - GTOPO MAX -! UNIT14 - GTOPO SLM (10' NAVY if switched to get lakes) -! UNIT15 - GICE Grumbine 30" RAMP Antarctica orog IMNx3616 -! UNIT25 - Ocean land-sea mask on gaussian grid -! -! OUTPUT FILES: -! UNIT51 - SEA-LAND MASK (IM,JM) -! UNIT52 - GRIDDED OROGRAPHY (IM,JM) -! UNIT53 - MOUNTAIN STD DEV (IM,JM) -! UNIT54 - SPECTRAL OROGRAPHY ((NM+1)*((NR+1)*NM+2)) -! UNIT55 - UNFILTERED GRIDDED OROGRAPHY (IM,JM) -! UNIT56 - GRIB SEA-LAND MASK (IM,JM) -! UNIT57 - GRIB GRIDDED OROGRAPHY (IM,JM) -! UNIT58 - GRIB PRINCIPAL COORD THETA (IM,JM) -! UNIT59 - GRIB PRINCIPAL COORD SIGMA (IM,JM) -! UNIT60 - GRIB PRINCIPAL COORD GAMMA (IM,JM) -! UNIT61 - GRIB MOUNTAIN STD VAR (IM,JM) -! UNIT62 - GRIB MOUNTAIN MAX ELEVATION (IM,JM) -! -! SUBPROGRAMS CALLED: -! UNIQUE: -! TERSUB - MAIN SUBPROGRAM -! read_g - read in 30" elevations -! SPLAT - COMPUTE GAUSSIAN LATITUDES OR EQUALLY-SPACED LATITUDES -! LIBRARY: -! SPTEZ - SPHERICAL TRANSFORM -! SPTEZJ - SPHERICAL TRANSFORM -! GBYTES - UNPACK BITS -! -! REMARKS: FORTRAN 9X EXTENSIONS ARE USED. -! ITOPO determines if the 43200X21600 topo 30" is read in -! from the 30" array record. .DEM tiles are done offline. -! -! ATTRIBUTES: -! CRAY YMP & IBM AIX 3 5 00C88D5D4C00. -!C -!$$$ -!FPP$ NOCONCUR F - implicit none -! - integer MTNRES, IM, JM, NM, NR, NF0, NF1, NW, IMN, JMN, latch - real EFAC,BLAT -! - latch = 1 - READ(5,*) MTNRES,IM,JM,NM,NR,NF0,NF1,EFAC,BLAT - -! --- MTNRES defines the input (highest) elev resolution -! --- =1 is topo30 30" in units of 1/2 minute. -! so MTNRES for old values must be *2. -! =16 is now Song Yu's 8' orog the old ops standard -! --- other possibilities are =8 for 4' and =4 for 2' see -! HJ for T1000 test. Must set to 1 for now. - - MTNRES = 1 - print*, MTNRES,IM,JM,NM,NR,NF0,NF1,EFAC,BLAT - - NW = (NM+1)*((NR+1)*NM+2) - IMN = 360*120/MTNRES - JMN = 180*120/MTNRES - print *, ' Starting terr mtnlm7_slm10.f IMN,JMN:',IMN,JMN - - call start() - - CALL TERSUB(IMN,JMN,IM,JM,NM,NR,NF0,NF1,NW,EFAC,BLAT,latch) - -! call summary() - STOP - END - SUBROUTINE TERSUB(IMN,JMN,IM,JM,NM,NR,NF0,NF1,NW,EFAC,BLAT,latch) - implicit none -! - integer, parameter :: NMT=14 - logical, parameter :: check_nans=.false. -! logical, parameter :: check_nans=.true. -! - integer IMN,JMN,IM,JM,NM,NR,NF0,NF1,NW - real efac, blat - INTEGER ZSLMX(2700,1350) - - INTEGER, allocatable:: ZAVG(:,:), ZSLM(:,:) - REAL(4), allocatable:: GICE(:,:), OCLSM(:,:) - integer*1,allocatable:: UMD(:,:) - - integer latch - integer*1 i3save - integer*2 glob(IMN,JMN), i2save - INTEGER KPDS(200),KGDS(200), zsave1,zsave2,itopo,kount - INTEGER kount2, islmx, jslmx, oldslm, msksrc, mskocn, notocn -! - real, dimension(jm) :: COSCLT, WGTCLT, RCLT, XLAT - REAL, dimension(im,jm) :: SLM, ORO, ORF, oro_s - real :: ors(nw), diffx(jm/2) - - REAL, allocatable :: VAR(:,:), VAR4(:,:), OA(:,:,:), OL(:,:,:)& - &, THETA(:,:), GAMMA(:,:), SIGMA(:,:) & - &, ELVMAX(:,:),SLMI(:,:) - integer IST(IM,jm), IEN(IM,jm), JST(JM),JEN(JM) - integer, allocatable :: IWORK(:,:,:) - real glat(jmn) - real, allocatable :: work1(:,:),work2(:,:), work3(:,:) & - &, work4(:,:), work5(:,:), work6(:,:), & - & hprime(:,:,:) - - LOGICAL SPECTR, REVLAT, FILTER - integer numi(jm),ios,iosg,latg2,istat - integer maxc3,maxc4,maxc5,maxc6,maxc7,maxc8 - integer lonsperlat(jm/2),itest,jtest, i, j, k - &, it, jt, i1, jn, js, iw, ie, in, inw, ine, m, n, imt - &, is, ise, isw, lb, iret, imb2p1 - real oaa(4), ola(4), sumdif, avedif, alon, alat, pi - &, degrad, rn, rs, slma, oroa, vara, var4a, wgta, xn, xs - &, fff, www, phi, delxn - complex ffj(im/2+1) - - allocate (ZAVG(IMN,JMN)) - allocate (ZSLM(IMN,JMN)) - allocate (GICE(IMN+1,3601)) - allocate (UMD(IMN,JMN)) - allocate (OCLSM(IM,JM)) - allocate (iwork(im,jm,4)) - allocate (work1(im,jm), work2(im,jm), work3(im,jm) & - &, work4(im,jm), work5(im,jm), work6(im,jm) & - &, hprime(im,jm,nmt)) - allocate (VAR(im,jm), VAR4(im,jm), OA(im,jm,4), OL(im,jm,4) & - &, THETA(im,jm), GAMMA(im,jm), SIGMA(im,jm), ELVMAX(im,jm)) - -! -! SET CONSTANTS AND ZERO FIELDS -! - imb2p1 = im/2 + 1 - pi = 4.0 * atan(1.0) - DEGRAD = 180./PI - SPECTR = NM > 0 ! if NM <=0 then grid is assumed to be lat/lon - FILTER = .TRUE. ! Spectral Filter defaults true and set by NF1 & NF0 - - ! MSKSRC=0 navy 10 lake msk, 1 UMD 30, -1 no lakes -! MSKSRC = 0 - MSKSRC = 1 - MSKOCN = 0 ! Ocean land sea mask =1, =0 if not present - NOTOCN = 1 ! =1 Ocean lsm input reverse: Ocean=1, land=0 -! --- The LSM Gaussian file from the ocean model sometimes arrives with -! --- 0=Ocean and 1=Land or it arrives with 1=Ocean and 0=land without -! --- metadata to distinguish its disposition. The AI below mitigates this. - - REVLAT = BLAT < 0 ! Reverse latitude/longitude for output - ITOPO = 1 ! topo 30" read, otherwise tiles (opt offline) - - write(0,*)' In TERSUB, ITOPO=',itopo - - if (mskocn == 1) then - write(0,*) ' Ocean Model LSM Present and ' - write(0,*) ' Overrides OCEAN POINTS in LSM: mskocn=',mskocn - if (notocn == 1) then - write(0,*) ' Ocean LSM Reversed: NOTOCN=',notocn - endif - endif -! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! --- old S-Y. files -!- OPEN(UNIT=11,FORM='FORMATTED',ERR=900) ! average -!- OPEN(UNIT=12,FORM='FORMATTED',ERR=900) ! Std Dev -!- OPEN(UNIT=13,FORM='FORMATTED',ERR=900) ! maximum -!- OPEN(UNIT=14,FORM='FORMATTED',ERR=900) ! sea-land-lake-mask -! -! --- READ(11,11) ZAVG -! --- READ(12,11) ZVAR -! --- READ(13,11) ZMAX -! --- 11 FORMAT(20I4) -! -! --- MSKSRC 0 navy 10' lake mask, =1 for 30" UMD lake mask, -! --- MSKSRC internally set if above fails at -1 for no lakes -! --- -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - IF (MSKSRC == 0 ) then - READ(14,12,iostat=ios) ZSLMX - 12 FORMAT(80I1) - if (ios /= 0) then - MSKSRC = -1 - write(0,*)' navy10 lake mask rd fail - ios,MSKSRC:',ios,MSKSRC - endif - ELSE - write(0,*)' Attempt to open/read UMD 30" slmsk MSKSRC=',MSKSRC -! --- not 0 so MSKSRC=1 and attempt to open/read UMD 30" slmsk - -! open(10,file="/global/noscrub/wx23ja/terrain30/landcover30.fixed -! &", recl=43200*21600, access='direct',iostat=istat) - - open(10,file="landcover30.fixed", recl=43200*21600, - & access='direct',iostat=istat) - IF (istat /= 0) then - MSKSRC = -1 - print *,' UMD lake mask open failed -- ios,MSKSRC:',ios,MSKSRC - ELSE -! - read(10, rec=1,iostat=istat) UMD - - ENDIF -! -------------- - IF (istat /= 0) then ! --- When UMD read fails attempt to read navy 10' - print *,' UMD lake mask readd err -- trying navy 10',istat - MSKSRC = 0 - print *,' ***** MSKSRC set to 0 MSKSRC=',MSKSRC - if (MSKSRC == 0 ) then - rewind 14 - READ(14,12,iostat=ios) ZSLMX - if (ios /= 0) then - MSKSRC = -1 - print *,' navy10 lake mask rd fail - ios,MSKSRC:',ios - &, MSKSRC - endif - endif - ELSE - print *,' UMD lake, UMD(500,500)=',UMD(500,500),MSKSRC - ENDIF -! -------------- -! --- good UMD land cover read and MSKSRC = 1 - ENDIF -! -!- READ_G for global 30" terrain -! - print *,' Read 30" topography or call read_g, ITOPO=',ITOPO - - if (itopo /= 0) then - read(235) glob - rewind(235) -! elseif ( ITOPO /= 0 )then -! call read_g(glob,ITOPO) - endif - -! --- transpose even though glob 30" is from S to N and NCEP std is N to S - - do j=1,jmn/2 - jt = jmn - j + 1 - do I=1,imn - i2save = glob(I,j) - glob(I,j) = glob(I,jt) - glob(I,jt) = i2save - enddo - enddo -! --- transpose glob as USGS 30" is from dateline and NCEP std is 0 - do j=1,jmn - do I=1,imn/2 - it = imn/2 + i - i2save = glob(i,J) - glob(i,J) = glob(it,J) - glob(it,J) = i2save - enddo - enddo - print *,' After read_g, glob(500,500)=',glob(500,500) -! - -! --- IMN,JMN - write(0,*)' IM, JM, NM, NR, NF0, NF1, EFAC, BLAT' - write(0,*) IM,JM,NM,NR,NF0,NF1,EFAC,BLAT - write(0,*)' imn,jmn,glob(imn,jmn)=',imn,jmn,glob(imn,jmn) - write(0,*)' UBOUND ZAVG=',UBOUND(ZAVG) - write(0,*)' UBOUND glob=',UBOUND(glob) - write(0,*)' UBOUND ZSLM=',UBOUND(ZSLM) - write(0,*)' UBOUND GICE=',UBOUND(GICE) - - kount = 0 - kount2 = 0 -! -! --- 0 is ocean and 1 is land for slm -! -! --- ZSLM initialize with all land 1, ocean 0 -! ZSLM=1 - do j=1,jmn - do i=1,imn - zslm(i,j) = 1 - enddo - enddo - - SELECTCASE(MSKSRC) - - CASE(1) !---- 30" sea land mask. 0 are water (lake or ocean) - ! ---------------------------------------------- - -! --- transpose even though glob 30" is from S to N and NCEP std is N to S - do j=1,jmn/2 - jt = jmn - j + 1 - do I=1,imn - i3save = UMD(I,j) - UMD(I,j) = UMD(I,jt) - UMD(I,jt) = i3save - enddo - enddo -! --- transpose UMD as USGS 30" is from dateline and NCEP std is 0 - do j=1,jmn - do i=1,imn/2 - it = imn/2 + i - i3save = UMD(i,J) - UMD(i,J) = UMD(it,J) - UMD(it,J) = i3save - enddo - enddo -! --- UMD slmsk with 30" lakes and set ZAVG from glob - do j=1,jmn - do i=1,imn - if ( UMD(i,j) == 0 ) ZSLM(i,j) = 0 - ZAVG(i,j) = glob(i,j) - enddo - enddo -! - CASE(0) ! --- When navy 10' mask is set MSKSRC=0 - ! ----------------------------------- - -! --- MSKSRC 0 navy 10' lake mask, =1 for 30" UMD lake mask, -1 no lakes - write(0,*)' NAVY 10 (8) slmsk for lakes, MSKSRC=',MSKSRC - - kount = 0 - kount2 = 0 - do j=1,jmn - oldslm = ZSLM(IMN,j) - do i=1,imn - i1 = i + 1 -! --- slmsk with 10' lakes and set ZAVG from 30" glob - ZAVG(i,j) = glob(i,j) - if ( glob(i,j) == -9999 ) then - ZSLM(i,j) = 0 - kount = kount + 1 - endif - islmx = (i-1)/16 + 1 - jslmx = (j-1)/16 + 1 - if ( ZSLMX(islmx,jslmx) == 0 ) then - if ( j > 8 .and. j < JMN-8 ) then - if (i1 > IMN ) i1 = i1 - IMN -! ----- - if(ZSLM(i,j) == 1 .and. oldslm == 1 - & .and. ZSLM(i1,j) == 1) then -! if (i /= 1) oldslm = ZSLM(i,j) - ZSLM(i,j) = 0 - kount2 = kount2 + 1 - endif -! ----- - endif - endif - enddo - enddo -! --- - CASE(-1) - print *,' **** set ZAVG and slm from 30" glob, MSKSRC=',MSKSRC - kount = 0 - kount2 = 0 - do j=1,jmn - do i=1,imn - i1 = i + 1 -! --- UMD slmsk with 10' lakes and set ZAVG from 30" glob - ZAVG(i,j) = glob(i,j) - if ( glob(i,j) == -9999 ) then - ZSLM(i,j) = 0 - kount = kount + 1 - endif - enddo - enddo - END SELECT -! --- -! --- There was an error in the topo 30" data set at pole (-9999). - do i=1,imn - ZSLM(i,1) = 0 - ZSLM(i,JMN) = 1 - enddo -! - write(0,*)' kount,2,ZAVG(1,1),ZAVG(imn,jmn),ZAVG(500,500)', - & kount,kount2,ZAVG(1,1),ZAVG(imn,jmn),ZAVG(500,500) - -! --- The center of pixel (1,1) is 89.9958333N/179.9958333W with dx/dy -! --- spacing of 1/120 degrees. -! -! READ REDUCED GRID EXTENTS IF GIVEN -! - read(20,*,iostat=ios) latg2,lonsperlat - if (ios /= 0 .or. 2*latg2 /= jm) then - do j=1,jm - numi(j) = im - enddo - write(0,*) ios,latg2,'COMPUTE TERRAIN ON A FULL GAUSSIAN GRID' - else - do j=1,jm/2 - numi(j) = lonsperlat(j) - enddo - do j=jm/2+1,jm - numi(j) = lonsperlat(jm+1-j) - enddo - write(0,*) ios,latg2,'COMPUTE TERRAIN ON A REDUCED GAUSSIAN', - & ' GRID', numi -! print *,ios,latg2,'COMPUTE TERRAIN ON A REDUCED GAUSSIAN GRID' - endif - - write(0,*) ios,latg2,'TERRAIN ON GAUSSIAN GRID',numi - -! -! This code assumes that lat runs from north to south for gg! -! - write(0,*)' SPECTR=',SPECTR,' REVLAT=',REVLAT,'** with GICE-07 **' - - IF (SPECTR) THEN - CALL SPLAT(4,JM,COSCLT,WGTCLT) - DO J=1,JM/2 - RCLT(J) = ACOS(COSCLT(J)) - PHI = RCLT(J) * DEGRAD - XLAT(J) = 90. - PHI - XLAT(JM-J+1) = PHI - 90. - ENDDO - ELSE - CALL SPLAT(0,JM,COSCLT,WGTCLT) - DO J=1,JM - RCLT(J) = ACOS(COSCLT(J)) - XLAT(J) = 90.0 - RCLT(J) * DEGRAD - ENDDO - ENDIF -! -! print *,' cosclt=',cosclt - print *,' RCLT(1)=',RCLT(1) - - sumdif = 0. - DO J = JM/2,2,-1 - DIFFX(J) = xlat(J) - XLAT(j-1) - sumdif = sumdif + DIFFX(J) - ENDDO - avedif = sumdif / (float(JM/2)) - - write(0,*)' XLAT= avedif: ',avedif - write (6,107) (xlat(J)-xlat(j-1),J=JM,2,-1) - print *,' XLAT=' - write (6,106) (xlat(J),J=JM,1,-1) - 106 format( 10(f7.3,1x)) - 107 format( 10(f9.5,1x)) -! - DELXN = 360./IMN ! MOUNTAIN DATA RESOLUTION -! - DO J=1,JMN - GLAT(J) = -90. + (J-1) * DELXN + DELXN * 0.5 - ENDDO - - write(0,*)' Before GICE ZAVG(1,2)=',ZAVG(1,2),ZSLM(1,2) - write(0,*)' Before GICE ZAVG(1,12)=',ZAVG(1,12),ZSLM(1,12) - write(0,*)' Before GICE ZAVG(1,52)=',ZAVG(1,52),ZSLM(1,52) - write(0,*)' Before GICE ZAVG(1,112)=',ZAVG(1,JMN-112),ZSLM(1,112) - -! GICE: Grumbine 30" Antarctica orog IMNx3616 from S to N & wraped E-W. -! NB: Zfields are S to N and W-E! - - iosg = 0 - READ(15,iostat=iosg) GICE - if (iosg /= 0 ) then - write(0,*)' *** Err on reading GICE record, iosg=',iosg - write(0,*)' exec continues but NO GICE correction done ' -! stop - else - write(0,*)' GICE 30" Antarctica RAMP orog 43200x3616 read OK' - write(0,*)' Processing! ' - write(0,*)' Processing! ' - write(0,*)' Processing! ' - do j = 1, 3601 - do i = 1, IMN - zsave1 = ZAVG(i,j) - zsave2 = ZSLM(i,j) - if( GICE(i,j) /= -99. .and. GICE(i,j) /= -1.0 ) then - if ( GICE(i,j) > 0.) then - ZAVG(i,j) = int( GICE(i,j) + 0.5 ) -!! --- for GICE values less than or equal to 0 (0, -1, or -99) then -!! --- radar-sat (RAMP) values are not valid and revert back to old orog - ZSLM(i,j) = 1 - endif - endif - ALON = float(i-1) * 360./float(IMN) - ALAT = glat(j) - -! if( ZAVG(i,j) .ne. zsave1 .and. i .lt. 3 ) -! & print *,' antarctica change to ZAVG(i=',i,'j=',j,')=', -! & ZAVG(i,j),ZSLM(i,j),' from originally:',zsave1,zsave2 -! &write(6,151)i,j,ZAVG(i,j),ZSLM(i,j),zsave1,zsave2,ALAT,ALON -! 151 format(1x,'antarctica ZAVG(i=',i3,' j=',i3,')=',i5,i3, -! &' orig:',i5,i3,' Lat=',f8.3,f9.3,'E') - - if( ZAVG(i,j) /= zsave1 ) then - if ( i <= 1201 .and. i > 1200 )then - write(6,152) i,j,ZAVG(i,j),ZSLM(i,j),zsave1,zsave2, - & ALAT,ALON,GICE(i,j) - 152 format(1x,' ZAVG(i=',i4,' j=',i4,')=',i5,i3, - & ' orig:',i5,i4,' Lat=',f7.3,f8.2,'E',' GICE=',f8.1) - endif - endif - enddo - enddo - endif - -! print *, -! & ' After GICE ZAVG(1,2)=',ZAVG(1,2),ZSLM(1,2) -! print *, -! & ' After GICE ZAVG(1,12)=',ZAVG(1,12),ZSLM(1,12) -! print *, -! & ' After GICE ZAVG(1,52)=',ZAVG(1,52),ZSLM(1,52) -! print *, -! & ' After GICE ZAVG(1,112)=',ZAVG(1,112),ZSLM(1,112) -! -! COMPUTE MOUNTAIN DATA : ORO SLM VAR (Std Dev) OC -! -! --- The coupled ocean model is already on a Guasian grid if (IM,JM) -! --- Attempt to Open the file if mskocn=1 - istat=0 - if (mskocn == 1) then -! open(25,form='unformatted',iostat=istat) -! open(25,form='binary',iostat=istat) -! --- open to fort.25 with link to file in script - open(25,form='formatted',iostat=istat) - if (istat /= 0) then - mskocn = 0 - print *,' Ocean lsm file Open failure: mskocn,istat=', - & mskocn,istat - else - mskocn = 1 - print *,' Ocean lsm file Opened OK: mskocn,istat=', - & mskocn,istat - endif -! --- Read it in - ios = 0 - do j=1,jm - do i=1,im - OCLSM(i,j) = 0. - enddo - enddo -! read(25,iostat=ios)OCLSM - -! read(25,iostat=ios)OCLSM - read(25,*,iostat=ios) OCLSM - if (ios /= 0) then - mskocn = 0 -! --- did not properly read Gaussian grid ocean land-sea mask, but -! continue using ZSLMX - print *,' Rd fail: Ocean lsm - continue, mskocn,ios=', - & mskocn,ios - else - mskocn = 1 - print *,' Rd OK: ocean lsm: mskocn,ios=',mskocn,ios -! --- LSM initialized to ocean mask especially for case where Ocean -! --- changed by ocean model to land to cope with its problems -! --- remember, that lake mask is in zslm to be assigned in MAKEMT. - if ( mskocn == 1 ) then - allocate(slmi(im,jm)) - DO J = 1,JM - DO I = 1,numi(j) - if ( notocn == 0 ) then - slmi(i,j) = float(NINT(OCLSM(i,j))) - else - if ( NINT(OCLSM(i,j)) == 0) then - slmi(i,j) = 1 - else - slmi(i,j) = 0 - endif - endif - enddo - enddo - print *,' OCLSM',OCLSM(1,1),OCLSM(50,50),OCLSM(75,75), - & OCLSM(IM,JM) - print *,' SLMI:',SLMI(1,1),SLMI(50,50),SLMI(75,75), - & SLMI(IM,JM) -! --- Diag -! WRITE(27,iostat=ios) REAL(SLMI,4) -! print *,' write SLMI/OCLSM diag input:',ios - endif - endif - - else - print *,' Not using Ocean model land sea mask' - endif - - if (mskocn == 1)then - print *,'LSM:',OCLSM(1,1),OCLSM(50,50),OCLSM(75,75),OCLSM(IM,JM) - endif -! -! --- CALL MAKEMT(ZAVG,ZSLM,ORO,OCLSM,mskocn,SLM,VAR,VAR4,GLAT, - if (numi(1) < im) then - do j=1,jm - do i=numi(j)+1,im - oro(i,j) = 0.0 - slm(i,j) = 0.0 - var(i,j) = 0.0 - var4(i,j) = 0.0 - enddo - enddo - endif -! - CALL MAKEMT(ZAVG,ZSLM,ORO,SLM,VAR,VAR4,GLAT, - & IST,IEN,JST,JEN,IM,JM,IMN,JMN,XLAT,numi) - call minmxj(IM,JM,ORO,' ORO') - call minmxj(IM,JM,SLM,' SLM') - call minmxj(IM,JM,VAR,' VAR') - call minmxj(IM,JM,VAR4,' VAR4') - if (check_nans) then ! --- check for nands in above - call nanc(ORO,IM*JM,"MAKEMT_ORO") - call nanc(SLM,IM*JM,"MAKEMT_SLM") - call nanc(VAR,IM*JM,"MAKEMT_VAR") - call nanc(VAR4,IM*JM,"MAKEMT_VAR4") - endif -! -! check antarctic pole -! DO J = 1,JM -! DO I = 1,numi(j) -! if ( i .le. 100 .and. i .ge. 1 )then -! if (j .ge. JM-1 )then -! if (height .eq. 0.) print *,'I,J,SLM:',I,J,SLM(I,J) -! write(6,153)i,j,ORO(i,j),HEIGHT,SLM(i,j) -! endif -! endif -! ENDDO -! ENDDO - -! write(0,*)' ORO=',oro(:,:) -! -! === Compute mtn principal coord HTENSR: THETA,GAMMA,SIGMA -! - if (numi(1) < im) then - do j=1,jm - do i=numi(j)+1,im - theta(i,j) = 0.0 - gamma(i,j) = 0.0 - sigma(i,j) = 0.0 - enddo - enddo - endif -! - CALL MAKEPC(ZAVG,ZSLM,THETA,GAMMA,SIGMA,GLAT, - 1 IST,IEN,JST,JEN,IM,JM,IMN,JMN,XLAT,numi) - call minmxj(IM,JM,THETA,' THETA') - call minmxj(IM,JM,GAMMA,' GAMMA') - call minmxj(IM,JM,SIGMA,' SIGMA') - if (check_nans) then ! --- check for nands in above - call nanc(THETA,IM*JM,"MAKEPC_THETA") - call nanc(GAMMA,IM*JM,"MAKEPC_GAMMA") - call nanc(SIGMA,IM*JM,"MAKEPC_SIGMA") - endif -! -! COMPUTE MOUNTAIN DATA : OA OL -! - if (numi(1) < im) then - do j=1,jm - do i=numi(j)+1,im - oa(i,j,:) = 0.0 - ol(i,j,:) = 0.0 - elvmax(i,j) = 0.0 - enddo - enddo - endif -! - call minmxj(IM,JM,ORO,' ORO') - CALL MAKEOA(ZAVG,VAR,GLAT,OA,OL,IWORK,ELVMAX,ORO, - & WORK1,WORK2,WORK3,WORK4, - & WORK5,WORK6, - & IST,IEN,JST,JEN,IM,JM,IMN,JMN,XLAT,numi) - call minmxj(IM,JM,OA,' OA') - call minmxj(IM,JM,OL,' OL') - call minmxj(IM,JM,ELVMAX,' ELVMAX') - call minmxj(IM,JM,ORO,' ORO') - if (check_nans) then ! --- check for nands in above -! --- check for nands in above - call nanc(OA(1,1,1), IM*JM,"MAKEOA_OA(1,1,1)") - call nanc(OA(1,1,2), IM*JM,"MAKEOA_OA(1,1,2)") - call nanc(OA(1,1,3), IM*JM,"MAKEOA_OA(1,1,3)") - call nanc(OA(1,1,4), IM*JM,"MAKEOA_OA(1,1,4)") - call nanc(OL(1,1,1), IM*JM,"MAKEOA_OL(1,1,1)") - call nanc(OL(1,1,2), IM*JM,"MAKEOA_OL(1,1,2)") - call nanc(OL(1,1,3), IM*JM,"MAKEOA_OL(1,1,3)") - call nanc(OL(1,1,4), IM*JM,"MAKEOA_OL(1,1,4)") - call nanc(ELVMAX, IM*JM,"MAKEPC_ELVMAX") - endif - - maxc3 = 0 - maxc4 = 0 - maxc5 = 0 - maxc6 = 0 - maxc7 = 0 - maxc8 = 0 - DO J = 1,JM - DO I = 1,numi(j) - if (ELVMAX(I,J) > 3000.) maxc3 = maxc3 +1 - if (ELVMAX(I,J) > 4000.) maxc4 = maxc4 +1 - if (ELVMAX(I,J) > 5000.) maxc5 = maxc5 +1 - if (ELVMAX(I,J) > 6000.) maxc6 = maxc6 +1 - if (ELVMAX(I,J) > 7000.) maxc7 = maxc7 +1 - if (ELVMAX(I,J) > 8000.) maxc8 = maxc8 +1 - ENDDO - ENDDO - write(0,*)' MAXC3:',maxc3,maxc4,maxc5,maxc6,maxc7,maxc8 -! -! itest = 151 -! jtest = 56 -! - write(0,*)' ===> Replacing ELVMAX with ELVMAX-ORO <=== ' - write(0,*)' ===> if ELVMAX<=ORO replace with proxy <=== ' - write(0,*)' ===> the sum of mean orog (ORO) and std dev <=== ' - DO J = 1,JM - DO I = 1,numi(j) - if (ELVMAX(I,J) < ORO(I,J) ) then -!--- subtracting off ORO leaves std dev (this should never happen) - ELVMAX(I,J) = MAX( 3. * VAR(I,J),0.) - else - ELVMAX(I,J) = MAX( ELVMAX(I,J) - ORO(I,J),0.) - endif - ENDDO - ENDDO - maxc3 = 0 - maxc4 = 0 - maxc5 = 0 - maxc6 = 0 - maxc7 = 0 - maxc8 = 0 - DO J = 1,JM - DO I = 1,numi(j) - if (ELVMAX(I,J) > 3000.) maxc3 = maxc3 +1 - if (ELVMAX(I,J) > 4000.) maxc4 = maxc4 +1 - if (ELVMAX(I,J) > 5000.) maxc5 = maxc5 +1 - if (ELVMAX(I,J) > 6000.) maxc6 = maxc6 +1 - if (ELVMAX(I,J) > 7000.) maxc7 = maxc7 +1 - if (ELVMAX(I,J) > 8000.) maxc8 = maxc8 +1 - ENDDO - ENDDO - write(0,*)' after MAXC 3-6 km:',maxc3,maxc4,maxc5,maxc6 -! - call mnmxja(IM,JM,ELVMAX,itest,jtest,' ELVMAX') -! if (JM .gt. 0) stop - - deallocate (ZAVG) - deallocate (ZSLM) - deallocate (UMD) - deallocate (GICE) - deallocate (work3,work4,work5,work6,iwork) -! -! ZERO OVER OCEAN -! - write(0,*)' Testing at point (itest,jtest)=',itest,jtest - write(0,*)' SLM(itest,jtest)=',slm(itest,jtest),itest,jtest - write(0,*)' ORO(itest,jtest)=',oro(itest,jtest) - - DO J = 1,JM - DO I = 1,numi(j) - IF(SLM(I,J) == 0.0) THEN -! VAR(I,J) = 0. - VAR4(I,J) = 0. - OA(I,J,1) = 0. - OA(I,J,2) = 0. - OA(I,J,3) = 0. - OA(I,J,4) = 0. - OL(I,J,1) = 0. - OL(I,J,2) = 0. - OL(I,J,3) = 0. - OL(I,J,4) = 0. -! THETA(I,J) = 0. -! GAMMA(I,J) = 0. -! SIGMA(I,J) = 0. -! ELVMAX(I,J) = 0. - ENDIF - ENDDO - ENDDO -! -! --- if mskocn=1 ocean land sea mask given, =0 if not present -! --- OCLSM is real(*4) array with fractional values possible -! --- 0 is ocean and 1 is land for slm -! --- Step 1: Only change SLM after GFS SLM is applied -! --- SLM is only field that will be altered by OCLSM -! --- Ocean land sea mask ocean points made ocean in atm model -! --- Land and Lakes and all other atm elv moments remain unchanged. - if ( mskocn == 1 ) then - - DO j = 1,jm - DO i = 1,numi(j) - if (abs (oro(i,j)) < 1. ) then - slm(i,j) = slmi(i,j) - else - if ( slmi(i,j) == 1. .and. slm(i,j) == 1) slm(i,j) = 1 - if ( slmi(i,j) == 0. .and. slm(i,j) == 0) slm(i,j) = 0 - if ( slmi(i,j) == 0. .and. slm(i,j) == 1) slm(i,j) = 0 - if ( slmi(i,j) == 0. .and. slm(i,j) == 0) slm(i,j) = 0 - endif - enddo - enddo - if (allocated(slmi)) deallocate(slmi) - endif - print *,' SLM(itest,jtest)=',slm(itest,jtest),itest,jtest - print *,' ORO(itest,jtest)=',oro(itest,jtest),itest,jtest -! -! REMOVE ISOLATED POINTS -! - DO J=2,JM-1 - JN = J - 1 - JS = J + 1 - RN = REAL(NUMI(JN)) / REAL(NUMI(J)) - RS = REAL(NUMI(JS)) / REAL(NUMI(J)) - DO I=1,NUMI(J) - IW = MOD(I+IM-2,IM) + 1 - IE = MOD(I,IM) + 1 - SLMA = SLM(IW,J) + SLM(IE,J) - OROA = ORO(IW,J) + ORO(IE,J) - VARA = VAR(IW,J) + VAR(IE,J) - VAR4A = VAR4(IW,J) + VAR4(IE,J) - DO K=1,4 - OAA(K) = OA(IW,J,K) + OA(IE,J,K) -! --- (*j*) fix typo: August 27, 2012 -! OLA(K) = OA(IW,J,K) + OA(IE,J,K) - OLA(K) = OL(IW,J,K) + OL(IE,J,K) - ENDDO - WGTA = 2 - XN = RN*(I-1) + 1 - IF (ABS(XN-NINT(XN)) < 1.E-2) THEN - IN = MOD(NINT(XN)-1,NUMI(JN)) + 1 - INW = MOD(IN+NUMI(JN)-2,NUMI(JN)) + 1 - INE = MOD(IN,NUMI(JN)) + 1 - SLMA = SLMA + SLM(INW,JN) + SLM(IN,JN) + SLM(INE,JN) - OROA = OROA + ORO(INW,JN) + ORO(IN,JN) + ORO(INE,JN) - VARA = VARA + VAR(INW,JN) + VAR(IN,JN) + VAR(INE,JN) - VAR4A = VAR4A + VAR4(INW,JN) + VAR4(IN,JN) + VAR4(INE,JN) - DO K=1,4 - OAA(K) = OAA(K) + OA(INW,JN,K) + OA(IN,JN,K) + OA(INE,JN,K) - OLA(K) = OLA(K) + OL(INW,JN,K) + OL(IN,JN,K) + OL(INE,JN,K) - ENDDO - WGTA = WGTA + 3 - ELSE - INW = INT(XN) - INE = MOD(INW,NUMI(JN)) + 1 - SLMA = SLMA+SLM(INW,JN) + SLM(INE,JN) - OROA = OROA+ORO(INW,JN) + ORO(INE,JN) - VARA = VARA+VAR(INW,JN) + VAR(INE,JN) - VAR4A = VAR4A+VAR4(INW,JN) + VAR4(INE,JN) - DO K=1,4 - OAA(K) = OAA(K) + OA(INW,JN,K) + OA(INE,JN,K) - OLA(K) = OLA(K) + OL(INW,JN,K) + OL(INE,JN,K) - ENDDO - WGTA = WGTA + 2 - ENDIF - XS = RS*(I-1)+1 - IF(ABS(XS-NINT(XS)) < 1.E-2) THEN - IS = MOD(NINT(XS)-1,NUMI(JS)) + 1 - ISW = MOD(IS+NUMI(JS)-2,NUMI(JS)) + 1 - ISE = MOD(IS,NUMI(JS)) + 1 - SLMA = SLMA + SLM(ISW,JS) + SLM(IS,JS) + SLM(ISE,JS) - OROA = OROA + ORO(ISW,JS) + ORO(IS,JS) + ORO(ISE,JS) - VARA = VARA + VAR(ISW,JS) + VAR(IS,JS) + VAR(ISE,JS) - VAR4A = VAR4A + VAR4(ISW,JS) + VAR4(IS,JS) + VAR4(ISE,JS) - DO K=1,4 - OAA(K) = OAA(K) + OA(ISW,JS,K) + OA(IS,JS,K) + OA(ISE,JS,K) - OLA(K) = OLA(K) + OL(ISW,JS,K) + OL(IS,JS,K) + OL(ISE,JS,K) - ENDDO - WGTA = WGTA + 3 - ELSE - ISW = INT(XS) - ISE = MOD(ISW,NUMI(JS)) + 1 - SLMA = SLMA + SLM(ISW,JS) + SLM(ISE,JS) - OROA = OROA + ORO(ISW,JS) + ORO(ISE,JS) - VARA = VARA + VAR(ISW,JS) + VAR(ISE,JS) - VAR4A = VAR4A + VAR4(ISW,JS) + VAR4(ISE,JS) - DO K=1,4 - OAA(K) = OAA(K) + OA(ISW,JS,K) + OA(ISE,JS,K) - OLA(K) = OLA(K) + OL(ISW,JS,K) + OL(ISE,JS,K) - ENDDO - WGTA = WGTA + 2 - ENDIF - OROA = OROA / WGTA - VARA = VARA / WGTA - VAR4A = VAR4A / WGTA - DO K=1,4 - OAA(K) = OAA(K) / WGTA - OLA(K) = OLA(K) / WGTA - ENDDO - IF(SLM(I,J) == 0..AND.SLMA == WGTA) THEN - PRINT '("SEA ",2F8.0," MODIFIED TO LAND",2F8.0," AT ",2I8)', - & ORO(I,J),VAR(I,J),OROA,VARA,I,J - SLM(I,J) = 1. - ORO(I,J) = OROA - VAR(I,J) = VARA - VAR4(I,J) = VAR4A - DO K=1,4 - OA(I,J,K) = OAA(K) - OL(I,J,K) = OLA(K) - ENDDO - ELSEIF(SLM(I,J) == 1. .AND. SLMA == 0.) THEN - PRINT '("LAND",2F8.0," MODIFIED TO SEA ",2F8.0," AT ",2I8)', - & ORO(I,J),VAR(I,J),OROA,VARA,I,J - SLM(I,J) = 0. - ORO(I,J) = OROA - VAR(I,J) = VARA - VAR4(I,J) = VAR4A - DO K=1,4 - OA(I,J,K) = OAA(K) - OL(I,J,K) = OLA(K) - ENDDO - ENDIF - ENDDO - ENDDO -!--- print for testing after isolated points removed - write(0,*)' after isolated points removed' - - call minmxj(IM,JM,ORO,' ORO') - -! print *,' JM=',JM,' numi=',numi - write(0,*)' ORO(itest,jtest)=',oro(itest,jtest) - write(0,*)' VAR(itest,jtest)=',var(itest,jtest) - write(0,*)' VAR4(itest,jtest)=',var4(itest,jtest) - write(0,*)' OA(itest,jtest,1)=',oa(itest,jtest,1) - write(0,*)' OA(itest,jtest,2)=',oa(itest,jtest,2) - write(0,*)' OA(itest,jtest,3)=',oa(itest,jtest,3) - write(0,*)' OA(itest,jtest,4)=',oa(itest,jtest,4) - write(0,*)' OL(itest,jtest,1)=',ol(itest,jtest,1) - write(0,*)' OL(itest,jtest,2)=',ol(itest,jtest,2) - write(0,*)' OL(itest,jtest,3)=',ol(itest,jtest,3) - write(0,*)' OL(itest,jtest,4)=',ol(itest,jtest,4) - write(0,*)' Testing at point (itest,jtest)=',itest,jtest - write(0,*)' THETA(itest,jtest)=',theta(itest,jtest) - write(0,*)' GAMMA(itest,jtest)=',GAMMA(itest,jtest) - write(0,*)' SIGMA(itest,jtest)=',SIGMA(itest,jtest) - write(0,*)' ELVMAX(itest,jtest)=',ELVMAX(itest,jtest) - write(0,*)' EFAC=',EFAC -! - DO J=1,JM - DO I=1,numi(j) - ORO(I,J) = ORO(I,J) + EFAC*VAR(I,J) - HPRIME(I,J,1) = VAR(I,J) - HPRIME(I,J,2) = VAR4(I,J) - HPRIME(I,J,3) = oa(I,J,1) - HPRIME(I,J,4) = oa(I,J,2) - HPRIME(I,J,5) = oa(I,J,3) - HPRIME(I,J,6) = oa(I,J,4) - HPRIME(I,J,7) = ol(I,J,1) - HPRIME(I,J,8) = ol(I,J,2) - HPRIME(I,J,9) = ol(I,J,3) - HPRIME(I,J,10) = ol(I,J,4) - HPRIME(I,J,11) = THETA(I,J) - HPRIME(I,J,12) = GAMMA(I,J) - HPRIME(I,J,13) = SIGMA(I,J) - HPRIME(I,J,14) = ELVMAX(I,J) - ENDDO - ENDDO -! - deallocate (VAR, VAR4, OA, OL) -! - call mnmxja(IM,JM,ELVMAX,itest,jtest,' ELVMAX') - -! --- Quadratic filter applied by default. -! --- NF0 is normally set to an even value beyond the previous truncation, -! --- for example, for jcap=382, NF0=254+2 -! --- NF1 is set as jcap+2 (and/or nearest even), eg., for t382, NF1=382+2=384 -! --- if no filter is desired then NF1=NF0=0 and ORF=ORO -! --- if no filter but spectral to grid (with gibbs) then NF1=jcap+2, and NF0=jcap+1 -! - oro_s = oro -! - IF ( NF1 - NF0 == 0 ) FILTER = .FALSE. - write(0,*)' NF1, NF0, FILTER=',NF1,NF0,FILTER - - IF (FILTER) THEN ! SPECTRALLY TRUNCATE AND FILTER OROGRAPHY - do j=1,jm - if(numi(j) < im) then - ffj = cmplx(0.,0.) - call spfft1(numi(j),imb2p1,numi(j),1,ffj,oro(1,j),-1) - call spfft1(im, imb2p1,im, 1,ffj,oro(1,j),+1) - endif - enddo - -! write(0,*)' calling sptezj -1 nm=',nm,' nw=',nw,' im=',im -! &,' jm=',jm,' latch=',latch - - CALL SPTEZ(NR,NM,4,IM,JM,ORS,ORO,-1) - -! CALL SPTEZJ(NM,NW,1,4,IM,JM,1,ORS,ORO,latch,-1) -! - FFF = 1./(NF1-NF0)**2 - I = 0 - DO M=0,NM - DO N=M,NM+NR*M - IF(N > NF0) THEN - WWW = MAX(1.-FFF*(N-NF0)**2,0.) - ORS(I+1) = ORS(I+1)*WWW - ORS(I+2) = ORS(I+2)*WWW - ENDIF - I = I + 2 - ENDDO - ENDDO -! -! write(0,*),' calling sptezj +1 nm=',nm,' nw=',nw,' im=',im -! &,' jm=',jm,' latch=',latch - - CALL SPTEZ(NR,NM,4,IM,JM,ORS,ORF,+1) -! CALL SPTEZJ(NM,NW,1,4,IM,JM,1,ORS,ORF,latch,+1) - - do j=1,jm - if(numi(j) < im) then - call spfft1(im, imb2p1,im, 1,ffj,orf(1,j),-1) - call spfft1(numi(j),imb2p1,numi(j),1,ffj,orf(1,j),+1) - endif - enddo - - ELSE - IF (REVLAT) THEN - CALL REVERS(IM, JM, numi, SLM, WORK1) - CALL REVERS(IM, JM, numi, ORO, WORK1) - DO IMT=1,NMT - CALL REVERS(IM, JM, numi, HPRIME(1,1,IMT), WORK1) - ENDDO - ENDIF - ORS = 0. - ORF = ORO - ENDIF - oro = oro_s - call mnmxja(IM,JM,ELVMAX,itest,jtest,' ELVMAX') - - write(0,*)' ELVMAX(',itest,jtest,')=',ELVMAX(itest,jtest) - write(0,*)' after spectral filter is applied' - - call minmxj(IM,JM,ORO,' ORO') - call minmxj(IM,JM,ORF,' ORF') -! -! USE NEAREST NEIGHBOR INTERPOLATION TO FILL FULL GRIDS -! - call rg2gg(im,jm,numi,slm) - call rg2gg(im,jm,numi,oro) - call rg2gg(im,jm,numi,oro_s) - call rg2gg(im,jm,numi,orf) -! --- not apply to new prin coord and ELVMAX (*j*) - do imt=1,nmt - call rg2gg(im,jm,numi,hprime(1,1,imt)) - enddo -! -! write(0,*),' after nearest neighbor interpolation applied ' - call minmxj(IM,JM,ORO,' ORO') - call minmxj(IM,JM,ORF,' ORF') - call mnmxja(IM,JM,ELVMAX,itest,jtest,' ELVMAX') - write(0,*)' ORO,ORF(itest,jtest),itest,jtest:', - & ORO(itest,jtest),ORF(itest,jtest),itest,jtest - write(0,*)' ELVMAX(',itest,jtest,')=',ELVMAX(itest,jtest) -! check antarctic pole - DO J = 1,JM - DO I = 1,numi(j) - if ( i <= min(numi(j),21) .and. i > 0 )then - if (j == JM ) write(6,153)i,j,ORO(i,j),ELVMAX(i,j),SLM(i,j) - 153 format(1x,' ORO,ELVMAX(i=',i4,' j=',i4,')=',2E14.5,f5.1) - endif - ENDDO - ENDDO - -! OUTPUT BINARY FIELDS - - WRITE(51) REAL(SLM,4) - WRITE(52) REAL(ORF,4) - WRITE(53) REAL(HPRIME,4) - WRITE(54) REAL(ORS,4) - WRITE(55) REAL(ORO,4) - WRITE(66) REAL(THETA,4) - WRITE(67) REAL(GAMMA,4) - WRITE(68) REAL(SIGMA,4) - -! --- OCLSM is real(4) write only if ocean mask is present - if ( mskocn == 1 ) then - ios = 0 - WRITE(27,iostat=ios) OCLSM - print *,' write OCLSM input:',ios - print *,'LSM:',OCLSM(1,1),OCLSM(50,50),OCLSM(75,75),OCLSM(IM,JM) - endif - print *,' SLM:',SLM(1,1),SLM(50,50),SLM(75,75),SLM(IM,JM) -! - call minmxj(IM,JM,ORO,' ORO') - - write(0,*)' IM=',IM,' JM=',JM,' SPECTR=',SPECTR - -!--- Test binary file output: - WRITE(71) REAL(SLM,4) - DO IMT=1,NMT - WRITE(71) REAL(HPRIME(:,:,IMT),4) - print *,' HPRIME(',itest,jtest,imt,')=',HPRIME(itest,jtest,imt) - ENDDO - WRITE(71) REAL(ORO,4) - IF (SPECTR) THEN - WRITE(71) REAL(ORF,4) ! smoothed spectral orography! - ENDIF - -! OUTPUT GRIB FIELDS - - KPDS = 0 - KPDS(1) = 7 - KPDS(2) = 78 - KPDS(3) = 255 - KPDS(4) = 128 - KPDS(5) = 81 - KPDS(6) = 1 - kpds(8) = 2004 - KPDS(9) = 1 - KPDS(10) = 1 - KPDS(13) = 4 - KPDS(15) = 1 - KPDS(16) = 51 - KPDS(17) = 1 - KPDS(18) = 1 - KPDS(19) = 1 - KPDS(21) = 20 - KPDS(22) = 1 - - KGDS = 0 - KGDS(1) = 4 - KGDS(2) = IM - KGDS(3) = JM - KGDS(4) = 90000-180000/PI*RCLT(1) - KGDS(6) = 128 - KGDS(7) = 180000/PI*RCLT(1)-90000 - KGDS(8) = -NINT(360000./IM) - KGDS(9) = NINT(360000./IM) - KGDS(10) = JM/2 - KGDS(20) = 255 - -! --- SLM - CALL BAOPENwt(56,'fort.56',IRET) - if (iret /= 0) print *,' BAOPEN ERROR UNIT 56: IRET=',IRET - CALL PUTGB(56,IM*JM,KPDS,KGDS,LB,SLM,IRET) - print *,' SLM: putgb-KPDS(22,5),iret:',KPDS(22),KPDS(5),IRET - if (iret /= 0) print *,' SLM PUTGB ERROR: UNIT 56: IRET=',IRET - - write(0,*)' SLM: putgb-KPDS(22,5),iret:',KPDS(22),KPDS(5),IRET - -! --- OCLSM if present -! if ( mskocn .eq. 1 ) then -! CALL BAOPEN(27,'fort.27',IRET) -! if (iret .ne. 0) print *,' OCLSM BAOPEN ERROR UNIT 27:IRET=',IRET -! CALL PUTGB(27,IM*JM,KPDS,KGDS,LB,OCLSM,IRET) -! if (iret .ne. 0) print *,' OCLSM PUTGB ERROR: UNIT 27:IRET=',IRET -! print *,' OCLSM: putgb-KPDS(22,5),iret:',KPDS(22),KPDS(5),IRET -! endif - - KPDS(5) = 8 - IF (SPECTR) THEN - CALL BAOPENwt(57,'fort.57',IRET) - CALL PUTGB(57,IM*JM,KPDS,KGDS,LB,ORF,IRET) - write(0,*)' ORF (ORO): putgb-KPDS(22,5),iret:',KPDS(22),KPDS(5) - & ,IRET - CALL BAOPENwt(72,'fort.72',IRET) - CALL PUTGB(72,IM*JM,KPDS,KGDS,LB,ORO_S,IRET) - write(0,*)' ORO_UF (ORO): putgb-KPDS(22,5),iret:',KPDS(22), - & KPDS(5) - & ,IRET -! else ! grib output for lat/lon grid KPD's need to be defined -! CALL BAOPENwt(57,'fort.57',IRET) -! CALL PUTGB(57,IM*JM,KPDS,KGDS,LB,ORO,IRET) -! print *,' ORO (ORO): putgb-KPDS(22,5),iret:',KPDS(22),KPDS(5) -! & ,IRET - ENDIF -! -! === write out theta (angle of land to East) using #101 (wave dir) -! === [radians] and since < 1 scale adjust kpds(22) -! - KPDS(5) = 101 - CALL BAOPENwt(58,'fort.58',IRET) - CALL PUTGB(58,IM*JM,KPDS,KGDS,LB,THETA,IRET) - - write(0,*)' THETA: putgb-KPDS(22,5),iret:',KPDS(22),KPDS(5),IRET -! -! === write out (land aspect ratio or anisotropy) using #102 -! === (as in wind wave hgt) -! - KPDS(22) = 2 - KPDS(5) = 102 - CALL BAOPENwt(60,'fort.60',IRET) - CALL PUTGB(60,IM*JM,KPDS,KGDS,LB,SIGMA,IRET) - write(0,*)' SIGMA: putgb-KPDS(22,5),iret:',KPDS(22),KPDS(5),IRET -! -! === write out (slope parameter sigma) using #9 -! === (as in std hgt) -! - KPDS(22) = 1 - KPDS(5) = 103 - CALL BAOPENwt(59,'fort.59',IRET) - CALL PUTGB(59,IM*JM,KPDS,KGDS,LB,GAMMA,IRET) - - write(0,*)' GAMMA: putgb-KPDS(22,5),iret:',KPDS(22),KPDS(5),IRET -! - KPDS(22) = 1 - KPDS(5) = 9 - CALL BAOPENwt(61,'fort.61',IRET) - CALL PUTGB(61,IM*JM,KPDS,KGDS,LB,HPRIME,IRET) - - write(0,*)' HPRIME: putgb-KPDS(22,5),iret:',KPDS(22),KPDS(5),IRET -! -! - KPDS(22) = 1 - KPDS(5) = 8 - CALL BAOPENwt(62,'fort.62',IRET) - CALL PUTGB(62,IM*JM,KPDS,KGDS,LB,ELVMAX,IRET) - - write(0,*)' ELVMAX: putgb-KPDS(22,5),iret:',KPDS(22),KPDS(5),IRET -! - RETURN - END - SUBROUTINE MAKEMT(ZAVG,ZSLM,ORO,SLM,VAR,VAR4, - & GLAT,IST,IEN,JST,JEN,IM,JM,IMN,JMN,XLAT,numi) -! - implicit none -! - integer im, jm, imn, jmn - INTEGER ZAVG(IMN,JMN),ZSLM(IMN,JMN) - &, IST(IM,jm),IEN(IM,jm),JST(JM),JEN(JM),numi(jm) - real ORO(IM,JM),SLM(IM,JM),VAR(IM,JM),VAR4(IM,JM) - &, GLAT(JMN),XLAT(JM) -! - LOGICAL FLAG, DEBUG -!==== DATA DEBUG/.TRUE./ - DATA DEBUG/.FALSE./ -! - integer i, j, im1, jm1, ii1, i1, j1 - real delx, delxn, faclon, xnsum, xland, xwatr, xl1, xs1 - &, xw1, xw2, xw4, height, xxlat -! - print *,' _____ SUBROUTINE MAKEMT ' -!---- GLOBAL XLAT AND XLON ( DEGREE ) -! - JM1 = JM - 1 - DELXN = 360./IMN ! MOUNTAIN DATA RESOLUTION -! - DO J=1,JMN - GLAT(J) = -90. + (J-1) * DELXN + DELXN * 0.5 - ENDDO -! -!---- FIND THE AVERAGE OF THE MODES IN A GRID BOX -! -! (*j*) for hard wired zero offset (lambda s =0) for terr05 - DO J=1,JM - DO I=1,numi(j) - IM1 = numi(j) - 1 - DELX = 360./numi(j) ! GAUSSIAN GRID RESOLUTION - FACLON = DELX / DELXN - IST(I,j) = FACLON * FLOAT(I-1) - FACLON * 0.5 + 1 - IEN(I,j) = FACLON * FLOAT(I) - FACLON * 0.5 + 1 - -! IST(I,j) = FACLON * FLOAT(I-1) + 1.0001 -! IEN(I,j) = FACLON * FLOAT(I) + 0.0001 -! - IF (IST(I,j) <= 0) IST(I,j) = IST(I,j) + IMN - IF (IEN(I,j) < IST(I,j)) IEN(I,j) = IEN(I,j) + IMN -! -! if ( I .lt. 10 .and. J .ge. JM-1 ) -! 1 PRINT*,' MAKEMT: I j IST IEN ',I,j,IST(I,j),IEN(I,j) - ENDDO -! if ( J .ge. JM-1 ) then -! print *,' *** FACLON=',FACLON, 'numi(j=',j,')=',numi(j) -! endif - ENDDO - print *,' DELX=',DELX,' DELXN=',DELXN - DO J=1,JM-1 - FLAG=.TRUE. - DO J1=1,JMN - XXLAT = (XLAT(J)+XLAT(J+1))*0.5 - IF(FLAG .AND. GLAT(J1) > XXLAT) THEN - JST(J) = J1 - JEN(J+1) = J1 - 1 - FLAG = .FALSE. - ENDIF - ENDDO -!X PRINT*, ' J JST JEN ',J,JST(J),JEN(J),XLAT(J),GLAT(J1) - ENDDO - JST(JM) = MAX(JST(JM-1) - (JEN(JM-1)-JST(JM-1)),1) - JEN(1) = MIN(JEN(2) + (JEN(2)-JST(2)),JMN) - -! PRINT*, ' JM JST JEN=',JST(JM),JEN(JM),XLAT(JM),GLAT(JMN) -! -!...FIRST, AVERAGED HEIGHT -! - DO J=1,JM - DO I=1,numi(j) - ORO(I,J) = 0.0 - VAR(I,J) = 0.0 - VAR4(I,J) = 0.0 - XNSUM = 0.0 - XLAND = 0.0 - XWATR = 0.0 - XL1 = 0.0 - XS1 = 0.0 - XW1 = 0.0 - XW2 = 0.0 - XW4 = 0.0 - DO II1 = 1, IEN(I,J) - IST(I,J) + 1 - I1 = IST(I,J) + II1 - 1 - IF(I1 <= 0) I1 = I1 + IMN - IF(I1 > IMN) I1 = I1 - IMN - -! if ( i .le. 10 .and. i .ge. 1 ) then -! if (j .eq. JM ) -! &print *,' J,JST,JEN,IST,IEN,I1=', -! &J,JST(j),JEN(J),IST(I,j),IEN(I,j),I1 -! endif - - DO J1=JST(J),JEN(J) - XLAND = XLAND + FLOAT(ZSLM(I1,J1)) - XWATR = XWATR + FLOAT(1-ZSLM(I1,J1)) - XNSUM = XNSUM + 1. - HEIGHT = FLOAT(ZAVG(I1,J1)) - IF(HEIGHT < -990.) HEIGHT = 0.0 -!......... - XL1 = XL1 + HEIGHT * FLOAT(ZSLM(I1,J1)) - XS1 = XS1 + HEIGHT * FLOAT(1-ZSLM(I1,J1)) - XW1 = XW1 + HEIGHT - XW2 = XW2 + HEIGHT * HEIGHT - -! check antarctic pole -! if ( i .le. 10 .and. i .ge. 1 )then -! if (j .ge. JM-1 )then -! write(6,153)i,j,ORO(i,j),HEIGHT,SLM(i,j) -!=== degub testing -! print *," I,J,I1,J1,XL1,XS1,XW1,XW2:",I,J,I1,J1,XL1,XS1,XW1,XW2 -! 153 format(1x,' ORO,ELVMAX(i=',i4,' j=',i3,')=',2E14.5,3f5.1) -! endif -! endif - - ENDDO - ENDDO - IF(XNSUM > 1.) THEN - SLM(I,J) = FLOAT(NINT(XLAND/XNSUM)) - IF(SLM(I,J) /= 0.) THEN - if (xland > 0.0) ORO(I,J)= XL1 / XLAND - ELSE - if (xwatr > 0.0) ORO(I,J)= XS1 / XWATR - ENDIF - VAR(I,J) = SQRT(MAX(XW2/XNSUM-(XW1/XNSUM)**2,0.)) - DO II1 = 1, IEN(I,j) - IST(I,J) + 1 - I1 = IST(I,J) + II1 - 1 - IF(I1 <= 0.) I1 = I1 + IMN - IF(I1 > IMN) I1 = I1 - IMN - DO J1=JST(J),JEN(J) - HEIGHT = FLOAT(ZAVG(I1,J1)) - IF(HEIGHT < -990.) HEIGHT = 0.0 - XW4 = XW4 + (HEIGHT-ORO(I,J)) ** 4 - ENDDO - ENDDO - IF(VAR(I,J) > 1.) THEN -! if ( I .lt. 20 .and. J .ge. JM-19 ) then -! print *,'I,J,XW4,XNSUM,VAR(I,J)',I,J,XW4,XNSUM,VAR(I,J) -! endif - VAR4(I,J) = MIN(XW4/XNSUM/VAR(I,J) **4,10.) - ENDIF - ENDIF - ENDDO - ENDDO - - WRITE(6,*) "! MAKEMT ORO SLM VAR VAR4 DONE" -! - - RETURN - END - SUBROUTINE MAKEPC(ZAVG,ZSLM,THETA,GAMMA,SIGMA, - 1 GLAT,IST,IEN,JST,JEN,IM,JM,IMN,JMN,XLAT,numi) -! -!=== PC: principal coordinates of each Z avg orog box for L&M -! - implicit none -! - real, parameter :: REARTH=6.3712E+6 - integer IM,JM,IMN,JMN - INTEGER ZAVG(IMN,JMN),ZSLM(IMN,JMN) - &, IST(IM,jm),IEN(IM,jm),JST(JM),JEN(JM),numi(jm) - real GLAT(JMN),XLAT(JM),DELTAX(JMN) - &, ORO(IM,JM),SLM(IM,JM),HL(IM,JM),HK(IM,JM) - real HX2(IM,JM),HY2(IM,JM),HXY(IM,JM),HLPRIM(IM,JM) - &, THETA(IM,JM),GAMMA(IM,JM),SIGMA2(IM,JM),SIGMA(IM,JM) - LOGICAL FLAG, DEBUG -!=== DATA DEBUG/.TRUE./ - DATA DEBUG/.FALSE./ -! - integer i, j, jm1, ii1, i0, i1, j1, ip1, ijax - real pi, certh, delxn, deltay, delx, faclon, xxlat - &, xnsum, xland, xwatr, xl1, xs1, xfp, yfp, xfpyfp, xfp2 - &, yfp2, height, hi0, hi1, hip1, hijax, hi1j1, hj0, hjp1 -! - PI = 4.0 * ATAN(1.0) - CERTH = PI * REARTH -!---- GLOBAL XLAT AND XLON ( DEGREE ) -! - JM1 = JM - 1 - DELXN = 360./IMN ! MOUNTAIN DATA RESOLUTION - DELTAY = CERTH / FLOAT(JMN) - print *, 'MAKEPC: DELTAY=',DELTAY -! - DO J=1,JMN - GLAT(J) = -90. + (J-1) * DELXN + DELXN * 0.5 - DELTAX(J) = DELTAY * COSD(GLAT(J)) - ENDDO -! -!---- FIND THE AVERAGE OF THE MODES IN A GRID BOX -! - DO J=1,JM - DO I=1,numi(j) -! IM1 = numi(j) - 1 - DELX = 360. / numi(j) ! GAUSSIAN GRID RESOLUTION - FACLON = DELX / DELXN - IST(I,j) = FACLON * FLOAT(I-1) - FACLON * 0.5 - IST(I,j) = IST(I,j) + 1 - IEN(I,j) = FACLON * FLOAT(I) - FACLON * 0.5 - -! if (debug) then -! if ( I < 10 .and. J < 10 ) -! 1 PRINT*, ' I j IST IEN ',I,j,IST(I,j),IEN(I,j) -! endif -! IST(I,j) = FACLON * FLOAT(I-1) + 1.0001 -! IEN(I,j) = FACLON * FLOAT(I) + 0.0001 - - IF (IST(I,j) <= 0) IST(I,j) = IST(I,j) + IMN - IF (IEN(I,j) < IST(I,j)) IEN(I,j) = IEN(I,j) + IMN - if (debug) then - if ( I < 10 .and. J < 10 ) - 1 PRINT*, ' I j IST IEN ',I,j,IST(I,j),IEN(I,j) - endif - IF (IEN(I,j) .LT. IST(I,j)) - 1 print *,' MAKEPC: IEN < IST: I,J,IST(I,J),IEN(I,J)', - 2 I,J,IST(I,J),IEN(I,J) - ENDDO - ENDDO - DO J=1,JM-1 - FLAG=.TRUE. - DO J1=1,JMN - XXLAT = (XLAT(J)+XLAT(J+1))*0.5 - IF(FLAG .AND. GLAT(J1) > XXLAT) THEN - JST(J) = J1 - JEN(J+1) = J1 - 1 - FLAG = .FALSE. - ENDIF - ENDDO - ENDDO - JST(JM) = MAX(JST(JM-1) - (JEN(JM-1)-JST(JM-1)),1) - JEN(1) = MIN(JEN(2) + (JEN(2)-JST(2)),JMN) - if (debug) then - PRINT*, ' IST,IEN(1,1-numi(1,JM))',IST(1,1),IEN(1,1), - 1 IST(numi(JM),JM),IEN(numi(JM),JM), numi(JM) - PRINT*, ' JST,JEN(1,JM) ',JST(1),JEN(1),JST(JM),JEN(JM) - endif -! -!... DERIVITIVE TENSOR OF HEIGHT -! - DO J=1,JM - DO I=1,numi(j) - ORO(I,J) = 0.0 - HX2(I,J) = 0.0 - HY2(I,J) = 0.0 - HXY(I,J) = 0.0 - XNSUM = 0.0 - XLAND = 0.0 - XWATR = 0.0 - XL1 = 0.0 - XS1 = 0.0 - xfp = 0.0 - yfp = 0.0 - xfpyfp = 0.0 - xfp2 = 0.0 - yfp2 = 0.0 - HL(I,J) = 0.0 - HK(I,J) = 0.0 - HLPRIM(I,J) = 0.0 - THETA(I,J) = 0.0 - GAMMA(I,J) = 0. - SIGMA2(I,J) = 0. - SIGMA(I,J) = 0. -! - DO II1 = 1, IEN(I,J) - IST(I,J) + 1 - I1 = IST(I,J) + II1 - 1 - IF(I1.LE.0.) I1 = I1 + IMN - IF(I1.GT.IMN) I1 = I1 - IMN -! -!=== set the rest of the indexs for ave: 2pt staggered derivitive -! - i0 = i1 - 1 - if (i1 - 1 <= 0 ) i0 = i0 + imn - if (i1 - 1 > imn) i0 = i0 - imn - - ip1 = i1 + 1 - if (i1 + 1 <= 0 ) ip1 = ip1 + imn - if (i1 + 1 > imn) ip1 = ip1 - imn -! - DO J1=JST(J),JEN(J) - if (debug) then - if ( I1 == IST(I,J) .and. J1 == JST(J) ) - 1 PRINT*, ' J, J1,IST,JST,DELTAX,GLAT ', - 2 J,J1,IST(I,J),JST(J),DELTAX(J1),GLAT(J1) - if ( I1 .eq. IEN(I,J) .and. J1 .eq. JEN(J) ) - 1 PRINT*, ' J, J1,IEN,JEN,DELTAX,GLAT ', - 2 J,J1,IEN(I,J),JEN(J),DELTAX(J1),GLAT(J1) - endif - XLAND = XLAND + FLOAT(ZSLM(I1,J1)) - XWATR = XWATR + FLOAT(1-ZSLM(I1,J1)) - XNSUM = XNSUM + 1. -! - HEIGHT = FLOAT(ZAVG(I1,J1)) - hi0 = float(zavg(i0,j1)) - hip1 = float(zavg(ip1,j1)) -! - IF(HEIGHT < -990.) HEIGHT = 0.0 - if(hi0 < -990.) hi0 = 0.0 - if(hip1 < -990.) hip1 = 0.0 -!........ xfp = xfp + 0.5 * ( hip1 - hi0 ) / DELTAX(J1) - xfp = 0.5 * ( hip1 - hi0 ) / DELTAX(J1) - xfp2 = xfp2 + 0.25 * ( ( hip1 - hi0 )/DELTAX(J1) )** 2 -! -! --- not at boundaries - if ( J1 /= JST(1) .and. J1 /= JEN(JM) ) then - hj0 = float(zavg(i1,j1-1)) - hjp1 = float(zavg(i1,j1+1)) - if(hj0 < -990.) hj0 = 0.0 - if(hjp1 < -990.) hjp1 = 0.0 -!....... yfp = yfp + 0.5 * ( hjp1 - hj0 ) / DELTAY - yfp = 0.5 * ( hjp1 - hj0 ) / DELTAY - yfp2 = yfp2 + 0.25 * ( ( hjp1 - hj0 )/DELTAY )**2 - -!.............. elseif ( J1 == JST(J) .or. J1 == JEN(JM) ) then -! === the NH pole: NB J1 goes from High at NP to Low toward SP -! - elseif ( J1 == JST(1) ) then - ijax = i1 + imn/2 - if (ijax <= 0 ) ijax = ijax + imn - if (ijax > imn) ijax = ijax - imn -!..... at N pole we stay at the same latitude j1 but cross to opp side - hijax = float(zavg(ijax,j1)) - hi1j1 = float(zavg(i1,j1)) - if(hijax < -990.) hijax = 0.0 - if(hi1j1 < -990.) hi1j1 = 0.0 -!....... yfp = yfp + 0.5 * ( ( 0.5 * ( hijax + hi1j1) ) - hi1j1 )/DELTAY - yfp = 0.5 * ( ( 0.5 * ( hijax - hi1j1 ) ) )/DELTAY - yfp2 = yfp2 + 0.25 * ( ( 0.5 * ( hijax - hi1j1) ) - 1 / DELTAY )**2 -! -! === the SH pole: NB J1 goes from High at NP to Low toward SP -! - elseif ( J1 == JEN(JM) ) then - ijax = i1 + imn/2 - if (ijax <= 0 ) ijax = ijax + imn - if (ijax > imn) ijax = ijax - imn - hijax = float(zavg(ijax,j1)) - hi1j1 = float(zavg(i1,j1)) - if(hijax < -990.) hijax = 0.0 - if(hi1j1 < -990.) hi1j1 = 0.0 - if ( i1 < 5 ) - & print *,' S.Pole i1,j1 :',i1,j1,hijax,hi1j1 -!..... yfp = yfp + 0.5 * (0.5 * ( hijax - hi1j1) )/DELTAY - yfp = 0.5 * (0.5 * ( hijax - hi1j1) )/DELTAY - yfp2 = yfp2 + 0.25 * ( (0.5 * (hijax - hi1j1) ) - 1 / DELTAY )**2 - endif -! -! === The above does an average across the pole for the bndry in j. -!23456789012345678901234567890123456789012345678901234567890123456789012...... -! - xfpyfp = xfpyfp + xfp * yfp - XL1 = XL1 + HEIGHT * FLOAT(ZSLM(I1,J1)) - XS1 = XS1 + HEIGHT * FLOAT(1-ZSLM(I1,J1)) -! -! === average the HX2, HY2 and HXY -! === This will be done over all land -! - ENDDO - ENDDO -! -! === HTENSR -! - IF(XNSUM > 1.) THEN - SLM(I,J) = FLOAT(NINT(XLAND/XNSUM)) - IF(SLM(I,J) /= 0.) THEN - ORO(I,J) = XL1 / XLAND - HX2(I,J) = xfp2 / XLAND - HY2(I,J) = yfp2 / XLAND - HXY(I,J) = xfpyfp / XLAND - ELSE - ORO(I,J) = XS1 / XWATR - ENDIF -!=== degub testing - if (debug) then - print *," I,J,i1,j1,HEIGHT:", I,J,i1,j1,HEIGHT, - 1 XLAND,SLM(i,j) - print *," xfpyfp,xfp2,yfp2:",xfpyfp,xfp2,yfp2 - print *," HX2,HY2,HXY:",HX2(I,J),HY2(I,J),HXY(I,J) - ENDIF -! -! === make the principal axes, theta, and the degree of anisotropy, -! === and sigma2, the slope parameter -! - HK(I,J) = 0.5 * ( HX2(I,J) + HY2(I,J) ) - HL(I,J) = 0.5 * ( HX2(I,J) - HY2(I,J) ) - HLPRIM(I,J) = SQRT(HL(I,J)*HL(I,J) + HXY(I,J)*HXY(I,J)) - IF( HL(I,J) /= 0. .AND. SLM(I,J) /= 0. ) THEN - THETA(I,J) = 0.5 * ATAN2D(HXY(I,J),HL(I,J)) -! === for testing print out in degrees -! THETA(I,J) = 0.5 * ATAN2(HXY(I,J),HL(I,J)) - ENDIF - SIGMA2(I,J) = ( HK(I,J) + HLPRIM(I,J) ) - if (SIGMA2(I,J) >= 0.) then - SIGMA(I,J) = SQRT(SIGMA2(I,J) ) - if (sigma2(i,j) /= 0. .and. HK(I,J) >= HLPRIM(I,J) ) - 1 GAMMA(I,J) = sqrt( (HK(I,J) - HLPRIM(I,J)) / SIGMA2(I,J) ) - else - SIGMA(I,J) = 0. - endif - ENDIF - if (debug) then - print *," I,J,THETA,SIGMA,GAMMA,",I,J,THETA(I,J), - 1 SIGMA(I,J),GAMMA(I,J) - print *," HK,HL,HLPRIM:",HK(I,J),HL(I,J),HLPRIM(I,J) - endif - ENDDO - ENDDO - - WRITE(6,*) "! MAKE Principal Coord DONE" -! - RETURN - END - - SUBROUTINE MAKEOA(ZAVG,VAR,GLAT,OA4,OL,IOA4,ELVMAX, - 1 ORO,oro1,XNSUM,XNSUM1,XNSUM2,XNSUM3,XNSUM4, - 2 IST,IEN,JST,JEN,IM,JM,IMN,JMN,XLAT,numi) -! - implicit none -! - integer IM,JM,IMN,JMN - &, IST(IM,jm),IEN(IM,jm),JST(JM),JEN(JM),numi(jm) - &, ioa4(im,jm,4), ZAVG(IMN,JMN) - real GLAT(JMN),XLAT(JM) - &, ORO(IM,JM),ORO1(IM,JM),ELVMAX(IM,JM),ZMAX(IM,JM) - &, OA4(IM,JM,4) - real XNSUM(IM,JM),XNSUM1(IM,JM),XNSUM2(IM,JM) - &, XNSUM3(IM,JM),XNSUM4(IM,JM) - real VAR(IM,JM),OL(IM,JM,4) - LOGICAL FLAG -! - integer i, j, im1, jm1, i1, ii1, j1, kwd, ii, inci, isttt, jsttt - &, ns0, ns1, ns2, ns3, ns4, ns5, ns6, ieddd, jeddd, incj - real delx, delxn, faclon, xxlat, height, xnpu, xnpd, hc, t - &, tem -! -!---- GLOBAL XLAT AND XLON ( DEGREE ) -! -! --- IM1 = IM - 1 removed (not used in this sub) - JM1 = JM - 1 - DELXN = 360./IMN ! MOUNTAIN DATA RESOLUTION -! - DO J=1,JMN - GLAT(J) = -90. + (J-1) * DELXN + DELXN * 0.5 - ENDDO - - write(0,*)'MAKEOA: IM=',IM,' JM=',JM,' IMN=',IMN,' JMN=',JMN -! -!---- FIND THE AVERAGE OF THE MODES IN A GRID BOX -! - DO j=1,jm - DO I=1,numi(j) - DELX = 360./numi(j) ! GAUSSIAN GRID RESOLUTION - FACLON = DELX / DELXN -! --- minus sign here in IST and IEN as in MAKEMT! - IST(I,j) = FACLON * FLOAT(I-1) - FACLON * 0.5 - IST(I,j) = IST(I,j) + 1 - IEN(I,j) = FACLON * FLOAT(I) - FACLON * 0.5 -! IST(I,j) = FACLON * FLOAT(I-1) + 1.0001 -! IEN(I,j) = FACLON * FLOAT(I) + 0.0001 - IF (IST(I,j) <= 0) IST(I,j) = IST(I,j) + IMN - IF (IEN(I,j) < IST(I,j)) IEN(I,j) = IEN(I,j) + IMN -!x PRINT*, ' I j IST IEN ',I,j,IST(I,j),IEN(I,j) - if ( I .lt. 3 .and. J .lt. 3 ) - 1 PRINT*,' MAKEOA: I j IST IEN ',I,j,IST(I,j),IEN(I,j) - if ( I .lt. 3 .and. J .ge. JM-1 ) - 1 PRINT*,' MAKEOA: I j IST IEN ',I,j,IST(I,j),IEN(I,j) - ENDDO - ENDDO - write(0,*)'MAKEOA: DELXN,DELX,FACLON',DELXN,DELX,FACLON - write(0,*)' ***** ready to start JST JEN section ' -! - DO J=1,JM-1 - FLAG = .TRUE. - DO J1=1,JMN -! --- XXLAT added as in MAKEMT and in next line as well - XXLAT = (XLAT(J)+XLAT(J+1))/2. - IF(FLAG .AND. GLAT(J1) > XXLAT) THEN - JST(J) = J1 -! --- JEN(J+1) = J1 - 1 - FLAG = .FALSE. - if ( J == 1 ) PRINT*,' MAKEOA: XX j JST JEN ',j,JST(j),JEN(j) - ENDIF - ENDDO - if ( J < 3 ) PRINT*,' MAKEOA: j JST JEN ',j,JST(j),JEN(j) - if ( J >= JM-2 ) PRINT*,' MAKEOA: j JST JEN ',j,JST(j),JEN(j) -! FLAG=.TRUE. -! DO J1=JST(J),JMN -! IF(FLAG.AND.GLAT(J1).GT.XLAT(J)) THEN -! JEN(J) = J1 - 1 -! FLAG = .FALSE. -! ENDIF -! ENDDO - ENDDO - JST(JM) = MAX(JST(JM-1) - (JEN(JM-1)-JST(JM-1)),1) - JEN(1) = MIN(JEN(2) + (JEN(2)-JST(2)),JMN) - write(0,*)' ***** JST(1) JEN(1) ',JST(1),JEN(1) - write(0,*)' ***** JST(JM) JEN(JM) ',JST(JM),JEN(JM) -! - DO J=1,JM - DO I=1,numi(j) - XNSUM(I,J) = 0.0 - ELVMAX(I,J) = ORO(I,J) - ZMAX(I,J) = 0.0 - ENDDO - ENDDO -! -! --- # of peaks > ZAVG value and ZMAX(IM,JM) -- ORO is already avg. -! --- to JM or to JM1 - DO J=1,JM -! write(0,*)' J=',j,' in xnsum loop' - DO I=1,numi(j) - DO II1 = 1, IEN(I,J) - IST(I,J) + 1 - I1 = IST(I,J) + II1 - 1 -! --- next line as in makemt (I1 not II1) (*j*) 20070701 - IF(I1 <= 0.) I1 = I1 + IMN - IF (I1 > IMN) I1 = I1 - IMN - DO J1=JST(J),JEN(J) - HEIGHT = FLOAT(ZAVG(I1,J1)) - IF(HEIGHT < -990.) HEIGHT = 0.0 - IF ( HEIGHT > ORO(I,J) ) then - if ( HEIGHT > ZMAX(I,J) ) ZMAX(I,J) = HEIGHT - XNSUM(I,J) = XNSUM(I,J) + 1 - ENDIF - ENDDO - ENDDO - if ( I < 5 .and. J >= JM-5 ) then - write(0,*) ' I,J,ORO(I,J),XNSUM(I,J),ZMAX(I,J):', - 1 I,J,ORO(I,J),XNSUM(I,J),ZMAX(I,J) - endif - ENDDO - ENDDO -! -!.... make ELVMAX ORO from MAKEMT sub -! -! --- this will make work1 array take on oro's values on return - DO J=1,JM - DO I=1,numi(j) - - ORO1(I,J) = ORO(I,J) - ELVMAX(I,J) = ZMAX(I,J) - ENDDO - ENDDO -!........ -! The MAX elev peak (no averaging) -!........ -! DO J=1,JM -! DO I=1,numi(j) -! DO II1 = 1, IEN(I,J) - IST(I,J) + 1 -! I1 = IST(I,J) + II1 - 1 -! IF(I1.LE.0.) I1 = I1 + IMN -! IF(I1.GT.IMN) I1 = I1 - IMN -! DO J1=JST(J),JEN(J) -! if ( ELVMAX(I,J) .lt. ZMAX(I1,J1)) -! 1 ELVMAX(I,J) = ZMAX(I1,J1) -! ENDDO -! ENDDO -! ENDDO -! ENDDO -C -C---- COUNT NUMBER OF MODE. HIGHER THAN THE HC, CRITICAL HEIGHT -C IN A GRID BOX - DO J=1,JM - DO I=1,numi(j) - XNSUM1(I,J) = 0.0 - XNSUM2(I,J) = 0.0 - XNSUM3(I,J) = 0.0 - XNSUM4(I,J) = 0.0 - ENDDO - ENDDO -! --- loop - DO J=1,JM1 - DO I=1,numi(j) - HC = 1116.2 - 0.878 * VAR(I,J) -! print *,' I,J,HC,VAR:',I,J,HC,VAR(I,J) - DO II1 = 1, IEN(I,J) - IST(I,J) + 1 - I1 = IST(I,J) + II1 - 1 -! IF (I1.LE.0.) print *,' I1 less than 0',I1,II1,IST(I,J),IEN(I,J) -! if ( J .lt. 3 .or. J .gt. JM-2 ) then -! IF(I1 .GT. IMN)print *,' I1 > IMN',J,I1,II1,IMN,IST(I,J),IEN(I,J) -! endif - IF(I1.GT.IMN) I1 = I1 - IMN - DO J1=JST(J),JEN(J) - IF(FLOAT(ZAVG(I1,J1)) .GT. HC) - 1 XNSUM1(I,J) = XNSUM1(I,J) + 1 - XNSUM2(I,J) = XNSUM2(I,J) + 1 - ENDDO - ENDDO -! - INCI = NINT((IEN(I,j)-IST(I,j)) * 0.5) - ISTTT = MIN(MAX(IST(I,j)-INCI,1),IMN) - IEDDD = MIN(MAX(IEN(I,j)-INCI,1),IMN) -! - INCJ = NINT((JEN(J)-JST(J)) * 0.5) - JSTTT = MIN(MAX(JST(J)-INCJ,1),JMN) - JEDDD = MIN(MAX(JEN(J)-INCJ,1),JMN) -! if ( J .lt. 3 .or. J .gt. JM-3 ) then -! if(I .lt. 3 .or. I .gt. IM-3) then -! print *,' INCI,ISTTT,IEDDD,INCJ,JSTTT,JEDDD:', -! 1 I,J,INCI,ISTTT,IEDDD,INCJ,JSTTT,JEDDD -! endif -! endif -! - DO I1=ISTTT,IEDDD - DO J1=JSTTT,JEDDD - IF(FLOAT(ZAVG(I1,J1)) .GT. HC) - 1 XNSUM3(I,J) = XNSUM3(I,J) + 1 - XNSUM4(I,J) = XNSUM4(I,J) + 1 - ENDDO - ENDDO -!x print*,' i j hc var ',i,j,hc,var(i,j) -!x print*,'xnsum12 ',xnsum1(i,j),xnsum2(i,j) -!x print*,'xnsum34 ',xnsum3(i,j),xnsum4(i,j) - ENDDO - ENDDO - write(0,*)' IN MAKEOA After XNSUM4' -! -!---- CALCULATE THE 3D OROGRAPHIC ASYMMETRY FOR 4 WIND DIRECTIONS -!---- AND THE 3D OROGRAPHIC SUBGRID OROGRAPHY FRACTION -! (KWD = 1 2 3 4) -! ( WD = W S SW NW) -! -! - DO KWD = 1, 4 - DO J=1,JM - DO I=1,numi(j) - OA4(I,J,KWD) = 0.0 - ENDDO - ENDDO - ENDDO -! - DO J=1,JM-2 - DO I=1,numi(j) - II = I + 1 - IF (II .GT. numi(j)) II = II - numi(j) - XNPU = XNSUM(I,J) + XNSUM(I,J+1) - XNPD = XNSUM(II,J) + XNSUM(II,J+1) - IF (XNPD .NE. XNPU) OA4(II,J+1,1) = 1. - XNPD / MAX(XNPU , 1.) - tem = XNSUM4(I,J+1) + XNSUM4(II,J+1) - if (tem > 0.0) then - OL(II,J+1,1) = (XNSUM3(I,J+1) + XNSUM3(II,J+1)) / tem - endif - if ( I .lt. 20 .and. J .ge. JM-19 ) then - write(0,*)' MAKEOA: I J IST IEN ',I,j,IST(I,J),IEN(I,J) -! PRINT*,' HC VAR ',HC,VAR(i,j) -! PRINT*,' MAKEOA: XNSUM(I,J)=',XNSUM(I,J),XNPU, XNPD -! PRINT*,' MAKEOA: XNSUM3(I,J+1),XNSUM3(II,J+1)', -! 1 XNSUM3(I,J+1),XNSUM3(II,J+1) -! PRINT*,' MAKEOA: II, OA4(II,J+1,1), OL(II,J+1,1):', -! 1 II, OA4(II,J+1,1), OL(II,J+1,1) - endif - ENDDO - ENDDO - write(0,*)' MAKEOA: after OL loop1' - DO J=1,JM-2 - DO I=1,numi(j) - II = I + 1 - IF (II .GT. numi(j)) II = II - numi(j) - XNPU = XNSUM(I,J+1) + XNSUM(II,J+1) - XNPD = XNSUM(I,J) + XNSUM(II,J) - IF (XNPD .NE. XNPU) OA4(II,J+1,2) = 1. - XNPD / MAX(XNPU , 1.) - OL(II,J+1,2) = (XNSUM3(II,J)+XNSUM3(II,J+1))/ - 1 (XNSUM4(II,J)+XNSUM4(II,J+1)) - ENDDO - ENDDO - write(0,*)' MAKEOA: after OL loop2' - DO J=1,JM-2 - DO I=1,numi(j) - II = I + 1 - IF (II .GT. numi(j)) II = II - numi(j) - XNPU = XNSUM(I,J+1) + ( XNSUM(I,J) + XNSUM(II,J+1) )*0.5 - XNPD = XNSUM(II,J) + ( XNSUM(I,J) + XNSUM(II,J+1) )*0.5 - IF (XNPD .NE. XNPU) OA4(II,J+1,3) = 1. - XNPD / MAX(XNPU , 1.) - OL(II,J+1,3) = (XNSUM1(II,J)+XNSUM1(I,J+1))/ - 1 (XNSUM2(II,J)+XNSUM2(I,J+1)) - ENDDO - ENDDO - write(0,*)' MAKEOA: after OL loop3' - DO J=1,JM-2 - DO I=1,numi(j) - II = I + 1 - IF (II .GT. numi(j)) II = II - numi(j) - XNPU = XNSUM(I,J) + ( XNSUM(II,J) + XNSUM(I,J+1) )*0.5 - XNPD = XNSUM(II,J+1) + ( XNSUM(II,J) + XNSUM(I,J+1) )*0.5 - IF (XNPD .NE. XNPU) OA4(II,J+1,4) = 1. - XNPD / MAX(XNPU , 1.) - OL(II,J+1,4) = (XNSUM1(I,J)+XNSUM1(II,J+1))/ - 1 (XNSUM2(I,J)+XNSUM2(II,J+1)) - ENDDO - ENDDO - write(0,*)' MAKEOA: after OL loop4' -! - DO KWD = 1, 4 - DO I=1,numi(j) - OL(I,1,KWD) = OL(I,2,KWD) - OL(I,JM,KWD) = OL(I,JM-1,KWD) - ENDDO - ENDDO -! - write(0,*)' IN MAKEOA Bef OA4' - DO KWD=1,4 - DO J=1,JM - DO I=1,numi(j) - T = OA4(I,J,KWD) - OA4(I,J,KWD) = SIGN( MIN( ABS(T), 1. ), T ) - ENDDO - ENDDO - ENDDO -! - NS0 = 0 - NS1 = 0 - NS2 = 0 - NS3 = 0 - NS4 = 0 - NS5 = 0 - NS6 = 0 - DO KWD=1,4 - DO J=1,JM - DO I=1,numi(j) - T = ABS( OA4(I,J,KWD) ) - IF(T .EQ. 0.) THEN - IOA4(I,J,KWD) = 0 - NS0 = NS0 + 1 - ELSE IF(T .GT. 0. .AND. T .LE. 1.) THEN - IOA4(I,J,KWD) = 1 - NS1 = NS1 + 1 - ELSE IF(T .GT. 1. .AND. T .LE. 10.) THEN - IOA4(I,J,KWD) = 2 - NS2 = NS2 + 1 - ELSE IF(T .GT. 10. .AND. T .LE. 100.) THEN - IOA4(I,J,KWD) = 3 - NS3 = NS3 + 1 - ELSE IF(T .GT. 100. .AND. T .LE. 1000.) THEN - IOA4(I,J,KWD) = 4 - NS4 = NS4 + 1 - ELSE IF(T .GT. 1000. .AND. T .LE. 10000.) THEN - IOA4(I,J,KWD) = 5 - NS5 = NS5 + 1 - ELSE IF(T .GT. 10000.) THEN - IOA4(I,J,KWD) = 6 - NS6 = NS6 + 1 - ENDIF - ENDDO - ENDDO - ENDDO -! - WRITE(6,*) "! MAKEOA EXIT" -! - RETURN - END - SUBROUTINE REVERS(IM, JM, numi, F, WRK) -! - implicit none -! - integer im, jm - REAL F(IM,JM), WRK(IM,JM) - integer numi(jm), i, j, ir, jr, imb2 - real tem -! -! reverse east-west and north-south -!...... fix this routine up to take numi (*j*) -!..... at least have 5 variables ....and keep REVLAT .FALSE. - - imb2 = im / 2 - do j=1,jm - do i=1,im - WRK(i,j) = F(i,j) - enddo - enddo - do j=1,jm - jr = jm - j + 1 - do i=1,im - ir = i + imb2 - if (ir > im) ir = ir - im - f(ir,jr) = WRK(i,j) - enddo - enddo -! - tem = 0.0 - do i=1,im - tem= tem + F(I,1) - enddo - tem = tem / im - do i=1,im - F(I,1) = tem - enddo -! - RETURN - END - - subroutine rg2gg(im,jm,numi,a) -! - implicit none -! - integer,intent(in):: im,jm,numi(jm) - real,intent(inout):: a(im,jm) - integer j,ir,ig - real r,t(im) - do j=1,jm - r = real(numi(j))/real(im) - do ig=1,im - ir = mod(nint((ig-1)*r),numi(j)) + 1 - t(ig) = a(ir,j) - enddo - do ig=1,im - a(ig,j) = t(ig) - enddo - enddo - end subroutine - subroutine gg2rg(im,jm,numi,a) -! - implicit none -! - integer,intent(in):: im,jm,numi(jm) - real,intent(inout):: a(im,jm) - integer j,ir,ig - real r,t(im) - do j=1,jm - r = real(numi(j))/real(im) - do ir=1,numi(j) - ig = nint((ir-1)/r) + 1 - t(ir) = a(ig,j) - enddo - do ir=1,numi(j) - a(ir,j) = t(ir) - enddo - enddo - end subroutine - SUBROUTINE minmxj(IM,JM,A,title) - -! this routine is using real*4 on the sp - - implicit none - - integer im, jm - real A(IM,JM),rmin,rmax - integer i,j - character*8 title - - rmin = 1.e+10 - rmax = -rmin -!sela.................................................... -!sela if(rmin.eq.1.e+10)return -!sela.................................................... - DO j=1,JM - DO i=1,IM - if (A(i,j) >= rmax) rmax = A(i,j) - if (A(i,j) <= rmin) rmin = A(i,j) - ENDDO - ENDDO - write(0,150)rmin,rmax,title -150 format('rmin=',e13.4,2x,'rmax=',e13.4,2x,a8,' ') -! - RETURN - END - SUBROUTINE mnmxja(IM,JM,A,imax,jmax,title) - -! this routine is using real*4 on the sp - - implicit none - - integer im, jm - real A(IM,JM),rmin,rmax - integer i,j,imax,jmax - character*8 title - - rmin = 1.e+10 - rmax = -rmin -!sela.................................................... -!sela if(rmin.eq.1.e+10)return -!sela.................................................... - DO j=1,JM - DO i=1,IM - if (A(i,j) >= rmax) then - rmax = A(i,j) - imax = i - jmax = j - endif - if (A(i,j) <= rmin) rmin = A(i,j) - ENDDO - ENDDO - write(6,150)rmin,rmax,title -150 format('rmin=',e13.4,2x,'rmax=',e13.4,2x,a8,' ') -! - RETURN - END - -!----------------------------------------------------------------------- - SUBROUTINE SPFFT1(IMAX,INCW,INCG,KMAX,W,G,IDIR) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! -! SUBPROGRAM: SPFFT1 PERFORM MULTIPLE FAST FOURIER TRANSFORMS -! PRGMMR: IREDELL ORG: W/NMC23 DATE: 96-02-20 -! -! ABSTRACT: THIS SUBPROGRAM PERFORMS MULTIPLE FAST FOURIER TRANSFORMS -! BETWEEN COMPLEX AMPLITUDES IN FOURIER SPACE AND REAL VALUES -! IN CYCLIC PHYSICAL SPACE. -! SUBPROGRAM SPFFT1 INITIALIZES TRIGONOMETRIC DATA EACH CALL. -! USE SUBPROGRAM SPFFT TO SAVE TIME AND INITIALIZE ONCE. -! THIS VERSION INVOKES THE IBM ESSL FFT. -! -! PROGRAM HISTORY LOG: -! 1998-12-18 IREDELL -! -! USAGE: CALL SPFFT1(IMAX,INCW,INCG,KMAX,W,G,IDIR) -! -! INPUT ARGUMENT LIST: -! IMAX - INTEGER NUMBER OF VALUES IN THE CYCLIC PHYSICAL SPACE -! (SEE LIMITATIONS ON IMAX IN REMARKS BELOW.) -! INCW - INTEGER FIRST DIMENSION OF THE COMPLEX AMPLITUDE ARRAY -! (INCW >= IMAX/2+1) -! INCG - INTEGER FIRST DIMENSION OF THE REAL VALUE ARRAY -! (INCG >= IMAX) -! KMAX - INTEGER NUMBER OF TRANSFORMS TO PERFORM -! W - COMPLEX(INCW,KMAX) COMPLEX AMPLITUDES IF IDIR>0 -! G - REAL(INCG,KMAX) REAL VALUES IF IDIR<0 -! IDIR - INTEGER DIRECTION FLAG -! IDIR>0 TO TRANSFORM FROM FOURIER TO PHYSICAL SPACE -! IDIR<0 TO TRANSFORM FROM PHYSICAL TO FOURIER SPACE -! -! OUTPUT ARGUMENT LIST: -! W - COMPLEX(INCW,KMAX) COMPLEX AMPLITUDES IF IDIR<0 -! G - REAL(INCG,KMAX) REAL VALUES IF IDIR>0 -! -! SUBPROGRAMS CALLED: -! SCRFT IBM ESSL COMPLEX TO REAL FOURIER TRANSFORM -! DCRFT IBM ESSL COMPLEX TO REAL FOURIER TRANSFORM -! SRCFT IBM ESSL REAL TO COMPLEX FOURIER TRANSFORM -! DRCFT IBM ESSL REAL TO COMPLEX FOURIER TRANSFORM -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN 90 -! -! REMARKS: -! THE RESTRICTIONS ON IMAX ARE THAT IT MUST BE A MULTIPLE -! OF 1 TO 25 FACTORS OF TWO, UP TO 2 FACTORS OF THREE, -! AND UP TO 1 FACTOR OF FIVE, SEVEN AND ELEVEN. -! -! THIS SUBPROGRAM IS THREAD-SAFE. -! -!$$$ - IMPLICIT NONE - INTEGER,INTENT(IN):: IMAX,INCW,INCG,KMAX,IDIR - COMPLEX,INTENT(INOUT):: W(INCW,KMAX) - REAL,INTENT(INOUT):: G(INCG,KMAX) - REAL:: AUX1(25000+INT(0.82*IMAX)) - REAL:: AUX2(20000+INT(0.57*IMAX)) - INTEGER:: NAUX1,NAUX2 -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NAUX1=25000+INT(0.82*IMAX) - NAUX2=20000+INT(0.57*IMAX) -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! FOURIER TO PHYSICAL TRANSFORM. - SELECT CASE(IDIR) - CASE(1:) - SELECT CASE(DIGITS(1.)) - CASE(DIGITS(1._4)) - CALL SCRFT(1,W,INCW,G,INCG,IMAX,KMAX,-1,1., - & AUX1,NAUX1,AUX2,NAUX2,0.,0) - CALL SCRFT(0,W,INCW,G,INCG,IMAX,KMAX,-1,1., - & AUX1,NAUX1,AUX2,NAUX2,0.,0) - CASE(DIGITS(1._8)) - CALL DCRFT(1,W,INCW,G,INCG,IMAX,KMAX,-1,1., - & AUX1,NAUX1,AUX2,NAUX2,0.,0) - CALL DCRFT(0,W,INCW,G,INCG,IMAX,KMAX,-1,1., - & AUX1,NAUX1,AUX2,NAUX2,0.,0) - END SELECT -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! PHYSICAL TO FOURIER TRANSFORM. - CASE(:-1) - SELECT CASE(DIGITS(1.)) - CASE(DIGITS(1._4)) - CALL SRCFT(1,G,INCG,W,INCW,IMAX,KMAX,+1,1./IMAX, - & AUX1,NAUX1,AUX2,NAUX2,0.,0) - CALL SRCFT(0,G,INCG,W,INCW,IMAX,KMAX,+1,1./IMAX, - & AUX1,NAUX1,AUX2,NAUX2,0.,0) - CASE(DIGITS(1._8)) - CALL DRCFT(1,G,INCG,W,INCW,IMAX,KMAX,+1,1./IMAX, - & AUX1,NAUX1,AUX2,NAUX2,0.,0) - CALL DRCFT(0,G,INCG,W,INCW,IMAX,KMAX,+1,1./IMAX, - & AUX1,NAUX1,AUX2,NAUX2,0.,0) - END SELECT - END SELECT - END SUBROUTINE - subroutine read_g(glob,ITOPO) -! -! --- if ITOPO = 1 then read gtopo30_gg.fine 43200X21600 30" file -! --- if ITOPO = 2 then read topo 30" .DEM tile files -! --- in either case, glob will be n Interger*2 array. -! --- This routine write out a grads ctl file for displaying the -! --- tiles in the output working dir. The glob array can not be -! --- acted on with grads, but the tiles can be if lat/lon are reduced slightly -!! - implicit none -!! - integer*2 glob(360*120,180*120) -!! - integer, parameter :: ix=40*120, jx=50*120 - &, ia=60*120, ja=30*120 -!! - integer*2 idat(ix,jx),itopo -!! -!!mr integer*2 m9999 -!!mr data m9999 / -9999 / -!! -!!mr integer i_count(360*120) -!!mr integer j_max_y(360*120) -!! - integer i,j,inttyp -!! - real(kind=8) dloin,dlain,rlon,rlat -!! - read(235) glob - rewind(235) -!! -!! - print*,' ' - call maxmin (glob,360*120*180*120,'global0') -!! -!! - dloin = 1.d0/120.d0 - dlain = 1.d0/120.d0 -!! - rlon = -179.995833333333333333333333d0 - rlat = 89.995833333333333333333333d0 -!! - inttyp =-1 ! average rectangular subset -!!mr inttyp = 1 ! take closest grid point value -!!mr inttyp = 0 ! interpolate from four closest grid point values -!! -! call la2ga_gtopo30(glob,360*120,180*120, -! & dloin,dlain,rlon,rlat,inttyp, -! & .true.,glob, -! & 0,lonf,latg) -!! - return - end - subroutine maxmin(ia,len,tile) -!!mr - implicit none -!!mr - integer len - integer*2 ia(len) - character*7 tile - integer iaamax, iaamin, j, m, ja, kount - integer(8) sum2,std,mean,isum - integer i_count_notset,kount_9 - -! --- missing is -9999 -! - isum = 0 - sum2 = 0 - kount = 0 - kount_9 = 0 - iaamax = -9999999 -!!mr iaamin = 1 - iaamin = 9999999 - i_count_notset = 0 - - do m=1,len - ja=ia(m) -!!mr if ( ja .lt. 0 ) print *,' ja < 0:',ja -!!mr if ( ja .eq. -9999 ) goto 10 - if ( ja .eq. -9999 ) then - kount_9 = kount_9 + 1 - cycle - endif - if ( ja == -12345 ) i_count_notset = i_count_notset + 1 -!!mr if ( ja .eq. 0 ) goto 11 - iaamax = max0( iaamax, ja ) - iaamin = min0( iaamin, ja ) -! iaamax = max0( iaamax, ia(m,j) ) -! iaamin = min0( iaamin, ia(m,j) ) -! 11 continue - kount = kount + 1 - isum = isum + ja -!!mr sum2 = sum2 + ifix( float(ja) * float(ja) ) - sum2 = sum2 + ja*ja - enddo -! - mean = isum/kount - std = ifix(sqrt(float((sum2/(kount))-mean**2))) -! - print*,tile,' max=',iaamax,' min=',iaamin,' sum=',isum, - & ' i_count_notset=',i_count_notset - print*,tile,' mean=',mean,' std.dev=',std, - & ' ko9s=',kount,kount_9,kount+kount_9 - return - end - SUBROUTINE minmaxj(IM,JM,A,title) - -! this routine is using real*4 on the sp - - implicit none - - integer im, jm - real(kind=4) A(IM,JM),rmin,rmax,undef - integer i,j,imax,jmax,imin,jmin,iundef - character*8 title,chara - data chara/' '/ -! - chara = title - rmin = 1.e+10 - rmax = -rmin - imax = 0 - imin = 0 - jmax = 0 - jmin = 0 - iundef = 0 - undef = -9999. -!sela.................................................... -!sela if(rmin.eq.1.e+10)return -!sela.................................................... - DO j=1,JM - DO i=1,IM - if (A(i,j) >= rmax)then - rmax = A(i,j) - imax = i - jmax = j - endif - if (A(i,j) <= rmin)then - if ( A(i,j) .eq. undef ) then - iundef = iundef + 1 - else - rmin = A(i,j) - imin = i - jmin = j - endif - endif - ENDDO - ENDDO - write(6,150)chara,rmin,imin,jmin,rmax,imax,jmax,iundef -150 format(1x,a8,2x,'rmin=',e13.4,2i6,2x,'rmax=',e13.4,3i6) -! - RETURN - END - subroutine nanc(a,l,c) -! compiler opt TRAPS= -qinitauto=FF911299 -qflttrap=ov:zero:inv:en -qsig trap -! or call subroutine below -! subroutine to report NaNS and NaNQ within an address -! range for real*8 words. -! as written the routine prints a single line for each call -! and prints a message and returns to the caller on detection of the FIRST -! NaN in the range. The message is passed in the third -! argument. If no NaN values are found it returns silently. -! A real*4 version can be created by making A real*4 - -! arguments (all are input only) -! -! A real*8 variable or array -! L number of words to scan (length of array) -! C distinctive message set in caller to indicate where -! the routine was called. -! - integer inan1,inan2,inan3,inan4,inaq1,inaq2,inaq3,inaq4 - real word - integer itest - equivalence (itest,word) -! -! signaling NaN - data inan1/x'7F800001'/ - data inan2/x'7FBFFFFF'/ - data inan3/x'FF800001'/ - data inan4/x'FFBFFFFF'/ -! -! quiet NaN -! - data inaq1/x'7FC00000'/ - data inaq2/x'7FFFFFFF'/ - data inaq3/x'FFC00000'/ - data inaq4/x'FFFFFFFF'/ -! - real(kind=8)a(l),rtc,t1,t2 - character*24 cn - character*(*) c - t1=rtc() -!gwv print *, ' nanc call ',c - do k=1,l - word = a(k) - if( (itest .GE. inan1 .AND. itest .LE. inan2) .OR. - * (itest .GE. inan3 .AND. itest .LE. inan4) ) then - print *,' NaNs detected at word',k,' ',c - return - endif - if( (itest .GE. inaq1 .AND. itest .LE. inaq2) .OR. - * (itest .GE. inaq3 .AND. itest .LE. inaq4) ) then - print *,' NaNq detected at word',k,' ',c - return - endif - - 101 format(e20.10) - end do - t2=rtc() -!gwv print 102,l,t2-t1,c - 102 format(' time to check ',i9,' words is ',f10.4,' ',a24) - return - end -C----------------------------------------------------------------------- - - SUBROUTINE SPTEZJ(JCAP,NC,KM,IDRT,LONB,LATB,JC,WAVE,GRID - &, latch,idir) -!$$$ SUBPROGRAM DOCUMENTATION BLOCK -! -! SUBPROGRAM: SPTEZJ TRANSFORM A SINGLE SPECTRAL FIELD TO GRID -! PRGMMR: MOORTHI ORG: W/NMC23 DATE: 13-02-20 -! -! ABSTRACT: TRANSFORMS A SINGLE SPECTRAL FIELDS TO GRID -! -! PROGRAM HISTORY LOG: -! 13-02-20 S. MOORTHI -! -! USAGE: CALL SPTEZJ(JCAP,NC,KM,IDRT,LONB,LATB,JC,WAVE,GRID,IDIR) -! INPUT ARGUMENT LIST: -! JCAP INTEGER SPECTRAL TRUNCATION -! NC INTEGER FIRST DIMENSION (NC>=(JCAP+1)*(JCAP+2)) -! KM INTEGER NUMBER OF LEVELS -! IDRT INTEGER DATA REPRESENTATION TYPE -! (IDRT=4 FOR GAUSSIAN GRID, -! IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES, -! IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES) -! LONB INTEGER NUMBER OF LONGITUDES -! LATB INTEGER NUMBER OF LATITUDES -! JC INTEGER NUMBER OF CPUS -! WAVE REAL (NC) WAVE FIELD if IDIR>0 -! OUTPUT ARGUMENT LIST: -! GRID REAL (cwLONB,LATB,I,KM) GRID FIELD (E->W, N->S) IF IDIR<0 -! -! IDIR - INTEGER TRANSFORM FLAG -! (IDIR>0 FOR WAVE TO GRID, IDIR<0 FOR GRID TO WAVE) -! LATCH - Latitude chunk used in the transform loop -! SUBPROGRAMS CALLED: -! SPTRAN PERFORM A SCALAR SPHERICAL TRANSFORM -! -! ATTRIBUTES: -! LANGUAGE: FORTRAN -! -!$$$ - implicit none -! - integer jcap, nc, km, idrt, lonb, latb, jc, latch, idir - REAL wave(NC,KM) - REAL GRID(LONB,LATB,KM) -! - real, allocatable :: gridl(:,:) -! - integer lonb2m, i, j, in, is, latbb2, lonb2, j1, j2, jl, ijl, ijn - &, ij, js, jn, ja, jb -! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -! SPECTRAL TRANSFORMS -! - LATBB2 = (LATB+1)/2 - LONB2 = LONB + LONB - ijn = LONB2 * LATCH - allocate (gridl(ijn,km)) - IN = 1 - IS = 1 + LONB -! -! write(0,*)' lonb=',lonb,' lonb2=',lonb2,' latbb2=',latbb2 -! &, ' latch=',latch,' ijn=',ijn,' idir=',idir,' km=',km -! - if (idir < 0) wave = 0.0 -! - DO J1=1,LATBB2,LATCH - J2 = MIN(J1+LATCH-1,LATBB2) - -! JL = 2*(J2-J1+1) -! IJL = LONB*JL -! IJ = LONB2 * (J2-J1+1) - - if (idir > 0) then -! write(0,*)' waveb=',wave(1:5,1) - CALL SPTRAN(0,JCAP,IDRT,LONB,LATB,KM,1,1,LONB2,LONB2,NC,IJN - &, J1,J2,JC,WAVE,GRIDL(IN,1),GRIDL(IS,1),1) - do j=j1,j2 - jn = j - js = latb+1-j - ja = (J-J1)*lonb2 - jb = ja + lonb - do i=1,lonb - grid(i,jn,:) = gridl(I+ja,:) - grid(i,js,:) = gridl(I+jb,:) - enddo - enddo -! write(0,*)' grida=',grid(lonb/2,jn,:) - else -! write(0,*)' SPTEZJ: j1=',j1,' j2=',j2 - do j=j1,j2 - jn = j - js = latb+1-j - ja = (J-J1)*lonb2 - jb = ja + lonb - do i=1,lonb - gridl(I+ja,:) = grid(i,jn,:) - gridl(I+jb,:) = grid(i,js,:) - enddo - enddo -! write(0,*)' BEF SPTRAN gridlN=',gridl(ja+1:ja+lonb,1),' j=',j -! write(0,*)' BEF SPTRAN gridlS=',gridl(jb+1:jb+lonb,1),' j=',j - CALL SPTRAN(0,JCAP,IDRT,LONB,LATB,KM,1,1,LONB2,LONB2,NC,IJN - &, J1,J2,JC,WAVE,GRIDL(IN,1),GRIDL(IS,1),-1) -! write(0,*)' wave=',wave(1:10,1) - endif -! - ENDDO ! j - loop - deallocate (gridl) -! - END -C----------------------------------------------------------------------- - SUBROUTINE SPLAT0(IDRT,JMAX,SLAT,WLAT) -C SUBPROGRAM DOCUMENTATION BLOCK -C -C SUBPROGRAM: SPLAT COMPUTE LATITUDE FUNCTIONS -C PRGMMR: IREDELL ORG: W/NMC23 DATE: 96-02-20 -C -C ABSTRACT: COMPUTES COSINES OF COLATITUDE AND GAUSSIAN WEIGHTS -C FOR ONE OF THE FOLLOWING SPECIFIC GLOBAL SETS OF LATITUDES. -C GAUSSIAN LATITUDES (IDRT=4) -C EQUALLY-SPACED LATITUDES INCLUDING POLES (IDRT=0) -C EQUALLY-SPACED LATITUDES EXCLUDING POLES (IDRT=256) -C THE GAUSSIAN LATITUDES ARE LOCATED AT THE ZEROES OF THE -C LEGENDRE POLYNOMIAL OF THE GIVEN ORDER. THESE LATITUDES -C ARE EFFICIENT FOR REVERSIBLE TRANSFORMS FROM SPECTRAL SPACE. -C (ABOUT TWICE AS MANY EQUALLY-SPACED LATITUDES ARE NEEDED.) -C THE WEIGHTS FOR THE EQUALLY-SPACED LATITUDES ARE BASED ON -C ELLSAESSER (JAM,1966). (NO WEIGHT IS GIVEN THE POLE POINT.) -C NOTE THAT WHEN ANALYZING GRID TO SPECTRAL IN LATITUDE PAIRS, -C IF AN EQUATOR POINT EXISTS, ITS WEIGHT SHOULD BE HALVED. -C THIS VERSION INVOKES THE IBM ESSL MATRIX SOLVER. -C -C PROGRAM HISTORY LOG: -C 96-02-20 IREDELL -C 97-10-20 IREDELL ADJUST PRECISION -C 98-06-11 IREDELL GENERALIZE PRECISION USING FORTRAN 90 INTRINSIC -C 1998-12-03 IREDELL GENERALIZE PRECISION FURTHER -C 1998-12-03 IREDELL USES AIX ESSL BLAS CALLS -C 2009-12-27 DSTARK updated to switch between ESSL calls on an AIX -C platform, and Numerical Recipies calls elsewise. -C 2010-12-30 SLOVACEK update alignment so preprocessor does not cause -C compilation failure -C 2012-09-01 E.Mirvis & M.Iredell merging & debugging linux errors -C of _d and _8 using generic LU factorization. -C 2012-11-05 E.Mirvis generic FFTPACK and LU lapack were removed -C---------------------------------------------------------------- -C USAGE: CALL SPLAT(IDRT,JMAX,SLAT,WLAT) -C -C INPUT ARGUMENT LIST: -C IDRT - INTEGER GRID IDENTIFIER -C (IDRT=4 FOR GAUSSIAN GRID, -C IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES, -C IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES) -C JMAX - INTEGER NUMBER OF LATITUDES. -C -C OUTPUT ARGUMENT LIST: -C SLAT - REAL (JMAX) SINES OF LATITUDE. -C WLAT - REAL (JMAX) GAUSSIAN WEIGHTS. -C -C SUBPROGRAMS CALLED: -C DGEF MATRIX FACTORIZATION - ESSL -C DGES MATRIX SOLVER - ESSL -C LUDCMP LU factorization - numerical recipies -C LUBKSB Matrix solver - numerical recipies -C -C ATTRIBUTES: -C LANGUAGE: FORTRAN 90 -C -C - REAL SLAT(JMAX),WLAT(JMAX) - INTEGER,PARAMETER:: KD=SELECTED_REAL_KIND(15,45) - REAL(KIND=KD):: PK(JMAX/2),PKM1(JMAX/2),PKM2(JMAX/2) - REAL(KIND=KD):: SLATD(JMAX/2),SP,SPMAX,EPS=10.*EPSILON(SP) - PARAMETER(JZ=50) - REAL BZ(JZ) - DATA BZ / 2.4048255577, 5.5200781103, - $ 8.6537279129, 11.7915344391, 14.9309177086, 18.0710639679, - $ 21.2116366299, 24.3524715308, 27.4934791320, 30.6346064684, - $ 33.7758202136, 36.9170983537, 40.0584257646, 43.1997917132, - $ 46.3411883717, 49.4826098974, 52.6240518411, 55.7655107550, - $ 58.9069839261, 62.0484691902, 65.1899648002, 68.3314693299, - $ 71.4729816036, 74.6145006437, 77.7560256304, 80.8975558711, - $ 84.0390907769, 87.1806298436, 90.3221726372, 93.4637187819, - $ 96.6052679510, 99.7468198587, 102.888374254, 106.029930916, - $ 109.171489649, 112.313050280, 115.454612653, 118.596176630, - $ 121.737742088, 124.879308913, 128.020877005, 131.162446275, - $ 134.304016638, 137.445588020, 140.587160352, 143.728733573, - $ 146.870307625, 150.011882457, 153.153458019, 156.295034268 / - REAL:: DLT,D1=1. - REAL AWORK((JMAX+1)/2,((JMAX+1)/2)),BWORK(((JMAX+1)/2)) - INTEGER:: JHE,JHO,J0=0 - INTEGER IPVT((JMAX+1)/2) - PARAMETER(PI=3.14159265358979,C=(1.-(2./PI)**2)*0.25) -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -C GAUSSIAN LATITUDES - IF(IDRT.EQ.4) THEN - JH=JMAX/2 - JHE=(JMAX+1)/2 - R=1./SQRT((JMAX+0.5)**2+C) - DO J=1,MIN(JH,JZ) - SLATD(J)=COS(BZ(J)*R) - ENDDO - DO J=JZ+1,JH - SLATD(J)=COS((BZ(JZ)+(J-JZ)*PI)*R) - ENDDO - SPMAX=1. - DO WHILE(SPMAX.GT.EPS) - SPMAX=0. - DO J=1,JH - PKM1(J)=1. - PK(J)=SLATD(J) - ENDDO - DO N=2,JMAX - DO J=1,JH - PKM2(J)=PKM1(J) - PKM1(J)=PK(J) - PK(J)=((2*N-1)*SLATD(J)*PKM1(J)-(N-1)*PKM2(J))/N - ENDDO - ENDDO - DO J=1,JH - SP=PK(J)*(1.-SLATD(J)**2)/(JMAX*(PKM1(J)-SLATD(J)*PK(J))) - SLATD(J)=SLATD(J)-SP - SPMAX=MAX(SPMAX,ABS(SP)) - ENDDO - ENDDO -CDIR$ IVDEP - DO J=1,JH - SLAT(J)=SLATD(J) - WLAT(J)=(2.*(1.-SLATD(J)**2))/(JMAX*PKM1(J))**2 - SLAT(JMAX+1-J)=-SLAT(J) - WLAT(JMAX+1-J)=WLAT(J) - ENDDO - IF(JHE.GT.JH) THEN - SLAT(JHE)=0. - WLAT(JHE)=2./JMAX**2 - DO N=2,JMAX,2 - WLAT(JHE)=WLAT(JHE)*N**2/(N-1)**2 - ENDDO - ENDIF -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -C EQUALLY-SPACED LATITUDES INCLUDING POLES - ELSEIF(IDRT.EQ.0) THEN - JH=JMAX/2 - JHE=(JMAX+1)/2 - JHO=JHE-1 - DLT=PI/(JMAX-1) - SLAT(1)=1. - DO J=2,JH - SLAT(J)=COS((J-1)*DLT) - ENDDO - DO JS=1,JHO - DO J=1,JHO - AWORK(JS,J)=COS(2*(JS-1)*J*DLT) - ENDDO - ENDDO - DO JS=1,JHO - BWORK(JS)=-D1/(4*(JS-1)**2-1) - ENDDO -!#if IBM4 || IBM8 -! CALL DGEF(AWORK,JHE,JHO,IPVT) -! CALL DGES(AWORK,JHE,JHO,IPVT,BWORK,J0) -!#endif -!#if LINUX - call ludcmp(awork,jho,jhe,ipvt) - call lubksb(awork,jho,jhe,ipvt,bwork) -!#endif - WLAT(1)=0. - DO J=1,JHO - WLAT(J+1)=BWORK(J) - ENDDO -CDIR$ IVDEP - DO J=1,JH - SLAT(JMAX+1-J)=-SLAT(J) - WLAT(JMAX+1-J)=WLAT(J) - ENDDO - IF(JHE.GT.JH) THEN - SLAT(JHE)=0. - WLAT(JHE)=2.*WLAT(JHE) - ENDIF -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -C EQUALLY-SPACED LATITUDES EXCLUDING POLES - ELSEIF(IDRT.EQ.256) THEN - JH=JMAX/2 - JHE=(JMAX+1)/2 - JHO=JHE - DLT=PI/JMAX - SLAT(1)=1. - DO J=1,JH - SLAT(J)=COS((J-0.5)*DLT) - ENDDO - DO JS=1,JHO - DO J=1,JHO - AWORK(JS,J)=COS(2*(JS-1)*(J-0.5)*DLT) - ENDDO - ENDDO - DO JS=1,JHO - BWORK(JS)=-D1/(4*(JS-1)**2-1) - ENDDO -!#if IBM4 || IBM8 -! CALL DGEF(AWORK,JHE,JHO,IPVT) -! CALL DGES(AWORK,JHE,JHO,IPVT,BWORK,J0) -!#endif -!#if LINUX - call ludcmp(awork,jho,jhe,ipvt,d) - call lubksb(awork,jho,jhe,ipvt,bwork) -!#endif - WLAT(1)=0. - DO J=1,JHO - WLAT(J)=BWORK(J) - ENDDO -CDIR$ IVDEP - DO J=1,JH - SLAT(JMAX+1-J)=-SLAT(J) - WLAT(JMAX+1-J)=WLAT(J) - ENDDO - IF(JHE.GT.JH) THEN - SLAT(JHE)=0. - WLAT(JHE)=2.*WLAT(JHE) - ENDIF - ENDIF -C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - RETURN - END diff --git a/util/sorc/webtitle.fd/README b/util/sorc/webtitle.fd/README deleted file mode 100755 index 4f26e568a6..0000000000 --- a/util/sorc/webtitle.fd/README +++ /dev/null @@ -1,9 +0,0 @@ -FF 11/09/12 -no essl library -intel's mkl blas/others are supposed to be compatible: http://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms - -other concerns: - -makefile:39: warning: overriding commands for target `webtitle' -makefile:34: warning: ignoring old commands for target `webtitle' - diff --git a/util/sorc/webtitle.fd/compile_webtitle_wcoss.sh b/util/sorc/webtitle.fd/compile_webtitle_wcoss.sh deleted file mode 100755 index 3d83adb2e2..0000000000 --- a/util/sorc/webtitle.fd/compile_webtitle_wcoss.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh - -###################################################################### -# -# Build executable : GFS utilities -# -###################################################################### - -LMOD_EXACT_MATCH=no -source ../../../sorc/machine-setup.sh > /dev/null 2>&1 -cwd=`pwd` - -if [ "$target" = "wcoss_dell_p3" ] || [ "$target" = "wcoss_cray" ] || [ "$target" = "hera" ] ; then - echo " " - echo " You are on WCOSS: $target " - echo " " -elif [ "$target" = "wcoss" ] ; then - echo " " - echo " " - echo " You are on WCOSS: $target " - echo " You do not need to build GFS utilities for GFS V15.0.0 " - echo " " - echo " " - exit -else - echo " " - echo " Your machine is $target is not recognized as a WCOSS machine." - echo " The script $0 can not continue. Aborting!" - echo " " - exit -fi -echo " " - -# Load required modules -source ../../modulefiles/gfs_util.${target} -module list - -set -x - -mkdir -p ../../exec -make -mv webtitle ../../exec -make clean diff --git a/util/sorc/webtitle.fd/makefile b/util/sorc/webtitle.fd/makefile deleted file mode 100755 index bcad6f8f9f..0000000000 --- a/util/sorc/webtitle.fd/makefile +++ /dev/null @@ -1,37 +0,0 @@ -# Modified BSM for WCOSS build 1/30/2013 -SHELL=/bin/sh - -SRCS= webtitle.f -OBJS= webtitle.o -# Tunable parameters -# -# FC Name of the fortran compiling system to use -# LDFLAGS Flags to the loader -# LIBS List of libraries -# CMD Name of the executable -# PROFLIB Library needed for profiling -# -FC = ifort - -LIBS= ${W3NCO_LIB4} - -CMD = webtitle -FFLAGS = -#FFLAGS = -debug - -# Lines from here on down should not need to be changed. They are the -# actual rules which make uses to build a.out. -# -all: $(CMD) - -$(CMD): $(OBJS) - $(FC) $(FFLAGS) -o $(@) $(OBJS) $(LIBS) - -clean: - -rm -f $(OBJS) - -clobber: clean - -rm -f $(CMD) - -void: clobber - -rm -f $(SRCS) makefile diff --git a/util/sorc/webtitle.fd/webtitle.f b/util/sorc/webtitle.fd/webtitle.f deleted file mode 100755 index b4bfdfa0b0..0000000000 --- a/util/sorc/webtitle.fd/webtitle.f +++ /dev/null @@ -1,147 +0,0 @@ -C$$$ MAIN PROGRAM DOCUMENTATION BLOCK -C . . . . -C MAIN PROGRAM: WEBTITLE -C PRGMMR: SAGER ORG: NP12 DATE: 2003-10-02 -C -C ABSTRACT: READS A FILE CONTAINING THE CURRENT DATE AND THE FORECAST -C HOUR AND WRITES A FILE CONTAINING A TITLE CONTAINING A REFORMATED -C DATE. THIS FILE IS USED TO CREATE A NEW FORMATED TITLE FOR THE -C NCEP MODEL GRAPHICS WEBSITE -C -C PROGRAM HISTORY LOG: -C -C 03-10-02 L. SAGER ORIGINAL VERSION -C 01-30-13 B. MABE Updated for WCOSS system. Remove Equiv and -C char to integer implied casts -C USAGE: -C INPUT FILES: -C FT05 - CURRENT DATE AND FORECAST HOUR -C -C OUTPUT FILES: -C FT55 - UPDATED TITLE CONTAINING REFORMATTED -C DATE -C -C SUBPROGRAMS CALLED: -C UNIQUE: - -C LIBRARY: - W3AI15 W3FS15 W3DOXDAT -C COMMON - -C -C EXIT STATES: -C COND = 0 - SUCCESSFUL RUN -C -C REMARKS: -C -C ATTRIBUTES: -C LANGUAGE: FORTRAN 90 -C MACHINE: IBM -C -C$$$ -C - INTEGER idat(8) - CHARACTER*4 cout(10) - CHARACTER*3 days(7) - CHARACTER*14 block - CHARACTER*40 line1 - CHARACTER*40 line2 - CHARACTER*4 tb1(2) - CHARACTER*2 tb2(3) - BYTE bsmdate(4) - BYTE retdate(4) - - DATA idat /8*0/ - DATA days /'SUN','MON','TUE','WED','THU','FRI','SAT'/ - - DATA line1 /'09/01/2003 12UTC 24HR FCST VALID TUE 09'/ - - DATA line2 /'/02/2003 12UTC NCEP/NWS/NOAA'/ - - CALL W3TAGB('WEBTITLE',2001,0275,0076,'NP12') -C -C Start by reading in the date/time -C - READ(5,102) block - 102 FORMAT(a14) - READ(block,100) tb1(1), tb1(2), tb2(1), tb2(2), tb2(3) - 100 FORMAT(2a4,4a2) - - read(tb1(1),*) jtau - read(tb1(2),*) iyear - iwork = iyear - 2000 - bsmdate(1)=iwork - read(tb2(1),*) bsmdate(2) - read(tb2(2),*) bsmdate(3) - read(tb2(3),*) bsmdate(4) - -C USAGE: CALL W3FS15 (IDATE, JTAU, NDATE) -C INPUT ARGUMENT LIST: -C IDATE - PACKED BINARY DATE/TIME AS FOLLOWS: -C BYTE 1 IS YEAR OF CENTURY 00-99 -C BYTE 2 IS MONTH 01-12 -C BYTE 3 IS DAY OF MONTH 01-31 -C BYTE 4 IS HOUR 00-23 -C SUBROUTINE TAKES ADVANTAGE OF FORTRAN ADDRESS -C PASSING, IDATE AND NDATE MAY BE -C A CHARACTER*1 ARRAY OF FOUR, THE LEFT 32 -C BITS OF 64 BIT INTEGER WORD. AN OFFICE NOTE 85 -C LABEL CAN BE STORED IN -C 4 INTEGER WORDS. -C IF INTEGER THE 2ND WORD IS USED. OUTPUT -C IS STORED IN LEFT 32 BITS. FOR A OFFICE NOTE 84 -C LABEL THE 7TH WORD IS IN THE 4TH CRAY 64 BIT -C INTEGER, THE LEFT 32 BITS. -C JTAU - INTEGER NUMBER OF HOURS TO UPDATE (IF POSITIVE) -C OR BACKDATE (IF NEGATIVE) -C -C OUTPUT ARGUMENT LIST: -C NDATE - NEW DATE/TIME WORD RETURNED IN THE -C SAME FORMAT AS 'IDATE'. 'NDATE' AND 'IDATE' MAY -C BE THE SAME VARIABLE. - - CALL w3fs15(bsmdate,jtau,retdate) -C -C... w3doxdat returns the day of the week -C -C INPUT VARIABLES: -C IDAT INTEGER (8) NCEP ABSOLUTE DATE AND TIME -C (YEAR, MONTH, DAY, TIME ZONE, -C HOUR, MINUTE, SECOND, MILLISECOND) -C -C OUTPUT VARIABLES: -C JDOW INTEGER DAY OF WEEK (1-7, WHERE 1 IS SUNDAY) -C JDOY INTEGER DAY OF YEAR (1-366, WHERE 1 IS JANUARY 1) -C JDAY INTEGER JULIAN DAY (DAY NUMBER FROM JAN. 1,4713 B.C.) -C - idat(1) = iyear - idat(2) = retdate(2) - idat(3) = retdate(3) - idat(5) = retdate(4) - - CALL w3doxdat(idat,jdow,jdoy,jday) - -C -C Convert the valid date back to character -C - - CALL w3ai15(idat,cout,10,2,' ') - - - line1(1:2) = block(9:10) - line1(4:5) = block(11:12) - line1(9:10) = block(7:8) - line1(12:13) = block(13:14) - line1(18:20) = block(2:4) - line1(35:37) = days(jdow) - line1(39:40) = cout(2)(1:2) - - line2(2:3) = cout(3)(1:2) - line2(7:8) = cout(1)(1:2) - line2(10:11) = cout(5)(1:2) - - - - write(55,105) line1,line2 - 105 FORMAT(2a40) - - CALL W3TAGE('WEBTITLE') - STOP - END diff --git a/util/ush/finddate.sh b/util/ush/finddate.sh deleted file mode 100755 index cd691cec17..0000000000 --- a/util/ush/finddate.sh +++ /dev/null @@ -1,163 +0,0 @@ -# finddate.sh -# author: Luke Lin phone: 457-5047 24 June 1998 -# abstract: This script looks in ether forward or backward in time to -# generate either a variable containing sequential date/time stamps -# for a period up to a month or just the date/time stamp occurring -# at the end of such a period. -# Time stamp is in the form yyyyddmm. The script should be good for many -# years. Leap years are accounted for. Years go 1998, 1999, 2000, 2001, -# 2002, 2003, .... -# etc. -# -# usage: examples assume todays date is 19990929. -# To generate a sequence looking 10 days forward then execute: -# list=`sh /nwprod/util/scripts/finddate.sh 19990929 s+10` -# To generate just the date/time 10 days from now then execute: -# list=`sh /nwprod/util/scripts/finddate.sh 19990929 d+10` -# To generate a sequence looking 10 days backward then execute: -# list=`sh /nwprod/util/scripts/finddate.sh 19990929 s-10` -# To generate just the date/time 10 days ago then execute: -# list=`sh /nwprod/util/scripts/finddate.sh 19990929 d-10` -# list will contain 10 time stamps starting with 19990929. Time stamps -# are separated by blanks. -# -# This script will work for periods up to a month. The number indicating -# the period in question should be two digits. For single digits 1-9 -# use 01, 02, 03, etc. -set +x -unset pdstr -today=$1 -var=$2 -yy=`echo $today | cut -c1-4 ` -mm=`echo $today | cut -c5-6 ` -dd=`echo $today | cut -c7-8 ` -nxtyy=$yy -pyy=$yy -what=`echo $var | cut -c1-1` -up=`echo $var | cut -c2-2` -num=`echo $var | cut -c3-4` -mod=`expr \( $yy / 4 \) \* 4 - $yy ` -leap=0 -if test "$mod" -eq 0 -then -leap=1 -fi -case $mm in -01) mday=31 - pday=31 - pmon=12 - pyy=`expr $yy - 1` - if test $pyy -lt '0' - then - pyy='1999' - fi - nxtmon=02;; -02) mday=`expr "$leap" + 28 ` - pday=31 - pmon=01 - nxtmon=03;; -03) mday=31 - pday=`expr "$leap" + 28 ` - pmon=02 - nxtmon=04;; -04) mday=30 - pday=31 - pmon=03 - nxtmon=05;; -05) mday=31 - pday=30 - pmon=04 - nxtmon=06;; -06) mday=30 - pday=31 - pmon=05 - nxtmon=07;; -07) mday=31 - pday=30 - pmon=06 - nxtmon=08;; -08) mday=31 - pday=31 - pmon=07 - nxtmon=09;; -09) mday=30 - pday=31 - pmon=08 - nxtmon=10;; -10) mday=31 - pday=30 - pmon=09 - nxtmon=11;; -11) mday=30 - pday=31 - pmon=10 - nxtmon=12;; -12) mday=31 - pday=30 - pmon=11 - nxtmon=01 - nxtyy=`expr $yy + 1 ` - if test $yy -eq 1999 - then - nxtyy=2000 - fi ;; -*) echo mon=$mon is illegal - exit 99 ;; -esac - -if test $dd -gt $mday -then - echo "day=$dd is illegal. In month=$mon there are only $mday days." - exit 16 -fi - -i=1 -n=0 -while test $i -le $num -do - if test "$up" = '+' - then - ddn=`expr $dd + $i` - mmn=$mm - yyn=$yy - if test $ddn -gt $mday - then - n=`expr $n + 1` - ddn=$n - mmn=$nxtmon - yyn=$nxtyy - fi - if test $ddn -lt 10 - then - ddn="0$ddn" - fi - elif test "$up" = '-' - then - ddn=`expr $dd - $i` - mmn=$mm - yyn=$yy - if test $ddn -le '0' - then - n=`expr $pday + $ddn` - ddn=$n - mmn=$pmon - yyn=$pyy - fi - if test $ddn -lt 10 - then - ddn="0$ddn" - fi - else - echo '+ or - are allowed for 2nd variable in argument.' - echo "You tried $up, this is illegal." - exit 16 - fi - i=`expr $i + 1 ` - if test "$what" = 's' - then - pdstr=$pdstr"$yyn$mmn$ddn " - else - pdstr=$yyn$mmn$ddn - fi -done -echo $pdstr diff --git a/util/ush/make_NTC_file.pl b/util/ush/make_NTC_file.pl deleted file mode 100755 index 9c838bdebe..0000000000 --- a/util/ush/make_NTC_file.pl +++ /dev/null @@ -1,119 +0,0 @@ -#!/usr/bin/perl -# -#------------------------------------------------------ -# -# This is make_NTC_file.pl -# It attaches the appropriate headers to the input file -# and copies it to a unique name for input to NTC. -# -# The following lines are prepended to the file: -# 1. A Bulletin Flag Field Seperator -# 2. A WMO header line -# 3. An optional subheader, e.g. DIFAX1064 -# -# Input wmoheader Originator datetime path -# where: -# wmoheader - WMO id to use in WMO header. -# subheader - "NONE" if none. -# Originator - Originator to use in WMO header -# datetime - date/time to use in WMO header, yyyymmddhh -# path - name input file -# output_path - name of output file -# -# Author: Paula Freeman based on script by Larry Sager -# -#------------------------------------------------------ - -$NArgs = @ARGV; - -if ($NArgs < 6) { - usage (); - exit; -} - -# -# Get input -# - -$WMOHeader=shift; -$Origin=shift; -$YYYYMMDDHH=shift; -$SubHeader=shift; -$Filename=shift; -$OutputFilename=shift; - -print "Filename is $Filename\n"; -print "Output Filename is $OutputFilename\n"; -$YYYYMMDDHH =~ /\d{4}(\d{2})(\d{4})/; -$MMDDHH = $1 . $2; -$DDHHMM = $2 . "00"; -print "WMOHeader = $WMOHeader\n"; -print "SubHeader = $SubHeader\n"; -print "Origin = $Origin\n"; - - -if ( ($WMOHeader eq "") || ($Origin eq "") || ($YYYYMMDDHH eq "") || ($Filename eq "") || ($OutputFilename eq "") || ($SubHeader eq "") ) { - usage (); - exit; -} - -# -# Create the file for TOC -# - - make_toc (); -# -# - - -sub usage () { - print "Usage: $0 \n"; -} - -sub make_toc { - -# -# Attach WMO header and subheader (if not "NONE"). -# Get the bytecount of file to insert into the Bulletin Flag Field Seperator. -# Add in length of WMO header, plus two carriage returns and line feed. -# If Subheader specified, count that in also, plus line a feed. -# - - $Header = "$WMOHeader $Origin $DDHHMM"; - $ByteCount = `wc -c $Filename | cut -c1-8`; - $ByteCount= $ByteCount + length($Header) + 3; - if ($SubHeader =~ /NONE/) { - print "No Subheader\n"; - } else { - if ($SubHeader =~ /IMAG/){ - $ByteCount = $ByteCount + length($SubHeader); - } else { - $ByteCount = $ByteCount + length($SubHeader) + 3; - } - } - $BulletinFlagFieldSep = sprintf( "****%10.10d****", $ByteCount); - - open(OUTFILE, ">$OutputFilename") or die "Cannot open $OutputFilename for output."; - print OUTFILE "$BulletinFlagFieldSep\n"; - print OUTFILE "$Header\r\r\n"; - if ($SubHeader =~ /NONE/) { - print "No Subheader\n"; - } else { - if ($SubHeader =~ /IMAG/){ - print OUTFILE "$SubHeader"; - } else { - print OUTFILE "$SubHeader\r\r\n"; - } - } - open (INFILE, $Filename) or die "Cannot open $Filename"; - - while ($rec=) { - print OUTFILE $rec; - } - - close INFILE; - close OUTFILE; - - print "$Filename -> $OutputFilename\n"; -} - diff --git a/util/ush/make_ntc_bull.pl b/util/ush/make_ntc_bull.pl deleted file mode 100755 index c6ca287ead..0000000000 --- a/util/ush/make_ntc_bull.pl +++ /dev/null @@ -1,250 +0,0 @@ -#!/usr/bin/perl -# -#------------------------------------------------------ -# -# This is make_ntc_bull.pl -# It attaches the appropriate headers to the input file -# and copies it to a unique name for input to NTC. -# -# A Bulletin Flag Field Separator is prepended to the -# text bulletin. This TOC header contains the total -# number of bytes in the product not counting the -# bulletin flag field separator. -# -# Input: -# File identifier - Output name identier. -# subheader - "NONE" if none. -# Originator - Not used currently -# datetime - Not used currently -# filename - input file name -# output_path - name of output file -# -# Author: Larry Sager based on a script by Paula Freeman -# -# 31 Oct 05 -- new script -# -#------------------------------------------------------ - -if ($ENV{job}) { $job=$ENV{job}; } -if ($ENV{SENDCOM}) { $SENDCOM=$ENV{SENDCOM}; } -if ($ENV{SENDDBN}) { $SENDDBN=$ENV{SENDDBN}; } -$NArgs = @ARGV; - -if ($NArgs < 6) { - usage (); - exit; -} - -# -# Get input -# - -$NAME=shift; -$WMOname=shift; -$ORIGname=shift; -$DATEname=shift; -$Filename=shift; -$OutputFilename=shift; -print " Input : $Filename"; -print " Output: $OutputFilename"; - - -if ( ($Filename eq "") || ($OutputFilename eq "") ) { - usage (); - exit; -} - -# -# Create the file for TOC -# - if ( $NAME eq "plot" ) { - make_tocplot (); - } - elsif ($NAME eq "redb" ) { - make_tocredb (); - } - else { - make_tocbull (); - } -# -# - - -sub usage () { - print "Usage: $0 \n"; -} - -sub make_tocbull { - -# -# Attach WMO header -# Get the bytecount of file to insert into the Bulletin Flag Field Seperator. -# - - $ix = 0; - $under = "_"; - open (INFILE, $Filename) or die "Cannot open $Filename"; - - while ($cho=) { - $rec = $rec . $cho; - } - $cho = $rec; - $cho =~ s/\n//g; - $cho =~ s/<<@@/\r\r\n/g; - $cho =~ s/<<@/\r\r\n/g; - $cho =~ s/<//g; - $cho =~ s/\^//g; - $cho =~ s/\$//g; - $cho =~ s/\|/+/g; - $value = 40; - $Outp="$OutputFilename"; - open(OUTFILE, ">$Outp") or die "Cannot open $OutputFilename for output."; - while ($ix == 0) { - $cho = substr($cho,$value); - $value = 38; - $cho =~ s/'1/\&\&/; - $cho =~ s/'0/\&\&/; -# print "cho is $cho"; - ($cho2,$cho) = split(/\&\&/,$cho); - ($cho2,$cho3) = split(/\%/,$cho2); -# print "cho2 is $cho2"; - $ByteCount = length($cho2); - print " length is $ByteCount "; - $BulletinFlagFieldSep = sprintf( "****%10.10d****", $ByteCount); - if ($SENDCOM eq "YES") { - if ($ByteCount > 50 ) { - print OUTFILE "$BulletinFlagFieldSep\n"; - print OUTFILE $cho2; - } - else { - $ix = 1; - } - } - } - close OUTFILE; - if ($SENDDBN eq "YES" ) { -# Modified 20051205 by wx11rp to ensure the current production machine is used. -# $dbn_alert="/gpfs/w/nco/dbnet/bin/dbn_alert"; - $dbn_alert=$ENV{'DBNROOT'} . "/bin/dbn_alert"; - $type="GRIB_LOW"; - $job2=$job; - $subtype=$ORIGname; - $file_path=$Outp; - @command = ($dbn_alert, $type, $subtype, $job2, $file_path); - if (system (@command) != 0) { - print "Error alerting: @command \n"; - } - } - - close INFILE; - close OUTFILE; - - print "$Filename -> $OutputFilename\n"; -} - -sub make_tocplot { - -# -# Attach WMO header -# Get the bytecount of file to insert into the Bulletin Flag Field Seperator. -# - - $ix = 0; - $under = "_"; - open (INFILE, $Filename) or die "Cannot open $Filename"; - - while ($cho=) { - $rec = $rec . $cho; - } - $cho = $rec; -# $Outp="$OutputFilename$under$job"; - $Outp="$OutputFilename"; - open(OUTFILE, ">$Outp") or die "Cannot open $OutputFilename for output."; - while ($ix == 0) { - $cho =~ s/\$\$/\&\&/; - ($cho2,$cho) = split(/\&\&/,$cho); -# $cho2 =~ s/@/ /g; -# $cho2 = $cho2 . " "; - $ByteCount = length($cho2); - print " length is $ByteCount "; - $BulletinFlagFieldSep = sprintf( "****%10.10d****", $ByteCount); - if ($SENDCOM eq "YES") { - if ($ByteCount > 50 ) { - print OUTFILE "$BulletinFlagFieldSep\n"; - print OUTFILE $cho2; - } - else { - $ix = 1; - } - } - } - close OUTFILE; - if ($SENDDBN eq "YES" ) { -# 20051205 Modified by wx11rp to allow the script to run on any manchine labeled as the production machine -# $dbn_alert="/gpfs/w/nco/dbnet/bin/dbn_alert"; - $dbn_alert=$ENV{'DBNROOT'} . "/bin/dbn_alert"; - $type="GRIB_LOW"; - $subtype=$DATEname; - $job2=$job; - $file_path=$Outp; - @command = ($dbn_alert, $type, $subtype, $job2, $file_path); - if (system (@command) != 0) { - print "Error alerting: @command \n"; - } - } - - close INFILE; - close OUTFILE; - - print "$Filename -> $OutputFilename\n"; -} -sub make_tocredb { - -# -# Prepare the Redbook graphic for transmission to TOC by removing the AWIPS -# header and creating an NTC header. Get the Bytecount of the file to -# insert into the Bulletin Flag Field Seperator. -# - - $ix = 0; - $under = "_"; - open (INFILE, $Filename) or die "Cannot open $Filename"; - - while ($cho=) { - $rec = $rec . $cho; - } - $cho = $rec; - $Outp="$OutputFilename"; - open(OUTFILE, ">$Outp") or die "Cannot open $OutputFilename for output."; - $cho = substr($cho,24); - $ByteCount = length($cho); - print " length is $ByteCount "; - $BulletinFlagFieldSep = sprintf( "****%10.10d****", $ByteCount); - if ($SENDCOM eq "YES") { - if ($ByteCount > 50 ) { - print OUTFILE "$BulletinFlagFieldSep\n"; - print OUTFILE $cho; - - } - } - close OUTFILE; - if ($SENDDBN eq "YES" ) { -# 20051205 Modified by wx11rp to allow the script to run on any manchine labeled as the production machine -# $dbn_alert="/gpfs/w/nco/dbnet/bin/dbn_alert"; - $dbn_alert=$ENV{'DBNROOT'} . "/bin/dbn_alert"; - $type="GRIB_LOW"; - $subtype=$DATEname; - $job2=$job; - $file_path=$Outp; - @command = ($dbn_alert, $type, $subtype, $job2, $file_path); - if (system (@command) != 0) { - print "Error alerting: @command \n"; - } - } - - close INFILE; - close OUTFILE; - - print "$Filename -> $OutputFilename\n"; -} diff --git a/util/ush/make_ntcfile.pl b/util/ush/make_ntcfile.pl deleted file mode 100755 index 814954619c..0000000000 --- a/util/ush/make_ntcfile.pl +++ /dev/null @@ -1,142 +0,0 @@ -#!/usr/bin/perl -# -#------------------------------------------------------ -# -# This is make_NTC_file.pl -# It attaches the appropriate headers to the input file -# and copies it to a unique name for input to NTC. -# -# The following lines are prepended to the file: -# 1. A Bulletin Flag Field Seperator -# 2. A WMO header line -# 3. An optional subheader, e.g. DIFAX1064 -# -# Input wmoheader Originator datetime path -# where: -# wmoheader - WMO id to use in WMO header. -# subheader - "NONE" if none. -# Originator - Originator to use in WMO header -# datetime - date/time to use in WMO header, yyyymmddhh -# path - name input file -# output_path - name of output file -# -# Author: Paula Freeman based on script by Larry Sager -# -# 16 June 02 -- remove LF after subheader -# -#------------------------------------------------------ - -$NArgs = @ARGV; - -if ($NArgs < 6) { - usage (); - exit; -} - -# -# Get input -# - -$WMOHeader=shift; -$Origin=shift; -$YYYYMMDDHH=shift; -$SubHeader=shift; -$Filename=shift; -$OutputFilename=shift; - -# Check the input paramaters - -# WMOHeader must be 6 characters -if ($WMOHeader !~ /^\w{6}$/) { - usage (); - print "Usage: WMOHeader must be 6 characters\n"; - exit; -} -# Origin must be 4 characters -if ($Origin !~ /^\w{4}$/) { - usage (); - print "Usage: Origin must be 4 characters\n"; - exit; -} - -# $YYYYMMDDHH must be 10 digits -if ($YYYYMMDDHH !~ /^\d{10}$/) { - usage (); - print "Usage: YYYYMMDDHH must be 10 digits\n"; - exit; -} - -# SubHeader, Filename, and OutputFilename must all be non-blank -if ($SubHeader =~ /^$/ || $Filename =~ /^$/ || $OutputFilename =~ /^$/) { - usage (); - print "Usage: SubHeader, Filename, and OutputFilename must be non-blank\n"; - exit; -} - -print "Filename is $Filename\n"; -print "Output Filename is $OutputFilename\n"; -$YYYYMMDDHH =~ /\d{4}(\d{2})(\d{4})/; -$MMDDHH = $1 . $2; -$DDHHMM = $2 . "00"; -print "WMOHeader = $WMOHeader\n"; -print "SubHeader = $SubHeader\n"; -print "Origin = $Origin\n"; - - -if ( ($WMOHeader eq "") || ($Origin eq "") || ($YYYYMMDDHH eq "") || ($Filename eq "") || ($OutputFilename eq "") || ($SubHeader eq "") ) { - usage (); - exit; -} - -# -# Create the file for TOC -# - - make_toc (); -# -# - - -sub usage () { - print "Usage: $0 \n"; -} - -sub make_toc { - -# -# Attach WMO header and subheader (if not "NONE"). -# Get the bytecount of file to insert into the Bulletin Flag Field Seperator. -# Add in length of WMO header, plus two carriage returns and line feed. -# If Subheader specified, count that in also, plus line a feed. -# - - $Header = "$WMOHeader $Origin $DDHHMM"; - $ByteCount = `wc -c $Filename | cut -c1-8`; - $ByteCount= $ByteCount + length($Header) + 3; - if ($SubHeader =~ /NONE/) { - print "No Subheader\n"; - } else { - $ByteCount = $ByteCount + length($SubHeader); - } - $BulletinFlagFieldSep = sprintf( "****%10.10d****", $ByteCount); - - open(OUTFILE, ">$OutputFilename") or die "Cannot open $OutputFilename for output."; - print OUTFILE "$BulletinFlagFieldSep\n"; - print OUTFILE "$Header\r\r\n"; - if ($SubHeader =~ /NONE/) { - print "No Subheader\n"; - } else { - print OUTFILE "$SubHeader"; - } - open (INFILE, $Filename) or die "Cannot open $Filename"; - - while ($rec=) { - print OUTFILE $rec; - } - - close INFILE; - close OUTFILE; - - print "$Filename -> $OutputFilename\n"; -} - diff --git a/util/ush/make_tif.sh b/util/ush/make_tif.sh deleted file mode 100755 index 2609d1d797..0000000000 --- a/util/ush/make_tif.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/sh - -cd $DATA -# -# Use Image Magick to convert the GIF to TIF -# format -# -# module show imagemagick-intel-sandybridge/6.8.3 on CRAY -# export PATH=$PATH:/usrx/local/prod/imagemagick/6.8.3/intel/sandybridge/bin:. -# export LIBPATH="$LIBPATH":/usrx/local/prod/imagemagick/6.8.3/intel/sandybridge/lib -# export DELEGATE_PATH=/usrx/local/prod/imagemagick/6.8.3/intel/sandybridge/share/ImageMagick-6 - -# module show imagemagick/6.9.9-25 on DELL - export PATH=$PATH:/usrx/local/dev/packages/ImageMagick/6.9.9-25/bin:. - export LIBPATH="$LIBPATH":/usrx/local/dev/packages/ImageMagick/6.9.9-25/lib - export DELEGATE_PATH=/usrx/local/dev/packages/ImageMagick/6.9.9-25/share/ImageMagick-6 - - outname=out.tif - - convert gif:$input fax:$outname - -# -# Add the ntc heading: -# - -WMO=QTUA11 -ORIG=KWBC -PDYHH=${PDY}${cyc} - -if [ $HEADER = "YES" ] -then - INPATH=$DATA/$outname - SUB=DFAX1064 -# make_NTC_file.pl $WMO $ORIG $PDYHH $SUB $INPATH $OUTPATH - $UTILgfs/ush/make_NTC_file.pl $WMO $ORIG $PDYHH $SUB $INPATH $OUTPATH -# -# Send the graphic to TOC - - cp $OUTPATH ${COMOUTwmo}/gfs_500_hgt_tmp_nh_anl_${cyc}.tif - if [ $SENDDBN = YES ]; then - - $DBNROOT/bin/dbn_alert GRIB_LOW ${NET} ${job} ${COMOUTwmo}/gfs_500_hgt_tmp_nh_anl_${cyc}.tif - fi -fi - diff --git a/util/ush/mkawpgrb.sh b/util/ush/mkawpgrb.sh deleted file mode 100755 index bdde03553b..0000000000 --- a/util/ush/mkawpgrb.sh +++ /dev/null @@ -1,409 +0,0 @@ -#!/bin/ksh -# UTILITY SCRIPT NAME : mkawpgrb.sh -# AUTHOR : Mary Jacobs -# DATE WRITTEN : 11/06/96 -# -# Abstract: This utility script produces AWIPS GRIB bulletins. -# -# Input: 1 argument are passed to this script. -# 1st argument - Forecast Hour - format of 2I -# -# Usage: mkawpgbl.sh $hour -# (For NAM Products, this script look for env var of $GRID) -# - -echo "History: SEP 1996 - First implementation of this utility script" -echo "Modified: APR 1997 - Added logic for KWBH parm when MRF, default" -echo " KWBC (program default) for GFS products. " -echo " This logic lost when processing converted " -echo " to SMS...field never noticed! (MAF) " -echo "Modified: AUG 1999 - Modified for IBM SP" -echo " Allows interactive use" -echo "Modified: MAY 2003 - Added call to new executable, tocgrib, which" -echo " will send unblocked files with headers to " -echo " the TOC for transmission to AWIPS." -echo "Modified: AUG 2014 - Removed processing GFS in GRIB2" -echo "Modified: MAY 2015 - Updated for WCOSS Phase 2" -# - -set +x -hour_list="$1" -num=$# - -if test "$num" -ge 1 -then - echo " Appropriate number of arguments were passed" - set -x -# export EXECutil=${EXECutil:-${NWROOT}/util/exec} -# export PARMutil=${PARMutil:-${NWROOT}/util/parm} - export envir=${envir:-prod} - export jlogfile=${jlogfile:-jlogfile} - export NET=${NET:-gfs} - export RUN=${RUN:-gfs} - export DBNALERT_TYPE=${DBNALERT_TYPE:-GRIB_LOW} - if [ $NET = "nam" ] - then - if [ -z "$GRID" ] - then - export GRID=207 - fi - fi - export cyc=${cyc:-00} - export cycle=${cycle:-t${cyc}z} - export SENDCOM=${SENDCOM:-NO} - export SENDDBN=${SENDDBN:-NO} - if [ -z "$DATA" ] - then - export DATA=`pwd` - cd $DATA - ${NWROOT}/util/ush/setup.sh - ${NWROOT}/util/ush/setpdy.sh - . PDY - fi - export COMIN=${COMIN:-${COMROOT}/$NET/$envir/$NET.$PDY/${cyc}} - export COMOUTwmo=${COMOUT:-${COMROOT}/${NET}/${envir}/${RUN}.${PDY}/${cyc}/wmo} - export job=${job:-interactive} - export pgmout=${pgmout:-OUTPUT.$$} -else - echo "" - echo "Usage: mkawpgbl.sh \$hour" - echo "" - exit 16 -fi - -set +x -echo " ------------------------------------------" -echo " BEGIN MAKING $NET XTRN/GRIB AWIPS PRODUCTS" -echo " ------------------------------------------" -set -x - -msg="Enter Make AWIP GRIB utility." -postmsg "$jlogfile" "$msg" - -############################################ -# Figure out INPUT/OUTPUT/PARM/EXEC Fields -############################################ -############################################## -# NOTE: STOP process 6-hour output GFS Grids -# in this script remove gfs part. -############################################## - -for hour in $hour_list -do - case $NET in - mrf)input_grb=pgrbf${hour} - input_grbi=pgrbif${hour} - output_grb=xtrn.awp${NET}${hour} - parmcard=grib_awp${NET}${hour} - parm="parm=KWBH" -# executable=mkgfsawps - executable=$MKGFSAWPS - DBNALERT_TYPE=GRIB_LOW - ;; - smoke)case $GRID in - sfc)input_grb=grib2_sfc.1hr_227 - input_grbi="" - output_grb=smoke_sfc.1hr_227.grib2 - parmcard=grib2_smokesfc.227 - parm="parm=KWBP" -# executable=tocgrib2 - executable=$TOCGRIB2 - DBNALERT_TYPE=GRIB_LOW - ;; - pbl)input_grb=grib2_pbl.1hr_227 - input_grbi="" - output_grb=smoke_pbl.1hr_227.grib2 - parmcard=grib2_smokepbl.227 - parm="parm=KWBP" -# executable=tocgrib2 - executable=$TOCGRIB2 - DBNALERT_TYPE=GRIB_LOW - ;; - esac - ;; - nam)case $GRID in - ######################################## - # 6-hour output NAM Grids - ######################################## - 207)input_grb=awp207${hour}.tm00 - input_grbi=awp207i${hour} - output_grb=xtrn.awp${NET}${hour}.207 - parmcard=grib_awp${NET}${hour}.207 - parm="parm=KWBE" -# executable=tocgrib - executable=$TOCGRIB - DBNALERT_TYPE=GRIB_LOW - ;; - 211)input_grb=awp211${hour}.tm00 - input_grbi=awp211i${hour} - output_grb=xtrn.awp${NET}${hour}.211 - parmcard=grib_awp${NET}${hour}.211 - parm="parm=KWBE" -# executable=tocgrib - executable=$TOCGRIB - DBNALERT_TYPE=GRIB_LOW - ;; - 237)input_grb=awp237${hour}.tm00 - input_grbi=awp237i${hour} - output_grb=xtrn.awp${NET}${hour}.237 - parmcard=grib_awp${NET}${hour}.237 - parm="parm=KWBE" -# executable=tocgrib - executable=$TOCGRIB - DBNALERT_TYPE=GRIB_LOW - ;; - icwf)input_grb=awip3d${hour}.tm00_icwf - input_grbi=awip3di${hour}.tm00_icwf - output_grb=xtrn.awp_icwf_${NET}${hour}.212 - parmcard=grib_icwf${NET}${hour} - parm="parm=KWBD" -# executable=tocgrib - executable=$TOCGRIB - DBNALERT_TYPE=GRIB_LOW - ;; - ######################################## - # 3-hour output NAM Grids - ######################################## - 212)input_grb=awip3d${hour}.tm00 - input_grbi=awip3di${hour}.tm00 - output_grb=xtrn.awp${NET}${hour} - parmcard=grib_meso${hour}.40 - parm="parm=KWBE" -# executable=tocgrib - executable=$TOCGRIB - DBNALERT_TYPE=GRIB_LOW - ;; - 215)input_grb=awip20${hour}.tm00 - input_grbi=awip20i${hour}.tm00 - output_grb=xtrn.awp${NET}${hour}.GRIB215 - parmcard=grib_meso${hour}.20 - parm="parm=KWBE" -# executable=tocgrib - executable=$TOCGRIB - DBNALERT_TYPE=GRIB_LOW - ;; - 216)input_grb=awipak${hour}.tm00 - input_grbi=awipaki${hour}.tm00 - output_grb=xtrn.awpak${NET}${hour} - parmcard=grib_mesoak${hour}.40 - parm="parm=KWBE" -# executable=tocgrib - executable=$TOCGRIB - DBNALERT_TYPE=GRIB_LOW - ;; - 217)input_grb=awp217${hour}.tm00 - input_grbi=awp217i${hour}.tm00 - output_grb=xtrn.awp${NET}${hour}.GRIB217 - parmcard=grib_mesoak${hour}.20 - parm="parm=KWBE" -# executable=tocgrib - executable=$TOCGRIB - DBNALERT_TYPE=GRIB_LOW - ;; - 237_off)input_grb=awp237${hour}.tm00 - input_grbi=awp237i${hour} - output_grb=xtrn.awp${NET}${hour}.237 - parmcard=grib_awp${NET}${hour}.237o - parm="parm=KWBE" -# executable=tocgrib - executable=$TOCGRIB - DBNALERT_TYPE=GRIB_LOW - ;; - icwf_off)input_grb=awip20${hour}.tm00_icwf - input_grbi=awip20i${hour}.tm00_icwf - output_grb=xtrn.awp_icwf_${NET}${hour} - parmcard=grib_icwfmeso${hour} - parm="parm=KWBE" -# executable=tocgrib - executable=$TOCGRIB - DBNALERT_TYPE=GRIB_LOW - ;; - 218g2)input_grb=awphys${hour}.grb2.tm00 - input_grbi="" - output_grb=grib2.awp${NET}${hour}.218 - parmcard=grib2_awp${NET}${hour}.218 -# executable=tocgrib2 - executable=$TOCGRIB2 - DBNALERT_TYPE=GRIB_LOW - ;; - 242g2)input_grb=awak3d${hour}.grb2.tm00 - input_grbi="" - output_grb=grib2.awp${NET}${hour}.242 - parmcard=grib2_awp${NET}${hour}.242 -# executable=tocgrib2 - executable=$TOCGRIB2 - DBNALERT_TYPE=GRIB_LOW - ;; - 218_icwf)input_grb=awip12${hour}.grb2.tm00_icwf - input_grbi="" - output_grb=grib2.awp${NET}${hour}.${GRID} - parmcard=grib2_awp${NET}${hour}.${GRID} -# executable=tocgrib2 - executable=$TOCGRIB2 - DBNALERT_TYPE=GRIB_LOW - ;; - 242_icwf)input_grb=awak3d${hour}.grb2.tm00_icwf - input_grbi="" - output_grb=grib2.awp${NET}${hour}.${GRID} - parmcard=grib2_awp${NET}${hour}.${GRID} -# executable=tocgrib2 - executable=$TOCGRIB2 - DBNALERT_TYPE=GRIB_LOW - ;; - esac - ;; - dgex)case $GRID in - 185)RUN=dgex_conus - input_grb=awpgrb2${GRID}${hour}.tm00 - input_grbi="" - output_grb=grib2.awpdgex${hour}.${GRID} - parmcard=grib2_awpdgex${hour}.${GRID} -# executable=tocgrib2 - executable=$TOCGRIB2 - DBNALERT_TYPE=GRIB_LOW - ;; - 186)RUN=dgex_alaska - input_grb=awpgrb2${GRID}${hour}.tm00 - input_grbi="" - output_grb=grib2.awpdgex${hour}.${GRID} - parmcard=grib2_awpdgex${hour}.${GRID} -# executable=tocgrib2 - executable=$TOCGRIB2 - DBNALERT_TYPE=GRIB_LOW - ;; - 185_icwf)RUN=dgex_conus - input_grb=awpgrb2185${hour}.tm00_icwf - input_grbi="" - output_grb=grib2.awpdgex${hour}.${GRID} - parmcard=grib2_awpdgex${hour}.${GRID} -# executable=tocgrib2 - executable=$TOCGRIB2 - DBNALERT_TYPE=GRIB_LOW - ;; - 186_icwf)RUN=dgex_alaska - input_grb=awpgrb2186${hour}.tm00_icwf - input_grbi="" - output_grb=grib2.awpdgex${hour}.${GRID} - parmcard=grib2_awpdgex${hour}.${GRID} -# executable=tocgrib2 - executable=$TOCGRIB2 - DBNALERT_TYPE=GRIB_LOW - ;; - esac - ;; - aqm) - case $GRID in - 227)input_grb=grib2.227 - input_grbi="" - output_grb=grib2.awpaqm.${GRID} - parmcard=grib2_awpaqm.227.${cycle} -# executable=tocgrib2 - executable=$TOCGRIB2 - DBNALERT_TYPE=GRIB_LOW - ;; - 227_3X)input_grb=grib2_3x.227 - input_grbi="" - output_grb=grib2.awpaqm_3x.${GRID} - parmcard=grib2_awpaqm_3x.227.${cycle} -# executable=tocgrib2 - executable=$TOCGRIB2 - DBNALERT_TYPE=GRIB_LOW - ;; - 227_5X)input_grb=grib2_5x.227 - input_grbi="" - output_grb=grib2.awpaqm_5x.${GRID} - parmcard=grib2_awpaqm_5x.227.${cycle} -# executable=tocgrib2 - executable=$TOCGRIB2 - DBNALERT_TYPE=GRIB_LOW - ;; - esac - ;; - sref)input_grb=pgrb${GRID}.${type}_3hrly.grib2 - input_grbi="" - output_grb=grib2.t${cyc}z.awipsref${GRID}.${type} - parmcard=grib2_awpsref${GRID}.${type} -# executable=tocgrib2 - executable=$TOCGRIB2 - DBNALERT_TYPE=NTC_LOW - ;; - ruc)RUN=ruc2 - input_grb=pgrb13f${hour}.grib2 - input_grbi="" - output_grb=grib2.t${cyc}z.awpruc13f${hour} - parmcard=grib2_awpruc13f${hour} -# executable=tocgrib2 - executable=$TOCGRIB2 -# DBNALERT_TYPE=NTC_LOW - DBNALERT_TYPE= - ;; - esac - - executable_name=`basename $executable` - - ############################## - # Copy Input Field to $DATA - ############################## - - if test ! -f $input_grb - then - cp $COMIN/${RUN}.${cycle}.$input_grb $input_grb - fi - - if test ! -f $COMIN/${RUN}.${cycle}.$input_grbi - then -# if test $executable != "tocgrib2" - if test $executable_name != "tocgrib2" - then -# $EXECutil/grbindex $input_grb $input_grbi - $GRBINDEX $input_grb $input_grbi - else - input_grbi="" - fi - else - cp $COMIN/${RUN}.${cycle}.$input_grbi $input_grbi - fi - - ############################## - # Create AWIPS GRIB data - ############################## - - export pgm=$executable - . prep_step - export FORT11="$input_grb" - export FORT31="$input_grbi" - export FORT51="$output_grb" - - startmsg - -# $executable < $PARMshared/$parmcard $parm >> $pgmout 2>errfile - $executable < ${UTILgfs}/parm/$parmcard $parm >> $pgmout 2>errfile -# $EXECutil/$executable < $PARMutil/$parmcard $parm >> $pgmout 2>errfile -# export err=$?;err_chk - - ############################## - # Post Files to COMOUTwmo - ############################## - - if test "$SENDCOM" = 'YES' - then - cp $output_grb $COMOUTwmo/$output_grb.$job - - ############################## - # Distribute Data - ############################## - - if [ "$SENDDBN" = 'YES' -o "$SENDAWIP" = 'YES' ] ; then - $DBNROOT/bin/dbn_alert $DBNALERT_TYPE $NET $job $COMOUTwmo/$output_grb.$job - else - msg="File $output_grb.$job not posted to db_net." - postmsg "$jlogfile" "$msg" - fi - fi - - msg="Awip Processing ${hour} hour completed normally" - postmsg "$jlogfile" "$msg" - -done - -exit diff --git a/util/ush/ml7_slm30g.sh b/util/ush/ml7_slm30g.sh deleted file mode 100755 index 02b2a53a40..0000000000 --- a/util/ush/ml7_slm30g.sh +++ /dev/null @@ -1,241 +0,0 @@ -#!/bin/ksh - -# -# Script history log: -# 1999-05-01 Mark Iredell -# 2000-02-14 S Moorthi -# 2001-12-14 J Alpert (*j*) -# 2004-05-12 J Alpert (*j*) fix for E-W gaussian grid pt shift -# 2004-12-06 J Alpert (*j*) script input settings for spect filter -# 2005-03-21 J Alpert (*j*) Added GrumbineICE to orog/slm... -# 2011-12-xx S Moorthi Added unfiltered orography and linear grids -# 2014-05-20 F YANG reorganized to include in GFS util directory -# -# W/Lott & Miller terrain principal coord. (*j*) -# -#Usage: ml7_slm30g.sh slmgb orogb mtnvar14 nlon nlat jcap filter1 filter2 mtnres -# Normally: filter1~1/3 ((jcap/3)-1)) -# Normally: filter2~jcap+2)) -# Normally: mtnres=8 minute only (do not use =4, =2 except at own risk) -# now =1 is 30" others are turned off. see below -# New run mtnlm7 for mtnres=1 set for 30" -# script changed like ml4b for spect filter input, otherwise same as ml2b -# Input script fortran positional parameters: -# 1 output sea-land mask GRIB file -# 2 output orography GRIB file -# 3 output 14-field mountain variance file -# 4 number of Gaussian longitudes -# 5 number of Gaussian latitudes -# 6 spectral triangular truncation -# 7 Envelope orography factor -# 8 Begining latitude (used only for nongaussian grid - -# used only for switching north/south) -# 9 Mountain data resolution -# -# Imported Shell Variables: -# WRKDIR working directory -# defaults to a directory that is made, used and deleted -# FIXDIR fix directory -# defaults to /gloptmp/fix -# TERRAINSORC terrain source file -# defaults -# now this defaults to the local dir -# LONSPERLAT input lonsperlat text file (if it exists) -# defaults to $FIXDIR/global_lonsperlat.t$6.txt -# VERBOSE verbose flag (YES or NO) -# defaults to NO -# -# Modules and files referenced: -# scripts : /global/save/wx23ja/bin/mkwrkdir -# -# source : ${TERRAINSORC} or -# ops(20060822)w/GICE -# -# input data : /ptmp/wx23ja/terr05/markr/gtopo30_gg.fine output array -# /global/noscrub/wx23ja/terr05/markr/gtopo30_gg.fine -# about 2GB fort.235 -# /gloptmp/fix/global_lonsperlat.t$6.txt -# -# output data: $1 -# $2 -# $3 -# -# scratch : ${WRKDIR}/terrain00.xd -# ${WRKDIR}/fort.11 -# ${WRKDIR}/fort.12 -# ${WRKDIR}/fort.13 -# ${WRKDIR}/fort.14 -# ${WRKDIR}/fort.20 -# ${WRKDIR}/fort.51 -# ${WRKDIR}/fort.52 -# ${WRKDIR}/fort.53 -# ${WRKDIR}/fort.54 -# ${WRKDIR}/fort.55 -# ${WRKDIR}/fort.56 -# ${WRKDIR}/fort.57 -# ${WRKDIR}/fort.71 -# -# Remarks: -# -# Condition codes -# 0 - no problem encountered -# >0 - some problem encountered -# -# Attributes: -# Language: POSIX shell -# Machine: IBM SP -# -#### - -################################################################################ -# Check arguments -if [[ $# -ne 13 ]] ; then - echo Usage: $0 slmgb orogb mtnvar14 IM JM NM filter1 filter2 MTNRES orogb_uf oro_bin oro_bin oro_bin_uf slm_bin >&2 - exit 1 -fi -# -# VERBOSE = YES means debug mode -# -# export VERBOSE=${VERBOSE:-"NO"} -export VERBOSE=${VERBOSE:-"YES"} -if [[ "$VERBOSE" = "YES" ]];then - echo $(date) EXECUTING $0 $* >&2 - set -x -fi -pwd=$(pwd) -echo $pwd -typeset -L1 l1 -slmgb=$1 -l1=$slmgb ; [[ $l1 = / || $l1 = ~ ]] || slmgb=$pwd/$slmgb -orogb=$2 -l1=$orogb ; [[ $l1 = / || $l1 = ~ ]] || orogb=$pwd/$orogb -mtnvar14=$3 -l1=$mtnvar14 ; [[ $l1 = / || $l1 = ~ ]] || mtnvar14=$pwd/$mtnvar14 -nlon=$4 -nlat=$5 -jcap=$6 -#### efac=$7 -#### blat=$8 -efac=0 -blat=0 -#### export NF1=${NF1:-$(($jcap+1))} -#### export NF2=${NF2:-$(($jcap+2))} -export NF1=${7:-$(($jcap+1))} -export NF2=${8:-$(($jcap+2))} -export mtnres=${9:-"8"} -orogb_uf=${10:-""} -oro_bin=${11:-""} -oro_bin_uf=${12:-""} -slm_bin=${13:-""} -l1=$orogb_uf ; [[ $l1 = / || $l1 = ~ ]] || orogb_uf=$pwd/$orogb_uf -l1=$oro_bin ; [[ $l1 = / || $l1 = ~ ]] || oro_bin=$pwd/$oro_bin -l1=$oro_bin_uf ; [[ $l1 = / || $l1 = ~ ]] || oro_bin_uf=$pwd/$oro_bin_uf -l1=$slm_bin ; [[ $l1 = / || $l1 = ~ ]] || slm_bin=$pwd/$slm_bin -NR=0 - -echo "Usage: $0 $slmgb $orogb $mtnvar14 $nlon $nlat $jcap $NF1 $NF2 $MTNRES $orogb_uf" -echo " efac=$efac blat=$blat NF1=$NF1 NF2=$NF2 " -echo " _______________________________________________ " - -# -# file names for Prin Coord dataset grib output -# -thetagb=thetagb -l1=$thetagb ; [[ $l1 = / || $l1 = ~ ]] || thetagb=$pwd/$thetagb -gammagb=gammagb -l1=$gammagb ; [[ $l1 = / || $l1 = ~ ]] || gammagb=$pwd/$gammagb -sigmagb=sigmagb -l1=$sigmagb ; [[ $l1 = / || $l1 = ~ ]] || sigmagb=$pwd/$sigmagb -vargb=vargb -l1=$vargb ; [[ $l1 = / || $l1 = ~ ]] || vargb=$pwd/$vargb -elvmaxgb=elvmaxgb -l1=$elvmaxgb;[[ $l1 = / || $l1 = ~ ]] || elvmaxgb=$pwd/$elvmaxgb - -# -export WRKDIR=${WRKDIR:-${PTMP:-/ptmpp2}/$LOGNAME/terr_wrkdir$$} - -export lin=${lin:-""} -export BASEDIR=${UTILDIR:-/global/save/emc.glopara/svn/gfs/trunk/para/util} -export NWPROD=${NWPROD:-/nwprod} -export FIXDIR=${FIXDIR:-$NWPROD/fix} -export LONSPERLAT=${LONSPERLAT:-$FIXDIR/global_lonsperlat.t${jcap}$lin.txt} -export TERRAINEXEC=${TERRAINEXEC:-$BASEDIR/exec/terrain.x} -################################################################################ - -if [ ! -d $WRKDIR ] ; then - export MKWRKDIR=YES - mkdir -p $WRKDIR -fi -cd $WRKDIR - -FIX_TERR=${FIX_TERR:-$BASEDIR/fix} -MTNDIR=${MTNDIR:-$FIX_TERR} -MTN_SLM=${MTN_SLM:-TOP8M_slm.80I1.asc} -HIRES_TERR=${HIRES_TERR:-$FIX_TERR/thirty.second.antarctic.new.bin} -FINE_TERR=${FINE_TERR:-$FIX_TERR/gtopo30_gg.fine} -LANDCOVER30=${LANDCOVER30:-$FIX_TERR/landcover30.fixed} -slm_bin=${slm_bin:-SLM.T$jcap} -oro_bin=${oro_bin:-ORO.T$jcap} -oro_bin_uf=${oro_bin_uf:-ORU.T$jcap} - -ln -fs $MTNDIR/$MTN_SLM fort.14 -ln -fs $HIRES_TERR fort.15 -ln -fs $LONSPERLAT fort.20 -ln -fs $slm_bin fort.51 -ln -fs $oro_bin fort.52 -ln -sf $mtnvar14 fort.53 -ln -fs ORS.T$jcap fort.54 -ln -fs $oro_bin_uf fort.55 -ln -sf $slmgb fort.56 -ln -sf $orogb fort.57 -ln -sf $thetagb fort.58 -ln -sf $gammagb fort.59 -ln -sf $sigmagb fort.60 -ln -sf $vargb fort.61 -ln -sf $elvmaxgb fort.62 -ln -sf THETA.T$jcap fort.66 -ln -sf GAMMA.T$jcap fort.67 -ln -sf SIGMA.T$jcap fort.68 -ln -sf mtn.T$jcap.ieee fort.71 -ln -fs $orogb_uf fort.72 -ln -fs $FINE_TERR fort.235 -ln -fs $LANDCOVER30 landcover30.fixed -ln -fs $a_ocean_mask fort.25 - -#export OMP_NUM_THREADS=1 -export MP_COREFILE_FORMAT=lite - -echo " mtnres nlon nlat jcap NR NF1 NF2 efac blat" -echo $mtnres $nlon $nlat $jcap $NR $NF1 $NF2 $efac $blat -echo " exec located: $x " -echo " EXECUTION BEGINS " -echo $mtnres $nlon $nlat $jcap $NR $NF1 $NF2 $efac $blat | $TERRAINEXEC - -ret=$? -if [[ "$VERBOSE" = "YES" ]] ; then - echo ret=$ret -fi - -# copy files from working dir to present -#cp -p $WRKDIR/m* $local_dir/. - -# this will get the mtnvar_14 and mtn.ieee file for grads use -# the ...gb files are present directly - from starting local dir. -# the other files working files are left to be copied by the user. -# Remove working directory - -if [[ "$VERBOSE" = "YES" ]] ; then - echo $pwd - ls -l - echo " ml7_slm30g.sh: setting MKWRKDIR = NO " - echo " - not deleting working dir $WRKDIR " - MKWRKDIR=NO -fi -# -cd $pwd -[[ $MKWRKDIR = YES ]] && rm -rf $WRKDIR -set +x -if [[ "$VERBOSE" = "YES" ]];then - echo " $(date) EXITING $0 with return code $ret >&2 " -fi -exit $ret diff --git a/util/ush/month_name.sh b/util/ush/month_name.sh deleted file mode 100755 index 48437e21d5..0000000000 --- a/util/ush/month_name.sh +++ /dev/null @@ -1,112 +0,0 @@ -#!/bin/ksh - -#################################################################### -# -# SCRIPT: month_name.sh -# -# This script returns the name/abreviation of a month -# in a small text file, month_name.txt. It also echos the -# name/abreviation to stdout. The form of the returned -# name/abreviation is specified by the script arguments. -# -# USAGE: ./month_name.sh < month > < monthspec> -# -# EXAMPLE: ./month_name.sh 5 MON -# -# month spec contents of month_name.txt -# ----------- ------ ---------------------------- -# -# 6/06 Mon Jun -# 8/08 Month August -# 9/09 MON SEP -# 11 MONTH NOVEMBER -# -# -# Note: Variables may be assigned the value of the returned name -# by either of the following methods: -# -# MM=`cat month_name.txt` after executing month_name.sh -# - OR - -# MM=`month_name.sh 5 MON` (for example) -# -# -# -# HISTORY: 07/08/2005 - Original script -# -# -#################################################################### - - - typeset -Z2 month_num - - - month_num=$1 - month_spec=$2 - - case ${month_num} in - - 01) Mon=Jan - Month=January ;; - - 02) Mon=Feb - Month=February ;; - - 03) Mon=Mar - Month=March ;; - - 04) Mon=Apr - Month=April ;; - - 05) Mon=May - Month=May ;; - - 06) Mon=Jun - Month=June ;; - - 07) Mon=Jul - Month=July ;; - - 08) Mon=Aug - Month=August ;; - - 09) Mon=Sep - Month=September ;; - - 10) Mon=Oct - Month=October ;; - - 11) Mon=Nov - Month=November ;; - - 12) Mon=Dec - Month=December ;; - - esac - - - if [ ${month_spec} = Mon ]; then - - echo ${Mon} - echo ${Mon} > month_name.txt - - elif [ ${month_spec} = Month ]; then - - echo ${Month} - echo ${Month} > month_name.txt - - elif [ ${month_spec} = MON ]; then - - MON=`echo ${Mon} | tr [a-z] [A-Z]` - echo ${MON} - echo ${MON} > month_name.txt - - elif [ ${month_spec} = MONTH ]; then - - MONTH=`echo ${Month} | tr [a-z] [A-Z]` - echo ${MONTH} - echo ${MONTH} > month_name.txt - - fi - - - diff --git a/util/ush/overdate.sigma.sh b/util/ush/overdate.sigma.sh deleted file mode 100755 index fdc8e35052..0000000000 --- a/util/ush/overdate.sigma.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh -# This script changes the date of a sigma or surface file -if [[ $# -lt 2 ]];then - echo Usage: $0 yyyymmddhh sigma.in [sigma.out] - exit 1 -fi -d=$1 -[[ $d > 0000000000 && $d < 9999999999 ]]||exit 2 -i=$2 -[[ -s $i ]]||exit 2 -o=${3:-$i} -if [ "$DATA" != "" ] -then - t=$DATA/tmp$$ -else - t=/ptmpp1/tmp$$ -fi -export XLFRTEOPTS="unit_vars=yes" -export XLFUNIT_11="$i" -export XLFUNIT_51="$t" -echo $d|/nwprod/util/exec/overdate.sigma ||exit 3 -mv $t $o ||exit 3 diff --git a/util/ush/reduced_gaussian_grid.sh b/util/ush/reduced_gaussian_grid.sh deleted file mode 100755 index ee4d42c836..0000000000 --- a/util/ush/reduced_gaussian_grid.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh -# --------------------------------------------------------------------- -# author: Henry Juang date: Feb 14, 2013 -# purpose: Use to create Gaussian latitudes and reduced grid number for -# all latitudes. The ouput is only north hemisphere, for the -# Gaussian latitudes over south hemisphere are mirror image the -# values of north hemisphere except with negative sign. For -# the reduced grid number for south hemisphere is mirror -# image of north hemisphere. -# usage: to run this script, provide following -# export UTIL=/nwprod/util -# export JCAP=1148 -# export LONF=2304 -# export LATG=1152 -# export OUTD=/tmp/reduce -# then run script -# $UTIL/ush/reduced_gaussian_grid.sh -# note: make sure you have FFTable LONF, which you can refer to -# Acceptable_Lengths_for_the_Transforms.pdf -# in $UTIL/sorc/reduced_gaussian_grid.fd -# --------------------------------------------------------------------- - -set -ex - -JCAP=${JCAP:-1148} -LONF=${LONF:-2304} -LATG=${LATG:-1152} -NUMREDUCE=4 -echo "$JCAP $LONF $LATG $NUMREDUCE" >inp.$$ - -UTIL=${UTIL:-/gpfs/t3/global/save/wx23hh/2013/gfs/ticket48/util} -OUTD=${OUTD:-/gpfs/t3/global/save/wx23hh/2013/gfs/ticket48/util/fix} -pgm=reduced_gaussian_grid.exec -$UTIL/exec/$pgm /dev/null 2>&1 - mkdir -m 775 -p $COMOUTwmo >/dev/null 2>&1 - jlogfile=$DATA/snd2forgn_log - reqid=${$} - PID=$$ - JOB=$LOGNAME - model=test - export PID - pgmout=output.$PID - jobid="${JOB}.o${reqid}" - USHutil=${NWROOT}/util/ush - UTILhome="$5" - if test $# -eq 6 - then - SENDDBN=NO - else - SENDDBN=NO - fi - export model jlogfile jobid reqid COMOUTwmo pgmout - export JOB DATA PID - cd $DATA - - - # run setup to initialize working directory and utility scripts - - # sh $USHutil/setup.sh - - PATH=$PATH:. - export PATH - -# !!!!!!!!!!!!! ____________ END CHECK OUT SECTION __________ !!!!!!!! -else - -# check to see if $SENDDBN is missing - - - if [ -z "$SENDDBN" ] ; then - SENDDBN=NO - export SENDDBN - fi - set +x -fi -set -x - -export DBNROOT=${DBNROOT:-/gpfs/a/nco/dbnet} -# load input args - -TYPE="$1" -ttype=$TYPE - -outfil="$2" -flg="$3" -INFILE="$4" -set -x -export filename=`basename ${INFILE}` -export FLG=`echo $flg | tr '[a-z]' '[A-Z]' ` -export CONCARD=card$flg{$$} - -# get the number of characters in TYPE ! - -NUM=${#TYPE} - -# get the number of sub types in TYPE! - -numprt=`echo $TYPE | awk -F_ '{print NF}'` - -if [ $numprt -gt 1 ] -then - WASNCDC=NO - WASPWWB=NO - -# remove the under score separators from $TYPE. - - newstr="" - group=`echo $TYPE \ | awk -F_ '{for(i=1;i<=NF;i++) \ - {if(i$DATA/sndfrc - fi - else - set -x - msg="snd2forgn testing, $SUBTYP $filename not sent!" - set +x - - fi - fi - snd=NO - done - -# have removed all the special cases ! - - echo "WASNCDC=$WASNCDC !" - echo "WASPWWB=$WASPWWB !" - - - if [ -z "$newstr" ] ; then - echo " newstr > is empty < will exit!" - postmsg "$jlogfile" "$msg" - exit - fi - ttype=${newstr} - echo "$ttype is the remaining TYPE flag!" - -elif [ $numprt -eq 1 ] -then - echo "There is only one type= ${TYPE}!" - -# check for the special cases: -# NCDC and PWWB ! - - - case $TYPE in - "NCDC") - WASNCDC=YES - -# THIS file is to go to NCDC - - $USHutil/sndncdc ${outfil} ${INFILE} - - echo "$TYPE was only NCDC so EXIT!" - exit 0 - ;; - "PWWB") - -# This file is to be printed at the WWB - - WASPWWB=YES - smember=sndfaxwwb - export smember - $smember ${INFILE} - - echo "$TYPE was only PWWB so EXIT!" - exit 0 - ;; - "AFOS") - snd=NO - ;; - "AWIP") - snd=YES - ;; - "FAXX") - snd=YES - ;; - "TRAN") - snd=YES - ;; - "XTRAN") - snd=YES - ;; - *) - esac - if test "$snd" = 'YES' - then - - if test "$SENDDBN" = 'YES' - then - $DBNROOT/bin/dbn_alert $TYPE $2 $3 ${INFILE} - export istat=$? - echo dbn_alert: Ended with return code = $istat - if test "$istat" = 0 - then - msg="Posting $filename with $TYPE!" - else - msg="ERROR FROM dbn_alert = $istat, Posting $filename with ${TYPE}!" - sndfrc=1 - echo $sndfrc >$DATA/sndfrc - fi - else - msg="snd2forgn testing, ${TYPE} $filename not sent!" - fi - postmsg "$jlogfile" "$msg" - snd=NO - exit 0 - fi -else - msg "ERROR TYPE MISSING BECAUSE $numprt is ZERO!" - postmsg "$jlogfile" "$msg" - exit -fi - - -JAG=${ttype} - echo "${JAG} is the TYPE flag" -export JAG - - -cat < $CONCARD -${JAG} is the TYPE flag -strt1EOH - cat $CONCARD - actn="Copying" - -#______________________________________________________________ -# -# check to see if this a nmc 6bit file or is to go to -# nhc-hp13. -# -#______________________________________________________________ - - -istat=`egrep -c "NHC_6BIT" ${CONCARD}` - if test "$istat" -ne 0 - then - - -# this a nmc6bit file that is only to be sent to nhc-hp13. -# - actn="Sending" - echo "$actn a nmc6bit file with $JAG." - - base=`basename ${outfil}` - FORFIL=/dbnet/data/nmc6bit/$base - - else - istat=`egrep -c "AWPS_RB|OSO" ${CONCARD}` - if test "$istat" -ne 0 - then - FORFIL=$outfil - actn="Posting" - if test "$JAG" = "AWPS_RB" - then - JAG="GRIB" - fi - - else - actn="Copying" - FORFIL=$outfil - fi - fi - -#echo I should now calldbn_alert! -istat=0 - -export INFILE -export FORFIL -export JAG - -#______________________________________________________________ -# call dbn_alert to move file to foreign host -#______________________________________________________________ - -if test "$SENDDBN" = 'YES' -then - $DBNROOT/bin/dbn_alert $JAG $FORFIL $FLG $INFILE - - istat=$? - export istat - export actn - echo dbn_alert: Ended with return code = $istat -# -#______________________________________________________________ -# make message for jlogfile. -#_______________________________________________________________ -# - if test "$istat" = 0 - then - if [ "$actn" = "Posting" ] - then - msg="$actn $filename with $JAG !" - - elif [ "$actn" = "Posting-copying" ] - then - msg="POSTING file to OSO and COPYING into $FORFIL!" - elif [ "$actn" = "Copying" ] - then - msg="COPYING into file: $FORFIL!" - elif [ "$actn" = "Sending" ] - then - msg="$actn a nmc6bit file with $JAG." - else - msg="COPYING into file: $FORFIL!" - fi - else - msg="ERROR FROM dbn_alert = $istat, trying to $actn with $JAG ! " - sndfrc=1 - echo $sndfrc >$DATA/sndfrc - fi -else - msg="snd2forgn testing, $JAG $FORFIL $FLG $INFILE not sent!" -fi - postmsg "$jlogfile" "$msg" - -rm ${CONCARD} -exit 0 diff --git a/util/ush/snd2forgntbl.sh b/util/ush/snd2forgntbl.sh deleted file mode 100755 index 6f04631e08..0000000000 --- a/util/ush/snd2forgntbl.sh +++ /dev/null @@ -1,70 +0,0 @@ -# UTILITY SCRIPT NAME : snd2forgntbl.sh -#______________________________________________________________________________ -# NAME : snd2forgntbl.sh -# History : 1997-03-04 Paula Stone -# MODIFIED : 1997-03-04 Paula Stone Remove -i from grep. Because -# sometimes gets more than one record. -# : 1999-12-02 Peter Henrichsen modified to run on the IBM SP. -# : 2000-01-20 Peter Henrichsen modify to pass sndfrc to script -# snd2forgn and to use USHutil -# -# Abstract: This utility script sends a file via snd2forgn -# using the ftype and foreign fields defined in the -# graph_snd2forgn.names table. -# Variables to be exported to this script: -# FIXgraph - where graph_snd2forgn.names resides) -# JOB - name of this job. -# -# Location : This script is found on hp36 as: -# : /tmp_mnt/export/sgi73/peterhen/util/scripts/ibm/snd2forgntbl.sh -# : on ncosp as: -# : /nfsuser/g02/wx12ph/util/ush/snd2forgntbl.sh or -# /nwprod/util/ush/snd2forgntbl.sh -# -# Input: three variables are passed through the call -# 1 ... sendkey -- key used in snd2forgn.names table. -# 2 ... filename -- name of file on local host. -# 3 ... dirname -- name of directory where file resides. -# - -set -x - -if test $# -ne 3 -then - echo "Error: usage snd2table.sh " - exit -fi - -sendkey=$1 -filename=$2 -dirname=$3 -echo Search snd2forgn table for $sendkey -# grep $sendkey $FIXshared/graph_snd2forgn.names >> sendline -grep $sendkey ${UTILgfs}/fix/graph_snd2forgn.names >> sendline -if [ -s sendline ] -then - ftype=`awk '{print $2}' sendline` - foreign=`awk '{print $3}' sendline` - sndfrc=0 - echo $sndfrc >$DATA/sndfrc - - - snd2forgn $ftype $foreign $job $dirname/$filename - read sndfrc < $DATA/sndfrc - - if test $sndfrc -eq '0' - then - msg="snd2forgntbl.sh successfully ended!" - postmsg "$jlogfile" "$msg" - else - msg="ERROR $filename NOT POSTED!" - postmsg "$jlogfile" "$msg" - msg="snd2forgn: ABNORMAL STOP = $sndfrc!:" - postmsg "$jlogfile" "$msg" - fi -else - echo Sendkey $sendkey is not in the snd2forgn.names table - exit -1 -fi -rm sendline -exit diff --git a/util/ush/sndncdc b/util/ush/sndncdc deleted file mode 100755 index 26eb3304e3..0000000000 --- a/util/ush/sndncdc +++ /dev/null @@ -1,135 +0,0 @@ -#!/bin/ksh -USAGE="usage: sndncdc " -SMEMBER=sndncdc -VERS="version: ${SMEMBER} 2000-02-02 09:40L " -#______________________________________________________________________________ -# NAME : sndncdc -# Author : Peter Henrichsen -# Purpose : This script calls dbn_alert to post a nmc6bit file for NCDC -# : -# : -# History : 1999-12-03 Peter Henrichsen -# 2000-01-21 Peter Henrichsen modified to change "job" arg -# to lower case. -# 2000-01-21 Peter Henrichsen modified to put all nmc6bit files -# into ${COMROOT}/foreign/ncdc -# -# -# Location : This script is found on hp36 as: -# : /tmp_mnt/export/sgi73/peterhen/util/scripts/ibm/sndncdc -# : & on ncosp as -# : ${NWROOT}/util/ush/sndncdc or -# : /nfsuser/g02/wx12ph/util/ush/sndncdc -# -# Remarks : This script assumes that the following values have been -# exported by the parent shell: -# job JOBID SENDDBN jlogfile model COMOUTwmo. -# -# : Arg1 ncdcbasename this is the ncdc base name to which -# the extenion of CCYYMMDDHH will be added. -# -# : Arg2 (local-file) -# This is the full path of the local file to be sent -# to NCDC. -# -#_______________________________________________________________________________ -# -#_______________________________________________________________________________ -# -cd $DATA -print "$VERS" -integer istat - -if test $# -ge 2 -then - echo "sndncdc has $# args!" - -else - echo "Error sndncdc needs 2 args!" - echo "Error: $USAGE" - exit -fi -outfil="$1" -INFILE="$2" - set -x -export subdir=`basename ${COMOUTwmo}` -if test "$subdir" = 'faxx' -then - export dir=${COMROOT}/foreign/ncdc -else - export dirn=`dirname ${HOMEutil}` - if test "$dirn" = '${NWROOT}' - then - export dir=${COMROOT}/foreign/ncdc - else - export dir=$HOMEutil${COMROOT}/foreign/ncdc - fi - set +x - -fi - - -# get the year month day and z time to append to end of the file that is to -# go to NCDC $outfil - - YMDZ=`date -u +"%Y%m%d%H"` - -# this makes sure that the new file is copied into ${COMROOT}/foreign/faxx ! - - - ncdcfil=`echo ${outfil} | awk 'BEGIN{FS="."} {print $1}'` - - if [ -z "${dir}" ] ; then - cp ${INFILE} ${dir}/${ncdcfil}.${YMDZ} - else - set -x - mkdir -m 775 -p $dir - cp ${INFILE} ${dir}/${ncdcfil}.${YMDZ} - set +x - fi - - -istat=0 - -# check to see if $job is missing - - if [ -z "$job" ] ; then - job=missgn - export job - fi - # check to see if $model is missing - - - if [ -z "$model" ] ; then - model=unkown - export model - fi -#set -x -#______________________________________________________________ -# call dbn_alert to send file to NCDC -#______________________________________________________________ - set -x - if test "$SENDDBN" = 'YES' - then - - $DBNROOT/bin/dbn_alert \ - NCDC ${model} ${job} ${dir}/${ncdcfil}.${YMDZ} - istat=$? - echo dbn_alert: Ended with return code = $istat - if test "$istat" = 0 - then - if test "$dir" = '${COMROOT}/foreign/ncdc' - then - msg="SENT ${dir}/${ncdcfil}.${YMDZ} to NCDC !" - else - msg="SENT ${ncdcfil}.${YMDZ} to NCDC !" - fi - else - msg="ERROR FROM dbn_alert = $istat, trying to send to NCDC!" - fi - else - msg="sndncdc testing, ${dir}/${ncdcfil}.${YMDZ} not sent!" - fi - postmsg "$jlogfile" "$msg" - set +x -exit diff --git a/util/ush/terrain.sh b/util/ush/terrain.sh deleted file mode 100755 index 9eecc991db..0000000000 --- a/util/ush/terrain.sh +++ /dev/null @@ -1,176 +0,0 @@ -#!/bin/ksh -set -x - -#-------------------------------------------------------------------------------- -# Create GFS orography, land-sea mask, mountain variance and other terrain features -# 2014.05 -- Source from .svnemc./projects/gfs/branches/moorthi/para/util/oro_etc -# 2014.05 -- F. YANG merged two scripts into one, reorganized for including this -# tool in GFS util directory. Currently only works on WCOSS. -# 2016.01 -- Shrivinas Moorthi, added output in binary format; added Cubic and -# Quadratic grid. -#-------------------------------------------------------------------------------- -# to execute the script, run either interactively or submit as a batch job -# /u/Fanglin.Yang/bin/sub_wcoss -a GFS-T2O -q dev2 -p 1/1/N -r 27000/1 -t 06:00:00 -o terrain.out terrain.sh -#-------------------------------------------------------------------------------- - -export WORKFLOW=${WORKFLOW:-/global/noscrub/emc.glopara/svn/gfs/q3fy17/gfs_workflow.v14.1.0/para} -export UTILDIR=$WORKFLOW/util -export GLOBAL_SHARED=${GLOBAL_SHARED:-/global/noscrub/emc.glopara/svn/gfs/q3fy17/global_shared.v14.0.0} -export FIXDIR=$GLOBAL_SHARED/fix/fix_am #lonsperlat dir - -export TERRAINSH=$UTILDIR/ush/ml7_slm30g.sh -export TERRAINEXEC=$UTILDIR/exec/terrain.x - -#export OCLSM=oclsm #use ocean land/sea mask option, must have txt file from ocean -#export TERRAINEXEC=$UTILDIR/exec/terrain_oclsm.x - -export ptmp=/ptmpp1 -export RUNDIR=$ptmp/$LOGNAME/terrain -export SAVEDIR=$ptmp/$LOGNAME/terrain/save -mkdir -p $RUNDIR $SAVEDIR - -#--examples of quadratic grids -# jcap="62 126 170 190 254 382 574 878" -#--examples of linear grids -# jcap="L92 L126 L254 L382 L574 L878 L1148 L1534" -#--examples of Cubic Gris -# jcap="C1150 C1534" - -#---------------------------- -export jcaplist="L92 L126 L254 L382 L574 L670 L1534" -for jcapl in $jcaplist ; do -#---------------------------- - nc=$(echo $jcapl | wc -c) - fc=$(echo $jcapl | cut -c1-1) - if [ $fc == L ] ; then - export jcap=$(echo $jcapl | cut -c2-$((nc-1))) - echo ' Using linear grid for JCAP=' $jcap - elif [ $fc == Q ] ; then - export jcap=$(echo $jcapl | cut -c2-$((nc-1))) - echo ' Using quadratic grid for JCAP=' $jcap - elif [ $fc == C ] ; then - export jcap=$(echo $jcapl | cut -c2-$((nc-1))) - echo ' Using cubic grid for JCAP=' $jcap - else - export jcap=$jcapl - fi - echo $jcap - -export red_grd=YES #compute stats on reduced grid? -if [ $red_grd = YES ] ; then - export SUFIN='.rg' -else - export LONSPERLAT=/dev/null - export SUFIN="" -fi -# -#for no filter, set filt1=jcap+1 and filt2=filt1+1 - -#...................... -if [ $fc = L ] ; then -#...................... - if [ $jcap -eq 92 ] ; then - export lonb=192 ; export latb=94 ; export filt1=42 ; export filt2=64 - - elif [ $jcap -eq 126 ] ; then - export lonb=384 ; export latb=190 ; export filt1=84 ; export filt2=128 - - elif [ $jcap -eq 254 ] ; then - export lonb=512 ; export latb=256 ; export filt1=128 ; export filt2=172 - - elif [ $jcap -eq 382 ] ; then - export lonb=768 ; export latb=384 ; export filt1=256 ; export filt2=384 - - elif [ $jcap -eq 510 ] ; then - export lonb=1024 ; export latb=512 ; export filt1=384 ; export filt2=512 - - elif [ $jcap -eq 670 ] ; then - export lonb=1344 ; export latb=672 ; export filt1=384 ; export filt2=672 - - elif [ $jcap -eq 574 ] ; then - export lonb=1152 ; export latb=576 ; export filt1=384 ; export filt2=576 - - elif [ $jcap -eq 878 ] ; then - export lonb=1760 ; export latb=880 ; export filt1=384 ; export filt2=880 - - elif [ $jcap -eq 1148 ] ; then - export lonb=2304 ; export latb=1152 ; export filt1=384 ; export filt2=1148 - - elif [ $jcap -eq 1500 ] ; then - export lonb=3072 ; export latb=1536 ; export filt1=576 ; export filt2=$jcap - - elif [ $jcap -eq 1534 ] ; then - export lonb=3072 ; export latb=1536 ; export filt1=576 ; export filt2=$jcap - fi -#...................... -else -#...................... - if [ $jcap -eq 62 ] ; then - export lonb=192 ; export latb=94 ; export filt1=42 ; export filt2=64 -# export lonb=192 ; export latb=94 ; export filt1=64 ; export filt2=64 - - elif [ $jcap -eq 126 ] ; then - export lonb=384 ; export latb=190 ; export filt1=84 ; export filt2=128 - - elif [ $jcap -eq 170 ] ; then - export lonb=512 ; export latb=256 ; export filt1=128 ; export filt2=172 - - elif [ $jcap -eq 190 ] ; then - export lonb=576 ; export latb=288 ; export filt1=128 ; export filt2=192 - - elif [ $jcap -eq 254 ] ; then - export lonb=768 ; export latb=384 ; export filt1=192 ; export filt2=256 - - elif [ $jcap -eq 382 ] ; then - #export lonb=1152 ; export latb=576 ; export filt1=0 ; export filt2=0 - export lonb=1152 ; export latb=576 ; export filt1=256 ; export filt2=384 - - elif [ $jcap -eq 510 ] ; then - export lonb=1536 ; export latb=766 ; export filt1=384 ; export filt2=512 - - elif [ $jcap -eq 574 ] ; then - export lonb=1760 ; export latb=880 ; export filt1=384 ; export filt2=576 - - elif [ $jcap -eq 878 ] ; then - export lonb=2640 ; export latb=1320 ; export filt1=384 ; export filt2=880 - - elif [ $jcap -eq 1148 ] ; then - export lonb=3456 ; export latb=1728 ; export filt1=384 ; export filt2=1148 - fi -#...................... -fi -#...................... - -export lin=".$lonb.$latb" -export WRKDIR=$RUNDIR/terr_$jcap.$lonb.${latb} -mkdir -p $WRKDIR -cd $WRKDIR || exit 8 - -string=t$jcap.$lonb.${latb}$SUFIN -export slmgb=global_slmask.$string.grb -export orogb=global_orography.$string.grb -export orogb_uf=global_orography_uf.$string.grb -export mtnvar14=global_mtnvar.$string.f77 -export oro_bin=global_orography.$string.f77 -export oro_bin_uf=global_orography_uf.$string.f77 -export slm_bin=global_slmask.$string.f77 - - -#export FIX_TERR=$UTILDIR/fix -export FIX_TERR=/gpfs/hps/emc/global/noscrub/emc.glopara/svn/fv3gfs/fix/fix_orog -export MTNDIR=$FIX_TERR -export MTN_SLM=TOP8M_slm.80I1.asc -export HIRES_TERR=$FIX_TERR/thirty.second.antarctic.new.bin -export FINE_TERR=$FIX_TERR/gtopo30_gg.fine -export LANDCOVER30=$FIX_TERR/landcover30.fixed -export a_ocean_mask=$FIX_TERR/a_ocean_mask${lonb}x${latb}.txt - -$TERRAINSH $slmgb $orogb $mtnvar14 $lonb $latb $jcap $filt1 $filt2 14 $orogb_uf $oro_bin $oro_bin_uf $slm_bin> $WRKDIR/out_$jcap.out - -cp -p $WRKDIR/global_* $SAVEDIR/. -cp -p $FIXDIR/global_lonsperlat.t${jcap}.${lonb}.${latb}.txt $SAVEDIR/. -#---------------------------- -done -#---------------------------- -exit - diff --git a/util/ush/verfdate.sh b/util/ush/verfdate.sh deleted file mode 100755 index 414e4e0b96..0000000000 --- a/util/ush/verfdate.sh +++ /dev/null @@ -1,180 +0,0 @@ -#!/bin/ksh - -###################################################################### -# -# Script verfdate.sh takes a user specified PDY, time and forecast -# hour and computes a valid time. The valid time is passed to the -# program in a local file, verfdate.txt . -# -# USAGE: ${NWROOT}/util/ush/verfdate.sh -# -# EXAMPLE: ${NWROOT}/util/ush/verfdate.sh 20050807 12 48 -# -# -# The result can be accessed by: -# -# cat verfdate.txt | read fy fm fd valid dayvrf monvrf -# -# Where fy = 4-digit year ( eg. 2005 ) -# fm = 2-digit month ( eg. 03 ) -# fd = 2-digit day-of-month ( eg. 27 ) -# valid = 2-digit time of day ( eg. 06 ) -# dayvrf = name of valid day ( eg. FRI ) -# monvrf = name of valid month ( eg. JUN ) -# -# NOTE: This routine uses script ${NWROOT}/util/ush/finddate.sh -# -# -# History: 29 AUG 2005 Ralph Jones - Original version -# -# -####################################################################### - - - typeset -Z2 hr - -# Collect arguments - - PDY=$1 - hh=$2 - fhour=$3 - - -# Parse PDY - - yyyy=`echo $PDY | cut -c1-4` - mm=`echo $PDY | cut -c5-6` - dd=`echo $PDY | cut -c7-8` - - -# Check for invalid day - - case $mm in - 01|03|05|07|08|10|12) ndays=31 ;; - 02) ndays=28 - let mod4=yyyy%4 - if [ $mod4 -eq 0 ]; then - ndays=29 - fi ;; - 04|06|09|11) ndays=30 ;; - esac - - if [ $dd -gt $ndays ]; then - echo "\n\n The specified day, $dd, exceeds the number of days in month $mm \n" - echo " EXITING verfdate.sh \n" - exit - fi - - -# Compute number of days and verifying hour - - let term=fhour+hh - - let days=term/24 - if [ $term -lt 0 ]; then - let "days=-1+(term+1)/24" - fi - - - if [ $days -eq 0 ]; then - verfdate=$PDY - hour=$term - elif [ $days -gt 0 ]; then - verfdate=`finddate.sh $PDY d+$days` - let "hour=term-(days*24)" - else - let negdays=-1*days - verfdate=`finddate.sh $PDY d-$negdays` - let "hour=(negdays*24)+term" - fi - - hr=$hour - - - - fy=`echo $verfdate | cut -c1-4` - fm=`echo $verfdate | cut -c5-6` - fd=`echo $verfdate | cut -c7-8` - fday=$fd - if [ $fday -lt 10 ]; then - fday=`echo $fday | cut -c2` - fi - - - -# Find name of verification month - - case $fm in - 01) monvrf=JAN - pdays=0 ;; - 02) monvrf=FEB - pdays=31 ;; - 03) monvrf=MAR - pdays=59 ;; - 04) monvrf=APR - pdays=90 ;; - 05) monvrf=MAY - pdays=120 ;; - 06) monvrf=JUN - pdays=151 ;; - 07) monvrf=JUL - pdays=181 ;; - 08) monvrf=AUG - pdays=212 ;; - 09) monvrf=SEP - pdays=243 ;; - 10) monvrf=OCT - pdays=273 ;; - 11) monvrf=NOV - pdays=304 ;; - 12) monvrf=DEC - pdays=334 ;; - *) monvrf=UND - pdays=999 - echo "\n\n UNDEFINED MONTH-OF-YEAR: fm = $fm ABORTING \n\n" - exit ;; - esac - - let mod4=fy%4 - if [ $mod4 -eq 0 -a $fm -gt 2 ]; then - let pdays=pdays+1 - fi - - - case $fy in - 2006|2012|2017|2023|2034|2040|2045) day1=0 ;; - 2007|2018|2024|2029|2035|2046) day1=1 ;; - 2008|2013|2019|2030|2036|2041|2047) day1=2 ;; - 2014|2020|2025|2031|2042|2048) day1=3 ;; - 2009|2015|2026|2032|2037|2043) day1=4 ;; - 2010|2016|2021|2027|2038|2044|2049) day1=5 ;; - 2005|2011|2022|2028|2033|2039|2050) day1=6 ;; - esac - - -# Find day-of-week and day name of verification date - - let doy=pdays+fday-1 - let "dow=(doy+day1)%7" - - - case $dow in - 0) dayvrf=SUN ;; - 1) dayvrf=MON ;; - 2) dayvrf=TUE ;; - 3) dayvrf=WED ;; - 4) dayvrf=THU ;; - 5) dayvrf=FRI ;; - 6) dayvrf=SAT ;; - esac - - -# Create valid time label - - echo "$fy $fm $fd $hr $dayvrf $monvrf" | tee verfdate.txt - - echo "VALID ${hr}Z $dayvrf $fd $monvrf $fy" >> verfdate.txt - - - exit - diff --git a/util/ush/xlf_links.sh b/util/ush/xlf_links.sh deleted file mode 100755 index 6e37a2cf81..0000000000 --- a/util/ush/xlf_links.sh +++ /dev/null @@ -1,13 +0,0 @@ -set -a - -num=1;>xlflnk - -while [ $num -le 99 ] -do -echo "[ -n \"\$XLFUNIT_$num\" ] && ln -sf \$XLFUNIT_$num fort.$num" >>xlflnk -num=`expr $num + 1` -done - -chmod +x xlflnk; ./xlflnk; rm xlflnk -echo; echo `date` links.sh produced the following soft links: -echo; ls -ln fort.*; echo diff --git a/versions/build.hera.ver b/versions/build.hera.ver new file mode 100644 index 0000000000..ff85b1a801 --- /dev/null +++ b/versions/build.hera.ver @@ -0,0 +1,3 @@ +export stack_intel_ver=2021.5.0 +export stack_impi_ver=2021.5.1 +source "${HOMEgfs:-}/versions/build.spack.ver" diff --git a/versions/build.hercules.ver b/versions/build.hercules.ver new file mode 100644 index 0000000000..5513466631 --- /dev/null +++ b/versions/build.hercules.ver @@ -0,0 +1,3 @@ +export stack_intel_ver=2021.9.0 +export stack_impi_ver=2021.9.0 +source "${HOMEgfs:-}/versions/build.spack.ver" diff --git a/versions/build.jet.ver b/versions/build.jet.ver new file mode 100644 index 0000000000..ff85b1a801 --- /dev/null +++ b/versions/build.jet.ver @@ -0,0 +1,3 @@ +export stack_intel_ver=2021.5.0 +export stack_impi_ver=2021.5.1 +source "${HOMEgfs:-}/versions/build.spack.ver" diff --git a/versions/build.orion.ver b/versions/build.orion.ver new file mode 100644 index 0000000000..ff85b1a801 --- /dev/null +++ b/versions/build.orion.ver @@ -0,0 +1,3 @@ +export stack_intel_ver=2021.5.0 +export stack_impi_ver=2021.5.1 +source "${HOMEgfs:-}/versions/build.spack.ver" diff --git a/versions/build.s4.ver b/versions/build.s4.ver new file mode 100644 index 0000000000..a0aae51d87 --- /dev/null +++ b/versions/build.s4.ver @@ -0,0 +1,3 @@ +export stack_intel_ver=2021.5.0 +export stack_impi_ver=2021.5.0 +source "${HOMEgfs:-}/versions/build.spack.ver" diff --git a/versions/build.spack.ver b/versions/build.spack.ver new file mode 100644 index 0000000000..28c3a10185 --- /dev/null +++ b/versions/build.spack.ver @@ -0,0 +1,36 @@ +export spack_stack_ver=1.5.1 +export spack_env=gsi-addon +export python_ver=3.10.8 + +export cmake_ver=3.23.1 + +export gempak_ver=7.4.2 +export jasper_ver=2.0.32 +export libpng_ver=1.6.37 +export zlib_ver=1.2.13 +export esmf_ver=8.5.0 +export fms_ver=2023.02.01 +export cdo_ver=2.0.5 +export nco_ver=5.0.6 +export ncl_ver=6.6.2 + +export hdf5_ver=1.14.0 +export netcdf_c_ver=4.9.2 +export netcdf_fortran_ver=4.6.0 + +export bacio_ver=2.4.1 +export nemsio_ver=2.5.4 +export sigio_ver=2.3.2 +export w3emc_ver=2.10.0 +export bufr_ver=11.7.0 +export g2_ver=3.4.5 +export sp_ver=2.3.3 +export ip_ver=4.3.0 +export gsi_ncdiag_ver=1.1.2 +export g2tmpl_ver=1.10.2 +export crtm_ver=2.4.0 +export wgrib2_ver=2.0.8 +export grib_util_ver=1.3.0 +export py_netcdf4_ver=1.5.8 +export py_pyyaml_ver=5.4.1 +export py_jinja2_ver=3.1.2 diff --git a/versions/build.wcoss2.ver b/versions/build.wcoss2.ver new file mode 100644 index 0000000000..bb7ee6ac99 --- /dev/null +++ b/versions/build.wcoss2.ver @@ -0,0 +1,36 @@ +export PrgEnv_intel_ver=8.1.0 +export intel_ver=19.1.3.304 +export craype_ver=2.7.13 +export cray_mpich_ver=8.1.9 + +export cmake_ver=3.20.2 + +export python_ver=3.8.6 +export gempak_ver=7.14.1 +export jasper_ver=2.0.25 +export libpng_ver=1.6.37 +export zlib_ver=1.2.11 +export esmf_ver=8.3.0b09 +export pio_ver=2.5.2 +export fms_ver=2022.04 + +export hdf5_ver=1.10.6 +export netcdf_ver=4.7.4 + +export bacio_ver=2.4.1 +export w3nco_ver=2.4.1 +export nemsio_ver=2.5.2 +export sigio_ver=2.3.2 +export w3emc_ver=2.9.2 +export bufr_ver=11.7.0 +export g2_ver=3.4.5 +export sp_ver=2.3.3 +export ip_ver=3.3.3 +export wrf_io_ver=1.2.0 +export ncio_ver=1.1.2 +export ncdiag_ver=1.0.0 +export g2tmpl_ver=1.10.2 +export crtm_ver=2.4.0 +export wgrib2_ver=2.0.8 + +export upp_ver=10.0.8 diff --git a/versions/fix.ver b/versions/fix.ver new file mode 100644 index 0000000000..eb64f7b76f --- /dev/null +++ b/versions/fix.ver @@ -0,0 +1,22 @@ +#!/bin/bash +# Fix file subfolder versions + +export aer_ver=20220805 +export am_ver=20220805 +export chem_ver=20220805 +export cice_ver=20220805 +export cpl_ver=20230526 +export datm_ver=20220805 +export gdas_crtm_ver=20220805 +export gdas_fv3jedi_ver=20220805 +export gdas_gsibec_ver=20221031 +export glwu_ver=20220805 +export gsi_ver=20230911 +export lut_ver=20220805 +export mom6_ver=20220805 +export orog_ver=20230615 +export reg2grb2_ver=20220805 +export sfc_climo_ver=20220805 +export ugwd_ver=20220805 +export verif_ver=20220805 +export wave_ver=20230426 diff --git a/versions/run.hera.ver b/versions/run.hera.ver new file mode 100644 index 0000000000..43443ba715 --- /dev/null +++ b/versions/run.hera.ver @@ -0,0 +1,13 @@ +export stack_intel_ver=2021.5.0 +export stack_impi_ver=2021.5.1 + +export hpss_ver=hpss +export ncl_ver=6.6.2 +export R_ver=3.5.0 +export gempak_ver=7.4.2 + +#For metplus jobs, not currently working with spack-stack +#export met_ver=9.1.3 +#export metplus_ver=3.1.1 + +source "${HOMEgfs:-}/versions/run.spack.ver" diff --git a/versions/run.hercules.ver b/versions/run.hercules.ver new file mode 100644 index 0000000000..4bedeb1e96 --- /dev/null +++ b/versions/run.hercules.ver @@ -0,0 +1,10 @@ +export stack_intel_ver=2021.9.0 +export stack_impi_ver=2021.9.0 + +export ncl_ver=6.6.2 + +source "${HOMEgfs:-}/versions/run.spack.ver" + +# wgrib2 and cdo are different on Hercules from all the other systems +export wgrib2_ver=3.1.1 +export cdo_ver=2.2.0 diff --git a/versions/run.jet.ver b/versions/run.jet.ver new file mode 100644 index 0000000000..18a82cab4f --- /dev/null +++ b/versions/run.jet.ver @@ -0,0 +1,9 @@ +export stack_intel_ver=2021.5.0 +export stack_impi_ver=2021.5.1 + +export hpss_ver= +export ncl_ver=6.6.2 +export R_ver=4.0.2 +export gempak_ver=7.4.2 + +source "${HOMEgfs:-}/versions/run.spack.ver" diff --git a/versions/run.orion.ver b/versions/run.orion.ver new file mode 100644 index 0000000000..ee2f65523b --- /dev/null +++ b/versions/run.orion.ver @@ -0,0 +1,7 @@ +export stack_intel_ver=2022.0.2 +export stack_impi_ver=2021.5.1 + +export ncl_ver=6.6.2 +export gempak_ver=7.5.1 + +source "${HOMEgfs:-}/versions/run.spack.ver" diff --git a/versions/run.s4.ver b/versions/run.s4.ver new file mode 100644 index 0000000000..56817ef439 --- /dev/null +++ b/versions/run.s4.ver @@ -0,0 +1,6 @@ +export stack_intel_ver=2021.5.0 +export stack_impi_ver=2021.5.0 + +export ncl_ver=6.4.0-precompiled + +source "${HOMEgfs:-}/versions/run.spack.ver" diff --git a/versions/run.spack.ver b/versions/run.spack.ver new file mode 100644 index 0000000000..7045f2ed01 --- /dev/null +++ b/versions/run.spack.ver @@ -0,0 +1,27 @@ +export spack_stack_ver=1.5.1 +export spack_env=gsi-addon +export python_ver=3.10.8 + +export jasper_ver=2.0.32 +export libpng_ver=1.6.37 +export cdo_ver=2.0.5 +export nco_ver=5.0.6 + +export hdf5_ver=1.14.0 +export netcdf_c_ver=4.9.2 +export netcdf_fortran_ver=4.6.0 + +export bufr_ver=11.7.0 +export gsi_ncdiag_ver=1.1.2 +export g2tmpl_ver=1.10.2 +export crtm_ver=2.4.0 +export wgrib2_ver=2.0.8 +export py_netcdf4_ver=1.5.8 +export py_pyyaml_ver=5.4.1 +export py_jinja2_ver=3.1.2 + +export obsproc_run_ver=1.1.2 +export prepobs_run_ver=1.0.1 + +export ens_tracker_ver=feature-GFSv17_com_reorg +export fit2obs_ver=1.0.0 diff --git a/versions/run.wcoss2.ver b/versions/run.wcoss2.ver new file mode 100644 index 0000000000..f61122337e --- /dev/null +++ b/versions/run.wcoss2.ver @@ -0,0 +1,49 @@ +export version=v16.3.7 +export gfs_ver=v16.3.7 +export ukmet_ver=v2.2 +export ecmwf_ver=v2.1 +export nam_ver=v4.2 +export rtofs_ver=v2.3 +export obsproc_ver=v1.1 + +export envvar_ver=1.0 +export prod_envir_ver=${prod_envir_ver:-2.0.4} # Allow override from ops ecflow +export prod_util_ver=${prod_util_ver:-2.0.9} # Allow override from ops ecflow + +export PrgEnv_intel_ver=8.1.0 +export intel_ver=19.1.3.304 +export craype_ver=2.7.13 +export cray_mpich_ver=8.1.9 +export cray_pals_ver=1.0.17 +export cfp_ver=2.0.4 + +export python_ver=3.8.6 +export gempak_ver=7.14.1 +export perl_ver=5.32.0 +export libjpeg_ver=9c +export udunits_ver=2.2.28 +export gsl_ver=2.7 +export jasper_ver=2.0.25 +export zlib_ver=1.2.11 +export libpng_ver=1.6.37 +export cdo_ver=1.9.8 + +export hdf5_ver=1.10.6 +export netcdf_ver=4.7.4 + +export nco_ver=4.7.9 +export grib_util_ver=1.2.3 +export bufr_dump_ver=1.0.0 +export util_shared_ver=1.4.0 +export g2tmpl_ver=1.10.2 +export ncdiag_ver=1.0.0 +export crtm_ver=2.4.0 +export wgrib2_ver=2.0.8 + +# Development-only below + +export obsproc_run_ver=1.1.2 +export prepobs_run_ver=1.0.1 + +export ens_tracker_ver=feature-GFSv17_com_reorg +export fit2obs_ver=1.0.0 diff --git a/workflow/README_ecflow.md b/workflow/README_ecflow.md new file mode 100644 index 0000000000..5dd73617ed --- /dev/null +++ b/workflow/README_ecflow.md @@ -0,0 +1,960 @@ +# Workflow Setup Utility: + +## Introduction + +This utility is designed to be an automated ecFlow and Rocoto generation application, +used to create the folder structures and scripts needed to execute the workflows +for either application. As of June 2022, this application only works for ecFlow. + +### How ecFlow Setup Works + +For ecFlow creation, the application takes a YAML file as input, pulls in any +environment variables that are specified in the YAML, pulls in any environment +variables that are set in the shell, then using the ecFlow +API, a definition file is created. While the application creates the definition file +it also uses the path defined as `ECFgfs`, which will be elaborated on later in this +guide, and creates the folders and scripts that match the definition file, setting the +`ECFHome` variable in the definition file to match the `ECFgfs` parameter. + +Please refer to the [setup the YAML](#configuring-the-yaml-file) section for instructions +on how to setup the YAML file for what you want. + +## Setup for using the utility with ecFlow + +This utility uses Python3.6 and later. It will not work with Python anything before +Python3.6. + +### Pre-Requisites + +In order to run the application the following Python3 modules need to be available: +* ecflow +* numpy +* PyYAML + +These modules should be available on Hera and Orion. + +Additionally, this utility makes use of modules within the ecflow_setup folder so you +need to ensure that your `PYTHONPATH` or whatever module pathing you are using +does allow you to import modules from other parts of the application folders. By +default this should generally be done without setting additional parameters but it +is possible that a custom parameter may be needed. + +### Experiment Setup + +This application requires the use of a config.base file. With Rocoto and other applications +the config.base file was setup with the experiment scripts so this application does +presume that the `config.base` file is setup and working. It does NOT import any other +configuration files from that same directory, though it would not be hard to modify the code +to pull in other parameters as well. The command line argument `--expdir` can be used +to identify the folder that contains the `config.base` file. The file will be read in and +the ush/rocoto/workflow_utils.py script will be used to populate any environment +variables that are needed. + +### Required Environment Variables + +If not setup within the script, the following environment variables are required +either in the shell or within the config.base file: +* Account +* Queue +* machine +* RUN_ENVIR + +These parameters are populated as 'edits' within the ecFlow definition file for +any of the suites that are created. + +An additional environment variable that is needed is: +* ECFgfs +This parameter is used in a number of different locations within the application. +First, it will set the destination for populating the scripts and directories +needed to execute the definition plan within that folder. Second it will set the +`ECF_HOME` and `ECF_INCLUDE` parameters to that value. Third, if no scriptrepo +parameter is set, it will look in the `$ECFgfs/scripts` folder for the scripts +associated with the tasks or templates defined within the YAML file. + +If not already in the environment, it is suggested to add the following to the config.base file: +`export ECFgfs=$HOMEgfs/ecf` + +* **NOTE**: Older versions of the `config.base` may not contain this export so it +will be important to add as the application does rely on some pieces of information +from that folder. +* **NOTE**: In the examples provided below and their output, the `HOMEgfs` parameter +is set to `/usr1/knevins/global-workflow` so you can make the associated reference in +yours to match the output that you are looking to accomplish. + +## Configuring the YAML file + +The utility works primarily off of the yaml file used to define the suites, +families, and tasks. You will need to define the pieces within the file using a +YAML syntax and then the reserved words identified below. + +### Using Environment Variables in the YAML + +This application was built to use environment variables provided either through an export in the +shell environment or by specifying a value in the config.base file. To use an environment value, +the YAML file has a reserved word prefix `env.`. The code functions by parsing the YAML file into +a dictionary then doing a recursive search over that dictionary to determine if the `env.` prefix +is used anywhere, either a value or key. When a node uses that syntax, the application will search first +the current shell environment variables for a match, if none exists, then it will search +the `config.base` file for any configurations that may have been exported from there. Finally, it will +then replace the string `env.PARAMETER` with the value from the shell or `config.base` file in the +dictionary that was imported. The original YAML file will remain unchanged. + +**NOTE:** The environment variable cannot be used in conjunction with a string so trying to use +`env.ECFgfs/include` will return only the value for `ECFgfs`, it will not append any strings or +values to the beginning or end of the value. + +Example: +Entering `env.FHMAX_GFS` as a value for a node will use the value that was +specified in the `config.base` file for the `FHMAX_GFS` export. This will be reflected in the final +definition file. It will not be updated in the original YAML file, that will remain as +`env.FHMAX_GFS`. + + +### Script Repository + +The workflow generator will create the folders and scripts necessary to run the suite +that is defined within the YAML file. It will create the items at the ECFgfs folder location. +However, the generator needs to know where to look for the scripts to copy them to the +final destination spot. This is done using the scriptrepo variable. The scriptrepo +can be specified either by an environment variable or by setting +a `scriptrepo: /path/to/scripts` variable in the YAML file at the top level. By default the +generator will look in `$ECFgfs/scripts` for the scripts. + +The scripts in the script repo do not need to be in any particular folders, they just need to +be unique names. The generator will recursively look in all folders for a script that matches +the task that was set up in the YAML file. For tasks that are loops or lists, a template +parameter can be used. Please refer to the [Setting up the tasks](#setting-up-the-tasks) +section of this guide. + +### A Basic YAML File + +The YAML file follows the standard YAML syntax structure. It is suggested to use the `---` +triple hyphen line to start the file, followed by the start of the syntax. Some YAML editors +will allow you to specify the indentation between the lines but the common practice +is to set the following when creating your YAML file: +* Use `---` to start the file +* Use two spaces for indentation on sub-items +* A colon followed by a space, `: `, is an indicator of a mapping. +* A space followed by a pound sign ` #` is an indicator of a comment. + +Running with just a suite declared in the YAML file such as: +```YAML +--- +suites: + prod00: +``` +Will return a definition file that has the following content with the default suite edits as +well as the `ECF_HOME` and `ECF_INCLUDE` parameters being set to the `ECFgfs` parameter set +in the config.base file. +```bash +#5.8.1 +suite prod00 + edit ECF_HOME '/usr1/knevins/global-workflow/ecf' + edit ECF_INCLUDE '/usr1/knevins/global-workflow/ecf' + edit ACCOUNT 'fv3-cpu' + edit QUEUE 'PARTITION_BATCH' + edit MACHINE 'HERA' + edit RUN_ENVIR 'emc' +endsuite +# enddef +``` + +### Setting up externs + +To add externs, add the `externs:` label to the base level of the yaml file, +then add each extern as a yaml list object. Please note that the configuration of externs +as options for tasks has not yet been enabled. Those would have to be manually configured +after creating the definition file with the generator. +* Example + +```YAML +--- +externs: + - "/prod18/enkfgdas/post" + - "/prod18/enkfgfs/post" +suites: + prod00: +``` +* Result: +```bash +#5.8.1 +extern /prod18/enkfgdas/post +extern /prod18/enkfgfs/post +suite prod00 + edit ECF_HOME '/usr1/knevins/global-workflow/ecf' + edit ECF_INCLUDE '/usr1/knevins/global-workflow/ecf' + edit ACCOUNT 'fv3-cpu' + edit QUEUE 'PARTITION_BATCH' + edit MACHINE 'HERA' + edit RUN_ENVIR 'emc' +endsuite +# enddef +``` + +### Setting up a suite + +To add items to a suite, first add a `suites:` line to the YAML file at the top level. Once +the `suites:` line has been added, as a sub object underneath, add whatever suites you would +like to have as dictionary objects. + +Suites can be either strings that define the single suite or it can be a list object defined +by using the `[ ]` syntax, such as `prod[00,06]`, which would create two suites, one called +`prod00` and one called `prod06`. + +A suite can be defined more than once. For example, if you want two suites, `prod00` and `prod06` +which contain almost completely exact entities but the `prod06` has one extra task, you +can define a suite for `prod[00,06]` and put all of the tasks for both in that section and then +below that define a `prod06` suite and add in the specific task you want. + +The generator goes through the suites serially, taking whatever is defined first in the +file and then go through the rest. This means that overrides are possible, so the order +in which the file is set up does matter. + +* Example: +This will produce a definition file with two suites, prod00 and prod06. +```YAML +suites: + prod[00,06]: + prod00: +``` +* Result: +```bash +#5.8.1 +suite prod00 + edit ECF_HOME '/usr1/knevins/global-workflow/ecf' + edit ECF_INCLUDE '/usr1/knevins/global-workflow/ecf' + edit ACCOUNT 'fv3-cpu' + edit QUEUE 'PARTITION_BATCH' + edit MACHINE 'HERA' + edit RUN_ENVIR 'emc' +endsuite +suite prod06 + edit ECF_HOME '/usr1/knevins/global-workflow/ecf' + edit ECF_INCLUDE '/usr1/knevins/global-workflow/ecf' + edit ACCOUNT 'fv3-cpu' + edit QUEUE 'PARTITION_BATCH' + edit MACHINE 'HERA' + edit RUN_ENVIR 'emc' +endsuite +# enddef +``` + +### Setting Up Families and Tasks + +Once a suite line has been added, families need to be added under a `nodes:` header. +First add the `nodes:` dictionary line under the suite name, then create the hierarchical +structure for the families. +Families can be dictionary objects under other families. In the example below, the suites +`prod00` and `prod06` will have the family `gfs`. +Then only the `prod00` suite will have the family `gdas` added to it. + +Once the family structure has been setup, add in a `tasks` dictionary under the +family to which you want to add that task. In the example below, both the `prod00` +and `prod06` suites will have the `gfs` family with the `gfs_forecast` task but the +`prod00` suite will also have the `gdas` family with the `jgdas_forecast` task. + +**Note**: The families can have a hierarchy but if there is nothing in the family +then the definition file considers it an empty one and does not add it to the overall +definition file. As long as there is a node definition within the family, such as a +task, repeat, other family, or trigger, it will show up in the definition file. + +* Example +```YAML +suites: + prod[00,06]: + nodes: + gfs: + tasks: + jgfs_forecast: + prod00: + nodes: + gdas: + tasks: + jgdas_forecast: +``` +* Result: +```bash +#5.8.1 +suite prod00 + edit ECF_HOME '/usr1/knevins/global-workflow/ecf' + edit ECF_INCLUDE '/usr1/knevins/global-workflow/ecf' + edit ACCOUNT 'fv3-cpu' + edit QUEUE 'PARTITION_BATCH' + edit MACHINE 'HERA' + edit RUN_ENVIR 'emc' + family gfs + task jgfs_forecast + endfamily + family gdas + task jgdas_forecast + endfamily +endsuite +suite prod06 + edit ECF_HOME '/usr1/knevins/global-workflow/ecf' + edit ECF_INCLUDE '/usr1/knevins/global-workflow/ecf' + edit ACCOUNT 'fv3-cpu' + edit QUEUE 'PARTITION_BATCH' + edit MACHINE 'HERA' + edit RUN_ENVIR 'emc' + family gfs + task jgfs_forecast + endfamily +endsuite +# enddef +``` + +### Adding edits + +Edits can be added to either families, tasks or suites by putting an `edits:` +dictionary tag and then listing the edits below. The format for edits will be +the edit variable on the left and then the value on the right. + +So in this example below, lets consider that we want the `RUN` value to be +`GFS` for both the `prod00` and `prod06` suite but we wnat the `CYC` value +to be `00` for the `prod00` suite and `06` for the `prod06` suite. So in +that case we would use the individual declaration for the suites for the +`CYC` value only and then the listed suites declaration for the rest. +* Example + +```YAML +suites: + prod00: + edits: + CYC: '00' + prod06: + edits: + CYC: '06' + prod[00,06]: + nodes: + gfs: + edits: + RUN: 'GFS' + tasks: + jgfs_forecast: +``` +* Result +```bash +#5.8.1 +suite prod00 + edit ECF_HOME '/usr1/knevins/global-workflow/ecf' + edit ECF_INCLUDE '/usr1/knevins/global-workflow/ecf' + edit ACCOUNT 'fv3-cpu' + edit QUEUE 'PARTITION_BATCH' + edit MACHINE 'HERA' + edit RUN_ENVIR 'emc' + edit CYC '00' + family gfs + edit RUN 'GFS' + task jgfs_forecast + endfamily +endsuite +suite prod06 + edit ECF_HOME '/usr1/knevins/global-workflow/ecf' + edit ECF_INCLUDE '/usr1/knevins/global-workflow/ecf' + edit ACCOUNT 'fv3-cpu' + edit QUEUE 'PARTITION_BATCH' + edit MACHINE 'HERA' + edit RUN_ENVIR 'emc' + edit CYC '06' + family gfs + edit RUN 'GFS' + task jgfs_forecast + endfamily +endsuite +# enddef +``` + +#### Task Setup Extras + +Tasks are added in as a dictionary under the `tasks:` header. So if you want to add +multiple tasks to a family, do not add them in list syntax, add them as hashes to the dictionary. + +* Example +```YAML +suites: + prod[00,06]: + nodes: + gfs: + atmos: + analysis: + tasks: + jgfs_atmos_analysis: + jgfs_atmos_analysis_calc: +``` +* Result +```bash +#5.8.1 +suite prod00 + edit ECF_HOME '/usr1/knevins/global-workflow/ecf' + edit ECF_INCLUDE '/usr1/knevins/global-workflow/ecf' + edit ACCOUNT 'fv3-cpu' + edit QUEUE 'PARTITION_BATCH' + edit MACHINE 'HERA' + edit RUN_ENVIR 'emc' + family gfs + family atmos + family analysis + task jgfs_atmos_analysis + task jgfs_atmos_analysis_calc + endfamily + endfamily + endfamily +endsuite +suite prod06 + edit ECF_HOME '/usr1/knevins/global-workflow/ecf' + edit ECF_INCLUDE '/usr1/knevins/global-workflow/ecf' + edit ACCOUNT 'fv3-cpu' + edit QUEUE 'PARTITION_BATCH' + edit MACHINE 'HERA' + edit RUN_ENVIR 'emc' + family gfs + family atmos + family analysis + task jgfs_atmos_analysis + task jgfs_atmos_analysis_calc + endfamily + endfamily + endfamily +endsuite +# enddef +``` + +#### Task Script Repository and Templates + +When adding tasks, it is possible that you may want to run a task for every forecast hour in a large range +but not want to copy and paste the same script for every forecast hour. With the generator application, you +can specify a `template:` parameter. After defining the [script repo](#script-repository) parameter, the +application will search the defined directory for the template script. It will then copy the template script to +the destination folder for the suite with an adjusted name. + +In the example below, you can see the range used for the `jgfs_atmos_post_f` forecast hour task with a template. +Please refer to the [ranges and lists](#ranges-and-lists) section of this document for information on how to set +up a range but for the purposes of the example below, we are focusing on the template. What is relevant here is +that we want 4 instances of the `jgfs_atmos_post_f` forecast hour script to be in place and use the same +`jgfs_atmos_post_master` script for the template. + +In addition to the resultant defintion file, noted below is the folder that was created for the `prod00` suite. The +`prod00` folder is located at the `$HOMEecf`, in the case below you cans see it is defined as +`/usr1/knevins/global-workflow/ecf` location and contains four instances of the `jgfs_atmos_post_master` +script, each renamed to match the `task` name in the definition file. + +**NOTE:** A special template value is `skip`. If you use `template: skip` in a task, the generator will know that +the script is in fact not in the script repository and it will not attempt to copy or create it but it will +add it to the definition file. This is useful in conjunction with the [defstatus](#defstatus) parameter so the +suite will skip already done tasks and there won't be a representation of it in the final directory. + +* Example +```YAML +suites: + prod00: + nodes: + gfs: + atmos: + post: + tasks: + jgfs_atmos_post_f( 4 ): + template: jgfs_atmos_post_master +``` + +* Result +```bash +#5.8.1 +suite prod00 + edit ECF_HOME '/usr1/knevins/global-workflow/ecf' + edit ECF_INCLUDE '/usr1/knevins/global-workflow/ecf' + edit ACCOUNT 'fv3-cpu' + edit QUEUE 'PARTITION_BATCH' + edit MACHINE 'HERA' + edit RUN_ENVIR 'emc' + family gfs + family atmos + family post + task jgfs_atmos_post_f000 + task jgfs_atmos_post_f001 + task jgfs_atmos_post_f002 + task jgfs_atmos_post_f003 + endfamily + endfamily + endfamily +endsuite +# enddef +``` + +* Resulting Folder Setup +```bash +$ tree prod00 +prod00 +└── gfs + └── atmos + └── post + ├── jgfs_atmos_post_f000.ecf + ├── jgfs_atmos_post_f001.ecf + ├── jgfs_atmos_post_f002.ecf + └── jgfs_atmos_post_f003.ecf + +3 directories, 4 files +``` + +### Setting Up Triggers, Events, and Defstatus + +#### Events +To add an event, you first need to add the `events:` dictionary heading underneath the node to which it needs to be +added. Then underneath that `events:` heading, as a list object, add the list of events that you want have attached. + +**NOTE:** Events can be ranges or list objects, please see the section below on creating lists or ranges. + +**NOTE:** Events must be added in a list. This is not the same structure as adding tasks, which are dictionary objects, +the events list is an actual list so please make sure to add a hyphen, `-`, in front of every event that you wish to +add. + +* Example +```YAML +suites: + prod00: + nodes: + gfs: + atmos: + analysis: + tasks: + jgfs_atmos_analysis: + events: + - release_fcst +``` + +* Result +```bash +#5.8.1 +suite prod00 + edit ECF_HOME '/usr1/knevins/global-workflow/ecf' + edit ECF_INCLUDE '/usr1/knevins/global-workflow/ecf' + edit ACCOUNT 'fv3-cpu' + edit QUEUE 'PARTITION_BATCH' + edit MACHINE 'HERA' + edit RUN_ENVIR 'emc' + family gfs + family atmos + family analysis + task jgfs_atmos_analysis + event release_fcst + endfamily + endfamily + endfamily +endsuite +# enddef +``` + +#### Triggers + +To add a trigger, add a `triggers:` dictionary heading underneath the task or family. The triggers need to be a list +item with the identifier for what you want the trigger to look for. So for a task, it would be `- task: task_name` or +for a family it would be `- family: family_name` + +**NOTE:** It was mentioned above but an important distinction from tasks is that triggers need to be in list format. +The reason for this is due to triggers being either families or tasks, and that is determined by the dictionary +label for the list item. + +**NOTE:** By default, multiple triggers are added to a node with __AND__ + +Triggers can also have the following items associated with it: +* `event:` + * This is listed as part of the list item but in it's own `event:` header. The `event:` must exist within the suite + or it will be rejected. + * Events can be lists or ranges. +* `state:` + * This will identify the state of the task or family in the trigger. States are generally `active`, `complete`, or + `queued`. +* `suite:` + * If the trigger is for a task within another suite, add the suite identifier to the trigger and it will look up + the full path to the trigger and add it. **NOTE:** The suite reference must exist within the definition file, this + will not work for `externs`. +* `operand:` + * By default multiple triggers are added to the node with __AND__ as their connection. However, in the event that + the triggers need to be added with an __OR__ statement, add the `operand: OR` kesuites: + prod00: + nodes: + gfs: + atmos: + post: + tasks: + jgfs_atmos_post_f( 4 ): + template: jgfs_atmos_post_master +```YAML +suites: + prod00: + nodes: + gfs: + tasks: + jgfs_forecast: + triggers: + - task: jgfs_atmos_analysis + event: release_fcst + - task: jgfs_wave_prep + state: complete + atmos: + analysis: + tasks: + jgfs_atmos_analysis: + events: + - release_fcst + wave: + prep: + tasks: + jgfs_wave_prep: +``` + +* Result +```bash +#5.8.1 +suite prod00 + edit ECF_HOME '/usr1/knevins/global-workflow/ecf' + edit ECF_INCLUDE '/usr1/knevins/global-workflow/ecf' + edit ACCOUNT 'fv3-cpu' + edit QUEUE 'PARTITION_BATCH' + edit MACHINE 'HERA' + edit RUN_ENVIR 'emc' + family gfs + family atmos + family analysis + task jgfs_atmos_analysis + event release_fcst + endfamily + endfamily + family wave + family prep + task jgfs_wave_prep + endfamily + endfamily + task jgfs_forecast + trigger /prod00/gfs/atmos/analysis/jgfs_atmos_analysis:release_fcst + trigger -a /prod00/gfs/wave/prep/jgfs_wave_prep == complete + endfamily +endsuite +# enddef +``` + +#### Defstatus + +At the time of this README, the use case for the def status was to be able to add nodes to a definition file, and have +them marked as complete so that the ecflow run knows that the script is there but acknowleges as done without having to +do anything. This is useful when running development tasks, that rely on an operational task, but the operational task +is already done and nothing else needs to be executed. + +To add defstatus to a task or family, add a `defstatus:` parameter underneath the node, not a dictionary, this will be +a key/value pair. It will have a value associated with it so the item will look like `defstatus: value` + +**NOTE:** A defstatus can be added to a family or a task object. Both are acceptable formats. + +**NOTE:** When a defstatus is defined for a parent object, all child nodes under the object inherit that so in the +example below, all families and tasks are considered complete and since the `template: skip` value is there for the +task, the script generator will not attempt to look for it in the script repo. + +* Example +```YAML +suites: + prod00: + nodes: + obsproc: + defstatus: complete + v1.0: + gfs: + atmos: + dump: + tasks: + jobsproc_gfs_atmos_dump: + template: skip + events: + - "release_sfcprep" +``` + +* Result +```bash +#5.8.1 +suite prod00 + edit ECF_HOME '/usr1/knevins/global-workflow/ecf' + edit ECF_INCLUDE '/usr1/knevins/global-workflow/ecf' + edit ACCOUNT 'fv3-cpu' + edit QUEUE 'PARTITION_BATCH' + edit MACHINE 'HERA' + edit RUN_ENVIR 'emc' + family obsproc + defstatus complete + family v1.0 + family gfs + family atmos + family dump + task jobsproc_gfs_atmos_dump + event release_sfcprep + endfamily + endfamily + endfamily + endfamily + endfamily +endsuite +# enddef +``` + +### Repeats + +Repeats are in a standalone section because of the nature of how ecflow handles repeating tasks. Ecflow has multiple +methods for handling repeating tasks but they lack a lot of the specificity that one would hope. Trying to identify +something as simple as run every 6 hours for the next three days is a rather complex setup. With that, after adding +a repat, please double check the setup to make sure that the code has done the repeat type that you are looking to +accomplish. + +Repeats are declared with the `repeat:` key value and the value has a specific syntax as follows: + `YYYYMMDD(HH)? to YYYYMMDD(HH)? (by DD:HH:MM)?` +where the items in the `()?` are optional. + +The first value is the start time specified in year, month, day with a hour value as optional. The second value +is the end date in year, month, day format with an hour as an optional value. The third is the increment time in +day, hour and minute format. The day is optional as well in third value. It can be read as starting at the first +value, repeat until the second value is reached and increment by the third value. If no third value is specified +increment by 1 hour. + +The value `2022032400 to 2022042400` is valid as is the value `2022032400 to 2022042400 by 18:00`. + +* If the repeat string has the start and end dates on the same day, just a `time` string with a `date` option will +be used. +* If the repeat string has the start and end on different days but within a 24 hour window, there will be a start +date with a repeats and a time string added to the definition file. +* If the repeat spans multiple days, it requires a combination of time, date and crons in the definition file. + +To elaborate on the example below of `2022032400 to 2022042400 by 18:00`. That will be read as starting at 00Z on +March 24th 2022, run every 18 hours until April 24th 2022. This will be reflected in the definition file with a +`date` value of March 24th, `24.3.2022` to start, a `time` value of `00:00` indicating start, a relative `time` +value of `+18:00` to indicate that after running and waiting 18 hours, run again, and a `repeat` value +to indicate that this needs to happen 42 times to get to April 24th. + +* Example +```YAML +suites: + prod00: + nodes: + gfs: + repeat: "2022032400 to 2022042400 by 18:00" +``` + +* Result +```bash +#5.8.1 +suite prod00 + edit ECF_HOME '/usr1/knevins/global-workflow/ecf' + edit ECF_INCLUDE '/usr1/knevins/global-workflow/ecf' + edit ACCOUNT 'fv3-cpu' + edit QUEUE 'PARTITION_BATCH' + edit MACHINE 'HERA' + edit RUN_ENVIR 'emc' + family gfs + repeat integer RUN 1 42 + time 00:00 + time +18:00 + date 24.3.2022 + endfamily +endsuite +# enddef +``` + +## Ranges and Lists + +If you need to have multiple forecast hours or have a similar node object with just a few characters difference, the +concept of ranges and lists will be very useful in this situation. Families, tasks, or even triggers and events can +have ranges or lists associated with them to shorten the creation of the definition YAML. The goal is to have one +line that can create multiple suites, familes, or tasks or even events. + +A range is a basic counting structure that follows the [Python range](https://docs.python.org/3.3/library/stdtypes.html?highlight=range#range) class object format. It is specified in one of the following three formats: +* `( $MAX_VALUE )` +* `( $START_VALUE, $MAX_VALUE )` +* `( $START_VALUE, $MAX_VALUE, $STEP )` + +As you can see from the examples, if only one value is specified then it uses that as the max value, if two, then a +start and end, and three includes an increment. It uses default values of 0 for the start value and 1 for the increment +if nothing else is specified. + +### Range Hierarchy + +The code also uses a heirarchy structure so that range values can be passed down to child node objects but also allowed +to modify them slightly. To use a parent counter, use the same notation as the list or range but do not put any values in +the notation. So if there is a range of `(4)` for a parent node and the child node has the notation `( )` in it then when +the parent node uses the value `1`, so will the child node. An example of this would be that if a parent node has a +string value like `jgfs_atmos_post_f( 4 )` there will be 4 objects created in the definition file, +`jgfs_atmos_post_f000`, `jgfs_atmos_post_f001`, `jgfs_atmos_post_f002`, `jgfs_atmos_post_f003`. +Then if that task has an edit that reads `FHR: 'f( )'` then the node `jgfs_atmos_post_f001` will have an edit that +reads `FHR: f001` and so on. + +If there is no maximum value as well, you can also modify the increment or start values. In the same example from +above if `jgfs_atmos_post_f( 4 )` is the node definition but you wanted the edit value to start at 1 instead of +0, then using `FHRGRP: '( 1, )'` which uses 1 as the start value but as you can see has no max value, will set the +value of the edit in node `jgfs_atmos_post_f001` to `FHRGRP: 002`. Similar can also be done for something like +the incremenet value so if the edit was specified as `FHRGRP: '( ,,6 )'` the value for the edit in node +`jgfs_atmos_post_f001` would be set to `FHRGRP: 006` because it would incrememnt by 6 but still use the same +parent counter for the base since no start or max value was specified. + +* Example +```YAML +suites: + prod00: + nodes: + gfs: + atmos: + post: + tasks: + jgfs_atmos_post_manager: + events: + - "release_postanl" + - "release_post( 4 )" + jgfs_atmos_post_f( 4 ): + template: jgfs_atmos_post_master + triggers: + - task: jgfs_atmos_post_manager + event: release_post( ) + edits: + FHRGRP: '( 1, )' + FHRLST: 'f( )' + FHR: 'f( )' + HR: '( )' +``` + +* Result +```bash +#5.8.1 +suite prod00 + edit ECF_HOME '/usr1/knevins/global-workflow/ecf' + edit ECF_INCLUDE '/usr1/knevins/global-workflow/ecf' + edit ACCOUNT 'fv3-cpu' + edit QUEUE 'PARTITION_BATCH' + edit MACHINE 'HERA' + edit RUN_ENVIR 'emc' + family gfs + family atmos + family post + task jgfs_atmos_post_manager + event release_postanl + event release_post000 + event release_post001 + event release_post002 + event release_post003 + task jgfs_atmos_post_f000 + trigger /prod00/gfs/atmos/post/jgfs_atmos_post_manager:release_post000 + edit FHRGRP '001' + edit FHRLST 'f000' + edit FHR 'f000' + edit HR '000' + task jgfs_atmos_post_f001 + trigger /prod00/gfs/atmos/post/jgfs_atmos_post_manager:release_post001 + edit FHRGRP '002' + edit FHRLST 'f001' + edit FHR 'f001' + edit HR '001' + task jgfs_atmos_post_f002 + trigger /prod00/gfs/atmos/post/jgfs_atmos_post_manager:release_post002 + edit FHRGRP '003' + edit FHRLST 'f002' + edit FHR 'f002' + edit HR '002' + task jgfs_atmos_post_f003 + trigger /prod00/gfs/atmos/post/jgfs_atmos_post_manager:release_post003 + edit FHRGRP '004' + edit FHRLST 'f003' + edit FHR 'f003' + edit HR '003' + endfamily + endfamily + endfamily +endsuite +# enddef +``` + +Lists are similar to the ranges but use the `[ ]` bracket syntax. Items in the list can be of any type and will run +the same way as ranges. The list cane be either within a string or just a list format for YAML and both should be +interpreted by the generator properly. + +**NOTE:** Lists will also match ranges if they are equal in length. So if you have a range of four and a list of +four, when the first element of the range is used, the first element of the list is also used. + +**NOTE:** Lists do not inheret the parent values directly. They read the position but given the flexibility needed +it does not pass down the actual values. The code could be updated to do that easily if it turns out to be a +future need but due to potential conflicts, it was not set that way in this version. + +* Example +```YAML +suites: + prod00: + nodes: + gfs: + atmos: + post: + tasks: + jgfs_atmos_post_manager: + events: + - "release_postanl" + - "release_post( 4 )" + jgfs_atmos_post_f[000,001,002,003]: + template: jgfs_atmos_post_master + triggers: + - task: jgfs_atmos_post_manager + event: release_post[000,001,002,003] + edits: + FHRGRP: [ 'a', 'b', 'c', 'd' ] + HR: [1,2,3,4] +``` + +* Result +```bash +#5.8.1 +suite prod00 + edit ECF_HOME '/usr1/knevins/global-workflow/ecf' + edit ECF_INCLUDE '/usr1/knevins/global-workflow/ecf' + edit ACCOUNT 'fv3-cpu' + edit QUEUE 'PARTITION_BATCH' + edit MACHINE 'HERA' + edit RUN_ENVIR 'emc' + family gfs + family atmos + family post + task jgfs_atmos_post_manager + event release_postanl + event release_post000 + event release_post001 + event release_post002 + event release_post003 + task jgfs_atmos_post_f000 + trigger /prod00/gfs/atmos/post/jgfs_atmos_post_manager:release_post000 + edit FHRGRP 'a' + edit HR '001' + task jgfs_atmos_post_f001 + trigger /prod00/gfs/atmos/post/jgfs_atmos_post_manager:release_post001 + edit FHRGRP 'b' + edit HR '002' + task jgfs_atmos_post_f002 + trigger /prod00/gfs/atmos/post/jgfs_atmos_post_manager:release_post002 + edit FHRGRP 'c' + edit HR '003' + task jgfs_atmos_post_f003 + trigger /prod00/gfs/atmos/post/jgfs_atmos_post_manager:release_post003 + edit FHRGRP 'd' + edit HR '004' + endfamily + endfamily + endfamily +endsuite +# enddef + +``` + +# Running the Utility + +## Run the utility +1. Change into the workflow directory: +` cd global-workflow/workflow_generator` +1. Run the utility +``` +python3 setup_workflow.py --expdir ../parm/config +``` + +### Command Line Options +* --ecflow-config + * Path to the YAML configuration file to use to generate the definition and folder/scripts. +* --expdir + * Path to the experiment directory. Must contain config.base. +* --savedir + * Path to where the definition file will be saved. Defaults to current directory. diff --git a/workflow/__init.py__ b/workflow/__init.py__ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/workflow/applications/__init__.py b/workflow/applications/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/workflow/applications/application_factory.py b/workflow/applications/application_factory.py new file mode 100644 index 0000000000..ff6b6992f4 --- /dev/null +++ b/workflow/applications/application_factory.py @@ -0,0 +1,10 @@ +from wxflow import Factory +from applications.gfs_cycled import GFSCycledAppConfig +from applications.gfs_forecast_only import GFSForecastOnlyAppConfig +from applications.gefs import GEFSAppConfig + + +app_config_factory = Factory('AppConfig') +app_config_factory.register('gfs_cycled', GFSCycledAppConfig) +app_config_factory.register('gfs_forecast-only', GFSForecastOnlyAppConfig) +app_config_factory.register('gefs_forecast-only', GEFSAppConfig) diff --git a/workflow/applications/applications.py b/workflow/applications/applications.py new file mode 100644 index 0000000000..441dbe4c19 --- /dev/null +++ b/workflow/applications/applications.py @@ -0,0 +1,183 @@ +#!/usr/bin/env python3 + +from typing import Dict, List, Any +from datetime import timedelta +from hosts import Host +from wxflow import Configuration, to_timedelta +from abc import ABC, ABCMeta, abstractmethod + +__all__ = ['AppConfig'] + + +class AppConfigInit(ABCMeta): + def __call__(cls, *args, **kwargs): + ''' + We want the child classes to be able to define additional settings + before we source the configs and complete the rest of the process, + so break init up into two methods, one to run first (both in the + base class and the child class) and one to finalize the initiali- + zation after both have completed. + ''' + obj = type.__call__(cls, *args, **kwargs) + obj._init_finalize(*args, **kwargs) + return obj + + +class AppConfig(ABC, metaclass=AppConfigInit): + + VALID_MODES = ['cycled', 'forecast-only'] + + def __init__(self, conf: Configuration) -> None: + + self.scheduler = Host().scheduler + + _base = conf.parse_config('config.base') + # Define here so the child __init__ functions can use it; will + # be overwritten later during _init_finalize(). + self._base = _base + + self.mode = _base['MODE'] + + if self.mode not in self.VALID_MODES: + raise NotImplementedError(f'{self.mode} is not a valid application mode.\n' + + 'Valid application modes are:\n' + + f'{", ".join(self.VALID_MODES)}') + + self.net = _base['NET'] + self.model_app = _base.get('APP', 'ATM') + self.do_atm = _base.get('DO_ATM', True) + self.do_wave = _base.get('DO_WAVE', False) + self.do_wave_bnd = _base.get('DOBNDPNT_WAVE', False) + self.do_ocean = _base.get('DO_OCN', False) + self.do_ice = _base.get('DO_ICE', False) + self.do_aero = _base.get('DO_AERO', False) + self.do_bufrsnd = _base.get('DO_BUFRSND', False) + self.do_gempak = _base.get('DO_GEMPAK', False) + self.do_awips = _base.get('DO_AWIPS', False) + self.do_verfozn = _base.get('DO_VERFOZN', True) + self.do_verfrad = _base.get('DO_VERFRAD', True) + self.do_vminmon = _base.get('DO_VMINMON', True) + self.do_tracker = _base.get('DO_TRACKER', True) + self.do_genesis = _base.get('DO_GENESIS', True) + self.do_genesis_fsu = _base.get('DO_GENESIS_FSU', False) + self.do_metp = _base.get('DO_METP', False) + self.do_upp = not _base.get('WRITE_DOPOST', True) + + self.do_hpssarch = _base.get('HPSSARCH', False) + + self.nens = _base.get('NMEM_ENS', 0) + + self.wave_cdumps = None + if self.do_wave: + wave_cdump = _base.get('WAVE_CDUMP', 'BOTH').lower() + if wave_cdump in ['both']: + self.wave_cdumps = ['gfs', 'gdas'] + elif wave_cdump in ['gfs', 'gdas']: + self.wave_cdumps = [wave_cdump] + + def _init_finalize(self, conf: Configuration): + print("Finalizing initialize") + + # Get a list of all possible config_files that would be part of the application + self.configs_names = self._get_app_configs() + + # Source the config_files for the jobs in the application + self.configs = self._source_configs(conf) + + # Update the base config dictionary base on application + self.configs['base'] = self._update_base(self.configs['base']) + + # Save base in the internal state since it is often needed + self._base = self.configs['base'] + + # Get more configuration options into the class attributes + self.gfs_cyc = self._base.get('gfs_cyc') + + # Finally get task names for the application + self.task_names = self.get_task_names() + + @abstractmethod + def _get_app_configs(self): + pass + + @staticmethod + @abstractmethod + def _update_base(base_in: Dict[str, Any]) -> Dict[str, Any]: + ''' + Make final updates to base and return an updated copy + + Parameters + ---------- + base_in: Dict + Beginning base settings + + Returns + ------- + Dict: A copy of base_in with possible modifications based on the + net and mode. + + ''' + pass + + def _source_configs(self, conf: Configuration) -> Dict[str, Any]: + """ + Given the configuration object and jobs, + source the configurations for each config and return a dictionary + Every config depends on "config.base" + """ + + configs = dict() + + # Return config.base as well + configs['base'] = conf.parse_config('config.base') + + # Source the list of all config_files involved in the application + for config in self.configs_names: + + # All must source config.base first + files = ['config.base'] + + if config in ['eobs', 'eomg']: + files += ['config.anal', 'config.eobs'] + elif config in ['eupd']: + files += ['config.anal', 'config.eupd'] + elif config in ['efcs']: + files += ['config.fcst', 'config.efcs'] + elif 'wave' in config: + files += ['config.wave', f'config.{config}'] + else: + files += [f'config.{config}'] + + print(f'sourcing config.{config}') + configs[config] = conf.parse_config(files) + + return configs + + @abstractmethod + def get_task_names(self) -> Dict[str, List[str]]: + ''' + Create a list of task names for each CDUMP valid for the configuation. + + Parameters + ---------- + None + + Returns + ------- + Dict[str, List[str]]: Lists of tasks for each CDUMP. + + ''' + pass + + @staticmethod + def get_gfs_interval(gfs_cyc: int) -> timedelta: + """ + return interval in hours based on gfs_cyc + """ + + gfs_internal_map = {'1': '24H', '2': '12H', '4': '6H'} + + try: + return to_timedelta(gfs_internal_map[str(gfs_cyc)]) + except KeyError: + raise KeyError(f'Invalid gfs_cyc = {gfs_cyc}') diff --git a/workflow/applications/gefs.py b/workflow/applications/gefs.py new file mode 100644 index 0000000000..b2369e8dfc --- /dev/null +++ b/workflow/applications/gefs.py @@ -0,0 +1,48 @@ +from applications.applications import AppConfig +from wxflow import Configuration + + +class GEFSAppConfig(AppConfig): + ''' + Class to define GEFS configurations + ''' + + def __init__(self, conf: Configuration): + super().__init__(conf) + + def _get_app_configs(self): + """ + Returns the config_files that are involved in gefs + """ + configs = ['stage_ic', 'fcst'] + + if self.nens > 0: + configs += ['efcs'] + + if self.do_wave: + configs += ['waveinit'] + + return configs + + @staticmethod + def _update_base(base_in): + + base_out = base_in.copy() + base_out['INTERVAL_GFS'] = AppConfig.get_gfs_interval(base_in['gfs_cyc']) + base_out['CDUMP'] = 'gefs' + + return base_out + + def get_task_names(self): + + tasks = ['stage_ic'] + + if self.do_wave: + tasks += ['waveinit'] + + tasks += ['fcst'] + + if self.nens > 0: + tasks += ['efcs'] + + return {f"{self._base['CDUMP']}": tasks} diff --git a/workflow/applications/gfs_cycled.py b/workflow/applications/gfs_cycled.py new file mode 100644 index 0000000000..63332c0cf6 --- /dev/null +++ b/workflow/applications/gfs_cycled.py @@ -0,0 +1,310 @@ +from typing import Dict, Any +from applications.applications import AppConfig +from wxflow import Configuration, to_timedelta +from datetime import timedelta + + +class GFSCycledAppConfig(AppConfig): + ''' + Class to define GFS cycled configurations + ''' + + def __init__(self, conf: Configuration): + super().__init__(conf) + self.do_hybvar = self._base.get('DOHYBVAR', False) + self.do_fit2obs = self._base.get('DO_FIT2OBS', True) + self.do_jediatmvar = self._base.get('DO_JEDIATMVAR', False) + self.do_jediatmens = self._base.get('DO_JEDIATMENS', False) + self.do_jediocnvar = self._base.get('DO_JEDIOCNVAR', False) + self.do_jedilandda = self._base.get('DO_JEDILANDDA', False) + self.do_mergensst = self._base.get('DO_MERGENSST', False) + + self.lobsdiag_forenkf = False + self.eupd_cdumps = None + if self.do_hybvar: + self.lobsdiag_forenkf = self._base.get('lobsdiag_forenkf', False) + eupd_cdump = self._base.get('EUPD_CYC', 'gdas').lower() + if eupd_cdump in ['both']: + self.eupd_cdumps = ['gfs', 'gdas'] + elif eupd_cdump in ['gfs', 'gdas']: + self.eupd_cdumps = [eupd_cdump] + + def _get_app_configs(self): + """ + Returns the config_files that are involved in the cycled app + """ + + configs = ['prep'] + + if self.do_jediatmvar: + configs += ['prepatmiodaobs', 'atmanlinit', 'atmanlrun', 'atmanlfinal'] + else: + configs += ['anal', 'analdiag'] + + if self.do_jediocnvar: + configs += ['ocnanalprep', 'ocnanalbmat', 'ocnanalrun', 'ocnanalchkpt', 'ocnanalpost', 'ocnanalvrfy'] + + if self.do_ocean: + configs += ['ocnpost'] + + configs += ['sfcanl', 'analcalc', 'fcst', 'upp', 'atmos_products', 'arch', 'cleanup'] + + if self.do_hybvar: + if self.do_jediatmens: + configs += ['atmensanlinit', 'atmensanlrun', 'atmensanlfinal'] + else: + configs += ['eobs', 'eomg', 'ediag', 'eupd'] + configs += ['ecen', 'esfc', 'efcs', 'echgres', 'epos', 'earc'] + + if self.do_fit2obs: + configs += ['fit2obs'] + + if self.do_verfozn: + configs += ['verfozn'] + + if self.do_verfrad: + configs += ['verfrad'] + + if self.do_vminmon: + configs += ['vminmon'] + + if self.do_tracker: + configs += ['tracker'] + + if self.do_genesis: + configs += ['genesis'] + + if self.do_genesis_fsu: + configs += ['genesis_fsu'] + + if self.do_metp: + configs += ['metp'] + + if self.do_gempak: + configs += ['gempak', 'npoess'] + + if self.do_bufrsnd: + configs += ['postsnd'] + + if self.do_awips: + configs += ['awips'] + + if self.do_wave: + configs += ['waveinit', 'waveprep', 'wavepostsbs', 'wavepostpnt'] + if self.do_wave_bnd: + configs += ['wavepostbndpnt', 'wavepostbndpntbll'] + if self.do_gempak: + configs += ['wavegempak'] + if self.do_awips: + configs += ['waveawipsbulls', 'waveawipsgridded'] + + if self.do_aero: + configs += ['aeroanlinit', 'aeroanlrun', 'aeroanlfinal'] + + if self.do_jedilandda: + configs += ['preplandobs', 'landanl'] + + return configs + + @staticmethod + def _update_base(base_in): + + return GFSCycledAppConfig.get_gfs_cyc_dates(base_in) + + def get_task_names(self): + """ + Get the task names for all the tasks in the cycled application. + Note that the order of the task names matters in the XML. + This is the place where that order is set. + """ + + gdas_gfs_common_tasks_before_fcst = ['prep'] + gdas_gfs_common_cleanup_tasks = ['arch', 'cleanup'] + + if self.do_jediatmvar: + gdas_gfs_common_tasks_before_fcst += ['prepatmiodaobs', 'atmanlinit', 'atmanlrun', 'atmanlfinal'] + else: + gdas_gfs_common_tasks_before_fcst += ['anal'] + + if self.do_jediocnvar: + gdas_gfs_common_tasks_before_fcst += ['ocnanalprep', 'ocnanalbmat', 'ocnanalrun', + 'ocnanalchkpt', 'ocnanalpost', 'ocnanalvrfy'] + + gdas_gfs_common_tasks_before_fcst += ['sfcanl', 'analcalc'] + + if self.do_aero: + gdas_gfs_common_tasks_before_fcst += ['aeroanlinit', 'aeroanlrun', 'aeroanlfinal'] + + if self.do_jedilandda: + gdas_gfs_common_tasks_before_fcst += ['preplandobs', 'landanl'] + + wave_prep_tasks = ['waveinit', 'waveprep'] + wave_bndpnt_tasks = ['wavepostbndpnt', 'wavepostbndpntbll'] + wave_post_tasks = ['wavepostsbs', 'wavepostpnt'] + + hybrid_tasks = [] + hybrid_after_eupd_tasks = [] + if self.do_hybvar: + if self.do_jediatmens: + hybrid_tasks += ['atmensanlinit', 'atmensanlrun', 'atmensanlfinal', 'echgres'] + else: + hybrid_tasks += ['eobs', 'eupd', 'echgres'] + hybrid_tasks += ['ediag'] if self.lobsdiag_forenkf else ['eomg'] + hybrid_after_eupd_tasks += ['ecen', 'esfc', 'efcs', 'epos', 'earc', 'cleanup'] + + # Collect all "gdas" cycle tasks + gdas_tasks = gdas_gfs_common_tasks_before_fcst.copy() + + if not self.do_jediatmvar: + gdas_tasks += ['analdiag'] + + if self.do_wave and 'gdas' in self.wave_cdumps: + gdas_tasks += wave_prep_tasks + + gdas_tasks += ['atmanlupp', 'atmanlprod', 'fcst'] + + if self.do_upp: + gdas_tasks += ['atmupp'] + gdas_tasks += ['atmprod'] + + if self.do_wave and 'gdas' in self.wave_cdumps: + if self.do_wave_bnd: + gdas_tasks += wave_bndpnt_tasks + gdas_tasks += wave_post_tasks + + if self.do_fit2obs: + gdas_tasks += ['fit2obs'] + + if self.do_verfozn: + gdas_tasks += ['verfozn'] + + if self.do_verfrad: + gdas_tasks += ['verfrad'] + + if self.do_vminmon: + gdas_tasks += ['vminmon'] + + if self.do_gempak: + gdas_tasks += ['gempak', 'gempakmetancdc'] + + gdas_tasks += gdas_gfs_common_cleanup_tasks + + # Collect "gfs" cycle tasks + gfs_tasks = gdas_gfs_common_tasks_before_fcst.copy() + + if self.do_wave and 'gfs' in self.wave_cdumps: + gfs_tasks += wave_prep_tasks + + gfs_tasks += ['atmanlupp', 'atmanlprod', 'fcst'] + + if self.do_upp: + gfs_tasks += ['atmupp'] + gfs_tasks += ['atmprod'] + + if self.do_vminmon: + gfs_tasks += ['vminmon'] + + if self.do_tracker: + gfs_tasks += ['tracker'] + + if self.do_genesis: + gfs_tasks += ['genesis'] + + if self.do_genesis_fsu: + gfs_tasks += ['genesis_fsu'] + + if self.do_metp: + gfs_tasks += ['metp'] + + if self.do_wave and 'gfs' in self.wave_cdumps: + if self.do_wave_bnd: + gfs_tasks += wave_bndpnt_tasks + gfs_tasks += wave_post_tasks + if self.do_gempak: + gfs_tasks += ['wavegempak'] + if self.do_awips: + gfs_tasks += ['waveawipsbulls', 'waveawipsgridded'] + + if self.do_bufrsnd: + gfs_tasks += ['postsnd'] + + if self.do_gempak: + gfs_tasks += ['gempak'] + gfs_tasks += ['gempakmeta'] + gfs_tasks += ['gempakncdcupapgif'] + gfs_tasks += ['npoess_pgrb2_0p5deg'] + gfs_tasks += ['gempakpgrb2spec'] + + if self.do_awips: + gfs_tasks += ['awips_20km_1p0deg', 'awips_g2', 'fbwinds'] + + gfs_tasks += gdas_gfs_common_cleanup_tasks + + tasks = dict() + tasks['gdas'] = gdas_tasks + + if self.do_hybvar and 'gdas' in self.eupd_cdumps: + enkfgdas_tasks = hybrid_tasks + hybrid_after_eupd_tasks + tasks['enkfgdas'] = enkfgdas_tasks + + # Add CDUMP=gfs tasks if running early cycle + if self.gfs_cyc > 0: + tasks['gfs'] = gfs_tasks + + if self.do_hybvar and 'gfs' in self.eupd_cdumps: + enkfgfs_tasks = hybrid_tasks + hybrid_after_eupd_tasks + enkfgfs_tasks.remove("echgres") + tasks['enkfgfs'] = enkfgfs_tasks + + return tasks + + @staticmethod + def get_gfs_cyc_dates(base: Dict[str, Any]) -> Dict[str, Any]: + """ + Generate GFS dates from experiment dates and gfs_cyc choice + """ + + base_out = base.copy() + + sdate = base['SDATE'] + edate = base['EDATE'] + base_out['INTERVAL'] = to_timedelta(f"{base['assim_freq']}H") + + # Set GFS cycling dates + gfs_cyc = base['gfs_cyc'] + if gfs_cyc != 0: + interval_gfs = AppConfig.get_gfs_interval(gfs_cyc) + hrinc = 0 + hrdet = 0 + if gfs_cyc == 1: + hrinc = 24 - sdate.hour + hrdet = edate.hour + elif gfs_cyc == 2: + if sdate.hour in [0, 12]: + hrinc = 12 + elif sdate.hour in [6, 18]: + hrinc = 6 + if edate.hour in [6, 18]: + hrdet = 6 + elif gfs_cyc == 4: + hrinc = 6 + sdate_gfs = sdate + timedelta(hours=hrinc) + edate_gfs = edate - timedelta(hours=hrdet) + if sdate_gfs > edate: + print('W A R N I N G!') + print('Starting date for GFS cycles is after Ending date of experiment') + print(f'SDATE = {sdate.strftime("%Y%m%d%H")}, EDATE = {edate.strftime("%Y%m%d%H")}') + print(f'SDATE_GFS = {sdate_gfs.strftime("%Y%m%d%H")}, EDATE_GFS = {edate_gfs.strftime("%Y%m%d%H")}') + gfs_cyc = 0 + + base_out['gfs_cyc'] = gfs_cyc + base_out['SDATE_GFS'] = sdate_gfs + base_out['EDATE_GFS'] = edate_gfs + base_out['INTERVAL_GFS'] = interval_gfs + + fhmax_gfs = {} + for hh in ['00', '06', '12', '18']: + fhmax_gfs[hh] = base.get(f'FHMAX_GFS_{hh}', base.get('FHMAX_GFS_00', 120)) + base_out['FHMAX_GFS'] = fhmax_gfs + + return base_out diff --git a/workflow/applications/gfs_forecast_only.py b/workflow/applications/gfs_forecast_only.py new file mode 100644 index 0000000000..701ec12a04 --- /dev/null +++ b/workflow/applications/gfs_forecast_only.py @@ -0,0 +1,134 @@ +from applications.applications import AppConfig +from wxflow import Configuration + + +class GFSForecastOnlyAppConfig(AppConfig): + ''' + Class to define GFS forecast-only configurations + ''' + + def __init__(self, conf: Configuration): + super().__init__(conf) + + def _get_app_configs(self): + """ + Returns the config_files that are involved in the forecast-only app + """ + + configs = ['stage_ic', 'fcst', 'arch', 'cleanup'] + + if self.do_atm: + + if self.do_upp: + configs += ['upp'] + + configs += ['atmos_products'] + + if self.do_aero: + configs += ['aerosol_init'] + + if self.do_tracker: + configs += ['tracker'] + + if self.do_genesis: + configs += ['genesis'] + + if self.do_genesis_fsu: + configs += ['genesis_fsu'] + + if self.do_metp: + configs += ['metp'] + + if self.do_bufrsnd: + configs += ['postsnd'] + + if self.do_gempak: + configs += ['gempak'] + + if self.do_awips: + configs += ['awips'] + + if self.do_ocean or self.do_ice: + configs += ['ocnpost'] + + if self.do_wave: + configs += ['waveinit', 'waveprep', 'wavepostsbs', 'wavepostpnt'] + if self.do_wave_bnd: + configs += ['wavepostbndpnt', 'wavepostbndpntbll'] + if self.do_gempak: + configs += ['wavegempak'] + if self.do_awips: + configs += ['waveawipsbulls', 'waveawipsgridded'] + + return configs + + @staticmethod + def _update_base(base_in): + + base_out = base_in.copy() + base_out['INTERVAL_GFS'] = AppConfig.get_gfs_interval(base_in['gfs_cyc']) + base_out['CDUMP'] = 'gfs' + + return base_out + + def get_task_names(self): + """ + Get the task names for all the tasks in the forecast-only application. + Note that the order of the task names matters in the XML. + This is the place where that order is set. + """ + + tasks = ['stage_ic'] + + if self.do_aero: + tasks += ['aerosol_init'] + + if self.do_wave: + tasks += ['waveinit'] + # tasks += ['waveprep'] # TODO - verify if waveprep is executed in forecast-only mode when APP=ATMW|S2SW + + tasks += ['fcst'] + + if self.do_atm: + + if self.do_upp: + tasks += ['atmupp'] + + tasks += ['atmprod'] + + if self.do_tracker: + tasks += ['tracker'] + + if self.do_genesis: + tasks += ['genesis'] + + if self.do_genesis_fsu: + tasks += ['genesis_fsu'] + + if self.do_metp: + tasks += ['metp'] + + if self.do_bufrsnd: + tasks += ['postsnd'] + + if self.do_gempak: + tasks += ['gempak', 'gempakmeta', 'gempakncdcupapgif', 'gempakpgrb2spec'] + + if self.do_awips: + tasks += ['awips_20km_1p0deg', 'awips_g2', 'fbwinds'] + + if self.do_ocean or self.do_ice: + tasks += ['ocnpost'] + + if self.do_wave: + if self.do_wave_bnd: + tasks += ['wavepostbndpnt', 'wavepostbndpntbll'] + tasks += ['wavepostsbs', 'wavepostpnt'] + if self.do_gempak: + tasks += ['wavegempak'] + if self.do_awips: + tasks += ['waveawipsbulls', 'waveawipsgridded'] + + tasks += ['arch', 'cleanup'] # arch and cleanup **must** be the last tasks + + return {f"{self._base['CDUMP']}": tasks} diff --git a/workflow/create_experiment.py b/workflow/create_experiment.py new file mode 100755 index 0000000000..cfa49e0d38 --- /dev/null +++ b/workflow/create_experiment.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python3 + +""" +Basic python script to create an experiment directory on the fly from a given +yaml file for the arguments to the two scripts below in ${HOMEgfs}/workflow +where ${HOMEgfs} is determined from the location of this script. + + ${HOMEgfs}/workflow/setup_expt.py + ${HOMEgfs}/workflow/setup_xml.py + +The yaml file are simply the arguments for these two scripts. +After this scripts runs the experiment is ready for launch. + +Output +------ +Functionally an experiment is setup as a result running the two scripts described above +with an error code of 0 upon success. +""" + +import os +import sys + +from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter +from pathlib import Path + +from wxflow import AttrDict, parse_j2yaml, Logger, logit + +import setup_expt +import setup_xml + +from hosts import Host + +_here = os.path.dirname(__file__) +_top = os.path.abspath(os.path.join(os.path.abspath(_here), '..')) + +# Setup the logger +logger = Logger(logfile_path=os.environ.get("LOGFILE_PATH"), level=os.environ.get("LOGGING_LEVEL", "DEBUG"), colored_log=False) + + +@logit(logger) +def input_args(): + """ + Description + ----------- + + Method to collect user arguments for `create_experiment.py` + + Parameters + ---------- + + None + + Returns + ------- + + argparse.Namespace: + argparse.Namespace with the value of the file path to a yaml file from the key yaml + """ + + description = """Create a global-workflow experiment""" + + parser = ArgumentParser(description=description, + formatter_class=ArgumentDefaultsHelpFormatter) + + parser.add_argument( + '--yaml', help='full path to yaml file describing the experiment configuration', type=Path, required=True) + + return parser.parse_args() + + +if __name__ == '__main__': + + user_inputs = input_args() + + # Create a dictionary to pass to parse_j2yaml for parsing the yaml file + data = AttrDict(HOMEgfs=_top) + data.update(os.environ) + testconf = parse_j2yaml(path=user_inputs.yaml, data=data) + + if 'skip_ci_on_hosts' in testconf: + host = Host() + if host.machine.lower() in testconf.skip_ci_on_hosts.lower(): + logger.info(f'Skipping creation of case: {testconf.arguments.pslot} on {host.machine.capitalize()}') + sys.exit(0) + + # Create a list of arguments to setup_expt.py + setup_expt_args = [testconf.experiment.system, testconf.experiment.mode] + for kk, vv in testconf.arguments.items(): + setup_expt_args.append(f"--{kk}") + setup_expt_args.append(str(vv)) + + logger.info(f"Call: setup_expt.main()") + logger.debug(f"setup_expt.py {' '.join(setup_expt_args)}") + setup_expt.main(setup_expt_args) + + # Create a list of arguments to setup_xml.py + experiment_dir = Path.absolute(Path.joinpath( + Path(testconf.arguments.expdir), Path(testconf.arguments.pslot))) + + setup_xml_args = [str(experiment_dir)] + + logger.info(f"Call: setup_xml.main()") + logger.debug(f"setup_xml.py {' '.join(setup_xml_args)}") + setup_xml.main(setup_xml_args) diff --git a/workflow/ecFlow/__init.py__ b/workflow/ecFlow/__init.py__ new file mode 100644 index 0000000000..e69de29bb2 diff --git a/workflow/ecFlow/ecflow_definitions.py b/workflow/ecFlow/ecflow_definitions.py new file mode 100644 index 0000000000..0aea65710c --- /dev/null +++ b/workflow/ecFlow/ecflow_definitions.py @@ -0,0 +1,2010 @@ +#!/usr/bin/env python3 + +""" + PROGRAM: + Manage the ecflow definitions setup. The main purpose of this class is + to be called by the ecflow_setup.py module and create an Ecflowsuite + object for each suite. Then the processing for triggers, breaking + apart the list or loop strings and adding in the triggers an events + using the ecflow module to call things like ecflow.Task, + ecflow.Trigger, and so on. + + The creates a dictionary object of each of the items it creates and + then uses the ecfsuite dict to reference so a task's trigger will + reference an already existing task and thereby automatically + populate the full path to the task as opposed to a more + dynamic reference. + + At the bottom of this module are the custom objects created to extend + the ecflow classes for tasks, families, + etc. + AUTHOR: + Kyle Nevins + kyle.nevins@noaa.gov + FILE DEPENDENCIES: + None + OUTPUT: + None +""" +import sys +import os +import re +import shutil +from datetime import datetime, timedelta +try: + import ecflow +except ImportError as err: + raise ImportError(f"Error: Could not import ecflow module: {err}") + + +class Ecflowsuite: + """ + This class is the representation of an ecflow suite. It manages all of the + items within using a dictionary. Names for the tasks are in the dictonary + by their name so all task names in a suite need to be unique otherwise + you'll have some issues. + + Families in the dictionary are represented by the parent nodes combined + with the family name, so for example the family + gfs: + atmos: + post: + will be in the dictionary at the key gfs>atmos>post, referenced like so, + self.nodes[gfs>atmos>post]. That will contain all of the objects for + that family. + + Attributes + ---------- + ecfsuite_nodes : dict + Dictionary object that contains all the nodes within the suite. This + includes tasks, families, triggers, events, etc. + ecf_nodes : dict + While the ecfsuite_nodes dictionary tracks the actual ecflow API + defined nodes, this dictionary tracks the custom nodes that are + defined in the bottom of this module. + ecfhome : str + The path to the base for the ecf items. This includes the ecf scripts + repository and the storage location for all the suite script. In the + default, it is generally assumed to be the ecfGFS parameter from the + experiment setup. + build_tree : bool + A boolean that indicates if the application should build the folders + and scripts as part of the run. If this is false, the scripts and + folders are not created and assumed to already be in place. + ecfsuite : str + The name of the suite. + + Methods + ------- + add_suite(suite) + Creates the suite and if necessary creates the base folders. + + get_suite( ) + Get the EcfSuite object + + get_suite_name( ) + Returns the name of the suite + + add_ecfsuite_node(name, node) + Adds the ecfsuite node to the dictionary + + get_node(task) + Returns a specific node from the suite. + + add_edit(edit_dict, parent=None) + Adds an edit to either a suite, task, or family. The parent defines + what object will get the edit object. + + add_event(event, parent=None) + Adds an event to the parent node. Events can only be associated with + families or tasks so if the parent is None, nothing will be added. + This was done to avoid errors. + + add_defstatus(defstatus, parent=None) + Adds an defstatus to the parent node. Defstatus objects can only be + associated with families or tasks so if the parent is None, nothing + will be added. This was done to avoid errors. + + add_repeat(repeat, parent=None) + Adds in a repeat to the parent node. Repeats can be parts of a family, + task, or suite. If the parent is none it will be added to the suite. + + add_trigger(trigger, parent, state=None, event=None, suite=None, + suite_array=None, operand=None) + Adds a trigger to the parent node. Triggers can be added to families + and tasks. + + add_family(family, parents=None) + Adds a family to the suite. If the parents value is set to none, then + it will be added as a top level family. Otherwise, it will be added as + a sub-family to the parents. + + add_family_edits(edits, family, family_node, index) + Since the families and tasks are handled slightly differently with the + families being called from the ecflow_setup module and the tasks + being handled in this module, a separate function to add family edits + to the definition is required. + + add_task(task, parents, scriptrepo, template=None, + parent_node=None, index=None) + Adds a task to the parent node. If the build is set to true then the + method also calls the creation method in the EcfTask class to deploy + the script to the proper location. The script repo is where it will + look for the script. If template is set, it will look for that template + and then copy and change the name of the template at the destination to + the name of the task. + + add_task_edits(task, edit_dict, parent_node=None, index=None) + Adds edits to a task. This takes in the edit_dict and then calls the + add_edit method to apply them to that task. + + add_task_repeat(task, repeat) + Adds a repeats to task nodes. This function primarily breaks down the + tasks into lists or ranges based on the task string and then adds the + repeat to the breakout. + + add_task_defstatus(task, defstatus) + Adds a defstatus to a task node. This function breaks down the task + string into a range or list if necessary and then adds the calls the + add_defstatus method. + + add_task_events(task, events, parent_node=None, index=None) + Adds events to a task. This function breaks down the task string into + ranges or lists if necessary but also breaks down the events if those + are a list or range. It then passes the fully formed pieces to the + add_event method to add them to the suite. + + add_suite_triggers(task, triggers, suite_array, parents, parent_node=None, + index=None) + Adds triggers to a task. This is a fairly complex method and might be + able to be broken into smaller pieces at some point. The triggers + can be loops in themselves, based on a task with an event or a loop of + events. Or even a loop of other tasks from other suites. This function + breaks down the tasks themselves and then also any loop/list logic that + exists within the trigger and applies them to the task with the + add_trigger method. + """ + + def __init__(self, ecfsuite, ecfhome, build_tree=True): + """ + Parameters + ---------- + ecfhome : str + The path to the base for the ecf items. This includes the ecf + scripts repository and the storage location for all the suite + script. In the default, it is generally assumed to be the ecfGFS + parameter from the experiment setup. + build_tree : bool + A boolean that indicates if the application should build the + folders and scripts as part of the run. If this is false, the + scripts and folders are not created and assumed to already be + in place. + ecfsuite : str + The name of the suite. + """ + + # Initialize environment + self.ecfsuite_nodes = {} + self.ecf_nodes = {} + self.ecfhome = ecfhome + self.build_tree = build_tree + + # Create initial suite + self.ecfsuite = self.add_suite(ecfsuite) + + def add_suite(self, suite): + """ + Creates the suite object and if necessary creates the base folders. + + Parameters + ---------- + suite : str + Name of the suite object. + + Returns + ------- + new_suite : EcfSuite object + An EcfSuite object + """ + + new_suite = EcfSuite(f"{suite}") + if self.build_tree: + new_suite.generate_folders(self.ecfhome) + return new_suite + + def get_suite(self): + """ + Get the EcfSuite object + + Parameters + ---------- + None + + Returns + ------- + EcfSuite + The ecfsuite object that has all the contents + """ + + return self.ecfsuite + + def get_suite_name(self): + """ + Returns the name of the suite + + Parameters + ---------- + None + + Returns + ------- + name : str + The name of the suite. + """ + + return self.ecfsuite.name() + + def add_ecfsuite_node(self, name, node): + """ + Adds the ecfsuite node to the dictionary + + Parameters + ---------- + name : str + The string name of the object + node : EcfNode + The actual node object. + """ + + self.ecfsuite_nodes[name] = node + + def get_node(self, node): + """ + Returns a specific task from the suite. + + Parameters + ---------- + task : str + The name of the task to lookup in the EcfNodes dictionary. + + Returns + ------- + EcfTask + An EcfTask that is an extension of the ecflow.task object. + """ + + return self.ecf_nodes[node] + + def add_edit(self, edit_dict, parent=None): + """ + Adds an edit to either a suite, task, or family. The parent defines + what object will get the edit object. + + Parameters + ---------- + edit_dict : dict + Dictionary object that contains the edits in the form of + {"edit" : "value"} + parent : str + String for the parent node that will get the edits added. + + Returns + ------- + None + """ + + if parent: + self.ecf_nodes[parent] += ecflow.Edit(edit_dict) + else: + self.ecfsuite += ecflow.Edit(edit_dict) + + def add_event(self, event, parent=None): + """ + Adds an event to the parent node. Events can only be associated with + families or tasks so if the parent is None, nothing will be added. + This was done to avoid errors. + + Parameters + ---------- + event : str + A string that is passed to the ecflow.Event object + parent : str + String for the parent node that will get the events added. + + Returns + ------- + None + """ + + if parent: + self.ecf_nodes[parent] += ecflow.Event(event) + + def add_defstatus(self, defstatus, parent=None): + """ + Adds an defstatus to the parent node. Defstatus objects can only be + associated with families or tasks so if the parent is None, nothing + will be added. This was done to avoid errors. + + Parameters + ---------- + defstatus : str + A string that is passed to the ecflow.Defstatus object + parent : str + String for the parent node that will get the defstatus added. + + Returns + ------- + None + """ + + if parent: + self.ecf_nodes[parent] += ecflow.Defstatus(defstatus) + + def add_repeat(self, repeat, parent=None): + """ + Adds in a repeat to the parent node. Repeats can be parts of a family, + task, or suite. If the parent is none it will be added to the suite. + + This will calculate the difference between the two dates and use the + interval value from the third entry to identify how often. Due to the + fact that ecflow has a very simplistic time/date/interval + implementation, this function can render the dates in multiple + different fashions. + + If the start and end are the same day, it'll just use a time set. If + it is different days, it'll do a relative time set with the dates and + also a start time. If it is multiple dates it will throw in repeats + based on relative values. + + Parameters + ---------- + repeat : str + This is a date string in the format of YYYYMMDDHH to YYYYMMDDHH by + DD:HH:MM. The hours on the second date string are optional as are + the day parameters in the time string. + parent : str + + Returns + ------- + None + """ + + repeat_token = re.search( + r"(\d{8,10})( | to )(\d{10})( | by )(\d{1,2}:)?(\d{1,2}:\d{1,2})", + repeat) + start = repeat_token.group(1).strip() + end = repeat_token.group(3).strip() + byday = repeat_token.group(5).strip() if repeat_token.group(5) is not \ + None else repeat_token.group(5) + bytime = repeat_token.group(6).strip() + + startdate = datetime.strptime(start, "%Y%m%d%H") if len(start) == 10 \ + else datetime.strptime(start, "%Y%m%d") + enddate = datetime.strptime(end, "%Y%m%d%H") + if byday is not None: + delta = timedelta(days=int(byday.split(':')[0]), + hours=int(bytime.split(':')[0]), + minutes=int(bytime.split(':')[1])) + else: + delta = timedelta(hours=int(bytime.split(':')[0]), + minutes=int(bytime.split(':')[1])) + + total_runtime = enddate - startdate + + if parent: + targetnode = self.ecf_nodes[parent] + else: + targetnode = self.ecfsuite + + try: + if total_runtime.total_seconds() < delta.total_seconds(): + raise ConfigurationError + except ConfigurationError: + if parent: + print(f"Node: {parent} - " + "Repeat has a greater increment than total time.") + else: + print(f"Suite: {self.get_suite_name()} - " + "Repeat has a greater increment than total time.") + sys.exit(1) + + # Setup the start date. + targetnode += ecflow.Date(f"{startdate.strftime('%d.%m.%Y')}") + + # If the dates are the same day, we only need a time string: + if startdate.date() == enddate.date(): + deltahours, deltaminutes = delta.seconds // 3600, delta.seconds // 60 % 60 + time_string = (f"{startdate.strftime('%H:%M')} " + f"{enddate.strftime('%H:%M')} " + f"{deltahours:02}:{deltaminutes:02}") + targetnode += ecflow.Time(time_string) + # If the days don't match up, we'll need to do some repeats. + else: + deltahours, deltaminutes = delta.seconds // 3600, delta.seconds // 60 % 60 + if delta.total_seconds() < 86400: + position_time = startdate + total_instances = 0 + while position_time <= enddate: + total_instances += 1 + position_time = position_time + delta + if len(start) == 10: + targetnode += ecflow.Time(f"{startdate.strftime('%H:%M')}") + else: + targetnode += ecflow.Today(ecflow.TimeSlot(0, 0), True) + targetnode += ecflow.Time(deltahours, deltaminutes, True) + targetnode += ecflow.RepeatInteger("RUN", 1, total_instances) + else: + if deltahours == 0 and deltaminutes == 0: + position_time = startdate + delta + if len(start) == 10: + targetnode += ecflow.Time(f"{startdate.strftime('%H:%M')}") + else: + targetnode += ecflow.Time(00, 00, True) + while position_time <= enddate: + position_string = f"{position_time.strftime('%d.%m.%Y')}" + targetnode += ecflow.Date(position_string) + position_time = position_time + delta + else: + position_time = startdate + while position_time <= enddate: + targetnode += ecflow.Cron(position_time.strftime('%H:%M'), + days_of_month=[int(position_time.strftime('%d'))], + months=[int(position_time.strftime('%m'))]) + position_time = position_time + delta + + def add_trigger(self, trigger, parent, state=None, event=None, suite=None, + suite_array=None, operand=None): + """ + Adds a trigger to the parent node. Triggers can be added to families + and tasks. + + Parameters + ---------- + trigger : str + The trigger string to add to the parent node. + parent : str + The parent node that will accept the trigger + state : str + The state of the trigger. Generally looking for complete, active, + or queued. + event : str + If there is an event associated with a task, this will add it to + the trigger definition. + suite : str + If the trigger is looking outside the current suite, this will + pull in the details from the other suites and attach the trigger. + suite_array : dict + This is the array of suites in the event that the suite value is + populated, the details of the suite need to be made available to + the function + operand : bool + This is a true/false value that is looking to define if the trigger + is an AND or an OR. If it is TRUE it is an AND, if it is FALSE, it + is an OR. + + Returns + ------- + None + """ + + if suite is not None: + try: + trigger_path = suite_array[suite].get_node(trigger).get_abs_node_path() + if state is None and event is None: + add_trigger = ecflow.Trigger(f"{trigger_path} == complete") + elif state is not None and event is None: + add_trigger = ecflow.Trigger(f"{trigger_path} == {state}") + elif state is None and event is not None: + add_trigger = ecflow.Trigger(f"{trigger_path}:{event}") + except KeyError as e: + print(f"Suite {suite} for task/trigger {parent}/{trigger}" + " is not available. Please check the configuration file.") + print("Error {e}") + sys.exit(1) + else: + try: + if state is None and event is None: + add_trigger = ecflow.Trigger([self.ecf_nodes[trigger]]) + elif state is not None and event is None: + trigger_path = self.ecf_nodes[trigger].get_abs_node_path() + add_trigger = ecflow.Trigger(f"{trigger_path} == {state}") + elif state is None and event is not None: + trigger_path = self.ecf_nodes[trigger].get_abs_node_path() + add_trigger = ecflow.Trigger(f"{trigger_path}:{event}") + except KeyError as e: + print(f"The node/trigger {parent}/{trigger} is not available " + f"in suite {self.get_suite_name()}." + " Please check the configuration file.") + print(f"Error {e}") + sys.exit(1) + if (operand is not None and + self.ecf_nodes[parent].get_trigger() is not None): + add_trigger = ecflow.Trigger(add_trigger.get_expression(), operand) + self.ecf_nodes[parent].add(add_trigger) + + def add_family(self, family, parents=None): + """ + Adds a family to the suite. If the parents value is set to none, then + it will be added as a top level family. Otherwise, it will be added as + a sub-family to the parents. + + Parameters + ---------- + family : str + The name of the family that is to be added to the suite. + parents : str + The string representation of the parent nodes that the family needs + to be added to. + + Returns + ------- + None + """ + + family_name = f"{parents}>{family}" if parents else family + + # If the name already exists, the family already exists + if family_name not in self.ecf_nodes.keys(): + self.ecf_nodes[family_name] = EcfFamily(family) + if self.build_tree: + self.ecf_nodes[family_name].generate_folders(self.ecfhome, + self.get_suite_name(), + parents) + + if parents: + self.ecf_nodes[parents] += self.ecf_nodes[family_name] + else: + self.ecfsuite += self.ecf_nodes[family_name] + + def add_family_edits(self, edits, family, family_node, index): + """ + Since the families and tasks are handled slightly differently with the + families being called from the ecflow_setup module and the tasks + being handled in this module, a separate function to add family edits + to the definition is required. + + Parameters + ---------- + edits : dict + The dictionary that contains the edits to be added to the family. + family : str + This is a string representation of the current family. If it is + a looping family, this will be the actual name for whatever the + index is using. + family_node : str + This is the string of the family node that includes any looping + mechanisms. This is necessary in case the edit needs to use the + index or is a loop mechanism itself. + index : int + The current position of the loop in the event that the family is + a loop so the edit value can reference the correct object. + + Returns + ------- + None + """ + + for node in edits: + edit_node = EcfEditNode(node, family_node) + value_node = EcfEditNode(edits[node], family_node) + for edit in edit_node.get_full_name_items(index): + for value in value_node.get_full_name_items(index): + self.add_edit({edit: value}, family) + + def add_task(self, task, parents, scriptrepo, template=None, + parent_node=None, index=None): + """ + Adds a task to the parent node. If the build is set to true then the + method also calls the creation method in the EcfTask class to deploy + the script to the proper location. The script repo is where it will + look for the script. If template is set, it will look for that template + and then copy and change the name of the template at the destination to + the name of the task. + + Parameters + ---------- + task : str + The name of the task + parents : str + The name of the parent nodes to get the task + scriptrepo : str + File path to the script repository to look for the task.ecf scripts + template : str + Name of the template file to use instead of searching for the name + of the task in the script repo. + parent_node : EcfNode + This is the parent node string that contains any looping details + if it is a list or a range object so that can be passed into the + task objects. + index : int + The current position of the parent_node in its loop so if the task + is dependent on the parent_node for position it is obtained from + this value. + + Returns + ------- + None + """ + task_node = EcfTaskNode(task, parent_node) + self.ecfsuite_nodes[task] = task_node + for task_name in task_node.get_full_name_items(index): + if task_name not in self.ecf_nodes.keys(): + self.ecf_nodes[task_name] = EcfTask(task_name) + self.ecf_nodes[task_name].setup_script(scriptrepo, template) + if self.build_tree: + self.ecf_nodes[task_name].generate_ecflow_task(self.ecfhome, + self.get_suite_name(), + parents) + self.ecf_nodes[parents] += self.ecf_nodes[task_name] + + def add_task_edits(self, task, edit_dict, parent_node=None, index=None): + """ + Adds edits to a task. This takes in the edit_dict and then calls the + add_edit method to apply them to that task. + + This function also breaks apart any lists or ranges that are passed in + to the tasks and applies it to all of them. It also applies any loop + logic that is applied to the parent task to the edits themselves. + + Parameters + ---------- + task : str + The name of the task. Can also include a list or range object in + the string. + edit_dict : dict + A dictionary of the edits that are to be applied to the tasks. + parent_node : str + This is the parent node string that contains any looping details + if it is a list or a range object so that can be passed into the + task objects. + index : int + The current position of the parent_node in its loop so if the edit + is dependent on the parent_node for position it is obtained from + this value. + + Returns + ------- + None + """ + + task_node = self.ecfsuite_nodes[task] + if len(task_node.get_full_name_items(index)) > 1: + node_for_edits = task_node + else: + node_for_edits = parent_node + for task_name in task_node.get_full_name_items(index): + task_index = task_node.get_full_name_items().index(task_name) + for node in edit_dict: + edit_node = EcfEditNode(node, node_for_edits) + value_node = EcfEditNode(edit_dict[node], node_for_edits) + for edit in edit_node.get_full_name_items(task_index): + for value in value_node.get_full_name_items(task_index): + self.add_edit({edit: value}, task_name) + + def add_task_repeat(self, task, repeat): + """ + Adds a repeats to task nodes. This function primarily breaks down the + tasks into lists or ranges based on the task string and then adds the + repeat to the breakout. + + Parameters + ---------- + task : str + The name of the task or list/range of tasks to add the repeat. + repeat : str + The repeat string to be passed to the add_repeat method. + + Returns + ------- + None + """ + + task_node = self.ecfsuite_nodes[task] + for task_name in task_node.get_full_name_items(index): + self.add_repeat(repeat, task_name) + + def add_task_defstatus(self, task, defstatus): + """ + Adds a defstatus to a task node. This function breaks down the task + string into a range or list if necessary and then adds the calls the + add_defstatus method. + + Parameters + ---------- + task : str + The task string to add the defstatus pieces to. Can be a range or + list as well. + defstatus : str + String that represents the defstatus, like complete. + + Returns + ------- + None + """ + + task_node = self.ecfsuite_nodes[task] + for task_name in task_node.get_full_name_items(index): + self.add_defstatus(defstatus, task_name) + + def add_task_events(self, task, events, parent_node=None, index=None): + """ + Adds events to a task. This function breaks down the task string into + ranges or lists if necessary but also breaks down the events if those + are a list or range. It then passes the fully formed pieces to the + add_event method to add them to the suite. + + Parameters + ---------- + task : str + The task string to add the event to. + events : str + The events string that will be added to the task. + parent_node : str + This is the parent node string that contains any looping details + if it is a list or a range object so that can be passed into the + task objects. + index : int + The current position of the parent_node in its loop so if the task + is dependent on the parent_node for position it is obtained from + this value. + + Returns + ------- + None + """ + + task_node = self.ecfsuite_nodes[task] + for task_name in task_node.get_full_name_items(index): + if task_node.is_list or task_node.is_range: + node_for_events = task_node + task_index = task_node.get_full_name_items().index(task_name) + else: + node_for_events = parent_node + task_index = index + for event_item in events: + event_node = EcfEventNode(event_item, node_for_events) + for node in event_node.get_full_name_items(task_index): + self.add_event(node, task_name) + + def add_suite_triggers(self, node, triggers, suite_array, parents, + parent_node=None, index=None): + """ + Adds triggers to a task. This is a fairly complex method and might be + able to be broken into smaller pieces at some point. The triggers + can be loops in themselves, based on a task with an event or a loop of + events. Or even a loop of other tasks from other suites. This function + breaks down the tasks themselves and then also any loop/list logic that + exists within the trigger and applies them to the task with the + add_trigger method. + + Parameters + ---------- + node : str + The task string, list, range or static, that is to be broken down + and then the triggers applied. + triggers : dict + The dictionary of triggers to add to the task. + suite_array : dict + In case the triggers are from another suite, this calls the trigger + from the other suite. + parents : str + The string of the parents, this is used to identify the family in + the event that the trigger is associated with a family. + parent_node : str + This is the parent node string that contains any looping details + if it is a list or a range object so that can be passed into the + task objects. + index : int + The current position of the parent_node in its loop so if the task + is dependent on the parent_node for position it is obtained from + this value. + + Returns + ------- + None + """ + + working_node = self.ecfsuite_nodes[node] + for item in working_node.get_full_name_items(index): + if working_node.get_type() == "family": + node_name = (f"{parents}>{item}") + else: + node_name = item + for trigger_item in triggers: + suite = None + operand = None + trigger_node = ecfTriggerNode(trigger_item, working_node) + if trigger_node.has_suite(): + suite = trigger_node.get_suite() + if trigger_node.has_operand(): + operand = trigger_node.get_operand() + + if working_node.is_list or working_node.is_range: + trigger_index = working_node. \ + get_full_name_items(index). \ + index(item) + else: + trigger_index = index + + for trigger in trigger_node.get_full_name_items(trigger_index): + if trigger_node.trigger_type == "family": + trigger_name = trigger.replace('/', '>') + else: + trigger_name = trigger + + if trigger_node.has_event(): + if trigger_node.is_list or trigger_node.is_range: + event_index = trigger_node.\ + get_full_name_items(index).\ + index(trigger_name) + elif working_node.is_list or working_node.is_range: + event_index = trigger_index + else: + event_index = index + trigger_events = trigger_node.get_event() + for event in trigger_events.\ + get_full_name_items(event_index): + if trigger_node.has_state(): + state = trigger_node.get_state() + if not isinstance(state, list): + state = [state] + for state_item in state: + self.add_trigger(trigger_name, node_name, + suite=suite, + suite_array=suite_array, + event=event, + state=state_item, + operand=operand) + else: + self.add_trigger(trigger_name, node_name, + suite=suite, + suite_array=suite_array, + event=event, + operand=operand) + else: + if trigger_node.has_state(): + state = trigger_node.get_state() + if not isinstance(state, list): + state = [state] + for state_item in state: + self.add_trigger(trigger_name, node_name, + suite=suite, + suite_array=suite_array, + state=state_item, + operand=operand) + else: + self.add_trigger(trigger_name, node_name, + suite=suite, + suite_array=suite_array, + operand=operand) + + +class EcfNode(): + """ + This is the base class for the other classes that are used to identify any + loops, lists, or what the item might be and also assign the name to the + object. This reduces the overhead for code and also makes it easier to + add in additional node type objects. Most of the objects extend this class + so this one is the main functions that apply to all node types. + + Attributes + ---------- + initial_count : int + In the event that the node is a range this value will hold the initial + count value for the object. + increment : int + In the event that the node is a range or list, this holds the amount + to increment the counter. + max_value : int + In the event that the node is a range or list, this holds the max value + associated with it. + name : str + Name of the object. + is_list : bool + If the node contains the [ ] list syntax. True if it does, false + otherwise. + items : array + Is the array of items within a list if the node object has a list + full_name_items : array + This is an array that consists of the counter plus any prefix or suffix + in the node string. + use_parent_counter : bool + If the node use a list or range syntax but has no internal values, + indicating that it should use the range of the parent node. + + Methods + ------- + get_name() + Returns the name of the node. + + __check_range(ecfitem) + Checks to see if the EcfNode is a loop. If it is, this function also + calls the supporting functions to set the range values, if there is + a max, min, interval, or list. + + invalid_range() + Helper function to ensure that the range is valid. Exits if it is not. + + get_items() + Returns the list of items for the ecf node so that it can be distributed + to the child nodes. + + get_full_name_items(counter=0) + If the item is a range or list, it returns the full names of the items + with the prefix and suffix strings included, if it is a single then it + just returns an array of one item. If it uses the parent counter it + returns an array of one item in the position of the parent counter. + + __set_max_value(range_token) + The range token is passed in and if only one value is set in the range + then it is set to max value and the initial is set to 0 and the + interval is set to 1. + + __set_initial_max_value(range_token) + If the range token is passed two parameters, they are assumed to be + the initial and max values. This sets those values for the node. The + interval is set to 1. + + __set_initial_increment_max_value(range_token) + If three values are sent in through the range token, this sets the max, + initial, and increment values. + + __setup_items_list(ecfparent) + In the event that the items list wasn't already defined, this sets up + the list of items for the node by pulling in the parent items if + necessary, modifying the increment setup as necessary as well. After + this method is called the items array should be fully populated. + + __populate_full_name_items() + Called after the items list is populated. If there is a range or list + then this uses the items list with the prefix and suffix strings to + create a new array for full names and populates that array. After this + is called the full_name_items array should be used. If the node isn't + a range or list then it is just an array of one item. + + get_full_name(counter=None) + This method uses the counter object if the item is a list to identify + the position in a list, the item in the range or if there is no counter + associated with it, the base name. + + get_position_name(counter=None) + This method uses the counter object if the item is a list to identify + the position in a list, the item in the range or if there is no counter + associated with it, the base name. + + has_max_value() + Returns true if the node object range has a maximum value. + + get_max_value() + Returns the maximum value for the node. + + get_range(initial_count=0, increment=1, max_value=1) + If the node has a list or range associated with it, this returns the + range of items or the range of the array. + """ + + def __init__(self, ecfitem, ecfparent=None): + """ + Parameters + ---------- + ecfitem : str + Name of the EcfNode item. If it contains a range or list + identifier, the other values are populated to identify what kind + of node it is. + ecfparent : str + Name of the parent for the EcfNode item. This will help determine + if the parent has the counter or if one is defined for this class + """ + self.__items = [] + self.__full_name_items = [] + self.__check_range(ecfitem) + self.__setup_items_list(ecfparent) + self.__populate_full_name_items() + if (ecfparent and self.__max_value is None and + (ecfparent.is_list or ecfparent.is_range) and + len(self.__items) == len(ecfparent.get_full_name_items())): + self.use_parent_counter = True + + def get_name(self): + """ + Returns the name of the node. + + Parameters + ---------- + None + + Returns + ------- + str + The name in string format. + """ + + return self.name + + def __check_range(self, ecfitem): + """ + Checks to see if the EcfNode is a loop. If it is, this function also + calls the supporting functions to set the range values, if there is + a max, min, interval, or list. + + The range is split into a tokenized array. + + Parameters + ---------- + ecfitem : str + The item that is to be processed. This is just the name of the + item, not the supporting dictionary if there is one. + + + Returns + ------- + bool + True if the node is a loop format defined by ( ). + """ + + self.is_list = False + self.is_range = False + self.use_parent_counter = False + self.__base = '' + self.__suffix = '' + self.initial_count = None + self.increment = None + self.__max_value = None + + if isinstance(ecfitem, str): + self.name = ecfitem + if re.search(r".*\(.*\).*", ecfitem): + self.is_range = True + range_functions = { + 1: self.__set_max_value, + 2: self.__set_initial_max_value, + 3: self.__set_initial_increment_max_value, + } + range_token = re.search(r"(.*)\((.*)\)(.*)", self.name) + range_type = range_token.group(2).strip().split(',') + self.__base = range_token.group(1).strip() + self.__suffix = range_token.group(3).strip() + range_functions.get(len(range_type), + self.invalid_range)(range_type) + elif re.search(r".*\[.*\].*", ecfitem): + self.is_list = True + list_token = re.search(r"(.*)\[(.*)\](.*)", ecfitem) + list_type = list_token.group(2).strip().split(',') + self.__base = list_token.group(1).strip() + self.__suffix = list_token.group(3).strip() + if not list_type[0]: + self.use_parent_counter = True + else: + self.__items = list_type + else: + self.__items = [ecfitem] + elif isinstance(ecfitem, list): + self.name = ''.join(str(i) for i in ecfitem) + self.is_list = True + self.__items = ecfitem + else: + self.name = ecfitem + self.is_list = False + self.__items = [ecfitem] + + def invalid_range(self): + """ + Helper function to ensure that the range is valid. Exits if it is not. + + Parameters + ---------- + None + + Returns + ------- + None + """ + + print(f"The range specified in {self.name} is out of bounds. " + "Please review the configuration.") + sys.exit(1) + + def get_items(self): + """ + Returns the list of items for the ecf node so that it can be distributed + to the child nodes. + + Parameters + ---------- + None + + Returns + ------- + items : array + The array of items for the node. + """ + + return self.__items + + def get_full_name_items(self, counter=0): + """ + If the item is a range or list, it returns the full names of the items + with the prefix and suffix strings included, if it is a single then it + just returns an array of one item. If it uses the parent counter it + returns an array of one item in the position of the parent counter. + + Parameters + ---------- + counter : int + The position of the parent counter. If the parent counter is not + used it defaults to 0 and is not used. + + Returns + ------- + array + The array of the full name items either as a full list or an + array of one. + """ + + if self.use_parent_counter: + return [self.__full_name_items[counter]] + else: + return self.__full_name_items + + def __set_max_value(self, range_token): + """ + The range token is passed in and if only one value is set in the range + then it is set to max value and the initial is set to 0 and the + interval is set to 1. + + Parameters + ---------- + range_token : array + The range token from the is_loop method. + + Returns + ------- + None + """ + + if not range_token[0]: + self.__max_value = None + self.use_parent_counter = True + else: + try: + self.__max_value = int(range_token[0]) + except TypeError: + print(f"Maximum value for {self.name} is not an integer") + sys.exit(1) + + def __set_initial_max_value(self, range_token): + """ + If the range token is passed two parameters, they are assumed to be + the initial and max values. This sets those values for the node. The + interval is set to 1. + + Parameters + ---------- + range_token : array + The range token from the is_loop method. + + Returns + ------- + None + """ + + try: + self.initial_count = None if not range_token[0] else int(range_token[0]) + except TypeError: + print(f"Initial count value for {self.name} is not an integer") + sys.exit(1) + self.increment = None + if not range_token[1]: + self.__max_value = None + self.use_parent_counter = True + else: + try: + self.__max_value = int(range_token[1]) + except TypeError: + print(f"Maximum value for {self.name} is not an integer") + sys.exit(1) + + def __set_initial_increment_max_value(self, range_token): + """ + If three values are sent in through the range token, this sets the max, + initial, and increment values. + + Parameters + ---------- + range_token : array + The range token from the is_loop method. + + Returns + ------- + None + """ + + try: + self.initial_count = None if not range_token[0] else int(range_token[0]) + self.increment = None if not range_token[2] else int(range_token[2]) + except TypeError: + print(f"Initial count and increment values for {self.name} " + "are not integers") + sys.exit(1) + if not range_token[1]: + self.__max_value = None + self.use_parent_counter = True + else: + try: + self.__max_value = int(range_token[1]) + except TypeError: + print(f"Maximum value for {self.name} is not an integer") + sys.exit(1) + + def __setup_items_list(self, ecfparent): + """ + In the event that the items list wasn't already defined, this sets up + the list of items for the node by pulling in the parent items if + necessary, modifying the increment setup as necessary as well. After + this method is called the items array should be fully populated. + + Parameters + ---------- + ecfparent : str + The parent node in case the current node uses the parent counter. + This is passed in to get those parameters. + + Returns + ------- + None + """ + + # First check to see if the list object is already set or if this + # is even a list. If they are just return, nothing else to do. + if self.is_list: + return + if self.__items: + return + + if self.use_parent_counter: + if self.is_list: + self.__items = ecfparent.get_items() + elif self.is_range: + if self.initial_count is None: + self.initial_count = ecfparent.initial_count + if self.increment is None: + self.increment = ecfparent.increment + item_range = self.get_range(max_value=len(ecfparent.get_items())) + self.__items = [*item_range] + else: + if self.is_range and self.has_max_value(): + item_range = self.get_range() + self.__items = [*item_range] + + def __populate_full_name_items(self): + """ + Called after the items list is populated. If there is a range or list + then this uses the items list with the prefix and suffix strings to + create a new array for full names and populates that array. After this + is called the full_name_items array should be used. If the node isn't + a range or list then it is just an array of one item. + + Parameters + ---------- + None + + Returns + ------- + None + """ + + if not self.is_range and not self.is_list: + self.__full_name_items = self.__items + return + + for item in self.__items: + if isinstance(item, int): + self.__full_name_items.append(f"{self.__base}" + f"{item:03}" + f"{self.__suffix}") + elif isinstance(item, str): + self.__full_name_items.append(f"{self.__base}" + f"{item}" + f"{self.__suffix}") + + def get_position_name(self, counter=None): + """ + This method uses the counter object if the item is a list to identify + the position in a list, the item in the range or if there is no counter + associated with it, the base name. + + Parameters + ---------- + counter : str or int + If it is a str, returns the list item in that position. If it is + an int, then return the counter position for it. + + Returns + ------- + None + """ + + try: + if self.is_range: + if isinstance(counter, int): + return f"{self.__base}{counter:03}{self.__suffix}" + elif isinstance(counter, str): + return f"{self.__base}{counter}{self.__suffix}" + elif re.search(r"\[.*\]", self.name): + array_item = self.__items[counter] + if isinstance(array_item, int): + return f"{self.__base}{array_item:03}{self.__suffix}" + elif isinstance(array_item, str): + return f"{self.__base}{array_item}{self.__suffix}" + elif self.is_list: + array_item = self.__items[counter] + if isinstance(array_item, int): + return f"{array_item:03}" + elif isinstance(array_item, str): + return f"{array_item}" + else: + return self.name + except ValueError as err: + print(f"Problem getting full name of {self.name}. Error: {err}") + + def has_max_value(self): + """ + Returns true if the node object range has a maximum value. + + Parameters + ---------- + None + + Returns + ------- + bool + True if there is a max value, false otherwise. + """ + + return True if self.__max_value is not None else False + + def get_max_value(self): + """ + Returns the maximum value for the node. + + Parameters + ---------- + None + + Returns + ------- + int + The max value if one is set. + """ + + return self.__max_value + + def get_range(self, initial_count=0, increment=1, max_value=1): + """ + If the node has a list or range associated with it, this returns the + range of items or the range of the array. + + Parameters + ---------- + initial_count : int + The initial count which is defaulted to 1 in case it wasn't defined + increment : int + The increment value to use for the range in case it wasn't defined + max_value : int + The maximum value for the range. + + Returns + ------- + None + """ + + if self.is_list: + return range(initial_count, len(self.__items), increment) + else: + if self.initial_count is not None: + initial_count = self.initial_count + if self.increment is not None: + increment = self.increment + if self.__max_value is not None: + max_value = self.__max_value + max_value = (max_value * increment) + initial_count + return range(initial_count, max_value, increment) + + +class EcfTaskNode(EcfNode): + """ + Extension class for the EcfNodes to identify tasks. + + Methods + ------- + get_type() + Returns that this node is a task type. + """ + + def get_type(self): + """ + Returns that this node is a task type. + + Parameters + ---------- + None + + Returns + ------- + str + The value of task to identify the node is a task. + """ + + return 'task' + + +class EcfFamilyNode(EcfNode): + """ + Extension class for the EcfNodes to identify tasks. + + Methods + ------- + get_type() + Returns that this node is a task type. + """ + + def get_type(self): + """ + Returns that this node is a task type. + """ + + return 'family' + + +class EcfEventNode(EcfNode): + """ + Extension class for the EcfNodes to identify events. + + Methods + ------- + get_type() + Returns that this node is an event type. + """ + + def get_type(self): + """ + Returns that this node is an event type. + """ + + return 'event' + + +class ecfTriggerNode(EcfNode): + """ + Extension class for the EcfNodes to identify triggers. Overloads the + constructors since triggers can have multiple levels within themselves + for events and such. + + Attributes + ---------- + EcfNode : object + This pulls in the attributes from the EcfNode class as well. + task_setup : dict + This stores the dictionary object that tracks the task setup for the + trigger. + ecfparent : str + The ecfparent string object used to track loops/list. This is used in + case there is a multi-level loop. + trigger_type : str + Used to identify if the trigger is of a family or of a task. + + Methods + ------- + get_type() + Returns that this node is a trigger type. + + has_operand() + If the trigger has an operand to indciate if it needs to be added as an + OR or AND in the trigger statement, set the value and return True, + otherwise false. + + get_operand() + Returns the operand associated with the trigger. + + get_state() + Returns the state associated with the trigger if one was defined. + + get_event() + Returns the event_string associated with the trigger if one was defined + + has_suite() + If a suite was passed in as part of the parameters in the keys, this + returns True and sets the suite attribute to the suite name. + + get_suite() + Returns the suite name. + + has_state() + If a state was passed in with the YAML parameters, return true and set + the state attribute to the state of the trigger. + + has_event() + If the trigger has an event associated with it, it is possible that the + event has a loop. This method determines if the trigger has an event + and if it does identifies the event string and items associated with it + so that it can be used in other functions later. If it does have the + loop or list identifiers then it returns true, otherwise false. + + invalid_event_range() + Helper method to exit the application if the event range is invalid. + """ + + def __init__(self, ecfitem, ecfparent=None): + """ + Parameters + ---------- + ecfItem : dict or str + A dictionary or string item that represents the current node. + """ + + self._EcfNode__items = [] + self._EcfNode__full_name_items = [] + if 'family' in ecfitem.keys(): + trigger_type = 'family' + else: + trigger_type = 'task' + self._EcfNode__check_range(ecfitem[trigger_type]) + self._EcfNode__setup_items_list(ecfparent) + self._EcfNode__populate_full_name_items() + self.task_setup = ecfitem + self.ecfparent = ecfparent + self.trigger_type = trigger_type + + def get_type(self): + """ + Returns that this node is a trigger type. + + Parameters + ---------- + None + + Returns + ------- + str + The value trigger to identify that this is a trigger node. + """ + + return 'trigger' + + def has_operand(self): + """ + If the trigger has an operand to indciate if it needs to be added as an + OR or AND in the trigger statement, set the value and return True, + otherwise false. + + Parameters + ---------- + None + + Returns + ------- + bool + True if there is an operand associated with the trigger. + """ + + if 'operand' in self.task_setup.keys(): + self.operand = self.task_setup['operand'] + return True + else: + return False + + def get_operand(self): + """ + Returns the operand associated with the trigger. + + Parameters + ---------- + None + + Returns + ------- + str or bool + Return the operand. + """ + + if self.operand == "OR" or self.operand == "or": + return False + else: + return True + + def get_state(self): + """ + Returns the state associated with the trigger if one was defined. + + Parameters + ---------- + None + + Returns + ------- + str + The state in string format. + """ + + return self.state + + def get_event(self): + """ + Returns the event_string associated with the trigger if one was defined + + Parameters + ---------- + None + + Returns + ------- + str + The event in string format. + """ + + return self.event + + def has_suite(self): + """ + If a suite was passed in as part of the parameters in the keys, this + returns True and sets the suite attribute to the suite name. + + Parameters + ---------- + None + + Returns + ------- + bool + If there is a suite associated with the trigger, return true + otherwise false. + """ + if 'suite' in self.task_setup.keys(): + self.suite = self.task_setup['suite'] + return True + else: + return False + + def get_suite(self): + """ + Returns the suite name. + + Parameters + ---------- + None + + Returns + ------- + str + The name of the suite in string format. + """ + return self.suite + + def has_state(self): + """ + If a state was passed in with the YAML parameters, return true and set + the state attribute to the state of the trigger. + + Parameters + ---------- + None + + Returns + ------- + bool + Returns true if there is a state value in the keys, otherwise + false. + """ + if 'state' in self.task_setup.keys(): + self.state = self.task_setup['state'] + return True + else: + return False + + def has_event(self): + """ + If the trigger has an event associated with it, it is possible that the + event has a loop. This method determines if the trigger has an event + and if it does identifies the event string and items associated with it + so that it can be used in other functions later. If it does have the + loop or list identifiers then it returns true, otherwise false. + + Parameters + ---------- + None + + Returns + ------- + bool + Returns true if the trigger has an event in either list or + string format. + """ + if 'event' in self.task_setup.keys(): + if self.is_list or self.is_range: + self.event = EcfEventNode(self.task_setup['event'], self) + else: + self.event = EcfEventNode(self.task_setup['event'], + self.ecfparent) + return True + else: + return False + + def invalid_event_range(self): + """ + Helper method to exit the application if the event range is invalid. + + Parameters + ---------- + None + + Returns + ------- + None + """ + + print(f"The range specified in {self.name} is out of bounds. " + "Please review the configuration.") + sys.exit(1) + + +class EcfEventNode(EcfNode): + """ + Extension class for the EcfNodes to identify events. + + Methods + ------- + get_type() + Returns that this node is an event type. + """ + + def get_type(self): + """ + Returns that this node is an event type. + + Parameters + ---------- + None + + Returns + ------- + str + The string event to identify this as an event node. + """ + return 'event' + + +class EcfEditNode(EcfNode): + """ + Extension class for the EcfNodes to identify edits. + + Methods + ------- + get_type() + Returns that this node is an edit type. + """ + + def get_type(self): + """ + Returns that this node is an edit type. + + Parameters + ---------- + None + + Returns + ------- + str + The string edit to identify this as an edit node. + """ + + return 'edit' + + +class EcfRoot(): + """ + A root level class that is not an EcfNode object from above but an + object that will extend a class from the ecflow module. + + Methods + ------- + get_base_name() + Returns the prefix to a node. + """ + + def get_base_name(): + """ + Returns the prefix to a node. + * Not currently in use, may be removed at a later date. + + Parameters + ---------- + None + + Returns + ------- + str + The name of the node if it has a prefix, this strips out the + surrounding range and just returns the beginning. + """ + return re.search(r"(.*)\{.*\}", self.name()).group(1).strip() + + +class EcfSuite(ecflow.Suite, EcfRoot): + """ + Extends the EcfRoot and ecflow.Suite classes to provide an additional + function when defining the suite that also it can generate the folders + for the suite and populate the families/tasks. + + Methods + ------- + generate_folders(ecfhome) + This function uses the ecfhome directory as a base and if it doesn't + exist makes the suite folder at the ecfhome. + """ + + def generate_folders(self, ecfhome): + """ + This function uses the ecfhome directory as a base and if it doesn't + exist makes the suite folder at the ecfhome. + + Parameters + ---------- + ecfhome : str + Path to the root level directory for the ecfhome. + + Returns + ------- + None + """ + + folder_path = f"{ecfhome}/{self.name()}" + if not os.path.exists(folder_path): + os.makedirs(folder_path) + + +class EcfFamily(ecflow.Family, EcfRoot): + """ + Extends the ecflow.Family and EcfRoot classes to provide the folder + generation structure for families at the ecfhome location. + + Methods + ------- + generate_folders(ecfhome,suite,parents) + Uses the ecfhome as the root, then looks in the suite directory to + determine if the family name has been created. It also splits out the + parent folders to put everything in the proper tier. + """ + + def generate_folders(self, ecfhome, suite, parents): + """ + Uses the ecfhome as the root, then looks in the suite directory to + determine if the family name has been created. It also splits out the + parent folders to put everything in the proper tier. + + Parameters + ---------- + ecfhome : str + The root level directory as a string + suite : str + The suite name to be appended to the ecfhome. + parents : str + Any of the parent families to ensure that the folder structure is + setup correctly. + + Returns + ------- + None + """ + if parents: + folder_path = f"{ecfhome}/{suite}/{parents.replace('>','/')}/{self.name()}" + else: + folder_path = f"{ecfhome}/{suite}/{self.name()}" + if not os.path.exists(folder_path): + os.makedirs(folder_path) + + +class EcfTask(ecflow.Task, EcfRoot): + """ + Extends the ecflow.Task and EcfRoot classes to allow the task scripts to + be defined and then also created. If there is a template associated with + the task, it will use that to create the script name in the appropriate + location. + + Methods + ------- + setup_script(repopath,template) + Sets the parameters for the script if there is a repo path for the + script repo that isn't the default and template if that is also + defined for a task. + + generate_ecflow_task(ecfhome,suite,parents) + Uses the parameters passed in to define the folder path and then + looks in the script repository for the task name with a .ecf suffix or + template name with a .ecf suffix and then copies that script content + from the script repo over to the destination provided by the parameters + """ + + def setup_script(self, repopath, template): + """ + Sets the parameters for the script if there is a repo path for the + script repo that isn't the default and template if that is also + defined for a task. + + Parameters + ---------- + scriptrepo : str + Path to the script repository used to populate the destination. + template : str + The template script if needed so the application will use that + instead of searching for the task name in the script repo. + + Returns + ------- + None + """ + self.scriptrepo = repopath + self.template = template + + def generate_ecflow_task(self, ecfhome, suite, parents): + """ + Uses the parameters passed in to define the folder path and then + looks in the script repository for the task name with a .ecf suffix or + template name with a .ecf suffix and then copies that script content + from the script repo over to the destination provided by the parameters + + Parameters + ---------- + ecfhome : str + Path to the root level directory to place the scripts. + suite : str + Suite name to add the scripts to that will be appended to the + ecfhome + parents: str + Any parent folders that are appended to the ecfhome and suite + folders. + + Returns + ------- + None + """ + if self.template == "skip": + return + script_name = f"{self.name()}.ecf" + ecfscript = None + search_script = f"{self.template}.ecf" if self.template is not \ + None else script_name + if parents: + script_path = f"{ecfhome}/{suite}/{parents.replace('>','/')}/{script_name}" + else: + script_path = f"{ecfhome}/{suite}/{script_name}" + for root, dirs, files in os.walk(self.scriptrepo): + if search_script in files and ecfscript is None: + ecfscript = os.path.join(root, search_script) + elif script_name in files: + print(f"More than one script named {script_name}. " + "Using the first one found.") + try: + if ecfscript is not None: + shutil.copyfile(ecfscript, script_path, follow_symlinks=True) + else: + raise ConfigurationError + except ConfigurationError: + print(f"Could not find the script {search_script}. Exiting build") + sys.exit(1) + +# define Python user-defined exceptions + + +class Error(Exception): + """Base class for other exceptions""" + pass + + +class RangeError(Error): + """Raised when the range in the configuration file is incorrect""" + pass + + +class ConfigurationError(Error): + """Raised when there is an error in the configuration file.""" + pass diff --git a/workflow/ecFlow/ecflow_setup.py b/workflow/ecFlow/ecflow_setup.py new file mode 100644 index 0000000000..1170ebc479 --- /dev/null +++ b/workflow/ecFlow/ecflow_setup.py @@ -0,0 +1,726 @@ +#!/usr/bin/env python3 + +""" + PROGRAM: + ecflow_setup: This setup is to read in the configuration from the YAML + file passed in by setup_workflow.py, populate the environment variables + and then pass that to the ecflow_definitions.py module to create the + suite definitions and to break down the lists, add triggers, etc. + AUTHOR: + Kyle Nevins + kyle.nevins@noaa.gov + FILE DEPENDENCIES: + None + OUTPUT: + This will return a dictionary object of suites and then save that to + a file based on the calls from the setup_workflow.py module. +""" +import yaml +import collections.abc +import os +import re +import sys +import datetime +from ecFlow.ecflow_definitions import Ecflowsuite, EcfFamilyNode + +try: + from ecflow import Defs +except ImportError as err: + raise ImportError(f"Error: Could not import ecflow module: {err}") + + +class Ecflowsetup: + """ + This class pulls in the configurations from the ecflow config file. Then + it calls the ecflow_definitions.py module to create a suite definition + from each of the suites in the YAML file. Then each of the edits, tasks, + triggers, etc. are processed and added to the suite. + + All suites are then put together as part of a definition file and finally + that file is saved. + + Attributes + ---------- + suite_array : dict + A dictionary that contains ecflow.Suite objects provided by the ecflow + module. + DEFS : ecflow.Defs + A definition object provided by the ecflow module that holds all of the + suites. + + Methods + ------- + generate_workflow() + This is the main method, used to setup the suites from the YAML file and + then call each of the supporting methods, like edits, tasks, etc. to + populate the suites with each of the items. + + raiseexception(e) + This is just a simple method that is called if an exception is raised to + print out the error message and then call a sys.exit(1) so the app stops + + save() + This saves the suite definition file to the save dir with the file name + ecflow_suite.def. + + print() + Prints out what would be populated to the suite definition file. + + add_environment_edits(suite) + The suite is passed in and the edits from the environment are added. The + environment edits are defined in the init method. + + check_dict(node, key, key_is_dict=True) + This function checks for the presence of they key inside of the node. + Used to identify it various addons need to be added into the suite. + + add_suite_edits(suite, suite_dict) + Method used to parse through the YAML file and identify any edits that + apply to the suite itself and parse them so they can be added. + + process_definition_header() + If there is an externs section in the YAML file for a suite, this adds + the externs to the header. + + add_families(suite, nodes, parents=None) + Parses through the YAML file contents and adds the nodes that are + identified as families to either the parent suite or the parent family. + + add_tasks_and_edits(suite,nodes,parents=None) + After the families are added to the suite, the individual tasks, edits, + repeats, defstatus, and room for other task addons are appended. + + add_triggers_and_events(suite, nodes) + After the families and tasks are added, then the triggers and events + are processed. This needs to come after the families and tasks and + independently because of the interdependencies that exist. For example + a trigger for a task cannot be added until the task exists, otherwise + and error will be thrown. + """ + + def __init__(self, args, env_configs): + """ + Parameters + ---------- + args : dict + The arguments passed in by the command line. + env_configs : dict + The environment variables pulled in from the experiement directory. + + Returns + ------- + None + """ + + # Setup the base variables + self.args = args + self.env_configs = env_configs + self.suite_array = {} + self.DEFS = Defs() + + # Load in the ecflow configurations + base_ecflowconfig = load_ecflow_config(f'{args.ecflow_config}') + self.ecfconf = update_ecflow_config(base_ecflowconfig, env_configs) + + self.ecfhome = env_configs['base']['ECFgfs'] + + if 'scriptrepo' in self.ecfconf.keys(): + self.env_configs['base']['scriptrepo'] = self.ecfconf['scriptrepo'] + elif 'scriptrepo' not in self.env_configs['base'].keys(): + self.env_configs['base']['scriptrepo'] = f"{self.ecfhome}/scripts" + self.scriptrepo = self.env_configs['base']['scriptrepo'] + + # Setup the default edits from the environment + self.environment_edits = [ + 'ACCOUNT', + 'queue', + 'machine', + 'RUN_ENVIR', + ] + + def generate_workflow(self): + """ + This is the main method, used to setup the suites from the YAML file and + then call each of the supporting methods, like edits, tasks, etc. to + populate the suites with each of the items. + + Methods + ------- + get_suite_names(suitename) + In the event that the suite uses a list definition [X,Y,Z...], this + method will generate an array of the properly formatted names. + + Parameters + ---------- + None + + Returns + ------- + None + """ + + def get_suite_names(suitename): + """ + In the event that the suite uses a list definition [X,Y,Z...], this + method will generate an array of the properly formatted names. + + This is internal to the generate_workflow method and is only called + from within. The names are split out using regex if it is a list. + + Parameters + ---------- + suitename : str + A string representation of the + + Returns + ------- + array + If not a list, returns an array with the suitename paraemeter as + the only object. If it is a list, return all the names. + """ + + # Check to see if the name actually has a list, if not return an + # array with just the suite name as object in place 0. + if not re.search(r".*\[.*\].*", suitename): + return [f"{suitename}"] + + # If the name does have a list, break apart the prefix and suffix + # from the list and then run it through a for loop to get all + # possible values. + name_token = re.search(r"(.*)\[(.*)\](.*)", suitename) + base = name_token.group(1).strip() + list_items = name_token.group(2).strip().split(',') + suffix = name_token.group(3).strip() + name_array = [] + for item in list_items: + name_array.append(f"{base}{item}{suffix}") + return name_array + + # Add in extern headers + self.process_definition_header() + + # Process each of the suites + for suite in self.ecfconf['suites'].keys(): + if suite not in {'externs', 'edits'}: + for suite_name in get_suite_names(suite): + # The first thing to do is add in all of the families and + # tasks. Triggers and edits cannot be added until the tasks + # and families are parsed. + if suite_name not in self.suite_array.keys(): + new_suite = Ecflowsuite(suite_name, self.env_configs['base']['ECFgfs']) + else: + new_suite = self.suite_array[suite_name] + if new_suite.get_suite_name() not in self.suite_array.keys(): + self.add_environment_edits(new_suite) + self.add_suite_edits(new_suite, self.ecfconf['suites'][suite]) + if self.check_dict(self.ecfconf['suites'][suite], 'nodes'): + self.add_families(new_suite, self.ecfconf['suites'][suite]['nodes']) + self.add_tasks_and_edits(new_suite, self.ecfconf['suites'][suite]['nodes']) + self.suite_array[new_suite.get_suite_name()] = new_suite + + # Now that the families and tasks are setup, run through the triggers + # and events and add them to the respective tasks/family objects. + for suite in self.ecfconf['suites'].keys(): + if suite not in {'externs', 'edits'}: + for suite_name in get_suite_names(suite): + if self.check_dict(self.ecfconf['suites'][suite], 'nodes'): + self.add_triggers_and_events(self.suite_array[suite_name], + self.ecfconf['suites'][suite]['nodes']) + + # Add each suite to the definition object that will be used for the save + # or print. + for suite_name, suite in self.suite_array.items(): + self.DEFS += suite.get_suite() + + def raiseexception(self, e): + """ + This is just a simple method that is called if an exception is raised to + print out the error message and then call a sys.exit(1) so the app stops + + Calling this method will cause the application to exit with a status + code of 1. + + Parameters + ---------- + e : str + The error in string format to print out. + + Returns + ------- + None + """ + + print(e) + sys.exit(1) + + def save(self): + """ + This saves the suite definition file to the save dir with the file name + ecflow_suite.def. + + Parameters + ---------- + None + + Returns + ------- + None + """ + + print("Saving definition File") + savedir = self.args.savedir + defs_file = f"{savedir}/ecflow_suite.def" + self.DEFS.save_as_defs(defs_file) + + def print(self): + """ + Prints out what would be populated to the suite definition file. + + Parameters + ---------- + None + + Returns + ------- + None + """ + print(self.DEFS.check()) + print(self.DEFS) + + def add_environment_edits(self, suite): + """ + The suite is passed in and the edits from the environment are added. The + environment edits are defined in the init method. + + This method assumes that there are environment edits that have been set + by the experiement setup. + + Parameters + ---------- + suite : str + The name of the suite that will be used to add the environment edits + + Returns + ------- + None + """ + + # Add in the ECF Home and ECF Include edits. + suite.add_edit({'ECF_HOME': self.ecfhome, 'ECF_INCLUDE': self.ecfhome}) + + # Add in the edits for the environment. + for edit in self.environment_edits: + edit = edit.upper() + if (edit in self.env_configs['base'].keys() and + self.env_configs['base'][edit] is not None): + edit_dict = {edit: self.env_configs['base'][edit]} + elif (edit.lower() in self.env_configs['base'].keys() and + self.env_configs['base'][edit.lower()] is not None): + edit_dict = {edit: self.env_configs['base'][edit.lower()]} + suite.add_edit(edit_dict) + + def check_dict(self, node, key, key_is_dict=True): + """ + This function checks for the presence of they key inside of the node. + Used to identify it various addons need to be added into the suite. + + If the node is a dict, it checks for the presence of the key but it also + needs to know if the key it is looking for is a dictionary or not. + + Parameters + ---------- + node : dict or str + The dictionary or string object to search for the presence of the + key + key : str + The search string to look for in the node objects + key_is_dict : bool + Checks if the key is a dictionary or if it should be searching for + a string. + + Returns + ------- + bool + True if the key is present, false otherwise. + """ + + if isinstance(node, dict) and f'{key}' in node.keys(): + if key_is_dict and isinstance(node[f'{key}'], dict): + return True + elif not key_is_dict: + return True + else: + return False + + def add_suite_edits(self, suite, suite_dict): + """ + Method used to parse through the YAML file and identify any edits that + apply to the suite itself and parse them so they can be added. + + Parameters + ---------- + suite : string + Name of the suite that needs the edits added. + suite_dict : + The dictionary for the suite that was passed in. + + Returns + ------- + None + """ + + # Baseline edits + if 'edits' in self.ecfconf['suites'].keys(): + suite.add_edit(self.ecfconf['suites']['edits']) + + # Setup sutite specific edits + if type(suite_dict) is dict and 'edits' in suite_dict.keys(): + suite.add_edit(suite_dict['edits']) + + def process_definition_header(self): + """ + If there is an externs section in the YAML file for a suite, this adds + the externs to the header. + + Parameters + ---------- + None + + Returns + ------- + None + """ + + if 'externs' in self.ecfconf.keys(): + for extern in self.ecfconf['externs']: + self.DEFS.add_extern(extern) + + def add_families(self, suite, nodes, parents=None, parent_node=None): + """ + Parses through the YAML file contents and adds the nodes that are + identified as families to either the parent suite or the parent family. + + This function is recursive to build the family architecture. + + While adding families, this method also adds in the edits, repeats, + defstatus, and time parameters to the families. + + Parameters + ---------- + suite : str + The suite that the families are to be added to + nodes : dict + The nodes within the suite, can be families or tasks but only the + families are processed in this method. + parents : str + If this family is not a top level one for the suite, this string is + the list of families that came before it, used to populate the + dictionary object in the ecflow_definitions module. + parent_node : dict + This is the node for the parent object. Separate from the parents + object, this contains the full name of the parent. The parents + object is a string and doesn't contain the information for any + loop object. + + Returns + ------- + None + """ + + for item in nodes.keys(): + if isinstance(nodes[item], dict) and item not in {'edits', + 'tasks', + 'triggers'}: + family_node = EcfFamilyNode(item, parent_node) + suite.add_ecfsuite_node(item, family_node) + for family in family_node.get_full_name_items(): + suite.add_family(family, parents) + index = family_node.get_full_name_items().index(family) + if parents: + family_path = f"{parents}>{family}" + else: + family_path = family + if self.check_dict(nodes[item], 'edits'): + suite.add_family_edits(nodes[item]['edits'], + family_path, family_node, index) + if self.check_dict(nodes[item], 'repeat', False): + suite.add_repeat(nodes[item]['repeat'], family_path) + if self.check_dict(nodes[item], 'defstatus', False): + suite.add_defstatus(nodes[item]['defstatus'], + family_path) + self.add_families(suite, nodes[item], + family_path, family_node) + + def add_tasks_and_edits(self, suite, nodes, + parents=None, parent_node=None, + index=None): + """ + After the families are added to the suite, the individual tasks, edits, + repeats, defstatus, and room for other task addons are appended. + + This is a recursive function that parses through the whole dictionary + of tasks and families to identify any tasks and add them to a family. + + This also adds in the defstatus, ediuts, repeats, times, etc. for the + tasks. + + Parameters + ---------- + suite : str + The suite the tasks need to be added to. + nodes : dict + Contains all the tasks and families for the parent node. + parents : str + The parent family for any of the tasks + parent_node : dict + This is the actual parent node that would contain any looping + information or range information unlike the parent string which + contains the full name of the parents. + index : int + This is the index position of the current node being worked. This + is tracked so if the current node relies on the parent index, this + tells the current node what position object to use. + + Returns + ------- + None + """ + + for item in nodes.keys(): + if isinstance(nodes[item], dict) and item == 'tasks': + for task in nodes['tasks'].keys(): + if self.check_dict(nodes['tasks'][task], 'template', False): + task_template = nodes['tasks'][task]['template'] + else: + task_template = None + updated_task = find_env_param(task, 'env.', + self.env_configs) + suite.add_task(updated_task, parents, + self.scriptrepo, task_template, + parent_node, index) + if self.check_dict(nodes['tasks'][task], + 'edits'): + suite.add_task_edits(updated_task, + nodes['tasks'][task]['edits'], + parent_node, index) + if self.check_dict(nodes['tasks'][task], + 'repeat', False): + suite.add_task_repeat(updated_task, + nodes['tasks'][task]['repeat'], + parent_node, index) + if self.check_dict(nodes['tasks'][task], + 'defstatus', False): + suite.add_task_defstatus(updated_task, + nodes['tasks'] + [task]['defstatus']) + + elif isinstance(nodes[item], dict) and item not in {'edits', + 'triggers'}: + family_node = EcfFamilyNode(item, parent_node) + for family in family_node.get_full_name_items(): + index = family_node.get_full_name_items().index(family) + if parents: + family_path = f"{parents}>{family}" + else: + family_path = family + self.add_tasks_and_edits(suite, nodes[item], + family_path, family_node, index) + + def add_triggers_and_events(self, suite, nodes, parents=None, + parent_node=None, index=None): + """ + After the families and tasks are added, then the triggers and events + are processed. This needs to come after the families and tasks and + independently because of the interdependencies that exist. For example + a trigger for a task cannot be added until the task exists, otherwise + and error will be thrown. + + This is a recursive function and will parse through each family/task + to identify the work. + + Parameters + ---------- + suite : str + The suite to key off for adding the triggers + nodes : dict + The families/tasks that need to be parsed. + parents : str + The parent family for any of the tasks + parent_node : dict + This is the actual parent node that would contain any looping + information or range information unlike the parent string which + contains the full name of the parents. + index : int + This is the index position of the current node being worked. This + is tracked so if the current node relies on the parent index, this + tells the current node what position object to use. + + Returns + ------- + None + """ + + for item in nodes.keys(): + if self.check_dict(nodes[item], 'triggers', False): + updated_family = find_env_param(item, 'env.', + self.env_configs) + suite.add_suite_triggers(updated_family, + nodes[item]['triggers'], + self.suite_array, parents, + parent_node, index) + elif isinstance(nodes[item], dict) and item == 'tasks': + for task in nodes['tasks'].keys(): + updated_task = find_env_param(task, 'env.', + self.env_configs) + if self.check_dict(nodes['tasks'][task], 'events', False): + suite.add_task_events(updated_task, + nodes['tasks'][task]['events'], + parent_node, index) + if self.check_dict(nodes['tasks'][task], 'triggers', False): + suite.add_suite_triggers(updated_task, + nodes['tasks'][task]['triggers'], + self.suite_array, parents, + parent_node, index) + elif isinstance(nodes[item], dict): + family_node = EcfFamilyNode(item, parent_node) + for family in family_node.get_full_name_items(): + index = family_node.get_full_name_items().index(family) + if parents: + family_path = f"{parents}>{item}" + else: + family_path = item + self.add_triggers_and_events(suite, nodes[item], + family_path, family_node, + index) + + +def load_ecflow_config(configfile): + """ + This is the function to safely load the configuration file for the ecflow + environment. This is the base YAML that is built specifically for this + application and then returns it. + + Parameters + ---------- + configfile : str + The path to the configuration file that is to be loaded as part of the + ecflow config. + + Returns + ------- + dict + The dictionary results of the YAML safe load from the configuration + file. + """ + + with open(configfile, 'r') as file: + base_config = yaml.safe_load(file) + return base_config + + +def find_env_param(node, value, envconfig): + """ + Since there are components of the configuration that might get passed in + that are supposed to be replaced by environment variables AFTER the + configuration file has been loaded, this function is called in some of the + Ecflowsetup functions to allow the replacement of those parameters as + needed. + + Parameters + ---------- + node : dict + A dictionary object of the items that need to be scanned for replacing + value : str + A string object that is the prefix to be scanned and then the value + identified after identifier string is replaced with an environment + variable. + envconfig : dict + The dictionary of existing environment variables that are read in from + the experiment setup. + + Returns + ------- + new_node : dict + The updated dictionary object that will replace the node object that + was passed in when the function was called. + """ + + new_node = node + if value in node: + variable_lookup = re.search(fr".*{value}([\dA-Za-z_]*)", node).group(1).strip() + if variable_lookup in os.environ: + if isinstance(os.environ[variable_lookup], datetime.datetime): + new_variable = os.environ[variable_lookup].strftime("%Y%m%d%H") + else: + new_variable = os.environ[variable_lookup] + else: + if isinstance(envconfig['base'][variable_lookup], + datetime.datetime): + new_variable = envconfig['base'][variable_lookup].strftime("%Y%m%d%H") + else: + new_variable = envconfig['base'][variable_lookup] + search_key = re.search(r"(.*)(env\.[\dA-Za-z_]*)(.*)", node) + new_node = f"{search_key.group(1)} {new_variable} {search_key.group(3)}" + return new_node + + +def update_ecflow_config(configfile, envconfig): + """ + After the YAML file that drives the application is loaded in, the configs + need to be updated with anything that has the env. prefix to it and replace + that value with the environment variable. + + Parameters + ---------- + configfile : dict + The dictionary of the YAML configuration file read in. + envconfig : dict + The dictionary of objects that were read in from the experiment setup + on the supercomputer. + + Returns + ------- + config : dict + The updated configuration with the environment variables replaced. + """ + + def runupdate(nested_dict, value): + """ + To scan through the entire nested dictionary the run update was an easy + local function to use to provide recursion given that the parent + function did not work properly when trying to use a recursive call. + + Parameters + ---------- + nested_dict : dict + The nested dictionary to scan and replace the values. + value : str + The string to search for the replacement, currently set to env. + + Returns + ------- + nested_dict : dict + The updated dictionary with all of the values replaced as necessary. + """ + for k, v in nested_dict.items(): + if isinstance(v, str) and value in v: + lookup = v.split('.') + variable_lookup = re.findall(r"[\dA-Za-z_]*", lookup[1])[0] + if variable_lookup in os.environ: + if isinstance(os.environ[variable_lookup], datetime.datetime): + nested_dict[k] = os.environ[variable_lookup].strftime("%Y%m%d%H") + else: + nested_dict[k] = os.environ[variable_lookup] + + else: + if isinstance(envconfig['base'][variable_lookup], datetime.datetime): + envvalue = envconfig['base'][variable_lookup].strftime("%Y%m%d%H") + else: + envvalue = envconfig['base'][variable_lookup] + nested_dict[k] = envvalue + elif isinstance(v, collections.abc.Mapping): + nested_dict[k] = runupdate(v, value) + return nested_dict + + config = runupdate(configfile, 'env.') + return config diff --git a/workflow/ecflow_build.yml b/workflow/ecflow_build.yml new file mode 100644 index 0000000000..4ca70da9a2 --- /dev/null +++ b/workflow/ecflow_build.yml @@ -0,0 +1,63 @@ +--- +# scriptrepo: /path/to/scripts +externs: +- "/prod18/enkfgdas/post" +suites: + fcstonly: + edits: + CYC: env.ARCH_CYC + EDATE: env.EDATE + nodes: + GFSApp: + edits: + NET: 'gfs' + gfs: + repeat: "2022032400 to 2022042400 by 18:0" + edits: + RUN: 'gfs' + atmos: + tasks: + jgfs_forecast: + triggers: + - task: jgfs_atmos_post_f( 2,1 ) + - task: jgfs_forecast + suite: fcstplus + post: + tasks: + jgfs_atmos_post_manager[ 1,2 ]: + template: jgfs_atmos_post_manager + triggers: + - task: jgfs_forecast + state: [active, complete] + operand: OR + events: + - "release_post(4)f" + jgfs_atmos_post_f(2,env.FHMAX_GFS): + template: jgfs_atmos_post_master + triggers: + - task: jgfs_atmos_post_manager[1,2] + event: "release_post(1,2)f" + events: + - "test_event" + edits: + FHRGRP: "( 1,,6 )" + FHRGRP2: [ a,b,c,d ] + FHRLST: "f[ a,b,3,4 ] -testing" + FHR: "f(1,6,)" + HR: "( )" + TEST: 'Test Edit' + wave: + init: + tasks: + jgfs_wave_init: + jgfs_forecast: + fcstplus: + edits: + CYC: '06' + nodes: + nonGFSApp: + tasks: + jgfs_forecast: + triggers: + - task: jgfs_getic # TODO: Not sure about this, leave as is + suite: fcstonly diff --git a/workflow/gw_setup.sh b/workflow/gw_setup.sh new file mode 100755 index 0000000000..930b1aab77 --- /dev/null +++ b/workflow/gw_setup.sh @@ -0,0 +1,15 @@ +#! /bin/bash + +# +# Resets the lmod environment and loads the modules necessary to run all the +# scripts necessary to prepare the workflow for use (checkout, experiment +# setup, etc.). +# +# This script should be SOURCED to properly setup the environment. +# + +HOMEgfs="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." >/dev/null 2>&1 && pwd )" +source "${HOMEgfs}/ush/detect_machine.sh" +source "${HOMEgfs}/ush/module-setup.sh" +module use "${HOMEgfs}/modulefiles" +module load "module_gwsetup.${MACHINE_ID}" diff --git a/workflow/hosts.py b/workflow/hosts.py new file mode 100644 index 0000000000..a17cd3f4a8 --- /dev/null +++ b/workflow/hosts.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 + +import os +from pathlib import Path + +from wxflow import YAMLFile + + +__all__ = ['Host'] + + +class Host: + """ + Gather Host specific information. + """ + + SUPPORTED_HOSTS = ['HERA', 'ORION', 'JET', 'HERCULES', + 'WCOSS2', 'S4', 'CONTAINER', 'AWSPW'] + + def __init__(self, host=None): + + detected_host = self.detect() + + if host is not None and host != detected_host: + raise ValueError( + f'detected host: "{detected_host}" does not match host: "{host}"') + + self.machine = detected_host + self.info = self._get_info + self.scheduler = self.info['SCHEDULER'] + + @classmethod + def detect(cls): + + machine = 'NOTFOUND' + container = os.getenv('SINGULARITY_NAME', None) + pw_csp = os.getenv('PW_CSP', None) + + if os.path.exists('/scratch1/NCEPDEV'): + machine = 'HERA' + elif os.path.exists('/work/noaa'): + if os.path.exists('/apps/other'): + machine = 'HERCULES' + else: + machine = 'ORION' + elif os.path.exists('/lfs4/HFIP'): + machine = 'JET' + elif os.path.exists('/lfs/f1'): + machine = 'WCOSS2' + elif os.path.exists('/data/prod'): + machine = 'S4' + elif container is not None: + machine = 'CONTAINER' + elif pw_csp is not None: + if pw_csp.lower() not in ['azure', 'aws', 'gcp']: + raise ValueError( + f'NOAA cloud service provider "{pw_csp}" is not supported.') + machine = f"{pw_csp.upper()}PW" + + if machine not in Host.SUPPORTED_HOSTS: + raise NotImplementedError(f'This machine is not a supported host.\n' + + 'Currently supported hosts are:\n' + + f'{" | ".join(Host.SUPPORTED_HOSTS)}') + + return machine + + @property + def _get_info(self) -> dict: + + hostfile = Path(os.path.join(os.path.dirname(__file__), + f'hosts/{self.machine.lower()}.yaml')) + try: + info = YAMLFile(path=hostfile) + except FileNotFoundError: + raise FileNotFoundError(f'{hostfile} does not exist!') + except IOError: + raise IOError(f'Unable to read from {hostfile}') + except Exception: + raise Exception(f'unable to get information for {self.machine}') + + return info diff --git a/workflow/hosts/awspw.yaml b/workflow/hosts/awspw.yaml new file mode 100644 index 0000000000..becb38e236 --- /dev/null +++ b/workflow/hosts/awspw.yaml @@ -0,0 +1,24 @@ +BASE_GIT: '/scratch1/NCEPDEV/global/glopara/git' #TODO: This does not yet exist. +DMPDIR: '/scratch1/NCEPDEV/global/glopara/dump' # TODO: This does not yet exist. +PACKAGEROOT: '/scratch1/NCEPDEV/global/glopara/nwpara' #TODO: This does not yet exist. +COMROOT: '/scratch1/NCEPDEV/global/glopara/com' #TODO: This does not yet exist. +COMINsyn: '${COMROOT}/gfs/prod/syndat' #TODO: This does not yet exist. +HOMEDIR: '/contrib/${USER}' +STMP: '/lustre/${USER}/stmp2/' +PTMP: '/lustre/${USER}/stmp4/' +NOSCRUB: ${HOMEDIR} +ACCOUNT: hwufscpldcld +SCHEDULER: slurm +QUEUE: batch +QUEUE_SERVICE: batch +PARTITION_BATCH: compute +PARTITION_SERVICE: compute +CHGRP_RSTPROD: 'YES' +CHGRP_CMD: 'chgrp rstprod' # TODO: This is not yet supported. +HPSSARCH: 'YES' +HPSS_PROJECT: emc-global #TODO: See `ATARDIR` below. +LOCALARCH: 'NO' +ATARDIR: '/NCEPDEV/${HPSS_PROJECT}/1year/${USER}/${machine}/scratch/${PSLOT}' # TODO: This will not yet work from AWS. +MAKE_NSSTBUFR: 'NO' +MAKE_ACFTBUFR: 'NO' +SUPPORTED_RESOLUTIONS: ['C48', 'C96'] # TODO: Test and support all cubed-sphere resolutions. diff --git a/workflow/hosts/container.yaml b/workflow/hosts/container.yaml new file mode 100644 index 0000000000..879be0bf31 --- /dev/null +++ b/workflow/hosts/container.yaml @@ -0,0 +1,24 @@ +BASE_GIT: '' +DMPDIR: '/home/${USER}' +PACKAGEROOT: '' +COMROOT: '' +COMINsyn: '' +HOMEDIR: '/home/${USER}' +STMP: '/home/${USER}' +PTMP: '/home/${USER}' +NOSCRUB: $HOMEDIR +SCHEDULER: none +ACCOUNT: '' +QUEUE: '' +QUEUE_SERVICE: '' +PARTITION_BATCH: '' +PARTITION_SERVICE: '' +CHGRP_RSTPROD: 'YES' +CHGRP_CMD: 'chgrp rstprod' +HPSSARCH: 'NO' +HPSS_PROJECT: emc-global +LOCALARCH: 'NO' +ATARDIR: '${NOSCRUB}/archive_rotdir/${PSLOT}' +MAKE_NSSTBUFR: 'NO' +MAKE_ACFTBUFR: 'NO' +SUPPORTED_RESOLUTIONS: ['C96', 'C48'] diff --git a/workflow/hosts/hera.yaml b/workflow/hosts/hera.yaml new file mode 100644 index 0000000000..e44c0aece0 --- /dev/null +++ b/workflow/hosts/hera.yaml @@ -0,0 +1,25 @@ +BASE_GIT: '/scratch1/NCEPDEV/global/glopara/git' +DMPDIR: '/scratch1/NCEPDEV/global/glopara/dump' +BASE_CPLIC: '/scratch1/NCEPDEV/global/glopara/data/ICSDIR/prototype_ICs' +PACKAGEROOT: '/scratch1/NCEPDEV/global/glopara/nwpara' +COMROOT: '/scratch1/NCEPDEV/global/glopara/com' +COMINsyn: '${COMROOT}/gfs/prod/syndat' +HOMEDIR: '/scratch1/NCEPDEV/global/${USER}' +STMP: '/scratch1/NCEPDEV/stmp2/${USER}' +PTMP: '/scratch1/NCEPDEV/stmp4/${USER}' +NOSCRUB: $HOMEDIR +ACCOUNT: fv3-cpu +SCHEDULER: slurm +QUEUE: batch +QUEUE_SERVICE: batch +PARTITION_BATCH: hera +PARTITION_SERVICE: service +CHGRP_RSTPROD: 'YES' +CHGRP_CMD: 'chgrp rstprod' +HPSSARCH: 'YES' +HPSS_PROJECT: emc-global +LOCALARCH: 'NO' +ATARDIR: '/NCEPDEV/${HPSS_PROJECT}/1year/${USER}/${machine}/scratch/${PSLOT}' +MAKE_NSSTBUFR: 'NO' +MAKE_ACFTBUFR: 'NO' +SUPPORTED_RESOLUTIONS: ['C1152', 'C768', 'C384', 'C192', 'C96', 'C48'] diff --git a/workflow/hosts/hercules.yaml b/workflow/hosts/hercules.yaml new file mode 100644 index 0000000000..e977091ba6 --- /dev/null +++ b/workflow/hosts/hercules.yaml @@ -0,0 +1,25 @@ +BASE_GIT: '/work/noaa/global/glopara/git' +DMPDIR: '/work/noaa/rstprod/dump' +BASE_CPLIC: '/work/noaa/global/glopara/data/ICSDIR/prototype_ICs' +PACKAGEROOT: '/work/noaa/global/glopara/nwpara' +COMROOT: '/work/noaa/global/glopara/com' +COMINsyn: '${COMROOT}/gfs/prod/syndat' +HOMEDIR: '/work/noaa/global/${USER}' +STMP: '/work/noaa/stmp/${USER}' +PTMP: '/work/noaa/stmp/${USER}' +NOSCRUB: $HOMEDIR +SCHEDULER: slurm +ACCOUNT: fv3-cpu +QUEUE: batch +QUEUE_SERVICE: batch +PARTITION_BATCH: hercules +PARTITION_SERVICE: service +CHGRP_RSTPROD: 'YES' +CHGRP_CMD: 'chgrp rstprod' +HPSSARCH: 'NO' +HPSS_PROJECT: emc-global +LOCALARCH: 'NO' +ATARDIR: '${NOSCRUB}/archive_rotdir/${PSLOT}' +MAKE_NSSTBUFR: 'NO' +MAKE_ACFTBUFR: 'NO' +SUPPORTED_RESOLUTIONS: ['C1152', 'C768', 'C384', 'C192', 'C96', 'C48'] diff --git a/workflow/hosts/jet.yaml b/workflow/hosts/jet.yaml new file mode 100644 index 0000000000..313ce38dc2 --- /dev/null +++ b/workflow/hosts/jet.yaml @@ -0,0 +1,25 @@ +BASE_GIT: '/lfs4/HFIP/hfv3gfs/glopara/git' +DMPDIR: '/lfs4/HFIP/hfv3gfs/glopara/dump' +BASE_CPLIC: '/mnt/lfs4/HFIP/hfv3gfs/glopara/data/ICSDIR/prototype_ICs' +PACKAGEROOT: '/lfs4/HFIP/hfv3gfs/glopara/nwpara' +COMROOT: '/lfs4/HFIP/hfv3gfs/glopara/com' +COMINsyn: '${COMROOT}/gfs/prod/syndat' +HOMEDIR: '/lfs4/HFIP/hfv3gfs/${USER}' +STMP: '/lfs4/HFIP/hfv3gfs/${USER}/stmp' +PTMP: '/lfs4/HFIP/hfv3gfs/${USER}/ptmp' +NOSCRUB: $HOMEDIR +ACCOUNT: hfv3gfs +SCHEDULER: slurm +QUEUE: batch +QUEUE_SERVICE: batch +PARTITION_BATCH: kjet +PARTITION_SERVICE: service +CHGRP_RSTPROD: 'YES' +CHGRP_CMD: 'chgrp rstprod' +HPSSARCH: 'YES' +HPSS_PROJECT: emc-global +LOCALARCH: 'NO' +ATARDIR: '/NCEPDEV/${HPSS_PROJECT}/1year/${USER}/${machine}/scratch/${PSLOT}' +MAKE_NSSTBUFR: 'NO' +MAKE_ACFTBUFR: 'NO' +SUPPORTED_RESOLUTIONS: ['C384', 'C192', 'C96', 'C48'] diff --git a/workflow/hosts/orion.yaml b/workflow/hosts/orion.yaml new file mode 100644 index 0000000000..459aee7cf6 --- /dev/null +++ b/workflow/hosts/orion.yaml @@ -0,0 +1,25 @@ +BASE_GIT: '/work/noaa/global/glopara/git' +DMPDIR: '/work/noaa/rstprod/dump' +BASE_CPLIC: '/work/noaa/global/glopara/data/ICSDIR/prototype_ICs' +PACKAGEROOT: '/work/noaa/global/glopara/nwpara' +COMROOT: '/work/noaa/global/glopara/com' +COMINsyn: '${COMROOT}/gfs/prod/syndat' +HOMEDIR: '/work/noaa/global/${USER}' +STMP: '/work/noaa/stmp/${USER}' +PTMP: '/work/noaa/stmp/${USER}' +NOSCRUB: $HOMEDIR +SCHEDULER: slurm +ACCOUNT: fv3-cpu +QUEUE: batch +QUEUE_SERVICE: batch +PARTITION_BATCH: orion +PARTITION_SERVICE: service +CHGRP_RSTPROD: 'YES' +CHGRP_CMD: 'chgrp rstprod' +HPSSARCH: 'NO' +HPSS_PROJECT: emc-global +LOCALARCH: 'NO' +ATARDIR: '${NOSCRUB}/archive_rotdir/${PSLOT}' +MAKE_NSSTBUFR: 'NO' +MAKE_ACFTBUFR: 'NO' +SUPPORTED_RESOLUTIONS: ['C1152', 'C768', 'C384', 'C192', 'C96', 'C48'] diff --git a/workflow/hosts/s4.yaml b/workflow/hosts/s4.yaml new file mode 100644 index 0000000000..01b28c1e6b --- /dev/null +++ b/workflow/hosts/s4.yaml @@ -0,0 +1,25 @@ +BASE_GIT: '/data/prod/glopara/git' +DMPDIR: '/data/prod/glopara/dump' +BASE_CPLIC: '/data/prod/glopara/coupled_ICs' +PACKAGEROOT: '/data/prod/glopara/nwpara' +COMROOT: '/data/prod/glopara/com' +COMINsyn: '${COMROOT}/gfs/prod/syndat' +HOMEDIR: '/data/users/${USER}' +STMP: '/scratch/users/${USER}' +PTMP: '/scratch/users/${USER}' +NOSCRUB: ${HOMEDIR} +ACCOUNT: star +SCHEDULER: slurm +QUEUE: s4 +QUEUE_SERVICE: serial +PARTITION_BATCH: s4 +PARTITION_SERVICE: serial +CHGRP_RSTPROD: 'NO' +CHGRP_CMD: 'ls' +HPSSARCH: 'NO' +HPSS_PROJECT: emc-global +LOCALARCH: 'NO' +ATARDIR: '${NOSCRUB}/archive_rotdir/${PSLOT}' +MAKE_NSSTBUFR: 'YES' +MAKE_ACFTBUFR: 'YES' +SUPPORTED_RESOLUTIONS: ['C384', 'C192', 'C96', 'C48'] diff --git a/workflow/hosts/wcoss2.yaml b/workflow/hosts/wcoss2.yaml new file mode 100644 index 0000000000..04a5949b2e --- /dev/null +++ b/workflow/hosts/wcoss2.yaml @@ -0,0 +1,25 @@ +BASE_GIT: '/lfs/h2/emc/global/save/emc.global/git' +DMPDIR: '/lfs/h2/emc/dump/noscrub/dump' +BASE_CPLIC: '/lfs/h2/emc/global/noscrub/emc.global/data/ICSDIR/prototype_ICs' +PACKAGEROOT: '${PACKAGEROOT:-"/lfs/h1/ops/prod/packages"}' +COMROOT: '${COMROOT:-"/lfs/h1/ops/prod/com"}' +COMINsyn: '${COMROOT}/gfs/v16.3/syndat' +HOMEDIR: '/lfs/h2/emc/global/noscrub/${USER}' +STMP: '/lfs/h2/emc/stmp/${USER}' +PTMP: '/lfs/h2/emc/ptmp/${USER}' +NOSCRUB: $HOMEDIR +ACCOUNT: 'GFS-DEV' +SCHEDULER: pbspro +QUEUE: 'dev' +QUEUE_SERVICE: 'dev_transfer' +PARTITION_BATCH: '' +PARTITION_SERVICE: '' +CHGRP_RSTPROD: 'YES' +CHGRP_CMD: 'chgrp rstprod' +HPSSARCH: 'NO' +HPSS_PROJECT: emc-global +LOCALARCH: 'NO' +ATARDIR: '/NCEPDEV/${HPSS_PROJECT}/1year/${USER}/${machine}/scratch/${PSLOT}' +MAKE_NSSTBUFR: 'NO' +MAKE_ACFTBUFR: 'NO' +SUPPORTED_RESOLUTIONS: ['C1152', 'C768', 'C384', 'C192', 'C96', 'C48'] diff --git a/workflow/prod.yml b/workflow/prod.yml new file mode 100644 index 0000000000..64783dd611 --- /dev/null +++ b/workflow/prod.yml @@ -0,0 +1,379 @@ +--- +suites: + prod00: + edits: + CYC: '00' + prod06: + edits: + CYC: '06' + nodes: + gfs: + atmos: + post: + tasks: + jgfs_atmos_post_manager: + triggers: + - task: jgfs_atmos_tropcy_qc_reloc + suite: prod00 + prod[00,06]: + edits: + ECF_TRIES: '1' + ENVIR: 'prod' + PROJ: 'GFS' + PROJENVIR: 'DEV' + QUEUESHARED: 'dev_shared' + QUEUESERV: 'dev_transfer' + MACHINE_SITE: 'development' + nodes: + gfs: + edits: + RUN: 'gfs' + NET: 'gfs' + tasks: + jgfs_forecast: + triggers: + - task: jgfs_atmos_analysis + event: release_fcst + - task: jgfs_wave_prep + atmos: + obsproc: + dump: + tasks: + jgfs_atmos_tropcy_qc_reloc: + events: + - 'jtwc_bull_email' + prep: + tasks: + jgfs_atmos_emcsfc_sfc_prep: + triggers: + - task: jobsproc_gfs_atmos_dump + event: release_sfcprep + analysis: + tasks: + jgfs_atmos_analysis: + triggers: + - task: jobsproc_gfs_atmos_prep + - task: jgfs_atmos_emcsfc_sfc_prep + events: + - "release_fcst" + jgfs_atmos_analysis_calc: + triggers: + - task: jgfs_atmos_analysis + post: + tasks: + jgfs_atmos_post_manager: + triggers: + - task: jgfs_atmos_analysis + events: + - "release_postanl" + - "release_post( 384 )" + jgfs_atmos_post_anl: + template: skip + triggers: + - task: jgfs_atmos_post_manager + event: release_postanl + edits: + FHRGRP: '000' + FHRLST: 'anl' + HR: 'anl' + FHR: 'anl' + jgfs_atmos_post_f( 384 ): + template: jgfs_atmos_post_master + triggers: + - task: jgfs_atmos_post_manager + event: release_post( ) + edits: + FHRGRP: '( 1, )' + FHRLST: 'f( )' + FHR: 'f( )' + HR: '( )' + post_processing: + bufr_sounding: + tasks: + jgfs_atmos_postsnd: + triggers: + - task: jgfs_atmos_post_manager + event: release_post000 + bulletins: + tasks: + jgfs_atmos_fbwind: + triggers: + - task: jgfs_atmos_post_f( 6,3,6 ) + awips_20km_1p0: + tasks: + jgfs_atmos_awips_f( 0,80,3 ): + template: jgfs_atmos_awips_master + triggers: + - task: jgfs_atmos_post_f( ) + edits: + FHRGRP: '( )' + FHRLST: 'f( )' + FCSTHR: '( )' + TRDRUN: 'YES' + jgfs_atmos_awips_f( 3,27,6 ): + edits: + TRDRUN: 'NO' + awips_g2: + tasks: + jgfs_atmos_awips_g2_f( 0,64,6 ): + template: jgfs_atmos_awips_g2_master + triggers: + - task: jgfs_atmos_post_f( ) + edits: + FHRGRP: '( )' + FHRLST: 'f( )' + FCSTHR: '( )' + TRDRUN: 'YES' + gempak: + tasks: + jgfs_atmos_gempak: + triggers: + - task: jgfs_atmos_analysis + jgfs_atmos_gempak_meta: + triggers: + - task: jgfs_atmos_analysis + jgfs_atmos_gempak_ncdc_upapgif: + triggers: + - task: jgfs_atmos_gempak + - task: jgfs_atmos_gempak + jgfs_atmos_npoess_pgrb2_0p5deg: + triggers: + - task: jgfs_atmos_post_anl + state: active + - task: jgfs_atmos_post_anl + jgfs_atmos_pgrb2_spec_gempak: + triggers: + - task: jgfs_atmos_npoess_pgrb2_0p5deg + verf: + tasks: + jgfs_atmos_vminmon: + triggers: + - task: jgfs_atmos_analysis + wave: + init: + tasks: + jgfs_wave_init: + triggers: + - task: jobsproc_gfs_atmos_prep + prep: + tasks: + jgfs_wave_prep: + triggers: + - task: jgfs_wave_init + post: + tasks: + jgfs_wave_postsbs: + triggers: + - task: jgfs_atmos_post_manager + event: release_post000 + jgfs_wave_postpnt: + triggers: + - task: jgfs_forecast + jgfs_wave_post_bndpnt: + triggers: + - task: jgfs_atmos_post_manager + event: release_post180 + jgfs_wave_post_bndpntbll: + triggers: + - task: jgfs_atmos_post_manager + event: release_post180 + jgfs_wave_prdgen_gridded: + triggers: + - task: jgfs_wave_postsbs + state: active + - task: jgfs_wave_postsbs + operand: OR + jgfs_wave_prdgen_bulls: + triggers: + - task: jgfs_wave_postpnt + - task: jgfs_wave_postsbs + gempak: + tasks: + jgfs_wave_gempak: + triggers: + - task: jgfs_wave_postsbs + state: [active, complete] + operand: or + gdas: + edits: + RUN: 'gdas' + tasks: + jgdas_forecast: + triggers: + - task: jgdas_atmos_analysis + event: release_fcst + - task: jgdas_wave_prep + atmos: + obsproc: + dump: + tasks: + jgdas_atmos_tropcy_qc_reloc: + prep: + tasks: + jgdas_atmos_emcsfc_sfc_prep: + triggers: + - task: jobsproc_gdas_atmos_dump + event: release_sfcprep + analysis: + tasks: + jgdas_atmos_analysis: + triggers: + - task: jobsproc_gdas_atmos_prep + - task: jgdas_atmos_emcsfc_sfc_prep + events: + - "release_fcst" + jgdas_atmos_analysis_calc: + triggers: + - task: jgdas_atmos_analysis + jgdas_atmos_analysis_diag: + triggers: + - task: jgdas_atmos_analysis + post: + tasks: + jgdas_atmos_post_manager: + triggers: + - task: jgdas_forecast + state: active + events: + - "release_postanl" + - "release_post( 10 )" + jgdas_atmos_post_anl: + template: jgdas_atmos_post_master + triggers: + - task: jgdas_atmos_post_manager + event: release_postanl + - task: jgdas_atmos_analysis_calc + edits: + FHRGRP: '000' + FHRLST: 'anl' + HR: 'anl' + FHR: 'anl' + jgdas_atmos_post_f( 10 ): + template: jgdas_atmos_post_master + triggers: + - task: jgdas_atmos_post_manager + event: release_post( ) + edits: + FHR: 'f( )' + HR: '( )' + FHRGRP: '( 1, )' + FHRLST: 'f( )' + post_processing: + tasks: + jgdas_atmos_chgres_forenkf: + triggers: + - task: jgdas_forecast + #- task: forecast + gempak: + tasks: + jgdas_atmos_gempak: + triggers: + - task: jgdas_forecast + jgdas_atmos_gempak_meta_ncdc: + triggers: + - task: jgdas_atmos_gempak + verf: + tasks: + jgdas_atmos_vminmon: + triggers: + - task: jgdas_atmos_analysis + jgdas_atmos_verfrad: + triggers: + - task: jgdas_atmos_analysis_diag + jgdas_atmos_verfozn: + triggers: + - task: jgdas_atmos_analysis_diag + wave: + init: + tasks: + jgdas_wave_init: + triggers: + - task: jobsproc_gdas_atmos_prep + prep: + tasks: + jgdas_wave_prep: + triggers: + - task: jgdas_wave_init + post: + tasks: + jgdas_wave_postsbs: + triggers: + - task: jgdas_atmos_post_manager + event: release_post000 + jgdas_wave_postpnt: + triggers: + - task: jgdas_forecast + enkfgdas: + edits: + RUN: 'gdas' + analysis: + create: + tasks: + jenkfgdas_select_obs: + triggers: + - task: jobsproc_gdas_atmos_prep + jenkfgdas_diag: + triggers: + - task: jenkfgdas_select_obs + jenkfgdas_update: + triggers: + - task: jenkfgdas_diag + recenter: + ecen: + grp(1, 3): + tasks: + jenkfgdas_ecen( ): + template: jenkfgdas_ecen + triggers: + - task: jgdas_atmos_post_f( ) + edits: + FHRGRP( 3 ): '( )' + tasks: + jenkfgdas_sfc: + triggers: + - task: jgdas_atmos_analysis_calc + - task: jenkfgdas_update + #forecast: + #grp( 1,40 ): + # edits: + # ENSGRP: '( )' + # tasks: + # jenkfgdas_fcst: + post: + tasks: + jenkfgdas_post_f( 3,6 ): + triggers: + - family: ['enkfgdas/analysis/recenter/ecen', 'enkfgdas/analysis/create'] + operand: 'or' + template: jenkfgdas_post_master + edits: + FHMIN_EPOS: ( ) + FHMAX_EPOS: ( ) + FHOUT_EPOS: ( ) + obsproc: + defstatus: complete + v1.0: + gfs: + atmos: + dump: + tasks: + jobsproc_gfs_atmos_dump: + template: skip + events: + - "release_sfcprep" + prep: + tasks: + jobsproc_gfs_atmos_prep: + template: skip + gdas: + atmos: + dump: + tasks: + jobsproc_gdas_atmos_dump: + template: skip + events: + - "release_sfcprep" + prep: + tasks: + jobsproc_gdas_atmos_prep: + template: skip diff --git a/workflow/rocoto/__init__.py b/workflow/rocoto/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/workflow/rocoto/gefs_tasks.py b/workflow/rocoto/gefs_tasks.py new file mode 100644 index 0000000000..680c7d8686 --- /dev/null +++ b/workflow/rocoto/gefs_tasks.py @@ -0,0 +1,108 @@ +from applications.applications import AppConfig +from rocoto.tasks import Tasks, create_wf_task +import rocoto.rocoto as rocoto + + +class GEFSTasks(Tasks): + + def __init__(self, app_config: AppConfig, cdump: str) -> None: + super().__init__(app_config, cdump) + + def stage_ic(self): + + cpl_ic = self._configs['stage_ic'] + + deps = [] + + # Atm ICs + if self.app_config.do_atm: + prefix = f"{cpl_ic['BASE_CPLIC']}/{cpl_ic['CPL_ATMIC']}/@Y@m@d@H/mem000/atmos" + for file in ['gfs_ctrl.nc'] + \ + [f'{datatype}_data.tile{tile}.nc' + for datatype in ['gfs', 'sfc'] + for tile in range(1, self.n_tiles + 1)]: + data = f"{prefix}/{file}" + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + + # Ocean ICs + if self.app_config.do_ocean: + ocn_res = f"{self._base.get('OCNRES', '025'):03d}" + prefix = f"{cpl_ic['BASE_CPLIC']}/{cpl_ic['CPL_OCNIC']}/@Y@m@d@H/mem000/ocean" + data = f"{prefix}/@Y@m@d.@H0000.MOM.res.nc" + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + if ocn_res in ['025']: + # 0.25 degree ocean model also has these additional restarts + for res in [f'res_{res_index}' for res_index in range(1, 4)]: + data = f"{prefix}/@Y@m@d.@H0000.MOM.{res}.nc" + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + + # Ice ICs + if self.app_config.do_ice: + prefix = f"{cpl_ic['BASE_CPLIC']}/{cpl_ic['CPL_ICEIC']}/@Y@m@d@H/mem000/ice" + data = f"{prefix}/@Y@m@d.@H0000.cice_model.res.nc" + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + + # Wave ICs + if self.app_config.do_wave: + prefix = f"{cpl_ic['BASE_CPLIC']}/{cpl_ic['CPL_WAVIC']}/@Y@m@d@H/mem000/wave" + for wave_grid in self._configs['waveinit']['waveGRD'].split(): + data = f"{prefix}/@Y@m@d.@H0000.restart.{wave_grid}" + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('stage_ic') + task = create_wf_task('stage_ic', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def waveinit(self): + + resources = self.get_resource('waveinit') + task = create_wf_task('waveinit', resources, cdump=self.cdump, envar=self.envars, dependency=None) + + return task + + def fcst(self): + # TODO: Add real dependencies + dependencies = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}stage_ic'} + dependencies.append(rocoto.add_dependency(dep_dict)) + + if self.app_config.do_wave: + dep_dict = {'type': 'task', 'name': f'{self.cdump}waveinit'} + dependencies.append(rocoto.add_dependency(dep_dict)) + + dependencies = rocoto.create_dependency(dep_condition='and', dep=dependencies) + + resources = self.get_resource('fcst') + task = create_wf_task('fcst', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def efcs(self): + dependencies = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}stage_ic'} + dependencies.append(rocoto.add_dependency(dep_dict)) + + if self.app_config.do_wave: + dep_dict = {'type': 'task', 'name': f'{self.cdump}waveinit'} + dependencies.append(rocoto.add_dependency(dep_dict)) + + dependencies = rocoto.create_dependency(dep_condition='and', dep=dependencies) + + efcsenvars = self.envars.copy() + efcsenvars.append(rocoto.create_envar(name='ENSGRP', value='#grp#')) + + groups = self._get_hybgroups(self._base['NMEM_ENS'], self._configs['efcs']['NMEM_EFCSGRP']) + + resources = self.get_resource('efcs') + task = create_wf_task('efcs', resources, cdump=self.cdump, envar=efcsenvars, dependency=dependencies, + metatask='efmn', varname='grp', varval=groups, cycledef='gefs') + + return task diff --git a/workflow/rocoto/gefs_xml.py b/workflow/rocoto/gefs_xml.py new file mode 100644 index 0000000000..b25a73fa6c --- /dev/null +++ b/workflow/rocoto/gefs_xml.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 + +from rocoto.workflow_xml import RocotoXML +from applications.applications import AppConfig +from wxflow import to_timedelta, timedelta_to_HMS +from typing import Dict + + +# Copy of GFSForecastOnlyRocotoXML for now, other than changing cycledef names from 'gfs' to 'gefs' +# If it remains this way, we can consolidate into a single forecast-only class +class GEFSRocotoXML(RocotoXML): + + def __init__(self, app_config: AppConfig, rocoto_config: Dict) -> None: + super().__init__(app_config, rocoto_config) + + def get_cycledefs(self): + sdate = self._base['SDATE'] + edate = self._base['EDATE'] + interval = self._base.get('INTERVAL_GFS', to_timedelta('24H')) + sdate_str = sdate.strftime("%Y%m%d%H%M") + edate_str = edate.strftime("%Y%m%d%H%M") + interval_str = timedelta_to_HMS(interval) + strings = [] + strings.append(f'\t{sdate_str} {edate_str} {interval_str}') + + sdate = sdate + interval + if sdate <= edate: + sdate_str = sdate.strftime("%Y%m%d%H%M") + strings.append(f'\t{sdate_str} {edate_str} {interval_str}') + + strings.append('') + strings.append('') + + return '\n'.join(strings) diff --git a/workflow/rocoto/gfs_cycled_xml.py b/workflow/rocoto/gfs_cycled_xml.py new file mode 100644 index 0000000000..afd663c337 --- /dev/null +++ b/workflow/rocoto/gfs_cycled_xml.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 + +from rocoto.workflow_xml import RocotoXML +from applications.applications import AppConfig +from wxflow import to_timedelta, timedelta_to_HMS +from typing import Dict + + +class GFSCycledRocotoXML(RocotoXML): + + def __init__(self, app_config: AppConfig, rocoto_config: Dict) -> None: + super().__init__(app_config, rocoto_config) + + def get_cycledefs(self): + sdate = self._base['SDATE'] + edate = self._base['EDATE'] + interval = to_timedelta(f"{self._base['assim_freq']}H") + sdate_str = sdate.strftime("%Y%m%d%H%M") + edate_str = edate.strftime("%Y%m%d%H%M") + interval_str = timedelta_to_HMS(interval) + strings = [] + strings.append(f'\t{sdate_str} {sdate_str} {interval_str}') + sdate = sdate + interval + sdate_str = sdate.strftime("%Y%m%d%H%M") + strings.append(f'\t{sdate_str} {edate_str} {interval_str}') + + if self._app_config.gfs_cyc != 0: + sdate_gfs = self._base['SDATE_GFS'] + edate_gfs = self._base['EDATE_GFS'] + interval_gfs = self._base['INTERVAL_GFS'] + sdate_gfs_str = sdate_gfs.strftime("%Y%m%d%H%M") + edate_gfs_str = edate_gfs.strftime("%Y%m%d%H%M") + interval_gfs_str = timedelta_to_HMS(interval_gfs) + strings.append(f'\t{sdate_gfs_str} {edate_gfs_str} {interval_gfs_str}') + + sdate_gfs = sdate_gfs + interval_gfs + sdate_gfs_str = sdate_gfs.strftime("%Y%m%d%H%M") + if sdate_gfs <= edate_gfs: + strings.append(f'\t{sdate_gfs_str} {edate_gfs_str} {interval_gfs_str}') + + strings.append('') + strings.append('') + + return '\n'.join(strings) diff --git a/workflow/rocoto/gfs_forecast_only_xml.py b/workflow/rocoto/gfs_forecast_only_xml.py new file mode 100644 index 0000000000..cf53e685e9 --- /dev/null +++ b/workflow/rocoto/gfs_forecast_only_xml.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 + +from rocoto.workflow_xml import RocotoXML +from applications.applications import AppConfig +from wxflow import to_timedelta, timedelta_to_HMS +from typing import Dict + + +class GFSForecastOnlyRocotoXML(RocotoXML): + + def __init__(self, app_config: AppConfig, rocoto_config: Dict) -> None: + super().__init__(app_config, rocoto_config) + + def get_cycledefs(self): + sdate = self._base['SDATE'] + edate = self._base['EDATE'] + interval = self._base.get('INTERVAL_GFS', to_timedelta('24H')) + strings = [] + strings.append(f'\t{sdate.strftime("%Y%m%d%H%M")} {edate.strftime("%Y%m%d%H%M")} {timedelta_to_HMS(interval)}') + + sdate = sdate + interval + if sdate <= edate: + strings.append(f'\t{sdate.strftime("%Y%m%d%H%M")} {edate.strftime("%Y%m%d%H%M")} {timedelta_to_HMS(interval)}') + + strings.append('') + strings.append('') + + return '\n'.join(strings) diff --git a/workflow/rocoto/gfs_tasks.py b/workflow/rocoto/gfs_tasks.py new file mode 100644 index 0000000000..047c174cdb --- /dev/null +++ b/workflow/rocoto/gfs_tasks.py @@ -0,0 +1,1452 @@ +from applications.applications import AppConfig +from rocoto.tasks import Tasks, create_wf_task +from wxflow import timedelta_to_HMS +import rocoto.rocoto as rocoto +import numpy as np + + +class GFSTasks(Tasks): + + def __init__(self, app_config: AppConfig, cdump: str) -> None: + super().__init__(app_config, cdump) + + @staticmethod + def _is_this_a_gdas_task(cdump, task_name): + if cdump != 'enkfgdas': + raise TypeError(f'{task_name} must be part of the "enkfgdas" cycle and not {cdump}') + + # Specific Tasks begin here + def stage_ic(self): + + cpl_ic = self._configs['stage_ic'] + + deps = [] + + # Atm ICs + if self.app_config.do_atm: + prefix = f"{cpl_ic['BASE_CPLIC']}/{cpl_ic['CPL_ATMIC']}/@Y@m@d@H/atmos" + for file in ['gfs_ctrl.nc'] + \ + [f'{datatype}_data.tile{tile}.nc' + for datatype in ['gfs', 'sfc'] + for tile in range(1, self.n_tiles + 1)]: + data = f"{prefix}/{file}" + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + else: # data-atmosphere + # TODO - need more information about how these forcings are stored + prefix = f"{cpl_ic['BASE_CPLIC']}/{cpl_ic['CPL_DATM']}/@Y@m@d@H" + data = f"{prefix}/gefs.@Y@m.nc" + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + + # Ocean ICs + if self.app_config.do_ocean: + ocn_res = f"{self._base.get('OCNRES', '025'):03d}" + prefix = f"{cpl_ic['BASE_CPLIC']}/{cpl_ic['CPL_OCNIC']}/@Y@m@d@H/ocean" + data = f"{prefix}/@Y@m@d.@H0000.MOM.res.nc" + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + if ocn_res in ['025']: + # 0.25 degree ocean model also has these additional restarts + for res in [f'res_{res_index}' for res_index in range(1, 4)]: + data = f"{prefix}/@Y@m@d.@H0000.MOM.{res}.nc" + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + + # Ice ICs + if self.app_config.do_ice: + prefix = f"{cpl_ic['BASE_CPLIC']}/{cpl_ic['CPL_ICEIC']}/@Y@m@d@H/ice" + data = f"{prefix}/@Y@m@d.@H0000.cice_model.res.nc" + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + + # Wave ICs + if self.app_config.do_wave: + prefix = f"{cpl_ic['BASE_CPLIC']}/{cpl_ic['CPL_WAVIC']}/@Y@m@d@H/wave" + for wave_grid in self._configs['waveinit']['waveGRD'].split(): + data = f"{prefix}/@Y@m@d.@H0000.restart.{wave_grid}" + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('stage_ic') + task = create_wf_task('stage_ic', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def prep(self): + + dump_suffix = self._base["DUMP_SUFFIX"] + gfs_cyc = self._base["gfs_cyc"] + dmpdir = self._base["DMPDIR"] + atm_hist_path = self._template_to_rocoto_cycstring(self._base["COM_ATMOS_HISTORY_TMPL"], {'RUN': 'gdas'}) + dump_path = self._template_to_rocoto_cycstring(self._base["COM_OBSDMP_TMPL"], + {'DMPDIR': dmpdir, 'DUMP_SUFFIX': dump_suffix}) + + gfs_enkf = True if self.app_config.do_hybvar and 'gfs' in self.app_config.eupd_cdumps else False + + deps = [] + dep_dict = {'type': 'metatask', 'name': 'gdasatmprod', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + deps.append(rocoto.add_dependency(dep_dict)) + data = f'{atm_hist_path}/gdas.t@Hz.atmf009.nc' + dep_dict = {'type': 'data', 'data': data, 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + deps.append(rocoto.add_dependency(dep_dict)) + data = f'{dump_path}/{self.cdump}.t@Hz.updated.status.tm00.bufr_d' + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + cycledef = self.cdump + if self.cdump in ['gfs'] and gfs_enkf and gfs_cyc != 4: + cycledef = 'gdas' + + resources = self.get_resource('prep') + task = create_wf_task('prep', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies, + cycledef=cycledef) + + return task + + def waveinit(self): + + resources = self.get_resource('waveinit') + dependencies = None + cycledef = None + if self.app_config.mode in ['cycled']: + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}prep'} + deps.append(rocoto.add_dependency(dep_dict)) + if self.cdump in ['gdas']: + dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='or', dep=deps) + cycledef = 'gdas_half,gdas' if self.cdump in ['gdas'] else self.cdump + task = create_wf_task('waveinit', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies, cycledef=cycledef) + + return task + + def waveprep(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}waveinit'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + cycledef = 'gdas_half,gdas' if self.cdump in ['gdas'] else self.cdump + resources = self.get_resource('waveprep') + task = create_wf_task('waveprep', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies, cycledef=cycledef) + + return task + + def aerosol_init(self): + + input_path = self._template_to_rocoto_cycstring(self._base['COM_ATMOS_INPUT_TMPL']) + restart_path = self._template_to_rocoto_cycstring(self._base['COM_ATMOS_RESTART_TMPL']) + + deps = [] + # Files from current cycle + files = ['gfs_ctrl.nc'] + [f'gfs_data.tile{tile}.nc' for tile in range(1, self.n_tiles + 1)] + for file in files: + data = f'{input_path}/{file}' + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + + # Calculate offset based on CDUMP = gfs | gdas + interval = None + if self.cdump in ['gfs']: + interval = self._base['INTERVAL_GFS'] + elif self.cdump in ['gdas']: + interval = self._base['INTERVAL'] + offset = timedelta_to_HMS(-interval) + + # Files from previous cycle + files = [f'@Y@m@d.@H0000.fv_core.res.nc'] + \ + [f'@Y@m@d.@H0000.fv_core.res.tile{tile}.nc' for tile in range(1, self.n_tiles + 1)] + \ + [f'@Y@m@d.@H0000.fv_tracer.res.tile{tile}.nc' for tile in range(1, self.n_tiles + 1)] + + for file in files: + data = [f'{restart_path}', file] + dep_dict = {'type': 'data', 'data': data, 'offset': [offset, None]} + deps.append(rocoto.add_dependency(dep_dict)) + + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + cycledef = 'gfs_seq' + resources = self.get_resource('aerosol_init') + task = create_wf_task('aerosol_init', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies, + cycledef=cycledef) + + return task + + def anal(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}prep'} + deps.append(rocoto.add_dependency(dep_dict)) + if self.app_config.do_hybvar: + dep_dict = {'type': 'metatask', 'name': 'enkfgdasepmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + else: + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('anal') + task = create_wf_task('anal', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def sfcanl(self): + + deps = [] + if self.app_config.do_jediatmvar: + dep_dict = {'type': 'task', 'name': f'{self.cdump}atmanlfinal'} + else: + dep_dict = {'type': 'task', 'name': f'{self.cdump}anal'} + deps.append(rocoto.add_dependency(dep_dict)) + if self.app_config.do_jedilandda: + dep_dict = {'type': 'task', 'name': f'{self.cdump}landanl'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + else: + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('sfcanl') + task = create_wf_task('sfcanl', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def analcalc(self): + + deps = [] + if self.app_config.do_jediatmvar: + dep_dict = {'type': 'task', 'name': f'{self.cdump}atmanlfinal'} + else: + dep_dict = {'type': 'task', 'name': f'{self.cdump}anal'} + deps.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'task', 'name': f'{self.cdump}sfcanl'} + deps.append(rocoto.add_dependency(dep_dict)) + if self.app_config.do_hybvar and self.cdump in ['gdas']: + dep_dict = {'type': 'task', 'name': 'enkfgdasechgres', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('analcalc') + task = create_wf_task('analcalc', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def analdiag(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}anal'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('analdiag') + task = create_wf_task('analdiag', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def prepatmiodaobs(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}prep'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('prepatmiodaobs') + task = create_wf_task('prepatmiodaobs', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def atmanlinit(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}prepatmiodaobs'} + deps.append(rocoto.add_dependency(dep_dict)) + if self.app_config.do_hybvar: + dep_dict = {'type': 'metatask', 'name': 'enkfgdasepmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + else: + dependencies = rocoto.create_dependency(dep=deps) + + gfs_cyc = self._base["gfs_cyc"] + gfs_enkf = True if self.app_config.do_hybvar and 'gfs' in self.app_config.eupd_cdumps else False + + cycledef = self.cdump + if self.cdump in ['gfs'] and gfs_enkf and gfs_cyc != 4: + cycledef = 'gdas' + + resources = self.get_resource('atmanlinit') + task = create_wf_task('atmanlinit', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies, + cycledef=cycledef) + + return task + + def atmanlrun(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}atmanlinit'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('atmanlrun') + task = create_wf_task('atmanlrun', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def atmanlfinal(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}atmanlrun'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('atmanlfinal') + task = create_wf_task('atmanlfinal', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def aeroanlinit(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}prep'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('aeroanlinit') + task = create_wf_task('aeroanlinit', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + return task + + def aeroanlrun(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}aeroanlinit'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('aeroanlrun') + task = create_wf_task('aeroanlrun', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def aeroanlfinal(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}aeroanlrun'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('aeroanlfinal') + task = create_wf_task('aeroanlfinal', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def preplandobs(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}prep'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('preplandobs') + task = create_wf_task('preplandobs', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def landanl(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}preplandobs'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('landanl') + task = create_wf_task('landanl', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + return task + + def ocnanalprep(self): + + ocean_hist_path = self._template_to_rocoto_cycstring(self._base["COM_OCEAN_HISTORY_TMPL"], {'RUN': 'gdas'}) + + deps = [] + data = f'{ocean_hist_path}/gdas.t@Hz.ocnf009.nc' + dep_dict = {'type': 'data', 'data': data, 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('ocnanalprep') + task = create_wf_task('ocnanalprep', + resources, + cdump=self.cdump, + envar=self.envars, + dependency=dependencies) + + return task + + def ocnanalbmat(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}ocnanalprep'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('ocnanalbmat') + task = create_wf_task('ocnanalbmat', + resources, + cdump=self.cdump, + envar=self.envars, + dependency=dependencies) + + return task + + def ocnanalrun(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}ocnanalbmat'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('ocnanalrun') + task = create_wf_task('ocnanalrun', + resources, + cdump=self.cdump, + envar=self.envars, + dependency=dependencies) + + return task + + def ocnanalchkpt(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}ocnanalrun'} + deps.append(rocoto.add_dependency(dep_dict)) + if self.app_config.do_mergensst: + data = f'&ROTDIR;/{self.cdump}.@Y@m@d/@H/atmos/{self.cdump}.t@Hz.sfcanl.nc' + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('ocnanalchkpt') + task = create_wf_task('ocnanalchkpt', + resources, + cdump=self.cdump, + envar=self.envars, + dependency=dependencies) + + return task + + def ocnanalpost(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}ocnanalchkpt'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('ocnanalpost') + task = create_wf_task('ocnanalpost', + resources, + cdump=self.cdump, + envar=self.envars, + dependency=dependencies) + + return task + + def ocnanalvrfy(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}ocnanalpost'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('ocnanalvrfy') + task = create_wf_task('ocnanalvrfy', + resources, + cdump=self.cdump, + envar=self.envars, + dependency=dependencies) + + return task + + def fcst(self): + + fcst_map = {'forecast-only': self._fcst_forecast_only, + 'cycled': self._fcst_cycled} + + try: + task = fcst_map[self.app_config.mode]() + except KeyError: + raise NotImplementedError(f'{self.app_config.mode} is not a valid type.\n' + + 'Currently supported forecast types are:\n' + + f'{" | ".join(fcst_map.keys())}') + + return task + + def _fcst_forecast_only(self): + dependencies = [] + + dep_dict = {'type': 'task', 'name': f'{self.cdump}stage_ic'} + dependencies.append(rocoto.add_dependency(dep_dict)) + + if self.app_config.do_wave and self.cdump in self.app_config.wave_cdumps: + wave_job = 'waveprep' if self.app_config.model_app in ['ATMW'] else 'waveinit' + dep_dict = {'type': 'task', 'name': f'{self.cdump}{wave_job}'} + dependencies.append(rocoto.add_dependency(dep_dict)) + + if self.app_config.do_aero: + # Calculate offset based on CDUMP = gfs | gdas + interval = None + if self.cdump in ['gfs']: + interval = self._base['INTERVAL_GFS'] + elif self.cdump in ['gdas']: + interval = self._base['INTERVAL'] + offset = timedelta_to_HMS(-interval) + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}aerosol_init'} + deps.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': offset} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies.append(rocoto.create_dependency(dep_condition='or', dep=deps)) + + dependencies = rocoto.create_dependency(dep_condition='and', dep=dependencies) + + resources = self.get_resource('fcst') + task = create_wf_task('fcst', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def _fcst_cycled(self): + + dep_dict = {'type': 'task', 'name': f'{self.cdump}sfcanl'} + dep = rocoto.add_dependency(dep_dict) + dependencies = rocoto.create_dependency(dep=dep) + + if self.app_config.do_jediocnvar: + dep_dict = {'type': 'task', 'name': f'{self.cdump}ocnanalpost'} + dependencies.append(rocoto.add_dependency(dep_dict)) + + if self.app_config.do_aero: + dep_dict = {'type': 'task', 'name': f'{self.cdump}aeroanlfinal'} + dependencies.append(rocoto.add_dependency(dep_dict)) + + if self.app_config.do_jedilandda: + dep_dict = {'type': 'task', 'name': f'{self.cdump}landanl'} + dependencies.append(rocoto.add_dependency(dep_dict)) + + dependencies = rocoto.create_dependency(dep_condition='and', dep=dependencies) + + if self.cdump in ['gdas']: + dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + dependencies.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='or', dep=dependencies) + + if self.app_config.do_wave and self.cdump in self.app_config.wave_cdumps: + dep_dict = {'type': 'task', 'name': f'{self.cdump}waveprep'} + dependencies.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=dependencies) + + cycledef = 'gdas_half,gdas' if self.cdump in ['gdas'] else self.cdump + + resources = self.get_resource('fcst') + task = create_wf_task('fcst', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies, + cycledef=cycledef) + + return task + + def atmanlupp(self): + postenvars = self.envars.copy() + postenvar_dict = {'FHRLST': 'f000', + 'UPP_RUN': 'analysis'} + for key, value in postenvar_dict.items(): + postenvars.append(rocoto.create_envar(name=key, value=str(value))) + + atm_anl_path = self._template_to_rocoto_cycstring(self._base["COM_ATMOS_ANALYSIS_TMPL"]) + deps = [] + data = f'{atm_anl_path}/{self.cdump}.t@Hz.atmanl.nc' + dep_dict = {'type': 'data', 'data': data, 'age': 120} + deps.append(rocoto.add_dependency(dep_dict)) + data = f'{atm_anl_path}/{self.cdump}.t@Hz.sfcanl.nc' + dep_dict = {'type': 'data', 'data': data, 'age': 120} + deps.append(rocoto.add_dependency(dep_dict)) + data = f'{atm_anl_path}/{self.cdump}.t@Hz.loganl.txt' + dep_dict = {'type': 'data', 'data': data, 'age': 60} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps, dep_condition='and') + resources = self.get_resource('upp') + task = create_wf_task('atmanlupp', resources, cdump=self.cdump, envar=postenvars, dependency=dependencies, + cycledef=self.cdump, command='&JOBS_DIR;/upp.sh') + + return task + + def atmanlprod(self): + postenvars = self.envars.copy() + postenvar_dict = {'FHRLST': '-f001'} + for key, value in postenvar_dict.items(): + postenvars.append(rocoto.create_envar(name=key, value=str(value))) + + atm_master_path = self._template_to_rocoto_cycstring(self._base["COM_ATMOS_MASTER_TMPL"]) + deps = [] + data = f'{atm_master_path}/{self.cdump}.t@Hz.master.grb2anl' + dep_dict = {'type': 'data', 'data': data, 'age': 120} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + resources = self.get_resource('atmos_products') + task = create_wf_task('atmanlprod', resources, cdump=self.cdump, envar=postenvars, dependency=dependencies, + cycledef=self.cdump, command='&JOBS_DIR;/atmos_products.sh') + + return task + + @staticmethod + def _get_ufs_postproc_grps(cdump, config): + + fhmin = config['FHMIN'] + fhmax = config['FHMAX'] + fhout = config['FHOUT'] + + # Get a list of all forecast hours + fhrs = [] + if cdump in ['gdas']: + fhrs = range(fhmin, fhmax + fhout, fhout) + elif cdump in ['gfs']: + fhmax = np.max( + [config['FHMAX_GFS_00'], config['FHMAX_GFS_06'], config['FHMAX_GFS_12'], config['FHMAX_GFS_18']]) + fhout = config['FHOUT_GFS'] + fhmax_hf = config['FHMAX_HF_GFS'] + fhout_hf = config['FHOUT_HF_GFS'] + fhrs_hf = range(fhmin, fhmax_hf + fhout_hf, fhout_hf) + fhrs = list(fhrs_hf) + list(range(fhrs_hf[-1] + fhout, fhmax + fhout, fhout)) + + nfhrs_per_grp = config.get('NFHRS_PER_GROUP', 1) + ngrps = len(fhrs) // nfhrs_per_grp if len(fhrs) % nfhrs_per_grp == 0 else len(fhrs) // nfhrs_per_grp + 1 + + fhrs = [f'f{fhr:03d}' for fhr in fhrs] + fhrs = np.array_split(fhrs, ngrps) + fhrs = [fhr.tolist() for fhr in fhrs] + + grp = ' '.join(f'_{fhr[0]}-{fhr[-1]}' if len(fhr) > 1 else f'_{fhr[0]}' for fhr in fhrs) + dep = ' '.join([fhr[-1] for fhr in fhrs]) + lst = ' '.join(['_'.join(fhr) for fhr in fhrs]) + + return grp, dep, lst + + def atmupp(self): + + varname1, varname2, varname3 = 'grp', 'dep', 'lst' + varval1, varval2, varval3 = self._get_ufs_postproc_grps(self.cdump, self._configs['upp']) + vardict = {varname2: varval2, varname3: varval3} + + postenvars = self.envars.copy() + postenvar_dict = {'FHRLST': '#lst#', + 'UPP_RUN': 'forecast'} + for key, value in postenvar_dict.items(): + postenvars.append(rocoto.create_envar(name=key, value=str(value))) + + atm_hist_path = self._template_to_rocoto_cycstring(self._base["COM_ATMOS_HISTORY_TMPL"]) + deps = [] + data = f'{atm_hist_path}/{self.cdump}.t@Hz.atm#dep#.nc' + dep_dict = {'type': 'data', 'data': data, 'age': 120} + deps.append(rocoto.add_dependency(dep_dict)) + data = f'{atm_hist_path}/{self.cdump}.t@Hz.sfc#dep#.nc' + dep_dict = {'type': 'data', 'data': data, 'age': 120} + deps.append(rocoto.add_dependency(dep_dict)) + data = f'{atm_hist_path}/{self.cdump}.t@Hz.atm.log#dep#.txt' + dep_dict = {'type': 'data', 'data': data, 'age': 60} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps, dep_condition='and') + cycledef = 'gdas_half,gdas' if self.cdump in ['gdas'] else self.cdump + resources = self.get_resource('upp') + task = create_wf_task('atmupp', resources, cdump=self.cdump, envar=postenvars, dependency=dependencies, + metatask='atmupp', varname=varname1, varval=varval1, vardict=vardict, cycledef=cycledef, + command='&JOBS_DIR;/upp.sh') + + return task + + def atmprod(self): + + varname1, varname2, varname3 = 'grp', 'dep', 'lst' + varval1, varval2, varval3 = self._get_ufs_postproc_grps(self.cdump, self._configs['atmos_products']) + vardict = {varname2: varval2, varname3: varval3} + + postenvars = self.envars.copy() + postenvar_dict = {'FHRLST': '#lst#'} + for key, value in postenvar_dict.items(): + postenvars.append(rocoto.create_envar(name=key, value=str(value))) + + atm_master_path = self._template_to_rocoto_cycstring(self._base["COM_ATMOS_MASTER_TMPL"]) + deps = [] + data = f'{atm_master_path}/{self.cdump}.t@Hz.master.grb2#dep#' + dep_dict = {'type': 'data', 'data': data, 'age': 120} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + cycledef = 'gdas_half,gdas' if self.cdump in ['gdas'] else self.cdump + resources = self.get_resource('atmos_products') + task = create_wf_task('atmprod', resources, cdump=self.cdump, envar=postenvars, dependency=dependencies, + metatask='atmprod', varname=varname1, varval=varval1, vardict=vardict, cycledef=cycledef, + command='&JOBS_DIR;/atmos_products.sh') + + return task + + def ocnpost(self): + + varname1, varname2, varname3 = 'grp', 'dep', 'lst' + varval1, varval2, varval3 = self._get_ufs_postproc_grps(self.cdump, self._configs['ocnpost']) + vardict = {varname2: varval2, varname3: varval3} + + postenvars = self.envars.copy() + postenvar_dict = {'FHRLST': '#lst#', + 'ROTDIR': self._base.get('ROTDIR')} + for key, value in postenvar_dict.items(): + postenvars.append(rocoto.create_envar(name=key, value=str(value))) + + deps = [] + atm_hist_path = self._template_to_rocoto_cycstring(self._base["COM_ATMOS_HISTORY_TMPL"]) + data = f'{atm_hist_path}/{self.cdump}.t@Hz.atm.log#dep#.txt' + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'task', 'name': f'{self.cdump}fcst'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='or', dep=deps) + cycledef = 'gdas_half,gdas' if self.cdump in ['gdas'] else self.cdump + resources = self.get_resource('ocnpost') + task = create_wf_task('ocnpost', resources, cdump=self.cdump, envar=postenvars, dependency=dependencies, + metatask='ocnpost', varname=varname1, varval=varval1, vardict=vardict, cycledef=cycledef) + + return task + + def wavepostsbs(self): + deps = [] + for wave_grid in self._configs['wavepostsbs']['waveGRD'].split(): + wave_hist_path = self._template_to_rocoto_cycstring(self._base["COM_WAVE_HISTORY_TMPL"]) + data = f'{wave_hist_path}/{self.cdump}wave.out_grd.{wave_grid}.@Y@m@d.@H0000' + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('wavepostsbs') + task = create_wf_task('wavepostsbs', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def wavepostbndpnt(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}fcst'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('wavepostbndpnt') + task = create_wf_task('wavepostbndpnt', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def wavepostbndpntbll(self): + deps = [] + atmos_hist_path = self._template_to_rocoto_cycstring(self._base["COM_ATMOS_HISTORY_TMPL"]) + data = f'{atmos_hist_path}/{self.cdump}.t@Hz.atm.logf180.txt' + dep_dict = {'type': 'data', 'data': data} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('wavepostbndpntbll') + task = create_wf_task('wavepostbndpntbll', resources, cdump=self.cdump, envar=self.envars, + dependency=dependencies) + + return task + + def wavepostpnt(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}fcst'} + deps.append(rocoto.add_dependency(dep_dict)) + if self.app_config.do_wave_bnd: + dep_dict = {'type': 'task', 'name': f'{self.cdump}wavepostbndpntbll'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('wavepostpnt') + task = create_wf_task('wavepostpnt', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def wavegempak(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}wavepostsbs'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('wavegempak') + task = create_wf_task('wavegempak', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def waveawipsbulls(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}wavepostsbs'} + deps.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'task', 'name': f'{self.cdump}wavepostpnt'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('waveawipsbulls') + task = create_wf_task('waveawipsbulls', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def waveawipsgridded(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}wavepostsbs'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('waveawipsgridded') + task = create_wf_task('waveawipsgridded', resources, cdump=self.cdump, envar=self.envars, + dependency=dependencies) + + return task + + def postsnd(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}fcst'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('postsnd') + task = create_wf_task('postsnd', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def fbwinds(self): + + atmos_prod_path = self._template_to_rocoto_cycstring(self._base["COM_ATMOS_GRIB_GRID_TMPL"], {'RUN': self.cdump, 'GRID': '0p25'}) + deps = [] + data = f'{atmos_prod_path}/{self.cdump}.t@Hz.pgrb2.0p25.f006' + dep_dict = {'type': 'data', 'data': data, 'age': 120} + deps.append(rocoto.add_dependency(dep_dict)) + data = f'{atmos_prod_path}/{self.cdump}.t@Hz.pgrb2.0p25.f012' + dep_dict = {'type': 'data', 'data': data, 'age': 120} + deps.append(rocoto.add_dependency(dep_dict)) + data = f'{atmos_prod_path}/{self.cdump}.t@Hz.pgrb2.0p25.f024' + dep_dict = {'type': 'data', 'data': data, 'age': 120} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps, dep_condition='and') + + resources = self.get_resource('awips') + + # TODO: It would be better to use task dependencies on the + # individual post jobs rather than data dependencies to avoid + # prematurely starting with partial files. Unfortunately, the + # ability to "group" post would make this more convoluted than + # it should be and not worth the complexity. + task = create_wf_task('fbwinds', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + @staticmethod + def _get_awipsgroups(cdump, config): + + fhmin = config['FHMIN'] + fhmax = config['FHMAX'] + fhout = config['FHOUT'] + + # Get a list of all forecast hours + fhrs = [] + if cdump in ['gdas']: + fhrs = range(fhmin, fhmax + fhout, fhout) + elif cdump in ['gfs']: + fhmax = np.max( + [config['FHMAX_GFS_00'], config['FHMAX_GFS_06'], config['FHMAX_GFS_12'], config['FHMAX_GFS_18']]) + fhout = config['FHOUT_GFS'] + fhmax_hf = config['FHMAX_HF_GFS'] + fhout_hf = config['FHOUT_HF_GFS'] + if fhmax > 240: + fhmax = 240 + if fhmax_hf > 240: + fhmax_hf = 240 + fhrs_hf = list(range(fhmin, fhmax_hf + fhout_hf, fhout_hf)) + fhrs = fhrs_hf + list(range(fhrs_hf[-1] + fhout, fhmax + fhout, fhout)) + + nawipsgrp = config['NAWIPSGRP'] + ngrps = nawipsgrp if len(fhrs) > nawipsgrp else len(fhrs) + + fhrs = [f'f{fhr:03d}' for fhr in fhrs] + fhrs = np.array_split(fhrs, ngrps) + fhrs = [fhr.tolist() for fhr in fhrs] + + grp = ' '.join([f'_{fhr[0]}-{fhr[-1]}' for fhr in fhrs]) + dep = ' '.join([fhr[-1] for fhr in fhrs]) + lst = ' '.join(['_'.join(fhr) for fhr in fhrs]) + + return grp, dep, lst + + def awips_20km_1p0deg(self): + + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}atmprod'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + awipsenvars = self.envars.copy() + awipsenvar_dict = {'FHRGRP': '#grp#', + 'FHRLST': '#lst#', + 'ROTDIR': self._base.get('ROTDIR')} + for key, value in awipsenvar_dict.items(): + awipsenvars.append(rocoto.create_envar(name=key, value=str(value))) + + varname1, varname2, varname3 = 'grp', 'dep', 'lst' + varval1, varval2, varval3 = self._get_awipsgroups(self.cdump, self._configs['awips']) + vardict = {varname2: varval2, varname3: varval3} + + resources = self.get_resource('awips') + task = create_wf_task('awips_20km_1p0deg', resources, cdump=self.cdump, envar=awipsenvars, dependency=dependencies, + metatask='awips_20km_1p0deg', varname=varname1, varval=varval1, vardict=vardict) + + return task + + def awips_g2(self): + + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}atmprod'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + awipsenvars = self.envars.copy() + awipsenvar_dict = {'FHRGRP': '#grp#', + 'FHRLST': '#lst#', + 'ROTDIR': self._base.get('ROTDIR')} + for key, value in awipsenvar_dict.items(): + awipsenvars.append(rocoto.create_envar(name=key, value=str(value))) + + varname1, varname2, varname3 = 'grp', 'dep', 'lst' + varval1, varval2, varval3 = self._get_awipsgroups(self.cdump, self._configs['awips']) + vardict = {varname2: varval2, varname3: varval3} + + resources = self.get_resource('awips') + task = create_wf_task('awips_g2', resources, cdump=self.cdump, envar=awipsenvars, dependency=dependencies, + metatask='awips_g2', varname=varname1, varval=varval1, vardict=vardict) + + return task + + def gempak(self): + + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}atmprod'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('gempak') + task = create_wf_task('gempak', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def gempakmeta(self): + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}atmprod'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('gempak') + task = create_wf_task('gempakmeta', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def gempakmetancdc(self): + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}atmprod'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('gempak') + task = create_wf_task('gempakmetancdc', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def gempakncdcupapgif(self): + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}atmprod'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('gempak') + task = create_wf_task('gempakncdcupapgif', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def gempakpgrb2spec(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}npoess_pgrb2_0p5deg'} + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('gempak') + task = create_wf_task('gempakpgrb2spec', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def npoess_pgrb2_0p5deg(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}atmanlprod'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('npoess') + task = create_wf_task('npoess_pgrb2_0p5deg', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def verfozn(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}analdiag'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('verfozn') + task = create_wf_task('verfozn', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def verfrad(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}analdiag'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('verfrad') + task = create_wf_task('verfrad', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def vminmon(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}anal'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('vminmon') + task = create_wf_task('vminmon', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def tracker(self): + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}atmprod'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('tracker') + task = create_wf_task('tracker', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def genesis(self): + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}atmprod'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('genesis') + task = create_wf_task('genesis', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def genesis_fsu(self): + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}atmprod'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('genesis_fsu') + task = create_wf_task('genesis_fsu', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def fit2obs(self): + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}atmprod'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('fit2obs') + task = create_wf_task('fit2obs', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def metp(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}arch'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + metpenvars = self.envars.copy() + if self.app_config.mode in ['cycled']: + metpenvar_dict = {'SDATE_GFS': self._base.get('SDATE_GFS').strftime("%Y%m%d%H")} + elif self.app_config.mode in ['forecast-only']: + metpenvar_dict = {'SDATE_GFS': self._base.get('SDATE').strftime("%Y%m%d%H")} + metpenvar_dict['METPCASE'] = '#metpcase#' + for key, value in metpenvar_dict.items(): + metpenvars.append(rocoto.create_envar(name=key, value=str(value))) + + varname1 = 'metpcase' + varval1 = 'g2g1 g2o1 pcp1' + + resources = self.get_resource('metp') + task = create_wf_task('metp', resources, cdump=self.cdump, envar=metpenvars, dependency=dependencies, + metatask='metp', varname=varname1, varval=varval1) + + return task + + def arch(self): + deps = [] + dependencies = [] + if self.app_config.mode in ['cycled']: + if self.cdump in ['gfs']: + dep_dict = {'type': 'task', 'name': f'{self.cdump}atmanlprod'} + deps.append(rocoto.add_dependency(dep_dict)) + if self.app_config.do_vminmon: + dep_dict = {'type': 'task', 'name': f'{self.cdump}vminmon'} + deps.append(rocoto.add_dependency(dep_dict)) + elif self.cdump in ['gdas']: # Block for handling half cycle dependencies + deps2 = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}atmanlprod'} + deps2.append(rocoto.add_dependency(dep_dict)) + if self.app_config.do_fit2obs: + dep_dict = {'type': 'task', 'name': f'{self.cdump}fit2obs'} + deps2.append(rocoto.add_dependency(dep_dict)) + if self.app_config.do_verfozn: + dep_dict = {'type': 'task', 'name': f'{self.cdump}verfozn'} + deps2.append(rocoto.add_dependency(dep_dict)) + if self.app_config.do_verfrad: + dep_dict = {'type': 'task', 'name': f'{self.cdump}verfrad'} + deps2.append(rocoto.add_dependency(dep_dict)) + if self.app_config.do_vminmon: + dep_dict = {'type': 'task', 'name': f'{self.cdump}vminmon'} + deps2.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps2) + dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + dependencies.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='or', dep=dependencies) + if self.cdump in ['gfs'] and self.app_config.do_tracker: + dep_dict = {'type': 'task', 'name': f'{self.cdump}tracker'} + deps.append(rocoto.add_dependency(dep_dict)) + if self.cdump in ['gfs'] and self.app_config.do_genesis: + dep_dict = {'type': 'task', 'name': f'{self.cdump}genesis'} + deps.append(rocoto.add_dependency(dep_dict)) + if self.cdump in ['gfs'] and self.app_config.do_genesis_fsu: + dep_dict = {'type': 'task', 'name': f'{self.cdump}genesis_fsu'} + deps.append(rocoto.add_dependency(dep_dict)) + # Post job dependencies + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}atmprod'} + deps.append(rocoto.add_dependency(dep_dict)) + if self.app_config.do_wave: + dep_dict = {'type': 'task', 'name': f'{self.cdump}wavepostsbs'} + deps.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'task', 'name': f'{self.cdump}wavepostpnt'} + deps.append(rocoto.add_dependency(dep_dict)) + if self.app_config.do_wave_bnd: + dep_dict = {'type': 'task', 'name': f'{self.cdump}wavepostbndpnt'} + deps.append(rocoto.add_dependency(dep_dict)) + if self.app_config.do_ocean: + if self.app_config.mode in ['forecast-only']: # TODO: fix ocnpost to run in cycled mode + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}ocnpost'} + deps.append(rocoto.add_dependency(dep_dict)) + + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps + dependencies) + + cycledef = 'gdas_half,gdas' if self.cdump in ['gdas'] else self.cdump + + resources = self.get_resource('arch') + task = create_wf_task('arch', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies, + cycledef=cycledef) + + return task + + # Cleanup + def cleanup(self): + deps = [] + if 'enkf' in self.cdump: + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}eamn'} + deps.append(rocoto.add_dependency(dep_dict)) + else: + dep_dict = {'type': 'task', 'name': f'{self.cdump}arch'} + deps.append(rocoto.add_dependency(dep_dict)) + + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('cleanup') + task = create_wf_task('cleanup', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + # Start of ensemble tasks + def eobs(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump.replace("enkf","")}prep'} + deps.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'metatask', 'name': 'enkfgdasepmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('eobs') + task = create_wf_task('eobs', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def eomg(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}eobs'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + eomgenvars = self.envars.copy() + eomgenvars.append(rocoto.create_envar(name='ENSGRP', value='#grp#')) + + groups = self._get_hybgroups(self._base['NMEM_ENS'], self._configs['eobs']['NMEM_EOMGGRP']) + + resources = self.get_resource('eomg') + task = create_wf_task('eomg', resources, cdump=self.cdump, envar=eomgenvars, dependency=dependencies, + metatask='eomn', varname='grp', varval=groups) + + return task + + def ediag(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}eobs'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('ediag') + task = create_wf_task('ediag', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def eupd(self): + deps = [] + if self.app_config.lobsdiag_forenkf: + dep_dict = {'type': 'task', 'name': f'{self.cdump}ediag'} + else: + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}eomn'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('eupd') + task = create_wf_task('eupd', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def atmensanlinit(self): + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump.replace("enkf","")}prepatmiodaobs'} + deps.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'metatask', 'name': 'enkfgdasepmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + cycledef = "gdas" + resources = self.get_resource('atmensanlinit') + task = create_wf_task('atmensanlinit', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies, + cycledef=cycledef) + + return task + + def atmensanlrun(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}atmensanlinit'} + deps.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'metatask', 'name': 'enkfgdasepmn', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('atmensanlrun') + task = create_wf_task('atmensanlrun', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def atmensanlfinal(self): + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump}atmensanlrun'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + resources = self.get_resource('atmensanlfinal') + task = create_wf_task('atmensanlfinal', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def ecen(self): + + def _get_ecengroups(): + + if self._base.get('DOIAU_ENKF', False): + fhrs = list(self._base.get('IAUFHRS', '6').split(',')) + + necengrp = self._configs['ecen']['NECENGRP'] + ngrps = necengrp if len(fhrs) > necengrp else len(fhrs) + + fhrs = [f'{int(fhr):03d}' for fhr in fhrs] + fhrs = np.array_split(fhrs, ngrps) + fhrs = [fhr.tolist() for fhr in fhrs] + + grp = ' '.join([f'{x:03d}' for x in range(0, ngrps)]) + dep = ' '.join([f[-1] for f in fhrs]) + lst = ' '.join(['_'.join(f) for f in fhrs]) + + else: + grp = '000' + dep = 'f006' + lst = 'f006' + + return grp, dep, lst + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump.replace("enkf","")}analcalc'} + deps.append(rocoto.add_dependency(dep_dict)) + if self.app_config.do_jediatmens: + dep_dict = {'type': 'task', 'name': f'{self.cdump}atmensanlfinal'} + else: + dep_dict = {'type': 'task', 'name': f'{self.cdump}eupd'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + ecenenvars = self.envars.copy() + ecenenvar_dict = {'FHRGRP': '#grp#', + 'FHRLST': '#lst#'} + for key, value in ecenenvar_dict.items(): + ecenenvars.append(rocoto.create_envar(name=key, value=str(value))) + + varname1, varname2, varname3 = 'grp', 'dep', 'lst' + varval1, varval2, varval3 = _get_ecengroups() + vardict = {varname2: varval2, varname3: varval3} + + resources = self.get_resource('ecen') + task = create_wf_task('ecen', resources, cdump=self.cdump, envar=ecenenvars, dependency=dependencies, + metatask='ecmn', varname=varname1, varval=varval1, vardict=vardict) + return task + + def esfc(self): + + # eupd_cdump = 'gdas' if 'gdas' in self.app_config.eupd_cdumps else 'gfs' + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump.replace("enkf","")}analcalc'} + deps.append(rocoto.add_dependency(dep_dict)) + if self.app_config.do_jediatmens: + dep_dict = {'type': 'task', 'name': f'{self.cdump}atmensanlfinal'} + else: + dep_dict = {'type': 'task', 'name': f'{self.cdump}eupd'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + resources = self.get_resource('esfc') + task = create_wf_task('esfc', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies) + + return task + + def efcs(self): + + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}ecmn'} + deps.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'task', 'name': f'{self.cdump}esfc'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + dep_dict = {'type': 'cycleexist', 'condition': 'not', 'offset': f"-{timedelta_to_HMS(self._base['cycle_interval'])}"} + dependencies.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='or', dep=dependencies) + + efcsenvars = self.envars.copy() + efcsenvars.append(rocoto.create_envar(name='ENSGRP', value='#grp#')) + + groups = self._get_hybgroups(self._base['NMEM_ENS'], self._configs['efcs']['NMEM_EFCSGRP']) + + if self.cdump == "enkfgfs": + groups = self._get_hybgroups(self._base['NMEM_ENS_GFS'], self._configs['efcs']['NMEM_EFCSGRP_GFS']) + cycledef = 'gdas_half,gdas' if self.cdump in ['enkfgdas'] else self.cdump.replace('enkf', '') + resources = self.get_resource('efcs') + task = create_wf_task('efcs', resources, cdump=self.cdump, envar=efcsenvars, dependency=dependencies, + metatask='efmn', varname='grp', varval=groups, cycledef=cycledef) + + return task + + def echgres(self): + + self._is_this_a_gdas_task(self.cdump, 'echgres') + + deps = [] + dep_dict = {'type': 'task', 'name': f'{self.cdump.replace("enkf","")}fcst'} + deps.append(rocoto.add_dependency(dep_dict)) + dep_dict = {'type': 'task', 'name': f'{self.cdump}efcs01'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep_condition='and', dep=deps) + + cycledef = 'gdas_half,gdas' if self.cdump in ['enkfgdas'] else self.cdump + + resources = self.get_resource('echgres') + task = create_wf_task('echgres', resources, cdump=self.cdump, envar=self.envars, dependency=dependencies, + cycledef=cycledef) + + return task + + def epos(self): + + def _get_eposgroups(epos): + fhmin = epos['FHMIN_ENKF'] + fhmax = epos['FHMAX_ENKF'] + fhout = epos['FHOUT_ENKF'] + if self.cdump == "enkfgfs": + fhmax = epos['FHMAX_ENKF_GFS'] + fhout = epos['FHOUT_ENKF_GFS'] + fhrs = range(fhmin, fhmax + fhout, fhout) + + neposgrp = epos['NEPOSGRP'] + ngrps = neposgrp if len(fhrs) > neposgrp else len(fhrs) + + fhrs = [f'f{fhr:03d}' for fhr in fhrs] + fhrs = np.array_split(fhrs, ngrps) + fhrs = [f.tolist() for f in fhrs] + + grp = ' '.join([f'{x:03d}' for x in range(0, ngrps)]) + dep = ' '.join([f[-1] for f in fhrs]) + lst = ' '.join(['_'.join(f) for f in fhrs]) + + return grp, dep, lst + + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}efmn'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + eposenvars = self.envars.copy() + eposenvar_dict = {'FHRGRP': '#grp#', + 'FHRLST': '#lst#'} + for key, value in eposenvar_dict.items(): + eposenvars.append(rocoto.create_envar(name=key, value=str(value))) + + varname1, varname2, varname3 = 'grp', 'dep', 'lst' + varval1, varval2, varval3 = _get_eposgroups(self._configs['epos']) + vardict = {varname2: varval2, varname3: varval3} + + cycledef = 'gdas_half,gdas' if self.cdump in ['enkfgdas'] else self.cdump.replace('enkf', '') + + resources = self.get_resource('epos') + task = create_wf_task('epos', resources, cdump=self.cdump, envar=eposenvars, dependency=dependencies, + metatask='epmn', varname=varname1, varval=varval1, vardict=vardict, cycledef=cycledef) + + return task + + def earc(self): + + deps = [] + dep_dict = {'type': 'metatask', 'name': f'{self.cdump}epmn'} + deps.append(rocoto.add_dependency(dep_dict)) + dependencies = rocoto.create_dependency(dep=deps) + + earcenvars = self.envars.copy() + earcenvars.append(rocoto.create_envar(name='ENSGRP', value='#grp#')) + + groups = self._get_hybgroups(self._base['NMEM_ENS'], self._configs['earc']['NMEM_EARCGRP'], start_index=0) + + cycledef = 'gdas_half,gdas' if self.cdump in ['enkfgdas'] else self.cdump.replace('enkf', '') + + resources = self.get_resource('earc') + task = create_wf_task('earc', resources, cdump=self.cdump, envar=earcenvars, dependency=dependencies, + metatask='eamn', varname='grp', varval=groups, cycledef=cycledef) + + return task diff --git a/workflow/rocoto/rocoto.py b/workflow/rocoto/rocoto.py new file mode 100644 index 0000000000..c4240622d4 --- /dev/null +++ b/workflow/rocoto/rocoto.py @@ -0,0 +1,387 @@ +#!/usr/bin/env python3 + +from typing import Union, List, Dict, Any + +''' + MODULE: + rocoto.py + + ABOUT: + Helper module to create tasks, metatasks, and dependencies for Rocoto +''' + +__all__ = ['create_task', 'create_metatask', + 'add_dependency', 'create_dependency', + 'create_envar', 'create_entity', 'create_cycledef'] + + +def create_metatask(task_dict: Dict[str, Any], metatask_dict: Dict[str, Any]) -> List[str]: + """ + create a Rocoto metatask given a dictionary containing task and metatask information + :param metatask_dict: metatask key-value parameters + :type metatask_dict: dict + :param task_dict: task key-value parameters + :type task_dict: dict + :return: Rocoto metatask + :rtype: list + """ + + # Grab metatask info from the metatask_dict + metataskname = metatask_dict.get('metataskname', 'demometatask') + varname = metatask_dict.get('varname', 'demovar') + varval = metatask_dict.get('varval', 1) + vardict = metatask_dict.get('vardict', None) + + strings = [f'\n', + '\n', + f'\t{str(varval)}\n'] + + if vardict is not None: + for key in vardict.keys(): + value = str(vardict[key]) + strings.append(f'\t{value}\n') + strings.append('\n') + tasklines = create_task(task_dict) + for tl in tasklines: + strings.append(f'{tl}') if tl == '\n' else strings.append(f'\t{tl}') + strings.append('\n') + strings.append('\n') + + return strings + + +def create_task(task_dict: Dict[str, Any]) -> List[str]: + """ + create a Rocoto task given a dictionary containing task information + :param task_dict: task key-value parameters + :type task_dict: dict + :return: Rocoto task + :rtype: list + """ + + # Grab task info from the task_names + taskname = task_dict.get('taskname', 'demotask') + cycledef = task_dict.get('cycledef', 'democycle') + maxtries = task_dict.get('maxtries', 3) + final = task_dict.get('final', False) + command = task_dict.get('command', 'sleep 10') + jobname = task_dict.get('jobname', 'demojob') + resources_dict = task_dict['resources'] + account = resources_dict.get('account', 'batch') + queue = resources_dict.get('queue', 'debug') + partition = resources_dict.get('partition', None) + walltime = resources_dict.get('walltime', '00:01:00') + native = resources_dict.get('native', None) + memory = resources_dict.get('memory', None) + nodes = resources_dict.get('nodes', 1) + ppn = resources_dict.get('ppn', 1) + threads = resources_dict.get('threads', 1) + log = task_dict.get('log', 'demo.log') + envar = task_dict.get('envars', None) + dependency = task_dict.get('dependency', []) + + str_maxtries = str(maxtries) + str_final = ' final="true"' if final else '' + envar = envar if isinstance(envar, list) else [envar] + + strings = [f'\n', + '\n', + f'\t{command}\n', + '\n', + f'\t{jobname}\n', + f'\t{account}\n', + f'\t{queue}\n'] + + if partition is not None: + strings.append(f'\t{partition}\n') + strings.append(f'\t{walltime}\n') + strings.append(f'\t{nodes}:ppn={ppn}:tpp={threads}\n') + if memory is not None: + strings.append(f'\t{memory}\n') + if native is not None: + strings.append(f'\t{native}\n') + strings.append('\n') + strings.append(f'\t{log}\n') + strings.append('\n') + + if envar[0] is not None: + for e in envar: + strings.append(f'\t{e}\n') + strings.append('\n') + + if dependency is not None and len(dependency) > 0: + strings.append('\t\n') + for d in dependency: + strings.append(f'\t\t{d}\n') + strings.append('\t\n') + strings.append('\n') + + strings.append('\n') + + return strings + + +def add_dependency(dep_dict: Dict[str, Any]) -> str: + """ + create a simple Rocoto dependency given a dictionary with dependency information + :param dep_dict: dependency key-value parameters + :type dep_dict: dict + :return: Rocoto simple dependency + :rtype: str + """ + + tag_map = {'task': _add_task_tag, + 'metatask': _add_task_tag, + 'data': _add_data_tag, + 'cycleexist': _add_cycle_tag, + 'streq': _add_streq_tag, + 'strneq': _add_streq_tag} + + dep_condition = dep_dict.get('condition', None) + dep_type = dep_dict.get('type', None) + + try: + string = tag_map[dep_type](dep_dict) + except KeyError: + raise KeyError(f'{dep_type} is an unknown dependency type.\n' + + 'Currently supported dependency types are:\n' + + f'{" | ".join(tag_map.keys())}') + + if dep_condition is not None: + string = f'<{dep_condition}>{string}' + + return string + + +def _add_task_tag(dep_dict: Dict[str, Any]) -> str: + """ + create a simple task or metatask tag + :param dep_dict: dependency key-value parameters + :type dep_dict: dict + :return: Rocoto simple task or metatask dependency + :rtype: str + """ + + dep_type = dep_dict.get('type', None) + dep_name = dep_dict.get('name', None) + dep_offset = dep_dict.get('offset', None) + + if dep_name is None: + msg = f'a {dep_type} name is necessary for {dep_type} dependency' + raise KeyError(msg) + + string = '<' + string += f'{dep_type}dep {dep_type}="{dep_name}"' + if dep_offset is not None: + string += f' cycle_offset="{dep_offset}"' + string += '/>' + + return string + + +def _add_data_tag(dep_dict: Dict[str, Any]) -> str: + """ + create a simple data tag + :param dep_dict: dependency key-value parameters + :type dep_dict: dict + :return: Rocoto simple task or metatask dependency + :rtype: str + """ + + dep_type = dep_dict.get('type', None) + dep_data = dep_dict.get('data', None) + dep_offset = dep_dict.get('offset', None) + dep_age = dep_dict.get('age', None) + + if dep_data is None: + msg = f'a data value is necessary for {dep_type} dependency' + raise KeyError(msg) + + if not isinstance(dep_data, list): + dep_data = [dep_data] + + if not isinstance(dep_offset, list): + dep_offset = [dep_offset] + + assert len(dep_data) == len(dep_offset) + + if dep_age is None: + strings = [''] + else: + strings = [f''] + for data, offset in zip(dep_data, dep_offset): + if '@' in data: + offset_str = '' if offset in [None, ''] else f' offset="{offset}"' + offset_string_b = f'' + offset_string_e = '' + else: + offset_string_b = '' + offset_string_e = '' + + strings.append(f'{offset_string_b}{data}{offset_string_e}') + + strings.append('') + + return ''.join(strings) + + +def _add_cycle_tag(dep_dict: Dict[str, Any]) -> str: + """ + create a simple cycle exist tag + :param dep_dict: dependency key-value parameters + :type dep_dict: dict + :return: Rocoto simple task or metatask dependency + :rtype: str + """ + + dep_type = dep_dict.get('type', None) + dep_offset = dep_dict.get('offset', None) + + if dep_offset is None: + msg = f'an offset value is necessary for {dep_type} dependency' + raise KeyError(msg) + + string = f'' + + return string + + +def _add_streq_tag(dep_dict: Dict[str, Any]) -> str: + """ + create a simple string comparison tag + :param dep_dict: dependency key-value parameters + :type dep_dict: dict + :return: Rocoto simple task or metatask dependency + :rtype: str + """ + + dep_type = dep_dict.get('type', None) + dep_left = dep_dict.get('left', None) + dep_right = dep_dict.get('right', None) + + fail = False + msg = '' + if dep_left is None: + msg += f'a left value is necessary for {dep_type} dependency' + fail = True + else: + dep_left = str(dep_left) + if dep_right is None: + if fail: + msg += '\n' + msg += f'a right value is necessary for {dep_type} dependency' + fail = True + else: + dep_right = str(dep_right) + if fail: + raise KeyError(msg) + + if '@' in dep_left: + dep_left = f'{dep_left}' + if '@' in dep_right: + dep_right = f'{dep_right}' + + string = f'<{dep_type}>{dep_left}{dep_right}' + + return string + + +def _traverse(o, tree_types=(list, tuple)): + """ + Traverse through a list of lists or tuples and yield the value + Objective is to flatten a list of lists or tuples + :param o: list of lists or not + :type o: list, tuple, scalar + :param tree_types: trees to travers + :type tree_types: tuple + :return: value in the list or tuple + :rtype: scalar + """ + + if isinstance(o, tree_types): + for value in o: + for subvalue in _traverse(value, tree_types): + yield subvalue + else: + yield o + + +def create_dependency(dep_condition=None, dep=[]) -> List[str]: + """ + create a compound dependency given a list of dependencies, and compounding condition + the list of dependencies are created using add_dependency + :param dep_condition: dependency condition + :type dep_condition: boolean e.g. and, or, true, false + :param dep: dependency + :type dep: str or list + :return: Rocoto compound dependency + :rtype: list + """ + + dep = dep if isinstance(dep, list) else [dep] + + strings = [] + + if len(dep) > 0: + if dep_condition is not None: + strings.append(f'<{dep_condition}>') + + for d in dep: + if dep_condition is None: + strings.append(f'{d}') + else: + for e in _traverse(d): + strings.append(f'\t{e}') + + if dep_condition is not None: + strings.append(f'') + + return strings + + +def create_envar(name: str, value: Union[str, float, int]) -> str: + """ + create a Rocoto environment variable given name and value + returns the environment variable as a string + :param name: name of the environment variable + :type name: str + :param value: value of the environment variable + :type value: str or float or int or unicode + :return: Rocoto environment variable key-value pair + :rtype: str + """ + + return f'{name}{str(value)}' + + +def create_cycledef(group=None, start=None, stop=None, step=None): + """ + create a Rocoto cycle definition + returns the environment variable as a string + :param group: cycle definition group name + :type group: str + :param start: cycle start datetime + :type start: str + :param step: cycle interval (timedelta) + :type stop: str + :param step: cycle interval (timedelta) + :return: Rocoto cycledef variable string + :rtype: str + """ + + return f'{start} {stop} {step}' + + +def create_entity(name: str, value: Union[str, float, int]) -> str: + """ + create an XML ENTITY variable given name and value + returns the variable as a string + :param name: name of the variable + :type name: str + :param value: value of the variable + :type value: str or float or int or unicode + :return: XML entity variable key-value pair + :rtype: str + """ + + return f'' diff --git a/workflow/rocoto/rocoto_xml_factory.py b/workflow/rocoto/rocoto_xml_factory.py new file mode 100644 index 0000000000..cb2d4c276c --- /dev/null +++ b/workflow/rocoto/rocoto_xml_factory.py @@ -0,0 +1,10 @@ +from wxflow import Factory +from rocoto.gfs_cycled_xml import GFSCycledRocotoXML +from rocoto.gfs_forecast_only_xml import GFSForecastOnlyRocotoXML +from rocoto.gefs_xml import GEFSRocotoXML + + +rocoto_xml_factory = Factory('RocotoXML') +rocoto_xml_factory.register('gfs_cycled', GFSCycledRocotoXML) +rocoto_xml_factory.register('gfs_forecast-only', GFSForecastOnlyRocotoXML) +rocoto_xml_factory.register('gefs_forecast-only', GEFSRocotoXML) diff --git a/workflow/rocoto/tasks.py b/workflow/rocoto/tasks.py new file mode 100644 index 0000000000..06000338be --- /dev/null +++ b/workflow/rocoto/tasks.py @@ -0,0 +1,221 @@ +#!/usr/bin/env python3 + +import numpy as np +from applications.applications import AppConfig +import rocoto.rocoto as rocoto +from wxflow import Template, TemplateConstants, to_timedelta + +__all__ = ['Tasks', 'create_wf_task'] + + +class Tasks: + SERVICE_TASKS = ['arch', 'earc'] + VALID_TASKS = ['aerosol_init', 'stage_ic', + 'prep', 'anal', 'sfcanl', 'analcalc', 'analdiag', 'arch', "cleanup", + 'prepatmiodaobs', 'atmanlinit', 'atmanlrun', 'atmanlfinal', + 'ocnanalprep', 'ocnanalbmat', 'ocnanalrun', 'ocnanalchkpt', 'ocnanalpost', 'ocnanalvrfy', + 'earc', 'ecen', 'echgres', 'ediag', 'efcs', + 'eobs', 'eomg', 'epos', 'esfc', 'eupd', + 'atmensanlinit', 'atmensanlrun', 'atmensanlfinal', + 'aeroanlinit', 'aeroanlrun', 'aeroanlfinal', + 'preplandobs', 'landanl', + 'fcst', + 'atmanlupp', 'atmanlprod', 'atmupp', 'atmprod', + 'ocnpost', + 'verfozn', 'verfrad', 'vminmon', + 'metp', + 'tracker', 'genesis', 'genesis_fsu', + 'postsnd', 'awips_g2', 'awips_20km_1p0deg', 'fbwinds', + 'gempak', 'gempakmeta', 'gempakmetancdc', 'gempakncdcupapgif', 'gempakpgrb2spec', 'npoess_pgrb2_0p5deg' + 'waveawipsbulls', 'waveawipsgridded', 'wavegempak', 'waveinit', + 'wavepostbndpnt', 'wavepostbndpntbll', 'wavepostpnt', 'wavepostsbs', 'waveprep', + 'npoess'] + + def __init__(self, app_config: AppConfig, cdump: str) -> None: + + self.app_config = app_config + self.cdump = cdump + + # Save dict_configs and base in the internal state (never know where it may be needed) + self._configs = self.app_config.configs + self._base = self._configs['base'] + self._base['cycle_interval'] = to_timedelta(f'{self._base["assim_freq"]}H') + + self.n_tiles = 6 # TODO - this needs to be elsewhere + + envar_dict = {'RUN_ENVIR': self._base.get('RUN_ENVIR', 'emc'), + 'HOMEgfs': self._base.get('HOMEgfs'), + 'EXPDIR': self._base.get('EXPDIR'), + 'NET': self._base.get('NET'), + 'CDUMP': self.cdump, + 'RUN': self.cdump, + 'CDATE': '@Y@m@d@H', + 'PDY': '@Y@m@d', + 'cyc': '@H', + 'COMROOT': self._base.get('COMROOT'), + 'DATAROOT': self._base.get('DATAROOT')} + self.envars = self._set_envars(envar_dict) + + @staticmethod + def _set_envars(envar_dict) -> list: + + envars = [] + for key, value in envar_dict.items(): + envars.append(rocoto.create_envar(name=key, value=str(value))) + + return envars + + @staticmethod + def _get_hybgroups(nens: int, nmem_per_group: int, start_index: int = 1): + ngrps = nens / nmem_per_group + groups = ' '.join([f'{x:02d}' for x in range(start_index, int(ngrps) + 1)]) + return groups + + def _template_to_rocoto_cycstring(self, template: str, subs_dict: dict = {}) -> str: + ''' + Takes a string templated with ${ } and converts it into a string suitable + for use in a rocoto . Some common substitutions are defined by + default. Any additional variables in the template and overrides of the + defaults can be passed in by an optional dict. + + Variables substitued by default: + ${ROTDIR} -> '&ROTDIR;' + ${RUN} -> self.cdump + ${DUMP} -> self.cdump + ${MEMDIR} -> '' + ${YMD} -> '@Y@m@d' + ${HH} -> '@H' + + Parameters + ---------- + template: str + Template string with variables to be replaced + subs_dict: dict, optional + Dictionary containing substitutions + + Returns + ------- + str + Updated string with variables substituted + + ''' + + # Defaults + rocoto_conversion_dict = { + 'ROTDIR': '&ROTDIR;', + 'RUN': self.cdump, + 'DUMP': self.cdump, + 'MEMDIR': '', + 'YMD': '@Y@m@d', + 'HH': '@H' + } + + rocoto_conversion_dict.update(subs_dict) + + return Template.substitute_structure(template, + TemplateConstants.DOLLAR_CURLY_BRACE, + rocoto_conversion_dict.get) + + def get_resource(self, task_name): + """ + Given a task name (task_name) and its configuration (task_names), + return a dictionary of resources (task_resource) used by the task. + Task resource dictionary includes: + account, walltime, cores, nodes, ppn, threads, memory, queue, partition, native + """ + + scheduler = self.app_config.scheduler + + task_config = self._configs[task_name] + + account = task_config['ACCOUNT'] + + walltime = task_config[f'wtime_{task_name}'] + if self.cdump in ['gfs'] and f'wtime_{task_name}_gfs' in task_config.keys(): + walltime = task_config[f'wtime_{task_name}_gfs'] + + cores = task_config[f'npe_{task_name}'] + if self.cdump in ['gfs'] and f'npe_{task_name}_gfs' in task_config.keys(): + cores = task_config[f'npe_{task_name}_gfs'] + + ppn = task_config[f'npe_node_{task_name}'] + if self.cdump in ['gfs'] and f'npe_node_{task_name}_gfs' in task_config.keys(): + ppn = task_config[f'npe_node_{task_name}_gfs'] + + nodes = int(np.ceil(float(cores) / float(ppn))) + + threads = task_config[f'nth_{task_name}'] + if self.cdump in ['gfs'] and f'nth_{task_name}_gfs' in task_config.keys(): + threads = task_config[f'nth_{task_name}_gfs'] + + memory = task_config.get(f'memory_{task_name}', None) + + native = None + if scheduler in ['pbspro']: + native = '-l debug=true,place=vscatter' + if task_config.get('is_exclusive', False): + native += ':exclhost' + elif scheduler in ['slurm']: + native = '--export=NONE' + + queue = task_config['QUEUE_SERVICE'] if task_name in Tasks.SERVICE_TASKS else task_config['QUEUE'] + + partition = None + if scheduler in ['slurm']: + partition = task_config['PARTITION_SERVICE'] if task_name in Tasks.SERVICE_TASKS else task_config[ + 'PARTITION_BATCH'] + + task_resource = {'account': account, + 'walltime': walltime, + 'nodes': nodes, + 'cores': cores, + 'ppn': ppn, + 'threads': threads, + 'memory': memory, + 'native': native, + 'queue': queue, + 'partition': partition} + + return task_resource + + def get_task(self, task_name, *args, **kwargs): + """ + Given a task_name, call the method for that task + """ + try: + return getattr(self, task_name, *args, **kwargs)() + except AttributeError: + raise AttributeError(f'"{task_name}" is not a valid task.\n' + + 'Valid tasks are:\n' + + f'{", ".join(Tasks.VALID_TASKS)}') + + +def create_wf_task(task_name, resources, + cdump='gdas', cycledef=None, envar=None, dependency=None, + metatask=None, varname=None, varval=None, vardict=None, + final=False, command=None): + tasknamestr = f'{cdump}{task_name}' + metatask_dict = None + if metatask is not None: + tasknamestr = f'{tasknamestr}#{varname}#' + metatask_dict = {'metataskname': f'{cdump}{metatask}', + 'varname': f'{varname}', + 'varval': f'{varval}', + 'vardict': vardict} + + cycledefstr = cdump.replace('enkf', '') if cycledef is None else cycledef + + task_dict = {'taskname': f'{tasknamestr}', + 'cycledef': f'{cycledefstr}', + 'maxtries': '&MAXTRIES;', + 'command': f'&JOBS_DIR;/{task_name}.sh' if command is None else command, + 'jobname': f'&PSLOT;_{tasknamestr}_@H', + 'resources': resources, + 'log': f'&ROTDIR;/logs/@Y@m@d@H/{tasknamestr}.log', + 'envars': envar, + 'dependency': dependency, + 'final': final} + + task = rocoto.create_task(task_dict) if metatask is None else rocoto.create_metatask(task_dict, metatask_dict) + + return ''.join(task) diff --git a/workflow/rocoto/tasks_factory.py b/workflow/rocoto/tasks_factory.py new file mode 100644 index 0000000000..38cf0d0bd1 --- /dev/null +++ b/workflow/rocoto/tasks_factory.py @@ -0,0 +1,8 @@ +from wxflow import Factory +from rocoto.gfs_tasks import GFSTasks +from rocoto.gefs_tasks import GEFSTasks + + +tasks_factory = Factory('Tasks') +tasks_factory.register('gfs', GFSTasks) +tasks_factory.register('gefs', GEFSTasks) diff --git a/workflow/rocoto/workflow_tasks.py b/workflow/rocoto/workflow_tasks.py new file mode 100644 index 0000000000..84af898d36 --- /dev/null +++ b/workflow/rocoto/workflow_tasks.py @@ -0,0 +1,23 @@ +#!/usr/bin/env python3 + +from typing import List +from applications.applications import AppConfig +from rocoto.tasks_factory import tasks_factory + + +__all__ = ['get_wf_tasks'] + + +def get_wf_tasks(app_config: AppConfig) -> List: + """ + Take application configuration to return a list of all tasks for that application + """ + + tasks = [] + # Loop over all keys of cycles (CDUMP) + for cdump, cdump_tasks in app_config.task_names.items(): + task_obj = tasks_factory.create(app_config.net, app_config, cdump) # create Task object based on cdump + for task_name in cdump_tasks: + tasks.append(task_obj.get_task(task_name)) + + return tasks diff --git a/workflow/rocoto/workflow_xml.py b/workflow/rocoto/workflow_xml.py new file mode 100644 index 0000000000..11b2cdfc45 --- /dev/null +++ b/workflow/rocoto/workflow_xml.py @@ -0,0 +1,171 @@ +#!/usr/bin/env python3 + +import os +from distutils.spawn import find_executable +from datetime import datetime +from collections import OrderedDict +from typing import Dict +from applications.applications import AppConfig +from rocoto.workflow_tasks import get_wf_tasks +import rocoto.rocoto as rocoto +from abc import ABC, abstractmethod + + +class RocotoXML(ABC): + + def __init__(self, app_config: AppConfig, rocoto_config: Dict) -> None: + + self._app_config = app_config + self.rocoto_config = rocoto_config + + self._base = self._app_config.configs['base'] + + self.preamble = self._get_preamble() + self.definitions = self._get_definitions() + self.header = self._get_workflow_header() + self.cycledefs = self.get_cycledefs() + task_list = get_wf_tasks(app_config) + self.tasks = '\n'.join(task_list) + self.footer = self._get_workflow_footer() + + self.xml = self._assemble_xml() + + @staticmethod + def _get_preamble(): + """ + Generate preamble for XML + """ + + strings = ['', + '', + ''] + + return '\n'.join(strings) + + def _get_definitions(self) -> str: + """ + Create entities related to the experiment + """ + + entity = OrderedDict() + + entity['PSLOT'] = self._base['PSLOT'] + + entity['ROTDIR'] = self._base['ROTDIR'] + entity['JOBS_DIR'] = self._base['BASE_JOB'] + + entity['MAXTRIES'] = self.rocoto_config['maxtries'] + + # Put them all in an XML key-value syntax + strings = [] + for key, value in entity.items(): + strings.append('\t' + rocoto.create_entity(key, value)) + + return '\n'.join(strings) + + def _get_workflow_header(self): + """ + Create the workflow header block + """ + + scheduler = self._app_config.scheduler + cyclethrottle = self.rocoto_config['cyclethrottle'] + taskthrottle = self.rocoto_config['taskthrottle'] + verbosity = self.rocoto_config['verbosity'] + + expdir = self._base['EXPDIR'] + + strings = ['', + ']>', + '', + f'', + '', + f'\t{expdir}/logs/@Y@m@d@H.log', + '', + '\t', + ''] + + return '\n'.join(strings) + + @abstractmethod + def get_cycledefs(self): + pass + + @staticmethod + def _get_workflow_footer(): + """ + Generate workflow footer + """ + + return '\n\n' + + def _assemble_xml(self) -> str: + + strings = [self.preamble, + self.definitions, + self.header, + self.cycledefs, + self.tasks, + self.footer] + + return ''.join(strings) + + def write(self, xml_file: str = None, crontab_file: str = None): + self._write_xml(xml_file=xml_file) + self._write_crontab(crontab_file=crontab_file) + + def _write_xml(self, xml_file: str = None) -> None: + + expdir = self._base['EXPDIR'] + pslot = self._base['PSLOT'] + + if xml_file is None: + xml_file = f"{expdir}/{pslot}.xml" + + with open(xml_file, 'w') as fh: + fh.write(self.xml) + + def _write_crontab(self, crontab_file: str = None, cronint: int = 5) -> None: + """ + Create crontab to execute rocotorun every cronint (5) minutes + """ + + # No point creating a crontab if rocotorun is not available. + rocotoruncmd = find_executable('rocotorun') + if rocotoruncmd is None: + print('Failed to find rocotorun, crontab will not be created') + return + + expdir = self._base['EXPDIR'] + pslot = self._base['PSLOT'] + + rocotorunstr = f'{rocotoruncmd} -d {expdir}/{pslot}.db -w {expdir}/{pslot}.xml' + cronintstr = f'*/{cronint} * * * *' + + try: + replyto = os.environ['REPLYTO'] + except KeyError: + replyto = '' + + strings = ['', + f'#################### {pslot} ####################', + f'MAILTO="{replyto}"', + f'{cronintstr} {rocotorunstr}', + '#################################################################', + ''] + + if crontab_file is None: + crontab_file = f"{expdir}/{pslot}.crontab" + + with open(crontab_file, 'w') as fh: + fh.write('\n'.join(strings)) + + return diff --git a/workflow/rocoto_viewer.py b/workflow/rocoto_viewer.py new file mode 100755 index 0000000000..95dd9e76dd --- /dev/null +++ b/workflow/rocoto_viewer.py @@ -0,0 +1,2509 @@ +#!/usr/bin/env python3 +# +# @namespace rocoto_viewer +# @brief A Curses based terminal viewer to interact and display the status of a Rocoto Workflow in real time. +# +# @anchor rocoto_viewer +# This Python script allows users to see and interact with a running Rocoto Workflow in real time. +# image html pythonCurses.jpeg "Rocoto Viewer for Displaying Real-time Status of Workflow" +# +# To launch this viewer simply give it the database and the XML files being used by the \b Rocoto system for your experiment: +# +# rocoto_viewer.py -w my_gfs-workflow.xml -d my_database.db +# +# The script is located in the directory para/exp/rocoto/rocotoviewers/rocotoviewer_curses/rocoto_viewer.py +# The view will continuously update every four minutes and reflect the current status of your workflow. +# You may use your mouse or arrow keys to select a particular task and view its status details by pressing the key \p c as indicated as \b \ +# (which runs \b rocotocheck) or perform a \b rocotorewind by pressing \b \ to restart the workflow at that point. +# Running \b rocotorewind causes the state information of that task to be cleared from the database and resubmits the job to the scheduler. +# +# Tasks marked with the \b \< symbol are \b metatasks and can be expanded by highlight that task with the mouse, +# and then clicking on the \b \< symbol which then changes to \b \>. +# You can then click on the \b \> symbol to collapse it again. Alternatively, you can select the 'x' to expand and collapse metatasks when selected. +# +# @cond ROCOTO_VIEWER_CURSES + +from __future__ import division + +import curses + +import os +import sys +import getpass +import getopt +import signal +from os.path import basename +import subprocess +from math import * + +from itertools import groupby +from time import time +from multiprocessing import Process, Queue +import queue +import time as std_time +from datetime import datetime, timedelta +import re +import traceback +import pickle + +import sqlite3 +import collections +try: + # The stock XML parser does not expand external entities, so + # try to load lxml instead. + from lxml import etree as ET + using_lxml = True +except ImportError: + # Don't raise the exception yet in case the workflow doesn't + # have external entities. + from xml.etree import ElementTree as ET + using_lxml = False + +try: + # UGCS uses a timedelta of months, which requires the extended + # capabilities of relativedelta. The base timedelta only handles + # intervals measured in days. + from dateutil.relativedelta import relativedelta +except ImportError: + # Don't raise the exception yet until relativedelta is actually needed. + pass + +# Global Variables +database_file_agmented = None +use_performance_metrics = False +job_name_length_max = 50 +default_column_length_master = 125 +stat_read_time_delay = 3 * 60 +header_string = '' +format_string = "jobid slots submit_time start_time cpu_used run_time delimiter=';'" + +ccs_html = ''' + + + + + + +''' +bottom_message_scroll = 'heck oot ewind un (->) Next Cycle (<-) Previous Cycle p own elp uit' +bottom_message = 'heck oot ewind un (->) Next Cycle (<-) Previous Cycle elp uit' + +# Global Variables +# ================ +list_tasks = False +html_output = False +html_output_file = None +rzdm_path = '' +only_check_point = False +save_checkfile_path = None +use_multiprocessing = True +get_user = getpass.getuser() + +rocotoboot = None +rocotorun = None +rocotocheck = None +rocotocomplete = None +rocotostat = None +rocotorewind = None + +screen_resized = False +debug = None + +mlines = 0 +mcols = 0 + + +def eprint(message: str) -> None: + """ + Print to stderr instead of stdout + + Parameters + ---------- + message: str + Messaga to be printed to stderr + + """ + print(message, file=sys.stderr) + + +def syscall(args: list) -> str: + """ + Wrapper to call a shell command and return the output + + Parameters + ---------- + args: list + A list of command line arguments, identical to those used by subprocess.run + + Returns + ---------- + output: str + A string representation of the stdout produced by the given shell command, + with any leading/trailing whitespace/newlines stripped. + + """ + return subprocess.run(args, check=True, stdout=subprocess.PIPE, encoding='utf-8').stdout.strip() + + +# Shamelessly stolen and updated from produtils +def string_to_timedelta(td_string: str) -> timedelta: + """ + Converts a string to a timedelta object + + Parameters + ---------- + td_string: str + A string specifying a time interval in hours and minutes (and optionally + seconds), separated by colons. Negative values are permitted. + + Returns + ---------- + delta: timedelta + A timedelta object representing the interval specified by the string. + + Raises + ---------- + TypeError, ValueError, AttributeError + + Examples + ---------- + >>> string_to_timedelta("3:00") + A timedelta object representing a change of three hours + + >>> string_to_timedelta("-6:00") + A timedelta object representing a change of negative six hours + + >>> string_to_timedelta("0:0:30") + A timedelta object representing a change of thirty seconds + + """ + try: + m = re.search(r'''(?ix) \A \s* (?P-)? 0* (?P\d+) + :0*(?P\d+) + (?: :0*(?P\d+(?:\.\d*)?) )? + \s*''', td_string) + if m: + (hours, minutes, seconds) = (0., 0., 0.) + mdict = m.groupdict() + if 'hours' in mdict and mdict['hours'] is not None: + hours = float(mdict['hours']) + if 'minutes' in mdict and mdict['minutes'] is not None: + minutes = float(mdict['minutes']) + if 'seconds' in mdict and mdict['seconds'] is not None: + seconds = float(mdict['seconds']) + dt = timedelta(hours=hours, minutes=minutes, seconds=seconds) + if 'negative' in mdict and mdict['negative'] is not None \ + and mdict['negative'] == '-': + return -dt + return dt + except (TypeError, ValueError, AttributeError): + raise + + +# Shamelessly stolen and updated from produtils +def is_posix(s: str) -> bool: + """ + Determines whether a string can be expressed as a POSIX sh string. + + Parameters + ---------- + s: str + String to be tested + + Returns + ---------- + is_posix: bool + Whether the string given can be expressed in POSIX + + """ + # Only allow non-whitespace ASCII and space (chr(32)-chr(126)): + if re.search(r'\A[a-zA-Z0-9 !"#$%&?()*+,./:;<=>?@^_`{|}~\\\]\[\'-]*\Z', s): + return True + else: + return False + + +# Shamelessly stolen and updated from produtils +def convert_to_posix(s): + """ + Converts a string to an escaped POSIX sh string + + Parameters + ---------- + s: str + String to be escaped to POSIX using backslashes + + Returns + ---------- + escaped_s: str + New string that has been properly escaped with backslashed for use in sh + + Raises + ---------- + NotValidPosixShString + If the string cannot produce a valid POSIX string + + See Also + ---------- + is_posix + + """ + """!Given a Python str, returns a backslashed POSIX sh string, or + raises NotValidPosixShString if that cannot be done. + @param s a string to backslash""" + if not is_posix(s): + raise NotValidPosixShString(f'String is not expressable in POSIX sh: {repr(s)}') + if re.search(r'(?ms)[^a-zA-Z0-9_+.,/-]', s): + return '"' + re.sub(r'(["\\\\$])', r"\\\1", s) + '"' + return s + + +def get_rocoto_commands() -> bool: + """ + Sets global variables for the location of rocoto executables + using shell which command. + + Return + ---------- + is_successful: bool + Whether all commands were successfully set + + """ + global rocotoboot + global rocotorun + global rocotocheck + global rocotocomplete + global rocotostat + global rocotorewind + try: + rocotorun = syscall(['which', 'rocotorun']) + rocotoboot = syscall(['which', 'rocotoboot']) + rocotocheck = syscall(['which', 'rocotocheck']) + rocotocomplete = syscall(['which', 'rocotocomplete']) + rocotorewind = syscall(['which', 'rocotorewind']) + rocotostat = syscall(['which', 'rocotostat']) + except subprocess.CalledProcessError as e: + eprint(e) + eprint("FATAL: Could not locate one or more rocoto commands") + return False + return True + + +def sigwinch_handler(signum, frame): + global screen_resized + global mlines + global mcols + term_size = subprocess.Popen(['stty', 'size'], stdout=subprocess.PIPE) + try: + get_term_size, err = term_size.communicate() + except Exception: + return + mlines, mcols = map(int, get_term_size.split()) + screen_resized = True + + +def usage(message=None): + curses.endwin() + eprint(''' +Usage: rocoto_status_viewer.py -w workflow.xml -d database.db [--listtasks] [--html=filename.html] + +Mandatory arguments: + -w workflow.xml + -d database.db +Optional arguments: + --listtasks --- print out a list of all tasks + --html=filename.html --- creates an HTML document of status + --help --- print this usage message''') + + if message is not None: + eprint(f'\n{str(message).rstrip()}\n') + sys.exit(-1) + + +def augment_SQLite3(filename): + connection = sqlite3.connect(filename) + c = connection.cursor() + # qinfo=q = c.execute("DROP TABLE IF EXISTS jobs_augment;") + c.execute("PRAGMA table_info(jobs_augment)").fetchall() + if any('qtime' in element for element in qinfo): + c.close() + return 'is_already_augmented' + else: + sql_create_augment_table = "CREATE TABLE jobs_augment AS SELECT * FROM jobs;" + c.execute(sql_create_augment_table) + c.execute("alter table jobs_augment add column qtime integer;") + c.execute("alter table jobs_augment add column cputime integer;") + c.execute("alter table jobs_augment add column runtime integer;") + c.execute("alter table jobs_augment add column slots integer;") + connection.commit() + + c.close() + return 'now_augmented' + + +def isSQLite3(filename): + try: + file = open(filename, 'rb') + header = file.read(100) + file.close() + if not header[:16] == b'SQLite format 3\x00': + return False + else: + return True + except Exception: + return False + + +def isRocotoWorkflow(filename): + try: + with open(filename, 'r') as input: + for line in input: + if 'DOCTYPE workflow' in line: + input.close() + return True + except IOError: + eprint(f"FATAL: Error while trying to read workflow {filename}") + return False + + return False + + +def get_arguments(): + short_opts = "w:d:f:" + long_opts = ["checkfile=", "workfolw=", "database=", "html=", "listtasks", "onlycheckpoint", "help", "perfmetrics="] + try: + opts, args = getopt.getopt(sys.argv[1:], short_opts, long_opts) + except getopt.GetoptError as err: + print(str(err)) + print() + usage('SCRIPT IS ABORTING DUE TO UNRECOGNIZED ARGUMENT') + + global save_checkfile_path + global use_performance_metrics + workflow_file = None + database_file = None + perfmetrics_on = None + for k, v in opts: + if k in ('-w', '--workflow'): + workflow_file = v + elif k in ('-d', '--database'): + database_file = v + elif k in ('-f', '--checkfile'): + save_checkfile_path = v + # elif k in ('--perfmetrics'): + # perfmetrics_on = v + elif k in ('--listtasks'): + global list_tasks + list_tasks = True + elif k in ('--onlycheckpoint'): + global only_check_point + only_check_point = True + elif k in ('--html'): + global html_output + global rzdm_path + global send_html_to_rzdm + send_html_to_rzdm = True + rzdm_path = v + html_output = True + elif k in ('--help'): + usage('') + else: + pass + # usage('OPTION NOT REGOGNIZED') + + if perfmetrics_on is None: + use_performance_metrics = False +# elif perfmetrics_on.lower() == 'true': +# use_performance_metrics = True + elif perfmetrics_on.lower() == 'false': + use_performance_metrics = False + elif perfmetrics_on is not None: + usage('perfmetrics must be either set to true or false (e.g. --perfmetrics=True') + + send_html_to_rzdm = False + if len(rzdm_path) != 0: + if ':' not in rzdm_path or '@' not in rzdm_path: + print('No user name or path found for sending html directory to server, no files will be sent to rzdm') + print(f'Creating html folder in: {rzdm_path}') + else: + send_html_to_rzdm = True + + if list_tasks and workflow_file is None: + usage('In order to list tasks you must supply the XML worflow-file') + + if only_check_point and (workflow_file is None or database_file is None or save_checkfile_path is None): + usage('To use the check point output you must specify the workflow, data base, and the specific name of the checkpoint file') + + if (not list_tasks) and (workflow_file is None or database_file is None): + usage('Booth database-file and workflow-file must be specified') + + if (not list_tasks) and (workflow_file is not None and database_file is not None): + # debug.write('database_file_agmented: '+database_file_agmented+'\n') + if not isSQLite3(database_file): + usage(f'{database_file} is not a SQLite3 database file') + if not isRocotoWorkflow(workflow_file): + usage(f'{workflow_file} is not an Rocoto XML file') + + # global use_multiprocessing + # if getsize(database_file) < 104857600: + # use_multiprocessing = True + # else: + # use_multiprocessing = True + + return (workflow_file, database_file) + + +def get_entity_values(workflow_file): + entity_values = collections.defaultdict(list) + with open(workflow_file, 'r+') as f: + for line in f: + split_line = line.split() + if ']>' in line: + break + if 'ENTITY' in line: + if 'SYSTEM' in line: + value = split_line[3] + else: + value = split_line[2] + entity_values[split_line[1]] = value[:-1].replace('"', '') + return entity_values + + +def timedelta_total_seconds(timedelta): + return ( + timedelta.microseconds + 0.0 + (timedelta.seconds + timedelta.days * 24 * 3600) * 10 ** 6) / 10 ** 6 + + +def get_aug_perf_values(username): + global html_ouput + global format_keys + try: + which_bjobs = syscall(['which', 'bjobs']) + except Exception: + return None + bjobs = collections.defaultdict(dict) + aug_perf = collections.defaultdict(dict) + bjobs_line = syscall([which_bjobs, '-a', '-o', format_string, '-u', username]) + if 'No job found' in bjobs_line: + return None + bjobs_lines = bjobs_line.split('\n') + for line_number, line in enumerate(bjobs_lines): + split_line = line.split(';') + if line_number == 0: + format_keys = split_line + continue + for i, value in enumerate(split_line): + if i == 0: + key = value + else: + if format_keys[i] in ('RUN_TIME', 'CPU_USED'): + value_list = value.split() + if len(value_list) > 1: + value = value_list[0] + bjobs[key][format_keys[i]] = value + sub_time_string = '' + year = str(datetime.now().year) + ' ' + sub_time = None + bstart_time = None + for jobid, keys in bjobs.items(): + # debug.write(jobid+'\n') + for key in keys: + # debug.write(' '+key+":"+bjobs[jobid][key]+'\n') + try: + int_key = int(bjobs[jobid][key].strip()) + str_key = str(int_key) + except Exception: + str_key = bjobs[jobid][key].strip() + + if key == 'SUBMIT_TIME': + sub_time_string = str_key + try: + sub_time = datetime.strptime(year + sub_time_string, '%Y %b %d %H:%M') + except Exception: + sub_time = None + continue + elif key == 'START_TIME': + bstart_time_string = str_key + try: + bstart_time = datetime.strptime(year + bstart_time_string, '%Y %b %d %H:%M') + except Exception: + bstart_time = None + continue + elif key == 'RUN_TIME': + aug_perf[jobid]['runtime'] = str_key + elif key == 'CPU_USED': + aug_perf[jobid]['cputime'] = str_key + elif key == 'SLOTS': + aug_perf[jobid]['slots'] = str_key + + if bstart_time_string == sub_time_string: + aug_perf[jobid]['qtime'] = '0' + elif sub_time is not None and bstart_time is None: + try: + aug_perf[jobid]['qtime'] = str(int((datetime.now() - sub_time).total_seconds())) + except AttributeError: + aug_perf[jobid]['qtime'] = str(int(timedelta_total_seconds(datetime.now() - sub_time))) + + elif sub_time is not None and bstart_time is not None: + try: + aug_perf[jobid]['qtime'] = str(int((bstart_time - sub_time).total_seconds())) + except AttributeError: + aug_perf[jobid]['qtime'] = str(int(timedelta_total_seconds(bstart_time - sub_time))) + else: + aug_perf[jobid]['qtime'] = '-' + + return aug_perf + + +def help_screen(screen): + max_row = 25 + box_cols = 60 + box = curses.newwin(max_row, box_cols, 5, 32) + box.box() + box.border(0) + box.addstr(0, 23, ' when done', curses.A_BOLD) + helpstr = ['heck : run rocotocheck on selected task(s)', + 'oot : run rocotoboot on selected task(s)', + 'ewind : run rocotorewind on selected task(s)', + 'un : run rocotorun on selected task(s)', + ' ', + '(->) Next Cycle own (or) Page-dwn to scroll', + '(<-) Previous Cycle own (or) Page-up to scroll ', + ' ', + ' + Arrow Up to selected multiple tasks', + ' + Arrow Down for using with rocoto utils', + 'Double-Click or to expand/collapse metatasks', + ' ', + ' Selects a task for list or opens meta-task list', + ' ', + ' When a meta-task list is open for selection:', + ' Double-Click (or) to select the begining', + ' of a range for selection and repeate to complete', + ' the desired selected list.', + '', + 'oads and renews status data (no rocotorun)', + 'inds the last cycle with a running task', + 'nloads and clears all previously seleted tasks', + 'makes a symlink of log file of highlited task'] + + for i in range(0, len(helpstr)): + box.addstr(1 + i, 2, helpstr[i]) + x = screen.getch() + while x != ord('q'): + x = screen.getch() + box.refresh() + + +def list_selector(screen, selected_strings, strings): + global screen_resized + global mlines + global mcols + global highlightText + global highlightSelectedText + global normalText + + def define_box(): + if len(strings) < mlines: + max_row = len(strings) + else: + max_row = mlines - 12 + max_mcols = max(18, len(max(strings, key=len))) + if max_mcols + 8 < mcols: + box_cols = max_mcols + 8 + else: + box_cols = mcols - 3 + box = curses.newwin(max_row + 6, box_cols, 4, 5) + box.box() + box.border(0) + + return box, max_row, box_cols + + strings_selected = selected_strings + string_ctr_selected = '' + + box, max_row, box_cols = define_box() + row_num = len(strings) + pages = int(ceil(row_num / max_row)) + position = 1 + page = 1 + for i in range(1, max_row + 1): + if row_num == 0: + box.addstr(1, 1, "There aren't strings", highlightText) + else: + print_string = ' ' + strings[i - 1] + ' ' + if (i == position): + box.addstr(i + 1, 2, print_string, highlightText) + else: + box.addstr(i + 1, 2, print_string, normalText) + if i == row_num: + break + + screen_resized = False + + range_selected = False + string_ctr_selected_prior = '' + + x = screen.getch() + while x != ord('q'): + + if screen_resized: + + screen_resized = False + curses.resizeterm(mlines, mcols) + screen.refresh() + box.clear() + box.erase() + + box, max_row, box_cols = define_box() + + box.border(0) + box.refresh() + + if x in (curses.KEY_SF, curses.KEY_DOWN): + if x == curses.KEY_SF: + string_selected = strings[position - 1] + if string_selected in strings_selected: + string_ctr_selected = '' + try: + if len(strings_selected) > 0: + strings_selected.remove(string_selected) + except ValueError: + pass + else: + strings_selected.append(string_selected) + if page == 1: + if position < i: + position = position + 1 + else: + if pages > 1: + page = page + 1 + position = 1 + (max_row * (page - 1)) + elif page == pages: + if position < row_num: + position = position + 1 + else: + if position < max_row + (max_row * (page - 1)): + position = position + 1 + else: + box.erase() + box.border(0) + page = page + 1 + position = 1 + (max_row * (page - 1)) + if x in (curses.KEY_SR, curses.KEY_UP): + if x == curses.KEY_SR: + string_selected = strings[position - 1] + if string_selected in strings_selected: + try: + if len(strings_selected) > 0: + strings_selected.remove(string_selected) + except ValueError: + pass + else: + strings_selected.append(string_selected) + if page == 1: + if position > 1: + position = position - 1 + else: + if position > (1 + (max_row * (page - 1))): + position = position - 1 + else: + box.erase() + box.border(0) + page = page - 1 + position = max_row + (max_row * (page - 1)) + + if x == curses.KEY_PPAGE: + box.erase() + box.border(0) + if page > 1: + page = page - 1 + position = 1 + (max_row * (page - 1)) + + if x == curses.KEY_NPAGE: + box.erase() + box.border(0) + # screen.refresh() + if page < pages: + page = page + 1 + position = (1 + (max_row * (page - 1))) + + if x in (curses.KEY_MOUSE, ord('s')): + mouse_id, mouse_x, mouse_y, mouse_z, button_state = (0, 0, 0, 0, 0) + index_prior_selected = 0 + if x == curses.KEY_MOUSE: + mouse_id, mouse_x, mouse_y, mouse_z, button_state = curses.getmouse() + box.erase() + box.border(0) + pos = mouse_y - 5 + if page == 1: + position = pos + else: + position = max_row * (page - 1) + pos + + if x == ord('s') or (button_state & curses.BUTTON1_DOUBLE_CLICKED): + string_ctr_selected = strings[position - 1] + if range_selected: + range_selected = False + string_ctr_selected = '' + if string_ctr_selected != string_ctr_selected_prior: + index_prior_selected = strings.index(string_ctr_selected_prior) + if position < index_prior_selected: + first = position - 1 + last = index_prior_selected + 1 + else: + first = index_prior_selected + last = position + for i in range(first, last): + if strings[i] in strings_selected: + strings_selected.remove(strings[i]) + else: + strings_selected.append(strings[i]) + string_ctr_selected_prior = '' + else: + range_selected = True + string_ctr_selected_prior = string_ctr_selected + + if x in (curses.KEY_ENTER, 10, 13) and row_num != 0: + box.border(0) + string_selected = strings[position - 1] + if string_ctr_selected_prior == string_selected: + string_ctr_selected_prior = '' + range_selected = False + if string_selected in strings_selected: + try: + if len(strings_selected) > 0: + strings_selected.remove(string_selected) + except ValueError: + pass + else: + strings_selected.append(string_selected) + + if x == ord('U'): + for each_sting in strings: + if each_sting in strings_selected: + if len(strings_selected) > 0: + strings_selected.remove(each_sting) + + for i in range(1 + (max_row * (page - 1)), max_row + 1 + (max_row * (page - 1))): + if row_num == 0: + box.addstr(1, 1, "There aren't strings", highlightText) + else: + if strings[i - 1] == string_ctr_selected_prior: + string_print = '* ' + strings[i - 1] + ' ' + else: + string_print = ' ' + strings[i - 1] + ' ' + + start_pos = i - (max_row * (page - 1)) + 1 + if (i + (max_row * (page - 1)) == position + (max_row * (page - 1))): + box.addstr(start_pos, 2, string_print, highlightText) + else: + box.addstr(start_pos, 2, string_print, normalText) + if strings[i - 1] in strings_selected: + box.addstr(start_pos, 2, string_print[:1]) + box.addstr(start_pos, 4, string_print[2:-1], highlightSelectedText | curses.A_DIM) + if i == row_num: + break + + box.addstr(max_row + 3, 2, 'Select with or') + box.addstr(max_row + 4, 2, ' + ') + box.addstr(0, 7, ' when done', curses.A_BOLD) + box.refresh() + x = screen.getch() + + return strings_selected + + +def get_rocoto_check(params, queue_check): + workflow_file, database_file, task, cycle, process = params + check = syscall([rocotocheck, '-v', "10", '-w', workflow_file, '-d', database_file, '-c', cycle, '-t', task]) + if check is None: + curses.endwin() + print(f'rocotocheck failed: {stat}') + sys.exit(-1) + queue_check.put(check) + + +def rocoto_boot(params): + workflow_file, database_file, cycle, metatask_list, task_list = params + stat = syscall([rocotoboot, '--workflow', workflow_file, '--database', database_file, '--cycles', cycle, '--tasks', task_list]) + if stat is None: + display_results('rocotoboot failed!!', '') + return stat + + +def rocoto_rewind(params): + workflow_file, database_file, cycle, process = params + stat = syscall([rocotorewind, '-w', workflow_file, '-d', database_file, '-c', cycle, process]) + if stat is None: + display_results('rocotorewind failed!!', '') + return stat + + +def rocoto_run(params): + workflow_file, database_file = params + stat = syscall([rocotorun, '-w', workflow_file, '-d', database_file]) + if stat is None: + curses.endwin() + print(f'rocotorun failed: {stat}') + sys.exit(-1) + return stat + + +def get_tasklist(workflow_file): + tasks_ordered = [] + metatask_list = collections.defaultdict(list) + try: + tree = ET.parse(workflow_file) + except ET.ParseError: + if not using_lxml: + curses.endwin() + print(""" + WARNING: Unable to parse the workflow, possibly because + lxml could not be imported and the workflow contains an + external entity (the stock XML parser can not handle + external entities). In order to read this workflow, + install lxml using pip: + + > pip install lxml --user + + """) + raise + else: + raise + + root = tree.getroot() + cycledef_group_cycles = collections.defaultdict(list) + if list_tasks: + curses.endwin() + print() + cycle_noname = 'default_cycle' + for child in root: + if child.tag == 'cycledef': + if len(child.attrib) != 0: + cycle_def_name = child.attrib['group'] + else: + cycle_def_name = cycle_noname + cycle_string = child.text.split() + + ucgs_is_cron = None + if PACKAGE.lower() == 'ugcs': + start_cycle = datetime.strptime(entity_values['SDATE'], '%Y%m%d%H%M') + end_cycle = datetime.strptime(entity_values['EDATE'], '%Y%m%d%H%M') + + # NOTE: this is for the special case when cycle for every month + inc_cycle = int(entity_values['INC_MONTHS']) + if inc_cycle == 0: + inc_cycle = string_to_timedelta(cycle_string[2]) + ucgs_is_cron = False + else: + ucgs_is_cron = True + else: + start_cycle = datetime.strptime(cycle_string[0], '%Y%m%d%H%M') + end_cycle = datetime.strptime(cycle_string[1], '%Y%m%d%H%M') + inc_cycle = string_to_timedelta(cycle_string[2]) + + while start_cycle <= end_cycle: + cycledef_group_cycles[cycle_def_name].append(start_cycle.strftime("%Y%m%d%H%M")) + if PACKAGE.lower() == 'ugcs' and ucgs_is_cron: + try: + start_cycle = start_cycle + relativedelta(months=+inc_cycle) + except AttributeError: + curses.endwin() + eprint(""" + Could not handle cycle increment measured in months because dateutil + could not be imported. In order to read this workflow, install dateutil + using pip: + + > pip install python-dateutil --user + + """) + sys.exit(-1) + else: + start_cycle = start_cycle + inc_cycle + if child.tag == 'task': + task_name = child.attrib['name'] + log_file = child.find('join').find('cyclestr').text.replace('@Y@m@d@H', 'CYCLE') + if 'cycledefs' in child.attrib: + task_cycledefs = child.attrib['cycledefs'] + else: + task_cycledefs = cycle_noname + if list_tasks: + print(f"{task_name}, {task_cycledefs}") + # dependancies = child.iter('dependency') + # for dependency in dependancies: + # for them in dependency.getchildren(): + # print(them.attrib) + tasks_ordered.append((task_name, task_cycledefs, log_file)) + elif child.tag == 'metatask': + all_metatasks_iterator = child.iter('metatask') + all_vars = dict() + all_tasks = [] + for i, metatasks in enumerate(all_metatasks_iterator): + metatask_name = 'NO_NAME' + try: + metatask_name = metatasks.attrib['name'] + except Exception: + pass + if list_tasks: + print(f"{' ' * i}, {metatask_name}") + + all_vars_list = metatasks.findall('var') + all_tasks_list = metatasks.findall('task') + for var in all_vars_list: + var_list_values = var.text.split() + all_vars[var.attrib['name']] = var_list_values + for task in all_tasks_list: + task_name = task.attrib['name'] + task_log = task.find('join').find('cyclestr').text.replace('@Y@m@d@H', 'CYCLE') + if 'cycledefs' in task.attrib: + task_cycledefs = task.attrib['cycledefs'] + else: + task_cycledefs = cycle_noname + all_tasks.append((task_name, task_cycledefs, task_log)) + add_task = [] + for task_name in all_tasks: + first_task_resolved = False + first_task_resolved_name = '' + add_task[:] = [] + add_task.append(task_name) + for name, vars in all_vars.items(): + replace_var = '#' + name + '#' + for each_task_name in add_task: + if replace_var in each_task_name[0]: + for var in vars: + new_task_name = each_task_name[0].replace(replace_var, var) + new_task_log = each_task_name[2].replace(replace_var, var) + add_task.append((new_task_name, each_task_name[1], new_task_log)) + for task in add_task: + if '#' not in task[0]: + if task[0] not in [j[0] for j in tasks_ordered]: + tasks_ordered.append(task) + if not first_task_resolved: + first_task_resolved = True + first_task_resolved_name = task[0] + if metatask_name == 'NO_NAME': + metatask_list[task[0]].append(task[0]) + else: + metatask_list[task[0]].append(metatask_name) + metatask_list[task[0]].append(task[0]) + else: + metatask_list[first_task_resolved_name].append(task[0]) + if list_tasks: + print(f'tasks: , {i}, {task[0]}, {task[1]}, LOG:, {task[2]}') + + # Default expantion of metatasks True = collapsed + # for metatask,metatasks in metatask_list.iteritems(): + # metatask_list[metatask].append(True) + + if list_tasks: + print() + for metatask, metatalist in metatask_list.items(): + print(f'metatasks: {metatask} : {metatalist}') + sys.exit(0) + + return tasks_ordered, metatask_list, cycledef_group_cycles + + +def get_rocoto_stat(params, queue_stat): + workflow_file, database_file, tasks_ordered, metatask_list, cycledef_group_cycles = params + + global database_file_agmented + if len(tasks_ordered) == 0 or len(metatask_list) == 0 or len(cycledef_group_cycles) == 0 or list_tasks: + tasks_ordered, metatask_list, cycledef_group_cycles = get_tasklist(workflow_file) + + if use_performance_metrics: + aug_perf = get_aug_perf_values(get_user) + else: + aug_perf = None + + info = collections.defaultdict(list) + cycles = set() + + connection = sqlite3.connect(database_file) + c = connection.cursor() + + if use_performance_metrics: + c.execute("DROP TABLE IF EXISTS jobs_augment_tmp;") + sql_create_augment_table = "CREATE TABLE jobs_augment_tmp AS SELECT * FROM jobs;" + c.execute(sql_create_augment_table) + c.execute("alter table jobs_augment_tmp add column qtime integer;") + c.execute("alter table jobs_augment_tmp add column cputime integer;") + c.execute("alter table jobs_augment_tmp add column runtime integer;") + c.execute("alter table jobs_augment_tmp add column slots integer;") + + sq_command = '' + column_updates = ('qtime', 'cputime', 'runtime', 'slots') + for column in column_updates: + sq_command += f"{column}=(SELECT jobs_augment.{column} FROM jobs_augment WHERE jobs_augment.id=jobs_augment_tmp.id)" + ',' + sq_command = ';'.join(sq_command.rsplit(',', 1)) + sq_command = 'UPDATE jobs_augment_tmp SET ' + sq_command + c.execute(sq_command) + + sq_command = 'UPDATE jobs_augment_tmp SET' + for perf_jobid, perf_values in aug_perf.items(): + for name, each_value in perf_values.items(): + c.execute(f"{sq_command} {name} = '{each_value}' WHERE jobs_augment_tmp.jobid = {perf_jobid}") + + c.execute("DROP TABLE IF EXISTS jobs_augment;") + c.execute("ALTER TABLE jobs_augment_tmp RENAME TO jobs_augment;") + + cycledifitions = [] + q = c.execute('SELECT id, groupname, cycledef FROM cycledef') + for row in q: + (theid, groupname, cycledef) = row + cycledifitions.append((theid, groupname, cycledef)) + + cycle_done_stat = dict() + q = c.execute('SELECT id,cycle,done FROM cycles') + for row in q: + (theid, cycle, done) = row + cycles.add(cycle) + cycle_done_stat[cycle] = done + + if use_performance_metrics: + q = c.execute('SELECT id,jobid,taskname,cycle,state,exit_status,duration,tries,qtime,cputime,runtime,slots FROM jobs_augment') + else: + q = c.execute('SELECT id,jobid,taskname,cycle,state,exit_status,duration,tries FROM jobs') + + q_get = [] + entered_jobids = [] + last_task_index = 0 + for row in q: + row = tuple('-' if x is None else x for x in row) + if use_performance_metrics: + (theid, jobid, taskname, cycle, state, exit_status, duration, tries, qtime, cputime, runtime, slots) = row + else: + (theid, jobid, taskname, cycle, state, exit_status, duration, tries, ) = row + if jobid in entered_jobids: + continue + else: + if taskname in tasks_ordered: + task_index = [x[0] for x in task_ordered].index(taskname) + last_task_index = task_index + else: + task_index = last_task_index + + if use_performance_metrics: + q_get.append((theid, jobid, task_index, taskname, cycle, state, exit_status, duration, tries, qtime, cputime, runtime, slots)) + else: + q_get.append((theid, jobid, task_index, taskname, cycle, state, exit_status, duration, tries)) + entered_jobids.append(jobid) + + q_get.sort(key=lambda x: x[2]) + + connection.commit() + c.close() + + for row in q_get: + if use_performance_metrics: + (theid, jobid, task_order, taskname, cycle, state, exit_status, duration, tries, qtime, cputime, runtime, slots) = row + else: + (theid, jobid, task_order, taskname, cycle, state, exit_status, duration, tries) = row + if jobid != '-': + if use_performance_metrics: + line = (f"{datetime.fromtimestamp(cycle).strftime('%Y%m%d%H%M')} " + f"{taskname} {str(jobid)} {str(state)} {str(exit_status)} " + f"{str(tries)} {str(duration).split('.')[0]} {str(slots)} " + f"{str(qtime)} {str(cputime).split('.')[0]} {str(runtime)}") + else: + line = (f"{datetime.fromtimestamp(cycle).strftime('%Y%m%d%H%M')} " + f"{taskname} {str(jobid)} {str(state)} {str(exit_status)} " + f"{str(tries)} {str(duration).split('.')[0]}") + info[cycle].append(line) + + for every_cycle in cycles: + if len(info[every_cycle]) == 0: + info[every_cycle].append('place holder') + + new_info = collections.defaultdict(list) + job_ids = [] + job_id = '' + for each_cycle, lines_in_cycle in info.items(): + for task in tasks_ordered: + skip_task = False + for each_line in lines_in_cycle: + if task[0] == each_line.split()[1]: + job_id = each_line.split()[2] + if job_id in job_ids: + break + cycle_string = datetime.fromtimestamp(each_cycle).strftime('%Y%m%d%H%M') + cycledefs = task[1].split(',') + if len(cycledefs) > 1: + for each_cycledef in cycledefs: + if cycle_string in cycledef_group_cycles[each_cycledef]: + new_info[each_cycle].append(each_line) + job_ids.append(job_id) + skip_task = True + break + elif cycle_string in cycledef_group_cycles[task[1]]: + new_info[each_cycle].append(each_line) + job_ids.append(job_id) + skip_task = True + break + if skip_task: + continue + line = datetime.fromtimestamp(each_cycle).strftime('%Y%m%d%H%M') + ' ' * 7 + task[0] + ' - - - - -' + cycle_string = datetime.fromtimestamp(each_cycle).strftime('%Y%m%d%H%M') + cycledefs = task[1].split(',') + if len(cycledefs) > 1: + for each_cycledef in cycledefs: + if cycle_string in cycledef_group_cycles[each_cycledef]: + new_info[each_cycle].append(line) + skip_task = True + break + elif cycle_string in cycledef_group_cycles[task[1]]: + new_info[each_cycle].append(line) + skip_task = True + if skip_task: + continue + + rocoto_stat = [] + for cycle in sorted(cycles): + if len(new_info[cycle]) != 0: + rocoto_stat.append(new_info[cycle]) + + if save_checkfile_path is not None: + stat_update_time = str(datetime.now()).rsplit(':', 1)[0] + with open(save_checkfile_path, 'w') as savefile: + rocoto_data_and_time = (rocoto_stat, tasks_ordered, metatask_list, cycledef_group_cycles, stat_update_time) + pickle.dump(rocoto_data_and_time, savefile) + if only_check_point: + sys.exit(0) + + if use_multiprocessing: + queue_stat.put((rocoto_stat, tasks_ordered, metatask_list, cycledef_group_cycles)) + else: + return (rocoto_stat, tasks_ordered, metatask_list, cycledef_group_cycles) + + +def display_results(results, screen, params): + results_lines = results.split('\n') + num_lines, num_columns = (len(results_lines) + 3, len(max(results_lines, key=len)) + 1) + pad_pos = 0 + global mlines + global mcols + while True: + screen.clear() + screen.refresh() + results_pad = curses.newpad(num_lines, num_columns) + for results_line in results_lines: + results_pad.addstr(results_line + '\n') + results_pad.refresh(pad_pos, 0, 0, 0, mlines - 3, mcols - 1) + extra_1 = extra_2 = '' + if pad_pos < num_lines - mlines - 2 or pad_pos > 0: + extra_1 = '/ Scroll' + if len(params) != 0: + extra_2 = 'ave results to a file' + screen.addstr(mlines - 1, 0, f' Return {extra_1} {extra_2}', curses.A_BOLD) + event = screen.getch() + if event == curses.KEY_RESIZE: + screen.refresh() + elif event in (curses.KEY_PPAGE, ord('u')): + if pad_pos < num_lines - mlines - 2: + pad_pos += 1 + elif event in (curses.KEY_NPAGE, ord('d')): + if pad_pos != 0: + pad_pos -= 1 + elif event == curses.KEY_ENTER or event == 10: + screen.clear() + break + elif event == ord('s'): + strg = [] + strg.append(PSLOT) + for i in range(2, 5): + try: + if ' ' not in basename(params[i]): + strg.append(basename(params[i]).split('.')[0]) + except Exception: + pass + if len(strg) == 0: + strg = 'rocotoviewer_outout_file' + save_results_file = '_'.join(strg) + '.txt' + inc_int = 0 + while os.path.isfile(save_results_file): + if f'({inc_int:d})' in save_results_file: + save_results_file = save_results_file.replace(f'({inc_int:d})', f'({(inc_int + 1):d})') + inc_int += 1 + else: + save_results_file = f"{basename(save_results_file.split('.')[0])}({inc_int:d}).txt" + out_file = open(save_results_file, 'w') + out_file.write(results) + out_file.close() + screen.addstr(mlines - 1, 0, f'Saved file {save_results_file}' + ' ' * 10) + screen.refresh() + std_time.sleep(0.5) + + return + + +def main(screen): + global mlines + global mcols + global default_column_length + global use_multiprocessing + global highlightText + global highlightSelectedText + global normalText + global PSLOT + global PACKAGE + global entity_values + + event = 10 + + if not sys.stdin.isatty(): + if screen != 'dummy': + print('There seems to be a problem with the curses init') + sys.exit(-1) + else: + mlines = 100 + else: + mlines, mcols = screen.getmaxyx() + + # global debug + # PWD = os.getcwd() + # debug = open(PWD+'/debug.log','a',0) + + (workflow_file, database_file) = get_arguments() + + if html_output: + if sys.stdin.isatty(): + curses.endwin() + print('\nPreparing to write out an html folder') + use_multiprocessing = False + + # header_string = ' '*18+'CYCLE'+' '*17+'TASK'+' '*39+'JOBID'+' '*6+'STATE'+' '*9+'EXIT'+' '*2+'TRIES'+' '*2+'DURATION' + header_string = ' ' * 7 + 'CYCLE' + ' ' * (int(job_name_length_max / 2) + 3) + 'TASK' + ' ' * (int(job_name_length_max / 2) + 3) + \ + 'JOBID' + ' ' * 6 + 'STATE' + ' ' * 9 + 'EXIT' + ' ' * 1 + 'TRIES' + ' ' * 1 + 'DURATION' + header_string_under = '=== (updated:tttttttttttttttt) =================== PSLOT: pslot ' + '=' * 44 + + global use_performance_metrics + if use_performance_metrics: + augment_SQLite3(database_file) + header_string += ' SLOTS QTIME CPU RUN\n' + header_string_under += '=============================\n' + header_string += header_string_under + default_column_length = default_column_length_master + else: + header_string = header_string + '\n' + header_string_under + '\n' + default_column_length = default_column_length_master + + html_output_dir = None + entity_values = get_entity_values(workflow_file) + workflow_name = 'gfs_workflow' + if 'ROTDIR' in entity_values: + ROTDIR = entity_values['ROTDIR'] + else: + ROTDIR = 'no_rotdir' + if 'PSLOT' in entity_values: + PSLOT = entity_values['PSLOT'] + else: + PSLOT = 'no_name' + if 'PACKAGE' in entity_values: + PACKAGE = entity_values['PACKAGE'] + if PACKAGE == 'ugcs': + workflow_name = 'ugcs_workflow' + if PACKAGE == 'gfs': + workflow_name = 'gfs_workflow' + else: + PACKAGE = 'none' + if 'EXPDIR' in entity_values: + EXPDIR = entity_values['EXPDIR'] + else: + EXPDIR = '.' + + if html_output: + html_ptr = None + if not send_html_to_rzdm and len(rzdm_path) != 0: + html_output_dir = convert_to_posix(rzdm_path) + else: + html_output_dir = convert_to_posix(f'{workflow_name}/pr{PSLOT}') + print(f'writing html to directory: {html_output_dir}') + html_output_file = convert_to_posix(html_output_dir + '/index.html') + html_header_line = '\n' + if use_performance_metrics: + html_header_line = html_header_line + '' + '\n' + else: + html_header_line = html_header_line + '\n' + print(f'Generating html folder html: {html_output_file} ...') + stat = syscall(['rm', '-Rf', html_output_dir]) + os.makedirs(html_output_dir) + html_ptr = open(html_output_file, 'w') + html_ptr.write(ccs_html) + stat_update_time = str(datetime.now()).rsplit(':', 1)[0] + html_discribe_line = f'\n
CYCLETASKJOBIDSTATEEXITTRIESDURATIONSLOTSQTIMECPURUN
\n\n\n' + html_discribe_line += f'' + html_discribe_line += f'\n\n
' + html_discribe_line += f'ExpandRefreshed: {stat_update_time}PSLOT: {PSLOT}
ROTDIR: {workflow_name}Turn Around Times
\n
\n' + html_discribe_line += html_header_line + html_ptr.write(html_discribe_line) + else: + curses.start_color() + curses.use_default_colors() + screen.refresh() + curses.mousemask(1) + curses.noecho() + for i in range(0, curses.COLORS): + curses.init_pair(i + 1, i, curses.COLOR_BLACK) + if i == 4: + curses.init_pair(i + 1, i, curses.COLOR_WHITE) + curses.init_pair(8, 0, -1) + + curses.mousemask(curses.ALL_MOUSE_EVENTS) + # curses.init_pair(6,curses.COLOR_BLACK, curses.COLOR_CYAN) + highlightText = curses.A_STANDOUT + highlightSelectedText = curses.color_pair(5) + normalText = curses.A_NORMAL + + os.environ['TZ'] = 'UTC' + std_time.tzset() + + # stdout_buff = StringIO() + # stderr_buff = StringIO() + # sys.stdout = stdout_buff + # sys.stderr = stderr_buff + + tasks_ordered = [] + metatask_list = collections.defaultdict(list) + cycledef_group_cycles = collections.defaultdict(list) + + queue_stat = Queue() + queue_check = Queue() + + if only_check_point: + curses.endwin() + sys.stdout = os.fdopen(0, 'w', 0) + print('Creating check point file ...') + params = (workflow_file, database_file, tasks_ordered, metatask_list, cycledef_group_cycles) + get_rocoto_stat(params, queue_stat) + + stat_update_time = '' + params_check = '' + header = None + + process_get_rocoto_stat = None + process_get_rocoto_check = None + + cycle = 0 + if html_output: + mlines = 100 + mcols = 125 + if not html_output and mcols < default_column_length: + curses.endwin() + print(f'\nYour terminal is only {mcols} characters must be at least {default_column_length} to display workflow status') + sys.exit(-1) + if not html_output: + screen.refresh() + rocoto_stat_params = '' + step = 0.0 + i = 0 + dots = ('. ', '.. ', '... ', '.... ', '.....', ' ....', ' ...', ' .') + dot_stat = 0 + dot_check = 0 + current_time = time() + + if save_checkfile_path is not None and os.path.isfile(save_checkfile_path): + with open(save_checkfile_path) as savefile: + rocoto_data_and_time = pickle.load(savefile) + rocoto_stat, tasks_ordered, metatask_list, cycledef_group_cycles, stat_update_time = rocoto_data_and_time + start_time = time() - stat_read_time_delay - 10 + header = header_string + header = header.replace('t' * 16, stat_update_time) + if PACKAGE.lower() == 'ugcs': + header = header.replace(' PSLOT: pslot ', '==== UGCS ====') + elif PSLOT.lower() == 'no_name': + header = header.replace(' PSLOT: pslot ', '==============') + reduce_header_size = 0 + else: + header = header.replace(' PSLOT: pslot ', '==== UGCS ====') + reduce_header_size = 0 + if reduce_header_size > 0: + header = header[:-reduce_header_size] + header = header[reduce_header_size:] + if list_tasks: + params = (workflow_file, database_file, tasks_ordered, metatask_list, cycledef_group_cycles) + get_rocoto_stat(params, Queue()) + curses.endwin() + sys.stdout = os.fdopen(0, 'w', 0) + sys.exit(0) + + if save_checkfile_path is None or (save_checkfile_path is not None and not os.path.isfile(save_checkfile_path)): + params = (workflow_file, database_file, tasks_ordered, metatask_list, cycledef_group_cycles) + if use_multiprocessing: + process_get_rocoto_stat = Process(target=get_rocoto_stat, args=[params, queue_stat]) + process_get_rocoto_stat.start() + screen.addstr(mlines - 2, 0, 'No checkpoint file, must get rocoto stats please wait', curses.A_BOLD) + screen.addstr(mlines - 1, 0, 'Running rocotostat ', curses.A_BOLD) + else: + (rocoto_stat, tasks_ordered, metatask_list, cycledef_group_cycles) = get_rocoto_stat(params, Queue()) + header = header_string + stat_update_time = str(datetime.now()).rsplit(':', 1)[0] + header = header.replace('t' * 16, stat_update_time) + if PSLOT.lower() == 'no_name': + header = header.replace(' PSLOT: pslot ', '==============') + reduce_header_size = 0 + elif PACKAGE.lower() == 'ugcs': + header = header.replace(' PSLOT: pslot ', '==== UGCS ====') + reduce_header_size = 0 + else: + header = header.replace('pslot', PSLOT) + reduce_header_size = int((len(PSLOT) - len('PSLOT')) / 2) + if reduce_header_size > 0: + header = header[:-reduce_header_size] + header = header[reduce_header_size:] + + while use_multiprocessing: + if mcols < default_column_length: + curses.endwin() + print() + print(f'Your terminal is only {mcols} characters must be at least {default_column_length} to display workflow status') + sys.exit(-1) + step += 0.001 + if step > 100: + step = 0.0 + i = (0 if i == len(dots) - 1 else i + 1) + curses.curs_set(0) + screen.addstr(mlines - 1, 19, dots[i], curses.A_BOLD) + screen.refresh() + try: + rocoto_stat_params = queue_stat.get_nowait() + except queue.Empty: + if process_get_rocoto_stat.is_alive(): + pass + else: + sys.exit(1) + + if len(rocoto_stat_params) != 0: + (rocoto_stat, tasks_ordered, metatask_list, cycledef_group_cycles) = rocoto_stat_params + if use_multiprocessing: + process_get_rocoto_stat.join() + process_get_rocoto_stat.terminate() + stat_update_time = str(datetime.now()).rsplit(':', 1)[0] + header = header_string + header = header.replace('t' * 16, stat_update_time) + if PSLOT.lower() == 'no_name': + header = header.replace(' PSLOT: pslot ', '==============') + reduce_header_size = 0 + elif PACKAGE.lower() == 'ugcs': + header = header.replace(' PSLOT: pslot ', '==== UGCS ====') + reduce_header_size = 0 + else: + header = header.replace('pslot', PSLOT) + reduce_header_size = int((len(PSLOT) - len('PSLOT')) / 2) + if reduce_header_size > 0: + header = header[:-reduce_header_size] + header = header[reduce_header_size:] + break + + start_time = time() + + num_cycle = len(rocoto_stat) + + pad_pos = 0 + update_pad = True + task = 0 + execute_task = '' + execute_cycle = '' + loading_stat = False + loading_check = False + find_next = 0 + rocoto_check = '' + break_twice = False + search_string = '' + + meta_tasks = [] + metatasks_state_cycle = [] + metatasks_state_string_cycle = [] + + metatask_name = collections.defaultdict(list) + for each_metatask in metatask_list: + metatask_name[each_metatask] = metatask_list[each_metatask][0] + del metatask_list[each_metatask][0] + + curses.endwin() + tasks_in_cycle = [] + for each_cycle in rocoto_stat: + list_of_tasks_per_cycle = [] + meta_tasks_in_cycle = [] + for each_line in each_cycle: + line_has_metatask = False + for check_metatask, check_metatask_list in metatask_list.items(): + if check_metatask in each_line.split(): + meta_tasks_in_cycle.append((check_metatask, True, check_metatask_list)) + line_has_metatask = True + continue + else: + for every_meta_task in check_metatask_list: + if every_meta_task != check_metatask: + for item in each_line.split(): + if every_meta_task == item: + meta_tasks_in_cycle.append((every_meta_task, False, check_metatask)) + line_has_metatask = True + if not line_has_metatask: + if '---' not in each_line.split()[1]: + list_of_tasks_per_cycle.append(each_line.split()[1]) + meta_tasks_in_cycle.append(('False', False, 'False')) + + tasks_in_cycle.append(list_of_tasks_per_cycle) + + meta_tasks_state = dict() + meta_tasks_state_string = dict() + for check_metatask, check_metatask_list in metatask_list.items(): + meta_tasks_state[check_metatask] = True + meta_tasks_state_string[check_metatask] = '' + meta_tasks_state['False'] = False + + meta_tasks.append(meta_tasks_in_cycle) + metatasks_state_cycle.append(meta_tasks_state) + metatasks_state_string_cycle.append(meta_tasks_state_string) + + update_metatask_state_status_message = True + ''' +# This lists each metatask and its elements +# for the first cycle for code edification + curses.endwin() + print + print 'Number of Metatasks:',len(meta_tasks[0]) + for each_metatask in meta_tasks[0]: + if each_metatask[1]: + print metatask_name[each_metatask[2][0]] + for task in each_metatask[2]: + print ' ',task + sys.exit(0) + ''' + + metatask_list_per_cycle = [] + metatask_list_by_name = collections.defaultdict(dict) + for each_cycle in meta_tasks: + list_of_metatasks_in_cycle = [] + for each_metatask in each_cycle: + if each_metatask[1]: + tasks_in_metatask_list = [] + for task in each_metatask[2]: + tasks_in_metatask_list.append(task) + metatask_list_by_name[metatask_name[each_metatask[2][0]]] = tasks_in_metatask_list + list_of_metatasks_in_cycle.append(metatask_name[each_metatask[2][0]]) + metatask_list_per_cycle.append(list_of_metatasks_in_cycle) + + found = False + found_end_cycle = 0 + for find_cycle in range(0, len(rocoto_stat)): + for lines in rocoto_stat[find_cycle]: + if not found and any(x in lines for x in ['RUNNING', 'QUEUED']): + found = True + found_cycle = find_cycle + if found and not any(x in lines for x in ['RUNNING', 'QUEUED']): + break + + get_number_of_stats = 0 + if found: + cycle = found_cycle + else: + get_number_of_stats = 2 + if len(rocoto_stat) > 2: + cycle = len(rocoto_stat) - 2 + else: + cycle = 0 + + if html_output: + if cycle > 2: + cycle -= 2 + + html_output_firstpass = True + while True: + num_columns = default_column_length + mlines, mcols = 90, 125 + if header is None: + header = ' ' + if update_pad is True: + num_lines = len(rocoto_stat[cycle]) + line_correction = 0 + for count_meta_tasks in meta_tasks[cycle]: + if count_meta_tasks[1] and metatasks_state_cycle[cycle][count_meta_tasks[0]]: + line_correction += len(count_meta_tasks[2]) - 1 + num_lines -= line_correction + update_pad = False + line_number = -1 + colapsed_metatask = False + for line_num, line in enumerate(rocoto_stat[cycle]): + columns = line.split() + count_columns = line.split(' ') + spaces = [] + for c, sub_group in groupby(count_columns): + if c != '': + continue + spaces.append(' ' * len(list(sub_group))) + spaces.append('') + text_color = {'SUCCEEDED': 3, 'QUEUED': 4, 'DEAD': 2, 'FAILED': 2, 'RUNNING': 6} + skip_task = False + + if not meta_tasks[cycle][line_num][1] and metatasks_state_cycle[cycle][meta_tasks[cycle][line_num][2]]: + skip_task = True + else: + line_number += 1 + html_line = '' + if use_performance_metrics and len(columns) == 7: + for i in range(0, 4): + columns.append('-') + for i, column in enumerate(columns): + if skip_task: + continue + if not use_performance_metrics and i > 7: + continue + execute_cycle = columns[0] + if i == 0: + if meta_tasks[cycle][line_num][1]: + if metatasks_state_cycle[cycle][columns[1]]: + colapsed_metatask = True + if update_metatask_state_status_message or len(metatasks_state_string_cycle[cycle][columns[1]]) == 0: + get_state_list = [] + total_numer_of_tasks = len(meta_tasks[cycle][line_num][2]) + for check_metatask_line in rocoto_stat[cycle]: + split_check_metatask_line = check_metatask_line.split() + for each_metatask in meta_tasks[cycle][line_num][2]: + if each_metatask == split_check_metatask_line[1]: + get_state_list.append(split_check_metatask_line[3]) + metatask_state = columns[3] + if 'SUCCEEDED' in get_state_list: + metatask_state = f"{get_state_list.count('SUCCEEDED'):d}/{total_numer_of_tasks:d} SUCCEEDED" + if 'QUEUED' in get_state_list: + metatask_state = f"{get_state_list.count('QUEUED'):d}/{total_numer_of_tasks:d} QUEUED" + if 'RUNNING' in get_state_list: + metatask_state = f"{get_state_list.count('RUNNING'):d}/{total_numer_of_tasks:d} RUNNING" + if 'DEAD' in get_state_list: + metatask_state = f"{get_state_list.count('DEAD'):d}/{total_numer_of_tasks:d} DEAD" + metatasks_state_string_cycle[cycle][columns[1]] = metatask_state + html_line += '' + column + '' + elif i == 1: + save_column = column + if colapsed_metatask: + colapsed_metatask = False + column = metatask_name[column] + display_column = (column if len(column) < 40 else column[:40]) + if line_number == task: + execute_task = save_column + if html_output: + log_file = '' + for find_task in tasks_ordered: + if find_task[0] == column: + log_file = find_task[2].replace('CYCLE', execute_cycle[:-2]) + if os.path.isfile(convert_to_posix(log_file)): + shutil.copy(log_file, html_output_dir) + log_file_base = os.path.basename(log_file) + html_line += f'{display_column}' + else: + html_line += f'{display_column}' + elif i == 2: + if len(column) > 7: + column = column[:7] + html_line += f'{column}' + elif i == 3: + if meta_tasks[cycle][line_num][1] \ + and len(metatasks_state_string_cycle[cycle][columns[1]].split()) != 1 \ + and metatasks_state_cycle[cycle][columns[1]]: + column = metatasks_state_string_cycle[cycle][columns[1]] + if len(column) > 15: + if column.split()[1] == 'SUCCEEDED': + html_line += f'{column[:15]}' + elif column.split()[1] == 'QUEUED': + html_line += f'{column[:15]}' + elif column.split()[1] in ('DEAD', 'FAILED'): + html_line += f'{column[:15]}' + elif column.split()[1] == 'RUNNING': + html_line += f'{column[:15]}' + else: + html_line += f'{column[:15]}' + else: + if column.split()[1] == 'SUCCEEDED': + html_line += f'{column}' + elif column.split()[1] == 'QUEUED': + html_line += f'{column}' + elif column.split()[1] in ('DEAD', 'FAILED'): + html_line += f'{column}' + elif column.split()[1] == 'RUNNING': + html_line += f'{column}' + else: + html_line += f'{column}' + elif column in text_color: + if column == 'SUCCEEDED': + html_line += f'{column}' + elif column == 'QUEUED': + html_line += f'{column}' + elif column in ('DEAD', 'FAILED'): + html_line += f'{column}' + elif column == 'RUNNING': + html_line += f'{column}' + else: + html_line += f'{column}' + else: + html_line += f'{column}' + else: + if len(column) < 6: + html_line += f'{column}' + else: + html_line += f'{column}' + if not skip_task: + html_line += '\n' + html_ptr.write(html_line) + + update_metatask_state_status_message = False + + found_still_running = False + cycle += 1 + update_pad = True + for find_cycle in range(cycle, len(rocoto_stat)): + for lines in rocoto_stat[find_cycle]: + if 'RUNNING' in lines: + found_still_running = True + break + break + if get_number_of_stats >= 0: + found_still_running = True + if cycle < len(rocoto_stat) or found_still_running: + html_line = '\n' + html_line += '\n
\n\n' + html_line += html_header_line + html_ptr.write(html_line) + get_number_of_stats -= 1 + else: + html_line = '\n' + html_line += '\n' + html_line += '\n' + html_ptr.write(html_line) + html_ptr.close() + if html_output_firstpass: + for meta_cycle in range(0, len(rocoto_stat)): + for execute_task in metatasks_state_cycle[meta_cycle]: + metatasks_state_cycle[meta_cycle][execute_task] = False + html_output_file = convert_to_posix(html_output_dir + '/index_exp.html') + html_ptr = open(html_output_file, 'w') + html_ptr.write(ccs_html) + stat_update_time = str(datetime.now()).rsplit(':', 1)[0] + html_discribe_line = f'\n\n\n\n' + html_discribe_line += f'\n\n
' + html_discribe_line += f'CollapseRefreshed: {stat_update_time}PSLOT: {PSLOT}
ROTDIR: {workflow_name}' + html_discribe_line += f'Turn Around Times
\n
\n' + html_discribe_line += html_header_line + html_ptr.write(html_discribe_line) + html_output_firstpass = False + # cycle = html_start_cycle + if not html_output_firstpass: + if send_html_to_rzdm: + print('sending html files to rzdm using rsync ...') + stat = syscall(['rsync', '-avzr', '--delete', html_output_dir, rzdm_path]) + if stat is None: + print(f'warning rsync to {html_output_dir} failed') + sys.exit(-1) + else: + print('done') + sys.exit(0) + else: + # Main Curses Screen Loop + # Write to curses screen when HTML is not outputted + highlight_CYCLE = False + highlight_WORKFLOW = False + get_execute_task_track = False + screen.clear() + global screen_resized + selected_tasks = collections.defaultdict(list) + selected_meta_tasks = collections.defaultdict(list) + execute_metatask = None + colapsed_metatask = None + task = 0 + while True: + if not os.path.isfile(workflow_file) or not os.path.isfile(database_file): + curses.endwin() + print('\n\nrocoto_viwer quit because the Rocoto database or XML file used by this session when missing') + sys.exit(-1) + job_id = None + curses.noecho() + num_columns = default_column_length + if header is None: + header = ' ' + if highlight_WORKFLOW: + header_split = header.split('\n') + screen.addstr(0, 0, header_split[0] + '\n') + screen.addstr(header_split[1], curses.A_STANDOUT) + else: + screen.addstr(0, 0, header) + if update_pad is True: + num_lines = len(rocoto_stat[cycle]) + line_correction = 0 + for count_meta_tasks in meta_tasks[cycle]: + if count_meta_tasks[1] and metatasks_state_cycle[cycle][count_meta_tasks[0]]: + line_correction += len(count_meta_tasks[2]) - 1 + num_lines -= line_correction + update_pad = False + if mlines > num_lines: + pad = curses.newpad(mlines, num_columns) + else: + pad = curses.newpad(num_lines + 1, num_columns) + line_number = -1 + for line_num, line in enumerate(rocoto_stat[cycle]): + # debug.write('DISPLAY LINE: '+line+'\n') + colapsed_metatask = False + columns = line.split() + count_columns = line.split(' ') + spaces = [] + for c, sub_group in groupby(count_columns): + if c != '': + continue + spaces.append(' ' * len(list(sub_group))) + spaces.append('') + text_color = {'SUCCEEDED': 3, 'QUEUED': 4, 'DEAD': 2, 'FAILED': 2, 'RUNNING': 6} + skip_task = False + + if not meta_tasks[cycle][line_num][1] and metatasks_state_cycle[cycle][meta_tasks[cycle][line_num][2]]: + skip_task = True + else: + line_number += 1 + if use_performance_metrics and len(columns) == 7: + for i in range(0, 4): + columns.append('-') + red_override = False + for i, column in enumerate(columns): + if skip_task: + continue + if not use_performance_metrics and i > 7: + continue + execute_cycle = columns[0] + if i == 0: + if meta_tasks[cycle][line_num][1]: + if metatasks_state_cycle[cycle][columns[1]]: + if highlight_CYCLE: + pad.addstr(column, curses.A_STANDOUT) + else: + pad.addstr(column) + pad.addstr(' < ') + colapsed_metatask = True + if update_metatask_state_status_message or len(metatasks_state_string_cycle[cycle][columns[1]]) == 0: + get_state_list = [] + total_numer_of_tasks = len(meta_tasks[cycle][line_num][2]) + for check_metatask_line in rocoto_stat[cycle]: + split_check_metatask_line = check_metatask_line.split() + for each_metatask in meta_tasks[cycle][line_num][2]: + if each_metatask == split_check_metatask_line[1]: + get_state_list.append(split_check_metatask_line[3]) + red_override = False + metatask_state = columns[3] + if 'SUCCEEDED' in get_state_list: + metatask_state = f"{get_state_list.count('SUCCEEDED'):d}/{total_numer_of_tasks:d} SUCCEEDED" + if 'QUEUED' in get_state_list: + metatask_state = f"{get_state_list.count('QUEUED'):d}/{total_numer_of_tasks:d} QUEUED" + if 'RUNNING' in get_state_list: + metatask_state = f"{get_state_list.count('RUNNING'):d}/{total_numer_of_tasks:d} RUNNING" + if 'FAILED' in get_state_list: + metatask_state = f"{get_state_list.count('FAILED'):d}/{total_numer_of_tasks:d} FAILED" + red_override = True + if 'DEAD' in get_state_list: + red_override = True + metatask_state = f"{get_state_list.count('DEAD'):d}/{total_numer_of_tasks:d} DEAD" + metatasks_state_string_cycle[cycle][columns[1]] = metatask_state + else: + if highlight_CYCLE: + pad.addstr(column, curses.A_STANDOUT) + else: + pad.addstr(column) + pad.addstr(' > ') + else: + if highlight_CYCLE: + pad.addstr(column, curses.A_STANDOUT) + pad.addstr(' ') + else: + pad.addstr(column + ' ') + elif i == 1: + job_name_length = 50 + save_column = column + if colapsed_metatask: + column = metatask_name[column] + display_column = (column if len(column) < job_name_length else column[:job_name_length]) + if line_number == task and not highlight_CYCLE and not highlight_WORKFLOW: + pad.addstr(display_column, curses.A_STANDOUT) + execute_task_track = save_column + if colapsed_metatask: + execute_metatask_check = True + execute_metatask = column + metatask_list_of_selected_metatask = meta_tasks[cycle][line_num][2] + else: + execute_metatask_check = False + execute_metatask = None + metatask_list_of_selected_metatask = None + execute_task = column + else: + # if column in metatask_list_by_name[metatask_name[column]]: + # display_column = ' '+display_column + if column in selected_tasks[execute_cycle]: + pad.addstr(display_column, highlightSelectedText) + elif column in selected_meta_tasks[execute_cycle]: + pad.addstr(display_column, highlightSelectedText) + else: + pad.addstr(display_column) + pad.addstr(' ' * (job_name_length + 3 - len(display_column))) + elif i == 2: + job_id = column.strip() + if len(job_id) > 9: + job_id = job_id[:9] + if job_id == '-': + pad.addstr(job_id + ' ' * 9) + else: + pad.addstr(job_id + ' ' * (11 - len(job_id))) + elif i == 3: + if meta_tasks[cycle][line_num][1] \ + and len(metatasks_state_string_cycle[cycle][columns[1]].split()) != 1 \ + and metatasks_state_cycle[cycle][columns[1]]: + column = metatasks_state_string_cycle[cycle][columns[1]] + if red_override: + the_text_color = 2 + else: + the_text_color = text_color[column.split()[1]] + if len(column) >= 19: + pad.addstr(column[:19], curses.color_pair(the_text_color) | curses.A_STANDOUT) + column = column[:19] + else: + pad.addstr(column, curses.color_pair(the_text_color) | curses.A_STANDOUT) + elif column in text_color: + pad.addstr(column, curses.color_pair(text_color[column]) | curses.A_STANDOUT) + else: + pad.addstr(column) + pad.addstr(' ' * (17 - len(column)), curses.color_pair(8)) + elif i in (4, 5, 6, 7, 8, 9, 10): + if len(column) < 5: + pad.addstr(column + ' ' * (5 - len(column))) + else: + pad.addstr(column.strip() + ' ') + + if not skip_task: + pad.addstr('\n') + + update_metatask_state_status_message = False + pad.refresh(pad_pos, 0, 2, 0, mlines - 4, mcols) + + entire_workflow = 'Hit to open cycle based information page (implementation pending)' + entire_cycle = '********* The ENTIRE CYCLE has been selected for an action **********' + + try: + if highlight_WORKFLOW: + screen.addstr(mlines - 2, 0, entire_workflow, curses.A_BOLD) + else: + screen.addstr(mlines - 2, 0, ' ' * len(entire_workflow)) + if highlight_CYCLE: + screen.addstr(mlines - 2, 0, entire_cycle, curses.A_BOLD) + elif not highlight_WORKFLOW: + screen.addstr(mlines - 2, 0, ' ' * len(entire_cycle)) + if pad_pos < num_lines - mlines + 4 or pad_pos > 0: + screen.addstr(mlines - 1, 0, ' ' * len(bottom_message_scroll)) + screen.addstr(mlines - 1, 0, bottom_message_scroll, curses.A_BOLD) + else: + screen.addstr(mlines - 1, 0, ' ' * len(bottom_message_scroll)) + screen.addstr(mlines - 1, 0, bottom_message, curses.A_BOLD) + except Exception: + std_time.sleep(1) + pass + + if num_columns > mcols: + curses.endwin() + print(f'\nYour terminal is only {mcols} characters must be at least {num_columns} to display workflow status') + sys.exit(-1) + + if loading_stat: + dot_stat = (0 if dot_stat == len(dots) - 1 else dot_stat + 1) + screen.addstr(mlines - 2, 0, 'Running rocotostat ') + screen.addstr(mlines - 2, 20, dots[dot_stat]) + try: + rocoto_stat_tmp = queue_stat.get_nowait() + except Exception: + rocoto_stat_tmp = '' + if len(rocoto_stat_tmp) != 0: + (rocoto_stat, tasks_ordered, metatask_list, cycledef_group_cycles) = rocoto_stat_tmp + process_get_rocoto_stat.join() + process_get_rocoto_stat.terminate() + update_pad = True + loading_stat = False + rocoto_stat_tmp = '' + stat_update_time = str(datetime.now()).rsplit(':', 1)[0] + header = header_string + header = header.replace('t' * 16, stat_update_time) + header = header.replace('pslot', PSLOT) + reduce_header_size = int((len(PSLOT) - len('PSLOT')) / 2) + if reduce_header_size > 0: + header = header[:-reduce_header_size] + header = header[reduce_header_size:] + screen.addstr(mlines - 2, 0, f'Updated new rocotostatus: {stat_update_time}' + ' ' * 48) + screen.refresh() + std_time.sleep(0.5) + screen.addstr(mlines - 2, 0, ' ' * 100) + screen.refresh() + + if loading_check: + if time() - current_check_time > 5: + dot_check = (0 if dot_check == len(dots) - 1 else dot_check + 1) + loc = (0 if not loading_stat else 27) + screen.addstr(mlines - 2, loc, 'Running rocotocheck ') + screen.addstr(mlines - 2, loc + 20, dots[dot_check]) + try: + rocoto_check = queue_check.get_nowait() + except Exception: + pass + if len(rocoto_check) != 0: + process_get_rocoto_check.join() + process_get_rocoto_check.terminate() + loading_check = False + if time() - current_check_time > 5: + event = screen.getch() + time_inc = 0.0 + while event != curses.KEY_ENTER and event != 10: + message_string = f'rocotocheck for {params_check[2]} {params_check[3]} is ready for vieweing' + message_string = (message_string if len(message_string) < mcols else message_string[:mcols - 1]) + time_inc += 1 + if time_inc > 4: + screen.addstr(mlines - 2, 0, message_string) + screen.addstr(mlines - 2, len(message_string), ' ') + time_inc = 0.0 + else: + screen.addstr(mlines - 2, 0, message_string) + screen.addstr(mlines - 2, len(message_string), ' ', curses.A_BOLD) + event = screen.getch() + display_results(rocoto_check, screen, params_check) + rocoto_check = '' + + curses.curs_set(0) + curses.halfdelay(2) + screen.keypad(1) + event = screen.getch() + + if event in (curses.KEY_LEFT, curses.KEY_RIGHT): + highlight_CYCLE = False + highlight_WORKFLOW = False + if event == curses.KEY_LEFT: + pad_pos = 0 + # debug.write('KEY_LEFT %s\n'%pad_pos) + if cycle - 1 >= 0: + cycle -= 1 + elif event == curses.KEY_RIGHT: + pad_pos = 0 + # debug.write('KEY_RIGHT %s\n'%pad_pos) + if cycle + 1 < num_cycle: + cycle += 1 + num_lines = len(rocoto_stat[cycle]) + line_correction = 0 + for count_meta_tasks in meta_tasks[cycle]: + if count_meta_tasks[1] and metatasks_state_cycle[cycle][count_meta_tasks[0]]: + line_correction += len(count_meta_tasks[2]) - 1 + num_lines -= line_correction + if task > num_lines - 1: + task = num_lines - 1 + update_pad = True + if event == ord('Q'): + break + if get_execute_task_track: + get_execute_task_track = False + if execute_task_track in metatasks_state_cycle[cycle]: + metatasks_state_cycle[cycle][execute_task_track] = not metatasks_state_cycle[cycle][execute_task_track] + update_metatask_state_status_message = True + update_pad = True + if event == curses.KEY_MOUSE: + mouse_id, mouse_x, mouse_y, mouse_z, button_state = curses.getmouse() + task_mouse_pos = pad_pos + mouse_y - 2 + if task_mouse_pos >= 0 and task_mouse_pos < num_lines: + task = task_mouse_pos + update_pad = True + if button_state & curses.BUTTON1_DOUBLE_CLICKED and mouse_x in range(12, 15): + get_execute_task_track = True + if event == ord('x'): + if execute_task_track in metatasks_state_cycle[cycle]: + metatasks_state_cycle[cycle][execute_task_track] = not metatasks_state_cycle[cycle][execute_task_track] + update_metatask_state_status_message = True + update_pad = True + if screen_resized: + screen.erase() + screen.refresh() + update_pad = True + task = pad_pos + screen_resized = False + curses.resizeterm(mlines, mcols) + if mcols < default_column_length: + curses.endwin() + print(f'\nYour terminal is only {mcols} characters must be at least {default_column_length} to display workflow status') + sys.exit(-1) + elif event in (curses.KEY_NPAGE, ord('d')): + highlight_CYCLE = False + highlight_WORKFLOW = False + if pad_pos + mlines < num_lines - mlines + 5: + pad_pos += mlines - 5 + task += mlines - 5 + else: + pad_pos = num_lines - mlines + 5 + task = num_lines - 1 + update_pad = True + elif event in (curses.KEY_PPAGE, ord('u')): + highlight_CYCLE = False + highlight_WORKFLOW = False + if pad_pos != 0: + if pad_pos - mlines > 0: + pad_pos -= mlines - 5 + if task > pad_pos + mlines - 6: + task -= mlines - 5 + else: + pad_pos = 0 + task = 0 + update_pad = True + elif event in (curses.KEY_UP, curses.KEY_SR): + if task == 0: + if highlight_CYCLE: + highlight_CYCLE = False + highlight_WORKFLOW = True + if not highlight_WORKFLOW: + highlight_CYCLE = True + if task != pad_pos: + update_pad = True + task -= 1 + elif pad_pos != 0: + pad_pos -= 1 + task -= 1 + if event == curses.KEY_SR: + if execute_metatask_check: + if execute_metatask in selected_meta_tasks[execute_cycle]: + if len(selected_meta_tasks[execute_cycle]) > 0: + selected_meta_tasks[execute_cycle].remove(execute_metatask) + else: + selected_meta_tasks[execute_cycle].append(execute_metatask) + else: + if execute_task in selected_tasks[execute_cycle]: + if len(selected_tasks[execute_cycle]) > 0: + selected_tasks[execute_cycle].remove(execute_task) + else: + selected_tasks[execute_cycle].append(execute_task) + update_pad = True + elif event in (curses.KEY_DOWN, curses.KEY_SF): + if highlight_CYCLE or highlight_WORKFLOW: + task = -1 + highlight_CYCLE = False + highlight_WORKFLOW = False + if task != num_lines - 1 and task < pad_pos + mlines - 6: + task += 1 + elif pad_pos < num_lines - mlines + 5: + pad_pos += 1 + task += 1 + if event == curses.KEY_SF: + if execute_metatask_check: + if execute_metatask in selected_meta_tasks[execute_cycle]: + if len(selected_meta_tasks[execute_cycle]): + selected_meta_tasks[execute_cycle].remove(execute_metatask) + else: + selected_meta_tasks[execute_cycle].append(execute_metatask) + else: + if execute_task in selected_tasks[execute_cycle]: + if len(selected_tasks[execute_cycle]) > 0: + selected_tasks[execute_cycle].remove(execute_task) + else: + selected_tasks[execute_cycle].append(execute_task) + update_pad = True + elif event == ord('c'): + if loading_check is True: + screen.addstr(mlines - 2, 0, 'rocotocheck is all reading running ') + screen.refresh() + std_time.sleep(0.5) + screen.addstr(mlines - 2, 0, ' ' * 100) + screen.refresh() + else: + loc = (0 if not loading_stat else 27) + screen.addstr(mlines - 2, loc, 'Running rocotocheck ') + screen.refresh() + params_check = (workflow_file, database_file, execute_task, execute_cycle, 'check') + process_get_rocoto_check = Process(target=get_rocoto_check, args=[params_check, queue_check]) + process_get_rocoto_check.start() + current_check_time = time() + loading_check = True + elif event == ord('f'): + log_file = '' + for find_task in tasks_ordered: + if find_task[0] == execute_task: + log_file = find_task[2].replace('CYCLE', execute_cycle[:-2]) + if os.path.isfile(log_file): + links = [] + links.append(log_file) + for link in links: + try: + os.symlink(link, EXPDIR) + except FileExistsError: + tmpfile = f"{EXPDIR}/{link}.tmp" + try: + os.symlink(link, tmpfile) + os.rename(tmpfile, f"{EXPDIR}/link") + except Exception: + pass + + elif event in (curses.KEY_ENTER, 10, 13): + + if execute_metatask_check: + selected_tasks[execute_cycle] = list_selector(screen, selected_tasks[execute_cycle], metatask_list_of_selected_metatask) + screen.erase() + else: + if execute_task in selected_tasks[execute_cycle]: + if len(selected_tasks[execute_cycle]) > 0: + selected_tasks[execute_cycle].remove(execute_task) + else: + selected_tasks[execute_cycle].append(execute_task) + + elif event == ord('r'): + screen.clear() + process = '' + if highlight_CYCLE: + screen.addstr(f'Are you sure you want to rewind all the tasks in the cycle {execute_cycle} by running:\n\n') + process = '-a' + # highlight_WORKFLOW = False + elif execute_metatask_check and len(selected_tasks[execute_cycle]) == 0: + for tasks in metatask_list_of_selected_metatask: + process += '-t ' + tasks + ' ' + screen.addstr(f'Are you sure you want to rewind all the tasks in the metatask ({execute_task}) by running:\n\n') + elif len(selected_tasks[execute_cycle]) != 0 or len(selected_meta_tasks[execute_cycle]) != 0: + if len(selected_tasks[execute_cycle]) != 0: + selected_tasks_string = '' + screen.addstr('Selected tasks:\n\n') + for tasks in selected_tasks[execute_cycle]: + selected_tasks_string += tasks + '\t' + process += '-t ' + tasks + ' ' + screen.addstr(selected_tasks_string + '\n\n') + if len(selected_meta_tasks[execute_cycle]) != 0: + selected_tasks_string = '' + screen.addstr(f'Selected {len(selected_meta_tasks[execute_cycle]):d} entire meta-tasks and their tasks:\n\n') + for meta_task_selected in selected_meta_tasks[execute_cycle]: + for tasks in metatask_list_by_name[meta_task_selected]: + selected_tasks_string += tasks + '\t' + process += '-t ' + tasks + ' ' + screen.addstr(selected_tasks_string + '\n\n') + screen.addstr('\nAre you sure you want to rewind all these seleted tasks by running:\n\n') + elif len(selected_tasks[execute_cycle]) == 0: + process = '-t ' + execute_task + screen.addstr(f'Are you sure you want to rewind the single task {execute_task} by running:\n\n') + screen.addstr(f'rocotorewind -c {execute_cycle} -d {basename(database_file)} -w {basename(workflow_file)} {process}\n\n') + screen.addstr('Enter: es or o', curses.A_BOLD) + while True: + event = screen.getch() + if event == ord('y') or event == ord('Y'): + params = (workflow_file, database_file, execute_cycle, process) + results = rocoto_rewind(params) + results_params = ('', '', 'rewind', execute_cycle, 'tasks') + try: + display_results(results, screen, results_params) + except Exception: + screen.addstr('\n\nRewind of this job was successful but displaying of the stdout failed\n') + screen.addstr('Output has been written out to the file rocotorewind_output.log\n') + screen.addstr('Press to continue') + with open('rocotorewind_output.log', 'a') as rocotorewind_logfile: + rocotorewind_logfile.write('\n\n' + results) + while True: + event = screen.getch() + if event in (curses.KEY_ENTER, 10, 13): + break + selected_tasks[execute_cycle] = [] + break + elif event == ord('n') or event == ord('N'): + break + screen.clear() + update_pad = True + elif event == ord('U'): + selected_tasks[execute_cycle] = [] + selected_meta_tasks[execute_cycle] = [] + update_pad = True + elif event == ord('b'): + process = '' + screen.clear() + list_meta_tasks = '' + list_of_tasks = '' + boot_task_list = '' + tasks_to_boot = [] + boot_metatask_list = '' + if highlight_CYCLE: + screen.addstr(f'You have selected to boot the entire cycle {execute_cycle}:\n\n', curses.A_BOLD) + tasks_to_boot = tasks_in_cycle[cycle] + elif len(selected_tasks[execute_cycle]) != 0: + screen.addstr('You have a list selected tasks boot:\n\n', curses.A_BOLD) + tasks_to_boot = selected_tasks[execute_cycle] + elif len(selected_meta_tasks[execute_cycle]) != 0: + screen.addstr(f'Are you sure you want boot the metatask {selected_meta_tasks[execute_cycle][0]} by running rocotoboot with:') + execute_task = selected_meta_tasks[execute_cycle] + else: + screen.addstr(f'Are you sure you want boot the task {execute_task} by running rocotoboot with:') + tasks_to_boot.append(execute_task) + + if len(tasks_to_boot) > 0: + list_of_tasks = ' ' + screen.addstr('\n\nTasks selected in cycle:\n\n', curses.A_BOLD) + for a_task in tasks_to_boot: + list_of_tasks += a_task + ' ' + boot_task_list += a_task + ',' + boot_task_list = boot_task_list[:-1] + screen.addstr(list_of_tasks) + + screen.addstr(f'\n\nAre you sure you want to boot all the tasks and/or metatasks in the cycle {execute_cycle} by running:\n\n', curses.A_BOLD) + if len(boot_task_list) != 0: + list_of_tasks = ' --tasks ' + "'" + boot_task_list + "'" + screen.addstr(f'rocotoboot -c {execute_cycle} -d {basename(database_file)} -w {basename(workflow_file)} {list_meta_tasks + list_of_tasks}\n\n') + screen.addstr('Enter: es or o', curses.A_BOLD) + + while True: + event = screen.getch() + if event == ord('y') or event == ord('Y'): + params = (workflow_file, database_file, execute_cycle, boot_metatask_list, boot_task_list) + results = rocoto_boot(params) + display_results(results, screen, ('', '', execute_cycle, 'rocotoboot_output')) + break + elif event == ord('n') or event == ord('N'): + break + screen.clear() + update_pad = True + elif event == ord('R'): + screen.addstr(mlines - 2, 0, 'Running rocotorun and rocotostat ...' + ' ' * 60, curses.A_BOLD) + params = (workflow_file, database_file) + rocoto_run(params) + update_pad = True + screen.clear() + if loading_stat is True: + screen.addstr(mlines - 2, 0, 'rocotostat is all reading running' + ' ' * 60) + screen.refresh() + std_time.sleep(0.5) + else: + start_time = 0 + elif event == ord('/'): + curses.echo() + find_next = 1 + screen.addstr(mlines - 3, 0, ' ' * 100) + screen.refresh() + screen.addstr(mlines - 3, 0, '/') + screen.refresh() + search_string = screen.getstr(mlines - 3, 1, job_name_length_max) + break_twice = False + screen.addstr(mlines - 3, 0, ' ' * 100) + screen.refresh() + for every_cycle in range(0, len(rocoto_stat)): + for line_number, line in enumerate(rocoto_stat[every_cycle]): + if search_string in line: + task = line_number + if num_lines < mlines: + pad_pos = 0 + else: + pad_pos = task + update_pad = True + cycle = every_cycle + break_twice = True + break + if break_twice: + screen.clear() + break + else: + find_next = 1 + elif (event == ord('n') or event == ord('N')) and len(search_string) != 0: + if event == ord('n'): + find_next += 1 + else: + if find_next - 1 >= 1: + find_next -= 1 + found_next = 0 + break_twice = False + for every_cycle in range(0, len(rocoto_stat)): + for line_number, line in enumerate(rocoto_stat[every_cycle]): + if search_string in line: + found_next += 1 + if find_next == found_next: + task = line_number + if num_lines < mlines: + pad_pos = 0 + else: + pad_pos = task + update_pad = True + cycle = every_cycle + break_twice = True + break + if break_twice: + screen.clear() + break + if not break_twice: + find_next = 1 + + elif event == ord('F'): + for find_cycle in range(0, len(rocoto_stat)): + for lines in rocoto_stat[find_cycle]: + if 'RUNNING' in line: + break + break + if find_cycle > 1: + cycle = find_cycle - 2 + update_pad = True + elif event == ord('l'): + start_time -= stat_read_time_delay + elif event == ord('h'): + update_pad = True + help_screen(screen) + screen.clear() + current_time = time() + diff = current_time - start_time + if diff > stat_read_time_delay and not loading_stat: + start_time = current_time + if not use_multiprocessing: + params = (workflow_file, database_file, tasks_ordered, metatask_list, cycledef_group_cycles) + (rocoto_stat, tasks_ordered, metatask_list, cycledef_group_cycles) = get_rocoto_stat(params, Queue()) + stat_update_time = str(datetime.now()).rsplit(':', 1)[0] + header = header_string + header = header.replace('t' * 16, stat_update_time) + header = header.replace('pslot', PSLOT) + reduce_header_size = int((len(PSLOT) - len('PSLOT')) / 2) + if reduce_header_size > 0: + header = header[:-reduce_header_size] + header = header[reduce_header_size:] + update_pad = True + screen.clear() + else: + loading_stat = True + screen.addstr(mlines - 2, 0, 'Running rocotostat ') + params = (workflow_file, database_file, tasks_ordered, metatask_list, cycledef_group_cycles) + process_get_rocoto_stat = Process(target=get_rocoto_stat, args=[params, queue_stat]) + process_get_rocoto_stat.start() + + if use_multiprocessing: + if process_get_rocoto_stat is not None: + if process_get_rocoto_stat.is_alive(): + process_get_rocoto_stat.terminate() + if process_get_rocoto_check is not None: + if process_get_rocoto_check.is_alive(): + process_get_rocoto_check.terminate() + + # debug.close() + + +if __name__ == '__main__': + if not get_rocoto_commands(): + print('\n\nCRITICAL ERROR: Rocoto run-time environment not installed') + sys.exit(-1) + try: + signal.signal(signal.SIGWINCH, sigwinch_handler) + sys.stdout = sys.__stdout__ + sys.stderr = sys.__stderr__ + if sys.stdin.isatty(): + curses.wrapper(main) + else: + screen = 'dummy' + main(screen) + except KeyboardInterrupt: + print("Got KeyboardInterrupt exception. Exiting...") + sys.exit(-1) + except Exception: + traceback.print_exc() + sys.exit(-1) diff --git a/workflow/setup_ecf.py b/workflow/setup_ecf.py new file mode 100755 index 0000000000..f4361a6969 --- /dev/null +++ b/workflow/setup_ecf.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 + +""" + PROGRAM: + Create a workflow file for use by a supercomputer. + AUTHOR: + Kyle Nevins + kyle.nevins@noaa.gov + FILE DEPENDENCIES: + 1. The configuration file that defines what jobs to run. It should be a + YAML file following the syntax defined in the README. + 2. config files for the experiment; e.g. config.base, config.fcst[.gfs] + etc. + Without this dependency, the script will fail + 3. The workflow utils package from the existing Rocoto generator. That + is used to read in the configuration files in the expdir. + 4. Any scripts defined in the YAML file must be present within the + script repository. + OUTPUT: + 1. Either an ecFlow definition file or a Rocoto XML file + 2. The folders and scripts needed to run either the ecflow suite or + Rocoto suite. +""" + +import os +from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter +from configuration import Configuration +from ecFlow.ecflow_setup import Ecflowsetup + + +def input_args(): + """ + Method to collect user arguments for `setup_workflow.py` + """ + parser = ArgumentParser(description=""" Create the workflow files for + ecFlow by deploying scripts and definition + files or Rocoto""", + formatter_class=ArgumentDefaultsHelpFormatter) + parser.add_argument('--ecflow-config', type=str, + default='ecflow_build.yml', required=False, + help='ecFlow Generator configuration file') + parser.add_argument('--expdir', type=str, + required=False, default=os.environ['PWD'], + help="""This is to be the full path to experiment' + 'directory containing config files""") + parser.add_argument('--savedir', type=str, + default=os.environ['PWD'], required=False, + help='Location to save the definition files') + arguments = parser.parse_args() + + return arguments + + +if __name__ == "__main__": + """ + This is the main function that will read in the command line arguments + using the parse_command_line function and create an array for the + environment configurations to be used throughout the application. + + For the ecFlow setup, it sets up a new workflow and then uses the generic + functions which are available for the Rocoto setup as well of + generate_workflow and save. + """ + + args = input_args() + + cfg = Configuration(args.expdir) + envconfigs = dict() + envconfigs['base'] = cfg.parse_config('config.base') + + workflow = Ecflowsetup(args, envconfigs) + workflow.generate_workflow() + workflow.save() diff --git a/workflow/setup_expt.py b/workflow/setup_expt.py new file mode 100755 index 0000000000..b1fa439052 --- /dev/null +++ b/workflow/setup_expt.py @@ -0,0 +1,549 @@ +#!/usr/bin/env python3 + +""" +Entry point for setting up an experiment in the global-workflow +""" + +import os +import glob +import shutil +import warnings +from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter, SUPPRESS + +from hosts import Host + +from wxflow import parse_j2yaml +from wxflow import AttrDict +from wxflow import to_datetime, to_timedelta, datetime_to_YMDH + + +_here = os.path.dirname(__file__) +_top = os.path.abspath(os.path.join(os.path.abspath(_here), '..')) + + +def makedirs_if_missing(dirname): + """ + Creates a directory if not already present + """ + if not os.path.exists(dirname): + os.makedirs(dirname) + + +def fill_COMROT(host, inputs): + """ + Method to populate the COMROT for supported modes. + INPUTS: + host: host object from class Host + inputs: user inputs to setup_expt.py + """ + + fill_modes = { + 'cycled': fill_COMROT_cycled, + 'forecast-only': fill_COMROT_forecasts + } + + try: + fill_modes[inputs.mode](host, inputs) + except KeyError: + raise NotImplementedError(f'{inputs.mode} is not a supported mode.\n' + + 'Currently supported modes are:\n' + + f'{" | ".join(fill_modes.keys())}') + + return + + +def fill_COMROT_cycled(host, inputs): + """ + Implementation of 'fill_COMROT' for cycled mode + """ + + comrot = os.path.join(inputs.comrot, inputs.pslot) + + do_ocean = do_ice = do_med = False + + if 'S2S' in inputs.app: + do_ocean = do_ice = do_med = True + + if inputs.icsdir is None: + warnings.warn("User did not provide '--icsdir' to stage initial conditions") + return + + rdatestr = datetime_to_YMDH(inputs.idate - to_timedelta('T06H')) + idatestr = datetime_to_YMDH(inputs.idate) + + # Test if we are using the new COM structure or the old flat one for ICs + if inputs.start in ['warm']: + pathstr = os.path.join(inputs.icsdir, f'{inputs.cdump}.{rdatestr[:8]}', + rdatestr[8:], 'model_data', 'atmos') + else: + pathstr = os.path.join(inputs.icsdir, f'{inputs.cdump}.{idatestr[:8]}', + idatestr[8:], 'model_data', 'atmos') + + if os.path.isdir(pathstr): + flat_structure = False + else: + flat_structure = True + + # Destination always uses the new COM structure + # These should match the templates defined in config.com + if inputs.start in ['warm']: + dst_atm_dir = os.path.join('model_data', 'atmos', 'restart') + dst_med_dir = os.path.join('model_data', 'med', 'restart') + else: + dst_atm_dir = os.path.join('model_data', 'atmos', 'input') + dst_med_dir = '' # no mediator files for a "cold start" + do_med = False + dst_ocn_rst_dir = os.path.join('model_data', 'ocean', 'restart') + dst_ocn_anl_dir = os.path.join('analysis', 'ocean') + dst_ice_rst_dir = os.path.join('model_data', 'ice', 'restart') + dst_atm_anl_dir = os.path.join('analysis', 'atmos') + + if flat_structure: + # ICs are in the old flat COM structure + if inputs.start in ['warm']: # This is warm start experiment + src_atm_dir = os.path.join('atmos', 'RESTART') + src_med_dir = os.path.join('med', 'RESTART') + elif inputs.start in ['cold']: # This is a cold start experiment + src_atm_dir = os.path.join('atmos', 'INPUT') + src_med_dir = '' # no mediator files for a "cold start" + do_med = False + # ocean and ice have the same filenames for warm and cold + src_ocn_rst_dir = os.path.join('ocean', 'RESTART') + src_ocn_anl_dir = 'ocean' + src_ice_rst_dir = os.path.join('ice', 'RESTART') + src_atm_anl_dir = 'atmos' + else: + src_atm_dir = dst_atm_dir + src_med_dir = dst_med_dir + src_ocn_rst_dir = dst_ocn_rst_dir + src_ocn_anl_dir = dst_ocn_anl_dir + src_ice_rst_dir = dst_ice_rst_dir + src_atm_anl_dir = dst_atm_anl_dir + + def link_files_from_src_to_dst(src_dir, dst_dir): + files = os.listdir(src_dir) + for fname in files: + os.symlink(os.path.join(src_dir, fname), + os.path.join(dst_dir, fname)) + return + + # Link ensemble member initial conditions + if inputs.nens > 0: + previous_cycle_dir = f'enkf{inputs.cdump}.{rdatestr[:8]}/{rdatestr[8:]}' + current_cycle_dir = f'enkf{inputs.cdump}.{idatestr[:8]}/{idatestr[8:]}' + + for ii in range(1, inputs.nens + 1): + memdir = f'mem{ii:03d}' + # Link atmospheric files + if inputs.start in ['warm']: + dst_dir = os.path.join(comrot, previous_cycle_dir, memdir, dst_atm_dir) + src_dir = os.path.join(inputs.icsdir, previous_cycle_dir, memdir, src_atm_dir) + elif inputs.start in ['cold']: + dst_dir = os.path.join(comrot, current_cycle_dir, memdir, dst_atm_dir) + src_dir = os.path.join(inputs.icsdir, current_cycle_dir, memdir, src_atm_dir) + makedirs_if_missing(dst_dir) + link_files_from_src_to_dst(src_dir, dst_dir) + + # Link ocean files + if do_ocean: + dst_dir = os.path.join(comrot, previous_cycle_dir, memdir, dst_ocn_rst_dir) + src_dir = os.path.join(inputs.icsdir, previous_cycle_dir, memdir, src_ocn_rst_dir) + makedirs_if_missing(dst_dir) + link_files_from_src_to_dst(src_dir, dst_dir) + + # First 1/2 cycle needs a MOM6 increment + incfile = f'enkf{inputs.cdump}.t{idatestr[8:]}z.ocninc.nc' + src_file = os.path.join(inputs.icsdir, current_cycle_dir, memdir, src_ocn_anl_dir, incfile) + dst_file = os.path.join(comrot, current_cycle_dir, memdir, dst_ocn_anl_dir, incfile) + makedirs_if_missing(os.path.join(comrot, current_cycle_dir, memdir, dst_ocn_anl_dir)) + os.symlink(src_file, dst_file) + + # Link ice files + if do_ice: + dst_dir = os.path.join(comrot, previous_cycle_dir, memdir, dst_ice_rst_dir) + src_dir = os.path.join(inputs.icsdir, previous_cycle_dir, memdir, src_ice_rst_dir) + makedirs_if_missing(dst_dir) + link_files_from_src_to_dst(src_dir, dst_dir) + + # Link mediator files + if do_med: + dst_dir = os.path.join(comrot, previous_cycle_dir, memdir, dst_med_dir) + src_dir = os.path.join(inputs.icsdir, previous_cycle_dir, memdir, src_med_dir) + makedirs_if_missing(dst_dir) + link_files_from_src_to_dst(src_dir, dst_dir) + + # Link deterministic initial conditions + previous_cycle_dir = f'{inputs.cdump}.{rdatestr[:8]}/{rdatestr[8:]}' + current_cycle_dir = f'{inputs.cdump}.{idatestr[:8]}/{idatestr[8:]}' + + # Link atmospheric files + if inputs.start in ['warm']: + dst_dir = os.path.join(comrot, previous_cycle_dir, dst_atm_dir) + src_dir = os.path.join(inputs.icsdir, previous_cycle_dir, src_atm_dir) + elif inputs.start in ['cold']: + dst_dir = os.path.join(comrot, current_cycle_dir, dst_atm_dir) + src_dir = os.path.join(inputs.icsdir, current_cycle_dir, src_atm_dir) + + makedirs_if_missing(dst_dir) + link_files_from_src_to_dst(src_dir, dst_dir) + + # Link ocean files + if do_ocean: + dst_dir = os.path.join(comrot, previous_cycle_dir, dst_ocn_rst_dir) + src_dir = os.path.join(inputs.icsdir, previous_cycle_dir, src_ocn_rst_dir) + makedirs_if_missing(dst_dir) + link_files_from_src_to_dst(src_dir, dst_dir) + + # First 1/2 cycle needs a MOM6 increment + incfile = f'{inputs.cdump}.t{idatestr[8:]}z.ocninc.nc' + src_file = os.path.join(inputs.icsdir, current_cycle_dir, src_ocn_anl_dir, incfile) + dst_file = os.path.join(comrot, current_cycle_dir, dst_ocn_anl_dir, incfile) + makedirs_if_missing(os.path.join(comrot, current_cycle_dir, dst_ocn_anl_dir)) + os.symlink(src_file, dst_file) + + # Link ice files + if do_ice: + dst_dir = os.path.join(comrot, previous_cycle_dir, dst_ice_rst_dir) + src_dir = os.path.join(inputs.icsdir, previous_cycle_dir, src_ice_rst_dir) + makedirs_if_missing(dst_dir) + link_files_from_src_to_dst(src_dir, dst_dir) + + # Link mediator files + if do_med: + dst_dir = os.path.join(comrot, previous_cycle_dir, dst_med_dir) + src_dir = os.path.join(inputs.icsdir, previous_cycle_dir, src_med_dir) + makedirs_if_missing(dst_dir) + link_files_from_src_to_dst(src_dir, dst_dir) + + # Link bias correction and radiance diagnostics files + src_dir = os.path.join(inputs.icsdir, current_cycle_dir, src_atm_anl_dir) + dst_dir = os.path.join(comrot, current_cycle_dir, dst_atm_anl_dir) + makedirs_if_missing(dst_dir) + for ftype in ['abias', 'abias_pc', 'abias_air', 'radstat']: + fname = f'{inputs.cdump}.t{idatestr[8:]}z.{ftype}' + src_file = os.path.join(src_dir, fname) + if os.path.exists(src_file): + os.symlink(src_file, os.path.join(dst_dir, fname)) + + return + + +def fill_COMROT_forecasts(host, inputs): + """ + Implementation of 'fill_COMROT' for forecast-only mode + """ + print('forecast-only mode treats ICs differently and cannot be staged here') + + +def fill_EXPDIR(inputs): + """ + Method to copy config files from workflow to experiment directory + INPUTS: + inputs: user inputs to `setup_expt.py` + """ + configdir = inputs.configdir + expdir = os.path.join(inputs.expdir, inputs.pslot) + + configs = glob.glob(f'{configdir}/config.*') + exclude_configs = ['base', 'base.emc.dyn', 'base.nco.static', 'fv3.nco.static'] + for exclude in exclude_configs: + try: + configs.remove(f'{configdir}/config.{exclude}') + except ValueError: + pass + if len(configs) == 0: + raise IOError(f'no config files found in {configdir}') + for config in configs: + shutil.copy(config, expdir) + + return + + +def update_configs(host, inputs): + + def _update_defaults(dict_in: dict) -> dict: + defaults = dict_in.pop('defaults', AttrDict()) + defaults.update(dict_in) + return defaults + + # Read in the YAML file to fill out templates and override host defaults + data = AttrDict(host.info, **inputs.__dict__) + data.HOMEgfs = _top + yaml_path = inputs.yaml + yaml_dict = _update_defaults(AttrDict(parse_j2yaml(yaml_path, data))) + + # First update config.base + edit_baseconfig(host, inputs, yaml_dict) + + # loop over other configs and update them + for cfg in yaml_dict.keys(): + if cfg == 'base': + continue + cfg_file = f'{inputs.expdir}/{inputs.pslot}/config.{cfg}' + cfg_dict = get_template_dict(yaml_dict[cfg]) + edit_config(cfg_file, cfg_file, cfg_dict) + + return + + +def edit_baseconfig(host, inputs, yaml_dict): + """ + Parses and populates the templated `config.base.emc.dyn` to `config.base` + """ + + tmpl_dict = { + "@HOMEgfs@": _top, + "@MACHINE@": host.machine.upper()} + + # Replace host related items + extend_dict = get_template_dict(host.info) + tmpl_dict = dict(tmpl_dict, **extend_dict) + + if inputs.start in ["warm"]: + is_warm_start = ".true." + elif inputs.start in ["cold"]: + is_warm_start = ".false." + + extend_dict = dict() + extend_dict = { + "@PSLOT@": inputs.pslot, + "@SDATE@": datetime_to_YMDH(inputs.idate), + "@EDATE@": datetime_to_YMDH(inputs.edate), + "@CASECTL@": f'C{inputs.resdet}', + "@EXPDIR@": inputs.expdir, + "@ROTDIR@": inputs.comrot, + "@EXP_WARM_START@": is_warm_start, + "@MODE@": inputs.mode, + "@gfs_cyc@": inputs.gfs_cyc, + "@APP@": inputs.app + } + tmpl_dict = dict(tmpl_dict, **extend_dict) + + extend_dict = dict() + if getattr(inputs, 'nens', 0) > 0: + extend_dict = { + "@CASEENS@": f'C{inputs.resens}', + "@NMEM_ENS@": inputs.nens, + } + tmpl_dict = dict(tmpl_dict, **extend_dict) + + extend_dict = dict() + if inputs.mode in ['cycled']: + extend_dict = { + "@DOHYBVAR@": "YES" if inputs.nens > 0 else "NO", + } + tmpl_dict = dict(tmpl_dict, **extend_dict) + + try: + tmpl_dict = dict(tmpl_dict, **get_template_dict(yaml_dict['base'])) + except KeyError: + pass + + base_input = f'{inputs.configdir}/config.base.emc.dyn' + base_output = f'{inputs.expdir}/{inputs.pslot}/config.base' + edit_config(base_input, base_output, tmpl_dict) + + return + + +def edit_config(input_config, output_config, config_dict): + + # Read input config + with open(input_config, 'rt') as fi: + config_str = fi.read() + + # Substitute from config_dict + for key, val in config_dict.items(): + config_str = config_str.replace(key, str(val)) + + # Ensure no output_config file exists + if os.path.exists(output_config): + os.unlink(output_config) + + # Write output config + with open(output_config, 'wt') as fo: + fo.write(config_str) + + print(f'EDITED: {output_config} as per user input.') + + return + + +def get_template_dict(input_dict): + output_dict = dict() + for key, value in input_dict.items(): + output_dict[f'@{key}@'] = value + + return output_dict + + +def input_args(*argv): + """ + Method to collect user arguments for `setup_expt.py` + """ + + ufs_apps = ['ATM', 'ATMA', 'ATMW', 'S2S', 'S2SA', 'S2SW'] + + def _common_args(parser): + parser.add_argument('--pslot', help='parallel experiment name', + type=str, required=False, default='test') + parser.add_argument('--resdet', help='resolution of the deterministic model forecast', + type=int, required=False, default=384) + parser.add_argument('--comrot', help='full path to COMROT', + type=str, required=False, default=os.getenv('HOME')) + parser.add_argument('--expdir', help='full path to EXPDIR', + type=str, required=False, default=os.getenv('HOME')) + parser.add_argument('--idate', help='starting date of experiment, initial conditions must exist!', + required=True, type=lambda dd: to_datetime(dd)) + parser.add_argument('--edate', help='end date experiment', required=True, type=lambda dd: to_datetime(dd)) + return parser + + def _gfs_args(parser): + parser.add_argument('--start', help='restart mode: warm or cold', type=str, + choices=['warm', 'cold'], required=False, default='cold') + parser.add_argument('--cdump', help='CDUMP to start the experiment', + type=str, required=False, default='gdas') + # --configdir is hidden from help + parser.add_argument('--configdir', help=SUPPRESS, type=str, required=False, default=os.path.join(_top, 'parm/config/gfs')) + parser.add_argument('--yaml', help='Defaults to substitute from', type=str, + required=False, default=os.path.join(_top, 'parm/config/gfs/yaml/defaults.yaml')) + return parser + + def _gfs_cycled_args(parser): + parser.add_argument('--icsdir', help='full path to initial condition directory', type=str, required=False, default=None) + parser.add_argument('--app', help='UFS application', type=str, + choices=ufs_apps, required=False, default='ATM') + parser.add_argument('--gfs_cyc', help='cycles to run forecast', type=int, + choices=[0, 1, 2, 4], default=1, required=False) + return parser + + def _gfs_or_gefs_ensemble_args(parser): + parser.add_argument('--resens', help='resolution of the ensemble model forecast', + type=int, required=False, default=192) + parser.add_argument('--nens', help='number of ensemble members', + type=int, required=False, default=20) + return parser + + def _gfs_or_gefs_forecast_args(parser): + parser.add_argument('--app', help='UFS application', type=str, + choices=ufs_apps + ['S2SWA'], required=False, default='ATM') + parser.add_argument('--gfs_cyc', help='Number of forecasts per day', type=int, + choices=[1, 2, 4], default=1, required=False) + return parser + + def _gefs_args(parser): + parser.add_argument('--start', help='restart mode: warm or cold', type=str, + choices=['warm', 'cold'], required=False, default='cold') + parser.add_argument('--configdir', help=SUPPRESS, type=str, required=False, + default=os.path.join(_top, 'parm/config/gefs')) + parser.add_argument('--yaml', help='Defaults to substitute from', type=str, required=False, + default=os.path.join(_top, 'parm/config/gefs/yaml/defaults.yaml')) + parser.add_argument('--icsdir', help='full path to initial condition directory [temporary hack in place for testing]', + type=str, required=False, default=None) + return parser + + description = """ + Setup files and directories to start a GFS parallel.\n + Create EXPDIR, copy config files.\n + Create COMROT experiment directory structure, + """ + + parser = ArgumentParser(description=description, + formatter_class=ArgumentDefaultsHelpFormatter) + + # Set up sub-parsers for various modes of experimentation + sysparser = parser.add_subparsers(dest='system') + gfs = sysparser.add_parser('gfs', help='arguments for GFS') + gefs = sysparser.add_parser('gefs', help='arguments for GEFS') + + gfsmodeparser = gfs.add_subparsers(dest='mode') + gfscycled = gfsmodeparser.add_parser('cycled', help='arguments for cycled mode') + gfsforecasts = gfsmodeparser.add_parser('forecast-only', help='arguments for forecast-only mode') + + gefsmodeparser = gefs.add_subparsers(dest='mode') + gefsforecasts = gefsmodeparser.add_parser('forecast-only', help='arguments for forecast-only mode') + + # Common arguments across all modes + for subp in [gfscycled, gfsforecasts, gefsforecasts]: + subp = _common_args(subp) + + # GFS-only arguments + for subp in [gfscycled, gfsforecasts]: + subp = _gfs_args(subp) + + # ensemble-only arguments + for subp in [gfscycled, gefsforecasts]: + subp = _gfs_or_gefs_ensemble_args(subp) + + # GFS/GEFS forecast-only additional arguments + for subp in [gfsforecasts, gefsforecasts]: + subp = _gfs_or_gefs_forecast_args(subp) + + # cycled mode additional arguments + for subp in [gfscycled]: + subp = _gfs_cycled_args(subp) + + # GEFS forecast-only arguments + for subp in [gefsforecasts]: + subp = _gefs_args(subp) + + return parser.parse_args(list(*argv) if len(argv) else None) + + +def query_and_clean(dirname): + """ + Method to query if a directory exists and gather user input for further action + """ + + create_dir = True + if os.path.exists(dirname): + print() + print(f'directory already exists in {dirname}') + print() + overwrite = input('Do you wish to over-write [y/N]: ') + create_dir = True if overwrite in [ + 'y', 'yes', 'Y', 'YES'] else False + if create_dir: + shutil.rmtree(dirname) + + return create_dir + + +def validate_user_request(host, inputs): + supp_res = host.info['SUPPORTED_RESOLUTIONS'] + machine = host.machine + for attr in ['resdet', 'resens']: + try: + expt_res = f'C{getattr(inputs, attr)}' + except AttributeError: + continue + if expt_res not in supp_res: + raise NotImplementedError(f"Supported resolutions on {machine} are:\n{', '.join(supp_res)}") + + +def main(*argv): + + user_inputs = input_args(*argv) + host = Host() + + validate_user_request(host, user_inputs) + + comrot = os.path.join(user_inputs.comrot, user_inputs.pslot) + expdir = os.path.join(user_inputs.expdir, user_inputs.pslot) + + create_comrot = query_and_clean(comrot) + create_expdir = query_and_clean(expdir) + + if create_comrot: + makedirs_if_missing(comrot) + fill_COMROT(host, user_inputs) + + if create_expdir: + makedirs_if_missing(expdir) + fill_EXPDIR(user_inputs) + update_configs(host, user_inputs) + + +if __name__ == '__main__': + + main() diff --git a/workflow/setup_xml.py b/workflow/setup_xml.py new file mode 100755 index 0000000000..a66e4922a3 --- /dev/null +++ b/workflow/setup_xml.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +""" +Entry point for setting up Rocoto XML for all applications in global-workflow +""" + +import os +from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter + +from applications.application_factory import app_config_factory +from rocoto.rocoto_xml_factory import rocoto_xml_factory +from wxflow import Configuration + + +def input_args(*argv): + """ + Method to collect user arguments for `setup_xml.py` + """ + + description = """ + Sources configuration files based on application and + creates "$PSLOT.xml" for use with Rocoto. + """ + + parser = ArgumentParser(description=description, + formatter_class=ArgumentDefaultsHelpFormatter) + + # Common arguments across all modes + parser.add_argument('expdir', help='full path to experiment directory containing config files', + type=str, default=os.environ['PWD']) + + parser.add_argument('--maxtries', help='maximum number of retries', type=int, + default=2, required=False) + parser.add_argument('--cyclethrottle', help='maximum number of concurrent cycles', type=int, + default=3, required=False) + parser.add_argument('--taskthrottle', help='maximum number of concurrent tasks', type=int, + default=25, required=False) + parser.add_argument('--verbosity', help='verbosity level of Rocoto', type=int, + default=10, required=False) + + return parser.parse_args(argv[0][0] if len(argv[0]) else None) + + +def check_expdir(cmd_expdir, cfg_expdir): + + if not os.path.samefile(cmd_expdir, cfg_expdir): + print('MISMATCH in experiment directories!') + print(f'config.base: EXPDIR = {cfg_expdir}') + print(f' input arg: --expdir = {cmd_expdir}') + raise ValueError('Abort!') + + +def main(*argv): + + user_inputs = input_args(argv) + rocoto_param_dict = {'maxtries': user_inputs.maxtries, + 'cyclethrottle': user_inputs.cyclethrottle, + 'taskthrottle': user_inputs.taskthrottle, + 'verbosity': user_inputs.verbosity} + + cfg = Configuration(user_inputs.expdir) + + base = cfg.parse_config('config.base') + + check_expdir(user_inputs.expdir, base['EXPDIR']) + + net = base['NET'] + mode = base['MODE'] + + # Configure the application + app_config = app_config_factory.create(f'{net}_{mode}', cfg) + + # Create Rocoto Tasks and Assemble them into an XML + xml = rocoto_xml_factory.create(f'{net}_{mode}', app_config, rocoto_param_dict) + xml.write() + + +if __name__ == '__main__': + + main() diff --git a/workflow/test_configuration.py b/workflow/test_configuration.py new file mode 100644 index 0000000000..32e40c67af --- /dev/null +++ b/workflow/test_configuration.py @@ -0,0 +1,32 @@ +import sys +from wxflow import Configuration + + +expdir = sys.argv[1] + +cfg = Configuration(expdir) + +print(f'experiment dir: {cfg.config_dir}') + +print('configuration files ...') +line_separator = '\n' # \escapes are not allowed inside f-strings +print(f'{line_separator.join(cfg.config_files)}') + +print(f'config.base: {cfg.find_config("config.base")}') + +print('*' * 80) +print('config.base ...') +base = cfg.parse_config('config.base') +cfg.print_config('config.base') +print(type(base)) +print(base.HOMEgfs) + +print('*' * 80) +print('config.anal...') +cfg.print_config(['config.base', 'config.anal']) + + +print('*' * 80) +print('config.efcs ...') +configs = ['config.base', 'config.fcst', 'config.efcs'] +cfg.print_config(configs) diff --git a/workflow/test_hosts.py b/workflow/test_hosts.py new file mode 100644 index 0000000000..b9fa969e14 --- /dev/null +++ b/workflow/test_hosts.py @@ -0,0 +1,17 @@ +from hosts import Host + +print(f'supported hosts are: {", ".join(Host.SUPPORTED_HOSTS)}') + +print(f'host detected as: {Host.detect}') +print(f'scheduler on host: {Host().scheduler}') + +print('initializing host ...') +host = Host() + +print(f'hostname: {host.machine}') + +print(f'scheduler on host: {host.scheduler}') + +print('host information ...') +line_separator = '\n' # \escapes are not allowed inside f-strings +print(f'{line_separator.join(f"{key}: {host.info[key]}" for key in host.info.keys())}')