From 6c400bc1a8aa0b3bf4b855003a92a10089ee8c75 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Tue, 6 Jun 2017 20:41:37 -0400 Subject: [PATCH 1/8] Refactor inteq test towards dim-independence --- test/test_layer_pot.py | 108 ++++++++++++++++++++++++----------------- 1 file changed, 64 insertions(+), 44 deletions(-) diff --git a/test/test_layer_pot.py b/test/test_layer_pot.py index dceb0c36..e0ad004e 100644 --- a/test/test_layer_pot.py +++ b/test/test_layer_pot.py @@ -287,13 +287,9 @@ def test_ellipse_eigenvalues(ctx_getter, ellipse_aspect, mode_nr, qbx_order): # {{{ integral equation test backend -def run_int_eq_test( - cl_ctx, queue, curve_f, nelements, qbx_order, bc_type, loc_sign, k, +def run_int_eq_test(cl_ctx, queue, case, resolution, qbx_order, target_order, source_order): - - mesh = make_curve_mesh(curve_f, - np.linspace(0, 1, nelements+1), - target_order) + mesh = case.get_mesh(resolution, target_order) if 0: from pytential.visualization import show_mesh @@ -314,8 +310,8 @@ def run_int_eq_test( refiner_extra_kwargs = {} - if k != 0: - refiner_extra_kwargs["kernel_length_scale"] = 5/k + if case.k != 0: + refiner_extra_kwargs["kernel_length_scale"] = 5/case.k qbx, _ = QBXLayerPotentialSource( pre_density_discr, fine_order=source_order, qbx_order=qbx_order, @@ -331,10 +327,10 @@ def run_int_eq_test( NeumannOperator) from sumpy.kernel import LaplaceKernel, HelmholtzKernel - if k: + if case.k: knl = HelmholtzKernel(2) knl_kwargs = {"k": sym.var("k")} - concrete_knl_kwargs = {"k": k} + concrete_knl_kwargs = {"k": case.k} else: knl = LaplaceKernel(2) knl_kwargs = {} @@ -345,11 +341,11 @@ def run_int_eq_test( else: dtype = np.float64 - if bc_type == "dirichlet": - op = DirichletOperator(knl, loc_sign, use_l2_weighting=True, + if case.bc_type == "dirichlet": + op = DirichletOperator(knl, case.loc_sign, use_l2_weighting=True, kernel_arguments=knl_kwargs) - elif bc_type == "neumann": - op = NeumannOperator(knl, loc_sign, use_l2_weighting=True, + elif case.bc_type == "neumann": + op = NeumannOperator(knl, case.loc_sign, use_l2_weighting=True, use_improved_operator=False, kernel_arguments=knl_kwargs) else: assert False @@ -363,7 +359,7 @@ def run_int_eq_test( inner_radius = 0.1 outer_radius = 2 - if loc_sign < 0: + if case.loc_sign < 0: test_src_geo_radius = outer_radius test_tgt_geo_radius = inner_radius else: @@ -407,11 +403,11 @@ def run_int_eq_test( test_direct = bind((point_source, PointsTarget(test_targets)), pot_src)( queue, charges=source_charges_dev, **concrete_knl_kwargs) - if bc_type == "dirichlet": + if case.bc_type == "dirichlet": bc = bind((point_source, density_discr), pot_src)( queue, charges=source_charges_dev, **concrete_knl_kwargs) - elif bc_type == "neumann": + elif case.bc_type == "neumann": bc = bind( (point_source, density_discr), sym.normal_derivative( @@ -439,7 +435,7 @@ def run_int_eq_test( # {{{ build matrix for spectrum check from sumpy.tools import build_matrix - mat = build_matrix(bound_op.scipy_op("u", dtype=dtype, k=k)) + mat = build_matrix(bound_op.scipy_op("u", dtype=dtype, k=case.k)) w, v = la.eig(mat) if 0: pt.imshow(np.log10(1e-20+np.abs(mat))) @@ -459,7 +455,7 @@ def run_int_eq_test( bound_tgt_op = bind((qbx, PointsTarget(test_targets)), op.representation(sym.var("u"))) - test_via_bdry = bound_tgt_op(queue, u=u, k=k) + test_via_bdry = bound_tgt_op(queue, u=u, k=case.k) err = test_direct-test_via_bdry @@ -469,7 +465,7 @@ def run_int_eq_test( # {{{ remove effect of net source charge - if k == 0 and bc_type == "neumann" and loc_sign == -1: + if case.k == 0 and case.bc_type == "neumann" and case.loc_sign == -1: # remove constant offset in interior Laplace Neumann error tgt_ones = np.ones_like(test_direct) tgt_ones = tgt_ones/la.norm(tgt_ones) @@ -490,7 +486,7 @@ def run_int_eq_test( op.representation( sym.var("u"), map_potentials=lambda pot: sym.tangential_derivative(2, pot), - qbx_forced_limit=loc_sign)) + qbx_forced_limit=case.loc_sign)) #print(bound_t_deriv_op.code) @@ -531,7 +527,7 @@ def run_int_eq_test( fld_from_bdry = bind( (qbx, PointsTarget(fplot.points)), op.representation(sym.var("u")) - )(queue, u=u, k=k) + )(queue, u=u, k=case.k) fld_from_src = fld_from_src.get() fld_from_bdry = fld_from_bdry.get() @@ -554,7 +550,7 @@ def run_int_eq_test( prep() if 1: pt.subplot(131) - pt.title("Field error (loc_sign=%s)" % loc_sign) + pt.title("Field error (loc_sign=%s)" % case.loc_sign) log_err = np.log10(1e-20+np.abs(fld_from_src-fld_from_bdry)) log_err = np.minimum(-3, log_err) fplot.show_scalar_in_matplotlib(log_err, cmap=cmap) @@ -627,24 +623,51 @@ def run_int_eq_test( # {{{ integral equation test frontend -@pytest.mark.parametrize(("curve_name", "curve_f"), [ - # booo-ring. - #("circle", partial(ellipse, 1)), +class IntEqTestCase: + @property + def k(self): + return self.helmholtz_k + + def __str__(self): + return ("name: %s, bc_type: %s, loc_sign: %s, " + "helmholtz_k: %s" + % (self.name, self.bc_type, self.loc_sign, self.helmholtz_k)) + + +class CurveIntEqTestCase(IntEqTestCase): + resolutions = [30, 40, 50] - ("3-to-1 ellipse", partial(ellipse, 3)), + def __init__(self, helmholtz_k, bc_type, loc_sign): + self.helmholtz_k = helmholtz_k + self.bc_type = bc_type + self.loc_sign = loc_sign - # underresolved at resolutions that take tolerable time - #("starfish", starfish), + def get_mesh(self, resolution, target_order): + return make_curve_mesh( + self.curve_func, + np.linspace(0, 1, resolution+1), + target_order) + + +class EllipseIntEqTestCase(CurveIntEqTestCase): + name = "3-to-1 ellipse" + + def curve_func(self, x): + return ellipse(3, x) + + +@pytest.mark.parametrize("case", [ + EllipseIntEqTestCase(helmholtz_k=helmholtz_k, bc_type=bc_type, + loc_sign=loc_sign) + for helmholtz_k in [0, 1.2] + for bc_type in ["dirichlet", "neumann"] + for loc_sign in [-1, +1] ]) -@pytest.mark.parametrize("k", [0, 1.2]) -@pytest.mark.parametrize("bc_type", ["dirichlet", "neumann"]) -@pytest.mark.parametrize("loc_sign", [+1, -1]) @pytest.mark.parametrize("qbx_order", [5]) # Sample test run: -# 'test_integral_equation(cl._csc, "circle", circle, 5, "dirichlet", +1, 5)' +# 'test_integral_equation(cl._csc, EllipseIntEqTestCase(0, "dirichlet", +1), 5)' # noqa: E501 def test_integral_equation( - ctx_getter, curve_name, curve_f, qbx_order, bc_type, loc_sign, k, - target_order=7, source_order=None): + ctx_getter, case, qbx_order, target_order=7, source_order=None): logging.basicConfig(level=logging.INFO) cl_ctx = ctx_getter() @@ -655,25 +678,22 @@ def test_integral_equation( clear_cache() from pytools.convergence import EOCRecorder - print(("curve_name: %s, qbx_order: %d, bc_type: %s, loc_sign: %s, " - "helmholtz_k: %s" - % (curve_name, qbx_order, bc_type, loc_sign, k))) + print("qbx_order: %d, %s" % (qbx_order, case)) eoc_rec_target = EOCRecorder() eoc_rec_td = EOCRecorder() - for nelements in [30, 40, 50]: + for resolution in case.resolutions: result = run_int_eq_test( - cl_ctx, queue, curve_f, nelements, qbx_order, - bc_type, loc_sign, k, target_order=target_order, - source_order=source_order) + cl_ctx, queue, case, resolution, qbx_order, + target_order=target_order, source_order=source_order) eoc_rec_target.add_data_point(result.h_max, result.rel_err_2) eoc_rec_td.add_data_point(result.h_max, result.rel_td_err_inf) - if bc_type == "dirichlet": + if case.bc_type == "dirichlet": tgt_order = qbx_order - elif bc_type == "neumann": + elif case.bc_type == "neumann": tgt_order = qbx_order-1 else: assert False -- GitLab From 33a591ed8658c8576b319fe101f283c229124663 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Tue, 6 Jun 2017 21:55:25 -0400 Subject: [PATCH 2/8] Towards generalizing the inteq test to 3D --- test/test_layer_pot.py | 67 +++++++++++++++++++++++++++++++++--------- 1 file changed, 53 insertions(+), 14 deletions(-) diff --git a/test/test_layer_pot.py b/test/test_layer_pot.py index e0ad004e..b4a8adf9 100644 --- a/test/test_layer_pot.py +++ b/test/test_layer_pot.py @@ -50,11 +50,12 @@ except ImportError: pass -def make_circular_point_group(npoints, radius, +def make_circular_point_group(ambient_dim, npoints, radius, center=np.array([0., 0.]), func=lambda x: x): t = func(np.linspace(0, 1, npoints, endpoint=False)) * (2 * np.pi) center = np.asarray(center) - result = center[:, np.newaxis] + radius*np.vstack((np.cos(t), np.sin(t))) + result = np.zeros((ambient_dim, npoints)) + result[:2, :] = center[:, np.newaxis] + radius*np.vstack((np.cos(t), np.sin(t))) return result @@ -313,10 +314,18 @@ def run_int_eq_test(cl_ctx, queue, case, resolution, qbx_order, if case.k != 0: refiner_extra_kwargs["kernel_length_scale"] = 5/case.k - qbx, _ = QBXLayerPotentialSource( + if case.fmm_backend is None: + fmm_order = False + else: + fmm_order = qbx_order + 10 + + qbx = QBXLayerPotentialSource( pre_density_discr, fine_order=source_order, qbx_order=qbx_order, # Don't use FMM for now - fmm_order=False).with_refinement(**refiner_extra_kwargs) + fmm_order=fmm_order, fmm_backend=case.fmm_backend) + + if case.use_refinement: + qbx, _ = qbx.with_refinement(**refiner_extra_kwargs) density_discr = qbx.density_discr @@ -328,11 +337,11 @@ def run_int_eq_test(cl_ctx, queue, case, resolution, qbx_order, from sumpy.kernel import LaplaceKernel, HelmholtzKernel if case.k: - knl = HelmholtzKernel(2) + knl = HelmholtzKernel(mesh.ambient_dim) knl_kwargs = {"k": sym.var("k")} concrete_knl_kwargs = {"k": case.k} else: - knl = LaplaceKernel(2) + knl = LaplaceKernel(mesh.ambient_dim) knl_kwargs = {} concrete_knl_kwargs = {} @@ -346,7 +355,8 @@ def run_int_eq_test(cl_ctx, queue, case, resolution, qbx_order, kernel_arguments=knl_kwargs) elif case.bc_type == "neumann": op = NeumannOperator(knl, case.loc_sign, use_l2_weighting=True, - use_improved_operator=False, kernel_arguments=knl_kwargs) + use_improved_operator=False, kernel_arguments=knl_kwargs, + alpha=case.neumann_alpha) else: assert False @@ -366,9 +376,11 @@ def run_int_eq_test(cl_ctx, queue, case, resolution, qbx_order, test_src_geo_radius = inner_radius test_tgt_geo_radius = outer_radius - point_sources = make_circular_point_group(10, test_src_geo_radius, + point_sources = make_circular_point_group( + mesh.ambient_dim, 10, test_src_geo_radius, func=lambda x: x**1.5) - test_targets = make_circular_point_group(20, test_tgt_geo_radius) + test_targets = make_circular_point_group( + mesh.ambient_dim, 20, test_tgt_geo_radius) np.random.seed(22) source_charges = np.random.randn(point_sources.shape[1]) @@ -624,6 +636,11 @@ def run_int_eq_test(cl_ctx, queue, case, resolution, qbx_order, # {{{ integral equation test frontend class IntEqTestCase: + def __init__(self, helmholtz_k, bc_type, loc_sign): + self.helmholtz_k = helmholtz_k + self.bc_type = bc_type + self.loc_sign = loc_sign + @property def k(self): return self.helmholtz_k @@ -633,21 +650,22 @@ class IntEqTestCase: "helmholtz_k: %s" % (self.name, self.bc_type, self.loc_sign, self.helmholtz_k)) + fmm_backend = "sumpy" + class CurveIntEqTestCase(IntEqTestCase): resolutions = [30, 40, 50] - def __init__(self, helmholtz_k, bc_type, loc_sign): - self.helmholtz_k = helmholtz_k - self.bc_type = bc_type - self.loc_sign = loc_sign - def get_mesh(self, resolution, target_order): return make_curve_mesh( self.curve_func, np.linspace(0, 1, resolution+1), target_order) + fmm_backend = None + use_refinement = True + neumann_alpha = None # default + class EllipseIntEqTestCase(CurveIntEqTestCase): name = "3-to-1 ellipse" @@ -656,6 +674,27 @@ class EllipseIntEqTestCase(CurveIntEqTestCase): return ellipse(3, x) +class EllipsoidIntEqTestCase(IntEqTestCase): + resolutions = [2, 1, 0.5] + name = "ellipsoid" + + def get_mesh(self, resolution, target_order): + from meshmode.mesh.io import generate_gmsh, FileSource + mesh = generate_gmsh( + FileSource("ellipsoid.step"), 2, order=2, + other_options=[ + "-string", + "Mesh.CharacteristicLengthMax = %g;" % resolution]) + + from meshmode.mesh.processing import perform_flips + # Flip elements--gmsh generates inside-out geometry. + return perform_flips(mesh, np.ones(mesh.nelements)) + + fmm_backend = "fmmlib" + use_refinement = False + neumann_alpha = 0 # no double layers in FMMlib backend yet + + @pytest.mark.parametrize("case", [ EllipseIntEqTestCase(helmholtz_k=helmholtz_k, bc_type=bc_type, loc_sign=loc_sign) -- GitLab From 09933c05df8529c8448df1f55d3d293ac6faeac8 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Wed, 7 Jun 2017 16:42:12 -0500 Subject: [PATCH 3/8] Adapt scaling of FMMlib Green's fucntion to the rest of Pytential --- pytential/qbx/fmmlib.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pytential/qbx/fmmlib.py b/pytential/qbx/fmmlib.py index 14d523f1..fd1dc4db 100644 --- a/pytential/qbx/fmmlib.py +++ b/pytential/qbx/fmmlib.py @@ -418,7 +418,13 @@ class QBXFMMLibHelmholtzExpansionWrangler(HelmholtzExpansionWrangler): return output def finalize_potential(self, potential): - return cl.array.to_device(self.queue, potential) + if self.dim == 3: + scale_factor = 1/(4*np.pi) + else: + raise NotImplementedError( + "scale factor for pyfmmlib for %d dimensions" % self.dim) + + return cl.array.to_device(self.queue, potential) * scale_factor # }}} -- GitLab From 5e2255da7814a51bbabcdaa3925421f46ccd270d Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Wed, 7 Jun 2017 17:00:05 -0500 Subject: [PATCH 4/8] Add pyfmmlib as a build-time requirement to support 3D Helmholtz test --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index b8bf37d2..cdd2c65a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,3 +8,4 @@ git+https://github.com/inducer/loopy git+https://github.com/inducer/boxtree git+https://github.com/inducer/meshmode git+https://github.com/inducer/sumpy +git+https://github.com/inducer/pyfmmlib -- GitLab From 3ae721120e5e7eac5272da3c321e3e8943f9b848 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Wed, 7 Jun 2017 17:09:40 -0500 Subject: [PATCH 5/8] Add 3D Helmholtz FMMlib Neumann test --- test/test_layer_pot.py | 245 ++++++++++++++++++++++++++++------------- 1 file changed, 170 insertions(+), 75 deletions(-) diff --git a/test/test_layer_pot.py b/test/test_layer_pot.py index b4a8adf9..30a9b288 100644 --- a/test/test_layer_pot.py +++ b/test/test_layer_pot.py @@ -288,26 +288,19 @@ def test_ellipse_eigenvalues(ctx_getter, ellipse_aspect, mode_nr, qbx_order): # {{{ integral equation test backend -def run_int_eq_test(cl_ctx, queue, case, resolution, qbx_order, - target_order, source_order): - mesh = case.get_mesh(resolution, target_order) - - if 0: - from pytential.visualization import show_mesh - show_mesh(mesh) - - pt.gca().set_aspect("equal") - pt.show() +def run_int_eq_test(cl_ctx, queue, case, resolution): + mesh = case.get_mesh(resolution, case.target_order) + print("%d elements" % mesh.nelements) from pytential.qbx import QBXLayerPotentialSource from meshmode.discretization import Discretization from meshmode.discretization.poly_element import \ InterpolatoryQuadratureSimplexGroupFactory pre_density_discr = Discretization( - cl_ctx, mesh, InterpolatoryQuadratureSimplexGroupFactory(target_order)) + cl_ctx, mesh, + InterpolatoryQuadratureSimplexGroupFactory(case.target_order)) - if source_order is None: - source_order = 4*target_order + source_order = 4*case.target_order refiner_extra_kwargs = {} @@ -317,11 +310,10 @@ def run_int_eq_test(cl_ctx, queue, case, resolution, qbx_order, if case.fmm_backend is None: fmm_order = False else: - fmm_order = qbx_order + 10 + fmm_order = case.qbx_order + 5 qbx = QBXLayerPotentialSource( - pre_density_discr, fine_order=source_order, qbx_order=qbx_order, - # Don't use FMM for now + pre_density_discr, fine_order=source_order, qbx_order=case.qbx_order, fmm_order=fmm_order, fmm_backend=case.fmm_backend) if case.use_refinement: @@ -329,6 +321,35 @@ def run_int_eq_test(cl_ctx, queue, case, resolution, qbx_order, density_discr = qbx.density_discr + # {{{ plot geometry + + if 0: + if mesh.ambient_dim == 2: + # show geometry, centers, normals + nodes_h = density_discr.nodes().get(queue=queue) + pt.plot(nodes_h[0], nodes_h[1], "x-") + normal = bind(density_discr, sym.normal(2))(queue).as_vector(np.object) + pt.quiver(nodes_h[0], nodes_h[1], + normal[0].get(queue), normal[1].get(queue)) + pt.gca().set_aspect("equal") + pt.show() + + elif mesh.ambient_dim == 3: + from meshmode.discretization.visualization import make_visualizer + bdry_vis = make_visualizer(queue, density_discr, case.target_order) + + bdry_normals = bind(density_discr, sym.normal(3))(queue)\ + .as_vector(dtype=object) + + bdry_vis.write_vtk_file("source-%s.vtu" % resolution, [ + ("bdry_normals", bdry_normals), + ]) + + else: + raise ValueError("invalid mesh dim") + + # }}} + # {{{ set up operator from pytential.symbolic.pde.scalar import ( @@ -366,15 +387,12 @@ def run_int_eq_test(cl_ctx, queue, case, resolution, qbx_order, # {{{ set up test data - inner_radius = 0.1 - outer_radius = 2 - if case.loc_sign < 0: - test_src_geo_radius = outer_radius - test_tgt_geo_radius = inner_radius + test_src_geo_radius = case.outer_radius + test_tgt_geo_radius = case.inner_radius else: - test_src_geo_radius = inner_radius - test_tgt_geo_radius = outer_radius + test_src_geo_radius = case.inner_radius + test_tgt_geo_radius = case.outer_radius point_sources = make_circular_point_group( mesh.ambient_dim, 10, test_src_geo_radius, @@ -392,15 +410,6 @@ def run_int_eq_test(cl_ctx, queue, case, resolution, qbx_order, # }}} - if 0: - # show geometry, centers, normals - nodes_h = density_discr.nodes().get(queue=queue) - pt.plot(nodes_h[0], nodes_h[1], "x-") - normal = bind(density_discr, sym.normal(2))(queue).as_vector(np.object) - pt.quiver(nodes_h[0], nodes_h[1], normal[0].get(queue), normal[1].get(queue)) - pt.gca().set_aspect("equal") - pt.show() - # {{{ establish BCs from pytential.source import PointPotentialSource @@ -437,15 +446,19 @@ def run_int_eq_test(cl_ctx, queue, case, resolution, qbx_order, from pytential.solve import gmres gmres_result = gmres( bound_op.scipy_op(queue, "u", dtype, **concrete_knl_kwargs), - rhs, tol=1e-14, progress=True, - hard_failure=False) + rhs, + tol=case.gmres_tol, + progress=True, + hard_failure=True) - u = gmres_result.solution print("gmres state:", gmres_result.state) + u = gmres_result.solution - if 0: - # {{{ build matrix for spectrum check + # }}} + # {{{ build matrix for spectrum check + + if 0: from sumpy.tools import build_matrix mat = build_matrix(bound_op.scipy_op("u", dtype=dtype, k=case.k)) w, v = la.eig(mat) @@ -458,8 +471,6 @@ def run_int_eq_test(cl_ctx, queue, case, resolution, qbx_order, #assert abs(s[-2]) > 1e-7 #from pudb import set_trace; set_trace() - # }}} - # }}} # {{{ error check @@ -478,6 +489,7 @@ def run_int_eq_test(cl_ctx, queue, case, resolution, qbx_order, # {{{ remove effect of net source charge if case.k == 0 and case.bc_type == "neumann" and case.loc_sign == -1: + # remove constant offset in interior Laplace Neumann error tgt_ones = np.ones_like(test_direct) tgt_ones = tgt_ones/la.norm(tgt_ones) @@ -494,37 +506,97 @@ def run_int_eq_test(cl_ctx, queue, case, resolution, qbx_order, # {{{ test tangential derivative - bound_t_deriv_op = bind(qbx, - op.representation( - sym.var("u"), - map_potentials=lambda pot: sym.tangential_derivative(2, pot), - qbx_forced_limit=case.loc_sign)) + if case.check_tangential_deriv: + bound_t_deriv_op = bind(qbx, + op.representation( + sym.var("u"), + map_potentials=lambda pot: sym.tangential_derivative(2, pot), + qbx_forced_limit=case.loc_sign)) - #print(bound_t_deriv_op.code) + #print(bound_t_deriv_op.code) - tang_deriv_from_src = bound_t_deriv_op( - queue, u=u, **concrete_knl_kwargs).as_scalar().get() + tang_deriv_from_src = bound_t_deriv_op( + queue, u=u, **concrete_knl_kwargs).as_scalar().get() - tang_deriv_ref = (bind( - (point_source, density_discr), - sym.tangential_derivative(2, pot_src) - )(queue, charges=source_charges_dev, **concrete_knl_kwargs) - .as_scalar().get()) + tang_deriv_ref = (bind( + (point_source, density_discr), + sym.tangential_derivative(2, pot_src) + )(queue, charges=source_charges_dev, **concrete_knl_kwargs) + .as_scalar().get()) - if 0: - pt.plot(tang_deriv_ref.real) - pt.plot(tang_deriv_from_src.real) - pt.show() + if 0: + pt.plot(tang_deriv_ref.real) + pt.plot(tang_deriv_from_src.real) + pt.show() + + td_err = (tang_deriv_from_src - tang_deriv_ref) - td_err = (tang_deriv_from_src - tang_deriv_ref) + rel_td_err_inf = la.norm(td_err, np.inf)/la.norm(tang_deriv_ref, np.inf) - rel_td_err_inf = la.norm(td_err, np.inf)/la.norm(tang_deriv_ref, np.inf) + print("rel_td_err_inf: %g" % rel_td_err_inf) - print("rel_td_err_inf: %g" % rel_td_err_inf) + else: + rel_td_err_inf = None # }}} - # {{{ plotting + # {{{ 3D plotting + + if 0: + from meshmode.discretization.visualization import make_visualizer + bdry_vis = make_visualizer(queue, density_discr, case.target_order) + + bdry_normals = bind(density_discr, sym.normal(3))(queue)\ + .as_vector(dtype=object) + + bdry_vis.write_vtk_file("source-%s.vtu" % resolution, [ + ("u", u), + ("bc", bc), + ("bdry_normals", bdry_normals), + ]) + + from meshmode.mesh.processing import find_bounding_box + bbox_min, bbox_max = find_bounding_box(mesh) + bbox_center = 0.5*(bbox_min+bbox_max) + bbox_size = max(bbox_max-bbox_min) / 2 + fplot = FieldPlotter( + bbox_center, extent=2*2*bbox_size, npoints=(150, 150, 1)) + + qbx_stick_out = qbx.copy(target_stick_out_factor=0.15) + from pytential.target import PointsTarget + from pytential.qbx import QBXTargetAssociationFailedException + + try: + solved_pot = bind( + (qbx_stick_out, PointsTarget(fplot.points)), + op.representation(sym.var("u")) + )(queue, u=u, k=case.k) + except QBXTargetAssociationFailedException as e: + fplot.write_vtk_file( + "failed-targets.vts", + [ + ("failed_targets", e.failed_target_flags.get(queue)) + ]) + raise + + solved_pot = solved_pot.get() + + true_pot = bind((point_source, PointsTarget(fplot.points)), pot_src)( + queue, charges=source_charges_dev, **concrete_knl_kwargs).get() + + #fplot.show_scalar_in_mayavi(solved_pot.real, max_val=5) + fplot.write_vtk_file( + "potential.vts", + [ + ("solved_pot", solved_pot), + ("true_pot", true_pot), + ("pot_diff", solved_pot-true_pot), + ] + ) + + # }}} + + # {{{ 2D plotting if 0: fplot = FieldPlotter(np.zeros(2), @@ -647,10 +719,12 @@ class IntEqTestCase: def __str__(self): return ("name: %s, bc_type: %s, loc_sign: %s, " - "helmholtz_k: %s" - % (self.name, self.bc_type, self.loc_sign, self.helmholtz_k)) + "helmholtz_k: %s, qbx_order: %d, target_order: %d" + % (self.name, self.bc_type, self.loc_sign, self.helmholtz_k, + self.qbx_order, self.target_order)) fmm_backend = "sumpy" + gmres_tol = 1e-14 class CurveIntEqTestCase(IntEqTestCase): @@ -666,6 +740,14 @@ class CurveIntEqTestCase(IntEqTestCase): use_refinement = True neumann_alpha = None # default + inner_radius = 0.1 + outer_radius = 2 + + qbx_order = 5 + target_order = qbx_order + + check_tangential_deriv = True + class EllipseIntEqTestCase(CurveIntEqTestCase): name = "3-to-1 ellipse" @@ -675,7 +757,7 @@ class EllipseIntEqTestCase(CurveIntEqTestCase): class EllipsoidIntEqTestCase(IntEqTestCase): - resolutions = [2, 1, 0.5] + resolutions = [2, 1] name = "ellipsoid" def get_mesh(self, resolution, target_order): @@ -694,6 +776,17 @@ class EllipsoidIntEqTestCase(IntEqTestCase): use_refinement = False neumann_alpha = 0 # no double layers in FMMlib backend yet + inner_radius = 0.4 + outer_radius = 5 + + qbx_order = 2 + target_order = qbx_order + check_tangential_deriv = False + + # We're only expecting three digits based on FMM settings. Who are we + # kidding? + gmres_tol = 1e-5 + @pytest.mark.parametrize("case", [ EllipseIntEqTestCase(helmholtz_k=helmholtz_k, bc_type=bc_type, @@ -701,12 +794,13 @@ class EllipsoidIntEqTestCase(IntEqTestCase): for helmholtz_k in [0, 1.2] for bc_type in ["dirichlet", "neumann"] for loc_sign in [-1, +1] + ] + [ + EllipsoidIntEqTestCase(0.7, "neumann", +1) ]) @pytest.mark.parametrize("qbx_order", [5]) # Sample test run: # 'test_integral_equation(cl._csc, EllipseIntEqTestCase(0, "dirichlet", +1), 5)' # noqa: E501 -def test_integral_equation( - ctx_getter, case, qbx_order, target_order=7, source_order=None): +def test_integral_equation(ctx_getter, case): logging.basicConfig(level=logging.INFO) cl_ctx = ctx_getter() @@ -717,23 +811,23 @@ def test_integral_equation( clear_cache() from pytools.convergence import EOCRecorder - print("qbx_order: %d, %s" % (qbx_order, case)) + print("qbx_order: %d, %s" % (case.qbx_order, case)) eoc_rec_target = EOCRecorder() eoc_rec_td = EOCRecorder() for resolution in case.resolutions: - result = run_int_eq_test( - cl_ctx, queue, case, resolution, qbx_order, - target_order=target_order, source_order=source_order) + result = run_int_eq_test(cl_ctx, queue, case, resolution) eoc_rec_target.add_data_point(result.h_max, result.rel_err_2) - eoc_rec_td.add_data_point(result.h_max, result.rel_td_err_inf) + + if result.rel_td_err_inf is not None: + eoc_rec_td.add_data_point(result.h_max, result.rel_td_err_inf) if case.bc_type == "dirichlet": - tgt_order = qbx_order + tgt_order = case.qbx_order elif case.bc_type == "neumann": - tgt_order = qbx_order-1 + tgt_order = case.qbx_order-1 else: assert False @@ -741,9 +835,10 @@ def test_integral_equation( print(eoc_rec_target) assert eoc_rec_target.order_estimate() > tgt_order - 1.3 - print("TANGENTIAL DERIVATIVE ERROR:") - print(eoc_rec_td) - assert eoc_rec_td.order_estimate() > tgt_order - 2.3 + if case.check_tangential_deriv: + print("TANGENTIAL DERIVATIVE ERROR:") + print(eoc_rec_td) + assert eoc_rec_td.order_estimate() > tgt_order - 2.3 # }}} -- GitLab From 0c200cb4de8191f60d50c144692093797ccbe443 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Wed, 7 Jun 2017 17:21:22 -0500 Subject: [PATCH 6/8] Remove now-extraneous qbx_order pytest arg from test_integral_equation --- test/test_layer_pot.py | 1 - 1 file changed, 1 deletion(-) diff --git a/test/test_layer_pot.py b/test/test_layer_pot.py index 30a9b288..606304da 100644 --- a/test/test_layer_pot.py +++ b/test/test_layer_pot.py @@ -797,7 +797,6 @@ class EllipsoidIntEqTestCase(IntEqTestCase): ] + [ EllipsoidIntEqTestCase(0.7, "neumann", +1) ]) -@pytest.mark.parametrize("qbx_order", [5]) # Sample test run: # 'test_integral_equation(cl._csc, EllipseIntEqTestCase(0, "dirichlet", +1), 5)' # noqa: E501 def test_integral_equation(ctx_getter, case): -- GitLab From af386ea84a0b1566b37becb4c11ad63b1229a57c Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Wed, 7 Jun 2017 18:15:15 -0500 Subject: [PATCH 7/8] Add missing test geometries --- test/ellipsoid.step | 138 ++++ test/rounded-cube.step | 1611 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1749 insertions(+) create mode 100644 test/ellipsoid.step create mode 100644 test/rounded-cube.step diff --git a/test/ellipsoid.step b/test/ellipsoid.step new file mode 100644 index 00000000..883cd89f --- /dev/null +++ b/test/ellipsoid.step @@ -0,0 +1,138 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('FreeCAD Model'),'2;1'); +FILE_NAME('/home/andreas/ellipsoid.step','2017-06-05T10:39:15',('Author' + ),(''),'Open CASCADE STEP processor 6.8','FreeCAD','Unknown'); +FILE_SCHEMA(('AUTOMOTIVE_DESIGN_CC2 { 1 2 10303 214 -1 1 5 4 }')); +ENDSEC; +DATA; +#1 = APPLICATION_PROTOCOL_DEFINITION('committee draft', + 'automotive_design',1997,#2); +#2 = APPLICATION_CONTEXT( + 'core data for automotive mechanical design processes'); +#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10); +#4 = PRODUCT_DEFINITION_SHAPE('','',#5); +#5 = PRODUCT_DEFINITION('design','',#6,#9); +#6 = PRODUCT_DEFINITION_FORMATION('','',#7); +#7 = PRODUCT('ASSEMBLY','ASSEMBLY','',(#8)); +#8 = MECHANICAL_CONTEXT('',#2,'mechanical'); +#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#10 = SHAPE_REPRESENTATION('',(#11,#15),#19); +#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14); +#12 = CARTESIAN_POINT('',(0.,0.,0.)); +#13 = DIRECTION('',(0.,0.,1.)); +#14 = DIRECTION('',(1.,0.,-0.)); +#15 = AXIS2_PLACEMENT_3D('',#16,#17,#18); +#16 = CARTESIAN_POINT('',(0.,0.,0.)); +#17 = DIRECTION('',(0.,0.,1.)); +#18 = DIRECTION('',(1.,0.,0.)); +#19 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#23)) GLOBAL_UNIT_ASSIGNED_CONTEXT( +(#20,#21,#22)) REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#20 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#21 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#22 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#23 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#20, + 'distance_accuracy_value','confusion accuracy'); +#24 = PRODUCT_TYPE('part',$,(#7)); +#25 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#26),#69); +#26 = MANIFOLD_SOLID_BREP('',#27); +#27 = CLOSED_SHELL('',(#28)); +#28 = ADVANCED_FACE('',(#29),#33,.T.); +#29 = FACE_BOUND('',#30,.T.); +#30 = VERTEX_LOOP('',#31); +#31 = VERTEX_POINT('',#32); +#32 = CARTESIAN_POINT('',(2.449293598295E-16,-5.999039130647E-32,-2.)); +#33 = ( BOUNDED_SURFACE() B_SPLINE_SURFACE(2,2,( + (#34,#35,#36,#37,#38) + ,(#39,#40,#41,#42,#43) + ,(#44,#45,#46,#47,#48) + ,(#49,#50,#51,#52,#53) + ,(#54,#55,#56,#57,#58) + ,(#59,#60,#61,#62,#63) + ,(#64,#65,#66,#67,#68 +)),.UNSPECIFIED.,.T.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((1,2,2,2,2,1), + (3,2,3),(-2.094395102393,0.,2.094395102393,4.188790204786, + 6.28318530718,8.377580409573),(-1.570796326795,0.,1.570796326795), +.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE +(( + (1.,0.707106781187,1.,0.707106781187,1.) + ,(0.5,0.353553390593,0.5,0.353553390593,0.5) + ,(1.,0.707106781187,1.,0.707106781187,1.) + ,(0.5,0.353553390593,0.5,0.353553390593,0.5) + ,(1.,0.707106781187,1.,0.707106781187,1.) + ,(0.5,0.353553390593,0.5,0.353553390593,0.5) +,(1.,0.707106781187,1.,0.707106781187,1. +))) REPRESENTATION_ITEM('') SURFACE() ); +#34 = CARTESIAN_POINT('',(2.449293598295E-16,0.,-2.)); +#35 = CARTESIAN_POINT('',(4.,0.,-2.)); +#36 = CARTESIAN_POINT('',(4.,0.,0.)); +#37 = CARTESIAN_POINT('',(4.,0.,2.)); +#38 = CARTESIAN_POINT('',(2.449293598295E-16,0.,2.)); +#39 = CARTESIAN_POINT('',(2.449293598295E-16,4.2423009549E-16,-2.)); +#40 = CARTESIAN_POINT('',(4.,6.928203230276,-2.)); +#41 = CARTESIAN_POINT('',(4.,6.928203230276,0.)); +#42 = CARTESIAN_POINT('',(4.,6.928203230276,2.)); +#43 = CARTESIAN_POINT('',(2.449293598295E-16,4.2423009549E-16,2.)); +#44 = CARTESIAN_POINT('',(-1.224646799147E-16,2.12115047745E-16,-2.)); +#45 = CARTESIAN_POINT('',(-2.,3.464101615138,-2.)); +#46 = CARTESIAN_POINT('',(-2.,3.464101615138,0.)); +#47 = CARTESIAN_POINT('',(-2.,3.464101615138,2.)); +#48 = CARTESIAN_POINT('',(-1.224646799147E-16,2.12115047745E-16,2.)); +#49 = CARTESIAN_POINT('',(-4.898587196589E-16,5.999039130647E-32,-2.)); +#50 = CARTESIAN_POINT('',(-8.,9.797174393179E-16,-2.)); +#51 = CARTESIAN_POINT('',(-8.,9.797174393179E-16,0.)); +#52 = CARTESIAN_POINT('',(-8.,9.797174393179E-16,2.)); +#53 = CARTESIAN_POINT('',(-4.898587196589E-16,5.999039130647E-32,2.)); +#54 = CARTESIAN_POINT('',(-1.224646799147E-16,-2.12115047745E-16,-2.)); +#55 = CARTESIAN_POINT('',(-2.,-3.464101615138,-2.)); +#56 = CARTESIAN_POINT('',(-2.,-3.464101615138,0.)); +#57 = CARTESIAN_POINT('',(-2.,-3.464101615138,2.)); +#58 = CARTESIAN_POINT('',(-1.224646799147E-16,-2.12115047745E-16,2.)); +#59 = CARTESIAN_POINT('',(2.449293598295E-16,-4.2423009549E-16,-2.)); +#60 = CARTESIAN_POINT('',(4.,-6.928203230276,-2.)); +#61 = CARTESIAN_POINT('',(4.,-6.928203230276,0.)); +#62 = CARTESIAN_POINT('',(4.,-6.928203230276,2.)); +#63 = CARTESIAN_POINT('',(2.449293598295E-16,-4.2423009549E-16,2.)); +#64 = CARTESIAN_POINT('',(2.449293598295E-16,0.,-2.)); +#65 = CARTESIAN_POINT('',(4.,0.,-2.)); +#66 = CARTESIAN_POINT('',(4.,0.,0.)); +#67 = CARTESIAN_POINT('',(4.,0.,2.)); +#68 = CARTESIAN_POINT('',(2.449293598295E-16,0.,2.)); +#69 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#73)) GLOBAL_UNIT_ASSIGNED_CONTEXT( +(#70,#71,#72)) REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#70 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#71 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#72 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#73 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#70, + 'distance_accuracy_value','confusion accuracy'); +#74 = SHAPE_DEFINITION_REPRESENTATION(#75,#25); +#75 = PRODUCT_DEFINITION_SHAPE('','',#76); +#76 = PRODUCT_DEFINITION('design','',#77,#80); +#77 = PRODUCT_DEFINITION_FORMATION('','',#78); +#78 = PRODUCT('Ellipsoid','Ellipsoid','',(#79)); +#79 = MECHANICAL_CONTEXT('',#2,'mechanical'); +#80 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#81 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#82,#84); +#82 = ( REPRESENTATION_RELATIONSHIP('','',#25,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#83) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#83 = ITEM_DEFINED_TRANSFORMATION('','',#11,#15); +#84 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#85); +#85 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('1','=>[0:1:1:2]','',#5,#76,$); +#86 = PRODUCT_TYPE('part',$,(#78)); +#87 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#88), + #69); +#88 = STYLED_ITEM('color',(#89),#28); +#89 = PRESENTATION_STYLE_ASSIGNMENT((#90)); +#90 = SURFACE_STYLE_USAGE(.BOTH.,#91); +#91 = SURFACE_SIDE_STYLE('',(#92)); +#92 = SURFACE_STYLE_FILL_AREA(#93); +#93 = FILL_AREA_STYLE('',(#94)); +#94 = FILL_AREA_STYLE_COLOUR('',#95); +#95 = COLOUR_RGB('',0.800000011921,0.800000011921,0.800000011921); +ENDSEC; +END-ISO-10303-21; diff --git a/test/rounded-cube.step b/test/rounded-cube.step new file mode 100644 index 00000000..bcf8b321 --- /dev/null +++ b/test/rounded-cube.step @@ -0,0 +1,1611 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('FreeCAD Model'),'2;1'); +FILE_NAME('/home/andreas/rounded-cube.step','2017-03-02T01:19:49',( + 'Author'),(''),'Open CASCADE STEP processor 6.8','FreeCAD','Unknown' + ); +FILE_SCHEMA(('AUTOMOTIVE_DESIGN_CC2 { 1 2 10303 214 -1 1 5 4 }')); +ENDSEC; +DATA; +#1 = APPLICATION_PROTOCOL_DEFINITION('committee draft', + 'automotive_design',1997,#2); +#2 = APPLICATION_CONTEXT( + 'core data for automotive mechanical design processes'); +#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10); +#4 = PRODUCT_DEFINITION_SHAPE('','',#5); +#5 = PRODUCT_DEFINITION('design','',#6,#9); +#6 = PRODUCT_DEFINITION_FORMATION('','',#7); +#7 = PRODUCT('ASSEMBLY','ASSEMBLY','',(#8)); +#8 = MECHANICAL_CONTEXT('',#2,'mechanical'); +#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#10 = SHAPE_REPRESENTATION('',(#11,#15),#19); +#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14); +#12 = CARTESIAN_POINT('',(0.,0.,0.)); +#13 = DIRECTION('',(0.,0.,1.)); +#14 = DIRECTION('',(1.,0.,-0.)); +#15 = AXIS2_PLACEMENT_3D('',#16,#17,#18); +#16 = CARTESIAN_POINT('',(0.,0.,0.)); +#17 = DIRECTION('',(0.,0.,1.)); +#18 = DIRECTION('',(1.,0.,0.)); +#19 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#23)) GLOBAL_UNIT_ASSIGNED_CONTEXT( +(#20,#21,#22)) REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#20 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#21 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#22 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#23 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#20, + 'distance_accuracy_value','confusion accuracy'); +#24 = PRODUCT_TYPE('part',$,(#7)); +#25 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#26),#1332); +#26 = MANIFOLD_SOLID_BREP('',#27); +#27 = CLOSED_SHELL('',(#28,#148,#236,#315,#396,#472,#502,#532,#608,#689, + #714,#795,#820,#896,#927,#958,#1036,#1067,#1134,#1165,#1234,#1301, + #1307,#1313,#1320,#1326)); +#28 = ADVANCED_FACE('',(#29),#43,.F.); +#29 = FACE_BOUND('',#30,.F.); +#30 = EDGE_LOOP('',(#31,#66,#94,#122)); +#31 = ORIENTED_EDGE('',*,*,#32,.F.); +#32 = EDGE_CURVE('',#33,#35,#37,.T.); +#33 = VERTEX_POINT('',#34); +#34 = CARTESIAN_POINT('',(-5.551115123126E-17,0.3,0.3)); +#35 = VERTEX_POINT('',#36); +#36 = CARTESIAN_POINT('',(-5.551115123126E-17,0.3,0.7)); +#37 = SURFACE_CURVE('',#38,(#42,#54),.PCURVE_S1.); +#38 = LINE('',#39,#40); +#39 = CARTESIAN_POINT('',(-5.551115123126E-17,0.3,0.)); +#40 = VECTOR('',#41,1.); +#41 = DIRECTION('',(0.,0.,1.)); +#42 = PCURVE('',#43,#48); +#43 = PLANE('',#44); +#44 = AXIS2_PLACEMENT_3D('',#45,#46,#47); +#45 = CARTESIAN_POINT('',(0.,0.,0.)); +#46 = DIRECTION('',(1.,0.,0.)); +#47 = DIRECTION('',(0.,0.,1.)); +#48 = DEFINITIONAL_REPRESENTATION('',(#49),#53); +#49 = LINE('',#50,#51); +#50 = CARTESIAN_POINT('',(0.,-0.3)); +#51 = VECTOR('',#52,1.); +#52 = DIRECTION('',(1.,0.)); +#53 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#54 = PCURVE('',#55,#60); +#55 = CYLINDRICAL_SURFACE('',#56,0.3); +#56 = AXIS2_PLACEMENT_3D('',#57,#58,#59); +#57 = CARTESIAN_POINT('',(0.3,0.3,0.)); +#58 = DIRECTION('',(0.,0.,1.)); +#59 = DIRECTION('',(-1.,-0.,0.)); +#60 = DEFINITIONAL_REPRESENTATION('',(#61),#65); +#61 = LINE('',#62,#63); +#62 = CARTESIAN_POINT('',(0.,0.)); +#63 = VECTOR('',#64,1.); +#64 = DIRECTION('',(0.,1.)); +#65 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#66 = ORIENTED_EDGE('',*,*,#67,.T.); +#67 = EDGE_CURVE('',#33,#68,#70,.T.); +#68 = VERTEX_POINT('',#69); +#69 = CARTESIAN_POINT('',(-5.551115123126E-17,0.7,0.3)); +#70 = SURFACE_CURVE('',#71,(#75,#82),.PCURVE_S1.); +#71 = LINE('',#72,#73); +#72 = CARTESIAN_POINT('',(-5.551115123126E-17,0.,0.3)); +#73 = VECTOR('',#74,1.); +#74 = DIRECTION('',(0.,1.,0.)); +#75 = PCURVE('',#43,#76); +#76 = DEFINITIONAL_REPRESENTATION('',(#77),#81); +#77 = LINE('',#78,#79); +#78 = CARTESIAN_POINT('',(0.3,0.)); +#79 = VECTOR('',#80,1.); +#80 = DIRECTION('',(0.,-1.)); +#81 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#82 = PCURVE('',#83,#88); +#83 = CYLINDRICAL_SURFACE('',#84,0.3); +#84 = AXIS2_PLACEMENT_3D('',#85,#86,#87); +#85 = CARTESIAN_POINT('',(0.3,0.,0.3)); +#86 = DIRECTION('',(0.,1.,0.)); +#87 = DIRECTION('',(-1.,0.,0.)); +#88 = DEFINITIONAL_REPRESENTATION('',(#89),#93); +#89 = LINE('',#90,#91); +#90 = CARTESIAN_POINT('',(-0.,0.)); +#91 = VECTOR('',#92,1.); +#92 = DIRECTION('',(-0.,1.)); +#93 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#94 = ORIENTED_EDGE('',*,*,#95,.T.); +#95 = EDGE_CURVE('',#68,#96,#98,.T.); +#96 = VERTEX_POINT('',#97); +#97 = CARTESIAN_POINT('',(-5.551115123126E-17,0.7,0.7)); +#98 = SURFACE_CURVE('',#99,(#103,#110),.PCURVE_S1.); +#99 = LINE('',#100,#101); +#100 = CARTESIAN_POINT('',(-5.551115123126E-17,0.7,0.)); +#101 = VECTOR('',#102,1.); +#102 = DIRECTION('',(0.,0.,1.)); +#103 = PCURVE('',#43,#104); +#104 = DEFINITIONAL_REPRESENTATION('',(#105),#109); +#105 = LINE('',#106,#107); +#106 = CARTESIAN_POINT('',(0.,-0.7)); +#107 = VECTOR('',#108,1.); +#108 = DIRECTION('',(1.,0.)); +#109 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#110 = PCURVE('',#111,#116); +#111 = CYLINDRICAL_SURFACE('',#112,0.3); +#112 = AXIS2_PLACEMENT_3D('',#113,#114,#115); +#113 = CARTESIAN_POINT('',(0.3,0.7,0.)); +#114 = DIRECTION('',(0.,0.,1.)); +#115 = DIRECTION('',(-1.,-0.,0.)); +#116 = DEFINITIONAL_REPRESENTATION('',(#117),#121); +#117 = LINE('',#118,#119); +#118 = CARTESIAN_POINT('',(-0.,0.)); +#119 = VECTOR('',#120,1.); +#120 = DIRECTION('',(-0.,1.)); +#121 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#122 = ORIENTED_EDGE('',*,*,#123,.F.); +#123 = EDGE_CURVE('',#35,#96,#124,.T.); +#124 = SURFACE_CURVE('',#125,(#129,#136),.PCURVE_S1.); +#125 = LINE('',#126,#127); +#126 = CARTESIAN_POINT('',(-5.551115123126E-17,0.,0.7)); +#127 = VECTOR('',#128,1.); +#128 = DIRECTION('',(0.,1.,0.)); +#129 = PCURVE('',#43,#130); +#130 = DEFINITIONAL_REPRESENTATION('',(#131),#135); +#131 = LINE('',#132,#133); +#132 = CARTESIAN_POINT('',(0.7,0.)); +#133 = VECTOR('',#134,1.); +#134 = DIRECTION('',(0.,-1.)); +#135 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#136 = PCURVE('',#137,#142); +#137 = CYLINDRICAL_SURFACE('',#138,0.3); +#138 = AXIS2_PLACEMENT_3D('',#139,#140,#141); +#139 = CARTESIAN_POINT('',(0.3,0.,0.7)); +#140 = DIRECTION('',(0.,1.,0.)); +#141 = DIRECTION('',(-1.,0.,0.)); +#142 = DEFINITIONAL_REPRESENTATION('',(#143),#147); +#143 = LINE('',#144,#145); +#144 = CARTESIAN_POINT('',(0.,0.)); +#145 = VECTOR('',#146,1.); +#146 = DIRECTION('',(0.,1.)); +#147 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#148 = ADVANCED_FACE('',(#149),#55,.T.); +#149 = FACE_BOUND('',#150,.T.); +#150 = EDGE_LOOP('',(#151,#152,#181,#209)); +#151 = ORIENTED_EDGE('',*,*,#32,.F.); +#152 = ORIENTED_EDGE('',*,*,#153,.T.); +#153 = EDGE_CURVE('',#33,#154,#156,.T.); +#154 = VERTEX_POINT('',#155); +#155 = CARTESIAN_POINT('',(0.3,-5.551115123126E-17,0.3)); +#156 = SURFACE_CURVE('',#157,(#162,#169),.PCURVE_S1.); +#157 = CIRCLE('',#158,0.3); +#158 = AXIS2_PLACEMENT_3D('',#159,#160,#161); +#159 = CARTESIAN_POINT('',(0.3,0.3,0.3)); +#160 = DIRECTION('',(0.,0.,1.)); +#161 = DIRECTION('',(-1.,0.,0.)); +#162 = PCURVE('',#55,#163); +#163 = DEFINITIONAL_REPRESENTATION('',(#164),#168); +#164 = LINE('',#165,#166); +#165 = CARTESIAN_POINT('',(0.,0.3)); +#166 = VECTOR('',#167,1.); +#167 = DIRECTION('',(1.,0.)); +#168 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#169 = PCURVE('',#170,#175); +#170 = SPHERICAL_SURFACE('',#171,0.3); +#171 = AXIS2_PLACEMENT_3D('',#172,#173,#174); +#172 = CARTESIAN_POINT('',(0.3,0.3,0.3)); +#173 = DIRECTION('',(0.,0.,1.)); +#174 = DIRECTION('',(-1.,0.,0.)); +#175 = DEFINITIONAL_REPRESENTATION('',(#176),#180); +#176 = LINE('',#177,#178); +#177 = CARTESIAN_POINT('',(0.,0.)); +#178 = VECTOR('',#179,1.); +#179 = DIRECTION('',(1.,0.)); +#180 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#181 = ORIENTED_EDGE('',*,*,#182,.T.); +#182 = EDGE_CURVE('',#154,#183,#185,.T.); +#183 = VERTEX_POINT('',#184); +#184 = CARTESIAN_POINT('',(0.3,-5.551115123126E-17,0.7)); +#185 = SURFACE_CURVE('',#186,(#190,#197),.PCURVE_S1.); +#186 = LINE('',#187,#188); +#187 = CARTESIAN_POINT('',(0.3,-5.551115123126E-17,0.)); +#188 = VECTOR('',#189,1.); +#189 = DIRECTION('',(0.,0.,1.)); +#190 = PCURVE('',#55,#191); +#191 = DEFINITIONAL_REPRESENTATION('',(#192),#196); +#192 = LINE('',#193,#194); +#193 = CARTESIAN_POINT('',(1.570796326795,0.)); +#194 = VECTOR('',#195,1.); +#195 = DIRECTION('',(0.,1.)); +#196 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#197 = PCURVE('',#198,#203); +#198 = PLANE('',#199); +#199 = AXIS2_PLACEMENT_3D('',#200,#201,#202); +#200 = CARTESIAN_POINT('',(0.,0.,0.)); +#201 = DIRECTION('',(0.,1.,0.)); +#202 = DIRECTION('',(0.,0.,1.)); +#203 = DEFINITIONAL_REPRESENTATION('',(#204),#208); +#204 = LINE('',#205,#206); +#205 = CARTESIAN_POINT('',(0.,0.3)); +#206 = VECTOR('',#207,1.); +#207 = DIRECTION('',(1.,0.)); +#208 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#209 = ORIENTED_EDGE('',*,*,#210,.F.); +#210 = EDGE_CURVE('',#35,#183,#211,.T.); +#211 = SURFACE_CURVE('',#212,(#217,#224),.PCURVE_S1.); +#212 = CIRCLE('',#213,0.3); +#213 = AXIS2_PLACEMENT_3D('',#214,#215,#216); +#214 = CARTESIAN_POINT('',(0.3,0.3,0.7)); +#215 = DIRECTION('',(0.,0.,1.)); +#216 = DIRECTION('',(-1.,0.,0.)); +#217 = PCURVE('',#55,#218); +#218 = DEFINITIONAL_REPRESENTATION('',(#219),#223); +#219 = LINE('',#220,#221); +#220 = CARTESIAN_POINT('',(0.,0.7)); +#221 = VECTOR('',#222,1.); +#222 = DIRECTION('',(1.,0.)); +#223 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#224 = PCURVE('',#225,#230); +#225 = SPHERICAL_SURFACE('',#226,0.3); +#226 = AXIS2_PLACEMENT_3D('',#227,#228,#229); +#227 = CARTESIAN_POINT('',(0.3,0.3,0.7)); +#228 = DIRECTION('',(-0.,-0.,-1.)); +#229 = DIRECTION('',(-1.,0.,0.)); +#230 = DEFINITIONAL_REPRESENTATION('',(#231),#235); +#231 = LINE('',#232,#233); +#232 = CARTESIAN_POINT('',(-0.,0.)); +#233 = VECTOR('',#234,1.); +#234 = DIRECTION('',(-1.,0.)); +#235 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#236 = ADVANCED_FACE('',(#237),#83,.T.); +#237 = FACE_BOUND('',#238,.F.); +#238 = EDGE_LOOP('',(#239,#261,#289,#314)); +#239 = ORIENTED_EDGE('',*,*,#240,.F.); +#240 = EDGE_CURVE('',#241,#33,#243,.T.); +#241 = VERTEX_POINT('',#242); +#242 = CARTESIAN_POINT('',(0.3,0.3,0.)); +#243 = SURFACE_CURVE('',#244,(#249,#255),.PCURVE_S1.); +#244 = CIRCLE('',#245,0.3); +#245 = AXIS2_PLACEMENT_3D('',#246,#247,#248); +#246 = CARTESIAN_POINT('',(0.3,0.3,0.3)); +#247 = DIRECTION('',(0.,1.,-0.)); +#248 = DIRECTION('',(-1.,0.,0.)); +#249 = PCURVE('',#83,#250); +#250 = DEFINITIONAL_REPRESENTATION('',(#251),#254); +#251 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#252,#253),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#252 = CARTESIAN_POINT('',(-1.570796326795,0.3)); +#253 = CARTESIAN_POINT('',(0.,0.3)); +#254 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#255 = PCURVE('',#170,#256); +#256 = DEFINITIONAL_REPRESENTATION('',(#257),#260); +#257 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#258,#259),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#258 = CARTESIAN_POINT('',(0.,-1.570796326795)); +#259 = CARTESIAN_POINT('',(0.,0.)); +#260 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#261 = ORIENTED_EDGE('',*,*,#262,.T.); +#262 = EDGE_CURVE('',#241,#263,#265,.T.); +#263 = VERTEX_POINT('',#264); +#264 = CARTESIAN_POINT('',(0.3,0.7,0.)); +#265 = SURFACE_CURVE('',#266,(#270,#277),.PCURVE_S1.); +#266 = LINE('',#267,#268); +#267 = CARTESIAN_POINT('',(0.3,0.,-5.551115123126E-17)); +#268 = VECTOR('',#269,1.); +#269 = DIRECTION('',(0.,1.,0.)); +#270 = PCURVE('',#83,#271); +#271 = DEFINITIONAL_REPRESENTATION('',(#272),#276); +#272 = LINE('',#273,#274); +#273 = CARTESIAN_POINT('',(-1.570796326795,0.)); +#274 = VECTOR('',#275,1.); +#275 = DIRECTION('',(-0.,1.)); +#276 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#277 = PCURVE('',#278,#283); +#278 = PLANE('',#279); +#279 = AXIS2_PLACEMENT_3D('',#280,#281,#282); +#280 = CARTESIAN_POINT('',(0.,0.,0.)); +#281 = DIRECTION('',(0.,0.,1.)); +#282 = DIRECTION('',(1.,0.,0.)); +#283 = DEFINITIONAL_REPRESENTATION('',(#284),#288); +#284 = LINE('',#285,#286); +#285 = CARTESIAN_POINT('',(0.3,0.)); +#286 = VECTOR('',#287,1.); +#287 = DIRECTION('',(0.,1.)); +#288 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#289 = ORIENTED_EDGE('',*,*,#290,.T.); +#290 = EDGE_CURVE('',#263,#68,#291,.T.); +#291 = SURFACE_CURVE('',#292,(#297,#303),.PCURVE_S1.); +#292 = CIRCLE('',#293,0.3); +#293 = AXIS2_PLACEMENT_3D('',#294,#295,#296); +#294 = CARTESIAN_POINT('',(0.3,0.7,0.3)); +#295 = DIRECTION('',(0.,1.,-0.)); +#296 = DIRECTION('',(-1.,0.,0.)); +#297 = PCURVE('',#83,#298); +#298 = DEFINITIONAL_REPRESENTATION('',(#299),#302); +#299 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#300,#301),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#300 = CARTESIAN_POINT('',(-1.570796326795,0.7)); +#301 = CARTESIAN_POINT('',(0.,0.7)); +#302 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#303 = PCURVE('',#304,#309); +#304 = SPHERICAL_SURFACE('',#305,0.3); +#305 = AXIS2_PLACEMENT_3D('',#306,#307,#308); +#306 = CARTESIAN_POINT('',(0.3,0.7,0.3)); +#307 = DIRECTION('',(0.,0.,1.)); +#308 = DIRECTION('',(-1.,0.,0.)); +#309 = DEFINITIONAL_REPRESENTATION('',(#310),#313); +#310 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#311,#312),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#311 = CARTESIAN_POINT('',(0.,-1.570796326795)); +#312 = CARTESIAN_POINT('',(0.,0.)); +#313 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#314 = ORIENTED_EDGE('',*,*,#67,.F.); +#315 = ADVANCED_FACE('',(#316),#137,.T.); +#316 = FACE_BOUND('',#317,.T.); +#317 = EDGE_LOOP('',(#318,#340,#368,#395)); +#318 = ORIENTED_EDGE('',*,*,#319,.F.); +#319 = EDGE_CURVE('',#320,#35,#322,.T.); +#320 = VERTEX_POINT('',#321); +#321 = CARTESIAN_POINT('',(0.3,0.3,1.)); +#322 = SURFACE_CURVE('',#323,(#328,#334),.PCURVE_S1.); +#323 = CIRCLE('',#324,0.3); +#324 = AXIS2_PLACEMENT_3D('',#325,#326,#327); +#325 = CARTESIAN_POINT('',(0.3,0.3,0.7)); +#326 = DIRECTION('',(0.,-1.,0.)); +#327 = DIRECTION('',(-1.,0.,0.)); +#328 = PCURVE('',#137,#329); +#329 = DEFINITIONAL_REPRESENTATION('',(#330),#333); +#330 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#331,#332),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#331 = CARTESIAN_POINT('',(1.570796326795,0.3)); +#332 = CARTESIAN_POINT('',(0.,0.3)); +#333 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#334 = PCURVE('',#225,#335); +#335 = DEFINITIONAL_REPRESENTATION('',(#336),#339); +#336 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#337,#338),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#337 = CARTESIAN_POINT('',(0.,-1.570796326795)); +#338 = CARTESIAN_POINT('',(0.,0.)); +#339 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#340 = ORIENTED_EDGE('',*,*,#341,.T.); +#341 = EDGE_CURVE('',#320,#342,#344,.T.); +#342 = VERTEX_POINT('',#343); +#343 = CARTESIAN_POINT('',(0.3,0.7,1.)); +#344 = SURFACE_CURVE('',#345,(#349,#356),.PCURVE_S1.); +#345 = LINE('',#346,#347); +#346 = CARTESIAN_POINT('',(0.3,0.,1.)); +#347 = VECTOR('',#348,1.); +#348 = DIRECTION('',(0.,1.,0.)); +#349 = PCURVE('',#137,#350); +#350 = DEFINITIONAL_REPRESENTATION('',(#351),#355); +#351 = LINE('',#352,#353); +#352 = CARTESIAN_POINT('',(1.570796326795,0.)); +#353 = VECTOR('',#354,1.); +#354 = DIRECTION('',(0.,1.)); +#355 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#356 = PCURVE('',#357,#362); +#357 = PLANE('',#358); +#358 = AXIS2_PLACEMENT_3D('',#359,#360,#361); +#359 = CARTESIAN_POINT('',(0.,0.,1.)); +#360 = DIRECTION('',(0.,0.,1.)); +#361 = DIRECTION('',(1.,0.,0.)); +#362 = DEFINITIONAL_REPRESENTATION('',(#363),#367); +#363 = LINE('',#364,#365); +#364 = CARTESIAN_POINT('',(0.3,0.)); +#365 = VECTOR('',#366,1.); +#366 = DIRECTION('',(0.,1.)); +#367 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#368 = ORIENTED_EDGE('',*,*,#369,.F.); +#369 = EDGE_CURVE('',#96,#342,#370,.T.); +#370 = SURFACE_CURVE('',#371,(#376,#383),.PCURVE_S1.); +#371 = CIRCLE('',#372,0.3); +#372 = AXIS2_PLACEMENT_3D('',#373,#374,#375); +#373 = CARTESIAN_POINT('',(0.3,0.7,0.7)); +#374 = DIRECTION('',(0.,1.,0.)); +#375 = DIRECTION('',(-1.,0.,0.)); +#376 = PCURVE('',#137,#377); +#377 = DEFINITIONAL_REPRESENTATION('',(#378),#382); +#378 = LINE('',#379,#380); +#379 = CARTESIAN_POINT('',(0.,0.7)); +#380 = VECTOR('',#381,1.); +#381 = DIRECTION('',(1.,0.)); +#382 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#383 = PCURVE('',#384,#389); +#384 = SPHERICAL_SURFACE('',#385,0.3); +#385 = AXIS2_PLACEMENT_3D('',#386,#387,#388); +#386 = CARTESIAN_POINT('',(0.3,0.7,0.7)); +#387 = DIRECTION('',(-0.,-1.,-0.)); +#388 = DIRECTION('',(-1.,0.,0.)); +#389 = DEFINITIONAL_REPRESENTATION('',(#390),#394); +#390 = LINE('',#391,#392); +#391 = CARTESIAN_POINT('',(-0.,0.)); +#392 = VECTOR('',#393,1.); +#393 = DIRECTION('',(-1.,0.)); +#394 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#395 = ORIENTED_EDGE('',*,*,#123,.F.); +#396 = ADVANCED_FACE('',(#397),#111,.T.); +#397 = FACE_BOUND('',#398,.F.); +#398 = EDGE_LOOP('',(#399,#400,#424,#452)); +#399 = ORIENTED_EDGE('',*,*,#95,.F.); +#400 = ORIENTED_EDGE('',*,*,#401,.T.); +#401 = EDGE_CURVE('',#68,#402,#404,.T.); +#402 = VERTEX_POINT('',#403); +#403 = CARTESIAN_POINT('',(0.3,1.,0.3)); +#404 = SURFACE_CURVE('',#405,(#410,#417),.PCURVE_S1.); +#405 = CIRCLE('',#406,0.3); +#406 = AXIS2_PLACEMENT_3D('',#407,#408,#409); +#407 = CARTESIAN_POINT('',(0.3,0.7,0.3)); +#408 = DIRECTION('',(-0.,0.,-1.)); +#409 = DIRECTION('',(-1.,0.,0.)); +#410 = PCURVE('',#111,#411); +#411 = DEFINITIONAL_REPRESENTATION('',(#412),#416); +#412 = LINE('',#413,#414); +#413 = CARTESIAN_POINT('',(-0.,0.3)); +#414 = VECTOR('',#415,1.); +#415 = DIRECTION('',(-1.,0.)); +#416 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#417 = PCURVE('',#304,#418); +#418 = DEFINITIONAL_REPRESENTATION('',(#419),#423); +#419 = LINE('',#420,#421); +#420 = CARTESIAN_POINT('',(-0.,0.)); +#421 = VECTOR('',#422,1.); +#422 = DIRECTION('',(-1.,0.)); +#423 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#424 = ORIENTED_EDGE('',*,*,#425,.T.); +#425 = EDGE_CURVE('',#402,#426,#428,.T.); +#426 = VERTEX_POINT('',#427); +#427 = CARTESIAN_POINT('',(0.3,1.,0.7)); +#428 = SURFACE_CURVE('',#429,(#433,#440),.PCURVE_S1.); +#429 = LINE('',#430,#431); +#430 = CARTESIAN_POINT('',(0.3,1.,0.)); +#431 = VECTOR('',#432,1.); +#432 = DIRECTION('',(0.,0.,1.)); +#433 = PCURVE('',#111,#434); +#434 = DEFINITIONAL_REPRESENTATION('',(#435),#439); +#435 = LINE('',#436,#437); +#436 = CARTESIAN_POINT('',(-1.570796326795,0.)); +#437 = VECTOR('',#438,1.); +#438 = DIRECTION('',(-0.,1.)); +#439 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#440 = PCURVE('',#441,#446); +#441 = PLANE('',#442); +#442 = AXIS2_PLACEMENT_3D('',#443,#444,#445); +#443 = CARTESIAN_POINT('',(0.,1.,0.)); +#444 = DIRECTION('',(0.,1.,0.)); +#445 = DIRECTION('',(0.,0.,1.)); +#446 = DEFINITIONAL_REPRESENTATION('',(#447),#451); +#447 = LINE('',#448,#449); +#448 = CARTESIAN_POINT('',(0.,0.3)); +#449 = VECTOR('',#450,1.); +#450 = DIRECTION('',(1.,0.)); +#451 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#452 = ORIENTED_EDGE('',*,*,#453,.T.); +#453 = EDGE_CURVE('',#426,#96,#454,.T.); +#454 = SURFACE_CURVE('',#455,(#460,#466),.PCURVE_S1.); +#455 = CIRCLE('',#456,0.3); +#456 = AXIS2_PLACEMENT_3D('',#457,#458,#459); +#457 = CARTESIAN_POINT('',(0.3,0.7,0.7)); +#458 = DIRECTION('',(0.,0.,1.)); +#459 = DIRECTION('',(-1.,0.,0.)); +#460 = PCURVE('',#111,#461); +#461 = DEFINITIONAL_REPRESENTATION('',(#462),#465); +#462 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#463,#464),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#463 = CARTESIAN_POINT('',(-1.570796326795,0.7)); +#464 = CARTESIAN_POINT('',(0.,0.7)); +#465 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#466 = PCURVE('',#384,#467); +#467 = DEFINITIONAL_REPRESENTATION('',(#468),#471); +#468 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#469,#470),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#469 = CARTESIAN_POINT('',(0.,-1.570796326795)); +#470 = CARTESIAN_POINT('',(0.,0.)); +#471 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#472 = ADVANCED_FACE('',(#473),#170,.T.); +#473 = FACE_BOUND('',#474,.T.); +#474 = EDGE_LOOP('',(#475,#476,#501)); +#475 = ORIENTED_EDGE('',*,*,#240,.F.); +#476 = ORIENTED_EDGE('',*,*,#477,.T.); +#477 = EDGE_CURVE('',#241,#154,#478,.T.); +#478 = SURFACE_CURVE('',#479,(#484,#490),.PCURVE_S1.); +#479 = CIRCLE('',#480,0.3); +#480 = AXIS2_PLACEMENT_3D('',#481,#482,#483); +#481 = CARTESIAN_POINT('',(0.3,0.3,0.3)); +#482 = DIRECTION('',(-1.,6.123233995737E-17,0.)); +#483 = DIRECTION('',(-6.123233995737E-17,-1.,0.)); +#484 = PCURVE('',#170,#485); +#485 = DEFINITIONAL_REPRESENTATION('',(#486),#489); +#486 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#487,#488),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#487 = CARTESIAN_POINT('',(1.570796326795,-1.570796326795)); +#488 = CARTESIAN_POINT('',(1.570796326795,0.)); +#489 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#490 = PCURVE('',#491,#496); +#491 = CYLINDRICAL_SURFACE('',#492,0.3); +#492 = AXIS2_PLACEMENT_3D('',#493,#494,#495); +#493 = CARTESIAN_POINT('',(0.,0.3,0.3)); +#494 = DIRECTION('',(1.,0.,0.)); +#495 = DIRECTION('',(0.,-1.,0.)); +#496 = DEFINITIONAL_REPRESENTATION('',(#497),#500); +#497 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#498,#499),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#498 = CARTESIAN_POINT('',(1.570796326795,0.3)); +#499 = CARTESIAN_POINT('',(0.,0.3)); +#500 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#501 = ORIENTED_EDGE('',*,*,#153,.F.); +#502 = ADVANCED_FACE('',(#503),#225,.T.); +#503 = FACE_BOUND('',#504,.F.); +#504 = EDGE_LOOP('',(#505,#506,#531)); +#505 = ORIENTED_EDGE('',*,*,#319,.F.); +#506 = ORIENTED_EDGE('',*,*,#507,.T.); +#507 = EDGE_CURVE('',#320,#183,#508,.T.); +#508 = SURFACE_CURVE('',#509,(#514,#520),.PCURVE_S1.); +#509 = CIRCLE('',#510,0.3); +#510 = AXIS2_PLACEMENT_3D('',#511,#512,#513); +#511 = CARTESIAN_POINT('',(0.3,0.3,0.7)); +#512 = DIRECTION('',(1.,-6.123233995737E-17,0.)); +#513 = DIRECTION('',(-6.123233995737E-17,-1.,0.)); +#514 = PCURVE('',#225,#515); +#515 = DEFINITIONAL_REPRESENTATION('',(#516),#519); +#516 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#517,#518),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#517 = CARTESIAN_POINT('',(-1.570796326795,-1.570796326795)); +#518 = CARTESIAN_POINT('',(-1.570796326795,0.)); +#519 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#520 = PCURVE('',#521,#526); +#521 = CYLINDRICAL_SURFACE('',#522,0.3); +#522 = AXIS2_PLACEMENT_3D('',#523,#524,#525); +#523 = CARTESIAN_POINT('',(0.,0.3,0.7)); +#524 = DIRECTION('',(1.,0.,0.)); +#525 = DIRECTION('',(0.,-1.,0.)); +#526 = DEFINITIONAL_REPRESENTATION('',(#527),#530); +#527 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#528,#529),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#528 = CARTESIAN_POINT('',(-1.570796326795,0.3)); +#529 = CARTESIAN_POINT('',(0.,0.3)); +#530 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#531 = ORIENTED_EDGE('',*,*,#210,.F.); +#532 = ADVANCED_FACE('',(#533),#198,.F.); +#533 = FACE_BOUND('',#534,.F.); +#534 = EDGE_LOOP('',(#535,#536,#559,#587)); +#535 = ORIENTED_EDGE('',*,*,#182,.T.); +#536 = ORIENTED_EDGE('',*,*,#537,.T.); +#537 = EDGE_CURVE('',#183,#538,#540,.T.); +#538 = VERTEX_POINT('',#539); +#539 = CARTESIAN_POINT('',(0.7,-5.551115123126E-17,0.7)); +#540 = SURFACE_CURVE('',#541,(#545,#552),.PCURVE_S1.); +#541 = LINE('',#542,#543); +#542 = CARTESIAN_POINT('',(0.,-5.551115123126E-17,0.7)); +#543 = VECTOR('',#544,1.); +#544 = DIRECTION('',(1.,0.,0.)); +#545 = PCURVE('',#198,#546); +#546 = DEFINITIONAL_REPRESENTATION('',(#547),#551); +#547 = LINE('',#548,#549); +#548 = CARTESIAN_POINT('',(0.7,0.)); +#549 = VECTOR('',#550,1.); +#550 = DIRECTION('',(0.,1.)); +#551 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#552 = PCURVE('',#521,#553); +#553 = DEFINITIONAL_REPRESENTATION('',(#554),#558); +#554 = LINE('',#555,#556); +#555 = CARTESIAN_POINT('',(-0.,0.)); +#556 = VECTOR('',#557,1.); +#557 = DIRECTION('',(-0.,1.)); +#558 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#559 = ORIENTED_EDGE('',*,*,#560,.F.); +#560 = EDGE_CURVE('',#561,#538,#563,.T.); +#561 = VERTEX_POINT('',#562); +#562 = CARTESIAN_POINT('',(0.7,-5.551115123126E-17,0.3)); +#563 = SURFACE_CURVE('',#564,(#568,#575),.PCURVE_S1.); +#564 = LINE('',#565,#566); +#565 = CARTESIAN_POINT('',(0.7,-5.551115123126E-17,0.)); +#566 = VECTOR('',#567,1.); +#567 = DIRECTION('',(0.,0.,1.)); +#568 = PCURVE('',#198,#569); +#569 = DEFINITIONAL_REPRESENTATION('',(#570),#574); +#570 = LINE('',#571,#572); +#571 = CARTESIAN_POINT('',(0.,0.7)); +#572 = VECTOR('',#573,1.); +#573 = DIRECTION('',(1.,0.)); +#574 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#575 = PCURVE('',#576,#581); +#576 = CYLINDRICAL_SURFACE('',#577,0.3); +#577 = AXIS2_PLACEMENT_3D('',#578,#579,#580); +#578 = CARTESIAN_POINT('',(0.7,0.3,0.)); +#579 = DIRECTION('',(0.,0.,1.)); +#580 = DIRECTION('',(1.,0.,-0.)); +#581 = DEFINITIONAL_REPRESENTATION('',(#582),#586); +#582 = LINE('',#583,#584); +#583 = CARTESIAN_POINT('',(-1.570796326795,0.)); +#584 = VECTOR('',#585,1.); +#585 = DIRECTION('',(-0.,1.)); +#586 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#587 = ORIENTED_EDGE('',*,*,#588,.F.); +#588 = EDGE_CURVE('',#154,#561,#589,.T.); +#589 = SURFACE_CURVE('',#590,(#594,#601),.PCURVE_S1.); +#590 = LINE('',#591,#592); +#591 = CARTESIAN_POINT('',(0.,-5.551115123126E-17,0.3)); +#592 = VECTOR('',#593,1.); +#593 = DIRECTION('',(1.,0.,0.)); +#594 = PCURVE('',#198,#595); +#595 = DEFINITIONAL_REPRESENTATION('',(#596),#600); +#596 = LINE('',#597,#598); +#597 = CARTESIAN_POINT('',(0.3,0.)); +#598 = VECTOR('',#599,1.); +#599 = DIRECTION('',(0.,1.)); +#600 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#601 = PCURVE('',#491,#602); +#602 = DEFINITIONAL_REPRESENTATION('',(#603),#607); +#603 = LINE('',#604,#605); +#604 = CARTESIAN_POINT('',(0.,0.)); +#605 = VECTOR('',#606,1.); +#606 = DIRECTION('',(0.,1.)); +#607 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#608 = ADVANCED_FACE('',(#609),#278,.F.); +#609 = FACE_BOUND('',#610,.F.); +#610 = EDGE_LOOP('',(#611,#612,#635,#663)); +#611 = ORIENTED_EDGE('',*,*,#262,.F.); +#612 = ORIENTED_EDGE('',*,*,#613,.T.); +#613 = EDGE_CURVE('',#241,#614,#616,.T.); +#614 = VERTEX_POINT('',#615); +#615 = CARTESIAN_POINT('',(0.7,0.3,0.)); +#616 = SURFACE_CURVE('',#617,(#621,#628),.PCURVE_S1.); +#617 = LINE('',#618,#619); +#618 = CARTESIAN_POINT('',(0.,0.3,-5.551115123126E-17)); +#619 = VECTOR('',#620,1.); +#620 = DIRECTION('',(1.,0.,0.)); +#621 = PCURVE('',#278,#622); +#622 = DEFINITIONAL_REPRESENTATION('',(#623),#627); +#623 = LINE('',#624,#625); +#624 = CARTESIAN_POINT('',(0.,0.3)); +#625 = VECTOR('',#626,1.); +#626 = DIRECTION('',(1.,0.)); +#627 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#628 = PCURVE('',#491,#629); +#629 = DEFINITIONAL_REPRESENTATION('',(#630),#634); +#630 = LINE('',#631,#632); +#631 = CARTESIAN_POINT('',(1.570796326795,0.)); +#632 = VECTOR('',#633,1.); +#633 = DIRECTION('',(0.,1.)); +#634 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#635 = ORIENTED_EDGE('',*,*,#636,.T.); +#636 = EDGE_CURVE('',#614,#637,#639,.T.); +#637 = VERTEX_POINT('',#638); +#638 = CARTESIAN_POINT('',(0.7,0.7,0.)); +#639 = SURFACE_CURVE('',#640,(#644,#651),.PCURVE_S1.); +#640 = LINE('',#641,#642); +#641 = CARTESIAN_POINT('',(0.7,0.,-5.551115123126E-17)); +#642 = VECTOR('',#643,1.); +#643 = DIRECTION('',(0.,1.,0.)); +#644 = PCURVE('',#278,#645); +#645 = DEFINITIONAL_REPRESENTATION('',(#646),#650); +#646 = LINE('',#647,#648); +#647 = CARTESIAN_POINT('',(0.7,0.)); +#648 = VECTOR('',#649,1.); +#649 = DIRECTION('',(0.,1.)); +#650 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#651 = PCURVE('',#652,#657); +#652 = CYLINDRICAL_SURFACE('',#653,0.3); +#653 = AXIS2_PLACEMENT_3D('',#654,#655,#656); +#654 = CARTESIAN_POINT('',(0.7,0.,0.3)); +#655 = DIRECTION('',(0.,1.,0.)); +#656 = DIRECTION('',(1.,0.,-0.)); +#657 = DEFINITIONAL_REPRESENTATION('',(#658),#662); +#658 = LINE('',#659,#660); +#659 = CARTESIAN_POINT('',(1.570796326795,0.)); +#660 = VECTOR('',#661,1.); +#661 = DIRECTION('',(0.,1.)); +#662 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#663 = ORIENTED_EDGE('',*,*,#664,.F.); +#664 = EDGE_CURVE('',#263,#637,#665,.T.); +#665 = SURFACE_CURVE('',#666,(#670,#677),.PCURVE_S1.); +#666 = LINE('',#667,#668); +#667 = CARTESIAN_POINT('',(0.,0.7,-5.551115123126E-17)); +#668 = VECTOR('',#669,1.); +#669 = DIRECTION('',(1.,0.,0.)); +#670 = PCURVE('',#278,#671); +#671 = DEFINITIONAL_REPRESENTATION('',(#672),#676); +#672 = LINE('',#673,#674); +#673 = CARTESIAN_POINT('',(0.,0.7)); +#674 = VECTOR('',#675,1.); +#675 = DIRECTION('',(1.,0.)); +#676 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#677 = PCURVE('',#678,#683); +#678 = CYLINDRICAL_SURFACE('',#679,0.3); +#679 = AXIS2_PLACEMENT_3D('',#680,#681,#682); +#680 = CARTESIAN_POINT('',(0.,0.7,0.3)); +#681 = DIRECTION('',(1.,0.,0.)); +#682 = DIRECTION('',(-0.,1.,0.)); +#683 = DEFINITIONAL_REPRESENTATION('',(#684),#688); +#684 = LINE('',#685,#686); +#685 = CARTESIAN_POINT('',(-1.570796326795,0.)); +#686 = VECTOR('',#687,1.); +#687 = DIRECTION('',(-0.,1.)); +#688 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#689 = ADVANCED_FACE('',(#690),#304,.T.); +#690 = FACE_BOUND('',#691,.F.); +#691 = EDGE_LOOP('',(#692,#693,#713)); +#692 = ORIENTED_EDGE('',*,*,#290,.F.); +#693 = ORIENTED_EDGE('',*,*,#694,.T.); +#694 = EDGE_CURVE('',#263,#402,#695,.T.); +#695 = SURFACE_CURVE('',#696,(#701,#707),.PCURVE_S1.); +#696 = CIRCLE('',#697,0.3); +#697 = AXIS2_PLACEMENT_3D('',#698,#699,#700); +#698 = CARTESIAN_POINT('',(0.3,0.7,0.3)); +#699 = DIRECTION('',(1.,6.123233995737E-17,-0.)); +#700 = DIRECTION('',(-6.123233995737E-17,1.,0.)); +#701 = PCURVE('',#304,#702); +#702 = DEFINITIONAL_REPRESENTATION('',(#703),#706); +#703 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#704,#705),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#704 = CARTESIAN_POINT('',(-1.570796326795,-1.570796326795)); +#705 = CARTESIAN_POINT('',(-1.570796326795,0.)); +#706 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#707 = PCURVE('',#678,#708); +#708 = DEFINITIONAL_REPRESENTATION('',(#709),#712); +#709 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#710,#711),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#710 = CARTESIAN_POINT('',(-1.570796326795,0.3)); +#711 = CARTESIAN_POINT('',(0.,0.3)); +#712 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#713 = ORIENTED_EDGE('',*,*,#401,.F.); +#714 = ADVANCED_FACE('',(#715),#357,.T.); +#715 = FACE_BOUND('',#716,.T.); +#716 = EDGE_LOOP('',(#717,#718,#741,#769)); +#717 = ORIENTED_EDGE('',*,*,#341,.F.); +#718 = ORIENTED_EDGE('',*,*,#719,.T.); +#719 = EDGE_CURVE('',#320,#720,#722,.T.); +#720 = VERTEX_POINT('',#721); +#721 = CARTESIAN_POINT('',(0.7,0.3,1.)); +#722 = SURFACE_CURVE('',#723,(#727,#734),.PCURVE_S1.); +#723 = LINE('',#724,#725); +#724 = CARTESIAN_POINT('',(0.,0.3,1.)); +#725 = VECTOR('',#726,1.); +#726 = DIRECTION('',(1.,0.,0.)); +#727 = PCURVE('',#357,#728); +#728 = DEFINITIONAL_REPRESENTATION('',(#729),#733); +#729 = LINE('',#730,#731); +#730 = CARTESIAN_POINT('',(0.,0.3)); +#731 = VECTOR('',#732,1.); +#732 = DIRECTION('',(1.,0.)); +#733 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#734 = PCURVE('',#521,#735); +#735 = DEFINITIONAL_REPRESENTATION('',(#736),#740); +#736 = LINE('',#737,#738); +#737 = CARTESIAN_POINT('',(-1.570796326795,0.)); +#738 = VECTOR('',#739,1.); +#739 = DIRECTION('',(-0.,1.)); +#740 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#741 = ORIENTED_EDGE('',*,*,#742,.T.); +#742 = EDGE_CURVE('',#720,#743,#745,.T.); +#743 = VERTEX_POINT('',#744); +#744 = CARTESIAN_POINT('',(0.7,0.7,1.)); +#745 = SURFACE_CURVE('',#746,(#750,#757),.PCURVE_S1.); +#746 = LINE('',#747,#748); +#747 = CARTESIAN_POINT('',(0.7,0.,1.)); +#748 = VECTOR('',#749,1.); +#749 = DIRECTION('',(0.,1.,0.)); +#750 = PCURVE('',#357,#751); +#751 = DEFINITIONAL_REPRESENTATION('',(#752),#756); +#752 = LINE('',#753,#754); +#753 = CARTESIAN_POINT('',(0.7,0.)); +#754 = VECTOR('',#755,1.); +#755 = DIRECTION('',(0.,1.)); +#756 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#757 = PCURVE('',#758,#763); +#758 = CYLINDRICAL_SURFACE('',#759,0.3); +#759 = AXIS2_PLACEMENT_3D('',#760,#761,#762); +#760 = CARTESIAN_POINT('',(0.7,0.,0.7)); +#761 = DIRECTION('',(0.,1.,0.)); +#762 = DIRECTION('',(1.,0.,-0.)); +#763 = DEFINITIONAL_REPRESENTATION('',(#764),#768); +#764 = LINE('',#765,#766); +#765 = CARTESIAN_POINT('',(-1.570796326795,0.)); +#766 = VECTOR('',#767,1.); +#767 = DIRECTION('',(-0.,1.)); +#768 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#769 = ORIENTED_EDGE('',*,*,#770,.F.); +#770 = EDGE_CURVE('',#342,#743,#771,.T.); +#771 = SURFACE_CURVE('',#772,(#776,#783),.PCURVE_S1.); +#772 = LINE('',#773,#774); +#773 = CARTESIAN_POINT('',(0.,0.7,1.)); +#774 = VECTOR('',#775,1.); +#775 = DIRECTION('',(1.,0.,0.)); +#776 = PCURVE('',#357,#777); +#777 = DEFINITIONAL_REPRESENTATION('',(#778),#782); +#778 = LINE('',#779,#780); +#779 = CARTESIAN_POINT('',(0.,0.7)); +#780 = VECTOR('',#781,1.); +#781 = DIRECTION('',(1.,0.)); +#782 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#783 = PCURVE('',#784,#789); +#784 = CYLINDRICAL_SURFACE('',#785,0.3); +#785 = AXIS2_PLACEMENT_3D('',#786,#787,#788); +#786 = CARTESIAN_POINT('',(0.,0.7,0.7)); +#787 = DIRECTION('',(1.,0.,0.)); +#788 = DIRECTION('',(-0.,1.,0.)); +#789 = DEFINITIONAL_REPRESENTATION('',(#790),#794); +#790 = LINE('',#791,#792); +#791 = CARTESIAN_POINT('',(1.570796326795,0.)); +#792 = VECTOR('',#793,1.); +#793 = DIRECTION('',(0.,1.)); +#794 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#795 = ADVANCED_FACE('',(#796),#384,.T.); +#796 = FACE_BOUND('',#797,.F.); +#797 = EDGE_LOOP('',(#798,#799,#819)); +#798 = ORIENTED_EDGE('',*,*,#453,.F.); +#799 = ORIENTED_EDGE('',*,*,#800,.T.); +#800 = EDGE_CURVE('',#426,#342,#801,.T.); +#801 = SURFACE_CURVE('',#802,(#807,#813),.PCURVE_S1.); +#802 = CIRCLE('',#803,0.3); +#803 = AXIS2_PLACEMENT_3D('',#804,#805,#806); +#804 = CARTESIAN_POINT('',(0.3,0.7,0.7)); +#805 = DIRECTION('',(1.,0.,6.123233995737E-17)); +#806 = DIRECTION('',(-6.123233995737E-17,0.,1.)); +#807 = PCURVE('',#384,#808); +#808 = DEFINITIONAL_REPRESENTATION('',(#809),#812); +#809 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#810,#811),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#810 = CARTESIAN_POINT('',(-1.570796326795,-1.570796326795)); +#811 = CARTESIAN_POINT('',(-1.570796326795,0.)); +#812 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#813 = PCURVE('',#784,#814); +#814 = DEFINITIONAL_REPRESENTATION('',(#815),#818); +#815 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#816,#817),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#816 = CARTESIAN_POINT('',(0.,0.3)); +#817 = CARTESIAN_POINT('',(1.570796326795,0.3)); +#818 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#819 = ORIENTED_EDGE('',*,*,#369,.F.); +#820 = ADVANCED_FACE('',(#821),#441,.T.); +#821 = FACE_BOUND('',#822,.T.); +#822 = EDGE_LOOP('',(#823,#824,#847,#875)); +#823 = ORIENTED_EDGE('',*,*,#425,.T.); +#824 = ORIENTED_EDGE('',*,*,#825,.T.); +#825 = EDGE_CURVE('',#426,#826,#828,.T.); +#826 = VERTEX_POINT('',#827); +#827 = CARTESIAN_POINT('',(0.7,1.,0.7)); +#828 = SURFACE_CURVE('',#829,(#833,#840),.PCURVE_S1.); +#829 = LINE('',#830,#831); +#830 = CARTESIAN_POINT('',(0.,1.,0.7)); +#831 = VECTOR('',#832,1.); +#832 = DIRECTION('',(1.,0.,0.)); +#833 = PCURVE('',#441,#834); +#834 = DEFINITIONAL_REPRESENTATION('',(#835),#839); +#835 = LINE('',#836,#837); +#836 = CARTESIAN_POINT('',(0.7,0.)); +#837 = VECTOR('',#838,1.); +#838 = DIRECTION('',(0.,1.)); +#839 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#840 = PCURVE('',#784,#841); +#841 = DEFINITIONAL_REPRESENTATION('',(#842),#846); +#842 = LINE('',#843,#844); +#843 = CARTESIAN_POINT('',(0.,0.)); +#844 = VECTOR('',#845,1.); +#845 = DIRECTION('',(0.,1.)); +#846 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#847 = ORIENTED_EDGE('',*,*,#848,.F.); +#848 = EDGE_CURVE('',#849,#826,#851,.T.); +#849 = VERTEX_POINT('',#850); +#850 = CARTESIAN_POINT('',(0.7,1.,0.3)); +#851 = SURFACE_CURVE('',#852,(#856,#863),.PCURVE_S1.); +#852 = LINE('',#853,#854); +#853 = CARTESIAN_POINT('',(0.7,1.,0.)); +#854 = VECTOR('',#855,1.); +#855 = DIRECTION('',(0.,0.,1.)); +#856 = PCURVE('',#441,#857); +#857 = DEFINITIONAL_REPRESENTATION('',(#858),#862); +#858 = LINE('',#859,#860); +#859 = CARTESIAN_POINT('',(0.,0.7)); +#860 = VECTOR('',#861,1.); +#861 = DIRECTION('',(1.,0.)); +#862 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#863 = PCURVE('',#864,#869); +#864 = CYLINDRICAL_SURFACE('',#865,0.3); +#865 = AXIS2_PLACEMENT_3D('',#866,#867,#868); +#866 = CARTESIAN_POINT('',(0.7,0.7,0.)); +#867 = DIRECTION('',(0.,0.,1.)); +#868 = DIRECTION('',(1.,0.,-0.)); +#869 = DEFINITIONAL_REPRESENTATION('',(#870),#874); +#870 = LINE('',#871,#872); +#871 = CARTESIAN_POINT('',(1.570796326795,0.)); +#872 = VECTOR('',#873,1.); +#873 = DIRECTION('',(0.,1.)); +#874 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#875 = ORIENTED_EDGE('',*,*,#876,.F.); +#876 = EDGE_CURVE('',#402,#849,#877,.T.); +#877 = SURFACE_CURVE('',#878,(#882,#889),.PCURVE_S1.); +#878 = LINE('',#879,#880); +#879 = CARTESIAN_POINT('',(0.,1.,0.3)); +#880 = VECTOR('',#881,1.); +#881 = DIRECTION('',(1.,0.,0.)); +#882 = PCURVE('',#441,#883); +#883 = DEFINITIONAL_REPRESENTATION('',(#884),#888); +#884 = LINE('',#885,#886); +#885 = CARTESIAN_POINT('',(0.3,0.)); +#886 = VECTOR('',#887,1.); +#887 = DIRECTION('',(0.,1.)); +#888 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#889 = PCURVE('',#678,#890); +#890 = DEFINITIONAL_REPRESENTATION('',(#891),#895); +#891 = LINE('',#892,#893); +#892 = CARTESIAN_POINT('',(-0.,0.)); +#893 = VECTOR('',#894,1.); +#894 = DIRECTION('',(-0.,1.)); +#895 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#896 = ADVANCED_FACE('',(#897),#491,.T.); +#897 = FACE_BOUND('',#898,.T.); +#898 = EDGE_LOOP('',(#899,#900,#901,#926)); +#899 = ORIENTED_EDGE('',*,*,#477,.F.); +#900 = ORIENTED_EDGE('',*,*,#613,.T.); +#901 = ORIENTED_EDGE('',*,*,#902,.T.); +#902 = EDGE_CURVE('',#614,#561,#903,.T.); +#903 = SURFACE_CURVE('',#904,(#909,#915),.PCURVE_S1.); +#904 = CIRCLE('',#905,0.3); +#905 = AXIS2_PLACEMENT_3D('',#906,#907,#908); +#906 = CARTESIAN_POINT('',(0.7,0.3,0.3)); +#907 = DIRECTION('',(-1.,-2.832769448824E-16,0.)); +#908 = DIRECTION('',(2.832769448824E-16,-1.,-0.)); +#909 = PCURVE('',#491,#910); +#910 = DEFINITIONAL_REPRESENTATION('',(#911),#914); +#911 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#912,#913),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#912 = CARTESIAN_POINT('',(1.570796326795,0.7)); +#913 = CARTESIAN_POINT('',(0.,0.7)); +#914 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#915 = PCURVE('',#916,#921); +#916 = SPHERICAL_SURFACE('',#917,0.3); +#917 = AXIS2_PLACEMENT_3D('',#918,#919,#920); +#918 = CARTESIAN_POINT('',(0.7,0.3,0.3)); +#919 = DIRECTION('',(0.,0.,1.)); +#920 = DIRECTION('',(1.,0.,-0.)); +#921 = DEFINITIONAL_REPRESENTATION('',(#922),#925); +#922 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#923,#924),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#923 = CARTESIAN_POINT('',(-1.570796326795,-1.570796326795)); +#924 = CARTESIAN_POINT('',(-1.570796326795,0.)); +#925 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#926 = ORIENTED_EDGE('',*,*,#588,.F.); +#927 = ADVANCED_FACE('',(#928),#521,.T.); +#928 = FACE_BOUND('',#929,.F.); +#929 = EDGE_LOOP('',(#930,#931,#932,#957)); +#930 = ORIENTED_EDGE('',*,*,#507,.F.); +#931 = ORIENTED_EDGE('',*,*,#719,.T.); +#932 = ORIENTED_EDGE('',*,*,#933,.T.); +#933 = EDGE_CURVE('',#720,#538,#934,.T.); +#934 = SURFACE_CURVE('',#935,(#940,#946),.PCURVE_S1.); +#935 = CIRCLE('',#936,0.3); +#936 = AXIS2_PLACEMENT_3D('',#937,#938,#939); +#937 = CARTESIAN_POINT('',(0.7,0.3,0.7)); +#938 = DIRECTION('',(1.,2.832769448824E-16,0.)); +#939 = DIRECTION('',(2.832769448824E-16,-1.,0.)); +#940 = PCURVE('',#521,#941); +#941 = DEFINITIONAL_REPRESENTATION('',(#942),#945); +#942 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#943,#944),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#943 = CARTESIAN_POINT('',(-1.570796326795,0.7)); +#944 = CARTESIAN_POINT('',(0.,0.7)); +#945 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#946 = PCURVE('',#947,#952); +#947 = SPHERICAL_SURFACE('',#948,0.3); +#948 = AXIS2_PLACEMENT_3D('',#949,#950,#951); +#949 = CARTESIAN_POINT('',(0.7,0.3,0.7)); +#950 = DIRECTION('',(-0.,-0.,-1.)); +#951 = DIRECTION('',(1.,0.,0.)); +#952 = DEFINITIONAL_REPRESENTATION('',(#953),#956); +#953 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#954,#955),.UNSPECIFIED.,.F.,.F., + (2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#954 = CARTESIAN_POINT('',(1.570796326795,-1.570796326795)); +#955 = CARTESIAN_POINT('',(1.570796326795,0.)); +#956 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#957 = ORIENTED_EDGE('',*,*,#537,.F.); +#958 = ADVANCED_FACE('',(#959),#576,.T.); +#959 = FACE_BOUND('',#960,.F.); +#960 = EDGE_LOOP('',(#961,#991,#1013,#1014)); +#961 = ORIENTED_EDGE('',*,*,#962,.F.); +#962 = EDGE_CURVE('',#963,#965,#967,.T.); +#963 = VERTEX_POINT('',#964); +#964 = CARTESIAN_POINT('',(1.,0.3,0.3)); +#965 = VERTEX_POINT('',#966); +#966 = CARTESIAN_POINT('',(1.,0.3,0.7)); +#967 = SURFACE_CURVE('',#968,(#972,#979),.PCURVE_S1.); +#968 = LINE('',#969,#970); +#969 = CARTESIAN_POINT('',(1.,0.3,0.)); +#970 = VECTOR('',#971,1.); +#971 = DIRECTION('',(0.,0.,1.)); +#972 = PCURVE('',#576,#973); +#973 = DEFINITIONAL_REPRESENTATION('',(#974),#978); +#974 = LINE('',#975,#976); +#975 = CARTESIAN_POINT('',(-0.,0.)); +#976 = VECTOR('',#977,1.); +#977 = DIRECTION('',(-0.,1.)); +#978 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#979 = PCURVE('',#980,#985); +#980 = PLANE('',#981); +#981 = AXIS2_PLACEMENT_3D('',#982,#983,#984); +#982 = CARTESIAN_POINT('',(1.,0.,0.)); +#983 = DIRECTION('',(1.,0.,0.)); +#984 = DIRECTION('',(0.,0.,1.)); +#985 = DEFINITIONAL_REPRESENTATION('',(#986),#990); +#986 = LINE('',#987,#988); +#987 = CARTESIAN_POINT('',(0.,-0.3)); +#988 = VECTOR('',#989,1.); +#989 = DIRECTION('',(1.,0.)); +#990 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#991 = ORIENTED_EDGE('',*,*,#992,.T.); +#992 = EDGE_CURVE('',#963,#561,#993,.T.); +#993 = SURFACE_CURVE('',#994,(#999,#1006),.PCURVE_S1.); +#994 = CIRCLE('',#995,0.3); +#995 = AXIS2_PLACEMENT_3D('',#996,#997,#998); +#996 = CARTESIAN_POINT('',(0.7,0.3,0.3)); +#997 = DIRECTION('',(0.,-0.,-1.)); +#998 = DIRECTION('',(1.,0.,-0.)); +#999 = PCURVE('',#576,#1000); +#1000 = DEFINITIONAL_REPRESENTATION('',(#1001),#1005); +#1001 = LINE('',#1002,#1003); +#1002 = CARTESIAN_POINT('',(-0.,0.3)); +#1003 = VECTOR('',#1004,1.); +#1004 = DIRECTION('',(-1.,0.)); +#1005 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1006 = PCURVE('',#916,#1007); +#1007 = DEFINITIONAL_REPRESENTATION('',(#1008),#1012); +#1008 = LINE('',#1009,#1010); +#1009 = CARTESIAN_POINT('',(-0.,0.)); +#1010 = VECTOR('',#1011,1.); +#1011 = DIRECTION('',(-1.,0.)); +#1012 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1013 = ORIENTED_EDGE('',*,*,#560,.T.); +#1014 = ORIENTED_EDGE('',*,*,#1015,.F.); +#1015 = EDGE_CURVE('',#965,#538,#1016,.T.); +#1016 = SURFACE_CURVE('',#1017,(#1022,#1029),.PCURVE_S1.); +#1017 = CIRCLE('',#1018,0.3); +#1018 = AXIS2_PLACEMENT_3D('',#1019,#1020,#1021); +#1019 = CARTESIAN_POINT('',(0.7,0.3,0.7)); +#1020 = DIRECTION('',(0.,0.,-1.)); +#1021 = DIRECTION('',(1.,0.,0.)); +#1022 = PCURVE('',#576,#1023); +#1023 = DEFINITIONAL_REPRESENTATION('',(#1024),#1028); +#1024 = LINE('',#1025,#1026); +#1025 = CARTESIAN_POINT('',(-0.,0.7)); +#1026 = VECTOR('',#1027,1.); +#1027 = DIRECTION('',(-1.,0.)); +#1028 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1029 = PCURVE('',#947,#1030); +#1030 = DEFINITIONAL_REPRESENTATION('',(#1031),#1035); +#1031 = LINE('',#1032,#1033); +#1032 = CARTESIAN_POINT('',(0.,0.)); +#1033 = VECTOR('',#1034,1.); +#1034 = DIRECTION('',(1.,0.)); +#1035 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1036 = ADVANCED_FACE('',(#1037),#678,.T.); +#1037 = FACE_BOUND('',#1038,.F.); +#1038 = EDGE_LOOP('',(#1039,#1040,#1041,#1066)); +#1039 = ORIENTED_EDGE('',*,*,#694,.F.); +#1040 = ORIENTED_EDGE('',*,*,#664,.T.); +#1041 = ORIENTED_EDGE('',*,*,#1042,.T.); +#1042 = EDGE_CURVE('',#637,#849,#1043,.T.); +#1043 = SURFACE_CURVE('',#1044,(#1049,#1055),.PCURVE_S1.); +#1044 = CIRCLE('',#1045,0.3); +#1045 = AXIS2_PLACEMENT_3D('',#1046,#1047,#1048); +#1046 = CARTESIAN_POINT('',(0.7,0.7,0.3)); +#1047 = DIRECTION('',(1.,-2.832769448824E-16,0.)); +#1048 = DIRECTION('',(2.832769448824E-16,1.,0.)); +#1049 = PCURVE('',#678,#1050); +#1050 = DEFINITIONAL_REPRESENTATION('',(#1051),#1054); +#1051 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#1052,#1053),.UNSPECIFIED.,.F., + .F.,(2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#1052 = CARTESIAN_POINT('',(-1.570796326795,0.7)); +#1053 = CARTESIAN_POINT('',(0.,0.7)); +#1054 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1055 = PCURVE('',#1056,#1061); +#1056 = SPHERICAL_SURFACE('',#1057,0.3); +#1057 = AXIS2_PLACEMENT_3D('',#1058,#1059,#1060); +#1058 = CARTESIAN_POINT('',(0.7,0.7,0.3)); +#1059 = DIRECTION('',(0.,0.,1.)); +#1060 = DIRECTION('',(1.,0.,-0.)); +#1061 = DEFINITIONAL_REPRESENTATION('',(#1062),#1065); +#1062 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#1063,#1064),.UNSPECIFIED.,.F., + .F.,(2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#1063 = CARTESIAN_POINT('',(1.570796326795,-1.570796326795)); +#1064 = CARTESIAN_POINT('',(1.570796326795,0.)); +#1065 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1066 = ORIENTED_EDGE('',*,*,#876,.F.); +#1067 = ADVANCED_FACE('',(#1068),#652,.T.); +#1068 = FACE_BOUND('',#1069,.T.); +#1069 = EDGE_LOOP('',(#1070,#1090,#1091,#1113)); +#1070 = ORIENTED_EDGE('',*,*,#1071,.F.); +#1071 = EDGE_CURVE('',#614,#963,#1072,.T.); +#1072 = SURFACE_CURVE('',#1073,(#1078,#1084),.PCURVE_S1.); +#1073 = CIRCLE('',#1074,0.3); +#1074 = AXIS2_PLACEMENT_3D('',#1075,#1076,#1077); +#1075 = CARTESIAN_POINT('',(0.7,0.3,0.3)); +#1076 = DIRECTION('',(0.,-1.,0.)); +#1077 = DIRECTION('',(1.,0.,0.)); +#1078 = PCURVE('',#652,#1079); +#1079 = DEFINITIONAL_REPRESENTATION('',(#1080),#1083); +#1080 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#1081,#1082),.UNSPECIFIED.,.F., + .F.,(2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#1081 = CARTESIAN_POINT('',(1.570796326795,0.3)); +#1082 = CARTESIAN_POINT('',(0.,0.3)); +#1083 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1084 = PCURVE('',#916,#1085); +#1085 = DEFINITIONAL_REPRESENTATION('',(#1086),#1089); +#1086 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#1087,#1088),.UNSPECIFIED.,.F., + .F.,(2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#1087 = CARTESIAN_POINT('',(0.,-1.570796326795)); +#1088 = CARTESIAN_POINT('',(0.,0.)); +#1089 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1090 = ORIENTED_EDGE('',*,*,#636,.T.); +#1091 = ORIENTED_EDGE('',*,*,#1092,.T.); +#1092 = EDGE_CURVE('',#637,#1093,#1095,.T.); +#1093 = VERTEX_POINT('',#1094); +#1094 = CARTESIAN_POINT('',(1.,0.7,0.3)); +#1095 = SURFACE_CURVE('',#1096,(#1101,#1107),.PCURVE_S1.); +#1096 = CIRCLE('',#1097,0.3); +#1097 = AXIS2_PLACEMENT_3D('',#1098,#1099,#1100); +#1098 = CARTESIAN_POINT('',(0.7,0.7,0.3)); +#1099 = DIRECTION('',(0.,-1.,0.)); +#1100 = DIRECTION('',(1.,0.,0.)); +#1101 = PCURVE('',#652,#1102); +#1102 = DEFINITIONAL_REPRESENTATION('',(#1103),#1106); +#1103 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#1104,#1105),.UNSPECIFIED.,.F., + .F.,(2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#1104 = CARTESIAN_POINT('',(1.570796326795,0.7)); +#1105 = CARTESIAN_POINT('',(0.,0.7)); +#1106 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1107 = PCURVE('',#1056,#1108); +#1108 = DEFINITIONAL_REPRESENTATION('',(#1109),#1112); +#1109 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#1110,#1111),.UNSPECIFIED.,.F., + .F.,(2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#1110 = CARTESIAN_POINT('',(0.,-1.570796326795)); +#1111 = CARTESIAN_POINT('',(0.,0.)); +#1112 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1113 = ORIENTED_EDGE('',*,*,#1114,.F.); +#1114 = EDGE_CURVE('',#963,#1093,#1115,.T.); +#1115 = SURFACE_CURVE('',#1116,(#1120,#1127),.PCURVE_S1.); +#1116 = LINE('',#1117,#1118); +#1117 = CARTESIAN_POINT('',(1.,0.,0.3)); +#1118 = VECTOR('',#1119,1.); +#1119 = DIRECTION('',(0.,1.,0.)); +#1120 = PCURVE('',#652,#1121); +#1121 = DEFINITIONAL_REPRESENTATION('',(#1122),#1126); +#1122 = LINE('',#1123,#1124); +#1123 = CARTESIAN_POINT('',(0.,0.)); +#1124 = VECTOR('',#1125,1.); +#1125 = DIRECTION('',(0.,1.)); +#1126 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1127 = PCURVE('',#980,#1128); +#1128 = DEFINITIONAL_REPRESENTATION('',(#1129),#1133); +#1129 = LINE('',#1130,#1131); +#1130 = CARTESIAN_POINT('',(0.3,0.)); +#1131 = VECTOR('',#1132,1.); +#1132 = DIRECTION('',(0.,-1.)); +#1133 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1134 = ADVANCED_FACE('',(#1135),#784,.T.); +#1135 = FACE_BOUND('',#1136,.T.); +#1136 = EDGE_LOOP('',(#1137,#1138,#1139,#1164)); +#1137 = ORIENTED_EDGE('',*,*,#800,.T.); +#1138 = ORIENTED_EDGE('',*,*,#770,.T.); +#1139 = ORIENTED_EDGE('',*,*,#1140,.F.); +#1140 = EDGE_CURVE('',#826,#743,#1141,.T.); +#1141 = SURFACE_CURVE('',#1142,(#1147,#1153),.PCURVE_S1.); +#1142 = CIRCLE('',#1143,0.3); +#1143 = AXIS2_PLACEMENT_3D('',#1144,#1145,#1146); +#1144 = CARTESIAN_POINT('',(0.7,0.7,0.7)); +#1145 = DIRECTION('',(1.,0.,-2.832769448824E-16)); +#1146 = DIRECTION('',(2.832769448824E-16,0.,1.)); +#1147 = PCURVE('',#784,#1148); +#1148 = DEFINITIONAL_REPRESENTATION('',(#1149),#1152); +#1149 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#1150,#1151),.UNSPECIFIED.,.F., + .F.,(2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#1150 = CARTESIAN_POINT('',(0.,0.7)); +#1151 = CARTESIAN_POINT('',(1.570796326795,0.7)); +#1152 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1153 = PCURVE('',#1154,#1159); +#1154 = SPHERICAL_SURFACE('',#1155,0.3); +#1155 = AXIS2_PLACEMENT_3D('',#1156,#1157,#1158); +#1156 = CARTESIAN_POINT('',(0.7,0.7,0.7)); +#1157 = DIRECTION('',(-0.,-1.,-0.)); +#1158 = DIRECTION('',(1.,-0.,0.)); +#1159 = DEFINITIONAL_REPRESENTATION('',(#1160),#1163); +#1160 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#1161,#1162),.UNSPECIFIED.,.F., + .F.,(2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#1161 = CARTESIAN_POINT('',(1.570796326795,-1.570796326795)); +#1162 = CARTESIAN_POINT('',(1.570796326795,0.)); +#1163 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1164 = ORIENTED_EDGE('',*,*,#825,.F.); +#1165 = ADVANCED_FACE('',(#1166),#758,.T.); +#1166 = FACE_BOUND('',#1167,.F.); +#1167 = EDGE_LOOP('',(#1168,#1188,#1189,#1213)); +#1168 = ORIENTED_EDGE('',*,*,#1169,.F.); +#1169 = EDGE_CURVE('',#720,#965,#1170,.T.); +#1170 = SURFACE_CURVE('',#1171,(#1176,#1182),.PCURVE_S1.); +#1171 = CIRCLE('',#1172,0.3); +#1172 = AXIS2_PLACEMENT_3D('',#1173,#1174,#1175); +#1173 = CARTESIAN_POINT('',(0.7,0.3,0.7)); +#1174 = DIRECTION('',(-0.,1.,0.)); +#1175 = DIRECTION('',(1.,0.,0.)); +#1176 = PCURVE('',#758,#1177); +#1177 = DEFINITIONAL_REPRESENTATION('',(#1178),#1181); +#1178 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#1179,#1180),.UNSPECIFIED.,.F., + .F.,(2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#1179 = CARTESIAN_POINT('',(-1.570796326795,0.3)); +#1180 = CARTESIAN_POINT('',(0.,0.3)); +#1181 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1182 = PCURVE('',#947,#1183); +#1183 = DEFINITIONAL_REPRESENTATION('',(#1184),#1187); +#1184 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#1185,#1186),.UNSPECIFIED.,.F., + .F.,(2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#1185 = CARTESIAN_POINT('',(0.,-1.570796326795)); +#1186 = CARTESIAN_POINT('',(0.,0.)); +#1187 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1188 = ORIENTED_EDGE('',*,*,#742,.T.); +#1189 = ORIENTED_EDGE('',*,*,#1190,.F.); +#1190 = EDGE_CURVE('',#1191,#743,#1193,.T.); +#1191 = VERTEX_POINT('',#1192); +#1192 = CARTESIAN_POINT('',(1.,0.7,0.7)); +#1193 = SURFACE_CURVE('',#1194,(#1199,#1206),.PCURVE_S1.); +#1194 = CIRCLE('',#1195,0.3); +#1195 = AXIS2_PLACEMENT_3D('',#1196,#1197,#1198); +#1196 = CARTESIAN_POINT('',(0.7,0.7,0.7)); +#1197 = DIRECTION('',(-0.,-1.,0.)); +#1198 = DIRECTION('',(1.,-0.,0.)); +#1199 = PCURVE('',#758,#1200); +#1200 = DEFINITIONAL_REPRESENTATION('',(#1201),#1205); +#1201 = LINE('',#1202,#1203); +#1202 = CARTESIAN_POINT('',(-0.,0.7)); +#1203 = VECTOR('',#1204,1.); +#1204 = DIRECTION('',(-1.,0.)); +#1205 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1206 = PCURVE('',#1154,#1207); +#1207 = DEFINITIONAL_REPRESENTATION('',(#1208),#1212); +#1208 = LINE('',#1209,#1210); +#1209 = CARTESIAN_POINT('',(0.,0.)); +#1210 = VECTOR('',#1211,1.); +#1211 = DIRECTION('',(1.,0.)); +#1212 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1213 = ORIENTED_EDGE('',*,*,#1214,.F.); +#1214 = EDGE_CURVE('',#965,#1191,#1215,.T.); +#1215 = SURFACE_CURVE('',#1216,(#1220,#1227),.PCURVE_S1.); +#1216 = LINE('',#1217,#1218); +#1217 = CARTESIAN_POINT('',(1.,0.,0.7)); +#1218 = VECTOR('',#1219,1.); +#1219 = DIRECTION('',(0.,1.,0.)); +#1220 = PCURVE('',#758,#1221); +#1221 = DEFINITIONAL_REPRESENTATION('',(#1222),#1226); +#1222 = LINE('',#1223,#1224); +#1223 = CARTESIAN_POINT('',(-0.,0.)); +#1224 = VECTOR('',#1225,1.); +#1225 = DIRECTION('',(-0.,1.)); +#1226 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1227 = PCURVE('',#980,#1228); +#1228 = DEFINITIONAL_REPRESENTATION('',(#1229),#1233); +#1229 = LINE('',#1230,#1231); +#1230 = CARTESIAN_POINT('',(0.7,0.)); +#1231 = VECTOR('',#1232,1.); +#1232 = DIRECTION('',(0.,-1.)); +#1233 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1234 = ADVANCED_FACE('',(#1235),#864,.T.); +#1235 = FACE_BOUND('',#1236,.T.); +#1236 = EDGE_LOOP('',(#1237,#1258,#1280,#1281)); +#1237 = ORIENTED_EDGE('',*,*,#1238,.F.); +#1238 = EDGE_CURVE('',#1093,#1191,#1239,.T.); +#1239 = SURFACE_CURVE('',#1240,(#1244,#1251),.PCURVE_S1.); +#1240 = LINE('',#1241,#1242); +#1241 = CARTESIAN_POINT('',(1.,0.7,0.)); +#1242 = VECTOR('',#1243,1.); +#1243 = DIRECTION('',(0.,0.,1.)); +#1244 = PCURVE('',#864,#1245); +#1245 = DEFINITIONAL_REPRESENTATION('',(#1246),#1250); +#1246 = LINE('',#1247,#1248); +#1247 = CARTESIAN_POINT('',(0.,0.)); +#1248 = VECTOR('',#1249,1.); +#1249 = DIRECTION('',(0.,1.)); +#1250 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1251 = PCURVE('',#980,#1252); +#1252 = DEFINITIONAL_REPRESENTATION('',(#1253),#1257); +#1253 = LINE('',#1254,#1255); +#1254 = CARTESIAN_POINT('',(0.,-0.7)); +#1255 = VECTOR('',#1256,1.); +#1256 = DIRECTION('',(1.,0.)); +#1257 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1258 = ORIENTED_EDGE('',*,*,#1259,.T.); +#1259 = EDGE_CURVE('',#1093,#849,#1260,.T.); +#1260 = SURFACE_CURVE('',#1261,(#1266,#1273),.PCURVE_S1.); +#1261 = CIRCLE('',#1262,0.3); +#1262 = AXIS2_PLACEMENT_3D('',#1263,#1264,#1265); +#1263 = CARTESIAN_POINT('',(0.7,0.7,0.3)); +#1264 = DIRECTION('',(0.,0.,1.)); +#1265 = DIRECTION('',(1.,0.,-0.)); +#1266 = PCURVE('',#864,#1267); +#1267 = DEFINITIONAL_REPRESENTATION('',(#1268),#1272); +#1268 = LINE('',#1269,#1270); +#1269 = CARTESIAN_POINT('',(0.,0.3)); +#1270 = VECTOR('',#1271,1.); +#1271 = DIRECTION('',(1.,0.)); +#1272 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1273 = PCURVE('',#1056,#1274); +#1274 = DEFINITIONAL_REPRESENTATION('',(#1275),#1279); +#1275 = LINE('',#1276,#1277); +#1276 = CARTESIAN_POINT('',(0.,0.)); +#1277 = VECTOR('',#1278,1.); +#1278 = DIRECTION('',(1.,0.)); +#1279 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1280 = ORIENTED_EDGE('',*,*,#848,.T.); +#1281 = ORIENTED_EDGE('',*,*,#1282,.T.); +#1282 = EDGE_CURVE('',#826,#1191,#1283,.T.); +#1283 = SURFACE_CURVE('',#1284,(#1289,#1295),.PCURVE_S1.); +#1284 = CIRCLE('',#1285,0.3); +#1285 = AXIS2_PLACEMENT_3D('',#1286,#1287,#1288); +#1286 = CARTESIAN_POINT('',(0.7,0.7,0.7)); +#1287 = DIRECTION('',(0.,0.,-1.)); +#1288 = DIRECTION('',(1.,0.,0.)); +#1289 = PCURVE('',#864,#1290); +#1290 = DEFINITIONAL_REPRESENTATION('',(#1291),#1294); +#1291 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#1292,#1293),.UNSPECIFIED.,.F., + .F.,(2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#1292 = CARTESIAN_POINT('',(1.570796326795,0.7)); +#1293 = CARTESIAN_POINT('',(0.,0.7)); +#1294 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1295 = PCURVE('',#1154,#1296); +#1296 = DEFINITIONAL_REPRESENTATION('',(#1297),#1300); +#1297 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#1298,#1299),.UNSPECIFIED.,.F., + .F.,(2,2),(4.712388980385,6.28318530718),.PIECEWISE_BEZIER_KNOTS.); +#1298 = CARTESIAN_POINT('',(0.,-1.570796326795)); +#1299 = CARTESIAN_POINT('',(0.,0.)); +#1300 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1301 = ADVANCED_FACE('',(#1302),#916,.T.); +#1302 = FACE_BOUND('',#1303,.F.); +#1303 = EDGE_LOOP('',(#1304,#1305,#1306)); +#1304 = ORIENTED_EDGE('',*,*,#1071,.F.); +#1305 = ORIENTED_EDGE('',*,*,#902,.T.); +#1306 = ORIENTED_EDGE('',*,*,#992,.F.); +#1307 = ADVANCED_FACE('',(#1308),#947,.T.); +#1308 = FACE_BOUND('',#1309,.T.); +#1309 = EDGE_LOOP('',(#1310,#1311,#1312)); +#1310 = ORIENTED_EDGE('',*,*,#1169,.F.); +#1311 = ORIENTED_EDGE('',*,*,#933,.T.); +#1312 = ORIENTED_EDGE('',*,*,#1015,.F.); +#1313 = ADVANCED_FACE('',(#1314),#980,.T.); +#1314 = FACE_BOUND('',#1315,.T.); +#1315 = EDGE_LOOP('',(#1316,#1317,#1318,#1319)); +#1316 = ORIENTED_EDGE('',*,*,#962,.F.); +#1317 = ORIENTED_EDGE('',*,*,#1114,.T.); +#1318 = ORIENTED_EDGE('',*,*,#1238,.T.); +#1319 = ORIENTED_EDGE('',*,*,#1214,.F.); +#1320 = ADVANCED_FACE('',(#1321),#1056,.T.); +#1321 = FACE_BOUND('',#1322,.T.); +#1322 = EDGE_LOOP('',(#1323,#1324,#1325)); +#1323 = ORIENTED_EDGE('',*,*,#1092,.F.); +#1324 = ORIENTED_EDGE('',*,*,#1042,.T.); +#1325 = ORIENTED_EDGE('',*,*,#1259,.F.); +#1326 = ADVANCED_FACE('',(#1327),#1154,.T.); +#1327 = FACE_BOUND('',#1328,.T.); +#1328 = EDGE_LOOP('',(#1329,#1330,#1331)); +#1329 = ORIENTED_EDGE('',*,*,#1282,.F.); +#1330 = ORIENTED_EDGE('',*,*,#1140,.T.); +#1331 = ORIENTED_EDGE('',*,*,#1190,.F.); +#1332 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1336)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#1333,#1334,#1335)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#1333 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#1334 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#1335 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#1336 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#1333, + 'distance_accuracy_value','confusion accuracy'); +#1337 = SHAPE_DEFINITION_REPRESENTATION(#1338,#25); +#1338 = PRODUCT_DEFINITION_SHAPE('','',#1339); +#1339 = PRODUCT_DEFINITION('design','',#1340,#1343); +#1340 = PRODUCT_DEFINITION_FORMATION('','',#1341); +#1341 = PRODUCT('Fillet','Fillet','',(#1342)); +#1342 = MECHANICAL_CONTEXT('',#2,'mechanical'); +#1343 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#1344 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#1345,#1347); +#1345 = ( REPRESENTATION_RELATIONSHIP('','',#25,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#1346) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#1346 = ITEM_DEFINED_TRANSFORMATION('','',#11,#15); +#1347 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #1348); +#1348 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('2','=>[0:1:1:2]','',#5,#1339,$); +#1349 = PRODUCT_TYPE('part',$,(#1341)); +#1350 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #1351),#1332); +#1351 = STYLED_ITEM('color',(#1352),#26); +#1352 = PRESENTATION_STYLE_ASSIGNMENT((#1353,#1359)); +#1353 = SURFACE_STYLE_USAGE(.BOTH.,#1354); +#1354 = SURFACE_SIDE_STYLE('',(#1355)); +#1355 = SURFACE_STYLE_FILL_AREA(#1356); +#1356 = FILL_AREA_STYLE('',(#1357)); +#1357 = FILL_AREA_STYLE_COLOUR('',#1358); +#1358 = COLOUR_RGB('',0.800000011921,0.800000011921,0.800000011921); +#1359 = CURVE_STYLE('',#1360,POSITIVE_LENGTH_MEASURE(0.1),#1358); +#1360 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +ENDSEC; +END-ISO-10303-21; -- GitLab From aad78399878ae462d3b0bd5694084afd685cddfe Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Wed, 7 Jun 2017 20:53:47 -0500 Subject: [PATCH 8/8] Skip FMMlib tests when not available --- test/test_layer_pot.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/test_layer_pot.py b/test/test_layer_pot.py index 606304da..7e86a96e 100644 --- a/test/test_layer_pot.py +++ b/test/test_layer_pot.py @@ -805,6 +805,9 @@ def test_integral_equation(ctx_getter, case): cl_ctx = ctx_getter() queue = cl.CommandQueue(cl_ctx) + if case.fmm_backend == "fmmlib": + pytest.importorskip("pyfmmlib") + # prevent cache 'splosion from sympy.core.cache import clear_cache clear_cache() -- GitLab