21 h5_size_t grid_dims[3];
24 h5_size_t len_name = 20;
28 h5_prop_t props = H5CreateFileProp ();
30 h5err = H5SetPropFileMPIOCollective (props, &comm);
31 assert (h5err != H5_ERR);
32 h5_file_t file = H5OpenFile (aFilename.c_str(), H5_O_RDONLY, props);
33 assert (file != (h5_file_t)H5_ERR);
36 h5_int64_t last_step = H5GetNumSteps(file) - 1;
37 assert (last_step >= 0);
39 h5err = H5SetStep(file, last_step);
40 assert (h5err != H5_ERR);
42 h5_int64_t num_fields = H5BlockGetNumFields(file);
43 assert (num_fields != H5_ERR);
45 for(h5_ssize_t i = 0; i < num_fields; ++ i) {
47 h5err = H5BlockGetFieldInfo(file, (h5_size_t)i, name, len_name, &grid_rank, grid_dims, &field_dims, &ftype);
48 assert (h5err != H5_ERR);
50 if(strcmp(name,
"Efield") == 0) {
56 h5err = H5Block3dGetFieldSpacing(file,
"Efield", &
hx_m, &
hy_m, &
hz_m);
57 assert (h5err != H5_ERR);
60 assert (h5err != H5_ERR);
70 h5err = H5ReadFileAttribFloat64(file,
"Resonance Frequency(Hz)", &
frequency_m);
71 assert (h5err != H5_ERR);
75 h5err = H5CloseFile(file);
76 assert (h5err != H5_ERR);
93 h5_prop_t props = H5CreateFileProp ();
95 h5err = H5SetPropFileMPIOCollective (props, &comm);
96 assert (h5err != H5_ERR);
97 h5_file_t file = H5OpenFile (
Filename_m.c_str(), H5_O_RDONLY, props);
98 assert (file != (h5_file_t)H5_ERR);
105 int signNz = Nz_diff > 0 ? 1 : -1;
112 h5_int64_t last_step = H5GetNumSteps(file) - 1;
113 assert (last_step >= 0);
114 h5err = H5SetStep(file, last_step);
115 assert (h5err != H5_ERR);
117 for(
int i = 0; i <
abs(Nz_diff); ++ i) {
118 Nz_read_length[i] = Nz_avrg - signNz;
119 Nz_read_start[i] = start;
120 start += Nz_read_length[i];
122 for(
int i =
abs(Nz_diff); i < Nnodes; ++ i) {
123 Nz_read_length[i] = Nz_avrg;
124 Nz_read_start[i] = start;
125 start += Nz_read_length[i];
128 Nz_read_length[i] = 0;
129 Nz_read_start[i] = start;
138 h5err = H5Block3dSetView(file,
142 assert (h5err != H5_ERR);
152 h5err = H5Block3dReadVector3dFieldFloat64(
158 assert (h5err != H5_ERR);
160 h5err = H5Block3dReadVector3dFieldFloat64(
166 assert (h5err != H5_ERR);
168 for(
int i = 0; i < Nnodes; ++ i) {
179 h5err = H5CloseFile(file);
180 assert (h5err != H5_ERR);
182 delete[] Nz_read_start;
183 delete[] Nz_read_length;
219 ERRORMSG(
"Field strength at R " << R <<
" out of field maps" <<
endl);
222 if(index_x < 0 || index_y < 0) {
223 ERRORMSG(
"Field strength at R " << R <<
" out of field maps" <<
endl);
228 E(0) += (1.0 - lever_x) * (1.0 - lever_y) * (1.0 - lever_z) *
FieldstrengthEx_m[index1]
237 E(1) += (1.0 - lever_x) * (1.0 - lever_y) * (1.0 - lever_z) *
FieldstrengthEy_m[index1]
246 E(2) += (1.0 - lever_x) * (1.0 - lever_y) * (1.0 - lever_z) *
FieldstrengthEz_m[index1]
255 B(0) += ((1.0 - lever_x) * (1.0 - lever_y) * (1.0 - lever_z) *
FieldstrengthBx_m[index1]
264 B(1) += ((1.0 - lever_x) * (1.0 - lever_y) * (1.0 - lever_z) *
FieldstrengthBy_m[index1]
273 B(2) += ((1.0 - lever_x) * (1.0 - lever_y) * (1.0 - lever_z) *
FieldstrengthBz_m[index1]
virtual void setFrequency(double freq)
PETE_TUTree< FnAbs, typename T::PETE_Expr_t > abs(const PETE_Expr< T > &l)
constexpr double two_pi
The value of .
std::vector< h5_float64_t > FieldstrengthBz_m
virtual void getFieldDimensions(double &zBegin, double &zEnd, double &rBegin, double &rEnd) const
static std::string typeset_msg(const std::string &msg, const std::string &title)
std::vector< h5_float64_t > FieldstrengthEx_m
virtual double getFrequency() const
virtual void getInfo(Inform *msg)
std::vector< h5_float64_t > FieldstrengthEz_m
virtual bool getFieldstrength(const Vector_t &R, Vector_t &E, Vector_t &B) const
FM3DMagnetoStaticH5Block(std::string aFilename)
constexpr double mu_0
The permeability of vacuum in Vs/Am.
~FM3DMagnetoStaticH5Block()
static MPI_Comm getComm()
std::vector< h5_float64_t > FieldstrengthBy_m
std::vector< h5_float64_t > FieldstrengthEy_m
virtual bool getFieldDerivative(const Vector_t &R, Vector_t &E, Vector_t &B, const DiffDirection &dir) const
std::vector< h5_float64_t > FieldstrengthBx_m
Inform & level3(Inform &inf)
PETE_TUTree< FnFloor, typename T::PETE_Expr_t > floor(const PETE_Expr< T > &l)
Inform & endl(Inform &inf)