Because Fortran does not recognize the difference between upper- and lower-case letters, the conjugate vectors G and S in the program are denoted by gg and ss. The inner part of the conjugate-direction task is in function cgstep().cgstepone step of CD
Observe the cgstep() function has a logical parameter called forget. This parameter does not need to be input. In the normal course of things, forget will be false on the first iteration and true on subsequent iterations. This refers to the fact that on the first iteration, there is no previous step, so the conjugate direction method is reduced to the steepest descent method. At any iteration, however, you have the option to set forget=.false. which amounts to restarting the calculation from the current location, something we rarely find reason to do.