(U4.50.01) Ключевое слово SOLVER

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


1 Цель

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

Из прямых решателей располагаем классическим алгоритмом Гаусса (METHODE=’LDLT’), мультифронтального разложения на простые множители (‘MULT_FRONT’) и библиотеки MUMPS (‘MUMPS’). Для итеративных решателей можно вызвать метод сопряженных градиентов (‘GCPC’) или некоторые алгоритмы библиотеки PETSC (‘PETSC’). Совмещение этих двух подходов дает гибридное решение. Это случай мульти-полей решателя FETI (‘FETI’).

Только MULT_FRONT, MUMPS, PETSC и FETI распараллелены. Первый в разделенной памяти (OpenMP), другие в распределенной памяти (MPI). Но все решатели совместимы с параллельным выполнением элементарных вычислений и программ (U4.41.01). Кроме того, только три решателя напрямую совместимы с частотным расчетом и исследованием устойчивости.

За более подробной информацией по поводу применения линейных решателей можно обратиться к документации (U2.08.03).



2 Синтаксис

 SOLVEUR = _F
Параметр, общий для всех решателей (прямые, итеративные и гибридные)
  SYME= / ‘NON’		[DEFECT]
	/ ‘OUI’					
Параметры, общие для прямых и гибридных решателей (‘MULT_FRONT’, ‘LDLT’, ‘MUMPS’ и ‘FETI’)
  NPREC=  / 8,			[DEFAUT]
	  / NPREC		[I]
  STOP_SINGULIER= / ‘OUI’	[DEFAUT]
Прямой решатель «внутренний» мультифронтального типа: см. §3.3.
  / METHODE=’MULT_FRONT’		[DEFAUT]
    RENUM  =	/ ‘METIS’,		[DEFAUT]
		/ ‘MD’,				
		/ ‘MDA’,			
Прямой решатель «классический» типа Гаусса: см. §3.4.
  /METHODE=’LDLT’,
  RENUM   =	/ ‘RCMK’,		[DEFAUT]
		/ ‘SANS’,
Прямой решатель мультифронтального типа, основанный на библиотеке MUMPS: см. §3.5.
  /METHODE=’MUMPS’,
  TYPE_RESOL    =	/ ‘AUTO’,			[DEFAUT]
			/ ‘NONSYM’,				
			/ ‘SYMGEN’,				
			/ ‘SYMDEF’,			
  PCENT_PIVOT  =	/ 20,				[DEFAUT]
			/ pcent,			[R]
  ELIM_LARG2   =	/ ‘OUI’,			[DEFAUT]
			/ ‘NON’,				
  RESI_RELA   =		/ -1.0, (non lin./modal)	[DEFAUT]
		        / +1.e-6, (линейный)		[DEFAUT]
		        / resi				[R]
  FILTRAGE_MATRICE   =	/ -1.d0,			[DEFAUT]
		        / filtma			(ограничение периметра, см. §3.5)
  MIXER_PRECISION   =	/ ‘OUI’			(ограничение периметра, см. §3.5)
		        / ‘NON’,			[DEFAUT]
  PRATRAITMENTS   =	/ ‘SANS’,				
	                / ‘AUTO’,			[DEFAUT]
  RENUM   =		/ ‘AUTO’			[DEFAUT]
		        / ‘AMD’			
		        / ‘AMF’			
		        / ‘QAMD’			
		        / ‘PORD’			
		        / ‘METIS’			
		        / ‘SCOTCH’		
  POSTTRAITMENTS   =	/ ‘SANS’			[DEFAUT]
			/ ‘FORCE’				
			/ ‘AUTO’			[DEFAUT]
  MATR_DISTRIBUEE   =	/ ‘OUI’			(ограничение преиметра, см. §3.5)
	                / ‘NON’				[DEFAUT]
  GESTION_MEMOIRE   =	/ ‘AUTO’			[DEFAUT]
	                / ‘IN_CORE’				
	                / ‘OUT_OF_CORE’			
	                / ‘EVAL’
Итеративный решатель «внутренний» с градиентным предобуславливанием (метод сопряженных градиентов) с помощью неполного разложения Холецкого ILU (k) или разложения одинарной точности (методами MUMPS). См. §3.6.
  / METHODE=’GCPC’
  PRE_COND   =			/ ‘LDLT_INC’			[DEFAUT]
  NIVE_REMPLISSAGE   =	        / 0				[DEFAUT]
	                        / niv				
  RENUM   =			/ ‘SANS’,		
	                        / ‘RCMK’,			[DEFAUT]
  PRE_COND   =			/ ‘LDLT_SP’			[DEFAUT]
  PCENT_PIVOT   =		/ 20,				[DEFAUT]
				/ pcent
  REAC_PRECOND   =		/ 30,				[DEFAUT]
				/reac
  RENUM   =			/ ‘SANS’,			[DEFAUT]
  NMAX_ITER   =		        / 0,				[DEFAUT]
				/ niter				[I]
  RESI_RELA   =		        / 10-6,		[DEFAUT]
				/ resi				[R]
Итеративные решатели, основанные на внешней библиотеке PETSC: см. §3.7.
  / METHODE=’PETSC’
  ALGORITHME   =	/ ‘GMRES’,		[DEFAUT]
	                / ‘CG’,			
	                / ‘CR’,
	                / ‘GCR’,	
  PRE_COND   =		/ ‘LDLT_SP’,		[DEFAUT]	
  PCENT_PIVOT   =	/ 20			[DEFAUT]
			/ pcent
  REAC_PRECOND   =	/ 30,			[DEFAUT]
			/ reac
  RENUM   =		/ ‘SANS’,		[DEFAUT]
  / PRE_COND   =	/ ‘LDLT_INC’,				
  NIVE_REMPLISSAGE   =	/ 0,			[DEFAUT]
			/ niv
  REMPLISSAGE   =	/ 1.0,			[DEFAUT]
			/ rem
  RENUM   =		/ ‘SANS’,				
	                / ‘RCMK’		[DEFAUT]
  / PRE_COND   =	/ ‘ML’,				
			/ ‘BOOMER’,
  RENUM   =		/ ‘SANS’,		[DEFAUT]
  / PRE_COND   =	/ ‘JACOBI’,				
			/ ‘SOR’,
			/ ‘SANS’
  RENUM   =		/ ‘SANS’,		[DEFAUT]
		        / ‘RCMK’			
  NMAX_ITER   =		/ 0,			[DEFAUT]
			/ niter			[I]
  RESI_RELA   =		/ 10-6,			[DEFAUT]
			/ resi			[R]
  MATR_DISTRIBUEE   =	/ ‘OUI’,		(ограничение преиметра, см. §3.5)
		        / ‘NON’,		[DEFAUT]
Гибридный решатель на мультиобластях(конечные элементы) типа FETI: см. §3.8.
  / METHODE=’FETI’
 PARTITION   =		sdfeti				
  NMAX_ITER   =		/ 0,				[DEFAUT]
			/ niter				[I]
  REAC_RESI   =		/ 0,				[DEFAUT]
			/ nreac				[I]
  RESI_RELA   =		/ 10-6,		[DEFAUT]
			/ resi				[R]
  PRE_COND   =		/ ‘SANS’,				
		        / ‘LUMPE’,			[DEFAUT]
  SCALING   =		/ ‘SANS’,				
		        / ‘MULT’,			[DEFAUT]
  TYPE_REORTHO_DD   =	/ ‘SANS’,				
			/ ‘GSM’,			[DEFAUT]
	                / ‘GS’,				
			/ ‘IGSM’				
  NB_REORTHO_DD   =	/ 0,				[DEFAUT]
			/ nb_reortho			[I]
  RENUM   =		/ ‘METIS’,			[DEFAUT]
			/ ‘MD’,				
			/ ‘MDA’				
  VERIF_SDFETI   =	/ ‘OUI’,			[DEFAUT]
			/ ‘NON’
  TEST_CONTINU   =	/ 10-6,		[DEFAUT]
			/ test_continu			[R]
  STOCKAGE_GI   =	/ ‘CAL’,			[DEFAUT]
			/ ‘OUI’,
			/ ‘NON’
  INFO_FETI   =		/ ‘FFFFFFFFFFFFFFF’,	        [DEFAUT]
			/ info_feti			[K15]
  NB_SD_PROC0   =	/ 0,				[DEFAUT]
			/ nb_sdproc0			[I]
  ACCELERATION_SM   =	/ ‘OUI’,			[DEFAUT]
			/ ‘NON’
  NB_REORTHO_INST   =	/ 0,				[DEFAUT]
			/ nb_reortho_inst		[I]



3 Операнды

3.1 Операнд METHODE

Это ключевое слово позволяет выбрать метод решения линейных систем:

  • Прямые решатели
/ ‘MULT_FRONT’
[DEFAUT]
Прямой решатель мультифронтального типа (без поиска опорного элемента во время разложения).
Этот метод распараллелен в разделенной памяти (OpenMP) и может быть выполнен на нескольких процессорах
(из малого Astk интерфейса программы Options/Options of launching/ncpus).
/ ‘LDLT’ Прямой решатель с блочным разложением Краута (без поиска опорного элемента).
Этот решатель разбит на блоки, поэтому он может занимать мало памяти.
/ ‘MUMPS’ Прямой решатель мультифронтального типа с поиском опорного элемента.
Этот решатель вызывает библиотеку MUMPS, разработанную CERFACS/IRIT/INRIA/CNR.
Позволяет обрабатывать модели, ведущие к положительным не определенным матрицам (кроме граничных условий).
Например, «смешанные» элементы, имеющие ddls типа Лагранжа (несжимаемые элементы).
Этот метод распараллелен в распределенной памяти (MPI) и может быть выполнен на нескольких процессорах
(из малого Astk интерфейса программы Options/Options of launching/mpi_nbcpu и mpi_nbnoeud).
  • Итеративные решатели
/ ‘PCG’ Итеративный решатель на сопряженных градиентах с предобуславливанием с помощью неполного
(k-уровневого) или полного разбиения одинарной точности.
/ ‘PETSC’ Итеративные решатели, происходящие из библиотеки PETSC (Argonne National Laboratory), с различными методами предобуславливания.
Этот метод распараллелен в распределенной памяти (MPI) и может быть выполнен на нескольких процессорах
(из малого Astk интерфейса программы Options/Options of launching/mpi_nbcpu и mpi_nbnoeud).
Внимание: при последовательной несовместимости решателей PETSC и MUMPS, пердпочтение отдается MUMPS.
Часто, чтобы использовать PETSC, необходимо запустить параллельную версию Code_Aster
(так как это необходимо при использовании одного процессора)
  • Гибридный решатель
/ ‘FETI’ Гибридный решатель с разбиением на элементы типа FETI.
Метод проекции сопряженных градиентов с прдобуславливанием (GCPPC) для граничных проблем
и прямой мультифронтальный решатель для локальных решений.
Этот метод распараллелен в распределенной памяти (MPI) и может быть выполнен на нескольких процессорах
(из малого Astk интерфейса программы Options/Options of launching/mpi_nbcpu и mpi_nbnoeud)

Совет:

По умолчанию выбирается мультифронтальный метод из MULT_FRONT. Но для большей экономии времени и памяти, которая обеспечивается параллелизмом, или чтобы решить численно труудную задачу (X-FEM, несжимаемость, THM), рекомендуется использовать MUMPS. Для решения задач больших размерностей (>106, ddls), решатель PETSC с настройками по умолчанию позволяет произвести расчет, несмотря на ограничения памяти ЭВМ.

За более подробной информацией по поводу применения линейных решателей можно обратиться к документации (U2.08.03).

3.2 Параметры, общие для некоторых решателей

  SYME  =	/ ‘NON’			[DEFAUT]
		/ ‘OUI’

Этот параметр является общим для всех линейных решателей (прямые, гибридные, итеративные). Он применим только для квазистатичных, нелинейных операторов.

Если матрица линейной системы K не симметрична, ключевое слово SYME=’OUI’ позволяет привести эту матрицу к симметричному виду до решения системы. Матрица заменяется на

K ' = ½ (K + KT)

Внимание:

Задача этого ключевого слова в том, чтобы выигрывать время в течение решения линейных систем, так как прямые решатели обычно более затратны в отношении асимметричных матриц. Приведение K-матрицы к симметричному виду сказывается на решении различных линейных систем. Но эта процедура может ухудшать сходимость нелинейных алгоритмов.
  NPREC  = / nprec
	   / 8                         [DEFAUT]
  STOP_SINGULIER  =	/ ‘OUI’       [DEFAUT]
			/ ‘NON’

Эти два параметра являются общими для всех прямых линейных и гибридных решателей (LDLT, MULT_FRONT, MUMPS и FETI).

Они служат для контроля числового разложения и качества решения линейной системы. Числовое разложение матрицы может потерпеть неудачу в двух случаях: проблема построения разложенной (структурно или численно сингулярной) матрицы и численное обнаружение сингулярности (решение неустойчивой линейной системы).

Ключевые слова NPREC и STOP_SINGULIER позволяют установить порог обнаружения сингулярности и устойчивости, которые нужно принять в случае неудачи во время факторизации.

Слово nprec используется для оценки процесса обнаружения сингулярности матрицы системы, которую нужно решить. При использовании LDLT и MULT_FRONT берется абсолютная величина от nprec, а при использовании MUMPS берем полное значение nprec, так как его знак имеет значение: если nprec<0, поиск сингулярности отключается, если нет, то опция поиска активизируется. В любом случае, если значение nprec равно нулю, оно инициализируется значением по умолчанию (8).

Инициализируя nprec достаточно малым значением (1 или 2) (или большим, например 20), поиск сингулярности будет включаться очень часто (или соответственно редко).

Для LDLT, MULT_FRONT и FETI:

Если к концу разложения становится видно, что диагональный элемент d’ стал очень маленьким (по сравнению к его значению до факторизации), то матрица (вероятно) почти сингулярная. Либо, если

U4.50.01 3.2.png

это говорит о том, что в уравнении потеряно n значимых цифр.

Если n>nprec, то можно полагать, что матрица сингулярна. Если пользователь указал:

 STOP_SINGULIER=’OUI’        Программа останавливается на ошибке
 STOP_SINGULIER=’NON’	      Выполнение продолжается после передачи сообщения ALARM.
                             В этом случае качество решения не гарантируется. Использование 
                             этого параметра не рекомендовано. В нелинейных решателях потери 
                             качества не так критичны, поскольку в них все обеспечивается 
                             процессом Ньютона.

Для MUMPS:

Если по крайней мере для одного опорного элемента инфинитивная норма строки (или столбца) ниже порога 10-nprec, тогда матрица рассматривается как сингулярная.

Некоторые аспекты двух типов критериев поиска сингулярности сравниваются в документации (U2.08.03)

Замечания:

  1. Любая существенная потеря значимых цифр в течение разложения—показатель плохо формализованной задачи. Возможны несколько причин (список не исчерпывающий): недостаток граничных условий блокировки структуры, лишние линейные отношения, очень разнородные цифровые данные (слишком большие штрафные члены).
  2. Для LDLT и MULT_FRONT поиск сингулярности происходит все время, так как он совсем не ресурсозатратный.
  3. Касательно MUMPS, механизм позволяет проверить качество решения в дополнении (RESI_RELA). Таким образом была предоставлена свобода деактивировать этот критерий (выбором отрицательного nprec).
  4. В итоге прямой решатель MUMPS осуществляет двойной контроль качества по умолчанию: в линейном—RESI_RELA и NPREC, в нелинейном—критерий Ньютона и NPREC. Можно их отключить, но без особой причины не рекомендуется.

3.3 METHODE=’MULT_FRONT’

Область использования:

Универсальный решатель, используемый везде. Не рекомендуется для моделей, требующих поиска опорных элементов (смешанные конечные элементы, несжимаемые элементы и т.д.)
 ◊ RENUM =

Этот аргумент позволяет перенумеровать узлы модели, чтобы уменьшить размер факторизованной матрицы (и в итоге потребление мощности ЦПУ и памяти на размерность):

  / “METIS” [DEFAUT]	Метод классификации, основанный на вложенном разбиении. 
                        Используется внешний продукт того же имени, являющийся мировым стандартом в области. 
                        Это, в общем, самый эффективный метод (по загрузке ЦПУ и памяти).

  / “MD”	       (Минимальная степень) эта нумерация узлов минимизирует 
                       заполнение матрицы в процессе ее факторизации.

  / “MDA”	      (Приближенная минимальная степень) эта классификация в теории менее оптимальная, 
                      чем “MD” в отношении заполнения, но более экономична при вычислениях. 
                      Однако, “MD” предпочтительнее для больших моделей (больше 50 000 степеней свободы).

Заметка:

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

3.4 METHODE=’LDLT’

Область использования:

Универсальный решатель (но, по большому счету, очень медленный). Не рекомендован для моделей, требующих поиска опорного элемента (смешанные конечные элементы, несжимаемые элементы).
 ◊ RENUM=

Этот аргумент позволяет перенумеровать узлы модели, чтобы уменьшить размер факторизованной матрицы (и в итоге потребление мощности ЦПУ и памяти на размерность):

  / “SANS”	        Сохраняется первоначальный порядок, определенный в файле сетки

  / “RCMK” [DEFAUT]	Обратный алгоритм Катхилла-Макки. Этот алгоритм перенумерации 
                        часто эффективен для уменьшения памяти для составленной матрицы 
                        и для уменьшения времени факторизации этой матрицы. 

3.5 METHODE=’MUMPS’

Область использования:

Универсальный решатель.

Решатель MUMPS, разработанный CERFACS/CNR/ENSEEIHT-INPT/INRIA (право с §3 (U2.08.03)) — это прямой решатель мультифронтального типа, распараллеленный и упрочненный, потому что позволяет производить перестановку строк и столбцов матрицы для разложения. Начиная с версии MUMPS 4.10.0, продукт внедрен полностью. Для предыдущих версий (по факту временно принята только 4.9.2) вычисление детерминант, необходимое для операторов MODE_ITER_INV (опция “SEPARE”/”AJUSTE”) и INFO_MODE (метод APM), было невозможно. Вычисление останавливалось на ошибке ERREUR_F, предлагая обновить версию.

3.5.1 Функциональные параметры

 ◊ TYPE_RESOL =

Это ключевое слово позволяет выбрать тип решения MUMPS:

  / “NONSYM”	        Рекомендуется выбрать для асимметричных матриц

  / “SYMGEN”	        Рекомендуется выбрать для положительно неопределенных матриц. 
                        Это самый распространенный случай в Code_Aster из-за дуализации 
                        граничных условий коэффициентами Лагранжа.

  / “SYMDEF”	        Для положительно определенных матриц. Без поиска опорного элемента. 
                        Алгоритм быстрее и тратит меньше памяти.

  / “AUTO” [DEFAUT]	Программа выбирает “NONSYM” для асимметричных матриц 
                        и “SYMGEN” для симметричных.

Не запрещено использовать “NONSYM” для несимметричных матриц. Это вероятно повысит затратность вычислений, но эта опция дает MUMPS больше алгоритмических возможностей (перестановка, масштабирование, и т.д.). Напротив, это может представлять интерес в нелинейных решателях для симметризации несимметричной проблемы (см. параметр SYME). Это тот же тип приема, что и для параметров разгрузки FILTRAGE_MATRICE и MIXER_PRECISION.

 ◊ ELIM_LAGR2=

Это ключевое слово позволяет устранить двойственность Лагранжа из принятия в расчет граничных условий:

 / “OUI” [DEFAUT]	В расчет принимается только один множитель Лагранжа, 
                        второй только наблюдается
 / “NON”	        Используются обычные двойные матрицы

Исторически прямые решатели Code_Aster (“MULT_FRONT” и “LDLT”) не имели алгоритмов поиска опорного элемента. Чтобы избежать этой проблемы, принятие в расчет граничных условий с помощью множителей Лагранжа было модифицировано введением двойных множителей в ущерб вычислениям. Так как MUMPS умеет производить поиск опорного элемента, этот выбор в пользу дуализации граничных условий может быть поставлен под сомнение.

Этот параметр может быть временно деактивирован программой, чтобы не исказить вычисление детерминанты матрицы. Эта функциональность необходима главным образом операторам MODE_ITER_INV и INFO_MODE. Пользователь автоматически информируется об этом изменении параметра посредством специального сообщения (только в INFO=2).

  ◊ RESI_RELA  =	/ resi
			/1.d-6	[DEFAUT]	в линейном
			/-1.d0	[DEFAUT]	в нелинейном и частотном расчете

Этот параметр деактивируется отрицательным значением. Его можно менять в операторах, которым нужно контролировать качество конечного решения линейной системы (таким образом не разрозненные операторы обеспечивают основу для факторизации; например FACTORISER и INFO_MODE).

Задавая определенное положительное значение этим ключевым словом (например 10-6), пользователь отмечает, что программа хочет проверить валидность решения каждой линейной системы, решенной MUMPS (в относительном сравнении с точным решением).

Этот осторожный шаг рекомендован, когда решение не корректируется другим алгоритмическим процессом (алгоритм Ньютона, обнаружение сингулярности), а именно в линейных операторах THER_LINEAIRE и MECA_STATIQUE. В нелинейных операторах или при частотных вычислениях критерий поиска сингулярности и коррекции содержащихся алгоритмов (Ньютона или частотный решатель) являются достаточным основанием. Можно таким образом отключить этот процесс проверки (это сделано по умолчанию со значением -1).

Если относительная ошибка решения, проведенного MUMPS, выше resi, программа останавливается на ERREUR_FATALE, определяя природу проблемы и проблемные значения.

Активация этого ключевого слова инициализирует также процеcc итерационной обработки, цель которого— улучшить полученное решение. Эта постобработка является результатом установки отдельного параметра (ключевое слово POSTTRAITMENTS). Это решеине, которое получено благодаря процессу итеративного улучшения, который тестирован с помощью RESI_RELA.

3.5.2 Численные параметры

  ◊ FILTRAGE_MATRICE  =	/ filtma
			/-1.d0		[DEFECT]
  ◊ MIXER_PRECISION  =	/ “OUI”
			/ “NON”	        [DEFAUT]

Эти параметры зарезервированы для нелинейных, квазистатических операторов. Отрицательное значение filtma деактивирует функциональность.

Эти функциональности позволяют «освободить» решения, осуществленные MUMPS для того, чтобы выигрывать в производительности. Идея проста. В нелинейных случаях расчет тангенциальной матрицы может быть попорчен ошибкой. Это вероятно замедлит процесс Ньютона (по числу итераций), но если решение этой аппроксимированной матрицы менее дорогостоящее, можно выигрывать вцелом по времени (меньше элементарных операций), в использовании памяти (оперативной и даже диска, если OOC активирована) и по пропускной способности (эффект теряется, объем ввода/вывода).

Таким образом, активация функциональности FILTRAGE_MATRICE со значением filtma>0, привело Code_Aster к тому, чтобы не обеспечивать MUMPS проверкой элементов матрицы

|Kij| > filtma· (|Kii| + |Kjj|)

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

При инициализации MIXER_PRECISION значением “OUI” используется одинарная точность версии MUMPS, обеспечивая двойной точностью матриц в Aster (возможно фильтрованную с помошью FILTRAGE_MATRICE). Откуда потенциальны доходы в использовании памяти (часто 50%) и времени на уровне решения вцелом. Однако, эта уловка действительно эффективна, только если тангенциальная матрица хорошо обусловлена (η(K)<106). Если нет, то решение линейной системы слишком неопределено и нелинейный алгоритм скорее всего не сойдется.

Заметка:

  • Эти параметры для «освобождения» решений систем, линеаризованных MUMPS, входят в состав уже существующих параметров для нелинейных решателей (ключевое слово NEWTON/REAC_ITER, MATRIX). Эти семейства параметров являются полностью дополнительными, и они могут позволить сэкономить десятки процентов в потреблении мощности ЦПУ и оперативной памяти. Время, потраченное на составление шаблона шаблона из этих параметров для первого файла данных, может оказаться выигрышным, если впоследствии нужно проводить много похожих расчетов.
  • Но для того, чтобы выиграть место в памяти без особых потерь в точности вычислений, могут также быть интересны элементы, соответствующие: параллельным вычислениям (U2.08.03), параметры GESTION_MEMOIRE, MATR_DISTRIBUEE и даже RENUM.
  • Эта идея была реализована в предобуславливателе LDLT_SP оператора PCG/PETSC.
 ◊ PRETRAITMENTS=

Это ключевое слово позволяет контролировать тип предобработки системы для улучшения качества ее решения (различные стратегии балансировки элементов матрицы и перестановки ее строк и столбцов):

  / ”SANS”		Без предобработки

  / “AUTO” [DEFAUT]	MUMPS выбирает лучшую комбинацию параметров 
                        согласно ситуации.
 ◊RENUM=

Это ключевое слово позволяет контролировать перенумерацию и порядок исключения. Не все без исключения предлагаемые средства доступны. Это зависит от инсталляции MUMPS/Code_Aster. Эти утилиты разделяются на две категории: «ущербные» инструменты, посвященные использованию и поставляемые MUMPS (“AMD”, “AMF”, “QAMD”, “PORd”), и “богатые” библиотеки, более “искушенные”, которые нужно устанавливать отдельно (“METIS”, “SCOTCH”).

  / “AMD”	        Аппроксимация минимальной степени (степень минимальной 
                        аппроксимации).

  / “AMF”	        Аппроксимация минимального заполнения (заполнение 
                        приближенного минимума).

  / “QAMD”	        Вариант “AMD” (с автоматическим контролем псевдоплотности).

  / “PORD”	        Внешние инструменты перенумерации, доступные с MUMPS.

  / “METIS”	        Внешние инструменты перенумерации (доступные вместе с 
                        METHODE=’MULT_FRONT’). Это ссылочный перенумеровщик, 
                        известный с конца девяностых. Он общепризнан и 
                        обширно используется.

  / “SCOTCH”	        Внешние средства перенумерации, способные вытеснить 
                        ссылочные средства этой области (METIS).

  /“AUTO” [DEFAUT]	MUMPS выбирает лучшую комбинацию параметров соответственно проблеме и 
                        доступным программным пакетам. Если пользователь задает отдельный 
                        перенумеровщик, а последний недоступен, решатель выбирает наиболее 
                        адекватный из списка доступных, и выдается ALARM.

Заметка:

  • Внешние инструменты перенумерации имеют более широкую функциональность: разбиение графов и сеток, организация очереди заданий… Например, в Code_Aster METIS и SCOTCH также используются в операторе разбиения сеток DEFI_PART_FETI.
  • Выбор перенумеровщика имеет огромное влияние на потребление памяти и времени линейного решателя. Если нужно найти, оптимизировать, отрегулировать численные параметры, относящиеся к линейному решателю, этот параметр должен быть в числе первых среди тестируемых.
  • В частности, в течение параллельных частотных вычислений, иногда можно испытать разочарование в скоростях из-за неуместного выбора перенумеровщика. Тогда становится понятно, что выбор «сложного» перенумеровщика был лишним. Для MUMPS лучше выбрать простые “AMF” или “QAMD”, чем “METIS” (часто принятый автоматически выбором режима “AUTO”).
 ◊ POSTTRAITEMENTS=

Этот параметр используется, только если активирован RESI_RELA. Его можно применять в операторах, которым нужно контролировать качество конечного решения линейной системы (Таким образом не разрозненные операторы обеспечивают основу для факторизации; например, FACTORISER и INFO_MODE).

Это ключевое слво позволяет контролировать процедуру итеративного уточнения, цель которого улучшить качество решения (см. Ключевое слово RESI_RELA).

  / “SANS”	        Деактивация.

  / “FORCE”	        MUMPS проводит как минимум один цикл итеративного уточнения, 
                        поскольку критерий останова задается очень малым значением. 
                        Число итераций ограничивается 10.

  / “AUTO” [DEFAUT]	MUMPS делает частые повторы итеративного уточнения. 
                        Критерий останова близок к машинной точности и число итераций 
                        ограничено до 4.

Заметка:

  • Этот процесс потребляет в основном спады-подъемы, стоимость которых в терминах производительности невелика для оперативной памяти. С другой стороны они могут быть дорогостоящими для процессов вне оперативной памяти, даже не очень полезных в нелинейных случайх (алгоритм коррекции Ньютона).
  • Чтобы ограничить любые противо-производительные перепады, этот процесс «вшит» в MUMPS: как только итерация перестает приносить выигрышь менее чем в пять раз, процесс останавливается. Число отмеченных итераций (заданием INFO=2) как правило равно 1 или 2.
  • На определенных плохообусловленных точках отсчета (например perf001e), усиление этого процесса позволило достичь желаемой точности.

3.5.3 Параметры управления памятью

Чтобы выигрывать в памяти, не меняя линейный решатель (и моделизационную или вычислительную платформу), можно воспользоваться несколькими стратегиями (часто комбинируемыми):

  • С постоянной числовой точностью и сохранением времени вычислений:

параллелизм (меню Options/mpi_** из Astk) вместе с активацией (или без нее) ключевого слова MATR_DISTRIBUEE в режиме распределенного параллелизма (режим по умолчанию).

  • С постоянной числовой точностью, но с риском потерь вычислительного времени:

активация проливает свет на способности внешних ресурсов MUMPS (см. Ключевое слово GESTION_MEMOIRE ниже) или смену перенумеровщика (см. Ключевое слово RENUM выше). Также нужно заботиться о том, чтобы обеспечивать дополнительное пространство разумных размеров для поиска опорного элемента: ключевое слово PCENT_PIVOT. Часто значения этих параметров по умолчанию (GESTION_MEMOIRE=’AUTO’, RENUM=’AUTO’, и PCENT_PIVOT=20) представляют лучшие компромиссы для подстройки параметров к вашему случаю.

  • Принимая потерю точности в рамках нелинейного процесса (например STAT или DYNA_NON_LINE, MODE_ITER_SIMULT…): все параметры релаксации, относящиеся к решателю (FILTRAGE_MATRICE, MIXER_PRECISION) даже те, которые относятся собственно к нелинейному процессу (тангенциальная матрица упругости, пространство проекции в частотном анализе…).

За более подробной информацией можете обратиться к документации U2.08.03 (руководство по использованию линейных решателей) и U2.08.06 (руководство по использованию параллелизма).

  ◊ PCENT_PIVOT   =	/ pcent
			/ 2     0%	[DEFAUT]

Это ключевое слово позволяет выбрать процент памяти, которую MUMPS придержит в начале вычислений для поиска опорного элемента. Действительно, чтобы разложить матрицу в Aster, часто предпочтительно переставить две ее строки и/или столбца (см. (R6.02.03) <2.3.1). В общем, объекты информационной обработки, управляющие поиском опорного элемента, априори сложно измерять. Поэтому средства требуют от пользователя предварительной и произвольной оценки этого дополнительного пространства.

Значение по умолчанию 20%. Оно отвечает разумному количеству опорных элементов, которого достаточно для большинства вычислений Aster. Напримр, если MUMPS оценивает в 100 память, необходимую для факторизации без поиска опорного элемента, то он выделит память объемом 120 для выполнения с поиском. Значение, превышающее 50% должно оставаться исключением.

В дальнейшем, если объем памяти предоставленный для поиска опорного элемента оказывается более важным, выделенной памяти будет недостаточно, и программа потребует увеличить критерий. Тогда возможны два случая, согласно выбранному типу управления памятью (ключевым словом GESTION_MEMOIRE):

  • Если речь о режиме точности, “IN-CORE” или “OUT_OF_CORE”, вычисления останавливаются на ERREUR_FATALE и предлагаются различные временные решения.
  • Если это автоматический режим, “AUTO”, вычисления продолжаются и повторяется попытка разложения с удвоенным значением PCENT_PIVOT. До трех подобных попыток будут осуществлены в случае повторения ошибок, прежде чем будет получено ERREUR_FATALE и предложение о временном решении.

Заметка:

  • Для небольших проблем (<1000 ddls), MUMPS может переоценить требования к объему памяти. В таком случае внушительные значения PCENT_PIVOT (>100) не удивительны.
  • Если в процессе, описанном выше, пришлось менять значение PCENT_PIVOT автоматически, именно это значение будет использоваться до конца работы оператора. Предполагается, что численная сложность не будет спадать, и таким образом предпочтительно использовать это значение для поиска опорного элемента чтобы больше не тратить время на попытки во время факторизации.
  • В режиме “AUTO”, совместно с удваиванием дополнительного пространства на поиск опорного элемента, возможно придется пройти автоматически управление памятью вне оперативной области MUMPS (как если бы GESTION_MEMOIRE= явно был инициализирован как ‘OUT_OF_CORE’). Это происходит в соответствии с определенными правилами реагирования MUMPS или после третьей (и последней) попытки.
 ◊ GESTION_MEMOIRE=

Это ключевое слово позволяет выбрать режим управления памятью внешних продуктов MUMPS, даже в последнем случае, определенные объекты, управляемые Code_Aster.

Первые два режима «без подключени к сети»: никакие изменения параметров не будут производиться в режиме реального времени при возникновении проблемы. В противоположность 3-му режиму есть автоматический способ, который будет делать все (в пределах разумного), чтобы вычисления не останавливались по причине нехватки памяти. В частности, соответственно дополнительно освобожденной памяти он будет использовать режимы управления памятью как внутри, так и вне оперативной области MUMPS, даже в памти, необходимой для поиска опорного элемента (см. Ключевое слово PCENT_PIVOT).

  / “IN_CORE”          Предпочтение отдается максимальной скорости вычислений. Эта опция 
                       требует большинство пространства памяти, поскольку MUMPS позволено 
                       хранить в оперативной памяти все необходимые объекты.

  / “OUT_OF_CORE”      Предпочтение отдается максимальной экономии в потреблении памяти. 
                       Эта опция требует меньше памяти, так как здесь MUMPS вынужден 
                       загружать свои наиболее громоздкие объекты на диск.

  /“AUTO” [DEFAUT]     MUMPS навязывается автоматическое управление памятью (см IN-Core 
                       или предыдущий Out-Of-Core), которое выполняется в соответствии 
                       с размером памяти, доступной в данный момент времени. Также 
                       активизируется механизм предварительного распределения памяти, 
                       чтобы MUMPS мог получить максимум преимуществ от доступной памяти 
                       (см. параграф ниже). Это позволяет ограничить проблемы поздних 
                       распределений, чтобы улучшить процедуру поиска опорного элемента. 
                       Также можно установить два механизма автокоррекции при необходимости 
                       (увеличение PCENT_PIVOT, отключение предварительного распределения памяти).

  / “EVAL”            Вспомогательное средство с калибровкой памяти для вычислений. 
                      Предоставляется совместная сводка (см. рис. 3.1) ресурсов памяти, 
                      необходимых для вычислений Code_Aster + MUMPS, соответственно выбранному 
                      режиму управления: в оперативной памяти (In-Core) или во внешней области (Out-Of-Core). 
                      После этого вычисления останавливаются на ERREUR_FATALE, чтобы пользователь мог заново 
                      начать вычисления, выбирая протокол установки параметров, опирающийся на эти элементы.

U4.50.01 3.5.3.png

Рис. 3.1. Вид файлового сообщения в режиме “AUTO”.


Активизация Out-Of-Core способствует уменьшению памяти RAM, запрошенной процессором, но это может замедлить расчет (стоимость Ввод/Вывод RAM/Дsиск). Эта добавочная стоимость может быть значительной, когда осуществляется много спадов-подъемов (в нелинейном, например, расчет с большим шагом по времени или итерации Ньютона, поиск многочисленных собственных частот колебаний в частотном анализе). Поскольку на этих этапах алгоритма на управление памятью (RAM) тратится столько же времени, сколько на поиск данных на внешнем диске. Это тем более верно, поскольку внешний диск является общим для нескольких ядер (процессов) расчета. По этой причине предпочтительно максимальное использование In-Core режима (особенно при параллельном выполнении).

В режиме “EVAL”, предварительные оценки потребляемой памяти намного быстрее и менее затратны в памяти, чем при полном расчете. Они могут позволить измерить ее исследование на локальной машине или в интерактивном узле машины централизованно, прежде чем запускать в пакетном режиме само исследование.

Название анекдотично тем, что этот режим может также служить для грубого тестирования настроек использованных данных и/или исполнимых файлов. Если до этой процедуры все функционировало, — это скорее всего хороший знак для дальнейших вычислений.

В режиме “AUTO”, MUMPS позволено расположиться в RAM», чтобы выигрывать во времени и ограничивать последующие потребности в памяти, связанные с поиском опорного элемента. MUMPS, таким образом, сможет забрать всю память, которую посчитает нужной, даже если она будет больше, чем предполагалось изначально. Это позволяет ему справиться c вероятными последующими потребностями. Для этого Code_Aster предоставляет ему оценку доступной RAM. Эти предварительные распределения часто позволяют избавиться от необходимости на скорую руку подгонять параметр “PCENT_PIVOT”. Отсюда, несомненно — экономия времени на подготовку исследований.

В добавок, метод “AUTO”, расчет Code_Aster+MUMPS извлекает пользу действительно из всей доступной памяти: Vmpeak близок к параметризации в Astk.

С другой стороны, в двух других режимах ('IN_CORE' и 'OUT_OF_CORE'), MUMPS не имеет права располагаться в RAM. Он не заботится о том, чтобы предварительно выделить дополнительный объем памяти, выходещий за предполагаемый изначально. Это позволяет сохранить точность вычислительного процесса в случае плохой оценки доступной памяти.

Другой механизм позволяет также сгладить этот тип неприятности: если MUMPS пытается предоставлять объект размера выше действительно доступного места в памяти, делается новая попытка факторизации, пока не будет позволено выделить дополнительный объем памяти. Эта коррективная стратегия, подобная той, которая используется для параметра PCENT_PIVOT, активизирована только с режимом ”AUTO”.

Заметка:

  • В стандартных режимах (“IN_CORE” и “OUT_OF_CORE”) Code_Aster сохраняет на диск самые громоздкие объекты, связанные с линейной системой. И это для того, чтобы освободить с MUMPS максимум места в памяти RAM. Поэтому впоследствии для MUMPS будет не достаточно места для хранения данных, появится предупреждение, и программа продолжит свое выполнение. Как показывает практика, программа может завершить выполнение без эксцессов, но ценой значительных временных затрат (система обмена), или прерваться на ERREUR_FATALE. Тогда пользователь пытается подобрать альтернативы в настройках параметров режима “AUTO”.
  • Если в режиме “AUTO” этого освобожденного пространства недостаточно для полного функционирования MUMPS в оперативной памяти, на диск выгружаются все оставшиеся объекты JEVEUX. Затем, в соответствии с освобожденной таким образом памятью, активируется режим In-Core или Out-Of-Core решателя MUMPS или остановка на ошибке ERREUR_FATALE (+ советы).
  • Массовые разгрузки ранее вызванных объектов JEVEUX могут в некоторых случаях сильно замедлить выполнение программы. Это может случиться, например, в случае затора доступа к памяти диска при параллельном выполнении или при разгузке больших объемов данных (области разных временных шагов, структуры представлений…). Решение может состоять в том, чтобы занимать узлом меньше процесоров, потреблять меньше памяти (увеличить число процессоров, Out-Of-Core режим) или разделить процесс вычисления на этапы.
  • В режиме “EVAL” оценка, затем остановка осуществлены первой факторизацией матрицы с помощью MUMPS. Возможно, к примеру, на этапе прогноза для STAT_NON_LINE, или в тесте Штурма для MODE_ITER_SIMULT. Часто этого достаточно для фомирования высоких требований к памяти. Для того, чтобы, при необходимости, «откатить» эту оценку, нужно остановить текущие вычисления и использвать другой линейный решатель (например, “MULT_FRONT”) для операторов, которые хотелось бы предохранить.
 ◊ MATR_DISTRIBUEE  =	/ “OUI”
                       / “NON” [DEFAUT]

Этот параметр сейчас ограничен операторами MECA_STATIQUE, STAT_NON_LINE и он активирован только при распределенном параллелизме (AFFE_MODELE/PARTITION/ PARALLELISME!=’CENTRALISE’).

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

3.6 METHODE=’PCG’

Область применения:

Реальные симметричные проблемы, кроме тех, которые требуют обязательно обнаружение сингулярности (частотный анализ). В нелинейных случаях, если проблема действительно асимметрична, можно использовать этот решатель только для того, чтобы активизировать ключевое слово SYME.
 ◊ PRE_COND=

Это ключевое слово позволяет выбрать метод предобуславливания:

 /“LDLT_INC” [DEFAUT]  Неполное разложение LDLT (уровнем) собранной матрицы
 / “LDLT_SP”           Разложение одинарной точности с помощью внешних средств MUMPS.

Этот второй подход более дорогостоящий в терминах CPU/RAM, но и более устойчивый. Их интерес заключается в основном в их взаимодействии (см. ключевое слово REAC_PRECOND) в течение нескольких решений, если решается проблема вторых членов множественных типов (например, STAT_NON_LINE или термомеханическая последовательность с MECA_STATIQUE).

 ◊ NIVE_REMPLISSAGE  =  / niv
                        / 0   [DEFAUT]

Этот параметр относится только к предобуславливателю LDLT_INC. Матрица предобуславливания (P), использующаяся для ускорения сходимости метода сопряженных градиентов, получена более или менее полным разложением начальной матрицы (K).

Чем больше niv, тем ближе матрица P к матрице K-1 и, следовательно, быстрее сходится метод сопряженных градиентов (по числу итераций). С другой стороны, чем больше niv, тем более громоздкой для хранения становится матрица P, и более дорогими становятся итерации для CPU.

Рекомендуется использовать значение по умолчанию (niv=0). Если niv=0 не дает сходимости сопряженных градиентов, следует последовательно проверить значения niv=1, 2, 3…

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

 ◊ RENUM=

Этот аргумент позволяет перенумеровать узлы модели, чтобы уменьшить размерность факторизации (и, таким образом, потребление CPU и памяти для решения):

  / “SANS”	Сохраняется начальный порядок, заданный в файле сетки

  / “RCMK”	«Обратный алгоритм Катхилла-МакКи»; этот алгоритм перенумерации
                часто эффективен для уменьшения необходимой для собранной матрицы 
                памяти (в хранилище SKYLINE) и для уменьшения времени, необходимого 
                для факторизации матрицы.

Значение по умолчанию этого ключевого слова зависит от предобуславливателя. Только LDLT_INC использует перенумеровщик RCMK по умолчанию.

  ◊ REAC_PRECOND  =	/ reactionary
			/ 30	       [DEFAUT]

Этот параметр относится только к предобуславливателю LDLT_SP.

Этот предобуславливатель намного более дорогой, чем неполный предобуславливатель, но обладает более высокой степенью сходимости благодаря близости к реальному решению. Чтобы сделать его действительно конкурентоспособным по отношению к традиционным прямым решателям (MULT_FRONT или MUMPS двойной точности), он должен применяться в течение нескольких последующих решений. Таким образом, можно использовать эту «относительную близость» этих повторений. Для этого параметр REAC_PRECOND задает количество раз, когда предобуславливатель остается тем же, в то время как матрица задачи меняется. Пока итеративный метод PCG занимает меньше, чем reac, итераций для схождения, используется один и тот же предобуславливатель; если число итераций превышает это значение, то реализуется предуславливатель с одинарной точностью.

  ◊ PCENT_PIVOT  =	/ pcent
			/ 20	   [DEFAUT]

Этот параметр относится только к предобуславливателю LDLT_SP.

То же ключевое слово используется для MUMPS, см. §3.5.33.5.3.

  ◊ NMAX_ITER = / niter
		/ 0	  [DEFAUT]

Максимальное число итераций итеративного алгоритма решения. Если niter=0, максимум числа итераций расчитывается следующим образом:

Niter=nequ/2, где nequ — число уравнений в системе.

 ◊ RESI_RELA = / resi
               / 10-6    [DEFAUT]

Критерий сходимости алгоритма. Это относительный критерий на остатке предобуславливания:

U4.50.01 3.6.png
rm — остаток предобуславливания на m-й итерации;
f — второй член, а норма || || — обычная евклидова норма.

3.7 METHODE=’PETSC’

Область применения:

Все типы реальных проблем, кроме тех, которые требуют обязательно обнаружение сингулярности (частотный анализ).

Внимание: среди PETSC и MUMPS, несовместимых последовательно, следует выбирать MUMPS. Для использования PETSC, необходимо так же запускать параллельную версию Code_Aster (так как это необходимо для выполнения на одном процессоре).

 ◊ ALGORITHME=

Имя итеративных решателей (типа Крылова) из PETSC, доступных в Code_Aster:

  /“GMRES” [DEFECT]	“Минимальный приведенный остаток”
 
  /“CG”		        Сопряженные градиенты.

  /“CR”	                Комбинированный остаток.

  /“CGR”	        “Обобщенный сопряженный остаток”

Метод по умолчанию обеспечивает лучшее соотношение между устойчивостью и затратностью вычислений. Методы “CG” и “CR” нужны для моделей, приводящих к симметричным матрицам. Для несимметричных, в дополнении к “GMRES”, можно вызвать “GCR”, который решает матрицы произвольных конфигураций.

 ◊ PRE_COND=

Имя решателей PETSC, доступных в Code_Aster:

  / “LDLT_INC”	                 Неполная факторизация по уровню.

  / “LDLT_SP” [DEFAUT]	         Факторизация одинарной точности внешними средствами MUMPS.

  / Algebraic” Multigrid	“ml multilevel” (библиотека ml).
  
  / Algebraic” Multigrid	“BOOMER BomerAMG” (библиотека HYPRE).
  
  / “JACOBI”	                Стандартный диагональный предобуславливатель.

  / “SOR”	                “Последовательной релаксации”.

  / “SANS”	                Без предобуславливателя.

В параллельном режиме только LDLT_SP, ml, BOOMER и JACOBI процедуру предобуславливания, эквивалентную последующему режиму. Две другие, “LDLT_INC” и “SOR”, немного преобразуют расчет, используя локальные диагональные блоки с процессорами. Они проще в применении, но менее эффективны. “SANS” позволяет не применять предобуславливатель, что выгодно только во время отладки программы.

Многосеточные предобуславливатели, алгебраический ml и BOOMER, имеют очень ограниченную область применения (вычисления без множителей Лагранжа и с постоянным числом степеней свободы на узел). Однако, они очень эффективны при параллельном выполнении.

Предобуславливатель “LDLT_SP” является априори самым устойчивым, но так же и самым ресурсозатратным. Однако, вопреки другим предобуславливателям, его не приходится перекомпилировать для каждого линейного решения, что окончательно делает его конкурентоспособным. (см. ключевое слово REAC_PRECOND).

  ◊ NIVE_REMPLISSAGE=	/ niv
			/ 0 	[DEFAUT]

Этот параметр относится только к предобуславливателю LDLT_INC. Уровень заполнения предобуславливателя неполного разложения Холецкого.

 ◊ REMPLISSAGE=	/α
		/ 1.0	[DEFAUT]

Этот параметр относится только к предобуславливателю LDLT_INC.

Коэффициент роста размера предобуславливателя, в зависимости от уровня заполнения. Ссылка зафиксирована в niv=0, для которого α=0. Этот параметр берется в расчет, только если PRE_COND=’LDLT_INC’. Это значение позволяет PETSC произвести грубую оценку объема памяти, необходимого для хранения предобуславливателя. Если эта оценка слишком слаба, PETSC увеличивает объекты налету, но эта операция более дорогая.

 ◊ RENUM=	/ “SANS”
		/ “RCMK”

Перенумеровщик типа обратного алгоритма Катхилла-МакКи (как “LDLT”) чтобы ограничить заполнение неполного разложения. Значение по умолчанию этого ключевого слова зависит от типа используемого предобуславливателя. Только предобуславливатель LDLT_INC проводит перенумеровку по умолчанию (RCMK).

 ◊ REAC_PRECOND=	/ rectionary
			/ 30	[DEFAUT]

Этот параметр относится только к предобуславливателю LDLT_SP.

Этот предобуславливатель намного более дорогостоящий, чем неполный, но обладает лучшими свойствами сходимости благодаря близости к настоящему решению. Чтобы сделать его конкурентоспособным по отношению к традиционным прямым решателям (MULT_FRONT или MUMPS двойной точности), он должен применяться в течение нескольких последовательных решений.

Параметр REAC_PRECOND задает количество раз, когда предобуславливатель остается тем же, в то время как матрица задачи меняется. Пока итеративный решатель (ALGORITHME), вызванный PETSC, занимает меньше, чем reac, итераций для схождения, используется один и тот же предобуславливатель; если число итераций превышает это значение, то реализуется предуславливатель с одинарной точностью.


  ◊ PCENT_PIVOT=/ pcent
		/ 20	[DEFAUT]

Этот параметр относится только к предобуславливателю LDLT_SP.

Это то же ключевое слово, что и для решателя MUMPS, см. §3.5.33.5.3.

 ◊ NMAX_ITER=	/ iter
		/ 1	[DEFAUT]

Максимальное число итераций итеративного алгоритма решения. Если niter≤0, тогда он встраивается автоматически решателем PETSC (105).

 ◊ RESI_RELA=/ resi
             / 10-6		[DEFAUT]

Критерий сходимости алгоритма. Это относительный критерий на остатке предобуславливания:

U4.50.01 3.7.png
M-1 — предобуславливатель;
rm — остаток на итерации m;
f — это второй член, а норма || || — как правило, евклидова норма.

Заметка:

  • Критерий сходимости для PETSC оценивается по-другому, чем в PCG;
  • Когда предобуславливатель плохого качества (например, из-за плохой обусловленности задачи), критерий сходимости, использованный PETSC, может дать основания для плохих решений; вот, почему в операторах линейных расчетов проводится дополнительная проверка непредобусловленного остатка. Допустимая погрешность, выбранная для этого дополнительного критерия, равна U4.50.01 3.7 2.png.

3.8 METHODE=’FETI’

Область применения:

Метод ограничен операторами MECA_STATIQUE и STAT_NON_LINE. Ограничения таковы:
  • Нет AFFE_CHAR_LINE;
  • Нет макро-элемента;
  • Нет обобщения метода Дирихле по подобластям;
  • Нет исследования текучести;
  • Нет контактного трения;
  • Резервы моделизации и алгоритмов могут сильно сказаться на границах (кроме загрузок AFFE_CHAR_MECA, для которой спланированы все случаи): присоединенные элементы, разломы… Лучше попытаться наладить эти запутанные зоны внутри подобластей.
  • Локальные решатели, основанные на MULT_FRONT, гомогенные для каждой подобласти.
 ♦ PARTITION = sdfeti

Пользовательское имя объекта SD_FETI, описывающего разбиение в подобластях. Генерируется преимущественно вызовом операторов DEFI_PART_FETI/OPS (U4.23.05).

 ◊ NMAX_ITER = / niter
               / 0 [DEFAUT]

Максимальное число итераций, решающих краевые проблемы. Если niter=0, максимальное число итераций вычисляется следующим образом:

Niter=max(nbi/100.1), где nbi — число неизвестных краевой задачи.

 ◊ REAC_RESI = / nreac
               / 0 [DEFAUT]

Частота перезапуска вычисления остатков. Рекомендуемые значения: 10 или 20.

 ◊ RESI_RELA = / resi
               / 10-6 [DEFAUT]

Критерий сходимости алгоритма: относительный критерий на остатке, полученном в краевой задаче:

U4.50.01 3.8 1.png
rm — остаток на итерации m;
P — оператор проекции;
b — второй член, а || || — обычно евклидова норма.
 ◊ PRE_COND =

Этот аргумент позволяет выбрать тип предобуславливателя для GCPPC:

  /“SANS”	      Без предобуславливания.

  /“LUMPE” [DEFAUT]	Предобуславливание с сосредоточенными параметрами.

Обычно предобуславливатель с сосредоточенными параметрами приводит к выигрышу по числу итераций и в CPU, без потерь памяти.

 ◊ SCALING =

Этот аргумент позволяет выбрать тип масштабирования (установка масштаба), принятого для предобуславливателя. Следовательно, он учтен, только если PRE_COND отличается от “SANS”.

  /“SANS”	           Без масштабирования.

  /“MULT” [DEFAUT]	Задает масштаб путем размножения узлов на границах.

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

 ◊ TYPE_REORTHO_DD =

Этот аргумент позволяет выбрать тип реортогонализации направлений спуска (в пределах одного решения линейной системы или между разными решениями см. ACCELERATION_SM). Он относится к параметру NB_REORTHO_DD.

  /“SANS”	   Без реортогонализации медотов спуска.

  /“GS”	           Реортогонализация Грамма-Шмидта.

  /“GSM” [DEFAUT]  Модифицированная реортогонализация Грамма-Шмидта.

  /“IGSM”	   Итеративная модификация реортогонализации Грамма-Шмидта.

Эта фаза позволяет бороться со склонностью направлений спуска терять свою ортогональность. В теории “IGSM” лучше “GSM”, который еще выше, чем “GS”. На практике лучший компромисс «плата за вычисление/качество ортогональности» часто обеспечивается “GSM”.

  ◊ NB_REORTHO_DD = / nb_reortho
                    / 0 [DEFAUT]

Количество начальных направлений, использованных на фазе реортогонализации. В теории, чем оно больше, тем лучше сходимость, но тем больше и затраты памяти и производительности. Поэтому необходимо найти компромисс между этими элементами. Если nb_reortho=0, тогда это значение вычисляется следующим образом: nb_reortho=max(niter/10.5), где niter — максимальное число итераций, определенное выше.

  ◊ RENUM	    см. [§3.33.3].

  ◊ STOP_SINGULIER   см. [§3.23.2].

  ◊ NPREC	см. [§3.23.2]

  ◊ VERIF_SDFETI=	/ “OUI”	[DEFECT]
			/ “NON”

Проверяются несогласованности в выражении мени модели и имен загрузки между заданием параметров оператора, вызывающего ключевое слово SOLVER, и это обеспечивает оператору разбиение, которое остается на хранении в SD_FETI. Необходимо, чтобы имена модели были идентичными, и список загрузок привлеченного оператора соответствовал списку DEFI_PART_OPS. Если это не тот случай, и VERIF_SDFETI=’OUI’, происходит остановка на ERREUR_FATALE, если не был получен ALARME.

 ◊ TEST_CONTINU= / test_continu
                 / 10-8 [DEFAUT]

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

 ◊ STOCKAGE_GI =

Когда число подобластей увеличивается, размер объекта становится значительным, матрица GI хранит очертания границ твердого тела. Она использована на фазе прогнозирования, т.е. 10+номер_итерации_FETI×4. Чтобы позволить пользователю выбрать лучший компромисс «расход памяти/затраты CPU», ее хранение параметризировано:

  /“OUI” [DEFAUT]	Оценка расчитывается и запоминается однажды, для всех. 
                        Это требует больше памяти, но меньше временных затрат 
                        при ее использовании.

  /“NON”	        Здесь наоборот. Расчитывается при каждой необходимости.

  /“CAL”	        Выбор “OUI” или “NON” будет подсчитан автоматически. 
                        Если размер матрицы ниже, чем средний размер локальной 
                        матрицы жесткости, она сохраняется (“OUI”), если нет, 
                        пересчитывается (“NON”)
 ◊ INFO_FETI = / info_feti
               / ’FFFFFFFFFFFFFFF’ [DEFAUT]

Ключевое слово мониторинга и отладки. О значениях параметра более детально в документации (U2.08.03).

 ◊ NB_SD_PROC0 = / nb_sdproc0
                 / 0         [DEFAUT]

Параметр, используемый в параллельном режиме MPI, позволяющий выделить произвольное число подобластей нулевому (ведущему) поцессору. Это число может, таким образом, быть ниже, чем то, которое будет выделено ему процедурой автоматического распределения «подобласти/процессоры». Это позволяет разгружать их по потреблению вычислительной мощности и памяти относительно других процессоров, поскольку они должны управлять дополнительными процессами и потенциально громоздкими объектами JEVEUX (фаза реортогонализации, прогнозирование огрубленной задачи…).

Он активен, только если справедливо: nb_sdproc0>0 и nb_sdproc0<nbsd–nbproc+1 (nbproc — количество процессоров и nbsd — количество подобластей).

 ◊ ACCELERATION_SM=

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

  /“OUI” [DEFAUT]	Активация ускорения при выполнении условий (см. ниже).

  /“NON”	        Ускорение деактивировано.

Когда оно активировано, GCPPC решателя FETI начнет свой процесс не с нуля, а опираясь априори на информацию о направлениях спуска предыдущих шагов, хранящуюся в nb_reortho_inst. Таким образом, мы выигрываем по числу шагов и производительности CPU, при небольших затратах памяти (если граница относительно небольшая для размерности задачи).

Этот аргумент относится к параметру NB_REORTHO_INST и активирован, только если задача в терминах линейных систем сводима к проблеме вторых членов и активирована реортогонализация направлений спуска на каждом шаге итерации (TYPE_REORTHO_DD отличается от “SANS”).

  ◊ NB_REORTHO_INST=	/ nb_reortho_inst
			/ 0	[DEFAUT]

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

Если nb_reortho_inst=0, тогда значение этого параметра вычисляется следующим образом:

Nb_reortho_inst = max(nb_pas_temps/5,5),
где nb_pas_temps — это число шагов по времени задачи.

И, если, на шаге num_pas_temps, величина nb_reortho_inst больше, чем число предыдущих доступных шагов (т.е. на 5 шаге можем использовать только 4 предыдущих шага), ей автоматически присваивается значение:

Nb_reortho_inst=num_pas_temps – 1.