2013-04-10 Jennifer Scott Version 1.3.0. Fix some undefined variable errors found by nagfor. 2009-03-06 Version 1.2.0. To allow repeated calls of MA42_FACTORIZE, do not deallocate data%LAST when forward elimination pass is complete. 2005-01-18 Version 1.1.0. In MA42N/ND changed IF (NMAXE.EQ.1 .OR. LAST(MFR).GE.0) THEN into two separate tests (problem if NMAXE = 1 and system is singular, MFR may be too large) 2004-07-12 Version 1.0.0. Version numbering added. 2001-01-?? Edited MA42_FILES to avoid unnecessary copying on INQUIRE 2001-01-?? Added extra message if -16 returned and LENBUF not present. 2001-01-?? Error flag -25 set if a routine is called after an error has been returned. 2001-01-?? I have added some pointer assignments (see BUFU_TEMP etc). This is because some compliers produce very inefficient code when pointer components of a derived data type are used in a subroutine call and when array sections are used. When we replace pointer components of the derived data type by allocatable arrays (we plan to do this when allowed), we will need to get rid of these pointer assignments. 1999-11-29 Error in call to MA42H from MA42N when KPRE>0 or LFRE>0. Also, changed second dimension of FA in MA42G from NFRONT to * (NFRONT causes error when MA42G called from MA42N when KPRE>0 or LFRE>0). 1999-08-06 Error in MA42D/DD. If direct access files not used then JFLAG not set so at end of subroutine jump to return (in MA42E/ED jump already there.) 1999-05-20 Error found in MA42D/DD. Replace IBUFR(DIMIBF-IRECD+1:DIMIBF) = IBUFR(IR2+1:IR2+IRECD) by DO I = IRECD,1,-1 IBUFR(DIMIBF-IRECD+I) = IBUFR(IR2+I) END DO and BUFR(DIMBUF-IPNT+1:DIMBUF) = BUFR(JR2+1:JR2+IPNT) by DO I = IPNT,1,-1 BUFR(DIMBUF-IPNT+I) = BUFR(JR2+I) END DO 1999-04-28 Error in flop count for static condensation variables corrected. In MA42O IF (NMAXE.GT.1) OPS = OPS + REAL(NUMPIV* (NVAR-1)* (NVAR-1)*2) changed to IF (NMAXE.GT.1) THEN DO 360 J = 1,NUMPIV OPS = OPS + REAL((NVAR-J)* (MVAR-J)*2) 360 CONTINUE END IF NOTE: has no effect for equation entry (since NUMPIV=1) 1998-12-18 In MA42F/FD changed INFO(10) = MKEY(1) INFO(11) = MKEY(2) INFO(12) = MKEY(3) to INFO(10) = MAX(1,MKEY(1)) INFO(11) = MAX(1,MKEY(2)) ... this only if L factored stored INFO(12) = MAX(1,MKEY(3)) (since otherwise can get data%BUFFERS equal to zero when error -17 return ... no use for resetting LENFLE) 1998-10-22 Modified to exploit the zeros within the frontal matrix. Added parameter data%EXPLOIT to control this. Also, extra parameter data%PIVOT_SIZE in MA42F allows us to wait until sufficiently many variables can be eliminated at once (as in cache paper). data%PIVOT_SIZE ALSO USED IN MA42_SYMBOLIC. We have set this parameter to 1 (as this is equivalent to HSL12 but we would recommend using a larger value eg 16) 1997-09-04 In MA42_SYMBOLIC, if called from within MA42B (because frontsize too small), use INFO values to initialise data%FILE_BOUND and allow updated lower bounds on the filesizes to be returned to the user. 1997-03-14 In MA42F added a test so that MA42N is only called if some variables have become fully since the assembly of the most recent elt/equ. 1997-01-20 In MA42_FACTORIZE, avoid zeroing the solution vector X if the number of variables in the problem is equal to the largest integer used to index a variable (i.e if NDF = data%private%INFO(3)). 1996-11-11 After each call to MA42D and MA42E, check the error flag and write error message if appropriate. 1994-11-30 Original version.