List of tools subroutines

Introduction

WHAT IF uses a large number of tools subroutines. These routines are partly written by us, partly adapted from public domain subroutine libraries. There is no copyright notice in these routines, and they can thus freely be copied to other programs. We expect however, that those people who copy these routines properly acknowledge us.

List of tools routines


================================================================================
OPERATIONS INVOLVING ONLY VECTORS
================================================================================
GVFANG (VECT1,VECT2)              Angle in radians between VECT1 and VECT2.
GVFDP3 (VECT1,VECT2)              GVFDP3 = VECT1 . VECT2 (dot product).
GVFDPN (VECT1,VECT2,NUM)          GVFDPN = VECT1 . VECT2 (idem).
GVFDV3 (VECT1,VECT2)              GVFDV3 = d(VECT1,VECT2) (distance).
GVFLNV (VECT)                     Returns length of VECT.
GVSAV3 (VECT1,VECT2)              VECT1 = VECT1 + VECT2.
GVSAVN (VECT1,VECT2,NUM)          VECT1 = VECT1 + VECT2.
GVSCP3 (VECT1,VECT2,VECT3)        VECT1 = VECT2 x VECT3 (cross product).
GVSNRV (VNORM,VECT1,VECT2,VECT3)  VNORM othogonal to plane(VECT1,VECT2,VECT3)
GVSAOR (VECT1,VECT2,LENGTH)       Make VECT1 orthogonal VECT2. 
GVSSCV (VECT,LENGTH)              Set length of VECT to LENGTH.
GVSNM3 (VECT)                     Normalizes VECT.
GVSNMN (VECT,NUM)                 Normalizes VECT.
GVSBV3 (VECT1,VECT2,VECT3)        VECT1 = VECT2 + VECT3.
GVSSV3 (VECT1,VECT2)              VECT1 = VECT1 - VECT2.
GVSTV3 (VECT1,VECT2,VECT3)        VECT1 = VECT2 - VECT3.
GVFTOR (VECT1,VECT2,VECT3,VECT4)  Returns torsion angle.

================================================================================
OPERATIONS INVOLVING ONLY MATRICES
================================================================================
GVFDET (RMAT)  returns the determinant of RMAT(3,3).
GVSREN (RMAT)  Renormalizes RMAT.
GVFGTA (RMAT)  Returns the angle that RMAT rotates.
GVSEIG (...)  Calculates eigen-values for GVSREN.
GVSTPS (RMAT,NUM)  RMAT gets transposed.
GVSTP2 (RMAT1,RMAT2,NUM)  RMAT1 = RMAT2 transposed.
GVS3X3 (RMAT1,RMAT2,RMAT3)  RMAT1 = RMAT2*RMAT3. 3*3 Matrices.
GVS4X4 (RMAT1,RMAT2,RMAT3)  RMAT1 = RMAT2*RMAT3. 4*4 Matrices.
GVSNX3 (RMAT1,RMAT2)  RMAT1 = RMAT1*RMAT2.
GVSNXN (RMAT1,RMAT2,RMAT3,NUM)  RMAT1=RMAT2*RMAT3.
GVSMIV (RMAT,NUM)  RMAT becomes RMAT-inv.
GVSMI2 (RMAT1,RMAT2,NUM)  RMAT1 becomes RMAT2-inv.
GVSMTM (RMAT1,RMAT2,NUM)  RMAT1 becomes RMAT2.
GVSMTA (RMAT,ANGLES)  If RMAT is proper rotation, return ANGLES.
GVSMXM (RMAT,ANGLE)  RMAT rotates ANGLE radians around X-axis.
GVSMYM (RMAT,ANGLE)  RMAT rotates ANGLE radians around Y-axis.
GVSMZM (RMAT,ANGLE)  RMAT rotates ANGLE radians around Z-axis.
GVSMGM (RMAT,VECT,ANGLE) RMAT rotates ANGLE radians around VECT.
GVSMTU (RMAT,NUM) RMAT is set to unity.
GVFIMU (RMAT) Returns TRUE is RMAT is unitary matrix.

