예제 #1
0
파일: RK.cpp 프로젝트: Neolus/C
void main()
{
    double y0=0;//初始条件
    double A[3],B[3],step; //A存放两题的左端点,B为右端点

    step=1./8; //初始步长0.1
    A[0]=0;
    B[0]=3;

    A[1]=0;
    B[1]=1;

    A[2]=0;
    B[2]=3;
    double yc=1;

    FILE*fp;//定义指向文件的指针变量fp
    fp=fopen("c.txt","w+");

    RK(fc,yc,A[0],B[0],step,fp); //调用RK函数求解第一题微分方程
//	fprintf(fp,"The answer of question B\n");
//	RK(fb,y0,A[1],B[1],step,fp); //调用RK函数求解第二题微分方程

    fclose(fp); //关闭文本
    getchar();
}
예제 #2
0
int main(int argc, char **argv)
{
  
  double h = atof(argv[1]);
  double t_final= 1.5*pow(10,6);
  int n_points = (int)((t_final+h))/(h);
  double t[n_points];
  double R[n_points];
  double P[n_points];
  double v[n_points];


  t[0]=0.0;
  R[0]=1.7*pow(10,12);
  v[0]=0;
  P[0]=5.6*pow(10,5);
  
 
  RK(t,R,v,P,h,n_points,"0.dat");   
  
  
  
  
  return 0;
}
예제 #3
0
int exec_cmd_RK(char *t,int l_t)
{
	//RK
	char **args=(char **)malloc(8*sizeof(char *));
	int c;
	trunc_str(&t,&l_t);
	parse_args(t,l_t,args,&c);
	printf("solving initial value problem\n-\t-\t-\n");
	node f,x0,y0,x1;
	store_fn(args[0],strlen(args[0]),&f);
	store_fn(args[3],strlen(args[3]),&x0);
	store_fn(args[4],strlen(args[4]),&y0);
	store_fn(args[5],strlen(args[5]),&x1);
	double result = RK	(
		&f, add_var(args[1]), add_var(args[2]),x0.method->eval_v(&x0),
		y0.method->eval_v(&y0),x1.method->eval_v(&x1),atoi(args[6])
		);
	printf("\n%s(%f)=%f",args[2],x1.method->eval_v(&x1),result);
	printf("\n-\t-\t-\n");
	return 0;
}
예제 #4
0
void Encrypt(uint8_t *block, uint8_t *roundKeys)
{
	uint32_t* blk = (uint32_t*) block;
	uint32_t* rk = (uint32_t*) roundKeys;
	int8_t i;
	
	uint32_t b0 = blk[0];
	uint32_t b1 = blk[1];
	uint32_t b2 = blk[2];
	uint32_t b3 = blk[3];
	
	for (i = 0; i < NUMBER_OF_ROUNDS; i += 4, rk += 4) {
		b3 = rotr((b2 ^ RK(rk, 3)) + (b3 ^ RK(rk, 1)), 3);
		b2 = rotr((b1 ^ RK(rk, 2)) + (b2 ^ RK(rk, 1)), 5);
		b1 = rotl((b0 ^ RK(rk, 0)) + (b1 ^ RK(rk, 1)), 9);
		
		rk += 4;
		b0 = rotr((b3 ^ RK(rk, 3)) + (b0 ^ RK(rk, 1)), 3);
		b3 = rotr((b2 ^ RK(rk, 2)) + (b3 ^ RK(rk, 1)), 5);
		b2 = rotl((b1 ^ RK(rk, 0)) + (b2 ^ RK(rk, 1)), 9);
		
		rk += 4;
		b1 = rotr((b0 ^ RK(rk, 3)) + (b1 ^ RK(rk, 1)), 3);
		b0 = rotr((b3 ^ RK(rk, 2)) + (b0 ^ RK(rk, 1)), 5);
		b3 = rotl((b2 ^ RK(rk, 0)) + (b3 ^ RK(rk, 1)), 9);
		
		rk += 4;
		b2 = rotr((b1 ^ RK(rk, 3)) + (b2 ^ RK(rk, 1)), 3);
		b1 = rotr((b0 ^ RK(rk, 2)) + (b1 ^ RK(rk, 1)), 5);
		b0 = rotl((b3 ^ RK(rk, 0)) + (b0 ^ RK(rk, 1)), 9);
	}
	
	blk[0] = b0;
	blk[1] = b1;
	blk[2] = b2;
	blk[3] = b3;
}
예제 #5
0
void Encrypt(uint8_t *block, uint8_t *roundKeys)
{
	uint32_t* blk = (uint32_t*) block;
	uint32_t* rk = (uint32_t*) roundKeys;
	int8_t i;
	
	for (i = 0; i < NUMBER_OF_ROUNDS; i += 4, rk += 4) {
		blk[3] = rotr((blk[2] ^ RK(rk, 3)) + (blk[3] ^ RK(rk, 1)), 3);
		blk[2] = rotr((blk[1] ^ RK(rk, 2)) + (blk[2] ^ RK(rk, 1)), 5);
		blk[1] = rotl((blk[0] ^ RK(rk, 0)) + (blk[1] ^ RK(rk, 1)), 9);
		
		rk += 4;
		blk[0] = rotr((blk[3] ^ RK(rk, 3)) + (blk[0] ^ RK(rk, 1)), 3);
		blk[3] = rotr((blk[2] ^ RK(rk, 2)) + (blk[3] ^ RK(rk, 1)), 5);
		blk[2] = rotl((blk[1] ^ RK(rk, 0)) + (blk[2] ^ RK(rk, 1)), 9);
		
		rk += 4;
		blk[1] = rotr((blk[0] ^ RK(rk, 3)) + (blk[1] ^ RK(rk, 1)), 3);
		blk[0] = rotr((blk[3] ^ RK(rk, 2)) + (blk[0] ^ RK(rk, 1)), 5);
		blk[3] = rotl((blk[2] ^ RK(rk, 0)) + (blk[3] ^ RK(rk, 1)), 9);
		
		rk += 4;
		blk[2] = rotr((blk[1] ^ RK(rk, 3)) + (blk[2] ^ RK(rk, 1)), 3);
		blk[1] = rotr((blk[0] ^ RK(rk, 2)) + (blk[1] ^ RK(rk, 1)), 5);
		blk[0] = rotl((blk[3] ^ RK(rk, 0)) + (blk[0] ^ RK(rk, 1)), 9);
	}
}
예제 #6
0
void CSimulation::update(unsigned long currStep) {
	//cout << "Using integration method " << m_par->integration_method << endl;
	CSolarSystem newSS(m_SS);

	for (vector<CSatellite>::iterator it = newSS.m_sats.begin();
			it < newSS.m_sats.end(); it++) {
		if (it->m_thrusts.size() > 0
				&& it->m_thrusts[it->m_thrusts.size() - 1].m_t[0] - currStep
						< .5) {
			CSVector a(it->m_thrusts[it->m_thrusts.size() - 1].m_dvx[0],
					it->m_thrusts[it->m_thrusts.size() - 1].m_dvy[0],
					it->m_thrusts[it->m_thrusts.size() - 1].m_dvz[0]);
			it->getDynamicsPtr()->m_velocity += a;
			it->m_fuel += a.magSquared();
			it->m_thrusts.pop_back();
		}
	}
	bool temp = false;
	for (vector<CPlanet>::iterator it = newSS.m_planets.begin();
			it < newSS.m_planets.end(); it++) {
		if (m_par->integration_method == 4) {
			RK(it->getDynamicsPtr()->m_position,
					it->getDynamicsPtr()->m_velocity, it->m_delFlag, temp,
					it->m_name);
		} else if (m_par->integration_method == 1) {
			Euler(it->getDynamicsPtr()->m_position,
					it->getDynamicsPtr()->m_velocity, it->m_name);
		}

		else
			cout << "ERROR, integration method set to "
					<< m_par->integration_method << endl;
	}
	for (vector<CSatellite>::iterator it = newSS.m_sats.begin();
			it < newSS.m_sats.end(); it++) {
		if (m_par->integration_method == 4) {
			RK(it->getDynamicsPtr()->m_position,
					it->getDynamicsPtr()->m_velocity, it->m_delFlag,
					it->m_succFlag, "Satellite");
		} else if (m_par->integration_method == 1) {
			Euler(it->getDynamicsPtr()->m_position,
					it->getDynamicsPtr()->m_velocity, "Satellite");
		}

		else
			cout << "ERROR, integration method set to "
					<< m_par->integration_method << endl;
	}
	unsigned int i = 0;

	//remove all flagged sats
	while (newSS.m_sats.begin() + i != newSS.m_sats.end()) {
		if (newSS.m_sats[i].m_delFlag) {
			if (newSS.m_sats[i].m_succFlag) {
				m_succList.push_back(newSS.m_sats[i]);
			} else {
				m_deadList.push_back(newSS.m_sats[i]);
			}
			cout << newSS.m_sats[i].m_name.selfID << " at timestep " << currStep
					<< endl;
			newSS.m_sats.erase(newSS.m_sats.begin() + i);
		} else {
			i++;
		}
	}

	m_SS = newSS;
}
예제 #7
0
void Decrypt(uint8_t *block, uint8_t *roundKeys)
{
	uint32_t* blk = (uint32_t*) block;
	uint32_t* rk = (uint32_t*) roundKeys;
	int8_t i;
	
	uint32_t b0 = blk[0];
	uint32_t b1 = blk[1];
	uint32_t b2 = blk[2];
	uint32_t b3 = blk[3];
	
	for (i = NUMBER_OF_ROUNDS - 1, rk += 92; i >= 0; i -= 4, rk -= 4) {
		b0 = (rotr(b0, 9) - (b3 ^ RK(rk, 0))) ^ RK(rk, 1);
		b1 = (rotl(b1, 5) - (b0 ^ RK(rk, 2))) ^ RK(rk, 1);
		b2 = (rotl(b2, 3) - (b1 ^ RK(rk, 3))) ^ RK(rk, 1);
				
		rk -= 4;
		b3 = (rotr(b3, 9) - (b2 ^ RK(rk, 0))) ^ RK(rk, 1);
		b0 = (rotl(b0, 5) - (b3 ^ RK(rk, 2))) ^ RK(rk, 1);
		b1 = (rotl(b1, 3) - (b0 ^ RK(rk, 3))) ^ RK(rk, 1);
		
		rk -= 4;
		b2 = (rotr(b2, 9) - (b1 ^ RK(rk, 0))) ^ RK(rk, 1);
		b3 = (rotl(b3, 5) - (b2 ^ RK(rk, 2))) ^ RK(rk, 1);
		b0 = (rotl(b0, 3) - (b3 ^ RK(rk, 3))) ^ RK(rk, 1);
		
		rk -= 4;
		b1 = (rotr(b1, 9) - (b0 ^ RK(rk, 0))) ^ RK(rk, 1);
		b2 = (rotl(b2, 5) - (b1 ^ RK(rk, 2))) ^ RK(rk, 1);
		b3 = (rotl(b3, 3) - (b2 ^ RK(rk, 3))) ^ RK(rk, 1);
	}
	
	blk[0] = b0;
	blk[1] = b1;
	blk[2] = b2;
	blk[3] = b3;
}