Module earthquakepy.opensees_classes
Expand source code
import numpy as np
import json
class OpenSeesNodeOutput:
def __init__(self, filename, ncomps, nodeTags=[], compNames=[], **kwargs):
"""
Read opensees generated node output file.
Parameters
----------
filename: (string) Node output filename
ncomps: (int) number of components per node
nodeTags: (list of int) Node tags, default=[1, 2, ...., N]. Note that default list starts from "1" for compatibility with opensees
compnames: (list of strings) Name to be given to each component. Default is ["0", "1", "2", "3", ...., "m"]
"""
with open(filename, "r") as f:
data = np.genfromtxt(filename)
nNodes = int((np.shape(data)[1] - 1) / ncomps)
if len(nodeTags) == 0:
nodeTags = [i + 1 for i in range(nNodes)]
elif len(nodeTags) != nNodes:
raise Exception("Length of nodeTags and number of nodes must be same")
if len(compNames) == 0:
compNames = ["{}".format(i) for i in range(ncomps)]
self.t = data[:, 0]
d = np.split(data[:, 1::], nNodes, axis=1)
dataDir = {}
for i in nodeTags:
dataDir[i] = {}
for j in range(ncomps):
dataDir[i][compNames[j]] = d[i - 1][:, j]
self.data = dataDir
self.nodeTags = nodeTags
self.compNames = compNames
def __repr__(self):
a = ""
for key, val in vars(self).items():
a += "{:10s}:\n".format(key)
return a
class OpenSeesModel:
def __init__(self, jsonModelFile):
"""
Class for storing OpenSees Model details recorded in a JSON file using command
<mark>print -JSON -file jsonModelFile</mark>
"""
self.jsonFile = jsonModelFile
# Parse JSON
self.json_parser()
def __repr__(self):
b = self.__str__()
return b
def __str__(self):
a = ""
for key, val in vars(self).items():
a += "{:10s}:\n".format(key)
return a
def json_parser(self):
# Read file
with open(self.jsonFile, "r") as f:
data = f.readlines()
nodes = {}
elements = {}
for line in data:
line = line.strip("\t|\n|,")
if ("name" in line) and ("crd" in line):
j = json.loads(line)
nodes = {**nodes, **{j["name"]: j["crd"]}}
elif ("name" in line) and ("nodes" in line):
j = json.loads(line)
elements = {
**elements,
**{
j["name"]: {
"type": j["type"],
"nodes": j["nodes"],
"material": j["material"],
}
},
}
self.nodes = nodes
self.elements = elements
Classes
class OpenSeesModel (jsonModelFile)
-
Class for storing OpenSees Model details recorded in a JSON file using command print -JSON -file jsonModelFile
Expand source code
class OpenSeesModel: def __init__(self, jsonModelFile): """ Class for storing OpenSees Model details recorded in a JSON file using command <mark>print -JSON -file jsonModelFile</mark> """ self.jsonFile = jsonModelFile # Parse JSON self.json_parser() def __repr__(self): b = self.__str__() return b def __str__(self): a = "" for key, val in vars(self).items(): a += "{:10s}:\n".format(key) return a def json_parser(self): # Read file with open(self.jsonFile, "r") as f: data = f.readlines() nodes = {} elements = {} for line in data: line = line.strip("\t|\n|,") if ("name" in line) and ("crd" in line): j = json.loads(line) nodes = {**nodes, **{j["name"]: j["crd"]}} elif ("name" in line) and ("nodes" in line): j = json.loads(line) elements = { **elements, **{ j["name"]: { "type": j["type"], "nodes": j["nodes"], "material": j["material"], } }, } self.nodes = nodes self.elements = elements
Methods
def json_parser(self)
-
Expand source code
def json_parser(self): # Read file with open(self.jsonFile, "r") as f: data = f.readlines() nodes = {} elements = {} for line in data: line = line.strip("\t|\n|,") if ("name" in line) and ("crd" in line): j = json.loads(line) nodes = {**nodes, **{j["name"]: j["crd"]}} elif ("name" in line) and ("nodes" in line): j = json.loads(line) elements = { **elements, **{ j["name"]: { "type": j["type"], "nodes": j["nodes"], "material": j["material"], } }, } self.nodes = nodes self.elements = elements
class OpenSeesNodeOutput (filename, ncomps, nodeTags=[], compNames=[], **kwargs)
-
Read opensees generated node output file.
Parameters
filename
:(string) Node output filename
ncomps
:(int) number
ofcomponents per node
nodeTags
:(list
ofint) Node tags
, default=[1, 2, ...., N]. Note that default list starts from "1" for compatibility with opensees
compnames
:(list
ofstrings) Name to be given to each component. Default is ["0", "1", "2", "3", ...., "m"]
Expand source code
class OpenSeesNodeOutput: def __init__(self, filename, ncomps, nodeTags=[], compNames=[], **kwargs): """ Read opensees generated node output file. Parameters ---------- filename: (string) Node output filename ncomps: (int) number of components per node nodeTags: (list of int) Node tags, default=[1, 2, ...., N]. Note that default list starts from "1" for compatibility with opensees compnames: (list of strings) Name to be given to each component. Default is ["0", "1", "2", "3", ...., "m"] """ with open(filename, "r") as f: data = np.genfromtxt(filename) nNodes = int((np.shape(data)[1] - 1) / ncomps) if len(nodeTags) == 0: nodeTags = [i + 1 for i in range(nNodes)] elif len(nodeTags) != nNodes: raise Exception("Length of nodeTags and number of nodes must be same") if len(compNames) == 0: compNames = ["{}".format(i) for i in range(ncomps)] self.t = data[:, 0] d = np.split(data[:, 1::], nNodes, axis=1) dataDir = {} for i in nodeTags: dataDir[i] = {} for j in range(ncomps): dataDir[i][compNames[j]] = d[i - 1][:, j] self.data = dataDir self.nodeTags = nodeTags self.compNames = compNames def __repr__(self): a = "" for key, val in vars(self).items(): a += "{:10s}:\n".format(key) return a