Fortran Fortran: help with arguments to a pre-built software

  • Thread starter Thread starter brydustin
  • Start date Start date
  • Tags Tags
    Fortran Software
AI Thread Summary
The discussion focuses on understanding the argument structure for the Fortran subroutines DGPADM and DGCHBV from the Expokit library. Users express confusion over the differences between the expected argument formats and the documentation, particularly regarding the matrix H and its dimensions. A suggested example for H is a simple 2x2 matrix, with a time-scale value of 1.0, to illustrate the expected output of the exponential function. Clarifications are provided about the initialization of input variables and the role of output variables in the routines. Overall, the thread seeks practical guidance on how to correctly implement these functions in Fortran.
brydustin
Messages
201
Reaction score
0
There are two functions that I need help with:

http://www.maths.uq.edu.au/expokit/fortran/dgpadm.f
http://www.maths.uq.edu.au/expokit/fortran/dgchbv.f

The problem I'm having is that the arguments on the line DGPADM(...) don't match identically with the explanation. For example, H, ldh and m vs. m and H(ldh,m) not sure why there is a parenthesis. If someone could give me a simple example of acceptable parameters that I could try out,that would be greatly appreciated.

I understand what to put for ideg, m, t, but not so sure about wsp, ipiv , H or the others. For example, H is a matrix, so I guess it needs a matrix as an argument... regardless could someone help me out here?! Thanks!

In the first case:
subroutine DGPADM( ideg,m,t,H,ldh,wsp,lwsp,ipiv,iexph,ns,iflag )

* ideg : (input) the degre of the diagonal Pade to be used.
* a value of 6 is generally satisfactory.
*
* m : (input) order of H.
*
* H(ldh,m) : (input) argument matrix.
*
* t : (input) time-scale (can be < 0).
*
* wsp(lwsp) : (workspace/output) lwsp .ge. 4*m*m+ideg+1.
*
* ipiv(m) : (workspace)
*
*>>>> iexph : (output) number such that wsp(iexph) points to exp(tH)
* i.e., exp(tH) is located at wsp(iexph ... iexph+m*m-1)
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* NOTE: if the routine was called with wsp(iptr),
* then exp(tH) will start at wsp(iptr+iexph-1).
*
* ns : (output) number of scaling-squaring used.
*
* iflag : (output) exit flag.
* 0 - no problem
* <0 - problem


Second case:
subroutine DGCHBV( m, t, H,ldh, y, wsp, iwsp, iflag )

* m : (input) order of the matrix H
*
* t : (input) time-scaling factor (can be < 0).
*
* H(ldh,m): (input) argument matrix.
*
* y(m) : (input/output) on input the operand vector,
* on output the resulting vector exp(t*H)*y.
*
* iwsp(m) : (workspace)
*
* wsp : (workspace). Observe that a double precision vector of
* length 2*m*(m+2) can be used as well when calling this
* routine (thus avoiding an idle complex array elsewhere)
 
Technology news on Phys.org
Mod note: moved to Prog & CS section
 
brydustin said:
There are two functions that I need help with:

http://www.maths.uq.edu.au/expokit/fortran/dgpadm.f
http://www.maths.uq.edu.au/expokit/fortran/dgchbv.f

The problem I'm having is that the arguments on the line DGPADM(...) don't match identically with the explanation. For example, H, ldh and m vs. m and H(ldh,m) not sure why there is a parenthesis. If someone could give me a simple example of acceptable parameters that I could try out,that would be greatly appreciated.

I understand what to put for ideg, m, t, but not so sure about wsp, ipiv , H or the others. For example, H is a matrix, so I guess it needs a matrix as an argument... regardless could someone help me out here?! Thanks!
I'll take a stab at the first one.

H - the name of a two-dimensional matrix - the matrix contains double precision numbers.
ldh - # of rows in matrix H - an integer.
m - # of cols in matrix H - an integer.
t - timescale. This is the constant t in etH -- double precision.
wsp - workspace - an output array with lwsp elements, each of type double precision.
lwsp - # of elements of the wsp array - an integer. It needs to be > 4m2 + ideg + 1.
ipiv - an output array with m integer elements.
iexph - an index into the wsp array - an integer.
The computed elements of etH are located in the wsp array. They start at wsp(iexph) and end at wsp(iexph + m2 - 1). This section of the array contains all of the elements of etH.
ns - no clue - integer.
iflag - a flag that indicates whether the calculation was successful or not. Negative value indicates some kind of error.

I would start with a very simple matrix, like
$$H = \begin{bmatrix} 0 & 1 \\ 0 & 0 \end{bmatrix}$$
and a value of 1.0 for t.

You should end up with
$$e^{tH} = \begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix}$$

The variables that are identified as being output don't need to be initialized before calling this routine. The other variables need to be initialized before the call.

brydustin said:
In the first case:
subroutine DGPADM( ideg,m,t,H,ldh,wsp,lwsp,ipiv,iexph,ns,iflag )

* ideg : (input) the degre of the diagonal Pade to be used.
* a value of 6 is generally satisfactory.
*
* m : (input) order of H.
*
* H(ldh,m) : (input) argument matrix.
*
* t : (input) time-scale (can be < 0).
*
* wsp(lwsp) : (workspace/output) lwsp .ge. 4*m*m+ideg+1.
*
* ipiv(m) : (workspace)
*
*>>>> iexph : (output) number such that wsp(iexph) points to exp(tH)
* i.e., exp(tH) is located at wsp(iexph ... iexph+m*m-1)
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* NOTE: if the routine was called with wsp(iptr),
* then exp(tH) will start at wsp(iptr+iexph-1).
*
* ns : (output) number of scaling-squaring used.
*
* iflag : (output) exit flag.
* 0 - no problem
* <0 - problem


Second case:
subroutine DGCHBV( m, t, H,ldh, y, wsp, iwsp, iflag )

* m : (input) order of the matrix H
*
* t : (input) time-scaling factor (can be < 0).
*
* H(ldh,m): (input) argument matrix.
*
* y(m) : (input/output) on input the operand vector,
* on output the resulting vector exp(t*H)*y.
*
* iwsp(m) : (workspace)
*
* wsp : (workspace). Observe that a double precision vector of
* length 2*m*(m+2) can be used as well when calling this
* routine (thus avoiding an idle complex array elsewhere)
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I have a quick questions. I am going through a book on C programming on my own. Afterwards, I plan to go through something call data structures and algorithms on my own also in C. I also need to learn C++, Matlab and for personal interest Haskell. For the two topic of data structures and algorithms, I understand there are standard ones across all programming languages. After learning it through C, what would be the biggest issue when trying to implement the same data...

Similar threads

Replies
18
Views
6K
Replies
6
Views
3K
Back
Top