static void shs_transform(sha256 *sh) { /* basic transformation step */ mr_unsign32 a,b,c,d,e,f,g,h,t1,t2; int j; for (j=16; j<64; j++) sh->w[j]=theta1(sh->w[j-2])+sh->w[j-7]+theta0(sh->w[j-15])+sh->w[j-16]; a=sh->h[0]; b=sh->h[1]; c=sh->h[2]; d=sh->h[3]; e=sh->h[4]; f=sh->h[5]; g=sh->h[6]; h=sh->h[7]; for (j=0; j<64; j++) { /* 64 times - mush it up */ t1=h+Sig1(e)+Ch(e,f,g)+K[j]+sh->w[j]; t2=Sig0(a)+Maj(a,b,c); h=g; g=f; f=e; e=d+t1; d=c; c=b; b=a; a=t1+t2; } sh->h[0]+=a; sh->h[1]+=b; sh->h[2]+=c; sh->h[3]+=d; sh->h[4]+=e; sh->h[5]+=f; sh->h[6]+=g; sh->h[7]+=h; }
void frameSolver2d::solve() { #if defined(HAVE_PETSC) linearSystemPETSc<double> *lsys = new linearSystemPETSc<double>; #elif defined(HAVE_GMM) linearSystemCSRGmm<double> *lsys = new linearSystemCSRGmm<double>; lsys->setGmres(1); lsys->setNoisy(1); #else linearSystemFull<double> *lsys = new linearSystemFull<double>; #endif if(pAssembler) delete pAssembler; pAssembler = new dofManager<double>(lsys); // fix dofs and create free ones createDofs(); // force vector std::vector<std::pair<GVertex *, std::vector<double> > >::iterator it = _nodalForces.begin(); for(; it != _nodalForces.end(); ++it) { MVertex *v = it->first->mesh_vertices[0]; const std::vector<double> &F = it->second; Dof DOFX(v->getNum(), 0); Dof DOFY(v->getNum(), 1); pAssembler->assemble(DOFX, F[0]); pAssembler->assemble(DOFY, F[1]); } // stifness matrix for(std::size_t i = 0; i < _beams.size(); i++) { fullMatrix<double> K(6, 6); computeStiffnessMatrix(i, K); _beams[i]._stiffness = K; MVertex *v0 = _beams[i]._element->getVertex(0); MVertex *v1 = _beams[i]._element->getVertex(1); Dof theta0(v0->getNum(), Dof::createTypeWithTwoInts(2, _beams[i]._rotationTags[0])); Dof theta1(v1->getNum(), Dof::createTypeWithTwoInts(2, _beams[i]._rotationTags[1])); Dof U0(v0->getNum(), 0); Dof U1(v1->getNum(), 0); Dof V0(v0->getNum(), 1); Dof V1(v1->getNum(), 1); Dof DOFS[6] = {U0, V0, theta0, U1, V1, theta1}; for(int j = 0; j < 6; j++) { for(int k = 0; k < 6; k++) { pAssembler->assemble(DOFS[j], DOFS[k], K(j, k)); } } } lsys->systemSolve(); // save the solution for(std::size_t i = 0; i < _beams.size(); i++) { MVertex *v0 = _beams[i]._element->getVertex(0); MVertex *v1 = _beams[i]._element->getVertex(1); Dof theta0(v0->getNum(), Dof::createTypeWithTwoInts(2, _beams[i]._rotationTags[0])); Dof theta1(v1->getNum(), Dof::createTypeWithTwoInts(2, _beams[i]._rotationTags[1])); Dof U0(v0->getNum(), 0); Dof U1(v1->getNum(), 0); Dof V0(v0->getNum(), 1); Dof V1(v1->getNum(), 1); Dof DOFS[6] = {U0, V0, theta0, U1, V1, theta1}; for(int j = 0; j < 6; j++) { pAssembler->getDofValue(DOFS[j], _beams[i]._displacement[j]); } } delete lsys; delete pAssembler; }