Application module: Fabrication technology ISO/TS 10303-1670: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 type definitions
   4.3 ARM entity definitions
   4.4 ARM function definitions
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 N9424 - ISO/TS 10303-1670 Fabrication technology - EXPRESS ARM
Supersedes ISO/TC 184/SC 4/WG 12 N8137
*)



SCHEMA Fabrication_technology_arm;

USE FROM Constructive_solid_geometry_2d_arm;    -- ISO/TS 10303-1731

USE FROM Geometric_tolerance_arm;    -- ISO/TS 10303-1051

USE FROM Requirement_decomposition_arm;    -- ISO/TS 10303-1740

USE FROM Part_template_arm;    -- ISO/TS 10303-1722

REFERENCE FROM Specification_document_arm   -- ISO/TS 10303-1747
  (get_document_definition);

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


TYPE ft_classification_item = EXTENSIBLE GENERIC_ENTITY SELECT BASED_ON classification_item WITH
   (Stratum_technology_occurrence_relationship);
END_TYPE;

TYPE ft_documented_element_select = EXTENSIBLE GENERIC_ENTITY SELECT BASED_ON documented_element_select WITH
   (Passage_technology,
    Stratum_technology,
    Stratum_surface_technology);
END_TYPE;

TYPE ft_external_identification_item = EXTENSIBLE GENERIC_ENTITY SELECT BASED_ON external_identification_item WITH
   (Design_layer_technology,
    Documentation_layer_technology);
END_TYPE;

TYPE ft_material_item_select = EXTENSIBLE GENERIC_ENTITY SELECT BASED_ON material_item_select WITH
   (Passage_technology,
    Stratum_technology);
END_TYPE;

TYPE ft_property_assignment_select = SELECT BASED_ON property_assignment_select WITH
   (Stratum_technology,
    Passage_technology);
END_TYPE;

TYPE ft_requirement_assignment_item = EXTENSIBLE GENERIC_ENTITY SELECT BASED_ON requirement_assignment_item WITH
   (Passage_technology,
    Stratum_technology,
    Stratum_technology_occurrence,
    Stratum_technology_occurrence_relationship);
END_TYPE;

TYPE ft_terminus_condition = EXTENSIBLE ENUMERATION OF
   (bilateral_bond,
    bilateral_complete_removal,
    unilateral_bond);
END_TYPE;

TYPE ft_value_select = SELECT
   (Value_limit,
    Value_range,
    Numerical_item_with_unit);
END_TYPE;

TYPE layer_position_type = ENUMERATION OF
   (secondary,
    all,
    external,
    primary,
    internal);
END_TYPE;

TYPE predefined_design_layer_purpose = ENUMERATION OF
   (other_signal,
    lands_only,
    power_or_ground,
    embedded_passive_capacitor_dielectric,
    embedded_passive_resistor);
END_TYPE;

TYPE predefined_documentation_layer_purpose = ENUMERATION OF
   (solderdam,
    soldermask,
    solderpaste,
    silkscreen,
    generic_layer,
    glue,
    gluemask,
    pastemask,
    finish_coating,
    coverlay);
END_TYPE;

TYPE stiffness_class = ENUMERATION OF
   (fluid_like_with_constant_thickness,
    fluid_like_with_varying_thickness,
    stiff_laminate);
END_TYPE;

TYPE up_or_down = ENUMERATION OF
   (independent,
    precedent,
    subsequent);
END_TYPE;

ENTITY Allocated_passage_minimum_annular_ring
  SUBTYPE OF (Characterizable_object);
  supported_external_minimum_annular_ring : OPTIONAL Length_data_element;
  supported_internal_minimum_annular_ring : OPTIONAL Length_data_element;
  unsupported_minimum_annular_ring : OPTIONAL Length_data_element;
  minimum_fabrication_allowance : OPTIONAL Length_data_element;
  associated_passage_allocation : SET[1:?] OF Passage_technology_allocation_to_stack_model;
  associated_stratum_technology_occurrence : OPTIONAL Stratum_technology_occurrence;
DERIVE
  associated_model : Stratum_stack_model := associated_passage_allocation[1]\Stratum_sub_stack.associated_stackup;
