198 sigma.
assemble(sig_tmp, {1, 9, 8, 6, 2, 7, 5, 4, 3});
199 }
else if ( sig_tmp.
giveSize() == 4 ) {
200 sigma.
assemble(sig_tmp, {1, 4, 3, 2});
213 std :: unique_ptr< SparseLinearSystemNM > solver(
classFactory.createSparseLinSolver(
ST_Petsc, this->domain, this->domain->giveEngngModel() ) );
215 std :: unique_ptr< SparseMtrx > Kff(
classFactory.createSparseMtrx( stype ) );
216 std :: unique_ptr< SparseMtrx > Kfp(
classFactory.createSparseMtrx( stype ) );
217 std :: unique_ptr< SparseMtrx > Kpp(
classFactory.createSparseMtrx( stype ) );
219 Kff->buildInternalStructure(rve, this->
domain->giveNumber(), fnum);
220 Kfp->buildInternalStructure(rve, this->
domain->giveNumber(), fnum, pnum);
221 Kpp->buildInternalStructure(rve, this->
domain->giveNumber(), pnum);
226 int neq = Kfp->giveNumberOfRows();
227 int nsd = this->
domain->giveNumberOfSpatialDimensions();
228 int ncomp = nsd * nsd;
230 FloatMatrix grad_pert(ncomp, ncomp), rhs, sol(neq, ncomp);
231 grad_pert.resize(ncomp, ncomp);
232 grad_pert.beUnitMatrix();
235 Kfp->times(grad_pert, rhs);
236 solver->solve(*Kff, rhs, sol);
240 Kfp->timesT(sol, E_tmp);
243 Kpp->
times(grad_pert, tmpMat);
250 E.assemble(E_tmp, {1, 6, 5, 6, 2, 4, 5, 4, 3});
252 E.assemble(E_tmp, {1, 9, 8, 6, 2, 7, 5, 4, 3});
254 }
else if ( nsd == 2 ) {
255 E.assemble(E_tmp, {1, 4, 3, 2});
int giveNextFreeDofID(int increment=1)
int giveNumberOfSpatialDimensions()
Returns number of spatial dimensions.
void assembleVector(FloatArray &answer, TimeStep *tStep, const VectorAssembler &va, ValueModeType mode, const UnknownNumberingScheme &s, Domain *domain, FloatArray *eNorms=NULL)