예제 #1
0
def transfer_ec():
    """ Unsmoothed transfer from CALSIM file to model input file.
    """
    
    f=opendss(getAttr("CALSIMFILE"))           # open CALSIM file
    outfile=getAttr("BOUNDARYFILE")
    process=getAttr("SJR_PROCESS")
    if not outfile or outfile == "":
        raise "Config variable BOUNDARYFILE not set and needed for prepro output"    
    tw=prepro_window()
    calsimstudy=calsim_study_fpart(modify=0)
    calsimstudyout=calsim_study_fpart(modify=1)
    if not calsimstudy or calsimstudy=="":
        print "CALSIMSTUDY envvar not set"
    dsspath="/CALSIM.*/VERNWQFINAL/SALINITY-EC//1MON/%s/" % calsimstudy
    processedpath=dsspath.replace(".*","-"+process).replace(
        "1MON","1DAY").replace(calsimstudy,calsimstudyout)
    print processedpath
    refs=findpath(f,dsspath)
    if not refs or len(refs)> 1:
        raise "Vernalis EC path %s not found or not unique" % dsspath
    ref=DataReference.create(refs[0],tw)
    monthly=ref.getData()
    daily=interpolate(monthly,"1DAY")
    
    if daily:
        writedss(outfile,processedpath, daily)
    else:
        raise "Failure to find CALSIM input data for: " + calsimname 
    return
def extend_flow(nodes_to_extend):
    """ Copying WY1922 data to WY1921 for allowing to preprocessing and running DSM2
        from 01Jan1921.
    """
    calsimfile=getAttr("CALSIMFILE") 
    f=opendss(calsimfile)           # open CALSIM file
    outfile=getAttr("BOUNDARYFILE")
    if not outfile or outfile == "":
        raise "Config variable BOUNDARYFILE not set and needed for prepro output"    
    tw=timewindow("01OCT1921 0000 - 01OCT1922 0000")

    for calsimname in nodes_to_extend:    
        print calsimname
        dsspath = calsim_path(calsimname)
        paths = findpath(f,dsspath)
        if not paths or len(paths)>1:
            print "File: %s" % calsimfile
            raise "Path %s not found or not unique" % dsspath
        ref=DataReference.create(paths[0],tw)
        monthly=ref.getData()

        itr = monthly.getIterator()
        d=zeros(len(monthly),'d')
        count=0
        while not itr.atEnd():
           el = itr.getElement()
           d[count] = el.getY()
           count = count + 1
           itr.advance()
        stime = "01OCT1920 0000" 
        rts = RegularTimeSeries(monthly.getName(),stime, \
              timeinterval("1MON").toString(), d, None, monthly.getAttributes())
        writedss(calsimfile,ref.getPathname().toString(),rts)
def txfr_flow_day(nodes_to_txfr_day):
    """ Unsmoothed transfer from CALSIM file to model input file.
    """
    calsimfile = getAttr("CALSIMFILE")
    f = opendss(calsimfile)  # open CALSIM file
    outfile = getAttr("BOUNDARYFILE")
    if not outfile or outfile == "":
        raise "Config variable BOUNDARYFILE not set and needed for prepro output"
    tw = prepro_window()

    for calsimname in nodes_to_txfr_day:  # Extend the list as needed
        mf = calsim_study_fpart(modify=1)
        dsspath = calsim_path(calsimname)
        dsspath1 = calsim_path(calsimname, modified_fpart=mf)
        processedpath = dsspath1.replace("1MON", "1DAY")
        print dsspath
        print processedpath
        paths = findpath(f, dsspath)
        if not paths or len(paths) > 1:
            print "File: %s" % calsimfile
            raise "Path %s not found or not unique" % dsspath
        ref = DataReference.create(paths[0], tw)
        monthly = ref.getData()
        daily = interpolate(monthly, "1DAY")
        if daily:
            writedss(outfile, processedpath, daily)
        else:
            raise "Failure to find CALSIM input data for: " + calsimname
예제 #4
0
def dccOp(infile,outfile,inpath,outpath,allThirty=1,value=1.0,
          tw="01OCT1974 0000 - 01OCT1991 0000"):
  """
  Converts Delta Cross Channel gate operation
  from a CALSIM file containing fraction of days open
  Args:
    infile        CALSIM dss file specifying # days operating
    outfile       output dss file readable by DSM2
    inpath        input path, e.g. /CALSIM/DXC/GATE-DAYS-OPEN//1MON//
    outpath       output path, e.g. /CALSIM/DXC/GATE//IR-YEAR/fpart/ 
    value         time series value when gate is opened (must be 1.0 or 2.0),
                  where 1.0 is used for gate ops and 2.0 is number gates operating.
    tw            time window of output
    allThirty     true if CALSIM input is hardwired to thirty day months
  """  
  from vutils import timewindow
  from vdss import opendss,findpath,writedss
  from vista.time import TimeWindow
  from vista.set import DataReference
  import types
  g=opendss(infile)
  if not (type(outfile) == types.StringType):
    raise TypeError("Argument outfile should be name of a dss file")
  if not isinstance(tw,TimeWindow):
    tw = timewindow(tw)
  if not (value==1.0 or value==2.0):
    raise "Output time series 'on' value should be 1.0 (gate op) or 2.0 (gates operating)"
  x=findpath(g,inpath)[0]
  dxcref = DataReference.create(findpath(g,inpath)[0],tw)
  dxc=dxcref.getData()
  if not dxc:
    raise "Cross channel data not found"
  dxcITS=daysPerMonthToITS(dxc,value,allThirty)
  writedss(outfile,outpath,dxcITS)
  return dxcITS
def transfer_flow(nodes_to_transfer):
    """ Unsmoothed transfer from CALSIM file to model input file.
    """
    calsimfile = getAttr("CALSIMFILE")
    f = opendss(calsimfile)  # open CALSIM file
    outfile = getAttr("BOUNDARYFILE")
    if not outfile or outfile == "":
        raise "Config variable BOUNDARYFILE not set and needed for prepro output"
    tw = prepro_window()

    for calsimname in nodes_to_transfer:  # Extend the list as needed, but please keep in mind the
        # limitations of the conservative spline, at least at present.
        # Mainly, input flows should be substantially greater than
        # zero at all times (yolo would be inappropriate, for instance)
        dsspath = calsim_path(calsimname)
        paths = findpath(f, dsspath)
        if not paths or len(paths) > 1:
            print "File: %s" % calsimfile
            raise "Path %s not found or not unique" % dsspath
        ref = DataReference.create(paths[0], tw)
        monthly = ref.getData()
        mf = calsim_study_fpart(modify=1)
        dsspath = calsim_path(calsimname, modified_fpart=mf)
        if monthly:
            writedss(outfile, dsspath, monthly)

        else:
            raise "Failure to find CALSIM input data for: " + calsimname
예제 #6
0
def transfer_flow(nodes_to_transfer):
    """ Unsmoothed transfer from CALSIM file to model input file.
    """
    calsimfile = getAttr("CALSIMFILE")
    f = opendss(calsimfile)  # open CALSIM file
    outfile = getAttr("BOUNDARYFILE")
    if not outfile or outfile == "":
        raise "Config variable BOUNDARYFILE not set and needed for prepro output"
    tw = prepro_window()

    for calsimname in nodes_to_transfer:  # Extend the list as needed, but please keep in mind the
        # limitations of the conservative spline, at least at present.
        # Mainly, input flows should be substantially greater than
        # zero at all times (yolo would be inappropriate, for instance)
        dsspath = calsim_path(calsimname)
        paths = findpath(f, dsspath)
        if not paths or len(paths) > 1:
            print "File: %s" % calsimfile
            raise "Path %s not found or not unique" % dsspath
        ref = DataReference.create(paths[0], tw)
        monthly = ref.getData()
        mf = calsim_study_fpart(modify=1)
        dsspath = calsim_path(calsimname, modified_fpart=mf)
        if monthly:
            writedss(outfile, dsspath, monthly)

        else:
            raise "Failure to find CALSIM input data for: " + calsimname
