// ################################################################# // 物体に働く力の履歴の出力 void History::printHistoryForce(FILE* fp, const REAL_TYPE* force) { fprintf(fp, "%8d %14.6e", step, printTime()); fprintf(fp, " %12.4e %12.4e %12.4e", printForce(force[0]), printForce(force[1]), printForce(force[2]) ); fprintf(fp, "\n"); fflush(fp); }
//-----------------------------------------------------------------------// void CIO::readForceFile(const string & strFile) { ifstream ifFileStream; // open the file with name strParamFile ifFileStream.open(strFile.c_str()); // if the file doesnt exists, exit if (!ifFileStream.is_open()) throw CUnknownIOFile(strFile); string strLine, strSubLine; while (!ifFileStream.eof()) // skip comments and empty lines till the header { getline(ifFileStream,strLine); strSubLine = removeSpace(strLine); if (0 == strSubLine.compare(0,1,"")) continue; // ignore possible empty lines if ('!' != strLine[0]) break; // header } if ( 0 == strLine.find("atom__res_radius") || 0 == strLine.find("atom__resnumbc_radius_") ) cout << "\n" << "atom radii read from file " << strFile << "\n"; else if ( 0 == strLine.find("atom__res_charge") || 0 == strLine.find("atom__resnumbc_charge_") ) cout << "\n" << "atomic charges read from file " << strFile << "\n"; else throw CUnknownForceFileHeader(strFile,strLine); ifFileStream.clear(); ifFileStream.seekg(0); // rewind while (!ifFileStream.eof()) // skip and print comments (start with !) till the header { getline(ifFileStream,strLine); strSubLine = removeSpace(strLine); if (0 == strSubLine.compare(0,1,"")) continue; // ignore possible empty lines if ('!' != strLine[0]) break; // header cout << strLine << endl; // print comments } // determine file format // isPK = false: // atom(a6),residue(a3),radius(f8.4): aaaaaarrrfff.ffff // isPK = true: // atom(a6),residue(a3),residue_number(a4),subunit(a1),radius(f8.4): // aaaaaarrrnnnncfff.ffff if (0 == strLine.find("atom__res_radius") || 0 == strLine.find("atom__resnumbc_radius_")) { if (0 == strLine.find("atom__res_radius")) { readFileInNotPKFormat(ifFileStream,SIZEFILE); #ifdef DEBUG_IO_SIZE printForce(SIZEFILE); #endif } else if (0 == strLine.find("atom__resnumbc_radius_")) { cout << "reading pK style radius file \n"; readFileInPKFormat(ifFileStream,SIZEFILE); #ifdef DEBUG_IO_SIZE printForce(SIZEFILE); #endif } iRadiusNum = prgas.size(); // # of entries in radius file cout << "# of radius parameter records: \t\t" << iRadiusNum << "\n"; } else // 0 == strLine.find("atom__res_charge") || // 0 == strLine.find("atom__resnumbc_charge_") { if (0 == strLine.find("atom__res_charge")) { readFileInNotPKFormat(ifFileStream,CHARGEFILE); #ifdef DEBUG_IO_CHARGE printForce(CHARGEFILE); #endif } else if (0 == strLine.find("atom__resnumbc_charge_")) { cout << "reading pK style charge file \n"; readFileInPKFormat(ifFileStream,CHARGEFILE); #ifdef DEBUG_IO_CHARGE printForce(CHARGEFILE); #endif } iCrgNum = prgac.size(); // # of entries in charge file cout << "# of charge parameter records: \t\t" << iCrgNum << "\n"; } ifFileStream.close(); }