def save_ebc(self, filename, force=True, default=0.0): """ Save essential boundary conditions as state variables. """ output('saving ebc...') variables = self.get_variables(auto_create=True) ebcs = Conditions.from_conf(self.conf.ebcs, self.domain.regions) epbcs = Conditions.from_conf(self.conf.epbcs, self.domain.regions) try: variables.equation_mapping(ebcs, epbcs, self.ts, self.functions, problem=self) except: output('cannot make equation mapping!') raise state = self.create_state() state.fill(default) if force: vals = dict_from_keys_init(variables.state) for ii, key in enumerate(vals.iterkeys()): vals[key] = ii + 1 state.apply_ebc(force_values=vals) else: state.apply_ebc() out = state.create_output_dict(extend=True) self.save_state(filename, out=out, fill_value=default) output('...done')
def get_examples(table): term_use = dict_from_keys_init(table.keys(), set) required, other = get_standard_keywords() for filename in locate_files('*py', get_paths('examples/')[0]): try: conf = ProblemConf.from_file(filename, required, other, verbose=False) except: continue ebase = filename.split('examples/')[1] lbase = os.path.splitext(ebase)[0] label = lbase.replace('/', '-') pyfile_name = ebase.split('/')[1] if pyfile_name in omits: continue use = conf.options.get('use_equations', 'equations') eqs_conf = getattr(conf, use) for key, eq_conf in six.iteritems(eqs_conf): term_descs = parse_definition(eq_conf) for td in term_descs: term_use[td.name].add(label) return term_use
def main(): parser = OptionParser(usage=usage, version='%prog') parser.add_option('-c', '--counts', action='store_true', dest='counts', default=False, help=helps['counts']) parser.add_option('-u', '--unused', action='store_true', dest='unused', default=False, help=helps['unused']) options, args = parser.parse_args() if len(args) > 0: pdf_dir = os.path.realpath(args[0]) else: parser.print_help(), return required, other = get_standard_keywords() terms_use = dict_from_keys_init(term_table.keys(), set) for filename in locate_files('*.py', pdf_dir): base = filename.replace(pdf_dir, '').lstrip(os.path.sep) output('trying "%s"...' % base) try: conf = ProblemConf.from_file(filename, required, other, verbose=False) except: output('...failed') continue use = conf.options.get('use_equations', 'equations') eqs_conf = getattr(conf, use) for key, eq_conf in eqs_conf.iteritems(): term_descs = parse_definition(eq_conf) for td in term_descs: terms_use[td.name].add(base) output('...ok') output('...done') if options.unused: output('unused terms:') unused = [name for name in terms_use.keys() if len(terms_use[name]) == 0] for name in sorted(unused): output(' ' + name) output('total: %d' % len(unused)) else: output('terms use:') for name, ex_names in ordered_iteritems(terms_use): output('%s: %d' % (name, len(ex_names))) if not options.counts: for ex_name in sorted(ex_names): output(' ' + ex_name)
def save_ebc(self, filename, force=True, default=0.0): """ Save essential boundary conditions as state variables. """ output('saving ebc...') variables = self.get_variables(auto_create=True) ebcs = Conditions.from_conf(self.conf.ebcs, self.domain.regions) epbcs = Conditions.from_conf(self.conf.epbcs, self.domain.regions) try: variables.equation_mapping(ebcs, epbcs, self.ts, self.functions, problem=self) except: output('cannot make equation mapping!') raise state = State(variables) state.fill(default) if force: vals = dict_from_keys_init(variables.state) for ii, key in enumerate(vals.iterkeys()): vals[key] = ii + 1 state.apply_ebc(force_values=vals) else: state.apply_ebc() out = state.create_output_dict(extend=True) self.save_state(filename, out=out, fill_value=default) output('...done')
def save_ebc(self, filename, ebcs=None, epbcs=None, force=True, default=0.0): """ Save essential boundary conditions as state variables. Parameters ---------- filename : str The output file name. ebcs : Conditions instance, optional The essential (Dirichlet) boundary conditions. If not given, `self.conf.ebcs` are used. epbcs : Conditions instance, optional The periodic boundary conditions. If not given, `self.conf.epbcs` are used. force : bool If True, sequential nonzero values are forced to individual `ebcs` so that the conditions are visible even when zero. default : float The default constant value of state vector. """ output('saving ebc...') variables = self.get_variables(auto_create=True) if ebcs is None: ebcs = Conditions.from_conf(self.conf.ebcs, self.domain.regions) if epbcs is None: epbcs = Conditions.from_conf(self.conf.epbcs, self.domain.regions) try: variables.equation_mapping(ebcs, epbcs, self.ts, self.functions, problem=self) except: output('cannot make equation mapping!') raise state = State(variables) state.fill(default) if force: vals = dict_from_keys_init(variables.state) for ii, key in enumerate(vals.iterkeys()): vals[key] = ii + 1 state.apply_ebc(force_values=vals) else: state.apply_ebc() out = state.create_output_dict(extend=True) self.save_state(filename, out=out, fill_value=default) output('...done')
def __init__( self, name, arg_names, keys, history_sizes = None, function = None ): """history_sizes[key] = (history_size, max_mem_history_size) Both history_size and max_mem_history_size can be -1, i.e. growing as necessary""" self.name = name self.arg_names = arg_names self.function = function # self.initialized = dict.fromkeys( keys, False ) self.valid = dict_from_keys_init( keys, dict ) self.clear() self.data = dict_from_keys_init( keys, dict ) self.override = False self.mem_sizes = {}.fromkeys( keys, 1 ) self.history_sizes = {}.fromkeys( keys, 1 ) self.mem_growing = {}.fromkeys( keys, False ) self.history_growing = {}.fromkeys( keys, False ) self.merge_history_sizes( history_sizes ) self.step = 0 self.geometry = 'volume' self.region_name = None
def reset( self ): """Complete reset: unlike clear(), reset() removes all ckeys, so that init_data() must be called.""" self.valid = dict_from_keys_init( self.keys(), dict )
def main(): parser = OptionParser(usage=usage, version='%prog') parser.add_option('-c', '--counts', action='store_true', dest='counts', default=False, help=helps['counts']) parser.add_option('-u', '--unused', action='store_true', dest='unused', default=False, help=helps['unused']) options, args = parser.parse_args() if len(args) > 0: pdf_dir = os.path.realpath(args[0]) else: parser.print_help(), return required, other = get_standard_keywords() terms_use = dict_from_keys_init(term_table.keys(), set) for filename in locate_files('*.py', pdf_dir): base = filename.replace(pdf_dir, '').lstrip(os.path.sep) output('trying "%s"...' % base) try: conf = ProblemConf.from_file(filename, required, other, verbose=False) except: output('...failed') continue use = conf.options.get('use_equations', 'equations') eqs_conf = getattr(conf, use) for key, eq_conf in eqs_conf.iteritems(): term_descs = parse_definition(eq_conf) for td in term_descs: terms_use[td.name].add(base) output('...ok') output('...done') if options.unused: output('unused terms:') unused = [ name for name in terms_use.keys() if len(terms_use[name]) == 0 ] for name in sorted(unused): output(' ' + name) output('total: %d' % len(unused)) else: output('terms use:') for name, ex_names in ordered_iteritems(terms_use): output('%s: %d' % (name, len(ex_names))) if not options.counts: for ex_name in sorted(ex_names): output(' ' + ex_name)