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); }
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(); } }
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; }
iterator insert(const ElemType &elem) { return iterator(insert(gtl::move(ElemType(elem)), _root, _less)); }
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); }