コード例 #1
0
    def execute(self, p, desc_ext=None, hpc=None, make_call=True):
        """
        Check that instance of problem has not been run (if database specified),
        create input file, call executable, and add instance to database (if
        applicable)
        """

        # Create input file and check if instance contained in database
        self.create_input_file(p, desc_ext, self.db)
        exist = self.check_database(desc_ext)

        if not exist:
            # If instance does not exist, write input file, call executable,
            # and add to database
            self.writeInputFile()

            # for coupled simulations, self.infile and self.log will be arrays
            if hasattr(self.infile, "__iter__"):
                infileArray = [x.fname for x in self.infile]
                logFile = self.infile[0].log + "-" + self.infile[1].log
            else:
                infileArray = self.infile.fname
                logFile = self.infile.log

            exec_str = hpc.execute_str(self.bin, infileArray)
            current_dir = os.getcwd()
            os.chdir(self.exec_dir)
            execute_code(exec_str, logFile, make_call)
            os.chdir(current_dir)
            if self.db is not None:
                self.db.add_entry(p, self.desc, self.infile)
コード例 #2
0
def run_cd2tet_fromtop(top, out, log=None, make_call=True, cd2tet=None):

    # Default cd2tet executable
    if cd2tet is None: cd2tet = os.path.expandvars('$CD2TET')

    # Build execution string, execute
    exec_str = "{0:s} -mesh {1:s} -output {2:s}".format(cd2tet, top, out)
    execute_code(exec_str, log, make_call)
コード例 #3
0
def cat_split_gen(fname_root, fname_gen, n, cleanup=False):
    s = ''
    for k in range(n):
        s += ' {0:s}'.format(fname_gen(k))
    cat_str = 'cat {0:s} > {1:s}'.format(s, fname_root)
    execute_code(cat_str, None, True)
    if cleanup:
        rm_str = 'rm {0:s}'.format(s)
        execute_code(rm_str, None, True)
コード例 #4
0
def cat_split(fname_root, npartition, cleanup=False):
    s = ''
    for k in range(npartition):
        s += ' {0:s}.{1:d}parts.part{2:s}'.format(fname_root, npartition,
                                             str(k).zfill(len(str(npartition))))
    cat_str = 'cat {0:s} > {1:s}'.format(s, fname_root)
    execute_code(cat_str, None, True)
    if cleanup:
        rm_str  = 'rm {0:s}'.format(s)
        execute_code(rm_str, None, True)
コード例 #5
0
def run_matcher(top, feminput, geom_prefix, log=None, make_call=True, matcher=None):

    # Default matcher executable
    if matcher is None: matcher = os.path.expandvars('$MATCHER')

    # Build execution string, execute
    exec_str = "{0:s} {1:s} {2:s} -output {3:s}".format(matcher, top, feminput, 
                                                        geom_prefix)
    execute_code(exec_str, log, make_call)
    return "{0:s}.match.fluid".format(geom_prefix)
コード例 #6
0
def run_xp2exo(top, exo_out, xpost_in=[], log=None, make_call=True,
               xp2exo=None):

    # Default xp2exo executable
    if xp2exo is None: xp2exo = os.path.expandvars('$XP2EXO')

    # Build execution string, execute
    exec_str = "{0:s} {1:s} {2:s}".format(xp2exo, top, exo_out)
    for res in xpost_in:
        exec_str = "{0:s} {1:s}".format(exec_str, res)
    execute_code(exec_str, log, make_call)
コード例 #7
0
def sower_fluid_mesh_motion(mm_file, msh, con, out, bccode=-3, log=None,
                            make_call=True, sower=None):

    # Default sower executable
    if sower is None: sower = os.path.expandvars('$SOWER')

    # Build execution string, execute
    exec_str = ("{0:s} -fluid -split -con {1:s} -mesh {2:s} "+
                "-result {3:s} -ascii -bc {4:d} -out {5:s}").format(
                                          sower, con, msh, mm_file, bccode, out)
    execute_code(exec_str, log, make_call)
コード例 #8
0
def sower_fluid_merge(res_file, msh, con, out, name, from_bin=False, log=None,
                      make_call=True, sower=None):

    # Default sower executable
    if sower is None: sower = os.path.expandvars('$SOWER')

    # Build execution string, execute
    exec_str = "{0:s} -fluid -merge -con {1:s}".format(sower, con)
    exec_str = "{0:s} -mesh {1:s} -result {2:s}".format(exec_str, msh, res_file)
    exec_str = "{0:s} -name {1:s} -out {2:s}".format(exec_str, name, out)
    if from_bin: exec_str = "{0:s} -binary".format(exec_str)
    execute_code(exec_str, log, make_call)
コード例 #9
0
def sower_fluid_split(file2split, msh, con, out, from_ascii=True, log=None,
                      make_call=True, sower=None):

    # Default sower executable
    if sower is None: sower = os.path.expandvars('$SOWER')

    # Build execution string, execute
    exec_str = ("{0:s} -fluid -split -con {1:s} -mesh {2:s} "+
                "-result {3:s}").format(sower, con, msh, file2split)
    if from_ascii: exec_str = "{0:s} -ascii".format(exec_str)
    exec_str = "{0:s} -out {1:s}".format(exec_str, out)
    execute_code(exec_str, log, make_call)
