ÇÁ·Î±×·¡¹Ö
ù ÆäÀÌÁö ·£´ý ±Û ȸ¿ø°¡ÀÔ ·Î±×ÀÎ
ºñ°ø°³ ¼Õ´Ô ¡¦ 2021-08-25 06:48:01
URL https://te31.com/rgr/view.php?id=study&no=3047 ¸ð¹ÙÀÏ È­¸é
C¿¡¼­ Æ÷ÀÎÅ͸¦ °íÂ÷¿ø ¹è¿­·Î ¹Ù²Ù´Â ¹ý

Á¦°¡ »ç¿ëÇÏ´Â ¶óÀ̺귯¸®¿¡¼­ ÇÊ¿äÇÑ ÇÔ¼ö ÀÔ·ÂÀÎÀÚÀÇ ÇüÅ°¡ ÀÌ·±½Ä

&arr[0][0]

À¸·Î µÇ¾îÀִµ¥¿ä. Á¦°¡ ´Ù·ç´Â º¯¼ö´Â Æ÷ÀÎÅÍ¶ó¼­ È¤½Ã³ª Æ÷ÀÎÅ͸¦ °íÂ÷¿ø ¹è¿­·Î º¯°æÇÏ´Â ¹æ¹ýÀÌ ÀÖ´ÂÁö ±Ã±ÝÇÕ´Ï´Ù.

¾Æ·¡¿¡ ÄÚµå ÷ºÎÇÕ´Ï´Ù.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netcdf.h>
#include <ctype.h>

int *arange_int(int start, int end, int stride);
float *arange_float(float start, float end, float stride);
float fld_mean(float *in_fld, int in_nx, int in_ny, int x_start, int x_end, int y_start, int y_end);
float *fld_init(float *in_fld, int in_nx, int in_ny, float in_thres, int in_res, char *in_var);
int blobcntr(float *in_fld, int in_nx, int in_ny, int in_i, int in_j, int in_tag);
void prnt_2darr(float *in_fld, int in_nx, int in_ny);
void prnt_2darr2(int in_nx, int in_ny, float in_fld[in_nx][in_ny]);

// resolution setting
#define res 288
#define nres 12
#define grd_siz 4000.0

// variable
#define ndim 3
#define var_nm "LWNT"
#define var_thres 250.0
#define x_nm "x"
#define y_nm "y"
#define t_nm "time"


