"""Unlinks up the various cards in the BDF."""
from __future__ import print_function
from typing import List, Dict, Any
from six import itervalues
from pyNastran.bdf.bdf_interface.safe_cross_reference import SafeXrefMesh
class UnXrefMesh(SafeXrefMesh):
"""
Unlinks up the various cards in the BDF.
"""
def __init__(self):
# type: () -> None
"""
The main BDF class defines all the parameters that are used.
"""
SafeXrefMesh.__init__(self)
def uncross_reference(self, word=''):
# type: (str) -> None
"""uncross references the model"""
self.log.debug("Uncross Referencing%s..." % word)
self._uncross_reference_nodes()
self._uncross_reference_coords()
self._uncross_reference_elements()
self._uncross_reference_properties()
self._uncross_reference_materials()
self._uncross_reference_masses()
self._uncross_reference_aero()
self._uncross_reference_constraints()
self._uncross_reference_loads()
self._uncross_reference_sets()
self._uncross_reference_optimization()
self._uncross_reference_contact()
self._uncross_reference_superelements()
for super_id, superelement in sorted(self.superelement_models.items()):
superelement.uncross_reference(word=' (Superelement %i)' % super_id)
def _uncross_reference_nodes(self):
# type: () -> None
"""uncross references the GRID objects"""
for node in itervalues(self.nodes):
node.uncross_reference()
for point in self.points.values():
point.uncross_reference()
def _uncross_reference_coords(self):
# type: () -> None
"""uncross references the CORDx objects"""
for cid, coord in self.coords.items():
if cid == 0:
continue
coord.uncross_reference()
def _uncross_reference_elements(self):
# type: () -> None
"""uncross references the element objects"""
for element in itervalues(self.elements):
try:
element.uncross_reference()
except TypeError:
raise NotImplementedError('%s.uncross_reference' % element.type)
except AttributeError:
print(element)
raise
for element in self.masses.values():
element.uncross_reference()
for element in self.rigid_elements.values():
element.uncross_reference()
for element in self.plotels.values():
element.uncross_reference()
def _uncross_reference_properties(self):
# type: () -> None
"""uncross references the property objects"""
for prop in self.properties.values():
try:
prop.uncross_reference()
#except TypeError:
#raise NotImplementedError('%s.uncross_reference' % prop.type)
except AttributeError:
print(prop)
print('%s.uncross_reference error' % prop.type)
raise
def _uncross_reference_materials(self):
# type: () -> None
"""uncross references the material objects"""
try:
for material in self.materials.values():
material.uncross_reference()
except AttributeError:
print(material)
raise
try:
for material in self.creep_materials.values():
material.uncross_reference()
except AttributeError:
print(material)
raise
data = [self.MATS1, self.MATS3, self.MATS8,
self.MATT1, self.MATT2, self.MATT3, self.MATT4, self.MATT5,
self.MATT8, self.MATT9]
for material_deps in data:
for mat in material_deps.values():
try:
mat.uncross_reference()
except AttributeError:
print(mat)
raise
def _uncross_reference_masses(self):
# type: () -> None
"""uncross references the mass objects"""
for mass in self.masses.values():
mass.uncross_reference()
for prop in self.properties_mass.values():
prop.uncross_reference()
def _uncross_reference_aero(self):
# type: () -> None
"""uncross references the aero objects"""
for caero in self.caeros.values():
caero.uncross_reference()
for paero in self.paeros.values():
paero.uncross_reference()
for trim in self.trims.values():
trim.uncross_reference()
for csschd in self.csschds.values():
csschd.uncross_reference()
for spline in self.splines.values():
spline.uncross_reference()
for aecomp in self.aecomps.values():
aecomp.uncross_reference()
for aelist in self.aelists.values():
aelist.uncross_reference()
for aeparam in self.aeparams.values():
aeparam.uncross_reference()
for trim in self.trims.values():
trim.uncross_reference()
for csschd in self.csschds.values():
csschd.uncross_reference()
#for aestat in self.aestats.values():
#aestat.uncross_reference()
for aesurf in self.aesurf.values():
aesurf.uncross_reference()
for aesurfs in self.aesurfs.values():
aesurfs.uncross_reference()
for flutter in self.flutters.values():
flutter.uncross_reference()
for monitor_point in self.monitor_points:
monitor_point.uncross_reference()
if self.aero:
self.aero.uncross_reference()
if self.aeros:
self.aeros.uncross_reference()
def _uncross_reference_constraints(self):
# type: () -> None
"""
Unlinks the SPCADD, SPC, SPCAX, SPCD, MPCADD, MPC, SUPORT,
SUPORT1, SESUPORT cards.
"""
for spcadds in self.spcadds.values():
for spcadd in spcadds:
spcadd.uncross_reference()
for spc in self.spcs.values():
for spci in spc:
spci.uncross_reference()
for spcoffs in self.spcoffs.values():
for spcoff in spcoffs:
spcoff.uncross_reference()
for mpcadds in self.mpcadds.values():
for mpcadd in mpcadds:
mpcadd.uncross_reference()
for mpc in self.mpcs.values():
for mpci in mpc:
mpci.uncross_reference()
for suport in self.suport:
suport.uncross_reference()
for suport1 in self.suport1.values():
suport1.uncross_reference()
for se_suport in self.se_suport:
se_suport.uncross_reference()
def _uncross_reference_loads(self):
# type: () -> None
"""
Unlinks the LOAD
PLOAD1, PLOAD2, PLOAD4
FORCE, FORCE1, FORCE2
MOMENT, MOMENT1, MOMENT2
DLOAD, ACSRCE, RLOAD1, RLOAD2, TLOAD1, TLOAD2
DPHASE, DAREA
TEMP
"""
for (unused_lid, load_combinations) in self.load_combinations.items():
for load_combination in load_combinations:
load_combination.uncross_reference()
for (unused_lid, loads) in self.loads.items():
for load in loads:
load.uncross_reference()
for (unused_lid, dloads) in self.dloads.items():
for dload in dloads:
dload.uncross_reference()
for (unused_lid, dload_entries) in self.dload_entries.items():
for dload_entry in dload_entries:
dload_entry.uncross_reference()
for unused_key, darea in self.dareas.items():
darea.uncross_reference()
for unused_key, dphase in self.dphases.items():
dphase.uncross_reference()
for unused_key, tic in self.tics.items():
tic.uncross_reference()
def _uncross_reference_sets(self):
# type: () -> None
"""uncross references the set objects"""
for set_obj in self.asets:
set_obj.uncross_reference()
for set_obj in self.omits:
set_obj.uncross_reference()
for set_obj in self.bsets:
set_obj.uncross_reference()
for set_obj in self.csets:
set_obj.uncross_reference()
for set_obj in self.qsets:
set_obj.uncross_reference()
for unused_name, set_objs in self.usets.items():
for set_obj in set_objs:
set_obj.uncross_reference()
# superelements
for unused_key, set_obj in self.se_sets.items():
set_obj.uncross_reference()
for set_obj in self.se_bsets:
set_obj.uncross_reference()
for set_obj in self.se_csets:
set_obj.uncross_reference()
for set_obj in self.se_qsets:
set_obj.uncross_reference()
for set_obj in self.se_usets:
set_obj.uncross_reference()
def _uncross_reference_optimization(self):
# type: () -> None
"""uncross references the optimization objects"""
for unused_key, deqatn in self.dequations.items():
deqatn.uncross_reference()
for unused_key, dresp in self.dresps.items():
dresp.uncross_reference()
for unused_key, dconstrs in self.dconstrs.items():
for dconstr in dconstrs:
dconstr.uncross_reference()
for unused_key, dvcrel in self.dvcrels.items():
dvcrel.uncross_reference()
for unused_key, dvmrel in self.dvmrels.items():
dvmrel.uncross_reference()
for unused_key, dvprel in self.dvprels.items():
dvprel.uncross_reference()
for unused_key, desvar in self.desvars.items():
desvar.uncross_reference()