From a04cdd0d15f32cd6ccb81e663c40d6af6a912f91 Mon Sep 17 00:00:00 2001 From: michael Date: Mon, 7 Jun 2021 20:11:56 +0200 Subject: [PATCH] Test 3D Poisson on cube skin now works --- .../FiniteElements3DPoissonCubeSkin.py | 18 ++++------------- .../test_validation3DCubeSkinPoissonEF.py | 16 +++++++-------- .../FiniteElements3DPoissonCubeSkin.py | 20 +++++-------------- 3 files changed, 17 insertions(+), 37 deletions(-) diff --git a/CDMATH/tests/examples/Poisson3DCubeSkinEF/FiniteElements3DPoissonCubeSkin.py b/CDMATH/tests/examples/Poisson3DCubeSkinEF/FiniteElements3DPoissonCubeSkin.py index 3573c2a..e167456 100644 --- a/CDMATH/tests/examples/Poisson3DCubeSkinEF/FiniteElements3DPoissonCubeSkin.py +++ b/CDMATH/tests/examples/Poisson3DCubeSkinEF/FiniteElements3DPoissonCubeSkin.py @@ -2,18 +2,15 @@ #=============================================================================================================================== # Name : Résolution EF de l'équation de Laplace-Beltrami -\triangle u = f sur la frontière d'un cube # Author : Michael Ndjinga -# Copyright : CEA Saclay 2020 +# Copyright : CEA Saclay 2021 # Description : Utilisation de la méthode des éléménts finis P1 avec champs u et f discrétisés aux noeuds d'un maillage triangulaire # Création et sauvegarde du champ résultant ainsi que du champ second membre en utilisant la librairie CDMATH # Résolution d'un système linéaire à matrice singulière : les vecteurs constants sont dans le noyau -# Comparaison de la solution numérique avec la solution exacte définie face par face : -# u= sin(2*pi*x)*sin(2*pi*y) (haut et bas) -# u=-sin(2*pi*x)*sin(2*pi*z) (gauche et droite) -# u= sin(2*pi*y)*sin(2*pi*z) (avant et arrière) +# Comparaison de la solution numérique avec la solution exacte définie face par face : u(x,y,z)= cos(2*pi*x)*cos(2*pi*y)*cos(2*pi*z) #================================================================================================================================ import cdmath -from math import sin, pi +from math import cos, pi import numpy as np import PV_routines import VTK_routines @@ -49,14 +46,7 @@ for i in range(nbNodes): y = Ni.y() z = Ni.z() - if abs(x)-1.1 - assert max_sol_num<1.1 + assert min_sol_num>-5. + assert max_sol_num<6. error_tab[i]=log10(error_tab[i]) time_tab[i]=log10(time_tab[i]) - with open('./FiniteElementsOnCubeSkinPoisson_PlotOnSortedLines'+meshType+str(mesh_size_tab[i])+'.csv') as f: - lines = f.readlines() - y = [float(line.split(",")[0]) for line in lines[1:]] - x = [float(line.split(",")[1]) for line in lines[1:]] + # with open('./FiniteElementsOnCubeSkinPoisson_PlotOnSortedLines'+meshType+str(mesh_size_tab[i])+'.csv') as f: + # lines = f.readlines() + # y = [float(line.split(",")[0]) for line in lines[1:]] + # x = [float(line.split(",")[1]) for line in lines[1:]] - plt.plot(x, y, label= str(mesh_size_tab[i]) + ' nodes') + # plt.plot(x, y, label= str(mesh_size_tab[i]) + ' nodes') mesh_size_tab[i] = 0.5*log10(mesh_size_tab[i]) i=i+1 @@ -63,7 +63,7 @@ def test_validation3DCubeSkinEF(): b=(-a2*b1+a1*b2)/det print( "FE on 3D cube skin triangle mesh : scheme order is ", -a) - assert abs(a+0.816)<0.1 + assert abs(a+1.915)<0.001 # Plot of convergence curves plt.close() diff --git a/CDMATH/tests/validation/scripts/Poisson3DCubeSkinEF/FiniteElements3DPoissonCubeSkin.py b/CDMATH/tests/validation/scripts/Poisson3DCubeSkinEF/FiniteElements3DPoissonCubeSkin.py index 4593372..0bdca0a 100755 --- a/CDMATH/tests/validation/scripts/Poisson3DCubeSkinEF/FiniteElements3DPoissonCubeSkin.py +++ b/CDMATH/tests/validation/scripts/Poisson3DCubeSkinEF/FiniteElements3DPoissonCubeSkin.py @@ -2,19 +2,16 @@ #=============================================================================================================================== # Name : Résolution EF de l'équation de Laplace-Beltrami -\triangle u = f sur la frontière d'un cube # Author : Michael Ndjinga -# Copyright : CEA Saclay 2020 +# Copyright : CEA Saclay 2021 # Description : Utilisation de la méthode des éléménts finis P1 avec champs u et f discrétisés aux noeuds d'un maillage triangulaire # Création et sauvegarde du champ résultant ainsi que du champ second membre en utilisant la librairie CDMATH # Résolution d'un système linéaire à matrice singulière : les vecteurs constants sont dans le noyau -# Comparaison de la solution numérique avec la solution exacte définie face par face : -# u=sin(2*pi*x)*sin(2*pi*y) (haut et bas) -# u=sin(2*pi*x)*sin(2*pi*z) (gauche et droite) -# u=sin(2*pi*y)*sin(2*pi*z) (avant et arrière) +# Comparaison de la solution numérique avec la solution exacte définie face par face : u(x,y,z)= cos(2*pi*x)*cos(2*pi*y)*cos(2*pi*z) #================================================================================================================================ import cdmath import time, json -from math import sin, pi +from math import cos, pi import PV_routines import VTK_routines import paraview.simple as pvs @@ -74,14 +71,7 @@ def solve(filename,resolution,meshType, testColor): y = Ni.y() z = Ni.z() - if abs(x)