Commit fa6645b6 authored by Thorsten Ohl's avatar Thorsten Ohl
Browse files

UFO: failed to factor Rep

parent e336fbc3
Pipeline #19 skipped
......@@ -92,34 +92,36 @@ module Index : Index =
end
module type Rep =
sig
type t
val to_string : t -> string
val of_int : int -> t
val conjugate : t -> t
end
module type Atomic_Tensor =
sig
type t
val of_expr : string -> UFOx_syntax.expr list -> t
val to_string : t -> string
type r
val classify_indices : t list -> (int * r) list
val rep_to_string : r -> string
val rep_of_int : int -> r
val rep_conjugate : r -> r
module Rep : Rep
val classify_indices : t list -> (int * Rep.t) list
end
module type Tensor =
sig
type tensor
type t
type t = (tensor list * Q.t) list
val of_expr : UFOx_syntax.expr -> t
val of_string : string -> t
val to_string : t -> string
type r
val classify_indices : t -> (int * r) list
val rep_to_string : r -> string
val rep_of_int : int -> r
val rep_conjugate : r -> r
module Rep : Rep
val classify_indices : t list -> (int * Rep.t) list
end
module Tensor (A : Atomic_Tensor) : Tensor
with type tensor = A.t and type r = A.r =
with type tensor = A.t and type Rep.t = A.Rep.t =
struct
module S = UFOx_syntax
......@@ -169,10 +171,7 @@ module Tensor (A : Atomic_Tensor) : Tensor
| _ -> failwith "UFOx.Tensor.of_expr: power of tensor"
end
type r = A.r
let rep_to_string = A.rep_to_string
let rep_of_int = A.rep_of_int
let rep_conjugate = A.rep_conjugate
module Rep = A.Rep
let classify_indices' filter tensors =
ThoList.uniq
......@@ -310,43 +309,47 @@ module Atomic_Lorentz =
| name, _ ->
invalid_arg ("UFOx.Lorentz.of_expr: invalid tensor '" ^ name ^ "'")
type r = S | V | Sp | CSp | Ghost
let rep_to_string = function
| S -> "0"
| V -> "1"
| Sp -> "1/2"
| CSp-> "1/2bar"
| Ghost -> "Ghost"
let rep_of_int = function
| -1 -> Ghost
| 1 -> S
| 2 -> Sp
| 3 -> V
| _ -> invalid_arg "UFOx.Lorentz: impossible representation!"
let rep_conjugate = function
| S -> S
| V -> V
| Sp -> CSp (* ??? *)
| CSp -> Sp (* ??? *)
| Ghost -> Ghost
let classify_indices1 = function
| C (i, j) -> [(i, CSp); (j, Sp)] (* ??? *)
| Gamma5 (i, j) | Identity (i, j)
| ProjP (i, j) | ProjM (i, j) -> [(i, CSp); (j, Sp)]
| Epsilon (mu, nu, ka, la) -> [(mu, V); (nu, V); (ka, V); (la, V)]
| Gamma (mu, i, j) -> [(mu, V); (i, CSp); (j, Sp)]
| Metric (mu, nu) -> [(mu, V); (nu, V)]
| P (mu, n) -> [(mu, V)]
| Sigma (mu, nu, i, j) -> [(mu, V); (nu, V); (i, CSp); (j, Sp)]
module Rep =
struct
type t = S | V | Sp | CSp | Ghost
let to_string = function
| S -> "0"
| V -> "1"
| Sp -> "1/2"
| CSp-> "1/2bar"
| Ghost -> "Ghost"
let of_int = function
| -1 -> Ghost
| 1 -> S
| 2 -> Sp
| 3 -> V
| _ -> invalid_arg "UFOx.Lorentz: impossible representation!"
let conjugate = function
| S -> S
| V -> V
| Sp -> CSp (* ??? *)
| CSp -> Sp (* ??? *)
| Ghost -> Ghost
let classify_indices = function
| C (i, j) -> [(i, CSp); (j, Sp)] (* ??? *)
| Gamma5 (i, j) | Identity (i, j)
| ProjP (i, j) | ProjM (i, j) -> [(i, CSp); (j, Sp)]
| Epsilon (mu, nu, ka, la) -> [(mu, V); (nu, V); (ka, V); (la, V)]
| Gamma (mu, i, j) -> [(mu, V); (i, CSp); (j, Sp)]
| Metric (mu, nu) -> [(mu, V); (nu, V)]
| P (mu, n) -> [(mu, V)]
| Sigma (mu, nu, i, j) -> [(mu, V); (nu, V); (i, CSp); (j, Sp)]
end
let classify_indices tensors =
List.sort compare
(List.fold_right
(fun v acc -> classify_indices1 v @ acc)
(fun v acc -> Rep.classify_indices v @ acc)
tensors [])
end
......@@ -414,48 +417,53 @@ module Atomic_Color =
| K6 (i', j, k) -> Printf.sprintf "K6(%d,%d,%d)" i' j k
| K6Bar (i', j, k) -> Printf.sprintf "K6Bar(%d,%d,%d)" i' j k
type r = S | Sbar | F | C | A
let rep_to_string = function
| S -> "1"
| Sbar -> "1bar"
| F -> "3"
| C -> "3bar"
| A-> "8"
let rep_of_int = function
| 1 -> S
| -1 -> Sbar (* UFO appears to use this for colorless antiparticles!. *)
| 3 -> F
| -3 -> C
| 8 -> A
| 6 | -6 -> failwith "UFOx.Color: sextets not supported yet!"
| _ -> invalid_arg "UFOx.Color: impossible representation!"
module Rep =
struct
type t = S | Sbar | F | C | A
let to_string = function
| S -> "1"
| Sbar -> "1bar"
| F -> "3"
| C -> "3bar"
| A-> "8"
let of_int = function
| 1 -> S
(* UFO appears to use this for colorless antiparticles!. *)
| -1 -> Sbar
| 3 -> F
| -3 -> C
| 8 -> A
| 6 | -6 -> failwith "UFOx.Color: sextets not supported yet!"
| _ -> invalid_arg "UFOx.Color: impossible representation!"
let rep_conjugate = function
| Sbar -> S
| S -> Sbar
| C -> F
| F -> C
| A -> A
let classify_indices1 = function
| Identity (i, j) -> [(i, F); (j, C)]
| T (a, i, j) -> [(i, F); (j, C); (a, A)]
| F (a, b, c) | D (a, b, c) -> [(a, A); (b, A); (c, A)]
| Epsilon (i, j, k) -> [(i, F); (j, F); (k, F)]
| EpsilonBar (i, j, k) -> [(i, C); (j, C); (k, C)]
| T6 (a, i', j') ->
failwith "UFOx.Color: sextets not supported yet!"
| K6 (i', j, k) ->
failwith "UFOx.Color: sextets not supported yet!"
| K6Bar (i', j, k) ->
failwith "UFOx.Color: sextets not supported yet!"
let conjugate = function
| Sbar -> S
| S -> Sbar
| C -> F
| F -> C
| A -> A
let classify_indices = function
| Identity (i, j) -> [(i, F); (j, C)]
| T (a, i, j) -> [(i, F); (j, C); (a, A)]
| F (a, b, c) | D (a, b, c) -> [(a, A); (b, A); (c, A)]
| Epsilon (i, j, k) -> [(i, F); (j, F); (k, F)]
| EpsilonBar (i, j, k) -> [(i, C); (j, C); (k, C)]
| T6 (a, i', j') ->
failwith "UFOx.Color: sextets not supported yet!"
| K6 (i', j, k) ->
failwith "UFOx.Color: sextets not supported yet!"
| K6Bar (i', j, k) ->
failwith "UFOx.Color: sextets not supported yet!"
end
let classify_indices tensors =
List.sort compare
(List.fold_right
(fun v acc -> classify_indices1 v @ acc)
(fun v acc -> Rep.classify_indices v @ acc)
tensors [])
end
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment