OpendTect  7.0
Public Member Functions | Private Member Functions | List of all members
ElasticModel Class Reference

A table of elastic prop layers with processing utilities Like the RefLayer class, uses SI values exclusively. More...

Inheritance diagram for ElasticModel:
[legend]

Public Member Functions

 ElasticModel ()
 
 ElasticModel (const ElasticModel &)
 
 ElasticModel (const ObjectSet< RefLayer > &)
 
 ~ElasticModel ()
 
double aboveThickness () const
 
void append (const ObjectSet< RefLayer > &) override
 
void block (float relthreshold, bool pvelonly)
 
void checkAndClean (int &firsterroridx, bool dodencheck=true, bool dosvelcheck=true, bool onlyinvalid=false)
 
ElasticModelclone () const override
 
ElasticModelcopyFrom (const ElasticModel &mdl, RefLayer::Type reqtyp)
 
bool createFromAI (const ZSampling &zrange, const float *ai, const float *si=nullptr, const float *den=nullptr)
 
bool createFromAI (const ZValueSeries &zsamp, const float *ai, const float *si=nullptr, const float *den=nullptr)
 
bool createFromVel (const ZSampling &zrange, const float *pvel, const float *svel=nullptr, const float *den=nullptr)
 
bool createFromVel (const ZValueSeries &zsamp, const float *pvel, const float *svel=nullptr, const float *den=nullptr)
 
void erase () override
 
float getLayerDepth (int layerix) const
 
RefLayer::Type getMinType () const
 
Interval< float > getTimeSampling (bool usevs=false) const
 
RefLayer::Type getType () const
 
bool getUpscaledBackus (RefLayer &, float theta=0.) const
 
bool getUpscaledByThicknessAvg (RefLayer &) const
 
bool getValues (bool isden, bool issvel, TypeSet< float > &) const
 
bool getValues (bool vel, bool den, bool svel, Array2D< float > &) const
 
void interpolate (bool dovp, bool doden, bool dovs)
 
bool isElastic () const
 
bool isHTI () const
 
bool isManaged () const override
 
int isOK (bool dodencheck=true, bool dosvelcheck=true, bool dofracrhocheck=true, bool dofracazicheck=true) const
 
bool isVTI () const
 
void mergeSameLayers ()
 
ElasticModeloperator-= (RefLayer *) override
 
ElasticModeloperator= (const ElasticModel &)
 
RefLayerpop () override
 
RefLayerremoveAndTake (int, bool kporder=true)
 
void removeRange (int from, int to) override
 
RefLayerremoveSingle (int, bool kporder=true) override
 
RefLayerreplace (int, RefLayer *) override
 
void setMaxThickness (float maxthickness)
 
ElasticModelsetOverburden (double thickness, double starttime)
 
double startTime () const
 
void upscale (float maxthickness)
 
void upscaleByN (int nblock)
 
- Public Member Functions inherited from ObjectSet< RefLayer >
 ObjectSet ()
 
 ObjectSet (const ObjectSet &)
 
 ObjectSet (RefLayer *)
 
 ObjectSet (RefLayer *, RefLayer *)
 
 ObjectSet (RefLayer *, RefLayer *, RefLayer *)
 
virtual ~ObjectSet ()
 
ObjectSetadd (RefLayer *t)
 
bool addIfNew (RefLayer *)
 
void allowNull (bool yn=true)
 
virtual void append (const ObjectSet &)
 
iterator begin ()
 
const_iterator begin () const
 
const_iterator cbegin () const
 
const_iterator cend () const
 
ObjectSetclone () const override
 
virtual void copy (const ObjectSet &)
 
bool empty () const
 
iterator end ()
 
const_iterator end () const
 
void erase () override
 
RefLayerfirst ()
 
const RefLayerfirst () const
 
virtual RefLayerget (const RefLayer *) const
 check & unconst More...
 
virtual RefLayerget (idx_type)
 
virtual const RefLayerget (idx_type) const
 
idx_type getIdx (const_iterator it) const
 
idx_type getIdx (iterator it) const
 
virtual idx_type indexOf (const RefLayer *) const
 
virtual void insertAfter (RefLayer *newptr, idx_type)
 
virtual void insertAt (RefLayer *newptr, idx_type)
 
virtual bool isPresent (const RefLayer *) const
 
RefLayerlast ()
 
const RefLayerlast () const
 
size_type max_size () const
 
std::int64_t nrItems () const override
 
bool nullAllowed () const
 
bool operator!= (const ObjectSet &oth) const
 
ObjectSetoperator+= (RefLayer *t)
 
virtual ObjectSetoperator-= (RefLayer *)
 
ObjectSetoperator= (const ObjectSet &)
 
bool operator== (const ObjectSet &) const
 
const RefLayeroperator[] (const RefLayer *t) const
 
RefLayeroperator[] (idx_type i)
 
