Writing a time-dependent metric tensor field on a uniform grid.
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <hdf5.h>
#include <F5/F5X.h>
#include <F5/F5uniform.h>
int main(int argc, char*argv[])
{
double time = 0.0;
hid_t file_id;
hsize_t dims[3] = {10,20,30};
unlink("metric.f5");
origin.
x = -1; origin.
y = -1; origin.
z = -1;
delta .
x = 2.0/(int)dims[0]; delta .
y = 2.0/(int)dims[1]; delta .
z = 2.0/(int)dims[2];
for(time=0.0; time<10; time+=0.5)
{
int i,j,k;
double M = (10 - time)/10;
for(k=0; k<dims[2]; k++)
for(j=0; j<dims[1]; j++)
for(i=0; i<dims[0]; i++)
{
float x, y, z, r, psi;
x = origin.x + i * delta.x;
y = origin.y + j * delta.y;
z = origin.z + k * delta.z;
r = sqrt(x*x+y*y+z*z);
psi = 1 + M / (2*r);
psi *= psi;
psi *= psi;
g++;
}
"schwarzschild",
&origin, &delta,
dims,
"metric",
m, 0, F5P_DEFAULT);
}
H5Fclose(file_id);
return 0;
}
void F5close(F5Path *f)
Definition: F5B.c:186
hid_t F5append(const char *filename)
Definition: F5X.c:225
F5Path * F5Fwrite_uniform_cartesian3D(hid_t file_id, double time, const char *gridname, const F5_vec3_point_t *origin, const F5_vec3_float_t *spacing, hsize_t dims[3], const char *fieldname, hid_t fieldtype, const void *dataPtr, const char *coordinate_system, hid_t prop_id)
Definition: F5uniform.c:271
Definition: F5coordinates.h:83
#define F5T_METRIC33_FLOAT
Definition: F5coordinates.h:110
Definition: F5coordinates.h:58
Definition: F5coordinates.h:57