Beispiel #1
0
static float	Dot_prod (const float x1, const char x2,
			  const float y1, const char y2,
			  const float z1, const char z2,
			  const float t1, const char t2)
{
  return (Prod (x1, x2) + Prod (y1, y2) + Prod (z1, z2) + Prod (t1, t2));
}
Beispiel #2
0
void LayerFull::WeightGrads(Layer *prev_layer, GradInd gradind) {
  if (gradind == GradInd::First) {
    Prod(deriv_mat_, true, prev_layer->activ_mat_, false, filters_.der());
    filters_.der() *= (lr_coef_ / dims_[0]);
  } else if (gradind == GradInd::Second) {
    Prod(deriv_mat_, true, prev_layer->activ_mat_, false, filters_.der2());
    filters_.der2() *= (lr_coef_ / dims_[0]);
  }
}
Beispiel #3
0
template<> RotMatrix<3>& RotMatrix<3>::fromQuaternion(const Quaternion& q,
						      const bool not_flip)
{
  CoordType xx, yy, zz, xy, xz, yz;
  const Vector<3> &vref = q.vector();

  xx = vref[0] * vref[0];
  xy = vref[0] * vref[1];
  xz = vref[0] * vref[2];
  yy = vref[1] * vref[1];
  yz = vref[1] * vref[2];
  zz = vref[2] * vref[2];

  Vector<3> wvec = vref * q.scalar();

  m_elem[0][0] = 1 - 2 * (yy + zz);
  m_elem[1][1] = 1 - 2 * (xx + zz);
  m_elem[2][2] = 1 - 2 * (xx + yy);

  m_elem[0][1] = 2 * (xy + wvec[2]);
  m_elem[0][2] = 2 * (xz - wvec[1]);
  m_elem[1][0] = 2 * (xy - wvec[2]);
  m_elem[1][2] = 2 * (yz + wvec[0]);
  m_elem[2][0] = 2 * (xz + wvec[1]);
  m_elem[2][1] = 2 * (yz - wvec[0]);

  m_flip = !not_flip;
  m_age = q.age();
  if(!not_flip)
    *this = Prod(*this, RotMatrix<3>().mirror(0));

  m_valid = true;
  return *this;
}
Beispiel #4
0
void PrelucrareArbore(struct TNod *lel){

	char * a=lel->info;
	lel->rez = (double*)malloc(sizeof(double));  
	
	if(strcmp(a,"+")==0){
		Add(lel->st,lel->dr,lel);
	}else if(strcmp(a,"-")==0){
		Sub(lel->st,lel->dr,lel);
	}else if(strcmp(a,"*")==0){
		Mult(lel->st, lel->dr,lel);
	}else if(strcmp(a,"/")==0){
		Divi(lel->st, lel->dr,lel);
	}else if(strcmp(a,"sum")==0){
		Sum(lel);
		//printf("PrelArb %lf\n",*(lel->rez));
	}else if(strcmp(a,"prod")==0){
		Prod(lel);
	}else if(strcmp(a,"sqrt")==0){
		SqrtCalc(lel->st,lel->dr,lel);
	}else if(strcmp(a,"pow")==0){
		PowCalc(lel->st, lel->dr,lel);
	}else{
		*(lel->rez) = (double)atoi(a);
		//printf("ATOI %lf\n",*(lel->rez));
	}
}
Beispiel #5
0
	inline OpenSMOKEVector<T, IndexPolicy>& OpenSMOKEVector<T, IndexPolicy>::operator /=(T const& rval)
	{
		if (rval==0)
			ErrorMessage("operator/=(T const& rval) Division by zero");

		Prod(dimensions_ , 1./rval, vector_+this->index_); 
		return *this;
	}
Beispiel #6
0
VColor TwoField::operator () (MPoint point) const
 {
  DCoord P=Prod(point-a,b);
  
  if( P<=0 ) return va;
  
  if( P>=D ) return vb;
  
  return Linear(va,vb,d(uDCoord(P)),d);
 }
Beispiel #7
0
void LayerFull::Backward(Layer *prev_layer) {
  StartTimer();
  prev_layer->deriv_mat_.resize(prev_layer->batchsize_, prev_layer->length_);
  Prod(deriv_mat_, false, weights_.get(), false, prev_layer->deriv_mat_);  
  if (prev_layer->type_ == "f") {
    LayerFull *layerfull = static_cast<LayerFull*>(prev_layer);
    if (layerfull->dropout_ > 0) {
      layerfull->deriv_mat_ *= layerfull->dropmat_;
    }  
  }
  prev_layer->deriv_mat_.Validate();
  MeasureTime("Backwards Full Layer",4);
}
Beispiel #8
0
void LayerFull::Forward(Layer *prev_layer, int passnum) {
  StartTimer();
  batchsize_ = prev_layer->batchsize_;
  if (passnum == 3) {
    Swap(activ_mat_, first_mat_);    
  }
  activ_mat_.resize(batchsize_, length_);
  Prod(prev_layer->activ_mat_, false, weights_.get(), true, activ_mat_);    
  if (passnum == 0 || passnum == 1) {
    activ_mat_.AddVect(biases_.get(), 1);            
  }    
  if (dropout_ > 0) { // dropout
    if (passnum == 1) {
      dropmat_.resize(batchsize_, length_);
      dropmat_.rand();
      dropmat_.CondAssign(dropmat_, false, dropout_, 0);
      dropmat_.CondAssign(dropmat_, true, 0, 1);
      activ_mat_ *= dropmat_;
    } else if (passnum == 3) {
      activ_mat_ *= dropmat_;
    } else if (passnum == 0) {
      activ_mat_ *= (1 - dropout_);      
    }    
  }
  activ_mat_.Validate();
  /*
  if (print == 1) {
  mexPrintMsg("FULL");    
  Mat m;
  m.attach(activ_mat_);
  mexPrintMsg("s1", m.size1());    
  mexPrintMsg("s2", m.size2()); 
  mexPrintMsg("totalsum", m.sum());    
  Mat versum = Sum(m, 1);
  for (int i = 0; i < 5; ++i) {
    mexPrintMsg("versum", versum(0, i));    
  }
  Mat horsum = Sum(m, 2);
  for (int i = 0; i < 5; ++i) {
    mexPrintMsg("horsum", horsum(i, 0));    
  }  
  for (int i = 0; i < 5; ++i) {
    mexPrintMsg("Horizontal", m(0, i));    
  }
  for (int i = 0; i < 5; ++i) {
    mexPrintMsg("Vertical", m(i, 0));    
  }
  }*/
  MeasureTime("Forwards Full Layer",3);
}
Beispiel #9
0
TwoField::TwoField(MPoint a_,VColor va_,MPoint b_,VColor vb_) 
 : a(a_),
   va(va_),
   b(b_),
   vb(vb_) 
 { 
  b-=a; 
  
  D=Prod(b,b);
  
  IntGuard( D>0 );
  
  d.init(uDCoord(D));
 }
