- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
dpotrf anddpotri, in order to get the inverse of a matrix.
However, when I reach the line CALL dpotrf(TRUELAMBDAINV) in the following subroutine, I get an unhandled exceptionerror. I have also included the main program that calls this subroutine at the end of this message.
I think I may not have the proper include and use statements, but can't figure out from the documentation where I am going wrong.
Any help would be greatly appreciated
Siddarth
SUBROUTINE TRUE_PARAMS
USE SETTINGS
USE PARS
USE MKL_VSL_TYPE
USE MKL_VSL
use MKL95_LAPACK
use MKL95_PRECISION
IMPLICIT NONE
REAL*8 :: LBD12(NP,NP),RDRAW(NP),R(NP,1),TEMP(NP,1)
INTEGER :: I, J
INTEGER :: mstorage
TYPE (VSL_STREAM_STATE) :: stream
integer(kind=4) errcode
integer brng,method,seed,n
brng=VSL_BRNG_MT19937
method=VSL_METHOD_DGAUSSIAN_ICDF
seed=777
mstorage=VSL_MATRIX_STORAGE_FULL
DATA ((LBD12(I, J), J = 1,4), I = 1,4) / 5, 5, -1, 1, 0, 4, -2, 0, 0, 0, 3, 2, 0, 0,0, 1 /
LBD12=LBD12/2.0D0
TRUELAMBDA=MATMUL(TRANSPOSE(LBD12),LBD12)
TRUELAMBDAINV=TRUELAMBDA
CALL dpotrf(TRUELAMBDAINV)
CALL dpotri(TRUELAMBDAINV)
! ***** Initializing *****
errcode=vslnewstream( stream, brng, seed )
DO I=1,NSUB
errcode = vdrnggaussianmv( method, stream, 1, rdraw, np, mstorage, truemub, lbd12 )
TRUEB_S(I,:)=RDRAW
ENDDO
TRUESIGMA=5.0D0
END SUBROUTINE TRUE_PARAMS
! HB linear regression
! Y_i=X_i*Beta_i + epsilon_i
! Beta_i ~ N(Mu, Lambda)
! Mu ~ N (ETA, V0)
!Lambda ~ IW (f0, G0)
! epsilon_i ~ N(0, sigma^2*I)
!sigma^2 ~ IG(r0/2,s0/2)
! INCLUDE 'link_fnl_static.h' ! Include IMSL static library
! USE MKL_VSL_TYPE
! USE MKL_VSL
INCLUDE 'MKL_VSL.FI'
INCLUDE 'LAPACK.F90'
! INCLUDE 'MKL_LAPACK.FI'
! INCLUDE 'MKL_BLAS.FI'
MODULE SETTINGS
! Set sampler parameters
IMPLICIT NONE
INTEGER, PARAMETER :: NITER = 30000 ! Number of iterations
INTEGER, PARAMETER :: NETBURN = 20000 ! Number of additional iterations to burn
INTEGER, PARAMETER :: NSAVE = 25 ! Thining parameter
INTEGER, PARAMETER :: MONITOR = 1 ! Monitoring parameter (1/0)
! Set Data parameters
INTEGER, PARAMETER :: NSUB = 100 ! Number of cross-sectional units
INTEGER, PARAMETER :: NP = 4 ! Number of parameters
INTEGER, PARAMETER :: NVAR = 3 ! Number of explanatory variables
END MODULE SETTINGS
MODULE FILESPEC
IMPLICIT NONE
! Set model number and run number
CHARACTER*10, PARAMETER :: MODEL = 'HBREG' ! Model number
CHARACTER*4, PARAMETER :: RUN = '_1' ! Run number
! set directory for the output data
CHARACTER*60, PARAMETER :: OUTDIR = 'C:\\ALLWORK\\PROJECTS\\SML\\fortran\\output'
END MODULE FILESPEC
MODULE DATASETS
USE SETTINGS
IMPLICIT NONE
REAL*8, SAVE, DIMENSION(:,:), ALLOCATABLE :: XDATA,XI,YI
REAL*8, SAVE, DIMENSION(:), ALLOCATABLE :: Y
REAL*8 :: STARTEND(NSUB,2)
INTEGER, SAVE :: TOTROWS
END MODULE DATASETS
MODULE PARS
USE SETTINGS
IMPLICIT NONE
REAL*8, SAVE :: BETA_S(NSUB,NP),ILAMBDA(NP,NP),LAMBDA(NP,NP),MUB(NP,1),SIGMA
REAL*8, SAVE :: TRUEB_S(NSUB,NP),TRUELAMBDA(NP,NP),TRUELAMBDAINV(NP,NP),TRUEMUB(NP,1),TRUESIGMA
DATA TRUEMUB /2,-1,3,2/
END MODULE PARS
! *************** START MAIN PROGRAM **********************
PROGRAM HBREG
! Modules
USE SETTINGS ! Settings for analysis
USE DATASETS ! Data for analysis
USE PARS ! Model parameters for analysis
USE FILESPEC ! Storage directories and model numbers
! USE LINEAR_OPERATORS
! Variable declaration
IMPLICIT NONE
INTEGER :: COUNT_ITER ! Count actual saved iterations
INTEGER :: I,ITER ! Indices
INTEGER :: IYR, IMON, IDAY, IHR, IMIN, ISEC, I100 ! TO get the day and time
INTEGER :: ISEED, IRANK ! Auxiliary variables
WRITE (6,382)IYR,IMON,IDAY
WRITE (6,383)IHR,IMIN,ISEC,I100
382 FORMAT(" Start Date -- ",I4,":",I2,":",I2)
383 FORMAT(" Start Time -- ",I2,":",I2,":",I2,".",I2)
! GENERATING THE TRUE PARAMETERS
CALL TRUE_PARAMS
! ************* Generating DATA **************
CALL LOAD_DATA(TRUEB_S,TRUESIGMA)
! ********************************************
CALL GETDAT(IYR,IMON,IDAY)
CALL GETTIM(IHR,IMIN,ISEC,I100)
WRITE (6,380)IYR,IMON,IDAY
WRITE (6,381)IHR,IMIN,ISEC,I100
380 FORMAT(" End Date -- ",I4,":",I2,":",I2)
381 FORMAT(" End Time -- ",I2,":",I2,":",I2,".",I2)
! Close all the output files
CLOSE(21)
CLOSE(22)
END PROGRAM HBREG
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The lapack.f90 is set up for
USE lapack
while the .fi files are set up for include. You must choose one or the other.
With the absence of reasonable formatting and disregard for standard usage, it's difficult to scan your quoted source visually.
You haven't shown essential information such as whether you are in 32-bit mode, or in 64-bit mode, where you have a choice of either 32-bit integer arguments (lp64) or 64-bit (ilp64).
You would probably get more expert help on the MKL forum.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
For example, in your code, the call to the factorization routine should be
CALL dpotrf('U',np,TRUELAMBDAINV,np,info)
Alternatively, you may use the Fortran 9X interfaces in LAPACK95, in which case the call should be
call potrf(TRUELAMBDAINV)
Furthermore, since you did not
USE f95_lapack
which would have provided the compiler with the interfaces for DPOTRF and DPOTRI, you forced the compiler to use the Fortran-77 convention of "user is responsible for providing correct argument list". Had you included this statement, the compiler would have told you
"error #6631: A non-optional actual argument must be present when invoking a procedure with an explicit interface.
CALL dpotrf(TRUELAMBDAINV)"
...
It would benefit you greatly to understand about Fortran interfaces, modules, and the implications of USE versus those of INCLUDE.
Next time you post code, please use the "syntax highlighter" tool (the icon with a diagonally placed pencil visible when you are creating a message).
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I tried the USE f95_lapackstatementalong with a call to potrf(truelambdainv) but still get the following error
C:\Allwork\PROJECTS\SML\FORTRAN\PROGRAMS\Test1.f90(123): error #7002: Error in opening the compiled module file. Check INCLUDE paths. [MKL95_LAPACK]
Is theresome part of the documentation that clearly states the steps that one needs to go through in order to get Visual fortran compiler to go through?
Also is there some place which clearly states what I need to do in terms of include files and so on that I must add in for it to work?
Siddarth
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Alternatively, you may use the F77 interface and call DPOTRF with all its arguments included.
The User Guide does cover the topics you ask about. However, you will probably not find a sequence of instructions that can be mechanically followed, because every installation of Intel Fortran, Visual Studio and other tools can be slightly different.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I see the Makefile and the sources. How do I run it and create the .mod and .lib file?
I also tried to use the F77 version of the command by
a) Using the INCLUDE 'MKL_LAPACK.FI' in the main program (as mentioned in the manual)
b) Including the line call dpotrf( 'up', np, truelambdainv, np, info )
However this gave a number of compiler errors including the following (there were 31 compiler errors). It looks like I am no closer to using these routines.
Any suggestions?
Regards,
Siddarth
C:\PROGRA~2\Intel\Compiler\11.1\065\mkl\include\MKL_LAPACK.FI(31): error #5082: Syntax error, found END-OF-STATEMENT when expecting one of: *
C:\PROGRA~2\Intel\Compiler\11.1\065\mkl\include\MKL_LAPACK.FI(32): error #5276: Unbalanced parentheses
C:\PROGRA~2\Intel\Compiler\11.1\065\mkl\include\MKL_LAPACK.FI(32): error #5082: Syntax error, found IDENTIFIER 'RWORK' when expecting one of: ( % : . = =>
C:\PROGRA~2\Intel\Compiler\11.1\065\mkl\include\MKL_LAPACK.FI(32): error #5082: Syntax error, found END-OF-STATEMENT when expecting one of: ( % . = =>
C:\PROGRA~2\Intel\Compiler\11.1\065\mkl\include\MKL_LAPACK.FI(63): error #5082: Syntax error, found END-OF-STATEMENT when expecting one of: *
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks,
Siddarth
using lapack.f90 that includes improved interfaces. This file is used to generate the
module files lapack95.mod and f95_precision.mod. The module files
mkl95_lapack.mod and mkl95_precision.mod are also generated. See also the
section Fortran 95 interfaces and wrappers to LAPACK and BLAS of Intel MKL User's
Guide for details. The module files are used to process the FORTRAN use clauses
referencing the LAPACK interface: use lapack95 (or an equivalent use
mkl95_lapack) and use f95_precision (or an equivalent use mkl95_precision).
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
## examples of using:
##
## nmake lib32 install_dir=lib95 - build by Intel Fortran Compiler (as default)
## for 32-bit applications, static linking
##
## nmake lib64 install_dir=lib95 - build by Intel Fortran Compiler (as default)
## for 64-bit applications - Intel Itanium, static linking
##
## nmake libem64t install_dir=lib95 - build by Intel Fortran Compiler (as default)
## for 32-bit with Intel EM64T applications - static linking
Replace 'lib95' by the name of the directory where you want the library to be installed.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks for your patience!
Inoticed that the directory C:\Program Files (x86)\Intel\Compiler\11.1\065\mkl\include\em64t\lp64
already contains blas95.mod, f95_precison.mod, lapack95.mod, mkl95_lapack.mod, mkl95_blas.mod, and mkl95_precision.mod
I added this directory to the Additional Include Directories and then I was able to compile and run without error when I used the f77 version of the command.
However, when I used thef90 version, i.e. CALL potrf(TRUELAMBDAINV). I get the following errors.
Error 1 error LNK2019: unresolved external symbol DPOTRF_F95 referenced in function TRUE_PARAMS Test3.obj
Error 2 error LNK2019: unresolved external symbol DPOTRI_F95 referenced in function TRUE_PARAMS Test3.obj
When I changed the above command to CALL DPOTRF(TRUELAMBDAINV) the linking error went away but I got an unhandled exception execution error.
Any suggestions?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Adding them to link path won't have any effect.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks for your patience!
I noticed that the directory C:\Program Files (x86)\Intel\Compiler\11.1\065\mkl\include\em64t\lp64
already contains blas95.mod, f95_precison.mod, lapack95.mod, mkl95_lapack.mod, mkl95_blas.mod, and mkl95_precision.mod
I added this directory to the Additional Include Directories and then I was able to compile and run without error when I used the f77 version of the command.
However, when I used the f90 version, i.e. CALL potrf(TRUELAMBDAINV). I get the following errors.
Error 1 error LNK2019: unresolved external symbol DPOTRF_F95 referenced in function TRUE_PARAMS Test3.obj
Error 2 error LNK2019: unresolved external symbol DPOTRI_F95 referenced in function TRUE_PARAMS Test3.obj
When I changed the above command to CALL DPOTRF(TRUELAMBDAINV) the linking error went away but I got an unhandled exception execution error.
Any suggestions?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Here is working code that calls DPOTRF:
[fortran]program DPOTRFEXCompiling:
!DEC$ OBJCOMMENT LIB:'mkl_intel_c_dll'
!DEC$ OBJCOMMENT LIB:'mkl_sequential_dll'
IMPLICIT NONE
INTEGER, PARAMETER :: NP = 4
INTEGER :: INFO,I,J
REAL*8 :: LBD12(NP,NP), TRUELAMBDA(NP,NP), TRUELAMBDAINV(NP,NP)
DATA ((LBD12(I, J), J = 1,4), I = 1,4) / 5, 5, -1, 1, 0, 4, -2, 0, 0, 0, 3, 2, 0, 0,0, 1 /
LBD12=LBD12/2.0D0
TRUELAMBDA=MATMUL(TRANSPOSE(LBD12),LBD12)
TRUELAMBDAINV=TRUELAMBDA
CALL dpotrf('U',np,TRUELAMBDAINV,np,info)
write(*,10)((TRUELAMBDAINV(I,J),J=1,NP),I=1,NP)
10 format(1x,4ES15.7)
end program DPOTRFEX[/fortran]
[bash]c:LANG>ifort dpot.f90Running:
Intel Visual Fortran Compiler Professional for applications running on IA-32, Version 11.1 Build 2010041
4 Package ID: w_cprof_p_11.1.065
Copyright (C) 1985-2010 Intel Corporation. All rights reserved.
Microsoft Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
-out:dpot.exe
-subsystem:console
dpot.obj[/bash]
[bash]c:LANG>dpot
2.5000000E+00 2.5000000E+00 -5.0000000E-01 5.0000000E-01
6.2500000E+00 2.0000000E+00 -1.0000000E+00 0.0000000E+00
-1.2500000E+00 -3.2500000E+00 1.5000000E+00 1.0000000E+00
1.2500000E+00 1.2500000E+00 1.2500000E+00 5.0000000E-01[/bash]
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
My question was abouthow to make the f95 call work. Inour previous correspondencewe haddiscussed CALLpotrf(TRUELAMBDAINV).
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
USE lapack95
and link to lapack95.lib in addition to the other libraries.
Please read the documentation.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
[bash]That's what I had done (I've pasted the subroutine below) But I get the following build errors
Error 1 error LNK2019: unresolved external symbol DPOTRF_F95 referenced in function TRUE_PARAMS Test3.objError 2 error LNK2019: unresolved external symbol DPOTRI_F95 referenced in function TRUE_PARAMS Test3.obj
Error 3 fatal error LNK1120: 2 unresolved externals x64SimpleConsole1.exe
By the way I am linking to the lapack95.lib is by including the following directory in the Additional Include Directories under
the Fortran General tab. This directory contains lapack95.mod (as well as the others).
C:Program Files (x86)IntelCompiler11.165mklincludeem64tlp64;
Is there something else I need to do? Thanks!
SUBROUTINE TRUE_PARAMSUSE SETTINGS
USE PARS
USE MKL_VSL_TYPE
USE MKL_VSL
USE LAPACK95
!USE MKL95_LAPACK
USE F95_PRECISION
!USE MKL95_PRECISION
IMPLICIT NONE
REAL*8 :: LBD12(NP,NP),RDRAW(NP),R(NP,1),TEMP(NP,1)
INTEGER :: I, J
INTEGER :: mstorage, info
TYPE (VSL_STREAM_STATE) :: stream
integer(kind=4) errcode
integer brng,method,seed,n
brng=VSL_BRNG_MT19937
method=VSL_METHOD_DGAUSSIAN_ICDF
seed=777
mstorage=VSL_MATRIX_STORAGE_FULL
DATA ((LBD12(I, J), J = 1,4), I = 1,4) / 5, 5, -1, 1, 0, 4, -2, 0, 0, 0, 3, 2, 0, 0,0, 1 /
LBD12=LBD12/2.0D0
TRUELAMBDA=MATMUL(TRANSPOSE(LBD12),LBD12)
TRUELAMBDAINV=TRUELAMBDA
!call dpotrf( 'up', np, truelambdainv, np, info )
CALL potrf(TRUELAMBDAINV)
!call dpotri( 'up', np, truelambdainv, np, info )
CALL potri(TRUELAMBDAINV)
END SUBROUTINE TRUE_PARAMS
[/bash]
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page