قصد دارم تو چند پست آینده چند تا کد فرترن که برای دانشجوهای این گرایش مفید هست رو بزارم. اول کد  دیفیوژن دو بعدی که خودم نوشتم رو میزارم. امیدوارم مفید باشه.

پ.ن : تمام این کدها تو اینترنت نیز موجوده ولی همیشه بهتره کد رو خودتون بنویسید چون وقتی که شما میخواید بزاری تا متوجه بشید طرف چه کار کرده معمولا بیشتر از وقتی هست که خودتون بخواید اون کد رو بنویسید.

program diffusion
implicit none
real::dx,dt,l,h
integer::i,j,m,n
real,allocatable:: t(:),x(:),temp(:,:)
write(*,*) 'please enter l , n , h,m'
read(*,*) l , n , h , m
allocate(t(0:m),x(0:n),temp(0:n,0:m))
dx=l/n
dt=0.4*dx**2
call mesh(dx,dt,l,h,n,m,x,t)
call tem_boundary(dx,dt,l,h,n,m,x,t,temp)
call tem(dx,dt,l,h,n,m,x,t,temp)
open(5,file="diffu.plt")
write(5,*) "variables=x,t,temp zone i=",n-1,"j=",m-1
j=1
 do while(j<m)
 i=1
do while(i<n)
 write(5,*) x(i),t(j),temp(i,j)
  i=i+1
 end do
    j=j+1
 end do
end program
subroutine mesh(dx,dt,l,h,n,m,x,t)
implicit none
real::dx,dt,l,h,x(0:n),t(0:m)
integer::i,j,n,m
i=0
do while(i<n+1)
x(i)=i*dx
i=i+1
end do
j=0
do while(j<m+1)
t(j)=j*dt
j=j+1
end do
end subroutine
subroutine tem_boundary(dx,dt,l,h,n,m,x,t,temp)
implicit none
real::dx,dt,l,h,x(0:n),t(0:m),temp(0:n,0:m)
integer::i,j,m,n
i=0
j=0
do while(i<1)
do while(j<m+1)
temp(i,j)=20
j=j+1
end do
i=i+1
end do
i=1
j=0
do while(j<1)
do while(i<n+1)
temp(i,j)=15
i=i+1
end do
j=j+1
end do
i=n
j=0
do while(i<n+1)
do while(j<m+1)
temp(i,j)=20
j=j+1
end do
i=i+1
end do
end subroutine
subroutine tem(dx,dt,l,h,n,m,x,t,temp)
implicit none
real::dx,dt,l,h,x(0:n),t(0:m), temp(0:n,0:m)
integer::i,j,m,n
j=1
do while(j<m+1)
i=1
do while(i<n)
temp(i,j)=temp(i,j-1)+((dt*(temp(i-1,j-1)+temp(i+1,j-1)-2*temp(i,j-1)))/(dx**2))
i=i+1
end do
j=j+1
end do
end subroutine