Beispiel #10
0
bool Quaternion::fromRotMatrix(const RotMatrix<3>& m)
{
  RotMatrix<3> m_tmp;
  bool not_flip = !m.parity();

  m_valid = m.isValid();
  m_vec.setValid(m.isValid());

  if(!not_flip)
    m_tmp = Prod(m, RotMatrix<3>().mirrorX());

  const RotMatrix<3> &m_ref = not_flip ? m : m_tmp;

  CoordType s;
  const int nxt[3] = {1, 2, 0};
  CoordType tr = m_ref.trace();

  // check the diagonal
  if (tr > 0.0) {
    s = std::sqrt(tr + 1.0f);
    m_w = (s / 2.0f);
    s = (0.5f / s);

    m_vec[0] = -(m_ref.elem(2, 1) - m_ref.elem(1, 2)) * s;
    m_vec[1] = -(m_ref.elem(0, 2) - m_ref.elem(2, 0)) * s;
    m_vec[2] = -(m_ref.elem(1, 0) - m_ref.elem(0, 1)) * s;
  } else {
    // diagonal is negative
    int i = 0;

    if (m_ref.elem(1, 1) > m_ref.elem(0, 0)) i = 1;
    if (m_ref.elem(2, 2) > m_ref.elem(i, i)) i = 2;

    int j = nxt[i], k = nxt[j];

    s = std::sqrt (1.0f + m_ref.elem(i, i) - m_ref.elem(j, j) - m_ref.elem(k, k));
    m_vec[i] = -(s * 0.5f);

    assert("sqrt() returns positive" && s > 0.0);
    s = (0.5f / s);

    m_w = (m_ref.elem(k, j) - m_ref.elem(j, k)) * s;
    m_vec[j] = -(m_ref.elem(i, j) + m_ref.elem(j, i)) * s;
    m_vec[k] = -(m_ref.elem(i, k) + m_ref.elem(k, i)) * s;
  }

  m_age = m.age();

  return not_flip;
}
Beispiel #11
0
void LayerFull::CalcWeights(Layer *prev_layer, int passnum) {
  StartTimer();
  if (passnum < 2) return;
  Mat weights_der;
  if (passnum == 2) {
    weights_der.attach(weights_.der());
  } else if (passnum == 3) {
    weights_der.attach(weights_.der2());
  }
  Prod(deriv_mat_, true, prev_layer->activ_mat_, false, weights_der);
  if (passnum == 2) {
    Mean(deriv_mat_, biases_.der(), 1);
    biases_.der() *= bias_coef_;
    biases_.der().Validate();
  }
  weights_der /= (ftype) batchsize_;
  weights_der.Validate();
  MeasureTime("CalcWeights Full Layer",5);
}
Beispiel #12
0
void Prod(const Mat &a, bool a_tr, const Mat &b, bool b_tr, Mat &c) {  
  Mat m; // empty mask matrix;
  Prod(a, a_tr, b, b_tr, m, c);
}
Beispiel #13
0
void LayerFull::TransformBackward(Layer *prev_layer) {
  Prod(deriv_mat_, false, filters_.get(), false, prev_layer->deriv_mat_);
  prev_layer->deriv_mat_.Validate();
}
Beispiel #14
0
void LayerFull::TransformForward(Layer *prev_layer, PassNum passnum) {
  Prod(prev_layer->activ_mat_, false, filters_.get(), true, activ_mat_);
  activ_mat_.Validate();
}
Beispiel #15
0
EXPORT void g_verbose_fprint_state(
	FILE	   *file,
	const char *name,
	Locstate   state)
{
	bool		bin_out;
	int		i, dim;
	float		p, c, S, v[SMAXD], speed;
	static	char	vname[3][3] = { "vx", "vy", "vz"};
	static	char	mname[3][3] = { "mx", "my", "mz"};

	if (name == NULL)
	    name = "";
	(void) fprintf(file,"\n%s:\n",name);
	(void) fprintf(file,"address %p\n",state);
	if (state == NULL || is_obstacle_state(state))
	{
	    (void) fprintf(file,"(OBSTACLE STATE)\n\n");
	    return;
	}
	dim = Params(state)->dim;

	p = pressure(state);
	c = sound_speed(state);
	S = entropy(state);

	(void) fprintf(file,"%-24s = %-"FFMT" %-24s = %-"FFMT"\n",
		       "density",Dens(state),
		       "specific internal energy",
		       specific_internal_energy(state));
	(void) fprintf(file,"%-24s = %-"FFMT" %-24s = %-"FFMT"\n","pressure",p,
		       "sound speed",c);
	(void) fprintf(file,"%-24s = %-"FFMT" %-24s = %-"FFMT"\n","temperature",
		       temperature(state),"specific entropy",S);

	speed = 0.0;
	for (i = 0; i < dim; i++)
	{
	    v[i] = vel(i,state);	speed += sqr(v[i]);
	    (void) fprintf(file,"%-24s = %-"FFMT" %-24s = %-"FFMT"\n",
			   mname[i],mom(i,state),vname[i],v[i]);
	}
	speed = sqrt(speed);

	(void) fprintf(file,"%-24s = %-"FFMT"","total energy",energy(state));
	if (c > 0. && Dens(state) > 0.)
	   (void) fprintf(file," %-24s = %-"FFMT"\n","Mach number",speed / c);
	else
	   (void) fprintf(file,"\n");

#if defined(TWOD)
	if (dim == 2)
	    (void) fprintf(file,"%-24s = %-"FFMT"\n","velocity angle",
			   degrees(angle(v[0],v[1])));
#endif /* defined(TWOD) */


	fprint_state_type(file,"State type = ",state_type(state));
	(void) fprintf(file,"Params state = %llu\n",
		       gas_param_number(Params(state)));

	bin_out = is_binary_output();
	set_binary_output(NO);
	if (debugging("prt_params"))
	    fprint_Gas_param(file,Params(state));
	else
	    (void) fprintf(file,"Gas_param = %llu\n",
		                gas_param_number(Params(state)));
	set_binary_output(bin_out);

	//if(p< -2000 || p>10000)
	//{
	//    printf("#huge pressure\n");
	//    clean_up(0);
	//}
#if !defined(COMBUSTION_CODE)
	(void) fprintf(file,"\n");
#else /* !defined(COMBUSTION_CODE) */
	if (Composition_type(state) == PURE_NON_REACTIVE)
	{
	    (void) fprintf(file,"\n");
	    return;
	}

	(void) fprintf(file,"%-24s = %-12s   %-24s = %-"FFMT"\n","burned",
		       Burned(state) ? "BURNED" : "UNBURNED",
		       "q",Params(state)->q);
	(void) fprintf(file,"%-24s = %-"FFMT"\n","t_crit",
		       Params(state)->critical_temperature);

	if (Composition_type(state) == PTFLAME)
	{
	    (void) fprintf(file,"\n");
	    return;
	}

	(void) fprintf(file,"%-24s = %-"FFMT"\n","product density",Prod(state));
	(void) fprintf(file,"%-24s = %-"FFMT"\n",
		       "reaction progress",React(state));

	if (Composition_type(state) == ZND)
	{
	    (void) fprintf(file,"\n");
	    return;
	}

	(void) fprintf(file,"%-24s = %-"FFMT"\n","rho1",Dens1(state));
#endif /* !defined(COMBUSTION_CODE) */
	(void) fprintf(file,"%-24s = %-24s %-24s = %-"FFMT"\n\n","gamma_set",
		      Local_gamma_set(state)?"YES" : "NO","local_gamma",
		      Local_gamma(state));
        if(g_composition_type() == MULTI_COMP_NON_REACTIVE)
        {
            if(Params(state) != NULL &&
               Params(state)->n_comps != 1)
            {
                for(i = 0; i < Params(state)->n_comps; i++)
                    (void) fprintf(file,"partial density[%2d] = %"FFMT"\n",
                       i,pdens(state)[i]);
                (void) fprintf(file,"\n");
                 /* TMP the following print is for the debuging display purpose */
                for(i = 0; i < Params(state)->n_comps; i++)
                    (void) fprintf(file,"[%d]Mass fraction = %-"FFMT"\n",
                             i, pdens(state)[i]/Dens(state));
                (void) fprintf(file,"\n");
            }
        }
}		/*end g_verbose_fprint_state*/
Beispiel #16
0
EXPORT void g_fprint_state(
	FILE		*file,
	Locstate	state)
{
	int dim;
	if (is_obstacle_state(state))
	{
	    (void) fprintf(file,"state %p (OBSTACLE STATE)\n\n",state);
	    return;
	}
	if (current_interface())
	    dim = current_interface()->dim;
	else
	    dim = Params(state)->dim;
	g_fprint_raw_state(file,state,dim);

#if !defined(COMBUSTION_CODE)
	(void) fprintf(file,"\n");
#else /* !defined(COMBUSTION_CODE) */
	if (Composition_type(state) == PURE_NON_REACTIVE)
	{
	    (void) fprintf(file,"\n");
	    return;
	}
	(void) fprintf(file,"burned = %s   q = %"FFMT"   t_crit = %"FFMT"\n",
			    Burned(state)? "BURNED" : "UNBURNED",
			    Params(state)->q,
			    Params(state)->critical_temperature);

	if ((Composition_type(state) == PTFLAME) ||
	    (Composition_type(state) == THINFLAME))
	{
	    (void) fprintf(file,"\n");
	    return;
	}

	(void) fprintf(file,"product density = %"FFMT"\n",Prod(state));

	if (Composition_type(state) == ZND)
	{
	    (void) fprintf(file,"\n");
	    return;
	}

	(void) fprintf(file," rho1 = %"FFMT"\n\n",Dens1(state));
#endif /* !defined(COMBUSTION_CODE) */
	(void) fprintf(file,"%-24s = %-24s %-24s = %-"FFMT"\n\n","gamma_set",
                      Local_gamma_set(state)?"YES" : "NO","local_gamma",
                      Local_gamma(state));
        if(g_composition_type() == MULTI_COMP_NON_REACTIVE)
        {
            if(Params(state) != NULL &&
               Params(state)->n_comps != 1)
            {
                int i;
                for(i = 0; i < Params(state)->n_comps; i++)
                    (void) fprintf(file,"partial density[%2d] = %"FFMT"\n",
                       i,pdens(state)[i]);
                (void) fprintf(file,"\n");
            }
        }
}		/*end g_fprint_state*/
Beispiel #17
0
	inline OpenSMOKEVector<T, IndexPolicy>& OpenSMOKEVector<T, IndexPolicy>::operator *=(T const& rval)
	{
		Prod(dimensions_ , rval, vector_+this->index_); 
		return *this;
	}
Beispiel #18
0
inline const
Prod operator*(const float c, const E& v) {return Prod(c,v);}
Beispiel #19
0
GFA::Tuple GFA::Tuple::operator*(const Scalar &rhs) const
{
    Tuple temp;
    Prod(temp, rhs);
    return temp;
}