def build_sparse_grid_cpp( quadrature_rule_1d, basis, domain, f, num_dims, max_level, max_num_points, tolerance = 0., test_pts = None, test_vals = None, breaks = None ): tpqr = get_tensor_product_quadrature_rule_single( num_dims, quadrature_rule_1d, basis ) sg = GeneralisedSparseGrid() sg.quantities_of_interest( numpy.array( [0], dtype = numpy.int32 ) ) sg.tolerance( 0.0 ) sg.max_num_points( max_num_points ) sg.max_level( max_level ) break_cnt = 0 if breaks is None: breaks = numpy.logspace( 1, numpy.log10( max_num_points ), 10 ) if test_pts is not None and test_vals is None: test_vals = f( test_pts ).squeeze() error = [] num_pts = [] sg.initialise( f, domain, tpqr, 0 ) #sg.build() sg.initialise_build(); while ( True ): sg.prioritise(); if ( not sg.grid_warrants_refinement() ): break; sg.refine(); if ( test_pts is not None and break_cnt < breaks.shape[0] and sg.num_points() > breaks[break_cnt] ): pred_vals = sg.evaluate_set( test_pts ).squeeze() l2_error = get_l2_error( test_vals, pred_vals ) error.append( l2_error ) num_pts.append( sg.num_points() ) #print 'e', error #print 'n', sg.num_points() break_cnt += 1 tmp = SubSpaceVector() sg.get_subspaces( tmp ) if ( test_pts is not None ): pred_vals = sg.evaluate_set( test_pts ).squeeze() l2_error = get_l2_error( test_vals, pred_vals ) error.append( l2_error ) num_pts.append( sg.num_points() ) return sg, numpy.asarray( error ), numpy.asarray( num_pts )