readmod_elastic.c 5.64 KB
Newer Older
Tilman Steinweg's avatar
Tilman Steinweg committed
1
/*-----------------------------------------------------------------------------------------
Florian Wittkamp's avatar
Florian Wittkamp committed
2
 * Copyright (C) 2016  For the list of authors, see file AUTHORS.
Tilman Steinweg's avatar
Tilman Steinweg 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 Steinweg's avatar
Tilman Steinweg 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 Steinweg's avatar
Tilman Steinweg 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 Steinweg's avatar
Tilman Steinweg 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 Steinweg's avatar
Tilman Steinweg committed
18 19

/*------------------------------------------------------------------------
20
 *   Read elastic model properties (vp,vs,density) from files
Tilman Steinweg's avatar
Tilman Steinweg 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 Steinweg's avatar
Tilman Steinweg committed
27 28 29 30

#include "fd.h"

void readmod_elastic(float  **  rho, float **  pi, float **  u){
31
    
32
    extern int NX, NY, NXG, NYG,  POS[3], MYID, PARAMETERIZATION,WAVETYPE;
33 34 35 36 37 38 39 40 41 42 43 44 45
    extern char  MFILE[STRING_SIZE];
    extern FILE *FP;
    
    
    /* local variables */
    float rhov, muv, piv, vp, vs;
    int i, j, ii, jj;
    FILE *fp_vs, *fp_vp, *fp_rho;
    char filename[STRING_SIZE];
    
    
    
    
Florian Wittkamp's avatar
Florian Wittkamp committed
46
	   fprintf(FP,"\n...reading model information from model-files...\n");
47
    
Tilman Steinweg's avatar
Tilman Steinweg committed
48 49
	   /* read density and seismic velocities */
	   /* ----------------------------------- */
50
	   if(PARAMETERIZATION==1){
51 52 53 54 55 56
           
           if(WAVETYPE==1||WAVETYPE==3){
               fprintf(FP,"\t Vp:\n\t %s.vp\n\n",MFILE);
               sprintf(filename,"%s.vp",MFILE);
               fp_vp=fopen(filename,"r");
               if (fp_vp==NULL) err(" Could not open model file for Vp ! ");
Tilman Steinweg's avatar
Tilman Steinweg committed
57
           }
58 59 60 61 62 63 64 65 66 67 68 69 70 71
           
           
           fprintf(FP,"\t Vs:\n\t %s.vs\n\n",MFILE);
           sprintf(filename,"%s.vs",MFILE);
           fp_vs=fopen(filename,"r");
           if (fp_vs==NULL) err(" Could not open model file for Vs ! ");
           
           fprintf(FP,"\t Density:\n\t %s.rho\n\n",MFILE);
           sprintf(filename,"%s.rho",MFILE);
           fp_rho=fopen(filename,"r");
           if (fp_rho==NULL) err(" Could not open model file for densities ! ");
           
           
       }
Tilman Steinweg's avatar
Tilman Steinweg committed
72 73 74
	   
	   /* read density and Lame parameters */
	   /* ----------------------------------- */
75
	   if(PARAMETERIZATION==3){
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
           fprintf(FP,"\t Lame parameter lambda:\n\t %s.lam\n\n",MFILE);
           sprintf(filename,"%s.lam",MFILE);
           fp_vp=fopen(filename,"r");
           if (fp_vp==NULL) err(" Could not open model file for Lame parameter lambda ! ");
           
           
           fprintf(FP,"\t Lame parameter mu:\n\t %s.mu\n\n",MFILE);
           sprintf(filename,"%s.mu",MFILE);
           fp_vs=fopen(filename,"r");
           if (fp_vs==NULL) err(" Could not open model file for Lame parameter mu ! ");
           
           fprintf(FP,"\t Density:\n\t %s.rho\n\n",MFILE);
           sprintf(filename,"%s.rho",MFILE);
           fp_rho=fopen(filename,"r");
           if (fp_rho==NULL) err(" Could not open model file for densities ! ");
       }
Tilman Steinweg's avatar
Tilman Steinweg committed
92
	   
93 94 95 96 97 98
    
    /* loop over global grid */
    for (i=1;i<=NXG;i++){
        for (j=1;j<=NYG;j++){
            
            if(WAVETYPE==1||WAVETYPE==3){
Florian Wittkamp's avatar
Florian Wittkamp committed
99 100 101 102 103
                
                if(feof(fp_vp)){
                    err("Model file VP is to small. Check dimensions NX*NY of file.");
                }
                
104 105 106
                fread(&vp, sizeof(float), 1, fp_vp);
                
            }
Florian Wittkamp's avatar
Florian Wittkamp committed
107 108 109 110 111
            
            if(feof(fp_vs) && feof(fp_rho)){
                err("Model file VS or RHO is to small. Check dimensions NX*NY of file.");
            }
            
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
            fread(&vs, sizeof(float), 1, fp_vs);
            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;
                
                u[jj][ii]=vs;
                rho[jj][ii]=rhov;
                if(WAVETYPE==1||WAVETYPE==3){
                    pi[jj][ii]=vp;
                }
                
                
                
            }
        }
    }
    if(WAVETYPE==1||WAVETYPE==3){
Florian Wittkamp's avatar
Florian Wittkamp committed
135 136 137 138 139
        
        fread(&vp, sizeof(float), 1, fp_vp);
        if(!feof(fp_vp)){
            err("Model file VP is to big. Check dimensions NX*NY of file.");
        }
140 141
        fclose(fp_vp);
    }
Florian Wittkamp's avatar
Florian Wittkamp committed
142 143 144 145 146 147
    
    fread(&vs, sizeof(float), 1, fp_vs);
    fread(&rho, sizeof(float), 1, fp_rho);
    if(!feof(fp_vs) && !feof(fp_rho)){
        err("Model file VS or RHO is to big. Check dimensions NX*NY of file.");
    }
148 149 150 151 152 153 154
    fclose(fp_vs);
    fclose(fp_rho);
    
    
    
    /* each PE writes his model to disk */
    if(WAVETYPE==1||WAVETYPE==3){
155 156
        if(PARAMETERIZATION==1) sprintf(filename,"%s.out.vp",MFILE);
        if(PARAMETERIZATION==3) sprintf(filename,"%s.out.pi",MFILE);
Florian Wittkamp's avatar
Florian Wittkamp committed
157
        write_matrix_disk(pi, filename);
158 159
    }
    
160 161
    if(PARAMETERIZATION==1) sprintf(filename,"%s.out.vs",MFILE);
    if(PARAMETERIZATION==3) sprintf(filename,"%s.out.mu",MFILE);
Florian Wittkamp's avatar
Florian Wittkamp committed
162
    write_matrix_disk(u, filename);
163 164
    
    sprintf(filename,"%s.out.rho",MFILE);
Florian Wittkamp's avatar
Florian Wittkamp committed
165
    write_matrix_disk(rho, filename);
166
    
Tilman Steinweg's avatar
Tilman Steinweg committed
167 168 169 170 171
}