Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python fenics中组合双线性形式的维数_Python_Assemble_Fenics - Fatal编程技术网

Python fenics中组合双线性形式的维数

Python fenics中组合双线性形式的维数,python,assemble,fenics,Python,Assemble,Fenics,我是stackoverflow和fenics的新手。我最近使用env来计算另一个文件的输入代码 我想计算有限元并保存组合矩阵,比如在矩形域上D=(-1,1)*(-2,2)。我在x和y方向上设置离散点的数量,设置nx,ny=9,即2*10*10三角形 当我计算矩阵并组装它们时,它们的大小是(nx+1)*(ny+1)*(nx+1)*(ny+1),而不是(nx+1)*(ny+1) MWE: 谢谢你的帮助,谢谢 啊,我在推理上犯了错误。上面的代码是正确的,并且给出了正确的结果。生成的FE当然是100,没

我是stackoverflow和fenics的新手。我最近使用env来计算另一个文件的输入代码

我想计算有限元并保存组合矩阵,比如在矩形域上
D=(-1,1)*(-2,2)
。我在
x
y
方向上设置离散点的数量,设置
nx,ny=9
,即
2*10*10
三角形

当我计算矩阵并组装它们时,它们的大小是
(nx+1)*(ny+1)*(nx+1)*(ny+1)
,而不是
(nx+1)*(ny+1)

MWE:


谢谢你的帮助,谢谢

啊,我在推理上犯了错误。上面的代码是正确的,并且给出了正确的结果。生成的FE当然是
100
,没错。但是为了计算矩阵,我现在有长度为
100
的向量相互相乘,从而得到
100*100
from dolfin import *
import numpy as np

# Mesh and function space
# mesh (generates 2*nx*ny number of triangles) and function space
# number of FEM = (nx+1)*(ny+1) = 100
# matrixSize = (nx+1)*(ny+1) * (nx+1)*(ny+1) = 100*100
nx = 9
ny = 9
# mesh dims
x = [-1, 1]
y = [-2, 2]
mesh = RectangleMesh(Point(x[0], y[0]), Point(x[1], y[1]), nx, ny)
V = FunctionSpace(mesh, "CG", 1)

# Time variables
dt = Constant(0.3)

g_expr = 'alpha'
g = Expression(g_expr , alpha=0.0, degree=2)

u0 = interpolate(g, V)

# Variational problem
u = TrialFunction(V)
v = TestFunction(V)
f = Expression('-exp(-(pow(x[0], 2)+pow(x[1], 2)))', degree=2)

a = u*v*dx + dt*inner(grad(u), grad(v))*dx
L = u0*v*dx + dt*f*v*dx
bc = DirichletBC(V, g, "on_boundary")

A = assemble(a)
print(A.array())
# print the sizes of row and col space of assembled matrix A (both = 100)
print((len(A.array()), len(A.array()[0])))