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.5The 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/ endJust 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).