netcdf造数据(转)

netcdf造数据

#include "netcdfcpp.h"
#include<math.h>
#include <iostream>
using namespace std;
#define  lon 1442
#define  lat 281
#define  lat2 562

int  main()
{    

    //读取现有矢量场.nc文件,长、宽
    NcFile dataReadFile1("global10.nc",NcFile::Replace);
    if (!dataReadFile1.is_valid())
    {
        std::cout<<"couldn‘t open file!"<<std::endl;
    }
    //添加维度
    dataReadFile1.add_dim("LON",lon);
    dataReadFile1.add_dim("LAT",lat);
    dataReadFile1.add_dim("Time",1);
    dataReadFile1.add_dim("bnds",2);
    dataReadFile1.add_dim("UX",1*lon*lat);
    dataReadFile1.add_dim("VY",1*lon*lat);
    dataReadFile1.add_dim("MAG",1*lon*lat);

    //添加变量信息
    dataReadFile1.add_var("LON",ncDouble,dataReadFile1.get_dim(0));
    dataReadFile1.add_var("LAT",ncDouble,dataReadFile1.get_dim(1));
    dataReadFile1.add_var("Time",ncDouble,dataReadFile1.get_dim(2));
    dataReadFile1.add_var("Time_bnds",ncDouble,dataReadFile1.get_dim(2),dataReadFile1.get_dim(3));
    dataReadFile1.add_var("UX",ncFloat,dataReadFile1.get_dim(2),dataReadFile1.get_dim(1),dataReadFile1.get_dim(0));
    dataReadFile1.add_var("VY",ncFloat,dataReadFile1.get_dim(2),dataReadFile1.get_dim(1),dataReadFile1.get_dim(0));
    dataReadFile1.add_var("MAG",ncFloat,dataReadFile1.get_dim(2),dataReadFile1.get_dim(1),dataReadFile1.get_dim(0));        

    //添加属性
    dataReadFile1.add_att("history","FERRET V6.05   20-Oct-14");
    dataReadFile1.get_var(0)->add_att("long_name","Longitude");
    dataReadFile1.get_var(0)->add_att("point_spacing","even");
    dataReadFile1.get_var(0)->add_att("units","degrees");
    dataReadFile1.get_var(0)->add_att("axis","X");
    dataReadFile1.get_var(0)->add_att("modulo","360");

    dataReadFile1.get_var(1)->add_att("long_name","Latitude");
    dataReadFile1.get_var(1)->add_att("point_spacing","even");
    dataReadFile1.get_var(1)->add_att("units","degrees");
    dataReadFile1.get_var(1)->add_att("axis","Y");

    dataReadFile1.get_var(2)->add_att("units","days since 1800-01-01 00:00:00");
    dataReadFile1.get_var(2)->add_att("long_name","Time");
    dataReadFile1.get_var(2)->add_att("axis","T");
    dataReadFile1.get_var(2)->add_att("time_origin","01-JAN-1800 00:00:00");

    //dataReadFile1.get_var(4)->add_att("missing_value",-3.39999995214436E+38);
//    dataReadFile1.get_var(4)->add_att("_FillValue",-3.39999995214436E+38);
    dataReadFile1.get_var(6)->add_att("long_name","wind speed");
    dataReadFile1.get_var(6)->add_att("units","meter per second");
    dataReadFile1.get_var(6)->add_att("history","From monthly");

    //    dataReadFile1.add_att("UX","cFictional Model Output");
    dataReadFile1.get_var(4)->add_att("long_name","Zonal Wind Speed");
    dataReadFile1.get_var(4)->add_att("units","meter second-1");
    //dataReadFile1.get_var(5)->add_att("missing_value",-3.39999995214436E+38);
    //dataReadFile1.get_var(5)->add_att("_FillValue",-3.39999995214436E+38);
    dataReadFile1.get_var(4)->add_att("history","From monthly");

    //dataReadFile1.add_att("UY","cFictional Model Output");
    dataReadFile1.get_var(5)->add_att("long_name","Meridional Wind Speed");
    dataReadFile1.get_var(5)->add_att("units","meter second-1");
//    dataReadFile1.get_var(6)->add_att("missing_value",-3.39999995214436E+38);
//    dataReadFile1.get_var(6)->add_att("_FillValue",-3.39999995214436E+38);
    dataReadFile1.get_var(5)->add_att("history","From monthly");

    //输出.nc文件

    double *Lon = new double[lon];
    double *Lat = new double[lat];
    double *Lat2 = new double[lat2];
    double temp = 0.125;
    Lon[0] = -180;
    Lat[0] = 70;

    for (int i = 1;i<lon;i++)
    {
        Lon[i] = Lon[i-1]+temp;
    }
    dataReadFile1.get_var("LON")->put(Lon,lon);

    for (int j = 1;j<lat;j++)
    {
        Lat[j] = Lat[j-1]-0.25;
    }
    dataReadFile1.get_var("LAT")->put(Lat,lat);

    //线性插值,向UX里写数据

    int LonNum=0;
    int LatNum=0;
    //读取现有矢量场.nc文件,长、宽
    NcFile dataReadFile("global_origin.nc",NcFile::ReadOnly);
    if (!dataReadFile.is_valid())
    {
        std::cout<<"couldn‘t open file!"<<std::endl;
    }

    for (int i = 0;i<=dataReadFile.num_dims()-1;i++)
    {
        if (i==0)
        {
            LonNum  =dataReadFile.get_dim(i)->size();
        }
        else if (i==1)
        {
            LatNum=dataReadFile.get_dim(i)->size();
        }
    }

    //    double *VY = new double[lon*lat];
    long count1[3];
    count1[0] = 1;
    count1[1] = LatNum;
    count1[2] = LonNum*2-1;

    static const int Time = 1;
    static const int TMP = Time*LonNum*LatNum;
    double *UXValue = new double[lon*lat];
    double *VYValue = new double[lon*lat];
    double *MAGValue = new double[lon*lat];

    double *Tmp_UX = new double[TMP];
    double *Tmp_VY = new double[TMP];
    double *Tmp_LAT = new double[TMP];
    double *Tmp_LON = new double[TMP];

    NcVar *dataTmp_LAT = dataReadFile.get_var("LAT");
    NcVar *dataTmp_LON = dataReadFile.get_var("LONN359_361");
    NcVar *dataTmp_UX = dataReadFile.get_var("UX");
    NcVar *dataTmp_VY = dataReadFile.get_var("VY");
    dataTmp_LAT->get(Tmp_LAT,LatNum,LatNum);
    dataTmp_LON->get(Tmp_LON,LonNum,LonNum);
    dataTmp_UX->get(Tmp_UX,Time,LatNum,LonNum);
    dataTmp_VY->get(Tmp_VY,Time,LatNum,LonNum);

    long k = 0;

    for (int j =0;j<LatNum;j++)
    {

        for (int i=0;i<LonNum;i++)
        {
            UXValue[k]=Tmp_UX[j*LonNum+i];
            UXValue[k+1] = (Tmp_UX[j*LonNum+i]+Tmp_UX[j*LonNum+i+1])/2;

            VYValue[k] = Tmp_VY[j*LonNum+i];
            VYValue[k+1] = (Tmp_VY[j*LonNum+i]+Tmp_VY[j*LonNum+i+1])/2;

            MAGValue[k] =sqrt(UXValue[k]*UXValue[k]+VYValue[k]*VYValue[k]);
            MAGValue[k+1] = sqrt(UXValue[k+1]*UXValue[k+1]+VYValue[k+1]*VYValue[k+1]);

            k=k+2;
        }
    }
    dataReadFile1.get_var("UX")->put(UXValue,count1);
    dataReadFile1.get_var("VY")->put(VYValue,count1);
    //dataReadFile1.get_var("MAG")->put(MAGValue,count1);

    //纵向扩大2倍
    NcFile dataReadFile2("global15.nc",NcFile::Replace);
    //添加维度
    dataReadFile2.add_dim("LON",lon);
    dataReadFile2.add_dim("LAT",lat2);
    dataReadFile2.add_dim("Time",1);
    dataReadFile2.add_dim("bnds",2);
    dataReadFile2.add_dim("UX",1*lon*lat2);
    dataReadFile2.add_dim("VY",1*lon*lat2);
    dataReadFile2.add_dim("MAG",1*lon*lat2);

    //添加变量信息
    dataReadFile2.add_var("LON",ncDouble,dataReadFile2.get_dim(0));
    dataReadFile2.add_var("LAT",ncDouble,dataReadFile2.get_dim(1));
    dataReadFile2.add_var("Time",ncDouble,dataReadFile2.get_dim(2));
    dataReadFile2.add_var("Time_bnds",ncDouble,dataReadFile2.get_dim(2),dataReadFile2.get_dim(3));
    dataReadFile2.add_var("UX",ncFloat,dataReadFile2.get_dim(2),dataReadFile2.get_dim(1),dataReadFile2.get_dim(0));
    dataReadFile2.add_var("VY",ncFloat,dataReadFile2.get_dim(2),dataReadFile2.get_dim(1),dataReadFile2.get_dim(0));
    dataReadFile2.add_var("MAG",ncFloat,dataReadFile2.get_dim(2),dataReadFile2.get_dim(1),dataReadFile2.get_dim(0));        

    //添加属性
    dataReadFile2.add_att("history","FERRET V6.05   20-Oct-14");
    dataReadFile2.get_var(0)->add_att("long_name","Longitude");
    dataReadFile2.get_var(0)->add_att("point_spacing","even");
    dataReadFile2.get_var(0)->add_att("units","degrees");
    dataReadFile2.get_var(0)->add_att("axis","X");
    dataReadFile2.get_var(0)->add_att("modulo","360");

    dataReadFile2.get_var(1)->add_att("long_name","Latitude");
    dataReadFile2.get_var(1)->add_att("point_spacing","even");
    dataReadFile2.get_var(1)->add_att("units","degrees");
    dataReadFile2.get_var(1)->add_att("axis","Y");

    dataReadFile2.get_var(2)->add_att("units","days since 1800-01-01 00:00:00");
    dataReadFile2.get_var(2)->add_att("long_name","Time");
    dataReadFile2.get_var(2)->add_att("axis","T");
    dataReadFile2.get_var(2)->add_att("time_origin","01-JAN-1800 00:00:00");

    //dataReadFile1.get_var(4)->add_att("missing_value",-3.39999995214436E+38);
    //    dataReadFile1.get_var(4)->add_att("_FillValue",-3.39999995214436E+38);
    dataReadFile2.get_var(6)->add_att("long_name","wind speed");
    dataReadFile2.get_var(6)->add_att("units","meter per second");
    dataReadFile2.get_var(6)->add_att("history","From monthly");

    //    dataReadFile1.add_att("UX","cFictional Model Output");
    dataReadFile2.get_var(4)->add_att("long_name","Zonal Wind Speed");
    dataReadFile2.get_var(4)->add_att("units","meter second-1");
    //dataReadFile1.get_var(5)->add_att("missing_value",-3.39999995214436E+38);
    //dataReadFile1.get_var(5)->add_att("_FillValue",-3.39999995214436E+38);
    dataReadFile2.get_var(4)->add_att("history","From monthly");

    //dataReadFile1.add_att("UY","cFictional Model Output");
    dataReadFile2.get_var(5)->add_att("long_name","Meridional Wind Speed");
    dataReadFile2.get_var(5)->add_att("units","meter second-1");
    //    dataReadFile1.get_var(6)->add_att("missing_value",-3.39999995214436E+38);
    //    dataReadFile1.get_var(6)->add_att("_FillValue",-3.39999995214436E+38);
    dataReadFile2.get_var(5)->add_att("history","From monthly");
    Lat2[0] = 70;
    for (int i = 1;i<lon;i++)
    {
        Lon[i] = Lon[i-1]+temp;
    }
    dataReadFile2.get_var("LON")->put(Lon,lon);

    for (int j = 1;j<lat2;j++)
    {
        Lat2[j] = Lat2[j-1]-0.125;
        cout<<j<<"  "<<Lat2[j]<<endl;
    }
    dataReadFile2.get_var("LAT")->put(Lat2,lat2);

    int LonNum2 = 0;
    int LatNum2 = 0;
    for (int i = 0;i<=dataReadFile1.num_dims()-1;i++)
    {
        if (i==0)
        {
             LonNum2  =dataReadFile1.get_dim(i)->size();
        }
        else if (i==1)
        {
            LatNum2 =dataReadFile1.get_dim(i)->size();
        }
    }
//     cout<<LonNum2<<endl;
//     cout<<LatNum2<<endl;
    long count2[3];
    count2[0] = 1;
    count2[1] = LatNum*2;
    count2[2] = LonNum*2;

    static const int TMP2 = Time*LonNum2*LatNum2;
    double *UXValue2= new double[lon*lat2];
    double *VYValue2= new double[lon*lat2];
    double *MAGValue2 = new double[lon*lat2];

    //cout<<lon*lat2<<endl;
    double *Tmp_UX2 = new double[TMP2];
    double *Tmp_VY2 = new double[TMP2];
    double *Tmp_LAT2 = new double[TMP2];
    double *Tmp_LON2 = new double[TMP2];

    NcVar *dataTmp_LAT2= dataReadFile1.get_var("LAT");
    NcVar *dataTmp_LON2 = dataReadFile1.get_var("LON");
    NcVar *dataTmp_UX2 = dataReadFile1.get_var("UX");
    NcVar *dataTmp_VY2 = dataReadFile1.get_var("VY");
    dataTmp_LAT2->get(Tmp_LAT2,LatNum2,LatNum2);
    dataTmp_LON2->get(Tmp_LON2,LonNum2,LonNum2);
    dataTmp_UX2->get(Tmp_UX2,Time,LatNum2,LonNum2);
    dataTmp_VY2->get(Tmp_VY2,Time,LatNum2,LonNum2);

    int k2= 0;
    for (int m = 0;m<LatNum2;m++)
    {
        for (int n = 0;n<LonNum2;n++)
        {

             if (k2<=558)
             {
                for (int p = 0;p<LonNum2;p++)
                {
                    UXValue2[k2*LonNum2+p] = Tmp_UX2[m*LonNum2+p];
                }
                UXValue2[(k2+1)*(LonNum2-1)+n] = (Tmp_UX2[m*LonNum2+n]+Tmp_UX2[(m+1)*LonNum2+n])/2;

            }
            else{
                for (int p = 0;p<LonNum2;p++)
                {
                    UXValue2[(k2)*LonNum2+p] = Tmp_UX2[m*LonNum2+p];
                }
            }

//cout<<(k2+1)*LonNum2+n<<endl;
            //VYValue[k] = Tmp_VY[j*LonNum+i];
        //    VYValue[k+1] = (Tmp_VY[j*LonNum+i]+Tmp_VY[j*LonNum+i+1])/2;

        //    MAGValue[k] =sqrt(UXValue[k]*UXValue[k]+VYValue[k]*VYValue[k]);
        //    MAGValue[k+1] = sqrt(UXValue[k+1]*UXValue[k+1]+VYValue[k+1]*VYValue[k+1]);

        }
        k2=k2+2;        

    }

//     for (int j2 =0;j2<LatNum2;j2++)
//     {
//
//         for (int i2=0;i2<LonNum2;i2++)
//         {
//             UXValue2[m*LonNum2+i2]=Tmp_UX2[j2*LonNum2+i2];
//             UXValue2[(m+1)*LonNum2+i2] = (Tmp_UX2[j2*LonNum2+i2]+Tmp_UX2[(j2+1)*LonNum2+i2])/2;
//
//             //VYValue2[m]=Tmp_VY2[j2*LonNum2+i2];
//         //    VYValue2[(m+1)*LonNum2] = (Tmp_VY2[j2*LonNum2+i2]+Tmp_VY2[(j2+1)*LonNum2+i2])/2;
//
//             //MAGValue2[k] =sqrt(UXValue[k]*UXValue[k]+VYValue[k]*VYValue[k]);
//             //MAGValue2[k+1] = sqrt(UXValue[k+1]*UXValue[k+1]+VYValue[k+1]*VYValue[k+1]);
//
//         //
//         }
//         m=m++;
//     }
    dataReadFile2.get_var("UX")->put(UXValue2,count2);
    //dataReadFile1.get_var("VY")->put(VYValue2,count2);
    //dataReadFile1.get_var("MAG")->put(MAGValue,count2);

    return 0;
}
时间: 2024-08-09 20:30:01

