download
raw
1.58 kB
def A_FE(p, C, lumped=False):
f = 1 if lumped else 1 - (2./3)*sin(p)**2
return 1 - 4*C*sin(p)**2/f
def A_BE(p, C, lumped=False):
f = 1 if lumped else 1 - (2./3)*sin(p)**2
return 1/(1 + 4*C*sin(p)**2/f) # 1 for sympy
def A_CN(p, C, lumped=False):
f = 1 if lumped else 1 - (2./3)*sin(p)**2
return (1 - 2*C*sin(p)**2/f)/(1 + 2*C*sin(p)**2/f)
def A_exact(p, C):
return exp(-C*p**2)
methods = {'FE': A_FE, 'BE': A_BE, 'CN': A_CN}
C_values_coarse = {'2': 2, '1/2': 0.5} # coarse mesh
C_values_fine = {'1/6': 1./6, '1/12': 1./12} # fine mesh
from scitools.std import *
n = 16
p = linspace(0, pi/2, n)
for method in methods:
for C_values in [C_values_coarse, C_values_fine]:
figure()
legends = []
for C_name in C_values:
C = C_values[C_name]
A_e = A_exact(p, C)
func = eval('A_' + method)
A_FEM = func(p, C, False)
A_FDM = func(p, C, True)
legends.append('C=%s, FEM' % C_name)
legends.append('C=%s, FDM' % C_name)
plot(p, A_FEM, p, A_FDM)
hold('on')
plot(p, A_e)
legends.append('exact')
legend(legends, loc='lower left')
if method == 'FE':
plot([0, pi/2], [-1, -1], 'k--')
title('Method: %s' % method)
xlabel('$p$'); ylabel(r'$A/A_{\rm e}$')
filestem = 'diffu_A_factors_%s_%s' % \
('coarse' if C_values == C_values_coarse else 'fine', method)
savefig(filestem + '.png')
savefig(filestem + '.pdf')
raw_input()

Xet Storage Details

Size:
1.58 kB
·
Xet hash:
4ffaee1161fdec8e51b2d01672011ac4cf368401416049e682dd3c75f279891c

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.