20#ifndef _GIMLI_DC1DMODELLING__H
21#define _GIMLI_DC1DMODELLING__H
25#include "meshgenerators.h"
26#include "modellingbase.h"
27#include "vectortemplates.h"
41 DC1dModelling(
size_t nlayers,
const RVector & am,
const RVector & an,
42 const RVector & bm,
const RVector & bn,
bool verbose=
false);
45 DC1dModelling(
size_t nlayers,
const RVector & ab2,
const RVector & mn2,
56 RVector
response(
const RVector & model);
58 RVector rhoa(
const RVector & rho,
const RVector & thk);
60 RVector kern1d(
const RVector & lam,
const RVector & rho,
const RVector & h);
62 RVector pot1d(
const RVector & R,
const RVector & rho,
const RVector & thk);
64 inline RVector getK() {
return k_; }
66 inline RVector geometricFactor() {
return k_; }
68 template <
class Vec > Vec rhoaT(
const Vec & rho,
const RVector & thk){
70 tmp = pot1dT<Vec>(am_, rho, thk);
71 tmp -= pot1dT<Vec>(an_, rho, thk);
72 tmp -= pot1dT<Vec>(bm_, rho, thk);
73 tmp += pot1dT<Vec>(bn_, rho, thk);
74 return tmp * k_ + rho[ 0 ];
76 template <
class Vec > Vec kern1dT(
const RVector & lam,
const Vec & rho,
78 size_t nr = rho.size();
79 size_t nl = lam.size();
80 Vec
z(nl, rho[ nr - 1 ]);
83 for (
int i = nr - 2; i >= 0; i--) {
84 p = (
z - rho[ i ]) / (
z + rho[ i ]);
85 th = tanh(lam * h[ i ]);
86 z = (
z + toComplex(th) * rho[ i ]) / (
z * th + rho[ i ]) * rho[ i ];
89 Vec ehl(p * RVector(exp(-2.0 * lam * h[0])));
90 return ehl / (1.0 - ehl) * rho[0] / 2.0 / PI ;
92 template <
class Vec > Vec pot1dT(
const RVector & R,
const Vec & rho,
97 for (
size_t i = 0; i < R.size(); i++) {
99 z0[ i ] = sum(myw_ * kern1dT<Vec>(myx_ / rabs[i],
100 rho, thk) * 2.0) / rabs[i];
133 const RVector & am,
const RVector & an,
134 const RVector & bm,
const RVector & bn,
bool verbose=
false);
137 DC1dModellingC(
size_t nlayers,
const RVector & ab2,
const RVector & mn2,
143 RVector
response(
const RVector & model);
151 DC1dRhoModelling(
const RVector & thk,
const RVector & am,
152 const RVector & an,
const RVector & bm,
153 const RVector & bn,
bool verbose=
false)
158 DC1dRhoModelling(
const RVector & thk,
const RVector & ab2,
159 const RVector & mn2,
bool verbose =
false)
170 virtual ~DC1dRhoModelling() { }
172 RVector
response(
const RVector & rho) {
return rhoa(rho, thk_); }
175 return RVector(thk_.size() + 1, meanrhoa_);
RVector response(const RVector &model)
Definition dc1dmodelling.cpp:426
DC1dModellingC(size_t nlayers, const RVector &am, const RVector &an, const RVector &bm, const RVector &bn, bool verbose=false)
Definition dc1dmodelling.cpp:412
DC1dModelling(size_t nlayers, const RVector &am, const RVector &an, const RVector &bm, const RVector &bn, bool verbose=false)
Definition dc1dmodelling.cpp:27
RVector createDefaultStartModel()
Definition dc1dmodelling.cpp:76
void init_()
Definition dc1dmodelling.cpp:132
RVector response(const RVector &model)
Definition dc1dmodelling.cpp:82
RVector createDefaultStartModel()
Definition dc1dmodelling.h:174
RVector response(const RVector &rho)
Definition dc1dmodelling.h:172
DataContainer to store, load and save data in the GIMLi unified data format.
Definition datacontainer.h:48
bool verbose() const
Definition modellingbase.h:48
void setMesh(const Mesh &mesh, bool ignoreRegionManager=false)
Definition modellingbase.cpp:179
DataContainer & data() const
Definition modellingbase.cpp:125
GIMLi main namespace for the Geophyiscal Inversion and Modelling Library.
Definition baseentity.h:24
RVector z(const R3Vector &rv)
Definition pos.cpp:120
Mesh createMesh1D(Index nCells, Index nClones)
Definition meshgenerators.cpp:49