diff --git a/components.yaml b/components.yaml index 0facab2a..ed371f7f 100644 --- a/components.yaml +++ b/components.yaml @@ -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 @@ -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: diff --git a/src/Applications/GEOSdas_App/AGCMrc.pm b/src/Applications/GEOSdas_App/AGCMrc.pm old mode 100644 new mode 100755 index 9cf91967..5496b709 --- a/src/Applications/GEOSdas_App/AGCMrc.pm +++ b/src/Applications/GEOSdas_App/AGCMrc.pm @@ -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; @@ -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 @@ -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 @@ -144,7 +145,6 @@ sub set_AGCM_envvars { @rs5_notused = (@rs5_notused, @rs5_coupled); @rs5_files = (@rs5_core, @rs5_boot, @rs5_others); } - } #======================================================================= @@ -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; } @@ -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) { @@ -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 @@ -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 @_; @@ -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"); diff --git a/src/Applications/GEOSdas_App/GEOSdas.csm b/src/Applications/GEOSdas_App/GEOSdas.csm index cd0c6ab1..1d5d70c2 100755 --- a/src/Applications/GEOSdas_App/GEOSdas.csm +++ b/src/Applications/GEOSdas_App/GEOSdas.csm @@ -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 . @@ -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 diff --git a/src/Applications/GEOSdas_App/fvsetup b/src/Applications/GEOSdas_App/fvsetup index 1637430e..dfa5e03a 100755 --- a/src/Applications/GEOSdas_App/fvsetup +++ b/src/Applications/GEOSdas_App/fvsetup @@ -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 @@ -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 } @@ -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; } #======================================================================= @@ -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"; @@ -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"); @@ -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: $!"; @@ -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 @@ -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 { diff --git a/src/Applications/GEOSdas_App/gen_silo_arc.pl b/src/Applications/GEOSdas_App/gen_silo_arc.pl index 8c6fb366..2921d9de 100755 --- a/src/Applications/GEOSdas_App/gen_silo_arc.pl +++ b/src/Applications/GEOSdas_App/gen_silo_arc.pl @@ -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"); diff --git a/src/Applications/GEOSdas_App/testsuites/x3dvar_ladas.input b/src/Applications/GEOSdas_App/testsuites/x3dvar_ladas.input index 981174a3..7807e948 100644 --- a/src/Applications/GEOSdas_App/testsuites/x3dvar_ladas.input +++ b/src/Applications/GEOSdas_App/testsuites/x3dvar_ladas.input @@ -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] diff --git a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/atmens_arch.csh b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/atmens_arch.csh index 7446e800..23d8c850 100755 --- a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/atmens_arch.csh +++ b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/atmens_arch.csh @@ -234,6 +234,18 @@ if ( $doall && (-d $myball) ) then endif end endif +# store background lfo members only ... +set myball = $expid.atmens_ebkglfo.${nymdb}_${hhb}z +set doall = 1 +if ( $doall && (-d $myball) ) then + @ ic = 0 + while ( $ic < $nmem ) + @ ic++ + set memtag = `echo $ic |awk '{printf "%03d", $1}'` + mkdir -p $myball/mem$memtag + /bin/mv mem$memtag/*.bkg.lfo*.$NCSUFFIX $myball/mem$memtag/ + end +endif # store aerosol background fields only ... set myball = $expid.atmens_ebaer.${nymdb}_${hhb}z set syndate = ( `tick $nymdb $nhmsb $offset_sec` ) diff --git a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/AGCM.rc.tmpl b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/AGCM.rc.tmpl index f59c256b..4c558df0 100644 --- a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/AGCM.rc.tmpl +++ b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/AGCM.rc.tmpl @@ -552,7 +552,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 # ------------------------------------------------------------ diff --git a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/AtmEnsConfig.csh b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/AtmEnsConfig.csh index 6f0fd1e5..ee7abd18 100644 --- a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/AtmEnsConfig.csh +++ b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/AtmEnsConfig.csh @@ -31,9 +31,9 @@ setenv ACFTBIAS @ACFTBIAS # 0: no aircraft bias correction # archiving # --------- setenv ENSARCH_ALLBKG 1 # set this and ALL bkg files are saved in tar ball -setenv ENSARCH_FIELDS "eana,ebkg,stat,ecbkg,eoi0,edia,ebaer,erst,ebkgx,eprg,eniana" -setenv ENSARCH_FIELDS "eana,ebkg,stat,ecbkg,eoi0,edia,ebaer,erst" -setenv ENSARCH_FIELDS "eana,ebkg,stat,ecbkg,eoi0,edia,ebaer,erst,ebkgx,edstat" +setenv ENSARCH_FIELDS "eana,ebkg,stat,ecbkg,ebkglfo,eoi0,edia,ebaer,erst,ebkgx,eprg,eniana" +setenv ENSARCH_FIELDS "eana,ebkg,stat,ecbkg,ebkglfo,eoi0,edia,ebaer,erst" +setenv ENSARCH_FIELDS "eana,ebkg,stat,ecbkg,ebkglfo,eoi0,edia,ebaer,erst,ebkgx,edstat" setenv ENSARCH_WALLCLOCK 2:00:00 setenv ARCHLOC $FVARCH diff --git a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/HISTAENS.rc.tmpl b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/HISTAENS.rc.tmpl index dc7d4414..c7b918c4 100644 --- a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/HISTAENS.rc.tmpl +++ b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/HISTAENS.rc.tmpl @@ -39,6 +39,8 @@ COLLECTIONS: 'bkg.eta' 'cbkg.eta' # 'abkg.eta' 'gaas_bkg.sfc' + 'bkg.lfo_tavg' + 'bkg.lfo_inst' # 'skeb_eta' @AENS_DOSPPT 'sppt_eta' # 'sppt_diag_eta' @@ -610,7 +612,6 @@ COLLECTIONS: 'bkg.eta' tavg1_2d_lfo_Nx.end_date: >>>IOBBKGD<<< , tavg1_2d_lfo_Nx.end_time: >>>IOBBKGT<<< , tavg1_2d_lfo_Nx.fields: 'SLRSF' , 'SOLAR' , 'SWGDN' , - 'SWLAND' , 'SURFACE' , 'LWS' , 'IRRAD' , 'LWGAB' , 'PCU' , 'SURFACE' , 'PRECCU' , 'PLS' , 'SURFACE' , 'PRECLS' , @@ -863,3 +864,46 @@ COLLECTIONS: 'bkg.eta' 'TDEL' , 'SURFACE' , 'tdel' , 'Z0' , 'SURFACE' , 'z0m' , :: + +####################################################################### +# predictor forcing files for land da coupling +####################################################################### + + bkg.lfo_tavg.format: 'CFIO' , + bkg.lfo_tavg.descr: '2d,1-Hourly,Time-Averaged,Single-Level,Land Surface Forcings' , +# bkg.lfo_tavg.nbits: 10 , + bkg.lfo_tavg.template: '%y4%m2%d2_%h2%n2z.>>>MEMBER<<<.>>>NCSUFFIX<<<' , + bkg.lfo_tavg.mode: 'time-averaged' , + bkg.lfo_tavg.frequency: 010000 , + bkg.lfo_tavg.duration: 010000 , + bkg.lfo_tavg.ref_date: >>>IOBBKGD<<< , + bkg.lfo_tavg.ref_time: >>>IOBBKGT<<< , + bkg.lfo_tavg.end_date: >>>IOEDATE<<< , + bkg.lfo_tavg.end_time: >>>IOETIME<<< , + bkg.lfo_tavg.fields: 'SLRSF' , 'SOLAR' , 'SWGDN' , + 'LWS' , 'IRRAD' , 'LWGAB' , + 'PCU' , 'SURFACE' , 'PRECCU' , + 'PLS' , 'SURFACE' , 'PRECLS' , + 'SNO' , 'SURFACE' , 'PRECSNO' , + 'DFPAR' , 'SOLAR' , 'PARDF' , + 'DRPAR' , 'SOLAR' , 'PARDR' , + :: + + bkg.lfo_inst.format: 'CFIO' , + bkg.lfo_inst.descr: '2d,1-Hourly,Instantaneous,Single-Level,Land Surface Forcings' , +# bkg.lfo_inst.nbits: 10 , + bkg.lfo_inst.template: '%y4%m2%d2_%h2%n2z.>>>MEMBER<<<.>>>NCSUFFIX<<<' , + bkg.lfo_inst.mode: 'instantaneous' , + bkg.lfo_inst.frequency: 010000 , + bkg.lfo_inst.duration: 010000 , + bkg.lfo_inst.ref_date: >>>IOBBKGD<<< , + bkg.lfo_inst.ref_time: >>>IOBBKGT<<< , + bkg.lfo_inst.end_date: >>>IOEDATE<<< , + bkg.lfo_inst.end_time: >>>IOETIME<<< , + bkg.lfo_inst.fields: 'DZ' , 'DYN' , 'HLML' , + 'TA' , 'DYN' , 'TLML' , + 'QA' , 'DYN' , 'QLML' , + 'SPEED' , 'DYN' , 'SPEEDLML' , + 'PS' , 'DYN' , + :: + diff --git a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/atmens_storage.arc b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/atmens_storage.arc index f7f6ec7e..86af2c89 100644 --- a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/atmens_storage.arc +++ b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/etc/atmens_storage.arc @@ -41,6 +41,7 @@ ${PESTOROOT}%s/atmens/Y%y4/M%m2/%s.atmens_eana_brec.%y4%m2%d2_%h2z.tar ${PESTOROOT}%s/atmens/Y%y4/M%m2/%s.atmens_easm.%y4%m2%d2_21z.tar ${PESTOROOT}%s/atmens/Y%y4/M%m2/%s.atmens_ebkg.%y4%m2%d2_%h2z.tar ${PESTOROOT}%s/atmens/Y%y4/M%m2/%s.atmens_ecbkg.%y4%m2%d2_%h2z.tar +${PESTOROOT}%s/atmens/Y%y4/M%m2/%s.atmens_ebkglfo.%y4%m2%d2_%h2z.tar ${PESTOROOT}%s/atmens/Y%y4/M%m2/%s.atmens_eana.%y4%m2%d2_%h2z.tar ${PESTOROOT}%s/atmens/Y%y4/M%m2/%s.atmens_eniana.%y4%m2%d2_%h2z.tar ${PESTOROOT}%s/atmens/Y%y4/M%m2/%s.atmens_eaaer.%y4%m2%d2_%h2z.tar diff --git a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/get_atmens_rst.pl b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/get_atmens_rst.pl index 4d9a9398..7f77d967 100755 --- a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/get_atmens_rst.pl +++ b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/get_atmens_rst.pl @@ -24,11 +24,12 @@ # main program #------------- { - my ($atmens_date3_dir, $atmens_date_dir, $atmens_ebkg_dir); + my ($atmens_date3_dir, $atmens_date_dir, $atmens_ebkg_dir, $atmens_ebkglfo_dir); my ($atmens_ecbkg_dir, $atmens_erst_dir, $atmens_stat_dir); my ($dmlist, $ens, $hh3, $hms3, $label, $mem, $mfile, $mfile_new, $mm3); my ($pid, $pwd, $rdnperts_dates3_txt, $tarfile, $tarpath); my ($three_hr_sec, $ymd3, $yyyy3, @tarList, @tarListA); + my (@labels, $ebkglfo_present, $ebkglfo ); my $fvbin = $FindBin::Bin; $fvroot = dirname($fvbin); @@ -50,7 +51,14 @@ cp_("$atmens_date3_dir/$rdnperts_dates3_txt", $pwd); rename_new($rdnperts_dates3_txt); - foreach $label ("stat", "ebkg", "ecbkg", "erst") { + @labels = qw(stat ebkg ecbkg erst); + $ebkglfo_present = "no"; + $ebkglfo = "$atmens_date_dir/$expid.atmens_ebkglfo.${yyyymmdd}_${hh}z.tar"; + if ( -e $ebkglfo ) { + $ebkglfo_present = "yes" ; + @labels = qw(stat ebkg ecbkg erst ebkglfo); + } + foreach $label (@labels) { $tarfile = "$expid.atmens_$label.${yyyymmdd}_${hh}z.tar"; $tarpath = "$atmens_date_dir/$tarfile"; @@ -82,11 +90,19 @@ foreach $mem () { next unless -d $mem; foreach $mfile (<$atmens_erst_dir/$mem/${expid}*>) { mv_($mfile, $mem) } - foreach $mfile (<$atmens_ecbkg_dir/$mem/${expid}*>) { mv_($mfile, $mem) } + foreach $mfile (<$atmens_ecbkg_dir/$mem/${expid}*>) { mv_($mfile, $mem) } + chomp($ebkglfo_present); + if ( $ebkglfo_present eq 'yes' ) { + $atmens_ebkglfo_dir = "$expid.atmens_ebkglfo.${yyyymmdd}_${hh}z"; + foreach $mfile (<$atmens_ebkglfo_dir/$mem/${expid}*>) { mv_($mfile, $mem) } + } rename_new($mem) } rmtree($atmens_erst_dir) or die "Error; rmtree $atmens_erst_dir;"; rmtree($atmens_ecbkg_dir) or die "Error; rmtree $atmens_ecbkg_dir;"; + if ( $ebkglfo_present eq 'yes' ) { + rmtree($atmens_ebkglfo_dir) or die "Error; rmtree $atmens_ebkglfo_dir;"; + } } #======================================================================= diff --git a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/setup_atmens.pl b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/setup_atmens.pl index 1dc6e257..cf96d4d1 100755 --- a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/setup_atmens.pl +++ b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/setup_atmens.pl @@ -43,6 +43,7 @@ "fvhome=s", "nlevs=s", "nodename=s", + "ldasflg=i", "lsmcm", "radbc", "vtxrlc", @@ -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; @@ -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 { diff --git a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/update_ens.csh b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/update_ens.csh index a35c952f..a1c42853 100755 --- a/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/update_ens.csh +++ b/src/Applications/NCEP_Etc/NCEP_enkf/scripts/gmao/update_ens.csh @@ -88,6 +88,12 @@ endif /bin/mv $fn ../updated_ens/${member}/$newname.$ncsuffix end # fn end # fntype + foreach fntype ( bkg.lfo_inst bkg.lfo_tavg ) + foreach fn ( `/bin/ls $expid.${fntype}.*.${member}.$ncsuffix` ) + set newname = `echo $fn | cut -d. -f1-4 ` + /bin/mv $fn ../updated_ens/${member}/$newname.$ncsuffix + end # fn + end # fntype endif if ( "$type" == "niana" ) then mkdir -p ../updated_ens/${member} @@ -146,7 +152,7 @@ endif if ( "$type" == "diag" ) then mkdir -p ../updated_ens/ensdiag/${member} touch ../updated_ens/ensdiag/.no_archiving - set fntype_all = (`edhist.pl -q 3 -list inc -X Bkg.eta,bkg.eta,bkg.sfc,abkg.eta,cbkg.eta,gaas_bkg.sfc -i $rcfile`) + set fntype_all = (`edhist.pl -q 3 -list inc -X Bkg.eta,bkg.eta,bkg.sfc,abkg.eta,cbkg.eta,gaas_bkg.sfc,bkg.lfo_inst,bkg.lfo_tavg -i $rcfile`) foreach fntype ( $fntype_all ) if ( $fntype == "bkg_clcv" ) then if ( ! -d ../updated_ens/ensbkgx/${member} ) then