Commit Graph
100 Commits
Author SHA1 Message Date
Andreas Lauser 9e7857ec1c allow to specify the ECL output directory
by default, it is the current directory.
2018-02-05 14:24:11 +01:00
Andreas Lauser 8b7c14c4db adapt to the reordering template arguments of get*_(fluidState) in opm-material 2018-01-19 11:49:06 +01:00
Andreas Lauser 49289c272d use a named constant for the value of saturation that determines the presence of free gas 2018-01-10 15:06:24 +01:00
Andreas Lauser 7c2c0052b2 use infinity as the value for the last Rs
hopefully this does not screw anything up.
2018-01-10 15:06:24 +01:00
Andreas Lauser 3b30134a29 adress [at]atgeirr's review comments 2018-01-10 15:06:24 +01:00
Andreas Lauser 5a1413476a implement support for the 'FREE' option of DRSDT
funnily enough, DRVDT does not exhibit such a flag...
2018-01-10 15:06:23 +01:00
Andreas Lauser 9a5a8c53dc move the maximum oil saturation stuff into the problem
this also simplifies creating a more proper selection logic for the
DR[SV]DT keywords or VAPPARS.
2018-01-10 15:06:23 +01:00
Andreas Lauser 853d64c12c deactivate DR[SV]DT if VAPPARS is present
actually, it depends on the ordering of these keywords, but this
requires some probably rather extensive changes in opm-parser.
2018-01-10 15:01:43 +01:00
Andreas Lauser 404b8d38b9 implement the ebos part of DRSDT 2018-01-10 15:01:43 +01:00
Andreas Lauser 4957a301f1 fix all Dune 2.6 related compiler warnings in ebos 2018-01-08 12:23:58 +01:00
Andreas Lauser c8d7be3848 make all headers autonomous again 2018-01-03 19:03:22 +01:00
Andreas Lauser 817f91d176 make the equil test work in the presence of dune-fem 2018-01-03 18:53:03 +01:00
Andreas Lauser 4e37c53038 restore the hydrostatic equilibration test from opm-core
This involved quite a bit of kicking and screaming. The result
certainly is not pretty, but it works.
2018-01-03 12:28:12 +01:00
Andreas Lauser f65e9fbb69 remove the runtime parameter system from all time critical code paths
it was not supposed to be used there in the first place, but it crept
into the discretization code.
2018-01-02 14:28:52 +01:00
Andreas Lauser 794fc3f588 equil init: reduce the tolerance of the regula falsi solvers to 1e-10 2018-01-02 14:28:06 +01:00
Andreas Lauser 2f00e7804a equil init: rename the files according to the eWoms standard convention
the eWoms file naming convention should probably be changed to the one
of the remaining OPM modules, but this is quite a bit of work and IMO
it is more important to be consistent within the module.
2018-01-02 14:28:06 +01:00
Andreas Lauser 69b1a5ca5a equil init: formating fixes to make it more consistent with the rest of ewoms
in particular, this removes excessive whitespace usage.
2018-01-02 14:28:06 +01:00
Andreas Lauser 79856b3b0a equil init: change all variables to camelCase
this makes it more integrated with the rest of eWoms.
2018-01-02 14:28:06 +01:00
Andreas Lauser 01c2a2da97 equil init: re-indent
this makes the indentation style of the equil init code consistent
with the rest of eWoms.
2018-01-02 14:28:06 +01:00
Andreas Lauser 0690cad957 equil init: get rid of boost::iterator_range
this class is rather simple and it was the only thing from Boost used
by the hydrostatic equilibrium code...
2018-01-02 14:28:06 +01:00
Andreas Lauser d142060386 equil init: replace opm-core's linear interpolation function by Tabulated1DFunction 2018-01-02 14:28:06 +01:00
Andreas Lauser 3f875fb8f2 equel init: pass the type tag to the InitialStateComputer
also, get rid of Opm::extractPvtTableIndex()
2018-01-02 14:28:06 +01:00
Andreas Lauser 028a8c808b equil init: get rid of opm-core's "root finders"
instead, let's bit the bullet and add the few lines required for
regula-falsi-Pegasus method whenever the old RegulaFalsi class was
used. note that this leads to slightly different results for the
SPE5CASE1 flow test. I suspect that the old solvers behave in
unexpected ways, though...

