Você está na página 1de 4

program trabalhoMCFT1diferencascentrais ! primeiro teste de MCFT !

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

! Alocao de memria para os vetores distncia e velocidade: allocate(x(0:nv+1),t(0:nv+1))

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

if (i==nv) then ae = 0.0d0 sp = -((2*(de)-(f))) su = (2*(de)-(f))*tb 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

do i =0, nv+1 write(2,3) x(i),t(i) 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

! Formatos utilizados: 1 format(37x,i6) 2 format(37x,f10.0) 3 format(1pe12.5,2x,1pe12.5) 4 format(1pe12.5,2x,1pe12.5)

write(*,*) 'pronto resolvido' stop end

Você também pode gostar