示例#1
0
def run2():
    tsinput = ptsin.read(fname)
    tsinput['URef'] = 16.0
    tsr = ptsm.cfg2tsrun(tsinput)

    tsr.cohere = pyts.cohereModels.main.nwtc()
    tsr.stress = pyts.stressModels.main.uniform(0,0,0)
    rho = 0.5
    tmax = 50.0
    tsr.phase = Rinker(rho, np.pi)  ### pgraf turned it off for testing!
    cg = tsr.grid
    tsr.grid = tsGrid(center=cg.center, ny=cg.n_y, nz=cg.n_z,
                      height=cg.height, width=cg.width,
                      time_sec=tmax, dt=cg.dt)
    tm0 = time.time()
    tsdata = tsr()  ## actually runs turbsim
    ptsm.write(tsdata, tsinput, fname=outname+"2")
    print('TurbSim exited normally, runtime was %g seconds' % (time.time() - tm0))
示例#2
0
def run2():
    tsinput = ptsin.read(fname)
    tsinput['URef'] = 16.0
    tsr = ptsm.cfg2tsrun(tsinput)

    tsr.cohere = pyts.cohereModels.main.nwtc()
    tsr.stress = pyts.stressModels.main.uniform(0, 0, 0)
    rho = 0.5
    tmax = 50.0
    tsr.phase = Rinker(rho, np.pi)  ### pgraf turned it off for testing!
    cg = tsr.grid
    tsr.grid = tsGrid(center=cg.center,
                      ny=cg.n_y,
                      nz=cg.n_z,
                      height=cg.height,
                      width=cg.width,
                      time_sec=tmax,
                      dt=cg.dt)
    tm0 = time.time()
    tsdata = tsr()  ## actually runs turbsim
    ptsm.write(tsdata, tsinput, fname=outname + "2")
    print('TurbSim exited normally, runtime was %g seconds' %
          (time.time() - tm0))
示例#3
0
            except:
                print("%s exists after all" % run_dir)

#        tsdict = dict({"URef": ws, "AnalysisTime":tmax, "UsableTime":tmax}.items() + case.items())
        tsdict = dict({"URef": ws,  "UsableTime":tmax}.items() + case.items())
#        tsoutname = self.ts_file.replace("inp", "wnd")  #self.rawts.ts_file.replace("inp", "wnd")
        # tsoutname = self.ts_file.replace("inp", "bts")  #self.rawts.ts_file.replace("inp", "wnd")
        tsoutname = case_name + '.bts'
        tsoutname = os.path.join(run_dir, tsoutname)
        tssumname = case_name + '.sum'
        # tssumname = self.ts_file.replace("inp", "sum")
        # print("running TurbSim in dir for case:" , run_dir, case, tsdict)

        if self.overwrite or (not self.overwrite and not os.path.exists(tsoutname)):

            tsinput = ptsin.read(os.path.join(self.ts_dir, self.ts_file))
            for key in tsdict:
                tsinput[key] = tsdict[key]
            tsr = ptsm.cfg2tsrun(tsinput)

            ### the random seed:
            ### bug somewhere in complicated pyts use of numpy (only when called inside multiprocessing)
            ### Success via cutting out the middle man!:
            if rs is None:
                tsr.randgen.seed(tsr.RandSeed)
            else:
                tsr.randgen.seed(rs)  ## this does nothing!
                np.random.seed(rs)  ### this does the trick!

            ###tsr = self.add_phase_dist(tsr, rho, tmax)
            tsr.cohere = pyts.cohereModels.main.nwtc()
示例#4
0
    def execute(self):
        case = self.inputs
        print("CASE", case.fst_params)
        ws=case.fst_params['Vhub']
        rho = case.fst_params['Rho']   #case.fst_params['rho'] ####### TODO: how does this get here?
        rs = case.fst_params['RandSeed1'] if 'RandSeed1' in case.fst_params else None
        tmax = 2  ## should not be hard default ##
        if ('TMax' in case.fst_params):  ## Note, this gets set via "AnalTime" in input files--FAST peculiarity ? ##
            tmax = case.fst_params['TMax']

        # run TurbSim to generate the wind:        
        # for now, turbsim params we mess with are possibly: TMax, RandomSeed, Tmax.  These should generate
        # new runs, otherwise we should just use wind file we already have
            # for now, just differentiate by wind speed
        ts_case_name = "TurbSim-Vhub%.4f" % ws
        if rs != None:
            ts_case_name = "%s-Rseed%d" % (ts_case_name, rs)

        run_dir = os.path.join(self.basedir, ts_case_name)
        if (not os.path.exists(run_dir)):
            os.mkdir(run_dir)

        self._logger.info("running TurbSim in %s " % run_dir)
        print("running TurbSim in " , run_dir)
#        self.rawts.run_dir = run_dir
        tsdict = dict({"URef": ws, "AnalysisTime":tmax, "UsableTime":tmax}.items() + case.fst_params.items())