Note that because the inverted functions are usually piecewise linear,
inversion can be done in a much smarter way.
2018-01-02 14:28:06 +01:00
Andreas Lauser db9e26761f equil init: get rid of some UgGridHelpers usage
this only deals with the easy things, i.e. UgGridHelpers::numCells()
and UgGridHelpers::dimensions(). a more thorough cleanup is needed in
the future to make ebos work with grids other than Dune::CpGrid again.
2018-01-02 14:28:06 +01:00
Andreas Lauser 669d3fcd2a equil init: re-indent EquilibrationHelpers.hpp 2018-01-02 14:28:06 +01:00
Andreas Lauser 6f07f38fb1 equil init: get rid of initStateEquil_impl.hpp
now, all the beauty of that part of the code can be admired in
initStateEquil.hpp.

During this exercise, I stumbled over some serious code-quality issues
like a different order of the template arguments for the declaration
and the definition, mismatching argument names and no forward
definition of some functions. besides this, some functions were
already defined in the non-_impl.hpp file and EquilibrationHelpers.hpp
used that approach from the outset.
2018-01-02 14:28:06 +01:00
Andreas Lauser 6871e1cf88 move the hydrostatic equilibrium code to its proper location and make it compile
this just moves the hydrostatic equilibrium code from its historc
location at opm/core to ebos/equil and adds minimal changes to make it
compile. this allows to clean up that code without disturbing the
legacy simulators.
2018-01-02 14:28:06 +01:00
Andreas Lauser 6f36076516 consolidate the unit system to opm-parser
since the unit code within opm-parser is now a drop-in replacement,
this simplifies things and make them less error-prone.

unfortunately, this requires quite a few PRs. (most are pretty
trivial, though.)
2018-01-02 14:28:06 +01:00
Andreas Lauser 0d9629a282 set the Rv and Rs factors to the saturated values for cells which have no gas and no oil
the purpose of this is to get a more defined behaviour when doing the
gravity correction/upstream cell determination in the flux term.

I consider this to be just a kludge, so if anyone has a better idea of
what the composition for the non-existing gas and oil phases is,
please tell me. (note that generic compositional models do not exhibit
this issue because the composition of all fluids is always fully
defined because each component is assumed to dissolve in every phase.)
2018-01-02 14:28:06 +01:00
Andreas Lauser 89361792e2 InitStateEquil: fix valgrind complaint about uninitialized values
it seems that it was pure luck that this worked so far!
2018-01-02 14:28:06 +01:00
Andreas Lauser 18c641e0c7 PVT properties: allow them to be temperature dependent
Note that this patch does not introduce any real temperature
dependence but only changes the APIs for the viscosity and for the
density related methods. Note that I also don't like the fact that
this requires so many changes to so many files, but with the current
design of the property classes I cannot see a way to avoid this...
2018-01-02 14:28:06 +01:00
Andreas Lauser 5518843275 adapt the the table related API changes of opm-parser 2018-01-02 14:28:06 +01:00
Andreas Lauser 897f64c21a incorperate the review comments/decisions for multi-region PVT
the largest change is that all classes below opm/core/props/pvt take
the PVT region index as an argument, the higher-level ones (i.e.,
BlackoilProps*) take cell indices.
2018-01-02 14:28:06 +01:00
Andreas Lauser 68623918a7 Implement multi-region PVT for all property classes
since they are not using a single PVT table anymore, their "Single"
prefix has been removed...
2018-01-02 14:28:06 +01:00
Andreas Lauser 5194a1a782 rename all "newParserDeck" objects to "deck"
The "new" parser is now "the" parser...
2018-01-02 14:28:06 +01:00
Andreas Lauser bd45d3e693 remove EclipseGridParser compatibility methods from all classes 2018-01-02 14:28:06 +01:00
Andreas Lauser 3bf249e1ab adapt to the renames of the table classes in opm-parser
basically, "Opm::SimpleTable" becomes "Opm::SingleRecordTable".
2018-01-02 14:28:06 +01:00
Andreas Lauser ab72522e6c grid managers: update the GridPart / GridView after loadBalance()
depending on the grid implementation, the grid view / grid part object
does not necessarily follow the change. For some reason, the grid part
still does not work in the parallel case (tested with dune-fem 2.4),
but that seems to be an issue on the dune-fem side.
2017-12-11 15:19:09 +01:00
Andreas Lauser 0cad40e420 black-oil: do not write the saturated oil formation factor to VTK anymore
this quantity is pretty useless, and the analogous one for wet gas was
never written...
2017-12-06 15:06:29 +01:00
Andreas Lauser 6598df59cc Revert "ebos: don't break the downstream build because of the SimulatorParameter mess"
This reverts commit c873e8c92da389bc1d6bc4ed2a5241faddfa7630.

