Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
715e9d6
updates for integrated ladas setup procedure
saraqzhang Jan 21, 2025
ce60a99
add GID and atmens-replay-check to ldas_setup options
saraqzhang Jan 27, 2025
49961b2
removed Haswell & Skylake choices, fixed typo (x3dvar_ladas.input)
gmao-rreichle Feb 7, 2025
351efd5
Merge branch 'develop' into feature/saraqzhang/updatesetup4ladas
saraqzhang Feb 27, 2025
342e758
add bkglforst tar file to gen_silo_arc.pl
saraqzhang Feb 27, 2025
4073dfa
update for LADAS in GEOSdas_App/
saraqzhang Feb 27, 2025
05966b2
update for LADAS in NCEP_enkf/scripts/gmao/
saraqzhang Feb 27, 2025
e60e4df
update for LADAS in NCEP_enkf/scripts/gmao/etc
saraqzhang Feb 27, 2025
51f20e9
Merge branch 'develop' into feature/saraqzhang/updatesetup4ladas
gmao-rreichle Mar 11, 2025
481e86b
minor edits in fvsetup and get_atmens_rst.pl
saraqzhang Mar 26, 2025
c1f5ae2
Merge branch 'develop' into feature/saraqzhang/updatesetup4ladas
gmao-rreichle Mar 27, 2025
f1df78d
clarified comment re. LDAS setup (fvsetup)
gmao-rreichle Mar 27, 2025
6956f6b
fixed typo in error message (fvsetup)
gmao-rreichle Mar 27, 2025
7d683c2
remove SWLAND from lfo collection in HISTAENS.rc.tmpl
saraqzhang Mar 27, 2025
a3fd8ff
minor edit to bkg.lfo file name
saraqzhang Apr 15, 2025
05a7630
minor edits for bkg.lfo name
saraqzhang Apr 15, 2025
f33e3b5
reinstate updates for ldas flag
saraqzhang Apr 16, 2025
a466a36
edits on bkg lfo query and tar
saraqzhang Apr 17, 2025
1780bed
reinstate member tag to bkg.lfo filename in HISTAENS.rc.tmpl
saraqzhang Apr 23, 2025
ffca2c5
Merge branch 'develop' into feature/saraqzhang/updatesetup4ladas
gmao-rreichle Apr 29, 2025
a4e6c0c
update tags of ldasGC and gcm_App
saraqzhang Apr 29, 2025
61f64c1
Merge branch 'develop' into feature/saraqzhang/updatesetup4ladas
gmao-rreichle May 2, 2025
45f9773
Merge branch 'develop' into feature/saraqzhang/updatesetup4ladas
rtodling May 5, 2025
db9ec8a
back to the old; zero diff
rtodling May 5, 2025
fdd92ce
identation
rtodling May 5, 2025
e1e36c4
adjust gcmapp tag
rtodling May 5, 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: 2 additions & 2 deletions components.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ MAPL:
GEOSldas_GridComp:
local: ./src/Components/@GEOSldas_GridComp
remote: ../GEOSldas_GridComp.git
tag: v1.0.2
tag: v2.0.0

FMS:
local: ./src/Shared/@FMS
Expand Down Expand Up @@ -251,7 +251,7 @@ umwm:
GEOSgcm_App:
local: ./src/Applications/@GEOSgcm_App
remote: ../GEOSgcm_App.git
tag: g2.3.8.1
tag: g2.3.8.2
develop: develop

Ocean-LETKF:
Expand Down
21 changes: 15 additions & 6 deletions src/Applications/GEOSdas_App/AGCMrc.pm
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ package AGCMrc;
# 03May2010 Todling Add reference to CARMA rst
# 19Aug2010 Todling turb_internal_rst is needed for reproduc/ble fcst
# 09Oct2013 Todling Add logics to handle precip-forcing option
# 07Jan2024 Stassi No longer need '#' in front of key in %uncomment hash
#
#########################################################################
use strict;
Expand All @@ -35,6 +36,7 @@ my ($gocart_tracers, $carma_tracers, $iau, $pcp_forced, $lsmodel_flag);
my ($fvhome, $fvroot);
my ($coupled);
my ($envvars_set, $flags_set, %subst);
my ($ldas_flag);

