日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NetCDF 入门

發(fā)布時(shí)間:2024/9/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NetCDF 入门 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、概述
? NetCDF全稱為network Common Data Format,中文譯法為“網(wǎng)絡(luò)通用數(shù)據(jù)格式”,
對程序員來說,它和zip、jpeg、bmp文件格式類似,都是一種文件格式的標(biāo)準(zhǔn)。netcdf
文件開始的目的是用于存儲氣象科學(xué)中的數(shù)據(jù),現(xiàn)在已經(jīng)成為許多數(shù)據(jù)采集軟件的生成文件
的格式。
?? 從數(shù)學(xué)上來說,netcdf存儲的數(shù)據(jù)就是一個(gè)多自變量的單值函數(shù)。用公式來說就是
f(x,y,z,...)=value, 函數(shù)的自變量x,y,z等在netcdf中叫做維(dimension)
或坐標(biāo)軸(axix),函數(shù)值value在netcdf中叫做變量(Variables).而自變量和函數(shù)值
在物理學(xué)上的一些性質(zhì),比如計(jì)量單位(量綱)、物理學(xué)名稱等等
在netcdf中就叫屬性(Attributes).

二、netcdf的下載
?netcdf的是官方網(wǎng)站為http://www.unidata.ucar.edu/software/netcdf/。
?在本文中,我們主要討論在windows平臺上使用netcdf軟件庫。我們將要從這個(gè)網(wǎng)站上
下載如下資源
⑴netcdf的源代碼,目前的地址為
?ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4/netcdf-beta.tar.gz
⑵netcdf的在windows平臺預(yù)編譯好的dll,地址為
?ftp://ftp.unidata.ucar.edu/pub/netcdf/contrib/win32/netcdf-3.6.1-win32.zip
?解壓后里面有如下東西
?netcdf.dll? 為編譯好的dll
?ncgen.exe? 為生成netcdf文件的工具
?ncdump.exe 為讀取netcdf文件的工具
?netcdf.lib 和?netcdf.exp在編程時(shí)會用到,后面會講。
⑶netcdf的相關(guān)文檔,包括
?①netcdf的用戶手冊,下載地址為http://www.unidata.ucar.edu/software/netcdf/docs/netcdf.pdf?
?②netcdf的入門教程, 下載地址為http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-tutorial.pdf
?③netcdf的c接口api手冊,下載地址為http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-c.pdf
?下面我們來看netcdf文件的具體內(nèi)容。

三、netcdf文件的內(nèi)容
一個(gè)netcdf文件的結(jié)構(gòu)包括以下對象:
1、變量(Variables)
?? 變量對應(yīng)著真實(shí)的物理數(shù)據(jù)。比如我們家里的電表,每個(gè)時(shí)刻顯示的讀數(shù)表示用戶的到該時(shí)刻的耗電量。
這個(gè)讀數(shù)值就可以用netcdf里的變量來表示。它是一個(gè)以時(shí)間為自變量(或者說自變量個(gè)數(shù)為一維)的單值
函數(shù)。再比如在氣象學(xué)中要作出一個(gè)氣壓圖,就是“東經(jīng)xx度,北緯yy度的點(diǎn)的大氣壓值為多少帕”,這是
一個(gè)二維單值函數(shù),兩維分別是經(jīng)度和緯度。函數(shù)值為大氣壓。
?? 從上面的例子可以看出,netcdf中的變量就是一個(gè)N維數(shù)組,數(shù)組的維數(shù)就是實(shí)際問題中的自變量個(gè)數(shù),
數(shù)組的值就是觀測得到的物理值。變量(數(shù)組值)在netcdf中的存儲類型有六種,ascii字符(char) ,字節(jié)(byte), 短整型(short), 整型(int), 浮點(diǎn)(float), 雙精度(double). 顯然這些類型和c中的類型一致,搞C的朋友應(yīng)該很快就能明白。
2、維(dimension)
?? 一個(gè)維對應(yīng)著函數(shù)中的某個(gè)自變量,或者說函數(shù)圖象中的一個(gè)坐標(biāo)軸,在線性代數(shù)中就是一個(gè)N維向量
的一個(gè)分量(這也是維這個(gè)名稱的由來)。在netcdf中,一個(gè)維具有一個(gè)名字和范圍(或者說長度,也就
是數(shù)學(xué)上所說的定義域,可以是離散的點(diǎn)集合或者連續(xù)的區(qū)間)。在netcdf中,維的長度基本都是有限的,
最多只能有一個(gè)具有無限長度的維。
3、屬性(Attribute)
?? 屬性對變量值和維的具體物理含義的注釋或者說解釋。因?yàn)樽兞亢途S在netcdf中都只是無量綱的數(shù)字,
要想讓人們明白這些數(shù)字的具體含義,就得靠屬性這個(gè)對象了。
?? 在netcdf中,屬性由一個(gè)屬性名和一個(gè)屬性值(一般為字符串)組成。比如,在某個(gè)cdl文件
(cdl文件的具體格式在下一節(jié)中講述)中有這樣的代碼段
?? temperature:units = "celsius" ;????
?? 前面的temperature是一個(gè)已經(jīng)定義好的變量(Variable),即溫度,冒號后面的units就是屬性名,
表示物理單位,=后面的就是units這個(gè)屬性的值,為“celsius” ,即攝氏度,整個(gè)一行代碼的意思就是
溫度這個(gè)物理量的單位為celsius,很好理解。