예제 #7
0
def extend_flow(nodes_to_extend):
    """ Copying WY1922 data to WY1921 for allowing to preprocessing and running DSM2
        from 01Jan1921.
    """
    calsimfile = getAttr("CALSIMFILE")
    f = opendss(calsimfile)  # open CALSIM file
    outfile = getAttr("BOUNDARYFILE")
    if not outfile or outfile == "":
        raise "Config variable BOUNDARYFILE not set and needed for prepro output"
    tw = timewindow("01OCT1921 0000 - 01OCT1922 0000")

    for calsimname in nodes_to_extend:
        print calsimname
        dsspath = calsim_path(calsimname)
        paths = findpath(f, dsspath)
        if not paths or len(paths) > 1:
            print "File: %s" % calsimfile
            raise "Path %s not found or not unique" % dsspath
        ref = DataReference.create(paths[0], tw)
        monthly = ref.getData()

        itr = monthly.getIterator()
        d = zeros(len(monthly), 'd')
        count = 0
        while not itr.atEnd():
            el = itr.getElement()
            d[count] = el.getY()
            count = count + 1
            itr.advance()
        stime = "01OCT1920 0000"
        rts = RegularTimeSeries(monthly.getName(),stime, \
              timeinterval("1MON").toString(), d, None, monthly.getAttributes())
        writedss(calsimfile, ref.getPathname().toString(), rts)
def sjr_sac(sjr_in, sac_in):
    calsimfile = getAttr("CALSIMFILE")
    f = opendss(calsimfile)  # open CALSIM file
    tw = prepro_window()

    sjr_path = calsim_path("C639")
    sjr_ret_path = calsim_path("R644")
    sjr_ref = findpath(f, sjr_path)
    if not sjr_ref:
        raise "San Joaquin path %s not found" % sjr_path
    sjr_ret_ref = findpath(f, sjr_ret_path)
    if not sjr_ret_ref:
        raise "San Joaquin return flow path %s not found" % sjr_ret_path
    sjr = DataReference.create(sjr_ref[0], tw).getData()
    sjr_ret = DataReference.create(sjr_ret_ref[0], tw).getData()
    sjr_in = sjr + sjr_ret

    sac_path = calsim_path("C169")
    frwa_div1_path = calsim_path("D168B")
    frwa_div2_path = calsim_path("D168C")
    sac_ref = findpath(f, sac_path)
    if not sac_ref:
        raise "Sacramento path %s not found" % sac_path
    frwa_div1_ref = findpath(f, frwa_div1_path)
    if not frwa_div1_ref:
        raise "Freeport Regional Water Authority Diversion path %s not found" % frwa_div1_path
    frwa_div2_ref = findpath(f, frwa_div2_path)
    if not frwa_div2_ref:
        raise "Freeport Regional Water Authority Diversion path %s not found" % frwa_div2_path
    sac = DataReference.create(sac_ref[0], tw).getData()
    frwa_div1 = DataReference.create(frwa_div1_ref[0], tw).getData()
    frwa_div2 = DataReference.create(frwa_div2_ref[0], tw).getData()
    sac_in = sac + frwa_div1 + frwa_div2
    return
예제 #9
0
def moke_consumnes():
    calsimfile = getAttr("CALSIMFILE")
    f = opendss(calsimfile)  # open CALSIM file
    outfile = getAttr("BOUNDARYFILE")
    if not outfile or outfile == "":
        raise "Config variable BOUNDARYFILE not set and needed for prepro output"
    tw = prepro_window()

    moke_us_path = calsim_path("I504")
    moke_ref = findpath(f, moke_us_path)
    if (moke_ref and len(moke_ref) > 0):
        print "Upstream mokelumne flow found, not calculated"

    consumnes_path = calsim_path("C501")
    moke_ds_path = calsim_path("C504")
    consumnes_ref = findpath(f, consumnes_path)
    if not consumnes_ref:
        raise "Consumnes path %s not found" % consumnes_path
    moke_ds_ref = findpath(f, moke_ds_path)
    if not moke_ds_ref:
        raise "Mokulemne downstream path %s not found" % moke_ds_path
    consumnes = DataReference.create(consumnes_ref[0], tw).getData()
    moke_ds = DataReference.create(moke_ds_ref[0], tw).getData()
    mf = calsim_study_fpart(modify=1)
    moke_us_path = calsim_path("I504", mf)
    moke_us = moke_ds - consumnes

    writedss(outfile, moke_us_path, moke_us)
    return
def moke_consumnes():
    calsimfile = getAttr("CALSIMFILE")
    f = opendss(calsimfile)  # open CALSIM file
    outfile = getAttr("BOUNDARYFILE")
    if not outfile or outfile == "":
        raise "Config variable BOUNDARYFILE not set and needed for prepro output"
    tw = prepro_window()

    moke_us_path = calsim_path("I504")
    moke_ref = findpath(f, moke_us_path)
    if moke_ref and len(moke_ref) > 0:
        print "Upstream mokelumne flow found, not calculated"

    consumnes_path = calsim_path("C501")
    moke_ds_path = calsim_path("C504")
    consumnes_ref = findpath(f, consumnes_path)
    if not consumnes_ref:
        raise "Consumnes path %s not found" % consumnes_path
    moke_ds_ref = findpath(f, moke_ds_path)
    if not moke_ds_ref:
        raise "Mokulemne downstream path %s not found" % moke_ds_path
    consumnes = DataReference.create(consumnes_ref[0], tw).getData()
    moke_ds = DataReference.create(moke_ds_ref[0], tw).getData()
    mf = calsim_study_fpart(modify=1)
    moke_us_path = calsim_path("I504", mf)
    moke_us = moke_ds - consumnes

    writedss(outfile, moke_us_path, moke_us)
    return
예제 #11
0
def sjr_sac(sjr_in, sac_in):
    calsimfile = getAttr("CALSIMFILE")
    f = opendss(calsimfile)  # open CALSIM file
    tw = prepro_window()

    sjr_path = calsim_path("C639")
    sjr_ret_path = calsim_path("R644")
    sjr_ref = findpath(f, sjr_path)
    if not sjr_ref:
        raise "San Joaquin path %s not found" % sjr_path
    sjr_ret_ref = findpath(f, sjr_ret_path)
    if not sjr_ret_ref:
        raise "San Joaquin return flow path %s not found" % sjr_ret_path
    sjr = DataReference.create(sjr_ref[0], tw).getData()
    sjr_ret = DataReference.create(sjr_ret_ref[0], tw).getData()
    sjr_in = sjr + sjr_ret

    sac_path = calsim_path("C169")
    frwa_div1_path = calsim_path("D168B")
    frwa_div2_path = calsim_path("D168C")
    sac_ref = findpath(f, sac_path)
    if not sac_ref:
        raise "Sacramento path %s not found" % sac_path
    frwa_div1_ref = findpath(f, frwa_div1_path)
    if not frwa_div1_ref:
        raise "Freeport Regional Water Authority Diversion path %s not found" % frwa_div1_path
    frwa_div2_ref = findpath(f, frwa_div2_path)
    if not frwa_div2_ref:
        raise "Freeport Regional Water Authority Diversion path %s not found" % frwa_div2_path
    sac = DataReference.create(sac_ref[0], tw).getData()
    frwa_div1 = DataReference.create(frwa_div1_ref[0], tw).getData()
    frwa_div2 = DataReference.create(frwa_div2_ref[0], tw).getData()
    sac_in = sac + frwa_div1 + frwa_div2
    return