netcdf造数据(转)的相关文章

python之工作举例:通过复制NC文件来造数据

1 # 通过对NC文件复制来造数据 2 import os, shutil 3 4 # 遍历的根目录 5 root_dir = "D:\\test_data\\DISASTER\\" 6 # 获取NC文件的时间 7 time_source = '20161228080000' 8 # 生成NC文件的时间 9 time_new = '20181228080000' 10 11 12 def get_dir_path(dir_name, time_str): 13 ''' 14 组装目录结

为数据挖掘小组写的一个用于造数据的小程序

最近有个数据挖掘的项目,要求在文本里面写入随机字母并且要1000W个 于是就写了个程序用来造数据并记录一下 程序写的时候遇到的问题 1 未考虑内存溢出的情况,大批量的把数据写入导致内存溢出 以后需要谨慎对待 目前完整版 package test; import java.io.File; import java.io.FileWriter; import java.io.IOException; import org.apache.commons.io.FileUtils; import org

oracle PLSQL程序造数据笔记

1.造假数据: 1 declare 2 type t_website_id is table of number(10); 3 type t_website_name is table of varchar2(20); 4 type t_area_id_tb is table of varchar2(5); 5 type t_area_name_tb is table of varchar2(16); 6 website_id t_website_id :=t_website_id(1001,1

Mysql数据库上修改日期-->造数据

这次要给客户安装测试ineedle设备,但是安装后不会立刻有数据显示,不能够全面的展示给用户web界面的一些信息.此时需要有一个公网服务器能够展示一下ineedle统计数据,但是公司58设备上没有流量了,近期的数据没有更新了,所以准备将数据库中实际数据抽出几天的更改一下日期,使其展示ineedle的web界面上.最新的七天数据是2015.07.27--2015.08.02这7天的数据,正好一个星期.计划是将2015.07.27-2015.08.02修改为2015.10.19-2015.10.25

Jmeter(二十三)Jmeter-Question之“批量造数据”

日常工作中,无论是在做功能测试.接口测试还是性能测试,经常会有这么一个场景出现,"那个谁谁谁,帮我加几条订单","那个某某某,给购物车增添几个产品","在数据库加几百条数据"...等等,通常少数量,或者能够人为解决的就人工解决,那么如果是数量比较大,数万条数据,总不可能一条一条进行增添吧? So,在造数据这块通常能够想到的便是数据库通过"存储过程"来进行增添,或者外部程序or工具,Jmeter当然也支持的,做的小Demo: 原

性能测试通过几种方式造数据

本文说的数据量主要包括基础数据量(或者叫历史数据量.垫底数据量.数据库中已有的数据量)和参数化数据量,数据量在性能测试中起到非常重要的作用.对于在数据库中只有几条记录和有几亿条记录里面查询信息,那么结果肯定相差非常大的,随着业务量的增长,记录也越来越多,因此在性能测试过程中,需要保持跟生产上相同级别的数据量.生产系统中业务中使用不同的数据.那么我们在测试的时候需要考虑参数数据量的大小和数据分布的问题. 如果基础数据量跟生产环境的基础数据量不在同一个数量级上,将会导致相关指标例如响应时间比生产上快

性能测试四十:Mysql存储过程造数据

性能测试是基于大量数据的,而进行性能测试之前肯定没那么多数据,所以就要自己准备数据 数据构造方法: 1.业务接口 -- 适合数据表关系复杂 -- 优点:数据完整性比较好2.存储过程 -- 适合表数量少,简单 -- 优点:速度最快3.脚本导入 -- 适合数据逻辑复杂 -- 自由度比较高4.数据量级 --测试数据 --基础数据 启动并用工具连接mysql,这里的新建函数,所建的函数,即为存储过程 也可以在命令行mysql -u root -p 登录后输入存储过程的sql运行,但是这就是纯命令行了 执

如何使用Jmeter批量造数据?

测试有时需要准备测试数据,需要大量造数据时手动造数据效率是比较慢的,可以考虑用Jmeter批量构造数据,这里使用到的是Jmeter配置原件“CSV数据文件设置” 步骤1:添加CSV数据文件设置,填写文件目录 以下是CSV文件内容,第一行为变量名称,可通过${mobile}进行调用 步骤2:将需要动态获取的值用变量名称${mobile}替换 步骤3:这里设置线程数,如果这里不改,还是1的话,只会执行csv文件的第一行 原文地址:https://www.cnblogs.com/winxpplus/p

批量造数据的一种方法

实现目的:一张表Table中有A.B.C三个字段,并有很多值,开发测试需要,可以执行这样的语句批量复制插入数据: insert into Table(A,B,C) select A,B,C from Table