WHERE
  WR1: EXISTS(supported_external_minimum_annular_ring) OR EXISTS(supported_internal_minimum_annular_ring) OR EXISTS(unsupported_minimum_annular_ring) OR EXISTS(minimum_fabrication_allowance);
  WR2: NOT EXISTS(associated_stratum_technology_occurrence) OR (associated_stratum_technology_occurrence IN associated_model\Stratum_stack_model.composing_occurrence);
  WR3: NOT EXISTS(supported_external_minimum_annular_ring) OR (SIZEOF(QUERY(ptatsm <* associated_passage_allocation | NOT(ptatsm\Passage_technology_allocation_to_stack_model.allocated_technology\Passage_technology.plated_passage) )) = 0);
  WR4: NOT EXISTS(supported_internal_minimum_annular_ring) OR (SIZEOF(QUERY(ptatsm <* associated_passage_allocation | NOT(ptatsm\Passage_technology_allocation_to_stack_model.allocated_technology\Passage_technology.plated_passage) )) = 0);
  WR5: NOT (EXISTS(unsupported_minimum_annular_ring) AND (SIZEOF(QUERY(ptatsm <* associated_passage_allocation | NOT(ptatsm\Passage_technology_allocation_to_stack_model.allocated_technology\Passage_technology.plated_passage) )) = 0));
  WR6: SIZEOF(QUERY(ptatsm <* associated_passage_allocation | NOT(associated_model = ptatsm\Stratum_sub_stack.associated_stackup) )) =0;
  WR7: NOT (EXISTS(associated_stratum_technology_occurrence) AND EXISTS(supported_internal_minimum_annular_ring));
END_ENTITY;

ENTITY Copy_stratum_technology_occurrence_relationship
  SUBTYPE OF (Derived_stratum_technology_occurrence_relationship);
END_ENTITY;

ENTITY Default_component_termination_passage_definition
  SUBTYPE OF (Passage_technology);
  allowed_component_terminal_extent : Length_tolerance_characteristic;
  SELF\Passage_technology.as_finished_deposition_thickness : Length_tolerance_characteristic;
  SELF\Passage_technology.as_finished_passage_extent : ft_value_select;
INVERSE
  SELF\Passage_technology.deposition_material : SET[1:1] OF Passage_deposition_material_identification FOR items;
WHERE
  WR1: 'CONDUCTIVITY_MATERIAL_ASPECTS_ARM.'+ 'MATERIAL_IDENTIFICATION_WITH_CONDUCTIVITY_CLASSIFICATION' IN TYPEOF (deposition_material[1]);
END_ENTITY;

ENTITY Default_tapered_blind_via_definition
  SUBTYPE OF (Default_via_definition);
  as_finished_interior_passage_extent : Length_tolerance_characteristic;
WHERE
  WR1: less(as_finished_interior_passage_extent, SELF\default_via_definition.as_finished_passage_extent);
END_ENTITY;

ENTITY Default_unsupported_passage_definition
  SUBTYPE OF (Passage_technology);
  SELF\Passage_technology.as_finished_passage_extent : ft_value_select;
END_ENTITY;

ENTITY Default_via_definition
  SUBTYPE OF (Passage_technology);
  SELF\Passage_technology.as_finished_deposition_thickness : Length_tolerance_characteristic;
  SELF\Passage_technology.as_finished_passage_extent : ft_value_select;
INVERSE
  SELF\Passage_technology.deposition_material : SET[1:1] OF Passage_deposition_material_identification FOR items;
WHERE
  WR1: 'CONDUCTIVITY_MATERIAL_ASPECTS_ARM.'+ 'MATERIAL_IDENTIFICATION_WITH_CONDUCTIVITY_CLASSIFICATION' IN TYPEOF (deposition_material[1]);
END_ENTITY;

ENTITY Derived_stratum_technology_occurrence_relationship
  ABSTRACT SUPERTYPE OF (ONEOF (Copy_stratum_technology_occurrence_relationship,
                                Inverse_copy_stratum_technology_occurrence_relationship))
  SUBTYPE OF (Stratum_technology_occurrence_relationship);
END_ENTITY;

ENTITY Design_layer_technology
  SUBTYPE OF (Stratum_technology);
  design_layer_purpose : OPTIONAL predefined_design_layer_purpose;
INVERSE
  externally_defined_design_layer_purpose : SET[0:1] OF External_source_identification FOR item;
WHERE
  WR1: (SIZEOF([SELF\Stratum_technology.stratum_material[1]\Material_identification_with_conductivity_classification.electrical_conductivity_classification, SELF\Stratum_technology.stratum_material[1]\Material_identification_with_conductivity_classification.thermal_conductivity_classification] * ['conductive']) >= 1) OR (SELF\Stratum_technology.stratum_material[1]\Material_identification_with_conductivity_classification.magnetic_permeability_classification IN ['highly permeable']) OR (SELF\Stratum_technology.stratum_material[1]\Material_identification_with_conductivity_classification.optical_insertion_loss_classification IN ['vacuum', 'very low loss', 'low loss']);
  WR2: (EXISTS (design_layer_purpose)) XOR ((SIZEOF(externally_defined_design_layer_purpose)) = 1);
