⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdstate.c

📁 一个很好的分子动力学程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	if (NumChars>0)		{		FREE(*ArrayPointer)		ALLOCATE (*ArrayPointer, char, NumChars)		fread (*ArrayPointer, NumChars, sizeof(char), InputFile);		}	/*  .. initilialze pointer to NULL	*/	else		*ArrayPointer = NULL;	}/*Write external vector type (used for external force and external springs*/void WriteExternalVector (int NumVector, ExternalVector_t **Vector, FILE *fout)	{	int ivector;	int NumAlloc;	/*  If null vector then write no elements  */	if (Vector==NULL)		NumVector = 0;	/*	Write vector length (this is number of pointers, all of which could be NULL	*/	WRITE_SCALAR (fout, NumVector);	/*  If count is zero then return  */	if (NumVector==0)		return;	/*  Count number of external vectors allocated	*/	NumAlloc = 0;	LOOP (ivector, NumVector)		if (Vector[ivector]!=NULL)			NumAlloc++;	/*  Write number of allocated vectors	*/	WRITE_SCALAR (fout, NumAlloc);	/*  Write out vectors  */	LOOP (ivector, NumVector)		if (Vector[ivector]!=NULL)			{			WRITE_SCALAR(fout, ivector);			WRITE_ARRAY (fout, Vector[ivector]->Origin, NDIR);			WRITE_ARRAY (fout, Vector[ivector]->Vector, NDIR);			NumAlloc--;			}	/*  Double check that correct number of vectors was written  */	if (NumAlloc != 0)		{		printf ("INTERNAL ERROR: File %s line %i.\n", __FILE__, __LINE__);		printf ("Inconsistency in length of Vector.\n");		CleanAfterError();		}	}/*Read external vector type (used for external force and external springs*/void ReadExternalVector (ExternalVector_t ***Vector, FILE *fin)	{	int ialloc;	int ivector;	int NumVector;	int NumAlloc;	/*	Read vector length (this is number of pointers, all of which could be NULL	*/	READ_SCALAR (fin, NumVector)	/*  If count is zero then return  */	if (NumVector==0)		{		*Vector = NULL;		return;		}	/*  Read number of external vectors allocated  */	READ_SCALAR (fin, NumAlloc)	/*  Allocate list of pointers  */	ALLOCATE (*Vector, ExternalVector_t *, NumVector);	/*  Allocate individual pointers  */	LOOP (ialloc, NumAlloc)		{		READ_SCALAR (fin, ivector)		ALLOCATE ((*Vector)[ivector], ExternalVector_t, 1)		READ_ARRAY (fin, (*Vector)[ivector]->Origin, NDIR)		READ_ARRAY (fin, (*Vector)[ivector]->Vector, NDIR)		}	}/*  Write particle structure data (but not pointers or arrays)  */void WriteParticleStructure (Particle_t *a, FILE *fout)	{	/*  Write data  */	WRITE_ARRAY  (fout, a->bcur,	NDIR);	WRITE_ARRAY  (fout, a->bref,	NDIR);	WRITE_ARRAY  (fout, a->trans, NDIR);	WRITE_SCALAR (fout, a->IsInitializedBox);	WRITE_SCALAR (fout, a->IsInitializedCoord);	WRITE_SCALAR (fout, a->selkeep);	WRITE_ARRAY  (fout, a->surf, 3);	WRITE_SCALAR (fout, a->ebath);	WRITE_SCALAR (fout, a->etot);	WRITE_SCALAR (fout, a->temp);	WRITE_SCALAR (fout, a->epot);	WRITE_SCALAR (fout, a->ekin);	WRITE_SCALAR (fout, a->epavg);	WRITE_SCALAR (fout, a->navg);	WRITE_SCALAR (fout, a->np);	WRITE_SCALAR (fout, a->ng);	WRITE_SCALAR (fout, a->nsel);	WRITE_SCALAR (fout, a->nfix);	WRITE_SCALAR (fout, a->nbin);	WRITE_SCALAR (fout, a->run);	WRITE_SCALAR (fout, a->step);	WRITE_SCALAR (fout, a->ndim);	WRITE_SCALAR (fout, a->time);	WRITE_SCALAR (fout, a->tempc);	WRITE_SCALAR (fout, a->dtime);	WRITE_SCALAR (fout, a->size);	WRITE_SCALAR (fout, a->cutoff);	WRITE_SCALAR (fout, a->rmin);	}void ReadParticleStructure (Particle_t *a, FILE *fin)	{	/*  Read data	*/	READ_ARRAY	(fin, a->bcur,  NDIR);	READ_ARRAY	(fin, a->bref,  NDIR);	READ_ARRAY	(fin, a->trans, NDIR);	READ_SCALAR (fin, a->IsInitializedBox);	READ_SCALAR (fin, a->IsInitializedCoord);	READ_SCALAR (fin, a->selkeep);	READ_ARRAY	(fin, a->surf, 3);	READ_SCALAR (fin, a->ebath);	READ_SCALAR (fin, a->etot);	READ_SCALAR (fin, a->temp);	READ_SCALAR (fin, a->epot);	READ_SCALAR (fin, a->ekin);	READ_SCALAR (fin, a->epavg);	READ_SCALAR (fin, a->navg);	READ_SCALAR (fin, a->np);	READ_SCALAR (fin, a->ng);	READ_SCALAR (fin, a->nsel);	READ_SCALAR (fin, a->nfix);	READ_SCALAR (fin, a->nbin);	READ_SCALAR (fin, a->run);	READ_SCALAR (fin, a->step);	READ_SCALAR (fin, a->ndim);	READ_SCALAR (fin, a->time);	READ_SCALAR (fin, a->tempc);	READ_SCALAR (fin, a->dtime);	READ_SCALAR (fin, a->size);	READ_SCALAR (fin, a->cutoff);	READ_SCALAR (fin, a->rmin);	/*  Invalidate Neighbor List	*/	a->InvalidNeighborList = TRUE;	}void WriteVersion (FILE *fout)	{	/*  Write version info	*/	WRITE_SCALAR (fout, XMD_Version_g);	WRITE_SCALAR (fout, XMD_Release_g);	WRITE_SCALAR (fout, StateVersion_m);	WRITE_SCALAR (fout, StateRelease_m);	}void ReadVersion (FILE *fin)	{	int InputXMD_Version;	int InputXMD_Release;	BOOLEAN WrongVersion;	BOOLEAN WrongRelease;	/*  Read version into  */	READ_SCALAR (fin, InputXMD_Version);	READ_SCALAR (fin, InputXMD_Release);	READ_SCALAR (fin, InputStateVersion_m);	READ_SCALAR (fin, InputStateRelease_m);	/*  Test State file version  */	WrongVersion = (InputStateVersion_m != StateVersion_m);	WrongRelease = (InputStateRelease_m != StateRelease_m);	/*  Print error or warning if wrong version or release  */	if (WrongVersion)		printf ("ERROR\n");	else if (WrongRelease)		{		printf ("WARNING\n");		IncrementNumberOfWarnings();		}	if (WrongVersion || WrongRelease)		{		printf ("Input Particle State File is version %i.%i\n",			InputStateVersion_m, InputStateRelease_m);		printf ("It was written by XMD version %i.%i.\n",			InputXMD_Version, InputXMD_Release);		printf ("The expected Particle State File version is %i.%i.\n",			StateVersion_m, StateRelease_m);		printf ("The current XMD version is %i.%i.\n",			XMD_Version_g, XMD_Release_g);		}	/*  Exit if wrong version	*/	if (WrongVersion)		CleanAfterError();	/*  Warning if wrong release	*/	if (WrongRelease)		printf ("Program will attempt to continue.\n");	}void WriteUserInfo (FILE *fout)	{	char	  StringBuffer[256];	time_t  TimeInSeconds;	struct tm *TimePtr;	/*  Write XMD STATE FILE ID STRING	*/	WriteStringToBinaryFile (fout, "XMD STATE FILE");	/*  Write STATE FILE VERSION STRING  */	sprintf (StringBuffer, "Version: %i.%i", StateVersion_m, StateRelease_m);	WriteStringToBinaryFile (fout, StringBuffer);	/*  Write DATE  */	time (&TimeInSeconds);	TimePtr = localtime (&TimeInSeconds);	sprintf (StringBuffer, "Date: %02d/%02d/%04d",				TimePtr->tm_mon+1, TimePtr->tm_mday, TimePtr->tm_year+1900);	WriteStringToBinaryFile (fout, StringBuffer);	/*  Write TIME  */	sprintf (StringBuffer, "Time: %02d:%02d:%02d",				TimePtr->tm_hour, TimePtr->tm_min, TimePtr->tm_sec);	WriteStringToBinaryFile (fout, StringBuffer);	}void ReadUserInfo (FILE *fin)	{	char StringBuffer[256];	/*  Test file State file ID string	*/	ReadStringFromBinaryFile (fin, StringBuffer, 256);	if (strcmpi (StringBuffer, "XMD STATE FILE") != 0)		{		ERROR_PREFIX		printf ("Input file is not a state file.\n");		CleanAfterError();		}	/*  Skip version string  */	ReadStringFromBinaryFile (fin, StringBuffer, 256);	/*  Skip date	  string  */	ReadStringFromBinaryFile (fin, StringBuffer, 256);	/*  Skip time	  string  */	ReadStringFromBinaryFile (fin, StringBuffer, 256);	}void WriteTitle (FILE *fout, Particle_t *a)	{	int ititle;	/*  Write title  */	for (ititle=0; ititle<8; ititle++)		WriteStringToBinaryFile (fout, a->title[ititle]);	}void ReadTitle (FILE *fin, Particle_t *a)	{	int ititle;	int ichar;	/*  Initialize title to null	*/	for (ititle=0; ititle<8; ititle++)	for (ichar=0; ichar<NTITLESTR; ichar++)		a->title[ititle][ichar] = '\0';	/*  Read title  */	for (ititle=0; ititle<8; ititle++)		ReadStringFromBinaryFile (fin, a->title[ititle], NTITLESTR);	}void WriteDelimiter (FILE *fout)	{	char StringBuffer[2];	/*  Write delimiter for both UNIX head command and DOS Type command	*/	StringBuffer[0] = '\0';	StringBuffer[1] = 26;	WRITE_ARRAY (fout, StringBuffer, 2);	}void ReadDelimiter (FILE *fin)	{	char StringBuffer[2];	/*  Skip file delimiters  */	fread (StringBuffer, sizeof(char), 2, fin);	}void WriteStringToBinaryFile (FILE *fout, char *String)	{	char LineFeed = '\n';	WRITE_ARRAY (fout, String, strlen (String) );	WRITE_SCALAR(fout, LineFeed);	}void ReadStringFromBinaryFile (FILE *fin, char *StringBuffer, int NumChar)	{	int ichar;	char InputChar;	ichar = 0;	do		{		/*  Read one character	*/		fread (&InputChar, sizeof(char), 1, fin);		/*  Add to buffer  */		if (InputChar == '\n' || InputChar =='\r')			StringBuffer[ichar] = '\0';		else			StringBuffer[ichar] = InputChar;		/*  Increment counter  */		ichar++;		/*  Until newline read or buffer filled	*/		} while (InputChar != '\n' && ichar<NumChar);	}void WriteSimulationStructure (Simulation_t *s, FILE *OutputFile)	{	WRITE_SCALAR(OutputFile, s->tempc)	WRITE_SCALAR(OutputFile, s->cutoff)	WRITE_SCALAR(OutputFile, s->cutmin)	WRITE_SCALAR(OutputFile, s->uratio)	WRITE_SCALAR(OutputFile, s->size)	WRITE_SCALAR(OutputFile, s->dtime)	WRITE_SCALAR(OutputFile, s->cstep)	WRITE_SCALAR(OutputFile, s->nrej)	WRITE_SCALAR(OutputFile, s->nacc)	WRITE_SCALAR(OutputFile, s->nstep)	WRITE_SCALAR(OutputFile, s->quench)	WRITE_SCALAR(OutputFile, s->echo)	WRITE_SCALAR(OutputFile, s->eulabel)	WRITE_SCALAR(OutputFile, s->eunit)	WRITE_SCALAR(OutputFile, s->seed)	/*  esave flag and file */	WRITE_SCALAR(OutputFile, s->EnergyStepOutput.FileName)	WRITE_SCALAR(OutputFile, s->EnergyStepOutput.Save)	WRITE_SCALAR(OutputFile, s->EnergyStepOutput.IsFileNew)	WRITE_SCALAR(OutputFile, s->EnergyStepOutput.StepIncrement)	WRITE_SCALAR(OutputFile, s->EnergyStepOutput.CurrentStep)	/*  ssave flag and file */	WRITE_SCALAR(OutputFile, s->StressStepOutput.FileName)	WRITE_SCALAR(OutputFile, s->StressStepOutput.Save)	WRITE_SCALAR(OutputFile, s->StressStepOutput.IsFileNew)	WRITE_SCALAR(OutputFile, s->StressStepOutput.StepIncrement)	WRITE_SCALAR(OutputFile, s->StressStepOutput.CurrentStep)	/*  bsave flag and file */	WRITE_SCALAR(OutputFile, s->BoxStepOutput.FileName)	WRITE_SCALAR(OutputFile, s->BoxStepOutput.Save)	WRITE_SCALAR(OutputFile, s->BoxStepOutput.IsFileNew)	WRITE_SCALAR(OutputFile, s->BoxStepOutput.StepIncrement)	WRITE_SCALAR(OutputFile, s->BoxStepOutput.CurrentStep)	/*  Debug flag  */	WRITE_SCALAR(OutputFile, s->debug)	Debug_g = s->debug;	/*  Stop signal  */	WRITE_SCALAR(OutputFile, s->signal)	/*  Potential Name  */	WRITE_SCALAR(OutputFile, s->pottype)	/*  Compare Info	*/	WRITE_SCALAR(OutputFile, s->UseCompare)	WRITE_SCALAR(OutputFile, s->UseInverseCompare)	WRITE_SCALAR(OutputFile, s->NewCompareFile)	WRITE_SCALAR(OutputFile, s->CompareFileName)	WRITE_SCALAR(OutputFile, s->CompareRadius)	WRITE_SCALAR(OutputFile, s->CompareEnergy)	/*  tsave flag and file */	WRITE_SCALAR(OutputFile, s->TrajectoryStepOutput.FileName)	WRITE_SCALAR(OutputFile, s->TrajectoryStepOutput.Save)	WRITE_SCALAR(OutputFile, s->TrajectoryStepOutput.IsFileNew)	WRITE_SCALAR(OutputFile, s->TrajectoryStepOutput.StepIncrement)	WRITE_SCALAR(OutputFile, s->TrajectoryStepOutput.CurrentStep)	}void ReadSimulationStructure (Simulation_t *s, FILE *InputFile)	{	READ_SCALAR(InputFile, s->tempc)	READ_SCALAR(InputFile, s->cutoff)	READ_SCALAR(InputFile, s->cutmin)	READ_SCALAR(InputFile, s->uratio)	READ_SCALAR(InputFile, s->size)	READ_SCALAR(InputFile, s->dtime)	READ_SCALAR(InputFile, s->cstep)	READ_SCALAR(InputFile, s->nrej)	READ_SCALAR(InputFile, s->nacc)	READ_SCALAR(InputFile, s->nstep)	READ_SCALAR(InputFile, s->quench)	READ_SCALAR(InputFile, s->echo)	READ_SCALAR(InputFile, s->eulabel)	READ_SCALAR(InputFile, s->eunit)	READ_SCALAR(InputFile, s->seed)	/*  esave flag and file */	READ_SCALAR(InputFile, s->EnergyStepOutput.FileName)	READ_SCALAR(InputFile, s->EnergyStepOutput.Save)	READ_SCALAR(InputFile, s->EnergyStepOutput.IsFileNew)	READ_SCALAR(InputFile, s->EnergyStepOutput.StepIncrement)	READ_SCALAR(InputFile, s->EnergyStepOutput.CurrentStep)	/*  ssave flag and file */	READ_SCALAR(InputFile, s->StressStepOutput.FileName)	READ_SCALAR(InputFile, s->StressStepOutput.Save)	READ_SCALAR(InputFile, s->StressStepOutput.IsFileNew)	READ_SCALAR(InputFile, s->StressStepOutput.StepIncrement)	READ_SCALAR(InputFile, s->StressStepOutput.CurrentStep)	/*  bsave flag and file */	READ_SCALAR(InputFile, s->BoxStepOutput.FileName)	READ_SCALAR(InputFile, s->BoxStepOutput.Save)	READ_SCALAR(InputFile, s->BoxStepOutput.IsFileNew)	READ_SCALAR(InputFile, s->BoxStepOutput.StepIncrement)	READ_SCALAR(InputFile, s->BoxStepOutput.CurrentStep)	/*  Debug flag  */	READ_SCALAR(InputFile, s->debug)	/*  Stop signal  */	READ_SCALAR(InputFile, s->signal)	/*  Potential Name  */	READ_SCALAR(InputFile, s->pottype)	/*  Compare Info	*/	READ_SCALAR(InputFile, s->UseCompare)	READ_SCALAR(InputFile, s->UseInverseCompare)	READ_SCALAR(InputFile, s->NewCompareFile)	READ_SCALAR(InputFile, s->CompareFileName)	READ_SCALAR(InputFile, s->CompareRadius)	READ_SCALAR(InputFile, s->CompareEnergy)	/*  Skip following information if state file prior to 1.2  */	if (InputStateRelease_m < 2)		return;	/*  tsave flag and file */	READ_SCALAR(InputFile, s->TrajectoryStepOutput.FileName)	READ_SCALAR(InputFile, s->TrajectoryStepOutput.Save)	READ_SCALAR(InputFile, s->TrajectoryStepOutput.IsFileNew)	READ_SCALAR(InputFile, s->TrajectoryStepOutput.StepIncrement)	READ_SCALAR(InputFile, s->TrajectoryStepOutput.CurrentStep)	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -