In [1]:
%%file numeros_globales.f90
module numeros_globales
real(kind=8),allocatable, dimension(:) :: x,p
integer Nx
real(kind=8) dx
real(kind=8) a0,a1,a2,a3,a4,xmin,xmax
end module
In [2]:
%%file polinomio_con_subrutina_Nglobales.f90
program polinomio_con_subrutina_Nglobales
use numeros_globales
implicit none
call leer_parametros()
call aloja_memoria()
call checa_parametros()
call discretiza_dominio()
call polinomio()
call salvar_datos('salida')
end program
In [3]:
%%file checa_parametros.f90
subroutine checa_parametros()
use numeros_globales
implicit none
if (xmax.le.xmin) then
print *,'Error xmax<=xmin'
stop
end if
end subroutine checa_parametros
In [4]:
%%file polinomio.f90
subroutine polinomio()
use numeros_globales
implicit none
p=a0+a1*x+a2*x**2+a3*x**3+a4*x**4
end subroutine polinomio
In [ ]:
%%file polinomio_con_subrutina_Nglobales.f90
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!-->Declara las variables
module numeros_globales
real(kind=8),allocatable, dimension(:) :: x,p
integer Nx
real(kind=8) dx
real(kind=8) a0,a1,a2,a3,a4,xmin,xmax
end module
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Inicio programa!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
program polinomio_con_subrutina_Nglobales
use numeros_globales
implicit none
call leer_parametros()
call aloja_memoria()
call checa_parametros()
call discretiza_dominio()
call polinomio()
call salvar_datos('salida')
end program
!!!!!!!!!!!!!!!!!!fin del programa!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!comienzo de subrutinas!!!!!!!!!!!!!!!!!!!!!!!!!
subroutine checa_parametros()
use numeros_globales
implicit none
if (xmax.le.xmin) then
print *,'Error xmax<=xmin'
stop
end if
end subroutine checa_parametros
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
subroutine polinomio()
use numeros_globales
implicit none
p=a0+a1*x+a2*x**2+a3*x**3+a4*x**4
end subroutine polinomio
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
subroutine aloja_memoria()
use numeros_globales
implicit none
allocate(x(0:Nx),p(0:Nx))
end subroutine aloja_memoria
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
subroutine discretiza_dominio()
use numeros_globales
implicit none
integer i
dx=( xmax-xmin)/dble(Nx)
do i=0,Nx
x(i)=xmin+dx*dble(i)
!print *,i,x(i)
end do
end subroutine discretiza_dominio
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
subroutine leer_parametros()
use numeros_globales
implicit none
!!!-->para leer datos desde un archivo de parámetros (.par)
open(10,file='input.par')
read(10,*) xmin
read(10,*) xmax
read(10,*) Nx
read(10,*) a0
read(10,*) a1
read(10,*) a2
read(10,*) a3
read(10,*) a4
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!--> Se cierra el archivo que lees
close(10)
end subroutine leer_parametros
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
subroutine salvar_datos(nombre_archivo)
use numeros_globales
implicit none
integer i
character(len=30) nombre_archivo
open(11,file=nombre_archivo)
write(11,*) '# x p(x)'
do i=0,Nx
!print *,x(i),p(i)
write(11,*) x(i),p(i),x(i)*p(i)
end do
close(11)
end subroutine
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
In [5]:
%%file aloja_memoria.f90
subroutine aloja_memoria()
use numeros_globales
implicit none
allocate(x(0:Nx),p(0:Nx))
end subroutine aloja_memoria
In [6]:
%%file discretiza_dominio.f90
subroutine discretiza_dominio()
use numeros_globales
implicit none
integer i
dx=( xmax-xmin)/dble(Nx)
do i=0,Nx
x(i)=xmin+dx*dble(i)
!print *,i,x(i)
end do
end subroutine discretiza_dominio
In [7]:
%%file leer_parametros.f90
subroutine leer_parametros()
use numeros_globales
implicit none
!!!-->para leer datos desde un archivo de parámetros (.par)
open(10,file='input.par')
read(10,*) xmin
read(10,*) xmax
read(10,*) Nx
read(10,*) a0
read(10,*) a1
read(10,*) a2
read(10,*) a3
read(10,*) a4
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!--> Se cierra el archivo que lees
close(10)
end subroutine leer_parametros
In [8]:
%%file salvar_datos.f90
subroutine salvar_datos(nombre_archivo)
use numeros_globales
implicit none
integer i
character(len=30) nombre_archivo
open(11,file=nombre_archivo)
write(11,*) '# x p(x)'
do i=0,Nx
!print *,x(i),p(i)
write(11,*) x(i),p(i),x(i)*p(i)
end do
close(11)
end subroutine
In [ ]:
!ls
In [ ]:
%%file input.par
-3.0 !xmin
3.0 !xmax
1000 !Nx
0.1 !a0
0. !a1
1. !a2
0. !a3
-0.25 !a4
In [ ]: