コード例 #1
0
 def test_nastran_importer(self):
     from spyfe.fields.nodal_field import NodalField
     from spyfe.meshing.importers import nastran_importer
     from spyfe.fesets.volumelike import FESetT4, FESetT10
     from spyfe.meshing.exporters.vtkexporter import vtkexport
     fens, feslist = nastran_importer.import_mesh('Slot-coarser.nas')
     print(feslist[0].count())
     geom = NodalField(fens=fens)
     vtkexport("test_nastran_importer", feslist[0], geom)
     print('Done')
コード例 #2
0
 def test_Abaqus_importer(self):
     from spyfe.fields.nodal_field import NodalField
     from spyfe.meshing.importers import abaqus_importer
     from spyfe.meshing.exporters.vtkexporter import vtkexport
     fens, feslist = abaqus_importer.import_mesh('LE11_H20.inp')
     for fes in feslist:
         print(fes.count())
     fes = feslist[0]
     geom = NodalField(fens=fens)
     vtkexport("test_Abaqus_importer", fes, geom)
     print('Done')
コード例 #3
0
 def test_Q8_meshing(self):
     from spyfe.fields.nodal_field import NodalField
     from spyfe.meshing.exporters.vtkexporter import vtkexport
     from spyfe.meshing.generators.quadrilaterals import q4_block, q4_to_q8
     N = 2
     Length, Width, nL, nW = 10.0, 7.0, N, N
     fens, fes = q4_block(Length, Width, nL, nW)
     fens, fes = q4_to_q8(fens, fes)
     print(fes.conn)
     geom = NodalField(fens=fens)
     vtkexport("test_Q8_meshing_mesh", fes, geom)
コード例 #4
0
ファイル: algo_heatdiff.py プロジェクト: PetrKryslUCSD/SPyFE
def plot_temperature(model_data):
    file = 'temp'
    if 'postprocessing' in model_data:
        if 'file' in model_data['postprocessing']:
            file = model_data['postprocessing']['file']
    for r in range(len(model_data['regions'])):
        region = model_data['regions'][r]
        femm = region['femm']
    vtkexport(file + str(r), femm.fes, model_data['geom'],
              {'temperature': model_data['temp']})
    return True
コード例 #5
0
def plot_stress(model_data):
    file = 'displacement'
    if 'postprocessing' in model_data:
        if 'file' in model_data['postprocessing']:
            file = model_data['postprocessing']['file']
    for r in range(len(model_data['regions'])):
        region = model_data['regions'][r]
        femm = region['femm']
    vtkexport(file + str(r), femm.fes, model_data['geom'],
              {'displacement': model_data['u']})
    return True
コード例 #6
0
def plot_stress(model_data):
    """Algorithm for plotting stress results.

    :param model_data: Model data dictionary.

    model_data['fens'] = finite element node set (mandatory)

    For each region (connected piece of the domain made of a particular material), mandatory:
    model_data['regions']= list of dictionaries, one for each region
        Each region:
        region['femm'] = finite element set that covers the region (mandatory)
        
    For essential boundary conditions (optional):
    model_data['boundary_conditions']['essential']=list of dictionaries, one for each 
        application of an essential boundary condition.
        For each EBC dictionary ebc:
            ebc['node_list'] =  node list,
            ebc['comp'] = displacement component (zero-based),
            ebc['value'] = function to supply the prescribed value, default is lambda x: 0.0
      

    :return: Success?  True or false.  The model_data object is modified.
    model_data['geom'] =the nodal field that is the geometry
    model_data['temp'] =the nodal field that is the computed temperature
    model_data['timings'] = timing of the individual operations
    """
    file = 'stresses'
    if 'postprocessing' in model_data:
        if 'file' in model_data['postprocessing']:
            file = model_data['postprocessing']['file']
        outcs = model_data['postprocessing']['outcs'] if 'outcs' in model_data['postprocessing']\
            else CSys()

    geom = model_data['geom']
    u = model_data['u']
    dtemp = model_data['dtemp'] if 'dtemp' in model_data else None
    for r in range(len(model_data['regions'])):
        region = model_data['regions'][r]
        femm = region['femm']
        stresses = femm.nodal_field_from_integr_points(
            geom,
            u,
            u,
            dtempn1=dtemp,
            output=OUTPUT_CAUCHY,
            component=[0, 1, 2, 3, 4, 5],
            outcs=outcs)
        vtkexport(file + str(r), femm.fes, model_data['geom'], {
            'displacement': u,
            'stresses': stresses
        })
    return True
