################################################################################################
# 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

    if METAL_LEVEL == '4LM' || METAL_LEVEL == '5LM' || METAL_LEVEL == '6LM'        
        #================================================
        #---------------------METAL4---------------------
        #================================================ 

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

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

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

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