예제 #12
0
def txfr_flow_day(nodes_to_txfr_day):
    """ Unsmoothed transfer from CALSIM file to model input file.
    """
    calsimfile = getAttr("CALSIMFILE")
    f = opendss(calsimfile)  # open CALSIM file
    outfile = getAttr("BOUNDARYFILE")
    if not outfile or outfile == "":
        raise "Config variable BOUNDARYFILE not set and needed for prepro output"
    tw = prepro_window()

    for calsimname in nodes_to_txfr_day:  # Extend the list as needed
        mf = calsim_study_fpart(modify=1)
        dsspath = calsim_path(calsimname)
        dsspath1 = calsim_path(calsimname, modified_fpart=mf)
        processedpath = dsspath1.replace("1MON", "1DAY")
        print dsspath
        print processedpath
        paths = findpath(f, dsspath)
        if not paths or len(paths) > 1:
            print "File: %s" % calsimfile
            raise "Path %s not found or not unique" % dsspath
        ref = DataReference.create(paths[0], tw)
        monthly = ref.getData()
        daily = interpolate(monthly, "1DAY")
        if daily:
            writedss(outfile, processedpath, daily)
        else:
            raise "Failure to find CALSIM input data for: " + calsimname
예제 #13
0
def dss_retrieve_ts(file, path):
    f = opendss(file)
    g = findpath(f, path)
    if g == None or len(g) != 1:
        raise ValueError("Path %s in file s% does not exist or is not unique" %
                         (path, file))
    return g[0].getData()
예제 #14
0
 def test_findparts(self):
     g=vdss.opendss(self.file1)
     gx=vdss.findparts(g, a='EX1')
     self.assertTrue(gx==None)
     gx=vdss.findparts(g, a='VISTA-EX1')
     self.assertTrue(len(gx)>0)
     gx=vdss.findparts(g, a='EX1',exact=False)
     self.assertTrue(len(gx)>0)
예제 #15
0
 def test_findpath(self):
     g=vdss.opendss(self.file1)
     gx=vdss.findpath(g, '/VISTA-EX1/////')
     self.assertTrue(len(gx) > 1)
     gx=vdss.findpath(g,'/EX1/////COS/',False)
     self.assertTrue(len(gx)==1)
     gx=vdss.findpath(g,'//////COS/',False)
     self.assertTrue(len(gx)==1)
     gx=vdss.findpath(g,'//////COS/',True)
     self.assertTrue(gx==None)
예제 #16
0
def prep_ndo(calsimf, dss_step, dss_fpart, twstr):
    ndofile = opendss(calsimf)
    TWIND = timewindow(twstr)
    ndo = DataReference.create(
        findpath(ndofile, "/CALSIM/NDO/FLOW-NDO//" + dss_step + "/" +
                 dss_fpart + "/")[0], TWIND).getData()
    ndo15 = conserve.conserveSpline(ndo, "15MIN")
    ndo15.getAttributes().setYUnits("CFS")
    ndo15.getAttributes().setYType("PER-AVER")
    writedss(calsimf, "/CALSIM/NDO/FLOW-NDO//15MIN/" + dss_fpart + "/", ndo15)
    return 0
예제 #17
0
def prep_dicu(infile,outfile,tw):
    from vdss import opendss,writedss,findpath
    if (not infile): raise TypeError("infile was None")
    if (not outfile): raise TypeError("outfile was None")    
    if (not infile.endswith("dss") and outfile.endswith("dss")):
        raise "infile and outfile arguments must be a dss file"
    g=opendss(infile)
    all=findpath(g,"///DRAIN-EC////")
    for i in range(len(all)):
        ts=all[i].getData()
        s=expand_seasonal(ts,tw)
        writedss(outfile,all[i].getPathname().toString(),s)
예제 #18
0
def prep_dicu(infile, outfile, tw):
    from vdss import opendss, writedss, findpath
    if (not infile): raise TypeError("infile was None")
    if (not outfile): raise TypeError("outfile was None")
    if (not infile.endswith("dss") and outfile.endswith("dss")):
        raise "infile and outfile arguments must be a dss file"
    g = opendss(infile)
    all = findpath(g, "///DRAIN-EC////")
    for i in range(len(all)):
        ts = all[i].getData()
        s = expand_seasonal(ts, tw)
        writedss(outfile, all[i].getPathname().toString(), s)
예제 #19
0
def copy_dicu_flow():
    """ Unsmoothed transfer from DICU file to model input file.
    """
    dicufile=getAttr("DICUFLOWFILE") 
    f=opendss(dicufile)           # open CALSIM file
    outfile=getAttr("DICUFILE")
    if not outfile or outfile == "":
        raise "Config variable BOUNDARYFILE not set and needed for prepro output"    
    tw=prepro_window()

    for item in f : 
        ref=DataReference.create(item,tw)
        data=ref.getData()
        writedss(outfile,ref.getPathname().toString(), data)
예제 #20
0
def dss_retrieve_ts(file, path, *arg):
    f = opendss(file)
    g = findpath(f, path)
    if g == None or len(g) != 1:
        raise ValueError("Path %s in file s% does not exist or is not unique" %
                         (path, file))

    if len(arg) > 1:
        raise ValueError("usage: file, dss_path, time window")
    elif len(arg) == 1:
        twind = timewindow(arg[0])
        return DataReference.create(g[0], twind).getData()
    else:
        return g[0].getData()
예제 #21
0
def copy_dicu_flow():
    """ Unsmoothed transfer from DICU file to model input file.
    """
    dicufile=getAttr("DICUFLOWFILE") 
    f=opendss(dicufile)           # open CALSIM file
    outfile=getAttr("DICUFILE")
    if not outfile or outfile == "":
        raise "Config variable BOUNDARYFILE not set and needed for prepro output"    
    tw=prepro_window()

    for item in f : 
        ref=DataReference.create(item,tw)
        data=ref.getData()
        writedss(outfile,ref.getPathname().toString(), data)
예제 #22
0
 def test_get_ds(self):
     g1=vdss.opendss(self.file1)
     self.assertTrue(g1 != None)
     ref0=g1[0]
     self.assertTrue(ref0 != None)
     path0=ref0.pathname
     self.assertEquals('/VISTA-EX1/COS/FLOW/01JAN1982/5MIN/COS-WAVE/', str(path0))
     tw0=ref0.timeWindow
     self.assertTrue(tw0 != None)
     self.assertTrue('01JAN1982 0005' == tw0.startTime.toString())
     self.assertTrue('01JAN1982 2400' == str(tw0.endTime))
     self.assertTrue(ref0.filename != None)
     ds0=ref0.data
     self.assertTrue(ds0 != None)
예제 #23
0
def copy_stage():
    """ Unsmoothed transfer from DICU file to model input file.
    """
    sourcefile = getAttr("STAGE_SOURCE_FILE")
    f = opendss(sourcefile)
    outfile = getAttr("STAGEFILE")
    stageversion = getAttr("STAGE_VERSION")
    dsspath = "/FILL\+CHAN/RSAC054/STAGE//15MIN/%s/" % stageversion
    if not outfile or outfile == "":
        raise "Config variable BOUNDARYFILE not set and needed for prepro output"
    tw = prepro_window()
    ref = findpath(f, dsspath)
    if len(ref) != 1:
        raise "Stage path not found or not unique. Found refs: %s" % ref
    ref = DataReference.create(ref[0], tw)
    data = ref.getData()
    writedss(outfile, ref.getPathname().toString(), data)
예제 #24
0
def copy_stage():
    """ Unsmoothed transfer from DICU file to model input file.
    """
    sourcefile=getAttr("STAGE_SOURCE_FILE") 
    f=opendss(sourcefile)
    outfile=getAttr("STAGEFILE")
    stageversion=getAttr("STAGE_VERSION")
    dsspath="/FILL\+CHAN/RSAC054/STAGE//15MIN/%s/" % stageversion
    if not outfile or outfile == "":
        raise "Config variable BOUNDARYFILE not set and needed for prepro output"    
    tw=prepro_window()
    ref = findpath(f,dsspath)
    if len(ref) != 1:
        raise "Stage path not found or not unique. Found refs: %s" % ref
    ref=DataReference.create(ref[0],tw)
    data=ref.getData()
    writedss(outfile,ref.getPathname().toString(), data)
