Rigid Diaphragm error in modal analysis

Forum for asking and answering questions related to use of the OpenSeesPy module

Moderators: silvia, selimgunay, Moderators

Post Reply
SaeedT
Posts: 7
Joined: Fri Dec 03, 2021 3:59 pm

Rigid Diaphragm error in modal analysis

Post by SaeedT » Sat Aug 26, 2023 3:21 pm

Hello Everyone,

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

And this is the data when the rigid diaphragm is included. Mass definition is taken from Etabs and includes the roational mass for the entire plate.

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) 

Post Reply