#include "gridpp.hh" #include "gridops.hh" #include "gtest/gtest.h" #include "adjtest.hh" #include "functions.hh" #include "mpiserialfo.hh" //#define VERBOSE #ifdef IWAVE_USE_MPI typedef TSOpt::MPIGridSpace myGridSpace; #else typedef TSOpt::GridSpace myGridSpace; #endif namespace { using TSOpt::GridDCF; using TSOpt::GridDC; using TSOpt::GridSpace; using TSOpt::GridWindowOp; using TSOpt::GridDerivOp; using TSOpt::GridExtendOp; using RVL::AssignFilename; using RVL::parse; using RVL::RVLException; using RVL::RVLAssignConst; using RVL::RVLMax; using RVL::RVLMin; using RVL::MPISerialFunctionObjectRedn; using RVL::OperatorEvaluation; using RVL::RVLRandomize; void create_hfile(string hfile, grid g) { if (hfile.size()>120) { RVLException e; e<<"Error: create_hfile\n"; e<<"filename "< x(sp); RVLAssignConst ac(1.0); x.eval(ac); ireal lres = sqrt(11.0*21.0*41.0*0.01*0.01); ireal rres = x.norm(); EXPECT_LT(1.0e-6,fabs(lres-rres)); iwave_fdestroy(); unlink(fname.c_str()); string dname=fname+"@"; unlink(dname.c_str()); } TEST_F(GridTest, GridSpace_Vector_norm_incore) { // create test file fname="test0.rsf"; create_hfile(fname,g); myGridSpace sp(fname,"bulkmod",true); Vector x(sp); RVLAssignConst ac(1.0); x.eval(ac); ireal lres = sqrt(11.0*21.0*41.0*0.01*0.01); ireal rres = x.norm(); EXPECT_LT(1.0e-6,fabs(lres-rres)); string dname=fname+"@"; iwave_fdestroy(); unlink(fname.c_str()); unlink(dname.c_str()); } TEST_F(GridTest, GridSpace_Assign_copy) { string bgname="test2.rsf"; create_hfile(bgname,g2); myGridSpace rng(bgname,"fungus"); Vector bg(rng); AssignFilename bgaf("test1.rsf"); bg.eval(bgaf); RVLAssignConst bgac(1.0); bg.eval(bgac); Vector tmp(rng); tmp.copy(bg); float a = sqrt(get_global_datasize_grid(g2)*get_global_cellvol_grid(g2)); EXPECT_GT(1.0e-6,fabs(a-tmp.norm())); iwave_fdestroy(); unlink(bgname.c_str()); string dname=bgname+"@"; unlink(dname.c_str()); } TEST_F(GridTest, GridSpace_GridWindowOp_ZeroTaper) { string bgname="test2.rsf"; create_hfile(bgname,g2); string wname="test3.rsf"; create_hfile(wname,g3); myGridSpace rng(bgname,"fungus"); myGridSpace dom(wname,"fungus"); Vector bg(rng); AssignFilename bgaf(bgname); bg.eval(bgaf); RVLAssignConst bgac(1.0); bg.eval(bgac); Vector w(dom); AssignFilename waf(wname); w.eval(waf); RVLAssignConst wac(2.0); w.eval(wac); Vector x(rng); string xname="wd.rsf"; AssignFilename xaf(xname); x.eval(xaf); GridWindowOp op(dom,bg); OperatorEvaluation opeval(op,w); x.copy(opeval.getValue()); RVLMax mx; MPISerialFunctionObjectRedn mpimx(mx); x.eval(mpimx); RVLMin mn; MPISerialFunctionObjectRedn mpimn(mn); x.eval(mpimn); EXPECT_FLOAT_EQ(mpimx.getValue(),3.0f); EXPECT_FLOAT_EQ(mpimn.getValue(),1.0f); iwave_fdestroy(); string dname; dname=bgname+"@"; unlink(bgname.c_str()); unlink(dname.c_str()); dname=wname+"@"; unlink(wname.c_str()); unlink(dname.c_str()); dname=xname+"@"; unlink(xname.c_str()); unlink(dname.c_str()); } TEST_F(GridTest, GridSpace_GridWindowOp_2Pt3PtTaper) { try { string bgname="test1.rsf"; create_hfile(bgname,g2); string wname="test2.rsf"; create_hfile(wname,g3); myGridSpace rng(bgname,"fungus"); myGridSpace dom(wname,"fungus"); Vector bg(rng); AssignFilename bgaf(bgname); bg.eval(bgaf); RVLAssignConst bgac(1.0); bg.eval(bgac); Vector w(dom); AssignFilename waf(wname); w.eval(waf); RVLAssignConst wac(2.0); w.eval(wac); Vector x(rng); string xname="wd23.rsf"; AssignFilename xaf(xname); x.eval(xaf); RPNT tap; for (int i=0;i opeval(op,w); x.copy(opeval.getValue()); RVLMax mx; MPISerialFunctionObjectRedn mpimx(mx); x.eval(mpimx); RVLMin mn; MPISerialFunctionObjectRedn mpimn(mn); x.eval(mpimn); EXPECT_FLOAT_EQ(mpimx.getValue(),3.0f); EXPECT_FLOAT_EQ(mpimn.getValue(),1.0f); iwave_fdestroy(); string dname; dname=bgname+"@"; unlink(bgname.c_str()); unlink(dname.c_str()); dname=wname+"@"; unlink(wname.c_str()); unlink(dname.c_str()); dname=xname+"@"; unlink(xname.c_str()); unlink(dname.c_str()); } catch (RVLException & e) { e.write(cerr); } } TEST_F(GridTest, GridSpace_GridWindowOp_Adjtest) { try { string bgname="test1.rsf"; create_hfile(bgname,g1); string wname="test2.rsf"; create_hfile(wname,g2); myGridSpace rng(bgname,"fungus"); myGridSpace dom(wname,"fungus"); Vector bg(rng); AssignFilename bgaf(bgname); bg.eval(bgaf); RVLAssignConst bgac(1.0); bg.eval(bgac); Vector w(dom); AssignFilename waf(wname); w.eval(waf); RVLAssignConst wac(2.0); w.eval(wac); Vector x(rng); string xname="wd23.rsf"; AssignFilename xaf(xname); x.eval(xaf); RPNT tap; for (int i=0;i opeval(op,w); RVLRandomize rnd(getpid(),-1.0,1.0); std::stringstream res; EXPECT_EQ(true,AdjointTest(opeval.getDeriv(),rnd,res)); #ifdef VERBOSE cout< srnd(getpid(),-1.0,1.0); RVL::MPISerialFunctionObject rnd(srnd); #else RVLRandomize rnd(getpid(),-1.0,1.0); #endif std::stringstream res; EXPECT_EQ(true,AdjointTest(op,rnd,res)); #ifdef VERBOSE cout< rnd(getpid(),-1.0,1.0); std::stringstream res; EXPECT_EQ(true,AdjointTest(op,rnd,res)); #ifdef VERBOSE cout< rnd(getpid(),-1.0,1.0); std::stringstream res; EXPECT_EQ(true,AdjointTest(op,rnd,res)); #ifdef VERBOSE cout< rnd(getpid(),-1.0,1.0); std::stringstream res; EXPECT_EQ(true,AdjointTest(op,rnd,res)); #ifdef VERBOSE cout< ac(1.0f); Vector dvec(dom); Vector rvec(rng); dvec.eval(ac); rvec.zero(); op.applyOp(dvec,rvec); std::stringstream res; EXPECT_EQ(10*20*2.0f,dvec.normsq()); EXPECT_EQ(10*20*30*6.0f,rvec.normsq()); #ifdef VERBOSE cout< rnd(getpid(),-1.0,1.0); std::stringstream res; EXPECT_EQ(true,AdjointTest(op,rnd,res)); #ifdef VERBOSE cout< x(sp); RVLAssignConst ac(1.0); x.eval(ac); ireal lres = sqrt(get_extended_cellvol_grid(eg0)*get_extended_datasize_grid(eg0)); ireal rres = x.norm(); // cerr<<"lres="< x(sp); x.eval(afin); RVLAssignConst ac(1.0); x.eval(ac); // cerr<<"normsq of x = "< y(sp); AssignFilename afout(file_out); y.eval(afout); size_t ntotal = get_panelnum_grid(g1)*get_extended_datasize_grid(g1); float * a = (float *)usermalloc_(ntotal*sizeof(float)); for (int i=0;i x(sp); x.eval(afin); RVLAssignConst ac(1.0); x.eval(ac); // cerr<<"normsq of x = "< y(sp); AssignFilename afout(file_out); y.eval(afout); float * a = (float *)usermalloc_(get_extended_datasize_grid(eg0)*sizeof(float)); for (int i=0;i