Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
56007bf
Removing non doalb call of wrap_canopy_radiation for fates
rgknox Apr 3, 2025
4ac4a78
Merge branch 'master' into revert-fates-doalb
rgknox May 6, 2025
3ce34ae
Adding testmods for fates with land tuning mode
rgknox May 6, 2025
9e2a98c
Added lnd tuning mode to two fates tests
rgknox May 6, 2025
823fbcf
Update user_nl_clm
rgknox May 7, 2025
811181a
switched test to full fates
rgknox May 7, 2025
6b41b65
updated testlist for fates land tuning mode
rgknox May 7, 2025
87bb6dc
updated test lists and configurations for fates with land tuning mode
rgknox May 9, 2025
46ec2fa
Updated fates land tuning testlist, and passing column level downwell…
rgknox May 13, 2025
2c5fbed
run radiation on first timestep
mvdebolskiy May 20, 2025
3347df8
remove diagnostic before wrap_sunfrac
mvdebolskiy May 22, 2025
4f3c505
Merge branch 'master' into revert-fates-doalb-merge
rgknox Aug 20, 2025
4a913fd
Merge branch 'master' into revert-fates-doalb-merge
rgknox Aug 20, 2025
a330795
removing use_fates_sp from doalb logic
rgknox Aug 29, 2025
4b9d409
Adding more land tuning mode tests to fates
rgknox Aug 29, 2025
2bdb22d
Merge branch 'master' into revert-fates-doalb-wsp
rgknox Aug 29, 2025
4c429be
Add fortls to the conda environment so it can be used for the FORTRAN…
ekluzek Sep 4, 2025
b0eab5b
Add fortls to the conda environment so it can be used for the FORTRAN…
ekluzek Sep 4, 2025
d8d4598
Add the top level .vscode directory to something not ignored by git
ekluzek Sep 4, 2025
3913944
Change the name of the file to have a _template ending, and some inst…
ekluzek Sep 4, 2025
25f41d6
Add an example of setting the fortls path
ekluzek Sep 4, 2025
1e0decf
Merge pull request #3470 from ekluzek/couplevscodethings
ekluzek Sep 8, 2025
83b3360
Add dask to ctsm_pylib yml file.
samsrabin Sep 8, 2025
99dc8c7
Remove some references to dask in text.
samsrabin Sep 8, 2025
6c09db5
Merge pull request #3473 from samsrabin/add-dask-to-ctsm_pylib
samsrabin Sep 8, 2025
1b214aa
Merge tag 'alpha-ctsm5.4.CMIP7.09.ctsm5.3.071' into make_ctsm54_datasets
slevis-lmwg Sep 9, 2025
e69570a
Update Makefile/_multi.py to accommodate new fsurdat/landuse needs
slevis-lmwg Sep 10, 2025
4faa434
Merge tag 'alpha-ctsm5.4.CMIP7.10.ctsm5.3.071' into make_ctsm54_datasets
slevis-lmwg Sep 10, 2025
0247d55
Update Makefile/_multi.py for fsurdat/landuse updates in ctsm54 (part 2)
slevis-lmwg Sep 12, 2025
007465b
Merge branch 'master' into revert-fates-doalb-wsp
rgknox Sep 15, 2025
5309b0a
added land-tuning SP test to fates suite
rgknox Sep 15, 2025
40c2818
updated fates fleximod pointer to sci1.87.2
rgknox Sep 15, 2025
a2ceea0
fixed test list and removed unnecessary print statement
rgknox Sep 15, 2025
ffede38
Rm unnecessary 400pt_sparse grid from gen_mksurfdata_jobscript_multi.py
slevis-lmwg Sep 15, 2025
7b6a268
Makefile corrections after first test of `make all` (part 1)
slevis-lmwg Sep 15, 2025
98ee059
Makefile / _multi.py updates after first test of 'make all' (part 2)
slevis-lmwg Sep 17, 2025
60e1907
Makefile / _multi.py updates after first test of 'make all' (part 3)
slevis-lmwg Sep 17, 2025
8c7a0de
Add input_pftdata_filename variable to landuse.timeseries files
slevis-lmwg Sep 17, 2025
883012b
Update README.md with how to turn on DEBUG in mksurfdata_esmf
slevis-lmwg Sep 17, 2025
139401d
Add two new large PE layouts for mpasa3p75 fixing #3489
ekluzek Sep 17, 2025
9d5e4e8
Add the two new PE layouts to the uhr_decomp_init test list
ekluzek Sep 17, 2025
889bb38
Merge tag 'alpha-ctsm5.4.CMIP7.11.ctsm5.3.071' into make_ctsm54_datasets
slevis-lmwg Sep 17, 2025
70ff4e5
Fix the task count for the new pe layouts
ekluzek Sep 18, 2025
c886e40
Reverting column downscaling of solar with FATES
rgknox Sep 18, 2025
195c8b4
Add a standard ERP test with threading on to the decomp_init testlist…
ekluzek Aug 25, 2025
56ecc53
modifications to the doalb logic to re-enable b4b on most fates tests
rgknox Sep 19, 2025
70e778b
Merge tag 'alpha-ctsm5.4.CMIP7.11.ctsm5.3.075' into make_ctsm54_datasets
slevis-lmwg Sep 19, 2025
f427877
Enabling b4b results with doalb changes, noting failing base compare …
rgknox Sep 21, 2025
fba3fd8
Merge pull request #3492 from ekluzek/L_pelayout_mpasa3p75
ekluzek Sep 22, 2025
6d80fe9
Added issue number to expected fail
rgknox Sep 22, 2025
63f1811
Merge tag 'ctsm5.3.075' into merge-b4bdev-20250922
ekluzek Sep 22, 2025
83babde
Update change files
ekluzek Sep 24, 2025
66cac5c
Add more details to changelog
ekluzek Sep 24, 2025
09e0a21
Merge pull request #3497 from ekluzek/merge-b4bdev-20250922
ekluzek Sep 24, 2025
9cd4e74
Merge tag 'ctsm5.3.076' into merge-master-20250924
ekluzek Sep 24, 2025
81c6e54
Merge pull request #3503 from ekluzek/merge-master-20250924
ekluzek Sep 24, 2025
fe146ce
Merge branch 'master' into revert-fates-doalb
rgknox Sep 24, 2025
a744af8
Merge tag 'ctsm5.3.076' into b4b-dev
ekluzek Sep 24, 2025
aec43c9
Also bypass the import fields for_testing option, and move the decomp…
ekluzek Aug 27, 2025
1793ae1
Return up the chain in decompInit after endrun, for the testing. Do s…
ekluzek Aug 27, 2025
65ce59c
Merge branch 'b4b-dev' into decompinit_timer_updates
ekluzek Sep 24, 2025
c0be263
Remove stray conflict marker
ekluzek Sep 24, 2025
d9e956c
Remove the bit that has to do with the bypassing code for testing
ekluzek Sep 24, 2025
e479200
Remove the code repetetion from bad conflict resolution
ekluzek Sep 24, 2025
b1408b9
Add more documentation and formatting to the new routines and make su…
ekluzek Sep 24, 2025
89b7422
Start adding timers to lnd_set_decomp_and_domain_from_readmesh
ekluzek Jul 29, 2025
869965a
Add more timers
ekluzek Aug 6, 2025
97aa888
Change timers a bit to make sure there is a timer for each section
ekluzek Sep 24, 2025
84e9b4a
Add timers
ekluzek Aug 6, 2025
09631b0
Remove some of the extra timers
ekluzek Sep 24, 2025
c1d3709
Balance check doesn't take time, so adjust the timers again for part3
ekluzek Jul 31, 2025
f5f9d3c
Add another timer within part3, and also turn off some of the history…
ekluzek Jul 31, 2025
0838f49
Add timers for clm_initialize2 that cover the whole subroutine
ekluzek Jul 31, 2025
a66af70
Remove most of the extra timers in clm_init2 and just divide it up in…
ekluzek Sep 25, 2025
0553c8e
Remove more timers, put timers for clm_init around the initialize1 an…
ekluzek Sep 25, 2025
58734ee
Remove the memcheck call
ekluzek Sep 25, 2025
8eba257
Remove more timers, put timers for clm_init around the initialize1 an…
ekluzek Sep 25, 2025
32a5e43
Added an expected fail to the testlist
rgknox Sep 25, 2025
2787ae7
Put calls in place for the internal subroutines and remove the old co…
ekluzek Sep 26, 2025
29eef59
Make sure the timer is closed in case of an early exit because the po…
ekluzek Sep 26, 2025
614dc14
Spin off a little routine to set important scalars before the check_e…
ekluzek Sep 29, 2025
f7e04ae
Adding the fates submodule
rgknox Sep 29, 2025
37dd600
Merge branch 'revert-fates-doalb' of github.com:rgknox/CTSM into reve…
rgknox Sep 29, 2025
6b43edc
Merge pull request #3511 from ekluzek/decompinit_timer_updates
ekluzek Sep 29, 2025
865dc9e
Added changelogs for ctsm5.3.077
rgknox Oct 2, 2025
81354c8
Add a failing test as a reminder
mvdebolskiy Oct 2, 2025
e6f3780
Switch from intel to gnu
mvdebolskiy Oct 2, 2025
67697fb
Merge pull request #3516 from mvdebolskiy/mosart-eri-bug
samsrabin Oct 2, 2025
5214a63
Update ChangeLog.
samsrabin Oct 2, 2025
dd01257
Merge pull request #3051 from rgknox/revert-fates-doalb
samsrabin Oct 2, 2025
efe185a
Merge tag 'ctsm5.3.077' into merge-b4bdev-20251002
slevis-lmwg Oct 2, 2025
8f1bf84
Update ChangeLog/ChangeSum (I included test results preemptively)
slevis-lmwg Oct 2, 2025
5bd7c88
Update/fix ChangeLog/ChangeSum
slevis-lmwg Oct 3, 2025
28abca8
Merge pull request #3517 from slevis-lmwg/merge-b4bdev-20251002
slevis-lmwg Oct 3, 2025
737b7d9
Update git-fleximod to v1.0.2.
samsrabin Oct 4, 2025
092221e
Update submodules to match versions in cesm3_0_alpha07e.
samsrabin Oct 4, 2025
7b88239
Fix SETUP failures for FSURDATMODIFYCTSM and SUBSETDATA* SystemTests.
samsrabin Oct 6, 2025
484dda8
Update CMEPS to cmeps1.1.20.
samsrabin Oct 6, 2025
a090c7c
Update ChangeLog/ChangeSum.
samsrabin Oct 7, 2025
994e029
Merge pull request #3523 from samsrabin/update-submodules-alpha07e
samsrabin Oct 7, 2025
92dd6d5
Add comment explaining why I split hist-ne3 into three separate jobs
slevis-lmwg Oct 14, 2025
c3e1ca1
Point to corrected raw lai file and correspondng soil color file
slevis-lmwg Oct 14, 2025
5a09596
Added back 1x1_brazil_transient to the mksurfdata_esmf Makefile
slevis-lmwg Oct 14, 2025
2ea100a
Revert c3e1ca1 "Point to corrected raw lai file and corresp. soil color"
slevis-lmwg Oct 14, 2025
11235f4
Merge remote-tracking branch 'escomp/alpha-ctsm5.4.CMIP7' into make_c…
slevis-lmwg Oct 14, 2025
21c9a87
Merge tag 'ctsm5.3.079' into make_ctsm54_datasets
slevis-lmwg Oct 14, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,11 @@
# editor files
*.swp
*~

