(U2.01.09) Определение поля начальных напряжений и поля внутренних переменных

Материал из ru.wiki.laduga.ru
Перейти к: навигация, поиск


В данной статье описывается, как производится моделирование полей, описывающих начальное состояния нелинейного расчета: (STAT_NON_LINE): поле напряжений и поле начальных переменных. Компоненты поля напряжений имеют «аналитическую» форму, компоненты поля начальных переменных - отличные от нуля константы. В обоих случаях решение состоит в соединении определенного количества CREA_CHAP команд.

Для поля напряжений, трудность состоит в оценке "аналитических формул" (Operation ='EVAL').

Для поля начальных переменных трудность возникает из-за того, что количество связанных с внутренними переменными (VARI_R) имеет ряд априорно неопределенных компонентов: "V1", "V2", ...

Предложенные решения реализованы в тесте ZZZZ130A.

1 Определение аналитического поля напряжения

Первое предположение состоит в том, что модель содержит сплошные конечные элементы(MODELISATION='3D').

Хотим, чтобы в каждой точке Гаусса, компоненты напряжений имели следующие значения:

   SIZZ = RHO*G*Z
   SIXX = SIYY = KP*SIZZ,
   где
   RHO : плотность
   G : ускорение свободного подения
   Z : 3-я координата пространства
   KP : коэффициент.

Предложенное решение включает:

  1. определить три функции "формулы", соответствующие SIXX, SIYY и SIZZ,
  2. составить поле, компоненты которого - предыдущие функции,
  3. оценить формулы поля предоставляя ему поле геометрии, необходимой для их оценки.

1.1 Этап 1: определение формулы

   RHO=1000.
    G=10.
    KP=3.

    SIZZ = FORMULA (REEL= """ (REEL: Z) = RHO*G*Z """)
    SIXX = FORMULA (REEL= """ (REEL: Z) = KP*SIZZ (Z) """)
    SIYY = FORMULA (REEL= """ (REEL: Z) = KP*SIZZ (Z) """)

1.2 Этап 2: создание поля формул SIG1

   SIG1=CREA_CHAMP (OPERATION='AFFE', TYPE_CHAM='ELGA_NEUT_F',
                    MODELE=MO, PROL_ZERO='OUI',
        AFFE=_F (TOUT = “OUI”, NOM_CMP = (“X1”, “X2”, “X3”,),
                               VALE_F = (SIXX, SIYY, SIZZ,)))

Комментарии

поле SIG1, которое создает cham_elem в точках Гаусса (ELGA), единственное поле, способное иметь компоненты типа "функции" является полем размера NEUT_F. Нужно будет таким образом помнить, что компонент "X1" SIG1 - фактически “SIXX”, и т.д. …,

ключевое слово PROL_ZERO ='OUI' обязательно потому что для всех типов элементов, у cham_elem_NEUT_R в настоящее время есть 6 компонентов: “X1”, “X2”, …, “X6”. Таким образом, необходимо согласиться “заполнить” нулем поле из 3 незатронутых компонентов. Заполнение "нулем" для поля, компоненты которого - тексты (имена функции), состоит в присвоении «» каждому компоненту, отсутствующему в поле.

Таким образом, это не действует на нулевые функции. Можно отметить его при помощи INFO=2, чтобы распечатать поле SIG1.

1.3 Этап 3: оценка формулы поля SIG1

поле SIG1 - поле, известное в точках Гаусса элементов модели. В каждой точке каждый захочет оценить функции SIXX, SIYY и SIZZ. Для этого необходимо иметь значения всех переменных, появляющихся в функциях (здесь Z). Эти переменные должны быть известны на тех же точках, что и поле функций. Таким образом, необходимо иметь поле, содержащее геометрию точек Гаусса (cham_elem_GEOM_R / ELGA).

Это поле геометрии точек Гаусса (CHXG) получено, запуском следующих команд:

   CHXN=CREA_CHAMP (OPERATION='EXTR', TYPE_CHAM='NOEU_GEOM_R',
         NOM_CHAM='GEOMETRIE', MAILLAGE=MA)

    CHXG=CREA_CHAMP (OPERATION='DISC', TYPE_CHAM='ELGA_GEOM_R',
         MODELE=MO, CHAM_GD=CHXN

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

Можно тогда оценить функции благодаря оператору CREA_CHAMP / РАБОТА ='EVAL':

   SIG2=CREA_CHAMP (OPERATION='EVAL', TYPE_CHAM='ELGA_NEUT_R',
        MODELE=MO, CHAM_F=SIG1, CHAM_PARA= (CHXG,) )

Поле (SIG2) получено оценкой поля NEUT_F и является полем NEUT_R, у компонентов которого есть те же имена как компоненты NEUT_F: “X1”, “X2”, …, “X6”.

Предостережение:

Компоненты "X4", “X5”, “X6” неопределенны, потому что они соответствуют несуществующей функции. Все ещё необходимо определить значение поля SIG2 (NEUT_R; SIEF_R), чтобы закончить изготовление нашего аналитического поля напряжения:

   SIGINI=CREA_CHAMP(OPERATION='ASSE', TYPE_CHAM='ELGA_SIEF_R',
          MODELE=MO, PROL_ZERO='OUI',
          ASSE=_F (TOUT = “OUI”, CHAM_GD = SIG2,
                NOM_CMP = (“X1”, “X2”, “X3”,),
                NOM_CMP_RESU = (“SIXX”, “SIYY”, “SIZZ”,)))

Замечание:

Только компоненты "X1", “X2” и “X3” поля SIG2 перекопированы в этой операции, чтобы дать компоненты "SIXX", “SIYY”, “SIZZ” поля SIGINI. Это поле напряжения должно также содержать компоненты, связанные с “SIXY”, “SIYZ”, “SIXZ”. Чтобы получить их (с нулевым значением), необходимо использовать дополнение нулем (PROL_ZERO ='OUI'), Обработка сделанного, чтобы получить нулевые компоненты “SIXY”, “SIYZ”, “SIXZ”, была бы более простой, если бы была отчетливо затронута на этих 3 составляющих нулевая функция. Нельзя было бы “играть” с заполнениями.



2 Определение ненулевого поля внутренних переменных

2.1 Проблема

Кто-то хочет создать поле начальных внутренних переменных для команды STAT_NON_LINE. Это поле не должно быть нулем всюду. Точнее:

    STAT_NON_LINE:
        COMP_INCR = (_F (GROUP_MA ='MASSIF', RELATION= "CJ"),
                     _F (GROUP_MA ='BETON', RELATION = “ENDO_LOCAL”),),

для поведенческой модели "CJ" (16 внутренних переменных), кто-то захочет установить:

   V1 = 1.0 и V9 = 9.0

для поведенческой модели “ENDO_LOCAL” (2 внутренние перменные), кто-то хочет установить:

   V2 = 2.0

2.2 1-ый метод

Оператор, который будет использоваться - CREA_CHAMP / РАБОТА ='AFFE'. Это позволяет влиять (сеткой или GROUP_MA) на значения, которые необходимы. Трудность прибывает вследствие того факта, что количество, связанное с внутренними переменными (VARI_R), отличается от остальных: каждый не знает априорно, которые являются его компонентами. Кроме того имя его компонентов переводит это незнание: “V1”, “V2”, …

Согласно поведению, которое выберет пользователь в STAT_NON_LINE, количество внутренних переменных величин изменяется. На нашем примере, поведение ' CJS ' требует 16 переменных величин, в то время как ' ENDO_LOCAL ' использует только 2.

Присвоение сделано следующим образом:

   VAIN1=CREA_CHAMP (OPERATION='AFFE', TYPE_CHAM='ELGA_VARI_R',
         MODELE=MO, PROL_ZERO='OUI',
         AFFE= (
              _F (GROUP_MA= “BETON”, NOM_CMP= “V2”, VALE = 2.),
              _F (GROUP_MA= “MASSIF”,
                  NOM_CMP= (“V1”, “V9”, “V16”,),
                  VALE = (1. , 9. , 0. ,)),
        )
   )

Важное замечание:

Ключевое слово PROL_ZERO ='OUI' позволяет влиять только на ненулевые компоненты. Но так как команде не сообщают о количестве внутренних переменных, полученных с сетки, она основывается на измененном наибольшем номере.

В примере выше, на группе "MASSIF", важно влиять на “V16” (здесь к 0. ) так, чтобы у поля было 16 компонентов.

Это важно для нелинейного расчета, который будет следующим, чтобы поле внутренних переменных величин было связным с поведением, которое будет выбрано. Необходимо, чтобы у группы 'BETON ' были 2 внутренние переменные величины (и только 2).

Внимание:

Если модель включает другие типы поведения (для которых не нужно инициализировать поле ненулевыми значениями), необходимо для них также необходимо предоставить нулевые значения. Этот недостаток (должны знать используемые поведения TOUS и количество внутренних переменных) может быть решено с помощью 2-го нижеследующего методом (но это, сложнее).

2.3 2-ой метод

Этот метод(более сложный) позволяет влиять явно только на сетки, которые имеют ненулевые компоненты.

Проблема состоит в том, чтобы получить поле, содержащее хорошую сумму внутренних переменных для каждой сетки согласно поведению, которое будет затронуто для него в STAT_NON_LINE. Чтобы решить эту проблему, каждый выполнит фиктивное нелинейное вычисление (с реальными поведениями). Поле внутренних переменных величин будет тогда хорошей "моделью" поля.

Таким образом, необходимо выполнить:

  1. фиктивное нелинейное вычисление => UBID
  2. экстракция поля внутренних переменных (VBID) результата UBID
  3. присвоение ненулевых значений в поле VAIN2
  4. установка в нуль VBID + перегрузка значений VAIN2, чтобы привести к результату VAIN22

2.3.1 Нелинейное фиктивное вычисление

   BETON=DEFI_MATERIAU (ELAS=_F (E = 20000. , NU = 0.),
                  ECRO_LINE=_F ( SY = 6. , D_SIGM_EPSI = -10000.) )
    MASSIF=DEFI_MATERIAU ( ELAS=_F ( E = 35.E3, NU = 0.15),
       CJS=_F ( BETA_CJS = -0.55, GAMMA_CJS = 0.82, PA = -100.0,
                RM = 0,289, N_CJS = 0.6, KP = 25.5E3, RC = 0,265, A_CJS =
    0.25,))

    CHMAT=AFFE_MATERIAU ( MAILLAGE=MA, AFFE= (
          _F (GROUP_MA = “MASSIF”, MATER = MASSIF),
          _F (GROUP_MA = “BETON”, MATER = BETON),))

    TEMPS1=DEFI_LISTE_REEL ( VALE= (0. , 1.) )
    CHAR_U1=AFFE_CHAR_MECA (MODELE=MO,
            DDL_IMPO=_F (NODE = (“N1”, “N2”, “N3”,), DX=0., DY=0., DZ=0.) )

    UBID=STAT_NON_LINE (MODELE=MO, CHAM_MATER=CHMAT,
         EXCIT= _F (LOAD = CHAR_U1,),
         COMP_INCR= (_F (GROUP_MA='MASSIF', RELATION = “CJS”),
                     _F (GROUP_MA='BETON', RELATION = “ENDO_LOCAL”),),
         NEWTON=_F ( MATRIX = “ELASTIQUE”),
         CONVERGENCE=_F (ARRET = “NON”, # to continue without convergence
                   ITER_GLOB_MAXI = 1, ITER_INTE_MAXI = 1),
         INCREMENT=_F (LIST_INST = TEMPS1),
                 )

2.3.2 Восстановление поля внутренних переменных величин «модели»

   VABID=CREA_CHAMP(OPERATION='EXTR', TYPE_CHAM='ELGA_VARI_R', INFO=1,
         NOM_CHAM='VARI_ELGA', RESULTAT=UBID, NUME_ORDRE=1,)

Замечание:

VABID не ноль.

2.3.3 Присвоение ненулевых значений в карте NEUT_R

   VAIN2=CREA_CHAMP (OPERATION='AFFE', TYPE_CHAM='CART_NEUT_R', MODELE=MO,
         AFFE= (
                _F (GROUP_MA= “BETON”, NOM_CMP= (“X2”,), VALE = (2. ,)),
                _F (GROUP_MA= “MASSIF”, NOM_CMP= (“X1”, “X9”,), VALE = (1. ,
   9. ,)),
               )
        )

2.3.4 Сброс поля "модели" внутренних переменных и перегрузка ненулевых значений

   VAIN22=CREA_CHAMP (OPERATION='ASSE', TYPE_CHAM='ELGA_VARI_R', MODELE=MO,
         # bet to zero:
         ASSE= (_F (TOUT= = “OUI”, CHAM_GD = VABID, CUMUL='OUI', COEF_R=0.),
         # overload non-zero values:
                _F (GROUP_MA= “BETON”, CHAM_GD = VAIN2, CUMUL='OUI', COEF_R=1.,
                    NOM_CMP= (“X2”,), NOM_CMP_RESU= (“V2”,),),
                _F (GROUP_MA= “MASSIF”, CHAM_GD = VAIN2, CUMUL='OUI', COEF_R=1.,
                    NOM_CMP= (“X1”, “X3”), NOM_CMP_RESU= (“V1”, “V9”,),),
              )
         )

Замечание:

Для сброса и перегрузок ненулевых значений, используются ключевые слова CUMUL ='OUI' и COEF_R=0.