From 81f2ac09fd3080a5c317f295d4e6712fd3f06442 Mon Sep 17 00:00:00 2001 From: Samuel Melchior <samuel.melchior@uclouvain.be> Date: Tue, 15 Dec 2009 09:13:00 +0000 Subject: [PATCH] 1D lua --- Solver/TESTCASES/Advection1D.lua | 53 ++++++++++++++++++++++++++++++++ Solver/TESTCASES/WavePulse.lua | 2 +- Solver/dgGroupOfElements.cpp | 5 ++- Solver/dgSystemOfEquations.cpp | 4 +-- 4 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 Solver/TESTCASES/Advection1D.lua diff --git a/Solver/TESTCASES/Advection1D.lua b/Solver/TESTCASES/Advection1D.lua new file mode 100644 index 0000000000..c85e108ecd --- /dev/null +++ b/Solver/TESTCASES/Advection1D.lua @@ -0,0 +1,53 @@ +model = GModel () +model:load ('edge.geo') +--model:mesh (1) +--model:save ('edge_new.msh') +model:load ('edge_new.msh') +dg = dgSystemOfEquations (model) +dg:setOrder(1) + + +-- conservation law +-- advection speed +v=fullMatrix(3,1); +v:set(0,0,0.15) +v:set(1,0,0) +v:set(2,0,0) +-- diffusivity +nu=fullMatrix(1,1); +nu:set(0,0,0) + +dg:setConservationLaw('AdvectionDiffusion',createFunction.constant(v),createFunction.constant(nu)) + +-- boundary condition +outside=fullMatrix(1,1) +outside:set(0,0,0.) +dg:addBoundaryCondition('Left','OutsideValues',createFunction.constant(outside)) +dg:addBoundaryCondition('Right','OutsideValues',createFunction.constant(outside)) + +dg:setup() + +-- initial condition +function initial_condition( _x , _f ) + xyz = fullMatrix(_x) + f = fullMatrix(_f) + for i=0,xyz:size1()-1 do + x = xyz:get(i,0) + y = xyz:get(i,1) + z = xyz:get(i,2) + f:set (i, 0, math.exp(-100*((x+0.8)^2))) + end +end +dg:L2Projection(createFunction.lua(1,'initial_condition','XYZ')) + +dg:exportSolution('output/Adv1D_00000') + +-- main loop +n = 5 +for i=1,100*n do + norm = dg:RK44(0.03) + if (i % n == 0) then + print('iter',i,norm) + dg:exportSolution(string.format("output/Adv1D-%05d", i)) + end +end diff --git a/Solver/TESTCASES/WavePulse.lua b/Solver/TESTCASES/WavePulse.lua index 02dc142988..46da82fa2d 100644 --- a/Solver/TESTCASES/WavePulse.lua +++ b/Solver/TESTCASES/WavePulse.lua @@ -49,7 +49,7 @@ for i=1,1000 do norm = DG:RK44(dt) print('*** ITER ***',i,norm) if (i % 10 == 0) then - DG:exportSolution(string.format("solution-%03d", i)) + DG:exportSolution(string.format("output/solution-%03d", i)) end end diff --git a/Solver/dgGroupOfElements.cpp b/Solver/dgGroupOfElements.cpp index b2c8a303d6..01059e5a74 100644 --- a/Solver/dgGroupOfElements.cpp +++ b/Solver/dgGroupOfElements.cpp @@ -278,7 +278,7 @@ void dgGroupOfFaces::init(int pOrder) { } // there is nothing on the right for boundary groups if(_fsRight){ - fullMatrix<double> &intRight=_integrationPointsLeft[_closuresIdRight[i]]; + fullMatrix<double> &intRight=_integrationPointsRight[_closuresIdRight[i]]; for (int j=0; j<intRight.size1(); j++){ _fsRight->df((intRight)(j,0),(intRight)(j,1),(intRight)(j,2),g); getElementRight(i)->getJacobian ((intRight)(j,0), (intRight)(j,1), (intRight)(j,2), jac); @@ -314,6 +314,7 @@ dgGroupOfFaces::dgGroupOfFaces (const dgGroupOfElements &elGroup, std::string bo if(boundaryTag=="") throw; _fsLeft=_groupLeft.getElement(0)->getFunctionSpace(pOrder); + _closuresLeft = _fsLeft->vertexClosure; _fsRight=NULL; for(int i=0; i<elGroup.getNbElements(); i++){ MElement &el = *elGroup.getElement(i); @@ -374,6 +375,8 @@ dgGroupOfFaces::dgGroupOfFaces (const dgGroupOfElements &elGroup, int pOrder): switch (_groupLeft.getElement(0)->getDim()) { case 1 : { std::map<MVertex*,int> vertexMap; + _closuresLeft = _fsLeft->vertexClosure; + _closuresRight = _fsRight->vertexClosure; for(int i=0; i<elGroup.getNbElements(); i++){ MElement &el = *elGroup.getElement(i); for (int j=0; j<el.getNumVertices(); j++){ diff --git a/Solver/dgSystemOfEquations.cpp b/Solver/dgSystemOfEquations.cpp index 6372d32dea..8ba9b2b7b1 100644 --- a/Solver/dgSystemOfEquations.cpp +++ b/Solver/dgSystemOfEquations.cpp @@ -53,7 +53,7 @@ dgSystemOfEquations::dgSystemOfEquations(lua_State *L){ LuaGModel *obj =Luna<LuaGModel>::check(L, 1); if (!obj)throw; _gm = obj->getGModel(); - _dimension = _gm->getNumRegions() ? 3 : 2; + _dimension = _gm->getNumRegions() ? 3 : _gm->getNumFaces() ? 2 : 1; _solution = 0; } @@ -194,7 +194,7 @@ void dgSystemOfEquations::export_solution_as_is (const std::string &name){ fullMatrix<double> sol = getSolutionProxy (i, iElement); fprintf(f,"%d %d",num,sol.size1()); for (int k=0;k<sol.size1();++k) { - fprintf(f,"%12.5E ",sol(k,ICOMP)); + fprintf(f," %12.5E ",sol(k,ICOMP)); } fprintf(f,"\n"); } -- GitLab