本文整理汇总了C++中TPZCompMesh::MaterialVec方法的典型用法代码示例。如果您正苦于以下问题:C++ TPZCompMesh::MaterialVec方法的具体用法?C++ TPZCompMesh::MaterialVec怎么用?C++ TPZCompMesh::MaterialVec使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TPZCompMesh
的用法示例。
在下文中一共展示了TPZCompMesh::MaterialVec方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main1
//.........这里部分代码省略.........
else
{
vecnames[0] = "state";
}
//cmeshauto->Solution().Print();
std::string postprocessname("ugabuga.vtk");
TPZVTKGraphMesh vtkmesh(cmesh.operator->(),dim,mat,scalnames,vecnames);
vtkmesh.SetFileName(postprocessname);
vtkmesh.SetResolution(0);
int numcases = 1;
// Iteracoes de tempo
int istep = 0, nsteps = 80;
vtkmesh.DrawMesh(numcases);
vtkmesh.DrawSolution(istep, 1.);
typedef std::list<TPZAutoPointer<TPZDohrSubstructCondense<STATE> > > subtype;
const subtype &sublist = dohrptr->SubStructures();
subtype::const_iterator it = sublist.begin();
int subcount=0;
while (it != sublist.end())
{
TPZFMatrix<STATE> subext,subu;
dohrptr->fAssembly->Extract(subcount,diag,subext);
(*it)->UGlobal(subext,subu);
TPZCompMesh *submesh = SubMesh(cmeshauto, subcount);
submesh->LoadSolution(subu);
subu.Print();
std::map<int ,TPZMaterial * > materialmap(submesh->MaterialVec());
std::map<int ,TPZMaterial * >::iterator itmat;
for (itmat = materialmap.begin(); itmat != materialmap.end() ; itmat++)
{
TPZMaterial * mat = itmat->second;
TPZViscoelastic *vmat = dynamic_cast< TPZViscoelastic *> (mat);
if(vmat)
{
vmat->SetUpdateMem();
}
}
subcount++;
it++;
}
/*
#ifdef LOG4CXX
{
std::stringstream sout;
diag.Print("Resultado do processo iterativo",sout);
LOGPZ_INFO(loggernathan,sout.str())
}
#endif
*/
//ViscoElastico
vtkmesh.DrawMesh(numcases);
vtkmesh.DrawSolution(istep+1, 1.);
std::cout << "To seguindo!!!" << std::endl;
for (istep = 2 ; istep < nsteps ; istep++)
示例2: main
int main() {
//malha geometrica
TPZGeoMesh *firstmesh = new TPZGeoMesh;
firstmesh->NodeVec().Resize(3);
TPZVec<REAL> coord(2);
coord[0] = 0.;
coord[1] = 0.;
//nos geometricos
firstmesh->NodeVec()[0].Initialize(coord,*firstmesh);
coord[0] = 1.0;
firstmesh->NodeVec()[1].Initialize(coord,*firstmesh);
coord[1] = 1.0;
firstmesh->NodeVec()[2].Initialize(coord,*firstmesh);
// coord[0] = 0.0;
// firstmesh->NodeVec()[3].Initialize(coord,*firstmesh);
TPZVec<int> nodeindexes(3);//triangulo
nodeindexes[0] = 0;//local[i] = global[i] , i=0,1,2,3
nodeindexes[1] = 1;
nodeindexes[2] = 2;
//elementos geometricos
TPZGeoElT2d *elq1 = new TPZGeoElT2d(nodeindexes,1,*firstmesh);
//orientacao local de um segundo elemento superposto
int i,sen;;
cout<<"Sentido local antihorario/horario : 0/1 ? ";
cin>>sen;
cout<<"Entre primeiro no = 0,1,2 : ";
cin>>i;
if(sen==0) {//direito
nodeindexes[0] = (0+i)%3;//local[i] = global[j] , i,j em {0,1,2}
nodeindexes[1] = (1+i)%3;
nodeindexes[2] = (2+i)%3;
} else {//inverso
nodeindexes[0] = (0+i)%3;//local[i] = global[j] , i,j em {0,1,2}
nodeindexes[1] = (2+i)%3;
nodeindexes[2] = (1+i)%3;
}
/* nodeindexes[0] = 1;//local[i] = global[i] , i=0,1,2,3
nodeindexes[1] = 2;
nodeindexes[2] = 3;*/
TPZGeoElT2d *elq2 = new TPZGeoElT2d(nodeindexes,1,*firstmesh);//segundo elemento superposto ao primeiro
/* coord[1] = 0.0;
coord[0] = 2.0;
firstmesh->NodeVec()[4].Initialize(coord,*firstmesh);
coord[1] = 1.0;
firstmesh->NodeVec()[5].Initialize(coord,*firstmesh);
nodeindexes[0] = 1;//local[i] = global[i] , i=0,1,2,3
nodeindexes[1] = 4;
nodeindexes[2] = 5;
nodeindexes[3] = 2;
TPZGeoElT2d *elq2 = new TPZGeoElT2d(nodeindexes,1,*firstmesh); */
//Arquivos de saida
ofstream outgm1("outgm1.dat");
ofstream outcm1("outcm1.dat");
ofstream outcm2("outcm2.dat");
//montagem de conectividades entre elementos
firstmesh->BuildConnectivity();
firstmesh->Print(outgm1);
outgm1.flush();
//teste de divisao geometrica : 1 elemento
TPZVec<TPZGeoEl *> vecsub,vecsub1;
elq1->Divide(vecsub);//divide 0
elq2->Divide(vecsub);//divide 1
/* vecsub[2]->Divide(vecsub1);//
vecsub1[3]->Divide(vecsub1);
vecsub[0]->Divide(vecsub1);//divide 1
vecsub1[2]->Divide(vecsub1); */
firstmesh->Print(outgm1);
outgm1.flush();
//malha computacional
TPZCompMesh *secondmesh = new TPZCompMesh(firstmesh);
//material
int matindex = secondmesh->MaterialVec().AllocateNewElement();
TPZFMatrix k(1,1,1.),f(1,1,0.),c(1,2,1.);
TPZMat2dLin * mat = new TPZMat2dLin(1);
mat->SetMaterial(k,c,f);
//mat->SetForcingFunction(force);
mat->SetForcingFunction(derivforce);
secondmesh->MaterialVec()[matindex] = mat;
//CC : condicao de contorno
//ordem de interpolacao
// TPZCompEl::gOrder = 3;
cmesh.SetDefaultOrder(3);
//constroe a malha computacional
secondmesh->AutoBuild();
secondmesh->InitializeBlock();
secondmesh->ComputeConnectSequence();
secondmesh->Print(outcm1);
outcm1.flush();
//Resolucao do sistema
TPZFMatrix Rhs(secondmesh->NEquations(),1),Stiff(secondmesh->NEquations(),secondmesh->NEquations()),U;
Stiff.Zero();
Rhs.Zero();
secondmesh->Assemble(Stiff,Rhs);
Rhs.Print("Rhs teste",outcm2);
Stiff.Print("Bloco teste",outcm2);
Rhs.Print("Computational Mesh -> fBlock",outcm2);
TPZMatrixSolver solver(&Stiff);
solver.SetDirect(ELU);
solver.Solve(Rhs,U);
//.........这里部分代码省略.........