#! /usr/bin/env python # def fem1d_bvp_linear_test05 ( ): #*****************************************************************************80 # ## FEM1D_BVP_LINEAR_TEST05 carries out test case #5. # # Location: # # http://people.sc.fsu.edu/~jburkardt/py_src/fem1d_bvp_linear/fem1d_bvp_linear_test05.py # # Discussion: # # Use A5, C5, F5, EXACT5, EXACT_UX5. # # Licensing: # # This code is distributed under the GNU LGPL license. # # Modified: # # 09 January 2015 # # Author: # # John Burkardt # # Reference: # # Dianne O'Leary, # Scientific Computing with Case Studies, # SIAM, 2008, # ISBN13: 978-0-898716-66-5, # LC: QA401.O44. # import numpy as np import platform from fem1d_bvp_linear import fem1d_bvp_linear from h1s_error_linear import h1s_error_linear from l1_error import l1_error from l2_error_linear import l2_error_linear from max_error_linear import max_error_linear n = 11 print ( '' ) print ( 'FEM1D_BVP_LINEAR_TEST05' ) print ( ' Python version: %s' % ( platform.python_version ( ) ) ) print ( ' Solve -( A(x) U\'(x) )\' + C(x) U(x) = F(x)' ) print ( ' for 0 < x < 1, with U(0) = U(1) = 0.' ) print ( ' A5(X) = 1.0 + X * X for X <= 1/3' ) print ( ' = 7/9 + X for 1/3 < X' ) print ( ' C5(X) = 0.0' ) print ( ' F5(X) = ( X + 3 X^2 + 5 X^3 + X^4 ) * exp ( X )' ) print ( ' for X <= 1/3' ) print ( ' = ( - 1 + 10/3 X + 43/9 X^2 + X^3 ) .* exp ( X )' ) print ( ' for 1/3 <= X' ) print ( ' U5(X) = X * ( 1 - X ) * exp ( X )' ) print ( '' ) # # Geometry definitions. # x_first = 0.0 x_last = 1.0 x = np.linspace ( x_first, x_last, n ) u = fem1d_bvp_linear ( n, a5, c5, f5, x ) g = np.zeros ( n ) for i in range ( 0, n ): g[i] = exact5 ( x[i] ) print ( '' ) print ( ' I X U Uexact Error' ) print ( '' ) for i in range ( 0, n ): print ( ' %4d %8f %8f %8f %8e' \ % ( i, x[i], u[i], g[i], abs ( u[i] - g[i] ) ) ) e1 = l1_error ( n, x, u, exact5 ) e2 = l2_error_linear ( n, x, u, exact5 ) h1s = h1s_error_linear ( n, x, u, exactp5 ) mx = max_error_linear ( n, x, u, exact5 ) print ( '' ) print ( ' l1 norm of error = %g' % ( e1 ) ) print ( ' L2 norm of error = %g' % ( e2 ) ) print ( ' Seminorm of error = %g' % ( h1s ) ) print ( ' Max norm of error = %g' % ( mx ) ) # # Terminate. # print ( '' ) print ( 'FEM1D_BVP_LINEAR_TEST05' ) print ( ' Normal end of execution.' ) return def a5 ( x ): if ( x <= 1.0 / 3.0 ): value = 1.0 + x * x else: value = x + 7.0 / 9.0 return value def c5 ( x ): value = 0.0 return value def exact5 ( x ): from math import exp value = x * ( 1.0 - x ) * exp ( x ) return value def exactp5 ( x ): from math import exp value = ( 1.0 - x - x * x ) * exp ( x ) return value def f5 ( x ): from math import exp if ( x <= 1.0 / 3.0 ): value = ( x + 3.0 * x ** 2 + 5.0 * x ** 3 + x ** 4 ) * exp ( x ) else: value = ( - 1.0 + ( 10.0 / 3.0 ) * x \ + ( 43.0 / 9.0 ) * x ** 2 + x ** 3 ) * exp ( x ) return value if ( __name__ == '__main__' ): from timestamp import timestamp timestamp ( ) fem1d_bvp_linear_test05 ( ) timestamp ( )