コード例 #7
0
ファイル: algo_common.py プロジェクト: PetrKryslUCSD/SPyFE
def plot_mesh(model_data):
    """Generate a VTK file for the plotting of the mesh.
    
    :param model_data: model dictionary, the following keys need to have values:
    model_data['fens']
    model_data['regions']
    :return: Boolean
    """
    file = 'mesh'
    if 'postprocessing' in model_data:
        if 'file' in model_data['postprocessing']:
            file = model_data['postprocessing']['file']

    fens = model_data['fens']
    geom = NodalField(fens=fens)
    for r in range(len(model_data['regions'])):
        region = model_data['regions'][r]
        femm = region['femm']
        vtkexport(file + str(r), femm.fes, geom)
    return True
コード例 #8
0
 def test_fusing_nodes(self):
     import numpy
     from spyfe.fields.nodal_field import NodalField
     from spyfe.meshing.exporters.vtkexporter import vtkexport
     from spyfe.meshing.generators.quadrilaterals import q4_block, q4_to_q8
     from spyfe.meshing.modification import fuse_nodes, merge_meshes
     N = 10
     Length, Width, nL, nW = 2.0, 3.0, N, N
     fens, fes = q4_block(Length, Width, nL, nW)
     fens1, fes1 = q4_to_q8(fens, fes)
     fens1.xyz[:, 0] += Length
     fens, fes = q4_block(Length, Width, nL, nW)
     fens2, fes2 = q4_to_q8(fens, fes)
     tolerance = Length / 1000
     fens, new_indexes_of_fens1_nodes = fuse_nodes(fens1, fens2, tolerance)
     print(fens.xyz)
     print(new_indexes_of_fens1_nodes)
     fens, fes1, fes2 = merge_meshes(fens1, fes1, fens2, fes2, tolerance)
     fes = fes1.cat(fes2)
     print(fens.xyz)
     print(fes.conn)
     geom = NodalField(fens=fens)
     vtkexport("test_fusing_nodes_mesh", fes, geom)
コード例 #9
0
start = time.time()
K = femm.stiffness(geom, u)
print('Matrix assembly', time.time() - start)
start = time.time()
U, info = minres(K, F)
print(info)
u.scatter_sysvec(U)
print('Solution', time.time() - start)
#
print('Done', time.time() - start0)

tipn = fenode_select(fens, box=[0, W, L, L, 0, H])
uv = u.values[tipn, :]
uz = sum(uv[:, 2]) / len(tipn)
print('Tip displacement uz =', uz, ', ', (uz / uzex * 100), ' %')

stresses = femm.nodal_field_from_integr_points(geom,
                                               u,
                                               u,
                                               output=OUTPUT_CAUCHY,
                                               component=[0, 1, 2, 3, 4, 5])

#
vtkexport("rltb3d_H8_results",
          fes,
          geom,
          flds={
              "displacements": u,
              'Cauchy': stresses
          })
コード例 #10
0
ファイル: beamiso.py プロジェクト: PetrKryslUCSD/SPyFE
start = time.time()
K = femm.stiffness(geom, u)
print('Matrix assembly', time.time() - start)
start = time.time()
U, info = minres(K, F)
print(info)
u.scatter_sysvec(U)
print('Solution', time.time() - start)
#
print('Done', time.time() - start0)