================================================================================
OPERATIONS INVOLVING VECTORS AND MATRICES
================================================================================
GVSMV3 (VECT1,RMAT,VECT2)  VECT1=RMAT*VECT2.
GVSMVV (VECT,RMAT)  VECT=RMAT*VECT.
GVSMPV (VECT1,RMAT,VECT2)  VECT1=RMAT*VECT1+VECT2.
GVSMVP (VECT1,RMAT,VECT2)  VECT1=RMAT(INV)*(VECT1-VECT2).
GVSMVN (VECT1,RMAT,VECT2,NUM)  VECT1=RMAT*VECT2.
GVSMRM (RMAT,VECT,ANGLE)  RMAT rotates ANGLE radians around VECT.

================================================================================
OTHER VECTOR OPERATIONS 
================================================================================
GVFDPL (TVEC,RVEC,XYZ) d(XYZ,TVEC+p*RVEC) distance(point,line).
GVFPPL (TVEC,RVEC,XYZ,PXYZ) Returns distance of projection of XYZ on
        line TVEC+p*RVEC to TVEC. PXYZ becomes projection of XYZ on line.
GVSPTL (VECT1,VECT2,A,B,C) Given two vectors in a plane, return A,B, and
        C in l : A*X + B*Y = C.
GVSPLN (XYZ,NUM,A,B,C,D,RMS) Determine plane through NUM points.
GVSL3D (XYZ,NUM,DIRVEC,POSVEC) Get best line through points in 3D.

================================================================================
TEXT STRING MANIPULATION
================================================================================
GVFFCP (CROW,CHAR,NUM,LEN)  Returns element number of CHAR in CROW.
GVFISN (CHAR)  True if CHAR(*1) is a digit.
GVFICN (CHAR)  True if CHAR(*1) is a character in the alphabet or a digit.
GVFISC (CHAR)  True if CHAR(*1) is a character in the alphabet.
GVFSTC (NUM)  Returns the NUM-th character in the alphabet (or '0').
GVFWNB (CHAR)  Returns the value of the digit CHAR(*1), or -1.
GVFLEN (TEXT)  Returns the length of the non blank part of TEXT.
GVFPOS (TEXT,SUBTXT)  Returns the first location of SUBTXT in TEXT.
GVFPLS (TEXT,SUBTXT)  Returns the last location of SUBTXT in TEXT.
GVSCUC (TEXT)  Converts TEXT to upper case.
GVSCLC (TEXT)  Converts TEXT to lower case.
GVSWLC (TEXT)  Warn if TEXT contains lower case characters.
GVSSHN (TEXT,NUM)  Left shift by NUM characters of TEXT.
GVSSHL (TEXT)  Left shift of TEXT to remove leading blanks.
GVSSHR (TEXT,LEN)  Right shift of TEXT to remove trailing blanks.
GVSSTX (TEXT1,TEXT2) TEXT1=TEXT2.
GVSTCP (TEXT)  Removes blanks from TEXT by shifting characters to the left.
GVSRDB (TEXT)  Changes multiple blanks for single blanks.
GVSSLN (TEXT1,TEXT2) TEXT1 = Left shifted TEXT2.
GVSCPT (TEXT1,TEXT2,LEN,NUM)  TEXT1()(1:LEN)=TEXT2()(1:LEN)
GVSCPT (TEXT1,TEXT2,LEN,NUM)  TEXT1()(1:LEN)=TEXT2()(1:LEN)
GVSCPC (TEXT1,TEXT2)  TEXT1=TEXT1&TEXT2
GVSCCC (TEXT1,TEXT2,TEXT3)  TEXT1=TEXT2&TEXT3
GVSCC3 (TEXT1,TEXT2,TEXT3,TEXT4)  TEXT1=TEXT2&TEXT3&TEXT4
GVSCC4 (TEXT1,TEXT2,TEXT3,TEXT4,TEXT5)  TEXT1=TEXT2&TEXT3&TEXT4&TEXT5
GVST6C (TEXT1,TEXT2) Puts two text's concatenated at terminal.
GVSBOX (TEXT) Puts TEXT in a fancy box at the screen.
GVSBX2 (TEXT1,TEXT2) Puts TEXT1 and TEXT2 in a fancy box at the screen.

