def __call__( self, diff_var = None, chunk_size = None, **kwargs ): delta, virtual, par, state = self.get_args( **kwargs ) apr, vgr = virtual.get_approximation( self.get_current_group(), 'Volume' ) apc, vgc = state.get_approximation( self.get_current_group(), 'Volume' ) n_el, n_qp, dim, n_epr = apr.get_v_data_shape( self.integral_name ) if diff_var is None: shape = (chunk_size, 1, dim * n_epr, 1 ) mode = 0 elif diff_var == self.get_arg_name( 'state' ): n_epc = apc.get_v_data_shape( self.integral_name )[3] shape = (chunk_size, 1, dim * n_epr, n_epc ) mode = 1 else: raise StopIteration delta_in_el = fix_scalar_in_el( delta, n_el, nm.float64 ) vec1 = par() vec2 = state() bf = apr.get_base( 'v', 0, self.integral_name ) for out, chunk in self.char_fun( chunk_size, shape ): status = self.function( out, vec1, 0, vec2, 0, delta_in_el, bf, vgr, vgc, apr.econn, apc.econn, chunk, mode ) yield out, chunk, status
def __call__( self, diff_var = None, chunk_size = None, **kwargs ): mat, virtual, parameter = self.get_args( **kwargs ) apr, vgr = virtual.get_approximation( self.get_current_group(), 'Volume' ) apc, vgc = parameter.get_approximation( self.get_current_group(), 'Volume' ) n_el, n_qp, dim, n_ep = apr.get_v_data_shape( self.integral_name ) if diff_var is None: shape = (chunk_size, 1, n_ep, 1) mode = 0 else: raise StopIteration mat_in_el = fix_scalar_in_el( mat, n_el, nm.float64 ) bfr = apr.get_base( 'v', 0, self.integral_name ) for out, chunk in self.char_fun( chunk_size, shape ): status = self.function( out, parameter(), mat_in_el, bfr, vgc, apc.econn, chunk, mode ) yield out, chunk, status
def get_fargs( self, diff_var = None, chunk_size = None, **kwargs ): mat, virtual, state = self.get_args( **kwargs ) ap, vg = virtual.get_approximation( self.get_current_group(), 'Volume' ) self.set_data_shape( ap ) shape, mode = self.get_shape( diff_var, chunk_size ) vec = self.get_vector( state ) mat_arg = fix_scalar_constant( mat, nm.float64 ) if mat_arg is None: mat_arg = fix_scalar_in_el( mat, self.data_shape[0], nm.float64 ) self.function = terms.dw_st_pspg_p else: self.function = terms.dw_laplace if state.is_real(): fargs = vec, 0, mat_arg, vg, ap.econn else: ac = nm.ascontiguousarray fargs = [(ac( vec.real ), 0, mat_arg, vg, ap.econn), (ac( vec.imag ), 0, mat_arg, vg, ap.econn)] mode += 1j return fargs, shape, mode