Gauss y matrices dispersas
Adaptado por José Luis Gómez Muñoz
http://homepage.cem.itesm.mx/jose.luis.gomez Basado en el trabajo de John H. Mathews
http://math.fullerton.edu/mathews/n2003/GalerkinMod.html
también en la sección 11.5 “El método de Rayleigh-Ritz” del libro de Richard L. Burden y J. Douglas Faires, “Análisis numérico” 9a. edición, editorial Cengage, págs 696-711
y finalmente también en la sección 6.2 “Galerkin’s method with piecewise polynomials” del libro de Kenneth Eriksson, D. Estep, P. Hansbo & C. Johnson, “Computational Differential Equations” Volumen 1, Cambridge University Press, 1997.
También revisar el capítulo 2 del libro: J.N. Reddy
An Introduction to the Finite Element Method, 3rd Edition McGraw-Hill
Se va a calcular una solución aproximada a una ecuación diferencial ordinaria, lineal e inhomogénea, - d
dx IpHxL
d
dx yHxLM+qHxLyHxL=fHxL, con las condiciones de frontera
yHaL=ya, yHbL=yb, como se muestra a continuación :
In[1]:= Clear@x, y, p, q, f, a, bD; p@x_D:=x2; q@x_D:=30; f@x_D:= −14 x; a=0.0; b=1.0; ya=0.0; yb=0.5; Print@TraditionalForm@− ∂xHp@xD∂xy@xDL+q@xD∗y@xDf@xDDD;
Print@TraditionalForm@y@aDyaDD;
Print@TraditionalForm@y@bDybDD;
x2H−yHxLL−2x yHxL+30yHxL−14x yH0.L0.
Lista de nodos (partición del dominio a§x§b)
In[12]:=
Clear@n, j, coordsD;
n=7;
coords=TableBa+Hb−aL Log@jD
Log@nD,8j, 1, n<F
Out[14]=
80., 0.356207, 0.564575, 0.712414, 0.827087, 0.920782, 1.<
Representación geométrica del mallado del dominio a§x§b, con números para identificar los nodos y los elementos:
In[15]:=
distancia=Hb−aL ê H6∗nL;
gnodos=:PointSize@LargeD, Thick,
Table@8RGBColor@0, 0.6, jênD, Line@
88coords@@jDD, distancia<,8coords@@j+1DD, distancia<<D<,8j, 1, n−1<D,
TableB:RGBColor@0, 0.6, jênD, TextBj,:coords@@jDD+coords@@j+1DD
2 ,
distancia>,80,−3<F>,8j, 1, n−1<F,
Table@8RGBColor@jên, 0, 0.6D, Point@8coords@@jDD, distancia<D<,8j, 1, n<D,
Table@8RGBColor@jên, 0, 0.6D,
Text@j,8coords@@jDD, distancia<,80,−2<D<,8j, 1, n<D
>;
Graphics@gnodos, Axes→TrueD
Out[17]= 1 1 2 2 3 3 4 4 5 5 6 6 7
0.2 0.4 0.6 0.8 1.0
0.04 0.06
Los nodos “incidentes” de cada elemento:
In[18]:=
incidentes=Table@8j, j+1<,8j, 1, n−1<D
Out[18]=
La solución aproximada FHxL será una combinación lineal de ciertas funciones linealmente independientes, llamadas funciones base: FHxL=⁄nj=1c
jfjHxL. Las funciones base fjHxL usadas en el método de Elemento Finito tienen soporte local, lo que quiere decir que cada una es distinta de cero sólo en una pequeña parte del dominio, entre tres nodos consecutivos:
In[19]:= Clear@φ, xD; φ1@x_D:= coords@@2DD−x coords@@2DD−a a<x≤ coords@@2DD 0 True ; φn@x_D:= x−coords@@n−1DD b−coords@@n−1DD coords@@n−1DD<x≤b 0 True ; φj_@x_D:= x−coords@@j−1DD
coords@@jDD−coords@@j−1DD coords@@j−1DD<x≤coords@@jDD coords@@j+1DD−x
coords@@j+1DD−coords@@jDD coords@@jDD<x≤ coords@@j+1DD
0 True
;
funciones=TableAφj@xD,8j, 1, n<E;
Table@Plot@funciones@@jDD,8x, a, b<, PlotRange→All,
PlotStyle→8Red, Thick<, Epilog→gnodosD,8j, 1, n<D
Out[24]= : 0.2 0.4 0.6 0.8 1.0 0.2 0.4 0.6 0.8 1.0 1 2 3 4 5 6 1 2 3 4 5 6 7 , 0.2 0.4 0.6 0.8 1.0 0.2 0.4 0.6 0.8 1.0 1 2 3 4 5 6 1 2 3 4 5 6 7 , 0.2 0.4 0.6 0.8 1.0 0.2 0.4 0.6 0.8 1.0 1 2 3 4 5 6 1 2 3 4 5 6 7 , 0.2 0.4 0.6 0.8 1.0 0.2 0.4 0.6 0.8 1.0 1 2 3 4 5 6 1 2 3 4 5 6 7 , 0.2 0.4 0.6 0.8 1.0 0.2 0.4 0.6 0.8 1.0 1 2 3 4 5 6 1 2 3 4 5 6 7 , 0.2 0.4 0.6 0.8 1.0 0.2 0.4 0.6 0.8 1.0 1 2 3 4 5 6 1 2 3 4 5 6 7 , 0.2 0.4 0.6 0.8 1.0 0.2 0.4 0.6 0.8 1.0 1 2 3 4 5 6 1 2 3 4 5 6 7 >
A continuación se muestran juntas todas las funciones base:
In[25]:=
Plot@funciones,8x, a, b<, Epilog→gnodosD
Out[25]= 0.2 0.4 0.6 0.8 1.0 0.2 0.4 0.6 0.8 1.0 1 2 3 4 5 6 1 2 3 4 5 6 7
La solución aproximada tendrá la forma FHxL=⁄nj=1c
jfjHxL. El objetivo será encontrar los coeficientes cj que den la mejor aproximación a la solución de la ecuación diferencial: In[26]:= Clear@Φ, cD; Φ@x_D:= ‚ j=1 n cj∗ φj@xD;
Print@"Forma de la aproximación a la solución:"D;
Print@"Φ@xD=", TraditionalForm@Φ@xDDD;
Forma de la aproximación a la solución:
Φ@xD=c1 2.80735H0.356207−xL 0.<x≤0.356207 0 True + c2 2.80735Hx+0.L 0.<x≤0.356207 4.7992H0.564575−xL 0.356207<x≤0.564575 + c3 4.7992Hx−0.356207L 0.356207<x≤0.564575 6.7641H0.712414−xL 0.564575<x≤0.712414 + c4 6.7641Hx−0.564575L 0.564575<x≤0.712414 8.72044H0.827087−xL 0.712414<x≤0.827087 + c5 8.72044Hx−0.712414L 0.712414<x≤0.827087 10.673H0.920782−xL 0.827087<x≤0.920782 + c6 10.673Hx−0.827087L 0.827087<x≤0.920782 12.6234H1.−xL 0.920782<x≤1. + c7 12.6234Hx−0.920782L 0.920782<x≤1. 0 True
En el Método de Elemento Finito (MEF, o FEM por sus siglas en Inglés) el dominio es dividido en elementos. Cada elemento contiene partes de las funciones base que no valen cero dentro del elemento:
In[30]:=
Table@
Plot@funciones,
8x, coords@@First@incidentes@@jDD D DD, coords@@Last@incidentes@@jDD D DD<,
PlotLabel→"Elemento: "<>ToString@jD,
PlotRange→88a, b<, All<, Epilog→gnodosD,
8j, 1, n−1< D Out[30]= : 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0 Elemento: 1 1 2 3 4 5 6 1 2 3 4 5 6 7 , 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0 Elemento: 2 1 2 3 4 5 6 1 2 3 4 5 6 7 , 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0 Elemento: 3 1 2 3 4 5 6 1 2 3 4 5 6 7 , 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0 Elemento: 4 1 2 3 4 5 6 1 2 3 4 5 6 7 , 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0 Elemento: 5 1 2 3 4 5 6 1 2 3 4 5 6 7 , 0.2 0.4 0.6 0.8 1.0 0.0 0.2 0.4 0.6 0.8 1.0 Elemento: 6 1 2 3 4 5 6 1 2 3 4 5 6 7 >
La ecuación diferencial puede escribirse de la forma:
- d
dx IpHxL
d
dx yHxLM+qHxLyHxL-fHxL=0
Si reemplazamos la solución aproximada FHxL en lugar de la solución exacta yHxL en el lado izquierdo de la ecuación anterior, el resultado ya no será exactamente cero. En su lugar obtendremos una función conocida como residuo, rHxL:
- d
dx IpHxL
d
dx FHxLM+qHxLFHxL-fHxL=rHxL
El método de Bubnov-Galerkin consiste en encontrar la combinación lineal
FHxL=⁄nj=1c
jfjHxL cuyo residuo rHxL tenga componente igual a cero en el
subespacio generado por las funciones base. Esto significa que el producto interno del residuo por cada función base debe ser cero. En el Método de Elemento Finito
este cálculo se hace elemento por elemento: ŸelementofjHxLrHxL„x=0
reemplazando la expresión para rHxL en el integrando obtenemos:
-ŸelementofjHxL dxd IpHxL dxd FHxLM„x+ŸelementofjHxL HqHxLFHxL-fHxLL„x=0 Sin embargo la forma de la aproximación FHxL=⁄nj=1c
jfjHxL que estamos
utilizando en este ejemplo no tiene segunda derivada. Usando integración por partes se obtiene una expresión equivalente a la anterior, pero que sólo involucra primeras derivadas: ŸelementopHxL dΦHxL d x dφjHxL d x x+ Ÿelementoφj HxL Hq HxL Φ HxL−fHxLL x = 0
al evaluar esas integrales para cada función base, φj, se obtiene un sistema de
ecuaciones para los parámetros cj que corresponden a las funciones que son diferentes de cero dentro del elemento. Estas ecuaciones todavía no toman en cuenta las condiciones de frontera. En este documento, las integrales se calcularán usando la cuadratura de Gauss. Abajo se muestra este procedimiento (cálculo de las integrales con cuadratura de Gauss) para uno de los elementos:
In[31]:= integrationweights=NB:5 9, 8 9, 5 9>F; integrationpoints=NB:− 3 5 , 0, 3 5 >F; elemento=2;
nodoini=First@incidentes@@elementoDD D;
nodofin=Last@incidentes@@elementoDD D;
xini=coords@@nodoiniDD;
xfin=coords@@nodofinDD;
H∗ Below, ξ is a local variable inside the element, −1≤ξ≤1 ∗L
integrationvar@ξ_D:= H1− ξL 2 xini + H1+ ξL 2 xfin ; integrationfunction@u_, k_D:=p@uD∗ Φ'@uD∗ φk'@uD+ φk@uD∗Hq@uD∗ Φ@uD−f@uDL; ecuaciones= Table@
0.5∗Hxfin−xiniL∗Sum@integrationweights@@jDD∗
integrationfunction@integrationvar@integrationpoints@@jDD D, kD,
8j, 1, Length@integrationpointsD<D==0,
8k, 1, n<D;
ecuaciones=Expand@N@ecuacionesDD;
Print@"Ecuaciones sin condiciones de frontera"D;
Print@"Elemento:", elementoD;
Print@TraditionalForm@TableForm@ecuacionesDDD
Ecuaciones sin condiciones de frontera Elemento:2 True 3.11828c2+0.00723589c3+0.6208620. 0.00723589c2+3.11828c3+0.7221680. True True True True
La matriz y el vector del sistema de ecuaciones son guardados en memoria como arreglos dispersos (SparseArray), es decir, sólo se guardan en memoría los
elementos diferentes de cero:
In[45]:=
ecuaciones=ReplaceAll@ecuaciones, True→0D;
parametros=TableAcj,8j, 1, n<E;
8v, m<=N@ CoefficientArrays@ecuaciones, parametrosD D;
8ArrayRules@mD, ArrayRules@−vD<
Out[48]=
8882, 2<→3.11828,82, 3<→0.00723589,83, 2<→0.00723589,
A continuación se calculan las matrices y vectores de carga para todos los elementos en este ejemplo:
In[49]:=
parametros=TableAcj,8j, 1, n<E;
matrices=8<; cargas=8<; integrationweights=NB:5 9, 8 9, 5 9>F; integrationpoints=NB:− 3 5 , 0, 3 5 >F; DoB
nodoini=First@incidentes@@elementoDD D;
nodofin=Last@incidentes@@elementoDD D;
xini=coords@@nodoiniDD;
xfin=coords@@nodofinDD;
H∗ Below, ξ is a local variable inside the element, −1≤ξ≤1 ∗L
integrationvar@ξ_D:= H1− ξL 2 xini + H1+ ξL 2 xfin ; integrationfunction@u_, k_D:=p@uD∗ Φ'@uD∗ φk'@uD+ φk@uD∗Hq@uD∗ Φ@uD−f@uDL; ecuaciones= Table@
0.5∗Hxfin−xiniL∗Sum@integrationweights@@jDD∗
integrationfunction@integrationvar@integrationpoints@@jDD D, kD,
8j, 1, Length@integrationpointsD<D==0,
8k, 1, n<D;
ecuaciones=ReplaceAll@ecuaciones, True→0D;
8v, m<=N@ CoefficientArrays@ecuaciones, parametrosD D;
AppendTo@matrices, mD;
AppendTo@cargas,−vD;
Print@"Matriz dispersa y vector disperso para elemento:", elementoD;
Print@ArrayRules@mD, " ", ArrayRules@−vDD,
Matriz dispersa y vector disperso para elemento:1
881, 1<→3.68081,81, 2<→1.6623,82, 1<→1.6623,82, 2<→3.68081,8_, _<→0.<
881<→ −0.296062,82<→ −0.592123,8_<→0.< Matriz dispersa y vector disperso para elemento:2
882, 2<→3.11828,82, 3<→0.00723589,83, 2<→0.00723589,83, 3<→3.11828,8_, _<→0.<
882<→ −0.620862,83<→ −0.722168,8_<→0.< Matriz dispersa y vector disperso para elemento:3
883, 3<→4.24827,83, 4<→ −2.03068,84, 3<→ −2.03068,84, 4<→4.24827,8_, _<→0.<
883<→ −0.635263,84<→ −0.686262,8_<→0.< Matriz dispersa y vector disperso para elemento:4
884, 4<→6.32329,84, 5<→ −4.6032,85, 4<→ −4.6032,85, 5<→6.32329,8_, _<→0.<
884<→ −0.602547,85<→ −0.63323,8_<→0.< Matriz dispersa y vector disperso para elemento:5
885, 5<→9.09636,85, 6<→ −7.69093,86, 5<→ −7.69093,86, 6<→9.09636,8_, _<→0.<
885<→ −0.56294,86<→ −0.583424,8_<→0.< Matriz dispersa y vector disperso para elemento:6
886, 6<→12.442,86, 7<→ −11.2537,87, 6<→ −11.2537,87, 7<→12.442,8_, _<→0.<
886<→ −0.525239,87<→ −0.539882,8_<→0.<
A continuación las ecuaciones de todos los elementos se suman para obtener un único sistema de ecuaciones para todos los parámetros cj. Este procedimiento se conoce como ensamblado de la matriz global. El sistema de ecuaciones que se obtiene todavía no incluye las condiciones de frontera, por eso este sistema no tiene solución; la matriz es singular:
In[55]:=
matrizGlobal=Total@matricesD;
cargaGlobal=Total@cargasD;
Print@
"Matriz dispersa y vector disperso globales, sin condiciones de frontera"D;
Print@ArrayRules@matrizGlobalD, "\n", ArrayRules@cargaGlobalDD
Print@"Ecuaciones globales sin condiciones de frontera"D;
Print@MatrixForm@matrizGlobalD, ".",
MatrixForm@parametrosD, "==",
MatrixForm@cargaGlobalD
Matriz dispersa y vector disperso globales, sin condiciones de frontera 881, 1<→3.68081,81, 2<→1.6623,82, 2<→6.79909,82, 3<→0.00723589,82, 1<→1.6623, 83, 3<→7.36655,83, 4<→ −2.03068,83, 2<→0.00723589,84, 4<→10.5716,84, 5<→ −4.6032, 84, 3<→ −2.03068,85, 5<→15.4196,85, 6<→ −7.69093,85, 4<→ −4.6032,86, 6<→21.5384, 86, 7<→ −11.2537,86, 5<→ −7.69093,87, 6<→ −11.2537,87, 7<→12.442,8_, _<→0.< 881<→ −0.296062,82<→ −1.21298,83<→ −1.35743,84<→ −1.28881, 85<→ −1.19617,86<→ −1.10866,87<→ −0.539882,8_<→0.< Ecuaciones globales sin condiciones de frontera
3.68081 1.6623 0. 0. 0. 0. 0. 1.6623 6.79909 0.00723589 0. 0. 0. 0. 0. 0.00723589 7.36655 −2.03068 0. 0. 0. 0. 0. −2.03068 10.5716 −4.6032 0. 0. 0. 0. 0. −4.6032 15.4196 −7.69093 0. 0. 0. 0. 0. −7.69093 21.5384 −11.2537 0. 0. 0. 0. 0. −11.2537 12.442 . c1 c2 c3 c4 c5 c6 c7 == −0.296062 −1.21298 −1.35743 −1.28881 −1.19617 −1.10866 −0.539882
A continuación se insertan las condiciones de frontera, reemplazando a las ecuaciones correspondientes:
In[61]:=
matrizGlobal@@1DD=Prepend@Table@0,8j, 2, n<D, 1D;
cargaGlobal@@1DD=ya;
matrizGlobal@@nDD=Append@Table@0,8j, 2, n<D, 1D;
cargaGlobal@@nDD=yb;
Print@
"Matriz dispersa y vector disperso globales, CON condiciones de frontera"D;
Print@ArrayRules@matrizGlobalD, "\n", ArrayRules@cargaGlobalDD
Print@"Ecuaciones CON condiciones de frontera"D;
Print@MatrixForm@matrizGlobalD, ".",
MatrixForm@parametrosD, "==",
MatrixForm@cargaGlobalD
Matriz dispersa y vector disperso globales, CON condiciones de frontera 881, 1<→1,82, 1<→1.6623,82, 2<→6.79909,82, 3<→0.00723589,83, 2<→0.00723589, 83, 3<→7.36655,83, 4<→ −2.03068,84, 3<→ −2.03068,84, 4<→10.5716, 84, 5<→ −4.6032,85, 4<→ −4.6032,85, 5<→15.4196,85, 6<→ −7.69093, 86, 5<→ −7.69093,86, 6<→21.5384,86, 7<→ −11.2537,87, 7<→1,8_, _<→0.< 882<→ −1.21298,83<→ −1.35743,84<→ −1.28881, 85<→ −1.19617,86<→ −1.10866,87<→0.5,8_<→0.< Ecuaciones CON condiciones de frontera
1 0. 0. 0. 0. 0. 0. 1.6623 6.79909 0.00723589 0. 0. 0. 0. 0. 0.00723589 7.36655 −2.03068 0. 0. 0. 0. 0. −2.03068 10.5716 −4.6032 0. 0. 0. 0. 0. −4.6032 15.4196 −7.69093 0. 0. 0. 0. 0. −7.69093 21.5384 −11.2537 0. 0. 0. 0. 0. 0. 1 . c1 c2 c3 c4 c5 c6 c7 == 0. −1.21298 −1.35743 −1.28881 −1.19617 −1.10866 0.5
Como ya tenemos la matriz y el vector del sistema lineal, podemos obtener la solución usando el comando LinearSolve[] de Mathematica:
In[69]:=
solvector=LinearSolve@matrizGlobal, cargaGlobalD
Out[69]=
80.,−0.178155,−0.234043,−0.181193,−0.0328933, 0.198029, 0.5<
Ponemos la solución en un formato adecuado para reemplazar en la expresión de
FHxL:
In[70]:=
solu=Table@parametros@@jDD→solvector@@jDD,8j, 1, n<D
Out[70]=
8c1→0., c2→ −0.178155, c3→ −0.234043,
c4→ −0.181193, c5→ −0.0328933, c6→0.198029, c7→0.5<
La solución aproximada se obtiene reemplazando los coeficientes cj en la
expresión FHxL=⁄nj=1cjfjHxL. Abajo se le llama gHxL a la solución aproximada que se obtiene por este procedimiento:
In[71]:=
g@x_D:=ReplaceAll@Φ@xD, solu D;
Print@"Solución aproximada por el método de Galerkin: "D;
Solución aproximada por el método de Galerkin: g@xD=0.198029 10.673Hx−0.827087L 0.827087<x≤0.920782 12.6234H1.−xL 0.920782<x≤1. − 0.0328933 8.72044Hx−0.712414L 0.712414<x≤0.827087 10.673H0.920782−xL 0.827087<x≤0.920782 − 0.181193 6.7641Hx−0.564575L 0.564575<x≤0.712414 8.72044H0.827087−xL 0.712414<x≤0.827087 − 0.234043 4.7992Hx−0.356207L 0.356207<x≤0.564575 6.7641H0.712414−xL 0.564575<x≤0.712414 − 0.178155 2.80735Hx+0.L 0.<x≤0.356207 4.7992H0.564575−xL 0.356207<x≤0.564575 + 0.5 12.6234Hx−0.920782L 0.920782<x≤1. 0 True +0.
Ésta es la gráfica de la solución aproximada con el Método de Elemento Finito:
In[74]:=
Plot@g@xD,8x, a, b<, PlotLabel→"Solución aproximada"D
Out[74]= 0.2 0.4 0.6 0.8 1.0 -0.2 -0.1 0.1 0.2 0.3 0.4 0.5 Solución aproximada
A continuación se muestra la gráfica de la solución analítica exacta, obtenida con el comando DSolve:
In[75]:=
solexacta=
DSolve@8− ∂xHp@xD∂xy@xDL+q@xD∗y@xDf@xD, y@aDya, y@bDyb<, y@xD, xD;
exacta@x_D:=Evaluate@Expand@ReplaceAll@y@xD, solexacta@@1DD DD D;
Plot@exacta@xD,8x, a, b<, PlotLabel→exacta@xDD
Out[77]= 0.2 0.4 0.6 0.8 1.0 -0.2 -0.1 0.1 0.2 0.3 1.x5-0.5x
Podemos graficar el error (diferencia) entre la solución analítica y la aproximación con el Método de Elemento Finito:
In[78]:=
Plot@exacta@xD−g@xD,8x, a, b<, PlotLabel→"Error = Analítica−Galerkin"D
Out[78]=
0.2 0.4 0.6 0.8 1.0
-0.010
-0.005 0.005
Error=Analítica-Galerkin
Ejercicios
problema:
-dxd IpHxL dxd yHxLM+qHxLyHxL=fHxL, con pHxL=1, qHxL=30, fHxL=Cos@xD,
yH-0.5L=1.0
yH1.5L= -1.0
debes obtener las gráficas que se muestran abajo para las funciones base, la solución aproximada y el error:
-0.5 0.5 1.0 1.5 0.2 0.4 0.6 0.8 1.0 1 2 3 4 5 6 1 2 3 4 5 6 7 -0.5 0.5 1.0 1.5 -1.0 -0.5 0.5 1.0 Solución aproximada -0.5 0.5 1.0 1.5 -0.6 -0.4 -0.2 0.2 0.4 0.6 Solución exacta -0.5 0.5 1.0 1.5 -0.3 -0.2 -0.1 0.1
Error=Analítica-Galerkin
Referencias
Adaptado por José Luis Gómez Muñoz
http://homepage.cem.itesm.mx/jose.luis.gomez Basado en el trabajo de John H. Mathews
http://math.fullerton.edu/mathews/n2003/GalerkinMod.html
también en la sección 11.5 “El método de Rayleigh-Ritz” del libro de Richard L. Burden y J. Douglas Faires, “Análisis numérico” 9a. edición, editorial Cengage, págs 696-711
y finalmente también en la sección 6.2 “Galerkin’s method with piecewise polynomials” del libro de Kenneth Eriksson, D. Estep, P. Hansbo & C. Johnson, “Computational Differential Equations” Volumen 1, Cambridge University Press, 1997.
También revisar el capítulo 2 del libro: J.N. Reddy
McGraw-Hill
Autor José Luis Gómez Muñoz
http://homepage.cem.itesm.mx/jose.luis.gomez
In[79]:=
$Version
Out[79]=
9.0 for Microsoft Windows H64−bitL HJanuary 25, 2013L
In[80]:=
DateString@D
Out[80]=