since OPM/opm-simulators#1287 has been merged there are no "in tree"
upstreams which use that mechanism anymore.
2017-10-11 16:12:41 +02:00
Andreas Lauser d51934ce37 ebos: don't break the downstream build because of the SimulatorParameter mess
this now works with the unmodified master version of flow from
opm-simulators. we take the liberty to emit a deprecation warning,
though. this complicates things quite a bit.
2017-10-10 13:18:09 +02:00
Andreas Lauser ef2e60e454 ebos: simplify passing of pre-parsed ECL decks
This gets rid of some special-purpose code in generic places (i.e. the
`SimulatorParameter` class) and no special hacks to the property and
parameter system are required anymore.
2017-10-07 21:28:25 +02:00
Andreas Lauser 415fdfd113 EclCpGridManager: remove unused private typedef 2017-10-03 12:48:21 +02:00
Andreas Lauser 79fc6c68cd add a template class for conditionally storing attributes and use it in ebos 2017-07-21 21:38:13 +02:00
Andreas Lauser cb24b949a8 make all headers autonomous again
i.e., they can be included without having other files included before them.
2017-07-20 12:08:19 +02:00
Andreas Lauser 96381e3ed7 remove support for dune < 2.4
this allows quite a substantial amount of code decluttering, mainly
because Dune 2.4 renamed mapper.map() to mapper.index().
2017-07-13 14:08:02 +02:00
Andreas Lauser bff4c8ade9 ebos: add the raw array of PVT numbers.
this can be used by flow_ebos to be passed to legacy code.
2017-06-16 15:12:27 +02:00
Andreas Lauser f334bb32b9 ebos: add support for the ROCKOPTS keyword
this becomes important if th region which is supposed to be used by
ROCK is not the same as the region for the PVT properties.
2017-06-16 15:12:26 +02:00
Andreas Lauser 3b37038043 ebos: do not mistake the pressure for the gas saturation anymore
this is a copy-and-pasto that was introduced with #189.
2017-06-16 09:25:56 +02:00
Andreas Lauser 89b21eb641 ebos: fix the compilation
one must use eclProps.getDoubleGridProperty() while the has() method
is called eclProps.hasDeckDoubleGridProperty() (mind the Deck!).
2017-06-14 13:36:37 +02:00
Andreas Lauser 55a5a3a848 ebos: reduce direct deck usage
this reduces the number of direct deck accesses in `EclProblem` in
favour of `EclipseState`-grid properties. as far as i can see,
directly using the deck object cannot fully be avoided because
`EclipseState` does not seem to provide internalized versions of all
these keywords yet.
2017-06-13 16:54:39 +02:00
Andreas Lauser 9d7b226b6e Merge pull request #185 from totto82/miscibility_solvent
Add support for miscible solvent runs
2017-05-24 13:03:27 +02:00
Andreas Lauser d31ded53e4 ebos: fix the NTG averaging code
the NTG value for active cells in the topmost layer was always
1.0. This resulted in some deviations in the transmissibilities of the
Norne deck which lead the init file comparison unit tests from
opm-simulators to fail.
2017-05-24 11:21:57 +02:00
Andreas Lauser bcdc4e5e38 blackoil: implement the immiscible solvent extension
Conceptually this is IMO pretty questionable, since it adds a second
"gas phase" that does not mix with "ordinary" gas. I suppose the
reason why this extension was conceived by E100 is that if all you
have is hammer, everything looks like a nail...