三、CDL結(jié)構(gòu)
?? CDL全稱為network Common data form Description Language,它是用來描述netcdf文件
的結(jié)構(gòu)的一種語法格式。它包括前面所說的三種netcdf對象(變量、維、屬性)的具體定義。
看一個(gè)具體例子(這個(gè)例子cdl文件是從netcdf教程中的2.1 節(jié)The simple xy Example摘出來的)?
netcdf simple_xy {
dimensions:
x = 6 ;
y = 12 ;
variables:
int data(x, y) ;
data:
data =
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71 ;
}
上面的代碼定義了一個(gè)符合netcdf格式的結(jié)構(gòu)simple_xy,??
這個(gè)結(jié)構(gòu)包括三個(gè)部分
1、維的定義,以dimensions:關(guān)鍵字開頭
?? dimensions:
?x = 6 ;
?y = 12 ;
?定義了兩個(gè)軸(或者說兩維),名字分別為x和y,x軸的長度(準(zhǔn)確的說是坐標(biāo)點(diǎn)的個(gè)數(shù))為6,
?y軸的長度為12。
2、變量的定義:以variables:開頭
?variables:
??int data(x, y);
??定義了一個(gè)以x軸和y軸為自變量的函數(shù)data,數(shù)學(xué)公式就是f(x,y)=data;
??注意維出現(xiàn)的順序是有序的,它決定data段中的具體賦值結(jié)果.
3、數(shù)據(jù)的定義,以data:開頭
?data:
data =
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71 ;
這個(gè)段數(shù)據(jù)用數(shù)學(xué)的函數(shù)公式f(x,y)=data來看,
就是? x=0,y=0時(shí),data = 0;
???? x=0,y=1時(shí),data = 1;
?????
?????
???? x=5,y=11是,data=71;
要注意的是,
1、賦值順序:
我們給出的是c格式的cdl文件,因此這里的賦值順序和c語言中的一致,也就是通常所說的“行式賦值”,
而fortran語言中則是“列式賦值”,因此在fortran格式的cdl文件中,data段的數(shù)值順序和這里正好
行列互換。?????
2、自變量的默認(rèn)取值和坐標(biāo)變量
?? 如果只給出維的長度,那么維的值默認(rèn)從0開始,然后自動(dòng)加1,到(長度-1)停止,
?? 很多情況下我們要自己給出每個(gè)點(diǎn)的坐標(biāo)值,這時(shí)就需要用到netcdf里的坐標(biāo)變量
?? "coordinate varibles":增加一個(gè)和只和維相關(guān)的一元函數(shù)(自變量)并給出它的取值范圍。
?? 比如下面的cdl文件(摘自netcdf教程中的2.2 The sfc pres temp Example)
?? netcdf sfc_pres_temp {
?dimensions:
?latitude = 6 ;??????? //緯度軸
?longitude = 12 ;????? //經(jīng)度軸
?variables:
?float latitude(latitude) ;??? //坐標(biāo)變量,存儲具體緯度
?latitude:units = "degrees_north" ;
?float longitude(longitude) ;? //坐標(biāo)變量,存儲具體緯度
?longitude:units = "degrees_east" ;
?float pressure(latitude, longitude) ;?? //某個(gè)點(diǎn)(經(jīng)度和緯度的交點(diǎn))的大氣壓值
?pressure:units = "hPa" ;?????????? //大氣壓的單位為
?float temperature(latitude, longitude) ; //某個(gè)點(diǎn)(經(jīng)度和緯度的交點(diǎn))的溫度值
?temperature:units = "celsius" ;??? //溫度的單位為
?data:
?latitude = 25, 30, 35, 40, 45, 50 ;
?longitude = -125, -120, -115, -110, -105, -100, -95, -90, -85, -80, -75, -70 ;
?pressure =
?900, 906, 912, 918, 924, 930, 936, 942, 948, 954, 960, 966,
?901, 907, 913, 919, 925, 931, 937, 943, 949, 955, 961, 967,
?902, 908, 914, 920, 926, 932, 938, 944, 950, 956, 962, 968,
?903, 909, 915, 921, 927, 933, 939, 945, 951, 957, 963, 969,
?904, 910, 916, 922, 928, 934, 940, 946, 952, 958, 964, 970,
?905, 911, 917, 923, 929, 935, 941, 947, 953, 959, 965, 971 ;
?temperature =
?9, 10.5, 12, 13.5, 15, 16.5, 18, 19.5, 21, 22.5, 24, 25.5,
?9.25, 10.75, 12.25, 13.75, 15.25, 16.75, 18.25, 19.75, 21.25, 22.75, 24.25,
?25.75,
?9.5, 11, 12.5, 14, 15.5, 17, 18.5, 20, 21.5, 23, 24.5, 26,
?9.75, 11.25, 12.75, 14.25, 15.75, 17.25, 18.75, 20.25, 21.75, 23.25, 24.75,
?26.25,
?10, 11.5, 13, 14.5, 16, 17.5, 19, 20.5, 22, 23.5, 25, 26.5,
?10.25, 11.75, 13.25, 14.75, 16.25, 17.75, 19.25, 20.75, 22.25, 23.75,
?25.25
?對于上面的數(shù)據(jù),就是
?latitude = 25,longitude = -125時(shí),pressure =?900,temperature =? 9;
?latitude = 25,longitude = -120時(shí),pressure =?906,temperature =? 10.5;
?以此類推。
?
四、netcdf文件的讀寫
?? “學(xué)以致用”?,前面講的都是netcdf的基本知識,都是為了本節(jié)的核心問題——讀寫netcdf格式的文件
做鋪墊之用,下面我們就來看看如何建立一個(gè)netcdf格式文件,以及如何再讀出它的內(nèi)容。
1、在命令行下讀寫netcdf文件
? ⑴建立一個(gè)simple_xy.cdl文件,內(nèi)容就是上一節(jié)“CDL結(jié)構(gòu)”中的第一個(gè)例子。
? ⑵用ncgen.exe工具(下載地址見前面的第二節(jié))建立netcdf文件
? ? ①將ncgen所在目錄加到系統(tǒng)path變量中或者直接將ncgen.exe拷到simple_xy.cdl所在目錄下
? ? ②執(zhí)行ncgen -o simple_xy.nc simple_xy.cdl生成netcdf格式文件simple_xy.nc
? ⑶生成的simple_xy.nc是一個(gè)二進(jìn)制文件,要想從這個(gè)文件中還原出數(shù)據(jù)信息,就要用ncdump工具
???? ①將ncdump所在目錄加到系統(tǒng)path變量中或者直接將ncdump.exe拷到simple_xy.nc所在目錄下
???? ②在命令行下執(zhí)行ncdump simple_xy.nc,這時(shí)屏幕的輸出和simple_xy.cdl內(nèi)容完全一樣。說明
???? 我們的文件讀寫操作都是正確的。
?
2、編程讀寫netcdf文件
?前面我們知道如何手工去建立和讀取netddf文件,下面我們來看看如何在程序中用代碼實(shí)現(xiàn)netcdf
文件的建立和分析。我的編程環(huán)境為win2000+vc6.0 并安裝了vc sp6補(bǔ)丁包。例子代碼選自
netcdf教程中的2.1節(jié)The simple xy Example
⑴將netcdf的源代碼解壓。我們將用到里面的libsrc/netcdf.h頭文件
⑵在vc6中建立一個(gè)空的win32控制臺項(xiàng)目.名字為SimpleXyWrite,這個(gè)項(xiàng)目用來建立netcdf文件
⑶把如下文件拷貝到項(xiàng)目目錄中
①netcdf源代碼中的libsrc/netcdf.h頭文件
②netcdf源代碼中的examples/C/simple_xy_wr.c文件,并改名為simple_xy_wr.cpp
③netcdf預(yù)編譯包中的netcdf.dll文件和?netcdf.lib文件
⑷把netcdf.h文件和simple_xy_wr.cpp加入到項(xiàng)目的文件列表中
? (具體菜單操作project->add to project->files)
⑸把netcdf.lib加入到項(xiàng)目的lib列表中
?(具體菜單操作project->add to project->settings->Link->object/library modules)
⑹編譯并運(yùn)行這個(gè)項(xiàng)目,會在項(xiàng)目目錄下生成一個(gè)simple_xy.nc文件,其內(nèi)容和我們手工生成的
文件內(nèi)容完全一樣。

simple_xy_wr.c文件是建立netcdf文件的c代碼,而examples/C/simple_xy_rd.c文件則是分析
netcdf文件的代碼,讀者可以用和剛才類似的步驟在vc6中編譯這個(gè)文件。運(yùn)行時(shí)把把剛才生成的
simple_xy.nc拷貝到項(xiàng)目的目錄下,如果文件格式?jīng)]錯(cuò)誤,會提示
*** SUCCESS reading example file simple_xy.nc!
然后退出。

