From ae59c6ff198f198dfc66e29682623a821234aae6 Mon Sep 17 00:00:00 2001 From: Xiao-Yong Jin Date: Wed, 11 Mar 2026 16:29:50 -0500 Subject: [PATCH 1/7] HYP refactored with higher order derivatives --- src/field/fieldET.nim | 37 +- src/gauge/gaugeAction.nim | 2 +- src/gauge/gaugeUtils.nim | 36 + src/gauge/hypsmear.nim | 1479 ++++++++++++---- src/gauge/hypsmear2.nim | 10 +- src/gauge/smearutil.nim | 535 ++++++ src/maths/matrixFunctions.nim | 408 ++++- src/physics/colorOld.nim | 45 + tests/deriv/tgaugeaction.nim | 164 ++ tests/deriv/thyp.nim | 963 ++++++++++ tests/deriv/tprojU.nim | 677 +++++++ .../tstoutderiv.nim => deriv/tstout.nim} | 112 +- tests/deriv/tsymstaple.nim | 1574 +++++++++++++++++ tests/deriv/utils.nim | 800 +++++++++ 14 files changed, 6435 insertions(+), 407 deletions(-) create mode 100644 tests/deriv/tgaugeaction.nim create mode 100644 tests/deriv/thyp.nim create mode 100644 tests/deriv/tprojU.nim rename tests/{base/tstoutderiv.nim => deriv/tstout.nim} (52%) create mode 100644 tests/deriv/tsymstaple.nim create mode 100644 tests/deriv/utils.nim diff --git a/src/field/fieldET.nim b/src/field/fieldET.nim index 273658f2..51feb69b 100644 --- a/src/field/fieldET.nim +++ b/src/field/fieldET.nim @@ -20,8 +20,8 @@ type l*:Layout[V] elemSize*:int Field*[V:static[int],T] = ref FieldObj[V,T] - FieldArray*[V:static[int],T] = object ## share a single alignedMem - shape*:seq[int] + FieldArray*[N:static[int],V:static[int],T] = object ## share a single alignedMem + shape*:array[N,int] arr:seq[Field[V,T]] Subsetted*[F,S] = object field*:F @@ -181,8 +181,8 @@ proc newFarrElem[V:static[int],T](f:var Field[V,T]; l:Layout[V]; s:alignedMem[T] f.s.data = cast[typeof(s.data)](cast[int](s.data) + offset*l.nSitesOuter*s.stride) f.elemSize = sizeOf(T) -proc newFieldArray*[V:static[int],T](l:Layout[V]; t:typedesc[Field[V,T]]; n: int):FieldArray[V,T] {.noinit.} = - result.shape = @[n] +proc newFieldArray*[V:static[int],T](l:Layout[V]; t:typedesc[Field[V,T]]; n: int):FieldArray[1,V,T] {.noinit.} = + result.shape[0] = n result.arr = newseq[t](n) var s:typeof(result.arr[0].s) s.newU(l.nSitesOuter*n) @@ -193,8 +193,9 @@ template newFieldArray2*[V:static[int],T](l:Layout[V]; ty:typedesc[Field[V,T]]; ns: array[2,int]; constraint: untyped):untyped = let n = ns[0] let m = ns[1] - var r {.noinit.} :FieldArray[V,T] - r.shape = @[n,m] + var r {.noinit.} :FieldArray[2,V,T] + r.shape[0] = n + r.shape[1] = m r.arr = newseq[ty](n*m) var t = 0 for i in 0..