예제 #25
0
def net_dicu(dicufile, nodes):
    dicu = opendss(dicufile)
    sum = None
    for n in nodes:
        matches = findparts(dicu, b=str(n))
        if matches == None:
            print 'No matching B part of %s' % n
        else:
            for d in matches:
                if sum == None:
                    sum = d
                else:
                    cpart = d.getPathname().getPart(Pathname.C_PART)
                    if cpart == 'DRAIN-FLOW':
                        sum = sum - d
                    else:
                        sum = sum + d
    return sum
def net_dicu(dicufile,nodes):
    dicu = opendss(dicufile)
    sum=None
    for n in nodes:
        matches=findparts(dicu,b=str(n))
        if matches==None:
            print 'No matching B part of %s'%n
        else:
            for d in matches:
                if sum==None:
                    sum=d
                else:
                    cpart = d.getPathname().getPart(Pathname.C_PART)
                    if cpart == 'DRAIN-FLOW':
                        sum=sum - d
                    else:
                        sum=sum + d
    return sum
def smooth_flow(nodes_to_smooth):
    """ A slightly smoothed version of monthly flows to avoid sharp transitions
        between months. Uses a tension spline.
    """
    calsimfile=getAttr("CALSIMFILE")
    f=opendss(calsimfile)           # open CALSIM file
    outfile=getAttr("BOUNDARYFILE")
    if not outfile or outfile == "":
        raise "Config variable BOUNDARYFILE not set and needed for prepro output"
    fpart_mod=calsim_study_fpart(modify=1)
    
    tw=prepro_window()


    for calsimname in nodes_to_smooth:      # Extend the list as needed, but please keep in mind the
                                            # limitations of the conservative spline, at least at present.
                                            # Mainly, input flows should be substantially greater than
                                            # zero at all times (yolo would be inappropriate, for instance)
        dsspath = calsim_path(calsimname)
        paths=findpath(f,dsspath)
        if not paths or len(paths)>1:
            print "File: %s" % calsimfile
            raise "Path %s not found or not unique" % dsspath
        
        ref=DataReference.create(paths[0],tw)
        monthly=ref.getData()
        if monthly:		
            if len(monthly) < 4:
			    raise "Length of monthly data too short for smoothing. Wrong time window?"
            try:
                daily=conserve.conserveSpline(monthly,"1DAY")
            except:
                print "Failure to smooth path: %s over time window: %s" % (paths[0], tw)
                raise 
                
            daily.getAttributes().setYUnits(Units.CFS)
            writedss(outfile,
                     "/CALSIM-SMOOTH/"+calsimname+"/FLOW/1DAY//" \
                     +fpart_mod+"/",
                     daily)
        else:
            raise "Failure to find CALSIM input data for: " + calsimname 
예제 #28
0
def smooth_flow(nodes_to_smooth):
    """ A slightly smoothed version of monthly flows to avoid sharp transitions
        between months. Uses a tension spline.
    """
    calsimfile = getAttr("CALSIMFILE")
    f = opendss(calsimfile)  # open CALSIM file
    outfile = getAttr("BOUNDARYFILE")
    if not outfile or outfile == "":
        raise "Config variable BOUNDARYFILE not set and needed for prepro output"
    fpart_mod = calsim_study_fpart(modify=1)

    tw = prepro_window()

    for calsimname in nodes_to_smooth:  # Extend the list as needed, but please keep in mind the
        # limitations of the conservative spline, at least at present.
        # Mainly, input flows should be substantially greater than
        # zero at all times (yolo would be inappropriate, for instance)
        dsspath = calsim_path(calsimname)
        paths = findpath(f, dsspath)
        if not paths or len(paths) > 1:
            print "File: %s" % calsimfile
            raise "Path %s not found or not unique" % dsspath

        ref = DataReference.create(paths[0], tw)
        monthly = ref.getData()
        if monthly:
            if len(monthly) < 4:
                raise "Length of monthly data too short for smoothing. Wrong time window?"
            try:
                daily = conserve.conserveSpline(monthly, "1DAY")
            except:
                print "Failure to smooth path: %s over time window: %s" % (
                    paths[0], tw)
                raise

            daily.getAttributes().setYUnits(Units.CFS)
            writedss(outfile,
                     "/CALSIM-SMOOTH/"+calsimname+"/FLOW/1DAY//" \
                     +fpart_mod+"/",
                     daily)
        else:
            raise "Failure to find CALSIM input data for: " + calsimname
예제 #29
0
파일: dcc.py 프로젝트: dwr-psandhu/dsm2
def dccOp(infile,
          outfile,
          inpath,
          outpath,
          allThirty=1,
          value=1.0,
          tw="01OCT1974 0000 - 01OCT1991 0000"):
    """
  Converts Delta Cross Channel gate operation
  from a CALSIM file containing fraction of days open
  Args:
    infile        CALSIM dss file specifying # days operating
    outfile       output dss file readable by DSM2
    inpath        input path, e.g. /CALSIM/DXC/GATE-DAYS-OPEN//1MON//
    outpath       output path, e.g. /CALSIM/DXC/GATE//IR-YEAR/fpart/ 
    value         time series value when gate is opened (must be 1.0 or 2.0),
                  where 1.0 is used for gate ops and 2.0 is number gates operating.
    tw            time window of output
    allThirty     true if CALSIM input is hardwired to thirty day months
  """
    from vutils import timewindow
    from vdss import opendss, findpath, writedss
    from vista.time import TimeWindow
    from vista.set import DataReference
    import types
    g = opendss(infile)
    if not (type(outfile) == types.StringType):
        raise TypeError("Argument outfile should be name of a dss file")
    if not isinstance(tw, TimeWindow):
        tw = timewindow(tw)
    if not (value == 1.0 or value == 2.0):
        raise "Output time series 'on' value should be 1.0 (gate op) or 2.0 (gates operating)"
    x = findpath(g, inpath)[0]
    dxcref = DataReference.create(findpath(g, inpath)[0], tw)
    dxc = dxcref.getData()
    if not dxc:
        raise "Cross channel data not found"
    dxcITS = daysPerMonthToITS(dxc, value, allThirty)
    writedss(outfile, outpath, dxcITS)
    return dxcITS
예제 #30
0
def calaveras():
    calsimfile = getAttr("CALSIMFILE")
    f = opendss(calsimfile)  # open CALSIM file
    outfile = getAttr("BOUNDARYFILE")
    if not outfile or outfile == "":
        raise "Config variable BOUNDARYFILE not set and needed for prepro output"
    tw = prepro_window()

    cal_path = calsim_path("C508")
    cal_ret_path = calsim_path("R514")
    cal_ref = findpath(f, cal_path)
    if not cal_ref:
        raise "Calaveras path %s not found" % cal_path
    cal_ret_ref = findpath(f, cal_ret_path)
    if not cal_ret_ref:
        raise "Calaveras return flow path %s not found" % cal_ret_path
    cal = DataReference.create(cal_ref[0], tw).getData()
    cal_ret = DataReference.create(cal_ret_ref[0], tw).getData()
    mf = calsim_study_fpart(modify=1)
    cal_in_path = calsim_path("C508_R514", mf)
    cal_in = cal + cal_ret
    writedss(outfile, cal_in_path, cal_in)
    return