3、用ncgen命令自動(dòng)生成c代碼
? 給定了simple_xy.cdl文件后,可以用
? ncgen -c? simple_xy.cdl
? 命令直接在屏幕上輸出c代碼.
? 不過,這個(gè)辦法只限于cdl的數(shù)據(jù)比較簡單時(shí)才可以采用。對于真正的項(xiàng)目,
? 是需要我們自己去編寫代碼的。
??
五、小結(jié)
?通過以上內(nèi)容的介紹,相信讀者對netcdf已經(jīng)有了大致的了解。總體來說,
netcdf的核心內(nèi)容就是通過cdl描述文法來建立一個(gè)netcdf格式文件。抓住了這一點(diǎn),
讀者再繼續(xù)深入看netcdf的其他資料時(shí),應(yīng)該就沒什么太大的難度了。如是,作者的
目的也就達(dá)到了。

六、附錄
為便于讀者對照,現(xiàn)本文中用到的幾個(gè)文件的內(nèi)容在此列出
1、simple_xy.cdl文件的內(nèi)容
netcdf simple_xy {
dimensions:
x = 6 ;
y = 12 ;
variables:
int data(x, y) ;
data:
data =
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71 ;
}
2、simple_xy-wr.c文件的內(nèi)容
/* This is part of the netCDF package.
?? Copyright 2006 University Corporation for Atmospheric Research/Unidata.
?? See COPYRIGHT file for conditions of use.

?? This is a very simple example which writes a 2D array of
?? sample data. To handle this in netCDF we create two shared
?? dimensions, "x" and "y", and a netCDF variable, called "data".

?? This example demonstrates the netCDF C API. This is part of the
?? netCDF tutorial, which can be found at:
???http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-tutorial

?? Full documentation of the netCDF C API can be found at:
???http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-c

?? $Id: simple_xy_wr.c,v 1.12 2007/02/14 20:59:21 ed Exp $
*/
#include <stdlib.h>
#include <stdio.h>
#include <netcdf.h>

