readmod_acoustic.c 3.54 KB
Newer Older
tilman.metz's avatar
tilman.metz committed
1
/*-----------------------------------------------------------------------------------------
2
 * Copyright (C) 2016  For the list of authors, see file AUTHORS.
tilman.metz's avatar
tilman.metz committed
3
 *
Florian Wittkamp's avatar
Florian Wittkamp committed
4
 * This file is part of IFOS.
5
 *
Florian Wittkamp's avatar
Florian Wittkamp committed
6
 * IFOS is free software: you can redistribute it and/or modify
tilman.metz's avatar
tilman.metz committed
7 8
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, version 2.0 of the License only.
9
 *
Florian Wittkamp's avatar
Florian Wittkamp committed
10
 * IFOS is distributed in the hope that it will be useful,
tilman.metz's avatar
tilman.metz committed
11 12 13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
14
 *
tilman.metz's avatar
tilman.metz committed
15
 * You should have received a copy of the GNU General Public License
Florian Wittkamp's avatar
Florian Wittkamp committed
16
 * along with IFOS. See file COPYING and/or <http://www.gnu.org/licenses/gpl-2.0.html>.
17
 -----------------------------------------------------------------------------------------*/
tilman.metz's avatar
tilman.metz committed
18 19

/*------------------------------------------------------------------------
20
 *   Read acoustic model properties (vp,density) from files
tilman.metz's avatar
tilman.metz committed
21 22 23 24 25
 *
 *  ----------------------------------------------------------------------*/


/* This file contains function readmod, which has the purpose
26
 to read data from model-files for viscoelastic simulation */
tilman.metz's avatar
tilman.metz committed
27 28 29 30

#include "fd.h"

void readmod_acoustic(float  **  rho, float **  pi){
31 32 33 34 35 36 37
    
    extern int NX, NY, NXG, NYG,  POS[3], MYID, PARAMETERIZATION;
    extern char  MFILE[STRING_SIZE];
    extern FILE *FP;
    
    
    /* local variables */
38
    float rhov, vp;
39
    int i, j, ii, jj;
40
    FILE *fp_vp, *fp_rho = NULL;
41 42 43 44 45
    char filename[STRING_SIZE];
    
    
	   fprintf(FP,"\n...reading model information from model-files...\n");
    
tilman.metz's avatar
tilman.metz committed
46 47
	   /* read density and seismic velocities */
	   /* ----------------------------------- */
48
	   if(PARAMETERIZATION==1){
49 50 51
           fprintf(FP,"\t Vp:\n\t %s.vp\n\n",MFILE);
           sprintf(filename,"%s.vp",MFILE);
           fp_vp=fopen(filename,"r");
52
           if (fp_vp==NULL) declare_error(" Could not open model file for Vp ! ");
53 54 55 56
           
           fprintf(FP,"\t Density:\n\t %s.rho\n\n",MFILE);
           sprintf(filename,"%s.rho",MFILE);
           fp_rho=fopen(filename,"r");
57
           if (fp_rho==NULL) declare_error(" Could not open model file for densities ! ");
58
       }
tilman.metz's avatar
tilman.metz committed
59
	   
60 61 62 63 64 65
    
    /* loop over global grid */
    for (i=1;i<=NXG;i++){
        for (j=1;j<=NYG;j++){
            
            if(feof(fp_vp) && feof(fp_rho)){
66
                declare_error("Model file VP or RHO is to small. Check dimensions NX*NY of file.");
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
            }
            
            fread(&vp, sizeof(float), 1, fp_vp);
            fread(&rhov, sizeof(float), 1, fp_rho);
            
            /* only the PE which belongs to the current global gridpoint
             is saving model parameters in his local arrays */
            if ((POS[1]==((i-1)/NX)) &&
                (POS[2]==((j-1)/NY))){
                ii=i-POS[1]*NX;
                jj=j-POS[2]*NY;
                
                pi[jj][ii]=vp;
                rho[jj][ii]=rhov;
                
            }
        }
    }
    
    
    fread(&vp, sizeof(float), 1, fp_vp);
    if(!feof(fp_vp)){
89
        declare_error("Model file VP is to big. Check dimensions NX*NY of file.");
90 91 92 93 94
    }
    fclose(fp_vp);
    
    fread(&rho, sizeof(float), 1, fp_rho);
    if(!feof(fp_rho)){
95
        declare_error("Model file RHO is to big. Check dimensions NX*NY of file.");
96 97 98 99 100 101 102 103 104 105
    }
    fclose(fp_rho);
    
    /* Write model to file */
    sprintf(filename,"%s.out.vp",MFILE);
    write_matrix_disk(pi, filename);
    
    sprintf(filename,"%s.out.rho",MFILE);
    write_matrix_disk(rho, filename);
    
tilman.metz's avatar
tilman.metz committed
106
}