- Timestamp:
- Apr 21, 2008, 10:24:19 PM (17 years ago)
- Children:
- f5586e
- Parents:
- 57a69b2
- Location:
- pcp/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
pcp/src/data.h
r57a69b2 rcc46b0 238 238 char *default_path; //!< path to default parameter file 239 239 char *pseudopot_path; //!< path ot pseudopotential files 240 int OutVisStep; //!< Currently so and so often has visual data output occurred240 int *OutVisStep; //!< Currently so and so often has visual data output occurred 241 241 int MeOutVis; //!< 1 - visual data are written to files, 0 - no output (for this process) 242 242 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 798 798 * Opens \ref suffixdensdoc, fills (pos&data file name, byte order, max mesh points, matrix alignment, steps) 799 799 * and closes it. 800 * Opens \ref suffixdensdx, then for every FileData:: OutVisStep a describing structure for DX is written and800 * Opens \ref suffixdensdx, then for every FileData::*OutVisStep a describing structure for DX is written and 801 801 * the file closed again. 802 802 * \param *P Problem at hand … … 831 831 fprintf(DensityDoc,"points = %i\n", MaxPoints); 832 832 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); 834 834 fclose(DensityDoc); 835 835 Free(suffix, "CreateDensityOutputGeneral: suffix"); … … 839 839 sprintf(suffix, ".L%i%s", Lev->LevelNo, suffixdensdx); 840 840 OpenFile(P, &DensityDx, suffix, "w",P->Call.out[ReadOut]); 841 for (i=0; i < (unsigned int)P->Files.OutVisStep +1; i++) { // for every OutVis step841 for (i=0; i < (unsigned int)P->Files.OutVisStep[Lev->LevelNo]+1; i++) { // for every OutVis step 842 842 if (i==0) { 843 843 fprintf(DensityDx,"object \"gridcon\" class gridconnections counts %i %i %i\n\n",(N[0]+1),(N[1]+1),(N[2]+1)); … … 871 871 } 872 872 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++) 874 874 fprintf(DensityDx,"member %i \"obj.%04u\" position %f\n",i,i,(float)i); 875 875 fprintf(DensityDx,"end\n"); … … 1035 1035 struct Lattice *Lat = &P->Lat; 1036 1036 struct LatticeLevel *Lev0 = &Lat->Lev[0]; 1037 float step = P->Files.OutVisStep ;1037 float step = P->Files.OutVisStep[P->Lat.Lev[STANDARTLEVEL].LevelNo]; 1038 1038 int No=0, destpos; 1039 1039 char suffix[255]; … … 1255 1255 * If this is process 0 (and OutVis desired), allocate memory for FileData::PosTemp, FileData::work, 1256 1256 * set the entries of FileData all to their corresponding values from RiemannTensor, 1257 * FileData:: OutVisStep to zero.1257 * FileData::*OutVisStep to zero. 1258 1258 * \param *P Problem at hand 1259 1259 */ … … 1264 1264 struct RiemannTensor *RT = &Lat->RT; 1265 1265 struct LatticeLevel *Lev0 = &Lat->Lev[0]; 1266 int i; 1266 1267 F->OutputPosType = NULL; 1267 1268 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; 1269 1273 F->PosTemp = (fftw_complex *) 1270 1274 Malloc(sizeof(float)*(Lev0->Plan0.plan->N[1]+1)*(Lev0->Plan0.plan->N[2]+1)* … … 1459 1463 * If this is process 0, 1460 1464 * open, fill and close IonDoc file suffixiondoc, 1461 * open, fill for each FileData:: OutVisStep and close IonDX file suffixiondx1465 * open, fill for each FileData::*OutVisStep and close IonDX file suffixiondx 1462 1466 * for every 1463 * open suffixionfor, suffixionpos (and suffixionZ in case of only FileData:: OutVisStep), fill1467 * open suffixionfor, suffixionpos (and suffixionZ in case of only FileData::*OutVisStep), fill 1464 1468 * them with the ion forces IonType::FIon and positions IonType::R of each type and each ion per type, 1465 1469 * close them all. … … 1498 1502 fprintf(IonsDoc,"points = %i\n", I->Max_TotalIons); 1499 1503 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); 1501 1505 fclose(IonsDoc); 1502 1506 } … … 1504 1508 sprintf(suffix, ".L%i%s", P->Lat.Lev[STANDARTLEVEL].LevelNo, suffixiondx); 1505 1509 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++) { 1507 1511 if (i==0) { 1508 1512 /* 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"); */ … … 1530 1534 } 1531 1535 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++) 1533 1537 fprintf(IonsDx,"member %i \"ionobjF.%04i\" position %f\n",i,i,(float)i); 1534 1538 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++) 1536 1540 fprintf(IonsDx,"member %i \"ionobjZ.%04i\" position %f\n",i,i,(float)i); 1537 1541 fprintf(IonsDx,"end\n"); … … 1543 1547 // open IonForces, IonZ and IonPosition file, write forces respectively positions for each ion of each type, close them 1544 1548 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) { 1547 1551 sprintf(suffix, ".L%i%s", P->Lat.Lev[STANDARTLEVEL].LevelNo, suffixionZ); 1548 1552 OpenFile(P, &IonsDataZ, suffix, "wb",P->Call.out[ReadOut]); 1549 1553 } 1550 1554 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])) { 1552 1556 for (is=0; is < I->Max_Types; is++) { 1553 1557 for (ia=0; ia < I->I[is].Max_IonsOfType; ia++) { … … 1561 1565 if (fwrite(&data[0],sizeof(float), (size_t)(3),IonsPos) != 3) 1562 1566 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); 1564 1568 if (fwrite(&data[3],sizeof(float), (size_t)(3),IonsDataF) != 3) 1565 1569 Error(FileOpenParams, "Error writing ionic forces!"); … … 1568 1572 fclose(IonsPos); 1569 1573 } 1570 if (F->OutVisStep == 0)1574 if (F->OutVisStep[Lev->LevelNo] == 0) 1571 1575 fclose(IonsDataZ); 1572 1576 fclose(IonsDataF); … … 1589 1593 // if (!P->Files.MeOutVis) return; 1590 1594 // 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; 1593 1597 // CreateDensityOutputGeneral(P, P->Par.me_comm_ST_Psi); 1594 1598 // OutVisDensity(P); 1595 1599 // 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 */ 1598 1602 } 1599 1603 1600 1604 /** Main output total electronic density and ion data for OpenDX. 1601 1605 * 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. 1603 1607 * \param *P Problem at hand 1604 1608 * \param *srcdens Pointer to DensityArray which is to be displayed … … 1608 1612 { 1609 1613 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; 1612 1616 1613 1617 CreateDensityOutputGeneral(P, P->Par.me_comm_ST_Psi); 1614 1618 OutVisDensity(P, srcdens); 1615 1619 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]++; 1618 1622 } 1619 1623 … … 1631 1635 if(P->Call.out[NormalOut]) fprintf(stderr,"(%i)Output of Current Density (Vis)\n", P->Par.me); 1632 1636 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"); 1634 1638 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); 1637 1641 1638 1642 // due to preprocessor values we can't put the following stuff into a loop … … 1660 1664 OutVisDensity(P, density); 1661 1665 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]++; 1664 1668 } 1665 1669 } … … 1676 1680 struct RunStruct *R = &P->R; 1677 1681 struct LatticeLevel *LevS = R->LevS; 1682 struct LatticeLevel *Lev = &P->Lat.Lev[STANDARTLEVEL]; 1678 1683 struct LatticeLevel *Lev0 = R->Lev0; 1679 1684 struct Density *Dens0 = Lev0->Dens; … … 1687 1692 if (!P->Files.MeOutVis) return; 1688 1693 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; 1693 1699 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) 1694 1700 OnePsiA = &Psi->AllPsiStatus[i]; // grab the desired OnePsiA … … 1709 1715 } // LPsiDatA is now set to the coefficients of OnePsi either stored or MPI_Received 1710 1716 1711 P->Files.OutputPosType[P->Files.OutVisStep ] = P->Lat.RT.ActualUse;1717 P->Files.OutputPosType[P->Files.OutVisStep[Lev->LevelNo]] = P->Lat.RT.ActualUse; 1712 1718 // recalculate density for the specific wave function ... 1713 1719 CalculateOneDensityR(Lat, LevS, Dens0, LPsiDatA, Dens0->DensityArray[ActualDensity], R->FactorDensityR, 0); … … 1717 1723 OutVisDensity(P, Dens0->DensityArray[ActualDensity]); 1718 1724 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; 1722 1728 } 1723 1729 }
Note:
See TracChangeset
for help on using the changeset viewer.