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

📄 network.c

📁 circuit calculation program
💻 C
字号:
#include "graph.h"


static int network_next0 ( network_ctx *ctx, int i )
{
	for ( ; i < n_nodes; i++ ) {
		if (CHECK_NODEFLAG (i,PROCESSED) ) continue;
		
		/* starts from a node attaching to power source */
		if (!CHECK_NODEFLAG (i,CVS) ) continue;

		ctx->node_id = i;
		ctx->node_id_next = i+1;		
		ctx->pin_next = 0;
		return network_next (ctx);
	}
	return -1;
}

int network_first ( network_ctx *ctx )
{
	return network_next0 ( ctx,0 );
}



int network_next ( network_ctx *ctx )
{
	int i,j;
	
	i = ctx->node_id;
	/* starts with a node with power source */
	for ( j = ctx->pin_next; j < NODE_PINS (i); j++ ) {
			if (CHECK_PINFLAG (nodes[i]->pin_gid[j], PROCESSED) ) continue;
			ctx->pin_next = j+1;
			return NODE_PIN(i)[j];
	}

	i = GET_EQUIV(i); 

	if (i!=-1) {
		ctx->node_id = i;
		ctx->pin_next = 1;
		return NODE_PIN(i)[0];
	} 

	return network_next0( ctx, ctx->node_id_next );
}


void network_closure (int i )
{
	int k;

	
	/* stops in this pin already scanned */
	assert (!CHECK_PINFLAG (i,PROCESSED) );
	SET_PINFLAG (i,PROCESSED);
	
	/* get the first net connecting to another node */
	k = COMPCLASS (i)->sibling_first( COMP (i), i );

	while (k!=i){/* finish if (k == -1)  */
			
			if (!CHECK_PINFLAG (k,PROCESSED) ) {
				
				if (VOLTAGE_OK (COMP (k), i, k ) ) 
					link_add ( i, k );

				/* stops at a power source            */ 
				if (!CHECK_NODEFLAG (NODE (k), SOURCE))
					network_closure (k);
				else					
					SET_PINFLAG (k,PROCESSED);
			}				
			/* get the next net connecting to another node */
			k = COMPCLASS (i)->sibling_next(COMP (i), i,k );
	}
	
	/* if I equation has not yet been established for this node */
	if (!CHECK_NODEFLAG (NODE (i), PROCESSED)
	     && !CHECK_NODEFLAG (NODE (i),SOURCE) ) {

		current_eq (NODE (i));
		SET_NODEFLAG (NODE (i), PROCESSED);
			     	
	     	for (k = 0; k < NODE_PINS (NODE(i)); k ++ ) {
	     		int pin_gid = NODE_PIN(NODE(i))[k];
	     		
	     		printf ("go to node:%d pin:%d of %s\n",NODE(i),pin_gid, COMP(pin_gid)->label);
	     		if (!CHECK_PINFLAG (pin_gid,PROCESSED) )
	     			network_closure (pin_gid);
		}	     			

	}
}

⌨️ 快捷键说明

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