source: trunk/examples/app-fermi/fortran/fermi.f @ 792

Last change on this file since 792 was 792, checked in by mmc, 17 years ago

This example had "K" for both units conversions, so the Ef conversion
didn't work properly. Fixed now.

File size: 2.2 KB
Line 
1c ----------------------------------------------------------------------
2c  EXAMPLE: Fermi-Dirac function in Fortran.
3c
4c  This simple example shows how to use Rappture within a simulator
5c  written in Fortran.
6c
7c ======================================================================
8c  AUTHOR:  Michael McLennan, Purdue University
9c  AUTHOR:  Derrick Kearney, Purdue University
10c  Copyright (c) 2004-2005  Purdue Research Foundation
11c
12c  See the file "license.terms" for information on usage and
13c  redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
14c ======================================================================
15
16      program fermi
17        IMPLICIT NONE
18
19        integer rp_lib, rp_units_convert_dbl
20
21        integer driver, ok, progress
22        double precision T, Ef, kT, Emin, Emax, dE, f, E
23        CHARACTER*100 inFile, strVal
24        character*40 xy
25
26        call getarg(1,inFile)
27        driver = rp_lib(inFile)
28
29        call rp_lib_get(driver,
30     +        "input.number(temperature).current", strVal)
31        ok = rp_units_convert_dbl(strVal,"K",T)
32
33        call rp_lib_get(driver,
34     +        "input.number(Ef).current", strVal)
35        ok = rp_units_convert_dbl(strVal,"eV",Ef)
36
37        kT = 8.61734e-5 * T
38        Emin = Ef - 10*kT
39        Emax = Ef + 10*kT
40
41        dE = 0.005*(Emax - Emin)
42
43c       Label out graph with a title, x-axis label,
44c       y-axis label and y-axis units
45
46        call rp_lib_put_str (driver,"output.curve(f12).about.label",
47     +          "Fermi-Dirac Factor",0)
48        call rp_lib_put_str (driver,"output.curve(f12).xaxis.label",
49     +          "Fermi-Dirac Factor",0)
50        call rp_lib_put_str (driver,"output.curve(f12).yaxis.label",
51     +          "Energy",0)
52        call rp_lib_put_str (driver,"output.curve(f12).yaxis.units",
53     +          "eV",0)
54
55        do 10 E=Emin,Emax,dE
56          f = 1.0/(1.0+exp((E-Ef)/kT))
57          progress = nint((E-Emin)/(Emax-Emin)*100)
58          call rp_utils_progress (progress,"Iterating")
59          write(xy,'(E20.12,F13.9,A)') f, E, char(10)
60          call rp_lib_put_str (driver,
61     +          "output.curve(f12).component.xy", xy, 1)
62 10     continue
63
64        call rp_result(driver)
65      end program fermi
Note: See TracBrowser for help on using the repository browser.