From 938dc0f4f5d0bc6f18e2b588cf2885c338d4e929 Mon Sep 17 00:00:00 2001 From: Petr Krysl Date: Fri, 23 Feb 2024 10:12:05 -0800 Subject: [PATCH] start adding example --- docs/assets/T4NAFEMS--T3-solution.png | Bin 0 -> 69939 bytes docs/src/guide/guide.md | 3 + .../steady_state/2-d/T4NAFEMS_examples.jl | 174 ++++++------------ 3 files changed, 64 insertions(+), 113 deletions(-) create mode 100644 docs/assets/T4NAFEMS--T3-solution.png diff --git a/docs/assets/T4NAFEMS--T3-solution.png b/docs/assets/T4NAFEMS--T3-solution.png new file mode 100644 index 0000000000000000000000000000000000000000..6ea17166b3cc5acce51951cb695bbec89f327d13 GIT binary patch literal 69939 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 G@P7f>Ii4E; literal 0 HcmV?d00001 diff --git a/docs/src/guide/guide.md b/docs/src/guide/guide.md index b8342c6..07c8976 100644 --- a/docs/src/guide/guide.md +++ b/docs/src/guide/guide.md @@ -39,4 +39,7 @@ Algorithms typically (not always) accept a single argument, `modeldata`, a dicti There is an implementation of an algorithm for steady-state heat conduction. +## Example + +![Alt Visualization of the temperature field](T4NAFEMS--T3-solution.png "Temperature field raised as a surface above the mesh") diff --git a/examples/steady_state/2-d/T4NAFEMS_examples.jl b/examples/steady_state/2-d/T4NAFEMS_examples.jl index 45136fe..977299a 100644 --- a/examples/steady_state/2-d/T4NAFEMS_examples.jl +++ b/examples/steady_state/2-d/T4NAFEMS_examples.jl @@ -5,10 +5,9 @@ using FinEtoolsHeatDiff.AlgoHeatDiffModule using FinEtools.AlgoBaseModule: richextrapol function T4NAFEMS_T3_algo() - ## Two-dimensional heat transfer with convection: convergence study - # - - ## Description + # ## Two-dimensional heat transfer with convection: convergence study + + # ### Description # # Consider a plate of uniform thickness, measuring 0.6 m by 1.0 m. On one # short edge the temperature is fixed at 100 °C, and on one long edge the @@ -19,79 +18,71 @@ function T4NAFEMS_T3_algo() # There is no internal generation of heat. Calculate the temperature 0.2 m # along the un-insulated long side, measured from the intersection with the # fixed temperature side. The reference result is 18.25 °C. - - ## + # # The reference temperature at the point A is 18.25 °C according to the - # NAFEMS publication ( hich cites the book Carslaw, H.S. and J.C. Jaeger, + # NAFEMS publication (which cites the book Carslaw, H.S. and J.C. Jaeger, # Conduction of Heat in Solids. 1959: Oxford University Press). - - ## + # # The present tutorial will investigate the reference temperature and it # will attempt to estimate the limit value more precisely using a # sequence of meshes and Richardson's extrapolation. - ## Solution - # - + # ### Solution + println(""" NAFEMS benchmark. Two-dimensional heat transfer with convection: convergence study. Solution with linear triangles. - Version: 05/29/2017 + Version: 02/23/2024 """) - - kappa = [52.0 0; 0 52.0] * phun("W/(M*K)") # conductivity matrix - h = 750 * phun("W/(M^2*K)")# surface heat transfer coefficient - Width = 0.6 * phun("M")# Geometrical dimensions + # Conductivity matrix + kappa = [52.0 0; 0 52.0] * phun("W/(M*K)") + # Surface heat transfer coefficient + h = 750 * phun("W/(M^2*K)") + # Geometrical dimensions + Width = 0.6 * phun("M") Height = 1.0 * phun("M") HeightA = 0.2 * phun("M") Thickness = 0.1 * phun("M") tolerance = Width / 1000 + # Create a material model. m = MatHeatDiff(kappa) + # Five progressively refined models will be created and solved. modeldata = nothing - resultsTempA = FFlt[] - for nref = 1:5 - t0 = time() - - # The mesh is created from two triangles to begin with + resultsTempA = Float64[] + params = Float64[] + for nref in 2:6 + # The mesh is created from two rectangular blocks to begin with. fens, fes = T3blockx([0.0, Width], [0.0, HeightA]) fens2, fes2 = T3blockx([0.0, Width], [HeightA, Height]) + # The meshes are then glued into a single entity. fens, newfes1, fes2 = mergemeshes(fens, fes, fens2, fes2, tolerance) fes = cat(newfes1, fes2) - # Refine the mesh desired number of times - for ref = 1:nref + # Refine the mesh desired number of times. + for ref in 1:nref fens, fes = T3refine(fens, fes) end + # The boundary is extracted. bfes = meshboundary(fes) - - # Define boundary conditions - - ## # The prescribed temperature is applied along edge 1 (the bottom - # edge in Figure 1).. - - l1 = selectnode(fens; box = [0.0 Width 0.0 0.0], inflate = tolerance) - essential1 = FDataDict("node_list" => l1, "temperature" => 100.0) - - ## - # The convection boundary condition is applied along the edges - # 2,3,4. The elements along the boundary are quadratic line - # elements L3. The order-four Gauss quadrature is sufficiently - # accurate. - l2 = selectelem(fens, bfes; box = [Width Width 0.0 Height], inflate = tolerance) - l3 = selectelem(fens, bfes; box = [0.0 Width Height Height], inflate = tolerance) + # edge in Figure 1). + list1 = selectnode(fens; box = [0.0 Width 0.0 0.0], inflate = tolerance) + essential1 = FDataDict("node_list" => list1, "temperature" => 100.0) + # The convection (surface heat transfer) boundary condition is applied + # along the edges 2,3,4. + list2 = selectelem(fens, bfes; box = [Width Width 0.0 Height], inflate = tolerance) + list3 = selectelem(fens, bfes; box = [0.0 Width Height Height], inflate = tolerance) + # The boundary integrals are evaluated using a surface FEMM. cfemm = FEMMHeatDiffSurf( - IntegDomain(subset(bfes, vcat(l2, l3)), GaussRule(1, 3), Thickness), + IntegDomain(subset(bfes, vcat(list2, list3)), GaussRule(1, 3), Thickness), h, ) convection1 = FDataDict("femm" => cfemm, "ambient_temperature" => 0.0) - - # The interior + # The interior integrals are evaluated using a volume FEMM. femm = FEMMHeatDiff(IntegDomain(fes, TriRule(3), Thickness), m) region1 = FDataDict("femm" => femm) - # Make the model data modeldata = FDataDict( "fens" => fens, @@ -99,86 +90,43 @@ function T4NAFEMS_T3_algo() "essential_bcs" => [essential1], "convection_bcs" => [convection1], ) - # Call the solver modeldata = AlgoHeatDiffModule.steadystate(modeldata) - - println("Total time elapsed = ", time() - t0, "s") - - l4 = selectnode(fens; box = [Width Width HeightA HeightA], inflate = tolerance) - - geom = modeldata["geom"] + # Locate the node at the point A [coordinates (Width,HeightA)]. + list4 = selectnode(fens; box=[Width Width HeightA HeightA], inflate=tolerance) + # Collect the temperature at the point A. Temp = modeldata["temp"] - - ## - # Collect the temperature at the point A [coordinates - # (Width,HeightA)]. - println("$(Temp.values[l4][1])") - push!(resultsTempA, Temp.values[l4][1]) + println("$(Temp.values[list4][1])") + push!(resultsTempA, Temp.values[list4][1]) + push!(params, 1.0 / 2^nref) end - ## # These are the computed results for the temperature at point A: println("$( resultsTempA )") + # Richardson extrapolation can be used to estimate the limit. + solnestim, beta, c, residual = + richextrapol(resultsTempA[(end-2):end], params[(end-2):end]) + println("Solution estimate = $(solnestim)") + println("Convergence rate estimate = $(beta)") # Postprocessing geom = modeldata["geom"] Temp = modeldata["temp"] regions = modeldata["regions"] vtkexportmesh( - "T4NAFEMS--T3.vtk", + "T4NAFEMS--T3-solution.vtk", connasarray(regions[1]["femm"].integdomain.fes), - [geom.values Temp.values / 100], + [geom.values (Temp.values / 100)], FinEtools.MeshExportModule.VTK.T3; scalars = [("Temperature", Temp.values)], ) vtkexportmesh( - "T4NAFEMS--T3--base.vtk", + "T4NAFEMS--T3-mesh.vtk", connasarray(regions[1]["femm"].integdomain.fes), - [geom.values 0.0 * Temp.values / 100], + geom.values, FinEtools.MeshExportModule.VTK.T3, ) - - # ## - # # Richardson extrapolation is used to estimate the true solution from the - # # results for the finest three meshes. - # [xestim, beta] = richextrapol(results(end-2:end),mesh_sizes(end-2:end)); - # disp(['Estimated true solution for temperature at A: ' num2str(xestim) ' degrees']) - - # ## - # # Plot the estimated true error. - # figure - # loglog(mesh_sizes,abs(results-xestim)/xestim,'bo-','linewidth',3) - # grid on - # xlabel('log(mesh size)') - # ylabel('log(|estimated temperature error|)') - # set_graphics_defaults - - # ## - # # The estimated true error has a slope of approximately 4 on the log-log - # scale. - # ## - # # Plot the absolute values of the approximate error (differences of - # # successive solutions). - # figure - # loglog(mesh_sizes(2:end),abs(diff(results)),'bo-','linewidth',3) - # Thanksgrid on - # xlabel('log(mesh size)') - # ylabel('log(|approximate temperature error|)') - # set_graphics_defaults - - ## Discussion - # - ## - # The last segment of the approximate error curve is close to the slope of - # the estimated true error. Nevertheless, it would have been more - # reassuring if the three successive approximate errors were located more - # closely on a straight line. - - ## - # The use of uniform mesh-size meshes is sub optimal: it would be more - # efficient to use graded meshes. The tutorial pub_T4NAFEMS_conv_graded - # addresses use of graded meshes in convergence studies. + true end # T4NAFEMS_T3_algo function T4NAFEMS_T6_algo() @@ -228,8 +176,8 @@ function T4NAFEMS_T6_algo() m = MatHeatDiff(kappa) modeldata = nothing - resultsTempA = FFlt[] - params = FFlt[] + resultsTempA = Float64[] + params = Float64[] for nref = 3:7 t0 = time() @@ -251,18 +199,18 @@ function T4NAFEMS_T6_algo() # The prescribed temperature is applied along edge 1 (the bottom # edge in Figure 1).. - l1 = selectnode(fens; box = [0.0 Width 0.0 0.0], inflate = tolerance) - essential1 = FDataDict("node_list" => l1, "temperature" => 100.0) + list1 = selectnode(fens; box = [0.0 Width 0.0 0.0], inflate = tolerance) + essential1 = FDataDict("node_list" => list1, "temperature" => 100.0) ## # The convection boundary condition is applied along the edges # 2,3,4. The elements along the boundary are quadratic line - # elements L3. The order-four Gauss quadrature is sufficiently + # elements list3. The order-four Gauss quadrature is sufficiently # accurate. - l2 = selectelem(fens, bfes; box = [Width Width 0.0 Height], inflate = tolerance) - l3 = selectelem(fens, bfes; box = [0.0 Width Height Height], inflate = tolerance) + list2 = selectelem(fens, bfes; box = [Width Width 0.0 Height], inflate = tolerance) + list3 = selectelem(fens, bfes; box = [0.0 Width Height Height], inflate = tolerance) cfemm = FEMMHeatDiffSurf( - IntegDomain(subset(bfes, vcat(l2, l3)), GaussRule(1, 3), Thickness), + IntegDomain(subset(bfes, vcat(list2, list3)), GaussRule(1, 3), Thickness), h, ) convection1 = FDataDict("femm" => cfemm, "ambient_temperature" => 0.0) @@ -284,7 +232,7 @@ function T4NAFEMS_T6_algo() println("Total time elapsed = ", time() - t0, "s") - l4 = selectnode(fens; box = [Width Width HeightA HeightA], inflate = tolerance) + list4 = selectnode(fens; box = [Width Width HeightA HeightA], inflate = tolerance) geom = modeldata["geom"] Temp = modeldata["temp"] @@ -292,7 +240,7 @@ function T4NAFEMS_T6_algo() ## # Collect the temperature at the point A [coordinates # (Width,HeightA)]. - push!(resultsTempA, Temp.values[l4][1]) + push!(resultsTempA, Temp.values[list4][1]) push!(params, 1.0 / 2^nref) end