<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Buku Saku Arya</title>
	<atom:link href="http://aawaskita.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://aawaskita.wordpress.com</link>
	<description>Sebuah catatan kaki tentang OSS, riset-riset sederhana, serta mimpi-mimpi indah masa depan.</description>
	<lastBuildDate>Fri, 30 Dec 2011 02:35:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='aawaskita.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Buku Saku Arya</title>
		<link>http://aawaskita.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://aawaskita.wordpress.com/osd.xml" title="Buku Saku Arya" />
	<atom:link rel='hub' href='http://aawaskita.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Setup CUDA di Ubuntu 11.10</title>
		<link>http://aawaskita.wordpress.com/2011/12/30/setup-cuda-di-ubuntu-11-10/</link>
		<comments>http://aawaskita.wordpress.com/2011/12/30/setup-cuda-di-ubuntu-11-10/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 02:35:01 +0000</pubDate>
		<dc:creator>aawaskita</dc:creator>
				<category><![CDATA[Jejak langkah untuk bersekolah lagi]]></category>
		<category><![CDATA[Riset]]></category>
		<category><![CDATA[Semester 3]]></category>
		<category><![CDATA[Tentang OSS]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://aawaskita.wordpress.com/?p=655</guid>
		<description><![CDATA[Sebelumnya, OpenCl telah berhasil disetup pada Ubuntu 11.10. Namun, masih ada masalah dengan C karena beberapa contoh program gagal dikompilasi. Berikut adalah langkah menyelesaikannya. 1. Jalankan perintah sudo apt-get install nvidia-current nvidia-current-dev nvidia-current-updates nvidia-current-updates-dev Buat link simbolik berikut ini. ln -s /usr/lib/nvidia-current/libGL.so /usr/lib/libGL.so Ganti baris LINKFLAGS += menjadi LINKFLAGS += -L/usr/lib/nvidia-current di file ~/NVIDIA_GPU_Computing_SDK/C/common/common.mk Jalankan [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=655&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://aawaskita.wordpress.com/2011/12/12/mudah-setup-gpgpu-di-ubuntu-11-10/">Sebelumnya</a>, OpenCl telah berhasil disetup pada Ubuntu 11.10. Namun, masih ada masalah dengan C karena beberapa contoh program gagal dikompilasi. Berikut adalah langkah menyelesaikannya.</p>
<ol>
<li>1. Jalankan perintah <code>sudo apt-get install nvidia-current nvidia-current-dev nvidia-current-updates nvidia-current-updates-dev</code></li>
<li>Buat link simbolik berikut ini. <code>ln -s /usr/lib/nvidia-current/libGL.so /usr/lib/libGL.so</code></li>
<li>Ganti baris <code>LINKFLAGS +=</code> menjadi <code>LINKFLAGS += -L/usr/lib/nvidia-current</code> di file <code>~/NVIDIA_GPU_Computing_SDK/C/common/common.mk</code></li>
<li>Jalankan perintah <code>make</code> di <code>~/NVIDIA_GPU_Computing_SDK/C</code></li>
<li>Jalankan sebuah contoh program. <code>~/NVIDIA_GPU_Computing_SDK/C$ ./bin/linux/release/deviceQuery</code></li>
<p><span id="more-655"></span>
</ol>
<p>Hasilnya adalah sebagai berikut<br />
<code><br />
[deviceQuery] starting...<br />
./bin/linux/release/deviceQuery Starting... </p>
<p> CUDA Device Query (Runtime API) version (CUDART static linking) </p>
<p>Found 1 CUDA Capable device(s) </p>
<p>Device 0: "GeForce GT 440"<br />
  CUDA Driver Version / Runtime Version          4.0 / 4.0<br />
  CUDA Capability Major/Minor version number:    2.1<br />
  Total amount of global memory:                 1024 MBytes (1073283072 bytes)<br />
  ( 2) Multiprocessors x (48) CUDA Cores/MP:     96 CUDA Cores<br />
  GPU Clock Speed:                               1.66 GHz<br />
  Memory Clock rate:                             900.00 Mhz<br />
  Memory Bus Width:                              128-bit<br />
  L2 Cache Size:                                 131072 bytes<br />
  Max Texture Dimension Size (x,y,z)             1D=(65536), 2D=(65536,65535), 3D=(2048,2048,2048)<br />
  Max Layered Texture Size (dim) x layers        1D=(16384) x 2048, 2D=(16384,16384) x 2048<br />
  Total amount of constant memory:               65536 bytes<br />
  Total amount of shared memory per block:       49152 bytes<br />
  Total number of registers available per block: 32768<br />
  Warp size:                                     32<br />
  Maximum number of threads per block:           1024<br />
  Maximum sizes of each dimension of a block:    1024 x 1024 x 64<br />
  Maximum sizes of each dimension of a grid:     65535 x 65535 x 65535<br />
  Maximum memory pitch:                          2147483647 bytes<br />
  Texture alignment:                             512 bytes<br />
  Concurrent copy and execution:                 Yes with 2 copy engine(s)<br />
  Run time limit on kernels:                     Yes<br />
  Integrated GPU sharing Host Memory:            No<br />
  Support host page-locked memory mapping:       Yes<br />
  Concurrent kernel execution:                   Yes<br />
  Alignment requirement for Surfaces:            Yes<br />
  Device has ECC support enabled:                No<br />
  Device is using TCC driver mode:               No<br />
  Device supports Unified Addressing (UVA):      Yes<br />
  Device PCI Bus ID / PCI location ID:           1 / 0<br />
  Compute Mode: </p>
<p>deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 4.0, CUDA Runtime Version = 4.0, NumDevs = 1, Device = GeForce GT 440<br />
[deviceQuery] test results...<br />
PASSED </p>
<p>Press ENTER to exit...<br />
</code></p>
<p>Selamat tahun baru&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aawaskita.wordpress.com/655/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aawaskita.wordpress.com/655/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aawaskita.wordpress.com/655/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aawaskita.wordpress.com/655/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aawaskita.wordpress.com/655/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aawaskita.wordpress.com/655/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aawaskita.wordpress.com/655/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aawaskita.wordpress.com/655/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aawaskita.wordpress.com/655/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aawaskita.wordpress.com/655/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aawaskita.wordpress.com/655/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aawaskita.wordpress.com/655/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aawaskita.wordpress.com/655/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aawaskita.wordpress.com/655/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=655&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aawaskita.wordpress.com/2011/12/30/setup-cuda-di-ubuntu-11-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4ffa54f55442471cfaaa5cc7d5544c26?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">arya</media:title>
		</media:content>
	</item>
		<item>
		<title>Sedikit cerita tentang python saat perlu menghitung faktorial</title>
		<link>http://aawaskita.wordpress.com/2011/12/15/sedikit-cerita-tentang-python/</link>
		<comments>http://aawaskita.wordpress.com/2011/12/15/sedikit-cerita-tentang-python/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 05:30:49 +0000</pubDate>
		<dc:creator>aawaskita</dc:creator>
				<category><![CDATA[Pernak-pernik]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Tentang OSS]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://aawaskita.wordpress.com/?p=650</guid>
		<description><![CDATA[Cerita ini muncul ketika pada sebuah kesempatan saya perlu menghitung faktorial sebuah integer. Awalnya, mau coding sendiri. Tapi saya (yang sedang menggunakan BlankOn) kemudian mencoba mencari pustaka yang bisa langsung digunakan. Selanjutnya, buka terminal dan ketik: apt-cache search factorial Kemudian direspon dengan: python-mpmath - library for arbitrary-precision floating-point arithmetic libcommons-math-java - Java lightweight mathematics and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=650&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Cerita ini muncul ketika pada sebuah kesempatan saya perlu menghitung faktorial sebuah integer. Awalnya, mau coding sendiri. Tapi saya (yang sedang menggunakan <a href="http://www.blankonlinux.or.id/">BlankOn</a>) kemudian mencoba mencari pustaka yang bisa langsung digunakan.<br />
Selanjutnya, buka terminal dan ketik:<br />
<code>apt-cache search factorial</code><br />
<span id="more-650"></span><br />
Kemudian direspon dengan:<br />
<code><br />
python-mpmath - library for arbitrary-precision floating-point arithmetic<br />
libcommons-math-java - Java lightweight mathematics and statistics components<br />
apcalc-dev - Library for arbitrary precision arithmetic<br />
python-mpmath-doc - library for arbitrary-precision floating-point arithmetic - Documentation<br />
libmath-combinatorics-perl - Perform combinations and permutations on lists<br />
libcommons-math-java-doc - Java lightweight mathematics and statistics components - documentation</code></p>
<p>Mata lantas tertuju pda paket <code>python-mpmath</code>, yang segera saya install, <code>sudo apt-get install python-mpmath</code>.</p>
<p>Setelahnya, saya masuk ke shell python.<code><br />
&gt;&gt;&gt; import mpmath<br />
&gt;&gt;&gt; dir(mpmath)<br />
['FPContext', 'MPContext', 'MPIntervalContext', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '__version__', '_ctx_mp', 'absmax', 'absmin', 'acos', 'acosh', 'acot', 'acoth', 'acsc', 'acsch', 'agm', 'airyai', 'airybi', 'almosteq', 'altzeta', 'apery', 'appellf1', 'appellf2', 'appellf3', 'appellf4', 'arange', 'arg', 'asec', 'asech', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'autoprec', 'barnesg', 'bei', 'bell', 'ber', 'bernfrac', 'bernoulli', 'bernpoly', 'besseli', 'besselj', 'besselk', 'bessely', 'beta', 'betainc', 'bihyper', 'binomial', 'calculus', 'catalan', 'cbrt', 'ceil', 'chebyfit', 'chebyt', 'chebyu', 'chi', 'cholesky', 'cholesky_solve', 'chop', 'ci', 'clcos', 'clsin', 'cond', 'conj', 'convert', 'cos', 'cos_sin', 'cosh', 'cosm', 'cospi', 'cospi_sinpi', 'cot', 'coth', 'coulombc', 'coulombf', 'coulombg', 'cplot', 'csc', 'csch', 'ctx_base', 'ctx_fp', 'ctx_iv', 'ctx_mp', 'ctx_mp_python', 'cyclotomic', 'degree', 'degrees', 'det', 'diag', 'diff', 'difference', 'differint', 'diffs', 'diffun', 'digamma', 'dirichlet', 'doctests', 'e', 'e1', 'ei', 'ellipe', 'ellipfun', 'ellipk', 'eps', 'erf', 'erfc', 'erfi', 'erfinv', 'euler', 'eulernum', 'eulerpoly', 'exp', 'expint', 'expj', 'expjpi', 'expm', 'expm1', 'extend', 'extradps', 'extraprec', 'eye', 'fabs', 'fac', 'fac2', 'factorial', 'fadd', 'fdiv', 'fdot', 'ff', 'fib', 'fibonacci', 'findpoly', 'findroot', 'floor', 'fmod', 'fmul', 'fneg', 'fourier', 'fourierval', 'fp', 'fprod', 'frac', 'fraction', 'fresnelc', 'fresnels', 'frexp', 'fsub', 'fsum', 'function_docs', 'functions', 'gamma', 'gammainc', 'gammaprod', 'gegenbauer', 'glaisher', 'grampoint', 'hankel1', 'hankel2', 'harmonic', 'hermite', 'hilbert', 'hurwitz', 'hyp0f1', 'hyp1f1', 'hyp1f2', 'hyp2f0', 'hyp2f1', 'hyp2f2', 'hyp2f3', 'hyp3f2', 'hyper', 'hyper2d', 'hypercomb', 'hyperfac', 'hyperu', 'hypot', 'identification', 'identify', 'im', 'inf', 'inverse', 'isinf', 'isint', 'isnan', 'isnormal', 'iv', 'j', 'j0', 'j1', 'jacobi', 'jacobian', 'jtheta', 'kei', 'ker', 'kfrom', 'khinchin', 'kleinj', 'laguerre', 'lambertw', 'ldexp', 'legendre', 'legenp', 'legenq', 'li', 'libmp', 'limit', 'linspace', 'ln', 'ln10', 'ln2', 'log', 'log10', 'loggamma', 'logm', 'lu', 'lu_solve', 'mag', 'make_mpc', 'make_mpf', 'math2', 'matrices', 'matrix', 'maxcalls', 'meijerg', 'memoize', 'mertens', 'mfrom', 'mnorm', 'monitor', 'mp', 'mpc', 'mpf', 'mpi', 'mpmathify', 'multiplicity', 'nan', 'ncdf', 'ninf', 'nint', 'nint_distance', 'norm', 'npdf', 'nprint', 'nprod', 'nstr', 'nsum', 'nthroot', 'odefun', 'ones', 'pade', 'phase', 'phi', 'pi', 'plot', 'polar', 'polyexp', 'polygamma', 'polylog', 'polyroots', 'polyval', 'power', 'powm', 'powm1', 'primepi', 'primepi2', 'primezeta', 'psi', 'pslq', 'qbarfrom', 'qfac', 'qfrom', 'qgamma', 'qhyper', 'qp', 'qr_solve', 'quad', 'quadgl', 'quadosc', 'quadts', 'radians', 'rand', 'randmatrix', 'rational', 're', 'rect', 'residual', 'rf', 'rgamma', 'richardson', 'riemannr', 'root', 'runtests', 'sec', 'sech', 'shanks', 'shi', 'si', 'siegeltheta', 'siegelz', 'sign', 'sin', 'sinc', 'sincpi', 'sinh', 'sinm', 'sinpi', 'spherharm', 'splot', 'sqrt', 'sqrtm', 'stieltjes', 'struveh', 'struvel', 'sumem', 'superfac', 'swap_row', 'tan', 'tanh', 'taufrom', 'taylor', 'timing', 'twinprime', 'unitroots', 'unitvector', 'usertools', 'visualization', 'whitm', 'whitw', 'workdps', 'workprec', 'zeros', 'zeta', 'zetazero']</code></p>
<p>Nah, ada <em>method</em> <code>fac</code>. Untuk memastikan saya ketik lagi<br />
<code><br />
&gt;&gt;&gt; mpmath.fac.__doc__<br />
"\nComputes the factorial, `x!`. For integers `n \\ge 0`, we have\n`n! = 1 \\cdot 2 \\cdots (n-1) \\cdot n` and more generally the factorial\nis defined for real or complex `x` by `x! = \\Gamma(x+1)`.\n\n**Examples**\n\nBasic values and limits::\n\n    &gt;&gt;&gt; from mpmath import *\n    &gt;&gt;&gt; mp.dps = 15; mp.pretty = True\n    &gt;&gt;&gt; for k in range(6):\n    ...     print k, fac(k)\n    ...\n    0 1.0\n    1 1.0\n    2 2.0\n    3 6.0\n    4 24.0\n    5 120.0\n    &gt;&gt;&gt; fac(inf)\n    +inf\n    &gt;&gt;&gt; fac(0.5), sqrt(pi)/2\n    (0.886226925452758, 0.886226925452758)\n\nFor large positive `x`, `x!` can be approximated by\nStirling's formula::\n\n    &gt;&gt;&gt; x = 10**10\n    &gt;&gt;&gt; fac(x)\n    2.32579620567308e+95657055186\n    &gt;&gt;&gt; sqrt(2*pi*x)*(x/e)**x\n    2.32579597597705e+95657055186\n\n:func:`~mpmath.fac` supports evaluation for astronomically large values::\n\n    &gt;&gt;&gt; fac(10**30)\n    6.22311232304258e+29565705518096748172348871081098\n\nReciprocal factorials appear in the Taylor series of the\nexponential function (among many other contexts)::\n\n    &gt;&gt;&gt; nsum(lambda k: 1/fac(k), [0, inf]), exp(1)\n    (2.71828182845905, 2.71828182845905)\n    &gt;&gt;&gt; nsum(lambda k: pi**k/fac(k), [0, inf]), exp(pi)\n    (23.1406926327793, 23.1406926327793)\n\n"</code></p>
<p>Aha, benar saya perkirakan. Akhirnya saya langsung saja berhitung<br />
<code>&gt;&gt;&gt; mpmath.fac(3)<br />
mpf('6.0')<br />
&gt;&gt;&gt; mpmath.fac(4)<br />
mpf('24.0')<br />
&gt;&gt;&gt; mpmath.fac(2000)<br />
mpf('3.3162750924506333e+5735')</code></p>
<p>Python benar2 luar biasa, hidup jadi sedemikian mudahnya, semoga gak malah jadi bodoh dengan berbagai kemudahan ini&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aawaskita.wordpress.com/650/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aawaskita.wordpress.com/650/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aawaskita.wordpress.com/650/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aawaskita.wordpress.com/650/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aawaskita.wordpress.com/650/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aawaskita.wordpress.com/650/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aawaskita.wordpress.com/650/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aawaskita.wordpress.com/650/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aawaskita.wordpress.com/650/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aawaskita.wordpress.com/650/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aawaskita.wordpress.com/650/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aawaskita.wordpress.com/650/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aawaskita.wordpress.com/650/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aawaskita.wordpress.com/650/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=650&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aawaskita.wordpress.com/2011/12/15/sedikit-cerita-tentang-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4ffa54f55442471cfaaa5cc7d5544c26?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">arya</media:title>
		</media:content>
	</item>
		<item>
		<title>Mudah setup GPGPU di Ubuntu 11.10</title>
		<link>http://aawaskita.wordpress.com/2011/12/12/mudah-setup-gpgpu-di-ubuntu-11-10/</link>
		<comments>http://aawaskita.wordpress.com/2011/12/12/mudah-setup-gpgpu-di-ubuntu-11-10/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 05:18:24 +0000</pubDate>
		<dc:creator>aawaskita</dc:creator>
				<category><![CDATA[Riset]]></category>
		<category><![CDATA[Semester 3]]></category>
		<category><![CDATA[Tentang OSS]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://aawaskita.wordpress.com/?p=640</guid>
		<description><![CDATA[General Purpose Graphical Procesing Unit (GPGPU) saat ini telah banyak digunakan untuk melakukan perhitungan data parallel. Beberapa aktifitas terkait dapat dilihat di sini. Pemanfaatan adapter grafis dalam perhitungan numerik menjadi menarik karena paralelisasinya yang tinggi (terutama untuk kasus yang bersifat data parallel), serta relatif relatif murah. Kelebihan lain bisa diketahui salah satunya di sini. Sebagai [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=640&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><em>General Purpose Graphical Procesing Unit</em> (GPGPU) saat ini telah banyak digunakan untuk melakukan perhitungan data parallel. Beberapa aktifitas terkait dapat dilihat di <a href="http://www.gpucomputing.net/">sini</a>. Pemanfaatan adapter grafis dalam perhitungan numerik menjadi menarik karena paralelisasinya yang tinggi (terutama untuk kasus yang bersifat data parallel), serta relatif relatif murah. Kelebihan lain bisa diketahui salah satunya di <a href="http://www.sciencedirect.com/science/article/pii/S0305054811000876">sini</a>.<br />
Sebagai pemula, sayapun mencoba teknologi ini, tentu tahap pertamanya adalah instalasi, khususnya di sistem operasi GNU Linux (Ubuntu 11.10). Berikut adalah tahapannya.<br />
<span id="more-640"></span></p>
<ol>
<li>Unduh pustaka, masing-masing <a href="http://www.nvidia.com/object/thankyou.html?url=/compute/cuda/4_0/toolkit/cudatoolkit_4.0.17_linux_64_ubuntu10.10.run">cudatoolkit</a>, <a href="http://developer.download.nvidia.com/compute/cuda/4_0/ToolsSDK/cudatools_4.0.17_linux_64.run">cudatools</a>, dan <a href="http://developer.download.nvidia.com/compute/cuda/4_0/sdk/gpucomputingsdk_4.0.17_linux.run">contoh aplikasinya</a></li>
<li>Setelah terunduh sempurna, cudatoolkit dan cudatools diinstalasi. Jalankan<br />
<code>sudo sh cudatoolkit_4.0.17_linux_64_ubuntu10.10.run</code><br />
<code>sudo sh cudatools_4.0.17_linux_64.run</code>
</li>
<li>Berikutnya adalah meng-install <em>driver</em> dari perangkat GPU. Untuk kasus ini, saya memilih untuk menggunakan <em>driver</em> yang ada di repository ubuntu. Jalankan<br />
<code>sudo apt-get install nvidia-common nvidia-current</code>
</li>
<li>Modifikasi isi berkas <code>~/.bashrc</code> dengan menambahkan baris berikut.<br />
<code>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/</code><br />
<code>export PATH=$PATH:/usr/local/cuda/lib:/usr/local/cuda/bin</code><br />
Simpan dan jalankan perintah <code>source ~/.bashrc</code>
</li>
<li>Selanjutnya, instalasi alat bantu yang diperlukan. Jalankan perintah<br />
<code>sudo apt-get install buil-essential gcc-4.4 g++-4.4 cpp-4.4 libxi-dev libxmu-dev freeglut3</code><br />
Instalasi paket <code>build-essential</code> sebenarnya telah mengikutsertakan kompilator default dari GNU versi 4.6. Namun, contoh aplikasi yang disertakan oleh NVIDIA (dalam paket gpucomputing) memerlukan kompilator versi 4.4, sehingga perlu diinstal lagi.
</li>
<li>Kemudian, untuk mengarahkan kompilator ke versi 4.4, beberapa modifikasi perlu dilakukan. Jalankan perintah berikut<br />
<code>sudo update-alternatives –install /usr/bin/gcc gcc /usr/bin/gcc-4.4 20</code><br />
<code>sudo update-alternatives –install /usr/bin/g++ g++ /usr/bin/g++-4.4 20</code><br />
<code>sudo update-alternatives –install /usr/bin/cpp cpp /usr/bin/cpp-4.4 20</code><br />
Untuk mengujinya, kita dapat melihat arah dari link simbolik dengan menjalankan perintah <code>ls -alh /etc/alternatives/gcc</code>.
</li>
<li>Kemudian, instalasi contoh aplikasi gpucomputing. Jalankan perintah<br />
<code>sh gpucomputingsdk_4.0.17_linux.run</code>.
</li>
<li>Yang terakhir adalah melakukan kompilasi. Arahkan <em>current directory</em> ke <code>~/NVIDIA_GPU_Computing_SDK/C</code> untuk CUDA dan <code>~/NVIDIA_GPU_Computing_SDK/OpenCL</code> untuk OpenCL. CUDA adala <em>tools</em> yang dikembangkan dan dioptimasi oleh dan untuk perangkat NVIDIA. Sedangkan OpenCL dikembangkan Khronos Group yang mengakomodasi perangkat dari NVIDIA dan ATI. Untuk melakukan kompilasi, jalankan perintah <code>make</code>
</li>
</ol>
<p>Untuk melihat hasilnya, kita dapat menjalankan salah satu contoh aplikasi yang disertakan. Sebagai contoh, jalankan perintah<br />
<code>./bin/linux/release/deviceQuery</code> dari <em>current directory</em> C atau OpenCl. Sejauh ini, saya belum berhasil mengkompilasi aplikasi yang dikembangkan menggunakan CUDA. Kesalahan linking masih terjadi:<br />
<code>/usr/bin/ld: cannot find -lXi</code><br />
<code>oceanFFT: src/oceanFFT/Makefile.ph_build Error 2</code></p>
<p>Jika menggunakan aplikasi OpenCL, deviceQuery menghasilkan informasi berikut.</p>
<p><code><br />
./oclDeviceQuery Starting...</p>
<p>OpenCL SW Info:</p>
<p> CL_PLATFORM_NAME: 	NVIDIA CUDA<br />
 CL_PLATFORM_VERSION: 	OpenCL 1.1 CUDA 4.0.1<br />
 OpenCL SDK Revision: 	7027912</p>
<p>OpenCL Device Info:</p>
<p> 1 devices found supporting OpenCL:</p>
<p> ---------------------------------<br />
 Device GeForce GT 440<br />
 ---------------------------------<br />
  CL_DEVICE_NAME: 			GeForce GT 440<br />
  CL_DEVICE_VENDOR: 			NVIDIA Corporation<br />
  CL_DRIVER_VERSION: 			280.13<br />
  CL_DEVICE_VERSION: 			OpenCL 1.1 CUDA<br />
  CL_DEVICE_OPENCL_C_VERSION: 		OpenCL C 1.1<br />
  CL_DEVICE_TYPE:			CL_DEVICE_TYPE_GPU<br />
  CL_DEVICE_MAX_COMPUTE_UNITS:		2<br />
  CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS:	3<br />
  CL_DEVICE_MAX_WORK_ITEM_SIZES:	1024 / 1024 / 64<br />
  CL_DEVICE_MAX_WORK_GROUP_SIZE:	1024<br />
  CL_DEVICE_MAX_CLOCK_FREQUENCY:	1660 MHz<br />
  CL_DEVICE_ADDRESS_BITS:		32<br />
  CL_DEVICE_MAX_MEM_ALLOC_SIZE:		255 MByte<br />
  CL_DEVICE_GLOBAL_MEM_SIZE:		1023 MByte<br />
  CL_DEVICE_ERROR_CORRECTION_SUPPORT:	no<br />
  CL_DEVICE_LOCAL_MEM_TYPE:		local<br />
  CL_DEVICE_LOCAL_MEM_SIZE:		48 KByte<br />
  CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE:	64 KByte<br />
  CL_DEVICE_QUEUE_PROPERTIES:		CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE<br />
  CL_DEVICE_QUEUE_PROPERTIES:		CL_QUEUE_PROFILING_ENABLE<br />
  CL_DEVICE_IMAGE_SUPPORT:		1<br />
  CL_DEVICE_MAX_READ_IMAGE_ARGS:	128<br />
  CL_DEVICE_MAX_WRITE_IMAGE_ARGS:	8<br />
  CL_DEVICE_SINGLE_FP_CONFIG:		denorms INF-quietNaNs round-to-nearest round-to-zero round-to-inf fma </p>
<p>  CL_DEVICE_IMAGE 			2D_MAX_WIDTH	 16384<br />
					2D_MAX_HEIGHT	 16384<br />
					3D_MAX_WIDTH	 2048<br />
					3D_MAX_HEIGHT	 2048<br />
					3D_MAX_DEPTH	 2048</p>
<p>  CL_DEVICE_EXTENSIONS:			cl_khr_byte_addressable_store<br />
					cl_khr_icd<br />
					cl_khr_gl_sharing<br />
					cl_nv_compiler_options<br />
					cl_nv_device_attribute_query<br />
					cl_nv_pragma_unroll<br />
					cl_khr_global_int32_base_atomics<br />
					cl_khr_global_int32_extended_atomics<br />
					cl_khr_local_int32_base_atomics<br />
					cl_khr_local_int32_extended_atomics<br />
					cl_khr_fp64</p>
<p>  CL_DEVICE_COMPUTE_CAPABILITY_NV:	2.1<br />
  NUMBER OF MULTIPROCESSORS:		2<br />
  NUMBER OF CUDA CORES:			96<br />
  CL_DEVICE_REGISTERS_PER_BLOCK_NV:	32768<br />
  CL_DEVICE_WARP_SIZE_NV:		32<br />
  CL_DEVICE_GPU_OVERLAP_NV:		CL_TRUE<br />
  CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV:	CL_TRUE<br />
  CL_DEVICE_INTEGRATED_MEMORY_NV:	CL_FALSE<br />
  CL_DEVICE_PREFERRED_VECTOR_WIDTH_	CHAR 1, SHORT 1, INT 1, LONG 1, FLOAT 1, DOUBLE 1</p>
<p>  ---------------------------------<br />
  2D Image Formats Supported (71)<br />
  ---------------------------------<br />
  #     Channel Order   Channel Type          </p>
<p>  1     CL_R            CL_FLOAT<br />
  2     CL_R            CL_HALF_FLOAT<br />
  3     CL_R            CL_UNORM_INT8<br />
  4     CL_R            CL_UNORM_INT16<br />
  5     CL_R            CL_SNORM_INT16<br />
  6     CL_R            CL_SIGNED_INT8<br />
  7     CL_R            CL_SIGNED_INT16<br />
  8     CL_R            CL_SIGNED_INT32<br />
  9     CL_R            CL_UNSIGNED_INT8<br />
  10    CL_R            CL_UNSIGNED_INT16<br />
  11    CL_R            CL_UNSIGNED_INT32<br />
  12    CL_A            CL_FLOAT<br />
  13    CL_A            CL_HALF_FLOAT<br />
  14    CL_A            CL_UNORM_INT8<br />
  15    CL_A            CL_UNORM_INT16<br />
  16    CL_A            CL_SNORM_INT16<br />
  17    CL_A            CL_SIGNED_INT8<br />
  18    CL_A            CL_SIGNED_INT16<br />
  19    CL_A            CL_SIGNED_INT32<br />
  20    CL_A            CL_UNSIGNED_INT8<br />
  21    CL_A            CL_UNSIGNED_INT16<br />
  22    CL_A            CL_UNSIGNED_INT32<br />
  23    CL_RG           CL_FLOAT<br />
  24    CL_RG           CL_HALF_FLOAT<br />
  25    CL_RG           CL_UNORM_INT8<br />
  26    CL_RG           CL_UNORM_INT16<br />
  27    CL_RG           CL_SNORM_INT16<br />
  28    CL_RG           CL_SIGNED_INT8<br />
  29    CL_RG           CL_SIGNED_INT16<br />
  30    CL_RG           CL_SIGNED_INT32<br />
  31    CL_RG           CL_UNSIGNED_INT8<br />
  32    CL_RG           CL_UNSIGNED_INT16<br />
  33    CL_RG           CL_UNSIGNED_INT32<br />
  34    CL_RA           CL_FLOAT<br />
  35    CL_RA           CL_HALF_FLOAT<br />
  36    CL_RA           CL_UNORM_INT8<br />
  37    CL_RA           CL_UNORM_INT16<br />
  38    CL_RA           CL_SNORM_INT16<br />
  39    CL_RA           CL_SIGNED_INT8<br />
  40    CL_RA           CL_SIGNED_INT16<br />
  41    CL_RA           CL_SIGNED_INT32<br />
  42    CL_RA           CL_UNSIGNED_INT8<br />
  43    CL_RA           CL_UNSIGNED_INT16<br />
  44    CL_RA           CL_UNSIGNED_INT32<br />
  45    CL_RGBA         CL_FLOAT<br />
  46    CL_RGBA         CL_HALF_FLOAT<br />
  47    CL_RGBA         CL_UNORM_INT8<br />
  48    CL_RGBA         CL_UNORM_INT16<br />
  49    CL_RGBA         CL_SNORM_INT16<br />
  50    CL_RGBA         CL_SIGNED_INT8<br />
  51    CL_RGBA         CL_SIGNED_INT16<br />
  52    CL_RGBA         CL_SIGNED_INT32<br />
  53    CL_RGBA         CL_UNSIGNED_INT8<br />
  54    CL_RGBA         CL_UNSIGNED_INT16<br />
  55    CL_RGBA         CL_UNSIGNED_INT32<br />
  56    CL_BGRA         CL_UNORM_INT8<br />
  57    CL_BGRA         CL_SIGNED_INT8<br />
  58    CL_BGRA         CL_UNSIGNED_INT8<br />
  59    CL_ARGB         CL_UNORM_INT8<br />
  60    CL_ARGB         CL_SIGNED_INT8<br />
  61    CL_ARGB         CL_UNSIGNED_INT8<br />
  62    CL_INTENSITY    CL_FLOAT<br />
  63    CL_INTENSITY    CL_HALF_FLOAT<br />
  64    CL_INTENSITY    CL_UNORM_INT8<br />
  65    CL_INTENSITY    CL_UNORM_INT16<br />
  66    CL_INTENSITY    CL_SNORM_INT16<br />
  67    CL_LUMINANCE    CL_FLOAT<br />
  68    CL_LUMINANCE    CL_HALF_FLOAT<br />
  69    CL_LUMINANCE    CL_UNORM_INT8<br />
  70    CL_LUMINANCE    CL_UNORM_INT16<br />
  71    CL_LUMINANCE    CL_SNORM_INT16        </p>
<p>  ---------------------------------<br />
  3D Image Formats Supported (71)<br />
  ---------------------------------<br />
  #     Channel Order   Channel Type          </p>
<p>  1     CL_R            CL_FLOAT<br />
  2     CL_R            CL_HALF_FLOAT<br />
  3     CL_R            CL_UNORM_INT8<br />
  4     CL_R            CL_UNORM_INT16<br />
  5     CL_R            CL_SNORM_INT16<br />
  6     CL_R            CL_SIGNED_INT8<br />
  7     CL_R            CL_SIGNED_INT16<br />
  8     CL_R            CL_SIGNED_INT32<br />
  9     CL_R            CL_UNSIGNED_INT8<br />
  10    CL_R            CL_UNSIGNED_INT16<br />
  11    CL_R            CL_UNSIGNED_INT32<br />
  12    CL_A            CL_FLOAT<br />
  13    CL_A            CL_HALF_FLOAT<br />
  14    CL_A            CL_UNORM_INT8<br />
  15    CL_A            CL_UNORM_INT16<br />
  16    CL_A            CL_SNORM_INT16<br />
  17    CL_A            CL_SIGNED_INT8<br />
  18    CL_A            CL_SIGNED_INT16<br />
  19    CL_A            CL_SIGNED_INT32<br />
  20    CL_A            CL_UNSIGNED_INT8<br />
  21    CL_A            CL_UNSIGNED_INT16<br />
  22    CL_A            CL_UNSIGNED_INT32<br />
  23    CL_RG           CL_FLOAT<br />
  24    CL_RG           CL_HALF_FLOAT<br />
  25    CL_RG           CL_UNORM_INT8<br />
  26    CL_RG           CL_UNORM_INT16<br />
  27    CL_RG           CL_SNORM_INT16<br />
  28    CL_RG           CL_SIGNED_INT8<br />
  29    CL_RG           CL_SIGNED_INT16<br />
  30    CL_RG           CL_SIGNED_INT32<br />
  31    CL_RG           CL_UNSIGNED_INT8<br />
  32    CL_RG           CL_UNSIGNED_INT16<br />
  33    CL_RG           CL_UNSIGNED_INT32<br />
  34    CL_RA           CL_FLOAT<br />
  35    CL_RA           CL_HALF_FLOAT<br />
  36    CL_RA           CL_UNORM_INT8<br />
  37    CL_RA           CL_UNORM_INT16<br />
  38    CL_RA           CL_SNORM_INT16<br />
  39    CL_RA           CL_SIGNED_INT8<br />
  40    CL_RA           CL_SIGNED_INT16<br />
  41    CL_RA           CL_SIGNED_INT32<br />
  42    CL_RA           CL_UNSIGNED_INT8<br />
  43    CL_RA           CL_UNSIGNED_INT16<br />
  44    CL_RA           CL_UNSIGNED_INT32<br />
  45    CL_RGBA         CL_FLOAT<br />
  46    CL_RGBA         CL_HALF_FLOAT<br />
  47    CL_RGBA         CL_UNORM_INT8<br />
  48    CL_RGBA         CL_UNORM_INT16<br />
  49    CL_RGBA         CL_SNORM_INT16<br />
  50    CL_RGBA         CL_SIGNED_INT8<br />
  51    CL_RGBA         CL_SIGNED_INT16<br />
  52    CL_RGBA         CL_SIGNED_INT32<br />
  53    CL_RGBA         CL_UNSIGNED_INT8<br />
  54    CL_RGBA         CL_UNSIGNED_INT16<br />
  55    CL_RGBA         CL_UNSIGNED_INT32<br />
  56    CL_BGRA         CL_UNORM_INT8<br />
  57    CL_BGRA         CL_SIGNED_INT8<br />
  58    CL_BGRA         CL_UNSIGNED_INT8<br />
  59    CL_ARGB         CL_UNORM_INT8<br />
  60    CL_ARGB         CL_SIGNED_INT8<br />
  61    CL_ARGB         CL_UNSIGNED_INT8<br />
  62    CL_INTENSITY    CL_FLOAT<br />
  63    CL_INTENSITY    CL_HALF_FLOAT<br />
  64    CL_INTENSITY    CL_UNORM_INT8<br />
  65    CL_INTENSITY    CL_UNORM_INT16<br />
  66    CL_INTENSITY    CL_SNORM_INT16<br />
  67    CL_LUMINANCE    CL_FLOAT<br />
  68    CL_LUMINANCE    CL_HALF_FLOAT<br />
  69    CL_LUMINANCE    CL_UNORM_INT8<br />
  70    CL_LUMINANCE    CL_UNORM_INT16<br />
  71    CL_LUMINANCE    CL_SNORM_INT16        </p>
<p>oclDeviceQuery, Platform Name = NVIDIA CUDA, Platform Version = OpenCL 1.1 CUDA 4.0.1, SDK Revision = 7027912, NumDevs = 1, Device = GeForce GT 440</p>
<p>System Info: </p>
<p> Local Time/Date =  06:54:21, 12/09/2011<br />
 CPU Name: Intel(R) Core(TM)2 Duo CPU E7500 @ 2.93GHz<br />
 # of CPU processors: 2<br />
 Linux version 3.0.0-13-generic (buildd@crested) (gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3) ) #22-Ubuntu SMP Wed Nov 2 13:27:26 UTC 2011<br />
</code></p>
<p>Sedangkan aplikasi oclNbody, menghasilkanGambar berikut.<br />
<div id="attachment_642" class="wp-caption aligncenter" style="width: 310px"><a href="http://aawaskita.files.wordpress.com/2011/12/oclnbody.png"><img src="http://aawaskita.files.wordpress.com/2011/12/oclnbody.png?w=300&#038;h=169" alt="" title="oclnbody" width="300" height="169" class="size-medium wp-image-642" /></a><p class="wp-caption-text">Contoh aplikasi oclNbody</p></div></p>
<p>Semoga bermanfaat&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aawaskita.wordpress.com/640/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aawaskita.wordpress.com/640/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aawaskita.wordpress.com/640/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aawaskita.wordpress.com/640/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aawaskita.wordpress.com/640/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aawaskita.wordpress.com/640/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aawaskita.wordpress.com/640/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aawaskita.wordpress.com/640/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aawaskita.wordpress.com/640/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aawaskita.wordpress.com/640/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aawaskita.wordpress.com/640/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aawaskita.wordpress.com/640/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aawaskita.wordpress.com/640/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aawaskita.wordpress.com/640/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=640&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aawaskita.wordpress.com/2011/12/12/mudah-setup-gpgpu-di-ubuntu-11-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4ffa54f55442471cfaaa5cc7d5544c26?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">arya</media:title>
		</media:content>

		<media:content url="http://aawaskita.files.wordpress.com/2011/12/oclnbody.png?w=300" medium="image">
			<media:title type="html">oclnbody</media:title>
		</media:content>
	</item>
		<item>
		<title>Penggunaan OpenFOAM secara parallel</title>
		<link>http://aawaskita.wordpress.com/2011/06/17/penggunaan-openfoam-secara-parallel/</link>
		<comments>http://aawaskita.wordpress.com/2011/06/17/penggunaan-openfoam-secara-parallel/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 06:57:09 +0000</pubDate>
		<dc:creator>aawaskita</dc:creator>
				<category><![CDATA[Jejak langkah untuk bersekolah lagi]]></category>
		<category><![CDATA[Semester 2]]></category>
		<category><![CDATA[Tentang OSS]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://aawaskita.wordpress.com/?p=631</guid>
		<description><![CDATA[Setelah sebelumnya OpenFOAM diinstalasi dalam sistem Ubuntu 11.04, sekarang kita akan mencoba menggunakannya dalam sistem cluster. Yang perlu diperhatikan adalah OpenFOAM telah menyertakan pustaka yang mengakomodasi operasi komputasi parallel, yaitu openMPI. Hal ini bisa dilihat dari respon yang diberikan oleh perintah which mpirun. Respon yang diberikan adalah sebagai berikut. /home/arya/OpenFOAM/ThirdParty-1.7.1/platforms/linuxGcc/openmpi-1.4.1/bin/mpirun Karena itu, aktivitas yang terkait [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=631&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Setelah <a href="http://aawaskita.wordpress.com/2011/05/27/instalasi-openfoam-pada-ubuntu-11-04/">sebelumnya</a> OpenFOAM diinstalasi dalam sistem Ubuntu 11.04, sekarang kita akan mencoba menggunakannya dalam sistem cluster.</p>
<p>Yang perlu diperhatikan adalah OpenFOAM telah menyertakan pustaka yang mengakomodasi operasi komputasi parallel, yaitu openMPI. Hal ini bisa dilihat dari respon yang diberikan oleh perintah <code>which mpirun</code>. Respon yang diberikan adalah sebagai berikut.</p>
<p><code>/home/arya/OpenFOAM/ThirdParty-1.7.1/platforms/linuxGcc/openmpi-1.4.1/bin/mpirun</code></p>
<p>Karena itu, aktivitas yang terkait instalasi pustaka operasi komputasi parallel untuk persiapan lingkungan cluster dapat diabaikan. Sehingga kita dapat melangkah ke tahap selanjutnya.<br />
<span id="more-631"></span></p>
<p>Tahap selanjutnya adalah mewadahi keperluan penggunaan data secara bersama oleh semua node hitung (<em>compute node</em>). Hal ini dilakukan dengan menginstall sistem file terdistribusi seperti <a href="http://nfs.sourceforge.net/">NFS</a> (Network File System). Instalasi dapat dilakukan dengan menjalankan perintah berikut.</p>
<p><code>sudo apt-get install nfs-common nfs-kernel-server</code></p>
<p>Selanjutnya adalah mendefinisikan direktori kerja di mana data simulasi akan digunakan bersama oleh setiap node hitung. Mendefinisikannya dapat dilakukan dengan panduan <a href="http://aawaskita.wordpress.com/2010/07/07/implementasi-cluster-mcnp/">ini</a>. Sebagai contoh, kita akan menggunakan bersama direktori kerja di <code>/home/arya/OpenFoam/arya-1.7.1/run</code>. Kemudian, ada dua node hitung yang terlibat, masing-masing <code>node01</code> dan <code>node02</code>. Maka, modifikasi berkas <code>/etc/exports</code> dengan mengisikan beris berikut ini.</p>
<p><code>/home/arya/OpenFoam/arya-1.7.1/run \<br />
node01(rw,insecure,no_subtree_check,no_root_squash,sync) \<br />
node02(rw,insecure,no_subtree_check,no_root_squash,sync)</code></p>
<p>Setelahnya, kita dapat memulai melakukan simulasi.</p>
<p>Terkait eksekusi secara parallel, OpenFOAM memberikan fasilitas untuk mendekomposisi domain (obyek yang disimulasi). Dekomposisi kita lakukan sebelum perhitungan secara parallel dilakukan. Sehingga kita harus mendefinisikan bahwa obyek yang akan disimulasi akan dipecah menjadi berapa bagian dan dengan cara apa. Jumlah sub domain tersebut akan didefinisikan ulang oleh OpenFOAM terkait batas sub domain, serta berbagai variabel dalam sub domain tersebut. Berikut ini adalah mekanisme dekomposisinya. </p>
<ol>
<li>Definisi dekomposisi diletakkan di berkas <code>decomposeParDict</code>. Berkas tersebut berisi beberapa informasi berikut ini.
<ul>
<li>Banyaknya sub domain</li>
<li>Cara pembagian. Pada contoh, disebutkan bahwa pembagian domain dilakukan dengan cara <em>simple</em>, yang berarti pembagian dilakukan dengan ukuran yang sama. Cara pembagian yang lain dapat dipelajari dari dokumentasi OpenFOAM yang dikompilasi dengan dikompilasinya paket OpenFAOM kita.</li>
<li>Apakah data dekomposisi domain tersebar di beberapa disk/node? Sebaiknya tidak (diisi <em>no</em>) karena belum diuji jika terdistribusi. Apalagi kita telah memasang nfs sebagai mediator ketersebaran data.</li>
</ul>
<p>Contoh dari definisi dekomposisi tersebut adalah seperti di bawah ini</p>
<pre>
<code>
FoamFile
{
    version     2.0;
    format      ascii ;
    class       dictionary ;
    location    " system " ;
    object      decomposeParDict ;
}

numberOfSubdomains 2 ;
method  simple;
simpleCoeffs
{
    n       (2 1 1);
    delta   0.001;
}
distributed no ;
roots ( );
</code>
</pre>
</li>
<li>
Setelah mendefinisi pembagian domain obyek yang disimulasi, eksekusinya dilakukan dengan perintah berikut. Setelah menjalankan perintah tersebut, akan terdapat tambahan direktori yang diawali kata <code>processor</code> dengan <code>n</code> adalah nomor pemroses. Di bawahnya, akan terdapat struktur direktori dan berkas yang sama dengan struktur di atasnya. Data tersebut yang nantinya akan disitribusikan ke pemroses setelah daemon MPI diinisiasi dan setiap pemroses mendapatkan nilai <code>rank</code>.</p>
<p><code>decomposePar</code>
</li>
<li>
Langkah selanjutnya adalah menjalankan perhitungan secara parallel dengan perintah berikut. Perintah tersebut akan mengeksekusi simulasi icoFOAM (aliran laminar, <em>incompressible</em>, <em>isothermal</em>, dengan mesh seragam) secara parallel di mesin-mesin yang didefinisikan oleh berkas yang dijelaskan oleh argumen <code>machines</code>, sebanyak dua (seperti yang didefinisikan dalam berkas dekomposisi domain), untuk kemudian menyimpan log hasil hasil perhitungan ke dalam berkas yang diberi nama <code>log</code>.</p>
<p><code>mpirun --hostfile  -np 2 icoFoam -parallel &gt; log &amp;</code>
</li>
<li>
Perhitungan yang dilakukan tetap disimpan dalam bentuk subdomain. Karenanya, untuk mengembalikan lagi dekomposisi menjadi obyek simulasi utuh seperti di awal, perlu dijalankan perintah  berikut.</p>
<p><code>reconstructPar</code>
</li>
<li>
Setelah rekonstruksi domain dilakukan, kita dapat melihat hasilnya menggunakan Paraview. Jalankan perintah berikut. <code></code> menunjukkan direktori kasus yang sedang disimulasi.</p>
<p><code>paraFoam -case </code>
</li>
</ol>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aawaskita.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aawaskita.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aawaskita.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aawaskita.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aawaskita.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aawaskita.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aawaskita.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aawaskita.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aawaskita.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aawaskita.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aawaskita.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aawaskita.wordpress.com/631/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aawaskita.wordpress.com/631/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aawaskita.wordpress.com/631/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=631&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aawaskita.wordpress.com/2011/06/17/penggunaan-openfoam-secara-parallel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4ffa54f55442471cfaaa5cc7d5544c26?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">arya</media:title>
		</media:content>
	</item>
		<item>
		<title>Runge Kutta Implisit dengan python (3)</title>
		<link>http://aawaskita.wordpress.com/2011/06/17/runge-kutta-implisit-dengan-python-3/</link>
		<comments>http://aawaskita.wordpress.com/2011/06/17/runge-kutta-implisit-dengan-python-3/#comments</comments>
		<pubDate>Fri, 17 Jun 2011 03:02:51 +0000</pubDate>
		<dc:creator>aawaskita</dc:creator>
				<category><![CDATA[Jejak langkah untuk bersekolah lagi]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Semester 2]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://aawaskita.wordpress.com/?p=621</guid>
		<description><![CDATA[Setelah melakukan iterasi dengan metode Newton, sekarang saatnya menggunakan metode Picard [1]. Metode ini jauh lebih sederhana dibanding metode Newton. Seperti telah dijelaskan sebelumnya, persamaan yang mendasari perhitungan Runge Kutta ada dua, masing-masing adalah persamaan untuk menghitung nilai antara dan persamaan untuk menghitung nilai fungsi. Pada metode Picard, tidak diperlukan mencari matriks Jacobian dari persamaan [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=621&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Setelah melakukan iterasi dengan metode <a href="http://aawaskita.wordpress.com/2011/06/15/runge-kutta-implisit-dengan-python-2/">Newton</a>, sekarang saatnya menggunakan metode Picard [1]. Metode ini jauh lebih sederhana dibanding metode Newton.</p>
<p>Seperti telah dijelaskan <a href="http://aawaskita.wordpress.com/2011/06/13/runge-kutta-implisit-dengan-python-1/">sebelumnya</a>, persamaan yang mendasari perhitungan Runge Kutta ada dua, masing-masing adalah persamaan untuk menghitung nilai antara dan persamaan untuk menghitung nilai fungsi. Pada metode Picard, tidak diperlukan mencari matriks Jacobian dari persamaan nilai antara. Cukup menggunakan persamaan nilai antara saja.</p>
<p>Tahap pertama, nilai tebakan awal (yang juga merupakan <em>initial value</em>) dijadikan sebagai nilai antara. Selanjutnya, nilai tebakan awal itu digunakan untuk menghitung nilai antara yang diperbarui. Persamaan nilai antara adalah seperti persamaan (1)</p>
<p><img src='http://s0.wp.com/latex.php?latex=y_%7Bik%7D+%3D+x_%7Bk%7D+%2B+h+%5CSigma_%7Bj%3Di%7D%5E%7Bs%7D+a_%7Bij%7Df%28t_%7Bk%7D%2Bc_%7Bj%7Dh%2Cy_%7Bjk%7D%29+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='y_{ik} = x_{k} + h &#92;Sigma_{j=i}^{s} a_{ij}f(t_{k}+c_{j}h,y_{jk}) ' title='y_{ik} = x_{k} + h &#92;Sigma_{j=i}^{s} a_{ij}f(t_{k}+c_{j}h,y_{jk}) ' class='latex' /> &nbsp;&nbsp;&nbsp;&nbsp; (1)<br />
<span id="more-621"></span><br />
Dari persamaan (1) kita sekarang memiliki dua nilai antara. Yang pertama adalah nilai antara yang di-<em>assigned</em> dari nilai tebakan awal. Dan yang kedua adalah nilai antara dari hasil memasukkan nilai tebakan awal ke persamaan (1). Selisih nilai antara kedua dan pertama dibandingkan. Jika lebih kecil atau sama dengan nilai toleransi, maka perhitungan nilai antara untuk <em>step</em> pertama dapat dilanjutkan dengan perhitungan nilai fungsi. Jika masih lebih besar, maka nilai antara kedua menjadi nilai antara pertama. Sedangkan nilai antara kedua dihitung ulang dari nilai antara pertama yang diperbarui. Hal ini dilakukan berulang hingga seluruh rentang waktu diakomodasi. Berikut adalah program perhitungan Runge Kutta dengan metode iterasi Picard. Seperti pada iterasi Newton, program ini dibuat dengan asumsi jika iterasi pada suatu step mencapai 5000, sedangkan selisih nilai antara pertama dan kedua masih lebih besar dari nilai toleransi, maka kondisi tersebut mengindikasikan tidak tercapainya konvergensi, sehingga perhitungan harus dihentikan.</p>
<pre>
<code>
from numpy import *
from numpy import linalg as la
import os.path
from time import *
from Equations import *
from Butcher import *
from Symbols import *
class PicardRKSolver():
	def __init__(self,Eq,Symbols,Butcher,Initial,Stop,StepSize,TimeTarget):
		self.errorStatus=0

		"""lenEq: banyaknya persamaan"""
		self.lenEq=len(Eq)

		"""persamaan yang akan diselesaikan"""
		self.equations=Eq

		"""simbol/variabel yang digunakan"""
		self.symbols=Symbols

		"""orde: orde penyelesaian"""
		self.orde=len(Butcher[1])

		"""x: nilai target yang akan dihitung pada setiap step size"""
		self.x1=array(Initial)

		"""y: nilai antara dalam bentuk sub array untuk menghitung derivatif"""
		"""y1: nilai antara, yang tebakan awalnya disamakan dengan nilai awal"""
		tempY=[]
		for i in range(self.orde):
			tempY.append(Initial)
		self.y=array(tempY)
		self.y1=array(tempY)
		self.y1=reshape(self.y1,(self.orde*self.lenEq,1))

		"""y2: nilai antara yang diperbarui"""
		self.y2=arange(1)

		"""delta: perbaikan nilai antara"""
		self.delta=self.y1

		"""a,b,c: komponen array Butcher"""
		self.a=Butcher[0]
		self.b=Butcher[1]
		self.c=Butcher[2]

		"""
		self.stop: stopping criteria
		self.h=step size
		"""
		self.stop=Stop
		self.h=StepSize
		self.t=TimeTarget
		self.selisih=self.t/self.h-int(self.t/self.h)
		self.stop=Stop
		self.h=StepSize
		self.t=TimeTarget
		self.selisih=self.t/self.h-int(self.t/self.h)

		self.__setY()

		self.elapsed=0
		self.start=time()
		if self.selisih==float(0):
			i=0
			while(i&lt;int(self.t/self.h) and self.errorStatus==0):
				self.__iterate()
				self.__setY()
				i+=1
			self.elapsed=time()-self.start
		else:
			i=0
			while(i&lt;int(self.t/self.h) and self.errorStatus==0):
				self.__iterate()
				self.__setY()
				i+=1
			self.h=self.selisih
			i=int(self.t/self.h)+1
			self.__extraIterate()
			self.elapsed=time()-self.start

		self.namafile.close()
		if self.errorStatus==1:
			print &#039;Quit unseccessful in &#039; + str(self.elapsed) + &#039;seconds ... &#039;
		else:
			print &#039;Computation done ...&#039;	

	def __setY(self):
		l=0
		for i in range(self.orde):
			for j in range(self.lenEq):
				self.y[i][j]=self.y1[l]
				l+=1
		p=[]
		l=0
		for i in range(self.orde):
			for j in range(self.lenEq):
				q=0
				for k in range(self.orde):
					q=q+(self.a[i][k]*self.y[k][j])
				p.append(self.x1[j]+q*self.h)
				l+=1
		self.y2=array(p)
		self.y2=reshape(self.y2,(self.orde*self.lenEq,1))

	def __iterate(self):
		l=0
		self.delta=self.y2-self.y1
		self.y1=self.y2
		l+=1
		while(self.stop&lt;linalg.norm(self.delta) and l=5000:
			self.errorStatus=1

	def __setX(self):
		self.y1=reshape(self.y1,(self.orde,self.lenEq))
		for i in range(self.lenEq):
			tempY=0
			for j in range(self.orde):
				tempY=tempY+(self.b[j]*self.y1[j][i])
			self.x1[i]=self.x1[i]+(self.h*tempY)
		self.y1=reshape(self.y1,(self.orde*self.lenEq,1))
</code>
</pre>
<p>Referensi<br />
[1] R. Holsapple, R. Iyer, and D. Doman, <em>Variable step-size selection methods for implicit integration schemes for odes</em>, International Journal of Numerical Analysis and Modeling, vol. 4, no. 2, pp. 212–242, 2007.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aawaskita.wordpress.com/621/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aawaskita.wordpress.com/621/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aawaskita.wordpress.com/621/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aawaskita.wordpress.com/621/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aawaskita.wordpress.com/621/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aawaskita.wordpress.com/621/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aawaskita.wordpress.com/621/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aawaskita.wordpress.com/621/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aawaskita.wordpress.com/621/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aawaskita.wordpress.com/621/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aawaskita.wordpress.com/621/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aawaskita.wordpress.com/621/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aawaskita.wordpress.com/621/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aawaskita.wordpress.com/621/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=621&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aawaskita.wordpress.com/2011/06/17/runge-kutta-implisit-dengan-python-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4ffa54f55442471cfaaa5cc7d5544c26?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">arya</media:title>
		</media:content>
	</item>
		<item>
		<title>Runge Kutta implisit dengan python (2)</title>
		<link>http://aawaskita.wordpress.com/2011/06/15/runge-kutta-implisit-dengan-python-2/</link>
		<comments>http://aawaskita.wordpress.com/2011/06/15/runge-kutta-implisit-dengan-python-2/#comments</comments>
		<pubDate>Wed, 15 Jun 2011 08:27:15 +0000</pubDate>
		<dc:creator>aawaskita</dc:creator>
				<category><![CDATA[Jejak langkah untuk bersekolah lagi]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Semester 2]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://aawaskita.wordpress.com/?p=583</guid>
		<description><![CDATA[Setelah pada tulisan sebelumnya, telah ada tiga class pendukung yang telah didefinisikan, kita siap untuk mendefinisikan penyelesaian runge kutta implisit. Skenarionya, digunakan dua metode iterasi, masing-masing Newton dan Picard. Metode Newton akan dibahas lebih dulu. Berdasarkan dua persamaan yang dijelaskan pada tulisan pertama, serta metode penyelesaian yang dijelaskan dalam [1], persamaan nilai antara diolah sedemikian [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=583&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Setelah pada tulisan <a href="http://aawaskita.wordpress.com/2011/06/13/runge-kutta-implisit-dengan-python-1/">sebelumnya</a>, telah ada tiga class pendukung yang telah didefinisikan, kita siap untuk mendefinisikan penyelesaian runge kutta implisit. Skenarionya, digunakan dua metode iterasi, masing-masing Newton dan Picard. Metode <a href="http://en.wikipedia.org/wiki/Newton's_method">Newton</a> akan dibahas lebih dulu.<br />
Berdasarkan dua persamaan yang dijelaskan pada tulisan pertama, serta metode penyelesaian yang dijelaskan dalam [1], persamaan nilai antara diolah sedemikian rupa sehingga terbentuk persamaan berikut. <img src='http://s0.wp.com/latex.php?latex=J+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='J ' title='J ' class='latex' /> adalah fungsi Jacobi untuk setiap persamaan yang terlibat.</p>
<p><img src='http://s0.wp.com/latex.php?latex=J+%5Cdelta+%3D+-F%28y%29+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='J &#92;delta = -F(y) ' title='J &#92;delta = -F(y) ' class='latex' /> &nbsp;&nbsp;&nbsp;&nbsp; (1) <span id="more-583"></span></p>
<p>Selanjutnya, <img src='http://s0.wp.com/latex.php?latex=%5Cdelta+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='&#92;delta ' title='&#92;delta ' class='latex' /> diselesaikan sehingga nilainya lebih kecil atau sama dengan nilai toleransi. Saat kondisi <img src='http://s0.wp.com/latex.php?latex=%5Cdelta+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='&#92;delta ' title='&#92;delta ' class='latex' /> tercapai, nilai <img src='http://s0.wp.com/latex.php?latex=%5Cdelta+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='&#92;delta ' title='&#92;delta ' class='latex' /> digunakan untuk memperbaiki nilai antara menggunakan persamaan (2). Yang perlu diperhatikan adalah elemen <img src='http://s0.wp.com/latex.php?latex=%5Cdelta+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='&#92;delta ' title='&#92;delta ' class='latex' /> harus sebanyak jumlah persamaan dikalikan orde penyelesaian.</p>
<p><img src='http://s0.wp.com/latex.php?latex=y_%7Bj%2B1%7D+%3D+y_%7Bj%7D+%2B+%5Cdelta+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='y_{j+1} = y_{j} + &#92;delta ' title='y_{j+1} = y_{j} + &#92;delta ' class='latex' /> &nbsp;&nbsp;&nbsp;&nbsp; (2)</p>
<p>Nilai antara yang diperoleh dari persamaan di atas, digunakan untuk memperperbaiki nilai fungsi di titik <em>step size</em> dikalikan <code>k</code>. <code>k</code> adalah nilai step ke sekian dalam iterasi. Nilai fungsi diperbaiki dengan persamaan (3).</p>
<p><img src='http://s0.wp.com/latex.php?latex=x_%7Bk%2B1%7D%3Dx_%7Bk%7D+%2B+h+%5CSigma_%7Bj%3D1%7D%5E%7Bs%7D+b_%7Bi%7Df%28t_%7Bk%7D%2Bc_%7Bj%7Dh%2Cy_%7Bik%7D+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='x_{k+1}=x_{k} + h &#92;Sigma_{j=1}^{s} b_{i}f(t_{k}+c_{j}h,y_{ik} ' title='x_{k+1}=x_{k} + h &#92;Sigma_{j=1}^{s} b_{i}f(t_{k}+c_{j}h,y_{ik} ' class='latex' /> &nbsp;&nbsp;&nbsp;&nbsp; (3)</p>
<p>Nilai fungsi yang baru digunakan kembali untuk memprediksi nilai antara, melalui persamaan (4).</p>
<p><img src='http://s0.wp.com/latex.php?latex=y_%7Bik%7D%3Dx_%7Bk%7D%2Bh+%5CSigma_%7Bj%3D1%7D%5E%7Bs%7D+a_%7Bij%7Df%28t_%7Bk%7D%2Bc_%7Bj%7Dh%2Cy_%7Bjk%7D%29+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='y_{ik}=x_{k}+h &#92;Sigma_{j=1}^{s} a_{ij}f(t_{k}+c_{j}h,y_{jk}) ' title='y_{ik}=x_{k}+h &#92;Sigma_{j=1}^{s} a_{ij}f(t_{k}+c_{j}h,y_{jk}) ' class='latex' /> &nbsp;&nbsp;&nbsp;&nbsp; (4)</p>
<p>Jika dikaitkan dengan persamaan (1), nilai <img src='http://s0.wp.com/latex.php?latex=F%28y%29+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='F(y) ' title='F(y) ' class='latex' /> diperoleh dari persamaan (4), tepatnya seperti persamaan (5).</p>
<p><img src='http://s0.wp.com/latex.php?latex=F%28y%29+%3D+y_%7Bik%7D+-+x_%7Bk%7D+-+h+%5CSigma_%7Bj%3D1%7D%5E%7Bs%7D+a_%7Bij%7Df%28t_%7Bk%7D%2Bc_%7Bj%7Dh%2Cy_%7Bjk%7D%29+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='F(y) = y_{ik} - x_{k} - h &#92;Sigma_{j=1}^{s} a_{ij}f(t_{k}+c_{j}h,y_{jk}) ' title='F(y) = y_{ik} - x_{k} - h &#92;Sigma_{j=1}^{s} a_{ij}f(t_{k}+c_{j}h,y_{jk}) ' class='latex' /> &nbsp;&nbsp;&nbsp;&nbsp; (5)</p>
<p>Sedangkan nilai <img src='http://s0.wp.com/latex.php?latex=J+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='J ' title='J ' class='latex' /> dari persamaan (1), merupakan matriks jacobian dari persamaan yang terlibat dalam sistem. Sebagai contoh, sistem dengan dua persamaan dan akan diselesaikan dengan RK orde dua, maka akan terdapat matriks <img src='http://s0.wp.com/latex.php?latex=J+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='J ' title='J ' class='latex' /> berukuran <code>4 x 4</code>. Kenapa bisa begitu?</p>
<p>Dari faktor orde penyelesaian, akan diperoleh matriks berdimensi <code>orde x orde</code>. Nah, setiap elemen dalam matriks berdimensi <code>orde x orde</code> tersebut, sejatinya merupakan matriks juga yang berdimensi <code>n x n</code>, dengan <code>n</code> adalah banyaknya persamaan (dan sudah tentu banyaknya variabel) yang terlibat dalam sistem. Karena orde penyelesaian yang digunakan adalah dua, dan jumlah persamaannya juga dua, maka dimensi matriks keseluruhan adalah <code>4 x 4</code>. Kesimpulannya, sistem dengan <code>m</code> persamaan dan diselesaikan dengan orde <code>n</code>, akan dihasilkan matriks <img src='http://s0.wp.com/latex.php?latex=J+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='J ' title='J ' class='latex' /> dengan dimensi <code>mn x mn</code>. Lalu bagaiman mengisi setiap elemen matriks tersebut?</p>
<p>Matriks pertama berdimensi <code>orde x orde</code>, telah disebutkan berisi matriks berdimensi <code>n x n</code>, dengan <code>n</code> adalah jumlah persamaan yang terlibat. Untuk matriks yang kedua ini, isinya adalah sebagai berikut. Jika terdapat sistem dengan dua persamaan, masing-masing <img src='http://s0.wp.com/latex.php?latex=y_%7B1%7D&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='y_{1}' title='y_{1}' class='latex' /> dan <img src='http://s0.wp.com/latex.php?latex=y_%7B2%7D&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='y_{2}' title='y_{2}' class='latex' />, serta variabel masing-masing <img src='http://s0.wp.com/latex.php?latex=var_%7B1%7D&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='var_{1}' title='var_{1}' class='latex' /> dan <img src='http://s0.wp.com/latex.php?latex=var_%7B2%7D&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='var_{2}' title='var_{2}' class='latex' />, maka isi matriks kedua adalah seperti persamaan (6)</p>
<p><img src='http://s0.wp.com/latex.php?latex=%5Cbegin%7Bbmatrix%7D++%5Cfrac%7B%5Cpartial%7By_%7B1%7D%7D%7D%7B%5Cpartial%7Bvar_%7B1%7D%7D%7D+%26+%5Cfrac%7B%5Cpartial%7By_%7B1%7D%7D%7D%7B%5Cpartial%7Bvar_%7B2%7D%7D%7D%5C%5C++%5Cfrac%7B%5Cpartial%7By_%7B2%7D%7D%7D%7B%5Cpartial%7Bvar_%7B1%7D%7D%7D+%26++%5Cfrac%7B%5Cpartial%7By_%7B2%7D%7D%7D%7B%5Cpartial%7Bvar_%7B2%7D%7D%7D++%5Cend%7Bbmatrix%7D++&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='&#92;begin{bmatrix}  &#92;frac{&#92;partial{y_{1}}}{&#92;partial{var_{1}}} &amp; &#92;frac{&#92;partial{y_{1}}}{&#92;partial{var_{2}}}&#92;&#92;  &#92;frac{&#92;partial{y_{2}}}{&#92;partial{var_{1}}} &amp;  &#92;frac{&#92;partial{y_{2}}}{&#92;partial{var_{2}}}  &#92;end{bmatrix}  ' title='&#92;begin{bmatrix}  &#92;frac{&#92;partial{y_{1}}}{&#92;partial{var_{1}}} &amp; &#92;frac{&#92;partial{y_{1}}}{&#92;partial{var_{2}}}&#92;&#92;  &#92;frac{&#92;partial{y_{2}}}{&#92;partial{var_{1}}} &amp;  &#92;frac{&#92;partial{y_{2}}}{&#92;partial{var_{2}}}  &#92;end{bmatrix}  ' class='latex' /> &nbsp;&nbsp;&nbsp;&nbsp; (6)</p>
<p>Jika orde penyelesaian sama dengan dua, maka persamaan (6) adalah bagian dari elemen ke <img src='http://s0.wp.com/latex.php?latex=i%2Cj+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='i,j ' title='i,j ' class='latex' /> dari matriks berdimensi <code>orde x orde</code>. Matriks berdimensi <code>2 x 2</code> tersebut adalah seperti persamaan (7), dengan <img src='http://s0.wp.com/latex.php?latex=I+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='I ' title='I ' class='latex' /> adalah matriks identitas, sedangkan <img src='http://s0.wp.com/latex.php?latex=j_%7Bi%2Ck%7D+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='j_{i,k} ' title='j_{i,k} ' class='latex' /> adalah matriks dari persamaan (6)</p>
<p><img src='http://s0.wp.com/latex.php?latex=%5Cbegin%7Bbmatrix%7D++I-ha_%7B1%2C1%7Dj_%7B1%2C1%7D+%26+-ha_%7B1%2C2%7Dj_%7B1%2C2%7D+%5C%5C++ha_%7B2%2C1%7Dj_%7B2%2C1%7D+%26+I-ha_%7B2%2C2%7Dj_%7B2%2C2%7D++%5Cend%7Bbmatrix%7D++&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='&#92;begin{bmatrix}  I-ha_{1,1}j_{1,1} &amp; -ha_{1,2}j_{1,2} &#92;&#92;  ha_{2,1}j_{2,1} &amp; I-ha_{2,2}j_{2,2}  &#92;end{bmatrix}  ' title='&#92;begin{bmatrix}  I-ha_{1,1}j_{1,1} &amp; -ha_{1,2}j_{1,2} &#92;&#92;  ha_{2,1}j_{2,1} &amp; I-ha_{2,2}j_{2,2}  &#92;end{bmatrix}  ' class='latex' /> &nbsp;&nbsp;&nbsp;&nbsp; (7)</p>
<p>Terkahir, program python untuk menyelesaikan sistem persamaan non-linier dengan runge kutta implisit adalah seperti program berikut ini. Program tersebut mengunakan asumsi bahwa ketika dalam suatu <code>step</code>, iterasi untuk mencapai konvergensi (nilai <img src='http://s0.wp.com/latex.php?latex=%5Cdelta&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='&#92;delta' title='&#92;delta' class='latex' /> lebih kecil daripada nilai toleransi) melebihi 5000, maka iterasi dihentikan. Perhitungan runge kutta dengan iterasi Newton selanjutnya dihentikan.</p>
<pre>
<code>
from numpy import *
from numpy import linalg as la
import os.path
from time import *
from Equations import *
from Butcher import *
from Symbols import *
class NewtonRKSolver():
	def __init__(self,Eq,Symbols,Butcher,Initial,Stop,StepSize,TimeTarget):
		"""lenEq: banyaknya persamaan"""
		self.lenEq=len(Eq)

		"""persamaan yang akan diselesaikan"""
		self.equations=Eq

		"""simbol/variabel yang digunakan"""
		self.symbols=Symbols

		"""orde: orde penyelesaian"""
		self.orde=len(Butcher[1])

		"""Jv=-F: sistem persamaan linier yang akan diselesaikan"""
		self.F=arange(1)
		self.v=arange(1)
		self.J=arange(1)

		"""x: nilai target yang akan dihitung pada setiap step size"""
		self.x1=array(Initial)

		self.errorStatus=0

		"""
		self.stop: stopping criteria
		self.h=step size
		"""
		self.stop=Stop
		self.h=StepSize
		self.t=TimeTarget
		self.selisih=self.t/self.h-int(self.t/self.h)

		"""y: nilai antara dalam bentuk sub array untuk menghitung derivatif"""
		"""y1: nilai antara, yang tebakan awalnya disamakan dengan nilai awal"""
		tempY=[]
		for i in range(self.orde):
			tempY.append(Initial)
		self.y=array(tempY)
		self.y1=array(tempY)
		self.y1=reshape(self.y1,(self.orde*self.lenEq,1))
		l=0

		"""delta: perbaikan nilai antara"""
		self.delta=self.y1

		"""a,b,c: komponen array Butcher"""
		self.a=Butcher[0]
		self.b=Butcher[1]
		self.c=Butcher[2]

		"""membentuk vektor F"""
		self.__setF()

		"""membentuk matriks J"""
		self.__setJ()

		self.elapsed=0
		self.start=time()
		if self.selisih==float(0):
			i=0
			while(i&lt;int(self.t/self.h) and self.errorStatus==0):
				self.__iterate()
				self.__setY()
				self.__setF()
				self.__setJ()
				i+=1
			self.elapsed=time()-self.start	

		else:
			i=0
			while(i&lt;int(self.t/self.h) and self.errorStatus==0):
				self.__iterate()
				self.__setY()
				self.__setF()
				self.__setJ()
				i+=1
			self.h=self.selisih
			self.__iterate()
			i=int(self.t/self.h)+1
			self.elapsed=time()-self.start

		if self.errorStatus==1:
			print &#039;Quit unseccessful in &#039; + str(self.elapsed) + &#039;seconds ... &#039;
			print &#039;Tidak konvergen di tahap-&#039; + str(i)

	def __getNumDerivative(self,eq,number,val):
		a=self.equations[eq]
		b=self.equations[eq]
		for i in range(self.lenEq):
			if i==number:
				a=a.subs(self.symbols[i],(val[i]+0.001))
				b=b.subs(self.symbols[i],val[i])
			else:
				a=a.subs(self.symbols[i],val[i])
				b=b.subs(self.symbols[i],val[i])
		return (a-b)/0.001

	def __setF(self):
		p=[]
		l=0
		for i in range(self.orde):
			for j in range(self.lenEq):
				q=0
				for k in range(self.orde):
					q=q+self.a[i][k]*self.y[k][j]
				p.append(self.x1[j]-self.y1[l]+q*self.h)
				l+=1
		self.F=array(p)

		self.F=reshape(self.F,(self.orde*self.lenEq,1))

	def __setJ(self):
		tempJ=[]
		for i in range(self.orde):
			for l in range(self.orde):
				tempJ1=[]
				for j in range(self.lenEq):
					for k in range(self.lenEq):
						tempJ1.append(self.__getNumDerivative(j,k,self.y[l]))
				tempJ1=array(tempJ1)
				tempJ1=reshape(tempJ1,(self.lenEq,self.lenEq))
				tempJ.append(tempJ1)
		tempJ=array(tempJ)
		p=[]
		k=0
		for i in range(self.orde):
			for j in range(self.orde):
				if i==j:
					q=identity(self.lenEq)-self.h*self.a[i][j]*tempJ[k]
					p.append(q)
				else:
					q=-self.h*self.a[i][j]*tempJ[k]
					p.append(q)
				k+=1
		self.J=array(p)
		p=[]
		for i in range(self.orde):
			for j in range(self.lenEq):
				for k in range(self.orde*i,self.orde*(i+1)):
					for l in range(self.lenEq):
						p.append(self.J[k][j][l])
		self.J=array(p)
		x=self.orde*self.lenEq
		self.J=reshape(self.J,(x,x))

	def __setX(self):
		self.y1=reshape(self.y1,(self.orde,self.lenEq))
		for i in range(self.lenEq):
			tempY=0
			for j in range(self.orde):
				tempY=tempY+(self.b[j]*self.y1[j][i])
			self.x1[i]=self.x1[i]+(self.h*tempY)
		self.y1=reshape(self.y1,(self.orde*self.lenEq,1))

	def __setY(self):
		l=0
		for i in range(self.orde):
			for j in range(self.lenEq):
				self.y[i][j]=self.y1[l]
				l+=1

	def __iterate(self):
		l=0
		self.delta=linalg.solve(self.J,self.F)
		self.y1=self.delta+self.y1
		l+=1
		while(self.stop&lt;linalg.norm(self.delta) and l=5000:
			self.errorStatus=1

	def getF(self):
		return self.F

	def getJ(self):
		return self.J
</code>
</pre>
<p>Referensi<br />
[1]. G. Hall and J.M. Watt. Modern Numerical Methods for Ordinary Differential Equations. Oxford University Press, 1976.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aawaskita.wordpress.com/583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aawaskita.wordpress.com/583/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aawaskita.wordpress.com/583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aawaskita.wordpress.com/583/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aawaskita.wordpress.com/583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aawaskita.wordpress.com/583/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aawaskita.wordpress.com/583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aawaskita.wordpress.com/583/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aawaskita.wordpress.com/583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aawaskita.wordpress.com/583/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aawaskita.wordpress.com/583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aawaskita.wordpress.com/583/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aawaskita.wordpress.com/583/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aawaskita.wordpress.com/583/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=583&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aawaskita.wordpress.com/2011/06/15/runge-kutta-implisit-dengan-python-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4ffa54f55442471cfaaa5cc7d5544c26?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">arya</media:title>
		</media:content>
	</item>
		<item>
		<title>Runge Kutta implisit dengan python (1)</title>
		<link>http://aawaskita.wordpress.com/2011/06/13/runge-kutta-implisit-dengan-python-1/</link>
		<comments>http://aawaskita.wordpress.com/2011/06/13/runge-kutta-implisit-dengan-python-1/#comments</comments>
		<pubDate>Mon, 13 Jun 2011 03:49:35 +0000</pubDate>
		<dc:creator>aawaskita</dc:creator>
				<category><![CDATA[Jejak langkah untuk bersekolah lagi]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Semester 2]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://aawaskita.wordpress.com/?p=566</guid>
		<description><![CDATA[Pustaka ini dibuat dengan python karena beberapa latar belakang, diantaranya adalah python hampir bisa dipastikan ada dalam semua distro GNU/Linux, mempelajarinya tidak terlalu sulit (perspektif pribadi) dan kebutuhan untuk tahu bagaimana membuat program penyelesaian runge kutta implisit secara riil. Memang, ini pengalaman pertama saya berkutat dengan runge kutta, dan langsung implisit. Selanjutnya, kita perlu mendefinisikan [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=566&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Pustaka ini dibuat dengan python karena beberapa latar belakang, diantaranya adalah python hampir bisa dipastikan ada dalam semua distro GNU/Linux, mempelajarinya tidak terlalu sulit (perspektif pribadi) dan kebutuhan untuk tahu bagaimana membuat program penyelesaian runge kutta implisit secara riil. Memang, ini pengalaman pertama saya berkutat dengan runge kutta, dan langsung implisit.<br />
Selanjutnya, kita perlu mendefinisikan kebutuhan. Yang paling penting setelah kebutuhan untuk membuat pustaka yang mampu melakukan perhitungan runge kutta implisit, adalah pengguan pustaka ini dapat memasukkan berbagai fungsi yang diinginkan. Karenanya, pustaka ini harus dilengkapi dengan kemapuan parsing persaman. Untunglah, sudah ada pustaka untuk <a href="http://code.google.com/p/sympy/">komputasi simbolik</a> yang disediakan python. Penggunaan pustaka komputasi simbolik menambah kebutuhan baru untuk mendefinisikan variabel yang digunakan dalam persamaan.<span id="more-566"></span><br />
Kebutuhan tersebut, jika digambarkan dalam diagram use case akan seperti Gambar 1 berikut.</p>
<div id="attachment_568" class="wp-caption aligncenter" style="width: 310px"><a href="http://aawaskita.files.wordpress.com/2011/06/use-case-diagram.png"><img src="http://aawaskita.files.wordpress.com/2011/06/use-case-diagram.png?w=300&#038;h=267" alt="Gambar 1. Diagram kebutuhan" title="use case diagram" width="300" height="267" class="size-medium wp-image-568" /></a><p class="wp-caption-text">Gambar 1. Diagram kebutuhan</p></div>
<p>Selanjutnya, untuk melakukan perhitungan runge kutta, di mana banyak diperlukan operasi matriks dan sistem persamaan linier, dibutuhkan juga pustaka <a href="http://numpy.scipy.org/">numerik</a>. Karenanya, kedua pustaka tersebut harus diinstal dulu ke dalam sistem. Untungnya, repositori Ubuntu telah menyediakan pustaka tersebut. Jalankan perintah berikut untuk menginstall keduanya dalam sistem.</p>
<p><code>sudo apt-get install python-sympy python-numpy python-numpy-doc</code></p>
<p>Langkah selanjutnya adalah menerapkan kebutuhan tersebut dalam program python. Kebutuhan tersebut akan diterapkan dalam class yang berbeda. Asumsi yang digunakan adalah jumlah persamaan sama dengan jumlah variabel bebas dalam setiap persamaan. Selain itu, class untuk mendefinisikan variabel akan dipisahkan dengan class untuk mendefinisikan persamaan. Penyatuannya sejauh ini tidak membuat kerumitan class karena pendefinisian variabel cukup sederhana. Silakan mencoba jika ingin menyatukan keduanya. Sedangkan kebutuhan untuk memilih array Butcher digunakan agar pengguna dapat mendefinisikan konstanta Butcher yang digunakan dalam persamaan penyelesaian Runge Kutta, baik jenis maupun ordenya.</p>
<p>Seperti diketahui, persamaan untuk menyelesaikan Runge Kutta secara implisit menggunakan dua persamaan berikut. variabel <img src='http://s0.wp.com/latex.php?latex=a+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='a ' title='a ' class='latex' />,<img src='http://s0.wp.com/latex.php?latex=b+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='b ' title='b ' class='latex' />,<img src='http://s0.wp.com/latex.php?latex=c+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='c ' title='c ' class='latex' /> tersebut yang didefinisikan dalam konstanta Butcher (<em>Butcher array</em>) </p>
<p><img src='http://s0.wp.com/latex.php?latex=y_%7Bik%7D+%3D+x_%7Bk%7D+%2B+h+%5CSigma_%7Bj%3D1%7D%5E%7Bs%7Da_%7Bij%7Df%28t_%7Bk%7D+%2B+c_%7Bj%7Dh%2Cy_%7Bjk%7D%29&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='y_{ik} = x_{k} + h &#92;Sigma_{j=1}^{s}a_{ij}f(t_{k} + c_{j}h,y_{jk})' title='y_{ik} = x_{k} + h &#92;Sigma_{j=1}^{s}a_{ij}f(t_{k} + c_{j}h,y_{jk})' class='latex' /></p>
<p><img src='http://s0.wp.com/latex.php?latex=x_%7Bk%2B1%7D+%3D+x_%7Bk%7D+%2B+h+%5CSigma_%7Bj%3D1%7D%5E%7Bs%7Db_%7Bi%7Df%28t_%7Bk%7D%2Bc_%7Bj%7Dh%2Cy_%7Bik%7D%29&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='x_{k+1} = x_{k} + h &#92;Sigma_{j=1}^{s}b_{i}f(t_{k}+c_{j}h,y_{ik})' title='x_{k+1} = x_{k} + h &#92;Sigma_{j=1}^{s}b_{i}f(t_{k}+c_{j}h,y_{ik})' class='latex' /></p>
<p>Kemudian, karena kebutuhan yang didefinisikan dalam Gambar 1 akan diterapkan dalam class, kita perlu mengetahui bagaimana python menjalankan pemrograman berorientasi obyek. Seperti pemrograman berorientasi obyek lainnya, class dalam python juga diawali dengan kata kunci <code>class</code> kemudian diikuti dengan nama class yang kita definisikan. Setelah mendefinisikan class, kita mendefinisikan <em>constructor</em>, berupa kata kunci init yang diapit dua karakter <em>underscore</em>. Argumen yang harus dibawa oleh konstructor, di contoh berikut diset sebagai <code>self</code>, digunakan sebagai simbol <em>instance</em> dari class yang bersangkutan. Dari manapun di dalam class, argumen tersebut digunakan untuk merujuk ke <em>attribute</em> mapun <em>method</em> pada class. Jika class membutuhkan <em>instance</em> dari obyek lain, tambahkan dalam daftar argumen pada definisi <code>constructor</code>. Sedangkan untuk method yang bersifat <em>private</em>, deklarasikan dengan karakter <em>underscore</em> ganda di depan nama <em>method</em> pada saat didefinisikan. Sekali lagi, nama obyek untuk <em>instance</em> class yang kita buat harus selalu diikutkan dalam argumen setiap <em>method</em>, meski deklarasi pemanggilannya tidak perlu disertakan.</p>
<p>Ilustrasinya seperti pada potongan program berikut ini.</p>
<pre>
<code>
class NamaClass():
	def __init__(self):
		self.a=0
		self.b='Arya'
		self.__privateMethod()
	def __privateMethod(self):
		self.a=1
</code>
</pre>
<p>Setelah itu, kita dapat mulai menerapkan kebutuhan yang didefinisikan dalam Gambar .</p>
<ol>
<li> Class Symbols. Digunakan untuk mendefinisikan simbol variabel yang digunakan dalam persaman. Deklarasinya mengharuskan pengguna teleh memberikan jumlah variabel yang diperlukan pada setiap persamaan. Berikut adalah isi dari class Symbols.
<pre>
<code>
from sympy import *
class Symbols():
	def __init__(self,Number):
		self.symbols=range(Number)
		for i in range(Number):
			self.symbols[i]=raw_input('Symbol#' + str(i+1) + '=')

	def getSymbols(self):
		return self.symbols

	def getNumber(self):
		return len(self.symbols)
</code>
</pre>
</li>
<li>Class Butcher. Class ini berisi definisi nilai variabel <img src='http://s0.wp.com/latex.php?latex=a+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='a ' title='a ' class='latex' />, <img src='http://s0.wp.com/latex.php?latex=b+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='b ' title='b ' class='latex' />, dan <img src='http://s0.wp.com/latex.php?latex=a+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='a ' title='a ' class='latex' />, berdasarkan jenis dan orde. Yang diterapkan dalam program barulah jenis Gauss dan Radau IIA dengan orde 1 sampai 3. Penjelasan detil dapat dilihat di <a href="http://en.wikipedia.org/wiki/Runge-Kutta_methods">sini</a>. Meski ilustrasi yang diberikan untuk Runge Kutta eksplisit, tetapi metode implisit dicirikan dengan konstanta di atas diagonal utama yang tidak sama dengan nol.<br />
Potongan class Butcher adalah sebagai berikut (hanya untuk Gauss orde 1). Class ini membutuhkan argumen jenis dan orde Runge Kutta.</p>
<pre>
<code>
from numpy import *
class Butcher():
	def __init__(self,Orde, Butcher):
		if Orde==1:
			self.orde=Orde
			if Butcher=='Gauss' or Butcher=='gauss':
				self.c=[0.5]
				self.b=[1.0]
				self.a=[0.5]
				self.abc=[self.a,self.b,self.c]
</code>
</pre>
</li>
<li>Class Equations. Di class inilah didefinisikan persamaan yang terlibat dalam sistem. Class ini memerlukan argumen simbol variabel. Selain itu, sebelum sebuah persamaan didefinisikan, diperkenalkan terlebih dulu simbol variabel yang diperlukan. Di class ini juga didefinisikan fungsi derivetif numerik. Fungsi ini akan digunakan ketika itarasi yang digunakan adalah metode Newton. Berikut ini adalah isi dari class Equations.
<pre>
<code>
from numpy import *
from sympy import *
class Equations():
	def __init__(self,Symbols):
		self.symbols=Symbols
		self.equations=range(len(Symbols))
		self.eqNumber=len(Symbols)

		print 'Set Equations'
		for i in range(self.eqNumber):
			for j in range(self.eqNumber):
				var(self.symbols[j])
			x=input('Eq#' + str(i+1) + ': ')
			self.equations[i]=x

	def getEquations(self):
		return self.equations

	def getNumDerivative(self,eq,number,val,h):
		a=self.equations[eq]
		b=self.equations[eq]
		for i in range(len(val)):
			if i==number:
				a=a.subs(self.symbols[i],(val[i]+h))
				b=b.subs(self.symbols[i],val[i])
			else:
				a=a.subs(self.symbols[i],val[i])
				b=b.subs(self.symbols[i],val[i])
		return (a-b)/h
</code>
</pre>
</li>
</ol>
<p>Selanjutnya, Runge Kutta akan diselesaikan, baik dengan iterasi <a href="http://aawaskita.wordpress.com/2011/06/15/runge-kutta-implisit-dengan-python-2/">Newton</a> maupun <a href="http://aawaskita.wordpress.com/2011/06/17/runge-kutta-implisit-dengan-python-3/">Picard</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aawaskita.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aawaskita.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aawaskita.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aawaskita.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aawaskita.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aawaskita.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aawaskita.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aawaskita.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aawaskita.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aawaskita.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aawaskita.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aawaskita.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aawaskita.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aawaskita.wordpress.com/566/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=566&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aawaskita.wordpress.com/2011/06/13/runge-kutta-implisit-dengan-python-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4ffa54f55442471cfaaa5cc7d5544c26?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">arya</media:title>
		</media:content>

		<media:content url="http://aawaskita.files.wordpress.com/2011/06/use-case-diagram.png?w=300" medium="image">
			<media:title type="html">use case diagram</media:title>
		</media:content>
	</item>
		<item>
		<title>Instalasi OpenFOAM pada Ubuntu 11.04</title>
		<link>http://aawaskita.wordpress.com/2011/05/27/instalasi-openfoam-pada-ubuntu-11-04/</link>
		<comments>http://aawaskita.wordpress.com/2011/05/27/instalasi-openfoam-pada-ubuntu-11-04/#comments</comments>
		<pubDate>Fri, 27 May 2011 09:47:44 +0000</pubDate>
		<dc:creator>aawaskita</dc:creator>
				<category><![CDATA[Jejak langkah untuk bersekolah lagi]]></category>
		<category><![CDATA[Semester 2]]></category>
		<category><![CDATA[Tentang OSS]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://aawaskita.wordpress.com/?p=558</guid>
		<description><![CDATA[Sampainya saya di sini mungkin gak terlalu penting. Karenanya, langsung saja ke pokok pembicaraan. Mengunduh paket OpenFOAM. Ada dua paket yang diperlukan, masing-masing adalah OpenFOAM-1.7.1 dan ThirdParty-1.7.1. Membuat direktori kerja di $HOME/OpenFOAM. Ekstraski dari unduhan sebelumnya kemudian diletakkan di direktori kerja ini. Menambahkan baris berikut ke berkas ~.bashrc. Tujuannya adalah mendefinisikan path dari setiap direktori [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=558&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Sampainya saya di sini mungkin gak terlalu penting. Karenanya, langsung saja ke pokok pembicaraan.</p>
<ol>
<li>Mengunduh paket <a href="http://www.openfoam.com/">OpenFOAM</a>. Ada dua paket yang diperlukan, masing-masing adalah <a href="http://downloads.sourceforge.net/foam/OpenFOAM-1.7.1.gtgz?use_mirror=mesh">OpenFOAM-1.7.1</a> dan <a href="http://downloads.sourceforge.net/foam/ThirdParty-1.7.1.gtgz?use_mirror=mesh">ThirdParty-1.7.1</a>.</li>
<li>Membuat direktori kerja di <code>$HOME/OpenFOAM</code>. Ekstraski dari unduhan sebelumnya kemudian diletakkan di direktori kerja ini.</li>
<li>Menambahkan baris berikut ke berkas <code>~.bashrc</code>. Tujuannya adalah mendefinisikan <code>path</code> dari setiap direktori yang diperlukan OpenFOAM.<br />
<code>. $HOME/OpenFOAM/OpenFOAM-1.7.1/etc/bashrc</code></li>
<p><span id="more-558"></span></p>
<li>Menyimpan konfigurasi dengan menjalankan perintah berikut.<br />
<code>source ~.bashrc</code></li>
<li>Menginstalasi paket-paket berikut ke dalam sistem Ubuntu, agar OpenFOAM dapat diinstalasi dengan baik.<br />
<code>sudo apt-get install build-essential<br />
sudo apt-get install flex scotch libscotch-5.1 libscotch-dev<br />
sudo apt-get install libptscothch-5.1 libptscotch-dev<br />
sudo apt-get install paraview</code>
</li>
<li>Instalasi paket MPI. Untuk mudahnya, gunakan saja openmpi.<br />
<code>sudo apt-get install libopenmpi-dev openmpi-bin openmpi-doc</code><br />
<code>sudo apt-get install ssh</code><br />
<code>ssh-keygen -t dsa</code><br />
<code>cd ~/.ssh</code><br />
<code>cat id_pub.dsa &gt;&gt; authorized_keys</code>
</li>
<li>Berpindah ke direktori <code>$HOME/OpenFOAM/OpenFOAM-1.7.1</code> lalu jalankan perintah berikut. Tunggu proses instalasi yang cukup lama untuk mesin Core2Duo bermemori 2 GB.<br />
<code>./Allwmake</code></li>
<li>Buat direktori kerja, jalankan perintah berikut. Sebenarnya sih bisa di mana aja, tapi OpenFOAM udah membuat skema yang didefiniskan di berkas <code>bashrc</code> yang sebelumnya dibahas, so saya pilih ikut OpenFOAM aja dl. Dampaknya kita bisa lebih mudah mencoba contoh kasus yang disertakan OpenFOAM.<br />
<code>mkdir -p $HOME/OpenFOAM/$USER-1.7.1</code><br />
<code>cd $HOME/OpenFOAM/$USER-1.7.1</code><br />
<code>mkdir -p $FOAM_RUN</code><br />
<code>cp -r $FOAM_TUTORIALS $FOAM_RUN</code></li>
<li>Selanjutnya, kita bisa mencoba salah satunya <a href="http://www.openfoam.com/download/ubuntu.php">contohnya</a>. Jalankan perintah berikut.<br />
<code>cd $FOAM_RUN/tutorials/incompressible/icoFOAM/cavity</code><br />
<code>blockMesh</code><br />
<code>icoFOAM</code><br />
<code>paraFOAM</code>
</li>
</ol>
<p>Akhirnya, ingin lihat bagaimana OpenFOAM menampilkan hasil simulasinya? Gambar 1 berikut ini jawabannya.<br />
<div id="attachment_560" class="wp-caption aligncenter" style="width: 310px"><a href="http://aawaskita.files.wordpress.com/2011/05/paraview1.png"><img src="http://aawaskita.files.wordpress.com/2011/05/paraview1.png?w=300&#038;h=225" alt="" title="paraview1" width="300" height="225" class="size-medium wp-image-560" /></a><p class="wp-caption-text">Gambar 1. Paraview menampilkan hasil simulasi OpenFOAM</p></div></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aawaskita.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aawaskita.wordpress.com/558/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aawaskita.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aawaskita.wordpress.com/558/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aawaskita.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aawaskita.wordpress.com/558/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aawaskita.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aawaskita.wordpress.com/558/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aawaskita.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aawaskita.wordpress.com/558/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aawaskita.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aawaskita.wordpress.com/558/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aawaskita.wordpress.com/558/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aawaskita.wordpress.com/558/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=558&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aawaskita.wordpress.com/2011/05/27/instalasi-openfoam-pada-ubuntu-11-04/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4ffa54f55442471cfaaa5cc7d5544c26?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">arya</media:title>
		</media:content>

		<media:content url="http://aawaskita.files.wordpress.com/2011/05/paraview1.png?w=300" medium="image">
			<media:title type="html">paraview1</media:title>
		</media:content>
	</item>
		<item>
		<title>Pengolah file trace sederhana untuk simulasi WSN</title>
		<link>http://aawaskita.wordpress.com/2011/02/09/pengolah-file-trace-sederhana-untuk-simulasi-wsn/</link>
		<comments>http://aawaskita.wordpress.com/2011/02/09/pengolah-file-trace-sederhana-untuk-simulasi-wsn/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 02:52:11 +0000</pubDate>
		<dc:creator>aawaskita</dc:creator>
				<category><![CDATA[Jejak langkah untuk bersekolah lagi]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Semester 1]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://aawaskita.wordpress.com/?p=547</guid>
		<description><![CDATA[Akhirnya, tugas Mata Kuliah Jarkom selesai meski terlambat submit. Rencana awalpun tidak jadi dilakukan karena tingkat kesulitannya terlalu tinggi untuk kuliah 1 semester (katanya). Akhirnya, tugaspun bergeser ke arah simulasi kinerja protokol adhoc. Dan paper inilah yang menjadi acuan utamanya. Dalam paper tersebut, faktor-faktor seperti Packet Delivery Fraction (PDF), Average-end-to-end Delay (ETD) dan Data Packet [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=547&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Akhirnya, tugas Mata Kuliah Jarkom selesai meski terlambat submit. <a href="http://aawaskita.wordpress.com/2010/10/14/pra-proposal-untuk-jarkom/">Rencana awalpun</a> tidak jadi dilakukan karena tingkat kesulitannya terlalu tinggi untuk kuliah 1 semester (<a href="http://www.cs.ui.ac.id/staf/setiadi/">katanya</a>). Akhirnya, tugaspun bergeser ke arah simulasi kinerja protokol adhoc. Dan <a href="http://paper.ijcsns.org/07_book/200907/20090737.pdf">paper inilah</a> yang menjadi acuan utamanya. Dalam paper tersebut, faktor-faktor seperti <em>Packet Delivery Fraction</em> (PDF), <em>Average-end-to-end Delay</em> (ETD) dan <em>Data Packet Lost</em> (PDL) menjadi perhatian penulisnya. <span id="more-547"></span><br />
PDF diformulasikan dengan persamaan sebagai berikut.</p>
<p><img src='http://s0.wp.com/latex.php?latex=PDF%5C%25%3D%5Cfrac%7B%5Csum_%7B1%7D%5E%7Bn%7D%7BCBRRecv%7D%7D%7B%5Csum_%7B1%7D%5E%7Bn%7D%7BCBRGen%7D%7Dx100%5C%25+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='PDF&#92;%=&#92;frac{&#92;sum_{1}^{n}{CBRRecv}}{&#92;sum_{1}^{n}{CBRGen}}x100&#92;% ' title='PDF&#92;%=&#92;frac{&#92;sum_{1}^{n}{CBRRecv}}{&#92;sum_{1}^{n}{CBRGen}}x100&#92;% ' class='latex' /></p>
<p>Persamaan PDF tersebut menggambarkan persentase paket yang diterima (CBRRecv) terhadap paket yang dikirim (CBRSend). Paket yang diterima dan dikirim dalam hal ini adalah paket CBR dari agent yang di-<em>embed</em> ke node WSN.</p>
<p>Kemudian, faktor selanjutnya adalah ETD yang diformulasikan dengan persamaan sebagai berikut.</p>
<p><img src='http://s0.wp.com/latex.php?latex=ETD%3D%5Cfrac%7B%5Csum_%7B1%7D%5E%7Bn%7D%7BCBRSentTime+-+CBRRecvTime%7D%7D%7B%5Csum_%7B1%7D%5E%7Bn%7D%7BCBRRecv%7D%7D+&amp;bg=ffffff&amp;fg=555555&amp;s=0' alt='ETD=&#92;frac{&#92;sum_{1}^{n}{CBRSentTime - CBRRecvTime}}{&#92;sum_{1}^{n}{CBRRecv}} ' title='ETD=&#92;frac{&#92;sum_{1}^{n}{CBRSentTime - CBRRecvTime}}{&#92;sum_{1}^{n}{CBRRecv}} ' class='latex' /></p>
<p>Persamaan ETD tersebut menggambarkan selisih waktu saat paket diterima (CBRRecvTime) dan waktu saat paket dikirim (CBRSendTime). Karena paket yang dikirim memiliki kemungkinan untuk gagal diterima, waktu yang terlibat dalam perhitungan hanya untuk paket yang sama, yang dalam NS direkam sebagai paket-paket dengan nomor identitas yang sama. Selisih waktu tesebut kemudian dibagi dengan jumlah paket yang diterima.</p>
<p>Faktor ketiga, PDL tidak saya pertimbangkan karena hanya merupakan selisih antara paket yang dikirim dengan paket yang diterima. Menurut saya, parameter ini dapat diwakilkan dengan parameter PDF. Lalu, bagaimana mengolahnya?</p>
<p>Untuk kasus simulasi yang berbeda, NS akan mendokumentasi aktifitas simulasi dengan format yang berbeda juga. <a href="http://www.ns2ultimate.com/post/2496927327/post-processing-ns2-result-using-ns2-trace-trace">Ini</a> adalah salah satu contohnya. Akan tetapi, file simulasi NS-2 <a href="http://www.4shared.com/file/MTx1sml9/nsfile.html">yang saya buat</a> menghasilkan baris-baris informasi seperti berikut ini.</p>
<p><code>s 0.000000000 _1_ AGT  --- 0 cbr 4096 [0 0 0 0] [energy 100.000000 ei 0.000 es 0.000 et 0.000 er 0.000] ------- [1:2 0:0 32 0] [0] 0 0<br />
r 58.041651834 _0_ AGT  --- 5 cbr 4116 [13a 0 1 800] [energy 99.985864 ei 0.000 es 0.000 et 0.001 er 0.013] ------- [1:2 0:0 30 0] [5] 1 0</code></p>
<p>Terlihat beberapa perbedaan dengan format file trace yang diberikan <a>sebelumnya</a>. Akhirnya, saya memperoleh informasi format file tersebut dari <a href="http://imtl.skku.ac.kr/~hjlim99/ns2/%5B1_%B8%DE%B4%BA%BE%F3%5D/%B3%BB%BA%CE%B5%BF%C0%DB/ns2-200407/ns2-200407-s3_appendix.pdf">sini</a>. </p>
<p>Dari baris-baris informasi tersebut, berikut adalah field yang perlu diambil untuk menghitung ETD. Field tersebut dipisah dengan karakter spasi.</p>
<ol>
<li>Karakter pertama, “s” atau “r”, masing-masing mengindikasikan bahwa paket tersebut adalah paket yang dikirim atau yang diterima.</li>
<li>Field kedua, angka riil, adalah waktu kejadian, baik pengiriman atau penerimaan file.</li>
<li>Field ketiga, angka integer yang diapit karakter underscore di kiri dan kanannya, mengindikasikan identitas node. Jika baris informasi diawali karakter “s”, maka node tersebut adalah node yang mengirimkan paket. Sedangkan jika diawali karakter “r”, maka node tersebut adalah node yang menerima paket.</li>
<li>Field ke-6 adalah identitas paket. Identitas ini yang diperlukan untuk menentukan waktu yang akan dihitung. Petunjuknya, waktu penerimaan harus dikurangi dengan waktu pengiriman dari paket yang identitasnya sama. Field lainnya, dapat diabaikan.</li>
</ol>
<p>Setalah mengetahui karakternya, saya lalu membuat diagram alur sebagai berikut.<br />
<div id="attachment_550" class="wp-caption aligncenter" style="width: 160px"><a href="http://aawaskita.files.wordpress.com/2011/02/flowchartprocessor.png"><img src="http://aawaskita.files.wordpress.com/2011/02/flowchartprocessor.png?w=150&#038;h=300" alt="" title="flowchartProcessor" width="150" height="300" class="size-medium wp-image-550" /></a><p class="wp-caption-text">Diagram alur pengolah file trace sederhana</p></div></p>
<p>Akhirnya, program dengan Python untuk tujuan ini dibuat sebagai berikut. Program sederhana ini dapat dieksekusi melalui terminal dengan perintah <code>./nsproc.py &lt;filetrace&gt;</code>. <code>nsproc.py</code> adalah asumsi nama program python ini. Jika nama lain digunakan, ganti saja namanya dengan nama yang digunakan. Selain itu, untuk dapat mengeksekusinya tanpa path absolut maupun relative, simpan saja file tersebut didirectory <code>/usr/bin</code>, tentu dengan atribut <em>excecutable</em> yang sudah disematkan pada file ini terlebih dahulu.</p>
<pre>
<code>
#!/usr/bin/python
import re
import sys
if len(sys.argv)!=2:
	print 'Perintahnya: nsproc.py &lt;filetrace&gt;'
	sys.exit(1)

logfile = open(sys.argv[1], &quot;r&quot;).readlines()
patternS=re.compile(r'^(s)(\s)(\d)+\.(\d)+(\s)(_)(\d+)(_)(\s)(AGT).')
patternR=re.compile(r'^(r)(\s)(\d)+\.(\d)+(\s)(_)(\d+)(_)(\s)(AGT).')
waktukirim = {}
waktuterima = []
temp = []
idpaket = []
selisih = 0.0
cacahkirim=0
cacahterima=0
for line in logfile:
	if patternS.search(line):
		cacahkirim+=1
		for word in line.split():
			temp.append(word)
		a=temp[5]
		b=temp[1]
		waktukirim[a]=b
		temp = []
	else:
		if patternR.search(line):
			cacahterima+=1
			for word in line.split():
				temp.append(word)
			waktuterima.append(temp[1])
			idpaket.append(temp[5])
			temp = []

for i in range(len(idpaket)):
	b=int(idpaket[i])
	if str(b) in waktukirim:
		a=float(waktuterima[i])-float(waktukirim[str(b)])
		selisih=selisih+(a)
print 'Selisih waktu = ' + str(selisih)
print 'Jumlah paket yang dikirim = ' + str(cacahkirim)
print 'Jumlah paket yang diterima = ' + str(cacahterima)
</code>
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aawaskita.wordpress.com/547/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aawaskita.wordpress.com/547/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aawaskita.wordpress.com/547/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aawaskita.wordpress.com/547/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aawaskita.wordpress.com/547/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aawaskita.wordpress.com/547/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aawaskita.wordpress.com/547/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aawaskita.wordpress.com/547/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aawaskita.wordpress.com/547/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aawaskita.wordpress.com/547/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aawaskita.wordpress.com/547/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aawaskita.wordpress.com/547/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aawaskita.wordpress.com/547/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aawaskita.wordpress.com/547/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=547&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aawaskita.wordpress.com/2011/02/09/pengolah-file-trace-sederhana-untuk-simulasi-wsn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4ffa54f55442471cfaaa5cc7d5544c26?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">arya</media:title>
		</media:content>

		<media:content url="http://aawaskita.files.wordpress.com/2011/02/flowchartprocessor.png?w=150" medium="image">
			<media:title type="html">flowchartProcessor</media:title>
		</media:content>
	</item>
		<item>
		<title>Mendistribusikan sejumlah data dari serangkaian array data</title>
		<link>http://aawaskita.wordpress.com/2010/12/18/mendistribusikan-sejumlah-data-dari-serangkaian-array-data/</link>
		<comments>http://aawaskita.wordpress.com/2010/12/18/mendistribusikan-sejumlah-data-dari-serangkaian-array-data/#comments</comments>
		<pubDate>Sat, 18 Dec 2010 03:42:41 +0000</pubDate>
		<dc:creator>aawaskita</dc:creator>
				<category><![CDATA[Jejak langkah untuk bersekolah lagi]]></category>
		<category><![CDATA[MPI]]></category>
		<category><![CDATA[Semester 1]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://aawaskita.wordpress.com/?p=544</guid>
		<description><![CDATA[Dalam tulisan sebelumnya, kita berusaha mendistribusikan sebuah data yang sama ke seluruh node dalam komunikator MPI. Saat ini, kita akan mendistribusikan sejumlah elemen dalam array data ke setiap node untuk kemudian membagi data yang didistribusikan tersebut dengan sebuah nilai tertentu. Array data yang akan didisitribusikan adalah array dari struktur dengan satu elemen bertipe integer. Untuk [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=544&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Dalam tulisan <a href="http://aawaskita.wordpress.com/2010/12/18/distribusi-data-struktur-ke-worker-node/">sebelumnya</a>, kita berusaha mendistribusikan sebuah data yang sama ke seluruh node dalam komunikator MPI. Saat ini, kita akan mendistribusikan sejumlah elemen dalam array data ke setiap node untuk kemudian membagi data yang didistribusikan tersebut dengan sebuah nilai tertentu. Array data yang akan didisitribusikan adalah array dari struktur dengan satu elemen bertipe integer. Untuk memudahkan, elemen struktur akan diberikan nilai random. Berikut adalah tahapan yang perlu dijalankan.<br />
<span id="more-544"></span><br />
Yang pertama, kita perlu membangun tipe data baru yang mengemas tipe data struktur kita. Silakan simak tulisan sebelumnya. Kemudian kita jalankan perintah <code>MPI_Scatter</code> dengan synopsis sebagai berikut.</p>
<pre>
<code>int MPI_Scatter(void *sendbuf, int sendcnt, MPI_Datatype sendtype,
               void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root,
               MPI_Comm comm)</code>
</pre>
<p>Berikut ini adalah penjelasan dari parameter yang diperlukan.</p>
<ol>
<li><code>void *sendbuf</code>: variabel array data yang akan didistribusikan</li>
<li><code>int sendcnt</code>: jumlah elemen array yang akan didistribusikan ke setiap node</li>
<li><code>MPI_Datatype sendtype</code>: tipe data baru yang menjadi tipe data bagi array yang akan didistribusikan</li>
<li><code>void *recvbuf</code>: variabel pada node penerima yang digunakan untuk menampung data yang didistribusikan</li>
<li><code>int recvcnt</code>: jumlah elemen array yang diterima node</li>
<li><code>MPI_Datatype recvtype</code>: tipe data baru bagi variabel pada node yang menerima data</li>
<li><code>int root</code>: rank head node, biasanya 0</li>
<li><code>MPI_Comm comm</code>: komunikator dalam MPI, terbentuk saat perintah MPI_Init() dijalankan</li>
</ol>
<p>Setelah memahami penggunaannya, kita lanjutkan dengan membuat program untuk memenuhi apa yang telah dijelaskan di awal tulisan ini. Berikut adalah program tersebut.</p>
<pre>
<code>
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;time.h&gt;
#include "mpi.h"

struct data {
	int a;
};

int operasi(int a) {
	return a/2;
}

int main(int argc, char ** argv) {
	int jmlData=8;
	int id,p;
	unsigned int iseed=(unsigned int)time(NULL);
	srand(iseed);
	struct data sendData[jmlData];
	for(int i=0;i&lt;jmlData;i++) {
		sendData[i].a=rand();
	}

	MPI_Datatype mytype;
	MPI_Datatype type=MPI_INT;
	int blocklen=1;
	MPI_Aint disp;
	disp=(int)(&amp;sendData[0].a)-(int)(&amp;sendData[0]);

	MPI_Init(&amp;argc,&amp;argv);

	MPI_Type_create_struct(1,&amp;blocklen,&amp;disp,&amp;type,&amp;mytype);
	MPI_Type_commit(&amp;mytype);

	MPI_Comm_rank(MPI_COMM_WORLD,&amp;id);
	MPI_Comm_size(MPI_COMM_WORLD,&amp;p);

	int recvContent=jmlData/p;
	struct data recvData[recvContent];

	MPI_Scatter(sendData,recvContent,mytype,recvData,recvContent,mytype,0,MPI_COMM_WORLD);
	for(int i=0;i&lt;p;i++) {
		printf(&quot;Data dari proses ke-%d\n&quot;,id);
		for(int j=0;j&lt;recvContent;j++) {
			printf(&quot;index-%d,%d bagi 2 = %d\n&quot;,j,recvData[j].a,operasi(recvData[j].a));
		}
		printf(&quot;\n&quot;);
	}
	MPI_Finalize();
	return 0;
}

</code>
</pre>
<p>Jika dijalankan dengan dua proses, maka akan diperoleh hasil sebagai berikut. Tentunya setelah program tersebut dikompilasi. Akan tetapi, perlu diperhatikan bahwa kompilasi untuk program ini memerlukan opsi <code>-std</code> yang nilainya diberikan sebagai<code> c99</code>. Sehingga perintah kompilasi menjadi <code>mpicc -std=c99 -o cobascatter cobascatter.c</code>.</p>
<pre>
<code>
Data dari proses ke-0
index-0,1545926779 bagi 2 = 772963389
index-1,49064449 bagi 2 = 24532224
index-2,1071228553 bagi 2 = 535614276
index-3,1233134636 bagi 2 = 616567318

Data dari proses ke-1
index-0,465037100 bagi 2 = 232518550
index-1,1641429207 bagi 2 = 820714603
index-2,1325758038 bagi 2 = 662879019
index-3,161477691 bagi 2 = 80738845
</code>
</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/aawaskita.wordpress.com/544/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/aawaskita.wordpress.com/544/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/aawaskita.wordpress.com/544/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/aawaskita.wordpress.com/544/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/aawaskita.wordpress.com/544/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/aawaskita.wordpress.com/544/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/aawaskita.wordpress.com/544/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/aawaskita.wordpress.com/544/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/aawaskita.wordpress.com/544/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/aawaskita.wordpress.com/544/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/aawaskita.wordpress.com/544/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/aawaskita.wordpress.com/544/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/aawaskita.wordpress.com/544/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/aawaskita.wordpress.com/544/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=aawaskita.wordpress.com&amp;blog=8876610&amp;post=544&amp;subd=aawaskita&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://aawaskita.wordpress.com/2010/12/18/mendistribusikan-sejumlah-data-dari-serangkaian-array-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4ffa54f55442471cfaaa5cc7d5544c26?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">arya</media:title>
		</media:content>
	</item>
	</channel>
</rss>
