Reg. non-square system of matrix

115 views
Skip to first unread message

Himanshu Mishra

unread,
Feb 22, 2024, 11:22:25 AM2/22/24
to Dedalus Users
Hello everyone,

I am solving an IVP problem in a Cartesian box with dimension (x,y,z), periodic in x and y. I am solving 3 equations along with the boundary conditions. I am getting an error, 

"raise ValueError("Non-square system: group={}, I={}, J={}".format(self.group, valid_eqn.nnz, valid_var.nnz))
ValueError: Non-square system: group=(0, 0, None), I=368, J=1017

My code snippet looks like,

#fields################################################

p = dist.Field(name='p', bases=(xbasis,ybasis,zbasis))
T = dist.Field(name='T', bases=(xbasis,ybasis,zbasis))
u = dist.VectorField(coords, name='u', bases=(xbasis,ybasis,zbasis))
us= dist.VectorField(coords, name='us', bases=(xbasis,ybasis,zbasis))
ff=dist.VectorField(coords, name='ff', bases=(xbasis,ybasis,zbasis))
gg=dist.VectorField(coords, name='gg', bases=(xbasis,ybasis,zbasis))


# tau variables

tau_u1=dist.VectorField(coords, name='tau_u1', bases=(xbasis,ybasis))
tau_u2=dist.VectorField(coords, name='tau_u2', bases=(xbasis,ybasis))
tau_p=dist.Field( name='tau_p') #used in continuity eq
tau_T4 = dist.Field(name='tau_T4', bases=(xbasis,ybasis))
tau_T5 = dist.Field(name='tau_T5', bases=(xbasis,ybasis))

#substitutions##########################################

# defining the derivative
dx=lambda A: d3.Differentiate(A, coords['x'])
dy=lambda A: d3.Differentiate(A, coords['y'])
dz=lambda A: d3.Differentiate(A, coords['z'])

# defining the grad_var
ex,ey,ez=coords.unit_vector_fields(dist)
lift_basis=zbasis.derivative_basis(1)
lift= lambda A: d3.Lift(A, lift_basis,-1)

#distribution of local grid for defining the real space variables
x, y, z = dist.local_grids(xbasis, ybasis, zbasis)
us['g'][0]=a_s* np.exp(2 * k_s *z)
us['g'][1]=0
us['g'][2]=0

ff['g'][1]=0
ff['g'][0]=0
ff['g'][2]=f
gg['g'][2]=g
gg['g'][0]=0
gg['g'][1]=0


Gt=dz(T)-lift(tau_T4)
Gu=d3.grad(u)-ez*lift(tau_u1)

problem= d3.IVP([p,T,u,us,ff,gg,tau_u1,tau_u2,tau_p,tau_T4,tau_T5], namespace=locals())

#continuity eq
 
problem.add_equation("trace(Gu)+tau_p = 0")

#governing equations
problem.add_equation("dt(T)-kappa*(lap(T))+lift(tau_T4)+lift(tau_T5)=-(u+us)@grad(T)")

#momentum equations
problem.add_equation("dt(u)+(1/rho_0)*grad(p)-nu*div(Gu)+lift(tau_u2)=-u@grad(u)+cross(us,curl(u))-cross(ff,(u+us))+gg*alpha*(T-T_0)")

#boundary conditions
problem.add_equation("dz(T)(z=0)=0") 
problem.add_equation("dz(u@ex)(z=-Lz)=0")   
problem.add_equation("dz(u@ey)(z=0)=0")
problem.add_equation("dz(T)(z=-Lz)=-q/(kappa*c_p*rho_0)")
problem.add_equation("dz(u@ex)(z=0)=tau/(nu*rho_0)") 
problem.add_equation("dz(u@ey)(z=-Lz)=0")
problem.add_equation("u(z=0)@ez=0") 

#pressure gauge choice
problem.add_equation("integ(p) = 0")

My number of field variables equals to number of "add equations", however, I am not sure why I am not getting square matrices? I will greatly appreciate any suggestions.

Thank You

Himanshu Mishra

Daniel Lecoanet

unread,
Feb 22, 2024, 4:00:28 PM2/22/24
to Dedalus Users
Hi Himanshu,

The issue is that you have 6 (x,y,z) dependent variables (p, T, u, us, ff, gg), 4 (x, y) dependent tau variables (tau_u1, tau_u2, tau_T4, tau_T5), and one spatially-independent variable (tau_p). For a square system, that requires 6 equations, 2 scalar boundary conditions, 2 vector boundary conditions, and 1 gauge condition. You have entered 3 equations, 2 scalar BCs, not quite 2 vector BCs (you only specify BCs on 5 components of the velocity, not 6) and 1 gauge condition. So your system has many more variables than equations.

Daniel

--
You received this message because you are subscribed to the Google Groups "Dedalus Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to dedalus-user...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/dedalus-users/c0fe18fd-bf32-42f1-8635-0a2be0ac04f1n%40googlegroups.com.

Reply all
Reply to author
Forward
0 new messages