# MS VS Code
.vscode/
# but don't ignore the main .vscode directory here:
!/.vscode

# vim files (from https://github.com/github/gitignore/blob/master/Global/Vim.gitignore)
# Swap
Expand Down
12 changes: 6 additions & 6 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,15 @@
[submodule "fates"]
path = src/fates
url = https://github.com/NGEET/fates
fxtag = sci.1.87.0_api.41.0.0
fxtag = sci.1.87.2_api.41.0.0
fxrequired = AlwaysRequired
# Standard Fork to compare to with "git fleximod test" to ensure personal forks aren't committed
fxDONOTUSEurl = https://github.com/NGEET/fates

[submodule "cism"]
path = components/cism
url = https://github.com/ESCOMP/CISM-wrapper
fxtag = cismwrap_2_2_006
fxtag = cismwrap_2_2_010
fxrequired = ToplevelRequired
# Standard Fork to compare to with "git fleximod test" to ensure personal forks aren't committed
fxDONOTUSEurl = https://github.com/ESCOMP/CISM-wrapper
Expand Down Expand Up @@ -68,31 +68,31 @@ fxDONOTUSEurl = https://github.com/ESCOMP/mizuRoute
[submodule "ccs_config"]
path = ccs_config
url = https://github.com/ESMCI/ccs_config_cesm.git
fxtag = ccs_config_cesm1.0.56
fxtag = ccs_config_cesm1.0.61
fxrequired = ToplevelRequired
# Standard Fork to compare to with "git fleximod test" to ensure personal forks aren't committed
fxDONOTUSEurl = https://github.com/ESMCI/ccs_config_cesm.git

[submodule "cime"]
path = cime
url = https://github.com/ESMCI/cime
fxtag = cime6.1.113
fxtag = cime6.1.128
fxrequired = ToplevelRequired
# Standard Fork to compare to with "git fleximod test" to ensure personal forks aren't committed
fxDONOTUSEurl = https://github.com/ESMCI/cime

[submodule "cmeps"]
path = components/cmeps
url = https://github.com/ESCOMP/CMEPS.git
fxtag = cmeps1.1.5
fxtag = cmeps1.1.20
fxrequired = ToplevelRequired
# Standard Fork to compare to with "git fleximod test" to ensure personal forks aren't committed
fxDONOTUSEurl = https://github.com/ESCOMP/CMEPS.git

[submodule "cdeps"]
path = components/cdeps
url = https://github.com/ESCOMP/CDEPS.git
fxtag = cdeps1.0.79
fxtag = cdeps1.0.81
fxrequired = ToplevelRequired
# Standard Fork to compare to with "git fleximod test" to ensure personal forks aren't committed
fxDONOTUSEurl = https://github.com/ESCOMP/CDEPS.git
Expand Down
58 changes: 35 additions & 23 deletions .lib/git-fleximod/git_fleximod/cli.py
Original file line number Diff line number Diff line change
@@ -1,38 +1,50 @@
from pathlib import Path
import argparse
import argparse, os, sys
from git_fleximod import utils

__version__ = "0.9.3"
__version__ = "1.0.2"

class CustomArgumentParser(argparse.ArgumentParser):
def print_help(self, file=None):
# First print the default help message
super().print_help(file)

# Then append the contents of README.md
candidate_paths = [
Path(sys.prefix) / "share" / "git_fleximod" / "README.md",
Path(__file__).resolve().parent.parent / "README.md", # fallback for dev
]
for path in candidate_paths:
if os.path.exists(path):
with open(path) as f:
print( f.read(), file=file)
return
print( "README.md not found.", file=file)

def find_root_dir(filename=".gitmodules"):
""" finds the highest directory in tree
which contains a file called filename """
try:
root = utils.execute_subprocess(["git","rev-parse", "--show-toplevel"],
output_to_caller=True ).rstrip()
except:
d = Path.cwd()
root = Path(d.root)
dirlist = []
dl = d
while dl != root:
dirlist.append(dl)
dl = dl.parent
dirlist.append(root)
dirlist.reverse()

for dl in dirlist:
attempt = dl / filename
if attempt.is_file():
return str(dl)
return None
return Path(root)
d = Path.cwd()
root = Path(d.root)
dirlist = []
dl = d
while dl != root:
dirlist.append(dl)
dl = dl.parent
dirlist.append(root)
dirlist.reverse()

for dl in dirlist:
attempt = dl / filename
if attempt.is_file():
return str(dl)
return None

