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