END_ENTITY;

ENTITY Design_stack_model
  SUBTYPE OF (Stratum_stack_model);
  model_thickness : OPTIONAL Length_tolerance_characteristic;
INVERSE
  sub_stack : SET[1:?] OF Stratum_sub_stack FOR associated_stackup;
END_ENTITY;

ENTITY Documentation_layer_technology
  SUBTYPE OF (Stratum_technology);
  pre_defined_documentation_layer_purpose : OPTIONAL predefined_documentation_layer_purpose;
INVERSE
  externally_defined_documentation_layer_purpose : SET[0:1] OF External_source_identification FOR item;
WHERE
  WR1: (EXISTS (pre_defined_documentation_layer_purpose)) XOR ((SIZEOF(externally_defined_documentation_layer_purpose)) = 1);
END_ENTITY;

ENTITY Equivalent_stackup_model_definition
  SUBTYPE OF (Product_view_definition, View_definition_relationship);
  SELF\View_definition_relationship.relating_view RENAMED primary_stackup_model : Stratum_stack_model;
  SELF\View_definition_relationship.related_view RENAMED equivalent_stackup_model : Stratum_stack_model;
  equivalent_sub_stacks : SET[1:?] OF Equivalent_sub_stack_definition;
WHERE
  WR1: primary_stackup_model :<>: equivalent_stackup_model;
  WR2: SIZEOF(QUERY( ess <* equivalent_sub_stacks | NOT (ess\Equivalent_sub_stack_definition.equivalent_stack\Stratum_sub_stack.associated_stackup :=: equivalent_stackup_model) )) = 0;
  WR3: acyclic_equivalent_stackup_model_definition(SELF, [equivalent_stackup_model], 'FABRICATION_TECHNOLOGY_ARM.EQUIVALENT_STACKUP_MODEL_DEFINITION');
END_ENTITY;

ENTITY Equivalent_sub_stack_definition
  SUBTYPE OF (Product_view_definition);
  equivalent_stack : Local_linear_stack;
  primary_sto : Stratum_technology_occurrence;
  primary_sto_link : Stratum_technology_occurrence_link;
WHERE
  WR1: primary_sto IN [primary_sto_link\Stratum_technology_occurrence_relationship.sto_1, primary_sto_link\Stratum_technology_occurrence_relationship.sto_2];
  WR2: equivalent_stack\Stratum_sub_stack.associated_stackup :<>: primary_sto_link\Stratum_technology_occurrence_relationship.scope;
END_ENTITY;

ENTITY Footprint_library_stratum_technology
  SUBTYPE OF (Stratum_technology);
WHERE
  WR1: NOT EXISTS(stratum_thickness);
END_ENTITY;

ENTITY Impedance_measurement_setup_requirement
  SUBTYPE OF (Predefined_requirement_view_definition);
  characterized_stackup : Stratum_sub_stack;
  measurement_stratum_1 : Stratum_technology_occurrence;
  measurement_stratum_2 : Stratum_technology_occurrence;
  reference_stratum : SET[1:2] OF Stratum_technology_occurrence;
WHERE
  WR1: SELF\Product_view_definition.initial_context.life_cycle_stage = 'test';
  WR2: NOT EXISTS(SELF\Product_view_definition.id);
  WR3: SIZEOF([measurement_stratum_1, measurement_stratum_2] * reference_stratum) = 0;
END_ENTITY;

ENTITY Impedance_requirement
  SUBTYPE OF (Predefined_requirement_view_definition);
  frequency_range : Value_range;
  impedance_value : Tolerance_characteristic;
  test_bench : Impedance_measurement_setup_requirement;
  test_method : Test_specification;
WHERE
  WR1: SELF\Product_view_definition.initial_context.life_cycle_stage = 'test';
  WR2: NOT EXISTS(SELF\Product_view_definition.id);
END_ENTITY;

ENTITY Inverse_copy_stratum_technology_occurrence_relationship
  SUBTYPE OF (Derived_stratum_technology_occurrence_relationship);
END_ENTITY;

ENTITY Local_linear_stack
  SUBTYPE OF (Stratum_sub_stack);
  SELF\Stratum_sub_stack.stratum_technology_sequence : SET[1:?] OF Stratum_technology_occurrence_link;
