22#ifndef NRLIB_WELLOPERATIONS_HPP 
   23#define NRLIB_WELLOPERATIONS_HPP 
   30#include "../exception/exception.hpp" 
   33#include "../stormgrid/stormcontgrid.hpp" 
   34#include "../stormgrid/stormfaciesgrid.hpp" 
   52  size_t loglength = well.GetContLogLength(
"x");
 
   53  std::vector<size_t> 
index(loglength);
 
   56  for (i = 0; i < loglength; i++) {
 
   57    x = well.GetContValue(i, 
"x");
 
   58    y = well.GetContValue(i, 
"y");
 
   59    z = well.GetContValue(i, 
"z");
 
   60    index[i] = grid.FindIndex(
x, y, 
z);
 
   63  std::vector<size_t> indexvalues;
 
   64  indexvalues.push_back(
index[0]);
 
   67  for (i = 0; i < loglength; i++) {
 
   68    for (k = 0; k < indexvalues.size(); k++)
 
   69      if (
index[i] == indexvalues[k])
 
   72      indexvalues.push_back(
index[i]);
 
   76  size_t novalues = indexvalues.size();
 
   77  std::vector<int> no(novalues);
 
   79  for (i = 0; i < novalues; i++) {
 
   81    for (k = 0; k < loglength; k++) {
 
   82      if (
index[k] == indexvalues[i])
 
   86  size_t ncont = well.GetNContLog();
 
   87  size_t ndisc = well.GetNlog() - ncont;
 
   88  std::vector<std::vector<int> > disclogs(ndisc, std::vector<int>(novalues));
 
   89  std::vector<std::vector<int> > nodisc(ndisc, std::vector<int>(novalues));
 
   90  std::vector<std::vector<int> > nocont(ncont, std::vector<int>(novalues));
 
   91  std::vector<std::vector<double> > contlogs(ncont, std::vector<double>(novalues));
 
   92  for (k = 0; k < novalues; k++) {
 
   93    for (i = 0; i < ncont; i++) {
 
   97    for (i = 0; i < ndisc; i++) {
 
  102  std::vector<std::string> discnames(ndisc);
 
  103  std::vector<std::string> contnames(ncont);
 
  104  typedef std::map<std::string, std::vector<int> >::const_iterator CI;
 
  105  const std::map<std::string,std::vector<int> >& disclog = well.GetDiscLog();
 
  107  for (CI p = disclog.begin(); p != disclog.end(); ++p) {
 
  108    discnames[i] = p->first;
 
  112  typedef std::map<std::string, std::vector<double> >::const_iterator CID;
 
  113  const std::map<std::string,std::vector<double> >& contlog = well.GetContLog();
 
  114  for (CID p = contlog.begin(); p != contlog.end(); ++p) {
 
  115    contnames[i] = p->first;
 
  121  for (i = 0; i < loglength; i++) {
 
  122    for (k = 0; k < novalues; k++) {
 
  123      if (
index[i] == indexvalues[k]) {
 
  124        for (j = 0; j < ncont; j++) {
 
  125          valuec = well.GetContValue(i, contnames[j]);
 
  126          if (!well.IsMissing(valuec)) {
 
  127            contlogs[j][k] += valuec;
 
  131        for (j = 0; j < ndisc; j++) {
 
  132          valuei = well.GetDiscValue(i, discnames[j]);
 
  133          if (!well.IsMissing(valuei)) {
 
  134            disclogs[j][k] += valuei;
 
  141  for (k = 0; k < novalues; k++) {
 
  142    for (j = 0; j < ncont; j++) {
 
  143      if (nocont[j][k] == 0)
 
  144        contlogs[j][k] = well.GetContMissing();
 
  146        contlogs[j][k] /= nocont[j][k];
 
  148    for (j = 0; j < ndisc; j++) {
 
  149      if (nodisc[j][k] == 0)
 
  150        disclogs[j][k] = well.GetIntMissing();
 
  152        disclogs[j][k] /= nodisc[j][k];
 
  156  std::map<std::string,std::vector<double> > contlognew;
 
  157  for (i = 0; i < ncont; i++) {
 
  158    contlognew[contnames[i]] = contlogs[i];
 
  160  std::map<std::string, std::vector<int> > disclognew;
 
  161  for (i = 0; i < ndisc; i++) {
 
  162    disclognew[discnames[i]] = disclogs[i];
 
  164  std::string well_name = well.GetWellName() + 
"blocked";
 
  165  blocked_well = 
Well(contlognew, disclognew, well_name);
 
int index
Definition: cJSON.h:168
 
const char *const string
Definition: cJSON.h:170
 
Definition: NRLib/nrlib/well/well.hpp:30
 
Definition: exception.hpp:31
 
void BlockWell(const NRLib::Well &well, const A &grid, NRLib::Well &blocked_well)
Definition: welloperations.hpp:47
 
x y * z
Definition: exprtk.hpp:9663
 
x y t t *t x y t t t x y t t t x *y t *t t x *y t *t t x y t t t x y t t t x(y+z)