Ian Jauslin
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIan Jauslin <ian.jauslin@roma1.infn.it>2015-09-21 10:20:35 +0000
committerIan Jauslin <ian.jauslin@roma1.infn.it>2015-09-21 10:20:35 +0000
commite7aa6859f08565d58684fa4b9c40fed716f0ba17 (patch)
tree518d709e86c9314ef50034f10e4b85c802b9c15c /src
parentf13eacbc8e5ab714dd3544adab8189c313382c77 (diff)
Add '-C' flag to meantools-derivev1.3.1
Fix memory leak in meantools-derive
Diffstat (limited to 'src')
-rw-r--r--src/definitions.cpp2
-rw-r--r--src/meantools_deriv.c42
-rw-r--r--src/types.h1
3 files changed, 41 insertions, 4 deletions
diff --git a/src/definitions.cpp b/src/definitions.cpp
index 1884488..25715e5 100644
--- a/src/definitions.cpp
+++ b/src/definitions.cpp
@@ -17,7 +17,7 @@ limitations under the License.
#ifndef DEFINITIONS_GCC
#define DEFINITIONS_GCC
-#define VERSION "1.3"
+#define VERSION "1.3.1"
// number of entries in a configuration file
#define ARG_COUNT 10
diff --git a/src/meantools_deriv.c b/src/meantools_deriv.c
index 28d8641..b096380 100644
--- a/src/meantools_deriv.c
+++ b/src/meantools_deriv.c
@@ -46,6 +46,8 @@ int tool_deriv_read_args(int argc, const char* argv[], Str_Array* str_args, Mean
(*opts).deriv_derivs=1;
// derive with respect to all variables
(*opts).deriv_vars.length=-1;
+ // do not chain
+ (*opts).chain=0;
// loop over arguments
@@ -61,6 +63,10 @@ int tool_deriv_read_args(int argc, const char* argv[], Str_Array* str_args, Mean
case 'V':
flag=CP_FLAG_VARS;
break;
+ // chain
+ case 'C':
+ (*opts).chain=1;
+ break;
}
}
}
@@ -104,6 +110,8 @@ int tool_deriv(Str_Array str_args, Meantools_Options opts){
// flow equation for the derivatives
Grouped_Polynomial flow_equation_deriv;
int i;
+ // header of the entry
+ Char_Array arg_header;
// parse flow equation
@@ -142,6 +150,29 @@ int tool_deriv(Str_Array str_args, Meantools_Options opts){
// compute derivatives
flow_equation_derivative(opts.deriv_derivs, opts.deriv_vars, flow_equation, &flow_equation_deriv);
+ // print
+ // if chain then print config file
+ if(opts.chain==1){
+ for(i=0;i<str_args.length;i++){
+ // check whether to print the str_arg
+ get_str_arg_title(str_args.strs[i], &arg_header);
+ if (\
+ str_cmp(arg_header.str, "flow_equation")==0 &&\
+ str_cmp(arg_header.str, "symbols")==0 &&\
+ str_cmp(arg_header.str, "groups")==0 &&\
+ str_cmp(arg_header.str, "fields")==0 &&\
+ str_cmp(arg_header.str, "identities")==0 &&\
+ str_cmp(arg_header.str, "propagator")==0 &&\
+ str_cmp(arg_header.str, "input_polynomial")==0 &&\
+ str_cmp(arg_header.str, "id_table")==0 ){
+
+ printf("%s\n&\n",str_args.strs[i].str);
+ }
+ free_Char_Array(arg_header);
+ }
+ // print flow equation
+ printf("#!flow_equation\n");
+ }
grouped_polynomial_print(flow_equation_deriv,'%','%');
// free memory
@@ -164,12 +195,17 @@ int flow_equation_derivative(int n, Int_Array variables, Grouped_Polynomial flow
// output polynomial
grouped_polynomial_cpy(flow_equation, flow_equation_derivs);
- for(j=0,dflow=flow_equation;j<n;j++){
+ // init dflow to flow_equation
+ grouped_polynomial_cpy(flow_equation, &dflow);
+
+ for(j=0;j<n;j++){
// tmp flow contains the result of the previous derivative
grouped_polynomial_cpy(dflow, &tmpflow);
- // derive
+ // free dflow
+ free_Grouped_Polynomial(dflow);
+ // next derivative
flow_equation_derivx(tmpflow, indices, &dflow);
- // free
+ // free tmpflow
free_Grouped_Polynomial(tmpflow);
// add the derived indices as variables for the next derivative
diff --git a/src/types.h b/src/types.h
index 6b029d5..a5d47b9 100644
--- a/src/types.h
+++ b/src/types.h
@@ -212,6 +212,7 @@ typedef struct Meantools_Options{
int deriv_derivs;
Int_Array deriv_vars;
Char_Array eval_rccstring;
+ int chain;
} Meantools_Options;
typedef struct Kondopp_Options{