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)