blob: d5f1e61d867c810ac668c83fdcbc7a3a46f8877c [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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).output('nwell_angle', 'ACUTE : non 45 degree angle nwell')
logger.info('Executing rule lvpwell_OFFGRID')
lvpwell.ongrid(0.005).output('lvpwell_OFFGRID', 'OFFGRID : OFFGRID vertex on lvpwell')
lvpwell.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('lvpwell_angle', 'ACUTE : non 45 degree angle lvpwell')
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(90).without_angle(-45).output('dualgate_angle', 'ACUTE : non 45 degree angle dualgate')
logger.info('Executing rule dualgate_2_OFFGRID')
dualgate_2.ongrid(0.005).output('dualgate_2_OFFGRID', 'OFFGRID : OFFGRID vertex on dualgate_2')
dualgate_2.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('dualgate_2_angle', 'ACUTE : non 45 degree angle dualgate_2')
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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).output('metaltop_angle', 'ACUTE : non 45 degree angle metaltop')
end
end
end
end
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(90).without_angle(-45).output('probe_mk_angle', 'ACUTE : non 45 degree angle probe_mk')
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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).output('piscap_angle', 'ACUTE : non 45 degree angle piscap')
logger.info('Executing rule fhres_OFFGRID')
fhres.ongrid(0.005).output('fhres_OFFGRID', 'OFFGRID : OFFGRID vertex on fhres')
fhres.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('fhres_angle', 'ACUTE : non 45 degree angle fhres')
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(90).without_angle(-45).output('fusetop_angle', 'ACUTE : non 45 degree angle fusetop')
logger.info('Executing rule fusewindow_d_OFFGRID')
fusewindow_d.ongrid(0.005).output('fusewindow_d_OFFGRID', 'OFFGRID : OFFGRID vertex on fusewindow_d')
fusewindow_d.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('fusewindow_d_angle', 'ACUTE : non 45 degree angle fusewindow_d')
logger.info('Executing rule polyfuse_OFFGRID')
polyfuse.ongrid(0.005).output('polyfuse_OFFGRID', 'OFFGRID : OFFGRID vertex on polyfuse')
polyfuse.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('polyfuse_angle', 'ACUTE : non 45 degree angle polyfuse')
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(90).without_angle(-45).output('nat_angle', 'ACUTE : non 45 degree angle nat')
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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).output('metaltop_label_angle', 'ACUTE : non 45 degree angle metaltop_label')
logger.info('Executing rule metaltop_blk_OFFGRID')
metaltop_blk.ongrid(0.005).output('metaltop_blk_OFFGRID', 'OFFGRID : OFFGRID vertex on metaltop_blk')
metaltop_blk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('metaltop_blk_angle', 'ACUTE : non 45 degree angle metalt_blk')
end
end
end
end
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(90).without_angle(-45).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(90).without_angle(-45).output('metal2_label_angle', 'ACUTE : non 45 degree angle metal2_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(90).without_angle(-45).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(90).without_angle(-45).output('ubmparray_angle', 'ACUTE : non 45 degree angle ubmparray')
logger.info('Executing rule ubmparray_label_OFFGRID')
ubmparray_label.ongrid(0.005).output('ubmparray_label_OFFGRID', 'OFFGRID : OFFGRID vertex on ubmparray_label')
ubmparray_label.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('ubmparray_label_angle', 'ACUTE : non 45 degree angle ubmparray_label')
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(90).without_angle(-45).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(90).without_angle(-45).output('res_mk_angle', 'ACUTE : non 45 degree angle res_mk')
logger.info('Executing rule opc_drc_OFFGRID')
opc_drc.ongrid(0.005).output('opc_drc_OFFGRID', 'OFFGRID : OFFGRID vertex on opc_drc')
opc_drc.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('opc_drc_angle', 'ACUTE : non 45 degree angle opc_drc')
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(90).without_angle(-45).output('ndmy_angle', 'ACUTE : non 45 degree angle ndmy')
logger.info('Executing rule pmndmy_OFFGRID')
pmndmy.ongrid(0.005).output('pmndmy_OFFGRID', 'OFFGRID : OFFGRID vertex on pmndmy')
pmndmy.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('pmndmy_angle', 'ACUTE : non 45 degree angle pmndmy')
logger.info('Executing rule v5_xtor_OFFGRID')
v5_xtor.ongrid(0.005).output('v5_xtor_OFFGRID', 'OFFGRID : OFFGRID vertex on v5_xtor')
v5_xtor.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('v5_xtor_angle', 'ACUTE : non 45 degree angle v5_xtor')
logger.info('Executing rule cap_mk_OFFGRID')
cap_mk.ongrid(0.005).output('cap_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on cap_mk')
cap_mk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('cap_mk_angle', 'ACUTE : non 45 degree angle cap_mk')
logger.info('Executing rule mos_cap_mk_OFFGRID')
mos_cap_mk.ongrid(0.005).output('mos_cap_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on mos_cap_mk')
mos_cap_mk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('mos_cap_mk_angle', 'ACUTE : non 45 degree angle mos_cap_mk')
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(90).without_angle(-45).output('diode_mk_angle', 'ACUTE : non 45 degree angle diode_mk')
logger.info('Executing rule drc_bjt_OFFGRID')
drc_bjt.ongrid(0.005).output('drc_bjt_OFFGRID', 'OFFGRID : OFFGRID vertex on drc_bjt')
drc_bjt.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('drc_bjt_angle', 'ACUTE : non 45 degree angle drc_bjt')
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(90).without_angle(-45).output('lvs_bjt_angle', 'ACUTE : non 45 degree angle lvs_bjt')
logger.info('Executing rule mim_l_mk_OFFGRID')
mim_l_mk.ongrid(0.005).output('mim_l_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on mim_l_mk')
mim_l_mk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('mim_l_mk_angle', 'ACUTE : non 45 degree angle mim_l_mk')
logger.info('Executing rule latchup_mk_OFFGRID')
latchup_mk.ongrid(0.005).output('latchup_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on latchup_mk')
latchup_mk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('latchup_mk_angle', 'ACUTE : non 45 degree angle latchup_mk')
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(90).without_angle(-45).output('guard_ring_mk_angle', 'ACUTE : non 45 degree angle guard_ring_mk')
logger.info('Executing rule otp_mk_OFFGRID')
otp_mk.ongrid(0.005).output('otp_mk_OFFGRID', 'OFFGRID : OFFGRID vertex on otp_mk')
otp_mk.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('otp_mk_angle', 'ACUTE : non 45 degree angle otp_mk')
logger.info('Executing rule mtpmark_OFFGRID')
mtpmark.ongrid(0.005).output('mtpmark_OFFGRID', 'OFFGRID : OFFGRID vertex on mtpmark')
mtpmark.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('mtpmark_angle', 'ACUTE : non 45 degree angle mtpmark')
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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).output('ind_mk_angle', 'ACUTE : non 45 degree angle ind_mk')
logger.info('Executing rule hvpolyrs_OFFGRID')
hvpolyrs.ongrid(0.005).output('hvpolyrs_OFFGRID', 'OFFGRID : OFFGRID vertex on hvpolyrs')
hvpolyrs.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('hvpolyrs_angle', 'ACUTE : non 45 degree angle hvpolyrs')
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(90).without_angle(-45).output('lvs_io_angle', 'ACUTE : non 45 degree angle lvs_io')
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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).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(90).without_angle(-45).output('mdiode_angle', 'ACUTE : non 45 degree angle mdiode')
logger.info('Executing rule border_OFFGRID')
border.ongrid(0.005).output('border_OFFGRID', 'OFFGRID : OFFGRID vertex on border')
border.edges.without_angle(0).without_angle(45).without_angle(90).without_angle(-45).output('border_angle', 'ACUTE : non 45 degree angle border')
end #OFFGRID-ANGLES