tag react inputs form input fortran

input - react - Error de falta de coincidencia de tipos que compila el código F77 antiguo



select form react (2)

Tome nota de los mensajes de error, los consejos generalmente son buenos. Sin embargo, los errores a menudo en cascada, causando otros problemas incluso en el código que está bien, y esa puede ser la razón por la que ve tantos mensajes. Mi consejo es que corrija el primer error enumerado e intente ejecutar nuevamente.

Estos son los errores que has mostrado en tu publicación:

  1. Paridad intrínseca: el problema aquí es que el argumento no es una matriz de lógicos. Mire de cerca, parece que hay un error tipográfico ... busque un paréntesis perdido. Solucionarlo y la función debería devolver el resultado esperado. Intenta ejecutar el código. Los otros errores pueden desaparecer. Ver nota
  2. No coincide el tipo: el mensaje indica claramente que se pasó un número entero (evidentemente una sola precisión) pero el código espera una real (evidentemente doble precisión). Veo que se usa tipeo implícito, por lo que puede ser la fuente de este error en particular. Recomiendo que sigas ATAU través del programa y sigas lo que le sucede.

Además, vamos a la NASA - Mole Scat?

Nota: Ah, ya veo: la parity es una función definida en el código fuente MOLSCAT en la línea 11691. No es la parity de la biblioteca estándar Fortran (actual, 2008). Se define con:

FUNCTION PARITY(I) IMPLICIT DOUBLE PRECISION (A-H,O-Z) PARITY=1.D0 IF((I/2)*2-I.NE.0) PARITY=-1.D0 RETURN END

Aquí hay un conflicto de nombre entre el código fuente y el intrínseco en el estándar F2008. No estoy seguro de cómo deshabilitar esto para la compatibilidad con F77 que no sea cambiar el nombre de la función en el código fuente. Es posible que pueda colocar una nueva línea en el programa principal: external parity para usar la función tal como se define en MOLSCAT ... Aquí hay una discusión relevante, tal vez alguien como @SteveLionel tiene alguna información.

Como nota al margen, no tengo idea de por qué esta es una función útil. ¿Cuándo volvería -1.D0 ?

Quiero compilar un código computacional llamado MOLSCAT que usa datos NAMELIST como un archivo de entrada como Test . De acuerdo con el código principal, el compilador lee la entrada en el canal 5. Puse el archivo de entrada en la carpeta del código principal y compilé el código principal en la versión de Linux de Simply Fortran. Pero con o sin el archivo de entrada, da la salida

============================================================== Generating Makefile... Okay ============================================================== Compiling /home/farhad/Downloads/v14.f - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /home/farhad/Downloads/v14.f:2381:17: 1 PARITY(IEXCH+JLEV(2*NLEV+I)+JTOT+JZCSFL*JLEV(IOFF+I)).LE.0.D0) 1 Error: ''mask'' argument of ''parity'' intrinsic at (1) must be LOGICAL - - - - - - - - -- - - - - -- - - - -- - - - - -- - -- -- - - -- - - /home/farhad/Downloads/v14.f:10720:39: 4000 CALL CPL24(N,MXLAM,LAM,NLEV,JLEV,JLEV,J,MVALUE,VL,PRINT,LFIRST) 1 Warning: Type mismatch in argument ''atau'' at (1); passed INTEGER(4) to REAL(8) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Error: Last command making (build/v14.o) returned a bad status Error: Make execution terminated * Failed *

¿Alguien sabe cuál es el problema?


re: la segunda advertencia de desajuste de tipo. Parecen estar pasando deliberadamente símbolos al tipo diferente:

CALL CPL24(N,MXLAM,LAM,NLEV,JLEV,JLEV,J,MVALUE ....

nótese el conjunto entero repetido jlev en pos 5 y 6, luego en el sub:

ENTRY CPL24(N,MXLAM,LAM,NLEV,JLEV,ATAU,J,MVAL ..

tienen un número entero y variables ficticias reales en esas posiciones. Sin analizar todo el código, creo que esto es intencional y debes ignorar la advertencia.

Otra cosa que noto, en todo el lugar ellos dimensionan las matrices 2

INTEGER J(N),L(N),LAM(2),JLEV(2) INTEGER PRINT DIMENSION ATAU(2),VL(2)

Estoy bastante seguro (habiendo visto esto antes) de que en realidad se supone matrices de tamaño (esencialmente contando con el viejo compilador que no hace la comprobación de límites). Eso está bien, pero significa que no podrás hacer límites verificando este código. ¿Alguna vez los veteranos adivinan por qué usaron 2 ?