def calaveras():
    calsimfile = getAttr("CALSIMFILE")
    f = opendss(calsimfile)  # open CALSIM file
    outfile = getAttr("BOUNDARYFILE")
    if not outfile or outfile == "":
        raise "Config variable BOUNDARYFILE not set and needed for prepro output"
    tw = prepro_window()

    cal_path = calsim_path("C508")
    cal_ret_path = calsim_path("R514")
    cal_ref = findpath(f, cal_path)
    if not cal_ref:
        raise "Calaveras path %s not found" % cal_path
    cal_ret_ref = findpath(f, cal_ret_path)
    if not cal_ret_ref:
        raise "Calaveras return flow path %s not found" % cal_ret_path
    cal = DataReference.create(cal_ref[0], tw).getData()
    cal_ret = DataReference.create(cal_ret_ref[0], tw).getData()
    mf = calsim_study_fpart(modify=1)
    cal_in_path = calsim_path("C508_R514", mf)
    cal_in = cal + cal_ret
    writedss(outfile, cal_in_path, cal_in)
    return
예제 #32
0
import sys
import config
import time
import jarray, math
import vutils
from vista.time import TimeFactory, TimeInterval, Time
from vista.set import DataReference, Units, Pathname
from vdss import opendss, findpath, writedss, find
from vtimeseries import timewindow, timeinterval
from config import getAttr, setConfigVars
from calsim_study_fpart import calsim_study_fpart
from planning_time_window import prepro_window
from jarray import zeros, array
from vista.set import RegularTimeSeries, DataSetAttr, DataType, Constants
from vdisplay import plot, tabulate
from vmath import per_avg, per_max, mov_avg, godin, per_min
from vutils import Constants, RegularTimeSeries
from transfer import transfer
configfile = sys.argv[1]  # configuration file
param = sys.argv[
    2]  # param is the second argument and can be "VOL_FP","EC_FP","200nodes_FP"
sind = int(sys.argv[3])  # start index of DSS Records
eind = int(sys.argv[4])  # end index of DSS Records
setConfigVars(configfile)
DSSENVVAR = "QUAL_OUTDSS_%s" % param
infile = getAttr(DSSENVVAR)
g = opendss(infile)
outfile = "%s_PostPro.DSS" % infile[:-4]
print "Processing Results for..."
for n in range(sind - 1, eind, 1):
예제 #33
0
    else:
        print "IN prep DOC"
        infile = sys.argv[1]
        config.setConfigVars(infile)
        tw=prepro_window()
        print "Expanding seasonal DICU DOC drainage values"
        expand_seasonal_bst.prep_dicu(
            config.getAttr('DICUFILE_DOC'),        # original DICU DSS file for EC
            config.getAttr('DICUFILE_DOCE'),       # processed DICU DSS file (will be input for DSM2)
            "DRAIN-DOC",tw)
        print "Expanding seasonal boundary DOC values"
#        expand_seasonal_bst.prep_dicu(
#            config.getAttr('TSFILE_DOC'),        # original DICU DSS file for EC
#            config.getAttr('DICUFILE_DOCE'),       # processed DICU DSS file (will be input for DSM2)
#            "DOC",tw)
    
    f=opendss(config.getAttr("TSFILE_DOC"))           # open DOC boundary file
    outfile=config.getAttr("BOUNDARYFILE")
    f2=find(f,'DOC','c')
    for ref in f2:
        path = ref.getPathname()
        daily = vutils.interpolate(ref.getData(),"1DAY")
        path.setPart(Pathname.E_PART, '1DAY')
        path.setPart(Pathname.F_PART, config.getAttr('DSM2MODIFIER'))
        mod_path = path.toString()
        writedss(outfile, mod_path, daily)

    sys.exit()


예제 #34
0
import sys
import config
import calendar
import time
import jarray,math
import vutils
import interpolator.ConservativeSpline
import conserve
from vista.time import TimeFactory, TimeInterval,Time
from vista.set import DataReference, Units
from vdss import opendss,findpath,writedss,find
from vtimeseries import timewindow,timeinterval
from config import getAttr,setConfigVars
from calsim_study_fpart import calsim_study_fpart
from planning_time_window import prepro_window
from jarray import zeros,array
from vista.set import RegularTimeSeries,DataSetAttr,DataType,Constants
from vdisplay import plot,tabulate
from vmath import per_avg, per_max, mov_avg
from vutils import Constants, RegularTimeSeries
def path_check(f,dsspath):
	paths = findpath(f,dsspath)
	if not paths or len(paths)>1:
		print "File: %s" % calsimfile
		raise "Path %s not found or not unique" % dsspath
	return paths[0]
def transpose_day(var_list):
# reads an array of bparts of 31 calsim monnthly timeseries and tranposes data in to single daily timeseries
# returns array of transposed daily timeseries data
# "varlist" => array of bparts of 31 CALSIM monthly timeseries data (e.g QSAC169_1DV, QSAC169_2DV etc)
예제 #35
0
        print "IN prep DOC"
        infile = sys.argv[1]
        config.setConfigVars(infile)
        tw = prepro_window()
        print "Expanding seasonal DICU DOC drainage values"
        expand_seasonal_bst.prep_dicu(
            config.getAttr('DICUFILE_DOC'),  # original DICU DSS file for EC
            config.getAttr(
                'DICUFILE_DOCE'
            ),  # processed DICU DSS file (will be input for DSM2)
            "DRAIN-DOC",
            tw)
        print "Expanding seasonal boundary DOC values"
#        expand_seasonal_bst.prep_dicu(
#            config.getAttr('TSFILE_DOC'),        # original DICU DSS file for EC
#            config.getAttr('DICUFILE_DOCE'),       # processed DICU DSS file (will be input for DSM2)
#            "DOC",tw)

    f = opendss(config.getAttr("TSFILE_DOC"))  # open DOC boundary file
    outfile = config.getAttr("BOUNDARYFILE")
    f2 = find(f, 'DOC', 'c')
    for ref in f2:
        path = ref.getPathname()
        daily = vutils.interpolate(ref.getData(), "1DAY")
        path.setPart(Pathname.E_PART, '1DAY')
        path.setPart(Pathname.F_PART, config.getAttr('DSM2MODIFIER'))
        mod_path = path.toString()
        writedss(outfile, mod_path, daily)

    sys.exit()
예제 #36
0
        if int(sdate[5:]) < 1974:
            tw = prepro_window("82yr")
        else:
            tw = prepro_window("16yr")
        tws = str(tw)
        print "Using time window: %s (dcc processing may exceed your run dates)" % tws

        dcc.dccOp(
            getAttr('CALSIMFILE'),              # CALSIM DSS file (input for DSM2)
            getAttr('GATEFILE'),                # processed gate DSS file (will be input for DSM2)
            '/CALSIM/DXC/GATE-DAYS-OPEN//1MON//' + getAttr('CALSIMSTUDY') + '/', # CALSIM DXC pathname
            '/CALSIM-PROCESSED/DCC/OP//IR-YEAR/' +   \
            getAttr('CALSIMSTUDY') + '/', # processed cross channel pathname
            0,                                  # 0: CALSIM input is hardwired to 30-day months
            1,                                  # operate gate between 0 & 1
            tws                                 # time window
            )

        print 'Copying gate ops for Clifton Court'
        path='/PLANNING\+GATE/CHWST000/OP-FROM-NODE//IR-YEAR/%s/' \
              % getAttr("CLIFTONCT_GATEOP")
        f = vdss.opendss(getAttr('CLIFTONCT_GATEFILE'))
        g = vdss.findpath(f, path)
        if (not g or len(g) != 1):
            raise "Path not found or not unique: %s" % (path)
        ts = DataReference.create(g[0]).getData()
        vdss.writedss(getAttr('GATEFILE'), path.replace("\\", ""), ts)
        print "Finished with clifton court transfer"
        sys.exit(0)
