From cf2a09f520cb56414e7f05204519e492d73c0b1c Mon Sep 17 00:00:00 2001 From: joshua-white Date: Sat, 8 Aug 2026 19:07:05 -0700 Subject: [PATCH 01/19] Attempt 2: try migrating ATS python setup to docker setup --- scripts/ci_build_and_test_in_container.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/ci_build_and_test_in_container.sh b/scripts/ci_build_and_test_in_container.sh index 2709ae3dbaf..11cb7c20372 100755 --- a/scripts/ci_build_and_test_in_container.sh +++ b/scripts/ci_build_and_test_in_container.sh @@ -328,13 +328,13 @@ if [[ "${RUN_INTEGRATED_TESTS}" = true ]]; then phase_start "Set up integrated test environment" echo "Running the integrated tests has been requested." # We install the python environment required by ATS to run the integrated tests. - or_die apt-get update - or_die apt-get install -y python3-dev python3-venv + #or_die apt-get update + #or_die apt-get install -y python3-dev python3-venv ATS_PYTHON_HOME=/tmp/run_integrated_tests_virtualenv or_die python3 -m venv ${ATS_PYTHON_HOME} - or_die ${ATS_PYTHON_HOME}/bin/python3 -m pip install --upgrade pip setuptools wheel - ${ATS_PYTHON_HOME}/bin/python3 -m pip cache purge + #or_die ${ATS_PYTHON_HOME}/bin/python3 -m pip install --upgrade pip setuptools wheel + #${ATS_PYTHON_HOME}/bin/python3 -m pip cache purge # Setup a temporary directory to hold tests tempdir=$(mktemp -d) From 1fcbb6b6aad918593c20ea981cab6de1ead3e695 Mon Sep 17 00:00:00 2001 From: joshua-white Date: Sat, 8 Aug 2026 20:31:41 -0700 Subject: [PATCH 02/19] disable pip upgrades --- scripts/setupPythonEnvironment.bash | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/setupPythonEnvironment.bash b/scripts/setupPythonEnvironment.bash index fdf478884d3..6d624b2fb47 100755 --- a/scripts/setupPythonEnvironment.bash +++ b/scripts/setupPythonEnvironment.bash @@ -119,8 +119,8 @@ fi # Updating pip -echo "Updating pip" -$PYTHON_TARGET -m pip install --upgrade pip setuptools wheel +#echo "Updating pip" +#$PYTHON_TARGET -m pip install --upgrade pip setuptools wheel # Install packages echo "Installing python packages..." From 3f2f8a228436e77187bc1a85cb2d689c2a977778 Mon Sep 17 00:00:00 2001 From: Joshua White Date: Sun, 9 Aug 2026 10:21:43 -0700 Subject: [PATCH 03/19] Add crypto diagnostics --- scripts/ci_build_and_test_in_container.sh | 109 +++++++++++++++++++++- scripts/setupPythonEnvironment.bash | 32 +++++-- 2 files changed, 130 insertions(+), 11 deletions(-) diff --git a/scripts/ci_build_and_test_in_container.sh b/scripts/ci_build_and_test_in_container.sh index 11cb7c20372..3098a0f96fe 100755 --- a/scripts/ci_build_and_test_in_container.sh +++ b/scripts/ci_build_and_test_in_container.sh @@ -99,6 +99,97 @@ function print_phase_summary () { done } +function print_crypto_diagnostics () { + echo "Crypto/FIPS diagnostics:" + echo " uname: $(uname -a)" + + if [[ -r /etc/os-release ]]; then + sed 's/^/ os-release: /' /etc/os-release + fi + + for path in /proc/sys/crypto/fips_enabled /etc/system-fips /etc/ssl/openssl.cnf /usr/lib/ssl/openssl.cnf; do + if [[ -e "${path}" ]]; then + if [[ -r "${path}" && ! -d "${path}" ]]; then + echo " ${path}: $(head -n 1 "${path}" 2>/dev/null || true)" + else + echo " ${path}: present" + fi + else + echo " ${path}: absent" + fi + done + grep -nEi 'fips|provider|default_properties|openssl_conf|activate' /etc/ssl/openssl.cnf /usr/lib/ssl/openssl.cnf 2>/dev/null | head -n 80 | sed 's/^/ openssl config match: /' || true + + for var in OPENSSL_CONF OPENSSL_MODULES OPENSSL_FORCE_FIPS_MODE SSL_CERT_FILE CURL_CA_BUNDLE REQUESTS_CA_BUNDLE; do + echo " ${var}: ${!var:-}" + done + + if command -v openssl >/dev/null 2>&1; then + echo " openssl path: $(command -v openssl)" + openssl version -a 2>&1 | sed 's/^/ openssl version: /' || true + openssl list -providers -verbose 2>&1 | sed 's/^/ openssl providers: /' || true + openssl md5 /dev/null 2>&1 | sed 's/^/ openssl md5: /' || true + openssl sha256 /dev/null 2>&1 | sed 's/^/ openssl sha256: /' || true + openssl rand -hex 8 2>&1 | sed 's/^/ openssl rand: /' || true + else + echo " openssl: not found" + fi + + if command -v python3 >/dev/null 2>&1; then + python3 - <<'PY' 2>&1 | sed 's/^/ python crypto: /' || true +import hashlib +import os +import ssl +import sys + +print("executable:", sys.executable) +print("version:", sys.version.replace("\n", " ")) +print("ssl:", ssl.OPENSSL_VERSION) +print("default verify paths:", ssl.get_default_verify_paths()) + +for name in ("md5", "sha1", "sha256"): + try: + digest = getattr(hashlib, name)(b"geos").hexdigest() + print(f"hashlib {name}: ok {digest}") + except Exception as exc: + print(f"hashlib {name}: failed {type(exc).__name__}: {exc}") + +try: + print("os.urandom:", os.urandom(8).hex()) +except Exception as exc: + print(f"os.urandom: failed {type(exc).__name__}: {exc}") +PY + else + echo " python3: not found" + fi + + if command -v sccache >/dev/null 2>&1; then + echo " sccache path: $(command -v sccache)" + sccache --version 2>&1 | sed 's/^/ sccache version: /' || true + ldd "$(command -v sccache)" 2>&1 | sed 's/^/ sccache ldd: /' || true + else + echo " sccache: not found" + fi +} + +function bootstrap_pip () { + local python_executable="$1" + + if [[ "${GEOS_SKIP_PIP_BOOTSTRAP:-false}" == "true" ]]; then + echo "Skipping pip bootstrap because GEOS_SKIP_PIP_BOOTSTRAP=true." + return 0 + fi + + echo "Updating pip" + if ! "${python_executable}" -m pip install --upgrade pip setuptools wheel; then + echo "::warning::pip bootstrap failed for ${python_executable}; continuing with the existing pip so the package install step can report the actionable failure." + "${python_executable}" -m pip --version || true + return 0 + fi + + "${python_executable}" -m pip cache purge || true +} + function usage () { >&2 cat << EOF Usage: $0 @@ -282,6 +373,8 @@ else GEOS_LA_INTERFACE=Trilinos fi +print_crypto_diagnostics + if [[ "${USE_SCCACHE}" == true ]]; then SCCACHE_BIN=${SCCACHE:-$(command -v sccache || true)} @@ -327,14 +420,20 @@ fi if [[ "${RUN_INTEGRATED_TESTS}" = true ]]; then phase_start "Set up integrated test environment" echo "Running the integrated tests has been requested." + # We install the python environment required by ATS to run the integrated tests. - #or_die apt-get update - #or_die apt-get install -y python3-dev python3-venv ATS_PYTHON_HOME=/tmp/run_integrated_tests_virtualenv - or_die python3 -m venv ${ATS_PYTHON_HOME} + if ! python3 -m venv --system-site-packages "${ATS_PYTHON_HOME}" || + ! "${ATS_PYTHON_HOME}/bin/python3" -c 'import setuptools, wheel' >/dev/null 2>&1; then + echo "The ATS virtualenv is missing distro Python build tools; installing them and recreating the virtualenv." + rm -rf "${ATS_PYTHON_HOME}" + or_die apt-get update + or_die apt-get install -y python3-dev python3-venv python3-setuptools python3-wheel + or_die python3 -m venv --system-site-packages "${ATS_PYTHON_HOME}" + or_die "${ATS_PYTHON_HOME}/bin/python3" -c 'import setuptools, wheel' + fi - #or_die ${ATS_PYTHON_HOME}/bin/python3 -m pip install --upgrade pip setuptools wheel - #${ATS_PYTHON_HOME}/bin/python3 -m pip cache purge + bootstrap_pip "${ATS_PYTHON_HOME}/bin/python3" # Setup a temporary directory to hold tests tempdir=$(mktemp -d) diff --git a/scripts/setupPythonEnvironment.bash b/scripts/setupPythonEnvironment.bash index 6d624b2fb47..b53bdd0e040 100755 --- a/scripts/setupPythonEnvironment.bash +++ b/scripts/setupPythonEnvironment.bash @@ -7,7 +7,7 @@ PYTHON_TARGET= BIN_DIR= PACKAGE_DIR= TMP_CLONE_DIR= -PIP_CMD="pip --disable-pip-version-check" +declare -a PIP_INSTALL_ARGS=(--disable-pip-version-check install --no-build-isolation --upgrade) PACKAGE_BRANCH=main @@ -30,6 +30,22 @@ declare -a LINK_SCRIPTS=("preprocess_xml" "activate" "python") +function bootstrap_pip () { + local python_executable="$1" + + if [[ "${GEOS_SKIP_PIP_BOOTSTRAP:-false}" == "true" ]]; then + echo "Skipping pip bootstrap because GEOS_SKIP_PIP_BOOTSTRAP=true." + return 0 + fi + + echo "Updating pip" + if ! "${python_executable}" -m pip install --upgrade pip setuptools wheel; then + echo "WARNING: pip bootstrap failed for ${python_executable}; continuing with the existing pip so package installation can report the actionable failure." + "${python_executable}" -m pip --version || true + return 0 + fi +} + # Read input arguments if [[ -z "${VERBOSE}" ]] @@ -119,8 +135,7 @@ fi # Updating pip -#echo "Updating pip" -#$PYTHON_TARGET -m pip install --upgrade pip setuptools wheel +bootstrap_pip "$PYTHON_TARGET" # Install packages echo "Installing python packages..." @@ -133,10 +148,10 @@ do # Try installing the package if [[ "${VERBOSE}" == true ]] then - INSTALL_MSG=$("${PYTHON_TARGET}" -m ${PIP_CMD} install --upgrade "${PACKAGE_DIR}/${p}") + INSTALL_MSG=$("${PYTHON_TARGET}" -m pip "${PIP_INSTALL_ARGS[@]}" "${PACKAGE_DIR}/${p}") INSTALL_RC=$? else - INSTALL_MSG=$("${PYTHON_TARGET}" -m ${PIP_CMD} install --upgrade "${PACKAGE_DIR}/${p}" 2>&1) + INSTALL_MSG=$("${PYTHON_TARGET}" -m pip "${PIP_INSTALL_ARGS[@]}" "${PACKAGE_DIR}/${p}" 2>&1) INSTALL_RC=$? fi @@ -144,7 +159,12 @@ do then echo $INSTALL_MSG - if [[ $INSTALL_MSG =~ "HTTP error" ]] + if [[ $INSTALL_MSG =~ "SSLError" || $INSTALL_MSG =~ "[CRYPTO]" ]] + then + echo "The setup script failed while pip was using HTTPS." + echo "On FIPS-enabled hosts running non-FIPS containers, this can indicate an OpenSSL/FIPS policy mismatch." + echo "Check the earlier Crypto/FIPS diagnostics in the CI log." + elif [[ $INSTALL_MSG =~ "HTTP error" ]] then echo "The setup script may have failed to fetch external dependencies" echo "Try re-running the \"make ats_environment\" script again on a machine that can access github" From bf9a014884b5f60e9ff096afbb1d2f876fce3f3d Mon Sep 17 00:00:00 2001 From: Joshua White Date: Sun, 9 Aug 2026 11:20:51 -0700 Subject: [PATCH 04/19] Attempt to bypass fips.so requirement --- scripts/ci_build_and_test_in_container.sh | 81 +++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/scripts/ci_build_and_test_in_container.sh b/scripts/ci_build_and_test_in_container.sh index 3098a0f96fe..4b9d72369c9 100755 --- a/scripts/ci_build_and_test_in_container.sh +++ b/scripts/ci_build_and_test_in_container.sh @@ -99,6 +99,83 @@ function print_phase_summary () { done } +function openssl_fips_provider_available () { + local fips_module_path + + for fips_module_path in \ + /usr/lib/x86_64-linux-gnu/ossl-modules/fips.so \ + /usr/lib/aarch64-linux-gnu/ossl-modules/fips.so \ + /usr/lib64/ossl-modules/fips.so \ + /usr/lib/ossl-modules/fips.so \ + /usr/local/lib64/ossl-modules/fips.so \ + /usr/local/lib/ossl-modules/fips.so; do + if [[ -f "${fips_module_path}" ]]; then + return 0 + fi + done + + return 1 +} + +function configure_openssl_for_non_fips_ubuntu_container () { + local fips_enabled="" + local openssl_conf_path=/tmp/geos-openssl-non-fips.cnf + + if [[ -r /proc/sys/crypto/fips_enabled ]]; then + fips_enabled="$(tr -d '[:space:]' < /proc/sys/crypto/fips_enabled)" + fi + + if [[ "${fips_enabled}" != "1" ]]; then + return 0 + fi + + if [[ ! -r /etc/os-release ]] || ! grep -Eq '^ID="?ubuntu"?$' /etc/os-release; then + return 0 + fi + + if [[ -e /etc/system-fips ]]; then + return 0 + fi + + if openssl_fips_provider_available; then + return 0 + fi + + export OPENSSL_FORCE_FIPS_MODE=0 + + if [[ -n "${OPENSSL_CONF:-}" ]]; then + echo "Host FIPS mode is visible in this Ubuntu container, but OPENSSL_CONF is already set to ${OPENSSL_CONF}; leaving it unchanged." + echo "Using OPENSSL_FORCE_FIPS_MODE=0 because no OpenSSL FIPS provider module was found." + return 0 + fi + + if ! cat > "${openssl_conf_path}" <<'EOF' +openssl_conf = openssl_init + +[openssl_init] +providers = provider_sect +alg_section = algorithm_sect + +[provider_sect] +default = default_sect + +[default_sect] +activate = 1 + +[algorithm_sect] +default_properties = fips=no +EOF + then + echo "WARNING: unable to write ${openssl_conf_path}; leaving OpenSSL configuration unchanged." + return 0 + fi + + export OPENSSL_CONF="${openssl_conf_path}" + + echo "Host FIPS mode is visible in this non-FIPS Ubuntu container, and no OpenSSL FIPS provider module was found." + echo "Using OPENSSL_CONF=${OPENSSL_CONF} so OpenSSL initializes the default provider for CI tooling." +} + function print_crypto_diagnostics () { echo "Crypto/FIPS diagnostics:" echo " uname: $(uname -a)" @@ -119,6 +196,9 @@ function print_crypto_diagnostics () { fi done grep -nEi 'fips|provider|default_properties|openssl_conf|activate' /etc/ssl/openssl.cnf /usr/lib/ssl/openssl.cnf 2>/dev/null | head -n 80 | sed 's/^/ openssl config match: /' || true + if [[ -n "${OPENSSL_CONF:-}" && -r "${OPENSSL_CONF}" ]]; then + grep -nEi 'fips|provider|default_properties|openssl_conf|activate' "${OPENSSL_CONF}" 2>/dev/null | head -n 80 | sed 's/^/ active openssl config match: /' || true + fi for var in OPENSSL_CONF OPENSSL_MODULES OPENSSL_FORCE_FIPS_MODE SSL_CERT_FILE CURL_CA_BUNDLE REQUESTS_CA_BUNDLE; do echo " ${var}: ${!var:-}" @@ -373,6 +453,7 @@ else GEOS_LA_INTERFACE=Trilinos fi +configure_openssl_for_non_fips_ubuntu_container print_crypto_diagnostics if [[ "${USE_SCCACHE}" == true ]]; then From e422d85669d5b383d480517d5bd7c27dda934d6f Mon Sep 17 00:00:00 2001 From: Joshua White Date: Sun, 9 Aug 2026 15:00:58 -0700 Subject: [PATCH 05/19] Make GCP upload optional; Try to re-enable local sccache optimization --- .github/workflows/build_and_test.yml | 122 +++++++++++++++++++-------- .github/workflows/ci_tests.yml | 4 +- 2 files changed, 90 insertions(+), 36 deletions(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 4374601ae5b..d9eac390669 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -49,6 +49,10 @@ on: GCP_BUCKET: required: false type: string + UPLOAD_TO_GCP: + required: false + type: boolean + default: false HOST_CONFIG: required: false type: string @@ -59,6 +63,10 @@ on: RUNS_ON: required: true type: string + SCCACHE_HOST_DIR: + required: false + type: string + default: '' USE_SCCACHE: required: false type: boolean @@ -127,7 +135,7 @@ jobs: fetch-depth: 1 - id: 'auth' - if: ${{ inputs.GCP_BUCKET || inputs.USE_SCCACHE }} + if: inputs.UPLOAD_TO_GCP && inputs.GCP_BUCKET uses: 'google-github-actions/auth@v2.1.10' with: credentials_json: '${{ secrets.GOOGLE_CLOUD_GCP }}' @@ -146,7 +154,7 @@ jobs: echo "GNUPGHOME=${GNUPGHOME}" >> "${GITHUB_ENV}" - name: 'Set up Cloud SDK' - if: inputs.GCP_BUCKET + if: inputs.UPLOAD_TO_GCP && inputs.GCP_BUCKET uses: 'google-github-actions/setup-gcloud@v2.1.4' with: version: '>= 363.0.0' @@ -158,6 +166,10 @@ jobs: docker_args=() script_args=() + # We need to know where the code folder is mounted inside the container so we can run the script at the proper location! + # Since this information is repeated twice, we use a variable. + GITHUB_WORKSPACE_MOUNT_POINT=/tmp/geos + if [[ -n "${{ inputs.NPROC }}" ]]; then NPROC=${{ inputs.NPROC }} script_args+=(--nproc ${NPROC}) @@ -173,15 +185,24 @@ jobs: SHORT_COMMIT=${COMMIT:0:7} script_args+=(--install-dir-basename GEOS-${SHORT_COMMIT}) - # All the data exchanged with the docker container is eventually meant to be sent to the cloud. - if [[ ! -z "${{ inputs.GCP_BUCKET }}" ]]; then - if [ "${{ inputs.BUILD_TYPE }}" = "build" ]; then - DATA_BASENAME=GEOS-and-TPL-${SHORT_COMMIT}.tar.gz - elif [ "${{ inputs.BUILD_TYPE }}" = "integrated_tests" ]; then - DATA_BASENAME=integratedTests-pr${{ github.event.number }}-${{ github.run_number }}-${SHORT_COMMIT}.tar.gz - script_args+=(--run-integrated-tests) - fi + if [[ "${{ inputs.UPLOAD_TO_GCP }}" == "true" && -z "${{ inputs.GCP_BUCKET }}" ]]; then + echo "::error::UPLOAD_TO_GCP=true requires GCP_BUCKET to be set." + exit 1 + fi + HAS_DATA_EXCHANGE=false + DATA_BASENAME= + DATA_EXCHANGE_DIR= + if [[ "${{ inputs.BUILD_TYPE }}" = "integrated_tests" ]]; then + HAS_DATA_EXCHANGE=true + DATA_BASENAME=integratedTests-pr${{ github.event.number }}-${{ github.run_number }}-${SHORT_COMMIT}.tar.gz + script_args+=(--run-integrated-tests) + elif [[ "${{ inputs.UPLOAD_TO_GCP }}" == "true" && -n "${{ inputs.GCP_BUCKET }}" ]]; then + HAS_DATA_EXCHANGE=true + DATA_BASENAME=GEOS-and-TPL-${SHORT_COMMIT}.tar.gz + fi + + if [[ "${HAS_DATA_EXCHANGE}" == "true" ]]; then script_args+=(--data-basename ${DATA_BASENAME}) DATA_EXCHANGE_DIR=${GITHUB_WORKSPACE}/geos-exchange # Exchange folder outside of the container @@ -197,12 +218,24 @@ jobs: script_args+=(${HOST_CONFIG:+"--host-config ${HOST_CONFIG}"}) if ${{ inputs.USE_SCCACHE }} == 'true'; then - script_args+=(--sccache-credentials $(basename ${GOOGLE_GHA_CREDS_PATH})) + SCCACHE_HOST_DIR="${{ inputs.SCCACHE_HOST_DIR }}" + if [[ -z "${SCCACHE_HOST_DIR}" ]]; then + case "${{ inputs.RUNS_ON }}" in + streak2*) + SCCACHE_HOST_DIR=/home/geos-data/sccache + ;; + *) + SCCACHE_HOST_DIR="${RUNNER_TEMP}/geos-sccache" + ;; + esac + fi + + mkdir -p "${SCCACHE_HOST_DIR}" + docker_args+=(--volume=${SCCACHE_HOST_DIR}:/sccache) + docker_args+=(-e SCCACHE_DIR=/sccache) + script_args+=(--use-sccache) fi - # We need to know where the code folder is mounted inside the container so we can run the script at the proper location! - # Since this information is repeated twice, we use a variable. - GITHUB_WORKSPACE_MOUNT_POINT=/tmp/geos docker_args+=(--volume=${GITHUB_WORKSPACE}:${GITHUB_WORKSPACE_MOUNT_POINT}) script_args+=(--repository ${GITHUB_WORKSPACE_MOUNT_POINT}) @@ -327,8 +360,35 @@ jobs: echo "Received exit status ${EXIT_STATUS} from the build process." set -e - # Send to the bucket and print the download link when it makes sense. - if [[ ! -z "${{ inputs.GCP_BUCKET }}" ]]; then + if [[ "${HAS_DATA_EXCHANGE}" == "true" ]]; then + if [ -f ${DATA_EXCHANGE_DIR}/${DATA_BASENAME} ]; then + echo "Generated artifact at ${DATA_EXCHANGE_DIR}/${DATA_BASENAME}" + fi + + if [ -f ${DATA_EXCHANGE_DIR}/test_logs_${DATA_BASENAME} ]; then + echo "Generated integrated test logs at ${DATA_EXCHANGE_DIR}/test_logs_${DATA_BASENAME}" + fi + + if [ -f ${DATA_EXCHANGE_DIR}/baseline_${DATA_BASENAME} ];then + if [[ -n "${{ inputs.LOCAL_BASELINE_DIR }}" ]]; then + # Copy baselines to local Streak2 storage even when cloud upload is disabled. + THIS_PR_NUMBER=pr${{ github.event.number }} + NEW_PR_BASELINE_FOLDER_NAME=baselines_${THIS_PR_NUMBER} + TARGET_DIR="${{ inputs.LOCAL_BASELINE_DIR }}/${NEW_PR_BASELINE_FOLDER_NAME}" + echo "Create folder ${TARGET_DIR}" + mkdir -p "${TARGET_DIR}" + + SOURCE_FILE="${DATA_EXCHANGE_DIR}/baseline_${DATA_BASENAME}" + echo "Copy ${SOURCE_FILE} to ${TARGET_DIR}" + cp "${SOURCE_FILE}" "${TARGET_DIR}" + fi + else + echo "Baselines ${DATA_EXCHANGE_DIR}/baseline_${DATA_BASENAME} were not generated. Likely because no rebaseline was necessary." + fi + fi + + # Send to the bucket and print the download link when explicitly enabled. + if [[ "${{ inputs.UPLOAD_TO_GCP }}" == "true" && -n "${{ inputs.GCP_BUCKET }}" ]]; then if [[ "${{ inputs.BUILD_TYPE }}" = "integrated_tests" || ${EXIT_STATUS} -eq 0 ]]; then # disable warning about parallel composite upload CLOUDSDK_PYTHON=python3 gcloud config set storage/parallel_composite_upload_enabled True @@ -344,29 +404,11 @@ jobs: fi if [ -f ${DATA_EXCHANGE_DIR}/baseline_${DATA_BASENAME} ];then - - if [[ -n "${{ inputs.LOCAL_BASELINE_DIR }}" ]]; then - # 1. We copy the baselines to a local directory to store them - - # 1.a Create the new target directory to store the new baselines - THIS_PR_NUMBER=pr${{ github.event.number }} - NEW_PR_BASELINE_FOLDER_NAME=baselines_${THIS_PR_NUMBER} - TARGET_DIR="${{ inputs.LOCAL_BASELINE_DIR }}/${NEW_PR_BASELINE_FOLDER_NAME}" - echo "Create folder ${TARGET_DIR}" - mkdir -p "${TARGET_DIR}" - - # 1.b We copy the new baselines to the new target directory - SOURCE_FILE="${DATA_EXCHANGE_DIR}/baseline_${DATA_BASENAME}" - echo "Copy ${SOURCE_FILE} to ${TARGET_DIR}" - cp "${SOURCE_FILE}" "${TARGET_DIR}" - fi - - # 2. We push the baselines to the cloud CLOUDSDK_PYTHON=python3 gcloud storage cp --quiet -a publicRead ${DATA_EXCHANGE_DIR}/baseline_${DATA_BASENAME} gs://${{ inputs.GCP_BUCKET }}/ echo "Download test baselines here: https://storage.googleapis.com/${{ inputs.GCP_BUCKET }}/baseline_${DATA_BASENAME}" echo "New baseline ID: baseline_${DATA_BASENAME::-7}" else - echo "Baselines ${DATA_EXCHANGE_DIR}/baseline_${DATA_BASENAME} were not uploaded. Likeyly because no rebaseline was necessary." + echo "Baselines ${DATA_EXCHANGE_DIR}/baseline_${DATA_BASENAME} were not uploaded. Likely because no rebaseline was necessary." fi fi fi @@ -402,6 +444,16 @@ jobs: REQUESTS_CA_BUNDLE: /etc/pki/tls/certs/ca-bundle.crt CURL_CA_BUNDLE: /etc/pki/tls/certs/ca-bundle.crt + - name: Show sccache stats + if: ${{ always() && inputs.USE_SCCACHE }} + run: | + SCCACHE_STATS_FILE="${GITHUB_WORKSPACE}/.sccache-runtime/stats.txt" + if [[ -f "${SCCACHE_STATS_FILE}" ]]; then + cat "${SCCACHE_STATS_FILE}" + else + echo "No in-container sccache stats file was captured." + fi + - name: 'Cleanup build folder' if: always() run: | diff --git a/.github/workflows/ci_tests.yml b/.github/workflows/ci_tests.yml index 8faeb3a44cc..bb593542cd4 100644 --- a/.github/workflows/ci_tests.yml +++ b/.github/workflows/ci_tests.yml @@ -247,6 +247,7 @@ jobs: ENABLE_TRILINOS: ${{ matrix.ENABLE_TRILINOS }} GEOS_ENABLE_BOUNDS_CHECK: ${{ matrix.GEOS_ENABLE_BOUNDS_CHECK }} GCP_BUCKET: ${{ matrix.GCP_BUCKET }} + UPLOAD_TO_GCP: ${{ matrix.UPLOAD_TO_GCP || false }} HOST_CONFIG: ${{ matrix.HOST_CONFIG }} NPROC: ${{ matrix.NPROC || '' }} RUNS_ON: ${{ matrix.RUNS_ON || 'ubuntu-22.04' }} @@ -270,11 +271,12 @@ jobs: ENABLE_TRILINOS: OFF GEOS_ENABLE_BOUNDS_CHECK: ON GCP_BUCKET: geosx/integratedTests + UPLOAD_TO_GCP: false RUNS_ON: streak2-32core NPROC: 32 DOCKER_RUN_ARGS: "--cpus=32 --memory=256g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" REQUIRED_LABEL: "ci: run integrated tests" - LOCAL_BASELINE_DIR: /data/GEOS/baselines + LOCAL_BASELINE_DIR: /home/geos-data/baselines HOST_CONFIG: /spack-generated.cmake baseline_log: From 3dbf9b722cbac01d94339fa200d9b5dfd2fc82e2 Mon Sep 17 00:00:00 2001 From: Joshua White Date: Sun, 9 Aug 2026 20:08:32 -0700 Subject: [PATCH 06/19] Fix sccache max size --- .github/workflows/build_and_test.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index d9eac390669..2406690783f 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -233,6 +233,9 @@ jobs: mkdir -p "${SCCACHE_HOST_DIR}" docker_args+=(--volume=${SCCACHE_HOST_DIR}:/sccache) docker_args+=(-e SCCACHE_DIR=/sccache) + if [[ -n "${SCCACHE_CACHE_SIZE:-}" ]]; then + docker_args+=(-e SCCACHE_CACHE_SIZE) + fi script_args+=(--use-sccache) fi From bafde664db23759df8f0f5aaaf3e46161b78908d Mon Sep 17 00:00:00 2001 From: Joshua White Date: Mon, 10 Aug 2026 12:02:06 -0700 Subject: [PATCH 07/19] Set RUNS_ON: streak2 for defaulting sccache configurations --- .github/workflows/ci_tests.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ci_tests.yml b/.github/workflows/ci_tests.yml index bb593542cd4..587526b77e9 100644 --- a/.github/workflows/ci_tests.yml +++ b/.github/workflows/ci_tests.yml @@ -174,6 +174,7 @@ jobs: ENABLE_HYPRE: ON ENABLE_TRILINOS: OFF GEOS_ENABLE_BOUNDS_CHECK: ON + RUNS_ON: streak2 HOST_CONFIG: /spack-generated.cmake # this keeps missing sccache so we are skipping it for now. @@ -195,6 +196,7 @@ jobs: ENABLE_TRILINOS: OFF BUILD_SHARED_LIBS: ON GEOS_ENABLE_BOUNDS_CHECK: OFF + RUNS_ON: streak2 HOST_CONFIG: /spack-generated.cmake - name: Rocky Linux 8 - gcc 12 @@ -204,6 +206,7 @@ jobs: ENABLE_TRILINOS: OFF BUILD_SHARED_LIBS: ON GEOS_ENABLE_BOUNDS_CHECK: ON + RUNS_ON: streak2 HOST_CONFIG: /spack-generated.cmake - name: Rocky Linux 8 - gcc 13 @@ -213,6 +216,7 @@ jobs: ENABLE_TRILINOS: OFF BUILD_SHARED_LIBS: ON GEOS_ENABLE_BOUNDS_CHECK: ON + RUNS_ON: streak2 HOST_CONFIG: /spack-generated.cmake - name: Rocky Linux 8 - clang 19 @@ -223,6 +227,7 @@ jobs: ENABLE_TRILINOS: OFF BUILD_SHARED_LIBS: ON GEOS_ENABLE_BOUNDS_CHECK: ON + RUNS_ON: streak2 HOST_CONFIG: /spack-generated.cmake - name: Rocky Linux 9 - clang 22 @@ -233,6 +238,7 @@ jobs: ENABLE_TRILINOS: OFF BUILD_SHARED_LIBS: ON GEOS_ENABLE_BOUNDS_CHECK: ON + RUNS_ON: streak2 HOST_CONFIG: /spack-generated.cmake uses: ./.github/workflows/build_and_test.yml From 293a90ca929d4a0c7ff0fcb347833fcc9e6dfca5 Mon Sep 17 00:00:00 2001 From: Joshua White Date: Mon, 10 Aug 2026 13:08:02 -0700 Subject: [PATCH 08/19] Address concurrency issue by fixing NPROC and memory args --- .github/workflows/ci_tests.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/ci_tests.yml b/.github/workflows/ci_tests.yml index 587526b77e9..0104c113a4c 100644 --- a/.github/workflows/ci_tests.yml +++ b/.github/workflows/ci_tests.yml @@ -175,6 +175,8 @@ jobs: ENABLE_TRILINOS: OFF GEOS_ENABLE_BOUNDS_CHECK: ON RUNS_ON: streak2 + NPROC: 8 + DOCKER_RUN_ARGS: "--cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake # this keeps missing sccache so we are skipping it for now. @@ -197,6 +199,8 @@ jobs: BUILD_SHARED_LIBS: ON GEOS_ENABLE_BOUNDS_CHECK: OFF RUNS_ON: streak2 + NPROC: 8 + DOCKER_RUN_ARGS: "--cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake - name: Rocky Linux 8 - gcc 12 @@ -207,6 +211,8 @@ jobs: BUILD_SHARED_LIBS: ON GEOS_ENABLE_BOUNDS_CHECK: ON RUNS_ON: streak2 + NPROC: 8 + DOCKER_RUN_ARGS: "--cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake - name: Rocky Linux 8 - gcc 13 @@ -217,6 +223,8 @@ jobs: BUILD_SHARED_LIBS: ON GEOS_ENABLE_BOUNDS_CHECK: ON RUNS_ON: streak2 + NPROC: 8 + DOCKER_RUN_ARGS: "--cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake - name: Rocky Linux 8 - clang 19 @@ -228,6 +236,8 @@ jobs: BUILD_SHARED_LIBS: ON GEOS_ENABLE_BOUNDS_CHECK: ON RUNS_ON: streak2 + NPROC: 8 + DOCKER_RUN_ARGS: "--cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake - name: Rocky Linux 9 - clang 22 @@ -239,6 +249,8 @@ jobs: BUILD_SHARED_LIBS: ON GEOS_ENABLE_BOUNDS_CHECK: ON RUNS_ON: streak2 + NPROC: 8 + DOCKER_RUN_ARGS: "--cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake uses: ./.github/workflows/build_and_test.yml From 17ace4d1d9eba4dba7772101b370319a0a630693 Mon Sep 17 00:00:00 2001 From: Joshua White Date: Mon, 10 Aug 2026 13:44:51 -0700 Subject: [PATCH 09/19] Try fixing CTEST_PARALLEL args for slow unit tests --- .github/workflows/ci_tests.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci_tests.yml b/.github/workflows/ci_tests.yml index 0104c113a4c..ecc2ce9e80a 100644 --- a/.github/workflows/ci_tests.yml +++ b/.github/workflows/ci_tests.yml @@ -268,6 +268,7 @@ jobs: UPLOAD_TO_GCP: ${{ matrix.UPLOAD_TO_GCP || false }} HOST_CONFIG: ${{ matrix.HOST_CONFIG }} NPROC: ${{ matrix.NPROC || '' }} + CTEST_PARALLEL_LEVEL: ${{ matrix.CTEST_PARALLEL_LEVEL || matrix.NPROC || '' }} RUNS_ON: ${{ matrix.RUNS_ON || 'ubuntu-22.04' }} secrets: inherit @@ -442,6 +443,7 @@ jobs: GEOS_ENABLE_BOUNDS_CHECK: ${{ matrix.GEOS_ENABLE_BOUNDS_CHECK }} HOST_CONFIG: ${{ matrix.HOST_CONFIG }} NPROC: ${{ matrix.NPROC }} + CTEST_PARALLEL_LEVEL: ${{ matrix.CTEST_PARALLEL_LEVEL || matrix.NPROC }} RUNS_ON: ${{ matrix.RUNS_ON }} REQUIRED_LABEL: "ci: run CUDA builds" secrets: inherit From 26b5b9091645b1f1fd9d217d83149562d93466f1 Mon Sep 17 00:00:00 2001 From: Joshua White Date: Mon, 10 Aug 2026 14:33:43 -0700 Subject: [PATCH 10/19] Move unit tests from streak2 back to github --- .github/workflows/ci_tests.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.github/workflows/ci_tests.yml b/.github/workflows/ci_tests.yml index ecc2ce9e80a..f2ae3dacf60 100644 --- a/.github/workflows/ci_tests.yml +++ b/.github/workflows/ci_tests.yml @@ -174,9 +174,6 @@ jobs: ENABLE_HYPRE: ON ENABLE_TRILINOS: OFF GEOS_ENABLE_BOUNDS_CHECK: ON - RUNS_ON: streak2 - NPROC: 8 - DOCKER_RUN_ARGS: "--cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake # this keeps missing sccache so we are skipping it for now. @@ -210,9 +207,6 @@ jobs: ENABLE_TRILINOS: OFF BUILD_SHARED_LIBS: ON GEOS_ENABLE_BOUNDS_CHECK: ON - RUNS_ON: streak2 - NPROC: 8 - DOCKER_RUN_ARGS: "--cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake - name: Rocky Linux 8 - gcc 13 @@ -222,9 +216,6 @@ jobs: ENABLE_TRILINOS: OFF BUILD_SHARED_LIBS: ON GEOS_ENABLE_BOUNDS_CHECK: ON - RUNS_ON: streak2 - NPROC: 8 - DOCKER_RUN_ARGS: "--cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake - name: Rocky Linux 8 - clang 19 From e5c035af052e2a979d287693f45e83f574db64ab Mon Sep 17 00:00:00 2001 From: Joshua White Date: Mon, 10 Aug 2026 15:16:14 -0700 Subject: [PATCH 11/19] Re-enable GCS sccache for gitub-runners --- .github/workflows/build_and_test.yml | 38 +++++++++++------------ scripts/ci_build_and_test_in_container.sh | 20 +++++++++++- 2 files changed, 38 insertions(+), 20 deletions(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 2406690783f..cde4a4e6b78 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -135,7 +135,7 @@ jobs: fetch-depth: 1 - id: 'auth' - if: inputs.UPLOAD_TO_GCP && inputs.GCP_BUCKET + if: ${{ (inputs.UPLOAD_TO_GCP && inputs.GCP_BUCKET) || (inputs.USE_SCCACHE && !startsWith(inputs.RUNS_ON, 'streak2')) }} uses: 'google-github-actions/auth@v2.1.10' with: credentials_json: '${{ secrets.GOOGLE_CLOUD_GCP }}' @@ -218,25 +218,25 @@ jobs: script_args+=(${HOST_CONFIG:+"--host-config ${HOST_CONFIG}"}) if ${{ inputs.USE_SCCACHE }} == 'true'; then - SCCACHE_HOST_DIR="${{ inputs.SCCACHE_HOST_DIR }}" - if [[ -z "${SCCACHE_HOST_DIR}" ]]; then - case "${{ inputs.RUNS_ON }}" in - streak2*) + case "${{ inputs.RUNS_ON }}" in + streak2*) + SCCACHE_HOST_DIR="${{ inputs.SCCACHE_HOST_DIR }}" + if [[ -z "${SCCACHE_HOST_DIR}" ]]; then SCCACHE_HOST_DIR=/home/geos-data/sccache - ;; - *) - SCCACHE_HOST_DIR="${RUNNER_TEMP}/geos-sccache" - ;; - esac - fi - - mkdir -p "${SCCACHE_HOST_DIR}" - docker_args+=(--volume=${SCCACHE_HOST_DIR}:/sccache) - docker_args+=(-e SCCACHE_DIR=/sccache) - if [[ -n "${SCCACHE_CACHE_SIZE:-}" ]]; then - docker_args+=(-e SCCACHE_CACHE_SIZE) - fi - script_args+=(--use-sccache) + fi + + mkdir -p "${SCCACHE_HOST_DIR}" + docker_args+=(--volume=${SCCACHE_HOST_DIR}:/sccache) + docker_args+=(-e SCCACHE_DIR=/sccache) + if [[ -n "${SCCACHE_CACHE_SIZE:-}" ]]; then + docker_args+=(-e SCCACHE_CACHE_SIZE) + fi + script_args+=(--use-sccache) + ;; + *) + script_args+=(--sccache-credentials $(basename ${GOOGLE_GHA_CREDS_PATH})) + ;; + esac fi docker_args+=(--volume=${GITHUB_WORKSPACE}:${GITHUB_WORKSPACE_MOUNT_POINT}) diff --git a/scripts/ci_build_and_test_in_container.sh b/scripts/ci_build_and_test_in_container.sh index 4b9d72369c9..d3c79353df3 100755 --- a/scripts/ci_build_and_test_in_container.sh +++ b/scripts/ci_build_and_test_in_container.sh @@ -317,6 +317,8 @@ Usage: $0 Run the integrated tests. Then bundle and send the results to the cloud. --use-sccache Enable sccache as compiler launcher. + --sccache-credentials credentials.json + Basename of the json credentials file to connect to the sccache cloud cache. --sccache-config config.toml Relative path to an sccache config file to use inside the container. --test-code-style @@ -330,7 +332,7 @@ exit 1 # Then we'll move to the build dir. or_die cd $(dirname $0)/.. -args=$(or_die getopt -a -o h --long build-exe-only,cmake-build-type:,cmake-cuda-architectures:,code-coverage,ctest-parallel-level:,data-basename:,geos-enable-bounds-check:,enable-hypre:,enable-hypre-device:,enable-trilinos:,exchange-dir:,host-config:,install-dir-basename:,makefile,ninja,no-install-schema,no-run-unit-tests,nproc:,repository:,run-integrated-tests,sccache-config:,test-code-style,test-documentation,use-native-architecture,use-sccache,help -- "$@") +args=$(or_die getopt -a -o h --long build-exe-only,cmake-build-type:,cmake-cuda-architectures:,code-coverage,ctest-parallel-level:,data-basename:,geos-enable-bounds-check:,enable-hypre:,enable-hypre-device:,enable-trilinos:,exchange-dir:,host-config:,install-dir-basename:,makefile,ninja,no-install-schema,no-run-unit-tests,nproc:,repository:,run-integrated-tests,sccache-credentials:,sccache-config:,test-code-style,test-documentation,use-native-architecture,use-sccache,help -- "$@") # Variables with default values BUILD_EXE_ONLY=false @@ -351,6 +353,7 @@ CTEST_PARALLEL_LEVEL_ARG="" NPROC="$(nproc)" GEOS_ENABLE_BOUNDS_CHECK=ON SCCACHE_BIN="" +SCCACHE_CREDS="" USE_SCCACHE=false CMAKE_CUDA_ARCHITECTURES_ARGS=() CMAKE_NATIVE_ARCHITECTURE_ARGS=() @@ -404,6 +407,7 @@ do --ctest-parallel-level) CTEST_PARALLEL_LEVEL_ARG=$2 shift 2;; + --sccache-credentials) SCCACHE_CREDS=$2; USE_SCCACHE=true; shift 2;; --sccache-config) SCCACHE_CONFIG_FILE=$2; shift 2;; --use-sccache) USE_SCCACHE=true; shift;; --test-code-style) TEST_CODE_STYLE=true; shift;; @@ -464,6 +468,20 @@ if [[ "${USE_SCCACHE}" == true ]]; then exit 1 fi + if [[ -n "${SCCACHE_CREDS:-}" ]]; then + # The credential json file is available at the root of the geos repository. + # We hereafter create the config file that points to it. + # We use this file since it's managed by the 'google-github-actions/auth' actions. + or_die mkdir -p ${HOME}/.config/sccache + or_die cat <> ${HOME}/.config/sccache/config +[cache.gcs] +rw_mode = "READ_WRITE" +cred_path = "${GEOS_SRC_DIR}/${SCCACHE_CREDS}" +bucket = "geos-dev" +key_prefix = "sccache" +EOT + fi + if [[ -n "${SCCACHE_CONFIG_FILE:-}" ]]; then if [[ ! -f "${GEOS_SRC_DIR}/${SCCACHE_CONFIG_FILE}" ]]; then echo "Unable to find requested sccache config file at ${GEOS_SRC_DIR}/${SCCACHE_CONFIG_FILE}." From 746ac1f065a2f0d105365072d599ea4eec3e6cd3 Mon Sep 17 00:00:00 2001 From: "Victor A. P. Magri" Date: Mon, 10 Aug 2026 22:28:12 -0400 Subject: [PATCH 12/19] Fix python issue --- scripts/ci_build_and_test_in_container.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/ci_build_and_test_in_container.sh b/scripts/ci_build_and_test_in_container.sh index 4b9d72369c9..8a7854edc77 100755 --- a/scripts/ci_build_and_test_in_container.sh +++ b/scripts/ci_build_and_test_in_container.sh @@ -688,6 +688,9 @@ if [[ "${RUN_INTEGRATED_TESTS}" = true ]]; then # We split the process in two steps. First installing the environment, then running the tests. phase_start "Build ATS environment" or_die cmake --build . --target ats_environment + # The system-site virtualenv inherits Ubuntu's NumPy 1.x-built Matplotlib, + # while the GEOS Python packages require NumPy 2.x. + or_die "${ATS_PYTHON_HOME}/bin/python3" -m pip install --disable-pip-version-check --upgrade matplotlib phase_finish 0 # The tests are not run using cmake (`cmake --build . --verbose --target ats_run`) From eef1913f198051a7ab39ec3970efae30798ce330 Mon Sep 17 00:00:00 2001 From: Joshua White Date: Tue, 11 Aug 2026 10:25:13 -0700 Subject: [PATCH 13/19] Disable isothm_mass_inj_table_02 tests temporarily --- .../compositionalMultiphaseWell.ats | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/inputFiles/compositionalMultiphaseWell/compositionalMultiphaseWell.ats b/inputFiles/compositionalMultiphaseWell/compositionalMultiphaseWell.ats index 38c63de3108..c42429d5e4a 100644 --- a/inputFiles/compositionalMultiphaseWell/compositionalMultiphaseWell.ats +++ b/inputFiles/compositionalMultiphaseWell/compositionalMultiphaseWell.ats @@ -85,14 +85,15 @@ decks = [ restart_step=13, check_step=26, restartcheck_params=RestartcheckParameters(**restartcheck_params)), - TestDeck( - name="isothm_mass_inj_table", - description= - "Isothermal mass injection constraint testing control switching", - partitions=[(1, 1, 1), (1, 2, 1)], - restart_step=24, - check_step=28, - restartcheck_params=RestartcheckParameters(**restartcheck_params)), + # Disabled for debugging. + # TestDeck( + # name="isothm_mass_inj_table", + # description= + # "Isothermal mass injection constraint testing control switching", + # partitions=[(1, 1, 1), (1, 2, 1)], + # restart_step=24, + # check_step=28, + # restartcheck_params=RestartcheckParameters(**restartcheck_params)), TestDeck( name="isothm_vol_inj_table", description= From 39be927c4c2ed1a5093d1929bd7d029225b2e074 Mon Sep 17 00:00:00 2001 From: Joshua White Date: Tue, 11 Aug 2026 16:14:40 -0700 Subject: [PATCH 14/19] Use host networking for streak2 Docker CI jobs to avoid bridge DNS failures --- .github/workflows/ci_tests.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci_tests.yml b/.github/workflows/ci_tests.yml index f2ae3dacf60..3dd6fccf843 100644 --- a/.github/workflows/ci_tests.yml +++ b/.github/workflows/ci_tests.yml @@ -163,7 +163,7 @@ jobs: GEOS_ENABLE_BOUNDS_CHECK: ON RUNS_ON: streak2 NPROC: 4 - DOCKER_RUN_ARGS: "--cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" + DOCKER_RUN_ARGS: "--network host --cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake - name: Ubuntu 24.04 - gcc 13 @@ -197,7 +197,7 @@ jobs: GEOS_ENABLE_BOUNDS_CHECK: OFF RUNS_ON: streak2 NPROC: 8 - DOCKER_RUN_ARGS: "--cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" + DOCKER_RUN_ARGS: "--network host --cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake - name: Rocky Linux 8 - gcc 12 @@ -228,7 +228,7 @@ jobs: GEOS_ENABLE_BOUNDS_CHECK: ON RUNS_ON: streak2 NPROC: 8 - DOCKER_RUN_ARGS: "--cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" + DOCKER_RUN_ARGS: "--network host --cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake - name: Rocky Linux 9 - clang 22 @@ -241,7 +241,7 @@ jobs: GEOS_ENABLE_BOUNDS_CHECK: ON RUNS_ON: streak2 NPROC: 8 - DOCKER_RUN_ARGS: "--cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" + DOCKER_RUN_ARGS: "--network host --cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake uses: ./.github/workflows/build_and_test.yml @@ -284,7 +284,7 @@ jobs: UPLOAD_TO_GCP: false RUNS_ON: streak2-32core NPROC: 32 - DOCKER_RUN_ARGS: "--cpus=32 --memory=256g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" + DOCKER_RUN_ARGS: "--network host --cpus=32 --memory=256g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" REQUIRED_LABEL: "ci: run integrated tests" LOCAL_BASELINE_DIR: /home/geos-data/baselines HOST_CONFIG: /spack-generated.cmake @@ -358,7 +358,7 @@ jobs: GEOS_ENABLE_BOUNDS_CHECK: OFF RUNS_ON: streak2 NPROC: 8 - DOCKER_RUN_ARGS: "--cpus=8 --memory=128g --runtime=nvidia -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" + DOCKER_RUN_ARGS: "--network host --cpus=8 --memory=128g --runtime=nvidia -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake - name: Ubuntu 24.04 - gcc 13 + CUDA 12.9.1 @@ -372,7 +372,7 @@ jobs: GEOS_ENABLE_BOUNDS_CHECK: OFF RUNS_ON: streak2 NPROC: 8 - DOCKER_RUN_ARGS: "--cpus=8 --memory=128g --runtime=nvidia -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" + DOCKER_RUN_ARGS: "--network host --cpus=8 --memory=128g --runtime=nvidia -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake - name: Ubuntu 24.04 - clang 19 + CUDA 12.9.1 @@ -386,7 +386,7 @@ jobs: GEOS_ENABLE_BOUNDS_CHECK: OFF RUNS_ON: streak2 NPROC: 8 - DOCKER_RUN_ARGS: "--cpus=8 --memory=128g --runtime=nvidia -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" + DOCKER_RUN_ARGS: "--network host --cpus=8 --memory=128g --runtime=nvidia -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake # - name: Rocky Linux 8 - clang 19 + CUDA 12.9.1 @@ -414,7 +414,7 @@ jobs: DOCKER_REPOSITORY: geosx/rockylinux8-gcc13-cuda12.9.1 RUNS_ON: streak2 NPROC: 8 - DOCKER_RUN_ARGS: "--cpus=8 --memory=128g --runtime=nvidia -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" + DOCKER_RUN_ARGS: "--network host --cpus=8 --memory=128g --runtime=nvidia -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake # Below this line, jobs that deploy to Google Cloud. From 42934e7918b6552924e09346d8c701b3eb948f38 Mon Sep 17 00:00:00 2001 From: Joshua White Date: Tue, 11 Aug 2026 16:36:10 -0700 Subject: [PATCH 15/19] Restore Docker bridge networking for streak2 CI jobs; Fixes outbound issue, but breaks sccache with collisions --- .github/workflows/ci_tests.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci_tests.yml b/.github/workflows/ci_tests.yml index 3dd6fccf843..f2ae3dacf60 100644 --- a/.github/workflows/ci_tests.yml +++ b/.github/workflows/ci_tests.yml @@ -163,7 +163,7 @@ jobs: GEOS_ENABLE_BOUNDS_CHECK: ON RUNS_ON: streak2 NPROC: 4 - DOCKER_RUN_ARGS: "--network host --cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" + DOCKER_RUN_ARGS: "--cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake - name: Ubuntu 24.04 - gcc 13 @@ -197,7 +197,7 @@ jobs: GEOS_ENABLE_BOUNDS_CHECK: OFF RUNS_ON: streak2 NPROC: 8 - DOCKER_RUN_ARGS: "--network host --cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" + DOCKER_RUN_ARGS: "--cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake - name: Rocky Linux 8 - gcc 12 @@ -228,7 +228,7 @@ jobs: GEOS_ENABLE_BOUNDS_CHECK: ON RUNS_ON: streak2 NPROC: 8 - DOCKER_RUN_ARGS: "--network host --cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" + DOCKER_RUN_ARGS: "--cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake - name: Rocky Linux 9 - clang 22 @@ -241,7 +241,7 @@ jobs: GEOS_ENABLE_BOUNDS_CHECK: ON RUNS_ON: streak2 NPROC: 8 - DOCKER_RUN_ARGS: "--network host --cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" + DOCKER_RUN_ARGS: "--cpus=8 --memory=192g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake uses: ./.github/workflows/build_and_test.yml @@ -284,7 +284,7 @@ jobs: UPLOAD_TO_GCP: false RUNS_ON: streak2-32core NPROC: 32 - DOCKER_RUN_ARGS: "--network host --cpus=32 --memory=256g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" + DOCKER_RUN_ARGS: "--cpus=32 --memory=256g -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" REQUIRED_LABEL: "ci: run integrated tests" LOCAL_BASELINE_DIR: /home/geos-data/baselines HOST_CONFIG: /spack-generated.cmake @@ -358,7 +358,7 @@ jobs: GEOS_ENABLE_BOUNDS_CHECK: OFF RUNS_ON: streak2 NPROC: 8 - DOCKER_RUN_ARGS: "--network host --cpus=8 --memory=128g --runtime=nvidia -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" + DOCKER_RUN_ARGS: "--cpus=8 --memory=128g --runtime=nvidia -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake - name: Ubuntu 24.04 - gcc 13 + CUDA 12.9.1 @@ -372,7 +372,7 @@ jobs: GEOS_ENABLE_BOUNDS_CHECK: OFF RUNS_ON: streak2 NPROC: 8 - DOCKER_RUN_ARGS: "--network host --cpus=8 --memory=128g --runtime=nvidia -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" + DOCKER_RUN_ARGS: "--cpus=8 --memory=128g --runtime=nvidia -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake - name: Ubuntu 24.04 - clang 19 + CUDA 12.9.1 @@ -386,7 +386,7 @@ jobs: GEOS_ENABLE_BOUNDS_CHECK: OFF RUNS_ON: streak2 NPROC: 8 - DOCKER_RUN_ARGS: "--network host --cpus=8 --memory=128g --runtime=nvidia -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" + DOCKER_RUN_ARGS: "--cpus=8 --memory=128g --runtime=nvidia -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake # - name: Rocky Linux 8 - clang 19 + CUDA 12.9.1 @@ -414,7 +414,7 @@ jobs: DOCKER_REPOSITORY: geosx/rockylinux8-gcc13-cuda12.9.1 RUNS_ON: streak2 NPROC: 8 - DOCKER_RUN_ARGS: "--network host --cpus=8 --memory=128g --runtime=nvidia -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" + DOCKER_RUN_ARGS: "--cpus=8 --memory=128g --runtime=nvidia -v /etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt:ro -v /etc/pki/tls/certs/ca-bundle.crt:/certs/ca-bundle.crt:ro" HOST_CONFIG: /spack-generated.cmake # Below this line, jobs that deploy to Google Cloud. From d82138ab31281f4ca3513ff2dd9553f163545cea Mon Sep 17 00:00:00 2001 From: Joshua White Date: Tue, 11 Aug 2026 20:47:49 -0700 Subject: [PATCH 16/19] Cleanup to remove debugging code / verbosity --- .github/workflows/build_and_test.yml | 9 +- .../compositionalMultiphaseWell.ats | 2 +- scripts/ci_build_and_test_in_container.sh | 114 +++++++----------- scripts/setupPythonEnvironment.bash | 6 +- 4 files changed, 53 insertions(+), 78 deletions(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index cde4a4e6b78..40b6e3ca90f 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -166,8 +166,7 @@ jobs: docker_args=() script_args=() - # We need to know where the code folder is mounted inside the container so we can run the script at the proper location! - # Since this information is repeated twice, we use a variable. + # Keep the repository mount point consistent between Docker and script args. GITHUB_WORKSPACE_MOUNT_POINT=/tmp/geos if [[ -n "${{ inputs.NPROC }}" ]]; then @@ -217,7 +216,7 @@ jobs: HOST_CONFIG=${{ inputs.HOST_CONFIG }} script_args+=(${HOST_CONFIG:+"--host-config ${HOST_CONFIG}"}) - if ${{ inputs.USE_SCCACHE }} == 'true'; then + if [[ "${{ inputs.USE_SCCACHE }}" == "true" ]]; then case "${{ inputs.RUNS_ON }}" in streak2*) SCCACHE_HOST_DIR="${{ inputs.SCCACHE_HOST_DIR }}" @@ -447,12 +446,12 @@ jobs: REQUESTS_CA_BUNDLE: /etc/pki/tls/certs/ca-bundle.crt CURL_CA_BUNDLE: /etc/pki/tls/certs/ca-bundle.crt - - name: Show sccache stats + - name: Show sccache summary if: ${{ always() && inputs.USE_SCCACHE }} run: | SCCACHE_STATS_FILE="${GITHUB_WORKSPACE}/.sccache-runtime/stats.txt" if [[ -f "${SCCACHE_STATS_FILE}" ]]; then - cat "${SCCACHE_STATS_FILE}" + grep -E '^(Compile requests|Cache hits|Cache misses|Cache timeouts|Cache read errors|Cache write errors|Compilation failures|Cache errors|Non-cacheable compilations|Non-cacheable calls|Cache location|Cache size|Max cache size|Version \(client\))' "${SCCACHE_STATS_FILE}" || cat "${SCCACHE_STATS_FILE}" else echo "No in-container sccache stats file was captured." fi diff --git a/inputFiles/compositionalMultiphaseWell/compositionalMultiphaseWell.ats b/inputFiles/compositionalMultiphaseWell/compositionalMultiphaseWell.ats index c42429d5e4a..973c56eaa28 100644 --- a/inputFiles/compositionalMultiphaseWell/compositionalMultiphaseWell.ats +++ b/inputFiles/compositionalMultiphaseWell/compositionalMultiphaseWell.ats @@ -85,7 +85,7 @@ decks = [ restart_step=13, check_step=26, restartcheck_params=RestartcheckParameters(**restartcheck_params)), - # Disabled for debugging. + # Temporarily disabled; this problematic test will be fixed in a separate PR. # TestDeck( # name="isothm_mass_inj_table", # description= diff --git a/scripts/ci_build_and_test_in_container.sh b/scripts/ci_build_and_test_in_container.sh index 3733d555495..ca21f7917bb 100755 --- a/scripts/ci_build_and_test_in_container.sh +++ b/scripts/ci_build_and_test_in_container.sh @@ -55,7 +55,6 @@ function format_duration () { function phase_start () { CURRENT_PHASE_LABEL="$1" CURRENT_PHASE_START="$(now_epoch)" - echo ">>> ${CURRENT_PHASE_LABEL} started at $(date -u +"%Y-%m-%dT%H:%M:%SZ")" } function phase_finish () { @@ -177,40 +176,43 @@ EOF } function print_crypto_diagnostics () { - echo "Crypto/FIPS diagnostics:" - echo " uname: $(uname -a)" + local fips_enabled="" - if [[ -r /etc/os-release ]]; then - sed 's/^/ os-release: /' /etc/os-release + if [[ -r /proc/sys/crypto/fips_enabled ]]; then + fips_enabled="$(tr -d '[:space:]' < /proc/sys/crypto/fips_enabled)" fi - for path in /proc/sys/crypto/fips_enabled /etc/system-fips /etc/ssl/openssl.cnf /usr/lib/ssl/openssl.cnf; do - if [[ -e "${path}" ]]; then - if [[ -r "${path}" && ! -d "${path}" ]]; then - echo " ${path}: $(head -n 1 "${path}" 2>/dev/null || true)" - else - echo " ${path}: present" - fi - else - echo " ${path}: absent" - fi - done - grep -nEi 'fips|provider|default_properties|openssl_conf|activate' /etc/ssl/openssl.cnf /usr/lib/ssl/openssl.cnf 2>/dev/null | head -n 80 | sed 's/^/ openssl config match: /' || true - if [[ -n "${OPENSSL_CONF:-}" && -r "${OPENSSL_CONF}" ]]; then - grep -nEi 'fips|provider|default_properties|openssl_conf|activate' "${OPENSSL_CONF}" 2>/dev/null | head -n 80 | sed 's/^/ active openssl config match: /' || true + if [[ "${fips_enabled}" != "1" && -z "${OPENSSL_CONF:-}" && -z "${OPENSSL_FORCE_FIPS_MODE:-}" ]]; then + return 0 fi - for var in OPENSSL_CONF OPENSSL_MODULES OPENSSL_FORCE_FIPS_MODE SSL_CERT_FILE CURL_CA_BUNDLE REQUESTS_CA_BUNDLE; do + echo "Crypto/FIPS summary:" + + if [[ -r /etc/os-release ]]; then + # shellcheck disable=SC1091 + . /etc/os-release + echo " os: ${PRETTY_NAME:-${ID:-unknown}}" + fi + + echo " host fips_enabled: ${fips_enabled:-unavailable}" + echo " container /etc/system-fips: $(if [[ -e /etc/system-fips ]]; then echo present; else echo absent; fi)" + echo " openssl fips provider module: $(if openssl_fips_provider_available; then echo present; else echo absent; fi)" + + for var in OPENSSL_CONF OPENSSL_MODULES OPENSSL_FORCE_FIPS_MODE; do echo " ${var}: ${!var:-}" done if command -v openssl >/dev/null 2>&1; then - echo " openssl path: $(command -v openssl)" - openssl version -a 2>&1 | sed 's/^/ openssl version: /' || true - openssl list -providers -verbose 2>&1 | sed 's/^/ openssl providers: /' || true - openssl md5 /dev/null 2>&1 | sed 's/^/ openssl md5: /' || true - openssl sha256 /dev/null 2>&1 | sed 's/^/ openssl sha256: /' || true - openssl rand -hex 8 2>&1 | sed 's/^/ openssl rand: /' || true + openssl version 2>&1 | sed 's/^/ openssl version: /' || true + if openssl md5 /dev/null >/dev/null 2>&1 && openssl rand -hex 8 >/dev/null 2>&1; then + echo " openssl smoke test: ok" + else + echo " openssl smoke test: failed" + openssl list -providers 2>&1 | sed 's/^/ openssl providers: /' || true + if [[ -n "${OPENSSL_CONF:-}" && -r "${OPENSSL_CONF}" ]]; then + grep -Ei '^(openssl_conf|providers|alg_section|activate|default_properties)' "${OPENSSL_CONF}" 2>/dev/null | sed 's/^/ active openssl config: /' || true + fi + fi else echo " openssl: not found" fi @@ -220,36 +222,25 @@ function print_crypto_diagnostics () { import hashlib import os import ssl -import sys -print("executable:", sys.executable) -print("version:", sys.version.replace("\n", " ")) print("ssl:", ssl.OPENSSL_VERSION) -print("default verify paths:", ssl.get_default_verify_paths()) -for name in ("md5", "sha1", "sha256"): - try: - digest = getattr(hashlib, name)(b"geos").hexdigest() - print(f"hashlib {name}: ok {digest}") - except Exception as exc: - print(f"hashlib {name}: failed {type(exc).__name__}: {exc}") +try: + hashlib.md5(b"geos").hexdigest() + hashlib.sha256(b"geos").hexdigest() + print("hashlib smoke test: ok") +except Exception as exc: + print(f"hashlib smoke test: failed {type(exc).__name__}: {exc}") try: - print("os.urandom:", os.urandom(8).hex()) + os.urandom(8) + print("os.urandom smoke test: ok") except Exception as exc: - print(f"os.urandom: failed {type(exc).__name__}: {exc}") + print(f"os.urandom smoke test: failed {type(exc).__name__}: {exc}") PY else echo " python3: not found" fi - - if command -v sccache >/dev/null 2>&1; then - echo " sccache path: $(command -v sccache)" - sccache --version 2>&1 | sed 's/^/ sccache version: /' || true - ldd "$(command -v sccache)" 2>&1 | sed 's/^/ sccache ldd: /' || true - else - echo " sccache: not found" - fi } function bootstrap_pip () { @@ -319,8 +310,6 @@ Usage: $0 Enable sccache as compiler launcher. --sccache-credentials credentials.json Basename of the json credentials file to connect to the sccache cloud cache. - --sccache-config config.toml - Relative path to an sccache config file to use inside the container. --test-code-style --test-documentation -h | --help @@ -332,7 +321,7 @@ exit 1 # Then we'll move to the build dir. or_die cd $(dirname $0)/.. -args=$(or_die getopt -a -o h --long build-exe-only,cmake-build-type:,cmake-cuda-architectures:,code-coverage,ctest-parallel-level:,data-basename:,geos-enable-bounds-check:,enable-hypre:,enable-hypre-device:,enable-trilinos:,exchange-dir:,host-config:,install-dir-basename:,makefile,ninja,no-install-schema,no-run-unit-tests,nproc:,repository:,run-integrated-tests,sccache-credentials:,sccache-config:,test-code-style,test-documentation,use-native-architecture,use-sccache,help -- "$@") +args=$(or_die getopt -a -o h --long build-exe-only,cmake-build-type:,cmake-cuda-architectures:,code-coverage,ctest-parallel-level:,data-basename:,geos-enable-bounds-check:,enable-hypre:,enable-hypre-device:,enable-trilinos:,exchange-dir:,host-config:,install-dir-basename:,makefile,ninja,no-install-schema,no-run-unit-tests,nproc:,repository:,run-integrated-tests,sccache-credentials:,test-code-style,test-documentation,use-native-architecture,use-sccache,help -- "$@") # Variables with default values BUILD_EXE_ONLY=false @@ -408,7 +397,6 @@ do CTEST_PARALLEL_LEVEL_ARG=$2 shift 2;; --sccache-credentials) SCCACHE_CREDS=$2; USE_SCCACHE=true; shift 2;; - --sccache-config) SCCACHE_CONFIG_FILE=$2; shift 2;; --use-sccache) USE_SCCACHE=true; shift;; --test-code-style) TEST_CODE_STYLE=true; shift;; --test-documentation) TEST_DOCUMENTATION=true; shift;; @@ -482,17 +470,7 @@ key_prefix = "sccache" EOT fi - if [[ -n "${SCCACHE_CONFIG_FILE:-}" ]]; then - if [[ ! -f "${GEOS_SRC_DIR}/${SCCACHE_CONFIG_FILE}" ]]; then - echo "Unable to find requested sccache config file at ${GEOS_SRC_DIR}/${SCCACHE_CONFIG_FILE}." - exit 1 - fi - - or_die mkdir -p ${HOME}/.config/sccache - or_die cp "${GEOS_SRC_DIR}/${SCCACHE_CONFIG_FILE}" "${HOME}/.config/sccache/config" - fi - - # Backend-specific credentials and endpoints are injected through the environment and/or config file. + # Backend-specific credentials and endpoints are injected through the environment or generated config. SCCACHE_CMAKE_ARGS="-DCMAKE_C_COMPILER_LAUNCHER=${SCCACHE_BIN} -DCMAKE_CXX_COMPILER_LAUNCHER=${SCCACHE_BIN} -DCMAKE_CUDA_COMPILER_LAUNCHER=${SCCACHE_BIN}" if [[ -f /certs/ca-bundle.crt ]]; then @@ -501,8 +479,7 @@ EOT export REQUESTS_CA_BUNDLE=/certs/ca-bundle.crt fi - echo "sccache initial state" - ${SCCACHE_BIN} --show-stats || true + echo "sccache enabled: ${SCCACHE_BIN}, cache directory: ${SCCACHE_DIR:-default}" fi if [ -z "${NPROC}" ]; then @@ -524,7 +501,7 @@ if [[ "${RUN_INTEGRATED_TESTS}" = true ]]; then ATS_PYTHON_HOME=/tmp/run_integrated_tests_virtualenv if ! python3 -m venv --system-site-packages "${ATS_PYTHON_HOME}" || ! "${ATS_PYTHON_HOME}/bin/python3" -c 'import setuptools, wheel' >/dev/null 2>&1; then - echo "The ATS virtualenv is missing distro Python build tools; installing them and recreating the virtualenv." + echo "ATS virtualenv lacks required Python packaging modules; installing distro packages and recreating it." rm -rf "${ATS_PYTHON_HOME}" or_die apt-get update or_die apt-get install -y python3-dev python3-venv python3-setuptools python3-wheel @@ -664,11 +641,11 @@ fi phase_finish 0 if [[ -n "${SCCACHE_BIN}" ]]; then - echo "sccache post-build state" + echo "Capturing sccache post-build stats" SCCACHE_STATS_FILE="${GEOS_SRC_DIR}/.sccache-runtime/stats.txt" or_die mkdir -p "$(dirname "${SCCACHE_STATS_FILE}")" - ${SCCACHE_BIN} --show-adv-stats | tee "${SCCACHE_STATS_FILE}" - SCCACHE_STATS_STATUS=${PIPESTATUS[0]} + ${SCCACHE_BIN} --show-adv-stats > "${SCCACHE_STATS_FILE}" + SCCACHE_STATS_STATUS=$? if [[ ${SCCACHE_STATS_STATUS} != 0 ]]; then echo ERROR ${SCCACHE_STATS_STATUS} command: ${SCCACHE_BIN} --show-adv-stats exit ${SCCACHE_STATS_STATUS} @@ -741,7 +718,7 @@ if [[ "${RUN_INTEGRATED_TESTS}" = true ]]; then cat $tempdir/log_check.txt phase_finish "${LOG_CHECK_STATUS}" - if grep -q "Overall status: PASSED" "$tempdir/log_check.txt"; then + if [[ "${ATS_RUN_STATUS}" -eq 0 && "${LOG_CHECK_STATUS}" -eq 0 ]] && grep -q "Overall status: PASSED" "$tempdir/log_check.txt"; then echo "IntegratedTests passed. No rebaseline required." INTEGRATED_TEST_EXIT_STATUS=0 else @@ -763,7 +740,6 @@ if [[ "${RUN_INTEGRATED_TESTS}" = true ]]; then echo "Done!" - # INTEGRATED_TEST_EXIT_STATUS=$? echo "The return code of the integrated tests is ${INTEGRATED_TEST_EXIT_STATUS}" fi diff --git a/scripts/setupPythonEnvironment.bash b/scripts/setupPythonEnvironment.bash index b53bdd0e040..c25a0026f9c 100755 --- a/scripts/setupPythonEnvironment.bash +++ b/scripts/setupPythonEnvironment.bash @@ -7,7 +7,7 @@ PYTHON_TARGET= BIN_DIR= PACKAGE_DIR= TMP_CLONE_DIR= -declare -a PIP_INSTALL_ARGS=(--disable-pip-version-check install --no-build-isolation --upgrade) +declare -a PIP_INSTALL_ARGS=(--disable-pip-version-check install --upgrade) PACKAGE_BRANCH=main @@ -159,11 +159,11 @@ do then echo $INSTALL_MSG - if [[ $INSTALL_MSG =~ "SSLError" || $INSTALL_MSG =~ "[CRYPTO]" ]] + if [[ $INSTALL_MSG == *SSLError* || $INSTALL_MSG == *"[CRYPTO]"* ]] then echo "The setup script failed while pip was using HTTPS." echo "On FIPS-enabled hosts running non-FIPS containers, this can indicate an OpenSSL/FIPS policy mismatch." - echo "Check the earlier Crypto/FIPS diagnostics in the CI log." + echo "Check the earlier Crypto/FIPS summary in the CI log." elif [[ $INSTALL_MSG =~ "HTTP error" ]] then echo "The setup script may have failed to fetch external dependencies" From 9bef5e5f52fb912f1ed97118d2adc192274a9598 Mon Sep 17 00:00:00 2001 From: Joshua White Date: Wed, 12 Aug 2026 10:50:14 -0700 Subject: [PATCH 17/19] Update HPCReach submodule --- src/coreComponents/constitutive/HPCReact | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreComponents/constitutive/HPCReact b/src/coreComponents/constitutive/HPCReact index 5268dc5c2a5..7423e3e2cd5 160000 --- a/src/coreComponents/constitutive/HPCReact +++ b/src/coreComponents/constitutive/HPCReact @@ -1 +1 @@ -Subproject commit 5268dc5c2a59e9dae23f435fba9aecf5a5c5de33 +Subproject commit 7423e3e2cd55e959d9a823ab8241351f8b1087df From 787c29d03e975cbbced9932617cfe1e6c482bfb2 Mon Sep 17 00:00:00 2001 From: "Victor A. P. Magri" Date: Wed, 12 Aug 2026 14:00:20 -0400 Subject: [PATCH 18/19] Reduce integrated test runtimes - Add reduced smoke-test inputs and meshes - Shorten long-running schedules and checkpoint cadence - Preserve tutorial inputs, solvers, and validation coverage --- .../Egg/compositionalMultiphaseWell_Egg.ats | 4 +- .../Egg/deadOilEgg_base_direct_smoke.xml | 453 ++++++++++++++++ .../Egg/deadOilEgg_smoke_3d_smoke.xml | 412 +++++++++++++++ .../compositionalMultiphaseWell.ats | 30 +- .../dead_oil_wells_hybrid_2d_smoke.xml | 295 +++++++++++ .../dome_kvalue_base_smoke.xml | 401 ++++++++++++++ .../dome_kvalue_smoke_smoke.xml | 7 + .../dome_soreide_whitson_base_smoke.xml | 377 ++++++++++++++ .../dome_soreide_whitson_smoke_smoke.xml | 7 + .../staged_close_perf_1_smoke.xml | 64 +++ .../staged_close_perf_2_smoke.xml | 56 ++ .../staged_open_perf_1_smoke.xml | 55 ++ .../staged_open_perf_2_smoke.xml | 56 ++ .../staged_perf_base_smoke.xml | 197 +++++++ .../staircase_co2_wells_hybrid_3d_smoke.xml | 237 +++++++++ ...oughness_Storage_Dominated_smoke_smoke.xml | 137 +++++ .../pknViscosityDominated_smoke_smoke.xml | 121 +++++ ...ase_SPE10_layer84_base_iterative_smoke.xml | 246 +++++++++ ...PE10_layer84_benchmark_iterative_smoke.xml | 54 ++ .../ALM_TFrac_smoke_smoke.xml | 89 ++++ ...ontactBubbleStab_FixedSlip_smoke_smoke.xml | 93 ++++ ...oElastic_hybridHexPrism_co2_base_smoke.xml | 269 ++++++++++ ...lastic_hybridHexPrism_co2_fim_3d_smoke.xml | 42 ++ ...hybridHexPrism_co2_sequential_3d_smoke.xml | 54 ++ ...stic_staircase_co2_3d_sequential_smoke.xml | 167 ++++++ .../validationCase/validationCase_smoke.xml | 487 ++++++++++++++++++ .../poromechanics/poroElasticCoupling.ats | 2 +- ...sePoromechanics_curvedFrac_smoke_smoke.xml | 200 +++++++ ...sePoromechanics_curvedFrac_smoke_smoke.xml | 164 ++++++ .../curvedFrac_smoke_smoke.xml | 71 +++ ...sePoromechanics_FaultModel_smoke_smoke.xml | 126 +++++ ...hanics_FaultModel_well_fim_smoke_smoke.xml | 138 +++++ .../MESH/Domain_Mesh_FaultModel_smoke.vtu | 50 ++ .../MESH/Fault_Mesh_FaultModel_smoke.vtu | 52 ++ .../MESH/curvedFrac_domain_smoke.vtu | 44 ++ .../MESH/curvedFrac_fracture_smoke.vtu | 55 ++ .../MESH/curvedFrac_smoke.vtm | 7 + .../MESH/verticalFault_ExternalMesh_smoke.vtm | 13 + ...FieldCaseTutorial3_Thermal_smoke_smoke.xml | 77 +++ .../pebi3d_with_properties_smoke.vtu | 50 ++ .../acouselas3D_Q2_abc_smoke_smoke.xml | 154 ++++++ scripts/generateReducedSmokeMeshes.py | 301 +++++++++++ 42 files changed, 5896 insertions(+), 18 deletions(-) create mode 100644 inputFiles/compositionalMultiphaseWell/benchmarks/Egg/deadOilEgg_base_direct_smoke.xml create mode 100644 inputFiles/compositionalMultiphaseWell/benchmarks/Egg/deadOilEgg_smoke_3d_smoke.xml create mode 100644 inputFiles/compositionalMultiphaseWell/dead_oil_wells_hybrid_2d_smoke.xml create mode 100644 inputFiles/compositionalMultiphaseWell/dome_kvalue_base_smoke.xml create mode 100644 inputFiles/compositionalMultiphaseWell/dome_kvalue_smoke_smoke.xml create mode 100644 inputFiles/compositionalMultiphaseWell/dome_soreide_whitson_base_smoke.xml create mode 100644 inputFiles/compositionalMultiphaseWell/dome_soreide_whitson_smoke_smoke.xml create mode 100644 inputFiles/compositionalMultiphaseWell/staged_close_perf_1_smoke.xml create mode 100644 inputFiles/compositionalMultiphaseWell/staged_close_perf_2_smoke.xml create mode 100644 inputFiles/compositionalMultiphaseWell/staged_open_perf_1_smoke.xml create mode 100644 inputFiles/compositionalMultiphaseWell/staged_open_perf_2_smoke.xml create mode 100644 inputFiles/compositionalMultiphaseWell/staged_perf_base_smoke.xml create mode 100644 inputFiles/compositionalMultiphaseWell/staircase_co2_wells_hybrid_3d_smoke.xml create mode 100644 inputFiles/hydraulicFracturing/kgdToughness_Storage_Dominated_smoke_smoke.xml create mode 100644 inputFiles/hydraulicFracturing/pknViscosityDominated_smoke_smoke.xml create mode 100644 inputFiles/immiscibleMultiphaseFlow/immiscibleTwoPhase_SPE10_layer84/immiscibleTwoPhase_SPE10_layer84_base_iterative_smoke.xml create mode 100644 inputFiles/immiscibleMultiphaseFlow/immiscibleTwoPhase_SPE10_layer84/immiscibleTwoPhase_SPE10_layer84_benchmark_iterative_smoke.xml create mode 100644 inputFiles/lagrangianContactMechanics/ALM_TFrac_smoke_smoke.xml create mode 100644 inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_FixedSlip_smoke_smoke.xml create mode 100644 inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_base_smoke.xml create mode 100644 inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_fim_3d_smoke.xml create mode 100644 inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_sequential_3d_smoke.xml create mode 100644 inputFiles/poromechanics/PoroElastic_staircase_co2_3d_sequential_smoke.xml create mode 100644 inputFiles/poromechanics/nonlinearAcceleration/validationCase/validationCase_smoke.xml create mode 100644 inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/ALM_multiphasePoromechanics_curvedFrac_smoke_smoke.xml create mode 100644 inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/ALM_singlephasePoromechanics_curvedFrac_smoke_smoke.xml create mode 100644 inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/curvedFrac_smoke_smoke.xml create mode 100644 inputFiles/poromechanicsFractures/Contact/LagrangianMultipliers/multiphasePoromechanics_FaultModel_smoke_smoke.xml create mode 100644 inputFiles/poromechanicsFractures/Contact/LagrangianMultipliers/multiphasePoromechanics_FaultModel_well_fim_smoke_smoke.xml create mode 100644 inputFiles/poromechanicsFractures/MESH/Domain_Mesh_FaultModel_smoke.vtu create mode 100644 inputFiles/poromechanicsFractures/MESH/Fault_Mesh_FaultModel_smoke.vtu create mode 100644 inputFiles/poromechanicsFractures/MESH/curvedFrac_domain_smoke.vtu create mode 100644 inputFiles/poromechanicsFractures/MESH/curvedFrac_fracture_smoke.vtu create mode 100644 inputFiles/poromechanicsFractures/MESH/curvedFrac_smoke.vtm create mode 100644 inputFiles/poromechanicsFractures/MESH/verticalFault_ExternalMesh_smoke.vtm create mode 100644 inputFiles/singlePhaseFlow/FieldCaseTutorial3_Thermal_smoke_smoke.xml create mode 100644 inputFiles/singlePhaseFlow/pebi3d_with_properties_smoke.vtu create mode 100644 inputFiles/wavePropagation/acouselas3D_Q2_abc_smoke_smoke.xml create mode 100644 scripts/generateReducedSmokeMeshes.py diff --git a/inputFiles/compositionalMultiphaseWell/benchmarks/Egg/compositionalMultiphaseWell_Egg.ats b/inputFiles/compositionalMultiphaseWell/benchmarks/Egg/compositionalMultiphaseWell_Egg.ats index b36b208a1f1..d1eb564b7ea 100644 --- a/inputFiles/compositionalMultiphaseWell/benchmarks/Egg/compositionalMultiphaseWell_Egg.ats +++ b/inputFiles/compositionalMultiphaseWell/benchmarks/Egg/compositionalMultiphaseWell_Egg.ats @@ -12,8 +12,8 @@ decks = [ partitions=[ (1, 1, 1), ], - restart_step=20, - check_step=35, + restart_step=1, + check_step=3, restartcheck_params=RestartcheckParameters(**restartcheck_params)), ] diff --git a/inputFiles/compositionalMultiphaseWell/benchmarks/Egg/deadOilEgg_base_direct_smoke.xml b/inputFiles/compositionalMultiphaseWell/benchmarks/Egg/deadOilEgg_base_direct_smoke.xml new file mode 100644 index 00000000000..66f4df4d359 --- /dev/null +++ b/inputFiles/compositionalMultiphaseWell/benchmarks/Egg/deadOilEgg_base_direct_smoke.xml @@ -0,0 +1,453 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/compositionalMultiphaseWell/benchmarks/Egg/deadOilEgg_smoke_3d_smoke.xml b/inputFiles/compositionalMultiphaseWell/benchmarks/Egg/deadOilEgg_smoke_3d_smoke.xml new file mode 100644 index 00000000000..14984888cd2 --- /dev/null +++ b/inputFiles/compositionalMultiphaseWell/benchmarks/Egg/deadOilEgg_smoke_3d_smoke.xml @@ -0,0 +1,412 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/compositionalMultiphaseWell/compositionalMultiphaseWell.ats b/inputFiles/compositionalMultiphaseWell/compositionalMultiphaseWell.ats index 38c63de3108..ede22404894 100644 --- a/inputFiles/compositionalMultiphaseWell/compositionalMultiphaseWell.ats +++ b/inputFiles/compositionalMultiphaseWell/compositionalMultiphaseWell.ats @@ -42,8 +42,8 @@ decks = [ description= "Dead oil well test (2D displacement, hybrid FVM, 3-phase dead-oil, 3 wells)", partitions=[(1, 1, 1), (2, 2, 1)], - restart_step=50, - check_step=100, + restart_step=10, + check_step=20, restartcheck_params=RestartcheckParameters(**restartcheck_params)), TestDeck( name="black_oil_wells_saturated_3d", @@ -75,7 +75,7 @@ decks = [ "CO2 well test (3D staircase, unstructured mesh, hybrid FVM, 2-phase 2-component, 2 wells)", partitions=[(1, 1, 1), (2, 2, 2)], restart_step=0, - check_step=17, + check_step=5, restartcheck_params=RestartcheckParameters(**restartcheck_params)), TestDeck( name="black_oil_wells_saturated_3d_stone2", @@ -106,46 +106,46 @@ decks = [ description= "Vertical well with perfortion plugging schedule, perfs are closed from bottom to top", partitions=[(1, 1, 1), (1, 1, 4)], - restart_step=65, - check_step=195, + restart_step=5, + check_step=15, restartcheck_params=RestartcheckParameters(**restartcheck_params)), TestDeck( name="staged_close_perf_2", description= "Vertical well with perfortion plugging schedule, perfs are closed from top to bottom", partitions=[(1, 1, 1), (1, 1, 4)], - restart_step=65, - check_step=195, + restart_step=5, + check_step=15, restartcheck_params=RestartcheckParameters(**restartcheck_params)), TestDeck( name="staged_open_perf_1", description= "Vertical well with perfortion plugging schedule, perfs are opened from bottom to top", partitions=[(1, 1, 1), (1, 1, 4)], - restart_step=65, - check_step=195, + restart_step=5, + check_step=15, restartcheck_params=RestartcheckParameters(**restartcheck_params)), TestDeck( name="staged_open_perf_2", description= "Vertical well with perfortion plugging schedule, perfs are opened from top to bottom", partitions=[(1, 1, 1), (1, 1, 4)], - restart_step=65, - check_step=195, + restart_step=5, + check_step=15, restartcheck_params=RestartcheckParameters(**restartcheck_params)), TestDeck( name="dome_soreide_whitson_smoke", description="Injection into a depleted reservoir using the Soreide Whitson EoS", partitions=[(1, 1, 1), (2, 2, 1)], - restart_step=100, - check_step=150, + restart_step=5, + check_step=20, restartcheck_params=RestartcheckParameters(**restartcheck_params)), TestDeck( name="dome_kvalue_smoke", description="Injection into a depleted reservoir using a K-Value model", partitions=[(1, 1, 1), (2, 2, 1)], - restart_step=100, - check_step=150, + restart_step=5, + check_step=20, restartcheck_params=RestartcheckParameters(**restartcheck_params)) ] diff --git a/inputFiles/compositionalMultiphaseWell/dead_oil_wells_hybrid_2d_smoke.xml b/inputFiles/compositionalMultiphaseWell/dead_oil_wells_hybrid_2d_smoke.xml new file mode 100644 index 00000000000..062310c7a6d --- /dev/null +++ b/inputFiles/compositionalMultiphaseWell/dead_oil_wells_hybrid_2d_smoke.xml @@ -0,0 +1,295 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/compositionalMultiphaseWell/dome_kvalue_base_smoke.xml b/inputFiles/compositionalMultiphaseWell/dome_kvalue_base_smoke.xml new file mode 100644 index 00000000000..0e5ee91d45b --- /dev/null +++ b/inputFiles/compositionalMultiphaseWell/dome_kvalue_base_smoke.xml @@ -0,0 +1,401 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/compositionalMultiphaseWell/dome_kvalue_smoke_smoke.xml b/inputFiles/compositionalMultiphaseWell/dome_kvalue_smoke_smoke.xml new file mode 100644 index 00000000000..704164a93ca --- /dev/null +++ b/inputFiles/compositionalMultiphaseWell/dome_kvalue_smoke_smoke.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/inputFiles/compositionalMultiphaseWell/dome_soreide_whitson_base_smoke.xml b/inputFiles/compositionalMultiphaseWell/dome_soreide_whitson_base_smoke.xml new file mode 100644 index 00000000000..333dd129940 --- /dev/null +++ b/inputFiles/compositionalMultiphaseWell/dome_soreide_whitson_base_smoke.xml @@ -0,0 +1,377 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/compositionalMultiphaseWell/dome_soreide_whitson_smoke_smoke.xml b/inputFiles/compositionalMultiphaseWell/dome_soreide_whitson_smoke_smoke.xml new file mode 100644 index 00000000000..90bcddf51f6 --- /dev/null +++ b/inputFiles/compositionalMultiphaseWell/dome_soreide_whitson_smoke_smoke.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/inputFiles/compositionalMultiphaseWell/staged_close_perf_1_smoke.xml b/inputFiles/compositionalMultiphaseWell/staged_close_perf_1_smoke.xml new file mode 100644 index 00000000000..61709628aa8 --- /dev/null +++ b/inputFiles/compositionalMultiphaseWell/staged_close_perf_1_smoke.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/compositionalMultiphaseWell/staged_close_perf_2_smoke.xml b/inputFiles/compositionalMultiphaseWell/staged_close_perf_2_smoke.xml new file mode 100644 index 00000000000..53ae8bd82c0 --- /dev/null +++ b/inputFiles/compositionalMultiphaseWell/staged_close_perf_2_smoke.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/compositionalMultiphaseWell/staged_open_perf_1_smoke.xml b/inputFiles/compositionalMultiphaseWell/staged_open_perf_1_smoke.xml new file mode 100644 index 00000000000..47436acb62f --- /dev/null +++ b/inputFiles/compositionalMultiphaseWell/staged_open_perf_1_smoke.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/compositionalMultiphaseWell/staged_open_perf_2_smoke.xml b/inputFiles/compositionalMultiphaseWell/staged_open_perf_2_smoke.xml new file mode 100644 index 00000000000..e747c159f8e --- /dev/null +++ b/inputFiles/compositionalMultiphaseWell/staged_open_perf_2_smoke.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/compositionalMultiphaseWell/staged_perf_base_smoke.xml b/inputFiles/compositionalMultiphaseWell/staged_perf_base_smoke.xml new file mode 100644 index 00000000000..65a8d63d8c2 --- /dev/null +++ b/inputFiles/compositionalMultiphaseWell/staged_perf_base_smoke.xml @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/compositionalMultiphaseWell/staircase_co2_wells_hybrid_3d_smoke.xml b/inputFiles/compositionalMultiphaseWell/staircase_co2_wells_hybrid_3d_smoke.xml new file mode 100644 index 00000000000..0dd2f5d9799 --- /dev/null +++ b/inputFiles/compositionalMultiphaseWell/staircase_co2_wells_hybrid_3d_smoke.xml @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/hydraulicFracturing/kgdToughness_Storage_Dominated_smoke_smoke.xml b/inputFiles/hydraulicFracturing/kgdToughness_Storage_Dominated_smoke_smoke.xml new file mode 100644 index 00000000000..643c60d3d98 --- /dev/null +++ b/inputFiles/hydraulicFracturing/kgdToughness_Storage_Dominated_smoke_smoke.xml @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/hydraulicFracturing/pknViscosityDominated_smoke_smoke.xml b/inputFiles/hydraulicFracturing/pknViscosityDominated_smoke_smoke.xml new file mode 100644 index 00000000000..5311c7bde6a --- /dev/null +++ b/inputFiles/hydraulicFracturing/pknViscosityDominated_smoke_smoke.xml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/immiscibleMultiphaseFlow/immiscibleTwoPhase_SPE10_layer84/immiscibleTwoPhase_SPE10_layer84_base_iterative_smoke.xml b/inputFiles/immiscibleMultiphaseFlow/immiscibleTwoPhase_SPE10_layer84/immiscibleTwoPhase_SPE10_layer84_base_iterative_smoke.xml new file mode 100644 index 00000000000..e2508ec4253 --- /dev/null +++ b/inputFiles/immiscibleMultiphaseFlow/immiscibleTwoPhase_SPE10_layer84/immiscibleTwoPhase_SPE10_layer84_base_iterative_smoke.xml @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/immiscibleMultiphaseFlow/immiscibleTwoPhase_SPE10_layer84/immiscibleTwoPhase_SPE10_layer84_benchmark_iterative_smoke.xml b/inputFiles/immiscibleMultiphaseFlow/immiscibleTwoPhase_SPE10_layer84/immiscibleTwoPhase_SPE10_layer84_benchmark_iterative_smoke.xml new file mode 100644 index 00000000000..79a4c62f459 --- /dev/null +++ b/inputFiles/immiscibleMultiphaseFlow/immiscibleTwoPhase_SPE10_layer84/immiscibleTwoPhase_SPE10_layer84_benchmark_iterative_smoke.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/lagrangianContactMechanics/ALM_TFrac_smoke_smoke.xml b/inputFiles/lagrangianContactMechanics/ALM_TFrac_smoke_smoke.xml new file mode 100644 index 00000000000..afda20429ce --- /dev/null +++ b/inputFiles/lagrangianContactMechanics/ALM_TFrac_smoke_smoke.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_FixedSlip_smoke_smoke.xml b/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_FixedSlip_smoke_smoke.xml new file mode 100644 index 00000000000..1c2e2762fa9 --- /dev/null +++ b/inputFiles/lagrangianContactMechanics/LagrangeContactBubbleStab_FixedSlip_smoke_smoke.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_base_smoke.xml b/inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_base_smoke.xml new file mode 100644 index 00000000000..045e26a7b21 --- /dev/null +++ b/inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_base_smoke.xml @@ -0,0 +1,269 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_fim_3d_smoke.xml b/inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_fim_3d_smoke.xml new file mode 100644 index 00000000000..66ab3d2c763 --- /dev/null +++ b/inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_fim_3d_smoke.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_sequential_3d_smoke.xml b/inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_sequential_3d_smoke.xml new file mode 100644 index 00000000000..997c9c680c3 --- /dev/null +++ b/inputFiles/poromechanics/PoroElastic_hybridHexPrism_co2_sequential_3d_smoke.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/poromechanics/PoroElastic_staircase_co2_3d_sequential_smoke.xml b/inputFiles/poromechanics/PoroElastic_staircase_co2_3d_sequential_smoke.xml new file mode 100644 index 00000000000..d6f76c1a33c --- /dev/null +++ b/inputFiles/poromechanics/PoroElastic_staircase_co2_3d_sequential_smoke.xml @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/poromechanics/nonlinearAcceleration/validationCase/validationCase_smoke.xml b/inputFiles/poromechanics/nonlinearAcceleration/validationCase/validationCase_smoke.xml new file mode 100644 index 00000000000..9f1bb857842 --- /dev/null +++ b/inputFiles/poromechanics/nonlinearAcceleration/validationCase/validationCase_smoke.xml @@ -0,0 +1,487 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/poromechanics/poroElasticCoupling.ats b/inputFiles/poromechanics/poroElasticCoupling.ats index adfd5cf05ae..e86fe480a02 100644 --- a/inputFiles/poromechanics/poroElasticCoupling.ats +++ b/inputFiles/poromechanics/poroElasticCoupling.ats @@ -319,7 +319,7 @@ def _build_PoroStaircaseCO2PeacemanWell_sequential_cases(): "Francois Hamon", True) restartcheck_params = {"atol": 1.0e-5, "rtol": 2.0e-7} return _build_poro_elastic_coupling_case( - "PoroElastic_staircase_co2_3d_sequential.xml", (22, 33), + "PoroElastic_staircase_co2_3d_sequential.xml", (7, 12), ((1, 1, 1), (2, 2, 1)), description, restartcheck_params) diff --git a/inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/ALM_multiphasePoromechanics_curvedFrac_smoke_smoke.xml b/inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/ALM_multiphasePoromechanics_curvedFrac_smoke_smoke.xml new file mode 100644 index 00000000000..c528debfe3c --- /dev/null +++ b/inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/ALM_multiphasePoromechanics_curvedFrac_smoke_smoke.xml @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/ALM_singlephasePoromechanics_curvedFrac_smoke_smoke.xml b/inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/ALM_singlephasePoromechanics_curvedFrac_smoke_smoke.xml new file mode 100644 index 00000000000..232543d4a13 --- /dev/null +++ b/inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/ALM_singlephasePoromechanics_curvedFrac_smoke_smoke.xml @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/curvedFrac_smoke_smoke.xml b/inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/curvedFrac_smoke_smoke.xml new file mode 100644 index 00000000000..3ff143532b4 --- /dev/null +++ b/inputFiles/poromechanicsFractures/Contact/AugmentedLagrangianMultipliers/curvedFrac_smoke_smoke.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/poromechanicsFractures/Contact/LagrangianMultipliers/multiphasePoromechanics_FaultModel_smoke_smoke.xml b/inputFiles/poromechanicsFractures/Contact/LagrangianMultipliers/multiphasePoromechanics_FaultModel_smoke_smoke.xml new file mode 100644 index 00000000000..c19d50148d4 --- /dev/null +++ b/inputFiles/poromechanicsFractures/Contact/LagrangianMultipliers/multiphasePoromechanics_FaultModel_smoke_smoke.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/poromechanicsFractures/Contact/LagrangianMultipliers/multiphasePoromechanics_FaultModel_well_fim_smoke_smoke.xml b/inputFiles/poromechanicsFractures/Contact/LagrangianMultipliers/multiphasePoromechanics_FaultModel_well_fim_smoke_smoke.xml new file mode 100644 index 00000000000..fc37ebacac3 --- /dev/null +++ b/inputFiles/poromechanicsFractures/Contact/LagrangianMultipliers/multiphasePoromechanics_FaultModel_well_fim_smoke_smoke.xml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/poromechanicsFractures/MESH/Domain_Mesh_FaultModel_smoke.vtu b/inputFiles/poromechanicsFractures/MESH/Domain_Mesh_FaultModel_smoke.vtu new file mode 100644 index 00000000000..1a7cfcff256 --- /dev/null +++ b/inputFiles/poromechanicsFractures/MESH/Domain_Mesh_FaultModel_smoke.vtu @@ -0,0 +1,50 @@ + + + + + + + AQAAAACAAADgFwAAqAQAAA==eF4118MSKAYABMFn27Zt27Zt27Zt27Zt27ZtB4d09tKfsDUBAvy3gAzEwAzCoAzG4AzBkAzF0AzDsAzH8IzAiIzEyIzCqIzG6IzBmIzF2IzDuIzH+EzAhEzExEzCpEzG5EzBlEzF1EzDtEzH9MzAjMzEzMzCrMzG7MzBnMzF3MzDvMzH/CzAgizEwizCoizG4izBkizF0izDsizH8qzAiqzEyqzCqqzG6qzBmqzF2qzDuqzH+mzAhmzExmzCpmzG5mzBlmzF1mzDtmzH9uzAjuzEzuzCruzG7uzBnuzF3uzDvuzH/hzAgRzEwRzCoRzG4RzBkRzF0RzDsRzH8ZzAiZzEyZzCqZzG6ZzBmZzF2ZzDuZzH+VzAhVzExVzCpVzG5VzBlVzF1VzDtVzH9dzAjdzEzdzCrdzG7dzBndzF3dzDvdzH/TzAgzzEwzzCozzG4zzBkzzF0zzDszzH87zAi7zEy7zCq7zG67zBm7zF27zDu7zH+3zAh3zEx3zCp3zG53zBl3zF13zDt3zH9/zAj/zEz/zCr/zG7/zBn/zF3/zDv/g3/+H/xx+QgRiYQRiUwRicIRiSoRiaYRiW4RieERiRkRiZURiV0RidMRiTsRibcRiX8RifCZiQiZiYSZiUyZicKZiSqZiaaZiW6ZieGZiRmZiZWZiV2ZidOZiTuZibeZiX+ZifBViQhViYRViUxVicJViSpViaZViW5VieFViRlViZVViV1VidNViTtVibdViX9VifDdiQjdiYTdiUzdicLdiSrdiabdiW7dieHdiRndiZXdiV3didPdiTvdibfdiX/difAziQgziYQziUwzicIziSoziaYziW4zieEziRkziZUziV0zidMziTszibcziX8zifC7iQi7iYS7iUy7icK7iSq7iaa7iW67ieG7iRm7iZW7iV27idO7iTu7ibe7iX+7ifB3iQh3iYR3iUx3icJ3iSp3iaZ3iW53ieF3iRl3iZV3iV13idN3iTt3ibd3iX93ifD/iQj/iYT/iUz/icL/iSr/iab/iW7/ieH/iRn/iZX/iV3/idP/iTv/ibf/gX/+Y//D/4AzIQAzMIgzIYgzMEQzIUQzMMwzIcwzMCIzISIzMKozIaozMGYzIWYzMO4zIe4zMBEzIREzMJkzIZkzMFUzIVUzMN0zId0zMDMzITMzMLszIbszMHczIXczMP8zIf87MAC7IQC7MIi7IYi7MES7IUS7MMy7Icy7MCK7ISK7MKq7Iaq7MGa7IWa7MO67Ie67MBG7IRG7MJm7IZm7MFW7IVW7MN27Id27MDO7ITO7MLu7Ibu7MHe7IXe7MP+7If+3MAB3IQB3MIh3IYh3MER3IUR3MMx3Icx3MCJ3ISJ3MKp3Iap3MGZ3IWZ3MO53Ie53MBF3IRF3MJl3IZl3MFV3IVV3MN13Id13MDN3ITN3MLt3Ibt3MHd3IXd3MP93If9/MAD/IQD/MIj/IYj/MET/IUT/MMz/Icz/MCL/ISL/MKr/Iar/MGb/IWb/MO7/Ie7/MBH/IRH/MJn/IZn/MFX/IVX/MN3/Id3/MDP/ITP/MLv/Ibv/MHf/IXf/NfCq99kg== + + + + + AQAAAACAAAAgCAAAPAAAAA==eF7tzSEOADAQAkF6/390TQWOBCpOsMkoBANgqpbjzvNzT3HOv9pTnPOv9hTn/Ks9xTn/aq/a6AKp3gOZ + + + AQAAAACAAABAEAAAKAAAAA==eF7txTEBADAIA7D+WJkKTGMFOVOAg+RJkjdbHdu2bdu27eMP8rwgfQ== + + + AQAAAACAAABAEAAAGwAAAA==eF7twYEAAAAAw6D5U9/gBFUBAAAAfAMQQAAB + + + AQAAAACAAABAEAAAPgMAAA==eF4118MWGAYARcHYaGw1tm02tm3btt3Ytm3btm3b6aKTt5lPeOcGCPD/AjIQAzMIgzIYgzMEQzIUQzMMwzIcw/MvRmBERmJkRmFURmN0xmBMxmJsxmFcxmN8JuDfTMhETMwkTMpkTM4UTMlUTM00TMt0TM8MzMhMzMwszMpszM4czMlczM08zMt8zM8CLMhCLMwi/IdFWYzFWYIlWYqlWYZlWY7lWYEVWYmVWYVVWY3VWYM1WYu1WYd1WY/12YAN2YiN2YRN2YzN2YIt2Yqt2YZt2Y7t2YEd2Ymd2YVd2Y3d2YM92Yu92Yd92Y/9OYADOYiDOYRDOYzDOYIjOYqjOYZj+S/HcTwncCIncTKncCqncTpncCZncTbncC7ncT4XcCEXcTGXcCmXcTlXcCVXcTXXcC3XcT03cCM3cTO3cCu3cTt3cCd3cTf3cC/3cT8P8CAP8TCP8CiP8ThP8CRP8TTP8CzP8Twv8CIv8TKv8Cqv8Tpv8CZv8Tbv8C7v8T4f8CEf8TGf8Cmf8Tlf8CVf8TXf8C3f8T0/8CM/8TO/8Cu/8Tt/8Cd/8Tf/HH9ABmJgBmFQBmNwhmBIhmJohmFYhmN4/sUIjMhIjMwojMpojM4YjMlYjM04jMt4jM8E/JsJmYiJmYRJmYzJmYIpmYqpmYZpmY7pmYEZmYmZmYVZmY3ZmYM5mYu5mYd5mY/5WYAFWYiFWYT/sCiLsThLsCRLsTTLsCzLsTwrsCIrsTKrsCqrsTprsCZrsTbrsC7rsT4bsCEbsTGbsCmbsTlbsCVbsTXbsC3bsT07sCM7sTO7sCu7sTt7sCd7sTf7sC/7sT8HcCAHcTCHcCiHcThHcCRHcTTHcCz/5TiO5wRO5CRO5hRO5TRO5wzO5CzO5hzO5TzO5wIu5CIu5hIu5TIu5wqu5Cqu5hqu5Tqu5wZu5CZu5hZu5TZu5w7u5C7u5h7u5T7u5wEe5CEe5hEe5TEe5wme5Cme5hme5Tme5wVe5CVe5hVe5TVe5w3e5C3e5h3e5T3e5wM+5CM+5hM+5TM+5wu+5Cu+5hu+5Tu+5wd+5Cd+5hd+5Td+5w/+5C/+5p/gD8hADMwgDMpgDM7/ACfVADw= + + + + + AQAAAACAAADQIwAARgYAAA==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 + + + 0 + + + 9380.8315196 + + + + + + + AgAAAACAAAAAAgAAHBEAAHUAAAA=eF6FnGfU1nMchz13CRGySwiJZFNUxmOPUmRk5kmyGmbLfGSUUfYooygZWckeeYwQ2aNokL333i98rhf355zf+dxvvvf5n//1eXO9uV7c515kkf8/NbpNdZfQ7ai7pW6t7na6cBXdJXXZgdtKd3vdWl24RrpL6bID10l3B1124BrrNtNlB66z7o667MAtqru0LjtwXXR30mUHronuMrrswG2tu7MuO3CL6S6ryw7cNrq76LIDt7huc1124LbV3VWXHTzja3nd5XTxXKu7u+5uunD4WkGXnVpdfO2hyw4cvlbUZQcOX1112YHD10q67MDhq5suO3D4WlmXHTh87anLDhy+VtFlBw5f3XXZgcNXC1124PDVQ5cdOLy31GUHDu976bKDZ3y10l1VF8/46qm7ty4cvlbTZQcOX/vosgOHr9V12YHD17667MDhaw1dduDwtZ8uO3D4aq3LDhy+9tdlBw5fa+q21oXDVy9dduDwtZYuO3D4OkCXHTi8r63LDhzeD9RlB8/4Wke3jS6e8XWw7kG6cPhqq8sOHL4O0WUHDl/r6rIDh69DddmBw9d6uuzA4au3LjtwrXXb6bIDh6/DdNlprYuv9XXZgcNXnS47cPhqr8sOHL766NbpwuF9A1124PB+uC47eMbXRrob6uIZX0fo9tWFw9fGuuzA4aufLjtw+NpElx04fB2pyw4cvjbVZQcOX0fpsgOHr8102YHD19G67MDha3NdduDqdI/RZQcOX1voslOni69jddmBw3sHXXbg8N5fl53UdwN0B+oO0R2sm/oObpDuUF12Ut/BHac7TJed1Hdwx+sO12Un9R3cCbqn6LKT+g7uRN1TddlJfQd3ku5puuykvoM7Wfd0XXZS3+EZX2fqnqFbq1vqOzh81euyk/oODl9n6dbrpr6Dw9cIXXZS38Hh62xddlLfweHrHF12Ut/B4etcXXZS38Hh/TxddlLf4Rlfo3RH6qa+g6vXPV+XndR39br4ukCXndR3cPi6UJed1Hdw+LpIl53Ud3D4Gq3LTuo7OHyN0WUn9R0c3i/WZSf1HZ7xdanuJbqp7+DwdZkuO6nv4PB1uS47qe/g8HWFLjup7+DwdaUuO6nv4PB1lS47qe/g8HW1Ljup7+Dwfo0uO6nv8IyvcbpjdVPfweHrWl12Ut/B4es6XXZS38Hh63pddlLfweHrBl12Ut/B4Wu8Ljt1uqW+g8PXBF12Ut/B4f1G3Qm6qe9u0p2oe4fuFN3Ud3CTdO/UZSf1HdzNunfpspP6Dm6y7t267KS+g7tF9x5ddlLfwd2qO1WXndR3cLfp3qvLTuo7uNt1p+myk/oOz/i6X/c+3dR3cPh6QJed1Hdw+HpQl53Ud3D4ekiXndR3cPh6WJed1Hdw+HpEl53Ud3D4elSXndR3cHh/TJed1Hd4xtd03cd1U9/B4esJXXbqdUt9B4evBl12Ut/B4etJ3Qbd1Hdw+HpKl53Ud3D4elqXndR3cPh6Rped1HdweJ+hy07qOzzj6zndZ3VT38Hh63lddlLfwTXoztRlJ/Vdgy6+XtBlJ/UdHL5e1GUn9R0cvmbpspP6Dg5fL+myk/oODu8v67KT+g7P+HpV9xXd1Hdw+HpNl53Ud3D4el2XndR3cPh6Q5ed1Hdw+HpTl53Ud3D4ekuXndR3cPh6W5ed1HdweJ+ty07quzm67+h+oLtQN/Ud3Lu6H+qyk/oObq7uR7rspL6Dm6f7sS47qe/g5ut+ostO6ju4Bbqf6rKT+g7uPd3PdNlJfQf3vu7nuuykvsMzvr7U/UI39R0cvr7SZSf1HRy+vtZlJ/UdHL6+0WUn9R0cvr7VZSf1HRy+vtNlJ/UdHL6+12Un9R0c3n/QZSf1HZ7x9ZPuj7qp7+Dw9bMuO6nv4PD1iy47qe/g8PWrLjup7+Dw9ZsuO6nv4PD1uy47qe/g8PWHLjup7+Dw/qcuO6nv8Iyvv3X/0k19B4evf3TZSX0Hh69/ddlp0C31HRy++MESO6nv4PBVU8OX/0/qOzh8VcSxk/oODl+NxLGT+g4O743FsZP6Ds/4aiJuUd3Ud3D4WkwcO6nv4PC1uDh2Ut/B4WsJXXZS38Hhq6ntpL6Dw9eStpP6Dg5fS9lO6js4vDezndR3S+u9ZXRX0V25ppor9R3csrotbCf1HVxz3Za2k/oObjndVW0n9R3c8rqtbCf1HdwKuqvZTuo7uBV1V7ed1HdwK+muYTsL9V6p7/CMrzV1W9dUc6W+g8PXWraT+g4OX2vbTuo7OHy1sZ3Ud3D4Wsd2Ut/B4aut7k+Vaq7Ud3D4Wtd2Ut/B4X0920l9h2d8ra/brqaaK/UdHL7a207qOzh8bWA7qe/g8LWh7aS+g8P7RraT+g7P+NpY9+dKNVfqOzh8bWI7qe/g8L6p7aS+wzO+NtfdrKaaK/UdHL62sJ3Ud3D46mA7qe/g8NXRdlLfweF9S9tJfYdnfG1lO6nv4PDVyXZS38HhvbPtpL7DM7621u1SU82V+g4OX9vYTuo7OHxtazup7+DwtZ3tpL6Dw1et7aS+g8PX9raT+g4OXzvYTuo7OLzvaDup73bS3Vm3u+6expX6Dm4X3R62k/oOblfdvWwn9R3cbrp7207qO7jddXvaTuo7uD1097Gd1HdwXXX3tZ3Ud3DddPezndR3eMZXL939jSv1HRy+DrCd1Hdw+DrQdlLfweHrINtJfQeHr4NtJ/UdHL4O0f2lUs2V+g4OX4faTuo7OLz3tp3Ud3jGV53uYcaV+g4OX31sJ/UdHL4Ot53Ud3D46ms7qe/g8H6E7aS+wzO++un+alyp7+DwdaTtpL6Dw/tRtpP6Ds/4Okb3aONKfQeHr2NtJ/UdHL76207qOzh8DbCd1HdweB9oO6nv8IyvQbaT+g4OX8fZTuo7OLwfbzup7/CMrxN1TzCu1Hdw+DrJdlLfweHrZNtJfQeHr8G2k/oODl9DbCf1HRy+htpO6js4fA2zndR3cHgfbjup707RPVX3HN2zjSv1HdxpuufaTuo7uNN1z7Od1HdwZ+iOtJ3Ud3Bn6o6yndR3cPW659tO6ju4s3QvsJ3Ud3AjdC+0ndR3eMbXaN2LjCv1HRy+xthO6js4fF1sO6nv4PB1ie2kvoPD16W2k/oODl+X6f5WqeZKfQeHr8ttJ/UdHN6vsJ3Ud3jG11W6VxpX6js4fF1tO6nv4PB1je2kvoPD11jbSX0Hh/dxtpP6Ds/4ulb3d+NKfQeHr+tsJ/UdHN6vt53Ud3jG13jdG4wr9R0cvibYTuo7OHzdaDup7+DwdZPtpL6Dw/tE20l9h2d8TbKd1Hdw+LrZdlLfweF9su2kvsMzvm7VvcW4Ut/B4es220l9B4ev220n9R0cvqbYTuo7OHzdYTup7+DwdaftpL6Dw9ddtpP6Dg7vd9tO6rt7dKfqPqL7sHGlvoO7V/dR20l9BzdN9zHbSX0Hd5/u47aT+g7uft3ptpP6Du4B3SdsJ/Ud3IO6DbaT+g7uId0nbSf1HZ7x9bTuU8aV+g4OX8/YTuo7OHzNsJ3Ud3D4etZ2Ut/B4es520l9B4ev53X/qFRzpb6Dw9dM20l9B4f3F2wn9R2e8TVL90XjSn0Hh6+XbCf1HRy+Xrad1Hdw+HrFdlLfweH9VdtJfYdnfL2m+6dxpb6Dw9frtpP6Dg7vb9hO6js84+st3TeNK/UdHL7etp3Ud3D4mm07qe/g8DXHdlLfweH9HdtJfYdnfL1rO6nv4PA113ZS38HhfZ7tpL7DM74W6M43rtR3cPh6z3ZS38Hh633bSX0Hh6+FtpP6Dg5fH9hO6js4fH1oO6nv4PD1ke2kvoPD+8e2k/ruE91Pdb/T/da4Ut/Bfab7ve2kvoP7XPcH20l9B/eF7o+2k/oO7kvdn2wn9R3cV7o/207qO7ivdX+xndR3cN/o/mo7qe/wjK/fdX8zrtR3cPj6w3ZS38Hh60/bSX0Hh6+/bCf1HRy+/rad1Hdw+PrHdlLfweHrX9tJfQeHd/5wk53Ud3jGV0V8TaWaK/UdHL4aiWMn9R0cvhqLYyf1HRy+FhXHTuo7OHw1EcdO6js4fC2m502MK/UdHL4WF8dO6js4vC+hy07qOzzja0ndppVqrtR3cPhaynZS38Hhq5ntpL6Dw9fStpP6Dg5fy9hO6js4fC1rO6nv4PDV3HZS38HhfTnbSX2HZ3ytoLt8pZor9R0cvla0ndR3cPhayXZS38Hha2XbSX0Hh69VbCf1HRy+WthO6js4fLW0ndR3cHhf1XZS37XSe6vpttVdp1LNlfoObnXddW0n9R3cGrrr2U7qO7jWuu1sJ/Ud3Jq669tO6ju4tXTb207qO7i1dTewndR3cG10N7Sd1Hd4xtfGuhtVqrlS38HhaxPbSX0Hh69NbSf1HRy+NrOd1Hdw+NrcdlLfweFrC9tJfQeHrw62k/oODu8dbSf1HZ7xtZXulpVqrtR3cPjqZDup7+Dw1dl2Ut/B4auL7aS+g8PX1raT+g4OX9vYTuo7OHxtazup7+Dwvp3tpL7DM7621601rtR3cPjawXZS38Hha0fbSX0Hh6+dbCf1HRy+drad1Hdw+NrFdlLfweFrV9tJfQeH991sJ/UdnvG1h+7uxpX6Dg5fXW0n9R0cvrrZTuo7OHztaTup7+Dw1d12Ut/B4auH7aS+g8PXXraT+g4O73vbTuq7nrr76B6ie7Bxpb6D21f3UNtJfQe3n25v20l9B7e/7mG2k/oOrpdune2kvoM7QLeP7aS+gztQ93DbSX0Hd5BuX9tJfYdnfPXTPcK4Ut/B4etI20l9B4evo2wn9R0cvo62ndR3cPg6xnZS38Hh61jbSX0Hh6/+tpP6Dg7vA2wn9R2e8TVId6Bxpb6Dw9dxtpP6Dg5fx9tO6js4fJ1gO6nv4PB1ou2kvoPD10m2k/oODl8n207qOzi8D7ad1Hd4xtdQ3SHGlfoODl/DbCf1HRy+httO6js4fJ1iO6nv4PB1qu2kvoPD12m2k/oODl+n207qOzi8n2E7qe/wjK963TONK/UdHL7Osp3Ud3D4GmE7qe/g8HW27aS+g8PXObaT+g4OX+faTuo7OHydZzup7+DwPtJ2Ut+N0j1f9zLdS40r9R3cBbqX207qO7gLda+wndR3cBfpXmk7qe/gRuteZTup7+DG6F5tO6nv4C7WvcZ2Ut/BXaI71nZS3+EZX9fqjjOu1Hdw+LrOdlLfweHrettJfQeHrxtsJ/UdHL7G207qOzh8TbCd1Hdw+LrRdlLfweH9JttJfYdnfE3SnWhcqe/g8HWz7aS+g8PXZNtJfQeHr1tsJ/UdHL5utZ3Ud3D4us12Ut/B4et220l9B4f3KbaT+g7P+LpT9w7jSn0Hh6+7bCf1HRy+7rad1Hdw+LrHdlLfweFrqu2kvoPD1722k/oODl/TbCf1HRze77Od1Hd4xtcDuvcbV+o7OHw9aDup7+Dw9ZDtpL6Dw9fDtpP6Dg5fj9hO6js4fD1qO6nv4PD1mO2kvoPD++O2k/puuu4Tus/rPmdcqe/gGnRn2k7qO7gndV+wndR3cE/pvmg7qe/gntadZTup7+Ce0X3JdlLfwc3Qfdl2Ut/BPav7iu2kvsMzvl7TfdW4Ut/B4et120l9B4evN2wn9R0cvt60ndR3cPh6y3ZS38Hh623bSX0Hh6/ZtpP6Dg7vc2wn9R2e8fWu7jvGlfoODl9zbSf1HRy+5tlO6js4fM23ndR3cPhaYDup7+Dw9Z7tpL6Dw9f7tpP6Dg7vC20n9R2e8fWh7gfGlfoODl8f2U7qOzh8fWw7qe/g8PWJ7aS+g8PXp7aT+g4OX5/ZTuo7OHx9bjup7+Dw/oXt/AcoS/oSeF5dzNsSQgAAhGHj/R+FiooKLxNy6IC8gBnz783uzXe1fxQG+2LM8IpPrPGDb/sdMLeOfg1+raPfEW/W0a/Fn3X0O+HdOvq9cLKOfgk+rKNfh7N19EuxsI5+PS7W0e+MpXX0G/BvHf0uWFlHvxFX62xtDDRh + + + AQAAAACAAABAEAAAoAIAAA==eF4115sChAgAQNHZd/sOwzAMwzAMwzAMwzAMwzAMwzAMBwfDMFyYs1fON9zg9S1kxJgJU2bMWbBkxZoNW3bsOXDkxJkLV27cefDkmx9evPnw9cOXgCEjxkyYMmPOgiUr1mzYsmPPgSMnzly4cuPOgyff/PDizYevH78EDBkxZsKUGXMWLFmxZsOWHXsOHDlx5sKVG3cePPnmhxdvPnz99CVgyIgxE6bMmLNgyYo1G7bs2HPgyIkzF67cuPPgyTc/vHjz4evnLwFDRoyZMGXGnAVLVqzZsGXHngNHTpy5cOXGnQdPvvnhxZsPX798CRgyYsyEKTPmLFiyYs2GLTv2HDhy4syFKzfuPHjyzQ8v3nz4+vVLwJARYyZMmTFnwZIVazZs2bHnwJETZy5cuXHnwZNvfnjx5sPXb18ChowYM2HKjDkLlqxYs2HLjj0Hjpw4c+HKjTsPnnzzw4s3H74CMGTEmAlTZsxZsGTFmg1bduw5cOTEmQtXbtx58OSbH168+fD1+5eAISPGTJgyY86CJSvWbNiyY8+BIyfOXLhy486DJ9/88OLNh68/vgQMGTFmwpQZcxYsWbFmw5Ydew4cOXHmwpUbdx48+eaHF28+fP35JWDIiDETpsyYs2DJijUbtuzYc+DIiTMXrty48+DJNz+8ePPh668vAUNGjJkwZcacBUtWrNmwZceeA0dOnLlw5cadB0+++eHFmw9ff38JGDJizIQpM+YsWLJizYYtO/YcOHLizIUrN+48ePLNDy/efPj650vAkBFjJkyZMWfBkhVrNmzZsefAkRNnLly5cefBk29+ePHmw9e/XwKGjBgzYcqMOQuWrFizYcuOPQeOnDhz4cqNOw+efPPDizcf/j/8AUNGjJkwZcac/wGkDwjA + + + AQAAAACAAAAIAgAADwAAAA==eF7j4RkFo4CHBwDRIBhh + + + + + diff --git a/inputFiles/poromechanicsFractures/MESH/Fault_Mesh_FaultModel_smoke.vtu b/inputFiles/poromechanicsFractures/MESH/Fault_Mesh_FaultModel_smoke.vtu new file mode 100644 index 00000000000..647bedcdb1f --- /dev/null +++ b/inputFiles/poromechanicsFractures/MESH/Fault_Mesh_FaultModel_smoke.vtu @@ -0,0 +1,52 @@ + + + + + + + AQAAAACAAACAAQAAaAAAAA==eF5dyi0SQFAARWFeUG1AVVX7UFXVPlRVtQ9VVW1AVfw8jCG8U9695c43c5bA7WOr2IrD0HciTvFm3Gd4x7n0hbjEB32FT1xL34hbbOk7fOFe+kE84pt+wg+epd/ErzgyvmPxDyL8k+A= + + + 230.0021739 + + + 893.00895852 + + + + + AQAAAACAAADAAAAANgAAAA==eF4txUkCQCAAAMCSfQuF///UwcxlQvhFN05u3bn34NGTZy9evXl39uHTl4urbz9+/QFIoAEV + + + + + AQAAAACAAAB4AAAAKAAAAA==eF4txbcBwCAAACB7Yv3/XAdhIYQnOjm7uLr58+/u4enl7eMLEfgAag== + + + + + AQAAAACAAAAgAQAAWwAAAA==eF5NzrERgDAMBMGvgnoIVBhVOKYYk7oEBqiEtwOdPrrRbCCphbRd2r+u1a3THveg7c8Xn+1xD9pexat4Fa/ijxuf7XEPev4/8Nnz/4HPtn86PtvjHrN/PdZXew== + + + 1980.0568174 + + + 3236.6803982 + + + + + + + AQAAAACAAADgAQAAYQAAAA==eF5dzEcOgwAQBEFyMNEGzP9/yoHpS+9lpFZpi+K9MttmG/Uq28nR62wvxx/8mB3U8R85On8nOf7gl+ysjl/l6Pzd5PiD/2Z3dfxPjs7fQ44/+Ct7quP/cnT+3nIP1tcCsw== + + + AQAAAACAAAB4AAAAMAAAAA==eF5jYYAADijNA6UFoLQIlJaA0jJQWgFKq0BpDSitA6UNoLQJlLaA0jZQGgBVeAHh + + + AQAAAACAAAAPAAAACwAAAA==eF5jZ0cBAANXAGo= + + + + + diff --git a/inputFiles/poromechanicsFractures/MESH/curvedFrac_domain_smoke.vtu b/inputFiles/poromechanicsFractures/MESH/curvedFrac_domain_smoke.vtu new file mode 100644 index 00000000000..4401326bafa --- /dev/null +++ b/inputFiles/poromechanicsFractures/MESH/curvedFrac_domain_smoke.vtu @@ -0,0 +1,44 @@ + + + + + + + AQAAAACAAADAOQAADwsAAA==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 + + + + + AQAAAACAAADgFQAAXwAAAA==eF7tyjkOgEAQA8Ed7nsj+P9TmcA5AywBUgctSyVbSsm8yquVYRiGYb+zNvgrZY0avFGVsi74K2G9wuI2B39PbFWbt6i3NgV/X1lWGIZhGHZlu3ewLMuy7M09AbMLQY0= + + + AQAAAACAAADAKwAAbAgAAA==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 + + + + + AQAAAACAAACgVgAAnxQAAA==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 + + + 0 + + + 9380.8315196 + + + + + + + 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 + + + AQAAAACAAADAKwAASQcAAA==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 + + + AQAAAACAAAB4BQAAFgAAAA==eF7j4RkFo2AUDHfAOQoGFQAA9jE88Q== + + + + + diff --git a/inputFiles/poromechanicsFractures/MESH/curvedFrac_fracture_smoke.vtu b/inputFiles/poromechanicsFractures/MESH/curvedFrac_fracture_smoke.vtu new file mode 100644 index 00000000000..f1a3c3f5b1b --- /dev/null +++ b/inputFiles/poromechanicsFractures/MESH/curvedFrac_fracture_smoke.vtu @@ -0,0 +1,55 @@ + + + + + + + AQAAAACAAADgHAAAVAUAAA==eF4t2dFGKICiBNBz656iKIqiKIqiKIqiKIqiaFMURVEURVEURVEURVEURVEUO4qiKIqiKIqiKIqiKIqiKOo87DUv6xNmmKD//EsAAxnMMIYwlOGMYgQjGc04xjCW8UxiAhOZzDSmMJXpzGIGM5nNPOYwl/ksYgELWcwylrCUf1jJclawirWsZg3r2Mh6NrCJrWxmC9vYyXZ2sIu97GYP+zjIfg5wiKMc5gjHOMlxTnCKs5zmDOe4yHkucIkr/MtlrnKDa1znJne4xW3u8oB73OchT3jEY57ygmc85yVveMVr3vKBd7znI1/4xGe+8oNvfOcnf/jFb/4y6P/+GcBABjOMIQxlOKMYwUhGM44xjGU8k5jARCYzjSlMZTqzmMFMZjOPOcxlPotYwEIWs4wlLOUfVrKcFaxiLatZwzo2sp4NbGIrm9nCNnaynR3sYi+72cM+DrKfAxziKIc5wjFOcpwTnOIspznDOS5yngtc4gr/cpmr3OAa17nJHW5xm7s84B73ecgTHvGYp7zgGc95yRte8Zq3fOAd7/nIFz7xma/84Bvf+ckffvGbvwxS/AEMZDDDGMJQhjOKEYxkNOMYw1jGM4kJTGQy05jCVKYzixnMZDbzmMNc5rOIBSxkMctYwlL+YSXLWcEq1rKaNaxjI+vZwCa2spktbGMn29nBLvaymz3s4yD7OcAhjnKYIxzjJMc5wSnOcpoznOMi57nAJa7wL5e5yg2ucZ2b3OEWt7nLA+5xn4c84RGPecoLnvGcl7zhFa95ywfe8Z6PfOETn/nKD77xnZ/84Re/+csggz+AgQxmGEMYynBGMYKRjGYcYxjLeCYxgYlMZhpTmMp0ZjGDmcxmHnOYy3wWsYCFLGYZS1jKP6xkOStYxVpWs4Z1bGQ9G9jEVjazhW3sZDs72MVedrOHfRxkPwc4xFEOc4RjnOQ4JzjFWU5zhnNc5DwXuMQV/uUyV7nBNa5zkzvc4jZ3ecA97vOQJzziMU95wTOe85I3vOI1b/nAO97zkS984jNf+cE3vvOTP/ziN38Z9P//DGAggxnGEIYynFGMYCSjGccYxjKeSUxgIpOZxhSmMp1ZzGAms5nHHOYyn0UsYCGLWcYSlvIPK1nOClaxltWsYR0bWc8GNrGVzWxhGzvZzg52sZfd7GEfB9nPAQ5xlMMc4RgnOc4JTnGW05zhHBc5zwUucYV/ucxVbnCN69zkDre4zV0ecI/7POQJj3jMU17wjOe85A2veM1bPvCO93zkC5/4zFd+8I3v/OQPv/jNXwb9958BDGQwwxjCUIYzihGMZDTjGMNYxjOJCUxkMtOYwlSmM4sZzGQ285jDXOaziAUsZDHLWMJS/mEly1nBKtaymjWsYyPr2cAmtrKZLWxjJ9vZwS72sps97OMg+znAIY5ymCMc4yTHOcEpznKaM5zjIue5wCWu8C+XucoNrnGdm9zhFre5ywPucZ+HPOERj3nKC57xnJe84RWvecsH3vGej3zhE5/5yg++8Z2f/OEXv/nLoKB/BjCQwQxjCEMZzihGMJLRjGMMYxnPJCYwkclMYwpTmc4sZjCT2cxjDnOZzyIWsJDFLGMJS/mHlSxnBatYy2rWsI6NrGcDm9jKZrawjZ1sZwe72Mtu9rCPg+znAIc4ymGOcIyTHOcEpzjLac5wjouc5wKXuMK/XOYqN7jGdW5yh1vc5i4PuMd9HvKERzzmKS94xnNe8oZXvOYtH3jHez7yhU985is/+MZ3fvKHX/zmL4McfQEMZDDDGMJQhjOKEYxkNOMYw1jGM4kJTGQy05jCVKYzixnMZDb/B9t/0DI= + + + 6.3245553203 + + + 2609.2255556 + + + + + AQAAAACAAABwDgAA6QIAAA==eF411WODEAYAgOF82bZt27ps27Ztu667bNu2ueW22mrL5rzwoaf3y/MT3lChvhWaYRiW4RieERjAiIzEyIzCqIzG6IzBmIzF2IzDuIzH+EzAhEzExEzCpEzG5EzBlEzF1EzDtEzH9MzAjMzEzMzCrMzG7MzBnMzF3MzDvMzH/CzAgizEwizCoizG4izBkizF0izDsizH8qzAigxkJVZmFVZlNVZnDdZkLdZmHdZlPdZnAzZkIzZmEzZlMzZnC7ZkK7ZmG7ZlO7ZnB3ZkJ3ZmF3ZlN3ZnD/ZkL/ZmH/ZlP/bnAA7kIA7mEA7lMA7nCI7kKI7mGI7lOI7nBE7kJE7mFE7lNE7nDM7kLM7mHAZxLoMZwnmczwVcyEVczCVcymVczhVcyVVczTVcy3Vczw3cyE3czC3cym3czh3cyV3czT3cy33czwM8yEM8zCM8ymM8zhM8yVM8zTM8y3M8zwu8yEu8zB/4I6/wKq/xOm/wJm/xNn/iz7zDu/yFv/Ie7/M3/s4HfMhHfMwnfMpnfM4XfMlXfM03fMt3fM8P/Mg/+Cf/4t/8h//yP/7PT/zML/w+/tAMw7AMx/CMwABGZCRGZhRGZTRGZwzGZCzGZhzGZTzGZwImZCImZhImZTImZwqmZCqmZhqmZTqmZwZmZCZmZhZmZTZmZw7mZC7mZh7mZT7mZwEWZCEWZhEWZTEWZwmWZCmWZhmWZTmWZwVWZCArsTKrsCqrsTprsCZrsTbrsC7rsT4bsCEbsTGbsCmbsTlbsCVbsTXbsC3bsT07sCM7sTO7sCu7sTt7sCd7sTf7sC/7sT8HcCAHcTCHcCiHcThHcCRHcTTHcCzHcTwncCIncTKncCqncTpncCZncTbnMIhzGcwQzuN8LuBCLuJiLuFSLuNyruBKruJqruFaruN6buBGbuJmbuFWbuN27uBO7uJu7uFe7uN+HuBBHuJhHuFRHuNxnuBJnuJpnuFZnuN5XuBFXuJX68TSyg== + + + + + AQAAAACAAABABgAAHAAAAA==eF4TZWBgEANi0VF6lB6lR+lRepQmgQYASQchmQ== + + + AQAAAACAAACADAAAkgIAAA==eF411WODEAYAgOF8l23b7rJ1GdddtnHZtnHVvNpqy21hy7Ztt4Whtmz3oaf3y/MT3kiRPhWZURiV0RidMRjAQMZkLMZmHMZlPMZnAiZkIiZmEiZlMiZnCqZkKqZmGqZlOqZnBmZkJmZmFmZlNmZnDuZkLuZmHuZlPuZnARZkIRZmEQaxKIuxOEuwJEuxNMuwLMuxPCuwIiuxMquwKoNZjdVZgzVZi7VZh3VZj/UZwgYMZRgbshEbswmbshmbswVbshVbsw3bsh3bswM7shM7swu7shvD2Z092JO92Jt92Jf92J8DOJCDOJhDOJTDOJwjOJKjOJpjOJbjOJ4TOJGTOJlTOJXTOJ0zGMGZnMXZ/IJf8it+zW/4Lb/j95zDufyBP3Ie5/Mn/swFXMhFXMwlXMplXM5f+CtXcCVXcTV/4+9cw7Vcx/XcwI3cxM3cwq3cxu3cwZ3cxd3cw73cx/08wIM8xMM8wqM8xuM8wZM8xdM8w7M8x/O8wIu8xMu8wqu8xuv8g3/yBm/yFm/zL/7Nf/gv7/Au/+P/vMf7fMCHfMTHfMKnfMbnfMGXfMXXfMO3fMf3/MDP44/MKIzKaIzOGAxgIGMyFmMzDuMyHuMzARMyERMzCZMyGZMzBVMyFVMzDdMyHdMzAzMyEzMzC7MyG7MzB3MyF3MzD/MyH/OzAAuyEAuzCINYlMVYnCVYkqVYmmVYluVYnhVYkZVYmVVYlcGsxuqswZqsxdqsw7qsx/oMYQOGMowN2YiN2YRN2YzN2YIt2Yqt2YZt2Y7t2YEd2Ymd2YVd2Y3h7M4e7Mle7M0+7Mt+7M8BHMhBHMwhHMphHM4RHMlRHM0xHMtxHM8JnMhJnMwpnMppnM4ZjOBHXq+oSQ== + + + + + AQAAAACAAACoFQAApwcAAA==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 + + + 2295.3952683 + + + 7891.1203892 + + + + + + + AQAAAACAAAAAMgAAxAgAAA==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 + + + AQAAAACAAACADAAASQIAAA==eF4txRGUKggAAMD+Xf9eEARBEARBEARBEARBEARBEARBsLAQBEEQBEEQBEEQBEEQBEEQBEEQLCwEQRAEQRAcNCMTDHyEHHbEUcccd8JJp5x2xlnnnHfBRZdcdsVV11x3w023/OVvt91x1z33PfDQI4898dQzz73w0iuvvfHWO+998NEnn/3jX1989c13P/z0y28H/nwKOuSwI4465rgTTjrltDPOOue8Cy665LIrrrrmuhtuuuUvf7vtjrvuue+Bhx557ImnnnnuhZdeee2Nt95574OPPvnsH//64qtvvvvhp19+O/DPp6BDDjviqGOOO+GkU04746xzzrvgoksuu+Kqa6674aZb/vK32+646577HnjokceeeOqZ51546ZXX3njrnfc++OiTz/7xry+++ua7H3765bcD/34KOuSwI4465rgTTjrltDPOOue8Cy665LIrrrrmuhtuuuUvf7vtjrvuue+Bhx557ImnnnnuhZdeee2Nt95574OPPvnsH//64qtvvvvhp19+OxCUQw474qhjjjvhpFNOO+Osc8674KJLLrviqmuuu+GmW/7yt9vuuOue+x546JHHnnjqmedeeOmV19546533Pvjok8/+8a8vvvrmux9++uW3A38/BR1y2BFHHXPcCSedctoZZ51z3gUXXXLZFVddc90NN93yl7/ddsdd99z3wEOPPPbEU88898JLr7z2xlvvvPfBR5989o9/ffHVN9/98NMvvx3471PQIYcdcdQxx51w0imnnXHWOedd8P/9tcNH + + + AQAAAACAAACQAQAADgAAAA==eF5jZx8FgwkAAJMACvE= + + + + + diff --git a/inputFiles/poromechanicsFractures/MESH/curvedFrac_smoke.vtm b/inputFiles/poromechanicsFractures/MESH/curvedFrac_smoke.vtm new file mode 100644 index 00000000000..c6d02081d11 --- /dev/null +++ b/inputFiles/poromechanicsFractures/MESH/curvedFrac_smoke.vtm @@ -0,0 +1,7 @@ + + + + + + + diff --git a/inputFiles/poromechanicsFractures/MESH/verticalFault_ExternalMesh_smoke.vtm b/inputFiles/poromechanicsFractures/MESH/verticalFault_ExternalMesh_smoke.vtm new file mode 100644 index 00000000000..ce987a599a6 --- /dev/null +++ b/inputFiles/poromechanicsFractures/MESH/verticalFault_ExternalMesh_smoke.vtm @@ -0,0 +1,13 @@ + + + + + + + diff --git a/inputFiles/singlePhaseFlow/FieldCaseTutorial3_Thermal_smoke_smoke.xml b/inputFiles/singlePhaseFlow/FieldCaseTutorial3_Thermal_smoke_smoke.xml new file mode 100644 index 00000000000..7e5f77fa557 --- /dev/null +++ b/inputFiles/singlePhaseFlow/FieldCaseTutorial3_Thermal_smoke_smoke.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/inputFiles/singlePhaseFlow/pebi3d_with_properties_smoke.vtu b/inputFiles/singlePhaseFlow/pebi3d_with_properties_smoke.vtu new file mode 100644 index 00000000000..411739c48bf --- /dev/null +++ b/inputFiles/singlePhaseFlow/pebi3d_with_properties_smoke.vtu @@ -0,0 +1,50 @@ + + + + + + + + + AQAAAACAAACwBAAAEgAAAA==eF5jYBgFo2AUjIKhAQAEsAAB + + + AQAAAACAAABgCQAAOQcAAA==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 + + + AQAAAACAAABgCQAAIQAAAA==eF47ewYE3tifHaVH6VF6lB6lR+lRepQepalCAwDu6vpL + + + AQAAAACAAABgCQAAsgAAAA==eF6tzbEKQQEYhuEPhU4dCikps81uks5VGC02NrNsBpuUQRmOxeAS1LkBg+lcgZSTHcPPHXz99b3LM75Y5IFRPIDTZ9TPKWU/nSVg6je5ngtK2U8mWsDS7y7tFZWyn84OsPU7G8dlpeynMwBOfoeZBUrZT2cXuPhtz9ehUvbT2QBufl/2qCplP53/7n6TVVRTyn46M7O330390MBHJ/vpTM3Co9vJ/ttERSf7qfwB86YHGg== + + + AQAAAACAAABgCQAAGAEAAA==eF4LqKmqVtX54hihfJXn+71Pjgccet2Pq31xFLqwfn7buo+OHsuXWFkrf3Fc1ZEi9VPwo6OMH9+RGSIfHR3Weu3lEP3iaDbrZ8p2iS+OH1p2cfpyf3Gse/zmWpjUR0f1IG6uiuefHDe/n9Kzo/az4xNJQa846Y+OJ7ZZKYbt+eR4s+VaUIPiR8cqng0NaY+B5j3Mqmaq/Ox44NiLSUftgO54ILRmT/1nxwgRBQPeG58cFd7+9Nze8tnRpGbnCaVNHx0tmN6/Cfb55Dhhvhnfo2efHANsPK5/MPzsuMF2G7P/mo+OChmlQcuA8hfsBZxetX9ynLF00U/eAx8dA0b9O+rfUf+O+nfUv6P+HfXvqH9p7F8A2ZG1qw== + + + + + AQAAAACAAADwHgAAnQgAAA==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 + + + 0 + + + 1.7320508076 + + + + + + + AQAAAACAAACAYQAAsw4AAA==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 + + + AQAAAACAAABgCQAA/QEAAA==eF4txUFkWwEAANCs67ZsyyGmJqaHmJqYHnKoqaqJ6SGmJqYmpiamh5iamJqYmpgeYmqqanLoIaYmpoeYmpoecqiJqskhh5iamB5iamJ6yKFmh//e5YVDgahjjjvhpCd9z7N+5JyfecmvXfa6N13zjhs+dMfH7vvM4XPBI4573JNOOe2Ms84574JfecXvXPEHb/uLGz5w212feODhoeCoR53whFOeddYLLrjokstec8VV1/zZe/7mln/42H888ND54IhjHnPS0057zjkvuugVr3nTNde964abbrnjrn/71P8cHg6+5lHfctJTnnHG8857ySWvuuIt173nptvuuue+Bw5dCAo76phvetx3nPJ9z/mJ837hZZe94aq3vet9t3zknk8duhgUccxxJ5z0pFNOO+PHXvBzF/3Gq37vqj95xw0fuuNj933m8KXgEcc97knPOOOsc8674KJLLnvdm/7our9639/d8S+feODhcHDUo054winPOusFF7zsstdccdU1173rhg/c9k/3/Ndnvng5OOobHnPS0057zjkvuugVr3nTNe+44aZb7rjrnvseeOhKcMTXHfdtT/iu037oeee95JJXXfGW695z0213feKBQ1eDwo465rgTTnrKM37grJ960S9d8ltvuOpt73rfLR+551OHInLMY076P/Sll9c= + + + AQAAAACAAAAsAQAAFQAAAA==eF7j4QEDfjgQQAY8o7JIAAAafBFF + + + + + diff --git a/inputFiles/wavePropagation/acouselas3D_Q2_abc_smoke_smoke.xml b/inputFiles/wavePropagation/acouselas3D_Q2_abc_smoke_smoke.xml new file mode 100644 index 00000000000..73b320639d4 --- /dev/null +++ b/inputFiles/wavePropagation/acouselas3D_Q2_abc_smoke_smoke.xml @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/scripts/generateReducedSmokeMeshes.py b/scripts/generateReducedSmokeMeshes.py new file mode 100644 index 00000000000..86303839ca5 --- /dev/null +++ b/scripts/generateReducedSmokeMeshes.py @@ -0,0 +1,301 @@ +#!/usr/bin/env python3 +"""Generate the reduced external meshes used by the long-running smoke tests.""" + +from pathlib import Path + +import numpy as np +import vtk +from vtk.util.numpy_support import numpy_to_vtk + + +ROOT = Path(__file__).resolve().parents[1] + + +def read_grid(path: Path) -> vtk.vtkUnstructuredGrid: + reader = vtk.vtkXMLUnstructuredGridReader() + reader.SetFileName(str(path)) + reader.Update() + grid = vtk.vtkUnstructuredGrid() + grid.DeepCopy(reader.GetOutput()) + return grid + + +def write_grid(grid: vtk.vtkUnstructuredGrid, path: Path) -> None: + writer = vtk.vtkXMLUnstructuredGridWriter() + writer.SetFileName(str(path)) + writer.SetInputData(grid) + writer.SetCompressorTypeToZLib() + writer.SetDataModeToBinary() + if not writer.Write(): + raise RuntimeError(f"Failed to write {path}") + + +def add_array(attributes, name: str, values, vtk_type=None) -> None: + values = np.asarray(values) + array = numpy_to_vtk(values, deep=True, array_type=vtk_type) + array.SetName(name) + attributes.AddArray(array) + + +def make_hybrid_property_mesh() -> None: + source = ROOT / "inputFiles/solidMechanics/hybridHexPrismMesh.vtk" + reader = vtk.vtkUnstructuredGridReader() + reader.SetFileName(str(source)) + reader.Update() + grid = vtk.vtkUnstructuredGrid() + grid.DeepCopy(reader.GetOutput()) + attribute = grid.GetCellData().GetArray("attribute") + for cell_id in range(grid.GetNumberOfCells()): + attribute.SetTuple1(cell_id, 0) + + centers_filter = vtk.vtkCellCenters() + centers_filter.SetInputData(grid) + centers_filter.Update() + centers = np.array( + [centers_filter.GetOutput().GetPoint(i) for i in range(grid.GetNumberOfCells())] + ) + x, y, z = centers.T + add_array(grid.GetCellData(), "PORO", 0.075 + 0.025 * (x + y + z) / 3.0) + add_array(grid.GetCellData(), "NTG", np.full(len(centers), 0.9)) + add_array(grid.GetCellData(), "DENSITY", 2600.0 + 100.0 * z) + add_array(grid.GetCellData(), "BULKMOD", 4.5e9 + 1.0e9 * x) + + output = ROOT / "inputFiles/singlePhaseFlow/pebi3d_with_properties_smoke.vtu" + write_grid(grid, output) + + +def make_fault_mesh() -> None: + mesh_dir = ROOT / "inputFiles/poromechanicsFractures/MESH" + x_values = [-6000.0, -3600.0, -2400.0, -1200.0, 0.0, 1200.0, 2400.0, 3600.0, 6000.0] + y_values = [-6000.0, -2400.0, -1200.0, 0.0, 1200.0, 6000.0] + z_values = [ + -4000.0, -2256.0, -2038.0, -1820.0, -1810.0, -1805.0, + -1800.0, -1780.0, -1650.0, -1575.0, -1350.0, -900.0, -450.0, 0.0, + ] + fault_x = x_values.index(1200.0) + fault_y = range(y_values.index(-2400.0), y_values.index(1200.0) + 1) + fault_z = range(z_values.index(-1810.0), z_values.index(-1575.0) + 1) + + points = vtk.vtkPoints() + base_ids = {} + for iz, z in enumerate(z_values): + for iy, y in enumerate(y_values): + for ix, x in enumerate(x_values): + base_ids[ix, iy, iz] = points.InsertNextPoint(x, y, z) + + duplicate_ids = {} + for iz in list(fault_z)[1:-1]: + for iy in list(fault_y)[1:-1]: + duplicate_ids[iy, iz] = points.InsertNextPoint(1200.0, y_values[iy], z_values[iz]) + + domain = vtk.vtkUnstructuredGrid() + domain.SetPoints(points) + attributes = [] + young_modulus = [] + poisson_ratio = [] + + def domain_point(ix, iy, iz, cell_ix): + if ix == fault_x and cell_ix == fault_x and (iy, iz) in duplicate_ids: + return duplicate_ids[iy, iz] + return base_ids[ix, iy, iz] + + for iz in range(len(z_values) - 1): + for iy in range(len(y_values) - 1): + for ix in range(len(x_values) - 1): + ids = [ + domain_point(ix, iy, iz, ix), + domain_point(ix + 1, iy, iz, ix), + domain_point(ix + 1, iy + 1, iz, ix), + domain_point(ix, iy + 1, iz, ix), + domain_point(ix, iy, iz + 1, ix), + domain_point(ix + 1, iy, iz + 1, ix), + domain_point(ix + 1, iy + 1, iz + 1, ix), + domain_point(ix, iy + 1, iz + 1, ix), + ] + domain.InsertNextCell(vtk.VTK_HEXAHEDRON, 8, ids) + center_x = 0.5 * (x_values[ix] + x_values[ix + 1]) + center_y = 0.5 * (y_values[iy] + y_values[iy + 1]) + center_z = 0.5 * (z_values[iz] + z_values[iz + 1]) + in_fault_zone = ( + -2400.0 <= center_y <= 1200.0 + and -1810.0 <= center_z <= -1575.0 + ) + if in_fault_zone and -2400.0 <= center_x < 1200.0: + attributes.append(0) + elif in_fault_zone and 1200.0 < center_x <= 3600.0: + attributes.append(1) + else: + attributes.append(2) + young_modulus.append(1.495e10) + poisson_ratio.append(0.0) + + add_array(domain.GetPointData(), "GLOBAL_IDS_POINTS", np.arange(domain.GetNumberOfPoints()), vtk.VTK_LONG_LONG) + add_array(domain.GetCellData(), "attribute", attributes, vtk.VTK_INT) + add_array(domain.GetCellData(), "YoungModulus", young_modulus) + add_array(domain.GetCellData(), "PoissonRatio", poisson_ratio) + add_array(domain.GetCellData(), "GLOBAL_IDS_CELLS", np.arange(domain.GetNumberOfCells()), vtk.VTK_LONG_LONG) + domain.GetPointData().SetGlobalIds(domain.GetPointData().GetArray("GLOBAL_IDS_POINTS")) + domain.GetCellData().SetGlobalIds(domain.GetCellData().GetArray("GLOBAL_IDS_CELLS")) + + fracture_points = vtk.vtkPoints() + collocated = [] + fracture_point_ids = {} + for iz in fault_z: + for iy in fault_y: + fracture_point_ids[iy, iz] = fracture_points.InsertNextPoint(1200.0, y_values[iy], z_values[iz]) + collocated.append((base_ids[fault_x, iy, iz], duplicate_ids.get((iy, iz), -1))) + + fracture = vtk.vtkUnstructuredGrid() + fracture.SetPoints(fracture_points) + for iz in list(fault_z)[:-1]: + for iy in list(fault_y)[:-1]: + ids = [ + fracture_point_ids[iy, iz], + fracture_point_ids[iy + 1, iz], + fracture_point_ids[iy + 1, iz + 1], + fracture_point_ids[iy, iz + 1], + ] + fracture.InsertNextCell(vtk.VTK_POLYGON, 4, ids) + add_array(fracture.GetPointData(), "collocated_nodes", collocated, vtk.VTK_LONG_LONG) + add_array(fracture.GetPointData(), "GLOBAL_IDS_POINTS", np.arange(fracture.GetNumberOfPoints()), vtk.VTK_LONG_LONG) + add_array(fracture.GetCellData(), "GLOBAL_IDS_CELLS", np.arange(fracture.GetNumberOfCells()), vtk.VTK_LONG_LONG) + fracture.GetPointData().SetGlobalIds(fracture.GetPointData().GetArray("GLOBAL_IDS_POINTS")) + fracture.GetCellData().SetGlobalIds(fracture.GetCellData().GetArray("GLOBAL_IDS_CELLS")) + + write_grid(domain, mesh_dir / "Domain_Mesh_FaultModel_smoke.vtu") + write_grid(fracture, mesh_dir / "Fault_Mesh_FaultModel_smoke.vtu") + + +def make_curved_fracture_mesh() -> None: + mesh_dir = ROOT / "inputFiles/poromechanicsFractures/MESH" + original = read_grid(mesh_dir / "curvedFrac_domain.vtu") + y_samples = list(range(0, 31, 3)) + z_samples = list(range(0, 81, 4)) + + def original_base_id(ix, iy, iz): + return (iz * 31 + iy) * 6 + ix + + points = vtk.vtkPoints() + base_ids = {} + duplicate_ids = {} + for new_z, old_z in enumerate(z_samples): + for new_y, old_y in enumerate(y_samples): + for ix in range(6): + base_ids[ix, new_y, new_z] = points.InsertNextPoint(original.GetPoint(original_base_id(ix, old_y, old_z))) + for ix in (2, 3): + duplicate_ids[ix, new_y, new_z] = points.InsertNextPoint(original.GetPoint(original_base_id(ix, old_y, old_z))) + + domain = vtk.vtkUnstructuredGrid() + domain.SetPoints(points) + attributes = [] + reduced_centers = [] + for new_z in range(len(z_samples) - 1): + old_z_cell = (z_samples[new_z] + z_samples[new_z + 1] - 1) // 2 + for new_y in range(len(y_samples) - 1): + old_y_cell = (y_samples[new_y] + y_samples[new_y + 1] - 1) // 2 + for ix in range(5): + left = duplicate_ids[2, new_y, new_z] if ix == 2 else base_ids[ix, new_y, new_z] + right = duplicate_ids[3, new_y, new_z] if ix == 2 else base_ids[ix + 1, new_y, new_z] + left_y = duplicate_ids[2, new_y + 1, new_z] if ix == 2 else base_ids[ix, new_y + 1, new_z] + right_y = duplicate_ids[3, new_y + 1, new_z] if ix == 2 else base_ids[ix + 1, new_y + 1, new_z] + left_z = duplicate_ids[2, new_y, new_z + 1] if ix == 2 else base_ids[ix, new_y, new_z + 1] + right_z = duplicate_ids[3, new_y, new_z + 1] if ix == 2 else base_ids[ix + 1, new_y, new_z + 1] + left_yz = duplicate_ids[2, new_y + 1, new_z + 1] if ix == 2 else base_ids[ix, new_y + 1, new_z + 1] + right_yz = duplicate_ids[3, new_y + 1, new_z + 1] if ix == 2 else base_ids[ix + 1, new_y + 1, new_z + 1] + ids = [left, right, right_y, left_y, left_z, right_z, right_yz, left_yz] + domain.InsertNextCell(vtk.VTK_HEXAHEDRON, 8, ids) + reduced_centers.append(np.mean([points.GetPoint(point_id) for point_id in ids], axis=0)) + old_cell = (old_z_cell * 30 + old_y_cell) * 5 + ix + attributes.append(int(original.GetCellData().GetArray("attribute").GetTuple1(old_cell))) + + # Thin material bands can fall between the coarse sampling planes. Preserve + # every original 3-D region by assigning a nearby coarse cell to any missing + # attribute, which keeps the smoke deck's Region/Reservoir selectors valid. + original_centers_filter = vtk.vtkCellCenters() + original_centers_filter.SetInputData(original) + original_centers_filter.Update() + original_centers = original_centers_filter.GetOutput() + original_attributes = original.GetCellData().GetArray("attribute") + reduced_centers = np.asarray(reduced_centers) + counts = {attribute: attributes.count(attribute) for attribute in range(1, 16)} + reserved = set() + for required_attribute in range(1, 16): + if counts[required_attribute]: + continue + source_points = [ + original_centers.GetPoint(cell_id) + for cell_id in range(original.GetNumberOfCells()) + if int(original_attributes.GetTuple1(cell_id)) == required_attribute + ] + target = np.mean(source_points, axis=0) + distances = np.linalg.norm(reduced_centers - target, axis=1) + for cell_id in np.argsort(distances): + old_attribute = attributes[cell_id] + if cell_id not in reserved and counts[old_attribute] > 1: + counts[old_attribute] -= 1 + attributes[cell_id] = required_attribute + counts[required_attribute] += 1 + reserved.add(cell_id) + break + + for new_z in range(len(z_samples) - 1): + for new_y in range(len(y_samples) - 1): + for ix, attribute in ((2, 21), (3, 22)): + ids = [ + base_ids[ix, new_y, new_z], + base_ids[ix, new_y + 1, new_z], + base_ids[ix, new_y + 1, new_z + 1], + base_ids[ix, new_y, new_z + 1], + ] + domain.InsertNextCell(vtk.VTK_QUAD, 4, ids) + attributes.append(attribute) + + add_array(domain.GetPointData(), "GLOBAL_IDS_POINTS", np.arange(domain.GetNumberOfPoints()), vtk.VTK_LONG_LONG) + add_array(domain.GetCellData(), "attribute", attributes, vtk.VTK_INT) + add_array(domain.GetCellData(), "GLOBAL_IDS_CELLS", np.arange(domain.GetNumberOfCells()), vtk.VTK_LONG_LONG) + domain.GetPointData().SetGlobalIds(domain.GetPointData().GetArray("GLOBAL_IDS_POINTS")) + domain.GetCellData().SetGlobalIds(domain.GetCellData().GetArray("GLOBAL_IDS_CELLS")) + + fracture_points = vtk.vtkPoints() + fracture_ids = {} + collocated = [] + for new_z in range(len(z_samples)): + for new_y in range(len(y_samples)): + for ix in (2, 3): + fracture_ids[ix, new_y, new_z] = fracture_points.InsertNextPoint( + original.GetPoint(original_base_id(ix, y_samples[new_y], z_samples[new_z])) + ) + if ix == 2: + collocated.append((duplicate_ids[ix, new_y, new_z], base_ids[ix, new_y, new_z])) + else: + collocated.append((base_ids[ix, new_y, new_z], duplicate_ids[ix, new_y, new_z])) + + fracture = vtk.vtkUnstructuredGrid() + fracture.SetPoints(fracture_points) + fracture_attributes = [] + for new_z in range(len(z_samples) - 1): + for new_y in range(len(y_samples) - 1): + for ix, attribute in ((2, 21), (3, 22)): + ids = [ + fracture_ids[ix, new_y, new_z], + fracture_ids[ix, new_y + 1, new_z], + fracture_ids[ix, new_y + 1, new_z + 1], + fracture_ids[ix, new_y, new_z + 1], + ] + fracture.InsertNextCell(vtk.VTK_POLYGON, 4, ids) + fracture_attributes.append(attribute) + add_array(fracture.GetPointData(), "collocated_nodes", collocated, vtk.VTK_LONG_LONG) + add_array(fracture.GetPointData(), "GLOBAL_IDS_POINTS", np.arange(fracture.GetNumberOfPoints()), vtk.VTK_LONG_LONG) + add_array(fracture.GetCellData(), "attribute", fracture_attributes, vtk.VTK_INT) + add_array(fracture.GetCellData(), "GLOBAL_IDS_CELLS", np.arange(fracture.GetNumberOfCells()), vtk.VTK_LONG_LONG) + fracture.GetPointData().SetGlobalIds(fracture.GetPointData().GetArray("GLOBAL_IDS_POINTS")) + fracture.GetCellData().SetGlobalIds(fracture.GetCellData().GetArray("GLOBAL_IDS_CELLS")) + + write_grid(domain, mesh_dir / "curvedFrac_domain_smoke.vtu") + write_grid(fracture, mesh_dir / "curvedFrac_fracture_smoke.vtu") + + +if __name__ == "__main__": + make_hybrid_property_mesh() + make_fault_mesh() + make_curved_fracture_mesh() From 81ebad5c8f74252bcf22fc9c5460a3497c7001fe Mon Sep 17 00:00:00 2001 From: Joshua White Date: Wed, 12 Aug 2026 12:59:48 -0700 Subject: [PATCH 19/19] Aggressively trim PR; disable two super-slow tests --- .github/workflows/build_and_test.yml | 79 ++++----- .../hydraulicFracturing/Hydrofracturing.ats | 5 +- .../poromechanics/poroElasticCoupling.ats | 5 +- scripts/ci_build_and_test_in_container.sh | 153 +----------------- 4 files changed, 45 insertions(+), 197 deletions(-) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 40b6e3ca90f..59e57a23ae6 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -189,25 +189,20 @@ jobs: exit 1 fi - HAS_DATA_EXCHANGE=false DATA_BASENAME= DATA_EXCHANGE_DIR= if [[ "${{ inputs.BUILD_TYPE }}" = "integrated_tests" ]]; then - HAS_DATA_EXCHANGE=true DATA_BASENAME=integratedTests-pr${{ github.event.number }}-${{ github.run_number }}-${SHORT_COMMIT}.tar.gz script_args+=(--run-integrated-tests) elif [[ "${{ inputs.UPLOAD_TO_GCP }}" == "true" && -n "${{ inputs.GCP_BUCKET }}" ]]; then - HAS_DATA_EXCHANGE=true DATA_BASENAME=GEOS-and-TPL-${SHORT_COMMIT}.tar.gz fi - if [[ "${HAS_DATA_EXCHANGE}" == "true" ]]; then + if [[ -n "${DATA_BASENAME}" ]]; then script_args+=(--data-basename ${DATA_BASENAME}) DATA_EXCHANGE_DIR=${GITHUB_WORKSPACE}/geos-exchange # Exchange folder outside of the container - if [ ! -d "${DATA_EXCHANGE_DIR}" ]; then - mkdir -p ${DATA_EXCHANGE_DIR} - fi + mkdir -p ${DATA_EXCHANGE_DIR} DATA_EXCHANGE_MOUNT_POINT=/tmp/exchange # Exchange folder inside of the container docker_args+=(--volume=${DATA_EXCHANGE_DIR}:${DATA_EXCHANGE_MOUNT_POINT}) script_args+=(--exchange-dir ${DATA_EXCHANGE_MOUNT_POINT}) @@ -362,57 +357,53 @@ jobs: echo "Received exit status ${EXIT_STATUS} from the build process." set -e - if [[ "${HAS_DATA_EXCHANGE}" == "true" ]]; then - if [ -f ${DATA_EXCHANGE_DIR}/${DATA_BASENAME} ]; then + if [[ -n "${DATA_BASENAME}" ]]; then + if [ -f "${DATA_EXCHANGE_DIR}/${DATA_BASENAME}" ]; then echo "Generated artifact at ${DATA_EXCHANGE_DIR}/${DATA_BASENAME}" fi - if [ -f ${DATA_EXCHANGE_DIR}/test_logs_${DATA_BASENAME} ]; then + if [ -f "${DATA_EXCHANGE_DIR}/test_logs_${DATA_BASENAME}" ]; then echo "Generated integrated test logs at ${DATA_EXCHANGE_DIR}/test_logs_${DATA_BASENAME}" fi - if [ -f ${DATA_EXCHANGE_DIR}/baseline_${DATA_BASENAME} ];then - if [[ -n "${{ inputs.LOCAL_BASELINE_DIR }}" ]]; then - # Copy baselines to local Streak2 storage even when cloud upload is disabled. - THIS_PR_NUMBER=pr${{ github.event.number }} - NEW_PR_BASELINE_FOLDER_NAME=baselines_${THIS_PR_NUMBER} - TARGET_DIR="${{ inputs.LOCAL_BASELINE_DIR }}/${NEW_PR_BASELINE_FOLDER_NAME}" - echo "Create folder ${TARGET_DIR}" - mkdir -p "${TARGET_DIR}" - - SOURCE_FILE="${DATA_EXCHANGE_DIR}/baseline_${DATA_BASENAME}" - echo "Copy ${SOURCE_FILE} to ${TARGET_DIR}" - cp "${SOURCE_FILE}" "${TARGET_DIR}" - fi - else - echo "Baselines ${DATA_EXCHANGE_DIR}/baseline_${DATA_BASENAME} were not generated. Likely because no rebaseline was necessary." + if [[ -n "${{ inputs.LOCAL_BASELINE_DIR }}" ]]; then + THIS_PR_NUMBER=pr${{ github.event.number }} + TARGET_DIR="${{ inputs.LOCAL_BASELINE_DIR }}/baselines_${THIS_PR_NUMBER}" + mkdir -p "${TARGET_DIR}" + + for file in \ + "${DATA_EXCHANGE_DIR}/baseline_${DATA_BASENAME}" \ + "${DATA_EXCHANGE_DIR}/test_logs_${DATA_BASENAME}" + do + if [ -f "${file}" ]; then + cp "${file}" "${TARGET_DIR}" + echo "Copied $(basename "${file}") to ${TARGET_DIR}" + fi + done + fi + + if [ ! -f "${DATA_EXCHANGE_DIR}/baseline_${DATA_BASENAME}" ]; then + echo "No new baseline archive was generated." fi fi - # Send to the bucket and print the download link when explicitly enabled. if [[ "${{ inputs.UPLOAD_TO_GCP }}" == "true" && -n "${{ inputs.GCP_BUCKET }}" ]]; then if [[ "${{ inputs.BUILD_TYPE }}" = "integrated_tests" || ${EXIT_STATUS} -eq 0 ]]; then - # disable warning about parallel composite upload CLOUDSDK_PYTHON=python3 gcloud config set storage/parallel_composite_upload_enabled True - if [ -f ${DATA_EXCHANGE_DIR}/${DATA_BASENAME} ]; then - CLOUDSDK_PYTHON=python3 gcloud storage cp --quiet -a publicRead ${DATA_EXCHANGE_DIR}/${DATA_BASENAME} gs://${{ inputs.GCP_BUCKET }}/ - echo "Download the bundle at https://storage.googleapis.com/${{ inputs.GCP_BUCKET }}/${DATA_BASENAME}" - fi - - if [ -f ${DATA_EXCHANGE_DIR}/test_logs_${DATA_BASENAME} ]; then - CLOUDSDK_PYTHON=python3 gcloud storage cp --quiet -a publicRead ${DATA_EXCHANGE_DIR}/test_logs_${DATA_BASENAME} gs://${{ inputs.GCP_BUCKET }}/ - echo "Download integrated test logs here: https://storage.googleapis.com/${{ inputs.GCP_BUCKET }}/test_logs_${DATA_BASENAME}" - fi - - if [ -f ${DATA_EXCHANGE_DIR}/baseline_${DATA_BASENAME} ];then - CLOUDSDK_PYTHON=python3 gcloud storage cp --quiet -a publicRead ${DATA_EXCHANGE_DIR}/baseline_${DATA_BASENAME} gs://${{ inputs.GCP_BUCKET }}/ - echo "Download test baselines here: https://storage.googleapis.com/${{ inputs.GCP_BUCKET }}/baseline_${DATA_BASENAME}" - echo "New baseline ID: baseline_${DATA_BASENAME::-7}" - else - echo "Baselines ${DATA_EXCHANGE_DIR}/baseline_${DATA_BASENAME} were not uploaded. Likely because no rebaseline was necessary." - fi + for file in \ + "${DATA_EXCHANGE_DIR}/${DATA_BASENAME}" \ + "${DATA_EXCHANGE_DIR}/test_logs_${DATA_BASENAME}" \ + "${DATA_EXCHANGE_DIR}/baseline_${DATA_BASENAME}" + do + if [ -f "${file}" ]; then + CLOUDSDK_PYTHON=python3 gcloud storage cp --quiet -a publicRead "${file}" gs://${{ inputs.GCP_BUCKET }}/ + echo "Uploaded https://storage.googleapis.com/${{ inputs.GCP_BUCKET }}/$(basename "${file}")" + fi + done fi + else + echo "GCP upload disabled." fi exit ${EXIT_STATUS} diff --git a/inputFiles/hydraulicFracturing/Hydrofracturing.ats b/inputFiles/hydraulicFracturing/Hydrofracturing.ats index 73f850207f1..130bf0deec1 100644 --- a/inputFiles/hydraulicFracturing/Hydrofracturing.ats +++ b/inputFiles/hydraulicFracturing/Hydrofracturing.ats @@ -119,7 +119,10 @@ penny_shaped_viscosity_dominated_poroelastic = { pkn_viscosity_dominated = { "name": "pknViscosityDominated_smoke", "description": "PKN fracture in Viscosity-dominated regime", - "partitions": ((1, 1, 1), (1, 2, 2)), + "partitions": ((1, 1, 1), + # Temporarily disabled: pknViscosityDominated_smoke_01 + # (1, 2, 2), + ), "restart_step": 5, "check_step": 10, "tolerance": [1.8e-5, 2e5], diff --git a/inputFiles/poromechanics/poroElasticCoupling.ats b/inputFiles/poromechanics/poroElasticCoupling.ats index adfd5cf05ae..93f08d82535 100644 --- a/inputFiles/poromechanics/poroElasticCoupling.ats +++ b/inputFiles/poromechanics/poroElasticCoupling.ats @@ -377,7 +377,10 @@ def _build_PoroElasticPEBICO2Sequential_cases(): restartcheck_params = {"atol": 1.0e-5, "rtol": 2.0e-7} return _build_poro_elastic_coupling_case( "PoroElastic_hybridHexPrism_co2_sequential_3d.xml", (5, 10), - ((1, 1, 1), (2, 2, 1)), description, restartcheck_params) + ((1, 1, 1), + # Temporarily disabled: PoroElastic_hybridHexPrism_co2_sequential_3d_01 + # (2, 2, 1), + ), description, restartcheck_params) def _build_PoroElasticGravity_cases(): diff --git a/scripts/ci_build_and_test_in_container.sh b/scripts/ci_build_and_test_in_container.sh index ca21f7917bb..09913ff81a6 100755 --- a/scripts/ci_build_and_test_in_container.sh +++ b/scripts/ci_build_and_test_in_container.sh @@ -20,84 +20,13 @@ function or_die () { local status=$? if [[ $status != 0 ]] ; then - if [[ -n "${CURRENT_PHASE_LABEL:-}" ]]; then - phase_finish "${status}" - fi echo ERROR $status command: $@ exit $status fi } -PHASE_TIMINGS=() -CURRENT_PHASE_LABEL="" -CURRENT_PHASE_START="" tempdir="" -function now_epoch () { - date +%s -} - -function format_duration () { - local total_seconds=$1 - local hours=$(( total_seconds / 3600 )) - local minutes=$(( (total_seconds % 3600) / 60 )) - local seconds=$(( total_seconds % 60 )) - - if (( hours > 0 )); then - printf '%dh %02dm %02ds' "${hours}" "${minutes}" "${seconds}" - elif (( minutes > 0 )); then - printf '%dm %02ds' "${minutes}" "${seconds}" - else - printf '%ds' "${seconds}" - fi -} - -function phase_start () { - CURRENT_PHASE_LABEL="$1" - CURRENT_PHASE_START="$(now_epoch)" -} - -function phase_finish () { - local status="${1:-0}" - local label="${CURRENT_PHASE_LABEL:-}" - local start="${CURRENT_PHASE_START:-}" - - if [[ -z "${label}" || -z "${start}" ]]; then - return 0 - fi - - local duration=$(( $(now_epoch) - start )) - PHASE_TIMINGS+=("${label}|${duration}|${status}") - - if [[ "${status}" -eq 0 ]]; then - echo ">>> ${label} completed in $(format_duration "${duration}")" - else - echo ">>> ${label} failed after $(format_duration "${duration}") (exit ${status})" - fi - - CURRENT_PHASE_LABEL="" - CURRENT_PHASE_START="" -} - -function print_phase_summary () { - local entry label duration status status_text - - if [[ ${#PHASE_TIMINGS[@]} -eq 0 ]]; then - return 0 - fi - - echo "Phase timing summary:" - for entry in "${PHASE_TIMINGS[@]}"; do - IFS='|' read -r label duration status <<< "${entry}" - if [[ "${status}" -eq 0 ]]; then - status_text="ok" - else - status_text="exit ${status}" - fi - printf ' - %s: %s (%s)\n' "${label}" "$(format_duration "${duration}")" "${status_text}" - done -} - function openssl_fips_provider_available () { local fips_module_path @@ -187,59 +116,14 @@ function print_crypto_diagnostics () { fi echo "Crypto/FIPS summary:" - - if [[ -r /etc/os-release ]]; then - # shellcheck disable=SC1091 - . /etc/os-release - echo " os: ${PRETTY_NAME:-${ID:-unknown}}" - fi - echo " host fips_enabled: ${fips_enabled:-unavailable}" echo " container /etc/system-fips: $(if [[ -e /etc/system-fips ]]; then echo present; else echo absent; fi)" echo " openssl fips provider module: $(if openssl_fips_provider_available; then echo present; else echo absent; fi)" - - for var in OPENSSL_CONF OPENSSL_MODULES OPENSSL_FORCE_FIPS_MODE; do - echo " ${var}: ${!var:-}" - done + echo " OPENSSL_CONF: ${OPENSSL_CONF:-}" + echo " OPENSSL_FORCE_FIPS_MODE: ${OPENSSL_FORCE_FIPS_MODE:-}" if command -v openssl >/dev/null 2>&1; then openssl version 2>&1 | sed 's/^/ openssl version: /' || true - if openssl md5 /dev/null >/dev/null 2>&1 && openssl rand -hex 8 >/dev/null 2>&1; then - echo " openssl smoke test: ok" - else - echo " openssl smoke test: failed" - openssl list -providers 2>&1 | sed 's/^/ openssl providers: /' || true - if [[ -n "${OPENSSL_CONF:-}" && -r "${OPENSSL_CONF}" ]]; then - grep -Ei '^(openssl_conf|providers|alg_section|activate|default_properties)' "${OPENSSL_CONF}" 2>/dev/null | sed 's/^/ active openssl config: /' || true - fi - fi - else - echo " openssl: not found" - fi - - if command -v python3 >/dev/null 2>&1; then - python3 - <<'PY' 2>&1 | sed 's/^/ python crypto: /' || true -import hashlib -import os -import ssl - -print("ssl:", ssl.OPENSSL_VERSION) - -try: - hashlib.md5(b"geos").hexdigest() - hashlib.sha256(b"geos").hexdigest() - print("hashlib smoke test: ok") -except Exception as exc: - print(f"hashlib smoke test: failed {type(exc).__name__}: {exc}") - -try: - os.urandom(8) - print("os.urandom smoke test: ok") -except Exception as exc: - print(f"os.urandom smoke test: failed {type(exc).__name__}: {exc}") -PY - else - echo " python3: not found" fi } @@ -415,11 +299,6 @@ fi cleanup() { - if [[ -n "${CURRENT_PHASE_LABEL:-}" ]]; then - phase_finish 1 - fi - - print_phase_summary echo "Container cleanup..." if [[ -n "${tempdir:-}" ]]; then rm -rf "${tempdir}" || true @@ -494,7 +373,6 @@ if [[ -n "${CTEST_PARALLEL_LEVEL_ARG}" ]]; then fi if [[ "${RUN_INTEGRATED_TESTS}" = true ]]; then - phase_start "Set up integrated test environment" echo "Running the integrated tests has been requested." # We install the python environment required by ATS to run the integrated tests. @@ -524,7 +402,6 @@ if [[ "${RUN_INTEGRATED_TESTS}" = true ]]; then "-DPython3_EXECUTABLE=${ATS_PYTHON_HOME}/bin/python3" "-DATS_BASELINE_DIR=${ATS_BASELINE_DIR}" "-DATS_WORKING_DIR=${ATS_WORKING_DIR}") - phase_finish 0 fi @@ -577,7 +454,6 @@ fi # This will tells OpenMPI to discover the number of hardware threads on the node, # and use that as the number of slots available. (There is a distinction between threads and cores). GEOS_BUILD_DIR=/tmp/geos-build -phase_start "Configure" or_die python3 scripts/config-build.py \ -hc ${HOST_CONFIG} \ -bt ${CMAKE_BUILD_TYPE} \ @@ -597,29 +473,23 @@ or_die python3 scripts/config-build.py \ ${SCCACHE_CMAKE_ARGS} \ ${LCOV_CMAKE_ARGS} \ "${ATS_CMAKE_ARGS[@]}" -phase_finish 0 # The configuration step is now over, we can now move to the build directory for the build! or_die cd ${GEOS_BUILD_DIR} # Code style check if [[ "${TEST_CODE_STYLE}" = true ]]; then - phase_start "Code style check" or_die ctest --output-on-failure -R "testUncrustifyCheck" - phase_finish 0 exit 0 fi # Documentation check if [[ "${TEST_DOCUMENTATION}" = true ]]; then - phase_start "Documentation check" or_die ctest --output-on-failure -R "testDoxygenCheck" - phase_finish 0 exit 0 fi # Performing the requested build. -phase_start "Build" if [[ "${BUILD_EXE_ONLY}" = true ]]; then or_die cmake --build . -j $NPROC --target geosx else @@ -638,7 +508,6 @@ else or_die tar czf ${DATA_EXCHANGE_DIR}/${DATA_BASENAME_WE}.tar.gz --directory=${GEOS_TPL_DIR}/.. --transform "s|^./|${DATA_BASENAME_WE}/|" . fi fi -phase_finish 0 if [[ -n "${SCCACHE_BIN}" ]]; then echo "Capturing sccache post-build stats" @@ -653,22 +522,18 @@ if [[ -n "${SCCACHE_BIN}" ]]; then fi if [[ "${CODE_COVERAGE}" = true ]]; then - phase_start "Generate code coverage" export OMP_NUM_THREADS=1 or_die cmake --build . --target coreComponents_coverage or_die cp -r ${GEOS_BUILD_DIR}/coreComponents_coverage.info.cleaned ${GEOS_SRC_DIR}/geos_coverage.info.cleaned - phase_finish 0 fi # Run the unit tests (excluding previously ran checks). if [[ "${RUN_UNIT_TESTS}" = true ]]; then - phase_start "Unit tests" if [ ${HOSTNAME} == 'streak.llnl.gov' ] || [ ${HOSTNAME} == 'streak2.llnl.gov' ]; then or_die ctest --output-on-failure -E "testUncrustifyCheck|testDoxygenCheck|testExternalSolvers" else or_die ctest --output-on-failure -E "testUncrustifyCheck|testDoxygenCheck" fi - phase_finish 0 fi if [[ "${RUN_INTEGRATED_TESTS}" = true ]]; then @@ -681,12 +546,10 @@ if [[ "${RUN_INTEGRATED_TESTS}" = true ]]; then fi # We split the process in two steps. First installing the environment, then running the tests. - phase_start "Build ATS environment" or_die cmake --build . --target ats_environment # The system-site virtualenv inherits Ubuntu's NumPy 1.x-built Matplotlib, # while the GEOS Python packages require NumPy 2.x. or_die "${ATS_PYTHON_HOME}/bin/python3" -m pip install --disable-pip-version-check --upgrade matplotlib - phase_finish 0 # The tests are not run using cmake (`cmake --build . --verbose --target ats_run`) # because with ninja it swallows the output while all the @@ -696,12 +559,9 @@ if [[ "${RUN_INTEGRATED_TESTS}" = true ]]; then ls -lR /tmp/geos/baselines echo "Running integrated tests..." - phase_start "Integrated tests" integratedTests/geos_ats.sh --baselineCacheDirectory /tmp/geos/baselines ATS_RUN_STATUS=$? - phase_finish "${ATS_RUN_STATUS}" - phase_start "Process integrated test logs" PROCESS_LOGS_STATUS=0 echo "Processing logs..." bin/geos_ats_process_tests_fails --directory integratedTests/TestResults &> integratedTests/TestResults/processedTestsLogs.txt || PROCESS_LOGS_STATUS=$? @@ -709,14 +569,11 @@ if [[ "${RUN_INTEGRATED_TESTS}" = true ]]; then echo "Packing logs..." tar -czf ${DATA_EXCHANGE_DIR}/test_logs_${DATA_BASENAME_WE}.tar.gz integratedTests/TestResults || PROCESS_LOGS_STATUS=$? fi - phase_finish "${PROCESS_LOGS_STATUS}" echo "Checking results..." - phase_start "Check integrated test results" bin/geos_ats_log_check integratedTests/TestResults/test_results.ini -y ${GEOS_SRC_DIR}/.integrated_tests.yaml &> $tempdir/log_check.txt LOG_CHECK_STATUS=$? cat $tempdir/log_check.txt - phase_finish "${LOG_CHECK_STATUS}" if [[ "${ATS_RUN_STATUS}" -eq 0 && "${LOG_CHECK_STATUS}" -eq 0 ]] && grep -q "Overall status: PASSED" "$tempdir/log_check.txt"; then echo "IntegratedTests passed. No rebaseline required." @@ -726,7 +583,6 @@ if [[ "${RUN_INTEGRATED_TESTS}" = true ]]; then # Rebaseline and pack into an archive echo "Rebaselining..." - phase_start "Rebaseline integrated tests" REBASELINE_STATUS=0 integratedTests/geos_ats.sh -a rebaselinefailed || REBASELINE_STATUS=$? @@ -734,7 +590,6 @@ if [[ "${RUN_INTEGRATED_TESTS}" = true ]]; then echo "Packing baselines..." integratedTests/geos_ats.sh -a pack_baselines --baselineArchiveName ${DATA_EXCHANGE_DIR}/baseline_${DATA_BASENAME_WE}.tar.gz --baselineCacheDirectory /tmp/geos/baselines || REBASELINE_STATUS=$? fi - phase_finish "${REBASELINE_STATUS}" INTEGRATED_TEST_EXIT_STATUS=1 fi @@ -744,15 +599,11 @@ if [[ "${RUN_INTEGRATED_TESTS}" = true ]]; then fi # Cleaning the build directory. -phase_start "Clean build directory" or_die cmake --build . --target clean -phase_finish 0 # Clean the repository -phase_start "Clean repository" or_die cd ${GEOS_SRC_DIR}/inputFiles find . -name '*.pyc' -delete -phase_finish 0 # If we're here, either everything went OK or we have to deal with the integrated tests manually. if [[ ! -z "${INTEGRATED_TEST_EXIT_STATUS+x}" ]]; then