[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: |
Wed, 31 Jul 2019 04:57:09 -0400 (EDT) |
branch: master
commit 860f866819871d218bd07e1a84a1bf0b5e01a990
Author: Yves Renard <address@hidden>
Date: Wed Jul 31 10:56:53 2019 +0200
parameter order change in command Interpolate_derivative
---
src/getfem/getfem_generic_assembly_tree.h | 1 +
src/getfem_generic_assembly_tree.cc | 57 ++++++++++++++++++++++++++++++-
2 files changed, 57 insertions(+), 1 deletion(-)
diff --git a/src/getfem/getfem_generic_assembly_tree.h
b/src/getfem/getfem_generic_assembly_tree.h
index 3be591a..6a9ae7f 100644
--- a/src/getfem/getfem_generic_assembly_tree.h
+++ b/src/getfem/getfem_generic_assembly_tree.h
@@ -90,6 +90,7 @@ namespace getfem {
GA_DEVIATOR, // 'Deviator' operator
GA_INTERPOLATE, // 'Interpolate' operation
GA_INTERPOLATE_FILTER, // 'Interpolate_filter' operation
+ GA_INTERPOLATE_DERIVATIVE, // 'Interpolate_derivative' operation
GA_ELEMENTARY, // 'Elementary' operation (operation at the element level)
GA_SECONDARY_DOMAIN, // For the integration on a product of two domains
GA_XFEM_PLUS, // �valuation on the + side of a level-set for
fem_level_set
diff --git a/src/getfem_generic_assembly_tree.cc
b/src/getfem_generic_assembly_tree.cc
index 2d673c7..3617964 100644
--- a/src/getfem_generic_assembly_tree.cc
+++ b/src/getfem_generic_assembly_tree.cc
@@ -142,6 +142,8 @@ namespace getfem {
return GA_DEVIATOR;
if (expr.compare(token_pos, token_length, "Interpolate") == 0)
return GA_INTERPOLATE;
+ if (expr.compare(token_pos, token_length, "Interpolate_derivative") == 0)
+ return GA_INTERPOLATE_DERIVATIVE;
if (expr.compare(token_pos, token_length, "Interpolate_filter") == 0)
return GA_INTERPOLATE_FILTER;
if (expr.compare(token_pos, token_length,
@@ -986,7 +988,10 @@ namespace getfem {
case GA_NODE_INTERPOLATE_DERIVATIVE:
str << (pnode->test_function_type == 1 ? "Test_" : "Test2_")
<< "Interpolate_derivative(" << pnode->interpolate_name_der << ","
- << pnode->interpolate_name << "," << pnode->name << ")";
+ << pnode->name;
+ if (pnode->interpolate_name.size())
+ str << "," << pnode->interpolate_name;
+ str << ")";
break;
case GA_NODE_INTERPOLATE:
case GA_NODE_ELEMENTARY:
@@ -1348,6 +1353,8 @@ namespace getfem {
switch(pnode->op_type) {
case GA_NAME : pnode->node_type = GA_NODE_NAME; break;
case GA_INTERPOLATE : pnode->node_type = GA_NODE_INTERPOLATE; break;
+ case GA_INTERPOLATE_DERIVATIVE :
+ pnode->node_type = GA_NODE_INTERPOLATE_DERIVATIVE; break;
case GA_ELEMENTARY : pnode->node_type = GA_NODE_ELEMENTARY; break;
case GA_SECONDARY_DOMAIN :
pnode->node_type = GA_NODE_SECONDARY_DOMAIN; break;
@@ -1467,6 +1474,8 @@ namespace getfem {
switch(pnode->node_type) {
case GA_NODE_NAME : pnode->op_type = GA_NAME; break;
case GA_NODE_INTERPOLATE : pnode->op_type = GA_INTERPOLATE; break;
+ case GA_NODE_INTERPOLATE_DERIVATIVE :
+ pnode->op_type = GA_INTERPOLATE_DERIVATIVE; break;
case GA_NODE_ELEMENTARY : pnode->op_type = GA_ELEMENTARY; break;
case GA_NODE_SECONDARY_DOMAIN :
pnode->op_type = GA_SECONDARY_DOMAIN; break;
@@ -1668,6 +1677,52 @@ namespace getfem {
}
break;
+ case GA_INTERPOLATE_DERIVATIVE:
+ {
+ tree.add_scalar(scalar_type(0), token_pos, expr);
+ tree.current_node->node_type = GA_NODE_INTERPOLATE_DERIVATIVE;
+ t_type = ga_get_token(*expr, pos, token_pos, token_length);
+ if (t_type != GA_LPAR)
+ ga_throw_error(expr, pos-1,
+ "Missing Interpolate_derivative arguments.");
+ t_type = ga_get_token(*expr, pos, token_pos, token_length);
+ if (t_type != GA_NAME)
+ ga_throw_error(expr, pos,
+ "First argument of Interpolate should the "
+ "interpolate transformtion name ");
+ tree.current_node->interpolate_name_der
+ = std::string(&((*expr)[token_pos]), token_length);
+ t_type = ga_get_token(*expr, pos, token_pos, token_length);
+ if (t_type != GA_COMMA)
+ ga_throw_error(expr, pos, "Bad format for Interpolate_derivative
"
+ "arguments.");
+ t_type = ga_get_token(*expr, pos, token_pos, token_length);
+ if (t_type != GA_NAME)
+ ga_throw_error(expr, pos,
+ "Second argument of Interpolate should be a "
+ "variable name.");
+ tree.current_node->name
+ = std::string(&((*expr)[token_pos]), token_length);
+
+ t_type = ga_get_token(*expr, pos, token_pos, token_length);
+ tree.current_node->interpolate_name = "";
+ if (t_type == GA_COMMA) {
+ t_type = ga_get_token(*expr, pos, token_pos, token_length);
+ if (t_type != GA_NAME)
+ ga_throw_error(expr, pos,
+ "Third argument of Interpolate should be a "
+ "interpolate transformation name.");
+ tree.current_node->interpolate_name
+ = std::string(&((*expr)[token_pos]), token_length);
+ t_type = ga_get_token(*expr, pos, token_pos, token_length);
+ }
+ if (t_type != GA_RPAR)
+ ga_throw_error(expr, pos-1, "Missing a parenthesis after "
+ "Interpolate_derivative arguments.");
+ state = 2;
+ }
+ break;
+
case GA_ELEMENTARY:
{
tree.add_scalar(scalar_type(0), token_pos, expr);