!------------------------------------------------------------------------------- ! 20070221 Adaptación al compilador gfortran de GNU !------------------------------------------------------------------------------- El archivo modsys_ldlt_cp.for contiene las subrutinas diseñadas para los compiladores Digital Fortran 77 (OpenVMS) y Compaq Fortran 90 (True64Unix) (y otros compatibles con los anteriores). Se crea el archivo modsys_ldlt_cp.f, adaptado al compilador GFortran de GNU. El compilador GFortran de GNU no contempla todavía la opción D_LINES ni la función intrínseca específica JMAX0(). Por estos motivos: 1) en el archivo modsys_ldlt_cp.f se prescinde de la opción D_LINES (con lo que las subrutinas sólo pueden funcionar en precisión doble) y 2) las llamadas a la función intrínseca específica JMAX0() han sido sustituidas por llamadas a la función intrínseca genérica MAX(). !------------------------------------------------------------------------------- ! 20070221 Correccion de un error de programacion !------------------------------------------------------------------------------- En la subrutina SLE$CalcularReacciones() las instrucciones if (i.gt.1) then lpii=iabs(lp(i)) lpi0=lpii-i lsbi=lpii-(iabs(lp(i-1))+1) do j=i-lsbi,i ! zona inferior lpij=lpi0+j tr(iv)=tr(iv)+a(lpij)*b(j) enddo endif han sido sustuidas por lpii=iabs(lp(i)) tr(iv)=tr(iv)+a(lpii)*b(i) ! diagonal if (i.gt.1) then lpi0=lpii-i lsbi=lpii-(iabs(lp(i-1))+1) do j=i-lsbi,i-1 ! zona inferior lpij=lpi0+j tr(iv)=tr(iv)+a(lpij)*b(j) enddo endif De esta forma se calcula correctamente la reacción correspondiente al primer grado de libertad cuando cuando su valor está prescrito. Tal y como estaba programado anteriormente no se tenía en cuenta el término a11*x1 al calcular la reacción R1. Nota: El error que se ha corregido sólo se podía materializar cuando el primer grado de libertad estaba coaccionado con un valor prescrito no nulo. Esta circunstancia es poco frecuente en programas de aplicación por lo que el error no se había detectado con anterioridad. !------------------------------------------------------------------------------- ! 20011105 Correccion de un error de programacion !------------------------------------------------------------------------------- En la subrutina SLE$Factorizar_LDLt() las instrucciones lpkk=iabs(lp(k)) if (a(lpkk).eq.cero) call SLE$FError(' pivot nulo en fila:',k) han sido sustuidas por if (lp(k).gt.0) then lpkk=iabs(lp(k)) if (a(lpkk).eq.cero) call SLE$FError(' pivot nulo en fila:',k) endif De esta forma se permite la existencia de un pívot nulo en la primera fila de la matriz de coeficientes cuando el valor del primer grado de libertad está prescrito. Esta corrección evita que el programa se detenga con la condicion de error ' SLE> pivot nulo en fila 1' cuando el primer grado de libertad no está determinado por los restantes grados de libertad del sistema, pero su valor está prescrito por las condiciones de vinculación. Nota: El error que se ha corregido sólo se producia en circunstancias exóticas, y sólo afectaba al primer grado de libertad del sistema. !------------------------------------------------------------------------------- ! 20011015 Cambio de nombre del programa de comandos que crea la libreria !------------------------------------------------------------------------------- El archivo MAKELIB.COM ha pasado a llamarse MAKELIB.VMS para evitar conflictos en los PCs (los ficheros con la extensión ".com" son ficheros de comandos de windows). Por tanto, para ejecutar este programa de comandos en VMS hay que teclear @makelib.vms Nota: Nótese que antes no era necesario especificar la extensión. !------------------------------------------------------------------------------- !------------------------------------------------------------------------------- !-------------------------------------------------------------------------------