مهندسی آلودگی هوا

فرترن cfd

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

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

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

 

 

   + مصطفی کلهر ; ۱٠:۳٥ ‎ق.ظ ; سه‌شنبه ۸ اسفند ۱۳٩۱
comment نظرات ()