/* This is the name of the data file we will create. */
#define FILE_NAME "simple_xy.nc"

/* We are writing 2D data, a 6 x 12 grid. */
#define NDIMS 2
#define NX 6
#define NY 12

/* Handle errors by printing an error message and exiting with a
?* non-zero status. */
#define ERRCODE 2
#define ERR(e) {printf("Error: %s/n", nc_strerror(e)); exit(ERRCODE);}

int
main()
{
?? /* When we create netCDF variables and dimensions, we get back an
??? * ID for each one. */
?? int ncid, x_dimid, y_dimid, varid;
?? int dimids[NDIMS];

?? /* This is the data array we will write. It will be filled with a
??? * progression of numbers for this example. */
?? int data_out[NX][NY];

?? /* Loop indexes, and error handling. */
?? int x, y, retval;

?? /* Create some pretend data. If this wasn't an example program, we
??? * would have some real data to write, for example, model
??? * output. */
?? for (x = 0; x < NX; x++)
????? for (y = 0; y < NY; y++)
? data_out[x][y] = x * NY + y;

?? /* Always check the return code of every netCDF function call. In
??? * this example program, any retval which is not equal to NC_NOERR
??? * (0) will cause the program to print an error message and exit
??? * with a non-zero return code. */

?? /* Create the file. The NC_CLOBBER parameter tells netCDF to
??? * overwrite this file, if it already exists.*/
?? if ((retval = nc_create(FILE_NAME, NC_CLOBBER, &ncid)))
????? ERR(retval);

?? /* Define the dimensions. NetCDF will hand back an ID for each. */
?? if ((retval = nc_def_dim(ncid, "x", NX, &x_dimid)))
????? ERR(retval);
?? if ((retval = nc_def_dim(ncid, "y", NY, &y_dimid)))
????? ERR(retval);

?? /* The dimids array is used to pass the IDs of the dimensions of
??? * the variable. */
?? dimids[0] = x_dimid;
?? dimids[1] = y_dimid;

?? /* Define the variable. The type of the variable in this case is
??? * NC_INT (4-byte integer). */
?? if ((retval = nc_def_var(ncid, "data", NC_INT, NDIMS,?
?????? dimids, &varid)))
????? ERR(retval);

?? /* End define mode. This tells netCDF we are done defining
??? * metadata. */
?? if ((retval = nc_enddef(ncid)))
????? ERR(retval);

?? /* Write the pretend data to the file. Although netCDF supports
??? * reading and writing subsets of data, in this case we write all
??? * the data in one operation. */
?? if ((retval = nc_put_var_int(ncid, varid, &data_out[0][0])))
????? ERR(retval);

?? /* Close the file. This frees up any internal netCDF resources
??? * associated with the file, and flushes any buffers. */
?? if ((retval = nc_close(ncid)))
????? ERR(retval);

?? printf("*** SUCCESS writing example file simple_xy.nc!/n");
?? return 0;
}

