| Application module: Land | ISO/TS 10303-1692:2018-11(E) © ISO | 
         (*
ISO/TC 184/SC 4/WG 12 N9850 - ISO/TS 10303-1692 Land - EXPRESS ARM
Supersedes 
         ISO/TC 184/SC 4/WG 12 N9438
*)
         
SCHEMA Land_arm;
         USE FROM
         Layered_interconnect_module_design_arm;
            -- ISO/TS 10303-1698
         REFERENCE FROM 
         Support_resource_arm   -- ISO/TS 10303-1800
  (bag_to_set);
         
ENTITY Contact_size_dependent_land
           SUBTYPE OF (Land);
           SELF\Definition_based_product_occurrence.derived_from : Default_attachment_size_based_land_physical_template;
INVERSE
           external_access_mechanism : SET[1:2] OF Land_interface_terminal FOR associated_definition;
         
         END_ENTITY;
ENTITY Dependent_electrical_isolation_removal_component
           SUBTYPE OF (Electrical_isolation_laminate_component);
           SELF\Electrical_isolation_laminate_component.derived_from : Dependent_electrical_isolation_removal_template;
DERIVE
           SELF\Material_removal_laminate_component.causal_item RENAMED associated_land : Land := land_get_associated_land_for_electrical_removal(SELF);
WHERE
           WR1: associated_land\Definition_based_product_occurrence.derived_from :=:
            SELF\Definition_based_product_occurrence.derived_from\Dependent_electrical_isolation_removal_template.associated_item;
           WR2: NOT('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.MULTI_LAYER_MATERIAL_REMOVAL_LAMINATE_COMPONENT' IN TYPEOF(SELF));
           WR3: associated_land\Land.functional = FALSE;
         
         END_ENTITY;
ENTITY Dependent_thermal_isolation_removal_component
           SUBTYPE OF (Thermal_isolation_removal_component);
           SELF\Thermal_isolation_removal_component.derived_from : Dependent_thermal_isolation_removal_template;
DERIVE
           associated_land : Land := land_get_associated_land_for_thermal_removal(SELF);
WHERE
           WR1: associated_land\Definition_based_product_occurrence.derived_from :=:
            SELF\Thermal_isolation_removal_component.derived_from\Dependent_thermal_isolation_removal_template.associated_item;
           WR2: associated_land\Land.functional = TRUE;
         
         END_ENTITY;
ENTITY Inter_stratum_feature_dependent_land
           ABSTRACT SUPERTYPE
         
         OF (ONEOF (Plated_passage_dependent_land,
                                Unsupported_passage_dependent_land))
           SUBTYPE OF (Land);
           SELF\Definition_based_product_occurrence.derived_from : Default_passage_based_land_physical_template;
         
         END_ENTITY;
ENTITY Land
           SUPERTYPE OF 
         (ONEOF (Contact_size_dependent_land,
                       Inter_stratum_feature_dependent_land))
           SUBTYPE OF (Stratum_feature_template_component);
           alternate_land_definition : 
         OPTIONAL 
         Land_physical_template;
           SELF\Definition_based_product_occurrence.derived_from : Land_physical_template;
DERIVE
           functional : BOOLEAN := (SIZEOF(['LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.CONDUCTOR',
         'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.CONNECTED_FILLED_AREA'] *
         TYPEOF(SELF\Stratum_feature_template_component.implementation_or_resident_stratum)) = 1);
INVERSE
           access_mechanism : SET[0:?] OF Land_join_terminal FOR associated_definition;
WHERE
           WR1: NOT(functional) OR (SIZEOF(access_mechanism) > 0);
         
         END_ENTITY;
ENTITY Land_interface_terminal
           SUBTYPE OF (Laminate_component_interface_terminal);
           SELF\Component_feature.definition : Land_template_interface_terminal;
           SELF\Component_feature.associated_definition : Contact_size_dependent_land;
WHERE
           WR1: NOT EXISTS(SELF\Shape_element.description);
         
         END_ENTITY;
