Report an error if a user uses --model_top with anything other than cam7
What is the feature/what would you like to discuss?
If a user attempts to set --model_top MT with --phys cam5, they get an undecipherable error. configure should have a check to prevent the user from specifying this combo.
The error:
Traceback (most recent call last):
File "/glade/work/juliob/cam6_4_005_jtb/cases/c64_005_ne30pg3_FMTHIST_C5phys_x02/./case.build", line 267, in <module>
_main_func(__doc__)
File "/glade/work/juliob/cam6_4_005_jtb/cases/c64_005_ne30pg3_FMTHIST_C5phys_x02/./case.build", line 251, in _main_func
success = build.case_build(
^^^^^^^^^^^^^^^^^
File "/glade/work/juliob/cam6_4_005_jtb/cime/CIME/build.py", line 1327, in case_build
return run_and_log_case_status(functor, cb, caseroot=caseroot)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/glade/work/juliob/cam6_4_005_jtb/cime/CIME/utils.py", line 2482, in run_and_log_case_status
rv = func()
^^^^^^
File "/glade/work/juliob/cam6_4_005_jtb/cime/CIME/build.py", line 1311, in <lambda>
functor = lambda: _case_build_impl(
^^^^^^^^^^^^^^^^^
File "/glade/work/juliob/cam6_4_005_jtb/cime/CIME/build.py", line 1184, in _case_build_impl
sharedpath = _build_checks(
^^^^^^^^^^^^^^
File "/glade/work/juliob/cam6_4_005_jtb/cime/CIME/build.py", line 721, in _build_checks
case.create_namelists()
File "/glade/work/juliob/cam6_4_005_jtb/cime/CIME/case/preview_namelists.py", line 90, in create_namelists
import_and_run_sub_or_cmd(
File "/glade/work/juliob/cam6_4_005_jtb/cime/CIME/utils.py", line 668, in import_and_run_sub_or_cmd
raise e1 from None
File "/glade/work/juliob/cam6_4_005_jtb/cime/CIME/utils.py", line 664, in import_and_run_sub_or_cmd
run_sub_or_cmd(
File "/glade/work/juliob/cam6_4_005_jtb/cime/CIME/utils.py", line 709, in run_sub_or_cmd
getattr(mod, subname)(*subargs)
File "/glade/work/juliob/cam6_4_005_jtb/cime_config/buildnml", line 81, in buildnml
raise RuntimeError("CAM's 'buildcpp' script failed to run properly.")
RuntimeError: CAM's 'buildcpp' script failed to run properly.
Is there anyone in particular you want to be part of this conversation?
No response
Will this change (regression test) answers?
No
Will you be implementing this enhancement yourself?
Any CAM SE can do this
configure already has this check. The problem is that buildcpp was not reporting the error message from configure. A fix for this in buildcpp was committed with the cam6_4_015 tag. Here is what you get now from a QPC5 test with an xmlchange --append CAM_CONFIG_OPTS="-model_top mt":
Create namelist for component cam
Calling /work/test-src/cam6_4_016/cime_config/buildnml
...calling cam buildcpp to set build time options
configure ERROR: model_top=mt is only implemented for cam7 physics at /work/test-src/cam6_4_016/bld/configure line 1318.
Traceback (most recent call last):
File "/work/cesm-tests/c64016_qpc5-mt-ne3.3-setup_8x1/./preview_namelists", line 67, in <module>
_main_func(__doc__)
File "/work/cesm-tests/c64016_qpc5-mt-ne3.3-setup_8x1/./preview_namelists", line 63, in _main_func
case.create_namelists(component=args.component)
File "/work/test-src/cam6_4_016/cime/CIME/case/preview_namelists.py", line 90, in create_namelists
import_and_run_sub_or_cmd(
File "/work/test-src/cam6_4_016/cime/CIME/utils.py", line 668, in import_and_run_sub_or_cmd
raise e1 from None
File "/work/test-src/cam6_4_016/cime/CIME/utils.py", line 664, in import_and_run_sub_or_cmd
run_sub_or_cmd(
File "/work/test-src/cam6_4_016/cime/CIME/utils.py", line 709, in run_sub_or_cmd
getattr(mod, subname)(*subargs)
File "/work/test-src/cam6_4_016/cime_config/buildnml", line 81, in buildnml
raise RuntimeError("CAM's 'buildcpp' script failed to run properly.")
RuntimeError: CAM's 'buildcpp' script failed to run properly.
FAILURE: in preview_namelists
The error message from configure is printed above. Unfortunately buildcpp is still triggering a traceback which makes the error from configure hard to see. I think the buildcpp script could be improved to not invoke this traceback when the error is coming from configure. That behavior would be like what we get from buildnml when build-namelist returns an error.