earlier: tar%u ! array section (structure component) tar(1, 1)%u ! component of an array element Arrays intrinsic functions Vector and matrix multiply DOT_PRODUCT Dot product of 2 rank-one arrays MATMUL Matrix multiplication Array reduction ALL True if all values are true ANY True if any value is true. Example: IF (ANY( a > b)) THEN COUNT Number of true elements in array MAXVAL Maximum value in an array MINVAL Minimum value in an array PRODUCT Product of array elements SUM Sum of array elements Array inquiry ALLOCATED Array allocation status LBOUND Lower dimension bounds of an array SHAPE Shape of an array (or scalar) SIZE Total number of elements in an array UBOUND Upper dimension bounds of an array Array construction MERGE Merge under mask PACK Pack an array into an array of rank one under a mask SPREAD Replicate array by adding a dimension UNPACK Unpack an array of rank one into an array under mask Array reshape RESHAPE Reshape an array Array manipulation CSHIFT Circular shift EOSHIFT End-off shift TRANSPOSE Transpose of an array of rank two Array location MAXLOC Location of first maximum value in an array MINLOC Location of first minimum value in an array Pointers Basics Pointers are variables with the POINTER attribute; they are not a distinct data type (and so no 'pointer arithmetic' is possible). REAL, POINTER :: var They are conceptually a descriptor listing the attributes of the objects (targets) that the pointer may point to, and the address, if any, of a target. They have no associated storage until it is allocated or otherwise associated (by pointer assignment, see below): ALLOCATE (var) and they are dereferenced automatically, so no special symbol required. In var = var + 2.3 the value of the target of var is used and modified. Pointers cannot be transferred via I/O. The statement WRITE *, var writes the value of the target of var and not the pointer descriptor itself. A pointer can point to another pointer, and hence to its target, or to a static object that has the TARGET attribute: REAL, POINTER :: object REAL, TARGET :: target_obj var => object ! pointer assignment var => target_obj but they are strongly typed: INTEGER, POINTER :: int_var var => int_var ! illegal - types must match and, similarly, for arrays the ranks as well as the type must agree. A pointer can be a component of