WHERE
  WR1: SIZEOF(get_stack(stratum_technology_sequence)) = (SIZEOF(stratum_technology_sequence) + 1);
  WR2: sts_vertex_degree_check(stratum_technology_sequence, 2);
END_ENTITY;

ENTITY Passage_deposition_material_identification
  SUBTYPE OF (Material_identification);
  SELF\Material_identification.items : SET[1:?] OF Passage_technology;
END_ENTITY;

ENTITY Passage_filling_material_identification
  SUBTYPE OF (Material_identification);
  SELF\Material_identification.items : SET[1:?] OF Passage_technology;
END_ENTITY;

ENTITY Passage_technology
  SUPERTYPE OF (ONEOF (Default_via_definition,
                       Default_component_termination_passage_definition,
                       Default_unsupported_passage_definition))
  SUBTYPE OF (Characterizable_object);
  as_finished_deposition_thickness : OPTIONAL Length_tolerance_characteristic;
  as_finished_passage_extent : OPTIONAL ft_value_select;
  maximum_aspect_ratio : OPTIONAL REAL;
  minimum_finished_size : OPTIONAL Length_data_element;
  plated_passage : BOOLEAN;
  passage_terminus_condition : OPTIONAL ft_terminus_condition;
  minimum_fabrication_allowance : OPTIONAL Length_data_element;
  minimum_finished_feature_size : OPTIONAL Length_data_element;
  supported_external_minimum_annular_ring : OPTIONAL Length_data_element;
  supported_internal_minimum_annular_ring : OPTIONAL Length_data_element;
  unsupported_minimum_annular_ring : OPTIONAL Length_data_element;
DERIVE
  specification : SET[0:1] OF Document_definition := get_document_definition(SELF, 'specification', 'SPECIFICATION_DOCUMENT_ARM.PROCESS_SPECIFICATION');
INVERSE
  deposition_material : SET[0:1] OF Passage_deposition_material_identification FOR items;
  fill_material : SET[0:1] OF Passage_filling_material_identification FOR items;
UNIQUE
  UR1: SELF\Characterizable_object.name;
WHERE
  WR1: NOT (SIZEOF(deposition_material) = 1) OR ('CONDUCTIVITY_MATERIAL_ASPECTS_ARM.'+ 'MATERIAL_IDENTIFICATION_WITH_CONDUCTIVITY_CLASSIFICATION' IN TYPEOF (deposition_material[1]));
  WR2: NOT plated_passage OR (SIZEOF(deposition_material) = 1);
  WR3: NOT EXISTS(as_finished_deposition_thickness) OR (SIZEOF(deposition_material) = 1);
  WR4: NOT plated_passage OR (SIZEOF([deposition_material[1]\Material_identification_with_conductivity_classification.electrical_conductivity_classification, deposition_material[1]\Material_identification_with_conductivity_classification.thermal_conductivity_classification] * ['conductive']) >= 1);
  WR5: NOT ((passage_terminus_condition = ft_terminus_condition.bilateral_bond) OR (passage_terminus_condition = ft_terminus_condition.unilateral_bond)) OR plated_passage;
  WR6: NOT (EXISTS(as_finished_passage_extent) AND EXISTS(minimum_finished_feature_size));
  WR7: NOT EXISTS(supported_external_minimum_annular_ring) OR plated_passage;
  WR8: NOT EXISTS(supported_internal_minimum_annular_ring) OR plated_passage;
  WR9: NOT EXISTS(unsupported_minimum_annular_ring) AND plated_passage;
END_ENTITY;

ENTITY Passage_technology_allocation_to_stack_model
  SUBTYPE OF (Stratum_sub_stack);
  allocated_technology : Passage_technology;
  single_stratum_passage_location : OPTIONAL Stratum_technology_occurrence;
  target_stratum : OPTIONAL Stratum_technology_occurrence;
DERIVE
  terminus_stratum : SET[0:?] OF Stratum_technology_occurrence := ft_get_terminus(SELF\Stratum_sub_stack.stratum_technology_sequence);
INVERSE
  minimum_annular_ring : SET[0:?] OF Allocated_passage_minimum_annular_ring FOR associated_passage_allocation;
