OpendTect 8.0
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | Private Attributes | 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...

#include <ailayer.h>

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 ZValueSeries &zsamp, const float *ai, const float *si=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, bool extendup=true)
 
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
 
virtual RefLayerget (idx_type)
 
virtual const RefLayerget (idx_type) const
 
virtual size_type getCapacity () 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
 
od_int64 nrItems () const override
 
bool nullAllowed () const
 
bool operator!= (const ObjectSet &oth) const
 
ObjectSetoperator+= (RefLayer *t)
 
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)
 
void reverse () override
 
virtual bool setCapacity (size_type, bool withmargin)
 Allocates mem only, no size() change.
 
void setNullAllowed (bool yn=true)
 
virtual bool setSize (size_type)
 
size_type size () const
 
void swap (idx_type, idx_type)
 
void swap (ObjectSet &oth)
 
void swapItems (od_int64 i1, od_int64 i2) override
 
void useIndexes (const idx_type *)
 
bool validIdx (od_int64) 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, bool zistime)
 

Private Attributes

double abovethickness_ = mUdf(double)
 
double starttime_ = mUdf(double)
 

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 od_int32 maxIdx32 ()
 
static od_int64 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.

◆ copyFrom()

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

◆ createFromAI()

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()

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 * )
overridevirtual

Reimplemented from ObjectSet< RefLayer >.

◆ 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()

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 *  )
overridevirtual

Reimplemented from ObjectSet< RefLayer >.

◆ setMaxThickness()

void ElasticModel::setMaxThickness ( float maxthickness,
bool extendup = true )

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

Member Data Documentation

◆ abovethickness_

double ElasticModel::abovethickness_ = mUdf(double)
private

◆ starttime_

double ElasticModel::starttime_ = mUdf(double)
private

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