Changeset 487182 for pcp/src


Ignore:
Timestamp:
Apr 21, 2008, 2:19:23 PM (17 years ago)
Author:
Frederik Heber <heber@…>
Children:
5a538b
Parents:
02ba60
git-author:
Frederik Heber <heber@…> (04/18/08 13:43:33)
git-committer:
Frederik Heber <heber@…> (04/21/08 14:19:23)
Message:

MinimiseOccupied(): memcpy'ing old psis is only necessary for DoBrent case

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified pcp/src/run.c

    r02ba60 r487182  
    711711 * \param *Stop flag to determine if epsilon stop conditions have met
    712712 * \param *SuperStop flag to determinte whether external signal's required end of calculations
     713 * \bug ResetGramSch() not allowed after reading orthonormal values from file
    713714 */
    714715static void MinimiseOccupied(struct Problem *P, int *Stop, int *SuperStop)
     
    747748      InitPsisValue(P, Psi->TypeStartIndex[Occupied], Psi->TypeStartIndex[Occupied+1]);  // initialize perturbed array for this run
    748749      ResetGramSchTagType(P, Psi, Occupied, NotOrthogonal); // loaded values are orthonormal
    749       SpeedMeasure(P, InitGramSchTime, StartTimeDo); 
    750       GramSch(P, R->LevS, Psi, Orthonormalize);
    751       SpeedMeasure(P, InitGramSchTime, StopTimeDo); 
    752750    } else {
    753751      SpeedMeasure(P, InitSimTime, StartTimeDo); 
    754       if(P->Call.out[MinOut]) fprintf(stderr,"(%i) Reading from file...\n", P->Par.me);
     752      if(P->Call.out[MinOut]) fprintf(stderr, "(%i) Re-initializing %s psi array from source file of recent calculation\n", P->Par.me, R->MinimisationName[R->CurrentMin]);
    755753      ReadSrcPsiDensity(P, Occupied, 0, R->LevSNo);
    756       ResetGramSchTagType(P, Psi, Occupied, IsOrthonormal); // loaded values are orthonormal
     754      //ResetGramSchTagType(P, Psi, Occupied, IsOrthonormal); // loaded values are orthonormal
     755      // note: this did not work and is currently not clear why not (as TestGramSch says: OK, but minimisation goes awry without the following GramSch)
    757756    }
     757    SpeedMeasure(P, InitGramSchTime, StartTimeDo); 
     758    GramSch(P, R->LevS, Psi, Orthonormalize);
     759    SpeedMeasure(P, InitGramSchTime, StopTimeDo); 
    758760    SpeedMeasure(P, InitDensityTime, StartTimeDo);
    759761    InitDensityCalculation(P);
     
    770772    R->LevS->Step++;
    771773    EnergyOutput(P,0);
    772   }
     774  } 
    773775  if (P->Call.ReadSrcFiles != 1) {  // otherwise minimise oneself
    774776    if(P->Call.out[LeaderOut]) fprintf(stderr,"(%i)Beginning minimisation of type %s ...\n", P->Par.me, R->MinimisationName[Occupied]);
     
    783785      if (Lat->Psi.LocalPsiStatus[R->ActualLocalPsiNo].DoBrent != 1) {
    784786        //SetArrayToDouble0((double *)LevS->LPsi->OldLocalPsi[R->ActualLocalPsiNo],LevS->MaxG*2);
    785         memcpy(LevS->LPsi->OldLocalPsi[R->ActualLocalPsiNo], LevS->LPsi->LocalPsi[R->ActualLocalPsiNo], ElementSize*LevS->MaxG*sizeof(double)); // restore old Psi from OldPsi
    786         //fprintf(stderr,"(%i) Psi %i at %p stored in OldPsi at %p: Old[0] %lg+i%lg\n", P->Par.me, R->ActualLocalPsiNo, LevS->LPsi->LocalPsi[R->ActualLocalPsiNo], LevS->LPsi->OldLocalPsi[R->ActualLocalPsiNo], LevS->LPsi->OldLocalPsi[R->ActualLocalPsiNo][0].re, LevS->LPsi->OldLocalPsi[R->ActualLocalPsiNo][0].im);
    787         f_m = P->Lat.E->TotalEnergy[0]; // grab first value
    788         m = 0.;
     787        if (R->DoBrent == 1) {
     788          memcpy(LevS->LPsi->OldLocalPsi[R->ActualLocalPsiNo], LevS->LPsi->LocalPsi[R->ActualLocalPsiNo], ElementSize*LevS->MaxG*sizeof(double)); // restore old Psi from OldPsi
     789          //fprintf(stderr,"(%i) Psi %i at %p stored in OldPsi at %p: Old[0] %lg+i%lg\n", P->Par.me, R->ActualLocalPsiNo, LevS->LPsi->LocalPsi[R->ActualLocalPsiNo], LevS->LPsi->OldLocalPsi[R->ActualLocalPsiNo], LevS->LPsi->OldLocalPsi[R->ActualLocalPsiNo][0].re, LevS->LPsi->OldLocalPsi[R->ActualLocalPsiNo][0].im);
     790          f_m = P->Lat.E->TotalEnergy[0]; // grab first value
     791          m = 0.;
     792        }
    789793        CalculateNewWave(P,NULL);
    790794        if ((R->DoBrent == 1) && (fabs(Lat->E->delta[0]) < M_PI/4.))
     
    798802            // if we stepped on to a new Psi, which is already down at DoBrent=1 unlike the last one,
    799803            // then an up-to-date gradient is missing for the following Brent line search
    800             if(P->Call.out[LeaderOut]) fprintf(stderr,"(%i) We stepped on to a new Psi, which is already in the Brent regime ...re-calc delta\n", P->Par.me);
     804            if(P->Call.out[MinOut]) fprintf(stderr,"(%i) We stepped on to a new Psi, which is already in the Brent regime ...re-calc delta\n", P->Par.me);
    801805            memcpy(LevS->LPsi->OldLocalPsi[R->ActualLocalPsiNo], LevS->LPsi->LocalPsi[R->ActualLocalPsiNo], ElementSize*LevS->MaxG*sizeof(double)); // restore old Psi from OldPsi
    802806            //fprintf(stderr,"(%i) Psi %i at %p stored in OldPsi at %p: Old[0] %lg+i%lg\n", P->Par.me, R->ActualLocalPsiNo, LevS->LPsi->LocalPsi[R->ActualLocalPsiNo], LevS->LPsi->OldLocalPsi[R->ActualLocalPsiNo], LevS->LPsi->OldLocalPsi[R->ActualLocalPsiNo][0].re, LevS->LPsi->OldLocalPsi[R->ActualLocalPsiNo][0].im);
Note: See TracChangeset for help on using the changeset viewer.