def __call__(self, state0=None, save_results=True, step_hook=None, post_process_hook=None, nls_status=None): from sfepy.base.base import invert_dict, get_subdict from sfepy.base.resolve_deps import resolve problem = self.problem if state0 is None: state0 = problem.create_state() variables = problem.get_variables() vtos = variables.get_dual_names() vdeps = problem.equations.get_variable_dependencies() sdeps = replace_virtuals(vdeps, vtos) sorder = resolve(sdeps) stov = invert_dict(vtos) vorder = [[stov[ii] for ii in block] for block in sorder] parts0 = state0.get_parts() state = state0.copy() solved = [] for ib, block in enumerate(vorder): output('solving for %s...' % sorder[ib]) subpb = problem.create_subproblem(block, solved) subpb.equations.print_terms() subpb.time_update() substate0 = subpb.create_state() vals = get_subdict(parts0, block) substate0.set_parts(vals) substate = subpb.solve(state0=substate0, nls_status=nls_status) state.set_parts(substate.get_parts()) solved.extend(sorder[ib]) output('...done') if step_hook is not None: step_hook(problem, None, state) if save_results: problem.save_state(problem.get_output_name(), state, post_process_hook=post_process_hook, file_per_var=None) yield 0, 0.0, state
prefixes = { 'p' : 1e-12, 'n' : 1e-9, 'mu' : 1e-6, 'm' : 1e-3, 'c' : 1e-2, '' : 1e0, 'd' : 1e1, 'k' : 1e3, 'M' : 1e6, 'G' : 1e9, 'T' : 1e12, } inv_prefixes = invert_dict(prefixes) num_prefixes = [str(ii) for ii in range(-12, 13)] prefixes.update(dict(((key, 10**int(key)) for key in num_prefixes))) class Unit(Struct): """ A unit of a physical quantity. The prefix and coefficient of the unit are determined from to its name. Examples -------- Construct some units: >>> from sfepy.mechanics.units import Unit >>> unit = Unit('mm')
def _collect_descs(self): cmesh = self.cmesh i2k = invert_dict(cmesh.key_to_index) cts = nm.unique(cmesh.cell_types) self.descs = [i2k[ct] for ct in cts]