a sgems code for pattern simulation of continuous and...

15
Computers & Geosciences 34 (2008) 1863–1876 A SGeMS code for pattern simulation of continuous and categorical variables: FILTERSIM $ Jianbing Wu a, , Alexandre Boucher b , Tuanfeng Zhang c a Department of Energy Resources Engineering, Stanford University, Stanford, CA 94305, USA b Department of Geological & Environmental Sciences, Stanford University, Stanford, CA 94305, USA c Schlumberger Doll Research, Cambridge, MA 02139, USA Received 15 May 2007; received in revised form 22 July 2007; accepted 28 August 2007 Abstract The new multiple-point geostatistical algorithm (FILTERSIM), which can handle both categorical and continuous variable training images, is implemented in the SGeMS software. The spatial patterns depicted by the training image are first summarized into a few filter scores; then classified into pattern groups in the filter score space. The sequential simulation approach proceeds by associating each conditioning data event to a closest pattern group using some distance function. A training pattern is then sampled from that group and pasted back onto the simulation grid. Local multiple- point statistics carried by patterns are captured from the training image, and reproduced in the simulation realizations. Hence complex multiple-scale geological structures can be re-constructed in the simulation grid, conditional to a variety of sub-surface data such as well data and seismic survey. r 2008 Elsevier Ltd. All rights reserved. Keywords: Filter; Pattern classification; Training image; Multiple-point statistics; Similarity 1. Introduction There are presently two main families of stochastic simulation algorithms: variogram-based (Goovaerts, 1997) and object-based (Haldorsen and Chang, 1986). Variogram-based algorithms (e.g. sequential Gaussian simulation) build the simulated realizations one pixel at a time, thus providing great flexibility for conditioning to data of diverse supports and types. However, variogram-based algorithms have difficulty reproducing complex geometric shapes, since the simulation is constrained only by two-point statistics. Object-based algorithms build the realizations by dropping onto the simulation grid one object or pattern at a time, hence they can be faithful to the geometry of the object. However, they are difficult to condition to local data of different support volumes, particularly when these data are dense as in the case for seismic surveys. The multiple-point simulation (mps) concept proposed by Journel (1992) and first implemented ARTICLE IN PRESS www.elsevier.com/locate/cageo 0098-3004/$ - see front matter r 2008 Elsevier Ltd. All rights reserved. doi:10.1016/j.cageo.2007.08.008 $ Code available from http://sgems.sourceforge.net/, and code also available from server at http://www.iamg.org/CGEditor/ index.htm. Corresponding author. Present address: 600 N. Dairy Ashford, OF-2014, Houston, TX 77079-1175, USA. Tel.: +1 281 293 4461; fax: +1 281 293 4626. E-mail addresses: [email protected] (J. Wu), [email protected] (A. Boucher), [email protected]field.slb.com (T. Zhang).

Upload: others

Post on 13-Aug-2021

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: A SGeMS code for pattern simulation of continuous and ...download.xuebalib.com/xuebalib.com.6888.pdfA SGeMS code for pattern simulation of continuous and categorical variables: FILTERSIM$

ARTICLE IN PRESS

0098-3004/$ - se

doi:10.1016/j.ca

$Code avail

also available

index.htm.�Correspond

Ashford, OF-20

Tel.: +1281 29

E-mail addr

aboucher@stan

tzhang2@bosto

Computers & Geosciences 34 (2008) 1863–1876

www.elsevier.com/locate/cageo

A SGeMS code for pattern simulation of continuous andcategorical variables: FILTERSIM$

Jianbing Wua,�, Alexandre Boucherb, Tuanfeng Zhangc

aDepartment of Energy Resources Engineering, Stanford University, Stanford, CA 94305, USAbDepartment of Geological & Environmental Sciences, Stanford University, Stanford, CA 94305, USA

cSchlumberger Doll Research, Cambridge, MA 02139, USA

Received 15 May 2007; received in revised form 22 July 2007; accepted 28 August 2007

Abstract

The new multiple-point geostatistical algorithm (FILTERSIM), which can handle both categorical and continuous

variable training images, is implemented in the SGeMS software. The spatial patterns depicted by the training image are

first summarized into a few filter scores; then classified into pattern groups in the filter score space. The sequential

simulation approach proceeds by associating each conditioning data event to a closest pattern group using some distance

function. A training pattern is then sampled from that group and pasted back onto the simulation grid. Local multiple-

point statistics carried by patterns are captured from the training image, and reproduced in the simulation realizations.

Hence complex multiple-scale geological structures can be re-constructed in the simulation grid, conditional to a variety of

sub-surface data such as well data and seismic survey.

r 2008 Elsevier Ltd. All rights reserved.

Keywords: Filter; Pattern classification; Training image; Multiple-point statistics; Similarity

1. Introduction

There are presently two main families of stochasticsimulation algorithms: variogram-based (Goovaerts,1997) and object-based (Haldorsen and Chang,1986). Variogram-based algorithms (e.g. sequential

e front matter r 2008 Elsevier Ltd. All rights reserved

geo.2007.08.008

able from http://sgems.sourceforge.net/, and code

from server at http://www.iamg.org/CGEditor/

ing author. Present address: 600 N. Dairy

14, Houston, TX 77079-1175, USA.

3 4461; fax: +1 281 293 4626.

esses: [email protected] (J. Wu),

ford.edu (A. Boucher),

n.oilfield.slb.com (T. Zhang).

Gaussian simulation) build the simulated realizationsone pixel at a time, thus providing great flexibility forconditioning to data of diverse supports and types.However, variogram-based algorithms have difficultyreproducing complex geometric shapes, since thesimulation is constrained only by two-point statistics.Object-based algorithms build the realizations bydropping onto the simulation grid one object orpattern at a time, hence they can be faithful to thegeometry of the object. However, they are difficult tocondition to local data of different support volumes,particularly when these data are dense as in the casefor seismic surveys.

The multiple-point simulation (mps) conceptproposed by Journel (1992) and first implemented

.

Page 2: A SGeMS code for pattern simulation of continuous and ...download.xuebalib.com/xuebalib.com.6888.pdfA SGeMS code for pattern simulation of continuous and categorical variables: FILTERSIM$

ARTICLE IN PRESSJ. Wu et al. / Computers & Geosciences 34 (2008) 1863–18761864