================================================================================
FILE HANDLING
================================================================================
GVFFOP (NUMUNT)  Returns TRUE if unit NUMUNT is open.
GVSOPF (TEXT,NUMUNT,TYPE)  Opens TEXT formatted sequential 
       at NUMUNT.
       TYPE = 'OLD' open old file.
       TYPE = 'NEW' open new file.
       TYPE = 'UNKNOWN' open old, if not exist, 
       open new file.
       TYPE = 'WARN' open new file, but warn if 
       it exists.
       TYPE = 'NOWARN' open new file, and do not 
       warn if it exists.
       If * is last character of TYPE, close unit 
       first.
GVSOUF (TEXT,NUMUNT,TYPE)  As GVSOPF for UNformatted files.
GVSOPS (TEXT,NUMUNT)  Opens unformatted sequential SCRATCH file.
GVSCLF (NUMUNT)  Closes unit NUMUNT.
GVSCPF (TEXT,NUMUNT)  Opens file TEXT for write at end at unit 
       NUMUNT. 
GVSCFF (FILE1,IUNIT1,FILE2,IUNIT2,IERR) Copies FILE2 into FILE1.
GVSCPL (TEXT,NUMUNT)  As GVSCPF but also writes contents of 
       TEXT to unit 6.
GVST56  Opens the terminal at units 5 and 6.
GVFISF (TEXT)  Becomes .TRUE. if file TEXT exists.
GVSMFN (TEXT1,TEXT2,DEFEXT)  Makes TEXT2 a proper file name using 
       TEXT1 and DEFEXT.
GVSREW (IUNIT) Rewinds unit IUNIT.

================================================================================
ARRAY INITIALIZATION
================================================================================
GVSBTF (BROW,NUM)  Sets NUM LOGICALS to .FALSE.
GVSBTT (BROW,NUM)  Sets NUM LOGICALS to .TRUE.
GVSB1F (B1ROW,NUM)  Sets BOOL*1 to .FALSE.
GVSB1T (B1ROW,NUM)  Sets BOOL*1 to .TRUE.
GVSBY0 (BYTES,NUM)  Sets NUM BYTES to zero.
GVSCTB (CROW,NUM)  Sets NUM characters CROW to ' '.
GVSCTS (CROW,INDEX,NUM)  Sets NUM characters in INDEX elements in CROW to ' '.
GVSIT0 (IROW,NUM)  Sets IROW to zero.
GVS2T0 (IROW,NUM)  Sets IROW (INTEGER*2) to zero.
GVSITC (IROW,ICON,NUM)  Sets IROW to ICON.
GVSBYC (BROW,ICON,NUM)  Sets BROW (bytes) to ICON (integer).
GVSITI (IROW,NUM)  Sets IROW to 1,2,3,...,NUM.
GVSITJ (IROW,ISTART,ISTEP,NUM)  Sets IROW to ISTART + 
       0,1,2,...,(NUM-1)*ISTEP.
GVSRT0 (ROW,NUM)  Sets ROW to zero.
GVSRTC (ROW,CON,NUM)  Sets ROW to CON.
GVSRTI (ROW,NUM)  Sets ROW to 1.0,2.0,3.0,...,float.
GVSRTJ (ROW,START,STEP,NUM)  Sets ROW to START+1,2,3,...
       ...,(NUM-1)*STEP.
GVSSEX (ROW,START,STEP,NUM)  As GVSRTJ and takes exponential.
GVSSQR (ROW,START,STEP,NUM)  As GVSRTJ and takes square root.

