Skip to content

Commit c7b233a

Browse files
committed
Implement half-Fishman projectors for triangular CTMRG
1 parent fb38b89 commit c7b233a

File tree

2 files changed

+61
-18
lines changed

2 files changed

+61
-18
lines changed

varipeps/config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class Projector_Method(IntEnum):
3131
HALF = auto() #: Use only half network for projector calculation
3232
FULL = auto() #: Use full network for projector calculation
3333
FISHMAN = auto() #: Use the Fishman method for projector calculation
34+
HALF_FISHMAN = auto() #: Use the Fishman method but with half projectors as basis
3435

3536

3637
@unique

varipeps/ctmrg/triangular_projectors.py

Lines changed: 60 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -162,57 +162,93 @@ def calc_corner_projectors(
162162
)
163163

164164
projector_30_left, projector_30_right, smallest_S_30 = _corner_workhorse(
165-
corner_210 if projector_method is not Projector_Method.HALF else None,
165+
(
166+
corner_210
167+
if projector_method is not Projector_Method.HALF
168+
and projector_method is not Projector_Method.HALF_FISHMAN
169+
else None
170+
),
166171
corner_90,
167172
corner_330,
168173
chi,
169174
truncation_eps,
170-
projector_method is Projector_Method.FISHMAN,
175+
projector_method is Projector_Method.FISHMAN
176+
or projector_method is Projector_Method.HALF_FISHMAN,
171177
)
172178

173179
projector_150_left, projector_150_right, smallest_S_150 = _corner_workhorse(
174-
corner_330 if projector_method is not Projector_Method.HALF else None,
180+
(
181+
corner_330
182+
if projector_method is not Projector_Method.HALF
183+
and projector_method is not Projector_Method.HALF_FISHMAN
184+
else None
185+
),
175186
corner_210,
176187
corner_90,
177188
chi,
178189
truncation_eps,
179-
projector_method is Projector_Method.FISHMAN,
190+
projector_method is Projector_Method.FISHMAN
191+
or projector_method is Projector_Method.HALF_FISHMAN,
180192
)
181193

182194
projector_270_left, projector_270_right, smallest_S_270 = _corner_workhorse(
183-
corner_90 if projector_method is not Projector_Method.HALF else None,
195+
(
196+
corner_90
197+
if projector_method is not Projector_Method.HALF
198+
and projector_method is not Projector_Method.HALF_FISHMAN
199+
else None
200+
),
184201
corner_330,
185202
corner_210,
186203
chi,
187204
truncation_eps,
188-
projector_method is Projector_Method.FISHMAN,
205+
projector_method is Projector_Method.FISHMAN
206+
or projector_method is Projector_Method.HALF_FISHMAN,
189207
)
190208

191209
projector_90_left, projector_90_right, smallest_S_90 = _corner_workhorse(
192-
corner_270 if projector_method is not Projector_Method.HALF else None,
210+
(
211+
corner_270
212+
if projector_method is not Projector_Method.HALF
213+
and projector_method is not Projector_Method.HALF_FISHMAN
214+
else None
215+
),
193216
corner_150,
194217
corner_30,
195218
chi,
196219
truncation_eps,
197-
projector_method is Projector_Method.FISHMAN,
220+
projector_method is Projector_Method.FISHMAN
221+
or projector_method is Projector_Method.HALF_FISHMAN,
198222
)
199223

200224
projector_210_left, projector_210_right, smallest_S_210 = _corner_workhorse(
201-
corner_30 if projector_method is not Projector_Method.HALF else None,
225+
(
226+
corner_30
227+
if projector_method is not Projector_Method.HALF
228+
and projector_method is not Projector_Method.HALF_FISHMAN
229+
else None
230+
),
202231
corner_270,
203232
corner_150,
204233
chi,
205234
truncation_eps,
206-
projector_method is Projector_Method.FISHMAN,
235+
projector_method is Projector_Method.FISHMAN
236+
or projector_method is Projector_Method.HALF_FISHMAN,
207237
)
208238

209239
projector_330_left, projector_330_right, smallest_S_330 = _corner_workhorse(
210-
corner_150 if projector_method is not Projector_Method.HALF else None,
240+
(
241+
corner_150
242+
if projector_method is not Projector_Method.HALF
243+
and projector_method is not Projector_Method.HALF_FISHMAN
244+
else None
245+
),
211246
corner_30,
212247
corner_270,
213248
chi,
214249
truncation_eps,
215-
projector_method is Projector_Method.FISHMAN,
250+
projector_method is Projector_Method.FISHMAN
251+
or projector_method is Projector_Method.HALF_FISHMAN,
216252
)
217253

218254
return (
@@ -368,23 +404,26 @@ def calc_T_30_150_270_projectors(
368404
T_30_right,
369405
chi,
370406
truncation_eps,
371-
projector_method is Projector_Method.FISHMAN,
407+
projector_method is Projector_Method.FISHMAN
408+
or projector_method is Projector_Method.HALF_FISHMAN,
372409
)
373410

374411
projector_T_150_left, projector_T_150_right, smallest_S_150 = _T_workhorse(
375412
T_150_left,
376413
T_150_right,
377414
chi,
378415
truncation_eps,
379-
projector_method is Projector_Method.FISHMAN,
416+
projector_method is Projector_Method.FISHMAN
417+
or projector_method is Projector_Method.HALF_FISHMAN,
380418
)
381419

382420
projector_T_270_left, projector_T_270_right, smallest_S_270 = _T_workhorse(
383421
T_270_left,
384422
T_270_right,
385423
chi,
386424
truncation_eps,
387-
projector_method is Projector_Method.FISHMAN,
425+
projector_method is Projector_Method.FISHMAN
426+
or projector_method is Projector_Method.HALF_FISHMAN,
388427
)
389428

390429
return (
@@ -463,23 +502,26 @@ def calc_T_90_210_330_projectors(
463502
T_90_right,
464503
chi,
465504
truncation_eps,
466-
projector_method is Projector_Method.FISHMAN,
505+
projector_method is Projector_Method.FISHMAN
506+
or projector_method is Projector_Method.HALF_FISHMAN,
467507
)
468508

469509
projector_T_210_left, projector_T_210_right, smallest_S_210 = _T_workhorse(
470510
T_210_left,
471511
T_210_right,
472512
chi,
473513
truncation_eps,
474-
projector_method is Projector_Method.FISHMAN,
514+
projector_method is Projector_Method.FISHMAN
515+
or projector_method is Projector_Method.HALF_FISHMAN,
475516
)
476517

477518
projector_T_330_left, projector_T_330_right, smallest_S_330 = _T_workhorse(
478519
T_330_left,
479520
T_330_right,
480521
chi,
481522
truncation_eps,
482-
projector_method is Projector_Method.FISHMAN,
523+
projector_method is Projector_Method.FISHMAN
524+
or projector_method is Projector_Method.HALF_FISHMAN,
483525
)
484526

485527
return (

0 commit comments

Comments
 (0)