by Guardiano and Srivastava (1992), combines thestrengths of the previous two classes of simulationalgorithms. It operates pixel-wise with the condi-tional probabilities for each pixel value being liftedas conditional proportions from a training image(TI) depicting the geometry and distribution ofobjects deemed to prevail in the actual field. ThatTI, a purely conceptual depiction of the patterns ofthe spatial phenomena, can be built using object-based algorithms which are freed from dataconditioning. The mps algorithm re-constructs anew image (e.g. a reservoir field) with trainingpatterns honoring all local data.

The original mps implementation by Guardianoand Srivastava (1992) was not computationallyefficient, for it asked a new rescan of the whole TIat each new simulation node to retrieve the requiredconditional probabilities from which to draw thesimulated value. mps became practical with theSNESIM (Single Normal Equation SIMulation)implementation of Strebelle (2000). In SNESIM, theTI is scanned only once and all conditionalproportions available in the TI are stored in asmart search tree data structure, from which theycan be retrieved fast. SNESIM is designed formodeling categories, e.g. facies distributions.It is limited by the number of categorical variablesit can handle. SNESIM is memory-demandingwhen the TI contains a large variety of differentpatterns. SNESIM does not work for continuousvariables.

Those issues were addressed by the SIMPAT(SIMulation with PATterns) algorithm (Arpat,2004; Arpat and Caers, 2007). SIMPAT uses arectangular template to search for all patterns in theTI, and constructs a pattern database for theseunique patterns without any grouping. Duringsimulation, the same template is used to find theconditioning data event from the simulation grid;then a pattern closest to that data event (based ontheir similarity measures) is retrieved from thepattern database and pasted onto the simulationgrid. As opposed to simulating one node at a time asin SNESIM, SIMPAT simulates one pattern (multi-ple-points) at each grid location; this allows toreproduce the fine scale structures within thesepatterns. The pattern simulation approach, adoptedfrom image construction (Bonet, 1997; Wei, 2001),allows for a better reproduction of the within-pattern structures. However, SIMPAT at eachpoint calls for rescanning the whole patterndatabase to find the closest pattern; this algorithm

is extremely slow and as is not viable for real 3Dapplications. The other issue of SIMPAT algorithmis that it always selects the closest matched patternindependently of the number of pattern replicates;hence there is no statistics nor any drawinginvolved.

The mps algorithm FILTERSIM, called filter-based simulation (Zhang, 2006), has been proposedto circumvent these problems. The FILTERSIMalgorithm is much less memory-demanding yet witha reasonable CPU cost, and it can handle bothcategorical and continuous variables. Similar toSIMPAT, FILTERSIM is also a pattern-basedapproach simulating whole patterns conditional topattern data.

2. FILTERSIM algorithm review

The proposed FILTERSIM algorithm proceedsin three major steps: (1) filter score calculation,(2) pattern classification and (3) pattern simulation.FILTERSIM first applies a set of filters to templatedata obtained from scanning the TI. This creates aset of filter score maps, with each training patternrepresented by a vector of score values. Thissignificantly reduces the pattern data dimensionfrom the template size to a small number of filterscores. Next, similar training patterns are clusteredinto a so-called prototype class, each such classbeing identified by a point-wise averaged pattern.During the sequential simulation process, theconditioning data event (dev) is retrieved with asearch template of same size than that used forscanning the TI. The prototype class closest to thatconditioning dev is selected using some distancefunction. Finally, a training pattern is sampled fromthat pattern class, and pasted onto the simulationgrid. The simulation is thus one of the patternsbased on pattern similarity.

2.1. Filters and scores

A filter is a set of weights associated with aspecific data configuration or template TJ ¼

fu0; hj ; j ¼ 1; . . . ; Jg. Each node uj ¼ u0 þ hj of thetemplate is characterized by a relative offset vectorhj ¼ ðxj ; yj ; zjÞ from the template center u0. Theoffset coordinates xj ; yj ; zj are integer values. Thereare L such filters. For a J-nodes template, the lthðl 2 ½1;L�Þ associated filter is ff lðhjÞ; j ¼ 1; . . . ; Jg.

The training pattern (pat) centered at location u

of template TJ is summarized by the vector of L

Page 3: A SGeMS code for pattern simulation of continuous and ...download.xuebalib.com/xuebalib.com.6888.pdfA SGeMS code for pattern simulation of continuous and categorical variables: FILTERSIM$

ARTICLE IN PRESSJ. Wu et al. / Computers & Geosciences 34 (2008) 1863–1876 1865

filter scores fSlT ðuÞ; l ¼ 1; . . . ;Lg, with

SlT ðuÞ ¼

XJ

j¼1

f lðhjÞ � patðuþ hjÞ, (1)

where patðuþ hjÞ is the pattern nodal value.For a continuous TI, the L filters are directly

applied to the continuous values constituting eachtraining pattern. For a categorical TI with K

categories, this TI is first transformed into K setsof binary indicators IkðuÞ; k ¼ 1; . . . ;K ; u 2 TI:

IkðuÞ ¼1 if u belongs to kth category;

0 otherwise:

�(2)

A K-category pattern is thus represented by K setsof binary patterns, each indicating the presence/absence of one single category at any location. TheF filters are applied to each one of the K binarypatterns resulting in a total of F � K scores. Acontinuous TI has K ¼ 1.

2.2. Pattern classification

Sliding the L filters over a K-category TI willresult in L� K score maps, where each localtraining pattern is summarized by an L� K-lengthvector in the filter score space. In general, L� K ismuch smaller than the size of the filter template T,hence the dimension reduction is significant.

Similar training patterns will have similar vectorscores. Hence by partitioning the filter score space,similar patterns can be grouped together. Eachpattern class is represented by a pattern prototype,defined as the point-wise average of all trainingpatterns falling into that class. A prototype has thesame size as the filter template, and is used as thepattern group ID.

For a continuous TI, a prototype prot associatedwith search template TJ is the point-wise average ofall its constitutive replicates:

protðhjÞ ¼1

c

Xc

i¼1

patðui þ hjÞ; j ¼ 1; . . . ; J, (3)

where hj is the jth offset location in the searchtemplate TJ , c is the number of replicates withinthat prototype class; ui ði ¼ 1; . . . ; cÞ is the center ofa specific training pattern.

For a categorical variable, Eq. (3) is applied toeach of the K sets of binary indicator maps

transformed by Eq. (2). Hence a categorical proto-type consists of K proportion maps, each mapgiving the probability of a certain category toprevail at a template location ui þ hj :

protðhjÞ ¼ probðhjÞ ¼ fprotkðhjÞ; k ¼ 1; . . . ;Kg, (4)

where protkðhjÞ ¼ PðZðuþ hjÞ ¼ kÞ.

2.3. Sequential pattern simulation

The classic sequential simulation paradigm(Deutsch and Journel, 1998) is extended to patternsimulation. At each node u along the randompath visiting the simulation grid G, a searchtemplate T of same size as the filter template isused to extract the conditioning data event devðuÞ.The prototype prot closest to that data event isfound based on some distance function dðdev; protÞ.A pattern pat is drawn from that closest prototypeclass, and pasted onto the simulation grid G. Theinner part of the pasted pattern is frozen as harddata (also known as patch data), and will not berevisited during simulation on the current (multiple)grid.

As with the SIMPAT algorithm, the originalmultiple grid simulation concept (Tran, 1994) isextended to capture the large-scale structures of theTI with a large but coarse template T. Denoted by G

the 3D Cartesian grid on which simulation is to beperformed, define Gg as the gth sub-set of G suchthat: G1 ¼ G and Gg is obtained by down-samplingGg�1 by a factor of 2 along all three coordinatedirections: Gg is the sub-set of Gg�1 obtained byretaining every other node of Gg�1. Gg is called thegth level multi-grid.

In the gth (1pgpNG) multiple grid Gg, thesearch template TJ is correspondingly rescaled by afactor 2g�1 such that

TgJ ¼ f2

g�1h1; . . . ; 2g�1hJg.

Template TgJ has the same number of nodes as TJ

but has a greater spatial extent, hence allowscapturing large-scale structures without increasingthe template size.

During the simulation in the gth coarse grid, therescaled filters are used to calculate the patternscores. Sequential simulation proceeds from thecoarsest grid to the finest grid. All nodes simulatedin the coarser grid are re-simulated in the next finer

Page 4: A SGeMS code for pattern simulation of continuous and ...download.xuebalib.com/xuebalib.com.6888.pdfA SGeMS code for pattern simulation of continuous and categorical variables: FILTERSIM$

ARTICLE IN PRESSJ. Wu et al. / Computers & Geosciences 34 (2008) 1863–18761866

grid. The FILTERSIM multiple grid simulation issummarized in Algorithm 1.

Algorithm 1. FILTERSIM simulation with multiplegrids.

1: repeat

2:

rescale the geometry of the search templatefor the gth coarse grid

3:

create score maps with the rescaled filters 4: partition the training patterns into pattern

prototype classes

5: relocate hard conditioning data into the

current coarse grid Gg

6:

define a random path on the coarsesimulation grid Gg

Fig. 1. Format of user-defined filter.

7: for each node u in the random path do

8:

extract the conditioning data event dev

centered at u

9: find the prototype class prot closest to dev

10:

sample a pattern pat from prot

11:

paste pat to the realization being simulated 12: endfor

13:

if ga1, delocate hard conditioning data fromthe current coarse grid Gg

14:

until all multi-grids have been simulated

3. Implementation

The SGeMS FILTERSIM is implemented usingCþþ object-oriented and generic programmingtechnique (Austern, 1998) with the GSTL library(Remy, 2001). There are four main moduli (filter,clustering, prototype selection and pattern paster),and the prototype selection modulus includes twomoduli (distance and data integration). This mod-ular implementation facilitates algorithm modifica-tion or the replacement of any moduli. The mainmoduli’s application programming interfaces (API)are explained in the following sections.

3.1. Filters definition

A search template is used to retrieve patterns fromthe TI. The search template of FILTERSIM must berectangular of size ðnx; ny; nzÞ, where nx, ny, nz are oddpositive integers. Each node of this search template isrecorded by its relative offset to the centroid.

FILTERSIM accepts two filter definitions: thedefault filters (Zhang et al., 2006) and user-definedfilters. The default option provide three filters(average, gradient and curvature) for each of the

three grid X=Y=Z directions. Let ni be the templatesize in the ith direction (i denotes either X, Y or Z),mi ¼ ðni � 1Þ=2, and ai ¼ �mi; . . . ;þmi be the filternode offset in the ith direction, then the defaultfilters are defined as:

average filter: f i1ðaiÞ ¼ 1� jaij=mi 2 ½0; 1�;

gradient filter: f i2ðaiÞ ¼ ai=mi 2 ½�1; 1�;

curvature filter: f i3ðaiÞ ¼ 2jaij=mi � 1 2 ½�1; 1�.

The default total is thus six filters for a 2D searchtemplate and nine in 3D.

The user can also design his own filters toreproduce specific aspects of a TI. The user-definedfilters must be saved into a data file and inputthrough the FILTERSIM interface. The filter datafile should follow the following format (see Fig. 1):

The first line must be an integer numberindicating the total number of filters included inthis data file. Starting from the second line, listeach filter definition one by one. � For each filter, the first line gives the filter name

which must be a string and the weight associatedto that particular filter score (this weight is usedlater for pattern classification). In each of thefollowing lines, list the offset (x; y; z) of eachtemplate node and its associated weight(f ðx; y; zÞ). Entries are separated by spaces.

Although the geometry of the user-defined filterscan be of any shape and any size, only those filternodes within the search template are actuallyretained for the score calculation to ensure that the

Page 5: A SGeMS code for pattern simulation of continuous and ...download.xuebalib.com/xuebalib.com.6888.pdfA SGeMS code for pattern simulation of continuous and categorical variables: FILTERSIM$

ARTICLE IN PRESSJ. Wu et al. / Computers & Geosciences 34 (2008) 1863–1876 1867

filter geometry is same as that of the search template.For those nodes in the search template but not in thefilter template, FILTERSIM adds dummy nodesassociated with a zero filter value. Note that theproposed set of default filters is only one option andmay not be optimal for a particular TI. Principalcomponent analysis (Jolliffe, 1986) is another alter-native, refer to Zhang (2006) for more details.

API description: In FILTERSIM a base filterclass Filter is designed to provide filter geometry,weights for score calculations. The following twosteps demonstrate how to create a new filter type.

(1)

Fig. 2. Two classification methods. (a) Divide scores into 4 equal

frequency bins. (b) Group scores into 2 clusters with k-mean

clustering.

Inherit from that base class a new filterdefinition class Filter_New, which may takessome input arguments

class Filters_New: public Filter {Filters_New( argument_list );. . . . . .

}

(2)

Instantiate a Filter object my_filters_ fromFilter_New in the main function:

my_filters_ ¼ new Filter_New(argument_list );

3.2. Pattern clustering methods

Two alternative classification methods are pro-vided: cross-partition (Zhang, 2006) and K-meanclustering partition (Hartigan, 1975). The cross-partition consists of partitioning independently eachindividual filter score into equal frequency bins (seeFig. 2a). Given a score space of dimension L� K , ifeach filter score is partitioned into M bins(2pMp10), the total number of parent classes isML�K . Because the filter scores are partitionedindependently one from another, many of theseclasses will contain no training pattern. The cross-partition approach is fast; however, it is very roughand the final pattern classes may have widely differentpopulation sizes with most classes being empty.

A better partition method using K-mean clusteringis also proposed: given an input number of clusters,the algorithm finds the optimal centroid of eachcluster, and assign training patterns to a specificcluster according to a distance between the trainingpattern and the cluster centroids (see Fig. 2b). ThisK-mean clustering partition is one of the simplestunsupervised learning algorithms; it creates betterpattern groups all with a reasonable number ofreplicates; however, it is slow compared to the cross-

partition. The number of clusters is critical to bothCPU cost and the final simulation results.

For maximal CPU efficiency, a two-step partitionapproach is proposed:

(1)

group all training patterns into base patternclusters with a classification algorithm; thesepattern clusters are called parent classes. Eachparent class is characterized by its own prototype;

(2)

partition those parent classes that contain bothtoo many and too diverse patterns using thesame (previous) classification algorithm. Theresulting sub-classes are called children classes.These children classes might be further parti-tioned if they contain too many and too diversepatterns. Each final child class is characterizedby its own prototype.

For any class and corresponding prototype, thediversity is defined as the averaged filter variance:

V ¼1

FK

XFK

k¼1

ok � s2k, (5)

where okX0 is the weight associated with the kthfilter score. For the default filter definition, ok is 3, 2and 1 for average, gradient and curvature filters,respectively. For the user-defined filters, the ok

weight attached to each filter must be specified inthe filter data file (Fig. 1);

s2k ¼1

c

Xc

i¼1

ðSik �mkÞ

2

Page 6: A SGeMS code for pattern simulation of continuous and ...download.xuebalib.com/xuebalib.com.6888.pdfA SGeMS code for pattern simulation of continuous and categorical variables: FILTERSIM$

ARTICLE IN PRESSJ. Wu et al. / Computers & Geosciences 34 (2008) 1863–18761868

is the variance of the kth score value over the c

replicates;

mk ¼1

c

Xc

i¼1

Sik

is the mean value of the kth score value over the c

replicates; and Sik is the score of the ith replicate of

kth filter score defining the prototype.The prototypes with diversity higher than a given

threshold and with too many replicates are furtherpartitioned. This proposed two-step partition ap-proach allows finding quickly the prototype which isthe closest to the data event. With this approach, steps9 and 10 of Algorithm 1 is modified as Algorithm 2.

Algorithm 2. Search for best pattern prototype.

1: find the parent prototype protp closest to dev

2:

if protp has children prototype lists then

3:

find the child prototype protc closest to dev

4:

sample a pattern pat from protc

5:

else

6:

sample a pattern pat from protp

7:

end if

Note that the score calculation and pattern partitionare only done once for the first realization, resultingin a significant speedup when simulating a largenumber of realizations. Therefore, the K-meanclustering partition is feasible.

API description: In FILTERSIM, two utilitytemplatized function classes, InitializePrototypeList

and SplitPrototype, are designed for parent proto-type partition and children partition, respectively.Both utility classes are instantiated by a patternclustering class, which splits an input patternprototype group into several sub-classes. One canreplace that pattern clustering class with a newsplitting algorithm. That new class should provideone templatized operator function execute:

templateo class Prototype4 void executeð Prototype&proto, vectoro ScoresType

4& grouped_score Þ;

where Prototype defines the prototype type, proto isthe input prototype class and grouped_score is thereturn score vector.

3.3. Distance definition

A distance measure d is used to find the prototypeprot closest to a given data event dev. The distance

between dev and any prototype is defined as

d ¼XJ

j¼1

oj � dðdevðuþ hjÞ; protðu0 þ hjÞÞ, (6)

where J is the total number of nodes in the searchtemplate T; oj is the weight associated to eachtemplate node; dð�; �Þ is the difference function, thedefault is a Manhattan distance (Krause, 1987); u isthe center node of the data event; hj is the nodeoffset in the search template T; and u0 is the centernode location of the prototype.

Given three different data types: original harddata (t ¼ 1), previously simulated values frozen ashard data (t ¼ 2), other values informed by patternpasting (t ¼ 3). The above weight oj is defined as

oj ¼

W 1=N1 hard data ðt ¼ 1Þ;

W 2=N2 patch data ðt ¼ 2Þ;

W 3=N3 other ðt ¼ 3Þ;

8><>:

where W t ðt ¼ 1; 2; 3Þ is the weight associated withdata type t, and Nt is the number of nodes of datatype t within the data event dev. It is required thatW 1 þW 2 þW 3 ¼ 1, and W 1XW 2XW 3, to em-phasize the impact of hard data and data frozen ashard (inner patch values).

Note that the data event dev may not be fullyinformed, thus only those informed nodes areretained for the distance calculation: J is reducedin Eq. (6). If dev has no informed nodes, then allprototypes have the same distance to dev.

This pixel-wise distance calculation between dev

and prot is computational expensive, especially for3D simulation with a large TI. Alternatively, onecan first calculate the score vectors of both dataevents and prototypes using the previous filters;then find the closest prototype based on their scoredifference. By doing so, the data dimension of bothdev and prot is reduced from J to L � K , where L isthe number of filters and K is the number ofcategories (K ¼ 1 for a continuous variable). Thedistance function Eq. (6) is modified as

d ¼XL�Ki¼1

dðSidevðuÞ;S

iprotðu0ÞÞ, (7)

where S is the score value. Because L � K5J,distance calculation with Eq. (7) is much fasterthan with Eq. (6). Note that when the data event dev

is not be fully informed, the dual-template concept(Arpat, 2004) can be used to fill in the uninformednodes in order to calculate the filter scores.

Page 7: A SGeMS code for pattern simulation of continuous and ...download.xuebalib.com/xuebalib.com.6888.pdfA SGeMS code for pattern simulation of continuous and categorical variables: FILTERSIM$

