The following data represents a very simple frame: it consists of 4 columns and 4 beams, with a diagonal stretching from one corner to another horizontally to approximate a diaphragm. The top 4 nodes are restrained against displacement in the Y-direction. When analyzing the frame for its modal response, the analysis proceeds smoothly and provides a reasonable period. However, as soon as I add a rigid diaphragm, the analysis fails to complete.
I'm certain that rigid diaphragms have been used extensively, so I suspect that something is amiss with my data setup, though I can't pinpoint what it is. Any hints to identify the error would be appreciated. Note that I haven't included the standard input for the modal analysis here; you can use any analysis setup you prefer.
Here's the portion of the script without the rigid diaphragm:
Code: Select all
def nodes():
os.node(27, 0, 0, 215.984, '-mass', 0.237545, 0.237545, 0.237545, 0, 0, 0)
os.node(25, 0, 360, 215.984, '-mass', 0.298616, 0.298616, 0.298616, 0, 0, 0)
os.node(23, 288, 0, 215.984, '-mass', 0.280315, 0.280315, 0.280315, 0, 0, 0)
os.node(21, 288, 360, 215.984, '-mass', 0.241083, 0.241083, 0.241083, 0, 0, 0)
os.node(7, 0, 0, 0, '-mass', 0.004496, 0.004496, 0.004496, 0, 0, 0)
os.node(5, 288, 0, 0, '-mass', 0.004496, 0.004496, 0.004496, 0, 0, 0)
os.node(3, 0, 360, 0, '-mass', 0.004496, 0.004496, 0.004496, 0, 0, 0)
os.node(1, 288, 360, 0, '-mass', 0.004496, 0.004496, 0.004496, 0, 0, 0)
def fix_commands():
os.fix(27, 0, 0, 0, 0, 0, 0)
os.fix(25, 0, 0, 0, 0, 0, 0)
os.fix(23, 0, 0, 0, 0, 0, 0)
os.fix(21, 0, 0, 0, 0, 0, 0)
os.fix(7, 1, 1, 1, 0, 0, 0)
os.fix(5, 1, 1, 1, 0, 0, 0)
os.fix(3, 1, 1, 1, 0, 0, 0)
os.fix(1, 1, 1, 1, 0, 0, 0)
def transformations():
os.geomTransf('Linear', 1, 0, -1, 0)
os.geomTransf('Linear', 2, 0, -1, 0)
os.geomTransf('Linear', 3, -0.78086880944303, -0.624695047554424, 0)
os.geomTransf('Linear', 4, 1, -0, 0)
os.geomTransf('Linear', 5, -1, 0, 0)
def frame_sections():
# this was a originally a big model but now only a few of the following sections are used in the shortened model.
os.section('Elastic', 1, 29000, 61.8, 2140, 664, 11154, 64.7, 17.3, 48.6)
os.section('Elastic', 2, 29000, 32, 1240, 447, 11154, 7.1, 7.5, 25.1)
os.section('Elastic', 3, 29000, 46.7, 1900, 748, 11154, 19.7, 11.2, 37.1)
os.section('Elastic', 4, 29000, 56.8, 2400, 931, 11154, 34.8, 13.8, 45.2)
os.section('Elastic', 5, 29000, 46.3, 3060, 347, 11154, 25.2, 16, 32.5)
os.section('Elastic', 6, 29000, 13, 843, 21, 11154, 0.8, 7.2, 5.9)
os.section('Elastic', 7, 29000, 22.4, 2100, 82, 11154, 2.7, 10.5, 12.2)
os.section('Elastic', 8, 29000, 27.6, 3270, 124, 11154, 4, 13.2, 14.9)
os.section('Elastic', 9, 29000, 29, 3990, 128, 11154, 3.8, 15.4, 14.1)
os.section('Elastic', 10, 29000, 26, 534, 179, 11154, 7.5, 6.5, 20.4)
os.section('Elastic', 11, 29000, 29.3, 623, 207, 11154, 10.9, 7.5, 23.1)
os.section('Elastic', 12, 29000, 32.9, 716, 236, 11154, 15.1, 8.6, 26)
os.section('Elastic', 13, 29000, 20.9, 457, 457, 11154, 728, 8.6, 26)
def line_elements():
# Format: os.element('elasticBeamColumn', eleTag, *eleNodes, secTag, transfTag, <'-releasey', releaseCode>, <'-releasez', releaseCode>)
os.element('elasticBeamColumn', 3, 27, 23, 9, 2) # Story1, B7
os.element('elasticBeamColumn', 8, 25, 21, 9, 2) # Story1, B12
os.element('elasticBeamColumn', 9, 25, 23, 13, 3) # Story1, B46
os.element('elasticBeamColumn', 4, 27, 25, 6, 4) # Story1, B37
os.element('elasticBeamColumn', 5, 23, 21, 6, 4) # Story1, B42
os.element('elasticBeamColumn', 1, 7, 27, 4, 5) # Story1, C2
os.element('elasticBeamColumn', 2, 5, 23, 4, 5) # Story1, C14
os.element('elasticBeamColumn', 6, 3, 25, 4, 5) # Story1, C10
os.element('elasticBeamColumn', 7, 1, 21, 4, 5) # Story1, C15
Code: Select all
def nodes():
os.node(29, 141.99, 183.717, 216, '-mass', 1.057558, 1.057558, 0, 0, 0, 56175.525)
os.node(27, 0, 0, 215.984, '-mass', 0, 0, 0.237545, 0, 0, 0)
os.node(25, 0, 360, 215.984, '-mass', 0, 0, 0.298616, 0, 0, 0)
os.node(23, 288, 0, 215.984, '-mass', 0, 0, 0.280315, 0, 0, 0)
os.node(21, 288, 360, 215.984, '-mass', 0, 0, 0.241083, 0, 0, 0)
os.node(7, 0, 0, 0, '-mass', 0.004496, 0.004496, 0.004496, 0, 0, 0)
os.node(5, 288, 0, 0, '-mass', 0.004496, 0.004496, 0.004496, 0, 0, 0)
os.node(3, 0, 360, 0, '-mass', 0.004496, 0.004496, 0.004496, 0, 0, 0)
os.node(1, 288, 360, 0, '-mass', 0.004496, 0.004496, 0.004496, 0, 0, 0)
def fix_commands():
os.fix(27, 0, 1, 0, 0, 0, 0)
os.fix(25, 0, 1, 0, 0, 0, 0)
os.fix(23, 0, 1, 0, 0, 0, 0)
os.fix(21, 0, 1, 0, 0, 0, 0)
os.fix(7, 1, 1, 1, 0, 0, 0)
os.fix(5, 1, 1, 1, 0, 0, 0)
os.fix(3, 1, 1, 1, 0, 0, 0)
os.fix(1, 1, 1, 1, 0, 0, 0)
def diaph_fixities():
os.rigidDiaphragm(3, 29, 21, 23, 25, 27 )
def master_node_fixities():
os.fix(29, 0, 0, 1, 1, 1, 0)
def transformations():
os.geomTransf('Linear', 1, 0, -1, 0)
os.geomTransf('Linear', 2, 0, -1, 0)
os.geomTransf('Linear', 3, -0.78086880944303, -0.624695047554424, 0)
os.geomTransf('Linear', 4, 1, -0, 0)
os.geomTransf('Linear', 5, -1, 0, 0)
def frame_sections():
os.section('Elastic', 1, 29000, 61.8, 2140, 664, 11154, 64.7, 17.3, 48.6)
os.section('Elastic', 2, 29000, 32, 1240, 447, 11154, 7.1, 7.5, 25.1)
os.section('Elastic', 3, 29000, 46.7, 1900, 748, 11154, 19.7, 11.2, 37.1)
os.section('Elastic', 4, 29000, 56.8, 2400, 931, 11154, 34.8, 13.8, 45.2)
os.section('Elastic', 5, 29000, 46.3, 3060, 347, 11154, 25.2, 16, 32.5)
os.section('Elastic', 6, 29000, 13, 843, 21, 11154, 0.8, 7.2, 5.9)
os.section('Elastic', 7, 29000, 22.4, 2100, 82, 11154, 2.7, 10.5, 12.2)
os.section('Elastic', 8, 29000, 27.6, 3270, 124, 11154, 4, 13.2, 14.9)
os.section('Elastic', 9, 29000, 29, 3990, 128, 11154, 3.8, 15.4, 14.1)
os.section('Elastic', 10, 29000, 26, 534, 179, 11154, 7.5, 6.5, 20.4)
os.section('Elastic', 11, 29000, 29.3, 623, 207, 11154, 10.9, 7.5, 23.1)
os.section('Elastic', 12, 29000, 32.9, 716, 236, 11154, 15.1, 8.6, 26)
os.section('Elastic', 13, 29000, 20.9, 457, 457, 11154, 728, 8.6, 26)
def line_elements():
os.element('elasticBeamColumn', 3, 27, 23, 9, 2)
os.element('elasticBeamColumn', 8, 25, 21, 9, 2)
os.element('elasticBeamColumn', 9, 25, 23, 13, 3)
os.element('elasticBeamColumn', 4, 27, 25, 6, 4)
os.element('elasticBeamColumn', 5, 23, 21, 6, 4)
os.element('elasticBeamColumn', 1, 7, 27, 4, 5)
os.element('elasticBeamColumn', 2, 5, 23, 4, 5)
os.element('elasticBeamColumn', 6, 3, 25, 4, 5)
os.element('elasticBeamColumn', 7, 1, 21, 4, 5)