WHERE
  WR1: (NOT EXISTS(single_stratum_passage_location) OR (single_stratum_passage_location IN SELF\Stratum_sub_stack.associated_stackup.composing_occurrence));
  WR2: EXISTS(SELF\Stratum_sub_stack.stratum_technology_sequence) XOR EXISTS(single_stratum_passage_location);
  WR3: SIZEOF(get_stack(SELF\Stratum_sub_stack.stratum_technology_sequence)) = (SIZEOF(SELF\Stratum_sub_stack.stratum_technology_sequence) + 1);
  WR4: sts_vertex_degree_check(SELF\Stratum_sub_stack.stratum_technology_sequence, 2);
  WR5: NOT EXISTS(single_stratum_passage_location) OR NOT EXISTS(target_stratum);
  WR6: NOT EXISTS(target_stratum) OR ((target_stratum IN SELF\Stratum_sub_stack.associated_stackup.composing_occurrence) AND (target_stratum IN terminus_stratum));
  WR7: ft_count_unspecified_asto(minimum_annular_ring) < 2;
END_ENTITY;

ENTITY Stratum_stack_model
  ABSTRACT SUPERTYPE OF (Design_stack_model)
  SUBTYPE OF (Template_definition);
DERIVE
  composing_occurrence : SET[1:?] OF Stratum_technology_occurrence := get_stack(composing_link);
INVERSE
  composing_link : SET[1:?] OF Stratum_technology_occurrence_relationship FOR scope;
WHERE
  WR1: SIZEOF(QUERY( cl <* composing_link | NOT('FABRICATION_TECHNOLOGY_ARM.STRATUM_TECHNOLOGY_OCCURRENCE_LINK' IN TYPEOF(cl)) )) = 0;
END_ENTITY;

ENTITY Stratum_sub_stack
  ABSTRACT SUPERTYPE OF (ONEOF (Local_linear_stack,
                                Passage_technology_allocation_to_stack_model))
  SUBTYPE OF (Template_definition);
  stratum_technology_sequence : OPTIONAL SET[1:?] OF Stratum_technology_occurrence_link;
  stack_thickness : OPTIONAL Length_tolerance_characteristic;
  associated_stackup : Design_stack_model;
WHERE
  WR1: SIZEOF(QUERY(sts <* stratum_technology_sequence | NOT(associated_stackup :=: sts\Stratum_technology_occurrence_relationship.scope)) ) = 0;
END_ENTITY;

ENTITY Stratum_surface_technology
  SUBTYPE OF (Shape_element);
  SELF\Shape_element.associated_definition : Stratum_technology;
DERIVE
  surface_specification : SET[0:1] OF Document_definition := get_document_definition(SELF, 'surface specification', 'SPECIFICATION_DOCUMENT_ARM.SURFACE_FINISH_SPECIFICATION');
WHERE
  WR1: (SIZEOF(QUERY(se <* bag_to_set(USEDIN(SELF,'PROPERTY_ASSIGNMENT_ARM.ASSIGNED_PROPERTY.DESCRIBED_ELEMENT')) | 'SURFACE_CONDITIONS_ARM.SURFACE_CONDITION' IN TYPEOF(se) )) > 0) OR (SIZEOF(get_document_definition(SELF, 'surface specification', 'SPECIFICATION_DOCUMENT_ARM.SURFACE_FINISH_SPECIFICATION')) = 1);
END_ENTITY;

ENTITY Stratum_technology
  SUPERTYPE OF (ONEOF (Design_layer_technology,
                       Documentation_layer_technology))
  SUBTYPE OF (Characterizable_object);
  layer_position : layer_position_type;
  stratum_thickness : OPTIONAL Length_tolerance_characteristic;
  minimum_finished_feature_size : OPTIONAL Length_data_element;
  laminate_stiffness_class : OPTIONAL stiffness_class;
  minimum_finished_feature_spacing : OPTIONAL Length_data_element;
  maximum_feature_size_requirement : OPTIONAL Length_data_element;
  minimum_aspect_ratio : OPTIONAL REAL;
DERIVE
  specification : SET[0:1] OF Document_definition := get_document_definition(SELF, 'specification', 'SPECIFICATION_DOCUMENT_ARM.PROCESS_SPECIFICATION');
  surface_specification : SET[0:1] OF Document_definition := get_document_definition(SELF, 'surface specification', 'SPECIFICATION_DOCUMENT_ARM.SURFACE_FINISH_SPECIFICATION');
INVERSE
  stratum_material : SET[1:1] OF Material_identification FOR items;
  surface_technology : SET[0:2] OF Stratum_surface_technology FOR associated_definition;
UNIQUE
  UR1: SELF\Characterizable_object.name;