コード例 #10
0
def sower_fluid_extract_surf(msh, con, surf_top, bccode=-3, log=None,
                             make_call=True, sower=None):

    # Default sower executable
    if sower is None: sower = os.path.expandvars('$SOWER')

    # Build execution string, execute
    exec_str = ("{0:s} -fluid -merge -con {1:s} -mesh {2:s} "+
                "-skin {3:s} -bc {4:d}").format(sower, con, msh, surf_top,
                                                bccode)
    execute_code(exec_str, log, make_call)
    subprocess.call('mv {0:s}.xpost {0:s}'.format(surf_top), shell=True)
コード例 #11
0
def sower_fluid_top(top, dec, cpus, nclust, geom_prefix, log=None,
                    make_call=True, sower=None, match=None):

    # Default sower executable
    if sower is None: sower = os.path.expandvars('$SOWER')

    # Build execution string, execute
    exec_str = "{0:s} -fluid -mesh {1:s} -dec {2:s}".format(sower, top, dec)
    for cpu in cpus:
        exec_str += " -cpu {0:d}".format(cpu)
    if match is not None:
        exec_str += " -match {0:s}".format(match)
    exec_str += " -cluster {0:d} -output {1:s}".format(nclust, geom_prefix)
    execute_code(exec_str, log, make_call)
コード例 #12
0
    def execute(self, p, desc_ext=None, hpc=None, make_call=True):

        # Create input file and check if instance contained in database
        self.create_input_file(p, desc_ext, self.db)
        exist = self.check_database(self.infile, desc_ext)

        # If instance does not exist, write input file, call executable,
        # and add to database
        if not exist:
            self.infile.write()
            prepare_directory(self.infile.fname, self.femesh)
            exec_str = execute_str(self.bin, tmp_fname)
            execute_code(exec_str, self.infile.log, make_call)
            clean_directory(self.femesh, self.infile.vmo, self.infile.der)
            if self.db is not None: self.db.add_entry(p, self.desc, self.infile)
コード例 #13
0
def sower_fluid_merge_geom(msh,
                           con,
                           dec,
                           from_bin=False,
                           log=None,
                           make_call=True,
                           sower=None):

    # Default sower executable
    if sower is None: sower = os.path.expandvars('$SOWER')

    # Build execution string, execute
    exec_str = "{0:s} -fluid -merge -con {1:s}".format(sower, con)
    exec_str = "{0:s} -mesh {1:s} -dec {2:s}".format(exec_str, msh, dec)
    if from_bin: exec_str = "{0:s} -binary".format(exec_str)
    execute_code(exec_str, log, make_call)
コード例 #14
0
def part_mesh(top, ndec, log=None, make_call=True, partmesh=None):

    # Default partnmesh executable
    if partmesh is None: partmesh = os.path.expandvars('$PARTMESH')

    # Build execution string, execute
    if make_call:
        top_old = copy.copy(top)
        top = top.split('/')[-1]+'.copy'
        subprocess.call('cp {0:s} {1:s}'.format(top_old, top), shell=True)
    exec_str = "{0:s} {1:s} {2:d}".format(partmesh, top, ndec)
    execute_code(exec_str, log, make_call)
    if make_call:
        subprocess.call('rm {0:s}'.format(top), shell=True)
        subprocess.call('mv {0:s}.dec.{2:d} {1:s}.dec.{2:d}'.format(top,
                                                     top_old, ndec), shell=True)
        top = copy.copy(top_old)
    return "{0:s}.dec.{1:d}".format(top, ndec) 
コード例 #15
0
def run_code(x,
             deform_obj,
             ptcloud,
             vmo,
             der=None,
             eps=1.0e-8,
             xpost=None,
             log='blender.tmp.log',
             make_call=True,
             blender_exec=None,
             bg=True,
             mpiexec=None,
             nproc=1):
    """
    Pickle input arguments and run Blender.
    """

    # Pickle *args for unpickling inside blender call (don't change fnamePickle
    # unless you change it in blender_deform.py as well)
    import pickle
    pkf = open(pickle_filename(), 'wb')
    pickle.dump([x, deform_obj, ptcloud, vmo, der, eps, xpost], pkf)
    pkf.close()

    # Default blender executable
    if blender_exec is None: blender_exec = os.path.expandvars('$BLENDER')

    # Build execution string
    exec_str = blender_exec
    if mpiexec is not None and nproc > 1:
        exec_str = "{0:s} -n {1:d} {2:s}".format(mpiexec, nproc, exec_str)
    if bg: exec_str += ' -b'
    # exec_str+=(' -P '+os.path.expandvars('$PYAEROOPT')+
    #                                          'pyaeroopt/util/blender/deform.py')
    exec_str += (' -b -P ' + os.path.expandvars('$PYAEROOPT') +
                 'pyaeroopt/util/blender/deform2.py')

    # Call Blender and clean directory
    import sys
    start_time = time.time()
    execute_code(exec_str, log, make_call)
    print('blender time def: ', time.time() - start_time)
    sys.stdout.flush()
    clean_directory()
コード例 #16
0
    def execute(self, p, desc_ext=None, hpc=None, make_call=True):
        """
        Check that instance of problem has not been run (if database specified),
        create input file, call executable, and add instance to database (if
        applicible)
        """

        # Create input file and check if instance contained in database
        self.create_input_file(p, desc_ext, self.db)
        exist = self.check_database(self.infile, desc_ext)

        if not exist:
            # If instance does not exist, write input file, call executable,
            # and add to database
            self.infile.write()
            exec_str = hpc.execute_str(self.bin, self.infile.fname)
            execute_code(exec_str, self.infile.log, make_call)
            if self.db is not None:
                self.db.add_entry(p, self.desc, self.infile)