24 const gismo::gsVector<T, 2> &uv, gismo::gsVector<T, 2> &xieta,
25 gismo::gsMatrix<T, 2, 2> &jac) {
26 T s = uv(0), t = uv(1);
27 T alpha_1 = c(0), alpha_2 = c(1), beta_1 = c(2), beta_2 = c(3);
29 T alpha = alpha_1 * t + alpha_2 * (1 - t);
30 T beta = beta_1 * s + beta_2 * (1 - s);
32 T xi_denominator = 2 * alpha * s - s - alpha;
33 xieta(0) = (alpha - 1) * s / xi_denominator;
34 T eta_denominator = 2 * beta * t - t - beta;
35 xieta(1) = (beta - 1) * t / eta_denominator;
38 jac(0, 0) = (alpha - 1) * (xi_denominator - (2 * alpha - 1) * s) /
39 (xi_denominator * xi_denominator);
40 jac(0, 1) = (alpha_1 - alpha_2) * s *
41 (xi_denominator - (alpha - 1) * (2 * s - 1)) /
42 (xi_denominator * xi_denominator);
43 jac(1, 0) = (beta_1 - beta_2) * t *
44 (eta_denominator - (beta - 1) * (2 * t - 1)) /
45 (eta_denominator * eta_denominator);
46 jac(1, 1) = (beta - 1) * (eta_denominator - (2 * beta - 1) * t) /
47 (eta_denominator * eta_denominator);
54 typedef typename gismo::gsExprAssembler<T>::geometryMap
geometryMap;
55 typedef typename gismo::gsExprAssembler<T>::space
space;
56 typedef typename gismo::gsExprAssembler<T>::solution
solution;
61 const gismo::gsMobiusDomain<2, T> &mobiusDomain)
65 gismo::gsMatrix<T> bbox;
66 m_mp.boundingBox(bbox);
67 m_mp.patch(0).translate(-bbox.col(0));
68 gismo::gsVector<T> scaleFactor = bbox.col(1) - bbox.col(0);
69 for (
int i = 0; i != scaleFactor.size(); ++i) {
70 if (abs(scaleFactor(i)) < 1e-5)
71 scaleFactor(i) = (T)(1.0);
73 m_mp.patch(0).scale(1 / scaleFactor.array());
86 gismo::gsMultiBasis<T> dbasis(cgeom.basis());
100 T
evalObj(
const gismo::gsAsConstVector<T> &coefsM)
const override {
108 gismo::gsMultiBasis<> dbasis(cgeom.basis());
114 auto FFF = gismo::expr::jac(G).tr() * gismo::expr::jac(G);
116 gismo::gsVector<> pt(2);
119 auto m_integration = (FFF.trace() / gismo::expr::meas(G)).val() +
120 pow(FFF.det().val(), 2) / pow(
m_area, 2);
175 gismo::gsAsVector<T> &result)
const override {
177 const std::size_t n = u.rows();
180 gismo::gsMatrix<T> uu = u;
181 gismo::gsAsVector<T> tmp(uu.data(), n);
182 gismo::gsAsConstVector<T> ctmp(uu.data(), n);
187 for (std::size_t i = 0; i != n; i++) {
189 const T e1 = this->
evalObj(ctmp);
190 tmp[i] = u[i] - T(1e-6);
191 const T e2 = this->
evalObj(ctmp);
193 result[c++] = ((e1 - e2)) / T(2e-6);
206 m_options.addReal(
"qi_lambda1",
"Sets the lambda 1 value", 1.0);
207 m_options.addReal(
"qi_lambda2",
"Sets the lambda 2 value", 1.0);
224 const gismo::gsMultiPatch<T>
m_mp;
226 const gismo::gsMultiBasis<T>
m_mb;
243 const gismo::gsMatrix<T> &coefsMobiusIn) {
244 gismo::gsMultiPatch<T> result;
246 for (
int ipatch = 0; ipatch < mp.nPatches(); ++ipatch) {
248 gismo::gsMatrix<T> uv =
249 gismo::gsPointGrid(mp.parameterRange(0), mp.patch(ipatch).basis().size() * 4);
251 gismo::gsVector<T, 2> tempUV, xieta;
252 gismo::gsMatrix<T> eval_geo;
253 eval_geo.resize(3, uv.cols());
254 gismo::gsMatrix<T, 2, 2> jacUV;
256 gismo::gsAsConstVector<T> coefsMobius(coefsMobiusIn.data(), 4);
258 for (
size_t ipt = 0; ipt != uv.cols(); ++ipt) {
260 tempUV = uv.col(ipt);
264 eval_geo.col(ipt) = mp.patch(ipatch).eval(xieta);
267 gismo::gsTensorBSplineBasis<2, T> bbasis =
268 static_cast<gismo::gsTensorBSplineBasis<2, T> &
>(mp.patch(ipatch).basis());
269 gismo::gsFitting<> fittingSurface(uv, eval_geo, bbasis);
270 fittingSurface.compute();
273 result.addPatch(*fittingSurface.result());
276 result.computeTopology();
Objective function for surface reparameterization.
Definition GismoSurfaceReparameterization.hpp:51
void defaultOptions()
Sets the default options.
Definition GismoSurfaceReparameterization.hpp:204
gismo::gsOptionList & options()
Returns a reference to the option list.
Definition GismoSurfaceReparameterization.hpp:201
gismo::gsOptionList m_options
Definition GismoSurfaceReparameterization.hpp:231
T m_eps
Definition GismoSurfaceReparameterization.hpp:233
const gismo::gsDofMapper m_mapper
Definition GismoSurfaceReparameterization.hpp:225
gismo::gsExprAssembler< T >::space space
Definition GismoSurfaceReparameterization.hpp:55
T m_lambda2
Definition GismoSurfaceReparameterization.hpp:233
void setEps(T tol)
Sets the tolerance.
Definition GismoSurfaceReparameterization.hpp:198
gsObjFuncSurface(const gismo::gsMultiPatch< T > &patches, const gismo::gsMobiusDomain< 2, T > &mobiusDomain)
Constructor.
Definition GismoSurfaceReparameterization.hpp:60
void applyOptions(const gismo::gsOptionList &options)
Applies an option list.
Definition GismoSurfaceReparameterization.hpp:216
T m_area
Definition GismoSurfaceReparameterization.hpp:234
T evalObj(const gismo::gsAsConstVector< T > &coefsM) const override
Evaluates the objective function.
Definition GismoSurfaceReparameterization.hpp:100
gismo::gsExprAssembler< T > m_assembler
Definition GismoSurfaceReparameterization.hpp:229
void gradObj_into(const gismo::gsAsConstVector< T > &u, gismo::gsAsVector< T > &result) const override
Evaluates the gradient of the objective function.
Definition GismoSurfaceReparameterization.hpp:174
gismo::gsExprAssembler< T >::solution solution
Definition GismoSurfaceReparameterization.hpp:56
gismo::gsMobiusDomain< 2, T > m_MobiusDomain
Definition GismoSurfaceReparameterization.hpp:237
T m_lambda1
Definition GismoSurfaceReparameterization.hpp:233
const gismo::gsMultiPatch< T > m_mp
Definition GismoSurfaceReparameterization.hpp:224
gismo::gsComposedGeometry< T > m_cgeom
Definition GismoSurfaceReparameterization.hpp:236
gismo::gsExprAssembler< T >::geometryMap geometryMap
Definition GismoSurfaceReparameterization.hpp:54
gismo::gsExprEvaluator< T > m_evaluator
Definition GismoSurfaceReparameterization.hpp:228
void addOptions(const gismo::gsOptionList &options)
Adds an option to the option list.
Definition GismoSurfaceReparameterization.hpp:211
const gismo::gsMultiBasis< T > m_mb
Definition GismoSurfaceReparameterization.hpp:226
Isogeometric analysis network main header file.
Definition boundary.hpp:22
gismo::gsMultiPatch< T > convertIntoBSpline(const gismo::gsMultiPatch< T > &mp, const gismo::gsMatrix< T > &coefsMobiusIn)
Converts a matrix of coefficients into a multi-patch B-spline object.
Definition GismoSurfaceReparameterization.hpp:242
void mobiusTransform(const gismo::gsAsConstVector< T > &c, const gismo::gsVector< T, 2 > &uv, gismo::gsVector< T, 2 > &xieta, gismo::gsMatrix< T, 2, 2 > &jac)
Computes the Mobius transformation.
Definition GismoSurfaceReparameterization.hpp:23