
[Sponsors] 
February 15, 2012, 14:34 
TDMA code for MATLAB

#1 
Member
Amin Shariat KHah
Join Date: Apr 2011
Location: Shiraz
Posts: 86
Rep Power: 7 
TDMA is a quick Aligorithm for solving AX=b when A is Tridiagonal matrix:
Code:
% Written by Amin ShariatKhah 2012  Shahrood University Of technology %Feel Free to use it %This code solve the AX=b (When A is Tridiagonal ) function X=TDMAsolver(A,b) m=length(b); % m is the number of rows X=zeros(m,1); A(1,2)= A(1,2) ./ A(1,1); % Division by zero risk. b(1)= b(1) ./ A(1,1); % Division by zero would imply a singular matrix for i=2:m1 temp= A(i,i)  A(i,i1) .* A(i1,i); A(i,i+1)= A(i,i+1) ./ temp; b(i)= ( b(i)  A(i,i1) .* b(i1) ) ./ temp; end i=m; X(m)=(b(i)  A(i,i1) .* b(i1)) ./ (A(i,i)  A(i,i1) .* A(i1,i)); for i=m1:1:1 X(i)= A(i,i+1) .* X(i+1) + b(i); end end there is another version of this code in wikipedia: Code:
function x = TDMAsolver(a,b,c,d) %a, b, c are the column vectors for the compressed tridiagonal matrix, d is the right vector n = length(b); % n is the number of rows % Modify the firstrow coefficients c(1) = c(1) / b(1); % Division by zero risk. d(1) = d(1) / b(1); % Division by zero would imply a singular matrix. for i = 2:n1 temp = b(i)  a(i) * c(i1); c(i) = c(i) / temp; d(i) = (d(i)  a(i) * d(i1)) / temp; end d(n) = (d(n)  a(n) * d(n1))/( b(n)  a(n) * c(n1)); % Now back substitute. x(n) = d(n); for i = n1:1:1 x(i) = d(i)  c(i) * x(i + 1); end end you can find some explanation about TDMA and find this code in C and Fortran90 in : HTML Code:
http://en.wikipedia.org/wiki/Tridiagonal_matrix_algorithm 

March 27, 2012, 11:33 
thank you very much,that is what I need

#2 
New Member
Y. Yang
Join Date: Mar 2010
Location: Miami, United States
Posts: 28
Rep Power: 8 
thank you very much,that is what I need


April 6, 2012, 15:27 

#3 
Member
Amin Shariat KHah
Join Date: Apr 2011
Location: Shiraz
Posts: 86
Rep Power: 7 
You're welcome


March 2, 2016, 09:04 
2D line by line iterative TDMA

#4 
New Member
farah souayfane
Join Date: Jan 2016
Posts: 3
Rep Power: 2 
hello,
I am working on modelling phase change including the effect of convection in liquid phase. I want to write my program on MATLAB. Actually I am a beginner in MATLAB. I need help to write the 2D line by line TDMA iterative solution of my equations ( 2D transient) Can any one provide me with a code to 2D TDMA line by line iterative algorithm for the solution of 2D discretized equations. Thank you in advance 

March 2, 2016, 11:12 

#5 
New Member
Join Date: Mar 2014
Posts: 12
Rep Power: 4 
I cannot provide a Matlab code, but I can provide some advice.
If your stencil looks like this , you can treat the W and E values explicitly (use the values from the previous time/iteration step). If you are solving , include the W and E values in your solution vector and fill your matrix with the coefficients of unknowns along a NorthSouth line. You can step W to E in the domain along NS lines. 

March 4, 2016, 03:02 
2D line by line iterative TDMA

#6 
New Member
farah souayfane
Join Date: Jan 2016
Posts: 3
Rep Power: 2 
Thank you for your reply,
Actually I have a problem in how to define the temperature field in Matlab code, is it a vector or a matrix?? for example in my 2D grid I have T(1,1) T(1,2) .....T(n,m) When I use A line by line TDMA the pentadiagonal matrix became tridiagonal. I am sweeping from west to east along NS lines so for a determined line ( for a specified n ) I have to calculate all the values of temperature for m going from 2 to m ( for example if n=2 (x direction ) so I calculate T(2,2) T(2,3) T(2,4) T(2,5).....(T2,m) and then I sweep to n=3 ....) . here I don't understand how can I define the temperature field in Matlab ?? Last edited by fsouayfane; March 4, 2016 at 03:05. Reason: add title 

March 4, 2016, 10:42 

#7  
New Member
Join Date: Mar 2014
Posts: 12
Rep Power: 4 
Quote:
Quote:
Quote:
Does that make any sense? Does that help? 

Thread Tools  
Display Modes  


Similar Threads  
Thread  Thread Starter  Forum  Replies  Last Post 
The FOAM Documentation Project  SHUTDOWN  holger_marschall  OpenFOAM  242  March 7, 2013 13:30 
How to make code run in parallel?  cwang5  OpenFOAM Programming & Development  1  May 30, 2011 04:47 
Open Source Vs Commercial Software  MechE  OpenFOAM  28  May 16, 2011 11:02 
Error in CFX Solver  Leuchte  CFX  5  November 6, 2010 07:12 
Small 3D code  Zdravko Stojanovic  Main CFD Forum  2  July 19, 2010 10:11 