Skip to content
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
4 changes: 4 additions & 0 deletions src/Cgismo.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@
// gsModelling
#include <gsCInterface/gsCFitting.h>

// gsUtils
#include <gsCInterface/gsCQuasiInterpolate.h>
#include <gsCInterface/gsCL2Projection.h>

@gsOptional_includes@

//
Expand Down
295 changes: 230 additions & 65 deletions src/gsCBasis.cpp

Large diffs are not rendered by default.

24 changes: 23 additions & 1 deletion src/gsCBasis.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ extern "C"
{
#endif

#include<stdbool.h>

GISMO_EXPORT gsCBasis * gsBasis_read(char* filename);
GISMO_EXPORT void gsBasis_write(gsCBasis * obj, char* filename);

# define gsBasis_print gsFunctionSet_print
# define gsBasis_delete gsFunctionSet_delete

Expand All @@ -26,6 +31,8 @@ extern "C"
//
// Methods, gsBasis
//
GISMO_EXPORT gsCBasis* gsBasis_clone(gsCBasis * b);

GISMO_EXPORT void gsBasis_active_into(gsCBasis * b, gsCMatrix * u, gsCMatrixInt * result);

GISMO_EXPORT void gsBasis_evalSingle_into(gsCBasis * b, int i, gsCMatrix * u, gsCMatrix * result);
Expand All @@ -38,11 +45,26 @@ extern "C"
GISMO_EXPORT int gsBasis_dim(gsCBasis * b);
GISMO_EXPORT int gsBasis_size(gsCBasis * b);
GISMO_EXPORT gsCMatrix* gsBasis_support(gsCBasis * b, int i);

GISMO_EXPORT void gsBasis_uniformRefine(gsCBasis * b, int numKnots, int mul, int dir);
GISMO_EXPORT void gsBasis_refineElements(gsCBasis * b, int * boxData, int boxSize);
GISMO_EXPORT void gsBasis_refine(gsCBasis * b, gsCMatrix * boxes, int refExt);

GISMO_EXPORT void gsBasis_degreeElevate(gsCBasis * b, int i, int dir);

GISMO_EXPORT void gsBasis_boundary_into(gsCBasis * b, int side, gsCMatrixInt * result);
GISMO_EXPORT void gsBasis_boundaryOffset_into(gsCBasis * b, int side, int offset, gsCMatrixInt * result);

GISMO_EXPORT void gsBasis_elements_into(gsCBasis * b, gsCMatrix*);
GISMO_EXPORT void gsBasis_elementsBdr_into(gsCBasis * b, int, gsCMatrix*);

GISMO_EXPORT void gsHTensorBasis_elements_into(gsCBasis * b, bool getKnotBoxes,
bool getIndexBoxes,
bool getLevels,
gsCMatrix* knotBoxes,
gsCMatrixInt* indexBoxes,
gsCVectorInt* levels);

// TODO:
// - DegreeElevate

Expand Down
20 changes: 11 additions & 9 deletions src/gsCBoundaryConditions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@ extern "C"
{
#endif

using namespace gismo;

GISMO_EXPORT gsCBoundaryConditions * gsBoundaryConditions_create()
{
return RICAST_CBC(new gismo::gsBoundaryConditions<double>());
return RICAST_CBC(new gsBoundaryConditions<double>());
}

GISMO_EXPORT void gsBoundaryConditions_addCondition(gsCBoundaryConditions * bc,
Expand All @@ -19,18 +21,18 @@ GISMO_EXPORT void gsBoundaryConditions_addCondition(gsCBoundaryConditions * bc,
int ctype,
gsCFunctionSet * fun,
int unknown,
int component,
bool parametric)
bool parametric,
int component)
{
gismo::boxSide bside(side);
gismo::gsFunctionSet<double> * f_ptr = RICAST_F(fun);
boxSide bside(side);
gsFunctionSet<double> * f_ptr = RICAST_F(fun);
RICAST_BC(bc)->addCondition(patch,
bside,
(gismo::condition_type::type)ctype,
(condition_type::type)ctype,
f_ptr,
unknown,
component,
parametric);
parametric,
component);
Comment thread
hverhelst marked this conversation as resolved.
}

GISMO_EXPORT void gsBoundaryConditions_addCornerValue(gsCBoundaryConditions * bc,
Expand All @@ -40,7 +42,7 @@ GISMO_EXPORT void gsBoundaryConditions_addCornerValue(gsCBoundaryConditions * bc
int unknown,
int component)
{
gismo::boxCorner bcorner(corner);
boxCorner bcorner(corner);
RICAST_BC(bc)->addCornerValue(bcorner, value, patch, unknown, component);
}

Expand Down
22 changes: 12 additions & 10 deletions src/gsCFitting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,58 +9,60 @@ extern "C"
{
#endif

using namespace gismo;

GISMO_EXPORT gsCFitting * gsFitting_create(gsCMatrix * param_values, gsCMatrix * points, gsCBasis * basis)
{
auto * param_values_ptr = RICAST_M(param_values);
auto * points_ptr = RICAST_M(points);
auto * basis_ptr = RICAST_B(basis);
return reinterpret_cast<gsCFitting*>(new gismo::gsFitting<double>(*param_values_ptr, *points_ptr, *basis_ptr));
return reinterpret_cast<gsCFitting*>(new gsFitting<double>(*param_values_ptr, *points_ptr, *basis_ptr));
}

GISMO_EXPORT void gsFitting_delete(gsCFitting * fitter)
{
delete reinterpret_cast<gismo::gsFitting<double>*>(fitter);
delete reinterpret_cast<gsFitting<double>*>(fitter);
}

GISMO_EXPORT void gsFitting_compute(gsCFitting * fitter, double lambda)
{
reinterpret_cast<gismo::gsFitting<double>*>(fitter)->compute(lambda);
reinterpret_cast<gsFitting<double>*>(fitter)->compute(lambda);
}

GISMO_EXPORT void gsFitting_parameterCorrection(gsCFitting * fitter, double accuracy, int maxIter, double tolOrth)
{
reinterpret_cast<gismo::gsFitting<double>*>(fitter)->parameterCorrection(accuracy, maxIter, tolOrth);
reinterpret_cast<gsFitting<double>*>(fitter)->parameterCorrection(accuracy, maxIter, tolOrth);
}

GISMO_EXPORT void gsFitting_computeErrors(gsCFitting * fitter)
{
reinterpret_cast<gismo::gsFitting<double>*>(fitter)->computeErrors();
reinterpret_cast<gsFitting<double>*>(fitter)->computeErrors();
}

GISMO_EXPORT double gsFitting_minPointError(gsCFitting * fitter)
{
return reinterpret_cast<gismo::gsFitting<double>*>(fitter)->minPointError();
return reinterpret_cast<gsFitting<double>*>(fitter)->minPointError();
}

GISMO_EXPORT double gsFitting_maxPointError(gsCFitting * fitter)
{
return reinterpret_cast<gismo::gsFitting<double>*>(fitter)->maxPointError();
return reinterpret_cast<gsFitting<double>*>(fitter)->maxPointError();
}

GISMO_EXPORT double* gsFitting_pointWiseErrors(gsCFitting * fitter)
{
const double * errors = reinterpret_cast< const double* >(reinterpret_cast<gismo::gsFitting<double>*>(fitter)->pointWiseErrors().data());
const double * errors = reinterpret_cast< const double* >(reinterpret_cast<gsFitting<double>*>(fitter)->pointWiseErrors().data());
return const_cast<double *>(errors);
}

GISMO_EXPORT int gsFitting_numPointsBelow(gsCFitting * fitter, double threshold)
{
return reinterpret_cast<gismo::gsFitting<double>*>(fitter)->numPointsBelow(threshold);
return reinterpret_cast<gsFitting<double>*>(fitter)->numPointsBelow(threshold);
}

GISMO_EXPORT gsCGeometry* gsFitting_result(gsCFitting * fitter)
{
auto * result = reinterpret_cast<gismo::gsFitting<double>*>(fitter)->result();
auto * result = reinterpret_cast<gsFitting<double>*>(fitter)->result();
return RICAST_CG(result->clone().release());
}

Expand Down
76 changes: 39 additions & 37 deletions src/gsCFunctionExpr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,70 +3,72 @@
#include <gsCInterface/gsCMemory.h>
#include <gsCInterface/gsMacros.h>

using namespace gismo;

#ifdef __cplusplus
extern "C"
{
#endif

GISMO_EXPORT gsCFunctionExpr * gsFunctionExpr1_create(const char * expression_string,
GISMO_EXPORT gsCFunctionExpr * gsFunctionExpr1_create(const char * expression_string,
short_t ddim)
{
return RICAST_CF(new gismo::gsFunctionExpr<double>(expression_string,
return RICAST_CF(new gsFunctionExpr<double>(expression_string,
ddim));
}

GISMO_EXPORT gsCFunctionExpr * gsFunctionExpr2_create(const char * expression_string1,
const char * expression_string2,
GISMO_EXPORT gsCFunctionExpr * gsFunctionExpr2_create(const char * expression_string1,
const char * expression_string2,
short_t ddim)
{
return RICAST_CF(new gismo::gsFunctionExpr<double>(expression_string1,
return RICAST_CF(new gsFunctionExpr<double>(expression_string1,
expression_string2, ddim));
}

GISMO_EXPORT gsCFunctionExpr * gsFunctionExpr3_create(const char * expression_string1,
const char * expression_string2,
const char * expression_string3,
GISMO_EXPORT gsCFunctionExpr * gsFunctionExpr3_create(const char * expression_string1,
const char * expression_string2,
const char * expression_string3,
short_t ddim)
{
return RICAST_CF(new gismo::gsFunctionExpr<double>(expression_string1,
expression_string2,
expression_string3,
return RICAST_CF(new gsFunctionExpr<double>(expression_string1,
expression_string2,
expression_string3,
ddim));
}

GISMO_EXPORT gsCFunctionExpr * gsFunctionExpr4_create(const char * expression_string1,
const char * expression_string2,
const char * expression_string3,
const char * expression_string4,
GISMO_EXPORT gsCFunctionExpr * gsFunctionExpr4_create(const char * expression_string1,
const char * expression_string2,
const char * expression_string3,
const char * expression_string4,
short_t ddim)
{
return RICAST_CF(new gismo::gsFunctionExpr<double>(expression_string1,
expression_string2,
expression_string3,
expression_string4,
return RICAST_CF(new gsFunctionExpr<double>(expression_string1,
expression_string2,
expression_string3,
expression_string4,
ddim));
}

GISMO_EXPORT gsCFunctionExpr * gsFunctionExpr9_create(const char * expression_string1,
const char * expression_string2,
const char * expression_string3,
const char * expression_string4,
const char * expression_string5,
const char * expression_string6,
const char * expression_string7,
const char * expression_string8,
const char * expression_string9,
GISMO_EXPORT gsCFunctionExpr * gsFunctionExpr9_create(const char * expression_string1,
const char * expression_string2,
const char * expression_string3,
const char * expression_string4,
const char * expression_string5,
const char * expression_string6,
const char * expression_string7,
const char * expression_string8,
const char * expression_string9,
short_t ddim)
{
return RICAST_CF(new gismo::gsFunctionExpr<double>(expression_string1,
expression_string2,
expression_string3,
expression_string4,
expression_string5,
expression_string6,
expression_string7,
expression_string8,
expression_string9,
return RICAST_CF(new gsFunctionExpr<double>(expression_string1,
expression_string2,
expression_string3,
expression_string4,
expression_string5,
expression_string6,
expression_string7,
expression_string8,
expression_string9,
ddim));
}

Expand Down
36 changes: 34 additions & 2 deletions src/gsCFunctionSet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@
#include <gsCInterface/gsCMemory.h>
#include <gsCInterface/gsMacros.h>

using namespace gismo;

#ifdef __cplusplus
extern "C"
{
#endif

GISMO_EXPORT void gsFunctionSet_print(gsCFunctionSet * fs)
{ gsInfo<<RICAST_F(fs); }
{ gsInfo<<*RICAST_F(fs)<<"\n"; }

GISMO_EXPORT void gsFunctionSet_delete(gsCFunctionSet * ptr)
{ delete RICAST_F(ptr); }
Expand All @@ -26,7 +28,7 @@ GISMO_EXPORT int gsFunctionSet_nPieces(gsCFunctionSet * fs)
{ return RICAST_F(fs)->nPieces(); }

GISMO_EXPORT gsCMatrix* gsFunctionSet_support(gsCFunctionSet * fs)
{ return RICAST_CM( new gismo::gsMatrix<double>(RICAST_F(fs)->support()) ); }
{ return RICAST_CM( new gsMatrix<double>(RICAST_F(fs)->support()) ); }

GISMO_EXPORT void gsFunctionSet_eval_into(gsCFunctionSet * fs,
gsCMatrix * u,
Expand All @@ -37,6 +39,36 @@ GISMO_EXPORT void gsFunctionSet_deriv_into(gsCFunctionSet * fs,
gsCMatrix * u,
gsCMatrix * result)
{ RICAST_F(fs)->deriv_into(*RICAST_M(u), *RICAST_M(result) ); }

GISMO_EXPORT void gsFunctionSet_deriv2_into(gsCFunctionSet * fs,
gsCMatrix * u,
gsCMatrix * result)
{ RICAST_F(fs)->deriv2_into(*RICAST_M(u), *RICAST_M(result) ); }

GISMO_EXPORT void gsFunctionSet_evalAllDers1_into(gsCFunctionSet * fs,
gsCMatrix * u,
gsCMatrix * values,
gsCMatrix * deriv)
{
std::vector<gsMatrix<> > result(2);
RICAST_F(fs)->evalAllDers_into(*RICAST_M(u), 1, result, false);
*RICAST_M(values) = give(result[0]);
*RICAST_M(deriv) = give(result[1]);
}

GISMO_EXPORT void gsFunctionSet_evalAllDers2_into(gsCFunctionSet * fs,
gsCMatrix * u,
gsCMatrix * values,
gsCMatrix * deriv,
gsCMatrix * deriv2)
{
std::vector<gsMatrix<> > result(3);
RICAST_F(fs)->evalAllDers_into(*RICAST_M(u), 2, result, false);
*RICAST_M(values) = give(result[0]);
*RICAST_M(deriv) = give(result[1]);
*RICAST_M(deriv2) = give(result[2]);
}

#ifdef __cplusplus
}
#endif
17 changes: 17 additions & 0 deletions src/gsCFunctionSet.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,23 @@ extern "C"
gsCMatrix * u,
gsCMatrix * result);

GISMO_EXPORT void gsFunctionSet_deriv2_into(gsCFunctionSet * fs,
gsCMatrix * u,
gsCMatrix * result);

// gsFunctionSet::evalAllDers_into(u, 1, result,false);
GISMO_EXPORT void gsFunctionSet_evalAllDers1_into(gsCFunctionSet * fs,
gsCMatrix * u,
gsCMatrix * values,
gsCMatrix * deriv);

// gsFunctionSet::evalAllDers_into(u, 2, result,false);
GISMO_EXPORT void gsFunctionSet_evalAllDers2_into(gsCFunctionSet * fs,
gsCMatrix * u,
gsCMatrix * values,
gsCMatrix * deriv,
gsCMatrix * deriv2);

#ifdef __cplusplus
}
#endif
Loading