diff --git a/extensions/base_problems/LinearElasticity.h b/extensions/base_problems/LinearElasticity.h index f757b82eb2a4c6264a460696a327d221739924db..7db74f0f3258f27ebee47a366960670c07165251 100644 --- a/extensions/base_problems/LinearElasticity.h +++ b/extensions/base_problems/LinearElasticity.h @@ -37,8 +37,6 @@ public: // methods // === getting/setting methods === -protected: // methods - virtual void fillOperators(); virtual void fillBoundaryConditions(); diff --git a/extensions/demo/CMakeLists.txt b/extensions/demo/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..074280e7a7696d784a9efc0acf00ec8b9eda67b1 --- /dev/null +++ b/extensions/demo/CMakeLists.txt @@ -0,0 +1,57 @@ +project("amdis_demo") +cmake_minimum_required(VERSION 2.8) + +#find_package(AMDIS REQUIRED COMPONENTS umfpack ) +find_package(AMDIS REQUIRED) + +if(AMDIS_FOUND) + message("amdis was found\n") + include(${AMDIS_USE_FILE}) + SET(BASIS_LIBS ${AMDIS_LIBRARIES}) +endif(AMDIS_FOUND) + + +# set(elliptBase src/elliptBaseProblem.cc) +# add_executable("elliptBase" ${elliptBase}) +# target_link_libraries("elliptBase" ${BASIS_LIBS}) +# +# set(elliptImplicit src/elliptImplicit.cc) +# add_executable("elliptImplicit" ${elliptImplicit}) +# target_link_libraries("elliptImplicit" ${BASIS_LIBS}) +# +# set(cahn_hilliard src/cahn_hilliard.cc) +# add_executable("cahn_hilliard" ${cahn_hilliard}) +# target_link_libraries("cahn_hilliard" ${BASIS_LIBS}) +# +# set(pfc src/pfc.cc) +# add_executable("pfc" ${pfc}) +# target_link_libraries("pfc" ${BASIS_LIBS}) +# +# set(drivenCavity src/chns/drivenCavity.cc) +# add_executable("drivenCavity" ${drivenCavity}) +# target_link_libraries("drivenCavity" ${BASIS_LIBS}) +# +# include_directories(/home/spraetor/projects/src/common) +# set(navierStokes src/navierStokes.cc) +# add_executable("navierStokes" ${navierStokes}) +# target_link_libraries("navierStokes" ${BASIS_LIBS}) +# +# set(navierStokesDd src/navierStokes_diffuseDomain.cc) +# add_executable("navierStokesDd" ${navierStokesDd}) +# target_link_libraries("navierStokesDd" ${BASIS_LIBS}) +# +# set(linearElasticityDd src/linearElasticity.cc) +# add_executable("linearElasticityDd" ${linearElasticityDd}) +# target_link_libraries("linearElasticityDd" ${BASIS_LIBS}) + + set(fsi src/fsi_explicit/fluidStructureInteraction.cc) + add_executable("fsi" ${fsi}) + target_link_libraries("fsi" ${BASIS_LIBS}) + +# set(ddFsi src/diffuseDomainFsi.cc) +# add_executable("ddFsi" ${ddFsi}) +# target_link_libraries("ddFsi" ${BASIS_LIBS}) + + +#create the output dir +# file(MAKE_DIRECTORY output) diff --git a/extensions/demo/fsi b/extensions/demo/fsi new file mode 100755 index 0000000000000000000000000000000000000000..c2afb5ade420e28ebb1f6ba916b943a2d3443b34 Binary files /dev/null and b/extensions/demo/fsi differ diff --git a/extensions/demo/init/fsi.dat.2d b/extensions/demo/init/fsi.dat.2d new file mode 100644 index 0000000000000000000000000000000000000000..6e882951062dd3e2750dcc8bd363d19bc6fb4d85 --- /dev/null +++ b/extensions/demo/init/fsi.dat.2d @@ -0,0 +1,168 @@ +dimension of world: 2 + +% ====================== VARIABLES ======================== +output_folder: output +output_postfix: _fsi + +% ====================== MESH ============================= +mesh->H: 0.4 %0.41 +mesh->L: 2.4 %2.5 + + +obstacle->num vertices: 4 +obstacle->vertex[0]: [0.16, 0.12] +obstacle->vertex[1]: [0.16, 0.24] +obstacle->vertex[2]: [0.28, 0.24] +obstacle->vertex[3]: [0.28, 0.12] + +flag->num vertices: 4 +flag->vertex[0]: [0.28, 0.20] +flag->vertex[1]: [0.64, 0.20] +flag->vertex[2]: [0.64, 0.16] +flag->vertex[3]: [0.28, 0.16] + +connection->num vertices: 4 +connection->vertex[0]: [0.26, 0.20] +connection->vertex[1]: [0.30, 0.20] +connection->vertex[2]: [0.30, 0.16] +connection->vertex[3]: [0.26, 0.16] + +obstacle->P: 0.2 + +mesh->refinement->initial level: 4 +mesh->refinement->level on interface: 6 +mesh->refinement->level in inner domain: 4 +mesh->refinement->level in outer domain: 0 +mesh->refinement->interface width: 0.01 +mesh->refinement->fade out width: 0.1 + +% ====================== MESH ============================= +mesh1->macro file name: macro/obstacle_in_channel.2d +mesh1->global refinements: 0 +mesh1->check: 1 + +mesh2->macro file name: macro/channel.2d +mesh2->global refinements: 0 +mesh2->check: 1 + +% ====================== INCLUDES ========================= +polynomial-degree: 1 +mesh_name: mesh2 +#include "init/navierStokes_TaylorHood.inc.2d" + +% =========== ELASTICITY_PROBLEM 1 ================================ + +% --------------- PROBLEM-SPACES ---------------------------------- +elasticity->obstacle->space->components: 2*${dimension of world} + +elasticity->obstacle->space->polynomial degree[0]: ${polynomial-degree} +elasticity->obstacle->space->polynomial degree[1]: ${polynomial-degree} +elasticity->obstacle->space->polynomial degree[2]: ${polynomial-degree} +elasticity->obstacle->space->polynomial degree[3]: ${polynomial-degree} +elasticity->obstacle->space->polynomial degree[4]: ${polynomial-degree} +elasticity->obstacle->space->polynomial degree[5]: ${polynomial-degree} + +elasticity->obstacle->space->dim: ${dimension of world} +elasticity->obstacle->space->mesh: mesh1 + +% --------------- SOLVER ---------------------------------- +elasticity->obstacle->space->solver: umfpack +elasticity->obstacle->space->solver->symmetric strategy: 0 +elasticity->obstacle->space->solver->tolerance: 1.e-8 +elasticity->obstacle->space->solver->info: 1 + +% --------------- OUTPUT ---------------------------------- +elasticity->obstacle->displacement->output->filename: ${output_folder}/displacement${output_postfix}_ +elasticity->obstacle->displacement->output->ParaView animation: 1 +elasticity->obstacle->displacement->output->ParaView vector format: 1 +elasticity->obstacle->displacement->output->write vector as 3d vector: 1 +elasticity->obstacle->displacement->output->write every i-th timestep: 1 +elasticity->obstacle->displacement->output->append index: 1 +elasticity->obstacle->displacement->output->index length: 9 +elasticity->obstacle->displacement->output->index decimals: 7 + +elasticity->obstacle->space->output->filename: ${output_folder}/elasticity${output_postfix}_ +elasticity->obstacle->space->output->ParaView animation: 1 +elasticity->obstacle->space->output->ParaView format: 1 +elasticity->obstacle->space->output->write every i-th timestep: 1 +elasticity->obstacle->space->output->append index: 1 +elasticity->obstacle->space->output->index length: 9 +elasticity->obstacle->space->output->index decimals: 7 + +% =========== ELASTICITY_PROBLEM 2 ================================ + +% --------------- PROBLEM-SPACES ---------------------------------- +elasticity->fluid->space->components: ${dimension of world} + +elasticity->fluid->space->polynomial degree[0]: ${polynomial-degree} +elasticity->fluid->space->polynomial degree[1]: ${polynomial-degree} +elasticity->fluid->space->polynomial degree[2]: ${polynomial-degree} + +elasticity->fluid->space->dim: ${dimension of world} +elasticity->fluid->space->mesh: mesh2 + +% --------------- SOLVER ---------------------------------- +elasticity->fluid->space->solver: umfpack +elasticity->fluid->space->solver->symmetric strategy: 0 +elasticity->fluid->space->solver->tolerance: 1.e-8 +elasticity->fluid->space->solver->info: 1 + +% ====================== MAIN_PROBLEM ============== + +main->dim: ${dimension of world} +main->solver: umfpack + +% ====================== USER_PARAMETER - NS ============== + +% glycerine +ns->viscosity: 1.13*1.e-3 +ns->density: 1.26*1.e3 + +ns->theta: 0.5 +%ns->force: [0.0, 9.81] % gravitational force [m/s^2] + +ns->force dirichlet bc: 0 + +ns->Um: 1.5 +ns->beta: 1 +ns->alpha: 2.7 + +ns->initial velocity: 0 +ns->initial velocity value: 0.0 +ns->laplace operator: 1 % 0... div(nu*grad(u)), 1... div(0.5*nu*(grad(u)+grad(u)^T)) [sehr langsam] +ns->non-linear term: 2 % 0... u^old*grad(u_i^old), 1... u'*grad(u_i^old), 2... u^old*grad(u'_i) + +% ====================== USER_PARAMETER - NS ============== + +% polypropylene +elasticity->obstacle->mu: 317*1.e6 +elasticity->obstacle->lambda: 1.6637*1.e9 +elasticity->obstacle->rho: 1.1*1.e3 + +elasticity->obstacle->beta: 1 +elasticity->obstacle->alpha: 2.7 + +% polypropylene +elasticity->fluid->mu: 700 +elasticity->fluid->lambda: 1200 +elasticity->fluid->rho: 1 + +elasticity->fluid->beta: 1 +elasticity->fluid->alpha: 2.7 + +% ====================== TIMESTEPS ======================== +adapt->max iteration: 1 +adapt->max timestep iteration: 1 +adapt->max time iteration: 1 + +adapt->timestep: 1.e-5 +adapt->max timestep: 1e+10 +adapt->min timestep: 1e-6 +adapt->start time: 0.0 +adapt->end time: 25 + +% ====================== ESTIMATORS ======================= +adapt->strategy: 0 % 0=explicit, 1=implicit + +WAIT: 1 + diff --git a/extensions/demo/init/navierStokes_TaylorHood.inc.2d b/extensions/demo/init/navierStokes_TaylorHood.inc.2d new file mode 100644 index 0000000000000000000000000000000000000000..868aff11896b70ce32132f9e3bdbce792d290398 --- /dev/null +++ b/extensions/demo/init/navierStokes_TaylorHood.inc.2d @@ -0,0 +1,65 @@ + +ns->space->mesh: ${mesh_name} + +% ============ USER_PARAMETERS - NS ================================= +ns->viscosity: 1 +ns->beta: 1 +ns->sigma: 0.072 +ns->beta: 1 +ns->exponent: 2 +ns->theta: 0.5 +%ns->force: [0.0, -9.81] % gravitational force + +ns->viscosity1: 1 +ns->viscosity2: ${ns->viscosity1}/1000 + +ns->force dirichlet bc: 0 +ns->poisson problem pertubation: 0 % 1..applySingularPertubation, 2..applySingularDBC, 0..nothing +ns->simple algorithm: 1 +ns->calculate pressure: 0 +ns->initial velocity: 3 +ns->initial velocity value: 0.1 +ns->laplace operator: 1 % 0... div(nu*grad(u)), 1... div(0.5*nu*(grad(u)+grad(u)^T)) [sehr langsam] +ns->non-linear term: 2 % 0... u^old*grad(u_i^old), 1... u'*grad(u_i^old), 2... u^old*grad(u'_i) + +% =========== OUTPUT ============================================== + +ns->velocity->output->filename: ${output_folder}/velocity${output_postfix}_ +ns->space->output[2]->filename: ${output_folder}/pressure${output_postfix}_ + +% ============= PROBLEM-SPACES ================================== +ns->space->components: 3 + +ns->space->polynomial degree[0]: ${polynomial-degree}+1 +ns->space->polynomial degree[1]: ${polynomial-degree}+1 +ns->space->polynomial degree[2]: ${polynomial-degree} + +ns->space->dim: 2 + +% ================== SOLVER ====================================== +ns->space->solver: umfpack +ns->space->solver->symmetric strategy: 0 +ns->space->solver->ell: 3 +ns->space->solver->max iteration: 500 +ns->space->solver->restart: 10 % only used for GMRES +ns->space->solver->tolerance: 10 %1.e-8 +ns->space->solver->info: 1 +ns->space->solver->left precon: ilu + +% =================== OUTPUT ========================================= +ns->velocity->output->ParaView animation: 1 +ns->velocity->output->ParaView vector format: 1 +ns->velocity->output->write vector as 3d vector: 1 +ns->velocity->output->write every i-th timestep: 1 +%ns->velocity->output->compression: gzip +ns->velocity->output->append index: 1 +ns->velocity->output->index length: 9 +ns->velocity->output->index decimals: 7 + +ns->space->output[2]->ParaView animation: 0 +ns->space->output[2]->ParaView format: 0 +ns->space->output[2]->write every i-th timestep: 1 +%ns->space->output[2]->compression: gzip +ns->space->output[2]->append index: 1 +ns->space->output[2]->index length: 9 +ns->space->output[2]->index decimals: 7 diff --git a/extensions/demo/init/reinit.inc.2d b/extensions/demo/init/reinit.inc.2d new file mode 100644 index 0000000000000000000000000000000000000000..4d7d822ea427b31fcc1ae530635259e800a8e4ca --- /dev/null +++ b/extensions/demo/init/reinit.inc.2d @@ -0,0 +1,5 @@ +reinit->tolerance: 1.e-4 +reinit->maximal number of iteration steps: 100 +reinit->Gauss-Seidel iteration: 1 +reinit->infinity value: 1.e8 +reinit->boundary initialization: 3 diff --git a/extensions/demo/macro/channel.2d b/extensions/demo/macro/channel.2d new file mode 100644 index 0000000000000000000000000000000000000000..18ed55f59afaebe384858e47507dc7775efd3630 --- /dev/null +++ b/extensions/demo/macro/channel.2d @@ -0,0 +1,8247 @@ +DIM: 2 +DIM_OF_WORLD: 2 + +number of elements: 2328 +number of vertices: 1249 + +vertex coordinates: +0 0 +0.04 0 +0.08 0 +0.12 0 +0.16 0 +0.2 0 +0.24 0 +0.28 0 +0.32 0 +0.36 0 +0.4 0 +0.44 0 +0.48 0 +0.52 0 +0.56 0 +0.6 0 +0.64 0 +0.68 0 +0.72 0 +0.76 0 +0.8 0 +0.84 0 +0.88 0 +0.92 0 +0.96 0 +1 0 +1.04 0 +1.08 0 +1.12 0 +1.16 0 +1.2 0 +1.24 0 +1.28 0 +1.32 0 +1.36 0 +1.4 0 +1.44 0 +1.48 0 +1.52 0 +1.56 0 +1.6 0 +1.64 0 +1.68 0 +1.72 0 +1.76 0 +1.8 0 +1.84 0 +1.88 0 +1.92 0 +1.96 0 +2 0 +2.04 0 +2.08 0 +2.12 0 +2.16 0 +2.2 0 +2.24 0 +2.28 0 +2.32 0 +2.36 0 +2.4 0 +0 0.04 +0.04 0.04 +0.08 0.04 +0.12 0.04 +0.16 0.04 +0.2 0.04 +0.24 0.04 +0.28 0.04 +0.32 0.04 +0.36 0.04 +0.4 0.04 +0.44 0.04 +0.48 0.04 +0.52 0.04 +0.56 0.04 +0.6 0.04 +0.64 0.04 +0.68 0.04 +0.72 0.04 +0.76 0.04 +0.8 0.04 +0.84 0.04 +0.88 0.04 +0.92 0.04 +0.96 0.04 +1 0.04 +1.04 0.04 +1.08 0.04 +1.12 0.04 +1.16 0.04 +1.2 0.04 +1.24 0.04 +1.28 0.04 +1.32 0.04 +1.36 0.04 +1.4 0.04 +1.44 0.04 +1.48 0.04 +1.52 0.04 +1.56 0.04 +1.6 0.04 +1.64 0.04 +1.68 0.04 +1.72 0.04 +1.76 0.04 +1.8 0.04 +1.84 0.04 +1.88 0.04 +1.92 0.04 +1.96 0.04 +2 0.04 +2.04 0.04 +2.08 0.04 +2.12 0.04 +2.16 0.04 +2.2 0.04 +2.24 0.04 +2.28 0.04 +2.32 0.04 +2.36 0.04 +2.4 0.04 +0 0.08 +0.04 0.08 +0.08 0.08 +0.12 0.08 +0.16 0.08 +0.2 0.08 +0.24 0.08 +0.28 0.08 +0.32 0.08 +0.36 0.08 +0.4 0.08 +0.44 0.08 +0.48 0.08 +0.52 0.08 +0.56 0.08 +0.6 0.08 +0.64 0.08 +0.68 0.08 +0.72 0.08 +0.76 0.08 +0.8 0.08 +0.84 0.08 +0.88 0.08 +0.92 0.08 +0.96 0.08 +1 0.08 +1.04 0.08 +1.08 0.08 +1.12 0.08 +1.16 0.08 +1.2 0.08 +1.24 0.08 +1.28 0.08 +1.32 0.08 +1.36 0.08 +1.4 0.08 +1.44 0.08 +1.48 0.08 +1.52 0.08 +1.56 0.08 +1.6 0.08 +1.64 0.08 +1.68 0.08 +1.72 0.08 +1.76 0.08 +1.8 0.08 +1.84 0.08 +1.88 0.08 +1.92 0.08 +1.96 0.08 +2 0.08 +2.04 0.08 +2.08 0.08 +2.12 0.08 +2.16 0.08 +2.2 0.08 +2.24 0.08 +2.28 0.08 +2.32 0.08 +2.36 0.08 +2.4 0.08 +0 0.12 +0.04 0.12 +0.08 0.12 +0.12 0.12 +0.16 0.12 +0.2 0.12 +0.24 0.12 +0.28 0.12 +0.32 0.12 +0.36 0.12 +0.4 0.12 +0.44 0.12 +0.48 0.12 +0.52 0.12 +0.56 0.12 +0.6 0.12 +0.64 0.12 +0.68 0.12 +0.72 0.12 +0.76 0.12 +0.8 0.12 +0.84 0.12 +0.88 0.12 +0.92 0.12 +0.96 0.12 +1 0.12 +1.04 0.12 +1.08 0.12 +1.12 0.12 +1.16 0.12 +1.2 0.12 +1.24 0.12 +1.28 0.12 +1.32 0.12 +1.36 0.12 +1.4 0.12 +1.44 0.12 +1.48 0.12 +1.52 0.12 +1.56 0.12 +1.6 0.12 +1.64 0.12 +1.68 0.12 +1.72 0.12 +1.76 0.12 +1.8 0.12 +1.84 0.12 +1.88 0.12 +1.92 0.12 +1.96 0.12 +2 0.12 +2.04 0.12 +2.08 0.12 +2.12 0.12 +2.16 0.12 +2.2 0.12 +2.24 0.12 +2.28 0.12 +2.32 0.12 +2.36 0.12 +2.4 0.12 +0 0.16 +0.04 0.16 +0.08 0.16 +0.12 0.16 +0.16 0.16 +0.28 0.16 +0.32 0.16 +0.36 0.16 +0.4 0.16 +0.44 0.16 +0.48 0.16 +0.52 0.16 +0.56 0.16 +0.6 0.16 +0.64 0.16 +0.68 0.16 +0.72 0.16 +0.76 0.16 +0.8 0.16 +0.84 0.16 +0.88 0.16 +0.92 0.16 +0.96 0.16 +1 0.16 +1.04 0.16 +1.08 0.16 +1.12 0.16 +1.16 0.16 +1.2 0.16 +1.24 0.16 +1.28 0.16 +1.32 0.16 +1.36 0.16 +1.4 0.16 +1.44 0.16 +1.48 0.16 +1.52 0.16 +1.56 0.16 +1.6 0.16 +1.64 0.16 +1.68 0.16 +1.72 0.16 +1.76 0.16 +1.8 0.16 +1.84 0.16 +1.88 0.16 +1.92 0.16 +1.96 0.16 +2 0.16 +2.04 0.16 +2.08 0.16 +2.12 0.16 +2.16 0.16 +2.2 0.16 +2.24 0.16 +2.28 0.16 +2.32 0.16 +2.36 0.16 +2.4 0.16 +0 0.2 +0.04 0.2 +0.08 0.2 +0.12 0.2 +0.16 0.2 +0.28 0.2 +0.32 0.2 +0.36 0.2 +0.4 0.2 +0.44 0.2 +0.48 0.2 +0.52 0.2 +0.56 0.2 +0.6 0.2 +0.64 0.2 +0.68 0.2 +0.72 0.2 +0.76 0.2 +0.8 0.2 +0.84 0.2 +0.88 0.2 +0.92 0.2 +0.96 0.2 +1 0.2 +1.04 0.2 +1.08 0.2 +1.12 0.2 +1.16 0.2 +1.2 0.2 +1.24 0.2 +1.28 0.2 +1.32 0.2 +1.36 0.2 +1.4 0.2 +1.44 0.2 +1.48 0.2 +1.52 0.2 +1.56 0.2 +1.6 0.2 +1.64 0.2 +1.68 0.2 +1.72 0.2 +1.76 0.2 +1.8 0.2 +1.84 0.2 +1.88 0.2 +1.92 0.2 +1.96 0.2 +2 0.2 +2.04 0.2 +2.08 0.2 +2.12 0.2 +2.16 0.2 +2.2 0.2 +2.24 0.2 +2.28 0.2 +2.32 0.2 +2.36 0.2 +2.4 0.2 +0 0.24 +0.04 0.24 +0.08 0.24 +0.12 0.24 +0.16 0.24 +0.2 0.24 +0.24 0.24 +0.28 0.24 +0.32 0.24 +0.36 0.24 +0.4 0.24 +0.44 0.24 +0.48 0.24 +0.52 0.24 +0.56 0.24 +0.6 0.24 +0.64 0.24 +0.68 0.24 +0.72 0.24 +0.76 0.24 +0.8 0.24 +0.84 0.24 +0.88 0.24 +0.92 0.24 +0.96 0.24 +1 0.24 +1.04 0.24 +1.08 0.24 +1.12 0.24 +1.16 0.24 +1.2 0.24 +1.24 0.24 +1.28 0.24 +1.32 0.24 +1.36 0.24 +1.4 0.24 +1.44 0.24 +1.48 0.24 +1.52 0.24 +1.56 0.24 +1.6 0.24 +1.64 0.24 +1.68 0.24 +1.72 0.24 +1.76 0.24 +1.8 0.24 +1.84 0.24 +1.88 0.24 +1.92 0.24 +1.96 0.24 +2 0.24 +2.04 0.24 +2.08 0.24 +2.12 0.24 +2.16 0.24 +2.2 0.24 +2.24 0.24 +2.28 0.24 +2.32 0.24 +2.36 0.24 +2.4 0.24 +0 0.28 +0.04 0.28 +0.08 0.28 +0.12 0.28 +0.16 0.28 +0.2 0.28 +0.24 0.28 +0.28 0.28 +0.32 0.28 +0.36 0.28 +0.4 0.28 +0.44 0.28 +0.48 0.28 +0.52 0.28 +0.56 0.28 +0.6 0.28 +0.64 0.28 +0.68 0.28 +0.72 0.28 +0.76 0.28 +0.8 0.28 +0.84 0.28 +0.88 0.28 +0.92 0.28 +0.96 0.28 +1 0.28 +1.04 0.28 +1.08 0.28 +1.12 0.28 +1.16 0.28 +1.2 0.28 +1.24 0.28 +1.28 0.28 +1.32 0.28 +1.36 0.28 +1.4 0.28 +1.44 0.28 +1.48 0.28 +1.52 0.28 +1.56 0.28 +1.6 0.28 +1.64 0.28 +1.68 0.28 +1.72 0.28 +1.76 0.28 +1.8 0.28 +1.84 0.28 +1.88 0.28 +1.92 0.28 +1.96 0.28 +2 0.28 +2.04 0.28 +2.08 0.28 +2.12 0.28 +2.16 0.28 +2.2 0.28 +2.24 0.28 +2.28 0.28 +2.32 0.28 +2.36 0.28 +2.4 0.28 +0 0.32 +0.04 0.32 +0.08 0.32 +0.12 0.32 +0.16 0.32 +0.2 0.32 +0.24 0.32 +0.28 0.32 +0.32 0.32 +0.36 0.32 +0.4 0.32 +0.44 0.32 +0.48 0.32 +0.52 0.32 +0.56 0.32 +0.6 0.32 +0.64 0.32 +0.68 0.32 +0.72 0.32 +0.76 0.32 +0.8 0.32 +0.84 0.32 +0.88 0.32 +0.92 0.32 +0.96 0.32 +1 0.32 +1.04 0.32 +1.08 0.32 +1.12 0.32 +1.16 0.32 +1.2 0.32 +1.24 0.32 +1.28 0.32 +1.32 0.32 +1.36 0.32 +1.4 0.32 +1.44 0.32 +1.48 0.32 +1.52 0.32 +1.56 0.32 +1.6 0.32 +1.64 0.32 +1.68 0.32 +1.72 0.32 +1.76 0.32 +1.8 0.32 +1.84 0.32 +1.88 0.32 +1.92 0.32 +1.96 0.32 +2 0.32 +2.04 0.32 +2.08 0.32 +2.12 0.32 +2.16 0.32 +2.2 0.32 +2.24 0.32 +2.28 0.32 +2.32 0.32 +2.36 0.32 +2.4 0.32 +0 0.36 +0.04 0.36 +0.08 0.36 +0.12 0.36 +0.16 0.36 +0.2 0.36 +0.24 0.36 +0.28 0.36 +0.32 0.36 +0.36 0.36 +0.4 0.36 +0.44 0.36 +0.48 0.36 +0.52 0.36 +0.56 0.36 +0.6 0.36 +0.64 0.36 +0.68 0.36 +0.72 0.36 +0.76 0.36 +0.8 0.36 +0.84 0.36 +0.88 0.36 +0.92 0.36 +0.96 0.36 +1 0.36 +1.04 0.36 +1.08 0.36 +1.12 0.36 +1.16 0.36 +1.2 0.36 +1.24 0.36 +1.28 0.36 +1.32 0.36 +1.36 0.36 +1.4 0.36 +1.44 0.36 +1.48 0.36 +1.52 0.36 +1.56 0.36 +1.6 0.36 +1.64 0.36 +1.68 0.36 +1.72 0.36 +1.76 0.36 +1.8 0.36 +1.84 0.36 +1.88 0.36 +1.92 0.36 +1.96 0.36 +2 0.36 +2.04 0.36 +2.08 0.36 +2.12 0.36 +2.16 0.36 +2.2 0.36 +2.24 0.36 +2.28 0.36 +2.32 0.36 +2.36 0.36 +2.4 0.36 +0 0.4 +0.04 0.4 +0.08 0.4 +0.12 0.4 +0.16 0.4 +0.2 0.4 +0.24 0.4 +0.28 0.4 +0.32 0.4 +0.36 0.4 +0.4 0.4 +0.44 0.4 +0.48 0.4 +0.52 0.4 +0.56 0.4 +0.6 0.4 +0.64 0.4 +0.68 0.4 +0.72 0.4 +0.76 0.4 +0.8 0.4 +0.84 0.4 +0.88 0.4 +0.92 0.4 +0.96 0.4 +1 0.4 +1.04 0.4 +1.08 0.4 +1.12 0.4 +1.16 0.4 +1.2 0.4 +1.24 0.4 +1.28 0.4 +1.32 0.4 +1.36 0.4 +1.4 0.4 +1.44 0.4 +1.48 0.4 +1.52 0.4 +1.56 0.4 +1.6 0.4 +1.64 0.4 +1.68 0.4 +1.72 0.4 +1.76 0.4 +1.8 0.4 +1.84 0.4 +1.88 0.4 +1.92 0.4 +1.96 0.4 +2 0.4 +2.04 0.4 +2.08 0.4 +2.12 0.4 +2.16 0.4 +2.2 0.4 +2.24 0.4 +2.28 0.4 +2.32 0.4 +2.36 0.4 +2.4 0.4 +0.02 0.02 +0.06 0.02 +0.1 0.02 +0.14 0.02 +0.18 0.02 +0.22 0.02 +0.26 0.02 +0.3 0.02 +0.34 0.02 +0.38 0.02 +0.42 0.02 +0.46 0.02 +0.5 0.02 +0.54 0.02 +0.58 0.02 +0.62 0.02 +0.66 0.02 +0.7 0.02 +0.74 0.02 +0.78 0.02 +0.82 0.02 +0.86 0.02 +0.9 0.02 +0.94 0.02 +0.98 0.02 +1.02 0.02 +1.06 0.02 +1.1 0.02 +1.14 0.02 +1.18 0.02 +1.22 0.02 +1.26 0.02 +1.3 0.02 +1.34 0.02 +1.38 0.02 +1.42 0.02 +1.46 0.02 +1.5 0.02 +1.54 0.02 +1.58 0.02 +1.62 0.02 +1.66 0.02 +1.7 0.02 +1.74 0.02 +1.78 0.02 +1.82 0.02 +1.86 0.02 +1.9 0.02 +1.94 0.02 +1.98 0.02 +2.02 0.02 +2.06 0.02 +2.1 0.02 +2.14 0.02 +2.18 0.02 +2.22 0.02 +2.26 0.02 +2.3 0.02 +2.34 0.02 +2.38 0.02 +0.02 0.06 +0.06 0.06 +0.1 0.06 +0.14 0.06 +0.18 0.06 +0.22 0.06 +0.26 0.06 +0.3 0.06 +0.34 0.06 +0.38 0.06 +0.42 0.06 +0.46 0.06 +0.5 0.06 +0.54 0.06 +0.58 0.06 +0.62 0.06 +0.66 0.06 +0.7 0.06 +0.74 0.06 +0.78 0.06 +0.82 0.06 +0.86 0.06 +0.9 0.06 +0.94 0.06 +0.98 0.06 +1.02 0.06 +1.06 0.06 +1.1 0.06 +1.14 0.06 +1.18 0.06 +1.22 0.06 +1.26 0.06 +1.3 0.06 +1.34 0.06 +1.38 0.06 +1.42 0.06 +1.46 0.06 +1.5 0.06 +1.54 0.06 +1.58 0.06 +1.62 0.06 +1.66 0.06 +1.7 0.06 +1.74 0.06 +1.78 0.06 +1.82 0.06 +1.86 0.06 +1.9 0.06 +1.94 0.06 +1.98 0.06 +2.02 0.06 +2.06 0.06 +2.1 0.06 +2.14 0.06 +2.18 0.06 +2.22 0.06 +2.26 0.06 +2.3 0.06 +2.34 0.06 +2.38 0.06 +0.02 0.1 +0.06 0.1 +0.1 0.1 +0.14 0.1 +0.18 0.1 +0.22 0.1 +0.26 0.1 +0.3 0.1 +0.34 0.1 +0.38 0.1 +0.42 0.1 +0.46 0.1 +0.5 0.1 +0.54 0.1 +0.58 0.1 +0.62 0.1 +0.66 0.1 +0.7 0.1 +0.74 0.1 +0.78 0.1 +0.82 0.1 +0.86 0.1 +0.9 0.1 +0.94 0.1 +0.98 0.1 +1.02 0.1 +1.06 0.1 +1.1 0.1 +1.14 0.1 +1.18 0.1 +1.22 0.1 +1.26 0.1 +1.3 0.1 +1.34 0.1 +1.38 0.1 +1.42 0.1 +1.46 0.1 +1.5 0.1 +1.54 0.1 +1.58 0.1 +1.62 0.1 +1.66 0.1 +1.7 0.1 +1.74 0.1 +1.78 0.1 +1.82 0.1 +1.86 0.1 +1.9 0.1 +1.94 0.1 +1.98 0.1 +2.02 0.1 +2.06 0.1 +2.1 0.1 +2.14 0.1 +2.18 0.1 +2.22 0.1 +2.26 0.1 +2.3 0.1 +2.34 0.1 +2.38 0.1 +0.02 0.14 +0.06 0.14 +0.1 0.14 +0.14 0.14 +0.3 0.14 +0.34 0.14 +0.38 0.14 +0.42 0.14 +0.46 0.14 +0.5 0.14 +0.54 0.14 +0.58 0.14 +0.62 0.14 +0.66 0.14 +0.7 0.14 +0.74 0.14 +0.78 0.14 +0.82 0.14 +0.86 0.14 +0.9 0.14 +0.94 0.14 +0.98 0.14 +1.02 0.14 +1.06 0.14 +1.1 0.14 +1.14 0.14 +1.18 0.14 +1.22 0.14 +1.26 0.14 +1.3 0.14 +1.34 0.14 +1.38 0.14 +1.42 0.14 +1.46 0.14 +1.5 0.14 +1.54 0.14 +1.58 0.14 +1.62 0.14 +1.66 0.14 +1.7 0.14 +1.74 0.14 +1.78 0.14 +1.82 0.14 +1.86 0.14 +1.9 0.14 +1.94 0.14 +1.98 0.14 +2.02 0.14 +2.06 0.14 +2.1 0.14 +2.14 0.14 +2.18 0.14 +2.22 0.14 +2.26 0.14 +2.3 0.14 +2.34 0.14 +2.38 0.14 +0.02 0.18 +0.06 0.18 +0.1 0.18 +0.14 0.18 +0.66 0.18 +0.7 0.18 +0.74 0.18 +0.78 0.18 +0.82 0.18 +0.86 0.18 +0.9 0.18 +0.94 0.18 +0.98 0.18 +1.02 0.18 +1.06 0.18 +1.1 0.18 +1.14 0.18 +1.18 0.18 +1.22 0.18 +1.26 0.18 +1.3 0.18 +1.34 0.18 +1.38 0.18 +1.42 0.18 +1.46 0.18 +1.5 0.18 +1.54 0.18 +1.58 0.18 +1.62 0.18 +1.66 0.18 +1.7 0.18 +1.74 0.18 +1.78 0.18 +1.82 0.18 +1.86 0.18 +1.9 0.18 +1.94 0.18 +1.98 0.18 +2.02 0.18 +2.06 0.18 +2.1 0.18 +2.14 0.18 +2.18 0.18 +2.22 0.18 +2.26 0.18 +2.3 0.18 +2.34 0.18 +2.38 0.18 +0.02 0.22 +0.06 0.22 +0.1 0.22 +0.14 0.22 +0.3 0.22 +0.34 0.22 +0.38 0.22 +0.42 0.22 +0.46 0.22 +0.5 0.22 +0.54 0.22 +0.58 0.22 +0.62 0.22 +0.66 0.22 +0.7 0.22 +0.74 0.22 +0.78 0.22 +0.82 0.22 +0.86 0.22 +0.9 0.22 +0.94 0.22 +0.98 0.22 +1.02 0.22 +1.06 0.22 +1.1 0.22 +1.14 0.22 +1.18 0.22 +1.22 0.22 +1.26 0.22 +1.3 0.22 +1.34 0.22 +1.38 0.22 +1.42 0.22 +1.46 0.22 +1.5 0.22 +1.54 0.22 +1.58 0.22 +1.62 0.22 +1.66 0.22 +1.7 0.22 +1.74 0.22 +1.78 0.22 +1.82 0.22 +1.86 0.22 +1.9 0.22 +1.94 0.22 +1.98 0.22 +2.02 0.22 +2.06 0.22 +2.1 0.22 +2.14 0.22 +2.18 0.22 +2.22 0.22 +2.26 0.22 +2.3 0.22 +2.34 0.22 +2.38 0.22 +0.02 0.26 +0.06 0.26 +0.1 0.26 +0.14 0.26 +0.18 0.26 +0.22 0.26 +0.26 0.26 +0.3 0.26 +0.34 0.26 +0.38 0.26 +0.42 0.26 +0.46 0.26 +0.5 0.26 +0.54 0.26 +0.58 0.26 +0.62 0.26 +0.66 0.26 +0.7 0.26 +0.74 0.26 +0.78 0.26 +0.82 0.26 +0.86 0.26 +0.9 0.26 +0.94 0.26 +0.98 0.26 +1.02 0.26 +1.06 0.26 +1.1 0.26 +1.14 0.26 +1.18 0.26 +1.22 0.26 +1.26 0.26 +1.3 0.26 +1.34 0.26 +1.38 0.26 +1.42 0.26 +1.46 0.26 +1.5 0.26 +1.54 0.26 +1.58 0.26 +1.62 0.26 +1.66 0.26 +1.7 0.26 +1.74 0.26 +1.78 0.26 +1.82 0.26 +1.86 0.26 +1.9 0.26 +1.94 0.26 +1.98 0.26 +2.02 0.26 +2.06 0.26 +2.1 0.26 +2.14 0.26 +2.18 0.26 +2.22 0.26 +2.26 0.26 +2.3 0.26 +2.34 0.26 +2.38 0.26 +0.02 0.3 +0.06 0.3 +0.1 0.3 +0.14 0.3 +0.18 0.3 +0.22 0.3 +0.26 0.3 +0.3 0.3 +0.34 0.3 +0.38 0.3 +0.42 0.3 +0.46 0.3 +0.5 0.3 +0.54 0.3 +0.58 0.3 +0.62 0.3 +0.66 0.3 +0.7 0.3 +0.74 0.3 +0.78 0.3 +0.82 0.3 +0.86 0.3 +0.9 0.3 +0.94 0.3 +0.98 0.3 +1.02 0.3 +1.06 0.3 +1.1 0.3 +1.14 0.3 +1.18 0.3 +1.22 0.3 +1.26 0.3 +1.3 0.3 +1.34 0.3 +1.38 0.3 +1.42 0.3 +1.46 0.3 +1.5 0.3 +1.54 0.3 +1.58 0.3 +1.62 0.3 +1.66 0.3 +1.7 0.3 +1.74 0.3 +1.78 0.3 +1.82 0.3 +1.86 0.3 +1.9 0.3 +1.94 0.3 +1.98 0.3 +2.02 0.3 +2.06 0.3 +2.1 0.3 +2.14 0.3 +2.18 0.3 +2.22 0.3 +2.26 0.3 +2.3 0.3 +2.34 0.3 +2.38 0.3 +0.02 0.34 +0.06 0.34 +0.1 0.34 +0.14 0.34 +0.18 0.34 +0.22 0.34 +0.26 0.34 +0.3 0.34 +0.34 0.34 +0.38 0.34 +0.42 0.34 +0.46 0.34 +0.5 0.34 +0.54 0.34 +0.58 0.34 +0.62 0.34 +0.66 0.34 +0.7 0.34 +0.74 0.34 +0.78 0.34 +0.82 0.34 +0.86 0.34 +0.9 0.34 +0.94 0.34 +0.98 0.34 +1.02 0.34 +1.06 0.34 +1.1 0.34 +1.14 0.34 +1.18 0.34 +1.22 0.34 +1.26 0.34 +1.3 0.34 +1.34 0.34 +1.38 0.34 +1.42 0.34 +1.46 0.34 +1.5 0.34 +1.54 0.34 +1.58 0.34 +1.62 0.34 +1.66 0.34 +1.7 0.34 +1.74 0.34 +1.78 0.34 +1.82 0.34 +1.86 0.34 +1.9 0.34 +1.94 0.34 +1.98 0.34 +2.02 0.34 +2.06 0.34 +2.1 0.34 +2.14 0.34 +2.18 0.34 +2.22 0.34 +2.26 0.34 +2.3 0.34 +2.34 0.34 +2.38 0.34 +0.02 0.38 +0.06 0.38 +0.1 0.38 +0.14 0.38 +0.18 0.38 +0.22 0.38 +0.26 0.38 +0.3 0.38 +0.34 0.38 +0.38 0.38 +0.42 0.38 +0.46 0.38 +0.5 0.38 +0.54 0.38 +0.58 0.38 +0.62 0.38 +0.66 0.38 +0.7 0.38 +0.74 0.38 +0.78 0.38 +0.82 0.38 +0.86 0.38 +0.9 0.38 +0.94 0.38 +0.98 0.38 +1.02 0.38 +1.06 0.38 +1.1 0.38 +1.14 0.38 +1.18 0.38 +1.22 0.38 +1.26 0.38 +1.3 0.38 +1.34 0.38 +1.38 0.38 +1.42 0.38 +1.46 0.38 +1.5 0.38 +1.54 0.38 +1.58 0.38 +1.62 0.38 +1.66 0.38 +1.7 0.38 +1.74 0.38 +1.78 0.38 +1.82 0.38 +1.86 0.38 +1.9 0.38 +1.94 0.38 +1.98 0.38 +2.02 0.38 +2.06 0.38 +2.1 0.38 +2.14 0.38 +2.18 0.38 +2.22 0.38 +2.26 0.38 +2.3 0.38 +2.34 0.38 +2.38 0.38 + +element vertices: +0 1 667 +1 62 667 +62 61 667 +61 0 667 +1 2 668 +2 63 668 +63 62 668 +62 1 668 +2 3 669 +3 64 669 +64 63 669 +63 2 669 +3 4 670 +4 65 670 +65 64 670 +64 3 670 +4 5 671 +5 66 671 +66 65 671 +65 4 671 +5 6 672 +6 67 672 +67 66 672 +66 5 672 +6 7 673 +7 68 673 +68 67 673 +67 6 673 +7 8 674 +8 69 674 +69 68 674 +68 7 674 +8 9 675 +9 70 675 +70 69 675 +69 8 675 +9 10 676 +10 71 676 +71 70 676 +70 9 676 +10 11 677 +11 72 677 +72 71 677 +71 10 677 +11 12 678 +12 73 678 +73 72 678 +72 11 678 +12 13 679 +13 74 679 +74 73 679 +73 12 679 +13 14 680 +14 75 680 +75 74 680 +74 13 680 +14 15 681 +15 76 681 +76 75 681 +75 14 681 +15 16 682 +16 77 682 +77 76 682 +76 15 682 +16 17 683 +17 78 683 +78 77 683 +77 16 683 +17 18 684 +18 79 684 +79 78 684 +78 17 684 +18 19 685 +19 80 685 +80 79 685 +79 18 685 +19 20 686 +20 81 686 +81 80 686 +80 19 686 +20 21 687 +21 82 687 +82 81 687 +81 20 687 +21 22 688 +22 83 688 +83 82 688 +82 21 688 +22 23 689 +23 84 689 +84 83 689 +83 22 689 +23 24 690 +24 85 690 +85 84 690 +84 23 690 +24 25 691 +25 86 691 +86 85 691 +85 24 691 +25 26 692 +26 87 692 +87 86 692 +86 25 692 +26 27 693 +27 88 693 +88 87 693 +87 26 693 +27 28 694 +28 89 694 +89 88 694 +88 27 694 +28 29 695 +29 90 695 +90 89 695 +89 28 695 +29 30 696 +30 91 696 +91 90 696 +90 29 696 +30 31 697 +31 92 697 +92 91 697 +91 30 697 +31 32 698 +32 93 698 +93 92 698 +92 31 698 +32 33 699 +33 94 699 +94 93 699 +93 32 699 +33 34 700 +34 95 700 +95 94 700 +94 33 700 +34 35 701 +35 96 701 +96 95 701 +95 34 701 +35 36 702 +36 97 702 +97 96 702 +96 35 702 +36 37 703 +37 98 703 +98 97 703 +97 36 703 +37 38 704 +38 99 704 +99 98 704 +98 37 704 +38 39 705 +39 100 705 +100 99 705 +99 38 705 +39 40 706 +40 101 706 +101 100 706 +100 39 706 +40 41 707 +41 102 707 +102 101 707 +101 40 707 +41 42 708 +42 103 708 +103 102 708 +102 41 708 +42 43 709 +43 104 709 +104 103 709 +103 42 709 +43 44 710 +44 105 710 +105 104 710 +104 43 710 +44 45 711 +45 106 711 +106 105 711 +105 44 711 +45 46 712 +46 107 712 +107 106 712 +106 45 712 +46 47 713 +47 108 713 +108 107 713 +107 46 713 +47 48 714 +48 109 714 +109 108 714 +108 47 714 +48 49 715 +49 110 715 +110 109 715 +109 48 715 +49 50 716 +50 111 716 +111 110 716 +110 49 716 +50 51 717 +51 112 717 +112 111 717 +111 50 717 +51 52 718 +52 113 718 +113 112 718 +112 51 718 +52 53 719 +53 114 719 +114 113 719 +113 52 719 +53 54 720 +54 115 720 +115 114 720 +114 53 720 +54 55 721 +55 116 721 +116 115 721 +115 54 721 +55 56 722 +56 117 722 +117 116 722 +116 55 722 +56 57 723 +57 118 723 +118 117 723 +117 56 723 +57 58 724 +58 119 724 +119 118 724 +118 57 724 +58 59 725 +59 120 725 +120 119 725 +119 58 725 +59 60 726 +60 121 726 +121 120 726 +120 59 726 +61 62 727 +62 123 727 +123 122 727 +122 61 727 +62 63 728 +63 124 728 +124 123 728 +123 62 728 +63 64 729 +64 125 729 +125 124 729 +124 63 729 +64 65 730 +65 126 730 +126 125 730 +125 64 730 +65 66 731 +66 127 731 +127 126 731 +126 65 731 +66 67 732 +67 128 732 +128 127 732 +127 66 732 +67 68 733 +68 129 733 +129 128 733 +128 67 733 +68 69 734 +69 130 734 +130 129 734 +129 68 734 +69 70 735 +70 131 735 +131 130 735 +130 69 735 +70 71 736 +71 132 736 +132 131 736 +131 70 736 +71 72 737 +72 133 737 +133 132 737 +132 71 737 +72 73 738 +73 134 738 +134 133 738 +133 72 738 +73 74 739 +74 135 739 +135 134 739 +134 73 739 +74 75 740 +75 136 740 +136 135 740 +135 74 740 +75 76 741 +76 137 741 +137 136 741 +136 75 741 +76 77 742 +77 138 742 +138 137 742 +137 76 742 +77 78 743 +78 139 743 +139 138 743 +138 77 743 +78 79 744 +79 140 744 +140 139 744 +139 78 744 +79 80 745 +80 141 745 +141 140 745 +140 79 745 +80 81 746 +81 142 746 +142 141 746 +141 80 746 +81 82 747 +82 143 747 +143 142 747 +142 81 747 +82 83 748 +83 144 748 +144 143 748 +143 82 748 +83 84 749 +84 145 749 +145 144 749 +144 83 749 +84 85 750 +85 146 750 +146 145 750 +145 84 750 +85 86 751 +86 147 751 +147 146 751 +146 85 751 +86 87 752 +87 148 752 +148 147 752 +147 86 752 +87 88 753 +88 149 753 +149 148 753 +148 87 753 +88 89 754 +89 150 754 +150 149 754 +149 88 754 +89 90 755 +90 151 755 +151 150 755 +150 89 755 +90 91 756 +91 152 756 +152 151 756 +151 90 756 +91 92 757 +92 153 757 +153 152 757 +152 91 757 +92 93 758 +93 154 758 +154 153 758 +153 92 758 +93 94 759 +94 155 759 +155 154 759 +154 93 759 +94 95 760 +95 156 760 +156 155 760 +155 94 760 +95 96 761 +96 157 761 +157 156 761 +156 95 761 +96 97 762 +97 158 762 +158 157 762 +157 96 762 +97 98 763 +98 159 763 +159 158 763 +158 97 763 +98 99 764 +99 160 764 +160 159 764 +159 98 764 +99 100 765 +100 161 765 +161 160 765 +160 99 765 +100 101 766 +101 162 766 +162 161 766 +161 100 766 +101 102 767 +102 163 767 +163 162 767 +162 101 767 +102 103 768 +103 164 768 +164 163 768 +163 102 768 +103 104 769 +104 165 769 +165 164 769 +164 103 769 +104 105 770 +105 166 770 +166 165 770 +165 104 770 +105 106 771 +106 167 771 +167 166 771 +166 105 771 +106 107 772 +107 168 772 +168 167 772 +167 106 772 +107 108 773 +108 169 773 +169 168 773 +168 107 773 +108 109 774 +109 170 774 +170 169 774 +169 108 774 +109 110 775 +110 171 775 +171 170 775 +170 109 775 +110 111 776 +111 172 776 +172 171 776 +171 110 776 +111 112 777 +112 173 777 +173 172 777 +172 111 777 +112 113 778 +113 174 778 +174 173 778 +173 112 778 +113 114 779 +114 175 779 +175 174 779 +174 113 779 +114 115 780 +115 176 780 +176 175 780 +175 114 780 +115 116 781 +116 177 781 +177 176 781 +176 115 781 +116 117 782 +117 178 782 +178 177 782 +177 116 782 +117 118 783 +118 179 783 +179 178 783 +178 117 783 +118 119 784 +119 180 784 +180 179 784 +179 118 784 +119 120 785 +120 181 785 +181 180 785 +180 119 785 +120 121 786 +121 182 786 +182 181 786 +181 120 786 +122 123 787 +123 184 787 +184 183 787 +183 122 787 +123 124 788 +124 185 788 +185 184 788 +184 123 788 +124 125 789 +125 186 789 +186 185 789 +185 124 789 +125 126 790 +126 187 790 +187 186 790 +186 125 790 +126 127 791 +127 188 791 +188 187 791 +187 126 791 +127 128 792 +128 189 792 +189 188 792 +188 127 792 +128 129 793 +129 190 793 +190 189 793 +189 128 793 +129 130 794 +130 191 794 +191 190 794 +190 129 794 +130 131 795 +131 192 795 +192 191 795 +191 130 795 +131 132 796 +132 193 796 +193 192 796 +192 131 796 +132 133 797 +133 194 797 +194 193 797 +193 132 797 +133 134 798 +134 195 798 +195 194 798 +194 133 798 +134 135 799 +135 196 799 +196 195 799 +195 134 799 +135 136 800 +136 197 800 +197 196 800 +196 135 800 +136 137 801 +137 198 801 +198 197 801 +197 136 801 +137 138 802 +138 199 802 +199 198 802 +198 137 802 +138 139 803 +139 200 803 +200 199 803 +199 138 803 +139 140 804 +140 201 804 +201 200 804 +200 139 804 +140 141 805 +141 202 805 +202 201 805 +201 140 805 +141 142 806 +142 203 806 +203 202 806 +202 141 806 +142 143 807 +143 204 807 +204 203 807 +203 142 807 +143 144 808 +144 205 808 +205 204 808 +204 143 808 +144 145 809 +145 206 809 +206 205 809 +205 144 809 +145 146 810 +146 207 810 +207 206 810 +206 145 810 +146 147 811 +147 208 811 +208 207 811 +207 146 811 +147 148 812 +148 209 812 +209 208 812 +208 147 812 +148 149 813 +149 210 813 +210 209 813 +209 148 813 +149 150 814 +150 211 814 +211 210 814 +210 149 814 +150 151 815 +151 212 815 +212 211 815 +211 150 815 +151 152 816 +152 213 816 +213 212 816 +212 151 816 +152 153 817 +153 214 817 +214 213 817 +213 152 817 +153 154 818 +154 215 818 +215 214 818 +214 153 818 +154 155 819 +155 216 819 +216 215 819 +215 154 819 +155 156 820 +156 217 820 +217 216 820 +216 155 820 +156 157 821 +157 218 821 +218 217 821 +217 156 821 +157 158 822 +158 219 822 +219 218 822 +218 157 822 +158 159 823 +159 220 823 +220 219 823 +219 158 823 +159 160 824 +160 221 824 +221 220 824 +220 159 824 +160 161 825 +161 222 825 +222 221 825 +221 160 825 +161 162 826 +162 223 826 +223 222 826 +222 161 826 +162 163 827 +163 224 827 +224 223 827 +223 162 827 +163 164 828 +164 225 828 +225 224 828 +224 163 828 +164 165 829 +165 226 829 +226 225 829 +225 164 829 +165 166 830 +166 227 830 +227 226 830 +226 165 830 +166 167 831 +167 228 831 +228 227 831 +227 166 831 +167 168 832 +168 229 832 +229 228 832 +228 167 832 +168 169 833 +169 230 833 +230 229 833 +229 168 833 +169 170 834 +170 231 834 +231 230 834 +230 169 834 +170 171 835 +171 232 835 +232 231 835 +231 170 835 +171 172 836 +172 233 836 +233 232 836 +232 171 836 +172 173 837 +173 234 837 +234 233 837 +233 172 837 +173 174 838 +174 235 838 +235 234 838 +234 173 838 +174 175 839 +175 236 839 +236 235 839 +235 174 839 +175 176 840 +176 237 840 +237 236 840 +236 175 840 +176 177 841 +177 238 841 +238 237 841 +237 176 841 +177 178 842 +178 239 842 +239 238 842 +238 177 842 +178 179 843 +179 240 843 +240 239 843 +239 178 843 +179 180 844 +180 241 844 +241 240 844 +240 179 844 +180 181 845 +181 242 845 +242 241 845 +241 180 845 +181 182 846 +182 243 846 +243 242 846 +242 181 846 +183 184 847 +184 245 847 +245 244 847 +244 183 847 +184 185 848 +185 246 848 +246 245 848 +245 184 848 +185 186 849 +186 247 849 +247 246 849 +246 185 849 +186 187 850 +187 248 850 +248 247 850 +247 186 850 +190 191 851 +191 250 851 +250 249 851 +249 190 851 +191 192 852 +192 251 852 +251 250 852 +250 191 852 +192 193 853 +193 252 853 +252 251 853 +251 192 853 +193 194 854 +194 253 854 +253 252 854 +252 193 854 +194 195 855 +195 254 855 +254 253 855 +253 194 855 +195 196 856 +196 255 856 +255 254 856 +254 195 856 +196 197 857 +197 256 857 +256 255 857 +255 196 857 +197 198 858 +198 257 858 +257 256 858 +256 197 858 +198 199 859 +199 258 859 +258 257 859 +257 198 859 +199 200 860 +200 259 860 +259 258 860 +258 199 860 +200 201 861 +201 260 861 +260 259 861 +259 200 861 +201 202 862 +202 261 862 +261 260 862 +260 201 862 +202 203 863 +203 262 863 +262 261 863 +261 202 863 +203 204 864 +204 263 864 +263 262 864 +262 203 864 +204 205 865 +205 264 865 +264 263 865 +263 204 865 +205 206 866 +206 265 866 +265 264 866 +264 205 866 +206 207 867 +207 266 867 +266 265 867 +265 206 867 +207 208 868 +208 267 868 +267 266 868 +266 207 868 +208 209 869 +209 268 869 +268 267 869 +267 208 869 +209 210 870 +210 269 870 +269 268 870 +268 209 870 +210 211 871 +211 270 871 +270 269 871 +269 210 871 +211 212 872 +212 271 872 +271 270 872 +270 211 872 +212 213 873 +213 272 873 +272 271 873 +271 212 873 +213 214 874 +214 273 874 +273 272 874 +272 213 874 +214 215 875 +215 274 875 +274 273 875 +273 214 875 +215 216 876 +216 275 876 +275 274 876 +274 215 876 +216 217 877 +217 276 877 +276 275 877 +275 216 877 +217 218 878 +218 277 878 +277 276 878 +276 217 878 +218 219 879 +219 278 879 +278 277 879 +277 218 879 +219 220 880 +220 279 880 +279 278 880 +278 219 880 +220 221 881 +221 280 881 +280 279 881 +279 220 881 +221 222 882 +222 281 882 +281 280 882 +280 221 882 +222 223 883 +223 282 883 +282 281 883 +281 222 883 +223 224 884 +224 283 884 +283 282 884 +282 223 884 +224 225 885 +225 284 885 +284 283 885 +283 224 885 +225 226 886 +226 285 886 +285 284 886 +284 225 886 +226 227 887 +227 286 887 +286 285 887 +285 226 887 +227 228 888 +228 287 888 +287 286 888 +286 227 888 +228 229 889 +229 288 889 +288 287 889 +287 228 889 +229 230 890 +230 289 890 +289 288 890 +288 229 890 +230 231 891 +231 290 891 +290 289 891 +289 230 891 +231 232 892 +232 291 892 +291 290 892 +290 231 892 +232 233 893 +233 292 893 +292 291 893 +291 232 893 +233 234 894 +234 293 894 +293 292 894 +292 233 894 +234 235 895 +235 294 895 +294 293 895 +293 234 895 +235 236 896 +236 295 896 +295 294 896 +294 235 896 +236 237 897 +237 296 897 +296 295 897 +295 236 897 +237 238 898 +238 297 898 +297 296 898 +296 237 898 +238 239 899 +239 298 899 +298 297 899 +297 238 899 +239 240 900 +240 299 900 +299 298 900 +298 239 900 +240 241 901 +241 300 901 +300 299 901 +299 240 901 +241 242 902 +242 301 902 +301 300 902 +300 241 902 +242 243 903 +243 302 903 +302 301 903 +301 242 903 +244 245 904 +245 304 904 +304 303 904 +303 244 904 +245 246 905 +246 305 905 +305 304 905 +304 245 905 +246 247 906 +247 306 906 +306 305 906 +305 246 906 +247 248 907 +248 307 907 +307 306 907 +306 247 907 +258 259 908 +259 318 908 +318 317 908 +317 258 908 +259 260 909 +260 319 909 +319 318 909 +318 259 909 +260 261 910 +261 320 910 +320 319 910 +319 260 910 +261 262 911 +262 321 911 +321 320 911 +320 261 911 +262 263 912 +263 322 912 +322 321 912 +321 262 912 +263 264 913 +264 323 913 +323 322 913 +322 263 913 +264 265 914 +265 324 914 +324 323 914 +323 264 914 +265 266 915 +266 325 915 +325 324 915 +324 265 915 +266 267 916 +267 326 916 +326 325 916 +325 266 916 +267 268 917 +268 327 917 +327 326 917 +326 267 917 +268 269 918 +269 328 918 +328 327 918 +327 268 918 +269 270 919 +270 329 919 +329 328 919 +328 269 919 +270 271 920 +271 330 920 +330 329 920 +329 270 920 +271 272 921 +272 331 921 +331 330 921 +330 271 921 +272 273 922 +273 332 922 +332 331 922 +331 272 922 +273 274 923 +274 333 923 +333 332 923 +332 273 923 +274 275 924 +275 334 924 +334 333 924 +333 274 924 +275 276 925 +276 335 925 +335 334 925 +334 275 925 +276 277 926 +277 336 926 +336 335 926 +335 276 926 +277 278 927 +278 337 927 +337 336 927 +336 277 927 +278 279 928 +279 338 928 +338 337 928 +337 278 928 +279 280 929 +280 339 929 +339 338 929 +338 279 929 +280 281 930 +281 340 930 +340 339 930 +339 280 930 +281 282 931 +282 341 931 +341 340 931 +340 281 931 +282 283 932 +283 342 932 +342 341 932 +341 282 932 +283 284 933 +284 343 933 +343 342 933 +342 283 933 +284 285 934 +285 344 934 +344 343 934 +343 284 934 +285 286 935 +286 345 935 +345 344 935 +344 285 935 +286 287 936 +287 346 936 +346 345 936 +345 286 936 +287 288 937 +288 347 937 +347 346 937 +346 287 937 +288 289 938 +289 348 938 +348 347 938 +347 288 938 +289 290 939 +290 349 939 +349 348 939 +348 289 939 +290 291 940 +291 350 940 +350 349 940 +349 290 940 +291 292 941 +292 351 941 +351 350 941 +350 291 941 +292 293 942 +293 352 942 +352 351 942 +351 292 942 +293 294 943 +294 353 943 +353 352 943 +352 293 943 +294 295 944 +295 354 944 +354 353 944 +353 294 944 +295 296 945 +296 355 945 +355 354 945 +354 295 945 +296 297 946 +297 356 946 +356 355 946 +355 296 946 +297 298 947 +298 357 947 +357 356 947 +356 297 947 +298 299 948 +299 358 948 +358 357 948 +357 298 948 +299 300 949 +300 359 949 +359 358 949 +358 299 949 +300 301 950 +301 360 950 +360 359 950 +359 300 950 +301 302 951 +302 361 951 +361 360 951 +360 301 951 +303 304 952 +304 363 952 +363 362 952 +362 303 952 +304 305 953 +305 364 953 +364 363 953 +363 304 953 +305 306 954 +306 365 954 +365 364 954 +364 305 954 +306 307 955 +307 366 955 +366 365 955 +365 306 955 +308 309 956 +309 370 956 +370 369 956 +369 308 956 +309 310 957 +310 371 957 +371 370 957 +370 309 957 +310 311 958 +311 372 958 +372 371 958 +371 310 958 +311 312 959 +312 373 959 +373 372 959 +372 311 959 +312 313 960 +313 374 960 +374 373 960 +373 312 960 +313 314 961 +314 375 961 +375 374 961 +374 313 961 +314 315 962 +315 376 962 +376 375 962 +375 314 962 +315 316 963 +316 377 963 +377 376 963 +376 315 963 +316 317 964 +317 378 964 +378 377 964 +377 316 964 +317 318 965 +318 379 965 +379 378 965 +378 317 965 +318 319 966 +319 380 966 +380 379 966 +379 318 966 +319 320 967 +320 381 967 +381 380 967 +380 319 967 +320 321 968 +321 382 968 +382 381 968 +381 320 968 +321 322 969 +322 383 969 +383 382 969 +382 321 969 +322 323 970 +323 384 970 +384 383 970 +383 322 970 +323 324 971 +324 385 971 +385 384 971 +384 323 971 +324 325 972 +325 386 972 +386 385 972 +385 324 972 +325 326 973 +326 387 973 +387 386 973 +386 325 973 +326 327 974 +327 388 974 +388 387 974 +387 326 974 +327 328 975 +328 389 975 +389 388 975 +388 327 975 +328 329 976 +329 390 976 +390 389 976 +389 328 976 +329 330 977 +330 391 977 +391 390 977 +390 329 977 +330 331 978 +331 392 978 +392 391 978 +391 330 978 +331 332 979 +332 393 979 +393 392 979 +392 331 979 +332 333 980 +333 394 980 +394 393 980 +393 332 980 +333 334 981 +334 395 981 +395 394 981 +394 333 981 +334 335 982 +335 396 982 +396 395 982 +395 334 982 +335 336 983 +336 397 983 +397 396 983 +396 335 983 +336 337 984 +337 398 984 +398 397 984 +397 336 984 +337 338 985 +338 399 985 +399 398 985 +398 337 985 +338 339 986 +339 400 986 +400 399 986 +399 338 986 +339 340 987 +340 401 987 +401 400 987 +400 339 987 +340 341 988 +341 402 988 +402 401 988 +401 340 988 +341 342 989 +342 403 989 +403 402 989 +402 341 989 +342 343 990 +343 404 990 +404 403 990 +403 342 990 +343 344 991 +344 405 991 +405 404 991 +404 343 991 +344 345 992 +345 406 992 +406 405 992 +405 344 992 +345 346 993 +346 407 993 +407 406 993 +406 345 993 +346 347 994 +347 408 994 +408 407 994 +407 346 994 +347 348 995 +348 409 995 +409 408 995 +408 347 995 +348 349 996 +349 410 996 +410 409 996 +409 348 996 +349 350 997 +350 411 997 +411 410 997 +410 349 997 +350 351 998 +351 412 998 +412 411 998 +411 350 998 +351 352 999 +352 413 999 +413 412 999 +412 351 999 +352 353 1000 +353 414 1000 +414 413 1000 +413 352 1000 +353 354 1001 +354 415 1001 +415 414 1001 +414 353 1001 +354 355 1002 +355 416 1002 +416 415 1002 +415 354 1002 +355 356 1003 +356 417 1003 +417 416 1003 +416 355 1003 +356 357 1004 +357 418 1004 +418 417 1004 +417 356 1004 +357 358 1005 +358 419 1005 +419 418 1005 +418 357 1005 +358 359 1006 +359 420 1006 +420 419 1006 +419 358 1006 +359 360 1007 +360 421 1007 +421 420 1007 +420 359 1007 +360 361 1008 +361 422 1008 +422 421 1008 +421 360 1008 +362 363 1009 +363 424 1009 +424 423 1009 +423 362 1009 +363 364 1010 +364 425 1010 +425 424 1010 +424 363 1010 +364 365 1011 +365 426 1011 +426 425 1011 +425 364 1011 +365 366 1012 +366 427 1012 +427 426 1012 +426 365 1012 +366 367 1013 +367 428 1013 +428 427 1013 +427 366 1013 +367 368 1014 +368 429 1014 +429 428 1014 +428 367 1014 +368 369 1015 +369 430 1015 +430 429 1015 +429 368 1015 +369 370 1016 +370 431 1016 +431 430 1016 +430 369 1016 +370 371 1017 +371 432 1017 +432 431 1017 +431 370 1017 +371 372 1018 +372 433 1018 +433 432 1018 +432 371 1018 +372 373 1019 +373 434 1019 +434 433 1019 +433 372 1019 +373 374 1020 +374 435 1020 +435 434 1020 +434 373 1020 +374 375 1021 +375 436 1021 +436 435 1021 +435 374 1021 +375 376 1022 +376 437 1022 +437 436 1022 +436 375 1022 +376 377 1023 +377 438 1023 +438 437 1023 +437 376 1023 +377 378 1024 +378 439 1024 +439 438 1024 +438 377 1024 +378 379 1025 +379 440 1025 +440 439 1025 +439 378 1025 +379 380 1026 +380 441 1026 +441 440 1026 +440 379 1026 +380 381 1027 +381 442 1027 +442 441 1027 +441 380 1027 +381 382 1028 +382 443 1028 +443 442 1028 +442 381 1028 +382 383 1029 +383 444 1029 +444 443 1029 +443 382 1029 +383 384 1030 +384 445 1030 +445 444 1030 +444 383 1030 +384 385 1031 +385 446 1031 +446 445 1031 +445 384 1031 +385 386 1032 +386 447 1032 +447 446 1032 +446 385 1032 +386 387 1033 +387 448 1033 +448 447 1033 +447 386 1033 +387 388 1034 +388 449 1034 +449 448 1034 +448 387 1034 +388 389 1035 +389 450 1035 +450 449 1035 +449 388 1035 +389 390 1036 +390 451 1036 +451 450 1036 +450 389 1036 +390 391 1037 +391 452 1037 +452 451 1037 +451 390 1037 +391 392 1038 +392 453 1038 +453 452 1038 +452 391 1038 +392 393 1039 +393 454 1039 +454 453 1039 +453 392 1039 +393 394 1040 +394 455 1040 +455 454 1040 +454 393 1040 +394 395 1041 +395 456 1041 +456 455 1041 +455 394 1041 +395 396 1042 +396 457 1042 +457 456 1042 +456 395 1042 +396 397 1043 +397 458 1043 +458 457 1043 +457 396 1043 +397 398 1044 +398 459 1044 +459 458 1044 +458 397 1044 +398 399 1045 +399 460 1045 +460 459 1045 +459 398 1045 +399 400 1046 +400 461 1046 +461 460 1046 +460 399 1046 +400 401 1047 +401 462 1047 +462 461 1047 +461 400 1047 +401 402 1048 +402 463 1048 +463 462 1048 +462 401 1048 +402 403 1049 +403 464 1049 +464 463 1049 +463 402 1049 +403 404 1050 +404 465 1050 +465 464 1050 +464 403 1050 +404 405 1051 +405 466 1051 +466 465 1051 +465 404 1051 +405 406 1052 +406 467 1052 +467 466 1052 +466 405 1052 +406 407 1053 +407 468 1053 +468 467 1053 +467 406 1053 +407 408 1054 +408 469 1054 +469 468 1054 +468 407 1054 +408 409 1055 +409 470 1055 +470 469 1055 +469 408 1055 +409 410 1056 +410 471 1056 +471 470 1056 +470 409 1056 +410 411 1057 +411 472 1057 +472 471 1057 +471 410 1057 +411 412 1058 +412 473 1058 +473 472 1058 +472 411 1058 +412 413 1059 +413 474 1059 +474 473 1059 +473 412 1059 +413 414 1060 +414 475 1060 +475 474 1060 +474 413 1060 +414 415 1061 +415 476 1061 +476 475 1061 +475 414 1061 +415 416 1062 +416 477 1062 +477 476 1062 +476 415 1062 +416 417 1063 +417 478 1063 +478 477 1063 +477 416 1063 +417 418 1064 +418 479 1064 +479 478 1064 +478 417 1064 +418 419 1065 +419 480 1065 +480 479 1065 +479 418 1065 +419 420 1066 +420 481 1066 +481 480 1066 +480 419 1066 +420 421 1067 +421 482 1067 +482 481 1067 +481 420 1067 +421 422 1068 +422 483 1068 +483 482 1068 +482 421 1068 +423 424 1069 +424 485 1069 +485 484 1069 +484 423 1069 +424 425 1070 +425 486 1070 +486 485 1070 +485 424 1070 +425 426 1071 +426 487 1071 +487 486 1071 +486 425 1071 +426 427 1072 +427 488 1072 +488 487 1072 +487 426 1072 +427 428 1073 +428 489 1073 +489 488 1073 +488 427 1073 +428 429 1074 +429 490 1074 +490 489 1074 +489 428 1074 +429 430 1075 +430 491 1075 +491 490 1075 +490 429 1075 +430 431 1076 +431 492 1076 +492 491 1076 +491 430 1076 +431 432 1077 +432 493 1077 +493 492 1077 +492 431 1077 +432 433 1078 +433 494 1078 +494 493 1078 +493 432 1078 +433 434 1079 +434 495 1079 +495 494 1079 +494 433 1079 +434 435 1080 +435 496 1080 +496 495 1080 +495 434 1080 +435 436 1081 +436 497 1081 +497 496 1081 +496 435 1081 +436 437 1082 +437 498 1082 +498 497 1082 +497 436 1082 +437 438 1083 +438 499 1083 +499 498 1083 +498 437 1083 +438 439 1084 +439 500 1084 +500 499 1084 +499 438 1084 +439 440 1085 +440 501 1085 +501 500 1085 +500 439 1085 +440 441 1086 +441 502 1086 +502 501 1086 +501 440 1086 +441 442 1087 +442 503 1087 +503 502 1087 +502 441 1087 +442 443 1088 +443 504 1088 +504 503 1088 +503 442 1088 +443 444 1089 +444 505 1089 +505 504 1089 +504 443 1089 +444 445 1090 +445 506 1090 +506 505 1090 +505 444 1090 +445 446 1091 +446 507 1091 +507 506 1091 +506 445 1091 +446 447 1092 +447 508 1092 +508 507 1092 +507 446 1092 +447 448 1093 +448 509 1093 +509 508 1093 +508 447 1093 +448 449 1094 +449 510 1094 +510 509 1094 +509 448 1094 +449 450 1095 +450 511 1095 +511 510 1095 +510 449 1095 +450 451 1096 +451 512 1096 +512 511 1096 +511 450 1096 +451 452 1097 +452 513 1097 +513 512 1097 +512 451 1097 +452 453 1098 +453 514 1098 +514 513 1098 +513 452 1098 +453 454 1099 +454 515 1099 +515 514 1099 +514 453 1099 +454 455 1100 +455 516 1100 +516 515 1100 +515 454 1100 +455 456 1101 +456 517 1101 +517 516 1101 +516 455 1101 +456 457 1102 +457 518 1102 +518 517 1102 +517 456 1102 +457 458 1103 +458 519 1103 +519 518 1103 +518 457 1103 +458 459 1104 +459 520 1104 +520 519 1104 +519 458 1104 +459 460 1105 +460 521 1105 +521 520 1105 +520 459 1105 +460 461 1106 +461 522 1106 +522 521 1106 +521 460 1106 +461 462 1107 +462 523 1107 +523 522 1107 +522 461 1107 +462 463 1108 +463 524 1108 +524 523 1108 +523 462 1108 +463 464 1109 +464 525 1109 +525 524 1109 +524 463 1109 +464 465 1110 +465 526 1110 +526 525 1110 +525 464 1110 +465 466 1111 +466 527 1111 +527 526 1111 +526 465 1111 +466 467 1112 +467 528 1112 +528 527 1112 +527 466 1112 +467 468 1113 +468 529 1113 +529 528 1113 +528 467 1113 +468 469 1114 +469 530 1114 +530 529 1114 +529 468 1114 +469 470 1115 +470 531 1115 +531 530 1115 +530 469 1115 +470 471 1116 +471 532 1116 +532 531 1116 +531 470 1116 +471 472 1117 +472 533 1117 +533 532 1117 +532 471 1117 +472 473 1118 +473 534 1118 +534 533 1118 +533 472 1118 +473 474 1119 +474 535 1119 +535 534 1119 +534 473 1119 +474 475 1120 +475 536 1120 +536 535 1120 +535 474 1120 +475 476 1121 +476 537 1121 +537 536 1121 +536 475 1121 +476 477 1122 +477 538 1122 +538 537 1122 +537 476 1122 +477 478 1123 +478 539 1123 +539 538 1123 +538 477 1123 +478 479 1124 +479 540 1124 +540 539 1124 +539 478 1124 +479 480 1125 +480 541 1125 +541 540 1125 +540 479 1125 +480 481 1126 +481 542 1126 +542 541 1126 +541 480 1126 +481 482 1127 +482 543 1127 +543 542 1127 +542 481 1127 +482 483 1128 +483 544 1128 +544 543 1128 +543 482 1128 +484 485 1129 +485 546 1129 +546 545 1129 +545 484 1129 +485 486 1130 +486 547 1130 +547 546 1130 +546 485 1130 +486 487 1131 +487 548 1131 +548 547 1131 +547 486 1131 +487 488 1132 +488 549 1132 +549 548 1132 +548 487 1132 +488 489 1133 +489 550 1133 +550 549 1133 +549 488 1133 +489 490 1134 +490 551 1134 +551 550 1134 +550 489 1134 +490 491 1135 +491 552 1135 +552 551 1135 +551 490 1135 +491 492 1136 +492 553 1136 +553 552 1136 +552 491 1136 +492 493 1137 +493 554 1137 +554 553 1137 +553 492 1137 +493 494 1138 +494 555 1138 +555 554 1138 +554 493 1138 +494 495 1139 +495 556 1139 +556 555 1139 +555 494 1139 +495 496 1140 +496 557 1140 +557 556 1140 +556 495 1140 +496 497 1141 +497 558 1141 +558 557 1141 +557 496 1141 +497 498 1142 +498 559 1142 +559 558 1142 +558 497 1142 +498 499 1143 +499 560 1143 +560 559 1143 +559 498 1143 +499 500 1144 +500 561 1144 +561 560 1144 +560 499 1144 +500 501 1145 +501 562 1145 +562 561 1145 +561 500 1145 +501 502 1146 +502 563 1146 +563 562 1146 +562 501 1146 +502 503 1147 +503 564 1147 +564 563 1147 +563 502 1147 +503 504 1148 +504 565 1148 +565 564 1148 +564 503 1148 +504 505 1149 +505 566 1149 +566 565 1149 +565 504 1149 +505 506 1150 +506 567 1150 +567 566 1150 +566 505 1150 +506 507 1151 +507 568 1151 +568 567 1151 +567 506 1151 +507 508 1152 +508 569 1152 +569 568 1152 +568 507 1152 +508 509 1153 +509 570 1153 +570 569 1153 +569 508 1153 +509 510 1154 +510 571 1154 +571 570 1154 +570 509 1154 +510 511 1155 +511 572 1155 +572 571 1155 +571 510 1155 +511 512 1156 +512 573 1156 +573 572 1156 +572 511 1156 +512 513 1157 +513 574 1157 +574 573 1157 +573 512 1157 +513 514 1158 +514 575 1158 +575 574 1158 +574 513 1158 +514 515 1159 +515 576 1159 +576 575 1159 +575 514 1159 +515 516 1160 +516 577 1160 +577 576 1160 +576 515 1160 +516 517 1161 +517 578 1161 +578 577 1161 +577 516 1161 +517 518 1162 +518 579 1162 +579 578 1162 +578 517 1162 +518 519 1163 +519 580 1163 +580 579 1163 +579 518 1163 +519 520 1164 +520 581 1164 +581 580 1164 +580 519 1164 +520 521 1165 +521 582 1165 +582 581 1165 +581 520 1165 +521 522 1166 +522 583 1166 +583 582 1166 +582 521 1166 +522 523 1167 +523 584 1167 +584 583 1167 +583 522 1167 +523 524 1168 +524 585 1168 +585 584 1168 +584 523 1168 +524 525 1169 +525 586 1169 +586 585 1169 +585 524 1169 +525 526 1170 +526 587 1170 +587 586 1170 +586 525 1170 +526 527 1171 +527 588 1171 +588 587 1171 +587 526 1171 +527 528 1172 +528 589 1172 +589 588 1172 +588 527 1172 +528 529 1173 +529 590 1173 +590 589 1173 +589 528 1173 +529 530 1174 +530 591 1174 +591 590 1174 +590 529 1174 +530 531 1175 +531 592 1175 +592 591 1175 +591 530 1175 +531 532 1176 +532 593 1176 +593 592 1176 +592 531 1176 +532 533 1177 +533 594 1177 +594 593 1177 +593 532 1177 +533 534 1178 +534 595 1178 +595 594 1178 +594 533 1178 +534 535 1179 +535 596 1179 +596 595 1179 +595 534 1179 +535 536 1180 +536 597 1180 +597 596 1180 +596 535 1180 +536 537 1181 +537 598 1181 +598 597 1181 +597 536 1181 +537 538 1182 +538 599 1182 +599 598 1182 +598 537 1182 +538 539 1183 +539 600 1183 +600 599 1183 +599 538 1183 +539 540 1184 +540 601 1184 +601 600 1184 +600 539 1184 +540 541 1185 +541 602 1185 +602 601 1185 +601 540 1185 +541 542 1186 +542 603 1186 +603 602 1186 +602 541 1186 +542 543 1187 +543 604 1187 +604 603 1187 +603 542 1187 +543 544 1188 +544 605 1188 +605 604 1188 +604 543 1188 +545 546 1189 +546 607 1189 +607 606 1189 +606 545 1189 +546 547 1190 +547 608 1190 +608 607 1190 +607 546 1190 +547 548 1191 +548 609 1191 +609 608 1191 +608 547 1191 +548 549 1192 +549 610 1192 +610 609 1192 +609 548 1192 +549 550 1193 +550 611 1193 +611 610 1193 +610 549 1193 +550 551 1194 +551 612 1194 +612 611 1194 +611 550 1194 +551 552 1195 +552 613 1195 +613 612 1195 +612 551 1195 +552 553 1196 +553 614 1196 +614 613 1196 +613 552 1196 +553 554 1197 +554 615 1197 +615 614 1197 +614 553 1197 +554 555 1198 +555 616 1198 +616 615 1198 +615 554 1198 +555 556 1199 +556 617 1199 +617 616 1199 +616 555 1199 +556 557 1200 +557 618 1200 +618 617 1200 +617 556 1200 +557 558 1201 +558 619 1201 +619 618 1201 +618 557 1201 +558 559 1202 +559 620 1202 +620 619 1202 +619 558 1202 +559 560 1203 +560 621 1203 +621 620 1203 +620 559 1203 +560 561 1204 +561 622 1204 +622 621 1204 +621 560 1204 +561 562 1205 +562 623 1205 +623 622 1205 +622 561 1205 +562 563 1206 +563 624 1206 +624 623 1206 +623 562 1206 +563 564 1207 +564 625 1207 +625 624 1207 +624 563 1207 +564 565 1208 +565 626 1208 +626 625 1208 +625 564 1208 +565 566 1209 +566 627 1209 +627 626 1209 +626 565 1209 +566 567 1210 +567 628 1210 +628 627 1210 +627 566 1210 +567 568 1211 +568 629 1211 +629 628 1211 +628 567 1211 +568 569 1212 +569 630 1212 +630 629 1212 +629 568 1212 +569 570 1213 +570 631 1213 +631 630 1213 +630 569 1213 +570 571 1214 +571 632 1214 +632 631 1214 +631 570 1214 +571 572 1215 +572 633 1215 +633 632 1215 +632 571 1215 +572 573 1216 +573 634 1216 +634 633 1216 +633 572 1216 +573 574 1217 +574 635 1217 +635 634 1217 +634 573 1217 +574 575 1218 +575 636 1218 +636 635 1218 +635 574 1218 +575 576 1219 +576 637 1219 +637 636 1219 +636 575 1219 +576 577 1220 +577 638 1220 +638 637 1220 +637 576 1220 +577 578 1221 +578 639 1221 +639 638 1221 +638 577 1221 +578 579 1222 +579 640 1222 +640 639 1222 +639 578 1222 +579 580 1223 +580 641 1223 +641 640 1223 +640 579 1223 +580 581 1224 +581 642 1224 +642 641 1224 +641 580 1224 +581 582 1225 +582 643 1225 +643 642 1225 +642 581 1225 +582 583 1226 +583 644 1226 +644 643 1226 +643 582 1226 +583 584 1227 +584 645 1227 +645 644 1227 +644 583 1227 +584 585 1228 +585 646 1228 +646 645 1228 +645 584 1228 +585 586 1229 +586 647 1229 +647 646 1229 +646 585 1229 +586 587 1230 +587 648 1230 +648 647 1230 +647 586 1230 +587 588 1231 +588 649 1231 +649 648 1231 +648 587 1231 +588 589 1232 +589 650 1232 +650 649 1232 +649 588 1232 +589 590 1233 +590 651 1233 +651 650 1233 +650 589 1233 +590 591 1234 +591 652 1234 +652 651 1234 +651 590 1234 +591 592 1235 +592 653 1235 +653 652 1235 +652 591 1235 +592 593 1236 +593 654 1236 +654 653 1236 +653 592 1236 +593 594 1237 +594 655 1237 +655 654 1237 +654 593 1237 +594 595 1238 +595 656 1238 +656 655 1238 +655 594 1238 +595 596 1239 +596 657 1239 +657 656 1239 +656 595 1239 +596 597 1240 +597 658 1240 +658 657 1240 +657 596 1240 +597 598 1241 +598 659 1241 +659 658 1241 +658 597 1241 +598 599 1242 +599 660 1242 +660 659 1242 +659 598 1242 +599 600 1243 +600 661 1243 +661 660 1243 +660 599 1243 +600 601 1244 +601 662 1244 +662 661 1244 +661 600 1244 +601 602 1245 +602 663 1245 +663 662 1245 +662 601 1245 +602 603 1246 +603 664 1246 +664 663 1246 +663 602 1246 +603 604 1247 +604 665 1247 +665 664 1247 +664 603 1247 +604 605 1248 +605 666 1248 +666 665 1248 +665 604 1248 + +element boundaries: +0 0 4 +0 0 0 +0 0 0 +0 0 2 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 0 +0 0 0 +0 0 0 +0 0 4 +0 0 3 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 2 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 3 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 2 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 10 +0 0 0 +0 0 0 +0 0 0 +0 0 10 +0 0 0 +0 0 0 +0 0 0 +0 0 10 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 3 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 2 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 10 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 1 +0 0 10 +0 0 0 +0 0 0 +0 0 1 +0 0 0 +0 0 0 +0 0 0 +0 0 1 +0 0 0 +0 0 0 +0 0 0 +0 0 1 +0 0 0 +0 0 0 +0 0 0 +0 0 1 +0 0 0 +0 0 0 +0 0 0 +0 0 1 +0 0 0 +0 0 0 +0 0 0 +0 0 1 +0 0 0 +0 0 0 +0 0 0 +0 0 1 +0 0 0 +0 0 0 +0 0 0 +0 0 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 3 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 2 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 10 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 3 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 2 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 10 +0 0 0 +0 0 0 +0 0 1 +0 0 0 +0 0 0 +0 0 10 +0 0 1 +0 0 0 +0 0 0 +0 0 0 +0 0 1 +0 0 0 +0 0 0 +0 0 0 +0 0 1 +0 0 0 +0 0 0 +0 0 0 +0 0 1 +0 0 0 +0 0 0 +0 0 0 +0 0 1 +0 0 0 +0 0 0 +0 0 0 +0 0 1 +0 0 0 +0 0 0 +0 0 0 +0 0 1 +0 0 0 +0 0 0 +0 0 0 +0 0 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 3 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 2 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 10 +0 0 0 +0 0 0 +0 0 0 +0 0 10 +0 0 0 +0 0 0 +0 0 0 +0 0 10 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 3 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 2 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 3 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 2 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 3 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 2 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 0 +0 0 5 +0 0 0 +0 0 0 +0 0 3 +0 0 5 +0 0 0 + +element neighbours: +1 3 -1 +2 0 7 +3 1 240 +0 2 -1 +5 7 -1 +6 4 11 +7 5 244 +4 6 1 +9 11 -1 +10 8 15 +11 9 248 +8 10 5 +13 15 -1 +14 12 19 +15 13 252 +12 14 9 +17 19 -1 +18 16 23 +19 17 256 +16 18 13 +21 23 -1 +22 20 27 +23 21 260 +20 22 17 +25 27 -1 +26 24 31 +27 25 264 +24 26 21 +29 31 -1 +30 28 35 +31 29 268 +28 30 25 +33 35 -1 +34 32 39 +35 33 272 +32 34 29 +37 39 -1 +38 36 43 +39 37 276 +36 38 33 +41 43 -1 +42 40 47 +43 41 280 +40 42 37 +45 47 -1 +46 44 51 +47 45 284 +44 46 41 +49 51 -1 +50 48 55 +51 49 288 +48 50 45 +53 55 -1 +54 52 59 +55 53 292 +52 54 49 +57 59 -1 +58 56 63 +59 57 296 +56 58 53 +61 63 -1 +62 60 67 +63 61 300 +60 62 57 +65 67 -1 +66 64 71 +67 65 304 +64 66 61 +69 71 -1 +70 68 75 +71 69 308 +68 70 65 +73 75 -1 +74 72 79 +75 73 312 +72 74 69 +77 79 -1 +78 76 83 +79 77 316 +76 78 73 +81 83 -1 +82 80 87 +83 81 320 +80 82 77 +85 87 -1 +86 84 91 +87 85 324 +84 86 81 +89 91 -1 +90 88 95 +91 89 328 +88 90 85 +93 95 -1 +94 92 99 +95 93 332 +92 94 89 +97 99 -1 +98 96 103 +99 97 336 +96 98 93 +101 103 -1 +102 100 107 +103 101 340 +100 102 97 +105 107 -1 +106 104 111 +107 105 344 +104 106 101 +109 111 -1 +110 108 115 +111 109 348 +108 110 105 +113 115 -1 +114 112 119 +115 113 352 +112 114 109 +117 119 -1 +118 116 123 +119 117 356 +116 118 113 +121 123 -1 +122 120 127 +123 121 360 +120 122 117 +125 127 -1 +126 124 131 +127 125 364 +124 126 121 +129 131 -1 +130 128 135 +131 129 368 +128 130 125 +133 135 -1 +134 132 139 +135 133 372 +132 134 129 +137 139 -1 +138 136 143 +139 137 376 +136 138 133 +141 143 -1 +142 140 147 +143 141 380 +140 142 137 +145 147 -1 +146 144 151 +147 145 384 +144 146 141 +149 151 -1 +150 148 155 +151 149 388 +148 150 145 +153 155 -1 +154 152 159 +155 153 392 +152 154 149 +157 159 -1 +158 156 163 +159 157 396 +156 158 153 +161 163 -1 +162 160 167 +163 161 400 +160 162 157 +165 167 -1 +166 164 171 +167 165 404 +164 166 161 +169 171 -1 +170 168 175 +171 169 408 +168 170 165 +173 175 -1 +174 172 179 +175 173 412 +172 174 169 +177 179 -1 +178 176 183 +179 177 416 +176 178 173 +181 183 -1 +182 180 187 +183 181 420 +180 182 177 +185 187 -1 +186 184 191 +187 185 424 +184 186 181 +189 191 -1 +190 188 195 +191 189 428 +188 190 185 +193 195 -1 +194 192 199 +195 193 432 +192 194 189 +197 199 -1 +198 196 203 +199 197 436 +196 198 193 +201 203 -1 +202 200 207 +203 201 440 +200 202 197 +205 207 -1 +206 204 211 +207 205 444 +204 206 201 +209 211 -1 +210 208 215 +211 209 448 +208 210 205 +213 215 -1 +214 212 219 +215 213 452 +212 214 209 +217 219 -1 +218 216 223 +219 217 456 +216 218 213 +221 223 -1 +222 220 227 +223 221 460 +220 222 217 +225 227 -1 +226 224 231 +227 225 464 +224 226 221 +229 231 -1 +230 228 235 +231 229 468 +228 230 225 +233 235 -1 +234 232 239 +235 233 472 +232 234 229 +237 239 -1 +238 236 -1 +239 237 476 +236 238 233 +241 243 2 +242 240 247 +243 241 480 +240 242 -1 +245 247 6 +246 244 251 +247 245 484 +244 246 241 +249 251 10 +250 248 255 +251 249 488 +248 250 245 +253 255 14 +254 252 259 +255 253 492 +252 254 249 +257 259 18 +258 256 263 +259 257 496 +256 258 253 +261 263 22 +262 260 267 +263 261 500 +260 262 257 +265 267 26 +266 264 271 +267 265 504 +264 266 261 +269 271 30 +270 268 275 +271 269 508 +268 270 265 +273 275 34 +274 272 279 +275 273 512 +272 274 269 +277 279 38 +278 276 283 +279 277 516 +276 278 273 +281 283 42 +282 280 287 +283 281 520 +280 282 277 +285 287 46 +286 284 291 +287 285 524 +284 286 281 +289 291 50 +290 288 295 +291 289 528 +288 290 285 +293 295 54 +294 292 299 +295 293 532 +292 294 289 +297 299 58 +298 296 303 +299 297 536 +296 298 293 +301 303 62 +302 300 307 +303 301 540 +300 302 297 +305 307 66 +306 304 311 +307 305 544 +304 306 301 +309 311 70 +310 308 315 +311 309 548 +308 310 305 +313 315 74 +314 312 319 +315 313 552 +312 314 309 +317 319 78 +318 316 323 +319 317 556 +316 318 313 +321 323 82 +322 320 327 +323 321 560 +320 322 317 +325 327 86 +326 324 331 +327 325 564 +324 326 321 +329 331 90 +330 328 335 +331 329 568 +328 330 325 +333 335 94 +334 332 339 +335 333 572 +332 334 329 +337 339 98 +338 336 343 +339 337 576 +336 338 333 +341 343 102 +342 340 347 +343 341 580 +340 342 337 +345 347 106 +346 344 351 +347 345 584 +344 346 341 +349 351 110 +350 348 355 +351 349 588 +348 350 345 +353 355 114 +354 352 359 +355 353 592 +352 354 349 +357 359 118 +358 356 363 +359 357 596 +356 358 353 +361 363 122 +362 360 367 +363 361 600 +360 362 357 +365 367 126 +366 364 371 +367 365 604 +364 366 361 +369 371 130 +370 368 375 +371 369 608 +368 370 365 +373 375 134 +374 372 379 +375 373 612 +372 374 369 +377 379 138 +378 376 383 +379 377 616 +376 378 373 +381 383 142 +382 380 387 +383 381 620 +380 382 377 +385 387 146 +386 384 391 +387 385 624 +384 386 381 +389 391 150 +390 388 395 +391 389 628 +388 390 385 +393 395 154 +394 392 399 +395 393 632 +392 394 389 +397 399 158 +398 396 403 +399 397 636 +396 398 393 +401 403 162 +402 400 407 +403 401 640 +400 402 397 +405 407 166 +406 404 411 +407 405 644 +404 406 401 +409 411 170 +410 408 415 +411 409 648 +408 410 405 +413 415 174 +414 412 419 +415 413 652 +412 414 409 +417 419 178 +418 416 423 +419 417 656 +416 418 413 +421 423 182 +422 420 427 +423 421 660 +420 422 417 +425 427 186 +426 424 431 +427 425 664 +424 426 421 +429 431 190 +430 428 435 +431 429 668 +428 430 425 +433 435 194 +434 432 439 +435 433 672 +432 434 429 +437 439 198 +438 436 443 +439 437 676 +436 438 433 +441 443 202 +442 440 447 +443 441 680 +440 442 437 +445 447 206 +446 444 451 +447 445 684 +444 446 441 +449 451 210 +450 448 455 +451 449 688 +448 450 445 +453 455 214 +454 452 459 +455 453 692 +452 454 449 +457 459 218 +458 456 463 +459 457 696 +456 458 453 +461 463 222 +462 460 467 +463 461 700 +460 462 457 +465 467 226 +466 464 471 +467 465 704 +464 466 461 +469 471 230 +470 468 475 +471 469 708 +468 470 465 +473 475 234 +474 472 479 +475 473 712 +472 474 469 +477 479 238 +478 476 -1 +479 477 716 +476 478 473 +481 483 242 +482 480 487 +483 481 720 +480 482 -1 +485 487 246 +486 484 491 +487 485 724 +484 486 481 +489 491 250 +490 488 495 +491 489 728 +488 490 485 +493 495 254 +494 492 499 +495 493 732 +492 494 489 +497 499 258 +498 496 503 +499 497 -1 +496 498 493 +501 503 262 +502 500 507 +503 501 -1 +500 502 497 +505 507 266 +506 504 511 +507 505 -1 +504 506 501 +509 511 270 +510 508 515 +511 509 736 +508 510 505 +513 515 274 +514 512 519 +515 513 740 +512 514 509 +517 519 278 +518 516 523 +519 517 744 +516 518 513 +521 523 282 +522 520 527 +523 521 748 +520 522 517 +525 527 286 +526 524 531 +527 525 752 +524 526 521 +529 531 290 +530 528 535 +531 529 756 +528 530 525 +533 535 294 +534 532 539 +535 533 760 +532 534 529 +537 539 298 +538 536 543 +539 537 764 +536 538 533 +541 543 302 +542 540 547 +543 541 768 +540 542 537 +545 547 306 +546 544 551 +547 545 772 +544 546 541 +549 551 310 +550 548 555 +551 549 776 +548 550 545 +553 555 314 +554 552 559 +555 553 780 +552 554 549 +557 559 318 +558 556 563 +559 557 784 +556 558 553 +561 563 322 +562 560 567 +563 561 788 +560 562 557 +565 567 326 +566 564 571 +567 565 792 +564 566 561 +569 571 330 +570 568 575 +571 569 796 +568 570 565 +573 575 334 +574 572 579 +575 573 800 +572 574 569 +577 579 338 +578 576 583 +579 577 804 +576 578 573 +581 583 342 +582 580 587 +583 581 808 +580 582 577 +585 587 346 +586 584 591 +587 585 812 +584 586 581 +589 591 350 +590 588 595 +591 589 816 +588 590 585 +593 595 354 +594 592 599 +595 593 820 +592 594 589 +597 599 358 +598 596 603 +599 597 824 +596 598 593 +601 603 362 +602 600 607 +603 601 828 +600 602 597 +605 607 366 +606 604 611 +607 605 832 +604 606 601 +609 611 370 +610 608 615 +611 609 836 +608 610 605 +613 615 374 +614 612 619 +615 613 840 +612 614 609 +617 619 378 +618 616 623 +619 617 844 +616 618 613 +621 623 382 +622 620 627 +623 621 848 +620 622 617 +625 627 386 +626 624 631 +627 625 852 +624 626 621 +629 631 390 +630 628 635 +631 629 856 +628 630 625 +633 635 394 +634 632 639 +635 633 860 +632 634 629 +637 639 398 +638 636 643 +639 637 864 +636 638 633 +641 643 402 +642 640 647 +643 641 868 +640 642 637 +645 647 406 +646 644 651 +647 645 872 +644 646 641 +649 651 410 +650 648 655 +651 649 876 +648 650 645 +653 655 414 +654 652 659 +655 653 880 +652 654 649 +657 659 418 +658 656 663 +659 657 884 +656 658 653 +661 663 422 +662 660 667 +663 661 888 +660 662 657 +665 667 426 +666 664 671 +667 665 892 +664 666 661 +669 671 430 +670 668 675 +671 669 896 +668 670 665 +673 675 434 +674 672 679 +675 673 900 +672 674 669 +677 679 438 +678 676 683 +679 677 904 +676 678 673 +681 683 442 +682 680 687 +683 681 908 +680 682 677 +685 687 446 +686 684 691 +687 685 912 +684 686 681 +689 691 450 +690 688 695 +691 689 916 +688 690 685 +693 695 454 +694 692 699 +695 693 920 +692 694 689 +697 699 458 +698 696 703 +699 697 924 +696 698 693 +701 703 462 +702 700 707 +703 701 928 +700 702 697 +705 707 466 +706 704 711 +707 705 932 +704 706 701 +709 711 470 +710 708 715 +711 709 936 +708 710 705 +713 715 474 +714 712 719 +715 713 940 +712 714 709 +717 719 478 +718 716 -1 +719 717 944 +716 718 713 +721 723 482 +722 720 727 +723 721 948 +720 722 -1 +725 727 486 +726 724 731 +727 725 952 +724 726 721 +729 731 490 +730 728 735 +731 729 956 +728 730 725 +733 735 494 +734 732 -1 +735 733 960 +732 734 729 +737 739 510 +738 736 743 +739 737 -1 +736 738 -1 +741 743 514 +742 740 747 +743 741 -1 +740 742 737 +745 747 518 +746 744 751 +747 745 -1 +744 746 741 +749 751 522 +750 748 755 +751 749 -1 +748 750 745 +753 755 526 +754 752 759 +755 753 -1 +752 754 749 +757 759 530 +758 756 763 +759 757 -1 +756 758 753 +761 763 534 +762 760 767 +763 761 -1 +760 762 757 +765 767 538 +766 764 771 +767 765 -1 +764 766 761 +769 771 542 +770 768 775 +771 769 -1 +768 770 765 +773 775 546 +774 772 779 +775 773 964 +772 774 769 +777 779 550 +778 776 783 +779 777 968 +776 778 773 +781 783 554 +782 780 787 +783 781 972 +780 782 777 +785 787 558 +786 784 791 +787 785 976 +784 786 781 +789 791 562 +790 788 795 +791 789 980 +788 790 785 +793 795 566 +794 792 799 +795 793 984 +792 794 789 +797 799 570 +798 796 803 +799 797 988 +796 798 793 +801 803 574 +802 800 807 +803 801 992 +800 802 797 +805 807 578 +806 804 811 +807 805 996 +804 806 801 +809 811 582 +810 808 815 +811 809 1000 +808 810 805 +813 815 586 +814 812 819 +815 813 1004 +812 814 809 +817 819 590 +818 816 823 +819 817 1008 +816 818 813 +821 823 594 +822 820 827 +823 821 1012 +820 822 817 +825 827 598 +826 824 831 +827 825 1016 +824 826 821 +829 831 602 +830 828 835 +831 829 1020 +828 830 825 +833 835 606 +834 832 839 +835 833 1024 +832 834 829 +837 839 610 +838 836 843 +839 837 1028 +836 838 833 +841 843 614 +842 840 847 +843 841 1032 +840 842 837 +845 847 618 +846 844 851 +847 845 1036 +844 846 841 +849 851 622 +850 848 855 +851 849 1040 +848 850 845 +853 855 626 +854 852 859 +855 853 1044 +852 854 849 +857 859 630 +858 856 863 +859 857 1048 +856 858 853 +861 863 634 +862 860 867 +863 861 1052 +860 862 857 +865 867 638 +866 864 871 +867 865 1056 +864 866 861 +869 871 642 +870 868 875 +871 869 1060 +868 870 865 +873 875 646 +874 872 879 +875 873 1064 +872 874 869 +877 879 650 +878 876 883 +879 877 1068 +876 878 873 +881 883 654 +882 880 887 +883 881 1072 +880 882 877 +885 887 658 +886 884 891 +887 885 1076 +884 886 881 +889 891 662 +890 888 895 +891 889 1080 +888 890 885 +893 895 666 +894 892 899 +895 893 1084 +892 894 889 +897 899 670 +898 896 903 +899 897 1088 +896 898 893 +901 903 674 +902 900 907 +903 901 1092 +900 902 897 +905 907 678 +906 904 911 +907 905 1096 +904 906 901 +909 911 682 +910 908 915 +911 909 1100 +908 910 905 +913 915 686 +914 912 919 +915 913 1104 +912 914 909 +917 919 690 +918 916 923 +919 917 1108 +916 918 913 +921 923 694 +922 920 927 +923 921 1112 +920 922 917 +925 927 698 +926 924 931 +927 925 1116 +924 926 921 +929 931 702 +930 928 935 +931 929 1120 +928 930 925 +933 935 706 +934 932 939 +935 933 1124 +932 934 929 +937 939 710 +938 936 943 +939 937 1128 +936 938 933 +941 943 714 +942 940 947 +943 941 1132 +940 942 937 +945 947 718 +946 944 -1 +947 945 1136 +944 946 941 +949 951 722 +950 948 955 +951 949 1140 +948 950 -1 +953 955 726 +954 952 959 +955 953 1144 +952 954 949 +957 959 730 +958 956 963 +959 957 1148 +956 958 953 +961 963 734 +962 960 -1 +963 961 1152 +960 962 957 +965 967 774 +966 964 971 +967 965 1192 +964 966 -1 +969 971 778 +970 968 975 +971 969 1196 +968 970 965 +973 975 782 +974 972 979 +975 973 1200 +972 974 969 +977 979 786 +978 976 983 +979 977 1204 +976 978 973 +981 983 790 +982 980 987 +983 981 1208 +980 982 977 +985 987 794 +986 984 991 +987 985 1212 +984 986 981 +989 991 798 +990 988 995 +991 989 1216 +988 990 985 +993 995 802 +994 992 999 +995 993 1220 +992 994 989 +997 999 806 +998 996 1003 +999 997 1224 +996 998 993 +1001 1003 810 +1002 1000 1007 +1003 1001 1228 +1000 1002 997 +1005 1007 814 +1006 1004 1011 +1007 1005 1232 +1004 1006 1001 +1009 1011 818 +1010 1008 1015 +1011 1009 1236 +1008 1010 1005 +1013 1015 822 +1014 1012 1019 +1015 1013 1240 +1012 1014 1009 +1017 1019 826 +1018 1016 1023 +1019 1017 1244 +1016 1018 1013 +1021 1023 830 +1022 1020 1027 +1023 1021 1248 +1020 1022 1017 +1025 1027 834 +1026 1024 1031 +1027 1025 1252 +1024 1026 1021 +1029 1031 838 +1030 1028 1035 +1031 1029 1256 +1028 1030 1025 +1033 1035 842 +1034 1032 1039 +1035 1033 1260 +1032 1034 1029 +1037 1039 846 +1038 1036 1043 +1039 1037 1264 +1036 1038 1033 +1041 1043 850 +1042 1040 1047 +1043 1041 1268 +1040 1042 1037 +1045 1047 854 +1046 1044 1051 +1047 1045 1272 +1044 1046 1041 +1049 1051 858 +1050 1048 1055 +1051 1049 1276 +1048 1050 1045 +1053 1055 862 +1054 1052 1059 +1055 1053 1280 +1052 1054 1049 +1057 1059 866 +1058 1056 1063 +1059 1057 1284 +1056 1058 1053 +1061 1063 870 +1062 1060 1067 +1063 1061 1288 +1060 1062 1057 +1065 1067 874 +1066 1064 1071 +1067 1065 1292 +1064 1066 1061 +1069 1071 878 +1070 1068 1075 +1071 1069 1296 +1068 1070 1065 +1073 1075 882 +1074 1072 1079 +1075 1073 1300 +1072 1074 1069 +1077 1079 886 +1078 1076 1083 +1079 1077 1304 +1076 1078 1073 +1081 1083 890 +1082 1080 1087 +1083 1081 1308 +1080 1082 1077 +1085 1087 894 +1086 1084 1091 +1087 1085 1312 +1084 1086 1081 +1089 1091 898 +1090 1088 1095 +1091 1089 1316 +1088 1090 1085 +1093 1095 902 +1094 1092 1099 +1095 1093 1320 +1092 1094 1089 +1097 1099 906 +1098 1096 1103 +1099 1097 1324 +1096 1098 1093 +1101 1103 910 +1102 1100 1107 +1103 1101 1328 +1100 1102 1097 +1105 1107 914 +1106 1104 1111 +1107 1105 1332 +1104 1106 1101 +1109 1111 918 +1110 1108 1115 +1111 1109 1336 +1108 1110 1105 +1113 1115 922 +1114 1112 1119 +1115 1113 1340 +1112 1114 1109 +1117 1119 926 +1118 1116 1123 +1119 1117 1344 +1116 1118 1113 +1121 1123 930 +1122 1120 1127 +1123 1121 1348 +1120 1122 1117 +1125 1127 934 +1126 1124 1131 +1127 1125 1352 +1124 1126 1121 +1129 1131 938 +1130 1128 1135 +1131 1129 1356 +1128 1130 1125 +1133 1135 942 +1134 1132 1139 +1135 1133 1360 +1132 1134 1129 +1137 1139 946 +1138 1136 -1 +1139 1137 1364 +1136 1138 1133 +1141 1143 950 +1142 1140 1147 +1143 1141 1368 +1140 1142 -1 +1145 1147 954 +1146 1144 1151 +1147 1145 1372 +1144 1146 1141 +1149 1151 958 +1150 1148 1155 +1151 1149 1376 +1148 1150 1145 +1153 1155 962 +1154 1152 -1 +1155 1153 1380 +1152 1154 1149 +1157 1159 -1 +1158 1156 1163 +1159 1157 1396 +1156 1158 -1 +1161 1163 -1 +1162 1160 1167 +1163 1161 1400 +1160 1162 1157 +1165 1167 -1 +1166 1164 1171 +1167 1165 1404 +1164 1166 1161 +1169 1171 -1 +1170 1168 1175 +1171 1169 1408 +1168 1170 1165 +1173 1175 -1 +1174 1172 1179 +1175 1173 1412 +1172 1174 1169 +1177 1179 -1 +1178 1176 1183 +1179 1177 1416 +1176 1178 1173 +1181 1183 -1 +1182 1180 1187 +1183 1181 1420 +1180 1182 1177 +1185 1187 -1 +1186 1184 1191 +1187 1185 1424 +1184 1186 1181 +1189 1191 -1 +1190 1188 1195 +1191 1189 1428 +1188 1190 1185 +1193 1195 966 +1194 1192 1199 +1195 1193 1432 +1192 1194 1189 +1197 1199 970 +1198 1196 1203 +1199 1197 1436 +1196 1198 1193 +1201 1203 974 +1202 1200 1207 +1203 1201 1440 +1200 1202 1197 +1205 1207 978 +1206 1204 1211 +1207 1205 1444 +1204 1206 1201 +1209 1211 982 +1210 1208 1215 +1211 1209 1448 +1208 1210 1205 +1213 1215 986 +1214 1212 1219 +1215 1213 1452 +1212 1214 1209 +1217 1219 990 +1218 1216 1223 +1219 1217 1456 +1216 1218 1213 +1221 1223 994 +1222 1220 1227 +1223 1221 1460 +1220 1222 1217 +1225 1227 998 +1226 1224 1231 +1227 1225 1464 +1224 1226 1221 +1229 1231 1002 +1230 1228 1235 +1231 1229 1468 +1228 1230 1225 +1233 1235 1006 +1234 1232 1239 +1235 1233 1472 +1232 1234 1229 +1237 1239 1010 +1238 1236 1243 +1239 1237 1476 +1236 1238 1233 +1241 1243 1014 +1242 1240 1247 +1243 1241 1480 +1240 1242 1237 +1245 1247 1018 +1246 1244 1251 +1247 1245 1484 +1244 1246 1241 +1249 1251 1022 +1250 1248 1255 +1251 1249 1488 +1248 1250 1245 +1253 1255 1026 +1254 1252 1259 +1255 1253 1492 +1252 1254 1249 +1257 1259 1030 +1258 1256 1263 +1259 1257 1496 +1256 1258 1253 +1261 1263 1034 +1262 1260 1267 +1263 1261 1500 +1260 1262 1257 +1265 1267 1038 +1266 1264 1271 +1267 1265 1504 +1264 1266 1261 +1269 1271 1042 +1270 1268 1275 +1271 1269 1508 +1268 1270 1265 +1273 1275 1046 +1274 1272 1279 +1275 1273 1512 +1272 1274 1269 +1277 1279 1050 +1278 1276 1283 +1279 1277 1516 +1276 1278 1273 +1281 1283 1054 +1282 1280 1287 +1283 1281 1520 +1280 1282 1277 +1285 1287 1058 +1286 1284 1291 +1287 1285 1524 +1284 1286 1281 +1289 1291 1062 +1290 1288 1295 +1291 1289 1528 +1288 1290 1285 +1293 1295 1066 +1294 1292 1299 +1295 1293 1532 +1292 1294 1289 +1297 1299 1070 +1298 1296 1303 +1299 1297 1536 +1296 1298 1293 +1301 1303 1074 +1302 1300 1307 +1303 1301 1540 +1300 1302 1297 +1305 1307 1078 +1306 1304 1311 +1307 1305 1544 +1304 1306 1301 +1309 1311 1082 +1310 1308 1315 +1311 1309 1548 +1308 1310 1305 +1313 1315 1086 +1314 1312 1319 +1315 1313 1552 +1312 1314 1309 +1317 1319 1090 +1318 1316 1323 +1319 1317 1556 +1316 1318 1313 +1321 1323 1094 +1322 1320 1327 +1323 1321 1560 +1320 1322 1317 +1325 1327 1098 +1326 1324 1331 +1327 1325 1564 +1324 1326 1321 +1329 1331 1102 +1330 1328 1335 +1331 1329 1568 +1328 1330 1325 +1333 1335 1106 +1334 1332 1339 +1335 1333 1572 +1332 1334 1329 +1337 1339 1110 +1338 1336 1343 +1339 1337 1576 +1336 1338 1333 +1341 1343 1114 +1342 1340 1347 +1343 1341 1580 +1340 1342 1337 +1345 1347 1118 +1346 1344 1351 +1347 1345 1584 +1344 1346 1341 +1349 1351 1122 +1350 1348 1355 +1351 1349 1588 +1348 1350 1345 +1353 1355 1126 +1354 1352 1359 +1355 1353 1592 +1352 1354 1349 +1357 1359 1130 +1358 1356 1363 +1359 1357 1596 +1356 1358 1353 +1361 1363 1134 +1362 1360 1367 +1363 1361 1600 +1360 1362 1357 +1365 1367 1138 +1366 1364 -1 +1367 1365 1604 +1364 1366 1361 +1369 1371 1142 +1370 1368 1375 +1371 1369 1608 +1368 1370 -1 +1373 1375 1146 +1374 1372 1379 +1375 1373 1612 +1372 1374 1369 +1377 1379 1150 +1378 1376 1383 +1379 1377 1616 +1376 1378 1373 +1381 1383 1154 +1382 1380 1387 +1383 1381 1620 +1380 1382 1377 +1385 1387 -1 +1386 1384 1391 +1387 1385 1624 +1384 1386 1381 +1389 1391 -1 +1390 1388 1395 +1391 1389 1628 +1388 1390 1385 +1393 1395 -1 +1394 1392 1399 +1395 1393 1632 +1392 1394 1389 +1397 1399 1158 +1398 1396 1403 +1399 1397 1636 +1396 1398 1393 +1401 1403 1162 +1402 1400 1407 +1403 1401 1640 +1400 1402 1397 +1405 1407 1166 +1406 1404 1411 +1407 1405 1644 +1404 1406 1401 +1409 1411 1170 +1410 1408 1415 +1411 1409 1648 +1408 1410 1405 +1413 1415 1174 +1414 1412 1419 +1415 1413 1652 +1412 1414 1409 +1417 1419 1178 +1418 1416 1423 +1419 1417 1656 +1416 1418 1413 +1421 1423 1182 +1422 1420 1427 +1423 1421 1660 +1420 1422 1417 +1425 1427 1186 +1426 1424 1431 +1427 1425 1664 +1424 1426 1421 +1429 1431 1190 +1430 1428 1435 +1431 1429 1668 +1428 1430 1425 +1433 1435 1194 +1434 1432 1439 +1435 1433 1672 +1432 1434 1429 +1437 1439 1198 +1438 1436 1443 +1439 1437 1676 +1436 1438 1433 +1441 1443 1202 +1442 1440 1447 +1443 1441 1680 +1440 1442 1437 +1445 1447 1206 +1446 1444 1451 +1447 1445 1684 +1444 1446 1441 +1449 1451 1210 +1450 1448 1455 +1451 1449 1688 +1448 1450 1445 +1453 1455 1214 +1454 1452 1459 +1455 1453 1692 +1452 1454 1449 +1457 1459 1218 +1458 1456 1463 +1459 1457 1696 +1456 1458 1453 +1461 1463 1222 +1462 1460 1467 +1463 1461 1700 +1460 1462 1457 +1465 1467 1226 +1466 1464 1471 +1467 1465 1704 +1464 1466 1461 +1469 1471 1230 +1470 1468 1475 +1471 1469 1708 +1468 1470 1465 +1473 1475 1234 +1474 1472 1479 +1475 1473 1712 +1472 1474 1469 +1477 1479 1238 +1478 1476 1483 +1479 1477 1716 +1476 1478 1473 +1481 1483 1242 +1482 1480 1487 +1483 1481 1720 +1480 1482 1477 +1485 1487 1246 +1486 1484 1491 +1487 1485 1724 +1484 1486 1481 +1489 1491 1250 +1490 1488 1495 +1491 1489 1728 +1488 1490 1485 +1493 1495 1254 +1494 1492 1499 +1495 1493 1732 +1492 1494 1489 +1497 1499 1258 +1498 1496 1503 +1499 1497 1736 +1496 1498 1493 +1501 1503 1262 +1502 1500 1507 +1503 1501 1740 +1500 1502 1497 +1505 1507 1266 +1506 1504 1511 +1507 1505 1744 +1504 1506 1501 +1509 1511 1270 +1510 1508 1515 +1511 1509 1748 +1508 1510 1505 +1513 1515 1274 +1514 1512 1519 +1515 1513 1752 +1512 1514 1509 +1517 1519 1278 +1518 1516 1523 +1519 1517 1756 +1516 1518 1513 +1521 1523 1282 +1522 1520 1527 +1523 1521 1760 +1520 1522 1517 +1525 1527 1286 +1526 1524 1531 +1527 1525 1764 +1524 1526 1521 +1529 1531 1290 +1530 1528 1535 +1531 1529 1768 +1528 1530 1525 +1533 1535 1294 +1534 1532 1539 +1535 1533 1772 +1532 1534 1529 +1537 1539 1298 +1538 1536 1543 +1539 1537 1776 +1536 1538 1533 +1541 1543 1302 +1542 1540 1547 +1543 1541 1780 +1540 1542 1537 +1545 1547 1306 +1546 1544 1551 +1547 1545 1784 +1544 1546 1541 +1549 1551 1310 +1550 1548 1555 +1551 1549 1788 +1548 1550 1545 +1553 1555 1314 +1554 1552 1559 +1555 1553 1792 +1552 1554 1549 +1557 1559 1318 +1558 1556 1563 +1559 1557 1796 +1556 1558 1553 +1561 1563 1322 +1562 1560 1567 +1563 1561 1800 +1560 1562 1557 +1565 1567 1326 +1566 1564 1571 +1567 1565 1804 +1564 1566 1561 +1569 1571 1330 +1570 1568 1575 +1571 1569 1808 +1568 1570 1565 +1573 1575 1334 +1574 1572 1579 +1575 1573 1812 +1572 1574 1569 +1577 1579 1338 +1578 1576 1583 +1579 1577 1816 +1576 1578 1573 +1581 1583 1342 +1582 1580 1587 +1583 1581 1820 +1580 1582 1577 +1585 1587 1346 +1586 1584 1591 +1587 1585 1824 +1584 1586 1581 +1589 1591 1350 +1590 1588 1595 +1591 1589 1828 +1588 1590 1585 +1593 1595 1354 +1594 1592 1599 +1595 1593 1832 +1592 1594 1589 +1597 1599 1358 +1598 1596 1603 +1599 1597 1836 +1596 1598 1593 +1601 1603 1362 +1602 1600 1607 +1603 1601 1840 +1600 1602 1597 +1605 1607 1366 +1606 1604 -1 +1607 1605 1844 +1604 1606 1601 +1609 1611 1370 +1610 1608 1615 +1611 1609 1848 +1608 1610 -1 +1613 1615 1374 +1614 1612 1619 +1615 1613 1852 +1612 1614 1609 +1617 1619 1378 +1618 1616 1623 +1619 1617 1856 +1616 1618 1613 +1621 1623 1382 +1622 1620 1627 +1623 1621 1860 +1620 1622 1617 +1625 1627 1386 +1626 1624 1631 +1627 1625 1864 +1624 1626 1621 +1629 1631 1390 +1630 1628 1635 +1631 1629 1868 +1628 1630 1625 +1633 1635 1394 +1634 1632 1639 +1635 1633 1872 +1632 1634 1629 +1637 1639 1398 +1638 1636 1643 +1639 1637 1876 +1636 1638 1633 +1641 1643 1402 +1642 1640 1647 +1643 1641 1880 +1640 1642 1637 +1645 1647 1406 +1646 1644 1651 +1647 1645 1884 +1644 1646 1641 +1649 1651 1410 +1650 1648 1655 +1651 1649 1888 +1648 1650 1645 +1653 1655 1414 +1654 1652 1659 +1655 1653 1892 +1652 1654 1649 +1657 1659 1418 +1658 1656 1663 +1659 1657 1896 +1656 1658 1653 +1661 1663 1422 +1662 1660 1667 +1663 1661 1900 +1660 1662 1657 +1665 1667 1426 +1666 1664 1671 +1667 1665 1904 +1664 1666 1661 +1669 1671 1430 +1670 1668 1675 +1671 1669 1908 +1668 1670 1665 +1673 1675 1434 +1674 1672 1679 +1675 1673 1912 +1672 1674 1669 +1677 1679 1438 +1678 1676 1683 +1679 1677 1916 +1676 1678 1673 +1681 1683 1442 +1682 1680 1687 +1683 1681 1920 +1680 1682 1677 +1685 1687 1446 +1686 1684 1691 +1687 1685 1924 +1684 1686 1681 +1689 1691 1450 +1690 1688 1695 +1691 1689 1928 +1688 1690 1685 +1693 1695 1454 +1694 1692 1699 +1695 1693 1932 +1692 1694 1689 +1697 1699 1458 +1698 1696 1703 +1699 1697 1936 +1696 1698 1693 +1701 1703 1462 +1702 1700 1707 +1703 1701 1940 +1700 1702 1697 +1705 1707 1466 +1706 1704 1711 +1707 1705 1944 +1704 1706 1701 +1709 1711 1470 +1710 1708 1715 +1711 1709 1948 +1708 1710 1705 +1713 1715 1474 +1714 1712 1719 +1715 1713 1952 +1712 1714 1709 +1717 1719 1478 +1718 1716 1723 +1719 1717 1956 +1716 1718 1713 +1721 1723 1482 +1722 1720 1727 +1723 1721 1960 +1720 1722 1717 +1725 1727 1486 +1726 1724 1731 +1727 1725 1964 +1724 1726 1721 +1729 1731 1490 +1730 1728 1735 +1731 1729 1968 +1728 1730 1725 +1733 1735 1494 +1734 1732 1739 +1735 1733 1972 +1732 1734 1729 +1737 1739 1498 +1738 1736 1743 +1739 1737 1976 +1736 1738 1733 +1741 1743 1502 +1742 1740 1747 +1743 1741 1980 +1740 1742 1737 +1745 1747 1506 +1746 1744 1751 +1747 1745 1984 +1744 1746 1741 +1749 1751 1510 +1750 1748 1755 +1751 1749 1988 +1748 1750 1745 +1753 1755 1514 +1754 1752 1759 +1755 1753 1992 +1752 1754 1749 +1757 1759 1518 +1758 1756 1763 +1759 1757 1996 +1756 1758 1753 +1761 1763 1522 +1762 1760 1767 +1763 1761 2000 +1760 1762 1757 +1765 1767 1526 +1766 1764 1771 +1767 1765 2004 +1764 1766 1761 +1769 1771 1530 +1770 1768 1775 +1771 1769 2008 +1768 1770 1765 +1773 1775 1534 +1774 1772 1779 +1775 1773 2012 +1772 1774 1769 +1777 1779 1538 +1778 1776 1783 +1779 1777 2016 +1776 1778 1773 +1781 1783 1542 +1782 1780 1787 +1783 1781 2020 +1780 1782 1777 +1785 1787 1546 +1786 1784 1791 +1787 1785 2024 +1784 1786 1781 +1789 1791 1550 +1790 1788 1795 +1791 1789 2028 +1788 1790 1785 +1793 1795 1554 +1794 1792 1799 +1795 1793 2032 +1792 1794 1789 +1797 1799 1558 +1798 1796 1803 +1799 1797 2036 +1796 1798 1793 +1801 1803 1562 +1802 1800 1807 +1803 1801 2040 +1800 1802 1797 +1805 1807 1566 +1806 1804 1811 +1807 1805 2044 +1804 1806 1801 +1809 1811 1570 +1810 1808 1815 +1811 1809 2048 +1808 1810 1805 +1813 1815 1574 +1814 1812 1819 +1815 1813 2052 +1812 1814 1809 +1817 1819 1578 +1818 1816 1823 +1819 1817 2056 +1816 1818 1813 +1821 1823 1582 +1822 1820 1827 +1823 1821 2060 +1820 1822 1817 +1825 1827 1586 +1826 1824 1831 +1827 1825 2064 +1824 1826 1821 +1829 1831 1590 +1830 1828 1835 +1831 1829 2068 +1828 1830 1825 +1833 1835 1594 +1834 1832 1839 +1835 1833 2072 +1832 1834 1829 +1837 1839 1598 +1838 1836 1843 +1839 1837 2076 +1836 1838 1833 +1841 1843 1602 +1842 1840 1847 +1843 1841 2080 +1840 1842 1837 +1845 1847 1606 +1846 1844 -1 +1847 1845 2084 +1844 1846 1841 +1849 1851 1610 +1850 1848 1855 +1851 1849 2088 +1848 1850 -1 +1853 1855 1614 +1854 1852 1859 +1855 1853 2092 +1852 1854 1849 +1857 1859 1618 +1858 1856 1863 +1859 1857 2096 +1856 1858 1853 +1861 1863 1622 +1862 1860 1867 +1863 1861 2100 +1860 1862 1857 +1865 1867 1626 +1866 1864 1871 +1867 1865 2104 +1864 1866 1861 +1869 1871 1630 +1870 1868 1875 +1871 1869 2108 +1868 1870 1865 +1873 1875 1634 +1874 1872 1879 +1875 1873 2112 +1872 1874 1869 +1877 1879 1638 +1878 1876 1883 +1879 1877 2116 +1876 1878 1873 +1881 1883 1642 +1882 1880 1887 +1883 1881 2120 +1880 1882 1877 +1885 1887 1646 +1886 1884 1891 +1887 1885 2124 +1884 1886 1881 +1889 1891 1650 +1890 1888 1895 +1891 1889 2128 +1888 1890 1885 +1893 1895 1654 +1894 1892 1899 +1895 1893 2132 +1892 1894 1889 +1897 1899 1658 +1898 1896 1903 +1899 1897 2136 +1896 1898 1893 +1901 1903 1662 +1902 1900 1907 +1903 1901 2140 +1900 1902 1897 +1905 1907 1666 +1906 1904 1911 +1907 1905 2144 +1904 1906 1901 +1909 1911 1670 +1910 1908 1915 +1911 1909 2148 +1908 1910 1905 +1913 1915 1674 +1914 1912 1919 +1915 1913 2152 +1912 1914 1909 +1917 1919 1678 +1918 1916 1923 +1919 1917 2156 +1916 1918 1913 +1921 1923 1682 +1922 1920 1927 +1923 1921 2160 +1920 1922 1917 +1925 1927 1686 +1926 1924 1931 +1927 1925 2164 +1924 1926 1921 +1929 1931 1690 +1930 1928 1935 +1931 1929 2168 +1928 1930 1925 +1933 1935 1694 +1934 1932 1939 +1935 1933 2172 +1932 1934 1929 +1937 1939 1698 +1938 1936 1943 +1939 1937 2176 +1936 1938 1933 +1941 1943 1702 +1942 1940 1947 +1943 1941 2180 +1940 1942 1937 +1945 1947 1706 +1946 1944 1951 +1947 1945 2184 +1944 1946 1941 +1949 1951 1710 +1950 1948 1955 +1951 1949 2188 +1948 1950 1945 +1953 1955 1714 +1954 1952 1959 +1955 1953 2192 +1952 1954 1949 +1957 1959 1718 +1958 1956 1963 +1959 1957 2196 +1956 1958 1953 +1961 1963 1722 +1962 1960 1967 +1963 1961 2200 +1960 1962 1957 +1965 1967 1726 +1966 1964 1971 +1967 1965 2204 +1964 1966 1961 +1969 1971 1730 +1970 1968 1975 +1971 1969 2208 +1968 1970 1965 +1973 1975 1734 +1974 1972 1979 +1975 1973 2212 +1972 1974 1969 +1977 1979 1738 +1978 1976 1983 +1979 1977 2216 +1976 1978 1973 +1981 1983 1742 +1982 1980 1987 +1983 1981 2220 +1980 1982 1977 +1985 1987 1746 +1986 1984 1991 +1987 1985 2224 +1984 1986 1981 +1989 1991 1750 +1990 1988 1995 +1991 1989 2228 +1988 1990 1985 +1993 1995 1754 +1994 1992 1999 +1995 1993 2232 +1992 1994 1989 +1997 1999 1758 +1998 1996 2003 +1999 1997 2236 +1996 1998 1993 +2001 2003 1762 +2002 2000 2007 +2003 2001 2240 +2000 2002 1997 +2005 2007 1766 +2006 2004 2011 +2007 2005 2244 +2004 2006 2001 +2009 2011 1770 +2010 2008 2015 +2011 2009 2248 +2008 2010 2005 +2013 2015 1774 +2014 2012 2019 +2015 2013 2252 +2012 2014 2009 +2017 2019 1778 +2018 2016 2023 +2019 2017 2256 +2016 2018 2013 +2021 2023 1782 +2022 2020 2027 +2023 2021 2260 +2020 2022 2017 +2025 2027 1786 +2026 2024 2031 +2027 2025 2264 +2024 2026 2021 +2029 2031 1790 +2030 2028 2035 +2031 2029 2268 +2028 2030 2025 +2033 2035 1794 +2034 2032 2039 +2035 2033 2272 +2032 2034 2029 +2037 2039 1798 +2038 2036 2043 +2039 2037 2276 +2036 2038 2033 +2041 2043 1802 +2042 2040 2047 +2043 2041 2280 +2040 2042 2037 +2045 2047 1806 +2046 2044 2051 +2047 2045 2284 +2044 2046 2041 +2049 2051 1810 +2050 2048 2055 +2051 2049 2288 +2048 2050 2045 +2053 2055 1814 +2054 2052 2059 +2055 2053 2292 +2052 2054 2049 +2057 2059 1818 +2058 2056 2063 +2059 2057 2296 +2056 2058 2053 +2061 2063 1822 +2062 2060 2067 +2063 2061 2300 +2060 2062 2057 +2065 2067 1826 +2066 2064 2071 +2067 2065 2304 +2064 2066 2061 +2069 2071 1830 +2070 2068 2075 +2071 2069 2308 +2068 2070 2065 +2073 2075 1834 +2074 2072 2079 +2075 2073 2312 +2072 2074 2069 +2077 2079 1838 +2078 2076 2083 +2079 2077 2316 +2076 2078 2073 +2081 2083 1842 +2082 2080 2087 +2083 2081 2320 +2080 2082 2077 +2085 2087 1846 +2086 2084 -1 +2087 2085 2324 +2084 2086 2081 +2089 2091 1850 +2090 2088 2095 +2091 2089 -1 +2088 2090 -1 +2093 2095 1854 +2094 2092 2099 +2095 2093 -1 +2092 2094 2089 +2097 2099 1858 +2098 2096 2103 +2099 2097 -1 +2096 2098 2093 +2101 2103 1862 +2102 2100 2107 +2103 2101 -1 +2100 2102 2097 +2105 2107 1866 +2106 2104 2111 +2107 2105 -1 +2104 2106 2101 +2109 2111 1870 +2110 2108 2115 +2111 2109 -1 +2108 2110 2105 +2113 2115 1874 +2114 2112 2119 +2115 2113 -1 +2112 2114 2109 +2117 2119 1878 +2118 2116 2123 +2119 2117 -1 +2116 2118 2113 +2121 2123 1882 +2122 2120 2127 +2123 2121 -1 +2120 2122 2117 +2125 2127 1886 +2126 2124 2131 +2127 2125 -1 +2124 2126 2121 +2129 2131 1890 +2130 2128 2135 +2131 2129 -1 +2128 2130 2125 +2133 2135 1894 +2134 2132 2139 +2135 2133 -1 +2132 2134 2129 +2137 2139 1898 +2138 2136 2143 +2139 2137 -1 +2136 2138 2133 +2141 2143 1902 +2142 2140 2147 +2143 2141 -1 +2140 2142 2137 +2145 2147 1906 +2146 2144 2151 +2147 2145 -1 +2144 2146 2141 +2149 2151 1910 +2150 2148 2155 +2151 2149 -1 +2148 2150 2145 +2153 2155 1914 +2154 2152 2159 +2155 2153 -1 +2152 2154 2149 +2157 2159 1918 +2158 2156 2163 +2159 2157 -1 +2156 2158 2153 +2161 2163 1922 +2162 2160 2167 +2163 2161 -1 +2160 2162 2157 +2165 2167 1926 +2166 2164 2171 +2167 2165 -1 +2164 2166 2161 +2169 2171 1930 +2170 2168 2175 +2171 2169 -1 +2168 2170 2165 +2173 2175 1934 +2174 2172 2179 +2175 2173 -1 +2172 2174 2169 +2177 2179 1938 +2178 2176 2183 +2179 2177 -1 +2176 2178 2173 +2181 2183 1942 +2182 2180 2187 +2183 2181 -1 +2180 2182 2177 +2185 2187 1946 +2186 2184 2191 +2187 2185 -1 +2184 2186 2181 +2189 2191 1950 +2190 2188 2195 +2191 2189 -1 +2188 2190 2185 +2193 2195 1954 +2194 2192 2199 +2195 2193 -1 +2192 2194 2189 +2197 2199 1958 +2198 2196 2203 +2199 2197 -1 +2196 2198 2193 +2201 2203 1962 +2202 2200 2207 +2203 2201 -1 +2200 2202 2197 +2205 2207 1966 +2206 2204 2211 +2207 2205 -1 +2204 2206 2201 +2209 2211 1970 +2210 2208 2215 +2211 2209 -1 +2208 2210 2205 +2213 2215 1974 +2214 2212 2219 +2215 2213 -1 +2212 2214 2209 +2217 2219 1978 +2218 2216 2223 +2219 2217 -1 +2216 2218 2213 +2221 2223 1982 +2222 2220 2227 +2223 2221 -1 +2220 2222 2217 +2225 2227 1986 +2226 2224 2231 +2227 2225 -1 +2224 2226 2221 +2229 2231 1990 +2230 2228 2235 +2231 2229 -1 +2228 2230 2225 +2233 2235 1994 +2234 2232 2239 +2235 2233 -1 +2232 2234 2229 +2237 2239 1998 +2238 2236 2243 +2239 2237 -1 +2236 2238 2233 +2241 2243 2002 +2242 2240 2247 +2243 2241 -1 +2240 2242 2237 +2245 2247 2006 +2246 2244 2251 +2247 2245 -1 +2244 2246 2241 +2249 2251 2010 +2250 2248 2255 +2251 2249 -1 +2248 2250 2245 +2253 2255 2014 +2254 2252 2259 +2255 2253 -1 +2252 2254 2249 +2257 2259 2018 +2258 2256 2263 +2259 2257 -1 +2256 2258 2253 +2261 2263 2022 +2262 2260 2267 +2263 2261 -1 +2260 2262 2257 +2265 2267 2026 +2266 2264 2271 +2267 2265 -1 +2264 2266 2261 +2269 2271 2030 +2270 2268 2275 +2271 2269 -1 +2268 2270 2265 +2273 2275 2034 +2274 2272 2279 +2275 2273 -1 +2272 2274 2269 +2277 2279 2038 +2278 2276 2283 +2279 2277 -1 +2276 2278 2273 +2281 2283 2042 +2282 2280 2287 +2283 2281 -1 +2280 2282 2277 +2285 2287 2046 +2286 2284 2291 +2287 2285 -1 +2284 2286 2281 +2289 2291 2050 +2290 2288 2295 +2291 2289 -1 +2288 2290 2285 +2293 2295 2054 +2294 2292 2299 +2295 2293 -1 +2292 2294 2289 +2297 2299 2058 +2298 2296 2303 +2299 2297 -1 +2296 2298 2293 +2301 2303 2062 +2302 2300 2307 +2303 2301 -1 +2300 2302 2297 +2305 2307 2066 +2306 2304 2311 +2307 2305 -1 +2304 2306 2301 +2309 2311 2070 +2310 2308 2315 +2311 2309 -1 +2308 2310 2305 +2313 2315 2074 +2314 2312 2319 +2315 2313 -1 +2312 2314 2309 +2317 2319 2078 +2318 2316 2323 +2319 2317 -1 +2316 2318 2313 +2321 2323 2082 +2322 2320 2327 +2323 2321 -1 +2320 2322 2317 +2325 2327 2086 +2326 2324 -1 +2327 2325 -1 +2324 2326 2321 + diff --git a/extensions/demo/macro/macro.square.2d b/extensions/demo/macro/macro.square.2d new file mode 100644 index 0000000000000000000000000000000000000000..7d310bfbb624959589f9fa057df7154400383bed --- /dev/null +++ b/extensions/demo/macro/macro.square.2d @@ -0,0 +1,47 @@ +DIM: 2 +DIM_OF_WORLD: 2 + +number of elements: 8 +number of vertices: 9 + +vertex coordinates: +-1 -1 +0 -1 +1 -1 +-1 0 +0 0 +1 0 +-1 1 +0 1 +1 1 + +element vertices: +0 4 3 +4 0 1 +1 5 4 +5 1 2 +3 7 6 +7 3 4 +4 8 7 +8 4 5 + +element boundaries: +0 1 0 +3 0 0 +0 0 0 +3 2 0 +4 1 0 +0 0 0 +4 0 0 +0 2 0 + +element neighbours: +5 -1 1 +-1 2 0 +7 1 3 +-1 -1 2 +-1 -1 5 +0 6 4 +-1 5 7 +2 -1 6 + diff --git a/extensions/demo/macro/obstacle_in_channel.2d b/extensions/demo/macro/obstacle_in_channel.2d new file mode 100644 index 0000000000000000000000000000000000000000..cb5acbd02a4adbb6aeea219de6017d17a11221d1 --- /dev/null +++ b/extensions/demo/macro/obstacle_in_channel.2d @@ -0,0 +1,282 @@ +DIM: 2 +DIM_OF_WORLD: 2 + +number of elements: 72 +number of vertices: 52 + +vertex coordinates: +0.16 0.12 +0.2 0.12 +0.24 0.12 +0.28 0.12 +0.16 0.16 +0.2 0.16 +0.24 0.16 +0.28 0.16 +0.32 0.16 +0.36 0.16 +0.4 0.16 +0.44 0.16 +0.48 0.16 +0.52 0.16 +0.56 0.16 +0.6 0.16 +0.64 0.16 +0.16 0.2 +0.2 0.2 +0.24 0.2 +0.28 0.2 +0.32 0.2 +0.36 0.2 +0.4 0.2 +0.44 0.2 +0.48 0.2 +0.52 0.2 +0.56 0.2 +0.6 0.2 +0.64 0.2 +0.16 0.24 +0.2 0.24 +0.24 0.24 +0.28 0.24 +0.18 0.14 +0.22 0.14 +0.26 0.14 +0.18 0.18 +0.22 0.18 +0.26 0.18 +0.3 0.18 +0.34 0.18 +0.38 0.18 +0.42 0.18 +0.46 0.18 +0.5 0.18 +0.54 0.18 +0.58 0.18 +0.62 0.18 +0.18 0.22 +0.22 0.22 +0.26 0.22 + +element vertices: +0 1 34 +1 5 34 +5 4 34 +4 0 34 +1 2 35 +2 6 35 +6 5 35 +5 1 35 +2 3 36 +3 7 36 +7 6 36 +6 2 36 +4 5 37 +5 18 37 +18 17 37 +17 4 37 +5 6 38 +6 19 38 +19 18 38 +18 5 38 +6 7 39 +7 20 39 +20 19 39 +19 6 39 +7 8 40 +8 21 40 +21 20 40 +20 7 40 +8 9 41 +9 22 41 +22 21 41 +21 8 41 +9 10 42 +10 23 42 +23 22 42 +22 9 42 +10 11 43 +11 24 43 +24 23 43 +23 10 43 +11 12 44 +12 25 44 +25 24 44 +24 11 44 +12 13 45 +13 26 45 +26 25 45 +25 12 45 +13 14 46 +14 27 46 +27 26 46 +26 13 46 +14 15 47 +15 28 47 +28 27 47 +27 14 47 +15 16 48 +16 29 48 +29 28 48 +28 15 48 +17 18 49 +18 31 49 +31 30 49 +30 17 49 +18 19 50 +19 32 50 +32 31 50 +31 18 50 +19 20 51 +20 33 51 +33 32 51 +32 19 51 + +element boundaries: +0 0 10 +0 0 0 +0 0 0 +0 0 10 +0 0 10 +0 0 0 +0 0 0 +0 0 0 +0 0 10 +0 0 10 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 10 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 1 +0 0 0 +0 0 1 +0 0 0 +0 0 1 +0 0 0 +0 0 1 +0 0 0 +0 0 1 +0 0 0 +0 0 1 +0 0 0 +0 0 1 +0 0 0 +0 0 1 +0 0 0 +0 0 1 +0 0 0 +0 0 1 +0 0 0 +0 0 1 +0 0 0 +0 0 1 +0 0 0 +0 0 1 +0 0 0 +0 0 1 +0 0 0 +0 0 1 +0 0 0 +0 0 1 +0 0 0 +0 0 1 +0 0 1 +0 0 1 +0 0 0 +0 0 0 +0 0 0 +0 0 10 +0 0 10 +0 0 0 +0 0 0 +0 0 10 +0 0 0 +0 0 0 +0 0 10 +0 0 10 +0 0 0 + +element neighbours: +1 3 -1 +2 0 7 +3 1 12 +0 2 -1 +5 7 -1 +6 4 11 +7 5 16 +4 6 1 +9 11 -1 +10 8 -1 +11 9 20 +8 10 5 +13 15 2 +14 12 19 +15 13 60 +12 14 -1 +17 19 6 +18 16 23 +19 17 64 +16 18 13 +21 23 10 +22 20 27 +23 21 68 +20 22 17 +25 27 -1 +26 24 31 +27 25 -1 +24 26 21 +29 31 -1 +30 28 35 +31 29 -1 +28 30 25 +33 35 -1 +34 32 39 +35 33 -1 +32 34 29 +37 39 -1 +38 36 43 +39 37 -1 +36 38 33 +41 43 -1 +42 40 47 +43 41 -1 +40 42 37 +45 47 -1 +46 44 51 +47 45 -1 +44 46 41 +49 51 -1 +50 48 55 +51 49 -1 +48 50 45 +53 55 -1 +54 52 59 +55 53 -1 +52 54 49 +57 59 -1 +58 56 -1 +59 57 -1 +56 58 53 +61 63 14 +62 60 67 +63 61 -1 +60 62 -1 +65 67 18 +66 64 71 +67 65 -1 +64 66 61 +69 71 22 +70 68 -1 +71 69 -1 +68 70 65 + diff --git a/extensions/demo/src/fsi_explicit/ElasticityNavierStokes.h b/extensions/demo/src/fsi_explicit/ElasticityNavierStokes.h new file mode 100644 index 0000000000000000000000000000000000000000..9c120acb06878b58ebceda5e116ab5fc1254b12a --- /dev/null +++ b/extensions/demo/src/fsi_explicit/ElasticityNavierStokes.h @@ -0,0 +1,305 @@ +/** \file ElasticityNavierStokes.h */ + +#ifndef ELASTICITY_NAVIER_STOKES_H +#define ELASTICITY_NAVIER_STOKES_H + +// coupling structures +#include "CouplingIterationInterface.h" +#include "CouplingTimeInterface.h" +#include "CouplingProblemStat.h" + +// structures for local refinement +#include "Refinement.h" +#include "MeshFunction_Level.h" + +#include "NavierStokesPhase_TaylorHood.h" +#include "LinearElasticity.h" +#include "navierStokes.h" +#include "SignedDistFunctors.h" +#include "PhaseFieldConvert.h" + +using namespace AMDiS; + +/** + * \ingroup Problem + * + * \brief + */ +template<typename Elasticity_Type1 = LinearElasticity, + typename Elasticity_Type2 = StandardBaseProblem, + typename NS_Type = NavierStokesPhase_TaylorHood> +class ElasticityNavierStokes : public CouplingIterationInterface, + public CouplingTimeInterface, + public CouplingProblemStat +{ +public: + + ElasticityNavierStokes(std::string name_, Elasticity_Type1 *elastProb_, Elasticity_Type2 *elastProb2_, NS_Type *nsProb_) + : CouplingProblemStat(name_), + elastProb(elastProb_), + elastProb2(elastProb2_), + nsProb(nsProb_), + refFunction1(NULL), + refFunction2(NULL), + refinement1(NULL), + refinement2(NULL) + { + dow = Global::getGeo(WORLD); + } + + + ~ElasticityNavierStokes() { + if (refFunction1 != NULL) + delete refFunction1; + if (refinement1 != NULL) + delete refinement1; + if (refFunction2 != NULL) + delete refFunction2; + if (refinement2 != NULL) + delete refinement2; + + for (int i = 0; i < Global::getGeo(WORLD); i++) { + delete parametricCoords1[i]; + delete parametricCoords2[i]; + } + + delete parametric1; + delete parametric2; + } + + + /** + * Add the problems to the iterationInterface, timeInterface and couplingProblemStat. + * As a consequence all problem can be initialized one after another and in the + * adaption loop they are solved in rotation. + * At the end the problems are filled with operators and coupling operators as well as + * boundary conditions are added. + * + * In the adaption loop the problems are solved the same order as they are added to the + * iterationInterface in this method. This order can be changed manually in the oneIteration + * method. + **/ + void initialize(AdaptInfo *adaptInfo) + { + for (size_t i = 0; i < elastProb->getNumProblems(); i++) + addProblem(elastProb->getProblem(i)); + for (size_t i = 0; i < elastProb2->getNumProblems(); i++) + addProblem(elastProb2->getProblem(i)); + for (size_t i = 0; i < nsProb->getNumProblems(); i++) + addProblem(nsProb->getProblem(i)); + + addIterationInterface(elastProb); + addIterationInterface(elastProb2); + addIterationInterface(nsProb); + + addTimeInterface(elastProb); + addTimeInterface(elastProb2); + addTimeInterface(nsProb); + +// CouplingProblemStat::initialize(INIT_ALL | INIT_EXACT_SOLUTION); + nsProb->initialize(INIT_ALL); + elastProb->initialize(INIT_ALL); + elastProb2->initialize(INIT_ALL); + dim = elastProb->getMesh()->getDim(); + + initData(); + elastProb->initData(); + elastProb2->initData(); + nsProb->initData(); + fillCouplingBoundaryConditions(); + + elastProb->fillOperators(); + elastProb2->fillOperators(); + nsProb->fillOperators(); + + elastProb->fillBoundaryConditions(); + elastProb2->fillBoundaryConditions(); + nsProb->fillBoundaryConditions(); + } + + + void initData() + { MSG("initData()\n"); + + // ===== create coords vector ===== + for (int i = 0; i < Global::getGeo(WORLD); i++) { + parametricCoords1[i] = new DOFVector<double>(elastProb->getFeSpace(0), + "parametric1 coords "+boost::lexical_cast<std::string>(i)); + parametricCoords2[i] = new DOFVector<double>(elastProb2->getFeSpace(0), + "parametric2 coords "+boost::lexical_cast<std::string>(i)); + } + + // ===== create parametric object ===== + parametric1 = new ParametricFirstOrder(¶metricCoords1); + parametric2 = new ParametricFirstOrder(¶metricCoords2); + } + + + void fillCouplingBoundaryConditions() + { MSG("fillCouplingBoundaryConditions()\n"); + elastProb->setNormalStress(nsProb->getNormalStress()); + elastProb2->setDeformation(elastProb->getDeformation()); + nsProb->setDeformationVelocity(elastProb->getDeformationVelocity()); + } + + + /** + * Solves the initial problems.Before this is done the mesh is refined by the Refinement-class + * This provides local refinement functions for phaseField-refinement or signed-distance-refinement. + * See MeshFunction_Level.h for some details. + **/ + void solveInitialProblem(AdaptInfo *adaptInfo) + { MSG("solveInitialProblem()\n"); + + + + size_t nVertices = 0; + WorldVector<double> c,c2; + Parameters::get("obstacle->num vertices",nVertices); + std::vector<WorldVector<double> > v(nVertices,c); + for (size_t i = 0; i < nVertices; i++) + Parameters::get("obstacle->vertex["+boost::lexical_cast<std::string>(i)+"]",v[i]); + v.push_back(v[0]); + + obstacle = new Polygon(v); + + Parameters::get("flag->num vertices",nVertices); + std::vector<WorldVector<double> > v2(nVertices,c); + for (size_t i = 0; i < nVertices; i++) + Parameters::get("flag->vertex["+boost::lexical_cast<std::string>(i)+"]",v2[i]); + v2.push_back(v2[0]); + + flag = new Polygon(v2); + + Parameters::get("connection->num vertices",nVertices); + std::vector<WorldVector<double> > v3(nVertices,c); + for (size_t i = 0; i < nVertices; i++) + Parameters::get("connection->vertex["+boost::lexical_cast<std::string>(i)+"]",v3[i]); + v3.push_back(v3[0]); + + signedDistFct = new MinWrapper(new Polygon(v2), new MinWrapper(obstacle,flag)); + + refFunction1 = new SignedDistRefinement(elastProb->getMesh()); + refinement1 = new RefinementLevelCoords2( + elastProb->getFeSpace(0), + refFunction1, + signedDistFct); + + refFunction2 = new SignedDistRefinement(elastProb2->getMesh()); + refinement2 = new RefinementLevelCoords2( + elastProb2->getFeSpace(0), + refFunction2, + signedDistFct); + + // initial refinement + refinement1->refine(10); + refinement2->refine(10); + flag->refine(10); + + // solve all initial problems of the problems added to the CouplingTimeInterface + CouplingTimeInterface::solveInitialProblem(adaptInfo); + + DOFVector<WorldVector<double> > coords1(parametricCoords1[0]->getFeSpace(), "coords"); + parametricCoords1[0]->getFeSpace()->getMesh()->getDofIndexCoords(parametricCoords1[0]->getFeSpace(), coords1); + DOFVector<WorldVector<double> > coords2(parametricCoords2[0]->getFeSpace(), "coords"); + parametricCoords2[0]->getFeSpace()->getMesh()->getDofIndexCoords(parametricCoords2[0]->getFeSpace(), coords2); + for (int i = 0; i < Global::getGeo(WORLD); i++) { + transformDOF(&coords1, parametricCoords1[i], new Component(i)); + transformDOF(&coords2, parametricCoords2[i], new Component(i)); + } + + // ===== enable parametric traverse ===== + elastProb->getMesh()->setParametric(parametric1); + elastProb2->getMesh()->setParametric(parametric2); + } + + + /** + * Called at the end of each timestep. + * If the phase-field has changed the mesh is updated by the refinement-method + **/ + void closeTimestep(AdaptInfo *adaptInfo) + { MSG("closeTimestep()\n"); + + CouplingTimeInterface::closeTimestep(adaptInfo); + + flag->move(elastProb->getDeformation()); + updateMesh(elastProb->getDeformation(), parametricCoords1, parametric1); + updateMesh(elastProb2->getDeformation(), parametricCoords2, parametric2); +// refinement1->refine(5); +// refinement2->refine(5); + } + + void updateMesh(DOFVector<WorldVector<double> >* vec, WorldVector<DOFVector<double>*>& parametricCoords, ParametricFirstOrder* parametric) + { + FUNCNAME("ParametricSphere::buildAfterCoarsen()"); + MSG("calculation of parametric coordinates\n"); + const FiniteElemSpace* feSpace = vec->getFeSpace(); + int dim = feSpace->getMesh()->getDim(); + int dow = Global::getGeo(WORLD); + WorldVector<double> newCoords; + + DegreeOfFreedom dof; + WorldVector<double> x; + + const BasisFunction *basFcts = feSpace->getBasisFcts(); + int numBasFcts = basFcts->getNumber(); + std::vector<DegreeOfFreedom> localIndices(numBasFcts); + DOFAdmin *admin = feSpace->getAdmin(); + + // ===== disable parametric traverse ===== + feSpace->getMesh()->setParametric(NULL); + + std::map<DegreeOfFreedom, bool> visited; + + TraverseStack stack; + ElInfo *elInfo = stack.traverseFirst(feSpace->getMesh(), -1, + Mesh::CALL_LEAF_EL | Mesh::FILL_COORDS); + while (elInfo) { + basFcts->getLocalIndices(elInfo->getElement(), admin, localIndices); + for (int i = 0; i < dim + 1; i++) { + dof = localIndices[i]; + newCoords = (*vec)[dof]; + if (!visited[dof]) { + for (int j = 0; j < dow; j++) + (*(parametricCoords[j]))[dof] += newCoords[j]; + + visited[dof] = true; + } + } + elInfo = stack.traverseNext(elInfo); + } + + // ===== enable parametric traverse ===== + feSpace->getMesh()->setParametric(parametric); + } + +protected: + + Elasticity_Type1 *elastProb; // LinearElasticity baseProblem + Elasticity_Type2 *elastProb2; // LinearElasticity baseProblem + NS_Type *nsProb; // Navier-Stokes baseProblem + + /// DOFVector storing parametric coordinates. + WorldVector<DOFVector<double>*> parametricCoords1; + WorldVector<DOFVector<double>*> parametricCoords2; + + /// Parametrizes vertex coordinates while mesh traversal. + ParametricFirstOrder *parametric1; + ParametricFirstOrder *parametric2; + + Polygon* flag; + Polygon* obstacle; + AbstractFunction<double, WorldVector<double> >* signedDistFct; + + SignedDistRefinement* refFunction1; + SignedDistRefinement* refFunction2; + RefinementLevelCoords2* refinement1; + RefinementLevelCoords2* refinement2; + + unsigned dim; // dimension of the mesh + unsigned dow; // dimension of the world +}; + + +#endif // CAHN_HILLIARD_NAVIER_STOKES_H diff --git a/extensions/demo/src/fsi_explicit/fluidStructureInteraction.cc b/extensions/demo/src/fsi_explicit/fluidStructureInteraction.cc new file mode 100644 index 0000000000000000000000000000000000000000..e8fba211a89baef3e742e1413d208ceb6803a7ef --- /dev/null +++ b/extensions/demo/src/fsi_explicit/fluidStructureInteraction.cc @@ -0,0 +1,465 @@ +#include "AMDiS.h" +#include "NavierStokesPhase_TaylorHood.h" +#include "LinearElasticity.h" + +#include "ElasticityNavierStokes.h" +#include "navierStokes.h" +// #include "time/ExtendedRosenbrockAdaptInstationary.h" +#include "Refinement.h" +#include "MeshFunction_Level.h" +#include "PhaseFieldConvert.h" +#include "kdtree_nanoflann_dof.h" +#include "Views.h" + +#include "boost/date_time/posix_time/posix_time.hpp" + +using namespace AMDiS; +using namespace boost::posix_time; + +struct NormalStress : TertiaryAbstractFunction<double, WorldVector<double>, WorldVector<double>, WorldVector<double> > +{ + NormalStress(int comp_, double viscosity_) : comp(comp_), viscosity(viscosity_) {} + + double operator()(const WorldVector<double>& normal, const WorldVector<double>& grdU0, const WorldVector<double>& grdU1) const + { + if (comp == 0) + return viscosity * (2.0*grdU0[0]*normal[0] + (grdU1[0] + grdU0[1])*normal[1]); + else + return viscosity * (2.0*grdU1[1]*normal[1] + (grdU1[0] + grdU0[1])*normal[0]); + } +private: + int comp; + double viscosity; +}; + +struct NormalStressP : TertiaryAbstractFunction<double, WorldVector<double>, double, double> +{ + NormalStressP(int comp_) : comp(comp_) {} + + double operator()(const WorldVector<double>& normal, const double& stress, const double& p) const + { + return stress-p*normal[comp]; + } +private: + int comp; +}; + + +struct VectorBC : AbstractFunction<double, WorldVector<double> > +{ + VectorBC(int comp_, DOFVector<WorldVector<double> >* velocity_) + : AbstractFunction<double, WorldVector<double> >(4), + comp(comp_), + velocity(velocity_) { + TEST_EXIT(velocity != NULL)("pointer auf DOFVector<WorldVector> ist NULL\n"); + } + + double operator()(const WorldVector<double>& x) const + { + WorldVector<double> p = x; + WorldVector<double> localVel = evalAtPoint<WorldVector<double> >(*velocity, p); + return localVel[comp]; + } +private: + int comp; + DOFVector<WorldVector<double> >* velocity; +}; + +///_______________________________________________________________________________________________________________________ + +class Elasticity_Obstacle : public LinearElasticity +{ +public: + typedef LinearElasticity super; + +public: + Elasticity_Obstacle(std::string name_) : super(name_), stress(NULL) {} + + ~Elasticity_Obstacle() + { + delete deformation; + delete deformationVelocity; + } + + void initData() + { + super::initData(); + dim = getMesh()->getDim(); + + stress = new DOFVector<WorldVector<double> >(getFeSpace(0), "stress"); + deformation = new DOFVector<WorldVector<double> >(getFeSpace(0), "deformation"); + deformationVelocity = new DOFVector<WorldVector<double> >(getFeSpace(dow), "deformation_velocity"); + } + + DOFVector<WorldVector<double> >* getDeformation() + { + return deformation; + } + + DOFVector<WorldVector<double> >* getDeformationVelocity() + { + return deformationVelocity; + } + + void setNormalStress(DOFVector<WorldVector<double> >* stress_) + { + boundaryStress = stress_; + } + + void transferInitialSolution(AdaptInfo* adaptInfo) + { + super::transferInitialSolution(adaptInfo); + calcDeformation(); + calcDeformationVelocity(); + } + + void initTimestep(AdaptInfo* adaptInfo) + { + super::initTimestep(adaptInfo); + TEST_EXIT(boundaryStress != NULL)("NULL-Pointer problem!\n"); + interpol_coords(*boundaryStress, *stress); + } + + void closeTimestep(AdaptInfo* adaptInfo) + { + super::closeTimestep(adaptInfo); + calcDeformation(); + calcDeformationVelocity(); + } + + void fillBoundaryConditions() + { +// super::fillBoundaryConditions(); + + AbstractFunction<double, WorldVector<double> > *zero = new AMDiS::Const<double, WorldVector<double> >(0.0); + double zeroValue = 0.0; + + // +--+ + // | | 10 + // 1| +========== + // | | + // +--+ + + for (int i = 0; i < dow; i++) { + prob->addDirichletBC(1, i, i, zero); + prob->addNeumannBC(10, i, i, new VectorBC(i, stress)); + } + } + +private: + DOFVector<WorldVector<double> >* deformation; + DOFVector<WorldVector<double> >* deformationVelocity; + DOFVector<WorldVector<double> >* stress; + DOFVector<WorldVector<double> >* boundaryStress; + + void calcDeformation() + { + if (dow == 1) + transformDOF(prob->getSolution()->getDOFVector(0), deformation, new AMDiS::Vec1WorldVec<double>); + else if (dow == 2) + transformDOF(prob->getSolution()->getDOFVector(0), prob->getSolution()->getDOFVector(1), deformation, new AMDiS::Vec2WorldVec<double>); + else if (dow == 3) + transformDOF(prob->getSolution()->getDOFVector(0), prob->getSolution()->getDOFVector(1), prob->getSolution()->getDOFVector(2), deformation, new AMDiS::Vec3WorldVec<double>); + } + + void calcDeformationVelocity() + { + if (dow == 1) + transformDOF(prob->getSolution()->getDOFVector(dow), deformationVelocity, new AMDiS::Vec1WorldVec<double>); + else if (dow == 2) + transformDOF(prob->getSolution()->getDOFVector(dow), prob->getSolution()->getDOFVector(dow+1), deformationVelocity, new AMDiS::Vec2WorldVec<double>); + else if (dow == 3) + transformDOF(prob->getSolution()->getDOFVector(dow), prob->getSolution()->getDOFVector(dow+1), prob->getSolution()->getDOFVector(dow+2), deformationVelocity, new AMDiS::Vec3WorldVec<double>); + } +}; + +///_______________________________________________________________________________________________________________________ + +class Elasticity_Fluid : public StandardBaseProblem +{ +public: + typedef StandardBaseProblem super; + +public: + Elasticity_Fluid(std::string name_) : super(name_), boundaryDeformation(NULL) {} + + ~Elasticity_Fluid() + { + delete deformation; + } + + void initData() + { + super::initData(); + dim = getMesh()->getDim(); + + deformation = new DOFVector<WorldVector<double> >(getFeSpace(0), "deformation"); + } + + DOFVector<WorldVector<double> >* getDeformation() + { + return deformation; + } + + void setDeformation(DOFVector<WorldVector<double> >* deformation_) + { + boundaryDeformation = deformation_; + } + + void transferInitialSolution(AdaptInfo* adaptInfo) + { + super::transferInitialSolution(adaptInfo); + calcDeformation(); + } + + void initTimestep(AdaptInfo* adaptInfo) + { + super::initTimestep(adaptInfo); + TEST_EXIT(boundaryDeformation != NULL)("NULL-Pointer problem!\n"); + interpol_coords(*boundaryDeformation, *deformation); + } + + void closeTimestep(AdaptInfo* adaptInfo) + { + super::closeTimestep(adaptInfo); + calcDeformation(); + } + + void fillOperators() + { + // ===== create matrix operator ===== + for (size_t i = 0; i < dow; i++) { + Operator *matrixOperator = new Operator(getFeSpace()); + matrixOperator->addTerm(new Simple_SOT); + prob->addMatrixOperator(matrixOperator, i, i); + } + } + + void fillBoundaryConditions() + { + super::fillBoundaryConditions(); + + AbstractFunction<double, WorldVector<double> > *zero = new AMDiS::Const<double, WorldVector<double> >(0.0); + double zeroValue = 0.0; + + // +--+ + // | | 10 + // 1| +========== + // | | + // +--+ + + for (int i = 0; i < dow; i++) { + prob->addDirichletBC(1, i, i, zero); + prob->addDirichletBC(2, i, i, zero); + prob->addDirichletBC(3, i, i, zero); + prob->addDirichletBC(4, i, i, zero); + prob->addDirichletBC(5, i, i, zero); + prob->addDirichletBC(10, i, i, new VectorBC(i, deformation)); + } + } + +private: + DOFVector<WorldVector<double> >* deformation; + DOFVector<WorldVector<double> >* boundaryDeformation; + + void calcDeformation() + { + if (dow == 1) + transformDOF(prob->getSolution()->getDOFVector(0), deformation, new AMDiS::Vec1WorldVec<double>); + else if (dow == 2) + transformDOF(prob->getSolution()->getDOFVector(0), prob->getSolution()->getDOFVector(1), deformation, new AMDiS::Vec2WorldVec<double>); + else if (dow == 3) + transformDOF(prob->getSolution()->getDOFVector(0), prob->getSolution()->getDOFVector(1), prob->getSolution()->getDOFVector(2), deformation, new AMDiS::Vec3WorldVec<double>); + } +}; + +///_______________________________________________________________________________________________________________________ + +class NS_Channel : public NavierStokes_TaylorHood +{ +public: + typedef NavierStokes_TaylorHood super; + +public: + NS_Channel(std::string name_) : super(name_), boundaryVelocity(NULL) {} + + ~NS_Channel() + { + delete inflowBC; + } + + void initData() + { + super::initData(); + stress = new DOFVector<WorldVector<double> >(getFeSpace(0), "stress"); + dim = getMesh()->getDim(); + } + + void solveInitialProblem(AdaptInfo* adaptInfo) + { + super::solveInitialProblem(adaptInfo); + + inflowBC->setTimePtr(adaptInfo->getTimePtr()); + } + + DOFVector<WorldVector<double> >* getNormalStress() + { + return stress; + } + + void setDeformationVelocity(DOFVector<WorldVector<double> >* deformationVel_) + { + boundaryVelocity = deformationVel_; + } + + void initTimestep(AdaptInfo* adaptInfo) + { + super::initTimestep(adaptInfo); + TEST_EXIT(boundaryVelocity != NULL)("NULL-Pointer problem!\n"); + interpol_coords(*boundaryVelocity, *velocity); + } + + void closeTimestep(AdaptInfo* adaptInfo) + { + super::closeTimestep(adaptInfo); + calcNormalStress(); + } + + void fillBoundaryConditions() + { + + // +------ 5 ------+ + // | | + // 2 # <--1 3 + // | | + // +------ 4 ------+ + + AbstractFunction<double, WorldVector<double> > *zero = new AMDiS::Const<double, WorldVector<double> >(0.0); + + + /// at rigid wall: no-slip boundary condition + for (size_t i = 0; i < dow; i++) { + getProblem(0)->addDirichletBC(1, i, i, zero); + getProblem(0)->addDirichletBC(10, i, i, new VectorBC(i, velocity)); + getProblem(0)->addDirichletBC(4, i, i, zero); + getProblem(0)->addDirichletBC(5, i, i, zero); + } + + double H = 4.1; + double Um = 1.5; + Parameters::get("mesh->H",H); + Parameters::get("ns->Um",Um); + inflowBC = new InflowBC(H,Um); + + /// at left wall: prescribed velocity + getProblem(0)->addDirichletBC(2, 0, 0, inflowBC); + getProblem(0)->addDirichletBC(2, 1, 1, zero); + getProblem(0)->addDirichletBC(3, 1, 1, zero); + } + +private: + DOFVector<WorldVector<double> >* stress; + DOFVector<WorldVector<double> >* boundaryVelocity; + + void calcNormalStress(BoundaryType boundaryType = 1) + { + const FiniteElemSpace* feSpace = getFeSpace(0); + Mesh* mesh = feSpace->getMesh(); + + WorldVector<DOFVector<WorldVector<double> >*> grdU; + for (size_t i = 0; i < dow; i++) { + grdU[i] = new DOFVector<WorldVector<double> >(getFeSpace(i), "grdU_i"); + getSolution()->getDOFVector(i)->getRecoveryGradient(grdU[i]); + } + + WorldVector<double> normal; + + std::map<DegreeOfFreedom, double> volume; + + const BasisFunction *basFcts = feSpace->getBasisFcts(); + int nBasisFcts = basFcts->getNumber(); + DimVec<double> bary(dim, DEFAULT_VALUE, (1.0 / (dim + 1.0))); + + TraverseStack stack; + ElInfo *elInfo = stack.traverseFirst(mesh, -1, + Mesh::CALL_LEAF_EL | Mesh::FILL_BOUND | Mesh::FILL_DET | Mesh::FILL_COORDS); + + mtl::dense_vector<double> localUh(nBasisFcts); + std::vector<DegreeOfFreedom> localIndices(nBasisFcts); + + while (elInfo) { + for (int face = 0; face < dim + 1; face++) { + if (elInfo->getBoundary(face) == boundaryType) { + elInfo->getNormal(face, normal); + double det = elInfo->getDet(); + basFcts->getLocalIndices(elInfo->getElement(), feSpace->getAdmin(), localIndices); + + for (int i = 0; i < nBasisFcts; i++) { + double p = (*getSolution()->getDOFVector(dow))[localIndices[i]]; + + for (int j = 0; j < Global::getGeo(WORLD); j++) { + double tmp = NormalStress(j, viscosity)(normal, (*grdU[0])[localIndices[i]], (*grdU[1])[localIndices[i]]); + double result = NormalStressP(j)(normal, tmp, p); + (*stress)[localIndices[i]][j] += result * det; + } + volume[localIndices[i]] += det; + } + } + } + + elInfo = stack.traverseNext(elInfo); + } + + std::map<DegreeOfFreedom, double>::iterator volIt; + + for (volIt = volume.begin(); volIt != volume.end(); ++volIt) { + for (int j = 0; j < Global::getGeo(WORLD); j++) { + (*stress)[volIt->first][j] *= 1.0 / volIt->second; + } + } + + for (size_t i = 0; i < dow; i++) + delete grdU[i]; + } + +// Polygon* obstacle; + InflowBC* inflowBC; + +}; + + +int main(int argc, char** argv) +{ FUNCNAME("main"); + + AMDiS::init(argc, argv); + + NS_Channel nsProb("ns"); + Elasticity_Obstacle elastProb("elasticity->obstacle"); + Elasticity_Fluid elastProb2("elasticity->fluid"); + + ElasticityNavierStokes<Elasticity_Obstacle, Elasticity_Fluid, NS_Channel> mainProb("main", &elastProb, &elastProb2, &nsProb); + + // Adapt-Infos + AdaptInfo adaptInfo("adapt", 7); + mainProb.initialize(&adaptInfo); + + // adaption loop - solve ch-prob and ns-prob + AdaptInstationary adaptInstat("adapt", mainProb, adaptInfo, mainProb, adaptInfo); + + // scale Mesh + double H = 4.1, L = 25.0; + Parameters::get("mesh->H",H); + Parameters::get("mesh->L",L); +// WorldVector<double> scale; scale[0] = L; scale[1] = H; +// Helpers::scaleMesh(nsProb.getMesh(), scale); + + ptime start_time = microsec_clock::local_time(); + int error_code = adaptInstat.adapt(); + time_duration td = microsec_clock::local_time()-start_time; + + MSG("elapsed time= %d sec\n", td.total_seconds()); + + AMDiS::finalize(); + + return error_code; +}; diff --git a/extensions/demo/src/fsi_explicit/navierStokes.h b/extensions/demo/src/fsi_explicit/navierStokes.h new file mode 100644 index 0000000000000000000000000000000000000000..5e1750459d7c2a2822716e92290b10b77e3c3e40 --- /dev/null +++ b/extensions/demo/src/fsi_explicit/navierStokes.h @@ -0,0 +1,43 @@ +/** \file navierStokes.h */ + +#ifndef NAVIER_STOKES_H +#define NAVIER_STOKES_H + +#include "AMDiS.h" +#include "GeometryTools.h" + +struct InflowBC : AbstractFunction<double, WorldVector<double> > +{ + InflowBC(double H_=4.1, double Um_=1.5) : H(H_), Um(Um_) {} + double operator()(const WorldVector<double> &x) const { + double vel = 4.0 * Um * x[1] * (H - x[1]) / sqr(H); + return (*time < 2.0 ? vel*(1.0 - cos(m_pi * (*time)/2.0))/2.0 : vel); + } + + void setTimePtr(double* time_) + { + time = time_; + } + +protected: + double H; + double Um; + double* time; +}; + + +struct MinWrapper : AbstractFunction<double, WorldVector<double> > +{ + MinWrapper(AbstractFunction<double, WorldVector<double> >* dist1_, AbstractFunction<double, WorldVector<double> >* dist2_) + : dist1(dist1_), dist2(dist2_) {} + + double operator()(const WorldVector<double>& x) const + { + return std::min((*dist1)(x), (*dist2)(x)); + } +private: + AbstractFunction<double, WorldVector<double> >* dist1; + AbstractFunction<double, WorldVector<double> >* dist2; +}; + +#endif