3、simple_xy_rd.c文件的內(nèi)容
/* This is part of the netCDF package.
?? Copyright 2006 University Corporation for Atmospheric Research/Unidata.
?? See COPYRIGHT file for conditions of use.

?? This is a simple example which reads a small dummy array, which was
?? written by simple_xy_wr.c. This is intended to illustrate the use
?? of the netCDF C API.

?? This program is part of the netCDF tutorial:
???http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-tutorial

?? Full documentation of the netCDF C API can be found at:
???http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-c

?? $Id: simple_xy_rd.c,v 1.9 2006/08/17 23:00:55 russ Exp $
*/
#include <stdlib.h>
#include <stdio.h>
#include <netcdf.h>

/* This is the name of the data file we will read. */
#define FILE_NAME "simple_xy.nc"

/* We are reading 2D data, a 6 x 12 grid. */
#define NX 6
#define NY 12

/* Handle errors by printing an error message and exiting with a
?* non-zero status. */
#define ERRCODE 2
#define ERR(e) {printf("Error: %s/n", nc_strerror(e)); exit(ERRCODE);}

int
main()
{
?? /* This will be the netCDF ID for the file and data variable. */
?? int ncid, varid;

?? int data_in[NX][NY];

?? /* Loop indexes, and error handling. */
?? int x, y, retval;

?? /* Open the file. NC_NOWRITE tells netCDF we want read-only access
??? * to the file.*/
?? if ((retval = nc_open(FILE_NAME, NC_NOWRITE, &ncid)))
????? ERR(retval);

?? /* Get the varid of the data variable, based on its name. */
?? if ((retval = nc_inq_varid(ncid, "data", &varid)))
????? ERR(retval);

?? /* Read the data. */
?? if ((retval = nc_get_var_int(ncid, varid, &data_in[0][0])))
????? ERR(retval);

?? /* Check the data. */
?? for (x = 0; x < NX; x++)
????? for (y = 0; y < NY; y++)
? if (data_in[x][y] != x * NY + y)
???? return ERRCODE;

?? /* Close the file, freeing all resources. */
?? if ((retval = nc_close(ncid)))
????? ERR(retval);

?? printf("*** SUCCESS reading example file %s!/n", FILE_NAME);
?? return 0;
}

