<workflowRun _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.model.Cause$UserIdCause'><shortDescription>Started by user Gunther Huebler</shortDescription><userId>huebler</userId><userName>Gunther Huebler</userName></cause></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>0</buildingDurationMillis><executingTimeMillis>1944844</executingTimeMillis><executorUtilization>1.0</executorUtilization><subTaskCount>4</subTaskCount><waitingDurationMillis>1</waitingDurationMillis><waitingTimeMillis>1</waitingTimeMillis></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>21</buildNumber><marked><SHA1>b2a6a9ceab12125d4a2542da4e20736039f3a744</SHA1><branch><SHA1>b2a6a9ceab12125d4a2542da4e20736039f3a744</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>b2a6a9ceab12125d4a2542da4e20736039f3a744</SHA1><branch><SHA1>b2a6a9ceab12125d4a2542da4e20736039f3a744</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>b2a6a9ceab12125d4a2542da4e20736039f3a744</SHA1><branch><SHA1>b2a6a9ceab12125d4a2542da4e20736039f3a744</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/larson-group/clubb.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action></action><action></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><building>true</building><displayName>#21</displayName><duration>0</duration><estimatedDuration>3535703</estimatedDuration><executor _class='hudson.model.OneOffExecutor'></executor><fullDisplayName>clubb_stats_output_consistency #21</fullDisplayName><id>21</id><keepLog>false</keepLog><number>21</number><queueId>11462</queueId><timestamp>1792619844820</timestamp><url>https://carson.math.uwm.edu/jenkins/view/wrf_branch_tests/job/clubb_stats_output_consistency/21/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>clubb_jax/src/CLUBB_core/parameter_indices.py</affectedPath><affectedPath>input/parameter_and_flag_configs/coriolis_cases/atex_long_parameters.in</affectedPath><affectedPath>input/parameter_and_flag_configs/e3sm_maint32/tunable_parameters.in</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/model_flags.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_python_port_api_coverage.py</affectedPath><affectedPath>clubb_python_api/clubb_python/CLUBB_core/mixing_length.py</affectedPath><affectedPath>input/flag_sets/run_bindiff_w_flags_config_core_flags.json</affectedPath><affectedPath>input/parameter_and_flag_configs/coriolis_cases/coriolis_test_parameters.in</affectedPath><affectedPath>src/CLUBB_core/mixing_length.F90</affectedPath><affectedPath>tuner/pytests/test_parameter_ranges.py</affectedPath><affectedPath>src/clubb_tuner.F90</affectedPath><affectedPath>input/flag_sets/config_core_flags_wo_never_supported_jax_features.json</affectedPath><affectedPath>input/parameter_and_flag_configs/Lscale/configurable_model_flags.in</affectedPath><affectedPath>src/CLUBB_core/model_flags.F90</affectedPath><affectedPath>clubb_python_driver/advance_clubb_core.py</affectedPath><affectedPath>clubb_python_api/f2py_fortran_wrappers/mixing_length_wrapper.F90</affectedPath><affectedPath>clubb_python_api/clubb_python/derived_types/config_flags_converter.py</affectedPath><affectedPath>clubb_jax/tests/test_loss_driver.py</affectedPath><affectedPath>clubb_python_driver/clubb_constants.py</affectedPath><affectedPath>src/G_unit_test_types/pdf_parameter_tests.F90</affectedPath><affectedPath>tests/run_jax_vs_fortran_cases.py</affectedPath><affectedPath>src/SILHS/silhs_importance_sample_module.F90</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_mixing_length.py</affectedPath><affectedPath>src/CLUBB_core/parameters_tunable.F90</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/test_param_names.py</affectedPath><affectedPath>clubb_jax/tests/run_jax_timestep_gradient_test.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/mixing_length.py</affectedPath><affectedPath>input/parameter_and_flag_configs/tauMatchLscale/configurable_model_flags.in</affectedPath><affectedPath>input/parameter_and_flag_configs/e3sm_maint32/maint32_defaults_report.md</affectedPath><affectedPath>utilities/clubb_settings_validation.py</affectedPath><affectedPath>src/CLUBB_core/clubb_api_module.F90</affectedPath><affectedPath>clubb_jax/tests/benchmark_mixing_length.py</affectedPath><affectedPath>tests/run_python_vs_fortran_cases.py</affectedPath><affectedPath>clubb_python_api/clubb_f2py.pyf</affectedPath><affectedPath>clubb_jax/README.md</affectedPath><affectedPath>input/parameter_and_flag_configs/tauMatchLscale/tunable_parameters.in</affectedPath><affectedPath>dash_app/misc_tab/mixing_length_trajectories/analysis.py</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_xm_wpxp.py</affectedPath><affectedPath>input/parameter_and_flag_configs/e3sm_maint32/configurable_model_flags.in</affectedPath><affectedPath>input/parameter_and_flag_configs/default/configurable_model_flags.in</affectedPath><affectedPath>dash_app/pytests/test_tune_callbacks_settings.py</affectedPath><affectedPath>input/parameter_and_flag_configs/compatible_r8029/configurable_model_flags.in</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/parameters_tunable.py</affectedPath><affectedPath>input/parameter_and_flag_configs/e3sm/configurable_model_flags.in</affectedPath><affectedPath>tuner/pytests/test_adam_baselines.py</affectedPath><affectedPath>.agents/skills/clubb-testing-and-reporting/SKILL.md</affectedPath><affectedPath>input/flag_sets/run_bindiff_w_flags_config_host_flags.json</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/advance_clubb_core_module.py</affectedPath><affectedPath>src/CLUBB_core/parameter_indices.F90</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_init_sequence.py</affectedPath><affectedPath>input/parameter_and_flag_configs/e3sm/tunable_parameters.in</affectedPath><affectedPath>dash_app/pytests/test_run_runtime.py</affectedPath><affectedPath>clubb_jax/pytests/auto_llm_generated_pytests/f2py_unit_tests/test_mixing_length_vs_fortran.py</affectedPath><affectedPath>src/G_unit_test_types/spurious_source_test.F90</affectedPath><affectedPath>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_mixing_length.py</affectedPath><affectedPath>input/parameter_and_flag_configs/default/tunable_parameters.in</affectedPath><affectedPath>src/CLUBB_core/numerical_check.F90</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/config_flags.py</affectedPath><affectedPath>src/CLUBB_core/advance_clubb_core_module.F90</affectedPath><affectedPath>input/parameter_and_flag_configs/coriolis_cases/ekman_parameters.in</affectedPath><affectedPath>tests/pytests/test_run_clubb_conv_test.py</affectedPath><affectedPath>src/clubb_driver.F90</affectedPath><affectedPath>utilities/pytests/test_settings_rules.py</affectedPath><affectedPath>.agents/skills/clubb-finalization/SKILL.md</affectedPath><affectedPath>dash_app/pytests/test_callbacks_runs.py</affectedPath><affectedPath>clubb_jax/src/CLUBB_core/numerical_check.py</affectedPath><affectedPath>input/parameter_and_flag_configs/Lscale/tunable_parameters.in</affectedPath><affectedPath>input/parameter_and_flag_configs/compatible_r8029/tunable_parameters.in</affectedPath><affectedPath>clubb_python_api/f2py_fortran_wrappers/model_flags_wrapper.F90</affectedPath><affectedPath>clubb_python_api/clubb_python/derived_types/config_flags.py</affectedPath><commitId>dfa3b53697658b3f5f24cb5ae83c8e11fe0c0d65</commitId><timestamp>1792614890000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></author><authorEmail>noreply@github.com</authorEmail><comment>Port differentiable legacy mixing length and migrate its selector (#1408)