WHERE
  WR1: NOT (layer_position = layer_position_type.primary) OR ('FABRICATION_TECHNOLOGY_ARM.DESIGN_LAYER_TECHNOLOGY' IN TYPEOF(SELF));
  WR2: NOT (layer_position = layer_position_type.secondary) OR ('FABRICATION_TECHNOLOGY_ARM.DESIGN_LAYER_TECHNOLOGY' IN TYPEOF(SELF));
  WR3: 'CONDUCTIVITY_MATERIAL_ASPECTS_ARM.'+ 'MATERIAL_IDENTIFICATION_WITH_CONDUCTIVITY_CLASSIFICATION' IN TYPEOF (stratum_material);
  WR4: NOT((SIZEOF(surface_technology) > 0 ) AND (SIZEOF(surface_specification) = 1));
END_ENTITY;

ENTITY Stratum_technology_mapping_relationship;
  source_stratum_technology : Footprint_library_stratum_technology;
  target_stratum_technology : Stratum_technology;
WHERE
  WR1: NOT ('FABRICATION_TECHNOLOGY_ARM.FOOTPRINT_LIBRARY_STRATUM_TECHNOLOGY' IN TYPEOF(target_stratum_technology));
  WR2: acyclic_stratum_technology_mapping_relationship(SELF, [target_stratum_technology], 'FABRICATION_TECHNOLOGY_ARM.STRATUM_TECHNOLOGY_MAPPING_RELATIONSHIP');
END_ENTITY;

ENTITY Stratum_technology_occurrence;
  name : STRING;
  definition : Stratum_technology;
  primary : OPTIONAL Stratum_surface_technology;
  rotation : OPTIONAL Angle_data_element;
UNIQUE
  UR1: name;
END_ENTITY;

ENTITY Stratum_technology_occurrence_feature_constraint
  SUBTYPE OF (Stratum_technology_occurrence_relationship);
  difference_distance : OPTIONAL length_measure;
  intersection_distance : OPTIONAL length_measure;
WHERE
  WR1: EXISTS (difference_distance) XOR EXISTS(intersection_distance);
END_ENTITY;

ENTITY Stratum_technology_occurrence_link
  SUBTYPE OF (Stratum_technology_occurrence_relationship);
  base_stratum_technology_occurrence : OPTIONAL up_or_down;
WHERE
  WR1: NOT (SELF\Stratum_technology_occurrence_relationship.sto_1 :=: SELF\Stratum_technology_occurrence_relationship.sto_2) OR (SIZEOF(SELF\Stratum_technology_occurrence_relationship.scope\Stratum_stack_model.composing_link) = 1);
END_ENTITY;

ENTITY Stratum_technology_occurrence_relationship
  ABSTRACT SUPERTYPE OF (ONEOF (Derived_stratum_technology_occurrence_relationship,
                                Stratum_technology_occurrence_link,
                                Stratum_technology_occurrence_swap_relationship,
                                Stratum_technology_occurrence_feature_constraint));
  sto_1 : Stratum_technology_occurrence;
  sto_2 : Stratum_technology_occurrence;
  scope : Stratum_stack_model;
WHERE
  WR1: acyclic_stratum_technology_occurrence_relationship(SELF, [sto_2], 'FABRICATION_TECHNOLOGY_ARM.STRATUM_TECHNOLOGY_OCCURRENCE_RELATIONSHIP');
END_ENTITY;

ENTITY Stratum_technology_occurrence_swap_relationship
  SUBTYPE OF (Stratum_technology_occurrence_relationship);
UNIQUE
  UR1: SELF\Stratum_technology_occurrence_relationship.sto_1, SELF\Stratum_technology_occurrence_relationship.scope;
  UR2: SELF\Stratum_technology_occurrence_relationship.sto_2, SELF\Stratum_technology_occurrence_relationship.scope;
WHERE
  WR1: SELF\Stratum_technology_occurrence_relationship.sto_1 <> SELF\Stratum_technology_occurrence_relationship.sto_2;
  WR2: (SELF\Stratum_technology_occurrence_relationship.sto_1 IN SELF\Stratum_technology_occurrence_relationship.scope\Stratum_stack_model.composing_occurrence) AND (SELF\Stratum_technology_occurrence_relationship.sto_2 IN SELF\Stratum_technology_occurrence_relationship.scope\Stratum_stack_model.composing_occurrence);
END_ENTITY;

ENTITY Stratum_technology_swap_relationship;
  primary_stratum_technology : Stratum_technology;
  secondary_stratum_technology : Stratum_technology;
UNIQUE
  UR1: primary_stratum_technology;
  UR2: secondary_stratum_technology;
