{"id":13473784,"url":"https://github.com/etmc/tmLQCD","last_synced_at":"2025-03-26T19:34:47.550Z","repository":{"id":2219856,"uuid":"3169640","full_name":"etmc/tmLQCD","owner":"etmc","description":"tmLQCD is a freely available software suite providing a set of tools to be used in lattice QCD simulations. This is mainly a HMC implementation (including PHMC and RHMC) for Wilson, Wilson Clover and Wilson twisted mass fermions and inverter for different versions of the Dirac operator.  The code is fully parallelised and ships with optimisations for various modern architectures, such as commodity PC clusters and the Blue Gene family. ","archived":false,"fork":false,"pushed_at":"2024-09-27T21:30:41.000Z","size":29142,"stargazers_count":32,"open_issues_count":134,"forks_count":47,"subscribers_count":25,"default_branch":"master","last_synced_at":"2024-10-30T06:33:28.322Z","etag":null,"topics":["clover","ddalphaamg","hmc","lqcd","multigrid","nf211","phmc","qphix","quda","rhmc","solver","twisted","wilson"],"latest_commit_sha":null,"homepage":"http://www.itkp.uni-bonn.de/~urbach/software.html","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/etmc.png","metadata":{"files":{"readme":"README","changelog":"NEWS","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2012-01-13T09:15:03.000Z","updated_at":"2024-09-23T20:01:36.000Z","dependencies_parsed_at":"2023-12-19T12:01:04.582Z","dependency_job_id":"d61f7cb5-06e2-4363-94cd-74bad70b9c94","html_url":"https://github.com/etmc/tmLQCD","commit_stats":null,"previous_names":[],"tags_count":58,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etmc%2FtmLQCD","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etmc%2FtmLQCD/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etmc%2FtmLQCD/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/etmc%2FtmLQCD/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/etmc","download_url":"https://codeload.github.com/etmc/tmLQCD/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245722922,"owners_count":20661850,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clover","ddalphaamg","hmc","lqcd","multigrid","nf211","phmc","qphix","quda","rhmc","solver","twisted","wilson"],"created_at":"2024-07-31T16:01:06.878Z","updated_at":"2025-03-26T19:34:42.848Z","avatar_url":"https://github.com/etmc.png","language":"C","funding_links":[],"categories":["C"],"sub_categories":[],"readme":"Here are some remarks collected in order to configure, compile and\ninstall the tmLQCD programme suit. For more information, also about running\nthe code please read the documentation in the doc sub-directory. \n\nCONFIGURE and COMPILE\n\nIt is recommended to build the code not in the source directory but in\na separate directory.\n\nThe lime library (tested with version 1.2.3) is needed to compile the\nprogram. Please download it at\n\nhttp://usqcd.jlab.org/usqcd-software/c-lime/\n\nConfigure and compile lime (for documentation see\nhttp://usqcd.jlab.org/usqcd-docs/c-lime/) first.\nThen you should use the configure option --with-lime=dir for the\ntmLQCD to set the correct directory where to find lime (see below). \n\nFor more documentation please change into the doc directory and type\nlatex main.tex\nand see the sections for configuring, installing and testing the code.\n\nHere we have gathered some examples for some standard architectures.\nBuilding the tmLQCD executables is a three step procedure:\n\n****************************************************************************\n\n1) configure:\n\nIn your build directory type\n\npath-to-the-sources/configure --help\n\nto get an overview of the available options and switches. In\nparticular check out the prefix option for your installation path. \nWhat follows now are some examples for a few standard architectures.\n\n- a scalar build on a P4 machine would look like:\n\npath-to-the-sources/configure --disable-mpi --enable-sse2 --enable-p4 \\\n  --enable-gaugecopy --disable-newdiracop --with-limedir=\u003cpath-to-lime\u003e \\\n  --with-lapack=\"\u003clinker options needed for lapack\u003e\" \\\n  CC=\u003ccc\u003e\n\n- Opteron with SSE2:\n\npath-to-the-sources/configure --disable-mpi --enable-sse2 --enable-opteron \\\n  --enable-gaugecopy --disable-newdiracop --with-limedir=\u003cpath-to-lime\u003e \\\n  --with-lapack=\"\u003clinker options needed for lapack\u003e\" \\\n  CC=\u003ccc\u003e\n\n- A MPI parallel (4dims) build on a P4 cluster:\n\npath-to-the-sources/configure --enable-mpi --enable-sse2 --enable-p4 \\\n  --with-mpidimension=4 --enable-gaugecopy --disable-newdiracop \\\n  --with-limedir=\u003cpath-to-lime\u003e --with-lapack=\"\u003clinker options needed for lapack\u003e\" \\\n  CC=\u003cmpicc\u003e\n\n- on the Munich Altix machine:\n\npath-to-the-sources/configure --enable-mpi --with-mpidimension=4 \\\n  --with-limedir=\u003cpath-to-lime\u003e --enable-newdiracop \\\n  --disable-shmem --with-lapack=\"\u003clinker options needed for lapack\u003e\" \\\n  CC=mpicc CFLAGS=\"-mcpu=itanium2 -O3 -g -c99 -mtune=itanium2\" \n\nfor lapack on this machine please type\nmodule load mkl\n\n\n- on the HLRB ice installation use\n\npath-to-the-sources/configure --enable-mpi --with-mpidimension=4 \\\n   --disable-sse2 --disable-p4  --with-limedir=\u003cpath-to-lime\u003e \\\n   --enable-newdiracop --with-lapack=\"\u003clinker options needed for lapack\u003e\" \\\n   CC=\"mpicc -std=c99\" CFLAGS=\"-g\" \\\n\nwhere it is again important to use the Intel C compiler! \n\nfor lapack first load the module mkl and then use\n\n--with-lapack=\"-L$LIBRARY_PATH -llapack -lblas\"\n\n- on Blue Gene installations\n\nFor the Blue Gene L and P see the README.bg? files\n\nFor BG/Q you can enable QPX intrinsics with --enable-qpx, which will have\neffect only with the XLC compiler.\n\nYou may enable or disable other configure options as needed. See the\ndocumentation for more details.\n\n****************************************************************************\n\n2) make\n\ntype `make` in your build directory.\n\nIf there appears no error message during compilation you should end up\nwith a few executable in the build directory, namely `hmc_tm`,\n`invert` and `invert_doublet`.\n\n****************************************************************************\n\n3) make install\n\ntype `make install`\n\nto get the executables installed.\n\n\n\n****************************************************************************\n****************************************************************************\n\nin the following we provide a \"codemap\", giving a short explanation\nfor the contents of each c-file:\n\n****************************************************************************\ntop directory: apart from the main routines all routines are compiled into\n\t       the run-time library libhmc.\n\nDML_crc32.c: invert, invert_doublet, hmc_tm\n\t     some helper functions to compute the SCIDAC \n\t     checksum\nD_psi.c:     invert, invert_doublet, hmc_tm\n\t     Wilson twisted mass Dirac operator, not even/odd \n\t     preconditioned \nHopping_Matrix.c: invert, invert_doublet, hmc_tm\n\t     Hopping matrix for the even/odd preconditioned \n\t     Dirac operator\nHopping_Matrix_nocom.c: benchmark\n\t     Hopping matrix for the even/odd preconditioned \n\t     Dirac operator, communication switched off\nNondegenerate_Matrix.c: invert_doublet, hmc_tm\n\t     operators needed for even/odd preconditioning \n\t     the non-degenerate flavour doublet Dirac operator\nPtilde_nd.c: hmc_tm\n\t     the more precise polynomial $\\tilde P$ needed for \n\t     the PHMC for the non-degenerate flavour doublet\nbenchmark.c: main routine\n\t     benchmark code for D_psi and Hopping_Matrix\nblock.c:     experimental\nboundary.c:  invert, invert_doublet, hmc_tm\n\t     implements the twisted boundary conditions for the\n\t     spinor fields\nchebyshev_polynomial.c: experimental\nchebyshev_polynomial_nd.c: hmc_tm\n\t     implements the generation of coefficients for the \n\t     chebyshev polynomial using the clenshaw recursion \n\t     relation\nderiv_Sb.c:  hmc_tm\n\t     the variation of Q=gamma_5 D with respect to the \n\t     gauge fields in the even/odd case \nderiv_Sb_D_psi.c: hmc_tm\n\t     the variation of Q=gamma_5 D with respect to the \n\t     gauge fields in the non even/odd case \ndet_monomial.c: hmc_tm\n\t     implements the functions needed for a det monomial\ndetratio_monomial.c: hmc_tm\n\t     implements the functions needed for a detratio monomial\npoly_monomial.c: hmc_tm\n             implements function needed for a POLY monomial \n             (PHMC for light degenerate quarks)\ndml.c:       invert, invert_doublet, hmc_tm\n\t     some helper functions to compute the SCIDAC \n\t     checksum\ndouble2single.c: main routine\n\t     can convert a gauge field from double to single precision\nsingle2double.c: main routine\n\t     can convert a gauge field from single to double precision\neigenvalues_bi.c: hmc_tm\n\t     computes eigenvalues of the mass non-degenerate two flavour \n\t     Dirac operatoe\nexpo.c:      hmc_tm\n\t     implements the exponetial function of an su(3) element\ngamma.c:     invert, invert_doublet, hmc_tm\n\t     implements multiplication of gamma matrices and some useful\n\t     combination of those with a spinor field\ngauge_io.c:  invert, invert_doublet, hmc_tm\n\t     IO routines for gauge fields \ngauge_monomial.c: hmc_tm\n\t     implements the functions needed for a gauge monomial\ngen_sources.c: invert, invert_doublet, hmc_tm\n\t     implements the generation of source spinor fields\ngeometry_eo.c: invert, invert_doublet, hmc_tm\n\t     anything related to gauge and spinor field geometry\nget_rectangle_staples.c: hmc_tm\n             computes rectangular staples of gauge links as needed for\n\t     e.g. the Iwasaki gauge action and its derivative\nget_staples.c: hmc_tm\n             computes plaquette staples of gauge links as needed for\n\t     for all gauge actions and their derivatives\ngetopt.c:    invert, invert_doublet, hmc_tm\n\t     needed for command line options\nhmc_tm.c:    main routine\n\t     hmc_tm executable\nhybrid_update.c: hmc_tm\n\t     implements the functions for the gauge field update and\n\t     the momenta update\ninit_bispinor_field.c \ninit_chi_copy.c\ninit_chi_spinor_field.c\ninit_dirac_halfspinor.c\ninit_gauge_field.c\ninit_gauge_tmp.c\ninit_geometry_indices.c\ninit_moment_field.c\ninit_spinor_field.c\ninit_stout_smear_vars.c: invert, invert_doublet, hmc_tm\n\t     provide routines to allocate memory for the corresponding\n\t     objects\nintegrator.c: hmc_tm\n\t     implements the routines needed for the integrator in the\n\t     MD udpate\ninvert.c:    main routine\n\t     invert executable\ninvert_doublet.c: main routine\n\t     invert_doublet executable\ninvert_doublet_eo.c: invert_doublet\n\t     performs an inversion of the flavour doublet operator using\n\t     even/odd preconditioning and the CG solver\ninvert_eo.c: invert\n\t     performs an inversion of the Wilson twisted mass Dirac operator\n\t     using a solver as specified in the input file. Depending on the \n\t     input file even/odd preconditioning is used or not\nio.c:        invert, invert_doublet, hmc_tm\n\t     helper routines: some deprecated IO routines for gauge and spinor \n\t     spinor fields, and the routine writing the initial stdout message\n\t     of the executables\nio_utils.c:  invert, invert_doublet, hmc_tm\n\t     IO helper routines related to swap endian and checksums\nlinsolve.c:  hmc_tm\n\t     CG and bicgstab solvers as used only in the HMC\nlittle_D.c:  experimental\nmeasure_rectangles.c: hmc_tm\n\t     computes the gauge action related to the rectangular part\nmonomial.c:  hmc_tm\n             provides the definition for monomials and initialisation functions\nmpi_init.c:  invert, invert_doublet, hmc_tm, benchmark\n\t     MPI initialisation routine\nndpoly_monomial.c: hmc_tm\n\t     implements the functions needed for a ndpoly monomial\nobservables.c: hmc_tm, invert, invert_doublet\n\t     computes the gauge action related to the Wilson plaquette part\nonline_measurement.c: hmc_tm\n\t     anything related to online measurements\nphmc.c       hmc_tm\n\t     functions and variables as needed for the PHC\npolyakov_loop.c: hmc_tm\n\t     measures the polyakov loop\npropagator_io.c: invert, invert_doublet, hmc_tm\n\t     functions related to spinor field IO\nranlxd.c:    invert, invert_doublet, hmc_tm\n\t     RANLUX random number generator (64 Bit)\nranlxs.c:    invert, invert_doublet, hmc_tm\n\t     RANLUX random number generator (32 Bit)\nread_input.l: invert, invert_doublet, hmc_tm\n             definition of the input file parser (flex)\nreweighting_factor.c: experimental\nreweighting_factor_nd.c: experimental\nsighandler.c: invert, invert_doublet, hmc_tm\n\t     handles signal related to illegal instructions\nstart.c:     invert, invert_doublet, hmc_tm\n\t     functions needed to give initial values to gauge and spinor fields\nstout_smear.c: invert, invert_doublet\n\t     functions to stout smear a given gauge configuration\nstout_smear_force.c: experimental\ntm_operators.c: invert, invert_doublet, hmc_tm\n\t     operators needed for even/odd preconditioning the Wilson\n\t     twisted mass Dirac operator\nupdate_backward_gauge.c: invert, invert_doublet, hmc_tm\n\t     functions to update the gauge copy\nupdate_momenta.c: hmc_tm\n\t     function to update the momenta in the HMC MD part\nupdate_tm.c: hmc_tm\n\t     the HMC MD part\nxchange_2fields.c: invert, invert_doublet, hmc_tm\n\t     implements the MPI communication of two even/odd spinor fields\n\t     at once\nxchange_deri.c: hmc_tm\n\t     implements the MPI communication of derivatives\nxchange_field.c: invert, invert_doublet, hmc_tm\n\t     implements the MPI communication of a single even/odd spinor\n\t     field\nxchange_gauge.c: invert, invert_doublet, hmc_tm\n\t     implements the MPI communication of the gauge field\nxchange_halffield.c: invert, invert_doublet, hmc_tm\n\t     implements the MPI communication of a half spinor field\nxchange_lexicfield.c: invert, invert_doublet, hmc_tm\n\t     implements the MPI communication of a single (full) spinor\n\t     field\n\n****************************************************************************\nthe linalg directory: all routines here are compiled into the liblinalg\n                      runtime library\n                      capital letters are spinor fields, others scalars\nadd.c:                Q = R + S\nassign.c:             R = S\nassign_add_mul.c:     P = P + c Q with c complex\nassign_add_mul_r.c:   P = P + c Q with c real\nassign_add_mul_add_mul.c:   R = R + c1*S + c2*U with c1 and c2 complex variables\nassign_add_mul_add_mul_r.c: R = R + c1*S + c2*U with c1 and c2 real variables\nassign_diff_mul.c:    S=S-c*Q\nassign_mul_add_mul_add_mul_add_mul_r.c: R = c1*R + c2*S + c3*U + c4*V\n\t\t\t \t\twith c1, c2, c3, c4 real variables\nassign_mul_add_mul_add_mul_r.c:         R = c1*R + c2*S + c3*U \n\t\t\t\t\twith c1, c2 and c3 real variables\nassign_mul_add_mul_r.c:     R = c1*R + c2*S , c1 and c2 are real constants \nassign_mul_add_r.c:         R = c*R + S  c is a real constant\nassign_mul_bra_add_mul_ket_add.c:       R = c2*(R + c1*S) + (*U)\n\t\t\t\t\twith c1 and c2 complex variables\nassign_mul_bra_add_mul_ket_add_r.c:     R = c2*(R + c1*S) + (*U)\n\t\t\t\t\twith c1 and c2 complex variables\nassign_mul_bra_add_mul_r.c:             R = c1*(R + c2*S)\n\t\t\t\t\twith c1 and c2 complex variables\ncomp_decomp.c:                          Splits the Bi-spinor R in the spinors S and T \nconvert_eo_to_lexic.c:                  convert to even odd spinors to one full spinor\ndiff.c:                 Q = R - S\ndiff_and_square_norm.c: Q = R - S and ||Q||^2\nmattimesvec.c:          w = M*v for complex vectors w,v and and complex square matrix M\nmul.c:                  R = c*S, for complex c\nmul_r.c:                R = c*S, for real c\nmul_add_mul.c:          R = c1*S + c2*U , c1 and c2 are complex constants\nmul_add_mul_r.c         R = c1*S + c2*U , c1 and c2 are real constants\nmul_diff_mul.c:         R = c1*S - c2*U , c1 and c2 are complex constants\nmul_diff_mul_r.c        R = c1*S - c2*U , c1 and c2 are real constants\nmul_diff_r.c            R = c1*S - U , c1 is a real constant \nscalar_prod.c:          c = (R, S)\nscalar_prod_i.c:        c = Im(R, S)\nscalar_prod_r.c:        c = Re(R, S)\nsquare_and_prod_r.c:    Returns Re(R,S) and the square norm of S\nsquare_norm.c:          c = ||Q||^2\n\n****************************************************************************\nsolver directory: all routines here are compiled into the libsolver\n                  runtime library\n\t\t  the solvers are for spinor fields, if not indicated\n\t\t  otherwise.\n\nMsap.c:                 experimental SAP preconditioner\nbicgstab_complex.c:     BiCGstab for complex fields\nbicgstabell.c:          experimental\ncg_her.c :              CG solver for hermitian operators\ncg_her_nd.c:            CG solver for hermitian heavy doublet operators\ncgs_real.c:             CGS solver\nchrono_guess.c:         routines for the chronological solver\ndfl_projector.c:        experimental\ndiagonalise_general_matrix.c:  subroutine to diagonalise a complex n times n\n                               matrix. Input is a complex matrix in _C_ like\n                               order. Output is again _C_ like. Uses lapack\neigenvalues.c           compute the nr_of_eigenvalues lowest eigenvalues\n                        of (gamma5*D)^2\nfgmres.c:               FGMRES (flexible GMRES) solver\ngcr.c:                  GCR solver\ngcr4complex.c:          GCR solver for complex fields\ngenerate_dfl_subspace.c: experimental\ngmres.c:                GMRES solver\ngmres_dr.c:             GMRES-DR solver\ngmres_precon.c:         GMRES usable for preconditioning other solvers (experimental)\ngram-schmidt.c:         Gram-Schmidt orthonormalisation routines\njdher.c:                Jacobi Davidson for hermitian matrices (to compute EVs)\nlu_solve.c:             compute the inverse of a matrix with LU decomposition\nmr.c:                   MR solver\npcg_her.c:              PCG solver\npoly_precon.c:          polynomial preconditioner using Chebysheff polynomials\n\t\t\twith complex argument\nquicksort.c:            a quicksort routine\nsub_low_ev.c:           routines to subtract exactly computed eigenvectors from\n\t\t\ta given spinor field\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fetmc%2FtmLQCD","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fetmc%2FtmLQCD","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fetmc%2FtmLQCD/lists"}