Demo: A 2-D transient diffusion code
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()); Vect<double> b(ms), u(ms); u.setName("Temperature"); |
Prescription pr(ms,data.getDataFile()); pr.get(INITIAL_FIELD,u); |
Vect<double> bc(ms), body_f(ms), bound_f(ms); |
DC2DT3 eq(ms); eq.setInput(INITIAL,u); |
TimeLoop { |
pr.get(BOUNDARY_CONDITION,bc,theTime); pr.get(SOURCE,body_f,theTime); pr.get(FLUX,bound_f,theTime); |
eq.setInput(BOUNDARY_CONDITION,bc); eq.setInput(SOURCE,body_f); eq.setInput(FLUX,bound_f); |
eq.run(TRANSIENT_ONE_STEP); |
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.