![]() |
![]() |
![]() |
This code is developed to solve 2-D transient (time dependent) heat transfer problems. We use here an alternative to the presentation of the previous demo code. More specifically, we show how to perform all important phases of a time dependent finite element code.
#include "OFELI.h" #include "Therm.h" using namespace OFELI; |
IPF data("ttd2 - 1.1",argv[1]); theFinalTime = data.getMaxTime(); theTimeStep = data.getTimeStep(); int save_flag = data.getSave(); int verbose = data.getVerbose(); |
IOField pf(data.getPlotFile(),IOField::OUT); |
Mesh ms(data.getMeshFile()); SkSMatrix<double> A(ms); Vect<double> b(ms), u(ms); |
Prescription pr(ms,data.getDataFile()); pr.get(INITIAL_FIELD,u); |
Vect<double> bc(ms), body_f(ms), bound_f(ms); |
TimeLoop { b = 0; |
pr.get(BOUNDARY_CONDITION,bc,time); pr.get(SOURCE,body_f,time); pr.get(FLUX,bound_f,time); |
MeshElements(ms) { |
DC2DT3 eq(theElement,u,theTime); eq.LCapacity(double(1./theTimeStep)); eq.Diffusion(); eq.BodyRHS(body_f); |
if (step==1) eq.ElementAssembly(A); eq.ElementAssembly(b); } |
MeshSides(ms) { DC2DT3 eq(theSide,u,theTime); eq.BoundaryRHS(Vect<double>(theSide,bound_f)); eq.SideAssembly(b); } |
A.Prescribe(b,bc,theStep-1); A.solve(b); u = b; |
u.setTime(theTime); if (theStep%save_flag == 0) pf.put(u); } |
<?xml version="1.0" encoding="ISO-8859-1" ?> <OFELI_File> <info> <title>Finite Element Mesh of a beam</title> <date>January 1, 2010</date> <author>R. Touzani</author> </info> <Project name="proj"> <mesh_file>proj-5x10.m</mesh_file> <plot_file>proj.pl</plot_file> <time_step>0.01</time_step> <max_time>1.0</max_time> <verbose>0</verbose> <output>0</output> <save>1</save> </Project> <Prescription> <BoundaryCondition code="1">-tanh(10)*(exp(t)-1)</BoundaryCondition> <BoundaryCondition code="2"> tanh(10)*(exp(t)-1)</BoundaryCondition> <Source>tanh(10*y)*(exp(t)+200*(exp(t)-1)/(cosh(10*y)*cosh(10*y)))</Source> </Prescription> </OFELI_File> |
In summary, this file looks mainly like the one in the previous example. We show here in addition how to prescribe a boundary condition by an algebraic expression. The OFELI library is equipped with the expression parser fparser. We use here the variables x, y, z, and t for space and time variables.
![]() |
![]() |
![]() |