From b8007f70849c0756585a87c3453fb200b50fb6f5 Mon Sep 17 00:00:00 2001 From: Oliver Sander <sander@igpm.rwth-aachen.de> Date: Tue, 14 Jun 2011 13:15:46 +0000 Subject: [PATCH] make the problem a 3x1 strip clamped at the short ends [[Imported from SVN: r7433]] --- cosserat-continuum.cc | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/cosserat-continuum.cc b/cosserat-continuum.cc index 127ebb6b..04bd5e79 100644 --- a/cosserat-continuum.cc +++ b/cosserat-continuum.cc @@ -122,9 +122,12 @@ int main (int argc, char *argv[]) try // /////////////////////////////////////// typedef std::conditional<dim==1,OneDGrid,UGGrid<dim> >::type GridType; array<unsigned int,dim> elements; - elements.fill(3); + elements.fill(1); + elements[0] = 3; + FieldVector<double,dim> upper(1); + upper[0] = 3; shared_ptr<GridType> gridPtr = StructuredGridFactory<GridType>::createSimplexGrid(FieldVector<double,dim>(0), - FieldVector<double,dim>(1), + upper, elements); GridType& grid = *gridPtr.get(); @@ -136,6 +139,7 @@ int main (int argc, char *argv[]) try // Read Dirichlet values // ///////////////////////////////////////// +#if 0 BitSetVector<1> allNodes(grid.size(dim)); allNodes.setAll(); LeafBoundaryPatch<GridType> dirichletBoundary(grid, allNodes); @@ -147,6 +151,20 @@ int main (int argc, char *argv[]) try for (int j=0; j<3; j++) dirichletNodes[i][j] = true; } +#else + BitSetVector<blocksize> dirichletNodes(grid.size(dim), false); + + GridType::Codim<dim>::LeafIterator vIt = grid.leafbegin<dim>(); + GridType::Codim<dim>::LeafIterator vEndIt = grid.leafend<dim>(); + + for (; vIt!=vEndIt; ++vIt) { + if (vIt->geometry().corner(0)[0] < 1e-3 or vIt->geometry().corner(0)[0] > upper[0]-1e-3) { + // Only translation dofs are Dirichlet + for (int j=0; j<3; j++) + dirichletNodes[grid.leafIndexSet().index(*vIt)][j] = true; + } + } +#endif // ////////////////////////// // Initial solution @@ -155,8 +173,9 @@ int main (int argc, char *argv[]) try FieldVector<double,3> yAxis(0); yAxis[1] = 1; - GridType::LeafGridView::Codim<dim>::Iterator vIt = grid.leafbegin<dim>(); - GridType::LeafGridView::Codim<dim>::Iterator vEndIt = grid.leafend<dim>(); +/* GridType::LeafGridView::Codim<dim>::Iterator vIt = grid.leafbegin<dim>(); + GridType::LeafGridView::Codim<dim>::Iterator vEndIt = grid.leafend<dim>();*/ + vIt = grid.leafbegin<dim>(); for (; vIt!=vEndIt; ++vIt) { int idx = grid.leafIndexSet().index(*vIt); @@ -167,10 +186,10 @@ int main (int argc, char *argv[]) try // x[idx].q is the identity, set by the default constructor - if (dirichletNodes[idx][0]) { + if (dirichletNodes[idx][0] and vIt->geometry().corner(0)[0] > upper[0]-1e-3) { // Only the positions have Dirichlet values - x[idx].r[2] = vIt->geometry().corner(0)[0]; + x[idx].r[0] = 1.5; } -- GitLab