Escolar Documentos
Profissional Documentos
Cultura Documentos
resolve o problema de conveco-difuso 1D implicit none integer:: nv,itermax,i,iter real*8::ta,tb,l,u,ro,tol,dx,erro,sum,t_old,aw,ae,sp,su,ap,tal,dx_e,x_e,t_e,sig,res,delt,f,de real(kind = 8), allocatable :: x(:),t(:)
! Definio dos arquivos que sero utilizados: open(1,file='trab1_pro1.dat') open(2,file='temp1.dat') open(3,file='t1_exatas.dat') ! Leitura das variveis a partir do arquivo "trab1_pro1.dat": read(1,1) nv read(1,2) ta read(1,2) tb read(1,2) l read(1,2) tal read(1,2) ro read(1,2) u read(1,2) tol read(1,1) itermax
x(0) = 0.0d0 dx = l/nv x(1) = x(0) + dx/2 do i =2,nv x(i) = x(i-1) + dx end do ! i x(nv+1) = l t = 0.0d0 t(0) = ta t(nv+1) = tb iter = 1 erro = 1.0 f=ro*u de=tal/dx do while ( (iter <= itermax) .and. (erro >= tol) ) sum = 0.0d0
do i =1, nv aw = (de)+((f)/2) ae = (de)-((f)/2) su = 0.0d0 sp = 0.0d0 if (i==1) then aw = 0.0d0 sp = -(2*(de)+(f)) su = (2*(de)+(f))*ta end if
ap = ae +aw -sp t_old = t(i) t(i) = (aw*(t(i-1)) + ae*(t(i+1)) +su)/ap sum = sum + ( t(i) - t_old )*( t(i) - t_old ) end do erro = dsqrt(sum) iter = iter + 1 write(*,*) iter, erro end do
! Definio do passo (comprimento) para o clculo da soluo exata: dx_e = l/nv ! Inicializao do vetor distncia da soluo exata: x_e = 0.0d0 f=ro*u sig=f/tal res= (exp(sig*l))-1
delt=tb-ta ! Clculo e escrita da soluo exata no arquivo "v_exatas.dat": do i = 1,nv+1 t_e = ta+(delt*(((exp(sig*x_e))-1)/res)) write(3,4) x_e,t_e x_e = x_e + dx_e end do