Application module: Layered interconnect module design ISO/TS 10303-1698:2018-11(E)
© ISO

Cover page
Table of contents
Copyright
Foreword
Introduction
1 Scope
2 Normative references
3 Terms, definitions and abbreviated terms
    3.1 Terms and definitions
    3.2 Abbreviated terms

4 Information requirements
   4.1 Required AM ARMs
   4.2 ARM constant definitions
   4.3 ARM type definitions
   4.4 ARM entity definitions
   4.5 ARM subtype constraint definitions
   4.6 ARM function definitions
   4.7 ARM rule definition
5 Module interpreted model
   5.1 Mapping specification
   5.2 MIM EXPRESS short listing
     5.2.1 MIM type definitions
     5.2.2 MIM entity definitions
     5.2.3 MIM subtype constraint definitions

A MIM short names
B Information object registration
C ARM EXPRESS-G   EXPRESS-G
D MIM EXPRESS-G   EXPRESS-G
E Computer interpretable listings
F Change history
Bibliography
Index

(*
ISO/TC 184/SC 4/WG 12 N9442 - ISO/TS 10303-1698 Layered interconnect module design - EXPRESS ARM
Supersedes ISO/TC 184/SC 4/WG 12 N8170
*)



SCHEMA Layered_interconnect_module_design_arm;

USE FROM Component_grouping_arm;    -- ISO/TS 10303-1656

USE FROM Edge_shape_feature_arm;    -- ISO/TS 10303-1673

USE FROM Footprint_definition_arm;    -- ISO/TS 10303-1646

USE FROM Assembly_component_placement_requirements_arm;    -- ISO/TS 10303-1634

USE FROM Land_arm;    -- ISO/TS 10303-1692

USE FROM Layered_interconnect_module_with_printed_component_design_arm;    -- ISO/TS 10303-1700

REFERENCE FROM Assembly_component_arm   -- ISO/TS 10303-1802
  (get_assemblies);

REFERENCE FROM Support_resource_arm   -- ISO/TS 10303-1800
  (bag_to_set);

REFERENCE FROM Physical_unit_2d_design_view_arm   -- ISO/TS 10303-1724
  (pu2dv_has_shape,
   pu2dv_typeof);


CONSTANT
  Pre_defined_physical_network_group_relation_types : SET[0:?] OF STRING :=
   [ 'group to higher order group',
     'group to higher ranking group',
     'element to ordered multiple line bus'];

  Pre_defined_physical_network_group_types : SET[0:?] OF STRING :=
   [ 'differential pair',
     'balanced length',
     'coaxial group',
     'multi line bus'];
END_CONSTANT;

TYPE area_component_templates = SELECT
   (Stratum_feature_template,
    Fill_area_template);
END_TYPE;

TYPE bare_die_component_or_packaged_component = EXTENSIBLE GENERIC_ENTITY SELECT;
END_TYPE;

TYPE bare_die_terminal_or_packaged_part_terminal = EXTENSIBLE GENERIC_ENTITY SELECT;
END_TYPE;

TYPE component_feature_or_stratum_surface = EXTENSIBLE GENERIC_ENTITY SELECT
   (Component_feature,
    Stratum_surface);
END_TYPE;

TYPE design_or_documentation_stratum = SELECT
   (Design_layer_stratum,
    Documentation_layer_stratum);
END_TYPE;

TYPE limd_documented_element_select = SELECT BASED_ON documented_element_select WITH
   (stratum_concept);
END_TYPE;

TYPE limd_external_identification_item = SELECT BASED_ON external_identification_item WITH
   (Externally_defined_physical_network_group,
    Externally_defined_physical_network_group_element_relationship,
    Stratum_feature_based_derived_pattern,
    Stratum,
    Laminate_component);
END_TYPE;

TYPE limd_groupable_item = SELECT BASED_ON groupable_item WITH
   (Generic_physical_network,
    Stratum);
END_TYPE;

TYPE limd_requirement_assignment_item = SELECT BASED_ON requirement_assignment_item WITH
   (Layered_interconnect_module_design_view,
    Stratum_feature_conductive_join);
END_TYPE;

TYPE limd_restriction_basis_item = SELECT BASED_ON restriction_basis_item WITH
   (stratum_concept);
END_TYPE;

TYPE limd_sf_shape_select = EXTENSIBLE GENERIC_ENTITY SELECT;
END_TYPE;

TYPE limd_stratum_shape_model_select = EXTENSIBLE GENERIC_ENTITY SELECT;
END_TYPE;

TYPE limd_usage_concept = SELECT BASED_ON usage_concept WITH
   (Component_termination_passage_template_terminal,
    Via_template_terminal);
END_TYPE;

TYPE material_or_specification = SELECT
   (Predefined_requirement_view_definition,
    Material_identification);
END_TYPE;

TYPE material_removal_feature_template_or_parametric_template = SELECT
   (Material_removal_feature_template,
    Parametric_template);
END_TYPE;

TYPE special_symbol_component = SELECT
   (Single_stratum_special_symbol_component,
    Multi_stratum_special_symbol_component);
END_TYPE;

TYPE stratum_concept = EXTENSIBLE GENERIC_ENTITY SELECT
   (Laminate_component,
    Inter_stratum_feature,
    Stratum_feature,
    Stratum,
    Stratum_surface,
    Structured_layout_component);
END_TYPE;

TYPE stratum_feature_or_stratum = SELECT
   (Stratum_feature,
    Stratum);
END_TYPE;

TYPE stratum_feature_template_component_or_stratum = SELECT
   (Stratum_feature_template_component,
    Stratum);
END_TYPE;

TYPE stratum_feature_template_or_parametric_template = SELECT
   (Stratum_feature_template,
    Parametric_template);
END_TYPE;

TYPE stratum_surface_designation = ENUMERATION OF
   (average_surface,
    primary_surface,
    secondary_surface);
END_TYPE;

TYPE terminal_or_inter_stratum_feature = EXTENSIBLE GENERIC_ENTITY SELECT
   (Embedded_physical_component_terminal,
    Inter_stratum_feature,
    Interconnect_module_terminal,
    Printed_component_join_terminal);
END_TYPE;

ENTITY Additive_laminate_text_component
  SUBTYPE OF (Generic_laminate_text_component);
  stratum_feature_implementation : SET[1:?] OF Stratum_feature;
WHERE
  WR1: SIZEOF(QUERY(sf <* stratum_feature_implementation | sf.associated_definition :<>: stratum_feature_implementation[1].associated_definition)) = 0;
END_ENTITY;

ENTITY Adjacent_stratum_surface_embedded_physical_component_surface_definition;
  name : STRING;
  precedent_item : component_feature_or_stratum_surface;
  subsequent_item : component_feature_or_stratum_surface;
UNIQUE
  UR1: name;
  UR2: precedent_item, subsequent_item;
WHERE
  WR1: precedent_item <> subsequent_item;
  WR2: NOT ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.COMPONENT_FEATURE' IN TYPEOF(precedent_item)) OR (SIZEOF(['LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.BARE_DIE_SURFACE', 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.PACKAGE_BODY_SURFACE', 'INTERCONNECT_MODULE_USAGE_VIEW_ARM.INTERCONNECT_MODULE_SECONDARY_SURFACE'] * TYPEOF(precedent_item.definition)) = 1);
  WR3: NOT ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.COMPONENT_FEATURE' IN TYPEOF(subsequent_item)) OR (SIZEOF(['LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.BARE_DIE_SURFACE', 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.PACKAGE_BODY_SURFACE', 'INTERCONNECT_MODULE_USAGE_VIEW_ARM.INTERCONNECT_MODULE_PRIMARY_SURFACE'] * TYPEOF(subsequent_item.definition)) = 1);
  WR4: NOT ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_SURFACE' IN TYPEOF(precedent_item)) OR (precedent_item.name = stratum_surface_designation.secondary_surface);
  WR5: NOT ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_SURFACE' IN TYPEOF(subsequent_item)) OR (precedent_item.name = stratum_surface_designation.primary_surface);
END_ENTITY;

ENTITY Area_component
  SUPERTYPE OF (Connected_area_component)
  SUBTYPE OF (Stratum_feature_template_component);
  explicitly_created : BOOLEAN;
  is_base : BOOLEAN;
  replaced_component : OPTIONAL Area_component;
  SELF\Definition_based_product_occurrence.derived_from : area_component_templates;
DERIVE
  is_final : LOGICAL := (SIZEOF(replaced_by) = 0);
INVERSE
  replaced_by : SET[0:?] OF Area_component FOR replaced_component;
