load = PointLoad(name='pload', nodes=[10, 15], x=0, y=0, z=1, xx=0, yy=0, zz=0)
s.add(load)

# add sections - - - - - - - - - - - -
section = ShellSection('shell_sec', t=.1)
s.add(section)

# add material - - - - - -
material = ElasticIsotropic('concrete', E=30e9, v=.2, p=2400)

s.add(material)
# add element properties - - - - - - - - -
el_prop = ElementProperties('concrete_shell',
                            material='concrete',
                            section='shell_sec',
                            elset='shell')
s.add(el_prop)

# add analysis frequencies - - - - - - - -
freq_list = range(100, 500, 2)

# analyze - - - -
s.analyze_harmonic(freq_list, fields=['u'], backend='opensees')

# save results - - - - - -
s.to_obj()

v = HarmonicViewer(s)
v.scale = 1e6
v.show()
# add loads - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
load = PointLoad(name='pload', nodes=[100], x=0, y=0, z=1, xx=0, yy=0, zz=0)
s.add(load)

# add sections - - - - - - - - - - - -
section = ShellSection('shell_sec', t=.1)
s.add(section)

# add material - - - - - -
material = ElasticIsotropic('concrete', E=30e9, v=.2, p=2400)

s.add(material)
# add element properties - - - - - - - - -
el_prop = ElementProperties('concrete_shell',
                            material='concrete',
                            section='shell_sec',
                            elset='shell')
s.add(el_prop)

# add analysis frequencies - - - - - - - -
freq_list = range(20, 200, 2)

# analyze - - - -
s.analyze_harmonic(freq_list, fields=['u'], backend='ansys')

# save results - - - - - -
s.to_obj()

v = HarmonicViewer(s)
v.show()