Developer Tutorials ===================== Session 0: C++ Essentials --------------------------- .. raw:: html :download:`Slides ` `Exercise solution `_ Errata: * Slide 8: "macro" should be "directive." A directive is the command; a macro is a definition (e.g., a variable) stored by the preprocessor. Session 1: Advanced C++ --------------------------- .. raw:: html :download:`Slides ` `Exercise solution `_ Session 2: Kokkos --------------------------- .. raw:: html :download:`Slides ` `Exercise solution `_ Session 3: MPI --------------------------- .. raw:: html :download:`Slides ` `Exercise solution `_ Session 4: Hands-On PIC Exercise --------------------------------- You must be logged in to UIUC MediaSpace and a member of the LCPP channel to view this video. .. raw:: html Session 5: hPIC2 Class Hierarchy --------------------------------- You must be logged in to UIUC MediaSpace and a member of the LCPP channel to view this video. The session slides are an attachment to the video on MediaSpace. .. raw:: html Session 6: hPIC2 Code Example Walkthrough Pt. 1 -------------------------------------------------- You must be logged in to UIUC MediaSpace and a member of the LCPP channel to view this video. .. raw:: html Session 7: hPIC2 Code Example Walkthrough Pt. 2 -------------------------------------------------- You must be logged in to UIUC MediaSpace and a member of the LCPP channel to view this video. .. raw:: html Session 8: Finite Element Methods ------------------------------------------------ You must be logged in to UIUC MediaSpace and a member of the LCPP channel to view this video. The session slides are an attachment to the video on MediaSpace. .. raw:: html .. raw:: html
Exercise solutions #. Given a test function :math:`\psi`, the weak form is .. math:: - \int_\Omega \sigma \nabla u \cdot \nabla \psi \, \mathrm{d} \mathbf{x} + \int_{\partial \Omega} \psi \sigma \nabla u \cdot \hat{\mathbf{n}} \, \mathrm{d} S + k^2 \int_\Omega u \psi \, \mathrm{d} \mathbf{x} = \int_\Omega f \psi \, \mathrm{d} \mathbf{x}. #. From the weak form, it can be seen that natural boundary conditions have the form .. math:: \sigma \nabla u \cdot \hat{\mathbf{n}} = g, for some known function :math:`g`. This differs from the isotropic Poisson's equation in that we have an extra factor of :math:`\sigma` in the boundary condition; i.e., the natural boundary conditions are not purely Neumann. #. With a bilinear form of .. math:: a(u, v) = -\int_\Omega \sigma \nabla u \cdot \nabla v \, \mathrm{d} \mathbf{x} + k^2 \int_\Omega u v \, \mathrm{d} \mathbf{x}, and a linear form of .. math:: \langle l, u \rangle = \int_\Omega f u \, \mathrm{d} \mathbf{x} - \int_{\partial \Omega} g u \, \mathrm{d} S, where :math:`g` corresponds to a natural boundary condition, the weak form can be written as .. math:: a(u, \psi) = \langle l, \psi \rangle. Note that this bilinear form is actually only truly bilinear if :math:`\sigma` is a constant matrix. Otherwise, it is called a **nonlinear form**. .. raw:: html