Exemplo n.º 1
0
Arquivo: suni.c Projeto: avagin/linux
static int suni_ioctl(struct atm_dev *dev,unsigned int cmd,void __user *arg)
{
	switch (cmd) {
		case SONET_GETSTATZ:
		case SONET_GETSTAT:
			return fetch_stats(dev, arg, cmd == SONET_GETSTATZ);
		case SONET_SETDIAG:
			return change_diag(dev,arg,1);
		case SONET_CLRDIAG:
			return change_diag(dev,arg,0);
		case SONET_GETDIAG:
			return get_diag(dev,arg);
		case SONET_SETFRAMING:
			if (!capable(CAP_NET_ADMIN))
				return -EPERM;
			return set_framing(dev, arg);
		case SONET_GETFRAMING:
			return get_framing(dev, arg);
		case SONET_GETFRSENSE:
			return -EINVAL;
		case ATM_SETLOOP:
			if (!capable(CAP_NET_ADMIN))
				return -EPERM;
			return set_loopback(dev,(int)(unsigned long)arg);
		case ATM_GETLOOP:
			return put_user(PRIV(dev)->loop_mode,(int __user *)arg) ?
			    -EFAULT : 0;
		case ATM_QUERYLOOP:
			return put_user(ATM_LM_LOC_PHY | ATM_LM_RMT_PHY,
			    (int __user *) arg) ? -EFAULT : 0;
		default:
			return -ENOIOCTLCMD;
	}
}
Exemplo n.º 2
0
static int suni_ioctl(struct atm_dev *dev,unsigned int cmd,void *arg)
{
	switch (cmd) {
		case SONET_GETSTATZ:
		case SONET_GETSTAT:
			return fetch_stats(dev,(struct sonet_stats *) arg,
			    cmd == SONET_GETSTATZ);
		case SONET_SETDIAG:
			return change_diag(dev,arg,1);
		case SONET_CLRDIAG:
			return change_diag(dev,arg,0);
		case SONET_GETDIAG:
			return get_diag(dev,arg);
		case SONET_SETFRAMING:
			if (arg != SONET_FRAME_SONET) return -EINVAL;
			return 0;
		case SONET_GETFRAMING:
			return put_user(SONET_FRAME_SONET,(int *) arg) ?
			    -EFAULT : 0;
		case SONET_GETFRSENSE:
			return -EINVAL;
		case ATM_SETLOOP:
			return set_loopback(dev,(int) (long) arg);
		case ATM_GETLOOP:
			return put_user(PRIV(dev)->loop_mode,(int *) arg) ?
			    -EFAULT : 0;
		case ATM_QUERYLOOP:
			return put_user(ATM_LM_LOC_PHY | ATM_LM_RMT_PHY,
			    (int *) arg) ? -EFAULT : 0;
		default:
			return -ENOIOCTLCMD;
	}
}
Exemplo n.º 3
0
MDArray<double> Shrinkage::get_target_B()
{
        MDArray<double> target(vec(P,P));
        double avg=get_mean(get_diag(S_MLE));
        for(int i=0;i<P;i++)
                for(int j=0;j<P;j++)
                        if (i==j)
                                target.set(i,i,avg);
        return target;
}
Exemplo n.º 4
0
double Shrinkage::get_lambda_var()
{
        generate_wk(data,0);
        double sum_up=0,sum_d=0;
        double median=get_median(get_diag(S_MLE));
        for (int i=0;i<P;i++){
                sum_up+=w_var(wk,i,i);
                sum_d+=(S_MLE.get(i,i)-median)*(S_MLE.get(i,i)-median);
        }
        return round_lambda(sum_up/sum_d);
}
void I2D_PenalizationOperator::compute_dragandstuff(Real time, const Real D, const Real cor[2], string filename)
{
	const Real maxu = max(fabs(Uinf[0]), fabs(Uinf[1]));
	const Real U_infinity = (maxu==0.0)?1:maxu;
	
	map<int, Diagnostic> diagnostics;
	
	vector<BlockInfo> vInfo = grid.getBlocksInfo();
	for(vector<BlockInfo>::iterator it=vInfo.begin(); it!=vInfo.end(); it++)
		diagnostics[it->blockID] = Diagnostic();
	
	ComputeDiagnostics get_diag(diagnostics, lambda, Uinf, cor);
	block_processing.process(vInfo, grid.getBlockCollection(), get_diag);
	
	Diagnostic global;
	for(map< int, Diagnostic>::iterator it=diagnostics.begin(); it!=diagnostics.end(); it++)
		global += it->second;
	
	const Real cD = 2*global.force[0]/(pow(U_infinity, 2)*D);
	const Real cL = 2*global.force[1]/(pow(U_infinity, 2)*D);
	
	this->Cd = cD;
	this->Cl = cL;
	
	const Real rho = 1.0;
	const Real q = 0.5*rho*U_infinity*U_infinity;
	const Real Cm = -global.torque[0]/(q*D*D);
	
	const Real T = 2*U_infinity*time/D;
	
	const Real Area = global.area;
	const Real GridPoints = global.gridpoints;
	const Real Circulation = fabs(global.circulation);
	
	const int totalNumPoints = vInfo.size()*B::sizeX*B::sizeX;
	
	FILE * f = fopen(filename.data(), bAppendToFile ? "a" : "w");
	assert(f!=NULL);
	if (!bAppendToFile)
		fprintf(f, "T\t\tcD\t\tcL\t\tCm\t\tcirculation\t\tArea\t\tpoints\t\tN-obstcl-1D\n");
	
	fprintf(f, "%e\t%e\t%e\t%e\t%e\t%e\t%d\t%f\n", T, cD, cL, Cm, Circulation, Area, totalNumPoints, pow((float)GridPoints, (float)(1./2.)));
	
	fclose(f);
	
	printf("%e\t%e\t%e\t%e\t%e\t%e\t%d\t%f\n", T, cD, cL, Cm, Circulation, Area, totalNumPoints, pow((float)GridPoints, (float)(1./2.)));
	
	bAppendToFile =  true;
}
Exemplo n.º 6
0
double Shrinkage::get_lambda_C()
{
        double sum_up=0,sum_d=0,avg_diag=get_mean(get_diag(S_MLE)),avg_off_diag(get_mean(get_off_diag(S_MLE)));
        generate_wk(data,0);
        for(int i=0;i<P;i++)
                for(int j=0;j<P;j++)
                        if (i!=j){
                                sum_up+=w_var(wk,i,j);
                                sum_d+=(S_MLE.get(i,j)-avg_off_diag)*(S_MLE.get(i,j)-avg_off_diag);
                        }
                        else{
                                sum_up+=w_var(wk,i,i);
                                sum_d+=(S_MLE.get(i,i)-avg_diag)*(S_MLE.get(i,i)-avg_diag);

                        }
        return round_lambda(sum_up/sum_d);
}
static pwr_tStatus IoAgentRead(io_tCtx ctx, io_sAgent* ap)
{
  io_sLocalHilscher_cifX_PnController* local
      = (io_sLocalHilscher_cifX_PnController*)ap->Local;
  pwr_sClass_Hilscher_cifX_PnController* op
      = (pwr_sClass_Hilscher_cifX_PnController*)ap->op;
  int32_t sts;

  if (local->diag_cnt == 0)
    get_diag(&op->Diag, local->chan);
  if (local->diag_cnt > local->diag_interval)
    local->diag_cnt = 0;
  else
    local->diag_cnt++;

  // Read input area
  if (local->input_area_size) {
    sts = xChannelIORead(
        local->chan, 0, 0, local->input_area_size, local->input_area, 10);
    op->Status = sts;
    if (sts == CIFX_NO_ERROR) {
      if (local->dev_init)
        local->dev_init = 0;
    } else {
      if (sts == CIFX_DEV_NO_COM_FLAG && local->dev_init
          && local->dev_init_cnt < local->dev_init_limit)
        local->dev_init_cnt++;
      else {
        xDriverGetErrorDescription(sts, op->ErrorStr, sizeof(op->ErrorStr));
        op->ErrorCount++;
      }
    }

    if (op->ErrorCount == op->ErrorSoftLimit && !local->softlimit_logged) {
      errh_Error("IO Error soft limit reached on agent '%s'", ap->Name);
      local->softlimit_logged = 1;
    }
    if (op->ErrorCount >= op->ErrorHardLimit) {
      ctx->Node->EmergBreakTrue = 1;
      return IO__ERRDEVICE;
    }
  }

  // Get Alarm or Diag

  CIFX_PACKET* msg = (CIFX_PACKET*)calloc(1, sizeof(CIFX_PACKET));

  sts = xChannelGetPacket(local->chan, sizeof(*msg), msg, 0);
  if (sts != CIFX_NO_ERROR) {
    if (!(sts == CIFX_DEV_GET_TIMEOUT || sts == CIFX_DEV_GET_NO_PACKET))
      printf("Diag msg status 0x%08x\n", sts);
  } else {
    printf("Diag message ?\n");

    switch (((TLR_PACKET_HEADER_T*)msg)->ulCmd) {
    case PNIO_APCTL_CMD_APPL_ALARM_IND: {
      // Response, return the package
      APIOC_ALARM_RSP_T alarm_rsp = { { 0 } };

      alarm_rsp.tHead.ulDest = HOST_TO_LE32(PNM_APPLICATION);
      alarm_rsp.tHead.ulLen = HOST_TO_LE32(sizeof(alarm_rsp.tData));
      alarm_rsp.tHead.ulCmd = HOST_TO_LE32(PNIO_APCTL_CMD_APPL_ALARM_RSP);
      alarm_rsp.tHead.ulSrc = HOST_TO_LE32(PN_SRC);
      alarm_rsp.tHead.ulSrcId = HOST_TO_LE32(PN_SRCID);
      alarm_rsp.tData.ulHandle = ((APIOC_ALARM_IND_T*)msg)->tData.ulHandle;
      alarm_rsp.tData.usAlarmSpecifier
          = ((APIOC_ALARM_IND_T*)msg)->tData.usAlarmSpecifier;

      sts = xChannelPutPacket(local->chan, (CIFX_PACKET*)&alarm_rsp, 10);
      printf("Alarm ind\n");

      // Ack the alarm
      APIOC_ALARM_ACK_REQ_T alarm_ack = { { 0 } };
      APIOC_ALARM_ACK_CNF_T alarm_ack_cnf = { { 0 } };

      alarm_ack.tHead.ulDest = HOST_TO_LE32(PNM_APPLICATION);
      alarm_ack.tHead.ulLen = HOST_TO_LE32(sizeof(alarm_ack.tData));
      alarm_ack.tHead.ulCmd = HOST_TO_LE32(PNIO_APCTL_CMD_APPL_ALARM_ACK_CNF);
      alarm_ack.tHead.ulSrc = HOST_TO_LE32(PN_SRC);
      alarm_ack.tHead.ulSrcId = HOST_TO_LE32(PN_SRCID);
      alarm_ack.tData.ulHandle = ((APIOC_ALARM_IND_T*)msg)->tData.ulHandle;
      alarm_ack.tData.usAlarmSpecifier
          = ((APIOC_ALARM_IND_T*)msg)->tData.usAlarmSpecifier;
      alarm_ack.tData.usReserved = 0;

      sts = xChannelPutPacket(local->chan, (CIFX_PACKET*)&alarm_ack, 10);
      if (sts == CIFX_NO_ERROR) {
        sts = xChannelGetPacket(local->chan, sizeof(alarm_ack_cnf),
            (CIFX_PACKET*)&alarm_ack_cnf, 20);
        if (sts == CIFX_NO_ERROR) {
          printf("ALARM_ACK\n");
          printf("Status 0x%08x\n", alarm_ack_cnf.tHead.ulSta);
        }
      }
      break;
    }
    case PNIO_APCTL_CMD_APPL_DIAG_DATA_IND: {
      // Response, return the package
      APIOC_DIAG_DATA_RSP_T diag_data_rsp = { { 0 } };

      diag_data_rsp.tHead.ulDest = HOST_TO_LE32(PNM_APPLICATION);
      diag_data_rsp.tHead.ulLen = HOST_TO_LE32(sizeof(diag_data_rsp.tData));
      diag_data_rsp.tHead.ulCmd
          = HOST_TO_LE32(PNIO_APCTL_CMD_APPL_DIAG_DATA_RSP);
      diag_data_rsp.tHead.ulSrc = HOST_TO_LE32(PN_SRC);
      diag_data_rsp.tHead.ulSrcId = HOST_TO_LE32(PN_SRCID);
      diag_data_rsp.tData.ulHandle
          = ((APIOC_DIAG_DATA_IND_T*)msg)->tData.ulHandle;

      sts = xChannelPutPacket(local->chan, (CIFX_PACKET*)&diag_data_rsp, 10);
      printf("Diag data\n");

      break;
    }
    default:
      printf(
          "Unexpected cmd received: %u\n", ((TLR_PACKET_HEADER_T*)msg)->ulCmd);
    }
  }

  free(msg);

  return IO__SUCCESS;
}
Exemplo n.º 8
0
int main() {
	int n,looplim = 10000;
	while(cin >> n) {
		vMat all_Mat;
		Mat sec_Mat;
		cout << "=======" << endl;
		cout << n << endl;
		Mat L;
		double start_t = clock();


		double ans = INF;
		double t3 = 0,t4 = 0;
		clock_t c1,c2;

		//step 0
		vd ans_v;
		for(int i = 0 ; i < n ; i++) {
			vd tmpl,x;
			for(int j = 0 ; j < n ; j++) {
				if(i == j) {x.push_back(1);}
				else {x.push_back(0);}
			}
			if(get_f(x) <= ans) {
				ans = get_f(x);
				ans_v = x;
			}
			for(int j = 0 ; j < n ; j++) {
				if(x[j] == 1) {
					tmpl.push_back(get_f(x));
				} else {
					tmpl.push_back(INF);
				}   
			}   

			L.push_back(tmpl);
		}

		int cnt = 0;
		vMat used_Mat;//,all_Mat;
		all_Mat.push_back(L);
		sec_Mat.push_back(get_sec(L));
		multimap<double,Mat> dMatmp;
		set<pvdi> st;
		set<pdi> stf;
		vector<set<pdi> > vst(n);
		set<int> used_idx;
		st.insert(make_pair(get_diag(L),all_Mat.size()-1));
		stf.insert(make_pair(L[0][0],all_Mat.size()-1));
		priority_queue<pair<double,int> , vector<pair<double,int> > , greater<pair<double,int> > > pq;
		//priority_queue<pair<double,int> > pq;
		pq.push(make_pair(get_d(L),all_Mat.size()-1));
		//O(min(loop,local min))
		int max_set_size = 1000000;
		int cut_cnt = 0;
		while(cnt++ < looplim && !pq.empty()) {
			if(pq.size() > 1000000) break;

			if(cnt % 1000 == 0) {
				cout << "cnt:" << cnt << endl;
				cout << "lb:" << pq.top().first << endl;
				cout << "f:" << ans << endl;
				cout << "size:" << pq.size() << endl;
				cout << "cut:" << cut_cnt << endl;
				cout << "time:" << (clock() - start_t)/CLOCKS_PER_SEC << endl;
				cout << "---" << endl;
			} 
			//step 1
			//select l in Lk with the smallest d
			double d = pq.top().first;
			int idx = pq.top().second; 
			pq.pop();
			L = all_Mat[idx];
			//print_Mat(L);
			//print_Mat(L);
			//cout << endl;
			if(used_idx.find(idx) != used_idx.end()){
				continue;
			}
			if(ans - d < eps) {
				break;
			}
			vd xs;
			for(int i = 0 ; i < L.size() ; i++) {
				//caution : division by zero 
				xs.push_back(d/L[i][i]);
			}

			//step 2
			double tmpf = get_f(xs);
			//print_v(xs);
			//cout << get_f(xs) << endl;
			if(tmpf <= ans) {
				ans = tmpf;
				ans_v = xs;
			}
			vd lk;
			for(int i = 0 ; i < xs.size() ; i++) {
				if(xs[i] > zero_boundary) lk.push_back(tmpf/xs[i]);
				else lk.push_back(INF);
			}
			vMat Lm;
			vi idxs = get_lower_idx_s(st,lk);
			//vi idxs = get_lower_idx(st,lk,vst);
			//vi idxs = get_lower_idx_s(st,lk);
			Mat Sec;
			for(int i = 0 ; i < idxs.size() ; i++) {
				if(used_idx.find(idxs[i]) == used_idx.end()){ 
					used_idx.insert(idxs[i]);
					Lm.push_back(all_Mat[idxs[i]]);
					Sec.push_back(sec_Mat[idxs[i]]);
				}
			}
			used_idx.insert(idx);
			//step 4
			//O(L- size * n * n^2)
			vd dlk = lk;
			for(int j = 0 ; j < Lm.size() ; j++) {
				Mat tmpL = Lm[j];
				vd tmplk = lk;
				//print_Mat(tmpL);
				//cout << endl;

				vi idx = get_swap_idx(tmplk,Sec[j]); 
				/*
				   cout << "s:" << endl;
				   for(int i = 0 ; i < idx.size() ; i++) {
				   cout << idx[i] << " ";
				   }
				   cout << endl;
				 */
				for(int i = 0 ; i < idx.size() ; i++) {
					L = tmpL;
					lk = tmplk;
					//print_Mat(L);
					swap(L[idx[i]],lk);
					//cout << "--" << endl;
					//print_v(Sec[j]);
					//cout << "v:" << is_valid_combination(L,Sec[j]) << " " << is_valid_combination(L) << endl;
					//if(get_d(L) > d) {
						all_Mat.push_back(L);
						sec_Mat.push_back(get_sec(L));
						st.insert(make_pair(get_diag(L),all_Mat.size()-1));
						stf.insert(make_pair(L[0][0],all_Mat.size()-1));
						pq.push(make_pair(get_d(L),all_Mat.size()-1));
					//}
					swap(L[idx[i]],lk);
				}
			}

			priority_queue<pair<double,int> , vector<pair<double,int> > , greater<pair<double,int> > > tmp_pq = pq;
			priority_queue<pair<double,int> , vector<pair<double,int> > , greater<pair<double,int> > > nxt_pq;
			int set_size = 0;
			while(!tmp_pq.empty()) {
				set_size++;
				int idx = tmp_pq.top().second;
				if(set_size < max_set_size) nxt_pq.push(tmp_pq.top());
				else {
					st.erase(make_pair(get_diag(all_Mat[idx]),idx));	
				}	
				tmp_pq.pop();
			}
			pq = nxt_pq;

		}
		cout << "cnt:" << cnt << endl;
		cout << "ans:" << ans << endl;
		cout << "ans_v:";
		print_v(ans_v);
	}
	return 0;
}