@@ -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#=======================================================================
35203520sub 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 {
1027510292sub 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#=======================================================================
1076110855sub edit_collections {
1076210856
0 commit comments