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

 
نویسنده: مصطفی کلهر - سه‌شنبه ٢٢ اسفند ۱۳٩۱

دوستان از طریق آدرس www.apee.ir نیز میتوانند به این وبلاگ دسترسی داشته باشند. به زودی وبلاگ بروی سایت منتقل خواهد شد و مطالب تخصصی مهندسی آلودگی هوا و مهندسی محیط زیست روی سایت قرار خواهد گرفت.

همچنین دامنه های www.iranepa.com و www.iranepa.ir نیز برای دسترسی به سایت جدید قابل استفاده خواهدبود.




نویسنده: مصطفی کلهر - دوشنبه ٢۱ اسفند ۱۳٩۱

MODULE C
IMPLICIT NONE
DOUBLE PRECISION, ALLOCATABLE::X(:),Y(:),CONVECT(:,:,:)
DOUBLE PRECISION::L,H,TOTAL,DX,DY,DT,U,V
CHARACTER(4)::KK
INTEGER::I,J,K,M,N,NSTEP
END MODULE
PROGRAM CONVECTER
USE C
IMPLICIT NONE
WRITE(*,*) 'PLESE ENTER L,N,H,M,TOTAL,NSTEP,U,V'
READ(*,*) L,N,H,M,TOTAL,NSTEP,U,V
ALLOCATE(X(N),Y(M),CONVECT(N,M,NSTEP))
CALL MESH
CALL INI
CALL BOUND
CALL TEM
CALL PLOT
END PROGRAM


SUBROUTINE MESH ()
USE C
IMPLICIT NONE
DX=L/(N-1)
DY=H/(M-1)
DT=TOTAL/NSTEP
DO I=1,N
X(I)=(I-1)*DX
END DO
DO J=1,M
Y(J)=(J-1)*DY
END DO
END SUBROUTINE

 

SUBROUTINE INI()
USE C
IMPLICIT NONE
DO J=2,M
DO I=2,N
CONVECT(I,J,1)=0
END DO
END DO
END SUBROUTINE

SUBROUTINE BOUND()
USE C
IMPLICIT NONE
DO K=1,NSTEP
DO J=2,M
CONVECT(1,J,K)=0.4
CONVECT(N,J,K)=0.4
END DO
END DO
DO K=1,NSTEP
DO I=1,N
CONVECT(I,1,K)=0.4
CONVECT(I,M,K)=0.4
END DO
END DO
END SUBROUTINE


SUBROUTINE TEM()
USE C
IMPLICIT NONE
DO K=1,NSTEP-1
DO J=2,M-1
DO I=2,N-1
CONVECT(I,J,K+1)=-(U/(DX*2))*(CONVECT(I,J,K)-CONVECT(I-1,J,K))-(V/(DY*2))*(CONVECT(I,J,K)-CONVECT(I,J-1,K))+CONVECT(I,J,K)
END DO
END DO
END DO
END SUBROUTINE


