[Dart-dev] [5464] DART/branches/development/models/cam/shell_scripts/assimilate.Fzagar .csh: script for the zagar test on bluefire.

nancy at ucar.edu nancy at ucar.edu
Thu Dec 22 10:41:00 MST 2011


Revision: 5464
Author:   nancy
Date:     2011-12-22 10:41:00 -0700 (Thu, 22 Dec 2011)
Log Message:
-----------
script for the zagar test on bluefire.

Added Paths:
-----------
    DART/branches/development/models/cam/shell_scripts/assimilate.Fzagar.csh

-------------- next part --------------
Added: DART/branches/development/models/cam/shell_scripts/assimilate.Fzagar.csh
===================================================================
--- DART/branches/development/models/cam/shell_scripts/assimilate.Fzagar.csh	                        (rev 0)
+++ DART/branches/development/models/cam/shell_scripts/assimilate.Fzagar.csh	2011-12-22 17:41:00 UTC (rev 5464)
@@ -0,0 +1,433 @@
+#!/bin/csh
+#
+# DART software - Copyright 2004 - 2011 UCAR. This open source software is
+# provided by UCAR, "as is", without charge, subject to all terms of use at
+# http://www.image.ucar.edu/DAReS/DART/DART_download
+#
+# $Id$
+
+# The FORCE options are not optional.
+# the VERBOSE options are useful for debugging.
+set   MOVE = '/usr/local/bin/mv -fv'
+set   COPY = '/usr/local/bin/cp -fv --preserve=timestamps'
+set   LINK = '/usr/local/bin/ln -fvs'
+set REMOVE = '/usr/local/bin/rm -fr'
+
+set ensemble_size = ${NINST_ATM}
+
+# Create temporary working directory for the assimilation
+set temp_dir = assimilate_dir
+echo "temp_dir is $temp_dir"
+mkdir -p $temp_dir
+cd $temp_dir
+
+#-------------------------------------------------------------------------
+# Determine time of model state ... from file name of first member
+# of the form "./${CASE}.cam_${ensemble_member}.r.2000-01-06-00000.nc"
+#-------------------------------------------------------------------------
+
+set FILE = `head -1 ../rpointer.atm_0001`
+set FILE = $FILE:t
+set FILE = $FILE:r
+set MYCASE = `echo $FILE | sed -e "s#\..*##"`
+set MODEL_DATE_EXT = `echo $FILE:e`
+set MODEL_DATE     = `echo $FILE:e | sed -e "s#-# #g"`
+set MODEL_YEAR     = $MODEL_DATE[1]
+set MODEL_MONTH    = $MODEL_DATE[2]
+set MODEL_DAY      = $MODEL_DATE[3]
+set MODEL_SECONDS  = $MODEL_DATE[4]
+set MODEL_HOUR     = `echo $MODEL_DATE[4] / 3600 | bc`
+
+echo "valid time of model is $MODEL_YEAR $MODEL_MONTH $MODEL_DAY $MODEL_SECONDS (seconds)"
+echo "valid time of model is $MODEL_YEAR $MODEL_MONTH $MODEL_DAY $MODEL_HOUR (hours)"
+
+#-----------------------------------------------------------------------------
+# Set variables containing various directory names where we will GET things
+#-----------------------------------------------------------------------------
+
+set DARTDIR = /glade/proj3/image/nancy/subversion/development/
+set  OBSDIR = /glade/proj3/image/Observations/Synthetic/UVT_Set2_12H
+
+#-------------------------------------------------------------------------
+# DART COPY BLOCK
+# Populate a run-time directory with the bits needed to run DART
+#-------------------------------------------------------------------------
+
+foreach FILE ( input_1.nml input_n.nml filter cam_to_dart dart_to_cam )
+   if (  -e   ${DARTDIR}/models/cam/work/${FILE} ) then
+      ${COPY} ${DARTDIR}/models/cam/work/${FILE} .
+   else
+      echo "DART required file ${DARTDIR}/${FILE} not found ... ERROR"
+      exit 1
+   endif
+end
+
+# first step needs to perturb the single restart file
+# after that it runs like normal.
+${COPY} input_1.nml input.nml
+#${COPY} input_n.nml input.nml
+
+${COPY} /glade/proj3/DART/raeder/FV1deg_4.0/cam_phis.nc .
+
+# Modify the DART input.nml such that
+# the DART ensemble size matches the CESM number of instances
+# WARNING: the output files contain ALL enemble members ==> BIG
+
+ex input.nml <<ex_end
+g;ens_size ;s;= .*;= $ensemble_size;
+g;num_output_state_members ;s;= .*;= $ensemble_size;
+g;num_output_obs_members ;s;= .*;= $ensemble_size;
+wq
+ex_end
+
+#-------------------------------------------------------------------------
+# DART SAMPLING ERROR CORRECTION BLOCK
+# This stages the files needed for the sampling error correction.
+# Each ensemble size has its own (static) file which does not need to be archived.
+# It is only needed if
+# input.nml:&assim_tools_nml:sampling_error_correction = .true.,
+#-------------------------------------------------------------------------
+
+set  MYSTRING = `grep sampling_error_correction input.nml`
+set  MYSTRING = `echo $MYSTRING | sed -e "s#[=,'\.]# #g"`
+set  MYSTRING = `echo $MYSTRING | sed -e 's#"# #g'`
+set SECSTRING = `echo $MYSTRING[2] | tr 'A-Z' 'a-z'`
+
+if ( $SECSTRING == true ) then
+   set SAMP_ERR_FILE = ${DARTDIR}/system_simulation/final_full_precomputed_tables/final_full.${ensemble_size}
+   if (  -e   ${SAMP_ERR_FILE} ) then
+      ${COPY} ${SAMP_ERR_FILE} .
+   else
+      echo "ERROR: no sampling error correction file for this ensemble size."
+      echo "ERROR: looking for ${SAMP_ERR_FILE}"
+      exit 2
+   endif
+else
+   echo "Sampling Error Correction not requested for this assimilation."
+endif
+
+#-------------------------------------------------------------------------
+# DART INFLATION BLOCK
+# This stages the files that contain the inflation values.
+# The inflation values change through time and should be archived.
+#
+# This file is only relevant if 'inflation' is turned on -
+# i.e. if inf_flavor(1) /= 0 AND inf_initial_from_restart = .TRUE.
+#
+# filter_nml
+# inf_flavor                  = 2,                       0,
+# inf_initial_from_restart    = .true.,                  .false.,
+# inf_in_file_name            = 'prior_inflate_ics',     'post_inflate_ics',
+# inf_out_file_name           = 'prior_inflate_restart', 'post_inflate_restart',
+# inf_diag_file_name          = 'prior_inflate_diag',    'post_inflate_diag',
+#
+# NOTICE: the archiving scripts more or less require the names of these
+# files to be as listed above. When being archived, the filenames get a
+# unique extension (describing the assimilation time) appended to them.
+#
+# The inflation file is essentially a duplicate of the model state ...
+# it is slaved to a specific geometry. The initial files are created
+# offline with values of unity. For the purpose of this script, they are
+# thought to be the output of a previous assimilation, so they should be
+# named something like prior_inflate_restart.YYYY-MM-DD-SSSSS
+#
+# The first inflation file can be created with 'fill_inflation_restart'
+# which can be built in the usual DART manner.
+#
+# The strategy is to use the LATEST inflation file from the CESM 'rundir'.
+# After an assimilation, the new inflation values/files will be moved to
+# the CESM rundir to be used for subsequent assimilations. If the short-term
+# archiver has worked correctly, only the LATEST files will available. Of
+# course, it is not required to have short-term archiving turned on, so ...
+#-------------------------------------------------------------------------
+
+set  MYSTRING = `grep inf_flavor input.nml`
+set  MYSTRING = `echo $MYSTRING | sed -e "s#[=,]# #g"`
+set  PRIOR_INF = $MYSTRING[2]
+set  POSTE_INF = $MYSTRING[3]
+
+set  MYSTRING = `grep inf_initial_from_restart input.nml`
+set  MYSTRING = `echo $MYSTRING | sed -e "s#[=,]# #g"`
+set  PRIOR_TF = `echo $MYSTRING[2] | tr [A-Z] [a-z]`
+set  POSTE_TF = `echo $MYSTRING[3] | tr [A-Z] [a-z]`
+
+# its a little tricky to remove both styles of quotes from the string.
+
+set  MYSTRING = `grep inf_in_file_name input.nml`
+set  MYSTRING = `echo $MYSTRING | sed -e "s#[=,']# #g"`
+set  MYSTRING = `echo $MYSTRING | sed -e 's#"# #g'`
+set  PRIOR_INF_IFNAME = $MYSTRING[2]
+set  POSTE_INF_IFNAME = $MYSTRING[3]
+
+set  MYSTRING = `grep inf_out_file_name input.nml`
+set  MYSTRING = `echo $MYSTRING | sed -e "s#[=,']# #g"`
+set  MYSTRING = `echo $MYSTRING | sed -e 's#"# #g'`
+set  PRIOR_INF_OFNAME = $MYSTRING[2]
+set  POSTE_INF_OFNAME = $MYSTRING[3]
+
+set  MYSTRING = `grep inf_diag_file_name input.nml`
+set  MYSTRING = `echo $MYSTRING | sed -e "s#[=,']# #g"`
+set  MYSTRING = `echo $MYSTRING | sed -e 's#"# #g'`
+set  PRIOR_INF_DIAG = $MYSTRING[2]
+set  POSTE_INF_DIAG = $MYSTRING[3]
+
+# IFF we want PRIOR inflation:
+
+if ( $PRIOR_INF > 0 ) then
+
+   if ($PRIOR_TF == ".false.") then
+      echo "ERROR: inf_flavor(1) = $PRIOR_INF, yet inf_initial_from_restart = $PRIOR_TF"
+      echo "ERROR: fix input.nml to reflect whether you want prior inflation or not."
+      exit 3
+   endif
+
+   # Look for the output from the previous assimilation
+   (ls -rt1 ../${PRIOR_INF_OFNAME}.* | tail -1 >! latestfile) > & /dev/null
+   set nfiles = `cat latestfile | wc -l`
+
+   # If one exists, use it as input for this assimilation
+   if ( $nfiles > 0 ) then
+      set latest = `cat latestfile`
+      ${LINK} $latest ${PRIOR_INF_IFNAME}
+   else
+      echo "ERROR: Requested prior inflation but specified no incoming prior inflation file."
+      echo "ERROR: expected something like ../${PRIOR_INF_OFNAME}.YYYY-MM-DD-SSSSS"
+      exit 4
+   endif
+else
+   echo "Prior Inflation not requested for this assimilation."
+endif
+
+# POSTERIOR: We look for the 'newest' and use it - IFF we need it.
+
+if ( $POSTE_INF > 0 ) then
+
+   if ($POSTE_TF == ".false.") then
+      echo "ERROR: inf_flavor(2) = $POSTE_INF, yet inf_initial_from_restart = $POSTE_TF"
+      echo "ERROR: fix input.nml to reflect whether you want posterior inflation or not."
+      exit 5
+   endif
+
+   # Look for the output from the previous assimilation
+   (ls -rt1 ../${POSTE_INF_OFNAME}.* | tail -1 >! latestfile) > & /dev/null
+   set nfiles = `cat latestfile | wc -l`
+
+   # If one exists, use it as input for this assimilation
+   if ( $nfiles > 0 ) then
+      set latest = `cat latestfile`
+      ${LINK} $latest ${POSTE_INF_IFNAME}
+   else
+      echo "ERROR: Requested POSTERIOR inflation but specified no incoming POSTERIOR inflation file."
+      echo "ERROR: expected something like ../${POSTE_INF_OFNAME}.YYYY-MM-DD-SSSSS"
+      exit 6
+   endif
+else
+   echo "Posterior Inflation not requested for this assimilation."
+endif
+
+#-------------------------------------------------------------------------
+# Block 1: convert N cam restart files to DART initial conditions file(s)
+# cam_to_dart is serial code, we can do all of these at the same time
+# and just wait for them to finish IFF it were not for the fact we'd have
+# to have unique namelists for all of them.
+#
+# At the end of the block, we have DART restart files  filter_ic_old.[1-N]
+# that came from pointer files ../rpointer.atm_[1-N]
+#
+# DART namelist settings appropriate/required:
+# &filter_nml:           restart_in_file_name    = 'filter_ic_old'
+# &ensemble_manager_nml: single_restart_file_in  = '.false.'
+# &cam_to_dart_nml:      cam_to_dart_output_file = 'dart_ics',
+#-------------------------------------------------------------------------
+
+set member = 1
+while ( ${member} <= ${ensemble_size} )
+
+   # Each member will do its job in its own directory.
+   # That way, we can do N of them simultaneously -
+   # they all read their OWN 'input.nml' ... the output
+   # filenames must inserted into the appropriate input.nml
+
+   set MYTEMPDIR = member_${member}
+   mkdir -p $MYTEMPDIR
+   cd $MYTEMPDIR
+
+   set POINTER_FILENAME = `printf rpointer.atm_%04d ${member}`
+   set MODEL_RESTART_FILENAME = `head -1 ../../${POINTER_FILENAME}`
+   set MODEL_INITIAL_FILENAME = `echo ${MODEL_RESTART_FILENAME} | sed "s#\.r\.#\.i\.#"`
+   ${LINK} ../../$MODEL_INITIAL_FILENAME caminput.nc
+   ${LINK} ../cam_phis.nc .
+
+   # TJH can we use a .h0. file instead of some arbitrary cam_phis.nc
+
+   set DART_IC_FILE = `printf ../filter_ic_old.%04d ${member}`
+
+   sed -e "s#dart_ics#${DART_IC_FILE}#" < ../input.nml >! input.nml
+
+   echo "starting cam_to_dart for member ${member} at "`date`
+   ../cam_to_dart >! output.${member}.cam_to_dart &
+   echo "finished cam_to_dart for member ${member} at "`date`
+
+   cd ..
+
+   @ member++
+end
+
+wait
+
+#-------------------------------------------------------------------------
+# Block 2: Actually run the assimilation.
+# Will result in a set of files : 'filter_restart.xxxx'
+#
+# DART namelist settings required:
+# &filter_nml:           async                  = 0,
+# &filter_nml:           adv_ens_command        = "./no_model_advance.csh",
+# &filter_nml:           restart_in_file_name   = 'filter_ic_old'
+# &filter_nml:           restart_out_file_name  = 'filter_ic_new'
+# &filter_nml:           obs_sequence_in_name   = 'obs_seq.out'
+# &filter_nml:           obs_sequence_out_name  = 'obs_seq.final'
+# &filter_nml:           init_time_days         = -1,
+# &filter_nml:           init_time_seconds      = -1,
+# &filter_nml:           first_obs_days         = -1,
+# &filter_nml:           first_obs_seconds      = -1,
+# &filter_nml:           last_obs_days          = -1,
+# &filter_nml:           last_obs_seconds       = -1,
+# &ensemble_manager_nml: single_restart_file_in = .false.
+#
+#-------------------------------------------------------------------------
+
+# cam always needs a cam_initial.nc and a cam_history.nc to start.
+
+set MODEL_RESTART_FILENAME = `head -1 ../rpointer.atm_0001`
+set MODEL_INITIAL_FILENAME = `echo ${MODEL_RESTART_FILENAME} | sed "s#\.r\.#\.i\.#"`
+set MODEL_HISTORY_FILENAME = `echo ${MODEL_RESTART_FILENAME} | sed "s#\.r\.#\.h0\.#"`
+
+${LINK} ../$MODEL_INITIAL_FILENAME caminput.nc
+#${LINK} ../$MODEL_RESTART_FILENAME cam_restart.nc
+#${LINK} ../$MODEL_HISTORY_FILENAME cam_history.nc
+
+# stage the proper observation sequence file.
+
+set OBSFNAME = `printf obs_seq${MODEL_YEAR}${MODEL_MONTH}${MODEL_DAY}%02d ${MODEL_HOUR}`
+set OBS_FILE = ${OBSDIR}/${OBSFNAME}
+
+${LINK} ${OBS_FILE} obs_seq.out
+
+mpirun.lsf ./filter || exit 7
+
+${MOVE} Prior_Diag.nc      ../Prior_Diag.${MODEL_DATE_EXT}.nc
+${MOVE} Posterior_Diag.nc  ../Posterior_Diag.${MODEL_DATE_EXT}.nc
+${MOVE} obs_seq.final      ../obs_seq.${MODEL_DATE_EXT}.final
+${MOVE} dart_log.out       ../dart_log.${MODEL_DATE_EXT}.out
+
+# Accomodate any possible inflation files
+# 1) rename file to reflect current date
+# 2) move to CENTRALDIR so the DART INFLATION BLOCK works next time and
+#    that they can get archived.
+
+foreach FILE ( ${PRIOR_INF_OFNAME} ${POSTE_INF_OFNAME} ${PRIOR_INF_DIAG} ${POSTE_INF_DIAG} )
+   if ( -e ${FILE} ) then
+      ${MOVE} ${FILE} ../${FILE}.${MODEL_DATE_EXT}
+   else
+      echo "No ${FILE} for ${MODEL_DATE_EXT}"
+   endif
+end
+
+#-------------------------------------------------------------------------
+# Block 3: Update the cam restart files ... simultaneously ...
+#
+# DART namelist settings required:
+# &filter_nml:           restart_out_file_name  = 'filter_ic_new'
+# &ensemble_manager_nml: single_restart_file_in = '.false.'
+# &dart_to_cam_nml:      dart_to_cam_input_file = 'temp_ic',
+# &dart_to_cam_nml:      advance_time_present   = .false.
+# &atm_in_xxxx:ncdata = 'cam_initial_x.nc'
+#-------------------------------------------------------------------------
+
+set member = 1
+while ( ${member} <= ${ensemble_size} )
+
+   # Each member will do its job in its own directory.
+   # After they are all done, we can move them.
+
+   set MYTEMPDIR = member_${member}
+   mkdir -p $MYTEMPDIR
+   cd $MYTEMPDIR
+
+   set DART_RESTART_FILE = `printf filter_ic_new.%04d ${member}`
+   ${LINK} ../$DART_RESTART_FILE temp_ic
+
+   set ATM_POINTER_FILENAME = `printf rpointer.atm_%04d ${member}`
+   set LND_POINTER_FILENAME = `printf rpointer.lnd_%04d ${member}`
+   set ICE_POINTER_FILENAME = `printf rpointer.ice_%04d ${member}`
+
+   set ATM_RESTART_FILENAME = `head -1 ../../${ATM_POINTER_FILENAME}`
+   set LND_RESTART_FILENAME = `echo ${ATM_RESTART_FILENAME} | sed "s#\.cam_#\.clm2_#"`
+   set ICE_RESTART_FILENAME = `echo ${ATM_RESTART_FILENAME} | sed "s#\.cam_#\.cice_#"`
+
+   set ATM_INITIAL_FILENAME = `echo ${ATM_RESTART_FILENAME} | sed "s#\.r\.#\.i\.#"`
+
+   ${LINK} ../../$ATM_INITIAL_FILENAME caminput.nc
+
+   echo "starting dart_to_cam for member ${member} at "`date`
+   ../dart_to_cam >! output.${member}.dart_to_cam &
+   echo "finished dart_to_cam for member ${member} at "`date`
+
+   cd ..
+
+   @ member++
+end
+
+wait
+
+#-------------------------------------------------------------------------
+# Block 4: The cam files have now been updated, move them into position.
+#-------------------------------------------------------------------------
+
+set member = 1
+while ( ${member} <= ${ensemble_size} )
+
+   cd member_${member}
+
+   set ATM_POINTER_FILENAME = `printf rpointer.atm_%04d ${member}`
+   set LND_POINTER_FILENAME = `printf rpointer.lnd_%04d ${member}`
+   set ICE_POINTER_FILENAME = `printf rpointer.ice_%04d ${member}`
+
+   set ATM_RESTART_FILENAME = `head -1 ../../${ATM_POINTER_FILENAME}`
+   set LND_RESTART_FILENAME = `echo ${ATM_RESTART_FILENAME} | sed "s#\.cam_#\.clm2_#"`
+   set ICE_RESTART_FILENAME = `echo ${ATM_RESTART_FILENAME} | sed "s#\.cam_#\.cice_#"`
+
+   set ATM_INITIAL_FILENAME = `echo ${ATM_RESTART_FILENAME} | sed "s#\.r\.#\.i\.#"`
+
+   ${COPY} ../../$ATM_INITIAL_FILENAME ../../cam_initial_${member}.nc
+   ${COPY} ../../$LND_RESTART_FILENAME ../../clm_restart_${member}.nc
+   ${COPY} ../../$ICE_RESTART_FILENAME ../../ice_restart_${member}.nc
+
+   cd ..
+
+   @ member++
+end
+
+#-------------------------------------------------------------------------
+# Now that everything is staged, we have to communicate the current
+# model time to the drv_in&seq_timemgr_inparm namelist
+# which is built from CASEROOT/user_nl_drv by the *.run script
+#-------------------------------------------------------------------------
+
+ex ${CASEROOT}/Buildconf/cpl.buildnml.csh << ex_end
+g; start_ymd;s;=[ ]*.*;= ${MODEL_YEAR}${MODEL_MONTH}${MODEL_DAY};
+g; start_tod;s;=[ ]*.*;= $MODEL_SECONDS;
+wq
+ex_end
+
+#-------------------------------------------------------------------------
+# Cleanup
+#-------------------------------------------------------------------------
+
+exit 0
+
+# <next few lines under version control, do not edit>
+# $URL$
+# $Revision$
+# $Date$
+


Property changes on: DART/branches/development/models/cam/shell_scripts/assimilate.Fzagar.csh
___________________________________________________________________
Added: svn:executable
   + *
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author HeadURL Id
Added: svn:eol-style
   + native


More information about the Dart-dev mailing list