#! /bin/sh #+ # # .. program:: tropflux.sh # # .. _tropflux.sh: # # =========== # tropflux.sh # =========== # # SYNOPSIS # ======== # # :: # # $ tropflux.sh -b yyyymmdd -e yyyymmdd # # DESCRIPTION # =========== # # Run all needed :file:`*.pro` to create the TropFlux dataset between two dates # # We suppose here that all inputs data are already available localy. # # .. option:: -b beginning date # .. option:: -e end date # # Some IDL programs are launched here using ${IDL_CMD} command # (see :ref:`project_profile.sh` to know how to set this environnement variable). # # Log file is written on # :file:`${PROJECT_LOG}/tropflux.log.{YYYYMMDDTHHMMSSZ}` # # .. only:: man # # Figure is visible on PDF and HTML documents only. # # .. only:: html or latex # # .. graphviz:: # # digraph tropflux { # # file_oaflux [shape=ellipse,fontname=Courier,label="${PROJECT_ID}/lh_oaflux_2004.nc"]; # log [shape=ellipse,fontname=Courier,label="${PROJECT_LOG}/tropflux.log{YYYYMMDDTHHMMSSZ}"]; # # tropflux [shape=box, # fontname=Courier, # color=blue, # URL="http://forge.ipsl.jussieu.fr/tropflux/browser/trunk/src/tropflux.sh", # label="${PROJECT}/src/tropflux.sh"]; # # {file_oaflux} -> {tropflux} -> {log fileout} # # } # # EXAMPLES # ======== # # You already used :ref:`get_erai.sh` to get ERAI data, etc., # during [20060801, 20060802[ and you want to produce NetCDF files:: # # $ tropflux.sh -b 20060801 -e 20060802 # # And look at log file with :: # # $ tlogd.sh tropflux # # and of course on files in ${PROJECT_ID}. # # SEE ALSO # ======== # # IDL_ # # .. _IDL: http://www.ittvis.com/ProductServices/IDL.aspx # # :ref:`project_profile.sh` # :ref:`project_init.pro` # # Previous step : :ref:`get_erai.sh`, :ref:`get_oaflux.sh`, :ref:`get_olr.sh`, # :ref:`get_pirata_netcdf.sh`, :ref:`get_swr.sh` # # Use : # :func:`oaflux_mask_30n30s`, :ref:`inter_erai_t2m_1989_2009.pro`, etc. # # Next step : +validation ++ comparison # # .. todo:: # # TODO # ==== # # make it work # # idl status = 0 even if not ok # # test if demo mode idl # # EVOLUTIONS # ========== # # $Id$ # # $URL$ # # - pinsard 20120305 # # * creation (draft) # * handling error of oaflux_mask_30n30s (now a function) # #- system=$(uname) case "${system}" in AIX|IRIX64) echo "${command} : www : no specific posix checking" date_cmd=date ;; Darwin) set -o posix date_cmd=gdate ;; Linux) set -o posix date_cmd=date ;; *) set -o posix ;; esac unset system # set -u # LANG=POSIX # command=$(basename ${0}) log_date=$(date -u +"%Y%m%dT%H%M%SZ") # usage=" Usage : ${command} [-f] -b yyyymmdd -e yyyymmdd" # hostname=$(hostname) # yyyymmddb_min=19790101 yyyymmdde_max=20110930 # # default debug=0 yyyymmddb=20060420 yyyymmdde=20060420 # minargcount=4 if [ ${#} -lt ${minargcount} ] then echo "${command} : eee : not enought arguments" echo "${usage}" exit 1 fi unset minargcount # while [ ${#} -gt 0 ] do case ${1} in -b) # first date to process yyyymmddb=${2} shift ;; -e) # last date to process yyyymmdde=${2} shift ;; -h) echo "${usage}" exit 0 ;; *) # other choice echo "${command} : eee : unknown option ${1}" echo "${usage}" exit 1 ;; esac # next flag shift done unset usage # # check parameters # and define associated variables ${date_cmd} -d "${yyyymmddb}" > /dev/null status_date=${?} if [ ${status_date} -ne 0 ] then echo "${command} : eee : yyyymmddb ${yyyymmddb} argument invalid" exit 1 fi unset status_date # if [[ "${yyyymmddb}" < "${yyyymmddb_min}" ]] then echo "${command} : eee : yyyymmddb ${yyyymmddb} must be equal or greater than yyyymmddb_min ${yyyymmddb_min}" exit 1 fi # ${date_cmd} -d "${yyyymmdde}" > /dev/null status_date=${?} if [ ${status_date} -ne 0 ] then echo "${command} : eee : yyyymmdde ${yyyymmdde} argument invalid" exit 1 fi unset status_date # if [[ "${yyyymmdde}" > "${yyyymmdde_max}" ]] then echo "${command} : eee : yyyymmdde ${yyyymmdde} must be lower or equal to yyyymmdde_max ${yyyymmdde_max}" exit 1 fi # if [[ "${yyyymmdde}" < "${yyyymmddb}" ]] then echo "${command} : eee : yyyymmdde ${yyyymmdde} must be greater than yyyymmddb ${yyyymmddb}" exit 1 fi # if [[ "${yyyymmdde}" = "${yyyymmddb}" ]] then echo "${command} : eee : yyyymmdde ${yyyymmdde} must be greater than yyyymmddb ${yyyymmddb}" exit 1 fi # tool=${IDL_CMD} type ${tool} 1> /dev/null 2>&1 status=${?} if [ ${status} -ne 0 ] then echo "${command} : eee : tool ${IDL_CMD} not found" echo "${command} : eee : check project_profile.sh sequence" exit 1 fi unset status unset tool # # check for write permission on PROJECT_LOG if [ ! -w ${PROJECT_LOG} ] then echo "${command} : eee : ${PROJECT_LOG} not writable" exit 1 fi # log=${PROJECT_LOG}/$(basename ${0} .sh).log.${log_date} echo "[Context]" 1>> ${log} echo "command=$(basename ${0})" 1>>${log} echo "hostname=${hostname}" 1>> ${log} echo "runtime=${log_date}" 1>> ${log} echo "IDL_CMD=${IDL_CMD}" 1>> ${log} unset log_date echo "" 1>> ${log} echo "[Parameters]" 1>> ${log} echo "yyyymmddb=${yyyymmddb}" 1>> ${log} echo "yyyymmdde=${yyyymmdde}" 1>> ${log} echo "" 1>> ${log} # cat >> ${PROJECT}/src/tropflux_${$}.pro << EOF .compile file_interp result = oaflux_mask_30n30s() if (result NE 0) THEN BEGIN msg = 'eee : pb after oaflux_mask_30n30s' err = report(msg) exit ENDIF ;interp_erai_dewt_1989_2009 ;interp_erai_lwr_1989_2009 ;interp_erai_msl_1989_2009 ;interp_erai_sst_1989_2009 ;interp_erai_t2m_1989_2009 ;interp_erai_ws_1989_2009 ;interp_olr_30n30s_1989_2009 d2m_to_q2m_erai ;++Program caused arithmetic error: Floating overflow ;++ Program caused arithmetic error: Floating illegal operand .compile TropFlux_swr_DT_19890101_20071231 tropflux_swr_dt_19890101_20071231 .compile TropFlux_swr_NRT_19890101_20091231 tropflux_swr_nrt_19890101_20091231 .compile TropFlux_swr_BLND_19890101_20091231 tropflux_swr_blnd_19890101_20091231 lwr_correction_ncdf q2m_correction_ncdf sst_correction_ncdf t2m_correction_ncdf ws_correction_ncdf cronin_gustiness_ncdf .compile TropFlux_19890101_20091231 tropflux_19890101_20091231 .compile TropFlux_NRT_ncdf tropflux_nrt_ncdf exit EOF # # run IDL or equivalent ${IDL_CMD} << EOF >> ${log} 2>&1 @tropflux_${$} EOF status=${?} if [ ${status} -ne 0 ] then echo "${command} : eee: ${IDL_CMD} failed : ${status}" >> ${log} 2>&1 cat ${PROJECT}/src/tropflux_${$}.pro >> ${log} 2>&1 exit 1 fi rm ${PROJECT}/src/tropflux_${$}.pro unset status # unset command unset log unset hostname unset usage # unset date_cmd # # end #++set exit