#----------------------------------
# GCM Restart files
Expand Down Expand Up @@ -123,7 +125,6 @@ my %list = (rs5_core => \@rs5_core,
stratchem_internal_rst
stratchem_import_rst );


#=======================================================================
# name - set_AGCM_envvars
# purpose - set global variables: $fvhome and $fvroot
Expand All @@ -144,7 +145,6 @@ sub set_AGCM_envvars {
@rs5_notused = (@rs5_notused, @rs5_coupled);
@rs5_files = (@rs5_core, @rs5_boot, @rs5_others);
}

}

#=======================================================================
Expand All @@ -160,6 +160,7 @@ sub set_AGCM_flags {
$lsmodel_flag = hashextract("lsmodel_flag", %flags);
$iau = hashextract("iau", %flags);
$pcp_forced = hashextract("pcp_forced", %flags);
$ldas_flag = hashextract("ldas_flag", %flags);
$flags_set = 1;
}

Expand Down Expand Up @@ -290,6 +291,10 @@ sub ed_g5agcm_rc {
if ( $gocart_tracers ) { $comment{"GOCART.data_INTERNAL"} = 1 }
else { $comment{"GOCART_INTERNAL"} = 1 }

# uncomment ldas increment flag
#------------------------------
if ($ldas_flag == 1) { $uncomment{"LDAS_INCR"} = 1 }

# comment unused catch or catchCN restart
#----------------------------------------
if ($lsmodel_flag == 1) {
Expand All @@ -310,8 +315,8 @@ sub ed_g5agcm_rc {
# uncomment precipation force except when specified
# -------------------------------------------------
if ( $pcp_forced ) {
$uncomment{"#PRECIP_FILE"} = 1;
$uncomment{"#USE_PP_TAPER"} = 1;
$uncomment{"PRECIP_FILE"} = 1;
$uncomment{"USE_PP_TAPER"} = 1;
}

# edit and output AGCM.rc.tmpl
Expand Down Expand Up @@ -350,6 +355,7 @@ sub outputAGCM {
my ($outfile, $ox_friendlies);
my ($rcd, $label, $key, $rst);
my (@DEFAULT_TYPE_FOUND);
my ($space, $pound);

$tmpl = shift @_;
$outfl = shift @_;
Expand Down Expand Up @@ -409,8 +415,11 @@ sub outputAGCM {
# uncomment specified lines if key is in first non-blank position
#----------------------------------------------------------------
foreach $key ( keys %uncomment ) {
if ($rcd =~ /^(\s*)$key/) {
if ( $uncomment{"$key"} ) {$rcd = substr $rcd, 1;};
$key =~ s/^\#//; # no longer need '#' in front of key
if ($rcd =~ /^(\s*)(\#*)\s*$key/) {
$space = $1;
$pound = $2;
$rcd =~ s/^$space$pound/$space/;
}
}
print(LUN2 "$rcd\n");
Expand Down
9 changes: 6 additions & 3 deletions src/Applications/GEOSdas_App/GEOSdas.csm
Original file line number Diff line number Diff line change
Expand Up @@ -6089,6 +6089,10 @@ endif
/bin/mv $momoutdir/MOM.res_${fn}.nc $FVHOME/recycle/hold/$EXPID.mom${fn}_rst.${momtag}.nc4
end
endif
set lstbkglfo = `ls $FVWORK/$EXPID.bkg.lfo*.$NCSUFFIX`
if ( ${%lstbkglfo} ) then
tar cvf $FVWORK/$EXPID.bkglforst.${rtag}.tar $EXPID.bkg.lfo*.$NCSUFFIX
endif
cd $FVHOME/recycle/hold
tar cvf $FVWORK/$EXPID.rst.${rtag}.tar $EXPID.*
/bin/mv $FVWORK/$EXPID.xinc*$NCSUFFIX .
Expand Down Expand Up @@ -6124,9 +6128,8 @@ endif
#------------------------------------

if ( $LDAS_ANA ) then
mkdir -p $FVHOME/recycle/holdpredout
/bin/mv -f $FVWORK/*lfo_Nx+-* $FVHOME/recycle/holdpredout/.
/bin/cp $FVHOME/recycle/holdpredout/*lfo_Nx+-* $LDHOME/input/met_forcing/.
/bin/rm -f $FVHOME/recycle/holdpredout/*lfo*
/bin/cp $FVWORK/*bkg.lfo*.nc4 $FVHOME/recycle/holdpredout/.
endif

exit 0
Expand Down
164 changes: 129 additions & 35 deletions src/Applications/GEOSdas_App/fvsetup
Original file line number Diff line number Diff line change
Expand Up @@ -589,22 +589,22 @@ $ENV{"PATH"} = $FindBin::Bin .":$ENV{PATH}";
$rc = system("$fvbin/fix_gocart_rc.csh $vres $fvhome/run/gocart");
die "Failed to fix GOCART levels-referencing $!" if ( $rc );

# LDAS Setup is done separately, follow instructions in GEOSldas/README.md
# Provide ldas config input files: YOUR_det_exeinp.txt, YOUR_det_batinp.txt
# ln -s YOUR_det_exeinp.txt $fvbin/det_exeinp.txt
# ln -s YOUR_det_batinp.txt $fvbin/det_batinp.txt
# For Hyb-4dEnVar, do same for ens_exeinp.txt and ens_batinp.txt
# Call LDAS setup script.
# Provide LDAS config input files in $ldassetup/: det_exeinp.txt, det_batinp.txt.
# For Hyb-4dEnVar, do same for ens_exeinp.txt, ens_batinp.txt.
# See GEOSldas/README.md for generating sample config input files.
# ------------------------------------------------------------------------
print "\n checkprintout ldas_ana == 1 ($ldas_ana)\n";
if ($ldas_ana == 1 ) {
$rc = system("$fvbin/ldas_setup setup $fvhome/lana $fvbin/det_exeinp.txt $fvbin/det_batinp.txt");
die "Failed to setup ldas for det, check ldas config input files $!" if ( $rc );

if ($hyb_ens == 4 ) {
$rc = system("$fvbin/ldas_setup setup $fvhome/lana $fvbin/ens_exeinp.txt $fvbin/ens_batinp.txt");
die "Failed to setup ldas for ens, check ldas config input files $!" if ( $rc );
$cmd = "$fvbin/ldas_setup setup $fvhome/lana --account $gid --nymdb $nymdb --nhmsb $nhmsb $ldassetup/det_exeinp.txt $ldassetup/det_batinp.txt";
print "$cmd\n";
$rc = system $cmd;
die "Failed to setup LDAS for det, check LDAS config input files $!" if ( $rc );
chomp($aens_replay);
if (($hyb_ens == 4) && ($aens_replay eq "no")) {
$rc = system("$fvbin/ldas_setup setup $fvhome/lana --account $gid --nymdb $nymdb --nhmsb $nhmsb $ldassetup/ens_exeinp.txt $ldassetup/ens_batinp.txt");
die "Failed to setup LDAS for ens, check LDAS config input files $!" if ( $rc );
}

}

# Monthly Setup
Expand Down Expand Up @@ -3177,7 +3177,7 @@ sub get_nodeflg {
$proc = "";
# reset default if applicable

$ans = query(" Processing nodes (1:Haswell, 2:Skylake, 3:Cascase, 4:Milan)?", "2");
$ans = query(" Processing nodes (1:Haswell, 2:Skylake, 3:Cascade, 4:Milan)?", "4");

if ($ans == 1) { $nodeflg = "hasw"; $ncpus_per_node = 24 }
elsif ($ans == 2) { $nodeflg = "sky"; $ncpus_per_node = 36 }
Expand Down Expand Up @@ -3518,42 +3518,54 @@ sub set_newradbc {
}
#=======================================================================
sub set_ldasANA {
my ($dflt, $ans1, $ans2);
my (@bkglfo_files);

# initialize Land DAS processing flag
#------------------------------------
my($dflt, $ans1, $ans2, $ans3, $ans4);
$ldas_ana = 0;
$ldasfdbk = 0;
$ldas_flag = 0;
$dflt = "n";
$ldashome = "${fvhome}/lana/${expid}_LDAS" ;
$ldashome4ens = "${fvhome}/lana/${expid}_LDAS4ens" ;
$ldasfdbk = 0;

$ldashome = "${fvhome}/lana/${expid}_LDAS";
$ldashome4ens = dirname($ldashome) ."/${expid}_LDAS4ens";

print "\n-------------\n";
print "LDAS Analysis\n";
print "-------------\n\n";

$dflt = "n";
$ans1 = query(" Land DAS Analysis (y/n)?", $dflt) ;
$ldas_ana = 1 if yes($ans1);
if (yes($ans1)) {
$ldas_ana = 1;
$ldas_flag = 1;

if ($ldas_ana == 1) {
$ans2 = query(" Enable LDAS feedback to model y/n ? ", $dflt);
$ldasfdbk = 1 if yes($ans2);
$prompt = " Location of LDAS initial forcing ";
$dflt = $fvics;
$dflt = dirname($fvics) unless -d $fvics;

if ($ldasfdbk == 1 ) {
$ldas_flag = 1;
}
$ldashold = query($prompt, $dflt);
die ">>> Error <<< Cannot find directory, $ldashold;"
unless -d $ldashold;

$ans3 = query(" LDAS HOME? [DEFAULT: $ldashome]");
$ldashome = $ans3 unless blank($ans3);
@bkglfo_files = (<$ldashold/*bkg*lfo*${nymdb}_${hhb}*>);
die ">>> Error <<< Cannot find bkglfo files in $ldashold;"
unless scalar(@bkglfo_files);

$dflt = "n";
$ans2 = query(" Enable LDAS feedback to model y/n?", $dflt);
if (yes($ans2)) {
$ldasfdbk = 1;
}
$dflt = "/discover/nobackup/$user/ldasSaveInput";
$ldassetup = query(" LDAS setup input path?", $dflt);

if ($hyb_ens == 4 ) {
$ans4 = query(" LDAS HOME for atmens? [DEFAULT: $ldashome4ens]");
$ldashome4ens = $ans4 unless blank($ans4);
}

}
return 0;
if ($hyb_ens == 4 ) {
$dflt = "/discover/nobackup/$user/ldasSaveInput";
$ldassetup4ens = query(" LDAS setup input path for ens?", $dflt);
}
}
return 0;
}

#=======================================================================
Expand Down Expand Up @@ -3794,6 +3806,7 @@ EOF
}
$flags = "-nlevs $aens_lev $setacftbc $rcorrarg $setradbc $aens_lsmodel -expdir $fvhome/.. $sppt_flag $bcopt";
$flags .= " -fvhome $fvhome" if $checkFLG;
$flags .= " -ldasflg $ldas_flag";
$params = " $aens_ana $expid $aens_im $aens_jm $aens_ocn $landbcs";

$cmd = "$fvbin/setup_atmens.pl -nodename $nodeflg $flags $params";
Expand Down Expand Up @@ -5473,6 +5486,10 @@ sub mkdir_fvhome { # create directories on FVHOME
mkpath("$fvhome/run/$subdir")
or die ">> Error << creating subdir, $fvhome/run/$subdir;";
}
if ($ldas_flag) {
mkpath("$fvhome/recycle/holdpredout")
or die ">> Error << creating subdir, $fvhome/recycle/holdpredout;";
}
unlink("$fvhome/fvInput") if ( -e "$fvhome/fvInput" ) ;
symlink("$fvbcs","$fvhome/fvInput");

Expand Down Expand Up @@ -10275,6 +10292,8 @@ sub init_agcm_pert_rc {
sub copy_resources {
my ($chemrc, $ensFLG);
my ($flags, $label, $string, $vars, $cmd);
my ($fname, $fname_old, $expid_old, $target);
my ($bkglfo_tarfile, @bkglfo_files, $target, $expid_old, $fname, $fname_old);

cp("$fvroot/etc/VERSION","$fvhome/run/VERSION")
|| die "Cannot write file $fvhome/run/VERSION: $!";
Expand Down Expand Up @@ -10331,6 +10350,40 @@ sub copy_resources {
system("$fvbin/vED -vv SHARE=$SHARE $ensFLG $source -o $target");
}
system("touch $fvhome/run/gaas/GAAS.BOOTSTRAP_");

if ($ldas_flag) {
die ">>> Error <<< Cannot find directory, $ldashold;"
unless -d $ldashold;

$target = "$fvhome/recycle/holdpredout";
die ">>> Error <<< Cannot find directory, $target;"
unless -d $target;

# extract lfo files from tarfile
#-------------------------------
$bkglfo_tarfile = (<$ldashold/*.bkglforst.${nymdb}_${hhb}z.tar>)[0];
if ($bkglfo_tarfile) {
$expid_old = find_expid($bkglfo_tarfile, 1);
chdir($target);
system("tar xf $bkglfo_tarfile");
system("rename $expid_old $expid *");
}

# or copy them from directory
#----------------------------
else {
$expid_old = find_expid($ldashold);
@bkglfo_files = (<$ldashold/$expid_old.bkg.lfo*.nc4>);
die ">>> Error <<< No $expid_old lfo files found in $ldashold;"
unless scalar(@bkglfo_files);

foreach $fname_old ( @bkglfo_files ) {
($fname = basename($fname_old)) =~ s/$expid_old/$expid/;
cp($fname_old, "$target/$fname");
print "cp $fname_old $target/$fname\n";
}
}
}
}

# Model perturbation-related settings
Expand Down Expand Up @@ -10756,7 +10809,48 @@ sub copy_resources {
}
}
}


#=======================================================================
# name - find_expid
# purpose - find expid from single filename or from multiple files in a
# directory.
#
# input parameters
# - $name: name of file or directory
# - $flag: (optional) 1=filename, 2=directory [default = 2]
#
# notes -
# 1. If $name is a file, then this routine extracts expid from front
# portion of the filename.
# 2. If $name is a directory, then this routine extracts expid from
# each file in the directory and returns the most prevalent value
# as the expid.
#=======================================================================
sub find_expid {
my ($name, $expid_found, $flag, $fname, $most, $front, %count);
$name = shift @_;
$flag = shift @_;

if ($flag == 1) {
die ">>> ERROR <<< $name is not a file;" unless -f $name;
$expid_found = (split(/\./, basename($name)))[0];
} else {
die ">>> ERROR <<< $name is not a directory;" unless -d $name;
for $fname ( <$name/*> ) {
$front = (split(/\./, basename($fname)))[0];
$count{$front}++;
}
$most = -1;
foreach $front (keys(%count)) {
if ($count{$front} > $most) {
$expid_found = $front;
$most = $count{$front};
}
}
}
return $expid_found;
}

#=======================================================================
sub edit_collections {

Expand Down
2 changes: 2 additions & 0 deletions src/Applications/GEOSdas_App/gen_silo_arc.pl
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,8 @@ sub restart_info {
printarc("$lineTAR\n");
$lineTAR = '${PESTOROOT}%s/rs/Y%y4/M%m2/%s.bkgcrst.%y4%m2%d2_%h2z.tar';
printarc("$lineTAR\n");
$lineTAR = '${PESTOROOT}%s/rs/Y%y4/M%m2/%s.bkglforst.%y4%m2%d2_%h2z.tar';
printarc("$lineTAR\n");
$lineTAR = '${PESTOROOT}%s/jedi/rs/Y%y4/M%m2/%s.jedi_agcmrst.%y4%m2%d2_%h2z.tar';
printarc("$lineTAR\n");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ FVHOME? [/discover/nobackup/qzhang/x3dvar_ladas]
The directory /discover/nobackup/qzhang/x3dvar does not exist. Create it now? [y]
>

Processing nodes (1:Haswell, 2:Skylake, 3:Cascade, 4:Milan)? [2]
Processing nodes (3:Cascade, 4:Milan)? [3]
> 4

Which case of variational analysis? [1]
Expand Down
Loading