ARTICLE IN PRESSJ. Wu et al. / Computers & Geosciences 34 (2008) 1863–1876 1869

API description: In FILTERSIM, the differencefunction dð�; �Þ is designed as an independenttemplatized class, which has two overloaded opera-tor functions returning the difference between twoinput vectors.

result_type operator() (InputIterator1 p1_begin,InputIterator1 p1_end,

InputIterator2 p2_begin );

result_type operator() (InputIterator1 p1_begin,InputIterator1 p1_end,

InputIterator2 p2_begin,WeightIterator weight_begin );

The first function calculates the direct differentbetween two input vectors p1 and p2; while thesecond operator function takes into account thelocation-associated weights (weight).

The distance measure d is calculated inside a baseprototype class Prototype_Base via one of thefollowing functions:

float get_score_distanceð vectorofloat4&dev_score ); float get_distance( pixel_type& pattern,vectorofloat4& weight);

The first function calculate the score-based distancemeasure and the second one returns the pixel-baseddistance measure. The distance measure can bechanged by overloading these two functions.

3.4. Data integration

In FILTERSIM, hard conditioning data arerelocated onto the simulation grid. The relocatedhard data locations are not visited during simula-tion, ensuring the hard data exactitude.

The FILTERSIM algorithm also allows users toconstrain simulations to soft data defined over thesame simulation grid. The soft data when simulatinga continuous variable are entered as a spatial trendof the attribute being modeled, hence only one softdatum is allowed with the same unit as thatattribute. For categorical TIs, there is one soft dataper category. Each cube of soft data is a probabilityfield related to the presence/absence of a category ateach simulation grid node u, hence there is a total ofK probability cubes.

For a continuous variable, steps 8 and 9 ofAlgorithm 1 is modified in Algorithm 3 to integratethe soft data. The soft data event sdev is used to fill inthe data event dev: at any uninformed location uj inthe data event, set its value to the soft data value atthe same location (devðujÞ ¼ sdevðujÞ). Because thissoft data contributes to the prototype selection, thechoice of the sampled pattern is constrained by thelocal trend. Note that once the grid node is informedduring simulation, the corresponding soft datum is nolonger used to find the closest prototype.

Algorithm 3. Data integration for continuousvariable.

1: at each node u along the random path, use the

search template T to extract both the data eventdev from the realization being simulated, andthe soft data event sdev from the soft data field

2:

if dev is empty (no informed data) then 3: replace dev by sdev

4:

else

5:

use sdev to fill in dev at all uninformed datalocations within the search template T centeredat u

6:

end if

7:

use dev to find the closest prototype useAlgorithm 2

For a categorical variable, the original TI has

been internally transformed into K binary indicatormaps through Eq. (2), thus each class prototype is aset of K probability templates (Eq. (4)). At eachsimulation location u, the prototype closest to thedata event dev is a probability vector probðuÞ. Thesame search template T is used to retrieve the softdata event sdevðuÞ at location u.

The Tau model (Journel, 2002) is used tointegrate sdevðuÞ and probðuÞ pixel-wise at eachnode uþ hj of the search template T into a new

probability cube dev�ðuÞ. Let ptk be the marginal

category proportion in the TI for the kth category,

pð1Þk ðuþ hjÞ be the probability from probðuÞ, and

pð2Þk ðuþ hjÞ be the local soft probability from sdevðuÞ;

the updated probability p�k at location uþ hj in

dev�ðuÞ is calculated with the following formula:

p�k ¼1� pt

k

ptk

� �1�t1�t2 1� pð1Þk

pð1Þk

!t1"

�1� p

ð2Þk

pð2Þk

!t2

þ 1

#�1, (8)

Page 8: A SGeMS code for pattern simulation of continuous and ...download.xuebalib.com/xuebalib.com.6888.pdfA SGeMS code for pattern simulation of continuous and categorical variables: FILTERSIM$

ARTICLE IN PRESSJ. Wu et al. / Computers & Geosciences 34 (2008) 1863–18761870

where t1 and t2 are the weights associated with theTI and the soft probability data, respectively.Default values are t1 ¼ t2 ¼ 1.

Next, find the prototype closest to dev�ðuÞ,randomly draw a pattern from that prototype classand paste the sampled pattern onto the simulationgrid. The detailed procedure of integrating softprobability data for categorical attributes is pre-sented in Algorithm 4.

Fig.

light

Algorithm 4. Data integration for categoricalvariable.

1: at each node u along the random path, use the

search template T to retrieve both the dataevent dev from the realization being simulatedand the soft data event sdev from the input softdata field

2:

if dev is empty (no informed data) then 3: define a new data event dev� ¼ sdev

4:

else

5:

use dev to find the closest prototype prot useAlgorithm 2

6:

use Tau model to combine prototype prot

and the soft data event sdev into a new data

event dev� as the local probability map

7: end if

8:

find the prototype closest to dev� use Algorithm 2

3. Simulation with region concept: each region is associated to a

gray: levee).

API description: For a continuous variable,

the soft data are used to fill in any non-informeddata location. This is done inside the HD_DEV_Finder_Continuous class through an operatorfunction:

