diff --git a/AMDiS/src/Boundary.h b/AMDiS/src/Boundary.h index 40c7634bf7741624aca36ed32600215abe085dcb..26e60034009091acb8b6bf9ddc9918cc2db2c01a 100644 --- a/AMDiS/src/Boundary.h +++ b/AMDiS/src/Boundary.h @@ -28,12 +28,9 @@ namespace AMDiS { - /// Contains boundary constants + /// Flag to denote interior boundaryies. typedef enum { - INTERIOR = 0, /**< interior => no boundary (b = 0) */ - DIRICHLET = 1, /**< dirichlet boundary (b > 0) */ - NEUMANN = -1, /**< neumann boundary (-100 < b < 0) */ - ROBIN = -100 /**< robin boundary (b <= -100) */ + INTERIOR = 0 } BoundaryConstants; /// Type specifier for the different boundary types diff --git a/AMDiS/src/io/MacroInfo.cc b/AMDiS/src/io/MacroInfo.cc index a1a853aef5fd6312fc2e0cab519ee4ce0c04d3c6..520bfc7733840a5c4adb8ea864b71b40672a3cf7 100644 --- a/AMDiS/src/io/MacroInfo.cc +++ b/AMDiS/src/io/MacroInfo.cc @@ -491,12 +491,16 @@ namespace AMDiS { void MacroInfo::dirichletBoundary() { + // === Traverse all elements and set either interior boundaries, if the === + // === element has a neighbour on this bound. Otherwise set some arbitrary === + // === Dirichlet boundary conditions. === + for (int i = 0; i < static_cast<int>(mel.size()); i++) for (int k = 0; k < mesh->getGeo(NEIGH); k++) if (mel[i]->neighbour[k]) mel[i]->boundary[k] = INTERIOR; else - mel[i]->boundary[k] = DIRICHLET; + mel[i]->boundary[k] = 1; } @@ -521,13 +525,17 @@ namespace AMDiS { ++melIt, i++) { for (int j = 0; j < mesh->getGeo(NEIGH); j++) { if ((*melIt)->getBoundary(j) != INTERIOR) { - if ((*melIt)->getBoundary(j) >= DIRICHLET) { + if ((*melIt)->getBoundary(j) > 0) { + // Here we have some Dirichlet boundary conditions. + int j1 = mel_vertex[i][(j + 1) % 3]; int j2 = mel_vertex[i][(j + 2) % 3]; bound[j1] = std::max(bound[j1], (*melIt)->getBoundary(j)); bound[j2] = std::max(bound[j2], (*melIt)->getBoundary(j)); - } else if ((*melIt)->getBoundary(j) <= NEUMANN) { + } else { + // Otherwise we have some Neumann boundary conditions. + int j1 = mel_vertex[i][(j + 1) % 3]; int j2 = mel_vertex[i][(j + 2) % 3]; diff --git a/demo/init/ball.dat.2d b/demo/init/ball.dat.2d index 51d27cb8fc34a0657a2a530c8170306237d8a445..dbaaba4b54a973456138295d0c94bef100707919 100644 --- a/demo/init/ball.dat.2d +++ b/demo/init/ball.dat.2d @@ -26,16 +26,7 @@ ball->adapt->max iteration: 4 ball->adapt->info: 8 ball->output->filename: ball - ball->output->ParaView format: 1 - -ball->output->TecPlot format: 0 -ball->output->TecPlot ext: .tec - -ball->output->AMDiS format: 0 -ball->output->AMDiS mesh ext: .mesh -ball->output->AMDiS data ext: .dat - ball->output->append index: 0 ball->output->index length: 6 ball->output->index decimals: 3 diff --git a/demo/init/ball.dat.3d b/demo/init/ball.dat.3d index 0a9dabf7500918e735e40cf356d93f5d6b3ef8c8..7221bdd63dc1e2232a90533aa39a4a007aa455d9 100644 --- a/demo/init/ball.dat.3d +++ b/demo/init/ball.dat.3d @@ -16,10 +16,6 @@ ball->estimator: 0 ball->marker->strategy: 0 % 0: no adaption 1: GR 2: MS 3: ES 4:GERS ball->output->filename: output/ball - ball->output->ParaView format: 1 -ball->output->AMDiS format: 0 -ball->output->AMDiS mesh ext: .mesh -ball->output->AMDiS data ext: .dat diff --git a/demo/init/bunny.init b/demo/init/bunny.init index 4acd888d738b179f0e39a67f4cc9ff620ac032d9..0b0af6f5ba6f1138fbeb70cb367931177470fa1d 100644 --- a/demo/init/bunny.init +++ b/demo/init/bunny.init @@ -20,27 +20,18 @@ bunny->estimator->error norm: 1 % 1: H1_NORM, 2: L2_NORM bunny->estimator->C1: 0.1 % constant of jump residual bunny->marker->strategy: 0 % 0: no adaption 1: GR 2: MS 3: ES 4:GERS -bunny->marker->MSGamma: 0.5 - -bunny->adapt->tolerance: 1e-8 -bunny->adapt->refine bisections: 1 -bunny->adapt->max iteration: 0 -bunny->adapt->info: 8 - -bunny->output->filename: bunny_fixed - -bunny->output->ParaView format: 1 - -bunny->output->TecPlot format: 0 -bunny->output->TecPlot ext: .tec - -bunny->output->AMDiS format: 0 -bunny->output->AMDiS mesh ext: .mesh -bunny->output->AMDiS data ext: .dat - -bunny->output->append index: 0 -bunny->output->index length: 6 -bunny->output->index decimals: 3 +bunny->marker->MSGamma: 0.5 + +bunny->adapt->tolerance: 1e-8 +bunny->adapt->refine bisections: 1 +bunny->adapt->max iteration: 0 +bunny->adapt->info: 8 + +bunny->output->filename: bunny_fixed +bunny->output->ParaView format: 1 +bunny->output->append index: 0 +bunny->output->index length: 6 +bunny->output->index decimals: 3 WAIT: 1 diff --git a/demo/init/heat.dat.1d b/demo/init/heat.dat.1d index df8c3970f9bae2ef36ac6ba2ab7dbc7823c325c2..1776487c0406d4b56921d7af0731a8686a8b5aaf 100644 --- a/demo/init/heat.dat.1d +++ b/demo/init/heat.dat.1d @@ -4,7 +4,7 @@ heatMesh->macro file name: ./macro/macro.stand.1d heatMesh->global refinements: 0 heat->space->polynomial degree: 1 -heat->space->dim: 1 +heat->space->dim: 1 heat->space->mesh: heatMesh heat->space->solver: cg diff --git a/demo/init/neumann.dat.2d b/demo/init/neumann.dat.2d index 808c2334ef16c4a82385fa700f4577dfd2d63923..ef5a47f09e6a97cf0401c7f197b84f6909cf168e 100644 --- a/demo/init/neumann.dat.2d +++ b/demo/init/neumann.dat.2d @@ -24,10 +24,5 @@ neumann->adapt->tolerance: 1e-2 neumann->adapt->max iteration: 100 neumann->adapt->refine bisections: 2 -neumann->output->filename: output/neumann - +neumann->output->filename: output/neumann neumann->output->ParaView format: 1 - -neumann->output->AMDiS format: 0 -neumann->output->AMDiS mesh ext: .mesh -neumann->output->AMDiS data ext: .dat diff --git a/demo/init/parametric.dat.3d b/demo/init/parametric.dat.3d index d1b87fb2721c06e7af0b12ba7947fbf7cf129530..67962d5e2d1bfe37228f3f19c9d55c485596d9eb 100644 --- a/demo/init/parametric.dat.3d +++ b/demo/init/parametric.dat.3d @@ -19,7 +19,7 @@ parametric->estimator->error norm: 1 % 1: H1_NORM, 2: L2_NORM parametric->estimator->C1: 0.1 % constant of jump residual parametric->marker->strategy: 2 % 0: no adaption 1: GR 2: MS 3: ES 4:GERS -parametric->marker->MSGamma: 0.5 +parametric->marker->MSGamma: 0.5 parametric->adapt->tolerance: 1e-8 parametric->adapt->refine bisections: 1 @@ -27,19 +27,10 @@ parametric->adapt->max iteration: 8 parametric->adapt->info: 8 parametric->output->filename: parametric - parametric->output->ParaView format: 1 - -parametric->output->TecPlot format: 0 -parametric->output->TecPlot ext: .tec - -parametric->output->AMDiS format: 0 -parametric->output->AMDiS mesh ext: .mesh -parametric->output->AMDiS data ext: .dat - -parametric->output->append index: 0 -parametric->output->index length: 6 -parametric->output->index decimals: 3 +parametric->output->append index: 0 +parametric->output->index length: 6 +parametric->output->index decimals: 3 WAIT: 1 diff --git a/demo/init/periodic.dat.1d b/demo/init/periodic.dat.1d index b829698cb69f01a6f07998a76aeded8b869c5a87..b7929bd640b50625389b298cbee00f05f0222379 100644 --- a/demo/init/periodic.dat.1d +++ b/demo/init/periodic.dat.1d @@ -1,11 +1,8 @@ dimension of world: 1 periodicMesh->macro file name: ./macro/periodic.macro.1d -periodicMesh->global refinements: 0 - periodicMesh->periodic file: ./init/periodic.per.1d - -periodicMesh->preserve coarse dofs: 0 +periodicMesh->global refinements: 0 periodic->mesh: periodicMesh periodic->dim: 1 @@ -26,24 +23,15 @@ periodic->estimator->C1: 0.0 % constant of jump residual periodic->marker->strategy: 2 % 0: no adaption 1: GR 2: MS 3: ES 4:GERS periodic->marker->MSGamma: 0.5 -periodic->adapt->tolerance: 1e-6 -periodic->adapt->max iteration: 14 +periodic->adapt->tolerance: 1e-6 +periodic->adapt->max iteration: 14 periodic->adapt->refine bisections: 2 -periodic->adapt->coarsen allowed: 0 - -periodic->output->filename: periodic +periodic->adapt->coarsen allowed: 0 +periodic->output->filename: periodic periodic->output->ParaView format: 1 - -periodic->output->TecPlot format: 0 -periodic->output->TecPlot ext: .tec - -periodic->output->AMDiS format: 0 -periodic->output->AMDiS mesh ext: .mesh -periodic->output->AMDiS data ext: .dat - -periodic->output->append index: 0 -periodic->output->index length: 6 -periodic->output->index decimals: 3 +periodic->output->append index: 0 +periodic->output->index length: 6 +periodic->output->index decimals: 3 WAIT: 1 diff --git a/demo/init/periodic.dat.2d b/demo/init/periodic.dat.2d index 2fee81c59fc79c6b556b5e647a7f1acb494bc2f9..d07bccd208b2cd5e4fbbba991859e9f199fda094 100644 --- a/demo/init/periodic.dat.2d +++ b/demo/init/periodic.dat.2d @@ -1,11 +1,8 @@ dimension of world: 2 -periodicMesh->macro file name: ./macro/periodic.macro.2d -periodicMesh->global refinements: 0 - -periodicMesh->periodic file: ./init/periodic.per.2d - -periodicMesh->preserve coarse dofs: 0 +periodicMesh->macro file name: ./macro/periodic.macro.2d +periodicMesh->periodic file: ./init/periodic.per.2d +periodicMesh->global refinements: 0 periodic->mesh: periodicMesh periodic->dim: 2 @@ -26,24 +23,14 @@ periodic->estimator->C1: 0.0 % constant of jump residual periodic->marker->strategy: 2 % 0: no adaption 1: GR 2: MS 3: ES 4:GERS periodic->marker->MSGamma: 0.5 -periodic->adapt->tolerance: 1e-2 -periodic->adapt->max iteration: 100 +periodic->adapt->tolerance: 1e-2 +periodic->adapt->max iteration: 100 periodic->adapt->refine bisections: 2 -periodic->adapt->coarsen allowed: 0 - -periodic->output->filename: output/periodic +periodic->adapt->coarsen allowed: 0 +periodic->output->filename: output/periodic periodic->output->ParaView format: 1 - -periodic->output->TecPlot format: 0 -periodic->output->TecPlot ext: .tec - -periodic->output->AMDiS format: 0 -periodic->output->AMDiS mesh ext: .mesh -periodic->output->AMDiS data ext: .dat - -periodic->output->append index: 0 -periodic->output->index length: 6 -periodic->output->index decimals: 3 +periodic->output->index length: 6 +periodic->output->index decimals: 3 WAIT: 0 diff --git a/demo/init/periodic.dat.3d b/demo/init/periodic.dat.3d index 25f40f44e0040cc51634662e448456e5d3ed7fb2..f2537c79a7b6379040afe5aab718a37b060b1f77 100644 --- a/demo/init/periodic.dat.3d +++ b/demo/init/periodic.dat.3d @@ -1,11 +1,8 @@ dimension of world: 3 -periodicMesh->macro file name: ./macro/periodic.macro.3d -periodicMesh->global refinements: 0 - -periodicMesh->periodic file: ./init/periodic.per.3d - -periodicMesh->preserve coarse dofs: 0 +periodicMesh->macro file name: ./macro/periodic.macro.3d +periodicMesh->periodic file: ./init/periodic.per.3d +periodicMesh->global refinements: 0 periodic->mesh: periodicMesh periodic->dim: 3 @@ -26,24 +23,15 @@ periodic->estimator->C1: 0.0 % constant of jump residual periodic->marker->strategy: 2 % 0: no adaption 1: GR 2: MS 3: ES 4:GERS periodic->marker->MSGamma: 0.5 -periodic->adapt->tolerance: 1e-6 -periodic->adapt->max iteration: 100 +periodic->adapt->tolerance: 1e-6 +periodic->adapt->max iteration: 100 periodic->adapt->refine bisections: 3 -periodic->adapt->coarsen allowed: 0 - -periodic->output->filename: periodic +periodic->adapt->coarsen allowed: 0 +periodic->output->filename: periodic periodic->output->ParaView format: 1 - -periodic->output->TecPlot format: 0 -periodic->output->TecPlot ext: .tec - -periodic->output->AMDiS format: 0 -periodic->output->AMDiS mesh ext: .mesh -periodic->output->AMDiS data ext: .dat - -periodic->output->append index: 0 -periodic->output->index length: 6 -periodic->output->index decimals: 3 +periodic->output->append index: 0 +periodic->output->index length: 6 +periodic->output->index decimals: 3 WAIT: 1 diff --git a/demo/init/sphere.dat.3d b/demo/init/sphere.dat.3d index de70ca0d67368a2f2a120a0b28bc6b02a102a673..8eb23bf68d800188d282a29eb521b65650d3cd84 100644 --- a/demo/init/sphere.dat.3d +++ b/demo/init/sphere.dat.3d @@ -15,10 +15,7 @@ sphere->solver->left precon: diag sphere->estimator: 0 sphere->marker->strategy: 0 -sphere->output->filename: output/sphere -sphere->output->ParaView format: 1 -sphere->output->AMDiS format: 0 -sphere->output->AMDiS mesh ext: .mesh -sphere->output->AMDiS data ext: .dat +sphere->output->filename: output/sphere +sphere->output->ParaView format: 1 diff --git a/demo/init/torus.dat.3d b/demo/init/torus.dat.3d index 0f774581eea620f1f04a915d47926e8e44461bea..22ea8574e4fef7dbed823622e92053c16f3a50ab 100644 --- a/demo/init/torus.dat.3d +++ b/demo/init/torus.dat.3d @@ -14,9 +14,6 @@ torus->solver->left precon: diag torus->estimator: 0 torus->marker->strategy: 0 -torus->output->filename: output/torus +torus->output->filename: output/torus torus->output->ParaView format: 1 -torus->output->AMDiS format: 0 -torus->output->AMDiS mesh ext: .mesh -torus->output->AMDiS data ext: .dat diff --git a/demo/init/vecheat.dat.1d b/demo/init/vecheat.dat.1d index d458f91bbfc22242b78ca4f805b707905e02cfae..77c0f4cd6ccadb2a4c1eb2f4a95d338416248762 100644 --- a/demo/init/vecheat.dat.1d +++ b/demo/init/vecheat.dat.1d @@ -3,9 +3,9 @@ dimension of world: 1 vecheatMesh->macro file name: ./macro/macro.stand.1d vecheatMesh->global refinements: 0 -vecheat->space->polynomial degree[0]: 1 -vecheat->space->polynomial degree[1]: 1 - +vecheat->space->polynomial degree[0]: 1 +vecheat->space->polynomial degree[1]: 1 +vecheat->space->dim: 1 vecheat->space->mesh: vecheatMesh vecheat->space->components: 2 @@ -29,25 +29,15 @@ vecheat->space->estimator[1]->C3: 1.0 vecheat->theta: 1.0 -vecheat->adapt[0]->tolerance: 0.01 -vecheat->adapt[1]->tolerance: 0.01 - -vecheat->adapt->timestep: 0.01 - -vecheat->adapt->max iteration: 2 -vecheat->adapt->refine bisections: 1 -vecheat->adapt->coarsen bisections: 1 +vecheat->adapt[0]->tolerance: 0.01 +vecheat->adapt[1]->tolerance: 0.01 +vecheat->adapt[0]->time tolerance: 0.01 +vecheat->adapt[1]->time tolerance: 0.01 -vecheat->adapt[0]->rel space error: 0.5 -vecheat->adapt[0]->rel time error: 0.5 -vecheat->adapt[0]->info: 8 -vecheat->adapt[0]->coarsen allowed: 1 % 0|1 - -vecheat->adapt[1]->rel space error: 0.5 -vecheat->adapt[1]->rel time error: 0.5 -vecheat->adapt[1]->info: 8 -vecheat->adapt[1]->coarsen allowed: 1 % 0|1 +vecheat->adapt->timestep: 0.01 +vecheat->adapt->start time: 0.0 +vecheat->adapt->end time: 1.0 vecheat->adapt->strategy: 1 % 0=explicit, 1=implicit vecheat->adapt->max iteration: 1 @@ -58,8 +48,6 @@ vecheat->initial->marker[1]->strategy: 2 % 0=none, 1=GR, 2=MS, 3=ES, 4= vecheat->initial->adapt->max iteration: 10 vecheat->initial->adapt->info: 8 -vecheat->space->dim: 1 - vecheat->space->marker[0]->strategy: 3 % 0=none, 1=GR, 2=MS, 3=ES, 4=GERS vecheat->space->marker[0]->ESTheta: 0.9 vecheat->space->marker[0]->ESThetaC: 0.05 @@ -70,35 +58,19 @@ vecheat->space->marker[1]->ESTheta: 0.9 vecheat->space->marker[1]->ESThetaC: 0.05 vecheat->space->marker[1]->info: 8 -vecheat->space->output[0]->filename: vecheat0_ - -vecheat->space->output[0]->ParaView format: 0 - -vecheat->space->output[0]->TecPlot format: 0 -vecheat->space->output[0]->TecPlot ext: .tec - -vecheat->space->output[0]->AMDiS format: 0 -vecheat->space->output[0]->AMDiS mesh ext: .mesh -vecheat->space->output[0]->AMDiS data ext: .dat - -vecheat->space->output[0]->append index: 1 -vecheat->space->output[0]->index length: 6 -vecheat->space->output[0]->index decimals: 3 - -vecheat->space->output[1]->filename: vecheat1_ - -vecheat->space->output[1]->ParaView format: 0 - -vecheat->space->output[1]->TecPlot format: 0 -vecheat->space->output[1]->TecPlot ext: .tec - -vecheat->space->output[1]->AMDiS format: 0 -vecheat->space->output[1]->AMDiS mesh ext: .mesh -vecheat->space->output[1]->AMDiS data ext: .dat - -vecheat->space->output[1]->append index: 1 -vecheat->space->output[1]->index length: 6 -vecheat->space->output[1]->index decimals: 3 +vecheat->space->output[0]->filename: vecheat0_ +vecheat->space->output[0]->ParaView format: 1 +vecheat->space->output[0]->ParaView animation: 1 +vecheat->space->output[0]->append index: 1 +vecheat->space->output[0]->index length: 6 +vecheat->space->output[0]->index decimals: 3 + +vecheat->space->output[1]->filename: vecheat1_ +vecheat->space->output[1]->ParaView format: 1 +vecheat->space->output[1]->ParaView animation: 1 +vecheat->space->output[1]->append index: 1 +vecheat->space->output[1]->index length: 6 +vecheat->space->output[1]->index decimals: 3 WAIT: 0 diff --git a/demo/init/vecheat.dat.2d b/demo/init/vecheat.dat.2d index 2e31cbde3f977b0263ea21f1276ff3a51cf4a044..3c86895f896afbe445bcb4868b182ea566fc7577 100644 --- a/demo/init/vecheat.dat.2d +++ b/demo/init/vecheat.dat.2d @@ -3,9 +3,9 @@ dimension of world: 2 vecheatMesh->macro file name: ./macro/macro.stand.2d vecheatMesh->global refinements: 5 -vecheat->space->polynomial degree[0]: 1 -vecheat->space->polynomial degree[1]: 1 - +vecheat->space->polynomial degree[0]: 1 +vecheat->space->polynomial degree[1]: 1 +vecheat->space->dim: 2 vecheat->space->mesh: vecheatMesh vecheat->space->components: 2 @@ -32,21 +32,15 @@ vecheat->theta: 1.0 vecheat->adapt->refine bisections: 2 vecheat->adapt->coarsen bisections: 2 -vecheat->adapt[0]->tolerance: 0.001 -vecheat->adapt[0]->tolerance: 0.001 - -vecheat->adapt[0]->time tolerance: 0.1 -vecheat->adapt[1]->time tolerance: 0.1 - -vecheat->adapt->timestep: 0.01 - -vecheat->adapt->max iteration: 2 +vecheat->adapt[0]->tolerance: 0.001 +vecheat->adapt[0]->tolerance: 0.001 +vecheat->adapt[0]->time tolerance: 0.1 +vecheat->adapt[1]->time tolerance: 0.1 -vecheat->adapt[0]->info: 8 -vecheat->adapt[0]->coarsen allowed: 1 % 0|1 +vecheat->adapt->timestep: 0.01 +vecheat->adapt->start time: 0.0 +vecheat->adapt->end time: 1.0 -vecheat->adapt[1]->info: 8 -vecheat->adapt[1]->coarsen allowed: 1 % 0|1 vecheat->adapt->strategy: 1 % 0=explicit, 1=implicit vecheat->adapt->max iteration: 1 @@ -57,8 +51,6 @@ vecheat->initial->marker[1]->strategy: 2 % 0=none, 1=GR, 2=MS, 3=ES, 4= vecheat->initial->adapt->max iteration: 10 vecheat->initial->adapt->info: 8 -vecheat->space->dim: 2 - vecheat->space->marker[0]->strategy: 3 % 0=none, 1=GR, 2=MS, 3=ES, 4=GERS vecheat->space->marker[0]->ESTheta: 0.9 vecheat->space->marker[0]->ESThetaC: 0.05 @@ -69,11 +61,20 @@ vecheat->space->marker[1]->ESTheta: 0.9 vecheat->space->marker[1]->ESThetaC: 0.05 vecheat->space->marker[1]->info: 8 -vecheat->space->output->filename: vecheat_ -vecheat->space->output->ParaView format: 1 -vecheat->space->output->append index: 1 -vecheat->space->output->index length: 6 -vecheat->space->output->index decimals: 3 +vecheat->space->output[0]->filename: vecheat0_ +vecheat->space->output[0]->ParaView format: 1 +vecheat->space->output[0]->ParaView animation: 1 +vecheat->space->output[0]->append index: 1 +vecheat->space->output[0]->index length: 6 +vecheat->space->output[0]->index decimals: 3 + +vecheat->space->output[1]->filename: vecheat1_ +vecheat->space->output[1]->ParaView format: 1 +vecheat->space->output[1]->ParaView animation: 1 +vecheat->space->output[1]->append index: 1 +vecheat->space->output[1]->index length: 6 +vecheat->space->output[1]->index decimals: 3 + WAIT: 0 diff --git a/demo/init/vecheat.dat.3d b/demo/init/vecheat.dat.3d index d8e908eaa95c293781c9c50438f08f3348a73d2f..95a3950f75d719d29d4bdc246ae444ab9575f104 100644 --- a/demo/init/vecheat.dat.3d +++ b/demo/init/vecheat.dat.3d @@ -1,20 +1,20 @@ dimension of world: 3 vecheatMesh->macro file name: ./macro/macro.stand.3d -vecheatMesh->global refinements: 0 - -vecheat->space->polynomial degree[0]: 1 -vecheat->space->polynomial degree[1]: 1 +vecheatMesh->global refinements: 3 +vecheat->space->polynomial degree[0]: 1 +vecheat->space->polynomial degree[1]: 1 +vecheat->space->dim: 3 vecheat->space->mesh: vecheatMesh vecheat->space->components: 2 -vecheat->space->solver: cg +vecheat->space->solver: umfpack vecheat->space->solver->max iteration: 1000 vecheat->space->solver->tolerance: 1.e-8 -vecheat->space->solver->info: 8 -vecheat->space->solver->left precon: diag +vecheat->space->solver->info: 2 +vecheat->space->solver->left precon: no vecheat->space->solver->right precon: no vecheat->space->estimator[0]: residual @@ -29,25 +29,18 @@ vecheat->space->estimator[1]->C3: 1.0 vecheat->theta: 1.0 -vecheat->adapt->refine bisections: 3 -vecheat->adapt->coarsen bisections: 3 - -vecheat->adapt[0]->tolerance: 0.01 -vecheat->adapt[1]->tolerance: 0.01 - -vecheat->adapt->timestep: 0.01 +vecheat->adapt->refine bisections: 2 +vecheat->adapt->coarsen bisections: 2 -vecheat->adapt->max iteration: 2 +vecheat->adapt[0]->tolerance: 0.001 +vecheat->adapt[0]->tolerance: 0.001 +vecheat->adapt[0]->time tolerance: 0.1 +vecheat->adapt[1]->time tolerance: 0.1 -vecheat->adapt[0]->rel space error: 0.5 -vecheat->adapt[0]->rel time error: 0.5 -vecheat->adapt[0]->info: 8 -vecheat->adapt[0]->coarsen allowed: 1 % 0|1 +vecheat->adapt->timestep: 0.01 +vecheat->adapt->start time: 0.0 +vecheat->adapt->end time: 1.0 -vecheat->adapt[1]->rel space error: 0.5 -vecheat->adapt[1]->rel time error: 0.5 -vecheat->adapt[1]->info: 8 -vecheat->adapt[1]->coarsen allowed: 1 % 0|1 vecheat->adapt->strategy: 1 % 0=explicit, 1=implicit vecheat->adapt->max iteration: 1 @@ -58,8 +51,6 @@ vecheat->initial->marker[1]->strategy: 2 % 0=none, 1=GR, 2=MS, 3=ES, 4= vecheat->initial->adapt->max iteration: 10 vecheat->initial->adapt->info: 8 -vecheat->space->dim: 3 - vecheat->space->marker[0]->strategy: 3 % 0=none, 1=GR, 2=MS, 3=ES, 4=GERS vecheat->space->marker[0]->ESTheta: 0.9 vecheat->space->marker[0]->ESThetaC: 0.05 @@ -70,35 +61,20 @@ vecheat->space->marker[1]->ESTheta: 0.9 vecheat->space->marker[1]->ESThetaC: 0.05 vecheat->space->marker[1]->info: 8 -vecheat->space->output[0]->filename: vecheat0_ - -vecheat->space->output[0]->ParaView format: 0 - -vecheat->space->output[0]->TecPlot format: 0 -vecheat->space->output[0]->TecPlot ext: .tec - -vecheat->space->output[0]->AMDiS format: 0 -vecheat->space->output[0]->AMDiS mesh ext: .mesh -vecheat->space->output[0]->AMDiS data ext: .dat - -vecheat->space->output[0]->append index: 1 -vecheat->space->output[0]->index length: 6 -vecheat->space->output[0]->index decimals: 3 - -vecheat->space->output[1]->filename: vecheat1_ - -vecheat->space->output[1]->ParaView format: 0 - -vecheat->space->output[1]->TecPlot format: 0 -vecheat->space->output[1]->TecPlot ext: .tec +vecheat->space->output[0]->filename: vecheat0_ +vecheat->space->output[0]->ParaView format: 1 +vecheat->space->output[0]->ParaView animation: 1 +vecheat->space->output[0]->append index: 1 +vecheat->space->output[0]->index length: 6 +vecheat->space->output[0]->index decimals: 3 -vecheat->space->output[1]->AMDiS format: 0 -vecheat->space->output[1]->AMDiS mesh ext: .mesh -vecheat->space->output[1]->AMDiS data ext: .dat +vecheat->space->output[1]->filename: vecheat1_ +vecheat->space->output[1]->ParaView format: 1 +vecheat->space->output[1]->ParaView animation: 1 +vecheat->space->output[1]->append index: 1 +vecheat->space->output[1]->index length: 6 +vecheat->space->output[1]->index decimals: 3 -vecheat->space->output[1]->append index: 1 -vecheat->space->output[1]->index length: 6 -vecheat->space->output[1]->index decimals: 3 WAIT: 0 diff --git a/demo/src/heat.cc b/demo/src/heat.cc index c889d3ae843f99acd41b76e8f3060a2b93bf6339..5debfdf7eaf728f8e9b66e62b3d06f194ecfa69e 100644 --- a/demo/src/heat.cc +++ b/demo/src/heat.cc @@ -174,13 +174,6 @@ int main(int argc, char** argv) adaptInfoInitial); - // ===== create boundary functions ===== - G *boundaryFct = new G; - boundaryFct->setTimePtr(heat.getTime()); - heat.setExactSolution(boundaryFct); - heatSpace.addDirichletBC(1, boundaryFct); - - // ===== create rhs functions ===== int degree = heatSpace.getFeSpace()->getBasisFcts()->getDegree(); F *rhsFct = new F(degree); @@ -213,6 +206,13 @@ int main(int argc, char** argv) heatSpace.addVectorOperator(F); + // ===== create boundary functions ===== + G *boundaryFct = new G; + boundaryFct->setTimePtr(heat.getTime()); + heat.setExactSolution(boundaryFct); + heatSpace.addDirichletBC(1, boundaryFct); + + // ===== start adaption loop ===== int errorCode = adaptInstat.adapt(); diff --git a/demo/src/vecheat.cc b/demo/src/vecheat.cc index 815c268523e7303f34cce1b0996fdb5e44740afb..a1df991676de0ce9d6b1212e5e3a22665a863825 100644 --- a/demo/src/vecheat.cc +++ b/demo/src/vecheat.cc @@ -30,7 +30,7 @@ public: /// Implementation of AbstractFunction::operator(). double operator()(const WorldVector<double>& x) const { - int dim = x.getSize(); + int dim = Global::getGeo(WORLD); double r2 = x * x; double ux = sin(M_PI * (*timePtr)) * exp(-10.0 * r2); double ut = M_PI * cos(M_PI * (*timePtr)) * exp(-10.0 * r2); @@ -68,9 +68,8 @@ public: /// set the time in all needed functions! void setTime(AdaptInfo *adaptInfo) { + ProblemInstat::setTime(adaptInfo); rhsTime = adaptInfo->getTime() - (1-theta) * adaptInfo->getTimestep(); - boundaryTime = adaptInfo->getTime(); - tau1 = 1.0 / adaptInfo->getTimestep(); } // ===== initial problem methods ===================================== @@ -79,7 +78,7 @@ public: void solveInitialProblem(AdaptInfo *adaptInfo) { int size = problemStat->getNumComponents(); - boundaryTime = rhsTime = 0.0; + rhsTime = 0.0; for (int i = 0; i < size; i++) { problemStat->getMesh(i)->dofCompress(); problemStat->getSolution()->getDOFVector(i)->interpol(boundaryFct); @@ -91,7 +90,6 @@ public: { int size = problemStat->getNumComponents(); double errMax, errSum; - boundaryTime = 0.0; for (int i = 0; i < size; i++) { errSum = Error<double>::L2Err(*boundaryFct, @@ -157,24 +155,12 @@ public: return &theta1; } - /// Returns pointer to \ref tau1 - double *getTau1Ptr() - { - return &tau1; - } - /// Returns pointer to \ref rhsTime. - double *getRHSTimePtr() + double *getRhsTimePtr() { return &rhsTime; } - /// Returns pointer to \ref theta1. - double *getBoundaryTimePtr() - { - return &boundaryTime; - } - /// Returns \ref boundaryFct; AbstractFunction<double, WorldVector<double> > *getBoundaryFct() { @@ -188,15 +174,9 @@ protected: /// theta - 1 double theta1; - /// 1.0 / timestep - double tau1; - /// time for right hand side functions. double rhsTime; - /// time for boundary functions. - double boundaryTime; - /// Pointer to boundary function. Needed for initial problem. AbstractFunction<double, WorldVector<double> > *boundaryFct; }; @@ -237,22 +217,14 @@ int main(int argc, char** argv) vecheat, adaptInfoInitial); - double fac = *(vecheat.getThetaPtr()) != 0.0 ? 1.0 : 1.0e-3; - int nRefine = 0; - int dim = vecheatSpace.getMesh(0)->getDim(); - GET_PARAMETER(0, vecheatSpace.getMesh(0)->getName() - + "->global refinements", "%d", &nRefine); - if (*(vecheat.getThetaPtr()) == 0.5) - *(adaptInfo.getTimestepPtr()) *= fac * pow(2.0, static_cast<double>(-nRefine) / dim); - else - *(adaptInfo.getTimestepPtr()) *= fac * pow(2.0, -nRefine); - // ===== create rhs functions ===== F *rhsFct0 = new F(vecheatSpace.getFeSpace(0)->getBasisFcts()->getDegree()); - rhsFct0->setTimePtr(vecheat.getRHSTimePtr()); + rhsFct0->setTimePtr(vecheat.getRhsTimePtr()); + F *rhsFct1 = new F(vecheatSpace.getFeSpace(1)->getBasisFcts()->getDegree()); - rhsFct1->setTimePtr(vecheat.getRHSTimePtr()); + rhsFct1->setTimePtr(vecheat.getRhsTimePtr()); + // ===== create operators ===== double one = 1.0; @@ -282,17 +254,17 @@ int main(int argc, char** argv) C00.addZeroOrderTerm(new Simple_ZOT); C00.setUhOld(vecheat.getOldSolution()->getDOFVector(0)); vecheatSpace.addMatrixOperator(C00, 0, 0, - vecheat.getTau1Ptr(), vecheat.getTau1Ptr()); - vecheatSpace.addVectorOperator(C00, 0, vecheat.getTau1Ptr(), vecheat.getTau1Ptr()); + vecheat.getInvTau(), vecheat.getInvTau()); + vecheatSpace.addVectorOperator(C00, 0, vecheat.getInvTau(), vecheat.getInvTau()); Operator C11(vecheatSpace.getFeSpace(1), vecheatSpace.getFeSpace(1)); C11.addZeroOrderTerm(new Simple_ZOT); C11.setUhOld(vecheat.getOldSolution()->getDOFVector(1)); vecheatSpace.addMatrixOperator(C11, 1, 1, - vecheat.getTau1Ptr(), vecheat.getTau1Ptr()); + vecheat.getInvTau(), vecheat.getInvTau()); vecheatSpace.addVectorOperator(C11, 1, - vecheat.getTau1Ptr(), vecheat.getTau1Ptr()); + vecheat.getInvTau(), vecheat.getInvTau()); // create RHS operator Operator F0(vecheatSpace.getFeSpace(0)); @@ -303,13 +275,15 @@ int main(int argc, char** argv) F1.addZeroOrderTerm(new CoordsAtQP_ZOT(rhsFct1)); vecheatSpace.addVectorOperator(F1, 1); + // ===== create boundary functions ===== G *boundaryFct = new G; - boundaryFct->setTimePtr(vecheat.getBoundaryTimePtr()); + boundaryFct->setTimePtr(vecheat.getTime()); vecheat.setBoundaryFct(boundaryFct); - vecheatSpace.addDirichletBC(DIRICHLET, 0, 0, boundaryFct); - vecheatSpace.addDirichletBC(DIRICHLET, 1, 1, boundaryFct); + vecheatSpace.addDirichletBC(1, 0, 0, boundaryFct); + vecheatSpace.addDirichletBC(1, 1, 1, boundaryFct); + // ===== start adaption loop ===== int errorCode = adaptInstat.adapt(); diff --git a/doc/tutorial/heat.tex b/doc/tutorial/heat.tex index cac2cb35734fa6502bbe694d418dae19ff5755de..b7ef5118642d4db8a8a7a27855c8f7250b962c09 100644 --- a/doc/tutorial/heat.tex +++ b/doc/tutorial/heat.tex @@ -218,7 +218,7 @@ Now, we define some getting functions and the private member variables: \begin{lstlisting}{} double *getThetaPtr() { return θ }; double *getTheta1Ptr() { return &theta1; }; - double *getRHSTimePtr() { return &rhsTime; }; + double *getRhsTimePtr() { return &rhsTime; }; private: double theta; @@ -281,7 +281,7 @@ The object \verb+heatSpace+ is handed as as \verb+ProblemTimeInterface+ (implemented by class \verb+ProblemInstatScal+). -The functions $f$ and $g$ are declared in the following way: +The function $g$ is declared in the following way: \begin{lstlisting}{} // ===== create boundary functions ===== G *boundaryFct = new G; @@ -343,18 +343,11 @@ error estimation. The inverse of the current timestep is returned by the function \verb+getInvTau()+, which is a member of the class \verb+ProblemInstat+. -Finally, the operator for the right hand side function $f$ is added -and the adaptation loop is started: - \begin{lstlisting}{} // create RHS operator Operator F(heatSpace.getFeSpace()); F.addZeroOrderTerm(new CoordsAtQP_ZOT(rhsFct)); heatSpace.addVectorOperator(F); - - // ===== start adaption loop ===== - int errorCode = adaptInstat.adapt(); -} \end{lstlisting} \verb+CoordsAtQP_ZOT+ is a zero order term that evaluates a given @@ -364,6 +357,23 @@ side, just $fct(x, t)$. Note that the old solution isn't given to the operator here. Otherwise the term would represent $fct(x, t) \cdot u^{old}$ on the right hand side. +Finally, the function $g$ is created. This function is used for both, +as the exact solution in the initial problem and as the Dirichlet +boundary function. To the last, the adaption loop is started: +\begin{lstlisting}{} + // ===== create boundary functions ===== + G *boundaryFct = new G; + boundaryFct->setTimePtr(heat.getTime()); + heat.setExactSolution(boundaryFct); + heatSpace.addDirichletBC(1, boundaryFct); + + // ===== start adaption loop ===== + int errorCode = adaptInstat.adapt(); +} +\end{lstlisting} +Note that boundaries must be set after all operators were defined. + + \subsection{Parameter file} \label{s:heat parameter} diff --git a/doc/tutorial/introduction.tex b/doc/tutorial/introduction.tex index c6e8ae29fddaf22804a8962e233206953e85015b..6de73ab04b1034de32cd87f59b464f65c3e37036 100644 --- a/doc/tutorial/introduction.tex +++ b/doc/tutorial/introduction.tex @@ -26,9 +26,8 @@ are described:\begin{itemize} refinements. \item {\bf Output}: The AMDiS results are written to output files that contain the final mesh and the problem solution on this mesh. The - output can be visualized by proper tools ({\it CrystalClear, - ParaView, TecPlot}). In the output section, the visualized problem - results are shown and discussed. + output can be visualized with {\it ParaView}. In the output section, + the visualized problem results are shown and discussed. \end{itemize} To avoid unnecessary repetitions, not every aspect of every example is described, but only those aspects that have not appeared in previous diff --git a/doc/tutorial/tutorial.pdf b/doc/tutorial/tutorial.pdf index 5590fcc562874b813585f67d244f3f09f233b972..3fa0a9c2990bd457d5f2afa242ce031fef647b0c 100644 Binary files a/doc/tutorial/tutorial.pdf and b/doc/tutorial/tutorial.pdf differ