?

轉(zhuǎn)載于:https://www.cnblogs.com/wang985850293/p/5663191.html

總結(jié)

以上是生活随笔為你收集整理的NetCDF 入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久中文字幕 | 97爱爱| 精品免费视频一区二区 | 日韩亚洲一区二区三区 | 色综合狠狠| 美女无遮挡免费网站 | 欧美午夜精品久久久久久蜜 | 国产一级生活片 | 在线免费看黄视频 | 日本免费黄色小视频 | 夜夜夜夜操 | 久久艹伊人 | a在线观看视频 | 成人mv在线观看 | 1769国产精品视频 | 亚洲中文字幕一区二区在线观看 | 自拍偷拍999| 性欧美video另类hd尤物 | 成人免费毛片观看 | 日韩精品一区二区三区av | 国产黄色大全 | 中文字幕永久在线观看 | 欧美一级α片 | 美女福利视频在线观看 | 韩国三级中文字幕 | 久久久久亚洲av无码专区喷水 | 成人av片免费看 | 日韩欧美一二三区 | 成人免费无遮挡无码黄漫视频 | 欧美日韩高清一区二区 国产亚洲免费看 | 婷婷第四色 | 欧美日韩中文字幕一区 | 国语对白一区 | 中文字幕免费高清在线 | 国产a国产片国产 | 熟女肥臀白浆大屁股一区二区 | 亚洲成人精品视频 | 亚洲黄色在线网站 | 欧美一区成人 | 美女被到爽高潮视频 | 日韩永久免费视频 | 又粗又大又硬又长又爽 | 日日操夜夜骑 | 少妇精品 | 精品国产成人 | 小sao货大ji巴cao死你 | 亚洲精品国偷拍自产在线观看蜜桃 | 无码少妇精品一区二区免费动态 | 久久久99国产精品免费 | exo妈妈mv在线播放高清免费 | 亚洲国产一区二区三区在线观看 | 不卡中文字幕在线 | 精品国产区 | 欧美网站在线 | 欧美性xxxx图片 | 成人一区二区三区仙踪林 | 岛国免费av | 国产av不卡一区 | 日韩精品电影 | 黄色福利片| 岛国二区| 欧美精品人妻一区二区 | 蜜臀久久精品久久久用户群体 | 国产三级在线观看 | 午夜精品一区二区在线观看 | 天天综合天天做天天综合 | 麻豆国产一区二区三区四区 | www亚洲色图 | 国产91香蕉| 欧美xxxx18国产 | 国产又大又长又粗 | 成人免费视频国产免费网站 | 超碰人人艹 | 奶妈的诱惑 | 日日摸日日碰夜夜爽无码 | 久久新网址 | 国产福利短视频 | 黄色一级片在线免费观看 | 国产二级毛片 | 五月99久久婷婷国产综合亚洲 | 91久久精品国产91性色69 | 尤物视频在线观看视频 | 成人做爰9片免费视频 | 琪琪女色窝窝777777 | 欧洲日韩一区二区三区 | 中国黄色网页 | 美女网站在线看 | 五月天综合婷婷 | 欧美福利在线观看 | 久久99久久99精品免观看粉嫩 | 日产国产亚洲精品系列 | 91 免费看片 | 精品视频在线一区 | 亚洲欧美日韩一区二区 | 人与动物2免费观看完整版电影高清 | 天天射日 | av第一福利 | 梦梦电影免费高清在线观看 | 久久久久99人妻一区二区三区 |