# Initialise Valence Bond Product State as Initial State

**URL:** <https://itensor.discourse.group/t/initialise-valence-bond-product-state-as-initial-state/1648>\
**Category:** ITensor Julia Questions\
**Tags:** julia, mps\
**Created:** [April 20, 2024, 12:07am UTC](https://itensor.discourse.group/t/initialise-valence-bond-product-state-as-initial-state/1648 "2024-04-20T00:07:38Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Brian-Khor](https://yyz2.discourse-cdn.com/free1/user_avatar/itensor.discourse.group/brian-khor/32/297_2.png) [@Brian-Khor](https://itensor.discourse.group/u/Brian-Khor)\
**Post date:** [April 20, 2024, 12:07am UTC](https://itensor.discourse.group/t/initialise-valence-bond-product-state-as-initial-state/1648/1 "2024-04-20T00:07:38Z")

</div>

Hi,

How do I initialise a product of valence bond states in MPS (in Julia iTensor language), say

| \psi\rangle = \left( \frac{1}{2} (| \uparrow\_1 \downarrow\_2 \rangle - | \downarrow\_1 \uparrow\_2 \rangle) \right) \otimes \left( \frac{1}{2} (| \uparrow\_3 \downarrow\_4 \rangle - | \downarrow\_3 \uparrow\_4 \rangle) \right) \otimes \dots \otimes \left( \frac{1}{2} (| \uparrow\_{2L-1} \downarrow\_{2L} \rangle - | \downarrow\_{2L-1} \uparrow\_{2L} \rangle) \right)

for a spin chain of length 2L?

Best,  
Brian.

---

<div class="post-metadata">

**Author:** ![miles](https://yyz2.discourse-cdn.com/free1/user_avatar/itensor.discourse.group/miles/32/6_2.png) [@miles](https://itensor.discourse.group/u/miles)\
**Post date:** [April 20, 2024, 1:45am UTC](https://itensor.discourse.group/t/initialise-valence-bond-product-state-as-initial-state/1648/2 "2024-04-20T01:45:01Z")

</div>

One convenient way to do this is to use DMRG:

```julia
using ITensors

let
  N = 10
  s = siteinds("S=1/2",N)

  hterms = OpSum()
  for j=1:2:N
    hterms += "Sz",j,"Sz",j+1
    hterms += 1/2,"S+",j,"S-",j+1
    hterms += 1/2,"S-",j,"S+",j+1
  end
  H = MPO(hterms,s)

  energy, psi = dmrg(H,randomMPS(s); nsweeps=2, maxdim=2)

  @show inner(psi',H,psi)
  @show (3/4)*(N÷2)

  return
end

```

Another way would be to explicitly make each singlet state as a two-site tensor (for each bond), then use singular value decompositions (SVD) to split the tensors into an MPS.
