################################################################################################
# Copyright 2022 GlobalFoundries PDK Authors
#
# Licensed under the Apache License, Version 2.0 (the 'License');
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an 'AS IS' BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
################################################################################################


if BEOL

    #================================================
    #---------------------METAL2---------------------
    #================================================ 

    # Rule M2.1: min. metal2 width is 0.28µm
    logger.info('Executing rule M2.1')
    m21_l1  = metal2.width(0.28.um, euclidian).polygons(0.001)
    m21_l1.output('M2.1', 'M2.1 : min. metal2 width : 0.28µm')
    m21_l1.forget 

    # Rule M2.2a: min. metal2 spacing is 0.28µm
    logger.info('Executing rule M2.2a')
    m22a_l1  = metal2.space(0.28.um, euclidian).polygons(0.001)
    m22a_l1.output('M2.2a', 'M2.2a : min. metal2 spacing : 0.28µm')
    m22a_l1.forget 

    # Rule M2.2b: Space to wide Metal2 (length & width > 10um) is 0.3µm
    logger.info('Executing rule M2.2b')
    m22b_l1  = metal2.separation(metal2.not_interacting(metal2.edges.with_length(nil, 10.um)), 0.3.um, euclidian).polygons(0.001)
    m22b_l1.output('M2.2b', 'M2.2b : Space to wide Metal2 (length & width > 10um) : 0.3µm')
    m22b_l1.forget 

    # Rule M2.3: Minimum metal2 area is 0.1444µm²
    logger.info('Executing rule M2.3')
    m23_l1  = metal2.with_area(nil, 0.1444.um)
    m23_l1.output('M2.3', 'M2.3 : Minimum metal2 area : 0.1444µm²')
    m23_l1.forget
        
end #BEOL    