Exemplo n.º 1
0
bool_t SyncSession::OnRead(EventResult *evr)
{
	bool_t ret = FALSE;

	if(sock_.Status() != Socket::STATUS_CONNECTED)
	{
		ECILA_ERROR(("[SyncSession::OnWrite] "ECILA_FI64U"\n", UIDX())); return FALSE;
	}

	char_t *buffer = recv_buffer_->GetInPtr();
	int32_t remain = recv_buffer_->Remain();

	int32_t nbytes = sock_.Recv((char_t*)buffer, remain);
	if(nbytes == Socket::ERR_TRANSFER)
	{
		return OnError(evr);
	}
	
	ret = recv_buffer_->ForwardInPtr(nbytes);
	if(!ret) { ECILA_TRACE(); return FALSE; }

	ret = pkt_handler_->HandleEvents(this->UIDX(), this, EVENT_READ);
	if(!ret) { ECILA_TRACE(); return FALSE; }

	if(recv_buffer_->Length() == 0) { recv_buffer_->Reset(); }

	return TRUE;
}
Exemplo n.º 2
0
/*
 * Applies U(1) gauge laplacian to phi_in, with background field u,
 * and returns in phi_out
 */
void
lapl(size_t L, _Complex float *phi_out, _Complex float *phi_in, _Complex float *u)
{
#pragma omp parallel for  
  for(int y=0; y<L; y++)
    for(int x=0; x<L; x++) {
      unsigned long int v00 = y*L + x;
      unsigned long int v0p = y*L + (x+1)%L;
      unsigned long int vp0 = ((y+1)%L)*L + x;
      unsigned long int v0m = y*L + (L+x-1)%L;
      unsigned long int vm0 = ((L+y-1)%L)*L + x;

      _Complex float p;
      p  = phi_in[v0p]*u[UIDX(v00, 0)];
      p += phi_in[vp0]*u[UIDX(v00, 1)];
      p += phi_in[v0m]*conj(u[UIDX(v0m, 0)]);
      p += phi_in[vm0]*conj(u[UIDX(vm0, 1)]);
      phi_out[v00] = 4*phi_in[v00] - p;
    }
      
  return;
}
Exemplo n.º 3
0
bool_t SyncSession::OnWrite(EventResult *evr)
{
	bool_t ret = FALSE;

	if(sock_.Status() != Socket::STATUS_CONNECTED)
	{
		ECILA_ERROR(("[SyncSession::OnWrite] "ECILA_FI64U"\n", UIDX())); return FALSE;
	}

	int32_t length = send_buffer_->Length();
	if(length == 0) 
	{
		send_buffer_->Reset();

		IDemultiplexer *demultiplexer = Demultiplexer();
		if(demultiplexer)
		{
			ret = demultiplexer->DisableEventMask(this, EVENT_WRITE);
			if(!ret) { ECILA_TRACE(); return FALSE; }
		}
		
		return TRUE;
	}

	char_t *buffer = send_buffer_->GetOutPtr();
	int32_t nbytes = sock_.Send((char_t*)buffer, length);
	if(nbytes == Socket::ERR_TRANSFER)
	{
		return OnError(evr);
	}
	
	ret = send_buffer_->ForwardOutPtr(nbytes);
	if(!ret) { ECILA_TRACE(); return FALSE; }

	ret = pkt_handler_->HandleEvents(this->UIDX(), this, EVENT_WRITE);
	if(!ret) { ECILA_TRACE(); return FALSE; }

	if(send_buffer_->Length() == 0) { send_buffer_->Reset(); }

	return TRUE;
}