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

📄 cdrepeat.c

📁 一个很好的分子动力学程序
💻 C
字号:
#include <stdlib.h>#include <stdio.h>#include <math.h>#include <string.h>#include "cdhouse.h"#include "rcvio.h"#include "cdcor.h"#include "iomngr.h"#include "parse.h"#include "strsub.h"#include "cdsubs.h"#define REPEATCOR									/************************/									/**  GLOBAL VARIABLES  **/									/************************/extern Particle_t   *a,*b;extern Simulation_t *s;extern FILE 		  *out;extern LIST 		  *inlist;extern int				isig; 	/*  SIGNAL SET BY kill OR Cntl-C  */									 /*  READ REPEAT BLOCK	*/void read_repeat (char *instr)	{	int n;	int qflag = 0, nread, nest;	char origstr[256];	char copystr[256], *tailstr, *cmdstr;	BUFF *b;	BOOLEAN CorFileFlag;	BOOLEAN RcvFileFlag;	BOOLEAN UseStep;	BOOLEAN UseSkip;	BOOLEAN ReadToEnd;	FILE *InputFile;	char *InputFileName;	int Step1;	int Step2;	int SkipInterval;	/*  Parse command options  */	cmdstr = strhed (&instr);	CorFileFlag = FALSE;	RcvFileFlag = FALSE;	UseStep     = FALSE;	UseSkip     = FALSE;	/*  Read from COR or RCV file  */	CorFileFlag = (strcmpi(cmdstr,"COR")==0);	RcvFileFlag = (strcmpi(cmdstr,"RCV")==0);	ReadToEnd   = FALSE;	if (CorFileFlag || RcvFileFlag)		{		/*  Get input file name  */		InputFileName = strhed (&instr);		/*  Test for reading from specpfied steps  */		UseStep = !IsBlank(instr);		/*  Get step numbers   */		if (UseStep)			{			/*  Get starting step  */			Step1         = intstrf(&instr);			/*  Read to end of file  */			if (IsBlank(instr)  || instr[0]=='*')				{				ReadToEnd = TRUE;								/*  Remove token if '*' */				if (instr[0]=='*')					strhed (&instr);				}			/*  Read to specified step  */			else				{				Step2         = intstrf(&instr);				}			/*  Test for  skip interval  */			UseSkip = !IsBlank(instr);			if (UseSkip)				SkipInterval  = intstrf(&instr);			}		}	/*  Repeat N times  */	else		{		n = intstrf (&cmdstr);		}	/*  INTIALIZE BUFFER  */	b = m_ini_buff();	/*  READ INPUT LINES UNTIL "END"  */	nread = 0;	nest	= 1;	while (nest && m_gets_list_f(origstr,256,inlist)!=NULL)	{		/*  COPY STRING  */		strcpy (copystr, origstr);		tailstr = copystr;		/*  ECHO STRING IF NOT FROM BUFFER	 */		if (!inlist->IsBuffer && s->echo)			printf ("%s\n", origstr);		/*  PARSE COMMAND  */		cmdstr = strhed (&tailstr);		/*  IF END REDUCE NEST COUNT	*/		if 	  (!strcmpi(cmdstr, "END"))			nest--;		/*  IF REPEAT INCREASE NEST COUNT  */		else if (!strcmpi(cmdstr, "REPEAT"))			nest++;		/*  ADD COMMAND TO BUFFER	*/		if (nest)			m_add_buff (b, origstr);		nread++;	}	/*  CHECK FOR PROPER NESTING	*/	if (nest)	{		printf ("ERROR (read_repeat):  Improper nesting of REPEAT and END.\n");		CleanAfterError();	}	/*  ADD BUFFER TO INPUT LIST	*/	m_add_list (&inlist, b, "b");	/*  PROCESS COMMANDS n TIMES */	/*  (break if signal set, i.e. isig==1)  */	/*   Repeat for each step in COR file  */	if (CorFileFlag || RcvFileFlag)		{		/*  Open binary Cor file  */		if  (CorFileFlag)			InputFile = fopen (InputFileName, "rb");		/*  Open text Rcv file  */		else			InputFile = fopen (InputFileName, "rt");		/*  Test  for  input file  present  */		if (InputFile==NULL)			{			printf ("ERROR:  Cannot open file %s\n", InputFileName);			}		/*  Process commands for each COR or RCV step  */		do 			{			/*  Read step  */			if (CorFileFlag)				ReadCorFile (InputFile, a);			else				readrcv     (InputFile, a);			/*  Stop input if end of file  */			if (feof(InputFile))				break;			/*  Stop if above range  */			if (UseStep && !ReadToEnd && a->step>Step2)				break;						/*  Skip if below range  */			if (UseStep && a->step<Step1)				continue;			/*  Skip if not on skip interval  */			if (UseSkip && ((a->step - Step1) % SkipInterval != 0))				continue;			/*  Process command list  */   		qflag = 0;   		while (!qflag && m_gets_list(origstr,256,inlist)!=NULL && !qflag)				{   			read_command (origstr, &qflag);				}			if (qflag) {				CleanBeforeEnd();				exit(0);			}   		/*  "REWIND" BUFFER  */   		m_rew_list (inlist);		   	   }   		while (!feof(InputFile) && isig!=1);		/*  Close COR or RCV File  */		fclose (InputFile);		}	else		{   	while (n-- && isig!=1 && !qflag)   		{   		qflag = 0;   		while (!qflag && m_gets_list(origstr,256,inlist)!=NULL)				{   			read_command (origstr, &qflag);				}   		/*  "REWIND" BUFFER  */   		m_rew_list (inlist);   		}			/*  Quit program  */			if (qflag) {				CleanBeforeEnd();				exit(0);			}		}	/*  CLOSE CURRENT INPUT (AUTOMATICALLY REMOVES BUFFER STORAGE	*/	m_del_list (&inlist);	}

⌨️ 快捷键说明

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