Tutorial example demonstrating how to use StabFem for a time-stepping calculation (BASIC)
This tutorial script is designed as a support for chapter 4 of the StabFem manual available here
We show how to compute the solution of a time-dependant through time-stepping and how to import, plot, and organise the results in a database.
This example is based on the "Thermal Conduction" example in the FreeFem manual. The mesh generator is Mesh_ThermalConduction.edp and the freefem solver is TimeStepper_ThermalConduction.edp
In this example the database management is disabled so that the steps of the computation can be followed easily. On the other hand in this mode only one computation can be launched, if you launch a new on the previous results will not be kept.
After studying this example it is recommended to go to the next example SCRIPT_ThermalConduction_Advanced.m which shows how to manage several simulations using the database.
Contents
Initialization
close all; addpath('../../SOURCES_MATLAB'); SF_Start('verbosity',4); SF_DataBase('disable'); % this is to disable the database management for this simple tutorial.
NOTICE - Initialization already done WARNING - Detected verbosity = 4 in Publish mode ; not recommended ! switching to 2 instead WARNING - Disabling database management. Some advanced functionalities may not work properly
Chapter 1 : creating mesh
As usual, a mesh is created by calling a FreeFem++ mesh-creator program.
ffmesh = SF_Mesh('Mesh_ThermalConduction.edp');
Plot this mesh
figure; SF_Plot(ffmesh);

Chapter 2 : Launching a simple time-stepping simulation
This is done in two steps : a/ launching the code
Run1 = SF_TS_Launch('TimeStepper_ThermalConduction.edp','Mesh',ffmesh,'Options',{'Niter',100,'alpha',.1});
WARNING - DataBase management disabled ; some advanced functionalities may not work WARNING - MoveDataFile : DID NOT FIND auxiliary file ./mesh.ff2m
Before importing the results let's check the content of the working directory to see the files created:
ls
autorun.m freefem++.pref freefemwarning.txt html mesh.msh Mesh_ThermalConduction.edp SCRIPT_ThermalConduction_Advanced.m SCRIPT_ThermalConduction_Basic.m SCRIPT_ThermalConduction_Basic.oldcache SCRIPT_ThermalConduction_ForManual.m SF_AutoInclude.idp SF_Custom.idp SF_Geom.edp Simulation.log Snapshot_00000010.ff2m Snapshot_00000010.txt Snapshot_00000020.ff2m Snapshot_00000020.txt Snapshot_00000030.ff2m Snapshot_00000030.txt Snapshot_00000040.ff2m Snapshot_00000040.txt Snapshot_00000050.ff2m Snapshot_00000050.txt Snapshot_00000060.ff2m Snapshot_00000060.txt Snapshot_00000070.ff2m Snapshot_00000070.txt Snapshot_00000080.ff2m Snapshot_00000080.txt Snapshot_00000090.ff2m Snapshot_00000090.txt Snapshot_00000100.ff2m Snapshot_00000100.txt TimeStats.ff2m TimeStats.txt TimeStepper_ThermalConduction.edp TimeStepper_ThermalConduction_short.edp TS.status WORK
Note that the FreeFem++ solver will create a series of files 'Snapshot_#######.txt / .ff2m' corresponding to the snapshots plus a couple of file 'TimeStats.txt/.ff2m' corresponding to time-statistics.
Note that in the no-database mode, all output files are written in working directory './'
b/ Checking the contents
[stats,snapshots] = SF_TS_Check(Run1)
################################################################################# .... CONTENT OF ./ : Simulation completed Time-stepping simulation started 16-Jul-2021 00:34:17 Solver : TimeStepper_ThermalConduction.edp Mesh file name : ./mesh.msh Initial condition file name : Argument string : -Niter 100 -alpha 0.1 -> Found time series spaning from iter = 1 to 100 ; time = 0.1 to 10 -> Found 10 Snapshots in this folder. Importing them.... WARNING - FUNCTION SFcore_ImportMesh.m : DO NOT FIND COMPLEMENTARY FILE ././mesh.ff2m WARNING - Launching "Generate_Aux_Files_for_Mesh.edp" to generate it WARNING - MoveDataFile : DID NOT FIND auxiliary file ././mesh.ff2m stats = struct with fields: filename: './TimeStats.txt' DataDescription: 'Time-series of a Thermal insteady problem ' datatype: 'TimeStatistics' datastoragemode: 'columns' datadescriptors: 't,u3,u6,iter' t: [100x1 double] u3: [100x1 double] u6: [100x1 double] iter: [100x1 double] status: 'completed' snapshots = 1x10 struct array with fields: filename DataDescription datatype datastoragemode datadescriptors meshfilename mesh alpha INDEXING t it T
The results are imported as object which can be used simply for plotting and postprocessing.
Plotting a few snapshots;
figure; subplot(3,1,1); SF_Plot(snapshots(1),'T','title','Field at t=1','contour','on'); subplot(3,1,2); SF_Plot(snapshots(2),'T','title','Field at t=2','contour','on'); subplot(3,1,3); SF_Plot(snapshots(4),'T','title','Field at t=4','contour','on');

Plotting time-series of T(0.5,3)
figure; plot(stats.t,stats.u3);xlabel('t');ylabel('T(3,.5)');

[[PUBLISH]] -> this tag is here to tell gitlab to automatically generate a web page from this script
% fclose(fopen('SCRIPT_ThermalConduction_Basic.success','w+'));