Add '-C' flag to meantools-derive

Fix memory leak in meantools-derive
This commit is contained in:
Ian Jauslin 2015-09-21 10:20:35 +00:00
parent f13eacbc8e
commit e7aa6859f0
10 changed files with 61 additions and 11 deletions

8
Changelog Normal file
View File

@ -0,0 +1,8 @@
1.3.1:
* '-C' flag in meantools-derive:
allows to pipe the output of meantools-derive directly into numkondo.
* Fixed memory leak in meantools-derive.

View File

@ -18,7 +18,7 @@
# if static=1 then link libkondo statically but other libraries dynamically
STATIC=1
VERSION=1.3
VERSION=1.3.1
# products of the compilation
PROJECT_BINS= meankondo numkondo meantools kondo_preprocess meantools-convert

View File

@ -1,5 +1,5 @@
.Dd $Mdocdate: April 14 2015 $
.Dt kondo_preprocess 1.3
.Dt kondo_preprocess 1.3.1
.Os
.Sh NAME
.Nm kondo_preprocess

View File

@ -1,5 +1,5 @@
.Dd $Mdocdate: April 13 2015 $
.Dt meankondo 1.3
.Dt meankondo 1.3.1
.Os
.Sh NAME
.Nm meankondo
@ -44,7 +44,7 @@ as well as the following pre-processors, which generate configuration files for
.It Fl t Ar threads
The number of threads to use for the computation.
.It Fl C
Format the ouptput so it can be piped to
Format the output so it can be piped to
.Sy numkondo ,
that is, instead of printing the flow equation, print a full configuration file containing the flow equation as well as all the other entries of the configuration file that do not pertain to the computation of the flow equation.
.It Fl v

View File

@ -1,5 +1,5 @@
.Dd $Mdocdate: June 12 2015 $
.Dt meantools-convert 1.3
.Dt meantools-convert 1.3.1
.Os
.Sh NAME
.Nm meantools-convert

View File

@ -1,5 +1,5 @@
.Dd $Mdocdate: April 14 2015 $
.Dt meantools 1.3
.Dt meantools 1.3.1
.Os
.Sh NAME
.Nm meantools
@ -13,6 +13,7 @@
.Sy derive
.Op Fl d Ar nderivs
.Op Fl V Ar variables
.Op Fl C
.Op Ar config_file
.Pp
.Nm
@ -95,6 +96,10 @@ The variables that depend on the extra virtual parameter (defaults to all) (WARN
would interpret the argument as being a flag, for example, write '-V "0,-1"' instead of '-V "-1,0"').
.Pp
Can either be a ',' separated list if indices or 'all' to derive with respect to all available variables.
.It Fl C
Format the output so it can be piped to
.Sy numkondo ,
that is, instead of printing the flow equation, print a full configuration file containing the flow equation as well as all the other entries of the configuration file that do not pertain to the computation of the flow equation.
.El
.Pp
.Sy Configuration file:

View File

@ -1,5 +1,5 @@
.Dd $Mdocdate: April 14 2015 $
.Dt numkondo 1.3
.Dt numkondo 1.3.1
.Os
.Sh NAME
.Nm numkondo

View File

@ -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

View File

@ -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

View File

@ -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{