ОБЪЕДИНЕННЫЙ   ИНСТИТУТ   ЯДЕРНЫХ   ИССЛЕДОВАНИЙ
lit БИБЛИОТЕКА   ПРОГРАММ   JINRLIB

TIME6T - пакет программ нахождения численных решений задачи Коши
для нестационарного уравнения Шредингера


Авторы: С.И.Виницкий, А.А.Гусев, О.Чулуунбаатар
eng
Вы
counter
посетитель.

Язык: Фортран


TIME6T 1.0 - нахождение численных решений fig1 задачи Коши для нестационарного уравнения Шредингера на конечном интервале fig2 по пространственной переменной.

TIME6T 2.0 - нахождение численных решений fig8 задачи Коши для многомерного нестационарного уравнения Шредингера.


TIME6T 1.0 - нахождение численных решений fig1 задачи Коши
для нестационарного уравнения Шредингера на конечном интервале

Подпрограмма TIME6T 1.0 находит численные решения fig1 задачи Коши для нестационарного уравнения Шредингера на конечном интервале fig2 по пространственной переменной

fig3

используя явное разложение Магнуса [1] оператора эволюции с дополнительными калибровочными преобразованиями и его Паде аппроксимации, до порядка 2M (M = 1,2,3) точности по шагу fig4 временной переменной t из конечного интервала fig5 на равномерной сетке fig6 с начальным условием fig7.

Алгоритм, на основе которого была построена данная процедура, опубликован в работе [2]. Для аппроксимации используется метод конечных элементов [3] с интерполяционными полиномами Лагранжа до порядка p=8 при подходящей гладкости решения.

Литература:

  1. Magnus W. Commun. Pure Appl. Math., 1954, v. 7, pp. 649-673.
  2. Chuluunbaatar O. et al. J. Phys. A, 2008, v. 41, pp. 295203-1-25.
  3. Bathe K.J. Finite element procedures in engineering analysis. Englewood Cliffs, Prentice Hall, New York, 1982.

Структура:

Тип - SUBROUTINE
Имена входа для пользователя - TIME6T
Внутренние подпрограммы - TMSOLV, ASSMBS, ASSMBM, EMASSD, ESTIFD, ADDVEC, BOUNDC, COLMHT, ERRDIM, FEGRID, MAXHT, GAULEG, NODGEN, SHAPEF, MULTC, MULTCC, REDBAC, DECOMC
Внешние подпрограммы - POTCAL, DINIT (составляются пользователем)

Обращение:

CALL TIME6T (TITLE,NPOL,TMIN,TMAX,TAU,ITORDR,IPRINT,IPRSTP,IPRITT,NMESH,RMESH,IBOUND,FNOUT,IOUT,FMATR,IOUM,

EVWFN,IOUF,TOT,ITOT,ZTOT,MTOT,MITOT,MZTOT)

INPUT: TITLE,NPOL,TMIN,TMAX,TAU,ITORDR,IPRINT,IPRSTP,IPRITT,NMESH,RMESH,IBOUND,FNOUT,RMESH,IOUT,FMATR,IOUM,
EVWFN,IOUF,TOT,ITOT,ZTOT,MTOT,MITOT,MZTOT
где:
TITLE - символьная переменная, название рабочего варианта программы.
NPOL - целая переменная, порядок интерполяционных полиномов Лагранжа.
TMIN - вещественная переменная, начальная точка временного интервала.
TMAX - вещественная переменная, конечная точка временного интервала.
TAU - вещественная переменная, шаг по временной переменной t.
ITORDR - целочисленная переменная, принимающая значения 1-3, порядок разложения Магнуса.
IPRINT - целочисленная переменная, принимающая значения 0-2, уровень печати результатов.
IPRSTP - целочисленная переменная, шаг печати решения по пространственной переменой x.
IPRITT - целочисленная переменная, шаг печати решения по временной переменой t.
NMESH - целочисленная переменная, размерность массива RMESH. Значение NMESH всегда >= 3 и нечетное.
RMESH - вещественный массив, массив RMESH содержит информацию о делении интервала [x_min,x_max] по пространственной переменой x на подынтервалы: RMESH(1) = x_min, RMESH(NMESH) = x_max, и значения RMESH(I), I=2, 4, ... , NMESH-1 устанавливают число элементов в каждом подынтервале [RMESH(I-1), RMESH(I+1)].
IBOUND - целочисленная переменная, параметр, задающий тип краевых условий в граничных точках x = x_min и x = x_max:
  = 1 - Дирихле - Дирихле;
  = 2 - Дирихле - Нейман;
  = 3 - Нейман - Дирихле;
  = 4 - Нейман - Нейман.
FNOUT - символьная переменная, название файла, в котором печатаются полученные численные результаты.
IOUT - целочисленная переменная, номер выходного логического устройства FNOUT.
FMATR - символьная переменная, название файла, в котором хранятся значения используемых матриц.
IOUM - целочисленная переменная, номер выходного логического устройства FMATR.
EVWFN - символьная переменная, название файла, в котором печатаются значения узловых точек и полученные численные решения в этих точках. Эта опция используется только, если IOUF > 0.
IOUF - целочисленная переменная, номер выходного логического устройства EVWFN.
TOT - вещественный массив, рабочий вектор.
ITOT - целочисленный массив, рабочий вектор.
ZTOT - комплексный массив, рабочий вектор.
MTOT - целочисленная переменная, размерность массива TOT.
MITOT - целочисленная переменная, размерность массива ITOT.
MZTOT - целочисленная переменная, размерность массива ZTOT.

OUTPUT: WRITE(IOUF) NN,NGRID,TT,TAU,(XGRID(J),J=1,NGRID),(ZU(J),J=1,NN)

NGRID - целочисленная переменная, число конечно-элементных узлов.
NN - целочисленная переменная, число конечно-элементных узлов численного решения.
TT - вещественная переменная, значения временной переменной t.
TAU - вещественная переменная, шаг по временной переменной t.
XGRID - вещественный массив, содержащий значения конечно-элементных узлов.
ZU - комплексный массив, содержащий вычисленное решение.

Пример 1: подпрограмма POTCAL задания потенциальной функции f(x,t) = (4 - 3 * exp(-t)) * x**2 / 2 .

       SUBROUTINE POTCAL(RG,TT,TAU,DA,HH,DS,SS,ITORDR)
       IMPLICIT REAL*8 (A-H,O-Z)
       DATA ZERO / 0.D0 /, ONE / 1.D0 /
       HH = (4 - 3 * DEXP(-TT)) * RG**2 / 2
       SS = ZERO
       DA = ONE / 2
       DS = ZERO
       IF (ITORDR .GE. 2) THEN
          F1 = -3 * DEXP(-TT) / 24 * RG**2 / 2
          HH = HH + TAU**2 * F1
          F1 =  3 * DEXP(-TT) / 12 * RG**2 / 2
          SS = SS + TAU**2 * F1
       END IF
       IF (ITORDR .GE. 3) THEN
          F1 = -3 * DEXP(-TT) * RG**2 / 2 / 1920
     1       + ( 3 * DEXP(-TT) * RG)**2 / 1440
     2       - (-3 * DEXP(-TT) * RG) * (4 - 3 * DEXP(-TT)) * RG / 720
          HH = HH + TAU**4 * F1
          F1 = 3 * DEXP(-TT) * RG**2 / 2 / 480
     1       + (3 * DEXP(-TT) * RG) * (4 - 3 * DEXP(-TT)) * RG / 720
          SS = SS + TAU**4 * F1
          DA = DA + (- 3 * DEXP(-TT)) * TAU**4 / 720
          DS = DS - (  3 * DEXP(-TT)) * TAU**4 / 720
       END IF
       RETURN
       END
RG - вещественная переменная, значение пространственной переменной x.
TT - вещественная переменная, значение временной переменной t.
TAU - вещественная переменная, шаг по временной переменной t.
HH - вещественная переменная, содержит часть оператора A^(M)_k без дифференциального оператора при значении M=ITORDR.
SS - вещественная переменная, содержит часть оператора S^(M)_k без дифференциального оператора при значении M=ITORDR.
DA - вещественная переменная, содержит коэффициенты при дифференциальных операторах оператора A^(M)_k при значении M=ITORDR.
DA = 1/2 при ITORDR = 1 и 2, а DA = 1/2 + f_{xxtt}(x,t) * TAU**4 / 720 при ITORDR = 3.
DS - вещественная переменная, содержит коэффициенты при дифференциальных операторах оператора S^(M)_k при значении M=ITORDR.
DS = 0 при ITORDR = 1 и 2, а DS = - f_{xxt}(x,t) * TAU**4 / 720 при ITORDR = 3.

Здесь глобальные переменные RG, TT, TAU задаются главной программой и не должны изменяться пользователем.

