data list-of-variables/ list-of-values/, ...
where the three dots means that this pattern can be repeated.
Here is an example:
data m/10/, n/20/, x/2.5/, y/2.5/
We could also have written this
data m,n/10,20/, x,y/2*2.5/
We could have accomplished the same thing by the assignments
m = 10
n = 20
x = 2.5
y = 2.5
The data statement is more compact and therefore often more
convenient. Notice especially the shorthand notation for assigning
identical values repeatedly.
The data statement is performed only once, right before the execution of the program starts. For this reason, the data statement is mainly used in the main program and not in subroutines.
The data statement can also be used to initialize arrays (vectors, matrices). This example shows how to make sure a matrix is all zeros when the program starts:
real A(10,20)
data A/ 200 * 0.0/
Some compilers will automatically initialize arrays like this but not all,
so if you rely on array elements to be zero it is a good idea to
follow this example. Of course you can initialize arrays to other
values than zero. You may even initialize individual elements:
data A(1,1)/ 12.5/, A(2,1)/ -33.3/, A(2,2)/ 1.0/
Or you can list all the elements for small arrays like this:
integer v(5)
real B(2,2)
data v/10,20,30,40,50/, B/1.0,-3.7,4.3,0.0/
The values for two-dimensional arrays will be assigned in column-first
order as usual.
block data
integer nmax
parameter (nmax=20)
real v(nmax), alpha, beta
common /vector/v,alpha,beta
data v/20*100.0/, alpha/3.14/, beta/2.71/
end
Just as the data statement, block data is executed once before
the execution of the main program starts. The position of the
block data "subroutine" in the source code is irrelevant (as long
as it is not nested inside the main program or a subprogram).