diff --git a/Mesh/1D_Mesh.cpp b/Mesh/1D_Mesh.cpp index 2905f1a9cf41352c7c411722535e16c3626c0a88..831e2cf0b715df9409859179ec4d24b726a74cc5 100644 --- a/Mesh/1D_Mesh.cpp +++ b/Mesh/1D_Mesh.cpp @@ -1,4 +1,4 @@ -// $Id: 1D_Mesh.cpp,v 1.41 2005-01-01 19:35:30 geuzaine Exp $ +// $Id: 1D_Mesh.cpp,v 1.42 2005-01-12 01:20:08 geuzaine Exp $ // // Copyright (C) 1997-2005 C. Geuzaine, J.-F. Remacle // @@ -52,7 +52,7 @@ double F_One(double t) double F_Transfini(double t) { Vertex der; - double d, a, b, val; + double d, a, b, val, r; int i; der = InterpolateCurve(THEC, t, 1); @@ -66,16 +66,16 @@ double F_Transfini(double t) switch (abs(THEC->ipar[1])) { case 1: // Geometric progression ar^i; Sum of n terms = THEC->l = a (r^n-1)/(r-1) - if(THEC->dpar[0] == 1.) + if(sign(THEC->ipar[1]) >= 0) + r = THEC->dpar[0]; + else + r = 1. / THEC->dpar[0]; + if(r == 1.) a = THEC->l / (double)THEC->ipar[0]; else - a = - THEC->l * (THEC->dpar[0] - - 1.) / (pow(THEC->dpar[0], THEC->ipar[0]) - 1.); - i = - (int)(log(t * THEC->l / a * (THEC->dpar[0] - 1.) + 1.) / - log(THEC->dpar[0])); - val = d / (a * pow(THEC->dpar[0], (double)i)); + a = THEC->l * (r - 1.) / (pow(r, THEC->ipar[0]) - 1.); + i = (int)(log(t * THEC->l / a * (r - 1.) + 1.) / log(r)); + val = d / (a * pow(r, (double)i)); break; case 2: // Bump