const RefLayeroperator[] (idx_type i) const
 
void plainErase ()
 
void push (RefLayer *t)
 
virtual RefLayerreplace (idx_type, RefLayer *)
 
void reverse () override
 
void setNullAllowed (bool yn=true)
 
size_type size () const
 
void swap (idx_type, idx_type)
 
void swap (ObjectSet &oth)
 
void swapItems (std::int64_t i1, std::int64_t i2) override
 
void useIndexes (const idx_type *)
 
bool validIdx (std::int64_t) const override
 
- Public Member Functions inherited from OD::Set
virtual ~Set ()
 
bool isEmpty () const
 
void setEmpty ()
 

Private Member Functions

bool doBlocking (float threshold, bool pvelonly, TypeSet< Interval< int > > &blocks) const
 
bool getRatioValues (bool vel, bool den, bool svel, Array2D< float > &ratiovals, Array2D< float > &vals) const
 
void removeSpuriousLayers (float zstep)
 
void removeSpuriousLayers (float zstep, bool zistime)
 

Additional Inherited Members

- Public Types inherited from ObjectSet< RefLayer >
typedef impl_type::const_iterator const_iterator
 
typedef const value_typeconst_reference
 
typedef size_type difference_type
 
typedef size_type idx_type
 
typedef impl_type::iterator iterator
 
typedef RefLayer object_type
 
typedef value_typereference
 
typedef int size_type
 
typedef RefLayervalue_type
 
- Static Public Member Functions inherited from OD::Set
static std::int32_t maxIdx32 ()
 
static std::int64_t maxIdx64 ()
 
- Protected Types inherited from ObjectSet< RefLayer >
typedef VectorAccess< RefLayer *, size_typeimpl_type
 
- Protected Member Functions inherited from ObjectSet< RefLayer >
virtual ObjectSetdoAdd (RefLayer *)
 
- Protected Attributes inherited from ObjectSet< RefLayer >
bool allow0_
 
impl_type vec_
 

Detailed Description

A table of elastic prop layers with processing utilities Like the RefLayer class, uses SI values exclusively.

<>

Constructor & Destructor Documentation

◆ ElasticModel() [1/3]

ElasticModel::ElasticModel ( )

◆ ElasticModel() [2/3]

ElasticModel::ElasticModel ( const ObjectSet< RefLayer > &  )

◆ ElasticModel() [3/3]

ElasticModel::ElasticModel ( const ElasticModel )

◆ ~ElasticModel()

ElasticModel::~ElasticModel ( )

Member Function Documentation

◆ aboveThickness()

double ElasticModel::aboveThickness ( ) const

◆ append()

void ElasticModel::append ( const ObjectSet< RefLayer > &  )
override

◆ block()

void ElasticModel::block ( float  relthreshold,
bool  pvelonly 
)

Merged consecutive layers with same properties.

◆ checkAndClean()

void ElasticModel::checkAndClean ( int &  firsterroridx,
bool  dodencheck = true,
bool  dosvelcheck = true,
bool  onlyinvalid = false 
)

Get several properties, in the order vel - den - svel

◆ clone()

ElasticModel* ElasticModel::clone ( ) const
inlineoverridevirtual

Implements OD::Set.

Reimplemented in ElasticModelOv.

◆ copyFrom()

ElasticModel& ElasticModel::copyFrom ( const ElasticModel mdl,
RefLayer::Type  reqtyp 
)
Parameters
mdlinput model (can be itself)
reqtypreturn type for all layers in model

◆ createFromAI() [1/2]

bool ElasticModel::createFromAI ( const ZSampling zrange,
const float *  ai,
const float *  si = nullptr,
const float *  den = nullptr 
)

◆ createFromAI() [2/2]

bool ElasticModel::createFromAI ( const ZValueSeries zsamp,
const float *  ai,
const float *  si = nullptr,
const float *  den = nullptr 
)

creates an ElasticModel from sampled impedance /param zsamp Times in zsamp must be TWT in seconds Depths in zsamp must be TVDSD in meters /param ai Acoustic Impedance in SI units /param si Shear Impedance in SI units /param den bulk density in kg/m3

◆ createFromVel() [1/2]

bool ElasticModel::createFromVel ( const ZSampling zrange,
const float *  pvel,
const float *  svel = nullptr,
const float *  den = nullptr 
)

◆ createFromVel() [2/2]

bool ElasticModel::createFromVel ( const ZValueSeries zsamp,
const float *  pvel,
const float *  svel = nullptr,
const float *  den = nullptr 
)

creates an ElasticModel from sampled interval velocities /param zsamp Times in zsamp must be TWT in seconds Depths in zsamp must be TVDSD in meters /param pvel compressional velocities in m/s /param svel shear velocities in m/s /param den bulk density in kg/m3

◆ doBlocking()

