def __call__(self, volume, problem=None, data=None): problem = get_default(problem, self.problem) dim, sym = problem.get_dim(get_sym=True) filename = self.set_variables(None, 0, 0, 'filename', **data) ts = TimeStepper(*HDF5MeshIO(filename).read_time_stepper()) coef = nm.zeros((ts.n_step, sym), dtype=self.dtype) term_mode = self.term_mode equations, variables = problem.create_evaluable(self.expression, term_mode=term_mode) self.set_variables(variables, None, None, 'col', **data) for ii, (ir, ic) in enumerate(iter_sym(dim)): filename = self.set_variables(None, ir, ic, 'filename', **data) io = HDF5MeshIO(filename) for step, time in ts: self.set_variables(variables, io, step, 'row', **data) val = eval_equations(equations, variables, term_mode=term_mode) coef[step, ii] = val coef /= self._get_volume(volume) return coef
def __call__(self, volume, problem=None, data=None): problem = get_default(problem, self.problem) filename = self.set_variables(None, None, None, 'filename', **data) io = HDF5MeshIO(filename) ts = TimeStepper(*io.read_time_stepper()) coef = nm.zeros((ts.n_step, 1), dtype=self.dtype) term_mode = self.term_mode equations, variables = problem.create_evaluable(self.expression, term_mode=term_mode) self.set_variables(variables, None, None, 'col', **data) for step, time in ts: self.set_variables(variables, io, step, 'row', **data) val = eval_equations(equations, variables, term_mode=term_mode) coef[step] = val coef /= self._get_volume(volume) return coef
def __call__( self, volume, problem = None, data = None ): expression, region_name, aux_eq = self.expression problem = get_default( problem, self.problem ) problem.select_variables( self.variables ) aux = self.get_filename( data ) io = HDF5MeshIO( self.get_filename( data ) ) ts = TimeStepper( *io.read_time_stepper() ) coef = nm.zeros( (ts.n_step, 1), dtype = nm.float64 ) for step, time in ts: step_data = io.read_data( step ) var_name = self.variables[0] c_name = problem.variables[var_name].primary_var_name omega = step_data[c_name].data problem.variables[var_name].set_data(omega) val1 = eval_term_op( None, expression, problem, call_mode = 'd_eval' ) pc = step_data[self.variables[3]].data val2 = eval_boundary_diff_vel_grad( problem, omega, pc, aux_eq, region_name ) coef[step] = val1 + val2 coef /= volume return coef
def from_file_hdf5(filename, var_names): """TODO: do not read entire file, provide data on demand.""" io = HDF5MeshIO(filename) ts = TimeStepper(*io.read_time_stepper()) steps = nm.arange(ts.n_step, dtype=nm.int32) ths = io.read_variables_time_history(var_names, ts) objs = OneTypeList(History) for name, th in ths.iteritems(): hist = History(name, steps=steps, times=ts.times, th=th) objs.append(hist) obj = Histories(objs, dt=ts.dt, name=' '.join(var_names)) return obj
def verify_correctors(self, sign, state0, filename, problem=None): problem = get_default(problem, self.problem) io = HDF5MeshIO(filename) ts = TimeStepper(*io.read_time_stepper()) ts.set_step(0) problem.equations.init_time(ts) variables = self.problem.get_variables() vu, vp = self.dump_variables vdp = self.verify_variables[-1] p0 = sign * state0[vp] format = '====== time %%e (step %%%dd of %%%dd) ====='\ % ((ts.n_digit,) * 2) vv = variables ok = True for step, time in ts: output(format % (time, step + 1, ts.n_step)) data = io.read_data(step) if step == 0: assert_(nm.allclose(data[vp].data, p0)) state0 = problem.create_state() state0.set_full(data[vu].data, vu) state0.set_full(data[vp].data, vp) vv[vdp].set_data(data['d' + vp].data) problem.update_time_stepper(ts) state = problem.solve(state0) state, state0 = state(), state0() err = nla.norm(state - state0) / nla.norm(state0) output(state.min(), state.max()) output(state0.min(), state0.max()) output('>>>>>', err) ok = ok and (err < 1e-12) problem.advance(ts) return ok
def get_correctors_from_file(coefs_filename='coefs.h5', dump_names=None): if dump_names == None: coefs = Coefficients.from_file_hdf5(coefs_filename) if hasattr(coefs, 'dump_names'): dump_names = coefs.dump_names else: raise ValueError(' "filenames" coefficient must be used!') out = {} for key, val in dump_names.iteritems(): corr_name = op.split(val)[-1] io = HDF5MeshIO(val + '.h5') data = io.read_data(0) dkeys = data.keys() corr = {} for dk in dkeys: corr[dk] = data[dk].data.reshape(data[dk].shape) out[corr_name] = corr return out