source: trunk/examples/app-fermi/matlab/compiled/fermi.m @ 1260

Last change on this file since 1260 was 1260, checked in by dkearney, 16 years ago

updating octave and matlab example code to take advantage of vector operations to write data to rappture library object. this helps with large arrays, you no longer need to iterate over each element in the array and write elements one by one.

File size: 2.2 KB
Line 
1% ----------------------------------------------------------------------
2%  EXAMPLE: Fermi-Dirac function in Octave.
3%
4%  This script represents a newly written application with rappture
5%  bindings and interface.
6%
7% ======================================================================
8%  AUTHOR:  Michael McLennan, Purdue University
9%  AUTHOR:  Derrick Kearney, Purdue University
10%  Copyright (c) 2004-2007  Purdue Research Foundation
11%
12%  See the file "license.terms" for information on usage and
13%  redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
14% ======================================================================
15
16% get out input file from the command line
17% invoke this script with the following command:
18% matlab -nodisplay -r infile=\'driver1234.xml\',fermi
19% the above command sets variable infile to the name 'driver1234.xml'
20
21% infile = 'driver31619.xml'
22
23% open our xml input file.
24lib = rpLib(infile);
25
26% retrieve user specified data out of the input file
27% convert values to correct units.
28Ef = rpLibGetString(lib,'input.number(Ef).current');
29[Ef,err] = rpUnitsConvertDbl(Ef,'eV');
30T = rpLibGetString(lib,'input.number(temperature).current');
31[T,err] = rpUnitsConvertDbl(T,'K');
32
33% do fermi calculations (science)...
34kT = 8.61734e-5 * T;
35Emin = Ef - 10*kT;
36Emax = Ef + 10*kT;
37
38E = linspace(Emin,Emax,200);
39f = 1.0 ./ (1.0 + exp((E - Ef)/kT));
40
41% prepare out output section
42% label graphs
43rpLibPutString(lib,'output.curve(f12).about.label','Fermi-Dirac Factor',0);
44rpLibPutString(lib,'output.curve(f12).xaxis.label','Fermi-Dirac Factor',0);
45rpLibPutString(lib,'output.curve(f12).yaxis.label','Energy',0);
46rpLibPutString(lib,'output.curve(f12).yaxis.units','eV',0);
47
48% this is a slow and inefficient method of putting
49% large amounts of data back in to the rappture library object
50%for j=1:200
51%  rpUtilsProgress((j/200*100),'Iterating');
52%  putStr = sprintf('%12g  %12g\n', f(j), E(j));
53%  % put the data into the xml file
54%  rpLibPutString(lib,'output.curve(f12).component.xy',putStr,1);
55%end
56
57% a better way is to take advantage of matlab's vector operations.
58outData = [f;E];
59putStr = sprintf('%12g  %12g\n', outData);
60rpLibPutString(lib,'output.curve(f12).component.xy',putStr,0);
61
62% signal the end of processing
63rpLibResult(lib);
64
65quit;
Note: See TracBrowser for help on using the repository browser.