/*----------------------------------------------------------------------------------------- * Copyright (C) 2016 For the list of authors, see file AUTHORS. * * This file is part of IFOS. * * IFOS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, version 2.0 of the License only. * * IFOS is distributed in the hope that it will be useful, * 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. * * You should have received a copy of the GNU General Public License * along with IFOS. See file COPYING and/or . -----------------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------ * Read acoustic model properties (vp,density) from files * * last update 29.06.2003 * ----------------------------------------------------------------------*/ /* This file contains function readmod, which has the purpose to read data from model-files for viscoelastic simulation */ #include "fd.h" void readmod_acoustic(float ** rho, float ** pi){ extern int NX, NY, NXG, NYG, POS[3], MYID, PARAMETERIZATION; extern char MFILE[STRING_SIZE]; extern FILE *FP; /* local variables */ float rhov, piv, vp; int i, j, ii, jj; FILE *fp_vp, *fp_rho; char filename[STRING_SIZE]; fprintf(FP,"\n...reading model information from modell-files...\n"); /* read density and seismic velocities */ /* ----------------------------------- */ if(PARAMETERIZATION==1){ 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 ! "); 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 ! "); } /* loop over global grid */ for (i=1;i<=NXG;i++){ for (j=1;j<=NYG;j++){ 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; } } } fclose(fp_vp); fclose(fp_rho); /* each PE writes his model to disk */ sprintf(filename,"%s.fdveps.pi",MFILE); writemod(filename,pi,3); MPI_Barrier(MPI_COMM_WORLD); if (MYID==0) mergemod(filename,3); sprintf(filename,"%s.fdveps.rho",MFILE); writemod(filename,rho,3); MPI_Barrier(MPI_COMM_WORLD); if (MYID==0) mergemod(filename,3); }