Fortran - Como interlazar Fortran 90 en el excel? Requiero hacer una optimizacion de unas rutina de calculo

 
Vista:

Como interlazar Fortran 90 en el excel? Requiero hacer una optimizacion de unas rutina de calculo

Publicado por Marco Delgadillo (1 intervención) el 05/01/2017 00:48:17
Tengo una rutina de fortran 90 donde tengo varios puntos de temperatura que serian mis valores de entrada para que el programa corra. De respuesta optengo datos de presion calculados por la rutina. Pero ahora necesito hacer una optimizacion y necesito hacer muchas corridas y me lleva mucho tiempo hacerlas punto por punto. Mi idea es interlazar fortran 90 a excel para poder hacer un solver directo y ahorrarme tiempo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Zip

Como interlazar Fortran 90 en el excel? Requiero hacer una optimizacion de unas rutina de calculo

Publicado por Zip (13 intervenciones) el 01/02/2017 00:12:37
1.- Debes generar una biblioteca dinámica (dll) con las rutinas en fortran. Para ello usa el siguiente comando de compilación (dependiendo de tu compilador modificar el comando, para este caso es con gfortran):
gfortran -fno-underscoring -shared -o nombrebiblioteca.dll nombrearchivocodigo.f90
2.- Para enlazar la biblioteca dinámica desde Excel (desde VBA) debes declararla a nivel de módulo con el siguiente comando:
Private Declare Sub NombreRutinaFortran Lib "Ruta a nombrebiblioteca.dll" Alias "NombreRutinaExcel" (parámetros de entrada-salida declarados según sus tipos).
3.- Para llamarla desde Excel usa el siguiente código:
Call NombreRutinExcel(parámetros de entrada-salida).

Ejemplo:
El archivo integracion.f90 contiene dos rutinas; trapecios y simpson com parámetros de entrada-salida x, y, h, n (x, y reales y h, n enteros)
1.- compilación:
gfortran -fno-underscoring -shared -o integracion.dll integracion.f90
2.- declaración en Excel (desde VBA):
Private Declare Sub trapecios Lib "c:\...\integracion.dll" Alias "subtrapecios" (x As Single, y As Single, h As Integer, n As Integer)
Private Declare Sub simpson Lib "c:\...\integracion.dll" Alias "subsimpson" (x As Single, y As Single, h As Integer, n As Integer)
3.- Llamado desde Excel:
Call subtrapecios(x, y, h, n)
Call subsimpson(x, y, h, n)

Nota: en ocasiones no hay una transferencia transparente de los parámetros de entrada-salida desde VBA hasta fortran por lo que te recomiendo incluir una sentencia que invalide los errores que se pudiera generar al llamar la rutina. Para esto usa la sentencia On Error Resume Next en tu código de la macro en VBA.

Espero te sirva. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar