Перейти к статье

 

Функции APREPRO

Несколько математических, строковых функций  и функций Fidesys реализовано в APREPRO.

Чтобы вызвать функцию, вы вводите имя функции, за которой следует
список нулевых или более аргументов в круглых скобках.

sqrt(min(a,b*3))

В этом примере используются две функции sqrt() и min(). Параметры a и b*3 являются аргументами функции min(). Результат этой функции является аргументом для функции sqrt(). В таблицах 1-3 представлены функции, доступные в APREPRO, а также количество их аргументов и краткое описание.

Математические функции

В таблице 1 представлены математические функции доступные в APREPRO.

Таблица 1. Математические функции

Синтаксис

Описание

abs(x)

абсолютное значение x. |x|

acos(x)

вычисляет обратный косинус  от x, значение в радианах

acosd(x)

вычисляет обратный косинус от x, значение в градусах

acosh(x)

вычисляет обратный гиперболический косинус x

asin(x)

вычисляет обратный синус от x, значение в радианах

asind(x)

вычисляет обратный синус от x, значение в градусах

asinh(x)

вычисляет обратный гиперболический синус от x

atan(x)

вычисляет обратный тангенс от x, значение в радианах

atan2(y,x)

вычисляет обратный тангенс от  y/x, значение в радианах

atan2d(y,x)

вычисляет обратный тангенс от y/x, значение в радианах

atand(x)

вычисляет обратный тангенс от x, значение в радианах

atanh(x)

вычисляет обратный гиперболический тангенс от x

ceil(x)

возвращает наименьшее целое число, большее x

cos(x)

вычисляет косинуса угла x, x в радианах

cosd(x)

вычисляет косинус угла x, x в градусах

cosh(x)

вычисляет гиперболический косинус x

d2r(x)

переводит градусы в радианы

dim(x,y)

вычисляет выражение x - min(x,y)

dist(x1,y1, x2,y2)

вычисляет расстояния между точками x1,y1 и x2,y2

exp(x)

 значение экспоненты в степени x,  ex

floor(x)

возвращает наибольшее целое число, меньшее x

fmod(x,y)

 

возвращает остаток с плавающей запятой от x/у

hypot(x,y)

возвращает значение sqrt(x2+y2)

int(x), [x]

возвращает целую часть x, отбрасывая 0

julday(mm, dd, yy)

возвращает дату по Юлианскому календарю от даты  mm/dd/yy

juldayhms (mm, dd, yy, hh, mm, ss)

возвращает дату по Юлианскому календарю, соответствующий дате mm/dd/yy и времени hh:mm:ss

lgamma(x)

вычисляет log(G(x))

ln(x), log(x)

вычисляет натуральный логарифм от  x

log1p(x)

вычисляет log(1+x)

log10(x)

вычисляет десятичный логарифм от x

max(x,y)

 максимальное значение из x и y

min(x,y)

минимальное  значение из  x и y

polarX(r,a)

вычисляет r ´ cos(a),где a в градусах

polarY(r,a)

вычисляет r ´ sin(a),где a в градусах

r2d(x)

переводит радианы в градусы

rand(xl,xh)

возвращает произвольное число из интервала от xl до xh

sign(x,y)

вычисляет x ´ sgn(y)

sin(x)

вычисляет синус угла x,  x в радианах

sind(x)

вычисляет синус угла x, x в градусах

sinh(x)

вычисляет гиперболический синус x

sqrt(x)

вычисляет квадратный корень x

tan(x)

вычисляет тангенс угла x,  x в радианах

tand(x)

вычисляет тангенс угла x,  x в градусах

tanh(x)

вычисляет гиперболический тангенс x

Vangle(x1,y1, x2,y2)

возвращает угол между векторами  x1i + y1j и x2i + y2j. Угол в радианах

Vangled(x1,y1, x2,y2)

возвращает угол между векторами  x1i + y1j и x2i + y2j. Угол в градусах

Функции Fidesys

В таблице 2 представлены доступные функции Fidesys:

Таблица 2. Функции Fidesys

Синтаксис

Описание

get_error_count()

Возвращает число ошибок в Fidesys.

set_error_count(val)

Определяет количество ошибок в Fidesys равное заданному значению.

get_warning_count()

Возвращает количество предупреждений в Fidesys.

set_warning_count(val)

Устанавливает количество предупреждений в  Fidesys равному заданному значению.

Id("type")

Возвращает ID объектов, соответствующих указанному типу. Доступные типы объектов: "body", "volume", "surface", "curve", "vertex", "group", "node", "edge", "quad", "face", "tri", "hex", "tet", or "pyramid".

IntNum(id)

Возвращает количество интервалов на кривой с указанным id.

IntNum(x, y, z, ord)

Возвращает количество интервалов на кривой, определяемой координатами центра кривой и длиной.

IntSize(id)

Возвращает размер элемента на кривой с указанным id.

IntSize(x, y, z, ord)

Возвращает размер элемента на кривой, определяемой координатами центра кривой и порядковым значением.

Volume(id)

Возвращает значение геометрического объема объекта с указанным id.

Volume(x, y, z, ord)

Возвращает значение геометрического объема объекта объем, определяемого координатами его центра и порядковым значением .

SurfaceArea(id)

Возвращает значение площади поверхности с указанным id.

SurfaceArea(x, y, z, ord)

Возвращает значение площади поверхности, определяемой координатами центра поверхности и ее порядковым значением.

Length(id)

Возвращает значение длины кривой с указанным id.

Length(x, y, z, ord)

Возвращает значение длины кривой, определяемой координатами ее центра и порядковым значением.

Radius(id)

Возвращает значение радиуса кривой,с указанным id, в ее срединной точки.

Radius(x, y, z, ord)

Возвращает значение радиуса кривой, определяемой координатами ее центра и порядковым значением.

MinVolumeMeshQuality(id, "metric")

Возвращает наихудшее значение указанной метрики качества элемента из всех элементов в
объеме с заданным id.

Доступные метрики, в скобках указано название метрики для функции:
форма (shape)
aspect ration bet
aspect ratio gam
aspect ratio
condition no
diagonal ratio
dimension
distortion
element volume
jacobian
relative size
scaled jacobian
shape and size
shear and size
shear
skew
stretch
taper

MinVolumeMeshQuality(x, y, z, ord, "metric")

Возвращает наихудшее значение указанной метрики качества элемента из всех элементов объема, определяемого координатами его центра и порядковым значением.

Доступные метрики,в скобках указано название метрики для функции:

shape
aspect ration bet
aspect ratio gam
aspect ratio
condition no
diagonal ratio
dimension
distortion
element volume
jacobian
relative size
scaled jacobian
shape and size
shear and size
shear
skew
stretch
taper

MinSurfaceMeshQuality(id, "metric")

Возвращает наихудшее значение указанной метрики качества элемента из всех элементов поверхности с указанным id.

Доступные метрики,в скобках указано название метрики для функции:

shape
aspect ratio
condition no
distortion
element area
jacobian
maximum angle
minimum angle
relative size
scaled jacobian
shape and size
shear and size
shear
skew
stretch
taper
warpage

MinSurfaceMeshQuality(x, y, z, ord, "metric")

Возвращает наихудшее значение указанной метрики качества элемента из всех элементов поверхности, определяемой координатами его центра и порядковым значением.

Доступные метрики,в скобках указано название метрики для функции:
shape
aspect ratio
condition no
distortion
element area
jacobian
maximum angle
minimum angle
relative size
scaled jacobian
shape and size
shear and size
shear
skew
stretch
taper
warpage

MeshVolume(id)

Возвращает общий объем всех элементов сетки в объеме с заданным id. Полученное значение будет отличаться от фактического геометрического объема, так как сетка аппроксимирует изогнутые границы линейными гранями сетки.

MeshVolume(x, y, z, ord)

Возвращает общий объем всех элементов сетки в объеме, определяемого координатами его центра и порядковым значением. Полученное значение будет отличаться от фактического геометрического объема, так как сетка аппроксимирует изогнутые границы  линейными гранями сетки.

HexVolume(id)

Возвращает объем гексаэдрального элемента с указанным id.

HexVolume(x, y, z, ord)

Возвращает объем гексаэдрального элемента, определяемого координатами центра и порядковым значением.

TetVolume(id)

Возвращает объем тетраэдрального элемента с указанным id.

TetVolume(x, y, z, ord)

Возвращает объем тетраэдрального элемента, определяемого координатами центра и порядковым значением.

FaceArea(id)

Возвращает площадь четырехугольного элемента грани с указанным id.

FaceArea(x, y, z, ord)

Возвращает площадь четырехугольного элемента грани, определяемого координатами центра и порядковым значением.

TriArea(id)

возвращает площадь треугольного элемента грани с указанным id

TriArea(x, y, z, ord)

Возвращает площадь треугольного элемента грани, определяемого координатами центра и порядковым значением.

MeshSurfaceArea(id)

Возвращает общую площадь всех треугольных или четырехугольных элементов поверхности с указанным id. Полученное значение будет отличаться от геометрической площади поверхности, так как сетка аппроксимирует
границы поверхности линейными ребрами элементов.

MeshSurfaceArea(x, y, z, ord)

Возвращает общую площадь всех треугольных или четырехугольных элементов поверхности, определенной координатами центра и порядковым значением. Полученное значение будет отличаться от геометрической площади поверхности, так как сетка аппроксимирует
границы поверхности линейными ребрами элементов.

EdgeLength(id)

Возвращает длину грани с указанным id.

EdgeLength(x, y, z, ord)

Возвращает длину грани, определяемой координатами центра и порядковым значением.

MeshLength(id)

Возвращает длину разбитой кривой с указанным id.

MeshLength(x, y, z, ord)

Возвращает длину разбитой кривой, определяемой координатами центра и порядковым значением.

Nx(id), Ny(id), Nz(id)

Возвращает кординаты x, y или z узла с указанным id.

Nx(x, y, z, ord)

Возвращает координату х узла, определяемого координатами центра и порядковым значением.

Ny(x, y, z, ord)

Возвращает координату у узла, определяемого координатами центра и порядковым значением.

Nz(x, y, z, ord)

Возвращает координату z узла, определяемого координатами центра и порядковым значением.

Vx(id), Vy(id), Vz(id)

Возвращает координаты x, y или z точки с указанным id.

Vx(x, y, z, ord)

Возвращает координату х точки, определяемой координатами центра и порядковым значением.

Vy(x, y, z, ord)

Возвращает координату у точки, определяемой координатами центра и порядковым значением.

Vz(x, y, z, ord)

Возвращает координату z точки, определяемой координатами центра и порядковым значением.

NumInGrp("groupname")

Возвращает количество объектов группы с указанным именем.

NumEdgesOnCurve(id)

Возвращает количество элементов кривой с указанным id.

NumEdgesOnCurve(x, y, z, ord)

Возвращает количество элементов кривой, определяемой координатами центра и порядковым значением.

NumElemsOnSurface(id)

Возвращает количество  элементов поверхности с указанным id.

NumElemsOnSurface(x, y, z, ord)

Возвращает количество  элементов поверхности, определяемой координатами центра и порядковым значением.

NumElemsInVolume(id)

Возвращает количество элементов в объеме с указанным id.

NumElemsInVolume(x, y, z, ord)

Возвращает количество элементов в объеме, определяемом координатами центра и порядковым значением.

NumVolumes()

Возвращает количество объемов в модели.

NumSurfaces()

Возвращает количество поверхностей в модели.

NumCurves()

Возвращает количество кривых в модели.

NumVertices()

Возвращает количество точек в модели.

NumVolsInPart("part_name")

Возвращает количество объемов, принадлежащих сборки с указанном именем.

PartInVol(id)

Возвращает имя и номер сборки, которой принадлежит объем с указанным  id.

SessionId()

Возвращает ID сессии Fidesys.

DUMP()

Возвращает список всех параметров и их значений APREPRO.

delete("var")

Удаляет параметр  APREPRO с заданным именем.

Строковые функции

В таблице 3 представлены доступные строковые функции:

Таблица 3. Строковые функции

Синтаксис

Описание

tolower(svar)

Переводит все символы верхнего регистра строкового параметра (svar) в нижний регистр. Она изменяет строковый параметр и возвращает результирующую строку.

toupper(svar)

Переводит все символы нижнего регистра строкового параметра (svar) в верхний регистр. Она изменяет строковый параметр и возвращает результирующую строку.

execute(svar)

Строковый параметр (svar) анализируется и выполняется так, как если бы это была строка, считанная из входного файла. Например:

if svar="b=sqrt(25.0)", then
#{execute(svar)}
Возвращает значение 5 и устанавливает b = 5. Выражение svar заключено в разделители, поэтому оно выполняется первым, оно должно быть допустимым выражением или будет выдано сообщение об ошибке.

rescan(svar)

Подобно execute(svar), за исключением того, что параметр svar заключен в разделители, а значит не имеет приоритетного выполнения. Например,

if svar = "Create Vertex {1+5} {sqrt(5)} {sqrt(6)}", then
#{rescan(svar)}

будет напечатано:

Create Vertex 6 2.236067977 2.449489743.

Разница между execute(sv1) и rescan(sv2) заключается в том, что sv1 должно быть допустимым выражением, а sv2 может быть 0 или содержать другие выражения.

getenv(svar)

Возвращает строку, содержащую значение строкового параметра svar. Если параметр не определен, возвращается пустая строка.

get_word(n,svar,del)

Возвращает строку, содержащую n-ое слово строкового параметра svar. Слова  в строковом параметре, разделенные одним или больше символов, удаляются.

word_count(svar,del)

Возвращает количество слов в строковом параметре svar. Слова  в строковом параметре, разделенные одним или больше символов, удаляются.

strtod(svar)

Возвращает число с плавающей запятой, равное количеству символов в указанном строковом параметре svar.

PrintError(svar)

Выводит строковый параметр svar в stderr.

error(svar)

Выводит строковый параметр svar в stderr, а затем завершает код со статусом ошибки завершения.

Quote(svar)

Возвращает строковый параметр svar, заключенный в двойные кавычки.

Units(svar)

Устанавливает переменные, полезные для работы в заданной системе измерения. Доступные размерности, описаны разделе  Размерности APREPRO.

В следующем примере показано использование некоторых из строковых функций.

#{t1 = "ATAN2"} {t2 = "(0, -1)"}

#{t3 = tolower(t1//t2)}

...Параметр t3 равен строковому параметру atan2(0, -1)

#{execute(t3)}

...t3 = 3.141592654

Результат аналогичный {atan2(0, -1)}

Этот общий пример иллюстрирует работу сразу нескольких функций. В первом случае выражение строится по типу объединения двух строк вместе и передачи полученного результата на следующую строку. Затем эта строка выполняется.

В следующем примере используется функция повторного сканирования для иллюстрации базовой возможности макросов в APREPRO. В примере создаются вершины равномерно распределенные по окружности дуги (180 градусов) радиуса 10. Обратите внимание, что макрос имеет длину 5 строк.

#{num = 0} {rad = 10} {nintv = 10} {nloop = nintv + 1}

#{line = 'Create Vertex {polarX(rad, (++num-1) * 180/nintv)} {polarY(rad, (num-1) * 180/nintv)}'}

#{loop(nloop)}

#{rescan(line)}

#{endloop}

Вывод:

Create Vertex 10 0

Create Vertex 9.510565163 3.090169944

Create Vertex 8.090169944 5.877852523

Create Vertex 5.877852523 8.090169944

Create Vertex 3.090169944 9.510565163

Create Vertex 6.123233765e-16 10

Create Vertex -3.090169944 9.510565163

Create Vertex -5.877852523 8.090169944

Create Vertex -8.090169944 5.877852523

Create Vertex -9.510565163 3.090169944

Create Vertex -10 1.224646753e-15

Обратите внимание на конструкцию цикла, она написана так, чтобы автоматически повторять строку повторного сканирования. Чтобы изменить этот пример для вычисления координат 101 точки, а не одиннадцати, необходимо только изменить параметр {nintv=100}.