C=============================================================================== SUBROUTINE CTVMsv (WHICH, WHERE) C=============================================================================== C Silly, trivial little routine to save, interchange, or restore the results C of a CTVMFT fit. C WHICH < 0 Copy the CTVMFT fit results to local storage for preservation C = 0 Interchange the stored fit result with that in the CTVMFT common C > 0 Overwrite the CTVMFT fit result with the stored result C WHERE An index specifying where to store or where to extract fit C information. C------------------------------------------------------------------------------- IMPLICIT NONE #include INTEGER IJKLMN PARAMETER (IJKLMN = MAXDIM*(MAXDIM+1)) INTEGER WHICH, WHERE INTEGER I INTEGER SAVRSL(UDIM,4), SLUSH(UDIM) DOUBLE PRECISION UMAT(MAXDIM*(MAXDIM+1),4), > BLUSH(MAXDIM*(MAXDIM+1)) REAL SCREAM, MINUS, ZERO SAVE SAVRSL, UMAT, MINUS,ZERO DATA MINUS /-1.0/, ZERO /0.0/ C============ save or restore existing constrained fit results =============== IF (WHERE.LE.0 .OR. WHERE.GT.4) THEN PRINT 1000, WHERE 1000 FORMAT (' CTVMsave; nonsense WHERE!' ) SCREAM = SQRT(MINUS) / ZERO return END IF IF (WHICH) 10,20,30 C save the existing fit from CTVMFq,r 10 CONTINUE DO I=1,UDIM SAVRSL(I,WHERE) = UVWXYZ(I) END DO DO I=1,IJKLMN UMAT(I,WHERE) = VMAT(I,1) END DO GO TO 100 C flip the stored fit with that in CTVMFq,r 20 CONTINUE DO I=1,UDIM SLUSH (I) = SAVRSL(I,WHERE) SAVRSL(I,WHERE) = UVWXYZ(I) UVWXYZ(I) = SLUSH (I) END DO DO I=1,IJKLMN BLUSH(I) = UMAT(I,WHERE) UMAT (I,WHERE) = VMAT(I,1) VMAT(I,1) = BLUSH(I) END DO GO TO 100 C restore the CTVMFq,r contents 30 CONTINUE DO I=1,UDIM UVWXYZ(I) = SAVRSL(I,WHERE) END DO DO I=1,IJKLMN VMAT(I,1) = UMAT(I,WHERE) END DO 100 CONTINUE RETURN END