Skip to content

Commit

Permalink
Merge pull request #58 from milc-qcd/feature/wilson_flow_3
Browse files Browse the repository at this point in the history
Feature/wilson flow 3
  • Loading branch information
detar authored Jun 1, 2023
2 parents 538062e + 50c01bc commit cd541fe
Show file tree
Hide file tree
Showing 284 changed files with 10,485 additions and 149 deletions.
97 changes: 91 additions & 6 deletions wilson_flow/Make_template
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,15 @@ G_OBJECTS = \
path_product.o \
ploop3.o \
remap_stdio_from_args.o \
show_generic_opts.o \
reunitarize2.o \
ranstuff.o

ifeq ($(strip ${HAVEQIO}),true)
G_OBJECTS += file_types_milc_usqcd.o io_scidac.o io_scidac_types.o
endif

# Objects depending on architecture and software package
# Objects depending on architecture and software package

LAYOUT = layout_hyper_prime.o # Choices possible here

Expand All @@ -77,12 +78,12 @@ OBJECTS = ${MY_OBJECTS} ${G_OBJECTS} ${G_KS_OBJECTS} ${G_W_OBJECTS} ${LAYOUT} \
${ADD_OBJECTS} ${EXTRA_OBJECTS}

#Libraries for complex numbers and su3 functions
QCDLIB = ${LIBDIR}/su3.${PRECISION}.a ${LIBDIR}/complex.${PRECISION}.a
QCDLIB = ${LIBDIR}/su3.${PRECISION}.a ${LIBDIR}/complex.${PRECISION}.a

LIBRARIES = ${QCDLIB} ${SCIDAC_LIBRARIES} ${QUDA_LIBRARIES}

# Default rule for C compilation
.c.o: ; ${CC} -c ${CFLAGS} $*.c
.c.o: ; ${CC} -c ${CFLAGS} $*.c

# To force a full remake when changing targets
LASTMAKE = .lastmake.${MAKEFILE}.${PRECISION}.${MYTARGET}
Expand All @@ -104,10 +105,95 @@ ${OBJECTS} : ${HEADERS} ${LASTMAKE} ${ALL_MAKES}


########################################################
##### Targets:
##### Targets:

wilson_flow::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_LUSCHER" \

wilson_flow_a::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_LUSCHER -DANISOTROPY" \

wilson_flow_cf3::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_CF3" \

wilson_flow_cf3_a::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_CF3 -DANISOTROPY" \

wilson_flow_ck::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_CK" \

wilson_flow_ck_a::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_CK -DANISOTROPY" \

wilson_flow_bbb::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_BBB" \

wilson_flow_bbb_a::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_BBB -DANISOTROPY" \

wilson_flow_rkmk3::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_RKMK3" \

wilson_flow_rkmk3_a::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_RKMK3 -DANISOTROPY" \

wilson_flow_rkmk4::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_RKMK4" \

wilson_flow_rkmk4_a::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_RKMK4 -DANISOTROPY" \

wilson_flow_rkmk5::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_RKMK5" \

wilson_flow_rkmk5_a::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_RKMK5 -DANISOTROPY" \

wilson_flow_rkmk8::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_RKMK8" \

wilson_flow_rkmk8_a::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_RKMK8 -DANISOTROPY" \

wilson_flow_adpt::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_ADAPT_LUSCHER" \

wilson_flow_adpt_a::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_ADAPT_LUSCHER -DANISOTROPY" \

wilson_flow_adpt_cf3::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_ADAPT_CF3" \

wilson_flow_adpt_cf3_a::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_ADAPT_CF3 -DANISOTROPY" \

wilson_flow_adpt_bs::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_ADAPT_BS" \

wilson_flow_adpt_bs_a::
${MAKE} -f ${MAKEFILE} target "MYTARGET= $@" \
"DEFINES= -DGF_INTEGRATOR=INTEGRATOR_ADAPT_BS -DANISOTROPY" \

clean:
-/bin/rm -f *.o
Expand All @@ -131,5 +217,4 @@ localmake: ${OBJECTS} ${LIBRARIES}
${OBJECTS} ${QCDLIB} ${ILIB} -lm
touch localmake

target: libmake localmake

target: libmake localmake
30 changes: 0 additions & 30 deletions wilson_flow/Make_test

This file was deleted.

64 changes: 13 additions & 51 deletions wilson_flow/control.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,17 @@
#include "../include/io_scidac.h"
#endif

#ifdef DEBUG_FIELDS
void dump_double_lattice();
#endif

