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
64
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "cctk.h"
#include "cctk_parameters.h"
#include "cctk_FortranString.h"
#include "StoreNamedData.h"
static pNamedData *LinConfMetricSolverDB;
static pNamedData *LinMetricSolverDB;
void Ell_LinConfMetricRegistry(void (*function), const char *sname) {
StoreNamedData(&LinConfMetricSolverDB,sname,(void*)function);
}
void Ell_LinConfMetricSolver(cGH *GH, int *MetricPsi, int *FieldIndex,
int *MIndex, int *NIndex, int *AbsTol, int *RelTol, const char *sname) {
void (*fn)(cGH *GH,int *MetricPsi, int *FieldIndex,
int *MIndex, int *NIndex, int *AbsTol, int *RelTol);
fn = (void(*))GetNamedData(LinConfMetricSolverDB,sname);
if (!fn) CCTK_WARN(0,"Cannot find solver! ");
fn(GH, MetricPsi, FieldIndex, MIndex, NIndex, AbsTol, RelTol);
}
void FMODIFIER FORTRAN_NAME(Ell_LinConfMetricSolver)
(cGH *GH, int *MetricPsi, int *FieldIndex,
int *MIndex, int *NIndex, int *AbsTol, int *RelTol, ONE_FORTSTRING_ARG) {
ONE_FORTSTRING_CREATE(sname);
Ell_LinConfMetricSolver(GH, MetricPsi, FieldIndex, MIndex, NIndex, AbsTol, RelTol, sname);
free(sname);
}
void Ell_LinMetricRegistry(void (*function), const char *sname) {
StoreNamedData(&LinMetricSolverDB,sname,(void*)function);
}
void Ell_LinMetricSolver(cGH *GH, int *Metric, int *FieldIndex,
int *MIndex, int *NIndex, int *AbsTol, int *RelTol, const char *sname) {
void (*fn)(cGH *GH,int *Metric, int *FieldIndex,
int *MIndex, int *NIndex, int *AbsTol, int *RelTol);
fn = (void(*))GetNamedData(LinMetricSolverDB,sname);
if (!fn) CCTK_WARN(0,"Cannot find solver! ");
fn(GH, Metric, FieldIndex, MIndex, NIndex, AbsTol, RelTol);
}
void FMODIFIER FORTRAN_NAME(Ell_LinMetricSolver)
(cGH *GH, int *Metric, int *FieldIndex,
int *MIndex, int *NIndex, int *AbsTol, int *RelTol, ONE_FORTSTRING_ARG) {
ONE_FORTSTRING_CREATE(sname);
Ell_LinMetricSolver(GH, Metric, FieldIndex, MIndex, NIndex, AbsTol, RelTol, sname);
free(sname);
}
|