How to deal with "out of memory"

Hello everyone, I am a beginner of freefem++. For the freefem++ code, I can only solve PDEs in a single thread.
I want to use Freefem++ to solve the unsteady incompressible magnetohydrodynamic equations.


I read a paper STABILITY AND ERROR ANALYSIS OF IMEX SAV SCHEMES FORTHE MAGNETO-HYDRODYNAMIC EQUATIONS.pdf (1.8 MB) and I have reproduced the author’s two-dimensional numerical experiment. Now I want to expand this numerical experiment from two dimensions to three dimensions. The way I define the grid is as follows

mesh3 Th = cube(N, N, N, [x, y, z]);

For my own MacBook, when N>20, it will output

Error Umfpack -1 :  out_of_memory   current line = 97
Exec error :  Error Umfpack -1 :  out_of_memory 
   -- number :1
 catch an erreur in  solve  =>  set  sol = 0 !!!!!!! 
Exec error :  Error Umfpack -1 :  out_of_memory 
   -- number :1
 err code 8 ,  mpirank 0

I tried to use the server, but the first attempt was to use N = 100, and the result was still out of memory

Error Umfpack -1 :  out_of_memory   current line = 97
Exec error :  Error Umfpack -1 :  out_of_memory 
   -- number :1
 catch an erreur in  solve  =>  set  sol = 0 !!!!!!! 
Exec error :  Error Umfpack -1 :  out_of_memory 
   -- number :1
 err code 8 ,  mpirank 0

Is there any good solution? I also want to learn to use PETSc parallelization to solve, but this is a bit difficult for me to get started.

Now I give the two-dimensional code I reproduced, and the three-dimensional one is similar to this
test.edp (11.4 KB)