tipn = fenode_select(fens, box=[0, W, L, L, 0, H])
uv = u.values[tipn, :]
uz = sum(uv[:, 2]) / len(tipn)
print('Tip displacement uz =', uz, ', ', (uz / uzex * 100), ' %')

stresses = femm.nodal_field_from_integr_points(geom,
                                               u,
                                               u,
                                               output=OUTPUT_CAUCHY,
                                               component=[0, 1, 2, 3, 4, 5])

#
vtkexport("beamiso_H8_results",
          fes,
          geom,
          flds={
              "displacement": u,
              'Cauchy': stresses
          })
コード例 #11
0
lu = splu(K)
del K
U = lu.solve(F)
u.scatter_sysvec(U)

print('Solution', time.time() - start)
#
print('Done', time.time() - start0)

stresses = femm.nodal_field_from_integr_points(geom,
                                               u,
                                               u,
                                               dtempn1=dT,
                                               output=OUTPUT_CAUCHY,
                                               component=[0, 1, 2, 3, 4, 5])
pointA = fenode_select(
    fens,
    box=[707.107E-03, 707.107E-03, -707.107E-03, -707.107E-03, 0., 0.],
    inflate=htol)
print(pointA)
sigzzA = stresses.values[pointA, 2]
print('Stress sigz @ A=', sigzzA / 1.e6, ', ', (sigzzA / sigma_z_A_ref * 100),
      ' %')
#
stresses.values /= 1.0e6
vtkexport("LE11_H8_90deg_results", fes, geom, {
    "displacements": u,
    'dT': dT,
    'stresses': stresses
})
コード例 #12
0
from spyfe.femms.femm_heatdiff import FEMMHeatDiff
from spyfe.fields.nodal_field import NodalField
from spyfe.fields.gen_field import GenField
from spyfe.integ_rules import TriRule
from spyfe.force_intensity import ForceIntensity
from scipy.sparse.linalg import spsolve, minres
import time
from spyfe.meshing.exporters.vtkexporter import vtkexport

Length, Width, nL, nW = 10.0, 10.0, 7, 8
fens, fes = t3_ablock(Length, Width, nL, nW)
geom = NodalField(nfens=fens.count(), dim=3)
for index in range(fens.count()):
    for j in range(2):
        geom.values[index, j] = fens.xyz[index, j]
vtkexport("show_basis_funcs-geom", fes, geom)

bf1 = GenField(data=geom.values)
bf1.values[0, 2] = 1.0
vtkexport("show_basis_funcs-bf1", fes, bf1)

bf13 = GenField(data=geom.values)
bf13.values[12, 2] = 1.0
vtkexport("show_basis_funcs-bf13", fes, bf13)

bf16 = GenField(data=geom.values)
bf16.values[15, 2] = 1.0
vtkexport("show_basis_funcs-bf16", fes, bf16)

bf30 = GenField(data=geom.values)
bf30.values[29, 2] = 1.0
コード例 #13
0
start = time.time()
femmm = FEMMDeforLinear(material=m,
                        fes=fes,
                        integration_rule=GaussRule(dim=3, order=3))
M = femmm.mass(geom, u)
M = (M.T + M) / 2.
print('Mass assembly', time.time() - start)

start = time.time()

v = numpy.random.rand(u.nfreedofs, 10)
tol = 1.e-3
maxiter = 20
shift = (2 * math.pi * 0.2)**2
lamb, v, converged = gepbinvpwr2(K + shift * M, M, v, tol, maxiter)
if converged:
    lamb -= shift
    ix = numpy.argsort(numpy.abs(lamb))
    lamb = lamb[ix].real
    v = v[:, ix]
    print([math.sqrt(om) / 2.0 / math.pi for om in lamb])
    print('Solution', time.time() - start)
    u.scatter_sysvec(v[:, 6].real)
    vtkexport("unit_cube_h20_results", fes, geom, {"displacements": u})
