|
Язык: Фортран
TIME6T 1.0 - нахождение численных решений задачи Коши для
нестационарного уравнения Шредингера на конечном интервале
по пространственной переменной.
TIME6T 2.0 - нахождение численных решений задачи Коши для
многомерного нестационарного уравнения Шредингера.
TIME6T 1.0 - нахождение численных решений задачи Коши
для нестационарного уравнения Шредингера на конечном интервале
Подпрограмма TIME6T 1.0 находит численные решения задачи Коши
для нестационарного уравнения Шредингера на конечном интервале
по пространственной переменной
используя явное разложение Магнуса [1] оператора эволюции с дополнительными
калибровочными преобразованиями и его Паде аппроксимации, до порядка
2M (M = 1,2,3) точности по шагу временной переменной t из конечного интервала на равномерной сетке
с начальным условием .
Алгоритм, на основе которого была построена данная процедура, опубликован
в работе [2]. Для аппроксимации используется метод конечных элементов [3]
с интерполяционными полиномами Лагранжа до порядка p=8 при подходящей
гладкости решения.
Литература:
- Magnus W. Commun. Pure Appl. Math., 1954, v. 7, pp. 649-673.
- Chuluunbaatar O. et al. J. Phys. A, 2008, v. 41, pp. 295203-1-25.
- 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 задаются главной
программой и не должны изменяться пользователем.
Примечания:
- В подпрограмме TIME6T 1.0 используется динамическое распределение
памяти для одномерных массивов TOT, ZTOT, ITOT, RMESH. В тестовом
примере их размерность задана значениями MTOT=100000, MZTOT=100000,
MITOT=100000, NMESH1=5. Если пользователь задал недостаточные значения
размерности вышеуказанных массивов, то программа останавливается и
выдает диагностику о превышении размерности и указывает, на сколько
их нужно увеличить.
- Для контроля точности численного решения по шагу TAU дополнительно
вычисляется коэффициент Рунге на четырех вдвое сгущающихся сетках
с помощью подпрограммы RUNGE.
Архив программы TIME6T 1.0 с подробным описанием, исходными текстами,
примером и результатами.
TIME6T 2.0 - нахождение численных решений задачи Коши
для многомерного нестационарного уравнения Шредингера
Подпрограмма TIME6T 2.0 находит численные решения задачи Коши
для нестационарного уравнения Шредингера в d-мерном пространстве
в рамках метода Канторовича [1], используя явное разложение Магнуса [2]
оператора эволюции с дополнительными калибровочными преобразованиями и его
Паде аппроксимации, до порядка 2M (M = 1,2,3) точности по шагу временной
переменной t из конечного интервала на равномерной сетке
.
Алгоритм, на основе которого была построена данная процедура, опубликован
в работе [3]. Для аппроксимации используется метод конечных элементов [4]
с интерполяционными полиномами Лагранжа до порядка p=8 при подходящей
гладкости решения. Тестовый пример взят из работы [5].
Литература:
- Канторович Л.В., Крылов В.И. Приближенные методы высшего анализа.
Москва, Гостехиздат, 1952.
- Magnus W. Commun. Pure Appl. Math., 1954, v. 7, pp. 649-673.
- Chuluunbaatar O. et al. J. Phys. A, 2008, v. 41, pp. 295203-1-25.
- Bathe K.J. Finite element procedures in engineering analysis.
Englewood Cliffs, Prentice Hall, New York, 1982.
- 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 задается начальное условие.
Примечания:
- В подпрограмме TIME6T 2.0 используется динамическое распределение памяти
для одномерных массивов TOT, ZTOT, ITOT, RMESH. В тестовом примере их
размерность задана значениями MTOT=2 000 000, MZTOT=1 000 000,
MITOT=300 000, NMESH1=5. Если пользователь задал недостаточные значения
размерности вышеуказанных массивов, то программа останавливается и выдает
диагностику о превышении размерности и указывает, на сколько их нужно
увеличить.
- Для контроля точности численного решения по шагу TAU дополнительно
вычисляются коэффициенты Рунге на четырех вдвое сгущающихся сетках
с помощью подпрограммы RUNGE.
Архив программы TIME6T 2.0 с подробным описанием, исходными текстами,
примером и результатами.
|
|