#define PI 3.14159265358979323846
#define TWOPI 6.283185307179586476925287
#define SECSINYEAR 3.155692608e+07
-//#define ABS(a) ((a) < 0 ? -(a) : (a))
//double factorial(int n)
//{
# Introduction
-In this tutorial, the studied problem is to simulate temperature distributions of a sample under a moving laser. Light penetrates the substrate without loss. The top-covered thin-film is, however, a light absorbing material. For simplicity, the thin-film is assumed to be TiO$_2$ mixed with silver nanoparticles, which supports light heating of the material by absorbing light energy. For this tutorial, we only consider the isotropic absorption. Figure \ref{fgr:s1} illustrates the sketch of the problem. The absorption coefficient is assumed to be $10^4 m^{-1}$. The substrate is glass. The thickness of the thin-film is assumed to be 400 nm. The spot size at the top of thin film is $20 \mu m$ at $e^{-2}$. The writing speed is assumed to be 10 mm/s. The laser power is 0.4 W. The time step is set as 10 $\mu s$. The initial position of laser center is $-50 \mu m$ with 50 $\mu m$ distance away from the left boundary to avoid boundary effects.
+In this tutorial, the studied problem is to simulate temperature distributions of a sample under a moving laser. Light penetrates the substrate without loss. The top-covered thin-film is, however, a light absorbing material. For simplicity, the thin-film is assumed to be TiO$_2$ mixed with silver nanoparticles, which supports light heating of the material by absorbing light energy. For this tutorial, we only consider the isotropic absorption. The Figure below illustrates the sketch of the problem. The absorption coefficient is assumed to be $10^4 m^{-1}$. The substrate is glass. The thickness of the thin-film is assumed to be 400 nm. The spot size at the top of thin film is $20 \mu m$ at $e^{-2}$. The writing speed is assumed to be 10 mm/s. The laser power is 0.4 W. The time step is set as 10 $\mu s$. The initial position of laser center is $-50 \mu m$ with 50 $\mu m$ distance away from the left boundary to avoid boundary effects.
## Illustration of the problem
\int T T^{'}_{i} dV &= u_{i}
@f}
-\noindent let
+Let
@f{align*}
M &= \int \rho C_m T^{'_i} T^{'_j} dV \\
A & = \int k \nabla T^{'_i} \cdot \nabla T^{'_j} dV \\
![threads](./images/threads-2d.png)
# References
-<code>
-
+```
@article{ma2021numerical,
title={Numerical study of laser micro-and nano-processing of nanocomposite porous materials},
author={Ma, Hongfeng},
year={1947},
organization={Cambridge University Press}
}
-
-</code>
+```
// The implementation of this function is almost identical to step-20.
// We use @ref ComponentSelectFunction as masks to use the right
- // solution component (velocity or pressure) and @ref integrate_difference
+ // solution component (velocity or pressure) and `integrate_difference()`
// to compute the errors. Since we also want to compute Hdiv seminorm of the
// velocity error, one must provide gradients in the <code>ExactSolution</code>
// class implementation to avoid exceptions. The only noteworthy thing here
#include <deal.II/base/point.h>
#include <deal.II/base/function.h>
-// @sect{Equation data}
+// @sect3{Equation data}
// In the next namespace, we declare and implement suitable functions that may be used for the initial and boundary conditions
//
};
- // @sect{ <code>NavierStokesProjectionOperator::NavierStokesProjectionOperator</code> }
+ // @sect3{ <code>NavierStokesProjectionOperator::NavierStokesProjectionOperator</code> }
// The following class sets effectively the weak formulation of the problems for the different stages
// and for both velocity and pressure.
}
- // @sect{The <code>NavierStokesProjection</code> class}
+ // @sect3{The <code>NavierStokesProjection</code> class}
// Now we are ready for the main class of the program. It implements the calls to the various steps
// of the projection method for Navier-Stokes equations.
}
- // @sect{<code>NavierStokesProjection::compute_lift_and_drag</code>}
+ // @sect3{<code>NavierStokesProjection::compute_lift_and_drag</code>}
// This routine computes the lift and the drag forces in a non-dimensional framework
// (so basically for the classical coefficients, it is necessary to multiply by a factor 2).
}
- // @sect{ <code>NavierStokesProjection::refine_mesh</code>}
+ // @sect3{ <code>NavierStokesProjection::refine_mesh</code>}
// After finding a good initial guess on the coarse mesh, we hope to
// decrease the error through refining the mesh. We also need to transfer the current solution to the
}
- // @sect{ <code>NavierStokesProjection::run</code> }
+ // @sect3{ <code>NavierStokesProjection::run</code> }
// This is the time marching function, which starting at <code>t_0</code>
// advances in time using the projection method with time step <code>dt</code>
} // namespace NS_TRBDF2
-// @sect{ The main function }
+// @sect3{ The main function }
// The main function looks very much like in all the other tutorial programs. We first initialize MPI,
// we initialize the class 'NavierStokesProjection' with the dimension as template parameter and then
//
#include <deal.II/base/parameter_handler.h>
-// @sect{Run time parameters}
+// @sect3{Run time parameters}
//
// Since our method has several parameters that can be fine-tuned we put them
// into an external file, so that they can be determined at run-time.
std::vector<types::global_dof_index> element_indices_p_fluid;
//Declare an instance of dealii QGauss class (The Gauss-Legendre family of quadrature rules for numerical integration)
- //Gauss Points in element, with n quadrature points (in each space direction <dim> )
+ //Gauss Points in element, with n quadrature points (in each of the dim space directions)
const QGauss<dim> qf_cell;
//Gauss Points on element faces (used for definition of BCs)
const QGauss<dim - 1> qf_face;
Since the material is compressible, shear-locking is not exhibited by the
beam for low-order elements.
-#### Number of degrees of freedom
+### Number of degrees of freedom
Elements per edge | Q1 | Q2
:---------------: | :-------------: | :-------------:
### Boundary conditions
-In the numerical solution, the boundary conditions described in the [beginning](#problem) are imposed at the ends of the interval $I$. In addition, a homogeneous Neumann condition is applied to the function $d\lambda$ at the left boundary.
+In the numerical solution, the boundary conditions described in the beginning are imposed at the ends of the interval $I$. In addition, a homogeneous Neumann condition is applied to the function $d\lambda$ at the left boundary.
## Program
### Error estimation
-Integration of the [governing equations](#problem) over the real line gives the following relations:
+Integration of the governing equations over the real line gives the following relations:
@f{align*}{
u_l (1 - c) + \frac{\epsilon}{2} u_l^2 + \frac{\epsilon}{2} T_l &= u_r (1 - c) + \frac{\epsilon}{2} u_r^2 + \frac{\epsilon}{2} T_r , \\
T_l - u_l &= T_r - u_r + q.