================================================================================
ARRAY OPERATIONS INVOLVING ONE ARRAY
================================================================================
GVSVDC (ROW,CON,NUM)  ROW = ROW / CON.
GVSVDI (ROW,ICON,NUM)  ROW = ROW / FLOAT(ICON).
GVSVXC (ROW,CON,NUM)  ROW = ROW * CON.
GVSVXI (ROW,ICON,NUM)  ROW = ROW * FLOAT(ICON).
GVSIXI (IROW,ICON,NUM)  IROW = IROW * ICON.
GVSIXR (IROW,CON,NUM)  IROW = NINT(IROW * ICON).
GVSVPC (ROW,CON,NUM)  ROW = ROW + CON.
GVSIPC (IROW,ICON,NUM)  IROW = IROW + ICON.
GVSVX2 (ROW,NUM)  ROM = ROW**2.
GVSABS (ROW,NUM)  ROW = ABS(ROW).
GVSTQR (ROW1,ROW2,NUM)  ROW2 = SQRT(ROW1).
GVSNEG (ROW,NUM)  ROW = -ROW.
GVSV1O (ROW,NUM)  ROW = 1.0/ROW. 0 remains 0.
GVSMOD (IROW,ICON,NUM)  IROW = MOD(IROW,ICON).
GVSREV (ROW,NUM)  Reverses the order of elements in ROW.
GVFCBT (BOOLS,NUM)  Counts the .TRUE.'s in BOOLS.
GVFCBF (BOOLS,NUM)  COUNTS THE .FALSE.'s in BOOLS.

