Commit 248c5130 by Thibaut.Lunet

### TL : added some first example scripts

parent c8571e4b
 # -*- coding: utf-8 -*- """ Created on Thu Jun 25 17:28:03 2015 Python script for post-processing data stored in a csv file @author: lunet """ # Importing all required libraries import numpy as np import matplotlib.pyplot as plt # Get data from the csv file data = np.genfromtxt('data.csv',dtype=float,delimiter=',',names=True) # Getting the fields times = data['Time'] pressures = data['Pressure'] velocities = data['Velocity'] # Interpoling data to suppress measurement error polyDeg = 25 # getting the coefficient of the best polynomial fit pressuresPolyCoeff = np.polyfit(times,pressures,polyDeg) velocitiesPolyCoeff = np.polyfit(times,velocities,polyDeg) # Constructing the polynomial with the coefficients pressuresPoly=np.poly1d(pressuresPolyCoeff) velocitiesPoly=np.poly1d(velocitiesPolyCoeff) # Evaluate the polynomial at each time pressuresInter = pressuresPoly(times) velocitiesInter = velocitiesPoly(times) # Plotting all data plt.figure() plt.subplot(211) plt.plot(times,pressures,'b',label="Measurements") plt.plot(times,pressuresInter,'r',label="Interpolation") plt.xlabel('Time') plt.ylabel('Pressure') plt.title('Comparison between measured and interpolated fields') plt.legend(loc=4) plt.subplot(212) plt.plot(times,velocities,'b',label="Measurements") plt.plot(times,velocitiesInter,'r',label="Interpolation") plt.xlabel('Time') plt.ylabel('Velocity') plt.legend(loc=1) plt.show() \ No newline at end of file
 Time,Pressure,Velocity 0,0.3301958987,3.3338040438 0.1,0.4168124765,3.4942511735 0.2,0.4199741904,3.3318186404 0.3,0.3999769621,3.4085712565 0.4,0.3169812118,3.4545081834 0.5,0.4054077216,3.3519612524 0.6,0.3371851687,3.3642938982 0.7,0.382838647,3.4543539478 0.8,0.3801052262,3.3437793355 0.9,0.3977826942,3.4440860511 1,0.443507798,3.4928140727 1.1,0.4720666843,3.4535783909 1.2,0.3358170144,3.4034250161 1.3,0.456112626,3.3339432065 1.4,0.3049156874,3.489547021 1.5,0.3253959296,3.444929609 1.6,0.4975764383,3.2986570456 1.7,0.4490807824,3.462904467 1.8,0.4550250256,3.2995482411 1.9,0.4621653188,3.3183618565 2,0.4150395444,3.4281186669 2.1,0.4658928536,3.4409782783 2.2,0.315028259,3.3483666398 2.3,0.3331350024,3.3546070275 2.4,0.3233213783,3.4520355336 2.5,0.3558313471,3.3282919806 2.6,0.3416307801,3.3301428461 2.7,0.3723347955,3.4426342946 2.8,0.5007305806,3.4602381571 2.9,0.3297186657,3.3528532623 3,0.4595264414,3.3006331728 3.1,0.3291531727,3.3566324756 3.2,0.3572903992,3.3810220598 3.3,0.406259343,3.4303815242 3.4,0.4810322711,3.4587080233 3.5,0.4575413236,3.3451688053 3.6,0.4969042561,3.3905372445 3.7,0.3194688803,3.3631406513 3.8,0.4865212982,3.3706099321 3.9,0.3541417437,3.3646170199 4,0.4790020519,3.4528077654 4.1,0.4097893374,3.3994406498 4.2,0.5190777686,3.4220160089 4.3,0.3520860929,3.3299352512 4.4,0.4579296429,3.2958890771 4.5,0.4927083143,3.336221616 4.6,0.3521294512,3.4585504677 4.7,0.4849063093,3.3532872958 4.8,0.4017033728,3.4284135169 4.9,0.3786548571,3.3313316614 5,0.4579963272,3.3832224289 5.1,0.4595545255,3.4133673863 5.2,0.457888411,3.3681513746 5.3,0.4357921244,3.4611317584 5.4,0.3671121605,3.4155559521 5.5,0.5124545759,3.4435188654 5.6,0.3582031451,3.2696983827 5.7,0.4417886804,3.285811134 5.8,0.418331507,3.4573031316 5.9,0.3878851461,3.4077309123 6,0.4534186309,3.2972311987 6.1,0.4849541065,3.3683661687 6.2,0.3839811902,3.4076273183 6.3,0.3585842407,3.383589391 6.4,0.3824551819,3.3400535267 6.5,0.4322180106,3.3351955876 6.6,0.4075950103,3.4132416921 6.7,0.5174642781,3.4376871922 6.8,0.5495609858,3.4103095359 6.9,0.3659575787,3.3573699466 7,0.4221904702,3.3107171569 7.1,0.4941202544,3.3187270817 7.2,0.4606456562,3.4284094725 7.3,0.4684463747,3.2859828593 7.4,0.4076954533,3.2608252809 7.5,0.4664817227,3.3232559719 7.6,0.5200890942,3.3499717249 7.7,0.5251115496,3.3234949684 7.8,0.5556174632,3.3842764814 7.9,0.4121317549,3.2350533476 8,0.5411558718,3.2379630537 8.1,0.5287391543,3.3374298915 8.2,0.5611765999,3.3676337712 8.3,0.5567703226,3.2872965803 8.4,0.4477245588,3.2991315247 8.5,0.4147148519,3.2908893173 8.6,0.4355303299,3.2776401775 8.7,0.4277769755,3.2357731933 8.8,0.5646313399,3.2618131671 8.9,0.4372415258,3.3778659271 9,0.5471318275,3.2806715536 9.1,0.4324147216,3.3679025954 9.2,0.4071256051,3.2451734462 9.3,0.5457502753,3.2778193218 9.4,0.5345401931,3.2968031975 9.5,0.5807317846,3.2058502601 9.6,0.5540955274,3.3521460809 9.7,0.5553435776,3.269231731 9.8,0.5903828029,3.2754617447 9.9,0.5455639432,3.2156104879 10,0.5957009573,3.1870846801 10.1,0.5569343582,3.2280311662 10.2,0.513267197,3.2793892946 10.3,0.5315054505,3.2297164584 10.4,0.5512933708,3.2133862253 10.5,0.5494022022,3.1637788571 10.6,0.5315946083,3.3106984163 10.7,0.5419697761,3.2024889391 10.8,0.6202755755,3.1918106838 10.9,0.5365915684,3.2983374316 11,0.5735807284,3.3243900849 11.1,0.5615925685,3.1897222621 11.2,0.5899966799,3.1319208054 11.3,0.6835816386,3.2706556642 11.4,0.5759022411,3.2645663884 11.5,0.5146287744,3.2270708301 11.6,0.6551129874,3.1692203097 11.7,0.6210250221,3.1779980088 11.8,0.619848244,3.2455433509 11.9,0.580717813,3.1815626667 12,0.6294333297,3.175601506 12.1,0.6530877001,3.2207009133 12.2,0.7332279929,3.2057456424 12.3,0.5998685929,3.1733357111 12.4,0.6198231323,3.1241547452 12.5,0.7689441369,3.019718749 12.6,0.7768047092,3.0447362768 12.7,0.6847395543,3.1209192442 12.8,0.7415889201,3.1391043652 12.9,0.7833815158,3.0981268006 13,0.7787413064,3.0883522516 13.1,0.8951509063,2.9939702169 13.2,0.7871184347,2.8842741875 13.3,0.8975281109,3.0296025059 13.4,0.7957244461,2.9665465882 13.5,0.9954188386,2.9250997385 13.6,0.9955352957,2.81127638 13.7,0.9879790311,2.7542940756 13.8,1.0459809396,2.7139586551 13.9,1.1278747597,2.8292976492 14,1.1450967873,2.752139278 14.1,1.1773017906,2.6449437314 14.2,1.2819072876,2.5204500626 14.3,1.3846800159,2.5328863229 14.4,1.2620436669,2.448316339 14.5,1.5064780133,2.4285760144 14.6,1.4709124339,2.3136485421 14.7,1.6233117806,2.152866246 14.8,1.6126686267,2.057825569 14.9,1.7221960363,2.0011529831 15,1.9883204921,1.9476558505 15.1,2.0521147732,1.7162971315 15.2,2.0226306914,1.7816078069 15.3,2.1572578487,1.6540647111 15.4,2.2569498465,1.4642268561 15.5,2.3432748245,1.4420361512 15.6,2.3966306635,1.3532678678 15.7,2.5457892593,1.2913397949 15.8,2.5725168304,1.244452223 15.9,2.5388159546,1.2646271752 16,2.752607866,1.1729153571 16.1,2.6355285541,1.041542411 16.2,2.7631273064,1.0700012342 16.3,2.8729254089,1.0328740974 16.4,2.856345997,0.8873737385 16.5,2.9644585469,0.9121833045 16.6,2.9201572096,0.9270660978 16.7,2.8626039484,0.8990080633 16.8,2.8882057832,0.7502550971 16.9,3.055864953,0.7897890418 17,2.9209683923,0.7372343491 17.1,3.0528734185,0.8214419064 17.2,3.0620259392,0.6630270028 17.3,3.1025448965,0.7555867387 17.4,3.045512489,0.6901407345 17.5,3.1802519311,0.6804170513 17.6,3.137626082,0.7517297483 17.7,3.084271575,0.7694649924 17.8,3.0757982933,0.7204168631 17.9,3.1890550403,0.6800974591 18,3.247843294,0.5845964789 18.1,3.1222543355,0.6654019505 18.2,3.0766583471,0.7224440195 18.3,3.1461555153,0.5269357773 18.4,3.0872163542,0.6938109104 18.5,3.184346326,0.5703389962 18.6,3.158652294,0.6687895388 18.7,3.1097630489,0.5747569612 18.8,3.3048795413,0.5335158642 18.9,3.2189873375,0.5645434357 19,3.2341890086,0.6555727297 19.1,3.1465317489,0.6176805787 19.2,3.3139080729,0.6362504578 19.3,3.2340090579,0.5249942709 19.4,3.2719991067,0.5849029669 19.5,3.1978980666,0.4554938878 19.6,3.2885345554,0.5042731003 19.7,3.1930726214,0.5485447885 19.8,3.3076787835,0.4727096319 19.9,3.1826486567,0.501238585 20,3.2146050423,0.4661789 20.1,3.2663946238,0.4464840521 20.2,3.2719419178,0.5489247596 20.3,3.2593143102,0.5811836321 20.4,3.2813683651,0.5318850211 20.5,3.3834932616,0.4793161074 20.6,3.378894372,0.5901062574 20.7,3.2036550234,0.443745261 20.8,3.230355234,0.502206709 20.9,3.2684819126,0.5146087268 21,3.3798570648,0.5031386604 21.1,3.3956836405,0.5351312777 21.2,3.3754833132,0.4535007143 21.3,3.2623279276,0.5446557172 21.4,3.3092460304,0.5574030214 21.5,3.2628528574,0.5091666309 21.6,3.3717998892,0.484558308 21.7,3.2415856711,0.5209023832 21.8,3.2838610693,0.5587477889 21.9,3.2748486315,0.4954176173 22,3.2711257816,0.5376572564 22.1,3.4230038538,0.4441655906 22.2,3.2344665856,0.4856581876 22.3,3.2961253192,0.4120874855 22.4,3.3079764548,0.545818655 22.5,3.429530703,0.3840614827 22.6,3.2903143634,0.4683460067 22.7,3.3510455389,0.5387355846 22.8,3.2841744362,0.5427496237 22.9,3.3280108335,0.4698360613 23,3.2936460703,0.4153486908 23.1,3.3528926652,0.3988565163 23.2,3.3837372365,0.3544485043 23.3,3.2813107338,0.3520348277 23.4,3.4168456909,0.3522403315 23.5,3.3555930094,0.5285085731 23.6,3.4010172136,0.5262153523 23.7,3.295324915,0.51240149 23.8,3.3864454895,0.4485649008 23.9,3.4570886942,0.4631315718 24,3.3727396774,0.5218367252 24.1,3.2953087754,0.396749482 24.2,3.3558506294,0.4296639164 24.3,3.3047085979,0.4637693304 24.4,3.2704831328,0.5063152976 24.5,3.3228087966,0.3899608156 24.6,3.3699547668,0.3889402233 24.7,3.3856960316,0.5222049005 24.8,3.3106942826,0.4940120931 24.9,3.2841069906,0.3378372216 25,3.4052832622,0.4434933991 25.1,3.4207024091,0.4700080973 25.2,3.2866346036,0.4735196187 25.3,3.3779772465,0.4513054844 25.4,3.3412365526,0.5173266685 25.5,3.2965070516,0.339221913 25.6,3.3838829747,0.3631846351 25.7,3.4198034533,0.406769805 25.8,3.407057509,0.4532342728 25.9,3.4444875691,0.3891645244 26,3.433469351,0.4458252365 26.1,3.3518872499,0.4264275946 26.2,3.4354769312,0.4675635031 26.3,3.3792975088,0.4206960593 26.4,3.3832605649,0.4402689784 26.5,3.4419269238,0.4040746201 26.6,3.4557976486,0.440775627 26.7,3.3662930764,0.5121539483 26.8,3.3990025964,0.4474377416 26.9,3.2876446955,0.3406723515 27,3.3832421683,0.4325302672 27.1,3.4439804168,0.4605083596 27.2,3.4868296416,0.3218940493 27.3,3.4115243434,0.4834023408 27.4,3.4177223693,0.5024619786 27.5,3.4390578138,0.3801045742 27.6,3.4111411391,0.4544919225 27.7,3.3659585085,0.5071535658 27.8,3.4505015467,0.4675602237 27.9,3.3594910719,0.4471351661 28,3.3100503018,0.4989461888 28.1,3.3634129859,0.3929810082 28.2,3.3703970791,0.3375825783 28.3,3.3245667336,0.3316282637 28.4,3.4618495777,0.3960343105 28.5,3.4950988336,0.3994945075 28.6,3.3733787127,0.3578525181 28.7,3.3463187324,0.3599008148 28.8,3.4531648082,0.3476803319 28.9,3.3823018278,0.4112261687 29,3.3214369814,0.3263771201 29.1,3.387284491,0.4494437722 29.2,3.3468382504,0.3530722701 29.3,3.3041608407,0.4614934473 29.4,3.3075409295,0.3980132617 29.5,3.3099612734,0.4925891614 29.6,3.3525022323,0.3300722077 29.7,3.432606178,0.3858062324 29.8,3.4743102942,0.3528050621 29.9,3.3909901022,0.3528397049 30,3.4913687717,0.4875921154
 #!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Tue May 23 13:29:54 2017 @author: t.lunet """ import numpy as np import scipy.linalg as spl import matplotlib.pyplot as plt # Matplotlib : do not fill marker in plot plt.rcParams['markers.fillstyle'] = 'none' # Number of point in each direction nX = 12 nY = 12 nZ = 12 # Velocity in each direction cX = 1.0 cY = 1.0 cZ = 1.0 # Discretization scheme in each direction schemeX = 'U1' schemeY = 'U1' schemeZ = 'U1' # Script actions plotMatrix = False saveFig = False # Initial velocity fields u01D = np.ones(nX) u02D = np.ones((nX, nY)).ravel() u03D = np.ones((nX, nY, nZ)).ravel() # Stencils stencilU1 = [-1, 1, 0] stencilC2 = [-0.5, 0, 0.5] stencilU3 = [1./6, -6./6, 3./6, 2./6, 0] dicoStencil = {'U1': ['\$1^{st}\$ order Upwind', stencilU1], 'C2': ['\$2^{nd}\$ order Centered', stencilC2], 'U3': ['\$3^{rd}\$ order Upwind', stencilU3]} stencilXName = dicoStencil[schemeX][0] stencilYName = dicoStencil[schemeY][0] stencilZName = dicoStencil[schemeZ][0] stencilX = dicoStencil[schemeX][1] stencilY = dicoStencil[schemeY][1] stencilZ = dicoStencil[schemeZ][1] iSX = (len(stencilX)-1)//2 iSY = (len(stencilY)-1)//2 iSZ = (len(stencilZ)-1)//2 def rhs1D(u): """ Define a 1D Right Hand Side (RHS) for the advection operator .. math:: f(u) = c_x \\frac{\\partial u}{\\partial x} Parameter --------- u : numpy.ndarray The 1D vector, to evaluate the space derivative from, of size :math:`n_x` Returns ------- uEval : numpy.ndarray The 1D derivative of u """ u1D = u.reshape((nX)) uEval = np.zeros_like(u1D) for i in range(len(stencilX)): uEval -= stencilX[i]*np.roll(u1D, iSX-i, axis=0)*cX return uEval.ravel() def rhs2D(u): """ Define a 2D Right Hand Side (RHS) for the advection operator .. math:: f(u) = c_x \\frac{\\partial u}{\\partial x} + c_y \\frac{\\partial u}{\\partial y} Parameter --------- u : numpy.ndarray The 2D vector, to evaluate the space derivative from, of size :math:`n_x.n_y` Returns ------- uEval : numpy.ndarray The 2D derivative of u """ u2D = u.reshape((nX, nY)) uEval = np.zeros_like(u2D) for i in range(len(stencilX)): uEval -= stencilX[i]*np.roll(u2D, iSX-i, axis=0)*cX for i in range(len(stencilY)): uEval -= stencilY[i]*np.roll(u2D, iSY-i, axis=1)*cY return uEval.ravel() def rhs3D(u): """ Define a 3D Right Hand Side (RHS) for the advection operator .. math:: f(u) = c_x \\frac{\\partial u}{\\partial x} + c_y \\frac{\\partial u}{\\partial y} + c_z \\frac{\\partial u}{\\partial z} Parameter --------- u : numpy.ndarray The 3D vector, to evaluate the space derivative from, of size :math:`n_x.n_y.n_z` Returns ------- uEval : numpy.ndarray The 3D derivative of u """ u3D = u.reshape((nX, nY, nZ)) uEval = np.zeros_like(u3D) for i in range(len(stencilX)): uEval -= stencilX[i]*np.roll(u3D, iSX-i, axis=0)*cX for i in range(len(stencilY)): uEval -= stencilY[i]*np.roll(u3D, iSY-i, axis=1)*cY for i in range(len(stencilZ)): uEval -= stencilZ[i]*np.roll(u3D, iSZ-i, axis=2)*cZ return uEval.ravel() def computeJacobian(u, rhs): """ Compute the Jacobi matrix of a given RHS function, by computing the partial derivative with finite difference for every element of the vectorial basis. Parameter --------- u : numpy.ndarray The initial vector, where to evaluate """ n = u.size uPerturb = u.copy() jacobian = np.empty((n, n)) uEval0 = rhs(u) eps = 1e-8 for i in range(n): uPerturb[i] += eps jacobian[:, i] = rhs(uPerturb) jacobian[:, i] -= uEval0 jacobian[:, i] /= eps uPerturb[i] = u[i] return jacobian # Compute the Jacobie matrix of each RHS function print('Compute 1D Jacobi matrix') A1D = computeJacobian(u01D, rhs1D) print('Compute 2D Jacobi matrix') A2D = computeJacobian(u02D, rhs2D) print('Compute 3D Jacobi matrix') A3D = computeJacobian(u03D, rhs3D) # Eventually plot the Jacobi matrices if plotMatrix: plt.figure('1D') plt.imshow(A1D) plt.colorbar() plt.figure('2D') plt.imshow(A2D) plt.colorbar() plt.figure('3D') plt.imshow(A3D) plt.colorbar() # Compute the eigenvalues of each Jacobi matrix print('Compute eigenvalues of 1D Jacobi matrix') lam1D = spl.eigvals(A1D) print('Compute eigenvalues of 2D Jacobi matrix') lam2D = spl.eigvals(A2D) print('Compute eigenvalues of 3D Jacobi matrix') lam3D = spl.eigvals(A3D) print('Done, ploting ...') # Plot the eigenvalues plt.figure('Eigenvalues') plt.axvline(0, c='gray', ls='--', lw=1.0) plt.axhline(0, c='gray', ls='--', lw=1.0) plt.plot(lam1D.real, lam1D.imag, 's', label='1D', ms=12.0, mfc=None) plt.plot(lam2D.real, lam2D.imag, 'o', label='2D', ms=8.0, mfc=None) plt.plot(lam3D.real, lam3D.imag, '*', label='3D', ms=6.0, mfc=None) plt.axis('equal') plt.legend() plt.xlabel('\$\\mathcal{R}(\\lambda)\$') # Use \$...\$ for latex output plt.ylabel('\$\\mathcal{I}(\\lambda)\$') # Define figure title if stencilXName == stencilYName and stencilYName == stencilZName: stencilName = stencilXName else: stencilName = '{}(x), {}(y), {}(z)'.format( stencilXName, stencilYName, stencilXName) plt.title('Eigenvalues of '+stencilName+' operator (Advection)\n' + 'cX={}, cY={}, cZ={}'.format(cX, cY, cZ)) # Eventually save figure if saveFig: if schemeX == schemeY and schemeY == schemeZ: scheme = schemeX else: scheme = schemeX+schemeY+schemeZ plt.savefig('eigenvalues{}.pdf'.format(scheme), bbox_inches='tight')
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!