Ejemplo n.º 1
0
void ModifiedPatankarRK(int dim_matrix, double oldvalue[], double dt, double newvalue[], recomb_t *thisRecombRates, cell_t *thisCell){
	double intervalue[dim_matrix];
	double oldvalue_local[dim_matrix];
	double newvalue_local[dim_matrix];
	double destr_rate[dim_matrix][dim_matrix];
	double inter_destr_rate[dim_matrix][dim_matrix];
	double matrix[dim_matrix][dim_matrix];

	initializeVector(dim_matrix, oldvalue_local, oldvalue);
	initializeVector(dim_matrix, newvalue_local, oldvalue);
	
// 	printf("oldvalue_local[0] = %e\toldvalue_local[1] = %e\n", oldvalue_local[0], oldvalue_local[1]);

// 	First Runge Kutta step
	initializeVector(dim_matrix, oldvalue_local, newvalue_local);	//oldvalue = x

	create_rate_functions(dim_matrix, destr_rate, oldvalue_local, thisRecombRates, thisCell);	//calculate destruction rates

	calculateMatrix(dim_matrix, dt, matrix, destr_rate, oldvalue_local);	//calculate matrix for destr_rate and oldvalue

	solveSetOfEquations(dim_matrix, matrix, oldvalue_local, intervalue);	//Solve set of equations for intervalue

	checkVector(dim_matrix,intervalue);

// 	Second Runge Kutta step
	initializeVector(dim_matrix, oldvalue_local, oldvalue);		//oldvalue = newvalue

	create_rate_functions(dim_matrix, inter_destr_rate, intervalue, thisRecombRates, thisCell);	//calculate new destruction rates from intervalue

	add_rate_functions(dim_matrix, inter_destr_rate, destr_rate);	//add rate functions destr_rate and interdestr_rate, output on interdestr_rate

	calculateMatrix(dim_matrix, dt*0.5, matrix, inter_destr_rate, intervalue);	//calculate matrix for interdestr_rate and intervalue

	solveSetOfEquations(dim_matrix, matrix, oldvalue_local, newvalue_local);	//solve set of equations for newvalue

	checkVector(dim_matrix, newvalue_local);

	initializeVector(dim_matrix, newvalue, newvalue_local);
}
Ejemplo n.º 2
0
void CNN1DComponent::readSelf(string filename){

	ifstream fin(filename);

	fin >> kernelSize;
	fin >> stride;
	fin >> featureMapNum;
	fin >> num;
	fin >> visualRow;
	fin >> visualColumn;

	initializeVector();

	for (size_t i = 0; i < featureMapNum; i++)
	{
		for (size_t j = 0; j < num; j++)
		{
			for (size_t ii = 0; ii < kernelSize; ii++)
			{
				double val;
				fin >> val;
				convKernels[i][j]->setValue(ii, 1, val);
			}
		}
	}

	for (size_t i = 0; i < featureMapNum; i++)
	{
		double val;
		fin >> val;
		bias[i]->setValue(1, 1, val);
	}

	fin.close();

}
Ejemplo n.º 3
0
TAC_NODE* generateTacCode(ASTREE* syntaxtree) {
	int i;

	TAC_NODE* code[MAX_SONS];

	for(i=0; i < MAX_SONS; i++) {
		code[i] = NULL;
	}

	if(syntaxtree == NULL) return NULL;

	for (i=0; i < MAX_SONS; i++) {
		code[i] = generateTacCode(syntaxtree->son[i]);
	}
		
	switch (syntaxtree->type) {
		 case AST_PROGRAMA:
		 	return code[0];
		 case AST_DECLARACOES:
		 	return joinTacs(code[0], code[1]);
		 case AST_VARIAVEL:
			if(code[2]!=NULL) {
			 	return createTacNode(TAC_DECLARACAO_VARIAVEL, code[0]->result, code[2]->result, NULL);
			}
			else {
				return createTacNode(TAC_SYMBOL, code[0]->result, NULL, NULL);
			}
		 case AST_VETOR_VAZIO:
		 	return createTacNode(TAC_DECLARACAO_VETOR_VAZIO, code[0]->result, code[2]->result, NULL);
		 case AST_VETOR:
		 	return joinTacs(createTacNode(TAC_DECLARACAO_VETOR, code[0]->result, code[2]->result, NULL), initializeVector(revertTac(code[3]),code[0]->result,0));
		 case AST_INI_VETOR:
		 	return joinTacs(code[0], code[1]);
		 case AST_LISTA_LITERAIS:
		 	return joinTacs(code[0], code[1]);
		 case AST_FUNCAO:
		 	return createFunctionDeclaration(code[0]->result, code[2], code[3]);
		 case AST_PARAMETRO:
		 	return createTacNode(TAC_PARAMETRO, code[0]->result, code[1]->result, NULL);
		 case AST_LISTA_PARAMETRO:
		 	return joinTacs(code[0], code[1]);
		 case AST_COMANDOS:
		 	return joinTacs(code[0], code[1]);
		 case AST_BLOCO:
		 	return code[0];
		 case AST_LISTA_PARAM_CHAMADA:
			return joinTacs(code[0], code[1]);
		 case AST_ACESSO_VETOR:
		 	return createVectorRead(code[0]->result, code[1]);
		 case AST_CHAMADA_FUNCAO:
			return createFunctionCall(code[0]->result, code[1]);
		 case AST_EXPRESSAO_PARENTESES:
		 	return code[0];
		 case AST_OP_SOMA:
		 	return createTacOperation(TAC_OP_SOMA, code[0], code[1]);
		 case AST_OP_SUB:
		 	return createTacOperation(TAC_OP_SUB, code[0], code[1]);
		 case AST_OP_MUL:
			 return createTacOperation(TAC_OP_MUL, code[0], code[1]);
		 case AST_OP_DIV:
		 	return createTacOperation(TAC_OP_DIV, code[0], code[1]);
		 case AST_OP_MENOR:
		 	return createTacOperation(TAC_OP_MENOR, code[0], code[1]);
		 case AST_OP_MAIOR:
		 	return createTacOperation(TAC_OP_MAIOR, code[0], code[1]);
		 case AST_OP_LE:
		 	return createTacOperation(TAC_OP_LE, code[0], code[1]);
		 case AST_OP_GE:
		 	return createTacOperation(TAC_OP_GE, code[0], code[1]);
		 case AST_OP_EQ:
		 	return createTacOperation(TAC_OP_EQ, code[0], code[1]);
		 case AST_OP_NE:
		 	return createTacOperation(TAC_OP_NE, code[0], code[1]);
		 case AST_OP_AND:
		 	return createTacOperation(TAC_OP_AND, code[0], code[1]);
		 case AST_OP_OR:
		 	return createTacOperation(TAC_OP_OR, code[0], code[1]);
		 case AST_ATRIBUICAO:
		 	return joinTacs(code[1], createTacNode(TAC_ATRIBUICAO, code[0]->result, resultAtribuicao(code[1])->result, NULL));
		 case AST_ATRIBUICAO_VETOR:
		 	return createAssignVector(code[0]->result, resultAtribuicao(code[1]), resultAtribuicao(code[2]));
		 case AST_IF:
			return createIF(code[0],code[1]);
		 case AST_IF_ELSE:
			return createIF_ELSE(code[0],code[1],code[2]);
		 case AST_WHILE:
			return createWHILE(code[0], code[1]);
		 case AST_INPUT:
			return createInput(revertTac(code[0]));
		 case AST_LISTA_VARIAVEIS:
			return joinTacs(code[0], code[1]);
		 case AST_OUTPUT:
			return createOutput(revertTac(code[0]));
		 case AST_LISTA_ELEM_EXP:
			return joinTacs(code[0], code[1]);
		 case AST_LISTA_ELEM_STRING:
			return joinTacs(createTacNode(TAC_STRING, syntaxtree->symbol, NULL, NULL), code[0]);
		 case AST_RETURN:
			return joinTacs(code[0], createTacNode(TAC_RETURN, code[0]->result, NULL, NULL));
		 case AST_KW_INT:
		 	return createTacNode(TAC_KW_INT, syntaxtree->symbol, NULL, NULL);
		 case AST_KW_BOOL:
		 	return createTacNode(TAC_KW_BOOL, syntaxtree->symbol, NULL, NULL);
		 case AST_KW_REAL:
		 	return createTacNode(TAC_KW_REAL, syntaxtree->symbol, NULL, NULL);
		 case AST_KW_CHAR:
		 	return createTacNode(TAC_KW_CHAR, syntaxtree->symbol, NULL, NULL);
		 case AST_LIT_INT:
		 	return createTacNode(TAC_SYMBOL, syntaxtree->symbol, NULL, NULL);
		 case AST_LIT_REAL:
		 	return createTacNode(TAC_SYMBOL, syntaxtree->symbol, NULL, NULL);
		 case AST_LIT_TRUE:
		 	return createTacNode(TAC_SYMBOL, syntaxtree->symbol, NULL, NULL);
		 case AST_LIT_FALSE:
		 	return createTacNode(TAC_SYMBOL, syntaxtree->symbol, NULL, NULL);
		 case AST_LIT_CHAR:
		 	return createTacNode(TAC_SYMBOL, syntaxtree->symbol, NULL, NULL);
		 case AST_LIT_STRING:
		 	return createTacNode(TAC_SYMBOL, syntaxtree->symbol, NULL, NULL);
		 case AST_COMANDO_VAZIO:
		 	return NULL;
		 case AST_SYMBOL_VAR:
		 	return createTacNode(TAC_SYMBOL_VAR, syntaxtree->symbol, NULL, NULL);
		 case AST_SYMBOL_VET:
		 	return createTacNode(TAC_SYMBOL_VET, syntaxtree->symbol, NULL, NULL);
		 case AST_SYMBOL_FUN:
		 	return createTacNode(TAC_SYMBOL_FUN, syntaxtree->symbol, NULL, NULL);
		 default:
		 	break;
	}
}
Ejemplo n.º 4
0
TAC_NODE* initializeVector(TAC_NODE* initializeList, HASH_NODE* vector, int i){

	if(initializeList == NULL){
		return initializeList;
	}else{
		char str[25];	
		sprintf(str,"%d", i);
		HASH_NODE* index = hashInsert(str, SYMBOL_LIT_INT);
		return joinTacs(createTacNode(TAC_VECTOR_ASSIGN, vector, index, initializeList->result), initializeVector(initializeList->next, vector, ++i));
	}
}