// netcdf error detection
#define err(e) {printf("Error: %s\n", nc_strerror(e)); return 2;}
int main()
{
   // file resolution and output resolution settings
   int nt      = 2400,
       nx      = res,
       ny      = res,
       nres_x  = nx/nres,
       nres_y  = ny/nres;


   // file directory and names
   char in_dir[50] = "/home/rangke/temp/sa.rce/data",
        out_dir[50] = "/home/rangke/work/sa/output",
        in_file_pfix[50]   =  "2d.pw.lwnt.tb.ze.sa.rce",
        out_file_pfix[50]  =  "cluster",
        in_file_nm[90],
        out_file_nm[90];



   // microphysics and temperatures (in array)
   const char *mic_list[4],
              *tmp_list[8];


   // netcdf operations
   int retval,
       in_ncid, out_ncid,
       in_var_id, out_var_id,
       in_x_id, in_y_id, in_t_id,
       out_x_id, out_y_id, out_t_id,
       out_x_dimid, out_y_dimid, out_t_dimid;
   int dimids[ndim];
   size_t start[ndim] = {0,0,0},
          count[ndim] = {1,ny,nx};


   // variable
   float *x_in    = malloc(nx * sizeof(float)),
         *y_in    = malloc(ny * sizeof(float)),
         *t_in    = malloc(nt * sizeof(float)),
         *x_out,
         *y_out,
         *in_var  = malloc(ny * nx * sizeof(float)),
         *pcd_fld = malloc(nres_y * nres_y * sizeof(float));



   // loop variable
   int i,j,t;


   // blob counter variable
   int size, tag, blbgrp;


   mic_list[0] = "s1";
   mic_list[1] = "m2";
   mic_list[2] = "th";
   mic_list[3] = "p3";


   tmp_list[0] = "285";
   tmp_list[1] = "288";
   tmp_list[2] = "291";
   tmp_list[3] = "294";
   tmp_list[4] = "297";
   tmp_list[5] = "300";
   tmp_list[6] = "303";
   tmp_list[7] = "306";


   for(j=0;j<1;j++)
      for(i=0;i<1;i++)
      {
         snprintf(in_file_nm, sizeof(in_file_nm), "%s/%dx%d/%s.%dx%d.%s.%sk.old.nc",
                  in_dir, res, res, in_file_pfix, res, res, mic_list[j], tmp_list[i]);
         printf("%s\n",in_file_nm);

         snprintf(out_file_nm, sizeof(out_file_nm), "%s/%s.%s.%s.%sk.%dx%dto%dx%d.nc",
                  out_dir, out_file_pfix, var_nm, mic_list[j], tmp_list[i], nx, ny, nres_x, nres_y);
         printf("%s\n",out_file_nm);


         if ((retval = nc_open(in_file_nm, NC_NOWRITE, &in_ncid))) err(retval);
         if ((retval = nc_create(out_file_nm, NC_CLOBBER, &out_ncid))) err(retval);

         if ((retval = nc_inq_varid(in_ncid, var_nm, &in_var_id))) err(retval);
         if ((retval = nc_inq_varid(in_ncid, x_nm, &in_x_id))) err(retval);
         if ((retval = nc_inq_varid(in_ncid, y_nm, &in_y_id))) err(retval);
         if ((retval = nc_inq_varid(in_ncid, t_nm, &in_t_id))) err(retval);

         if ((retval = nc_get_var_float(in_ncid, in_x_id, x_in))) err(retval);
         if ((retval = nc_get_var_float(in_ncid, in_y_id, y_in))) err(retval);
         if ((retval = nc_get_var_float(in_ncid, in_t_id, t_in))) err(retval);



         // create netcdf dimensions

         if ((retval = nc_def_dim(out_ncid, y_nm, nres_y, &out_y_dimid))) err(retval);
         if ((retval = nc_def_dim(out_ncid, x_nm, nres_x, &out_x_dimid))) err(retval);
         if ((retval = nc_def_dim(out_ncid, t_nm, NC_UNLIMITED, &out_t_id))) err(retval);


         if ((retval = nc_def_var(out_ncid, y_nm, NC_FLOAT, 1, &out_y_dimid, &out_y_id))) err(retval);
         if ((retval = nc_def_var(out_ncid, x_nm, NC_FLOAT, 1, &out_x_dimid, &out_x_id))) err(retval);

         dimids[0] = out_t_id;
         dimids[1] = out_y_id;
         dimids[2] = out_x_id;

         if ((retval = nc_def_var(out_ncid, var_nm, NC_FLOAT, ndim, dimids, &out_var_id)))


         if ((retval = nc_put_att_text(out_ncid, out_y_id, "units", strlen("m"), "m"))) err(retval);
         if ((retval = nc_put_att_text(out_ncid, out_x_id, "units", strlen("m"), "m"))) err(retval);
         if ((retval = nc_put_att_text(out_ncid, out_var_id, "long_name", strlen("LWNT cluster"), "LWNT cluster"))) err(retval);
         if ((retval = nc_put_att_text(out_ncid, out_var_id, "units", strlen("#"), "#"))) err(retval);

         if ((retval = nc_enddef(out_ncid))) err(retval);

         x_out = arange_float(0.0,x_in[nx-1] + (grd_siz * nres), grd_siz * nres);
         y_out = arange_float(0.0,y_in[ny-1] + (grd_siz * nres), grd_siz * nres);

         if ((retval = nc_put_var_float(out_ncid, out_y_id, &y_out[0]))) err(retval);
         if ((retval = nc_put_var_float(out_ncid, out_x_id, &x_out[0]))) err(retval);


         for(t=0;t<nt;t++)
         {
            size     = 0;
            tag      = 1;
            blbgrp   = 0;
            start[0] = t;

            if ((retval = nc_get_vara_float(in_ncid, in_var_id, start, count, &in_var[0]))) err(retval);


            pcd_fld = fld_init((float*)in_var, nx, ny, var_thres, nres, var_nm);


            for(j=0;j<nres_y;j++)
            {
               for(i=0;i<nres_x;i++)
               {
                  size = blobcntr((float*)pcd_fld,nres_x,nres_y,i,j,tag);
      
                  if (size > 0)
                  {
                     blbgrp += 1;
                     tag += 1;
                     printf("timestep: %d  blbgrp: %d  size : %d\n",t,blbgrp,size);
                  }
               }
            }

            printf("\n=== t = %d ===",t);
         prnt_2darr((float*)pcd_fld,nres_x,nres_y);

            
         if ((retval = nc_put_vara_float(out_ncid, out_var_id, start, count, &pcd_fld[0]))) err(retval);
         }


         if ((retval = nc_close(in_ncid))) err(retval);
         if ((retval = nc_close(out_ncid))) err(retval);
      }

   free(x_in);
   free(y_in);
   free(t_in);
   free(x_out);
   free(y_out);
   free(in_var);
   free(pcd_fld);
   return 0;
}

