回 帖 发 新 帖 刷新版面

主题:%起什么作用

IF (N < 0) THEN
      OUTPUT_QUANTITY(N)%SOLID_PHASE = .TRUE.
这句话中%什么作用啊?谢谢指点

回复列表 (共3个回复)

沙发

你先说清楚%两边的是做什么的,给的程序太少了。

板凳

Structure Components
A reference to a component of a derived-type structure takes the following form:

parent [%component [(s-list)]] ... %component [(s-list)]

parent
 Is the name of a scalar or array of derived type. The percent sign (%) is called a component selector.
 
component
 Is the name of a component of the immediately preceding parent or component.
 
s-list
 Is a list of one or more subscripts. If the list contains subscript triplets or vector subscripts, the reference is to an array section. 

Each subscript must be a scalar integer (or other numeric) expression with a value that is within the bounds of its dimension.

The number of subscripts in any s-list must equal the rank of the immediately preceding parent or component.
 

Description
Each parent or component (except the rightmost) must be of derived type.

The parent or one of the components can have nonzero rank (be an array). Any component to the right of a parent or component of nonzero rank must not have the POINTER attribute.

The rank of the structure component is the rank of the part (parent or component) with nonzero rank (if any); otherwise, the rank is zero. The type and type parameters (if any) of a structure component are those of the rightmost part name.

The structure component must not be referenced or defined before the declaration of the parent object.

If the parent object has the INTENT, TARGET, or PARAMETER attribute, the structure component also has the attribute.

Examples
The following example shows a derived-type definition with two components:

  TYPE EMPLOYEE    INTEGER ID    CHARACTER(LEN=40) NAME  END TYPE EMPLOYEEThe following shows how to declare CONTRACT to be of type EMPLOYEE:

  TYPE(EMPLOYEE) :: CONTRACTNote that both examples started with the keyword TYPE. The first (initial) statement of a derived-type definition is called a derived-type statement, while the statement that declares a derived-type object is called a TYPE statement.

The following example shows how to reference component ID of parent structure CONTRACT:

  CONTRACT%IDThe following example shows a derived type with a component that is a previously defined type:

  TYPE DOT    REAL X, Y  END TYPE DOT  ....  TYPE SCREEN    TYPE(DOT) C, D  END TYPE SCREENThe following declares a variable of type SCREEN:

  TYPE(SCREEN) MVariable M has components M%C and M%D (both of type DOT); M%C has components M%C%X and M%C%Y of type REAL.

The following example shows a derived type with a component that is an array:

  TYPE CAR_INFO    INTEGER YEAR    CHARACTER(LEN=15), DIMENSION(10) :: MAKER    CHARACTER(LEN=10) MODEL, BODY_TYPE*8    REAL PRICE  END TYPE  ...  TYPE(CAR_INFO) MY_CARNote that MODEL has a character length of 10, but BODY_TYPE has a character length of 8. You can assign a value to a component of a structure; for example:

  MY_CAR%YEAR = 1985The following shows an array structure component:

  MY_CAR%MAKERIn the preceding example, if a subscript list (or substring) was appended to MAKER, the reference would not be to an array structure component, but to an array element or section.

Consider the following:

  MY_CAR%MAKER(2) (4:10)In this case, the component is substring 4 to 10 of the second element of array MAKER.

Consider the following:

  TYPE CHARGE    INTEGER PARTS(40)    REAL LABOR    REAL MILEAGE  END TYPE CHARGE  TYPE(CHARGE) MONTH  TYPE(CHARGE) YEAR(12)Some valid array references for this type follow:

  MONTH%PARTS(I)           ! An array element  MONTH%PARTS(I:K)         ! An array section  YEAR(I)%PARTS            ! An array structure component (a whole array)  YEAR(J)%PARTS(I)         ! An array element  YEAR(J)%PARTS(I:K)       ! An array section  YEAR(J:K)%PARTS(I)       ! An array section  YEAR%PARTS(I)            ! An array sectionThe following example shows a derived type with a pointer component that is of the type being defined:

  TYPE NUMBER    INTEGER NUM    TYPE(NUMBER), POINTER :: START_NUM => NULL( )    TYPE(NUMBER), POINTER :: NEXT_NUM => NULL( )  END TYPEA type such as this can be used to construct linked lists of objects of type NUMBER. Note that the pointers are given the default initialization status of disassociated.

The following example shows a private type:

  TYPE, PRIVATE :: SYMBOL    LOGICAL TEST    CHARACTER(LEN=50) EXPLANATION  END TYPE SYMBOLThis type is private to the module. The module can be used by another scoping unit, but type SYMBOL is not available.

3 楼

有可能是自定义数据类型中的某一个元素。详细请见彭国伦书中第66页的倒数第二 和第三行

我来回复

您尚未登录,请登录后再回复。点此登录或注册