Пример 2: подпрограмма DINIT задания начального условия psi_0(x) = sqrt(sqrt(1 / pi)) * exp( - (x - sqrt(2))**2 / 2) .

       SUBROUTINE DINIT(KEY,NN,NGRID,XGRID,ZU1)
       IMPLICIT REAL*8 (A-H,O-Y)
       IMPLICIT COMPLEX*16 (Z)
       DIMENSION ZU1(NN),XGRID(NGRID)
       DATA ONE / 1.D0 /, TWO / 2.D0 /
       PI = DACOS(- ONE)
       FG = DSQRT(DSQRT(ONE / PI))
       DO I = 1 , NN
          X = XGRID(I + KEY)
          ZU1(I) = FG * DEXP( - (X - DSQRT(TWO))**2 / 2)
       END DO
       RETURN
       END

KEY - целочисленная переменная, KEY = 0, если IBOUND >= 3, иначе KEY = 1.
Здесь глобальные переменные KEY, NN, NGRID, XGRID задаются главной программой и не должны изменяться пользователем.

Примечания:

  1. В подпрограмме TIME6T 1.0 используется динамическое распределение памяти для одномерных массивов TOT, ZTOT, ITOT, RMESH. В тестовом примере их размерность задана значениями MTOT=100000, MZTOT=100000, MITOT=100000, NMESH1=5. Если пользователь задал недостаточные значения размерности вышеуказанных массивов, то программа останавливается и выдает диагностику о превышении размерности и указывает, на сколько их нужно увеличить.
  2. Для контроля точности численного решения по шагу TAU дополнительно вычисляется коэффициент Рунге на четырех вдвое сгущающихся сетках с помощью подпрограммы RUNGE.

Архив программы TIME6T 1.0 с подробным описанием, исходными текстами, примером и результатами.


TIME6T 2.0 - нахождение численных решений fig8 задачи Коши
для многомерного нестационарного уравнения Шредингера

Подпрограмма TIME6T 2.0 находит численные решения fig8 задачи Коши для нестационарного уравнения Шредингера в d-мерном пространстве

fig9

в рамках метода Канторовича [1], используя явное разложение Магнуса [2] оператора эволюции с дополнительными калибровочными преобразованиями и его Паде аппроксимации, до порядка 2M (M = 1,2,3) точности по шагу fig4 временной переменной t из конечного интервала fig5 на равномерной сетке
fig6 .

Алгоритм, на основе которого была построена данная процедура, опубликован в работе [3]. Для аппроксимации используется метод конечных элементов [4] с интерполяционными полиномами Лагранжа до порядка p=8 при подходящей гладкости решения. Тестовый пример взят из работы [5].

Литература:

  1. Канторович Л.В., Крылов В.И. Приближенные методы высшего анализа. Москва, Гостехиздат, 1952.
  2. Magnus W. Commun. Pure Appl. Math., 1954, v. 7, pp. 649-673.
  3. Chuluunbaatar O. et al. J. Phys. A, 2008, v. 41, pp. 295203-1-25.
  4. Bathe K.J. Finite element procedures in engineering analysis. Englewood Cliffs, Prentice Hall, New York, 1982.
  5. Chuluunbaatar O. et al. Phys. Rev E ,2008, v.78, pp. 017702-1-4.

Структура:

Тип - SUBROUTINE
Имена входа для пользователя - TIME6T
Внутренние подпрограммы - TMSOLV, ASSMBN, ASSMBT, EMASSD, ESTIFD, ESTIFN, ESTITD, ESTITN, ADDVEC, HQPOTN, SGPOTN, BOUNDC, COLMHT, ERRDIM, FEGRID, MAXHT, GAULEG, NODGEN, SHAPEF, MULTC, MULTCC, REDBAC, DECOMC
Внешние подпрограммы - POTCAL, POTTIM, DINIT (составляются пользователем)

Обращение:

CALL TIME6T (TITLE,MDIM,IDIM,NPOL,TMIN,TMAX,TAU,ITORDR,IPRINT,IPRSTP,IPRITT,NMESH,RMESH,IBOUND,FNOUT,IOUT,
POTEN,IOUP,POTTM,IOUD,FMATR,IOUM,EVWFN,IOUF, TOT,ITOT,ZTOT,MTOT,MITOT,MZTOT)