À§ÀÇ ÄÚÆ®¿¡¼­

if ((retval = nc_put_vara_float(out_ncid, out_var_id, start, count, &pcd_fld[0]))) err(retval);

ºÎºÐÀÌ ¿¡·¯°¡ ³ª´Â ºÎºÐÀ̱¸¿ä. ¿©±â¼­ &pcd_fld[0] ÀÌ ¶óÀ̺귯·¯¸® ¿¹Á¦¿¡ ÀÇÇϸé &pcd_fld[0][0] À̾î¾ß Çϴµ¥ pcd_fld º¯¼ö´Â ¹è¿­ÀÌ ¾Æ´Ï¶ó Æ÷ÀÎÅÍ¶ó¼­ Àü ±×³É &pcd_fld[0] ·Î ¹Ù²å½À´Ï´Ù.

pcd_fld¸¦ 2Â÷¿ø ¹è¿­·Î ¹Ù²Ù¸é µÉ°Å °°Àºµ¥ Æ÷ÀÎÅ͸¦ 2Â÷¿ø ¹è¿­·Î ¾î¶»°Ô ¹Ù²Ù³ª¿ä?

Àâ´ã | 2432¸íÀÌ Àоú¾î¿ä. 44.204.204.14

0
1 ºñ°ø°³ ¼Õ´Ô ¡¦ 2021-08-25 10:26:11
2Â÷¿ø ¹è¿­ ±¸±Û¸µÇÏ¸é ¸¹ÀÌ ³ª¿ÃÅÙµ­ ¤¾
ÀÌ°Ô ¿øÇϽô Áú¹®ÀÌ ¸Â´Â°Ç°¡..

arrSizeA = 10;
arrSizeB = 10;

float ** pcd_fld = malloc( arrSizeA * sizeof(float*) );
for( int i=0; i<arrSizeA; i++ )
{
pcd_fld[i] = malloc( arrSizeB, sizeof(float) );
}
////////////////////

for( int i=0; i<arrSizeA; i++ )
{
free( pcd_fld[i] );
}
free pcd_fld;
2 ºñ°ø°³ ¼Õ´Ô ¡¦ 2021-08-25 11:31:31
´äº¯ °¨»çÇÕ´Ï´Ù. float ** pcd_fld °¡ float pcd_fld[10][10] ¶û °°Àº°Ç°¡¿ä?
3 ºñ°ø°³ ¼Õ´Ô ¡¦ 2021-08-25 20:01:31
¿øÀΠã¾Ò³×¿ä.... size_t count = {1,ny,nx}; ºÎºÐÀÌ À߸øµÆ³×¿ä...
4 ºñ°ø°³ ¼Õ´Ô ¡¦ 2021-08-28 23:57:22
< ¹è¿­Æ÷ÀÎÅÍ ½Ç½À >
[¿¹] float pcd_fld[10][10] ¼±¾ðÇÏ¿© 10x10 ¸Þ¸ð¸® Å©±âÀÇ ¿µ¿ª ¸¸µé°í
char (*arrPtr)[10]; ·Î ¼±¾ð ÈÄ pcd_fld ½ÃÀÛ ÁÖ¼Ò°ªÀ» ³Ö¾î
arrPtr º¯¼ö¸¦ ÀÌ¿ëÇÏ¿© pcd_fld ¹è¿­¿¡ Á¢±ÙÇØ º¸±á~^^*
´ñ±ÛÀ» ÀÛ¼ºÇÏ½Ç ¼ö ¾ø½À´Ï´Ù.
(±ÇÇÑÀÌ ¾ø´Â ȸ¿ø·¹º§)
¸ñ·ÏÀ¸·Î
¡â ÀÌÀü±Û: ¬´¬Ñ¬Þ¬â¬Ör¬®¬àn¬Ü¬Ö¬å [3]
¡ä ´ÙÀ½±Û: Çѳª´® ÇüÅÂ¼Ò ºÐ¼®±â [1]
ÀÌ¿ë¾à°ü | ±¤°í/Á¦ÈÞ | °³ÀÎÁ¤º¸Ãë±Þ¹æħ | ¹®ÀÇ/½Å°í | ¸ð¹ÙÀÏ TE31 | ¼­¹ö ºÎÇÏ : 18.75%
½Ç½Ã°£ Issue Ä¿¹Â´ÏƼ TE31 [¾ËÁö·Õ] ¨Ï 2002-2024
TOP arrow_upward