Skip to content

Commit c94b3d8

Browse files
committed
Merge branch 'develop' into feature/mathomp4/mapldevelop
2 parents 33259c3 + 8e56741 commit c94b3d8

File tree

14 files changed

+251
-56
lines changed

14 files changed

+251
-56
lines changed

components.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ MAPL:
7575
GEOSldas_GridComp:
7676
local: ./src/Components/@GEOSldas_GridComp
7777
remote: ../GEOSldas_GridComp.git
78-
tag: v1.0.2
78+
tag: v2.0.0
7979

8080
FMS:
8181
local: ./src/Shared/@FMS
@@ -251,7 +251,7 @@ umwm:
251251
GEOSgcm_App:
252252
local: ./src/Applications/@GEOSgcm_App
253253
remote: ../GEOSgcm_App.git
254-
tag: g2.3.8.1
254+
tag: g2.3.8.2
255255
develop: develop
256256

257257
Ocean-LETKF:

src/Applications/GEOSdas_App/AGCMrc.pm

100644100755
Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package AGCMrc;
1717
# 03May2010 Todling Add reference to CARMA rst
1818
# 19Aug2010 Todling turb_internal_rst is needed for reproduc/ble fcst
1919
# 09Oct2013 Todling Add logics to handle precip-forcing option
20+
# 07Jan2024 Stassi No longer need '#' in front of key in %uncomment hash
2021
#
2122
#########################################################################
2223
use strict;
@@ -35,6 +36,7 @@ my ($gocart_tracers, $carma_tracers, $iau, $pcp_forced, $lsmodel_flag);
3536
my ($fvhome, $fvroot);
3637
my ($coupled);
3738
my ($envvars_set, $flags_set, %subst);
39+
my ($ldas_flag);
3840

3941
#----------------------------------
4042
# GCM Restart files
@@ -123,7 +125,6 @@ my %list = (rs5_core => \@rs5_core,
123125
stratchem_internal_rst
124126
stratchem_import_rst );
125127

126-
127128
#=======================================================================
128129
# name - set_AGCM_envvars
129130
# purpose - set global variables: $fvhome and $fvroot
@@ -144,7 +145,6 @@ sub set_AGCM_envvars {
144145
@rs5_notused = (@rs5_notused, @rs5_coupled);
145146
@rs5_files = (@rs5_core, @rs5_boot, @rs5_others);
146147
}
147-
148148
}
149149

150150
#=======================================================================
@@ -160,6 +160,7 @@ sub set_AGCM_flags {
160160
$lsmodel_flag = hashextract("lsmodel_flag", %flags);
161161
$iau = hashextract("iau", %flags);
162162
$pcp_forced = hashextract("pcp_forced", %flags);
163+
$ldas_flag = hashextract("ldas_flag", %flags);
163164
$flags_set = 1;
164165
}
165166

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

