Jun 12, 1984 - The grid does not need to be filled entirely with data, and the grid mesh may be .... [3"P + i(om +/3v)][3"p + i(a'u +/3'v)] ". (ll). For some practical and ... method valuable only on medium or big computers. (15) Now, both the ...
Computers & Geosciences Vol. I 1, No. 5, pp. 553-588, 1985
0098-3004/85 $3.00 + .00 © 1985 Pergamon Press Ltd.
Printed in the U.S.A.
A COMPUTER PROGRAM TO PERFORM
TRANSFORMATIONS OF GRAVIMETRIC AND AEROMAGNETIC SURVEYSt D. GIBERT Drpartement des Sciences Physiques de la Terre, Universit6 Paris VII, 4 place Jussieu, 75005 Pars, France and A. GALDEANO Institut de Physique du globe de Paris, Universit6 Parrs VI, 4 place Jussieu, 75005 Paris, France
(Received 12 June 1984; accepted 5 May 1985) Abstract--In this paper, we present the main equations concerned with the transformations of potential field data distributed on a regular grid. The grid does not need to be filled entirely with data, and the grid mesh may be rectangular. Accurate procedures of convolution and data interpolation and extrapolation are described. A FORTRAN IV computer program, termed TRSMAP, is described and a detailed listing is given.
Key Words: Gravimetry, Magnetism, Map transforms, Potential methods INTRODUCTION The interpretation of magnetic or gravimetric data is easier when the geophysicist disposes of transformed maps. The object of these maps is to show more clearly the details that do not appear on the initial map. For example, a vertical differentiation may separate the individual anomalies of close structures. These transformations may be performed either with diagrams that may be superimposed on the initial data grid (Baranov, 1957) or by optical methods. MATHEMATICAL BACKGROUND The aim of the method is based on the harmonic properties of potential fields outside the sources. If there is no source in the upper one-half space we have A[A(x,y,z)]=0
with
z>0,
(1)
where A(x, y, z) may be either the gravimetric field or the magnetic one. If A(x, y, 0) is known everywhere, we can continuate A in the upper one-half space. The problem of the determination of A(x, y, z) (z > 0) from A(x, y, 0) is termed the Dirichlet's problem. Its solution is obtained through a Green's integration (e.g. Schwartz, 1950) whose expression, in a rectangular coordinate system, is
Equation (2) is the so-called "upward continuation equation" of the anomaly function, and we may write it in the form of a convolution product
A(x, y, z) = A(x, y, O)*P~(x, y),
(3)
with
Pz(x, y) = 2r(x 2 +
Z -l/'2 + z2)3/2 .
(4)
Numerically, equation (3) may be used either directly in the space or indirectly in the wavenumber space in which (3) becomes simply
dXu, v) = do(u, v)P~(u, v),
(5)
where Az(u, v), Ao(u, v), and/Sz(u, v) are respectively the bidimensional Fourier Transforms of A(x, y, z), A(x, y, 0) and Pz(x, y). If we define the Fourier Transform of a function g(x, y) by +oo
v) = f f
g(x, y)exPt-2ir(ux + vy)]dx, dy, (6)
and the inverse Fourier Transform by +oo
A(x, y, z)
z ff
= ~
g(x, y)= f f e(.. v)expt2i (ux + vy)ld..do, [(X - - ~)2 ..}_ ( y - - ,0)2 q_ Z213/:2 d ~ " d,0.
(7)
(2) with i 2 = - 1 we learn that (Bracewell, 1965) /~(u, v) = exp(--27r0z)
%Contribution IPGP no. 838. 553
with
02 = U 2 _~_ ,/)2.
(8)
D. GIBERTand A. GALDEANO
554
This upward continuation operator permits the calculation of the anomaly A at a level h > 0. We can see that it attenuates considerably the high frequencies. Whereas (2) has no sense if z < 0, (5) may be used to carry on a downward continuation. However, this continuation becomes incorrect if there are some sources above the level of continuation. This formalism allows us to define other operators. We will not recall the calculations which can be determined in a number of publications (Baranov, 1957; Le MouEl, 1969; Gald6ano, 1974). The expressions of these operators are: --vertical differentiation of order n: /),(u, v) = (-27tO)"
(9)
--oblique differentiation of order n in the direction of the unit vector 4(a,/3, 3"):
ODdu, v) = [-27r(3"p + i(otu +/3v))]"
(10)
--reduction to the pole with (a,/3, 3') and (a',/3', 3") the direction cosines of the normal field vector and of the magnetization one: p2
RP(u, v) =
[3"P + i(om +/3v)][3"p + i(a'u +/3'v)] "
(ll) For some practical and specific instances we defined some operators such as the "rest" (Gald~ano, 1974), or the reduction to the equator and the inverse equivalent layer filters (Gibert, 1982) whose expressions are: --"rest" evaluation:
,z.(U, v)= ,z(u, v ) '
v)
j=,j!
(12)
--reduction to the equator:
RE(u, v) =
-(c~"u +/3"@ [3"0 + i(au +/3v)][3"p
+
i(a'u +/3'v)]
'
(~3)
where a" and/3" are the direction cosines of the north direction. --inverse layer (gravimetry) with p = depth of the top of the layer, e = thickness of the layer and G = 6.6726.10-t1N m 2 kg-2:
1G(u, v) =
p exp(27rpp) G [1 - exp(-27rpe)] "
(14)
--inverse layer (magnetism, reduction to the pole made): -2 exp(2~rop) IM(u, v) = - - . go [1 - exp(-2rpe)] ' with taro= 47r- 10-7 H/m.
(15)
Equation (5) shows cleady that one may combine the elementary operations which are defined. For example, we can determine easily the expression of the operator which performs the vertical differentiation of the downward continuation of the anomaly. We have explicitly
G(u, v) = 15~(u, v)l)t(u, v).
(16)
CONVOLUTION OR FAST FOURIER TRANSFORM (FFT) The practical computation of transformed maps may be done using either (3) or (5). The last selection is usual because it involves simply a multiplication and the computation of two Fourier Transforms of the maps. The FFT algorithms make these calculations fast with a digital computer. However, some pitfalls lie hidden within this method. Generally, the area of the survey is not rectangular and it may contain gaps (Fig. 1). The computation of the FFT of such a distribution is not easy to carry through successfully. Another problem arises by the fact that the efficient FFT algorithms may need the numbers of rows and lines of the data grid to be an integer power of 2. The initial data may need to be interpolated on a regular grid. If the distance between the measurement points and the nodes of the grid is too large, there will be a distortion of the interpolated data. A global method such the FFT one will propagate the distortion throughout the map and, for example, an interpolation artefact in the upper-right corner of the initial map may affect the lower-left corner of the transformed map. Another problem is the impossibility 'to transform only a fragment of the initial map. Finally, the theoretical elaborations of the directional operators such as RP(u, v) make the assumption that both the normal field vector and the magnetization one have constant directions all over the map. In fact, this is not true if the area of investigation is too large and a global method is not recommendable in the situation of relatively heterogeneous maps. All these reasons led us to compute the transformed maps by using directly the convolution equation
At(x, y) = A(x, y, O) • W(x, y),
(17)
where W(x, y) is a filter whose Fourier Transform ¢~(u, v) may be any combination of the elementary operators defined from equations (8) to (15). It is clear that this method is slower than the FFT one, but it is easier to utilize because it is more local and then the distortion propagation becomes small. For a long time, the slowness of the computers had made the utilization of this method valuable only on medium or big computers. Now, both the rapidity and the low prices of the minicomputers (16 and 32 bit microprocessors) make this method competitive and interesting because of its good precision.
Computer program to perform transformations
~y"
555
+ N
\
YORI
X" I i i
t
~
1
1
t
N o d e w i t h measurement DOtal
N o d e w r t h o u t me~,urttrnent DOInt ( - Test value)
Figure 1. Schematic example of aeromagnctic survey. Observation points are distributed along profiles which contain gaps. Grid which contains both actual and factitious points is represented. Encircle point is taken to be both (1, 1) point of grid and origin of local reference systems x-y. This point is positioned in cartographic reference system X-Y with XORI, YORI, and Az.
Then equation (18) becomes
THE CONVOLUTION METHOD The problem is to give a good estimation of the convolution equation (17). Furthermore, the area of integration is finite and the data are discrete values. If the sampling intervals are respectively Ax and Ay in the x and y directions, a rectangular integration approximation of equation (17) is given by +p
At(O, O) = AxAy ~
+q
+p
At(O, O) = AxAy ~
+q
~ A~jW~.
(19)
k ~ - p l=-q
In a similar way, we have from equation (7) +oo
~ A(kAx, IAy)W(kAx, lay).
k=-p l=-q
W(x, y) : f f G(u, v)exp[2hr(ux + vy)]du.dv, (20)
(18) The factors Ax and Ay ensure conservation of integrated area between equations (17) and (18) which are identical when p ---, oo, q ---, oo and Ax ---. 0, Ay ~ 0. Let us make the following changes in the notations
A(kAx, lay) ---*Akt and
W(kAx, lay) ~ Wkl.
and a finite rectangular integration approximation of equation (20) is +p
Wkl = AuAv ~
+q
~ Cr(rAu,sAy)
r=--p s=--q
× exp[2iTr(rAu, kAx + say. lay)],
(21)
556
D. GIBERT and A. GALDEANO
A
B
.
D
......
~
.
C
.-
,
~~_~
. t
"'~-..
Figure 2. W~ coetficients for different operators; (A) upward continuation (z = - A y , central value = 0.073404); (B) first-order vertical derivative (central value = 3.7259); (C) downward continuation (z = Ay, central value = 120.92); and (D) reduction to pole (central value = 0.72319).
Computer program to perform transformations TAPERING OF THE DATA
by making the following substitutions
M = 2p + 1 Au= l/MAx N=2q+
1
A v = 1/NAy
4~= 2rc/M, ~k= 2or~N,
d(rAu, say) ~ d~, equation (21) takes the simpler form 1
1
+P
+q
s~q d,,exp[i(r~k+ s~/)],
Wk' - AxA------yMN r~,
(22)
and substituting of (22) into (19) we get 1
At(O , O)
= "~
+P
+q
+P
+q
~
Z
E
~ Akt(~,sti(r4~k+s~l)].
k--p I=-q r=-p s=-q
(23)
Remark Because of the duality of the space and the wavenumber domain, we can see that the substitution of (22) into (19) conduces to the vanishing of the factors Axhy and l/A.rAy which occur respectively in (19) and (22). This allows us to make the computations with the simplified formulae: +p
At(O, O) = ~
+q
~ AktWkt
(24)
k=-p I=-q 1
Wkl = ~
+P
557
+q
~ ~ Gr,exp[i(r¢bk + sap/)]. r=-p s=--q
(25)
Between the two steps of computation corresponding to equations (24) and (25), we must insert the step which consists of the data tapering. Its object is to reduce the edge effects. As we can see in Figure 2, the magnitude of the Wktfilter coefficients decreases rapidly as one wanders from the middle to the periphery. So, the edge effects are important only in the subperipherical area of the survey. However, it is necessary not to introduce high frequencies when extrapolating the data. Such an introduction would be dramatic when using decoalescent operators such as/Sz(u, v) (downward) or/)n(u, v). A good extrapolation is made if the spectrum of the extrapolated data does not differ too much from the spectrum of the actual data. There are several methods to do that: polynomial extrapolation, symmetrization, or extrapolation with a prediction filter. We have selected the last method, using recursive filters derived from Burg's Maximum Entropy Spectral Analysis algorithm (MESA; Burg, 1975). The main problem when using this method is to select the ratio between the number of the prediction filter coefficients and the number of actual data taken to calculate those ones. Some empirical results (Fig. 3) show us that this ratio may be selected approximatively between 0.1 and 0.3. The program presented here can perform both such an extrapolation margin if wanted and also fills the eventual gaps in the initial data grid (Fig. 4B). For this program, the selected ratio is 0. I.
IOOnT
#,,~
5 Coeff ................
I0 Coeff
...........
2 5 Coeff.
..............
30Coeff 35Coeff
15 C o e f f ....
20 Coeff
..................
40Coeff
Figure 3. Extrapolation of actual segment composed of 100 actual data has been performed with prediction filters of variable lengths. All those filters have been computed by using entire set of actual data. So, ratio between number of filter coefficientsand number of data ranges from 5 to 40%. One can see that all extrapolated segments converge towards 0.
D. GIBERTand A. GALDEANO
558
DATA PREPARING JYI
{~,}
JYF
NCOL
IXF~
NLIG
B
!!!!i
!ii
g g i t L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
L
.
.
.
.
(1) ~
.
.
.
.
.
.
.
As written here, the data must be interpolated on a regular rectangular grid before being processed with our program. The reader may make his selection among several methods; in the situation or aeromagnetic surveys, the actual flight plan does not differ much from a regular grid; and performing the interpolation with a method such as that proposed by Bhattacharyya (1969) using interpolation functions as with splines (Campos and others, 1983) or others (Akima, 1970) is not too difficult. In the instance ofgravimetric surveys, the interpolation may be more difficult because of the irregular and heterogeneous distribution of the data points. In such a situation, more sophisticated interpolation methods such as krigeage (Haas, 1976) or others (Corbyn, 1971) may be used. Our program requires the grid mesh to be rectangular or square. So, we have selected the x direction parallel to the shorter side of the mesh and positive Southward as explained in Figure I. The y axis is positive in the easterly direction. All the distances must be provided in kilometers but a conversion is made so that the larger side of the mesh is unity. The different parameters that characterize the survey must be grouped in a five line heading of the data file. An extensive description of this formatted heading is given in Appendix 1. This heading is followed by the data grid stored columnwised (such as in FORTRAN) in a binary form. Some trouble may occur if the computer does not accept both formatted and unformatted data in the same file. This problem can be solved easily by replacing all the READ(iunit) and WRITE (iunit) statements by READ(iunit,ifmt) and WRITE(iunit,ifmt) where iunit is a FORTRAN unit number and ifmt a FORMAT label. It is clear that such a modification will slow down the input/output procedures. As these procedures require a full grid, we have selected to fill the gaps with a particular value termed TEST whose magnitude is out of range of those of the actual data (Fig. 4A).
.
.
.
.
.
.
.
.
.
.
.
(3)~
.
.
.
.
.
.
.
.
.
.
.
.
.
PROGRAM DESCRIPTION .
.
.
.
-d
(S)~ ] r-'~"
Figure 4. (A) Configuration of initial data grid which contains both actual data and gaps. Dashed line encloses area to be transformed by TRSMAP. (B) Configuration of grid created by subroutines JUPE2, CHTROU, CALCUL, and PREDI, using recursiveprediction filters. Grid is used to perform convolution all over area to be transformed. (C) Solid heavy line encloses grid which will be restituted at end of convolution. Heavy dashed line shows limits of initial grid. (1) = area filled with actual data; (2) = area filledwith factitious value TEST; (3) = gaps filled with extrapolatedand interpolated values computed with prediction filters;(4) = optional margins filled with extrapolated values (edge effect reduction); (5) = area filled with transformed data.
The program presented here is conversational. It has been run for several years on a PRIME 350 computer provided with a virtual memory which allows the usage of bit arrays such as CARTI(110000). As shown in Figure 5 the program is divided in three main parts: (i) the operator computation, (ii) the data interpolation and extrapolation, and (iii) the convolution. All the statements are in standard FORTRAN IV except the OPEN$A subroutine used to open the files. This subroutine can be replaced easily by the FORTRAN 77 OPEN statement or another equivalent specific subroutine. We now will explain each of the three parts as defined. For a full description of the different subroutines, the reader must consult Appendix 2.
Description of the operator computation This step can be optional if the filter, which is going to be convolved with the data, has been stored previ-
Computer program to perform transformations
559
MAIN PROGRAM:
conversational part
FII,TRI
~:onversational
or
1 [
TFFILT First main part :
~perator of type !
filter computation
I o!
I
I r reputes Wrs Hc° utes %,
Called if the f i l t e r is read in a binary f i l e
Reads the data in a binary f i l e MAIN PROGRAM : computational and subroutines calling parts
I JUPE2
CHTROU : finds gaps I H CALCUL fills gaps
Second main part :
PREDI : computes] data interpo.lation prediction f i l t e r ~ and extrapolation /
VO~ : operator of type 11
Third main part : convolution P0 : operator of type 2
ECLEC
H
DBOOK
I
I
Writes the filter coefficientsin a binary file
Writes the f i l t e r coefficients in a decimal f i l e
Figure 5. Main calling sequences of TRSMAP and interactions between subroutines. Different sequences are performed from top to bottom and computations are made after conversational part of main program has been performed.
ously in a binary file (Fig. 5). After the characteristics of the filter have been defined in the conversational part, two situations are possible according to the symmetry properties of the operator. In the first instance, if G~ is a radial function, only one quadrant of Wkl is computed by the subroutines FILTRE, FILTR1, TFFILT, and the type 1 radial functions GPROL (equation (8)), GDERI (equation (9)), RESTE (equation (12)), GINV (equation (14)), and AMINV (equation (15)). In the second instance, if (~,~ also contains directional elementary functions of type 2 such as RPOLE (equation (l 1), REQUA (equation (13)), and INTGR (equation (10) with n < 0), the symmetry properties of the filter are different and the computation is performed by the subroutines POLEQ, POLEQ1,
and TFPOEQ. This split allows an optimal algorithm utilization and a great gain of time. All the computations are performed using DOUBLE PRECISION variables to ensure the best estimation of the discrete Fourier Transform (equation (25)).
Description of the data interpolation and extrapolation As written here, the initial grid may contain gaps filled with a facticious value termed TEST. Although the convolution can be performed with such gaps, we preferred to fill them with virtual interpolated values. The effect of such a procedure is to create a complete grid whose dimensions are those of the initial grid. The
560
D. GIBERT and A. GALDEANO 50°oo
49°00 -7°00
-6°00
48=00 -5°00
- 4°00
47°00 - 3°00
-2°00
-
46°00 1°00 " "
0'00 4 45°cc
/
50°OCt
]
,&/ A
O°c~
)
-9't~
-10'~J
-2°0o 48%Xt
45°00
-11%C -3*oo
47~ [ 42°00
12°00 | _ 4°00
46°001" 5 - 5°00
4559o
44°0o
45=00
42°oo
Figure 6. Example of transformation. (A) Total field anomaly map before transformation. Grid contains many gaps and is composed of 63 lines and 85 columns.
50°00
49=00 -7°00
-6°00
4,E1°00 -4°00
-5°00
47°00 -5°00
-2°00
46°O0 -I°O0
C,'00 45°00
50=0~ - 8"t:4
CP00
-9"04
44°oo -t°oo
49"CX)
-~O"aat -2°00
48"ix:!
45°00
-11o0ol -3°00
4700o I 42°00
I
,-4%0
12°ooi
46"00!
-~2~
-~t'00 45*oo
Jo.00
' 44"00
-~'00
-~o' 45°00
J.00
-~.00
- 5°00
42"00
Figure 6. Example of transformation. (B) Pseudogravimetric integration of anomaly. Extrapolated margins have been used to reduce edge effects.
I
Computerpro~am m pefformtrans~rmations NLIG= 63NCOL= 85IDEC= OJDEC= OGOLFE GASCOGNE 1969 UTM PART - 6 . EC.L=IO.OOEC.C=IO.OOVID= 8OO.OAZ= 41°OXORI=-O.33595103E 04YORI= 0.4444529$E 04 ALTITUDE= O.50ODECNO= - l l . S D I P N O = 6~,O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
561 !
2 ~j
a a a m a a a a a a a a a a a a a ~ a ~ a a ~ a ~ a a D u m ~ a u ~ D D ~ D o ~ D ~ a ~ a ~ a ~ a u a a a a a a u a a a a ~ a u ~ u
4
ANOMALIE DU CHAMP TOTAL
5 B
7 8
DATA GRID STORED COLUMNWISED (BINARY)
9 tO I1 12
Figure 7. Heading of file processed in example.
conversational part allows the user to reduce the edge effects by demanding an additional data tapering. In this situation, the initial data grid is augmented with margins o f p points in the x direction, and with ones ofq points in the y direction (see equation (24)). Figure 4 gives a summary of these procedures performed by the subroutines JUPE2, CHTROU, CALCUL, and PREDI.
Description of the convolution This is the last main part of the program. If the operator contains elementary functions of type 2, the convolution is performed by the subroutine CONVPO. If the operator contains elementary functions of type 1 only, the termed convolution subroutine is CONVOL. Both CONVPO and CONVOL have the same arguments and the difference rests in the symmetry properties of the operators. The conversational part asks the user for IXI, IXF, JYI, JYF, INCX, and INCY. The first four parameters define the rectangular area which will be transformed (Fig. 4A). They are point subscripts and it is supposed that the origin of the grid is the point (1, 1). The last two parameters define the effective sampling used for the convolution. For example, if INCX = 2, the convolution will be performed by taking an operator whose sampling interval Ax will be twice that of the data. This possibility permits both to reduce the anisotropy between the x and y directions when the sampling intervals are too different and to evaluate the homogeneity of the calculations due to the so-created undersampling. It must be kept in mind that such an undersampling, if too severe (INCX or INCY large), may create aliasing effects. If severe undersamplings are necessary it is advisable to add a lowpass filter in TRSMAP.
CONCLUSIONS Figures 6A and 6B give an example of a transformation performed on a map with many gaps. About 50% of the grid are filled with the TEST value (Fig. 6A). A pseudogravimetric integration of this map is shown in the Figure 6B. The program TRSMAP described here has been formed to permit easy expansions such as the instal-
lation of other filtering operations (e.g. bandpass, directional. . . . ). The task to do that consists of adding questions in the subroutine CALCOP (FORMAT number 1003), labels in the GO TO (line 350) and functions or subroutines corresponding to the transfer functions of the added operations. The heading, as described in Appendix l, may be modified. It contains more informations than needed by TRSMAP because our films are processed by many other programs of our software (Fig. 7). The adaptation of TRSMAP on a computer without a virtual memory has been done. It needs the programmer to be well informed on both how our program works and which are the computer input/output capabilities that can supply the lack of a virtual memory.
REFERENCES
Akima, H., 1970, A new method of interpolation and smooth curve fitting based on local procedures: Jour. ACM v. 17, no. 4, p. 589-602. Baranov, V., 1957, A new method for interpretation of aeromagnetic maps: pseudo gravimetricanomalies:Geophysics, v. 22, no. 2, p. 359-383. Bhattacharyya, B. K., 1969, Bicubic spline interpolation as a treatment of potential field data: Geophysics v. 34, no. 3, p. 402-423. Bracewell, R., 1965, The Fourier Transform and its applications: McGraw-Hill, New York, 381 p. Burg, J. P., 1975, Maximum entropy spectral analysis:unpubl. doctoral dissertation, Stanford Univ., 168 p. Campos, J. O., and others, 1983, Applications of bidimensional spline functions to geophysics: Geophysics, v. 48, no. 9, p. 1269-1273. Corbyn, J. A., 1971, A method for interpolation and extrapolation of potential field data: Geophysical Prospecting, v. 19, 698-717. Galdrano, A., 1974,Traitement des donnres arromagn&iques: m&hodes et applications: unpubl, doctoral dissertation, Universit6 Paris VI, 153 p. Gibert, D., 1982, Transformation du lev6arromagn&ique de la Rrpublique de Djibouti: unpubl, masters thesis, lnstitut de Physique du Globe de Paris, Univ. Paris, 69 p. Haas, A. G., 1976,Krigeageappliedto geophysics:Geophysical Prospecting, v. 24 p. 49-69. Le Mou~l, J. L., 1969, Sur la distribution des 616ments magnrtiques en France: unpubl, doctoral dissertation, Universit6 Paris Vl, 154 p. Schwartz, L., 1950, Throrie des distributions: Hermann Ed. Paris, 418 p.
D. GIBERT and A. GALDEANO
562 APPENDIX
25-31
1
Description o f the heading The goal of this heading is to provide the binary file with general legible informations about the survey. This permits an immediate identification of the data file, and supplies our programs with the fundamental parameters of the survey. So, this heading contains more informations than needed by TRSMAP. The formatting is as follows: parameters Line 1: columns identifications Format 06-10 16-20 26-30 36-40
41 -
80
number of lines. number of columns. offsets of the first point of the matrix relatively to the origin of the reference system. title of the survey.
35--40 46-60 66-80
factitious value (TEST). azimut of the columns (positive eastward). coordinates of the origin of the local reference system in the cartographic system
FT.I
F6.1 E15.8 E15.8
Line 3:
I5 I5
10-16
41-80
altitude of the measurement plane. declination of the normal field. inclination of the normal field. unused by TRSMAP
I5
23-28
01-80
unused by TRSMAP.
01-80
a line of comments.
35--40 I5 10A4
F7.3 F6.1 F6.1
Line 4:
Line 2: 06-10 16-20
sampling interval in the x direction (km). sampling interval in the y direction (km).
F5.2 F5.2
Line 5:
Figure 7 shows an example of such a heading.
20A4
563
Computer program to perform transformations APPENDIX 2
Program listing I
2 3 PROGRAM TRSMAP
4
THIS PROGRAM COMPUTES TRANSFORMED MAPS FROMMAGNETIC OR GRAVIMETRIC DATA. THE INPUT DATA SHOULD BE GIVEN ON A REGULAR RECTANGULAR GRID. THE PROGRAM HAD BEEN WRITTEN ON A PRIME 350 COMPUTER. IT IS NECESSARY TO MODIFY SOME SPECIFIC PRIME SUBROUTINES USED TO OPEN INPUT/OUTPUT DATA FILES (CALL OPEN$A FOR EXAMPLE). ONE CAN TRANSLATE THIS IN FORTRAN 77 USING THE "OPEN" INSTRUCTION.
A.GALDEANO
AUTHORS
B
D.GIBERT
INSTITUT DE PHYSIQUE DU GLOBE DE PARIS UNtVERSITE
C
"PIERRE ET MARIE CURIE"
4 PLACE JUSSIEU
--
75005
FRANCE
PARIS
--
TOUR 2 4 - 1 4
==============~=================~============~==================
C
IMPLICIT DOUBLE PRECISION ( A - H . O - Z ) INTEGER N O M f ( 2 0 ) , N O M 2 ( 2 0 ) , N O M 3 ( 2 0 ) , N O M 4 ( 2 0 ) INTEGER NOMS(2D),NCWVI6(20).NOM7(20) INTEGER T I T R E ( I O ) , I T E R V ( 8 2 8 3 ) REAL CARTt(IIOOOO),TEST.XOR[.YOR[ DIMENSION W ( 5 O O 4 ) , Z D N E ( t O O O I ) , I N D I C ( t O ) COMMON /TUB/CART4 /TEB/W /CMZONE/ZONE LMES=I [LEC=I LUN|T4=5 LUNIT2=6 * ~ o w ~ e e ~ e e ~ v e e o * v ~ , w e t * t ~ t ~
• ~
CONVERSATIONALPART t
v
v
l
~
I
~
=
~
e
e
e
t
e
e
*
l
w
~
e
• e
e
e
e
WRITE(LMES.IO00)
1000 FOF~VIAT(IOX.'PLEASE. SELECT ONE O P T I O N , ' . / . 1 2 X . 8 ' I =- COMPUTATION OF A FILTER O N L Y ' . / , 1 2 X . B ' 2 =, READING OF A FILTER IN A F I L E AND CONVOLUTION',/.12X. B ' 3 =- COMPUTATION OF A FILTER AND C O N V O L U T I O N ' , / / ) READ(ILEC,,) INDIC(1) GO TO ( 3 . 2 , 2 ) , t N D [ C ( I ) INPUT DATA FILE OPENING ON THE LUNITI HEADFILE DECODING AND TYPING 2 WRITE(LMES, IO01) I001 FORIV~T(5X.'MAP BINARY F I L E N A M E , ' )
FORTRAN UNIT
5 6 7 8
9 I0 II 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 .31 32 33 54 35 36 37 38 39 40 4t 42 45 44 45 46 47 48 49 5O 51 52 55 54 55 56 57 58 59
564
D. GIBERT and A. GALDEANO REAO(ILEC,IO02)
NOM2
SPECIFIC PRIME SUBROUTINE THIS SUBROUTINE OPENS A FILE SUCH THAT: INTS(1) => REAOONLY OPENING NOM2 => FILENAME INTS(8O) => MAXIMUM LENGTH OF THE NAME IS 80 CHARACTERS INTS(LUNIT]-4) => THE FORTRAN UNIT NUMBER IS LUNITI CALL OPEN$A(INTS(1),NOM2,1NTS(80),INTS(LUNITI-4)) READ(LUNITI,IO03) NLIG,NCOL,IDEC,JDEC,TITRE,DX,DY,TEST,AZIMLI, &XORI,YORI,ALT,DECNO,DIPNO,NOM7 1003 F O R M A T ( 4 ( 5 X , I 5 ) , l O A 4 , / , 2 ( 5 X , F 5 ~ 2 ) , 4 X , F 7 o I , 3 X , F G . I , 2 ( S X , E 1 5 ° 8 ) &,/,gX,FTo3,6X,F6.I,BX,F6°l,//,20A4) W R I T E ( L M E S , I O 0 4 ) TITRE,NOM7,NCOL,DY,AZIMLI,NLIG,DX,ALT,TEST, &OECNO,DIPNO 1004 F O R M A T ( / / / / I O X , ' T I T L E OF THE MAP TO BE PROCESSED:' &,///,12X,46(IH~),/,12X,IH~,44X,IH~,/,12X,1H~,2X,tOA4,2X,IH~,/, gI2X,IH~,44X,IH~,/,I2X,46(IH~),//,IOX,'SUB-TITLEz',//, &IX,20A4,/, ~5X,'THIS SURVEY IS COMPOSED O F . ' , I 5 , ' FLIGHT L I N E S ' , / , &3OX,'THE INTERVAL BETWEEN TWO LINES I S ' , F 5 o 2 , ' KM',/, ~30X,'AZIMUT OF LINESs',F6.I,'DEGREES',/, &3OX,'EACH LINE COUNT',I5,' POINTS SPACED B Y ' , F 5 o 2 , ' K M ' , / , &3OX,'ALTITUDE (ABOVE SEA LEVEL):',FT.3,'KM',/, &/,5X,'THE LACK VALUE I S ' , F 8 o O , / / , &SX,'NORMAL FIELD PARAMETERS: DECLINATION = ' , F 6 o i , / , &31X,'INCLINATION = ' , F 6 . I ) GO TO ( 3 , 7 , 3 ) , I N D I C ( 1 ) QUESTIONS ABOUT THE FILTER FILES 3 INDIC(2)=IYESNO('FILTER BINARY F I L E ' , I B , L M E S ) IF(INDIC(2).EQoO) GO TO 4 WRITE(LMES,IOO5) 1005 F O R M A T ( I O X , ' F I L E N A M E = ' , / ) R E A D ( I L E C , I O O 2 ) NOM5 WRITE(LMES,IOOG) 1006 F O R M A T ( I O X , ' E N T E R A LINE OF C O M M E N T S : ' , / ) R E A O ( I L E C , I O O 2 ) NOMI 4 INDIC(3)=IYESNO('FILTER DECIMAL FILE ',2O,LMES) IF(INDIC(3)oE8oO) GO TO G IF(INDIC(2)oNEoO) GO TO 5 WRITE(LMES,IO06) R E A D ( I L E C , I O 0 2 ) NOMI 5 CONTINUE WRITE(LMES,IO05) R E A D ( I L E C , I O 0 2 ) NOM6 6 IF(INDIC(1).EQol) GO TO 13 GO TO 8 C READING THE F I L T E R BINARY F I L E C C 7 WRITE(LMES,IOOT) 1007 FORMAT(IOX,'FILTER FILENAME:',/) READ(ILEC,IOO2) NOM4 1002 FORMAT(2OA4) C SPECIFIC PRIME SUBROUTINE C C
60 GI 62 63 64 65 66 G7 G8 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 9O 91 92 93 94 95 9G 97 98 99 100 101 102 105 104 105 10G 107 108 109 ttO ill 112 tt3 114 115 11G tt7 118 119
Computer program to perform transformations C C C C C
THIS SUBROUTINE OPENS A FIbE SUCH THAT: INTS(1) => REAOONLY OPENING NOM4 : > FILENAME INTS(80) => MAXIMUM LENGTH OF THE NAME IS 80 CHARACTERS - INTS(LUNIT2-4) => THE FORTRAN UNIT NUMBER IS LUNIT2 CALL OPENSA(INTS(1),NOM4,1NTS(80),INTS(LUNIT2-4)) REAO(LUNIT2,1008) INOIC(5).M,N,NOMS 1008 F O R M A T ( 2 4 X . 1 2 . 1 0 X , 1 5 , 3 X , 1 5 , / , 2 0 A 4 ) WRITE(LMES,IO09 M,N,NOM3 1009 FORMAT(IOX,'THE SIZE OF THE FILTER I S : ' , 1 5 , ' X ',15,/,20A4) 8 I N O I C ( 4 ) = I Y E S N O 'DATA 8 0 R O E R I N G ' , I 4 , L M E S ) WRITE(LMES,IOIO I 0 1 0 FORMAT(IOX,'ENTER THE CONVOLUTION P A R A M E T E R S : ' , / , I O X , ~'IXI,IXF,JYI,JYF,INCX,INCY',/) READ(ILEC,~) IXI,IXF,JYI,JYF,INCX,INCY WRITE(LMES,IOII) 1 0 1 1 F O R M A T ( I O X , ' O U T P U T BINARY F I L E N A M E : ' , / ) REAO(ILEC,IO02) NOM3 WRITE(LMES,IO08) READ(ILEC.IO02) NOM7 9 CONTINUE C C C
C C C C
• ~
COMPUTATIONAL PART
COMPUTATION
OF THE FILTER WITH CALCOP
IF(INOIC(1)oEQo3) ~CALL C A L C O P ( L M E S , I L E C , D X ~ I N C X , D Y m l N C Y , D E C N O , D I P N O , A Z I M L I , gM,N, INDIC,W,ZONE) C C C
REAOING THE FILTER BINARY FILE IF(INDIC(1)oNEo2) IF(INDIC(5)oEQo3) IF(INDIC(5)°EQol) IF(INDIC(5)oEOo2) I0 ENO FILE LUNIT2 11 CONTINUE
C C C
GO TO 11 GO TO I0 CALL E C L E C ( W . ( M + I ) / 2 , ( N + I ) / 2 , L U N I T 2 . - I ) CALL E C L E C ( W , M , N , L U N I T 2 , - I )
COMPUTATIONOF FUNOAMENTAL SUBSCRIPTS LXP=(M+I)/2 KYP=(N+I)/2 IOECAL=O JOECAL=O IF(INOIC(4)oEQoO) GO TO 12 IDECAL=LXP-I JOECAL=KYP-I 12 CONTINUE NPX=NLIG+2~IOECAL NPY=NCOL+2~JOECAL WRITE(LMES,I012)
C C C
REAOINGTHE INPUT OATA FILE
565 120 121 122 123 124 125 126 127 128 129 IS0 1S1 IS2 13S 1S4 1S5 1S6 137 1S8 1S9 140 141 142 14S 144 145 146 147 148 149 150 151 152 15S 154 155 156 157 158 159 180 1GI 162 1BS 16,4 165 166 167 168 169 170 i71 172 173 174 175 "76 177 178 179
D. GIBERT and A. GALDEANO
566
1012 FORMAT(IOX,'READING THE D A T A ' ) CALL L E C T U R ( C A R T I , N P X , N P Y , I D E C A L , J D E C A L , T E S T , L U N I T I ) END F I L E L U N I T I
TAPERING THE DATA WRITE(LMES,IOI3) 1013 FORMAT(IOX,'TAPERING THE DATA') CALL J U P E 2 ( C A R T 1 , N P X , N P Y , Z O N E , T E S T , I T E R V , L M E S )
OPENING OF THE OUTPUT BINARY F I L E ON THE LUNIT2 FORTRAN UNIT WRITING THE 5 LINES HEADFILE
SPECIFIC PRIME SUBROUTINE THIS SUBROUTINE OPENS A FILE SUCH THATs INTS(2) => WRITEONLY OPENING NOM3 => FILENAME INTS(80) :> MAXIMUM LENGTH OF THE NAME IS 80 CHARACTERS INTS(LUNIT2-4) :> THE FORTRAN UNIT NUMBER IS LUNIT2 CALL OPEN$A(INTS(2),NOM3,1NTS(80),INTS(LUNIT2-4)) NPXNEW=IXF-IXI+I NPYNEW=JYF-JYI+I IOEC=IXI-I÷IOEC JOEC=JYI-I+JOEC WRITE(LUNIT2,1O14) NPXNEW,NPYNEW.IOEC,JOEC,TITRE,OX,DY,TEST, &AZIMLI,XORI,YORI,ALT,OECNO,OIPNO,NOM7 1014 F O R M A T ( ' N L I G = ' , I 5 , ' N C O L : ' , I 5 , ' I D E C = ' , I 5 , ' J D E C = ' , I 5 , 1 O A 4 , / ,
g'ECoL=',F5o2,'EC.C=',F5.2,'VID=',F7oI,'AZ=',F6ol, &'XORI=',EI5.8,'YORI=',E15o8,/, &'ALTITUDE=',F7.3,'DECNO=',FGoI,'OIPNO=',F6ol,40(IH.),/, &80(1H°),/,2OA4) CONVOLUTION CASE WHERE THE INDEX FILTER
IS
I
(SYMMETRY PROPERTIES)
IF(INDIC(5)oEQol) CALL C O N V O L ( W , L X P , K Y P , I X I + I O E C A L , I X F + I D E C A L , J Y I + gJOECAL,JYF+JDECAL,INCX,INCY,CARTI,ZONE,NPX,NPY,TEST,LUNIT2, &LMES,ITERV) CASE WHERE THE INDEX FILTER IS 2 (NO SYMMETRY) IF(INDIC(S)°EQ°2) CALL C O N V P O ( W , M , N , I X I + I O E C A L , I X F + I D E C A L , J Y I ÷ gJDECAL,JYF÷JDECAL,INCX,INCY,CARTI,ZONE,NPX,NPY,TEST,LUNIT2, ~LMES,ITERV) END FILE LUNIT2 IF(INDIC(1)°EO.3) GO TO 14 STOP
THIS PROGRAM SECTION IS RELATIVE TO THE CASE OF THE COMPUTATION OF A FILTER ONLY 13 CALL C A L C O P ( L M E S , I L E C , D X , D Y , 9 8 9 o D O , 8 8 9 o D O , A Z I M L I , M , N , I N D I C , ~W,ZONE) STORAGE OF THE FILTER 14
IM=M
IN A BINARY FILE
180 181 182 183 I84 185 186 187 188 189 190 181 192 193 194 195 19G 197 198 199 200 201 202 203 204 205 208 207 208 209 210 211 212 213 214 215 218 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 238 237 238 239
567
Computer program to perform transformations JN=N IF(INDIC(5).EQ.3) GO TO 16 IF(INOIC(5).EQ.I) IM=(M+I)/2 IF(INOIC(5).EQ.I) JN=(N+I)/2 IF(INDIC(2).EQ.O) GO TO 15 WRITE(LMES,I015) 1015 FORMAT(IOX,'NOW: CREATING THE FILTER BINARY FILE') CALL O P E N S A ( I N T S ( 2 ) , N O M 5 , 1 N T S ( 8 0 ) , I N T S ( L U N I T 2 - 4 ) ) WRITE(LUNIT2,1016) INOIC(5),M,N,NOMI 1016 FORMAT('++ FILTER FILE : INDEX =',12,' SIZE : M=',IS,'
N=' ,15,
g/,20A4) CALL E C L E C ( W , I M , J N , L U N I T 2 , I ) END F I L E LUNIT2 15 I F ( I N D I C ( 3 ) . E Q . O ) GO TO 16
STORAGE OF THE FILTER IN A DECIMAL FILE WRITE(LMES,1017) 1017 FORMAT(IOX,'NOW: CREATING THE FILTER DECIMAL F I L E ' ) CALL OPENSA(INTS(2),NOMG,INTS(80),INTS(LUNIT2-4)) CALL DBOOK(W,IM,I,IM, I,JN,2,4,LUNIT2) END FILE LUNIT2 16 STOP END SUBROUTINE CALCOP(LMES,ILEC,DX,OY,DECNO,DIPNO,AZIMLI,M,N,INDIC, &W,ZDNE) THIS SUBROUTINE CONTAINS BOTH THE CONVERSATIONAL AND COMPUTATIONAL PARTS CONCERNING THE FILTER CALCULATIONS= INPUT ARGUMENTS DESCRIPTION: LMES => SCREEN FORTRAN UNIT NUMBER - DX/DY => SAMPLING INTERVAL IN KM - DECNO DECLINATION AND I N C L I N A T I O N OF THE NORMAL FI E L D - A Z I M L I => AZIMUT OF THE FLIGHT LINES -
OUTPUT ARGUMENTS DESCRIPTION: - M/N :> TOTAL DIMENSIONS OF THE FILTER INDIC => AN INDICATOR ARRAY - W => MATRIX OF THE FILTER COEFFICIENTS STORED COLUMNWISE - ZONE => AUXILIARY STORAGE ARRAY -
REMARKS: IF DECNO:DIPNO=999. THE VALUES OF DX,DY,DECNO,DIPNO,AZ ARE ASKED FOR DURING THE EXECUTION OF CALCOP PRMT IS AN ARRAY WHICH CONTAINS THE PARAMETERS OF THE FILTERS C = ANISOTROPY COEFFICIENT AZIMLI = AZIMUT OF THE FLIGHT LINES H = CONTINUATION OFFSET OR D E P T H OF THE TOP OF THE LAYER ON = DECLINATION OF THE NORMAL F I E L D IN : I N C L I N A T I O N OF THE NORMAL FI E L D DA = DECLINATION OF THE MAGNETIZATION VECTOR IA = I N C L I N A T I O N OF THE MAGNETIZATION VECTOR E = THICKNESS OF THE LAYER N = ORDER OF THE VERTICAL DIFFERENCIATION OR ORDER OF THE "RESTE" DEVELOPMENT P R M T ( 7 , J ) IS EQUAL TO THE CODE OF THE JST ELEMENTARY
240 241 242 24S 244 245 246 247 248 249 25O 251 252 25S 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 28S 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299
D. GIBERTand A. GALDEANO
568
OPERATION 1
PRMT - - > .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
PBOL DERI INV.MAG INV,GRAV RED.POL RED.EQU INTGR.P.GRAV 'RESTE'
.
.
.
.
.
.
.
2 .
C C C C C C C C
.
.
.
.
.
.
.
3 .
.
.
.
.
.
.
.
4 .
.
.
.
.
.
.
.
5 .
.
.
.
.
.
.
H
N H H ON ON
E E IN IN
ON H
IN
DA DA OA N
6
7
.
IA IA lh
I01 102 105 104 A Z I M L I 201 A Z I M L I 202 AZIMLI 203 103
IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION W(1),ZONE(1),INDIC(IO),PRMT(7,10) EXTERNAL GDERI,GPROL,AMINV,GINV,RPOLE,REQUA,INTGR,RESTE,RESTP DATA NOE/O/,IFLGPO/O/,MAXTYP/O/ IF((DABS(DECNO).GT°360.OO)oOR.(DABS(OIPNO).GT°90.O0)) GO TO 2 IFLGPO = ! I WRITE(LMES, IOO0) 1000 FORMAT(5X,'ENTER M AND N = ' , / ) READ(ILEC,~) M,N IF(MOD(M,2)oEQ°I °AND° MOD(N,2).EQ.I) GO TO 3 WRITE(LMES,IO01) 1 0 0 1 F O R M A T ( S X , ' ~ CALCOP - - - M & N MUST BE ODD') GO TO 1 2 WRITE(LMES,IO02) 1002 FORMAT(5X,'COMPUTATION OF A FILTER ONLY, PLEASE ENTER', &' M, N, DX AND DY=') READ(ILEC,~) M,N,DX,OY IF(MOD(M,2).EQ.I °AND° MOD(N,2).EQ.I) GO TO 3 WRITE(LMES,IO01) GO TO 2 3 CONTINUE LX=(M+I)/2 KY=(N+I)/2 ANISO = OX/DY 4 CONTINUE NOE = NOE + 1 5 WRITE(LMES,IO03) 1003 FORMAT(/,SX,'PLEASE, SELECT ONE OPTION : ' , / , $12X, I :> UPWARD OR DOWNWARD CONTINUATION',/, $12X, 2 => VERTICAL DIFFERENTIATION',/, $12X, 3 => INVERSION (MAGNETISM, R:P: MADE)',/, $12X, 4 => INVERSION (GRAVIMETRY)',/, $12X, 5 => REDUCTION TO THE POLE',/, $12X, 6 => REDUCTION TO THE EQUATEUR',/, $12X, 7 => PSEUOO-GBAVIMETRIC INTEGRATION OF MAGNETIC DATA',/, $12X, 8 => ESTIMATION OF THE ' ' R E S T E ' ' ' ) REAO(LMES,~) INDIC(7) GO TO ( G , 7 , 1 0 , 9 , 1 2 , 1 2 , 1 2 , 8 ) , I N D I C ( 7 ) WRITE(LMES,IO04) I004 F O R M A T ( I O X , ' ~ CALCOP - - - INCORRECT ANSWER ~ ' ) GO TO 5 C C CONTINUATION C 6 WRITE(LMES,IO05) 1005 FORMAT(IOX,'CONTINUATION OFFSET ( ÷ DOWNWARD)') REAO(ILEC,m) H
300 301 302 303 304 3O5 5O6 5O7 3O8 5O9 310 312 513 514 315 316 517 318 519 32O 321 322 323 324 525 326 327 328 329 330 331 332 333 334 335 336 537 ~38 539 540 341 542 343 544 345 346 347 348 349 350 5fit 352 353 354 555 556 557 558 359
Computer program to perform transformations PRMT(1,NOE) = ANISO PRMT(2,NOE)=H/DY PRMT(7,NOE) = 101o MAXTYP = MAXO(MAXTYP,I) GO TO 15 C C C
DIFFERENTIATION
7 WRITE(LMES,IOOG) 1006 FORMAT(IOX,'OROER OF DIFFERENTIATION ( > 0 ) ' ) R E A O ( I L E C , ~ ) PRMT(4,NOE) P R M T ( I , N O E ) = ANISO PRMT(7,NOE) = 102o MAXTYP = MAXO(MAXTYP,1) GO TO 15 C RESTE C C 8 WRITE(LMES,IO07) 1007 FORMAT(IOX,'OEPTH AND ORDER OF THE DEVELOPMENT:') R E A O ( I L E C , ~ ) H,PRMT(4,NOE) PRMT(1,NOE) = ANISO PRMT(2,NOE) = H/BY PRMT(7,NOE) = 103o MAXTYP = MAXO(MAXTYP,I) GO TO 15 C INVERSION (GRAVIMETRY) C C 9 WRITE(LMES,IO08) 1008 FORMAT(IOX,'DEPTH AND THICKNESS OF THE LAYER:') READ(ILEC,~) H,E PRMT(I,NOE) = ANISO PRMT(2,NOE)=H/DY
PRMT(3,NOE)=E/DY PRMT(7,NOE) = 104. MAXTYP = MAXO(MAXTYP,I) GO TO 15 C C C
INVERSION (MAGNETISM -
REDUCTION
TO THE POLE MADE)
10 W R I T E ( L M E S , t O 0 8 ) R E A B ( I L E C , ~ ) H,E PRMT(1,NOE) = ANISO PRMT(2,NOE)=H/OY PRMT(3,NOE)=E/OY PRMT(7,NOE) = 105o MAXTYP = MAXO(MAXTYP,1) GO TO 15
C C C
REDUCTION
TO THE POLE OR TO THE EQUATOR
12 I F ( I F L G P O . E Q . I ) GO TO 13 WRIT E(LMES,lOO9) 1009 FORMAT(IOX,'ENTER O E C N O , D I P N O , A Z I M L I : ' , / ) REAB(ILEC,~) PRMT(2,NOE),PRMT(3,NOE),PRMT(G,NOE) GO TO 14 13 PRMT(2,NOE) = DECNO PRMT(3,NOE) = DIPNO PRMT(G,NOE) = A Z I M L I
569 560 361 362 363 364 365 3GG 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 38G 387 388 389 590 391 592 393 394 395 396 597 398 599 400 401 402 403 404 405 406 407 408 4O9 410 411 412 413 414 415 416 417 418 419
D. GIBERT and A. GALDEANO
570
14 WRITE(LMES,I010) 1010 FORMAT(5X,'OECLINATION AND INCLINATION OF THE MAGNETIZATION:') READ(ILEC,m) PRMT(4,NOE),PRMT(5,NOE) PRMT(I,NOE) = ANISO PRMT(7,NOE) = 200 ÷ INDIC(7) - 4 MAXTYP = MAXO(MAXTYP,2) GO TO 15 15 C O N T I N U E IQUEST = IYESNO('DO YOU WANT ANOTHER OPERATION ',30,LMES) IF(IQUEST°EQ°I) GO TO 4 IF(MAXTYPoEQ°I) C A L L FILTRE(W,LX,KY,NOE,PRMT,ZONE,LMES, IERR) IF(MAXTYP.EQo2) CALL POLEQ(W,M,N,NOE,PRMT,ZONE,LMES,IERR) INDIC(5) = MAXTYP RETURN END SUBROUTINE POLEQ(W,M,N,NOE,PRMT,ZONE,LMES,IERR) THIS SUBROUTINE COMPUTES A FILTER WHOSE RESULTANT INDEX IS 2 INPUT ARGUMENTS OESCRIPTIONz LMES => SCREEN FORTRAN UNIT NUMBER PRMT => THE ARRAY OF THE ELEMENTARY FILTERS PARAMETERS NOE => NUMBER OF ELEMENTARY FILTERS M => TOTAL NUMBER OF THE FILTER LINES N => TOTAL NUMBER OF THE FILTER ROWS OUTPUT ARGUMENTS DESCRIPTION: W => AN ARRAY WHICH CONTAINS THE FILTER COEFFICIENTS STORED STORED COLUMNWISE ZONE => AUXILIARY STORAGE ARRAY IERR => AN ERROR INDICATOR REMARKS: M AND N MUST BE 000 ZONE M U S T C O N T A I N AT LEAST
Mm(N+I)
REALm8
LOCATIONS
IMPLICIT DOUBLE PRECISION(A-H,O-Z) DIMENSION W(M,N),ZONE(I),PRMT(7,NOE) KY=(N+I)/2 II=MmKY+I IF(LMESoGToO) WRITE(LMES,IOOO) NOE 1000 FORMAT(5X,'++ SUBROUTINE POLEQ ++ NUMBEROF ELEMENTARY', 8 ' OPERATIONS:',I3) CALL POLEQI(M,N,NOE,PRMT,ZONE,ZONE(II),IERR) CALL TFPOEQ(W,M,N,ZONE,ZONE(II),LMES) RETURN END SUBROUTINE POLEQI(M,N,NOE,PRMT,GREEL,GIM,IERR) THIS S U B R O U T I N E C O M P U T E S THE R E A L AND I M A G I N A R Y P A R T S OF THE F O U R I E R T R A N S F O R M OF A F I L T E R W H O S E R E S U L T A N T INDEX IS 2 INPUT -
ARGUMENTS DESCRIPTION: PRMT => THE A R R A Y OF THE E L E M E N T A R Y F I L T E R S NOE => N U M B E R OF E L E M E N T A R Y F I L T E R S M => T O T A L N U M B E R OF THE F I L T E R L I N E S N => T O T A L N U M B E R OF THE F I L T E R R O W S
OUTPUT ARGUMENTS DESCRIPTION: - GREEL => REAL PART OF THE FOURIER TRANSFORM
PARAMETERS
42O 421 422 423 424 425 426 427 428 429 4S0 4S! 4S2 4SS 434 4S5 4S$ 4S7 4S8 4S9 440 ,441 ,442 44;S 444 445 445 447 448 449 450 451 452 45S 454 455 45B 457 458 459 48D 4,$I 4B2 48S 484 485 486 467 488 469 470 471 472 47S 474 ,475 476 477 478 479
571
Computer program to perform transformations -
GIM => IMAGINARY PART OF THE FOURIER TRANSFORM
-
IERR => AN ERROR I N D I C A T O R
REMARKSz GREEL AND
GIM
MUST
CONTAIN
EACH
M~(N+I)/2
REAL~8
LOCATIONS
IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION PRMT(7,NOE),GREEL(M,I),GIM(M,I) COMMON/PARAMO/P I , DEUXPI COMMON/PARAM
1 / P A R 1, P A R 2 , P A R 3 , NORD
COMMON/PARAM2/AZ g
I M, A L F A • B E T A , G A M A , A L A M , A M U , A N U • GAMA2,ANU2,GAMANU,CAZIM,SAZIM
PI = 3 . 1 4 1 5 9 2 6 5 3 5 8 9 7 9 3 D 0 DEUXPI = P I + P I RAO = PI/180.DO C = PRMT(I,I) KY
=
(N+I)/2
LX
=
(M+I)/2
CM
=
1.DO
/
(Cw(M)
CN = l.OO / N DO 1 J=I,KY D O 1 I=I,M GREEL( I,J)=I.DO GIM( I , J ) = O . O O 1 CONTINUE COMBINATION DO
7
OF
THE ELEMENTARY /
FILTERS
WHICH
INDEXES
ARE
2
IOE=I,NOE
IF(PRMT(7,1OE).GE.3OO.OO°OR.PRMT(7,1OE).LT.2OO.DO) COMPUTATION OF THE DIRECTION COSINES DECNO = PRMT(2,1OE) ~ RAD DIPNO
= PRMT(3,1OE)
~ RAD
DECAl DIPAI
= PRMT(4,1OE) = PRMT(5,1OE)
• RAD • RAD
AZIM
= PRMT(6,1OE)
OECO DIPO
= (DECNO-AZIM) = OIPNO
DEC1 DIP1
= (OECAI-AZIM) = OIPAI
BETA ALFA GAMA
=
• RAO
DCOS(DIPO)~DSIN(DECO) = -OCOS(OIPO)~DCOS(DECO) = -DSIN(OIPO)
AMU = OCOS(DIPI)~DSIN(OECI) ALAM = -DCOS(OIPI)~DCOS(BECI) ANU = -OSIN(OIPI) GAMA2 = GAMA~GAMA ANU2 = ANU~ANU GAMANU = GAMA~ANU CAZIM = - DCOS(AZIM) SAZIM = - OSIN(AZIM) ITOE = IABS(INT(SNGL(PRMT(7,1OE))+O.5)) ITM = I T O E ~ O . O I ITOE = ITOE - 200 IF(ITM.NE.2) GO DOEK=I,KY Q K = (K-I.)~CN
TO
17
GO
TO
7
480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 5O8 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 5Z5 536 537 538 539
D. GIBERT and A. GALDEANO
572
2 3 4 5
6 7
DO6L=I,M QL = (L-LX)mCM GO TO (2,3,4),ITOE IERR = i RETURN CALL RPOLE(QL,QK,PREEL,PIMAG) GO TO 5 CALL R E Q U A ( Q L , Q K , P R E E L , P I M A G ) GO TO 5 CALL INTGR(QL,QK,PREEL,PIMAG) PRE:GREEL(L,K) PIM=GIM(L,K) GREEL(L,K)=PREmPREEL - PIMmPIMAG GIM(L,K)=PIM~PREEL + PREmPIMAG CONTINUE CONTINUE COMBINATION OF THE ELEMENTARY FILTERS
8 9 10 11 12 14
15 16
17
WHICH
INDEXES ARE I
DO 16 I O E = I , N O E IF(PRMT(7,IOE).GE.2OOoDOoORoPRMT(7,IOE)°LTolOOoDO) PAR1 = P R M T ( 2 , I O E ) PAR2 = P R M T ( 3 , I O E ) PAR3 = P R M T ( 4 , I O E ) NORD=IABS(INT(SNGL(PAR3)+Oo5)) ITOE=IABS(INT(SNGL(PRMT(7,IOE))+O.5)) ITM=ITOEmO°OI ITOE=ITOE-IO0 IF(ITMoNE°I) GO TO 17 O0 15 I S = I , K Y SS=(IS-I°)~CN DO 15 IR=LX,M RR=(IR-LX)~CM GO TO ( 8 , £ , t O , 1 1 , 1 2 ) , I T O E IERR=2 RETURN PREEL=GPROL(RR,SS) GO TO 14 PREEL=GDER I(R R,SS) GO TO 14 PREEL=RESTE(RR,SS) GO TO 14 PREEL=GINV(RR,SS) GO TO 14 PREEL=AMIN V(RR,SS) GREEL(IR,IS)=PREELmGREEL(IR,IS) GIM(IR,IS)=PREEL~GIM(IR,IS) IF(IR°EQ°LX) GO TO 15 GREEL(LX+LX-IR,IS)=PREEL~GREEL(LX+LX-IR,IS) GIM(LX+LX-IR,IS)=PREEL~GIM(LX+LX-IR,IS) CONTINUE CONTINUE IERR=O RETURN IERR=3 RETURN END SUBROUTINE T F P O E Q ( W , M , N , G R E E L , G I M , L M E S )
GO TO 16
THIS SUBROUTINE COMPUTES THE INVERSE FOURIER TRANSFORM OF A F I L T E R
540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 57t 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599
Computerpro~amtopefformtrans~rmations
573
WHICH RESULTANT INDEX IS 2 INPUT ARGUMENTS DESCRIPTION: GREEL => REAL PART OF THE FOURIER TRANSFORM OF THE F I L T E R GIM => IMAGINARY PART OF THE FOURIER TRANSFORM LMES => SCREEN FORTRAN UNIT NUMBER M/N => NUMBER OF LINES/COLUMN OF THE F I L T E R -
OUTPUT ARGUMENTS DESCRIPTION: W => AN ARRAY WHICH CONTAINS THE F I L T E R COLUMNWISE -
REMARKS: M AND N MUST BE ODD GREEL AND GIM MUST CONTAIN AT LEAST M ~ ( N + I ) / 2
COEFFICIENTS
REAL~8 LOCATIONS
I M P L I C I T DOUBLE PRECISION ( A - H , O - Z ) DIMENSION W ( M , N ) , G R E E L ( M , 1 ) , G I M ( M , 1 ) DIMENSION C O S P H I ( 5 0 1 ) , S I N P H I ( 5 0 1 ) , C O S P S I ( 5 0 1 ) , S I N P S I ( 5 O I )
COMMON/CMCO/COSPHI,COSPSI,SINPHI,SINPSI DATA KY = LX = PI = RAO
MKEEP,NKEEP/-9999.-9999/ (N+1)/2 (M+l)/2 3.141592653589793D0 = PI/18O.OO CALCUL
DES C O E F F .
OU F I L T R E
XMN = M~N I F ( M ° E Q o M K E E P ) GO TO 2 MKEEP=M ARG = 2 . D O ~ P I / M DOII=I,M ARGI = A R G ~ ( I - I ) SINPHI(1) = DSIN(ARGI) COSPHI(1) = OCOS(ARGI) CONTINUE I F ( N . E Q . N K E E P ) GO TO 4 NKEEP=N
ARG = 2 . D O ~ P I / N DO31=I,N ARGI = A R G ~ ( I - I ) SINPSI(1) = DSIN(ARGI) COSPSI(1) = DCOS(ARGI) CONTINUE LXI = LX + 1
MI=M+I NI=N+I DO7KI=I,N IF(LMES°GToO) WRITE(LMES,IO00) tO00 F O R M A T ( I O X , ' C O M P U T A T I O N OF THE K = KI-KY K2=NI-KI DO 7 L1 = L X , M
L = LI-LX L2=MI-LI SOMR = O°DO SOMI = O . O O DO 5 IR = L X I , M LR=IR-LX
KI FILTER
STORED
ROW N U M B E R : ' , I 3 )
600 601 602 603 604 605 606 607 608 609 610 611 612 613 6t4 615 616 6t7 618 619 62O 621 622 623 624 625 626 627 628 629 630 631 632 635 634 655 636 637 638 639 640 641 642 643 644 G45 646 647 648 649 650 65t 652 65E 854 655 656 657 658 659
D. GIBERT and A. GALDEANO
574 LRM:MOD(LR~L,M)+I
SOMR=SOMR+GREEL(IR,1)~COSPHI(LRM)
SOMI = S O M I + GIM(IR,I)mSINPHI(LRM) 5 CONTINUE DO 6 IS = 2 , K Y KS = I S - I KSN= MOO(KS~K,N)+I IF(KSN.LEoO) KSN = KSN+N C02 = COSPSI(KSN) SI2 = SINPSI(KSN) SOMR:SOMR+GREEL(LX,IS)~C02 SOMI = SOMI + GIM(LX,IS)~SI2 DO 6 IRI= LXI,M LR=IR1-LX IR2=LX-LR LRM= M O O ( L R ~ L , M ) + I CO1 = COSPHI(LRM) SII = SINPHI(LRM) CIC2 = C01~C02 S1S2 = S I 1 ~ S I 2 CIS2 = C01~S12 C2SI = C 0 2 ~ S I I SOMR=SOMR+GREEL(IRI,IS)~(CIC2-SIS2)+GREEL(IR2,1S)~(CIC2+SIS2) SOMI = SOMI + G I M ( I R I , I S ) ~ ( C I S 2 + C 2 S I ) + G I M ( I R 2 , 1 S ) ~ ( C I S 2 - C 2 S I ) 6 CONTINUE SOMR= SOMR + SOMR + G R E E L ( L X , 1 ) SOMI=SOMI+SOMI W ( L I , K I ) = (SOMR+SOMI)/XMN I F ( L I . N E . L X ) W(L2,K2)=(SOMR-SOMI)/XMN 7 CONTINUE RETURN END SUBROUTINE FILTRE(W,LX,KY,NOE,PRMT,ZONE,LMES,IERR) THIS SUBROUTINE
COMPUTES
A FILTER
WHICH RESULTANT
INDEX
IS
I
INPUT ARGUMENTS DESCRIPTION: LMES => SCREEN FORTRAN UNIT NUMBER PRMT => THE ARRAY OF THE ELEMENTARY FILTERS PARAMETERS NOE => NUMBER OF ELEMENTARY FILTERS LX => NUMBER OF THE FILTER LINES - KY => NUMBER OF THE FILTER ROWS OUTPUT ARGUMENTS DESCRIPTION: W => AN ARRAY WHICH CONTAINS THE FI L TE R COEFFICIENTS STORED STORED COLUMNWISE ZONE => A U X I L I A R Y STORAGE ARRAY IERR => AN ERROR INDICATOR REMARKS: ZONE MUST CONTAIN AT LEAST LX~KY REAL~8 LOCATIONS IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION W(LX,KY),ZONE(1),PRMT(7,NOE) IF(LMES°GT.O) WRITE(LMES,IOOO) NOE 1000 FORMAT(5X,'++ SUBROUTINE FILTRE . + NUMBER OF ELEMENTARY', &' OPERATIONS:',IS) CALL FILTRI(LX,KY,NOE,PRMT,ZONE,IERR) CALL TFFILT(W,LX,KY,ZONE,LMES) RETURN
660 66t 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 69O 691 692 693 694 695 696 697 698 699 70O 701 702 703 704 705 706 707 708 709 /tO 7tl 712 713 714 7t5 716
717 7t8 7t9
575
Computer program to perform transformations END SUBROUTINE
FILTRI(LX,KY,NOE,PRMT,GRS,IERR)
T H I S SUBROUTINE COMPUTES THE REAL PART OF THE FOURIER TRANSFORM OF A F I L T E R W H I C H R E S U L T A N T INDEX IS i INPUT -
ARGUMENTS OESCRIPTIONz PRMT => THE A R R A Y OF THE E L E M E N T A R Y NOE => N U M B E R OF E L E M E N T A R Y F I L T E R S LX => N U M B E R OF THE F I L T E R L I N E S KY => N U M B E R OF THE F I L T E R ROWS
FILTERS
PARAMETERS
OUTPUT ARGUMENTS D E S C R I P T I O N : - GRS => REAL PART OF THE FOURIER TRANSFORM IERR => AN ERROR I N D I C A T O R = 0 => NO PROBLEM = 1 => INCORRECT OPERATION = 2 => THE INDEX OF AN ELEMENTARY OPERATION OIFFERS FROM 1 -
REMARKS: GRS MUST CONTAIN EACH LXmKY REALm8 LOCATIONS
1
2 3 4
IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION GRS(LX,KY),PRMT(7,NOE). COMMON/PARAMO/PI,DEUXPI COMMON/PARAMI/PAR1,PAR2,PAR3,NORO PI = 3.14159265358979300 OEUXPI = P I + P I C = PRMT(lol) M = LX+LX-1 N = KY+KY-t CM = 1,DO / (CmM) CN=I.OO/N DO 1 J = I , K Y DO 1 I = I , L X GRS(I,J)=I.BO CONTINUE 80 8 I O E = I , N O E PAR1 = P R M T ( 2 , I O E ) PAR2 = P R M T ( 3 , I O E ) PAR3 = P R M T ( 4 , I O E ) NORD=IABS(INT(SNGL(PAR3)+O.5)) ITOE=IABS(INT(SNGL(PRMT(7,IOE))+O.5)) ITM=ITOEmO.Ol ITOE=ITOE-IO0 I F ( I T M . N E . I ) GO TO 9 DO 7 I S = I , K Y SS=(IS-I.)mCN DO 7 I R = I , L X RR=(IR-I.)mCM GO TO ( 2 , 3 , 4 , 5 , 6 ) , I T O E IERR=I RETURN GRS(W.,IS)=GPROL(RR,SS)~GRS(IR,IS) GO TO 7 GRS(IR,IS)=GDERI(RR,SS)~GRS(IR, IS) GO TO 7 GRS(IR,IS)=RESTE(RR,SS)mQRS(IR,IS) GO TO 7
720 721 722 723 724 725 726 727 728 729 73O 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 75O 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 77G 777 778 779
D. GIBERT and A. GALDEANO
576
5 GRS(IR,IS)=GINV(RR,SS)~GRS(IR,IS) GO TO 7 6 GRS(IR,IS)=AMINV(RR,SS)~GRS(IR, IS) 7 CONTINUE 8 CONTINUE IERR=O RETURN 9 IERR=2 RETURN END SUBROUTINE TFFILT(W,LX,KY,GRS,LMES) T H I S SUBROUTINE WHICH RESULTANT INPUT
COMPUTES THE INDEX I S 1
INVERSE
FOURIER
TRANSFORM OF A F I L T E R
ARGUMENTS O E S C R I P T I O N ~ GRS => REAL PART OF THE FOURIER TRANSFORM OF THE F I L T E R LMES => SCREEN FORTRAN U N I T NUMBER - L X / K Y => NUMBER OF L I N E S / C O L U M N OF THE F I L T E R -
OUTPUT ARGUMENTS DESCRIPTIONs V => AN ARRAY WHICH CONTAINS THE FILTER COEFFICIENTS STORED COLUMNVISE REMARKS: GRS MUST CONTAIN
AT LEAST
LX~KY
REAL~8
LOCATIONS
IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION W(LX,KY),GRS(LX.KY) DIMENSION COSPHI(5OI),COSPSI(50I) COMMON/CMCO/COSPHI,COSPSI DATA M K E E P , N K E E P / - 9 8 9 9 , - 9 9 9 9 / M = LX+LX-1 N = KY+KY-1
XMN = Io00 / (M~N) PI = 3 ° 1 4 1 5 9 2 6 5 3 5 8 8 7 8 3 D 0 IF(MoEOoMKEEP) MKEEP = M ARG = 2oO0~PIIM
GO
TO
2
O011=i,M COSPHI(1)
= DCOS((I-I)~ARG)
IF(N°EQoNKEEP) NKEEP = N ARG = 2.O0~PI/N
1000
GO
TO
4
DO31=I,N COSPSI(1) = OCOS((I-I)~ARG) CONTINUE DO 7 KC = 1 , K Y IF(LMESoGT°O) WRITE(LMES,IO00) KC F O R M A T ( 2 O X , ' C O M P U T A T I O N OF THE F I L T E R
ROW N U M B E R : ' . I 3 )
K = KC-I O0 7 LC = 1 , L X L=LC-i S I G I = OoOO DO 5 I R = 2 , L X SIG1 = SIGI+COSPHI(MOB((IR-1)~L,M)+I)~GRS(IR,1) S I G 3 = 0°O0 DO 6 I S = 2 , K Y COPS = C O S P S I ( M O O ( ( I S - 1 ) ~ K , N ) + I ) SIG1 = SIGI+COPS~GRS(1,IS)
780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 786 787 798 799 800 801 802 803 804 8O5 806 807 808 809 810 81I 812 813 814 815 916 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839
Computer program to perform transformations 00 6 I R = 2 , L X SIG3 = SIG3÷COSPHI(MOD((IR-1)~L,M)+I)mCOPS~GRS(IR,IS) W(LC,KC) = (GRS(1,1) + SIGI+SIGI + 4 . D O ~ S I G 3 ) • XMN CONTINUE RETURN ENO DOUBLE P R E C I S I O N FUNCTION G D E R I ( R , S ) ELEMENTARY OPERATION PURPOSE: V E R T I C A L D I F F E R E N T I A T I O N INPUT ARGUMENTS D E S C R I P T I O N : ORORE => ORDER OF D I F F E R E N T I A T I O N -
REMARK: ORORE MUST BE GREATER THAN ZERO IMPLICIT D O U B L E P R E C I S I O N (A-Y,O-Z) COMMON/PARAMO/PI,DEUXPI COMMON/PARAMI/H,EE,ORORE,NORO DO = R~R+S~S GDERI = ( O E U X P I ~ D S B R T ( O O ) ) ~ O R D R E RETURN END DOUBLE P R E C I S I O N FUNCTION G P R O L ( R , S ) ELEMENTARY OPERATION PURPOSE: UPWARD OR O O W N W A R O
CONTINUATION
INPUT A R G U M E N T S DESCRIPTION: - H => C O N T I N U A T I O N OFFSET REMARKS: OOWNWARO
CONTINUATION
IS MADE
WHEN H IS P O S I T I V E
IMPLICIT DOUBLE P R E C I S I O N (A-H,O-Z) COMMON/PARAMO/PI,OEUXPI COMMON/PARAMI/H,EE,ORDRE,NORO GPROL=DEXP(H~OEUXPImDSQRT(RmR+SmS)) RETURN ENO OOUBLE P R E C I S I O N F U N C T I O N RESTE(R,S) ELEMENTARY OPERATION PURPOSE: " R E S T E " E V A L U A T I O N INPUT A R G U M E N T S OESCRIPTION: - H => DEPTH OF THE "RESTE" E V A L U A T I O N - NORO => ORDER OF THE D E V E L O P E M E N T IMPLICIT DOUBLE PRECISION ( A - H , O - Z ) COMMON/PARAMO/PI,OEUXPI COMMON/PARAMI/H,EE,ORORE,NORO HOERI = OEUXPI~OSQRT(R~R+S~S)~H PRL = OEXP(HOERI)
SER = 1.DO HND = 1°DO DO 1 I = 1,NORD HND = H N O ~ H D E R I / I SER = SER + HND
577 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 86O 861 862 863 864 865 866 867 868 869 870 87t 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 89O 891 892 893 894 895 896 897 898 899
D. GIBERT and A. GALDEANO
578
CONTINUE RESTE = PRL - SER RETURN END DOUBLE PRECISION FUNCTION G I N V ( R , S ) ELEMENTARY OPERATION PURPOSE: GRAVITY INVERSION
(CONSTANT LAYER)
INPUT ARGUMENTS DESCRIPTION: - P => DEPTH OF THE LAYER TOP - E => THICKNESS IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON/PARAMI/P,E,ORDRE,NORD COMMON/PARAMO/PI,OEUXPI CTE=I.O0 IF((DABS(R)°LT°'O°OOOI)oANO°(OABS(S)oLToOoOO01) ORS2 = R~R m S~S ORS = DEUXPI~DSQRT(ORS2) GINV=CTE~ORS2~DEXP(P~ORS)/(loOO-OEXP(-E~ORS)) RETURN GINV=CTE/(OEUXPI~E) RETURN END DOUBLE PRECISION FUNCTION A M I N V ( R , S )
GO TO t
ELEMENTARY OPERATION PURPOSE: MAGNETIC INVERSION
INPUT ARGUMENTS DESCRIPTION: - P => DEPTH OF THE LAYER TOP E => THICKNESS -
IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON/PARAMO/PI,OEUXPI COMMON/PARAMI/P,E,ORDRE,NORD CTE = I o O - 2 / O E U X P I IF((OABS(R)oLT.O.OOOI)oAND.(DABSCS).LT.OoO001)) DRS= DEUXPI~OSORT(R~R+S~S) AMINV=CTE~DEXP(P~DRS)/(1.DO-BEXP(-E~DRS)) RETURN AMINV=O°BO RETURN END SUBROUTINE R P O L E ( Q L , Q K , G R E E L , G I M )
GO TO
1
ELEMENTARY OPERATION PURPOSE: REDUCTION TO THE POLE IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON/PARAMO/PI,DEUXPI COMMON/PARAM2/AZIM,ALFA,BETA,GAMA,ALAM,AMU,ANU, GAMA2,ANU2,GAMANU,CAZIM,SAZIM IF((DABS(QL)oLToO=OOOI)oANDo(OABS(QK)oLToO=OOOI)) AA = A L F A ~ Q L + B E T A ~ Q K BB = A L A M ~ Q L + A M U ~ Q K AN = O L ~ Q L + O K ~ Q K D = (GAMA2~AN~AA~AA)~(ANU2~ANtBB~BB) A N S D = AN / 0
GO TO
i
900 901 902 903 904 905 90G 907 908 909 910 91t 912 8t3 914 915 91G 917 918 919 920 92i 922 923 924 925 92G 927 928 929 930 931 932 933 934 935 93G 937 938 939 94O 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959
579
Computer program to perform transformations FO = G A M A N U ~ A N - A A ~ B B
= (GAMA~BB+ANU~AA)~OSQRT(AN) GREEL = FO~ANSB GIM = GO~ANSD RETURN GREEL = l,OO GIM = 0.00 RETURN END SUBROUTINE REQUA(QL,QK,GREEL,GIM) GO
ELEMENTARY OPERATION P U R P O S E . R E D U C T I O N TO T H E E Q U A T O R IMPLICIT DOUBLE PRECISION (A-H,O-Z) COMMON/PARAMO/PI,DEUXPI COMMON/PARAM2/AZIM,ALFA,BETA,GAMA,ALAM,AMU,ANU, & GAMA2,ANU2,GAMANU,CAZIM,SAZIM IF((BABS(QL).LT.O.OOOI)oANO.(DABS(QK)°LT°O.O00I)) AA = A L F A ~ Q L + B E T A ~ Q K AA2 = CAZIM~QL+SAZIM~QK BB = A L A M ~ Q L + A M U m Q K AN = Q L m Q L + Q K m Q K D = (GAMA2mAN+AA~AA)m(ANU2~AN+BB~BB) ANSD = -(AA2~AA2) / O FO = G A M A N U u A N - A A m B B GO = (GAMAmBB+ANUmAA)mDSQRT(AN) GREEL = FO~ANSD GIM = GO~ANSD RETURN GREEL = l . O O GIM = O . O 0 RETURN END SUBROUTINE INTGR(QL,QK,GREEL,GIM) ELEMENTARY OPERATION PURPOSE: PSEUBO-GRAVIMETRIC
GO TO
I
INTEGRATION
IMPLICIT OOUBLE PRECISION (A-H,O-Z) COMMON/PARAMO/PI,DEUXPI COMMON/PARAM2/AZIM,ALFA,BETA,GAMA,ALAM,AMU,ANU, & GAMA2,ANU2,GAMANU,CAZIM,SAZIM IF((DABS(QL).LT.O.OOOI).AND=(OABS(QK).LT.O°O001)) GO TO AA = A L F A ~ Q L + B E T A ~ Q K BB = A L A M ~ Q L + A M U ~ Q K AN = Q L ~ Q L + Q K ~ Q K O = (GAMA2~AN÷AA~AA)~(ANU2~AN+BB~BB) SQAN = OSQRT(AN) ANSD = SQAN / (D~DEUXPI) FO = G A M A N U ~ A N - A A ~ B B GO = (GAMA~BB+ANU~AA)~SQAN GREEL = FO~ANSD GIM = GO~ANSD RETURN G R E E L = l°O0 / D E U X P I GIM = 0o00 RETURN END SUBROUTINE CONVOL(W,LX,KY,IXI,IXF,JYI,JYF,INCX,INCY,
1
980 961 982 983 964 965 986 987 988 969 97O 971 972 973 974 975 978 977 978 919 980 981 982 983 984 985 988 987 988 989 990 991 992 993 994 995 996 997 998 999 tO00 tOOt t002 t003 1004 t005 1008 1007 1008 i009 i010 loll 1012 1013 1014 1015 I018 i017 1018 1019
580
D. GIBERT and A. GALDEANO STA,TT,NPX,NPY,TEST,LUNIT,LMES,ITERV) THIS SUBROUTINE PERFORMS THE C O N V O L U T I O N AND A FILTER WHICH RESULTANT INDEX IS i INPUT
BETWEEN
THE DATA
GRID
ARGUMENTS DESCRIPTION: TA => INITIAL DATA GRID (DIMENSION NPX X NPY) W => THE FILTER C O E F F I C I E N T S (DIMo LX X KY) - TEST => THIS VALUE IS SET WHERE NO ACTUAL DATA EXIST IXl. IXF, JYI, JYF => EXTREMAL SUBSCRIPTS OF THE AREA TO BE TRANSFORMED INCX, INCY => SAMPLING INCREMENTS USED FOR THE CONVOLUTION ITERV => AN ARRAY WHICH CONTAINS THE EXTREMAL SUBSCRIPTS OF THE ACTUAL OATA SEGMENTS (TO RESTORE THE INITIAL G LMES => THE SCREEN FORTRAN UNIT NUMBER - LUNIT => THE FORTRAN UNIT NUMBER OF THE OUTPUT BINARY FILE -
-
-
OUTPUT PARAMETERS DESCRIPTION: - TT => A WORKING AREA WHICH
CONTAINS
THE TRANSFORMED
PROFILE
REMARKS: THE INITIAL DATA GRID IS CONVOLVEO COLUMN BY COLUMN AN THE TRANSFORMED MAP IS STOREO COLUMNWISE IN THE BINARY FILE= SO, TT MUST CONTAIN ONLY NPX REAL~4 LOCATIONS I M P L I C I T DOUBLE PRECISION ( A - H , O - Z ) REAL T A ( N P X , N P Y ) , T T ( N P X ) , T E S T INTEGER P,Q DIMENSION W ( L X , K Y ) , I T E R V ( l l , I ) P=LX-1 Q=KY-1 IP=P~INCX IO=Q~INCY NPX2=NPX+NPX NPY2=NPY+NPY IF(LMESoGT=O) WRITE(LMES,IOO0) i000 F O R M A T ( 5 X , ' + + SUBROUTINE CONVOL + + ' ) 00 1 1 J L = J Y I , J Y F I F ( L M E S ° G T . O ) W R I T E ( L M E S , I O 0 1 ) JL I001 FORMAT(2OX,'TRANSFORMATION OF THE COLUMN N U M B E R : ' , I 4 ) DO t I L = I , N P X TT(IL)=TEST JOUT=O IF((JL-IO)oLTol) JOUT=I IF((JL+IQ)oGToNPY) JOUT=I NBSEG=ITERV(ll,JL) IF(NBSEGoEQ.O) GO TO 10 DO 9 I S E G = I , N B S E G , 2 IX]=ITERV(ISEG,JL) IX2=ITERV(ISEG÷I,JL) IF(IX2oLEoIXI) GO TO 9 IF(IXIoGEolXF) GO TO 9 IF(IXIoLToIXI) IXI=IXI IF(IX2oGToIXF) IX2=IXF O0 B IL=IXI.IX2 IOUT=O I F ( ( I L - I P ) . L T o l ) IOUT=I IF((IL+IP)oGToNPX) IOUT=I I F ( ( I O U T o N E o O ) ° O R o ( J O U T ° N E o O ) ) GO TO 4 SUM=TA(IL,JL)~W(1,I)
1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 i031 1032 1033 1034 1035 1038 1037 1038 1039 1040 1041 1042 1043 1044 1045 1048 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 i080 1081 1082 1083 1084 1065 1086 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079
581
Computer program to perform transformations 1080 1081 1082 1083 1084 1085 1088 1087 1088
DO 2 J=I,Q INOYI=JL-J~INCY IN D Y 2 = J L + J ~ I N C Y SUM=SUM+( TA( IL, INDYI )+TA( IL, INDY2))~W( l,J+l ) O0 2 I=l ,P INDXI=IL+I~INCX INDX2=IL-I~INCX 2 SUM=SUM+(TA(INOXI,INOYI)+TA(INOXI,INDY2)+TA(INDX2,1NOY2)+ gTA( INDX2, INDYI ) )~W( I+l,J+l ) DO 3 I=I,P INDXI=IL-I~INCX INDX2=IL+I~INCX 3 SUM=SUM+(TA(INBXI,JL)+TA(INDX2,JL))~W(I+I,I) GO TO 7 4 CONTINUE SUM=TA( I L , J L ) ~ W ( i, 1 ) DO 5 J=I,Q INDYI=JL-J~INCY INDY2=JL÷J~INCY IF(INOYIoLTol) INDYI=2-1NOYI IF(INOY2°GT.NPY) INDY2=NPY2-1NOY2 SUM=SUM+( TA( IL, INOYI )+TA( IL, INDY2) )~W( i,J+1 ) DO 5 I=I,P INDXI =IL- I,~INCX INOX2=IL+I~INCX IF(INOXI°LTol) INDXI=2-1NOXI IF(INDX2oGToNPX) INDX2;NPX2-1NOX2 5 SUM=SUM+(TA(INDXI,INDYI)+TA(INDXI,INDY2)+TA(INDX2,1NDY2)+ &TA( INDX2, INOYI ) )~W( I+l,J+1 ) DO 8 I=I,P INDXI=IL-I,~INCX INDX2=IL+I~INCX IF(INDXI=LT.I) INDXI=2-1NDXI IF(INDX2oGToNPX) INOX2;NPX2-1NOX2 6 SUM=SUM+(TA( INDXt,JL)+TA( INDX2, JL) ),~W( I+l, 1 7 TT( IL)=SUM 8 CONTINUE 9 CONTINUE I0 IF(LUNIT.GT.O) WRITE(LUNIT) (TT(IL),IL=IXI,IXF) II CONTINUE RETURN END SUBROUTINE C O N V P O ( W , M , N , I X I , I X F , J Y I , J Y F , I N C X , I N C Y , $ T A , T T , N P X , N P Y , T E S T , L U N I T , L M E S , ITERV) THIS SUBROUTINE PERFORMS THE C O N V O L U T I O N AND A FILTER WHICH RESULTANT INDEX IS 2 INPUT
BETWEEN
THE DATA
1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 III0 iiii 1112 1113 1114 1115 1116 ii17 1118 1119 1120 1121
1122
GRID
ARGUMENTS DESCRIPTION: TA => INITIAL DATA GRID (OIMENSION NPX X NPY) W => THE FILTER C O E F F I C I E N T S (DIMo M X N) TEST => THIS VALUE IS SET WHERE NO ACTUAL OATA EXIST IXI, IXF, JYI, JYF => EXTREMAL SUBSCRIPTS OF THE AREA TO BE TRANSFORMEO - INCX, INCY => SAMPLING INCREMENTS USED FOR THE C O N V O L U T I O N ITERV => AN ARRAY WHICH CONTAINS THE EXTREMAL SUBSCRIPTS OF THE ACTUAL DATA SEGMENTS (TO RESTORE THE INITIAL G LMES => THE SCREEN FORTRAN UNIT NUMBER - LUNIT => THE FORTRAN UNIT NUMBER OF THE OUTPUT BINARY FILE
-
1123 1124 1125 II2G 1127 1128
1129 1130 1131 1132 1133 1134 1135 I136 1137 1138 1139
D. GIBERT and A. GALDEANO
582 OUTPUT
PARAMETERS DESCRIPTIONs TT => A WORKING AREA WHICH
CONTAINS
THE T R A N S F O R M E D
PROFILE
REMARKS= THE INITIAL DATA GRID IS CONVOLVED COLUMN BY COLUMN AN THE TRANSFORMED MAP IS STORED COLUMNWISE IN THE BINARY F I L E . SO, TT MUST CONTAIN ONLY NPX REAL~4 LOCATIONS IMPLICIT DOUBLE PRECISION (A-H,O-Z) REAL TA(NPX,NPY),TT(NPX),TEST DIMENSION W(M,N),ITERV(11,1) NPY2=NPY+NPY NPX2=NPX+NPX LX=(M+I)/2 KY=(N+I)/2 IP=(LX-I)~INCX IQ=(KY-I)~INCY IF(LMES.GToO) WRITE(LMES,IOO0) 1000 F O R M A T ( 5 X , ' + + SUBROUTINE CONVPO + + ' ) DO 8 J L = J Y I , J Y F IF(LMES°GToO) WRITE(LMES,IO01) JL 1001FORMAT(2OX,'TRANSFORMATION OF THE COLUMN NUMBERz ' , I 4 ) DO 1 I L = I , N P X 1TT(IL)=TEST JOUT=O IF((JL-IO)°LTol) JOUT=I IF((JL+IQ)°GT°NPY) JOUT=I NBSEG=ITERV(II,JL) IF(NBSEGoEQoO) GO TO 7 DO 6 I S E G = I , N B S E G , 2 tXl=ITERV(ISEG,JL) IX2=ITERV(ISEG+I,JL) IF(IX2oLEolXI) GO TO 6 IF(IXloGE°IXF) GO TO 6 IF(IXIoLToIXI) IXI=IXI IF(IX2.GToIXF) IX2=IXF DO 5 I L = I X I , I X 2 IOUT=O IF((IL-IP)°LTol) IOUT=I IF((ILmIP)oGToNPX) IOUT=I IF((IOUToNEoO)oOR°(JOUT.NEoO)) SUM=O°DO DO 2 J = I , N INDY=JL+(J-KY)~INCY DO 2 I=I,M INDX=IL+(I-LX)~INCX 2 SUM=SUM+TA(INDX,INDY)~W(I,J) GO TO 5 3 CONTINUE SUM=O°DO DO 4 J=I,N INDY=JL+(J-KY)~INCY IF(INDYoLTol) INDY=2-1NDY IF(INOYoGToNPY) INOY=NPY2-1NDY O0 4 I=I,M INOX=ILm(I-LX)~INCX IF(INOXoLTol) INDX=2-1NOX IF(INOXoGToNPX) INDX=NPX2-1NDX SUM = S U M + T A ( I N D X , I N D Y ) ~ W ( I , J ) 4 CONTINUE
GO TO 3
1140 1141 1142 1143 1144 1145 1148 1147 1148 1149 1150 1151 1152 1153 1154 1155 1158 1157 1158 1159 1160 llgl 1182 1183 1184 1185 1166 1167 1188 1189 1170 1171 1172 1173 1174 1175 1178 1177 1178 1179 1180 1181 1182 118S 1184 1185 1186 1187 1188 1189 1190 1191 1192 119S 1194 1195 1196 1197 1198 1199
583
Computer program to perform transformations 5 6 7 8
C C C C C C C C C C C C C C C C C C C C C C C C C C C
TT(IL)=SUM CONTINUE IF(LUNIT.GT:O) WRITE(LUNIT) (TT(IL),IL=IXI,IXF) CONTINUE RETURN END SUBROUTINE JUPE2(A,M,N,AUX,TEST,ITERV,LMES) THIS SUBROUTINE E X T R A P O L A T E S VALUES WITH A MAXIMUM FILTER OERIVEO FROM BURG'S ALGORITHM° INPUT
ENTROPY
PREDICT
PARAMETERS DESCRIPTION: - A (OIM: M X N) => AN ARRAY WHICH CONTAINS VALUES TO BE INTERPOLATED OR EXTRAPOLATEO. AUX : > A WORKING AREA (AT LEAST N REAL~4 LOCATIONS) - TEST : > A ( I , J ) = TEST INDICATES THAT THIS VALUE OF A MUST BE INTERPOLATED OR EXTRAPOLATED LMES => THE SCREEN FORTRAN UNIT NUMBER -
-
OUTPUT PARAMETERS DESCRIPTION: ITERV : > I T E R V ( I . . . I O , N ) CONTAINS THE EXTREMAL SUBSCRIPTS OF THE ACTUAL SEGMENTS OF THE COLUMN NUMBER N OF A :> ITERV(II,N) CONTAINS THE NUMBER OF ACTUAL SEGMENTS OF THE COLUMN NUMBER N OF A -
REMARKS: ITERV DIMENSION IS SUCH THAT THE MAXIMUM NUMBER OF SEGMENTS OF A COLUMN OF A MUST NOT BE GREATER THAN 5 : IF AN ERROR MESSAGE IS SENT BY CHTROU OR JUPE2, YOU MUST ALLOW A GREATER DIMENSION TO ITERV L I K E DIMENSION I T E R V ( S t , N ) IN JUPE2 DIMENSION I T E R V ( 3 1 ) IN CONVOL AND CONVPO DIMENSION I T E R V ( 5 1 ~ N ) IN THE MAIN PROGRAM IN SUCH A CASE YOU MUST ALSO SET: N B T R O U = ( 3 t - t ) / 2 IN JUPE2 :
DIMENSION A ( M , N ) , A U X ( N ) , I T E R V ( l t , N ) , I T E R V l ( l l ) NBTROU=5 LIG=I IF(LIG°EQ.I) GO TO 5 i 00 I=I,M DO 2 J=I,N 2 AUX(J)=A(I,J) NBT=NBTROU CALL CHTROU(AUX,N,ITERVI,NBT,TEST,LMES) I F ( N B T . E D . O ) GO TO 4 CALL C A L C U L ( A U X , N , I T E R V l , N B T , I O O , 1 Q . ) DO 5 J=I,N $ A(I,J)=AUXIJ) 4 CONTINUE I F ( L I G . E Q . I ) GO TO 9 IF(M.EQ.I) GO TO 9 5 DO 8 J = I , N NBT=NBTROU CALL C H T R O U ( A ( 1 , J ) , M , I T E R V l , N B T , T E S T , L M E S ) I F ( N B T . L E o N B T R O U ) GO TO 6 IF(LMES.GT.O) WRITE(LMES,IO00) 1000 F O R M A T ( I O X , ' ~ JUPE2 - - I N S U F F I C I E N T STORAGE LOCATIONS g ' AND ITERV1 ~ ' ) STOP 6 CONTINUE DO 7 I I = I , N B T 4
IN
ITERV'
1200 1201 1202 1205 1204 1205 1206 1207 1208 1209 1210 1211 1212 1215 1214 1215 121B 1217 1218 1219 1220 1221 1222 1225 1224 1225 1226 1227 1228 122B 1230 1231 1232 1235 1234 1255 1236 1257 1258 1259 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1255 1254 1255 1256 1257 1258 1258
D. GIBERT and A. GALDEANO
584
7 ITERV(II,J)=ITERVI(II) ITERV(II,J)=NBT IF(NBT.EQ.O) GO TO 8 CALL CALCUL(A(I,J),M,ITERVI,NBT,IO0,10.) 8 CONTINUE IF(N.EO°I) GO TO 9 IF(LIG°EQ°I) GO T0 1 8 RETURN END SUBROUTINE CALCUL(TP,NLIG, IT,NBT,IBORNE,PERCEN) THIS S U B R O U T I N E E X T R A P O L A T E S AND I N T E R P O L A T E S VALUES WITH A M A X I M U M E N T R O P Y P R E D I C T I O N F I L T E R D E R I V E D FROM BURG'S ALGORITHM: INPUT P A R A M E T E R S D E S C R I P T I O N : - TP => AN ARRAY WHICH C O N T A I N S BOTH ACTUAL VALUES AND VALUES TO BE I N T E R P O L A T E D OR E X T R A P O L A T E D ° - NLIG => THE TOTAL N U M B E R OF DATA C O N T A I N E D IN TP - IT => AN ARRAY WHICH C O N T A I N S THE E X T R E M A L S U B S C R I P T S OF EACH A C T U A L DATA S E G M E N T STORED IN TP° NBT => THE N U M B E R OF A C T U A L DATA SEGMENTS° - IBORNE => THE M A X I M U M N U M B E R OF ACTUAL DATA TAKEN FOR THE PREDICTION FILTER COMPUTATION: - PERCEN => D E F I N E S THE N U M B E R OF FILTER C O E F F I C I E N T S (NUMBER OF C O E F F I C I E N T : P E R C E N m l B O R N E / I O 0 : ) -
DIMENSION T P ( N L I G ) , I T ( N B T ) , A ( G O ) , C ( G O ) 00 8 I = I , N B T , 2
III=I÷I NBP=IT(III)-IT(1)÷I I F ( N B P : G E : N L I G ) GO TO 9 I F ( N B P ° L E : O ) GO TO 9 IFLAG=O IF(NBP°GT°IBORNE) IFLAG=I IF(NBP°GT°IBORNE) NBP=IBORNE LC=PERCEN~NBP/IO0o LC=MAXO(3,LC) LC=MINO(GO,LC)
CALL P R E O I ( N B P , T P ( I T ( 1 ) ) , L C , C . A ) IF(IT(I)°EQ°I) GO TO 4 I F ( I . E O . I ) IO=l IF(I°NE°I) I D = I T ( I - I ) + I JK=IT(1)-I XX=FLOAT(JK-ID+2) NI=JK-ID+I DO 3 J=I,NI IR=IT(1)-J
1300 1301 1302 1303 1304 1305 1306 1307
SOM=O°
II=IR-I 00 1K=2,LC SOM=SOM-A(K)mTP(II+K) I F ( I . N E : I ) GO TO 2 TP(IR>=SOM GO TO 3 TP(IR)= (SOM~(IR-ID+I) + TP(IR)~(JK-IR+I)) CONTINUE CONTINUE I F ( I T ( I I I ) ° G E ° N L I G ) GO TO 9 I F ( I F L A G ° E Q ° O ) GO TO 5
IOP=IT(I+i)-IBORNE÷I CALL P R E D I ( N B P , T P ( I O P ) , L C . C . A )
1280 1261 1262 1263 1264 1265 1268 1267 1288 1269 1270 1271 1272 1273 1274 1275 1278 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1298 1297 1298 1299
1308 1309
/ XX
1310 1311 1312 1313 1314 1315 1316 1317 1318
1319
Computer program to perform transformations 5 CONTINUE IF(IIIoEO.NBT) NMAX=NLIG IF(IIIoNE.NBT) NMAX=IT(I+2)-I JK=IT(I+I)+I DO 7 J=JK,NMAX SOM=Oo II=J+l DO 6 K = 2 , L C 6 SOM=SOM-A(K)~TP(II-K) 7 TP(J)=SOM 8 CONTINUE 9 RETURN END SUBROUTINE P R E O I ( L X , X , L C . C , A ) THIS SUBROUTINE PERFORMS THE COMPUTATION OF A MAXIMUM ENTROPY PREDICTION F I L T E R FROM ACTUAL DATA° INPUT PARAMETERS DESCRIPTION: LX => NUMBER OF ACTUAL DATA USEO FOR THE F I L T E R COMPUTATION - X => THE ACTUAL DATA VECTOR LC => THE NUMBER OF F I L T E R COEFFICIENTS C = > A WORKING AREA OUTPUT PARAMETER DESCRIPTION: - A => THE PREDICTION F I L T E R -
DIMENSION X ( L X ) , E P ( 2 5 0 0 ) , E M ( 2 5 0 0 ) , C ( L C ) , A ( L C ) COMMON/COMPRE/EP,EM DO I I = I , L X EM(1)=X(1) I EP(1)=X(1) C(I)=-Io DO 3 J = 2 , L C DEN=Oo BPM=Oo 00 2 I = J , L X EPI=EP(I) EMIJ=EM(I-J+I) OEN=OEN+EPI~EPI+EMIJmEMIJ 2 DPM=DPM÷EPImEMIJ CJ=2°~OPM/OEN C(J)=CJ O0 3 I = J , L X IJ=I-J+l EMIJ=EM(IJ) EPI=EP(I) EP(I)=EPI-CJ~EMIJ 3 EM(IJ)=EMIJ-CJ~EPI A(1)=Io P=I° O0 4 J = 2 , L C CJ=C(J) A(J)=Oo P=P~(lo-CJmCJ) JH=(J+I)/2 O0
4
I=I,JH
K=J-I+I BOT=A(K)-CJmA(I) A(I)=A(I)-CJ~A(K) 4 A(K)=BOT
585 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1550 1531 1332 1333 1534 1335 1556 1357 1558 1339 1540 1541 1542 1343 1544 1545 1346 1547 1548 1549 1350 1551 1352 1353 1554 1555 1356 1557 1558 1359 1560 1SG1 1362 1365 1564 1365 1586 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1579
D. GIBERT and A. GALDEANO
586
RETURN END SUBROUTINE C H T R O U ( T P , N L I G , I T , N , T E S T I , L M E S ) THIS SUBROUTINE LOCATES ACTUAL DATA SEGMENTS IN AN ARRAY INPUT PARAMETERS DESCRIPTION: TP (DIMo = N L I G ) => AN ARRAY WHICH CONTAINS BOTH ACTUAL AN VIRTUAL DATA SEGMENTS: - TEST => THIS VALUE IS SET WHERE NO ACTUAL DATA E X I S T S : LMES => THE SCREEN FORTRAN UNIT NUMBER OUTPUT
PARAMETERS DESCRIPTION: IT => AN A R R A Y W H I C H C O N T A I N S THE E X T R E M A L E A C H A C T U A L DATA S E G M E N T S T O R E D IN TP. - N => THE N U M B E R OF S E G M E N T S -
SUBSCRIPTS
OF
REMARKS: AN ERROR CONDITION IS SENT BY THIS SUBROUTINE IF THE NUMBER OF SEGMENTS IS SO GREAT THAT THERE ARE I N S U F F I C I E N T LOCATIONS IN IT (SEE ALSO THE COMMENTS IN JUPE2)o DIMENSION TP(NLIG),IT(N) TEST=TESTI 00 1 I C = I , N i IT(IC)=O IC=I IF(TP(1)°EQ.TEST) GO TO 2 IT(l)=1 IC=2 2 CONTINUE NNN=NLIG-I DO 7 I = I , N N N ISLIT=I IF(TP(1).EOoTEST) GO TO 3 ISLIT:ISLIT÷I 3 IF(TP(I+I).EQoTEST) GO TO 4 ISLIT=ISLIT+2
1411
4 GO TO ( 7 , 5 , 6 , 7 ) , I S L I T STOP 668 5 IT(IC)=I IC=IC+I GO TO 7 8 IT(IC)=I+I IC=IC+I 7 CONTINUE IF(TP(NLIG)oNE.TEST) IT(IC)=NLIG I F ( ( I C - I ) . L E ° N ) GO TO 8 IF(LMES.GT°O) WRITE(LMES,IO00) STOP 444 8 CONTINUE DO 9 I C = I , N IF(IT(IC).EQ:O) GO TO I0 9 CONTINUE 10 N=IC-I IF(MOD(N,2):EQ:O) RETURN IF(LMESoGT:O) WRITE(LMES,IO01) N S T O P 555 i001 F O R M A T ( 5 X , ' + + + I000 F O R M A T ( 5 X , ' + + +
CHTROU CHTROU
+++ +++
BAD E S T I M A T I O N OF THE N U M B E R N B T R O U IS TOO S M A L L ' )
1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410
OF G A P S ' )
1412 1413 1414 i415 1418 1417 1418 1419 1420 1421 1422 1423 1424 1425 1428 1427 1428 1429 1430 1431 1432 1433 1434 1435 1438 1437 1438 1439
587
Computerprogram to pefforrntrans~rmations END SUBROUTINE L E C T U R ( T , M , N . I D , J D , T E S T , L U N I T ) C C C C C C C C C C
THIS SUBROUTINE READS DATA IN A BINARY F I L E INPUT PARAMETERS DESCRIPTIONz LU NIT => THE FORTRAN UNIT NUMBER OF THE BINARY F I L E - TEST => A VALUE WHICH IS SET IN THE UNUSED LOCATIONS OF T° -
OUTPUT PARAMETERS DESCRIPTION: T => THIS ARRAY CONTAINS THE DATA DIMENSION T ( M , N ) 00 1 J = I , N DO 1 I=I,M T(I,J)=TEST ll=IO+l 12=M-ID JI=JD+I J2=N-JD DO 2 J = J i , J 2 READ(LUNIT) (T(I,J),I=II,I2) RETURN END SUBROUTINE E C L E C ( W , M , N , L U N I T , I N D I C ) THIS SUBROUTINE READS/WRITES DATA IN A BINARY F I L E LUNIT => FORTRAN UNIT NUMBER OF THE F I L E I N D I C > 0 => WRITING OF W < 0 => READING OF W W ( D I M . M , N ) => DOUBLE PRECISION ARRAY TO BE READ/WRITTEN DOUBLE PRECISION W(M,N) IF(INDIC°LT.O) GO TO 2 DO 1 J = I , N WRITE(LUNIT) (W(I,J),I=I,M) RETURN CONTINUE DO 3 J=I,N READ(LUNIT) (W(I,J),I=I,M) RETURN END INTEGER FUNCTION I Y E S N O ( Q U E S T , I C A R O , I U N I T ) THIS FUNCTION ASKS FOR A QUESTION AND TAKES THE VALUE THE RESPONSE IS "Y" AND THE VALUE 0 IF IT IS "NO'. INPUT
i IF
PARAMETERS DESCRIPTION: QUEST = A CHAIN OF CHARACTERS ICARO = THE NUMBER OF CHARACTERS CONTAINED IN QUEST - IUNIT = THE FORTRAN UNIT NUMBER OF THE SCREEN OR OF THE COMMAND FILE
-
INTEGER~2 Q U E S T ( 1 ) . R E P O N S ( 4 0 ) , N 1 , N 2 . Y 1 , Y 2 , F M T ( 2 0 ) , I Z E R O DATA N I , N 2 , Y 1 , Y 2 / ' N ',' N','Y '.' Y'/ DATA F M T / ' ( O 2 X , 0 O A 2 , 1 3 H ? (Y o r N) : )'/,IZERO/' IYESNO=O ICAR=ICARO/2 ICI=ICAR/IO IC2=ICAR- IClmlO FMT(4):IZERO +ICI
O'/
1440 144t 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1458 1457 1458 1459 1460 1481 1462 1463 1464 1465 1488 I487 1488 1489 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1495 1494 1495 1496 1497 1498 1499
D. GIBERT and A. GALDEANO
588
FMT(5)=IZERO +IC2 WRITE(IUNIT,FMT ) (QUEST(I),I=t,ICAR) READ(IUNIT,lOO0) (REPONS(I),I=I,40) lOOO FORMAT(4OA2) 00 2 I = 1 , 4 0 IF(REPONS(I)°EQ°NIoOR°REPONS(I)°EO°N2) RETURN IF(REPONS(I)°EQoYI°OR°REPONS(I)°EQoY2) GO TO S CONTINUE GO TO I IYESNO=I RETURN END SUBROUTINE OBOOK(T,MMAX,M1,M2,N1,N2,ITYPE,IOECI,IUNIT) THIS SUBROUTINE PRINTS DATA 1
INPUT PARAMETERS OESCRIPTION: T => AN ARRAY OF DIMENSION (MMAX,N2) WHICH A PART WILL BE PRINTEO MI,M2,NI,N2 => EXTREMAL INDICES OF THE AREA OF T TO BE PRINTEO - ITYPE = I => FORMAT E = 2 => FORMAT O IOECI => NUMBER OF DECIMAL D I G I T S - I U N I T => FORTAN UNIT NUMBER OF THE OUTPUT F I L E -
-
DOUBLE PRECISION T(MMAX,N2) INTEGER~2 IFORMI(40),IFORM2(40),ITY(2) COMMON/GBOOK/ IFORMI,IFORM2,1TY,NTOT,NTC,NCL,NSL DATA I T Y ( 1 ) / ' E ' / , I T Y ( 2 ) / ' O ' / NTOT=80 NTC=IOECI+9 NCL=INT(IIO/NTC) NSL = I ENCOOE(NTOT,IOOO, IFORMI)NSL,NCL,ITY(ITYPE),NTC,IDECI lOOO F O R M A T ( ' ( ' , I 2 , ' ( / ) , I S , ' , I2,'(1P',AI,I2,'o'.I2,'))') ENCODE(NTOT,IOOI,IFORM2)NCL,NTC 1001 F O R M A T ( ' ( I H I , / / / / / , S X , ' , I 2 , ' I ' , I 2 , ' ) ' ) NCOL=N2-NI+I NTOURS=NCOL/NCL IF(NTOURSoLEoO) GO TO 2 00 1 J J = I , N T O U R S NFIN=JJ~NCL+NI-1 NDEB=NFIN-NCL+I WRITE(IUNIT,IFORM2) (JNJ,JNJ=NDEB,NFIN) WRITE(IUNIT,IO02) DO 1 I=MI,M2 I WRITE(IUNIT,IFORMI) I , ( T ( I , J ) , J = N D E B , N F I N ) I F ( M O O ( N C O L , N C L ) ° E Q o O ) RETURN 2 NOEB=NTOURS~NCL+I WRITE(IUNIT,IFORM2) (JNJ,JNJ=NDEB,N2) WRITE(IUNIT,1002) 00 3 I=MI,M2 S WRITE(IUNIT,IFORMI) I , ( T ( I , J ) , J = N D E B , N 2 ) RETURN 1002 F O R M A T ( / / ) END
1500 1501 1502 i50S 1504 1505 i506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 [521 1522 1523 1524 1525 1526 1527 1528 1529 15S0 15SI 15S2 15S3 1534 1535 1536 1537 15S8 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 155S 1554 1555