[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Getfem-commits] (no subject)
From: |
Yves Renard |
Subject: |
[Getfem-commits] (no subject) |
Date: |
Mon, 7 May 2018 11:13:26 -0400 (EDT) |
branch: devel-yves-generic-assembly-modifs
commit 9d11af0efccb4ee684059198c58f5a15e01de166
Author: Yves Renard <address@hidden>
Date: Mon May 7 16:27:41 2018 +0200
adding Swap_indices operation in the assembly language
---
interface/src/gf_asm.cc | 8 +++++---
interface/tests/python/check_asm.py | 22 +++++++++++++++++++++-
2 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/interface/src/gf_asm.cc b/interface/src/gf_asm.cc
index 2a2d3e3..eb77267 100644
--- a/interface/src/gf_asm.cc
+++ b/interface/src/gf_asm.cc
@@ -510,7 +510,7 @@ static void do_high_level_generic_assembly(mexargs_in& in,
mexargs_out& out) {
}
}
-static void do_expression_analysis(mexargs_in& in) {
+static void do_expression_analysis(mexargs_in& in, mexargs_out& out) {
std::string expr = in.pop().to_string();
@@ -572,6 +572,8 @@ static void do_expression_analysis(mexargs_in& in) {
workspace.add_expression(expr, mim, getfem::dummy_mesh_region(), der_order);
workspace.print(cout);
+ std::string result = workspace.extract_order0_term();
+ out.pop().from_string(result.c_str());
}
// To be parallelized
@@ -1207,8 +1209,8 @@ void gf_asm(getfemint::mexargs_in& m_in,
getfemint::mexargs_out& m_out) {
Analyse a high-level generic assembly expression and print
information about the provided address@hidden/
sub_command
- ("expression analysis", 1, -1, 0, 0,
- do_expression_analysis(in);
+ ("expression analysis", 1, -1, 0, 1,
+ do_expression_analysis(in, out);
);
diff --git a/interface/tests/python/check_asm.py
b/interface/tests/python/check_asm.py
index a3359d3..608a5a0 100644
--- a/interface/tests/python/check_asm.py
+++ b/interface/tests/python/check_asm.py
@@ -37,12 +37,14 @@ m = gf.Mesh('triangles grid', np.arange(0,1+1./NX,1./NX),
np.arange(0,1+1./NX,1./NX)) # Structured mesh
fem = gf.Fem('FEM_PK(2,1)')
mfu = gf.MeshFem(m, 1); mfu.set_fem(fem) # Lagrange P1 scalar fem
-mim = gf.MeshIm(m, gf.Integ('IM_TRIANGLE(4)'))
mfv = gf.MeshFem(m, 3); mfv.set_fem(fem) # Lagrange P1 vector fem
+mfw = gf.MeshFem(m, 2); mfw.set_fem(fem) # Lagrange P1 vector fem
+mim = gf.MeshIm(m, gf.Integ('IM_TRIANGLE(4)'))
U = mfu.eval('x+y')
V = mfv.eval('[x*y, x*y, x*y]')
+W = mfw.eval('[x*y, x*y]')
md = gf.Model('real')
@@ -51,6 +53,8 @@ md.add_fem_variable('u', mfu)
md.set_variable('u', U)
md.add_fem_variable('v', mfv)
md.set_variable('v', V)
+md.add_fem_variable('w', mfw)
+md.set_variable('w', W)
# Simple test on the integral of u
result = gf.asm('generic', mim, 0, "u", -1, md)
@@ -91,6 +95,22 @@ result1 = gf.asm('generic', mim, 2,
if (np.linalg.norm(result1.full()-result2.full()) > 1e-8) :
print "Bad value"; exit(1)
+print 'Assembly string "Def P(u):= Grad(u); P(Grad(u)+[1;1])" gives:'
+res = gf.asm('expression analysis', 'Def P(u):= Grad(u); P(Grad(u)+[1;1])',
mim, 0, md)
+if (res != "(Hess_u)"): print "Bad gradient"; exit(1)
+
+print 'Assembly string "Grad(Grad_u\')" gives:'
+res = gf.asm('expression analysis', "Grad(Grad_u')", mim, 0, md)
+if (res != "(Reshape(Hess_u, 1, 2, 2))"): print "Bad gradient"; exit(1)
+print 'Assembly string "Grad(Sym(Grad_w))" gives:'
+res = gf.asm('expression analysis', "Grad(Sym(Grad_w))", mim, 0, md)
+if (res != "((Hess_w+(Hess_w'))*0.5)"): print "Bad gradient"; exit(1)
+print 'Assembly string "Grad(Skew(Grad_w))" gives:'
+res = gf.asm('expression analysis', "Grad(Skew(Grad_w))", mim, 0, md)
+if (res != "((Hess_w-(Hess_w'))*0.5)"): print "Bad gradient"; exit(1)
+print 'Assembly string "Grad(Deviator(Grad_w))" gives:'
+res = gf.asm('expression analysis', "Grad(Deviator(Grad_w))", mim, 0, md)
+print res