Files
opm-core/opm/core/grid/cpgpreprocess/preprocess.h
Bård Skaflestad 7d7f62ebc3 Merge branch 'preprocess-svn-reintegrate'
Conflicts:
	Makefile.am
	opm/core/grid/cpgpreprocess/facetopology.c
	opm/core/grid/cpgpreprocess/mxgrdecl.c
	opm/core/grid/cpgpreprocess/preprocess.c
	opm/core/grid/cpgpreprocess/sparsetable.c
	opm/core/grid/cpgpreprocess/sparsetable.h
	opm/core/grid/cpgpreprocess/uniquepoints.c

This merge brings a new, more resilient and feature-complete
corner-point processing.  In particular, the new code features
exact, in-plane vertex coordinates for face nodes that arise as a
result of fault processing and which are not located on pillars.
Secondly, the resulting grid's cells are ordered lexicographically
with the I index cycling the most rapidly, followed by J and
finally K.

Finally, this merge also brings automatic handling of left-handed
coordinate systems which, until now, have produced negative cell
volumes as a result of face vertices being ordered such that
interface normals point from cell 2 to cell 1 in this case.
Left-handed coordinate systems are recognised using a simplistic
triple-product characterisation akin to the implementation of
function "processGRDECL" of MRST.

This code is now an (almost) exact replica of revision 1001 of
https://public.ict.sintef.no/viewvc/openrs/trunk/dune-cornerpoint/grid/preprocess/

The merge also removes opm/core/grid/cpgpreprocess/readvector*, so
remove tests/test_readvector.cpp (and accompanying Make rule) to
maintain a buildable tree.
2012-06-26 19:52:21 +02:00

90 lines
2.9 KiB
C

/*===========================================================================
//
// File: preprocess.h
//
// Created: Fri Jun 19 08:43:04 2009
//
// Author: Jostein R. Natvig <Jostein.R.Natvig@sintef.no>
//
// $Date$
//
// $Revision$
//
//==========================================================================*/
/*
Copyright 2009, 2010 SINTEF ICT, Applied Mathematics.
Copyright 2009, 2010 Statoil ASA.
This file is part of The Open Reservoir Simulator Project (OpenRS).
OpenRS is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenRS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenRS. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef OPENRS_PREPROCESS_HEADER
#define OPENRS_PREPROCESS_HEADER
#ifdef __cplusplus
extern "C" {
#endif
/* Input structure holding raw cornerpoint spec. */
struct grdecl{
int dims[3];
const double *coord;
const double *zcorn;
const int *actnum;
};
/* Constant: I J K */
enum face_tag { LEFT, BACK, TOP };
/* Output structure holding grid topology */
struct processed_grid{
int m; /** Upper bound on "number_of_faces" */
int n; /** Upper bound on "number_of_nodes" */
int dimensions[3]; /* Cartesian dimension */
int number_of_faces;
int *face_nodes; /* Nodes numbers of each face sequentially. */
int *face_ptr; /* Start position for each face in face_nodes. */
int *face_neighbors; /* Global cell numbers. 2 ints per face sequentially */
enum face_tag *face_tag;
int number_of_nodes;
int number_of_nodes_on_pillars; /** Total number of unique cell vertices that lie on pillars. */
double *node_coordinates; /* 3 doubles per node, sequentially */
int number_of_cells; /* number of active cells */
int *local_cell_index; /* Global to local map */
};
void process_grdecl (const struct grdecl *g,
double tol,
struct processed_grid *out);
void free_processed_grid(struct processed_grid *g);
#ifdef __cplusplus
}
#endif
#endif /* OPENRS_PREPROCESS_HEADER */
/* Local Variables: */
/* c-basic-offset:4 */
/* End: */