def montecarlo(self, V, interface, **kwargs): import _hybridmc as core dims = kwargs.get("Omega") bc = DirichletBC(V, 1.0, interface) coords, keys = tools.get_boundary_coords(bc) dim = len(dims) nof_nodes = len(coords) / dim D = np.array(dims, dtype=np.float_) node_coord = np.array(coords, dtype=np.float_) f = kwargs.get("f") q = kwargs.get("q") walks = kwargs.get("walks", 5000) btol = kwargs.get("btol", 1e-13) threads = kwargs.get("threads", 6) mpi_workers = kwargs.get("mpi_workers", 0) OpenCL = kwargs.get("OpenCL", False) if OpenCL and not core.opencl: print "**** WARNING **** : Module %s compiled without OpenCL supprt. Recompile with -DOPENCL_SUPPORT" % ( __name__ ) print "**** WARNING **** : Running multithread CPU version" OpenCL = False if not OpenCL: f = Expression(f) q = Expression(q) value = core.montecarlo(D, dim, node_coord, nof_nodes, f, q, walks, btol, threads, mpi_workers) est = Function(V) est.vector()[keys] = value mcbc = DirichletBC(V, est, interface) return mcbc, est
def montecarlo(self,V,interface,**kwargs): import _hybridmc as core dims = kwargs.get('Omega') bc = DirichletBC(V,1.0,interface) coords, keys = tools.get_boundary_coords(bc) dim = len(dims) nof_nodes = len(coords)/dim D = self.factory.create('doubleArray') D.double.extend(dims) node_coord = self.factory.create('doubleArray') node_coord.double.extend(coords) f = kwargs.get('f') q = kwargs.get('q') walks = kwargs.get('walks',5000) btol = kwargs.get('btol',1e-13) threads = kwargs.get('threads',6) OpenCL = kwargs.get('OpenCL',False) wrap_value = self.service.montecarlo(D,dim,node_coord,nof_nodes,f,q, walks,btol,threads,OpenCL) value = np.array(wrap_value.double,dtype=np.float_) est = Function(V) est.vector()[keys] = value mcbc = DirichletBC(V,est,interface) return mcbc, est