@graphty/webgpu-graph-algorithms 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -21
- package/dist/browser.js +1 -1
- package/dist/chunks/{context-CRbw2Wyo.js → context-BR7fx3vR.js} +47 -5
- package/dist/chunks/context-BR7fx3vR.js.map +1 -0
- package/dist/node.js +1 -1
- package/dist/src/accelerator.d.ts +12 -10
- package/dist/src/accelerator.d.ts.map +1 -1
- package/dist/src/accelerator.js +32 -10
- package/dist/src/accelerator.js.map +1 -1
- package/dist/src/constants.d.ts +47 -0
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +47 -0
- package/dist/src/constants.js.map +1 -1
- package/dist/src/index.d.ts +7 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/kernel/prelude.d.ts.map +1 -1
- package/dist/src/kernel/prelude.js +4 -1
- package/dist/src/kernel/prelude.js.map +1 -1
- package/dist/src/kernels.d.ts +3 -3
- package/dist/src/kernels.d.ts.map +1 -1
- package/dist/src/kernels.js +27 -11
- package/dist/src/kernels.js.map +1 -1
- package/dist/src/layouts/force-simulation.d.ts +3 -1
- package/dist/src/layouts/force-simulation.d.ts.map +1 -1
- package/dist/src/layouts/force-simulation.js +13 -3
- package/dist/src/layouts/force-simulation.js.map +1 -1
- package/dist/src/layouts/forceatlas2.d.ts +1 -3
- package/dist/src/layouts/forceatlas2.d.ts.map +1 -1
- package/dist/src/layouts/forceatlas2.js +2 -191
- package/dist/src/layouts/forceatlas2.js.map +1 -1
- package/dist/src/layouts/fruchterman-reingold.d.ts +195 -0
- package/dist/src/layouts/fruchterman-reingold.d.ts.map +1 -0
- package/dist/src/layouts/fruchterman-reingold.js +579 -0
- package/dist/src/layouts/fruchterman-reingold.js.map +1 -0
- package/dist/src/layouts/model-common.d.ts +102 -0
- package/dist/src/layouts/model-common.d.ts.map +1 -0
- package/dist/src/layouts/model-common.js +198 -0
- package/dist/src/layouts/model-common.js.map +1 -0
- package/dist/src/layouts/spring-electrical.d.ts +179 -0
- package/dist/src/layouts/spring-electrical.d.ts.map +1 -0
- package/dist/src/layouts/spring-electrical.js +508 -0
- package/dist/src/layouts/spring-electrical.js.map +1 -0
- package/dist/src/types/accelerator.d.ts +7 -3
- package/dist/src/types/accelerator.d.ts.map +1 -1
- package/dist/src/types/layout.d.ts +32 -0
- package/dist/src/types/layout.d.ts.map +1 -1
- package/dist/src/types/options.d.ts +43 -1
- package/dist/src/types/options.d.ts.map +1 -1
- package/dist/src/wgsl/fa2-attraction.wgsl.d.ts +5 -2
- package/dist/src/wgsl/fa2-attraction.wgsl.d.ts.map +1 -1
- package/dist/src/wgsl/fa2-attraction.wgsl.js +6 -1
- package/dist/src/wgsl/fa2-attraction.wgsl.js.map +1 -1
- package/dist/src/wgsl/fa2-integrate.wgsl.d.ts +7 -2
- package/dist/src/wgsl/fa2-integrate.wgsl.d.ts.map +1 -1
- package/dist/src/wgsl/fa2-integrate.wgsl.js +28 -2
- package/dist/src/wgsl/fa2-integrate.wgsl.js.map +1 -1
- package/dist/src/wgsl/fa2-repulsion-exact.wgsl.d.ts +4 -2
- package/dist/src/wgsl/fa2-repulsion-exact.wgsl.d.ts.map +1 -1
- package/dist/src/wgsl/fa2-repulsion-exact.wgsl.js +14 -5
- package/dist/src/wgsl/fa2-repulsion-exact.wgsl.js.map +1 -1
- package/dist/src/wgsl/fa2-stats-finalize.wgsl.d.ts +8 -1
- package/dist/src/wgsl/fa2-stats-finalize.wgsl.d.ts.map +1 -1
- package/dist/src/wgsl/fa2-stats-finalize.wgsl.js +33 -0
- package/dist/src/wgsl/fa2-stats-finalize.wgsl.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/webgpu-graph-algorithms.js +1358 -284
- package/dist/webgpu-graph-algorithms.js.map +1 -1
- package/package.json +6 -4
- package/src/accelerator.ts +46 -12
- package/src/constants.ts +70 -0
- package/src/index.ts +15 -5
- package/src/kernel/prelude.ts +6 -0
- package/src/kernels.ts +27 -11
- package/src/layouts/force-simulation.ts +20 -3
- package/src/layouts/forceatlas2.ts +17 -220
- package/src/layouts/fruchterman-reingold.ts +737 -0
- package/src/layouts/model-common.ts +228 -0
- package/src/layouts/spring-electrical.ts +666 -0
- package/src/types/accelerator.ts +15 -3
- package/src/types/layout.ts +36 -0
- package/src/types/options.ts +45 -1
- package/src/wgsl/fa2-attraction.wgsl.ts +6 -1
- package/src/wgsl/fa2-integrate.wgsl.ts +28 -2
- package/src/wgsl/fa2-repulsion-exact.wgsl.ts +14 -5
- package/src/wgsl/fa2-stats-finalize.wgsl.ts +33 -0
- package/dist/chunks/context-CRbw2Wyo.js.map +0 -1
|
@@ -0,0 +1,508 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The spring-electrical preset on the exact repulsion tier (spec 7.20 "the preset"; contract 3.13): ngraph.forcelayout's
|
|
3
|
+
* physics under ngraph's option names and defaults -- Coulomb repulsion `-g m_i m_j / d^2` (K3, LAW 2), Hooke springs
|
|
4
|
+
* `k_s (d - L)` (K2, LAW 2), drag and the semi-implicit Euler step with the unit speed clamp over a per-node velocity
|
|
5
|
+
* (K5, APPLY 2), the kinetic energy folded into the trace (K1, STATS_MODE 2; PD-4) -- as the ForceModel that
|
|
6
|
+
* ForceSimulation drives over the four FA2 kernels K1 K2 K3 K5 per iteration and toScene per batch. No K4: there is no
|
|
7
|
+
* speed controller. The velocity is the model's `velocity` buffer bound into the `oldForce` slot of K3 and K5 (PD-2),
|
|
8
|
+
* left alone by the FA2 text because the model compiles `SWING_MODE = 1` (PD-20). Mass is `1 + degree / 3` and the
|
|
9
|
+
* weights are ignored (PD-11); `SpringElectricalOptions.gravity` is ngraph's Coulomb constant, written into
|
|
10
|
+
* `Fa2Params.coulomb` while FA2's centre gravity is 0 (PD-12). Settlement is the shared rule of spec 7.17
|
|
11
|
+
* (DEP-P5-A); `reheat()` leaves the velocities alone (ngraph has no reheat).
|
|
12
|
+
*
|
|
13
|
+
* Model decisions this file shares with forceatlas2.ts: the K1-K5 dispatches of one batch share ONE compute pass and
|
|
14
|
+
* toScene runs in a second pass that ends it; the fill kernel takes its FillParams from a model-owned 256-byte uniform
|
|
15
|
+
* buffer; `repulsion: "grid"` is E_UNSUPPORTED at load() (the simulation's tier rule).
|
|
16
|
+
*/
|
|
17
|
+
import { MAX_ITERATIONS_PER_STEP, SE_DEFAULTS, SE_SCALE_REFERENCE_NODES, TRACE_RECORD_BYTES, UNIFORM_SLOT_BYTES, } from "../constants.js";
|
|
18
|
+
import { BufferUsage } from "../device/webgpu-constants.js";
|
|
19
|
+
import { WebGpuGraphError } from "../errors.js";
|
|
20
|
+
import { plan1d } from "../kernel/dispatch.js";
|
|
21
|
+
import { FA2_PARAMS, FA2_STATE, FA2_TRACE, FILL_PARAMS, graphBindings, kernelSpec } from "../kernels.js";
|
|
22
|
+
import { ForceSimulation, } from "./force-simulation.js";
|
|
23
|
+
import { resolveLayoutTuning } from "./forceatlas2.js";
|
|
24
|
+
import { describeValue, FILL_PARAMS_BUFFER, FORCE_BYTES_PER_NODE, invalid, isPositiveInteger, pickCenter, pickDim, pickNumber, pickSeed, scalar, seedWord, subset, vector, } from "./model-common.js";
|
|
25
|
+
// ============================================================ constants
|
|
26
|
+
/** The stage names of one iteration in dispatch order plus the per-batch toScene (no K4: spec 7.20). */
|
|
27
|
+
const SE_STAGES = ["K1", "K2", "K3", "K5", "toScene"];
|
|
28
|
+
/** The one-workgroup dispatch of K1. */
|
|
29
|
+
const ONE_WORKGROUP = { x: 1, y: 1, z: 1, items: 1, stride: null };
|
|
30
|
+
/** The model's constant override set (PD-1, PD-20): the spring / coulomb laws, ngraph's Euler step, the kinetic-energy statistic, SWING_MODE 1 so the FA2 text never touches the oldForce slot. */
|
|
31
|
+
const SE_OVERRIDES = Object.freeze({
|
|
32
|
+
LINLOG: false,
|
|
33
|
+
DISTRIBUTED: false,
|
|
34
|
+
TIER: 0,
|
|
35
|
+
SWING_MODE: 1,
|
|
36
|
+
STRONG_GRAVITY: false,
|
|
37
|
+
GRAVITY_CENTER: 0,
|
|
38
|
+
LAW: 2,
|
|
39
|
+
APPLY: 2,
|
|
40
|
+
STATS_MODE: 2,
|
|
41
|
+
});
|
|
42
|
+
/** Every override K1 accepts, with its default. */
|
|
43
|
+
const K1_DEFAULTS = { STATS_MODE: 0 };
|
|
44
|
+
/** Every override K2 accepts, with its default (plus the two standard graph overrides). */
|
|
45
|
+
const K2_DEFAULTS = {
|
|
46
|
+
LINLOG: false,
|
|
47
|
+
DISTRIBUTED: false,
|
|
48
|
+
TIER: 0,
|
|
49
|
+
USE_PERM: false,
|
|
50
|
+
HAS_WEIGHTS: false,
|
|
51
|
+
LAW: 0,
|
|
52
|
+
};
|
|
53
|
+
/** Every override K3 accepts, with its default. */
|
|
54
|
+
const K3_DEFAULTS = { SWING_MODE: 0, STRONG_GRAVITY: false, GRAVITY_CENTER: 0, LAW: 0 };
|
|
55
|
+
/** Every override K5 accepts, with its default. */
|
|
56
|
+
const K5_DEFAULTS = { SWING_MODE: 0, APPLY: 0 };
|
|
57
|
+
/** The name of the model's velocity buffer (bound into the `oldForce` slot of K3 / K5, PD-2). */
|
|
58
|
+
const VELOCITY_BUFFER = "velocity";
|
|
59
|
+
/** The resolved record with no option given: SE_DEFAULTS plus the origin centre and the null seed; the two force constants null = size-scaled at load. */
|
|
60
|
+
const DEFAULT_RESOLVED = Object.freeze({
|
|
61
|
+
...SE_DEFAULTS,
|
|
62
|
+
gravity: null,
|
|
63
|
+
springCoefficient: null,
|
|
64
|
+
center: [0, 0, 0],
|
|
65
|
+
seed: null,
|
|
66
|
+
});
|
|
67
|
+
/**
|
|
68
|
+
* The size factor of the default force constants: 1 up to SE_SCALE_REFERENCE_NODES nodes (ngraph's constants as
|
|
69
|
+
* they are), then SE_SCALE_REFERENCE_NODES / n, so the per-node force stays at the level ngraph's constants were
|
|
70
|
+
* tuned for instead of pinning every node at the unit speed clamp.
|
|
71
|
+
* @param n - the node count
|
|
72
|
+
* @returns the factor in (0, 1]
|
|
73
|
+
*/
|
|
74
|
+
export function springSizeFactor(n) {
|
|
75
|
+
return Math.min(1, SE_SCALE_REFERENCE_NODES / Math.max(1, n));
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* An optional force constant: undefined keeps the fallback; null means the size-scaled default; else a finite number
|
|
79
|
+
* passing `ok`.
|
|
80
|
+
* @param name - the option name
|
|
81
|
+
* @param given - the value given
|
|
82
|
+
* @param fallback - the previous record's value or the default
|
|
83
|
+
* @param ok - the range predicate
|
|
84
|
+
* @param range - the range text of the error
|
|
85
|
+
* @returns the number or null
|
|
86
|
+
*/
|
|
87
|
+
function pickNullable(name, given, fallback, ok, range) {
|
|
88
|
+
if (given === undefined) {
|
|
89
|
+
return fallback;
|
|
90
|
+
}
|
|
91
|
+
if (given === null) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
return pickNumber(name, given, 1, ok, `${range} or null`);
|
|
95
|
+
}
|
|
96
|
+
// ============================================================ the resolver
|
|
97
|
+
/**
|
|
98
|
+
* Applies SE_DEFAULTS to the option record; validates ranges (spec 7.20; ngraph's constraints): `springLength` > 0,
|
|
99
|
+
* `springCoefficient` > 0, `dragCoefficient` >= 0, `timeStep` > 0, `gravity` any finite number (negative repels; ngraph's
|
|
100
|
+
* comment: "if you make it positive nodes start attract each other"). `gravity` and `springCoefficient` left out (or
|
|
101
|
+
* null) resolve to null: ngraph's constant times springSizeFactor(n), applied in paramsFor once n is known. With `previous` the record is a PATCH over it and
|
|
102
|
+
* `maxInFlight` may not change (the uniform ring is sized by it at construction).
|
|
103
|
+
* @param options - the caller's options (or a setParams patch)
|
|
104
|
+
* @param previous - the current resolved record when resolving a patch
|
|
105
|
+
* @returns the frozen resolved record
|
|
106
|
+
*/
|
|
107
|
+
export function resolveSpringElectricalOptions(options, previous) {
|
|
108
|
+
const o = options ?? {};
|
|
109
|
+
const base = previous ?? DEFAULT_RESOLVED;
|
|
110
|
+
if (previous !== undefined && o.maxInFlight !== undefined && o.maxInFlight !== previous.maxInFlight) {
|
|
111
|
+
throw new WebGpuGraphError("E_INVALID_ARGUMENT", `maxInFlight cannot change after creation (the uniform ring is sized by it): got ${describeValue(o.maxInFlight)}, current ${previous.maxInFlight}`, { argument: "maxInFlight", value: o.maxInFlight, expected: previous.maxInFlight });
|
|
112
|
+
}
|
|
113
|
+
const resolved = {
|
|
114
|
+
springLength: pickNumber("springLength", o.springLength, base.springLength, (v) => v > 0, "> 0"),
|
|
115
|
+
springCoefficient: pickNullable("springCoefficient", o.springCoefficient, base.springCoefficient, (v) => v > 0, "> 0"),
|
|
116
|
+
gravity: pickNullable("gravity", o.gravity, base.gravity, () => true, "a finite number (negative repels)"),
|
|
117
|
+
dragCoefficient: pickNumber("dragCoefficient", o.dragCoefficient, base.dragCoefficient, (v) => v >= 0, ">= 0"),
|
|
118
|
+
timeStep: pickNumber("timeStep", o.timeStep, base.timeStep, (v) => v > 0, "> 0"),
|
|
119
|
+
dim: pickDim(o.dim, base.dim),
|
|
120
|
+
scale: pickNumber("scale", o.scale, base.scale, (v) => v > 0, "> 0"),
|
|
121
|
+
center: pickCenter(o.center, base.center),
|
|
122
|
+
seed: pickSeed(o.seed, base.seed),
|
|
123
|
+
settleThreshold: pickNumber("settleThreshold", o.settleThreshold, base.settleThreshold, (v) => v >= 0, ">= 0"),
|
|
124
|
+
settleWindow: pickNumber("settleWindow", o.settleWindow, base.settleWindow, isPositiveInteger, "an integer >= 1"),
|
|
125
|
+
iterationsPerStep: pickNumber("iterationsPerStep", o.iterationsPerStep, base.iterationsPerStep, (v) => isPositiveInteger(v) && v <= MAX_ITERATIONS_PER_STEP, `an integer in [1, ${MAX_ITERATIONS_PER_STEP}]`),
|
|
126
|
+
maxInFlight: pickNumber("maxInFlight", o.maxInFlight, base.maxInFlight, isPositiveInteger, "an integer >= 1"),
|
|
127
|
+
};
|
|
128
|
+
return Object.freeze(resolved);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* The mass of the preset: `1 + degree / 3` per node (ngraph index.js:391-395; the undirected snapshot's outDegree is
|
|
132
|
+
* the degree), as the Float32Array the simulation packs into pos.w.
|
|
133
|
+
* @param s - the snapshot
|
|
134
|
+
* @returns n masses
|
|
135
|
+
*/
|
|
136
|
+
function massOf(s) {
|
|
137
|
+
const degree = s.outDegree();
|
|
138
|
+
const out = new Float32Array(s.nodeCount);
|
|
139
|
+
for (let i = 0; i < s.nodeCount; i++) {
|
|
140
|
+
out[i] = 1 + degree[i] / 3;
|
|
141
|
+
}
|
|
142
|
+
return out;
|
|
143
|
+
}
|
|
144
|
+
/** The spring-electrical model (spec 7.20: K1 K2 K3 K5 per iteration; toScene once per batch). Stages: ["K1", "K2", "K3", "K5", "toScene"]. */
|
|
145
|
+
export class SpringElectricalModel {
|
|
146
|
+
/**
|
|
147
|
+
* Creates the model for one simulation.
|
|
148
|
+
* @param tuning - the resolved GPU-only tuning
|
|
149
|
+
* @param resolved - the resolved option record at creation
|
|
150
|
+
*/
|
|
151
|
+
constructor(tuning, resolved) {
|
|
152
|
+
/** The model kind of spec 7.19. */
|
|
153
|
+
this.kind = "springElectrical";
|
|
154
|
+
/** The stage names in dispatch order (the `upTo` vocabulary of recordIteration and debugRunStages). */
|
|
155
|
+
this.stages = SE_STAGES;
|
|
156
|
+
/** Fa2Params: the per-iteration uniform block (the simulation writes the shared fields into it). */
|
|
157
|
+
this.params = FA2_PARAMS;
|
|
158
|
+
/** Fa2State: the state header block. */
|
|
159
|
+
this.state = FA2_STATE;
|
|
160
|
+
/** Fa2Trace: one record per iteration of a batch. */
|
|
161
|
+
this.trace = FA2_TRACE;
|
|
162
|
+
/** The resources of the last bind(), or null before the first. */
|
|
163
|
+
this.resources = null;
|
|
164
|
+
/** The kernels and bind groups of the last bind(), or null before it (and for n === 0). */
|
|
165
|
+
this.bound = null;
|
|
166
|
+
/** The K1-K5 compute pass of the batch being recorded, keyed by CommandBatch.id; null between batches. */
|
|
167
|
+
this.openPass = null;
|
|
168
|
+
this.tuning = tuning;
|
|
169
|
+
this.current = resolved;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* force 12n (zeroed), velocity 12n (zeroed: every load() starts at rest, `allocate()` / `clearKept()` honour
|
|
173
|
+
* `zero`) and the 256-byte FillParams uniform buffer. n = 0 reports one node's worth of bytes so no zero-length
|
|
174
|
+
* buffer is ever created.
|
|
175
|
+
* @param n - the node count
|
|
176
|
+
* @param _dim - the layout dimension (the arrays are stride 3 in both)
|
|
177
|
+
* @returns the three model-owned buffer specs
|
|
178
|
+
*/
|
|
179
|
+
buffers(n, _dim) {
|
|
180
|
+
const bytes = Math.max(1, n) * FORCE_BYTES_PER_NODE;
|
|
181
|
+
const usage = BufferUsage.STORAGE | BufferUsage.COPY_SRC | BufferUsage.COPY_DST;
|
|
182
|
+
return [
|
|
183
|
+
{ name: "force", byteLength: bytes, usage, zero: true },
|
|
184
|
+
{ name: VELOCITY_BUFFER, byteLength: bytes, usage, zero: true },
|
|
185
|
+
{
|
|
186
|
+
name: FILL_PARAMS_BUFFER,
|
|
187
|
+
byteLength: UNIFORM_SLOT_BYTES,
|
|
188
|
+
usage: BufferUsage.UNIFORM | BufferUsage.COPY_DST,
|
|
189
|
+
zero: false,
|
|
190
|
+
},
|
|
191
|
+
];
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* { mass: 1 + degree / 3, weights: none } (PD-11): the preset has no mass or weight option, and K2 compiles
|
|
195
|
+
* HAS_WEIGHTS = false. No `fixed` (setFixed is the live API). The tier rule is the simulation's (load() throws
|
|
196
|
+
* E_UNSUPPORTED for the grid tier before calling this).
|
|
197
|
+
* @param s - the snapshot being loaded
|
|
198
|
+
* @param _options - the simulation's current option record (unused: nothing in it affects the inputs)
|
|
199
|
+
* @returns the per-load inputs
|
|
200
|
+
*/
|
|
201
|
+
inputs(s, _options) {
|
|
202
|
+
return { mass: massOf(s), weights: { data: null, source: "none", column: null } };
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* The constant SE_OVERRIDES (PD-1): no option changes a law, so setParams never recompiles.
|
|
206
|
+
* @param _options - an option record (unused)
|
|
207
|
+
* @returns the model's own override set
|
|
208
|
+
*/
|
|
209
|
+
overrides(_options) {
|
|
210
|
+
return SE_OVERRIDES;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* The six module specs of an override set in dispatch order -- K1, K2, K3, K5, toScene, fill -- each with only the
|
|
214
|
+
* override names its entry declares (K2 also USE_PERM / HAS_WEIGHTS), for warm() and the compile matrix.
|
|
215
|
+
* @param overrides - the merged override set (the model's plus USE_PERM / HAS_WEIGHTS)
|
|
216
|
+
* @param _subgroups - accepted for the ForceModel interface and unused (the composer picks the twin from caps)
|
|
217
|
+
* @returns the specs
|
|
218
|
+
*/
|
|
219
|
+
specs(overrides, _subgroups) {
|
|
220
|
+
return [
|
|
221
|
+
kernelSpec("fa2-stats-finalize", subset(overrides, K1_DEFAULTS)),
|
|
222
|
+
kernelSpec("fa2-attraction", subset(overrides, K2_DEFAULTS)),
|
|
223
|
+
kernelSpec("fa2-repulsion-exact", subset(overrides, K3_DEFAULTS)),
|
|
224
|
+
kernelSpec("fa2-integrate", subset(overrides, K5_DEFAULTS)),
|
|
225
|
+
kernelSpec("fa2-to-scene"),
|
|
226
|
+
kernelSpec("fill"),
|
|
227
|
+
];
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Compiles (through the cache) and binds every kernel against the buffers of this load(): K1, K2 (or the fill of
|
|
231
|
+
* force when arcCount === 0), K3 and K5 with the velocity in their `oldForce` slot (PD-2), toScene; writes the
|
|
232
|
+
* FillParams { count: 3n, value: 0, mode: 0 } into the model's uniform buffer. With n === 0 nothing is bound.
|
|
233
|
+
* @param resources - the graph, the shared and model buffers, the ring and the cache
|
|
234
|
+
* @param overrides - the merged override set
|
|
235
|
+
*/
|
|
236
|
+
async bind(resources, overrides) {
|
|
237
|
+
this.dropBound();
|
|
238
|
+
this.resources = resources;
|
|
239
|
+
const { n, pipelines, caps, core, perm, ring, device } = resources;
|
|
240
|
+
if (n === 0) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
const [k1, k2, k3, k5, toScene, fill] = await Promise.all([
|
|
244
|
+
pipelines.kernel(kernelSpec("fa2-stats-finalize", subset(overrides, K1_DEFAULTS))),
|
|
245
|
+
pipelines.kernel(kernelSpec("fa2-attraction", subset(overrides, K2_DEFAULTS))),
|
|
246
|
+
pipelines.kernel(kernelSpec("fa2-repulsion-exact", subset(overrides, K3_DEFAULTS))),
|
|
247
|
+
pipelines.kernel(kernelSpec("fa2-integrate", subset(overrides, K5_DEFAULTS))),
|
|
248
|
+
pipelines.kernel(kernelSpec("fa2-to-scene")),
|
|
249
|
+
pipelines.kernel(kernelSpec("fill")),
|
|
250
|
+
]);
|
|
251
|
+
if (this.resources !== resources) {
|
|
252
|
+
// a newer bind() superseded this one while the pipelines compiled; its own bind groups stand
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
const pos = resources.buffer("positions");
|
|
256
|
+
const scene = resources.buffer("scenePositions");
|
|
257
|
+
const fixed = resources.buffer("fixed");
|
|
258
|
+
const partials = resources.buffer("partials");
|
|
259
|
+
const state = resources.buffer("state");
|
|
260
|
+
const trace = resources.buffer("trace");
|
|
261
|
+
const force = resources.buffer("force");
|
|
262
|
+
const velocity = resources.buffer(VELOCITY_BUFFER);
|
|
263
|
+
const fillParamsBuffer = resources.buffer(FILL_PARAMS_BUFFER);
|
|
264
|
+
const params = ring.binding(FA2_PARAMS);
|
|
265
|
+
const fillParams = {
|
|
266
|
+
buffer: fillParamsBuffer.buffer,
|
|
267
|
+
offset: fillParamsBuffer.offset,
|
|
268
|
+
size: FILL_PARAMS.byteLength,
|
|
269
|
+
window: null,
|
|
270
|
+
};
|
|
271
|
+
const fillBytes = new ArrayBuffer(FILL_PARAMS.byteLength);
|
|
272
|
+
FILL_PARAMS.write(new DataView(fillBytes), { count: 3 * n, value: 0, mode: 0 });
|
|
273
|
+
device.queue.writeBuffer(fillParamsBuffer.buffer, fillParamsBuffer.offset, fillBytes);
|
|
274
|
+
const hasArcs = core.colIdx !== null;
|
|
275
|
+
const wg = k1.workgroupSize;
|
|
276
|
+
this.bound = {
|
|
277
|
+
n,
|
|
278
|
+
plan: plan1d(n, wg, caps),
|
|
279
|
+
fillPlan: plan1d(3 * n, wg, caps),
|
|
280
|
+
k1,
|
|
281
|
+
k1Bound: k1.bind({ partials, S: state, T: trace, P: params }),
|
|
282
|
+
k2,
|
|
283
|
+
k2Bound: hasArcs
|
|
284
|
+
? k2.bind({ ...graphBindings(core, perm, resources.weights), pos, force, P: params })
|
|
285
|
+
: null,
|
|
286
|
+
k3,
|
|
287
|
+
k3Bound: k3.bind({ pos, S: state, force, oldForce: velocity, fixedMask: fixed, partials, P: params }),
|
|
288
|
+
k5,
|
|
289
|
+
k5Bound: k5.bind({ force, oldForce: velocity, fixedMask: fixed, S: state, pos, partials, P: params }),
|
|
290
|
+
toScene,
|
|
291
|
+
toSceneBound: toScene.bind({ pos, scene, P: params }),
|
|
292
|
+
fill,
|
|
293
|
+
fillForceBound: hasArcs ? null : fill.bind({ dst: force, P: fillParams }),
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* The Fa2Params values of one iteration: the shared fields, the FA2 fields at 0 (no centre gravity, PD-12; no
|
|
298
|
+
* FR temperature) and ngraph's five constants with `gravity` in `coulomb`.
|
|
299
|
+
* @param iteration - the global iteration index
|
|
300
|
+
* @param options - the simulation's current option record
|
|
301
|
+
* @returns the uniform values
|
|
302
|
+
*/
|
|
303
|
+
paramsFor(iteration, options) {
|
|
304
|
+
const { n } = this.requireResources();
|
|
305
|
+
const resolved = resolveSpringElectricalOptions(options, this.current);
|
|
306
|
+
const { nearMax, extentFactor } = this.tuning;
|
|
307
|
+
return {
|
|
308
|
+
n,
|
|
309
|
+
dim: resolved.dim,
|
|
310
|
+
flags: 0,
|
|
311
|
+
tierStart: 0,
|
|
312
|
+
tierEnd: n,
|
|
313
|
+
iterationIndex: iteration,
|
|
314
|
+
seed: seedWord(resolved.seed),
|
|
315
|
+
nearMax,
|
|
316
|
+
scalingRatio: 0,
|
|
317
|
+
gravity: 0,
|
|
318
|
+
jitterTolerance: 0,
|
|
319
|
+
scale: resolved.scale,
|
|
320
|
+
center: [resolved.center[0], resolved.center[1], resolved.center[2], 0],
|
|
321
|
+
settleThreshold: resolved.settleThreshold,
|
|
322
|
+
extentFactor,
|
|
323
|
+
gridMax: 0,
|
|
324
|
+
levels: 0,
|
|
325
|
+
pad: [0, 0, 0, 0],
|
|
326
|
+
frK: 0,
|
|
327
|
+
temperature: 0,
|
|
328
|
+
springLength: resolved.springLength,
|
|
329
|
+
springCoefficient: resolved.springCoefficient ?? SE_DEFAULTS.springCoefficient * springSizeFactor(n),
|
|
330
|
+
coulomb: resolved.gravity ?? SE_DEFAULTS.gravity * springSizeFactor(n),
|
|
331
|
+
dragCoefficient: resolved.dragCoefficient,
|
|
332
|
+
timeStep: resolved.timeStep,
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Records one iteration into the batch: K1, K2 (or the fill of force when arcCount === 0), K3, K5 in the batch's
|
|
337
|
+
* ONE K1-K5 compute pass, then toScene in a second pass that ends it, stopping after stage `upTo` when given.
|
|
338
|
+
* With n === 0 nothing is recorded; a call before bind() completed is E_NOT_LOADED.
|
|
339
|
+
* @param batch - the batch being recorded
|
|
340
|
+
* @param slot - the UniformRing slot holding this iteration's Fa2Params
|
|
341
|
+
* @param tier - "exact" (the grid tier is E_UNSUPPORTED; the simulation never passes "grid")
|
|
342
|
+
* @param upTo - a stage name to stop after; undefined records every stage including toScene
|
|
343
|
+
*/
|
|
344
|
+
recordIteration(batch, slot, tier, upTo) {
|
|
345
|
+
if (tier === "grid") {
|
|
346
|
+
throw new WebGpuGraphError("E_UNSUPPORTED", "the grid repulsion tier lands in P4", {
|
|
347
|
+
feature: "repulsion.grid",
|
|
348
|
+
hint: 'pass repulsion: "exact"',
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
const resources = this.requireResources();
|
|
352
|
+
const stop = upTo === undefined ? SE_STAGES.length - 1 : this.stageIndex(upTo);
|
|
353
|
+
const { bound } = this;
|
|
354
|
+
if (bound === null) {
|
|
355
|
+
if (resources.n === 0) {
|
|
356
|
+
return;
|
|
357
|
+
}
|
|
358
|
+
throw new WebGpuGraphError("E_NOT_LOADED", "the spring-electrical model is not bound (bind() has not completed)", { state: "loaded" });
|
|
359
|
+
}
|
|
360
|
+
const offset = resources.ring.offsetOf(slot);
|
|
361
|
+
const pass = this.openPass !== null && this.openPass.id === batch.id ? this.openPass.pass : batch.pass("se");
|
|
362
|
+
this.openPass = { id: batch.id, pass };
|
|
363
|
+
bound.k1.dispatch(pass, bound.k1Bound, ONE_WORKGROUP, [offset]);
|
|
364
|
+
if (stop < 1) {
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
if (bound.k2Bound !== null) {
|
|
368
|
+
bound.k2.dispatch(pass, bound.k2Bound, bound.plan, [offset]);
|
|
369
|
+
}
|
|
370
|
+
else if (bound.fillForceBound !== null) {
|
|
371
|
+
bound.fill.dispatch(pass, bound.fillForceBound, bound.fillPlan, [0]);
|
|
372
|
+
}
|
|
373
|
+
if (stop < 2) {
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
bound.k3.dispatch(pass, bound.k3Bound, bound.plan, [offset]);
|
|
377
|
+
if (stop < 3) {
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
bound.k5.dispatch(pass, bound.k5Bound, bound.plan, [offset]);
|
|
381
|
+
if (stop < 4) {
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
384
|
+
// the second pass ends the K1-K5 pass; the batch is complete after toScene, so nothing reuses it
|
|
385
|
+
this.openPass = null;
|
|
386
|
+
const scenePass = batch.pass("se-to-scene");
|
|
387
|
+
bound.toScene.dispatch(scenePass, bound.toSceneBound, bound.plan, [offset]);
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* kineticEnergy = 0 and temperature = 0 in the header (the velocities start at 0 through the buffer's `zero`).
|
|
391
|
+
* @param state - the state writer of the simulation
|
|
392
|
+
*/
|
|
393
|
+
onLoad(state) {
|
|
394
|
+
state.set("kineticEnergy", 0);
|
|
395
|
+
state.set("temperature", 0);
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Nothing: the velocities carry on (ngraph has no reheat; a drag lands in the next batch through the override
|
|
399
|
+
* list, spec 7.12).
|
|
400
|
+
* @param _state - the state writer of the simulation (unused)
|
|
401
|
+
*/
|
|
402
|
+
onReheat(_state) {
|
|
403
|
+
// intentionally empty (D8; DEP-P5-A)
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Replaces the record with the patch applied (every option is a numeric tweak; nothing recompiles, no reset).
|
|
407
|
+
* @param patch - the setParams patch
|
|
408
|
+
* @param _state - the state writer of the simulation (unused)
|
|
409
|
+
*/
|
|
410
|
+
onSetParams(patch, _state) {
|
|
411
|
+
this.current = resolveSpringElectricalOptions(patch, this.current);
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Decodes the state header and the k trace records of a completed batch into SpringElectricalStats: the exact
|
|
415
|
+
* tier with null grid fields; msPerIteration null (the simulation owns the clock); `kineticEnergy` is the last
|
|
416
|
+
* folded value (one iteration behind the last integrate, PD-4).
|
|
417
|
+
* @param state - a DataView over the 256-byte state header
|
|
418
|
+
* @param trace - a DataView over the k Fa2Trace records of the batch
|
|
419
|
+
* @returns the stats
|
|
420
|
+
*/
|
|
421
|
+
readStats(state, trace) {
|
|
422
|
+
const header = FA2_STATE.read(state);
|
|
423
|
+
const centroid = vector(header, "centroid");
|
|
424
|
+
const records = [];
|
|
425
|
+
const count = Math.floor(trace.byteLength / TRACE_RECORD_BYTES);
|
|
426
|
+
for (let i = 0; i < count; i++) {
|
|
427
|
+
const record = FA2_TRACE.read(trace, i * TRACE_RECORD_BYTES);
|
|
428
|
+
records.push({
|
|
429
|
+
kineticEnergy: scalar(record, "modelScalar"),
|
|
430
|
+
meanDisplacement: scalar(record, "meanDisplacement"),
|
|
431
|
+
settledCount: scalar(record, "settledCount"),
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
return {
|
|
435
|
+
iteration: scalar(header, "iteration"),
|
|
436
|
+
meanDisplacement: scalar(header, "meanDisplacement"),
|
|
437
|
+
rmsRadius: scalar(header, "rmsRadius"),
|
|
438
|
+
layoutRadius: scalar(header, "radius"),
|
|
439
|
+
centroid: [centroid[0], centroid[1], centroid[2]],
|
|
440
|
+
repulsionTier: "exact",
|
|
441
|
+
maxCellOccupancy: null,
|
|
442
|
+
outsideGrid: null,
|
|
443
|
+
msPerIteration: null,
|
|
444
|
+
kineticEnergy: scalar(header, "kineticEnergy"),
|
|
445
|
+
trace: records,
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
/**
|
|
449
|
+
* The resources of the last bind(), or E_NOT_LOADED before it.
|
|
450
|
+
* @returns the resources
|
|
451
|
+
*/
|
|
452
|
+
requireResources() {
|
|
453
|
+
if (this.resources === null) {
|
|
454
|
+
throw new WebGpuGraphError("E_NOT_LOADED", "the spring-electrical model has not been bound (load() first)", { state: "created" });
|
|
455
|
+
}
|
|
456
|
+
return this.resources;
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* The index of a stage name in SE_STAGES, or E_INVALID_ARGUMENT.
|
|
460
|
+
* @param upTo - the stage name
|
|
461
|
+
* @returns its index
|
|
462
|
+
*/
|
|
463
|
+
stageIndex(upTo) {
|
|
464
|
+
for (let i = 0; i < SE_STAGES.length; i++) {
|
|
465
|
+
if (SE_STAGES[i] === upTo) {
|
|
466
|
+
return i;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
throw invalid("upTo", upTo, SE_STAGES.join(" | "));
|
|
470
|
+
}
|
|
471
|
+
/** Drops the bind groups of the previous bind() (the buffers changed) and forgets the pass of a batch recorded before the rebind. */
|
|
472
|
+
dropBound() {
|
|
473
|
+
this.openPass = null;
|
|
474
|
+
const { bound } = this;
|
|
475
|
+
if (bound === null) {
|
|
476
|
+
return;
|
|
477
|
+
}
|
|
478
|
+
for (const kernel of [bound.k1, bound.k2, bound.k3, bound.k5, bound.toScene, bound.fill]) {
|
|
479
|
+
kernel.invalidate();
|
|
480
|
+
}
|
|
481
|
+
this.bound = null;
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
// ============================================================ the factory
|
|
485
|
+
/**
|
|
486
|
+
* The resolve callback of the simulation's setParams: the patch over the current record, re-validated.
|
|
487
|
+
* @param patch - the setParams patch
|
|
488
|
+
* @param current - the simulation's current option record
|
|
489
|
+
* @returns the new record
|
|
490
|
+
*/
|
|
491
|
+
function resolvePatch(patch, current) {
|
|
492
|
+
return resolveSpringElectricalOptions(patch, resolveSpringElectricalOptions(current));
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Spec 3.3 createSpringElectrical, verbatim: a GpuLayoutSimulation running ngraph's spring-electrical model on the
|
|
496
|
+
* exact repulsion tier with ngraph's defaults (spec 7.20) and the GPU-only tuning of GpuLayoutTuning.
|
|
497
|
+
* @param ctx - the context (E_DISPOSED / E_DEVICE_LOST through assertReady)
|
|
498
|
+
* @param options - the spring-electrical options and the GPU-only tuning knobs in one record
|
|
499
|
+
* @returns the simulation in state "created"; load() next
|
|
500
|
+
*/
|
|
501
|
+
export function createSpringElectrical(ctx, options) {
|
|
502
|
+
ctx.assertReady();
|
|
503
|
+
const resolved = resolveSpringElectricalOptions(options);
|
|
504
|
+
const tuning = resolveLayoutTuning(options);
|
|
505
|
+
const model = new SpringElectricalModel(tuning, resolved);
|
|
506
|
+
return new ForceSimulation(ctx, model, resolved, tuning, resolvePatch);
|
|
507
|
+
}
|
|
508
|
+
//# sourceMappingURL=spring-electrical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spring-electrical.js","sourceRoot":"","sources":["../../../src/layouts/spring-electrical.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,8 @@ import type { F32, F64, GraphSnapshot } from "@graphty/graph-format";
|
|
|
9
9
|
import type { LayoutAccelerator, LayoutSimulation } from "@graphty/layout";
|
|
10
10
|
import type { GpuContext } from "../context.js";
|
|
11
11
|
import type { ComponentsOptions, EigenvectorOptions, GpuHitsResult, GpuLabelResult, GpuPageRankResult, GpuScoresResult, HitsOptions, KatzOptions, PageRankOptions } from "./algorithms.js";
|
|
12
|
-
import type { ForceAtlas2Stats, GpuLayoutSimulation, GpuLayoutTuning } from "./layout.js";
|
|
13
|
-
import type { ForceAtlas2Options } from "./options.js";
|
|
12
|
+
import type { ForceAtlas2Stats, FruchtermanReingoldStats, GpuLayoutSimulation, GpuLayoutTuning, SpringElectricalStats } from "./layout.js";
|
|
13
|
+
import type { ForceAtlas2Options, FruchtermanReingoldOptions, SpringElectricalOptions } from "./options.js";
|
|
14
14
|
export type { LayoutAccelerator, LayoutSimulation };
|
|
15
15
|
export type { AlgorithmAccelerator, ApspResultLike, BellmanFordResultLike, BetweennessAcceleratorOptions, BfsResultLike, CommunityResultLike, CorenessResultLike, EdgeScoresResultLike, HitsOptionsLike, HitsResultLike, LabelResultLike, MstResultLike, PageRankResultLike, ScoresResultLike, SsspResultLike, };
|
|
16
16
|
/**
|
|
@@ -28,7 +28,9 @@ export interface AcceleratorOptions {
|
|
|
28
28
|
} | undefined;
|
|
29
29
|
}
|
|
30
30
|
/**
|
|
31
|
-
* The injectable object (spec 3.3): P3's forceAtlas2, release and dispose,
|
|
31
|
+
* The injectable object (spec 3.3): P3's forceAtlas2, release and dispose, P5's fruchtermanReingold and
|
|
32
|
+
* springElectrical (the two other optional members of the real LayoutAccelerator, spec 9.3; the CPU option types in,
|
|
33
|
+
* the GPU simulations out), plus P7's seven algorithm members
|
|
32
34
|
* (spec 8.2, 8.3; M8b-T8), non-optional here and returning the `Gpu*Result` shapes, which satisfy the `*ResultLike`
|
|
33
35
|
* mirrors (spec 9.7: `precision` is an extra field, `F32` is a `NumericVector`). `connectedComponents` and
|
|
34
36
|
* `weaklyConnectedComponents` are the same algorithm (spec 3.3: WCC semantics on directed input) under both names
|
|
@@ -42,6 +44,8 @@ export interface GpuAccelerator extends AlgorithmAccelerator, LayoutAccelerator
|
|
|
42
44
|
readonly ctx: GpuContext;
|
|
43
45
|
readonly options: Readonly<AcceleratorOptions>;
|
|
44
46
|
forceAtlas2(options?: ForceAtlas2Options): GpuLayoutSimulation<ForceAtlas2Options, ForceAtlas2Stats>;
|
|
47
|
+
fruchtermanReingold(options?: FruchtermanReingoldOptions): GpuLayoutSimulation<FruchtermanReingoldOptions, FruchtermanReingoldStats>;
|
|
48
|
+
springElectrical(options?: SpringElectricalOptions): GpuLayoutSimulation<SpringElectricalOptions, SpringElectricalStats>;
|
|
45
49
|
pageRank(s: GraphSnapshot, options?: PageRankOptions): Promise<GpuPageRankResult>;
|
|
46
50
|
personalizedPageRank(s: GraphSnapshot, personalization: F32 | F64, options?: PageRankOptions): Promise<GpuPageRankResult>;
|
|
47
51
|
hits(s: GraphSnapshot, options?: HitsOptions): Promise<GpuHitsResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accelerator.d.ts","sourceRoot":"","sources":["../../../src/types/accelerator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACR,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,6BAA6B,EAC7B,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EACR,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,WAAW,EACX,eAAe,EAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"accelerator.d.ts","sourceRoot":"","sources":["../../../src/types/accelerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,38 @@ export interface ForceAtlas2Stats extends LayoutStatsBase {
|
|
|
37
37
|
readonly speedEfficiency: number;
|
|
38
38
|
readonly trace: ReadonlyArray<ForceAtlas2TraceRecord>;
|
|
39
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* One per-iteration trace record of the last completed batch of a Fruchterman-Reingold simulation (spec 3.3
|
|
42
|
+
* FruchtermanReingoldStats.trace element): K1 writes `temperature` from the iteration's uniform slot (spec 7.20).
|
|
43
|
+
* @public
|
|
44
|
+
*/
|
|
45
|
+
export interface FruchtermanReingoldTraceRecord {
|
|
46
|
+
readonly temperature: number;
|
|
47
|
+
readonly meanDisplacement: number;
|
|
48
|
+
readonly settledCount: number;
|
|
49
|
+
}
|
|
50
|
+
/** Spec 3.3 FruchtermanReingoldStats, verbatim: the cooling schedule's value replaces the controller fields. */
|
|
51
|
+
export interface FruchtermanReingoldStats extends LayoutStatsBase {
|
|
52
|
+
readonly temperature: number;
|
|
53
|
+
readonly trace: ReadonlyArray<FruchtermanReingoldTraceRecord>;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* One per-iteration trace record of the last completed batch of a spring-electrical simulation (spec 3.3
|
|
57
|
+
* SpringElectricalStats.trace element): `kineticEnergy` is `0.5 * sum m |v|^2` over the free nodes after the
|
|
58
|
+
* PREVIOUS iteration's integrate: K5 writes it into partials B and the NEXT iteration's K1 folds it (PD-4), so the
|
|
59
|
+
* first record after load() carries 0 and record i carries the energy of iteration i - 1.
|
|
60
|
+
* @public
|
|
61
|
+
*/
|
|
62
|
+
export interface SpringElectricalTraceRecord {
|
|
63
|
+
readonly kineticEnergy: number;
|
|
64
|
+
readonly meanDisplacement: number;
|
|
65
|
+
readonly settledCount: number;
|
|
66
|
+
}
|
|
67
|
+
/** Spec 3.3 SpringElectricalStats, verbatim; `kineticEnergy` is the last folded value, one iteration behind the last integrate (PD-4). */
|
|
68
|
+
export interface SpringElectricalStats extends LayoutStatsBase {
|
|
69
|
+
readonly kineticEnergy: number;
|
|
70
|
+
readonly trace: ReadonlyArray<SpringElectricalTraceRecord>;
|
|
71
|
+
}
|
|
40
72
|
/** Options of GpuLayoutSimulation.run (spec 3.3). */
|
|
41
73
|
export interface RunOptions {
|
|
42
74
|
readonly maxIter?: number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/types/layout.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,wGAAwG;AACxG,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,QAAQ,CAAC,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC;IACzC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1C;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CACjC;AAED,2CAA2C;AAC3C,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;CACzD;AAED,qDAAqD;AACrD,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC7C;AAED,4GAA4G;AAC5G,MAAM,WAAW,mBAAmB,CAAC,OAAO,EAAE,KAAK,SAAS,eAAe,CAAE,SAAQ,gBAAgB;IACjG,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,GAAG,IAAI,CAAC;IACpD;;;;;;OAMG;IACH,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC/B,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClE,OAAO,IAAI,IAAI,CAAC;IAChB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,IAAI,IAAI,CAAC;IACf,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IACzC,GAAG,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,WAAW,CAAC,CAAC;CAC/D;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;CACtD;AAED,8FAA8F;AAC9F,MAAM,WAAW,oBAAoB;IACjC,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAC9C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU,CAAC;CACzC"}
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/types/layout.ts"],"names":[],"mappings":"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"}
|