Changeset cc46b0 for pcp


Ignore:
Timestamp:
Apr 21, 2008, 10:24:19 PM (17 years ago)
Author:
Frederik Heber <heber@…>
Children:
f5586e
Parents:
57a69b2
Message:

CreateDensityOutputGeneral(), CombineOutVisDensity(), OutVisIons(), OutputVisSrcFiles(), OutputVis(), OutputCurrentDensity(), OutputVisAllOrbital(): OutVisSteo goes to *OutVisStep

*OutVisStep now contains the step count on each level

Location:
pcp/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pcp/src/data.h

    r57a69b2 rcc46b0  
    238238  char *default_path;    //!< path to default parameter file
    239239  char *pseudopot_path;  //!< path ot pseudopotential files
    240   int OutVisStep;       //!< Currently so and so often has visual data output occurred
     240  int *OutVisStep;       //!< Currently so and so often has visual data output occurred
    241241  int MeOutVis;         //!< 1 - visual data are written to files, 0 - no output (for this process)
    242242  int MeOutCurr;        //!< 1 - visual data of current density written to file, 0 - no output, no calculation (for this process)
  • pcp/src/output.c

    r57a69b2 rcc46b0  
    798798 * Opens \ref suffixdensdoc, fills (pos&data file name, byte order, max mesh points, matrix alignment, steps)
    799799 * and closes it.
    800  * Opens \ref suffixdensdx, then for every FileData::OutVisStep a describing structure for DX is written and
     800 * Opens \ref suffixdensdx, then for every FileData::*OutVisStep a describing structure for DX is written and
    801801 * the file closed again.
    802802 * \param *P Problem at hand
     
    831831  fprintf(DensityDoc,"points = %i\n", MaxPoints);
    832832  fprintf(DensityDoc,"majority = row\n");
    833   fprintf(DensityDoc,"TimeSeries = %i\n",P->Files.OutVisStep+1);
     833  fprintf(DensityDoc,"TimeSeries = %i\n",P->Files.OutVisStep[Lev->LevelNo]+1);
    834834  fclose(DensityDoc);
    835835  Free(suffix, "CreateDensityOutputGeneral: suffix");
     
    839839  sprintf(suffix, ".L%i%s", Lev->LevelNo, suffixdensdx);
    840840  OpenFile(P, &DensityDx, suffix, "w",P->Call.out[ReadOut]);
    841   for (i=0; i < (unsigned int)P->Files.OutVisStep+1; i++) { // for every OutVis step
     841  for (i=0; i < (unsigned int)P->Files.OutVisStep[Lev->LevelNo]+1; i++) { // for every OutVis step
    842842    if (i==0) {
    843843      fprintf(DensityDx,"object \"gridcon\" class gridconnections counts %i %i %i\n\n",(N[0]+1),(N[1]+1),(N[2]+1));
     
    871871    }
    872872  fprintf(DensityDx,"\nobject \"series\" class series\n");
    873   for (i=0; i < (unsigned int)P->Files.OutVisStep+1; i++)
     873  for (i=0; i < (unsigned int)P->Files.OutVisStep[Lev->LevelNo]+1; i++)
    874874    fprintf(DensityDx,"member %i \"obj.%04u\" position %f\n",i,i,(float)i);
    875875  fprintf(DensityDx,"end\n");
     
    10351035  struct Lattice *Lat = &P->Lat;
    10361036  struct LatticeLevel *Lev0 = &Lat->Lev[0];
    1037   float step = P->Files.OutVisStep;
     1037  float step = P->Files.OutVisStep[P->Lat.Lev[STANDARTLEVEL].LevelNo];
    10381038  int No=0, destpos;
    10391039  char suffix[255];
     
    12551255 * If this is process 0 (and OutVis desired), allocate memory for FileData::PosTemp, FileData::work,
    12561256 * set the entries of FileData all to their corresponding values from RiemannTensor,
    1257  * FileData::OutVisStep to zero.
     1257 * FileData::*OutVisStep to zero.
    12581258 * \param *P Problem at hand
    12591259 */
     
    12641264  struct RiemannTensor *RT = &Lat->RT;
    12651265  struct LatticeLevel *Lev0 = &Lat->Lev[0];
     1266  int i;
    12661267  F->OutputPosType = NULL;
    12671268  if (!F->MeOutVis) return;
    1268   F->OutVisStep = 0;
     1269
     1270  F->OutVisStep = Malloc(sizeof(int)*Lat->MaxLevel,"InitOutVisArray: OutVisStep");
     1271  for (i=0;i<Lat->MaxLevel;i++)
     1272    F->OutVisStep[i] = 0;
    12691273  F->PosTemp = (fftw_complex *)
    12701274    Malloc(sizeof(float)*(Lev0->Plan0.plan->N[1]+1)*(Lev0->Plan0.plan->N[2]+1)*
     
    14591463 * If this is process 0,
    14601464 * open, fill and close IonDoc file suffixiondoc,
    1461  * open, fill for each FileData::OutVisStep and close IonDX file suffixiondx
     1465 * open, fill for each FileData::*OutVisStep and close IonDX file suffixiondx
    14621466 * for every
    1463  * open suffixionfor, suffixionpos (and suffixionZ in case of only FileData::OutVisStep), fill
     1467 * open suffixionfor, suffixionpos (and suffixionZ in case of only FileData::*OutVisStep), fill
    14641468 * them with the ion forces IonType::FIon and positions IonType::R of each type and each ion per type,
    14651469 * close them all.
     
    14981502    fprintf(IonsDoc,"points = %i\n", I->Max_TotalIons);
    14991503    fprintf(IonsDoc,"majority = row\n");
    1500     fprintf(IonsDoc,"TimeSeries = %i\n",F->OutVisStep+1);
     1504    fprintf(IonsDoc,"TimeSeries = %i\n",F->OutVisStep[Lev->LevelNo]+1);
    15011505    fclose(IonsDoc);
    15021506  }
     
    15041508  sprintf(suffix, ".L%i%s", P->Lat.Lev[STANDARTLEVEL].LevelNo, suffixiondx);
    15051509  if (OpenFile(P, &IonsDx, suffix, "w",P->Call.out[ReadOut])) {
    1506     for (i=0; i < F->OutVisStep+1; i++) {
     1510    for (i=0; i < F->OutVisStep[Lev->LevelNo]+1; i++) {
    15071511      if (i==0) {
    15081512        /*      fprintf(IonsDx,"object \"ioncon\" class array type int rank 1 shape 2 items 0 data follows\nattribute \"element type\" string \"lines\"\nattribute \"ref\" string \"positions\"\n\n"); */
     
    15301534    }
    15311535    fprintf(IonsDx,"\nobject \"ionseriesF\" class series\n");
    1532     for (i=0; i < F->OutVisStep+1; i++)
     1536    for (i=0; i < F->OutVisStep[Lev->LevelNo]+1; i++)
    15331537      fprintf(IonsDx,"member %i \"ionobjF.%04i\" position %f\n",i,i,(float)i);
    15341538    fprintf(IonsDx,"\nobject \"ionseriesZ\" class series\n");
    1535     for (i=0; i < F->OutVisStep+1; i++)
     1539    for (i=0; i < F->OutVisStep[Lev->LevelNo]+1; i++)
    15361540      fprintf(IonsDx,"member %i \"ionobjZ.%04i\" position %f\n",i,i,(float)i);
    15371541    fprintf(IonsDx,"end\n");
     
    15431547  // open IonForces, IonZ and IonPosition file, write forces respectively positions for each ion of each type, close them
    15441548  sprintf(suffix, ".L%i%s", P->Lat.Lev[STANDARTLEVEL].LevelNo, suffixionfor);
    1545   if (OpenFileNo(P, &IonsDataF, suffix, F->OutVisStep, "wb",P->Call.out[ReadOut])) {
    1546     if (F->OutVisStep == 0) {
     1549  if (OpenFileNo(P, &IonsDataF, suffix, F->OutVisStep[Lev->LevelNo], "wb",P->Call.out[ReadOut])) {
     1550    if (F->OutVisStep[Lev->LevelNo] == 0) {
    15471551      sprintf(suffix, ".L%i%s", P->Lat.Lev[STANDARTLEVEL].LevelNo, suffixionZ);
    15481552      OpenFile(P, &IonsDataZ, suffix, "wb",P->Call.out[ReadOut]);
    15491553    }
    15501554    sprintf(suffix, ".L%i%s", P->Lat.Lev[STANDARTLEVEL].LevelNo, suffixionpos);
    1551     if (OpenFileNo(P, &IonsPos, suffix, F->OutVisStep, "wb",P->Call.out[ReadOut])) {
     1555    if (OpenFileNo(P, &IonsPos, suffix, F->OutVisStep[Lev->LevelNo], "wb",P->Call.out[ReadOut])) {
    15521556      for (is=0; is < I->Max_Types; is++) {
    15531557        for (ia=0; ia < I->I[is].Max_IonsOfType; ia++) {
     
    15611565          if (fwrite(&data[0],sizeof(float), (size_t)(3),IonsPos) != 3)
    15621566            Error(FileOpenParams, "Error writing ion positions!");
    1563           if (F->OutVisStep == 0) (void)fwrite(&Z,sizeof(int), (size_t)(1),IonsDataZ);
     1567          if (F->OutVisStep[Lev->LevelNo] == 0) (void)fwrite(&Z,sizeof(int), (size_t)(1),IonsDataZ);
    15641568          if (fwrite(&data[3],sizeof(float), (size_t)(3),IonsDataF) != 3)
    15651569            Error(FileOpenParams, "Error writing ionic forces!");
     
    15681572      fclose(IonsPos);
    15691573    }
    1570     if (F->OutVisStep == 0)
     1574    if (F->OutVisStep[Lev->LevelNo] == 0)
    15711575      fclose(IonsDataZ);
    15721576    fclose(IonsDataF);
     
    15891593  // if (!P->Files.MeOutVis) return;
    15901594  // P->Files.OutputPosType =
    1591   //   Realloc(P->Files.OutputPosType,sizeof(enum ModeType)*(P->Files.OutVisStep+1),"OutputVis");
    1592   // P->Files.OutputPosType[P->Files.OutVisStep] = P->Lat.RT.ActualUse;
     1595  //   Realloc(P->Files.OutputPosType,sizeof(enum ModeType)*(P->Files.OutVisStep[P->Lat.Lev[STANDARTLEVEL].LevelNo]+1),"OutputVis");
     1596  // P->Files.OutputPosType[P->Files.OutVisStep[P->Lat.Lev[STANDARTLEVEL].LevelNo]] = P->Lat.RT.ActualUse;
    15931597  // CreateDensityOutputGeneral(P, P->Par.me_comm_ST_Psi);
    15941598  // OutVisDensity(P);
    15951599  // OutVisIons(P);
    1596   // if(P->Call.out[NormalOut]) fprintf(stderr,"(%i) Written OutVisStep %i to disk\n", P->Par.me, P->Files.OutVisStep);
    1597   // /* P->Files.OutVisStep++; Genau ebend nicht hochzaehlen - wird immer ueberschrieben */
     1600  // if(P->Call.out[NormalOut]) fprintf(stderr,"(%i) Written OutVisStep %i to disk\n", P->Par.me, P->Files.OutVisStep[P->Lat.Lev[STANDARTLEVEL].LevelNo]);
     1601  // /* P->Files.OutVisStep[P->Lat.Lev[STANDARTLEVEL].LevelNo]++; Genau ebend nicht hochzaehlen - wird immer ueberschrieben */
    15981602}
    15991603
    16001604/** Main output total electronic density and ion data for OpenDX.
    16011605 * Calls subsequently preparing CreateDensityOutputGeneral(), then output of electronic
    1602  * densities OutVisDensity() and ion data OutVisIons(), increasing finally FileData::OutVisStep.
     1606 * densities OutVisDensity() and ion data OutVisIons(), increasing finally FileData::*OutVisStep.
    16031607 * \param *P Problem at hand
    16041608  * \param *srcdens Pointer to DensityArray which is to be displayed
     
    16081612{
    16091613  if (!P->Files.MeOutVis) return;
    1610   P->Files.OutputPosType = (enum ModeType *) Realloc(P->Files.OutputPosType,sizeof(enum ModeType)*(P->Files.OutVisStep+1),"OutputVis");
    1611   P->Files.OutputPosType[P->Files.OutVisStep] = P->Lat.RT.ActualUse;
     1614  P->Files.OutputPosType = (enum ModeType *) Realloc(P->Files.OutputPosType,sizeof(enum ModeType)*(P->Files.OutVisStep[P->Lat.Lev[STANDARTLEVEL].LevelNo]+1),"OutputVis");
     1615  P->Files.OutputPosType[P->Files.OutVisStep[P->Lat.Lev[STANDARTLEVEL].LevelNo]] = P->Lat.RT.ActualUse;
    16121616 
    16131617  CreateDensityOutputGeneral(P, P->Par.me_comm_ST_Psi);
    16141618  OutVisDensity(P, srcdens);
    16151619  OutVisIons(P);
    1616   if(P->Call.out[MinOut]) fprintf(stderr,"(%i) Written OutVisStep %i to disk\n", P->Par.me, P->Files.OutVisStep);
    1617   P->Files.OutVisStep++;
     1620  if(P->Call.out[MinOut]) fprintf(stderr,"(%i) Written OutVisStep %i to disk\n", P->Par.me, P->Files.OutVisStep[P->Lat.Lev[STANDARTLEVEL].LevelNo]);
     1621  P->Files.OutVisStep[P->Lat.Lev[STANDARTLEVEL].LevelNo]++;
    16181622}
    16191623
     
    16311635  if(P->Call.out[NormalOut]) fprintf(stderr,"(%i)Output of Current Density (Vis)\n", P->Par.me);
    16321636
    1633   P->Files.OutputPosType = (enum ModeType *) Realloc(P->Files.OutputPosType,sizeof(enum ModeType)*(P->Files.OutVisStep+(1)*NDIM),"OutputVis");
     1637  P->Files.OutputPosType = (enum ModeType *) Realloc(P->Files.OutputPosType,sizeof(enum ModeType)*(P->Files.OutVisStep[P->Lat.Lev[STANDARTLEVEL].LevelNo]+(1)*NDIM),"OutputVis");
    16341638  for (i=0;i<(1)*NDIM;i++)
    1635     P->Files.OutputPosType[P->Files.OutVisStep+i] = P->Lat.RT.ActualUse;
    1636   if(P->Call.out[PsiOut]) fprintf(stderr,"(%i) OutVisStep %i, OutputPosType %p\n",P->Par.me, P->Files.OutVisStep, P->Files.OutputPosType);
     1639    P->Files.OutputPosType[P->Files.OutVisStep[P->Lat.Lev[STANDARTLEVEL].LevelNo]+i] = P->Lat.RT.ActualUse;
     1640  if(P->Call.out[PsiOut]) fprintf(stderr,"(%i) OutVisStep %i, OutputPosType %p\n",P->Par.me, P->Files.OutVisStep[P->Lat.Lev[STANDARTLEVEL].LevelNo], P->Files.OutputPosType);
    16371641 
    16381642  // due to preprocessor values we can't put the following stuff into a loop
     
    16601664    OutVisDensity(P, density);
    16611665    OutVisIons(P);
    1662     if(P->Call.out[NormalOut]) fprintf(stderr,"(%i) Written OutVisStep %i to disk\n", P->Par.me, P->Files.OutVisStep);
    1663     P->Files.OutVisStep++;
     1666    if(P->Call.out[NormalOut]) fprintf(stderr,"(%i) Written OutVisStep %i to disk\n", P->Par.me, P->Files.OutVisStep[P->Lat.Lev[STANDARTLEVEL].LevelNo]);
     1667    P->Files.OutVisStep[P->Lat.Lev[STANDARTLEVEL].LevelNo]++;
    16641668  }
    16651669}
     
    16761680  struct RunStruct *R = &P->R;
    16771681  struct LatticeLevel *LevS = R->LevS;
     1682  struct LatticeLevel *Lev = &P->Lat.Lev[STANDARTLEVEL];
    16781683  struct LatticeLevel *Lev0 = R->Lev0;
    16791684  struct Density *Dens0 = Lev0->Dens;
     
    16871692  if (!P->Files.MeOutVis) return;
    16881693
    1689   P->Files.OutputPosType = (enum ModeType *) Realloc(P->Files.OutputPosType,sizeof(enum ModeType)*(P->Files.OutVisStep+(Num)),"OutputVis");
    1690  
    1691   P->Files.OutVisStep += offset;
    1692   P->Files.OutputPosType[P->Files.OutVisStep] = P->Lat.RT.ActualUse; 
     1694  fprintf(stderr,"(%i) Realloc OutputPosType: %li to %i\n",P->Par.me,sizeof(P->Files.OutputPosType), P->Files.OutVisStep[Lev->LevelNo]+(Num));
     1695  P->Files.OutputPosType = (enum ModeType *) Realloc(P->Files.OutputPosType,sizeof(enum ModeType)*(P->Files.OutVisStep[Lev->LevelNo]+(Num)),"OutputVis");
     1696 
     1697  P->Files.OutVisStep[Lev->LevelNo] += offset;
     1698  //P->Files.OutputPosType[P->Files.OutVisStep[Lev->LevelNo]] = P->Lat.RT.ActualUse; 
    16931699  for (i=0; i < Psi->MaxPsiOfType+P->Par.Max_me_comm_ST_PsiT; i++) {  // go through all wave functions (plus the extra one for each process)
    16941700    OnePsiA = &Psi->AllPsiStatus[i];    // grab the desired OnePsiA
     
    17091715      } // LPsiDatA is now set to the coefficients of OnePsi either stored or MPI_Received
    17101716
    1711       P->Files.OutputPosType[P->Files.OutVisStep] = P->Lat.RT.ActualUse;
     1717      P->Files.OutputPosType[P->Files.OutVisStep[Lev->LevelNo]] = P->Lat.RT.ActualUse;
    17121718      // recalculate density for the specific wave function ...
    17131719      CalculateOneDensityR(Lat, LevS, Dens0, LPsiDatA, Dens0->DensityArray[ActualDensity], R->FactorDensityR, 0);
     
    17171723      OutVisDensity(P, Dens0->DensityArray[ActualDensity]);
    17181724      OutVisIons(P);
    1719       if(P->Call.out[NormalOut]) fprintf(stderr,"(%i) Written OutVisStep %i to disk\n", P->Par.me, P->Files.OutVisStep);
    1720       P->Files.OutVisStep+=increment;
    1721       P->Files.OutputPosType[P->Files.OutVisStep] = P->Lat.RT.ActualUse; 
     1725      if(P->Call.out[NormalOut]) fprintf(stderr,"(%i) Written OutVisStep %i to disk\n", P->Par.me, P->Files.OutVisStep[Lev->LevelNo]);
     1726      P->Files.OutVisStep[Lev->LevelNo]+=increment;
     1727      //P->Files.OutputPosType[P->Files.OutVisStep[Lev->LevelNo]] = P->Lat.RT.ActualUse; 
    17221728    }
    17231729  }
Note: See TracChangeset for help on using the changeset viewer.