blob: 67d0e284195da7e3478482f21386a4ef709fe9e0 [file] [log] [blame]
################################################################################################
# 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.
################################################################################################
#================================================
#-----------------GEOMETRY RULES-----------------
#================================================
if OFFGRID
logger.info('OFFGRID-ANGLES section')
logger.info('Executing rule comp_OFFGRID')
comp.ongrid(0.005).output('comp_OFFGRID', 'OFFGRID : OFFGRID vertex on comp')
comp.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('comp_angle', 'ACUTE : non 45 degree angle comp')
logger.info('Executing rule dnwell_OFFGRID')
dnwell.ongrid(0.005).output('dnwell_OFFGRID', 'OFFGRID : OFFGRID vertex on dnwell')
dnwell.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('dnwell_angle', 'ACUTE : non 45 degree angle dnwell')
logger.info('Executing rule nwell_OFFGRID')
nwell.ongrid(0.005).output('nwell_OFFGRID', 'OFFGRID : OFFGRID vertex on nwell')
nwell.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('nwell_angle', 'ACUTE : non 45 degree angle nwell')
logger.info('Executing rule dualgate_OFFGRID')
dualgate.ongrid(0.005).output('dualgate_OFFGRID', 'OFFGRID : OFFGRID vertex on dualgate')
dualgate.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('dualgate_angle', 'ACUTE : non 45 degree angle dualgate')
logger.info('Executing rule otpgate_OFFGRID')
otpgate.ongrid(0.005).output('otpgate_OFFGRID', 'OFFGRID : OFFGRID vertex on otpgate')
otpgate.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('otpgate_angle', 'ACUTE : non 45 degree angle otpgate')
logger.info('Executing rule poly2_OFFGRID')
poly2.ongrid(0.005).output('poly2_OFFGRID', 'OFFGRID : OFFGRID vertex on poly2')
poly2.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('poly2_angle', 'ACUTE : non 45 degree angle poly2')
logger.info('Executing rule nplus_OFFGRID')
nplus.ongrid(0.005).output('nplus_OFFGRID', 'OFFGRID : OFFGRID vertex on nplus')
nplus.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('nplus_angle', 'ACUTE : non 45 degree angle nplus')
logger.info('Executing rule pplus_OFFGRID')
pplus.ongrid(0.005).output('pplus_OFFGRID', 'OFFGRID : OFFGRID vertex on pplus')
pplus.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('pplus_angle', 'ACUTE : non 45 degree angle pplus')
logger.info('Executing rule sab_OFFGRID')
sab.ongrid(0.005).output('sab_OFFGRID', 'OFFGRID : OFFGRID vertex on sab')
sab.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('sab_angle', 'ACUTE : non 45 degree angle sab')
logger.info('Executing rule esd_OFFGRID')
esd.ongrid(0.005).output('esd_OFFGRID', 'OFFGRID : OFFGRID vertex on esd')
esd.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('esd_angle', 'ACUTE : non 45 degree angle esd')
logger.info('Executing rule contact_OFFGRID')
contact.ongrid(0.005).output('contact_OFFGRID', 'OFFGRID : OFFGRID vertex on contact')
contact.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('contact_angle', 'ACUTE : non 45 degree angle contact')
logger.info('Executing rule metal1_OFFGRID')
metal1.ongrid(0.005).output('metal1_OFFGRID', 'OFFGRID : OFFGRID vertex on metal1')
metal1.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal1_angle', 'ACUTE : non 45 degree angle metal1')
logger.info('Executing rule via1_OFFGRID')
via1.ongrid(0.005).output('via1_OFFGRID', 'OFFGRID : OFFGRID vertex on via1')
via1.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('via1_angle', 'ACUTE : non 45 degree angle via1')
logger.info('Executing rule metal2_OFFGRID')
metal2.ongrid(0.005).output('metal2_OFFGRID', 'OFFGRID : OFFGRID vertex on metal2')
metal2.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal2_angle', 'ACUTE : non 45 degree angle metal2')
if METAL_LEVEL == '3LM' || METAL_LEVEL == '4LM' || METAL_LEVEL == '5LM' || METAL_LEVEL == '6LM'
logger.info('Executing rule via2_OFFGRID')
via2.ongrid(0.005).output('via2_OFFGRID', 'OFFGRID : OFFGRID vertex on via2')
via2.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('via2_angle', 'ACUTE : non 45 degree angle via2')
logger.info('Executing rule metal3_OFFGRID')
metal3.ongrid(0.005).output('metal3_OFFGRID', 'OFFGRID : OFFGRID vertex on metal3')
metal3.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal3_angle', 'ACUTE : non 45 degree angle metal3')
if METAL_LEVEL == '4LM' || METAL_LEVEL == '5LM' || METAL_LEVEL == '6LM'
logger.info('Executing rule via3_OFFGRID')
via3.ongrid(0.005).output('via3_OFFGRID', 'OFFGRID : OFFGRID vertex on via3')
via3.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('via3_angle', 'ACUTE : non 45 degree angle via3')
logger.info('Executing rule metal4_OFFGRID')
metal4.ongrid(0.005).output('metal4_OFFGRID', 'OFFGRID : OFFGRID vertex on metal4')
metal4.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal4_angle', 'ACUTE : non 45 degree angle metal4')
if METAL_LEVEL == '5LM' || METAL_LEVEL == '6LM'
logger.info('Executing rule via4_OFFGRID')
via4.ongrid(0.005).output('via4_OFFGRID', 'OFFGRID : OFFGRID vertex on via4')
via4.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('via4_angle', 'ACUTE : non 45 degree angle via4')
logger.info('Executing rule metal5_OFFGRID')
metal5.ongrid(0.005).output('metal5_OFFGRID', 'OFFGRID : OFFGRID vertex on metal5')
metal5.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal5_angle', 'ACUTE : non 45 degree angle metal5')
if METAL_LEVEL == '6LM'
logger.info('Executing rule via5_OFFGRID')
via5.ongrid(0.005).output('via5_OFFGRID', 'OFFGRID : OFFGRID vertex on via5')
via5.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('via5_angle', 'ACUTE : non 45 degree angle via5')
logger.info('Executing rule metaltop_OFFGRID')
metaltop.ongrid(0.005).output('metaltop_OFFGRID', 'OFFGRID : OFFGRID vertex on metaltop')
metaltop.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metaltop_angle', 'ACUTE : non 45 degree angle metaltop')
end
end
end
end
logger.info('Executing rule pad_OFFGRID')
pad.ongrid(0.005).output('pad_OFFGRID', 'OFFGRID : OFFGRID vertex on pad')
pad.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('pad_angle', 'ACUTE : non 45 degree angle pad')
logger.info('Executing rule resistor_OFFGRID')
resistor.ongrid(0.005).output('resistor_OFFGRID', 'OFFGRID : OFFGRID vertex on resistor')
resistor.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('resistor_angle', 'ACUTE : non 45 degree angle resistor')
logger.info('Executing rule piscap_OFFGRID')
piscap.ongrid(0.005).output('piscap_OFFGRID', 'OFFGRID : OFFGRID vertex on piscap')
piscap.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('piscap_angle', 'ACUTE : non 45 degree angle piscap')
logger.info('Executing rule fusetop_OFFGRID')
fusetop.ongrid(0.005).output('fusetop_OFFGRID', 'OFFGRID : OFFGRID vertex on fusetop')
fusetop.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('fusetop_angle', 'ACUTE : non 45 degree angle fusetop')
logger.info('Executing rule fusetop2_OFFGRID')
fusetop2.ongrid(0.005).output('fusetop2_OFFGRID', 'OFFGRID : OFFGRID vertex on fusetop2')
fusetop2.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('fusetop2_angle', 'ACUTE : non 45 degree angle fusetop2')
logger.info('Executing rule nat_OFFGRID')
nat.ongrid(0.005).output('nat_OFFGRID', 'OFFGRID : OFFGRID vertex on nat')
nat.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('nat_angle', 'ACUTE : non 45 degree angle nat')
logger.info('Executing rule lvt_OFFGRID')
lvt.ongrid(0.005).output('lvt_OFFGRID', 'OFFGRID : OFFGRID vertex on lvt')
lvt.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('lvt_angle', 'ACUTE : non 45 degree angle lvt')
logger.info('Executing rule comp_dummy_OFFGRID')
comp_dummy.ongrid(0.005).output('comp_dummy_OFFGRID', 'OFFGRID : OFFGRID vertex on comp_dummy')
comp_dummy.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('comp_dummy_angle', 'ACUTE : non 45 degree angle comp_dummy')
logger.info('Executing rule poly2_dummy_OFFGRID')
poly2_dummy.ongrid(0.005).output('poly2_dummy_OFFGRID', 'OFFGRID : OFFGRID vertex on poly2_dummy')
poly2_dummy.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('poly2_dummy_angle', 'ACUTE : non 45 degree angle poly2_dummy')
logger.info('Executing rule metal1_dummy_OFFGRID')
metal1_dummy.ongrid(0.005).output('metal1_dummy_OFFGRID', 'OFFGRID : OFFGRID vertex on metal1_dummy')
metal1_dummy.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal1_dummy_angle', 'ACUTE : non 45 degree angle metal1_dummy')
logger.info('Executing rule metal2_dummy_OFFGRID')
metal2_dummy.ongrid(0.005).output('metal2_dummy_OFFGRID', 'OFFGRID : OFFGRID vertex on metal2_dummy')
metal2_dummy.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal2_dummy_angle', 'ACUTE : non 45 degree angle metal2_dummy')
if METAL_LEVEL == '3LM' || METAL_LEVEL == '4LM' || METAL_LEVEL == '5LM' || METAL_LEVEL == '6LM'
logger.info('Executing rule metal3_dummy_OFFGRID')
metal3_dummy.ongrid(0.005).output('metal3_dummy_OFFGRID', 'OFFGRID : OFFGRID vertex on metal3_dummy')
metal3_dummy.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal3_dummy_angle', 'ACUTE : non 45 degree angle metal3_dummy')
logger.info('Executing rule metal3_label_OFFGRID')
metal3_label.ongrid(0.005).output('metal3_label_OFFGRID', 'OFFGRID : OFFGRID vertex on metal3_label')
metal3_label.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal3_label_angle', 'ACUTE : non 45 degree angle metal3_label')
logger.info('Executing rule metal3_blk_OFFGRID')
metal3_blk.ongrid(0.005).output('metal3_blk_OFFGRID', 'OFFGRID : OFFGRID vertex on metal3_blk')
metal3_blk.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal3_blk_angle', 'ACUTE : non 45 degree angle metal3_blk')
if METAL_LEVEL == '4LM' || METAL_LEVEL == '5LM' || METAL_LEVEL == '6LM'
logger.info('Executing rule metal4_dummy_OFFGRID')
metal4_dummy.ongrid(0.005).output('metal4_dummy_OFFGRID', 'OFFGRID : OFFGRID vertex on metal4_dummy')
metal4_dummy.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal4_dummy_angle', 'ACUTE : non 45 degree angle metal4_dummy')
logger.info('Executing rule metal4_label_OFFGRID')
metal4_label.ongrid(0.005).output('metal4_label_OFFGRID', 'OFFGRID : OFFGRID vertex on metal4_label')
metal4_label.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal4_label_angle', 'ACUTE : non 45 degree angle metal4_label')
logger.info('Executing rule metal4_blk_OFFGRID')
metal4_blk.ongrid(0.005).output('metal4_blk_OFFGRID', 'OFFGRID : OFFGRID vertex on metal4_blk')
metal4_blk.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal4_blk_angle', 'ACUTE : non 45 degree angle metal4_blk')
if METAL_LEVEL == '5LM' || METAL_LEVEL == '6LM'
logger.info('Executing rule metal5_dummy_OFFGRID')
metal5_dummy.ongrid(0.005).output('metal5_dummy_OFFGRID', 'OFFGRID : OFFGRID vertex on metal5_dummy')
metal5_dummy.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal5_dummy_angle', 'ACUTE : non 45 degree angle metal5_dummy')
logger.info('Executing rule metal5_label_OFFGRID')
metal5_label.ongrid(0.005).output('metal5_label_OFFGRID', 'OFFGRID : OFFGRID vertex on metal5_label')
metal5_label.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal5_label_angle', 'ACUTE : non 45 degree angle metal5_label')
logger.info('Executing rule metal5_blk_OFFGRID')
metal5_blk.ongrid(0.005).output('metal5_blk_OFFGRID', 'OFFGRID : OFFGRID vertex on metal5_blk')
metal5_blk.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal5_blk_angle', 'ACUTE : non 45 degree angle metal5_blk')
if METAL_LEVEL == '6LM'
logger.info('Executing rule metaltop_dummy_OFFGRID')
metaltop_dummy.ongrid(0.005).output('metaltop_dummy_OFFGRID', 'OFFGRID : OFFGRID vertex on metaltop_dummy')
metaltop_dummy.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metaltop_dummy_angle', 'ACUTE : non 45 degree angle metaltop_dummy')
logger.info('Executing rule metaltop_label_OFFGRID')
metaltop_label.ongrid(0.005).output('metaltop_label_OFFGRID', 'OFFGRID : OFFGRID vertex on metaltop_label')
metaltop_label.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metaltop_label_angle', 'ACUTE : non 45 degree angle metaltop_label')
logger.info('Executing rule metaltop_blk_OFFGRID')
metalt_blk.ongrid(0.005).output('metaltop_blk_OFFGRID', 'OFFGRID : OFFGRID vertex on metalt_blk')
metalt_blk.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metaltop_blk_angle', 'ACUTE : non 45 degree angle metalt_blk')
end
end
end
end
logger.info('Executing rule comp_label_OFFGRID')
comp_label.ongrid(0.005).output('comp_label_OFFGRID', 'OFFGRID : OFFGRID vertex on comp_label')
comp_label.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('comp_label_angle', 'ACUTE : non 45 degree angle comp_label')
logger.info('Executing rule poly2_label_OFFGRID')
poly2_label.ongrid(0.005).output('poly2_label_OFFGRID', 'OFFGRID : OFFGRID vertex on poly2_label')
poly2_label.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('poly2_label_angle', 'ACUTE : non 45 degree angle poly2_label')
logger.info('Executing rule metal1_label_OFFGRID')
metal1_label.ongrid(0.005).output('metal1_label_OFFGRID', 'OFFGRID : OFFGRID vertex on metal1_label')
metal1_label.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal1_label_angle', 'ACUTE : non 45 degree angle metal1_label')
logger.info('Executing rule metal2_label_OFFGRID')
metal2_label.ongrid(0.005).output('metal2_label_OFFGRID', 'OFFGRID : OFFGRID vertex on metal2_label')
metal2_label.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal2_label_angle', 'ACUTE : non 45 degree angle metal2_label')
logger.info('Executing rule metalrdl_label_OFFGRID')
metalrdl_label.ongrid(0.005).output('metalrdl_label_OFFGRID', 'OFFGRID : OFFGRID vertex on metalrdl_label')
metalrdl_label.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metalrdl_label_angle', 'ACUTE : non 45 degree angle metalrdl_label')
logger.info('Executing rule pad_label_OFFGRID')
pad_label.ongrid(0.005).output('pad_label_OFFGRID', 'OFFGRID : OFFGRID vertex on pad_label')
pad_label.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('pad_label_angle', 'ACUTE : non 45 degree angle pad_label')
logger.info('Executing rule ubmpperi_OFFGRID')
ubmpperi.ongrid(0.005).output('ubmpperi_OFFGRID', 'OFFGRID : OFFGRID vertex on ubmpperi')
ubmpperi.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('ubmpperi_angle', 'ACUTE : non 45 degree angle ubmpperi')
logger.info('Executing rule ubmparray_OFFGRID')
ubmparray.ongrid(0.005).output('ubmparray_OFFGRID', 'OFFGRID : OFFGRID vertex on ubmparray')
ubmparray.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('ubmparray_angle', 'ACUTE : non 45 degree angle ubmparray')
logger.info('Executing rule ubmeplate_OFFGRID')
ubmeplate.ongrid(0.005).output('ubmeplate_OFFGRID', 'OFFGRID : OFFGRID vertex on ubmeplate')
ubmeplate.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('ubmeplate_angle', 'ACUTE : non 45 degree angle ubmeplate')
logger.info('Executing rule res_mk_OFFGRID')
res_mk.ongrid(0.005).output('res_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on res_mk')
res_mk.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('res_mk_angle', 'ACUTE : non 45 degree angle res_mk')
logger.info('Executing rule ndmy_OFFGRID')
ndmy.ongrid(0.005).output('ndmy_OFFGRID', 'OFFGRID : OFFGRID vertex on ndmy')
ndmy.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('ndmy_angle', 'ACUTE : non 45 degree angle ndmy')
logger.info('Executing rule ind_mk_OFFGRID')
ind_mk.ongrid(0.005).output('ind_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on ind_mk')
ind_mk.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('ind_mk_angle', 'ACUTE : non 45 degree angle ind_mk')
logger.info('Executing rule lvs_cap_OFFGRID')
lvs_cap.ongrid(0.005).output('lvs_cap_OFFGRID', 'OFFGRID : OFFGRID vertex on lvs_cap')
lvs_cap.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('lvs_cap_angle', 'ACUTE : non 45 degree angle lvs_cap')
logger.info('Executing rule viardl_OFFGRID')
viardl.ongrid(0.005).output('viardl_OFFGRID', 'OFFGRID : OFFGRID vertex on viardl')
viardl.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('viardl_angle', 'ACUTE : non 45 degree angle viardl')
logger.info('Executing rule metalrdl_OFFGRID')
metalrdl.ongrid(0.005).output('metalrdl_OFFGRID', 'OFFGRID : OFFGRID vertex on metalrdl')
metalrdl.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metalrdl_angle', 'ACUTE : non 45 degree angle metalrdl')
logger.info('Executing rule diode_mk_OFFGRID')
diode_mk.ongrid(0.005).output('diode_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on diode_mk')
diode_mk.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('diode_mk_angle', 'ACUTE : non 45 degree angle diode_mk')
logger.info('Executing rule lvs_bjt_OFFGRID')
lvs_bjt.ongrid(0.005).output('lvs_bjt_OFFGRID', 'OFFGRID : OFFGRID vertex on lvs_bjt')
lvs_bjt.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('lvs_bjt_angle', 'ACUTE : non 45 degree angle lvs_bjt')
logger.info('Executing rule res_mk_type1_OFFGRID')
res_mk_type1.ongrid(0.005).output('res_mk_type1_OFFGRID', 'OFFGRID : OFFGRID vertex on res_mk_type1')
res_mk_type1.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('res_mk_type1_angle', 'ACUTE : non 45 degree angle res_mk_type1')
logger.info('Executing rule guard_ring_mk_OFFGRID')
guard_ring_mk.ongrid(0.005).output('guard_ring_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on guard_ring_mk')
guard_ring_mk.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('guard_ring_mk_angle', 'ACUTE : non 45 degree angle guard_ring_mk')
logger.info('Executing rule sramcore_OFFGRID')
sramcore.ongrid(0.005).output('sramcore_OFFGRID', 'OFFGRID : OFFGRID vertex on sramcore')
sramcore.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('sramcore_angle', 'ACUTE : non 45 degree angle sramcore')
logger.info('Executing rule sramcore_OFFGRID')
sramcore.ongrid(0.005).output('sramcore_OFFGRID', 'OFFGRID : OFFGRID vertex on sramcore')
sramcore.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('sramcore_angle', 'ACUTE : non 45 degree angle sramcore')
logger.info('Executing rule sramcore_OFFGRID')
sramcore.ongrid(0.005).output('sramcore_OFFGRID', 'OFFGRID : OFFGRID vertex on sramcore')
sramcore.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('sramcore_angle', 'ACUTE : non 45 degree angle sramcore')
logger.info('Executing rule sramcore_OFFGRID')
sramcore.ongrid(0.005).output('sramcore_OFFGRID', 'OFFGRID : OFFGRID vertex on sramcore')
sramcore.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('sramcore_angle', 'ACUTE : non 45 degree angle sramcore')
logger.info('Executing rule sramcore_OFFGRID')
sramcore.ongrid(0.005).output('sramcore_OFFGRID', 'OFFGRID : OFFGRID vertex on sramcore')
sramcore.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('sramcore_angle', 'ACUTE : non 45 degree angle sramcore')
logger.info('Executing rule lvs_rf_OFFGRID')
lvs_rf.ongrid(0.005).output('lvs_rf_OFFGRID', 'OFFGRID : OFFGRID vertex on lvs_rf')
lvs_rf.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('lvs_rf_angle', 'ACUTE : non 45 degree angle lvs_rf')
logger.info('Executing rule lvs_drain_OFFGRID')
lvs_drain.ongrid(0.005).output('lvs_drain_OFFGRID', 'OFFGRID : OFFGRID vertex on lvs_drain')
lvs_drain.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('lvs_drain_angle', 'ACUTE : non 45 degree angle lvs_drain')
logger.info('Executing rule ind_mk_OFFGRID')
ind_mk.ongrid(0.005).output('ind_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on ind_mk')
ind_mk.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('ind_mk_angle', 'ACUTE : non 45 degree angle ind_mk')
logger.info('Executing rule lvs_io_OFFGRID')
lvs_io.ongrid(0.005).output('lvs_io_OFFGRID', 'OFFGRID : OFFGRID vertex on lvs_io')
lvs_io.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('lvs_io_angle', 'ACUTE : non 45 degree angle lvs_io')
logger.info('Executing rule probe_mk_OFFGRID')
probe_mk.ongrid(0.005).output('probe_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on probe_mk')
probe_mk.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('probe_mk_angle', 'ACUTE : non 45 degree angle probe_mk')
logger.info('Executing rule lvs_source_OFFGRID')
lvs_source.ongrid(0.005).output('lvs_source_OFFGRID', 'OFFGRID : OFFGRID vertex on lvs_source')
lvs_source.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('lvs_source_angle', 'ACUTE : non 45 degree angle lvs_source')
logger.info('Executing rule well_diode_mk_OFFGRID')
well_diode_mk.ongrid(0.005).output('well_diode_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on well_diode_mk')
well_diode_mk.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('well_diode_mk_angle', 'ACUTE : non 45 degree angle well_diode_mk')
logger.info('Executing rule plfuse_OFFGRID')
plfuse.ongrid(0.005).output('plfuse_OFFGRID', 'OFFGRID : OFFGRID vertex on plfuse')
plfuse.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('plfuse_angle', 'ACUTE : non 45 degree angle plfuse')
logger.info('Executing rule efuse_mk_OFFGRID')
efuse_mk.ongrid(0.005).output('efuse_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on efuse_mk')
efuse_mk.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('efuse_mk_angle', 'ACUTE : non 45 degree angle efuse_mk')
logger.info('Executing rule mcell_feol_mk_OFFGRID')
mcell_feol_mk.ongrid(0.005).output('mcell_feol_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on mcell_feol_mk')
mcell_feol_mk.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('mcell_feol_mk_angle', 'ACUTE : non 45 degree angle mcell_feol_mk')
logger.info('Executing rule metal1_blk_OFFGRID')
metal1_blk.ongrid(0.005).output('metal1_blk_OFFGRID', 'OFFGRID : OFFGRID vertex on metal1_blk')
metal1_blk.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal1_blk_angle', 'ACUTE : non 45 degree angle metal1_blk')
logger.info('Executing rule metal2_blk_OFFGRID')
metal2_blk.ongrid(0.005).output('metal2_blk_OFFGRID', 'OFFGRID : OFFGRID vertex on metal2_blk')
metal2_blk.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('metal2_blk_angle', 'ACUTE : non 45 degree angle metal2_blk')
logger.info('Executing rule pr_bndry_OFFGRID')
pr_bndry.ongrid(0.005).output('pr_bndry_OFFGRID', 'OFFGRID : OFFGRID vertex on pr_bndry')
pr_bndry.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('pr_bndry_angle', 'ACUTE : non 45 degree angle pr_bndry')
logger.info('Executing rule mdiode_OFFGRID')
mdiode.ongrid(0.005).output('mdiode_OFFGRID', 'OFFGRID : OFFGRID vertex on mdiode')
mdiode.edges.without_angle(0).without_angle(-45).without_angle(45).without_angle(90).output('mdiode_angle', 'ACUTE : non 45 degree angle mdiode')
end #OFFGRID-ANGLES