ENTITY Land_join_terminal
           SUBTYPE OF (Laminate_component_join_terminal);
           SELF\Component_feature.definition : Land_template_join_terminal;
           SELF\Component_feature.associated_definition : Land;
WHERE
           WR1: NOT EXISTS(SELF\Shape_element.description);
         
         END_ENTITY;
ENTITY Land_with_join_terminal
           SUBTYPE OF (Land, Land_join_terminal);
DERIVE
           SELF\Component_feature.associated_definition : Land_with_join_terminal := SELF;
         
         END_ENTITY;
ENTITY Plated_passage_dependent_land
           SUBTYPE OF (Inter_stratum_feature_dependent_land);
           reference_plated_passage : Plated_passage;
           SELF\Definition_based_product_occurrence.derived_from : Default_plated_passage_based_land_physical_template;
         
         END_ENTITY;
ENTITY Thermal_isolation_removal_component
           SUBTYPE OF (Material_removal_structured_component);
           SELF\Definition_based_product_occurrence.derived_from : Thermal_isolation_removal_template;
WHERE
           WR1: NOT('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.MULTI_LAYER_MATERIAL_REMOVAL_LAMINATE_COMPONENT' IN TYPEOF(SELF));
         
         END_ENTITY;
ENTITY Unsupported_passage_dependent_land
           SUBTYPE OF (Inter_stratum_feature_dependent_land);
           reference_passage : Unsupported_passage;
           SELF\Definition_based_product_occurrence.derived_from : Default_unsupported_passage_based_land_physical_template;
         
         END_ENTITY;
SUBTYPE_CONSTRAINT l_laminate_component_interface_terminal_subtypes FOR Laminate_component_interface_terminal;
           ONEOF (Component_termination_passage_interface_terminal,
         Land_interface_terminal);
      
         END_SUBTYPE_CONSTRAINT;
SUBTYPE_CONSTRAINT l_laminate_component_join_terminal_subtypes FOR Laminate_component_join_terminal;
           ONEOF (Component_termination_passage_join_terminal,
         Land_join_terminal,
         Embedded_physical_component_terminal);
      
         END_SUBTYPE_CONSTRAINT;
SUBTYPE_CONSTRAINT stratum_feature_template_component_subtypes FOR Stratum_feature_template_component;
           ONEOF (Area_component,
         Conductive_interconnect_element,
         Land);
      
         END_SUBTYPE_CONSTRAINT;