294+
# uncomment ldas increment flag
295+
#------------------------------
296+
if ($ldas_flag == 1) { $uncomment{"LDAS_INCR"} = 1 }
297+
293298
# comment unused catch or catchCN restart
294299
#----------------------------------------
295300
if ($lsmodel_flag == 1) {
@@ -310,8 +315,8 @@ sub ed_g5agcm_rc {
310315
# uncomment precipation force except when specified
311316
# -------------------------------------------------
312317
if ( $pcp_forced ) {
313-
$uncomment{"#PRECIP_FILE"} = 1;
314-
$uncomment{"#USE_PP_TAPER"} = 1;
318+
$uncomment{"PRECIP_FILE"} = 1;
319+
$uncomment{"USE_PP_TAPER"} = 1;
315320
}
316321

317322
# edit and output AGCM.rc.tmpl
@@ -350,6 +355,7 @@ sub outputAGCM {
350355
my ($outfile, $ox_friendlies);
351356
my ($rcd, $label, $key, $rst);
352357
my (@DEFAULT_TYPE_FOUND);
358+
my ($space, $pound);
353359

354360
$tmpl = shift @_;
355361
$outfl = shift @_;
@@ -409,8 +415,11 @@ sub outputAGCM {
409415
# uncomment specified lines if key is in first non-blank position
410416
#----------------------------------------------------------------
411417
foreach $key ( keys %uncomment ) {
412-
if ($rcd =~ /^(\s*)$key/) {
413-
if ( $uncomment{"$key"} ) {$rcd = substr $rcd, 1;};
418+
$key =~ s/^\#//; # no longer need '#' in front of key
419+
if ($rcd =~ /^(\s*)(\#*)\s*$key/) {
420+
$space = $1;
421+
$pound = $2;
422+
$rcd =~ s/^$space$pound/$space/;
414423
}
415424
}
416425
print(LUN2 "$rcd\n");

src/Applications/GEOSdas_App/GEOSdas.csm

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6089,6 +6089,10 @@ endif
60896089
/bin/mv $momoutdir/MOM.res_${fn}.nc $FVHOME/recycle/hold/$EXPID.mom${fn}_rst.${momtag}.nc4
60906090
end
60916091
endif
6092+
set lstbkglfo = `ls $FVWORK/$EXPID.bkg.lfo*.$NCSUFFIX`
6093+
if ( ${%lstbkglfo} ) then
6094+
tar cvf $FVWORK/$EXPID.bkglforst.${rtag}.tar $EXPID.bkg.lfo*.$NCSUFFIX
6095+
endif
60926096
cd $FVHOME/recycle/hold
60936097
tar cvf $FVWORK/$EXPID.rst.${rtag}.tar $EXPID.*
60946098
/bin/mv $FVWORK/$EXPID.xinc*$NCSUFFIX .
@@ -6124,9 +6128,8 @@ endif
61246128
#------------------------------------
61256129

61266130
if ( $LDAS_ANA ) then
6127-
mkdir -p $FVHOME/recycle/holdpredout
6128-
/bin/mv -f $FVWORK/*lfo_Nx+-* $FVHOME/recycle/holdpredout/.
6129-
/bin/cp $FVHOME/recycle/holdpredout/*lfo_Nx+-* $LDHOME/input/met_forcing/.
6131+
/bin/rm -f $FVHOME/recycle/holdpredout/*lfo*
6132+
/bin/cp $FVWORK/*bkg.lfo*.nc4 $FVHOME/recycle/holdpredout/.
61306133
endif
61316134

61326135
exit 0

src/Applications/GEOSdas_App/fvsetup

Lines changed: 129 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -589,22 +589,22 @@ $ENV{"PATH"} = $FindBin::Bin .":$ENV{PATH}";
589589
$rc = system("$fvbin/fix_gocart_rc.csh $vres $fvhome/run/gocart");
590590
die "Failed to fix GOCART levels-referencing $!" if ( $rc );
591591

592-
# LDAS Setup is done separately, follow instructions in GEOSldas/README.md
593-
# Provide ldas config input files: YOUR_det_exeinp.txt, YOUR_det_batinp.txt
594-
# ln -s YOUR_det_exeinp.txt $fvbin/det_exeinp.txt
595-
# ln -s YOUR_det_batinp.txt $fvbin/det_batinp.txt
596-
# For Hyb-4dEnVar, do same for ens_exeinp.txt and ens_batinp.txt
592+
# Call LDAS setup script.
593+
# Provide LDAS config input files in $ldassetup/: det_exeinp.txt, det_batinp.txt.
594+
# For Hyb-4dEnVar, do same for ens_exeinp.txt, ens_batinp.txt.
595+
# See GEOSldas/README.md for generating sample config input files.
597596
# ------------------------------------------------------------------------
598597
print "\n checkprintout ldas_ana == 1 ($ldas_ana)\n";
599598
if ($ldas_ana == 1 ) {
600-
$rc = system("$fvbin/ldas_setup setup $fvhome/lana $fvbin/det_exeinp.txt $fvbin/det_batinp.txt");
601-
die "Failed to setup ldas for det, check ldas config input files $!" if ( $rc );
602-
603-
if ($hyb_ens == 4 ) {
604-
$rc = system("$fvbin/ldas_setup setup $fvhome/lana $fvbin/ens_exeinp.txt $fvbin/ens_batinp.txt");
605-
die "Failed to setup ldas for ens, check ldas config input files $!" if ( $rc );
599+
$cmd = "$fvbin/ldas_setup setup $fvhome/lana --account $gid --nymdb $nymdb --nhmsb $nhmsb $ldassetup/det_exeinp.txt $ldassetup/det_batinp.txt";
600+
print "$cmd\n";
601+
$rc = system $cmd;
602+
die "Failed to setup LDAS for det, check LDAS config input files $!" if ( $rc );
603+
chomp($aens_replay);
604+
if (($hyb_ens == 4) && ($aens_replay eq "no")) {
605+
$rc = system("$fvbin/ldas_setup setup $fvhome/lana --account $gid --nymdb $nymdb --nhmsb $nhmsb $ldassetup/ens_exeinp.txt $ldassetup/ens_batinp.txt");
606+
die "Failed to setup LDAS for ens, check LDAS config input files $!" if ( $rc );
606607
}
607-
608608
}
609609

610610
# Monthly Setup
@@ -3177,7 +3177,7 @@ sub get_nodeflg {
31773177
$proc = "";
31783178
# reset default if applicable
31793179
3180-
$ans = query(" Processing nodes (1:Haswell, 2:Skylake, 3:Cascase, 4:Milan)?", "2");
3180+
$ans = query(" Processing nodes (1:Haswell, 2:Skylake, 3:Cascade, 4:Milan)?", "4");
31813181
31823182
if ($ans == 1) { $nodeflg = "hasw"; $ncpus_per_node = 24 }
31833183
elsif ($ans == 2) { $nodeflg = "sky"; $ncpus_per_node = 36 }
@@ -3518,42 +3518,54 @@ sub set_newradbc {
35183518
}
35193519
#=======================================================================
35203520
sub set_ldasANA {
3521+
my ($dflt, $ans1, $ans2);
3522+
my (@bkglfo_files);
35213523
35223524
# initialize Land DAS processing flag
35233525
#------------------------------------
3524-
my($dflt, $ans1, $ans2, $ans3, $ans4);
35253526
$ldas_ana = 0;
3526-
$ldasfdbk = 0;
35273527
$ldas_flag = 0;
3528-
$dflt = "n";
3529-
$ldashome = "${fvhome}/lana/${expid}_LDAS" ;
3530-
$ldashome4ens = "${fvhome}/lana/${expid}_LDAS4ens" ;
3528+
$ldasfdbk = 0;
3529+
3530+
$ldashome = "${fvhome}/lana/${expid}_LDAS";
3531+
$ldashome4ens = dirname($ldashome) ."/${expid}_LDAS4ens";
35313532
35323533
print "\n-------------\n";
35333534
print "LDAS Analysis\n";
35343535
print "-------------\n\n";
35353536
3537+
$dflt = "n";
35363538
$ans1 = query(" Land DAS Analysis (y/n)?", $dflt) ;
3537-
$ldas_ana = 1 if yes($ans1);
3539+
if (yes($ans1)) {
3540+
$ldas_ana = 1;
3541+
$ldas_flag = 1;
35383542
3539-
if ($ldas_ana == 1) {
3540-
$ans2 = query(" Enable LDAS feedback to model y/n ? ", $dflt);
3541-
$ldasfdbk = 1 if yes($ans2);
3543+
$prompt = " Location of LDAS initial forcing ";
3544+
$dflt = $fvics;
3545+
$dflt = dirname($fvics) unless -d $fvics;
35423546
3543-
if ($ldasfdbk == 1 ) {
3544-
$ldas_flag = 1;
3545-
}
3547+
$ldashold = query($prompt, $dflt);
3548+
die ">>> Error <<< Cannot find directory, $ldashold;"
3549+
unless -d $ldashold;
35463550
3547-
$ans3 = query(" LDAS HOME? [DEFAULT: $ldashome]");
3548-
$ldashome = $ans3 unless blank($ans3);
3551+
@bkglfo_files = (<$ldashold/*bkg*lfo*${nymdb}_${hhb}*>);
3552+
die ">>> Error <<< Cannot find bkglfo files in $ldashold;"
3553+
unless scalar(@bkglfo_files);
3554+
3555+
$dflt = "n";
3556+
$ans2 = query(" Enable LDAS feedback to model y/n?", $dflt);
3557+
if (yes($ans2)) {
3558+
$ldasfdbk = 1;
3559+
}
3560+
$dflt = "/discover/nobackup/$user/ldasSaveInput";
3561+
$ldassetup = query(" LDAS setup input path?", $dflt);
35493562
3550-
if ($hyb_ens == 4 ) {
3551-
$ans4 = query(" LDAS HOME for atmens? [DEFAULT: $ldashome4ens]");
3552-
$ldashome4ens = $ans4 unless blank($ans4);
3553-
}
3554-
3555-
}
3556-
return 0;
3563+
if ($hyb_ens == 4 ) {
3564+
$dflt = "/discover/nobackup/$user/ldasSaveInput";
3565+
$ldassetup4ens = query(" LDAS setup input path for ens?", $dflt);
3566+
}
3567+
}
3568+
return 0;
35573569
}
35583570
35593571
#=======================================================================
@@ -3794,6 +3806,7 @@ EOF
37943806
}
37953807
$flags = "-nlevs $aens_lev $setacftbc $rcorrarg $setradbc $aens_lsmodel -expdir $fvhome/.. $sppt_flag $bcopt";
37963808
$flags .= " -fvhome $fvhome" if $checkFLG;
3809+
$flags .= " -ldasflg $ldas_flag";
37973810
$params = " $aens_ana $expid $aens_im $aens_jm $aens_ocn $landbcs";
37983811
37993812
$cmd = "$fvbin/setup_atmens.pl -nodename $nodeflg $flags $params";
@@ -5473,6 +5486,10 @@ sub mkdir_fvhome { # create directories on FVHOME
54735486
mkpath("$fvhome/run/$subdir")
54745487
or die ">> Error << creating subdir, $fvhome/run/$subdir;";
54755488
}
5489+
if ($ldas_flag) {
5490+
mkpath("$fvhome/recycle/holdpredout")
5491+
or die ">> Error << creating subdir, $fvhome/recycle/holdpredout;";
5492+
}
54765493
unlink("$fvhome/fvInput") if ( -e "$fvhome/fvInput" ) ;
54775494
symlink("$fvbcs","$fvhome/fvInput");
54785495
@@ -10275,6 +10292,8 @@ sub init_agcm_pert_rc {
1027510292
sub copy_resources {
1027610293
my ($chemrc, $ensFLG);
1027710294
my ($flags, $label, $string, $vars, $cmd);
10295+
my ($fname, $fname_old, $expid_old, $target);
10296+
my ($bkglfo_tarfile, @bkglfo_files, $target, $expid_old, $fname, $fname_old);
1027810297
1027910298
cp("$fvroot/etc/VERSION","$fvhome/run/VERSION")
1028010299
|| die "Cannot write file $fvhome/run/VERSION: $!";
@@ -10331,6 +10350,40 @@ sub copy_resources {
1033110350
system("$fvbin/vED -vv SHARE=$SHARE $ensFLG $source -o $target");
1033210351
}
1033310352
system("touch $fvhome/run/gaas/GAAS.BOOTSTRAP_");
10353+
10354+
if ($ldas_flag) {
10355+
die ">>> Error <<< Cannot find directory, $ldashold;"
10356+
unless -d $ldashold;
10357+
10358+
$target = "$fvhome/recycle/holdpredout";
10359+
die ">>> Error <<< Cannot find directory, $target;"
10360+
unless -d $target;
10361+
10362+
# extract lfo files from tarfile
10363+
#-------------------------------
10364+
$bkglfo_tarfile = (<$ldashold/*.bkglforst.${nymdb}_${hhb}z.tar>)[0];
10365+
if ($bkglfo_tarfile) {
10366+
$expid_old = find_expid($bkglfo_tarfile, 1);
10367+
chdir($target);
10368+
system("tar xf $bkglfo_tarfile");
10369+
system("rename $expid_old $expid *");
10370+
}
10371+
10372+
# or copy them from directory
10373+
#----------------------------
10374+
else {
10375+
$expid_old = find_expid($ldashold);
10376+
@bkglfo_files = (<$ldashold/$expid_old.bkg.lfo*.nc4>);
10377+
die ">>> Error <<< No $expid_old lfo files found in $ldashold;"
10378+
unless scalar(@bkglfo_files);
10379+
10380+
foreach $fname_old ( @bkglfo_files ) {
10381+
($fname = basename($fname_old)) =~ s/$expid_old/$expid/;
10382+
cp($fname_old, "$target/$fname");
10383+
print "cp $fname_old $target/$fname\n";
10384+
}
10385+
}
10386+
}
1033410387
}
1033510388
1033610389
# Model perturbation-related settings
@@ -10756,7 +10809,48 @@ sub copy_resources {
1075610809
}
1075710810
}
1075810811
}
10759-
10812+
10813+
#=======================================================================
10814+
# name - find_expid
10815+
# purpose - find expid from single filename or from multiple files in a
10816+
# directory.
10817+
#
10818+
# input parameters
10819+
# - $name: name of file or directory
10820+
# - $flag: (optional) 1=filename, 2=directory [default = 2]
10821+
#
10822+
# notes -
10823+
# 1. If $name is a file, then this routine extracts expid from front
10824+
# portion of the filename.
10825+
# 2. If $name is a directory, then this routine extracts expid from
10826+
# each file in the directory and returns the most prevalent value
10827+
# as the expid.
10828+
#=======================================================================
10829+
sub find_expid {
10830+
my ($name, $expid_found, $flag, $fname, $most, $front, %count);
10831+
$name = shift @_;
10832+
$flag = shift @_;
10833+
10834+
if ($flag == 1) {
10835+
die ">>> ERROR <<< $name is not a file;" unless -f $name;
10836+
$expid_found = (split(/\./, basename($name)))[0];
10837+
} else {
10838+
die ">>> ERROR <<< $name is not a directory;" unless -d $name;
10839+
for $fname ( <$name/*> ) {
10840+
$front = (split(/\./, basename($fname)))[0];
10841+
$count{$front}++;
10842+
}
10843+
$most = -1;
10844+
foreach $front (keys(%count)) {
10845+
if ($count{$front} > $most) {
10846+
$expid_found = $front;
10847+
$most = $count{$front};
10848+
}
10849+
}
10850+
}
10851+
return $expid_found;
10852+
}
10853+
1076010854
#=======================================================================
1076110855
sub edit_collections {
1076210856

src/Applications/GEOSdas_App/gen_silo_arc.pl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,8 @@ sub restart_info {
221221
printarc("$lineTAR\n");
222222
$lineTAR = '${PESTOROOT}%s/rs/Y%y4/M%m2/%s.bkgcrst.%y4%m2%d2_%h2z.tar';
223223
printarc("$lineTAR\n");
224+
$lineTAR = '${PESTOROOT}%s/rs/Y%y4/M%m2/%s.bkglforst.%y4%m2%d2_%h2z.tar';
225+
printarc("$lineTAR\n");
224226
$lineTAR = '${PESTOROOT}%s/jedi/rs/Y%y4/M%m2/%s.jedi_agcmrst.%y4%m2%d2_%h2z.tar';
225227
printarc("$lineTAR\n");
226228

src/Applications/GEOSdas_App/testsuites/x3dvar_ladas.input

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ FVHOME? [/discover/nobackup/qzhang/x3dvar_ladas]
4444
The directory /discover/nobackup/qzhang/x3dvar does not exist. Create it now? [y]
4545
>
4646

47-
Processing nodes (1:Haswell, 2:Skylake, 3:Cascade, 4:Milan)? [2]
47+
Processing nodes (3:Cascade, 4:Milan)? [3]
4848
> 4
4949

5050
Which case of variational analysis? [1]

0 commit comments

Comments
 (0)