INPUT: TITLE,MDIM,IDIM,NPOL,TMIN,TMAX,TAU,ITORDR,IPRINT,IPRSTP,IPRITT,NMESH,RMESH,IBOUND,FNOUT,IOUT,POTEN,
IOUP,POTTM,IOUD,FMATR,IOUM,EVWFN,IOUF,TOT,ITOT,ZTOT,MTOT,MITOT,MZTOT
где:
TITLE - символьная переменная, название рабочего варианта программы.
MDIM - целая переменная, число уравнений.
IDIM - целая переменная, размерность пространства.
NPOL - целая переменная, порядок интерполяционных полиномов Лагранжа.
TMIN - вещественная переменная, начальная точка временного интервала.
TMAX - вещественная переменная, конечная точка временного интервала.
TAU - вещественная переменная, шаг по временной переменной t.
ITORDR - целочисленная переменная, принимающая значения 1-3, порядок разложения Магнуса.
IPRINT - целочисленная переменная, принимающая значения 0-2, уровень печати результатов.
IPRSTP - целочисленная переменная, шаг печати решения по пространственной переменой x.
IPRITT - целочисленная переменная, шаг печати решения по временной переменой t.
NMESH - целочисленная переменная, размерность массива RMESH. Значение NMESH всегда >= 3 и нечетное.
RMESH - вещественный массив, массив RMESH содержит информацию о делении интервала [0,r_max] по пространственной переменой r на подынтервалы: RMESH(1) = r, RMESH(NMESH) = r_max, и значения RMESH(I), I=2, 4, ... , NMESH-1 устанавливают число элементов в каждом подынтервале [RMESH(I-1), RMESH(I+1)].
IBOUND - целочисленная переменная, параметр, задающий тип краевых условий в граничных точках r = 0 и r = r_max:
  = 1 - Дирихле - Дирихле;
  = 2 - Дирихле - Нейман;
  = 3 - Нейман - Дирихле;
  = 4 - Нейман - Нейман.
FNOUT - символьная переменная, название файла, в котором печатаются полученные численные результаты.
IOUT - целочисленная переменная, номер выходного логического устройства FNOUT.
POTEN - символьная переменная, название файла, в котором хранятся значения используемых потенциальных матриц.
IOUP - целочисленная переменная, номер выходного логического устройства POTEN.
POTTM - символьная переменная, название файла, в котором хранятся значения используемых потенциальных матриц.
IOUD - целочисленная переменная, номер выходного логического устройства POTTM.
FMATR - символьная переменная, название файла, в котором хранятся значения используемых матриц.
IOUM - целочисленная переменная, номер выходного логического устройства FMATR.
EVWFN - символьная переменная, название файла, в котором печатаются значения узловых точек и полученные численные решения в этих точках. Эта опция используется только, если IOUF > 0.
IOUF - целочисленная переменная, номер выходного логического устройства EVWFN.
TOT - вещественный массив, рабочий вектор.
ITOT - целочисленный массив, рабочий вектор.
ZTOT - комплексный массив, рабочий вектор.
MTOT - целочисленная переменная, размерность массива TOT.
MITOT - целочисленная переменная, размерность массива ITOT.
MZTOT - целочисленная переменная, размерность массива ZTOT.

OUTPUT: WRITE(IOUF) NN,NGRID,TT,TAU,(XGRID(J),J=1,NGRID),(ZU(J),J=1,NN)

NGRID - целочисленная переменная, число конечно-элементных узлов.
NN - целочисленная переменная, число конечно-элементных узлов численного решения.
TT - вещественная переменная, значения временной переменной t.
TAU - вещественная переменная, шаг по временной переменной t.
XGRID - вещественный массив, содержащий значения конечно-элементных узлов.
ZU - комплексный массив, содержащий вычисленное решение.

В подпрограмме POTCAL задаются потенциальные матрицы V, Q.
В подпрограмме POTTIM задаются потенциальные матрицы G, Z.
В подпрограмме DINIT задается начальное условие.

Примечания:

  1. В подпрограмме TIME6T 2.0 используется динамическое распределение памяти для одномерных массивов TOT, ZTOT, ITOT, RMESH. В тестовом примере их размерность задана значениями MTOT=2 000 000, MZTOT=1 000 000, MITOT=300 000, NMESH1=5. Если пользователь задал недостаточные значения размерности вышеуказанных массивов, то программа останавливается и выдает диагностику о превышении размерности и указывает, на сколько их нужно увеличить.
  2. Для контроля точности численного решения по шагу TAU дополнительно вычисляются коэффициенты Рунге на четырех вдвое сгущающихся сетках с помощью подпрограммы RUNGE.

Архив программы TIME6T 2.0 с подробным описанием, исходными текстами, примером и результатами.




home up e-mail