fortran中的一些函数
2012-11-28 19:22
141 查看
函数:SIGN(A,B)
Description:
Standard:Fortran 77 and later
Class:Elemental function
Syntax:
Arguments:
SIGN(A,B)以B的符号返回A的值。返回值的符号位B的符号,返回值的绝对值为A的绝对值
print *,sign(1,-8)
print *,sign(9,-5)
print *,sign(-3,2)
输出分别为-1,-9,3
MAXLOC函数返回最大值在数组中的位置
当没有指定位维数参数的时候,返回值的维数等于数组的rank
Description:
Determines the location of the element in the array with the maximum value, or, if the DIM argument is supplied, determines the locations of the maximum element along each row of the array in the DIM direction.
If MASK is present, only the elements for which MASK is
the array has zero size, or all of the elements of MASK are
for that row is zero.
Standard:Fortran 95 and later
Class:Transformational function
Syntax:
Arguments:
Return value:If DIM is absent, the result is a rank-one array with a length equal to the rank of ARRAY. If DIM is present, the result is an array with a rank one less than the rank of ARRAY, and a size corresponding to the
size of ARRAY with theDIM dimension removed. If DIM is present and ARRAY has a rank of one, the result is a scalar. In all cases, the result is of default
程序输出为
i= 3 j= 4
i= 1 j= 1
输出的最大值的位置为相对于第一个元素的位置,是相对位置,而不是该元素的实际索引
比如第一个元素的位置是(2,3) maxloc对应元素的实际位置需(3,4)+(2,3)-(1,1)=(4,6)
minloc函数也相同
cite from (http://docs.oracle.com/cd/E19957-01/805-4939/6j4m0vn9b/index.html)
equivalence表达式
The EQUIVALENCE statement specifies that two or more variables or arrays in a program unit share
the same memory.
EQUIVALENCE (nlist)
[, (nlist)] ...
An EQUIVALENCE statement stipulates that the storage sequence of the entities whose names appear
in the list nlist must have the same first memory location.
EQUIVALENCE语句规定了名字出现在nlist中的实体的存储序列必须具有相同的首个内存位置
An array name, if present, refers to the first element of the array.
如果数组名出现在参数中,那么它代表数组的第一个元素
equivalence语句有点像C++的引用,equivalence的参数中的变量指向了内存中的同一个位置,修改其中一个参数,其他参数的值也就跟着改变
获取cpu的时间,可以用于测试某段代码所花的时间
cite from http://gcc.gnu.org/onlinedocs/gcc-4.0.4/gfortran/CPU_005fTIME.html
7.34
Description:Returns a
Option:f95, gnu
Class:subroutine
Syntax:
Arguments:
Return value:None
Example:
Fortran 77 has no global variables, i.e. variables that are shared among several program units (subroutines). The only way to pass information between subroutines we have seen so far is to use the subroutine
parameter list. Sometimes this is inconvenient, e.g., when many subroutines share a large set of parameters. In such cases one can use a common block. This is a way to specify that certain variables should be shared among certain subroutines. But
in general, the use of common blocks should be minimized.
fortran77没有全局变量,在子程序之间传递信息的方法就是通过子程序的参数列表。
common block
当子程序之间共享大集合的变量的时候这就不方便了.这种方式指定特定的变量在特定的子程序之间共享
比如变量alpha与beta需要在不同子程序之间共享,可以定义如下
这里斜杠里面的coeff是common block的名字
common /coeff/ alpha, beta
The common statement should appear together with the variable declarations, before the executable statements.
Different common blocks must have different names (just like variables).
A variable cannot belong to more than one common block.
The variables in a common block do not need to have the same names each place they occur (although it is a good idea to do so), but they must be listed in the same order and have the same type and size.
common语句应该与变量声明放在一起,位于执行语句之前(不然通不过编译)
common block中的变量不需要在每一次出现的时候使用相同的变量名(尽管用相同变量名比较好),但是他们必须被以同样的顺序排列,具有相同的类型与大小
To illustrate this, look at the following continuation of our example:
This declaration is equivalent to the previous version that used alpha and beta.
the following paragraph cites from f90 standard
5.5.2.1 Common block storage sequence
For each common block, a common block storage sequence is formed as follows:
(1) A storage sequence is formed consisting of the sequence of storage units contained in the storage
sequences (14.6.3.1) of all data objects in the common block object lists for the common block. The
order of the storage sequences is the same as the order of the appearance of the common block
object lists in the scoping unit.
(2) The storage sequence formed in (1) is extended to include all storage units of any storage sequence
associated with it by equivalence association. The sequence may be extended only by adding
storage units beyond the last storage unit. Data objects associated with an entity in a common block
are considered to be in that common block.
common block对象列表中的数据对象在内存中的布局是连续的,顺序与common block对象列表中出现的顺序相同
ibset
ibset将参数i的二进制表示中位置pos上的位设置为1并且返回第一个参数i的值
cite from
http://gcc.gnu.org/onlinedocs/gfortran/IBSET.html
Description:
Standard:Fortran 95 and later
Class:Elemental function
Syntax:
Arguments:
Return value:
The return value is of type
ibclr返回第一个参数i的值并将二进制表示中pos位上的位设为0
Description:
Standard:Fortran 95 and later
Class:Elemental function
Syntax:
Arguments:
Return value:The return value is of type
如果参数i的二进制表示中pos位是1,函数返回true
Description:
Standard:Fortran 95 and later
Class:Elemental function
Syntax:
Arguments:
Return value:The return value is of type
ishft参数中shift>0为左移,shift等于0不移位,shift<0为右移
8.135
Description:
zero corresponds to a right shift. If the absolute value of SHIFT is greater than
Standard:Fortran 95 and later
Class:Elemental function
Syntax:
Arguments:
Return value:
The return value is of type
8.180
Description:Moves LEN bits from positions FROMPOS through
movement of bits is unchanged. The values of
Standard:Fortran 95 and later
Class:Elemental subroutine
Syntax:
Arguments:
8.35
Description:
Standard:Fortran 95 and later
Class:Inquiry function
Syntax:
Arguments:
Description:
SIGN(A,B)returns the value of A with the sign of B.
Standard:Fortran 77 and later
Class:Elemental function
Syntax:
RESULT = SIGN(A, B)
Arguments:
A | Shall be of type INTEGERor REAL |
B | Shall be of the same type and kind as A |
print *,sign(1,-8)
print *,sign(9,-5)
print *,sign(-3,2)
输出分别为-1,-9,3
MAXLOC
— Location of the maximum value within an array
MAXLOC函数返回最大值在数组中的位置当没有指定位维数参数的时候,返回值的维数等于数组的rank
Description:
Determines the location of the element in the array with the maximum value, or, if the DIM argument is supplied, determines the locations of the maximum element along each row of the array in the DIM direction.
If MASK is present, only the elements for which MASK is
.TRUE.are considered. If more than one element in the array has the maximum value, the location returned is that of the first such element in array element order. If
the array has zero size, or all of the elements of MASK are
.FALSE., then the result is an array of zeroes. Similarly, if DIM is supplied and all of the elements of MASK along a given row are zero, the result value
for that row is zero.
Standard:Fortran 95 and later
Class:Transformational function
Syntax:
RESULT = MAXLOC(ARRAY, DIM [, MASK]) |
RESULT = MAXLOC(ARRAY [, MASK]) |
ARRAY | Shall be an array of type INTEGERor REAL. |
DIM | (Optional) Shall be a scalar of type INTEGER, with a value between one and the rank of ARRAY, inclusive. It may not be an optional dummy argument. |
MASK | Shall be an array of type LOGICAL, and conformable with ARRAY. |
size of ARRAY with theDIM dimension removed. If DIM is present and ARRAY has a rank of one, the result is a scalar. In all cases, the result is of default
INTEGERtype.
program main implicit none integer ::i,j integer,dimension(2) ::pos integer,dimension(2:4,3:6) ::arr data((arr(i,j),i=2,4),j=3,6)/1,3,4,5,6,7,8,9,10,25,76,89/ pos=maxloc(arr) write(*,*)'i=',pos(1),'j=',pos(2) pos=minloc(arr) write(*,*)'i=',pos(1),'j=',pos(2) end
程序输出为
i= 3 j= 4
i= 1 j= 1
输出的最大值的位置为相对于第一个元素的位置,是相对位置,而不是该元素的实际索引
比如第一个元素的位置是(2,3) maxloc对应元素的实际位置需(3,4)+(2,3)-(1,1)=(4,6)
minloc函数也相同
EQUIVALENCE
cite from (http://docs.oracle.com/cd/E19957-01/805-4939/6j4m0vn9b/index.html)equivalence表达式
The EQUIVALENCE statement specifies that two or more variables or arrays in a program unit share
the same memory.
EQUIVALENCE (nlist)
[, (nlist)] ...
Parameter | Description |
nlist | List of variable names, array element names, array names, and character substring names separated by commas |
in the list nlist must have the same first memory location.
EQUIVALENCE语句规定了名字出现在nlist中的实体的存储序列必须具有相同的首个内存位置
An array name, if present, refers to the first element of the array.
如果数组名出现在参数中,那么它代表数组的第一个元素
program main implicit none integer,dimension(2) ::arr integer ::i equivalence(i,arr(1)) arr(1)=5 write(*,*) i !输出5 i=100 write(*,*) arr(1) !输出100 end
equivalence语句有点像C++的引用,equivalence的参数中的变量指向了内存中的同一个位置,修改其中一个参数,其他参数的值也就跟着改变
获取cpu的时间,可以用于测试某段代码所花的时间
cite from http://gcc.gnu.org/onlinedocs/gcc-4.0.4/gfortran/CPU_005fTIME.html
7.34 CPU_TIME
— CPU elapsed time in seconds
Description:Returns a REALvalue representing the elapsed CPU time in seconds. This is useful for testing segments of code to determine execution time.
Option:f95, gnu
Class:subroutine
Syntax:
CPU_TIME(X)
Arguments:
X | The type shall be REALwith intent out. |
Example:
program test_cpu_time real :: start, finish call cpu_time(start) ! put code to test here call cpu_time(finish) print '("Time = ",f6.3," seconds.")',finish-start end program test_cpu_time
13. Common blocks -f77 common block
cite from http://www.stanford.edu/class/me200c/tutorial_77/13_common.htmlFortran 77 has no global variables, i.e. variables that are shared among several program units (subroutines). The only way to pass information between subroutines we have seen so far is to use the subroutine
parameter list. Sometimes this is inconvenient, e.g., when many subroutines share a large set of parameters. In such cases one can use a common block. This is a way to specify that certain variables should be shared among certain subroutines. But
in general, the use of common blocks should be minimized.
Syntax
common / name / list-of-variables
Example
Suppose you have two parameters alpha and beta that many of your subroutines need. The following example shows how it can be done using common blocks.program main some declarations real alpha, beta common /coeff/ alpha, beta statements stop end subroutine sub1 (some arguments) declarations of arguments real alpha, beta common /coeff/ alpha, beta statements return end subroutine sub2 (some arguments) declarations of arguments real alpha, beta common /coeff/ alpha, beta statements return end
fortran77没有全局变量,在子程序之间传递信息的方法就是通过子程序的参数列表。
common block
当子程序之间共享大集合的变量的时候这就不方便了.这种方式指定特定的变量在特定的子程序之间共享
比如变量alpha与beta需要在不同子程序之间共享,可以定义如下
这里斜杠里面的coeff是common block的名字
common /coeff/ alpha, beta
The common statement should appear together with the variable declarations, before the executable statements.
Different common blocks must have different names (just like variables).
A variable cannot belong to more than one common block.
The variables in a common block do not need to have the same names each place they occur (although it is a good idea to do so), but they must be listed in the same order and have the same type and size.
common语句应该与变量声明放在一起,位于执行语句之前(不然通不过编译)
common block中的变量不需要在每一次出现的时候使用相同的变量名(尽管用相同变量名比较好),但是他们必须被以同样的顺序排列,具有相同的类型与大小
To illustrate this, look at the following continuation of our example:
subroutine sub3 (some arguments) declarations of arguments real a, b common /coeff/ a, b statements return end
This declaration is equivalent to the previous version that used alpha and beta.
the following paragraph cites from f90 standard
5.5.2.1 Common block storage sequence
For each common block, a common block storage sequence is formed as follows:
(1) A storage sequence is formed consisting of the sequence of storage units contained in the storage
sequences (14.6.3.1) of all data objects in the common block object lists for the common block. The
order of the storage sequences is the same as the order of the appearance of the common block
object lists in the scoping unit.
(2) The storage sequence formed in (1) is extended to include all storage units of any storage sequence
associated with it by equivalence association. The sequence may be extended only by adding
storage units beyond the last storage unit. Data objects associated with an entity in a common block
are considered to be in that common block.
common block对象列表中的数据对象在内存中的布局是连续的,顺序与common block对象列表中出现的顺序相同
ibset
ibset将参数i的二进制表示中位置pos上的位设置为1并且返回第一个参数i的值
cite from
http://gcc.gnu.org/onlinedocs/gfortran/IBSET.html
IBSET— Set bit
Description:
IBSETreturns the value of I with the bit at position POS set to one.
Standard:Fortran 95 and later
Class:Elemental function
Syntax:
RESULT = IBSET(I, POS)
Arguments:
I | The type shall be INTEGER. |
POS | The type shall be INTEGER. |
The return value is of type
INTEGERand of the same kind as I.
ibclr返回第一个参数i的值并将二进制表示中pos位上的位设为0
IBCLR
— Clear bit
Description:IBCLRreturns the value of I with the bit at position POS set to zero.
Standard:Fortran 95 and later
Class:Elemental function
Syntax:
RESULT = IBCLR(I, POS)
Arguments:
I | The type shall be INTEGER. |
POS | The type shall be INTEGER. |
INTEGERand of the same kind as I.
如果参数i的二进制表示中pos位是1,函数返回true
BTEST
— Bit test function
Description:BTEST(I,POS)returns logical
.TRUE.if the bit at POS in I is set. The counting of the bits starts at 0.
Standard:Fortran 95 and later
Class:Elemental function
Syntax:
RESULT = BTEST(I, POS)
Arguments:
I | The type shall be INTEGER. |
POS | The type shall be INTEGER. |
LOGICAL
ishft参数中shift>0为左移,shift等于0不移位,shift<0为右移
8.135 ISHFT
— Shift bits
Description:ISHFTreturns a value corresponding to I with all of the bits shifted SHIFT places. A value of SHIFT greater than zero corresponds to a left shift, a value of zero corresponds to no shift, and a value less than
zero corresponds to a right shift. If the absolute value of SHIFT is greater than
BIT_SIZE(I), the value is undefined. Bits shifted out from the left end or right end are lost; zeros are shifted in from the opposite end.
Standard:Fortran 95 and later
Class:Elemental function
Syntax:
RESULT = ISHFT(I, SHIFT)
Arguments:
I | The type shall be INTEGER. |
SHIFT | The type shall be INTEGER. |
The return value is of type
INTEGERand of the same kind as I.
8.180 MVBITS
— Move bits from one integer to another
Description:Moves LEN bits from positions FROMPOS through FROMPOS+LEN-1of FROM to positions TOPOS through
TOPOS+LEN-1of TO. The portion of argument TO not affected by the
movement of bits is unchanged. The values of
FROMPOS+LEN-1and
TOPOS+LEN-1must be less than
BIT_SIZE(FROM).
Standard:Fortran 95 and later
Class:Elemental subroutine
Syntax:
CALL MVBITS(FROM, FROMPOS, LEN, TO, TOPOS)
Arguments:
FROM | The type shall be INTEGER. |
FROMPOS | The type shall be INTEGER. |
LEN | The type shall be INTEGER. |
TO | The type shall be INTEGER, of the same kind as FROM. |
TOPOS | The type shall be INTEGER. |
8.35 BIT_SIZE
— Bit size inquiry function
Description:BIT_SIZE(I)returns the number of bits (integer precision plus sign bit) represented by the type of I. The result of
BIT_SIZE(I)is independent of the actual value of I.
Standard:Fortran 95 and later
Class:Inquiry function
Syntax:
RESULT = BIT_SIZE(I)
Arguments:
I | The type shall be INTEGER. |
相关文章推荐
- opencv 一些函数在的头文件
- 我常用的一些ASP自定义函数
- php 处理zip压缩包的一些函数
- 一些常用的JS函数
- 文件操作的一些函数
- 一些LUA函数(转载)
- js函数的一些小细节
- linux下的一些文件操作函数
- Tensorflow一些常用基本概念与函数
- 关于Qt内嵌CEF使用QString::toStdString();函数导致的一些坑
- 一些php项目中比较通用的php自建函数的详解
- 一些字符串及内存操作的函数
- opencv 图像简单逻辑操作汇总与一些常用的函数
- 【Wordpress】以修改文章页面single.php下的评论栏说明一些Wordpress的函数与页面
- 常用的一些函数
- matlab里删除矩阵一些列的函数
- 关于C++的一些细节[五:函数-中级]
- Python的一些内建函数1
- JSON格式简介及一些对应函数
- Python的一些内建函数3