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


Writing numeros_globales.f90

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


Overwriting polinomio_con_subrutina_Nglobales.f90

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


Writing checa_parametros.f90

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


Writing polinomio.f90

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


Writing aloja_memoria.f90

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


Writing discretiza_dominio.f90

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


Writing leer_parametros.f90

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


Writing salvar_datos.f90

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 [ ]: