Создайте файл "cmas2d.bas". Этот файл определяет формат данных для текстовых файлов с расширением .dat, создаваемых GiD, в которых хранятся геометрические и физические данные задачи. Файл с расширением .dat – это входной файл данных для вычислительного модуля.

ПРИМЕЧАНИЕ: Нет необходимости записывать всю информацию только в один файл .bas. Каждый файл .bas определяет отдельный файл .dat.

Файл-шаблон "cmas2d.bas" описывается следующим образом:

Формат файла .bas основан на командах. Текст без предшествующей ему звёздочки (*) воспроизводится в файле .dat, созданным GiD, так как он указан в файле .bas. Текст с предшествующей ему звёздочкой (*) интерпретируется как команда.

Пример:

файл .bas

%%%% Problem Size %%%%

Number of Elements & Nodes:

*nelem *npoin

файл .dat

%%%% Problem Size %%%%

Number of Elements & Nodes:

5379 4678

Содержимое файла "cmas2d.bas" должно быть следующим:

Файл .bas

==================================================================

General Data File

==================================================================

Title: *GenData(Title)

%%%%%%%%%%%%%%%%%% Problem Size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Number of Elements & Nodes:

*nelem *npoin

В первой части файла "cmas2d.bas" описывается общая информация о проекте.

*nelem: возвращает общее количество элементов сетки.

*npoin: возвращает общее количество узлов сетки.

Coordinates:

Node X Y

*loop nodes

*format "%5i%14.5e%14.5e"

*NodesNum *NodesCoord(1,real) *NodesCoord(2,real)

*end nodes

Этот набор команд позволяет вывести все узлы сетки вместе с их номерами и координатами.

*loop, *end: операторные скобки цикла. Команда *loop требует задание одного из следующих параметров

*loop nodes: цикл по узлам

*loop elems: цикл по элементам

*loop materials: цикл по заданным материалам

*format: эта команда определяет формат выходных данных. Команды форматирования подобны спецификаторам вывода, используемым в языке C.

*NodesNum: возвращает идентификатор (номер) текущего узла

*NodesCoord: возвращает координаты текущего узла

*NodesCoord (n, real): возвращает значение координаты x, y или z в зависимости от значения n:

n=1 соответствует x

n=2 соответствует y

n=3 соответствует z

Connectivities:

Element Node(1) Node(2) Node(3) Material

*set elems(all)

*loop elems

*format "%10i%10i%10i%10i%10i"

*ElemsNum *ElemsConec *ElemsMat

*end elems

Приведенный фрагмент кода задает вывод всех элементов с перечислением их узлов и определенными для них материалами.

*set elems(all): эта команда включает все элементы сетки при определении цикла.

*ElemsNum: возвращает идентификатор текущего элемента

*ElemsConec: возвращает узлы элемента в порядке обхода против часовой стрелки

*ElemsMat: возвращает номер присвоенного элементу материала

Begin Materials

Nº Materials= *nmats

Этот фрагмент файла формата задает вывод общего числа материалов проекта

*nmats: возвращает общее число материалов

Mat. Density

*loop materials

*format "%4i%13.5e"

*set var PROP1(real)=Operation(MatProp(Density, real))

*MatNum *PROP1

*end

Приведенный выше фрагмент файла .bas задает вывод списка материалов проекта вместе с их идентификаторами и значениями плотности.

*MatProp (density, real): возвращает значение свойства плотности материала "density"в формате вывода "real".

*Operation (expression): возвращает значение арифметического выражения. Данная операция должна быть записана на языке C.

*Set var PROP1(real)=Operation(MatProp(Density, real)): присваивает значение, возвращаемое MatProp (с аргументом плотностью материала) переменной PROP1 (типа real).

*PROP1: возвращает значение переменной PROP1.

*MatNum: возвращает значение идентификатора материала.

Point conditions

*Set Cond Point-Weight *nodes

*set var NFIX(int)=CondNumEntities(int)

Concentrate Weights

*NFIX

Следующих фрагмент кода задает вывод количества объектов, на которых были заданы некоторые условия.

*Set Cond Point-Weight *nodes: эта команда позволяет выбрать условие, с которым будет осуществляться дальнейшая работа. Для данного примера выбирается условие "Point-Weight".

*CondNumEntities(int): возвращает количество объектов, на которых задано это условие.

*Set var NFIX(int)= CondNumEntities(int): присваивает значение, возвращаемое командой CondNumEntities переменной NFIX (типа "int").

*NFIX: возвращает значение переменной NFIX.

Potentials Prescrits:

Node Tipus

Valor/Etiqueta

*loop nodes *OnlyInCond

*NodesNum *cond(1)

*end

Приведенный фрагмент файла формата задает вывод списка узлов, на которых было задано условие "Point-Weight", вместе с их идентификаторами (номерами) и значениями массы (weight) – заданного условием "Point-Weight".

*loop nodes *OnlyInCond: вывод списка только тех узлов, на которых было задано условие.

*cond(1): возвращает значение условия из 1-го поля, условия заданного ранее командой *set cond. Поле данных условия может быть также выбрано по имени этого условия, например, cond(weight).

cmas2d.bas

==================================================================

General Data File

==================================================================

%%%%%%%%%%%%%%%%%% Problem Size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Number of Elements & Nodes:

*nelem *npoin

%%%%%%%%%%%%%%%%%%% Mesh Database %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Coordinates:

Node X Y

*set elems(all)

*loop nodes

*format "%5i%14.5e%14.5e"

*NodesNum *NodesCoord(1,real) *NodesCoord(2,real)

*end nodes

.................................................................

Connectivities:

Element Node(1) Node(2) Node(3) Material

*loop elems

*format "%10i%10i%10i%10i%10i"

*ElemsNum *ElemsConec *ElemsMat

*end elems

.................................................................

Begin Materials

Nº Materials= *nmats

Mat. Density

.................................................................

*loop materials

*format "%4i%13.5e"

*set var PROP1(real)=Operation(MatProp(Density, real))

*MatNum *PROP1

*end

.................................................................

Point conditions

*Set Cond Point-Weight *nodes

*set var NFIX(int)=CondNumEntities(int)

Concentrated Weights

*NFIX

.................................................................

Potentials Prescrits:

Node Tipus

Valor/Etiqueta

*Set Cond Point-Weight *nodes

*loop nodes *OnlyInCond

*NodesNum *cond(1)

*end

.................................................................