Invalid Syntax error on addition when running FEniCS in Windows subsystem

135 Views Asked by At

I am currently working on a project where we are solving a system of PDE's in FEniCs. I have created the following code in order to solve the system but I get an invalid syntax error on

a = a0 + a1

I am not that good in Python and I have never used FEniCS before. I am also using a windows subsystem in order to run it which makes it extra complicated for me to understand any error that I might have made. I appreciate any suggestions you may have and I apologize in advance if I ask obvious questions!

from fenics import *
 
# Create mesh and define function space
mesh = Mesh (" circle.xml ")

# Construct the finite element space
V = VectorFunctionSpace (mesh , 'P', 1)

# Define parameters :
T = 150
dt = 0.5
alpha = 0.4
beta = 2
gamma = 0.8
delta = 1

# Class representing the intial conditions
class InitialConditions ( UserExpression ):
    def eval (self , values , x):
        values [0] = Expression(("(4/25)-2*pow(10,-7)*(x[0]-0.1*x[1]-225)*(x[0]-0.1*x[1]-675)"),degree=2)
        values [1] = Expression(("(22/45)-3*pow(10,-5)*(x[0]-450)-1.2*pow(10,-4)*(x[1]-150)"),degree=2)

def value_shape ( self ):
    return (2 ,)

# Define initial condition
indata = InitialConditions(degree =2)
u0 = Function (V)
u0 = interpolate (indata,V)

# Test and trial functions
u,v = TrialFunction(V), TestFunction(V)

# Create bilinear and linear forms
a0 = (u[0]*v[0]*dx) + (0.5*delta*dt*inner(grad(u[0]),grad(v[0]))*dx)
a1 = (u[1]*v[1]*dx) + (0.5*delta*dt*inner(grad(u[1]),grad(v[1]))*dx)

L0 = (u0[0]*v[0]*dx) - (0.5*delta*dt*inner(grad(u0[0]),grad(v[0]))*dx) - (dt*u0[0]*v[0]*dx*(((u0[0]*u0[1])/(u0[0]+alpha))-u0[0]*(1-u0[0]))*dx) 
L1 = (u0[1]*v[1]*dx) - (0.5*delta*dt*inner(grad(u0[1]),grad(v[1]))*dx) - (dt*u0[1]*v[1]*dx*(-beta*((u0[0]*u0[1])/(u0[0]+alpha))-gamma*u0[1]*dx) 

a = a0 + a1
L = L0 + L1

#Set up boundary condition
g = Constant([0.0,0.0])
bc = DirichletBC(V,u_initial,DirichletBoundary())
bc = [] #NEUMANN

#Assemble matrix
A = assemble(a)

# Set an output file
out_file = File("Results.pvd","compressed")

# Set initial condition

u = Function(V)
u.assign(u0)

t = 0.0

out_file << (u,t)

u_initial = Function(V)
u_initial.assign(u0)

t_save = 0
num_samples = 20

# Time - stepping
while t < T:
                                                                          
    # assign u0
    u0.assign(u)
    
    #Assemble vector and apply boundary conditions
    A = assemble(a)
    b = asseble(L)

    t_save += dt

    if t_save > T/ num_samples or t >= T-dt:
        print("Saving!")
        
        #Save the solution to file
        out_file << (uv,t)
    
        t_save = 0
    
    #Move to next interval and adjust boundary condition
    t += dt
1

There are 1 best solutions below

0
On

There's a typo in your line b = asseble(L) --> b=assemble(L)

Perhaps this tiny error is giving you the issue? Although I'd imagine the error message would be more descriptive.