diff options
author | Ian Jauslin <ian.jauslin@roma1.infn.it> | 2015-09-21 10:20:35 +0000 |
---|---|---|
committer | Ian Jauslin <ian.jauslin@roma1.infn.it> | 2015-09-21 10:20:35 +0000 |
commit | e7aa6859f08565d58684fa4b9c40fed716f0ba17 (patch) | |
tree | 518d709e86c9314ef50034f10e4b85c802b9c15c /src | |
parent | f13eacbc8e5ab714dd3544adab8189c313382c77 (diff) |
Add '-C' flag to meantools-derivev1.3.1
Fix memory leak in meantools-derive
Diffstat (limited to 'src')
-rw-r--r-- | src/definitions.cpp | 2 | ||||
-rw-r--r-- | src/meantools_deriv.c | 42 | ||||
-rw-r--r-- | src/types.h | 1 |
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{ |