C
C Program INV1SOFT to evaluate the coefficients of the soft subjective
C a priori information on the perturbations of the model parameters.
C The subjective a priori information is composed of the squares of the
C Sobolev norms of the functions describing the model.
C
C Version: 5.20
C Date: 1997, September 30
C
C Coded by: Ludek Klimes
C Department of Geophysics, Charles University Prague,
C Ke Karlovu 3, 121 16 Praha 2, Czech Republic,
C E-mail: klimes@seis.karlov.mff.cuni.cz
C
C.......................................................................
C
C Program INV1SOFT assumes all model parameters (coefficients) stored in
C the common block /VALC/ as in the submitted versions of user-defined
C model specification FORTRAN77 source code files 'srfc.for', 'parm.for',
C and 'val.for'. Thus, unlike the other parts of the complete ray
C tracing, the INV1SOFT program cannot work with user's modifications of
C the subroutines SRFC1, SRFC2, PARM1, and PARM2.
C
C.......................................................................
C
C
C Description of data files:
C
C All data are read in by the list directed input (free format).
C In the lists of input data below, each numbered paragraph
C indicates the beginning of a new input operation (new READ
C statement).
C The CHARACTER strings are denoted by symbolic names enclosed in
C apostrophes. Otherwise, if the first letter of the symbolic name
C of the input variable is I-N, the corresponding value in input
C data must be of the type INTEGER. Otherwise, the input parameter
C is of the type REAL.
C The first 80 characters of the strings are significant.
C
C Main input data file read from the interactive device (*):
C (1) 'MODEL','INV1SOFT','SOFT',/
C 'MODEL'... String containing the name of the input data file
C specifying the model. For description of the data file
C refer to file 'model.for' of package MODEL.
C Description of file MODEL
C 'INV1SOFT'... String containing the name of the input data file
C containing the coefficients describing the Sobolev scalar
C product under consideration.
C Description of file INV1SOFT
C 'SOFT'..String containing the name of the output file containing
C the subjective prior information.
C The structure of the file is described below.
C Description of file SOFT
C /... An obligatory slash at the end of line to enable for
C future extensions.
C Default: 'MODEL'='model.dat', 'INV1SOFT'='soft.dat',
C 'SOFT'='soft.out'.
C
C
C Input data INV1SOFT:
C This data file contains the coefficients describing the Sobolev
C scalar product under consideration.
C (1) (NW1(I),NW2(I),NW3(I),I=1,NW),/
C List of partial derivatives included in the Sobolev scalar product
C which is assumed to represent subjective prior information about
C the model, terminated by a slash.
C NW1,NW2,NW3... Orders of partial derivatives with respect to
C X1,X2,X3 coordinates. For (bi-,tri-)cubic splines, the
C third homogeneous partial derivatives are discontinuous.
C NWi thus should not exceed 3, allowing for 64 different
C partial derivatives at the most.
C (2) ((WCS(I,J),I=1,J),J=1,NW)
C Elements of the constant symmetric weighting matrix of the Sobolev
C scalar product.
C WCS(I,J)... Coefficient of the product of
C (NW1(I),NW2(I),NW3(I))-th and (NW1(J),NW2(J),NW3(J))-th
C partial derivatives of functions in the Sobolev scalar
C product. The product of the derivatives is integrated
C over the volume (surface, length) of the spline grid and
C divided by the volume (surface, length) of the grid to
C yield the average value of the product of the derivatives,
C The average value is multiplied by WCS(I,J) to form the
C contribution to the Sobolev scalar product.
C Example of data INV1SOFT
C
C
C Output file SOFT:
C (1) NM
C NM... Number of model parameters considered by this program.
C (2) (INDM(I),I=1,NM)
C INDM... Indices of the model parameters considered by this
C program. The indices correspond to the relative location
C in the memory, in array RPAR of common block /VALC/.
C B-spline coefficients are listed in the same order as the
C grid velocities in file MODEL.
C Common block /VALC/
C (3) (RS(I),I=1,NM)
C RS... Parameters (coefficients) of the initial (input) model.
C (4) ((CS(I,J),I=1,J),J=1,NM):
C CS... Relative inverse subjective prior information covariance
C matrix. Note that subjective data are assumed to be minus
C the above initial model parameters, and the matrix GS
C projecting the perturbations of model parameters onto the
C subjective data is assumed to be identity.
C Matrix CS is the symmetric matrix of the Sobolev scalar
C products of the basis functions corresponding to the model
C parameters.
C
C-----------------------------------------------------------------------
C
C Common block /VALC/:
INCLUDE 'val.inc'
C val.inc
C None of the storage locations of the common block are altered.
C
C Common block /RAMC/:
INCLUDE 'ram.inc'
C ram.inc
INTEGER IRAM(MRAM)
EQUIVALENCE (RAM,IRAM)
C
C-----------------------------------------------------------------------
C
C Filenames:
CHARACTER*80 FMODEL,FINV1,FSOFT
C
C Logical unit number:
INTEGER LU1
PARAMETER (LU1=1)
C
INTEGER NW,NM
C NW... Number of specified partial derivatives.
C NM... Number of the unknown model parameters.
C
C Addresses in array RAM:
INTEGER IWCS0,INDM0,ICS0,IB0
C IRAM(1:3),IRAM(4:6),...,IRAM(3*NW-2:3*NW)... Orders of partial
C derivatives.
C IWCS0=3*NW... Origin of array WCS(I,J) of the weights describing
C the Sobolev scalar product.
C INDM0=IWCS0+NW*(NW+1)/2... Origin of array INDM of the indices of
C model parameters.
C ICS0=INDM0+NM... Origin of symmetric matrix CS of the Sobolev
C scalar products of the basis functions corresponding to
C the model parameters.
C IB0=ICS0+NM*(NM+1)/2
C
INTEGER MW,I,J
REAL WEIGHT
C
C.......................................................................
C
C Opening data files and reading the input data:
C
C Main input data file read from the interactive device (*):
WRITE(*,'(A)') ' Enter the names of files MODEL, INV1SOFT, SOFT: '
FMODEL='model.dat'
FINV1='soft.dat'
FSOFT='soft.out'
READ(*,*) FMODEL,FINV1,FSOFT
WRITE(*,'(A)') '+ '
C
C Input data MODEL for the model:
OPEN(LU1,FILE=FMODEL,STATUS='OLD')
CALL MODEL1(LU1)
CLOSE(LU1)
C
C Number of unknown model parameters:
CALL SOFT(2,0,0,0,0,0,0,0.,NM,IRAM,RAM,1,RAM)
C (We have just hoped here that array RAM is sufficiently large.)
C WRITE(*,'(A,I4,A)') '+',NM,' model parameters'
C
C Input data INV1SOFT:
OPEN(LU1,FILE=FINV1,STATUS='OLD')
C Reading prior subjective information coefficients:
C Maximum number MW of different partial derivatives
MW=MIN0(64,(MRAM-1)/3)
DO 21 I=1,3*MW+1
IRAM(I)=-1
21 CONTINUE
READ(LU1,*) (IRAM(I),I=1,3*MW+1)
DO 22 I=1,MW+1
IF(IRAM(I).LT.0) THEN
NW=(I-1)/3
IF(3*NW.NE.I-1) THEN
C INV1SOFT-01
CALL ERROR('INV1SOFT-01: Wrong partial derivatives')
C The input partial derivatives do not form triplets,
C or some of the derivatives is of a negative order.
END IF
GO TO 23
END IF
22 CONTINUE
C INV1SOFT-02
CALL ERROR('INV1SOFT-02: Too many partial derivatives')
C The number of input triplets of partial derivatives is greater
C than the maximum number MW defined few lines above.
23 CONTINUE
IWCS0=3*NW
INDM0=IWCS0+NW*(NW+1)/2
ICS0=INDM0+NM
IB0=ICS0+NM*(NM+1)/2
IF(IB0.GE.MRAM) THEN
C INV1SOFT-03
CALL ERROR('INV1SOFT-03: Too small array RAM')
C Dimension MRAM of array RAM in include file
C ram.inc
C should be increased to accommodate the input coefficients of the
C Sobolev scalar product and the output symmetric matrix CS of the
C Sobolev scalar products of the basis functions corresponding to
C the model parameters.
END IF
READ(LU1,*) (RAM(I),I=IWCS0+1,INDM0)
CLOSE(LU1)
C
C.......................................................................
C
C Opening output file:
OPEN(LU1,FILE=FSOFT)
I=MAX0(INDEX(FSOFT,' ')-1,11)
WRITE(*,'('' Generating the output: '',A)') FSOFT(1:I)
C
C Generating prior subjective information covariance matrix:
DO 41 I=ICS0+1,IB0
RAM(I)=0.
41 CONTINUE
DO 49 J=1,NW
DO 48 I=1,J
WEIGHT=RAM(IWCS0+J*(J-1)/2+I)
IF(WEIGHT.NE.0.) THEN
CALL SOFT(2,IRAM(3*I-2),IRAM(3*I-1),IRAM(3*I),
* IRAM(3*J-2),IRAM(3*J-1),IRAM(3*J),WEIGHT,
* NM,IRAM(INDM0+1),RAM(ICS0+1),MRAM-IB0,RAM(IB0+1))
END IF
48 CONTINUE
49 CONTINUE
C
C (1,2,3) Writing the initial model parameters INDM:
WRITE(LU1,'(I8)') NM
WRITE(LU1,'(I8,5I13)') (IRAM(I),I=INDM0+1,INDM0+NM)
WRITE(LU1,'(6(G12.6,1X))') (RPAR(IRAM(I)),I=INDM0+1,INDM0+NM)
WRITE(LU1,'(6(G12.6,1X))')
C
C (4) Writing the prior subjective information covariance matrix CS:
DO 90 J=1,NM
WRITE(LU1,'(6(G12.6,1X))')
* (RAM(I),I=ICS0+J*(J-1)/2+1,ICS0+J*(J+1)/2)
90 CONTINUE
CLOSE(LU1)
C
STOP
END
C
C=======================================================================
C
INCLUDE 'error.for'
C error.for
INCLUDE 'model.for'
C model.for
INCLUDE 'metric.for'
C metric.for
INCLUDE 'srfc.for'
C srfc.for
INCLUDE 'parm.for'
C parm.for
INCLUDE 'val.for'
C val.for
INCLUDE 'fit.for'
C fit.for
INCLUDE 'spsp.for'
C spsp.for
INCLUDE 'soft.for'
C soft.for
C
C=======================================================================
C