resueltos raphson programas programación problemas newton metodo guia funciones ejemplos ciclos biseccion fortran

fortran - raphson - Falta la interfaz explícita para la subrutina



newton raphson fortran (2)

Coloque su subrutina File2Arr dentro del módulo MyData (y elimine el use mydata línea use mydata dentro de esa subrutina). Se compiló y funcionó para mí haciendo eso.

Solo quiero leer un archivo de texto de dos columnas con líneas variables en una matriz. La primera columna del archivo de texto es el tiempo en la unidad de segundo, y el segundo es la temperatura. Solo así:

1.1 10 2.1 20 3.2 30 4.2 40 5.3 50 6.3 60 7.4 70

A continuación está el código que escribo:

module myData type line_info real :: time real :: temp end type type datalink type(line_info) :: time_temp type(datalink), pointer :: next end type type(line_info), allocatable :: FileInfoArr(:) end module program Console1 use myData implicit none ! Variables type(line_info),allocatable :: time_temp_arr(:) !real,allocatable :: File2Arr(:) character (len=80) :: FileFullName="C:/t.txt" call File2Arr(FileFullName,time_temp_arr) End Program Console1 Subroutine File2Arr(FileFullName,InfoArray) use myData character (len=80) :: FileFullName type(line_info),allocatable :: InfoArray(:) type(datalink), pointer :: head type(datalink), pointer :: p integer error,size,i logical alive ! check if file exists inquire(file=FileFullName, exist=alive) if(alive==0) then write(*,*) FileFullName, "doesn''t exist." stop end if ! read file using pointer open(10, file=FileFullName, status="old", iostat=error) if(error/=0) then write(*,*) "open file fail!" stop end if allocate(head) nullify(head%next) p=>head size=0 !read(10,"(A80)") tempstr do while(.true.) read(10, fmt=*, iostat=error) p%time_temp if(error/=0) exit size=size+1 allocate(p%next, stat=error) ! add next line if(error/=0) then write(*,*) "Out of memory!" stop end if p=>p%next nullify(p%next) end do !save link info into an array allocate(InfoArray(size)) p=>head i=0 do while(associated(p%next)) i=i+1 InfoArray(i)=p%time_temp p=>p%next !write(*,*) FileInfoArr(i)%time, FileInfoArr(i)%temp end do End Subroutine

Cuando lo compilo, obtuve esto:

error # 8055: El procedimiento tiene un argumento ficticio que tiene el atributo ALLOCATABLE, ASYNCHRONOUS, OPTIONAL, POINTER, TARGET, VALUE o VOLATILE. La interfaz explícita requerida falta en la fuente original. [TIME_TEMP_ARR]

Alguna idea sobre cómo solucionar este error, gracias por cualquier ayuda.


Como alternativa a agregar su subrutina File2Arr a su módulo MyData , puede ponerla también directamente en su programa utilizando la palabra clave CONTAINS (aquí también puede eliminar el use mydata en la subrutina).