Happy Monday Everyone,
I was trying to use the julia package “FEniCS” for making a Navier Strokes Simulation, but as time goes higher so does memory. Here is the for loop that I got and modified from tutorial 8 of the FEniCS package.
for n =0:(num_steps-1) # Update current time global t += dt # Step 1: Tentative velocity step b1 = assemble(L1) [apply(bc,b1) for bc in bcu] solve(A1, vector(u_), b1, "gmres","amg")#, "bicgstab", "hypre_amg" b2 = assemble(L2) [apply(bc,b2) for bc in bcp] solve(A2, vector(p_), b2, "gmres","amg")#, "bicgstab", "hypre_amg") b3 = assemble(L3) solve(A3, vector(u_), b3, "gmres","amg")#, "bicgstab", "hypre_amg") if n%savestep==(savestep-1) write(xdmffile_u,u_, t) write(xdmffile_p,p_, t) #println(string(100.0*t/T)*"%") # Save nodal values to file #store(timeseries_u,vector(u_), t) #store(timeseries_p,vector(p_), t) end global p_n = FeFunction(Q) global u_n = FeFunction(V) assign(u_n,u_) assign(p_n,p_) global p_ = FeFunction(Q) global u_ = FeFunction(V) end
the FeFunction part was my attempt to lower the memory as I believe the assign function is not freeing up memory after assigning. I am not sure if it is because of PyCall or the FEniCS package that uses PyCall. I read that since julia does not have a clear function for variables to clear up memory I can assign a value to it to clear up memory so I assigned a function to it. Despite my attempt the memory problem did not resolve and somewhere in that for loop I am building up memory. Python fenics simulations by others use with the same resolution 0.1% memory while my julia fenics simulation uses 40% (more than 60 Gb). Alternative finite element packages i looked at in julia dont seem to have methods to program navier strokes (just poisson and heat diffussion) nor to have a periodic function space. How should I tackle this problem?