def get_parser():
description = """
%(prog)s manages checking out groups of gitsubmodules with additional support for Earth System Models
"""
parser = argparse.ArgumentParser(
parser = CustomArgumentParser(
description=description, formatter_class=argparse.RawDescriptionHelpFormatter
)

Expand Down
19 changes: 12 additions & 7 deletions .lib/git-fleximod/git_fleximod/git_fleximod.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import shutil
import logging
import textwrap
import asyncio
from git_fleximod import utils
from git_fleximod import cli
from git_fleximod.gitinterface import GitInterface
Expand Down Expand Up @@ -181,6 +182,8 @@ def init_submodule_from_gitmodules(gitmodules, name, root_dir, logger):
url = gitmodules.get(name, "url")
assert path and url, f"Malformed .gitmodules file {path} {url}"
tag = gitmodules.get(name, "fxtag")
if not tag:
tag = gitmodules.get(name, "hash")
fxurl = gitmodules.get(name, "fxDONOTUSEurl")
fxsparse = gitmodules.get(name, "fxsparse")
fxrequired = gitmodules.get(name, "fxrequired")
Expand Down Expand Up @@ -216,10 +219,10 @@ def git_toplevelroot(root_dir, logger):
_, superroot = rgit.git_operation("rev-parse", "--show-superproject-working-tree")
return superroot

def submodules_update(gitmodules, root_dir, requiredlist, force):
for name in gitmodules.sections():
async def submodules_update(gitmodules, root_dir, requiredlist, force):
async def update_submodule(name, requiredlist, force):
submod = init_submodule_from_gitmodules(gitmodules, name, root_dir, logger)

_, needsupdate, localmods, testfails = submod.status()
if not submod.fxrequired:
submod.fxrequired = "AlwaysRequired"
Expand All @@ -237,11 +240,11 @@ def submodules_update(gitmodules, root_dir, requiredlist, force):
if "Optional" in fxrequired and "Optional" not in requiredlist:
if fxrequired.startswith("Always"):
print(f"Skipping optional component {name:>20}")
continue
return # continue to next submodule
optional = "AlwaysOptional" in requiredlist

if fxrequired in requiredlist:
submod.update()
await submod.update()
repodir = os.path.join(root_dir, submod.path)
if os.path.exists(os.path.join(repodir, ".gitmodules")):
# recursively handle this checkout
Expand All @@ -250,8 +253,10 @@ def submodules_update(gitmodules, root_dir, requiredlist, force):
newrequiredlist = ["AlwaysRequired"]
if optional:
newrequiredlist.append("AlwaysOptional")
await submodules_update(gitsubmodules, repodir, newrequiredlist, force=force)

submodules_update(gitsubmodules, repodir, newrequiredlist, force=force)
tasks = [update_submodule(name, requiredlist, force) for name in gitmodules.sections()]
await asyncio.gather(*tasks)

def local_mods_output():
text = """\
Expand Down Expand Up @@ -345,7 +350,7 @@ def main():
sys.exit(f"No submodule components found, root_dir={root_dir}")
retval = 0
if action == "update":
submodules_update(gitmodules, root_dir, fxrequired, force)
asyncio.run(submodules_update(gitmodules, root_dir, fxrequired, force))
elif action == "status":
tfails, lmods, updates = submodules_status(gitmodules, root_dir, toplevel=True)
if tfails + lmods + updates > 0:
Expand Down
30 changes: 30 additions & 0 deletions .lib/git-fleximod/git_fleximod/gitinterface.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import sys
from . import utils
from pathlib import Path
import asyncio

class GitInterface:
def __init__(self, repo_path, logger):
Expand Down Expand Up @@ -47,6 +48,16 @@ def _init_git_repo(self):
command = ("git", "-C", str(self.repo_path), "init")
utils.execute_subprocess(command)

def _git_operation_command(self, operation, args):
newargs = []
for a in args:
# Do not use ssh interface
if isinstance(a, str):
a = a.replace("[email protected]:", "https://github.com/")
newargs.append(a)

return self._git_command(operation, *newargs)

# pylint: disable=unused-argument
def git_operation(self, operation, *args, **kwargs):
newargs = []
Expand All @@ -66,6 +77,25 @@ def git_operation(self, operation, *args, **kwargs):
else:
return 0, command

# pylint: disable=unused-argument
async def git_operation_async(self, operation, *args, **kwargs):
command = self._git_operation_command(operation, args)
if isinstance(command, list):
try:
process = await asyncio.create_subprocess_exec(
*command,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE
)
stdout, stderr = await process.communicate()
status = process.returncode
output = stdout.decode().strip() if stdout else stderr.decode().strip()
return status, output
except Exception as e:
sys.exit(e)
else:
return 0, command

def config_get_value(self, section, name):
if self._use_module:
config = self.repo.config_reader()
Expand Down
Loading
Loading