#
예제 #37
0
import sys
import config
import time
import jarray,math
import vutils
from vista.time import TimeFactory, TimeInterval,Time
from vista.set import DataReference, Units, Pathname
from vdss import opendss,findpath,writedss,find
from vtimeseries import timewindow,timeinterval
from config import getAttr,setConfigVars
from calsim_study_fpart import calsim_study_fpart
from planning_time_window import prepro_window
from jarray import zeros,array
from vista.set import RegularTimeSeries,DataSetAttr,DataType,Constants
from vdisplay import plot,tabulate
from vmath import per_avg, per_max, mov_avg, godin, per_min
from vutils import Constants, RegularTimeSeries
from transfer import transfer
configfile = sys.argv[1]      # configuration file
param = sys.argv[2]       # param is the second argument and can be "VOL_FP","EC_FP","200nodes_FP"
sind = int(sys.argv[3])   # start index of DSS Records
eind = int(sys.argv[4])   # end index of DSS Records
setConfigVars(configfile)
DSSENVVAR = "QUAL_OUTDSS_%s" % param
infile  = getAttr(DSSENVVAR)
g = opendss(infile)
outfile = "%s_PostPro.DSS"% infile[:-4]
print "Processing Results for..."
for n in range(sind-1,eind,1):
	ref = g[n]
def smooth_flow2():
    """ A slightly smoothed version of monthly flows to avoid sharp transitions
        between months. Uses a tension spline.
    """
    calsimfile = getAttr("CALSIMFILE")
    f = opendss(calsimfile)  # open CALSIM file

    outfile = getAttr("BOUNDARYFILE")
    if not outfile or outfile == "":
        raise "Config variable BOUNDARYFILE not set and needed for prepro output"
    fpart_mod = calsim_study_fpart(modify=1)

    tw = prepro_window()

    print "Preparing SAC and SJR Inflows"

    sjr_path = calsim_path("C639")
    sjr_ret_path = calsim_path("R644")
    sjr_ref = findpath(f, sjr_path)
    if not sjr_ref:
        raise "San Joaquin path %s not found" % sjr_path
    sjr_ret_ref = findpath(f, sjr_ret_path)
    if not sjr_ret_ref:
        raise "San Joaquin return flow path %s not found" % sjr_ret_path
    sjr = DataReference.create(sjr_ref[0], tw)  # .getData()
    sjr_ret = DataReference.create(sjr_ret_ref[0], tw)  # .getData()
    sjr_in = sjr + sjr_ret

    sac_path = calsim_path("C169")
    frwa_div1_path = calsim_path("D168B")
    frwa_div2_path = calsim_path("D168C")
    sac_ref = findpath(f, sac_path)
    if not sac_ref:
        raise "Sacramento path %s not found" % sac_path
    frwa_div1_ref = findpath(f, frwa_div1_path)
    if not frwa_div1_ref:
        raise "Freeport Regional Water Authority Diversion path %s not found" % frwa_div1_path
    frwa_div2_ref = findpath(f, frwa_div2_path)
    if not frwa_div2_ref:
        raise "Freeport Regional Water Authority Diversion path %s not found" % frwa_div2_path
    sac = DataReference.create(sac_ref[0], tw)  # .getData()
    frwa_div1 = DataReference.create(frwa_div1_ref[0], tw)  # .getData()
    frwa_div2 = DataReference.create(frwa_div2_ref[0], tw)  # .getData()
    sac_in = sac + frwa_div1 + frwa_div2

    #    sjr_sac(sjr_inf,sac_inf)

    print "smoothing SAC"
    sac_mon = sac_in.getData()
    if sac_mon:
        if len(sac_mon) < 4:
            raise "Length of monthly data too short for smoothing. Wrong time window?"
        try:
            sac_day = conserve.conserveSpline(sac_mon, "1DAY")
        except:
            print "Failure to smooth path: %s over time window: %s" % ("C169_D168B_D168C", tw)
            raise

        sac_day.getAttributes().setYUnits(Units.CFS)
        writedss(outfile, "/CALSIM-SMOOTH/C169_D168B_D168C/FLOW/1DAY//" + fpart_mod + "/", sac_day)
    else:
        raise "Failure to find monthly data for C169+D168B+D168C"

    print "smoothing SJR"
    sjr_mon = sjr_in.getData()
    if sjr_mon:
        if len(sjr_mon) < 4:
            raise "Length of monthly data too short for smoothing. Wrong time window?"
        try:
            sjr_day = conserve.conserveSpline(sjr_mon, "1DAY")
        except:
            print "Failure to smooth path: %s over time window: %s" % ("C639_R644", tw)
            raise

        sjr_day.getAttributes().setYUnits(Units.CFS)
        writedss(outfile, "/CALSIM-SMOOTH/C639_R644/FLOW/1DAY//" + fpart_mod + "/", sjr_day)
    else:
        raise "Failure to find monthly data for C639+R644"
예제 #39
0
def planning_ec_mtz():  # MTZ = RSAC054 BC for the qual
    DEBUG = 0
    OUTPUT = config.getAttr('QUALBOUNDARYFILE')
    calsimfile = config.getAttr('CALSIMFILE')
    CALSIM = opendss(calsimfile)
    PLANNINGTIDE = opendss(config.getAttr('STAGE_SOURCE_FILE'))
    outputpath = "/FILL+CHAN/RSAC054/EC//15MIN/" + config.getAttr(
        "DSM2MODIFIER") + "/"
    if not (OUTPUT and os.path.exists(OUTPUT)):
        raise "Envvar QUALBOUNDARYFILE must exist as destination for EC"

    startyr = int(config.getAttr('START_DATE')[5:])
    endyr = int(config.getAttr('END_DATE')[5:])

    if (startyr < 1974 and endyr > 1991):
        blocks = [
            "01NOV1921 0000 - 01OCT1940 0000",
            "01OCT1940 0000 - 01OCT1960 0000",
            "01OCT1960 0000 - 01OCT1974 0000",
            "01OCT1974 0000 - 01OCT1991 0000",
            "01OCT1991 0000 - 01OCT2003 0000"
        ]  # for memory reasons (year 2001).
    else:
        blocks = ["01OCT1974 0000 - 01OCT1991 0000"]

    g0 = 5000.  # initial value of g (antecedent outflow) for the beginning
    # of the first year. This is pretty arbitrary and makes little difference

    for twstr in blocks:
        TWIND = timewindow(twstr)  # Actual period to be estimated
        print "Calculating boundary salinity for the period " + TWIND.toString(
        )
        TWINDBUF = grow_window(
            TWIND, "1MON",
            "1MON")  # Conservative buffered period for retrieval
        # so that after prelimiary operations (e.g. time average)
        # time series will still span at least TWIND
        fpart = calsim_study_fpart(modify=0)

        ndo15 = DataReference.create(
            findpath(CALSIM, "/CALSIM/NDO/FLOW-NDO//15MIN/" + fpart + "/")[0],
            TWIND).getData()

        astro_stage_version = config.getAttr("ASTRO_STAGE_VERSION")
        mtzastro = DataReference.create(
            findpath(
                PLANNINGTIDE, "/FILL\+CHAN/RSAC054/STAGE//15MIN/" +
                astro_stage_version + "/")[0], TWINDBUF).getData()
        if 'NAVD' in astro_stage_version:
            mtzastro = mtzastro - 2.68
            writedss(
                CALSIM, "/FILL\+CHAN/RSAC054/STAGE//15MIN/" +
                astro_stage_version.replace('NAVD', 'NGVD') + "/", mtzastro)

        astrorms = godin(
            (mtzastro * mtzastro)**
            0.5)  # RMS energy of tide (used to predict filling and draining)
        dastrorms = ((astrorms - (astrorms >> 1)) * 96.).createSlice(TWIND)
        fifteenflo2 = ndo15 - 53411.1 * (dastrorms)

        # call to ec estimator. all parameters are included.
        so, sb = 37196, 2328.1
        c = [
            -6.00E-05, 7.30E-05, -1.00E-05, -3.00E-05, 1.70E-06, -1.00E-04,
            4.50E-05, -1.00E-04
        ]
        [mtzecest, g1] = ec_boundary.ECEst(mtzastro,
                                           fifteenflo2,
                                           so,
                                           sb,
                                           beta=420.5205,
                                           npow1=0.7750588,
                                           npow2=1,
                                           g0=g0,
                                           zrms=astrorms,
                                           c=c)

        writedss(OUTPUT, outputpath, mtzecest)

        g0 = g1
    return 0
