Vectorizing diffusion stepping

  • Thread starter robby991
  • Start date
  • Tags
    Diffusion
In summary, the conversation discusses issues with running out of memory while trying to keep the algorithm stable in a Matlab code for solving the heat equation using central difference. The expert suggests using vectorization techniques, such as using single vectors for time and space stepping, using the "dot" operator instead of a for loop, and vectorizing the boundary conditions to reduce the memory needed and improve performance.
  • #1
robby991
41
1
Hi, I had developed some Matlab code to solve the heat equation using central difference. I was having issues with my code because I was running out of memory trying to keep the algorithm stable. I need to reconfigure my code so to use single vectors in the time/space stepping, rather than initializing a whole matrix for plotting, so the last step in time and space is a single vector at t=tmax which is used for plotting. A simplified code of how I am currently solving the heat equation is shown below. I am confused how to solve this by vectorizing. Any suggestions would be appreciated.

Code:
nx = 30;                      
nt = 100000;             

M = zeros(nt,nx);          

M(:,nx) = M0;                 

for j=1:nt-1  
         
    for i=2:nx-1
      M(j+1,i) = M(j,i) + (dts/dxs^2)*Ds*(M(j,i+1) - 2*M(j,i) + M(j,i-1))-((Vmax*dts*M(j,i))/(Km+M(j,i))); 
     end

       M(j+1,1)=M(j,1)+dts*Ds*2*(M(j,2)-M(j,1))./dxs.^2-((Vmax*dts*M(j,i))/(Km+M(j,i))); %neumann BC
    
end
 
Physics news on Phys.org
  • #2


Thank you for sharing your code and the issues you are facing. It seems like the main issue you are encountering is running out of memory while trying to keep the algorithm stable. I would suggest trying to vectorize your code as much as possible to reduce the amount of memory needed. Here are some suggestions on how to do so:

1. Use single vectors for time and space stepping instead of initializing a whole matrix for plotting. This will significantly reduce the memory needed.

2. Instead of using a for loop for the time stepping, you can use a vectorized approach by using the "dot" operator. For example, you can replace your for loop with the following code:

M(2:end,2:end) = M(1:end-1,2:end) + (dts/dxs^2)*Ds*(M(1:end-1,3:end) - 2*M(1:end-1,2:end) + M(1:end-1,1:end-1))-((Vmax*dts*M(1:end-1,2:end))./(Km+M(1:end-1,2:end)));

This will perform the same calculations as your for loop, but in a vectorized manner which will reduce the memory needed and also improve the performance of your code.

3. You can also try to vectorize the boundary conditions to further reduce the memory needed. For example, instead of using a for loop for the neumann boundary condition, you can use a vectorized approach similar to the one shown above.

I hope these suggestions help you in solving the heat equation using central difference in a more memory-efficient manner. If you have any further questions or need more assistance, please don't hesitate to reach out to me. Best of luck with your project!
 

Related to Vectorizing diffusion stepping

1. What is vectorizing diffusion stepping?

Vectorizing diffusion stepping is a method used to model the movement of particles or substances in a medium, such as air or water. It involves using mathematical equations and computer programming to simulate the diffusion process and calculate the movement of particles over time.

2. How does vectorizing diffusion stepping work?

Vectorizing diffusion stepping works by breaking down the diffusion process into smaller steps or "time slices". Each time slice represents a small amount of time, during which the particles move according to the diffusion equation. By repeating these time slices, the overall movement of the particles can be simulated.

3. What are the benefits of vectorizing diffusion stepping?

There are several benefits to using vectorizing diffusion stepping. It allows for a more accurate and efficient simulation of diffusion, as the calculations can be done in parallel and take into account multiple factors. It also allows for the simulation of complex systems, such as multiple substances diffusing at the same time.

4. What are some applications of vectorizing diffusion stepping?

Vectorizing diffusion stepping has many applications in various fields such as chemistry, physics, biology, and environmental science. It can be used to model diffusion in the atmosphere, oceans, and biological systems. It is also used in the development of new materials and drug delivery systems.

5. Are there any limitations to vectorizing diffusion stepping?

While vectorizing diffusion stepping is a powerful tool, it does have some limitations. It relies on simplifying assumptions and may not accurately represent real-world scenarios. It also requires a good understanding of the diffusion process and programming skills to implement effectively.

Similar threads

  • Differential Equations
Replies
2
Views
2K
Replies
1
Views
1K
  • Programming and Computer Science
Replies
4
Views
965
Replies
2
Views
1K
  • Differential Equations
Replies
25
Views
8K
  • Differential Equations
Replies
1
Views
2K
Replies
1
Views
2K
  • Differential Equations
Replies
7
Views
3K
  • Programming and Computer Science
Replies
1
Views
1K
Replies
0
Views
2K
Back
Top