bool ElasticModel::doBlocking ( float  threshold,
bool  pvelonly,
TypeSet< Interval< int > > &  blocks 
) const
private

Computes first derivative of the elastic properties May also return the input values

◆ erase()

void ElasticModel::erase ( )
overridevirtual

Implements OD::Set.

◆ getLayerDepth()

float ElasticModel::getLayerDepth ( int  layerix) const

◆ getMinType()

RefLayer::Type ElasticModel::getMinType ( ) const

◆ getRatioValues()

bool ElasticModel::getRatioValues ( bool  vel,
bool  den,
bool  svel,
Array2D< float > &  ratiovals,
Array2D< float > &  vals 
) const
private

◆ getTimeSampling()

Interval<float> ElasticModel::getTimeSampling ( bool  usevs = false) const

◆ getType()

RefLayer::Type ElasticModel::getType ( ) const

◆ getUpscaledBackus()

bool ElasticModel::getUpscaledBackus ( RefLayer ,
float  theta = 0. 
) const

compute an upscaled elastic layer from an elastic model using simple weighted averaging. The thickness of the input and output remains constant. returns false if the input model does not contain a single valid input layer computes an upscaled elastic layer from an elastic model using backus upscaling method. The thickness of the input and output remains constant. returns false if the input model does not contain a single valid input layer

Parameters
thetaIncidence angle in radians

◆ getUpscaledByThicknessAvg()

bool ElasticModel::getUpscaledByThicknessAvg ( RefLayer ) const

Block elastic model so that no blocks have larger difference than the threshold. Attempts will be made to put boundaries at large changes.

Parameters
relthreshold
pvelonlyWill use density and SVel as well if false

◆ getValues() [1/2]

bool ElasticModel::getValues ( bool  isden,
bool  issvel,
TypeSet< float > &   
) const

Checks if all layers have valid property values returns index of first invalid layer

◆ getValues() [2/2]

bool ElasticModel::getValues ( bool  vel,
bool  den,
bool  svel,
Array2D< float > &   
) const

Get one of the properties

◆ interpolate()

void ElasticModel::interpolate ( bool  dovp,
bool  doden,
bool  dovs 
)

◆ isElastic()

bool ElasticModel::isElastic ( ) const

◆ isHTI()

bool ElasticModel::isHTI ( ) const

◆ isManaged()

bool ElasticModel::isManaged ( ) const
inlineoverridevirtual

Reimplemented from ObjectSet< RefLayer >.

◆ isOK()

int ElasticModel::isOK ( bool  dodencheck = true,
bool  dosvelcheck = true,
bool  dofracrhocheck = true,
bool  dofracazicheck = true 
) const

◆ isVTI()

bool ElasticModel::isVTI ( ) const

◆ mergeSameLayers()

void ElasticModel::mergeSameLayers ( )

Ensures that all layers in the elastic model are not thicker than a maximum thickness. Splits the blocks if necessary

◆ operator-=()

ElasticModel& ElasticModel::operator-= ( RefLayer )
override

◆ operator=()

ElasticModel& ElasticModel::operator= ( const ElasticModel )

◆ pop()

RefLayer* ElasticModel::pop ( )
overridevirtual

Reimplemented from ObjectSet< RefLayer >.

◆ removeAndTake()

RefLayer* ElasticModel::removeAndTake ( int  ,
bool  kporder = true 
)

◆ removeRange()

void ElasticModel::removeRange ( int  from,
int  to 
)
overridevirtual

Reimplemented from ObjectSet< RefLayer >.

◆ removeSingle()

RefLayer* ElasticModel::removeSingle ( int  vidx,
bool  keep_order = true 
)
overridevirtual
Returns
the removed pointer.

Reimplemented from ObjectSet< RefLayer >.

◆ removeSpuriousLayers() [1/2]

void ElasticModel::removeSpuriousLayers ( float  zstep)
private

◆ removeSpuriousLayers() [2/2]

void ElasticModel::removeSpuriousLayers ( float  zstep,
bool  zistime 
)
private

If a layer thickness is strictly identical to zstep, maybe split that layer over the last/previous layers /param zstep sampling rate in either time or depth (meter) /param zistime ZDomain corresponding to zstep

◆ replace()

RefLayer* ElasticModel::replace ( int  ,
RefLayer  
)
override

◆ setMaxThickness()

void ElasticModel::setMaxThickness ( float  maxthickness)

Smashes every consecutive set of nblock layers into one output layer

◆ setOverburden()

ElasticModel& ElasticModel::setOverburden ( double  thickness,
double  starttime 
)

◆ startTime()

double ElasticModel::startTime ( ) const

◆ upscale()

void ElasticModel::upscale ( float  maxthickness)

Replaces all undefined or invalid values

◆ upscaleByN()

void ElasticModel::upscaleByN ( int  nblock)

Ensures a model does not have layers below a given thickness last layer may not comply though


Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B.V. 1995-2024