//================= declare the array
float*** datacol_ = new float**[100];
int nrc = 100;
int siz = 100;
//================= populate with value
for(int i = 0; i < 100; i++){
datacol_[i] = new float*[nrc];
for( int icomp = 0; icomp < nrc; icomp++ ){
datacol_[i][icomp] = new float[siz];
for( int idx = 0; idx < siz; idx++){
datacol_[i][icomp][idx] = trcin_.get(idx, icomp);
}
}
}
//================= delete the array
for(int i = 0; i < totnr_; i++){
for(int j = 0; j < trcin_.nrComponents(); j++){
delete [] datacol_[i][j];
}
delete [] datacol_[i];
}
delete [] datacol_;
Showing posts with label cpp. Show all posts
Showing posts with label cpp. Show all posts
Friday, 25 March 2011
Dynamic n-dimension array
This post is a note when I'm working with a 3-d array. Here's the code:
Labels:
cpp,
howto,
software dev
Thursday, 24 March 2011
Adding External Library as OpenDtect Module
If we wanted to use external library(ies) for opendtect, we need to compile or get the compiled *.so and *.a files.
In my case, I use alglib, which should be compiled by user. Here's the makefile:
Then we need to add our external library into ODWork environment.
The steps are:
If there's any question please feel free to ask.
and thanks to Mas Toto for helping me with this.
Some extra note:
In my case, I use alglib, which should be compiled by user. Here's the makefile:
# Alglib sample makefile
# Tested on ubuntu 10.4 LTS
# Used for OpenDtect 4.0.1 ( http://opendtect.org )
CC=gcc
AR=ar
SRC=*.cpp
FLAGS=-Wall
OUT=/home/user/lib/libAlglib3
all:
$(CC) -c -fPIC $(SRC) $(FLAGS)
$(AR) -rcs $(OUT).a *.o
$(CC) -shared -Wl,-soname,$(OUT).so.1 -o $(OUT).so *.o $(FLAGS)
rm *.o
clean:
rm *.o
Then we need to add our external library into ODWork environment.
The steps are:
- Copy (or link) *.so file into $(ODWork)/bin/lux32/G/so
- Copy (or link) *.a and * so into $(ODWork)/lib/lux32/G
- Copy *.h files of our external library into $(ODWork)/include/Alglib
- Copy *.cpp/*.cc files of our external library into $(ODWork)/src/Alglib
- Edit make.od.ModDeps file in $(ODWork)/Pmake, adding LAlglib := -lAlglib3 and IAlglib := Alglib
- Edit our plugin makefile, add Alglib to our MODDEPS variable
If there's any question please feel free to ask.
and thanks to Mas Toto for helping me with this.
Some extra note:
- Don't forget to use "ldd" to help you determine which lib needed by your plugin.
Thursday, 10 February 2011
Linux C++ error (double free or corruption error)
if your program suddenly crashed during runtime and give you this kind of error:
use this command before executing your program:
*** glibc detected *** double free or corruption (fasttop): 0x08097c40 ***
use this command before executing your program:
export MALLOC_CHECK_=0
start_program &
Wednesday, 26 January 2011
Making Our Own AttributeProvider in OpenDtect
As the default AttributeEngine's Provider class cannot altered as we wish. We need to do some re-routing of it if our plugin wanted to access some protected or read-only members from the original Provider.
Here's the diagram showing what I alter to allow my plugin to do things that the default Provider won't allow it to do:

Something like that...
Here's the diagram showing what I alter to allow my plugin to do things that the default Provider won't allow it to do:
Something like that...
Tuesday, 25 January 2011
OpenDtect AttributeEngine Process Flow
In making attribute computation program using OpenDtect we should follow the right flow so that our algorithm will be run nicely.
Process steps:
Again. This is a quite simple problem, but it takes some times for me to figure it out (d'oh)
NOTE: getInputData(), computeData(), and finalizeCalculation() are called n times, where n = number of traces in a line. (Called inside doWork() method of Provider class)
Process steps:
- prepareForComputeData First to be called, and only once
- getInputData
- computeData a const (called n times; depends on our processor core number ? and if we set allowParallelComputation to yield true)
- finalizeCalculation
Again. This is a quite simple problem, but it takes some times for me to figure it out (d'oh)
NOTE: getInputData(), computeData(), and finalizeCalculation() are called n times, where n = number of traces in a line. (Called inside doWork() method of Provider class)
Monday, 24 January 2011
Cleaning process for OpenDtect Objects
Previously: there is a pmake configuration to make OpenDtect Plugin...
If there's any change to the SRC.cc list then we should clean some objects created before, or those unused objects will make our plugin malfunctioned. (in other word: OpenDtect couldn't load the plugin)
Now, I just use this script (executed exactly on our plugin folder ? ):
Simple... but without knowing this, making a plugin can give you (a pretty bad) headache!
oh c++...
If there's any change to the SRC.cc list then we should clean some objects created before, or those unused objects will make our plugin malfunctioned. (in other word: OpenDtect couldn't load the plugin)
Now, I just use this script (executed exactly on our plugin folder ? ):
#!/bin/bash
make source1.rmlib
make source2.rmlib
#and so on..
Simple... but without knowing this, making a plugin can give you (a pretty bad) headache!
oh c++...
Friday, 21 January 2011
Everyday Pmake Makefile for OpenDtect Plugin
SRC.cc := source1.cc source2.cc
PLUGIN := yes
PLUGINDEP := MySourcePlugin
OWNC++FLAGS := -DYOURFLAG1 -DYOURFLAG2
MODDEP := uiODMain
include make.od.Defaults
include make.Targets
Subscribe to:
Posts (Atom)