int
main( int argc, char **argv )
{
/* control variables */
int prompt;
double dtime, dtimec, dclock();

/* RK integration variables */
int i;
double flowtime;

/* Wilson flow output variables */
double Et, Es, charge;
double old_value=0, new_value=0;
double der_value=0;

/* Initialization */
initialize_machine(&argc, &argv);
Expand All @@ -45,71 +41,37 @@ main( int argc, char **argv )
for( i=0; i<N_TEMPORARY; i++ )
tempmat[i] = (su3_matrix *)malloc(sites_on_node * sizeof(su3_matrix));


/* Loop over configurations */
while( readin(prompt) == 0 ) {

/* Start timer for this configuration (doesn't include load time) */
dtimec = -dclock();

/* Print flow output column labels */
node0_printf("#LABEL time Et Es charge\n");
fflush(stdout);

/* Calculate and print initial flow output */
fmunu_fmunu(&Et, &Es, &charge);
node0_printf("WFLOW %g %g %g %g\n", 0.0, Et, Es, charge);
fflush(stdout);

/* Loop over the flow time */
for( flowtime=stepsize, i=0;
stoptime==AUTO_STOPTIME || flowtime<=stoptime;
flowtime+=stepsize, i++ ) {

/* Perform one flow step (most of the computation is here) */
stout_step_rk();

/* Calculate and print current flow output */
fmunu_fmunu(&Et, &Es, &charge);
node0_printf("WFLOW %g %g %g %g\n", flowtime, Et, Es, charge);
fflush(stdout);

/* Automatic determination of stoptime: */
/* t^2 E > 0.45 and d/dt { t^2 E } > 0.35 */
/* Bounds need to be adjusted with scale determination cutoff */
if( stoptime==AUTO_STOPTIME ) {

old_value = new_value;
new_value = flowtime*flowtime*(Et+Es);
der_value = flowtime*(new_value-old_value)/stepsize;

if( new_value > 0.45 && der_value > 0.35 )
break;
} /* end: auto stoptime */
} /* end: flowtime loop */

/* Save and print the number of steps */
total_steps = i;
node0_printf("Number of steps = %i\n", total_steps);
fflush(stdout);
/* integrate the flow */
run_gradient_flow();

/* Save lattice if requested */
if( saveflag != FORGET )
save_lattice( saveflag, savefile, stringLFN );
#ifdef DEBUG_FIELDS
dump_double_lattice();
#endif

/* Stop and print timer for this configuration */
dtimec += dclock();
node0_printf("Time to complete flow = %e seconds\n", dtimec);
fflush(stdout);

}/* end: loop over configurations */

/* Notify user application is done */
node0_printf("RUNNING COMPLETED\n");
node0_printf("RUNNING COMPLETED\n");
fflush(stdout);

/* Stop and print application timer */
dtime += dclock();
node0_printf("Time = %e seconds\n", dtime);
node0_printf("Time = %e seconds\n", dtime);
fflush(stdout);

normal_exit(0);
Expand Down
53 changes: 53 additions & 0 deletions wilson_flow/defines.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,58 @@

#define WILSON 0
#define SYMANZIK 1
#define ZEUTHEN 2

// low-storage schemes
// 3-stage third order
#define INTEGRATOR_LUSCHER 0
// 5-stage fourth order
#define INTEGRATOR_CK 1
// 6-stage fourth order
#define INTEGRATOR_BBB 2
// 3-stage third order
#define INTEGRATOR_CF3 3

// Runge-Kutta-Munthe-Kaas schemes
// 3-stage third order
#define INTEGRATOR_RKMK3 10
// 4-stage fourth order
#define INTEGRATOR_RKMK4 11
// 6-stage fifth order
#define INTEGRATOR_RKMK5 12
// 13-stage eighth order (Dormand-Prince)
#define INTEGRATOR_RKMK8 13

// adaptive schemes
#define INTEGRATOR_ADAPT_LUSCHER 20
#define INTEGRATOR_ADAPT_BS 21
#define INTEGRATOR_ADAPT_CF3 22

// Safety factor for adaptive schemes
// to prevent too many rejected steps
#define SAFETY 0.95


/* one step of the flow, here branching into different integrators happens */
#if GF_INTEGRATOR==INTEGRATOR_LUSCHER || GF_INTEGRATOR==INTEGRATOR_CK \
|| GF_INTEGRATOR==INTEGRATOR_BBB || GF_INTEGRATOR==INTEGRATOR_CF3
#define flow_step integrate_RK_2N
#elif GF_INTEGRATOR==INTEGRATOR_RKMK3
#define flow_step integrate_RKMK3
#elif GF_INTEGRATOR==INTEGRATOR_RKMK4 || GF_INTEGRATOR==INTEGRATOR_RKMK5 || GF_INTEGRATOR==INTEGRATOR_RKMK8
#define flow_step integrate_RKMK_generic
#elif GF_INTEGRATOR==INTEGRATOR_ADAPT_LUSCHER || GF_INTEGRATOR==INTEGRATOR_ADAPT_CF3
#define flow_step integrate_adapt_RK_2N
#elif GF_INTEGRATOR==INTEGRATOR_ADAPT_BS
#define flow_step integrate_adapt_bs
#endif

// for tuning of the coefficients of generic third-order and adaptive
//#define READ_CF3_FROM_FILE
//#define READ_ADPT_CF3_FROM_FILE

// dump lattice in double precision for debugging purposes
// BE CAREFULL with this
//#define DEBUG_FIELDS

#endif /* _DEFINES_H */
Loading

0 comments on commit cd541fe

Please sign in to comment.