#        self.rawts.set_dict(tsdict)
        print(case.fst_params)
        tsoutname = self.ts_file.replace("inp", "wnd")  #self.rawts.ts_file.replace("inp", "wnd")
        tsoutname = os.path.join(run_dir, tsoutname)
        tssumname = tsoutname.replace("wnd", "sum")
        reuse_run = False
        if (False and os.path.isfile(tsoutname) and os.path.isfile(tssumname)):
            # maybe there's an old results we can use:
            while (not reuse_run):
                ln = file(tssumname).readlines()
                if (ln != None and len(ln) > 0):
                    ln1 = ln[-1] # check last line2 lines (sometimes Turbsim inexplicably writes a final blank line!)
                    ln1 = ln1.split(".")
                    ln2 = ln[-2] # check last line2 lines (sometimes Turbsim inexplicably writes a final blank line!)
                    ln2 = ln2.split(".")
                    if ((len(ln1) > 0 and ln1[0] == "Processing complete") or (len(ln2) > 0 and ln2[0] == "Processing complete")):
                        print("re-using previous TurbSim output %s for ws = %f" % (tsoutname, ws))
                        reuse_run = True
                if (not reuse_run):
                    time.sleep(2)
                    print("waiting for ", tsoutname)
                    self._logger.info("waiting for %s" % tsoutname)
            self._logger.info("DONE waiting for %s" % tsoutname)
        
        if (not reuse_run):

            tsinput = ptsin.read(os.path.join(self.ts_dir, self.ts_file))
            tsr = ptsm.cfg2tsrun(tsinput)

            tsr = self.add_phase_dist(tsr, rho, tmax)
            #            tsdata=ptsm.run(tsinput)
            tsdata = tsr()  ## actually runs turbsim
            dphi_prob = tsr.phase.delta_phi_prob
            ptsm.write(tsdata, tsinput, fname=tsoutname)
            
            #fout = file("uhub.out", "w")
            #hubdat = tsdata.uturb[0, self.mid, self.mid, :]
            #for i in range(len(hubdat)):
            #    fout.write("%d  %e  %e\n" % ( i, tsdata.time[i], hubdat[i]))
            #fout.close()
            print("dphi prob is ", dphi_prob)
            fout = file(os.path.join(run_dir, "delta_phis_prob.out"), "w")
            fout.write("%e\n" % dphi_prob)
            fout.close()
            
#            tsr = self.create_tsr(rho, ws, tmax, self.dt)
#            tsdat = tsr()
#            print("writing data to ", tsdat, tsoutname)
#            tsdat.write_bladed(tsoutname)
            ### check for errors!!?? ###
            
        # here we link turbsim -> fast
        self.tswind_file = tsoutname
        self.tswind_dir = run_dir