WHERE
  WR1: NOT (('FABRICATION_TECHNOLOGY_ARM.DOCUMENTATION_LAYER_TECHNOLOGY' IN TYPEOF(primary_stratum_technology)) AND EXISTS(primary_stratum_technology\Documentation_layer_technology.pre_defined_documentation_layer_purpose)) OR (primary_stratum_technology\Documentation_layer_technology.pre_defined_documentation_layer_purpose = secondary_stratum_technology\Documentation_layer_technology.pre_defined_documentation_layer_purpose);
  WR2: TYPEOF(primary_stratum_technology) = TYPEOF(secondary_stratum_technology);
  WR3: primary_stratum_technology\Stratum_technology.layer_position = layer_position_type.primary;
  WR4: secondary_stratum_technology\Stratum_technology.layer_position = layer_position_type.secondary;
  WR5: primary_stratum_technology <> secondary_stratum_technology;
  WR6: acyclic_stratum_technology_swap_relationship(SELF, [secondary_stratum_technology], 'FABRICATION_TECHNOLOGY_ARM.STRATUM_TECHNOLOGY_SWAP_RELATIONSHIP');
END_ENTITY;

FUNCTION acyclic_equivalent_stackup_model_definition
 (relation : Equivalent_stackup_model_definition; relatives : SET[1:?] OF Stratum_stack_model; specific_relation : STRING) : BOOLEAN;
LOCAL
    x : SET OF Equivalent_stackup_model_definition := [];
END_LOCAL;

    IF relation.primary_stackup_model IN relatives THEN
      RETURN (FALSE);
    END_IF;
      x := QUERY(pd <* bag_to_set(USEDIN(relation.primary_stackup_model,
        'FABRICATION_TECHNOLOGY_ARM.' + 'EQUIVALENT_STACKUP_MODEL_DEFINITION.' +
        'EQUIVALENT_STACKUP_MODEL')) | specific_relation IN TYPEOF(pd));
    REPEAT i := 1 TO HIINDEX(x);
      IF NOT acyclic_equivalent_stackup_model_definition(x[i], relatives +
        relation.primary_stackup_model, specific_relation) THEN
        RETURN (FALSE);
      END_IF;
    END_REPEAT;
  RETURN (TRUE);
END_FUNCTION;

FUNCTION acyclic_stratum_technology_mapping_relationship
 (relation : Stratum_technology_mapping_relationship; relatives : SET[1:?] OF Stratum_technology; specific_relation : STRING) : BOOLEAN;
LOCAL
     x : SET OF Stratum_technology_mapping_relationship := [];
  END_LOCAL;

    IF relation.source_stratum_technology IN relatives THEN
      RETURN (FALSE);
    END_IF;
    x := QUERY(pd <* bag_to_set(USEDIN(relation.source_stratum_technology,
      'FABRICATION_TECHNOLOGY_ARM.' +
      'STRATUM_TECHNOLOGY_MAPPING_RELATIONSHIP.' +
      'TARGET_STRATUM_TECHNOLOGY')) | specific_relation IN TYPEOF(pd));
    REPEAT i := 1 TO HIINDEX(x);
      IF NOT acyclic_stratum_technology_mapping_relationship(x[i], relatives +
        relation.source_stratum_technology, specific_relation) THEN
        RETURN (FALSE);
      END_IF;
    END_REPEAT;
    RETURN (TRUE);
END_FUNCTION;

FUNCTION acyclic_stratum_technology_occurrence_relationship
 (relation : Stratum_technology_occurrence_relationship; relatives : SET[1:?] OF Stratum_technology_occurrence; specific_relation : STRING) : BOOLEAN;
LOCAL
     x : SET OF Stratum_technology_occurrence_relationship := [];
  END_LOCAL;
    IF relation.sto_1 IN relatives THEN
      RETURN (FALSE);
    END_IF;
    x := QUERY(pd <* bag_to_set(USEDIN(relation.sto_1,
      'FABRICATION_TECHNOLOGY_ARM.' +
      'STRATUM_TECHNOLOGY_OCCURRENCE_RELATIONSHIP.' +
      'STO_2')) | specific_relation IN TYPEOF(pd));
    REPEAT i := 1 TO HIINDEX(x);
      IF NOT acyclic_Stratum_technology_occurrence_relationship(x[i], relatives +
        relation.sto_1, specific_relation) THEN
        RETURN (FALSE);
      END_IF;
    END_REPEAT;
    RETURN (TRUE);
END_FUNCTION;

FUNCTION acyclic_stratum_technology_swap_relationship
 (relation : Stratum_technology_swap_relationship; relatives : SET[1:?] OF Stratum_technology; specific_relation : STRING) : BOOLEAN;
