Exemplo n.º 1
0
void LearnableParameter<ElemType>::InitRandom(const bool uniformInit,
                                                const unsigned long randomSeed,
                                                const ElemType initValueScale,
                                                bool initOnCPUOnly)
{
    // fprintf(stderr, "%d x %d: %d  %ls\n", (int)GetNumRows(), (int)GetNumCols(), (int)randomSeed, NodeName().c_str());

    // the random seed offset is set via the "randomSeedOffset" parameter in config
    if (initOnCPUOnly)
        Value().TransferToDeviceIfNotThere(CPUDEVICE, true);
#if 1   // this more complex version is needed to repro test cases generated with an older version
    auto& value = GetSampleLayout().GetRank() > 2 ? Value() : ValueAsMatrix();
#else
    auto& value = Value();
#endif
    if (uniformInit)
    {
        // TODO: move these hidden extra factors out from here and into NDL, and make them visible in BS
        ElemType randRange = 0.05f * initValueScale;
        value.SetUniformRandomValue(-randRange, randRange, randomSeed);
    }
    else
    {
        size_t inputSize = value.GetNumCols();
        ElemType randInitstd = 0.2f * initValueScale / sqrt(ElemType(inputSize));
        value.SetGaussianRandomValue(0, randInitstd, randomSeed);
    }
    if (initOnCPUOnly)
        Value().TransferToDeviceIfNotThere(m_deviceId, true);
}
Exemplo n.º 2
0
ElemType Vector<ElemType>::foreachHook(FE_State & fe) {
	if (fe.state == 0) fe.iter = new Iterator(this);
	if (((Iterator *) fe.iter)->hasNext()) {
		fe.state = 1;
		return ((Iterator *) fe.iter)->next();
	} else {
		fe.state = 2;
		return ElemType();
	}
}
Exemplo n.º 3
0
EXPORT void DATA_LOAD::Add( int QuantityElem, BYTE TypeElem[], FORCE_GROUP &FrcGrpInp, FORCE_VALUE *FrcVl, BYTE MaskQw, float Coef )
{
	   int i, j, n, k, te, ne, net, m, qw, qn, kzpm, iqw;
           FORCE_LIST  *FrcLst;
	   FORCE_TYPE  *FrcTp;
	   FORCE_VALUE *FrcValue;
	   float *ForceV;

	   for ( i=0; i<FrcGrpInp.QuantityForceList; i++ ) {

	       FrcLst = &FrcGrpInp.ForceList[i];

	       for ( j=0; j<FrcLst->QuantityForce; j++ ) {

		  FrcTp = &FrcLst->Force[j];
		  qw = FrcTp->Qw;  qn = FrcTp->Qn;
		  if ( MaskQw != 0xFF && qw != MaskQw ) continue;

		  FrcValue = (FORCE_VALUE*)&FrcVl[FrcTp->NumForceValue-1];
		  kzpm = FrcValue->QuantityValue;
		  ForceV = (float*) Memory(kzpm+1,sizeof(float));
		  memcpy(ForceV,FrcValue->Value,kzpm*(long)sizeof(float));
                  if ( TypeElem == NULL ) {
		     ForceV[0] *= Coef;  goto _10;   }

                  if ( FrcLst->NumNodeFe == 0 || FrcLst->NumNodeFe > QuantityElem )
                     continue;
                  ne = TypeElem[FrcLst->NumNodeFe-1];
                  net = ne % 100;
                  te = ElemType(ne);
                  iqw = qw % 10;

		  if ( te == 4 ) {    // стеpжни
		     ForceV[0] *= Coef;
                     goto _10;   }

		  if ( te == 1 || te == 4 ) {    // стеpжни
		     ForceV[0] *= Coef;
                     if ( iqw == 7 && kzpm > 2 ) ForceV[2] *= Coef;
		     if ( iqw == 8 && qn > 1 && kzpm > 1 )
                        ForceV[1] *= Coef;
                     goto _10;   }

		  if ( te == 2 || te == 5 || te == 6 || te == 7 ) {  // пластины
		     if ( iqw == 9 || iqw == 0 ) {
			for ( k=2; k<kzpm; k++ ) ForceV[k] *= Coef;
                        goto _10;  }
                     ForceV[0] *= Coef;
		     if ( iqw < 7 ) goto _10;
		     if ( iqw == 7 ) {
			for ( k=1; k<kzpm; k++ ) ForceV[k] *= Coef;
                        goto _10;  }
		     if ( qw == 8 || qw == 18 ) {
                        if ( net > 40 && net <= 50 && kzpm > 1 && qn == 0 )
                           ForceV[1] *= Coef;
                        goto _10;   }
		     if ( qw == 28 ) {
			for ( k=1; k<kzpm-1; k++ ) ForceV[k] *= Coef;
                        goto _10;  }
		     if ( qw == 38 ) {
                        if ( net > 40 && net <= 50 && kzpm > 1 ) ForceV[1] *= Coef;
                        goto _10;  }
		     if ( qw == 48 ) {
			for ( k=1; k<kzpm; k++ ) ForceV[k] *= Coef;
                        goto _10;  }
		     if ( qw == 88 && kzpm > 1 ) {
                        ForceV[1] *= Coef;  goto _10;   }
		     }

		  if ( te == 3 ) {
                     ForceV[0] *= Coef;
		     if ( iqw == 8 ) {
			m = 1;
			if ( qw == 18 ) m = 3;
			if ( qw == 38 || qw == 48 ) m = 0;
			if ( m < kzpm ) for ( k=1; k<kzpm-m; k++ ) ForceV[k] *= Coef;
			}
                     goto _10;   }

_10:		  n = AddForceValue(1,kzpm,ForceV);
                  if ( n ) Include(FrcLst->NumNodeFe,qw,qn,n);
		  }
	       }
	   Modify = 1;
}
Exemplo n.º 4
0
	iterator insert(const ElemType &elem)
	{
		return iterator(insert(gtl::move(ElemType(elem)), _root, _less));
	}
Exemplo n.º 5
0
int   EXPORT SCHEMA::SchemaMatrCos( WORD NumElem, double *MatrCosOut, BYTE YesAlfa )
{
    FORMAT *pFrmt;
    INSERT_LIST *pCrnr;
    double SF = 0,  CF = 1, c1, s1, sfa, cfa, sfb, cfb, RMK[9], QMK[9], U1[3], U2[3], Alfa=0;
    WORD Type, n;
    int i, k;
    RIGID_LIST *pRL;
    INSERT_LIST *pIL;
    float UF[6];
    CK *pCK1, *pCK2, *pCK3;
    
#define   X1   pCK1->x
#define   Y1   pCK1->y
#define   Z1   pCK1->z
#define   X2   pCK2->x
#define   Y2   pCK2->y
#define   Z2   pCK2->z
#define   X3   pCK3->x
#define   Y3   pCK3->y
#define   Z3   pCK3->z
    
    double CoordList[9], r;
#define  x1       CoordList[0]
#define  y1       CoordList[1]
#define  z1       CoordList[2]
#define  x2       CoordList[3]
#define  y2       CoordList[4]
#define  z2       CoordList[5]
#define  x3       CoordList[6]
#define  y3       CoordList[7]
#define  z3       CoordList[8]
    
    memcpy(RMK,MatrCosOut,9*sizeof(double));
    memset(MatrCosOut,0,9*sizeof(double));
    MatrCosOut[0] = 1;  MatrCosOut[4] = 1;  MatrCosOut[8] = 1;
    
    if ( NumElem == 0 || NumElem > QuantityElem ) return 1;
    
    pFrmt = (FORMAT*) &pFormat[NumElem-1];
    if ( pFrmt->QuantityNode < 2 ) return 1;
    if ( pFrmt->pNode == NULL ) return 1;
    
    Type = ElemType(pFrmt->TypeElem);
    
	if ( Type != 1 && pFrmt->TypeElem > 1000 )
		return SchemaMatrCos(pFrmt->QuantityNode,pFrmt->pNode,MatrCosOut);
	
    if ( pFrmt->QuantityNode > 2 && pFrmt->TypeElem > 1000 && pFrmt->TypeElem < 1100 )
        return SchemaMatrCos(pFrmt->QuantityNode,pFrmt->pNode,MatrCosOut);
    if ( pFrmt->TypeElem > 150 && pFrmt->TypeElem <=160 || pFrmt->TypeElem == 55 )
        Type = 1;
    pCK1 = (CK*)&Coord[pFrmt->pNode[0]-1];
    pCK2 = (CK*)&Coord[pFrmt->pNode[1]-1];
    memset(CoordList,0,sizeof(CoordList));
    memcpy(&x2,&X2,3*sizeof(double));
    x2 -= X1;  y2 -= Y1;  z2 -= Z1;
    
    if ( pFrmt->QuantityNode < 3 || Type == 1 ) {
        
        if ( pFrmt->TypeCorner ) {
            pCrnr = (INSERT_LIST*)_Corner.GetInsert(pFrmt->TypeCorner);
            switch ( pCrnr->Type ) {
               case 17:   SF = sin(pCrnr->rxn);  CF = cos(pCrnr->rxn);
		                  break;
	           case 18:
               case 20:   x3 -= X1;         y3 -= Y1;         z3 -= Z1;
	           case 19:
	           case 21:
		          x3 += pCrnr->rxn;  y3 += pCrnr->rxk;  z3  += pCrnr->ryn;
	              if ( MatrCos(CoordList,MatrCosOut) ) return 1;
                  c1 = MatrCosOut[6];    s1 = sqrt(1.-c1*c1);
                  if ( fabs(s1) >= 0.001 ) {  SF =  MatrCosOut[7]/s1;  CF =  MatrCosOut[8]/s1;  }
                  else {  SF = MatrCosOut[5]; CF = -MatrCosOut[4];  }
                  if ( pCrnr->Type > 19 ) Alfa = -90;
                goto _10;

            default:
                r = pCrnr->rxn * PI / 180;
                SF = sin(r);  CF = cos(r);
	       }  }
        
        if ( MatrCos(SF,CF,CoordList,MatrCosOut) ) return 1;
        
_10:     if ( Alfa || YesAlfa && pFrmt->TypeRigid ) {
             if ( YesAlfa && pFrmt->TypeRigid  ) {
                pRL = _Rigid.GetRigid(_Rigid.GetRigidType(pFrmt->TypeRigid));
                if ( pRL == NULL ) return 0;
                Alfa += pRL->Alfa;    }
             sfa = SF;                 cfa = CF;
             sfb = sin(Alfa*M_PI/180);     cfb = cos(Alfa*M_PI/180);
             SF  = sfa*cfb+cfa*sfb;    CF  = cfa*cfb-sfa*sfb;
             if ( MatrCos(SF,CF,CoordList,MatrCosOut) ) return 1;
         }
         return 0;  }
    
    pCK3 = (CK*)&Coord[pFrmt->pNode[2]-1];
    memcpy(&x3,&X3,3*sizeof(double));
    x3 -= X1;  y3 -= Y1;  z3 -= Z1;
    return MatrCos(CoordList,MatrCosOut);
    
}