示例#5
0
class runTurbSimpy(Component):
    """ a component to run TurbSim.
        will try to make it aware of whether the wind file already exists"""

    inputs = Instance(IECRunCaseBaseVT, iotype='in')
    tswind_file = Str(iotype='out')
    tswind_dir = Str(iotype='out')

    def create_tsr(self, rho, U, tmax, dt):
        tsr = api.tsrun()
        tsr.grid = api.tsGrid(center=10,
                              ny=self.ny,
                              nz=self.nz,
                              height=10,
                              width=10,
                              time_sec=tmax,
                              dt=dt)
        tsr.prof = api.profModels.pl(U, 90)

        tsr.spec = api.specModels.tidal(self.ustar, 10)

        #tsr.cohere = api.cohereModels.nwtc()
        tsr.cohere = pyts.cohereModels.main.none()

        tsr.stress = api.stressModels.uniform(0.0, 0.0, 0.0)

        tsr.cohere = pyts.cohereModels.main.none()
        tsr.stress = pyts.stressModels.main.uniform(0, 0, 0)

        from pyts.phaseModels.main import Rinker, Uniform
        tsr.phase = Rinker(rho, self.mu)
        #tsr.phase = Uniform()
        # tsr.stress=np.zeros(tsr.grid.shape,dtype='float32')

        self.tsr = tsr
        return tsr

    def add_phase_dist(self, tsr, rho, tmax):
        #        tsr.cohere = pyts.cohereModels.main.none()
        tsr.cohere = pyts.cohereModels.main.nwtc()
        tsr.stress = pyts.stressModels.main.uniform(0, 0, 0)
        tsr.phase = Rinker(rho, self.mu)
        cg = tsr.grid
        tsr.grid = tsGrid(center=cg.center,
                          ny=cg.n_y,
                          nz=cg.n_z,
                          height=cg.height,
                          width=cg.width,
                          time_sec=tmax,
                          dt=cg.dt)

        return tsr

    def __init__(self, filedict):
        super(runTurbSimpy, self).__init__()

        #        self.rawts.ts_exe = filedict['ts_exe']
        self.ts_dir = filedict['ts_dir']
        self.ts_file = filedict['ts_file']

        self.ustar = .8
        ##        self.U = 17.
        self.ny = 15
        self.nz = 15
        self.dt = 0.05  # these (should/have in past) come from TurbSim template file
        self.mid = self.nz / 2

        ##        self.rho = 0.9999
        self.mu = np.pi

        ###        np.random.seed(1)  ## probably don't want this in this context

        #        self.rawts.run_name = self.run_name

        self.basedir = os.path.join(os.getcwd(), "allts_runs")
        if 'run_dir' in filedict:
            self.basedir = os.path.join(os.getcwd(), filedict['run_dir'])
        if (not os.path.exists(self.basedir)):
            os.mkdir(self.basedir)

    def execute(self):
        case = self.inputs
        print("CASE", case.fst_params)
        ws = case.fst_params['Vhub']
        rho = case.fst_params[
            'Rho']  #case.fst_params['rho'] ####### TODO: how does this get here?
        rs = case.fst_params[
            'RandSeed1'] if 'RandSeed1' in case.fst_params else None
        tmax = 2  ## should not be hard default ##
        if (
                'TMax' in case.fst_params
        ):  ## Note, this gets set via "AnalTime" in input files--FAST peculiarity ? ##
            tmax = case.fst_params['TMax']

        # run TurbSim to generate the wind:
        # for now, turbsim params we mess with are possibly: TMax, RandomSeed, Tmax.  These should generate
        # new runs, otherwise we should just use wind file we already have
        # for now, just differentiate by wind speed
        ts_case_name = "TurbSim-Vhub%.4f" % ws
        if rs != None:
            ts_case_name = "%s-Rseed%d" % (ts_case_name, rs)

        run_dir = os.path.join(self.basedir, ts_case_name)
        if (not os.path.exists(run_dir)):
            os.mkdir(run_dir)

        self._logger.info("running TurbSim in %s " % run_dir)
        print("running TurbSim in ", run_dir)
        #        self.rawts.run_dir = run_dir
        tsdict = dict({
            "URef": ws,
            "AnalysisTime": tmax,
            "UsableTime": tmax
        }.items() + case.fst_params.items())
        #        self.rawts.set_dict(tsdict)
        print(case.fst_params)
        tsoutname = self.ts_file.replace(
            "inp", "wnd")  #self.rawts.ts_file.replace("inp", "wnd")
        tsoutname = os.path.join(run_dir, tsoutname)
        tssumname = tsoutname.replace("wnd", "sum")
        reuse_run = False
        if (False and os.path.isfile(tsoutname) and os.path.isfile(tssumname)):
            # maybe there's an old results we can use:
            while (not reuse_run):
                ln = file(tssumname).readlines()
                if (ln != None and len(ln) > 0):
                    ln1 = ln[
                        -1]  # check last line2 lines (sometimes Turbsim inexplicably writes a final blank line!)
                    ln1 = ln1.split(".")
                    ln2 = ln[
                        -2]  # check last line2 lines (sometimes Turbsim inexplicably writes a final blank line!)
                    ln2 = ln2.split(".")
                    if ((len(ln1) > 0 and ln1[0] == "Processing complete") or
                        (len(ln2) > 0 and ln2[0] == "Processing complete")):
                        print(
                            "re-using previous TurbSim output %s for ws = %f" %
                            (tsoutname, ws))
                        reuse_run = True
                if (not reuse_run):
                    time.sleep(2)
                    print("waiting for ", tsoutname)
                    self._logger.info("waiting for %s" % tsoutname)
            self._logger.info("DONE waiting for %s" % tsoutname)

        if (not reuse_run):

            tsinput = ptsin.read(os.path.join(self.ts_dir, self.ts_file))
            tsr = ptsm.cfg2tsrun(tsinput)

            tsr = self.add_phase_dist(tsr, rho, tmax)
            #            tsdata=ptsm.run(tsinput)
            tsdata = tsr()  ## actually runs turbsim
            dphi_prob = tsr.phase.delta_phi_prob
            ptsm.write(tsdata, tsinput, fname=tsoutname)

            #fout = file("uhub.out", "w")
            #hubdat = tsdata.uturb[0, self.mid, self.mid, :]
            #for i in range(len(hubdat)):
            #    fout.write("%d  %e  %e\n" % ( i, tsdata.time[i], hubdat[i]))
            #fout.close()
            print("dphi prob is ", dphi_prob)
            fout = file(os.path.join(run_dir, "delta_phis_prob.out"), "w")
            fout.write("%e\n" % dphi_prob)
            fout.close()


#            tsr = self.create_tsr(rho, ws, tmax, self.dt)
#            tsdat = tsr()
#            print("writing data to ", tsdat, tsoutname)
#            tsdat.write_bladed(tsoutname)
### check for errors!!?? ###

# here we link turbsim -> fast
        self.tswind_file = tsoutname
        self.tswind_dir = run_dir