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

📄 autotors.c

📁 c++编写的并行拉马克遗传算法的程序。实现分析对接程序
💻 C
📖 第 1 页 / 共 5 页
字号:
		};		if(!on_list(node->prev[i]->id,rootlist,rootnum)){			if(s=num_cycle(node->prev[i])){				for(r=0;r<cycle_size[s];r++){				if(!on_list(cycles[s][r],rootlist,rootnum)){					rootlist[rootnum++]=cycles[s][r];					tempr=find_key(cycles[s][r],natom,head);					tempr->root=1;				};				};/*for all the cycle members*/			}else{				node->prev[i]->root=1;				rootlist[rootnum++]=node->prev[i]->id;			};		};	};	if(traverse_num==4&&check_tors(node->id,node->prev[i]->id))	fprintf(outfile,"BRANCH %d %d\n",node->new_id,(node->prev[i])->new_id);	if(k=num_cycle(node->prev[i])){		newlist=is_cycle(node->prev[i]);		traverse_cycle(newlist,k,0,list,index);		if(traverse_num==2&&check_tors(node->id,node->prev[i]->id))		nbranch--;		if(traverse_num==4&&check_tors(node->id,node->prev[i]->id))		fprintf(outfile,"ENDBRANCH %d %d\n",node->new_id,(node->prev[i])->new_id);	}else{  	/*if not a cycle*/	visit_prev(node->prev[i],list,index,nlist,nindex);	if(traverse_num==2&&check_tors(node->id,node->prev[i]->id))	nbranch--;	if(traverse_num==4&&check_tors(node->id,node->prev[i]->id))	fprintf(outfile,"ENDBRANCH %d %d\n",node->new_id,(node->prev[i])->new_id);	};/*if a cycle or not if-else*/	};   }; /*for i to prev_num*/	if(traverse_num==2){/*NEED TO LOOK FOR 3H leaves in the case of C, 2 for N if valid tors*/	switch (atmtype(atmptr,node->id)) {		case 'C':		case 'a':		case 'b': if ((node->prev_num==3)&&atmtype(atmptr,node->prev[0]->id)=='H'&&atmtype(atmptr,node->prev[1]->id)=='H'&&atmtype(atmptr,node->prev[2]->id)=='H')torsdof--;break;		case 'N': if ((node->prev_num==2)&&atmtype(atmptr,node->prev[0]->id)=='H'&&atmtype(atmptr,node->prev[1]->id)=='H')torsdof--;break;	};/*switch*/	};/*end of tordof correction on tn=3*/	break;};/*switch*/}void     visit_next(node,list,index,plist,pindex)ATOM_NODE * node;int *list,*index;int *plist,*pindex;{	int i,j,k,r,s,*newlist;        int connects;	double mk;	ATOM_NODE * tempr;	if((node->next_num+node->prev_num)==1) return;	if(on_list(node->id,list,*index)) return;	if(num_cycle(node)){		newlist=is_cycle(node);       	        traverse_cycle(newlist,num_cycle(node),1,list,index);		return;     	};	*(list + * index)=node->id;	*index=*(index) + 1;	check_h(node);	if(traverse_num==1&&!((node->prev_num==1)&&on_list(node->prev[0],list,*index))){		prev_next(node,list,index,plist,pindex);		for(k=0;k<*pindex;k++){			*(plist+k)=0;		};		*pindex=0;	};switch(node->next_num) {case 0  : return;case 1  :connects=node->next[0]->prev_num+node->next[0]->next_num;	if(((connects>0)||num_cycle(node->next[0]))&&!on_list(node->next[0]->id,list,*index)){	   if(!on_list(node->next[0]->id,rootlist,rootnum)&&connects>1&& traverse_num==1){		if(aflag && is_amide(node)>0)printf("3:found amide next %d\n",node->id);		else		if(!(bflag && check_back(node,0,'n')))		head_tors=add_tors(node->id,(node->next[0])->id,head_tors);           };	if(traverse_num==2&&check_tors(node->id,node->next[0]->id))	nbranch++;	if(traverse_num==2&&!nbranch&&!check_tors(node->id,node->next[0]->id)){		if(!on_list(node->id,rootlist,rootnum)){		node->root=1;		rootlist[rootnum++]=node->id;		};		if(!on_list(node->next[0]->id,rootlist,rootnum)){			if(s=num_cycle(node->next[0])){				for(r=0;r<cycle_size[s];r++){				if(!on_list(cycles[s][r],rootlist,rootnum)){					rootlist[rootnum++]=cycles[s][r];					tempr=find_key(cycles[s][r],natom,head);					tempr->root=1;				};				};/*for all the cycle members*/			}else{			node->next[0]->root=1;			rootlist[rootnum++]=node->next[0]->id;			};		};	};	if(traverse_num==4&&check_tors(node->id,node->next[0]->id))	fprintf(outfile,"TORS %d %d\n",node->new_id,node->next[0]->new_id);	if(k=num_cycle(node->next[0])){		newlist=is_cycle(node->next[0]);		traverse_cycle(newlist,k,1,list,index);	        if(traverse_num==2&&check_tors(node->id,node->next[0]->id))		nbranch--;	        if(traverse_num==4&&check_tors(node->id,node->next[0]->id))	        fprintf(outfile,"ENDTORS %d %d\n",node->new_id,node->next[0]->new_id);	}else{ /*else2*/	visit_next(node->next[0],list,index,plist,pindex);	if(traverse_num==2&&check_tors(node->id,node->next[0]->id))	nbranch--;	if(traverse_num==4&&check_tors(node->id,node->next[0]->id))	fprintf(outfile,"ENDTORS %d %d\n",node->new_id,node->next[0]->new_id);	};	};/*if case1*/	break;default: for(i=0;i<node->next_num;i++){               connects=node->next[i]->prev_num+node->next[i]->next_num;	if(((connects>0)||num_cycle(node->next[i]))&&!on_list(node->next[i]->id,list,*index)){	   if(!on_list(node->next[i]->id,rootlist,rootnum)&&connects>1&&traverse_num==1){		if(aflag && is_amide(node)>0)printf("4:found amide next %d\n",node->id);		else		if(!(bflag && check_back(node,i,'n')))		head_tors=add_tors(node->id,node->next[i]->id,head_tors);	   };	if(traverse_num==2&&check_tors(node->id,node->next[i]->id))	nbranch++;	if(traverse_num==2&&!nbranch&&!check_tors(node->id,node->next[i]->id)){		if(!on_list(node->id,rootlist,rootnum)){		node->root=1;		rootlist[rootnum++]=node->id;		};			if(!on_list(node->next[i]->id,rootlist,rootnum)){			if(s=num_cycle(node->next[i])){				for(r=0;r<cycle_size[s];r++){				if(!on_list(cycles[s][r],rootlist,rootnum)){					rootlist[rootnum++]=cycles[s][r];					tempr=find_key(cycles[s][r],natom,head);					tempr->root=1;				};				};/*for all the cycle members*/			}else{			node->next[i]->root=1;			rootlist[rootnum++]=node->next[i]->id;			};		};		};	if(traverse_num==4&&check_tors(node->id,node->next[i]->id)){	fprintf(outfile,"BRANCH %d %d\n",node->new_id,node->next[i]->new_id);	};	if(k=num_cycle(node->next[i])){		newlist=is_cycle(node->next[i]);		traverse_cycle(newlist,k,1,list,index);	        if(traverse_num==2&&check_tors(node->id,node->next[i]->id))		nbranch--;	        if(traverse_num==4&&check_tors(node->id,node->next[i]->id)){	        fprintf(outfile,"ENDBRANCH %d %d\n",node->new_id,node->next[i]->new_id);		};	}else{ /*else2*/	   visit_next(node->next[i],list,index,plist,pindex);	if(traverse_num==2&&check_tors(node->id,node->next[i]->id))	nbranch--;	if(traverse_num==4&&check_tors(node->id,node->next[i]->id))	fprintf(outfile,"ENDBRANCH %d %d\n",node->new_id,node->next[i]->new_id);	};		};	};/*forall nexts*/	if(traverse_num==2){/*NEED TO LOOK FOR 3 H leaves in the case of C, 2 for N if valid tors*/	switch (atmtype(atmptr,node->id)){		case 'a':		case 'b': if ((node->next_num==3)&&atmtype(atmptr,node->next[0]->id)=='H'&&atmtype(atmptr,node->next[1]->id)=='H'&&atmtype(atmptr,node->next[2]->id)=='H')torsdof--;break;/*need to decrement torsdof*/		case 'N': if ((node->next_num==3)&&atmtype(atmptr,node->next[0]->id)=='H'&&atmtype(atmptr,node->next[1]->id)=='H')torsdof--;break;	};/*switch*/	};/*end of tordof correction on tn=3*/	break; /*for the nexts*/};/*switch on node->next_num*/}void traverse_cycle(cyclelist,cyclenum,to_next,tlist,tnum)int  *cyclelist,cyclenum,to_next;int *tlist,*tnum;{	int i,j,k,m,n,r,p_num,n_num,connect_num,h_num;	int prev_con, next_con;	int connects;        int np_num;        int *nplist, *np_index;	double mk;	char rec[7],*chptr;/*for firstpart ofoutput*/	ATOM_NODE * temp1,* temp2;	TORS_ANGLE * tempt;	nplist=(int*) calloc(natom,sizeof(n_num));	np_index=(int*) calloc(1,sizeof(n_num));	*np_index=0;if(!cyclelist){	printf("error in traverse_cycle\n");	exit(1);	};	n=cycle_size[cyclenum];	for(i=0;i<n;i++){	temp1=find_key(cyclelist[i],n,head);	if(!temp1){		printf("error in finding %d\n",cyclelist[i]);		exit(1);	};	if(!on_list(cyclelist[i],tlist,*tnum)){		*(tlist + *tnum)=cyclelist[i];		*tnum=(*tnum)+1;	};	if(traverse_num==2&&!nbranch&&!on_list(cyclelist[i],rootlist,rootnum)){		rootlist[rootnum++]=cyclelist[i];	};			check_h(temp1);	connect_num=temp1->prev_num + temp1->next_num;	p_num=temp1->prev_num;	n_num=temp1->next_num;/*printf("tc:switching on %d's p_num=%d,n_num=%d\n",temp1->id,p_num,n_num);*/	switch(connect_num){	case 0 : break;	case 1 : printf("error in traverse_cycle:cycle with 1 connection\n");		 exit(1);	case 2 : for(j=0;j<p_num;j++){ 	if(!on_list(temp1->prev[j]->id,rootlist,rootnum)&&!on_list(temp1->prev[j]->id,tlist,*tnum)){		 if(!eq_cycle(temp1->prev[j]->id,temp1->id)){		connects=temp1->prev[j]->prev_num+temp1->prev[j]->next_num;		if(traverse_num==1){		       if(!to_next)			next_prev(temp1->prev[j],tlist,tnum,nplist,np_index);		       if(to_next)			prev_next(temp1->prev[j],tlist,tnum,nplist,np_index);			for(k=0;k<*np_index;k++){				*(nplist+k)=0;			};			*np_index=0;		if(aflag && is_amide(temp1)<0)printf("5:found amide prev %d\n",temp1->id);		else		if(connects>1&&!(bflag&&check_back(temp1,j,'p')))		head_tors=add_tors(temp1->id,temp1->prev[j]->id,head_tors);		};	if(traverse_num==2&&check_tors(temp1->id,temp1->prev[j]->id))	nbranch++;	if(traverse_num==2&&!nbranch&&!check_tors(temp1->id,temp1->prev[j]->id)){		if(!on_list(temp1->id,rootlist,rootnum)){		temp1->root=1;		rootlist[rootnum++]=temp1->id;		};		if(!on_list(temp1->prev[j]->id,rootlist,rootnum)){		temp1->prev[j]->root=1;		rootlist[rootnum++]=temp1->prev[j]->id;		};	};      	if(traverse_num==4&&check_tors(temp1->id,temp1->prev[j]->id))	fprintf(outfile,"TORS %d %d\n",temp1->new_id,temp1->prev[j]->new_id);      	visit_prev(temp1->prev[j],tlist,tnum,nplist,np_index);      	if(traverse_num==2&&check_tors(temp1->id,temp1->prev[j]->id))		nbranch--;      	if(traverse_num==4&&check_tors(temp1->id,temp1->prev[j]->id)){	fprintf(outfile,"ENDTORS %d %d\n",temp1->new_id,temp1->prev[j]->new_id);			};   		};  	};/*if not on rootlist and not on tlist*/ 	};/*case2:prevs*/	for(j=0;j<n_num;j++){ 	if(!on_list(temp1->next[j]->id,rootlist,rootnum)&&!on_list(temp1->next[j]->id,tlist,*tnum)){		 if(!eq_cycle(temp1->next[j]->id,temp1->id)){		connects=temp1->next[j]->prev_num+temp1->next[j]->next_num;		if(traverse_num==1){		       if(!to_next)			next_prev(temp1->next[j],tlist,tnum,nplist,np_index);		       if(to_next)			prev_next(temp1->next[j],tlist,tnum,nplist,np_index);			for(k=0;k<*np_index;k++){				*(nplist+k)=0;			};			*np_index=0;		if(aflag && is_amide(temp1)>0)printf("6:found amide next %d\n",temp1->id);		else		if(connects>1&&!(bflag&&check_back(temp1,j,'n')))		head_tors=add_tors(temp1->id,temp1->next[j]->id,head_tors);		};	if(traverse_num==2&&check_tors(temp1->id,temp1->next[j]->id))	nbranch++;	if(traverse_num==2&&!nbranch&&!check_tors(temp1->id,temp1->next[j]->id)){		if(!on_list(temp1->id,rootlist,rootnum)){		temp1->root=1;		rootlist[rootnum++]=temp1->id;		};		if(!on_list(temp1->next[j]->id,rootlist,rootnum)){		temp1->next[j]->root=1;		rootlist[rootnum++]=temp1->next[j]->id;		};	};      	if(traverse_num==4&&check_tors(temp1->id,temp1->next[j]->id))	fprintf(outfile,"TORS %d %d\n",temp1->new_id,temp1->next[j]->new_id);	visit_next(temp1->next[j],tlist,tnum,nplist,np_index);	if(traverse_num==2&&check_tors(temp1->id,temp1->next[j]->id))		nbranch--;	if(traverse_num==4&&check_tors(temp1->id,temp1->next[j]->id))       	fprintf(outfile,"ENDTORS %d %d\n",temp1->new_id,temp1->next[j]->new_id);    		};/*!num_cycle*/  	};/*!on_list*/	};/*for case 2 nexts*/	break;	default  :	for(j=0;j<p_num;j++){   		prev_con=temp1->prev[j]->prev_num+temp1->prev[j]->next_num;   		if(!on_list(temp1->prev[j]->id,rootlist,rootnum)&&!on_list(temp1->prev[j]->id,tlist,*tnum)){		if(!eq_cycle(temp1->prev[j]->id,temp1->id)){		if(traverse_num==1){                      if(!to_next){			next_prev(temp1->prev[j],tlist,tnum,nplist,np_index);			};                      if(to_next)			prev_next(temp1->prev[j],tlist,tnum,nplist,np_index);				for(k=0;k<*np_index;k++){					*(nplist+k)=0;				};				*np_index=0;				if((traverse_num==1)&&(prev_con>1)){					if(aflag && is_amide(temp1)<0)printf("7:found amide prev %d\n",temp1->id);					else					if(!(bflag&&check_back(temp1,j,'p')))					head_tors=add_tors(temp1->id,(temp1->prev[j])->id,head_tors);				};		};/*first traversal*/	if(traverse_num==2&&check_tors(temp1->id,temp1->prev[j]->id))	nbranch++;	if(traverse_num==2&&!nbranch&&!check_tors(temp1->id,temp1->prev[j]->id)){		if(!on_list(temp1->id,rootlist,rootnum)){		temp1->root=1;		rootlist[rootnum++]=temp1->id;		};		if(!on_list(temp1->prev[j]->id,rootlist,rootnum)){		temp1->prev[j]->root=1;		rootlist[rootnum++]=temp1->prev[j]->id;		};	};	if(traverse_num==4&&check_tors(temp1->id,temp1->prev[j]->id))	fprintf(outfile,"BRANCH %d %d\n",temp1->new_id,temp1->prev[j]->new_id);	/*in any case visit the node*/	visit_prev(temp1->prev[j],tlist,tnum,nplist,np_index);	if(traverse_num==2&&check_tors(temp1->id,temp1->prev[j]->id))	nbranch--;	if(traverse_num==4&&check_tors(temp1->id,temp1->prev[j]->id))	fprintf(outfile,"ENDBRANCH %d %d\n",temp1->new_id,temp1->prev[j]->new_id);   	};/*not a cycle atom*/       	};/*not previously visited*/	}; /*for-prev*/	for(j=0;j<n_num;j++) {   		next_con=temp1->next[j]->prev_num+temp1->next[j]->next_num;   		if(!on_list(temp1->next[j]->id,rootlist,rootnum)&&!on_list(temp1->next[j]->id,tlist,*tnum)){               if(!eq_cycle(temp1->next[j]->id,temp1->id)){		if(traverse_num==1){                      if(!to_next)			next_prev(temp1->next[j],tlist,tnum,nplist,np_index);                      if(to_next)			prev_next(temp1->next[j],tlist,tnum,nplist,np_index);			for(k=0;k<*np_index;k++){				*(nplist+k)=0;			};			*np_index=0;			if(traverse_num==1&&(next_con>1)){					if(aflag && is_amide(temp1)>0)printf("8:found amide next %d\n",temp1->id);					else					if(!(bflag&&check_back(temp1,j,'n')))					head_tors=add_tors(temp1->id,temp1->next[j]->id,head_tors);			};		};/*first traversal*/	if(traverse_num==2&&check_tors(temp1->id,temp1->next[j]->id))	nbranch++;	if(traverse_num==2&&!nbranch&&!check_tors(temp1->id,temp1->next[j]->id)){		if(!on_list(temp1->id,rootlist,rootnum)){		temp1->root=1;		rootlist[rootnum++]=temp1->id;		};		if(!on_list(temp1->next[j]->id,rootlist,rootnum)){		temp1->next[j]->root=1;		rootlist[rootnum++]=temp1->next[j]->id;		};	};	if(traverse_num==4&&check_tors(temp1->id,temp1->next[j]->id))	fprintf(outfile,"BRANCH %d %d\n",temp1->new_id,temp1->next[j]->new_id);	/* any case visit the node*/	visit_next(temp1->next[j],tlist,tnum,nplist,np_index);	if(traverse_num==2&&check_tors(temp1->id,temp1->next[j]->id))	nbranch--;	if(traverse_num==4&&check_tors(temp1->id,temp1->next[j]->id))	fprintf(outfile,"ENDBRANCH %d %d\n",temp1->new_id,temp1->next[j]->new_id);   			};		};	}; /*for-next*/	break;}; /*end of switch  on to_next statement*/};/*for each node*/	/*free(nplist);*/}void traverse(rootlist,root_num,con_num)int rootlist[],root_num,con_num;{	int i,j,k,n,p_num,n_num,connect_num,h_num;        int *newlist;	int prev_con, next_con;	int *travlist,trav_index;        int np_num;        int *nplist,*np_index;	double mk;	char rec[7],*chptr;/*for firstpart ofoutput*/	ATOM_NODE * temp_root,* temp;	h_num=0;	trav_index=0;	np_num=0;        np_index=&np_num;        n=0;	travlist = (int*) calloc (con_num,sizeof(next_con));	nplist = (int*) calloc (con_num,sizeof(next_con));	if(traverse_num==4)fprintf(outfile,"ROOT\n");	for(i=0;i<root_num;i++){		temp_root=find_key(rootlist[i],con_num,head);		if(!temp_root){			printf("error in finding %d\n",rootlist[i]);			exit(1);		};		*(travlist + trav_index)=rootlist[i];		trav_index++;		check_h(temp_root);	};/*end of first for loop on all the roots*/	/*at this point update outatom*/	outatom=outatom+h_num;	if(traverse_num==4)fprintf(outfile,"ENDROOT\n");

⌨️ 快捷键说明

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