{
  "_class" : "org.jenkinsci.plugins.workflow.job.WorkflowRun",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.triggers.SCMTrigger$SCMTriggerCause",
          "shortDescription" : "Started by an SCM change"
        }
      ]
    },
    {
      
    },
    {
      "_class" : "jenkins.metrics.impl.TimeInQueueAction",
      "blockedDurationMillis" : 0,
      "blockedTimeMillis" : 0,
      "buildableDurationMillis" : 0,
      "buildableTimeMillis" : 0,
      "buildingDurationMillis" : 3457841,
      "executingTimeMillis" : 3456491,
      "executorUtilization" : 1.0,
      "subTaskCount" : 1,
      "waitingDurationMillis" : 5189,
      "waitingTimeMillis" : 5189
    },
    {
      "_class" : "org.jenkinsci.plugins.workflow.libs.LibrariesAction"
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "refs/remotes/origin/clubb_silhs_devel" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 188,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "6fda8e14438857fdf16e8afb5b32a52302cfd2e9",
            "branch" : [
              {
                "SHA1" : "6fda8e14438857fdf16e8afb5b32a52302cfd2e9",
                "name" : "refs/remotes/origin/clubb_silhs_devel"
              }
            ]
          },
          "revision" : {
            "SHA1" : "6fda8e14438857fdf16e8afb5b32a52302cfd2e9",
            "branch" : [
              {
                "SHA1" : "6fda8e14438857fdf16e8afb5b32a52302cfd2e9",
                "name" : "refs/remotes/origin/clubb_silhs_devel"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "6fda8e14438857fdf16e8afb5b32a52302cfd2e9",
        "branch" : [
          {
            "SHA1" : "6fda8e14438857fdf16e8afb5b32a52302cfd2e9",
            "name" : "refs/remotes/origin/clubb_silhs_devel"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/larson-group/cam.git"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    },
    {
      "_class" : "org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction"
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.workflow.job.views.FlowGraphAction"
    },
    {
      
    },
    {
      
    }
  ],
  "artifacts" : [
    
  ],
  "building" : False,
  "description" : None,
  "displayName" : "#188",
  "duration" : 3457841,
  "estimatedDuration" : 4137974,
  "executor" : None,
  "fullDisplayName" : "cam_gpu_test #188",
  "id" : "188",
  "keepLog" : False,
  "number" : 188,
  "queueId" : 10389,
  "result" : "SUCCESS",
  "timestamp" : 1791879366511,
  "url" : "https://carson.math.uwm.edu/jenkins/job/cam_gpu_test/188/",
  "changeSets" : [
    {
      "_class" : "hudson.plugins.git.GitChangeSetList",
      "items" : [
        {
          "_class" : "hudson.plugins.git.GitChangeSet",
          "affectedPaths" : [
            "src/physics/cam/clubb_intr.F90"
          ],
          "commitId" : "12892aee4b22b4c8e170df4d7e287591e0a2db1c",
          "timestamp" : 1791842299000,
          "author" : {
            "absoluteUrl" : "https://carson.math.uwm.edu/jenkins/user/ebel",
            "fullName" : "Daniel Ebel"
          },
          "authorEmail" : "debel@uwm.edu",
          "comment" : "host model change for clubb PR 1386\u000a",
          "date" : "2026-10-12 16:58:19 -0500",
          "id" : "12892aee4b22b4c8e170df4d7e287591e0a2db1c",
          "msg" : "host model change for clubb PR 1386",
          "paths" : [
            {
              "editType" : "edit",
              "file" : "src/physics/cam/clubb_intr.F90"
            }
          ]
        },
        {
          "_class" : "hudson.plugins.git.GitChangeSet",
          "affectedPaths" : [
            "advance_clubb_core_module.F90",
            "advance_windm_edsclrm_module.F90",
            "numerical_check.F90"
          ],
          "commitId" : "9cb7901d3cd05834fa6bb2fd4d70f22eb4ef395e",
          "timestamp" : 1791843053000,
          "author" : {
            "absoluteUrl" : "https://carson.math.uwm.edu/jenkins/user/noreply",
            "fullName" : "noreply"
          },
          "authorEmail" : "noreply@github.com",
          "comment" : "Fix arm97+l do expldiff rtm thlm+set edsclrm f early (#1386)\u000a\u000a* Do not force the thlm/rtm copies in the expldiff eddy-scalar solve\u000a\u000aWith l_do_expldiff_rtm_thlm, advance_windm_edsclrm copies thlm into\u000aedsclrm(:,:,edsclr_dim-1) and rtm into edsclrm(:,:,edsclr_dim), advances all\u000aeddy scalars, and copies those two slots back into thlm and rtm. The solve\u000aadded edsclrm_forcing of each slot to the copies, but thlm and rtm are\u000aalready advanced with thlm_forcing and rtm_forcing in advance_xm_wpxp.\u000a\u000aIn the standalone driver the slots are filled by iiedsclr_thl/iiedsclr_rt:\u000a- arm_97 (iiedsclr_rt = 1, iiedsclr_thl = 2) put thlm_forcing [K/s] on rtm,\u000a  so rtm < 0 at ~5.5-8.8 km within the first steps (flag11 / expldiff).\u000a- With the slots in expldiff order, rtm_forcing was applied twice and arm_97\u000a  still hit rtm < 0 near 12 km after 1379 of 5580 steps.\u000a\u000aThe copies now get no forcing. Mirrored in the JAX port.\u000a\u000aOnly changes runs with l_do_expldiff_rtm_thlm = .true. and non-zero\u000aedsclrm_forcing in the last two eddy scalars, therefore BIT_CHANGING for\u000athose. Default runs are bit-for-bit identical (arm_97, 1076 variables).\u000a\u000aCo-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>\u000a\u000a* not hardwire the thlm and rtm edsclrm variables to be the last two; instead use sclr_idx%iiedsclr_thlm and sclr_idx%iiedsclr_rtm\u000a\u000aPreviously l_do_expldiff_rtm_thlm = true forced the last slot to be rtm and the one before that to be thlm.\u000aIf in the ..._model.in file iiedsclr_rt     = 1 ! Location in the edsclrm array to place total water\u000aand iiedsclr_thl    = 2 ! Location in the edsclrm array to place a scalar like thetal\u000aa switcheroo happens.\u000aBut if we use a not hardcoded indexing we need to check for out of bounds and distinctness of the 2 indices.\u000a\u000a* Zero edsclrm_forcings early in apply_time_dependent_forcings_from_array\u000a\u000aCheck edsclrm_forcings != 0 instead of zeroing in advance_windm_edsclrm\u000aBIT_CHANGING for l_do_expldiff_rtm_thlm = .true. for arm_97 and for cobra.\u000a\u000aPython changes include: clubb_jax, clubb_python (+f2py) + tests\u000a\u000a* Check l_do_expldiff_rtm_thlm eddy scalars in check_clubb_settings_api\u000a\u000a1. Move the eddy-scalar checks into check_clubb_settings_api\u000a\u000acheck_clubb_settings_api now takes edsclr_dim and sclr_idx.\u000aWith l_do_expldiff_rtm_thlm = .true. it stops the run if\u000a- edsclr_dim <= 1, since the copies of thlm and rtm need two eddy\u000a  scalars, or\u000a- iiedsclr_thl and iiedsclr_rt are not distinct indices in\u000a  1:edsclr_dim.\u000aThe index check moved to check_clubb_settings_api from advance_windm_edsclrm.\u000aThe check that edsclrm_forcing is zero for the thlm/rtm copies stays in\u000aadvance_windm_edsclrm, because prescribe_forcings sets edsclrm_forcing\u000aevery time step, after the settings check has run.\u000a\u000aCallers in Fortran and mirrors (clubb-jax, python api) are updated\u000a\u000aBehavior change: l_do_expldiff_rtm_thlm = .true. with fewer than two\u000aeddy scalars used to skip explicit diffusion silently and now stops at\u000asetup. This affects flag sets that turn the flag on for every case,\u000ae.g. flag11 in input/flag_sets/run_bindiff_w_flags_config_core_flags.json.\u000aHost models must pass the new arguments; CAM must also set\u000asclr_idx%iiedsclr_thl/iiedsclr_rt when clubb_l_do_expldiff_rtm_thlm is\u000aon, since it leaves them at -1.\u000a\u000a2. Fix the Python API\u000a\u000a- calc_derived_params now requires nu_vert_res_dep and always pushes\u000a  it to the F2PY storage (new helper NuVertResDep.zeros(ngrdcol)).\u000a  Before, nu_vert_res_dep=None kept the previous call's stored arrays,\u000a  and calc_derived_params only allocates them when unallocated. So a\u000a  call with more columns than an earlier one in the same process wrote\u000a  out of bounds. This crashed the in-process Python API pytest suite\u000a  once the windm tests used two columns.\u000a- clubb_f2py.pyf was missing l_do_expldiff_rtm_thlm for\u000a  f2py_prescribe_forcings, so the Python driver failed on every case.\u000a\u000a3. Gate the JAX rerun settings check at debug level 0\u000a\u000aset_case_initial_conditions in the JAX driver now runs\u000acheck_clubb_settings at debug level >= 0, matching clubb_driver.F90\u000asince 9429ba2f1.\u000a\u000aAlso: put l_do_expldiff_rtm_thlm on its own line in the\u000atime_dependent_input/prescribe_forcings argument lists.\u000a\u000aBit-for-bit: default-flag output is unchanged, and arm_97 with\u000al_do_expldiff_rtm_thlm = .true. matches the previous commit exactly.\u000a\u000aTested: debug + Python build and source checks; settings parity test;\u000aPython API pytests (237 passed in one process); JAX pytests (791\u000apassed); utilities settings-rule pytests; python-vs-fortran and\u000ajax-vs-fortran bomex/atex; bomex and cobra with the flag stop at setup\u000ain the Fortran, Python and JAX drivers.\u000a\u000aCo-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>\u000a\u000a* Do not apply surface fluxes to the expldiff thlm/rtm eddy-scalar copies\u000a\u000aWith l_do_expldiff_rtm_thlm, advance_windm_edsclrm copies thlm and rtm into\u000athe iiedsclr_thl and iiedsclr_rt eddy scalars, solves all eddy scalars with\u000atheir surface flux wpedsclrp(:,gr%k_lb_zm,:) (from wpedsclrp_sfc) and copies\u000athe two slots back. thlm and rtm already get wpthlp_sfc and wprtp_sfc in\u000aadvance_xm_wpxp, so a non-zero surface flux on the copies applies it twice.\u000a\u000aSame approach as the edsclrm_forcing fix:\u000a\u000a1. cobra_sfclyr (the only case that sets these fluxes) takes\u000a   l_do_expldiff_rtm_thlm and sets wpedsclrp_sfc of the thlm/rtm copies to\u000a   zero when it is on. set_sclr_sfc_rtm_thlm already zeroes all eddy-scalar\u000a   surface fluxes.\u000a2. advance_windm_edsclrm stops with a fatal error if the surface flux of\u000a   either copy is non-zero, after the edsclrm_forcing check.\u000a\u000aMirrored in the JAX port (new reason code\u000aERR_WINDM_EDSCLRM_SFC_FLUX_EXPLDIFF_COPY; marks the columns fatal without\u000areturning early, like the forcing check). No Python API wrapper changes.\u000aCAM zeroes all eddy-scalar surface fluxes, so it is unaffected.\u000a\u000aDefault cobra output is unchanged. But technically BIT_CHANGING for cobra + l_use_expldiff_rtm_thlm\u000a\u000a* Compute cobra's CO2 surface flux per column\u000a\u000acobra_sfclyr converted the CO2 surface flux with each column's surface\u000adensity inside the column loop, but stored it in the scalar CO2_flx2, and\u000athe later loops gave every column that one value:\u000a\u000a- CPU: every column got the last column's CO2 flux. Standalone columns\u000a  currently share one density profile, so results were unaffected.\u000a- OpenACC: the scalar was private to the device loop, and the later loops\u000a  copied the never-set host value (implicit firstprivate). In the GPU\u000a  build cobra's CO2 surface flux was 0 at every step.\u000a\u000aCO2_flx2 is now a per-column array (enter/exit data create/delete like\u000aother case routines). The JAX port already computes it per column.\u000a\u000aBit-for-bit: CPU cobra output is unchanged (1 and 2 columns, standard\u000astats incl. the CO2 scalars). GPU cobra output changes: before, the CO2\u000asurface flux was 0 and CO2 differed from the CPU run by up to 10%;\u000anow the CO2 scalars match the CPU run to ~1e-11 relative, like the other\u000afields.\u000a\u000aTested: gfortran debug build and source checks; standalone check of\u000acobra_sfclyr with two columns of different density (before: column 1 got\u000acolumn 2's flux); nvhpc 24.3 OpenACC build and cobra on a Quadro P4000.\u000a\u000aCo-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>\u000a\u000a* removed the idiot proofing\u000a\u000a* fully removed idiot proofing for l_do_expldiff_rtm_thlm+esclrdim\u000a\u000a---------\u000a\u000aCo-authored-by: Claude Opus 5.5 <noreply@anthropic.com>\u000a",
          "date" : "2026-10-12 17:10:53 -0500",
          "id" : "9cb7901d3cd05834fa6bb2fd4d70f22eb4ef395e",
          "msg" : "Fix arm97+l do expldiff rtm thlm+set edsclrm f early (#1386)",
          "paths" : [
            {
              "editType" : "edit",
              "file" : "numerical_check.F90"
            },
            {
              "editType" : "edit",
              "file" : "advance_clubb_core_module.F90"
            },
            {
              "editType" : "edit",
              "file" : "advance_windm_edsclrm_module.F90"
            }
          ]
        }
      ],
      "kind" : "git"
    }
  ],
  "culprits" : [
    {
      "absoluteUrl" : "https://carson.math.uwm.edu/jenkins/user/noreply",
      "fullName" : "noreply"
    },
    {
      "absoluteUrl" : "https://carson.math.uwm.edu/jenkins/user/ebel",
      "fullName" : "Daniel Ebel"
    }
  ],
  "inProgress" : False,
  "nextBuild" : {
    "number" : 189,
    "url" : "https://carson.math.uwm.edu/jenkins/job/cam_gpu_test/189/"
  },
  "previousBuild" : {
    "number" : 187,
    "url" : "https://carson.math.uwm.edu/jenkins/job/cam_gpu_test/187/"
  }
}