source: trunk/include/meshmask.h @ 6

Last change on this file since 6 was 6, checked in by jbrlod, 13 years ago

rst write functionnality

  • Property svn:eol-style set to native
File size: 13.0 KB
Line 
1#define e1u( i, j )  (e1u[(j)*(NX)+(i)])
2#define e2u( i, j )  (e2u[(j)*(NX)+(i)])
3#define e1v( i, j )  (e1v[(j)*(NX)+(i)])
4#define e2v( i, j )  (e2v[(j)*(NX)+(i)])
5#define e1t( i, j )  (e1t[(j)*(NX)+(i)])
6#define e2t( i, j )  (e2t[(j)*(NX)+(i)])
7#define e1f( i, j )  (e1f[(j)*(NX)+(i)])
8#define e2f( i, j )  (e2f[(j)*(NX)+(i)])
9#define gphit( i, j) (gphit[(j)*(NX)+(i)])
10#define gphiu( i, j) (gphiu[(j)*(NX)+(i)])
11#define gphiv( i, j) (gphiv[(j)*(NX)+(i)])
12#define gphif( i, j) (gphif[(j)*(NX)+(i)])
13#define tmask( i, j, k) (tmask[(k)*(NY*NX)+(j)*(NX)+(i)])
14#define umask( i, j, k) (umask[(k)*(NY*NX)+(j)*(NX)+(i)])
15#define vmask( i, j, k) (vmask[(k)*(NY*NX)+(j)*(NX)+(i)])
16#define fmask( i, j, k) (fmask[(k)*(NY*NX)+(j)*(NX)+(i)])
17#define tmask_i( i, j )  (tmask_i[(j)*(NX)+(i)])  //mohamed (18/03/09) voir domwri.F90
18#define bmask( i, j )   (bmask[(j)*(NX)+(i)])  //mohamed (21/04/09) voir domwri.F90
19
20// tous les indices commencent de 0
21//domzgr_substitute.h90 key_zco
22#   define  fsdept( i , j , k )  gdept_0[k]
23#   define  fsdepw( i , j , k )  gdepw_0[k]
24#   define  fsde3w( i , j , k )  gdepw_0[k]
25#   define  fse3t( i , j , k )   e3t_0[k]
26#   define  fse3u( i , j , k )   e3t_0[k]
27#   define  fse3v( i , j , k )   e3t_0[k]
28#   define  fse3f( i , j , k )   e3t_0[k]
29#   define  fse3w( i , j , k )   e3w_0[k]
30#   define  fse3uw( i , j , k )  e3w_0[k]
31#   define  fse3vw( i , j , k )  e3w_0[k]
32//
33#   define  ff( i , j )   (ff[(j)*(NX)+(i)])
34#   define  mbathy( i , j )   (mbathy[(j)*(NX)+(i)])
35
36//!   Defautl option :                     avs = avt
37#   define   fsavs(i,j,k)   avt(i,j,k)
38//ldftra_substitute.h90
39//substitute fsaht. the eddy diffusivity coeff
40//!   Default option :             aht: Constant coefficient
41#      define   fsahtt(i,j,k)   aht0
42#      define   fsahtu(i,j,k)   aht0
43#      define   fsahtv(i,j,k)   aht0
44#      define   fsahtw(i,j,k)   aht0
45
46//ldfdyn_substitute.h90
47//the lateral eddy viscosity coeff.
48//   default option :  Constant coefficient
49#  define   fsahmt(i,j,k)   ahm0
50#  define   fsahmf(i,j,k)   ahm0
51#  define   fsahmu(i,j,k)   ahm0
52#  define   fsahmv(i,j,k)   ahm0
53
54double e1u[NY*NX];    // from mesh_mask.nc
55double e2u[NY*NX];    // from mesh_mask.nc
56double e1v[NY*NX];    // from mesh_mask.nc
57double e2v[NY*NX];    // from mesh_mask.nc
58double e1t[NY*NX];    // from mesh_mask.nc
59double e2t[NY*NX];    // from mesh_mask.nc
60double e1f[NY*NX];    // from mesh_mask.nc
61double e2f[NY*NX];    // from mesh_mask.nc
62double e3t_0[NZ];    // from mesh_mask.nc
63double e3w_0[NZ];    // from mesh_mask.nc
64double gphit[NY*NX]; // from mesh_mask.nc
65double gphiu[NY*NX]; // from mesh_mask.nc
66double gphiv[NY*NX]; // from mesh_mask.nc
67double gphif[NY*NX]; // from mesh_mask.nc
68double ff[NY*NX]; //
69int mbathy[NY*NX];// from mesh_mask.nc
70double gdept_0[NZ]; //  from mesh_mask.nc
71double gdepw_0[NZ]; // from mesh_mask.nc
72int tmask[NZ*NY*NX]; // from mesh_mask.nc
73int umask[NZ*NY*NX]; // from mesh_mask.nc
74int vmask[NZ*NY*NX]; // from mesh_mask.nc
75int fmask[NZ*NY*NX]; // from mesh_mask.nc
76int tmask_i[NY*NX]; // from mesh_mask.nc
77int bmask[NY*NX]; // from mesh_mask.nc
78
79typedef float netcdf_type;
80
81char const    *mesh_mask_file    = PATH_NCFILES"/mesh_mask.nc";
82int mesh_mask_file_id;
83int e1u_id,e2u_id,e1v_id,e2v_id,e1t_id,e2t_id,e1f_id,e2f_id,e3t_0_id,e3w_0_id;
84int mbathy_id,gphit_id,gphiu_id,gphiv_id,gphif_id,gdept_0_id,gdepw_0_id;
85int tmask_id,umask_id,vmask_id,fmask_id,tmask_i_id,bmask_id; // l'id des variables a lire
86int status;
87
88int neuler=0; //restart file
89
90#   define        ze1ur(i,j)  e2u(i,j) / e1u(i,j)
91#   define        ze2vr(i,j)  e1v(i,j) / e2v(i,j)
92#   define        zbtr2(i,j)  1. / ( e1t(i,j) * e2t(i,j))
93
94void vonclire(int t,int znbval, int ynbval, int xnbval, int ncid, int varid, double vect[]);
95// lire volume 3D au temps t
96void sonclire(int t,int ynbval, int xnbval, int ncid, int varid, double vect[]);
97void zonclire(int t,int znbval, int ncid, int varid, double vect[]);
98// lire surface 2D au temps t
99void vonclire(int t,int znbval, int ynbval, int xnbval, int ncid, int varid, int vect[]);
100// lire volume 3D au temps t
101void sonclire(int t,int ynbval, int xnbval, int ncid, int varid, int vect[]);
102void zonclire(int t,int znbval, int ncid, int varid, int vect[]);
103// lire surface 2D au temps t
104void xinit_mesh_mask_nc();// lire le fichier mesh_mask.nc
105void xistate_rest_file();
106
107
108//Ecriture du netcdf
109void write_rst_global_att(int ncid); //Ecrit les attributs globaux du restart standard
110
111void define_dim(int ncid, int dimid[]);
112//défini les dimensions en x,y,z, et t (unlimited),
113//renvoie les id des dimensions dans le tableau dimid
114//dimid={t_id,z_id,y_id,x_id};
115
116void    xinit_mesh_mask_nc()
117{
118  //ouvrire le fichier mesh_mask.nc
119  mesh_mask_file_id=Ouvre_nc(mesh_mask_file);
120
121  e1u_id=Var_id(mesh_mask_file_id,"e1u");
122  sonclire(0, NY,NX, mesh_mask_file_id, e1u_id,e1u);
123
124  e2u_id=Var_id(mesh_mask_file_id,"e2u");
125  sonclire(0, NY,NX, mesh_mask_file_id, e2u_id,e2u);
126
127  e1v_id=Var_id(mesh_mask_file_id,"e1v");
128  sonclire(0, NY,NX, mesh_mask_file_id, e1v_id,e1v);
129
130  e2v_id=Var_id(mesh_mask_file_id,"e2v");
131  sonclire(0, NY,NX, mesh_mask_file_id, e2v_id,e2v);
132
133  e1t_id=Var_id(mesh_mask_file_id,"e1t");
134  sonclire(0, NY,NX, mesh_mask_file_id, e1t_id,e1t);
135
136  e2t_id=Var_id(mesh_mask_file_id,"e2t");
137  sonclire(0, NY,NX, mesh_mask_file_id, e2t_id,e2t);
138
139  e1f_id=Var_id(mesh_mask_file_id,"e1f");
140  sonclire(0, NY,NX, mesh_mask_file_id, e1f_id,e1f);
141
142  e2f_id=Var_id(mesh_mask_file_id,"e2f");
143  sonclire(0, NY,NX, mesh_mask_file_id, e2f_id,e2f);
144
145  e3t_0_id=Var_id(mesh_mask_file_id,"e3t_0");
146  zonclire(0, NZ, mesh_mask_file_id, e3t_0_id,e3t_0);
147
148  e3w_0_id=Var_id(mesh_mask_file_id,"e3w_0");
149  zonclire(0, NZ, mesh_mask_file_id, e3w_0_id,e3w_0);
150
151  mbathy_id=Var_id(mesh_mask_file_id,"mbathy");
152  sonclire(0, NY,NX, mesh_mask_file_id, mbathy_id,mbathy);
153
154  gphit_id=Var_id(mesh_mask_file_id,"gphit");
155  sonclire(0, NY,NX, mesh_mask_file_id, gphit_id,gphit);
156
157  gphiu_id=Var_id(mesh_mask_file_id,"gphiu");
158  sonclire(0, NY,NX, mesh_mask_file_id, gphiu_id,gphiu);
159
160  gphiv_id=Var_id(mesh_mask_file_id,"gphiv");
161  sonclire(0, NY,NX, mesh_mask_file_id, gphiv_id,gphiv);
162
163  gphif_id=Var_id(mesh_mask_file_id,"gphif");
164  sonclire(0, NY,NX, mesh_mask_file_id, gphif_id,gphif);
165
166  tmask_id=Var_id(mesh_mask_file_id,"tmask");
167  vonclire(0, NZ, NY,NX, mesh_mask_file_id, tmask_id,tmask);
168
169  umask_id=Var_id(mesh_mask_file_id,"umask");
170  vonclire(0, NZ, NY,NX, mesh_mask_file_id, umask_id,umask);
171
172  vmask_id=Var_id(mesh_mask_file_id,"vmask");
173  vonclire(0, NZ, NY,NX, mesh_mask_file_id, vmask_id,vmask);
174
175  fmask_id=Var_id(mesh_mask_file_id,"fmask");
176  vonclire(0, NZ, NY,NX, mesh_mask_file_id, fmask_id,fmask);
177
178  tmask_i_id=Var_id(mesh_mask_file_id,"tmask_i");
179  sonclire(0, NY,NX, mesh_mask_file_id, tmask_i_id,tmask_i);
180
181  bmask_id=Var_id(mesh_mask_file_id,"bmask");
182  sonclire(0, NY,NX, mesh_mask_file_id, bmask_id,bmask);
183
184  gdept_0_id=Var_id(mesh_mask_file_id,"gdept_0");
185  zonclire(0, NZ, mesh_mask_file_id, gdept_0_id,gdept_0);
186
187  gdepw_0_id=Var_id(mesh_mask_file_id,"gdepw_0");
188  zonclire(0, NZ, mesh_mask_file_id, gdepw_0_id,gdepw_0);
189 
190  //gdept_0
191  nc_close( mesh_mask_file_id);
192}
193
194void xistate_rest_file(int rest_file_id){
195  double temp[NZ*NY*NX];
196  int temp_id;
197
198  //-----------un
199  temp_id=Var_id(rest_file_id,"un");
200  vonclire(0, NZ, NY, NX, rest_file_id, temp_id,temp);
201  for(int k=0;k<NZ;k++){
202    for(int j=0;j<NY;j++){
203      for(int i=0;i<NX;i++){
204        YS_ua(0,i,j,k,TU)=temp[(k)*(NY*NX)+(j)*(NX)+(i)];
205      }
206    }
207  }
208  //-----------ub
209  temp_id=Var_id(rest_file_id,"ub");
210  vonclire(0, NZ, NY, NX, rest_file_id, temp_id,temp);
211  for(int k=0;k<NZ;k++){
212    for(int j=0;j<NY;j++){
213      for(int i=0;i<NX;i++){
214        YS_ub(0,i,j,k,TU)=temp[(k)*(NY*NX)+(j)*(NX)+(i)];
215      }
216    }
217  }
218 
219  //-----------vn
220  temp_id=Var_id(rest_file_id,"vn");
221  vonclire(0, NZ, NY, NX, rest_file_id, temp_id,temp);
222  for(int k=0;k<NZ;k++){
223    for(int j=0;j<NY;j++){
224      for(int i=0;i<NX;i++){
225        YS_va(0,i,j,k,TU)=temp[(k)*(NY*NX)+(j)*(NX)+(i)];
226      }
227    }
228  }
229 
230  //-----------vb
231  temp_id=Var_id(rest_file_id,"vb");
232  vonclire(0, NZ, NY, NX, rest_file_id, temp_id,temp);
233  for(int k=0;k<NZ;k++)
234    for(int j=0;j<NY;j++)
235      for(int i=0;i<NX;i++){
236        YS_vb(0,i,j,k,TU)=temp[(k)*(NY*NX)+(j)*(NX)+(i)];
237      }
238
239  //-----------wn
240  //if( lk_vvl )
241  /*  temp_id=Var_id(rest_file_id,"wn");
242  vonclire(0, NZ, NY, NX, rest_file_id, temp_id,temp);
243  for(int k=0;k<NZ;k++){
244    for(int j=0;j<NY;j++){
245      for(int i=0;i<NX;i++){
246        YS_wa(0,i,j,k,TU)=temp[(k)*(NY*NX)+(j)*(NX)+(i)];
247      }
248    }
249    }*/
250  //-----------
251  temp_id=Var_id(rest_file_id,"tn");
252  vonclire(0, NZ, NY, NX, rest_file_id, temp_id,temp);
253  for(int k=0;k<NZ;k++)
254    for(int j=0;j<NY;j++)
255      for(int i=0;i<NX;i++){
256        YS_ta(0,i,j,k,TU)=temp[(k)*(NY*NX)+(j)*(NX)+(i)];
257      }
258
259  //-----------
260  temp_id=Var_id(rest_file_id,"tb");
261  vonclire(0, NZ, NY, NX, rest_file_id, temp_id,temp);
262  for(int k=0;k<NZ;k++)
263    for(int j=0;j<NY;j++)
264      for(int i=0;i<NX;i++){
265        YS_tb(0,i,j,k,TU)=temp[(k)*(NY*NX)+(j)*(NX)+(i)];
266      }
267
268  //-----------
269  temp_id=Var_id(rest_file_id,"sn");
270  vonclire(0, NZ, NY, NX, rest_file_id, temp_id,temp);
271  for(int k=0;k<NZ;k++)
272    for(int j=0;j<NY;j++)
273      for(int i=0;i<NX;i++){
274        YS_sa(0,i,j,k,TU)=temp[(k)*(NY*NX)+(j)*(NX)+(i)];
275      }
276
277  //-----------
278  temp_id=Var_id(rest_file_id,"sb");
279  vonclire(0, NZ, NY, NX, rest_file_id, temp_id,temp);
280  for(int k=0;k<NZ;k++)
281    for(int j=0;j<NY;j++)
282      for(int i=0;i<NX;i++){
283        YS_sb(0,i,j,k,TU)=temp[(k)*(NY*NX)+(j)*(NX)+(i)];
284      }
285
286  //-----------
287  temp_id=Var_id(rest_file_id,"sshn");
288  sonclire(0, NY, NX, rest_file_id, temp_id,temp);
289  for(int j=0;j<NY;j++)
290    for(int i=0;i<NX;i++){
291      YS_sshn(0,i,j,TU)=temp[(j)*(NX)+(i)];
292    }
293
294  //-----------
295  temp_id=Var_id(rest_file_id,"sshb");
296  sonclire(0, NY, NX, rest_file_id, temp_id,temp);
297  for(int j=0;j<NY;j++)
298    for(int i=0;i<NX;i++){
299      YS_sshb(0,i,j,TU)=temp[(j)*(NX)+(i)];
300    }
301
302  //-----------
303  temp_id=Var_id(rest_file_id,"hdivn");
304  vonclire(0, NZ, NY, NX, rest_file_id, temp_id,temp);
305  for(int k=0;k<NZ;k++)
306    for(int j=0;j<NY;j++)
307      for(int i=0;i<NX;i++){
308        YS_hdivn(0,i,j,k,TU)=temp[(k)*(NY*NX)+(j)*(NX)+(i)];
309      }
310
311  //-----------
312  temp_id=Var_id(rest_file_id,"hdivb");// a revoir
313  vonclire(0, NZ, NY, NX, rest_file_id, temp_id,temp);
314  for(int k=0;k<NZ;k++)
315    for(int j=0;j<NY;j++)
316      for(int i=0;i<NX;i++){
317        YS_hdivn(0,i,j,k,TU-1)=temp[(k)*(NY*NX)+(j)*(NX)+(i)];
318      }
319
320  //-----------
321  temp_id=Var_id(rest_file_id,"rotn");
322  vonclire(0, NZ, NY, NX, rest_file_id, temp_id,temp);
323  for(int k=0;k<NZ;k++)
324    for(int j=0;j<NY;j++)
325      for(int i=0;i<NX;i++){
326        YS_rotn(0,i,j,k,TU)=temp[(k)*(NY*NX)+(j)*(NX)+(i)];
327      }
328
329  //-----------
330  temp_id=Var_id(rest_file_id,"rotb"); // a revoir
331  vonclire(0, NZ, NY, NX, rest_file_id, temp_id,temp);
332  for(int k=0;k<NZ;k++)
333    for(int j=0;j<NY;j++)
334      for(int i=0;i<NX;i++){
335        YS_rotn(0,i,j,k,TU-1)=temp[(k)*(NY*NX)+(j)*(NX)+(i)];
336      }
337
338   //-----------
339  temp_id=Var_id(rest_file_id,"gcx");
340  sonclire(0, NY, NX, rest_file_id, temp_id,temp);
341    for(int j=0;j<NY;j++)
342      for(int i=0;i<NX;i++){
343        YS_gcx2(0,i,j,TU)=temp[(j)*(NX)+(i)];
344      }
345
346  //-----------
347  temp_id=Var_id(rest_file_id,"gcxb");
348  sonclire(0, NY, NX, rest_file_id, temp_id,temp);
349  for(int j=0;j<NY;j++)
350    for(int i=0;i<NX;i++){
351      YS_gcx2(0,i,j,TU-1)=temp[(j)*(NX)+(i)];
352    }
353}
354
355void define_dim(int ncid, int dimid[])
356//défini les dimensions en x,y,z, et t (unlimited),
357//renvoie les id des dimensions dans le tableau dimid
358//dimid={t_id,z_id,y_id,x_id};
359{ 
360
361  nc_def_dim(ncid,"x",NX,&dimid[3]);
362  nc_def_dim(ncid,"y",NY,&dimid[2]);
363  nc_def_dim(ncid,"z",NZ,&dimid[1]);
364  nc_def_dim(ncid,"t",NC_UNLIMITED,&dimid[0]);
365 
366 
367 
368}
369
370void write_rst_global_att(int ncid) {
371
372  //:DOMAIN_number_total = 1 ;
373  static int DOMAIN_number_total=1;
374  nc_put_att_int (ncid,NC_GLOBAL,"DOMAIN_number_total",NC_INT,1,&DOMAIN_number_total);
375
376  //:DOMAIN_number = 0 ;
377  static int DOMAIN_number=0;
378  nc_put_att_int (ncid,NC_GLOBAL,"DOMAIN_number",NC_INT,1,&DOMAIN_number);
379
380  //:DOMAIN_dimensions_ids = 1, 2 ;
381  static int DOMAIN_dimensions_ids[]={1,2};
382  nc_put_att_int (ncid,NC_GLOBAL,"DOMAIN_dimensions_ids",NC_INT,2,DOMAIN_dimensions_ids);
383
384  //:DOMAIN_size_global = 32, 22 ;
385  static int DOMAIN_size_global[]={NX,NY};
386  nc_put_att_int (ncid,NC_GLOBAL,"DOMAIN_size_global",NC_INT,2,DOMAIN_size_global);
387
388  //:DOMAIN_size_local = 32, 22 ;
389  static int DOMAIN_size_local[]={NX,NY};
390  nc_put_att_int (ncid,NC_GLOBAL,"DOMAIN_size_local",NC_INT,2,DOMAIN_size_local);
391
392  //:DOMAIN_position_first = 1, 1 ;
393  static int DOMAIN_position_first[]={1,1};
394  nc_put_att_int (ncid,NC_GLOBAL,"DOMAIN_position_first",NC_INT,2,DOMAIN_position_first);
395
396  //:DOMAIN_position_last = 32, 22 ;
397 static int DOMAIN_position_last[]={NX,NY};
398 nc_put_att_int (ncid,NC_GLOBAL,"DOMAIN_position_last",NC_INT,2,DOMAIN_position_last);
399
400 //:DOMAIN_halo_size_start = 0, 0 ;
401 static int DOMAIN_halo_size_start[]={0,0};
402 nc_put_att_int (ncid,NC_GLOBAL,"DOMAIN_halo_size_start",NC_INT,2,DOMAIN_halo_size_start);
403
404 //:DOMAIN_halo_size_end = 0, 0 ;
405 static int DOMAIN_halo_size_end[]={0,0};
406  nc_put_att_int (ncid,NC_GLOBAL,"DOMAIN_halo_size_end",NC_INT,2,DOMAIN_halo_size_end);
407
408  //DOMAIN_type = "BOX" ;
409  nc_put_att_text(ncid,NC_GLOBAL,"DOMAIN_type",3,"BOX");
410
411}
Note: See TracBrowser for help on using the repository browser.