* Make legacy mixing length differentiable and migrate its selector

The value-dependent JAX parcel loops prevented reverse differentiation and
serialized independent launches. Use fixed scans with masks, batched launch
levels and per-column error state while preserving Fortran stopping rules.
Port the remaining legacy/tau branches and use the configured method in
driver derivative checks.

Replace the logical tau switch with Lscale_method (1=legacy, 2=tau), and
rename mu to Lscale_mu_entrain throughout core, bindings, inputs and validation.
Keep 102 tunable parameters; coherent physics is a separate follow-up.

Local GNU Debug/API build, source checks, 447 unit checks and 240 API checks
pass. Integrated Jenkins validation follows this checkpoint.

* Read renamed entrainment parameters in Dash trajectories

Saved output now names parcel entrainment Lscale_mu_entrain. Prefer that
parameter while retaining support for older files saved with mu. Update
Dash test settings to use the integer mixing-length selector.

The local Dash suite passes 552 checks.

* Require completed tests before branch finalization

Requests to finalize immediately still require applicable Jenkins jobs to
finish and their results to be reviewed. Distinguish validation checkpoints
from a completed handoff, and report relevant stages of baseline-failing jobs.
</comment><date>2026-10-21 15:34:50 -0500</date><id>dfa3b53697658b3f5f24cb5ae83c8e11fe0c0d65</id><msg>Port differentiable legacy mixing length and migrate its selector (#1408)</msg><path><editType>edit</editType><file>src/G_unit_test_types/spurious_source_test.F90</file></path><path><editType>edit</editType><file>tests/run_jax_vs_fortran_cases.py</file></path><path><editType>edit</editType><file>clubb_python_api/f2py_fortran_wrappers/model_flags_wrapper.F90</file></path><path><editType>edit</editType><file>src/clubb_driver.F90</file></path><path><editType>edit</editType><file>tests/run_python_vs_fortran_cases.py</file></path><path><editType>edit</editType><file>clubb_python_driver/advance_clubb_core.py</file></path><path><editType>edit</editType><file>clubb_jax/tests/test_loss_driver.py</file></path><path><editType>edit</editType><file>clubb_python_api/clubb_f2py.pyf</file></path><path><editType>edit</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_init_sequence.py</file></path><path><editType>edit</editType><file>clubb_jax/tests/run_jax_timestep_gradient_test.py</file></path><path><editType>edit</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_advance_xm_wpxp.py</file></path><path><editType>edit</editType><file>src/clubb_tuner.F90</file></path><path><editType>edit</editType><file>dash_app/pytests/test_callbacks_runs.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/advance_clubb_core_module.py</file></path><path><editType>edit</editType><file>input/parameter_and_flag_configs/coriolis_cases/atex_long_parameters.in</file></path><path><editType>edit</editType><file>input/parameter_and_flag_configs/coriolis_cases/coriolis_test_parameters.in</file></path><path><editType>edit</editType><file>dash_app/pytests/test_tune_callbacks_settings.py</file></path><path><editType>edit</editType><file>.agents/skills/clubb-testing-and-reporting/SKILL.md</file></path><path><editType>edit</editType><file>tuner/pytests/test_adam_baselines.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/parameters_tunable.py</file></path><path><editType>edit</editType><file>input/parameter_and_flag_configs/default/tunable_parameters.in</file></path><path><editType>edit</editType><file>input/flag_sets/config_core_flags_wo_never_supported_jax_features.json</file></path><path><editType>edit</editType><file>input/parameter_and_flag_configs/tauMatchLscale/configurable_model_flags.in</file></path><path><editType>edit</editType><file>input/parameter_and_flag_configs/Lscale/tunable_parameters.in</file></path><path><editType>edit</editType><file>input/parameter_and_flag_configs/e3sm/tunable_parameters.in</file></path><path><editType>edit</editType><file>src/CLUBB_core/parameter_indices.F90</file></path><path><editType>edit</editType><file>src/CLUBB_core/numerical_check.F90</file></path><path><editType>edit</editType><file>src/SILHS/silhs_importance_sample_module.F90</file></path><path><editType>edit</editType><file>utilities/clubb_settings_validation.py</file></path><path><editType>edit</editType><file>clubb_jax/README.md</file></path><path><editType>edit</editType><file>input/parameter_and_flag_configs/Lscale/configurable_model_flags.in</file></path><path><editType>edit</editType><file>src/CLUBB_core/model_flags.F90</file></path><path><editType>edit</editType><file>src/CLUBB_core/clubb_api_module.F90</file></path><path><editType>edit</editType><file>src/G_unit_test_types/pdf_parameter_tests.F90</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/mixing_length.py</file></path><path><editType>edit</editType><file>input/parameter_and_flag_configs/default/configurable_model_flags.in</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/parameter_indices.py</file></path><path><editType>add</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_mixing_length.py</file></path><path><editType>edit</editType><file>clubb_python_api/f2py_fortran_wrappers/mixing_length_wrapper.F90</file></path><path><editType>add</editType><file>clubb_jax/tests/benchmark_mixing_length.py</file></path><path><editType>edit</editType><file>tests/pytests/test_run_clubb_conv_test.py</file></path><path><editType>edit</editType><file>input/parameter_and_flag_configs/compatible_r8029/tunable_parameters.in</file></path><path><editType>edit</editType><file>clubb_python_api/clubb_python/derived_types/config_flags_converter.py</file></path><path><editType>edit</editType><file>input/parameter_and_flag_configs/e3sm/configurable_model_flags.in</file></path><path><editType>edit</editType><file>input/parameter_and_flag_configs/e3sm_maint32/maint32_defaults_report.md</file></path><path><editType>edit</editType><file>input/parameter_and_flag_configs/tauMatchLscale/tunable_parameters.in</file></path><path><editType>edit</editType><file>clubb_python_api/clubb_python/CLUBB_core/mixing_length.py</file></path><path><editType>edit</editType><file>src/CLUBB_core/mixing_length.F90</file></path><path><editType>edit</editType><file>utilities/pytests/test_settings_rules.py</file></path><path><editType>edit</editType><file>src/CLUBB_core/advance_clubb_core_module.F90</file></path><path><editType>edit</editType><file>src/CLUBB_core/parameters_tunable.F90</file></path><path><editType>edit</editType><file>input/parameter_and_flag_configs/compatible_r8029/configurable_model_flags.in</file></path><path><editType>edit</editType><file>input/parameter_and_flag_configs/coriolis_cases/ekman_parameters.in</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/config_flags.py</file></path><path><editType>edit</editType><file>input/parameter_and_flag_configs/e3sm_maint32/tunable_parameters.in</file></path><path><editType>edit</editType><file>tuner/pytests/test_parameter_ranges.py</file></path><path><editType>edit</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_call_tree_mixing_length.py</file></path><path><editType>edit</editType><file>input/parameter_and_flag_configs/e3sm_maint32/configurable_model_flags.in</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/test_param_names.py</file></path><path><editType>edit</editType><file>clubb_python_api/clubb_python/derived_types/config_flags.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/numerical_check.py</file></path><path><editType>edit</editType><file>input/flag_sets/run_bindiff_w_flags_config_core_flags.json</file></path><path><editType>edit</editType><file>clubb_jax/pytests/auto_llm_generated_pytests/f2py_unit_tests/test_mixing_length_vs_fortran.py</file></path><path><editType>edit</editType><file>clubb_jax/src/CLUBB_core/model_flags.py</file></path><path><editType>edit</editType><file>input/flag_sets/run_bindiff_w_flags_config_host_flags.json</file></path><path><editType>edit</editType><file>clubb_python_driver/clubb_constants.py</file></path><path><editType>edit</editType><file>dash_app/misc_tab/mixing_length_trajectories/analysis.py</file></path><path><editType>edit</editType><file>.agents/skills/clubb-finalization/SKILL.md</file></path><path><editType>edit</editType><file>clubb_python_api/pytests/auto_llm_generated_pytests/test_python_port_api_coverage.py</file></path><path><editType>edit</editType><file>dash_app/pytests/test_run_runtime.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>README</affectedPath><commitId>b2a6a9ceab12125d4a2542da4e20736039f3a744</commitId><timestamp>1792615282000</timestamp><author><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></author><authorEmail>huebler@uwm.edu</authorEmail><comment>The previous commit changed flags, which will now break the BFB tests even when the bit changing message is included, so now we need to have RESOLVED:dfa3b53697658b3f5f24cb5ae83c8e11fe0c0d65 messsages or enable temporary backwards compatibility.
</comment><date>2026-10-21 15:41:22 -0500</date><id>b2a6a9ceab12125d4a2542da4e20736039f3a744</id><msg>The previous commit changed flags, which will now break the BFB tests even when the bit changing message is included, so now we need to have RESOLVED:dfa3b53697658b3f5f24cb5ae83c8e11fe0c0d65 messsages or enable temporary backwards compatibility.</msg><path><editType>edit</editType><file>README</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/huebler</absoluteUrl><fullName>Gunther Huebler</fullName></culprit><culprit><absoluteUrl>https://carson.math.uwm.edu/jenkins/user/noreply</absoluteUrl><fullName>noreply</fullName></culprit><inProgress>true</inProgress><previousBuild><number>20</number><url>https://carson.math.uwm.edu/jenkins/view/wrf_branch_tests/job/clubb_stats_output_consistency/20/</url></previousBuild></workflowRun>