LOCAL
     x : SET OF Stratum_technology_swap_relationship := [];
  END_LOCAL;

    IF relation.primary_stratum_technology IN relatives THEN
      RETURN (FALSE);
    END_IF;
    x := QUERY(pd <* bag_to_set(USEDIN(relation.primary_stratum_technology,
      'FABRICATION_TECHNOLOGY_ARM.' +
      'STRATUM_TECHNOLOGY_SWAP_RELATIONSHIP.' +
      'SECONDARY_STRATUM_TECHNOLOGY')) | specific_relation IN TYPEOF(pd));
    REPEAT i := 1 TO HIINDEX(x);
      IF NOT acyclic_stratum_technology_swap_relationship(x[i], relatives +
        relation.primary_stratum_technology, specific_relation) THEN
        RETURN (FALSE);
      END_IF;
    END_REPEAT;
    RETURN (TRUE);
END_FUNCTION;

FUNCTION ft_count_unspecified_asto
 (input : SET[0:?] OF Allocated_passage_minimum_annular_ring) : INTEGER;
LOCAL
     count : INTEGER := 0;
    END_LOCAL;
    REPEAT i := 1 to SIZEOF(input) BY 1;
     IF NOT EXISTS(input[i]\Allocated_passage_minimum_annular_ring.associated_stratum_technology_occurrence) THEN
       count := count + 1;
     END_IF;
    END_REPEAT;
    RETURN(count);
END_FUNCTION;

FUNCTION ft_get_terminus
 (input : SET[0:?] OF Stratum_technology_occurrence_link) : SET[0:?] OF Stratum_technology_occurrence;
LOCAL
  sto : SET OF Stratum_technology_occurrence := get_stack(input);
  i : INTEGER := 0;
  j : INTEGER := 0;
  pstoo : SET OF Stratum_technology_occurrence := [];
  sstoo : SET OF Stratum_technology_occurrence := [];
END_LOCAL;
  pstoo := sto;
  sstoo := sto;
 REPEAT i := 1 TO SIZEOF(sto) BY 1;
  REPEAT j := 1 TO SIZEOF(input) BY 1;
	IF (input[j]\Stratum_technology_occurrence_relationship.sto_1 :=: sto[i]) THEN 
	  pstoo := pstoo - sto[i];
	END_IF;  
	IF (input[j]\Stratum_technology_occurrence_relationship.sto_2 :=: sto[i]) THEN 
	  sstoo := sstoo - sto[i];
	END_IF;  
  END_REPEAT;                                     
 END_REPEAT;                                     
RETURN(pstoo + sstoo);
END_FUNCTION;

FUNCTION get_stack
 (input : SET[0:?] OF Stratum_technology_occurrence_link) : SET[0:?] OF Stratum_technology_occurrence;
LOCAL
      sto : SET OF Stratum_technology_occurrence := [];
      i : INTEGER := 0;
    END_LOCAL;
    REPEAT  i := 1 TO SIZEOF(input) BY 1;
      sto := sto + input[i]\Stratum_technology_occurrence_relationship.sto_1 + input[i]\Stratum_technology_occurrence_relationship.sto_2;
    END_REPEAT;
    RETURN(sto);
END_FUNCTION;

FUNCTION less
 (input1 : Length_tolerance_characteristic; input2 : ft_value_select) : BOOLEAN;
RETURN(TRUE);
END_FUNCTION;

FUNCTION sts_vertex_degree_check
 (input : SET[0:?] OF Stratum_technology_occurrence_link; n : INTEGER) : BOOLEAN;
LOCAL
   psto : INTEGER := 0;
   ssto : INTEGER := 0;
   sto : SET OF Stratum_technology_occurrence := get_stack(input);
   i : INTEGER := 0;
   j : INTEGER := 0;
   pass : BOOLEAN := TRUE;
 END_LOCAL;
  REPEAT i := 1 TO SIZEOF(sto) BY 1;
   REPEAT j := 1 TO SIZEOF(input) BY 1;
     IF (input[j]\Stratum_technology_occurrence_relationship.sto_1 :=: sto[i]) THEN 
      psto := psto + 1;
      IF (psto = n) THEN
       pass := FALSE; 
       ESCAPE; 
      END_IF;
     END_IF;  
     IF (input[j]\Stratum_technology_occurrence_relationship.sto_2 :=: sto[i]) THEN 
      ssto := ssto + 1;  
      IF (ssto = n) THEN 
       pass := FALSE; 
       ESCAPE; 
      END_IF;
     END_IF;  
   END_REPEAT;                                     
  END_REPEAT;                                     
 RETURN(pass);
END_FUNCTION;

END_SCHEMA;  -- Fabrication_technology_arm


© ISO 2018 — All rights reserved