~ubuntu-branches/ubuntu/quantal/orpie/quantal

« back to all changes in this revision

Viewing changes to gsl/gsl_vector_complex.ml

  • Committer: Bazaar Package Importer
  • Author(s): Uwe Steinmann
  • Date: 2004-09-20 14:18:45 UTC
  • Revision ID: james.westby@ubuntu.com-20040920141845-j092sbrg4hd0nfsf
Tags: upstream-1.4.1
Import upstream version 1.4.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
(* ocamlgsl - OCaml interface to GSL                        *)
 
2
(* Copyright (�) 2002 - Olivier Andrieu                     *)
 
3
(* distributed under the terms of the GPL version 2         *)
 
4
 
 
5
open Bigarray
 
6
 
 
7
type complex_double_vector_bigarr = 
 
8
    (Complex.t, complex64_elt, c_layout) Bigarray.Array1.t
 
9
 
 
10
type vector = complex_double_vector_bigarr
 
11
 
 
12
let create ?init len = 
 
13
  let barr = Array1.create complex64 c_layout len in
 
14
  begin match init with
 
15
  | None -> ()
 
16
  | Some x -> Array1.fill barr x
 
17
  end ;
 
18
  barr
 
19
 
 
20
let length = Array1.dim
 
21
 
 
22
let of_array arr =
 
23
  Array1.of_array complex64 c_layout arr
 
24
 
 
25
let to_array v =
 
26
  Array.init (Array1.dim v) (Array1.get v)
 
27
 
 
28
let of_complex_array arr = 
 
29
  let n = (Array.length arr) / 2 in
 
30
  let barr = create n in
 
31
  for i=0 to pred n do
 
32
    barr.{i} <- Gsl_complex.get arr i
 
33
  done ;
 
34
  barr
 
35
 
 
36
let to_complex_array barr =
 
37
  let n = Array1.dim barr in
 
38
  let arr = Array.create (2*n) 0. in
 
39
  for i=0 to pred n do
 
40
    Gsl_complex.set arr i barr.{i}
 
41
  done ;
 
42
  arr
 
43
 
 
44
let get (v : vector) i = Array1.get v i
 
45
 
 
46
let set (v : vector) i x = Array1.set v i x
 
47
 
 
48
let set_all = Array1.fill 
 
49
 
 
50
let set_zero v = 
 
51
  set_all v Complex.zero
 
52
 
 
53
let set_basis v i = 
 
54
  set_zero v ;
 
55
  set v i Complex.one
 
56
 
 
57
let subvector v ~off ~len =
 
58
  Array1.sub v off len
 
59
 
 
60
let memcpy ~src:v ~dst:w = 
 
61
  if length v <> length w
 
62
  then invalid_arg "Gsl_vector.memcpy" ;
 
63
  Array1.blit v w
 
64
 
 
65
let copy v = 
 
66
  let w = create (length v) in
 
67
  memcpy v w ;
 
68
  w
 
69
 
 
70
let swap_element v i j =
 
71
  let d  = get v i in
 
72
  let d' = get v j in
 
73
  set v j d ;
 
74
  set v i d'
 
75
 
 
76
let reverse v = 
 
77
  let len = length v in
 
78
  for i=0 to pred (len/2) do
 
79
    swap_element v i (pred len - i)
 
80
  done
 
81
 
 
82
 
 
83
 
 
84
 
 
85
module Single =
 
86
  struct
 
87
  
 
88
  type complex_float_vector_bigarr = 
 
89
      (Complex.t, complex32_elt, c_layout) Bigarray.Array1.t
 
90
 
 
91
  type vector = complex_float_vector_bigarr
 
92
        
 
93
  let create ?init len = 
 
94
    let barr = Array1.create complex32 c_layout len in
 
95
    begin match init with
 
96
    | None -> ()
 
97
    | Some x -> Array1.fill barr x
 
98
    end ;
 
99
    barr
 
100
      
 
101
  let length = length
 
102
      
 
103
  let of_array arr =
 
104
    Array1.of_array complex32 c_layout arr
 
105
 
 
106
  let to_array = to_array
 
107
 
 
108
  let of_complex_array arr = 
 
109
    let n = (Array.length arr) / 2 in
 
110
    let barr = create n in
 
111
    for i=0 to pred n do
 
112
      barr.{i} <- Gsl_complex.get arr i
 
113
    done ;
 
114
    barr
 
115
 
 
116
  let to_complex_array barr =
 
117
    let n = Array1.dim barr in
 
118
    let arr = Array.create (2*n) 0. in
 
119
    for i=0 to pred n do
 
120
      Gsl_complex.set arr i barr.{i}
 
121
    done ;
 
122
    arr
 
123
 
 
124
  let get (v : vector) i = Array1.get v i
 
125
 
 
126
  let set (v : vector) i x = Array1.set v i x
 
127
 
 
128
  let set_all = set_all
 
129
 
 
130
  let set_zero = set_zero
 
131
 
 
132
  let set_basis v i = 
 
133
    set_zero v ;
 
134
    set v i Complex.one
 
135
 
 
136
  let subvector = subvector
 
137
 
 
138
  let memcpy = memcpy
 
139
 
 
140
  let copy v = 
 
141
    let w = create (length v) in
 
142
    memcpy v w ;
 
143
    w
 
144
      
 
145
  let swap_element v i j =
 
146
    let d  = get v i in
 
147
    let d' = get v j in
 
148
    set v j d ;
 
149
    set v i d'
 
150
 
 
151
  let reverse v = 
 
152
    let len = length v in
 
153
    for i=0 to pred (len/2) do
 
154
      swap_element v i (pred len - i)
 
155
    done
 
156
  end