Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update setup procedures for LADAS #327

Draft
wants to merge 2 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
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 src/Applications/GEOSdas_App/AGCMrc.pm
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,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 Down
4 changes: 2 additions & 2 deletions src/Applications/GEOSdas_App/GEOSdas.csm
Original file line number Diff line number Diff line change
Expand Up @@ -6082,9 +6082,9 @@ endif
#------------------------------------

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

exit 0
Expand Down
141 changes: 104 additions & 37 deletions src/Applications/GEOSdas_App/fvsetup
Original file line number Diff line number Diff line change
Expand Up @@ -578,22 +578,21 @@ $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
# Provide ldas config input files: det_exeinp.txt, det_batinp.txt
# For Hyb-4dEnVar, do same for ens_exeinp.txt and ens_batinp.txt
# Please follow instructions in GEOSldas/README.md for the 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 $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 $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 @@ -3499,42 +3498,61 @@ sub set_newradbc {
}
#=======================================================================
sub set_ldasANA {
my($dflt, $ans1, $ans2);

# 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_dflt = "${fvhome}/lana/${expid}_LDAS";

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;
$dflt = "n";
$prompt = " Location of ldas holdpredout files or 'later'";
$ldashold = query($prompt, $dflt);
unless ($ldashold eq "later") {
die ">>> Error(1) <<< Cannot find directory, $ldashold;"
unless -d $ldashold;
}

$ans2 = query(" Enable LDAS feedback to model y/n?", $dflt);
if (yes($ans2)) {
$ldasfdbk = 1;
}

if ($ldas_ana == 1) {
$ans2 = query(" Enable LDAS feedback to model y/n ? ", $dflt);
$ldasfdbk = 1 if yes($ans2);
$ldashome = $ldashome_dflt;
#$ldashome = query(" LDAS HOME?", $dflt);

if ($ldasfdbk == 1 ) {
$ldas_flag = 1;
}

$ans3 = query(" LDAS HOME? [DEFAULT: $ldashome]");
$ldashome = $ans3 unless blank($ans3);
$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);
}
if ($hyb_ens == 4 ) {
$ldashome4ens = dirname($ldashome) ."/${expid}_LDAS4ens";
#$ldashome4ens = query(" LDAS HOME for atmens?", $dflt);

$dflt = "/discover/nobackup/$user/ldasSaveInput";
$ldassetup4ens = query(" LDAS SETUP input path for ens?", $dflt);
}
}

}
return 0;
unless ($ldashome) {
$ldashome = $ldashome_dflt;
}
unless ($ldashome4ens) {
$ldashome4ens = dirname($ldashome) ."/${expid}_LDAS4ens";
}

return 0;
}

#=======================================================================
Expand Down Expand Up @@ -3748,6 +3766,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 @@ -3776,7 +3795,7 @@ EOF
print JSCRPT $line;
}
close TILDE;
close JSCRPT;
close JSCRPT;

# Copy and rename ensemble restarts
# ---------------------------------
Expand Down Expand Up @@ -5427,6 +5446,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 @@ -9780,12 +9803,13 @@ sub init_agcm_rc {
$envvars{"coupled"} = $coupled;
set_AGCM_envvars(%envvars);

$flags{"gocart_tracers"} = $gocart_tracers;
$flags{"carma_tracers"} = $carma_tracers;
$flags{"gocart_tracers"} = $gocart_tracers;
$flags{"iau"} = $doiau;
$flags{"pcp_forced"} = $pcp_forced;
$flags{"lsmodel_flag"} = $lsmodel_flag;
$flags{"ldas_flag"} = $ldas_flag;
$flags{"lsmodel_flag"} = $lsmodel_flag;
$flags{"pcp_forced"} = $pcp_forced;

set_AGCM_flags(%flags);

# $num_readers must divide evenly into $ny
Expand Down Expand Up @@ -10030,6 +10054,7 @@ sub init_agcm_pert_rc {
sub copy_resources {
my ($chemrc, $ensFLG);
my ($flags, $label, $string, $vars, $cmd);
my ($fname, $fname_old, $expid_old, $target);

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

if ($ldas_flag) {
$target = "$fvhome/recycle/holdpredout";
die ">>> Error <<< Cannot find directory, $target;" unless -d $target;
die ">>> Error(2) <<< Cannot find directory, $ldashold;"
unless -d $ldashold;

$expid_old = find_expid($ldashold);
foreach $fname_old ( <$ldashold/*lfo*> ) {
($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 @@ -10503,6 +10543,33 @@ sub copy_resources {
}
}
}

#=======================================================================
# name - find_expid
# purpose - find expid in directory based on directory file names
#
# notes -
# This routine extracts the front portion of each file in the
# directory to find the expid of the file. It assumes that the most
# prevalent value extracted is the expid for the files.
#=======================================================================
sub find_expid {
my ($dir, $fname, $most, $front, %count);
$dir = shift @_;
die ">>> ERROR <<< $dir is not a directory;" unless -d $dir;
for $fname ( <$dir/*> ) {
$front = (split(/\./, basename($fname)))[0];
$count{$front}++;
}
$most = -1;
foreach $front (keys(%count)) {
if ($count{$front} > $most) {
$dir_expid = $front;
$most = $count{$front};
}
}
return $dir_expid;
}

#=======================================================================
sub edit_collections {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -546,7 +546,7 @@ LSM_CHOICE: @LSM_CHOICE
# 0 : no (default)
# 1 : yes
# ------------------------------------------------------------
#LDAS_INCR: 0
LDAS_INCR: @LDAS_INCR

# Name of file containing Surface GridComp resource parameters
# ------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ COLLECTIONS: 'bkg.eta'
# 'inst3_3d_wxme_Np'
# 'tavg3_2d_wxme_Nx'
# Land output
# 'tavg1_2d_lfo_Nx+-'
# 'inst1_2d_lfo_Nx+-'
# 'tavg1_2d_lfo_Nx'
# 'inst1_2d_lfo_Nx'
# 'tavg1_2d_lnd_Nx'
Expand Down Expand Up @@ -863,3 +865,47 @@ COLLECTIONS: 'bkg.eta'
'TDEL' , 'SURFACE' , 'tdel' ,
'Z0' , 'SURFACE' , 'z0m' ,
::

#######################################################################
# predictor forcing files for land da coupling
#######################################################################

tavg1_2d_lfo_Nx+-.format: 'CFIO' ,
tavg1_2d_lfo_Nx+-.descr: '2d,1-Hourly,Time-Averaged,Single-Level,Land Surface Forcings' ,
# tavg1_2d_lfo_Nx+-.nbits: 10 ,
tavg1_2d_lfo_Nx+-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' ,
tavg1_2d_lfo_Nx+-.mode: 'time-averaged' ,
tavg1_2d_lfo_Nx+-.frequency: 010000 ,
tavg1_2d_lfo_Nx+-.duration: 010000 ,
tavg1_2d_lfo_Nx+-.ref_date: >>>IOBBKGD<<< ,
tavg1_2d_lfo_Nx+-.ref_time: >>>IOBBKGT<<< ,
tavg1_2d_lfo_Nx+-.end_date: >>>IOEBKGD<<< ,
tavg1_2d_lfo_Nx+-.end_time: >>>IOEBKGT<<< ,
tavg1_2d_lfo_Nx+-.fields: 'SLRSF' , 'SOLAR' , 'SWGDN' ,
'SWLAND' , 'SURFACE' ,
'LWS' , 'IRRAD' , 'LWGAB' ,
'PCU' , 'SURFACE' , 'PRECCU' ,
'PLS' , 'SURFACE' , 'PRECLS' ,
'SNO' , 'SURFACE' , 'PRECSNO' ,
'DFPAR' , 'SOLAR' , 'PARDF' ,
'DRPAR' , 'SOLAR' , 'PARDR' ,
::

inst1_2d_lfo_Nx+-.format: 'CFIO' ,
inst1_2d_lfo_Nx+-.descr: '2d,1-Hourly,Instantaneous,Single-Level,Land Surface Forcings' ,
# inst1_2d_lfo_Nx+-.nbits: 10 ,
inst1_2d_lfo_Nx+-.template: '%y4%m2%d2_%h2%n2z.>>>NCSUFFIX<<<' ,
inst1_2d_lfo_Nx+-.mode: 'instantaneous' ,
inst1_2d_lfo_Nx+-.frequency: 010000 ,
inst1_2d_lfo_Nx+-.duration: 010000 ,
inst1_2d_lfo_Nx+-.ref_date: >>>IOBBKGD<<< ,
inst1_2d_lfo_Nx+-.ref_time: >>>IOBBKGT<<< ,
inst1_2d_lfo_Nx+-.end_date: >>>IOEBKGD<<< ,
inst1_2d_lfo_Nx+-.end_time: >>>IOEBKGT<<< ,
inst1_2d_lfo_Nx+-.fields: 'DZ' , 'DYN' , 'HLML' ,
'TA' , 'DYN' , 'TLML' ,
'QA' , 'DYN' , 'QLML' ,
'SPEED' , 'DYN' , 'SPEEDLML' ,
'PS' , 'DYN' ,
::

Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
"fvhome=s",
"nlevs=s",
"nodename=s",
"ldasflg=i",
"lsmcm",
"radbc",
"vtxrlc",
Expand Down Expand Up @@ -146,6 +147,12 @@ sub init {
$dosppt = 0;
}

$ldas_on = 0;
if ( $opt_ldasflg == 1) {
$ldas_on = 1;;
}


$setacftbc = 0;
if ( $opt_acftbc ) {
$setacftbc = $opt_acftbc;
Expand Down Expand Up @@ -546,6 +553,7 @@ sub ed_agcm_rc {
}

if($rcd =~ /\@LSM_CHOICE/) {$rcd=~ s/\@LSM_CHOICE/$lsmchoice/g; }
if($rcd =~ /\@LDAS_INCR/) {$rcd=~ s/\@LDAS_INCR/$ldas_on/g; }
if ( "$lndbcs" eq "Icarus-NLv3" ) {
if($rcd =~ /\@LSM_PARMS/) {$rcd=~ s/\@LSM_PARMS/ /g; }
} else {
Expand Down
Loading