Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program explicito
- implicit none
- real (8):: dt, dx, r,x
- real(8), allocatable:: a(:,:)
- real(8), parameter :: k=80.2, c=447000, d=7870, tmax=1E7 ! d es densidad
- integer, parameter :: p=100 ! Hay que considerar al cero en los intervalos de posición
- integer:: i, t
- !Debo tener en cuenta que t es la CANTIDAD de PASOS TEMPORALES, y NO el tiempo final
- !Si me dan un r y un dx, tendré que calcular dt y dividir al tiempo final por dt para sacar la cantidad de pasos t
- !Ingrese el intervalo de tiempo'
- dt = 220.
- !t = tmax/dt
- !Ingrese el intervalo de posición '
- dx = 5E-3
- ! Si ya me dan r , directamente reemplazo en el valor de r
- !r=0.4
- !dt = r*(c*d*(dx**2))/k
- t = floor(tmax/dt)+1
- r= (k*dt)/(c*d*(dx**2))
- write(*,*) r, dt, dx!, t
- allocate ( a(p, t))
- a = matriz(dx,t,r)
- open (unit=2,file='resultadosExplicito.dat',status='replace')
- write(*,*) 'La matriz a quedó (i: posición, j: tiempo)'
- write(2,*) 'La matriz a quedó (i: posición, j: tiempo)'
- x = 0.
- do i=1,p
- x = x + dx
- !write(*,'(21f8.2)') a(i,:)
- write(2,'(5f8.2)') x, a(i,1), a(i,2), a(i,4), a(i,6)
- end do
- close (2,status='keep')
- deallocate (a)
- !call system ("gnuplot -persist 'Script.p'")
- !======================================================================
- Contains
- !======================================================================
- function matriz(dx,t,r)
- real(8):: a(p,t), dx, x, matriz(p,t),r
- integer :: i,j, t
- !Armo la matriz con las condiciones iniciales (CI)
- a (1, :)= 273. ! Condición de contorno (CC)
- a( p, :)=473. ! Condición de contorno (CC)
- !Esto es para cuando hay una distribución inicial!
- !x=0
- !i=1
- !do while ((0<=x) .and. (x<=1))
- ! a(i, 1) = 100*x
- ! i=i+1
- !x= x + dx
- !end do
- !do while ((1<=x) .and. (x<=2))
- ! a(i, 1)= 100*(2-x)
- ! i=i+1
- !x=x+dx
- ! end do
- do i=2,p-1
- a(i,1)=473. !Cuando la distribución es uniforme
- end do
- do j=2,t
- do i=2,p-1
- a(i,j)= r*(a(i+1, j-1) + a(i-1, j-1)) + (1-2*r)*a (i, j-1)
- end do
- if (a(41,j)<358.) then
- write(*,*) 'En el extremo más próximo al extremo a 0ºC, se tarda ',j*dt,'segundos para llegar a 85ºC'
- read*
- end if
- end do
- matriz = a
- end function
- end program explicito
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement