산넘어 산이네요...
ctrl+F7을 통해 컴파일을 수행하면 오류 및 경고없이 정상적으로 완료가 됩니다.
이후에 F7로 빌드를 수행하였을 때 오류 2개가 발생하네요.
> MSVCRTD.lib(crtexew.obj) : error LNK2019 :_WinMain@16 외부기호(참조위치:___tmianCRTStartup함수)에서 확인하지 못했습니다.
> D:\modeling\Debug\modeling.exe : fatal error LNK1120 : 1개의 확인할 수 없는 외부 참조입니다.
입력파일로 쓰인 true.ascii는 해당 소스파일 modeling.cpp와 같은 디렉토리에 위치하여 있습니다.
컴파일상의 오류가 아니어서 코드상에 잘못된 건 아닌거 같은데... 무엇이 문제인지 모르겠네요.
CUDA C를 위한 환경이라 lib파일도 cuda관련하여 추가해놓았고, 아래 코드는 CUDA C를 위한 C++코드라서 별다른 환경설정은
하지않았습니다.
추가적으로, 실수형으로 입력된 가로 nx, 새로 nz개의 텍스트파일로부터 배열에 입력받아 자료를 처리하고자 하는데
제가 작성한 코드로 구현이 가능한지도 확인부탁드립니다.
=====================================================================================================
#include <stdio.h>
#include <fstream>
#include <iostream>
#include <cmath>
using namespace std;
int main(){
#define nx 401
#define nz 201
#define nt 3000
int ix, iz, it, srcx, srcz;
double dt, dx, dz, a1, a2, a3, a4, a5, temp;
double u1[nx+2][nz+2]={0}, u2[nx+2][nz+2]={0}, u3[nx+2][nz+2]={0};
double v[nx+1][nz+1]={0}, f[nx+1][nz+1]={0}, w[nt+1];
dx=0.005;
dz=0.005;
dt=0.0005;
srcx=2; //source position parameter
srcz=1;
f[srcx][srcz]=1;
//----- true velocity model ---------------------------------------//
ifstream fin("true.ascii",ios::in); //읽기만 가능한 형태로 파일열기
for (ix=1;ix<=nx;ix++){
for (iz=1;iz<=nz;iz++){
fin >> temp; ★ 이 경우, 공백 또는 탭을 기준으로 하나의 숫자만 입력이 되는지 여부 확인?
v[ix][iz]=temp;
}
}
fin.close();
ofstream fout("s.ascii",ios::trunc); //이미 파일이 있는경우 삭제, 재생성
//----- forward modeling -------------------------------------------//
for (it=1;it<=nt;it++){
temp=it;
if (fmod(temp,100)==0){
printf("%d / %d \n",it, nt);
}
for (iz=1;iz<=nz;iz++){
for (ix=1;ix<=nx;ix++){
a1=2*u2[ix][iz] - u1[ix][iz];
a2=(v[ix][iz]*v[ix][iz])*(dt * dt);
a3=(u2[ix+1][iz]-2*u2[ix][iz]+u2[ix-1][iz])/(dx * dx);
a4=(u2[ix][iz+1]-2*u2[ix][iz]+u2[ix][iz-1])/(dz * dz);
a5=f[ix][iz]*w[it]/dx/dz;
u3[ix][iz]=a1+a2*(a3+a4+a5);
}
}
// Absorbing boundary condition----------------------------//
for (iz=1;iz<=nz;iz++){
u3[1][iz]=v[1][iz]*dt/dx*(u2[2][iz]-u2[1][iz]+u2[1][iz]);
u3[nx][iz]=v[nx][iz]*dt/dx*(u2[nx-1][iz]-u2[nx][iz]+u2[nx][iz]);
}
for (ix=1;ix<=nz;ix++){
//u3[ix][1]=v[ix][1]*dt/dz*(u2[ix][2]-u2[ix][1]+u2[ix][1]);
u3[ix][nz]=v[ix][nz]*dt/dz*(u2[ix][nz-1]-u2[ix][iz]+u2[ix][nz]);
}
// output--------------------------------------------------//
for (ix=1;ix<=nx;ix++){
fout<<u3[ix][srcz];
}
fout<<endl;
for (ix=1;ix<=nx;ix++){
for (iz=1;iz<=nz;iz++){
u1[ix][iz]=u2[ix][iz];
u2[ix][iz]=u3[ix][iz];
u3[ix][iz]=0;
}
}
}
fout.close();
}
|