else:
    print('Not converged!')

print('Done', time.time() - start0)

#
コード例 #14
0
print(F)
print('Load vector assembly', time.time() - start)

start = time.time()
# U, info = lgmres(K, F)
# print(info)
lu = splu(K)
del K
U = lu.solve(F)
u.scatter_sysvec(U)

print('Solution', time.time() - start)
#
print('Done', time.time() - start0)

stresses = femm.nodal_field_from_integr_points(geom,
                                               u,
                                               u,
                                               dtempn1=dT,
                                               output=OUTPUT_CAUCHY,
                                               component=[0, 1, 2, 3, 4, 5])
pointA = fenode_select(fens, box=[0, 0, 0, 0, 0., 0.], inflate=htol)

sigxA = stresses.values[pointA, 0]
print('Stress sigx @ A=', sigxA, ', ', (sigxA / sigma_x_A_ref * 100), ' %')
#
vtkexport("simple_thermal_expansion", fes, geom, {
    "displacements": u,
    'stresses': stresses
})
コード例 #15
0
dtemp = NodalField(nfens=fens.count(), dim=1)
dtemp.fun_set_values(fens.xyz, lambda x: math.sqrt(x[0] ** 2 + x[1] ** 2) + x[2])
print(numpy.max(dtemp.values))
print(numpy.min(dtemp.values))
F = femm.thermal_strain_loads(geom, u, dtemp)
print('Load vector assembly', time.time() - start)
print(numpy.max(F), numpy.min(F))

start = time.time()
# U, info = lgmres(K, F)
# print(info)
lu = splu(K)
del K
U = lu.solve(F)
u.scatter_sysvec(U)

print('Solution', time.time() - start)
#
print('Done', time.time() - start0)

stresses = femm.nodal_field_from_integr_points_spr(geom, u, u, dtempn1=dtemp, output=OUTPUT_CAUCHY,
                                                   component=[0, 1, 2, 3, 4, 5])
pointA = fenode_select(fens, box=[707.107E-03, 707.107E-03, -707.107E-03, -707.107E-03, 0., 0.],
                       inflate=htol)
print(pointA)
sigzzA = stresses.values[pointA, 2]
print('Stress sigz @ A=', sigzzA / 1.e6, ', ', (sigzzA / sigma_z_A_ref * 100), ' %')
#
stresses.values /= 1.0e6
vtkexport("LE11_H20_90deg_results", fes, geom, {"displacements": u, 'dtemp': dtemp, 'stresses': stresses})
コード例 #16
0
ファイル: rltb3dms.py プロジェクト: PetrKryslUCSD/SPyFE
start = time.time()
K = femm.stiffness(geom, u)
print('Matrix assembly', time.time() - start)
start = time.time()
# U, info = lgmres(K, F)
# print(info)
lu = splu(K)
del K
U = lu.solve(F)
#R = cho_factor(K, overwrite_a=True)
#y = spsolve(R, spsolve(R.T, F))
# U = spsolve(K, F)
# import scipy.sparse.linalg as spla
# ilu = spilu(K, diag_pivot_thresh=0.0, fill_factor=1000)
# M = spla.LinearOperator(K.shape, ilu.solve)
# U, info = lgmres(K, F, x0=ilu.solve(F), M=M) #, callback=lambda x: print('iteration', numpy.linalg.norm(x-U)))
# print(info)
u.scatter_sysvec(U)

print('Solution', time.time() - start)
#
print('Done', time.time() - start0)

tipn = fenode_select(fens, box=[0, W, L, L, 0, H])
uv = u.values[tipn, :]
uz = sum(uv[:, 2]) / len(tipn)
print('Tip displacement uz =', uz, ', ', (uz / uzex * 100), ' %')