FUNCTION land_get_associated_land_for_electrical_removal
 (input : Dependent_electrical_isolation_removal_component) : Land;
         LOCAL
   assembly_relationships_for_associated_structure : SET OF Structured_layout_component_sub_assembly_relationship := [];
   assembly_relationship : SET OF Structured_layout_component_sub_assembly_relationship :=
           bag_to_set(USEDIN(input, 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRUCTURED_LAYOUT_COMPONENT_SUB_ASSEMBLY_RELATIONSHIP.RELATED_VIEW'));
   associated_structure : Structured_layout_component;
   first_location : Template_location_in_structured_template := assembly_relationship[1]\Structured_layout_component_sub_assembly_relationship.first_location;
   resident_stratum : stratum;
   resident_sftc : Stratum_feature_template_component;
  END_LOCAL;
  --determine resident_stratum;
  --critical to just use resident stratum as the individual design intents might be against different stratum features (different power areas).
  --address the multiple design intents here
  --use the last stratum found
   REPEAT i := 1 TO SIZEOF(input\Material_removal_laminate_component.design_intent) BY 1;
  CASE TRUE OF
    ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM' IN TYPEOF(input\Material_removal_laminate_component.design_intent[i])) : 
     resident_stratum := input\Material_removal_laminate_component.design_intent[i];
  
    ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_FEATURE_TEMPLATE_COMPONENT' IN TYPEOF(input\Material_removal_laminate_component.design_intent[i])) :
    BEGIN
     resident_sftc := input\Material_removal_laminate_component.design_intent[i];
     CASE TRUE OF
       ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_FEATURE' IN TYPEOF(resident_sftc\Stratum_feature_template_component.implementation_or_resident_stratum)) :
       resident_stratum := resident_sftc\Stratum_feature_template_component.implementation_or_resident_stratum\Stratum_feature.resident_stratum;
       ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM' IN TYPEOF(resident_sftc\Stratum_feature_template_component.implementation_or_resident_stratum)) :
       resident_stratum := resident_sftc\Stratum_feature_template_component.implementation_or_resident_stratum;
       OTHERWISE :
        RETURN(?);
     END_CASE;
    END;
    OTHERWISE :
     RETURN(?);
  END_CASE;
   END_REPEAT;
  --determine first_location;
  --if there is more than one assembly_relationship return UNKNOWN;
   IF SIZEOF(assembly_relationship) <> 1 THEN RETURN(?);
   END_IF;
   
  --determine associated_land;
  --associated land is on same stratum;
  
     associated_structure := assembly_relationship[1]\Structured_layout_component_sub_assembly_relationship.relating_view;
     assembly_relationships_for_associated_structure := 
                     bag_to_set(USEDIN(associated_structure, 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRUCTURED_LAYOUT_COMPONENT_SUB_ASSEMBLY_RELATIONSHIP.RELATING_VIEW')) - assembly_relationship;
  --this assembly relationship is excluded since we are querying for other relationships
  
  CASE TRUE OF
    ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.FOOTPRINT_OCCURRENCE' IN TYPEOF(associated_structure)) :
  --if part of footprint then associated_land has same first_location;
    BEGIN   
     REPEAT i := 1 TO SIZEOF(assembly_relationships_for_associated_structure) BY 1;
      IF ((first_location :=: assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.first_location) AND
         ('LAND_ARM.LAND' IN TYPEOF(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.related_view)) AND
         (assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.related_view\Stratum_feature_template_component.resident_stratum
              :=: resident_stratum))
      THEN
          RETURN(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.related_view);
      END_IF;
     END_REPEAT;
    --if no land is found return UNKNOWN.
     RETURN(?);
    END;
    
       ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.PADSTACK_OCCURRENCE' IN TYPEOF(associated_structure)) :
    BEGIN
     REPEAT i := 1 TO SIZEOF(assembly_relationships_for_associated_structure) BY 1;
      IF (('LAND_ARM.LAND' IN TYPEOF(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.related_view)) AND
          (assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.related_view\Stratum_feature_template_component.resident_stratum
               :=: resident_stratum))
      THEN
          RETURN(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.related_view);
       END_IF;
     END_REPEAT;
    --if no land is found return UNKNOWN.
     RETURN(?);
    END;
    
    OTHERWISE :
    --if no land is found return UNKNOWN.
     RETURN(?);
  END_CASE;
         END_FUNCTION;
         
FUNCTION land_get_associated_land_for_thermal_removal
 (input : Dependent_thermal_isolation_removal_component) : Land;
         LOCAL
   assembly_relationships_for_associated_structure : SET OF Structured_layout_component_sub_assembly_relationship := [];
   assembly_relationship : SET OF Structured_layout_component_sub_assembly_relationship :=
           bag_to_set(USEDIN(input, 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRUCTURED_LAYOUT_COMPONENT_SUB_ASSEMBLY_RELATIONSHIP.RELATED_VIEW'));
   associated_structure : Structured_layout_component;
   component_mrlc : SET OF Material_removal_laminate_component := [];
   component_relationship : SET OF Structured_layout_component_sub_assembly_relationship :=
           bag_to_set(USEDIN(input, 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRUCTURED_LAYOUT_COMPONENT_SUB_ASSEMBLY_RELATIONSHIP.RELATING_VIEW'));
   first_location : Template_location_in_structured_template := assembly_relationship[1]\Structured_layout_component_sub_assembly_relationship.first_location;
   resident_stratum : stratum;
   resident_sftc : Stratum_feature_template_component;
  END_LOCAL;
  --determine resident_stratum;
  --critical to just use resident stratum as the individual isolation features might be against different stratum features (different power areas).
   REPEAT i := 1 TO SIZEOF(component_relationship) BY 1;
     component_mrlc := component_mrlc + component_relationship[i]\Structured_layout_component_sub_assembly_relationship.related_view;
   END_REPEAT;
  CASE TRUE OF
    ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM' IN TYPEOF(component_mrlc[1]\Material_removal_laminate_component.design_intent[1])) : 
     resident_stratum := component_mrlc[1]\Material_removal_laminate_component.design_intent[1];
  
    ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_FEATURE_TEMPLATE_COMPONENT' IN TYPEOF(component_mrlc[1]\Material_removal_laminate_component.design_intent[1])) :
    BEGIN
     resident_sftc := component_mrlc[1]\Material_removal_laminate_component.design_intent[1];
     CASE TRUE OF
       ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM_FEATURE' IN TYPEOF(resident_sftc\Stratum_feature_template_component.implementation_or_resident_stratum)) :
       resident_stratum := resident_sftc\Stratum_feature_template_component.implementation_or_resident_stratum\Stratum_feature.resident_stratum;
       ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRATUM' IN TYPEOF(resident_sftc\Stratum_feature_template_component.implementation_or_resident_stratum)) :
       resident_stratum := resident_sftc\Stratum_feature_template_component.implementation_or_resident_stratum;
       OTHERWISE :
        RETURN(?);
     END_CASE;
    END;
    OTHERWISE :
     RETURN(?);
  END_CASE;
  --determine first_location;
  --if there is more than one assembly_relationship return UNKNOWN;
   IF SIZEOF(assembly_relationship) <> 1 THEN RETURN(?);
   END_IF;
   
  --determine associated_land;
  --associated land is on same stratum;
  
     associated_structure := assembly_relationship[1]\Structured_layout_component_sub_assembly_relationship.relating_view;
     assembly_relationships_for_associated_structure := 
                     bag_to_set(USEDIN(associated_structure, 'LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.STRUCTURED_LAYOUT_COMPONENT_SUB_ASSEMBLY_RELATIONSHIP.RELATING_VIEW')) - assembly_relationship;
  --this assembly relationship is excluded since we are querying for other relationships
  
  CASE TRUE OF
    ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.FOOTPRINT_OCCURRENCE' IN TYPEOF(associated_structure)) :
  --if part of footprint then associated_land has same first_location;
    BEGIN   
     REPEAT i := 1 TO SIZEOF(assembly_relationships_for_associated_structure) BY 1;
      IF ((first_location :=: assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.first_location) AND
         ('LAND_ARM.LAND' IN TYPEOF(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.related_view)) AND
         (assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.related_view\Stratum_feature_template_component.resident_stratum
              :=: resident_stratum))
      THEN
          RETURN(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.related_view);
      END_IF;
     END_REPEAT;
    --if no land is found return UNKNOWN.
     RETURN(?);
    END;
    
       ('LAYERED_INTERCONNECT_MODULE_DESIGN_ARM.PADSTACK_OCCURRENCE' IN TYPEOF(associated_structure)) :
    BEGIN
     REPEAT i := 1 TO SIZEOF(assembly_relationships_for_associated_structure) BY 1;
      IF (('LAND_ARM.LAND' IN TYPEOF(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.related_view)) AND
          (assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.related_view\Stratum_feature_template_component.resident_stratum
               :=: resident_stratum))
      THEN
          RETURN(assembly_relationships_for_associated_structure[i]\Structured_layout_component_sub_assembly_relationship.related_view);
       END_IF;
     END_REPEAT;
    --if no land is found return UNKNOWN.
     RETURN(?);
    END;
    
    OTHERWISE :
    --if no land is found return UNKNOWN.
     RETURN(?);
  END_CASE;
         END_FUNCTION;
         
         END_SCHEMA;  -- Land_arm
© ISO 2018 — All rights reserved