================================================================================
ARRAY OPERATIONS INVOLVING TWO ARRAYS
================================================================================
GVS2I4 (IROW4,IROW2)  Converts integer*2 into integer*4.
GVS4I2 (IROW2,IROW4)  Converts integer*4 into integer*2.
GVSVDV (ROW1,ROW2,NUM)  ROW1 = ROW1 / ROW2.
GVSVXV (ROW1,ROW2,NUM)  ROW1 = ROW1 * ROW2.
GVSVPV (ROW1,ROW2,NUM)  ROW1 = ROW1 + ROW2.
GVSVMV (ROW1,ROW2,NUM)  ROW1 = ROW1 - ROW2.
GVSIDV (IROW1,IROW2,NUM)  IROW1 = NINT(FLOAT(IROW1)/FLOAT(IROW2).
GVSIXV (IROW1,IROW2,NUM)  IROW1 = IROW1 * IROW2.
GVSIPV (IROW1,IROW2,NUM)  IROW1 = IROW1 + IROW2.
GVSIMV (IROW1,IROW2,NUM)  IROW1 = IROW1 - IROW2.
GVSCPR (ROW1,ROW2,NUM)  ROW1 = ROW2.
GVSCPI (IROW1,IROW2,NUM)  IROW1 = IROW2.
GVSCPB (BROW1,BROW2,NUM)  BROW1 = BROW2.
GVSCPT (TEXT1,TEXT2,LEN,NUM)  TEXT1()(1:LEN)=TEXT2()(1:LEN)
GVSFLT (ROW,IROW,NUM)  ROW = FLOAT(IROW).
GVFQFC (ROW1,ROW2,NUM)  SUM((ROW1-ROW2)**2)/NUM
GVFLDF (ROW1,ROW2,NUM)  MAX(ABS(ROW1-ROW2))
GVSBND (BROW1,BROW2,BROW3,NUM)  BROW1 = BROW2 .AND. BROW3.
GVSBOR (BROW1,BROW2,BROW3,NUM)  BROW1 = BROW2 .OR. BROW3.
GVFIRI (IROW1,IROW2,NUM)  Returns TRUE if IROW1 = IROW2.

================================================================================
OTHER ARRAY OPERATIONS
================================================================================
GVFFIP (IROW,ICON,NUM)  Returns the location of ICON in IROW.
GVFMX2 (ROW,WORK,NTH,NUM)  Returns the NTH largest value found in ROW.
GVFMAX (ROW,NUM)  Returns the largest value found in ROW.
GVFBMX (BROW,NUM)  Returns the largest value found in byte array BROW.
GVFMIN (ROW,NUM)  Returns the smallest value found in ROW.
GVFIMX (IROW,NUM)  Returns the largest value found in IROW.
GVFIMN (IROW,NUM)  Returns the smallest value found in IROW.
GVFISM (IROW,NUM)  Returns the sum of IROW.
GVFBSM (BROW,NUM)  Returns the sum of BROW (Byte row).
GVF2SM (I2ROW,NUM)  Returns the sum of I2ROW (Integer*2 row).
GVFRSM (ROW,NUM)  Returns the sum of ROW.
GVFIN0 (IROW,NUM) Returns the number of non-zero elements in IROW.
GVSCPS (ROW,BROW,NUM,NEWNUM) Compress ROW to keep BROW=.TRUE.
GVSMTH (IROW,IWORK,NUM,IWINDO,ITYPE,ICYCLS)   Smooths IROW, using IWORK,
         window (odd, 3-25) is IWINDO, Type = ITYPE, # of cycles=ICYCLS.
GVSPCK (IROW,BRON,NUMNOW,NUM) Packs IROW according to BROW. NUM -> NUMNOW.
GVSPCR (ROW,BRON,NUMNOW,NUM) Packs ROW according to BROW. NUM -> NUMNOW.

================================================================================
I/O OPERATIONS
================================================================================
GVFFFA (N,A)  Reads N 4 byte Alphanumericals.
GVFFFC (N,CHAR)  Reads CHARacter of length N.
GVFFFF (N,REAL)  Reads N REAL's.
GVFFFI (N,INT)  Reads N INTegers.
GVFLFI (N,INT,LINE) Reads N INTegers from the CHAR*80 LINE
GVFLFR (N,REAL,LINE) Reads N REALs from the CHAR*80 LINE
GVSNL6 (NL)  Writes NL empty lines at unit 6.
GVSNPG (NP)  Goes NP times to top of next page on unit 6.
GVSNLU (NL,NUMUNT)  Writes NL empty lines at unit NUMUNT.
GVSBCH (IUNIT,TEXT) Writes TEXT with 5*5 characters. LEN(TEXT)<=13.
GVSCTC (CROW,CHAR,NUM)   Sets NUM chars in CROW to CHAR.
GVSLIN  Writes a line of 60 equal signs at unit 6.
GVSWM3 (RMAT)  Writes RMAT at unit 6.
GVSW2M (RMAT1,RMAT2)  Writes 2 matrices at unit 6.
GVSW3M (RMAT1,RMAT2,RMAT3)  Writes 3 matrices at unit 6.
GVSW4M (RMAT1,RMAT2,RMAT3,RMAT4)  Writes 4 matrices at unit 6.
GVSWM4 (RMAT,RVEC)  Writes RMAT and VECT at unit 6.
GVSTT6 (TEXT) Writes TEXT at unit 6.
GVSTTU (NUMUNT,TEXT) Writes TEXT at unit NUMUNT.

================================================================================
GONIOMETRY
================================================================================
GVFACS (ANGLE)  Returns ACOS(angle) in radians.
GVFDTR (ANGLE)  Converts ANGLE from degrees to radians.
GVFRTD (ANGLE)  Converts ANGLE from radians to degrees.
GVSTCS (ROW1,ROW2,NUM)  ROW2 = COS(ROW1).
GVSSCS (ROW,START,STEP,NUM)  As GVSRTJ and takes cosine.
GVSSSN (ROW,START,STEP,NUM)  As GVSRTJ and takes sine.
GVSSTN (ROW,START,STEP,NUM)  As GVSRTJ and takes tangent.

================================================================================
VMS SPECIFIC TOOLS
================================================================================
GVSCLP  Clears the screen.
GVSCTR  CONTROL_C controller.
GVSDIR  Returns contents of default directory.
GVSNDR(TEXT)  Returns the name of the default directory.
GVSTMI(IADRES)  Initiates CPU timer.
GVSTMS(IADRES)  Shows elapsed time, CPU time, IO etc. since GVSTMI.
GVSTIM  Types DATE and TIME at terminal.
GVSTUM  Types DATE and TIME at NUMUNT.
GVSTRT (IDAY,IMONTH,IYEAR,IHOUR,IMINUT,ISECND)  obvious...
GVSDOW (IDAY)  IDAY=1 at sunday, IDAY=2 at monday, etc.
GVSIIP (MODE)  MODE = char*5 becomes 'INTER' or 'BATCH'
GVSVMS (TEXT)  Spawns interactive VMS subprocess.
GVSPWN (TEXT)  Spawns TEXT in batch mode.
GVSSPL (TEXT)  Spawns and executes the command stored in TEXT.
GVSEDT (TEXT)  Edits file TEXT.
GVSDEL (TEXT,MODE)  Deletes file TEXT. The ;* should not be given.
        MODE = WARN or NOWARN for giving error warnings or not.
GVSCLS  Clears the terminal screen.
GVSPAU (SECNDS) Execute a pause on SECNDS seconds.
GVS132  Switches terminal to 132 characters per line.
GVSL80  Switches terminal to 80 characters per line.

================================================================================
SORTING 
================================================================================
GVSIRT (IROW,NUM,ITAG)  Sorts IROW increasing. ITAG is tag-row.
GVSDIS (IROW,NUM,ITAG)  Sorts IROW decreasing. ITAG is tag-row.
GVSORT (ROW,NUM,ITAG)  Sorts ROW increasing. ITAG is tag-row.
GVSDRT (ROW,NUM,ITAG)  Sorts ROW decreasing. ITAG is tag-row.
GVSCRT (CROW,LEN,NUM,ITAG)  Sorts CROW increasing. ITAG is tag-row. LEN 
       is the length of the character strings in CROW.
GVSRT1 (ROW,NUM)  Sorts ROW increasing. 
GVSIR1 (IROW,NUM)  Sorts IROW increasing. 
GVSdT1 (ROW,NUM)  Sorts ROW decreasing. 
GVSBRT (BYTE1,BYTE2,NUM) Sorts BYTE1, and permutes BYTE2 the same.
GVSWAP (CON1,CON2)  Swaps CON1 and CON2.
GVSWBP (BYTE1,BYTE2)  Swaps BYTE1 and BYTE2.
GVSWLP (BOOL1,BOOL2)  Swaps BOOL1 and BOOL2.
GVSWIP (ICON1,ICON2)  Swaps ICON1 and ICON2.
GVSWCP (TEXT1,TEXT2)  Swaps TEXT1 and TEXT2.

================================================================================
 STATISTICS
================================================================================
GVSIAV (IROW,NUM,AVE,ADEV,SDEV,VAR,SKEW,CURT) Returns AVErage, 
        Average DEViation, Standard DEViation, VARiance, SKEWness,
        and CURTosis. See recipes 13.1.
GVSBAV (BROW,NUM,AVE,ADEV,SDEV,VAR,SKEW,CURT) Returns AVErage, 
        Average DEViation, Standard DEViation, VARiance, SKEWness,
        and CURTosis. See recipes 13.1.
GVSRAV (ROW,NUM,AVE,ADEV,SDEV,VAR,SKEW,CURT) Returns AVErage, 
        Average DEViation, Standard DEViation, VARiance, SKEWness,
        and CURTosis. See recipes 13.1.
GVSRLV (ROW,BOOLS,NUM,AVE,ADEV,SDEV,VAR,SKEW,CURT) Returns AVErage, 
        Average DEViation, Standard DEViation, VARiance, SKEWness,
        and CURTosis. See recipes 13.1. BOOLS determines what to use in ROW.
GVSOUT (AVE,ADEV,SDEV,VAR,SKEW,CURT) Writes results from statistics routines.
GVSUUT (IUNIT,AVE,ADEV,SDEV,VAR,SKEW,CURT) Writes results from statistics 
        routines to unit IUNIT.
GVSHIS (ROW,NUMR,IROW,NUMI) makes in IROW(1-NUMI) a histogram of ROW(1-NUMR).
GVSHUT (ROW,NUMR,IROW,NUMI) as GVSHIS, but with line printer output.

================================================================================
COORDINATE TRANSFORMATION TOOLS
================================================================================
GVSSUP (NUM,XA,XB,R,T,QRMS)  Superpositions XB(3,NUM) on 
       XA(3,NUM), R is the matrix needed, T the vector, 
       QRMS is the RMS misplacement in Angstroms. R and T are applied.
GVSSPN (NUM,XA,XB,R,T,QRMS,QMAX)  Superpositions XB(3,NUM) on XA(3,NUM), 
       R is the matrix needed, T the vector, QRMS is the RMS misplacement 
       in Angstroms, QMAX is the maximal one. R and T are NOT applied.
GVSSNP (NUM,XA,XB,R,T,QRMS,QMAX)  Superpositions XB(3,NUM) on XA(3,NUM), 
       R is the matrix needed, T the vector, QRMS is the RMS misplacement 
       in Angstroms, QMAX is the maximal one. R and T are applied.
GVSCM1 (XYZ,NUM) Puts center of mass of XYZ(3,NUM) to 0,0,0.
GVSCM2 (XYZ,NUM,VECT) Add VECT to XYZ to get center of mass in (0,0,0).
       VECT should still be added.
GVSCM3 (XYZ,NUM,VECT) Add VECT to XYZ to get center of mass in (0,0,0).
       VECT is already added.
GVSCM4 (XYZ,NUM,VECT) Subtracts VECT from XYZ (Undoes GVSCM3)
GVSCM5 (XYZ,NUM,VECT) Adds VECT to XYZ.
GVSCMT (XYZ,BROW,NUM) Puts center of mass of tagged part of XYZ(3,NUM) 
       to 0,0,0; rest is translated too.
GVSCMA (XYZ,NUM,RMAT,VECT) Applies RMAT and VECT to XYZ.
GVSCMU (XYZ,NUM,RMAT,VECT) Undoes the application of RMAT and VECT to XYZ.
GVSRSP (XYZ1,XYZ2,NUM,DMAX,DAVE,DRMS) Determines average, mean
       and root mean square difference between XYZ1 and XYZ2.
GVSSP4 (NUM,XA,XB,R,T,QRMS,W)  Superpositions XB(3,NUM) on 
       XA(3,NUM), R is the matrix needed, T the vector, 
       QRMS is the RMS misplacement in Angstroms. W are the
       weigths use in determinig QRMS (not R and T!).
GVSAM1 (X,Y,Z,NUM,RMAT,TVEC) Apply RMAT on center of gravity; apply TVEC.

================================================================================
OTHER UTILITIES
================================================================================
GVFMPI  (CONT) Returns CONT * PI (=3.14 etc.)
GVFODD  (ICON)  Becomes TRUE if ICON is an odd integer.
GVFEVN  (ICON)  Becomes TRUE if ICON is an even integer.
GVFYON  (TEXT)  Prints text. RETURNS true upon yes (no=false).
GVFRAN  (ISEED,VALLOW,VALHGH) Returns random number in range. Use ISEED=0
        in the first call.
GVFIAN  (ISEED,IVLLOW,IVLHGH) Returns random number in range. Use ISEED=0
        in the first call.
GVFEND  (TEXT)  Returns .TRUE. upon QUIT,STOP,END, etc.
GVFIIN  (ICON1,ICON2,ICON3)  .TRUE. if ICON1 in between but 
        not equal ICON2 and ICON3
GVFIBN  (ICON1,ICON2,ICON3)  .TRUE. if ICON1 in between or 
        equal ICON2 and ICON3
GVFRIN  (CON1,CON2,CON3)  .TRUE. if CON1 in between or 
        equal CON2, CON3.
GVFRNG  (CON1,CON2,CON3) Returns CON1 in case CON1 is in range CON2-CON3, else
        the nearest of CON2 and CON3 will be returned.
GVFIRG  (ICON1,ICON2,ICON3) Returns ICON1 in case ICON1 is in range ICON2-CON3, 
        else the nearest of ICON2 and ICON3 will be returned.
GVFEND  (TEXT)  .TRUE. if TEXT contains QUIT, END, STOP, etc.
GVFDFN  (INT1,INT2,IDIFF) Returns TRUE if ABS(INT1-INT2).eq.IDIFF
GVSBEL  Rings the bell in the keyboard.
GVSCOD  Holds the terminal till return is hit.
GVSKIL  Creates a stackdump by dividing by zero.
GVSLKK  (X,Y,NUM,MWT,A,B,SIGA,SIGB,CHI2,Q) See Recipes page 508. (Use mwt=0
        if SIG (is errors on Y) is empty).
GVSMNF  (....) General function minimizer.
GVSOLV  (A,B,C,X1,X2,IMAG) Solve A*X*X+B*X+C=0. IMAG=.TRUE. if no real solutions
GVS3LK  (X,Y,Z,NUM,R,P) 3-dimensional LKK. R=direction of best line. P is point
        on that line. Algorithm probably not too good...

================================================================================
AMINO ACID TOOLS
================================================================================
GVSAA3 (AAROW,LEN)  Puts 3-letter code aa in CHAR*LEN AAROW(20).
GVFWGT (AA1)  Returns weight of aa (CHAR*1) AA1 '-' is H2O.