#
vtkexport("rltb3dms_H8_results", fes, geom, u, fldname="displacements")
コード例 #17
0
for index in cn:
    temp.set_ebc([index],
                 val=boundaryf(fens.xyz[index, 0], fens.xyz[index, 1]))
temp.apply_ebc()
femm = FEMMHeatDiff(material=m,
                    fes=fes,
                    integration_rule=GaussRule(dim=2, order=3))
# S = femm.connection_matrix(geom)
# perm = reverse_cuthill_mckee(S,symmetric_mode=True)
# temp.numberdofs(node_perm=perm)
temp.numberdofs()
start = time.time()
fi = ForceIntensity(magn=lambda x, J: Q)
F = femm.distrib_loads(geom, temp, fi, 3)
print('Heat generation load', time.time() - start)
start = time.time()
F += femm.nz_ebc_loads_conductivity(geom, temp)
print('NZ EBC load', time.time() - start)
start = time.time()
K = femm.conductivity(geom, temp)
print('Matrix assembly', time.time() - start)
start = time.time()
temp.scatter_sysvec(spsolve(K, F))
print('Solution', time.time() - start)

print('Done', time.time() - start0)

# print(temp.values.T)

vtkexport("Poisson_fe_Q8_results", fes, geom, {"temp": temp})
コード例 #18
0
ファイル: LE11_H20_ebc.py プロジェクト: PetrKryslUCSD/SPyFE
print('Load vector assembly', time.time() - start)
print(numpy.max(F), numpy.min(F))

start = time.time()
# U, info = lgmres(K, F)
# print(info)
lu = splu(K)
del K
U = lu.solve(F)
u.scatter_sysvec(U)

print('Solution', time.time() - start)
#
print('Done', time.time() - start0)

stresses = femm.nodal_field_from_integr_points_spr(
    geom, u, u, dtempn1=dT, output=OUTPUT_CAUCHY, component=[0, 1, 2, 3, 4, 5])
pointA = fenode_select(
    fens,
    box=[707.107E-03, 707.107E-03, -707.107E-03, -707.107E-03, 0., 0.],
    inflate=htol)
print(pointA)
sigzzA = stresses.values[pointA, 2]
print('Stress sigz @ A=', sigzzA / 1.e6, ', ', (sigzzA / sigma_z_A_ref * 100),
      ' %')
#
stresses.values /= 1.0e6
vtkexport("LE11_H20_90deg_u", fes, geom, {"displacements": u})
vtkexport("LE11_H20_90deg_dT", fes, geom, {'dT': dT})
vtkexport("LE11_H20_90deg_s", fes, geom, {'stresses': stresses})
コード例 #19
0
start = time.time()
K = femm.stiffness(geom, u)
print('Matrix assembly', time.time() - start)
start = time.time()
# U, info = lgmres(K, F)
# print(info)
lu = splu(K)
del K
U = lu.solve(F)
#R = cho_factor(K, overwrite_a=True)
#y = spsolve(R, spsolve(R.T, F))
# U = spsolve(K, F)
# import scipy.sparse.linalg as spla
# ilu = spilu(K, diag_pivot_thresh=0.0, fill_factor=1000)
# M = spla.LinearOperator(K.shape, ilu.solve)
# U, info = lgmres(K, F, x0=ilu.solve(F), M=M) #, callback=lambda x: print('iteration', numpy.linalg.norm(x-U)))
# print(info)
u.scatter_sysvec(U)

print('Solution', time.time() - start)
#
print('Done', time.time() - start0)

tipn = fenode_select(fens, box=[0, W, L, L, 0, H])
uv = u.values[tipn, :]
uz = sum(uv[:, 2]) / len(tipn)
print('Tip displacement uz =', uz, ', ', (uz / uzex * 100), ' %')

#
vtkexport("rltb3dms_QT10MS_results", fes, geom, {"displacements": u})
コード例 #20
0
Length, Width, nL, nW = 1.0, 1.0, N, N
fens, fes = t3_ablock(Length, Width, nL, nW)
print('Mesh generation', time.time() - start)
bfes = mesh_boundary(fes)
cn = connected_nodes(bfes)
geom = NodalField(fens=fens)
temp = NodalField(nfens=fens.count(), dim=1)
for index in cn:
    temp.set_ebc([index],
                 val=boundaryf(fens.xyz[index, 0], fens.xyz[index, 1]))
temp.apply_ebc()
temp.numberdofs()
femm = FEMMHeatDiff(material=m, fes=fes, integration_rule=TriRule(npts=1))
start = time.time()
fi = ForceIntensity(magn=lambda x, J: Q)
F = femm.distrib_loads(geom, temp, fi, 3)
print('Heat generation load', time.time() - start)
start = time.time()
F += femm.nz_ebc_loads_conductivity(geom, temp)
print('NZ EBC load', time.time() - start)
start = time.time()
K = femm.conductivity(geom, temp)
print('Matrix assembly', time.time() - start)
start = time.time()
temp.scatter_sysvec(spsolve(K, F))
print('Solution', time.time() - start)
print(temp.values)
print('Done', time.time() - start0)

vtkexport("Poisson_fe_results", fes, geom, temp, fldname="temp")
コード例 #21
0
start = time.time()
K = femm.stiffness(geom, u)
print('Matrix assembly', time.time() - start)
start = time.time()
# U, info = lgmres(K, F)
# print(info)
lu = splu(K)
del K
U = lu.solve(F)
#R = cho_factor(K, overwrite_a=True)
#y = spsolve(R, spsolve(R.T, F))
# U = spsolve(K, F)
# import scipy.sparse.linalg as spla
# ilu = spilu(K, diag_pivot_thresh=0.0, fill_factor=1000)
# M = spla.LinearOperator(K.shape, ilu.solve)
# U, info = lgmres(K, F, x0=ilu.solve(F), M=M) #, callback=lambda x: print('iteration', numpy.linalg.norm(x-U)))
# print(info)
u.scatter_sysvec(U)

print('Solution', time.time() - start)
#
print('Done', time.time() - start0)

tipn = fenode_select(fens, box=[0, W, L, L, 0, H])
uv = u.values[tipn, :]
uz = sum(uv[:, 2]) / len(tipn)
print('Tip displacement uz =', uz, ', ', (uz / uzex * 100), ' %')

#
vtkexport("rltb3dH20_results", fes, geom, {"displacements": u})
コード例 #22
0
ファイル: Poisson_fe_H20.py プロジェクト: PetrKryslUCSD/SPyFE
# These are the constants in the problem, k is kappa
boundaryf = lambda x, y, z: 1.0 + x**2 + 2 * y**2
Q = -6  # internal heat generation rate
k = 1.0  # thermal conductivity
m = MatHeatDiff(thermal_conductivity=k * numpy.identity(3))
start = time.time()
N = 4
xs = numpy.linspace(0.0, 1.0, N + 1)
ys = numpy.linspace(0.0, 1.0, N + 1)
zs = numpy.linspace(0.0, 1.0, N + 1)
fens, fes = h8_blockx(xs, ys, zs)
fens, fes = h8_to_h20(fens, fes)
fes.gradbfunpar(numpy.array([0, 0, 0]))
geom = NodalField(fens=fens)

vtkexport("Poisson_fe_H20_mesh", fes, geom)
print('Mesh generation', time.time() - start)
bfes = mesh_boundary(fes)
cn = connected_nodes(bfes)

temp = NodalField(nfens=fens.count(), dim=1)
for j in cn:
    temp.set_ebc([j],
                 val=boundaryf(fens.xyz[j, 0], fens.xyz[j, 1], fens.xyz[j, 2]))