예제 #40
0
def planning_ec_mtz(): # MTZ = RSAC054 BC for the qual
    DEBUG = 0
    OUTPUT=config.getAttr('QUALBOUNDARYFILE')
    calsimfile = config.getAttr('CALSIMFILE')
    vamp_corrected_dss = config.getAttr('CALSIM_VAMP')
    CALSIM=opendss(calsimfile)
    PLANNINGTIDE=opendss(config.getAttr('STAGE_SOURCE_FILE'))
    STEP=string.lower(config.getAttr('CALSIMSTEP'))
    SJR_PROCESS=config.getAttr("SJR_PROCESS")    
    outputpath="/FILL+CHAN/RSAC054/EC//15MIN/"+config.getAttr("DSM2MODIFIER")+"/"
    if not(OUTPUT and os.path.exists(OUTPUT)):
        raise "Envvar QUALBOUNDARYFILE must exist as destination for EC"
        
    startyr=int(config.getAttr('START_DATE')[5:])
    endyr=int(config.getAttr('END_DATE')[5:])
    
    if (startyr < 1974 and endyr > 1991):
        blocks= [ "01NOV1921 0000 - 01OCT1940 0000",
             "01OCT1940 0000 - 01OCT1960 0000",
             "01OCT1960 0000 - 01OCT1974 0000",
             "01OCT1974 0000 - 01OCT1991 0000",
             "01OCT1991 0000 - 01OCT2003 0000"
                ]
    else: 
        blocks = [ "01OCT1974 0000 - 01OCT1991 0000" ]
                                                      # for memory reasons (year 2001).

    g0=5000.                                          # initial value of g (antecedent outflow) for the beginning
                                                      # of the first year. This is pretty arbitrary and makes little difference
    if DEBUG:
        g0_no_vamp = 5000.

    for twstr in blocks:    
        TWIND=timewindow(twstr)        # Actual period to be estimated
        print "Calculating boundary salinity for the period "+TWIND.toString()
        TWINDBUF=grow_window(TWIND,"1MON","1MON")     # Conservative buffered period for retrieval
                                                      # so that after prelimiary operations (e.g. time average)
                                                      # time series will still span at least TWIND
        fpart=calsim_study_fpart(modify=0)
        ndo=DataReference.create(findpath(CALSIM,"/CALSIM/NDO/FLOW-NDO//"+STEP+"/"
                                  +fpart+"/")[0],TWIND).getData()
        ndo15=conserve.conserveSpline(ndo,"15MIN")
        ndo15_no_vamp = 0
        if DEBUG:
            ndo15_no_vamp = ndo15
        # calc  vamp caused ndo change
        if (SJR_PROCESS.upper()=="SINGLE_STEP") or (SJR_PROCESS.upper()=="MULTI_STEP"):
            fpart_modified=calsim_study_fpart(modify=1)
            delta_ndo = vamp_ndo.calc_vamp_delta_ndo(calsimfile,vamp_corrected_dss,fpart,fpart_modified,SJR_PROCESS)
            ndo15 = ndo15 + interpolate(delta_ndo, "15MIN")
		
        astro_stage_version = config.getAttr("ASTRO_STAGE_VERSION")
        mtzastro=DataReference.create(findpath(PLANNINGTIDE,"/FILL\+CHAN/RSAC054/STAGE//15MIN/"+astro_stage_version + "/")[0],TWINDBUF).getData()

        astrorms=godin((mtzastro*mtzastro)**0.5)           # RMS energy of tide (used to predict filling and draining)
        dastrorms=(  (astrorms-(astrorms>>1))*96. ).createSlice(TWIND)    
        fifteenflo2=ndo15  - 40000*(dastrorms)

        # call to ec estimator. all parameters are included. g0 is an
        [mtzecest, g1]=ec_boundary.ECEst(mtzastro,fifteenflo2,beta=600,npow1=0.75,npow2=1,g0=g0,zrms=astrorms)
        
        if DEBUG:
            fifteenflo2_no_vamp = ndo15_no_vamp  - 40000*(dastrorms)
            [mtzecest_no_vamp, g1_no_vamp]=ec_boundary.ECEst(mtzastro,fifteenflo2_no_vamp,beta=600,npow1=0.75,npow2=1,g0=g0_no_vamp,zrms=astrorms)
            g0_no_vamp = g1_no_vamp
            writedss("out_ec_check","/CALC/ndo_no_vamp/ndo////", ndo15_no_vamp)
            writedss("out_ec_check","/CALC/ndo_with_vamp/ndo////", ndo15)
            writedss("out_ec_check","/CALC/ndo_no_vamp/ec////", mtzecest_no_vamp)
            writedss("out_ec_check","/CALC/ndo_with_vamp/ec////", mtzecest)
        writedss(OUTPUT,outputpath,mtzecest)
            
        g0=g1
    return 0
예제 #41
0
def planning_ec_mtz(): # MTZ = RSAC054 BC for the qual
    DEBUG = 0
    OUTPUT=config.getAttr('QUALBOUNDARYFILE')
    calsimfile = config.getAttr('CALSIMFILE')
    vamp_corrected_dss = config.getAttr('CALSIM_VAMP')
    CALSIM=opendss(calsimfile)
    PLANNINGTIDE=opendss(config.getAttr('STAGE_SOURCE_FILE'))
    STEP=string.lower(config.getAttr('CALSIMSTEP'))
    SJR_PROCESS=config.getAttr("SJR_PROCESS")    
    outputpath="/FILL+CHAN/RSAC054/EC//15MIN/"+config.getAttr("DSM2MODIFIER")+"/"
    if not(OUTPUT and os.path.exists(OUTPUT)):
        raise "Envvar QUALBOUNDARYFILE must exist as destination for EC"
        
    startyr=int(config.getAttr('START_DATE')[5:])
    endyr=int(config.getAttr('END_DATE')[5:])
    
    if (startyr < 1974 and endyr > 1991):
#        blocks= [ "01NOV1921 0000 - 01OCT1940 0000",
        blocks= [ "01FEB1921 0000 - 01OCT1940 0000",
             "01OCT1940 0000 - 01OCT1960 0000",
             "01OCT1960 0000 - 01OCT1974 0000",
             "01OCT1974 0000 - 01OCT1991 0000",
             "01OCT1991 0000 - 01OCT2003 0000"
                ]
    else: 
        blocks = [ "01OCT1974 0000 - 01OCT1991 0000" ]
                                                      # for memory reasons (year 2001).

    g0=5000.                                          # initial value of g (antecedent outflow) for the beginning
                                                      # of the first year. This is pretty arbitrary and makes little difference
    if DEBUG:
        g0_no_vamp = 5000.

    for twstr in blocks:    
        TWIND=timewindow(twstr)        # Actual period to be estimated
        print "Calculating boundary salinity for the period "+TWIND.toString()
        TWINDBUF=grow_window(TWIND,"1MON","1MON")     # Conservative buffered period for retrieval
                                                      # so that after prelimiary operations (e.g. time average)
                                                      # time series will still span at least TWIND
        fpart=calsim_study_fpart(modify=0)
        ndo=DataReference.create(findpath(CALSIM,"/CALSIM/NDO/FLOW-NDO//"+STEP+"/"
                                  +fpart+"/")[0],TWIND).getData()
        ndo15=conserve.conserveSpline(ndo,"15MIN")
        ndo15_no_vamp = 0
        if DEBUG:
            ndo15_no_vamp = ndo15
