getfem-commits
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]