bool operator() (random_path_iterator itr,vectorofloat4& dev,

vectorofloat4& weight Þ

where dev receives the input local soft data andreturns the integration of local data event and softdata, weight returns the weights associated withdifferent data types.

For a categorical variable, the integration oflocal soft probability data and the prototypeprobability is done through an independent classFiltersim_Tau_updating, which contains an operatorfunction:

inline void operatorðÞ ð vectoro vectorofloat4

4& prot, constvectoro vectorofloat4 4& sdevÞ

where prot is the input prototype, sdev is the localsoft probability, the integrated data are returnedthrough prot.

specific TI (black: mud facies; dark gray: channel; gray: crevasse;

Page 9: A SGeMS code for pattern simulation of continuous and ...download.xuebalib.com/xuebalib.com.6888.pdfA SGeMS code for pattern simulation of continuous and categorical variables: FILTERSIM$

ARTICLE IN PRESSJ. Wu et al. / Computers & Geosciences 34 (2008) 1863–1876 1871

4. Non-stationary simulation with region concept

Any TI should be reasonably stationary so thatmeaningful statistics can be inferred by scanning it.It is, however, possible to introduce some non-stationarity in the simulation through local rotationand local scaling of an otherwise stationary TI. Inmore difficult cases, the geological structures maybe fundamentally different from one zone or regionto another, calling for different TIs in differentregions, see Fig. 3. Note that the regions can be ofany shape, even made of non-connected parts, seeregion R3. Also, parts of the study field may beinactive (R4 in Fig. 3), hence there is no need toperform FILTERSIM simulation at those locations.

The simulation grid G is first divided into a setof sub-domains (regions) Gi, i ¼ 1; . . . ;NR, whereNR is the total number of regions, andG1 [ � � � [ GNR ¼ G. Perform FILTERSIM simula-tion for each active region with its specific TI and itsown parameter settings. The regions can besimulated in any order, and the regions with thesame geological scenario can be simulated simulta-neously through a random path visiting all regions.

Except for the first region, simulation in theregions can be conditioned to values simulated inother regions, such as to reduce discontinuity acrossregion boundaries. The simulation file not onlycontains the property values in current region, butalso the property copied from the conditioningregions. For instance in Fig. 3, when region 2 (R2) issimulated conditional to the property re1 in region 1(R1), the simulated realization re1;2 contains theproperty in both R1 and R2. Next the property re1;2can be used as conditioning data to performFILTERSIM simulation in region 3 (R3), whichwill result in a realization over all the active areasðR1þR2þR3Þ.

5. Parameters description

In SGeMS, the FILTERSIM algorithm has beencoded into two programs: FILTERSIM_CONT forcontinuous simulation and FILTERSIM_CATE forcategorical simulation.

5.1. FILTERSIM_CONT

The FILTERSIM_CONT for continuous vari-able simulation can be invoked fromSimulation j filtersim_cont in the upper part of theSGeMS algorithm panel. Its main interface has four

pages: ‘general’, ‘conditioning’, ‘region’ and ‘ad-vanced’ (see Fig. 4). The FILTERSIM_CONTparameters is presented page by page in thefollowing. The text inside ‘[ ]’ is the correspondingkeyword in the FILTERSIM_CONT parameterfile.

1.

Simulation grid name [GridSelector_Sim]:The name of grid on which simulation is to beperformed.

2.

Property name prefix [Property_Name_Sim]:The name of the property to be simulated.

3.

# of realizations [Nb_Realizations]: Num-ber of realizations to be simulated.

4.

Seed [Seed]: A large odd number to initializethe pseudo-random number generator.

5.

Training image j object [PropertySelec-tor_Training.grid]: The name of the gridcontaining the TI.

6.

Training image j property [PropertySelector_Training.property]: The TI property, whichmust be a continuous variable.

7.

Search template dimension [Scan_Template]:The size of the 3D template used to define thefilters. The same template is used to retrievetraining patterns and data events during simula-tion.

8.

Inner patch dimension [Patch_Template_ADVANCED]: The size of the 3D patch ofsimulated nodal values frozen as hard dataduring simulation.

9.

Match training image histogram [Trans_Re-sult]: This flag indicates whether the simulatedresult on the penultimate coarse grid should betransformed to honor the TI statistics. Ifmarked, perform internal histogram transfor-mation on those simulated results. The default isnot to use internal data transformation.

10.

Hard data j object [Hard_Data.grid]: Thegrid containing the hard conditioning data. Thehard data object must be a point set. The defaultinput is ‘None’, which means no hard con-ditioning data is used.

11.

Hard data j property [Hard_Data.property]:The property of the hard conditioning data,which must be a continuous variable.

12.

Use soft data [Use_SoftField]: This flagindicates whether or not the simulation shouldbe conditioned to soft data (as local varyingmean). If marked, perform FILTERSIM con-ditional to soft data. The default is not to usesoft data.
Page 10: A SGeMS code for pattern simulation of continuous and ...download.xuebalib.com/xuebalib.com.6888.pdfA SGeMS code for pattern simulation of continuous and categorical variables: FILTERSIM$

ARTICLE IN PRESS

Fig. 4. FILTERSIM_CONT main interface: (A) general; (B) conditioning; (C) region; (D) advanced.

J. Wu et al. / Computers & Geosciences 34 (2008) 1863–18761872

13.

Soft data property [SoftData]: Selection forlocal soft data conditioning. Note that only onesoft conditioning property is allowed which istreated as a local varying mean, and the softdata must be given over the same simulationgrid as defined in item 1.

14.

Use region [Use_Region]: The flag indicateswhether to use region concept. If marked(set as 1), perform FILTERSIM simulationwith the region concept; otherwise per-form FILTERSIM simulation over the wholegrid.
Page 11: A SGeMS code for pattern simulation of continuous and ...download.xuebalib.com/xuebalib.com.6888.pdfA SGeMS code for pattern simulation of continuous and categorical variables: FILTERSIM$

ARTICLE IN PRESSJ. Wu et al. / Computers & Geosciences 34 (2008) 1863–1876 1873

15.

Property with region code [Region_Indica-tor_Prop]: The property containing the indexcoding of the regions, must be given over thesame simulation grid as defined in (1). Theregion code ranges from 0 to NR � 1 where NR

is the total number of regions.

16. List of active regions [Active_Region_Code]:

Input the index of region to be simulated, orindices of the regions to be simulated simulta-neously. If simulation with multiple regions, theinput region indices (codes) should be separatedby spaces.

17.

Condition to other regions [Use_Previous_Simulation]: The option to perform regionsimulation conditional to data from otherregions.

18.

Property of previously simulated regions [Pre-vious_Simulation_Pro]: The property si-mulated in the other regions. The property canbe different from one region to another.

19.

# of multigrids [Nb_Multigrids_ADVANCED]:The number of multiple grids to consider inthe multiple grid simulation. The default valueis 3.

20.

Min # of replicates for each grid [Cmin_Replicates]: A pattern prototype split criter-ia. Only those prototypes with more thanCmin_Replicates can be further divided.Input a Cmin_Replicates value for eachmultiple coarse grid. The default value is 10 foreach multigrid.

21.

Weights to hard, patch and other [Data_Weights]: The weights assigned to differentdata types (hard data, patched data andall the other data). The sum of these weightsmust be 1. The default values are 0.5, 0.3and 0.2.

22.

Debug level [Debug_Level]: The flag controlsthe output in the simulation grid. The larger thedebug level, the more outputs from FILTER-SIM simulation:� If 0, then only the final simulation result isoutput (default value).� If 1, then the filter score maps associated withthe original fine grid search template are alsooutput in the TI grid.� If 2, then the simulation results on the coarsegrids are output in addition to the outputs ofoptions 0 and 1.� If 3, then output one more property in the TIgrid, which is the indicator map for all parentprototypes.

23.

Cross-partition [CrossPartition]: Performpattern classification with cross-partition meth-od (default option).

24.

Partition with K-mean [KMeanPartition]:Perform pattern classification with K-meanclustering method. ‘Cross Partition’ and‘Partition with K-mean’ are mutuallyexclusive.

25.

Number of bins for each filter score j Initializa-

tion [Nb_Bins_ADVANCED]: The number ofbins for parent partition when using cross-partition; the default value is 4. Or the numberof clusters for parent partition when usingK-mean partition; the default value is 200.

26.

Number of bins for each filter score j secondary

partition [Nb_Bins_ADVANCED2]: The numberof bins for children partition when using cross-partition; the default value is 2. Or the numberof clusters for children partition when usingK-mean partition; the default value is 2.

27.

Distance calculation based on j template pixels

[Use_Normal_Dist]: The distance as thepixel-wise sum of differences between the dataevent values and the corresponding prototypevalues (Eq. (6)). This is the default option.

28.

Distance calculation based on j filter scores

[Use_Score_Dist]: The distance is defined asthe sum of differences between the data eventscores and the pattern prototype scores.

29.

Default filters [Filter_Default]: The optionto use the default filters provided by FILTER-SIM: six filters for a 2D search template andnine filters for a 3D search template.

30.

User-defined filters [Filter_User_Define]:The option to use user’s own filter definitions.‘Default’ and ‘User Defined’ are mutuallyexclusive.

31.

The data file with filter definition

[User_Def_Filter_File]: Input a data filewith the filter definitions (see Fig. 1). Thisparameter is ignored if Filter_User_Defineis set to 0.

5.2. FILTERSIM_CATE

The FILTERSIM_CATE algorithm for catego-rical variable simulations can be invoked fromSimulation j filtersim_cate in the upper part of theSGeMS algorithm panel. Its main interface has fourpages: ‘general’, ‘conditioning’, ‘region’ and ‘ad-vanced’ (the first two pages are given in Fig. 5, and

Page 12: A SGeMS code for pattern simulation of continuous and ...download.xuebalib.com/xuebalib.com.6888.pdfA SGeMS code for pattern simulation of continuous and categorical variables: FILTERSIM$

ARTICLE IN PRESS

Fig. 5. FILTERSIM_CATE main interface: (A) general; (B) conditioning.

J. Wu et al. / Computers & Geosciences 34 (2008) 1863–18761874

the last two pages are given in Figs. 4c–d). Becausemost of FILTERSIM_CATE parameters are simi-lar to those of FILTERSIM_CONT program, onlythe parameters unique to FILTERSIM_CATE(items 6, 9, 11 and 13) are presented in thefollowing. Refer to FILTERSIM_CONT para-meter descriptions for all other parameters. Thetext inside ‘[ ]’ is the corresponding keyword in theFILTERSIM_CONT parameter file.

6.

Training image j property [PropertySelec-tor_Training.property]: The TI prop-erty, which must be a categorical variablewhose value must be between 0 and K � 1,where K is the number of categories.

9.a

# of categories [Nb_Facies]: The totalnumber of categories when working withcategorical variable. This number must beconsistent with the number of categories inthe TI.

9.b

Treat as continuous data for classification

[Treat_Cate_As_Cont]: The flag to treatthe categorical TI as a continuous TI forpattern classification (but the simulation isstill performed with categorical variables).With this option, the F filters are directly

applied on the TI without having to transformthe categorical variable numerical code into K

sets of binary indicators, hence the resultingscore space is of dimension F instead of F � K ,and it is faster. Note that the TI specificcategorical coding will affect the simulationresults.

9.c

Match training image proportions [Trans_Result]: This flag indicates whether thesimulated result on the next to last gridshould be transformed to honor the TIstatistics. If marked, an internal categoricalproportion transformation is performed onthose simulated results. The default is not touse data transformation.

11.

Hard data j property [Hard_Data.prop-erty]: The property of the hard conditioningdata, which must be a categorical variablewith values between 0 and K � 1. Thisparameter is ignored when no hard dataconditioning is selected.

13.a

Soft data j choose properties [SoftData_properties]: Selection for local soft dataconditioning. For a categorical variable, selectone and only one property for each category.The property sequence is critical to the
Page 13: A SGeMS code for pattern simulation of continuous and ...download.xuebalib.com/xuebalib.com.6888.pdfA SGeMS code for pattern simulation of continuous and categorical variables: FILTERSIM$

ARTICLE IN PRESS

Fig. 6. Final FILTERSIM realization with region concept (white

lines are the region boundaries and white area is the inactive

region).

J. Wu et al. / Computers & Geosciences 34 (2008) 1863–1876 1875

simulation result: the kth property corre-sponds to k category. This parameter isignored if Use_ProbField is set to 0. Notethat the soft data must be given over the samesimulation grid as defined in item 1.

13.b

Fig. 7. FILTERSIM used to fill in the shadow zone of a 3D

seismic cube. (a) Simulation grid with conditioning data. (b) Fill-

in simulation with FILTERSIM.

Tau values for training image and soft data

[TauModelObject]: Input two Tau para-meter values: the first tau value is for the TI,the second tau value is for the soft condition-ing data. The default tau values are ‘1 1’. Thisparameter is ignored if Use_SoftField(item 12) is set to 0.

6. Examples

FILTERSIM is run for both unconditional andconditional simulations. The first example demon-strates the categorical FILTERSIM algorithm for anon-stationary simulation. The second exampleillustrates the ability of the FILTERSIM algorithmto handle continuous variables.

6.1. 2D unconditional region simulation

In this example, FILTERSIM is performedwithout any conditioning data over a 2D grid ofsize 150� 100, which was divided into four regions(Fig. 3). Region R1 is simulated with a three facieschannel TI of size 195� 150; region R2 is simulatedwith a two facies channel TI of size 250� 250;region R3 has two separated parts and is simulatedwith a four facies TI of size 150� 150; and regionR4 is the non-reservoir area, hence no FILTERSIMsimulation is performed in this inactive region.

The regions are simulated sequentially from R1 toR3, with the same search template of size 11� 11and inner patch 7� 7. Fig. 6 shows one suchrealization, where the continuity of the geologicalstructures across the region boundaries (white lines)is reasonably well preserved, and the facies attach-ing sequence is preserved in all active regions.

The facies coding is consistent among three TIs,with mudstone coded as category 0, sandstonecoded as category 1.

6.2. 3D simulation of continuous seismic data

In this example, the FILTERSIM algorithm isused to enhance the shadow zone of a 3D seismicimage. Fig. 7a shows a 3D seismic image with amissing zone due to a shadow effect. The whole gridis of size 450� 249� 50, and the percentage ofmissing values is 24.3%. The goal here is to fill inthe missing zone by extending the geologicalstructures present in the neighboring areas. TheNorth part of the original seismic image is retainedas the TI, which is of size 150� 249� 50, see thearea within the upper white rectangular box.

Page 14: A SGeMS code for pattern simulation of continuous and ...download.xuebalib.com/xuebalib.com.6888.pdfA SGeMS code for pattern simulation of continuous and categorical variables: FILTERSIM$

ARTICLE IN PRESSJ. Wu et al. / Computers & Geosciences 34 (2008) 1863–18761876

The size of the search template is 21� 21� 7, thesize of the patch template is 15� 15� 5, thenumber of multiple grids is 3, and the number ofbins for parent partition is 3. All available seismicdata are used for hard conditioning and arereproduced exactly. One FILTERSIM realizationis given in Fig. 7b. The simulation area is delineatedby the white and black lines. The layering structuresare seen to extend without discontinuities from theconditioning area into the simulation area. Thehorizontal large-scale structures reasonably wellreproduced.

7. Summary

By applying a set of filters to a training image, thetraining patterns can be represented by a few filterscores in a filter score space; this leads to asignificant dimension reduction of the trainingpatterns. Two alternative classification methodsare proposed to group the training patterns intopattern groups identified by prototypes. The classi-cal sequential simulation procedure is extended forpattern simulation. At each node on the simulationgrid, the conditioning data event is retrieved andused to find the closest pattern prototype, fromwhich a training pattern is sampled and pasted backonto the simulation grid. The inner patch of thesampled pattern is frozen as hard data, which resultsin not only a faster simulation but also a betterpattern reproduction. The multiple grid simulationconcept is implemented, which allows capturinggeological structures at different scales. All thenodes simulated in a coarser grid are re-simulated inthe next finer grid.

Various examples show that the FILTERSIMalgorithm works reasonably well for both catego-rical variable and continuous variable trainingimages, without or with conditioning to sub-surfacedata such as well data and seismic data.

This paper and the companion code are offered asan invitation to develop and expand the currentcapabilities of the FILTERSIM algorithm.

References

Arpat, G.B., 2004. Sequential simulation with patterns. Ph.D.

Dissertation, Stanford University, Stanford, CA, 166pp.

Arpat, G.B., Caers, J., 2007. Conditional simulation with

patterns. Mathematical Geology 39 (2), 177–203.

Austern, M.H., 1998. Generic Programming and the STL.

Addison Wesley, Boston, MA, 548pp.

Bonet, J.S.D., 1997. Multiresolution sampling procedure for

analysis and synthesis of texture images. Computer Graphics

31, 361–368 (Annual Conference Series).

Deutsch, C.V., Journel, A.G., 1998. GSLIB: Geostatistical

Software Library and User’s Guide, second ed. Oxford

University Press, New York, NY, 369pp.

Goovaerts, P., 1997. Geostatistics for Natural Resources

Evaluation. Oxford University Press, New York, NY, 483pp.

Guardiano, F., Srivastava, R.M., 1992. Multivariate geostatis-

tics: beyond bivariate moments. In: Soares, A. (Ed.),

Proceedings of the Fourth International Geostatistics Con-

gress, vol. 1. Kluwer Academic Publications, Dordrecht,

Netherlands, pp. 133–144.

Haldorsen, H., Chang, D., 1986. Notes on stochastic shales: from

outcrop to simulation model. In: Lake, L., Caroll, H. (Eds.),

Reservoir Characterization. Academic Press, Burlington,

MA, pp. 445–485.

Hartigan, J.A., 1975. Clustering Algorithms. Wiley, New York,

NY, 351pp.

Jolliffe, I.T., 1986. Principal Component Analysis. Springer,

New York, NY, 271pp.

Journel, A.G., 1992. Geostatistics: roadblocks and challenges. In:

Soares, A. (Ed.), Proceedings of the Fourth International

Geostatistics Congress, vol. 1. Kluwer Academic Publica-

tions, Dordrecht, Netherlands, pp. 133–144.

Journel, A.G., 2002. Combining knowledge from diverse sources:

an alternative to traditional data independence hypotheses.

Mathematical Geology 34 (5), 573–596.

Krause, E.F., 1987. Taxicab Geometry: An Adventure in Non-

Euclidean Geometry. Dover Publications, New York, NY,

88pp.

Remy, N.N., 2001. GSTL: the geostatistical template library in

Cþþ. M.S. Thesis, Stanford University, Stanford, CA,

142pp.

Strebelle, S., 2000. Sequential simulation drawing structures from

training images. Ph.D. Dissertation, Stanford University,

Stanford, CA, 187pp.

Tran, T., 1994. Improving variogram reproduction on dense

simulation grids. Computers & Geosciences 20 (7),

1161–1168.

Wei, L., 2001. Texture synthesis by fixed neighborhood search-

ing. Ph.D. Dissertation, Stanford University, Stanford, CA,

132pp.

Zhang, T., 2006. Filter-based training pattern classification for

spatial pattern simulation. Ph.D. Dissertation, Stanford

University, Stanford, CA, 137pp.

Zhang, T., Switzer, P., Journel, A.G., 2006. Filter-based

classification of training image patterns for spatial simulation.

Mathematical Geology 38 (1), 63–80.

Page 15: A SGeMS code for pattern simulation of continuous and ...download.xuebalib.com/xuebalib.com.6888.pdfA SGeMS code for pattern simulation of continuous and categorical variables: FILTERSIM$

本文献由“学霸图书馆-文献云下载”收集自网络,仅供学习交流使用。

学霸图书馆(www.xuebalib.com)是一个“整合众多图书馆数据库资源,

提供一站式文献检索和下载服务”的24 小时在线不限IP

图书馆。

图书馆致力于便利、促进学习与科研,提供最强文献下载服务。

图书馆导航:

图书馆首页 文献云下载 图书馆入口 外文数据库大全 疑难文献辅助工具