오픈시스opensees 소개
아래 글을 통해 확인해 보세요
https://blog.naver.com/xenostep/221930137768
OpenSeesPy 설치
1)
OpenSeesPy설치방법은 설치 파일을 다운받아서 수동 설치하는 방법이 있습니다.
오프라인 환경에서 사용하는 경우 아래 경로에서 다운 받아 설치할 수 있습니다.
https://pypi.org/project/openseespy/
2)
자동 설치하는 방법은 명령 프롬프트 또는 주피터노트북에서
pip install openseespy
위 명령어를 실행하는 방법이 있습니다.
10초 정도 소요되어 설치가 완료 됩니다.
import openseespy
위 코드 통해 정상 설치 되었는지 확인할 수 있습니다.
OpenSeesPy 사용방법은?
OpenSeesPy Doc을 통해 사용 방법과 예제를 한번에 획득할 수 있습니다.
https://openseespydoc.readthedocs.io/en/latest/
위 경로로 들어가면 최신 메뉴얼과 예제들을 모두 다운 받으실 수 있습니다.
메뉴얼은 PDF 또는 html 등 양식으로 다운 받을 수 있어 편리 합니다.
openseespy 예제 실행해보기
openseespydoc 메뉴얼의 earthquake 예제 중 2번 째
Reinforced Concrete Frame Earthquake Analysis
내용을 살펴 보겠습니다.
예제 파일 못 찾겠으면 아래 zip 파일을 다운받아 시도해 봅니다.
메인 코드는 아래와 같습니다.
메인코드는
RCFrameGravity.py 파일을 먼저 실행하여 자중해석을 하고 그 결과를 받아
지진해석으로 연계하게 됩니다. 그러므로 동일 경로에 위 zip 파일의 데이터를 위치해 두도록 합니다.
ReadRecord.py 파일을 통해 결과 이력을 확인할 수 있습니다.
wipe()
# ----------------------------------------------------
# Start of Model Generation & Initial Gravity Analysis
# ----------------------------------------------------
# Do operations of Example3.1 by sourcing in the tcl file
import RCFrameGravity
print("Gravity Analysis Completed")
# Set the gravity loads to be constant & reset the time in the domain
loadConst('-time', 0.0)
# ----------------------------------------------------
# End of Model Generation & Initial Gravity Analysis
# ----------------------------------------------------
# Define nodal mass in terms of axial load on columns
g = 386.4
m = RCFrameGravity.P/g
mass(3, m, m, 0.0)
mass(4, m, m, 0.0)
# Set some parameters
record = 'elCentro'
# Permform the conversion from SMD record to OpenSees record
dt, nPts = ReadRecord.ReadRecord(record+'.at2', record+'.dat')
# Set time series to be passed to uniform excitation
timeSeries('Path', 2, '-filePath', record+'.dat', '-dt', dt, '-factor', g)
# Create UniformExcitation load pattern
# tag dir
pattern('UniformExcitation', 2, 1, '-accel', 2)
# set the rayleigh damping factors for nodes & elements
rayleigh(0.0, 0.0, 0.0, 0.000625)
# Delete the old analysis and all it's component objects
wipeAnalysis()
# Create the system of equation, a banded general storage scheme
system('BandGeneral')
# Create the constraint handler, a plain handler as homogeneous boundary
constraints('Plain')
# Create the convergence test, the norm of the residual with a tolerance of
# 1e-12 and a max number of iterations of 10
test('NormDispIncr', 1.0e-12, 10 )
# Create the solution algorithm, a Newton-Raphson algorithm
algorithm('Newton')
# Create the DOF numberer, the reverse Cuthill-McKee algorithm
numberer('RCM')
# Create the integration scheme, the Newmark with alpha =0.5 and beta =.25
integrator('Newmark', 0.5, 0.25 )
# Create the analysis object
analysis('Transient')
# Perform an eigenvalue analysis
numEigen = 2
eigenValues = eigen(numEigen)
print("eigen values at start of transient:",eigenValues)
# set some variables
tFinal = nPts*dt
tCurrent = getTime()
ok = 0
time = [tCurrent]
u3 = [0.0]
# Perform the transient analysis
while ok == 0 and tCurrent < tFinal:
ok = analyze(1, .01)
# if the analysis fails try initial tangent iteration
if ok != 0:
print("regular newton failed .. lets try an initail stiffness for this step")
test('NormDispIncr', 1.0e-12, 100, 0)
algorithm('ModifiedNewton', '-initial')
ok =analyze( 1, .01)
if ok == 0:
print("that worked .. back to regular newton")
test('NormDispIncr', 1.0e-12, 10 )
algorithm('Newton')
tCurrent = getTime()
time.append(tCurrent)
u3.append(nodeDisp(3,1))
# Perform an eigenvalue analysis
eigenValues = eigen(numEigen)
print("eigen values at end of transient:",eigenValues)
results = open('results.out','a+')
if ok == 0:
results.write('PASSED : RCFrameEarthquake.py\n');
print("Passed!")
else:
results.write('FAILED : RCFrameEarthquake.py\n');
print("Failed!")
results.close()
plt.plot(time, u3)
plt.ylabel('Horizontal Displacement of node 3 (in)')
plt.xlabel('Time (s)')
plt.show()
print("==========================")
코드 간단 설명
간단히 내용을 보면
import RCFrameGravity.py
코드를 통해 자중해석을 실행합니다. 그 결과를 loadConst()를 통해 지진해석과 연계합니다.
모델은 총 4개의 node와 3개의 요소로 구성 되어 있으며
RC 복합재 물성, 특성이 적용되어 있습니다.
그리고 mode 해석이 진행되어 해당 결과를 확인하실 수 있습니다.
해석 후에는 node3의 변위 이력을 그래프로 작성하여 보여줍니다.
예제코드 실행 결과
위와 같이 지진해석 결과를 획득할 수 있습니다.
해석 모델 확인 방법
모델을 시각화 하는 방법은
import openseespy.postprocessing.Get_Rendering as opsplt
opsplt.plot_model()
위 plot_model() 코드로 볼 수 있습니다.
모드해석 결과는 plot_modeshape()을 통해 확인할 수 있습니다.
opsplt.plot_modeshape(1,100)
1은 모드 넘버, 100은 스케일 입니다.
후기
OpenSeesPy 를 설치하고 간단한 예제를 실행해봤습니다.
더불어 모델 형상과 모드해석 결과를 시각화 하는 방법도 사용해 보았습니다.
다음에는 좀 더 다양한 사례를 살펴 보도록 하겠습니다.
질문, 의견 있으시면 언제든 쪽지, 댓글 남겨 주세요. 감사합니다.