From 4cd74bf580ecd7801064ad0dfc5d3a81da8755d1 Mon Sep 17 00:00:00 2001 From: Vikas Sharma Date: Sat, 20 Apr 2024 16:02:28 +0900 Subject: [PATCH] updating triangle utility docs --- docs/about/easifemBase.md | 26 +-- docs/about/figures/figure-2.svg | 4 - docs/about/index.md | 8 +- .../BarycentricVertexBasis_Triangle.md | 30 +-- .../Dubiner_Triangle.md | 52 +++-- .../EquidistanceInPoint_Triangle.md | 9 +- .../EquidistancePoint_Triangle.md | 36 ++-- .../HeirarchicalBasis_Triangle.md | 6 +- .../InterpolationPoint_Triangle.md | 80 +++++--- .../LagrangeCoeff_Triangle.md | 79 ++++++-- .../LagrangeDOF_Triangle.md | 9 +- .../LagrangeDegree_Triangle.md | 44 +++-- .../TriangleInterpolationUtility.md | 25 --- .../VertexBasis_Triangle.md | 2 +- .../TriangleInterpolationUtility_test_5.F90 | 43 ++++ .../TriangleInterpolationUtility_test_6.F90 | 64 ++++++ .../TriangleInterpolationUtility_test_7.F90 | 147 ++++++++++++++ .../TriangleInterpolationUtility_test_8.F90 | 43 ++++ .../TriangleInterpolationUtility_test_9.F90 | 122 ++++++++++++ .../_BarycentricEdgeBasis_Triangle_test_1.F90 | 46 +++++ .../_BarycentricEdgeBasis_Triangle_test_1.md | 58 ++++++ ...entricHeirarchicalBasis_Triangle_test_1.md | 185 ++++++++++++++++++ ...entricHeirarchicalBasis_Triangle_test_2.md | 45 +++++ ...BarycentricVertexBasis_Triangle_test_1.F90 | 41 ++++ ..._BarycentricVertexBasis_Triangle_test_1.md | 49 +++++ .../examples/_CellBasis_Triangle_test_1.F90 | 33 ++++ .../examples/_CellBasis_Triangle_test_1.md | 41 ++++ .../examples/_Dubiner_Triangle_test_1.F90 | 34 ++++ .../examples/_Dubiner_Triangle_test_1.md | 46 +++++ .../examples/_Dubiner_Triangle_test_2.F90 | 35 ++++ .../examples/_Dubiner_Triangle_test_2.md | 47 +++++ .../examples/_EdgeBasis_Triangle_test_1.F90 | 38 ++++ .../examples/_EdgeBasis_Triangle_test_1.md | 49 +++++ .../_EquidistanceInPoint_Triangle_test_1.md | 0 .../_EquidistancePoint_Triangle_test_1.md | 0 .../_HeirarchicalBasis_Triangle_test_1.md | 57 ++++++ .../_HeirarchicalBasis_Triangle_test_2.md | 58 ++++++ .../_HeirarchicalBasis_Triangle_test_3.md | 59 ++++++ .../_HeirarchicalBasis_Triangle_test_4.md | 47 +++++ .../_InterpolationPoint_Triangle_test_1.F90 | 16 ++ .../_InterpolationPoint_Triangle_test_1.md | 0 .../_InterpolationPoint_Triangle_test_2.F90 | 16 ++ .../_InterpolationPoint_Triangle_test_2.md | 0 .../_InterpolationPoint_Triangle_test_3.F90 | 16 ++ .../_InterpolationPoint_Triangle_test_3.md | 0 .../_InterpolationPoint_Triangle_test_4.F90 | 16 ++ .../_InterpolationPoint_Triangle_test_4.md | 0 .../_InterpolationPoint_Triangle_test_5.F90 | 16 ++ .../_InterpolationPoint_Triangle_test_5.md | 0 .../_LagrangeCoeff_Triangle_test_1.F90 | 19 ++ .../_LagrangeCoeff_Triangle_test_1.md | 0 .../_LagrangeCoeff_Triangle_test_2.F90 | 19 ++ .../_LagrangeCoeff_Triangle_test_2.md | 0 .../_LagrangeCoeff_Triangle_test_3.F90 | 23 +++ .../_LagrangeCoeff_Triangle_test_3.md | 0 .../_LagrangeCoeff_Triangle_test_4.F90 | 24 +++ .../_LagrangeCoeff_Triangle_test_4.md | 0 .../_LagrangeCoeff_Triangle_test_5.F90 | 26 +++ .../_LagrangeCoeff_Triangle_test_5.md | 0 .../_LagrangeDOF_Triangle_test_1.md | 0 .../_LagrangeDegree_Triangle_test_1.md | 0 .../_LagrangeEvalAll_Triangle_test_1.F90 | 25 +++ .../_LagrangeEvalAll_Triangle_test_1.md | 31 +++ .../_LagrangeEvalAll_Triangle_test_2.F90 | 25 +++ .../_LagrangeEvalAll_Triangle_test_2.md | 31 +++ .../_LagrangeEvalAll_Triangle_test_3.F90 | 25 +++ .../_LagrangeEvalAll_Triangle_test_3.md | 31 +++ .../_LagrangeEvalAll_Triangle_test_4.F90 | 25 +++ .../_LagrangeEvalAll_Triangle_test_4.md | 31 +++ .../_LagrangeEvalAll_Triangle_test_5.F90 | 25 +++ .../_LagrangeEvalAll_Triangle_test_5.md | 31 +++ .../_LagrangeEvalAll_Triangle_test_6.F90 | 25 +++ .../_LagrangeEvalAll_Triangle_test_6.md | 31 +++ .../_LagrangeInDOF_Triangle_test_1.md | 19 ++ .../_QuadraturePoint_Triangle_test_1.F90 | 17 ++ .../_QuadraturePoint_Triangle_test_1.md | 36 ++++ .../_QuadraturePoint_Triangle_test_1b.F90 | 73 +++++++ .../_QuadraturePoint_Triangle_test_1b.md | 75 +++++++ .../examples/_VertexBasis_Triangle_test_1.F90 | 39 ++++ .../examples/_VertexBasis_Triangle_test_1.md | 46 +++++ .../TriangleInterpolationUtility/index.md | 53 +++++ static/img/logo_hero copy.svg | 105 ---------- static/img/svg/easifem-base-design.svg | 4 + static/release-notes/react-web-core.json | 108 ---------- static/release-notes/rest-api.json | 28 --- static/release-notes/ui-kit.json | 121 ------------ static/release-notes/web-core.json | 147 -------------- static/robots.txt | 6 +- 88 files changed, 2512 insertions(+), 689 deletions(-) delete mode 100644 docs/about/figures/figure-2.svg delete mode 100644 docs/docs-api/TriangleInterpolationUtility/TriangleInterpolationUtility.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_5.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_6.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_7.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_8.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_9.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricEdgeBasis_Triangle_test_1.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricEdgeBasis_Triangle_test_1.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricHeirarchicalBasis_Triangle_test_1.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricHeirarchicalBasis_Triangle_test_2.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricVertexBasis_Triangle_test_1.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricVertexBasis_Triangle_test_1.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_CellBasis_Triangle_test_1.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_CellBasis_Triangle_test_1.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_Dubiner_Triangle_test_1.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_Dubiner_Triangle_test_1.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_Dubiner_Triangle_test_2.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_Dubiner_Triangle_test_2.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_EdgeBasis_Triangle_test_1.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_EdgeBasis_Triangle_test_1.md rename docs/docs-api/TriangleInterpolationUtility/{ => examples}/_EquidistanceInPoint_Triangle_test_1.md (100%) rename docs/docs-api/TriangleInterpolationUtility/{ => examples}/_EquidistancePoint_Triangle_test_1.md (100%) create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_HeirarchicalBasis_Triangle_test_1.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_HeirarchicalBasis_Triangle_test_2.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_HeirarchicalBasis_Triangle_test_3.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_HeirarchicalBasis_Triangle_test_4.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_1.F90 rename docs/docs-api/TriangleInterpolationUtility/{ => examples}/_InterpolationPoint_Triangle_test_1.md (100%) create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_2.F90 rename docs/docs-api/TriangleInterpolationUtility/{ => examples}/_InterpolationPoint_Triangle_test_2.md (100%) create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_3.F90 rename docs/docs-api/TriangleInterpolationUtility/{ => examples}/_InterpolationPoint_Triangle_test_3.md (100%) create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_4.F90 rename docs/docs-api/TriangleInterpolationUtility/{ => examples}/_InterpolationPoint_Triangle_test_4.md (100%) create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_5.F90 rename docs/docs-api/TriangleInterpolationUtility/{ => examples}/_InterpolationPoint_Triangle_test_5.md (100%) create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_1.F90 rename docs/docs-api/TriangleInterpolationUtility/{ => examples}/_LagrangeCoeff_Triangle_test_1.md (100%) create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_2.F90 rename docs/docs-api/TriangleInterpolationUtility/{ => examples}/_LagrangeCoeff_Triangle_test_2.md (100%) create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_3.F90 rename docs/docs-api/TriangleInterpolationUtility/{ => examples}/_LagrangeCoeff_Triangle_test_3.md (100%) create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_4.F90 rename docs/docs-api/TriangleInterpolationUtility/{ => examples}/_LagrangeCoeff_Triangle_test_4.md (100%) create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_5.F90 rename docs/docs-api/TriangleInterpolationUtility/{ => examples}/_LagrangeCoeff_Triangle_test_5.md (100%) rename docs/docs-api/TriangleInterpolationUtility/{ => examples}/_LagrangeDOF_Triangle_test_1.md (100%) rename docs/docs-api/TriangleInterpolationUtility/{ => examples}/_LagrangeDegree_Triangle_test_1.md (100%) create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_1.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_1.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_2.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_2.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_3.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_3.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_4.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_4.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_5.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_5.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_6.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_6.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeInDOF_Triangle_test_1.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_QuadraturePoint_Triangle_test_1.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_QuadraturePoint_Triangle_test_1.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_QuadraturePoint_Triangle_test_1b.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_QuadraturePoint_Triangle_test_1b.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_VertexBasis_Triangle_test_1.F90 create mode 100644 docs/docs-api/TriangleInterpolationUtility/examples/_VertexBasis_Triangle_test_1.md create mode 100644 docs/docs-api/TriangleInterpolationUtility/index.md delete mode 100644 static/img/logo_hero copy.svg create mode 100644 static/img/svg/easifem-base-design.svg delete mode 100644 static/release-notes/react-web-core.json delete mode 100644 static/release-notes/rest-api.json delete mode 100644 static/release-notes/ui-kit.json delete mode 100644 static/release-notes/web-core.json diff --git a/docs/about/easifemBase.md b/docs/about/easifemBase.md index 4ff97f831..01a808bd8 100644 --- a/docs/about/easifemBase.md +++ b/docs/about/easifemBase.md @@ -3,13 +3,15 @@ title: easifemBase sidebar_position: 5 --- + + `easifemBase` (henceforth read as Base) library is the lowest (or, base) level component of EASIFEM. All other components are built upon `easifemBase`. -It contains a lot of valuable routines and derived types. +It contains a lot of valuable routines and derived types. ## Programming paradigm -The programming paradigm of `easifemBase` is [Multiple dispatch approach](https://en.wikipedia.org/wiki/Multiple_dispatch) and Procedural programming. +The programming paradigm of `easifemBase` is [Multiple dispatch approach](https://en.wikipedia.org/wiki/Multiple_dispatch) and Procedural programming. :::note The base library do not use the object-oriented programming concepts. In the Base library `String_Class` is the only exception wherein Object-oriented paradigm has been used. @@ -22,14 +24,14 @@ import TabItem from '@theme/TabItem'; ## Key features -Currently, easifemBase has interface with +Currently, easifemBase has interface with -- `BLAS95` -- `Lapack95` -- `Sparsekit` -- `Metis` -- `PlPlot` -- `SuperLU` +- `BLAS95` +- `Lapack95` +- `Sparsekit` +- `Metis` +- `PlPlot` +- `SuperLU` - `ARPACK` - [ ] TODO Add key features in `easifemBase.md`. @@ -53,11 +55,11 @@ The `easifemBase` library exposes three main modules. 1. `BaseType`, which contains the user-defined data-type 2. `BaseMethods`, contains the modules (each module defines the routines for data-types defined in `BaseType.F90`.) -3. `easifemBase` +3. `easifemBase` The structure of source directory is shown in the following figure. -![](./figures/figure-2.svg) +![easifem-base-design](/img/svg/easifem-base-design.svg) The source directory has two directories @@ -244,5 +246,3 @@ import {basemethods_columns, basemethods_articles} from "./BaseMethods.table.js" columns={basemethods_columns} data={basemethods_articles} /> - -### diff --git a/docs/about/figures/figure-2.svg b/docs/about/figures/figure-2.svg deleted file mode 100644 index d90a2d6aa..000000000 --- a/docs/about/figures/figure-2.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - -
easifemBase
easifemBase
src
src
modules
modules
submodules
submodules
Header and Interface Only
Header and Interface Only
CSRSparsity
CSRSparsity
src
src
CSRSparsity_Method.F90
CSRSparsit...
CMakeLists.txt
CMakeLists...
Implementation
Implementation
CSRSparsity
CSRSparsity
src
src
CSRSparsity_Method@ConstructorMethods.F90
CSRSparsit...
CMakeLists.txt
CMakeLists...
CSRSparsity_Method@IOMethods.F90
CSRSparsit...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/about/index.md b/docs/about/index.md index 6cecc7530..9bfcf3443 100644 --- a/docs/about/index.md +++ b/docs/about/index.md @@ -1,7 +1,4 @@ --- -id: "index" -aliases: - - "EASIFEM" tags: - "easifemBase" - "easifemClasses" @@ -10,6 +7,8 @@ sidebar_position: 1 # EASIFEM + + Expandable And Scalable Infrastructure for Finite Element Methods, EASIFEM, is [Modern FORTRAN](https://fortran-lang.org) framework for solving partial differential equations (PDEs) using finite element methods. EASIFEM “eases” the efforts to develop scientific programs in FORTRAN. It is meant for researchers, scientists, and engineers using FORTRAN to implement numerical methods for solving the initial-boundary-value problems (IBVPs). EASIFEM is equipped with both low- and high-level datatype and classes for implementing finite element methods. Following are some features which may interest you. @@ -26,7 +25,7 @@ Currently, EASIFEM focuses on finite element methods. Eventually, the library wi ## Structure of EASIFEM -![](/img/what-is-easifem.svg) +![easifem structure](/img/what-is-easifem.svg) EASIFEM consists following three hierarchical components: @@ -77,7 +76,6 @@ Currently, `easifemBase` has interface with `HDF5`, `Gmsh`, `PlPlot`, `GTK4`, `P - ## Kernels `easifemKernels` (henceforth, read as Kernels) contains physics simulators. For example, we have: diff --git a/docs/docs-api/TriangleInterpolationUtility/BarycentricVertexBasis_Triangle.md b/docs/docs-api/TriangleInterpolationUtility/BarycentricVertexBasis_Triangle.md index 38a6a8493..ed7acda61 100644 --- a/docs/docs-api/TriangleInterpolationUtility/BarycentricVertexBasis_Triangle.md +++ b/docs/docs-api/TriangleInterpolationUtility/BarycentricVertexBasis_Triangle.md @@ -1,15 +1,11 @@ # BarycentricVertexBasis + + Returns the vertex basis functions on reference Triangle. ## Interface -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - - - - ```fortran INTERFACE MODULE PURE FUNCTION BarycentricVertexBasis_Triangle(lambda) & @@ -22,17 +18,21 @@ INTERFACE END INTERFACE ``` - +:::info `lambda` +Barycentric coordinates. The vertex basis function will be evaluated here. The number of rows in lambda is 3 and the number of columns is the number of points. The three rows of lambda dentoe the $\lambda_{i=1,2,3}$. +::: - +:::info `ans` +The number of rows in `ans` is equal to the number of points of evaluation. The number of columns is 3. The three columns of `ans` denote the basis functions of vertex $v=1,2,3$ at all points. +::: -import EXAMPLE29 from "./_BarycentricVertexBasis_Triangle_test_1.md"; +
+Example +
- - - +import EXAMPLE29 from "./examples/_BarycentricVertexBasis_Triangle_test_1.md"; - + - - +
+
diff --git a/docs/docs-api/TriangleInterpolationUtility/Dubiner_Triangle.md b/docs/docs-api/TriangleInterpolationUtility/Dubiner_Triangle.md index e2789e265..73622e937 100644 --- a/docs/docs-api/TriangleInterpolationUtility/Dubiner_Triangle.md +++ b/docs/docs-api/TriangleInterpolationUtility/Dubiner_Triangle.md @@ -1,37 +1,40 @@ -# Dubiner +# Dubiner_Triangle -Forms Dubiner basis on reference triangle domain. + -Reference triangle can be "biunit" or "unit". +Forms Dubiner basis on reference triangle domain. Reference triangle can be "biunit" or "unit". -The shape of `ans` is (M,N), where M=SIZE(xij,2) (number of points) N = 0.5*(order+1)*(order+2). +:::note It is alias to `OrothogonalBasis_Triangle` method. +::: + +The shape of `ans` is (M,N), where `M=SIZE(xij,2)` (number of points) `N = 0.5*(order+1)*(order+2)`. + +- `M` number of points of evaluations. +- `N` number of degrees of freedom for a given order of approximation. In this way, `ans(j,:)` denotes the values of all polynomial at jth point. Polynomials are returned in following way: $$ - P_{0,0}, P_{0,1}, \cdots , P_{0,order} \\ - P_{1,0}, P_{1,1}, \cdots , P_{1,order-1} \\ - P_{2,0}, P_{2,1}, \cdots , P_{2,order-2} \\ - \cdots - P_{order,0} +P_{0,0}, P_{0,1}, \cdots , P_{0,order} \\ +P_{1,0}, P_{1,1}, \cdots , P_{1,order-1} \\ +P_{2,0}, P_{2,1}, \cdots , P_{2,order-2} \\ +\cdots +P_{order,0} $$ For example for order=3, the polynomials are arranged as: $$ - P_{0,0}, P_{0,1}, P_{0,2}, P_{0,3} \\ - P_{1,0}, P_{1,1}, P_{1,2} \\ - P_{2,0}, P_{2,1} \\ - P_{3,0} +P_{0,0}, P_{0,1}, P_{0,2}, P_{0,3} \\ +P_{1,0}, P_{1,1}, P_{1,2} \\ +P_{2,0}, P_{2,1} \\ +P_{3,0} $$ ## Interface 1 -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - @@ -44,8 +47,8 @@ INTERFACE !! points in reference triangle, shape functions will be evaluated !! at these points. SIZE(xij,1) = 2, and SIZE(xij, 2) = number of points CHARACTER(*), INTENT(IN) :: refTriangle - !! "unit" - !! "biunit" + !! "UNIT" + !! "BIUNIT" REAL(DFP) :: ans(SIZE(xij, 2), (order + 1)* (order + 2) / 2) !! shape functions !! ans(:, j), jth shape functions at all points @@ -54,11 +57,15 @@ INTERFACE END INTERFACE ``` +:::info `xij` +Points in reference triangle, shape functions will be evaluated at these points. SIZE(xij,1) = 2, and SIZE(xij, 2) = number of points +::: + -import EXAMPLE61 from "./_Dubiner_Triangle_test_1.md"; +import EXAMPLE61 from "./examples/_Dubiner_Triangle_test_1.md"; @@ -66,7 +73,7 @@ import EXAMPLE61 from "./_Dubiner_Triangle_test_1.md"; -import EXAMPLE100 from "./_Dubiner_Triangle_test_2.md"; +import EXAMPLE100 from "./examples/_Dubiner_Triangle_test_2.md"; @@ -100,7 +107,10 @@ INTERFACE END INTERFACE ``` -Forms Dubiner basis on reference triangle domain. Reference triangle can be biunit or unit. Here x and y are the coordinates on the line. xij is given by outerproduct of x and y. +- Forms Dubiner basis on the reference triangle domain. +- Reference triangle can be biunit or unit. +- Here x and y are the coordinates on the line. `xij` is given by outer-product of `x` and `y`. + diff --git a/docs/docs-api/TriangleInterpolationUtility/EquidistanceInPoint_Triangle.md b/docs/docs-api/TriangleInterpolationUtility/EquidistanceInPoint_Triangle.md index 1e640a262..50324fac6 100644 --- a/docs/docs-api/TriangleInterpolationUtility/EquidistanceInPoint_Triangle.md +++ b/docs/docs-api/TriangleInterpolationUtility/EquidistanceInPoint_Triangle.md @@ -1,4 +1,6 @@ -# EquidistanceInPoint +# EquidistanceInPoint_Triangle + + This function returns the equidistance points in triangle. @@ -7,9 +9,6 @@ This function returns the equidistance points in triangle. ## Interface -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - @@ -32,7 +31,7 @@ END INTERFACE -import EXAMPLE35 from "./_EquidistancePoint_Triangle_test_1.md"; +import EXAMPLE35 from "./examples/_EquidistanceInPoint_Triangle_test_1.md"; diff --git a/docs/docs-api/TriangleInterpolationUtility/EquidistancePoint_Triangle.md b/docs/docs-api/TriangleInterpolationUtility/EquidistancePoint_Triangle.md index 1b9fa76fd..69659c175 100644 --- a/docs/docs-api/TriangleInterpolationUtility/EquidistancePoint_Triangle.md +++ b/docs/docs-api/TriangleInterpolationUtility/EquidistancePoint_Triangle.md @@ -1,17 +1,25 @@ -# EquidistancePoint +# EquidistancePoint_Triangle -This function returns the nodal coordinates of higher order triangle element + -- the layout is always "VEFC" +This function returns the nodal coordinates of higher order triangle element. + +- the layout is always "VEFC", that is, the node numbering is according to GMSH convention, VEFC. - coordinates are distributed uniformly -- these coordinates can be used to construct lagrange polynomials +- these coordinates can be used to construct Lagrange polynomials - the returned coordinates are in $x_{iJ}$ format. -- the node numbering is according to Gmsh convention, VEFC. -## Interface +:::info `VEFC` layout + +`VEFC` layout is a way to store the nodal coordinates of a triangle element. The layout is as follows: -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +- First we store the coordinates of the vertices. +- Then we store the coordinates of the edge midpoints. +- Finally we store the coordinates of the face center. + +::: + +## Interface @@ -20,13 +28,13 @@ import TabItem from '@theme/TabItem'; INTERFACE MODULE RECURSIVE PURE FUNCTION EquidistancePoint_Triangle(order, xij) RESULT(ans) INTEGER(I4B), INTENT(IN) :: order - !! order + !! order REAL(DFP), OPTIONAL, INTENT(IN) :: xij(:, :) - !! coordinates of point 1 and point 2 in $x_{iJ}$ format - !! number of rows = nsd - !! number of cols = 3 + !! coordinates of point 1 and point 2 in $x_{iJ}$ format + !! number of rows = nsd + !! number of cols = 3 REAL(DFP), ALLOCATABLE :: ans(:, :) - !! returned coordinates in $x_{iJ}$ format + !! returned coordinates in $x_{iJ}$ format END FUNCTION EquidistancePoint_Triangle END INTERFACE ``` @@ -35,7 +43,7 @@ END INTERFACE -import EXAMPLE38 from "./_EquidistancePoint_Triangle_test_1.md"; +import EXAMPLE38 from "./examples/_EquidistancePoint_Triangle_test_1.md"; diff --git a/docs/docs-api/TriangleInterpolationUtility/HeirarchicalBasis_Triangle.md b/docs/docs-api/TriangleInterpolationUtility/HeirarchicalBasis_Triangle.md index d254c2aa4..16adb6f23 100644 --- a/docs/docs-api/TriangleInterpolationUtility/HeirarchicalBasis_Triangle.md +++ b/docs/docs-api/TriangleInterpolationUtility/HeirarchicalBasis_Triangle.md @@ -1,8 +1,10 @@ -# HeirarchicalBasis +# HeirarchicalBasis_Triangle + + Evaluate all modal basis (heirarchical polynomial) on Triangle. -# Interface +## Interface import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; diff --git a/docs/docs-api/TriangleInterpolationUtility/InterpolationPoint_Triangle.md b/docs/docs-api/TriangleInterpolationUtility/InterpolationPoint_Triangle.md index 3a6a54671..beec90db5 100644 --- a/docs/docs-api/TriangleInterpolationUtility/InterpolationPoint_Triangle.md +++ b/docs/docs-api/TriangleInterpolationUtility/InterpolationPoint_Triangle.md @@ -1,13 +1,11 @@ -# InterpolationPoint +# InterpolationPoint_Triangle -This routine returns the interpolation points on triangle. + +This routine returns the interpolation points on triangle. ## Interface -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - @@ -34,6 +32,7 @@ END INTERFACE - `xij` contains nodal coordinates of triangle in `xij` format. - `SIZE(xij,1) = nsd`, and `SIZE(xij,2)=3` - If `xij` is absent then unit triangle is assumed + ::: :::info ipType @@ -52,62 +51,83 @@ END INTERFACE - [ ] `ChenBabuska` TODO - [ ] `Hesthaven` TODO - [ ] `Feket` TODO + ::: :::info `layout` - `layout` specifies the arrangement of points. The nodes are always returned in “VEFC” format (vertex, edge, face, cell). 1:3 are vertex points, then edge, and then internal nodes. The internal nodes also follow the same convention. Please read Gmsh manual on this topic. + ::: - + -import EXAMPLE63 from "./_InterpolationPoint_Triangle_test_1.md"; + + + +## Example of Equidistance points + +
+Click here to see example +
+ +import EXAMPLE63 from "./examples/_InterpolationPoint_Triangle_test_1.md"; - +
+
+ +## BlythPozChebyshev - +
+Click here to see example +
-import EXAMPLE71 from "./_InterpolationPoint_Triangle_test_2.md"; +import EXAMPLE71 from "./examples/_InterpolationPoint_Triangle_test_2.md"; - +
+
- +## BlythPozLegendre -import EXAMPLE79 from "./_InterpolationPoint_Triangle_test_3.md"; +
+Click here to see example +
+ +import EXAMPLE79 from "./examples/_InterpolationPoint_Triangle_test_3.md"; - +
+
- +## IsaacChebyshev - -
- - - +
+Click here to see example +
-import EXAMPLE87 from "./_InterpolationPoint_Triangle_test_4.md"; +import EXAMPLE87 from "./examples/_InterpolationPoint_Triangle_test_4.md"; - - - +
+
-import EXAMPLE95 from "./_InterpolationPoint_Triangle_test_5.md"; +## IssacLegendre - +
+Click here to see example +
- +import EXAMPLE95 from "./examples/_InterpolationPoint_Triangle_test_5.md"; - + - - +
+
diff --git a/docs/docs-api/TriangleInterpolationUtility/LagrangeCoeff_Triangle.md b/docs/docs-api/TriangleInterpolationUtility/LagrangeCoeff_Triangle.md index 9a5f3e2cc..ee7cf3b03 100644 --- a/docs/docs-api/TriangleInterpolationUtility/LagrangeCoeff_Triangle.md +++ b/docs/docs-api/TriangleInterpolationUtility/LagrangeCoeff_Triangle.md @@ -1,6 +1,8 @@ -# LagrangeCoeff +# LagrangeCoeff_Triangle -Returns the coefficients for lagrange polynomial. + + +Returns the coefficients for Lagrange polynomial. This function returns the coefficient of basis functions. @@ -10,10 +12,11 @@ $$ This routine returns $c_{a,b}$. -## Interface 1 +:::note +There are four interfaces for this function. +::: -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +## Interface 1 @@ -37,11 +40,26 @@ END INTERFACE Order of Lagrange polynomial. ::: +:::info `i` +ith Lagrnage polynomial. +::: + +:::info `xij` +Points in `xij` format, size(xij,2) denotes the number of points. These are actually the interpolation points. +::: + +:::note + +- This subroutine will use the monomial basis functions. +- Internally we compute the Vandermonde matrix and then solve it to get the coefficients. + +::: + -import EXAMPLE40 from "./_LagrangeCoeff_Triangle_test_3.md"; +import EXAMPLE40 from "./examples/_LagrangeCoeff_Triangle_test_3.md"; @@ -64,22 +82,34 @@ INTERFACE INTEGER(I4B), INTENT(IN) :: order !! order of polynomial, it should be SIZE(v,2)-1 INTEGER(I4B), INTENT(IN) :: i - !! coefficient for ith lagrange polynomial + !! ith lagrange polynomial REAL(DFP), INTENT(IN) :: v(:, :) !! vandermonde matrix size should be (order+1,order+1) LOGICAL(LGT), INTENT(IN) :: isVandermonde !! This is just to resolve interface issue REAL(DFP) :: ans(SIZE(v, 1)) - !! coefficients + !! coefficients of ith Lagrange polynomial END FUNCTION LagrangeCoeff_Triangle END INTERFACE ``` +:::info `order` +order of Lagrange polynomial, it should be equal to the SIZE(v,2)-1. +::: + +:::info `i` +ith Lagrange polynomial. +::: + +:::info `v` +Vandermonde matrix, The size should be at least (order+1,order+1). +::: + -import EXAMPLE78 from "./_LagrangeCoeff_Triangle_test_4.md"; +import EXAMPLE78 from "./examples/_LagrangeCoeff_Triangle_test_4.md"; @@ -101,13 +131,13 @@ INTERFACE INTEGER(I4B), INTENT(IN) :: order !! order of polynomial, it should be SIZE(x,2)-1 INTEGER(I4B), INTENT(IN) :: i - !! ith coefficients for lagrange polynomial + !! ith lagrange polynomial REAL(DFP), INTENT(INOUT) :: v(:, :) !! LU decomposition of vandermonde matrix INTEGER(I4B), INTENT(IN) :: ipiv(:) - !! inverse pivoting mapping, compes from LU decomposition + !! inverse pivoting mapping, it is returned from LU decomposition REAL(DFP) :: ans(SIZE(v, 1)) - !! coefficients + !! coefficients of ith Lagrange polynomial END FUNCTION LagrangeCoeff_Triangle END INTERFACE ``` @@ -116,7 +146,7 @@ END INTERFACE -import EXAMPLE115 from "./_LagrangeCoeff_Triangle_test_5.md"; +import EXAMPLE115 from "./examples/_LagrangeCoeff_Triangle_test_5.md"; @@ -134,7 +164,7 @@ import EXAMPLE115 from "./_LagrangeCoeff_Triangle_test_5.md"; ```fortran INTERFACE - MODULE FUNCTION LagrangeCoeff_Triangle4(order, xij, basisType, refTriangle) RESULT(ans) + MODULE FUNCTION LagrangeCoeff_Triangle(order, xij, basisType, refTriangle) RESULT(ans) INTEGER(I4B), INTENT(IN) :: order !! order of polynomial REAL(DFP), INTENT(IN) :: xij(:, :) @@ -146,15 +176,30 @@ INTERFACE CHARACTER(*), OPTIONAL, INTENT(IN) :: refTriangle REAL(DFP) :: ans(SIZE(xij, 2), SIZE(xij, 2)) !! coefficients - END FUNCTION LagrangeCoeff_Triangle4 + END FUNCTION LagrangeCoeff_Triangle END INTERFACE ``` +This is the master function, which allows us to specify the basis type and reference triangle. + +:::info `basisType` + +- Here, basis type is the type of basis functions we want to use for contructing the Lagrange polynomials. It can take following values: + - `Monomials` (default) + - Jacobi, Orthogonal, Legendre, Lobatto, Ultraspherical (in this case we call Dubiner functions) + - `Heirarchical` + +::: + +:::info `ans` +It represents the coefficients of the Lagrange polynomial. `ans(:, i)` denotes the coefficients of ith Lagrange polynomial. +::: + -import EXAMPLE138 from "./_LagrangeCoeff_Triangle_test_1.md"; +import EXAMPLE138 from "./examples/_LagrangeCoeff_Triangle_test_1.md"; @@ -162,7 +207,7 @@ import EXAMPLE138 from "./_LagrangeCoeff_Triangle_test_1.md"; -import EXAMPLE146 from "./_LagrangeCoeff_Triangle_test_2.md"; +import EXAMPLE146 from "./examples/_LagrangeCoeff_Triangle_test_2.md"; diff --git a/docs/docs-api/TriangleInterpolationUtility/LagrangeDOF_Triangle.md b/docs/docs-api/TriangleInterpolationUtility/LagrangeDOF_Triangle.md index 39a0b28a4..39728d805 100644 --- a/docs/docs-api/TriangleInterpolationUtility/LagrangeDOF_Triangle.md +++ b/docs/docs-api/TriangleInterpolationUtility/LagrangeDOF_Triangle.md @@ -1,6 +1,8 @@ # LagrangeDOF -Returns the total number of degree of freedom for a lagrange polynomial on triangle. + + +Returns the total number of degree of freedom for a Lagrange polynomial on triangle. The total DOF is given by: @@ -10,9 +12,6 @@ $$ ## Interface -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - @@ -29,7 +28,7 @@ END INTERFACE -import EXAMPLE26 from "./_LagrangeDOF_Triangle_test_1.md"; +import EXAMPLE26 from "./examples/_LagrangeDOF_Triangle_test_1.md"; diff --git a/docs/docs-api/TriangleInterpolationUtility/LagrangeDegree_Triangle.md b/docs/docs-api/TriangleInterpolationUtility/LagrangeDegree_Triangle.md index 8e9a02314..6218c7391 100644 --- a/docs/docs-api/TriangleInterpolationUtility/LagrangeDegree_Triangle.md +++ b/docs/docs-api/TriangleInterpolationUtility/LagrangeDegree_Triangle.md @@ -1,4 +1,10 @@ -# LagrangeDegree +--- +sidebar_position: 2 +--- + +# LagrangeDegree_Triangle + + Returns the polynomial space for constructing the Lagrange polynomials. @@ -8,10 +14,10 @@ $$ p(x,y) = \sum_{a=0}\sum_{b=0} x^{a} y^{b} $$ -Here span of $x^{a}y^{b}$ is called the LagrangeDegree. +Here span of $x^{a}y^{b}$ is called the Lagrange degrees. -- as are given by first column of ans. -- bs are given by second column of ans. +- The exponents `a` are given by first column of ans, `ans(:,1)`. +- The exponents `b` are given by second column of ans, `ans(:, 2)`. For example for order = 3, we have the following degrees: @@ -21,24 +27,21 @@ $$ which is representd by: -| a | b | -|----|----| -| 0 | 0 | -| 1 | 0 | -| 2 | 0 | -| 3 | 0 | -| 0 | 1 | -| 1 | 1 | -| 2 | 1 | -| 0 | 2 | -| 1 | 2 | -| 0 | 3 | +| a | b | +| - | - | +| 0 | 0 | +| 1 | 0 | +| 2 | 0 | +| 3 | 0 | +| 0 | 1 | +| 1 | 1 | +| 2 | 1 | +| 0 | 2 | +| 1 | 2 | +| 0 | 3 | ## Interface -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - @@ -59,13 +62,14 @@ Order of Lagrange polynomial - The first col of `ans` denotes the exponent of `x` - The second col of `ans` denotes the exponent of `y` + ::: -import EXAMPLE26 from "./_LagrangeDegree_Triangle_test_1.md"; +import EXAMPLE26 from "./examples/_LagrangeDegree_Triangle_test_1.md"; diff --git a/docs/docs-api/TriangleInterpolationUtility/TriangleInterpolationUtility.md b/docs/docs-api/TriangleInterpolationUtility/TriangleInterpolationUtility.md deleted file mode 100644 index fa07328a6..000000000 --- a/docs/docs-api/TriangleInterpolationUtility/TriangleInterpolationUtility.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -sidebar_position: 1 -date: 2023-07-02 -update: 2023-07-02 -status: stable -docs: done -extpkgs: none -category: - - Polynomial - - Interpolation -tags: - - polynomials - - interpolation - - easifemBase ---- - -# Triangle - -This module contains useful routines for creating polynomials on triangles. - -## Methods - -import DocCardList from '@theme/DocCardList'; - - diff --git a/docs/docs-api/TriangleInterpolationUtility/VertexBasis_Triangle.md b/docs/docs-api/TriangleInterpolationUtility/VertexBasis_Triangle.md index 87bcf950e..e18eb875e 100644 --- a/docs/docs-api/TriangleInterpolationUtility/VertexBasis_Triangle.md +++ b/docs/docs-api/TriangleInterpolationUtility/VertexBasis_Triangle.md @@ -1,4 +1,4 @@ -# VertexBasis +# VertexBasis_Triangle Returns value of vertex function on triangle. diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_5.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_5.F90 new file mode 100644 index 000000000..ad0636d8f --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_5.F90 @@ -0,0 +1,43 @@ + +program main + use easifembase + use easifemClasses + implicit none + + BLOCK + real(dfp), allocatable :: xij(:,:), ans(:,:) + integer(i4b) :: order, tdof + type( PLPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/test5" + type(String), allocatable :: strs(:) + !! + order = 1 + call reallocate(xij, 2, 101) + xij(1,:)= linspace(0.0_DFP, 1.0_DFP, size(xij,2)) + ans = Dubiner_Triangle(order=order, xij=xij, refTriangle="UNIT") + strs = [String("P00"), String("P01"), String("P10")] + call aplot%LinePlot(x=xij(1,:), y=ans, & + & filename=fname//"_order="//tostring(order)//".svg", & + & legendTexts=strs) + CALL Display(ans, "ans = ") + END BLOCK + + BLOCK + real(dfp), allocatable :: xij(:,:), ans(:,:) + integer(i4b) :: order, tdof + type( PLPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/test5" + type(String), allocatable :: strs(:) + !! + order = 2 + call reallocate(xij, 2, 101) + xij(1,:)= linspace(0.0_DFP, 1.0_DFP, size(xij,2)) + ans = Dubiner_Triangle(order=order, xij=xij, refTriangle="UNIT") + strs = [String("P00"), String("P01"), String("P02"), & + & String("P10"), String("P11"), String("P20") ] + call aplot%LinePlot(x=xij(1,:), y=ans, & + & filename=fname//"_order="//tostring(order)//".svg", & + & legendTexts=strs) + END BLOCK + +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_6.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_6.F90 new file mode 100644 index 000000000..7be75cd55 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_6.F90 @@ -0,0 +1,64 @@ + +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + + n = 101 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 0.99_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: order, tdof + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/test6" + !! + order = 1 + !! + ans = Dubiner_Triangle(order=order, xij=xij, refTriangle="UNIT") + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans, & + & filename=fname//"_order_"//tostring(order)//".vtp", & + & label="P") + END BLOCK + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: order, tdof + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/test6" + !! + order = 2 + !! + ans = Dubiner_Triangle(order=order, xij=xij, refTriangle="UNIT") + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans, & + & filename=fname//"_order_"//tostring(order)//".vtp", & + & label="P") + END BLOCK + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: order, tdof + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/test6" + !! + order = 3 + !! + ans = Dubiner_Triangle(order=order, xij=xij, refTriangle="UNIT") + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans, & + & filename=fname//"_order_"//tostring(order)//".vtp", & + & label="P") + END BLOCK + +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_7.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_7.F90 new file mode 100644 index 000000000..0a11c6d80 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_7.F90 @@ -0,0 +1,147 @@ + +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=1; pe1=1; pe2=1; pe3=1 + !! + ans = BarycentricHeirarchicalBasis_Triangle(& + & order=order, pe1=pe1, pe2=pe2, pe3=pe3, & + & xij=xij, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Pbary( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=3; pe1=3; pe2=3; pe3=3 + !! + ans = BarycentricHeirarchicalBasis_Triangle(& + & order=order, pe1=pe1, pe2=pe2, pe3=pe3, & + & xij=xij, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Pbary( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=4; pe1=4; pe2=4; pe3=4 + !! + ans = BarycentricHeirarchicalBasis_Triangle(& + & order=order, pe1=pe1, pe2=pe2, pe3=pe3, & + & xij=xij, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Pbary( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=5; pe1=5; pe2=5; pe3=5 + !! + ans = BarycentricHeirarchicalBasis_Triangle(& + & order=order, pe1=pe1, pe2=pe2, pe3=pe3, & + & xij=xij, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Pbary( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=5; pe1=1; pe2=5; pe3=3 + !! + ans = BarycentricHeirarchicalBasis_Triangle(& + & order=order, pe1=pe1, pe2=pe2, pe3=pe3, & + & xij=xij, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Pbary( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK + +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_8.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_8.F90 new file mode 100644 index 000000000..927ad3008 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_8.F90 @@ -0,0 +1,43 @@ + +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=5 + !! + ans = BarycentricHeirarchicalBasis_Triangle(order=order, & + & xij=xij, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Pbary( order=" // tostring(order) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK + +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_9.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_9.F90 new file mode 100644 index 000000000..9424fa1a8 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/TriangleInterpolationUtility_test_9.F90 @@ -0,0 +1,122 @@ + +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=1; pe1=1; pe2=1; pe3=1 + !! + ans = HeirarchicalBasis_Triangle(& + & order=order, pe1=pe1, pe2=pe2, pe3=pe3, & + & xij=xij, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Ph( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=3; pe1=3; pe2=3; pe3=3 + !! + ans = HeirarchicalBasis_Triangle(& + & order=order, pe1=pe1, pe2=pe2, pe3=pe3, & + & xij=xij, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Ph( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=4; pe1=4; pe2=4; pe3=4 + !! + ans = HeirarchicalBasis_Triangle(& + & order=order, pe1=pe1, pe2=pe2, pe3=pe3, & + & xij=xij, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Ph( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=5; pe1=1; pe2=5; pe3=3 + !! + ans = HeirarchicalBasis_Triangle(& + & order=order, pe1=pe1, pe2=pe2, pe3=pe3, & + & xij=xij, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Ph( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK + +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricEdgeBasis_Triangle_test_1.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricEdgeBasis_Triangle_test_1.F90 new file mode 100644 index 000000000..2c67fb8ff --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricEdgeBasis_Triangle_test_1.F90 @@ -0,0 +1,46 @@ + +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:), lambda(:, :) + integer(i4b) :: ii, jj, cnt, n + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + lambda = BarycentricCoordTriangle(xij, "UNIT") + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=4 + pe1=order; pe2 = order; pe3 = order + !! + ans = BarycentricEdgeBasis_Triangle(& + & pe1=pe1, pe2=pe2, pe3=pe3 , & + & lambda=lambda ) + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"PVertexBary( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricEdgeBasis_Triangle_test_1.md b/docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricEdgeBasis_Triangle_test_1.md new file mode 100644 index 000000000..dfb99b7db --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricEdgeBasis_Triangle_test_1.md @@ -0,0 +1,58 @@ +```fortran +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:), lambda(:, :) + integer(i4b) :: ii, jj, cnt, n + + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + + lambda = BarycentricCoordTriangle(xij, "UNIT") + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=4 + pe1=order; pe2 = order; pe3 = order + !! + ans = BarycentricEdgeBasis_Triangle(& + & pe1=pe1, pe2=pe2, pe3=pe3 , & + & lambda=lambda ) + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"PVertexBary( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK +end program main +``` + + + + + + + diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricHeirarchicalBasis_Triangle_test_1.md b/docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricHeirarchicalBasis_Triangle_test_1.md new file mode 100644 index 000000000..865cbb53f --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricHeirarchicalBasis_Triangle_test_1.md @@ -0,0 +1,185 @@ +```fortran +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:), lambda(:,:) + integer(i4b) :: ii, jj, cnt, n +``` + +```fortran title="generate points" + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + + lambda = BarycentricCoordTriangle(xij, "UNIT") +``` + +```fortran title="order=1; pe1=1; pe2=1; pe3=1" + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=1; pe1=1; pe2=1; pe3=1 + !! + ans = BarycentricHeirarchicalBasis_Triangle(& + & order=order, pe1=pe1, pe2=pe2, pe3=pe3, & + & lambda=lambda, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Pbary( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK +``` + + + + + + +```fortran title="order=3; pe1=3; pe2=3; pe3=3" + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=3; pe1=3; pe2=3; pe3=3 + !! + ans = BarycentricHeirarchicalBasis_Triangle(& + & order=order, pe1=pe1, pe2=pe2, pe3=pe3, & + & lambda=lambda, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Pbary( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK +``` + + + + + + + + + +```fortran title="order=4; pe1=4; pe2=4; pe3=4" + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=4; pe1=4; pe2=4; pe3=4 + !! + ans = BarycentricHeirarchicalBasis_Triangle(& + & order=order, pe1=pe1, pe2=pe2, pe3=pe3, & + & lambda=lambda, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Pbary( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK +``` + + + + + + + + + +```fortran title="order=5; pe1=5; pe2=5; pe3=5" + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=5; pe1=5; pe2=5; pe3=5 + !! + ans = BarycentricHeirarchicalBasis_Triangle(& + & order=order, pe1=pe1, pe2=pe2, pe3=pe3, & + & lambda=lambda, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Pbary( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK +``` + +```fortran title="order=5; pe1=1; pe2=5; pe3=3" + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=5; pe1=1; pe2=5; pe3=3 + !! + ans = BarycentricHeirarchicalBasis_Triangle(& + & order=order, pe1=pe1, pe2=pe2, pe3=pe3, & + & lambda=lambda, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Pbary( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK +``` + +```fortran +end program main +``` diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricHeirarchicalBasis_Triangle_test_2.md b/docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricHeirarchicalBasis_Triangle_test_2.md new file mode 100644 index 000000000..5b5347e56 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricHeirarchicalBasis_Triangle_test_2.md @@ -0,0 +1,45 @@ +```fortran +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:), lambda(:,:) + integer(i4b) :: ii, jj, cnt, n + + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + + lambda = BarycentricCoordTriangle(xij, "UNIT") + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=5 + !! + ans = BarycentricHeirarchicalBasis_Triangle(order=order, & + & lambda=lambda, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Pbary( order=" // tostring(order) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK +end program main +``` diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricVertexBasis_Triangle_test_1.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricVertexBasis_Triangle_test_1.F90 new file mode 100644 index 000000000..c73b9204d --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricVertexBasis_Triangle_test_1.F90 @@ -0,0 +1,41 @@ + +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:), lambda(:, :) + integer(i4b) :: ii, jj, cnt, n + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + lambda = BarycentricCoordTriangle(xij, "UNIT") + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=4 + pe1=order; pe2 = order; pe3 = order + !! + ans = BarycentricVertexBasis_Triangle(& + & lambda=lambda ) + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"PVertexBary-" // tostring(ii) // & + & tostring(ii) //".vtp", & + & label="P") + end do + !! + END BLOCK +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricVertexBasis_Triangle_test_1.md b/docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricVertexBasis_Triangle_test_1.md new file mode 100644 index 000000000..407b4b821 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_BarycentricVertexBasis_Triangle_test_1.md @@ -0,0 +1,49 @@ +```fortran +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:), lambda(:, :) + integer(i4b) :: ii, jj, cnt, n + + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + + lambda = BarycentricCoordTriangle(xij, "UNIT") + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=4 + pe1=order; pe2 = order; pe3 = order + !! + ans = BarycentricVertexBasis_Triangle(& + & lambda=lambda ) + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"PVertexBary-" // tostring(ii) // & + & tostring(ii) //".vtp", & + & label="P") + end do + !! + END BLOCK +end program main +``` + + + + diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_CellBasis_Triangle_test_1.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_CellBasis_Triangle_test_1.F90 new file mode 100644 index 000000000..01e0177b8 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_CellBasis_Triangle_test_1.F90 @@ -0,0 +1,33 @@ + +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: order + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + order=5 + ans = CellBasis_Triangle(order=order, xij=xij, refTriangle="UNIT") + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"CellBasis( order=" // tostring(order) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_CellBasis_Triangle_test_1.md b/docs/docs-api/TriangleInterpolationUtility/examples/_CellBasis_Triangle_test_1.md new file mode 100644 index 000000000..d2766ba08 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_CellBasis_Triangle_test_1.md @@ -0,0 +1,41 @@ +```fortran +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: order + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + + order=5 + ans = CellBasis_Triangle(order=order, xij=xij, refTriangle="UNIT") + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"CellBasis( order=" // tostring(order) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do +end program main +``` + + + + + diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_Dubiner_Triangle_test_1.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_Dubiner_Triangle_test_1.F90 new file mode 100644 index 000000000..1e0dfd156 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_Dubiner_Triangle_test_1.F90 @@ -0,0 +1,34 @@ +PROGRAM main +USE easifembase +USE easifemClasses +IMPLICIT NONE +REAL(dfp), ALLOCATABLE :: xij(:, :), avec(:) +INTEGER(i4b) :: ii, jj, cnt, n +REAL(dfp), ALLOCATABLE :: ans(:, :) +INTEGER(i4b) :: order +TYPE(VTKPlot_) :: aplot +CHARACTER(len=*), PARAMETER :: fname = "./results/" +n = 51 +CALL reallocate(avec, n) +CALL reallocate(xij, 2, INT((n + 1) * (n + 2) / 2)) +avec = linspace(0.0_DFP, 1.0_DFP, n) +cnt = 0 +DO ii = 1, n + DO jj = 1, n - ii + 1 + cnt = cnt + 1 + xij(1, cnt) = avec(ii) + xij(2, cnt) = avec(jj) + END DO +END DO +order = 1 +ans = Dubiner_Triangle(& + & order=order, xij=xij, & + & refTriangle="UNIT") +DO ii = 1, SIZE(ans, 2) + CALL aplot%scatter3D(x=xij(1, :), y=xij(2, :), z=ans(:, ii), & + & filename=fname//"Dubiner( order="//tostring(order)// & + & " )"//tostring(ii)// & + & ".vtp", & + & label="P") +END DO +END PROGRAM main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_Dubiner_Triangle_test_1.md b/docs/docs-api/TriangleInterpolationUtility/examples/_Dubiner_Triangle_test_1.md new file mode 100644 index 000000000..d8bd60d4e --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_Dubiner_Triangle_test_1.md @@ -0,0 +1,46 @@ +```fortran +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: order + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + + order=1 + ans = Dubiner_Triangle(& + & order=order, xij=xij, & + & refTriangle="UNIT") + + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Dubiner( order=" // tostring(order) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + +end program main +``` + +Results: + + + + diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_Dubiner_Triangle_test_2.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_Dubiner_Triangle_test_2.F90 new file mode 100644 index 000000000..c40e73ca0 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_Dubiner_Triangle_test_2.F90 @@ -0,0 +1,35 @@ + +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: order + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + order=2 + ans = Dubiner_Triangle(& + & order=order, xij=xij, & + & refTriangle="UNIT") + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Dubiner( order=" // tostring(order) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_Dubiner_Triangle_test_2.md b/docs/docs-api/TriangleInterpolationUtility/examples/_Dubiner_Triangle_test_2.md new file mode 100644 index 000000000..344fdbab0 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_Dubiner_Triangle_test_2.md @@ -0,0 +1,47 @@ +```fortran +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: order + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + + order=2 + ans = Dubiner_Triangle(& + & order=order, xij=xij, & + & refTriangle="UNIT") + + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Dubiner( order=" // tostring(order) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + +end program main +``` + + + + + + + diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_EdgeBasis_Triangle_test_1.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_EdgeBasis_Triangle_test_1.F90 new file mode 100644 index 000000000..429358810 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_EdgeBasis_Triangle_test_1.F90 @@ -0,0 +1,38 @@ + +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + order=3; pe1=3; pe2=3; pe3=3 + ans = EdgeBasis_Triangle(& + & pe1=pe1, pe2=pe2, pe3=pe3, & + & xij=xij, refTriangle="UNIT") + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"EdgeBasis( " // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_EdgeBasis_Triangle_test_1.md b/docs/docs-api/TriangleInterpolationUtility/examples/_EdgeBasis_Triangle_test_1.md new file mode 100644 index 000000000..9f922fecb --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_EdgeBasis_Triangle_test_1.md @@ -0,0 +1,49 @@ +```fortran +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + + order=3; pe1=3; pe2=3; pe3=3 + + ans = EdgeBasis_Triangle(& + & pe1=pe1, pe2=pe2, pe3=pe3, & + & xij=xij, refTriangle="UNIT") + + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"EdgeBasis( " // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + +end program main +``` + + + + + diff --git a/docs/docs-api/TriangleInterpolationUtility/_EquidistanceInPoint_Triangle_test_1.md b/docs/docs-api/TriangleInterpolationUtility/examples/_EquidistanceInPoint_Triangle_test_1.md similarity index 100% rename from docs/docs-api/TriangleInterpolationUtility/_EquidistanceInPoint_Triangle_test_1.md rename to docs/docs-api/TriangleInterpolationUtility/examples/_EquidistanceInPoint_Triangle_test_1.md diff --git a/docs/docs-api/TriangleInterpolationUtility/_EquidistancePoint_Triangle_test_1.md b/docs/docs-api/TriangleInterpolationUtility/examples/_EquidistancePoint_Triangle_test_1.md similarity index 100% rename from docs/docs-api/TriangleInterpolationUtility/_EquidistancePoint_Triangle_test_1.md rename to docs/docs-api/TriangleInterpolationUtility/examples/_EquidistancePoint_Triangle_test_1.md diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_HeirarchicalBasis_Triangle_test_1.md b/docs/docs-api/TriangleInterpolationUtility/examples/_HeirarchicalBasis_Triangle_test_1.md new file mode 100644 index 000000000..977e1d8b0 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_HeirarchicalBasis_Triangle_test_1.md @@ -0,0 +1,57 @@ +:::note "order=1; pe1=1; pe2=1; pe3=1" +::: + +```fortran +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=1; pe1=1; pe2=1; pe3=1 + !! + ans = HeirarchicalBasis_Triangle(& + & order=order, pe1=pe1, pe2=pe2, pe3=pe3, & + & xij=xij, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Ph( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK + +end program main +``` + + + + + + diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_HeirarchicalBasis_Triangle_test_2.md b/docs/docs-api/TriangleInterpolationUtility/examples/_HeirarchicalBasis_Triangle_test_2.md new file mode 100644 index 000000000..b307a60da --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_HeirarchicalBasis_Triangle_test_2.md @@ -0,0 +1,58 @@ +:::note "order=3; pe1=3; pe2=3; pe3=3" +::: + +```fortran +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=3; pe1=3; pe2=3; pe3=3 + !! + ans = HeirarchicalBasis_Triangle(& + & order=order, pe1=pe1, pe2=pe2, pe3=pe3, & + & xij=xij, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Ph( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK + +end program main +``` + + + + + + + diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_HeirarchicalBasis_Triangle_test_3.md b/docs/docs-api/TriangleInterpolationUtility/examples/_HeirarchicalBasis_Triangle_test_3.md new file mode 100644 index 000000000..d37faa1de --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_HeirarchicalBasis_Triangle_test_3.md @@ -0,0 +1,59 @@ +:::note "order=4; pe1=4; pe2=4; pe3=4" +::: + +```fortran +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=4; pe1=4; pe2=4; pe3=4 + !! + ans = HeirarchicalBasis_Triangle(& + & order=order, pe1=pe1, pe2=pe2, pe3=pe3, & + & xij=xij, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Ph( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + !! + END BLOCK + +end program main +``` + + + + + + + + diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_HeirarchicalBasis_Triangle_test_4.md b/docs/docs-api/TriangleInterpolationUtility/examples/_HeirarchicalBasis_Triangle_test_4.md new file mode 100644 index 000000000..52936a2e4 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_HeirarchicalBasis_Triangle_test_4.md @@ -0,0 +1,47 @@ +:::note "order=5; pe1=1; pe2=5; pe3=3" +::: + +```fortran +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + order=5; pe1=1; pe2=5; pe3=3 + ans = HeirarchicalBasis_Triangle(& + & order=order, pe1=pe1, pe2=pe2, pe3=pe3, & + & xij=xij, refTriangle="UNIT") + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"Ph( order=" // tostring(order) // & + & ", pe1="//tostring(pe1) // & + & ", pe2="//tostring(pe2) // & + & ", pe3="//tostring(pe3) // & + & " )" // tostring(ii) // & + & ".vtp", & + & label="P") + end do + END BLOCK + +end program main +``` diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_1.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_1.F90 new file mode 100644 index 000000000..61c08c82a --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_1.F90 @@ -0,0 +1,16 @@ + +program main + use easifembase + implicit none + integer( i4b ) :: i1, i2, order, ipType + real( dfp ), allocatable :: x(:,:), xij(:, :) + CHARACTER( 20 ) :: layout + order=5 + xij = RefTriangleCoord("UNIT") + ipType=Equidistance + layout="VEFC" + x =InterpolationPoint_Triangle( order=order, & + & ipType=ipType, layout=layout, xij=xij) + call display( Mdencode(TRANSPOSE(x)), "xij (order="//tostring(order)//")=" ) + call blanklines(nol=2) +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/_InterpolationPoint_Triangle_test_1.md b/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_1.md similarity index 100% rename from docs/docs-api/TriangleInterpolationUtility/_InterpolationPoint_Triangle_test_1.md rename to docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_1.md diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_2.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_2.F90 new file mode 100644 index 000000000..497245d43 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_2.F90 @@ -0,0 +1,16 @@ + +program main + use easifembase + implicit none + integer( i4b ) :: i1, i2, order, ipType + real( dfp ), allocatable :: x(:,:), xij(:, :) + CHARACTER( 20 ) :: layout + order=5 + xij = RefTriangleCoord("UNIT") + ipType=BlythPozChebyshev + layout="VEFC" + x =InterpolationPoint_Triangle( order=order, & + & ipType=ipType, layout=layout, xij=xij) + call display( Mdencode(TRANSPOSE(x)), "xij (order="//tostring(order)//")=" ) + call blanklines(nol=2) +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/_InterpolationPoint_Triangle_test_2.md b/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_2.md similarity index 100% rename from docs/docs-api/TriangleInterpolationUtility/_InterpolationPoint_Triangle_test_2.md rename to docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_2.md diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_3.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_3.F90 new file mode 100644 index 000000000..855b2ffe5 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_3.F90 @@ -0,0 +1,16 @@ + +program main + use easifembase + implicit none + integer( i4b ) :: i1, i2, order, ipType + real( dfp ), allocatable :: x(:,:), xij(:, :) + CHARACTER( 20 ) :: layout + order=5 + xij = RefTriangleCoord("UNIT") + ipType=BlythPozLegendre + layout="VEFC" + x =InterpolationPoint_Triangle( order=order, & + & ipType=ipType, layout=layout, xij=xij) + call display( Mdencode(TRANSPOSE(x)), "xij (order="//tostring(order)//")=" ) + call blanklines(nol=2) +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/_InterpolationPoint_Triangle_test_3.md b/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_3.md similarity index 100% rename from docs/docs-api/TriangleInterpolationUtility/_InterpolationPoint_Triangle_test_3.md rename to docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_3.md diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_4.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_4.F90 new file mode 100644 index 000000000..1aca002ce --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_4.F90 @@ -0,0 +1,16 @@ + +program main + use easifembase + implicit none + integer( i4b ) :: i1, i2, order, ipType + real( dfp ), allocatable :: x(:,:), xij(:, :) + CHARACTER( 20 ) :: layout + order=5 + xij = RefTriangleCoord("UNIT") + ipType=IsaacLegendre + layout="VEFC" + x =InterpolationPoint_Triangle( order=order, & + & ipType=ipType, layout=layout, xij=xij) + call display( Mdencode(TRANSPOSE(x)), "xij (order="//tostring(order)//")=" ) + call blanklines(nol=2) +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/_InterpolationPoint_Triangle_test_4.md b/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_4.md similarity index 100% rename from docs/docs-api/TriangleInterpolationUtility/_InterpolationPoint_Triangle_test_4.md rename to docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_4.md diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_5.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_5.F90 new file mode 100644 index 000000000..1aca002ce --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_5.F90 @@ -0,0 +1,16 @@ + +program main + use easifembase + implicit none + integer( i4b ) :: i1, i2, order, ipType + real( dfp ), allocatable :: x(:,:), xij(:, :) + CHARACTER( 20 ) :: layout + order=5 + xij = RefTriangleCoord("UNIT") + ipType=IsaacLegendre + layout="VEFC" + x =InterpolationPoint_Triangle( order=order, & + & ipType=ipType, layout=layout, xij=xij) + call display( Mdencode(TRANSPOSE(x)), "xij (order="//tostring(order)//")=" ) + call blanklines(nol=2) +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/_InterpolationPoint_Triangle_test_5.md b/docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_5.md similarity index 100% rename from docs/docs-api/TriangleInterpolationUtility/_InterpolationPoint_Triangle_test_5.md rename to docs/docs-api/TriangleInterpolationUtility/examples/_InterpolationPoint_Triangle_test_5.md diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_1.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_1.F90 new file mode 100644 index 000000000..3edc714f6 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_1.F90 @@ -0,0 +1,19 @@ + +program main + use easifembase + implicit none + integer( i4b ) :: i1, i2, order, ipType + real( dfp ), allocatable :: x(:,:), xij(:, :), coeff(:, :) + integer(i4b), allocatable:: degree(:, :) + CHARACTER( 20 ) :: layout + order=1 + xij = RefTriangleCoord("UNIT") + ipType=Equidistance + layout="VEFC" + x =InterpolationPoint_Triangle( order=order, & + & ipType=ipType, layout=layout, xij=xij) + degree = LagrangeDegree_Triangle(order=order) + coeff = LagrangeCoeff_Triangle(order=order, xij=x) + CALL Display(mdencode(degree), "degree: ") + CALL Display(mdencode(coeff), "coeff: ") +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/_LagrangeCoeff_Triangle_test_1.md b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_1.md similarity index 100% rename from docs/docs-api/TriangleInterpolationUtility/_LagrangeCoeff_Triangle_test_1.md rename to docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_1.md diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_2.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_2.F90 new file mode 100644 index 000000000..5b1c6c79d --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_2.F90 @@ -0,0 +1,19 @@ + +program main + use easifembase + implicit none + integer( i4b ) :: i1, i2, order, ipType + real( dfp ), allocatable :: x(:,:), xij(:, :), coeff(:, :) + integer(i4b), allocatable:: degree(:, :) + CHARACTER( 20 ) :: layout + order=2 + xij = RefTriangleCoord("UNIT") + ipType=Equidistance + layout="VEFC" + x =InterpolationPoint_Triangle( order=order, & + & ipType=ipType, layout=layout, xij=xij) + degree = LagrangeDegree_Triangle(order=order) + coeff = LagrangeCoeff_Triangle(order=order, xij=x) + CALL Display(mdencode(degree), "degree: ") + CALL Display(mdencode(coeff), "coeff: ") +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/_LagrangeCoeff_Triangle_test_2.md b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_2.md similarity index 100% rename from docs/docs-api/TriangleInterpolationUtility/_LagrangeCoeff_Triangle_test_2.md rename to docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_2.md diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_3.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_3.F90 new file mode 100644 index 000000000..8d6f23787 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_3.F90 @@ -0,0 +1,23 @@ + +program main + use easifembase + implicit none + integer( i4b ) :: i1, i2, order, ipType + real( dfp ), allocatable :: x(:,:), xij(:, :), coeff(:) + integer(i4b), allocatable:: degree(:, :) + CHARACTER( 20 ) :: layout + order=1 + xij = RefTriangleCoord("UNIT") + ipType=Equidistance + layout="VEFC" + x =InterpolationPoint_Triangle( order=order, & + & ipType=ipType, layout=layout, xij=xij) + degree = LagrangeDegree_Triangle(order=order) + coeff = LagrangeCoeff_Triangle(order=order, xij=x, i = 1) + CALL Display(mdencode(degree), "degree: ") + CALL Display(mdencode(coeff), "coeff(1): ") + coeff = LagrangeCoeff_Triangle(order=order, xij=x, i = 2) + CALL Display(mdencode(coeff), "coeff(2): ") + coeff = LagrangeCoeff_Triangle(order=order, xij=x, i = 3) + CALL Display(mdencode(coeff), "coeff(3): ") +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/_LagrangeCoeff_Triangle_test_3.md b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_3.md similarity index 100% rename from docs/docs-api/TriangleInterpolationUtility/_LagrangeCoeff_Triangle_test_3.md rename to docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_3.md diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_4.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_4.F90 new file mode 100644 index 000000000..3fced491b --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_4.F90 @@ -0,0 +1,24 @@ + +program main + use easifembase + implicit none + integer( i4b ) :: i1, i2, order, ipType + real( dfp ), allocatable :: x(:,:), xij(:, :), coeff(:), V(:, :) + integer(i4b), allocatable:: degree(:, :) + CHARACTER( 20 ) :: layout + order=1 + xij = RefTriangleCoord("UNIT") + ipType=Equidistance + layout="VEFC" + x =InterpolationPoint_Triangle( order=order, & + & ipType=ipType, layout=layout, xij=xij) + degree = LagrangeDegree_Triangle(order=order) + V = LagrangeVandermonde(order=order, xij=x, elemType=Triangle) + coeff = LagrangeCoeff_Triangle(order=order, i = 1, V=V, isVanderMonde=.true.) + CALL Display(mdencode(degree), "degree: ") + CALL Display(mdencode(coeff), "coeff(1): ") + coeff = LagrangeCoeff_Triangle(order=order, i = 2, V=V, isVanderMonde=.true.) + CALL Display(mdencode(coeff), "coeff(2): ") + coeff = LagrangeCoeff_Triangle(order=order, i = 3, V=V, isVanderMonde=.true.) + CALL Display(mdencode(coeff), "coeff(3): ") +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/_LagrangeCoeff_Triangle_test_4.md b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_4.md similarity index 100% rename from docs/docs-api/TriangleInterpolationUtility/_LagrangeCoeff_Triangle_test_4.md rename to docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_4.md diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_5.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_5.F90 new file mode 100644 index 000000000..bfecb4050 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_5.F90 @@ -0,0 +1,26 @@ + +program main + use easifembase + implicit none + integer( i4b ) :: i1, i2, order, ipType + real( dfp ), allocatable :: x(:,:), xij(:, :), coeff(:), V(:, :) + integer(i4b), allocatable:: degree(:, :), ipiv(:) + CHARACTER( 20 ) :: layout + order=1 + xij = RefTriangleCoord("UNIT") + ipType=Equidistance + layout="VEFC" + x =InterpolationPoint_Triangle( order=order, & + & ipType=ipType, layout=layout, xij=xij) + degree = LagrangeDegree_Triangle(order=order) + V = LagrangeVandermonde(order=order, xij=x, elemType=Triangle) + call reallocate(ipiv, size(x, 2) ) + CALL GetLU(A=V, IPIV=ipiv) + coeff = LagrangeCoeff_Triangle(order=order, i = 1, V=V, ipiv=ipiv) + CALL Display(mdencode(degree), "degree: ") + CALL Display(mdencode(coeff), "coeff(1): ") + coeff = LagrangeCoeff_Triangle(order=order, i = 2, V=V, ipiv=ipiv) + CALL Display(mdencode(coeff), "coeff(2): ") + coeff = LagrangeCoeff_Triangle(order=order, i = 3, V=V, ipiv=ipiv) + CALL Display(mdencode(coeff), "coeff(3): ") +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/_LagrangeCoeff_Triangle_test_5.md b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_5.md similarity index 100% rename from docs/docs-api/TriangleInterpolationUtility/_LagrangeCoeff_Triangle_test_5.md rename to docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeCoeff_Triangle_test_5.md diff --git a/docs/docs-api/TriangleInterpolationUtility/_LagrangeDOF_Triangle_test_1.md b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeDOF_Triangle_test_1.md similarity index 100% rename from docs/docs-api/TriangleInterpolationUtility/_LagrangeDOF_Triangle_test_1.md rename to docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeDOF_Triangle_test_1.md diff --git a/docs/docs-api/TriangleInterpolationUtility/_LagrangeDegree_Triangle_test_1.md b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeDegree_Triangle_test_1.md similarity index 100% rename from docs/docs-api/TriangleInterpolationUtility/_LagrangeDegree_Triangle_test_1.md rename to docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeDegree_Triangle_test_1.md diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_1.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_1.F90 new file mode 100644 index 000000000..585efa1cc --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_1.F90 @@ -0,0 +1,25 @@ + +program main + use easifembase + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + real(dfp), allocatable :: ans(:), coeff(:,:) + integer(i4b) :: order, basisType + order = 4 + basisType = Monomial + xij = InterpolationPoint_Triangle( & + & order=order, & + & ipType=Equidistance, & + & xij=RefTriangleCoord("UNIT"), & + & layout="VEFC") + call reallocate(coeff, size(xij, 2), size(xij,2)) + ans = LagrangeEvalAll_Triangle(& + & order=order, & + & x=[0.0_DFP, 0.0_DFP], & + & xij=xij, & + & refTriangle="UNIT", & + & basisType=basisType, & + & coeff=coeff) + call display(ans, "ans = ") +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_1.md b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_1.md new file mode 100644 index 000000000..505b304c3 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_1.md @@ -0,0 +1,31 @@ +```fortran +program main + use easifembase + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + real(dfp), allocatable :: ans(:), coeff(:,:) + integer(i4b) :: order, basisType + + + order = 4 + basisType = Monomial + xij = InterpolationPoint_Triangle( & + & order=order, & + & ipType=Equidistance, & + & xij=RefTriangleCoord("UNIT"), & + & layout="VEFC") + + call reallocate(coeff, size(xij, 2), size(xij,2)) + + ans = LagrangeEvalAll_Triangle(& + & order=order, & + & x=[0.0_DFP, 0.0_DFP], & + & xij=xij, & + & refTriangle="UNIT", & + & basisType=basisType, & + & coeff=coeff) + + call display(ans, "ans = ") +end program main +``` diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_2.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_2.F90 new file mode 100644 index 000000000..aac60023a --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_2.F90 @@ -0,0 +1,25 @@ + +program main + use easifembase + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + real(dfp), allocatable :: ans(:), coeff(:,:) + integer(i4b) :: order, basisType + order = 4 + basisType = Jacobi + xij = InterpolationPoint_Triangle( & + & order=order, & + & ipType=Equidistance, & + & xij=RefTriangleCoord("UNIT"), & + & layout="VEFC") + call reallocate(coeff, size(xij, 2), size(xij,2)) + ans = LagrangeEvalAll_Triangle(& + & order=order, & + & x=[0.0_DFP, 0.0_DFP], & + & xij=xij, & + & refTriangle="UNIT", & + & basisType=basisType, & + & coeff=coeff) + call display(ans, "ans = ") +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_2.md b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_2.md new file mode 100644 index 000000000..25cd597bd --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_2.md @@ -0,0 +1,31 @@ +```fortran +program main + use easifembase + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + real(dfp), allocatable :: ans(:), coeff(:,:) + integer(i4b) :: order, basisType + + + order = 4 + basisType = Jacobi + xij = InterpolationPoint_Triangle( & + & order=order, & + & ipType=Equidistance, & + & xij=RefTriangleCoord("UNIT"), & + & layout="VEFC") + + call reallocate(coeff, size(xij, 2), size(xij,2)) + + ans = LagrangeEvalAll_Triangle(& + & order=order, & + & x=[0.0_DFP, 0.0_DFP], & + & xij=xij, & + & refTriangle="UNIT", & + & basisType=basisType, & + & coeff=coeff) + + call display(ans, "ans = ") +end program main +``` diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_3.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_3.F90 new file mode 100644 index 000000000..7ad4c6126 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_3.F90 @@ -0,0 +1,25 @@ + +program main + use easifembase + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + real(dfp), allocatable :: ans(:), coeff(:,:) + integer(i4b) :: order, basisType + order = 1 + basisType = Heirarchical + xij = InterpolationPoint_Triangle( & + & order=order, & + & ipType=Equidistance, & + & xij=RefTriangleCoord("UNIT"), & + & layout="VEFC") + call reallocate(coeff, size(xij, 2), size(xij,2)) + ans = LagrangeEvalAll_Triangle(& + & order=order, & + & x=[0.0_DFP, 0.0_DFP], & + & xij=xij, & + & refTriangle="UNIT", & + & basisType=basisType, & + & coeff=coeff) + call display(ans, "ans = ") +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_3.md b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_3.md new file mode 100644 index 000000000..0f29da24a --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_3.md @@ -0,0 +1,31 @@ +```fortran +program main + use easifembase + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + real(dfp), allocatable :: ans(:), coeff(:,:) + integer(i4b) :: order, basisType + + + order = 1 + basisType = Heirarchical + xij = InterpolationPoint_Triangle( & + & order=order, & + & ipType=Equidistance, & + & xij=RefTriangleCoord("UNIT"), & + & layout="VEFC") + + call reallocate(coeff, size(xij, 2), size(xij,2)) + + ans = LagrangeEvalAll_Triangle(& + & order=order, & + & x=[0.0_DFP, 0.0_DFP], & + & xij=xij, & + & refTriangle="UNIT", & + & basisType=basisType, & + & coeff=coeff) + + call display(ans, "ans = ") +end program main +``` diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_4.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_4.F90 new file mode 100644 index 000000000..a14e79a29 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_4.F90 @@ -0,0 +1,25 @@ + +program main + use easifembase + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + real(dfp), allocatable :: ans(:, :), coeff(:,:) + integer(i4b) :: order, basisType + order = 4 + basisType = Monomial + xij = InterpolationPoint_Triangle( & + & order=order, & + & ipType=Equidistance, & + & xij=RefTriangleCoord("UNIT"), & + & layout="VEFC") + call reallocate(coeff, size(xij, 2), size(xij,2)) + ans = LagrangeEvalAll_Triangle(& + & order=order, & + & x=xij, & + & xij=xij, & + & refTriangle="UNIT", & + & basisType=basisType, & + & coeff=coeff) + call display(ans, "ans = ") +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_4.md b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_4.md new file mode 100644 index 000000000..8b6795698 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_4.md @@ -0,0 +1,31 @@ +```fortran +program main + use easifembase + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + real(dfp), allocatable :: ans(:, :), coeff(:,:) + integer(i4b) :: order, basisType + + + order = 4 + basisType = Monomial + xij = InterpolationPoint_Triangle( & + & order=order, & + & ipType=Equidistance, & + & xij=RefTriangleCoord("UNIT"), & + & layout="VEFC") + + call reallocate(coeff, size(xij, 2), size(xij,2)) + + ans = LagrangeEvalAll_Triangle(& + & order=order, & + & x=xij, & + & xij=xij, & + & refTriangle="UNIT", & + & basisType=basisType, & + & coeff=coeff) + + call display(ans, "ans = ") +end program main +``` diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_5.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_5.F90 new file mode 100644 index 000000000..8253b947c --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_5.F90 @@ -0,0 +1,25 @@ + +program main + use easifembase + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + real(dfp), allocatable :: ans(:, :), coeff(:,:) + integer(i4b) :: order, basisType + order = 4 + basisType = Jacobi + xij = InterpolationPoint_Triangle( & + & order=order, & + & ipType=Equidistance, & + & xij=RefTriangleCoord("UNIT"), & + & layout="VEFC") + call reallocate(coeff, size(xij, 2), size(xij,2)) + ans = LagrangeEvalAll_Triangle(& + & order=order, & + & x=xij, & + & xij=xij, & + & refTriangle="UNIT", & + & basisType=basisType, & + & coeff=coeff) + call display(ans, "ans = ") +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_5.md b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_5.md new file mode 100644 index 000000000..360109462 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_5.md @@ -0,0 +1,31 @@ +```fortran +program main + use easifembase + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + real(dfp), allocatable :: ans(:, :), coeff(:,:) + integer(i4b) :: order, basisType + + + order = 4 + basisType = Jacobi + xij = InterpolationPoint_Triangle( & + & order=order, & + & ipType=Equidistance, & + & xij=RefTriangleCoord("UNIT"), & + & layout="VEFC") + + call reallocate(coeff, size(xij, 2), size(xij,2)) + + ans = LagrangeEvalAll_Triangle(& + & order=order, & + & x=xij, & + & xij=xij, & + & refTriangle="UNIT", & + & basisType=basisType, & + & coeff=coeff) + + call display(ans, "ans = ") +end program main +``` diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_6.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_6.F90 new file mode 100644 index 000000000..4efa26af8 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_6.F90 @@ -0,0 +1,25 @@ + +program main + use easifembase + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + real(dfp), allocatable :: ans(:, :), coeff(:,:) + integer(i4b) :: order, basisType + order = 4 + basisType = Heirarchical + xij = InterpolationPoint_Triangle( & + & order=order, & + & ipType=Equidistance, & + & xij=RefTriangleCoord("UNIT"), & + & layout="VEFC") + call reallocate(coeff, size(xij, 2), size(xij,2)) + ans = LagrangeEvalAll_Triangle(& + & order=order, & + & x=xij, & + & xij=xij, & + & refTriangle="UNIT", & + & basisType=basisType, & + & coeff=coeff) + call display(ans, "ans = ") +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_6.md b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_6.md new file mode 100644 index 000000000..783e671de --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeEvalAll_Triangle_test_6.md @@ -0,0 +1,31 @@ +```fortran +program main + use easifembase + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + real(dfp), allocatable :: ans(:, :), coeff(:,:) + integer(i4b) :: order, basisType + + + order = 4 + basisType = Heirarchical + xij = InterpolationPoint_Triangle( & + & order=order, & + & ipType=Equidistance, & + & xij=RefTriangleCoord("UNIT"), & + & layout="VEFC") + + call reallocate(coeff, size(xij, 2), size(xij,2)) + + ans = LagrangeEvalAll_Triangle(& + & order=order, & + & x=xij, & + & xij=xij, & + & refTriangle="UNIT", & + & basisType=basisType, & + & coeff=coeff) + + call display(ans, "ans = ") +end program main +``` diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeInDOF_Triangle_test_1.md b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeInDOF_Triangle_test_1.md new file mode 100644 index 000000000..3724e9384 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_LagrangeInDOF_Triangle_test_1.md @@ -0,0 +1,19 @@ +```fortran +program main + use easifembase + implicit none + integer( i4b ) :: i1, i2 + i1 = LagrangeInDOF_Triangle(order=1) + i2 = 0 + call IS( i1, i2 ) + i1 = LagrangeInDOF_Triangle(order=2) + i2 = 0 + call IS( i1, i2 ) + i1 = LagrangeInDOF_Triangle(order=3) + i2 = 1 + call IS( i1, i2 ) + i1 = LagrangeInDOF_Triangle(order=4) + i2 = 3 + call IS( i1, i2 ) +end program main +``` diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_QuadraturePoint_Triangle_test_1.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_QuadraturePoint_Triangle_test_1.F90 new file mode 100644 index 000000000..f1f1ea998 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_QuadraturePoint_Triangle_test_1.F90 @@ -0,0 +1,17 @@ + +program main + use easifembase + implicit none + integer( i4b ) :: i1, i2, order, quadType + real( dfp ), allocatable :: x(:,:), xij(:, :) + CHARACTER( 20 ) :: refTriangle + order=2 + xij = RefTriangleCoord("UNIT") + quadType=Equidistance + refTriangle="UNIT" + x =QuadraturePoint_Triangle( & + & order=order, & + & quadType=quadType, & + & refTriangle=refTriangle) + call display( Mdencode(x), "xij (order="//tostring(order)//")=" // char_lf // char_lf ) +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_QuadraturePoint_Triangle_test_1.md b/docs/docs-api/TriangleInterpolationUtility/examples/_QuadraturePoint_Triangle_test_1.md new file mode 100644 index 000000000..b5f2e668c --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_QuadraturePoint_Triangle_test_1.md @@ -0,0 +1,36 @@ +```fortran +program main + use easifembase + implicit none + integer( i4b ) :: i1, i2, order, quadType + real( dfp ), allocatable :: x(:,:), xij(:, :) + CHARACTER( 20 ) :: refTriangle + order=2 + xij = RefTriangleCoord("UNIT") + quadType=Equidistance + refTriangle="UNIT" + + x =QuadraturePoint_Triangle( & + & order=order, & + & quadType=quadType, & + & refTriangle=refTriangle) + + call display( Mdencode(x), "xij (order="//tostring(order)//")=" // char_lf // char_lf ) + +end program main +``` + +
+See results +
+ +xij (order=2)= + +| | | | | | | +| --- | --- | --- | --- | --- | --- | +| 1.11022E-16 | 5.55112E-17 | 0.5 | 0.25 | 1 | 0.5 | +| 0 | 0.5 | 0 | 0.5 | 0 | 0.5 | +| 2.77778E-02 | 5.55556E-02 | 0.11111 | 0.22222 | 2.77778E-02 | 5.55556E-02 | + +
+
diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_QuadraturePoint_Triangle_test_1b.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_QuadraturePoint_Triangle_test_1b.F90 new file mode 100644 index 000000000..0e46a51dc --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_QuadraturePoint_Triangle_test_1b.F90 @@ -0,0 +1,73 @@ +PROGRAM main +USE easifembase +IMPLICIT NONE +INTEGER(i4b) :: i1, i2, order, quadType +REAL(dfp), ALLOCATABLE :: x(:, :), xij(:, :) +CHARACTER(20) :: refTriangle +order = 2 +xij = RefTriangleCoord("UNIT") +quadType = Equidistance +refTriangle = "UNIT" +x = QuadraturePoint_Triangle( & + & order=order, & + & quadType=quadType, & + & refTriangle=refTriangle) + +CALL OK(test1(), "tests(1)") +CALL OK(test2(), "tests(2)") +CALL OK(test3(), "tests(3)") +CALL OK(.NOT. test4(), "tests(4)") + +CONTAINS +FUNCTION test1() RESULT(ans) + LOGICAL(LGT) :: ans + REAL(DFP) :: exact, compute, tol + INTEGER(I4B) :: ii + compute = 0.0 + DO ii = 1, SIZE(x, 2) + compute = compute + x(3, ii) * x(1, ii)**2 + END DO + exact = 1.0_DFP / 12.0_DFP + tol = 1.0E-10 + ans = SOFTEQ(exact, compute, tol) +END FUNCTION test1 + +FUNCTION test2() RESULT(ans) + LOGICAL(LGT) :: ans + REAL(DFP) :: exact, compute, tol + INTEGER(I4B) :: ii + compute = 0.0 + DO ii = 1, SIZE(x, 2) + compute = compute + x(3, ii) * x(2, ii)**2 + END DO + exact = 1.0_DFP / 12.0_DFP + tol = 1.0E-10 + ans = SOFTEQ(exact, compute, tol) +END FUNCTION + +FUNCTION test3() RESULT(ans) + LOGICAL(LGT) :: ans + REAL(DFP) :: exact, compute, tol + INTEGER(I4B) :: ii + compute = 0.0 + DO ii = 1, SIZE(x, 2) + compute = compute + x(3, ii) * x(2, ii) * x(1, ii) + END DO + exact = 1.0_DFP / 24.0_DFP + tol = 1.0E-10 + ans = SOFTEQ(exact, compute, tol) +END FUNCTION + +FUNCTION test4() RESULT(ans) + LOGICAL(LGT) :: ans + REAL(DFP) :: exact, compute, tol + INTEGER(I4B) :: ii + compute = 0.0 + DO ii = 1, SIZE(x, 2) + compute = compute + x(3, ii) * x(2, ii) * x(1, ii)**2 + END DO + exact = 1.0_DFP / 60.0_DFP + tol = 1.0E-10 + ans = SOFTEQ(exact, compute, tol) +END FUNCTION +END PROGRAM main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_QuadraturePoint_Triangle_test_1b.md b/docs/docs-api/TriangleInterpolationUtility/examples/_QuadraturePoint_Triangle_test_1b.md new file mode 100644 index 000000000..b721fe80e --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_QuadraturePoint_Triangle_test_1b.md @@ -0,0 +1,75 @@ +```fortran +PROGRAM main +USE easifembase +IMPLICIT NONE +INTEGER(i4b) :: i1, i2, order, quadType +REAL(dfp), ALLOCATABLE :: x(:, :), xij(:, :) +CHARACTER(20) :: refTriangle +order = 2 +xij = RefTriangleCoord("UNIT") +quadType = Equidistance +refTriangle = "UNIT" +x = QuadraturePoint_Triangle( & + & order=order, & + & quadType=quadType, & + & refTriangle=refTriangle) + +CALL OK(test1(), "tests(1)") +CALL OK(test2(), "tests(2)") +CALL OK(test3(), "tests(3)") +CALL OK(.NOT. test4(), "tests(4)") + +CONTAINS +FUNCTION test1() RESULT(ans) + LOGICAL(LGT) :: ans + REAL(DFP) :: exact, compute, tol + INTEGER(I4B) :: ii + compute = 0.0 + DO ii = 1, SIZE(x, 2) + compute = compute + x(3, ii) * x(1, ii)**2 + END DO + exact = 1.0_DFP / 12.0_DFP + tol = 1.0E-10 + ans = SOFTEQ(exact, compute, tol) +END FUNCTION test1 + +FUNCTION test2() RESULT(ans) + LOGICAL(LGT) :: ans + REAL(DFP) :: exact, compute, tol + INTEGER(I4B) :: ii + compute = 0.0 + DO ii = 1, SIZE(x, 2) + compute = compute + x(3, ii) * x(2, ii)**2 + END DO + exact = 1.0_DFP / 12.0_DFP + tol = 1.0E-10 + ans = SOFTEQ(exact, compute, tol) +END FUNCTION + +FUNCTION test3() RESULT(ans) + LOGICAL(LGT) :: ans + REAL(DFP) :: exact, compute, tol + INTEGER(I4B) :: ii + compute = 0.0 + DO ii = 1, SIZE(x, 2) + compute = compute + x(3, ii) * x(2, ii) * x(1, ii) + END DO + exact = 1.0_DFP / 24.0_DFP + tol = 1.0E-10 + ans = SOFTEQ(exact, compute, tol) +END FUNCTION + +FUNCTION test4() RESULT(ans) + LOGICAL(LGT) :: ans + REAL(DFP) :: exact, compute, tol + INTEGER(I4B) :: ii + compute = 0.0 + DO ii = 1, SIZE(x, 2) + compute = compute + x(3, ii) * x(2, ii) * x(1, ii)**2 + END DO + exact = 1.0_DFP / 60.0_DFP + tol = 1.0E-10 + ans = SOFTEQ(exact, compute, tol) +END FUNCTION +END PROGRAM main +``` diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_VertexBasis_Triangle_test_1.F90 b/docs/docs-api/TriangleInterpolationUtility/examples/_VertexBasis_Triangle_test_1.F90 new file mode 100644 index 000000000..8d69fcab0 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_VertexBasis_Triangle_test_1.F90 @@ -0,0 +1,39 @@ + +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=4 + pe1=order; pe2 = order; pe3 = order + !! + ans = VertexBasis_Triangle(xij=xij, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"PVertex-" // & + & tostring(ii) //".vtp", & + & label="P") + end do + !! + END BLOCK +end program main diff --git a/docs/docs-api/TriangleInterpolationUtility/examples/_VertexBasis_Triangle_test_1.md b/docs/docs-api/TriangleInterpolationUtility/examples/_VertexBasis_Triangle_test_1.md new file mode 100644 index 000000000..83d97963e --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/examples/_VertexBasis_Triangle_test_1.md @@ -0,0 +1,46 @@ +```fortran +program main + use easifembase + use easifemClasses + implicit none + real(dfp), allocatable :: xij(:,:), avec(:) + integer(i4b) :: ii, jj, cnt, n + + n = 51 + call reallocate(avec, n) + call reallocate(xij, 2, int((n+1)*(n+2)/2)) + avec= linspace(0.0_DFP, 1.0_DFP, n) + cnt=0 + do ii = 1, n + do jj = 1, n-ii+1 + cnt=cnt+1 + xij(1,cnt) = avec(ii) + xij(2,cnt) = avec(jj) + end do + end do + + BLOCK + real(dfp), allocatable :: ans(:,:) + integer(i4b) :: ii, order, pe1, pe2, pe3 + type( VTKPlot_ ) :: aplot + character(len=*), parameter :: fname="./results/" + !! + order=4 + pe1=order; pe2 = order; pe3 = order + !! + ans = VertexBasis_Triangle(xij=xij, refTriangle="UNIT") + !! + do ii = 1, size(ans,2) + call aplot%scatter3D(x=xij(1,:), y=xij(2, :), z=ans(:,ii), & + & filename=fname//"PVertex-" // & + & tostring(ii) //".vtp", & + & label="P") + end do + !! + END BLOCK +end program main +``` + + + + diff --git a/docs/docs-api/TriangleInterpolationUtility/index.md b/docs/docs-api/TriangleInterpolationUtility/index.md new file mode 100644 index 000000000..6bcb48f12 --- /dev/null +++ b/docs/docs-api/TriangleInterpolationUtility/index.md @@ -0,0 +1,53 @@ +--- +sidebar_position: 1 +date: 2023-07-02 +update: 2023-07-02 +status: stable +docs: done +extpkgs: none +category: + - Polynomial + - Interpolation +tags: + - polynomials + - interpolation + - easifemBase +--- + +# TriangleInterpolationUtility + + + +This module contains some useful routines for polynomials approximations on the triangles. + +Following methods are defined in this module. + +- [LagrangeDegree_Triangle](./LagrangeDegree_Triangle.md) Returns the monomial degrees of the Lagrange polynomials. +- [LagrangeDOF_Triangle](./LagrangeDOF_Triangle.md) Returns the total number of degrees of freedom for a Lagrange polynomial. +- [LagrangeInDOF_Triangle](./LagrangeInDOF_Triangle.md) Returns the total number of degrees of freedom inside the triangle (cell degree of freedoms) +- [EquidistanceInPoint_Triangle](./EquidistanceInPoint_Triangle.md) Returns the equidistance points which are strictly inside the triangle. +- [EquidistancePoint_Triangle](./EquidistancePoint_Triangle.md) Returns the equidistance points on triangle, which can be used for constructing Lagrange polynomials. +- [InterpolationPoint_Triangle](./InterpolationPoint_Triangle.md) Returns the interpolation points on the triangle. It can support various types of points on the triangle. +- [LagrangeCoeff_Triangle](./LagrangeCoeff_Triangle.md) Returns coefficients to form Lagrange polynomials. +- [Dubiner_Triangle](./Dubiner_Triangle.md) Returns the orthogonal basis on the triangle. +- [BarycentricVertexBasis_Triangle](./BarycentricVertexBasis_Triangle.md) Vertex basis in terms of Barycentric coordinates. +- [BarycentricEdgeBasis_Triangle](./BarycentricEdgeBasis_Triangle.md) +- [BarycentricHeirarchicalBasis_Triangle](./BarycentricHeirarchicalBasis_Triangle.md) +- [VertexBasis_Triangle](./VertexBasis_Triangle.md) +- [EdgeBasis_Triangle](./EdgeBasis_Triangle.md) +- [CellBasis_Triangle](./CellBasis_Triangle.md) +- [HeirarchicalBasis_Triangle](./HeirarchicalBasis_Triangle.md) +- [LagrangeEvalAll_Triangle](./LagrangeEvalAll_Triangle.md) +- `LagrangeGradientEvalAll_Triangle` +- `HeirarchicalBasisGradient_Triangle` +- `OrthogonalBasisGradient_Triangle` +- `QuadraturePoint_Triangle` +- `IJ2VEFC_Triangle` +- `FacetConnectivity_Triangle` +- `RefElemDomain_Triangle` + +## Methods + +import DocCardList from '@theme/DocCardList'; + + diff --git a/static/img/logo_hero copy.svg b/static/img/logo_hero copy.svg deleted file mode 100644 index 1a0aca649..000000000 --- a/static/img/logo_hero copy.svg +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/img/svg/easifem-base-design.svg b/static/img/svg/easifem-base-design.svg new file mode 100644 index 000000000..c4df7e6ed --- /dev/null +++ b/static/img/svg/easifem-base-design.svg @@ -0,0 +1,4 @@ + + + +
easifemBase
easifemBase
src
src
modules
modules
submodules
submodules
Header and Interface Only
Header and Interface Only
CSRSparsity
CSRSparsity
src
src
CSRSparsity_Method.F90
CSRSparsit...
CMakeLists.txt
CMakeLists...
Implementation
Implementation
CSRSparsity
CSRSparsity
src
src
CSRSparsity_Method@ConstructorMethods.F90
CSRSparsit...
CMakeLists.txt
CMakeLists...
CSRSparsity_Method@IOMethods.F90
CSRSparsit...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/static/release-notes/react-web-core.json b/static/release-notes/react-web-core.json deleted file mode 100644 index f84cd183a..000000000 --- a/static/release-notes/react-web-core.json +++ /dev/null @@ -1,108 +0,0 @@ -[ - { - "version": "1.14.0", - "createdAt": 1686303420, - "fixes": [ - "Added execution locks around `initClient` method to prevent accidental double initialisation method calls", - "Handled multiple edge cases around media capture and its retention" - ], - "features":[ - "Added self-troubleshooting features, allow users to run tests to discover issues in their calls. More details on this in the next release" - ] - }, - { - "version": "1.13.0", - "createdAt": 1685491200, - "fixes": [ - "Optimized `mediaPermissionUpdate` event to be emitted when the user grants media permission for the first time.", - "Improved the correctness of `meeting.self.getCurrentDevices()` to return the recent device list when the user grants the permission for the first time.", - "Fixed an edge case where the `screenshareUpdate` event would be emitted twice upon stopping the screenshare.", - "Improved the reliability of clearing the `pinned` state from participant after they leave meeting." - ], - "new_api": [ - "Added a new `CANCELLED` state to [meeting.self.mediaPermission](./local-user/introduction#properties) when the user cancels the screenshare selection dialog in Chromium browsers." - ] - }, - { - "version": "1.25.0", - "createdAt": 1679433268, - "fixes": [ - "Build issue for customers using Webpack v5 aliasing `process` with `false` is resolved.", - "Removed `Poll Messages` from [meeting.chat.messages](./reference/DyteChat#module_DyteChat+messages). Poll messages were wrongly included in the chat messages.", - "Optimized screenshare production for higher frame rate.", - "Improved correctness of [mediaScoreUpdate](./participants/events#network-quality-score) on participant." - ], - "new_api": [ - "The `defaults` parameter in the init() function [now take recording configuration](./recording#recording-configuration), which is utilized when [starting a recording](./recording#start-a-recording). ", - "When calling init() the `defaults` param now take screen sharing configuration. \nConfigure the preferred screen sharing screen surface (Screen / Window / Browser Tab)." - ] - }, - { - "version": "1.22.0", - "createdAt": 1678333268, - "fixes": [], - "features": [ - "**Interactive Livestream Release (LL-HLS)** \n 1. Broadcast a meeting to 100,000 viewers with Low latency (3-6 seconds)\n 2. Interactive Chat and Polls \n 3. Viewers can raise hands or the host can invite Viewers to join the stage" - ], - "new_api": [ - "A new `DyteStage` module introduced at [meeting.stage](./reference/DyteStage) to manage the stage during livestreaming. \n For more information, see [Livestreaming State Management APIs](https://docs.dyte.io/guides/livestream/state-management-apis).", - "A new 'DyteLiveStream' module introduced at [meeting.livestream](./Reference/DyteLivestream) to start and stop the livestreaming. \n For more information, see [Livestreaming: Properties, Functions, and Events](https://docs.dyte.io/guides/livestream/livestream-apis)." - ] - }, - { - "version": "1.21.x", - "createdAt": 1677609000, - "fixes": ["Handle WeWork Solistice Camera gracefully"], - "features": [ - "Initial support for our upcoming Interactive Livestream product (LL-HLS)", - "Webcam quality can now be controlled from the preset, allows customer to select a higher base quality in the preset editor (beta)" - ], - "new_api": [ - "Added boolean flag `socketConnected` to `meeting.meta` that shows when the socket connection is established" - ] - }, - { - "version": "1.20.0", - "createdAt": 1676643893, - "fixes": [ - "**🚨 Critical 🚨** Fixed a WebRTC video production bug that would impact *future* Chrome/Edge browser builds (version ≥ M111 - Scheduled to be released in the first week of March)", - "Fixed a regression introduced in `1.3.1` where defaults values passed during initialisation were not respected correctly under a certain edge case", - "Fixed an issue where a bluetooth device disconnection on Google Chrome did not automatically switch to an alternative device", - "Added workarounds for a [Safari Bug](https://bugs.webkit.org/show_bug.cgi?id=231787) where on disconnection of a bluetooth device, local video playback was paused", - "Fixed an issue with Safari screenshare, this improves the screenshare quality in Safari.", - "Minor improvement in the loading times of participant videos when joining a meeting with many participant on the Stage" - ], - "features": [ - "Reduced the size impact of this library from from 1020KB to 880KB (from 228KB to 208KB GZipped). A 12% improvement from the previous release " - ] - }, - { - "version": "1.19.1", - "createdAt": 1675261282, - "fixes": [ - "Improve text legibility when screensharing on Chrome under poor network conditions" - ], - "features": [] - }, - { - "version": "1.19.0", - "createdAt": 1674714600, - "fixes": ["Improved permissions check for audio/video/screenshare"], - "features": [ - "When Tab Sync is enabled, now a `selfTabUpdate` event is fired on the local user when the user switches a plugin" - ], - "breaking-changes": [] - }, - { - "version": "1.18.0", - "createdAt": 1674206130, - "fixes": [ - "Improved handling of iphone Continuity on Mac OS", - "Fix issues in Websocket connection on Safari 12.x / 13.x / 14.x" - ], - "features": [ - "**V2 REST API** - Supports `authToken` generated from V2 REST APIs" - ], - "breaking-changes": [] - } -] diff --git a/static/release-notes/rest-api.json b/static/release-notes/rest-api.json deleted file mode 100644 index 8c3baca42..000000000 --- a/static/release-notes/rest-api.json +++ /dev/null @@ -1,28 +0,0 @@ -[ - { - "createdAt": 1684320435, - "fixes": [ - "This release consists primarily of internal fixes and improvements and does not introduce any changes that directly affect our users." - ], - "features": [ - "You can add timed metadata to your video stream using [Dyte's interactive recording](/guides/recording/interactive-recording). Timed metadata is metadata with timestamps. It refers to digital markers added to a video file to provide additional context and information at specific points in the content range. These data points can be inserted into a stream programmatically, using the interactive_config in the [Start recording a meeting API](/api/#/operations/start_recording)." - ] - }, - { - "createdAt": 1677473766, - "fixes": [ - "The response of v2 [create](/api#/operations/create_meeting) and [update](/api#/operations/update_meeting) meeting API has been updated to include `live_stream_on_start` parameter.", - "The allowed `preferred_regions` in v2 meetings has been expanded to include `eu-central-1`.", - "Recording storage body validation has been updated to allow empty strings." - ], - "features": [ - "You can add an image as a [watermark](/guides/recording/add-watermark) in your recording. See [Start recording a meeting API](/api#/operations/start_recording).", - "Support for recording a video in portrait mode is added. You can specify the width and height of the recording in the `video_config` in [Start recording a meeting API](/api#/operations/start_recording).", - "Maximum height of the recorder has been increased to 1920px.", - "[Create a preset API](/api#/operations/post-presets) has been updated to include a new permission, `can_livestream`.", - "[Update a meeting API](/api#/operations/update_meeting) has been updated to include status in the request body.", - "The webhook event validations have been updated for the `chat_sync` event.", - "Schema validation has been added for v2 preset UI." - ] - } -] diff --git a/static/release-notes/ui-kit.json b/static/release-notes/ui-kit.json deleted file mode 100644 index 5fcfa150a..000000000 --- a/static/release-notes/ui-kit.json +++ /dev/null @@ -1,121 +0,0 @@ -[ - { - "version": "1.51.1", - "createdAt": 1686303420, - "fixes": [ - "In order to improve the organization of multiple buttons within the bottom control bar, some of the buttons are moved to the new component on desktop.", - "Fixed list of devices not being updated when a new device was added while `` and `` were already rendered" - ] - }, - { - "version": "1.51.0", - "createdAt": 1685491200, - "fixes": [ - "`` component now can be loaded outside of the .", - "`` now stores the draft message in local storage and restores it on page refresh.", - "Fixed an edge case where the state of the pinned participant was not getting updated when they left the meeting." - ], - "features": [ - "✨ Added support for our upcoming AI features. Keep an eye out for more updates!" - ] - }, - { - "version": "1.50.0", - "createdAt": 1683849600, - "fixes": [ - "Removed the extra space that was being taken by `` when there is only one tab.", - "Fixed an edge case where the `` component was mysteriously disappearing.", - "Fixed autoplay issues with ``" - ], - "features": [ - "Added observability and quality metrics collection for ``" - ] - }, - { - "version": "1.49.0", - "createdAt": 1682985600, - "fixes": [ - "Optimized the performance of ``", - "Fixed a style issue with `` on Safari browser.", - "Optimized a few more components for [Breakout rooms](/guides/breakoutroom/introduction-breakout-rooms)." - ], - "features": [ - "A new `dialogClose` not gets fired when you close the dialog.", - "Now you can pass the i18n prop `t` to ``" - ] - }, - { - "version": "1.48.0", - "createdAt": 1682035200, - "fixes": [ - "Fixed an issue with angular builds.", - "Fixed an edge case where the host controls were not visible for a combination of `canDisableParticipantAudio` and `canDisableParticipantVideo` permissions.", - "Fixed an issue with text `line-height` in `` when the body/html font size is defined in percentage.", - "Improved the spacing around sidebar heading and `` component." - ], - "features": [ - "Added support for our upcoming layout configurations. Keep an eye out for more updates!" - ] - }, - { - "version": "1.46.0", - "createdAt": 1679409000, - "fixes": [ - "The **stop screenshare** feature was not working when multiple users were sharing their screens simultaneously." - ], - "features": [ - "Chat in a livestreaming meeting is now paginated to handle hundreds of thousands of messages." - ] - }, - { - "version": "1.45.0", - "createdAt": 1678209000, - "features": [ - "**Interactive Livestream Release (LL-HLS)** \n 1. Broadcast a meeting to up to 100,000 viewers with low latency of just 3 to 6 seconds.\n 2. Interactive chat and polls. \n 3. Viewers can raise hands to join the stage or the host can invite viewers to join the stage. \n For more information, see [ILS Overview](https://docs.dyte.io/guides/livestream/livestream-overview) and [Getting Started with ILS](https://docs.dyte.io/guides/livestream/getting-started-with-livestreaming)." - ], - "new_api": [ - "New ``, `` and `` components." - ] - }, - { - "version": "1.44.2", - "createdAt": 1677609000, - "fixes": [ - "Fixed an edge case in file name and size detection in chat.", - "Clap file names in chat to single line. Now long files names are truncated with ellipsis.", - "Optimized icons to have consistent colors." - ], - "features": [] - }, - { - "version": "1.44.0", - "createdAt": 1677004200, - "fixes": [ - "Performance improvement for `` when the window is in background.", - "Fixed an issue with `` in Safari, where the component was overlapping with ``." - ], - "features": [ - "`` now supports `disableEmojiPicker` property to disable emoji picker." - ] - }, - { - "version": "1.43.1", - "createdAt": 1677473766, - "fixes": [ - "Issue with disabled state in the `dyte-control` bar-button has been resolved.", - "`dyte-avatar` now handles multibyte characters better and removes special characters from the name.", - "The dimensions of avatars in polls have been fixed.", - "The alignment of tab bar names has been fixed for cases where the plugin name is short." - ], - "features": ["`dyte-grid` now supports background color."] - }, - { - "version": "1.41.1", - "createdAt": 1674206130, - "fixes": [ - "Double render of dyte-header and dyte-controlbar elements", - "Missing export for a few Angular UI Kit Components" - ], - "breaking-changes": [] - } -] diff --git a/static/release-notes/web-core.json b/static/release-notes/web-core.json deleted file mode 100644 index 7a29f8ebe..000000000 --- a/static/release-notes/web-core.json +++ /dev/null @@ -1,147 +0,0 @@ -[ - { - "version": "1.14.0", - "createdAt": 1686303420, - "fixes": [ - "Added execution locks around `DyteClient.init` method to prevent accidental double initialisation method calls", - "Handle multiple edge cases around media capture and its retention" - ], - "features":[ - "Added self-troubleshooting features, allow users to run tests to discover issues in their calls. More details on this in the next release" - ] - }, - { - "version": "1.13.0", - "createdAt": 1685491200, - "fixes": [ - "Optimized `mediaPermissionUpdate` event to be emitted when the user grants media permission for the first time.", - "Improved the correctness of `meeting.self.getCurrentDevices()` to return the recent device list when the user grants the permission for the first time.", - "Fixed an edge case where the `screenshareUpdate` event would be emitted twice upon stopping the screenshare.", - "Improved the reliability of clearing the `pinned` state from participant after they leave meeting." - ], - "new_api": [ - "Added a new `CANCELLED` state to [meeting.self.mediaPermission](./local-user/introduction#properties) when the user cancels the screenshare selection dialog in Chromium browsers." - ] - }, - { - "version": "1.12.x", - "createdAt": 1682985600, - "perf": [ - "⚡ Optimized the performance of an API to save ~400ms on meeting join time.", - "⚡ Optimized the SDK to reduce the bundle size by 3%." - ], - "fixes": [ - "**🚨 Critical 🚨** Fixed an issue with Safari 16.4 that was breaking video calls.", - "Emit `peerRequestToJoinStage` and `stageLeft` for _self_ participant when the user joins or leaves the stage." - ], - "features": [ - "Added support for request retry with alternative network path when the primary network path fails. This improves the reliability of the meeting experience in case of network issues." - ] - }, - { - "version": "1.11.x", - "createdAt": 1682035200, - "perf": [ - "⚡ Optimized the performance to get 2x faster meeting join time." - ], - "fixes": [ - "Emit `peerRequestToJoinStage` and `stageLeft` for _self_ participant when the user joins or leaves the stage." - ], - "new_api": [ - "[meeting.self.roomState](./local-user/introduction#properties) now contains the current room state of the participant." - ] - }, - { - "version": "1.10.x", - "createdAt": 1680048000, - "fixes": [ - "Improved the reliability of `mediaPermissionUpdate` events.", - "Observability improvements to help us debug issues faster." - ], - "features": [ - "Emit `mediaPermissionUpdate` events when media permission goes from errored to granted." - ] - }, - { - "version": "1.9.0", - "createdAt": 1679433268, - "fixes": [ - "Build issue for customers using Webpack v5 aliasing `process` with `false` is resolved.", - "Removed `Poll Messages` from [meeting.chat.messages](./reference/DyteChat#module_DyteChat+messages). Poll messages were wrongly included in the chat messages.", - "Optimized screenshare production for higher frame rate.", - "Improved correctness of [mediaScoreUpdate](./participants/events#network-quality-score) on participant." - ], - "new_api": [ - "The `defaults` parameter in the init() function [now take recording configuration](./recording#recording-configuration), which is utilized when [starting a recording](./recording#start-a-recording). ", - "When calling init() the `defaults` param now take screen sharing configuration. \nConfigure the preferred screen sharing screen surface (Screen / Window / Browser Tab)." - ] - }, - { - "version": "1.6.0", - "createdAt": 1678333268, - "fixes": [], - "features": [ - "**Interactive Livestream Release (LL-HLS)** \n 1. Broadcast a meeting to up to 100,000 viewers with low latency of just 3 to 6 seconds.\n 2. Interactive chat and polls. \n 3. Viewers can raise hands to join the stage or the host can invite viewers to join the stage. \n For more information, see [ILS Overview](https://docs.dyte.io/guides/livestream/livestream-overview) and [Getting Started with ILS](https://docs.dyte.io/guides/livestream/getting-started-with-livestreaming)." - ], - "new_api": [ - "A new `DyteStage` module introduced at [meeting.stage](./reference/DyteStage) to manage the stage during livestreaming. \n For more information, see [Livestreaming State Management APIs](https://docs.dyte.io/guides/livestream/state-management-apis).", - "A new 'DyteLiveStream' module introduced at [meeting.livestream](./Reference/DyteLivestream) to start and stop the livestreaming. \n For more information, see [Livestreaming: Properties, Functions, and Events](https://docs.dyte.io/guides/livestream/livestream-apis)." - ] - }, - { - "version": "1.5.x", - "createdAt": 1677609000, - "fixes": ["Handle WeWork Solistice Camera gracefully"], - "features": [ - "Initial support for our upcoming Interactive Livestream product (LL-HLS)", - "Webcam quality can now be controlled from the preset, allows customer to select a higher base quality in the preset editor (beta)" - ], - "new_api": [ - "Added boolean flag `socketConnected` to `meeting.meta` that shows when the socket connection is established" - ] - }, - { - "version": "1.4.0", - "createdAt": 1676643893, - "fixes": [ - "**🚨 Critical 🚨** Fixed a WebRTC video production bug that would impact *future* Chrome/Edge browser builds (version ≥ M111 - Scheduled to be released in the first week of March)", - "Fixed a regression introduced in `1.3.1` where defaults values passed during initialisation were not respected correctly under a certain edge case", - "Fixed an issue where a bluetooth device disconnection on Google Chrome did not automatically switch to an alternative device", - "Added workarounds for a [Safari Bug](https://bugs.webkit.org/show_bug.cgi?id=231787) where on disconnection of a bluetooth device, local video playback was paused", - "Fixed an issue with Safari screenshare, this improves the screenshare quality in Safari.", - "Minor improvement in the loading times of participant videos when joining a meeting with many participant on the Stage" - ], - "features": [ - "Reduced the size impact of this library from from 1020KB to 880KB (from 228KB to 208KB GZipped). A 12% improvement from the previous release " - ] - }, - { - "version": "1.3.1", - "createdAt": 1675261282, - "fixes": [ - "Improve text legibility when screensharing on Chrome under poor network conditions" - ], - "features": [] - }, - { - "version": "1.2.0", - "createdAt": 1674714600, - "fixes": ["Improved permissions check for audio/video/screenshare"], - "features": [ - "When Tab Sync is enabled, now a `selfTabUpdate` event is fired on the local user when the user switches a plugin" - ], - "breaking-changes": [] - }, - { - "version": "1.1.0", - "createdAt": 1674206130, - "fixes": [ - "Improved handling of iphone Continuity on Mac OS", - "Fix issues in Websocket connection on Safari 12.x / 13.x / 14.x" - ], - "features": [ - "**V2 REST API** - Supports `authToken` generated from V2 REST APIs" - ], - "breaking-changes": [] - } -] diff --git a/static/robots.txt b/static/robots.txt index 26af59eeb..be9efb416 100644 --- a/static/robots.txt +++ b/static/robots.txt @@ -1,5 +1,5 @@ User-agent: * Disallow: /tags/ -Sitemap: https://dyte.io/sitemap.xml -Sitemap: https://dyte.io/blog/sitemap.xml -Sitemap: https://docs.dyte.io/sitemap.xml +Sitemap: https://easifem.com/sitemap.xml +Sitemap: https://blogs.easifem.com/blog/sitemap.xml +Sitemap: https://lectures.easifem.com/sitemap.xml