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

📄 cdmain.c

📁 一个很好的分子动力学程序
💻 C
字号:
/*************************************************************************File Includes*************************************************************************/#include <stdio.h>#include <string.h>#include <stdlib.h>#include <time.h>#include <signal.h>#include "iomngr.h"#include "strsub.h"#include "cdsubs.h"#include "cddoc.h"#include "cdhouse.h"#include "cdthread.h"   /*  SetNumProc()  */#ifdef __TURBOC__#include <alloc.h>#endif/*************************************************************************Defines*************************************************************************/#ifdef __TURBOC__#define SIGNUMBER 15#else#define SIGNUMBER SIGTERM#endif#define BOOLEAN int#define FALSE   0#define TRUE    1/*  Test ZETA calculcation in CSi calculation  */#define TEST_ZETA#undef  TEST_ZETA/*************************************************************************Local Function Prototypes*************************************************************************/void ihandler (int cursig);char *newpath (char *, char *);/*************************************************************************External Variables*************************************************************************//* Defined in cdsubs.c  */extern Particle_t   *a,*b;extern Simulation_t *s;extern FILE         *out;extern LIST         *inlist;/*  Signal Handler (for handling program interupts)  */int isig = 0;/*  Version info  */int XMD_Version_g = 2;int XMD_Release_g = 5;int XMD_Modification_g = 32;/* Tersoff C-Si Zeta Test  */#ifdef TEST_ZETAdouble MinZeta_g;int    MinStep_g=0;int    MinI_g;int    MinJ_g;#endif/*************************************************************************Main Routine*************************************************************************/int main (int argc, char *argv[])   {   /*  DECLARE VARIALBES */   char    instr[256];   BOOLEAN IsProgramDone;   FILE    *infile;   int     iopt;	int     imacro;	char    MacroName[2];   /*  PRINT ID  */#ifdef __TURBOC__   printf ("XMD (Version %i.%i.%i %s)  (PC)\n",      XMD_Version_g, XMD_Release_g, XMD_Modification_g, __DATE__);#else   printf ("XMD (Version %i.%i.%i %s)\n",      XMD_Version_g, XMD_Release_g, XMD_Modification_g, __DATE__);#endif/*  Thread Message  */#ifdef USE_THREAD_LIBprintf ("\nUsing pthread library.\n");#elseprintf ("\nNot using pthread library.\n");#endif/*  Patch message  */#ifdef INTELprintf ("Using asm(\"finit\"); patch in thread routines.\n");#elseprintf ("Not using asm(\"finit\"); patch in thread routines.\n");#endif	CheckMem_g = FALSE;   iopt = 1;	/*  Read command lines options  until non-option found ( '-' is non-option ) */	while (argc-iopt > 0  && argv[iopt][0]=='-' && argv[iopt][1])		{		/*  Request for help  */	   if 		(		!strcmpi("-?",   argv[iopt]) || 		!strcmpi("-help",argv[iopt])		)   	   {     		write_doc();     		return 0;			}		/*  Check memory option  -c  */		else if (!strcmpi(argv[iopt],"-c"))			{			CheckMem_g = TRUE;			}		/*  Debug option  */		else if (!strcmpi(argv[iopt],"-d"))			{			Debug_g = TRUE;			}		/*  Number of Thread option  -pn  or -p n  */		else if (argv[iopt][0]=='-' && argv[iopt][1]=='p')			{			/*  Number of threads is part of token  */			if (argv[iopt][2]>='0' && argv[iopt][2]<='9')				{				SetNumProc (atoi(argv[iopt]+2));				}			/*  Number of threads is separate token  */			else				{				SetNumProc (atoi(argv[iopt+1]));				iopt++;				}			/*  Print number of processors requested  */			printf ("\nNumber of processors requested = %i\n", GetNumProc());			}		iopt++;		}   /*   Test for incorrect input format - write messages  */   if (argc-iopt==0)      {      write_usage();      return 0;      }   /*  Start program timer  */   StartProgramTimer();	/*  Read command line macros (upto nine)  */	LOOP (imacro, 9)		{		/*  Don't read to many  */		if (iopt+imacro+1 >= argc)			break;		/*  Add Macro to list  */		MacroName[0] = '1' + imacro;		MacroName[1] = '\0';		AddMacro (MacroName, argv[imacro+iopt+1]);		}   /*  INITIALIZE VARIABLES  */   init();   /*  INSTALL SIGNAL HANDLERS  */   signal (SIGINT,    ihandler);   /*  intercepts ^C            */   signal (SIGNUMBER, ihandler);   /*  intercepts "kill <pid>"  */   /*  OPEN OUTPUT FILE  */   out = stdout;   /*  INITIALIZE LIST OF INPUT FILES  */   inlist =   m_ini_list ();                           /***********************/                           /*  READ INITIAL FILE  */                           /***********************/   infile = fopen ("config.xmd", "rt");   if (infile==NULL)         infile = fopen ( newpath (argv[0], "config.xmd"), "rt");   if (infile)      {      m_add_list (&inlist, infile, "f");      /*  PROCESS COMMANDS  */      IsProgramDone = FALSE;      while (!isig && !IsProgramDone && m_gets_list_f(instr,256,inlist)!=NULL)         {         /*  ECHO STRING  */         if (s->echo)            printf ("%s\n",instr);         read_command (instr, &IsProgramDone);         CHECK_HEAP         }      /*  CLOSE CURRENT INPUT  */      m_del_list (&inlist);      }                            /*********************/                            /*  OPEN INPUT FILE  */                            /*********************/	if (!strcmp("-",argv[iopt]))		infile = stdin;	else {      infile = fopen (argv[iopt], "rt");      if (infile==NULL)         {         printf("Sorry.  Cannot open %s\n",argv[iopt]);         return(1);         }	}   /*  ADD TO FILE MANAGER LIST  */   m_add_list (&inlist, infile, "f");   /* MOVE THROUGH FILE STACK  */   while (inlist)      {      /*  PROCESS COMMANDS  */      IsProgramDone = FALSE;      while (!isig && !IsProgramDone && m_gets_list_f(instr,256,inlist)!=NULL)         {         /*  ECHO STRING  */         if (s->echo)            printf ("%s\n",instr);         /*  Send command string to command function  */         read_command (instr, &IsProgramDone);         CHECK_HEAP         }      /*  CLOSE CURRENT INPUT  */      m_del_list (&inlist);      }   /*  If Termineated by External Signal save state  */   if (isig==1)      CleanAfterError();   /*  Call clean up routine  */   CleanBeforeEnd();#ifdef TEST_ZETA   if (Debug_g)      {      printf ("MinZeta = %le\n", MinZeta_g);      printf ("MinStep = %i\n",  MinStep_g);      printf ("MinI    = %i\n",  MinI_g);      printf ("MinJ    = %i\n",  MinJ_g);      }#endif   /*  END PROGRAM  */   return(0);   }/*************************************************************************Local Functions*************************************************************************//*Interupt handler (called when program recieves operating system signal*/void ihandler (int cursig)   {   /*  SET SIGNAL FLAG  */   isig = 1;   /*  FLUSH BUFFERS  */   fflush (stdout);   /*  PRINT MESSAGE  */   printf ("Interupt signal %i is caught.\n", cursig);   /*  RE-INSTALL SIGNAL HANDLER  */   signal (cursig, ihandler);   }/* EXTRACT DIRECTORY PATH FROM FILE PATH  */char *newpath (char *dpath, char *fpath)   {   static char tpath[512];   char colon = ':';#ifdef __TURBOC__   char slash = '\\';#else   char slash = '/';#endif   int l;   l = strlen(dpath) + strlen(fpath) + 1;   if (l==0)      return(NULL);   /*  PUT DIRECTORY PATH AT FRONT  */   strcpy (tpath, dpath);   l = strlen(tpath);   while (tpath[l]!=slash && tpath[l]!=colon && l>=0)      l--;   l++;   ASSERT(l>=0)   tpath[l] = 0;   /*  ISOLATE FILE NAME FROM PATH  */   l = strlen(fpath);   while (fpath[l]!=slash && fpath[l]!=colon && l>=0)      l--;   l++;   ASSERT(l>=0)   /*  APPEND FILE NAME  */   strcat (tpath, fpath+l);   /*  RETURN  */   return (tpath);}

⌨️ 快捷键说明

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