Functionality-wise, this patch is still not fully complete because
miscibility of the solvent "phase" is not yet implemented. As far as I
can see, the API changes required by miscibility are quite limited,
though.
2017-05-05 10:46:53 +02:00
Andreas Lauser cddf643b5a EclFluxModule: add a small fix to the mobility shortcut
let's use zero instead of 10^-18. This can have a small impact on
performance, but the new version is definitely "more" correct, and
also Norne performance seems to improve slightly on my machine.
2017-05-04 16:00:25 +02:00
Andreas Lauser 2f0a32ba63 ECL flux module: make some attributes that are not used elsewhere local 2017-05-04 16:00:25 +02:00
Andreas Lauser 4fd341d98e some fixes for typos in comments 2017-05-04 16:00:25 +02:00
Andreas Lauser 5951b2f64c EclCpGridManager: do not delete unintialized pointers
this was found using GCC-7's address sanitizer. I suspect that this
did not surface earlier (i.e., with valgrind), because newly allocated
memory gets initialized to zero by the operating system, so the value
of the pointer was zero and the delete operator did what was right by
coincidence. the new asan seems to initialize memory randomly, though.
2017-04-20 11:05:31 +02:00
Andreas Lauser 96869b6a2f make explicit initialization for twophase cases work
if the initial solution is explicitly given by the deck using the
PRESSURE, SWAT, etc. keywords, the specified state can be
thermodynamically impossible. To avoid inconsistencies, we use a flash
calculation to find a state that is in thermodynamic equilibrium and
exhibits the same masses as the explicitly specified solution. Since
the flash solver needs to compute quantities for all fluid phases, but
two-phase blackoil simulations usually do not specify the properties
of one phase, the flash solver crashed. This patch works around that
issue by simply not using the flash solver in the twophase case, i.e.,
the explicit initial condition must be thermodynamically consistent in
order to produce the stable results for a different choice of primary
variables.
2017-04-18 16:11:44 +02:00
Andreas Lauser 346710c5af ebos: hysteresis needs to be updated for all elements
in the parallel case, this avoids the participating processes from
desyncronizing if the solution is consistent on all processes.
2017-04-15 15:12:15 +02:00
Andreas Lauser 6dbdd387d6 Merge pull request #140 from blattms/fix-pushing-to-resized-array
Fixes pushing to resized array distributedCartesianIndex.
2017-03-10 11:41:25 +01:00
Andreas Lauser 42c49e57ec ebos: sychronize the parse context with the one used by flow_legacy
i.e., add the PARSE_MISSING_DIMS_KEYWORD option. this was a recent
change in flow_legacy.
2017-02-13 19:35:27 +01:00
Andreas Lauser b429af41b1 ebos: no longer fail if the EQLDIMS keyword is not explicitly mentioned in the deck
we use the "Eqldims" object which is exposed EclipseState.
2017-02-13 19:20:27 +01:00
Andreas Lauser a284089d73 adapt to the move of the valgrind client requests into the Opm namespace 2017-02-09 18:25:44 +01:00
Andreas Lauser 72a9827c8a EclCpGridManager: export the transmissibilities of the sequential grid
This only makes these transmissibilities available for parallel
computations. The reason is that in the sequential case, they do not
need to be computed during grid creation and they are are also
accessible via the problem object.
2017-01-26 15:11:03 +01:00
Andreas Lauser 460c286974 Merge pull request #144 from totto82/newTrans
Start using face geometry computed the Ecl way
2017-01-20 15:24:05 +01:00
Andreas Lauser 7a7d6d868d ebos: fix the interactions between SWATINIT and threshold pressures
hopefully this makes standalone `ebos` arrive at the same initial
condition as `flow_ebos` if both, SWATINIT and threshold pressures are
enabled. we need to calculate the initial condition twice either
threshold pressures and SWATINIT are enabled. (`ebos` and `flow_ebos`
diverged after OPM/opm-core#1129.)

the proposed patch is a kludge IMO, but in the light that in my
opinion, SWATINIT and threshold pressures are both physically not
justified and given the fact that SWATINIT must not be considered for
the threshold pressues should be considered to be a bug of the
reference simulator, I think the patch is okay.
2017-01-18 16:46:53 +01:00
Andreas Lauser 41d258f1c8 Merge pull request #138 from blattms/fix-pr137
Switch of collecting data in non-parallel run.
2017-01-18 13:55:50 +01:00
Andreas Lauser 3d7563902c Merge pull request #134 from andlaus/change-OPM_UNUSED-usage
change the order of OPM_UNUSED and variable name
2017-01-18 13:32:33 +01:00
Andreas Lauser 61c501a31d change the order of OPM_UNUSED and variable name
it seems like some compilers (GCC 4.9.2?) are picky about this and
require

```c++
TypeName VariableName __attribute__ ((__unused__))
```
2017-01-17 13:28:56 +01:00
Andreas Lauser 7ee8890e46 Merge pull request #120 from andlaus/implement_bicgstab
Implement a bicgstab linear solver
2017-01-03 11:41:43 +01:00
Andreas Lauser ceae9c3754 fix the headercheck
i.e., make all headers autonomous again. (do not depend on the
ordering of includes.)
2017-01-02 15:45:41 +01:00
Andreas Lauser 8c6e6dc410 ebos: refactor the way SWATINIT is dealt with
we now store the maximum oil-water capillary pressure and apply it to
the material parameters later. this simplifies things within the
EquilInitializer somewhat and also allows external code (i.e.,
flow_ebos) to choose when SWATINIT gets applied.
2016-12-16 18:48:34 +01:00
Andreas Lauser de9eea31bd EclProblem: provide access to the "raw" transmissibilities object 2016-12-16 18:47:52 +01:00
Andreas Lauser 46071d5e82 ebos: avoid a few copies for opm-parser object
this is done by simply making these variables const references. these
were overlooked in the big opm-parser pointer-to-references-spree...
2016-12-16 18:45:43 +01:00
Andreas Lauser a6191a2345 the new home of Valgrind.hpp is opm-common! 2016-12-14 12:38:12 +01:00
Andreas Lauser fb8d984bf1 adapt to the move of quad.hh to opm-material 2016-12-14 12:38:12 +01:00
Andreas Lauser e1d11da6d6 EclProblem: fix the type returned by the const version of materialLawManager()
it is supposed to a shared pointer to a constant object, not a
constant pointer to a mutable object...
2016-12-10 10:53:28 +01:00
Andreas Lauser 4b2156a071 ebos: update the PffGridVector for transmissibility after geologic events 2016-12-08 12:26:32 +01:00
Andreas Lauser 706e51f878 ebos: store the names wells that are disabled on the local process due to load balancing 2016-12-07 20:24:48 +01:00
Andreas Lauser 5067ce2f27 ebos: use the transmissibilities as edge weights for load balancing
this makes creating the grid a bit slower because the
transmissibilities need to be calculated twice: once for the
sequential grid and once for the distributed one. while corresponds to
the way `flow_legacy` does the load balancing and it should allow
better results, this does not seem to be the case for the Norne deck
if ZOLTAN is not available:

After loadbalancing process 3 has 4413 cells.
After loadbalancing process 2 has 12390 cells.
After loadbalancing process 0 has 13629 cells.
After loadbalancing process 1 has 21253 cells.

i.e., process 1 is responsible for almost 5 as many cells as process
3.
2016-12-07 20:24:48 +01:00
Andreas Lauser a0481039db ebos: add the disabled well names kluge to the grid manager
this array is only non-empty for parallel runs.
2016-12-07 20:24:48 +01:00
Andreas Lauser 36c010c956 ebos: replace the opm-parser related pointers/smart pointers by references
this seems to be the spirit of the season. note that now the deck
object must be copied, but I suppose that copying it is pretty cheap.
2016-12-07 20:24:48 +01:00
Andreas Lauser 9460177f17 CollectDataToIoRank: don't require the elements of a dune grid to be traversed in consecutive order 2016-12-05 13:56:32 +01:00
Andreas Lauser 4a0832030c EclProblem: add docstrings for the materialLawManager() methods 2016-11-30 14:24:15 +01:00
Andreas Lauser 4ef6d5d1ce EclProblem: add a porosity(elemIdx) method
this is not a generic API but makes emulating legacy stuff which
requires the porosity quite a bit easier in flow_ebos.
2016-11-30 14:21:04 +01:00
Andreas Lauser a3ddd2066b ebos: make it possible to easily disable SWATINIT
in flow_ebos, this code collides with the flow part.
2016-11-30 14:20:44 +01:00
Andreas Lauser c4c00bdaaa implement two-phase blackoil simulations 2016-11-22 15:22:41 +01:00
Andreas Lauser 6cf1eab4f4 ebos: export the ECL material law manager
this allows external code (i.e., flow_ebos) to reuse it.
2016-11-22 14:08:07 +01:00
Andreas Lauser 431cebaa21 EclFluxModule: make sure that the upwind and downwind directions are set
before, they were undefined for phases which exhibited zero mobility
in both directions. since in this case the flux is zero (and thus the
upstream direction does not matter), the correctness is unaffected by
this patch. (still, I consider it to bug and valgrind also complained
about it.)
2016-11-17 19:48:07 +01:00
Andreas Lauser a5e859e4c6 discretizations: no longer depend on the problem to provide the mappers
Dune entity mappers seem to be dirt-cheap to create so there is not
much point in jumping through hoops to avoid this...
2016-11-17 19:44:17 +01:00
Andreas Lauser 759c2dbdaa move all applications into their top-level directory
thanks to [at]akva2 for the suggestion.
2016-11-11 15:04:04 +01:00
Andreas Lauser 67c978fe75 fix most pedantic compiler warnings in the basic infrastructure
i.e., using clang 3.8 to compile the test suite with the following
flags:

```
-Weverything
-Wno-documentation
-Wno-documentation-unknown-command
-Wno-c++98-compat
-Wno-c++98-compat-pedantic
-Wno-undef
-Wno-padded
-Wno-global-constructors
-Wno-exit-time-destructors
-Wno-weak-vtables
-Wno-float-equal
```

should not produce any warnings anymore. In my opinion the only flag
which would produce beneficial warnings is -Wdocumentation. This has
not been fixed in this patch because writing documentation is left for
another day (or, more likely, year).

note that this patch consists of a heavy dose of the OPM_UNUSED macro
and plenty of static_casts (to fix signedness issues). Fixing the
singedness issues were quite a nightmare and the fact that the Dune
API is quite inconsistent in that regard was not exactly helpful. :/

Finally this patch includes quite a few formatting changes (e.g., all
occurences of 'T &t' should be changed to `T& t`) and some fixes for
minor issues which I've found during the excercise.

I've made sure that all unit tests the test suite still pass
successfully and I've made sure that flow_ebos still works for Norne
and that it did not regress w.r.t. performance.

(Note that this patch does not fix compiler warnings triggered `ebos`
and `flow_ebos` but only those caused by the basic infrastructure or
the unit tests.)

v2: fix the warnings that occur if the dune-localfunctions module is
    not available. thanks to [at]atgeirr for testing.
v3: fix dune 2.3 build issue
2016-11-09 14:54:22 +01:00
Andreas Lauser f951947773 use accessor methods to access the value and derivatives of Evaluation objects 2016-10-30 22:41:13 +01:00
Andreas Lauser 775ac1900f ebos: fix stupid bug 2016-10-30 22:40:25 +01:00
Andreas Lauser f8b09de3ca ebos: more Dune 2.3 fixes to make travis happy 2016-10-30 21:24:08 +01:00
Andreas Lauser 11f95f582e fix build
that was a case of semantically conflicting concurrent merges.
2016-10-30 20:12:35 +01:00
Andreas Lauser 22681c3610 ebos: try to make travis happy 2016-10-30 19:34:33 +01:00
Andreas Lauser b31fb57636 implement explicit prefetching
the main part of this patch is actually an API change of
Ewoms::ThreadedEntityIterator to faciliate the change (since we should
prefetch the data for the element which is to be linarized after the
current one.)  Also, this patch is only an 80% solution: it would be
good if the cached intensive quantities of the model and the stencil
of an element could also be prefetched, but that's currently not
easily possible in a performant way because iterating over the
intersections of an element negates the performance gains obtained by
prefetching.
2016-10-30 18:54:44 +01:00
Andreas Lauser db5eb4249e add a container for grid data with a prefetch-friendly memory layout
the class is called "PffGridVector", which is short for "PreFetch
Friendly Grid Vector" ("Vector" in the sense of std::vector). The idea
is to store the data in question for the complete stencil of all
elements which makes the memory access pattern of the simulation much
more localized. this approach has the downsides that much more memory
is required to represent the data (for cartesian 3D grids this means
about factor 8 more), and that data cannot easily be changed for an
individual degree of freedom (because it would require to change the
representations of all stencils which contain the DOF).

also, use this new class to store the transmissbility values of
ebos. it is pretty easy to extent the number of quantities stored this
way, but it seems like the performance of linearization stays flat or
is slightly worse if the PffGridVector is used for more quantities...
2016-10-30 18:48:06 +01:00