# removed since currently there is no difference between vamp and monthly average.
            # calc  vamp caused ndo change
#        if (SJR_PROCESS.upper()=="SINGLE_STEP") or (SJR_PROCESS.upper()=="MULTI_STEP"):
#            fpart_modified=calsim_study_fpart(modify=1)
#            delta_ndo = vamp_ndo.calc_vamp_delta_ndo(calsimfile,vamp_corrected_dss,fpart,fpart_modified,SJR_PROCESS)
#            ndo15 = ndo15 + interpolate(delta_ndo, "15MIN")
		
        astro_stage_version = config.getAttr("ASTRO_STAGE_VERSION")
        mtzastro=DataReference.create(findpath(PLANNINGTIDE,"/FILL\+CHAN/RSAC054/STAGE//15MIN/"+astro_stage_version + "/")[0],TWINDBUF).getData()

        astrorms=godin((mtzastro*mtzastro)**0.5)           # RMS energy of tide (used to predict filling and draining)
        dastrorms=(  (astrorms-(astrorms>>1))*96. ).createSlice(TWIND)    
        fifteenflo2=ndo15  - 40000*(dastrorms)

        # call to ec estimator. all parameters are included. g0 is an
        [mtzecest, g1]=ec_boundary.ECEst(mtzastro,fifteenflo2,beta=600,npow1=0.75,npow2=1,g0=g0,zrms=astrorms)
       
        if DEBUG:
            fifteenflo2_no_vamp = ndo15_no_vamp  - 40000*(dastrorms)
            [mtzecest_no_vamp, g1_no_vamp]=ec_boundary.ECEst(mtzastro,fifteenflo2_no_vamp,beta=600,npow1=0.75,npow2=1,g0=g0_no_vamp,zrms=astrorms)
            g0_no_vamp = g1_no_vamp
            writedss("out_ec_check","/CALC/ndo_no_vamp/ndo////", ndo15_no_vamp)
            writedss("out_ec_check","/CALC/ndo_with_vamp/ndo////", ndo15)
            writedss("out_ec_check","/CALC/ndo_no_vamp/ec////", mtzecest_no_vamp)
            writedss("out_ec_check","/CALC/ndo_with_vamp/ec////", mtzecest)
        writedss(OUTPUT,outputpath,mtzecest)

        g0=g1
    return 0
예제 #42
0
def smooth_flow2():
    """ A slightly smoothed version of monthly flows to avoid sharp transitions
        between months. Uses a tension spline.
    """
    calsimfile = getAttr("CALSIMFILE")
    f = opendss(calsimfile)  # open CALSIM file

    outfile = getAttr("BOUNDARYFILE")
    if not outfile or outfile == "":
        raise "Config variable BOUNDARYFILE not set and needed for prepro output"
    fpart_mod = calsim_study_fpart(modify=1)

    tw = prepro_window()

    print "Preparing SAC and SJR Inflows"

    sjr_path = calsim_path("C639")
    sjr_ret_path = calsim_path("R644")
    sjr_ref = findpath(f, sjr_path)
    if not sjr_ref:
        raise "San Joaquin path %s not found" % sjr_path
    sjr_ret_ref = findpath(f, sjr_ret_path)
    if not sjr_ret_ref:
        raise "San Joaquin return flow path %s not found" % sjr_ret_path
    sjr = DataReference.create(sjr_ref[0], tw)  #.getData()
    sjr_ret = DataReference.create(sjr_ret_ref[0], tw)  #.getData()
    sjr_in = sjr + sjr_ret

    sac_path = calsim_path("C169")
    frwa_div1_path = calsim_path("D168B")
    frwa_div2_path = calsim_path("D168C")
    sac_ref = findpath(f, sac_path)
    if not sac_ref:
        raise "Sacramento path %s not found" % sac_path
    frwa_div1_ref = findpath(f, frwa_div1_path)
    if not frwa_div1_ref:
        raise "Freeport Regional Water Authority Diversion path %s not found" % frwa_div1_path
    frwa_div2_ref = findpath(f, frwa_div2_path)
    if not frwa_div2_ref:
        raise "Freeport Regional Water Authority Diversion path %s not found" % frwa_div2_path
    sac = DataReference.create(sac_ref[0], tw)  #.getData()
    frwa_div1 = DataReference.create(frwa_div1_ref[0], tw)  #.getData()
    frwa_div2 = DataReference.create(frwa_div2_ref[0], tw)  #.getData()
    sac_in = sac + frwa_div1 + frwa_div2

    #    sjr_sac(sjr_inf,sac_inf)

    print "smoothing SAC"
    sac_mon = sac_in.getData()
    if sac_mon:
        if len(sac_mon) < 4:
            raise "Length of monthly data too short for smoothing. Wrong time window?"
        try:
            sac_day = conserve.conserveSpline(sac_mon, "1DAY")
        except:
            print "Failure to smooth path: %s over time window: %s" % (
                "C169_D168B_D168C", tw)
            raise

        sac_day.getAttributes().setYUnits(Units.CFS)
        writedss(outfile,
                 "/CALSIM-SMOOTH/C169_D168B_D168C/FLOW/1DAY//" \
                     +fpart_mod+"/",sac_day)
    else:
        raise "Failure to find monthly data for C169+D168B+D168C"

    print "smoothing SJR"
    sjr_mon = sjr_in.getData()
    if sjr_mon:
        if len(sjr_mon) < 4:
            raise "Length of monthly data too short for smoothing. Wrong time window?"
        try:
            sjr_day = conserve.conserveSpline(sjr_mon, "1DAY")
        except:
            print "Failure to smooth path: %s over time window: %s" % (
                "C639_R644", tw)
            raise

        sjr_day.getAttributes().setYUnits(Units.CFS)
        writedss(outfile,
             "/CALSIM-SMOOTH/C639_R644/FLOW/1DAY//" \
                 +fpart_mod+"/",sjr_day)
    else:
        raise "Failure to find monthly data for C639+R644"
예제 #43
0
def dss_retrieve_ts(file, path):
    f=opendss(file)
    g=findpath(f,path)
    if g==None or len(g) != 1:
        raise ValueError("Path %s in file s% does not exist or is not unique" % (path,file))
    return g[0].getData()
예제 #44
0
 def test_opendss(self):
     g1=vdss.opendss(self.file1)
     self.assertTrue(g1 != None)
예제 #45
0
        else:
            tw = prepro_window("16yr")
        tws = str(tw)
        print "Using time window: %s (dcc processing may exceed your run dates)" % tws
        
        dcc.dccOp(
            getAttr('CALSIMFILE'),              # CALSIM DSS file (input for DSM2)
            getAttr('GATEFILE'),                # processed gate DSS file (will be input for DSM2)
            '/CALSIM/DXC/GATE-DAYS-OPEN//1MON//' + getAttr('CALSIMSTUDY') + '/', # CALSIM DXC pathname
            '/CALSIM-PROCESSED/DCC/OP//IR-YEAR/' +   \
            getAttr('CALSIMSTUDY') + '/', # processed cross channel pathname
            0,                                  # 0: CALSIM input is hardwired to 30-day months
            1,                                  # operate gate between 0 & 1
            tws                                 # time window
            )

        print 'Copying gate ops for Clifton Court'
        path='/PLANNING\+GATE/CHWST000/OP-FROM-NODE//IR-YEAR/%s/' \
              % getAttr("CLIFTONCT_GATEOP")
        f=vdss.opendss(getAttr('CLIFTONCT_GATEFILE')) 
        g=vdss.findpath(f,path)
        if ( not g or len(g) != 1):
            raise "Path not found or not unique: %s" % (path)
        ts=DataReference.create(g[0]).getData()
        vdss.writedss(getAttr('GATEFILE'),path.replace("\\",""),ts)
        print "Finished with clifton court transfer"
        sys.exit(0)
#