Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unify capstone tests and add volume tests #408

Merged
merged 1 commit into from
Dec 18, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 77 additions & 1 deletion capstone_clis/capStoneSizeFields.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@

#include <lionPrint.h>
#include <ma.h>

// analytic size field classes //
class UniformAniso : public ma::AnisotropicFunction
Expand Down Expand Up @@ -104,6 +105,81 @@ class Shock : public ma::AnisotropicFunction
ma::Mesh* mesh;
};

// Shock along a cylinder like the one in
// https://www.scorec.rpi.edu/~cwsmith/SCOREC//SimModSuite_2023.1-230428dev/MeshSimAdapt/group__MSAEx__GenAnisoMesh.html
class CylBoundaryLayer : public ma::AnisotropicFunction {
ma::Mesh* m;
enum Axis : int {X = 0, Y = 1, Z = 2} axis;
double radius, length;

public:
CylBoundaryLayer(ma::Mesh* mesh): m(mesh) {
ma::Vector bmin(HUGE_VAL, HUGE_VAL, HUGE_VAL),
bmax(-HUGE_VAL, -HUGE_VAL, -HUGE_VAL);
ma::Iterator *it = m->begin(0);
ma::Entity *e;
while ((e = m->iterate(it))) {
ma::Vector p = ma::getPosition(m, e);

if (p.x() < bmin.x()) bmin.x() = p.x();
if (p.x() > bmax.x()) bmax.x() = p.x();
if (p.y() < bmin.y()) bmin.y() = p.y();
if (p.y() > bmax.y()) bmax.y() = p.y();
if (p.z() < bmin.z()) bmin.z() = p.z();
if (p.z() > bmax.z()) bmax.z() = p.z();
}
m->end(it);

ma::Vector len = bmax - bmin;
if (len.x() > len.y() && len.x() > len.z()) {
lion_oprint(1, "Shock2 along X axis.\n");
length = len.x();
axis = Axis::X;
// Radial lengths should be the same, but we find average diameter and
// then halve that.
radius = (len.y() / 2 + len.z() / 2) / 2;
} else if (len.y() > len.x() && len.y() > len.z()) {
lion_oprint(1, "Shock2 along Y axis.\n");
length = len.y();
axis = Axis::Y;
radius = (len.x() / 2 + len.z() / 2) / 2;
} else {
lion_oprint(1, "Shock2 along Z axis.\n");
length = len.z();
axis = Axis::Z;
radius = (len.x() / 2 + len.y() / 2) / 2;
}
}

void getValue(ma::Entity *v, ma::Matrix &R, ma::Vector &H) {
const double M = 2.5, aspect_ratio = 16;
ma::Vector p = ma::getPosition(m, v);
H = ma::Vector(1, 1, 1) * radius / M;
R[axis] = ma::Vector(0, 0, 0);
R[axis][axis] = 1;

int cosDirs[] = {1, 2, 0}, sinDirs[] = {2, 0, 1}; // Rotated sin/cos axes
int cosDir = cosDirs[axis], sinDir = sinDirs[axis];

double distFromAxis = std::sqrt(p[cosDir] * p[cosDir] + p[sinDir] * p[sinDir]);

if (std::fabs(radius * radius - p[cosDir] * p[cosDir] -
p[sinDir] * p[sinDir]) < radius*radius / 4) {
H[cosDir] /= aspect_ratio;
}

double cosT = p[cosDir] / distFromAxis;
double sinT = p[sinDir] / distFromAxis;
R[cosDir][cosDir] = cosT; R[cosDir][sinDir] = -sinT; R[cosDir][axis] = 0;
R[sinDir][cosDir] = sinT; R[sinDir][sinDir] = cosT; R[sinDir][axis] = 0;

// Normalize R rows. Skip axis which is already normal.
for (int i = 0; i < 3; ++i) {
if (i != axis) R[i] = R[i].normalize();
}
}
};

class Uniform : public ma::IsotropicFunction
{
public:
Expand Down
11 changes: 2 additions & 9 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -210,15 +210,8 @@ if(ENABLE_SIMMETRIX)
endif()

if(ENABLE_CAPSTONE)
test_exe_func(capCyl capCyl.cc)
target_link_libraries(capCyl apf_cap)
target_include_directories(capCyl PUBLIC "${PROJECT_SOURCE_DIR}/capstone_clis")
test_exe_func(capWing capWing.cc)
target_link_libraries(capWing apf_cap)
target_include_directories(capWing PUBLIC "${PROJECT_SOURCE_DIR}/capstone_clis")
test_exe_func(capCube capCube.cc)
target_link_libraries(capCube apf_cap)
target_include_directories(capCube PUBLIC "${PROJECT_SOURCE_DIR}/capstone_clis")
util_exe_func(capVol capVol.cc)
target_include_directories(capVol PUBLIC "${PROJECT_SOURCE_DIR}/capstone_clis")
endif()

# send all the newly added utility executable targets
Expand Down
166 changes: 0 additions & 166 deletions test/capCube.cc

This file was deleted.

Loading
Loading