Ian Jauslin
summaryrefslogtreecommitdiff
blob: 4db9bf34afcc38005ef31f98e810149f88624845 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
Copyright 2016 Ian Jauslin

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

/*
  integrals required for the computation
*/

#ifndef HH_INTEGRAL_H
#define HH_INTEGRAL_H

#include "types.h"
#include <libinum.h>
#include <mpfr.h>

// extra arguments for the integration over theta (includes the integration options)
typedef struct hh_argsint1 {
  array_mpfr abcissa;
  array_mpfr weights;
  hh_params params;
} hh_argsint1;

// extra arguments for integration over rho (includes theta)
typedef struct hh_argsint2 {
  mpfr_ptr theta;
  hh_params params;
} hh_argsint2;

// the integral
int hh_integrate(mpfr_t* out, hh_params params, array_mpfr abcissa, array_mpfr weights);
// integrand of the first integration
int hh_integrand1(mpfr_t* out, mpfr_t theta, void* args);
// integrand of the second integration
int hh_integrand2(mpfr_t* out, mpfr_t rho, void* args);

// derivative of the integral
int hh_d_integrate(mpfr_t* out, hh_params params, array_mpfr abcissa, array_mpfr weights);
// integrand of the first integration
int hh_d_integrand1(mpfr_t* out, mpfr_t k1, void* args);
// integrand of the second integration
int hh_d_integrand2(mpfr_t* out, mpfr_t k2, void* args);

// functions
// Omega^2 and alpha_2
int hh_Omega2_alpha2(mpfr_t Omega2, mpfr_t alpha2, mpfr_t rho, mpfr_t theta, mpfr_t tmp1, mpfr_t tmp2);
// m
int hh_m(mpfr_t out, mpfr_t W, mpfr_t t2, mpfr_t sinphi, mpfr_t alpha2);
// xi^2
int hh_xi2(mpfr_t out, mpfr_t Omega2, mpfr_t m, mpfr_t t1, mpfr_t tmp);

#endif