WHERE
  WR1: NOT((is_final AND pu2dv_has_shape(SELF)) XOR ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_FEATURE' IN TYPEOF(implementation_or_resident_stratum)));
  WR2: is_final OR (SIZEOF(QUERY(rp <* replaced_by | SELF\Stratum_feature_template_component.resident_stratum :<>: get_resident_stratum(rp))) = 0);
  WR3: NOT(SELF IN replaced_by);
  WR4: NOT(replaced_component IN replaced_by);
  WR5: is_final XOR (SIZEOF(USEDIN(SELF,'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.MATERIAL_REMOVAL_LAMINATE_COMPONENT.DESIGN_INTENT')) > 0);
  WR6: NOT EXISTS(replaced_component) OR (NOT (SIZEOF(replaced_by) > 0) OR ((SIZEOF(QUERY(rb <* replaced_by | (acyclic_area_component(SELF,[rb], 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.AREA_COMPONENT'))))) = (SIZEOF(replaced_by)) ) );
  WR7: pu2dv_has_shape(SELF) OR ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM' IN TYPEOF(implementation_or_resident_stratum));
  WR8: NOT(SIZEOF(replaced_by) > 0) OR ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM' IN TYPEOF(implementation_or_resident_stratum));
  WR9: NOT is_base OR VALUE_IN(pu2dv_typeof(SELF), 'CONSTRUCTIVE_SOLID_GEOMETRY_2D_ARM.SINGLE_BOUNDARY_CSG_2D_MODEL');
END_ENTITY;

ENTITY Breakout_occurrence
  SUBTYPE OF (Footprint_occurrence);
  SELF\Definition_based_product_occurrence.derived_from : Breakout_footprint_definition;
  associated_footprint : Footprint_occurrence;
WHERE
  WR1: associated_footprint <> SELF;
  WR2: derived_from.reference_footprint = associated_footprint.derived_from;
END_ENTITY;

ENTITY Component_termination_passage
  SUBTYPE OF (Plated_passage);
  SELF\Definition_based_product_occurrence.derived_from : Component_termination_passage_template;
INVERSE
  access_mechanism : SET[1:?] OF Component_termination_passage_join_terminal FOR associated_definition;
  interface_access_mechanism : Component_termination_passage_interface_terminal FOR associated_definition;
END_ENTITY;

ENTITY Component_termination_passage_interface_terminal
  SUBTYPE OF (Laminate_component_interface_terminal);
  SELF\Component_feature.definition : Component_termination_passage_template_interface_terminal;
  SELF\Component_feature.associated_definition : Component_termination_passage;
WHERE
  WR1: NOT EXISTS(SELF\Shape_element.description);
END_ENTITY;

ENTITY Component_termination_passage_join_terminal
  SUBTYPE OF (Laminate_component_join_terminal);
  SELF\Component_feature.definition : Component_termination_passage_template_join_terminal;
  SELF\Component_feature.associated_definition : Component_termination_passage;
WHERE
  WR1: NOT EXISTS(SELF\Shape_element.description);
END_ENTITY;

ENTITY Conductive_filled_area
  SUPERTYPE OF (Connected_filled_area)
  SUBTYPE OF (Stratum_feature);
WHERE
  WR1: NOT EXISTS(SELF\Shape_element.description);
END_ENTITY;

ENTITY Conductive_interconnect_element
  ABSTRACT SUPERTYPE OF (ONEOF (Unrouted_conductive_interconnect_element,
                                Conductive_interconnect_element_with_pre_defined_transitions))
  SUBTYPE OF (Stratum_feature_template_component);
INVERSE
  access_mechanisms : SET[2:?] OF Conductive_interconnect_element_terminal FOR associated_definition;
  connected_points : SET[1:?] OF Conductive_interconnect_element_terminal_link FOR associated_element;
WHERE
  WR1: NOT EXISTS(SELF\Product_view_definition.name);
  WR2: NOT('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.PROBE_ACCESS_AREA' IN TYPEOF(SELF));
  WR3: NOT('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.FIDUCIAL' IN TYPEOF(SELF));
  WR4: correlated_terminals(SELF\Conductive_interconnect_element.access_mechanisms, connected_points);
  WR5: (1 + SIZEOF(connected_points)) = limd_get_sz_cp(connected_points);
  WR6: NOT('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.AREA_COMPONENT' IN TYPEOF(SELF));
END_ENTITY;

ENTITY Conductive_interconnect_element_terminal
  SUBTYPE OF (Laminate_component_feature);
  SELF\Component_feature.associated_definition : Conductive_interconnect_element;
  connection_area : OPTIONAL SET[1:1] OF Connection_zone_in_design_view;
  location : Layer_connection_point;
UNIQUE
  UR1: SELF\Shape_element.element_name, associated_definition;
WHERE
  WR1: NOT EXISTS(SELF\Shape_element.description);
END_ENTITY;

ENTITY Conductive_interconnect_element_terminal_link;
  associated_element : Conductive_interconnect_element;
  precedent_point : Conductive_interconnect_element_terminal;
  subsequent_point : Conductive_interconnect_element_terminal;
UNIQUE
  UR1: precedent_point, subsequent_point;
WHERE
  WR1: precedent_point <> subsequent_point;
  WR2: precedent_point.associated_definition = associated_element;
  WR3: subsequent_point.associated_definition = associated_element;
  WR4: acyclic_conductive_interconnect_element_terminal_link(SELF, [subsequent_point], 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.CONDUCTIVE_INTERCONNECT_ELEMENT_TERMINAL_LINK');
END_ENTITY;

ENTITY Conductive_interconnect_element_with_pre_defined_transitions
  SUBTYPE OF (Conductive_interconnect_element);
  centreline_shape : Path_area_with_parameters;
  SELF\Definition_based_product_occurrence.derived_from : Trace_template;
  SELF\Stratum_feature_template_component.implementation_or_resident_stratum : Stratum_feature;
WHERE
  WR1: SIZEOF(connected_points) = SIZEOF(SELF\Conductive_interconnect_element.access_mechanisms) - 1;
  WR2: SIZEOF(['LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.CONDUCTOR', 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.CONDUCTIVE_FILLED_AREA'] * TYPEOF(SELF\Stratum_feature_template_component.implementation_or_resident_stratum)) = 1;
  WR3: centreline_shape.parameters = derived_from.trace_style;
  WR4: SIZEOF(QUERY(ciet <* SELF\Conductive_interconnect_element.access_mechanisms | NOT(ciet.location.resident_design_layer_stratum = SELF\Stratum_feature_template_component.implementation_or_resident_stratum.associated_definition) )) = 0;
END_ENTITY;

ENTITY Conductor
  SUBTYPE OF (Stratum_feature);
  SELF\Stratum_feature.resident_stratum : Design_layer_stratum;
  implementation_requirement : SET[1:?] OF Intra_stratum_join_relationship;
INVERSE
  join_component : SET[0:?] OF Single_stratum_printed_component FOR stratum_feature_implementation;
WHERE
  WR1: NOT EXISTS(SELF\Shape_element.description);
  WR2: SIZEOF(implementation_requirement) - SIZEOF(join_component) = 1;
  WR3: (SIZEOF(join_component) = 0) OR (SIZEOF(QUERY(jc <* join_component | ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.TIEBAR_PRINTED_COMPONENT' IN TYPEOF(jc\Assembly_component.occurrence_contexts[1]\Product_occurrence_definition_relationship.relating_view)) AND (SIZEOF(jc\Single_stratum_printed_component.stratum_feature_implementation) :<>: 1) )) = 0);
END_ENTITY;

ENTITY Connected_area_component
  SUBTYPE OF (Area_component);
  associated_layer_connection_point : SET[1:?] OF Layer_connection_point;
END_ENTITY;

ENTITY Connected_filled_area
  SUBTYPE OF (Conductive_filled_area);
  SELF\Stratum_feature.resident_stratum : Design_layer_stratum;
  implementation_requirement : SET[1:?] OF Intra_stratum_join_relationship;
INVERSE
  join_component : SET[0:?] OF Single_stratum_printed_component FOR stratum_feature_implementation;
WHERE
  WR1: SIZEOF(implementation_requirement) - SIZEOF(join_component) = 1;
  WR2: (SIZEOF(join_component) = 0) OR (SIZEOF(QUERY(jc <* join_component | ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.TIEBAR_PRINTED_COMPONENT' IN TYPEOF(jc\Assembly_component.occurrence_contexts[1]\Product_occurrence_definition_relationship.relating_view)) AND (SIZEOF(jc\Single_stratum_printed_component.stratum_feature_implementation) :<>: 1) )) = 0);
END_ENTITY;

ENTITY Cutout
  SUPERTYPE OF (ONEOF (Physical_connectivity_interrupting_cutout,
                       Plated_cutout,
                       Partially_plated_cutout))
  SUBTYPE OF (Inter_stratum_feature);
  vertical_reference : OPTIONAL Interconnect_module_edge;
WHERE
  WR1: NOT EXISTS(SELF\Product_view_definition.name);
  WR2: SIZEOF(QUERY(shape <* SELF\Inter_stratum_feature.derived_from\Geometric_template.shapes | NOT ('CONSTRUCTIVE_SOLID_GEOMETRY_2D_ARM.SINGLE_BOUNDARY_CSG_2D_MODEL' IN TYPEOF(shape)))) = 0;
  WR3: EXISTS(SELF\Inter_stratum_feature.vertical_extent) XOR EXISTS(vertical_reference);
END_ENTITY;

ENTITY Cutout_edge_segment
  SUPERTYPE OF (Plated_cutout_edge_segment)
  SUBTYPE OF (Inter_stratum_feature);
  composed_cutout : Cutout;
  start_vertex : Edge_segment_vertex;
  end_vertex : Edge_segment_vertex;
  SELF\Inter_stratum_feature.derived_from : Inter_stratum_feature_edge_segment_template;
WHERE
  WR1: start_vertex :<>: end_vertex;
END_ENTITY;

ENTITY Dependently_located_layer_connection_point
  SUBTYPE OF (Layer_connection_point);
  associated_design_object : terminal_or_inter_stratum_feature;
  reference_zone : OPTIONAL Connection_zone_in_design_view;
END_ENTITY;

ENTITY Derived_stratum
  SUBTYPE OF (Stratum);
  derived_from : design_or_documentation_stratum;
END_ENTITY;

ENTITY Design_layer_stratum
  SUBTYPE OF (Stratum);
  primary_design_layer_stratum : BOOLEAN;
INVERSE
  existence_dependence : SET[1:?] OF Layer_connection_point FOR resident_design_layer_stratum;
WHERE
  WR1: (NOT (primary_design_layer_stratum) AND (SIZEOF(QUERY(imps <* USEDIN(SELF, 'DESIGN_SPECIFIC_ASSIGNMENT_TO_INTERCONNECT_USAGE_VIEW_ARM.STRATUM_CONCEPT_TO_PHYSICAL_USAGE_VIEW_ASSIGNMENT.' + 'ASSIGNED_DESIGN_OBJECT') | ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.INTERCONNECT_MODULE_PRIMARY_SURFACE' IN TYPEOF(imps.defined_part_feature)))) = 0)) OR ((primary_design_layer_stratum) AND (SIZEOF(QUERY(imps <* USEDIN(SELF, 'DESIGN_SPECIFIC_ASSIGNMENT_TO_INTERCONNECT_USAGE_VIEW_ARM.STRATUM_CONCEPT_TO_PHYSICAL_USAGE_VIEW_ASSIGNMENT.' + 'ASSIGNED_DESIGN_OBJECT') | ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.INTERCONNECT_MODULE_PRIMARY_SURFACE' IN TYPEOF(imps.defined_part_feature)))) = 1));
  WR2: 'FABRICATION_TECHNOLOGY_ARM.DESIGN_LAYER_TECHNOLOGY' IN TYPEOF(SELF\Stratum.of_technology);
END_ENTITY;

ENTITY Dielectric_material_passage
  SUBTYPE OF (Inter_stratum_feature);
  feature_material : OPTIONAL material_or_specification;
  precedent_passage : Cutout;
WHERE
  WR1: NOT EXISTS(SELF\Product_view_definition.name);
END_ENTITY;

ENTITY Documentation_layer_stratum
  SUBTYPE OF (Stratum);
WHERE
  WR1: 'FABRICATION_TECHNOLOGY_ARM.DOCUMENTATION_LAYER_TECHNOLOGY' IN TYPEOF(SELF\Stratum.of_technology);
  WR2: NOT(SIZEOF(SELF\Stratum.base_component) = 1) OR (NOT(SELF\Stratum.of_technology\Documentation_layer_technology.pre_defined_documentation_layer_purpose = predefined_documentation_layer_purpose.soldermask) OR (SIZEOF(get_mrlc_not_for_base(SELF, base_component)) = 0));
END_ENTITY;

ENTITY Electrical_isolation_laminate_component
  SUBTYPE OF (Material_removal_laminate_component);
  SELF\Definition_based_product_occurrence.derived_from : Electrical_isolation_removal_template;
END_ENTITY;

ENTITY Embedded_physical_component_terminal
  SUBTYPE OF (Laminate_component_join_terminal);
  SELF\Component_feature.definition : bare_die_terminal_or_packaged_part_terminal;
  SELF\Component_feature.associated_definition : bare_die_component_or_packaged_component;
WHERE
  WR1: NOT EXISTS(SELF\Shape_element.description);
END_ENTITY;

ENTITY Explicitly_located_layer_connection_point
  SUBTYPE OF (Layer_connection_point);
END_ENTITY;

ENTITY Externally_defined_physical_network_group
  SUBTYPE OF (Physical_network_group);
INVERSE
  source : External_source_identification FOR item;
WHERE
  WR1: NOT (SELF\Group.membership_meaning IN Pre_defined_physical_network_group_types);
END_ENTITY;

ENTITY Externally_defined_physical_network_group_element_relationship
  SUBTYPE OF (Physical_network_group_element_relationship);
INVERSE
  source : External_source_identification FOR item;
WHERE
  WR1: NOT (SELF\Group_relationship.relation_type IN Pre_defined_physical_network_group_relation_types);
END_ENTITY;

ENTITY Fiducial
  SUBTYPE OF (Laminate_component);
END_ENTITY;

ENTITY Fiducial_stratum_feature
  SUBTYPE OF (Stratum_feature);
END_ENTITY;

ENTITY Footprint_occurrence
  SUBTYPE OF (Structured_layout_component);
  SELF\Definition_based_product_occurrence.derived_from : Generic_footprint_definition;
END_ENTITY;

ENTITY Footprint_occurrence_sub_assembly_relationship
  SUBTYPE OF (Structured_layout_component_sub_assembly_relationship);
  SELF\Structured_layout_component_sub_assembly_relationship.relating_view : Footprint_occurrence;
  SELF\Structured_layout_component_sub_assembly_relationship.related_view : Laminate_component;
  SELF\Structured_layout_component_sub_assembly_relationship.first_location RENAMED terminal_location : Part_feature_based_template_location;
  SELF\Structured_layout_component_sub_assembly_relationship.second_location RENAMED sub_assembly_reference_designation : Template_location_in_structured_template;
UNIQUE
  UR1: sub_assembly_reference_designation, relating_view, terminal_location;
WHERE
  WR1: terminal_location.assembly :=: relating_view.derived_from;
  WR2: terminal_location.template :=: sub_assembly_reference_designation.assembly;
  WR3: 'LAYERED_INTERCONNECT_COMPLEX_TEMPLATE_ARM.PADSTACK_DEFINITION' IN TYPEOF(sub_assembly_reference_designation.assembly);
END_ENTITY;

ENTITY Generic_laminate_text_component
  ABSTRACT SUPERTYPE OF (ONEOF (Additive_laminate_text_component,
                                Material_removal_laminate_text_component))
  SUBTYPE OF (Laminate_component);
  SELF\Definition_based_product_occurrence.derived_from : Part_text_template;
DERIVE
  of_character : label1 := derived_from\Part_text_template.of_character\Character_glyph_symbol.character;
WHERE
  WR1: NOT EXISTS(SELF\Product_view_definition.name);
END_ENTITY;

ENTITY Generic_physical_network
  ABSTRACT SUPERTYPE OF (ONEOF (Unrouted_physical_network,
                                Routed_physical_network));
  name : STRING;
  current_associated_definition : Layered_interconnect_module_design_view;
  prior_associated_definition : OPTIONAL SET[1:?] OF Layered_interconnect_module_design_view;
  connectivity_requirement_element : SET[1:?] OF Laminate_component_join_terminal;
  reference_connected_terminals : OPTIONAL Part_connected_terminals_definition;
  unrouted_connectivity_requirement_element : OPTIONAL SET[1:?] OF Unrouted_join_relationship;
UNIQUE
  UR1: name, current_associated_definition;
WHERE
  WR1: NOT (EXISTS(prior_associated_definition)) OR NOT (current_associated_definition IN prior_associated_definition);
END_ENTITY;

ENTITY Inter_stratum_extent
  SUBTYPE OF (Part_definition_relationship);
  SELF\View_definition_relationship.relating_view RENAMED from_stratum : Stratum;
  SELF\View_definition_relationship.related_view RENAMED to_stratum : Stratum;
  included_stratum : SET[1:?] OF Stratum;
WHERE
  WR1: NOT EXISTS(SELF\View_definition_relationship.relation_type);
  WR2: from_stratum IN included_stratum;
  WR3: to_stratum IN included_stratum;
  WR4: EXISTS(from_stratum\Stratum.assembly[1]\Interconnect_module_stratum_assembly_relationship.assembly\Layered_interconnect_module_design_view.used_stack_model);
END_ENTITY;

ENTITY Inter_stratum_feature
  ABSTRACT SUPERTYPE OF (ONEOF (Unsupported_passage,
                                Plated_inter_stratum_feature))
  SUBTYPE OF (Laminate_component);
  feature_of_size : BOOLEAN;
  vertical_extent : OPTIONAL Passage_technology_allocation_to_stack_model;
  SELF\Definition_based_product_occurrence.derived_from : Inter_stratum_feature_template;
WHERE
  WR1: NOT EXISTS(vertical_extent) OR (SIZEOF(QUERY(pvd <* get_assemblies(SELF) | NOT(('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.LAYERED_INTERCONNECT_MODULE_DESIGN_VIEW' IN TYPEOF(pvd)) AND (vertical_extent\Stratum_sub_stack.associated_stackup = pvd\Layered_interconnect_module_design_view.used_stack_model)) )) = 0);
END_ENTITY;

ENTITY Inter_stratum_join_implementation
  ABSTRACT SUPERTYPE OF (ONEOF (Physical_network_supporting_stratum_feature_conductive_join,
                                Physical_network_supporting_inter_stratum_feature));
  topological_requirement : Inter_stratum_join_relationship;
END_ENTITY;

ENTITY Inter_stratum_join_relationship
  SUBTYPE OF (Routed_join_relationship);
  points_to_be_connected : SET[2:?] OF Layer_connection_point;
DERIVE
  associated_stratum : BAG[0:?] OF Design_layer_stratum := limd_get_lcp_resident_stratum(points_to_be_connected);
WHERE
  WR1: SIZEOF(associated_stratum) = SIZEOF(bag_to_set(associated_stratum));
END_ENTITY;

ENTITY Interconnect_connection_zone_position_relationship;
  associating_design_view_shape : Geometric_model;
  associated_usage : Connection_zone_in_design_view;
  associated_connection_zone_shape_definition : Geometric_model;
  associated_usage_placement : Axis_placement;
  associating_design_view : Layered_interconnect_module_design_view;
END_ENTITY;

ENTITY Interconnect_module_design_view
  SUPERTYPE OF (Layered_interconnect_module_design_view)
  SUBTYPE OF (Assembly_definition, Part_design_view);
END_ENTITY;

ENTITY Interconnect_module_edge
  SUPERTYPE OF (ONEOF (Partially_plated_interconnect_module_edge,
                       Plated_interconnect_module_edge))
  SUBTYPE OF (Inter_stratum_feature);
WHERE
  WR1: SIZEOF(QUERY(shape <* SELF\Inter_stratum_feature.derived_from\Geometric_template.shapes | NOT ('CONSTRUCTIVE_SOLID_GEOMETRY_2D_ARM.SINGLE_BOUNDARY_CSG_2D_MODEL' IN TYPEOF(shape)))) = 0;
  WR2: NOT EXISTS(SELF\Inter_stratum_feature.vertical_extent);
END_ENTITY;

ENTITY Interconnect_module_edge_segment
  SUPERTYPE OF (ONEOF (Plated_interconnect_module_edge_segment,
                       Unplated_interconnect_module_edge_segment))
  SUBTYPE OF (Inter_stratum_feature);
  composed_edge : Interconnect_module_edge;
  start_vertex : Edge_segment_vertex;
  end_vertex : Edge_segment_vertex;
  SELF\Inter_stratum_feature.derived_from : Inter_stratum_feature_edge_segment_template;
WHERE
  WR1: start_vertex :<>: end_vertex;
END_ENTITY;

ENTITY Interconnect_module_macro_terminal
  SUBTYPE OF (Interconnect_module_terminal);
INVERSE
  defining_terminal : Component_feature_to_physical_usage_view_assignment FOR defined_part_feature;
WHERE
  WR1: SIZEOF(['LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.COMPONENT_TERMINATION_PASSAGE_JOIN_TERMINAL', 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.VIA_TERMINAL', 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.PRINTED_COMPONENT_JOIN_TERMINAL', 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.CONDUCTIVE_INTERCONNECT_ELEMENT_TERMINAL', 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.LAND_JOIN_TERMINAL'] * TYPEOF(defining_terminal.assigned_design_object)) = 1;
END_ENTITY;

ENTITY Interconnect_module_stratum_assembly_relationship;
  assembly : Layered_interconnect_module_design_view;
  component : Stratum;
  reference_designation : STRING;
UNIQUE
  UR1: assembly, reference_designation;
END_ENTITY;

ENTITY Interface_access_material_removal_laminate_component
  SUBTYPE OF (Material_removal_laminate_component);
  SELF\Material_removal_laminate_component.causal_item RENAMED accessed_interface : Laminate_component_interface_terminal;
END_ENTITY;

ENTITY Interface_access_stratum_feature_template_component
  SUBTYPE OF (Stratum_feature_template_component);
  accessed_interface : Laminate_component_interface_terminal;
END_ENTITY;

ENTITY Internal_probe_access_area
  SUBTYPE OF (Probe_access_area);
  stratum_feature_implementation : Stratum_feature;
INVERSE
  internal_access : Internal_stratum_access FOR connected_probe;
WHERE
  WR1: NOT EXISTS(SELF\Probe_access_area.stratum_feature_material_stackup) OR (stratum_feature_implementation :=: SELF\Probe_access_area.stratum_feature_material_stackup\Stratum_feature_based_derived_pattern.reference_stratum_feature);
END_ENTITY;

ENTITY Internal_stratum_access;
  connected_probe : Internal_probe_access_area;
  inter_stratum_feature : Via;
UNIQUE
  UR1: connected_probe, inter_stratum_feature;
END_ENTITY;

ENTITY Intra_stratum_join_relationship
  SUBTYPE OF (Routed_join_relationship);
  points_to_be_connected : SET[2:?] OF Layer_connection_point;
DERIVE
  associated_stratum : Design_layer_stratum := points_to_be_connected[1].resident_design_layer_stratum;
INVERSE
  ordered_implementation : SET[0:1] OF Conductor FOR implementation_requirement;
  random_implementation : SET[0:1] OF Connected_filled_area FOR implementation_requirement;
WHERE
  WR1: (SIZEOF(ordered_implementation) = 1) XOR (SIZEOF(random_implementation) = 1);
  WR2: SIZEOF(QUERY(ptbc <* points_to_be_connected | NOT(ptbc.resident_design_layer_stratum = associated_stratum) )) = 0;
END_ENTITY;

ENTITY Join_relationship
  ABSTRACT SUPERTYPE OF (ONEOF (Routed_join_relationship,
                                Unrouted_join_relationship));
  associated_layout : Layered_interconnect_module_design_view;
END_ENTITY;

ENTITY Laminate_component
  SUPERTYPE OF (ONEOF (Material_removal_laminate_component, (
                       Stratum_feature_template_component
               ANDOR Probe_access_area),
                    Inter_stratum_feature,
                    Generic_laminate_text_component,
                    Laminate_text_string_component)
              ANDOR Fiducial)
  SUBTYPE OF (Assembly_component, Single_instance);
  SELF\Definition_based_product_occurrence.derived_from : Template_definition;
INVERSE
  cad_layer : SET[0:1] OF External_source_identification FOR item;
WHERE
  WR1: ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.LAYERED_INTERCONNECT_MODULE_DESIGN_VIEW' IN TYPEOF(SELF\Assembly_component.occurrence_contexts[1]\Product_occurrence_definition_relationship.relating_view)) OR ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRUCTURED_LAYOUT_COMPONENT_SUB_ASSEMBLY_RELATIONSHIP' IN TYPEOF(SELF\Assembly_component.occurrence_contexts[1]));
END_ENTITY;

ENTITY Laminate_component_feature
  ABSTRACT SUPERTYPE OF (ONEOF (Conductive_interconnect_element_terminal,
                                Laminate_component_interface_terminal,
                                Laminate_component_join_terminal,
                                Via_terminal))
  SUBTYPE OF (Component_feature);
END_ENTITY;

ENTITY Laminate_component_interface_terminal
  ABSTRACT SUPERTYPE
  SUBTYPE OF (Laminate_component_feature);
END_ENTITY;

ENTITY Laminate_component_join_terminal
  ABSTRACT SUPERTYPE
  SUBTYPE OF (Laminate_component_feature, Component_terminal);
INVERSE
  node_implementation : SET[0:1] OF Generic_physical_network FOR connectivity_requirement_element;
END_ENTITY;

ENTITY Laminate_group_component_make_from_relationship
  SUBTYPE OF (Component_make_from_relationship);
  SELF\Component_make_from_relationship.reusable_component : Assembly_group_component;
  SELF\Component_make_from_relationship.resultant_component : Assembly_group_component;
  stratum_mapping : SET[1:?] OF Part_definition_relationship;
WHERE
  WR1: SIZEOF(QUERY(sar <* reusable_component\Assembly_group_component.components | NOT ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.LAMINATE_COMPONENT' IN TYPEOF(sar\Product_occurrence_definition_relationship.related_view)))) = 0;
  WR2: SIZEOF(QUERY(sar <* resultant_component\Assembly_group_component.components | NOT ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.LAMINATE_COMPONENT' IN TYPEOF(sar\Product_occurrence_definition_relationship.related_view)))) = 0;
END_ENTITY;

ENTITY Laminate_text_string_component
  SUBTYPE OF (Array_placement_group, Laminate_component);
  SELF\Definition_based_product_occurrence.derived_from : Part_string_template;
  message_contents : Text_literal_with_extent;
WHERE
  WR1: SIZEOF(QUERY(sar <* SELF\Assembly_group_component.components | NOT ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.GENERIC_LAMINATE_TEXT_COMPONENT' IN TYPEOF(sar.related_view)) )) = 0;
  WR2: NOT EXISTS(SELF\Product_view_definition.name);
END_ENTITY;

ENTITY Layer_connection_point
  ABSTRACT SUPERTYPE OF (ONEOF (Explicitly_located_layer_connection_point,
                                Dependently_located_layer_connection_point))
  SUBTYPE OF (Shape_element);
  location_2d : OPTIONAL Cartesian_point;
  location_3d : OPTIONAL Cartesian_point;
  SELF\Shape_element.associated_definition RENAMED resident_design_layer_stratum : Design_layer_stratum;
DERIVE
  reference_network : Generic_physical_network := limd_get_generic_network( inter_join_path, intra_join_path, embedded_physical_component_path, unrouted_join_path);
INVERSE
  inter_join_path : SET[0:1] OF Inter_stratum_join_relationship FOR points_to_be_connected;
  intra_join_path : SET[0:?] OF Intra_stratum_join_relationship FOR points_to_be_connected;
  embedded_physical_component_path : SET[0:?] OF Stratum_embedded_physical_component_join_relationship FOR point_to_be_connected;
  unrouted_join_path : SET[0:1] OF Unrouted_join_relationship FOR unrouted_lcp;
UNIQUE
  UR1: SELF\Shape_element.element_name, resident_design_layer_stratum;
WHERE
  WR1: EXISTS(location_2d) OR EXISTS(location_3d);
  WR2: NOT (EXISTS(location_2d)) OR ((SIZEOF(location_2d\Cartesian_point.coordinates)) = 2);
  WR3: NOT (EXISTS(location_3d)) OR ((SIZEOF(location_3d\Cartesian_point.coordinates)) = 3);
  WR4: EXISTS(reference_network);
  WR5: NOT EXISTS (SELF\Shape_element.description);
  WR6: SIZEOF(QUERY(ijp <* intra_join_path | NOT(resident_design_layer_stratum :=: ijp.associated_stratum) )) = 0;
END_ENTITY;

ENTITY Layer_stack_region
  SUBTYPE OF (Instanced_feature);
  applied_stack : SET[1:?] OF Local_linear_stack;
  SELF\Shape_element.associated_definition : Layered_interconnect_module_design_view;
WHERE
  WR1: EXISTS(SELF\Shape_element.associated_definition\Product_view_definition.primary_shape_representation) AND (NOT EXISTS(SELF\Shape_element.associated_definition\Product_view_definition.auxiliary_shape_representations));
  WR2: 'CONSTRUCTIVE_SOLID_GEOMETRY_2D_ARM.SINGLE_BOUNDARY_CSG_2D_MODEL' IN TYPEOF (SELF\Shape_element.associated_definition\Product_view_definition.primary_shape_representation);
END_ENTITY;

ENTITY Layered_interconnect_module_design_view
  SUPERTYPE OF (Layered_interconnect_panel_design_view)
  SUBTYPE OF (Interconnect_module_design_view);
  used_stack_model : Design_stack_model;
INVERSE
  requirements : SET[0:?] OF Requirement_assignment FOR assigned_to;
WHERE
  WR1: (SIZEOF(USEDIN(SELF,'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.INTERCONNECT_MODULE_STRATUM_ASSEMBLY_RELATIONSHIP.' + 'ASSEMBLY')) = 0) OR (SIZEOF(QUERY(imsar <* USEDIN(SELF, 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.INTERCONNECT_MODULE_STRATUM_ASSEMBLY_RELATIONSHIP.' + 'ASSEMBLY') | (('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.DESIGN_LAYER_STRATUM' IN TYPEOF(imsar.component)) AND (imsar.component\Design_layer_stratum.primary_design_layer_stratum = TRUE)))) = 1);
  WR2: NOT EXISTS (SELF\Product_view_definition.additional_characterization);
  WR3: SIZEOF(QUERY(vdr <* USEDIN(SELF, 'PRODUCT_VIEW_DEFINITION_RELATIONSHIP_ARM.VIEW_DEFINITION_RELATIONSHIP.' + 'RELATING_VIEW') | (('ASSEMBLY_STRUCTURE_ARM.ASSEMBLY_COMPONENT_RELATIONSHIP' IN TYPEOF(vdr)) AND ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.INTERCONNECT_MODULE_EDGE' IN TYPEOF(vdr.related_view))) )) = 1;
END_ENTITY;

ENTITY Layered_interconnect_panel_design_view
  SUBTYPE OF (Layered_interconnect_module_design_view);
END_ENTITY;

ENTITY Layout_junction;
  name : STRING;
  associated_definition : Layered_interconnect_module_design_view;
  net : Generic_physical_network;
  location : Cartesian_point;
UNIQUE
  UR1: location, net;
  UR2: name, net;
WHERE
  WR1: associated_definition :=: net.current_associated_definition;
END_ENTITY;

ENTITY Library_reference_view_definition_relationship
  SUBTYPE OF (View_definition_relationship);
WHERE
  WR1: NOT EXISTS(SELF\View_definition_relationship.relation_type);
END_ENTITY;

ENTITY Material_removal_laminate_component
  SUBTYPE OF (Laminate_component);
  causal_item : OPTIONAL limd_restriction_basis_item;
  design_intent : SET[1:?] OF stratum_feature_template_component_or_stratum;
  SELF\Definition_based_product_occurrence.derived_from : material_removal_feature_template_or_parametric_template;
  explicitly_created : BOOLEAN;
WHERE
  WR1: SIZEOF(QUERY(sa <* design_intent | NOT( NOT('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM' IN TYPEOF(sa)) OR (SIZEOF(design_intent) = 1)))) = 0;
END_ENTITY;

ENTITY Material_removal_laminate_text_component
  SUBTYPE OF (Generic_laminate_text_component);
  design_intent : SET[1:?] OF stratum_feature_template_component_or_stratum;
WHERE
  WR1: SIZEOF(QUERY(sa <* design_intent | NOT( NOT('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM' IN TYPEOF(sa)) OR (SIZEOF(design_intent) = 1)))) = 0;
END_ENTITY;

ENTITY Material_removal_structured_component
  SUBTYPE OF (Structured_layout_component);
  SELF\Definition_based_product_occurrence.derived_from : Material_removal_structured_template;
WHERE
  WR1: NOT EXISTS(SELF\Product_view_definition.name);
END_ENTITY;

ENTITY Multi_layer_material_removal_laminate_component
  SUBTYPE OF (Material_removal_laminate_component);
  derived_layer_geometry : Stratum_feature_based_derived_pattern;
END_ENTITY;

ENTITY Multi_layer_stratum_feature_template_component
  SUBTYPE OF (Stratum_feature_template_component);
  derived_layer_geometry : Stratum_feature_based_derived_pattern;
WHERE
  WR1: SELF\Stratum_feature_template_component.implementation_or_resident_stratum\Stratum_feature.resident_stratum :=: derived_layer_geometry.reference_stratum_feature.associated_definition;
END_ENTITY;

ENTITY Multi_stratum_special_symbol_component
  SUBTYPE OF (Structured_layout_component);
  SELF\Definition_based_product_occurrence.derived_from : Multi_stratum_special_symbol_template;
WHERE
  WR1: NOT EXISTS(SELF\Product_view_definition.name);
END_ENTITY;

ENTITY Padstack_occurrence
  SUBTYPE OF (Structured_layout_component);
  SELF\Definition_based_product_occurrence.derived_from : Padstack_definition;
INVERSE
  SELF\Assembly_group_component.components : SET[1:?] OF Structured_layout_component_sub_assembly_relationship FOR relating_view;
WHERE
  WR1: SIZEOF(QUERY(sar <* components | EXISTS(sar.second_location) )) = 0;
END_ENTITY;

ENTITY Partially_plated_cutout
  SUBTYPE OF (Cutout);
INVERSE
  plated_segment : SET[1:?] OF Plated_cutout_edge_segment FOR composed_cutout;
  unplated_segment : SET[1:?] OF Unplated_cutout_edge_segment FOR composed_cutout;
END_ENTITY;

ENTITY Partially_plated_interconnect_module_edge
  SUBTYPE OF (Interconnect_module_edge);
INVERSE
  plated_segment : SET[1:?] OF Plated_interconnect_module_edge_segment FOR composed_edge;
  unplated_segment : SET[1:?] OF Unplated_interconnect_module_edge_segment FOR composed_edge;
WHERE
  WR1: NOT EXISTS(SELF\Product_view_definition.name);
END_ENTITY;

ENTITY Physical_connectivity_interrupting_cutout
  SUBTYPE OF (Cutout);
  interrupted_connectivity_element : SET[1:?] OF Conductive_interconnect_element;
END_ENTITY;

ENTITY Physical_network_group
  ABSTRACT SUPERTYPE OF (ONEOF (Pre_defined_physical_network_group,
                                Externally_defined_physical_network_group))
  SUBTYPE OF (Group);
  SELF\Group.elements : SET[1:?] OF Generic_physical_network;
END_ENTITY;

ENTITY Physical_network_group_element_relationship
  ABSTRACT SUPERTYPE OF (ONEOF (Pre_defined_physical_network_group_element_relationship,
                                Externally_defined_physical_network_group_element_relationship))
  SUBTYPE OF (Group_relationship);
  SELF\Group_relationship.relating_group : Physical_network_group;
  SELF\Group_relationship.related_group : Physical_network_group;
WHERE
  WR1: acyclic_physical_network_group_element_relationship(SELF, [related_group], 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.PHYSICAL_NETWORK_GROUP_ELEMENT_RELATIONSHIP');
END_ENTITY;

ENTITY Physical_network_supporting_inter_stratum_feature
  SUBTYPE OF (Plated_inter_stratum_feature, Inter_stratum_join_implementation);
END_ENTITY;

ENTITY Physical_network_supporting_stratum_feature_conductive_join
  SUBTYPE OF (Stratum_feature_conductive_join, Inter_stratum_join_implementation);
END_ENTITY;

ENTITY Plated_cutout
  SUBTYPE OF (Cutout, Plated_inter_stratum_feature);
END_ENTITY;

ENTITY Plated_cutout_edge_segment
  SUBTYPE OF (Cutout_edge_segment, Plated_inter_stratum_feature);
  SELF\Cutout_edge_segment.composed_cutout : Partially_plated_cutout;
END_ENTITY;

ENTITY Plated_inter_stratum_feature
  ABSTRACT SUPERTYPE OF (ONEOF (Plated_cutout,
                                Plated_interconnect_module_edge,
                                Plated_cutout_edge_segment,
                                Plated_interconnect_module_edge_segment,
                                Plated_passage))
  SUBTYPE OF (Inter_stratum_feature);
WHERE
  WR1: SELF\Inter_stratum_feature.vertical_extent.allocated_technology.plated_passage = TRUE;
END_ENTITY;

ENTITY Plated_interconnect_module_edge
  SUBTYPE OF (Interconnect_module_edge, Plated_inter_stratum_feature);
WHERE
  WR1: NOT EXISTS(SELF\Product_view_definition.name);
END_ENTITY;

ENTITY Plated_interconnect_module_edge_segment
  SUBTYPE OF (Plated_inter_stratum_feature, Interconnect_module_edge_segment);
  SELF\Interconnect_module_edge_segment.composed_edge : Partially_plated_interconnect_module_edge;
END_ENTITY;

ENTITY Plated_passage
  SUPERTYPE OF (ONEOF (Component_termination_passage,
                       Via))
  SUBTYPE OF (Plated_inter_stratum_feature);
  SELF\Inter_stratum_feature.vertical_extent : Passage_technology_allocation_to_stack_model;
WHERE
  WR1: NOT EXISTS(SELF\Product_view_definition.name);
END_ENTITY;

ENTITY Pre_defined_physical_network_group
  SUBTYPE OF (Physical_network_group);
WHERE
  WR1: SELF\Group.membership_meaning IN Pre_defined_physical_network_group_types;
END_ENTITY;

ENTITY Pre_defined_physical_network_group_element_relationship
  SUBTYPE OF (Physical_network_group_element_relationship);
WHERE
  WR1: SELF\Group_relationship.relation_type IN Pre_defined_physical_network_group_relation_types;
END_ENTITY;

ENTITY Primary_stratum_indicator_symbol
  SUBTYPE OF (Single_stratum_special_symbol_component);
END_ENTITY;

ENTITY Probe_access_area
  SUPERTYPE OF (Internal_probe_access_area)
  SUBTYPE OF (Laminate_component, Shape_element);
  SELF\Definition_based_product_occurrence.derived_from : Stratum_feature_template;
  probed_layout_item : stratum_feature_or_stratum;
  connection_area : SET[1:1] OF Connection_zone_in_design_view;
  stratum_feature_material_stackup : OPTIONAL Stratum_feature_based_derived_pattern;
DERIVE
  SELF\Shape_element.associated_definition : Probe_access_area := SELF;
  SELF\Shape_element.element_name : STRING := '';
  SELF\Shape_element.product_definitional : BOOLEAN := TRUE;
INVERSE
  network : Routed_physical_network FOR probe;
WHERE
  WR1: NOT (EXISTS(stratum_feature_material_stackup) AND NOT('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.INTERNAL_PROBE_ACCESS_AREA' IN TYPEOF(SELF))) OR (('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_FEATURE' IN TYPEOF(probed_layout_item)) AND (probed_layout_item :=: stratum_feature_material_stackup\Stratum_feature_based_derived_pattern.reference_stratum_feature));
END_ENTITY;

ENTITY Region_based_derived_pattern;
  extent : Inter_stratum_extent;
  reference_stratum : design_or_documentation_stratum;
  region : Csg_2d_model;
END_ENTITY;

ENTITY Routed_join_relationship
  ABSTRACT SUPERTYPE OF (ONEOF (Inter_stratum_join_relationship,
                                Intra_stratum_join_relationship,
                                Stratum_embedded_physical_component_join_relationship))
  SUBTYPE OF (Join_relationship);
INVERSE
  network_topology : Routed_physical_network FOR routed_connectivity_requirement_element;
END_ENTITY;

ENTITY Routed_physical_network
  SUBTYPE OF (Generic_physical_network);
  routed_connectivity_requirement_element : SET[1:?] OF Routed_join_relationship;
  probe : OPTIONAL SET[1:?] OF Probe_access_area;
DERIVE
  complete : BOOLEAN := NOT EXISTS(unrouted_connectivity_requirement_element);
  valid_net : LOGICAL := (SIZEOF(SELF\Generic_physical_network.connectivity_requirement_element) > 1 );
WHERE
  WR1: SIZEOF(QUERY(cre <* SELF\Generic_physical_network.connectivity_requirement_element | NOT (NOT ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.LAND_JOIN_TERMINAL' IN TYPEOF(cre)) OR (SIZEOF(TYPEOF(cre\Component_feature.associated_definition) * ['LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.CONTACT_SIZE_DEPENDENT_LAND']) = 1)))) = 0;
  WR2: NOT EXISTS(SELF\Generic_physical_network.reference_connected_terminals) OR (SELF\Generic_physical_network.reference_connected_terminals.associated_definition = SELF\Generic_physical_network.current_associated_definition\Part_design_view.usage_view);
END_ENTITY;

ENTITY Single_stratum_special_symbol_component
  SUPERTYPE OF (Primary_stratum_indicator_symbol)
  SUBTYPE OF (Structured_layout_component);
  SELF\Definition_based_product_occurrence.derived_from : Single_stratum_special_symbol_template;
WHERE
  WR1: NOT EXISTS(SELF\Product_view_definition.name);
END_ENTITY;

ENTITY Stratum
  SUPERTYPE OF (ONEOF (Documentation_layer_stratum,
                       Design_layer_stratum))
  SUBTYPE OF (Part_view_definition);
  SELF\Product_view_definition.id : STRING;
  definition : Stratum_technology_occurrence;
DERIVE
  of_average_surface : SET[0:1] OF Stratum_average_surface := QUERY(tmp <* of_surface | 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_AVERAGE_SURFACE' IN TYPEOF(tmp));
  base_component : SET[0:?] OF Area_component := get_base_component(SELF);
  of_product_version : SET[1:?] OF Product_version := bag_to_set(QUERY(pv <* USEDIN(assembly[1].assembly.defined_version.of_product, 'PRODUCT_VERSION_ARM.PRODUCT_VERSION.OF_PRODUCT') | (SIZEOF(QUERY( pd <* USEDIN(pv, 'PRODUCT_VIEW_DEFINITION_ARM.PRODUCT_VIEW_DEFINITION.DEFINED_VERSION') | (SIZEOF(QUERY(nauo <* USEDIN(pd, 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.INTERCONNECT_MODULE_STRATUM_ASSEMBLY_RELATIONSHIP.ASSEMBLY') | (SELF = nauo.component))) = 1) )) = 1) ));
  of_technology : Stratum_technology := definition\Stratum_technology_occurrence.definition;
INVERSE
  of_surface : SET[0:3] OF Stratum_surface FOR of_stratum;
  assembly : SET[1:?] OF Interconnect_module_stratum_assembly_relationship FOR component;
  stratum_usage : SET[0:1] OF External_source_identification FOR item;
  material_product : SET[0:1] OF Make_from_relationship FOR related_view;
WHERE
  WR1: SIZEOF(QUERY(tmp <* of_surface | tmp\Stratum_surface.name = stratum_surface_designation.average_surface)) <= 1;
  WR2: NOT(SIZEOF(QUERY(tmp <* of_surface | tmp\Stratum_surface.name = stratum_surface_designation.average_surface)) = 1) OR (SIZEOF(of_surface) = 3);
  WR3: SIZEOF(QUERY(tmp <* of_surface | tmp\Stratum_surface.name = stratum_surface_designation.primary_surface)) <= 1;
  WR4: SIZEOF(QUERY(tmp <* of_surface | tmp\Stratum_surface.name = stratum_surface_designation.secondary_surface)) <= 1;
  WR5: NOT(SIZEOF(QUERY(tmp <* of_surface | tmp\Stratum_surface.name = stratum_surface_designation.secondary_surface)) = 1) OR (SIZEOF(QUERY(tmp <* of_surface | tmp\Stratum_surface.name = stratum_surface_designation.primary_surface)) = 1);
  WR6: NOT EXISTS (SELF\Product_view_definition.additional_characterization);
  WR7: SIZEOF(QUERY(asse <* assembly | NOT(asse.assembly.defined_version.of_product = assembly[1].assembly.defined_version.of_product) )) = 0;
  WR8: SIZEOF(of_product_version) = SIZEOF(assembly);
  WR9: SELF\Product_view_definition.defined_version IN of_product_version;
  WR10: NOT ( SIZEOF(material_product)= 1) OR (material_product[1].relating_view IN of_technology\Stratum_technology.stratum_material[1].items);
  WR11: SIZEOF(base_component) < 2;
END_ENTITY;

ENTITY Stratum_average_surface
  SUBTYPE OF (Stratum_surface);
WHERE
  WR1: SELF\Stratum_surface.name = stratum_surface_designation.average_surface;
END_ENTITY;

ENTITY Stratum_embedded_physical_component_join_relationship
  SUBTYPE OF (Routed_join_relationship);
  terminal_to_be_connected : SET[1:?] OF Embedded_physical_component_terminal;
  point_to_be_connected : SET[1:?] OF Layer_connection_point;
DERIVE
  associated_component : Assembly_component := terminal_to_be_connected[1]\Component_feature.associated_definition;
WHERE
  WR1: SIZEOF(QUERY(t <* terminal_to_be_connected | t.associated_definition <> associated_component)) = 0;
END_ENTITY;

ENTITY Stratum_feature
  SUPERTYPE OF (ONEOF (Conductor,
                       Conductive_filled_area)
               ANDOR Fiducial_stratum_feature)
  SUBTYPE OF (Shape_element);
  SELF\Shape_element.associated_definition RENAMED resident_stratum : design_or_documentation_stratum;
  feature_of_size : BOOLEAN;
INVERSE
  shape : SET[0:?] OF Stratum_feature_usage FOR definition;
UNIQUE
  UR1: SELF\Shape_element.element_name, resident_stratum;
WHERE
  WR1: SIZEOF(query ( ac <* USEDIN(SELF,'') | ('PHYSICAL_UNIT_DESIGN_VIEW_ARM.ASSEMBLY_COMPONENT' IN TYPEOF(ac)) AND (get_assemblies(ac) <> get_ims(resident_stratum)) )) = 0;
END_ENTITY;

ENTITY Stratum_feature_based_derived_pattern;
  extent : Inter_stratum_extent;
  reference_stratum_feature : Stratum_feature;
INVERSE
  layer_usage : SET[0:1] OF External_source_identification FOR item;
WHERE
  WR1: reference_stratum_feature\Stratum_feature.resident_stratum IN extent\Inter_stratum_extent.included_stratum;
  WR2: SIZEOF(['LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.DESIGN_LAYER_STRATUM', 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.DOCUMENTATION_LAYER_STRATUM'] * TYPEOF(reference_stratum_feature\Stratum_feature.resident_stratum)) = 1;
  WR3: SIZEOF(QUERY(ds <* extent\Inter_Stratum_extent.included_stratum | NOT('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.DERIVED_STRATUM' IN TYPEOF(ds)) )) = 1;
END_ENTITY;

ENTITY Stratum_feature_conductive_join
  SUPERTYPE OF (Physical_network_supporting_stratum_feature_conductive_join);
  relating_concept : Stratum_feature_template_component;
  related_concept : Stratum_feature_template_component;
  resulting_shape : OPTIONAL Geometric_model;
INVERSE
  technology_requirement : SET[1:?] OF Requirement_assignment FOR assigned_to;
WHERE
  WR1: related_concept.resident_stratum :<>: relating_concept.resident_stratum;
END_ENTITY;

ENTITY Stratum_feature_template_component
  SUPERTYPE OF (ONEOF (Area_component,
                       Conductive_interconnect_element))
  SUBTYPE OF (Laminate_component);
  SELF\Definition_based_product_occurrence.derived_from : stratum_feature_template_or_parametric_template;
  implementation_or_resident_stratum : stratum_feature_or_stratum;
  causal_item : OPTIONAL limd_restriction_basis_item;
DERIVE
  resident_stratum : Stratum := get_resident_stratum(SELF);
WHERE
  WR1: NOT EXISTS(SELF\Product_view_definition.name);
  WR2: ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.CONDUCTIVE_INTERCONNECT_ELEMENT_WITH_PRE_DEFINED_TRANSITIONS' IN TYPEOF(SELF)) OR NOT('LAYERED_INTERCONNECT_SIMPLE_TEMPLATE_ARM.TRACE_TEMPLATE' IN TYPEOF(derived_from));
END_ENTITY;

ENTITY Stratum_feature_template_component_with_stratum_feature
  SUBTYPE OF (Stratum_feature_template_component, Stratum_feature);
DERIVE
  SELF\Stratum_feature_template_component.implementation_or_resident_stratum : Stratum_feature := SELF;
END_ENTITY;

ENTITY Stratum_feature_usage
  SUBTYPE OF (Item_identified_representation_usage);
  SELF\Item_identified_representation_usage.definition : Stratum_feature;
  SELF\Item_identified_representation_usage.identified_item : limd_sf_shape_select;
  SELF\Item_identified_representation_usage.used_representation RENAMED used_model : limd_stratum_shape_model_select;
WHERE
  WR1: SELF\Item_identified_representation_usage.name = '';
  WR2: NOT EXISTS(SELF\Item_identified_representation_usage.description);
END_ENTITY;

ENTITY Stratum_surface;
  name : stratum_surface_designation;
  of_stratum : Stratum;
  of_technology : OPTIONAL Stratum_surface_technology;
UNIQUE
  UR1: name, of_stratum;
END_ENTITY;

ENTITY Structured_layout_component
  ABSTRACT SUPERTYPE OF (ONEOF (Footprint_occurrence,
                                Material_removal_structured_component,
                                Multi_stratum_special_symbol_component,
                                Padstack_occurrence,
                                Single_stratum_special_symbol_component))
  SUBTYPE OF (Assembly_group_component);
  SELF\Definition_based_product_occurrence.derived_from : Structured_template;
WHERE
  WR1: SIZEOF(TYPEOF(SELF) * ['LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.LAMINATE_COMPONENT', 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.PHYSICAL_COMPONENT']) = 0;
  WR2: SIZEOF(QUERY(agc <* SELF\Assembly_group_component.components | NOT('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRUCTURED_LAYOUT_COMPONENT_SUB_ASSEMBLY_RELATIONSHIP' IN TYPEOF(agc)))) = 0;
END_ENTITY;

ENTITY Structured_layout_component_sub_assembly_relationship
  SUPERTYPE OF (Footprint_occurrence_sub_assembly_relationship)
  SUBTYPE OF (Next_assembly_usage_occurrence_relationship);
  SELF\Product_occurrence_definition_relationship.relating_view : Structured_layout_component;
  SELF\Product_occurrence_definition_relationship.related_view : Assembly_component;
  first_location : Template_location_in_structured_template;
  second_location : OPTIONAL Template_location_in_structured_template;
  overriding_shape : OPTIONAL Part_template_shape_model;
  design_specific_placement : BOOLEAN;
DERIVE
  first_location_overridden : LOGICAL := NOT EXISTS(second_location) AND (SELF\Product_occurrence_definition_relationship.related_view\Definition_based_product_occurrence.derived_from :<>: first_location.template);
  second_location_overridden : LOGICAL := EXISTS(second_location) AND (SELF\Product_occurrence_definition_relationship.related_view\Definition_based_product_occurrence.derived_from :<>: second_location.template);
UNIQUE
  UR1: first_location, second_location, relating_view, related_view;
WHERE
  WR1: NOT EXISTS(SELF\Assembly_component_relationship.location_indicator);
  WR2: first_location_overridden OR (SELF\Product_occurrence_definition_relationship.relating_view\Definition_based_product_occurrence.derived_from :=: first_location.assembly);
  WR3: first_location :<>: second_location;
  WR4: NOT first_location_overridden OR ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.PADSTACK_OCCURRENCE' IN TYPEOF(relating_view));
  WR5: NOT second_location_overridden OR ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.FOOTPRINT_OCCURRENCE' IN TYPEOF(relating_view));
  WR6: NOT (first_location_overridden AND second_location_overridden);
  WR7: NOT (EXISTS(overriding_shape) XOR (first_location_overridden OR second_location_overridden));
  WR8: NOT EXISTS(overriding_shape) OR (related_view.derived_from IN overriding_shape.shape_characterized_definition);
  WR9: NOT ((first_location\Template_location_in_structured_template.placement_status = template_location_placement_status.is_fixed) AND design_specific_placement);
END_ENTITY;

ENTITY Structured_layout_component_sub_assembly_relationship_with_component
  SUBTYPE OF (Structured_layout_component_sub_assembly_relationship, Assembly_component);
DERIVE
  SELF\Structured_layout_component_sub_assembly_relationship.related_view : Assembly_component := SELF;
END_ENTITY;

ENTITY Unplated_cutout_edge_segment
  SUBTYPE OF (Cutout_edge_segment);
  SELF\Cutout_edge_segment.composed_cutout : Partially_plated_cutout;
WHERE
  WR1: NOT('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.PLATED_INTER_STRATUM_FEATURE' IN TYPEOF(SELF));
END_ENTITY;

ENTITY Unplated_interconnect_module_edge_segment
  SUBTYPE OF (Interconnect_module_edge_segment);
  SELF\Interconnect_module_edge_segment.composed_edge : Partially_plated_interconnect_module_edge;
WHERE
  WR1: NOT('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.PLATED_INTER_STRATUM_FEATURE' IN TYPEOF(SELF));
END_ENTITY;

ENTITY Unrouted_conductive_interconnect_element
  SUBTYPE OF (Conductive_interconnect_element);
  SELF\Stratum_feature_template_component.implementation_or_resident_stratum : Stratum;
END_ENTITY;

ENTITY Unrouted_join_relationship
  SUBTYPE OF (Join_relationship);
  unrouted_terminals : OPTIONAL SET[1:?] OF Laminate_component_join_terminal;
  unrouted_lcp : OPTIONAL SET[1:?] OF Layer_connection_point;
  unrouted_junction : OPTIONAL SET[1:?] OF Layout_junction;
  unrouted_paa : OPTIONAL SET[1:?] OF Probe_access_area;
  unrouted_via : OPTIONAL SET[1:?] OF Via_terminal;
INVERSE
  network_topology : Generic_physical_network FOR unrouted_connectivity_requirement_element;
WHERE
  WR1: (SIZEOF(unrouted_terminals) + SIZEOF(unrouted_lcp) + SIZEOF(unrouted_paa) + SIZEOF(unrouted_via) + SIZEOF(unrouted_junction)) > 0;
END_ENTITY;

ENTITY Unrouted_physical_network
  SUBTYPE OF (Generic_physical_network);
END_ENTITY;

ENTITY Unsupported_passage
  SUBTYPE OF (Inter_stratum_feature);
  SELF\Definition_based_product_occurrence.derived_from : Unsupported_passage_template;
  SELF\Inter_stratum_feature.vertical_extent : Passage_technology_allocation_to_stack_model;
WHERE
  WR1: NOT EXISTS(SELF\Product_view_definition.name);
END_ENTITY;

ENTITY Via
  ABSTRACT SUPERTYPE
  SUBTYPE OF (Plated_passage);
  SELF\Definition_based_product_occurrence.derived_from : Via_template;
END_ENTITY;

ENTITY Via_terminal
  SUBTYPE OF (Laminate_component_feature);
  SELF\Component_feature.definition : Via_template_terminal;
  SELF\Component_feature.associated_definition : Via;
WHERE
  WR1: NOT EXISTS(SELF\Shape_element.description);
END_ENTITY;

SUBTYPE_CONSTRAINT array_placement_group_subtypes FOR Array_placement_group;
  ONEOF (Laminate_text_string_component,
         Linear_array_placement_group_component,
         Rectangular_array_placement_group_component);
END_SUBTYPE_CONSTRAINT;

SUBTYPE_CONSTRAINT component_feature_subtypes FOR Component_feature;
  ONEOF (Physical_component_feature,
         Laminate_component_feature);
END_SUBTYPE_CONSTRAINT;

SUBTYPE_CONSTRAINT component_terminal_subtypes FOR Component_terminal;
  ONEOF (Physical_component_terminal,
         Laminate_component_join_terminal);
END_SUBTYPE_CONSTRAINT;

SUBTYPE_CONSTRAINT inter_stratum_feature_subtypes FOR Inter_stratum_feature;
  ONEOF (Cutout,
         Interconnect_module_edge);
END_SUBTYPE_CONSTRAINT;

SUBTYPE_CONSTRAINT interconnect_module_terminal_subtypes FOR Interconnect_module_terminal;
  ONEOF (Interconnect_module_interface_terminal,
         Interconnect_module_macro_terminal);
END_SUBTYPE_CONSTRAINT;

SUBTYPE_CONSTRAINT limd_assembly_component_subtypes FOR Assembly_component;
  ONEOF (Physical_component,
         Laminate_component);
END_SUBTYPE_CONSTRAINT;

SUBTYPE_CONSTRAINT limd_part_view_definition_subtypes FOR Part_view_definition;
  ONEOF (Part_usage_view,
         Part_design_view,
         Stratum);
END_SUBTYPE_CONSTRAINT;

SUBTYPE_CONSTRAINT limd_template_definition_subtypes FOR Template_definition;
  ONEOF ((ONEOF (Printed_part_template,
        Special_symbol_template)
 ANDOR Geometric_template),
      Non_conductive_cross_section_template,
      Part_string_template,
      Parametric_template,
      Part_text_template,
      Stratum_stack_model,
      Stratum_sub_stack);
END_SUBTYPE_CONSTRAINT;

RULE limd_unique_stratum FOR
(Stratum, Layered_interconnect_module_design_view, Stratum_technology_occurrence);
LOCAL
      s : BAG OF Stratum := [];
      imsar : BAG OF Interconnect_module_stratum_assembly_relationship := [];
      sto : BAG OF Stratum_technology_occurrence := [];
	  pass : BOOLEAN := TRUE;
 END_LOCAL;
 REPEAT i := 1 to SIZEOF(Layered_interconnect_module_design_view) by 1;
    imsar := bag_to_set(USEDIN(Layered_interconnect_module_design_view[i], 
                        'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.INTERCONNECT_MODULE_STRATUM_ASSEMBLY_RELATIONSHIP.ASSEMBLY'));
	REPEAT j := 1 to SIZEOF(imsar) by 1;
	   s := s + imsar[j].component;
    END_REPEAT;
	REPEAT j := 1 to SIZEOF(s) by 1;
	   sto := sto + s[j].definition;
    END_REPEAT;
	
	IF (SIZEOF(sto) < SIZEOF(s))
	THEN
	  pass := FALSE;
	  ESCAPE;
	END_IF;
	
 END_REPEAT;
WHERE
  WR1: pass;
END_RULE;

FUNCTION acyclic_area_component
 (relation : Area_component; relatives : SET[1:?] OF Area_component; specific_relation : STRING) : BOOLEAN;
LOCAL
     x : SET OF Area_component;
  END_LOCAL;

    IF relation.replaced_component IN relatives THEN
      RETURN (FALSE);
    END_IF;
    x := QUERY(pd <* bag_to_set(USEDIN(relation.replaced_component,
      'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.' +
      'AREA_COMPONENT.' +
      'REPLACED_BY')) | specific_relation IN TYPEOF(pd));
    REPEAT i := 1 TO HIINDEX(x);
      IF NOT acyclic_area_component(x[i], relatives +
        relation.replaced_component, specific_relation) THEN
        RETURN (FALSE);
      END_IF;
    END_REPEAT;
    RETURN (TRUE);
END_FUNCTION;

FUNCTION acyclic_conductive_interconnect_element_terminal_link
 (relation : Conductive_interconnect_element_terminal_link; relatives : SET[1:?] OF Conductive_interconnect_element_terminal; specific_relation : STRING) : BOOLEAN;
LOCAL
     x : SET OF Conductive_interconnect_element_terminal_link := [];
  END_LOCAL;

    IF relation.precedent_point IN relatives THEN
      RETURN (FALSE);
    END_IF;
    x := QUERY(pd <* bag_to_set(USEDIN(relation.precedent_point,
      'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.' +
      'CONDUCTIVE_INTERCONNECT_ELEMENT_TERMINAL_LINK.' +
      'SUBSEQUENT_POINT')) | specific_relation IN TYPEOF(pd));
    REPEAT i := 1 TO HIINDEX(x);
      IF NOT acyclic_conductive_interconnect_element_terminal_link(x[i], relatives +
        relation.precedent_point, specific_relation) THEN
        RETURN (FALSE);
      END_IF;
    END_REPEAT;
    RETURN (TRUE);
END_FUNCTION;

FUNCTION acyclic_physical_network_group_element_relationship
 (relation : Physical_network_group_element_relationship; relatives : SET[1:?] OF Physical_network_group; specific_relation : STRING) : BOOLEAN;
LOCAL
     x : SET OF Physical_network_group_element_relationship := [];
  END_LOCAL;

    IF relation.relating_group IN relatives THEN
      RETURN (FALSE);
    END_IF;
    x := QUERY(pd <* bag_to_set(USEDIN(relation.relating_group,
      'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.' +
      'PHYSICAL_NETWORK_GROUP_ELEMENT_RELATIONSHIP.' +
      'RELATED_GROUP')) | specific_relation IN TYPEOF(pd));
    REPEAT i := 1 TO HIINDEX(x);
      IF NOT acyclic_physical_network_group_element_relationship(x[i], relatives +
        relation.relating_group, specific_relation) THEN
        RETURN (FALSE);
      END_IF;
    END_REPEAT;
    RETURN (TRUE);
END_FUNCTION;

FUNCTION correlated_terminals
 (input1 : SET[0:?] OF Conductive_interconnect_element_terminal; input2 : SET[0:?] OF Conductive_interconnect_element_terminal_link) : LOGICAL;
LOCAL
      pass : LOGICAL := FALSE;
      ciet : SET OF conductive_interconnect_element_terminal := [];
    END_LOCAL;

    REPEAT i := 1 TO SIZEOF(input2) BY 1;
      ciet := ciet + input2[i].precedent_point;
      ciet := ciet + input2[i].subsequent_point;
    END_REPEAT;
    pass := (input1 = ciet);
   
   IF (pass = UNKNOWN) THEN
    RETURN(FALSE);
   END_IF;

    RETURN(pass);
END_FUNCTION;

FUNCTION get_base_component
 (input : Stratum) : SET[0:?] OF Area_component;
LOCAL
      ac: SET OF Area_component := [];
      i : INTEGER := 0;
     sf : SET OF Stratum_feature := bag_to_set(USEDIN(input,'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_FEATURE.RESIDENT_STRATUM'));
 sftc_s : SET OF Stratum_feature_template_component := bag_to_set(
             USEDIN(input,'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_FEATURE_TEMPLATE_COMPONENT.IMPLEMENTATION_OR_RESIDENT_STRATUM'));
sftc_sf : SET OF Stratum_feature_template_component := [];
 sftc_t : SET OF Stratum_feature_template_component := [];
    END_LOCAL;
    REPEAT i := 1 TO HIINDEX(sf) BY 1;
      sftc_sf := sftc_sf + bag_to_set(USEDIN(sf[i],'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_FEATURE_TEMPLATE_COMPONENT.IMPLEMENTATION_OR_RESIDENT_STRATUM'));
    END_REPEAT;
       sftc_t := sftc_s + sftc_sf;
    REPEAT i := 1 to HIINDEX(sftc_t) BY 1;
      IF(('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.AREA_COMPONENT' IN TYPEOF(sftc_t[i])) AND
         (sftc_t[i]\Area_component.is_base = TRUE))
      THEN
       ac := ac + sftc_t[i];
      END_IF;
    END_REPEAT;
    RETURN(ac);
END_FUNCTION;

FUNCTION get_ims
 (input : Stratum) : SET[0:?] OF Product_view_definition;
LOCAL
      imsar : SET OF Interconnect_module_stratum_assembly_relationship := input.assembly;
      pvd : SET OF Product_view_definition := [];
    END_LOCAL;
    REPEAT i := 1 TO HIINDEX(imsar) BY 1;
      pvd := pvd + imsar[i].assembly; 
    END_REPEAT;
    RETURN (pvd);
END_FUNCTION;

FUNCTION get_mrlc_not_for_base
 (input1 : Documentation_layer_stratum; base_component : SET[0:?] OF Area_component) : SET[0:?] OF Material_removal_laminate_component;
LOCAL
      ac: SET OF Area_component := [];
      i : INTEGER := 0;
   mrlc : SET OF Material_removal_laminate_component := [];
 mrlc_b : SET OF Material_removal_laminate_component := [];
     sf : SET OF Stratum_feature := bag_to_set(USEDIN(input1,'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_FEATURE.RESIDENT_STRATUM'));
 sftc_s : SET OF Stratum_feature_template_component  := bag_to_set(
             USEDIN(input1,'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_FEATURE_TEMPLATE_COMPONENT.IMPLEMENTATION_OR_RESIDENT_STRATUM'));
sftc_sf : SET OF Stratum_feature_template_component   := [];
 sftc_t : SET OF Stratum_feature_template_component  := [];
    END_LOCAL;
    REPEAT i := 1 TO HIINDEX(sf) BY 1;
      sftc_sf := sftc_sf + bag_to_set(USEDIN(sf[i],'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_FEATURE_TEMPLATE_COMPONENT.IMPLEMENTATION_OR_RESIDENT_STRATUM'));
    END_REPEAT;
       sftc_t := sftc_s + sftc_sf;
    REPEAT i := 1 to HIINDEX(sftc_t) BY 1;
        mrlc := mrlc + bag_to_set(USEDIN(sftc_t[i],'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.MATERIAL_REMOVAL_LAMINATE_COMPONENT.DESIGN_INTENT')); 
    END_REPEAT;
    REPEAT i := 1 to HIINDEX(base_component) BY 1;
        mrlc_b := mrlc + bag_to_set(USEDIN(base_component[i],'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.MATERIAL_REMOVAL_LAMINATE_COMPONENT.DESIGN_INTENT')); 
    END_REPEAT;
    RETURN(mrlc - mrlc_b);
END_FUNCTION;

FUNCTION get_resident_stratum
 (input : Stratum_feature_template_component) : Stratum;
IF 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_FEATURE' IN TYPEOF(input.implementation_or_resident_stratum)
      THEN RETURN(input.implementation_or_resident_stratum.resident_stratum);
      ELSE 
        IF 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM' IN TYPEOF(input.implementation_or_resident_stratum)
          THEN RETURN(input.implementation_or_resident_stratum);
        END_IF;  
    END_IF;
    RETURN(?);
END_FUNCTION;

FUNCTION limd_get_generic_network
 (input1 : SET[0:?] OF Inter_stratum_join_relationship; input2 : SET[0:?] OF Intra_stratum_join_relationship; input3 : SET[0:?] OF Stratum_embedded_physical_component_join_relationship; input4 : SET[0:?] OF Unrouted_join_relationship) : Generic_physical_network;
LOCAL
      r1  : SET OF Routed_join_relationship := input1 + input2 + input3;
      u1  : SET OF Unrouted_join_relationship := input4;
      gpn : SET OF Generic_physical_network := [];
    END_LOCAL;
  REPEAT i := 1 TO SIZEOF(r1);
    gpn := gpn + r1[i]\Routed_join_relationship.network_topology;
  END_REPEAT;
  REPEAT i := 1 TO SIZEOF(u1);
    gpn := gpn + u1[i]\Unrouted_join_relationship.network_topology;
  END_REPEAT;
  IF SIZEOF(gpn) <> 1 THEN
    RETURN(?);
  ELSE
    RETURN(gpn[1]);
  END_IF;
END_FUNCTION;

FUNCTION limd_get_lcp_resident_stratum
 (input : SET[0:?] OF Layer_connection_point) : BAG[0:?] OF Design_layer_stratum;
LOCAL
   s : BAG OF Design_layer_stratum := [];
  END_LOCAL;
  
    REPEAT i := 1 to SIZEOF(input) BY 1;
       s := s + input[i]\Layer_connection_point.resident_design_layer_stratum;
    END_REPEAT;
       
    RETURN(s);
END_FUNCTION;

FUNCTION limd_get_sz_cp
 (input : SET[1:?] OF Conductive_interconnect_element_terminal_link) : INTEGER;
LOCAL
    ac : SET OF Conductive_interconnect_element_terminal := [];
  END_LOCAL;
    REPEAT i := 1 TO HIINDEX(input);
      ac := ac +
      input[i]\Conductive_interconnect_element_terminal_link.precedent_point +
      input[i]\Conductive_interconnect_element_terminal_link.subsequent_point;
    END_REPEAT;
    RETURN (SIZEOF(ac));
END_FUNCTION;

END_SCHEMA;  -- Layered_interconnect_module_design_arm


© ISO 2018 — All rights reserved