temp.apply_ebc()
femm = FEMMHeatDiff(material=m,
                    fes=fes,
                    integration_rule=GaussRule(dim=3, order=3))
S = femm.connection_matrix(geom)
perm = reverse_cuthill_mckee(S, symmetric_mode=True)
temp.numberdofs(node_perm=perm)
コード例 #23
0
ファイル: Poisson_fe_Q4.py プロジェクト: PetrKryslUCSD/SPyFE
for index in cn:
    temp.set_ebc([index],
                 val=boundaryf(fens.xyz[index, 0], fens.xyz[index, 1]))
temp.apply_ebc()
femm = FEMMHeatDiff(material=m,
                    fes=fes,
                    integration_rule=GaussRule(dim=2, order=2))
# S = femm.connection_matrix(geom)
# perm = reverse_cuthill_mckee(S,symmetric_mode=True)
# temp.numberdofs(node_perm=perm)
temp.numberdofs()
start = time.time()
fi = ForceIntensity(magn=lambda x, J: Q)
F = femm.distrib_loads(geom, temp, fi, 3)
print('Heat generation load', time.time() - start)
start = time.time()
F += femm.nz_ebc_loads_conductivity(geom, temp)
print('NZ EBC load', time.time() - start)
start = time.time()
K = femm.conductivity(geom, temp)
print('Matrix assembly', time.time() - start)
start = time.time()
temp.scatter_sysvec(spsolve(K, F))
print('Solution', time.time() - start)

print('Done', time.time() - start0)

# print(temp.values.T)

vtkexport("Poisson_fe_Q4_results", fes, geom, {'temperature': temp})
コード例 #24
0
maxiter=150
lamb, v, converged = spyfe.bipwr.gepbinvpwr2(K,M,v,tol,maxiter)
if converged:
    ix = numpy.argsort(numpy.abs(lamb))
    lamb = lamb[ix].real
    v = v[:, ix]
    print([math.sqrt(om) / 2.0 / math.pi for om in lamb])
    print("Reference frequencies:")
    print([0.421, 1.029, 2.582, 3.306, 3.753, 6.555])
    print('Solution', time.time() - start)
else:
    print( 'Not converged!'  )


# start = time.time()
# w, v = eigsh(K, k=10, M=M, which='SM')
# ix = numpy.argsort(numpy.abs(w))
# w = w[ix].real
# v = v[:,ix]
# print('EP solution', time.time() - start)
# print([math.sqrt(om)/2.0/math.pi for om in w])
# print(w, v[:,0])
u.scatter_sysvec(v[:,0].real)

#
print('Done', time.time() - start0)


#
vtkexport("FV16_cantilevered_plate_abaqus_results", fes, geom, {"displacements": u})
コード例 #25
0
start = time.time()
K = femm.stiffness(geom, u)
print('Matrix assembly', time.time() - start)
start = time.time()
# U, info = lgmres(K, F)
# print(info)
lu = splu(K)
del K
U = lu.solve(F)
#R = cho_factor(K, overwrite_a=True)
#y = spsolve(R, spsolve(R.T, F))
# U = spsolve(K, F)
# import scipy.sparse.linalg as spla
# ilu = spilu(K, diag_pivot_thresh=0.0, fill_factor=1000)
# M = spla.LinearOperator(K.shape, ilu.solve)
# U, info = lgmres(K, F, x0=ilu.solve(F), M=M) #, callback=lambda x: print('iteration', numpy.linalg.norm(x-U)))
# print(info)
u.scatter_sysvec(U)

print('Solution', time.time() - start)
#
print('Done', time.time() - start0)

tipn = fenode_select(fens, box=[0, W, L, L, 0, H])
uv = u.values[tipn, :]
uz = sum(uv[:, 2]) / len(tipn)
print('Tip displacement uz =', uz, ', ', (uz / uzex * 100), ' %')

#
vtkexport("rltb3dms_H8MSGSO_results", fes, geom, {"displacements": u})