SUBROUTINE PLOT()
USE C
IMPLICIT NONE
DO K=1,NSTEP-1
WRITE(KK,1) 1000+K
1 FORMAT (I4)
OPEN(1,FILE="CONVECT" //TRIM(KK)//".PLT")
WRITE(1,*) "VARIABLE X,Y,CONVECT ZONE I=" , N ,"J=" , M
DO J=1,M
DO I=1,N
WRITE(1,*) X(I),Y(J),CONVECT(I,J,K)
END DO
END DO
END DO
END SUBROUTINE




نویسنده: مصطفی کلهر - یکشنبه ٢٠ اسفند ۱۳٩۱

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

 

 

MODULE C
IMPLICIT NONE
REAL, ALLOCATABLE::X(:),Y(:),Z(:),TEMP(:,:,:,:)
REAL::L,H,TOTAL,DX,DY,DT,ALPHA,TOLEZ,DZ
CHARACTER(4)::KK
INTEGER::I,J,K,P,M,N,NSTEP,NZ
END MODULE

PROGRAM TEMPER
USE C
IMPLICIT NONE
WRITE(*,*) 'PLESE ENTER L,N,H,M,TOTAL,NSTEP,ALPHA,TOLEZ,NZ'
READ(*,*) L,N,H,M,TOTAL,NSTEP,ALPHA,TOLEZ,NZ
ALLOCATE(X(N),Y(M),Z(NZ),TEMP(N,M,NZ,NSTEP))
CALL MESH
CALL INI
CALL BOUND
CALL TEM
CALL PLOT
END PROGRAM

SUBROUTINE MESH ()
USE C
IMPLICIT NONE
DX=L/(N-1)
DY=H/(M-1)
DZ=TOLEZ/(NZ-1)
DT=TOTAL/NSTEP
IF (ALPHA*DT/(DX*DY*DZ)>0.5) WRITE(*,*) 'INSTABILITY ERROR'
DO I=1,N
X(I)=(I-1)*DX
END DO
DO J=1,M
Y(J)=(J-1)*DY
END DO
DO K=1,NZ
Z(K)=(K-1)*DZ
END DO
END SUBROUTINE

SUBROUTINE BOUND()
USE C
IMPLICIT NONE
DO P=1,NSTEP
DO K=1,NZ
DO J=1,M
TEMP(1,J,K,P)=100
TEMP(N,J,K,P)=100
END DO
END DO
END DO
DO P=1,NSTEP
DO K=1,NZ
DO I=1,N
TEMP(I,1,K,P)=100
TEMP(I,M,K,P)=100
END DO
END DO
END DO
DO P=1,NSTEP
DO I=1,N
DO J=1,M
TEMP(I,J,1,P)=100
TEMP(I,J,NZ,P)=100
END DO
END DO
END DO
END SUBROUTINE

SUBROUTINE INI()
USE C
IMPLICIT NONE
DO K=2,NZ-1
DO J=2,M-1
DO I=2,N-1
TEMP(I,J,K,1)=0
END DO
END DO
END DO
END SUBROUTINE

SUBROUTINE TEM()
USE C
IMPLICIT NONE
DO P=1,NSTEP-1
DO J=2,M-1
DO I=2,N-1
DO K=2,NZ-1
TEMP(I,J,K,P+1)=(ALPHA*DT/(DX**2))*(TEMP(I+1,J,K,P)+TEMP(I-1,J,K,P))+(ALPHA*DT/(DY**2))*(TEMP(I,J+1,K,P)+TEMP(I,J-1,K,P))+(ALPHA*DT/(DZ**2))*(TEMP(I,J,K+1,P)+TEMP(I,J,K-1,P))+(1-(2*ALPHA*DT*((1/DX**2)+(1/DZ**2)+(1/DY**2))))*TEMP(I,J,K,P)
END DO
END DO
END DO
END DO
END SUBROUTINE

SUBROUTINE PLOT()
USE C
IMPLICIT NONE
DO P=1,NSTEP-1
WRITE(KK,1) 1000+K
1 FORMAT (I4)
OPEN(2,FILE="TEMP" //TRIM(KK)//".PLT")
WRITE(2,*) "VARIABLES= X,Y,Z,TEMP ZONE I=" , N ,"J=" , M, "K=" , NZ
DO K=1,NZ
DO J=1,M
DO I=1,N
WRITE(2,*) X(I),Y(J),Z(K),TEMP(I,J,K,P)
END DO
END DO
END DO
END DO
END SUBROUTINE




نویسنده: مصطفی کلهر - شنبه ۱٩ اسفند ۱۳٩۱

معادله پایین رو برای یک صفحه بخواید حل کنید کافیه در جهت Y اول مش بندی کنید بعد رابطه گسسته شده رو اصلاح کنید:

SUBROUTINE MESH

USE MODULE

IMPLICIT NONE

DY=H/M-1

DX=L/N-1

DO J=1,M

Y(J)=(J-1)*DY

END DO

DO I=1,N

X(I)=(I-1)*DX

END DO

END SUBROUTINE

برای معرفی کردن مش به برنامه تک پلات یک سابروتین به شکل زیر بنویسید

WRITE(1,*) 'VARIABLES X,Y,TEMP ZONE I=" , N, "J=" M

DO J=1,M

DO I=1,N

WRITE(1,*)  X(I) , Y(J) , TEM(I,J) , SAYER MOTAGHAYER HA

END DO

END DO

البته قبلش باید فایل 1 رو برای برنامه معرفی کرده باشید.