In addition NAG recommends before calling any library routine you should read the following reference material:
(a) Essential Introduction
(b) Chapter Introduction
(c) Routine
Document
Assuming that the directory containing the libraries has been added to the LIB environment variable, you may compile and link to the NAG Fortran Library on the command line in the following manner:
df driver.for dll20dds.lib dll20dd.libwhere driver.for is your application program.
If you are using Developer Studio, after establishing a workspace you should make the system aware of the libraries by clicking on Project, then Settings, then Link and entering the library under Object/library modules. The installation procedure attempts to make Developer Studio aware of the location of the NAG libraries supplied by NAG. You can confirm that it has been successful by examining the Directories pane when Tools/Options/Directories/Show directories for/Libraries has been selected. If the installation had difficulty, perhaps because several versions of Developer Studio were recorded in the registry, then you can set this facility manually in the Directories pane. Otherwise you will have to specify the full path name of the libraries in Object/library modules.
VAL(LOC(RELABS)), VAL(7)(see lines marked "CHANGE2"), where RELABS is declared and assigned the value 'Default' in the lines marked "NEW")
* D02CJF Example Program Text * Mark 14 Revised. NAG Copyright 1989. * .. Parameters .. CHARACTER RELABS*15 !NEW INTEGER NOUT PARAMETER (NOUT=6) INTEGER N, IW PARAMETER (N=3,IW=21*N+28) * .. Scalars in Common .. DOUBLE PRECISION H, XEND INTEGER K * .. Local Scalars .. DOUBLE PRECISION PI, TOL, X INTEGER I, IFAIL, J * .. Local Arrays .. DOUBLE PRECISION W(IW), Y(N) * .. External Functions .. DOUBLE PRECISION D02CJW, G, X01AAF STDCALL EXTERNAL D02CJW, G, X01AAF !CHANGE1 * .. External Subroutines .. STDCALL EXTERNAL D02CJF, D02CJX, FCN, OUT !CHANGE1 * .. Intrinsic Functions .. INTRINSIC DBLE * .. Common blocks .. COMMON XEND, H, K * .. Executable Statements .. WRITE (NOUT,*) 'D02CJF Example Program Results' RELABS = "Default" !NEW XEND = 10.0D0 PI = X01AAF(0.0D0) WRITE (NOUT,*) WRITE (NOUT,*) 'Case 1: intermediate output, root-finding' DO 20 J = 4, 5 TOL = 10.0D0**(-J) WRITE (NOUT,*) WRITE (NOUT,99999) ' Calculation with TOL =', TOL X = 0.0D0 Y(1) = 0.5D0 Y(2) = 0.5D0 Y(3) = PI/5.0D0 K = 4 H = (XEND-X)/DBLE(K+1) WRITE (NOUT,*) ' X Y(1) Y(2) Y(3)' IFAIL = 0 * CALL D02CJF(X,XEND,N,Y,FCN,TOL,VAL(LOC(RELABS)),VAL(7),OUT,G,W,!CHANGE2 + IFAIL) * WRITE (NOUT,99998) ' Root of Y(1) = 0.0 at', X WRITE (NOUT,99997) ' Solution is', (Y(I),I=1,N) 20 CONTINUE WRITE (NOUT,*) WRITE (NOUT,*) WRITE (NOUT,*) 'Case 2: no intermediate output, root-finding' DO 40 J = 4, 5 TOL = 10.0D0**(-J) WRITE (NOUT,*) WRITE (NOUT,99999) ' Calculation with TOL =', TOL X = 0.0D0 Y(1) = 0.5D0 Y(2) = 0.5D0 Y(3) = PI/5.0D0 IFAIL = 0 * CALL D02CJF(X,XEND,N,Y,FCN,TOL,VAL(LOC(RELABS)),VAL(7),D02CJX, !CHANGE2 + G,W,IFAIL) * WRITE (NOUT,99998) ' Root of Y(1) = 0.0 at', X WRITE (NOUT,99997) ' Solution is', (Y(I),I=1,N) 40 CONTINUE WRITE (NOUT,*) WRITE (NOUT,*) WRITE (NOUT,*) 'Case 3: intermediate output, no root-finding' DO 60 J = 4, 5 TOL = 10.0D0**(-J) WRITE (NOUT,*) WRITE (NOUT,99999) ' Calculation with TOL =', TOL X = 0.0D0 Y(1) = 0.5D0 Y(2) = 0.5D0 Y(3) = PI/5.0D0 K = 4 H = (XEND-X)/DBLE(K+1) WRITE (NOUT,*) ' X Y(1) Y(2) Y(3)' IFAIL = 0 * CALL D02CJF(X,XEND,N,Y,FCN,TOL,VAL(LOC(RELABS)),VAL(7),OUT, !CHANGE2 + D02CJW,W,IFAIL) * 60 CONTINUE WRITE (NOUT,*) WRITE (NOUT,*) WRITE (NOUT,*) +'Case 4: no intermediate output, no root-finding ( integrate to XE +ND)' DO 80 J = 4, 5 TOL = 10.0D0**(-J) WRITE (NOUT,*) WRITE (NOUT,99999) ' Calculation with TOL =', TOL X = 0.0D0 Y(1) = 0.5D0 Y(2) = 0.5D0 Y(3) = PI/5.0D0 WRITE (NOUT,*) ' X Y(1) Y(2) Y(3)' WRITE (NOUT,99996) X, (Y(I),I=1,N) IFAIL = 0 * CALL D02CJF(X,XEND,N,Y,FCN,TOL,VAL(LOC(RELABS)),VAL(7),D02CJX, !CHANGE + D02CJW,W,IFAIL) * WRITE (NOUT,99996) X, (Y(I),I=1,N) 80 CONTINUE STOP * 99999 FORMAT (1X,A,D8.1) 99998 FORMAT (1X,A,F7.3) 99997 FORMAT (1X,A,3F13.5) 99996 FORMAT (1X,F8.2,3F13.5) END * STDCALL SUBROUTINE OUT(X,Y) !CHANGE1 * .. Parameters .. INTEGER NOUT PARAMETER (NOUT=6) INTEGER N PARAMETER (N=3) * .. Scalar Arguments .. DOUBLE PRECISION X * .. Array Arguments .. DOUBLE PRECISION Y(N) * .. Scalars in Common .. DOUBLE PRECISION H, XEND INTEGER I * .. Local Scalars .. INTEGER J * .. Intrinsic Functions .. INTRINSIC DBLE * .. Common blocks .. COMMON XEND, H, I * .. Executable Statements .. WRITE (NOUT,99999) X, (Y(J),J=1,N) X = XEND - DBLE(I)*H I = I - 1 RETURN * 99999 FORMAT (1X,F8.2,3F13.5) END * STDCALL SUBROUTINE FCN(T,Y,F) !CHANGE1 * .. Parameters .. INTEGER N PARAMETER (N=3) * .. Scalar Arguments .. DOUBLE PRECISION T * .. Array Arguments .. DOUBLE PRECISION F(N), Y(N) * .. Intrinsic Functions .. INTRINSIC COS, TAN * .. Executable Statements .. F(1) = TAN(Y(3)) F(2) = -0.032D0*TAN(Y(3))/Y(2) - 0.02D0*Y(2)/COS(Y(3)) F(3) = -0.032D0/Y(2)**2 RETURN END * STDCALL DOUBLE PRECISION FUNCTION G(T,Y) !CHANGE1 * .. Parameters .. INTEGER N PARAMETER (N=3) * .. Scalar Arguments .. DOUBLE PRECISION T * .. Array Arguments .. DOUBLE PRECISION Y(N) * .. Executable Statements .. G = Y(1) RETURN ENDAssuming that the directory containing the libraries has been added to the LIB environment variable, you may compile and link to the NAG Fortran Library on the command line in the following manner:
f77 driver.for dll20dds.lib dll20dd.libwhere driver.for is your application program.
g77 -fno-underscoring -fcase-upper -mrtd driver.for dll20dd.lib dll20dds.libCharacter strings arguments demand special attention. Immediately after the character string argument, pass by value the length of the string. For example :
DEV = G01FAF(TAIL,%VAL(1),P,IFAIL)In the example program D02CJFE.F, you need to replace the formal argument RELABS (actual argument 'Default') in all the calls to the routine D02CJF by:
'Default',%VAL(7)If the argument is a character array, pass the length of each array element. This information is valid for Cygwin 2.95.2 and later and for Mingw 2.95.3-6 and later.
ifl /Gm driver.for /link dll20dd.lib dll20dds.libwhere driver.for is your application program.
ftn95 myprog /import_lib install_dir\dll20dds.dll /import_lib install_dir\dll20dd.dllwhere install_dir is the location of the DLLs. The full pathname of install_dir should be specified to the DLLs and should be enclosed within quotes if it contains spaces. The effect of this is to assume that all exported names in the DLL are DVF STDCALL and that any use of them should use the CVF STDCALL calling convention. External names passed via the argument list to a routine in a NAG DLL are automatically adjusted for whether or not they occur in the same source
Slink myprog.obj install_dir\dll20dds.dll install_dir\dll20dd.dllAs with compilation, the full path to the DLLs should be specified here, within quotes if the pathname contains spaces. It is worth emphasising that the linker should link directly against the DLLs not the *.lib files.
cl driver.c dll20dds.lib dll20dd.libwhere driver.c is your application program. This assumes that the directory containing the header files has been added to the INCLUDE environment variable. If not, you could use:
cl driver.c dll20dds.lib dll20dd.lib /I installation_dir\headersHere installation_dir denotes the directory containing the library files.
Cinclude
to allow the compiler access the header file.acc driver.c dll20dds.lib dll20dd.libwhere driver.c is your application program.
impdef name.def name.dll implib name.lib name.defwhere name denotes the name of the NAG DLL e.g. dll20dds or dll20dd. The first statement constructs a module definitions file, name.def, and the second takes this module definition file and constructs an import library, name.lib. Do not be alarmed by warning messages from IMPDEF. These arise from the number of alternative symbols exported from the DLL in order to provide convenient alternatives for different users.
bcc32 -Iinstallation_dir\headers driver.c dll20dds.lib dll20dd.libwhere driver.c is your application program and where installation_dir denotes the directory containing the library files.
bcc32.cfg
. For more details
please see the compiler documentation. If you have amended the configuration file then you may simply type:
bcc32 -driver.c dll20dds.lib dll20dd.lib
readme.txt
in the .\samples\delphi\e04ucf\console directory indicates how to use
the Delphi in a console window.nagex c06eaf
This will copy the example program and its data into the directory c:\test and process them to produce the example program results in the file c06eafe.res. Please note that the environment variables DLLDTDIR needs to be set as described in the Installer's Note in order for nagex.bat to run successfully.
In the online documentation, routine documents present the example programs in a generalised form, using bold italicised terms as described in Section 4.14.
The example programs supplied to a site in machine-readable form have been modified as necessary so that they are suitable for immediate execution. Note that the distributed example programs are those used in this implementation and may not correspond exactly with the programs published in the manual. The distributed example programs should be used in preference wherever possible.
real - DOUBLE PRECISION or REAL (KIND(0.0D0)) basic precision - double precision complex - COMPLEX*16 or COMPLEX (KIND(0.0D0)) additional precision - quadruple precision (REAL*16) machine precision - the machine precision, see the value returned by X02AJF in Section 5
Thus a parameter described as real should be declared as DOUBLE PRECISION in your program. If a routine accumulates an inner product in additional precision, it is using software to simulate quadruple precision.
Additional bold italicised terms are used in the example programs in the online documentation and they must be interpreted as follows:
real as an intrinsic function name - DBLE imag - DIMAG cmplx - DCMPLX conjg - DCONJG e in constants, e.g. 1.0e-4 - D, e.g. 1.0D-4 e in formats, e.g. e12.4 - D, e.g. D12.4
All references to routines in Chapter F07 - Linear Equations (LAPACK) and Chapter F08 - Least-squares and Eigenvalue Problems (LAPACK) use the LAPACK name, not the NAG F07/F08 name. The LAPACK name is precision dependent, and hence the name appears in a bold italicised typeface.
The typeset examples use the single precision form of
the LAPACK name. To convert this name to its double precision form, change the
first character either from S to D or C to Z as appropriate.
For example:
sgetrf refers to the LAPACK routine name - DGETRF cpotrs - ZPOTRS
(a) Subroutines are called as such
(b) Functions are declared with the
right type
(c) The correct number of arguments are passed
(d) All
arguments match in type and structure
The interface blocks were generated automatically by analysing the source code for the NAG Fortran Library. As a consequence, and because these files have been thoroughly tested, they are generally more reliable than individually written declarations.
The NAG Fortran Library Interface Block files consist of 11 separate modules. Their names are:
nag_f77_a_chapter nag_f77_c_chapter nag_f77_d_chapter nag_f77_e_chapter nag_f77_f_chapter nag_f77_g_chapter nag_f77_h_chapter nag_f77_m_chapter nag_f77_p_chapter nag_f77_s_chapter nag_f77_x_chapterThese are supplied in pre-compiled form (.mod files). If you are compiling on the command line, to make one or more files accessible you should either copy them to the current directory or ensure that the directory containing the .mod files has been added to the INCLUDE environment variable.
If you are using Developer Studio, you should find that the installation procedure has made Developer Studio aware of the location of the NAG interface blocks. You can confirm that this has been successful by examining the Directories pane when Tools/Options/Directories/Show directories for/Include files has been selected. If the installation had difficulty, perhaps because several versions of Developer Studio were recorded in the registry, then you can set this facility manually in the Directories pane. Otherwise, after establishing a workspace you should make the system aware of any interface blocks by clicking on Project, then Settings, then Fortran, choosing Preprocessor in the Category menu and entering the full paths to the interface blocks in the box labelled INCLUDE and USE Paths.
In order to make use of these modules from existing Fortran 77 code the following changes need to be made:
These changes are illustrated by showing the conversion of the Fortran 77 version of the example program for NAG Fortran Library routine S18DEF. Please note that this is not exactly the same as the example program that is distributed with this implementation. Each change is surrounded by comments boxed with asterisks.
* S18DEF Example Program Text * Mark 14 Revised. NAG Copyright 1989. ******************************************************************* * Add USE statement for relevant chapters * USE NAG_F77_S_CHAPTER * * ******************************************************************* * .. Parameters .. INTEGER NIN, NOUT PARAMETER (NIN=5,NOUT=6) INTEGER N PARAMETER (N=2) * .. Local Scalars .. COMPLEX*16 Z DOUBLE PRECISION FNU INTEGER IFAIL, NZ CHARACTER*1 SCALE * .. Local Arrays .. COMPLEX*16 CY(N) * .. External Subroutines .. ******************************************************************* * EXTERNAL declarations need to be removed (and type declarations * * for functions). * C EXTERNAL S18DEF * * ******************************************************************* * .. Executable Statements .. WRITE (NOUT,*) 'S18DEF Example Program Results' * Skip heading in data file READ (NIN,*) WRITE (NOUT,*) WRITE (NOUT,99999) 'Calling with N =', N WRITE (NOUT,*) WRITE (NOUT,*) +' FNU Z SCALE CY(1) CY(2) + NZ IFAIL' WRITE (NOUT,*) 20 READ (NIN,*,END=40) FNU, Z, SCALE IFAIL = 0 * CALL S18DEF(FNU,Z,N,SCALE,CY,NZ,IFAIL) * WRITE (NOUT,99998) FNU, Z, SCALE, CY(1), CY(2), NZ, IFAIL GO TO 20 40 STOP * 99999 FORMAT (1X,A,I2) 99998 FORMAT (1X,F7.4,' (',F7.3,',',F7.3,') ',A, + 2(' (',F7.3,',',F7.3,')'),I4,I4) END
S07AAF F(1) = 1.0D+13 F(2) = 1.0D-14 S10AAF E(1) = 1.8500D+1 S10ABF E(1) = 7.080D+2 S10ACF E(1) = 7.080D+2 S13AAF x(hi) = 7.083D+2 S13ACF x(hi) = 1.0D+16 S13ADF x(hi) = 1.0D+17 S14AAF IFAIL = 1 if X > 1.70D+2 IFAIL = 2 if X < -1.70D+2 IFAIL = 3 if abs(X) < 2.23D-308 S14ABF IFAIL = 2 if X > 2.55D+305 S15ADF x(hi) = 2.66D+1 x(low) = -6.25D+0 S15AEF x(hi) = 6.25D+0 S17ACF IFAIL = 1 if X > 1.0D+16 S17ADF IFAIL = 1 if X > 1.0D+16 IFAIL = 3 if 0.0D+00 < X <= 2.23D-308 S17AEF IFAIL = 1 if abs(X) > 1.0D+16 S17AFF IFAIL = 1 if abs(X) > 1.0D+16 S17AGF IFAIL = 1 if X > 1.038D+2 IFAIL = 2 if X < -5.6D+10 S17AHF IFAIL = 1 if X > 1.041D+2 IFAIL = 2 if X < -5.6D+10 S17AJF IFAIL = 1 if X > 1.041D+2 IFAIL = 2 if X < -1.8D+9 S17AKF IFAIL = 1 if X > 1.041D+2 IFAIL = 2 if X < -1.8D+9 S17DCF IFAIL = 2 if abs (Z) < 3.93D-305 IFAIL = 4 if abs (Z) or FNU+N-1 > 3.27D+4 IFAIL = 5 if abs (Z) or FNU+N-1 > 1.07D+9 S17DEF IFAIL = 2 if imag (Z) > 7.00D+2 IFAIL = 3 if abs (Z) or FNU+N-1 > 3.27D+4 IFAIL = 4 if abs (Z) or FNU+N-1 > 1.07D+9 S17DGF IFAIL = 3 if abs (Z) > 1.02D+3 IFAIL = 4 if abs (Z) > 1.04D+6 S17DHF IFAIL = 3 if abs (Z) > 1.02D+3 IFAIL = 4 if abs (Z) > 1.04D+6 S17DLF IFAIL = 2 if abs (Z) < 3.93D-305 IFAIL = 4 if abs (Z) or FNU+N-1 > 3.27D+4 IFAIL = 5 if abs (Z) or FNU+N-1 > 1.07D+9 S18ADF IFAIL = 2 if 0.0D+00 < X <= 2.23D-308 S18AEF IFAIL = 1 if abs(X) > 7.116D+2 S18AFF IFAIL = 1 if abs(X) > 7.116D+2 S18CDF IFAIL = 2 if 0.0D+00 < X <= 2.23D-308 S18DCF IFAIL = 2 if abs (Z) < 3.93D-305 IFAIL = 4 if abs (Z) or FNU+N-1 > 3.27D+4 IFAIL = 5 if abs (Z) or FNU+N-1 > 1.07D+9 S18DEF IFAIL = 2 if real (Z) > 7.00D+2 IFAIL = 3 if abs (Z) or FNU+N-1 > 3.27D+4 IFAIL = 4 if abs (Z) or FNU+N-1 > 1.07D+9 S19AAF IFAIL = 1 if abs(x) >= 4.95000D+1 S19ABF IFAIL = 1 if abs(x) >= 4.95000D+1 S19ACF IFAIL = 1 if X > 9.9726D+2 S19ADF IFAIL = 1 if X > 9.9726D+2 S21BCF IFAIL = 3 if an argument < 1.579D-205 IFAIL = 4 if an argument >= 3.774D+202 S21BDF IFAIL = 3 if an argument < 2.820D-103 IFAIL = 4 if an argument >= 1.404D+102
X01AAF (PI) = 3.1415926535897932D+00 X01ABF (GAMMA) = 0.5772156649015329D+00
The basic parameters of the model
X02BHF = 2 X02BJF = 53 X02BKF = -1021 X02BLF = 1024 X02DJF = .TRUE.Derived parameters of the floating-point arithmetic
X02AJF = Z'3CA0000000000001' ( 1.11022302462516D-16 ) X02AKF = Z'0010000000000000' ( 2.22507385850721D-308 ) X02ALF = Z'7FEFFFFFFFFFFFFF' ( 1.79769313486231D+308 ) X02AMF = Z'0010000000000000' ( 2.22507385850721D-308 ) X02ANF = Z'0010000000000000' ( 2.22507385850721D-308 )Parameters of other aspects of the computing environment
X02AHF = Z'43F0000000000000' ( 1.84467440737095D+19 ) X02BBF = 2147483647 X02BEF = 15 X02DAF = .FALSE.
You are advised to consult the introductory materials before calling any routine.
In addition the following are provided in the .\doc directory
The NAG Response Centres are available for general enquiries from all users and also for technical queries from sites with an annually licensed product or support service.
The Response Centres are open during office hours, but contact is possible by fax, email and phone (answering machine) at all times.
When contacting a Response Centre please quote your NAG site reference and NAG product code. (This is given at the head of this document.)
The NAG websites are an information service providing items of interest to
users and prospective users of NAG products and services. The information is
reviewed and updated regularly and includes implementation availability,
descriptions of products, downloadable software, product documentation and
technical reports. The NAG websites can be accessed at
http://www.nag.co.uk/
,
http://www.nag.com/ (in North America)
or
http://www.nag-j.co.jp/ (in Japan)
NAG Ltd Wilkinson House Jordan Hill Road OXFORD OX2 8DR NAG Ltd Response Centre United Kingdom email: support@nag.co.uk Tel: +44 (0)1865 511245 Tel: +44 (0)1865 311744 Fax: +44 (0)1865 310139 Fax: +44 (0)1865 310139 NAG Inc 1431 Opus Place, Suite 220 Downers Grove IL 60515-1362 NAG Inc Response Center USA email: infodesk@nag.com Tel: +1 630 971 2337 Tel: +1 630 971 2345 Fax: +1 630 971 2706 Fax: +1 630 971 2706 Nihon NAG KK Hatchobori Frontier Building 2F 4-9-9 Hatchobori Chuo-ku Tokyo 104-0032 Japan email: help@nag-j.co.jp Tel: +81 (0)3 5542 6311 Fax: +81 (0)3 5542 6312