static char help[] =
"...\n\n";
int main(
int argc,
char *argv[]) {
try {
int rank;
MPI_Comm_rank(PETSC_COMM_WORLD, &rank);
PetscBool flg = PETSC_TRUE;
#if PETSC_VERSION_GE(3, 6, 4)
255, &flg);
#else
#endif
if (flg != PETSC_TRUE) {
SETERRQ(PETSC_COMM_SELF, 1, "*** ERROR -my_file (MESH FILE NEEDED)");
}
#if PETSC_VERSION_GE(3, 6, 4)
#else
PETSC_NULL);
#endif
const char *option;
option = "";
MB_TAG_DENSE);
MB_TAG_DENSE);
MB_TAG_DENSE);
auto check_axpy = [&]() {
CHKERR fb->setField(+1, MBVERTEX,
"FIELD_A");
CHKERR fb->setField(-2, MBVERTEX,
"FIELD_B");
CHKERR fb->fieldAxpy(+0.5,
"FIELD_B",
"FIELD_A");
CHKERR fb->fieldScale(-0.5,
"FIELD_B");
for (auto dit : *dofs_ptr) {
auto check = [&](const std::string name, const double expected) {
if (dit->getName() == name) {
cout << name << " " << dit->getFieldData() << " " << expected
<< endl;
if (dit->getFieldData() != expected)
"Wrong DOF value 0 != %4.3e for %s", dit->getFieldData(),
boost::lexical_cast<std::string>(*dit).c_str());
}
};
}
};
auto check_set_vertex = [&]() {
auto set_distance = [&](
VectorAdaptor &&field_data,
double *xcoord,
double *ycoord, double *zcoord) {
xcoord, ycoord, zcoord);
field_data[0] = sqrt(t_coord(
i) * t_coord(
i));
};
CHKERR fb->setVertexDofs(set_distance,
"FIELD_A");
if (entPtr->getEntType() == MBVERTEX) {
CHKERR moab.get_coords(&
v, 1, &coords[0]);
if (std::abs(entPtr->getEntFieldData()[0] - norm_2(coords)) >
std::numeric_limits<double>::epsilon())
"Wrong vals %3.4e != %3.4e",
entPtr->getEntFieldData()[0], norm_2(coords));
}
}
private:
};
TestMethod method(moab);
};
auto check_lambda = [&]() {
if (it->getMeshsetId() != 1)
continue;
CHKERR it->getMeshsetIdEntitiesByType(m_field.
get_moab(), MBTRI, ents,
true);
meshset_ents.merge(nodes);
}
CHKERR fb->setField(+1, MBVERTEX,
"FIELD_A");
CHKERR fb->setField(-1, MBVERTEX,
"FIELD_B");
CHKERR fb->setField(1.5, MBVERTEX,
"FIELD_C");
auto field_axpy = [&](const double val_y, const double val_x) {
return 0.5 * val_x + val_y;
};
auto field_scale = [&](const double val) { return -0.5 * val; };
auto vector_times_scalar_field =
[&](boost::shared_ptr<FieldEntity> ent_ptr_y,
boost::shared_ptr<FieldEntity> ent_ptr_x) {
auto x_data = ent_ptr_x->getEntFieldData();
auto y_data = ent_ptr_y->getEntFieldData();
const auto size_y = y_data.size();
for (
size_t dd = 0;
dd != size_y; ++
dd)
};
CHKERR fb->fieldLambdaOnValues(field_axpy,
"FIELD_B",
"FIELD_A",
true);
CHKERR fb->fieldLambdaOnValues(field_scale,
"FIELD_B", &meshset_ents);
CHKERR fb->fieldLambdaOnEntities(vector_times_scalar_field,
"FIELD_C",
"FIELD_B", true, &meshset_ents);
constexpr
double eps = std::numeric_limits<double>::epsilon();
for (auto dit : *dofs_ptr) {
auto check = [&](const std::string name, const double expected) {
if (dit->getName() == name && dit->getEntType() == MBVERTEX) {
cout << name << " " << dit->getFieldData() << " " << expected
<< endl;
if (abs(dit->getFieldData() - expected) >
eps)
"Wrong DOF value %4.3e != %4.3e for %s",
dit->getFieldData(), expected,
boost::lexical_cast<std::string>(*dit).c_str());
}
};
if (meshset_ents.find(dit->getEnt()) != meshset_ents.end()) {
CHKERR check(
"FIELD_B", 0.75);
}
}
};
}
return 0;
}